xscreensaver-5.34/README000644 000767 000767 00000207606 12612750642 014561 0ustar00jwzjwz000000 000000 XScreenSaver a collection of free screen savers for X11 and MacOS By Jamie Zawinski and many others http://www.jwz.org/xscreensaver/ =============================================================================== This is the XScreenSaver source code distribution. It is strongly recommended that you install a binary release rather than trying to compile it yourself. Binaries are available for almost all platforms, including MacOS X. See the XScreenSaver web site for details. To compile on a Unix system with X11: ./configure make make install To compile on MacOS X: Use the included XCode project. Requires XCode 4 and MacOS X 10.5 or newer. Interested in writing a new screen saver? See the README.hacking file. =============================================================================== XScreenSaver has an extensive manual -- please read it! =============================================================================== 5.34 * Fixed a crash when hot-swapping monitors while locked. * Fixed some incorrect output from `xscreensaver-command -watch'. * Various OSX and iOS performance improvements. 5.33 * New hacks, `splitflap' and `romanboy'. * Better detection of user activity on modern GNOME systems. * Sonar now does asynchronous host name resolution. * Improved Unicode support. * Updated `webcollage' for recent changes. * Various minor fixes. 5.32 * Fixed some X11 compilation problems. * Fixed display size and shake gestures on iOS. * OSX/iOS Performance improvements. 5.31 * New hacks, `geodesicgears', `binaryring' and `cityflow'. * UTF-8 text support (instead of only Latin1) and antialiased text on X11 with Xft (instead of only on OSX/iOS) in `fontglide', `noseguy', `fliptext', `starwars', and `winduprobot'. The other text-displaying hacks (`apple2', `phosphor', `xmatrix', and `gltext') also now accept UTF-8 input, though they convert it to Latin1 or ASCII. * `glplanet' now has both day and night maps, and a sharp terminator. * Fixed `webcollage' on OSX. * Fixed a transparency glitch in `winduprobot'. * `lockward' works on iOS. * Text and image loading work on OSX 10.10. * Rotation works properly on iOS 8. * Added a search field on iOS. * Preliminary, unfinished support for Android. 5.30 * New hack, `winduprobot'. * Many improvements to `lament', including Leviathan. * Fixed the normals in `flyingtoasters': shading is correct now. * Implemented TEXTURE_GEN in GLES: flying toast is now toasted on iOS. * Make cel-shading sort-of work in `skytentacles' on iOS. * Fixed dragging-to-rotate on rotated iOS devices, I think. * Dragging has inertia now. * Most hacks respond to mouse-clicks, double-taps and swipes as meaning "do something different now". * Reworked OpenGL fonts. * The OSX auto-update installer wasn't working. This time for sure? * Various minor fixes. 5.29 * Downgraded to Xcode 5.0.2 to make it possible to build savers that will still run on 10.6 and 10.7. Sigh. * Updated `webcollage' for recent changes. 5.28 * Fixed some compilation problems and intermittent crashes. * Turned off the OSX 10.6 enable_gc hack. It didn't work. 5.27 * New hacks, `tessellimage' and `projectiveplane'. * Added support for pthreads, because Dave Odell is a madman. * Updated `webcollage' for recent changes. * Minor iOS tweaks to the `analogtv' hacks. * X11: Don't assume Suspend = 0 implies "No DPMS". * Minor updates to `boxed' and `klein'. * Fixed possible crash in `apple2', `noseguy', `xmatrix', `shadebobs'. * Fixed possible crash in OSX preferences. * OSX Performance improvements. * Plugged some leaks. 5.26 * More auto-updater tweaks. 5.25 * Try harder to bypass Quarrantine and Gatekeeper in OSX installer. * Some files were missing from the tarball. 5.24 * Added "Automatically check for updates" option on OSX. * Updated feed-loading for recent Flickr changes. * Updated `webcollage' for recent Google changes. * Added Instagram and Bing as `webcollage' image sources. * Updated to latest autoconf. * Bug fixes. 5.23 * New hack, `geodesic'. * iOS and OSX: huge XCopyArea performance improvements. * More heuristics for using RSS feeds as image sources. * Improved Wikipedia parser. * Updated `webcollage' for recent Flickr changes. * Added Android to `bsod'. * OSX: Added a real installer. * iOS and OSX: fixed a font-metrics bug. * iOS: Fixed aspect ratio bug in non-rotating apps when launched in landscape mode. * Made `quasicrystal' work on weak graphics cards. * iOS: fixed `ifs'. * Better compression on icons, plists and XML files: smaller distribution and installation footprint. * Reverted that DEACTIVATE change. Bad idea. * `Phosphor' now supports amber as well as green. 5.22 * New hacks, `kaleidocycle', `quasicrystal', `unknownpleasures' and `hexadrop'. * Performance improvements for `interference'. * Fixed possible crashes in `apple2', `maze', `pacman', `polyominoes', `fireworkx', `engine'. * Fix for `bumps' in 64 bit. * Fixed preferences crash on old iOS 5 devices. * Fixed "Shake to Randomize"; display name of saver. * Fixed weirdness with "Frame Rate" sliders on iOS. * Fixed rotation problems with `pacman', `decayscreen'. * Better dragging in `fluidballs'. * Ignore rotation in hacks that don't benefit from it. * Ignore DEACTIVATE messages when locked, instead of popping up the password dialog box. 5.21 * Changed default text source from Twitter to Wikipedia, since Twitter now requires a login to get any feeds. * New version of `fireworkx'. * Minor fixes to `distort', `fontglide', `xmatrix'. * New MacOS crash in `bsod'. * New mode in `lcdscrub'. 5.20 * Support for iPhone 5 screen size. * Fixed modifier key handing in Apple2.app and Phosphor.app on MacOS. * Various minor bug fixes. 5.19 * MacOS 10.8.0 compatibility. * iOS performance improvements. 5.18 * iOS responds to shake gestures to randomize. * iOS can load images from your Photo Library. * iOS has clickable Wikipedia links in Settings panels. * Made `pipes' be ridiculously less efficient, but spin. * Added better mouse control to `rubik', `cube21', `crackberg', and `julia'. * Cosmetic improvements to `queens' and `endgame'. * `sonar' can now ping local subnet on DHCP. * Most savers now resize/rotate properly. * Various fixes. 5.17 * More iOS tweaks. * Fixed some compilation problems. * Enlarged the texture image for `lament'. 5.16 * Ported to iPhone and iPad. * XInput devices now also ignore small mouse motions. * Loading images via RSS feeds is much improved. * Various minor fixes. 5.15 * New hacks, `hilbert', `companioncube' and `tronbit'. * Image-manipulating hacks can now load from RSS or Atom feeds: `imageDirectory' may contain a URL. * Updated `webcollage' for recent search engine changes. * `phosphor' and `apple2' can now be run as standalone terminal emulator applications on MacOS. * `photopile' sped up. * New molecule in `molecule'. * "Upgraded" to XCode 4.0, which means that MacOS 10.4 PPC builds are impossible, and Intel is now required. * Turned on LC_CTYPE on Linux; maybe Japanese password entry works now? 5.14 * Fixed crash in Blank Only Mode when DPMS disabled. * Added "Quick Power-off in Blank Only Mode" option. * BSOD GLaDOS. 5.13 * Optionally enabled full-scene OpenGL antialiasing. Set the resource `*multiSample' to true if doing so doesn't kill performance with your video hardware. * New version of `glhanoi'. * Image-loading hacks that display the file name now also display the sub-directory (xscreensaver-getimage now returns relative paths under imageDirectory). * Passwords that contain UTF-8 non-Latin1 chars are now typeable. * Numerous minor stability fixes. 5.12 * Big speed improvement on OSX for heavy XCopyArea users (`xmatrix', `moire2', `phosphor', etc.) * Plugged a bad OSX-only Pixmap leak. * Kludged around the OSX pty bug that caused text to be truncated in phosphor, starwars, apple2, etc. * New molecule in `molecule'. * `glhanoi' now supports an arbitrary number of poles. * Turned on "New Login" button by default. * Added support for XInput-style alternate input devices. 5.11 * New versions of `photopile', `strange'. * Worked around MacOS 10.6 garbage collector bug that caused the screen saver process to become enormous. * Fixed flicker in `pipes', `cubestorm', and `noof'. * Fixed EXIF rotation on MacOS 10.6. * Fixed desktop-grabbing when screen locked on MacOS. * Minor fixes to `circuit', `polyhedra', `tangram', `gears', `pinion', `substrate', `xanalogtv'. * Fixed some leaks in `xanalogtv' and `apple2'. * Better seeding of the RNG. 5.10 * Fixed some crashes and color problems on MacOS 10.6. * Retired `hypercube' and `hyperball', which are redundant with `polytopes'. 5.09 * Ported to MacOS 10.6, including various 64-bit fixes. * New hack, `rubikblocks'. * Fixed another potential RANDR crash. * Use correct proxy server on MacOS. * `molecule' now correctly displays PDB 3.2 files. * Updates to `mirrorblob', `glhanoi', and `sonar'. * Rewritten version of `klein' hack. * New hack, `surfaces', incorporating objects from old `klein' hack, plus new ones. * Merged `juggle' and `juggler3d' hacks. * Fixed compilation under gcc 4.4.0 (strict aliasing). * Fixed intermittent failure in `xscreensaver-command'. 5.08 * 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 twitpic.com as well. 5.07 * Xinerama/RANDR tweaks for old-style multi-screen. * 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 MacOS now. * Added transparency to `stonerview'. * Improved layout of the preferences dialogs: they should all now be usable even on ridiculously tiny laptop screens. * MacOS preferences text fields now prevent you from entering numbers that are out of range. * Added "Reset to Defaults" button on X11. * Added relevant Wikipedia links to many of the screen saver descriptions. * All hacks support the `-fps' option, not just GL ones. * The `-fps' option now shows CPU load. 5.06 * Xinerama/RANDR fixes: this time for sure. It should now work to add/remove monitors or resize screens at any time. * New hack, `skytentacles'. * New version of `gleidescope'. * Added the `-log' option to the xscreensaver daemon, since a truly shocking number of Linux users seem to have no idea how to redirect output to a file. * Added `-duration' arg to most image-loading hacks, so that they pick a new image every few minutes. * Added an ATM crash to `bsod'. 5.05 * New hacks, `cubicgrid', `hypnowheel', and `lcdscrub' (which isn't really a screen saver). * Updates to `m6502' and `gears'. * Fixed double-buffering problems in `cubestorm' and `noof'. * Better handling of horizontal scroll wheels. * Attempt to work around latest Xinerama braindamage: if the server reports overlapping screens, use the largest non-overlapping rectangles available. * Don't warning about receipt of bogus ClientMessages, since Gnome's just never going to stop sending those. * Worked around MacOS 10.5 perl bug that caused the text-displaying hacks to fail on some systems. * Hopefully fixed font-related System Preferences crashes in MacOS savers. * The recent PAM changes broke the "Caps Lock" warning in the password dialog, the failed login warnings, and syslogging. Fixed all that. 5.04 * Fixed a possible crash in the unlock dialog (more fallout from the recent PAM changes...) * New hacks, `moebiusgears', `abstractile', and `lockward'. * Rewrote `gears' to use better (involute) gear models, and to be more random. * Minor updates to `cwaves', `voronoi', `deco', `glcells', `rd-bomb', `fireworkx' and `webcollage'. * `pong' can now display the current time as the score. * `xmatrix -mode pipe' works better. * Minor tweaks for compilation on MacOS 10.5.0. 5.03 * New hacks, `cwaves', `glcells', `m6502', and `voronoi'. * Minor fixes to `bsod'. * Fixed possible crash with PAM USB-dongle auth. * Updated `webcollage' to track recent Google Images and Flickr changes. 5.02 * Reworked PAM code to support fingerprint readers, etc. * Ported 'webcollage' to MacOS. * Added MacOS 10.2 and 10.3 kernel panics to `bsod'. * Fixed a Xinerama crash when changing the screen count. * New blobbier `mirrorblob'. * Minor updates to `lisa', `bsod', `ifs', `hypertorus', `polytopes', `circuit', `endgame', `crackberg', `flipflop', `flipscreen3d', `fliptext', and `carousel'. * Enabled multi-threaded OpenGL on MacOS. 5.01 * Backed out recent locale-related changes, since they broke far more things than they fixed. * Fail gracefully with ridiculously small window sizes. * `xflame' and `flag' ignore bitmap option on MacOS. * `speedmine' prefs work on MacOS. * Better explosions in `boxed'. * More dynamic motion in `sproingies'. * More options in `flipflop'. * Minor updates to `topblock'. * Various other minor fixes. 5.00 * Ported to MacOS X! (10.4.0 or newer) * API change: instead of providing a single screenhack() function that does not return, screen savers using the screenhack.h framework must now provide "init" and "draw one frame" functions instead. All bundled savers have been updated; third-party patches will need work. * All image-loading happens asynchronously. * xscreensaver-getimage-file caches the contents of the image directory for a few hours, so consecutive runs won't have to re-list the whole directory tree. * New hacks, `topblock' and `glschool'. * Removed `xteevee' (superceded by `xanalogtv'). * Added variable-sized puzzle pieces to `jigsaw'. * Changes to the defaults and command-line options of many hacks to make the .xml files more consistent. * Reap zombies in `glslideshow' and `carousel'. * `sonar' works without setuid on MacOS (dgram icmp). * `xmatrix -mode pipe' displays the text of a subprocess. * `endgame' has higher resolution chess-piece models. * `webcollage' takes a -directory option to get images from a local directory. * The RPM spec file no longer auto-restarts xscreensaver when a new version is installed. Restart it manually. 4.24 * New versions of `cube21', `glsnake', `celtic'. * Backed out a DPMS-related patch that cause desktop flickering with some X servers. * Fixed startup crash in getgroups() when running setuid. * Default to not displaying stderr on the saver window. * Fixed bad free() in "Documentation" button. * Don't try to run hacks that aren't installed. * Minor fixes to various XML config files and man pages. 4.23 * New hacks, `glhanoi', `cube21', `timetunnel', `juggler3d', and `celtic'. * New versions of `tangram', `webcollage', `hypertorus', `polytopes', and `ripples'. * `sonar' is now quiet about unresolvable hosts. * Minor corrections to BASIC code in `apple2'. * xscreensaver-demo now provides an RPM clue when none of the hacks seem to be installed. * Don't install `ant' by default, since there is some Java tool of that name, which was causing confusion. And also it's boring. * Made screen grabbing work again on MacOS 10.4.2. * No longer prints bogus warnings about ClientMessages intended for the window manager. * Ignore unprintable characters in passwd entry field. * Fixed yet another cross-host-display image-loading endian problem. * `xscreensaver-command -watch' and `-time' now work on 64-bit machines. 4.22 * Fixed a bug in the new mouse-motion code that caused the screen to never blank on multi-head non-Xinerama systems. Oops. * New hacks, `interaggregate', `antmaze', `tangram', and `crackberg'. * Minor tweaks to `fiberlamp', `ifs', `slidescreen', `zoom', `sonar', `fireworkx', `whirlwindwarp', `bubble3d', and `rd-bomb'. * Added motion blur to `blinkbox'. * `bsod' now includes Longhorn's "RSOD", and OS/2. * Fixed `-wireframe' usage in most hacks and man pages. 4.21 * New hack: `fliptext'. * Changed default configure installation directories: /usr/bin/ for xscreensaver, etc.; /usr/libexec/xscreensaver/ for hacks; /usr/share/xscreensaver/config/ for xml files. * All the text-manipulating screen savers can have their text source configured via `xscreensaver-demo' now. * xscreensaver.spec now builds three RPMs: base (no hacks); extras (2d hacks); and gl-extras. * Added `-program' and `-front' option to `gltext'. * Added `-shells' to `molecule'. * Fixed text-alpha glitch in `carousel'. * New `pacman': the ghosts can be killed now. * Fixed a bug in screen-grabbing GL hacks where images would be tiled instead of scaled on machines that can't do large textures. * `webcollage' can hit Flickr now. * New (rewritten) implementation of `ifs'. * The unlock dialog can be made to have a "New Login" button that will run `gdmflexiserver'. Experimental! * Fixed non-ASCII display bug in `starwars'. * Configure finds a default for imageDirectory. * "xscreensaver-command -lock" now works even if in "screensaver disabled" mode. * If a bad password is typed while CapsLock is on, the unlock dialog says "CapsLock?" instead of "Sorry". * Mouse motion only counts as activity if the mouse moved more than 10 pixels (so the screen won't unblank every time you bump your desk.) * New mode option "random-same": if you have multiple monitors, this will run the *same* randomly chosen hack on each screen, instead of different ones on each. 4.20 * New hacks, `fiberlamp', `boing', `boxfit', and `carousel'. * Rewrote `glslideshow' again: should be faster now. * Sped up loading of images in GL programs. * `starwars' uses texture-mapped fonts now. * New `bsod' modes: tru64, hppa, and nvidia. * Updates to `webcollage', `juggle', `pinion', `fireworkx', `sonar', `extrusion', `substrate', and `pong'. 4.19 * New hacks, `substrate', `intermomentary', `fireworkx', and `pinion'. * New version of `flow'. * Made /proc/interrupts work again on Linux 2.6. * Made `analogtv' not hog the CPU. * Made analogtv-based hacks work properly on PPC/ARM. * Fixed a bad memory leak in `piecewise'. * Minor updates to `sonar', `molecule', `glmatrix', `galaxy', and `webcollage'. * Removed support for GTK 1.x (everyone uses 2.x now.) 4.18 * Oops, pay no attention to the man behind the curtain. 4.17 * New hacks, `anemotaxis' and `memscroller'. * Fixed a bad bug that caused `vidwhacker' to never die. * Fixed normals and lighting in `polyhedra'. * Don't reuse the window when changing hacks (to work around bugs in some GL implementations.) * Made `xscreensaver-getimage-file' skip thumbnail-sized images. * Fixed endian problem in `barcode' on non-x86. * Updates to `webcollage', `apple2', `fuzzyflakes', `atunnel', and `pacman'. * Timing tweaks to `bubble3d', `bouncingcow', `engine', `gltext', `lavalite', `molecule', `spotlight', `sballs', `boxed', `blinkbox', and `circuit'. * Configure updates for Fedora core 2 / xorg 6.7.0. * Compile without warnings under gcc 3.3.3. * I give up: don't blank or lock the screen if we can't get a keyboard grab. In that case, both choices are bad. 4.16 * New hacks, `polyhedra', `fuzzyflakes', `antinspect', and `providence'. * Minor updates to `webcollage', `bsod', `endgame', `antspotlight', `xmatrix', and `glmatrix'. * Added support for the RANDR (Resize and Rotate) extension to detect when the size of the desktop has been changed while xscreensaver is already running. * Possibly-futile attempt to work around "rdesktop" focus/grab idiocy. * Made `xscreensaver-getimage -file' still work even if imageDirectory is unset. * Convert Latin1 to ASCII in `starwars' and `phosphor' (since the GLUT font only has ASCII glyphs.) * Fixed randomization in `noof'. * Added "GetViewPortIsFullOfLies" preference to work around longstanding XFree86 bug #421. * Made `sonar' subnet pinging work properly on bigendian machines (e.g., PPC.) 4.15 * New hacks, `wormhole', `mismunch', `noof', and `pacman'. * `phosphor' and `apple2' include vt100 emulators now: this means you can do "phosphor -program top", or can use either program as an xterm replacement: "apple2 -text -fast -program 'xemacs -nw'". * `analogtv' (and related) fill the screen better. * The '-gradient' option works in `atlantis' now. * Minor updates to `blinkbox', `queens', `endgame', `glmatrix', `mirrorblob', `blocktube', and `molecule'. * Integrated SuSE's "external passwd helper" support. * Marginally better /tmp handling in various programs. * Updated config defaults for xplanet 1.0.3. * Portability fixes. 4.14 * New hacks, `fontglide', `apple2', `xanalogtv', `pong', `gleidescope', `mirrorblob', and `blinkbox'. * New version of `glsnake' (with many more models.) * Another Windows crash in `bsod'; also HVX/GCOS6/TPS6. * New version of `endgame'. * Screen grabbing works on MacOS X. * Various minor fixes. 4.13 * On Xinerama systems, xscreensaver now runs one hack on each monitor (just like in "real" multi-head mode) instead of running one hack stretching across all the screens. Note that for this to work with any 3rd party screensavers, they must update their "vroot.h" file. * `webcollage' and `vidwhacker' display images using `xscreensaver-getimage' now. * Added `ljlatest' script for use with `starwars' and `phosphor'. 4.12 * New GL hacks, `flipflop', `antspotlight', and `polytopes'. * Added VMS to `bsod'. * Compile without warnings in "gcc -pedantic". * Updates to `webcollage' and `queens'. * Fixed a bug that could cause PAM to hang. 4.11 * New hacks, `hypertorus', `cubestorm', `glknots', `blocktube', and `glmatrix'. * Updates to `cloudlife', `engine', `xmatrix', and `sonar'. * Rewrote `glslideshow': it should work on somewhat wimpier video cards now. * Various portability tweaks. 4.10 * New hacks, `cloudlife' and `klein'. * Added Apple ][+, HPUX, and OS/390 sessions to `bsod'. * Added some Matrix Reloaded text to `xmatrix'. * Updates to `webcollage', `eruption', `jigglypuff', `metaballs', and `endgame'. * Completely ignore the `memoryLimit' setting now, since it was still causing people GL grief. * Various minor fixes. 4.09 * New hacks, `flyingtoasters', `bouncingcow', `jigglypuff', and `glslideshow'. * More models in `engine'. * Rewrote `xscreensaver-getimage' to remove reliance on external image loaders (xv, chbg, xloadimage, etc.) and to reduce flicker when loading files. * Made `gflux' and `flipscreen3d' be mouse-spinnable. 4.08 * New hacks, `atunnels' and `piecewise'. * Physics improvement in `fluidballs'. * Various fixes for XDarwin systems (X11 on MacOS X.) * Added -clock option to `barcode'. * Minor fixes to `endgame', `flurry', `flipscreen3d', and `gflux'. 4.07 * New hacks, `flurry', `metaballs', `eruption', `popsquares', and `barcode'. * Minor updates to `maze' for high density mazes. * Added double buffering to `fluidballs' and `whirlygig'. * Bug fixes for running xscreensaver to a remote XFree86 display (which nobody would ever do...) * Updated `webcollage' (faster Alta Vista searching.) * Updated `glplanet' so the sun sets in the west. * Updated `sproingies' with smooth, unsegmented surfaces. * Fixed Perl version-sensitivity in `xscreensaver-getimage-file'. * Fixed GTK2 scrolling bug in `xscreensaver-demo'. 4.06 * New hack, `glblur' (disabled by default, since it requires fast OpenGL texture support.) * New hack, `halftone'. * Updates to `endgame', `queens', `bumps', `glplanet', `engine', and `circuit'. * New version of `menger' that uses far fewer polygons. * Fixed minor bug in `critical' that could cause some bogus X servers to crash. * Better labels in `molecule': the labels now appear to be attached to the atoms, instead of floating in front of the whole scene. * Fixed bug that could rarely cause GL hacks to fail to double-buffer (causing intermittent flickering.) * Fixed a relative-URL-parsing bug in `webcollage'. * Fixed a bug that (sometimes) caused the window manager close box to kill `xscreensaver-demo' with a crash instead of a graceful exit. * Updated xscreensaver.pam to the Red Hat 7.3 way. * More Gnome2-related configure crap. * Updated to latest `config.guess' and `config.sub'. * Fixed occasional core dump in `distort'. * Added a Linux fsck failure and kernel panic to `bsod'. * Added MacOS X kernel panic to `bsod'. * Fixed a bug in `bsod' (all bsod bugs are ironic.) * Fixed a bug that caused `xscreensaver-gl-helper' to print a nonsense visual ID with some versions of `printf': this could cause GL programs to display incorrectly (e.g., flickery.) 4.05 * More `configure' tweaks to try and get things working on systems that both Gtk 1.x and 2.x installed. * New hack, `endgame'. * Minor updates to `gltext'. 4.04 * Support for GTK 2.x / GNOME 2.x. * The `configure' script will now use `pkg-config' if you have it, in preference to `gtk-config', etc. * New hacks, `lavalite', `queens', and `anemone'. * Minor updates to `spheremonics', `gltext', `xmatrix'. * You can use the mouse to manually spin most of the GL hacks now (when they are displaying in a window.) * Fixed a bug in `webcollage' (due to recent Alta Vista url changes) that was causing it to try and load incorrect image URLs. * Made `xscreensaver-getimage' use gdk_pixbuf if it is available: this means that those hacks that load images will no longer rely on "xv", "xloadimage", etc. This will close a race condition that could sometimes cause your desktop background to be changed; and also makes it possible for those programs to operate on image files when running in windowed mode. * `webcollage' can now be used in conjunction with `driftnet' to display images snooped from your local ethernet instead of obtained from search engines. * Added man pages for all the hacks that didn't have them. 4.03 * New hack, `spheremonics'. * Minor updates to `webcollage', `cage', `moebius', `morph3d', `boxed', `circuit', and `helix'. * `pulsar' and `extrusion' can now load texture JPEGs. * `rubik' now does non-square cubes. * `fluidballs' now does various sizes of balls. * `menger' and `sierpinski3d' now also show polygon counts in -fps mode. * `molecule' displays real subscripts in the formulae. * GTK internationalization/localization support. * Better detection of the various versions of libxml. * Upgraded to autoconf 2.53 (from 2.13.) 4.02 * Plugged a few minor leaks in `xscreensaver' and `xscreensaver-demo'. * New hacks, `cubenetic' and `fluidballs'. * Sped up `pipes'. * Fixed sphere projection error in `glplanet'; installed a better image of earth. * Added Win2K and MacOS 1 crashes to `bsod'. * Put back previous (better) version of `forest' that was accidentially downgraded in the last release. * New version of `bumps'. * Made FPS computation in GL hacks more efficient: it will influence the results less, thus resulting in higher (but more accurate) reported frame rates. 4.01 * New hacks: `twang', `glsnake', `boxed', `sballs', and `glforestfire'. * New hacks `apollonian', `euler2d', `juggle', `polyominoes' and `thornbird', from xlockmore. * Merged recent xlockmore changes into `ant', `braid', `demon', `discrete', `drift', `fadeplot', `forest', `grav', `hopalong', `ifs', `laser', `lightning', `lisa', `lissie', `loop', `mountain', `penrose', `rotor', `sierpinski', `slip', `sphere', `spiral', `strange', and `vines'. * Fixed the `gltext' bug that sometimes caused horizontal lines to vanish again. This time for sure. * Sped up `webcollage' by adding a C helper program to replace the PPM pipeline. It also pastes images semi-transparently now. * Added support for the gdk_pixbuf library: if this lib is available, then `blitspin', `xflame', and `flag' can load GIF, JPEG, and PNG images in addition to XPM and XBM. * Fixed a rare race condition where the desktop-grabbing hacks could sometimes leave the screen wedged, if the user moved the mouse exactly when they were grabbing the screen image (it would un-wedge the next time the saver timed out or was activated.) * Fixed incorrect colors in the screen-grabbing GL hacks (`gflux' and `flipscreen3d'.) * Made SIGHUP restart the daemon process (though using `xscreensaver-command -restart' is still the preferred way.) * Tweaks to `xspirograph'. * Minor configure and portability tweaks. 4.00 * Redesigned `xscreensaver-demo' GUI: it now includes small-preview and per-hack configuration dialogs. * Added three new modes of operation: `One Screen Saver', `Blank Screen', and `Don't Blank' (in addition to the historical `Random Screen Saver'). * Configure now defaults to installing the hacks in /lib/xscreensaver/ instead of /bin/. (Most distros already did it this way.) * New GL hacks, `menger', `engine', `flipscreen3d'. * Made `sierpinski3d' be more colorful. * New versions of `xmatrix' and `nerverot'. * Fixed a bug in `starwars' that made the font be drawn with thin lines in -root mode. * Fixed a bad colormap bug in `crystal' that could make *subsequent* hacks malfunction! * Made `gflux' able to grab screen images (`-mode grab'). * Updated `webcollage' for recent search engine changes. * Removed most command-line options to `xscreensaver': just edit the ~/.xscreensaver file instead. * Improved behavior on multi-screen and Xinerama systems: the mouse now stays on the screen where the user left it, and the password and splash dialogs always appear on the screen that has the mouse. * Made the splash dialog use more Gtk-like colors; made it have only two buttons, "Settings" and "Help". * Made `sonar' understand `.ssh/known_hosts2' format files, and be better about stripping out illegal addresses. 3.34 * Turned `memoryLimit' off by default, sigh. Apparently some versions of the GL libraries (appear to) allocate hundreds of megs for every GL program, so `memoryLimit' was causing GL programs to malfunction or crash on those systems. * Improved fading on TrueColor XFree86 4.1.x systems. * New GL hack, `circuit'. * Added `fuzz' mode to `decayscreen'. * New version of `whirlygig'. * Added links to `xplanet' and `sphereEversion'. * Fixed rare race condition that could make `sonar' hang. * Fixed potential crash in `speedmine'. * Made `xscreensaver-demo' not crash when imageDirectory was set to a non-existent directory. * Made `xscreensaver-getimage-video' invoke XawTV's `streamer' program better. * Made `phosphor' and `starwars' deal with CR, LF, or CRLF line endings. * Changes for Cygwin compilation environments. * Made `sonar' compile on systems that can't ping. * Configure changes for HPUX 10.20. * Made PAM code work on Red Had 4.2 systems. * Made `xscreensaver-command -deactivate' work when the saver is not active: what that does is reset the idle timer, as if keyboard input had been detected. This was added for the benefit of people writing DVD-playing software: they can now prevent the screensaver from kicking in by sending a -deactivate message once a minute while the movie is playing and not paused. * Various minor portability tweaks. 3.33 * New hacks, `speedmine' and `whirlygig'. * Sped up `pyro', made the explosions look a bit better. * Added better stars to `glplanet' and `starwars'. * Many internal changes to `webcollage'. * Some new options to `attraction'. * Minor fix to `noseguy' to avoid un-erased pixels. * Rewrote the screen-eraser effects so that they complete in the same amount of time regardless of how slow your X server is (some of them were glacial on servers with slow blitting.) * Fixed a potential free memory reference that could sometimes cause a crash at startup. * Possibly fixed a problem that could cause the daemon to crash with an X error. I was never able to reproduce this problem, but I think I might have figured out what caused it. * Worked around a problem that caused PAM authentication to fail on some Red Hat 7.x systems. * Added a `memoryLimit' parameter that controls the amount of memory a graphics hack may allocate: if they try to allocate more than this, malloc() will fail (and they will exit or (safely) crash, rather than hogging memory.) Default is 50M. * Made `gnome-help-browser' be the default way to display man pages in `xscreensaver-demo', if running on a GNOME system. 3.32 * The image-manipulating hacks (`slidescreen', etc.) can now operate on randomly chosen image files from disk, or on frames captured from the system's video input, instead of (or in addition to) manipulating images of the desktop. * Rewrote `vidwhacker' to use the new image-grabbing mechanism. * Made fading work on TrueColor XFree86 4.x systems. * Fixed a subtle rendering bug in `atlantis' (the fish were inside out!) * Made `atlantis' have a texture simulating light reflections from the surface of the ocean. * Fixed up label placement in `molecule'. * Better color bars in `xteevee'. * Made `install-strip' not try to strip scripts. 3.31 * Put in more sensible defaults for DPMS, and updated the documentation to reflect the fact that all your DPMS settings are now belong to xscreensaver. * Fixed the `xscreensaver.spec' file so that `--force' is no longer needed. * New versions of `rotzoomer' and `nerverot'. * Fixed an OSF/1 compilation problem in `molecule'. 3.30 * New hacks, `molecule', `dangerball', and `rotzoomer'. * New version of `gflux'. * Made `gltext' able to display the current time. * Fixed a floating-point-precision problem in `gltext' that sometimes caused horizontal lines to vanish. * Removed the `-window-id' option from the hacks: it never worked right, and was unnecessary. * Made the `starwars' hack use thicker lines, antialias the text, and fade out at the far edge instead of just dropping off. * Fixed an SHM segment leak in `moire'. 3.29 * Better rendering of the new logo. * New hack, `gltext'. * Added `-planetary' option to `gears', to draw a different kind of gear system. * Made motion and rotation be smoother in `gears', `glplanet', `moebius', `rubik', and `sierpinski3d'. * Improved coloration in `sierpinski3d'. * Made the GL hacks react to window size changes. * Made most of the GL hacks take a -fps option (like `pulsar' did), so you can use them to benchmark your 3D hardware. * Fixed the previous fix to `sonar'. * Minor fix to `nerverot'. Made sonar able to ping hosts on DEC OSF1. * Eliminated a bogus "didn't get enough colors" warning in some of the hacks. 3.28 * New logo for xscreensaver! * New hacks, `starwars' and `stonerview'. * Made the motion of the bouncing ball in `stairs' be a little less jerky. * Made newly-added screenhacks be added to .xscreensaver automatically: if there are hacks in the app-defaults file that are not also in ~/.xscreensaver, they will be added to the end of the list. * Redid the `Screensaver Options' part of the control panel; xscreensaver now lets you configure your DPMS settings. * Fixed some Makefile problems with non-GL builds. * Fixed detection of MesaGL for version 3.3. * Better workaround to Red Hat 7.0's broken gcc. * Added Sparc Solaris kernel panic to `bsod'. 3.27 * New hacks: `zoom' and `whirlwindwarp'. * Fixed a free-memory-reference bug in `sonar'. * Better error handling when there are no suitable GL visuals. * Added diagnostic dialog when xscreensaver-demo is unable to launch xscreensaver (e.g., when running as root.) * Fixed a bug that caused screenhack argument changes to be ignored when xscreensaver-demo was running as root (if "root" and "nobody" have different home directories.) * Made the programs default to ":0" if $DISPLAY is unset. * Made the `-verbose' output include information about which server extensions were supported at compile time. * Worked around Red Hat 7.0's broken gcc 2.96. * Updated default delays on the GL hacks to look better on machines with super-fast 3D hardware. * Install `screensaver-properties-capplet' to work around the usual egregious GNOME lossage. 3.26 * Added "enabled" checkboxes in the list of hacks in xscreensaver-demo (Gtk version only.) * New hacks `hyperball', `xrayswarm', and `gflux'. * New versions of `nerverot', `galaxy', and `hypercube'. * Small fixes to `phosphor', `shadebobs', `xflame', and `sonar'. * Added external helper program `xscreensaver-gl-helper' to figure out which X visual to use for OpenGL programs. * Configure updates for XFree86 4.0, and for BSD. * Made it be more tolerant of bogus /etc/group files. * When installing the PAM config file, first try to just copy an existing "xdm" or "login" config file, so that xscreensaver does authentication in the same way as the rest of the system. 3.25 * New hack, `nerverot'. * Added BSD kernel panic to `bsod'. * New version of `shadebobs'. * New version of `petri'. * Updated `webcollage' to handle recent Altavista URL format changes; made it search the AP photo gallery. * Revamped command-line options of `sonar' and made it properly handle subnets. * The `bubbles' hack can now trickle up or down the screen. * The `xsublim' hack can now read its text from programs. * Support for GLE version 3 in `extrusion'. * Fixed compilation problems in `maze'. * Fixed a rare crash in `flow'. * Fixes for minor installation problems. 3.24 * Added `-ignorant' option to `maze' hack. * Updates to `critical', `bsod', `xflame', and `flow'. * Added support for Kerberos 5 (via its Kerberos 4 compatibility layer.) * Fixed a bad leak in `xteevee'. * Updated `webcollage' to handle recent Altavista URL format changes. * Removed xscreensaver-demo's `Ok' and `Cancel' buttons, since they were confusing people: all changes are now instantanious. * Made xscreensaver-demo install itself into the Gnome Control Center. 3.23 * Fixed some misplaced text fields in the Motif version of xscreensaver-demo; fixed a crash in the Gtk version that would happen if the programs list was empty. * Fixed a recently-introduced bug in `pulsar'. * Made `sierpinski3d' use solid tetrahedrons instead of points. * Added `-trace' option to `xmatrix'. * Added new hacks `xteevee' and `xspirograph'. 3.22 * Fixed some bugs in xscreensaver-demo. * Rewrote the Motif version of xscreensaver-demo to match the new Gtk version. * The Athena toolkit is no longer supported. 3.21 * Tweaked the xscreensaver-demo UI (Gtk only.) * Fixed a few visual selection bugs. I think the proper GL visual should be used with nVidia systems now. * Made the Makefiles obey $install_prefix. * Made the `xscreensaver.spec' file able to generate both GL and non-GL packages simultaneously. 3.20 * Added new hacks `ripples' and `sierpinski3d'. * Made `xscreensaver-command -exit' be silent when no screen saver was running (instead of complaining.) * Made `webcollage' and `vidwhacker' use `xloadimage' when available (in addition to `xli' and `xv'.) * Improved memory usage in `petri' and gave it a hard cap on how much memory it can allocate. * Added `-watch' option to `xscreensaver-command'. * Made `xscreensaver-demo' come up with the most-recently-run hack selected by default. * Rewrote the Gtk version of `xscreensaver-demo'. It's a lot easier to use now. * Extended the format of the programs list in the .xscreensaver file, for the benefit of the new capabilities of `xscreensaver-demo'. NOTE: you might want to delete your ~/.xscreensaver file and allow it to be re-created! The old one should still work, but xscreensaver-demo won't be as pretty. 3.19 * Fixed gcc dependencies in `bumps' and `ccurve'. * New hack, `extrusion'. * Some of the web sites that `webcollage' was using as its sources changed formats; tweaked it to understand the current layouts. * Added typeahead in the password dialog: if the screen is locked, and you unlock it by typing a character, that key will be automatically inserted in the password dialog (unless it is Return, Enter, Space, or a non-printing key like Shift.) * Made `xmatrix' take a `-small' option, since some folks with tiny screens prefer a smaller font. 3.18 * New versions of `shadebobs', `lmorph', and `distort'. * Added `ccurve', `blaster', and `bumps' hacks. * Replaced `forest' hack with a rewritten version. * Worked around a Xinerama server bug. * Fixed a bug I introduced in 3.10 that caused some hacks to print out superfluous warnings about not having gotten enough colors. * Made `sproingies' obey the `-delay' option. * Fixed a portability bug in `shadebobs'. * Made `webcollage' and `vidwhacker' use `xli' in preference to `xv', if it is available. * Added a new source of images to `webcollage'. * If running under KDE, xscreensaver will add itself to KDE's list of screensavers (via xscreensaver.kss.) * Improved detection of GL libraries. * Made the password dialog include the date and time. 3.17 * New version of `webcollage' -- deals better with corrupted images, and can use an http proxy. * New hack, `xsublim' (run it in the background, rather than adding it to the programs list.) * The xscreensaver daemon was leaking a file descriptor each time you edited your .xscreensaver file. Fixed. 3.16 * New version of `shadebobs'. * Improved image selection in `webcollage', and sped it up slightly. * Made configure find the right version of perl. * Rewrote the CGI part of `webcollage'. * `make clean' was deleting some things it shouldn't. * Fixed a typo in the default programs list. 3.15 * Added `webcollage' and `shadebobs' hacks. * Added a `-stdout' arg to `vidwhacker' so that it can be used in a pipeline. * Made `petri' use less memory. 3.14 * Various improvements to the Gtk port. * Turned off PAM by default on Solaris, since PAM seems generally to be misconfigured out-of-the-box. * Made the `--without-gtk' configure option work. * Made configure check the Gtk version number, since it requires 1.2. * Fixed a bug in the code that attempted to prevent changes of screen resolution while the screen is locked. * Fixed a race condition in `xscreensaver-demo' that could cause an X error at startup. * Added `-transparent' option to `deluxe'. * Added `petri' hack. 3.13 * Ported `xscreensaver-demo' to Gtk. * Made it possible to build Motif, Gtk, and Athena versions of `xscreensaver-demo' in the same directory without reconfiguring. * Made `xscreensaver-demo' chase symlinks before writing the .xscreensaver file, so that if .xscreensaver is itself a symlink, the underlying file will be replaced instead. * Some Makefile and configure tweaks for Solaris and FreeBSD. * Made it possible to set the fire color in `xflame'. * Made transparency work in TrueColor (for `goop' and `qix'.) * Fixed a multi-head bug introduced by the virtual viewports stuff. 3.12 * Made it so that you can't scroll the screen while the lock dialog is up (with XFree86 virtual viewports.) * Fixed a bug in `flag' that caused bob's chin to get cut off after a few iterations. 3.11 * Made `xjack' be black-on-white-ish, so that it looks less like a computer screen and more like the typewritten paper it's supposed to be. * New version of `pulsar'. * Fixed Solaris compilation problem in `phosphor'. * Made xscreensaver notice XFree86's virtual root window hack, so that if the X server's root window is larger than the monitor's displayable resolution, the screen saver will limit itself to the area that actually appears on the screen. * Made the xscreensaver daemon do a better job of picking the visual class that should be used for GL programs. Less user intervention should be needed now: you can use the logical visual name `GL' instead of having to figure out by hand which one to use. * Oops, the visual was defaulting to "best" instead of "default", because the .xscreensaver file was not being loaded quite early enough. * Made configure figure out how to build icmp ping support into the `sonar' hack automatically. * Made warnings about not being able to read shadow passwords not be printed if compiled with PAM support. * Improved PAM startup diagnostics. * Worked around the Solaris PAM bug that was causing crashes there, so now PAM is turned on by default. * Made configure detect the number of arguments that pam_strerror() takes, since on Linux, this apparently changed between 2.0 and 2.2, sigh. * Made the /proc/interrupts kludge look for "PS/2 Mouse" as well as "keyboard". * Made xscreensaver notice when there has been a sudden large jump in wall-clock time, and if so, lock right away, instead of waiting for "lockTimeout" to expire first. (Laptops need this for safer recovery from ``hibernation.'') * Added `-throttle' option to `xscreensaver-command'. 3.10 * Added `phosphor', `xmatrix', and `pulsar' hacks. * Fixed a bug in the color allocator that sometimes caused `starfish' to fall back to monochrome. * Reduced the amount of code that runs before root privileges are disavowed: "normal" and "shadow" passwords now do some initialization as root, but the PAM and Kerberos authorization schemes will be initialized while running as "nobody". Supposedly this closes a potential security hole when using Kerberos. * Added some more sanity checking to configure. 3.09 * Added `compass', `squiral', `xflame', `wander', `spotlight', and `critical' hacks. * Added some new modes to `decayscreen'. * Made `deluxe' work in monochrome. * Generalized usage of the Double-Buffer server extension in several hacks (`compass', `deluxe', `interference', `kumppa', and `moire2'.) * Fixed another visual-depth problem in `rd-bomb'. * The screen saver will now defer blanking if neither the keyboard nor the mouse could be grabbed. Instead, it will just try again in a few minutes. This fixes a bad interaction between xscreensaver and programs like VMware that hold the mouse and keyboard grabbed for a long time. * Added a new erase mode (expanding spiral.) 3.08 * Fixed some bugs in my port of `t3d'. * Added `penetrate' and `deluxe' hacks. * When linking against Motif 2.x, also link against XPM. * Added support for using /proc/interrupts for idle detection on Linux. Now xscreensaver shouldn't kick in when the user is active on a non-X virtual console. * Upgraded to autoconf 2.13. 3.07 * Configure tweaks (sometimes -lXmu wasn't getting linked in properly; check for _Xsetlocale in -lXintl.) * Portability fixes for sonar.c. * Fixed a compilation problem when you have GL but don't have XPM. * Made configure notice when MesaGL requires -lpthread. * Made `flame' ignore SIGFPE (not sure if this is the right fix; it seems only to be needed on FreeBSD.) * Kludged `rd-bomb' work on visuals that are of depth 24 but that *do not* support pixmaps of depth 32. * Fixed `halo' to work properly in TrueColor. * Changed `xscreensaver.spec' to install the hacks in /usr/X11R6/lib/xscreensaver/ by default, since that's where recent Red Hat distributions put them. * Added `t3d' hack. * Updated versions of `crystal', `hopalong', and `flow' from xlockmore. * Imported `demon' and `loop' modes from xlockmore. 3.06 * Oops, the "default-n" visual descriptor was broken; it was always installing a colormap if the `installColormap' preference was set, meaning that `xearth', `xv' and friends were using the wrong colors on 8-bit systems. * Turned off HAVE_PING in `sonar', since it compiles on some Linux systems, but not others of similar vintage... 3.05 * Fixed an off-by-1 in `distort'. * Added `sonar' hack. * New version of `glplanet' (with stars.) * Made all hacks exit when you type `q' or `ESC' at them, and made them obey the WM_DELETE_WINDOW ClientMessage. * Fixed a nonfatal buffer overrun in lament (note: lament still doesn't work with MesaGL 3.0: it dies in lambda_textured_triangle1(), which is Mesa's bug, not mine.) 3.04 * Added an `xscreensaver.spec' file, to make it easier for other folks to generate RPMs. * Made the password code work on HPUX in the situation where: ``enhanced security'' is available; but not used; but the user typed a password more than 8 characters long anyway. FTSOHPUX. 3.03 * Made locking work when passwd aging is enabled. * Added support for PAM (Pluggable Authentication Modules.) It is still turned off by default, though, since it doesn't seem to work on Solaris 2.6, and has been behaving erratically on Red Hat 5.1. * Made each possible authentication method be tried in turn until one succeeds; this means that Kerberos is being used, we will first check Kerberos, and if that fails, will then consult the local password file. Likewise with PAM. * Save and restore the bits under the passwd dialog, to avoid leaving a black rectangle behind when unlocking is cancelled. 3.02 * Not everyone has sys/select.h, sigh... 3.01 * Some fixes to `reflect'. * Configure tweaks. * Made it log unsuccessful attempts to unlock the screen to syslog. * Fixed a bug where `xscreensaver-demo' could be seeing a different programs list than `xscreensaver' did. 3.00 * The xscreensaver daemon no longer links against Motif or Athena: demo-mode and the preferences panel are no longer built in to the daemon, but are now handled by an external program, `xscreensaver-demo'. (I decided that this, along with the recent addition of the `.xscreensaver' config file, justified bumping the version number to 3.00, since this is a fairly major architectural change.) * Lines in the `*programs' resource may now begin with the character "-", meaning "don't run this hack." In this way, it's possible to disable a hack without throwing away the information about it (making it easier to change your mind later.) Eventually the preferences/demo mode GUI should represent this as a checkbox or something. * Fixed a short race condition where it was possible for xscreensaver to die with a BadWindow error if it was blanking the screen just as another window was being deleted. * Made it possible to disable specific modes in `bsod'. 2.34 * Fixed a bug that was making `pipes' generate way too many valves. Made the viewpoint in `pipes' be selected randomly instead of always being -10 degrees. * Fixed a bug in the XSHM code, in the case where the server supports the XSHM extension but is not the same machine as the client. * Made `rd-bomb' default to taking up the whole screen. * Made it not try to do fading/unfading if no PseudoColor visuals exist. * Initial attempt at supporting VT-locking (doesn't work yet.) * Eliminated the `captureStdout' resource; now `captureStderr' controls both streams. * Added `-capture-stderr' and `-no-capture-stderr' command-line arguments. * Added `glplanet' hack. * When a hack is selected with `xscreensaver-command -select', that hack will be used until further notice (until the saver turns off, or another activation command is issued.) 2.33 * Made `xscreensaver-command' print error messages: the xscreensaver daemon now responds to ClientMessage events by writing a response message on a window property, instead of just writing to its stderr. * Made the ~/.xscreensaver file be automatically reloaded when the file date changes. * The password dialog and splash screen no longer depend on Motif or Athena. This should clear up a number of focus problems, and is the first step on the path toward moving all of the Motif/Athena/whatever code out of the xscreensaver daemon, and into external processes. * Don't complain about LessTif 0.86 any more, since the new password dialog makes that problem go away. * Configure tweaks for Irix 6.5, SunOS 5.something. * New `-reflect' option to `distort'. 2.32 * Added reading and writing of a ~/.xscreensaver file, so that the Preferences panel can save its settings. * New version of `rubik'. * Added `-select N' argument to `xscreensaver-command'. * Oops, left out some of the `bubbles3d' files... 2.31 * The cursor was invisible in the password dialog. Fixed. * Made configure warn against MesaGL 2.6. * Fixed X error at startup when using non-default visual. * New version of `crystal', `ant', and `atlantis' from xlockmore. * New hack, `bubble3d'. * Added some new modes to `bsod'. 2.30 * Changed the order in which -lSM and -lICE are linked to be after Motif instead of before (Lesstif on Irix needs this.) 2.29 * Work around a bash bug in configure. * Tweaked HPUX paths again. FTSOHPUX. * Made configure recommend against LessTif 0.86, due to a bug in that version that causes a security hole in the screen locking code. LessTif 0.87 will fix it. * Made all of the `--with' options to `configure' accept a directory option as well (so that --with-motif=/FOO will add -I/FOO/include -L/FOO/lib). I believe this is the Configure Party Line of how do to such things. * Fixed a bug where the mouse was left un-grabbed after the first time the graphics hack was changed (simplified all of the mouse-grabbing logic.) * Maybe possibly perhaps made `vidwhacker' really not leave stray xv windows around. This time for sure. * Added a new erase mode (random dots fizzling out.) * Added `-prefs' argument to `xscreensaver-command', that brings up the Preferences dialog directly (it seems that nobody ever noticed the `Preferences' button on the Demo Mode dialog, maybe this will help.) * Added a splash screen. Turn it off with *splash:false. 2.28 * Better macsbug text in `bsod'. * New version of `distort' with many new modes. * Plugged a leak in `coral'. * Tweaked configure for HPUX. * Removed some compiler warnings. * More consistent usage of stderr versus stdout. * More diagnostics should an X error occur. * Fixed a possible crash in SGI-specific unfading code. 2.27 * Improved version of `distort'. * Made `lament' compile against OpenGL 1.0 (though it still requires 1.1 to work properly.) * Updated my email address and home page. 2.25 * Improved motion in `rd-bomb'. * Added XSHM (shared memory extension) support to the `distort', `interference', `moire', `rd-bomb', and `swirl' hacks, which speeds them up a bit. * Added `lament' hack. 2.24 * Tweaked the order of the -L options again. * Cleaned up configure's `--help' message. * Added `kumppa' hack. * Smarter maze-solving algorithm in `maze'. * Took `xlyap' out of the default list of hacks, since it's just incredibly buggy (and slow.) Maybe someday someone will fix it... * Added `distort' hack, but didn't add it to the default list (yet) because it's still too slow. * Made the Athena demo dialog look more like the Motif version; it has a text-entry field now, too. * Made the Athena password dialog echo asterisks, like Motif does, instead of using a flyspeck font. * Some random configure tweaks. * Added a `timestamp' resource that makes the `-verbose' messages include the time at which they were printed. 2.23 * The fix for SGI's ``scheme'' nonsense broke things, and let the user's "*background" resource show through. Fixed it in a different way. 2.22 * Added support for the DPMS server extension (Display Power Management System.) * Made configure advertize the `--enable-subdir' option a little more, since that seemed to cause some people stress. Also, made that directory be built into the xscreensaver executable, as a hardcoded prefix to $PATH. (Might help, shouldn't hurt.) * Made configure prefer the two-arg gettimeofday to the one-arg version, since AIX doesn't have any prototypes. * Made it work with Xaw3d (the 3D Athena library.) * Made `make install' create directories as necessary. * New version of lmorph from Sverre. * Added `crystal' and `discreet' hacks from xlockmore. * Added a new mode to `bsod'. 2.21 * Made `xscreensaver-command -time' use different words. (It now describes the two states as "screen blanked since..." and "screen non-blanked since..." instead of "active since..." and "inactive since..." which a lot of people interpreted as meaning the opposite of what was intended.) * Improved some error messages, in the hopes of making the distinction between the xscreensaver and xscreensaver-command programs more obvious. * Rewrote (and reorganized) parts of the xscreensaver and xscreensaver-command manual pages. * Renamed xscreensaver's `-lock' command-line option to be `-lock-mode', to avoid confusion with the `-lock' option to xscreensaver-command, which does a totally different thing. * Removed xscreensaver's `-demo' command-line option for a similar reason; use `xscreensaver-command -demo' instead. * Disabled SGI's ``scheme'' nonsense in a better way than fully-qualifying the background colors in every single hack. * Fixed some other minor cosmetic problems when *sgiMode is turned on. * Fixed an X error in `bsod -root' (how ironic...) 2.20 * Fixed a bug that caused the mouse to sometimes not be grabbed properly (meaning the window manager menu could pop up over the demo-mode display.) * Fixed a bug that made the stderr output sometimes get printed twice. * Fixed a bug that made the demo-mode scrollbar move too fast. * Protected against a possible buffer overflow. * Made `vidwhacker' not leave stray xv windows around. * New version of `ant' so that Bagley doesn't calve. * Make configure on AIX get XShm from the right library. 2.19 * One file was missing from the tar file. 2.18 * Oops, atlantis wasn't being built by default. * Added `epicycle' hack. * Added `interference' hack. * Added `truchet' hack. * Added `bsod' hack. * Added some new modes to `vidwhacker'. 2.17 * Added a -window-id argument to most hacks, so that they can draw on arbitrary externally-provided windows. * Synched with xlockmore 4.11a01. * Added `flow' hack. * Added `atlantis' GL hack. * Renamed `puzzle' hack to `jigsaw', since xlock already had a different mode called `puzzle'. * Made it self-configure properly when Motif 2.1.0 is being used (requires -lXp now, sigh...) 2.16 * Made `flag' able to do XPM images. * New look for the xscreensaver logo (`xroger'). * Fixed compilation error on Suns with adjunct passwords. * Got multi-architecture builds working again. * Some configure tweaks for building on HPUX and Solaris. * Fixed bug in decayscreen. * Fixed typo in passwd.c. * Made `cynosure' not die when colormap is full. 2.15 * Added `cynosure' hack. * Added `moire2' hack. * Tweaked `erase.c' some more. * Made unfading a bit smoother. * Added `vidwhacker' hack (not installed by default.) * Added `stairs' hack. * Split `escher' into `cage' and `moebius', as per xlockmore. * Changed subprocess handling to use sigaction() instead of signal() if it's available (this is necessary for SCO but should work fine on other systems too.) * Various other tweaks. 2.14 * Better fix for the Motif drag-and-die lossage. * Put in some kludges to work around a LessTif bug. * XScreenSaver is known to work with LessTif 0.82 now. * Made fading work on high-end SGI video hardware. * Fixed another SGI-specific bug in screen grabbing; will the madness never cease? * Fixed another crash in `xlyap'. 2.13 * Made `decayscreen' do directions other than down. * Improved `puzzle'. * Fixed a crash in `xlyap'. * Added CDE info to the man page, removed `cde.txt'. * Configure tweaks for Zippy. * Turned off the signal handling in `bubbles' because it was sometimes failing to die. * Added `hacks/xscreensaver-sgigl.c' to make it possible to run SGI's ElectroPaint hack (/usr/demos/bin/ep) with xscreensaver. Finally! * Fixed a buffer overrun in the locking code that some wily, malicious cracker must have slipped in. * Disabled Motif drag-and-drool in the dialog box buttons, since it's broken in some old versions of Motif. 2.12 * Added `README.debugging'. * Added `puzzle' hack. * Added `xlyap' hack. * Added `default-n' as a visual name, so that one can have -install on by default, but turn it off for certain poorly-behaved hacks (like xv.) * Added support for grabbing frames of external video (on SGI) to the screen-grabbing hacks (decayscreen, slidescreen, slip, blitspin, and puzzle.) * Improved look of tiles in `slidescreen'; fixed its color allocation problem. 2.11 * Tweaked `blitspin', added it to the default list. * Added `lissie', `mountain', `triangle', `worm', `rotor', and `ant' from xlockmore. * Updated `sierpinski', `galaxy', and `lisa'. * Thickened the lines in `braid' and `lmorph'. * Updated VMS makefiles. * Renamed `fract' to `vines'. * Added `xjack' hack. * Made a few more hacks use erase.c, and added a few more wipe styles. * Fixed compilation problem with Sun's version of OpenGL. * Added ability to use sigaction() instead of signal() to work around a SCO kernel bug. 2.10 * Fixed colormap bugs in `rd-bomb'; sped up `coral'. * Configure tweaks for *BSD. 2.08 * New hacks `rd-bomb' and `coral'. * New version of `maze' with some new algorithms. * New colorized version of `rocks'. * Fixed a bug in qix on 64-bit machines. * Fixed a bug in the -time option. * Fixed a bug in configure related to LessTif. 2.07 * Minor header tweaks in windows.c and flag.c. * Made multi-architecture ($VPATH) builds work properly. * Merged new GL stuff from xlockmore (rubik, morph3d.) * Fixed intermittent crashes in `imsmap' and `munch'. * Added `fadeplot' hack from xlockmore. 2.06 * Merged in VMS support from Patrick Moreau. 2.05 * Fixed a MIT-SCREEN-SAVER-related crash, and tweaked configure to detect the extra-random -Xss library. 2.04 * HP configure tweaks. Detect and warn about LessTif. * Fixed low-color behavior of `goop', `pyro', `starfish', `greynetic', `flame', `halo', and `moire'. 2.03 * Fixed flicker in `pipes'. Fixed 3d in `bouboule'. * Added `munch' hack. * Added basic dependencies to the Makefile.in files. 2.02 * Fixes for compiling with the MIT saver extension. * Made the yow/fortune program be a configure option. * Various configure tweaks. 2.01 * Added `goop' and `starfish' hacks. * Added colomap cycling to `halo'. * Made `attraction' use the new colormap allocator. * Added better $PATH diagnostics. * There was a bug in frand! Color selection should be much improved now. 2.00 * Converted to use `configure' instead of `imake'. * ANSI C is now required. * Added Kerberos locking support, from Nat Lanza. * Made the stderr text use overlay planes, if possible. * Reworked the xlockmore compatibility stuff again. * Added `gears', `superquadrics', `escher', `pipes', and `sproingies' hacks (depend on OpenGL.) 1.34 * Fixed some bugs, made fading be a little smoother. 1.33 * Made it work with multi-headed displays. * Generalized sub-process management (Unix sucks!) * Added interactive mouse frobbing to Julia. * Added (untested) support for HPUX shadow passwords. * Made normal non-shadow passwords be checked if the shadow passwords aren't accessible for some reason. 1.32 * Removed *colorPrograms and *monoPrograms resources: made it possible to specify the desired visual on a per-hack basis. * Cleaned up / restructured the driver: no more globals. * Made the Motif and Athena dialogs share more code. * Probably fixed some Athena colormap-installation bugs. * Fixed screen grabbing (cmap) on SGI 12-bit PseudoColor. * Fixed divide-by-zero in bright random colormaps. * Added an improved version of xlock's `flag' hack. * Made unfading work better, and not flicker on SGIs. * Added `sphere', `forest', `lisa' hacks from xlockmore. * Added (untested) support for SunOS Adjunct passwords. 1.31 * Improved colors and colormap cycling of many hacks. * Cleaned up xlockmore compatibility layer. * Made `blitspin' able to grab an image off the screen. * Ported `swirl' and `bouboule' hacks from xlockmore. * Made the driver more careful about not leaving bits on the screen, or allowing other windows to raise themselves: it now re-blanks the screen every so often. * Added `-time' option to `xscreensaver-command'. * Improved SGI screen-grabbing some more: now it can grab TrueColor screens into PseudoColor windows and have the colors still come out semi-reasonably. 1.30 * Made `slidescreen' and `decayscreen' work better on SGIs when windows of different visuals are present, by using the XReadDisplay() extension to get a true 24-bit image out of the frame buffer. * Made `noseguy' be in color, if compiled with XPM. * Ported `braid', `drift', `fract', `galaxy', `grav', `ifs', `julia', `laser', `lightning', `penrose', `sierpinski', `slip', `spiral', and `strange' hacks from xlockmore. * Merged `hopalong' hack with a more recent version. * Added `cde.txt'. 1.28 * Added `deco', `moire', and `kaleidescope' hacks. * Merged in support for non-Motif locking and demo mode. * Made `blitspin' and `bubbles' work in TrueColor. * Fixed a stupid bug I introduced in `imsmap'. * Added `poly' and `gravity' options to `qix'. 1.27 * Added support for SGI SCREEN_SAVER extension. * Made `fade' and `unfade' work on 8-bit SGIs. * Made the dialog boxes more Motify. * Added `bubbles' hack. 1.26 * Added `lmorph' hack. * Added viscosity and mouse-control to attraction. * Fixed possible bad color choices in qix and attraction. * Added ramp-mode to halo. * Added a new RNG, which is faster and more portable than using the RNG in libc. * Made locking work on SCO. * Various other minor tweaks that I don't remember. 1.25 * Made it capture the stdout/stderr of its subprocesses and present them on the screensaver window itself. * Made demo mode work correctly with non-default visuals and color maps, instead of always using the defaults. * Added -visual argument to all included screenhacks. * Support for the R6 MIT-SCREEN-SAVER server extension. * Made the demo mode list scroll properly. * Added `pedal' hack. 1.24 * Fixed some private-colormap oddities in slidescreen, decayscreen, and xroger. Fixed apparent conservation- of-mass problem in pyro; made the shrapnel round. 1.23 * Minor tweaks for IRIX5; fixed locking race condition. 1.22 * Minor tweaks for X11R6. * Fixes for non-default visuals. 1.21 * Fixed bug in color blitspin; added default image. * Added diagnostics to noseguy. Fixed off-by-one error in flame. * Added some missing casts. 1.19 * Added `flame' hack. * Fixed a minor Motif dialog text field bug. * Fixed yet another XPointer-not-defined-in-R4 bug. 1.18 * Added support for shadow password files. * Fixed some Motif-related locking bugs. * Added diagnostics when locking is disabled. * Made blitspin able to use the XPM library. * Added `decayscreen' hack. 1.17 * Added `halo' hack. 1.16 * Portability fixes. 1.15 * Broke the driver up into more source files. * Moved the hacks into their own directory. * Made all `time' parameters accept the 00:00:00 syntax, so that even the parameters which are normally read as minutes can be specified in seconds. * Added colormap cycling to `imsmap'. * Made hyper work with K&R compilers. 1.14 * Added `orbit' option to `attraction' hack. * Added `lock-timeout' option. * Cleaned up options of `maze' hack. 1.09 * Added demo mode, and locking. * Added `maze' hack. * Added `norotate' option to `rocks' hack. 1.05 * Works when run from XDM before anyone logs in. * Sped up `imsmap'. * Can use `xv' as a slideshow without using up colormap entries while the screen is not blanked. * Fixed a BadDrawable error in non-XIdle mode. * Added `blitspin' and `imsmap'. 1.01 * Current list of included hacks is now: qix, helix, rorschach, attraction, greynetic, rocks, pyro, hopalong, and noseguy. xscreensaver-5.34/README.hacking000644 000767 000767 00000020024 12442114060 016134 0ustar00jwzjwz000000 000000 ========================================================================== Writing new XScreenSaver modules ========================================================================== Any program that can be made to render on an X window created by another process can be used as a screen saver. Just get the window ID out of $XSCREENSAVER_WINDOW, draw on that, and you're done. In theory, you can write a screen saver in any language you like. In practice, however, languages other than C or C++ tend not to allow you to draw to windows that they did not create themselves. Unfortunately, this means that if you want to write a screen saver, you must write it in C. Given that you're going to be writing in C, you might as well take advantage of the various utility functions that I have written to make that easier. Writing a new screen saver in C using the frameworks included with xscreensaver simplifies things enormously. Generally, the best way to learn how to do something is to find a similar program, and play around with it until you understand it. Another approach is to not worry about understanding it, but to just hack it out. Either way, your best bet is probably to start with one of the existing xscreensaver demos, included in the "hacks/" directory, rename the file, and edit it until it does what you want. The "Greynetic" and "Deluxe" hacks are probably good ones to start with, since they are so very simple. For OpenGL programs, "DangerBall" is a good example. ========================================================================== Requirements for inclusion with the XScreenSaver collection ========================================================================== If you come up with anything, send it to me! If it's good, I'd love to include it in the xscreensaver distribution. However, there are a few requirements for me to distribute it: - Write in portable ANSI C. No C++. No nonstandard libraries. - Write a .man page describing all command-line options. - Write an .xml file describing the graphical configuration dialog box. - Include a BSD-like copyright/license notice at the top of each source file (preferably, just use the one from "screenhack.h", and include your name and the current year). The GNU GPL is not compatible with the rest of XScreenSaver. ========================================================================== The XScreenSaver API ========================================================================== - Start with #include "screenhack.h" - Define 2 global variables: yoursavername_defaults -- Default values for the resources you use. yoursavername_options -- The command-line options you accept. - Define 5 functions: yoursavername_init -- Return an object holding your global state. yoursavername_draw -- Draw a single frame, quickly. yoursavername_free -- Free everything you've allocated. yoursavername_reshape -- Called when the window is resized. yoursavername_event -- Called when a keyboard or mouse event happens. The "event" function will only be called when running in a window (not as a screen saver). The "reshape" event will be called when the window size changes, or (as a screen saver) when the display size changes as a result of a RANDR event (e.g., plugging in a new monitor). It's ok for both the "event" and "resize" functions to do nothing. - All other functions should be static. - The last line of the file should be XSCREENSAVER_MODULE ("YourSaverName", yoursavername) - Finally, edit the Makefile to add a rule for your program. Just cut-and-paste one of the existing rules. Your "draw" must not run for more than a fraction of a second without returning. This means "don't call usleep()". Everything has to be a 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 "state" object created by your "init" function. If you use global or static variables, your screen saver will not work properly on MacOS. Do not call XSync() or XFlush(). If you think you need to do that, it probably means that you are you are relying on the speed of the graphics card for timing, which probably means that your "draw" function is taking too long. ========================================================================== The XLockMore API ========================================================================== Some of the display modes that come with xscreensaver were ported from XLock, and so, for historical reasons, they follow a slightly different programming convention. For newly-written Xlib programs, you'd be better off following the pattern used in hacks like "Deluxe" than in hacks like "Flag". The XLockMore ones are the ones that begin with "#ifdef STANDALONE" and #include "xlockmore.h". But, all OpenGL screen savers have to follow the XLockMore API. The XLockMore API is similar to the XScreenSaver API, in that you define (roughly) the same set of functions, but the naming conventions are slightly different. Instead of "hackname_init", it's "init_hackname", and it should be preceeded with the pseudo-declaration ENTRYPOINT. One annoying mis-feature of the XLockMore API is that it *requires* you to make use of global variables for two things: first, for each of your command line options; and second, for an array that holds your global state objects. These are the only exceptions to the "never use global variables" rule. ========================================================================== Programming Tips ========================================================================== - Your screen saver should look reasonable at 20-30 frames per second. That is, do not assume that your "draw" function will be called more than 20 times a second. Even if you return a smaller requested delay than that, you might not get it. Likewise, if your "draw" function takes longer than 1/20th of a second to run, your screen saver may be consuming too much CPU. - Don't make assumptions about the depth of the display, or whether it is colormapped. You must allocate all your colors explicitly: do not assume you can construct an RGB value and use that as a pixel value directly. Use the utility routines provided by "utils/colors.h" to simplify color allocation. - It is better to eliminate flicker by double-buffering to a Pixmap than by erasing and re-drawing objects. Do not use drawing tricks involving XOR. - If you use double-buffering, have a resource to turn it off. (MacOS has double-buffering built in, so you'd be triple-buffering.) - Understand the differences between Pixmaps and XImages, and keep in mind which operations are happening in client memory and which are in server memory, and which cause latency due to server round-trips. Sometimes using the Shared Memory extension can be helpful, but probably not as often as you might think. - On modern machines, OpenGL will always run faster than Xlib. It's also more portable. Consider writing in OpenGL whenever possible. ========================================================================== The MacOS X Port ========================================================================== Though XScreenSaver started its life as an X11 program, it also now runs on MacOS X. If you do your development on an X11 system, and follow the usual XScreenSaver APIs, you shouldn't need to do anything special for it to also work on MacOS. The preprocessor macro HAVE_COCOA will be defined when being compiled in a MacOS (Cocoa/Quartz) environment, and will be undefined when compiling against "real" Xlib. To compile on MacOS, use the XCode project included in the source distribution. You shouldn't need to have X11 installed, and shouldn't need to run "configure" first. ========================================================================== xscreensaver-5.34/README.VMS000644 000767 000767 00000004434 06434235263 015221 0ustar00jwzjwz000000 000000 OpenVMS port of Xscreensavser version 2.10 October 1997 ========================================== Xscreensaver distribution can be found in 3 subdirectories: [.DRIVER] The Xscreensaver and Xscreensaver-command programs. [.HACKS] Graphic demos ,can be run either through the xscreensaver program or standalone. [.UTILS] A small libraries of various utilities. This port has been tested with VAX VMS 6.1 (compiled with DEC 5 5.0 and Motif 1.2) and AXP VMS 6.2 (compiled with DEC C 5.0 and Motif 1.2-4). To rebuild, you need to rebuild [.UTILS] directory first and create the object library (look at the end of COMPILE*.COM procedure). You can now build the [.HACKS] directory and the [.DRIVER] directory. A one-step build is now available via the MAKEVMS.COM script. WARNING : before building [.HACKS], you may need to correct some of the DECwindows bitmap files. Some files are bogus !! (they have a long line of null chars at the end). These files are under SYS$COMMON:[DECW$INCLUDE.BITMAPS] directory: STIPPLE.XBM HLINES2.XBM LIGHT_GRAY.XBM ROOT_WEAVES.XBM VLINES2.XBM These files are all used by Greynetic demo. Nota: link procedure automagically select appropriate X and Motif Libraries (X11R4/Motif 1.1 - X11R5/Motif 1.2). The SETUP.COM procedure gives you a definition of all DCL foreign command symbols needed to run Xscreensaver and all the graphic hacks. You need to modify this procedure if you install these programs in another directory tree. You can easily add new graphic demos without recompiling Xscreensaver. You just need to add them in resource file XSCREENSAVER.DAT. This file (originally present in [.DRIVER] directory ) can be installed under your SYS$LOGIN directory for a per-user customization basis. You can also install it under the system-wide user resource directory SYS$COMMON:[DECW$DEFAULT.USER] (with (W:RE) protections). The new graphics hack must be run in root-window mode to be accepted by Xscreensaver. The graphic demos are spawn into subprocess created by the system() call (in the Unix version the execvp() call is used). The VMS passord checking programs were picked up in the Xlock distribution. Enjoy, Patrick MOREAU - CENA/Athis-Mons - FRANCE (pmoreau@cena.dgac.fr) (moreau_p@decus.decus.fr) xscreensaver-5.34/INSTALL000644 000767 000767 00000017230 06346511377 014731 0ustar00jwzjwz000000 000000 Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, a file `config.cache' that saves the results of its tests to speed up reconfiguring, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.in' is used to create `configure' by a program called `autoconf'. You only need `configure.in' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not supports the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' can not figure out automatically, but needs to determine by the type of host the package will run on. Usually `configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the host type. If you are building compiler tools for cross-compiling, you can also use the `--target=TYPE' option to select the type of system they will produce code for and the `--build=TYPE' option to select the type of system on which you are compiling the package. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Operation Controls ================== `configure' recognizes the following options to control how it operates. `--cache-file=FILE' Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. `configure' also accepts some other, not widely useful, options. xscreensaver-5.34/configure000775 000767 000767 00001763740 12612754262 015623 0ustar00jwzjwz000000 000000 #! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= PACKAGE_URL= ac_unique_file="driver/subprocs.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='LTLIBOBJS LIBOBJS DEPEND_DEFINES DEPEND_FLAGS DEPEND APPDEFAULTS ANIM_LIBS ANIM_OBJS GTK_EXTRA_OBJS HACK_CONF_DIR PO_DATADIR GTK_DATADIR HACKDIR_FULL HACKDIR NOGNOME GNOME22 GNOME24 JWZGLES_OBJS GLE_KLUDGE GLE_EXES GL_KLUDGE GL_MEN GL_UTIL_EXES SUID_EXES RETIRED_GL_EXES GL_EXES JPEG_EXES LOCK_OBJS LOCK_SRCS SAVER_GL_LIBS SAVER_GL_OBJS SAVER_GL_SRCS XFT_LIBS XFT_OBJS XFT_SRCS XMU_LIBS XMU_OBJS XMU_SRCS PASSWD_OBJS PASSWD_SRCS MEN_OSX SCRIPTS_OSX EXES_OSX OBJCC COMMENT_DEMO_GLADE2_GTK_2_22_TAIL COMMENT_DEMO_GLADE2_GTK_2_22_HEAD WITH_BROWSER DEFAULT_TEXT_FILE DEFAULT_IMAGE_DIRECTORY DEFAULT_IMAGES_P NEW_LOGIN_COMMAND_P NEW_LOGIN_COMMAND COMMENT_PAM_CHECK_ACCOUNT HAVE_PAM_FAIL_DELAY INSTALL_PAM NEED_SETUID INSTALL_DIRS SETUID_HACKS INSTALL_SETUID PASSWD_LIBS XINERAMA_LIBS XDPMS_LIBS GLE_LIBS GL_LIBS PTY_LIBS XPM_LIBS HACK_LIBS JPEG_LIBS XML_LIBS GTK_LIBS MOTIF_LIBS SAVER_LIBS ALL_DEMO_PROGRAMS PREFERRED_DEMO_PROGRAM INCLUDES gnome_url_show_program gnome_open_program pkg_config login_manager_tmp MKINSTALLDIRS POSUB POFILES PO_IN_DATADIR_FALSE PO_IN_DATADIR_TRUE INTLLIBS INSTOBJEXT GMOFILES CATOBJEXT CATALOGS MSGFMT_OPTS GETTEXT_PACKAGE DATADIRNAME ALL_LINGUAS GMSGFMT MSGFMT MSGMERGE XGETTEXT INTLTOOL_POLICY_RULE INTLTOOL_SERVICE_RULE INTLTOOL_THEME_RULE INTLTOOL_SCHEMAS_RULE INTLTOOL_CAVES_RULE INTLTOOL_XML_NOMERGE_RULE INTLTOOL_XML_RULE INTLTOOL_KBD_RULE INTLTOOL_XAM_RULE INTLTOOL_UI_RULE INTLTOOL_SOUNDLIST_RULE INTLTOOL_SHEET_RULE INTLTOOL_SERVER_RULE INTLTOOL_PONG_RULE INTLTOOL_OAF_RULE INTLTOOL_PROP_RULE INTLTOOL_KEYS_RULE INTLTOOL_DIRECTORY_RULE INTLTOOL_DESKTOP_RULE intltool__v_merge_options_0 intltool__v_merge_options_ INTLTOOL_V_MERGE_OPTIONS INTLTOOL__v_MERGE_0 INTLTOOL__v_MERGE_ INTLTOOL_V_MERGE AM_DEFAULT_VERBOSITY INTLTOOL_EXTRACT INTLTOOL_MERGE INTLTOOL_UPDATE USE_NLS X_EXTRA_LIBS X_LIBS X_PRE_LIBS X_CFLAGS XMKMF PERL EGREP GREP SET_MAKE INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM CPP PTHREAD_CFLAGS PTHREAD_LIBS PTHREAD_CC ax_pthread_config OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC host_os host_vendor host_cpu host build_os build_vendor build_cpu build target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking with_x_app_defaults with_pthread enable_largefile with_x enable_nls with_hackdir enable_subdir with_configdir with_dpms_ext with_xinerama_ext with_xinput_ext with_xf86vmode_ext with_xf86gamma_ext with_randr_ext with_proc_interrupts enable_locking enable_root_passwd with_pam with_pam_service_name enable_pam_check_account_type with_kerberos with_shadow with_passwd_helper with_login_manager with_gtk with_motif with_gl with_gle with_gles with_pixbuf with_xpm with_jpeg with_xft with_xshm_ext with_xdbe_ext with_readdisplay with_image_directory with_text_file with_browser with_setuid_hacks with_record_animation ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP XMKMF' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --libexecdir=DIR program executables [EPREFIX/libexec] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF X features: --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-largefile omit support for large files --disable-nls do not use Native Language Support Screen locking options: --enable-locking Compile in support for locking the display. --disable-locking Do not allow locking at all. --enable-root-passwd Allow root passwd to unlock screen. --disable-root-passwd Do not allow that. --enable-pam-check-account-type Whether PAM should check the result of account modules when authenticating. Only do this if you have account configured properly on your system. Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pthread Enables POSIX threads, for SMP support. Installation options: --with-hackdir=DIR Where to install the hundreds of demo executables. Default: `PREFIX/libexec/xscreensaver/' --with-configdir=DIR Where to install the data files that describe each of the display modes to the GUI. Default: `PREFIX/share/xscreensaver/config/' --with-x-app-defaults=DIR Where to install xscreensaver configuration file. --with-dpms-ext Include support for the DPMS extension. --with-xinerama-ext Include support for the XINERAMA extension. --with-xinput-ext Include support for the XInput extension. --with-xf86vmode-ext Include support for XFree86 virtual screens. --with-xf86gamma-ext Include support for XFree86 gamma fading. --with-randr-ext Include support for the X Resize+Rotate extension. --with-proc-interrupts Include support for consulting the /proc/interrupts file to notice keyboard activity. --with-pam Include support for PAM (Pluggable Auth Modules.) --with-pam-service-name NAME arg is the name of the PAM service that xscreensaver will authenticate as. --with-kerberos Include support for Kerberos authentication. --with-shadow Include support for shadow password authentication. --with-passwd-helper Include support for an external password verification helper program. --with-login-manager Put a "New Login" button on the unlock dialog that runs a login manager like gdmflexiserver or kdmctl. User interface options: --with-gtk Use the Gtk toolkit for the user interface. --with-motif Use the Motif toolkit for the user interface (no longer supported.) Graphics options: --with-gl Build those demos which depend on OpenGL. --with-gle Build those demos which depend on GLE (the OpenGL "extrusion" library.) --with-gles Target OpenGL ES 1.x API instead of OpenGL 1.3. --with-pixbuf Include support for the GDK-Pixbuf library in some demos, which will make it possible for them to read GIF, JPEG, and PNG files as well. --with-xpm Include support for XPM files in some demos. (Not needed if Pixbuf is used.) --with-jpeg Include support for the JPEG library. --with-xft Include support for the X Freetype library. --with-xshm-ext Include support for the Shared Memory extension. --with-xdbe-ext Include support for the DOUBLE-BUFFER extension. --with-readdisplay Include support for the XReadDisplay extension. --with-image-directory Arg is the default directory from which some demos will choose random images to display. --with-text-file=FILE By default, some demos may display this file. --with-browser=BROWSER Specify the web browser used to show the help URL. --with-setuid-hacks Allow some demos to be installed `setuid root' (which is needed in order to ping other hosts.) --with-record-animation Include code for generating MP4 videos. Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor XMKMF Path to xmkmf, Makefile generator for X Window System Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -rf conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -rf conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -rf conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* 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 $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES # ---------------------------------------------------- # Tries to find if the field MEMBER exists in type AGGR, after including # INCLUDES, setting cache variable VAR accordingly. ac_fn_c_check_member () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 $as_echo_n "checking for $2.$3... " >&6; } if eval \${$4+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main () { static $2 ac_aggr; if (ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$4=yes" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main () { static $2 ac_aggr; if (sizeof ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$4=yes" else eval "$4=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$4 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_member cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers config.h" echo "current directory: `pwd`" echo "command line was: $0 $@" ############################################################################### # # Autoheader stuff # ############################################################################### # This only ever existed in X11R4 and X11R5. #AH_TEMPLATE([HAVE_XIDLE_EXTENSION], # [Define this if you have the XIDLE extension installed. If you # have the XIDLE extension, this is recommended. (You have this # extension if the file /usr/include/X11/extensions/xidle.h # exists.) Turning on this flag lets XScreenSaver work better with # servers which support this extension; but it will still work # with servers which do not suport it, so it's a good idea to # compile in support for it if you can.]) # Using this extension will crash your X server and make fading not work. #AH_TEMPLATE([HAVE_MIT_SAVER_EXTENSION], # [Define this if you have the MIT-SCREEN-SAVER extension # installed. See the caveats about this extension, above. # (It's available if /usr/include/X11/extensions/scrnsaver.h # exists.)]) # This only ever existed on SGI hardware. #AH_TEMPLATE([HAVE_SGI_SAVER_EXTENSION], # [Define this if you have the SGI SCREEN_SAVER extension. This is # standard on Irix systems, and not available elsewhere.]) # This only ever existed on SGI hardware. #AH_TEMPLATE([HAVE_SGI_VC_EXTENSION], # [Define this if you have the SGI-VIDEO-CONTROL extension. This # is standard on Irix systems, and not available elsewhere.]) # After checking to see that --srcdir is correct (which AC_INIT does) # check for some random other files that come later in the tar file, # to make sure everything is here. # for d in driver utils hacks hacks/glx ; do f=$srcdir/$d/Makefile.in if test \! -r $f ; then echo "" echo "ERROR: The package is incomplete: $f does not exist." echo " This probably means that your download was truncated." echo "" exit 1 fi done ############################################################################### # # Query AX_PTHREAD, and figure out which compiler gets used. # ############################################################################### ############################################################################### # # Function to figure out how to run the compiler. # ############################################################################### ############################################################################### # # Check for availability of various gcc command-line options. # ############################################################################### # Need to disable Objective C extensions in ANSI C on MacOS X to work # around an Apple-specific gcc bug. # ############################################################################### # # Function to figure out how to disable // comments in ANSI C code. # # (With recent gcc, this is done with "-std=c89". With older gcc, this # is done by passing "-lang-c89" to cpp, by passing "-Wp,-lang-c89" to # gcc. Old gcc doesn't support -std, and new gcc doesn't support -lang. # so much for compatibility!) # # UPDATE: apparently there is NO WAY to tell gcc 3.2.2 to require that # declarations preceed statements, without resorting to "-pedantic". # This means that there is no way to get gcc3 to issue warnings that # ensure that your code complies with the ANSI/ISO C89 standard, without # also drowning in totally useless warnings. Thank you master may I # have another. # # So, I give up, let's just use -pedantic. # ############################################################################### ############################################################################### # # Function to figure out how to create directory trees. # ############################################################################### ############################################################################### # # Function to check whether gettimeofday() exists, and how to call it. # This may define HAVE_GETTIMEOFDAY and GETTIMEOFDAY_TWO_ARGS. # ############################################################################### ############################################################################### # # Function to find perl5 (defines PERL and PERL_VERSION.) # ############################################################################### # M4 sucks!! perl sucks too!! perl_version_cmd='print $]' ############################################################################### # # Function to demand "bc". Losers. # ############################################################################### ############################################################################### # # Functions to check how to do ICMP PING requests. # ############################################################################### ############################################################################### # # Functions to check for various X11 crap. # ############################################################################### # Try and find the app-defaults directory. # It sucks that autoconf doesn't do this already... # ############################################################################### # # Handle the --with-x-app-defaults option HERE # ############################################################################### # Check whether --with-x-app-defaults was given. if test "${with_x_app_defaults+set}" = set; then : withval=$with_x_app_defaults; ac_cv_x_app_defaults="$withval" else eval ac_x_app_defaults="$withval" fi # Random special-cases for X on certain pathological OSes. # You know who you are. # ############################################################################### # # Some utility functions to make checking for X things easier. # ############################################################################### # Like AC_CHECK_HEADER, but it uses the already-computed -I directories. # # Like AC_EGREP_HEADER, but it uses the already-computed -I directories. # # Like AC_TRY_COMPILE, but it uses the already-computed -I directories. # # Like AC_CHECK_LIB, but it uses the already-computed -I and -L directories. # Use this sparingly; it probably doesn't work very well on X programs. # # Like AC_TRY_RUN, but it uses the already-computed -I directories. # (But not the -L directories!) # # Usage: HANDLE_X_PATH_ARG([variable_name], # [--command-line-option], # [descriptive string]) # # All of the --with options take three forms: # # --with-foo (or --with-foo=yes) # --without-foo (or --with-foo=no) # --with-foo=/DIR # # This function, HANDLE_X_PATH_ARG, deals with the /DIR case. When it sees # a directory (string beginning with a slash) it checks to see whether # /DIR/include and /DIR/lib exist, and adds them to $X_CFLAGS and $X_LIBS # as appropriate. # ############################################################################### ############################################################################### # # End of function definitions. Now start actually executing stuff. # ############################################################################### ############################################################################### # WTF! autoconf emits this *way* too late. Do it earlier. test "x$prefix" = xNONE && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # random compiler setup ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac ac_original_cc=$CC ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -rf conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -rf conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -rf conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -rf conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -rf conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -rf conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -rf conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu have_pthread=no with_pthread_req=unspecified # AX_PTHREAD is from the GNU Autoconf Archive. # https://savannah.gnu.org/projects/autoconf-archive/ # =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_pthread.html # =========================================================================== # # SYNOPSIS # # AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # # DESCRIPTION # # This macro figures out how to build C programs using POSIX threads. It # sets the PTHREAD_LIBS output variable to the threads library and linker # flags, and the PTHREAD_CFLAGS output variable to any special C compiler # flags that are needed. (The user can also force certain compiler # flags/libs to be tested by setting these environment variables.) # # Also sets PTHREAD_CC to any special C compiler that is needed for # multi-threaded programs (defaults to the value of CC otherwise). (This # is necessary on AIX to use the special cc_r compiler alias.) # # NOTE: You are assumed to not only compile your program with these flags, # but also link it with them as well. e.g. you should link with # $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS # # If you are only building threads programs, you may wish to use these # variables in your default LIBS, CFLAGS, and CC: # # LIBS="$PTHREAD_LIBS $LIBS" # CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # CC="$PTHREAD_CC" # # In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant # has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name # (e.g. PTHREAD_CREATE_UNDETACHED on AIX). # # Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the # PTHREAD_PRIO_INHERIT symbol is defined when compiling with # PTHREAD_CFLAGS. # # ACTION-IF-FOUND is a list of shell commands to run if a threads library # is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it # is not found. If ACTION-IF-FOUND is not specified, the default action # will define HAVE_PTHREAD. # # Please let the authors know if this macro fails on any platform, or if # you have any other suggestions or comments. This macro was based on work # by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help # from M. Frigo), as well as ac_pthread and hb_pthread macros posted by # Alejandro Forero Cuervo to the autoconf macro repository. We are also # grateful for the helpful feedback of numerous users. # # Updated for Autoconf 2.68 by Daniel Richard G. # # LICENSE # # Copyright (c) 2008 Steven G. Johnson # Copyright (c) 2011 Daniel Richard G. # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 21 # This is what autoupdate's m4 run will expand. It fires # the warning (with _au_warn_XXX), outputs it into the # updated configure.ac (with AC_DIAGNOSE), and then outputs # the replacement expansion. # This is an auxiliary macro that is also run when # autoupdate runs m4. It simply calls m4_warning, but # we need a wrapper so that each warning is emitted only # once. We break the quoting in m4_warning's argument in # order to expand this macro's arguments, not AU_DEFUN's. # Finally, this is the expansion that is picked up by # autoconf. It tells the user to run autoupdate, and # then outputs the replacement expansion. We do not care # about autoupdate's warning because that contains # information on what to do *after* running autoupdate. # This affects CC, LIBS, and CFLAGS, instead of defining new variables. # Check whether --with-pthread was given. if test "${with_pthread+set}" = set; then : withval=$with_pthread; with_pthread="$withval"; with_pthread_req="$withval" else with_pthread=yes fi if test "$with_pthread" = yes; then # AX_PTHREAD might want a different compiler. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ax_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on True64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5 $as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 pthread_join (); int main () { return pthread_join (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_pthread_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 $as_echo "$ax_pthread_ok" >&6; } if test x"$ax_pthread_ok" = xno; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items starting with a "-" are # C compiler flags, and other items are library names, except for "none" # which indicates that we try without any flags at all, and "pthread-config" # which is a program returning the flags for the Pth emulation library. ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) # -pthreads: Solaris/gcc # -mthreads: Mingw32/gcc, Lynx/gcc # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads too; # also defines -D_REENTRANT) # ... -mt is also the pthreads flag for HP/aCC # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case ${host_os} in solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (We need to link with -pthreads/-mt/ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather # a function called by this macro, so we could check for that, but # who knows whether they'll stub that too in a future libc.) So, # we'll just look for -pthreads and -lpthread first: ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags" ;; darwin*) ax_pthread_flags="-pthread $ax_pthread_flags" ;; esac # Clang doesn't consider unrecognized options an error unless we specify # -Werror. We throw in some extra Clang-specific options to ensure that # this doesn't happen for GCC, which also accepts -Werror. { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler needs -Werror to reject unknown flags" >&5 $as_echo_n "checking if compiler needs -Werror to reject unknown flags... " >&6; } save_CFLAGS="$CFLAGS" ax_pthread_extra_flags="-Werror" CFLAGS="$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo(void); int main () { foo() ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else ax_pthread_extra_flags= { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$save_CFLAGS" if test x"$ax_pthread_ok" = xno; then for flag in $ax_pthread_flags; do case $flag in none) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 $as_echo_n "checking whether pthreads work without any flags... " >&6; } ;; -*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5 $as_echo_n "checking whether pthreads work with $flag... " >&6; } PTHREAD_CFLAGS="$flag" ;; pthread-config) # Extract the first word of "pthread-config", so it can be a program name with args. set dummy pthread-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ax_pthread_config+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ax_pthread_config"; then ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ax_pthread_config="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no" fi fi ax_pthread_config=$ac_cv_prog_ax_pthread_config if test -n "$ax_pthread_config"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5 $as_echo "$ax_pthread_config" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x"$ax_pthread_config" = xno; then continue; fi PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5 $as_echo_n "checking for the pthreads library -l$flag... " >&6; } PTHREAD_LIBS="-l$flag" ;; esac save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS $ax_pthread_extra_flags" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include static void routine(void *a) { a = 0; } static void *start_routine(void *a) { return a; } int main () { pthread_t th; pthread_attr_t attr; pthread_create(&th, 0, start_routine, 0); pthread_join(th, 0); pthread_attr_init(&attr); pthread_cleanup_push(routine, 0); pthread_cleanup_pop(0) /* ; */ ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_pthread_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 $as_echo "$ax_pthread_ok" >&6; } if test "x$ax_pthread_ok" = xyes; then break; fi PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Various other checks: if test "x$ax_pthread_ok" = xyes; then save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 $as_echo_n "checking for joinable pthread attribute... " >&6; } attr_name=unknown for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int attr = $attr; return attr /* ; */ ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : attr_name=$attr; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5 $as_echo "$attr_name" >&6; } if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then cat >>confdefs.h <<_ACEOF #define PTHREAD_CREATE_JOINABLE $attr_name _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5 $as_echo_n "checking if more special flags are required for pthreads... " >&6; } flag=no case ${host_os} in aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";; osf* | hpux*) flag="-D_REENTRANT";; solaris*) if test "$GCC" = "yes"; then flag="-D_REENTRANT" else # TODO: What about Clang on Solaris? flag="-mt -D_REENTRANT" fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag" >&5 $as_echo "$flag" >&6; } if test "x$flag" != xno; then PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5 $as_echo_n "checking for PTHREAD_PRIO_INHERIT... " >&6; } if ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int i = PTHREAD_PRIO_INHERIT; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_PTHREAD_PRIO_INHERIT=yes else ax_cv_PTHREAD_PRIO_INHERIT=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5 $as_echo "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; } if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"; then : $as_echo "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" # More AIX lossage: compile with *_r variant if test "x$GCC" != xyes; then case $host_os in aix*) case "x/$CC" in #( x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6) : #handle absolute path differently from PATH based program lookup case "x$CC" in #( x/*) : if as_fn_executable_p ${CC}_r; then : PTHREAD_CC="${CC}_r" fi ;; #( *) : for ac_prog in ${CC}_r do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_PTHREAD_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$PTHREAD_CC"; then ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_PTHREAD_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi PTHREAD_CC=$ac_cv_prog_PTHREAD_CC if test -n "$PTHREAD_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 $as_echo "$PTHREAD_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$PTHREAD_CC" && break done test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" ;; esac ;; #( *) : ;; esac ;; esac fi fi test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$ax_pthread_ok" = xyes; then if test "$CC" = "$PTHREAD_CC" -o -z "$ac_original_cc"; then have_pthread=yes else ac_prog_cc_no_pthread=yes fi : else ax_pthread_ok=no fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test "$have_pthread" = yes; then $as_echo "#define HAVE_PTHREAD 1" >>confdefs.h CC=$PTHREAD_CC fi fi # Needs ac_original_cc. if test -z "$GCC"; then # not using GCC { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to request ANSI compilation" >&5 $as_echo_n "checking how to request ANSI compilation... " >&6; } case "$host" in *-hpux* ) { $as_echo "$as_me:${as_lineno-$LINENO}: result: HPUX: adding -Ae" >&5 $as_echo "HPUX: adding -Ae" >&6; } CC="$CC -Ae" ;; *-aix* ) { $as_echo "$as_me:${as_lineno-$LINENO}: result: AIX: adding -qlanglvl=ansi -qhalt=e" >&5 $as_echo "AIX: adding -qlanglvl=ansi -qhalt=e" >&6; } CC="$CC -qlanglvl=ansi -qhalt=e" ;; *-dec-* ) { $as_echo "$as_me:${as_lineno-$LINENO}: result: DEC: adding -std1 -ieee" >&5 $as_echo "DEC: adding -std1 -ieee" >&6; } CC="$CC -std1" ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no idea" >&5 $as_echo "no idea" >&6; } ;; esac else # using GCC case "$host" in *-solaris*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: Solaris: adding -D__EXTENSIONS__" >&5 $as_echo "Solaris: adding -D__EXTENSIONS__" >&6; } CC="$CC -D__EXTENSIONS__" ;; esac fi OBJCC="$CC" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler works on ANSI C" >&5 $as_echo_n "checking whether the compiler works on ANSI C... " >&6; } if test "$cross_compiling" = yes; then : as_fn_error $? "Couldn't build even a trivial ANSI C program: check CC." "$LINENO" 5 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ main(int ac, char **av) { return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "Couldn't build even a trivial ANSI C program: check CC." "$LINENO" 5 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test -n "$GCC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: Turning on gcc compiler warnings." >&5 $as_echo "Turning on gcc compiler warnings." >&6; } CC="$CC -pedantic -Wall -Wstrict-prototypes -Wnested-externs -Wmissing-prototypes" OBJCC="$OBJCC -Wall" # As of gcc 3.4, we have "-Wdeclaration-after-statement" # and so perhaps now we can do without -pedantic? else case "$host" in *-irix5* |*-irix6.0-3* ) { $as_echo "$as_me:${as_lineno-$LINENO}: result: Turning on SGI compiler warnings." >&5 $as_echo "Turning on SGI compiler warnings." >&6; } CC="$CC -fullwarn -use_readonly_const -rdata_shared -g3" ;; # *-dec-osf* ) # if test -z "$GCC"; then # AC_MSG_RESULT(Turning on DEC C compiler warnings.) # CC="$CC -migrate -w0 -verbose -warnprotos" # fi # ;; esac fi if test -n "$GCC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wno-overlength-strings" >&5 $as_echo_n "checking whether gcc accepts -Wno-overlength-strings... " >&6; } if ${ac_cv_gcc_accepts_no_overlength+:} false; then : $as_echo_n "(cached) " >&6 else rm -rf conftest.$ac_ext touch conftest.$ac_ext if ( ( gcc -c -Wno-overlength-strings conftest.$ac_ext -o/dev/null >/dev/null ) 2>&1 | \ grep unrecognized >/dev/null ); then ac_cv_gcc_accepts_no_overlength=no else ac_cv_gcc_accepts_no_overlength=yes CC="$CC -Wno-overlength-strings" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc_accepts_no_overlength" >&5 $as_echo "$ac_cv_gcc_accepts_no_overlength" >&6; } ac_gcc_accepts_no_overlength="$ac_cv_gcc_accepts_no_overlength" fi if test -n "$GCC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wdeclaration-after-statement" >&5 $as_echo_n "checking whether gcc accepts -Wdeclaration-after-statement... " >&6; } if ${ac_cv_gcc_accepts_no_decl_after+:} false; then : $as_echo_n "(cached) " >&6 else rm -rf conftest.$ac_ext touch conftest.$ac_ext if ( ( gcc -c -Wdeclaration-after-statement conftest.$ac_ext -o/dev/null >/dev/null ) 2>&1 | \ grep unrecognized >/dev/null ); then ac_cv_gcc_accepts_no_decl_after=no else ac_cv_gcc_accepts_no_decl_after=yes CC="$CC -Wdeclaration-after-statement" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc_accepts_no_decl_after" >&5 $as_echo "$ac_cv_gcc_accepts_no_decl_after" >&6; } ac_gcc_accepts_no_decl_after="$ac_cv_gcc_accepts_no_decl_after" fi if test -n "$GCC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -no-cpp-precomp" >&5 $as_echo_n "checking whether gcc accepts -no-cpp-precomp... " >&6; } if ${ac_cv_gcc_accepts_no_cpp_precomp+:} false; then : $as_echo_n "(cached) " >&6 else rm -rf conftest.$ac_ext touch conftest.$ac_ext if ( ( gcc -c -no-cpp-precomp conftest.$ac_ext -o/dev/null >/dev/null ) 2>&1 | \ grep unrecognized >/dev/null ); then ac_cv_gcc_accepts_no_cpp_precomp=no else ac_cv_gcc_accepts_no_cpp_precomp=yes CC="$CC -no-cpp-precomp" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc_accepts_no_cpp_precomp" >&5 $as_echo "$ac_cv_gcc_accepts_no_cpp_precomp" >&6; } ac_gcc_accepts_no_cpp_precomp="$ac_cv_gcc_accepts_no_cpp_precomp" fi if test -n "$GCC"; then case "$host" in *-darwin* ) # Fucking Apple let // comments sneak into OpenGL headers, so # we *must* allow // comments when compiling on Mac OS 10.6! FUCK! ;; *) if test -n "$GCC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -std=c89" >&5 $as_echo_n "checking whether gcc accepts -std=c89... " >&6; } if ${ac_cv_gcc_accepts_std+:} false; then : $as_echo_n "(cached) " >&6 else rm -rf conftest.$ac_ext touch conftest.$ac_ext if ( ( gcc -c -std=c89 conftest.$ac_ext -o/dev/null >/dev/null ) 2>&1 | \ grep unrecognized >/dev/null ); then ac_cv_gcc_accepts_std=no else ac_cv_gcc_accepts_std=yes CC="$CC -std=c89" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc_accepts_std" >&5 $as_echo "$ac_cv_gcc_accepts_std" >&6; } ac_gcc_accepts_std="$ac_cv_gcc_accepts_std" fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling C++ comments in ANSI C code." >&5 $as_echo "Disabling C++ comments in ANSI C code." >&6; } # # The reason that // comments are banned from xscreensaver is that gcc is # basically the only compiler in the world that supports them in C code. # All other vendors support them only in their C++ compilers, not in their # ANSI C compilers. This means that it's a portability problem: every time # these comments have snuck into the xscreensaver source code, I've gotten # complaints about it the next day. So we turn off support for them in gcc # as well to prevent them from accidentially slipping in. # if test "$ac_gcc_accepts_std" = yes ; then # # -std=c89 defines __STRICT_ANSI__, which we don't want. # (That appears to be the only additional preprocessor symbol # it defines, in addition to the syntax changes it makes.) # # -std=gnu89 is no good, because // comments were a GNU extension # before they were in the ANSI C 99 spec... (gcc 2.96 permits // # with -std=gnu89 but not with -std=c89.) # # $CC already contains "-std=c89" via AC_GCC_ACCEPTS_STD CC="$CC -U__STRICT_ANSI__" # else # # The old way: # CC="$CC -Wp,-lang-c89" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -rf conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -rf conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -rf conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -rf conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -rf conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -rf conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac ac_bc_result=`echo 6+9 | bc 2>/dev/null` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bc" >&5 $as_echo_n "checking for bc... " >&6; } if test "$ac_bc_result" = "15" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } echo '' as_fn_error $? "Your system doesn't have \"bc\", which has been a standard part of Unix since the 1970s. Come back when your vendor has grown a clue." "$LINENO" 5 fi # stuff for Makefiles # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \"\${INSTALL} -d\" creates intermediate directories" >&5 $as_echo_n "checking whether \"\${INSTALL} -d\" creates intermediate directories... " >&6; } if ${ac_cv_install_d_creates_dirs+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_install_d_creates_dirs=no rm -rf conftestdir if mkdir conftestdir; then cd conftestdir 2>/dev/null ${INSTALL} -d `pwd`/dir1/dir2 >/dev/null 2>&1 if test -d dir1/dir2/. ; then ac_cv_install_d_creates_dirs=yes fi cd .. 2>/dev/null rm -rf conftestdir fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_install_d_creates_dirs" >&5 $as_echo "$ac_cv_install_d_creates_dirs" >&6; } if test "$ac_cv_install_d_creates_dirs" = no ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \"mkdir -p\" creates intermediate directories" >&5 $as_echo_n "checking whether \"mkdir -p\" creates intermediate directories... " >&6; } if ${ac_cv_mkdir_p_creates_dirs+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_mkdir_p_creates_dirs=no rm -rf conftestdir if mkdir conftestdir; then cd conftestdir 2>/dev/null mkdir -p dir1/dir2 >/dev/null 2>&1 if test -d dir1/dir2/. ; then ac_cv_mkdir_p_creates_dirs=yes fi cd .. 2>/dev/null rm -rf conftestdir fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_mkdir_p_creates_dirs" >&5 $as_echo "$ac_cv_mkdir_p_creates_dirs" >&6; } fi if test "$ac_cv_install_d_creates_dirs" = yes ; then INSTALL_DIRS='${INSTALL} -d' elif test "$ac_cv_mkdir_p_creates_dirs" = yes ; then INSTALL_DIRS='mkdir -p' else # any other ideas? INSTALL_DIRS='${INSTALL} -d' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -rf conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi # By default, autoconf sets INSTALL_SCRIPT to '${INSTALL_PROGRAM}'. # That's wrong: it should be set to '${INSTALL}', so that one can # implement the "install-strip" target properly (strip executables, # but do not try to strip scripts.) # INSTALL_SCRIPT='${INSTALL}' # random libc stuff { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -rf conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -rf conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -rf conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -rf conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in unistd.h inttypes.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" if test "x$ac_cv_type_mode_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define mode_t int _ACEOF fi ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" if test "x$ac_cv_type_pid_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _ACEOF fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 $as_echo_n "checking return type of signal handlers... " >&6; } if ${ac_cv_type_signal+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { return *(signal (0, 0)) (0) == 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_type_signal=int else ac_cv_type_signal=void fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5 $as_echo "$ac_cv_type_signal" >&6; } cat >>confdefs.h <<_ACEOF #define RETSIGTYPE $ac_cv_type_signal _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 $as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } if ${ac_cv_header_time+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { if ((struct tm *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_time=yes else ac_cv_header_time=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 $as_echo "$ac_cv_header_time" >&6; } if test $ac_cv_header_time = yes; then $as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 $as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } if ${ac_cv_header_sys_wait_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifndef WEXITSTATUS # define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) #endif #ifndef WIFEXITED # define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif int main () { int s; wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_sys_wait_h=yes else ac_cv_header_sys_wait_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 $as_echo "$ac_cv_header_sys_wait_h" >&6; } if test $ac_cv_header_sys_wait_h = yes; then $as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h fi ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 $as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } if eval \${$as_ac_Header+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> int main () { if ((DIR *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_ac_Header=yes" else eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_ac_Header { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if ${ac_cv_search_opendir+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' dir; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_opendir+:} false; then : break fi done if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if ${ac_cv_search_opendir+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' x; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_opendir+:} false; then : break fi done if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to call gettimeofday" >&5 $as_echo_n "checking how to call gettimeofday... " >&6; } if ${ac_cv_gettimeofday_args+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { struct timeval tv; struct timezone tzp; gettimeofday(&tv, &tzp); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_gettimeofday_args=2 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { struct timeval tv; gettimeofday(&tv); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_gettimeofday_args=1 else ac_gettimeofday_args=0 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_gettimeofday_args=$ac_gettimeofday_args fi ac_gettimeofday_args=$ac_cv_gettimeofday_args if test "$ac_gettimeofday_args" = 1 ; then $as_echo "#define HAVE_GETTIMEOFDAY 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: one argument" >&5 $as_echo "one argument" >&6; } elif test "$ac_gettimeofday_args" = 2 ; then $as_echo "#define HAVE_GETTIMEOFDAY 1" >>confdefs.h $as_echo "#define GETTIMEOFDAY_TWO_ARGS 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: two arguments" >&5 $as_echo "two arguments" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5 $as_echo "unknown" >&6; } fi # Check whether --enable-largefile was given. if test "${enable_largefile+set}" = set; then : enableval=$enable_largefile; fi if test "$enable_largefile" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 $as_echo_n "checking for special C compiler options needed for large files... " >&6; } if ${ac_cv_sys_largefile_CC+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : break fi rm -f core conftest.err conftest.$ac_objext CC="$CC -n32" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_largefile_CC=' -n32'; break fi rm -f core conftest.err conftest.$ac_objext break done CC=$ac_save_CC rm -rf conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 $as_echo "$ac_cv_sys_largefile_CC" >&6; } if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 $as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } if ${ac_cv_sys_file_offset_bits+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=64; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_file_offset_bits=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 $as_echo "$ac_cv_sys_file_offset_bits" >&6; } case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits _ACEOF ;; esac rm -rf conftest* if test $ac_cv_sys_file_offset_bits = unknown; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 $as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } if ${ac_cv_sys_large_files+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGE_FILES 1 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=1; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_large_files=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 $as_echo "$ac_cv_sys_large_files" >&6; } case $ac_cv_sys_large_files in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGE_FILES $ac_cv_sys_large_files _ACEOF ;; esac rm -rf conftest* fi fi for ac_func in select fcntl uname nice setpriority getcwd getwd putenv sbrk do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in sigaction syslog realpath setrlimit do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in setlocale do : ac_fn_c_check_func "$LINENO" "setlocale" "ac_cv_func_setlocale" if test "x$ac_cv_func_setlocale" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SETLOCALE 1 _ACEOF fi done for ac_func in getaddrinfo do : ac_fn_c_check_func "$LINENO" "getaddrinfo" "ac_cv_func_getaddrinfo" if test "x$ac_cv_func_getaddrinfo" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETADDRINFO 1 _ACEOF fi done ac_fn_c_check_member "$LINENO" "struct sockaddr" "sa_len" "ac_cv_member_struct_sockaddr_sa_len" "#include " if test "x$ac_cv_member_struct_sockaddr_sa_len" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT_SOCKADDR_SA_LEN 1 _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct icmp" >&5 $as_echo_n "checking for struct icmp... " >&6; } if ${ac_cv_have_icmp+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include int main () { struct icmp i; struct sockaddr s; struct sockaddr_in si; struct ip ip; i.icmp_type = ICMP_ECHO; i.icmp_code = 0; i.icmp_cksum = 0; i.icmp_id = 0; i.icmp_seq = 0; si.sin_family = AF_INET; #if defined(__DECC) || defined(_IP_VHL) ip.ip_vhl = 0; #else ip.ip_hl = 0; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_have_icmp=yes else ac_cv_have_icmp=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_icmp" >&5 $as_echo "$ac_cv_have_icmp" >&6; } if test "$ac_cv_have_icmp" = yes ; then $as_echo "#define HAVE_ICMP 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct icmphdr" >&5 $as_echo_n "checking for struct icmphdr... " >&6; } if ${ac_cv_have_icmphdr+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include int main () { struct icmphdr i; struct sockaddr s; struct sockaddr_in si; struct ip ip; i.type = ICMP_ECHO; i.code = 0; i.checksum = 0; i.un.echo.id = 0; i.un.echo.sequence = 0; si.sin_family = AF_INET; ip.ip_hl = 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_have_icmphdr=yes else ac_cv_have_icmphdr=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_icmphdr" >&5 $as_echo "$ac_cv_have_icmphdr" >&6; } if test "$ac_cv_have_icmphdr" = yes ; then $as_echo "#define HAVE_ICMPHDR 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getifaddrs" >&5 $as_echo_n "checking for getifaddrs... " >&6; } if ${ac_cv_have_getifaddrs+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { struct ifaddrs *ifa; getifaddrs (&ifa); ifa->ifa_next = 0; ifa->ifa_addr->sa_family = 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_have_getifaddrs=yes else ac_cv_have_getifaddrs=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_getifaddrs" >&5 $as_echo "$ac_cv_have_getifaddrs" >&6; } if test "$ac_cv_have_getifaddrs" = yes ; then $as_echo "#define HAVE_GETIFADDRS 1" >>confdefs.h fi for ac_header in crypt.h sys/select.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_prog in perl5 perl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $PERL in [\\/]* | ?:[\\/]*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PERL=$ac_cv_path_PERL if test -n "$PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 $as_echo "$PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$PERL" && break done if test -z "$PERL" ; then PERL_VERSION=0 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking perl version" >&5 $as_echo_n "checking perl version... " >&6; } if ${ac_cv_perl_version+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_perl_version=`$PERL -e "$perl_version_cmd"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_perl_version" >&5 $as_echo "$ac_cv_perl_version" >&6; } PERL_VERSION=$ac_cv_perl_version fi if test -z "$PERL" ; then # don't let it be blank... PERL=/usr/bin/perl fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 $as_echo_n "checking for X... " >&6; } # Check whether --with-x was given. if test "${with_x+set}" = set; then : withval=$with_x; fi # $have_x is `yes', `no', `disabled', or empty when we do not yet know. if test "x$with_x" = xno; then # The user explicitly disabled X. have_x=disabled else case $x_includes,$x_libraries in #( *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #( *,NONE | NONE,*) if ${ac_cv_have_x+:} false; then : $as_echo_n "(cached) " >&6 else # One or both of the vars are not set, and there is no cached value. ac_x_includes=no ac_x_libraries=no rm -f -r conftest.dir if mkdir conftest.dir; then cd conftest.dir cat >Imakefile <<'_ACEOF' incroot: @echo incroot='${INCROOT}' usrlibdir: @echo usrlibdir='${USRLIBDIR}' libdir: @echo libdir='${LIBDIR}' _ACEOF if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. for ac_var in incroot usrlibdir libdir; do eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" done # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. for ac_extension in a so sl dylib la dll; do if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && test -f "$ac_im_libdir/libX11.$ac_extension"; then ac_im_usrlibdir=$ac_im_libdir; break fi done # Screen out bogus values from the imake configuration. They are # bogus both because they are the default anyway, and because # using them would break gcc on systems where it needs fixed includes. case $ac_im_incroot in /usr/include) ac_x_includes= ;; *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; esac case $ac_im_usrlibdir in /usr/lib | /usr/lib64 | /lib | /lib64) ;; *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; esac fi cd .. rm -f -r conftest.dir fi # Standard set of common directories for X headers. # Check X11 before X11Rn because it is often a symlink to the current release. ac_x_header_dirs=' /usr/X11/include /usr/X11R7/include /usr/X11R6/include /usr/X11R5/include /usr/X11R4/include /usr/include/X11 /usr/include/X11R7 /usr/include/X11R6 /usr/include/X11R5 /usr/include/X11R4 /usr/local/X11/include /usr/local/X11R7/include /usr/local/X11R6/include /usr/local/X11R5/include /usr/local/X11R4/include /usr/local/include/X11 /usr/local/include/X11R7 /usr/local/include/X11R6 /usr/local/include/X11R5 /usr/local/include/X11R4 /usr/X386/include /usr/x386/include /usr/XFree86/include/X11 /usr/include /usr/local/include /usr/unsupported/include /usr/athena/include /usr/local/x11r5/include /usr/lpp/Xamples/include /usr/openwin/include /usr/openwin/share/include' if test "$ac_x_includes" = no; then # Guess where to find include files, by looking for Xlib.h. # First, try using that file with no special directory specified. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # We can compile using X headers with no special include directory. ac_x_includes= else for ac_dir in $ac_x_header_dirs; do if test -r "$ac_dir/X11/Xlib.h"; then ac_x_includes=$ac_dir break fi done fi rm -rf conftest.err conftest.i conftest.$ac_ext fi # $ac_x_includes = no if test "$ac_x_libraries" = no; then # Check for the libraries. # See if we find them without any special options. # Don't add to $LIBS permanently. ac_save_LIBS=$LIBS LIBS="-lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { XrmInitialize () ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : LIBS=$ac_save_LIBS # We can link X programs with no special library path. ac_x_libraries= else LIBS=$ac_save_LIBS for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` do # Don't even attempt the hair of trying to link an X program! for ac_extension in a so sl dylib la dll; do if test -r "$ac_dir/libX11.$ac_extension"; then ac_x_libraries=$ac_dir break 2 fi done done fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # $ac_x_libraries = no case $ac_x_includes,$ac_x_libraries in #( no,* | *,no | *\'*) # Didn't find X, or a directory has "'" in its name. ac_cv_have_x="have_x=no";; #( *) # Record where we found X for the cache. ac_cv_have_x="have_x=yes\ ac_x_includes='$ac_x_includes'\ ac_x_libraries='$ac_x_libraries'" esac fi ;; #( *) have_x=yes;; esac eval "$ac_cv_have_x" fi # $with_x != no if test "$have_x" != yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 $as_echo "$have_x" >&6; } no_x=yes else # If each of the values was on the command line, it overrides each guess. test "x$x_includes" = xNONE && x_includes=$ac_x_includes test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries # Update the cache value to reflect the command line values. ac_cv_have_x="have_x=yes\ ac_x_includes='$x_includes'\ ac_x_libraries='$x_libraries'" { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 $as_echo "libraries $x_libraries, headers $x_includes" >&6; } fi if test "$no_x" = yes; then # Not all programs may use this symbol, but it does not hurt to define it. $as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= else if test -n "$x_includes"; then X_CFLAGS="$X_CFLAGS -I$x_includes" fi # It would also be nice to do this for all -L options, not just this one. if test -n "$x_libraries"; then X_LIBS="$X_LIBS -L$x_libraries" # For Solaris; some versions of Sun CC require a space after -R and # others require no space. Words are not sufficient . . . . { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5 $as_echo_n "checking whether -R must be followed by a space... " >&6; } ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" ac_xsave_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } X_LIBS="$X_LIBS -R$x_libraries" else LIBS="$ac_xsave_LIBS -R $x_libraries" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } X_LIBS="$X_LIBS -R $x_libraries" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5 $as_echo "neither works" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_c_werror_flag=$ac_xsave_c_werror_flag LIBS=$ac_xsave_LIBS fi # Check for system-dependent libraries X programs must link with. # Do this before checking for the system-independent R6 libraries # (-lICE), since we may need -lsocket or whatever for X linking. if test "$ISC" = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" else # Martyn Johnson says this is needed for Ultrix, if the X # libraries were built with DECnet support. And Karl Berry says # the Alpha needs dnet_stub (dnet does not exist). ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 XOpenDisplay (); int main () { return XOpenDisplay (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5 $as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; } if ${ac_cv_lib_dnet_dnet_ntoa+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 dnet_ntoa (); int main () { return dnet_ntoa (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dnet_dnet_ntoa=yes else ac_cv_lib_dnet_dnet_ntoa=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 $as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; } if test "x$ac_cv_lib_dnet_dnet_ntoa" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" fi if test $ac_cv_lib_dnet_dnet_ntoa = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5 $as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; } if ${ac_cv_lib_dnet_stub_dnet_ntoa+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet_stub $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 dnet_ntoa (); int main () { return dnet_ntoa (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dnet_stub_dnet_ntoa=yes else ac_cv_lib_dnet_stub_dnet_ntoa=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 $as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" fi fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ac_xsave_LIBS" # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, # to get the SysV transport functions. # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) # needs -lnsl. # The nsl library prevents programs from opening the X display # on Irix 5.2, according to T.E. Dickey. # The functions gethostbyname, getservbyname, and inet_addr are # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" if test "x$ac_cv_func_gethostbyname" = xyes; then : fi if test $ac_cv_func_gethostbyname = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 $as_echo_n "checking for gethostbyname in -lnsl... " >&6; } if ${ac_cv_lib_nsl_gethostbyname+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 gethostbyname (); int main () { return gethostbyname (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_nsl_gethostbyname=yes else ac_cv_lib_nsl_gethostbyname=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" fi if test $ac_cv_lib_nsl_gethostbyname = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5 $as_echo_n "checking for gethostbyname in -lbsd... " >&6; } if ${ac_cv_lib_bsd_gethostbyname+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 gethostbyname (); int main () { return gethostbyname (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_bsd_gethostbyname=yes else ac_cv_lib_bsd_gethostbyname=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5 $as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } if test "x$ac_cv_lib_bsd_gethostbyname" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" fi fi fi # lieder@skyler.mavd.honeywell.com says without -lsocket, # socket/setsockopt and other routines are undefined under SCO ODT # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary # on later versions), says Simon Leinen: it contains gethostby* # variants that don't use the name server (or something). -lsocket # must be given before -lnsl if both are needed. We assume that # if connect needs -lnsl, so does gethostbyname. ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" if test "x$ac_cv_func_connect" = xyes; then : fi if test $ac_cv_func_connect = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5 $as_echo_n "checking for connect in -lsocket... " >&6; } if ${ac_cv_lib_socket_connect+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $X_EXTRA_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 connect (); int main () { return connect (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_connect=yes else ac_cv_lib_socket_connect=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5 $as_echo "$ac_cv_lib_socket_connect" >&6; } if test "x$ac_cv_lib_socket_connect" = xyes; then : X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" fi fi # Guillermo Gomez says -lposix is necessary on A/UX. ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove" if test "x$ac_cv_func_remove" = xyes; then : fi if test $ac_cv_func_remove = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5 $as_echo_n "checking for remove in -lposix... " >&6; } if ${ac_cv_lib_posix_remove+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lposix $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 remove (); int main () { return remove (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_posix_remove=yes else ac_cv_lib_posix_remove=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5 $as_echo "$ac_cv_lib_posix_remove" >&6; } if test "x$ac_cv_lib_posix_remove" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" fi fi # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat" if test "x$ac_cv_func_shmat" = xyes; then : fi if test $ac_cv_func_shmat = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5 $as_echo_n "checking for shmat in -lipc... " >&6; } if ${ac_cv_lib_ipc_shmat+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lipc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 shmat (); int main () { return shmat (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ipc_shmat=yes else ac_cv_lib_ipc_shmat=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5 $as_echo "$ac_cv_lib_ipc_shmat" >&6; } if test "x$ac_cv_lib_ipc_shmat" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" fi fi fi # Check for libraries that X11R6 Xt/Xaw programs need. ac_save_LDFLAGS=$LDFLAGS test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to # check for ICE first), but we must link in the order -lSM -lICE or # we get undefined symbols. So assume we have SM if we have ICE. # These have to be linked with before -lX11, unlike the other # libraries we check for below, so use a different variable. # John Interrante, Karl Berry { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5 $as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; } if ${ac_cv_lib_ICE_IceConnectionNumber+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lICE $X_EXTRA_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 IceConnectionNumber (); int main () { return IceConnectionNumber (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ICE_IceConnectionNumber=yes else ac_cv_lib_ICE_IceConnectionNumber=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 $as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } if test "x$ac_cv_lib_ICE_IceConnectionNumber" = xyes; then : X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" fi LDFLAGS=$ac_save_LDFLAGS fi if test "$have_x" != yes; then as_fn_error $? "Couldn't find X11 headers/libs. Try \`$0 --help'." "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X app-defaults directory" >&5 $as_echo_n "checking for X app-defaults directory... " >&6; } if ${ac_cv_x_app_defaults+:} false; then : $as_echo_n "(cached) " >&6 else # skip this, it's always wrong these days. # AC_PATH_X_APP_DEFAULTS_XMKMF if test x"$ac_x_app_defaults" = x; then true # Look for the directory under a standard set of common directories. # Check X11 before X11Rn because it's often a symlink to the current release. for ac_dir in \ \ /usr/share/X11/app-defaults \ \ /usr/X11/lib/app-defaults \ /usr/X11R6/lib/app-defaults \ /usr/X11R6/lib/X11/app-defaults \ /usr/X11R5/lib/app-defaults \ /usr/X11R5/lib/X11/app-defaults \ /usr/X11R4/lib/app-defaults \ /usr/X11R4/lib/X11/app-defaults \ \ /usr/lib/X11/app-defaults \ /usr/lib/X11R6/app-defaults \ /usr/lib/X11R5/app-defaults \ /usr/lib/X11R4/app-defaults \ \ /etc/X11/app-defaults \ \ /usr/local/X11/lib/app-defaults \ /usr/local/X11R6/lib/app-defaults \ /usr/local/X11R5/lib/app-defaults \ /usr/local/X11R4/lib/app-defaults \ \ /usr/local/lib/X11/app-defaults \ /usr/local/lib/X11R6/app-defaults \ /usr/local/lib/X11R6/X11/app-defaults \ /usr/local/lib/X11R5/app-defaults \ /usr/local/lib/X11R5/X11/app-defaults \ /usr/local/lib/X11R4/app-defaults \ /usr/local/lib/X11R4/X11/app-defaults \ \ /usr/X386/lib/X11/app-defaults \ /usr/x386/lib/X11/app-defaults \ /usr/XFree86/lib/X11/app-defaults \ \ /usr/lib/X11/app-defaults \ /usr/local/lib/X11/app-defaults \ /usr/unsupported/lib/X11/app-defaults \ /usr/athena/lib/X11/app-defaults \ /usr/local/x11r5/lib/X11/app-defaults \ /usr/lpp/Xamples/lib/X11/app-defaults \ /lib/usr/lib/X11/app-defaults \ \ /usr/openwin/lib/app-defaults \ /usr/openwin/lib/X11/app-defaults \ /usr/openwin/share/lib/app-defaults \ /usr/openwin/share/lib/X11/app-defaults \ \ /X11R6/lib/app-defaults \ /X11R5/lib/app-defaults \ /X11R4/lib/app-defaults \ ; \ do if test -d "$ac_dir"; then ac_x_app_defaults=$ac_dir break fi done fi if test x"$ac_x_app_defaults" = x; then /bin/echo -n 'fallback: ' ac_cv_x_app_defaults="/usr/lib/X11/app-defaults" else # Record where we found app-defaults for the cache. ac_cv_x_app_defaults="$ac_x_app_defaults" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_x_app_defaults" >&5 $as_echo "$ac_cv_x_app_defaults" >&6; } eval ac_x_app_defaults="$ac_cv_x_app_defaults" case "$host" in *-hpux*) # The following arcana was gleaned from conversations with # Eric Schwartz : # # On HPUX 10.x, the parts of X that HP considers "standard" live in # /usr/{include,lib}/X11R6/. The parts that HP doesn't consider # "standard", notably, Xaw and Xmu, live in /usr/contrib/X11R6/. # Yet /usr/contrib/X11R6/ comes preinstalled on all HPUX systems. # Also, there are symlinks from /usr/include/ and /usr/lib/ into # /usr/{include,lib}/X11R6/, so that (if you don't use Xmu at all) # you don't need any -I or -L arguments. # # On HPUX 9.x, /usr/{include,lib}/X11R5/ and /usr/contrib/X11R5/ # are the same division as 10.x. However, there are no symlinks to # the X stuff from /usr/include/ and /usr/lib/, so -I and -L # arguments are always necessary. # # However, X11R6 was available on HPUX 9.x as a patch: if that # patch was installed, then all of X11R6 went in to # /usr/contrib/X11R6/ (there was no /usr/{include,lib}/X11R6/.) # # HPUX 8.x was the same as 9.x, but was X11R4 instead (I don't know # whether R5 was available as a patch; R6 undoubtedly was not.) # # So. We try and use the highest numbered pair of # /usr/{include,lib}/X11R?/ and /usr/contrib/X11R?/{include,lib}/ # that are available. We do not mix and match different versions # of X. # # Question I still don't know the answer to: (do you?) # # * On HPUX 9.x, where /usr/include/X11R5/ was standard, and # /usr/contrib/X11R6/ could be installed as a patch, what was in # that contrib directory? Did it contain so-called "standard" # X11R6, or did it include Xaw and Xmu as well? If the former, # where did one find Xaw and Xmu on 9.x R6 systems? Would this # be a situation where one had to reach into the R5 headers and # libs to find Xmu? That is, must both R6 and R5 directories # be on the -I and -L lists in that case? # for version in X11R6 X11R5 X11R4 ; do # if either pair of directories exists... if test -d /usr/include/$version || test -d /usr/contrib/$version/include then # if contrib exists, use it... if test -d /usr/contrib/$version/include ; then X_CFLAGS="$X_CFLAGS -I/usr/contrib/$version/include" X_LIBS="$X_LIBS -L/usr/contrib/$version/lib" fi # if the "standard" one exists, use it. if test -d /usr/include/$version ; then X_CFLAGS="$X_CFLAGS -I/usr/include/$version" X_LIBS="$X_LIBS -L/usr/lib/$version" fi # since at least one of the pair exists, go no farther. break fi done # Now find Motif. Thanks for not making xmkmf find this by # default, you losers. # if test -d /usr/include/Motif2.1 ; then X_CFLAGS="$X_CFLAGS -I/usr/include/Motif2.1" X_LIBS="$X_LIBS -L/usr/lib/Motif2.1" elif test -d /usr/include/Motif1.2 ; then X_CFLAGS="$X_CFLAGS -I/usr/include/Motif1.2" X_LIBS="$X_LIBS -L/usr/lib/Motif1.2" elif test -d /usr/include/Motif1.1 ; then X_CFLAGS="$X_CFLAGS -I/usr/include/Motif1.1" X_LIBS="$X_LIBS -L/usr/lib/Motif1.1" fi # Now let's check for the pseudo-standard locations for OpenGL and XPM. # if test -d /opt/graphics/OpenGL/include ; then # HP-UX 10.20 puts it here X_CFLAGS="-I/opt/graphics/OpenGL/include $X_CFLAGS" X_LIBS="-L/opt/graphics/OpenGL/lib $X_LIBS" elif test -d /opt/Mesa/lib ; then X_CFLAGS="-I/opt/Mesa/include $X_CFLAGS" X_LIBS="-L/opt/Mesa/lib $X_LIBS" fi if test -d /opt/xpm/lib/X11 ; then X_CFLAGS="-I/opt/xpm/include $X_CFLAGS" X_LIBS="-L/opt/xpm/lib/X11 $X_LIBS" fi # On HPUX, default to installing in /opt/xscreensaver/ instead of # in /usr/local/, unless there is already an xscreensaver in # /usr/local/bin/. This can be overridden with the --prefix arg # to configure. I'm not sure this is the right thing to do, but # Richard Lloyd says so... # if test \! -x /usr/local/bin/xscreensaver ; then ac_default_prefix=/opt/xscreensaver fi ;; *-solaris*) # Thanks for not making xmkmf find this by default, pinheads. # And thanks for moving things around again, too. Is this # really the standard location now? What happened to the # joke that this kind of thing went in /opt? # cthomp says "answer: CDE (Common Disorganized Environment)" # if test -f /usr/dt/include/Xm/Xm.h ; then X_CFLAGS="$X_CFLAGS -I/usr/dt/include" MOTIF_LIBS="$MOTIF_LIBS -L/usr/dt/lib -R/usr/dt/lib" # Some versions of Slowlaris Motif require -lgen. But not all. Why? { $as_echo "$as_me:${as_lineno-$LINENO}: checking for regcmp in -lgen" >&5 $as_echo_n "checking for regcmp in -lgen... " >&6; } if ${ac_cv_lib_gen_regcmp+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgen $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 regcmp (); int main () { return regcmp (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gen_regcmp=yes else ac_cv_lib_gen_regcmp=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gen_regcmp" >&5 $as_echo "$ac_cv_lib_gen_regcmp" >&6; } if test "x$ac_cv_lib_gen_regcmp" = xyes; then : MOTIF_LIBS="$MOTIF_LIBS -lgen" fi fi ;; *-darwin*) # On MacOS X (10.x with "fink"), many things are under /sw/. # if test -d /sw/include ; then X_CFLAGS="-I/sw/include $X_CFLAGS" X_LIBS="-L/sw/lib $X_LIBS" fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XPointer" >&5 $as_echo_n "checking for XPointer... " >&6; } if ${ac_cv_xpointer+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { XPointer foo = (XPointer) 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_xpointer=yes else ac_cv_xpointer=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_xpointer" >&5 $as_echo "$ac_cv_xpointer" >&6; } if test "$ac_cv_xpointer" != yes; then $as_echo "#define XPointer char*" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether this is MacOS X" >&5 $as_echo_n "checking whether this is MacOS X... " >&6; } ac_macosx=no case "$host" in *-apple-darwin* ) ac_macosx=yes ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_macosx" >&5 $as_echo "$ac_macosx" >&6; } ############################################################################### # # Gettext support # ############################################################################### { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 $as_echo_n "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test "${enable_nls+set}" = set; then : enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } case "$am__api_version" in 1.01234) as_fn_error $? "Automake 1.5 or newer is required to use intltool" "$LINENO" 5 ;; *) ;; esac INTLTOOL_REQUIRED_VERSION_AS_INT=`echo | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3` INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` if test -n ""; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intltool >= " >&5 $as_echo_n "checking for intltool >= ... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_APPLIED_VERSION found" >&5 $as_echo "$INTLTOOL_APPLIED_VERSION found" >&6; } test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" || as_fn_error $? "Your intltool is too old. You need intltool or later." "$LINENO" 5 fi # Extract the first word of "intltool-update", so it can be a program name with args. set dummy intltool-update; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_UPDATE+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_UPDATE in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_UPDATE="$INTLTOOL_UPDATE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_UPDATE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_UPDATE=$ac_cv_path_INTLTOOL_UPDATE if test -n "$INTLTOOL_UPDATE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_UPDATE" >&5 $as_echo "$INTLTOOL_UPDATE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "intltool-merge", so it can be a program name with args. set dummy intltool-merge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_MERGE+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_MERGE in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_MERGE="$INTLTOOL_MERGE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_MERGE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_MERGE=$ac_cv_path_INTLTOOL_MERGE if test -n "$INTLTOOL_MERGE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_MERGE" >&5 $as_echo "$INTLTOOL_MERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "intltool-extract", so it can be a program name with args. set dummy intltool-extract; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_EXTRACT+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_EXTRACT in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_EXTRACT="$INTLTOOL_EXTRACT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_EXTRACT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_EXTRACT=$ac_cv_path_INTLTOOL_EXTRACT if test -n "$INTLTOOL_EXTRACT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_EXTRACT" >&5 $as_echo "$INTLTOOL_EXTRACT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then as_fn_error $? "The intltool scripts were not found. Please install intltool." "$LINENO" 5 fi if test -z "$AM_DEFAULT_VERBOSITY"; then AM_DEFAULT_VERBOSITY=1 fi INTLTOOL_V_MERGE='$(INTLTOOL__v_MERGE_$(V))' INTLTOOL__v_MERGE_='$(INTLTOOL__v_MERGE_$(AM_DEFAULT_VERBOSITY))' INTLTOOL__v_MERGE_0='@echo " ITMRG " $@;' INTLTOOL_V_MERGE_OPTIONS='$(intltool__v_merge_options_$(V))' intltool__v_merge_options_='$(intltool__v_merge_options_$(AM_DEFAULT_VERBOSITY))' intltool__v_merge_options_0='-q' INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -p $(top_srcdir)/po $< $@' INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge 5000; then INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u --no-translations $< $@' else INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)_it_tmp_dir=tmp.intltool.$$RANDOM && mkdir $$_it_tmp_dir && LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u $$_it_tmp_dir $< $@ && rmdir $$_it_tmp_dir' fi INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' # Check the gettext tools to make sure they are GNU # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case $XGETTEXT in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_XGETTEXT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XGETTEXT=$ac_cv_path_XGETTEXT if test -n "$XGETTEXT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGMERGE+:} false; then : $as_echo_n "(cached) " >&6 else case $MSGMERGE in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MSGMERGE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MSGMERGE=$ac_cv_path_MSGMERGE if test -n "$MSGMERGE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 $as_echo "$MSGMERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $MSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MSGFMT=$ac_cv_path_MSGFMT if test -n "$MSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5 fi xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`" mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`" mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`" if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5 fi # Substitute ALL_LINGUAS so we can use it in po/Makefile # Set DATADIRNAME correctly if it is not set yet # (copied from glib-gettext.m4) if test -z "$DATADIRNAME"; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : DATADIRNAME=share else case $host in *-*-solaris*) ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : DATADIRNAME=share else DATADIRNAME=lib fi ;; *) DATADIRNAME=lib ;; esac fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi GETTEXT_PACKAGE=xscreensaver cat >>confdefs.h <<_ACEOF #define GETTEXT_PACKAGE "$GETTEXT_PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE "$GETTEXT_PACKAGE" _ACEOF 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" for ac_header in locale.h do : ac_fn_c_check_header_mongrel "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LOCALE_H 1 _ACEOF fi done if test $ac_cv_header_locale_h = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 $as_echo_n "checking for LC_MESSAGES... " >&6; } if ${am_cv_val_LC_MESSAGES+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return LC_MESSAGES ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_val_LC_MESSAGES=yes else am_cv_val_LC_MESSAGES=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_val_LC_MESSAGES" >&5 $as_echo "$am_cv_val_LC_MESSAGES" >&6; } if test $am_cv_val_LC_MESSAGES = yes; then $as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h fi fi USE_NLS=yes gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= ac_fn_c_check_header_mongrel "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" if test "x$ac_cv_header_libintl_h" = xyes; then : gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in libc" >&5 $as_echo_n "checking for ngettext in libc... " >&6; } if ${gt_cv_func_ngettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !ngettext ("","", 1) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_ngettext_libc=yes else gt_cv_func_ngettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_ngettext_libc" >&5 $as_echo "$gt_cv_func_ngettext_libc" >&6; } if test "$gt_cv_func_ngettext_libc" = "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in libc" >&5 $as_echo_n "checking for dgettext in libc... " >&6; } if ${gt_cv_func_dgettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !dgettext ("","") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_dgettext_libc=yes else gt_cv_func_dgettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_dgettext_libc" >&5 $as_echo "$gt_cv_func_dgettext_libc" >&6; } fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bindtextdomain in -lintl" >&5 $as_echo_n "checking for bindtextdomain in -lintl... " >&6; } if ${ac_cv_lib_intl_bindtextdomain+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 bindtextdomain (); int main () { return bindtextdomain (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_bindtextdomain=yes else ac_cv_lib_intl_bindtextdomain=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_bindtextdomain" >&5 $as_echo "$ac_cv_lib_intl_bindtextdomain" >&6; } if test "x$ac_cv_lib_intl_bindtextdomain" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if ${ac_cv_lib_intl_ngettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in -lintl" >&5 $as_echo_n "checking for dgettext in -lintl... " >&6; } if ${ac_cv_lib_intl_dgettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 dgettext (); int main () { return dgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dgettext=yes else ac_cv_lib_intl_dgettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dgettext" >&5 $as_echo "$ac_cv_lib_intl_dgettext" >&6; } if test "x$ac_cv_lib_intl_dgettext" = xyes; then : gt_cv_func_dgettext_libintl=yes fi fi fi if test "$gt_cv_func_dgettext_libintl" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -liconv is needed to use gettext" >&5 $as_echo_n "checking if -liconv is needed to use gettext... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 $as_echo "" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if ${ac_cv_lib_intl_ngettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dcgettext in -lintl" >&5 $as_echo_n "checking for dcgettext in -lintl... " >&6; } if ${ac_cv_lib_intl_dcgettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 dcgettext (); int main () { return dcgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dcgettext=yes else ac_cv_lib_intl_dcgettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dcgettext" >&5 $as_echo "$ac_cv_lib_intl_dcgettext" >&6; } if test "x$ac_cv_lib_intl_dcgettext" = xyes; then : gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv else : fi else : fi fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs" fi if test "$gt_cv_have_gettext" = "yes"; then $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in /*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then ac_cv_path_MSGFMT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" for ac_func in dcgettext do : ac_fn_c_check_func "$LINENO" "dcgettext" "ac_cv_func_dcgettext" if test "x$ac_cv_func_dcgettext" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DCGETTEXT 1 _ACEOF fi done MSGFMT_OPTS= { $as_echo "$as_me:${as_lineno-$LINENO}: checking if msgfmt accepts -c" >&5 $as_echo_n "checking if msgfmt accepts -c... " >&6; } cat >conftest.foo <<_ACEOF msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" _ACEOF if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$MSGFMT -c -o /dev/null conftest.foo"; } >&5 ($MSGFMT -c -o /dev/null conftest.foo) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then MSGFMT_OPTS=-c; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } echo "$as_me: failed input was:" >&5 sed 's/^/| /' conftest.foo >&5 fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in /*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then ac_cv_path_XGETTEXT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : CATOBJEXT=.gmo DATADIRNAME=share else case $host in *-*-solaris*) ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : CATOBJEXT=.gmo DATADIRNAME=share else CATOBJEXT=.mo DATADIRNAME=lib fi ;; *-*-openbsd*) CATOBJEXT=.mo DATADIRNAME=share ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi fi if test "$gt_cv_have_gettext" = "yes" ; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h fi if test "$XGETTEXT" != ":"; then if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else { $as_echo "$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it" >&5 $as_echo "found xgettext program is not GNU xgettext; ignore it" >&6; } XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po ac_config_commands="$ac_config_commands default-1" for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5 $as_echo_n "checking for catalogs to be installed... " >&6; } NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5 $as_echo "$LINGUAS" >&6; } fi if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES MKINSTALLDIRS="$INSTALL_DIRS" ############################################################################### # # Check for -lXmu (some fucked up vendors don't ship it...) # ############################################################################### have_xmu=no ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/Xmu/Error.h" "ac_cv_header_X11_Xmu_Error_h" "#include #include #include " if test "x$ac_cv_header_X11_Xmu_Error_h" = xyes; then : have_xmu=yes fi CPPFLAGS="$ac_save_CPPFLAGS" if test "$have_xmu" = no ; then XMU_SRCS='$(UTILS_SRC)/xmu.c' XMU_OBJS='$(UTILS_BIN)/xmu.o' XMU_LIBS='' else XMU_SRCS='' XMU_OBJS='' XMU_LIBS='-lXmu' $as_echo "#define HAVE_XMU 1" >>confdefs.h fi ############################################################################### # # Check for the SunOS 4.1.x _get_wmShellWidgetClass bug. # See comp.windows.x FAQ question 124. The right fix is to # get OpenWindows 3.0 patches 100512-02 and 100573-03. # ############################################################################### if test "$have_xmu" = yes ; then case "$host" in *-sunos4*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the SunOS 4.1.x _get_wmShellWidgetClass bug" >&5 $as_echo_n "checking for the SunOS 4.1.x _get_wmShellWidgetClass bug... " >&6; } if ${ac_cv_sunos_xmu_bug+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_LDFLAGS="$LDFLAGS" if test \! -z "$x_libraries" ; then LDFLAGS="$LDFLAGS -L$x_libraries" fi # Note: this trick never works! (Generally.) # We're only getting away with using AC_TRY_LINK # with X libraries because we know it's SunOS. LDFLAGS="$LDFLAGS -lXmu -lXt -lX11 -lXext -lm" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_sunos_xmu_bug=no else ac_cv_sunos_xmu_bug=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$ac_save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sunos_xmu_bug" >&5 $as_echo "$ac_cv_sunos_xmu_bug" >&6; } if test "$ac_cv_sunos_xmu_bug" = yes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler understands -static" >&5 $as_echo_n "checking whether the compiler understands -static... " >&6; } if ${ac_cv_ld_static+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -static" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_ld_static=yes else ac_cv_ld_static=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$ac_save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_ld_static" >&5 $as_echo "$ac_cv_ld_static" >&6; } if test "$ac_cv_ld_static" = yes ; then LDFLAGS="$LDFLAGS -static" else LDFLAGS="$LDFLAGS -Bstatic" fi fi ;; esac fi ############################################################################### # # Handle the --with-hackdir option # ############################################################################### have_hackdir=yes with_hackdir_req=unspecified # Check whether --with-hackdir was given. if test "${with_hackdir+set}" = set; then : withval=$with_hackdir; with_hackdir="$withval"; with_hackdir_req="$withval" else with_hackdir=yes fi if test x"$with_hackdir" = xyes; then HACKDIR='${libexecdir}/xscreensaver' elif test x"$with_hackdir" = xno; then HACKDIR='${bindir}' else HACKDIR=$with_hackdir fi # canonicalize slashes. HACKDIR=`echo "${HACKDIR}" | sed 's@/$@@;s@//*@/@g'` # Expand HACKDIR as HACKDIR_FULL HACKDIR_FULL=`eval eval eval eval eval eval eval eval eval echo $HACKDIR` # This option used to be called --enable-subdir; make sure that is no longer # used, since configure brain-damagedly ignores unknown --enable options. obsolete_enable= # Check whether --enable-subdir was given. if test "${enable_subdir+set}" = set; then : enableval=$enable_subdir; obsolete_enable=yes fi if test -n "$obsolete_enable"; then echo "error: the --enable-subdir option has been replaced with" echo " the new --with-hackdir option; see \`configure --help'" echo " for more information." exit 1 fi ############################################################################### # # Handle the --with-configdir option # Help for --with-x-app-defaults option added. # ############################################################################### have_configdir=yes with_configdir_req=unspecified # Check whether --with-configdir was given. if test "${with_configdir+set}" = set; then : withval=$with_configdir; with_configdir="$withval"; with_configdir_req="$withval" else with_configdir=yes fi if test x"$with_configdir" = xyes; then HACK_CONF_DIR='${datadir}/xscreensaver/config' elif test x"$with_configdir" = xno; then echo "error: must be yes, or a pathname: --with-configdir=$with_configdir" exit 1 else # there must be a better way than this... if test -z "`echo $with_configdir | sed 's@^/.*@@'`" ; then # absolute path HACK_CONF_DIR=$with_configdir else # relative path HACK_CONF_DIR="\${exec_prefix}$with_configdir" fi fi ############################################################################### # # Check for the SGI SCREEN_SAVER server extension. # ############################################################################### #have_sgi=no #with_sgi_req=unspecified #AC_ARG_WITH(sgi-ext, #[Except where noted, all of the --with options below can also take a #directory argument: for example, `--with-motif=/opt/Motif'. That would #cause /opt/Motif/include/ to be added to the -I list, and /opt/Motif/lib/ #to be added to the -L list, assuming those directories exist. # #By default, support for each of these options will be built in, if the #relevant library routines exist. At run time, they will then be used #only if the X server being used supports them. Each --with option has #a corresponding --without option, to override building support for them #at all. # #Screen blanking and idle-detection options: # # --with-sgi-ext Include support for the SGI SCREEN_SAVER extension.], # [with_sgi="$withval"; with_sgi_req="$withval"],[with_sgi=yes]) # #HANDLE_X_PATH_ARG(with_sgi, --with-sgi-ext, SGI SCREEN_SAVER) # #if test "$with_sgi" = yes; then # AC_CHECK_X_HEADER(X11/extensions/XScreenSaver.h, # [have_sgi=yes # AC_DEFINE(HAVE_SGI_SAVER_EXTENSION)],, # [#include ]) # #elif test "$with_sgi" != no; then # echo "error: must be yes or no: --with-sgi-ext=$with_sgi" # exit 1 #fi ############################################################################### # # Check for the XIDLE server extension. # ############################################################################### #have_xidle=no #with_xidle_req=unspecified #AC_ARG_WITH(xidle-ext, #[ --with-xidle-ext Include support for the XIDLE extension.], # [with_xidle="$withval"; with_xidle_req="$withval"],[with_xidle=yes]) # #HANDLE_X_PATH_ARG(with_xidle, --with-xidle-ext, XIDLE) # #if test "$with_xidle" = yes; then # AC_CHECK_X_HEADER(X11/extensions/xidle.h, # [have_xidle=yes # AC_DEFINE(HAVE_XIDLE_EXTENSION)],, # [#include ]) #elif test "$with_xidle" != no; then # echo "error: must be yes or no: --with-xidle-ext=$with_xidle" # exit 1 #fi ############################################################################### # # Check for the SGI-VIDEO-CONTROL server extension. # ############################################################################### #have_sgivc=no #with_sgivc_req=unspecified #AC_ARG_WITH(sgivc-ext, #[ --with-sgivc-ext Include support for the SGI-VIDEO-CONTROL extension.], # [with_sgivc="$withval"; with_sgivc_req="$withval"],[with_sgivc=yes]) # #HANDLE_X_PATH_ARG(with_sgivc, --with-sgivc-ext, SGI-VIDEO-CONTROL) # #if test "$with_sgivc" = yes; then # # # first check for XSGIvc.h # AC_CHECK_X_HEADER(X11/extensions/XSGIvc.h, [have_sgivc=yes],, # [#include ]) # # # if that succeeded, then check for the -lXsgivc # if test "$have_sgivc" = yes; then # have_sgivc=no # AC_CHECK_X_LIB(Xsgivc, XSGIvcQueryGammaMap, # [have_sgivc=yes; SAVER_LIBS="$SAVER_LIBS -lXsgivc"], [true], # -lXext -lX11) # fi # # # if that succeeded, then we've really got it. # if test "$have_sgivc" = yes; then # AC_DEFINE(HAVE_SGI_VC_EXTENSION) # fi # #elif test "$with_sgivc" != no; then # echo "error: must be yes or no: --with-sgivc-ext=$with_sgivc" # exit 1 #fi ############################################################################### # # Check for the DPMS server extension. # ############################################################################### have_dpms=no with_dpms_req=unspecified # Check whether --with-dpms-ext was given. if test "${with_dpms_ext+set}" = set; then : withval=$with_dpms_ext; with_dpms="$withval"; with_dpms_req="$withval" else with_dpms=yes fi case "$with_dpms" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DPMS headers" >&5 $as_echo_n "checking for DPMS headers... " >&6; } d=$with_dpms/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DPMS libs" >&5 $as_echo_n "checking for DPMS libs... " >&6; } d=$with_dpms/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_dpms_req="yes" with_dpms=$with_dpms_req ;; *) echo "" echo "error: argument to --with-dpms-ext must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$with_dpms" = yes; then # first check for dpms.h ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/extensions/dpms.h" "ac_cv_header_X11_extensions_dpms_h" "#include #include " if test "x$ac_cv_header_X11_extensions_dpms_h" = xyes; then : have_dpms=yes fi CPPFLAGS="$ac_save_CPPFLAGS" # if that succeeded, then check for the DPMS code in the libraries if test "$have_dpms" = yes; then # first look in -lXext (this is where it is with XFree86 4.0) have_dpms=no ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DPMSInfo in -lXext" >&5 $as_echo_n "checking for DPMSInfo in -lXext... " >&6; } if ${ac_cv_lib_Xext_DPMSInfo+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXext -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 DPMSInfo (); int main () { return DPMSInfo (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xext_DPMSInfo=yes else ac_cv_lib_Xext_DPMSInfo=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xext_DPMSInfo" >&5 $as_echo "$ac_cv_lib_Xext_DPMSInfo" >&6; } if test "x$ac_cv_lib_Xext_DPMSInfo" = xyes; then : have_dpms=yes else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" # if that failed, look in -lXdpms (this is where it was in XFree86 3.x) if test "$have_dpms" = no; 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` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DPMSInfo in -lXdpms" >&5 $as_echo_n "checking for DPMSInfo in -lXdpms... " >&6; } if ${ac_cv_lib_Xdpms_DPMSInfo+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXdpms -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 DPMSInfo (); int main () { return DPMSInfo (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xdpms_DPMSInfo=yes else ac_cv_lib_Xdpms_DPMSInfo=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xdpms_DPMSInfo" >&5 $as_echo "$ac_cv_lib_Xdpms_DPMSInfo" >&6; } if test "x$ac_cv_lib_Xdpms_DPMSInfo" = xyes; then : have_dpms=yes; XDPMS_LIBS="-lXdpms" else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi fi # if that succeeded, then we've really got it. if test "$have_dpms" = yes; then $as_echo "#define HAVE_DPMS_EXTENSION 1" >>confdefs.h fi elif test "$with_dpms" != no; then echo "error: must be yes or no: --with-dpms-ext=$with_dpms" exit 1 fi ############################################################################### # # Check for the XINERAMA server extension. # ############################################################################### have_xinerama=no with_xinerama_req=unspecified # Check whether --with-xinerama-ext was given. if test "${with_xinerama_ext+set}" = set; then : withval=$with_xinerama_ext; with_xinerama="$withval"; with_xinerama_req="$withval" else with_xinerama=yes fi case "$with_xinerama" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XINERAMA headers" >&5 $as_echo_n "checking for XINERAMA headers... " >&6; } d=$with_xinerama/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XINERAMA libs" >&5 $as_echo_n "checking for XINERAMA libs... " >&6; } d=$with_xinerama/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_xinerama_req="yes" with_xinerama=$with_xinerama_req ;; *) echo "" echo "error: argument to --with-xinerama-ext must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$with_xinerama" = yes; then # first check for Xinerama.h ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/extensions/Xinerama.h" "ac_cv_header_X11_extensions_Xinerama_h" "#include " if test "x$ac_cv_header_X11_extensions_Xinerama_h" = xyes; then : have_xinerama=yes fi CPPFLAGS="$ac_save_CPPFLAGS" # if that succeeded, then check for the XINERAMA code in the libraries if test "$have_xinerama" = yes; then # first look in -lXext have_xinerama=no ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XineramaQueryScreens in -lXext" >&5 $as_echo_n "checking for XineramaQueryScreens in -lXext... " >&6; } if ${ac_cv_lib_Xext_XineramaQueryScreens+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXext -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 XineramaQueryScreens (); int main () { return XineramaQueryScreens (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xext_XineramaQueryScreens=yes else ac_cv_lib_Xext_XineramaQueryScreens=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xext_XineramaQueryScreens" >&5 $as_echo "$ac_cv_lib_Xext_XineramaQueryScreens" >&6; } if test "x$ac_cv_lib_Xext_XineramaQueryScreens" = xyes; then : have_xinerama=yes else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" # if that failed, look in -lXinerama (this is where it is in XFree86 4.1.) if test "$have_xinerama" = no; 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` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XineramaQueryScreens in -lXinerama" >&5 $as_echo_n "checking for XineramaQueryScreens in -lXinerama... " >&6; } if ${ac_cv_lib_Xinerama_XineramaQueryScreens+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXinerama -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 XineramaQueryScreens (); int main () { return XineramaQueryScreens (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xinerama_XineramaQueryScreens=yes else ac_cv_lib_Xinerama_XineramaQueryScreens=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xinerama_XineramaQueryScreens" >&5 $as_echo "$ac_cv_lib_Xinerama_XineramaQueryScreens" >&6; } if test "x$ac_cv_lib_Xinerama_XineramaQueryScreens" = xyes; then : have_xinerama=yes; XINERAMA_LIBS="-lXinerama" else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi fi # if that succeeded, then we've really got it. if test "$have_xinerama" = yes; then $as_echo "#define HAVE_XINERAMA 1" >>confdefs.h fi elif test "$with_xinerama" != no; then echo "error: must be yes or no: --with-xinerama-ext=$with_xinerama" exit 1 fi ############################################################################### # # Check for the XINPUT server extension. # ############################################################################### have_xinput=no with_xinput_req=unspecified # Check whether --with-xinput-ext was given. if test "${with_xinput_ext+set}" = set; then : withval=$with_xinput_ext; with_xinput="$withval"; with_xinput_req="$withval" else with_xinput=yes fi case "$with_xinput" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XINPUT headers" >&5 $as_echo_n "checking for XINPUT headers... " >&6; } d=$with_xinput/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XINPUT libs" >&5 $as_echo_n "checking for XINPUT libs... " >&6; } d=$with_xinput/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_xinput_req="yes" with_xinput=$with_xinput_req ;; *) echo "" echo "error: argument to --with-xinput-ext must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$with_xinput" = yes; then # first check for Xinput.h ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/extensions/XInput.h" "ac_cv_header_X11_extensions_XInput_h" "#include " if test "x$ac_cv_header_X11_extensions_XInput_h" = xyes; then : have_xinput=yes fi CPPFLAGS="$ac_save_CPPFLAGS" # if that succeeded, then check for libXi if test "$have_xinput" = yes; then have_xinput=no ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XListInputDevices in -lXi" >&5 $as_echo_n "checking for XListInputDevices in -lXi... " >&6; } if ${ac_cv_lib_Xi_XListInputDevices+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXi -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XListInputDevices (); int main () { return XListInputDevices (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xi_XListInputDevices=yes else ac_cv_lib_Xi_XListInputDevices=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xi_XListInputDevices" >&5 $as_echo "$ac_cv_lib_Xi_XListInputDevices" >&6; } if test "x$ac_cv_lib_Xi_XListInputDevices" = xyes; then : have_xinput=yes; SAVER_LIBS="$SAVER_LIBS -lXi" else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi # if that succeeded, then we've really got it. if test "$have_xinput" = yes; then $as_echo "#define HAVE_XINPUT 1" >>confdefs.h fi elif test "$with_xinput" != no; then echo "error: must be yes or no: --with-xinput-ext=$with_xinput" exit 1 fi ############################################################################### # # Check for the XF86VMODE server extension (for virtual screens.) # ############################################################################### have_xf86vmode=no with_xf86vmode_req=unspecified # Check whether --with-xf86vmode-ext was given. if test "${with_xf86vmode_ext+set}" = set; then : withval=$with_xf86vmode_ext; with_xf86vmode="$withval"; with_xf86vmode_req="$withval" else with_xf86vmode=yes fi case "$with_xf86vmode" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xf86vmode headers" >&5 $as_echo_n "checking for xf86vmode headers... " >&6; } d=$with_xf86vmode/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xf86vmode libs" >&5 $as_echo_n "checking for xf86vmode libs... " >&6; } d=$with_xf86vmode/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_xf86vmode_req="yes" with_xf86vmode=$with_xf86vmode_req ;; *) echo "" echo "error: argument to --with-xf86vmode-ext must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac VIDMODE_LIBS="" if test "$with_xf86vmode" = yes; then # first check for xf86vmode.h ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/extensions/xf86vmode.h" "ac_cv_header_X11_extensions_xf86vmode_h" "#include " if test "x$ac_cv_header_X11_extensions_xf86vmode_h" = xyes; then : have_xf86vmode=yes fi CPPFLAGS="$ac_save_CPPFLAGS" # if that succeeded, then check for the -lXxf86vm if test "$have_xf86vmode" = yes; then have_xf86vmode=no ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XF86VidModeGetViewPort in -lXxf86vm" >&5 $as_echo_n "checking for XF86VidModeGetViewPort in -lXxf86vm... " >&6; } if ${ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXxf86vm -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 XF86VidModeGetViewPort (); int main () { return XF86VidModeGetViewPort (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort=yes else ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort" >&5 $as_echo "$ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort" >&6; } if test "x$ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort" = xyes; then : have_xf86vmode=yes; VIDMODE_LIBS="-lXxf86vm"; SAVER_LIBS="$SAVER_LIBS $VIDMODE_LIBS" else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi # if that succeeded, then we've really got it. if test "$have_xf86vmode" = yes; then $as_echo "#define HAVE_XF86VMODE 1" >>confdefs.h fi elif test "$with_xf86vmode" != no; then echo "error: must be yes or no: --with-xf86vmode-ext=$with_xf86vmode" exit 1 fi ############################################################################### # # Check for the XF86VMODE server extension (for gamma fading.) # ############################################################################### have_xf86gamma=no have_xf86gamma_ramp=no with_xf86gamma_req=unspecified # Check whether --with-xf86gamma-ext was given. if test "${with_xf86gamma_ext+set}" = set; then : withval=$with_xf86gamma_ext; with_xf86gamma="$withval"; with_xf86gamma_req="$withval" else with_xf86gamma=yes fi case "$with_xf86gamma" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xf86gamma headers" >&5 $as_echo_n "checking for xf86gamma headers... " >&6; } d=$with_xf86gamma/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xf86gamma libs" >&5 $as_echo_n "checking for xf86gamma libs... " >&6; } d=$with_xf86gamma/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_xf86gamma_req="yes" with_xf86gamma=$with_xf86gamma_req ;; *) echo "" echo "error: argument to --with-xf86gamma-ext must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$with_xf86gamma" = yes; then # first check for xf86vmode.h, if we haven't already if test "$have_xf86vmode" = yes; then have_xf86gamma=yes else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/extensions/xf86vmode.h" "ac_cv_header_X11_extensions_xf86vmode_h" "#include " if test "x$ac_cv_header_X11_extensions_xf86vmode_h" = xyes; then : have_xf86gamma=yes fi CPPFLAGS="$ac_save_CPPFLAGS" fi # if that succeeded, then check for the -lXxf86vm if test "$have_xf86gamma" = yes; then have_xf86gamma=no ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XF86VidModeSetGamma in -lXxf86vm" >&5 $as_echo_n "checking for XF86VidModeSetGamma in -lXxf86vm... " >&6; } if ${ac_cv_lib_Xxf86vm_XF86VidModeSetGamma+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXxf86vm -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 XF86VidModeSetGamma (); int main () { return XF86VidModeSetGamma (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xxf86vm_XF86VidModeSetGamma=yes else ac_cv_lib_Xxf86vm_XF86VidModeSetGamma=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xxf86vm_XF86VidModeSetGamma" >&5 $as_echo "$ac_cv_lib_Xxf86vm_XF86VidModeSetGamma" >&6; } if test "x$ac_cv_lib_Xxf86vm_XF86VidModeSetGamma" = xyes; then : have_xf86gamma=yes else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi # check for the Ramp versions of the functions too. if test "$have_xf86gamma" = yes; then have_xf86gamma_ramp=no ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XF86VidModeSetGammaRamp in -lXxf86vm" >&5 $as_echo_n "checking for XF86VidModeSetGammaRamp in -lXxf86vm... " >&6; } if ${ac_cv_lib_Xxf86vm_XF86VidModeSetGammaRamp+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXxf86vm -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 XF86VidModeSetGammaRamp (); int main () { return XF86VidModeSetGammaRamp (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xxf86vm_XF86VidModeSetGammaRamp=yes else ac_cv_lib_Xxf86vm_XF86VidModeSetGammaRamp=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xxf86vm_XF86VidModeSetGammaRamp" >&5 $as_echo "$ac_cv_lib_Xxf86vm_XF86VidModeSetGammaRamp" >&6; } if test "x$ac_cv_lib_Xxf86vm_XF86VidModeSetGammaRamp" = xyes; then : have_xf86gamma_ramp=yes else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi # if those tests succeeded, then we've really got the functions. if test "$have_xf86gamma" = yes; then $as_echo "#define HAVE_XF86VMODE_GAMMA 1" >>confdefs.h fi if test "$have_xf86gamma_ramp" = yes; then $as_echo "#define HAVE_XF86VMODE_GAMMA_RAMP 1" >>confdefs.h fi # pull in the lib, if we haven't already if test "$have_xf86gamma" = yes -a "$have_xf86vmode" = no; then SAVER_LIBS="$SAVER_LIBS -lXxf86vm" fi elif test "$with_xf86gamma" != no; then echo "error: must be yes or no: --with-xf86gamma-ext=$with_xf86vmode" exit 1 fi ############################################################################### # # Check for the RANDR (Resize and Rotate) server extension. # # We need this to detect when the resolution of the desktop # has changed out from under us (this is a newer, different # mechanism than the XF86VMODE virtual viewports.) # ############################################################################### have_randr=no with_randr_req=unspecified # Check whether --with-randr-ext was given. if test "${with_randr_ext+set}" = set; then : withval=$with_randr_ext; with_randr="$withval"; with_randr_req="$withval" else with_randr=yes fi case "$with_randr" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for RANDR headers" >&5 $as_echo_n "checking for RANDR headers... " >&6; } d=$with_randr/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for RANDR libs" >&5 $as_echo_n "checking for RANDR libs... " >&6; } d=$with_randr/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_randr_req="yes" with_randr=$with_randr_req ;; *) echo "" echo "error: argument to --with-randr-ext must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$with_randr" = yes; then # first check for Xrandr.h ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/extensions/Xrandr.h" "ac_cv_header_X11_extensions_Xrandr_h" "#include " if test "x$ac_cv_header_X11_extensions_Xrandr_h" = xyes; then : have_randr=yes fi CPPFLAGS="$ac_save_CPPFLAGS" # if that succeeded, then check for the XRR code in the libraries if test "$have_randr" = yes; then # RANDR probably needs -lXrender xrender_libs= ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XRenderSetSubpixelOrder in -lXrender" >&5 $as_echo_n "checking for XRenderSetSubpixelOrder in -lXrender... " >&6; } if ${ac_cv_lib_Xrender_XRenderSetSubpixelOrder+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXrender -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 XRenderSetSubpixelOrder (); int main () { return XRenderSetSubpixelOrder (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xrender_XRenderSetSubpixelOrder=yes else ac_cv_lib_Xrender_XRenderSetSubpixelOrder=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xrender_XRenderSetSubpixelOrder" >&5 $as_echo "$ac_cv_lib_Xrender_XRenderSetSubpixelOrder" >&6; } if test "x$ac_cv_lib_Xrender_XRenderSetSubpixelOrder" = xyes; then : xrender_libs="-lXrender" else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" # first look for RANDR in -lXext have_randr=no ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XRRGetScreenInfo in -lXext" >&5 $as_echo_n "checking for XRRGetScreenInfo in -lXext... " >&6; } if ${ac_cv_lib_Xext_XRRGetScreenInfo+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXext $xrender_libs -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 XRRGetScreenInfo (); int main () { return XRRGetScreenInfo (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xext_XRRGetScreenInfo=yes else ac_cv_lib_Xext_XRRGetScreenInfo=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xext_XRRGetScreenInfo" >&5 $as_echo "$ac_cv_lib_Xext_XRRGetScreenInfo" >&6; } if test "x$ac_cv_lib_Xext_XRRGetScreenInfo" = xyes; then : have_randr=yes; SAVER_LIBS="$SAVER_LIBS $xrender_libs" else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" # if that failed, look in -lXrandr if test "$have_randr" = no; 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` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XRRGetScreenInfo in -lXrandr" >&5 $as_echo_n "checking for XRRGetScreenInfo in -lXrandr... " >&6; } if ${ac_cv_lib_Xrandr_XRRGetScreenInfo+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXrandr $xrender_libs -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 XRRGetScreenInfo (); int main () { return XRRGetScreenInfo (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xrandr_XRRGetScreenInfo=yes else ac_cv_lib_Xrandr_XRRGetScreenInfo=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xrandr_XRRGetScreenInfo" >&5 $as_echo "$ac_cv_lib_Xrandr_XRRGetScreenInfo" >&6; } if test "x$ac_cv_lib_Xrandr_XRRGetScreenInfo" = xyes; then : have_randr=yes; SAVER_LIBS="$SAVER_LIBS -lXrandr $xrender_libs" else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi fi # if that succeeded, then we've really got it. if test "$have_randr" = yes; then $as_echo "#define HAVE_RANDR 1" >>confdefs.h # Now check for version 1.2 in the same libs. # Try to compile, since on MacOS 10.5.7, headers are older than libs! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XRRGetScreenResources" >&5 $as_echo_n "checking for XRRGetScreenResources... " >&6; } if ${ac_cv_randr_12+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_randr_12=no ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { XRRScreenResources *res = XRRGetScreenResources (0, 0); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_randr_12=yes else ac_cv_randr_12=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_randr_12" >&5 $as_echo "$ac_cv_randr_12" >&6; } if test "$ac_cv_randr_12" = yes ; then $as_echo "#define HAVE_RANDR_12 1" >>confdefs.h fi # AC_CHECK_X_LIB(c, XRRGetOutputInfo, [AC_DEFINE(HAVE_RANDR_12)], # [true], $SAVER_LIBS) fi elif test "$with_randr" != no; then echo "error: must be yes or no: --with-randr-ext=$with_randr" exit 1 fi ############################################################################### # # Check for XF86MiscSetGrabKeysState (but only bother if we are already # using other XF86 stuff.) # ############################################################################### have_xf86miscsetgrabkeysstate=no if test "$have_xf86gamma" = yes -o "$have_xf86vmode" = 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` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XF86MiscSetGrabKeysState in -lXxf86misc" >&5 $as_echo_n "checking for XF86MiscSetGrabKeysState in -lXxf86misc... " >&6; } if ${ac_cv_lib_Xxf86misc_XF86MiscSetGrabKeysState+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXxf86misc -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 XF86MiscSetGrabKeysState (); int main () { return XF86MiscSetGrabKeysState (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xxf86misc_XF86MiscSetGrabKeysState=yes else ac_cv_lib_Xxf86misc_XF86MiscSetGrabKeysState=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xxf86misc_XF86MiscSetGrabKeysState" >&5 $as_echo "$ac_cv_lib_Xxf86misc_XF86MiscSetGrabKeysState" >&6; } if test "x$ac_cv_lib_Xxf86misc_XF86MiscSetGrabKeysState" = xyes; then : have_xf86miscsetgrabkeysstate=yes else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" if test "$have_xf86miscsetgrabkeysstate" = yes ; then SAVER_LIBS="$SAVER_LIBS -lXxf86misc" $as_echo "#define HAVE_XF86MISCSETGRABKEYSSTATE 1" >>confdefs.h fi fi ############################################################################### # # Check for HP XHPDisableReset and XHPEnableReset. # ############################################################################### { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XHPDisableReset in X11/XHPlib.h" >&5 $as_echo_n "checking for XHPDisableReset in X11/XHPlib.h... " >&6; } ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "XHPDisableReset" >/dev/null 2>&1; then : $as_echo "#define HAVE_XHPDISABLERESET 1" >>confdefs.h SAVER_LIBS="-lXhp11 $SAVER_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -rf conftest* CPPFLAGS="$ac_save_CPPFLAGS" ############################################################################### # # Check for /proc/interrupts. # ############################################################################### have_proc_interrupts=no with_proc_interrupts_req=unspecified # Check whether --with-proc-interrupts was given. if test "${with_proc_interrupts+set}" = set; then : withval=$with_proc_interrupts; with_proc_interrupts="$withval"; with_proc_interrupts_req="$withval" else with_proc_interrupts=yes fi if test "$with_proc_interrupts" = yes; then # Note that we may be building in an environment (e.g. Debian buildd chroot) # without a proper /proc filesystem. If /proc/interrupts exists, then we'll # check that it has the bits we need, but otherwise we'll just go on faith. # have_proc_interrupts=yes if test -f /proc/interrupts; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether /proc/interrupts contains keyboard data" >&5 $as_echo_n "checking whether /proc/interrupts contains keyboard data... " >&6; } if ${ac_cv_have_proc_interrupts+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_have_proc_interrupts=no if grep 'keyboard\|i8042' /proc/interrupts >/dev/null 2>&1 ; then ac_cv_have_proc_interrupts=yes fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_proc_interrupts" >&5 $as_echo "$ac_cv_have_proc_interrupts" >&6; } have_proc_interrupts=$ac_cv_have_proc_interrupts fi if test "$have_proc_interrupts" = yes; then $as_echo "#define HAVE_PROC_INTERRUPTS 1" >>confdefs.h fi elif test "$with_proc_interrupts" != no; then echo "error: must be yes or no: --with-proc-interrupts=$with_proc_interrupts" exit 1 fi ############################################################################### # # The --enable-locking option # ############################################################################### # Check whether --enable-locking was given. if test "${enable_locking+set}" = set; then : enableval=$enable_locking; enable_locking="$enableval" else if test "$ac_macosx" = yes; then # We can't lock on MacOS X, so default to not compiling in support for it. # But allow --enable-locking to override that, so I can debug Linux locking # under MacOS X11. enable_locking=no else enable_locking=yes fi fi if test "$enable_locking" = yes; then true elif test "$enable_locking" = no; then $as_echo "#define NO_LOCKING 1" >>confdefs.h else echo "error: must be yes or no: --enable-locking=$enable_locking" exit 1 fi ############################################################################### # # Whether to allow root password to unblank. # ############################################################################### # Check whether --enable-root-passwd was given. if test "${enable_root_passwd+set}" = set; then : enableval=$enable_root_passwd; enable_root_passwd="$enableval" else enable_root_passwd=yes fi if test "$enable_root_passwd" = yes; then $as_echo "#define ALLOW_ROOT_PASSWD 1" >>confdefs.h true elif test "$enable_root_passwd" != no; then echo "error: must be yes or no: --enable-root-passwd=$enable_root_passwd" exit 1 fi ############################################################################### # # Check for PAM. # ############################################################################### case "$host" in *-solaris*) # Solaris systems tend to come with PAM misconfigured. # Don't build it by default, even if the headers exist. with_pam_default=no ;; *) # Default to building PAM support on all other systems, if it exists. with_pam_default=yes ;; esac have_pam=no with_pam_req=unspecified # Check whether --with-pam was given. if test "${with_pam+set}" = set; then : withval=$with_pam; with_pam="$withval"; with_pam_req="$withval" else with_pam=$with_pam_default fi # Check whether --with-pam_service_name was given. if test "${with_pam_service_name+set}" = set; then : withval=$with_pam_service_name; pam_service_name="$withval" else pam_service_name="xscreensaver" fi # Check whether --enable-pam-check-account-type was given. if test "${enable_pam_check_account_type+set}" = set; then : enableval=$enable_pam_check_account_type; enable_pam_check_account_type="$enableval" else enable_pam_check_account_type=no fi if test "$enable_pam_check_account_type" = yes ; then $as_echo "#define PAM_CHECK_ACCOUNT_TYPE 1" >>confdefs.h true elif test "$enable_pam_check_account_type" != no ; then echo "error: must be yes or no: --enable-pam-check-account-type=$enable_pam_check_account_type" exit 1 fi case "$with_pam" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PAM headers" >&5 $as_echo_n "checking for PAM headers... " >&6; } d=$with_pam/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PAM libs" >&5 $as_echo_n "checking for PAM libs... " >&6; } d=$with_pam/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_pam_req="yes" with_pam=$with_pam_req ;; *) echo "" echo "error: argument to --with-pam must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$enable_locking" = yes -a "$with_pam" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PAM" >&5 $as_echo_n "checking for PAM... " >&6; } if ${ac_cv_pam+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_pam=yes else ac_cv_pam=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_pam" >&5 $as_echo "$ac_cv_pam" >&6; } if test "$ac_cv_pam" = yes ; then have_pam=yes $as_echo "#define HAVE_PAM 1" >>confdefs.h cat >>confdefs.h <<_ACEOF #define PAM_SERVICE_NAME "$pam_service_name" _ACEOF PASSWD_LIBS="${PASSWD_LIBS} -lpam" # libpam typically requires dlopen and dlsym. On FreeBSD, # those are in libc. On Linux and Solaris, they're in libdl. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : PASSWD_LIBS="${PASSWD_LIBS} -ldl" fi # On Linux, sigtimedwait() is in libc; on Solaris, it's in librt. have_timedwait=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sigtimedwait in -lc" >&5 $as_echo_n "checking for sigtimedwait in -lc... " >&6; } if ${ac_cv_lib_c_sigtimedwait+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 sigtimedwait (); int main () { return sigtimedwait (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_sigtimedwait=yes else ac_cv_lib_c_sigtimedwait=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_sigtimedwait" >&5 $as_echo "$ac_cv_lib_c_sigtimedwait" >&6; } if test "x$ac_cv_lib_c_sigtimedwait" = xyes; then : have_timedwait=yes $as_echo "#define HAVE_SIGTIMEDWAIT 1" >>confdefs.h fi if test "$have_timedwait" = no ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sigtimedwait in -lrt" >&5 $as_echo_n "checking for sigtimedwait in -lrt... " >&6; } if ${ac_cv_lib_rt_sigtimedwait+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lrt $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 sigtimedwait (); int main () { return sigtimedwait (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_rt_sigtimedwait=yes else ac_cv_lib_rt_sigtimedwait=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_sigtimedwait" >&5 $as_echo "$ac_cv_lib_rt_sigtimedwait" >&6; } if test "x$ac_cv_lib_rt_sigtimedwait" = xyes; then : have_timedwait=yes $as_echo "#define HAVE_SIGTIMEDWAIT 1" >>confdefs.h PASSWD_LIBS="${PASSWD_LIBS} -lrt" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to call pam_strerror" >&5 $as_echo_n "checking how to call pam_strerror... " >&6; } if ${ac_cv_pam_strerror_args+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { pam_handle_t *pamh = 0; char *s = pam_strerror(pamh, PAM_SUCCESS); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_pam_strerror_args=2 else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { char *s = pam_strerror(PAM_SUCCESS); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_pam_strerror_args=1 else ac_pam_strerror_args=0 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" ac_cv_pam_strerror_args=$ac_pam_strerror_args fi ac_pam_strerror_args=$ac_cv_pam_strerror_args if test "$ac_pam_strerror_args" = 1 ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: one argument" >&5 $as_echo "one argument" >&6; } elif test "$ac_pam_strerror_args" = 2 ; then $as_echo "#define PAM_STRERROR_TWO_ARGS 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: two arguments" >&5 $as_echo "two arguments" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5 $as_echo "unknown" >&6; } fi # Check pam_fail_delay { $as_echo "$as_me:${as_lineno-$LINENO}: checking pam_fail_delay in -lpam" >&5 $as_echo_n "checking pam_fail_delay in -lpam... " >&6; } if ${ac_cv_pam_fail_delay+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_LDFLAGS="$LDFLAGS" LDFLAGS="-lpam" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { pam_handle_t *pamh = 0; unsigned int usec = 1; int status = pam_fail_delay (pamh, usec); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_pam_fail_delay=yes else ac_pam_fail_delay=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_cv_pam_fail_delay=$ac_pam_fail_delay, LDFLAGS=$ac_save_LDFLAGS fi if test "$ac_pam_fail_delay" = yes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_PAM_FAIL_DELAY 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi ############################################################################### # # Check for Kerberos. # ############################################################################### have_kerberos=no have_kerberos5=no with_kerberos_req=unspecified # Check whether --with-kerberos was given. if test "${with_kerberos+set}" = set; then : withval=$with_kerberos; with_kerberos="$withval"; with_kerberos_req="$withval" else with_kerberos=yes fi case "$with_kerberos" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Kerberos headers" >&5 $as_echo_n "checking for Kerberos headers... " >&6; } d=$with_kerberos/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Kerberos libs" >&5 $as_echo_n "checking for Kerberos libs... " >&6; } d=$with_kerberos/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_kerberos_req="yes" with_kerberos=$with_kerberos_req ;; *) echo "" echo "error: argument to --with-kerberos must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$enable_locking" = yes -a "$with_kerberos" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Kerberos 4" >&5 $as_echo_n "checking for Kerberos 4... " >&6; } if ${ac_cv_kerberos+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_kerberos=yes else ac_cv_kerberos=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_kerberos" >&5 $as_echo "$ac_cv_kerberos" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Kerberos 5" >&5 $as_echo_n "checking for Kerberos 5... " >&6; } if ${ac_cv_kerberos5+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_kerberos5=yes else ac_cv_kerberos5=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_kerberos5" >&5 $as_echo "$ac_cv_kerberos5" >&6; } if test "$ac_cv_kerberos" = yes ; then have_kerberos=yes $as_echo "#define HAVE_KERBEROS 1" >>confdefs.h fi if test "$ac_cv_kerberos5" = yes ; then # Andrew Snare wrote: # # You were assuming that if kerberosV (krb5) was found, then kerberosIV # (krb4) was also available. This turns out not to be the case with # mit-krb-1.2.7; apparently backwards-compatibility with KerberosIV # is optional. # # So, disable kerberosV support if libkrb4 can't be found. # This is not the best solution, but it makes the compile not fail. # ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for krb_get_tf_realm in -lkrb4" >&5 $as_echo_n "checking for krb_get_tf_realm in -lkrb4... " >&6; } if ${ac_cv_lib_krb4_krb_get_tf_realm+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lkrb4 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 krb_get_tf_realm (); int main () { return krb_get_tf_realm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_krb4_krb_get_tf_realm=yes else ac_cv_lib_krb4_krb_get_tf_realm=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_krb4_krb_get_tf_realm" >&5 $as_echo "$ac_cv_lib_krb4_krb_get_tf_realm" >&6; } if test "x$ac_cv_lib_krb4_krb_get_tf_realm" = xyes; then : have_kerberos=yes else have_kerberos=no fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" if test "$have_kerberos" = yes ; then have_kerberos5=yes $as_echo "#define HAVE_KERBEROS 1" >>confdefs.h $as_echo "#define HAVE_KERBEROS5 1" >>confdefs.h else have_kerberos5=no { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find compat lib (libkrb4) needed to use Kerberos 5" >&5 $as_echo "$as_me: WARNING: Cannot find compat lib (libkrb4) needed to use Kerberos 5" >&2;} fi fi if test "$have_kerberos5" = yes ; then # from Matt Knopp # (who got it from amu@mit.edu) PASSWD_LIBS="$PASSWD_LIBS -lkrb4 -ldes425 -lkrb5 -lk5crypto -lcom_err" # jwz: MacOS X uses -lkrb5, but not -lcrypt ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for crypt in -lcrypt" >&5 $as_echo_n "checking for crypt in -lcrypt... " >&6; } if ${ac_cv_lib_crypt_crypt+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcrypt $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 crypt (); int main () { return crypt (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_crypt_crypt=yes else ac_cv_lib_crypt_crypt=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypt_crypt" >&5 $as_echo "$ac_cv_lib_crypt_crypt" >&6; } if test "x$ac_cv_lib_crypt_crypt" = xyes; then : PASSWD_LIBS="$PASSWD_LIBS -lcrypt" fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" elif test "$have_kerberos" = yes ; then # from Tim Showalter for FreeBSD 4.2 PASSWD_LIBS="$PASSWD_LIBS -lkrb -ldes -lcom_err" fi if test "$have_kerberos" = yes ; then ac_fn_c_check_func "$LINENO" "res_search" "ac_cv_func_res_search" if test "x$ac_cv_func_res_search" = xyes; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for res_search in -lresolv" >&5 $as_echo_n "checking for res_search in -lresolv... " >&6; } if ${ac_cv_lib_resolv_res_search+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lresolv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 res_search (); int main () { return res_search (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_resolv_res_search=yes else ac_cv_lib_resolv_res_search=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_resolv_res_search" >&5 $as_echo "$ac_cv_lib_resolv_res_search" >&6; } if test "x$ac_cv_lib_resolv_res_search" = xyes; then : PASSWD_LIBS="${PASSWD_LIBS} -lresolv" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Can't find DNS resolver libraries needed for Kerberos" >&5 $as_echo "$as_me: WARNING: Can't find DNS resolver libraries needed for Kerberos" >&2;} fi fi fi fi ############################################################################### # # Check for the nine billion variants of shadow passwords... # ############################################################################### need_setuid=no have_shadow=no with_shadow_req=unspecified # Check whether --with-shadow was given. if test "${with_shadow+set}" = set; then : withval=$with_shadow; with_shadow="$withval"; with_shadow_req="$withval" else with_shadow=yes fi case "$with_shadow" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shadow password headers" >&5 $as_echo_n "checking for shadow password headers... " >&6; } d=$with_shadow/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shadow password libs" >&5 $as_echo_n "checking for shadow password libs... " >&6; } d=$with_shadow/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_shadow_req="yes" with_shadow=$with_shadow_req ;; *) echo "" echo "error: argument to --with-shadow must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$enable_locking" = no ; then with_shadow_req=no with_shadow=no fi ############################################################################### # # Check for Sun "adjunct" passwords. # ############################################################################### if test "$with_shadow" = yes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Sun-style shadow passwords" >&5 $as_echo_n "checking for Sun-style shadow passwords... " >&6; } if ${ac_cv_sun_adjunct+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include #include int main () { struct passwd_adjunct *p = getpwanam("nobody"); const char *pw = p->pwa_passwd; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sun_adjunct=yes else ac_cv_sun_adjunct=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sun_adjunct" >&5 $as_echo "$ac_cv_sun_adjunct" >&6; } if test "$ac_cv_sun_adjunct" = yes; then have_shadow_adjunct=yes have_shadow=yes need_setuid=yes fi fi ############################################################################### # # Check for DEC and SCO so-called "enhanced" security. # ############################################################################### if test "$with_shadow" = yes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DEC-style shadow passwords" >&5 $as_echo_n "checking for DEC-style shadow passwords... " >&6; } if ${ac_cv_enhanced_passwd+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include #include int main () { struct pr_passwd *p; const char *pw; set_auth_parameters(0, 0); check_auth_parameters(); p = getprpwnam("nobody"); pw = p->ufld.fd_encrypt; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_enhanced_passwd=yes else ac_cv_enhanced_passwd=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enhanced_passwd" >&5 $as_echo "$ac_cv_enhanced_passwd" >&6; } if test $ac_cv_enhanced_passwd = yes; then have_shadow_enhanced=yes have_shadow=yes need_setuid=yes # On SCO, getprpwnam() is in -lprot (which uses nap() from -lx) # (I'm told it needs -lcurses too, but I don't understand why.) # But on DEC, it's in -lsecurity. # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getprpwnam in -lprot" >&5 $as_echo_n "checking for getprpwnam in -lprot... " >&6; } if ${ac_cv_lib_prot_getprpwnam+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lprot -lx $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 getprpwnam (); int main () { return getprpwnam (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_prot_getprpwnam=yes else ac_cv_lib_prot_getprpwnam=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_prot_getprpwnam" >&5 $as_echo "$ac_cv_lib_prot_getprpwnam" >&6; } if test "x$ac_cv_lib_prot_getprpwnam" = xyes; then : PASSWD_LIBS="$PASSWD_LIBS -lprot -lcurses -lx" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getprpwnam in -lsecurity" >&5 $as_echo_n "checking for getprpwnam in -lsecurity... " >&6; } if ${ac_cv_lib_security_getprpwnam+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsecurity $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 getprpwnam (); int main () { return getprpwnam (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_security_getprpwnam=yes else ac_cv_lib_security_getprpwnam=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_security_getprpwnam" >&5 $as_echo "$ac_cv_lib_security_getprpwnam" >&6; } if test "x$ac_cv_lib_security_getprpwnam" = xyes; then : PASSWD_LIBS="$PASSWD_LIBS -lsecurity" fi fi fi fi ############################################################################### # # Check for HP's entry in the "Not Invented Here" Sweepstakes. # ############################################################################### if test "$with_shadow" = yes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for HP-style shadow passwords" >&5 $as_echo_n "checking for HP-style shadow passwords... " >&6; } if ${ac_cv_hpux_passwd+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include #include int main () { struct s_passwd *p = getspwnam("nobody"); const char *pw = p->pw_passwd; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_hpux_passwd=yes else ac_cv_hpux_passwd=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_hpux_passwd" >&5 $as_echo "$ac_cv_hpux_passwd" >&6; } if test "$ac_cv_hpux_passwd" = yes; then have_shadow_hpux=yes have_shadow=yes need_setuid=yes # on HPUX, bigcrypt is in -lsec { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bigcrypt in -lsec" >&5 $as_echo_n "checking for bigcrypt in -lsec... " >&6; } if ${ac_cv_lib_sec_bigcrypt+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsec $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 bigcrypt (); int main () { return bigcrypt (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_sec_bigcrypt=yes else ac_cv_lib_sec_bigcrypt=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sec_bigcrypt" >&5 $as_echo "$ac_cv_lib_sec_bigcrypt" >&6; } if test "x$ac_cv_lib_sec_bigcrypt" = xyes; then : PASSWD_LIBS="$PASSWD_LIBS -lsec" fi fi fi ############################################################################### # # Check for FreeBSD-style shadow passwords. # # On FreeBSD, getpwnam() and friends work just like on non-shadow- # password systems -- except you only get stuff in the pw_passwd field # if the running program is setuid. So, guess that we've got this # lossage to contend with if /etc/master.passwd exists, and default to # a setuid installation. # ############################################################################### if test "$with_shadow" = yes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FreeBSD-style shadow passwords" >&5 $as_echo_n "checking for FreeBSD-style shadow passwords... " >&6; } if ${ac_cv_master_passwd+:} false; then : $as_echo_n "(cached) " >&6 else if test -f /etc/master.passwd ; then ac_cv_master_passwd=yes else ac_cv_master_passwd=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_master_passwd" >&5 $as_echo "$ac_cv_master_passwd" >&6; } if test "$ac_cv_master_passwd" = yes; then need_setuid=yes fi fi ############################################################################### # # Check for traditional (ha!) shadow passwords. # ############################################################################### if test "$with_shadow" = yes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for generic shadow passwords" >&5 $as_echo_n "checking for generic shadow passwords... " >&6; } if ${ac_cv_shadow+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include int main () { struct spwd *p = getspnam("nobody"); const char *pw = p->sp_pwdp; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_shadow=yes else ac_cv_shadow=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_shadow" >&5 $as_echo "$ac_cv_shadow" >&6; } if test "$ac_cv_shadow" = yes; then have_shadow=yes need_setuid=yes # On some systems (UnixWare 2.1), getspnam() is in -lgen instead of -lc. have_getspnam=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getspnam in -lc" >&5 $as_echo_n "checking for getspnam in -lc... " >&6; } if ${ac_cv_lib_c_getspnam+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 getspnam (); int main () { return getspnam (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_getspnam=yes else ac_cv_lib_c_getspnam=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_getspnam" >&5 $as_echo "$ac_cv_lib_c_getspnam" >&6; } if test "x$ac_cv_lib_c_getspnam" = xyes; then : have_getspnam=yes fi if test "$have_getspnam" = no ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getspnam in -lgen" >&5 $as_echo_n "checking for getspnam in -lgen... " >&6; } if ${ac_cv_lib_gen_getspnam+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgen $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 getspnam (); int main () { return getspnam (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gen_getspnam=yes else ac_cv_lib_gen_getspnam=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gen_getspnam" >&5 $as_echo "$ac_cv_lib_gen_getspnam" >&6; } if test "x$ac_cv_lib_gen_getspnam" = xyes; then : have_getspnam=yes; PASSWD_LIBS="$PASSWD_LIBS -lgen" fi fi fi fi ############################################################################### # # Check for other libraries needed for non-shadow passwords. # ############################################################################### if test "$enable_locking" = yes ; then # On some systems (UnixWare 2.1), crypt() is in -lcrypt instead of -lc. have_crypt=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for crypt in -lc" >&5 $as_echo_n "checking for crypt in -lc... " >&6; } if ${ac_cv_lib_c_crypt+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 crypt (); int main () { return crypt (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_crypt=yes else ac_cv_lib_c_crypt=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_crypt" >&5 $as_echo "$ac_cv_lib_c_crypt" >&6; } if test "x$ac_cv_lib_c_crypt" = xyes; then : have_crypt=yes fi if test "$have_crypt" = no ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for crypt in -lcrypt" >&5 $as_echo_n "checking for crypt in -lcrypt... " >&6; } if ${ac_cv_lib_crypt_crypt+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcrypt $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 crypt (); int main () { return crypt (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_crypt_crypt=yes else ac_cv_lib_crypt_crypt=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypt_crypt" >&5 $as_echo "$ac_cv_lib_crypt_crypt" >&6; } if test "x$ac_cv_lib_crypt_crypt" = xyes; then : have_crypt=yes; PASSWD_LIBS="$PASSWD_LIBS -lcrypt" fi fi fi # Most of the above shadow mechanisms will have set need_setuid to yes, # if they were found. But, on some systems, we need setuid even when # using plain old vanilla passwords. # if test "$enable_locking" = yes ; then case "$host" in *-hpux* | *-aix* | *-netbsd* | *-freebsd* | *-openbsd* ) need_setuid=yes ;; esac fi if test "$have_shadow_adjunct" = yes ; then $as_echo "#define HAVE_ADJUNCT_PASSWD 1" >>confdefs.h elif test "$have_shadow_enhanced" = yes ; then $as_echo "#define HAVE_ENHANCED_PASSWD 1" >>confdefs.h elif test "$have_shadow_hpux" = yes ; then $as_echo "#define HAVE_HPUX_PASSWD 1" >>confdefs.h elif test "$have_shadow" = yes ; then $as_echo "#define HAVE_SHADOW_PASSWD 1" >>confdefs.h fi ############################################################################### # # Check for external password helper # On SuSE, instead of having xscreensaver be a setuid program, they # fork an external program that takes the password on stdin, and # returns true if that password is a valid one. Then only that # smaller program needs to be setuid. # # (Note that this external program is not a GUI: the GUI is still # all in xscreensaver itself; the external program just does auth.) # ############################################################################### have_passwd_helper=no with_passwd_helper_req=unspecified # Check whether --with-passwd-helper was given. if test "${with_passwd_helper+set}" = set; then : withval=$with_passwd_helper; with_passwd_helper="$withval"; with_passwd_helper_req="$withval" else with_passwd_helper=no fi # no HANDLE_X_PATH_ARG for this one if test "$enable_locking" = no ; then with_passwd_helper_req=no with_passwd_helper=no fi case "$with_passwd_helper" in ""|no) : ;; /*) cat >>confdefs.h <<_ACEOF #define PASSWD_HELPER_PROGRAM "$with_passwd_helper" _ACEOF have_passwd_helper=yes;; *) echo "error: --with-passwd-helper needs full pathname of helper (not '$with_passwd_helper')." >&2 exit 1 esac ############################################################################### # # Check for a login manager for a "New Login" button on the lock dialog. # Usually this will be "/usr/bin/gdmflexiserver". # ############################################################################### with_login_manager_req=unspecified default_login_manager_1='gdmflexiserver -ls' default_login_manager_2='kdmctl reserve' default_login_manager_3='lxdm -c USER_SWITCH' default_login_manager_4='dm-tool switch-to-greeter' # Check whether --with-login-manager was given. if test "${with_login_manager+set}" = set; then : withval=$with_login_manager; with_login_manager="$withval"; with_login_manager_req="$withval" else with_login_manager=yes fi # no HANDLE_X_PATH_ARG for this one if test "$enable_locking" = no ; then with_login_manager_req=no with_login_manager=no fi case "$with_login_manager_req" in no) with_login_manager="" ;; yes|unspecified) # Try various defaults, use the first one that exists. with_login_manager="" if test -z "$with_login_manager" ; then set dummy $default_login_manager_1 ; login_manager_tmp=$2 unset ac_cv_path_login_manager_tmp # don't cache # Extract the first word of "$login_manager_tmp", so it can be a program name with args. set dummy $login_manager_tmp; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_login_manager_tmp+:} false; then : $as_echo_n "(cached) " >&6 else case $login_manager_tmp in [\\/]* | ?:[\\/]*) ac_cv_path_login_manager_tmp="$login_manager_tmp" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_login_manager_tmp="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi login_manager_tmp=$ac_cv_path_login_manager_tmp if test -n "$login_manager_tmp"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $login_manager_tmp" >&5 $as_echo "$login_manager_tmp" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test ! -z "$login_manager_tmp" ; then with_login_manager="$default_login_manager_1" fi fi if test -z "$with_login_manager" ; then set dummy $default_login_manager_2 ; login_manager_tmp=$2 unset ac_cv_path_login_manager_tmp # don't cache # Extract the first word of "$login_manager_tmp", so it can be a program name with args. set dummy $login_manager_tmp; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_login_manager_tmp+:} false; then : $as_echo_n "(cached) " >&6 else case $login_manager_tmp in [\\/]* | ?:[\\/]*) ac_cv_path_login_manager_tmp="$login_manager_tmp" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_login_manager_tmp="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi login_manager_tmp=$ac_cv_path_login_manager_tmp if test -n "$login_manager_tmp"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $login_manager_tmp" >&5 $as_echo "$login_manager_tmp" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test ! -z "$login_manager_tmp" ; then with_login_manager="$default_login_manager_2" fi fi if test -z "$with_login_manager" ; then set dummy $default_login_manager_3 ; login_manager_tmp=$2 unset ac_cv_path_login_manager_tmp # don't cache # Extract the first word of "$login_manager_tmp", so it can be a program name with args. set dummy $login_manager_tmp; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_login_manager_tmp+:} false; then : $as_echo_n "(cached) " >&6 else case $login_manager_tmp in [\\/]* | ?:[\\/]*) ac_cv_path_login_manager_tmp="$login_manager_tmp" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_login_manager_tmp="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi login_manager_tmp=$ac_cv_path_login_manager_tmp if test -n "$login_manager_tmp"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $login_manager_tmp" >&5 $as_echo "$login_manager_tmp" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test ! -z "$login_manager_tmp" ; then with_login_manager="$default_login_manager_3" fi fi if test -z "$with_login_manager" ; then set dummy $default_login_manager_4 ; login_manager_tmp=$2 unset ac_cv_path_login_manager_tmp # don't cache # Extract the first word of "$login_manager_tmp", so it can be a program name with args. set dummy $login_manager_tmp; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_login_manager_tmp+:} false; then : $as_echo_n "(cached) " >&6 else case $login_manager_tmp in [\\/]* | ?:[\\/]*) ac_cv_path_login_manager_tmp="$login_manager_tmp" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_login_manager_tmp="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi login_manager_tmp=$ac_cv_path_login_manager_tmp if test -n "$login_manager_tmp"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $login_manager_tmp" >&5 $as_echo "$login_manager_tmp" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test ! -z "$login_manager_tmp" ; then with_login_manager="$default_login_manager_4" fi fi ;; /*) # absolute path specified on cmd line set dummy $with_login_manager_req ; login_manager_tmp=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $login_manager_tmp" >&5 $as_echo_n "checking for $login_manager_tmp... " >&6; } if test -x "$login_manager_tmp" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } with_login_manager="" fi ;; *) # relative path specified on cmd line set dummy $with_login_manager_req ; login_manager_tmp=$2 unset ac_cv_path_login_manager_tmp # don't cache # Extract the first word of "$login_manager_tmp", so it can be a program name with args. set dummy $login_manager_tmp; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_login_manager_tmp+:} false; then : $as_echo_n "(cached) " >&6 else case $login_manager_tmp in [\\/]* | ?:[\\/]*) ac_cv_path_login_manager_tmp="$login_manager_tmp" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_login_manager_tmp="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi login_manager_tmp=$ac_cv_path_login_manager_tmp if test -n "$login_manager_tmp"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $login_manager_tmp" >&5 $as_echo "$login_manager_tmp" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$login_manager_tmp" ; then with_login_manager="" else with_login_manager="$login_manager_tmp" fi ;; esac ac_cv_login_manager_program="$with_login_manager" NEW_LOGIN_COMMAND_P='' NEW_LOGIN_COMMAND="$ac_cv_login_manager_program" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for login manager" >&5 $as_echo_n "checking for login manager... " >&6; } if test -z "$NEW_LOGIN_COMMAND" ; then NEW_LOGIN_COMMAND="$default_login_manager_1" NEW_LOGIN_COMMAND_P='! ' { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NEW_LOGIN_COMMAND (disabled)" >&5 $as_echo "$NEW_LOGIN_COMMAND (disabled)" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NEW_LOGIN_COMMAND" >&5 $as_echo "$NEW_LOGIN_COMMAND" >&6; } fi ############################################################################### # # Check for -lgtk (and Gnome stuff) # ############################################################################### have_gtk=no with_gtk_req=unspecified # Check whether --with-gtk was given. if test "${with_gtk+set}" = set; then : withval=$with_gtk; with_gtk="$withval"; with_gtk_req="$withval" else with_gtk=yes fi # if --with-gtk=/directory/ was specified, remember that directory so that # we can also look for the `gtk-config' program in that directory. case "$with_gtk" in /*) gtk_dir="$with_gtk" ;; *) gtk_dir="" ;; esac case "$with_gtk" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Gtk headers" >&5 $as_echo_n "checking for Gtk headers... " >&6; } d=$with_gtk/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Gtk libs" >&5 $as_echo_n "checking for Gtk libs... " >&6; } d=$with_gtk/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_gtk_req="yes" with_gtk=$with_gtk_req ;; *) echo "" echo "error: argument to --with-gtk must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$with_gtk" != yes -a "$with_gtk" != no ; then echo "error: must be yes or no: --with-gtk=$with_gtk" exit 1 fi parse_gtk_version_string() { # M4 sucks!! maj=`echo $ac_gtk_version_string | sed -n 's/\..*//p'` min=`echo $ac_gtk_version_string | sed -n 's/[^.]*\.\([^.]*\).*/\1/p'` ac_gtk_version=`echo "$maj * 1000 + $min" | bc` if test -z "$ac_gtk_version"; then ac_gtk_version=unknown ac_gtk_version_string=unknown fi } # Find pkg-config... (need this for both gtk and gdk_pixbuf.) # if the user specified --with-gtk=/foo/ then look there. # gtk_path="$PATH" if test ! -z "$gtk_dir"; then # canonicalize slashes. foo=`echo "${gtk_dir}/bin" | sed 's@//*@/@g'` gtk_path="$foo:$gtk_path" fi for ac_prog in pkg-config do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_pkg_config+:} false; then : $as_echo_n "(cached) " >&6 else case $pkg_config in [\\/]* | ?:[\\/]*) ac_cv_path_pkg_config="$pkg_config" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $gtk_path do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_pkg_config="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi pkg_config=$ac_cv_path_pkg_config if test -n "$pkg_config"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pkg_config" >&5 $as_echo "$pkg_config" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$pkg_config" && break done if test -z "$pkg_config" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pkg-config not found!" >&5 $as_echo "$as_me: WARNING: pkg-config not found!" >&2;} pkg_config="false" fi # Utility function for running pkg-config-based tests... # pkgs='' pkg_check_version() { if test "$ok" = yes ; then req="$1" min="$2" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $req" >&5 $as_echo_n "checking for $req... " >&6; } if $pkg_config --exists "$req" ; then vers=`$pkg_config --modversion "$req"` if $pkg_config --exists "$req >= $min" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vers" >&5 $as_echo "$vers" >&6; } pkgs="$pkgs $req" return 1 else { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vers (wanted >= $min)" >&5 $as_echo "$vers (wanted >= $min)" >&6; } ok=no return 0 fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ok=no return 0 fi fi } jurassic_gtk=no gtk_halfassed=no have_gtk_2_22_or_higher=no COMMENT_DEMO_GLADE2_GTK_2_22_HEAD="" COMMENT_DEMO_GLADE2_GTK_2_22_TAIL="" if test "$with_gtk" = yes; then have_gtk=no ok="yes" pkg_check_version gtk+-2.0 2.0.1 ; ac_gtk_version_string="$vers" pkg_check_version gmodule-2.0 2.0.0 pkg_check_version libxml-2.0 2.4.6 pkg_check_version libglade-2.0 1.99.0 pkg_check_version gdk-pixbuf-2.0 2.0.0 pkg_check_version gdk-pixbuf-xlib-2.0 2.0.0 have_gtk="$ok" if test "$have_gtk" = no; then if test -n "$ac_gtk_version_string" ; then gtk_halfassed="$ac_gtk_version_string" gtk_halfassed_lib="$req" fi fi if test "$have_gtk" = yes; then parse_gtk_version_string jurassic_gtk=no fi if test "$have_gtk" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Gtk includes" >&5 $as_echo_n "checking for Gtk includes... " >&6; } if ${ac_cv_gtk_config_cflags+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_gtk_config_cflags=`$pkg_config --cflags $pkgs` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gtk_config_cflags" >&5 $as_echo "$ac_cv_gtk_config_cflags" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Gtk libs" >&5 $as_echo_n "checking for Gtk libs... " >&6; } if ${ac_cv_gtk_config_libs+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_gtk_config_libs=`$pkg_config --libs $pkgs` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gtk_config_libs" >&5 $as_echo "$ac_cv_gtk_config_libs" >&6; } fi ac_gtk_config_cflags=$ac_cv_gtk_config_cflags ac_gtk_config_libs=$ac_cv_gtk_config_libs GTK_EXTRA_OBJS="" GTK_DATADIR="" if test "$have_gtk" = yes; then GTK_DATADIR=`$pkg_config --variable=prefix gtk+-2.0` GTK_DATADIR="$GTK_DATADIR/share" fi if test "$have_gtk" = yes; then INCLUDES="$INCLUDES $ac_gtk_config_cflags" GTK_LIBS="$GTK_LIBS $ac_gtk_config_libs" $as_echo "#define HAVE_GTK 1" >>confdefs.h $as_echo "#define HAVE_GTK2 1" >>confdefs.h $as_echo "#define HAVE_XML 1" >>confdefs.h fi if test "$have_gtk" = yes; then ok="yes" pkg_check_version gtk+-2.0 2.22 have_gtk_2_22_or_higher="$ok" if test "$have_gtk_2_22_or_higher" = yes; then COMMENT_DEMO_GLADE2_GTK_2_22_HEAD="" fi fi fi # Check for the various Gnome help and URL loading programs. # WITH_BROWSER=gnome-open if test "$have_gtk" = yes; then for ac_prog in gnome-open do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_gnome_open_program+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$gnome_open_program"; then ac_cv_prog_gnome_open_program="$gnome_open_program" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_gnome_open_program="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi gnome_open_program=$ac_cv_prog_gnome_open_program if test -n "$gnome_open_program"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gnome_open_program" >&5 $as_echo "$gnome_open_program" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$gnome_open_program" && break done for ac_prog in gnome-url-show do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_gnome_url_show_program+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$gnome_url_show_program"; then ac_cv_prog_gnome_url_show_program="$gnome_url_show_program" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_gnome_url_show_program="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi gnome_url_show_program=$ac_cv_prog_gnome_url_show_program if test -n "$gnome_url_show_program"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gnome_url_show_program" >&5 $as_echo "$gnome_url_show_program" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$gnome_url_show_program" && break done fi ############################################################################### # # Check for -lXm. # ############################################################################### have_motif=no with_motif_req=unspecified # Check whether --with-motif was given. if test "${with_motif+set}" = set; then : withval=$with_motif; with_motif="$withval"; with_motif_req="$withval" else with_motif=no fi case "$with_motif" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Motif headers" >&5 $as_echo_n "checking for Motif headers... " >&6; } d=$with_motif/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Motif libs" >&5 $as_echo_n "checking for Motif libs... " >&6; } d=$with_motif/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_motif_req="yes" with_motif=$with_motif_req ;; *) echo "" echo "error: argument to --with-motif must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$with_motif" != yes -a "$with_motif" != no ; then echo "error: must be yes or no: --with-motif=$with_motif" exit 1 fi if test "$with_motif" = yes; then have_motif=no ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "Xm/Xm.h" "ac_cv_header_Xm_Xm_h" "#include #include #include " if test "x$ac_cv_header_Xm_Xm_h" = xyes; then : have_motif=yes $as_echo "#define HAVE_MOTIF 1" >>confdefs.h MOTIF_LIBS="$MOTIF_LIBS -lXm" fi CPPFLAGS="$ac_save_CPPFLAGS" fi if test "$have_motif" = yes; then ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "Xm/ComboBox.h" "ac_cv_header_Xm_ComboBox_h" "#include #include #include " if test "x$ac_cv_header_Xm_ComboBox_h" = xyes; then : $as_echo "#define HAVE_XMCOMBOBOX 1" >>confdefs.h fi CPPFLAGS="$ac_save_CPPFLAGS" fi ############################################################################### # # Checking whether Motif is really Lesstif. # ############################################################################### have_lesstif=no if test "$have_motif" = yes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Motif is really LessTif" >&5 $as_echo_n "checking whether Motif is really LessTif... " >&6; } if ${ac_cv_have_lesstif+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { long vers = LesstifVersion; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_have_lesstif=yes else ac_cv_have_lesstif=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_lesstif" >&5 $as_echo "$ac_cv_have_lesstif" >&6; } have_lesstif=$ac_cv_have_lesstif fi lesstif_version=unknown lesstif_version_string=unknown if test "$have_lesstif" = yes ; then ltv=unknown echo unknown > conftest-lt { $as_echo "$as_me:${as_lineno-$LINENO}: checking LessTif version number" >&5 $as_echo_n "checking LessTif version number... " >&6; } if ${ac_cv_lesstif_version_string+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` if test "$cross_compiling" = yes; then : ac_cv_lesstif_version=unknown ac_cv_lesstif_version_string=unknown else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main() { FILE *f = fopen("conftest-lt", "w"); if (!f) exit(1); fprintf(f, "%d %d.%d\n", LesstifVersion, LESSTIF_VERSION, LESSTIF_REVISION); fclose(f); exit(0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ltv=`cat conftest-lt` ac_cv_lesstif_version=`echo $ltv | sed 's/ .*//'` ac_cv_lesstif_version_string=`echo $ltv | sed 's/.* //'` else ac_cv_lesstif_version=unknown ac_cv_lesstif_version_string=unknown fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi CPPFLAGS="$ac_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lesstif_version_string" >&5 $as_echo "$ac_cv_lesstif_version_string" >&6; } rm -rf conftest-lt lesstif_version=$ac_cv_lesstif_version lesstif_version_string=$ac_cv_lesstif_version_string fi if test "$have_motif" = yes ; then mtv=unknown echo unknown > conftest-mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking Motif version number" >&5 $as_echo_n "checking Motif version number... " >&6; } if ${ac_cv_motif_version_string+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` if test "$cross_compiling" = yes; then : ac_cv_motif_version=unknown ac_cv_motif_version_string=unknown else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main() { FILE *f = fopen("conftest-mt", "w"); if (!f) exit(1); fprintf(f, "%d %d.%d\n", XmVersion, XmVERSION, XmREVISION); fclose(f); exit(0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : mtv=`cat conftest-mt` ac_cv_motif_version=`echo $mtv | sed 's/ .*//'` ac_cv_motif_version_string=`echo $mtv | sed 's/.* //'` else ac_cv_motif_version=unknown ac_cv_motif_version_string=unknown fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi CPPFLAGS="$ac_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_motif_version_string" >&5 $as_echo "$ac_cv_motif_version_string" >&6; } rm -rf conftest-mt motif_version=$ac_cv_motif_version motif_version_string=$ac_cv_motif_version_string fi ############################################################################### # # Checking whether Motif requires -lXpm. # # If this is Motif 2.x, and we have XPM, then link against XPM as well. # The deal is, Motif 2.x requires XPM -- but it's a compilation option # of the library whether to build the XPM code into libXm, or whether # to rely on an external libXm. So the only way to tell whether XPM is # a link-time requirement is to examine libXm.a, which is very # difficult to do in an autoconf script. So... if it's Motif 2.x, we # always link against XPM if the XPM lib exists (and this will be a # no-op if libXm happens to already have the XPM code in it.) # ############################################################################### motif_requires_xpm=no if test "$have_motif" = yes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Motif requires XPM" >&5 $as_echo_n "checking whether Motif requires XPM... " >&6; } if test "$motif_version" = "unknown" || test "$motif_version" -ge 2000 then motif_requires_xpm=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: maybe" >&5 $as_echo "maybe" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi ############################################################################### # # Checking whether Motif requires -lXp. # # Some versions of Motif (2.1.0, at least) require -lXp, the "X Printing # Extension". Why this extension isn't in -lXext with all the others, # I have no idea. # ############################################################################### have_xp_ext=no if test "$have_motif" = yes ; then have_xp_ext=no ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XpQueryExtension in -lXp" >&5 $as_echo_n "checking for XpQueryExtension in -lXp... " >&6; } if ${ac_cv_lib_Xp_XpQueryExtension+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXp -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 XpQueryExtension (); int main () { return XpQueryExtension (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xp_XpQueryExtension=yes else ac_cv_lib_Xp_XpQueryExtension=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xp_XpQueryExtension" >&5 $as_echo "$ac_cv_lib_Xp_XpQueryExtension" >&6; } if test "x$ac_cv_lib_Xp_XpQueryExtension" = xyes; then : have_xp_ext=yes; MOTIF_LIBS="$MOTIF_LIBS -lXp" else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi ############################################################################### # # Checking whether Motif requires -lXintl (for _Xsetlocale.) # ############################################################################### have_xintl=no if test "$have_motif" = 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` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _Xsetlocale in -lXintl" >&5 $as_echo_n "checking for _Xsetlocale in -lXintl... " >&6; } if ${ac_cv_lib_Xintl__Xsetlocale+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXintl -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 _Xsetlocale (); int main () { return _Xsetlocale (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xintl__Xsetlocale=yes else ac_cv_lib_Xintl__Xsetlocale=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xintl__Xsetlocale" >&5 $as_echo "$ac_cv_lib_Xintl__Xsetlocale" >&6; } if test "x$ac_cv_lib_Xintl__Xsetlocale" = xyes; then : have_xintl=yes else have_xintl=no fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" if test "$have_xintl" = yes; then MOTIF_LIBS="$MOTIF_LIBS -lXintl" fi fi ############################################################################### # # Check for -lGL or -lMesaGL. # ############################################################################### have_gl=no ac_have_mesa_gl=no with_gl_req=unspecified gl_halfassed=no # Check whether --with-gl was given. if test "${with_gl+set}" = set; then : withval=$with_gl; with_gl="$withval"; with_gl_req="$withval" else with_gl=yes fi case "$with_gl" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GL headers" >&5 $as_echo_n "checking for GL headers... " >&6; } d=$with_gl/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GL libs" >&5 $as_echo_n "checking for GL libs... " >&6; } d=$with_gl/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_gl_req="yes" with_gl=$with_gl_req ;; *) echo "" echo "error: argument to --with-gl must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac ac_mesagl_version=unknown ac_mesagl_version_string=unknown if test "$with_gl" = yes; then ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_mongrel "$LINENO" "GL/gl.h" "ac_cv_header_GL_gl_h" "$ac_includes_default" if test "x$ac_cv_header_GL_gl_h" = xyes; then : have_gl=yes else have_gl=no fi CPPFLAGS="$ac_save_CPPFLAGS" if test "$have_gl" = yes ; then ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "GL/glx.h" "ac_cv_header_GL_glx_h" "#include " if test "x$ac_cv_header_GL_glx_h" = xyes; then : have_gl=yes else have_gl=no fi CPPFLAGS="$ac_save_CPPFLAGS" fi # If we have the headers, try and figure out which vendor it's from. # if test "$have_gl" = yes ; then # We need to know whether it's MesaGL so that we know which libraries # to link against. # { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether GL is really MesaGL" >&5 $as_echo_n "checking whether GL is really MesaGL... " >&6; } if ${ac_cv_have_mesa_gl+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_have_mesa_gl=no if test "$ac_macosx" = no; then # WTF! MacOS 10.5.0 ships the Mesa GL headers! # It's not really Mesa, is it? ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Mesa|MESA" >/dev/null 2>&1; then : ac_cv_have_mesa_gl=yes fi rm -rf conftest* CPPFLAGS="$ac_save_CPPFLAGS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_mesa_gl" >&5 $as_echo "$ac_cv_have_mesa_gl" >&6; } ac_have_mesa_gl=$ac_cv_have_mesa_gl gl_lib_1="" GL_LIBS="" if test "$ac_macosx" = yes; then # Without these, every link against libGL gets a bunch of useless # warnings. # osx_crud="-bind_at_load -multiply_defined suppress" { $as_echo "$as_me:${as_lineno-$LINENO}: result: adding \"$osx_crud\" to GL_LIBS" >&5 $as_echo "adding \"$osx_crud\" to GL_LIBS" >&6; } GL_LIBS="$GL_LIBS $osx_crud" unset osx_crud # New lossage in 10.5.0: without this, we get: # ld: cycle in dylib re-exports with /usr/X11/lib/libGL.dylib # osx_crud="/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib" osx_crud="-Wl,-dylib_file,${osx_crud}:${osx_crud}" { $as_echo "$as_me:${as_lineno-$LINENO}: result: adding \"$osx_crud\" to GL_LIBS" >&5 $as_echo "adding \"$osx_crud\" to GL_LIBS" >&6; } GL_LIBS="$GL_LIBS $osx_crud" unset osx_crud # New lossage in 10.6.8: we can't allow -L/opt/local/lib to be in the # link line, or at runtime XQueryExtension gets a segv due to some kind # of library version skew. Libs must come from /usr/X11/lib even if # $prefix and/or $exec_prefix are set to /opt/local/. # { $as_echo "$as_me:${as_lineno-$LINENO}: result: omitting \"$libdir\" from LDFLAGS" >&5 $as_echo "omitting \"$libdir\" from LDFLAGS" >&6; } libdir='' fi # Some versions of MesaGL are compiled to require -lpthread. # So if the Mesa headers exist, and -lpthread exists, then always # link -lpthread after the Mesa libs (be they named -lGL or -lMesaGL.) # # Oftentimes, AX_PTHREAD will bring in -lpthread as well; but that ends # up before -l(Mesa)GL, instead of after where it would belong. # if test "$ac_have_mesa_gl" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5 $as_echo_n "checking for pthread_create in -lpthread... " >&6; } if ${ac_cv_lib_pthread_pthread_create+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 pthread_create (); int main () { return pthread_create (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthread_pthread_create=yes else ac_cv_lib_pthread_pthread_create=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5 $as_echo "$ac_cv_lib_pthread_pthread_create" >&6; } if test "x$ac_cv_lib_pthread_pthread_create" = xyes; then : GL_LIBS="-lpthread" fi fi # If we have Mesa headers, check to see if we can link against -lMesaGL. # If we don't have Mesa headers, or we don't have -lMesaGL, try -lGL. # Else, warn that GL is busted. (We have the headers, but no libs.) # if test "$ac_have_mesa_gl" = 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` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for glXCreateContext in -lMesaGL" >&5 $as_echo_n "checking for glXCreateContext in -lMesaGL... " >&6; } if ${ac_cv_lib_MesaGL_glXCreateContext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lMesaGL -lMesaGLU $GL_LIBS -lX11 -lXext $VIDMODE_LIBS -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 glXCreateContext (); int main () { return glXCreateContext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_MesaGL_glXCreateContext=yes else ac_cv_lib_MesaGL_glXCreateContext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_MesaGL_glXCreateContext" >&5 $as_echo "$ac_cv_lib_MesaGL_glXCreateContext" >&6; } if test "x$ac_cv_lib_MesaGL_glXCreateContext" = xyes; then : gl_lib_1="MesaGL" GL_LIBS="-lMesaGL -lMesaGLU $VIDMODE_LIBS $GL_LIBS" fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi if test "$gl_lib_1" = "" ; 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` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for glXCreateContext in -lGL" >&5 $as_echo_n "checking for glXCreateContext in -lGL... " >&6; } if ${ac_cv_lib_GL_glXCreateContext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lGL -lGLU $GL_LIBS -lX11 -lXext $VIDMODE_LIBS -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 glXCreateContext (); int main () { return glXCreateContext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_GL_glXCreateContext=yes else ac_cv_lib_GL_glXCreateContext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_GL_glXCreateContext" >&5 $as_echo "$ac_cv_lib_GL_glXCreateContext" >&6; } if test "x$ac_cv_lib_GL_glXCreateContext" = xyes; then : gl_lib_1="GL" GL_LIBS="-lGL -lGLU $VIDMODE_LIBS $GL_LIBS" fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi if test "$gl_lib_1" = "" ; then # we have headers, but no libs -- bail. have_gl=no ac_have_mesa_gl=no gl_halfassed=yes else # linking works -- we can build the GL hacks. $as_echo "#define HAVE_GL 1" >>confdefs.h if test "$ac_have_mesa_gl" = yes ; then $as_echo "#define HAVE_MESA_GL 1" >>confdefs.h fi fi fi # Now that we know we have GL headers and libs, do some more GL testing. # if test "$have_gl" = yes ; then # If it's MesaGL, we'd like to issue a warning if the version number # is less than or equal to 2.6, because that version had a security bug. # if test "$ac_have_mesa_gl" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking MesaGL version number" >&5 $as_echo_n "checking MesaGL version number... " >&6; } if ${ac_cv_mesagl_version_string+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext < #ifndef MESA_MAJOR_VERSION # include # ifdef XMESA_MAJOR_VERSION /* Around Mesa 3.2, they took out the Mesa version number, so instead, we have to check the XMesa version number (the number of the X protocol support, which seems to be the same as the Mesa version number.) */ # define MESA_MAJOR_VERSION XMESA_MAJOR_VERSION # define MESA_MINOR_VERSION XMESA_MINOR_VERSION # else /* Oh great. Some time after 3.4, they took out the xmesa.h header file, so we have no way of telling what version of Mesa this is at all. So, we'll guess that the osmesa version (the "offscreen protocol") is less than or equal to the real mesa version number. Except that if OSmesa is 3.3, assume at least Mesa 3.4, since OSmesa was 3.3 in Mesa 3.4. And Mesa 3.3 had xmesa.h. What a complete load of shit! */ # include # define MESA_MAJOR_VERSION OSMESA_MAJOR_VERSION # define MESA_MINOR_VERSION OSMESA_MINOR_VERSION or newer, probably? # if OSMESA_MAJOR_VERSION == 3 && OSMESA_MINOR_VERSION == 3 # undef MESA_MINOR_VERSION # define MESA_MINOR_VERSION 4 or newer, probably? # endif # endif #endif configure: MESA_MAJOR_VERSION MESA_MINOR_VERSION EOF ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" mglv=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | grep configure:` # M4 sucks!! mglv=`echo "$mglv" | sed -n \ 's/^configure: *\([0-9][0-9]*\) *\([0-9].*\)$/\1.\2/p'` rm -rf conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" if test "$mglv" = ""; then ac_mesagl_version=unknown ac_mesagl_version_string=unknown else ac_mesagl_version_string="$mglv" # M4 sucks!! maj=`echo "$mglv" | sed -n 's/^\([0-9][0-9]*\)\..*$/\1/p'` min=`echo "$mglv" | sed -n 's/^.*\.\([0-9][0-9]*\).*$/\1/p'` ac_mesagl_version=`echo "$maj * 1000 + $min" | bc` if test -z "$ac_mesagl_version"; then ac_mesagl_version=unknown ac_mesagl_version_string=unknown fi fi ac_cv_mesagl_version=$ac_mesagl_version ac_cv_mesagl_version_string=$ac_mesagl_version_string fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_mesagl_version_string" >&5 $as_echo "$ac_cv_mesagl_version_string" >&6; } ac_mesagl_version=$ac_cv_mesagl_version ac_mesagl_version_string=$ac_cv_mesagl_version_string fi # Check for OpenGL 1.1 features. # ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` as_ac_Lib=`$as_echo "ac_cv_lib_$gl_lib_1''_glBindTexture" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for glBindTexture in -l$gl_lib_1" >&5 $as_echo_n "checking for glBindTexture in -l$gl_lib_1... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-l$gl_lib_1 $GL_LIBS -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 glBindTexture (); int main () { return glBindTexture (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : $as_echo "#define HAVE_GLBINDTEXTURE 1" >>confdefs.h else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi elif test "$with_gl" != no; then echo "error: must be yes or no: --with-gl=$with_gl" exit 1 fi ############################################################################### # # Check for -lgle. # ############################################################################### have_gle=no with_gle_req=unspecified gle_halfassed=no # Check whether --with-gle was given. if test "${with_gle+set}" = set; then : withval=$with_gle; with_gle="$withval"; with_gle_req="$withval" else with_gle=yes fi case "$with_gle" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLE headers" >&5 $as_echo_n "checking for GLE headers... " >&6; } d=$with_gle/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLE libs" >&5 $as_echo_n "checking for GLE libs... " >&6; } d=$with_gle/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_gle_req="yes" with_gle=$with_gle_req ;; *) echo "" echo "error: argument to --with-gle must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac GLE_LIBS="" if test "$have_gl" = no ; then true elif test "$with_gle" = yes; then ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "GL/gle.h" "ac_cv_header_GL_gle_h" "#include " if test "x$ac_cv_header_GL_gle_h" = xyes; then : have_gle3=yes else have_gle3=no fi CPPFLAGS="$ac_save_CPPFLAGS" if test "$have_gle3" = yes ; then have_gle=yes; else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "GL/gutil.h" "ac_cv_header_GL_gutil_h" "#include " if test "x$ac_cv_header_GL_gutil_h" = xyes; then : have_gle=yes else have_gle=no fi CPPFLAGS="$ac_save_CPPFLAGS" if test "$have_gle" = yes ; then ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "GL/tube.h" "ac_cv_header_GL_tube_h" "#include " if test "x$ac_cv_header_GL_tube_h" = xyes; then : have_gle=yes else have_gle=no fi CPPFLAGS="$ac_save_CPPFLAGS" fi fi if test "$have_gle" = yes ; then have_gle=no gle_halfassed=yes ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gleCreateGC in -lgle" >&5 $as_echo_n "checking for gleCreateGC in -lgle... " >&6; } if ${ac_cv_lib_gle_gleCreateGC+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgle $GL_LIBS -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 gleCreateGC (); int main () { return gleCreateGC (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gle_gleCreateGC=yes else ac_cv_lib_gle_gleCreateGC=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gle_gleCreateGC" >&5 $as_echo "$ac_cv_lib_gle_gleCreateGC" >&6; } if test "x$ac_cv_lib_gle_gleCreateGC" = xyes; then : have_gle=yes; gle_halfassed=no; GLE_LIBS="-lgle" fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi if test "$have_gle" = yes ; then have_gle=no gle_halfassed=yes # sometimes the libmatrix stuff is included in libgle. look there first. # # I don't get it. For some reason, this test passes on SGI, as if # uview_direction_d() was in libgle -- but it's not, it's in libmatrix. # Yet the link is succeeding. Why??? # # AC_CHECK_X_LIB(gle, uview_direction_d, # [have_gle=yes; gle_halfassed=no], # [], $GL_LIBS -lX11 -lXext -lm) # As of GLE 3 this is in libgle, and has changed name to uview_direction! # *sigh* if test "$have_gle3" = 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` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uview_direction in -lgle" >&5 $as_echo_n "checking for uview_direction in -lgle... " >&6; } if ${ac_cv_lib_gle_uview_direction+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgle $GL_LIBS -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 uview_direction (); int main () { return uview_direction (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gle_uview_direction=yes else ac_cv_lib_gle_uview_direction=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gle_uview_direction" >&5 $as_echo "$ac_cv_lib_gle_uview_direction" >&6; } if test "x$ac_cv_lib_gle_uview_direction" = xyes; then : have_gle=yes; gle_halfassed=no fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi # if it wasn't in libgle, then look in libmatrix. if test "$have_gle" = no ; 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` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uview_direction_d in -lmatrix" >&5 $as_echo_n "checking for uview_direction_d in -lmatrix... " >&6; } if ${ac_cv_lib_matrix_uview_direction_d+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmatrix $GL_LIBS -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 uview_direction_d (); int main () { return uview_direction_d (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_matrix_uview_direction_d=yes else ac_cv_lib_matrix_uview_direction_d=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_matrix_uview_direction_d" >&5 $as_echo "$ac_cv_lib_matrix_uview_direction_d" >&6; } if test "x$ac_cv_lib_matrix_uview_direction_d" = xyes; then : have_gle=yes; gle_halfassed=no; GLE_LIBS="$GLE_LIBS -lmatrix" fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi fi if test "$have_gle" = yes ; then $as_echo "#define HAVE_GLE 1" >>confdefs.h if test "$have_gle3" = yes ; then $as_echo "#define HAVE_GLE3 1" >>confdefs.h fi fi elif test "$with_gle" != no; then echo "error: must be yes or no: --with-gle=$with_gle" exit 1 fi ############################################################################### # # Handle --with-gles # ############################################################################### with_gles_req=unspecified # Check whether --with-gles was given. if test "${with_gles+set}" = set; then : withval=$with_gles; with_gles="$withval"; with_gles_req="$withval" else with_gles=no fi case "$with_gles" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JWZGLES headers" >&5 $as_echo_n "checking for JWZGLES headers... " >&6; } d=$with_gles/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JWZGLES libs" >&5 $as_echo_n "checking for JWZGLES libs... " >&6; } d=$with_gles/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_gles_req="yes" with_gles=$with_gles_req ;; *) echo "" echo "error: argument to --with-gles must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$with_gles" = yes; then have_gles=yes $as_echo "#define HAVE_JWZGLES 1" >>confdefs.h JWZGLES_OBJS="jwzgles.o" { $as_echo "$as_me:${as_lineno-$LINENO}: result: using OpenGL ES compatiblity shim" >&5 $as_echo "using OpenGL ES compatiblity shim" >&6; } elif test "$with_gles" != no; then echo "error: must be yes or no: --with-gles=$with_xpm" exit 1 fi ############################################################################### # # Check for -lgdk_pixbuf. # These tests are for gdk_pixbuf usage of the hacks, # not xscreensaver-demo (thus we have to test again to get # the libraries right: don't want to pull in all of GTK # for the hacks.) # ############################################################################### have_gdk_pixbuf=no with_gdk_pixbuf_req=unspecified # Check whether --with-pixbuf was given. if test "${with_pixbuf+set}" = set; then : withval=$with_pixbuf; with_gdk_pixbuf="$withval"; with_gdk_pixbuf_req="$withval" else with_gdk_pixbuf=yes fi # if --with-pixbuf=/directory/ was specified, remember that directory so that # we can also look for the `gdk-pixbuf-config' program in that directory. case "$with_gdk_pixbuf" in /*) gdk_pixbuf_dir="$with_gdk_pixbuf" ;; *) gdk_pixbuf_dir="" ;; esac case "$with_gdk_pixbuf" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GDK_PIXBUF headers" >&5 $as_echo_n "checking for GDK_PIXBUF headers... " >&6; } d=$with_gdk_pixbuf/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GDK_PIXBUF libs" >&5 $as_echo_n "checking for GDK_PIXBUF libs... " >&6; } d=$with_gdk_pixbuf/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_gdk_pixbuf_req="yes" with_gdk_pixbuf=$with_gdk_pixbuf_req ;; *) echo "" echo "error: argument to --with-pixbuf must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$with_gdk_pixbuf" != yes -a "$with_gdk_pixbuf" != no ; then echo "error: must be yes or no: --with-pixbuf=$with_gdk_pixbuf" exit 1 fi if test "$with_gdk_pixbuf" = yes; then have_gdk_pixbuf=no pkgs='' ok="yes" pkg_check_version gdk-pixbuf-2.0 2.0.0 pkg_check_version gdk-pixbuf-xlib-2.0 2.0.0 have_gdk_pixbuf="$ok" if test "$have_gdk_pixbuf" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gdk-pixbuf includes" >&5 $as_echo_n "checking for gdk-pixbuf includes... " >&6; } if ${ac_cv_gdk_pixbuf_config_cflags+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_gdk_pixbuf_config_cflags=`$pkg_config --cflags $pkgs` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gdk_pixbuf_config_cflags" >&5 $as_echo "$ac_cv_gdk_pixbuf_config_cflags" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gdk-pixbuf libs" >&5 $as_echo_n "checking for gdk-pixbuf libs... " >&6; } if ${ac_cv_gdk_pixbuf_config_libs+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_gdk_pixbuf_config_libs=`$pkg_config --libs $pkgs` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gdk_pixbuf_config_libs" >&5 $as_echo "$ac_cv_gdk_pixbuf_config_libs" >&6; } fi ac_gdk_pixbuf_config_cflags=$ac_cv_gdk_pixbuf_config_cflags ac_gdk_pixbuf_config_libs=$ac_cv_gdk_pixbuf_config_libs if test "$have_gdk_pixbuf" = yes; then # # we appear to have pixbuf; check for headers/libs to be sure. # ac_save_gdk_pixbuf_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $ac_gdk_pixbuf_config_cflags" have_gdk_pixbuf=no # check for header A... ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_mongrel "$LINENO" "gdk-pixbuf/gdk-pixbuf.h" "ac_cv_header_gdk_pixbuf_gdk_pixbuf_h" "$ac_includes_default" if test "x$ac_cv_header_gdk_pixbuf_gdk_pixbuf_h" = xyes; then : have_gdk_pixbuf=yes fi CPPFLAGS="$ac_save_CPPFLAGS" # if that worked, check for header B... if test "$have_gdk_pixbuf" = yes; then have_gdk_pixbuf=no gdk_pixbuf_halfassed=yes ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_mongrel "$LINENO" "gdk-pixbuf/gdk-pixbuf-xlib.h" "ac_cv_header_gdk_pixbuf_gdk_pixbuf_xlib_h" "$ac_includes_default" if test "x$ac_cv_header_gdk_pixbuf_gdk_pixbuf_xlib_h" = xyes; then : have_gdk_pixbuf=yes gdk_pixbuf_halfassed=no fi CPPFLAGS="$ac_save_CPPFLAGS" # yay, it has a new name in Gtk 2.x... if test "$have_gdk_pixbuf" = no; then have_gdk_pixbuf=no gdk_pixbuf_halfassed=yes ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_mongrel "$LINENO" "gdk-pixbuf-xlib/gdk-pixbuf-xlib.h" "ac_cv_header_gdk_pixbuf_xlib_gdk_pixbuf_xlib_h" "$ac_includes_default" if test "x$ac_cv_header_gdk_pixbuf_xlib_gdk_pixbuf_xlib_h" = xyes; then : have_gdk_pixbuf=yes gdk_pixbuf_halfassed=no fi CPPFLAGS="$ac_save_CPPFLAGS" fi fi CPPFLAGS="$ac_save_gdk_pixbuf_CPPFLAGS" fi if test "$have_gdk_pixbuf" = yes; then # we have the headers, now check for the libraries have_gdk_pixbuf=no gdk_pixbuf_halfassed=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for gdk_pixbuf usability..." >&5 $as_echo "checking for gdk_pixbuf usability..." >&6; } # library A... ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gdk_pixbuf_new_from_file in -lc" >&5 $as_echo_n "checking for gdk_pixbuf_new_from_file in -lc... " >&6; } if ${ac_cv_lib_c_gdk_pixbuf_new_from_file+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $ac_gdk_pixbuf_config_libs -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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_new_from_file (); int main () { return gdk_pixbuf_new_from_file (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_gdk_pixbuf_new_from_file=yes else ac_cv_lib_c_gdk_pixbuf_new_from_file=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_gdk_pixbuf_new_from_file" >&5 $as_echo "$ac_cv_lib_c_gdk_pixbuf_new_from_file" >&6; } if test "x$ac_cv_lib_c_gdk_pixbuf_new_from_file" = xyes; then : have_gdk_pixbuf=yes fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" # library B... if test "$have_gdk_pixbuf" = yes; then have_gdk_pixbuf=no ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gdk_pixbuf_xlib_init in -lc" >&5 $as_echo_n "checking for gdk_pixbuf_xlib_init in -lc... " >&6; } if ${ac_cv_lib_c_gdk_pixbuf_xlib_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $ac_gdk_pixbuf_config_libs -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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_xlib_init (); int main () { return gdk_pixbuf_xlib_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_gdk_pixbuf_xlib_init=yes else ac_cv_lib_c_gdk_pixbuf_xlib_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_gdk_pixbuf_xlib_init" >&5 $as_echo "$ac_cv_lib_c_gdk_pixbuf_xlib_init" >&6; } if test "x$ac_cv_lib_c_gdk_pixbuf_xlib_init" = xyes; then : have_gdk_pixbuf=yes gdk_pixbuf_halfassed=no fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi fi if test "$have_gdk_pixbuf" = yes; then INCLUDES="$INCLUDES $ac_gdk_pixbuf_config_cflags" XPM_LIBS="$ac_gdk_pixbuf_config_libs" $as_echo "#define HAVE_GDK_PIXBUF 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for gdk_pixbuf usability... no" >&5 $as_echo "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` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gdk_pixbuf_apply_embedded_orientation in -lc" >&5 $as_echo_n "checking for gdk_pixbuf_apply_embedded_orientation in -lc... " >&6; } if ${ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $ac_gdk_pixbuf_config_libs -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation=yes else ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation" >&5 $as_echo "$ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation" >&6; } if test "x$ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation" = xyes; then : $as_echo "#define HAVE_GDK_PIXBUF_APPLY_EMBEDDED_ORIENTATION 1" >>confdefs.h fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi fi ############################################################################### # # Check for -lXpm. # ############################################################################### have_xpm=no with_xpm_req=unspecified # Check whether --with-xpm was given. if test "${with_xpm+set}" = set; then : withval=$with_xpm; with_xpm="$withval"; with_xpm_req="$withval" else with_xpm=yes fi case "$with_xpm" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XPM headers" >&5 $as_echo_n "checking for XPM headers... " >&6; } d=$with_xpm/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XPM libs" >&5 $as_echo_n "checking for XPM libs... " >&6; } d=$with_xpm/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_xpm_req="yes" with_xpm=$with_xpm_req ;; *) echo "" echo "error: argument to --with-xpm must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$with_xpm" = yes; then ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/xpm.h" "ac_cv_header_X11_xpm_h" "#include " if test "x$ac_cv_header_X11_xpm_h" = xyes; then : have_xpm=yes $as_echo "#define HAVE_XPM 1" >>confdefs.h XPM_LIBS="-lXpm $XPM_LIBS" fi CPPFLAGS="$ac_save_CPPFLAGS" elif test "$with_xpm" != no; then echo "error: must be yes or no: --with-xpm=$with_xpm" exit 1 fi # See comment near $motif_requires_xpm, above. # Need to do this here, after both Motif and XPM have been checked for. # if test "$have_motif" = yes -a "$have_xpm" = yes ; then if test "$motif_requires_xpm" = yes ; then MOTIF_LIBS="$MOTIF_LIBS $XPM_LIBS" fi fi if test "$XPM_LIBS" = "" ; then XPM_LIBS=$(MINIXPM) fi ############################################################################### # # Check for -ljpeg # ############################################################################### have_jpeg=no with_jpeg_req=unspecified jpeg_halfassed=no # Check whether --with-jpeg was given. if test "${with_jpeg+set}" = set; then : withval=$with_jpeg; with_jpeg="$withval"; with_jpeg_req="$withval" else with_jpeg=yes fi case "$with_jpeg" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JPEG headers" >&5 $as_echo_n "checking for JPEG headers... " >&6; } d=$with_jpeg/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JPEG libs" >&5 $as_echo_n "checking for JPEG libs... " >&6; } d=$with_jpeg/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_jpeg_req="yes" with_jpeg=$with_jpeg_req ;; *) echo "" echo "error: argument to --with-jpeg must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$with_jpeg" != yes -a "$with_jpeg" != no ; then echo "error: must be yes or no: --with-jpeg=$with_jpeg" exit 1 fi if test "$with_jpeg" = yes; then have_jpeg=no ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_mongrel "$LINENO" "jpeglib.h" "ac_cv_header_jpeglib_h" "$ac_includes_default" if test "x$ac_cv_header_jpeglib_h" = xyes; then : have_jpeg=yes fi CPPFLAGS="$ac_save_CPPFLAGS" if test "$have_jpeg" = yes; then # we have the header, now check for the library have_jpeg=no jpeg_halfassed=yes ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jpeg_start_compress in -ljpeg" >&5 $as_echo_n "checking for jpeg_start_compress in -ljpeg... " >&6; } if ${ac_cv_lib_jpeg_jpeg_start_compress+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ljpeg $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 jpeg_start_compress (); int main () { return jpeg_start_compress (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_jpeg_jpeg_start_compress=yes else ac_cv_lib_jpeg_jpeg_start_compress=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_jpeg_start_compress" >&5 $as_echo "$ac_cv_lib_jpeg_jpeg_start_compress" >&6; } if test "x$ac_cv_lib_jpeg_jpeg_start_compress" = xyes; then : have_jpeg=yes jpeg_halfassed=no JPEG_LIBS="-ljpeg" $as_echo "#define HAVE_JPEGLIB 1" >>confdefs.h fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi fi ############################################################################### # # Check for -lXft # ############################################################################### have_xutf8drawstring=no ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Xutf8DrawString in -lX11" >&5 $as_echo_n "checking for Xutf8DrawString in -lX11... " >&6; } if ${ac_cv_lib_X11_Xutf8DrawString+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lX11 -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 Xutf8DrawString (); int main () { return Xutf8DrawString (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_X11_Xutf8DrawString=yes else ac_cv_lib_X11_Xutf8DrawString=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_X11_Xutf8DrawString" >&5 $as_echo "$ac_cv_lib_X11_Xutf8DrawString" >&6; } if test "x$ac_cv_lib_X11_Xutf8DrawString" = xyes; then : have_xutf8drawstring=yes else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" if test "$have_xutf8drawstring" = yes ; then $as_echo "#define HAVE_XUTF8DRAWSTRING 1" >>confdefs.h fi have_xft=no with_xft_req=unspecified xft_halfassed=no # Check whether --with-xft was given. if test "${with_xft+set}" = set; then : withval=$with_xft; with_xft="$withval"; with_xft_req="$withval" else with_xft=yes fi case "$with_xft" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Xft headers" >&5 $as_echo_n "checking for Xft headers... " >&6; } d=$with_xft/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Xft libs" >&5 $as_echo_n "checking for Xft libs... " >&6; } d=$with_xft/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_xft_req="yes" with_xft=$with_xft_req ;; *) echo "" echo "error: argument to --with-xft must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$with_xft" != yes -a "$with_xft" != no ; then echo "error: must be yes or no: --with-xft=$with_xft" exit 1 fi if test "$with_xft" = yes; then pkgs='' ok="yes" pkg_check_version xft 2.1.0 have_xft="$ok" if test "$have_xft" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Xft includes" >&5 $as_echo_n "checking for Xft includes... " >&6; } if ${ac_cv_xft_config_cflags+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_xft_config_cflags=`$pkg_config --cflags $pkgs` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_xft_config_cflags" >&5 $as_echo "$ac_cv_xft_config_cflags" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Xft libs" >&5 $as_echo_n "checking for Xft libs... " >&6; } if ${ac_cv_xft_config_libs+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_xft_config_libs=`$pkg_config --libs $pkgs` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_xft_config_libs" >&5 $as_echo "$ac_cv_xft_config_libs" >&6; } fi ac_xft_config_cflags=$ac_cv_xft_config_cflags ac_xft_config_libs=$ac_cv_xft_config_libs if test "$have_xft" = yes; then # # we appear to have Xft; check for headers/libs to be sure. # ac_save_xft_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $ac_xft_config_cflags" have_xft=no ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_mongrel "$LINENO" "X11/Xft/Xft.h" "ac_cv_header_X11_Xft_Xft_h" "$ac_includes_default" if test "x$ac_cv_header_X11_Xft_Xft_h" = xyes; then : have_xft=yes fi CPPFLAGS="$ac_save_CPPFLAGS" CPPFLAGS="$ac_save_xft_CPPFLAGS" fi if test "$have_xft" = yes; then # we have the headers, now check for the libraries have_xft=no xft_halfassed=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for Xft usability..." >&5 $as_echo "checking for Xft usability..." >&6; } ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XftDrawStringUtf8 in -lc" >&5 $as_echo_n "checking for XftDrawStringUtf8 in -lc... " >&6; } if ${ac_cv_lib_c_XftDrawStringUtf8+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $ac_xft_config_libs -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 XftDrawStringUtf8 (); int main () { return XftDrawStringUtf8 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_XftDrawStringUtf8=yes else ac_cv_lib_c_XftDrawStringUtf8=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_XftDrawStringUtf8" >&5 $as_echo "$ac_cv_lib_c_XftDrawStringUtf8" >&6; } if test "x$ac_cv_lib_c_XftDrawStringUtf8" = xyes; then : have_xft=yes fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi if test "$have_xft" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for Xft usability... no" >&5 $as_echo "checking for Xft usability... no" >&6; } fi fi if test "$have_xft" = yes; then INCLUDES="$INCLUDES $ac_xft_config_cflags" XFT_LIBS="$ac_xft_config_libs" XFT_SRCS='' XFT_OBJS='' $as_echo "#define HAVE_XFT 1" >>confdefs.h else XFT_LIBS='' XFT_SRCS='$(UTILS_SRC)/xft.c' XFT_OBJS='$(UTILS_BIN)/xft.o' fi ############################################################################### # # Check for pty support: this allows 'phosphor' and 'apple2' # to run curses-based programs, or be used as terminal windows. # ############################################################################### PTY_LIBS= for ac_header in pty.h util.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for forkpty in -lutil" >&5 $as_echo_n "checking for forkpty in -lutil... " >&6; } if ${ac_cv_lib_util_forkpty+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lutil $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 forkpty (); int main () { return forkpty (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_util_forkpty=yes else ac_cv_lib_util_forkpty=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_util_forkpty" >&5 $as_echo "$ac_cv_lib_util_forkpty" >&6; } if test "x$ac_cv_lib_util_forkpty" = xyes; then : PTY_LIBS="-lutil" ac_have_forkpty=yes $as_echo "#define HAVE_FORKPTY 1" >>confdefs.h fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" if test "$ac_have_forkpty" != yes ; then # we don't need (or have) -lutil on MacOS 10.4.2... ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for forkpty in -lc" >&5 $as_echo_n "checking for forkpty in -lc... " >&6; } if ${ac_cv_lib_c_forkpty+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 forkpty (); int main () { return forkpty (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_forkpty=yes else ac_cv_lib_c_forkpty=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_forkpty" >&5 $as_echo "$ac_cv_lib_c_forkpty" >&6; } if test "x$ac_cv_lib_c_forkpty" = xyes; then : PTY_LIBS="" $as_echo "#define HAVE_FORKPTY 1" >>confdefs.h fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi ############################################################################### # # Check for the XSHM server extension. # ############################################################################### have_xshm=no with_xshm_req=unspecified # Check whether --with-xshm-ext was given. if test "${with_xshm_ext+set}" = set; then : withval=$with_xshm_ext; with_xshm="$withval"; with_xshm_req="$withval" else with_xshm=yes fi case "$with_xshm" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XSHM headers" >&5 $as_echo_n "checking for XSHM headers... " >&6; } d=$with_xshm/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XSHM libs" >&5 $as_echo_n "checking for XSHM libs... " >&6; } d=$with_xshm/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_xshm_req="yes" with_xshm=$with_xshm_req ;; *) echo "" echo "error: argument to --with-xshm-ext must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$with_xshm" = yes; then # first check for Xshm.h. ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/extensions/XShm.h" "ac_cv_header_X11_extensions_XShm_h" "#include " if test "x$ac_cv_header_X11_extensions_XShm_h" = xyes; then : have_xshm=yes fi CPPFLAGS="$ac_save_CPPFLAGS" # if that succeeded, then check for sys/ipc.h. if test "$have_xshm" = yes; then have_xshm=no ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_mongrel "$LINENO" "sys/ipc.h" "ac_cv_header_sys_ipc_h" "$ac_includes_default" if test "x$ac_cv_header_sys_ipc_h" = xyes; then : have_xshm=yes fi CPPFLAGS="$ac_save_CPPFLAGS" fi # if that succeeded, then check for sys/shm.h. if test "$have_xshm" = yes; then have_xshm=no ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_mongrel "$LINENO" "sys/shm.h" "ac_cv_header_sys_shm_h" "$ac_includes_default" if test "x$ac_cv_header_sys_shm_h" = xyes; then : have_xshm=yes fi CPPFLAGS="$ac_save_CPPFLAGS" fi # AIX is pathological, as usual: apparently it's normal for the Xshm headers # to exist, but the library code to not exist. And even better, the library # code is in its own library: libXextSam.a. So, if we're on AIX, and that # lib doesn't exist, give up. (This lib gets added to X_EXTRA_LIBS, and # that's not quite right, but close enough.) # case "$host" in *-aix*) if `uname -v` -eq 3 ; then have_xshm=no ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XShmQueryExtension in -lXextSam" >&5 $as_echo_n "checking for XShmQueryExtension in -lXextSam... " >&6; } if ${ac_cv_lib_XextSam_XShmQueryExtension+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXextSam -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 XShmQueryExtension (); int main () { return XShmQueryExtension (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_XextSam_XShmQueryExtension=yes else ac_cv_lib_XextSam_XShmQueryExtension=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_XextSam_XShmQueryExtension" >&5 $as_echo "$ac_cv_lib_XextSam_XShmQueryExtension" >&6; } if test "x$ac_cv_lib_XextSam_XShmQueryExtension" = xyes; then : have_xshm=yes; X_EXTRA_LIBS="$X_EXTRA_LIBS -lXextSam" else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi ;; esac # if that succeeded, then we've really got it. if test "$have_xshm" = yes; then $as_echo "#define HAVE_XSHM_EXTENSION 1" >>confdefs.h fi elif test "$with_xshm" != no; then echo "error: must be yes or no: --with-xshm-ext=$with_xshm" exit 1 fi ############################################################################### # # Check for the DOUBLE-BUFFER server extension. # ############################################################################### have_xdbe=no with_xdbe_req=unspecified # Check whether --with-xdbe-ext was given. if test "${with_xdbe_ext+set}" = set; then : withval=$with_xdbe_ext; with_xdbe="$withval"; with_xdbe_req="$withval" else with_xdbe=yes fi case "$with_xdbe" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DOUBLE-BUFFER headers" >&5 $as_echo_n "checking for DOUBLE-BUFFER headers... " >&6; } d=$with_xdbe/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DOUBLE-BUFFER libs" >&5 $as_echo_n "checking for DOUBLE-BUFFER libs... " >&6; } d=$with_xdbe/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_xdbe_req="yes" with_xdbe=$with_xdbe_req ;; *) echo "" echo "error: argument to --with-xdbe-ext must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$with_xdbe" = yes; then ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/extensions/Xdbe.h" "ac_cv_header_X11_extensions_Xdbe_h" "#include " if test "x$ac_cv_header_X11_extensions_Xdbe_h" = xyes; then : have_xdbe=yes fi CPPFLAGS="$ac_save_CPPFLAGS" if test "$have_xdbe" = yes; then $as_echo "#define HAVE_DOUBLE_BUFFER_EXTENSION 1" >>confdefs.h fi elif test "$with_xdbe" != no; then echo "error: must be yes or no: --with-xdbe-ext=$with_xshm" exit 1 fi ############################################################################### # # Check for the SGI XReadDisplay server extension. # # Note: this has to be down here, rather than up with the other server # extension tests, so that the output of `configure --help' is in the # right order. Arrgh! # ############################################################################### have_readdisplay=no with_readdisplay_req=unspecified # Check whether --with-readdisplay was given. if test "${with_readdisplay+set}" = set; then : withval=$with_readdisplay; with_readdisplay="$withval"; with_readdisplay_req="$withval" else with_readdisplay=yes fi case "$with_readdisplay" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XReadDisplay headers" >&5 $as_echo_n "checking for XReadDisplay headers... " >&6; } d=$with_readdisplay/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XReadDisplay libs" >&5 $as_echo_n "checking for XReadDisplay libs... " >&6; } d=$with_readdisplay/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_readdisplay_req="yes" with_readdisplay=$with_readdisplay_req ;; *) echo "" echo "error: argument to --with-readdisplay must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$with_readdisplay" = yes; then ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/extensions/readdisplay.h" "ac_cv_header_X11_extensions_readdisplay_h" "#include " if test "x$ac_cv_header_X11_extensions_readdisplay_h" = xyes; then : $as_echo "#define HAVE_READ_DISPLAY_EXTENSION 1" >>confdefs.h fi CPPFLAGS="$ac_save_CPPFLAGS" elif test "$with_readdisplay" != no; then echo "error: must be yes or no: --with-readdisplay=$with_readdisplay" exit 1 fi ############################################################################### # # Check for a directory full of images to use as the default value # of the "imageDirectory" preference. # ############################################################################### have_imagedir=no with_imagedir_req=unspecified # Check whether --with-image-directory was given. if test "${with_image_directory+set}" = set; then : withval=$with_image_directory; with_imagedir="$withval"; with_imagedir_req="$withval" else with_imagedir=yes fi # no HANDLE_X_PATH_ARG for this one case "$with_imagedir" in /*) # absolute path { $as_echo "$as_me:${as_lineno-$LINENO}: checking for image directory $with_imagedir" >&5 $as_echo_n "checking for image directory $with_imagedir... " >&6; } if test -d "$with_imagedir" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } with_imagedir="" fi ;; yes) with_imagedir="" #### Could use some more defaults here... for dd in \ "/usr/share/backgrounds/images/" \ "/usr/share/wallpapers/" \ "/Library/Desktop Pictures/" \ ; do if test -z "$with_imagedir"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for image directory $dd" >&5 $as_echo_n "checking for image directory $dd... " >&6; } if test -d "$dd" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } with_imagedir="$dd" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi done ;; no) with_imagedir="" ;; *) echo "error: must be an absolute path: --with-image-directory=$with_imagedir_req" exit 1 ;; esac ac_cv_imagedir="$with_imagedir" DEFAULT_IMAGES_P='True' DEFAULT_IMAGE_DIRECTORY="$ac_cv_imagedir" if test -z "$DEFAULT_IMAGE_DIRECTORY" ; then DEFAULT_IMAGES_P='False' fi ############################################################################### # # Pick a text file to use as the default of the "textFile" preference. # Any old file will do, but preferably one that will make interesting # shapes when displayed by "starwars" and "fontglide". # ############################################################################### have_textfile=no with_textfile_req=unspecified # Check whether --with-text-file was given. if test "${with_text_file+set}" = set; then : withval=$with_text_file; with_textfile="$withval"; with_textfile_req="$withval" else with_textfile=yes fi # no HANDLE_X_PATH_ARG for this one case "$with_textfile" in /*) # absolute path { $as_echo "$as_me:${as_lineno-$LINENO}: checking for text file $with_textfile" >&5 $as_echo_n "checking for text file $with_textfile... " >&6; } if test -f "$with_textfile" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } with_textfile="" fi ;; yes) with_textfile="" #### Could use some more defaults here... for f in \ "/usr/X11R6/lib/X11/doc/README" \ "/usr/share/doc/xserver-common/copyright" \ "/usr/share/doc/xserver-xorg-core/copyright" \ "/usr/X11R6/README" \ "/usr/share/doc/libX11*/COPYING" \ "/usr/X11/share/X11/doc/README*" \ "/usr/share/doc/debian/debian-manifesto" \ ; do if test -z "$with_textfile"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for text file $f" >&5 $as_echo_n "checking for text file $f... " >&6; } f=`/bin/ls $f 2>&- | head -1` if test -f "$f" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } with_textfile="$f" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi done ;; no) with_textfile="" ;; *) echo "error: must be an absolute path: --with-text-file=$with_textfile_req" exit 1 ;; esac ac_cv_textfile="$with_textfile" DEFAULT_TEXT_FILE="$ac_cv_textfile" ############################################################################### # # Check the browser to see help URL # ############################################################################### have_browser=no with_browser_req=unspecified # Check whether --with-browser was given. if test "${with_browser+set}" = set; then : withval=$with_browser; with_browser="$withval"; with_browser_req="$withval" else with_browser=no fi # no HANDLE_X_PATH_ARG for this one case "$with_browser" in no ) ;; * ) WITH_BROWSER=$with_browser gnome_open_program=$with_browser { $as_echo "$as_me:${as_lineno-$LINENO}: checking for browser $with_browser" >&5 $as_echo_n "checking for browser $with_browser... " >&6; } with_browser_fullpath=`which $with_browser 2>/dev/null` case $with_browser_fullpath in /* ) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_browser=yes ;; * ) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } # Only warning: we don't want to install all packages for the # dependency of the browser in building stage... echo "WARNING: browser not found: --with-browser=$with_browser" ;; esac ;; esac ac_cv_browser="$with_browser" ############################################################################### # # Check whether it's ok to install some hacks as setuid (e.g., "sonar") # This should be safe, but let's give people the option. # ############################################################################### setuid_hacks_default=no setuid_hacks="$setuid_hacks_default" # Check whether --with-setuid-hacks was given. if test "${with_setuid_hacks+set}" = set; then : withval=$with_setuid_hacks; setuid_hacks="$withval" else setuid_hacks="$setuid_hacks_default" fi case "$setuid_hacks" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for setuid hacks headers" >&5 $as_echo_n "checking for setuid hacks headers... " >&6; } d=$setuid_hacks/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for setuid hacks libs" >&5 $as_echo_n "checking for setuid hacks libs... " >&6; } d=$setuid_hacks/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". setuid_hacks_req="yes" setuid_hacks=$setuid_hacks_req ;; *) echo "" echo "error: argument to --with-setuid-hacks must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$setuid_hacks" = yes; then true elif test "$setuid_hacks" != no; then echo "error: must be yes or no: --with-setuid-hacks=$setuid_hacks" exit 1 fi ############################################################################### # # Check for --with-record-animation # ############################################################################### record_anim_default=no record_anim="$record_anim_default" # Check whether --with-record-animation was given. if test "${with_record_animation+set}" = set; then : withval=$with_record_animation; record_anim="$withval" else record_anim="$record_anim_default" fi case "$record_anim" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for record animation headers" >&5 $as_echo_n "checking for record animation headers... " >&6; } d=$record_anim/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for record animation libs" >&5 $as_echo_n "checking for record animation libs... " >&6; } d=$record_anim/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". record_anim_req="yes" record_anim=$record_anim_req ;; *) echo "" echo "error: argument to --with-record-animation must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$record_anim" = yes; then true elif test "$record_anim" != no; then echo "error: must be yes or no: --with-record-animation=$record_anim" exit 1 fi if test "$record_anim" = yes; then if test "$have_gdk_pixbuf" != yes; then as_fn_error $? "--with-record-animation requires GDK-Pixbuf" "$LINENO" 5 else { $as_echo "$as_me:${as_lineno-$LINENO}: result: enabling --with-record-animation" >&5 $as_echo "enabling --with-record-animation" >&6; } $as_echo "#define HAVE_RECORD_ANIM 1" >>confdefs.h ANIM_OBJS='$(ANIM_OBJS)' ANIM_LIBS='$(ANIM_LIBS)' fi fi ############################################################################### # # Done testing. Now, set up the various -I and -L variables, # and decide which GUI program to build by default. # ############################################################################### DEPEND=makedepend DEPEND_FLAGS= DEPEND_DEFINES= if test \! -z "$includedir" ; then INCLUDES="$INCLUDES -I$includedir" fi if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi PREFERRED_DEMO_PROGRAM='' ALL_DEMO_PROGRAMS= if test "$have_motif" = yes; then PREFERRED_DEMO_PROGRAM=xscreensaver-demo-Xm ALL_DEMO_PROGRAMS="$PREFERRED_DEMO_PROGRAM $ALL_DEMO_PROGRAMS" fi if test "$have_gtk" = yes; then PREFERRED_DEMO_PROGRAM=xscreensaver-demo-Gtk ALL_DEMO_PROGRAMS="$PREFERRED_DEMO_PROGRAM $ALL_DEMO_PROGRAMS" fi if test "$have_kerberos" = yes; then PASSWD_SRCS="$PASSWD_SRCS \$(KERBEROS_SRCS)" PASSWD_OBJS="$PASSWD_OBJS \$(KERBEROS_OBJS)" fi if test "$have_pam" = yes; then PASSWD_SRCS="$PASSWD_SRCS \$(PAM_SRCS)" PASSWD_OBJS="$PASSWD_OBJS \$(PAM_OBJS)" INSTALL_PAM="install-pam" fi if test "$enable_pam_check_account_type" = yes; then COMMENT_PAM_CHECK_ACCOUNT="" else COMMENT_PAM_CHECK_ACCOUNT="#" fi if test "$have_passwd_helper" = yes; then PASSWD_SRCS="$PASSWD_SRCS \$(PWHELPER_SRCS)" PASSWD_OBJS="$PASSWD_OBJS \$(PWHELPER_OBJS)" fi PASSWD_SRCS="$PASSWD_SRCS \$(PWENT_SRCS)" PASSWD_OBJS="$PASSWD_OBJS \$(PWENT_OBJS)" if test "$enable_locking" = yes; then LOCK_SRCS='$(LOCK_SRCS_1) $(PASSWD_SRCS)' LOCK_OBJS='$(LOCK_OBJS_1) $(PASSWD_OBJS)' else LOCK_SRCS='$(NOLOCK_SRCS_1)' LOCK_OBJS='$(NOLOCK_OBJS_1)' fi if test "$ac_macosx" = yes; then EXES_OSX='$(EXES_OSX)' SCRIPTS_OSX='$(SCRIPTS_OSX)' MEN_OSX='$(MEN_OSX)' else EXES_OSX= SCRIPTS_OSX= MEN_OSX= fi INSTALL_SETUID='$(INSTALL_PROGRAM) $(SUID_FLAGS)' if test "$need_setuid" = yes; then NEED_SETUID=yes else NEED_SETUID=no fi if test "$setuid_hacks" = yes; then SETUID_HACKS=yes else SETUID_HACKS=no fi tab=' ' if test "$have_gl" = yes; then GL_EXES='$(GL_EXES)' SUID_EXES='$(SUID_EXES)' RETIRED_GL_EXES='$(RETIRED_GL_EXES)' GL_UTIL_EXES='$(GL_UTIL_EXES)' GL_MEN='$(GL_MEN)' GL_KLUDGE=" " else GL_KLUDGE="-" fi if test "$have_gle" = yes; then GLE_EXES='$(GLE_EXES)' GLE_KLUDGE=" " else GLE_KLUDGE="-" fi if test "$have_jpeg" = yes -a "$have_gdk_pixbuf" = yes; then JPEG_EXES='$(JPEG_EXES)' fi # Another substitution in the XScreenSaver.ad.in file: # if test "$gnome_open_program" != ''; then GNOME24='' GNOME22='! ' NOGNOME='! ' elif test "$gnome_url_show_program" != ''; then GNOME24='! ' GNOME22='' NOGNOME='! ' else GNOME24='! ' GNOME22='! ' NOGNOME='' fi # Set PO_DATADIR to something sensible. # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for locale directory" >&5 $as_echo_n "checking for locale directory... " >&6; } if test -n "$GTK_DATADIR" ; then PO_DATADIR="$GTK_DATADIR" elif test "$have_gtk" = yes; then PO_DATADIR=`$pkg_config --variable=prefix gtk+-2.0` PO_DATADIR="$PO_DATADIR/share" fi if test -z "$PO_DATADIR" ; then # # #### Total fucking kludge -- # Map /build/prefix/usr/X11R6/share/ to /build/prefix/usr/share/ # but of course we need to expand all the nested variables to do that... # dd=`eval eval eval eval eval eval eval eval eval eval eval echo $datadir` PO_DATADIR=`echo $dd | sed 's@/X11R6/@/@'` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PO_DATADIR/locale" >&5 $as_echo "$PO_DATADIR/locale" >&6; } # canonicalize slashes. HACK_CONF_DIR=`echo "${HACK_CONF_DIR}" | sed 's@/$@@;s@//*@/@g'` # gcc 3.0 likes to issue this warning for every file: # # cc1: warning: changing search order for system directory "/usr/local/include" # cc1: warning: as it has already been specified as a non-system directory # # Yay. We can only avoid that by deleting "-I${prefix}/include" from the list. # Which *should* be totally redundant, and thus an ok thing to delete? # INCLUDES=`echo "$INCLUDES" | sed 's@ -I${prefix}/include@@g;'` ############################################################################### # # Perform substitutions and write Makefiles. # ############################################################################### APPDEFAULTS=$ac_x_app_defaults ac_config_files="$ac_config_files Makefile utils/Makefile driver/Makefile driver/xscreensaver.pam driver/xscreensaver-demo.glade2 hacks/Makefile hacks/glx/Makefile po/Makefile.in driver/XScreenSaver.ad" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs ac_config_commands="$ac_config_commands po/stamp-it" : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "utils/Makefile") CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;; "driver/Makefile") CONFIG_FILES="$CONFIG_FILES driver/Makefile" ;; "driver/xscreensaver.pam") CONFIG_FILES="$CONFIG_FILES driver/xscreensaver.pam" ;; "driver/xscreensaver-demo.glade2") CONFIG_FILES="$CONFIG_FILES driver/xscreensaver-demo.glade2" ;; "hacks/Makefile") CONFIG_FILES="$CONFIG_FILES hacks/Makefile" ;; "hacks/glx/Makefile") CONFIG_FILES="$CONFIG_FILES hacks/glx/Makefile" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "driver/XScreenSaver.ad") CONFIG_FILES="$CONFIG_FILES driver/XScreenSaver.ad" ;; "po/stamp-it") CONFIG_COMMANDS="$CONFIG_COMMANDS po/stamp-it" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "default-1":C) case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac ;; "po/stamp-it":C) if ! grep "^# INTLTOOL_MAKEFILE$" "po/Makefile.in" > /dev/null ; then as_fn_error $? "po/Makefile.in.in was not created by intltoolize." "$LINENO" 5 fi rm -f "po/stamp-it" "po/stamp-it.tmp" "po/POTFILES" "po/Makefile.tmp" >"po/stamp-it.tmp" sed '/^#/d s/^[[].*] *// /^[ ]*$/d '"s|^| $ac_top_srcdir/|" \ "$srcdir/po/POTFILES.in" | sed '$!s/$/ \\/' >"po/POTFILES" sed '/^POTFILES =/,/[^\\]$/ { /^POTFILES =/!d r po/POTFILES } ' "po/Makefile.in" >"po/Makefile" rm -f "po/Makefile.tmp" mv "po/stamp-it.tmp" "po/stamp-it" ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi ############################################################################### # # Print some warnings at the end. # ############################################################################### warn_prefix_1=" Warning:" warn_prefix_2=" Note:" warn_prefix="$warn_prefix_1" warning=no warnsep=' #################################################################' warnpre() { if test "$warning" = no ; then echo '' ; echo "$warnsep" ; echo '' warning=yes fi } warn() { warnpre if test "$warning" = long ; then echo '' ; fi warning=yes rest="$@" echo "$warn_prefix $rest" } warnL() { was=$warning warnpre warning=yes if test "$was" != no ; then echo '' ; fi rest="$@" echo "$warn_prefix $rest" } warn2() { rest="$@" echo " $rest" warning=long } note() { warn_prefix="$warn_prefix_2" warn $@ warn_prefix="$warn_prefix_1" } noteL() { warn_prefix="$warn_prefix_2" warnL $@ warn_prefix="$warn_prefix_1" } # ac_prog_cc_no_pthread normally only happens on AIX, because according # to AX_PTHREAD, AIX needs CC=xlc_r or CC=cc_r to do threads. # If CC is specified, it takes precedence over --with-pthread. if test "$ac_prog_cc_no_pthread" ; then warnL "You requested $ac_original_cc for the C compiler, but it doesn't" warn2 "support POSIX threads." echo "" warn2 "If you have multiple CPU cores, try CC=$PTHREAD_CC." elif test "$with_pthread_req" = yes -a "$have_pthread" = no ; then warn 'POSIX threads were requested, but were not found.' fi if test "$with_sgi_req" = yes -a "$have_sgi" = no ; then warn 'The SGI saver extension was requested, but was not found.' fi if test "$with_xidle_req" = yes -a "$have_xidle" = no ; then warn 'The XIdle extension was requested, but was not found.' fi if test "$with_xshm_req" = yes -a "$have_xshm" = no ; then warn 'The XSHM extension was requested, but was not found.' fi if test "$with_xdbe_req" = yes -a "$have_xdbe" = no ; then warn 'The DOUBLE-BUFFER extension was requested, but was not found.' fi if test "$with_sgivc_req" = yes -a "$have_sgivc" = no ; then warn 'The SGI-VIDEO-CONTROL extension was requested, but was not found.' fi if test "$with_dpms_req" = yes -a "$have_dpms" = no ; then warn 'The DPMS extension was requested, but was not found.' fi if test "$with_xinerama_req" = yes -a "$have_xinerama" = no ; then warn 'The Xinerama extension was requested, but was not found.' fi if test "$with_xf86vmode_req" = yes -a "$have_xf86vmode" = no ; then warn 'The XF86VMODE extension was requested, but was not found.' fi if test "$with_randr_req" = yes -a "$have_randr" = no ; then warn 'The RANDR extension was requested, but was not found.' fi if test "$with_proc_interrupts_req" = yes -a "$have_proc_interrupts" = no; then warn "Checking of /proc/interrupts was requested, but it's bogus." fi if test "$pkg_config" = false ; then warnL 'The "pkg-config" program was not found. Without that,' warn2 "detection of the various GTK libraries won't work." else pkgerr=`$pkg_config --list-all 2>&1 >/dev/null` if test "x$pkgerr" != "x" ; then warnL 'The "pkg-config" program produces errors. This often causes' warn2 "detection of the various GTK libraries to malfunction." warn2 "The errors are:" echo '' echo "$pkgerr" | sed 's/^/ > /g' fi fi if test "$gtk_halfassed" != no ; then warnL "GTK version $gtk_halfassed was found, but at least one supporting" warn2 "library ($gtk_halfassed_lib) was not, so GTK can't be used." warn2 "Perhaps some of the development packages are not installed?" if test "$have_gtk" = yes ; then v="$ac_gtk_version_string" warn2 "GTK $v is also installed, so it will be used instead." warn2 "Please read the above output and the \`config.log' file" warn2 "for more details." fi fi motif_warn2() { warn2 'Though the Motif front-end to xscreensaver is still' warn2 'maintained, it is no longer being updated with new' warn2 'features: all new development on the xscreensaver-demo' warn2 'program is happening in the GTK version, and not in the' warn2 'Motif version. It is recommended that you build against' warn2 'GTK instead of Motif. See .' } if test "$have_motif" = no -a "$have_gtk" = no; then if test "$with_motif" = yes; then warnL "Neither the GTK nor Motif libraries were found; the" warn2 "\`xscreensaver-demo' program requires one of these." echo '' motif_warn2 else warnL "The GTK libraries do not seem to be available; the" warn2 "\`xscreensaver-demo' program requires them." # echo '' # warn2 'You can use Motif or Lesstif instead of GTK (use the' # warn2 "\`--with-motif' option) but that is NOT recommended." # motif_warn2 fi elif test "$with_motif_req" = yes -a "$have_motif" = no ; then warnL "Use of Motif was requested, but it wasn't found;" warn2 "Gtk will be used instead." elif test "$jurassic_gtk" = yes ; then pref_gtk=2.0 v="$ac_gtk_version_string" if test "$with_gtk_req" = yes -a "$ac_gtk_version" = "unknown" ; then warnL "Use of Gtk was requested, but its version number is unknown;" elif test "$with_gtk_req" = yes ; then warnL "Use of Gtk was requested, but it is version $v;" else warnL "Gtk was found on this system, but it is version $v;" fi warn2 "Gtk $pref_gtk or newer is required." elif test "$with_gtk_req" = yes -a "$have_gtk" = no ; then warnL "Use of Gtk was requested, but it wasn't found." fi if test "$have_gtk" = yes -a "$have_gdk_pixbuf" = no ; then warn "GTK is being used, but the GDK-Pixbuf library and/or" warn2 "headers were not found. That can't be good. Please" warn2 "install the GDK-Pixbuf development kit and re-configure." fi if test "$have_motif" = yes -a "$have_lesstif" = yes ; then preferred_lesstif=0.92 if test "$lesstif_version" = unknown; then warnL "Unable to determine the LessTif version number!" warn2 "Make sure you are using version $preferred_lesstif or newer." warn2 "See ." elif test \! $lesstif_version -gt 82; then warnL "LessTif version $lesstif_version_string is being used." warn2 "LessTif versions 0.82 and earlier are too buggy to" warn2 "use with XScreenSaver; it is strongly recommended" warn2 "that you upgrade to at least version $preferred_lesstif!" warn2 "See ." fi fi if test "$have_motif" = yes -a "$have_gtk" = no ; then warn 'Motif is being used, and GTK is not.' echo '' motif_warn2 fi if test "$with_xpm_req" = yes -a "$have_xpm" = no; then warnL 'Use of XPM was requested, but it was not found.' fi if test "$with_gdk_pixbuf_req" = yes -a "$have_gdk_pixbuf" = no; then warnL 'Use of GDK-Pixbuf was requested, but it was not found.' fi if test "$have_gdk_pixbuf" = no -o "$gdk_pixbuf_halfassed" = yes || \ test "$have_gdk_pixbuf" = no -a "$have_xpm" = no ; then if test "$with_gdk_pixbuf_req" = yes ; then true elif test "$with_gdk_pixbuf_req" = no ; then warnL 'The GDK-Pixbuf library is not being used.' else warnL 'The GDK-Pixbuf library was not found.' fi if test "$with_xpm_req" = yes -o "$have_xpm" = yes ; then true elif test "$with_xpm_req" = no ; then warnL 'The XPM library is not being used.' else warnL 'The XPM library was not found.' fi if test "$have_gdk_pixbuf" = no -a "$have_xpm" = yes ; then warn2 'The XPM library is being used instead.' fi if test "$gdk_pixbuf_halfassed" = yes ; then echo '' warn2 'More specifically, we found the headers, but not the' warn2 'libraries; so either GDK-Pixbuf is half-installed on this' warn2 "system, or something else went wrong. The \`config.log'" warn2 'file might contain some clues.' fi echo '' warn2 'Some of the demos will not use images as much as they could.' warn2 'You should consider installing GDK-Pixbuf and re-running' warn2 'configure. (GDK-Pixbuf is recommended over XPM, as it' warn2 'provides support for more image formats.)' fi if test "$have_jpeg" = no ; then if test "$with_jpeg_req" = yes ; then warnL 'Use of libjpeg was requested, but it was not found.' elif test "$with_jpeg_req" = no ; then noteL 'The JPEG library is not being used.' else noteL 'The JPEG library was not found.' fi if test "$jpeg_halfassed" = yes ; then echo '' warn2 'More specifically, we found the headers, but not the' warn2 'library; so either JPEG is half-installed on this' warn2 "system, or something else went wrong. The \`config.log'" warn2 'file might contain some clues.' echo '' fi if test "$have_gdk_pixbuf" = no ; then warn2 "This means that it won't be possible for the image-manipulating" warn2 "display modes to load files from disk; and it also means that" warn2 "the \`webcollage' program will be much slower." else warn2 "This means the \`webcollage' program will be much slower." fi fi if test "$have_xft" = no ; then if test "$with_xft_req" = yes ; then warnL "Use of libXft was requested, but it was not found." elif test "$with_xft_req" = no ; then noteL 'The Xft library is not being used.' else noteL "The Xft library was not found." fi if test "$xft_halfassed" = yes ; then echo '' warn2 'More specifically, we found the headers, but not the' warn2 'libraries; so either Xft is half-installed on this' warn2 "system, or something else went wrong. The \`config.log'" warn2 'file might contain some clues.' echo '' fi warn2 "This means that fonts won't be anti-aliased." fi if test "$have_gl" = yes -a "$ac_have_mesa_gl" = yes ; then preferred_mesagl=3.4 mgv="$ac_mesagl_version_string" pgl="$preferred_mesagl" if test "$ac_mesagl_version" = unknown; then true # warnL "Unable to determine the MesaGL version number!" # warn2 "Make sure you are using version $preferred_mesagl or newer." elif test \! "$ac_mesagl_version" -gt 2006; then warnL "MesaGL version number is $mgv --" warn2 "MesaGL 2.6 and earlier have a security bug. It is strongly" warn2 "recommended that you upgrade to at least version $preferred_mesagl." elif test \! "$ac_mesagl_version" -gt 3003; then warnL "MesaGL version number is $mgv --" warn2 "MesaGL 3.3 and earlier have some bugs; it is recommended" warn2 "that you upgrade to $pgl or newer." fi fi if test "$have_gl" = no ; then if test "$with_gl_req" = yes ; then warnL 'Use of GL was requested, but it was not found.' elif test "$with_gl_req" = no ; then noteL 'The OpenGL 3D library is not being used.' else noteL 'The OpenGL 3D library was not found.' fi if test "$gl_halfassed" = yes ; then echo '' warn2 'More specifically, we found the headers, but not the' warn2 'libraries; so either GL is half-installed on this' warn2 "system, or something else went wrong. The \`config.log'" warn2 'file might contain some clues.' fi echo '' warn2 'Those demos which use 3D will not be built or installed.' warn2 'You might want to consider installing OpenGL and' warn2 're-running configure.' fi if test "$have_gl" = yes -a "$have_gle" = no ; then # nobody cares about this; don't print the warning unless it was # requested and not found, or halfway-found. if test "$with_gle_req" = yes -o "$gle_halfassed" = yes ; then if test "$with_gle_req" = yes ; then noteL 'Use of the GLE (GL Extrusion) library was requested, but' warn2 'it was not found (though the OpenGL library was found, and' warn2 'is being used.)' elif test "$with_gle_req" = no ; then noteL 'The OpenGL Library is being used, but the GLE (GL Extrusion)' warn2 'library is not.' else noteL 'The OpenGL Library was found, but the GLE (GL Extrusion)' warn2 'library was not.' fi if test "$gle_halfassed" = yes ; then echo '' warn2 'More specifically, we found the headers, but not the' warn2 'libraries; so either GLE is half-installed on this' warn2 "system, or something else went wrong. The \`config.log'" warn2 'file might contain some clues.' fi echo '' warn2 'Some of the OpenGL (3D) demos (those that depend on GLE)' warn2 'will not be built or installed. You might want to consider' warn2 'installing GLE and re-running configure. You can find the' warn2 'GLE library at ' fi fi if test "$with_readdisplay_req" = yes -a "$have_readdisplay" = no ; then warn 'Use of XReadDisplay was requested, but it was not found.' fi if test "$with_kerberos_req" = yes -a "$have_kerberos" = no ; then warn 'Use of Kerberos was requested, but it was not found.' fi if test "$with_pam_req" = yes -a "$have_pam" = no ; then warn 'Use of PAM was requested, but it was not found.' fi if test "$with_shadow_req" = yes -a "$have_shadow" = no ; then warn 'Use of shadow passwords was requested, but they were not found.' fi if test "$ac_macosx" = yes ; then if test "$enable_locking" = yes ; then warn "You have specified --enable-locking on MacOS X." warn2 "THIS DOES NOT WORK! Don't do this!" fi fi # You are in a twisty maze of namespaces and syntaxes, all alike. # Fuck the skull of Unix. # bindir=`eval eval eval eval eval eval eval echo $bindir` HACKDIR=`eval eval eval eval eval eval eval echo $HACKDIR` HACK_CONF_DIR=`eval eval eval eval eval eval eval echo $HACK_CONF_DIR` # canonicalize slashes. bindir=`echo "${bindir}" | sed 's@/$@@;s@//*@/@g'` HACKDIR=`echo "${HACKDIR}" | sed 's@/$@@;s@//*@/@g'` HACK_CONF_DIR=`echo "${HACK_CONF_DIR}" | sed 's@/$@@;s@//*@/@g'` # Sanity check the hackdir for bad_choice in xscreensaver xscreensaver-demo xscreensaver-command ; do if test "${HACKDIR}" = "${bindir}/${bad_choice}" ; then echo "" as_fn_error $? "\"--with-hackdir=${bindir}/${bad_choice}\" won't work. There will be an executable installed with that name, so that can't be the name of a directory as well. Please re-configure with a different directory name." "$LINENO" 5 fi done do_dir_warning=no # Now let's warn if there's a previous RPM version already installed. # But don't bother with this test if we are currently *building* an RPM. if test -z "$RPM_PACKAGE_VERSION" ; then rpmnames="xscreensaver xscreensaver-base xscreensaver-extras" # M4 sucks!! rpmv=`(rpm -qv $rpmnames) 2>/dev/null | \ sed -n 's/^[-a-z]*-\([0-9][0-9]*[.][0-9][0-9a-z]*\)-.*$/\1/p' | \ head -1` if test \! -z "$rpmv" ; then rpmbdir=`rpm -ql $rpmnames | sed -n 's@^\(.*\)/xscreensaver-demo$@\1@p'` rpmhdir=`rpm -ql $rpmnames | sed -n 's@^\(.*\)/popsquares$@\1@p'` warning=no warnL "There is already an installed RPM of xscreensaver $rpmv" warn2 'on this system. You might want to remove it ("rpm -ve")' warn2 'before running "make install" in this directory.' echo "" warn2 "Alternately, you could build this version of xscreensaver" warn2 'as an RPM, and then install that. An "xscreensaver.spec"' warn2 'file is included. Try "rpmbuild -v -ba xscreensaver.spec".' warn2 "See the RPM documentation for more info." echo "" if test "$rpmbdir" = "$rpmhdir" ; then warn2 "The RPM version was installed in $rpmbdir/." do_dir_warning=yes else warn2 "The RPM version was installed in $rpmbdir/," warn2 "with demos in $rpmhdir/." fi fi fi # Also warn if there's a Debian package installed. # debnames="xscreensaver xscreensaver-data xscreensaver-data-extra" debv='' for dpkg in $debnames ; do if test -z "$debv"; then debv=`dpkg -s $dpkg 2>/dev/null | sed -n 's/^Version: \(.*\)$/\1/p'` fi done if test \! -z "$debv" ; then debbdir=`dpkg -L $debnames 2>/dev/null | \ sed -n 's@^\(.*/bin/\)xscreensaver$@\1@p'` debhdir=`dpkg -L $debnames 2>/dev/null | \ sed -n 's@^\(.*/\)popsquares$@\1@p'` if test -z "$debbdir" ; then debbdir='???'; fi if test -z "$debhdir" ; then debhdir='???'; fi warning=no warnL "There is already an installed dpkg of xscreensaver" warn2 "version \"$debv\" on this system." echo "" warn2 "The dpkg was installed in $debbdir," warn2 "with demos in $debhdir." fi if test "${bindir}" = "${HACKDIR}" ; then do_dir_warning=yes fi if test "$do_dir_warning" = yes; then echo "" echo "$warnsep" echo "" echo ' When you run "make install", the "xscreensaver",' echo ' "xscreensaver-demo", and "xscreensaver-command" executables' echo " will be installed in ${bindir}/." echo "" echo " The various graphics demos (200+ different executables) will" echo " be installed in ${HACKDIR}/." echo "" echo " If you would prefer the demos to be installed elsewhere," echo " you should re-run configure with the --with-hackdir=DIR" echo " option. For more information, run \`./configure --help'." warning=yes fi if test "$warning" != no; then echo '' ; echo "$warnsep" ; echo '' fi if test "$do_dir_warning" = no; then if test "$warning" = no; then echo '' fi echo "User programs will be installed in ${bindir}/" echo "Screen savers will be installed in ${HACKDIR}/" echo "Configuration dialogs will be installed in ${HACK_CONF_DIR}/" echo "System-wide default settings will be installed in ${APPDEFAULTS}/" echo '' fi xscreensaver-5.34/configure.in000644 000767 000767 00000451245 12612475755 016223 0ustar00jwzjwz000000 000000 # configure.in --- xscreensaver, Copyright (c) 1997-2014 Jamie Zawinski. # AC_PREREQ(2.52) AC_INIT(driver/subprocs.c) AC_CONFIG_HEADERS([config.h]) echo "current directory: `pwd`" echo "command line was: $0 $@" ############################################################################### # # Autoheader stuff # ############################################################################### AH_TOP([ /* config.h.in --- xscreensaver, Copyright (c) 1991-2014 Jamie Zawinski. * * The best way to set these parameters is by running the included `configure' * script. That examines your system, and generates `config.h' from * `config.h.in'. * * If something goes very wrong, you can edit `config.h' directly, but beware * that your changes will be lost if you ever run `configure' again. */ ]) AH_TEMPLATE([HAVE_READ_DISPLAY_EXTENSION], [Define this if you have the XReadDisplay extension (I think this is an SGI-only thing; it's in .) A few of the screenhacks will take advantage of this if it's available.]) AH_TEMPLATE([HAVE_XHPDISABLERESET], [Define this if you have the XHPDisableReset function (an HP only thing which allows the Ctrl-Sh-Reset key sequence to be temporarily disabled.)]) # This only ever existed in X11R4 and X11R5. #AH_TEMPLATE([HAVE_XIDLE_EXTENSION], # [Define this if you have the XIDLE extension installed. If you # have the XIDLE extension, this is recommended. (You have this # extension if the file /usr/include/X11/extensions/xidle.h # exists.) Turning on this flag lets XScreenSaver work better with # servers which support this extension; but it will still work # with servers which do not suport it, so it's a good idea to # compile in support for it if you can.]) # Using this extension will crash your X server and make fading not work. #AH_TEMPLATE([HAVE_MIT_SAVER_EXTENSION], # [Define this if you have the MIT-SCREEN-SAVER extension # installed. See the caveats about this extension, above. # (It's available if /usr/include/X11/extensions/scrnsaver.h # exists.)]) # This only ever existed on SGI hardware. #AH_TEMPLATE([HAVE_SGI_SAVER_EXTENSION], # [Define this if you have the SGI SCREEN_SAVER extension. This is # standard on Irix systems, and not available elsewhere.]) # This only ever existed on SGI hardware. #AH_TEMPLATE([HAVE_SGI_VC_EXTENSION], # [Define this if you have the SGI-VIDEO-CONTROL extension. This # is standard on Irix systems, and not available elsewhere.]) AH_TEMPLATE([HAVE_DPMS_EXTENSION], [Define this if you have the XDPMS extension. This is standard on sufficiently-recent XFree86 systems, and possibly elsewhere. (It's available if the file /usr/include/X11/extensions/dpms.h exists.)]) AH_TEMPLATE([HAVE_XF86VMODE], [Define this if you have the functions XF86VidModeGetModeLine() and XF86VidModeGetViewPort(), in support of virtual desktops where the X server's root window is bigger than the actual screen. This is an XFree86 thing, and probably doesn't exist elsewhere. (It's available if the file /usr/include/X11/extensions/xf86vmode.h exists.)]) AH_TEMPLATE([HAVE_XF86VMODE_GAMMA], [Define this if you have the functions XF86VidModeGetGamma() and XF86VidModeSetGamma(), which allow clients to change the gamma response of the monitor. This is an XFree86 4.0.x thing, and probably doesn't exist elsewhere. (It's available if the file /usr/include/X11/extensions/xf86vmode.h exists and has stuff about gamma in it.)]) AH_TEMPLATE([HAVE_XF86VMODE_GAMMA_RAMP], [Define this if you have the functions XF86VidModeGetGammaRamp() and XF86VidModeSetGammaRamp(), which provide finer-grained control than XF86VidMode[GS]etGamma(). These appeared in XFree86 4.1.0.]) AH_TEMPLATE([HAVE_XINERAMA], [Define this if you have the Xinerama extension. This is standard on sufficiently-recent XFree86 systems, and possibly elsewhere. (It's available if the file /usr/include/X11/extensions/Xinerama.h exists.)]) AH_TEMPLATE([HAVE_XINPUT], [Define this if you have the Xinput extension. This is standard since X11R5, and is thus almost everywhere. (It's available if the file /usr/include/X11/extensions/XInput.h exists.)]) AH_TEMPLATE([HAVE_XF86MISCSETGRABKEYSSTATE], [Define this if you have the XF86MiscSetGrabKeysState function (which allows the Ctrl-Alt-KP_star and Ctrl-Alt-KP_slash key sequences to be temporarily disabled. Sadly, it doesn't affect Ctrl-Alt-BS or Ctrl-Alt-F1.)]) AH_TEMPLATE([HAVE_RANDR], [Define this if you have the Resize and Rotate extension. This is standard on sufficiently-recent XFree86 systems, and possibly elsewhere. (It's available if the file /usr/include/X11/extensions/Xrandr.h exists.)]) AH_TEMPLATE([HAVE_RANDR_12], [Define this if the RANDR library is version 1.2 or newer.]) AH_TEMPLATE([HAVE_PROC_INTERRUPTS], [Define this if you have a Linux-like /proc/interrupts file which can be examined to determine when keyboard activity has occurred.]) AH_TEMPLATE([HAVE_MOTIF],[Define this if you have Motif.]) AH_TEMPLATE([HAVE_XMCOMBOBOX], [Define this if you have the XmComboBox Motif widget (Motif 2.0.)]) AH_TEMPLATE([HAVE_GTK],[Define this if you have Gtk (any version.)]) AH_TEMPLATE([HAVE_GTK2],[Define this if you have Gtk 2.x.]) AH_TEMPLATE([HAVE_CRAPPLET], [Define this if you have Gnome and want to build support for the xscreensaver control panel in the Gnome Control Center (gnomecc). (This is needed only with Gtk 1.x.)]) AH_TEMPLATE([HAVE_CRAPPLET_IMMEDIATE], [Define this if HAVE_CRAPPLET is defined, and the function capplet_widget_changes_are_immediate() is available.]) AH_TEMPLATE([HAVE_XML],[Define this if you have the XML library.]) AH_TEMPLATE([HAVE_OLD_XML_HEADERS], [Define this if you have the XML library headers in their old, non-namespaced location (you lack the gnome-xml/libxml symlink)]) AH_TEMPLATE([HAVE_XPM], [Define this if you have the XPM library installed. Some of the demos can make use of this if it is available.]) 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 is available.]) AH_TEMPLATE([HAVE_XMU], [Define this if you have the Xmu library. This is standard part of X, and if your vendor doesn't ship it, you should report that as a bug.]) AH_TEMPLATE([HAVE_XUTF8DRAWSTRING], [Define this if you have the function Xutf8DrawString().]) AH_TEMPLATE([HAVE_XFT], [Define this if you have libXft2.]) AH_TEMPLATE([HAVE_GL], [Define this if you have OpenGL. Some of the demos require it, so if you don't have it, then those particular demos won't be built. (This won't affect the screen saver as a whole.)]) AH_TEMPLATE([HAVE_MESA_GL], [Define this if you have OpenGL, but it's the MesaGL variant. (The libraries have different names.) (HAVE_GL should be defined too.)]) AH_TEMPLATE([HAVE_GLBINDTEXTURE], [Define this if your version of OpenGL has the glBindTexture() routine. This is the case for OpenGL 1.1, but not for OpenGL 1.0.]) AH_TEMPLATE([HAVE_GLE], [Define this if you have the -lgle and -lmatrix libraries (GL extrusion.)]) AH_TEMPLATE([HAVE_GLE3],[Define this if you have the -lgle from GLE version 3]) AH_TEMPLATE([HAVE_JWZGLES],[Define this to target the OpenGL ES 1.x API instead of OpenGL 1.3.]) AH_TEMPLATE([HAVE_XSHM_EXTENSION], [Define this if you have the X Shared Memory Extension.]) AH_TEMPLATE([HAVE_DOUBLE_BUFFER_EXTENSION], [Define this if you have the X Double Buffer Extension.]) AH_TEMPLATE([FORTUNE_PROGRAM], [Some screenhacks like to run an external program to generate random pieces of text; set this to the one you like. Note that this is just the default; X resources can be used to override it.]) AH_TEMPLATE([PASSWD_HELPER_PROGRAM], [Set the name of the password helper program, if any]) AH_TEMPLATE([NO_LOCKING], [Define this to remove the option of locking the screen at all.]) AH_TEMPLATE([ALLOW_ROOT_PASSWD], [Define this to allow the root password to unlock the screen.]) AH_TEMPLATE([HAVE_KERBEROS], [Define this if you want to use Kerberos authentication to lock/unlock the screen instead of your local password. This currently uses Kerberos V4, but a V5 server with V4 compatibility will work. WARNING: DO NOT USE AFS string-to-key passwords with this option. This option currently *only* works with standard Kerberos des_string_to_key. If your password is an AFS password and not a kerberos password, it will not authenticate properly. See the comments in driver/kpasswd.c for more information if you need it.]) AH_TEMPLATE([HAVE_KERBEROS5], [Define this if you have Kerberos 5, meaning we need to use the Kerberos 4 compatibility layer.]) AH_TEMPLATE([HAVE_PAM], [Define this if you want to use PAM (Pluggable Authentication Modules) to lock/unlock the screen, instead of standard /etc/passwd authentication.]) AH_TEMPLATE([PAM_SERVICE_NAME], [If PAM is being used, this is the name of the PAM service that xscreensaver will authenticate as. The default is "xscreensaver", which means that the PAM library will look for an "xscreensaver" line in /etc/pam.conf, or (on recent Linux systems) will look for a file called /etc/pam.d/xscreensaver. Some systems might already have a PAM installation that is configured for xlock, so setting this to "xlock" would also work in that case.]) AH_TEMPLATE([HAVE_PAM_FAIL_DELAY], [Define this if you have pam_fail_delay function. see driver/passwd-pam.c.]) AH_TEMPLATE([PAM_CHECK_ACCOUNT_TYPE], [Whether PAM should check the result of account modules when authenticating. Only do this if you have account configured properly on your system.]) AH_TEMPLATE([PAM_STRERROR_TWO_ARGS], [Define if you have PAM and pam_strerror() requires two arguments.]) AH_TEMPLATE([HAVE_SIGTIMEDWAIT], [Define to 1 if you have the `sigtimedwait' function.]) AH_TEMPLATE([HAVE_SHADOW_PASSWD], [Define this if your system uses 'shadow' passwords, that is, the passwords live in /etc/shadow instead of /etc/passwd, and one reads them with getspnam() instead of getpwnam(). (Note that SCO systems do some random other thing; others might as well. See the ifdefs in driver/passwd-pwent.c if you're having trouble related to reading passwords.)]) AH_TEMPLATE([HAVE_ENHANCED_PASSWD], [Define this if your system is Digital or SCO Unix with so-called ``Enhanced Security'', that is, the passwords live in /tcb/files/auth// instead of in /etc/passwd, and one reads them with getprpwnam() instead of getpwnam().]) AH_TEMPLATE([HAVE_ADJUNCT_PASSWD], [Define this if your system is Solaris with ``adjunct'' passwords (this is the version where one gets at the passwords with getpwanam() instead of getpwnam().) I haven't tested this one, let me know if it works.]) AH_TEMPLATE([HAVE_HPUX_PASSWD], [Define this if you are running HPUX with so-called ``Secure Passwords'' (if you have /usr/include/hpsecurity.h, you probably have this.) I haven't tested this one, let me know if it works.]) AH_TEMPLATE([HAVE_SYSLOG], [Define this if you the openlog(), syslog(), and closelog() functions. This is used for logging failed login attempts.]) AH_TEMPLATE([HAVE_ICMP], [Define this if you do pings with a `struct icmp' and an `icmp_id' slot.]) AH_TEMPLATE([HAVE_ICMPHDR], [Define this if you do pings with a `struct icmphdr' and an `un.echo.id' slot.]) AH_TEMPLATE([HAVE_GETIFADDRS], [Define this if you have the getifaddrs() function.]) AH_TEMPLATE([HAVE_FORKPTY], [Define this if you have the 'forkpty' function: This allows 'phosphor' and 'apple2' to run curses-based programs, or be used as terminal windows.]) AH_TEMPLATE([HAVE_GETTIMEOFDAY], [Define this if you have the gettimeofday function.]) AH_TEMPLATE([GETTIMEOFDAY_TWO_ARGS], [Define this if gettimeofday() takes two arguments.]) AH_TEMPLATE([XPointer], [Define this to void* if you're using X11R4 or earlier.]) AH_TEMPLATE([HAVE_PTHREAD], [Define this if your system supports POSIX threads.]) AH_TEMPLATE([HAVE_RECORD_ANIM], [Define this to enable recording of videos.]) # After checking to see that --srcdir is correct (which AC_INIT does) # check for some random other files that come later in the tar file, # to make sure everything is here. # for d in driver utils hacks hacks/glx ; do f=$srcdir/$d/Makefile.in if test \! -r $f ; then echo "" echo "ERROR: The package is incomplete: $f does not exist." echo " This probably means that your download was truncated." echo "" exit 1 fi done ############################################################################### # # Query AX_PTHREAD, and figure out which compiler gets used. # ############################################################################### AC_DEFUN([AC_PROG_CC_PTHREAD], [have_pthread=no with_pthread_req=unspecified # AX_PTHREAD is from the GNU Autoconf Archive. # https://savannah.gnu.org/projects/autoconf-archive/ m4_include(ax_pthread.m4) # This affects CC, LIBS, and CFLAGS, instead of defining new variables. AC_ARG_WITH([pthread], [ --with-pthread Enables POSIX threads, for SMP support.], [with_pthread="$withval"; with_pthread_req="$withval"], [with_pthread=yes]) if test "$with_pthread" = yes; then # AX_PTHREAD might want a different compiler. AX_PTHREAD( [if test "$CC" = "$PTHREAD_CC" -o -z "$ac_original_cc"; then have_pthread=yes else ac_prog_cc_no_pthread=yes fi ]) if test "$have_pthread" = yes; then AC_DEFINE([HAVE_PTHREAD]) CC=$PTHREAD_CC fi fi ]) ############################################################################### # # Function to figure out how to run the compiler. # ############################################################################### AC_DEFUN([AC_PROG_CC_ANSI], [AC_REQUIRE([AC_PROG_CC]) if test -z "$GCC"; then # not using GCC AC_MSG_CHECKING(how to request ANSI compilation) case "$host" in *-hpux* ) AC_MSG_RESULT(HPUX: adding -Ae) CC="$CC -Ae" ;; *-aix* ) AC_MSG_RESULT(AIX: adding -qlanglvl=ansi -qhalt=e) CC="$CC -qlanglvl=ansi -qhalt=e" ;; *-dec-* ) AC_MSG_RESULT(DEC: adding -std1 -ieee) CC="$CC -std1" ;; *) AC_MSG_RESULT(no idea) ;; esac else # using GCC case "$host" in *-solaris*) AC_MSG_RESULT(Solaris: adding -D__EXTENSIONS__) CC="$CC -D__EXTENSIONS__" ;; esac fi OBJCC="$CC" AC_MSG_CHECKING([whether the compiler works on ANSI C]) AC_TRY_RUN([ main(int ac, char **av) { return 0; } ], AC_MSG_RESULT(yes), AC_MSG_RESULT(no) AC_MSG_ERROR(Couldn't build even a trivial ANSI C program: check CC.), AC_MSG_ERROR(Couldn't build even a trivial ANSI C program: check CC.)) if test -n "$GCC"; then AC_MSG_RESULT(Turning on gcc compiler warnings.) CC="$CC -pedantic -Wall -Wstrict-prototypes -Wnested-externs -Wmissing-prototypes" OBJCC="$OBJCC -Wall" # As of gcc 3.4, we have "-Wdeclaration-after-statement" # and so perhaps now we can do without -pedantic? else case "$host" in *-irix5* |*-irix6.[0-3]* ) AC_MSG_RESULT(Turning on SGI compiler warnings.) CC="$CC -fullwarn -use_readonly_const -rdata_shared -g3" ;; # *-dec-osf* ) # if test -z "$GCC"; then # AC_MSG_RESULT(Turning on DEC C compiler warnings.) # CC="$CC -migrate -w0 -verbose -warnprotos" # fi # ;; esac fi ]) ############################################################################### # # Check for availability of various gcc command-line options. # ############################################################################### AC_DEFUN([AC_CHECK_GCC_ARG], [if test -n "$GCC"; then AC_CACHE_CHECK([whether gcc accepts [$2]], ac_cv_gcc_accepts_[$1], [rm -rf conftest.$ac_ext touch conftest.$ac_ext if ( ( gcc -c [$2] conftest.$ac_ext -o/dev/null >/dev/null ) 2>&1 | \ grep unrecognized >/dev/null ); then ac_cv_gcc_accepts_[$1]=no else ac_cv_gcc_accepts_[$1]=yes CC="$CC [$2]" fi]) ac_gcc_accepts_[$1]="$ac_cv_gcc_accepts_[$1]" fi ]) AC_DEFUN([AC_NO_LONG_STRING_WARNINGS], [AC_CHECK_GCC_ARG(no_overlength, -Wno-overlength-strings)]) AC_DEFUN([AC_NO_MISPLACED_DECLARATIONS], [AC_CHECK_GCC_ARG(no_decl_after, -Wdeclaration-after-statement)]) # Need to disable Objective C extensions in ANSI C on MacOS X to work # around an Apple-specific gcc bug. # AC_DEFUN([AC_NO_OBJECTIVE_C], [AC_CHECK_GCC_ARG(no_cpp_precomp, -no-cpp-precomp)]) ############################################################################### # # Function to figure out how to disable // comments in ANSI C code. # # (With recent gcc, this is done with "-std=c89". With older gcc, this # is done by passing "-lang-c89" to cpp, by passing "-Wp,-lang-c89" to # gcc. Old gcc doesn't support -std, and new gcc doesn't support -lang. # so much for compatibility!) # # UPDATE: apparently there is NO WAY to tell gcc 3.2.2 to require that # declarations preceed statements, without resorting to "-pedantic". # This means that there is no way to get gcc3 to issue warnings that # ensure that your code complies with the ANSI/ISO C89 standard, without # also drowning in totally useless warnings. Thank you master may I # have another. # # So, I give up, let's just use -pedantic. # ############################################################################### AC_DEFUN([AC_GCC_ACCEPTS_STD], [ case "$host" in *-darwin* ) # Fucking Apple let // comments sneak into OpenGL headers, so # we *must* allow // comments when compiling on Mac OS 10.6! FUCK! ;; *) AC_CHECK_GCC_ARG(std, -std=c89) ;; esac ]) AC_DEFUN([AC_NO_CPLUSPLUS_COMMENTS_IN_C_CODE], [if test -n "$GCC"; then AC_GCC_ACCEPTS_STD AC_MSG_RESULT(Disabling C++ comments in ANSI C code.) # # The reason that // comments are banned from xscreensaver is that gcc is # basically the only compiler in the world that supports them in C code. # All other vendors support them only in their C++ compilers, not in their # ANSI C compilers. This means that it's a portability problem: every time # these comments have snuck into the xscreensaver source code, I've gotten # complaints about it the next day. So we turn off support for them in gcc # as well to prevent them from accidentially slipping in. # if test "$ac_gcc_accepts_std" = yes ; then # # -std=c89 defines __STRICT_ANSI__, which we don't want. # (That appears to be the only additional preprocessor symbol # it defines, in addition to the syntax changes it makes.) # # -std=gnu89 is no good, because // comments were a GNU extension # before they were in the ANSI C 99 spec... (gcc 2.96 permits // # with -std=gnu89 but not with -std=c89.) # # $CC already contains "-std=c89" via AC_GCC_ACCEPTS_STD CC="$CC -U__STRICT_ANSI__" # else # # The old way: # CC="$CC -Wp,-lang-c89" fi fi ]) ############################################################################### # # Function to figure out how to create directory trees. # ############################################################################### AC_DEFUN([AC_PROG_INSTALL_DIRS], [AC_CACHE_CHECK([whether "\${INSTALL} -d" creates intermediate directories], ac_cv_install_d_creates_dirs, [ac_cv_install_d_creates_dirs=no rm -rf conftestdir if mkdir conftestdir; then cd conftestdir 2>/dev/null ${INSTALL} -d `pwd`/dir1/dir2 >/dev/null 2>&1 if test -d dir1/dir2/. ; then ac_cv_install_d_creates_dirs=yes fi cd .. 2>/dev/null rm -rf conftestdir fi ]) if test "$ac_cv_install_d_creates_dirs" = no ; then AC_CACHE_CHECK([whether "mkdir -p" creates intermediate directories], ac_cv_mkdir_p_creates_dirs, [ac_cv_mkdir_p_creates_dirs=no rm -rf conftestdir if mkdir conftestdir; then cd conftestdir 2>/dev/null mkdir -p dir1/dir2 >/dev/null 2>&1 if test -d dir1/dir2/. ; then ac_cv_mkdir_p_creates_dirs=yes fi cd .. 2>/dev/null rm -rf conftestdir fi ]) fi if test "$ac_cv_install_d_creates_dirs" = yes ; then INSTALL_DIRS='${INSTALL} -d' elif test "$ac_cv_mkdir_p_creates_dirs" = yes ; then INSTALL_DIRS='mkdir -p' else # any other ideas? INSTALL_DIRS='${INSTALL} -d' fi ]) ############################################################################### # # Function to check whether gettimeofday() exists, and how to call it. # This may define HAVE_GETTIMEOFDAY and GETTIMEOFDAY_TWO_ARGS. # ############################################################################### AC_DEFUN([AC_GETTIMEOFDAY_ARGS], [AC_MSG_CHECKING(how to call gettimeofday) AC_CACHE_VAL(ac_cv_gettimeofday_args, [AC_TRY_COMPILE([#include #include ], [struct timeval tv; struct timezone tzp; gettimeofday(&tv, &tzp);], [ac_gettimeofday_args=2], [AC_TRY_COMPILE([#include #include ], [struct timeval tv; gettimeofday(&tv);], [ac_gettimeofday_args=1], [ac_gettimeofday_args=0])]) ac_cv_gettimeofday_args=$ac_gettimeofday_args]) ac_gettimeofday_args=$ac_cv_gettimeofday_args if test "$ac_gettimeofday_args" = 1 ; then AC_DEFINE(HAVE_GETTIMEOFDAY) AC_MSG_RESULT(one argument) elif test "$ac_gettimeofday_args" = 2 ; then AC_DEFINE(HAVE_GETTIMEOFDAY) AC_DEFINE(GETTIMEOFDAY_TWO_ARGS) AC_MSG_RESULT(two arguments) else AC_MSG_RESULT(unknown) fi ]) ############################################################################### # # Function to find perl5 (defines PERL and PERL_VERSION.) # ############################################################################### # M4 sucks!! perl sucks too!! changequote(X,Y) perl_version_cmd='print $]' changequote([,]) AC_DEFUN([AC_PROG_PERL], [AC_PATH_PROGS(PERL, [perl5 perl],,) if test -z "$PERL" ; then PERL_VERSION=0 else AC_CACHE_CHECK([perl version], ac_cv_perl_version, [ac_cv_perl_version=`$PERL -e "$perl_version_cmd"`]) PERL_VERSION=$ac_cv_perl_version fi ]) ############################################################################### # # Function to demand "bc". Losers. # ############################################################################### AC_DEFUN([AC_DEMAND_BC], [ac_bc_result=`echo 6+9 | bc 2>/dev/null` AC_MSG_CHECKING([for bc]) if test "$ac_bc_result" = "15" ; then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) echo '' AC_MSG_ERROR([Your system doesn't have \"bc\", which has been a standard part of Unix since the 1970s. Come back when your vendor has grown a clue.]) fi ]) ############################################################################### # # Functions to check how to do ICMP PING requests. # ############################################################################### AC_DEFUN([AC_CHECK_ICMP], [AC_CACHE_CHECK([for struct icmp], ac_cv_have_icmp, [AC_TRY_COMPILE([#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include ], [struct icmp i; struct sockaddr s; struct sockaddr_in si; struct ip ip; i.icmp_type = ICMP_ECHO; i.icmp_code = 0; i.icmp_cksum = 0; i.icmp_id = 0; i.icmp_seq = 0; si.sin_family = AF_INET; #if defined(__DECC) || defined(_IP_VHL) ip.ip_vhl = 0; #else ip.ip_hl = 0; #endif ], [ac_cv_have_icmp=yes], [ac_cv_have_icmp=no])]) if test "$ac_cv_have_icmp" = yes ; then AC_DEFINE(HAVE_ICMP) fi]) AC_DEFUN([AC_CHECK_ICMPHDR], [AC_CACHE_CHECK([for struct icmphdr], ac_cv_have_icmphdr, [AC_TRY_COMPILE([#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include ], [struct icmphdr i; struct sockaddr s; struct sockaddr_in si; struct ip ip; i.type = ICMP_ECHO; i.code = 0; i.checksum = 0; i.un.echo.id = 0; i.un.echo.sequence = 0; si.sin_family = AF_INET; ip.ip_hl = 0;], [ac_cv_have_icmphdr=yes], [ac_cv_have_icmphdr=no])]) if test "$ac_cv_have_icmphdr" = yes ; then AC_DEFINE(HAVE_ICMPHDR) fi]) ############################################################################### # # Functions to check for various X11 crap. # ############################################################################### # Try and find the app-defaults directory. # It sucks that autoconf doesn't do this already... # AC_DEFUN([AC_PATH_X_APP_DEFAULTS_XMKMF],[ rm -fr conftestdir if mkdir conftestdir; then cd conftestdir 2>/dev/null # Make sure to not put "make" in the Imakefile rules, since we grep it out. cat > Imakefile <<'EOF' acfindx: @echo 'ac_x_app_defaults="${XAPPLOADDIR}"' EOF if (xmkmf) >/dev/null 2>&1 && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering...", which'd confuse us. eval `${MAKE-make} acfindx 2>/dev/null | grep -v make` fi cd .. 2>/dev/null rm -fr conftestdir fi]) ############################################################################### # # Handle the --with-x-app-defaults option HERE # ############################################################################### AC_ARG_WITH(x-app-defaults,[], [ac_cv_x_app_defaults="$withval"], [eval ac_x_app_defaults="$withval"]) AC_DEFUN([AC_PATH_X_APP_DEFAULTS_DIRECT],[ # Look for the directory under a standard set of common directories. # Check X11 before X11Rn because it's often a symlink to the current release. for ac_dir in \ \ /usr/share/X11/app-defaults \ \ /usr/X11/lib/app-defaults \ /usr/X11R6/lib/app-defaults \ /usr/X11R6/lib/X11/app-defaults \ /usr/X11R5/lib/app-defaults \ /usr/X11R5/lib/X11/app-defaults \ /usr/X11R4/lib/app-defaults \ /usr/X11R4/lib/X11/app-defaults \ \ /usr/lib/X11/app-defaults \ /usr/lib/X11R6/app-defaults \ /usr/lib/X11R5/app-defaults \ /usr/lib/X11R4/app-defaults \ \ /etc/X11/app-defaults \ \ /usr/local/X11/lib/app-defaults \ /usr/local/X11R6/lib/app-defaults \ /usr/local/X11R5/lib/app-defaults \ /usr/local/X11R4/lib/app-defaults \ \ /usr/local/lib/X11/app-defaults \ /usr/local/lib/X11R6/app-defaults \ /usr/local/lib/X11R6/X11/app-defaults \ /usr/local/lib/X11R5/app-defaults \ /usr/local/lib/X11R5/X11/app-defaults \ /usr/local/lib/X11R4/app-defaults \ /usr/local/lib/X11R4/X11/app-defaults \ \ /usr/X386/lib/X11/app-defaults \ /usr/x386/lib/X11/app-defaults \ /usr/XFree86/lib/X11/app-defaults \ \ /usr/lib/X11/app-defaults \ /usr/local/lib/X11/app-defaults \ /usr/unsupported/lib/X11/app-defaults \ /usr/athena/lib/X11/app-defaults \ /usr/local/x11r5/lib/X11/app-defaults \ /usr/lpp/Xamples/lib/X11/app-defaults \ /lib/usr/lib/X11/app-defaults \ \ /usr/openwin/lib/app-defaults \ /usr/openwin/lib/X11/app-defaults \ /usr/openwin/share/lib/app-defaults \ /usr/openwin/share/lib/X11/app-defaults \ \ /X11R6/lib/app-defaults \ /X11R5/lib/app-defaults \ /X11R4/lib/app-defaults \ ; \ do if test -d "$ac_dir"; then ac_x_app_defaults=$ac_dir break fi done ]) AC_DEFUN([AC_PATH_X_APP_DEFAULTS], [AC_REQUIRE_CPP() AC_CACHE_CHECK([for X app-defaults directory], ac_cv_x_app_defaults, [# skip this, it's always wrong these days. # AC_PATH_X_APP_DEFAULTS_XMKMF if test x"$ac_x_app_defaults" = x; then true AC_PATH_X_APP_DEFAULTS_DIRECT fi if test x"$ac_x_app_defaults" = x; then /bin/echo -n 'fallback: ' ac_cv_x_app_defaults="/usr/lib/X11/app-defaults" else # Record where we found app-defaults for the cache. ac_cv_x_app_defaults="$ac_x_app_defaults" fi]) eval ac_x_app_defaults="$ac_cv_x_app_defaults"]) AC_DEFUN([AC_XPOINTER], [AC_CACHE_CHECK([for XPointer], ac_cv_xpointer, [AC_TRY_X_COMPILE([#include ], [XPointer foo = (XPointer) 0;], [ac_cv_xpointer=yes], [ac_cv_xpointer=no])]) if test "$ac_cv_xpointer" != yes; then AC_DEFINE(XPointer,[char*]) fi]) # Random special-cases for X on certain pathological OSes. # You know who you are. # AC_DEFUN([AC_X_RANDOM_PATHS], [case "$host" in *-hpux*) # The following arcana was gleaned from conversations with # Eric Schwartz : # # On HPUX 10.x, the parts of X that HP considers "standard" live in # /usr/{include,lib}/X11R6/. The parts that HP doesn't consider # "standard", notably, Xaw and Xmu, live in /usr/contrib/X11R6/. # Yet /usr/contrib/X11R6/ comes preinstalled on all HPUX systems. # Also, there are symlinks from /usr/include/ and /usr/lib/ into # /usr/{include,lib}/X11R6/, so that (if you don't use Xmu at all) # you don't need any -I or -L arguments. # # On HPUX 9.x, /usr/{include,lib}/X11R5/ and /usr/contrib/X11R5/ # are the same division as 10.x. However, there are no symlinks to # the X stuff from /usr/include/ and /usr/lib/, so -I and -L # arguments are always necessary. # # However, X11R6 was available on HPUX 9.x as a patch: if that # patch was installed, then all of X11R6 went in to # /usr/contrib/X11R6/ (there was no /usr/{include,lib}/X11R6/.) # # HPUX 8.x was the same as 9.x, but was X11R4 instead (I don't know # whether R5 was available as a patch; R6 undoubtedly was not.) # # So. We try and use the highest numbered pair of # /usr/{include,lib}/X11R?/ and /usr/contrib/X11R?/{include,lib}/ # that are available. We do not mix and match different versions # of X. # # Question I still don't know the answer to: (do you?) # # * On HPUX 9.x, where /usr/include/X11R5/ was standard, and # /usr/contrib/X11R6/ could be installed as a patch, what was in # that contrib directory? Did it contain so-called "standard" # X11R6, or did it include Xaw and Xmu as well? If the former, # where did one find Xaw and Xmu on 9.x R6 systems? Would this # be a situation where one had to reach into the R5 headers and # libs to find Xmu? That is, must both R6 and R5 directories # be on the -I and -L lists in that case? # for version in X11R6 X11R5 X11R4 ; do # if either pair of directories exists... if test -d /usr/include/$version || test -d /usr/contrib/$version/include then # if contrib exists, use it... if test -d /usr/contrib/$version/include ; then X_CFLAGS="$X_CFLAGS -I/usr/contrib/$version/include" X_LIBS="$X_LIBS -L/usr/contrib/$version/lib" fi # if the "standard" one exists, use it. if test -d /usr/include/$version ; then X_CFLAGS="$X_CFLAGS -I/usr/include/$version" X_LIBS="$X_LIBS -L/usr/lib/$version" fi # since at least one of the pair exists, go no farther. break fi done # Now find Motif. Thanks for not making xmkmf find this by # default, you losers. # if test -d /usr/include/Motif2.1 ; then X_CFLAGS="$X_CFLAGS -I/usr/include/Motif2.1" X_LIBS="$X_LIBS -L/usr/lib/Motif2.1" elif test -d /usr/include/Motif1.2 ; then X_CFLAGS="$X_CFLAGS -I/usr/include/Motif1.2" X_LIBS="$X_LIBS -L/usr/lib/Motif1.2" elif test -d /usr/include/Motif1.1 ; then X_CFLAGS="$X_CFLAGS -I/usr/include/Motif1.1" X_LIBS="$X_LIBS -L/usr/lib/Motif1.1" fi # Now let's check for the pseudo-standard locations for OpenGL and XPM. # if test -d /opt/graphics/OpenGL/include ; then # HP-UX 10.20 puts it here X_CFLAGS="-I/opt/graphics/OpenGL/include $X_CFLAGS" X_LIBS="-L/opt/graphics/OpenGL/lib $X_LIBS" elif test -d /opt/Mesa/lib ; then X_CFLAGS="-I/opt/Mesa/include $X_CFLAGS" X_LIBS="-L/opt/Mesa/lib $X_LIBS" fi if test -d /opt/xpm/lib/X11 ; then X_CFLAGS="-I/opt/xpm/include $X_CFLAGS" X_LIBS="-L/opt/xpm/lib/X11 $X_LIBS" fi # On HPUX, default to installing in /opt/xscreensaver/ instead of # in /usr/local/, unless there is already an xscreensaver in # /usr/local/bin/. This can be overridden with the --prefix arg # to configure. I'm not sure this is the right thing to do, but # Richard Lloyd says so... # if test \! -x /usr/local/bin/xscreensaver ; then ac_default_prefix=/opt/xscreensaver fi ;; *-solaris*) # Thanks for not making xmkmf find this by default, pinheads. # And thanks for moving things around again, too. Is this # really the standard location now? What happened to the # joke that this kind of thing went in /opt? # cthomp says "answer: CDE (Common Disorganized Environment)" # if test -f /usr/dt/include/Xm/Xm.h ; then X_CFLAGS="$X_CFLAGS -I/usr/dt/include" MOTIF_LIBS="$MOTIF_LIBS -L/usr/dt/lib -R/usr/dt/lib" # Some versions of Slowlaris Motif require -lgen. But not all. Why? AC_CHECK_LIB(gen, regcmp, [MOTIF_LIBS="$MOTIF_LIBS -lgen"]) fi ;; *-darwin*) # On MacOS X (10.x with "fink"), many things are under /sw/. # if test -d /sw/include ; then X_CFLAGS="-I/sw/include $X_CFLAGS" X_LIBS="-L/sw/lib $X_LIBS" fi ;; esac]) AC_DEFUN([AC_CHECK_GETIFADDRS], [AC_CACHE_CHECK([for getifaddrs], ac_cv_have_getifaddrs, [AC_TRY_COMPILE([#include #include #include #include ], [struct ifaddrs *ifa; getifaddrs (&ifa); ifa->ifa_next = 0; ifa->ifa_addr->sa_family = 0;], [ac_cv_have_getifaddrs=yes], [ac_cv_have_getifaddrs=no])]) if test "$ac_cv_have_getifaddrs" = yes ; then AC_DEFINE(HAVE_GETIFADDRS) fi]) ############################################################################### # # Some utility functions to make checking for X things easier. # ############################################################################### # Like AC_CHECK_HEADER, but it uses the already-computed -I directories. # AC_DEFUN([AC_CHECK_X_HEADER], [ ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` AC_CHECK_HEADER([$1],[$2],[$3],[$4]) CPPFLAGS="$ac_save_CPPFLAGS"]) # Like AC_EGREP_HEADER, but it uses the already-computed -I directories. # AC_DEFUN([AC_EGREP_X_HEADER], [ ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` AC_EGREP_HEADER([$1], [$2], [$3], [$4]) CPPFLAGS="$ac_save_CPPFLAGS"]) # Like AC_TRY_COMPILE, but it uses the already-computed -I directories. # AC_DEFUN([AC_TRY_X_COMPILE], [ ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` AC_TRY_COMPILE([$1], [$2], [$3], [$4]) CPPFLAGS="$ac_save_CPPFLAGS"]) # Like AC_CHECK_LIB, but it uses the already-computed -I and -L directories. # Use this sparingly; it probably doesn't work very well on X programs. # AC_DEFUN([AC_CHECK_X_LIB], [ 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` AC_CHECK_LIB([$1], [$2], [$3], [$4], [$5]) CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" ]) # Like AC_TRY_RUN, but it uses the already-computed -I directories. # (But not the -L directories!) # AC_DEFUN([AC_TRY_X_RUN], [ ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` AC_TRY_RUN([$1], [$2], [$3], [$4]) CPPFLAGS="$ac_save_CPPFLAGS"]) # Usage: HANDLE_X_PATH_ARG([variable_name], # [--command-line-option], # [descriptive string]) # # All of the --with options take three forms: # # --with-foo (or --with-foo=yes) # --without-foo (or --with-foo=no) # --with-foo=/DIR # # This function, HANDLE_X_PATH_ARG, deals with the /DIR case. When it sees # a directory (string beginning with a slash) it checks to see whether # /DIR/include and /DIR/lib exist, and adds them to $X_CFLAGS and $X_LIBS # as appropriate. # AC_DEFUN([HANDLE_X_PATH_ARG], [ case "$[$1]" in yes) ;; no) ;; /*) AC_MSG_CHECKING([for [$3] headers]) d=$[$1]/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" AC_MSG_RESULT($d) else AC_MSG_RESULT(not found ($d: no such directory)) fi AC_MSG_CHECKING([for [$3] libs]) d=$[$1]/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" AC_MSG_RESULT($d) else AC_MSG_RESULT(not found ($d: no such directory)) fi # replace the directory string with "yes". [$1]_req="yes" [$1]=$[$1]_req ;; *) echo "" echo "error: argument to [$2] must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac ]) ############################################################################### ############################################################################### # # End of function definitions. Now start actually executing stuff. # ############################################################################### ############################################################################### # WTF! autoconf emits this *way* too late. Do it earlier. test "x$prefix" = xNONE && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # random compiler setup AC_CANONICAL_HOST ac_original_cc=$CC AC_PROG_CC AC_PROG_CC_PTHREAD # Needs ac_original_cc. AC_PROG_CC_ANSI AC_NO_LONG_STRING_WARNINGS AC_NO_MISPLACED_DECLARATIONS AC_NO_OBJECTIVE_C AC_NO_CPLUSPLUS_COMMENTS_IN_C_CODE AC_PROG_CPP AC_C_CONST AC_C_INLINE AC_EXEEXT AC_DEMAND_BC # stuff for Makefiles AC_PROG_INSTALL AC_PROG_INSTALL_DIRS AC_PROG_MAKE_SET # By default, autoconf sets INSTALL_SCRIPT to '${INSTALL_PROGRAM}'. # That's wrong: it should be set to '${INSTALL}', so that one can # implement the "install-strip" target properly (strip executables, # but do not try to strip scripts.) # INSTALL_SCRIPT='${INSTALL}' # random libc stuff AC_HEADER_STDC AC_CHECK_HEADERS(unistd.h inttypes.h) AC_TYPE_MODE_T AC_TYPE_PID_T AC_TYPE_SIZE_T AC_TYPE_SIGNAL AC_HEADER_TIME AC_HEADER_SYS_WAIT AC_HEADER_DIRENT AC_GETTIMEOFDAY_ARGS AC_SYS_LARGEFILE AC_CHECK_FUNCS(select fcntl uname nice setpriority getcwd getwd putenv sbrk) AC_CHECK_FUNCS(sigaction syslog realpath setrlimit) AC_CHECK_FUNCS(setlocale) AC_CHECK_FUNCS(getaddrinfo) AC_CHECK_MEMBERS([struct sockaddr.sa_len],,, [[#include ]]) AC_CHECK_ICMP AC_CHECK_ICMPHDR AC_CHECK_GETIFADDRS AC_CHECK_HEADERS(crypt.h sys/select.h) AC_PROG_PERL if test -z "$PERL" ; then # don't let it be blank... PERL=/usr/bin/perl fi AC_PATH_XTRA if test "$have_x" != yes; then AC_MSG_ERROR(Couldn't find X11 headers/libs. Try `$0 --help'.) fi AC_PATH_X_APP_DEFAULTS AC_X_RANDOM_PATHS AC_XPOINTER AC_MSG_CHECKING(whether this is MacOS X) ac_macosx=no case "$host" in *-apple-darwin* ) ac_macosx=yes ;; esac AC_MSG_RESULT($ac_macosx) ############################################################################### # # Gettext support # ############################################################################### IT_PROG_INTLTOOL GETTEXT_PACKAGE=xscreensaver AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [This is the name of the gettext package to use.]) AC_DEFINE_UNQUOTED(PACKAGE, "$GETTEXT_PACKAGE", [This is the same as GETTEXT_PACKAGE, but for the glade generated code.]) AC_SUBST(GETTEXT_PACKAGE) 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" ############################################################################### # # Check for -lXmu (some fucked up vendors don't ship it...) # ############################################################################### have_xmu=no AC_CHECK_X_HEADER(X11/Xmu/Error.h, [have_xmu=yes],, [#include #include #include ]) if test "$have_xmu" = no ; then XMU_SRCS='$(UTILS_SRC)/xmu.c' XMU_OBJS='$(UTILS_BIN)/xmu.o' XMU_LIBS='' else XMU_SRCS='' XMU_OBJS='' XMU_LIBS='-lXmu' AC_DEFINE(HAVE_XMU) fi ############################################################################### # # Check for the SunOS 4.1.x _get_wmShellWidgetClass bug. # See comp.windows.x FAQ question 124. The right fix is to # get OpenWindows 3.0 patches 100512-02 and 100573-03. # ############################################################################### if test "$have_xmu" = yes ; then case "$host" in *-sunos4*) AC_CACHE_CHECK([for the SunOS 4.1.x _get_wmShellWidgetClass bug], ac_cv_sunos_xmu_bug, [ac_save_LDFLAGS="$LDFLAGS" if test \! -z "$x_libraries" ; then LDFLAGS="$LDFLAGS -L$x_libraries" fi # Note: this trick never works! (Generally.) # We're only getting away with using AC_TRY_LINK # with X libraries because we know it's SunOS. LDFLAGS="$LDFLAGS -lXmu -lXt -lX11 -lXext -lm" AC_TRY_LINK(,, [ac_cv_sunos_xmu_bug=no], [ac_cv_sunos_xmu_bug=yes]) LDFLAGS="$ac_save_LDFLAGS"]) if test "$ac_cv_sunos_xmu_bug" = yes ; then AC_CACHE_CHECK([whether the compiler understands -static], ac_cv_ld_static, [ac_save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -static" AC_TRY_LINK(,,[ac_cv_ld_static=yes],[ac_cv_ld_static=no]) LDFLAGS="$ac_save_LDFLAGS"]) if test "$ac_cv_ld_static" = yes ; then LDFLAGS="$LDFLAGS -static" else LDFLAGS="$LDFLAGS -Bstatic" fi fi ;; esac fi ############################################################################### # # Handle the --with-hackdir option # ############################################################################### have_hackdir=yes with_hackdir_req=unspecified AC_ARG_WITH(hackdir,[ Installation options: --with-hackdir=DIR Where to install the hundreds of demo executables. Default: `PREFIX/libexec/xscreensaver/'], [with_hackdir="$withval"; with_hackdir_req="$withval"],[with_hackdir=yes]) if test x"$with_hackdir" = xyes; then HACKDIR='${libexecdir}/xscreensaver' elif test x"$with_hackdir" = xno; then HACKDIR='${bindir}' else HACKDIR=$with_hackdir fi # canonicalize slashes. HACKDIR=`echo "${HACKDIR}" | sed 's@/$@@;s@//*@/@g'` # Expand HACKDIR as HACKDIR_FULL HACKDIR_FULL=`eval eval eval eval eval eval eval eval eval echo $HACKDIR` # This option used to be called --enable-subdir; make sure that is no longer # used, since configure brain-damagedly ignores unknown --enable options. obsolete_enable= AC_ARG_ENABLE(subdir,,[obsolete_enable=yes]) if test -n "$obsolete_enable"; then echo "error: the --enable-subdir option has been replaced with" echo " the new --with-hackdir option; see \`configure --help'" echo " for more information." exit 1 fi ############################################################################### # # Handle the --with-configdir option # Help for --with-x-app-defaults option added. # ############################################################################### have_configdir=yes with_configdir_req=unspecified AC_ARG_WITH(configdir, [ --with-configdir=DIR Where to install the data files that describe each of the display modes to the GUI. Default: `PREFIX/share/xscreensaver/config/' --with-x-app-defaults=DIR Where to install xscreensaver configuration file. ], [with_configdir="$withval"; with_configdir_req="$withval"], [with_configdir=yes]) if test x"$with_configdir" = xyes; then HACK_CONF_DIR='${datadir}/xscreensaver/config' elif test x"$with_configdir" = xno; then echo "error: must be yes, or a pathname: --with-configdir=$with_configdir" exit 1 else # there must be a better way than this... if test -z "`echo $with_configdir | sed 's@^/.*@@'`" ; then # absolute path HACK_CONF_DIR=$with_configdir else # relative path HACK_CONF_DIR="\${exec_prefix}$with_configdir" fi fi ############################################################################### # # Check for the SGI SCREEN_SAVER server extension. # ############################################################################### #have_sgi=no #with_sgi_req=unspecified #AC_ARG_WITH(sgi-ext, #[Except where noted, all of the --with options below can also take a #directory argument: for example, `--with-motif=/opt/Motif'. That would #cause /opt/Motif/include/ to be added to the -I list, and /opt/Motif/lib/ #to be added to the -L list, assuming those directories exist. # #By default, support for each of these options will be built in, if the #relevant library routines exist. At run time, they will then be used #only if the X server being used supports them. Each --with option has #a corresponding --without option, to override building support for them #at all. # #Screen blanking and idle-detection options: # # --with-sgi-ext Include support for the SGI SCREEN_SAVER extension.], # [with_sgi="$withval"; with_sgi_req="$withval"],[with_sgi=yes]) # #HANDLE_X_PATH_ARG(with_sgi, --with-sgi-ext, SGI SCREEN_SAVER) # #if test "$with_sgi" = yes; then # AC_CHECK_X_HEADER(X11/extensions/XScreenSaver.h, # [have_sgi=yes # AC_DEFINE(HAVE_SGI_SAVER_EXTENSION)],, # [#include ]) # #elif test "$with_sgi" != no; then # echo "error: must be yes or no: --with-sgi-ext=$with_sgi" # exit 1 #fi ############################################################################### # # Check for the XIDLE server extension. # ############################################################################### #have_xidle=no #with_xidle_req=unspecified #AC_ARG_WITH(xidle-ext, #[ --with-xidle-ext Include support for the XIDLE extension.], # [with_xidle="$withval"; with_xidle_req="$withval"],[with_xidle=yes]) # #HANDLE_X_PATH_ARG(with_xidle, --with-xidle-ext, XIDLE) # #if test "$with_xidle" = yes; then # AC_CHECK_X_HEADER(X11/extensions/xidle.h, # [have_xidle=yes # AC_DEFINE(HAVE_XIDLE_EXTENSION)],, # [#include ]) #elif test "$with_xidle" != no; then # echo "error: must be yes or no: --with-xidle-ext=$with_xidle" # exit 1 #fi ############################################################################### # # Check for the SGI-VIDEO-CONTROL server extension. # ############################################################################### #have_sgivc=no #with_sgivc_req=unspecified #AC_ARG_WITH(sgivc-ext, #[ --with-sgivc-ext Include support for the SGI-VIDEO-CONTROL extension.], # [with_sgivc="$withval"; with_sgivc_req="$withval"],[with_sgivc=yes]) # #HANDLE_X_PATH_ARG(with_sgivc, --with-sgivc-ext, SGI-VIDEO-CONTROL) # #if test "$with_sgivc" = yes; then # # # first check for XSGIvc.h # AC_CHECK_X_HEADER(X11/extensions/XSGIvc.h, [have_sgivc=yes],, # [#include ]) # # # if that succeeded, then check for the -lXsgivc # if test "$have_sgivc" = yes; then # have_sgivc=no # AC_CHECK_X_LIB(Xsgivc, XSGIvcQueryGammaMap, # [have_sgivc=yes; SAVER_LIBS="$SAVER_LIBS -lXsgivc"], [true], # -lXext -lX11) # fi # # # if that succeeded, then we've really got it. # if test "$have_sgivc" = yes; then # AC_DEFINE(HAVE_SGI_VC_EXTENSION) # fi # #elif test "$with_sgivc" != no; then # echo "error: must be yes or no: --with-sgivc-ext=$with_sgivc" # exit 1 #fi ############################################################################### # # Check for the DPMS server extension. # ############################################################################### have_dpms=no with_dpms_req=unspecified AC_ARG_WITH(dpms-ext, [ --with-dpms-ext Include support for the DPMS extension.], [with_dpms="$withval"; with_dpms_req="$withval"],[with_dpms=yes]) HANDLE_X_PATH_ARG(with_dpms, --with-dpms-ext, DPMS) if test "$with_dpms" = yes; then # first check for dpms.h AC_CHECK_X_HEADER(X11/extensions/dpms.h, [have_dpms=yes],, [#include #include ]) # if that succeeded, then check for the DPMS code in the libraries if test "$have_dpms" = yes; then # first look in -lXext (this is where it is with XFree86 4.0) have_dpms=no AC_CHECK_X_LIB(Xext, DPMSInfo, [have_dpms=yes], [true], -lXext -lX11) # if that failed, look in -lXdpms (this is where it was in XFree86 3.x) if test "$have_dpms" = no; then AC_CHECK_X_LIB(Xdpms, DPMSInfo, [have_dpms=yes; XDPMS_LIBS="-lXdpms"], [true], -lXext -lX11) fi fi # if that succeeded, then we've really got it. if test "$have_dpms" = yes; then AC_DEFINE(HAVE_DPMS_EXTENSION) fi elif test "$with_dpms" != no; then echo "error: must be yes or no: --with-dpms-ext=$with_dpms" exit 1 fi ############################################################################### # # Check for the XINERAMA server extension. # ############################################################################### have_xinerama=no with_xinerama_req=unspecified AC_ARG_WITH(xinerama-ext, [ --with-xinerama-ext Include support for the XINERAMA extension.], [with_xinerama="$withval"; with_xinerama_req="$withval"],[with_xinerama=yes]) HANDLE_X_PATH_ARG(with_xinerama, --with-xinerama-ext, XINERAMA) if test "$with_xinerama" = yes; then # first check for Xinerama.h AC_CHECK_X_HEADER(X11/extensions/Xinerama.h, [have_xinerama=yes],, [#include ]) # if that succeeded, then check for the XINERAMA code in the libraries if test "$have_xinerama" = yes; then # first look in -lXext have_xinerama=no AC_CHECK_X_LIB(Xext, XineramaQueryScreens, [have_xinerama=yes], [true], -lXext -lX11) # if that failed, look in -lXinerama (this is where it is in XFree86 4.1.) if test "$have_xinerama" = no; then AC_CHECK_X_LIB(Xinerama, XineramaQueryScreens, [have_xinerama=yes; XINERAMA_LIBS="-lXinerama"], [true], -lXext -lX11) fi fi # if that succeeded, then we've really got it. if test "$have_xinerama" = yes; then AC_DEFINE(HAVE_XINERAMA) fi elif test "$with_xinerama" != no; then echo "error: must be yes or no: --with-xinerama-ext=$with_xinerama" exit 1 fi ############################################################################### # # Check for the XINPUT server extension. # ############################################################################### have_xinput=no with_xinput_req=unspecified AC_ARG_WITH(xinput-ext, [ --with-xinput-ext Include support for the XInput extension.], [with_xinput="$withval"; with_xinput_req="$withval"], [with_xinput=yes]) HANDLE_X_PATH_ARG(with_xinput, --with-xinput-ext, XINPUT) if test "$with_xinput" = yes; then # first check for Xinput.h AC_CHECK_X_HEADER(X11/extensions/XInput.h, [have_xinput=yes],, [#include ]) # if that succeeded, then check for libXi if test "$have_xinput" = yes; then have_xinput=no AC_CHECK_X_LIB(Xi, XListInputDevices, [have_xinput=yes; SAVER_LIBS="$SAVER_LIBS -lXi"], [true], -lXext -lX11) fi # if that succeeded, then we've really got it. if test "$have_xinput" = yes; then AC_DEFINE(HAVE_XINPUT) fi elif test "$with_xinput" != no; then echo "error: must be yes or no: --with-xinput-ext=$with_xinput" exit 1 fi ############################################################################### # # Check for the XF86VMODE server extension (for virtual screens.) # ############################################################################### have_xf86vmode=no with_xf86vmode_req=unspecified AC_ARG_WITH(xf86vmode-ext, [ --with-xf86vmode-ext Include support for XFree86 virtual screens.], [with_xf86vmode="$withval"; with_xf86vmode_req="$withval"], [with_xf86vmode=yes]) HANDLE_X_PATH_ARG(with_xf86vmode, --with-xf86vmode-ext, xf86vmode) VIDMODE_LIBS="" if test "$with_xf86vmode" = yes; then # first check for xf86vmode.h AC_CHECK_X_HEADER(X11/extensions/xf86vmode.h, [have_xf86vmode=yes],, [#include ]) # if that succeeded, then check for the -lXxf86vm if test "$have_xf86vmode" = yes; then have_xf86vmode=no AC_CHECK_X_LIB(Xxf86vm, XF86VidModeGetViewPort, [have_xf86vmode=yes; VIDMODE_LIBS="-lXxf86vm"; SAVER_LIBS="$SAVER_LIBS $VIDMODE_LIBS"], [true], -lXext -lX11) fi # if that succeeded, then we've really got it. if test "$have_xf86vmode" = yes; then AC_DEFINE(HAVE_XF86VMODE) fi elif test "$with_xf86vmode" != no; then echo "error: must be yes or no: --with-xf86vmode-ext=$with_xf86vmode" exit 1 fi ############################################################################### # # Check for the XF86VMODE server extension (for gamma fading.) # ############################################################################### have_xf86gamma=no have_xf86gamma_ramp=no with_xf86gamma_req=unspecified AC_ARG_WITH(xf86gamma-ext, [ --with-xf86gamma-ext Include support for XFree86 gamma fading.], [with_xf86gamma="$withval"; with_xf86gamma_req="$withval"], [with_xf86gamma=yes]) HANDLE_X_PATH_ARG(with_xf86gamma, --with-xf86gamma-ext, xf86gamma) if test "$with_xf86gamma" = yes; then # first check for xf86vmode.h, if we haven't already if test "$have_xf86vmode" = yes; then have_xf86gamma=yes else AC_CHECK_X_HEADER(X11/extensions/xf86vmode.h, [have_xf86gamma=yes],, [#include ]) fi # if that succeeded, then check for the -lXxf86vm if test "$have_xf86gamma" = yes; then have_xf86gamma=no AC_CHECK_X_LIB(Xxf86vm, XF86VidModeSetGamma, [have_xf86gamma=yes], [true], -lXext -lX11) fi # check for the Ramp versions of the functions too. if test "$have_xf86gamma" = yes; then have_xf86gamma_ramp=no AC_CHECK_X_LIB(Xxf86vm, XF86VidModeSetGammaRamp, [have_xf86gamma_ramp=yes], [true], -lXext -lX11) fi # if those tests succeeded, then we've really got the functions. if test "$have_xf86gamma" = yes; then AC_DEFINE(HAVE_XF86VMODE_GAMMA) fi if test "$have_xf86gamma_ramp" = yes; then AC_DEFINE(HAVE_XF86VMODE_GAMMA_RAMP) fi # pull in the lib, if we haven't already if test "$have_xf86gamma" = yes -a "$have_xf86vmode" = no; then SAVER_LIBS="$SAVER_LIBS -lXxf86vm" fi elif test "$with_xf86gamma" != no; then echo "error: must be yes or no: --with-xf86gamma-ext=$with_xf86vmode" exit 1 fi ############################################################################### # # Check for the RANDR (Resize and Rotate) server extension. # # We need this to detect when the resolution of the desktop # has changed out from under us (this is a newer, different # mechanism than the XF86VMODE virtual viewports.) # ############################################################################### have_randr=no with_randr_req=unspecified AC_ARG_WITH(randr-ext, [ --with-randr-ext Include support for the X Resize+Rotate extension.], [with_randr="$withval"; with_randr_req="$withval"],[with_randr=yes]) HANDLE_X_PATH_ARG(with_randr, --with-randr-ext, RANDR) if test "$with_randr" = yes; then # first check for Xrandr.h AC_CHECK_X_HEADER(X11/extensions/Xrandr.h, [have_randr=yes],, [#include ]) # if that succeeded, then check for the XRR code in the libraries if test "$have_randr" = yes; then # RANDR probably needs -lXrender xrender_libs= AC_CHECK_X_LIB(Xrender, XRenderSetSubpixelOrder, [xrender_libs="-lXrender"], [true], -lXext -lX11) # first look for RANDR in -lXext have_randr=no AC_CHECK_X_LIB(Xext, XRRGetScreenInfo, [have_randr=yes; SAVER_LIBS="$SAVER_LIBS $xrender_libs"], [true], $xrender_libs -lXext -lX11) # if that failed, look in -lXrandr if test "$have_randr" = no; then AC_CHECK_X_LIB(Xrandr, XRRGetScreenInfo, [have_randr=yes; SAVER_LIBS="$SAVER_LIBS -lXrandr $xrender_libs"], [true], $xrender_libs -lXext -lX11) fi fi # if that succeeded, then we've really got it. if test "$have_randr" = yes; then AC_DEFINE(HAVE_RANDR) # Now check for version 1.2 in the same libs. # Try to compile, since on MacOS 10.5.7, headers are older than libs! AC_CACHE_CHECK([for XRRGetScreenResources], ac_cv_randr_12, [ac_cv_randr_12=no AC_TRY_X_COMPILE([#include #include #include ], [XRRScreenResources *res = XRRGetScreenResources (0, 0);], [ac_cv_randr_12=yes], [ac_cv_randr_12=no])]) if test "$ac_cv_randr_12" = yes ; then AC_DEFINE(HAVE_RANDR_12) fi # AC_CHECK_X_LIB(c, XRRGetOutputInfo, [AC_DEFINE(HAVE_RANDR_12)], # [true], $SAVER_LIBS) fi elif test "$with_randr" != no; then echo "error: must be yes or no: --with-randr-ext=$with_randr" exit 1 fi ############################################################################### # # Check for XF86MiscSetGrabKeysState (but only bother if we are already # using other XF86 stuff.) # ############################################################################### have_xf86miscsetgrabkeysstate=no if test "$have_xf86gamma" = yes -o "$have_xf86vmode" = yes; then AC_CHECK_X_LIB(Xxf86misc, XF86MiscSetGrabKeysState, [have_xf86miscsetgrabkeysstate=yes], [true], -lXext -lX11) if test "$have_xf86miscsetgrabkeysstate" = yes ; then SAVER_LIBS="$SAVER_LIBS -lXxf86misc" AC_DEFINE(HAVE_XF86MISCSETGRABKEYSSTATE) fi fi ############################################################################### # # Check for HP XHPDisableReset and XHPEnableReset. # ############################################################################### AC_MSG_CHECKING([for XHPDisableReset in X11/XHPlib.h]) AC_EGREP_X_HEADER(XHPDisableReset, X11/XHPlib.h, [AC_DEFINE(HAVE_XHPDISABLERESET) SAVER_LIBS="-lXhp11 $SAVER_LIBS" AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)]) ############################################################################### # # Check for /proc/interrupts. # ############################################################################### have_proc_interrupts=no with_proc_interrupts_req=unspecified AC_ARG_WITH(proc-interrupts, [ --with-proc-interrupts Include support for consulting the /proc/interrupts file to notice keyboard activity.], [with_proc_interrupts="$withval"; with_proc_interrupts_req="$withval"], [with_proc_interrupts=yes]) if test "$with_proc_interrupts" = yes; then # Note that we may be building in an environment (e.g. Debian buildd chroot) # without a proper /proc filesystem. If /proc/interrupts exists, then we'll # check that it has the bits we need, but otherwise we'll just go on faith. # have_proc_interrupts=yes if test -f /proc/interrupts; then AC_CACHE_CHECK([whether /proc/interrupts contains keyboard data], ac_cv_have_proc_interrupts, [ac_cv_have_proc_interrupts=no if grep 'keyboard\|i8042' /proc/interrupts >/dev/null 2>&1 ; then ac_cv_have_proc_interrupts=yes fi ]) have_proc_interrupts=$ac_cv_have_proc_interrupts fi if test "$have_proc_interrupts" = yes; then AC_DEFINE(HAVE_PROC_INTERRUPTS) fi elif test "$with_proc_interrupts" != no; then echo "error: must be yes or no: --with-proc-interrupts=$with_proc_interrupts" exit 1 fi ############################################################################### # # The --enable-locking option # ############################################################################### AC_ARG_ENABLE(locking,[Screen locking options: --enable-locking Compile in support for locking the display. --disable-locking Do not allow locking at all.], [enable_locking="$enableval"], [if test "$ac_macosx" = yes; then # We can't lock on MacOS X, so default to not compiling in support for it. # But allow --enable-locking to override that, so I can debug Linux locking # under MacOS X11. enable_locking=no else enable_locking=yes fi]) if test "$enable_locking" = yes; then true elif test "$enable_locking" = no; then AC_DEFINE(NO_LOCKING) else echo "error: must be yes or no: --enable-locking=$enable_locking" exit 1 fi ############################################################################### # # Whether to allow root password to unblank. # ############################################################################### AC_ARG_ENABLE(root-passwd, [ --enable-root-passwd Allow root passwd to unlock screen. --disable-root-passwd Do not allow that.], [enable_root_passwd="$enableval"],[enable_root_passwd=yes]) if test "$enable_root_passwd" = yes; then AC_DEFINE(ALLOW_ROOT_PASSWD) true elif test "$enable_root_passwd" != no; then echo "error: must be yes or no: --enable-root-passwd=$enable_root_passwd" exit 1 fi ############################################################################### # # Check for PAM. # ############################################################################### case "$host" in *-solaris*) # Solaris systems tend to come with PAM misconfigured. # Don't build it by default, even if the headers exist. with_pam_default=no ;; *) # Default to building PAM support on all other systems, if it exists. with_pam_default=yes ;; esac have_pam=no with_pam_req=unspecified AC_ARG_WITH(pam, [ --with-pam Include support for PAM (Pluggable Auth Modules.)], [with_pam="$withval"; with_pam_req="$withval"],[with_pam=$with_pam_default]) AC_ARG_WITH([pam_service_name], AC_HELP_STRING([--with-pam-service-name], [NAME arg is the name of the PAM service that xscreensaver will authenticate as.]), [pam_service_name="$withval"],[pam_service_name="xscreensaver"]) AC_ARG_ENABLE(pam-check-account-type, [AC_HELP_STRING([--enable-pam-check-account-type], [Whether PAM should check the result of account modules when authenticating. Only do this if you have account configured properly on your system.])], [enable_pam_check_account_type="$enableval"],[enable_pam_check_account_type=no]) if test "$enable_pam_check_account_type" = yes ; then AC_DEFINE(PAM_CHECK_ACCOUNT_TYPE) true elif test "$enable_pam_check_account_type" != no ; then echo "error: must be yes or no: --enable-pam-check-account-type=$enable_pam_check_account_type" exit 1 fi HANDLE_X_PATH_ARG(with_pam, --with-pam, PAM) if test "$enable_locking" = yes -a "$with_pam" = yes; then AC_CACHE_CHECK([for PAM], ac_cv_pam, [AC_TRY_X_COMPILE([#include ],, [ac_cv_pam=yes], [ac_cv_pam=no])]) if test "$ac_cv_pam" = yes ; then have_pam=yes AC_DEFINE(HAVE_PAM) AC_DEFINE_UNQUOTED(PAM_SERVICE_NAME,"$pam_service_name") PASSWD_LIBS="${PASSWD_LIBS} -lpam" # libpam typically requires dlopen and dlsym. On FreeBSD, # those are in libc. On Linux and Solaris, they're in libdl. AC_CHECK_LIB(dl, dlopen, [PASSWD_LIBS="${PASSWD_LIBS} -ldl"]) # On Linux, sigtimedwait() is in libc; on Solaris, it's in librt. have_timedwait=no AC_CHECK_LIB(c, sigtimedwait, [have_timedwait=yes AC_DEFINE(HAVE_SIGTIMEDWAIT)]) if test "$have_timedwait" = no ; then AC_CHECK_LIB(rt, sigtimedwait, [have_timedwait=yes AC_DEFINE(HAVE_SIGTIMEDWAIT) PASSWD_LIBS="${PASSWD_LIBS} -lrt"]) fi AC_MSG_CHECKING(how to call pam_strerror) AC_CACHE_VAL(ac_cv_pam_strerror_args, [AC_TRY_X_COMPILE([#include #include #include ], [pam_handle_t *pamh = 0; char *s = pam_strerror(pamh, PAM_SUCCESS);], [ac_pam_strerror_args=2], [AC_TRY_X_COMPILE([#include #include #include ], [char *s = pam_strerror(PAM_SUCCESS);], [ac_pam_strerror_args=1], [ac_pam_strerror_args=0])]) ac_cv_pam_strerror_args=$ac_pam_strerror_args]) ac_pam_strerror_args=$ac_cv_pam_strerror_args if test "$ac_pam_strerror_args" = 1 ; then AC_MSG_RESULT(one argument) elif test "$ac_pam_strerror_args" = 2 ; then AC_DEFINE(PAM_STRERROR_TWO_ARGS) AC_MSG_RESULT(two arguments) else AC_MSG_RESULT(unknown) fi # Check pam_fail_delay AC_MSG_CHECKING(pam_fail_delay in -lpam) AC_CACHE_VAL(ac_cv_pam_fail_delay, [ac_save_LDFLAGS="$LDFLAGS" LDFLAGS="-lpam" AC_TRY_LINK([#include ], [pam_handle_t *pamh = 0; unsigned int usec = 1; int status = pam_fail_delay (pamh, usec);], [ac_pam_fail_delay=yes], [ac_pam_fail_delay=no]) ac_cv_pam_fail_delay=$ac_pam_fail_delay, LDFLAGS=$ac_save_LDFLAGS]) if test "$ac_pam_fail_delay" = yes ; then AC_MSG_RESULT(yes) AC_DEFINE(HAVE_PAM_FAIL_DELAY) else AC_MSG_RESULT(no) fi fi fi ############################################################################### # # Check for Kerberos. # ############################################################################### have_kerberos=no have_kerberos5=no with_kerberos_req=unspecified AC_ARG_WITH(kerberos, [ --with-kerberos Include support for Kerberos authentication.], [with_kerberos="$withval"; with_kerberos_req="$withval"],[with_kerberos=yes]) HANDLE_X_PATH_ARG(with_kerberos, --with-kerberos, Kerberos) if test "$enable_locking" = yes -a "$with_kerberos" = yes; then AC_CACHE_CHECK([for Kerberos 4], ac_cv_kerberos, [AC_TRY_X_COMPILE([#include ],, [ac_cv_kerberos=yes], [ac_cv_kerberos=no])]) AC_CACHE_CHECK([for Kerberos 5], ac_cv_kerberos5, [AC_TRY_X_COMPILE([#include ],, [ac_cv_kerberos5=yes], [ac_cv_kerberos5=no])]) if test "$ac_cv_kerberos" = yes ; then have_kerberos=yes AC_DEFINE(HAVE_KERBEROS) fi if test "$ac_cv_kerberos5" = yes ; then # Andrew Snare wrote: # # You were assuming that if kerberosV (krb5) was found, then kerberosIV # (krb4) was also available. This turns out not to be the case with # mit-krb-1.2.7; apparently backwards-compatibility with KerberosIV # is optional. # # So, disable kerberosV support if libkrb4 can't be found. # This is not the best solution, but it makes the compile not fail. # AC_CHECK_X_LIB(krb4, krb_get_tf_realm, [have_kerberos=yes], [have_kerberos=no]) if test "$have_kerberos" = yes ; then have_kerberos5=yes AC_DEFINE(HAVE_KERBEROS) AC_DEFINE(HAVE_KERBEROS5) else have_kerberos5=no AC_MSG_WARN([Cannot find compat lib (libkrb4) needed to use Kerberos 5]) fi fi if test "$have_kerberos5" = yes ; then # from Matt Knopp # (who got it from amu@mit.edu) PASSWD_LIBS="$PASSWD_LIBS -lkrb4 -ldes425 -lkrb5 -lk5crypto -lcom_err" # jwz: MacOS X uses -lkrb5, but not -lcrypt AC_CHECK_X_LIB(crypt, crypt, [PASSWD_LIBS="$PASSWD_LIBS -lcrypt"]) elif test "$have_kerberos" = yes ; then # from Tim Showalter for FreeBSD 4.2 PASSWD_LIBS="$PASSWD_LIBS -lkrb -ldes -lcom_err" fi if test "$have_kerberos" = yes ; then AC_CHECK_FUNC(res_search,, AC_CHECK_LIB(resolv,res_search,PASSWD_LIBS="${PASSWD_LIBS} -lresolv", AC_MSG_WARN([Can't find DNS resolver libraries needed for Kerberos]) )) fi fi ############################################################################### # # Check for the nine billion variants of shadow passwords... # ############################################################################### need_setuid=no have_shadow=no with_shadow_req=unspecified AC_ARG_WITH(shadow, [ --with-shadow Include support for shadow password authentication.], [with_shadow="$withval"; with_shadow_req="$withval"],[with_shadow=yes]) HANDLE_X_PATH_ARG(with_shadow, --with-shadow, shadow password) if test "$enable_locking" = no ; then with_shadow_req=no with_shadow=no fi ############################################################################### # # Check for Sun "adjunct" passwords. # ############################################################################### if test "$with_shadow" = yes ; then AC_CACHE_CHECK([for Sun-style shadow passwords], ac_cv_sun_adjunct, [AC_TRY_X_COMPILE([#include #include #include #include #include #include ], [struct passwd_adjunct *p = getpwanam("nobody"); const char *pw = p->pwa_passwd;], [ac_cv_sun_adjunct=yes], [ac_cv_sun_adjunct=no])]) if test "$ac_cv_sun_adjunct" = yes; then have_shadow_adjunct=yes have_shadow=yes need_setuid=yes fi fi ############################################################################### # # Check for DEC and SCO so-called "enhanced" security. # ############################################################################### if test "$with_shadow" = yes ; then AC_CACHE_CHECK([for DEC-style shadow passwords], ac_cv_enhanced_passwd, [AC_TRY_X_COMPILE([#include #include #include #include #include #include ], [struct pr_passwd *p; const char *pw; set_auth_parameters(0, 0); check_auth_parameters(); p = getprpwnam("nobody"); pw = p->ufld.fd_encrypt;], [ac_cv_enhanced_passwd=yes], [ac_cv_enhanced_passwd=no])]) if test $ac_cv_enhanced_passwd = yes; then have_shadow_enhanced=yes have_shadow=yes need_setuid=yes # On SCO, getprpwnam() is in -lprot (which uses nap() from -lx) # (I'm told it needs -lcurses too, but I don't understand why.) # But on DEC, it's in -lsecurity. # AC_CHECK_LIB(prot, getprpwnam, [PASSWD_LIBS="$PASSWD_LIBS -lprot -lcurses -lx"], [AC_CHECK_LIB(security, getprpwnam, [PASSWD_LIBS="$PASSWD_LIBS -lsecurity"])], [-lx]) fi fi ############################################################################### # # Check for HP's entry in the "Not Invented Here" Sweepstakes. # ############################################################################### if test "$with_shadow" = yes ; then AC_CACHE_CHECK([for HP-style shadow passwords], ac_cv_hpux_passwd, [AC_TRY_X_COMPILE([#include #include #include #include #include #include ], [struct s_passwd *p = getspwnam("nobody"); const char *pw = p->pw_passwd;], [ac_cv_hpux_passwd=yes], [ac_cv_hpux_passwd=no])]) if test "$ac_cv_hpux_passwd" = yes; then have_shadow_hpux=yes have_shadow=yes need_setuid=yes # on HPUX, bigcrypt is in -lsec AC_CHECK_LIB(sec, bigcrypt, [PASSWD_LIBS="$PASSWD_LIBS -lsec"]) fi fi ############################################################################### # # Check for FreeBSD-style shadow passwords. # # On FreeBSD, getpwnam() and friends work just like on non-shadow- # password systems -- except you only get stuff in the pw_passwd field # if the running program is setuid. So, guess that we've got this # lossage to contend with if /etc/master.passwd exists, and default to # a setuid installation. # ############################################################################### if test "$with_shadow" = yes ; then AC_CACHE_CHECK([for FreeBSD-style shadow passwords], ac_cv_master_passwd, [if test -f /etc/master.passwd ; then ac_cv_master_passwd=yes else ac_cv_master_passwd=no fi]) if test "$ac_cv_master_passwd" = yes; then need_setuid=yes fi fi ############################################################################### # # Check for traditional (ha!) shadow passwords. # ############################################################################### if test "$with_shadow" = yes ; then AC_CACHE_CHECK([for generic shadow passwords], ac_cv_shadow, [AC_TRY_X_COMPILE([#include #include #include #include #include ], [struct spwd *p = getspnam("nobody"); const char *pw = p->sp_pwdp;], [ac_cv_shadow=yes], [ac_cv_shadow=no])]) if test "$ac_cv_shadow" = yes; then have_shadow=yes need_setuid=yes # On some systems (UnixWare 2.1), getspnam() is in -lgen instead of -lc. have_getspnam=no AC_CHECK_LIB(c, getspnam, [have_getspnam=yes]) if test "$have_getspnam" = no ; then AC_CHECK_LIB(gen, getspnam, [have_getspnam=yes; PASSWD_LIBS="$PASSWD_LIBS -lgen"]) fi fi fi ############################################################################### # # Check for other libraries needed for non-shadow passwords. # ############################################################################### if test "$enable_locking" = yes ; then # On some systems (UnixWare 2.1), crypt() is in -lcrypt instead of -lc. have_crypt=no AC_CHECK_LIB(c, crypt, [have_crypt=yes]) if test "$have_crypt" = no ; then AC_CHECK_LIB(crypt, crypt, [have_crypt=yes; PASSWD_LIBS="$PASSWD_LIBS -lcrypt"]) fi fi # Most of the above shadow mechanisms will have set need_setuid to yes, # if they were found. But, on some systems, we need setuid even when # using plain old vanilla passwords. # if test "$enable_locking" = yes ; then case "$host" in *-hpux* | *-aix* | *-netbsd* | *-freebsd* | *-openbsd* ) need_setuid=yes ;; esac fi if test "$have_shadow_adjunct" = yes ; then AC_DEFINE(HAVE_ADJUNCT_PASSWD) elif test "$have_shadow_enhanced" = yes ; then AC_DEFINE(HAVE_ENHANCED_PASSWD) elif test "$have_shadow_hpux" = yes ; then AC_DEFINE(HAVE_HPUX_PASSWD) elif test "$have_shadow" = yes ; then AC_DEFINE(HAVE_SHADOW_PASSWD) fi ############################################################################### # # Check for external password helper # On SuSE, instead of having xscreensaver be a setuid program, they # fork an external program that takes the password on stdin, and # returns true if that password is a valid one. Then only that # smaller program needs to be setuid. # # (Note that this external program is not a GUI: the GUI is still # all in xscreensaver itself; the external program just does auth.) # ############################################################################### have_passwd_helper=no with_passwd_helper_req=unspecified AC_ARG_WITH(passwd-helper, [ --with-passwd-helper Include support for an external password verification helper program.], [with_passwd_helper="$withval"; with_passwd_helper_req="$withval"],[with_passwd_helper=no]) # no HANDLE_X_PATH_ARG for this one if test "$enable_locking" = no ; then with_passwd_helper_req=no with_passwd_helper=no fi case "$with_passwd_helper" in ""|no) : ;; /*) AC_DEFINE_UNQUOTED(PASSWD_HELPER_PROGRAM, "$with_passwd_helper") have_passwd_helper=yes;; *) echo "error: --with-passwd-helper needs full pathname of helper (not '$with_passwd_helper')." >&2 exit 1 esac ############################################################################### # # Check for a login manager for a "New Login" button on the lock dialog. # Usually this will be "/usr/bin/gdmflexiserver". # ############################################################################### with_login_manager_req=unspecified default_login_manager_1='gdmflexiserver -ls' default_login_manager_2='kdmctl reserve' default_login_manager_3='lxdm -c USER_SWITCH' default_login_manager_4='dm-tool switch-to-greeter' AC_ARG_WITH(login-manager, [ --with-login-manager Put a "New Login" button on the unlock dialog that runs a login manager like gdmflexiserver or kdmctl.], [with_login_manager="$withval"; with_login_manager_req="$withval"], [with_login_manager=yes]) # no HANDLE_X_PATH_ARG for this one if test "$enable_locking" = no ; then with_login_manager_req=no with_login_manager=no fi case "$with_login_manager_req" in no) with_login_manager="" ;; yes|unspecified) # Try various defaults, use the first one that exists. with_login_manager="" if test -z "$with_login_manager" ; then set dummy $default_login_manager_1 ; login_manager_tmp=$2 unset ac_cv_path_login_manager_tmp # don't cache AC_PATH_PROG(login_manager_tmp, $login_manager_tmp, []) if test ! -z "$login_manager_tmp" ; then with_login_manager="$default_login_manager_1" fi fi if test -z "$with_login_manager" ; then set dummy $default_login_manager_2 ; login_manager_tmp=$2 unset ac_cv_path_login_manager_tmp # don't cache AC_PATH_PROG(login_manager_tmp, $login_manager_tmp, []) if test ! -z "$login_manager_tmp" ; then with_login_manager="$default_login_manager_2" fi fi if test -z "$with_login_manager" ; then set dummy $default_login_manager_3 ; login_manager_tmp=$2 unset ac_cv_path_login_manager_tmp # don't cache AC_PATH_PROG(login_manager_tmp, $login_manager_tmp, []) if test ! -z "$login_manager_tmp" ; then with_login_manager="$default_login_manager_3" fi fi if test -z "$with_login_manager" ; then set dummy $default_login_manager_4 ; login_manager_tmp=$2 unset ac_cv_path_login_manager_tmp # don't cache AC_PATH_PROG(login_manager_tmp, $login_manager_tmp, []) if test ! -z "$login_manager_tmp" ; then with_login_manager="$default_login_manager_4" fi fi ;; /*) # absolute path specified on cmd line set dummy $with_login_manager_req ; login_manager_tmp=$2 AC_MSG_CHECKING([for $login_manager_tmp]) if test -x "$login_manager_tmp" ; then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) with_login_manager="" fi ;; *) # relative path specified on cmd line set dummy $with_login_manager_req ; login_manager_tmp=$2 unset ac_cv_path_login_manager_tmp # don't cache AC_PATH_PROG(login_manager_tmp, $login_manager_tmp, []) if test -z "$login_manager_tmp" ; then with_login_manager="" else with_login_manager="$login_manager_tmp" fi ;; esac ac_cv_login_manager_program="$with_login_manager" NEW_LOGIN_COMMAND_P='' NEW_LOGIN_COMMAND="$ac_cv_login_manager_program" AC_MSG_CHECKING(for login manager) if test -z "$NEW_LOGIN_COMMAND" ; then NEW_LOGIN_COMMAND="$default_login_manager_1" NEW_LOGIN_COMMAND_P='! ' AC_MSG_RESULT($NEW_LOGIN_COMMAND (disabled)) else AC_MSG_RESULT($NEW_LOGIN_COMMAND) fi ############################################################################### # # Check for -lgtk (and Gnome stuff) # ############################################################################### have_gtk=no with_gtk_req=unspecified AC_ARG_WITH(gtk,[ User interface options: --with-gtk Use the Gtk toolkit for the user interface.], [with_gtk="$withval"; with_gtk_req="$withval"],[with_gtk=yes]) # if --with-gtk=/directory/ was specified, remember that directory so that # we can also look for the `gtk-config' program in that directory. case "$with_gtk" in /*) gtk_dir="$with_gtk" ;; *) gtk_dir="" ;; esac HANDLE_X_PATH_ARG(with_gtk, --with-gtk, Gtk) if test "$with_gtk" != yes -a "$with_gtk" != no ; then echo "error: must be yes or no: --with-gtk=$with_gtk" exit 1 fi parse_gtk_version_string() { # M4 sucks!! changequote(X,Y) maj=`echo $ac_gtk_version_string | sed -n 's/\..*//p'` min=`echo $ac_gtk_version_string | sed -n 's/[^.]*\.\([^.]*\).*/\1/p'` changequote([,]) ac_gtk_version=`echo "$maj * 1000 + $min" | bc` if test -z "$ac_gtk_version"; then ac_gtk_version=unknown ac_gtk_version_string=unknown fi } # Find pkg-config... (need this for both gtk and gdk_pixbuf.) # if the user specified --with-gtk=/foo/ then look there. # gtk_path="$PATH" if test ! -z "$gtk_dir"; then # canonicalize slashes. foo=`echo "${gtk_dir}/bin" | sed 's@//*@/@g'` gtk_path="$foo:$gtk_path" fi AC_PATH_PROGS(pkg_config, pkg-config,, $gtk_path) if test -z "$pkg_config" ; then AC_MSG_WARN([pkg-config not found!]) pkg_config="false" fi # Utility function for running pkg-config-based tests... # pkgs='' pkg_check_version() { if test "$ok" = yes ; then req="$1" min="$2" AC_MSG_CHECKING(for $req) if $pkg_config --exists "$req" ; then vers=`$pkg_config --modversion "$req"` if $pkg_config --exists "$req >= $min" ; then AC_MSG_RESULT($vers) pkgs="$pkgs $req" return 1 else AC_MSG_RESULT($vers (wanted >= $min)) ok=no return 0 fi else AC_MSG_RESULT(no) ok=no return 0 fi fi } jurassic_gtk=no gtk_halfassed=no have_gtk_2_22_or_higher=no COMMENT_DEMO_GLADE2_GTK_2_22_HEAD="" COMMENT_DEMO_GLADE2_GTK_2_22_TAIL="" if test "$with_gtk" = yes; then have_gtk=no ok="yes" pkg_check_version gtk+-2.0 2.0.1 ; ac_gtk_version_string="$vers" pkg_check_version gmodule-2.0 2.0.0 pkg_check_version libxml-2.0 2.4.6 pkg_check_version libglade-2.0 1.99.0 pkg_check_version gdk-pixbuf-2.0 2.0.0 pkg_check_version gdk-pixbuf-xlib-2.0 2.0.0 have_gtk="$ok" if test "$have_gtk" = no; then if test -n "$ac_gtk_version_string" ; then gtk_halfassed="$ac_gtk_version_string" gtk_halfassed_lib="$req" fi fi if test "$have_gtk" = yes; then parse_gtk_version_string jurassic_gtk=no fi if test "$have_gtk" = yes; then AC_CACHE_CHECK([for Gtk includes], ac_cv_gtk_config_cflags, [ac_cv_gtk_config_cflags=`$pkg_config --cflags $pkgs`]) AC_CACHE_CHECK([for Gtk libs], ac_cv_gtk_config_libs, [ac_cv_gtk_config_libs=`$pkg_config --libs $pkgs`]) fi ac_gtk_config_cflags=$ac_cv_gtk_config_cflags ac_gtk_config_libs=$ac_cv_gtk_config_libs GTK_EXTRA_OBJS="" GTK_DATADIR="" if test "$have_gtk" = yes; then GTK_DATADIR=`$pkg_config --variable=prefix gtk+-2.0` GTK_DATADIR="$GTK_DATADIR/share" fi if test "$have_gtk" = yes; then INCLUDES="$INCLUDES $ac_gtk_config_cflags" GTK_LIBS="$GTK_LIBS $ac_gtk_config_libs" AC_DEFINE(HAVE_GTK) AC_DEFINE(HAVE_GTK2) AC_DEFINE(HAVE_XML) fi if test "$have_gtk" = yes; then ok="yes" pkg_check_version gtk+-2.0 2.22 have_gtk_2_22_or_higher="$ok" if test "$have_gtk_2_22_or_higher" = yes; then COMMENT_DEMO_GLADE2_GTK_2_22_HEAD="" fi fi fi # Check for the various Gnome help and URL loading programs. # WITH_BROWSER=gnome-open if test "$have_gtk" = yes; then AC_CHECK_PROGS(gnome_open_program, gnome-open) AC_CHECK_PROGS(gnome_url_show_program, gnome-url-show) fi ############################################################################### # # Check for -lXm. # ############################################################################### have_motif=no with_motif_req=unspecified AC_ARG_WITH(motif,[ --with-motif Use the Motif toolkit for the user interface (no longer supported.)], [with_motif="$withval"; with_motif_req="$withval"],[with_motif=no]) HANDLE_X_PATH_ARG(with_motif, --with-motif, Motif) if test "$with_motif" != yes -a "$with_motif" != no ; then echo "error: must be yes or no: --with-motif=$with_motif" exit 1 fi if test "$with_motif" = yes; then have_motif=no AC_CHECK_X_HEADER(Xm/Xm.h, [have_motif=yes AC_DEFINE(HAVE_MOTIF) MOTIF_LIBS="$MOTIF_LIBS -lXm"],, [#include #include #include ]) fi if test "$have_motif" = yes; then AC_CHECK_X_HEADER(Xm/ComboBox.h, [AC_DEFINE(HAVE_XMCOMBOBOX)],, [#include #include #include ]) fi ############################################################################### # # Checking whether Motif is really Lesstif. # ############################################################################### have_lesstif=no if test "$have_motif" = yes ; then AC_CACHE_CHECK([whether Motif is really LessTif], ac_cv_have_lesstif, [AC_TRY_X_COMPILE([#include ], [long vers = LesstifVersion;], [ac_cv_have_lesstif=yes], [ac_cv_have_lesstif=no])]) have_lesstif=$ac_cv_have_lesstif fi lesstif_version=unknown lesstif_version_string=unknown if test "$have_lesstif" = yes ; then ltv=unknown echo unknown > conftest-lt AC_CACHE_CHECK([LessTif version number], ac_cv_lesstif_version_string, [AC_TRY_X_RUN([#include #include int main() { FILE *f = fopen("conftest-lt", "w"); if (!f) exit(1); fprintf(f, "%d %d.%d\n", LesstifVersion, LESSTIF_VERSION, LESSTIF_REVISION); fclose(f); exit(0); }], [ltv=`cat conftest-lt` ac_cv_lesstif_version=`echo $ltv | sed 's/ .*//'` ac_cv_lesstif_version_string=`echo $ltv | sed 's/.* //'`], [ac_cv_lesstif_version=unknown ac_cv_lesstif_version_string=unknown], [ac_cv_lesstif_version=unknown ac_cv_lesstif_version_string=unknown])]) rm -f conftest-lt lesstif_version=$ac_cv_lesstif_version lesstif_version_string=$ac_cv_lesstif_version_string fi if test "$have_motif" = yes ; then mtv=unknown echo unknown > conftest-mt AC_CACHE_CHECK([Motif version number], ac_cv_motif_version_string, [AC_TRY_X_RUN([#include #include int main() { FILE *f = fopen("conftest-mt", "w"); if (!f) exit(1); fprintf(f, "%d %d.%d\n", XmVersion, XmVERSION, XmREVISION); fclose(f); exit(0); }], [mtv=`cat conftest-mt` ac_cv_motif_version=`echo $mtv | sed 's/ .*//'` ac_cv_motif_version_string=`echo $mtv | sed 's/.* //'`], [ac_cv_motif_version=unknown ac_cv_motif_version_string=unknown], [ac_cv_motif_version=unknown ac_cv_motif_version_string=unknown])]) rm -f conftest-mt motif_version=$ac_cv_motif_version motif_version_string=$ac_cv_motif_version_string fi ############################################################################### # # Checking whether Motif requires -lXpm. # # If this is Motif 2.x, and we have XPM, then link against XPM as well. # The deal is, Motif 2.x requires XPM -- but it's a compilation option # of the library whether to build the XPM code into libXm, or whether # to rely on an external libXm. So the only way to tell whether XPM is # a link-time requirement is to examine libXm.a, which is very # difficult to do in an autoconf script. So... if it's Motif 2.x, we # always link against XPM if the XPM lib exists (and this will be a # no-op if libXm happens to already have the XPM code in it.) # ############################################################################### motif_requires_xpm=no if test "$have_motif" = yes ; then AC_MSG_CHECKING(whether Motif requires XPM) if test "$motif_version" = "unknown" || test "$motif_version" -ge 2000 then motif_requires_xpm=yes AC_MSG_RESULT(maybe) else AC_MSG_RESULT(no) fi fi ############################################################################### # # Checking whether Motif requires -lXp. # # Some versions of Motif (2.1.0, at least) require -lXp, the "X Printing # Extension". Why this extension isn't in -lXext with all the others, # I have no idea. # ############################################################################### have_xp_ext=no if test "$have_motif" = yes ; then have_xp_ext=no AC_CHECK_X_LIB(Xp, XpQueryExtension, [have_xp_ext=yes; MOTIF_LIBS="$MOTIF_LIBS -lXp"], [true], -lX11 -lXext -lm) fi ############################################################################### # # Checking whether Motif requires -lXintl (for _Xsetlocale.) # ############################################################################### have_xintl=no if test "$have_motif" = yes ; then AC_CHECK_X_LIB(Xintl, _Xsetlocale, [have_xintl=yes], [have_xintl=no], -lX11 -lXext -lm) if test "$have_xintl" = yes; then MOTIF_LIBS="$MOTIF_LIBS -lXintl" fi fi ############################################################################### # # Check for -lGL or -lMesaGL. # ############################################################################### have_gl=no ac_have_mesa_gl=no with_gl_req=unspecified gl_halfassed=no AC_ARG_WITH(gl,[ Graphics options: --with-gl Build those demos which depend on OpenGL.], [with_gl="$withval"; with_gl_req="$withval"],[with_gl=yes]) HANDLE_X_PATH_ARG(with_gl, --with-gl, GL) ac_mesagl_version=unknown ac_mesagl_version_string=unknown if test "$with_gl" = yes; then AC_CHECK_X_HEADER(GL/gl.h, have_gl=yes, have_gl=no) if test "$have_gl" = yes ; then AC_CHECK_X_HEADER(GL/glx.h, have_gl=yes, have_gl=no, [#include ]) fi # If we have the headers, try and figure out which vendor it's from. # if test "$have_gl" = yes ; then # We need to know whether it's MesaGL so that we know which libraries # to link against. # AC_CACHE_CHECK([whether GL is really MesaGL], ac_cv_have_mesa_gl, [ac_cv_have_mesa_gl=no if test "$ac_macosx" = no; then # WTF! MacOS 10.5.0 ships the Mesa GL headers! # It's not really Mesa, is it? AC_EGREP_X_HEADER(Mesa|MESA, GL/glx.h, [ac_cv_have_mesa_gl=yes]) fi]) ac_have_mesa_gl=$ac_cv_have_mesa_gl gl_lib_1="" GL_LIBS="" if test "$ac_macosx" = yes; then # Without these, every link against libGL gets a bunch of useless # warnings. # osx_crud="-bind_at_load -multiply_defined suppress" AC_MSG_RESULT(adding "$osx_crud" to GL_LIBS) GL_LIBS="$GL_LIBS $osx_crud" unset osx_crud # New lossage in 10.5.0: without this, we get: # ld: cycle in dylib re-exports with /usr/X11/lib/libGL.dylib # osx_crud="/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib" osx_crud="-Wl,-dylib_file,${osx_crud}:${osx_crud}" AC_MSG_RESULT(adding "$osx_crud" to GL_LIBS) GL_LIBS="$GL_LIBS $osx_crud" unset osx_crud # New lossage in 10.6.8: we can't allow -L/opt/local/lib to be in the # link line, or at runtime XQueryExtension gets a segv due to some kind # of library version skew. Libs must come from /usr/X11/lib even if # $prefix and/or $exec_prefix are set to /opt/local/. # AC_MSG_RESULT(omitting "$libdir" from LDFLAGS) libdir='' fi # Some versions of MesaGL are compiled to require -lpthread. # So if the Mesa headers exist, and -lpthread exists, then always # link -lpthread after the Mesa libs (be they named -lGL or -lMesaGL.) # # Oftentimes, AX_PTHREAD will bring in -lpthread as well; but that ends # up before -l(Mesa)GL, instead of after where it would belong. # if test "$ac_have_mesa_gl" = yes; then AC_CHECK_LIB(pthread, pthread_create, [GL_LIBS="-lpthread"], [],) fi # If we have Mesa headers, check to see if we can link against -lMesaGL. # If we don't have Mesa headers, or we don't have -lMesaGL, try -lGL. # Else, warn that GL is busted. (We have the headers, but no libs.) # if test "$ac_have_mesa_gl" = yes ; then AC_CHECK_X_LIB(MesaGL, glXCreateContext, [gl_lib_1="MesaGL" GL_LIBS="-lMesaGL -lMesaGLU $VIDMODE_LIBS $GL_LIBS"], [], -lMesaGLU $GL_LIBS -lX11 -lXext $VIDMODE_LIBS -lm) fi if test "$gl_lib_1" = "" ; then AC_CHECK_X_LIB(GL, glXCreateContext, [gl_lib_1="GL" GL_LIBS="-lGL -lGLU $VIDMODE_LIBS $GL_LIBS"], [], -lGLU $GL_LIBS -lX11 -lXext $VIDMODE_LIBS -lm) fi if test "$gl_lib_1" = "" ; then # we have headers, but no libs -- bail. have_gl=no ac_have_mesa_gl=no gl_halfassed=yes else # linking works -- we can build the GL hacks. AC_DEFINE(HAVE_GL) if test "$ac_have_mesa_gl" = yes ; then AC_DEFINE(HAVE_MESA_GL) fi fi fi # Now that we know we have GL headers and libs, do some more GL testing. # if test "$have_gl" = yes ; then # If it's MesaGL, we'd like to issue a warning if the version number # is less than or equal to 2.6, because that version had a security bug. # if test "$ac_have_mesa_gl" = yes; then AC_CACHE_CHECK([MesaGL version number], ac_cv_mesagl_version_string, [cat > conftest.$ac_ext < #ifndef MESA_MAJOR_VERSION # include # ifdef XMESA_MAJOR_VERSION /* Around Mesa 3.2, they took out the Mesa version number, so instead, we have to check the XMesa version number (the number of the X protocol support, which seems to be the same as the Mesa version number.) */ # define MESA_MAJOR_VERSION XMESA_MAJOR_VERSION # define MESA_MINOR_VERSION XMESA_MINOR_VERSION # else /* Oh great. Some time after 3.4, they took out the xmesa.h header file, so we have no way of telling what version of Mesa this is at all. So, we'll guess that the osmesa version (the "offscreen protocol") is less than or equal to the real mesa version number. Except that if OSmesa is 3.3, assume at least Mesa 3.4, since OSmesa was 3.3 in Mesa 3.4. And Mesa 3.3 had xmesa.h. What a complete load of shit! */ # include # define MESA_MAJOR_VERSION OSMESA_MAJOR_VERSION # define MESA_MINOR_VERSION OSMESA_MINOR_VERSION or newer, probably? # if OSMESA_MAJOR_VERSION == 3 && OSMESA_MINOR_VERSION == 3 # undef MESA_MINOR_VERSION # define MESA_MINOR_VERSION 4 or newer, probably? # endif # endif #endif configure: MESA_MAJOR_VERSION MESA_MINOR_VERSION EOF ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" mglv=`(eval "$ac_cpp conftest.$ac_ext") 2>&AC_FD_CC | grep configure:` # M4 sucks!! changequote(X,Y) mglv=`echo "$mglv" | sed -n \ 's/^configure: *\([0-9][0-9]*\) *\([0-9].*\)$/\1.\2/p'` changequote([,]) rm -f conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" if test "$mglv" = ""; then ac_mesagl_version=unknown ac_mesagl_version_string=unknown else ac_mesagl_version_string="$mglv" # M4 sucks!! changequote(X,Y) maj=`echo "$mglv" | sed -n 's/^\([0-9][0-9]*\)\..*$/\1/p'` min=`echo "$mglv" | sed -n 's/^.*\.\([0-9][0-9]*\).*$/\1/p'` changequote([,]) ac_mesagl_version=`echo "$maj * 1000 + $min" | bc` if test -z "$ac_mesagl_version"; then ac_mesagl_version=unknown ac_mesagl_version_string=unknown fi fi ac_cv_mesagl_version=$ac_mesagl_version ac_cv_mesagl_version_string=$ac_mesagl_version_string ]) ac_mesagl_version=$ac_cv_mesagl_version ac_mesagl_version_string=$ac_cv_mesagl_version_string fi # Check for OpenGL 1.1 features. # AC_CHECK_X_LIB($gl_lib_1, glBindTexture, [AC_DEFINE(HAVE_GLBINDTEXTURE)], [true], $GL_LIBS -lX11 -lXext -lm) fi elif test "$with_gl" != no; then echo "error: must be yes or no: --with-gl=$with_gl" exit 1 fi ############################################################################### # # Check for -lgle. # ############################################################################### have_gle=no with_gle_req=unspecified gle_halfassed=no AC_ARG_WITH(gle, [ --with-gle Build those demos which depend on GLE (the OpenGL "extrusion" library.)], [with_gle="$withval"; with_gle_req="$withval"],[with_gle=yes]) HANDLE_X_PATH_ARG(with_gle, --with-gle, GLE) GLE_LIBS="" if test "$have_gl" = no ; then true elif test "$with_gle" = yes; then AC_CHECK_X_HEADER(GL/gle.h, have_gle3=yes, have_gle3=no, [#include ]) if test "$have_gle3" = yes ; then have_gle=yes; else AC_CHECK_X_HEADER(GL/gutil.h, have_gle=yes, have_gle=no, [#include ]) if test "$have_gle" = yes ; then AC_CHECK_X_HEADER(GL/tube.h, have_gle=yes, have_gle=no, [#include ]) fi fi if test "$have_gle" = yes ; then have_gle=no gle_halfassed=yes AC_CHECK_X_LIB(gle, gleCreateGC, [have_gle=yes; gle_halfassed=no; GLE_LIBS="-lgle"], [], $GL_LIBS -lX11 -lXext -lm) fi if test "$have_gle" = yes ; then have_gle=no gle_halfassed=yes # sometimes the libmatrix stuff is included in libgle. look there first. # # I don't get it. For some reason, this test passes on SGI, as if # uview_direction_d() was in libgle -- but it's not, it's in libmatrix. # Yet the link is succeeding. Why??? # # AC_CHECK_X_LIB(gle, uview_direction_d, # [have_gle=yes; gle_halfassed=no], # [], $GL_LIBS -lX11 -lXext -lm) # As of GLE 3 this is in libgle, and has changed name to uview_direction! # *sigh* if test "$have_gle3" = yes ; then AC_CHECK_X_LIB(gle, uview_direction, [have_gle=yes; gle_halfassed=no], [], $GL_LIBS -lX11 -lXext -lm) fi # if it wasn't in libgle, then look in libmatrix. if test "$have_gle" = no ; then AC_CHECK_X_LIB(matrix, uview_direction_d, [have_gle=yes; gle_halfassed=no; GLE_LIBS="$GLE_LIBS -lmatrix"], [], $GL_LIBS -lX11 -lXext -lm) fi fi if test "$have_gle" = yes ; then AC_DEFINE(HAVE_GLE) if test "$have_gle3" = yes ; then AC_DEFINE(HAVE_GLE3) fi fi elif test "$with_gle" != no; then echo "error: must be yes or no: --with-gle=$with_gle" exit 1 fi ############################################################################### # # Handle --with-gles # ############################################################################### with_gles_req=unspecified AC_ARG_WITH(gles, [ --with-gles Target OpenGL ES 1.x API instead of OpenGL 1.3.], [with_gles="$withval"; with_gles_req="$withval"],[with_gles=no]) HANDLE_X_PATH_ARG(with_gles, --with-gles, JWZGLES) if test "$with_gles" = yes; then have_gles=yes AC_DEFINE(HAVE_JWZGLES) JWZGLES_OBJS="jwzgles.o" AC_MSG_RESULT(using OpenGL ES compatiblity shim) elif test "$with_gles" != no; then echo "error: must be yes or no: --with-gles=$with_xpm" exit 1 fi ############################################################################### # # Check for -lgdk_pixbuf. # These tests are for gdk_pixbuf usage of the hacks, # not xscreensaver-demo (thus we have to test again to get # the libraries right: don't want to pull in all of GTK # for the hacks.) # ############################################################################### have_gdk_pixbuf=no with_gdk_pixbuf_req=unspecified AC_ARG_WITH(pixbuf, [ --with-pixbuf Include support for the GDK-Pixbuf library in some demos, which will make it possible for them to read GIF, JPEG, and PNG files as well.], [with_gdk_pixbuf="$withval"; with_gdk_pixbuf_req="$withval"], [with_gdk_pixbuf=yes]) # if --with-pixbuf=/directory/ was specified, remember that directory so that # we can also look for the `gdk-pixbuf-config' program in that directory. case "$with_gdk_pixbuf" in /*) gdk_pixbuf_dir="$with_gdk_pixbuf" ;; *) gdk_pixbuf_dir="" ;; esac HANDLE_X_PATH_ARG(with_gdk_pixbuf, --with-pixbuf, GDK_PIXBUF) if test "$with_gdk_pixbuf" != yes -a "$with_gdk_pixbuf" != no ; then echo "error: must be yes or no: --with-pixbuf=$with_gdk_pixbuf" exit 1 fi if test "$with_gdk_pixbuf" = yes; then have_gdk_pixbuf=no pkgs='' ok="yes" pkg_check_version gdk-pixbuf-2.0 2.0.0 pkg_check_version gdk-pixbuf-xlib-2.0 2.0.0 have_gdk_pixbuf="$ok" if test "$have_gdk_pixbuf" = yes; then AC_CACHE_CHECK([for gdk-pixbuf includes], ac_cv_gdk_pixbuf_config_cflags, [ac_cv_gdk_pixbuf_config_cflags=`$pkg_config --cflags $pkgs`]) AC_CACHE_CHECK([for gdk-pixbuf libs], ac_cv_gdk_pixbuf_config_libs, [ac_cv_gdk_pixbuf_config_libs=`$pkg_config --libs $pkgs`]) fi ac_gdk_pixbuf_config_cflags=$ac_cv_gdk_pixbuf_config_cflags ac_gdk_pixbuf_config_libs=$ac_cv_gdk_pixbuf_config_libs if test "$have_gdk_pixbuf" = yes; then # # we appear to have pixbuf; check for headers/libs to be sure. # ac_save_gdk_pixbuf_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $ac_gdk_pixbuf_config_cflags" have_gdk_pixbuf=no # check for header A... AC_CHECK_X_HEADER(gdk-pixbuf/gdk-pixbuf.h, [have_gdk_pixbuf=yes]) # if that worked, check for header B... if test "$have_gdk_pixbuf" = yes; then have_gdk_pixbuf=no gdk_pixbuf_halfassed=yes AC_CHECK_X_HEADER(gdk-pixbuf/gdk-pixbuf-xlib.h, [have_gdk_pixbuf=yes gdk_pixbuf_halfassed=no]) # yay, it has a new name in Gtk 2.x... if test "$have_gdk_pixbuf" = no; then have_gdk_pixbuf=no gdk_pixbuf_halfassed=yes AC_CHECK_X_HEADER(gdk-pixbuf-xlib/gdk-pixbuf-xlib.h, [have_gdk_pixbuf=yes gdk_pixbuf_halfassed=no]) fi fi CPPFLAGS="$ac_save_gdk_pixbuf_CPPFLAGS" fi if test "$have_gdk_pixbuf" = yes; then # we have the headers, now check for the libraries have_gdk_pixbuf=no gdk_pixbuf_halfassed=yes AC_MSG_RESULT(checking for gdk_pixbuf usability...) # library A... AC_CHECK_X_LIB(c, gdk_pixbuf_new_from_file, [have_gdk_pixbuf=yes],, $ac_gdk_pixbuf_config_libs -lX11 -lXext -lm) # library B... if test "$have_gdk_pixbuf" = yes; then have_gdk_pixbuf=no AC_CHECK_X_LIB(c, gdk_pixbuf_xlib_init, [have_gdk_pixbuf=yes gdk_pixbuf_halfassed=no],, $ac_gdk_pixbuf_config_libs -lX11 -lXext -lm) fi fi if test "$have_gdk_pixbuf" = yes; then INCLUDES="$INCLUDES $ac_gdk_pixbuf_config_cflags" XPM_LIBS="$ac_gdk_pixbuf_config_libs" AC_DEFINE(HAVE_GDK_PIXBUF) 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 ############################################################################### # # Check for -lXpm. # ############################################################################### have_xpm=no with_xpm_req=unspecified AC_ARG_WITH(xpm, [ --with-xpm Include support for XPM files in some demos. (Not needed if Pixbuf is used.)], [with_xpm="$withval"; with_xpm_req="$withval"],[with_xpm=yes]) HANDLE_X_PATH_ARG(with_xpm, --with-xpm, XPM) if test "$with_xpm" = yes; then AC_CHECK_X_HEADER(X11/xpm.h, [have_xpm=yes AC_DEFINE(HAVE_XPM) XPM_LIBS="-lXpm $XPM_LIBS"],, [#include ]) elif test "$with_xpm" != no; then echo "error: must be yes or no: --with-xpm=$with_xpm" exit 1 fi # See comment near $motif_requires_xpm, above. # Need to do this here, after both Motif and XPM have been checked for. # if test "$have_motif" = yes -a "$have_xpm" = yes ; then if test "$motif_requires_xpm" = yes ; then MOTIF_LIBS="$MOTIF_LIBS $XPM_LIBS" fi fi if test "$XPM_LIBS" = "" ; then XPM_LIBS=$(MINIXPM) fi ############################################################################### # # Check for -ljpeg # ############################################################################### have_jpeg=no with_jpeg_req=unspecified jpeg_halfassed=no AC_ARG_WITH(jpeg, [ --with-jpeg Include support for the JPEG library.], [with_jpeg="$withval"; with_jpeg_req="$withval"], [with_jpeg=yes]) HANDLE_X_PATH_ARG(with_jpeg, --with-jpeg, JPEG) if test "$with_jpeg" != yes -a "$with_jpeg" != no ; then echo "error: must be yes or no: --with-jpeg=$with_jpeg" exit 1 fi if test "$with_jpeg" = yes; then have_jpeg=no AC_CHECK_X_HEADER(jpeglib.h, [have_jpeg=yes]) if test "$have_jpeg" = yes; then # we have the header, now check for the library have_jpeg=no jpeg_halfassed=yes AC_CHECK_X_LIB(jpeg, jpeg_start_compress, [have_jpeg=yes jpeg_halfassed=no JPEG_LIBS="-ljpeg" AC_DEFINE(HAVE_JPEGLIB)]) fi fi ############################################################################### # # Check for -lXft # ############################################################################### have_xutf8drawstring=no AC_CHECK_X_LIB(X11, Xutf8DrawString, [have_xutf8drawstring=yes], [true], -lX11 -lXext -lm) if test "$have_xutf8drawstring" = yes ; then AC_DEFINE(HAVE_XUTF8DRAWSTRING) fi have_xft=no with_xft_req=unspecified xft_halfassed=no AC_ARG_WITH(xft, [ --with-xft Include support for the X Freetype library.], [with_xft="$withval"; with_xft_req="$withval"], [with_xft=yes]) HANDLE_X_PATH_ARG(with_xft, --with-xft, Xft) if test "$with_xft" != yes -a "$with_xft" != no ; then echo "error: must be yes or no: --with-xft=$with_xft" exit 1 fi if test "$with_xft" = yes; then pkgs='' ok="yes" pkg_check_version xft 2.1.0 have_xft="$ok" if test "$have_xft" = yes; then AC_CACHE_CHECK([for Xft includes], ac_cv_xft_config_cflags, [ac_cv_xft_config_cflags=`$pkg_config --cflags $pkgs`]) AC_CACHE_CHECK([for Xft libs], ac_cv_xft_config_libs, [ac_cv_xft_config_libs=`$pkg_config --libs $pkgs`]) fi ac_xft_config_cflags=$ac_cv_xft_config_cflags ac_xft_config_libs=$ac_cv_xft_config_libs if test "$have_xft" = yes; then # # we appear to have Xft; check for headers/libs to be sure. # ac_save_xft_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $ac_xft_config_cflags" have_xft=no AC_CHECK_X_HEADER(X11/Xft/Xft.h, [have_xft=yes]) CPPFLAGS="$ac_save_xft_CPPFLAGS" fi if test "$have_xft" = yes; then # we have the headers, now check for the libraries have_xft=no xft_halfassed=yes AC_MSG_RESULT(checking for Xft usability...) AC_CHECK_X_LIB(c, XftDrawStringUtf8, [have_xft=yes],, $ac_xft_config_libs -lX11 -lXext -lm) fi if test "$have_xft" = no; then AC_MSG_RESULT(checking for Xft usability... no) fi fi if test "$have_xft" = yes; then INCLUDES="$INCLUDES $ac_xft_config_cflags" XFT_LIBS="$ac_xft_config_libs" XFT_SRCS='' XFT_OBJS='' AC_DEFINE(HAVE_XFT) else XFT_LIBS='' XFT_SRCS='$(UTILS_SRC)/xft.c' XFT_OBJS='$(UTILS_BIN)/xft.o' fi ############################################################################### # # Check for pty support: this allows 'phosphor' and 'apple2' # to run curses-based programs, or be used as terminal windows. # ############################################################################### PTY_LIBS= AC_CHECK_HEADERS(pty.h util.h) AC_CHECK_X_LIB(util, forkpty, [PTY_LIBS="-lutil" ac_have_forkpty=yes AC_DEFINE(HAVE_FORKPTY)]) if test "$ac_have_forkpty" != yes ; then # we don't need (or have) -lutil on MacOS 10.4.2... AC_CHECK_X_LIB(c, forkpty, [PTY_LIBS="" AC_DEFINE(HAVE_FORKPTY)]) fi ############################################################################### # # Check for the XSHM server extension. # ############################################################################### have_xshm=no with_xshm_req=unspecified AC_ARG_WITH(xshm-ext, [ --with-xshm-ext Include support for the Shared Memory extension.], [with_xshm="$withval"; with_xshm_req="$withval"],[with_xshm=yes]) HANDLE_X_PATH_ARG(with_xshm, --with-xshm-ext, XSHM) if test "$with_xshm" = yes; then # first check for Xshm.h. AC_CHECK_X_HEADER(X11/extensions/XShm.h, [have_xshm=yes],, [#include ]) # if that succeeded, then check for sys/ipc.h. if test "$have_xshm" = yes; then have_xshm=no AC_CHECK_X_HEADER(sys/ipc.h, [have_xshm=yes]) fi # if that succeeded, then check for sys/shm.h. if test "$have_xshm" = yes; then have_xshm=no AC_CHECK_X_HEADER(sys/shm.h, [have_xshm=yes]) fi # AIX is pathological, as usual: apparently it's normal for the Xshm headers # to exist, but the library code to not exist. And even better, the library # code is in its own library: libXextSam.a. So, if we're on AIX, and that # lib doesn't exist, give up. (This lib gets added to X_EXTRA_LIBS, and # that's not quite right, but close enough.) # case "$host" in *-aix*) if [ `uname -v` -eq 3 ]; then have_xshm=no AC_CHECK_X_LIB(XextSam, XShmQueryExtension, [have_xshm=yes; X_EXTRA_LIBS="$X_EXTRA_LIBS -lXextSam"], [true], -lX11 -lXext -lm) fi ;; esac # if that succeeded, then we've really got it. if test "$have_xshm" = yes; then AC_DEFINE(HAVE_XSHM_EXTENSION) fi elif test "$with_xshm" != no; then echo "error: must be yes or no: --with-xshm-ext=$with_xshm" exit 1 fi ############################################################################### # # Check for the DOUBLE-BUFFER server extension. # ############################################################################### have_xdbe=no with_xdbe_req=unspecified AC_ARG_WITH(xdbe-ext, [ --with-xdbe-ext Include support for the DOUBLE-BUFFER extension.], [with_xdbe="$withval"; with_xdbe_req="$withval"],[with_xdbe=yes]) HANDLE_X_PATH_ARG(with_xdbe, --with-xdbe-ext, DOUBLE-BUFFER) if test "$with_xdbe" = yes; then AC_CHECK_X_HEADER(X11/extensions/Xdbe.h, [have_xdbe=yes],, [#include ]) if test "$have_xdbe" = yes; then AC_DEFINE(HAVE_DOUBLE_BUFFER_EXTENSION) fi elif test "$with_xdbe" != no; then echo "error: must be yes or no: --with-xdbe-ext=$with_xshm" exit 1 fi ############################################################################### # # Check for the SGI XReadDisplay server extension. # # Note: this has to be down here, rather than up with the other server # extension tests, so that the output of `configure --help' is in the # right order. Arrgh! # ############################################################################### have_readdisplay=no with_readdisplay_req=unspecified AC_ARG_WITH(readdisplay, [ --with-readdisplay Include support for the XReadDisplay extension.], [with_readdisplay="$withval"; with_readdisplay_req="$withval"], [with_readdisplay=yes]) HANDLE_X_PATH_ARG(with_readdisplay, --with-readdisplay, XReadDisplay) if test "$with_readdisplay" = yes; then AC_CHECK_X_HEADER(X11/extensions/readdisplay.h, AC_DEFINE(HAVE_READ_DISPLAY_EXTENSION),, [#include ]) elif test "$with_readdisplay" != no; then echo "error: must be yes or no: --with-readdisplay=$with_readdisplay" exit 1 fi ############################################################################### # # Check for a directory full of images to use as the default value # of the "imageDirectory" preference. # ############################################################################### have_imagedir=no with_imagedir_req=unspecified AC_ARG_WITH(image-directory, [ --with-image-directory Arg is the default directory from which some demos will choose random images to display.], [with_imagedir="$withval"; with_imagedir_req="$withval"], [with_imagedir=yes]) # no HANDLE_X_PATH_ARG for this one case "$with_imagedir" in /*) # absolute path AC_MSG_CHECKING([for image directory $with_imagedir]) if test -d "$with_imagedir" ; then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) with_imagedir="" fi ;; yes) with_imagedir="" #### Could use some more defaults here... for dd in \ "/usr/share/backgrounds/images/" \ "/usr/share/wallpapers/" \ "/Library/Desktop Pictures/" \ ; do if test -z "$with_imagedir"; then AC_MSG_CHECKING([for image directory $dd]) if test -d "$dd" ; then AC_MSG_RESULT(yes) with_imagedir="$dd" else AC_MSG_RESULT(no) fi fi done ;; no) with_imagedir="" ;; *) echo "error: must be an absolute path: --with-image-directory=$with_imagedir_req" exit 1 ;; esac ac_cv_imagedir="$with_imagedir" DEFAULT_IMAGES_P='True' DEFAULT_IMAGE_DIRECTORY="$ac_cv_imagedir" if test -z "$DEFAULT_IMAGE_DIRECTORY" ; then DEFAULT_IMAGES_P='False' fi ############################################################################### # # Pick a text file to use as the default of the "textFile" preference. # Any old file will do, but preferably one that will make interesting # shapes when displayed by "starwars" and "fontglide". # ############################################################################### have_textfile=no with_textfile_req=unspecified AC_ARG_WITH(text-file, [ --with-text-file=FILE By default, some demos may display this file.], [with_textfile="$withval"; with_textfile_req="$withval"], [with_textfile=yes]) # no HANDLE_X_PATH_ARG for this one case "$with_textfile" in /*) # absolute path AC_MSG_CHECKING([for text file $with_textfile]) if test -f "$with_textfile" ; then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) with_textfile="" fi ;; yes) with_textfile="" #### Could use some more defaults here... for f in \ "/usr/X11R6/lib/X11/doc/README" \ "/usr/share/doc/xserver-common/copyright" \ "/usr/share/doc/xserver-xorg-core/copyright" \ "/usr/X11R6/README" \ "/usr/share/doc/libX11*/COPYING" \ "/usr/X11/share/X11/doc/README*" \ "/usr/share/doc/debian/debian-manifesto" \ ; do if test -z "$with_textfile"; then AC_MSG_CHECKING([for text file $f]) f=`/bin/ls $f 2>&- | head -1` if test -f "$f" ; then AC_MSG_RESULT(yes) with_textfile="$f" else AC_MSG_RESULT(no) fi fi done ;; no) with_textfile="" ;; *) echo "error: must be an absolute path: --with-text-file=$with_textfile_req" exit 1 ;; esac ac_cv_textfile="$with_textfile" DEFAULT_TEXT_FILE="$ac_cv_textfile" ############################################################################### # # Check the browser to see help URL # ############################################################################### have_browser=no with_browser_req=unspecified AC_ARG_WITH(browser, [ --with-browser=BROWSER Specify the web browser used to show the help URL.], [with_browser="$withval"; with_browser_req="$withval"], [with_browser=no ]) # no HANDLE_X_PATH_ARG for this one case "$with_browser" in no ) ;; * ) WITH_BROWSER=$with_browser gnome_open_program=$with_browser AC_MSG_CHECKING([for browser $with_browser]) with_browser_fullpath=`which $with_browser 2>/dev/null` case $with_browser_fullpath in /* ) AC_MSG_RESULT(yes) have_browser=yes ;; * ) AC_MSG_RESULT(no) # Only warning: we don't want to install all packages for the # dependency of the browser in building stage... echo "WARNING: browser not found: --with-browser=$with_browser" ;; esac ;; esac ac_cv_browser="$with_browser" ############################################################################### # # Check whether it's ok to install some hacks as setuid (e.g., "sonar") # This should be safe, but let's give people the option. # ############################################################################### setuid_hacks_default=no setuid_hacks="$setuid_hacks_default" AC_ARG_WITH(setuid-hacks, [ --with-setuid-hacks Allow some demos to be installed `setuid root' (which is needed in order to ping other hosts.) ], [setuid_hacks="$withval"], [setuid_hacks="$setuid_hacks_default"]) HANDLE_X_PATH_ARG(setuid_hacks, --with-setuid-hacks, setuid hacks) if test "$setuid_hacks" = yes; then true elif test "$setuid_hacks" != no; then echo "error: must be yes or no: --with-setuid-hacks=$setuid_hacks" exit 1 fi ############################################################################### # # Check for --with-record-animation # ############################################################################### record_anim_default=no record_anim="$record_anim_default" AC_ARG_WITH(record-animation, [ --with-record-animation Include code for generating MP4 videos. ], [record_anim="$withval"], [record_anim="$record_anim_default"]) HANDLE_X_PATH_ARG(record_anim, --with-record-animation, record animation) if test "$record_anim" = yes; then true elif test "$record_anim" != no; then echo "error: must be yes or no: --with-record-animation=$record_anim" exit 1 fi if test "$record_anim" = yes; then if test "$have_gdk_pixbuf" != yes; then AC_MSG_ERROR(--with-record-animation requires GDK-Pixbuf) else AC_MSG_RESULT(enabling --with-record-animation) AC_DEFINE(HAVE_RECORD_ANIM) ANIM_OBJS='$(ANIM_OBJS)' ANIM_LIBS='$(ANIM_LIBS)' fi fi ############################################################################### # # Done testing. Now, set up the various -I and -L variables, # and decide which GUI program to build by default. # ############################################################################### DEPEND=makedepend DEPEND_FLAGS= DEPEND_DEFINES= if test \! -z "$includedir" ; then INCLUDES="$INCLUDES -I$includedir" fi if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi PREFERRED_DEMO_PROGRAM='' ALL_DEMO_PROGRAMS= if test "$have_motif" = yes; then PREFERRED_DEMO_PROGRAM=xscreensaver-demo-Xm ALL_DEMO_PROGRAMS="$PREFERRED_DEMO_PROGRAM $ALL_DEMO_PROGRAMS" fi if test "$have_gtk" = yes; then PREFERRED_DEMO_PROGRAM=xscreensaver-demo-Gtk ALL_DEMO_PROGRAMS="$PREFERRED_DEMO_PROGRAM $ALL_DEMO_PROGRAMS" fi if test "$have_kerberos" = yes; then PASSWD_SRCS="$PASSWD_SRCS \$(KERBEROS_SRCS)" PASSWD_OBJS="$PASSWD_OBJS \$(KERBEROS_OBJS)" fi if test "$have_pam" = yes; then PASSWD_SRCS="$PASSWD_SRCS \$(PAM_SRCS)" PASSWD_OBJS="$PASSWD_OBJS \$(PAM_OBJS)" INSTALL_PAM="install-pam" fi if test "$enable_pam_check_account_type" = yes; then COMMENT_PAM_CHECK_ACCOUNT="" else COMMENT_PAM_CHECK_ACCOUNT="#" fi if test "$have_passwd_helper" = yes; then PASSWD_SRCS="$PASSWD_SRCS \$(PWHELPER_SRCS)" PASSWD_OBJS="$PASSWD_OBJS \$(PWHELPER_OBJS)" fi PASSWD_SRCS="$PASSWD_SRCS \$(PWENT_SRCS)" PASSWD_OBJS="$PASSWD_OBJS \$(PWENT_OBJS)" if test "$enable_locking" = yes; then LOCK_SRCS='$(LOCK_SRCS_1) $(PASSWD_SRCS)' LOCK_OBJS='$(LOCK_OBJS_1) $(PASSWD_OBJS)' else LOCK_SRCS='$(NOLOCK_SRCS_1)' LOCK_OBJS='$(NOLOCK_OBJS_1)' fi if test "$ac_macosx" = yes; then EXES_OSX='$(EXES_OSX)' SCRIPTS_OSX='$(SCRIPTS_OSX)' MEN_OSX='$(MEN_OSX)' else EXES_OSX= SCRIPTS_OSX= MEN_OSX= fi INSTALL_SETUID='$(INSTALL_PROGRAM) $(SUID_FLAGS)' if test "$need_setuid" = yes; then NEED_SETUID=yes else NEED_SETUID=no fi if test "$setuid_hacks" = yes; then SETUID_HACKS=yes else SETUID_HACKS=no fi tab=' ' if test "$have_gl" = yes; then GL_EXES='$(GL_EXES)' SUID_EXES='$(SUID_EXES)' RETIRED_GL_EXES='$(RETIRED_GL_EXES)' GL_UTIL_EXES='$(GL_UTIL_EXES)' GL_MEN='$(GL_MEN)' GL_KLUDGE=" " else GL_KLUDGE="-" fi if test "$have_gle" = yes; then GLE_EXES='$(GLE_EXES)' GLE_KLUDGE=" " else GLE_KLUDGE="-" fi if test "$have_jpeg" = yes -a "$have_gdk_pixbuf" = yes; then JPEG_EXES='$(JPEG_EXES)' fi # Another substitution in the XScreenSaver.ad.in file: # if test "$gnome_open_program" != ''; then GNOME24='' GNOME22='! ' NOGNOME='! ' elif test "$gnome_url_show_program" != ''; then GNOME24='! ' GNOME22='' NOGNOME='! ' else GNOME24='! ' GNOME22='! ' NOGNOME='' fi # Set PO_DATADIR to something sensible. # AC_MSG_CHECKING([for locale directory]) if test -n "$GTK_DATADIR" ; then PO_DATADIR="$GTK_DATADIR" elif test "$have_gtk" = yes; then PO_DATADIR=`$pkg_config --variable=prefix gtk+-2.0` PO_DATADIR="$PO_DATADIR/share" fi if test -z "$PO_DATADIR" ; then # # #### Total fucking kludge -- # Map /build/prefix/usr/X11R6/share/ to /build/prefix/usr/share/ # but of course we need to expand all the nested variables to do that... # dd=`eval eval eval eval eval eval eval eval eval eval eval echo $datadir` PO_DATADIR=`echo $dd | sed 's@/X11R6/@/@'` fi AC_MSG_RESULT($PO_DATADIR/locale) # canonicalize slashes. HACK_CONF_DIR=`echo "${HACK_CONF_DIR}" | sed 's@/$@@;s@//*@/@g'` # gcc 3.0 likes to issue this warning for every file: # # cc1: warning: changing search order for system directory "/usr/local/include" # cc1: warning: as it has already been specified as a non-system directory # # Yay. We can only avoid that by deleting "-I${prefix}/include" from the list. # Which *should* be totally redundant, and thus an ok thing to delete? # INCLUDES=`echo "$INCLUDES" | sed 's@ -I${prefix}/include@@g;'` ############################################################################### # # Perform substitutions and write Makefiles. # ############################################################################### AC_SUBST(INCLUDES) AC_SUBST(PREFERRED_DEMO_PROGRAM) AC_SUBST(ALL_DEMO_PROGRAMS) AC_SUBST(SAVER_LIBS) AC_SUBST(MOTIF_LIBS) AC_SUBST(GTK_LIBS) AC_SUBST(XML_LIBS) AC_SUBST(JPEG_LIBS) AC_SUBST(HACK_LIBS) AC_SUBST(XPM_LIBS) AC_SUBST(PTY_LIBS) AC_SUBST(GL_LIBS) AC_SUBST(GLE_LIBS) AC_SUBST(XDPMS_LIBS) AC_SUBST(XINERAMA_LIBS) AC_SUBST(PASSWD_LIBS) AC_SUBST(INSTALL_SETUID) AC_SUBST(SETUID_HACKS) AC_SUBST(INSTALL_DIRS) AC_SUBST(NEED_SETUID) AC_SUBST(INSTALL_PAM) AC_SUBST(HAVE_PAM_FAIL_DELAY) AC_SUBST(COMMENT_PAM_CHECK_ACCOUNT) AC_SUBST(NEW_LOGIN_COMMAND) AC_SUBST(NEW_LOGIN_COMMAND_P) AC_SUBST(DEFAULT_IMAGES_P) AC_SUBST(DEFAULT_IMAGE_DIRECTORY) AC_SUBST(DEFAULT_TEXT_FILE) AC_SUBST(WITH_BROWSER) AC_SUBST(COMMENT_DEMO_GLADE2_GTK_2_22_HEAD) AC_SUBST(COMMENT_DEMO_GLADE2_GTK_2_22_TAIL) AC_SUBST(OBJCC) AC_SUBST(EXES_OSX) AC_SUBST(SCRIPTS_OSX) AC_SUBST(MEN_OSX) AC_SUBST(PASSWD_SRCS) AC_SUBST(PASSWD_OBJS) AC_SUBST(XMU_SRCS) AC_SUBST(XMU_OBJS) AC_SUBST(XMU_LIBS) AC_SUBST(XFT_SRCS) AC_SUBST(XFT_OBJS) AC_SUBST(XFT_LIBS) AC_SUBST(SAVER_GL_SRCS) AC_SUBST(SAVER_GL_OBJS) AC_SUBST(SAVER_GL_LIBS) AC_SUBST(LOCK_SRCS) AC_SUBST(LOCK_OBJS) AC_SUBST(JPEG_EXES) AC_SUBST(GL_EXES) AC_SUBST(RETIRED_GL_EXES) AC_SUBST(SUID_EXES) AC_SUBST(GL_UTIL_EXES) AC_SUBST(GL_MEN) AC_SUBST(GL_KLUDGE) AC_SUBST(GLE_EXES) AC_SUBST(GLE_KLUDGE) AC_SUBST(JWZGLES_OBJS) AC_SUBST(GNOME24) AC_SUBST(GNOME22) AC_SUBST(NOGNOME) AC_SUBST(HACKDIR) AC_SUBST(HACKDIR_FULL) AC_SUBST(GTK_DATADIR) AC_SUBST(PO_DATADIR) AC_SUBST(HACK_CONF_DIR) AC_SUBST(GTK_EXTRA_OBJS) AC_SUBST(ANIM_OBJS) AC_SUBST(ANIM_LIBS) APPDEFAULTS=$ac_x_app_defaults AC_SUBST(APPDEFAULTS) AC_SUBST(DEPEND) AC_SUBST(DEPEND_FLAGS) AC_SUBST(DEPEND_DEFINES) AC_SUBST(PERL) AC_OUTPUT(Makefile utils/Makefile driver/Makefile driver/xscreensaver.pam driver/xscreensaver-demo.glade2 hacks/Makefile hacks/glx/Makefile po/Makefile.in driver/XScreenSaver.ad) ############################################################################### # # Print some warnings at the end. # ############################################################################### warn_prefix_1=" Warning:" warn_prefix_2=" Note:" warn_prefix="$warn_prefix_1" warning=no warnsep=' #################################################################' warnpre() { if test "$warning" = no ; then echo '' ; echo "$warnsep" ; echo '' warning=yes fi } warn() { warnpre if test "$warning" = long ; then echo '' ; fi warning=yes rest="$@" echo "$warn_prefix $rest" } warnL() { was=$warning warnpre warning=yes if test "$was" != no ; then echo '' ; fi rest="$@" echo "$warn_prefix $rest" } warn2() { rest="$@" echo " $rest" warning=long } note() { warn_prefix="$warn_prefix_2" warn $@ warn_prefix="$warn_prefix_1" } noteL() { warn_prefix="$warn_prefix_2" warnL $@ warn_prefix="$warn_prefix_1" } # ac_prog_cc_no_pthread normally only happens on AIX, because according # to AX_PTHREAD, AIX needs CC=xlc_r or CC=cc_r to do threads. # If CC is specified, it takes precedence over --with-pthread. if test "$ac_prog_cc_no_pthread" ; then warnL "You requested $ac_original_cc for the C compiler, but it doesn't" warn2 "support POSIX threads." echo "" warn2 "If you have multiple CPU cores, try CC=$PTHREAD_CC." elif test "$with_pthread_req" = yes -a "$have_pthread" = no ; then warn 'POSIX threads were requested, but were not found.' fi if test "$with_sgi_req" = yes -a "$have_sgi" = no ; then warn 'The SGI saver extension was requested, but was not found.' fi if test "$with_xidle_req" = yes -a "$have_xidle" = no ; then warn 'The XIdle extension was requested, but was not found.' fi if test "$with_xshm_req" = yes -a "$have_xshm" = no ; then warn 'The XSHM extension was requested, but was not found.' fi if test "$with_xdbe_req" = yes -a "$have_xdbe" = no ; then warn 'The DOUBLE-BUFFER extension was requested, but was not found.' fi if test "$with_sgivc_req" = yes -a "$have_sgivc" = no ; then warn 'The SGI-VIDEO-CONTROL extension was requested, but was not found.' fi if test "$with_dpms_req" = yes -a "$have_dpms" = no ; then warn 'The DPMS extension was requested, but was not found.' fi if test "$with_xinerama_req" = yes -a "$have_xinerama" = no ; then warn 'The Xinerama extension was requested, but was not found.' fi if test "$with_xf86vmode_req" = yes -a "$have_xf86vmode" = no ; then warn 'The XF86VMODE extension was requested, but was not found.' fi if test "$with_randr_req" = yes -a "$have_randr" = no ; then warn 'The RANDR extension was requested, but was not found.' fi if test "$with_proc_interrupts_req" = yes -a "$have_proc_interrupts" = no; then warn "Checking of /proc/interrupts was requested, but it's bogus." fi if test "$pkg_config" = false ; then warnL 'The "pkg-config" program was not found. Without that,' warn2 "detection of the various GTK libraries won't work." else pkgerr=`$pkg_config --list-all 2>&1 >/dev/null` if test "x$pkgerr" != "x" ; then warnL 'The "pkg-config" program produces errors. This often causes' warn2 "detection of the various GTK libraries to malfunction." warn2 "The errors are:" echo '' echo "$pkgerr" | sed 's/^/ > /g' fi fi if test "$gtk_halfassed" != no ; then warnL "GTK version $gtk_halfassed was found, but at least one supporting" warn2 "library ($gtk_halfassed_lib) was not, so GTK can't be used." warn2 "Perhaps some of the development packages are not installed?" if test "$have_gtk" = yes ; then v="$ac_gtk_version_string" warn2 "GTK $v is also installed, so it will be used instead." warn2 "Please read the above output and the \`config.log' file" warn2 "for more details." fi fi motif_warn2() { warn2 'Though the Motif front-end to xscreensaver is still' warn2 'maintained, it is no longer being updated with new' warn2 'features: all new development on the xscreensaver-demo' warn2 'program is happening in the GTK version, and not in the' warn2 'Motif version. It is recommended that you build against' warn2 'GTK instead of Motif. See .' } if test "$have_motif" = no -a "$have_gtk" = no; then if test "$with_motif" = yes; then warnL "Neither the GTK nor Motif libraries were found; the" warn2 "\`xscreensaver-demo' program requires one of these." echo '' motif_warn2 else warnL "The GTK libraries do not seem to be available; the" warn2 "\`xscreensaver-demo' program requires them." # echo '' # warn2 'You can use Motif or Lesstif instead of GTK (use the' # warn2 "\`--with-motif' option) but that is NOT recommended." # motif_warn2 fi elif test "$with_motif_req" = yes -a "$have_motif" = no ; then warnL "Use of Motif was requested, but it wasn't found;" warn2 "Gtk will be used instead." elif test "$jurassic_gtk" = yes ; then pref_gtk=2.0 v="$ac_gtk_version_string" if test "$with_gtk_req" = yes -a "$ac_gtk_version" = "unknown" ; then warnL "Use of Gtk was requested, but its version number is unknown;" elif test "$with_gtk_req" = yes ; then warnL "Use of Gtk was requested, but it is version $v;" else warnL "Gtk was found on this system, but it is version $v;" fi warn2 "Gtk $pref_gtk or newer is required." elif test "$with_gtk_req" = yes -a "$have_gtk" = no ; then warnL "Use of Gtk was requested, but it wasn't found." fi if test "$have_gtk" = yes -a "$have_gdk_pixbuf" = no ; then warn "GTK is being used, but the GDK-Pixbuf library and/or" warn2 "headers were not found. That can't be good. Please" warn2 "install the GDK-Pixbuf development kit and re-configure." fi if test "$have_motif" = yes -a "$have_lesstif" = yes ; then preferred_lesstif=0.92 if test "$lesstif_version" = unknown; then warnL "Unable to determine the LessTif version number!" warn2 "Make sure you are using version $preferred_lesstif or newer." warn2 "See ." elif test \! $lesstif_version -gt 82; then warnL "LessTif version $lesstif_version_string is being used." warn2 "LessTif versions 0.82 and earlier are too buggy to" warn2 "use with XScreenSaver; it is strongly recommended" warn2 "that you upgrade to at least version $preferred_lesstif!" warn2 "See ." fi fi if test "$have_motif" = yes -a "$have_gtk" = no ; then warn 'Motif is being used, and GTK is not.' echo '' motif_warn2 fi if test "$with_xpm_req" = yes -a "$have_xpm" = no; then warnL 'Use of XPM was requested, but it was not found.' fi if test "$with_gdk_pixbuf_req" = yes -a "$have_gdk_pixbuf" = no; then warnL 'Use of GDK-Pixbuf was requested, but it was not found.' fi if test "$have_gdk_pixbuf" = no -o "$gdk_pixbuf_halfassed" = yes || \ test "$have_gdk_pixbuf" = no -a "$have_xpm" = no ; then if test "$with_gdk_pixbuf_req" = yes ; then true elif test "$with_gdk_pixbuf_req" = no ; then warnL 'The GDK-Pixbuf library is not being used.' else warnL 'The GDK-Pixbuf library was not found.' fi if test "$with_xpm_req" = yes -o "$have_xpm" = yes ; then true elif test "$with_xpm_req" = no ; then warnL 'The XPM library is not being used.' else warnL 'The XPM library was not found.' fi if test "$have_gdk_pixbuf" = no -a "$have_xpm" = yes ; then warn2 'The XPM library is being used instead.' fi if test "$gdk_pixbuf_halfassed" = yes ; then echo '' warn2 'More specifically, we found the headers, but not the' warn2 'libraries; so either GDK-Pixbuf is half-installed on this' warn2 "system, or something else went wrong. The \`config.log'" warn2 'file might contain some clues.' fi echo '' warn2 'Some of the demos will not use images as much as they could.' warn2 'You should consider installing GDK-Pixbuf and re-running' warn2 'configure. (GDK-Pixbuf is recommended over XPM, as it' warn2 'provides support for more image formats.)' fi if test "$have_jpeg" = no ; then if test "$with_jpeg_req" = yes ; then warnL 'Use of libjpeg was requested, but it was not found.' elif test "$with_jpeg_req" = no ; then noteL 'The JPEG library is not being used.' else noteL 'The JPEG library was not found.' fi if test "$jpeg_halfassed" = yes ; then echo '' warn2 'More specifically, we found the headers, but not the' warn2 'library; so either JPEG is half-installed on this' warn2 "system, or something else went wrong. The \`config.log'" warn2 'file might contain some clues.' echo '' fi if test "$have_gdk_pixbuf" = no ; then warn2 "This means that it won't be possible for the image-manipulating" warn2 "display modes to load files from disk; and it also means that" warn2 "the \`webcollage' program will be much slower." else warn2 "This means the \`webcollage' program will be much slower." fi fi if test "$have_xft" = no ; then if test "$with_xft_req" = yes ; then warnL "Use of libXft was requested, but it was not found." elif test "$with_xft_req" = no ; then noteL 'The Xft library is not being used.' else noteL "The Xft library was not found." fi if test "$xft_halfassed" = yes ; then echo '' warn2 'More specifically, we found the headers, but not the' warn2 'libraries; so either Xft is half-installed on this' warn2 "system, or something else went wrong. The \`config.log'" warn2 'file might contain some clues.' echo '' fi warn2 "This means that fonts won't be anti-aliased." fi if test "$have_gl" = yes -a "$ac_have_mesa_gl" = yes ; then preferred_mesagl=3.4 mgv="$ac_mesagl_version_string" pgl="$preferred_mesagl" if test "$ac_mesagl_version" = unknown; then true # warnL "Unable to determine the MesaGL version number!" # warn2 "Make sure you are using version $preferred_mesagl or newer." elif test \! "$ac_mesagl_version" -gt 2006; then warnL "MesaGL version number is $mgv --" warn2 "MesaGL 2.6 and earlier have a security bug. It is strongly" warn2 "recommended that you upgrade to at least version $preferred_mesagl." elif test \! "$ac_mesagl_version" -gt 3003; then warnL "MesaGL version number is $mgv --" warn2 "MesaGL 3.3 and earlier have some bugs; it is recommended" warn2 "that you upgrade to $pgl or newer." fi fi if test "$have_gl" = no ; then if test "$with_gl_req" = yes ; then warnL 'Use of GL was requested, but it was not found.' elif test "$with_gl_req" = no ; then noteL 'The OpenGL 3D library is not being used.' else noteL 'The OpenGL 3D library was not found.' fi if test "$gl_halfassed" = yes ; then echo '' warn2 'More specifically, we found the headers, but not the' warn2 'libraries; so either GL is half-installed on this' warn2 "system, or something else went wrong. The \`config.log'" warn2 'file might contain some clues.' fi echo '' warn2 'Those demos which use 3D will not be built or installed.' warn2 'You might want to consider installing OpenGL and' warn2 're-running configure.' fi if test "$have_gl" = yes -a "$have_gle" = no ; then # nobody cares about this; don't print the warning unless it was # requested and not found, or halfway-found. if test "$with_gle_req" = yes -o "$gle_halfassed" = yes ; then if test "$with_gle_req" = yes ; then noteL 'Use of the GLE (GL Extrusion) library was requested, but' warn2 'it was not found (though the OpenGL library was found, and' warn2 'is being used.)' elif test "$with_gle_req" = no ; then noteL 'The OpenGL Library is being used, but the GLE (GL Extrusion)' warn2 'library is not.' else noteL 'The OpenGL Library was found, but the GLE (GL Extrusion)' warn2 'library was not.' fi if test "$gle_halfassed" = yes ; then echo '' warn2 'More specifically, we found the headers, but not the' warn2 'libraries; so either GLE is half-installed on this' warn2 "system, or something else went wrong. The \`config.log'" warn2 'file might contain some clues.' fi echo '' warn2 'Some of the OpenGL (3D) demos (those that depend on GLE)' warn2 'will not be built or installed. You might want to consider' warn2 'installing GLE and re-running configure. You can find the' warn2 'GLE library at ' fi fi if test "$with_readdisplay_req" = yes -a "$have_readdisplay" = no ; then warn 'Use of XReadDisplay was requested, but it was not found.' fi if test "$with_kerberos_req" = yes -a "$have_kerberos" = no ; then warn 'Use of Kerberos was requested, but it was not found.' fi if test "$with_pam_req" = yes -a "$have_pam" = no ; then warn 'Use of PAM was requested, but it was not found.' fi if test "$with_shadow_req" = yes -a "$have_shadow" = no ; then warn 'Use of shadow passwords was requested, but they were not found.' fi if test "$ac_macosx" = yes ; then if test "$enable_locking" = yes ; then warn "You have specified --enable-locking on MacOS X." warn2 "THIS DOES NOT WORK! Don't do this!" fi fi # You are in a twisty maze of namespaces and syntaxes, all alike. # Fuck the skull of Unix. # bindir=`eval eval eval eval eval eval eval echo $bindir` HACKDIR=`eval eval eval eval eval eval eval echo $HACKDIR` HACK_CONF_DIR=`eval eval eval eval eval eval eval echo $HACK_CONF_DIR` # canonicalize slashes. bindir=`echo "${bindir}" | sed 's@/$@@;s@//*@/@g'` HACKDIR=`echo "${HACKDIR}" | sed 's@/$@@;s@//*@/@g'` HACK_CONF_DIR=`echo "${HACK_CONF_DIR}" | sed 's@/$@@;s@//*@/@g'` # Sanity check the hackdir for bad_choice in xscreensaver xscreensaver-demo xscreensaver-command ; do if test "${HACKDIR}" = "${bindir}/${bad_choice}" ; then echo "" AC_MSG_ERROR([\"--with-hackdir=${bindir}/${bad_choice}\" won't work. There will be an executable installed with that name, so that can't be the name of a directory as well. Please re-configure with a different directory name.]) fi done do_dir_warning=no # Now let's warn if there's a previous RPM version already installed. # But don't bother with this test if we are currently *building* an RPM. if test -z "$RPM_PACKAGE_VERSION" ; then rpmnames="xscreensaver xscreensaver-base xscreensaver-extras" # M4 sucks!! changequote(X,Y) rpmv=`(rpm -qv $rpmnames) 2>/dev/null | \ sed -n 's/^[-a-z]*-\([0-9][0-9]*[.][0-9][0-9a-z]*\)-.*$/\1/p' | \ head -1` changequote([,]) if test \! -z "$rpmv" ; then rpmbdir=`rpm -ql $rpmnames | sed -n 's@^\(.*\)/xscreensaver-demo$@\1@p'` rpmhdir=`rpm -ql $rpmnames | sed -n 's@^\(.*\)/popsquares$@\1@p'` warning=no warnL "There is already an installed RPM of xscreensaver $rpmv" warn2 'on this system. You might want to remove it ("rpm -ve")' warn2 'before running "make install" in this directory.' echo "" warn2 "Alternately, you could build this version of xscreensaver" warn2 'as an RPM, and then install that. An "xscreensaver.spec"' warn2 'file is included. Try "rpmbuild -v -ba xscreensaver.spec".' warn2 "See the RPM documentation for more info." echo "" if test "$rpmbdir" = "$rpmhdir" ; then warn2 "The RPM version was installed in $rpmbdir/." do_dir_warning=yes else warn2 "The RPM version was installed in $rpmbdir/," warn2 "with demos in $rpmhdir/." fi fi fi # Also warn if there's a Debian package installed. # debnames="xscreensaver xscreensaver-data xscreensaver-data-extra" debv='' for dpkg in $debnames ; do if test -z "$debv"; then debv=`dpkg -s $dpkg 2>/dev/null | sed -n 's/^Version: \(.*\)$/\1/p'` fi done if test \! -z "$debv" ; then debbdir=`dpkg -L $debnames 2>/dev/null | \ sed -n 's@^\(.*/bin/\)xscreensaver$@\1@p'` debhdir=`dpkg -L $debnames 2>/dev/null | \ sed -n 's@^\(.*/\)popsquares$@\1@p'` if test -z "$debbdir" ; then debbdir='???'; fi if test -z "$debhdir" ; then debhdir='???'; fi warning=no warnL "There is already an installed dpkg of xscreensaver" warn2 "version \"$debv\" on this system." echo "" warn2 "The dpkg was installed in $debbdir," warn2 "with demos in $debhdir." fi if test "${bindir}" = "${HACKDIR}" ; then do_dir_warning=yes fi if test "$do_dir_warning" = yes; then echo "" echo "$warnsep" echo "" echo ' When you run "make install", the "xscreensaver",' echo ' "xscreensaver-demo", and "xscreensaver-command" executables' echo " will be installed in ${bindir}/." echo "" echo " The various graphics demos (200+ different executables) will" echo " be installed in ${HACKDIR}/." echo "" echo " If you would prefer the demos to be installed elsewhere," echo " you should re-run configure with the --with-hackdir=DIR" echo " option. For more information, run \`./configure --help'." warning=yes fi if test "$warning" != no; then echo '' ; echo "$warnsep" ; echo '' fi if test "$do_dir_warning" = no; then if test "$warning" = no; then echo '' fi echo "User programs will be installed in ${bindir}/" echo "Screen savers will be installed in ${HACKDIR}/" echo "Configuration dialogs will be installed in ${HACK_CONF_DIR}/" echo "System-wide default settings will be installed in ${APPDEFAULTS}/" echo '' fi xscreensaver-5.34/Makefile.in000644 000767 000767 00000031346 12521463401 015733 0ustar00jwzjwz000000 000000 # Makefile.in --- xscreensaver, Copyright (c) 1999-2014 Jamie Zawinski. # the `../configure' script generates `Makefile' from this file. @SET_MAKE@ srcdir = @srcdir@ VPATH = @srcdir@ SHELL = /bin/sh SUBDIRS = utils driver hacks hacks/glx po SUBDIRS2 = $(SUBDIRS) OSX android TARFILES = README README.hacking README.VMS INSTALL \ configure configure.in Makefile.in config.h.in \ config.h-vms install-sh setup.com config.guess aclocal.m4 \ ax_pthread.m4 config.sub makevms.com \ intltool-merge.in intltool-extract.in intltool-update.in \ xscreensaver.spec \ OSX/xscreensaver.xcodeproj/project.pbxproj TAR = tar MAKE_SUBDIR = for dir in $(SUBDIRS); do $(MAKE) -C $$dir $@ || exit 5; done MAKE_SUBDIR2 = for dir in $(SUBDIRS2); do $(MAKE) -C $$dir $@ || exit 5; done default:: @$(MAKE_SUBDIR) all:: @$(MAKE_SUBDIR) install:: @$(MAKE_SUBDIR) install-program:: @$(MAKE_SUBDIR) install-man:: @$(MAKE_SUBDIR) install-strip:: @$(MAKE_SUBDIR) uninstall:: @$(MAKE_SUBDIR) uninstall-program:: @$(MAKE_SUBDIR) uninstall-man:: @$(MAKE_SUBDIR) depend:: @$(MAKE_SUBDIR) distdepend:: @$(MAKE) update_spec_version @$(MAKE_SUBDIR2) @$(MAKE) -C po update-po TAGS:: tags tags:: @$(MAKE_SUBDIR) clean:: @$(MAKE_SUBDIR2) distclean:: clean -rm -f config.h Makefile config.status config.cache config.log TAGS *~ "#"* intltool-extract intltool-merge intltool-update @$(MAKE_SUBDIR2) dist:: tar # This really makes me sick... tar:: @ \ sh config.status ; \ rm -f configure ; \ $(MAKE) configure ; \ $(MAKE) version-date distdepend ; \ VERS=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^. ]*\).*/\1/p' utils/version.h` ; \ NAME="xscreensaver-$$VERS" ; \ rm -rf $$NAME ; ln -s . $$NAME ; \ FILES= ; \ ADIR=archive/ ; \ for subdir in $(SUBDIRS2) ; do \ d=`pwd` ; \ cd $$subdir ; \ FILES="$$FILES `$(MAKE) echo_tarfiles \ | grep -v '^.*make\[' \ | sed \"s|^|$$subdir/|g;s| | $$subdir/|g\" \ ` "; \ cd $$d ; done ; \ echo creating tar file $$ADIR$$NAME.tar.gz... ; \ export COPYFILE_DISABLE=true ; \ GZIP="-9v" $(TAR) -vczf $$ADIR$$NAME.tar.gz \ `echo $(TARFILES) $$FILES | sed "s|^|$$NAME/|g; s| | $$NAME/|g" ` ; \ rm $$NAME # This also makes me sick... # autoconf generates a configure script that begins with a very hard to read, # nearly impossible to customize --help blurb. This horrid set of regexps # go through and clean up the help text, by inserting whitespace and ripping # out options we don't use. Odds are good that this will fail with any version # of autoconf other than the ones I've tried (2.12 and 2.13.) # configure:: aclocal autoconf autoheader @TMP=configure.$$$$ ; \ echo "munging configure's --help message..." ; \ ( perl -e ' \ my $$file=""; \ while (<>) { $$file .= $$_; } \ $$_ = $$file; \ \ s/^(Configuration:)$$/\n$$1\n/m; \ s/^(Directory and file names:)$$/\n$$1\n/m; \ s/^ --sbindir=.*\n//m; \ s/^ --sysconfdir.*\n//m; \ s/^ --sharedstatedir.*\n.*\n//m; \ s/^ --localstatedir.*\n//m; \ s/^ --infodir.*\n//m; \ s/^(Host type:)$$/\n$$1\n/m; \ s/\nFeatures and packages:\n.*library files are in DIR\n/\n/s;\ s/--enable and --with options recognized://m; \ s/\n --with-x .*?(["\n])/$$1/s; \ s/\n(Installation options:\n)/$$1/s; \ \ s/^ --oldincludedir=.*$$/ \ --x-includes=DIR X include files are in DIR\n \ --x-libraries=DIR X library files are in DIR/m; \ \ s@mandir=.\$${prefix}/man.@mandir=\\\$${datadir}/man@; \ \ s@rm -f conftest@rm -rf conftest@g; \ \ print;' \ < configure \ > $$TMP && \ cat $$TMP > configure ) ; \ rm -f $$TMP bump-version:: @ \ SRC=utils/version.h ; \ VERS=`sed -n 's/[^0-9]*\([0-9]\)\.\([0-9][^. ]*\).*/\1 \2/p' $$SRC` ; \ set - $$VERS ; \ MAJOR="$$1"; MINOR="$$2"; \ NEW=`echo $$MINOR + 1 | bc` ; \ NEW=`echo $$NEW | sed 's/^\([0-9]\)$$/0\1/'` ; \ D=`date '+%d-%b-%Y'`; \ ADIR=archive/ ; \ if [ ! -f $${ADIR}xscreensaver-$$MAJOR.$$MINOR.tar.gz ]; then \ echo "WARNING: $${ADIR}xscreensaver-$$MAJOR.$$MINOR.tar.gz does not exist.";\ fi ; \ if [ -f $${ADIR}xscreensaver-$$MAJOR.$$NEW.tar.gz ]; then \ echo "WARNING: $${ADIR}xscreensaver-$$MAJOR.$$NEW.tar.gz already exists.";\ fi ; \ /bin/echo -n "Bumping $$MAJOR.$$MINOR to $$MAJOR.$$NEW ($$D), ok? "; \ read line; \ if [ "x$$line" != "xyes" -a "x$$line" != "xy" ]; then \ exit 1 ; \ fi ; \ TMP=/tmp/bv.$$ ; \ sed -e "s/\([0-9]\.[0-9][0-9]*\)/$$MAJOR.$$NEW/" \ -e "s/\(([0-9][0-9]*-[A-Za-z][a-z][a-z]-[0-9][0-9][0-9]*\))/($$D)/" \ $$SRC > $$TMP ; \ /bin/echo -n "New version and date are "; \ sed -n "s/[^0-9]*\([0-9]\.[0-9][0-9]*\) (\([-A-Za-z0-9]*\)).*/\1, \2./p" \ $$TMP; \ cat $$TMP > $$SRC ; \ rm -f $$TMP; \ echo "overwrote $$SRC"; \ ls -lFd $$SRC bump_version:: bump-version tick-version:: bump-version tick_version:: bump-version version-date:: @ \ SRC=utils/version.h ; \ D=`date '+%d-%b-%Y'`; \ TMP=/tmp/bv.$$ ; \ sed -e "s/([0-9][^()]*)/($$D)/" < $$SRC > $$TMP ; \ /bin/echo -n "Updating date in $$SRC to \"$$D\"... " ; \ if cmp -s $$SRC $$TMP ; then \ echo "unchanged." ; \ else \ cat $$TMP > $$SRC ; \ echo "done." ; \ fi ; \ rm -f $$TMP update_spec_version:: @S=$(srcdir)/xscreensaver.spec ; \ U=$(srcdir)/utils/version.h ; \ VERS=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^. ]*\).*/\1/p' < $$U` ; \ /bin/echo -n "Updating $$S to \"$$VERS\"... " ; \ T=/tmp/xs.$$$$ ; \ sed "s/^\(%define.version[^0-9]*\)\(.*\)/\1$$VERS/" \ < $$S > $$T ; \ if cmp -s $$S $$T ; then \ echo "unchanged." ; \ else \ cat $$T > $$S ; \ echo "done." ; \ fi ; \ rm $$T rpm:: @ \ VERS=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^. ]*\).*/\1/p' utils/version.h` ; \ DIR=`pwd`/rpm_build ; \ ARCH=`rpm --showrc | sed -n 's/^build arch *: //p'` ; \ ADIR=archive/ ; \ TGZ=xscreensaver-$$VERS.tar.gz ; \ if [ ! -f $${ADIR}$$TGZ ]; then \ echo "$${ADIR}$$TGZ does not exist! Did you forget to \`make tar'?" ; \ exit 1 ; \ fi ; \ rm -rf /var/tmp/xscreensaver-$$VERS-root ; \ rm -rf $$DIR ; \ mkdir $$DIR ; \ ( cd $$DIR; mkdir BUILD RPMS RPMS/$$ARCH SOURCES SPECS SRPMS ) ; \ cp -p $${ADIR}$$TGZ $$DIR/SOURCES/ ; \ rpmbuild --define "_topdir $$DIR" \ --define "USE_GL yes" \ -v -ba xscreensaver.spec ; \ echo '' ; \ echo 'RPM build complete' ; \ echo '' ; \ rm -f $$DIR/$$TGZ ; \ rm -rf $$DIR/BUILD/xscreensaver-$$VERS ; \ mv $$DIR/SRPMS/xscreensaver*-$$VERS-*.rpm . ; \ mv $$DIR/RPMS/$$ARCH/xscreensaver*-$$VERS-*.rpm . ; \ rm -rf $$DIR ; \ echo '' ; \ ls -lFG xscreensaver*-$$VERS-*.rpm test-tar:: @ \ VERS=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^. ]*\).*/\1/p' utils/version.h` ; \ D=xscreensaver-$$VERS ; \ ADIR=archive/ ; \ NAME="$${ADIR}$$D.tar.gz" ; \ if [ ! -f $$NAME ]; then \ echo "$$NAME does not exist! Did you forget to \`make tar'?" ; \ exit 1 ; \ fi ; \ \ set -e ; \ set -x ; \ \ if [ -d $$D ]; then \ chmod -R u+w $$D ; \ fi ; \ rm -rf $$D ; \ zcat $${ADIR}$$D.tar.gz | tar -xf - ; \ cd $$D ; \ chmod -R a-w . ; \ chmod u+w . ; \ mkdir BIN ; \ mkdir BIN/motif ; \ mkdir BIN/lesstif ; \ chmod a-w . ; \ \ ( cd BIN/motif ; \ CC=cc ; \ export CC ; \ ../../configure --without-xpm --without-xdbe --without-xshm \ --with-motif=/usr/local/motif ; \ echo --------------------------------------------------------------- ; \ gmake all ; \ ( cd driver; gmake tests ) ; \ echo --------------------------------------------------------------- ); \ \ ( cd BIN/lesstif ; \ CC=cc ; \ export CC ; \ ../../configure --with-motif=/usr/local/lesstif --without-gnome ; \ echo --------------------------------------------------------------- ; \ ( cd utils; gmake all ) ; \ ( cd driver; gmake all ) ; \ echo --------------------------------------------------------------- ); \ \ chmod -R u+w . dmg:: $(MAKE) -C OSX release dmg www:: @ \ DEST=$$HOME/www/xscreensaver ; \ VERS=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^. ]*\).*/\1/p' utils/version.h` ; \ HEAD="xscreensaver-$$VERS" ; \ ADIR=archive/ ; \ BNAME="$$HEAD.tar.gz" ; \ NAME="$$ADIR$$BNAME" ; \ DNAME="$$DEST/$$HEAD.tar.gz" ; \ BNAME2="$$HEAD.dmg" ; \ NAME2="$$ADIR$$BNAME2" ; \ DNAME2="$$DEST/$$HEAD.dmg" ; \ \ if ! git diff --quiet ; then \ echo "uncommitted changes exist!" ; \ exit 1 ; \ fi ; \ \ $(MAKE) -C OSX updates.xml ; \ \ if [ ! -f $$NAME ]; then \ echo "$$NAME does not exist! Did you forget to \`make tar'?" ; \ exit 1 ; \ fi ; \ if [ ! -f $$NAME2 ]; then \ echo "$$NAME2 does not exist! Did you forget to \`make dmg'?" ; \ exit 1 ; \ fi ; \ chmod a-w $$NAME ; \ if [ -f $$DNAME ]; then \ /bin/echo -n "WARNING: $$DNAME already exists! Overwrite? "; \ read line; \ if [ "x$$line" != "xyes" -a "x$$line" != "xy" ]; then \ exit 1 ; \ fi ; \ fi ; \ if [ -f $$DNAME2 ]; then \ /bin/echo -n "WARNING: $$DNAME2 already exists! Overwrite? "; \ read line; \ if [ "x$$line" != "xyes" -a "x$$line" != "xy" ]; then \ exit 1 ; \ fi ; \ fi ; \ \ git tag -a "v$$VERS" -m "$$VERS" ; \ git commit -m "$$VERS" . ; \ \ ( cd $$DEST ; git pull ) ; \ \ cp -p $$NAME $$DNAME ; \ cp -p $$NAME2 $$DNAME2 ; \ chmod u+w $$DNAME $$DNAME2 ; \ cp -p OSX/updates.xml $$DEST ; \ cd $$DEST ; \ \ TMP=/tmp/xd.$$$$ ; \ sed "s/xscreensaver-5\.[0-9][0-9ab]*/$$HEAD/g" download.html > $$TMP ; \ echo '' ; \ diff -U0 download.html $$TMP ; \ echo '' ; \ \ for EXT in tar.gz dmg ; do \ OLDEST=`ls xscreensaver*.$$EXT | \ fgrep -v 5.14 | \ head -n 1` ; \ /bin/echo -n "Delete $$DEST/$$OLDEST? "; \ read line; \ if [ "x$$line" = "xyes" -o "x$$line" = "xy" ]; then \ set -x ; \ rm $$OLDEST ; \ git rm $$OLDEST ; \ set +x ; \ fi ; \ done ; \ set -x ; \ cat $$TMP > download.html ; \ rm -f $$TMP ; \ \ git add $$BNAME $$BNAME2 ; \ \ $(MAKE) -C ../ xscreensaver/changelog.html xscreensaver/screenshots/index.html; \ git diff changelog.html ; \ set +x ; \ \ /bin/echo -n "Ok? "; \ read line; \ if [ "x$$line" != "xyes" -a "x$$line" != "xy" ]; then \ exit 1 ; \ fi ; \ \ git tag -a "v$$VERS" -m "$$VERS" ; \ git commit -m "$$VERS" . ; \ git push ; \ count:: @ \ /bin/echo -n "Current hack count: " ; \ ( ( cd hacks; make -s INSTALL=true install-program install-scripts ) ; \ ( cd hacks/glx; make -s INSTALL=true install-program ) ) | \ grep true | \ grep -v helper | \ grep -v ljlatest | \ wc -l xscreensaver-5.34/config.h.in000664 000767 000767 00000036560 12415276755 015736 0ustar00jwzjwz000000 000000 /* config.h.in. Generated from configure.in by autoheader. */ /* config.h.in --- xscreensaver, Copyright (c) 1991-2014 Jamie Zawinski. * * The best way to set these parameters is by running the included `configure' * script. That examines your system, and generates `config.h' from * `config.h.in'. * * If something goes very wrong, you can edit `config.h' directly, but beware * that your changes will be lost if you ever run `configure' again. */ /* Define this to allow the root password to unlock the screen. */ #undef ALLOW_ROOT_PASSWD /* always defined to indicate that i18n is enabled */ #undef ENABLE_NLS /* Some screenhacks like to run an external program to generate random pieces of text; set this to the one you like. Note that this is just the default; X resources can be used to override it. */ #undef FORTUNE_PROGRAM /* This is the name of the gettext package to use. */ #undef GETTEXT_PACKAGE /* Define this if gettimeofday() takes two arguments. */ #undef GETTIMEOFDAY_TWO_ARGS /* Define this if your system is Solaris with ``adjunct'' passwords (this is the version where one gets at the passwords with getpwanam() instead of getpwnam().) I haven't tested this one, let me know if it works. */ #undef HAVE_ADJUNCT_PASSWD /* Define to 1 if you have the `bind_textdomain_codeset' function. */ #undef HAVE_BIND_TEXTDOMAIN_CODESET /* Define this if you have Gnome and want to build support for the xscreensaver control panel in the Gnome Control Center (gnomecc). (This is needed only with Gtk 1.x.) */ #undef HAVE_CRAPPLET /* Define this if HAVE_CRAPPLET is defined, and the function capplet_widget_changes_are_immediate() is available. */ #undef HAVE_CRAPPLET_IMMEDIATE /* Define to 1 if you have the header file. */ #undef HAVE_CRYPT_H /* Define to 1 if you have the `dcgettext' function. */ #undef HAVE_DCGETTEXT /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_DIRENT_H /* Define this if you have the X Double Buffer Extension. */ #undef HAVE_DOUBLE_BUFFER_EXTENSION /* Define this if you have the XDPMS extension. This is standard on sufficiently-recent XFree86 systems, and possibly elsewhere. (It's available if the file /usr/include/X11/extensions/dpms.h exists.) */ #undef HAVE_DPMS_EXTENSION /* Define this if your system is Digital or SCO Unix with so-called ``Enhanced Security'', that is, the passwords live in /tcb/files/auth// instead of in /etc/passwd, and one reads them with getprpwnam() instead of getpwnam(). */ #undef HAVE_ENHANCED_PASSWD /* Define to 1 if you have the `fcntl' function. */ #undef HAVE_FCNTL /* Define this if you have the 'forkpty' function: This allows 'phosphor' and 'apple2' to run curses-based programs, or be used as terminal windows. */ #undef HAVE_FORKPTY /* Define this if you have the GDK_Pixbuf library installed. Some of the demos 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 `getaddrinfo' function. */ #undef HAVE_GETADDRINFO /* Define to 1 if you have the `getcwd' function. */ #undef HAVE_GETCWD /* Define this if you have the getifaddrs() function. */ #undef HAVE_GETIFADDRS /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define this if you have the gettimeofday function. */ #undef HAVE_GETTIMEOFDAY /* Define to 1 if you have the `getwd' function. */ #undef HAVE_GETWD /* Define this if you have OpenGL. Some of the demos require it, so if you don't have it, then those particular demos won't be built. (This won't affect the screen saver as a whole.) */ #undef HAVE_GL /* Define this if your version of OpenGL has the glBindTexture() routine. This is the case for OpenGL 1.1, but not for OpenGL 1.0. */ #undef HAVE_GLBINDTEXTURE /* Define this if you have the -lgle and -lmatrix libraries (GL extrusion.) */ #undef HAVE_GLE /* Define this if you have the -lgle from GLE version 3 */ #undef HAVE_GLE3 /* Define this if you have Gtk (any version.) */ #undef HAVE_GTK /* Define this if you have Gtk 2.x. */ #undef HAVE_GTK2 /* Define this if you are running HPUX with so-called ``Secure Passwords'' (if you have /usr/include/hpsecurity.h, you probably have this.) I haven't tested this one, let me know if it works. */ #undef HAVE_HPUX_PASSWD /* Define this if you do pings with a `struct icmp' and an `icmp_id' slot. */ #undef HAVE_ICMP /* Define this if you do pings with a `struct icmphdr' and an `un.echo.id' slot. */ #undef HAVE_ICMPHDR /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define this if you have the Independent JPEG Group's JPEG library installed. Some of the demos can make use of this if it is available. */ #undef HAVE_JPEGLIB /* Define this to target the OpenGL ES 1.x API instead of OpenGL 1.3. */ #undef HAVE_JWZGLES /* Define this if you want to use Kerberos authentication to lock/unlock the screen instead of your local password. This currently uses Kerberos V4, but a V5 server with V4 compatibility will work. WARNING: DO NOT USE AFS string-to-key passwords with this option. This option currently *only* works with standard Kerberos des_string_to_key. If your password is an AFS password and not a kerberos password, it will not authenticate properly. See the comments in driver/kpasswd.c for more information if you need it. */ #undef HAVE_KERBEROS /* Define this if you have Kerberos 5, meaning we need to use the Kerberos 4 compatibility layer. */ #undef HAVE_KERBEROS5 /* Define if your file defines LC_MESSAGES. */ #undef HAVE_LC_MESSAGES /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define this if you have OpenGL, but it's the MesaGL variant. (The libraries have different names.) (HAVE_GL should be defined too.) */ #undef HAVE_MESA_GL /* Define this if you have Motif. */ #undef HAVE_MOTIF /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_NDIR_H /* Define to 1 if you have the `nice' function. */ #undef HAVE_NICE /* Define this if you have the XML library headers in their old, non-namespaced location (you lack the gnome-xml/libxml symlink) */ #undef HAVE_OLD_XML_HEADERS /* Define this if you want to use PAM (Pluggable Authentication Modules) to lock/unlock the screen, instead of standard /etc/passwd authentication. */ #undef HAVE_PAM /* Define this if you have pam_fail_delay function. see driver/passwd-pam.c. */ #undef HAVE_PAM_FAIL_DELAY /* Define this if you have a Linux-like /proc/interrupts file which can be examined to determine when keyboard activity has occurred. */ #undef HAVE_PROC_INTERRUPTS /* Define this if your system supports POSIX threads. */ #undef HAVE_PTHREAD /* Have PTHREAD_PRIO_INHERIT. */ #undef HAVE_PTHREAD_PRIO_INHERIT /* Define to 1 if you have the header file. */ #undef HAVE_PTY_H /* Define to 1 if you have the `putenv' function. */ #undef HAVE_PUTENV /* Define this if you have the Resize and Rotate extension. This is standard on sufficiently-recent XFree86 systems, and possibly elsewhere. (It's available if the file /usr/include/X11/extensions/Xrandr.h exists.) */ #undef HAVE_RANDR /* Define this if the RANDR library is version 1.2 or newer. */ #undef HAVE_RANDR_12 /* Define this if you have the XReadDisplay extension (I think this is an SGI-only thing; it's in .) A few of the screenhacks will take advantage of this if it's available. */ #undef HAVE_READ_DISPLAY_EXTENSION /* Define to 1 if you have the `realpath' function. */ #undef HAVE_REALPATH /* Define this to enable recording of videos. */ #undef HAVE_RECORD_ANIM /* Define to 1 if you have the `sbrk' function. */ #undef HAVE_SBRK /* Define to 1 if you have the `select' function. */ #undef HAVE_SELECT /* Define to 1 if you have the `setlocale' function. */ #undef HAVE_SETLOCALE /* Define to 1 if you have the `setpriority' function. */ #undef HAVE_SETPRIORITY /* Define to 1 if you have the `setrlimit' function. */ #undef HAVE_SETRLIMIT /* Define this if your system uses 'shadow' passwords, that is, the passwords live in /etc/shadow instead of /etc/passwd, and one reads them with getspnam() instead of getpwnam(). (Note that SCO systems do some random other thing; others might as well. See the ifdefs in driver/passwd-pwent.c if you're having trouble related to reading passwords.) */ #undef HAVE_SHADOW_PASSWD /* Define to 1 if you have the `sigaction' function. */ #undef HAVE_SIGACTION /* Define to 1 if you have the `sigtimedwait' function. */ #undef HAVE_SIGTIMEDWAIT /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if `sa_len' is a member of `struct sockaddr'. */ #undef HAVE_STRUCT_SOCKADDR_SA_LEN /* Define to 1 if you have the `syslog' function. */ #undef HAVE_SYSLOG /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_DIR_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_NDIR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SELECT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have that is POSIX.1 compatible. */ #undef HAVE_SYS_WAIT_H /* Define to 1 if you have the `uname' function. */ #undef HAVE_UNAME /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the header file. */ #undef HAVE_UTIL_H /* Define this if you have the XF86MiscSetGrabKeysState function (which allows the Ctrl-Alt-KP_star and Ctrl-Alt-KP_slash key sequences to be temporarily disabled. Sadly, it doesn't affect Ctrl-Alt-BS or Ctrl-Alt-F1.) */ #undef HAVE_XF86MISCSETGRABKEYSSTATE /* Define this if you have the functions XF86VidModeGetModeLine() and XF86VidModeGetViewPort(), in support of virtual desktops where the X server's root window is bigger than the actual screen. This is an XFree86 thing, and probably doesn't exist elsewhere. (It's available if the file /usr/include/X11/extensions/xf86vmode.h exists.) */ #undef HAVE_XF86VMODE /* Define this if you have the functions XF86VidModeGetGamma() and XF86VidModeSetGamma(), which allow clients to change the gamma response of the monitor. This is an XFree86 4.0.x thing, and probably doesn't exist elsewhere. (It's available if the file /usr/include/X11/extensions/xf86vmode.h exists and has stuff about gamma in it.) */ #undef HAVE_XF86VMODE_GAMMA /* Define this if you have the functions XF86VidModeGetGammaRamp() and XF86VidModeSetGammaRamp(), which provide finer-grained control than XF86VidMode[GS]etGamma(). These appeared in XFree86 4.1.0. */ #undef HAVE_XF86VMODE_GAMMA_RAMP /* Define this if you have libXft2. */ #undef HAVE_XFT /* Define this if you have the XHPDisableReset function (an HP only thing which allows the Ctrl-Sh-Reset key sequence to be temporarily disabled.) */ #undef HAVE_XHPDISABLERESET /* Define this if you have the Xinerama extension. This is standard on sufficiently-recent XFree86 systems, and possibly elsewhere. (It's available if the file /usr/include/X11/extensions/Xinerama.h exists.) */ #undef HAVE_XINERAMA /* Define this if you have the Xinput extension. This is standard since X11R5, and is thus almost everywhere. (It's available if the file /usr/include/X11/extensions/XInput.h exists.) */ #undef HAVE_XINPUT /* Define this if you have the XmComboBox Motif widget (Motif 2.0.) */ #undef HAVE_XMCOMBOBOX /* Define this if you have the XML library. */ #undef HAVE_XML /* Define this if you have the Xmu library. This is standard part of X, and if your vendor doesn't ship it, you should report that as a bug. */ #undef HAVE_XMU /* Define this if you have the XPM library installed. Some of the demos can make use of this if it is available. */ #undef HAVE_XPM /* Define this if you have the X Shared Memory Extension. */ #undef HAVE_XSHM_EXTENSION /* Define this if you have the function Xutf8DrawString(). */ #undef HAVE_XUTF8DRAWSTRING /* Define this to remove the option of locking the screen at all. */ #undef NO_LOCKING /* This is the same as GETTEXT_PACKAGE, but for the glade generated code. */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Whether PAM should check the result of account modules when authenticating. Only do this if you have account configured properly on your system. */ #undef PAM_CHECK_ACCOUNT_TYPE /* If PAM is being used, this is the name of the PAM service that xscreensaver will authenticate as. The default is "xscreensaver", which means that the PAM library will look for an "xscreensaver" line in /etc/pam.conf, or (on recent Linux systems) will look for a file called /etc/pam.d/xscreensaver. Some systems might already have a PAM installation that is configured for xlock, so setting this to "xlock" would also work in that case. */ #undef PAM_SERVICE_NAME /* Define if you have PAM and pam_strerror() requires two arguments. */ #undef PAM_STRERROR_TWO_ARGS /* Set the name of the password helper program, if any */ #undef PASSWD_HELPER_PROGRAM /* Define to necessary symbol if this constant uses a non-standard name on your system. */ #undef PTHREAD_CREATE_JOINABLE /* Define as the return type of signal handlers (`int' or `void'). */ #undef RETSIGTYPE /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if you can safely include both and . */ #undef TIME_WITH_SYS_TIME /* Define this to void* if you're using X11R4 or earlier. */ #undef XPointer /* Define to 1 if the X Window System is missing or not being used. */ #undef X_DISPLAY_MISSING /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE # define _DARWIN_USE_64_BIT_INODE 1 #endif /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define to `int' if does not define. */ #undef mode_t /* Define to `int' if does not define. */ #undef pid_t /* Define to `unsigned int' if does not define. */ #undef size_t xscreensaver-5.34/config.h-vms000644 000767 000767 00000024614 10217402477 016115 0ustar00jwzjwz000000 000000 /* This is a config.h file that has been pregenerated (from config.h.in) * with settings that are correct for VMS. */ /* config.h.in --- xscreensaver, Copyright (c) 1998 Jamie Zawinski. * * The best way to set these parameters is by running the included `configure' * script. That examines your system, and generates `config.h' from * `config.h.in'. * * If something goes very wrong, you can edit `config.h' directly, but beware * that your changes will be lost if you ever run `configure' again. */ /* ************************************************************************* CONFIGURING SERVER EXTENSIONS ************************************************************************* */ /* Define this if you have the XReadDisplay extension (I think this is an SGI-only thing; it's in .) A few of the screenhacks will take advantage of this if it's available. */ #undef HAVE_READ_DISPLAY_EXTENSION /* Define this if you have the Iris Video Library (dmedia/vl.h on SGI.) A few of the screenhacks will take advantage of this if it's available. */ #undef HAVE_SGI_VIDEO /* Define this if you have the XHPDisableReset function (an HP only thing.) */ #undef HAVE_XHPDISABLERESET /* First, some background: there are three distinct server extensions which * are useful to a screen saver program: they are XIDLE, MIT-SCREEN-SAVER, * and SCREEN_SAVER. * * The XIDLE extension resides in .../contrib/extensions/xidle/ on the X11R5 * contrib tape. This extension lets the client get accurate idle-time * information from the X server in a potentially more reliable way than by * simply watching for keyboard and mouse activity. However, the XIDLE * extension has apparently not been ported to X11R6. * * The SCREEN_SAVER extension is found (as far as I know) only in the SGI * X server, and it exists in all releases since (at least) Irix 5. The * relevant header file is /usr/include/X11/extensions/XScreenSaver.h. * * The similarly-named MIT-SCREEN-SAVER extension came into existence long * after the SGI SCREEN_SAVER extension was already in use, and resides in * .../contrib/extensions/screensaver/ on the X11R6 contrib tape. It is * also found in certain recent X servers built in to NCD X terminals. * * The MIT extension does basically the same thing that the XIDLE extension * does, but there are two things wrong with it: first, because of the way * the extension was designed, the `fade' option to XScreenSaver will be * uglier: just before the screen fades out, there will be an unattractive * flicker to black, because this extension blanks the screen *before* * telling us that it is time to do so. Second, this extension is known to * be buggy; on the systems I use, it works, but some people have reported * X server crashes as a result of using it. XScreenSaver uses this * extension rather conservatively, because when I tried to use any of its * more complicated features, I could get it to crash the server at the * drop of a hat. * * In short, the MIT-SCREEN-SAVER extension is a piece of junk. The older * SGI SCREEN_SAVER extension works great, as does XIDLE. It would be nice * If those two existed on more systems, that is, would be adopted by the * X Consortium in favor of their inferior "not-invented-here" entry. */ /* Define this if you have the XIDLE extension installed. If you have the * XIDLE extension, this is recommended. (You have this extension if the * file /usr/include/X11/extensions/xidle.h exists.) Turning on this flag * lets XScreenSaver work better with servers which support this extension; * but it will still work with servers which do not suport it, so it's a good * idea to compile in support for it if you can. */ #undef HAVE_XIDLE_EXTENSION /* Define this if you have the MIT-SCREEN-SAVER extension installed. See the * caveats about this extension, above. (It's available if the file * /usr/include/X11/extensions/scrnsaver.h exists.) */ #undef HAVE_MIT_SAVER_EXTENSION /* Define this if you have the SGI SCREEN_SAVER extension. This is standard * on Irix systems, and not available elsewhere. */ #undef HAVE_SGI_SAVER_EXTENSION /* Define this if you have the SGI-VIDEO-CONTROL extension. This is standard * on Irix systems, and not available elsewhere. */ #undef HAVE_SGI_VC_EXTENSION /* Define this if you have the XDPMS extension. This is standard on * sufficiently-recent XFree86 systems, and possibly elsewhere. (It's * available if the file /usr/include/X11/extensions/dpms.h exists.) */ #define HAVE_DPMS_EXTENSION 1 /* ************************************************************************* CONFIGURING GRAPHICS TOOLKITS ************************************************************************* */ /* Define this if you have Motif. */ #define HAVE_MOTIF 1 /* Define this if you have the XmComboBox Motif widget (Motif 2.0.) */ #undef HAVE_XMCOMBOBOX /* Define this if you have the XPM library installed. Some of the demos can * make use of this if it is available. */ #define HAVE_XPM 1 /* Define this if you have the Xmu library. This is standard part of X, and * if your vendor doesn't ship it, you should report that as a bug. */ #define HAVE_XMU 1 /* Define this if you have OpenGL. Some of the demos require it, so if you * don't have it, then those particular demos won't be built. (This won't * affect the screen saver as a whole.) */ #undef HAVE_GL /* Define this if you have OpenGL, but it's the MesaGL variant. (The libraries have different names.) (HAVE_GL should be defined too.) */ #undef HAVE_MESA_GL /* Define this if your version of OpenGL has the glBindTexture() routine. This is the case for OpenGL 1.1, but not for OpenGL 1.0. */ #undef HAVE_GLBINDTEXTURE /* Define this if you have the X Shared Memory Extension. */ #undef HAVE_XSHM_EXTENSION /* ************************************************************************* CONFIGURING PASSWORD AUTHENTICATION ************************************************************************* */ /* Define this to remove the option of locking the screen at all. */ #undef NO_LOCKING /* Define this if you want to use Kerberos authentication to lock/unlock the * screen instead of your local password. This currently uses Kerberos V4, * but a V5 server with V4 compatibility will work. WARNING: DO NOT USE AFS * string-to-key passwords with this option. This option currently *only* * works with standard Kerberos des_string_to_key. If your password is an * AFS password and not a kerberos password, it will not authenticate * properly. See the comments in driver/kpasswd.c for more information if you * need it. */ #undef HAVE_KERBEROS /* Define this if your system uses `shadow' passwords, that is, the passwords * live in /etc/shadow instead of /etc/passwd, and one reads them with * getspnam() instead of getpwnam(). (Note that SCO systems do some random * other thing; others might as well. See the ifdefs in driver/passwd.c if * you're having trouble related to reading passwords.) */ #undef HAVE_SHADOW_PASSWD /* Define this if your system is Digital or SCO Unix with so-called ``Enhanced Security'', that is, the passwords live in /tcb/files/auth// instead of in /etc/passwd, and one reads them with getprpwnam() instead of getpwnam(). */ #undef HAVE_ENHANCED_PASSWD /* Define this if your system is Solaris with ``adjunct'' passwords (this is the version where one gets at the passwords with getpwanam() instead of getpwnam().) I haven't tested this one, let me know if it works. */ #undef HAVE_ADJUNCT_PASSWD /* Define this if you are running HPUX with so-called ``Secure Passwords'' (if you have /usr/include/hpsecurity.h, you probably have this.) I haven't tested this one, let me know if it works. */ #undef HAVE_HPUX_PASSWD /* Define this if you are on a system that supports the VT_LOCKSWITCH and VT_UNLOCKSWITCH ioctls. If this is defined, then when the screen is locked, switching to another virtual terminal will also be prevented. That is, the whole console will be locked, rather than just the VT on which X is running. */ #define HAVE_VT_LOCKSWITCH 1 /* ************************************************************************* OTHER C ENVIRONMENT JUNK ************************************************************************* */ /* Define this to void* if you're using X11R4 or earlier. */ #undef XPointer /* Define if you have the nice function. */ #undef HAVE_NICE /* Define if you have the setpriority function. */ #undef HAVE_SETPRIORITY /* Define to empty if the keyword does not work. */ #undef const /* Define if you have that is POSIX.1 compatible. */ #undef HAVE_SYS_WAIT_H /* Define as __inline if that's what the C compiler calls it. */ #undef inline /* Define to `int' if doesn't define. */ #undef mode_t /* Define to `int' if doesn't define. */ #undef pid_t /* Define as the return type of signal handlers (int or void). */ #define RETSIGTYPE void /* Define to `unsigned' if doesn't define. */ #undef size_t /* Define if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define if you can safely include both and . */ #undef TIME_WITH_SYS_TIME /* Define if you have the gettimeofday function. */ #undef HAVE_GETTIMEOFDAY /* Define if gettimeofday requires two arguments. */ #undef GETTIMEOFDAY_TWO_ARGS /* Define if you have the putenv function. */ #undef HAVE_PUTENV /* Define if you have the select function. */ #undef HAVE_SELECT /* Define if you have the getcwd function. */ #undef HAVE_GETCWD /* Define if you have the getcwd function. */ #undef HAVE_GETWD /* Define if you have the uname function. */ #undef HAVE_UNAME #if (__VMS_VER >= 70000000) # define HAVE_UNAME 1 #endif /* Define if you have the fcntl function. */ #undef HAVE_FCNTL /* Define if you have the sigaction function. */ #undef HAVE_SIGACTION /* Define if you have the header file. */ #undef HAVE_UNISTD_H /* Define if you have the header file. */ #undef HAVE_CRYPT_H /* Define to use sigaction() instead of signal() for SIGCHLD-related activity. This is necessary at least on SCO OpenServer 5, due to a Unix kernel bug. */ #undef USE_SIGACTION xscreensaver-5.34/install-sh000644 000767 000767 00000012721 06346511402 015666 0ustar00jwzjwz000000 000000 #! /bin/sh # # install - install a program, script, or datafile # This comes from X11R5 (mit/util/scripts/install.sh). # # Copyright 1991 by the Massachusetts Institute of Technology # # 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, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else true fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: else instcmd=mkdir fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then true else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else true fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else true fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else true fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 xscreensaver-5.34/setup.com000664 000767 000767 00000007537 12612754263 015547 0ustar00jwzjwz000000 000000 $! Xscreensaver - definition of various DCL symbols $ set NOON $ set def [.HACKS] $ mydisk = f$trnlmn("SYS$DISK") $ mydir = mydisk+f$directory() $ abstractile :== $'mydir'abstractile $ anemone :== $'mydir'anemone $ anemotaxis :== $'mydir'anemotaxis $ apollonian :== $'mydir'apollonian $ apple2 :== $'mydir'apple2 $ attraction :== $'mydir'attraction $ barcode :== $'mydir'barcode $ binaryring :== $'mydir'binaryring $ blaster :== $'mydir'blaster $ blitspin :== $'mydir'blitspin $ bouboule :== $'mydir'bouboule $ boxfit :== $'mydir'boxfit $ braid :== $'mydir'braid $ bsod :== $'mydir'bsod $ bumps :== $'mydir'bumps $ ccurve :== $'mydir'ccurve $ celtic :== $'mydir'celtic $ cloudlife :== $'mydir'cloudlife $ compass :== $'mydir'compass $ coral :== $'mydir'coral $ crystal :== $'mydir'crystal $ cwaves :== $'mydir'cwaves $ cynosure :== $'mydir'cynosure $ decayscreen :== $'mydir'decayscreen $ deco :== $'mydir'deco $ deluxe :== $'mydir'deluxe $ demon :== $'mydir'demon $ discrete :== $'mydir'discrete $ distort :== $'mydir'distort $ drift :== $'mydir'drift $ epicycle :== $'mydir'epicycle $ eruption :== $'mydir'eruption $ euler2d :== $'mydir'euler2d $ fadeplot :== $'mydir'fadeplot $ fiberlamp :== $'mydir'fiberlamp $ fireworkx :== $'mydir'fireworkx $ flame :== $'mydir'flame $ flow :== $'mydir'flow $ fluidballs :== $'mydir'fluidballs $ fontglide :== $'mydir'fontglide $ fuzzyflakes :== $'mydir'fuzzyflakes $ galaxy :== $'mydir'galaxy $ goop :== $'mydir'goop $ grav :== $'mydir'grav $ greynetic :== $'mydir'greynetic $ halftone :== $'mydir'halftone $ halo :== $'mydir'halo $ helix :== $'mydir'helix $ hexadrop :== $'mydir'hexadrop $ hopalong :== $'mydir'hopalong $ ifs :== $'mydir'ifs $ imsmap :== $'mydir'imsmap $ interaggregate :== $'mydir'interaggregate $ interference :== $'mydir'interference $ intermomentary :== $'mydir'intermomentary $ julia :== $'mydir'julia $ kaleidescope :== $'mydir'kaleidescope $ kumppa :== $'mydir'kumppa $ lcdscrub :== $'mydir'lcdscrub $ loop :== $'mydir'loop $ m6502 :== $'mydir'm6502 $ maze :== $'mydir'maze $ memscroller :== $'mydir'memscroller $ metaballs :== $'mydir'metaballs $ moire :== $'mydir'moire $ moire2 :== $'mydir'moire2 $ mountain :== $'mydir'mountain $ munch :== $'mydir'munch $ nerverot :== $'mydir'nerverot $ noseguy :== $'mydir'noseguy $ pacman :== $'mydir'pacman $ pedal :== $'mydir'pedal $ penetrate :== $'mydir'penetrate $ penrose :== $'mydir'penrose $ petri :== $'mydir'petri $ phosphor :== $'mydir'phosphor $ piecewise :== $'mydir'piecewise $ polyominoes :== $'mydir'polyominoes $ pong :== $'mydir'pong $ popsquares :== $'mydir'popsquares $ pyro :== $'mydir'pyro $ qix :== $'mydir'qix $ rd-bomb :== $'mydir'rd-bomb $ ripples :== $'mydir'ripples $ rocks :== $'mydir'rocks $ rorschach :== $'mydir'rorschach $ rotzoomer :== $'mydir'rotzoomer $ shadebobs :== $'mydir'shadebobs $ sierpinski :== $'mydir'sierpinski $ slidescreen :== $'mydir'slidescreen $ slip :== $'mydir'slip $ speedmine :== $'mydir'speedmine $ spotlight :== $'mydir'spotlight $ squiral :== $'mydir'squiral $ starfish :== $'mydir'starfish $ strange :== $'mydir'strange $ substrate :== $'mydir'substrate $ swirl :== $'mydir'swirl $ tessellimage :== $'mydir'tessellimage $ thornbird :== $'mydir'thornbird $ triangle :== $'mydir'triangle $ truchet :== $'mydir'truchet $ twang :== $'mydir'twang $ vermiculate :== $'mydir'vermiculate $ wander :== $'mydir'wander $ webcollage-helper :== $'mydir'webcollage-helper $ whirlwindwarp :== $'mydir'whirlwindwarp $ wormhole :== $'mydir'wormhole $ xanalogtv :== $'mydir'xanalogtv $ xflame :== $'mydir'xflame $ xjack :== $'mydir'xjack $ xlyap :== $'mydir'xlyap $ xmatrix :== $'mydir'xmatrix $ xrayswarm :== $'mydir'xrayswarm $ xspirograph :== $'mydir'xspirograph $ zoom :== $'mydir'zoom $ set def [-.DRIVER] $ mydir = mydisk+f$directory() $ xscreensaver :== $'mydir'xscreensaver $ xscreen*command :== $'mydir'xscreensaver-command $ set def [-] $ exit xscreensaver-5.34/config.guess000664 000767 000767 00000131355 12250746671 016222 0ustar00jwzjwz000000 000000 #! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2013 Free Software Foundation, Inc. timestamp='2013-11-29' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches with a ChangeLog entry to config-patches@gnu.org. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; or1k:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: xscreensaver-5.34/aclocal.m4000664 000767 000767 00000063763 12612476436 015555 0ustar00jwzjwz000000 000000 # generated automatically by aclocal 1.14.1 -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) # Copyright (C) 1995-2002 Free Software Foundation, Inc. # Copyright (C) 2001-2003,2004 Red Hat, Inc. # # This file is free software, distributed under the terms of the GNU # General Public License. As a special exception to the GNU General # Public License, this file may be distributed as part of a program # that contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # # Macro to add for using GNU gettext. # Ulrich Drepper , 1995, 1996 # # Modified to never use included libintl. # Owen Taylor , 12/15/1998 # # Major rework to remove unused code # Owen Taylor , 12/11/2002 # # Added better handling of ALL_LINGUAS from GNU gettext version # written by Bruno Haible, Owen Taylor 5/30/3002 # # Modified to require ngettext # Matthias Clasen 08/06/2004 # # We need this here as well, since someone might use autoconf-2.5x # to configure GLib then an older version to configure a package # using AM_GLIB_GNU_GETTEXT AC_PREREQ(2.53) dnl dnl We go to great lengths to make sure that aclocal won't dnl try to pull in the installed version of these macros dnl when running aclocal in the glib directory. dnl m4_copy([AC_DEFUN],[glib_DEFUN]) m4_copy([AC_REQUIRE],[glib_REQUIRE]) dnl dnl At the end, if we're not within glib, we'll define the public dnl definitions in terms of our private definitions. dnl # GLIB_LC_MESSAGES #-------------------- glib_DEFUN([GLIB_LC_MESSAGES], [AC_CHECK_HEADERS([locale.h]) if test $ac_cv_header_locale_h = yes; then AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, [AC_TRY_LINK([#include ], [return LC_MESSAGES], am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) if test $am_cv_val_LC_MESSAGES = yes; then AC_DEFINE(HAVE_LC_MESSAGES, 1, [Define if your file defines LC_MESSAGES.]) fi fi]) # GLIB_PATH_PROG_WITH_TEST #---------------------------- dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) glib_DEFUN([GLIB_PATH_PROG_WITH_TEST], [# Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL(ac_cv_path_$1, [case "[$]$1" in /*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in ifelse([$5], , $PATH, [$5]); do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$]$1) else AC_MSG_RESULT(no) fi AC_SUBST($1)dnl ]) # GLIB_WITH_NLS #----------------- glib_DEFUN([GLIB_WITH_NLS], dnl NLS is obligatory [USE_NLS=yes AC_SUBST(USE_NLS) gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= AC_CHECK_HEADER(libintl.h, [gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # AC_CACHE_CHECK([for ngettext in libc], gt_cv_func_ngettext_libc, [AC_TRY_LINK([ #include ], [return !ngettext ("","", 1)], gt_cv_func_ngettext_libc=yes, gt_cv_func_ngettext_libc=no) ]) if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc, [AC_TRY_LINK([ #include ], [return !dgettext ("","")], gt_cv_func_dgettext_libc=yes, gt_cv_func_dgettext_libc=no) ]) fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CHECK_FUNCS(bind_textdomain_codeset) fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then AC_CHECK_LIB(intl, bindtextdomain, [AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dgettext, gt_cv_func_dgettext_libintl=yes)])]) if test "$gt_cv_func_dgettext_libintl" != "yes" ; then AC_MSG_CHECKING([if -liconv is needed to use gettext]) AC_MSG_RESULT([]) AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dcgettext, [gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv], :,-liconv)], :,-liconv) fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset AC_CHECK_FUNCS(bind_textdomain_codeset) LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs" fi if test "$gt_cv_have_gettext" = "yes"; then AC_DEFINE(HAVE_GETTEXT,1, [Define if the GNU gettext() function is already present or preinstalled.]) GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" AC_CHECK_FUNCS(dcgettext) MSGFMT_OPTS= AC_MSG_CHECKING([if msgfmt accepts -c]) GLIB_RUN_PROG([$MSGFMT -c -o /dev/null],[ msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" ], [MSGFMT_OPTS=-c; AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) AC_SUBST(MSGFMT_OPTS) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr], [CATOBJEXT=.gmo DATADIRNAME=share], [case $host in *-*-solaris*) dnl On Solaris, if bind_textdomain_codeset is in libc, dnl GNU format message catalog is always supported, dnl since both are added to the libc all together. dnl Hence, we'd like to go with DATADIRNAME=share and dnl and CATOBJEXT=.gmo in this case. AC_CHECK_FUNC(bind_textdomain_codeset, [CATOBJEXT=.gmo DATADIRNAME=share], [CATOBJEXT=.mo DATADIRNAME=lib]) ;; *-*-openbsd*) CATOBJEXT=.mo DATADIRNAME=share ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac]) LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi ]) if test "$gt_cv_have_gettext" = "yes" ; then AC_DEFINE(ENABLE_NLS, 1, [always defined to indicate that i18n is enabled]) fi dnl Test whether we really found GNU xgettext. if test "$XGETTEXT" != ":"; then dnl If it is not GNU xgettext we define it as : so that the dnl Makefiles still can work. if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else AC_MSG_RESULT( [found xgettext program is not GNU xgettext; ignore it]) XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po AC_OUTPUT_COMMANDS( [case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac]) dnl These rules are solely for the distribution goal. While doing this dnl we only have to keep exactly one list of the available catalogs dnl in configure.ac. for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done dnl Make all variables we use known to autoconf. AC_SUBST(CATALOGS) AC_SUBST(CATOBJEXT) AC_SUBST(DATADIRNAME) AC_SUBST(GMOFILES) AC_SUBST(INSTOBJEXT) AC_SUBST(INTLLIBS) AC_SUBST(PO_IN_DATADIR_TRUE) AC_SUBST(PO_IN_DATADIR_FALSE) AC_SUBST(POFILES) AC_SUBST(POSUB) ]) # AM_GLIB_GNU_GETTEXT # ------------------- # Do checks necessary for use of gettext. If a suitable implementation # of gettext is found in either in libintl or in the C library, # it will set INTLLIBS to the libraries needed for use of gettext # and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable # gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST() # on various variables needed by the Makefile.in.in installed by # glib-gettextize. dnl glib_DEFUN([GLIB_GNU_GETTEXT], [AC_REQUIRE([AC_PROG_CC])dnl GLIB_LC_MESSAGES GLIB_WITH_NLS if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else AC_MSG_CHECKING(for catalogs to be installed) NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS AC_MSG_RESULT($LINGUAS) fi dnl Construct list of names of catalog files to be constructed. if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly dnl find the mkinstalldirs script in another subdir but ($top_srcdir). dnl Try to locate is. MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi AC_SUBST(MKINSTALLDIRS) dnl Generate list of files to be processed by xgettext which will dnl be included in po/Makefile. test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES ]) # AM_GLIB_DEFINE_LOCALEDIR(VARIABLE) # ------------------------------- # Define VARIABLE to the location where catalog files will # be installed by po/Makefile. glib_DEFUN([GLIB_DEFINE_LOCALEDIR], [glib_REQUIRE([GLIB_GNU_GETTEXT])dnl glib_save_prefix="$prefix" glib_save_exec_prefix="$exec_prefix" glib_save_datarootdir="$datarootdir" test "x$prefix" = xNONE && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix=$prefix datarootdir=`eval echo "${datarootdir}"` if test "x$CATOBJEXT" = "x.mo" ; then localedir=`eval echo "${libdir}/locale"` else localedir=`eval echo "${datadir}/locale"` fi prefix="$glib_save_prefix" exec_prefix="$glib_save_exec_prefix" datarootdir="$glib_save_datarootdir" AC_DEFINE_UNQUOTED($1, "$localedir", [Define the location where the catalogs will be installed]) ]) dnl dnl Now the definitions that aclocal will find dnl ifdef(glib_configure_ac,[],[ AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)]) AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)]) ])dnl # GLIB_RUN_PROG(PROGRAM, TEST-FILE, [ACTION-IF-PASS], [ACTION-IF-FAIL]) # # Create a temporary file with TEST-FILE as its contents and pass the # file name to PROGRAM. Perform ACTION-IF-PASS if PROGRAM exits with # 0 and perform ACTION-IF-FAIL for any other exit status. AC_DEFUN([GLIB_RUN_PROG], [cat >conftest.foo <<_ACEOF $2 _ACEOF if AC_RUN_LOG([$1 conftest.foo]); then m4_ifval([$3], [$3], [:]) m4_ifvaln([$4], [else $4])dnl echo "$as_me: failed input was:" >&AS_MESSAGE_LOG_FD sed 's/^/| /' conftest.foo >&AS_MESSAGE_LOG_FD fi]) dnl IT_PROG_INTLTOOL([MINIMUM-VERSION], [no-xml]) # serial 42 IT_PROG_INTLTOOL AC_DEFUN([IT_PROG_INTLTOOL], [ AC_PREREQ([2.50])dnl AC_REQUIRE([AM_NLS])dnl case "$am__api_version" in 1.[01234]) AC_MSG_ERROR([Automake 1.5 or newer is required to use intltool]) ;; *) ;; esac INTLTOOL_REQUIRED_VERSION_AS_INT=`echo $1 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3` INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` if test -n "$1"; then AC_MSG_CHECKING([for intltool >= $1]) AC_MSG_RESULT([$INTLTOOL_APPLIED_VERSION found]) test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" || AC_MSG_ERROR([Your intltool is too old. You need intltool $1 or later.]) fi AC_PATH_PROG(INTLTOOL_UPDATE, [intltool-update]) AC_PATH_PROG(INTLTOOL_MERGE, [intltool-merge]) AC_PATH_PROG(INTLTOOL_EXTRACT, [intltool-extract]) if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then AC_MSG_ERROR([The intltool scripts were not found. Please install intltool.]) fi if test -z "$AM_DEFAULT_VERBOSITY"; then AM_DEFAULT_VERBOSITY=1 fi AC_SUBST([AM_DEFAULT_VERBOSITY]) INTLTOOL_V_MERGE='$(INTLTOOL__v_MERGE_$(V))' INTLTOOL__v_MERGE_='$(INTLTOOL__v_MERGE_$(AM_DEFAULT_VERBOSITY))' INTLTOOL__v_MERGE_0='@echo " ITMRG " [$]@;' AC_SUBST(INTLTOOL_V_MERGE) AC_SUBST(INTLTOOL__v_MERGE_) AC_SUBST(INTLTOOL__v_MERGE_0) INTLTOOL_V_MERGE_OPTIONS='$(intltool__v_merge_options_$(V))' intltool__v_merge_options_='$(intltool__v_merge_options_$(AM_DEFAULT_VERBOSITY))' intltool__v_merge_options_0='-q' AC_SUBST(INTLTOOL_V_MERGE_OPTIONS) AC_SUBST(intltool__v_merge_options_) AC_SUBST(intltool__v_merge_options_0) INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -p $(top_srcdir)/po $< [$]@' INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge 5000; then INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u --no-translations $< [$]@' else INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)_it_tmp_dir=tmp.intltool.[$][$]RANDOM && mkdir [$][$]_it_tmp_dir && LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u [$][$]_it_tmp_dir $< [$]@ && rmdir [$][$]_it_tmp_dir' fi INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' _IT_SUBST(INTLTOOL_DESKTOP_RULE) _IT_SUBST(INTLTOOL_DIRECTORY_RULE) _IT_SUBST(INTLTOOL_KEYS_RULE) _IT_SUBST(INTLTOOL_PROP_RULE) _IT_SUBST(INTLTOOL_OAF_RULE) _IT_SUBST(INTLTOOL_PONG_RULE) _IT_SUBST(INTLTOOL_SERVER_RULE) _IT_SUBST(INTLTOOL_SHEET_RULE) _IT_SUBST(INTLTOOL_SOUNDLIST_RULE) _IT_SUBST(INTLTOOL_UI_RULE) _IT_SUBST(INTLTOOL_XAM_RULE) _IT_SUBST(INTLTOOL_KBD_RULE) _IT_SUBST(INTLTOOL_XML_RULE) _IT_SUBST(INTLTOOL_XML_NOMERGE_RULE) _IT_SUBST(INTLTOOL_CAVES_RULE) _IT_SUBST(INTLTOOL_SCHEMAS_RULE) _IT_SUBST(INTLTOOL_THEME_RULE) _IT_SUBST(INTLTOOL_SERVICE_RULE) _IT_SUBST(INTLTOOL_POLICY_RULE) # Check the gettext tools to make sure they are GNU AC_PATH_PROG(XGETTEXT, xgettext) AC_PATH_PROG(MSGMERGE, msgmerge) AC_PATH_PROG(MSGFMT, msgfmt) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then AC_MSG_ERROR([GNU gettext tools not found; required for intltool]) fi xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`" mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`" mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`" if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then AC_MSG_ERROR([GNU gettext tools not found; required for intltool]) fi # Substitute ALL_LINGUAS so we can use it in po/Makefile AC_SUBST(ALL_LINGUAS) # Set DATADIRNAME correctly if it is not set yet # (copied from glib-gettext.m4) if test -z "$DATADIRNAME"; then AC_LINK_IFELSE( [AC_LANG_PROGRAM([[]], [[extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr]])], [DATADIRNAME=share], [case $host in *-*-solaris*) dnl On Solaris, if bind_textdomain_codeset is in libc, dnl GNU format message catalog is always supported, dnl since both are added to the libc all together. dnl Hence, we'd like to go with DATADIRNAME=share dnl in this case. AC_CHECK_FUNC(bind_textdomain_codeset, [DATADIRNAME=share], [DATADIRNAME=lib]) ;; *) [DATADIRNAME=lib] ;; esac]) fi AC_SUBST(DATADIRNAME) IT_PO_SUBDIR([po]) ]) # IT_PO_SUBDIR(DIRNAME) # --------------------- # All po subdirs have to be declared with this macro; the subdir "po" is # declared by IT_PROG_INTLTOOL. # AC_DEFUN([IT_PO_SUBDIR], [AC_PREREQ([2.53])dnl We use ac_top_srcdir inside AC_CONFIG_COMMANDS. dnl dnl The following CONFIG_COMMANDS should be executed at the very end dnl of config.status. AC_CONFIG_COMMANDS_PRE([ AC_CONFIG_COMMANDS([$1/stamp-it], [ if [ ! grep "^# INTLTOOL_MAKEFILE$" "$1/Makefile.in" > /dev/null ]; then AC_MSG_ERROR([$1/Makefile.in.in was not created by intltoolize.]) fi rm -f "$1/stamp-it" "$1/stamp-it.tmp" "$1/POTFILES" "$1/Makefile.tmp" >"$1/stamp-it.tmp" [sed '/^#/d s/^[[].*] *// /^[ ]*$/d '"s|^| $ac_top_srcdir/|" \ "$srcdir/$1/POTFILES.in" | sed '$!s/$/ \\/' >"$1/POTFILES" ] [sed '/^POTFILES =/,/[^\\]$/ { /^POTFILES =/!d r $1/POTFILES } ' "$1/Makefile.in" >"$1/Makefile"] rm -f "$1/Makefile.tmp" mv "$1/stamp-it.tmp" "$1/stamp-it" ]) ])dnl ]) # _IT_SUBST(VARIABLE) # ------------------- # Abstract macro to do either _AM_SUBST_NOTMAKE or AC_SUBST # AC_DEFUN([_IT_SUBST], [ AC_SUBST([$1]) m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([$1])]) ] ) # deprecated macros AU_ALIAS([AC_PROG_INTLTOOL], [IT_PROG_INTLTOOL]) # A hint is needed for aclocal from Automake <= 1.9.4: # AC_DEFUN([AC_PROG_INTLTOOL], ...) # nls.m4 serial 5 (gettext-0.18) dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ([2.50]) AC_DEFUN([AM_NLS], [ AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE([nls], [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT([$USE_NLS]) AC_SUBST([USE_NLS]) ]) # Copyright (C) 2006-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) xscreensaver-5.34/ax_pthread.m4000644 000767 000767 00000032676 12341006130 016246 0ustar00jwzjwz000000 000000 # =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_pthread.html # =========================================================================== # # SYNOPSIS # # AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # # DESCRIPTION # # This macro figures out how to build C programs using POSIX threads. It # sets the PTHREAD_LIBS output variable to the threads library and linker # flags, and the PTHREAD_CFLAGS output variable to any special C compiler # flags that are needed. (The user can also force certain compiler # flags/libs to be tested by setting these environment variables.) # # Also sets PTHREAD_CC to any special C compiler that is needed for # multi-threaded programs (defaults to the value of CC otherwise). (This # is necessary on AIX to use the special cc_r compiler alias.) # # NOTE: You are assumed to not only compile your program with these flags, # but also link it with them as well. e.g. you should link with # $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS # # If you are only building threads programs, you may wish to use these # variables in your default LIBS, CFLAGS, and CC: # # LIBS="$PTHREAD_LIBS $LIBS" # CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # CC="$PTHREAD_CC" # # In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant # has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name # (e.g. PTHREAD_CREATE_UNDETACHED on AIX). # # Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the # PTHREAD_PRIO_INHERIT symbol is defined when compiling with # PTHREAD_CFLAGS. # # ACTION-IF-FOUND is a list of shell commands to run if a threads library # is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it # is not found. If ACTION-IF-FOUND is not specified, the default action # will define HAVE_PTHREAD. # # Please let the authors know if this macro fails on any platform, or if # you have any other suggestions or comments. This macro was based on work # by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help # from M. Frigo), as well as ac_pthread and hb_pthread macros posted by # Alejandro Forero Cuervo to the autoconf macro repository. We are also # grateful for the helpful feedback of numerous users. # # Updated for Autoconf 2.68 by Daniel Richard G. # # LICENSE # # Copyright (c) 2008 Steven G. Johnson # Copyright (c) 2011 Daniel Richard G. # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 21 AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) AC_DEFUN([AX_PTHREAD], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_PUSH([C]) ax_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on True64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) AC_TRY_LINK_FUNC([pthread_join], [ax_pthread_ok=yes]) AC_MSG_RESULT([$ax_pthread_ok]) if test x"$ax_pthread_ok" = xno; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items starting with a "-" are # C compiler flags, and other items are library names, except for "none" # which indicates that we try without any flags at all, and "pthread-config" # which is a program returning the flags for the Pth emulation library. ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) # -pthreads: Solaris/gcc # -mthreads: Mingw32/gcc, Lynx/gcc # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads too; # also defines -D_REENTRANT) # ... -mt is also the pthreads flag for HP/aCC # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case ${host_os} in solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (We need to link with -pthreads/-mt/ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather # a function called by this macro, so we could check for that, but # who knows whether they'll stub that too in a future libc.) So, # we'll just look for -pthreads and -lpthread first: ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags" ;; darwin*) ax_pthread_flags="-pthread $ax_pthread_flags" ;; esac # Clang doesn't consider unrecognized options an error unless we specify # -Werror. We throw in some extra Clang-specific options to ensure that # this doesn't happen for GCC, which also accepts -Werror. AC_MSG_CHECKING([if compiler needs -Werror to reject unknown flags]) save_CFLAGS="$CFLAGS" ax_pthread_extra_flags="-Werror" CFLAGS="$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([int foo(void);],[foo()])], [AC_MSG_RESULT([yes])], [ax_pthread_extra_flags= AC_MSG_RESULT([no])]) CFLAGS="$save_CFLAGS" if test x"$ax_pthread_ok" = xno; then for flag in $ax_pthread_flags; do case $flag in none) AC_MSG_CHECKING([whether pthreads work without any flags]) ;; -*) AC_MSG_CHECKING([whether pthreads work with $flag]) PTHREAD_CFLAGS="$flag" ;; pthread-config) AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no]) if test x"$ax_pthread_config" = xno; then continue; fi PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) AC_MSG_CHECKING([for the pthreads library -l$flag]) PTHREAD_LIBS="-l$flag" ;; esac save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS $ax_pthread_extra_flags" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. AC_LINK_IFELSE([AC_LANG_PROGRAM([#include static void routine(void *a) { a = 0; } static void *start_routine(void *a) { return a; }], [pthread_t th; pthread_attr_t attr; pthread_create(&th, 0, start_routine, 0); pthread_join(th, 0); pthread_attr_init(&attr); pthread_cleanup_push(routine, 0); pthread_cleanup_pop(0) /* ; */])], [ax_pthread_ok=yes], []) LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" AC_MSG_RESULT([$ax_pthread_ok]) if test "x$ax_pthread_ok" = xyes; then break; fi PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Various other checks: if test "x$ax_pthread_ok" = xyes; then save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. AC_MSG_CHECKING([for joinable pthread attribute]) attr_name=unknown for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], [int attr = $attr; return attr /* ; */])], [attr_name=$attr; break], []) done AC_MSG_RESULT([$attr_name]) if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE], [$attr_name], [Define to necessary symbol if this constant uses a non-standard name on your system.]) fi AC_MSG_CHECKING([if more special flags are required for pthreads]) flag=no case ${host_os} in aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";; osf* | hpux*) flag="-D_REENTRANT";; solaris*) if test "$GCC" = "yes"; then flag="-D_REENTRANT" else # TODO: What about Clang on Solaris? flag="-mt -D_REENTRANT" fi ;; esac AC_MSG_RESULT([$flag]) if test "x$flag" != xno; then PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" fi AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT], [ax_cv_PTHREAD_PRIO_INHERIT], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[int i = PTHREAD_PRIO_INHERIT;]])], [ax_cv_PTHREAD_PRIO_INHERIT=yes], [ax_cv_PTHREAD_PRIO_INHERIT=no]) ]) AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"], [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])]) LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" # More AIX lossage: compile with *_r variant if test "x$GCC" != xyes; then case $host_os in aix*) AS_CASE(["x/$CC"], [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6], [#handle absolute path differently from PATH based program lookup AS_CASE(["x$CC"], [x/*], [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])], [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])]) ;; esac fi fi test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" AC_SUBST([PTHREAD_LIBS]) AC_SUBST([PTHREAD_CFLAGS]) AC_SUBST([PTHREAD_CC]) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$ax_pthread_ok" = xyes; then ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1]) : else ax_pthread_ok=no $2 fi AC_LANG_POP ])dnl AX_PTHREAD xscreensaver-5.34/config.sub000664 000767 000767 00000105412 12250746731 015655 0ustar00jwzjwz000000 000000 #! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2013 Free Software Foundation, Inc. timestamp='2013-10-01' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches with a ChangeLog entry to config-patches@gnu.org. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 \ | or1k | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or1k-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: xscreensaver-5.34/makevms.com000644 000767 000767 00000001620 06366446355 016044 0ustar00jwzjwz000000 000000 $! Build Xscreensaver under OpenVMS V 6.x system with DEC C 5.x compiler $! $ copy /log CONFIG.H-VMS CONFIG.H $! $! Architecture type test (VAX < 1024 <= Alpha AXP) $! $ if f$getsyi("HW_MODEL").ge.1024 $ then $! $! Alpha AXP $! build Utils library $! $ set def [.UTILS] $ @COMPILE_AXP $ set def [-] $! $! build graphics hacks $! $ set def [.HACKS] $ @COMPILE_AXP $ @LINK_AXP $ set def [-] $! $! Build Xscreensaver & Xscreensaver-command $! $ set def [.DRIVER] $ @COMPILE_AXP $ @LINK_AXP $ set def [-] $ else $! $! Good old VAX $! build Utils library $! $ set def [.UTILS] $ @COMPILE_DECC $ set def [-] $! $! build graphics hacks $! $ set def [.HACKS] $ @COMPILE_DECC $ @LINK_DECC $ set def [-] $! $! Build Xscreensaver & Xscreensaver-command $! $ set def [.DRIVER] $ @COMPILE_DECC $ @LINK_DECC $ set def [-] $ endif $! $! DCL symbols definition $! $ @SETUP $ exit xscreensaver-5.34/intltool-merge.in000644 000767 000767 00000032532 07463506750 017173 0ustar00jwzjwz000000 000000 #!@INTLTOOL_PERL@ -w # # The Intltool Message Merger # # Copyright (C) 2000, 2002 Free Software Foundation. # Copyright (C) 2000, 2001 Eazel, Inc # # Intltool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # version 2 published by the Free Software Foundation. # # Intltool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # # Authors: Maciej Stachowiak # Kenneth Christiansen # Darin Adler # # Proper XML UTF-8'ification written by Cyrille Chepelov # ## Release information my $PROGRAM = "intltool-merge"; my $PACKAGE = "intltool"; my $VERSION = "0.18"; ## Loaded modules use strict; use Getopt::Long; ## Scalars used by the option stuff my $HELP_ARG = 0; my $VERSION_ARG = 0; my $BA_STYLE_ARG = 0; my $XML_STYLE_ARG = 0; my $KEYS_STYLE_ARG = 0; my $DESKTOP_STYLE_ARG = 0; my $QUIET_ARG = 0; my $PASS_THROUGH_ARG = 0; my $UTF8_ARG = 0; my $cache_file; ## Handle options GetOptions ( "help" => \$HELP_ARG, "version" => \$VERSION_ARG, "quiet|q" => \$QUIET_ARG, "oaf-style|o" => \$BA_STYLE_ARG, ## for compatibility "ba-style|b" => \$BA_STYLE_ARG, "xml-style|x" => \$XML_STYLE_ARG, "keys-style|k" => \$KEYS_STYLE_ARG, "desktop-style|d" => \$DESKTOP_STYLE_ARG, "pass-through|p" => \$PASS_THROUGH_ARG, "utf8|u" => \$UTF8_ARG, "cache|c=s" => \$cache_file ) or &error; my $PO_DIR; my $FILE; my $OUTFILE; my %po_files_by_lang = (); my %translations = (); # Use this instead of \w for XML files to handle more possible characters. my $w = "[-A-Za-z0-9._:]"; # XML quoted string contents my $q = "[^\\\"]*"; ## Check for options. if ($VERSION_ARG) { &print_version; } elsif ($HELP_ARG) { &print_help; } elsif ($BA_STYLE_ARG && @ARGV > 2) { &preparation; &print_message; &ba_merge_translations; &finalize; } elsif ($XML_STYLE_ARG && @ARGV > 2) { &utf8_sanity_check; &preparation; &print_message; &xml_merge_translations; &finalize; } elsif ($KEYS_STYLE_ARG && @ARGV > 2) { &utf8_sanity_check; &preparation; &print_message; &keys_merge_translations; &finalize; } elsif ($DESKTOP_STYLE_ARG && @ARGV > 2) { &preparation; &print_message; &desktop_merge_translations; &finalize; } else { &print_help; } exit; ## Sub for printing release information sub print_version { print "${PROGRAM} (${PACKAGE}) ${VERSION}\n"; print "Written by Maciej Stachowiak, Darin Adler and Kenneth Christiansen.\n\n"; print "Copyright (C) 2000-2002 Free Software Foundation, Inc.\n"; print "Copyright (C) 2000-2001 Eazel, Inc.\n"; print "This is free software; see the source for copying conditions. There is NO\n"; print "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"; exit; } ## Sub for printing usage information sub print_help { print "Usage: ${PROGRAM} [OPTIONS] PO_DIRECTORY FILENAME OUTPUT_FILE\n"; print "Generates an output file that includes translated versions of some attributes,\n"; print "from an untranslated source and a po directory that includes translations.\n\n"; print " -b, --ba-style includes translations in the bonobo-activation style\n"; print " -d, --desktop-style includes translations in the desktop style\n"; print " -k, --keys-style includes translations in the keys style\n"; print " -x, --xml-style includes translations in the standard xml style\n"; print " -u, --utf8 convert all strings to UTF-8 before merging\n"; print " -p, --pass-through use strings as found in .po files, without\n"; print " conversion (STRONGLY unrecommended with -x)\n"; print " -q, --quiet suppress most messages\n"; print " --help display this help and exit\n"; print " --version output version information and exit\n"; print "\nReport bugs to bugzilla.gnome.org, module intltool, or contact us through \n"; print ".\n"; exit; } ## Sub for printing error messages sub print_error { print "Try `${PROGRAM} --help' for more information.\n"; exit; } sub print_message { print "Merging translations into $OUTFILE.\n" unless $QUIET_ARG; } sub preparation { $PO_DIR = $ARGV[0]; $FILE = $ARGV[1]; $OUTFILE = $ARGV[2]; &gather_po_files; &get_translation_database; } # General-purpose code for looking up translations in .po files sub po_file2lang { my ($tmp) = @_; $tmp =~ s/^.*\/(.*)\.po$/$1/; return $tmp; } sub gather_po_files { for my $po_file (glob "$PO_DIR/*.po") { $po_files_by_lang{po_file2lang($po_file)} = $po_file; } } sub get_po_encoding { my ($in_po_file) = @_; my $encoding = ""; open IN_PO_FILE, $in_po_file or die; while () { ## example: "Content-Type: text/plain; charset=ISO-8859-1\n" if (/Content-Type\:.*charset=([-a-zA-Z0-9]+)\\n/) { $encoding = $1; last; } } close IN_PO_FILE; if (!$encoding) { print "Warning: no encoding found in $in_po_file. Assuming ISO-8859-1\n"; $encoding = "ISO-8859-1"; } return $encoding } sub utf8_sanity_check { if (!$UTF8_ARG) { if (!$PASS_THROUGH_ARG) { $PASS_THROUGH_ARG="1"; } } } sub get_translation_database { if ($cache_file) { &get_cached_translation_database; } else { &create_translation_database; } } sub get_newest_po_age { my $newest_age; foreach my $file (values %po_files_by_lang) { my $file_age = -M $file; $newest_age = $file_age if !$newest_age || $file_age < $newest_age; } return $newest_age; } sub create_cache { print "Generating and caching the translation database\n" unless $QUIET_ARG; &create_translation_database; open CACHE, ">$cache_file" || die; print CACHE join "\x01", %translations; close CACHE; } sub load_cache { print "Found cached translation database\n" unless $QUIET_ARG; my $contents; open CACHE, "<$cache_file" || die; { local $/; $contents = ; } close CACHE; %translations = split "\x01", $contents; } sub get_cached_translation_database { my $cache_file_age = -M $cache_file; if (defined $cache_file_age) { if ($cache_file_age <= &get_newest_po_age) { &load_cache; return; } print "Found too-old cached translation database\n" unless $QUIET_ARG; } &create_cache; } sub create_translation_database { for my $lang (keys %po_files_by_lang) { my $po_file = $po_files_by_lang{$lang}; if ($UTF8_ARG) { my $encoding = get_po_encoding ($po_file); if (lc $encoding eq "utf-8") { open PO_FILE, "<$po_file"; } else { my $iconv = $ENV{"INTLTOOL_ICONV"} || "iconv"; open PO_FILE, "$iconv -f $encoding -t UTF-8 $po_file|"; } } else { open PO_FILE, "<$po_file"; } my $nextfuzzy = 0; my $inmsgid = 0; my $inmsgstr = 0; my $msgid = ""; my $msgstr = ""; while () { $nextfuzzy = 1 if /^#, fuzzy/; if (/^msgid "((\\.|[^\\])*)"/ ) { $translations{$lang, $msgid} = $msgstr if $inmsgstr && $msgid && $msgstr; $msgid = ""; $msgstr = ""; if ($nextfuzzy) { $inmsgid = 0; } else { $msgid = unescape_po_string($1); $inmsgid = 1; } $inmsgstr = 0; $nextfuzzy = 0; } if (/^msgstr "((\\.|[^\\])*)"/) { $msgstr = unescape_po_string($1); $inmsgstr = 1; $inmsgid = 0; } if (/^"((\\.|[^\\])*)"/) { $msgid .= unescape_po_string($1) if $inmsgid; $msgstr .= unescape_po_string($1) if $inmsgstr; } } $translations{$lang, $msgid} = $msgstr if $inmsgstr && $msgid && $msgstr; } } sub finalize { } sub unescape_one_sequence { my ($sequence) = @_; return "\\" if $sequence eq "\\\\"; return "\"" if $sequence eq "\\\""; # gettext also handles \n, \t, \b, \r, \f, \v, \a, \xxx (octal), # \xXX (hex) and has a comment saying they want to handle \u and \U. return $sequence; } sub unescape_po_string { my ($string) = @_; $string =~ s/(\\.)/unescape_one_sequence($1)/eg; return $string; } sub entity_decode { local ($_) = @_; s/'/'/g; # ' s/"/"/g; # " s/&/&/g; return $_; } sub entity_encode { my ($pre_encoded) = @_; my @list_of_chars = unpack ('C*', $pre_encoded); if ($PASS_THROUGH_ARG) { return join ('', map (&entity_encode_int_even_high_bit, @list_of_chars)); } else { return join ('', map (&entity_encode_int_minimalist, @list_of_chars)); } } sub entity_encode_int_minimalist { return """ if $_ == 34; return "&" if $_ == 38; return "'" if $_ == 39; return chr $_; } sub entity_encode_int_even_high_bit { if ($_ > 127 || $_ == 34 || $_ == 38 || $_ == 39) { # the ($_ > 127) should probably be removed return "&#" . $_ . ";"; } else { return chr $_; } } sub entity_encoded_translation { my ($lang, $string) = @_; my $translation = $translations{$lang, $string}; return $string if !$translation; return entity_encode ($translation); } ## XML (bonobo-activation specific) merge code sub ba_merge_translations { my $source; { local $/; # slurp mode open INPUT, "<$FILE" or die "can't open $FILE: $!"; $source = ; close INPUT; } open OUTPUT, ">$OUTFILE" or die "can't open $OUTFILE: $!"; while ($source =~ s|^(.*?)([ \t]*<\s*$w+\s+($w+\s*=\s*"$q"\s*)+/?>)([ \t]*\n)?||s) { print OUTPUT $1; my $node = $2 . "\n"; my @strings = (); $_ = $node; while (s/(\s)_($w+\s*=\s*"($q)")/$1$2/s) { push @strings, entity_decode($3); } print OUTPUT; my %langs; for my $string (@strings) { for my $lang (keys %po_files_by_lang) { $langs{$lang} = 1 if $translations{$lang, $string}; } } for my $lang (sort keys %langs) { $_ = $node; s/(\sname\s*=\s*)"($q)"/$1"$2-$lang"/s; s/(\s)_($w+\s*=\s*")($q)"/$1 . $2 . entity_encoded_translation($lang, $3) . '"'/seg; print OUTPUT; } } print OUTPUT $source; close OUTPUT; } ## XML (non-bonobo-activation) merge code sub xml_merge_translations { my $source; { local $/; # slurp mode open INPUT, "<$FILE" or die "can't open $FILE: $!"; $source = ; close INPUT; } open OUTPUT, ">$OUTFILE" or die; # FIXME: support attribute translations # Empty nodes never need translation, so unmark all of them. # For example, <_foo/> is just replaced by . $source =~ s|<\s*_($w+)\s*/>|<$1/>|g; # Support for <_foo>blah style translations. while ($source =~ s|^(.*?)([ \t]*)<\s*_($w+)\s*>(.*?)<\s*/_\3\s*>([ \t]*\n)?||s) { print OUTPUT $1; my $spaces = $2; my $tag = $3; my $string = $4; print OUTPUT "$spaces<$tag>$string\n"; $string =~ s/\s+/ /g; $string =~ s/^ //; $string =~ s/ $//; $string = entity_decode($string); for my $lang (sort keys %po_files_by_lang) { my $translation = $translations{$lang, $string}; next if !$translation; $translation = entity_encode($translation); print OUTPUT "$spaces<$tag xml:lang=\"$lang\">$translation\n"; } } print OUTPUT $source; close OUTPUT; } sub keys_merge_translations { open INPUT, "<${FILE}" or die; open OUTPUT, ">${OUTFILE}" or die; while () { if (s/^(\s*)_(\w+=(.*))/$1$2/) { my $string = $3; print OUTPUT; my $non_translated_line = $_; for my $lang (sort keys %po_files_by_lang) { my $translation = $translations{$lang, $string}; next if !$translation; $_ = $non_translated_line; s/(\w+)=.*/[$lang]$1=$translation/; print OUTPUT; } } else { print OUTPUT; } } close OUTPUT; close INPUT; } sub desktop_merge_translations { open INPUT, "<${FILE}" or die; open OUTPUT, ">${OUTFILE}" or die; while () { if (s/^(\s*)_(\w+=(.*))/$1$2/) { my $string = $3; print OUTPUT; my $non_translated_line = $_; for my $lang (sort keys %po_files_by_lang) { my $translation = $translations{$lang, $string}; next if !$translation; $_ = $non_translated_line; s/(\w+)=.*/${1}[$lang]=$translation/; print OUTPUT; } } else { print OUTPUT; } } close OUTPUT; close INPUT; } xscreensaver-5.34/intltool-extract.in000644 000767 000767 00000016145 07463506750 017550 0ustar00jwzjwz000000 000000 #!@INTLTOOL_PERL@ -w # -*- Mode: perl; indent-tabs-mode: nil; c-basic-offset: 4 -*- # # The Intltool Message Extractor # # Copyright (C) 2000-2001 Free Software Foundation. # # Intltool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of the # License, or (at your option) any later version. # # Intltool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # # Authors: Kenneth Christiansen # Darin Adler # ## Release information my $PROGRAM = "intltool-extract"; my $PACKAGE = "intltool"; my $VERSION = "0.18"; ## Loaded modules use strict; use File::Basename; use Getopt::Long; ## Scalars used by the option stuff my $TYPE_ARG = "0"; my $LOCAL_ARG = "0"; my $HELP_ARG = "0"; my $VERSION_ARG = "0"; my $UPDATE_ARG = "0"; my $QUIET_ARG = "0"; my $FILE; my $OUTFILE; my $gettext_type = ""; my $input; my %messages = (); ## Use this instead of \w for XML files to handle more possible characters. my $w = "[-A-Za-z0-9._:]"; ## Always print first $| = 1; ## Handle options GetOptions ( "type=s" => \$TYPE_ARG, "local|l" => \$LOCAL_ARG, "help|h" => \$HELP_ARG, "version|v" => \$VERSION_ARG, "update" => \$UPDATE_ARG, "quiet|q" => \$QUIET_ARG, ) or &error; &split_on_argument; ## Check for options. ## This section will check for the different options. sub split_on_argument { if ($VERSION_ARG) { &version; } elsif ($HELP_ARG) { &help; } elsif ($LOCAL_ARG) { &place_local; &extract; } elsif ($UPDATE_ARG) { &place_normal; &extract; } elsif (@ARGV > 0) { &place_normal; &message; &extract; } else { &help; } } sub place_normal { $FILE = $ARGV[0]; $OUTFILE = "$FILE.h"; } sub place_local { $OUTFILE = fileparse($FILE, ()); if (!-e "tmp/") { system("mkdir tmp/"); } $OUTFILE = "./tmp/$OUTFILE.h" } sub determine_type { if ($TYPE_ARG =~ /^gettext\/(.*)/) { $gettext_type=$1 } } ## Sub for printing release information sub version{ print "${PROGRAM} (${PACKAGE}) $VERSION\n"; print "Copyright (C) 2000 Free Software Foundation, Inc.\n"; print "Written by Kenneth Christiansen, 2000.\n\n"; print "This is free software; see the source for copying conditions. There is NO\n"; print "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"; exit; } ## Sub for printing usage information sub help{ print "Usage: ${PROGRAM} [FILENAME] [OPTIONS] ...\n"; print "Generates a header file from an xml source file.\n\nGrabs all strings "; print "between <_translatable_node> and it's end tag,\nwhere tag are all allowed "; print "xml tags. Read the docs for more info.\n\n"; print " -v, --version shows the version\n"; print " -h, --help shows this help page\n"; print " -q, --quiet quiet mode\n"; print "\nReport bugs to .\n"; exit; } ## Sub for printing error messages sub error{ print "Try `${PROGRAM} --help' for more information.\n"; exit; } sub message { print "Generating C format header file for translation.\n"; } sub extract { &determine_type; &convert ($FILE); open OUT, ">$OUTFILE"; &msg_write; close OUT; print "Wrote $OUTFILE\n" unless $QUIET_ARG; } sub convert($) { ## Reading the file { local (*IN); local $/; #slurp mode open (IN, "<$FILE") || die "can't open $FILE: $!"; $input = ; } &type_ini if $gettext_type eq "ini"; &type_keys if $gettext_type eq "keys"; &type_xml if $gettext_type eq "xml"; &type_glade if $gettext_type eq "glade"; &type_scheme if $gettext_type eq "scheme"; } sub entity_decode_minimal { local ($_) = @_; s/'/'/g; # ' s/"/"/g; # " s/&/&/g; return $_; } sub entity_decode { local ($_) = @_; s/'/'/g; # ' s/"/"/g; # " s/&/&/g; s/<//g; return $_; } sub escape_char { return '\"' if $_ eq '"'; return '\n' if $_ eq "\n"; return '\\' if $_ eq '\\'; return $_; } sub escape { my ($string) = @_; return join "", map &escape_char, split //, $string; } sub type_ini { ### For generic translatable desktop files ### while ($input =~ /^_.*=(.*)$/mg) { $messages{$1} = []; } } sub type_keys { ### For generic translatable mime/keys files ### while ($input =~ /^\s*_\w+=(.*)$/mg) { $messages{$1} = []; } } sub type_xml { ### For generic translatable XML files ### while ($input =~ /\s_$w+=\"([^"]+)\"/sg) { # " $messages{entity_decode_minimal($1)} = []; } while ($input =~ /<_($w+)>(.+?)<\/_\1>/sg) { $_ = $2; s/\s+/ /g; s/^ //; s/ $//; $messages{entity_decode_minimal($_)} = []; } } sub type_glade { ### For translatable Glade XML files ### my $tags = "label|title|text|format|copyright|comments|preview_text|tooltip|message"; while ($input =~ /<($tags)>([^<]+)<\/($tags)>/sg) { # Glade sometimes uses tags that normally mark translatable things for # little bits of non-translatable content. We work around this by not # translating strings that only includes something like label4 or window1. $messages{entity_decode($2)} = [] unless $2 =~ /^(window|label)[0-9]+$/; } while ($input =~ /(..[^<]*)<\/items>/sg) { for my $item (split (/\n/, $1)) { $messages{entity_decode($item)} = []; } } ## handle new glade files while ($input =~ /<(property|atkproperty)\s+[^>]*translatable\s*=\s*"yes"[^>]*>([^<]+)<\/\1>/sg) { $messages{entity_decode($2)} = [] unless $2 =~ /^(window|label)[0-9]+$/; } } sub type_scheme { while ($input =~ /_\(?"((?:[^"\\]+|\\.)*)"\)?/sg) { $messages{$1} = []; } } sub msg_write { for my $message (sort keys %messages) { print OUT "/* xgettext:no-c-format */\n" if $message =~ /%/; my @lines = split (/\n/, $message); for (my $n = 0; $n < @lines; $n++) { if ($n == 0) { print OUT "char *s = N_(\""; } else { print OUT " \""; } print OUT escape($lines[$n]); if ($n < @lines - 1) { print OUT "\\n\"\n"; } else { print OUT "\");\n"; } } } } xscreensaver-5.34/intltool-update.in000644 000767 000767 00000036423 10503603572 017346 0ustar00jwzjwz000000 000000 #!@INTLTOOL_PERL@ -w # # The Intltool Message Updater # # Copyright (C) 2000-2002 Free Software Foundation. # # Intltool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # version 2 published by the Free Software Foundation. # # Intltool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # # Authors: Kenneth Christiansen # Maciej Stachowiak # Darin Adler ## Release information my $PROGRAM = "intltool-update"; my $VERSION = "0.18"; my $PACKAGE = "intltool"; ## Loaded modules use strict; use Getopt::Long; use Cwd; use File::Copy; use File::Find; ## Scalars used by the option stuff my $HELP_ARG = 0; my $VERSION_ARG = 0; my $DIST_ARG = 0; my $POT_ARG = 0; my $HEADERS_ARG = 0; my $MAINTAIN_ARG = 0; my $REPORT_ARG = 0; my $VERBOSE = 0; my $GETTEXT_PACKAGE = ""; my @languages; my %po_files_by_lang = (); # Regular expressions to categorize file types. # FIXME: Please check if the following is correct my $xml_extension = "xml(\.in)*|". # .in is not required "ui|". "glade2?(\.in)*|". # .in is not required "scm(\.in)*|". # .in is not required "oaf(\.in)+|". "etspec|". "sheet(\.in)+|". "pong(\.in)+"; my $ini_extension = "desktop(\.in)+|". "caves(\.in)+|". "directory(\.in)+|". "soundlist(\.in)+|". "keys(\.in)+|". "server(\.in)+"; ## Always print as the first thing $| = 1; ## Handle options GetOptions ( "help" => \$HELP_ARG, "version" => \$VERSION_ARG, "dist|d" => \$DIST_ARG, "pot|p" => \$POT_ARG, "headers|s" => \$HEADERS_ARG, "maintain|m" => \$MAINTAIN_ARG, "report|r" => \$REPORT_ARG, "verbose|x" => \$VERBOSE, "gettext-package|g=s" => \$GETTEXT_PACKAGE, ) or &print_error_invalid_option; &print_help if $HELP_ARG; &print_version if $VERSION_ARG; my $arg_count = ($DIST_ARG > 0) + ($POT_ARG > 0) + ($HEADERS_ARG > 0) + ($MAINTAIN_ARG > 0) + ($REPORT_ARG > 0); &print_help if $arg_count > 1; # --version and --help don't require a module name my $MODULE = $GETTEXT_PACKAGE || &find_package_name; if ($DIST_ARG) { if ($ARGV[0] =~ /^[a-z]/){ &update_po_file ($ARGV[0]); &print_status ($ARGV[0]); } else { &print_help; } } elsif ($POT_ARG) { &generate_headers; &generate_po_template; } elsif ($HEADERS_ARG) { &generate_headers; } elsif ($MAINTAIN_ARG) { &find_leftout_files; } elsif ($REPORT_ARG) { &print_report; } else { if ($ARGV[0] =~ /^[a-z]/) { &main ($ARGV[0]); } else { &print_help; } } exit; ######### sub print_version { ## Print version information print "${PROGRAM} (${PACKAGE}) $VERSION\n"; print "Written by Kenneth Christiansen, Maciej Stachowiak, and Darin Adler.\n\n"; print "Copyright (C) 2000-2002 Free Software Foundation, Inc.\n"; print "This is free software; see the source for copying conditions. There is NO\n"; print "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"; exit; } sub print_help { ## Print usage information print "Usage: ${PROGRAM} [OPTIONS] ...LANGCODE\n"; print "Updates PO template files and merge them with the translations.\n\n"; print " -p, --pot generate the PO template only\n"; print " -s, --headers generate the header files in POTFILES.in\n"; print " -m, --maintain search for left out files from POTFILES.in\n"; print " -r, --report display a status report for the module.\n"; print " -x, --verbose display lots of feedback\n"; print " --help display this help and exit\n"; print " --version output version information and exit\n"; print "\nExamples of use:\n"; print "${PROGRAM} --pot just creates a new PO template from the source\n"; print "${PROGRAM} da created new PO template and updated the da.po file\n\n"; print "Report bugs to bugzilla.gnome.org, module 'intltool'.\n"; exit; } sub main { my ($lang) = @_; ## Report error if the language file supplied ## to the command line is non-existent &print_error_not_existing("$lang.po") if ! -s "$lang.po"; print "Working, please wait..." unless $VERBOSE; &generate_headers; &generate_po_template; &update_po_file ($lang); &print_status ($lang); } sub determine_type ($) { my $type = $_; my $gettext_type; # FIXME: Use $xml_extentions, and maybe do all this even nicer my $xml_regex = "(?:xml(\.in)*|ui|oaf(?:\.in)+|server(?:\.in)+|sheet(?:\.in)+|". "pong(?:\.in)+|etspec)"; my $ini_regex = "(?:desktop(?:\.in)+|caves(?:\.in)+|directory(?:\.in)+|". "soundlist(?:\.in)+)"; if ($type =~ /\[type: gettext\/([^\]].*)]/) { $gettext_type=$1; } elsif ($type =~ /$xml_regex$/) { $gettext_type="xml"; } elsif ($type =~ /glade2?(\.in)*$/) { $gettext_type="glade"; } elsif ($type =~ /$ini_regex$/) { $gettext_type="ini"; } elsif ($type =~ /scm(\.in)*$/) { $gettext_type="scheme"; } elsif ($type =~ /keys(\.in)+$/) { $gettext_type="keys"; } else { $gettext_type=""; } return "gettext\/$gettext_type"; } sub find_leftout_files { my (@buf_i18n_plain, @buf_i18n_xml, @buf_i18n_ini, @buf_potfiles, @buf_potfiles_ignore, @buf_allfiles, @buf_allfiles_sorted, @buf_potfiles_sorted ); ## Search and find all translatable files find sub { push @buf_i18n_plain, "$File::Find::name" if /\.(c|y|cc|cpp|c\+\+|h|gob)$/ }, ".."; find sub { push @buf_i18n_xml, "$File::Find::name" if /\.($xml_extension)$/ }, ".."; find sub { push @buf_i18n_ini, "$File::Find::name" if /\.($ini_extension)$/ }, ".."; open POTFILES, "POTFILES.in" || die "$PROGRAM: there's no POTFILES.in!\n"; @buf_potfiles = grep /^[^#]/, ; print "Searching for missing translatable files...\n" if $VERBOSE; ## Check if we should ignore some found files, when ## comparing with POTFILES.in foreach my $ignore ("POTFILES.skip", "POTFILES.ignore") { if (-s $ignore) { open FILE, $ignore; while () { if (/^[^#]/){ push @buf_potfiles_ignore, $_; } } print "Found $ignore: Ignoring files...\n" if $VERBOSE; @buf_potfiles = (@buf_potfiles_ignore, @buf_potfiles); } } foreach my $file (@buf_i18n_plain) { my $in_comment = 0; my $in_macro = 0; open FILE, "<$file"; while () { # Handle continued multi-line comment. if ($in_comment) { next unless s-.*\*/--; $in_comment = 0; } # Handle continued macro. if ($in_macro) { $in_macro = 0 unless /\\$/; next; } # Handle start of macro (or any preprocessor directive). if (/^\s*\#/) { $in_macro = 1 if /^([^\\]|\\.)*\\$/; next; } # Handle comments and quoted text. while (m-(/\*|//|\'|\")-) # \' and \" keep emacs perl mode happy { my $match = $1; if ($match eq "/*") { if (!s-/\*.*?\*/--) { s-/\*.*--; $in_comment = 1; } } elsif ($match eq "//") { s-//.*--; } else # ' or " { if (!s-$match([^\\]|\\.)*?$match-QUOTEDTEXT-) { warn "mismatched quotes at line $. in $file\n"; s-$match.*--; } } } if (/_\(QUOTEDTEXT/) { ## Remove the first 3 chars and add newline push @buf_allfiles, unpack("x3 A*", $file) . "\n"; last; } } close FILE; } foreach my $file (@buf_i18n_xml) { open FILE, "<$file"; while () { if (/\s_(.*)=\"/){ push @buf_allfiles, unpack("x3 A*", $file) . "\n"; last; } } } foreach my $file (@buf_i18n_ini){ open FILE, "<$file"; while () { if (/_(.*)=/){ push @buf_allfiles, unpack("x3 A*", $file) . "\n"; last; } } } @buf_allfiles_sorted = sort (@buf_allfiles); @buf_potfiles_sorted = sort (@buf_potfiles); my %in2; foreach (@buf_potfiles_sorted) { $in2{$_} = 1; } my @result; foreach (@buf_allfiles_sorted){ if (!exists($in2{$_})){ push @result, $_ } } ## Save file with information about the files missing ## if any, and give information about this procedure. if (@result) { print "\n" if $VERBOSE; open OUT, ">missing"; print OUT @result; print "The following files contain translations and are currently not in use. Please\n"; print "consider adding these to the POTFILES.in file, located in the po/ directory.\n\n"; print @result, "\n"; print "If some of these files are left out on purpose then please add them to\n"; print "POTFILES.skip instead of POTFILES.in. A file 'missing' containing this list\n"; print "of left out files has been written in the current directory.\n"; } ## If there is nothing to complain about, notify the user else { print "\nAll files containing translations are present in POTFILES.in.\n"; } } sub print_error_invalid_option { ## Handle invalid arguments print "Try `${PROGRAM} --help' for more information.\n"; exit 1; } sub generate_headers { my $EXTRACT = `which intltool-extract 2>/dev/null`; chomp $EXTRACT; $EXTRACT = $ENV{"INTLTOOL_EXTRACT"} if $ENV{"INTLTOOL_EXTRACT"}; ## Generate the .h header files, so we can allow glade and ## xml translation support if (! -s $EXTRACT) { print "\n *** The intltool-extract script wasn't found!" ."\n *** Without it, intltool-update can not generate files.\n"; exit; } else { open FILE, ") { chomp; ## Find xml files in POTFILES.in and generate the ## files with help from the extract script my $gettext_type= &determine_type ($1); if (/\.($xml_extension|$ini_extension)$/ || /^\[/){ $_ =~ s/^\[[^\[].*]\s*//; my $filename = "../$_"; my $srcdir = $ENV{'top_srcdir'}; if ($srcdir){ $filename="$srcdir/$_" ; }; if ($VERBOSE){ system($EXTRACT, "--update", "--type=$gettext_type", $filename); } else { system($EXTRACT, "--update", "--type=$gettext_type", "--quiet", $filename); } } } close FILE; } } sub generate_po_template { ## Generate the potfiles from the POTFILES.in file print "Building the $MODULE.pot...\n" if $VERBOSE; move ("POTFILES.in", "POTFILES.in.old"); my $srcdir = $ENV{'top_srcdir'}; my $adddirectory = "--directory=." ; if ($srcdir){ $adddirectory = "--directory=$srcdir"; } open INFILE, "POTFILES.in"; while () { s/\.($xml_extension|$ini_extension)$/$&.h/; s/^\[.*]\s*(.*)/$1.h/; print OUTFILE $_; } close OUTFILE; close INFILE; system ("xgettext", "--default-domain\=$MODULE", "--directory\=\.\.", "$adddirectory" , "--add-comments", "--keyword\=\_", "--keyword\=N\_", "--keyword\=U\_", "--files-from\=\.\/POTFILES\.in"); if (!-e "$MODULE.po") { print "WARNING: It seems that none of the files in POTFILES.in ". "contain marked strings\n"; exit (1); } system ("rm", "-f", "$MODULE.pot"); move ("$MODULE.po", "$MODULE.pot") || die "$PROGRAM: couldn't move $MODULE.po to $MODULE.pot.\n"; print "Wrote $MODULE.pot\n" if $VERBOSE; move ("POTFILES.in.old", "POTFILES.in"); print "Removing generated header (.h) files..." if $VERBOSE; open FILE, ") { chomp; unlink "../$_.h" if /\.($xml_extension|$ini_extension)$/; } close FILE; print "done\n" if $VERBOSE; } sub update_po_file { my ($lang) = @_; print "Merging $lang.po with $MODULE.pot..." if $VERBOSE; copy ("$lang.po", "$lang.po.old") || die "copy failed: $!"; # Perform merge, remove backup file and the "messages" trash file # generated by gettext system ("msgmerge", "$lang.po.old", "$MODULE.pot", "-o", "$lang.po"); unlink "$lang.po.old"; unlink "messages"; } sub print_error_not_existing { my ($file) = @_; ## Report error if supplied language file is non-existing print "$PROGRAM: $file does not exist!\n"; print "Try '$PROGRAM --help' for more information.\n"; exit; } sub gather_po_files { my @po_files = glob ("./*.po"); @languages = map (&po_file2lang, @po_files); foreach my $lang (@languages) { $po_files_by_lang{$lang} = shift (@po_files); } } sub po_file2lang ($) { my $tmp = $_; $tmp =~ s/^.*\/(.*)\.po$/$1/; return $tmp; } sub print_status { my ($lang) = @_; system ("msgfmt", "--statistics", "$lang.po"); print "\n"; } sub print_report { &generate_headers; &generate_po_template; &gather_po_files; foreach my $lang (@languages) { print "$lang: "; &update_po_file ($lang); } print "\n\n * Current translation support in $MODULE \n\n"; foreach my $lang (@languages){ print "$lang: "; system ("msgfmt", "--statistics", "$lang.po"); } } sub find_package_name { my $base_dirname = getcwd(); $base_dirname =~ s@.*/@@; my ($conf_in, $src_dir); if ($base_dirname =~ /^po(-.+)?$/) { if (-f "../configure.in") { $conf_in = "../configure.in"; } else { my $makefile_source; local (*IN); open IN, ") { if (/^top_srcdir[ \t]*=/) { $src_dir = $_; # print "${src_dir}\n"; $src_dir =~ s/^top_srcdir[ \t]*=[ \t]*([^ \t\n\r]*)/$1/; # print "${src_dir}\n"; chomp $src_dir; $conf_in = "$src_dir" . "/configure.in" . "\n"; last; } } $conf_in || die "Cannot find top_srcdir in Makefile." } my $conf_source; { local (*IN); local $/; # slurp mode open (IN, "<$conf_in") || die "can't open $conf_in: $!"; $conf_source = ; } my $name = ""; $name = $1 if $conf_source =~ /^AM_INIT_AUTOMAKE\(([^,\)]+)/m; $name = $1 if $conf_source =~ /^GETTEXT_PACKAGE=(\S+)/m; if ($name =~ /^[\$](\S+)/) { return $1 if $conf_source =~ /^\s*$1=(\S*)/m; } return $name if $name; } print "$PROGRAM: Unable to determine package name.\n" . "Make sure to run this script inside the po directory.\n"; exit; } xscreensaver-5.34/xscreensaver.spec000644 000767 000767 00000013733 12612752043 017256 0ustar00jwzjwz000000 000000 %define name xscreensaver %define version 5.34 Summary: X screen saver and locker Name: %{name} Version: %{version} Release: 1 Epoch: 1 License: BSD Group: Amusements/Graphics URL: http://www.jwz.org/xscreensaver/ Source0: http://www.jwz.org/xscreensaver/xscreensaver-%{version}.tar.gz Vendor: Jamie Zawinski Buildroot: %{_tmppath}/%{name}-root %package base Summary: A minimal installation of xscreensaver. Summary(fr): Une installation minimale de xscreensaver. Group: Amusements/Graphics BuildRequires: bc BuildRequires: gettext BuildRequires: pam-devel BuildRequires: gtk2-devel BuildRequires: desktop-file-utils # Red Hat (pre-FC5): #BuildRequires: xorg-x11-devel #BuildRequires: libglade2-devel # Red Hat 5, CentOS5, FC5, and up: BuildRequires: xorg-x11-proto-devel BuildRequires: libglade2-devel # Mandrake: #BuildRequires: libxorg-x11-devel #BuildRequires: libglade2.0_0-devel Requires: SysVinit Requires: /etc/pam.d/system-auth Requires: htmlview Requires: desktop-backgrounds-basic Provides: xscreensaver Provides: xscreensaver-base Obsoletes: xscreensaver %package extras Summary: An enhanced set of screensavers. Summary(fr): Un jeu étendu d'économiseurs d'écran. Group: Amusements/Graphics Requires: xscreensaver-base %package gl-extras Summary: An enhanced set of screensavers that require OpenGL. Summary(fr): Un jeu étendu d'économiseurs d'écran qui nécessitent OpenGL. Group: Amusements/Graphics Requires: xscreensaver-base Obsoletes: xscreensaver-gl %description A modular screen saver and locker for the X Window System. More than 200 display modes are included in this package. %description -l fr Un économiseur d'écran modulaire pour le système X Window. Plus de 200 modes d'affichages sont inclus dans ce paquet. %description base A modular screen saver and locker for the X Window System. This package contains the bare minimum needed to blank and lock your screen. The graphical display modes are the "xscreensaver-extras" and "xscreensaver-gl-extras" packages. %description -l fr base Un économiseur d'écran modulaire pour le système X Window. Ce paquet contient le minimum vital pour éteindre et verouiller votre écran. Les modes d'affichages graphiques sont inclus dans les paquets "xscreensaver-extras" et "xscreensaver-gl-extras". %description extras A modular screen saver and locker for the X Window System. This package contains a variety of graphical screen savers for your mind-numbing, ambition-eroding, time-wasting, hypnotized viewing pleasure. %description -l fr extras Un économiseur d'écran modulaire pour le système X Window. Ce paquet contient une pléthore d'économiseurs d'écran graphiques pour votre plaisir des yeux. %description gl-extras A modular screen saver and locker for the X Window System. This package contains a variety of OpenGL-based (3D) screen savers for your mind-numbing, ambition-eroding, time-wasting, hypnotized viewing pleasure. %description -l fr gl-extras Un économiseur d'écran modulaire pour le système X Window. Ce paquet contient une pléthore d'économiseurs d'écran basés sur OpenGL (3D) pour votre plaisir des yeux. %prep %setup -q if [ -x %{_datadir}/libtool/config.guess ]; then # use system-wide copy cp -p %{_datadir}/libtool/config.{sub,guess} . fi %build archdir=`./config.guess` mkdir $archdir cd $archdir export CFLAGS="${CFLAGS:-${RPM_OPT_FLAGS}}" CONFIG_OPTS="--prefix=/usr --with-pam --without-shadow --without-kerberos" # Red Hat doesn't like this: CONFIG_OPTS="$CONFIG_OPTS --with-setuid-hacks" # This is flaky: # CONFIG_OPTS="$CONFIG_OPTS --with-login-manager" ln -s ../configure . %configure $CONFIG_OPTS rm -f configure make %install archdir=`./config.guess` cd $archdir rm -rf ${RPM_BUILD_ROOT} # We have to make sure these directories exist, # or nothing will be installed into them. # mkdir -p $RPM_BUILD_ROOT%{_bindir} \ $RPM_BUILD_ROOT%{_datadir}/xscreensaver \ $RPM_BUILD_ROOT%{_libexecdir}/xscreensaver \ $RPM_BUILD_ROOT%{_mandir}/man1/xscreensaver \ $RPM_BUILD_ROOT/etc/pam.d make install_prefix=$RPM_BUILD_ROOT install desktop-file-install --vendor gnome --delete-original \ --dir $RPM_BUILD_ROOT%{_datadir}/applications \ $RPM_BUILD_ROOT%{_datadir}/applications/*.desktop # This function prints a list of things that get installed. # It does this by parsing the output of a dummy run of "make install". # list_files() { make -s install_prefix=${RPM_BUILD_ROOT} INSTALL=true "$@" \ | sed -n -e 's@.* \(/[^ ]*\)$@\1@p' \ | sed -e "s@^${RPM_BUILD_ROOT}@@" \ -e "s@/[a-z][a-z]*/\.\./@/@" \ | sed -e 's@\(.*/man/.*\)@\1\*@' \ | sed -e 's@\(.*/app-defaults/\)@%config \1@' \ -e 's@\(.*/pam\.d/\)@%config(missingok) \1@' \ | sort } # Generate three lists of files for the three packages. # dd=%{_builddir}/%{name}-%{version} ( cd hacks ; list_files install ) > $dd/extras.files ( cd hacks/glx ; list_files install ) > $dd/gl-extras.files ( cd driver ; list_files install ) > $dd/base.files #( cd po ; list_files install ) >> $dd/base.files %find_lang %{name} cat %{name}.lang >> $dd/base.files # Make sure all files are readable by all, and writable only by owner. # chmod -R a+r,u+w,og-w ${RPM_BUILD_ROOT} %clean rm -rf ${RPM_BUILD_ROOT} %post base # This part runs on the end user's system, when the RPM is installed. # This will cause the screen to unlock, which annoys people. So, nevermind: # people will just have to remember to re-launch it themselves, like they # have to do with any other daemon they've upgraded. # #pids=`/sbin/pidof xscreensaver` #if [ -n "$pids" ]; then # echo "sending SIGHUP to running xscreensaver ($pids)..." >&2 # kill -HUP $pids #fi %files -f base.files base %defattr(-,root,root) %files -f extras.files extras %defattr(-,root,root) %files -f gl-extras.files gl-extras %defattr(-,root,root) %changelog * Fri Nov 4 2005 Eric Lassauge - Updated french translations xscreensaver-5.34/OSX/xscreensaver.xcodeproj/project.pbxproj000664 000767 000767 00006655477 12612752207 024156 0ustar00jwzjwz000000 000000 // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXAggregateTarget section */ AF137D410F075C9B004DE3B2 /* Obsolete */ = { isa = PBXAggregateTarget; buildConfigurationList = AF137D450F075CA4004DE3B2 /* Build configuration list for PBXAggregateTarget "Obsolete" */; buildPhases = ( ); dependencies = ( AF714E51105613580046AB1D /* PBXTargetDependency */, AF137D690F075E5C004DE3B2 /* PBXTargetDependency */, AF137D670F075E5C004DE3B2 /* PBXTargetDependency */, AF137D650F075E5C004DE3B2 /* PBXTargetDependency */, AF137D630F075E5C004DE3B2 /* PBXTargetDependency */, AF137D610F075E5C004DE3B2 /* PBXTargetDependency */, AFA160941052FF87009B93AA /* PBXTargetDependency */, AFA160921052FF87009B93AA /* PBXTargetDependency */, AFB581B0102F363300342B11 /* PBXTargetDependency */, AF137D5D0F075E5C004DE3B2 /* PBXTargetDependency */, AF137D5B0F075E5C004DE3B2 /* PBXTargetDependency */, AF137D590F075E5C004DE3B2 /* PBXTargetDependency */, AF137D570F075E5C004DE3B2 /* PBXTargetDependency */, AF714E4F105613410046AB1D /* PBXTargetDependency */, AF137D550F075E5C004DE3B2 /* PBXTargetDependency */, AF137D530F075E5C004DE3B2 /* PBXTargetDependency */, AF137D510F075E5C004DE3B2 /* PBXTargetDependency */, AF137D4F0F075E5C004DE3B2 /* PBXTargetDependency */, AF137D4D0F075E5C004DE3B2 /* PBXTargetDependency */, AF137D4B0F075E5C004DE3B2 /* PBXTargetDependency */, AF137D490F075E5C004DE3B2 /* PBXTargetDependency */, ); name = Obsolete; productName = Obsolete; }; AF480AAF098C669800FB32B8 /* All Savers (XScreenSaver) */ = { isa = PBXAggregateTarget; buildConfigurationList = AF480ABA098C66E300FB32B8 /* Build configuration list for PBXAggregateTarget "All Savers (XScreenSaver)" */; buildPhases = ( ); dependencies = ( AFE6A4300CDD7FEE002805BF /* PBXTargetDependency */, AF77798F09B6604C00EA3033 /* PBXTargetDependency */, AF77798D09B6604C00EA3033 /* PBXTargetDependency */, AF77798B09B6604C00EA3033 /* PBXTargetDependency */, AFBFE785178648E600432B21 /* PBXTargetDependency */, AF77798909B6604C00EA3033 /* PBXTargetDependency */, AF77798709B6604B00EA3033 /* PBXTargetDependency */, AF77798509B6604B00EA3033 /* PBXTargetDependency */, AF73FF3F1A0988F000E485E9 /* PBXTargetDependency */, AF77798309B6604B00EA3033 /* PBXTargetDependency */, AF77798109B6604B00EA3033 /* PBXTargetDependency */, AF77797F09B6604B00EA3033 /* PBXTargetDependency */, AF77797B09B6604B00EA3033 /* PBXTargetDependency */, AF77797909B6604B00EA3033 /* PBXTargetDependency */, AF77797709B6604B00EA3033 /* PBXTargetDependency */, AF77797509B6604B00EA3033 /* PBXTargetDependency */, AF77797309B6604B00EA3033 /* PBXTargetDependency */, AF77797109B6604B00EA3033 /* PBXTargetDependency */, AFF463530C44062500EE6509 /* PBXTargetDependency */, AF77796D09B6604A00EA3033 /* PBXTargetDependency */, AF77796B09B6604A00EA3033 /* PBXTargetDependency */, AF77796909B6604A00EA3033 /* PBXTargetDependency */, AF77796709B6604A00EA3033 /* PBXTargetDependency */, AF77796509B6604A00EA3033 /* PBXTargetDependency */, AF77796309B6604A00EA3033 /* PBXTargetDependency */, AF77796109B6604A00EA3033 /* PBXTargetDependency */, AF77795F09B6604A00EA3033 /* PBXTargetDependency */, AF77795D09B6604A00EA3033 /* PBXTargetDependency */, AF77795B09B6604A00EA3033 /* PBXTargetDependency */, AF77795909B6604A00EA3033 /* PBXTargetDependency */, AF77795709B6604A00EA3033 /* PBXTargetDependency */, AF77795509B6604A00EA3033 /* PBXTargetDependency */, AF77795309B6604900EA3033 /* PBXTargetDependency */, AF77795109B6604900EA3033 /* PBXTargetDependency */, AF77794F09B6604900EA3033 /* PBXTargetDependency */, AF77794D09B6604900EA3033 /* PBXTargetDependency */, AFB591C3178B821E00EA4005 /* PBXTargetDependency */, AF77794709B6604900EA3033 /* PBXTargetDependency */, AF77794509B6604900EA3033 /* PBXTargetDependency */, AF77794309B6604900EA3033 /* PBXTargetDependency */, AF77794109B6604900EA3033 /* PBXTargetDependency */, AF77793F09B6604900EA3033 /* PBXTargetDependency */, AF77793B09B6604900EA3033 /* PBXTargetDependency */, AF77793909B6604800EA3033 /* PBXTargetDependency */, AF1A17840D6D6FA7008AF328 /* PBXTargetDependency */, AF0DCA310C4C744D00D76972 /* PBXTargetDependency */, AF77793509B6604800EA3033 /* PBXTargetDependency */, AF77793309B6604800EA3033 /* PBXTargetDependency */, AF77793109B6604800EA3033 /* PBXTargetDependency */, AF77792D09B6604800EA3033 /* PBXTargetDependency */, AF77792B09B6604800EA3033 /* PBXTargetDependency */, AF77792909B6604800EA3033 /* PBXTargetDependency */, AF77792709B6604800EA3033 /* PBXTargetDependency */, AF77792509B6604800EA3033 /* PBXTargetDependency */, AF77792309B6604800EA3033 /* PBXTargetDependency */, AF77792109B6604800EA3033 /* PBXTargetDependency */, AF77791F09B6604800EA3033 /* PBXTargetDependency */, AF77791D09B6604800EA3033 /* PBXTargetDependency */, AFBFE787178648F500432B21 /* PBXTargetDependency */, AF77791B09B6604700EA3033 /* PBXTargetDependency */, AF77791909B6604700EA3033 /* PBXTargetDependency */, AF77791709B6604700EA3033 /* PBXTargetDependency */, AF77791509B6604700EA3033 /* PBXTargetDependency */, AF77791309B6604700EA3033 /* PBXTargetDependency */, AF77791109B6604700EA3033 /* PBXTargetDependency */, AF77790F09B6604700EA3033 /* PBXTargetDependency */, AF77790D09B6604700EA3033 /* PBXTargetDependency */, AF77790B09B6604700EA3033 /* PBXTargetDependency */, AF77790909B6604700EA3033 /* PBXTargetDependency */, AF77790709B6604700EA3033 /* PBXTargetDependency */, AF77790509B6604700EA3033 /* PBXTargetDependency */, AF77790309B6604700EA3033 /* PBXTargetDependency */, AF7778FF09B6604700EA3033 /* PBXTargetDependency */, AF7778FD09B6604600EA3033 /* PBXTargetDependency */, AF7778FB09B6604600EA3033 /* PBXTargetDependency */, AF7778F909B6604600EA3033 /* PBXTargetDependency */, AF7778F709B6604600EA3033 /* PBXTargetDependency */, AF68A49E19196EA000D41CD1 /* PBXTargetDependency */, CE04E8CB1B9B61D00085910B /* PBXTargetDependency */, AF7778F309B6604600EA3033 /* PBXTargetDependency */, AF7778F109B6604600EA3033 /* PBXTargetDependency */, AF7778EF09B6604600EA3033 /* PBXTargetDependency */, AF7778ED09B6604600EA3033 /* PBXTargetDependency */, AFA33B8F0B0585A4002B0E7D /* PBXTargetDependency */, AFA33BCF0B0587B2002B0E7D /* PBXTargetDependency */, AF7778EB09B6604600EA3033 /* PBXTargetDependency */, AF7778E709B6604600EA3033 /* PBXTargetDependency */, AF7778E509B6604600EA3033 /* PBXTargetDependency */, AF7778E309B6604600EA3033 /* PBXTargetDependency */, AF7778E109B6604600EA3033 /* PBXTargetDependency */, AF7778DF09B6604600EA3033 /* PBXTargetDependency */, AF7778DD09B6604600EA3033 /* PBXTargetDependency */, AF7778DB09B6604500EA3033 /* PBXTargetDependency */, AF7778D909B6604500EA3033 /* PBXTargetDependency */, AF7778D709B6604500EA3033 /* PBXTargetDependency */, ); name = "All Savers (XScreenSaver)"; productName = "All Savers (XScreenSaver)"; }; AF480D58098EED3D00FB32B8 /* All Savers (XLockmore) */ = { isa = PBXAggregateTarget; buildConfigurationList = AF480D64098EED6E00FB32B8 /* Build configuration list for PBXAggregateTarget "All Savers (XLockmore)" */; buildPhases = ( ); dependencies = ( AF7779D909B6608200EA3033 /* PBXTargetDependency */, AF7779D709B6608200EA3033 /* PBXTargetDependency */, AF7779D509B6608200EA3033 /* PBXTargetDependency */, AF7779D309B6608200EA3033 /* PBXTargetDependency */, AF7779D109B6608200EA3033 /* PBXTargetDependency */, AF7779CF09B6608200EA3033 /* PBXTargetDependency */, AF7779CD09B6608200EA3033 /* PBXTargetDependency */, AF7779CB09B6608200EA3033 /* PBXTargetDependency */, AF7779C909B6608200EA3033 /* PBXTargetDependency */, AF7779C709B6608200EA3033 /* PBXTargetDependency */, AF7779C309B6608100EA3033 /* PBXTargetDependency */, AF7779BF09B6608100EA3033 /* PBXTargetDependency */, AF7779BD09B6608100EA3033 /* PBXTargetDependency */, AF7779BB09B6608100EA3033 /* PBXTargetDependency */, AF7779B709B6608100EA3033 /* PBXTargetDependency */, AF7779AD09B6608100EA3033 /* PBXTargetDependency */, AF7779AB09B6608100EA3033 /* PBXTargetDependency */, AF7779A909B6608100EA3033 /* PBXTargetDependency */, AF7779A709B6608100EA3033 /* PBXTargetDependency */, AF7779A509B6608100EA3033 /* PBXTargetDependency */, AF7779A109B6608100EA3033 /* PBXTargetDependency */, AF77799B09B6608100EA3033 /* PBXTargetDependency */, AF77799909B6608100EA3033 /* PBXTargetDependency */, AF77799709B6608100EA3033 /* PBXTargetDependency */, AF77799509B6608000EA3033 /* PBXTargetDependency */, ); name = "All Savers (XLockmore)"; productName = "All Savers (XLockmore)"; }; AF480D59098EED5100FB32B8 /* All Savers (OpenGL) */ = { isa = PBXAggregateTarget; buildConfigurationList = AF480D67098EED6E00FB32B8 /* Build configuration list for PBXAggregateTarget "All Savers (OpenGL)" */; buildPhases = ( ); dependencies = ( AF777A6509B660B700EA3033 /* PBXTargetDependency */, AF777A6309B660B700EA3033 /* PBXTargetDependency */, AF777A6109B660B700EA3033 /* PBXTargetDependency */, AF777A5F09B660B600EA3033 /* PBXTargetDependency */, AF777A5D09B660B600EA3033 /* PBXTargetDependency */, AF777A5B09B660B600EA3033 /* PBXTargetDependency */, AF777A5909B660B600EA3033 /* PBXTargetDependency */, AF777A5709B660B600EA3033 /* PBXTargetDependency */, AF777A5509B660B600EA3033 /* PBXTargetDependency */, AF777A5309B660B600EA3033 /* PBXTargetDependency */, AF777A5109B660B600EA3033 /* PBXTargetDependency */, AF777A4F09B660B600EA3033 /* PBXTargetDependency */, AF777A4D09B660B600EA3033 /* PBXTargetDependency */, AF777A4B09B660B600EA3033 /* PBXTargetDependency */, AF5C9B161A0CCF8000B0147A /* PBXTargetDependency */, AF4F10EE143450C300E34F3F /* PBXTargetDependency */, AF777A4909B660B500EA3033 /* PBXTargetDependency */, AF777A4709B660B500EA3033 /* PBXTargetDependency */, AF777A4509B660B500EA3033 /* PBXTargetDependency */, AF777A4309B660B500EA3033 /* PBXTargetDependency */, AF4FF4D70D52CD0D00666F98 /* PBXTargetDependency */, AF777A4109B660B500EA3033 /* PBXTargetDependency */, AF777A3F09B660B500EA3033 /* PBXTargetDependency */, AF777A3D09B660B500EA3033 /* PBXTargetDependency */, AF777A3B09B660B500EA3033 /* PBXTargetDependency */, AF777A3909B660B400EA3033 /* PBXTargetDependency */, AF777A3709B660B400EA3033 /* PBXTargetDependency */, AF777A3509B660B400EA3033 /* PBXTargetDependency */, AF777A3309B660B400EA3033 /* PBXTargetDependency */, AF777A3109B660B400EA3033 /* PBXTargetDependency */, AF777A2F09B660B400EA3033 /* PBXTargetDependency */, AFF3CA0117CCAE210028F240 /* PBXTargetDependency */, AF7ACFDC19FF0BDB00BD752B /* PBXTargetDependency */, AF777A2D09B660B400EA3033 /* PBXTargetDependency */, AF777A2B09B660B400EA3033 /* PBXTargetDependency */, AF777A2909B660B400EA3033 /* PBXTargetDependency */, AFF4636F0C440B3B00EE6509 /* PBXTargetDependency */, AF777A2509B660B400EA3033 /* PBXTargetDependency */, AF777A2309B660B400EA3033 /* PBXTargetDependency */, AF777A2109B660B300EA3033 /* PBXTargetDependency */, AF777A1F09B660B300EA3033 /* PBXTargetDependency */, AF48DF060A0C261100F94CF9 /* PBXTargetDependency */, AF777A1D09B660B300EA3033 /* PBXTargetDependency */, AF777A1B09B660B300EA3033 /* PBXTargetDependency */, AF777A1909B660B300EA3033 /* PBXTargetDependency */, AF4F10F0143450C300E34F3F /* PBXTargetDependency */, AF777A1709B660B300EA3033 /* PBXTargetDependency */, AF42C5160D624E9200B27FF6 /* PBXTargetDependency */, AF777A1509B660B300EA3033 /* PBXTargetDependency */, AF35E8A30E63825600691F2F /* PBXTargetDependency */, AF777A1309B660B300EA3033 /* PBXTargetDependency */, AFBFE7421786407000432B21 /* PBXTargetDependency */, AF777A1109B660B300EA3033 /* PBXTargetDependency */, AF777A0F09B660B200EA3033 /* PBXTargetDependency */, AF777A0D09B660B200EA3033 /* PBXTargetDependency */, AF4FD6FF0CE7A4F9005EE58E /* PBXTargetDependency */, AF777A0B09B660B200EA3033 /* PBXTargetDependency */, AF777A0909B660B200EA3033 /* PBXTargetDependency */, AF777A0709B660B200EA3033 /* PBXTargetDependency */, AFE6A19C0CDD7B7F002805BF /* PBXTargetDependency */, AF777A0509B660B200EA3033 /* PBXTargetDependency */, AF777A0309B660B200EA3033 /* PBXTargetDependency */, AF777A0109B660B200EA3033 /* PBXTargetDependency */, AFD51B350F063B7800471C02 /* PBXTargetDependency */, AF7779FF09B660B200EA3033 /* PBXTargetDependency */, AF7779FD09B660B100EA3033 /* PBXTargetDependency */, AF7779FB09B660B100EA3033 /* PBXTargetDependency */, AF7779F909B660B100EA3033 /* PBXTargetDependency */, AFFAB33519158F1E0020F021 /* PBXTargetDependency */, AF7779F709B660B100EA3033 /* PBXTargetDependency */, AF7779F509B660B100EA3033 /* PBXTargetDependency */, AFBFE7401786405E00432B21 /* PBXTargetDependency */, AF7779F309B660B000EA3033 /* PBXTargetDependency */, AF63A80F1AB4EFD300593C75 /* PBXTargetDependency */, AF7779F109B660B000EA3033 /* PBXTargetDependency */, AF32D9F90F3AD0D90080F535 /* PBXTargetDependency */, AF4540D20E52BE8800AE87B5 /* PBXTargetDependency */, AF7779EF09B660B000EA3033 /* PBXTargetDependency */, AF7779ED09B660B000EA3033 /* PBXTargetDependency */, AFE2A46F0E2E908E00ADB298 /* PBXTargetDependency */, AF7779EB09B660B000EA3033 /* PBXTargetDependency */, AFCF835C1AF5B683008BB7E1 /* PBXTargetDependency */, AF7779E909B660B000EA3033 /* PBXTargetDependency */, AF7779E709B660B000EA3033 /* PBXTargetDependency */, AF7779E509B660B000EA3033 /* PBXTargetDependency */, AF7779E309B660B000EA3033 /* PBXTargetDependency */, AF7779E109B660AF00EA3033 /* PBXTargetDependency */, AF4A3460102A59A400A81B2A /* PBXTargetDependency */, AF7779DF09B660AF00EA3033 /* PBXTargetDependency */, AF7779DD09B660AF00EA3033 /* PBXTargetDependency */, AF998EF70A083E1D0051049D /* PBXTargetDependency */, AF4F10F2143450C300E34F3F /* PBXTargetDependency */, AFDA65AA178A54690070D24B /* PBXTargetDependency */, AF0DCA5C0C4CBB4300D76972 /* PBXTargetDependency */, AF39E2BA198A16920064A58D /* PBXTargetDependency */, ); name = "All Savers (OpenGL)"; productName = "All Savers (OpenGL)"; }; AF480D5A098EED5E00FB32B8 /* All Savers */ = { isa = PBXAggregateTarget; buildConfigurationList = AF480D6A098EED6E00FB32B8 /* Build configuration list for PBXAggregateTarget "All Savers" */; buildPhases = ( ); dependencies = ( AFCAD5F90992DFE00009617A /* PBXTargetDependency */, AF36340118540D050086A439 /* PBXTargetDependency */, AF480D60098EED6900FB32B8 /* PBXTargetDependency */, AF480D5E098EED6900FB32B8 /* PBXTargetDependency */, AF480D5C098EED6900FB32B8 /* PBXTargetDependency */, AF137D470F075CC8004DE3B2 /* PBXTargetDependency */, ); name = "All Savers"; productName = "All Savers"; }; AFA33C020B058E17002B0E7D /* webcollage-perl */ = { isa = PBXAggregateTarget; buildConfigurationList = AFA33C070B058E67002B0E7D /* Build configuration list for PBXAggregateTarget "webcollage-perl" */; buildPhases = ( ); dependencies = ( ); name = "webcollage-perl"; productName = webcollage; }; /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ 550FB5FE1AD64424001A4FA5 /* Media-iOS.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 550FB5FD1AD64424001A4FA5 /* Media-iOS.xcassets */; }; 550FB5FF1AD64424001A4FA5 /* Media-iOS.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 550FB5FD1AD64424001A4FA5 /* Media-iOS.xcassets */; }; 550FB6001AD64424001A4FA5 /* Media-iOS.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 550FB5FD1AD64424001A4FA5 /* Media-iOS.xcassets */; }; 55EDCB3D1AD498A800251909 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 55EDCB3C1AD498A800251909 /* LaunchScreen.xib */; }; 55EDCB3E1AD49DFA00251909 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 55EDCB3C1AD498A800251909 /* LaunchScreen.xib */; }; 55EDCB3F1AD49DFE00251909 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 55EDCB3C1AD498A800251909 /* LaunchScreen.xib */; }; AF012918157C1E4C00C396E1 /* chessmodels.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E2309935F2B00F3E977 /* chessmodels.c */; }; AF0839A609930BAC00277BE9 /* atlantis.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258700988A468000655EE /* atlantis.xml */; }; AF0839B009930C4900277BE9 /* atlantis.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839A909930C4900277BE9 /* atlantis.c */; }; AF0839B109930C4900277BE9 /* dolphin.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839AA09930C4900277BE9 /* dolphin.c */; }; AF0839B209930C4900277BE9 /* shark.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839AB09930C4900277BE9 /* shark.c */; }; AF0839B309930C4900277BE9 /* swim.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839AC09930C4900277BE9 /* swim.c */; }; AF0839B409930C4900277BE9 /* whale.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839AD09930C4900277BE9 /* whale.c */; }; AF083A1C099310B300277BE9 /* xpm-ximage.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839AE09930C4900277BE9 /* xpm-ximage.c */; }; AF083A21099310CF00277BE9 /* xlockmore.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480CBB098E37D600FB32B8 /* xlockmore.c */; }; AF083A4A099311FF00277BE9 /* atunnel.c in Sources */ = {isa = PBXBuildFile; fileRef = AF083A31099311CE00277BE9 /* atunnel.c */; }; AF083A4B0993120900277BE9 /* atunnel.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258720988A468000655EE /* atunnel.xml */; }; AF083A59099312B000277BE9 /* tunnel_draw.c in Sources */ = {isa = PBXBuildFile; fileRef = AF083A58099312B000277BE9 /* tunnel_draw.c */; }; AF0D117D0E41566300BB14A4 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0DC7B10C4C73F600D76972 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF0DC7B20C4C73F600D76972 /* analogtv.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4CFA09B5AC94006E59CF /* analogtv.c */; }; AF0DCA350C4C74A200D76972 /* asm6502.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0DCA320C4C74A200D76972 /* asm6502.c */; }; AF0DCA360C4C74A200D76972 /* m6502.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0DCA340C4C74A200D76972 /* m6502.c */; }; AF0DCA380C4C74B700D76972 /* m6502.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF0DCA370C4C74B700D76972 /* m6502.xml */; }; AF0DCA480C4CBB0D00D76972 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF0DCA600C4CBB7300D76972 /* voronoi.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0DCA5F0C4CBB7300D76972 /* voronoi.c */; }; AF0DCA620C4CBB8E00D76972 /* voronoi.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF0DCA610C4CBB8E00D76972 /* voronoi.xml */; }; AF0FAF0C09CA6FF900EE1051 /* xscreensaver-text in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */; }; AF0FAF0D09CA6FF900EE1051 /* xscreensaver-text in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */; }; AF0FAF0E09CA6FF900EE1051 /* xscreensaver-text in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */; }; AF0FAF0F09CA6FF900EE1051 /* xscreensaver-text in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */; }; AF0FAF1009CA6FF900EE1051 /* xscreensaver-text in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */; }; AF0FAF1109CA6FF900EE1051 /* xscreensaver-text in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */; }; AF0FAF1309CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1409CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1509CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1609CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1709CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1809CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1909CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1A09CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1B09CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1C09CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1D09CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1E09CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1F09CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF2109CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF2209CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF2309CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF2409CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF2509CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF2609CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF2709CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF2809CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF2909CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF3C159BAC7C00BCE2F7 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF0FAF3B159BAC7B00BCE2F7 /* CoreText.framework */; }; AF1A17680D6D6EE3008AF328 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF1A177F0D6D6F3E008AF328 /* lcdscrub.c in Sources */ = {isa = PBXBuildFile; fileRef = AF1A177E0D6D6F3E008AF328 /* lcdscrub.c */; }; AF1A17810D6D6F62008AF328 /* lcdscrub.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF1A17800D6D6F62008AF328 /* lcdscrub.xml */; }; AF1AD9E318500F9F00932759 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1ADA141850132600932759 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; AF1ADA161850157400932759 /* Updater.xib in Resources */ = {isa = PBXBuildFile; fileRef = AF1ADA151850157400932759 /* Updater.xib */; }; AF1ADA181850180E00932759 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF1ADA171850180E00932759 /* Sparkle.framework */; }; AF1ADA1A1850186B00932759 /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = AF1ADA171850180E00932759 /* Sparkle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; AF1ADA1B18501B3D00932759 /* SaverRunner.icns in Resources */ = {isa = PBXBuildFile; fileRef = AF2D522513E954A0002AA818 /* SaverRunner.icns */; }; AF1ADA1F18504A4F00932759 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD713158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD714158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD715158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD716158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD717158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD718158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD719158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD71A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD71B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD71C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD71D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD71E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD71F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD720158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD721158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD722158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD723158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD727158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD728158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD729158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD72A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD72B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD72C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD72D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD72E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD72F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD730158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD731158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD732158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD733158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD734158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD735158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD736158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD737158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD738158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD739158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD73A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD73B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD73C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD73D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD73E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD73F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD740158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD741158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD742158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD743158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD744158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD745158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD746158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD747158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD748158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD749158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD74A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD74B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD74C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD74D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD74E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD74F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD750158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD751158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD752158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD753158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD754158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD755158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD756158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD757158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD758158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD759158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD75A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD75B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD75C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD75D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD75E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD75F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD760158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD761158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD762158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD763158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD764158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD765158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD766158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD767158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD768158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD769158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD76A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD76B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD76C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD76D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD76E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD76F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD770158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD771158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD772158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD773158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD774158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD775158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD776158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD777158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD778158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD779158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD77A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD77B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD77C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD77D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD77E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD77F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD780158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD781158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD782158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD783158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD784158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD785158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD786158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD787158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD788158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD789158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD78A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD78B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD78C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD78D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD78E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD78F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD790158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD791158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD792158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD793158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD794158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD795158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD796158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD797158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD798158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD799158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD79A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD79B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD79C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD79D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD79E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD79F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7A0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7A1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7A2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7A3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7A4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7A5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7A6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7A7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7A8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7A9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7AA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7AB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7AC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7AD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7AE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7AF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7B0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7B1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7B2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7B3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7B4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7B5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7B6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7B7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7B8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7B9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7BA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7BB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7BC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7BD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7BE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7BF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7C0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7C1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7C2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7C3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7C4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7C5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7C6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7C7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7C8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7C9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7CA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7CB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7CC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7CD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7CE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7CF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7D0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7D1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7D2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7D3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7D4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7D5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7D6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7D7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7D8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7D9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7DA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7DB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7DC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7DD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7DE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7DF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7E0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7E1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7E2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7E3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7E4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7E5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7E6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7E7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7E8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7E9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7EA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7EB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7EC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7ED158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7EE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7EF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7F0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7F1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7F2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7F3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7F7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7F8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7F9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7FA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7FB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7FC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7FD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7FE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7FF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD800158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD801158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD802158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD803158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD804158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD805158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD806158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD807158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD808158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD809158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD80A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD80B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD80C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD80D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD80E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD80F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD810158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD811158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD812158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD813158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD814158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD815158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD816158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD817158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD818158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD819158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD81A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD81B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD81C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD81D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD81E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD81F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD820158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD821158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD822158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD823158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD824158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD825158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD826158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD827158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD828158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD829158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD82A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD82B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD82C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD82D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD82E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD82F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD830158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD831158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD832158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD833158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD834158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD835158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD836158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD837158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD838158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD839158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD83A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD83B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD83C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD83D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD83E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD83F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD840158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD841158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD842158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD843158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD844158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD845158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD846158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD847158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD848158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD849158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD84A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD84B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD84C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD84D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD84E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD84F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD850158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD851158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD852158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD853158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD854158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD855158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD856158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD857158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD858158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD859158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD85A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD85B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD85C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD85D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD85E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD85F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD860158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD861158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD862158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD863158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD864158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD865158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD866158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD867158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD868158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD869158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD86A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD86B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD86C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD86D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD86E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD86F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD870158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD871158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD872158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD873158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD874158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD875158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD876158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD877158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD878158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD879158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD87A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD87B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD87C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD87D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD87E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD87F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD880158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD881158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD882158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD883158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD884158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD885158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD886158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD887158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD888158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD889158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD88A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD88B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD88C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD88D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD88E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD88F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD890158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD891158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD892158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD893158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD894158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD895158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD896158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD897158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD898158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD899158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD89A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD89B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD89C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD89D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD89E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD89F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8A0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8A1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8A2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8A3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8A4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8A5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8A6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8A7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8A8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8A9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8AA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8AB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8AC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8AD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8AE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8AF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8B0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8B1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8B2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8B3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8B4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8B5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8B6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8B7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8B8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8B9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8BA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8BB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8BC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8BD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8BE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8BF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8C0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8C1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8C2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8C3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8C4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8C5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8C6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8C7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8C8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8C9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8CA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8CB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8CC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8CD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8CE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8CF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8D0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8D1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8D2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8D3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8D4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8D5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8D6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8D7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8D8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8D9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8DA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8DB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8DC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8DD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8DE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8DF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8E0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8E1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8E2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8E3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8E4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8E5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8E6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8E7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8E8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8E9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8EA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8EB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8EC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8ED158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8EE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8EF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8F0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8F1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8F2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8F3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8F4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8F5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8F6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8F7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8F8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8F9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8FA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8FB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8FC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8FD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8FE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8FF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD900158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD901158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD902158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD903158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD904158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD905158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD906158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD907158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD908158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD909158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD90A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD90B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD90C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD90D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD90E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD90F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD910158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD911158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD912158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD913158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD914158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD915158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD916158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD917158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD918158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD919158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD91A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD91B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD91C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD91D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD91E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD91F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD920158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD921158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD922158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD923158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD924158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD925158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD926158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD927158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD928158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD929158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD92A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD92B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD92C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD92D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD92E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD92F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD930158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD931158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD932158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD933158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD934158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD935158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD936158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD937158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD938158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD939158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD93A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD93B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD93C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD93D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD93E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD93F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD940158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD941158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD942158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD943158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD944158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD945158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD946158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD947158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD948158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD949158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD94A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD94B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD94C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD94D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD94E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD94F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD950158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD951158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD952158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD953158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD954158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD955158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD956158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD957158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD958158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD959158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD95A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD95B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD95C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD95D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD95E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD95F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD960158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD961158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD962158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD963158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD964158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD965158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD966158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD967158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD968158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD969158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD96A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD96B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD96C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD96D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD96E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD96F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD970158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD971158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD972158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD973158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD974158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD975158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD976158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD977158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD978158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD979158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD97A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD97B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD97C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD97D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD97E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD97F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD980158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD981158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD982158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD983158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD984158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD985158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD986158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD987158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD988158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD989158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD98A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD98B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD98C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD98D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD98E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD98F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD990158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD991158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD992158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD993158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD994158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD995158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD996158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD997158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD998158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD999158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD99A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD99B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD99C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD99D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD99E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD99F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9A0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9A1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9A2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9A3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9A4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9A5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9A6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9A7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9A8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9A9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9AA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9AB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9AC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9AD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9AE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9AF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9B0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9B1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9B2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9B3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9B4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9B5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9B6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9B7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9B8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9B9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9BA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9BB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9BC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9BD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9BE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9BF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9C0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9C1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9C2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9C3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9C4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9C5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9C6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9C7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9C8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9C9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9CA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9CB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9CC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9CD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9CE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9CF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9D0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9D1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9D2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9D3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9D4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9D5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9D6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9D7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9D8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9D9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9DA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9DB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9DC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9DD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9DE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9DF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9E0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9E1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9E2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9E3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9E4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9E5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9E6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9E7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9E8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9E9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9EA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9EB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9EC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9ED158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9EE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9EF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9F0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9F1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9F2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9F3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9F4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9F5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9F6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9F7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9F8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9F9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9FA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9FB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9FC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9FD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9FE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9FF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA00158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA01158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA02158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA03158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA04158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA05158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA06158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA07158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA08158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA09158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA0A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA0B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA0C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA0D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA0E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA0F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA10158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA11158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA12158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA13158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA14158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA15158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA16158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA17158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA18158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA19158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA1A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA1B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA1C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA1D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA1E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA1F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA20158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA21158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA22158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA23158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA24158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA25158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA26158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA27158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA28158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA29158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA2A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA2B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA2C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA2D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA2E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA2F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA30158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA31158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA32158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA33158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA34158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA35158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA36158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA37158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA38158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA39158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA3A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA3B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA3C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA3D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA3E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA3F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA40158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA41158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA42158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA43158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA44158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA45158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA46158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA47158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA48158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA49158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA4A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA4B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA4C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA4D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA4E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA4F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA50158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA51158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA52158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA53158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA54158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA55158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA56158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA57158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA58158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA59158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA5A158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA5B158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA5C158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA5D158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA5E158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA5F158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA60158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA61158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA62158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA63158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA64158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA65158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA66158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA67158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA68158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA69158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA6A158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA6B158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA6C158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA6D158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA6E158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA6F158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA70158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA71158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA72158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA73158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA74158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA75158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA76158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA77158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA78158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA79158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA7A158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA7B158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA7C158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA7D158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA7E158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA7F158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA80158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA81158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA82158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA83158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA84158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA85158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA86158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA87158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA88158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA89158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA8A158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF241F83107C38DF00046A84 /* dropshadow.c in Sources */ = {isa = PBXBuildFile; fileRef = AF241F81107C38DF00046A84 /* dropshadow.c */; }; AF2C31E615C0F7FE007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31EA15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31EB15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31EC15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31ED15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31EF15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31F015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31F115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31F215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31F315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31F415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31F515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31F615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31F715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31F815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31F915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31FA15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31FB15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31FC15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31FD15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31FE15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31FF15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327915C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327A15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327B15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327C15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327D15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327E15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327F15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328015C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328115C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328215C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328315C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328915C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328A15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328B15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328C15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328D15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328E15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328F15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329015C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329115C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329215C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329315C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329915C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329A15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329B15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329C15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329D15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329E15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329F15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32A015C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32A115C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32A215C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32A315C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32A415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32A515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32A615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32A715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32A815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32A915C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32AA15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32AB15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32AC15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32AD15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32AE15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32AF15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32B015C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32B115C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32B215C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32B315C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32B415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32B515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32B615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32B715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32B815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32B915C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32BA15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32BB15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32BC15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32BD15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32BE15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32BF15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32C015C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32C115C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32C215C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32C315C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32C415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32C515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32C615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32C715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32C815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2D4D8613E902F5002AA818 /* SaverRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD400981E32E00F7970E /* SaverRunner.m */; }; AF2D4D8713E902F5002AA818 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; AF2D4F7513E91093002AA818 /* SaverRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD400981E32E00F7970E /* SaverRunner.m */; }; AF2D4F7613E91093002AA818 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; AF32D9E70F3AD0B40080F535 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF32D9FB0F3AD1200080F535 /* rubikblocks.c in Sources */ = {isa = PBXBuildFile; fileRef = AF32D9FA0F3AD1200080F535 /* rubikblocks.c */; }; AF32D9FD0F3AD1330080F535 /* rubikblocks.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF32D9FC0F3AD1330080F535 /* rubikblocks.xml */; }; AF3581C31431D47B00E09C51 /* voronoi.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF0DCA610C4CBB8E00D76972 /* voronoi.xml */; }; AF3581C61431D47B00E09C51 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF3581C71431D47B00E09C51 /* voronoi.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0DCA5F0C4CBB7300D76972 /* voronoi.c */; }; AF3581C81431D47B00E09C51 /* hilbert.c in Sources */ = {isa = PBXBuildFile; fileRef = AF78D18A142DD96E002AAF77 /* hilbert.c */; }; AF3581DC1431D5FC00E09C51 /* companion_disc.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D61431D5FC00E09C51 /* companion_disc.c */; }; AF3581DF1431D5FC00E09C51 /* companion_heart.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D71431D5FC00E09C51 /* companion_heart.c */; }; AF3581E21431D5FC00E09C51 /* companion_quad.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D81431D5FC00E09C51 /* companion_quad.c */; }; AF3581E51431D5FC00E09C51 /* companion.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D91431D5FC00E09C51 /* companion.c */; }; AF3581E81431D61D00E09C51 /* companioncube.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF3581E61431D61D00E09C51 /* companioncube.xml */; }; AF3581FF143330F900E09C51 /* voronoi.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF0DCA610C4CBB8E00D76972 /* voronoi.xml */; }; AF358203143330F900E09C51 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF358204143330F900E09C51 /* voronoi.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0DCA5F0C4CBB7300D76972 /* voronoi.c */; }; AF358205143330F900E09C51 /* hilbert.c in Sources */ = {isa = PBXBuildFile; fileRef = AF78D18A142DD96E002AAF77 /* hilbert.c */; }; AF358206143330F900E09C51 /* companion_disc.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D61431D5FC00E09C51 /* companion_disc.c */; }; AF358207143330F900E09C51 /* companion_heart.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D71431D5FC00E09C51 /* companion_heart.c */; }; AF358208143330F900E09C51 /* companion_quad.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D81431D5FC00E09C51 /* companion_quad.c */; }; AF358209143330F900E09C51 /* companion.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D91431D5FC00E09C51 /* companion.c */; }; AF35821C1433314C00E09C51 /* tronbit_idle1.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3582171433314C00E09C51 /* tronbit_idle1.c */; }; AF35821D1433314C00E09C51 /* tronbit_idle2.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3582181433314C00E09C51 /* tronbit_idle2.c */; }; AF35821E1433314C00E09C51 /* tronbit_no.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3582191433314C00E09C51 /* tronbit_no.c */; }; AF35821F1433314C00E09C51 /* tronbit_yes.c in Sources */ = {isa = PBXBuildFile; fileRef = AF35821A1433314C00E09C51 /* tronbit_yes.c */; }; AF3582201433314C00E09C51 /* tronbit.c in Sources */ = {isa = PBXBuildFile; fileRef = AF35821B1433314C00E09C51 /* tronbit.c */; }; AF3582221433318500E09C51 /* tronbit.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF3582211433318500E09C51 /* tronbit.xml */; }; AF35E8900E63823600691F2F /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF35EB240E63829600691F2F /* jigsaw.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CF0988A468000655EE /* jigsaw.xml */; }; AF35EB260E6382BA00691F2F /* jigsaw.c in Sources */ = {isa = PBXBuildFile; fileRef = AF35EB250E6382BA00691F2F /* jigsaw.c */; }; AF3633FC18530DD90086A439 /* sparkle_dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = AF3633F918530DD90086A439 /* sparkle_dsa_pub.pem */; }; AF3633FD18530DD90086A439 /* Updater.m in Sources */ = {isa = PBXBuildFile; fileRef = AF3633FB18530DD90086A439 /* Updater.m */; }; AF39483E15A164680000FFCD /* jigsaw.c in Sources */ = {isa = PBXBuildFile; fileRef = AF35EB250E6382BA00691F2F /* jigsaw.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF39483F15A1647A0000FFCD /* jigsaw.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CF0988A468000655EE /* jigsaw.xml */; }; AF39E289198A11F60064A58D /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF39E28B198A11F60064A58D /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF39E28C198A11F60064A58D /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF39E28D198A11F60064A58D /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF39E28E198A11F60064A58D /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF39E28F198A11F60064A58D /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF39E290198A11F60064A58D /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF39E2AA198A13F50064A58D /* robot-wireframe.c in Sources */ = {isa = PBXBuildFile; fileRef = AF39E2A0198A13F50064A58D /* robot-wireframe.c */; }; AF39E2AB198A13F50064A58D /* winduprobot.c in Sources */ = {isa = PBXBuildFile; fileRef = AF39E2A1198A13F50064A58D /* winduprobot.c */; }; AF39E2AD198A15820064A58D /* winduprobot.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF39E2AC198A15820064A58D /* winduprobot.xml */; }; AF39E2AE198A15820064A58D /* winduprobot.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF39E2AC198A15820064A58D /* winduprobot.xml */; }; AF39E2B7198A15EE0064A58D /* robot-wireframe.c in Sources */ = {isa = PBXBuildFile; fileRef = AF39E2A0198A13F50064A58D /* robot-wireframe.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF39E2B8198A15EE0064A58D /* winduprobot.c in Sources */ = {isa = PBXBuildFile; fileRef = AF39E2A1198A13F50064A58D /* winduprobot.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF3C714B0D624BF50030CC0D /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF3C715E0D624C600030CC0D /* hypnowheel.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3C715D0D624C600030CC0D /* hypnowheel.c */; }; AF3C71600D624C7C0030CC0D /* hypnowheel.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF3C715F0D624C7C0030CC0D /* hypnowheel.xml */; }; AF476FBC099D154F001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF476FCF099D1587001F091E /* interference.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CC0988A468000655EE /* interference.xml */; }; AF476FD1099D15AA001F091E /* interference.c in Sources */ = {isa = PBXBuildFile; fileRef = AF476FD0099D15AA001F091E /* interference.c */; }; AF476FE1099D1686001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF476FEF099D16E4001F091E /* truchet.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259260988A469000655EE /* truchet.xml */; }; AF476FF1099D1713001F091E /* truchet.c in Sources */ = {isa = PBXBuildFile; fileRef = AF476FF0099D1713001F091E /* truchet.c */; }; AF477052099D4385001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47705E099D43B7001F091E /* deluxe.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258950988A468000655EE /* deluxe.xml */; }; AF477146099D43E2001F091E /* deluxe.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477145099D43E2001F091E /* deluxe.c */; }; AF47716F099D4786001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47717B099D47B7001F091E /* compass.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258880988A468000655EE /* compass.xml */; }; AF47717D099D47D3001F091E /* compass.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47717C099D47D3001F091E /* compass.c */; }; AF477185099D4803001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477191099D4846001F091E /* wander.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2592B0988A469000655EE /* wander.xml */; }; AF477193099D4864001F091E /* wander.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477192099D4864001F091E /* wander.c */; }; AF4771AD099D4949001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4771B9099D4981001F091E /* t3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259210988A469000655EE /* t3d.xml */; }; AF4771BB099D4997001F091E /* t3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4771BA099D4997001F091E /* t3d.c */; }; AF4771E1099D4D9A001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4771EE099D4DE5001F091E /* ccurve.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258840988A468000655EE /* ccurve.xml */; }; AF4771F0099D4DFE001F091E /* ccurve.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4771EF099D4DFE001F091E /* ccurve.c */; }; AF4771F8099D4E63001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477204099D4EA2001F091E /* nerverot.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258EB0988A469000655EE /* nerverot.xml */; }; AF477206099D4EB6001F091E /* nerverot.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477205099D4EB6001F091E /* nerverot.c */; }; AF47720E099D4EE8001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47721A099D4F27001F091E /* whirlygig.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2592F0988A469000655EE /* whirlygig.xml */; }; AF47721C099D4F47001F091E /* whirlygig.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47721B099D4F47001F091E /* whirlygig.c */; }; AF477224099D4F67001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477230099D4FBD001F091E /* anemone.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258680988A468000655EE /* anemone.xml */; }; AF477232099D4FD5001F091E /* anemone.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477231099D4FD5001F091E /* anemone.c */; }; AF477259099D5717001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477265099D5752001F091E /* halftone.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C20988A468000655EE /* halftone.xml */; }; AF477267099D5768001F091E /* halftone.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477266099D5768001F091E /* halftone.c */; }; AF477271099D57B9001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47727D099D57F5001F091E /* popsquares.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FB0988A469000655EE /* popsquares.xml */; }; AF47727F099D5808001F091E /* popsquares.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47727E099D5808001F091E /* popsquares.c */; }; AF477289099D5926001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477296099D596A001F091E /* piecewise.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F40988A469000655EE /* piecewise.xml */; }; AF477298099D5980001F091E /* piecewise.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477297099D5980001F091E /* piecewise.c */; }; AF477388099D65A1001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477394099D65EB001F091E /* wormhole.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259310988A469000655EE /* wormhole.xml */; }; AF477396099D65FE001F091E /* wormhole.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477395099D65FE001F091E /* wormhole.c */; }; AF4773A0099D6648001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4773AC099D6762001F091E /* fuzzyflakes.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B00988A468000655EE /* fuzzyflakes.xml */; }; AF4773B5099D6778001F091E /* fuzzyflakes.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4773B4099D6778001F091E /* fuzzyflakes.c */; }; AF4773C7099D67B9001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4773D3099D6804001F091E /* anemotaxis.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258690988A468000655EE /* anemotaxis.xml */; }; AF4773D5099D6817001F091E /* anemotaxis.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4773D4099D6817001F091E /* anemotaxis.c */; }; AF477408099D69E7001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47741B099D6A58001F091E /* intermomentary.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CD0988A468000655EE /* intermomentary.xml */; }; AF47741D099D6A6D001F091E /* intermomentary.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47741C099D6A6C001F091E /* intermomentary.c */; }; AF47742D099D7C70001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477439099D7CD0001F091E /* ifs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C90988A468000655EE /* ifs.xml */; }; AF47743B099D7CEA001F091E /* ifs.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47743A099D7CEA001F091E /* ifs.c */; }; AF477448099D7D33001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477454099D7D75001F091E /* xmatrix.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2593A0988A469000655EE /* xmatrix.xml */; }; AF477456099D7D8A001F091E /* xmatrix.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477455099D7D8A001F091E /* xmatrix.c */; }; AF477489099D89E4001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477495099D8A3A001F091E /* flame.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A60988A468000655EE /* flame.xml */; }; AF477497099D8A53001F091E /* flame.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477496099D8A53001F091E /* flame.c */; }; AF47749F099D8A74001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4774AB099D8AF3001F091E /* kaleidescope.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D30988A468000655EE /* kaleidescope.xml */; }; AF4774AD099D8B08001F091E /* kaleidescope.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4774AC099D8B08001F091E /* kaleidescope.c */; }; AF4774BA099D8B5F001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4774CA099D8BAE001F091E /* lmorph.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258DC0988A468000655EE /* lmorph.xml */; }; AF4774CC099D8BC2001F091E /* lmorph.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4774CB099D8BC2001F091E /* lmorph.c */; }; AF4774D4099D8BFF001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4774E0099D8C74001F091E /* maze.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258DE0988A468000655EE /* maze.xml */; }; AF4774E2099D8C8B001F091E /* maze.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4774E1099D8C8B001F091E /* maze.c */; }; AF4774E8099D8D8C001F091E /* logo.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4774E7099D8D8C001F091E /* logo.c */; }; AF477563099D9A1A001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47756F099D9A70001F091E /* pedal.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258EF0988A469000655EE /* pedal.xml */; }; AF477571099D9A8A001F091E /* pedal.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477570099D9A8A001F091E /* pedal.c */; }; AF477589099D9C28001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47759B099D9C8D001F091E /* pyro.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FE0988A469000655EE /* pyro.xml */; }; AF47759D099D9CA3001F091E /* pyro.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47759C099D9CA3001F091E /* pyro.c */; }; AF4775A5099D9CF7001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4775B1099D9D51001F091E /* starfish.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591A0988A469000655EE /* starfish.xml */; }; AF4775B4099D9D67001F091E /* starfish.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4775B3099D9D67001F091E /* starfish.c */; }; AF4775C0099D9E79001F091E /* resources.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4775BE099D9E79001F091E /* resources.c */; }; AF4775C1099D9E79001F091E /* resources.h in Headers */ = {isa = PBXBuildFile; fileRef = AF4775BF099D9E79001F091E /* resources.h */; }; AF4775DE099D9F69001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4775EC099D9FDB001F091E /* coral.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258890988A468000655EE /* coral.xml */; }; AF4775F0099D9FFF001F091E /* coral.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4775EF099D9FFF001F091E /* coral.c */; }; AF4775F8099DA030001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477604099DA083001F091E /* epicycle.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2589D0988A468000655EE /* epicycle.xml */; }; AF477606099DA097001F091E /* epicycle.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477605099DA097001F091E /* epicycle.c */; }; AF477619099DA26C001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477629099DA2D2001F091E /* kumppa.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D50988A468000655EE /* kumppa.xml */; }; AF47762B099DA2E9001F091E /* kumppa.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47762A099DA2E9001F091E /* kumppa.c */; }; AF47764A099DA6D0001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477656099DA738001F091E /* squiral.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259170988A469000655EE /* squiral.xml */; }; AF477658099DA75D001F091E /* squiral.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477657099DA75D001F091E /* squiral.c */; }; AF477660099DA78E001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47766C099DA7F3001F091E /* critical.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2588C0988A468000655EE /* critical.xml */; }; AF47766E099DA80D001F091E /* critical.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47766D099DA80D001F091E /* critical.c */; }; AF477676099DA849001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477682099DA8AC001F091E /* petri.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F20988A469000655EE /* petri.xml */; }; AF477684099DA8C7001F091E /* petri.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477683099DA8C7001F091E /* petri.c */; }; AF477695099DAA6F001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4776A1099DAAC9001F091E /* blaster.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258740988A468000655EE /* blaster.xml */; }; AF4776A3099DAADE001F091E /* blaster.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4776A2099DAADE001F091E /* blaster.c */; }; AF4776B0099DABDD001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4776BC099DAC29001F091E /* xspirograph.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2593F0988A469000655EE /* xspirograph.xml */; }; AF4776BE099DAC46001F091E /* xspirograph.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4776BD099DAC46001F091E /* xspirograph.c */; }; AF4776C6099DAC8A001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4776D2099DACD6001F091E /* xrayswarm.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2593D0988A469000655EE /* xrayswarm.xml */; }; AF4776D4099DACEB001F091E /* xrayswarm.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4776D3099DACEB001F091E /* xrayswarm.c */; }; AF4776E1099DADDF001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4776ED099DAE38001F091E /* whirlwindwarp.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2592D0988A469000655EE /* whirlwindwarp.xml */; }; AF4776EF099DAE58001F091E /* whirlwindwarp.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4776EE099DAE58001F091E /* whirlwindwarp.c */; }; AF4776F7099DAE7A001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477703099DAF24001F091E /* vermiculate.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259280988A469000655EE /* vermiculate.xml */; }; AF477705099DAF3F001F091E /* vermiculate.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477704099DAF3F001F091E /* vermiculate.c */; }; AF477713099DAF9F001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47771F099DB000001F091E /* cloudlife.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258870988A468000655EE /* cloudlife.xml */; }; AF477721099DB01C001F091E /* cloudlife.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477720099DB01C001F091E /* cloudlife.c */; }; AF477729099DB044001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477735099DB0ED001F091E /* substrate.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591E0988A469000655EE /* substrate.xml */; }; AF477737099DB104001F091E /* substrate.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477736099DB104001F091E /* substrate.c */; }; AF477758099DB61E001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477768099DB6FD001F091E /* interaggregate.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CB0988A468000655EE /* interaggregate.xml */; }; AF47776A099DB710001F091E /* interaggregate.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477769099DB710001F091E /* interaggregate.c */; }; AF47777A099DB965001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477786099DBA11001F091E /* celtic.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258850988A468000655EE /* celtic.xml */; }; AF477788099DBA29001F091E /* celtic.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477787099DBA29001F091E /* celtic.c */; }; AF477796099DBA90001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4777A3099DBAF8001F091E /* fluidballs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258AB0988A468000655EE /* fluidballs.xml */; }; AF4777A5099DBB12001F091E /* fluidballs.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4777A4099DBB11001F091E /* fluidballs.c */; }; AF4777D7099DC183001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4778A2099DDA76001F091E /* boxfit.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587C0988A468000655EE /* boxfit.xml */; }; AF4778A4099DDA91001F091E /* boxfit.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4778A3099DDA91001F091E /* boxfit.c */; }; AF4778B1099DDB79001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4778BD099DDC1B001F091E /* penetrate.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F00988A469000655EE /* penetrate.xml */; }; AF4778BF099DDC33001F091E /* penetrate.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4778BE099DDC32001F091E /* penetrate.c */; }; AF4778CD099DDCAE001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4778D9099DDD14001F091E /* xjack.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259380988A469000655EE /* xjack.xml */; }; AF4778DB099DDD2B001F091E /* xjack.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4778DA099DDD2B001F091E /* xjack.c */; }; AF4778EE099DDDC8001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4778FA099DDE5F001F091E /* cynosure.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258910988A468000655EE /* cynosure.xml */; }; AF4778FC099DDE79001F091E /* cynosure.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4778FB099DDE79001F091E /* cynosure.c */; }; AF47790F099DE379001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47791B099DE3D9001F091E /* flag.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A50988A468000655EE /* flag.xml */; }; AF47791D099DE3F1001F091E /* flag.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47791C099DE3F1001F091E /* flag.c */; }; AF477930099DE4C7001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47793C099DE535001F091E /* slip.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590E0988A469000655EE /* slip.xml */; }; AF47793E099DE56A001F091E /* slip.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47793D099DE56A001F091E /* slip.c */; }; AF4808C5098C3BDC00FB32B8 /* colors.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC25B990988BC08000655EE /* colors.c */; }; AF4808C6098C3BDF00FB32B8 /* erase.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD530981E3CB00F7970E /* erase.c */; }; AF4808C7098C3BE600FB32B8 /* hsv.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD550981E3CB00F7970E /* hsv.c */; }; AF4808C8098C3BE800FB32B8 /* InvertedSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD420981E32E00F7970E /* InvertedSlider.m */; }; AF4808C9098C3BEC00FB32B8 /* jwxyz.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD440981E32E00F7970E /* jwxyz.m */; }; AF4808CA098C3BEE00FB32B8 /* PrefsReader.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD480981E32E00F7970E /* PrefsReader.m */; }; AF4808CC098C3BF200FB32B8 /* spline.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD570981E3CB00F7970E /* spline.c */; }; AF4808CD098C3BF400FB32B8 /* usleep.c in Sources */ = {isa = PBXBuildFile; fileRef = AFB5A0ED0981FF8B00871B16 /* usleep.c */; }; AF4808CE098C3BF800FB32B8 /* XScreenSaverConfigSheet.m in Sources */ = {isa = PBXBuildFile; fileRef = AFC2578009888F5A000655EE /* XScreenSaverConfigSheet.m */; }; AF4808CF098C3BFB00FB32B8 /* XScreenSaverView.m in Sources */ = {isa = PBXBuildFile; fileRef = AFC254C509882C97000655EE /* XScreenSaverView.m */; }; AF4808D0098C3BFD00FB32B8 /* yarandom.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD5B0981E3CB00F7970E /* yarandom.c */; }; AF480C5C098E305900FB32B8 /* helix.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480C2F098E2A6700FB32B8 /* helix.c */; }; AF480C69098E309E00FB32B8 /* helix.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C40988A468000655EE /* helix.xml */; }; AF480D85098EEE3100FB32B8 /* drift.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258990988A468000655EE /* drift.xml */; }; AF480D88098EEE5B00FB32B8 /* drift.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480C82098E336D00FB32B8 /* drift.c */; }; AF480FCC09901DF900FB32B8 /* gltrackball.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480EB0098F63D600FB32B8 /* gltrackball.c */; }; AF480FCD09901E0000FB32B8 /* rotator.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480EB7098F646400FB32B8 /* rotator.c */; }; AF480FCE09901E0400FB32B8 /* sphere.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480EBB098F649600FB32B8 /* sphere.c */; }; AF480FCF09901E0700FB32B8 /* trackball.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480EAD098F63BE00FB32B8 /* trackball.c */; }; AF480FD009901E0A00FB32B8 /* tube.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480ED2098F652A00FB32B8 /* tube.c */; }; AF4811030990A02700FB32B8 /* dangerball.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480DD1098F4F6200FB32B8 /* dangerball.c */; }; AF4811440990A35B00FB32B8 /* dangerball.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258920988A468000655EE /* dangerball.xml */; }; AF4812580990CE2700FB32B8 /* gears.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4812250990CB8C00FB32B8 /* gears.c */; }; AF48126D0990CE8600FB32B8 /* gears.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B20988A468000655EE /* gears.xml */; }; AF4812C80990D41700FB32B8 /* pipes.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F60988A469000655EE /* pipes.xml */; }; AF4812C90990D41E00FB32B8 /* buildlwo.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4812760990CF5D00FB32B8 /* buildlwo.c */; }; AF4812CA0990D42000FB32B8 /* pipeobjs.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4812780990CF5D00FB32B8 /* pipeobjs.c */; }; AF4812CB0990D42100FB32B8 /* pipes.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4812790990CF5D00FB32B8 /* pipes.c */; }; AF4812FA0990D9AE00FB32B8 /* XScreenSaverGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = AF4812F80990D9AE00FB32B8 /* XScreenSaverGLView.m */; }; AF48DEF60A0C25E000F94CF9 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF48E1680A0C268500F94CF9 /* glschool_alg.c in Sources */ = {isa = PBXBuildFile; fileRef = AF48E1620A0C268400F94CF9 /* glschool_alg.c */; }; AF48E1690A0C268500F94CF9 /* glschool_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = AF48E1640A0C268500F94CF9 /* glschool_gl.c */; }; AF48E16A0A0C268500F94CF9 /* glschool.c in Sources */ = {isa = PBXBuildFile; fileRef = AF48E1660A0C268500F94CF9 /* glschool.c */; }; AF48E16C0A0C26A400F94CF9 /* glschool.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF48E16B0A0C26A400F94CF9 /* glschool.xml */; }; AF4A3450102A593600A81B2A /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4A3462102A59EB00A81B2A /* surfaces.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF4A3461102A59EB00A81B2A /* surfaces.xml */; }; AF4A3464102A5A0E00A81B2A /* surfaces.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4A3463102A5A0E00A81B2A /* surfaces.c */; }; AF4A6692191F7CAE00C74753 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF4A8CA010B609B50074B062 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF4FD6EC0CE7A486005EE58E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4FD7010CE7A577005EE58E /* lockward.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4FD7000CE7A577005EE58E /* lockward.c */; }; AF4FD7030CE7A5BC005EE58E /* lockward.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF4FD7020CE7A5BC005EE58E /* lockward.xml */; }; AF4FF4C10D52CBDE00666F98 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4FF4D10D52CC8400666F98 /* cubicgrid.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4FF4D00D52CC8400666F98 /* cubicgrid.c */; }; AF4FF4D40D52CCAA00666F98 /* cubicgrid.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF4FF4D30D52CCAA00666F98 /* cubicgrid.xml */; }; AF51FD3415845CD500E5741F /* phosphor.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F30988A469000655EE /* phosphor.xml */; }; AF51FD3515845D1400E5741F /* SaverListController.m in Sources */ = {isa = PBXBuildFile; fileRef = AF84AF1E15829AF000607E4C /* SaverListController.m */; }; AF51FD3615845F9900E5741F /* iSaverRunner.xib in Resources */ = {isa = PBXBuildFile; fileRef = AF56019B157DAA3D00DB2055 /* iSaverRunner.xib */; }; AF51FD3715845F9F00E5741F /* iSaverRunner.xib in Resources */ = {isa = PBXBuildFile; fileRef = AF56019B157DAA3D00DB2055 /* iSaverRunner.xib */; }; AF51FD3915845FCB00E5741F /* SaverRunner.icns in Resources */ = {isa = PBXBuildFile; fileRef = AF2D522513E954A0002AA818 /* SaverRunner.icns */; }; AF561DF615969BC3007CA5ED /* iosgrabimage.m in Sources */ = {isa = PBXBuildFile; fileRef = AF561DF515969BC3007CA5ED /* iosgrabimage.m */; }; AF561DF815969C5B007CA5ED /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF561DF715969C5B007CA5ED /* AssetsLibrary.framework */; }; AF5C9AFD1A0CCE6E00B0147A /* dangerball.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258920988A468000655EE /* dangerball.xml */; }; AF5C9AFF1A0CCE6E00B0147A /* dangerball.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480DD1098F4F6200FB32B8 /* dangerball.c */; }; AF5C9B001A0CCE6E00B0147A /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF5C9B021A0CCE6E00B0147A /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF5C9B031A0CCE6E00B0147A /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF5C9B041A0CCE6E00B0147A /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF5C9B051A0CCE6E00B0147A /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF5C9B061A0CCE6E00B0147A /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF5C9B071A0CCE6E00B0147A /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF5C9B111A0CCF4E00B0147A /* cityflow.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF5C9B0F1A0CCF4E00B0147A /* cityflow.xml */; }; AF5C9B121A0CCF4E00B0147A /* cityflow.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF5C9B0F1A0CCF4E00B0147A /* cityflow.xml */; }; AF5C9B131A0CCF4E00B0147A /* cityflow.c in Sources */ = {isa = PBXBuildFile; fileRef = AF5C9B101A0CCF4E00B0147A /* cityflow.c */; }; AF5C9B141A0CCF4E00B0147A /* cityflow.c in Sources */ = {isa = PBXBuildFile; fileRef = AF5C9B101A0CCF4E00B0147A /* cityflow.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF6048FB157C07C600CA21E4 /* jwzgles.c in Sources */ = {isa = PBXBuildFile; fileRef = AF6048F8157C07C600CA21E4 /* jwzgles.c */; }; AF6048FC157C07C600CA21E4 /* jwzgles.h in Headers */ = {isa = PBXBuildFile; fileRef = AF6048F9157C07C600CA21E4 /* jwzgles.h */; }; AF6048FD157C07C600CA21E4 /* jwzglesI.h in Headers */ = {isa = PBXBuildFile; fileRef = AF6048FA157C07C600CA21E4 /* jwzglesI.h */; }; AF63A7F81AB4EDDB00593C75 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF63A7FA1AB4EDDB00593C75 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF63A7FB1AB4EDDB00593C75 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF63A7FC1AB4EDDB00593C75 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF63A7FD1AB4EDDB00593C75 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF63A7FE1AB4EDDB00593C75 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF63A7FF1AB4EDDB00593C75 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; AF63A8001AB4EDDB00593C75 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF63A80A1AB4EF5D00593C75 /* romanboy.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF63A8081AB4EF5D00593C75 /* romanboy.xml */; }; AF63A80B1AB4EF5D00593C75 /* romanboy.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF63A8081AB4EF5D00593C75 /* romanboy.xml */; }; 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"; }; }; AF64232F099F45C3000F4CD4 /* braid.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56EC10996A76F00BA26F7 /* braid.c */; }; AF642330099F45CA000F4CD4 /* braid.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587D0988A468000655EE /* braid.xml */; }; AF6423F9099FF9C2000F4CD4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF642408099FFAB0000F4CD4 /* extrusion.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A00988A468000655EE /* extrusion.xml */; }; AF642412099FFAF1000F4CD4 /* extrusion-helix2.c in Sources */ = {isa = PBXBuildFile; fileRef = AF642409099FFAF0000F4CD4 /* extrusion-helix2.c */; }; AF642413099FFAF1000F4CD4 /* extrusion-helix3.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64240A099FFAF0000F4CD4 /* extrusion-helix3.c */; }; AF642414099FFAF1000F4CD4 /* extrusion-helix4.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64240B099FFAF0000F4CD4 /* extrusion-helix4.c */; }; AF642415099FFAF1000F4CD4 /* extrusion-joinoffset.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64240C099FFAF0000F4CD4 /* extrusion-joinoffset.c */; }; AF642416099FFAF1000F4CD4 /* extrusion-screw.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64240D099FFAF0000F4CD4 /* extrusion-screw.c */; }; AF642417099FFAF1000F4CD4 /* extrusion-taper.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64240E099FFAF0000F4CD4 /* extrusion-taper.c */; }; AF642418099FFAF1000F4CD4 /* extrusion-twistoid.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64240F099FFAF1000F4CD4 /* extrusion-twistoid.c */; }; AF642419099FFAF1000F4CD4 /* extrusion.c in Sources */ = {isa = PBXBuildFile; fileRef = AF642410099FFAF1000F4CD4 /* extrusion.c */; }; AF6425D209A18855000F4CD4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF6425DE09A188D7000F4CD4 /* hypercube.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C70988A468000655EE /* hypercube.xml */; }; AF6425E009A188FB000F4CD4 /* hypercube.c in Sources */ = {isa = PBXBuildFile; fileRef = AF6425DF09A188FB000F4CD4 /* hypercube.c */; }; AF6425F209A189EC000F4CD4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF6425FE09A18A77000F4CD4 /* qix.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FF0988A469000655EE /* qix.xml */; }; AF64260009A18A94000F4CD4 /* qix.c in Sources */ = {isa = PBXBuildFile; fileRef = AF6425FF09A18A94000F4CD4 /* qix.c */; }; AF64261509A18D6C000F4CD4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF64262109A18DFF000F4CD4 /* hyperball.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C60988A468000655EE /* hyperball.xml */; }; AF64262309A18E1E000F4CD4 /* hyperball.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64262209A18E1E000F4CD4 /* hyperball.c */; }; AF64263209A18F54000F4CD4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF64263E09A18FCE000F4CD4 /* moire2.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E60988A469000655EE /* moire2.xml */; }; AF64264009A18FEB000F4CD4 /* moire2.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64263F09A18FEB000F4CD4 /* moire2.c */; }; AF64265509A19229000F4CD4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF64266109A1929A000F4CD4 /* munch.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258EA0988A469000655EE /* munch.xml */; }; AF64266309A192C5000F4CD4 /* munch.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64266209A192C5000F4CD4 /* munch.c */; }; AF64268109A194B0000F4CD4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF64268D09A19525000F4CD4 /* goop.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258BF0988A468000655EE /* goop.xml */; }; AF64268F09A19542000F4CD4 /* goop.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64268E09A19542000F4CD4 /* goop.c */; }; AF64277709A1D37A000F4CD4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF64278309A1D418000F4CD4 /* speedmine.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259100988A469000655EE /* speedmine.xml */; }; AF64278809A1D433000F4CD4 /* speedmine.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64278709A1D433000F4CD4 /* speedmine.c */; }; AF6427AE09A2DE36000F4CD4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF6427BA09A2DF09000F4CD4 /* bubbles.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258800988A468000655EE /* bubbles.xml */; }; AF6427BE09A2DF47000F4CD4 /* bubbles-default.c in Sources */ = {isa = PBXBuildFile; fileRef = AF6427BB09A2DF47000F4CD4 /* bubbles-default.c */; }; AF6427BF09A2DF47000F4CD4 /* bubbles.c in Sources */ = {isa = PBXBuildFile; fileRef = AF6427BC09A2DF47000F4CD4 /* bubbles.c */; }; AF68A48519196CF800D41CD1 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF68A48719196CF800D41CD1 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF68A48819196CF800D41CD1 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF68A48919196CF800D41CD1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF68A48A19196CF800D41CD1 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF68A48B19196CF800D41CD1 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF68A48C19196CF800D41CD1 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF68A49719196E3E00D41CD1 /* tessellimage.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF68A49419196E3E00D41CD1 /* tessellimage.xml */; }; AF68A49819196E3E00D41CD1 /* tessellimage.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF68A49419196E3E00D41CD1 /* tessellimage.xml */; }; AF68A49919196E3E00D41CD1 /* tessellimage.c in Sources */ = {isa = PBXBuildFile; fileRef = AF68A49519196E3E00D41CD1 /* tessellimage.c */; }; AF68A49A19196E3E00D41CD1 /* tessellimage.c in Sources */ = {isa = PBXBuildFile; fileRef = AF68A49519196E3E00D41CD1 /* tessellimage.c */; }; AF68A49B19196E3E00D41CD1 /* delaunay.c in Sources */ = {isa = PBXBuildFile; fileRef = AF68A49619196E3E00D41CD1 /* delaunay.c */; }; AF68A49C19196E3E00D41CD1 /* delaunay.c in Sources */ = {isa = PBXBuildFile; fileRef = AF68A49619196E3E00D41CD1 /* delaunay.c */; }; AF69640B0E4FE3470085DBCE /* teapot.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC211930E4E30C800D87B6E /* teapot.c */; }; AF73FF211A08AB9400E485E9 /* iSaverRunner57t.png in Resources */ = {isa = PBXBuildFile; fileRef = AF73FF201A08AB9400E485E9 /* iSaverRunner57t.png */; }; AF73FF291A09877F00E485E9 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF73FF2B1A09877F00E485E9 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF73FF2C1A09877F00E485E9 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF73FF2D1A09877F00E485E9 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF73FF2E1A09877F00E485E9 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF73FF2F1A09877F00E485E9 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF73FF301A09877F00E485E9 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF73FF391A09889700E485E9 /* binaryring.c in Sources */ = {isa = PBXBuildFile; fileRef = AF73FF381A09889700E485E9 /* binaryring.c */; }; AF73FF3A1A09889700E485E9 /* binaryring.c in Sources */ = {isa = PBXBuildFile; fileRef = AF73FF381A09889700E485E9 /* binaryring.c */; }; AF73FF3C1A0988C500E485E9 /* binaryring.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF73FF3B1A0988C500E485E9 /* binaryring.xml */; }; AF73FF3D1A0988C500E485E9 /* binaryring.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF73FF3B1A0988C500E485E9 /* binaryring.xml */; }; AF7511051782B5B900380EA1 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF7511081782B5B900380EA1 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF7511091782B5B900380EA1 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF75110A1782B5B900380EA1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF75110B1782B5B900380EA1 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF75110C1782B5B900380EA1 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF7511151782B64300380EA1 /* kaleidocycle.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7511141782B64300380EA1 /* kaleidocycle.c */; }; AF7776EA09B63ABF00EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF77770209B63B3900EA3033 /* phosphor.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F30988A469000655EE /* phosphor.xml */; }; AF77770409B63B5F00EA3033 /* phosphor.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77770309B63B5F00EA3033 /* phosphor.c */; }; AF77772009B6416100EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF77772C09B641C800EA3033 /* pacman.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258EE0988A469000655EE /* pacman.xml */; }; AF77772D09B641D300EA3033 /* pacman.c in Sources */ = {isa = PBXBuildFile; fileRef = AF795015099751940059A8B0 /* pacman.c */; }; AF77772E09B641D400EA3033 /* pacman_ai.c in Sources */ = {isa = PBXBuildFile; fileRef = AF795011099751940059A8B0 /* pacman_ai.c */; }; AF77772F09B641D600EA3033 /* pacman_level.c in Sources */ = {isa = PBXBuildFile; fileRef = AF795013099751940059A8B0 /* pacman_level.c */; }; AF77774509B6446500EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF77775309B644E300EA3033 /* flipscreen3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A80988A468000655EE /* flipscreen3d.xml */; }; AF77775509B644FF00EA3033 /* flipscreen3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77775409B644FF00EA3033 /* flipscreen3d.c */; }; AF77777A09B6497800EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF77778A09B64A0D00EA3033 /* gleidescope.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B50988A468000655EE /* gleidescope.xml */; }; AF77778C09B64A2A00EA3033 /* gleidescope.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77778B09B64A2A00EA3033 /* gleidescope.c */; }; AF77779409B64A5200EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF7777A409B64AE200EA3033 /* mirrorblob.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E20988A469000655EE /* mirrorblob.xml */; }; AF7777A609B64AFC00EA3033 /* mirrorblob.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777A509B64AFC00EA3033 /* mirrorblob.c */; }; AF7777AE09B64B2600EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF7777BE09B64BAC00EA3033 /* stonerview.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591C0988A469000655EE /* stonerview.xml */; }; AF7777C609B64BD400EA3033 /* stonerview-move.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777BF09B64BD400EA3033 /* stonerview-move.c */; }; AF7777C709B64BD400EA3033 /* stonerview-osc.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777C109B64BD400EA3033 /* stonerview-osc.c */; }; AF7777C809B64BD400EA3033 /* stonerview-view.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777C309B64BD400EA3033 /* stonerview-view.c */; }; AF7777C909B64BD400EA3033 /* stonerview.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777C409B64BD400EA3033 /* stonerview.c */; }; AF7777D609B64C6B00EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF7777E609B64CD800EA3033 /* glslideshow.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258BB0988A468000655EE /* glslideshow.xml */; }; AF7777E809B64CF700EA3033 /* glslideshow.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777E709B64CF700EA3033 /* glslideshow.c */; }; AF7777F009B64E3100EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF77780009B64EA800EA3033 /* fliptext.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A90988A468000655EE /* fliptext.xml */; }; AF77780209B64EC000EA3033 /* fliptext.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77780109B64EC000EA3033 /* fliptext.c */; }; AF77781609B6504400EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF77782709B650D200EA3033 /* starwars.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591B0988A469000655EE /* starwars.xml */; }; AF77782A09B650FF00EA3033 /* starwars.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77782809B650FF00EA3033 /* starwars.c */; }; AF77783409B6516900EA3033 /* grab-ximage.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5607909936FDD00F3E977 /* grab-ximage.c */; }; AF77783709B6518400EA3033 /* texfont.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77780809B64F4900EA3033 /* texfont.c */; }; AF77783A09B651AF00EA3033 /* glut_stroke.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56E0B0996A0ED00BA26F7 /* glut_stroke.c */; }; AF77783D09B651C700EA3033 /* glut_swidth.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56E0C0996A0ED00BA26F7 /* glut_swidth.c */; }; AF77784B09B6528100EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF77786709B6536000EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF77787709B653DC00EA3033 /* dnalogo.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77787609B653DC00EA3033 /* dnalogo.c */; }; AF77787A09B6545E00EA3033 /* dnalogo.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF77787909B6545E00EA3033 /* dnalogo.xml */; }; AF77787C09B654F800EA3033 /* carousel.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77785E09B6530E00EA3033 /* carousel.c */; }; AF77787D09B654FE00EA3033 /* carousel.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258830988A468000655EE /* carousel.xml */; }; AF77788509B6563500EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF77789109B656A900EA3033 /* fontglide.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258AE0988A468000655EE /* fontglide.xml */; }; AF77789309B656C300EA3033 /* fontglide.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77789209B656C300EA3033 /* fontglide.c */; }; AF7778AB09B659C800EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF7778B909B65A6E00EA3033 /* blitspin.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258760988A468000655EE /* blitspin.xml */; }; AF7778BB09B65A8A00EA3033 /* blitspin.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7778BA09B65A8A00EA3033 /* blitspin.c */; }; AF78369717DB9F25003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78369817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78369917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78369A17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78369B17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78369C17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78369D17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78369E17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78369F17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836A017DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836A117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836A217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836A317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836A417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836A517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836A617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836A717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836A817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836A917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836AA17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836AB17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836AC17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836AD17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836AE17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836AF17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836B017DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836B117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836B217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836B317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836B417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836B517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836B617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836B717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836B817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836B917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836BA17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836BB17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836BC17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836BD17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836BE17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836BF17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836C017DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836C117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836C217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836C317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836C417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836C517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836C617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836C717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836C817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836C917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836CA17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836CB17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836CC17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836CD17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836CE17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836CF17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836D117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836D217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836D317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836D417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836D517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836D617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836D717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836D817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836D917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836DA17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836DB17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836DC17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836DD17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836DE17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836DF17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836E017DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836E117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836E217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836E317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836E417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836E517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836E617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836E717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836E817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836E917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836EA17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836EB17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836EC17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836ED17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836EE17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836EF17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836F017DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836F117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836F217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836F317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836F417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836F517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836F617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836F717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836F817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836F917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836FA17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836FB17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836FC17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836FD17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836FE17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836FF17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370017DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370A17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370B17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370C17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370D17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370E17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370F17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371017DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371A17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371B17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371C17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371D17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371E17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371F17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372017DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372A17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372B17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372C17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372D17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372E17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372F17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373017DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373A17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373B17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373C17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373D17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373E17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373F17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374017DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374A17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374B17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374C17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374D17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374E17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374F17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375017DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375117DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375217DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375317DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375417DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375517DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375617DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375717DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375817DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375917DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375A17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375B17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375C17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375D17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375E17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375F17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376017DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376117DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376217DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376317DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376417DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376517DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376617DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376717DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376817DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376917DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376A17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376B17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376C17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376D17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376E17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376F17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377017DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377117DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377217DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377317DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377417DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377517DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377617DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377717DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377817DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377917DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377A17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377B17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78D179142DD8F3002AAF77 /* voronoi.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF0DCA610C4CBB8E00D76972 /* voronoi.xml */; }; AF78D17B142DD8F3002AAF77 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF78D17C142DD8F3002AAF77 /* voronoi.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0DCA5F0C4CBB7300D76972 /* voronoi.c */; }; AF78D18D142DD96E002AAF77 /* hilbert.c in Sources */ = {isa = PBXBuildFile; fileRef = AF78D18A142DD96E002AAF77 /* hilbert.c */; }; AF78D191142DD99B002AAF77 /* hilbert.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF78D18E142DD99A002AAF77 /* hilbert.xml */; }; AF794F6A099748450059A8B0 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF794F7D0997486C0059A8B0 /* demon.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258960988A468000655EE /* demon.xml */; }; AF794F7F099748860059A8B0 /* demon.c in Sources */ = {isa = PBXBuildFile; fileRef = AF794F7E099748860059A8B0 /* demon.c */; }; AF794F9409974A320059A8B0 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF794FA809974AC60059A8B0 /* fiberlamp.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A20988A468000655EE /* fiberlamp.xml */; }; AF794FAA09974AE30059A8B0 /* fiberlamp.c in Sources */ = {isa = PBXBuildFile; fileRef = AF794FA909974AE30059A8B0 /* fiberlamp.c */; }; AF794FD309974FA60059A8B0 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF794FDF09974FD10059A8B0 /* loop.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258DD0988A468000655EE /* loop.xml */; }; AF794FE109974FEC0059A8B0 /* loop.c in Sources */ = {isa = PBXBuildFile; fileRef = AF794FE009974FEC0059A8B0 /* loop.c */; }; AF7ACFC719FF0A9200BD752B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF7ACFC919FF0A9200BD752B /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF7ACFCA19FF0A9200BD752B /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF7ACFCB19FF0A9200BD752B /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF7ACFCC19FF0A9200BD752B /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF7ACFCD19FF0A9200BD752B /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF7ACFCE19FF0A9200BD752B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7ACFD719FF0B7A00BD752B /* geodesicgears.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7ACFD619FF0B7A00BD752B /* geodesicgears.c */; }; AF7ACFD919FF0BA600BD752B /* geodesicgears.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF7ACFD819FF0BA600BD752B /* geodesicgears.xml */; }; AF7ACFDA19FF0BA600BD752B /* geodesicgears.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF7ACFD819FF0BA600BD752B /* geodesicgears.xml */; }; AF7F54A417DC249500CE1158 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78377C17DBA85D003B9FC0 /* libz.dylib */; }; AF7F54A517DC24A300CE1158 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78377C17DBA85D003B9FC0 /* libz.dylib */; }; AF7F54A617DC24B500CE1158 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78377C17DBA85D003B9FC0 /* libz.dylib */; }; AF84AF1F15829AF000607E4C /* SaverListController.m in Sources */ = {isa = PBXBuildFile; fileRef = AF84AF1E15829AF000607E4C /* SaverListController.m */; }; AF84AF2015829AF000607E4C /* SaverListController.m in Sources */ = {isa = PBXBuildFile; fileRef = AF84AF1E15829AF000607E4C /* SaverListController.m */; }; AF84FD4209B1209E00F3AB06 /* GLUT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF84FD4109B1209E00F3AB06 /* GLUT.framework */; }; AF918983158FC00A002B5D1E /* iSaverRunner.xib in Resources */ = {isa = PBXBuildFile; fileRef = AF56019B157DAA3D00DB2055 /* iSaverRunner.xib */; }; AF918986158FC00A002B5D1E /* SaverRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD400981E32E00F7970E /* SaverRunner.m */; }; AF918987158FC00A002B5D1E /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; AF918988158FC00A002B5D1E /* SaverListController.m in Sources */ = {isa = PBXBuildFile; fileRef = AF84AF1E15829AF000607E4C /* SaverListController.m */; }; AF918993158FC2BE002B5D1E /* abstractile.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A4340CDD800F002805BF /* abstractile.c */; }; AF918994158FC2BE002B5D1E /* anemone.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477231099D4FD5001F091E /* anemone.c */; }; AF918995158FC2E0002B5D1E /* analogtv.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4CFA09B5AC94006E59CF /* analogtv.c */; }; AF918996158FC310002B5D1E /* anemotaxis.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4773D4099D6817001F091E /* anemotaxis.c */; }; AF918997158FC310002B5D1E /* apple2-main.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4E0509B5BC9D006E59CF /* apple2-main.c */; }; AF918998158FC310002B5D1E /* apple2.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4DD309B5B990006E59CF /* apple2.c */; }; AF918999158FC310002B5D1E /* asm6502.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0DCA320C4C74A200D76972 /* asm6502.c */; }; AF91899A158FC310002B5D1E /* attraction.c in Sources */ = {isa = PBXBuildFile; fileRef = AF976DFA09896BEB001F8B92 /* attraction.c */; }; AF91899B158FC310002B5D1E /* barcode.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975A99099C6C3500B05160 /* barcode.c */; }; AF91899C158FC310002B5D1E /* blaster.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4776A2099DAADE001F091E /* blaster.c */; }; AF91899D158FC310002B5D1E /* blitspin.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7778BA09B65A8A00EA3033 /* blitspin.c */; }; AF91899E158FC310002B5D1E /* boxfit.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4778A3099DDA91001F091E /* boxfit.c */; }; AF91899F158FC310002B5D1E /* bsod.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4DC309B5B87D006E59CF /* bsod.c */; }; AF9189A0158FC310002B5D1E /* bubbles-default.c in Sources */ = {isa = PBXBuildFile; fileRef = AF6427BB09A2DF47000F4CD4 /* bubbles-default.c */; }; AF9189A2158FC310002B5D1E /* bumps.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D48EE09B533AE006E59CF /* bumps.c */; }; AF9189A3158FC310002B5D1E /* ccurve.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4771EF099D4DFE001F091E /* ccurve.c */; }; AF9189A4158FC310002B5D1E /* celtic.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477787099DBA29001F091E /* celtic.c */; }; AF9189A5158FC310002B5D1E /* cloudlife.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477720099DB01C001F091E /* cloudlife.c */; }; AF9189A6158FC310002B5D1E /* companion.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D91431D5FC00E09C51 /* companion.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF9189A7158FC311002B5D1E /* companion_disc.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D61431D5FC00E09C51 /* companion_disc.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF9189A8158FC311002B5D1E /* companion_heart.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D71431D5FC00E09C51 /* companion_heart.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF9189A9158FC311002B5D1E /* companion_quad.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D81431D5FC00E09C51 /* companion_quad.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF9189AA158FC311002B5D1E /* compass.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47717C099D47D3001F091E /* compass.c */; }; AF9189AB158FC311002B5D1E /* coral.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4775EF099D9FFF001F091E /* coral.c */; }; AF9189AD158FC311002B5D1E /* cwaves.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF463490C44044E00EE6509 /* cwaves.c */; }; AF9189AE158FC311002B5D1E /* cynosure.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4778FB099DDE79001F091E /* cynosure.c */; }; AF9189AF158FC311002B5D1E /* decayscreen.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D467809B5110B006E59CF /* decayscreen.c */; }; AF9189B0158FC311002B5D1E /* deco.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC25B5E0988BA63000655EE /* deco.c */; }; AF9189B1158FC311002B5D1E /* deluxe.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477145099D43E2001F091E /* deluxe.c */; }; AF9189B2158FC311002B5D1E /* distort.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D490709B536F7006E59CF /* distort.c */; }; AF9189B3158FC311002B5D1E /* epicycle.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477605099DA097001F091E /* epicycle.c */; }; AF9189B4158FC311002B5D1E /* eruption.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975A83099C6B4900B05160 /* eruption.c */; }; AF9189B5158FC311002B5D1E /* fireworkx.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975AEE099C6F1700B05160 /* fireworkx.c */; }; AF9189B6158FC334002B5D1E /* flame.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477496099D8A53001F091E /* flame.c */; }; AF9189B7158FC334002B5D1E /* fluidballs.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4777A4099DBB11001F091E /* fluidballs.c */; }; AF9189B8158FC334002B5D1E /* fontglide.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77789209B656C300EA3033 /* fontglide.c */; }; AF9189B9158FC334002B5D1E /* fps.c in Sources */ = {isa = PBXBuildFile; fileRef = AFBF893C0E41D930006A2D66 /* fps.c */; }; AF9189BA158FC334002B5D1E /* fuzzyflakes.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4773B4099D6778001F091E /* fuzzyflakes.c */; }; AF9189BB158FC334002B5D1E /* goop.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64268E09A19542000F4CD4 /* goop.c */; }; AF9189BC158FC334002B5D1E /* greynetic.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480C21098E28EF00FB32B8 /* greynetic.c */; }; AF9189BD158FC334002B5D1E /* halftone.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477266099D5768001F091E /* halftone.c */; }; AF9189BE158FC334002B5D1E /* halo.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480C29098E295D00FB32B8 /* halo.c */; }; AF9189BF158FC334002B5D1E /* helix.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480C2F098E2A6700FB32B8 /* helix.c */; }; AF9189C2158FC334002B5D1E /* ifs.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47743A099D7CEA001F091E /* ifs.c */; }; AF9189C3158FC334002B5D1E /* imsmap.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975740099C31DD00B05160 /* imsmap.c */; }; AF9189C4158FC334002B5D1E /* interaggregate.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477769099DB710001F091E /* interaggregate.c */; }; AF9189C5158FC334002B5D1E /* interference.c in Sources */ = {isa = PBXBuildFile; fileRef = AF476FD0099D15AA001F091E /* interference.c */; }; AF9189C6158FC334002B5D1E /* intermomentary.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47741C099D6A6C001F091E /* intermomentary.c */; }; AF9189C7158FC334002B5D1E /* kaleidescope.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4774AC099D8B08001F091E /* kaleidescope.c */; }; AF9189C8158FC334002B5D1E /* kumppa.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47762A099DA2E9001F091E /* kumppa.c */; }; AF9189CB158FC334002B5D1E /* m6502.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0DCA340C4C74A200D76972 /* m6502.c */; }; AF9189CC158FC334002B5D1E /* maze.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4774E1099D8C8B001F091E /* maze.c */; }; AF9189CD158FC334002B5D1E /* memscroller.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975B14099C709E00B05160 /* memscroller.c */; }; AF9189CE158FC334002B5D1E /* metaballs.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975A49099C689F00B05160 /* metaballs.c */; }; AF9189CF158FC334002B5D1E /* moire.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975789099C37A500B05160 /* moire.c */; }; AF9189D0158FC334002B5D1E /* moire2.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64263F09A18FEB000F4CD4 /* moire2.c */; }; AF9189D1158FC334002B5D1E /* munch.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64266209A192C5000F4CD4 /* munch.c */; }; AF9189D2158FC334002B5D1E /* nerverot.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477205099D4EB6001F091E /* nerverot.c */; }; AF9189D3158FC334002B5D1E /* noseguy.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975C76099C8FC700B05160 /* noseguy.c */; }; AF9189D4158FC334002B5D1E /* pedal.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477570099D9A8A001F091E /* pedal.c */; }; AF9189D5158FC334002B5D1E /* penetrate.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4778BE099DDC32001F091E /* penetrate.c */; }; AF9189D6158FC334002B5D1E /* petri.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477683099DA8C7001F091E /* petri.c */; }; AF9189D7158FC334002B5D1E /* phosphor.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77770309B63B5F00EA3033 /* phosphor.c */; }; AF9189D8158FC334002B5D1E /* piecewise.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477297099D5980001F091E /* piecewise.c */; }; AF9189D9158FC334002B5D1E /* pong.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4CFC09B5AC94006E59CF /* pong.c */; }; AF9189DA158FC334002B5D1E /* popsquares.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47727E099D5808001F091E /* popsquares.c */; }; AF9189DB158FC334002B5D1E /* pyro.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47759C099D9CA3001F091E /* pyro.c */; }; AF9189DC158FC334002B5D1E /* qix.c in Sources */ = {isa = PBXBuildFile; fileRef = AF6425FF09A18A94000F4CD4 /* qix.c */; }; AF9189DD158FC334002B5D1E /* rd-bomb.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9757D5099C3EB800B05160 /* rd-bomb.c */; }; AF9189DE158FC334002B5D1E /* ripples.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D493E09B53D55006E59CF /* ripples.c */; }; AF9189DF158FC35D002B5D1E /* rocks.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975D66099CA16A00B05160 /* rocks.c */; }; AF9189E0158FC35D002B5D1E /* rorschach.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD620981E40800F7970E /* rorschach.c */; }; AF9189E1158FC35D002B5D1E /* rotzoomer.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D496709B540A4006E59CF /* rotzoomer.c */; }; AF9189E2158FC35D002B5D1E /* shadebobs.c in Sources */ = {isa = PBXBuildFile; fileRef = AF97587A099C492000B05160 /* shadebobs.c */; }; AF9189E3158FC35D002B5D1E /* slidescreen.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D475809B53091006E59CF /* slidescreen.c */; }; AF9189E4158FC35D002B5D1E /* speedmine.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64278709A1D433000F4CD4 /* speedmine.c */; }; AF9189E5158FC35D002B5D1E /* spotlight.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D49AA09B54596006E59CF /* spotlight.c */; }; AF9189E6158FC35D002B5D1E /* squiral.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477657099DA75D001F091E /* squiral.c */; }; AF9189E7158FC35D002B5D1E /* starfish.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4775B3099D9D67001F091E /* starfish.c */; }; AF9189E8158FC35D002B5D1E /* substrate.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477736099DB104001F091E /* substrate.c */; }; AF9189EA158FC35D002B5D1E /* tronbit.c in Sources */ = {isa = PBXBuildFile; fileRef = AF35821B1433314C00E09C51 /* tronbit.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF9189EB158FC35D002B5D1E /* tronbit_idle1.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3582171433314C00E09C51 /* tronbit_idle1.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF9189EC158FC35D002B5D1E /* tronbit_idle2.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3582181433314C00E09C51 /* tronbit_idle2.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF9189ED158FC35D002B5D1E /* tronbit_no.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3582191433314C00E09C51 /* tronbit_no.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF9189EE158FC35D002B5D1E /* tronbit_yes.c in Sources */ = {isa = PBXBuildFile; fileRef = AF35821A1433314C00E09C51 /* tronbit_yes.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF9189EF158FC35D002B5D1E /* truchet.c in Sources */ = {isa = PBXBuildFile; fileRef = AF476FF0099D1713001F091E /* truchet.c */; }; AF9189F0158FC35D002B5D1E /* twang.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D497F09B541E5006E59CF /* twang.c */; }; AF9189F1158FC35D002B5D1E /* vermiculate.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477704099DAF3F001F091E /* vermiculate.c */; }; AF9189F2158FC35D002B5D1E /* wander.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477192099D4864001F091E /* wander.c */; }; AF9189F3158FC35E002B5D1E /* whirlwindwarp.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4776EE099DAE58001F091E /* whirlwindwarp.c */; }; AF9189F5158FC35E002B5D1E /* wormhole.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477395099D65FE001F091E /* wormhole.c */; }; AF9189F6158FC35E002B5D1E /* xanalogtv.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4D9209B5B444006E59CF /* xanalogtv.c */; }; AF9189F7158FC35E002B5D1E /* xflame.c in Sources */ = {isa = PBXBuildFile; fileRef = AF97582F099C427500B05160 /* xflame.c */; }; AF9189F8158FC35E002B5D1E /* xjack.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4778DA099DDD2B001F091E /* xjack.c */; }; AF9189F9158FC35E002B5D1E /* xlyap.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4C7C09B5A044006E59CF /* xlyap.c */; }; AF9189FA158FC35E002B5D1E /* xmatrix.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477455099D7D8A001F091E /* xmatrix.c */; }; AF9189FB158FC35E002B5D1E /* xrayswarm.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4776D3099DACEB001F091E /* xrayswarm.c */; }; AF9189FC158FC35E002B5D1E /* xspirograph.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4776BD099DAC46001F091E /* xspirograph.c */; }; AF9189FD158FC35E002B5D1E /* zoom.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D48D409B53229006E59CF /* zoom.c */; }; AF9189FF158FC38A002B5D1E /* apollonian.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5713F0996BFBE00BA26F7 /* apollonian.c */; }; AF918A00158FC38A002B5D1E /* bouboule.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD572B90996FB3D00BA26F7 /* bouboule.c */; }; AF918A01158FC38A002B5D1E /* braid.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56EC10996A76F00BA26F7 /* braid.c */; }; AF918A02158FC38A002B5D1E /* crystal.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD572ED0997006E00BA26F7 /* crystal.c */; }; AF918A03158FC38A002B5D1E /* demon.c in Sources */ = {isa = PBXBuildFile; fileRef = AF794F7E099748860059A8B0 /* demon.c */; }; AF918A04158FC38A002B5D1E /* discrete.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD571280996BEF700BA26F7 /* discrete.c */; }; AF918A05158FC38A002B5D1E /* drift.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480C82098E336D00FB32B8 /* drift.c */; }; AF918A06158FC38A002B5D1E /* euler2d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD571560996C07F00BA26F7 /* euler2d.c */; }; AF918A07158FC38A002B5D1E /* fadeplot.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5706C0996B70000BA26F7 /* fadeplot.c */; }; AF918A08158FC38A002B5D1E /* fiberlamp.c in Sources */ = {isa = PBXBuildFile; fileRef = AF794FA909974AE30059A8B0 /* fiberlamp.c */; }; AF918A0A158FC38A002B5D1E /* flow.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD571010996BC3800BA26F7 /* flow.c */; }; AF918A0C158FC38A002B5D1E /* galaxy.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56F360996ABD200BA26F7 /* galaxy.c */; }; AF918A0D158FC38A002B5D1E /* grav.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56F620996AF2D00BA26F7 /* grav.c */; }; AF918A0E158FC38A002B5D1E /* hopalong.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56F880996B06600BA26F7 /* hopalong.c */; }; AF918A11158FC38A002B5D1E /* julia.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5730C099702C800BA26F7 /* julia.c */; }; AF918A16158FC38A002B5D1E /* loop.c in Sources */ = {isa = PBXBuildFile; fileRef = AF794FE009974FEC0059A8B0 /* loop.c */; }; AF918A17158FC38A002B5D1E /* mountain.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD570820996B79300BA26F7 /* mountain.c */; }; AF918A18158FC38A002B5D1E /* pacman.c in Sources */ = {isa = PBXBuildFile; fileRef = AF795015099751940059A8B0 /* pacman.c */; }; AF918A19158FC38A002B5D1E /* pacman_ai.c in Sources */ = {isa = PBXBuildFile; fileRef = AF795011099751940059A8B0 /* pacman_ai.c */; }; AF918A1A158FC38A002B5D1E /* pacman_level.c in Sources */ = {isa = PBXBuildFile; fileRef = AF795013099751940059A8B0 /* pacman_level.c */; }; AF918A1B158FC38A002B5D1E /* penrose.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5700C0996B49D00BA26F7 /* penrose.c */; }; AF918A1C158FC38A002B5D1E /* polyominoes.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD572800996EF2B00BA26F7 /* polyominoes.c */; }; AF918A1E158FC38A002B5D1E /* sierpinski.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD570220996B52700BA26F7 /* sierpinski.c */; }; AF918A1F158FC38A002B5D1E /* slip.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47793D099DE56A001F091E /* slip.c */; }; AF918A22158FC38A002B5D1E /* strange.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD57371099741A200BA26F7 /* strange.c */; }; AF918A23158FC38A002B5D1E /* swirl.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD572350996E53E00BA26F7 /* swirl.c */; }; AF918A24158FC38A002B5D1E /* thornbird.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5716B0996C16700BA26F7 /* thornbird.c */; }; AF918A25158FC38A002B5D1E /* triangle.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD570980996B86200BA26F7 /* triangle.c */; }; AF918A28158FC3BB002B5D1E /* antinspect.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5605F09936E9C00F3E977 /* antinspect.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A29158FC3BB002B5D1E /* antmaze.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA562EF0993941600F3E977 /* antmaze.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A2A158FC3BB002B5D1E /* antspotlight.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5607809936FDD00F3E977 /* antspotlight.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A2B158FC3BB002B5D1E /* atlantis.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839A909930C4900277BE9 /* atlantis.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A2C158FC3BB002B5D1E /* atunnel.c in Sources */ = {isa = PBXBuildFile; fileRef = AF083A31099311CE00277BE9 /* atunnel.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A2D158FC3BB002B5D1E /* b_draw.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55AF409933DBF00F3E977 /* b_draw.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A2E158FC3BB002B5D1E /* b_lockglue.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55AF509933DBF00F3E977 /* b_lockglue.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A2F158FC3BB002B5D1E /* b_sphere.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55AF609933DBF00F3E977 /* b_sphere.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A30158FC3BB002B5D1E /* blinkbox.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5616D09937C9A00F3E977 /* blinkbox.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A31158FC3BB002B5D1E /* blocktube.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5602909936D0700F3E977 /* blocktube.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A32158FC3BB002B5D1E /* boing.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA562D40993930C00F3E977 /* boing.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A33158FC3BB002B5D1E /* bouncingcow.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EE70993613E00F3E977 /* bouncingcow.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A34158FC3BB002B5D1E /* boxed.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55CBE09934C0900F3E977 /* boxed.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A35158FC3BB002B5D1E /* bubble3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55AE409933D3800F3E977 /* bubble3d.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A36158FC3BB002B5D1E /* buildlwo.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4812760990CF5D00FB32B8 /* buildlwo.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A37158FC3BB002B5D1E /* cage.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5595D0993310500F3E977 /* cage.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A38158FC3BB002B5D1E /* carousel.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77785E09B6530E00EA3033 /* carousel.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A39158FC3BB002B5D1E /* chessmodels.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E2309935F2B00F3E977 /* chessmodels.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A3A158FC3BB002B5D1E /* circuit.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55BC00993416E00F3E977 /* circuit.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A3B158FC3BB002B5D1E /* cow_face.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EE80993613E00F3E977 /* cow_face.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A3C158FC3BB002B5D1E /* cow_hide.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EE90993613E00F3E977 /* cow_hide.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A3D158FC3BB002B5D1E /* cow_hoofs.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EEA0993613E00F3E977 /* cow_hoofs.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A3E158FC3BB002B5D1E /* cow_horns.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EEB0993613E00F3E977 /* cow_horns.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A3F158FC3BB002B5D1E /* cow_tail.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EEC0993613E00F3E977 /* cow_tail.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A40158FC3BB002B5D1E /* cow_udder.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EED0993613E00F3E977 /* cow_udder.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A41158FC3BB002B5D1E /* crackberg.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563290993957100F3E977 /* crackberg.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A42158FC3BB002B5D1E /* cube21.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563660993970F00F3E977 /* cube21.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A43158FC3BB002B5D1E /* cubenetic.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55D770993589300F3E977 /* cubenetic.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A44158FC3BB002B5D1E /* cubestorm.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55FF309936C4500F3E977 /* cubestorm.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A45158FC3BB002B5D1E /* cubicgrid.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4FF4D00D52CC8400666F98 /* cubicgrid.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A46158FC3BB002B5D1E /* dangerball.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480DD1098F4F6200FB32B8 /* dangerball.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A48158FC3BB002B5D1E /* dolphin.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839AA09930C4900277BE9 /* dolphin.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A49158FC3BB002B5D1E /* dropshadow.c in Sources */ = {isa = PBXBuildFile; fileRef = AF241F81107C38DF00046A84 /* dropshadow.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A4A158FC3E5002B5D1E /* endgame.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E2509935F2B00F3E977 /* endgame.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A4B158FC3E5002B5D1E /* engine.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55C230993435300F3E977 /* engine.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A54158FC3E5002B5D1E /* flipflop.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5604709936DCC00F3E977 /* flipflop.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A55158FC3E5002B5D1E /* flipscreen3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77775409B644FF00EA3033 /* flipscreen3d.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A56158FC3E5002B5D1E /* fliptext.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77780109B64EC000EA3033 /* fliptext.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A57158FC3E5002B5D1E /* flyingtoasters.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E980993608800F3E977 /* flyingtoasters.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A59158FC3E5002B5D1E /* fps-gl.c in Sources */ = {isa = PBXBuildFile; fileRef = AFBF89AE0E423FC3006A2D66 /* fps-gl.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A5A158FC3E5002B5D1E /* gears.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4812250990CB8C00FB32B8 /* gears.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A5B158FC3E5002B5D1E /* gflux.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55BA60993401A00F3E977 /* gflux.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A5C158FC3E5002B5D1E /* glblur.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E4509935FD300F3E977 /* glblur.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A5D158FC3E5002B5D1E /* glcells.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF463710C440B9200EE6509 /* glcells.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A5E158FC3E5002B5D1E /* gleidescope.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77778B09B64A2A00EA3033 /* gleidescope.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A60158FC3E5002B5D1E /* glhanoi.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563460993963400F3E977 /* glhanoi.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A61158FC3E5002B5D1E /* glknots.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5600E09936CB300F3E977 /* glknots.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A62158FC3E5002B5D1E /* glmatrix.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55F870993648500F3E977 /* glmatrix.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A63158FC3E5002B5D1E /* glplanet.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55B2109933E4A00F3E977 /* glplanet.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A64158FC3E5002B5D1E /* glschool.c in Sources */ = {isa = PBXBuildFile; fileRef = AF48E1660A0C268500F94CF9 /* glschool.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A65158FC3E5002B5D1E /* glschool_alg.c in Sources */ = {isa = PBXBuildFile; fileRef = AF48E1620A0C268400F94CF9 /* glschool_alg.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A66158FC3E5002B5D1E /* glschool_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = AF48E1640A0C268500F94CF9 /* glschool_gl.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A67158FC3E5002B5D1E /* glslideshow.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777E709B64CF700EA3033 /* glslideshow.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A68158FC3E5002B5D1E /* glsnake.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55C8C099349EE00F3E977 /* glsnake.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A69158FC3E5002B5D1E /* gltext.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56E080996A07A00BA26F7 /* gltext.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A6A158FC3E5002B5D1E /* hilbert.c in Sources */ = {isa = PBXBuildFile; fileRef = AF78D18A142DD96E002AAF77 /* hilbert.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A6B158FC3E5002B5D1E /* hypertorus.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55F59099362DF00F3E977 /* hypertorus.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A6C158FC3E5002B5D1E /* hypnowheel.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3C715D0D624C600030CC0D /* hypnowheel.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A6D158FC3E5002B5D1E /* involute.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A16A0CDD78EA002805BF /* involute.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A6E158FC417002B5D1E /* jigglypuff.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55F210993620200F3E977 /* jigglypuff.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A6F158FC417002B5D1E /* juggler3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563B90993991300F3E977 /* juggler3d.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A70158FC417002B5D1E /* klein.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55F3F0993626E00F3E977 /* klein.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A71158FC417002B5D1E /* lament.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A8E0993369100F3E977 /* lament.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A72158FC417002B5D1E /* lavalite.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55DDD09935DB600F3E977 /* lavalite.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A74158FC417002B5D1E /* marching.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55DE109935DFB00F3E977 /* marching.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A75158FC417002B5D1E /* menger.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55BF9099342D500F3E977 /* menger.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A76158FC417002B5D1E /* mirrorblob.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777A509B64AFC00EA3033 /* mirrorblob.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A77158FC417002B5D1E /* moebius.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55982099331C300F3E977 /* moebius.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A78158FC417002B5D1E /* moebiusgears.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A40B0CDD7BC3002805BF /* moebiusgears.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A79158FC417002B5D1E /* molecule.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA561120993786800F3E977 /* molecule.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A7A158FC417002B5D1E /* morph3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA559CC099332E800F3E977 /* morph3d.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A7B158FC417002B5D1E /* noof.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5619009937D3600F3E977 /* noof.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A7C158FC417002B5D1E /* photopile.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD51DB60F063BCE00471C02 /* photopile.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A7D158FC417002B5D1E /* pinion.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA562340993856A00F3E977 /* pinion.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A7E158FC417002B5D1E /* pipeobjs.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4812780990CF5D00FB32B8 /* pipeobjs.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A7F158FC417002B5D1E /* pipes.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4812790990CF5D00FB32B8 /* pipes.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A82158FC417002B5D1E /* polytopes.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA560C3099371D500F3E977 /* polytopes.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A83158FC417002B5D1E /* providence.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5621C099384F600F3E977 /* providence.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A84158FC417002B5D1E /* pulsar.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55B3F09933EC600F3E977 /* pulsar.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A85158FC417002B5D1E /* queens.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E0609935EB800F3E977 /* queens.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A86158FC417002B5D1E /* rubik.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA559EA0993335C00F3E977 /* rubik.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A87158FC417002B5D1E /* rubikblocks.c in Sources */ = {isa = PBXBuildFile; fileRef = AF32D9FA0F3AD1200080F535 /* rubikblocks.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A88158FC417002B5D1E /* s1_1.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A400993351F00F3E977 /* s1_1.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A89158FC417002B5D1E /* s1_2.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A410993351F00F3E977 /* s1_2.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A8A158FC417002B5D1E /* s1_3.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A420993351F00F3E977 /* s1_3.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A8B158FC417002B5D1E /* s1_4.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A430993351F00F3E977 /* s1_4.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A8C158FC417002B5D1E /* s1_5.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A440993351F00F3E977 /* s1_5.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A8D158FC417002B5D1E /* s1_6.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A450993351F00F3E977 /* s1_6.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A8E158FC417002B5D1E /* s1_b.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A460993351F00F3E977 /* s1_b.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A8F158FC417002B5D1E /* sballs.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55D510993569C00F3E977 /* sballs.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A90158FC417002B5D1E /* shark.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839AB09930C4900277BE9 /* shark.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A91158FC417002B5D1E /* sierpinski3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55B8E09933FBF00F3E977 /* sierpinski3d.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A92158FC417002B5D1E /* skytentacles.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE2A4720E2E90E300ADB298 /* skytentacles.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A93158FC417002B5D1E /* sonar-icmp.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE30BFF0E52B1DC00CCF4A5 /* sonar-icmp.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A94158FC417002B5D1E /* sonar-sim.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE30C000E52B1DC00CCF4A5 /* sonar-sim.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A95158FC417002B5D1E /* sonar.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE30C010E52B1DC00CCF4A5 /* sonar.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A96158FC417002B5D1E /* spheremonics.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55D940993590F00F3E977 /* spheremonics.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A97158FC473002B5D1E /* sproingies.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A470993351F00F3E977 /* sproingies.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A98158FC473002B5D1E /* sproingiewrap.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A480993351F00F3E977 /* sproingiewrap.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A99158FC473002B5D1E /* stairs.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A1A0993345900F3E977 /* stairs.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A9A158FC473002B5D1E /* starwars.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77782809B650FF00EA3033 /* starwars.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A9B158FC473002B5D1E /* stonerview-move.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777BF09B64BD400EA3033 /* stonerview-move.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A9C158FC473002B5D1E /* stonerview-osc.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777C109B64BD400EA3033 /* stonerview-osc.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A9D158FC473002B5D1E /* stonerview-view.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777C309B64BD400EA3033 /* stonerview-view.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A9E158FC473002B5D1E /* stonerview.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777C409B64BD400EA3033 /* stonerview.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A9F158FC473002B5D1E /* superquadrics.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA559A80993326300F3E977 /* superquadrics.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AA0158FC473002B5D1E /* surfaces.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4A3463102A5A0E00A81B2A /* surfaces.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AA1158FC473002B5D1E /* swim.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839AC09930C4900277BE9 /* swim.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AA2158FC473002B5D1E /* tangram.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563090993948F00F3E977 /* tangram.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AA3158FC473002B5D1E /* tangram_shapes.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563070993948F00F3E977 /* tangram_shapes.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AA4158FC473002B5D1E /* teapot.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC211930E4E30C800D87B6E /* teapot.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AA5158FC473002B5D1E /* timetunnel.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5638E0993980D00F3E977 /* timetunnel.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AA6158FC473002B5D1E /* toast.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E990993608800F3E977 /* toast.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AA7158FC473002B5D1E /* toast2.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E9B0993608800F3E977 /* toast2.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AA8158FC473002B5D1E /* toaster.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EAB0993608800F3E977 /* toaster.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AA9158FC473002B5D1E /* toaster_base.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E9D0993608800F3E977 /* toaster_base.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AAA158FC473002B5D1E /* toaster_handle.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E9F0993608800F3E977 /* toaster_handle.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AAB158FC473002B5D1E /* toaster_handle2.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EA10993608800F3E977 /* toaster_handle2.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AAC158FC473002B5D1E /* toaster_jet.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EA30993608800F3E977 /* toaster_jet.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AAD158FC473002B5D1E /* toaster_knob.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EA50993608800F3E977 /* toaster_knob.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AAE158FC473002B5D1E /* toaster_slots.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EA70993608800F3E977 /* toaster_slots.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AAF158FC473002B5D1E /* toaster_wing.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EA90993608800F3E977 /* toaster_wing.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AB0158FC473002B5D1E /* topblock.c in Sources */ = {isa = PBXBuildFile; fileRef = AF998EF80A083E750051049D /* topblock.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AB1158FC47B002B5D1E /* tunnel_draw.c in Sources */ = {isa = PBXBuildFile; fileRef = AF083A58099312B000277BE9 /* tunnel_draw.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AB2158FC47B002B5D1E /* voronoi.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0DCA5F0C4CBB7300D76972 /* voronoi.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AB3158FC47B002B5D1E /* whale.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839AD09930C4900277BE9 /* whale.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AB4158FC53D002B5D1E /* abstractile.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFE6A4360CDD8026002805BF /* abstractile.xml */; }; AF918AB5158FC53D002B5D1E /* anemone.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258680988A468000655EE /* anemone.xml */; }; AF918AB6158FC53D002B5D1E /* anemotaxis.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258690988A468000655EE /* anemotaxis.xml */; }; AF918AB8158FC53D002B5D1E /* antinspect.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586B0988A468000655EE /* antinspect.xml */; }; AF918AB9158FC53D002B5D1E /* antmaze.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586C0988A468000655EE /* antmaze.xml */; }; AF918ABA158FC53D002B5D1E /* antspotlight.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586D0988A468000655EE /* antspotlight.xml */; }; AF918ABB158FC53D002B5D1E /* apollonian.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586E0988A468000655EE /* apollonian.xml */; }; AF918ABC158FC53D002B5D1E /* apple2.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586F0988A468000655EE /* apple2.xml */; }; AF918ABD158FC53D002B5D1E /* atlantis.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258700988A468000655EE /* atlantis.xml */; }; AF918ABE158FC53D002B5D1E /* attraction.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258710988A468000655EE /* attraction.xml */; }; AF918ABF158FC53D002B5D1E /* atunnel.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258720988A468000655EE /* atunnel.xml */; }; AF918AC0158FC53D002B5D1E /* barcode.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258730988A468000655EE /* barcode.xml */; }; AF918AC1158FC53D002B5D1E /* blaster.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258740988A468000655EE /* blaster.xml */; }; AF918AC2158FC53D002B5D1E /* blinkbox.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258750988A468000655EE /* blinkbox.xml */; }; AF918AC3158FC53D002B5D1E /* blitspin.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258760988A468000655EE /* blitspin.xml */; }; AF918AC4158FC53D002B5D1E /* blocktube.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258770988A468000655EE /* blocktube.xml */; }; AF918AC5158FC53D002B5D1E /* boing.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258780988A468000655EE /* boing.xml */; }; AF918AC6158FC53D002B5D1E /* bouboule.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258790988A468000655EE /* bouboule.xml */; }; AF918AC7158FC53D002B5D1E /* bouncingcow.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587A0988A468000655EE /* bouncingcow.xml */; }; AF918AC8158FC53D002B5D1E /* boxed.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587B0988A468000655EE /* boxed.xml */; }; AF918AC9158FC53D002B5D1E /* boxfit.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587C0988A468000655EE /* boxfit.xml */; }; AF918ACA158FC53D002B5D1E /* braid.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587D0988A468000655EE /* braid.xml */; }; AF918ACB158FC53D002B5D1E /* bsod.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587E0988A468000655EE /* bsod.xml */; }; AF918ACC158FC53D002B5D1E /* bubble3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587F0988A468000655EE /* bubble3d.xml */; }; AF918ACE158FC53D002B5D1E /* bumps.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258810988A468000655EE /* bumps.xml */; }; AF918ACF158FC53D002B5D1E /* cage.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258820988A468000655EE /* cage.xml */; }; AF918AD0158FC53D002B5D1E /* carousel.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258830988A468000655EE /* carousel.xml */; }; AF918AD1158FC53D002B5D1E /* ccurve.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258840988A468000655EE /* ccurve.xml */; }; AF918AD2158FC53D002B5D1E /* celtic.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258850988A468000655EE /* celtic.xml */; }; AF918AD3158FC53D002B5D1E /* circuit.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258860988A468000655EE /* circuit.xml */; }; AF918AD4158FC53D002B5D1E /* cloudlife.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258870988A468000655EE /* cloudlife.xml */; }; AF918AD5158FC53D002B5D1E /* companioncube.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF3581E61431D61D00E09C51 /* companioncube.xml */; }; AF918AD6158FC53D002B5D1E /* compass.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258880988A468000655EE /* compass.xml */; }; AF918AD7158FC53D002B5D1E /* coral.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258890988A468000655EE /* coral.xml */; }; AF918AD8158FC53D002B5D1E /* crackberg.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2588B0988A468000655EE /* crackberg.xml */; }; AF918ADA158FC53D002B5D1E /* crystal.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2588D0988A468000655EE /* crystal.xml */; }; AF918ADB158FC53D002B5D1E /* cube21.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2588E0988A468000655EE /* cube21.xml */; }; AF918ADC158FC53D002B5D1E /* cubenetic.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2588F0988A468000655EE /* cubenetic.xml */; }; AF918ADD158FC53D002B5D1E /* cubestorm.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258900988A468000655EE /* cubestorm.xml */; }; AF918ADE158FC53D002B5D1E /* cubicgrid.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF4FF4D30D52CCAA00666F98 /* cubicgrid.xml */; }; AF918ADF158FC53D002B5D1E /* cwaves.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFF4634B0C44046500EE6509 /* cwaves.xml */; }; AF918AE0158FC53D002B5D1E /* cynosure.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258910988A468000655EE /* cynosure.xml */; }; AF918AE1158FC53D002B5D1E /* dangerball.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258920988A468000655EE /* dangerball.xml */; }; AF918AE2158FC53D002B5D1E /* decayscreen.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258930988A468000655EE /* decayscreen.xml */; }; AF918AE3158FC53D002B5D1E /* deco.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258940988A468000655EE /* deco.xml */; }; AF918AE4158FC53D002B5D1E /* deluxe.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258950988A468000655EE /* deluxe.xml */; }; AF918AE5158FC53D002B5D1E /* demon.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258960988A468000655EE /* demon.xml */; }; AF918AE6158FC53D002B5D1E /* discrete.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258970988A468000655EE /* discrete.xml */; }; AF918AE7158FC53D002B5D1E /* distort.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258980988A468000655EE /* distort.xml */; }; AF918AE9158FC53D002B5D1E /* drift.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258990988A468000655EE /* drift.xml */; }; AF918AEA158FC53D002B5D1E /* endgame.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2589B0988A468000655EE /* endgame.xml */; }; AF918AEB158FC53D002B5D1E /* engine.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2589C0988A468000655EE /* engine.xml */; }; AF918AEC158FC53D002B5D1E /* epicycle.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2589D0988A468000655EE /* epicycle.xml */; }; AF918AED158FC53D002B5D1E /* eruption.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2589E0988A468000655EE /* eruption.xml */; }; AF918AEE158FC53D002B5D1E /* euler2d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2589F0988A468000655EE /* euler2d.xml */; }; AF918AF0158FC53D002B5D1E /* fadeplot.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A10988A468000655EE /* fadeplot.xml */; }; AF918AF1158FC53D002B5D1E /* fiberlamp.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A20988A468000655EE /* fiberlamp.xml */; }; AF918AF2158FC53D002B5D1E /* fireworkx.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A40988A468000655EE /* fireworkx.xml */; }; AF918AF4158FC53D002B5D1E /* flame.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A60988A468000655EE /* flame.xml */; }; AF918AF5158FC53D002B5D1E /* flipflop.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A70988A468000655EE /* flipflop.xml */; }; AF918AF6158FC53D002B5D1E /* flipscreen3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A80988A468000655EE /* flipscreen3d.xml */; }; AF918AF7158FC53D002B5D1E /* fliptext.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A90988A468000655EE /* fliptext.xml */; }; AF918AF8158FC53D002B5D1E /* flow.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258AA0988A468000655EE /* flow.xml */; }; AF918AF9158FC53D002B5D1E /* fluidballs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258AB0988A468000655EE /* fluidballs.xml */; }; AF918AFB158FC53D002B5D1E /* flyingtoasters.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258AD0988A468000655EE /* flyingtoasters.xml */; }; AF918AFC158FC53D002B5D1E /* fontglide.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258AE0988A468000655EE /* fontglide.xml */; }; AF918AFE158FC53D002B5D1E /* fuzzyflakes.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B00988A468000655EE /* fuzzyflakes.xml */; }; AF918AFF158FC53D002B5D1E /* galaxy.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B10988A468000655EE /* galaxy.xml */; }; AF918B00158FC53D002B5D1E /* gears.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B20988A468000655EE /* gears.xml */; }; AF918B01158FC53D002B5D1E /* gflux.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B30988A468000655EE /* gflux.xml */; }; AF918B02158FC53D002B5D1E /* glblur.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B40988A468000655EE /* glblur.xml */; }; AF918B03158FC53D002B5D1E /* glcells.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFF463730C440BAC00EE6509 /* glcells.xml */; }; AF918B04158FC53D002B5D1E /* gleidescope.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B50988A468000655EE /* gleidescope.xml */; }; AF918B06158FC53D002B5D1E /* glhanoi.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B70988A468000655EE /* glhanoi.xml */; }; AF918B07158FC53D002B5D1E /* glknots.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B80988A468000655EE /* glknots.xml */; }; AF918B08158FC53D002B5D1E /* glmatrix.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B90988A468000655EE /* glmatrix.xml */; }; AF918B09158FC53D002B5D1E /* glplanet.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258BA0988A468000655EE /* glplanet.xml */; }; AF918B0A158FC53D002B5D1E /* glschool.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF48E16B0A0C26A400F94CF9 /* glschool.xml */; }; AF918B0B158FC53D002B5D1E /* glslideshow.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258BB0988A468000655EE /* glslideshow.xml */; }; AF918B0C158FC53D002B5D1E /* glsnake.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258BC0988A468000655EE /* glsnake.xml */; }; AF918B0D158FC53D002B5D1E /* gltext.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258BD0988A468000655EE /* gltext.xml */; }; AF918B0E158FC53D002B5D1E /* goop.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258BF0988A468000655EE /* goop.xml */; }; AF918B0F158FC53D002B5D1E /* grav.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C00988A468000655EE /* grav.xml */; }; AF918B10158FC53D002B5D1E /* greynetic.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C10988A468000655EE /* greynetic.xml */; }; AF918B11158FC53D002B5D1E /* halftone.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C20988A468000655EE /* halftone.xml */; }; AF918B12158FC53D002B5D1E /* halo.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C30988A468000655EE /* halo.xml */; }; AF918B13158FC53D002B5D1E /* helix.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C40988A468000655EE /* helix.xml */; }; AF918B14158FC53D002B5D1E /* hilbert.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF78D18E142DD99A002AAF77 /* hilbert.xml */; }; AF918B15158FC53D002B5D1E /* hopalong.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C50988A468000655EE /* hopalong.xml */; }; AF918B18158FC53D002B5D1E /* hypertorus.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C80988A468000655EE /* hypertorus.xml */; }; AF918B19158FC53D002B5D1E /* hypnowheel.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF3C715F0D624C7C0030CC0D /* hypnowheel.xml */; }; AF918B1A158FC53D002B5D1E /* ifs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C90988A468000655EE /* ifs.xml */; }; AF918B1B158FC53D002B5D1E /* imsmap.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CA0988A468000655EE /* imsmap.xml */; }; AF918B1C158FC53D002B5D1E /* interaggregate.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CB0988A468000655EE /* interaggregate.xml */; }; AF918B1D158FC53D002B5D1E /* interference.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CC0988A468000655EE /* interference.xml */; }; AF918B1E158FC53D002B5D1E /* intermomentary.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CD0988A468000655EE /* intermomentary.xml */; }; AF918B1F158FC53D002B5D1E /* jigglypuff.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CE0988A468000655EE /* jigglypuff.xml */; }; AF918B22158FC53D002B5D1E /* juggler3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D10988A468000655EE /* juggler3d.xml */; }; AF918B23158FC53D002B5D1E /* julia.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D20988A468000655EE /* julia.xml */; }; AF918B24158FC53D002B5D1E /* kaleidescope.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D30988A468000655EE /* kaleidescope.xml */; }; AF918B25158FC53D002B5D1E /* klein.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D40988A468000655EE /* klein.xml */; }; AF918B26158FC53D002B5D1E /* kumppa.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D50988A468000655EE /* kumppa.xml */; }; AF918B27158FC53D002B5D1E /* lament.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D60988A468000655EE /* lament.xml */; }; AF918B29158FC53D002B5D1E /* lavalite.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D80988A468000655EE /* lavalite.xml */; }; AF918B30158FC53D002B5D1E /* loop.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258DD0988A468000655EE /* loop.xml */; }; AF918B31158FC53D002B5D1E /* m6502.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF0DCA370C4C74B700D76972 /* m6502.xml */; }; AF918B32158FC53D002B5D1E /* maze.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258DE0988A468000655EE /* maze.xml */; }; AF918B33158FC53D002B5D1E /* memscroller.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258DF0988A469000655EE /* memscroller.xml */; }; AF918B34158FC53D002B5D1E /* menger.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E00988A469000655EE /* menger.xml */; }; AF918B35158FC53D002B5D1E /* metaballs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E10988A469000655EE /* metaballs.xml */; }; AF918B36158FC53D002B5D1E /* mirrorblob.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E20988A469000655EE /* mirrorblob.xml */; }; AF918B38158FC53D002B5D1E /* moebius.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E40988A469000655EE /* moebius.xml */; }; AF918B39158FC53D002B5D1E /* moebiusgears.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFE6A40D0CDD7BDC002805BF /* moebiusgears.xml */; }; AF918B3A158FC53D002B5D1E /* moire.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E50988A469000655EE /* moire.xml */; }; AF918B3B158FC53D002B5D1E /* moire2.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E60988A469000655EE /* moire2.xml */; }; AF918B3C158FC53D002B5D1E /* molecule.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E70988A469000655EE /* molecule.xml */; }; AF918B3D158FC53D002B5D1E /* morph3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E80988A469000655EE /* morph3d.xml */; }; AF918B3E158FC53D002B5D1E /* mountain.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E90988A469000655EE /* mountain.xml */; }; AF918B3F158FC53D002B5D1E /* munch.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258EA0988A469000655EE /* munch.xml */; }; AF918B40158FC53D002B5D1E /* nerverot.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258EB0988A469000655EE /* nerverot.xml */; }; AF918B41158FC53D002B5D1E /* noof.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258EC0988A469000655EE /* noof.xml */; }; AF918B42158FC53D002B5D1E /* noseguy.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258ED0988A469000655EE /* noseguy.xml */; }; AF918B43158FC53D002B5D1E /* pacman.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258EE0988A469000655EE /* pacman.xml */; }; AF918B44158FC53D002B5D1E /* pedal.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258EF0988A469000655EE /* pedal.xml */; }; AF918B45158FC53D002B5D1E /* penetrate.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F00988A469000655EE /* penetrate.xml */; }; AF918B46158FC53D002B5D1E /* penrose.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F10988A469000655EE /* penrose.xml */; }; AF918B47158FC53D002B5D1E /* petri.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F20988A469000655EE /* petri.xml */; }; AF918B48158FC53E002B5D1E /* phosphor.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F30988A469000655EE /* phosphor.xml */; }; AF918B49158FC53E002B5D1E /* photopile.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFD51DB80F063BE700471C02 /* photopile.xml */; }; AF918B4A158FC53E002B5D1E /* piecewise.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F40988A469000655EE /* piecewise.xml */; }; AF918B4B158FC53E002B5D1E /* pinion.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F50988A469000655EE /* pinion.xml */; }; AF918B4C158FC53E002B5D1E /* pipes.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F60988A469000655EE /* pipes.xml */; }; AF918B4E158FC53E002B5D1E /* polyominoes.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F80988A469000655EE /* polyominoes.xml */; }; AF918B4F158FC53E002B5D1E /* polytopes.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F90988A469000655EE /* polytopes.xml */; }; AF918B50158FC53E002B5D1E /* pong.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FA0988A469000655EE /* pong.xml */; }; AF918B51158FC53E002B5D1E /* popsquares.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FB0988A469000655EE /* popsquares.xml */; }; AF918B52158FC53E002B5D1E /* providence.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FC0988A469000655EE /* providence.xml */; }; AF918B53158FC53E002B5D1E /* pulsar.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FD0988A469000655EE /* pulsar.xml */; }; AF918B54158FC53E002B5D1E /* pyro.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FE0988A469000655EE /* pyro.xml */; }; AF918B55158FC53E002B5D1E /* qix.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FF0988A469000655EE /* qix.xml */; }; AF918B56158FC53E002B5D1E /* queens.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259000988A469000655EE /* queens.xml */; }; AF918B57158FC53E002B5D1E /* rdbomb.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFCCCBAD09BFE4B000353F4D /* rdbomb.xml */; }; AF918B58158FC53E002B5D1E /* ripples.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259030988A469000655EE /* ripples.xml */; }; AF918B59158FC53E002B5D1E /* rocks.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259040988A469000655EE /* rocks.xml */; }; AF918B5A158FC53E002B5D1E /* rorschach.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259050988A469000655EE /* rorschach.xml */; }; AF918B5C158FC53E002B5D1E /* rotzoomer.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259070988A469000655EE /* rotzoomer.xml */; }; AF918B5D158FC53E002B5D1E /* rubik.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259080988A469000655EE /* rubik.xml */; }; AF918B5E158FC53E002B5D1E /* rubikblocks.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF32D9FC0F3AD1330080F535 /* rubikblocks.xml */; }; AF918B5F158FC53E002B5D1E /* sballs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259090988A469000655EE /* sballs.xml */; }; AF918B60158FC53E002B5D1E /* shadebobs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590A0988A469000655EE /* shadebobs.xml */; }; AF918B61158FC53E002B5D1E /* sierpinski.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590B0988A469000655EE /* sierpinski.xml */; }; AF918B62158FC53E002B5D1E /* sierpinski3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590C0988A469000655EE /* sierpinski3d.xml */; }; AF918B63158FC53E002B5D1E /* skytentacles.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFE2A4740E2E911200ADB298 /* skytentacles.xml */; }; AF918B64158FC53E002B5D1E /* slidescreen.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590D0988A469000655EE /* slidescreen.xml */; }; AF918B65158FC53E002B5D1E /* slip.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590E0988A469000655EE /* slip.xml */; }; AF918B66158FC53E002B5D1E /* sonar.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590F0988A469000655EE /* sonar.xml */; }; AF918B67158FC53E002B5D1E /* speedmine.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259100988A469000655EE /* speedmine.xml */; }; AF918B69158FC53E002B5D1E /* spheremonics.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259130988A469000655EE /* spheremonics.xml */; }; AF918B6B158FC53E002B5D1E /* spotlight.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259150988A469000655EE /* spotlight.xml */; }; AF918B6C158FC53E002B5D1E /* sproingies.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259160988A469000655EE /* sproingies.xml */; }; AF918B6D158FC53E002B5D1E /* squiral.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259170988A469000655EE /* squiral.xml */; }; AF918B6E158FC53E002B5D1E /* stairs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259190988A469000655EE /* stairs.xml */; }; AF918B6F158FC53E002B5D1E /* starfish.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591A0988A469000655EE /* starfish.xml */; }; AF918B70158FC53E002B5D1E /* starwars.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591B0988A469000655EE /* starwars.xml */; }; AF918B71158FC53E002B5D1E /* stonerview.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591C0988A469000655EE /* stonerview.xml */; }; AF918B72158FC53E002B5D1E /* strange.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591D0988A469000655EE /* strange.xml */; }; AF918B73158FC53E002B5D1E /* substrate.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591E0988A469000655EE /* substrate.xml */; }; AF918B74158FC53E002B5D1E /* superquadrics.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591F0988A469000655EE /* superquadrics.xml */; }; AF918B75158FC53E002B5D1E /* surfaces.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF4A3461102A59EB00A81B2A /* surfaces.xml */; }; AF918B76158FC53E002B5D1E /* swirl.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259200988A469000655EE /* swirl.xml */; }; AF918B78158FC53E002B5D1E /* tangram.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259220988A469000655EE /* tangram.xml */; }; AF918B79158FC53E002B5D1E /* thornbird.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259230988A469000655EE /* thornbird.xml */; }; AF918B7A158FC53E002B5D1E /* timetunnel.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259240988A469000655EE /* timetunnel.xml */; }; AF918B7B158FC53E002B5D1E /* topblock.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF998EFA0A083E8C0051049D /* topblock.xml */; }; AF918B7C158FC53E002B5D1E /* triangle.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259250988A469000655EE /* triangle.xml */; }; AF918B7D158FC53E002B5D1E /* tronbit.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF3582211433318500E09C51 /* tronbit.xml */; }; AF918B7E158FC53E002B5D1E /* truchet.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259260988A469000655EE /* truchet.xml */; }; AF918B7F158FC53E002B5D1E /* twang.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259270988A469000655EE /* twang.xml */; }; AF918B80158FC53E002B5D1E /* vermiculate.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259280988A469000655EE /* vermiculate.xml */; }; AF918B83158FC53E002B5D1E /* voronoi.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF0DCA610C4CBB8E00D76972 /* voronoi.xml */; }; AF918B84158FC53E002B5D1E /* wander.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2592B0988A469000655EE /* wander.xml */; }; AF918B86158FC53E002B5D1E /* whirlwindwarp.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2592D0988A469000655EE /* whirlwindwarp.xml */; }; AF918B89158FC53E002B5D1E /* wormhole.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259310988A469000655EE /* wormhole.xml */; }; AF918B8A158FC53E002B5D1E /* xanalogtv.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259320988A469000655EE /* xanalogtv.xml */; }; AF918B8B158FC53E002B5D1E /* xflame.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259370988A469000655EE /* xflame.xml */; }; AF918B8C158FC53E002B5D1E /* xjack.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259380988A469000655EE /* xjack.xml */; }; AF918B8D158FC53E002B5D1E /* xlyap.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259390988A469000655EE /* xlyap.xml */; }; AF918B8E158FC53E002B5D1E /* xmatrix.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2593A0988A469000655EE /* xmatrix.xml */; }; AF918B8F158FC53E002B5D1E /* xrayswarm.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2593D0988A469000655EE /* xrayswarm.xml */; }; AF918B90158FC53E002B5D1E /* xspirograph.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2593F0988A469000655EE /* xspirograph.xml */; }; AF918B91158FC554002B5D1E /* zoom.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259430988A469000655EE /* zoom.xml */; }; AF918B96158FD0EA002B5D1E /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF918B99158FF045002B5D1E /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF918B9A158FF04C002B5D1E /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF975734099C317000B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF97573F099C31BB00B05160 /* imsmap.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CA0988A468000655EE /* imsmap.xml */; }; AF975741099C31DD00B05160 /* imsmap.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975740099C31DD00B05160 /* imsmap.c */; }; AF97577B099C374A00B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975788099C378B00B05160 /* moire.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E50988A469000655EE /* moire.xml */; }; AF97578A099C37A500B05160 /* moire.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975789099C37A500B05160 /* moire.c */; }; AF9757C8099C3E6300B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9757D6099C3EB800B05160 /* rd-bomb.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9757D5099C3EB800B05160 /* rd-bomb.c */; }; AF97580E099C41D500B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF97581B099C423600B05160 /* xflame.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259370988A469000655EE /* xflame.xml */; }; AF975830099C427500B05160 /* xflame.c in Sources */ = {isa = PBXBuildFile; fileRef = AF97582F099C427500B05160 /* xflame.c */; }; AF97586B099C475900B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975879099C490500B05160 /* shadebobs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590A0988A469000655EE /* shadebobs.xml */; }; AF97587B099C492000B05160 /* shadebobs.c in Sources */ = {isa = PBXBuildFile; fileRef = AF97587A099C492000B05160 /* shadebobs.c */; }; AF975A3C099C681F00B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975A48099C688B00B05160 /* metaballs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E10988A469000655EE /* metaballs.xml */; }; AF975A4A099C689F00B05160 /* metaballs.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975A49099C689F00B05160 /* metaballs.c */; }; AF975A72099C6AB200B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975A82099C6B2700B05160 /* eruption.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2589E0988A468000655EE /* eruption.xml */; }; AF975A84099C6B4900B05160 /* eruption.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975A83099C6B4900B05160 /* eruption.c */; }; AF975A8C099C6BC300B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975A98099C6C2000B05160 /* barcode.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258730988A468000655EE /* barcode.xml */; }; AF975A9A099C6C3600B05160 /* barcode.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975A99099C6C3500B05160 /* barcode.c */; }; AF975ADD099C6EB100B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975AED099C6EFE00B05160 /* fireworkx.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A40988A468000655EE /* fireworkx.xml */; }; AF975AEF099C6F1700B05160 /* fireworkx.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975AEE099C6F1700B05160 /* fireworkx.c */; }; AF975B02099C6FE400B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975B15099C709E00B05160 /* memscroller.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975B14099C709E00B05160 /* memscroller.c */; }; AF975B16099C70B200B05160 /* memscroller.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258DF0988A469000655EE /* memscroller.xml */; }; AF975C18099C8C1500B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975C28099C8C6A00B05160 /* halo.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C30988A468000655EE /* halo.xml */; }; AF975C29099C8C7600B05160 /* halo.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480C29098E295D00FB32B8 /* halo.c */; }; AF975C44099C8DCF00B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975C55099C8E2800B05160 /* greynetic.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C10988A468000655EE /* greynetic.xml */; }; AF975C56099C8E3000B05160 /* greynetic.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480C21098E28EF00FB32B8 /* greynetic.c */; }; AF975C64099C8F3F00B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975C75099C8FAC00B05160 /* noseguy.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258ED0988A469000655EE /* noseguy.xml */; }; AF975C77099C8FC700B05160 /* noseguy.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975C76099C8FC700B05160 /* noseguy.c */; }; AF975C93099C929800B05160 /* xpm-pixmap.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975C91099C929800B05160 /* xpm-pixmap.c */; }; AF975C94099C929800B05160 /* xpm-pixmap.h in Headers */ = {isa = PBXBuildFile; fileRef = AF975C92099C929800B05160 /* xpm-pixmap.h */; }; AF975D59099CA0F000B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975D65099CA14B00B05160 /* rocks.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259040988A469000655EE /* rocks.xml */; }; AF975D67099CA16A00B05160 /* rocks.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975D66099CA16A00B05160 /* rocks.c */; }; AF976FCC0989CAD7001F8B92 /* deco.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC25B5E0988BA63000655EE /* deco.c */; }; AF976FCD0989CAEA001F8B92 /* deco.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258940988A468000655EE /* deco.xml */; }; AF9770420989D21A001F8B92 /* rorschach.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD620981E40800F7970E /* rorschach.c */; }; AF9770430989D226001F8B92 /* rorschach.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259050988A469000655EE /* rorschach.xml */; }; AF97707F0989D327001F8B92 /* attraction.c in Sources */ = {isa = PBXBuildFile; fileRef = AF976DFA09896BEB001F8B92 /* attraction.c */; }; AF9770800989D32E001F8B92 /* attraction.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258710988A468000655EE /* attraction.xml */; }; AF9771DF0989DC88001F8B92 /* SaverRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD400981E32E00F7970E /* SaverRunner.m */; }; AF9772C80989DCD5001F8B92 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; AF9772E30989DFC6001F8B92 /* SaverRunner.nib in Resources */ = {isa = PBXBuildFile; fileRef = AF9772E10989DFC6001F8B92 /* SaverRunner.nib */; }; AF998ED60A083A280051049D /* xscreensaver-text in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */; }; AF998EE10A083DB30051049D /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF998EF90A083E750051049D /* topblock.c in Sources */ = {isa = PBXBuildFile; fileRef = AF998EF80A083E750051049D /* topblock.c */; }; AF998EFB0A083E8C0051049D /* topblock.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF998EFA0A083E8C0051049D /* topblock.xml */; }; AF9CC7A1099580E70075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CC8EE09958D920075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAB509959CEF0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAB609959CF70075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAB709959D000075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAB809959D0D0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAB909959D100075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCABA09959D170075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCABB09959D1C0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCABC09959D200075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCABD09959D250075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCABE09959D290075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCABF09959D2E0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAC009959D310075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAC109959D380075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAC209959D3C0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAC309959D420075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAC409959D450075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAC509959D4B0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAC609959D500075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAC709959D550075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAC809959D5A0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAC909959D5D0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCACA09959D630075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCACB09959D680075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCACC09959D6B0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCACD09959D720075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCACE09959D750075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCACF09959D7C0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAD009959D800075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAD109959D850075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAD209959D8A0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAD309959D8F0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAD409959D980075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAD509959D9C0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAD609959DA30075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAD709959DA70075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAD809959DAE0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAD909959DB20075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCADA09959DB60075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCADB09959DBB0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCADC09959DC10075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCADD09959DC60075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCADE09959DCB0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCADF09959DCE0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAE009959DD50075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAE109959DDA0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAE209959DDF0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAE309959DE20075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAE409959DE60075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAE509959DEB0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAE609959DF00075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAE709959DF50075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAE809959DF90075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAE909959E000075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAEA09959E050075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAEB09959E090075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAEC09959E0D0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAED09959E140075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAEE09959E170075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAEF09959E1E0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAF009959E230075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAF109959E270075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D466D09B5109C006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D467909B5110B006E59CF /* decayscreen.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D467809B5110B006E59CF /* decayscreen.c */; }; AF9D467A09B51126006E59CF /* decayscreen.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258930988A468000655EE /* decayscreen.xml */; }; AF9D468F09B51567006E59CF /* osxgrabscreen.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9D468E09B51567006E59CF /* osxgrabscreen.m */; }; AF9D473809B52EE0006E59CF /* colorbars.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D473609B52EE0006E59CF /* colorbars.c */; }; AF9D473909B52EE0006E59CF /* colorbars.h in Headers */ = {isa = PBXBuildFile; fileRef = AF9D473709B52EE0006E59CF /* colorbars.h */; }; AF9D474A09B5300A006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D475609B5306A006E59CF /* slidescreen.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590D0988A469000655EE /* slidescreen.xml */; }; AF9D475909B53091006E59CF /* slidescreen.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D475809B53091006E59CF /* slidescreen.c */; }; AF9D476509B53166006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D48D309B53214006E59CF /* zoom.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259430988A469000655EE /* zoom.xml */; }; AF9D48D509B53229006E59CF /* zoom.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D48D409B53229006E59CF /* zoom.c */; }; AF9D48E109B53322006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D48ED09B5338A006E59CF /* bumps.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258810988A468000655EE /* bumps.xml */; }; AF9D48F009B533AE006E59CF /* bumps.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D48EE09B533AE006E59CF /* bumps.c */; }; AF9D48FA09B535DA006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D490609B536DE006E59CF /* distort.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258980988A468000655EE /* distort.xml */; }; AF9D490809B536F7006E59CF /* distort.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D490709B536F7006E59CF /* distort.c */; }; AF9D493109B53CBA006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D493D09B53D3B006E59CF /* ripples.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259030988A469000655EE /* ripples.xml */; }; AF9D493F09B53D55006E59CF /* ripples.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D493E09B53D55006E59CF /* ripples.c */; }; AF9D495A09B53FC9006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D496609B54087006E59CF /* rotzoomer.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259070988A469000655EE /* rotzoomer.xml */; }; AF9D496809B540A4006E59CF /* rotzoomer.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D496709B540A4006E59CF /* rotzoomer.c */; }; AF9D497209B5411D006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D497E09B541CE006E59CF /* twang.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259270988A469000655EE /* twang.xml */; }; AF9D498009B541E6006E59CF /* twang.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D497F09B541E5006E59CF /* twang.c */; }; AF9D499D09B544C2006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D49A909B5457B006E59CF /* spotlight.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259150988A469000655EE /* spotlight.xml */; }; AF9D49AB09B54596006E59CF /* spotlight.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D49AA09B54596006E59CF /* spotlight.c */; }; AF9D4C6F09B59F27006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D4C7B09B5A02D006E59CF /* xlyap.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259390988A469000655EE /* xlyap.xml */; }; AF9D4C7D09B5A044006E59CF /* xlyap.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4C7C09B5A044006E59CF /* xlyap.c */; }; AF9D4CED09B5AA8E006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D4CF909B5AC73006E59CF /* pong.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FA0988A469000655EE /* pong.xml */; }; AF9D4CFD09B5AC94006E59CF /* analogtv.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4CFA09B5AC94006E59CF /* analogtv.c */; }; AF9D4CFE09B5AC94006E59CF /* pong.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4CFC09B5AC94006E59CF /* pong.c */; }; AF9D4D8409B5B2DC006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D4D8509B5B2DC006E59CF /* analogtv.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4CFA09B5AC94006E59CF /* analogtv.c */; }; AF9D4D9109B5B42B006E59CF /* xanalogtv.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259320988A469000655EE /* xanalogtv.xml */; }; AF9D4D9309B5B444006E59CF /* xanalogtv.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4D9209B5B444006E59CF /* xanalogtv.c */; }; AF9D4DB509B5B71E006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D4DB609B5B71E006E59CF /* analogtv.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4CFA09B5AC94006E59CF /* analogtv.c */; }; AF9D4DC209B5B862006E59CF /* bsod.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587E0988A468000655EE /* bsod.xml */; }; AF9D4DC409B5B87D006E59CF /* bsod.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4DC309B5B87D006E59CF /* bsod.c */; }; AF9D4DD409B5B990006E59CF /* apple2.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4DD309B5B990006E59CF /* apple2.c */; }; AF9D4DF209B5BB19006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D4DF309B5BB19006E59CF /* analogtv.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4CFA09B5AC94006E59CF /* analogtv.c */; }; AF9D4DF509B5BB19006E59CF /* apple2.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4DD309B5B990006E59CF /* apple2.c */; }; AF9D4E0409B5BC85006E59CF /* apple2.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586F0988A468000655EE /* apple2.xml */; }; AF9D4E0609B5BC9D006E59CF /* apple2-main.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4E0509B5BC9D006E59CF /* apple2-main.c */; }; AF9D4E2209B63413006E59CF /* jwxyz-timers.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4E2109B63413006E59CF /* jwxyz-timers.m */; }; AF9E7EC9190F4C4000A8B01F /* enable_gc.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9E7EC8190F4C4000A8B01F /* enable_gc.c */; }; AFA339350B058505002B0E7D /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFA33BAF0B0585F7002B0E7D /* webcollage-cocoa.m in Sources */ = {isa = PBXBuildFile; fileRef = AFA33BAE0B0585F7002B0E7D /* webcollage-cocoa.m */; }; AFA33BB00B05860F002B0E7D /* webcollage.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2592C0988A469000655EE /* webcollage.xml */; }; AFA33BD10B0587EE002B0E7D /* webcollage-helper-cocoa.m in Sources */ = {isa = PBXBuildFile; fileRef = AFA33BD00B0587EE002B0E7D /* webcollage-helper-cocoa.m */; }; AFA33BDD0B058A30002B0E7D /* webcollage-helper in Resources */ = {isa = PBXBuildFile; fileRef = AFA33BC70B058740002B0E7D /* webcollage-helper */; }; AFA33C0C0B058ED2002B0E7D /* webcollage in Resources */ = {isa = PBXBuildFile; fileRef = AFA33C0A0B058E6B002B0E7D /* webcollage */; }; AFA55866099324D800F3E977 /* minixpm.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55864099324D800F3E977 /* minixpm.c */; }; AFA55867099324D800F3E977 /* minixpm.h in Headers */ = {isa = PBXBuildFile; fileRef = AFA55865099324D800F3E977 /* minixpm.h */; }; AFA5595C099330E500F3E977 /* cage.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258820988A468000655EE /* cage.xml */; }; AFA5595E0993310500F3E977 /* cage.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5595D0993310500F3E977 /* cage.c */; }; AFA55981099331AC00F3E977 /* moebius.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E40988A469000655EE /* moebius.xml */; }; AFA55983099331C300F3E977 /* moebius.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55982099331C300F3E977 /* moebius.c */; }; AFA559A70993325200F3E977 /* superquadrics.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591F0988A469000655EE /* superquadrics.xml */; }; AFA559A90993326300F3E977 /* superquadrics.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA559A80993326300F3E977 /* superquadrics.c */; }; AFA559CB099332CF00F3E977 /* morph3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E80988A469000655EE /* morph3d.xml */; }; AFA559CD099332E800F3E977 /* morph3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA559CC099332E800F3E977 /* morph3d.c */; }; AFA559E90993333D00F3E977 /* rubik.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259080988A469000655EE /* rubik.xml */; }; AFA559EB0993335C00F3E977 /* rubik.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA559EA0993335C00F3E977 /* rubik.c */; }; AFA55A190993344100F3E977 /* stairs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259190988A469000655EE /* stairs.xml */; }; AFA55A1B0993345900F3E977 /* stairs.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A1A0993345900F3E977 /* stairs.c */; }; AFA55A34099334CB00F3E977 /* sproingies.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259160988A469000655EE /* sproingies.xml */; }; AFA55A4A0993351F00F3E977 /* s1_1.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A400993351F00F3E977 /* s1_1.c */; }; AFA55A4B0993351F00F3E977 /* s1_2.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A410993351F00F3E977 /* s1_2.c */; }; AFA55A4C0993351F00F3E977 /* s1_3.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A420993351F00F3E977 /* s1_3.c */; }; AFA55A4D0993351F00F3E977 /* s1_4.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A430993351F00F3E977 /* s1_4.c */; }; AFA55A4E0993351F00F3E977 /* s1_5.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A440993351F00F3E977 /* s1_5.c */; }; AFA55A4F0993351F00F3E977 /* s1_6.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A450993351F00F3E977 /* s1_6.c */; }; AFA55A500993351F00F3E977 /* s1_b.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A460993351F00F3E977 /* s1_b.c */; }; AFA55A510993351F00F3E977 /* sproingies.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A470993351F00F3E977 /* sproingies.c */; }; AFA55A520993351F00F3E977 /* sproingiewrap.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A480993351F00F3E977 /* sproingiewrap.c */; }; AFA55A530993353500F3E977 /* gllist.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A3E0993351F00F3E977 /* gllist.c */; }; AFA55A540993353500F3E977 /* gllist.h in Headers */ = {isa = PBXBuildFile; fileRef = AFA55A3F0993351F00F3E977 /* gllist.h */; }; AFA55A8D0993366F00F3E977 /* lament.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D60988A468000655EE /* lament.xml */; }; AFA55A8F0993369100F3E977 /* lament.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A8E0993369100F3E977 /* lament.c */; }; AFA55A95099336D800F3E977 /* normals.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A93099336D800F3E977 /* normals.c */; }; AFA55A96099336D800F3E977 /* normals.h in Headers */ = {isa = PBXBuildFile; fileRef = AFA55A94099336D800F3E977 /* normals.h */; }; AFA55AE309933D1C00F3E977 /* bubble3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587F0988A468000655EE /* bubble3d.xml */; }; AFA55AE509933D3800F3E977 /* bubble3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55AE409933D3800F3E977 /* bubble3d.c */; }; AFA55AF709933DBF00F3E977 /* b_draw.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55AF409933DBF00F3E977 /* b_draw.c */; }; AFA55AF809933DBF00F3E977 /* b_lockglue.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55AF509933DBF00F3E977 /* b_lockglue.c */; }; AFA55AF909933DBF00F3E977 /* b_sphere.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55AF609933DBF00F3E977 /* b_sphere.c */; }; AFA55B2009933E3100F3E977 /* glplanet.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258BA0988A468000655EE /* glplanet.xml */; }; AFA55B2209933E4A00F3E977 /* glplanet.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55B2109933E4A00F3E977 /* glplanet.c */; }; AFA55B3909933EB400F3E977 /* pulsar.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FD0988A469000655EE /* pulsar.xml */; }; AFA55B4509933EF800F3E977 /* pulsar.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55B3F09933EC600F3E977 /* pulsar.c */; }; AFA55B8D09933FAA00F3E977 /* sierpinski3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590C0988A469000655EE /* sierpinski3d.xml */; }; AFA55B8F09933FBF00F3E977 /* sierpinski3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55B8E09933FBF00F3E977 /* sierpinski3d.c */; }; AFA55BA50993400200F3E977 /* gflux.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B30988A468000655EE /* gflux.xml */; }; AFA55BA70993401A00F3E977 /* gflux.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55BA60993401A00F3E977 /* gflux.c */; }; AFA55BBF0993410100F3E977 /* circuit.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258860988A468000655EE /* circuit.xml */; }; AFA55BC10993416E00F3E977 /* circuit.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55BC00993416E00F3E977 /* circuit.c */; }; AFA55BF8099342BF00F3E977 /* menger.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E00988A469000655EE /* menger.xml */; }; AFA55BFA099342D500F3E977 /* menger.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55BF9099342D500F3E977 /* menger.c */; }; AFA55C220993433D00F3E977 /* engine.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2589C0988A468000655EE /* engine.xml */; }; AFA55C240993435300F3E977 /* engine.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55C230993435300F3E977 /* engine.c */; }; AFA55C8B099349CC00F3E977 /* glsnake.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258BC0988A468000655EE /* glsnake.xml */; }; AFA55C8D099349EE00F3E977 /* glsnake.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55C8C099349EE00F3E977 /* glsnake.c */; }; AFA55CBD09934BDD00F3E977 /* boxed.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587B0988A468000655EE /* boxed.xml */; }; AFA55CC009934C0900F3E977 /* boxed.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55CBE09934C0900F3E977 /* boxed.c */; }; AFA55CE009934D1500F3E977 /* glforestfire.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B60988A468000655EE /* glforestfire.xml */; }; AFA55CE209934D2E00F3E977 /* glforestfire.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55CE109934D2E00F3E977 /* glforestfire.c */; }; AFA55D500993568200F3E977 /* sballs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259090988A469000655EE /* sballs.xml */; }; AFA55D520993569C00F3E977 /* sballs.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55D510993569C00F3E977 /* sballs.c */; }; AFA55D760993587600F3E977 /* cubenetic.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2588F0988A468000655EE /* cubenetic.xml */; }; AFA55D780993589300F3E977 /* cubenetic.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55D770993589300F3E977 /* cubenetic.c */; }; AFA55D93099358FB00F3E977 /* spheremonics.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259130988A469000655EE /* spheremonics.xml */; }; AFA55D950993590F00F3E977 /* spheremonics.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55D940993590F00F3E977 /* spheremonics.c */; }; AFA55DDC09935D9D00F3E977 /* lavalite.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D80988A468000655EE /* lavalite.xml */; }; AFA55DDE09935DB600F3E977 /* lavalite.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55DDD09935DB600F3E977 /* lavalite.c */; }; AFA55DE309935DFB00F3E977 /* marching.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55DE109935DFB00F3E977 /* marching.c */; }; AFA55E0509935E7E00F3E977 /* queens.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259000988A469000655EE /* queens.xml */; }; AFA55E0709935EB800F3E977 /* queens.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E0609935EB800F3E977 /* queens.c */; }; AFA55E2109935F0B00F3E977 /* endgame.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2589B0988A468000655EE /* endgame.xml */; }; AFA55E2609935F2B00F3E977 /* chessmodels.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E2309935F2B00F3E977 /* chessmodels.c */; }; AFA55E2709935F2B00F3E977 /* endgame.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E2509935F2B00F3E977 /* endgame.c */; }; AFA55E4409935FBA00F3E977 /* glblur.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B40988A468000655EE /* glblur.xml */; }; AFA55E4609935FD300F3E977 /* glblur.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E4509935FD300F3E977 /* glblur.c */; }; AFA55E970993602F00F3E977 /* flyingtoasters.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258AD0988A468000655EE /* flyingtoasters.xml */; }; AFA55EAD0993608800F3E977 /* flyingtoasters.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E980993608800F3E977 /* flyingtoasters.c */; }; AFA55EAE0993608800F3E977 /* toast.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E990993608800F3E977 /* toast.c */; }; AFA55EB00993608800F3E977 /* toast2.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E9B0993608800F3E977 /* toast2.c */; }; AFA55EB20993608800F3E977 /* toaster_base.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E9D0993608800F3E977 /* toaster_base.c */; }; AFA55EB40993608800F3E977 /* toaster_handle.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E9F0993608800F3E977 /* toaster_handle.c */; }; AFA55EB60993608800F3E977 /* toaster_handle2.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EA10993608800F3E977 /* toaster_handle2.c */; }; AFA55EB80993608800F3E977 /* toaster_jet.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EA30993608800F3E977 /* toaster_jet.c */; }; AFA55EBA0993608800F3E977 /* toaster_knob.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EA50993608800F3E977 /* toaster_knob.c */; }; AFA55EBC0993608800F3E977 /* toaster_slots.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EA70993608800F3E977 /* toaster_slots.c */; }; AFA55EBE0993608800F3E977 /* toaster_wing.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EA90993608800F3E977 /* toaster_wing.c */; }; AFA55EC00993608800F3E977 /* toaster.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EAB0993608800F3E977 /* toaster.c */; }; AFA55EE50993610F00F3E977 /* bouncingcow.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587A0988A468000655EE /* bouncingcow.xml */; }; AFA55EEE0993613E00F3E977 /* bouncingcow.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EE70993613E00F3E977 /* bouncingcow.c */; }; AFA55EEF0993613E00F3E977 /* cow_face.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EE80993613E00F3E977 /* cow_face.c */; }; AFA55EF00993613E00F3E977 /* cow_hide.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EE90993613E00F3E977 /* cow_hide.c */; }; AFA55EF10993613E00F3E977 /* cow_hoofs.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EEA0993613E00F3E977 /* cow_hoofs.c */; }; AFA55EF20993613E00F3E977 /* cow_horns.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EEB0993613E00F3E977 /* cow_horns.c */; }; AFA55EF30993613E00F3E977 /* cow_tail.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EEC0993613E00F3E977 /* cow_tail.c */; }; AFA55EF40993613E00F3E977 /* cow_udder.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EED0993613E00F3E977 /* cow_udder.c */; }; AFA55F20099361E800F3E977 /* jigglypuff.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CE0988A468000655EE /* jigglypuff.xml */; }; AFA55F220993620200F3E977 /* jigglypuff.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55F210993620200F3E977 /* jigglypuff.c */; }; AFA55F3E0993625B00F3E977 /* klein.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D40988A468000655EE /* klein.xml */; }; AFA55F400993626E00F3E977 /* klein.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55F3F0993626E00F3E977 /* klein.c */; }; AFA55F57099362C500F3E977 /* hypertorus.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C80988A468000655EE /* hypertorus.xml */; }; AFA55F5A099362DF00F3E977 /* hypertorus.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55F59099362DF00F3E977 /* hypertorus.c */; }; AFA55F860993646900F3E977 /* glmatrix.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B90988A468000655EE /* glmatrix.xml */; }; AFA55F880993648500F3E977 /* glmatrix.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55F870993648500F3E977 /* glmatrix.c */; }; AFA55FF209936C2F00F3E977 /* cubestorm.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258900988A468000655EE /* cubestorm.xml */; }; AFA55FF409936C4500F3E977 /* cubestorm.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55FF309936C4500F3E977 /* cubestorm.c */; }; AFA5600D09936C9D00F3E977 /* glknots.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B80988A468000655EE /* glknots.xml */; }; AFA5600F09936CB300F3E977 /* glknots.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5600E09936CB300F3E977 /* glknots.c */; }; AFA5602809936CF700F3E977 /* blocktube.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258770988A468000655EE /* blocktube.xml */; }; AFA5602A09936D0700F3E977 /* blocktube.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5602909936D0700F3E977 /* blocktube.c */; }; AFA5604609936DAB00F3E977 /* flipflop.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A70988A468000655EE /* flipflop.xml */; }; AFA5604809936DCC00F3E977 /* flipflop.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5604709936DCC00F3E977 /* flipflop.c */; }; AFA5607B09936FDD00F3E977 /* antspotlight.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5607809936FDD00F3E977 /* antspotlight.c */; }; AFA5608109936FFA00F3E977 /* antinspect.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5605F09936E9C00F3E977 /* antinspect.c */; }; AFA560820993700500F3E977 /* antinspect.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586B0988A468000655EE /* antinspect.xml */; }; AFA560830993700900F3E977 /* antspotlight.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586D0988A468000655EE /* antspotlight.xml */; }; AFA560C2099371BE00F3E977 /* polytopes.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F90988A469000655EE /* polytopes.xml */; }; AFA560C4099371D500F3E977 /* polytopes.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA560C3099371D500F3E977 /* polytopes.c */; }; AFA561110993784D00F3E977 /* molecule.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E70988A469000655EE /* molecule.xml */; }; AFA561130993786800F3E977 /* molecule.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA561120993786800F3E977 /* molecule.c */; }; AFA5616C09937C6800F3E977 /* blinkbox.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258750988A468000655EE /* blinkbox.xml */; }; AFA5616E09937C9A00F3E977 /* blinkbox.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5616D09937C9A00F3E977 /* blinkbox.c */; }; AFA5618F09937D2100F3E977 /* noof.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258EC0988A469000655EE /* noof.xml */; }; AFA5619109937D3600F3E977 /* noof.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5619009937D3600F3E977 /* noof.c */; }; AFA561B109937DB400F3E977 /* polyhedra.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F70988A469000655EE /* polyhedra.xml */; }; AFA561B509937DCC00F3E977 /* polyhedra-gl.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA561B209937DCB00F3E977 /* polyhedra-gl.c */; }; AFA561B609937DCC00F3E977 /* polyhedra.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA561B309937DCC00F3E977 /* polyhedra.c */; }; AFA5621B099384DA00F3E977 /* providence.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FC0988A469000655EE /* providence.xml */; }; AFA5621D099384F600F3E977 /* providence.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5621C099384F600F3E977 /* providence.c */; }; AFA562330993855500F3E977 /* pinion.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F50988A469000655EE /* pinion.xml */; }; AFA562350993856A00F3E977 /* pinion.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA562340993856A00F3E977 /* pinion.c */; }; AFA562D3099392F900F3E977 /* boing.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258780988A468000655EE /* boing.xml */; }; AFA562D50993930C00F3E977 /* boing.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA562D40993930C00F3E977 /* boing.c */; }; AFA562EE0993940400F3E977 /* antmaze.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586C0988A468000655EE /* antmaze.xml */; }; AFA562F00993941600F3E977 /* antmaze.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA562EF0993941600F3E977 /* antmaze.c */; }; AFA563060993947300F3E977 /* tangram.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259220988A469000655EE /* tangram.xml */; }; AFA5630A0993948F00F3E977 /* tangram_shapes.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563070993948F00F3E977 /* tangram_shapes.c */; }; AFA5630B0993948F00F3E977 /* tangram.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563090993948F00F3E977 /* tangram.c */; }; AFA563280993955000F3E977 /* crackberg.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2588B0988A468000655EE /* crackberg.xml */; }; AFA5632A0993957100F3E977 /* crackberg.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563290993957100F3E977 /* crackberg.c */; }; AFA563740993977100F3E977 /* glhanoi.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B70988A468000655EE /* glhanoi.xml */; }; AFA563750993977D00F3E977 /* glhanoi.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563460993963400F3E977 /* glhanoi.c */; }; AFA563760993978D00F3E977 /* cube21.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563660993970F00F3E977 /* cube21.c */; }; AFA563770993979A00F3E977 /* cube21.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2588E0988A468000655EE /* cube21.xml */; }; AFA5638D099397ED00F3E977 /* timetunnel.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259240988A469000655EE /* timetunnel.xml */; }; AFA5638F0993980D00F3E977 /* timetunnel.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5638E0993980D00F3E977 /* timetunnel.c */; }; AFA563B8099398F700F3E977 /* juggler3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D10988A468000655EE /* juggler3d.xml */; }; AFA563BA0993991300F3E977 /* juggler3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563B90993991300F3E977 /* juggler3d.c */; }; AFAA6B2D1773870700DE720C /* apple2-main.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4E0509B5BC9D006E59CF /* apple2-main.c */; }; AFAA6B2E1773870700DE720C /* apple2.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4DD309B5B990006E59CF /* apple2.c */; }; AFAA6B2F1773871900DE720C /* analogtv.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4CFA09B5AC94006E59CF /* analogtv.c */; }; AFAA6B301773876900DE720C /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3A1590054B003974F3 /* OpenGLES.framework */; }; AFAA6B311773876E00DE720C /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3815900514003974F3 /* UIKit.framework */; }; AFAA6B321773877300DE720C /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF561DF715969C5B007CA5ED /* AssetsLibrary.framework */; }; AFAA6B331773877800DE720C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3C15900558003974F3 /* Foundation.framework */; }; AFAA6B341773877C00DE720C /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3E1590056A003974F3 /* CoreGraphics.framework */; }; AFAA6B351773878000DE720C /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF0FAF3B159BAC7B00BCE2F7 /* CoreText.framework */; }; AFAA6B361773878400DE720C /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3F1590056A003974F3 /* QuartzCore.framework */; }; AFAA6B3B1773926C00DE720C /* phosphor.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77770309B63B5F00EA3033 /* phosphor.c */; }; AFAA6B3D177392DD00DE720C /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3A1590054B003974F3 /* OpenGLES.framework */; }; AFAA6B3E177392E000DE720C /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3815900514003974F3 /* UIKit.framework */; }; AFAA6B3F177392E400DE720C /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF561DF715969C5B007CA5ED /* AssetsLibrary.framework */; }; AFAA6B40177392E800DE720C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3C15900558003974F3 /* Foundation.framework */; }; AFAA6B41177392EC00DE720C /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3E1590056A003974F3 /* CoreGraphics.framework */; }; AFAA6B42177392F000DE720C /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF0FAF3B159BAC7B00BCE2F7 /* CoreText.framework */; }; AFAA6B43177392F600DE720C /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3F1590056A003974F3 /* QuartzCore.framework */; }; AFAA6B451773F07800DE720C /* ios-function-table.m in Sources */ = {isa = PBXBuildFile; fileRef = AFAA6B441773F07700DE720C /* ios-function-table.m */; }; AFAA6B461773F30500DE720C /* ios-function-table.m in Sources */ = {isa = PBXBuildFile; fileRef = AFAA6B441773F07700DE720C /* ios-function-table.m */; }; AFAA6B471773F35600DE720C /* ios-function-table.m in Sources */ = {isa = PBXBuildFile; fileRef = AFAA6B441773F07700DE720C /* ios-function-table.m */; }; AFAD462309D5F4DA00AB5F95 /* grabclient.c in Sources */ = {isa = PBXBuildFile; fileRef = AFAD462209D5F4DA00AB5F95 /* grabclient.c */; }; AFB591AE178B812C00EA4005 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFB591B0178B812C00EA4005 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFB591B1178B812C00EA4005 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFB591B2178B812C00EA4005 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFB591B3178B812C00EA4005 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFB591B4178B812C00EA4005 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFB591BE178B81E600EA4005 /* hexadrop.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFB591BC178B81E600EA4005 /* hexadrop.xml */; }; AFB591BF178B81E600EA4005 /* hexadrop.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFB591BC178B81E600EA4005 /* hexadrop.xml */; }; AFB591C0178B81E600EA4005 /* hexadrop.c in Sources */ = {isa = PBXBuildFile; fileRef = AFB591BD178B81E600EA4005 /* hexadrop.c */; }; AFB591C1178B81E600EA4005 /* hexadrop.c in Sources */ = {isa = PBXBuildFile; fileRef = AFB591BD178B81E600EA4005 /* hexadrop.c */; }; AFB8A69B1782BA34004EDB85 /* kaleidocycle.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFB8A69A1782BA34004EDB85 /* kaleidocycle.xml */; }; AFB8A69C1782BF6C004EDB85 /* kaleidocycle.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFB8A69A1782BA34004EDB85 /* kaleidocycle.xml */; }; AFB8A69D1782BFA6004EDB85 /* kaleidocycle.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7511141782B64300380EA1 /* kaleidocycle.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFBE744019A7C6930018AA35 /* robot.c in Sources */ = {isa = PBXBuildFile; fileRef = AFBE743F19A7C6930018AA35 /* robot.c */; }; AFBE744119A7C6EF0018AA35 /* robot.c in Sources */ = {isa = PBXBuildFile; fileRef = AFBE743F19A7C6930018AA35 /* robot.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFBF893E0E41D930006A2D66 /* fps.c in Sources */ = {isa = PBXBuildFile; fileRef = AFBF893C0E41D930006A2D66 /* fps.c */; }; AFBF893F0E41D930006A2D66 /* fps.h in Headers */ = {isa = PBXBuildFile; fileRef = AFBF893D0E41D930006A2D66 /* fps.h */; }; AFBF89AF0E423FC3006A2D66 /* fps-gl.c in Sources */ = {isa = PBXBuildFile; fileRef = AFBF89AE0E423FC3006A2D66 /* fps-gl.c */; }; AFBF89B20E424036006A2D66 /* fpsI.h in Headers */ = {isa = PBXBuildFile; fileRef = AFBF89B10E424036006A2D66 /* fpsI.h */; }; AFBFE74F178642DC00432B21 /* SaverRunner.nib in Resources */ = {isa = PBXBuildFile; fileRef = AF9772E10989DFC6001F8B92 /* SaverRunner.nib */; }; AFBFE750178642DC00432B21 /* SaverRunner.icns in Resources */ = {isa = PBXBuildFile; fileRef = AF2D522513E954A0002AA818 /* SaverRunner.icns */; }; AFBFE752178642DC00432B21 /* SaverRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD400981E32E00F7970E /* SaverRunner.m */; }; AFBFE753178642DC00432B21 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; AFBFE754178642DC00432B21 /* SaverListController.m in Sources */ = {isa = PBXBuildFile; fileRef = AF84AF1E15829AF000607E4C /* SaverListController.m */; }; AFBFE756178642DC00432B21 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFBFE757178642DC00432B21 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFBFE758178642DC00432B21 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFBFE759178642DC00432B21 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFBFE765178643B200432B21 /* Apple2.saver in Resources */ = {isa = PBXBuildFile; fileRef = AF9D4DFE09B5BB19006E59CF /* Apple2.saver */; }; AFBFE76F178647FE00432B21 /* SaverRunner.nib in Resources */ = {isa = PBXBuildFile; fileRef = AF9772E10989DFC6001F8B92 /* SaverRunner.nib */; }; AFBFE770178647FE00432B21 /* SaverRunner.icns in Resources */ = {isa = PBXBuildFile; fileRef = AF2D522513E954A0002AA818 /* SaverRunner.icns */; }; AFBFE772178647FE00432B21 /* SaverRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD400981E32E00F7970E /* SaverRunner.m */; }; AFBFE773178647FE00432B21 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; AFBFE774178647FE00432B21 /* SaverListController.m in Sources */ = {isa = PBXBuildFile; fileRef = AF84AF1E15829AF000607E4C /* SaverListController.m */; }; AFBFE776178647FE00432B21 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFBFE777178647FE00432B21 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFBFE778178647FE00432B21 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFBFE779178647FE00432B21 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFBFE7831786483B00432B21 /* Phosphor.saver in Resources */ = {isa = PBXBuildFile; fileRef = AF7776F609B63ABF00EA3033 /* Phosphor.saver */; }; AFBFE78B17895CD000432B21 /* apple2.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586F0988A468000655EE /* apple2.xml */; }; AFC211950E4E30C800D87B6E /* teapot.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC211930E4E30C800D87B6E /* teapot.c */; }; AFC7592D158D8E8B00C5458E /* textclient.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC7592B158D8E8B00C5458E /* textclient.c */; }; AFC7592E158D8E8B00C5458E /* textclient.h in Headers */ = {isa = PBXBuildFile; fileRef = AFC7592C158D8E8B00C5458E /* textclient.h */; }; AFC75930158D9A7A00C5458E /* iostextclient.m in Sources */ = {isa = PBXBuildFile; fileRef = AFC7592F158D9A7A00C5458E /* iostextclient.m */; }; AFCCCBB009BFE4B000353F4D /* rdbomb.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFCCCBAD09BFE4B000353F4D /* rdbomb.xml */; }; AFCCCBB309BFE51900353F4D /* thornbird.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259230988A469000655EE /* thornbird.xml */; }; AFCF453715986A2100E6E8CC /* dnalogo.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77787609B653DC00EA3033 /* dnalogo.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; 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"; }; }; AFCF4546159878C300E6E8CC /* polyhedra.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA561B309937DCC00F3E977 /* polyhedra.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFCF4547159878D500E6E8CC /* polyhedra.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F70988A469000655EE /* polyhedra.xml */; }; AFCF509C198A1861005B0DB1 /* involute.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A16A0CDD78EA002805BF /* involute.c */; }; AFCF509D198C3612005B0DB1 /* xscreensaver-text in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */; }; AFCF83421AF5B515008BB7E1 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFCF83441AF5B515008BB7E1 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFCF83451AF5B515008BB7E1 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFCF83461AF5B515008BB7E1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFCF83471AF5B515008BB7E1 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFCF83481AF5B515008BB7E1 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFCF83491AF5B515008BB7E1 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; AFCF834A1AF5B515008BB7E1 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AFCF83551AF5B5FD008BB7E1 /* splitflap.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFCF83521AF5B5FD008BB7E1 /* splitflap.xml */; }; AFCF83561AF5B5FD008BB7E1 /* splitflap.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFCF83521AF5B5FD008BB7E1 /* splitflap.xml */; }; AFCF83571AF5B5FD008BB7E1 /* splitflap_obj.c in Sources */ = {isa = PBXBuildFile; fileRef = AFCF83531AF5B5FD008BB7E1 /* splitflap_obj.c */; }; AFCF83581AF5B5FD008BB7E1 /* splitflap_obj.c in Sources */ = {isa = PBXBuildFile; fileRef = AFCF83531AF5B5FD008BB7E1 /* splitflap_obj.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFCF83591AF5B5FD008BB7E1 /* splitflap.c in Sources */ = {isa = PBXBuildFile; fileRef = AFCF83541AF5B5FD008BB7E1 /* splitflap.c */; }; AFCF835A1AF5B5FD008BB7E1 /* splitflap.c in Sources */ = {isa = PBXBuildFile; fileRef = AFCF83541AF5B5FD008BB7E1 /* splitflap.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFCFF1D90CE4517C00C7D111 /* involute.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A16A0CDD78EA002805BF /* involute.c */; }; AFCFF1DA0CE4518B00C7D111 /* tube.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480ED2098F652A00FB32B8 /* tube.c */; }; AFCFF1DB0CE451A300C7D111 /* normals.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A93099336D800F3E977 /* normals.c */; }; AFD51B200F063B4A00471C02 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AFD51B220F063B4A00471C02 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD51DB70F063BCE00471C02 /* photopile.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD51DB60F063BCE00471C02 /* photopile.c */; }; AFD51DB90F063BE700471C02 /* photopile.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFD51DB80F063BE700471C02 /* photopile.xml */; }; AFD56DF80996A03800BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56E090996A07A00BA26F7 /* gltext.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56E080996A07A00BA26F7 /* gltext.c */; }; AFD56E9F0996A23800BA26F7 /* gltext.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258BD0988A468000655EE /* gltext.xml */; }; AFD56EB50996A72600BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56EE00996A95700BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56EEE0996A99E00BA26F7 /* forest.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56EED0996A99E00BA26F7 /* forest.c */; }; AFD56F110996AAFA00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56F1D0996AB1D00BA26F7 /* forest.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258AF0988A468000655EE /* forest.xml */; }; AFD56F1E0996AB4000BA26F7 /* vines.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2592A0988A469000655EE /* vines.xml */; }; AFD56F200996AB5A00BA26F7 /* vines.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56F1F0996AB5A00BA26F7 /* vines.c */; }; AFD56F290996AB8A00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56F350996ABB300BA26F7 /* galaxy.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B10988A468000655EE /* galaxy.xml */; }; AFD56F370996ABD200BA26F7 /* galaxy.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56F360996ABD200BA26F7 /* galaxy.c */; }; AFD56F550996AEEE00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56F610996AF1500BA26F7 /* grav.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C00988A468000655EE /* grav.xml */; }; AFD56F630996AF2D00BA26F7 /* grav.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56F620996AF2D00BA26F7 /* grav.c */; }; AFD56F710996B01600BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56F870996B04D00BA26F7 /* hopalong.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C50988A468000655EE /* hopalong.xml */; }; AFD56F890996B06600BA26F7 /* hopalong.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56F880996B06600BA26F7 /* hopalong.c */; }; AFD56F920996B09400BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56F9F0996B0D000BA26F7 /* laser.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D70988A468000655EE /* laser.xml */; }; AFD56FA10996B0E500BA26F7 /* laser.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56FA00996B0E500BA26F7 /* laser.c */; }; AFD56FA90996B10F00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56FB50996B15000BA26F7 /* lightning.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D90988A468000655EE /* lightning.xml */; }; AFD56FB70996B16300BA26F7 /* lightning.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56FB60996B16300BA26F7 /* lightning.c */; }; AFD56FBF0996B18F00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56FCB0996B1BE00BA26F7 /* lisa.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258DA0988A468000655EE /* lisa.xml */; }; AFD56FCD0996B1D600BA26F7 /* lisa.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56FCC0996B1D600BA26F7 /* lisa.c */; }; AFD56FD50996B20900BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56FE10996B24B00BA26F7 /* lissie.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258DB0988A468000655EE /* lissie.xml */; }; AFD56FE30996B26200BA26F7 /* lissie.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56FE20996B26200BA26F7 /* lissie.c */; }; AFD56FFE0996B43800BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD5700B0996B47E00BA26F7 /* penrose.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F10988A469000655EE /* penrose.xml */; }; AFD5700D0996B49D00BA26F7 /* penrose.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5700C0996B49D00BA26F7 /* penrose.c */; }; AFD570150996B4CC00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD570210996B51100BA26F7 /* sierpinski.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590B0988A469000655EE /* sierpinski.xml */; }; AFD570230996B52700BA26F7 /* sierpinski.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD570220996B52700BA26F7 /* sierpinski.c */; }; AFD5702C0996B56D00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD5703A0996B5D000BA26F7 /* sphere.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259110988A469000655EE /* sphere.xml */; }; AFD5703C0996B5E300BA26F7 /* sphere.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5703B0996B5E300BA26F7 /* sphere.c */; }; AFD570490996B61600BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD570550996B65A00BA26F7 /* spiral.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259140988A469000655EE /* spiral.xml */; }; AFD570570996B67600BA26F7 /* spiral.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD570560996B67600BA26F7 /* spiral.c */; }; AFD5705F0996B6A300BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD5706B0996B6E700BA26F7 /* fadeplot.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A10988A468000655EE /* fadeplot.xml */; }; AFD5706D0996B70000BA26F7 /* fadeplot.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5706C0996B70000BA26F7 /* fadeplot.c */; }; AFD570750996B72700BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD570810996B77F00BA26F7 /* mountain.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E90988A469000655EE /* mountain.xml */; }; AFD570830996B79300BA26F7 /* mountain.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD570820996B79300BA26F7 /* mountain.c */; }; AFD5708B0996B80300BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD570970996B84E00BA26F7 /* triangle.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259250988A469000655EE /* triangle.xml */; }; AFD570990996B86200BA26F7 /* triangle.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD570980996B86200BA26F7 /* triangle.c */; }; AFD570A10996B88E00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD570AD0996B8DC00BA26F7 /* worm.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259300988A469000655EE /* worm.xml */; }; AFD570AF0996B8EF00BA26F7 /* worm.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD570AE0996B8EF00BA26F7 /* worm.c */; }; AFD570B70996B93000BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD570C30996B96F00BA26F7 /* rotor.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259060988A469000655EE /* rotor.xml */; }; AFD570C50996B98500BA26F7 /* rotor.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD570C40996B98500BA26F7 /* rotor.c */; }; AFD570CF0996B9F800BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD570DD0996BA4600BA26F7 /* ant.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586A0988A468000655EE /* ant.xml */; }; AFD570DF0996BA5D00BA26F7 /* ant.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD570DE0996BA5C00BA26F7 /* ant.c */; }; AFD570F00996BBBF00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD570FE0996BC2000BA26F7 /* flow.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258AA0988A468000655EE /* flow.xml */; }; AFD571020996BC3800BA26F7 /* flow.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD571010996BC3800BA26F7 /* flow.c */; }; AFD571190996BE9300BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD571270996BEE100BA26F7 /* discrete.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258970988A468000655EE /* discrete.xml */; }; AFD571290996BEF700BA26F7 /* discrete.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD571280996BEF700BA26F7 /* discrete.c */; }; AFD571320996BF2E00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD5713E0996BFA500BA26F7 /* apollonian.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586E0988A468000655EE /* apollonian.xml */; }; AFD571400996BFBE00BA26F7 /* apollonian.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5713F0996BFBE00BA26F7 /* apollonian.c */; }; AFD571490996C01700BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD571550996C05F00BA26F7 /* euler2d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2589F0988A468000655EE /* euler2d.xml */; }; AFD571570996C07F00BA26F7 /* euler2d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD571560996C07F00BA26F7 /* euler2d.c */; }; AFD5715F0996C0CE00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD5716C0996C16700BA26F7 /* thornbird.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5716B0996C16700BA26F7 /* thornbird.c */; }; AFD571BB0996D9DC00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD571C70996DA3300BA26F7 /* juggle.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D00988A468000655EE /* juggle.xml */; }; AFD571C90996DA4600BA26F7 /* juggle.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD571C80996DA4600BA26F7 /* juggle.c */; }; AFD572280996E4A300BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD572340996E52B00BA26F7 /* swirl.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259200988A469000655EE /* swirl.xml */; }; AFD572360996E53E00BA26F7 /* swirl.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD572350996E53E00BA26F7 /* swirl.c */; }; AFD572730996EE8500BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD5727F0996EF1900BA26F7 /* polyominoes.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F80988A469000655EE /* polyominoes.xml */; }; AFD572810996EF2B00BA26F7 /* polyominoes.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD572800996EF2B00BA26F7 /* polyominoes.c */; }; AFD572AB0996F99600BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD572B80996FAF900BA26F7 /* bouboule.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258790988A468000655EE /* bouboule.xml */; }; AFD572BA0996FB3D00BA26F7 /* bouboule.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD572B90996FB3D00BA26F7 /* bouboule.c */; }; AFD572C80996FC0F00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD572EC0997005900BA26F7 /* crystal.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2588D0988A468000655EE /* crystal.xml */; }; AFD572EE0997006E00BA26F7 /* crystal.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD572ED0997006E00BA26F7 /* crystal.c */; }; AFD572FF099701C000BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD5730B099702AF00BA26F7 /* julia.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D20988A468000655EE /* julia.xml */; }; AFD5730D099702C800BA26F7 /* julia.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5730C099702C800BA26F7 /* julia.c */; }; AFD573630997411200BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD573700997418D00BA26F7 /* strange.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591D0988A469000655EE /* strange.xml */; }; AFD57372099741A200BA26F7 /* strange.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD57371099741A200BA26F7 /* strange.c */; }; AFDA11251934424D003D397F /* aligned_malloc.c in Sources */ = {isa = PBXBuildFile; fileRef = AFDA11211934424D003D397F /* aligned_malloc.c */; }; AFDA11261934424D003D397F /* aligned_malloc.h in Headers */ = {isa = PBXBuildFile; fileRef = AFDA11221934424D003D397F /* aligned_malloc.h */; }; AFDA11271934424D003D397F /* thread_util.c in Sources */ = {isa = PBXBuildFile; fileRef = AFDA11231934424D003D397F /* thread_util.c */; }; AFDA11281934424D003D397F /* thread_util.h in Headers */ = {isa = PBXBuildFile; fileRef = AFDA11241934424D003D397F /* thread_util.h */; }; AFDA6595178A52B70070D24B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFDA6597178A52B70070D24B /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFDA6598178A52B70070D24B /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFDA6599178A52B70070D24B /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFDA659A178A52B70070D24B /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFDA659B178A52B70070D24B /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFDA65A5178A541A0070D24B /* unknownpleasures.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFDA65A3178A541A0070D24B /* unknownpleasures.xml */; }; AFDA65A6178A541A0070D24B /* unknownpleasures.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFDA65A3178A541A0070D24B /* unknownpleasures.xml */; }; AFDA65A7178A541A0070D24B /* unknownpleasures.c in Sources */ = {isa = PBXBuildFile; fileRef = AFDA65A4178A541A0070D24B /* unknownpleasures.c */; }; AFDA65A8178A541A0070D24B /* unknownpleasures.c in Sources */ = {isa = PBXBuildFile; fileRef = AFDA65A4178A541A0070D24B /* unknownpleasures.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFDDCCEC19FF0D170072365B /* involute.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A16A0CDD78EA002805BF /* involute.c */; }; AFDDCCED19FF0EBD0072365B /* geodesicgears.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7ACFD619FF0B7A00BD752B /* geodesicgears.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFE2A45C0E2E904600ADB298 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFE2A4730E2E90E300ADB298 /* skytentacles.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE2A4720E2E90E300ADB298 /* skytentacles.c */; }; AFE2A4750E2E911200ADB298 /* skytentacles.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFE2A4740E2E911200ADB298 /* skytentacles.xml */; }; AFE30BEE0E52B14700CCF4A5 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFE30BFE0E52B18300CCF4A5 /* sonar.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590F0988A469000655EE /* sonar.xml */; }; AFE30C020E52B1DC00CCF4A5 /* sonar-icmp.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE30BFF0E52B1DC00CCF4A5 /* sonar-icmp.c */; }; AFE30C030E52B1DC00CCF4A5 /* sonar-sim.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE30C000E52B1DC00CCF4A5 /* sonar-sim.c */; }; AFE30C040E52B1DC00CCF4A5 /* sonar.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE30C010E52B1DC00CCF4A5 /* sonar.c */; }; AFE349291B033A8200AF3D73 /* xscreensaver-text in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */; }; AFE6A16C0CDD78EA002805BF /* involute.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A16A0CDD78EA002805BF /* involute.c */; }; AFE6A1890CDD7B2E002805BF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFE6A18A0CDD7B2E002805BF /* involute.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A16A0CDD78EA002805BF /* involute.c */; }; AFE6A40C0CDD7BC3002805BF /* moebiusgears.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A40B0CDD7BC3002805BF /* moebiusgears.c */; }; AFE6A40E0CDD7BDC002805BF /* moebiusgears.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFE6A40D0CDD7BDC002805BF /* moebiusgears.xml */; }; AFE6A4220CDD7FAA002805BF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFE6A4350CDD800F002805BF /* abstractile.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A4340CDD800F002805BF /* abstractile.c */; }; AFE6A4370CDD8027002805BF /* abstractile.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFE6A4360CDD8026002805BF /* abstractile.xml */; }; AFE943B119DD54C1000A5E6D /* xft.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE943AF19DD54C1000A5E6D /* xft.c */; }; AFE943B219DD54C1000A5E6D /* xft.h in Headers */ = {isa = PBXBuildFile; fileRef = AFE943B019DD54C1000A5E6D /* xft.h */; }; AFE943B519DDF97F000A5E6D /* utf8wc.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE943B319DDF97F000A5E6D /* utf8wc.c */; }; AFE943B619DDF97F000A5E6D /* utf8wc.h in Headers */ = {isa = PBXBuildFile; fileRef = AFE943B419DDF97F000A5E6D /* utf8wc.h */; }; AFEB9C37158FFF88003974F3 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFEB9C3915900514003974F3 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3815900514003974F3 /* UIKit.framework */; }; AFEB9C3B1590054B003974F3 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3A1590054B003974F3 /* OpenGLES.framework */; }; AFEB9C3D15900558003974F3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3C15900558003974F3 /* Foundation.framework */; }; AFEB9C401590056A003974F3 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3E1590056A003974F3 /* CoreGraphics.framework */; }; AFEB9C411590056A003974F3 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3F1590056A003974F3 /* QuartzCore.framework */; }; AFEC68371BD6CA85004C1B64 /* OCRAStd.otf in Resources */ = {isa = PBXBuildFile; fileRef = AFEC68361BD6CA85004C1B64 /* OCRAStd.otf */; }; AFEC68391BD6CDF9004C1B64 /* YearlReg.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AFEC68381BD6CDF9004C1B64 /* YearlReg.ttf */; }; AFF1BA0F19A96D8B0016A88D /* lament_model.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF1BA0E19A96D8B0016A88D /* lament_model.c */; }; AFF1BA1019A96D8B0016A88D /* lament_model.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF1BA0E19A96D8B0016A88D /* lament_model.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFF2868617860E830050A578 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFF2868817860E830050A578 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFF2868917860E830050A578 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFF2868A17860E830050A578 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFF2868B17860E830050A578 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFF2868C17860E830050A578 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFF28696178611720050A578 /* quasicrystal.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFF28694178611720050A578 /* quasicrystal.xml */; }; AFF28697178611720050A578 /* quasicrystal.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFF28694178611720050A578 /* quasicrystal.xml */; }; AFF28698178611720050A578 /* quasicrystal.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF28695178611720050A578 /* quasicrystal.c */; }; AFF28699178611720050A578 /* quasicrystal.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF28695178611720050A578 /* quasicrystal.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFF3C9EF17CCAC440028F240 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFF3C9F117CCAC440028F240 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFF3C9F217CCAC440028F240 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFF3C9F317CCAC440028F240 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFF3C9F417CCAC440028F240 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFF3C9F517CCAC440028F240 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFF3C9FE17CCAD9A0028F240 /* geodesic.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFF3C9FD17CCAD9A0028F240 /* geodesic.xml */; }; AFF3C9FF17CCAD9A0028F240 /* geodesic.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFF3C9FD17CCAD9A0028F240 /* geodesic.xml */; }; AFF3CA0317CCAEB70028F240 /* geodesic.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF3CA0217CCAEB70028F240 /* geodesic.c */; }; AFF3CA0417CCAEB70028F240 /* geodesic.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF3CA0217CCAEB70028F240 /* geodesic.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFF4633C0C4403E400EE6509 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFF4634A0C44044F00EE6509 /* cwaves.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF463490C44044E00EE6509 /* cwaves.c */; }; AFF4634C0C44046500EE6509 /* cwaves.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFF4634B0C44046500EE6509 /* cwaves.xml */; }; AFF4635F0C440AEF00EE6509 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFF463720C440B9200EE6509 /* glcells.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF463710C440B9200EE6509 /* glcells.c */; }; AFF463740C440BAC00EE6509 /* glcells.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFF463730C440BAC00EE6509 /* glcells.xml */; }; AFFAB31C19158CE40020F021 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFFAB31E19158CE40020F021 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFFAB31F19158CE40020F021 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFFAB32019158CE40020F021 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFFAB32119158CE40020F021 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFFAB32219158CE40020F021 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFFAB32319158CE40020F021 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AFFAB32F19158E2A0020F021 /* projectiveplane.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFFAB32C19158E2A0020F021 /* projectiveplane.xml */; }; AFFAB33019158E2A0020F021 /* projectiveplane.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFFAB32C19158E2A0020F021 /* projectiveplane.xml */; }; AFFAB33219158EA80020F021 /* projectiveplane.c in Sources */ = {isa = PBXBuildFile; fileRef = AFFAB33119158EA80020F021 /* projectiveplane.c */; }; AFFAB33319158EA80020F021 /* projectiveplane.c in Sources */ = {isa = PBXBuildFile; fileRef = AFFAB33119158EA80020F021 /* projectiveplane.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; CE3D01581B76F4C100993C75 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; CE3D015A1B76F4C100993C75 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; CE3D015B1B76F4C100993C75 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; CE3D015C1B76F4C100993C75 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; CE3D015D1B76F4C100993C75 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; CE3D015E1B76F4C100993C75 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; CE3D015F1B76F4C100993C75 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CE3D01601B76F4C100993C75 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; CE3D01691B76F88A00993C75 /* testx11.xml in Resources */ = {isa = PBXBuildFile; fileRef = CE3D01681B76F83E00993C75 /* testx11.xml */; }; CE3D016B1B76F93700993C75 /* testx11.c in Sources */ = {isa = PBXBuildFile; fileRef = CE3D016A1B76F8E200993C75 /* testx11.c */; }; CE3D016C1B76FEB100993C75 /* testx11.xml in Resources */ = {isa = PBXBuildFile; fileRef = CE3D01681B76F83E00993C75 /* testx11.xml */; }; CE3D016D1B76FF1600993C75 /* testx11.c in Sources */ = {isa = PBXBuildFile; fileRef = CE3D016A1B76F8E200993C75 /* testx11.c */; }; CE9289D319BD00E300961F22 /* async_netdb.c in Sources */ = {isa = PBXBuildFile; fileRef = CE9289D119BD00E200961F22 /* async_netdb.c */; }; CE9289D419BD00E300961F22 /* async_netdb.h in Headers */ = {isa = PBXBuildFile; fileRef = CE9289D219BD00E300961F22 /* async_netdb.h */; }; CEE0BC621A6B0D6200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC631A6B0D8100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC641A6B0DA100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC661A6B0DBF00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC671A6B0E0600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC681A6B0E1800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC691A6B0E2D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC6A1A6B0E3800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC6B1A6B0E4200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC6C1A6B0E4B00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC6D1A6B0E5400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC6E1A6B0E5E00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC6F1A6B0E6700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC701A6B0E7200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC711A6B0E7D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC721A6B0E8800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC731A6B0E9200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC741A6B0E9B00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC751A6B0EA500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC761A6B0EAE00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC771A6B0ED300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC781A6B0EDD00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC791A6B0EE700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC7A1A6B0EF100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC7B1A6B0EFB00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC7C1A6B0F0400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC7D1A6B0F0D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC7E1A6B0F1600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC7F1A6B0F1F00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC801A6B0F2900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC811A6B0F3200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC821A6B0F3C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC831A6B0F4500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC841A6B0F5400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC851A6B0F5D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC861A6B0F6700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC871A6B0F7000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC881A6B0F7C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC891A6B0FB300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC8A1A6B0FBE00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC8B1A6B0FC900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC8C1A6B0FD400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC8D1A6B0FDE00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC8E1A6B0FEA00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC8F1A6B0FF600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC901A6B100000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC911A6B100900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC921A6B101900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC931A6B102600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC941A6B103100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC951A6B103B00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC961A6B104500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC971A6B104F00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC981A6B105800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC991A6B106300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC9A1A6B106C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC9B1A6B107600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC9C1A6B108000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC9D1A6B108B00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC9E1A6B109600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC9F1A6B10A000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCA01A6B10A900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCA11A6B10B400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCA21A6B10BF00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCA31A6B10CB00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCA41A6B10D400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCA51A6B10DE00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCA61A6B10E900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCA71A6B10F300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCA81A6B10FD00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCA91A6B110700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCAA1A6B111200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCAB1A6B111E00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCAC1A6B112A00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCAD1A6B113500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCAE1A6B114000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCAF1A6B114D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCB01A6B115700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCB11A6B116100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCB21A6B116B00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCB31A6B117500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCB41A6B117F00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCB51A6B118C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCB61A6B119C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCB71A6B11DC00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCB81A6B11E700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCB91A6B11F100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCBA1A6B11FB00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCBB1A6B120600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCBC1A6B121000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCBD1A6B121B00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCBE1A6B122600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCBF1A6B123500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCC01A6B124400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCC11A6B124D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCC21A6B125800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCC31A6B126200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCC41A6B126D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCC51A6B127700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCC61A6B12F700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCC71A6B130000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCC81A6B130A00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCC91A6B131300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCCA1A6B131E00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCCB1A6B132800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCCC1A6B133300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCCD1A6B133D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCCE1A6B134600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCCF1A6B135000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCD01A6B135900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCD11A6B136300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCD21A6B136C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCD31A6B137600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCD41A6B137F00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCD51A6B138800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCD61A6B13A100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCD71A6B13AA00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCD81A6B13B500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCD91A6B13C000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCDA1A6B13C900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCDB1A6B13D300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCDC1A6B13DD00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCDD1A6B13E700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCDE1A6B13F100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCDF1A6B13FC00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCE01A6B140500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCE11A6B140F00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCE21A6B141900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCE31A6B142200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCE41A6B142C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCE51A6B143500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCE61A6B143E00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCE71A6B144800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCE81A6B146F00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCE91A6B147900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCEA1A6B150F00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCEB1A6B151A00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCEC1A6B152300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCED1A6B152E00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCEE1A6B153800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCEF1A6B154200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCF01A6B154E00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCF11A6B155700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCF21A6B156200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCF31A6B156C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCF41A6B157600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCF51A6B158000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCF61A6B158C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCF71A6B159600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCF81A6B15A300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCF91A6B15AD00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCFA1A6B15B600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCFB1A6B15BF00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCFC1A6B15C800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCFD1A6B15D200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCFE1A6B15E300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCFF1A6B15EE00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD001A6B15F800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD011A6B160200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD021A6B160D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD031A6B161700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD041A6B162400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD051A6B162E00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD061A6B163700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD071A6B164000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD081A6B164A00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD091A6B165300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD0A1A6B165D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD0B1A6B166700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD0C1A6B167000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD0D1A6B167900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD0E1A6B168200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD0F1A6B168D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD101A6B169600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD111A6B169F00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD121A6B16A800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD131A6B16B200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD141A6B16BB00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD151A6B16C500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD161A6B16D000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD171A6B16DA00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD181A6B16E300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD191A6B16EE00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD1A1A6B16F800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD1B1A6B170100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD1C1A6B170A00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD1D1A6B171400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD1E1A6B171E00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD1F1A6B172800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD201A6B173100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD211A6B173A00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD221A6B174400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD231A6B174D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD241A6B175700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD251A6B176000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD261A6B176900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD271A6B177200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD281A6B177C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD291A6B178600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD2A1A6B178F00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD2B1A6B179900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD2C1A6B17A200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD2D1A6B17AD00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD2E1A6B17B600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD2F1A6B17BF00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD301A6B17C900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD311A6B17D300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD321A6B17DD00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD331A6B17E600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD341A6B17EF00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD351A6B17F700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD361A6B180D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD371A6B181700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD381A6B182100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD391A6B182B00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD3A1A6B183600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD3B1A6B184100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD3C1A6B184C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD3D1A6B185600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD3E1A6B186200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD3F1A6B186C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD401A6B187500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD411A6B188100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD421A6B188B00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD431A6B189500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD441A6B189F00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD451A6B18A900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD461A6B18B200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD471A6B18BB00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD481A6B18C400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD491A6B18CE00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD4A1A6B18D700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ AF08399109930B6B00277BE9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF083A34099311D700277BE9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF0DC7AD0C4C73F600D76972 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF0DCA300C4C744D00D76972 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF0DC7AB0C4C73F600D76972; remoteInfo = m6502; }; AF0DCA440C4CBB0D00D76972 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF0DCA5B0C4CBB4300D76972 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF0DCA420C4CBB0D00D76972; remoteInfo = Voronoi; }; AF137D460F075CC8004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF137D410F075C9B004DE3B2; remoteInfo = Obsolete; }; AF137D480F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD5709B0996B88E00BA26F7; remoteInfo = Worm; }; AF137D4A0F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477208099D4EE8001F091E; remoteInfo = Whirlygig; }; AF137D4C0F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56F0B0996AAFA00BA26F7; remoteInfo = Vines; }; AF137D4E0F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4771A7099D4949001F091E; remoteInfo = T3D; }; AF137D500F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD570430996B61600BA26F7; remoteInfo = Spiral; }; AF137D520F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD570260996B56D00BA26F7; remoteInfo = Sphere; }; AF137D540F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD570B10996B93000BA26F7; remoteInfo = Rotor; }; AF137D560F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56FCF0996B20900BA26F7; remoteInfo = Lissie; }; AF137D580F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56FB90996B18F00BA26F7; remoteInfo = Lisa; }; AF137D5A0F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56FA30996B10F00BA26F7; remoteInfo = Lightning; }; AF137D5C0F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56F8C0996B09400BA26F7; remoteInfo = Laser; }; AF137D600F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55CCC09934CE400F3E977; remoteInfo = GLForestFire; }; AF137D620F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56EDA0996A95700BA26F7; remoteInfo = Forest; }; AF137D640F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477909099DE379001F091E; remoteInfo = Flag; }; AF137D660F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47765A099DA78E001F091E; remoteInfo = Critical; }; AF137D680F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF6427A809A2DE36000F4CD4; remoteInfo = Bubbles; }; AF1A17630D6D6EE3008AF328 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF1A17830D6D6FA7008AF328 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF1A17610D6D6EE3008AF328; remoteInfo = LCDscrub; }; AF2D4D8113E902F5002AA818 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF2D4D9D13E90347002AA818 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF7776E409B63ABF00EA3033; remoteInfo = Phosphor; }; AF2D4F6C13E91093002AA818 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF2D4F8E13E91127002AA818 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D4DEC09B5BB19006E59CF; remoteInfo = Apple2; }; AF32D9E20F3AD0B40080F535 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF32D9F80F3AD0D90080F535 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF32D9E00F3AD0B40080F535; remoteInfo = RubikBlocks; }; AF3581C11431D47B00E09C51 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF3581FD143330F900E09C51 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF35E88C0E63823600691F2F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF35E8A20E63825600691F2F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF35E88A0E63823600691F2F; remoteInfo = Jigsaw; }; AF36340018540D050086A439 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF1AD9E118500F9F00932759; remoteInfo = XScreenSaverUpdater; }; AF39E284198A11F60064A58D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF39E2B9198A16920064A58D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF39E282198A11F60064A58D; remoteInfo = WindupRobot; }; AF3C71470D624BF50030CC0D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF42C5150D624E9200B27FF6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF3C71450D624BF50030CC0D; remoteInfo = Hypnowheel; }; AF4540D10E52BE8800AE87B5 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFE30BE80E52B14700CCF4A5; remoteInfo = Sonar; }; AF476FB7099D154F001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF476FDC099D1686001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47704E099D4385001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47716B099D4786001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477181099D4803001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4771A9099D4949001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4771DD099D4D9A001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4771F4099D4E63001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47720A099D4EE8001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477220099D4F67001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477255099D5717001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47726D099D57B9001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477285099D5926001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477384099D65A1001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47739C099D6648001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4773C3099D67B9001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477403099D69E7001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477428099D7C70001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477444099D7D33001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477485099D89E4001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47749B099D8A74001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4774B6099D8B5F001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4774D0099D8BFF001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47755F099D9A1A001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477585099D9C28001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4775A1099D9CF7001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4775DA099D9F69001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4775F4099DA030001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477615099DA26C001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477646099DA6D0001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47765C099DA78E001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477672099DA849001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477691099DAA6F001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4776AC099DABDD001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4776C2099DAC8A001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4776DD099DADDF001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4776F3099DAE7A001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47770F099DAF9F001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477725099DB044001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477754099DB61E001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477776099DB965001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477792099DBA90001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4777D3099DC183001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4778AD099DDB79001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4778C9099DDCAE001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4778EA099DDDC8001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47790B099DE379001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47792C099DE4C7001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF480921098C412F00FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF480929098C419000FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF48092C098C41AE00FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF480935098C421200FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF480C4B098E301400FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF480D5B098EED6900FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF480D59098EED5100FB32B8; remoteInfo = "All Savers (OpenGL)"; }; AF480D5D098EED6900FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF480D58098EED3D00FB32B8; remoteInfo = "All Savers (XLockmore)"; }; AF480D5F098EED6900FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF480AAF098C669800FB32B8; remoteInfo = "All Savers (XScreenSaver)"; }; AF480D74098EEDDE00FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4810ED09909FBA00FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4812520990CE2700FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4812B50990D3D900FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF48DEF10A0C25E000F94CF9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF48DF050A0C261100F94CF9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF48DEEF0A0C25E000F94CF9; remoteInfo = GLSchool; }; AF4A344B102A593600A81B2A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4A345F102A59A400A81B2A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4A3449102A593600A81B2A; remoteInfo = Surfaces; }; AF4F10ED143450C300E34F3F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF3581BF1431D47B00E09C51; remoteInfo = CompanionCube; }; AF4F10EF143450C300E34F3F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF78D175142DD8F3002AAF77; remoteInfo = Hilbert; }; AF4F10F1143450C300E34F3F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF3581FB143330F900E09C51; remoteInfo = TronBit; }; AF4FD6E80CE7A486005EE58E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4FD6FE0CE7A4F9005EE58E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4FD6E60CE7A486005EE58E; remoteInfo = Lockward; }; AF4FF4970D52CA5000666F98 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4FF4930D52CA0800666F98; remoteInfo = m6502.h; }; AF4FF4BC0D52CBDE00666F98 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4FF4D60D52CD0D00666F98 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4FF4BA0D52CBDE00666F98; remoteInfo = CubicGrid; }; AF5C9AFB1A0CCE6E00B0147A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF5C9B151A0CCF8000B0147A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF5C9AF91A0CCE6E00B0147A; remoteInfo = Cityflow; }; AF63A7F31AB4EDDB00593C75 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF63A80E1AB4EFD300593C75 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF63A7F11AB4EDDB00593C75; remoteInfo = RomanBoy; }; AF6423F4099FF9C2000F4CD4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF6425CE09A18855000F4CD4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF6425EE09A189EC000F4CD4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF64261109A18D6C000F4CD4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF64262E09A18F54000F4CD4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF64265109A19229000F4CD4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF64267D09A194B0000F4CD4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF64277309A1D37A000F4CD4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF6427AA09A2DE36000F4CD4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF68A48019196CF800D41CD1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF68A49D19196EA000D41CD1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF68A47E19196CF800D41CD1; remoteInfo = Tessellimage; }; AF714E4E105613410046AB1D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4774B4099D8B5F001F091E; remoteInfo = LMorph; }; AF714E50105613580046AB1D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD570C90996B9F800BA26F7; remoteInfo = Ant; }; AF73FF241A09877F00E485E9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF73FF3E1A0988F000E485E9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF73FF221A09877F00E485E9; remoteInfo = BinaryRing; }; AF7511011782B5B900380EA1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF7776E609B63ABF00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF77771C09B6416100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF77774009B6446500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF77777609B6497800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF77779009B64A5200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF7777AA09B64B2600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF7777D209B64C6B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF7777EC09B64E3100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF77781209B6504400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF77784609B6528100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF77786309B6536000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF77788109B6563500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF7778A709B659C800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF7778D609B6604500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D475F09B53166006E59CF; remoteInfo = Zoom; }; AF7778D809B6604500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4776AA099DABDD001F091E; remoteInfo = XSpirograph; }; AF7778DA09B6604500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4776C0099DAC8A001F091E; remoteInfo = XRaySwarm; }; AF7778DC09B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477442099D7D33001F091E; remoteInfo = XMatrix; }; AF7778DE09B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D4C6909B59F27006E59CF; remoteInfo = XLyap; }; AF7778E009B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4778C7099DDCAE001F091E; remoteInfo = XJack; }; AF7778E209B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D4D7E09B5B2DC006E59CF; remoteInfo = XAnalogTV; }; AF7778E409B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975808099C41D500B05160; remoteInfo = XFlame; }; AF7778E609B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477382099D65A1001F091E; remoteInfo = Wormhole; }; AF7778EA09B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4776DB099DADDF001F091E; remoteInfo = WhirlWindWarp; }; AF7778EC09B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47717F099D4803001F091E; remoteInfo = Wander; }; AF7778EE09B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4776F1099DAE7A001F091E; remoteInfo = Vermiculate; }; AF7778F009B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D496C09B5411D006E59CF; remoteInfo = Twang; }; AF7778F209B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF476FDA099D1686001F091E; remoteInfo = Truchet; }; AF7778F609B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477723099DB044001F091E; remoteInfo = Substrate; }; AF7778F809B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47759F099D9CF7001F091E; remoteInfo = Starfish; }; AF7778FA09B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477644099DA6D0001F091E; remoteInfo = Squiral; }; AF7778FC09B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D499709B544C2006E59CF; remoteInfo = Spotlight; }; AF7778FE09B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF64277109A1D37A000F4CD4; remoteInfo = SpeedMine; }; AF77790209B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47792A099DE4C7001F091E; remoteInfo = Slip; }; AF77790409B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D474409B5300A006E59CF; remoteInfo = SlideScreen; }; AF77790609B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975865099C475900B05160; remoteInfo = ShadeBobs; }; AF77790809B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D495409B53FC9006E59CF; remoteInfo = RotZoomer; }; AF77790A09B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9770290989D1E6001F8B92; remoteInfo = Rorschach; }; AF77790C09B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975D52099CA0F000B05160; remoteInfo = Rocks; }; AF77790E09B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D492B09B53CBA006E59CF; remoteInfo = Ripples; }; AF77791009B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9757C2099C3E6300B05160; remoteInfo = RD; }; AF77791209B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF6425EC09A189EC000F4CD4; remoteInfo = Qix; }; AF77791409B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477583099D9C28001F091E; remoteInfo = Pyro; }; AF77791609B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47726B099D57B9001F091E; remoteInfo = PopSquares; }; AF77791809B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D4CE709B5AA8E006E59CF; remoteInfo = Pong; }; AF77791A09B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477283099D5926001F091E; remoteInfo = Piecewise; }; AF77791C09B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF7776E409B63ABF00EA3033; remoteInfo = Phosphor; }; AF77791E09B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477670099DA849001F091E; remoteInfo = Petri; }; AF77792009B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4778AB099DDB79001F091E; remoteInfo = Penetrate; }; AF77792209B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47755D099D9A1A001F091E; remoteInfo = Pedal; }; AF77792409B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975C5D099C8F3F00B05160; remoteInfo = NoseGuy; }; AF77792609B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4771F2099D4E63001F091E; remoteInfo = NerveRot; }; AF77792809B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF64264F09A19229000F4CD4; remoteInfo = Munch; }; AF77792A09B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF64262C09A18F54000F4CD4; remoteInfo = Moire2; }; AF77792C09B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975775099C374A00B05160; remoteInfo = Moire; }; AF77793009B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975A36099C681F00B05160; remoteInfo = MetaBalls; }; AF77793209B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975AFC099C6FE400B05160; remoteInfo = MemScroller; }; AF77793409B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4774CE099D8BFF001F091E; remoteInfo = Maze; }; AF77793809B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477613099DA26C001F091E; remoteInfo = Kumppa; }; AF77793A09B6604900EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477499099D8A74001F091E; remoteInfo = Kaleidescope; }; AF77793E09B6604900EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477401099D69E7001F091E; remoteInfo = Intermomentary; }; AF77794009B6604900EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF476FB5099D154F001F091E; remoteInfo = Interference; }; AF77794209B6604900EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477752099DB61E001F091E; remoteInfo = Interaggregate; }; AF77794409B6604900EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF97572D099C317000B05160; remoteInfo = IMSMap; }; AF77794609B6604900EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477426099D7C70001F091E; remoteInfo = IFS; }; AF77794C09B6604900EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF480C49098E301400FB32B8; remoteInfo = Helix; }; AF77794E09B6604900EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975C12099C8C1500B05160; remoteInfo = Halo; }; AF77795009B6604900EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477253099D5717001F091E; remoteInfo = Halftone; }; AF77795209B6604900EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975C3D099C8DCF00B05160; remoteInfo = Greynetic; }; AF77795409B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF64267B09A194B0000F4CD4; remoteInfo = Goop; }; AF77795609B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47739A099D6648001F091E; remoteInfo = FuzzyFlakes; }; AF77795809B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF77787F09B6563500EA3033; remoteInfo = FontGlide; }; AF77795A09B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477790099DBA90001F091E; remoteInfo = FluidBalls; }; AF77795C09B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477483099D89E4001F091E; remoteInfo = Flame; }; AF77795E09B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975AD7099C6EB100B05160; remoteInfo = Fireworkx; }; AF77796009B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975A6C099C6AB200B05160; remoteInfo = Eruption; }; AF77796209B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4775F2099DA030001F091E; remoteInfo = Epicycle; }; AF77796409B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D48F409B535DA006E59CF; remoteInfo = Distort; }; AF77796609B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47704C099D4385001F091E; remoteInfo = Deluxe; }; AF77796809B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF976FBB0989CAA2001F8B92; remoteInfo = Deco; }; AF77796A09B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D466609B5109C006E59CF; remoteInfo = DecayScreen; }; AF77796C09B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4778E8099DDDC8001F091E; remoteInfo = Cynosure; }; AF77797009B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4775D8099D9F69001F091E; remoteInfo = Coral; }; AF77797209B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477169099D4786001F091E; remoteInfo = Compass; }; AF77797409B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47770D099DAF9F001F091E; remoteInfo = CloudLife; }; AF77797609B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477774099DB965001F091E; remoteInfo = Celtic; }; AF77797809B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4771DB099D4D9A001F091E; remoteInfo = CCurve; }; AF77797A09B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D48DB09B53322006E59CF; remoteInfo = Bumps; }; AF77797E09B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D4DAF09B5B71E006E59CF; remoteInfo = BSOD; }; AF77798009B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4777D1099DC183001F091E; remoteInfo = BoxFit; }; AF77798209B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF7778A509B659C800EA3033; remoteInfo = BlitSpin; }; AF77798409B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47768F099DAA6F001F091E; remoteInfo = Blaster; }; AF77798609B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975A86099C6BC300B05160; remoteInfo = Barcode; }; AF77798809B6604C00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9770660989D2F6001F8B92; remoteInfo = Attraction; }; AF77798A09B6604C00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D4DEC09B5BB19006E59CF; remoteInfo = Apple2; }; AF77798C09B6604C00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4773C1099D67B9001F091E; remoteInfo = Anemotaxis; }; AF77798E09B6604C00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47721E099D4F67001F091E; remoteInfo = Anemone; }; AF77799409B6608000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD570850996B80300BA26F7; remoteInfo = Triangle; }; AF77799609B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD571590996C0CE00BA26F7; remoteInfo = Thornbird; }; AF77799809B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD572220996E4A300BA26F7; remoteInfo = Swirl; }; AF77799A09B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD5735D0997411200BA26F7; remoteInfo = Strange; }; AF7779A009B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD5700F0996B4CC00BA26F7; remoteInfo = Sierpinski; }; AF7779A409B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD5726D0996EE8500BA26F7; remoteInfo = Polyominoes; }; AF7779A609B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56FF80996B43800BA26F7; remoteInfo = Penrose; }; AF7779A809B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF77771A09B6416100EA3033; remoteInfo = Pacman; }; AF7779AA09B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD5706F0996B72700BA26F7; remoteInfo = Mountain; }; AF7779AC09B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF794FCD09974FA60059A8B0; remoteInfo = Loop; }; AF7779B609B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD572F9099701C000BA26F7; remoteInfo = Julia; }; AF7779BA09B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56F6B0996B01600BA26F7; remoteInfo = Hopalong; }; AF7779BC09B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56F4F0996AEEE00BA26F7; remoteInfo = Grav; }; AF7779BE09B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56F230996AB8A00BA26F7; remoteInfo = Galaxy; }; AF7779C209B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD570EA0996BBBF00BA26F7; remoteInfo = Flow; }; AF7779C609B6608200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF794F8E09974A320059A8B0; remoteInfo = Fiberlamp; }; AF7779C809B6608200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD570590996B6A300BA26F7; remoteInfo = FadePlot; }; AF7779CA09B6608200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD571430996C01700BA26F7; remoteInfo = Euler2D; }; AF7779CC09B6608200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF480D72098EEDDE00FB32B8; remoteInfo = Drift; }; AF7779CE09B6608200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD571130996BE9300BA26F7; remoteInfo = Discrete; }; AF7779D009B6608200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF794F64099748450059A8B0; remoteInfo = Demon; }; AF7779D209B6608200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD572C20996FC0F00BA26F7; remoteInfo = Crystal; }; AF7779D409B6608200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56EAE0996A72600BA26F7; remoteInfo = Braid; }; AF7779D609B6608200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD572A50996F99600BA26F7; remoteInfo = Bouboule; }; AF7779D809B6608200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD5712C0996BF2E00BA26F7; remoteInfo = Apollonian; }; AF7779DC09B660AF00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA56379099397B300F3E977; remoteInfo = TimeTunnel; }; AF7779DE09B660AF00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA562F20993943B00F3E977; remoteInfo = Tangram; }; AF7779E009B660AF00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA559920993322100F3E977; remoteInfo = Superquadrics; }; AF7779E209B660B000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF7777A809B64B2600EA3033; remoteInfo = StonerView; }; AF7779E409B660B000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF77781009B6504400EA3033; remoteInfo = StarWars; }; AF7779E609B660B000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55A030993340300F3E977; remoteInfo = Stairs; }; AF7779E809B660B000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55A20099334A000F3E977; remoteInfo = Sproingies; }; AF7779EA09B660B000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55D7F099358C400F3E977; remoteInfo = Spheremonics; }; AF7779EC09B660B000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55B7909933F7200F3E977; remoteInfo = Sierpinski3D; }; AF7779EE09B660B000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55D3C0993565300F3E977; remoteInfo = SBalls; }; AF7779F009B660B000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA559CF0993330600F3E977; remoteInfo = Rubik; }; AF7779F209B660B000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55DF009935E4900F3E977; remoteInfo = Queens; }; AF7779F409B660B100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55B2509933E8D00F3E977; remoteInfo = Pulsar; }; AF7779F609B660B100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA562060993849F00F3E977; remoteInfo = Providence; }; AF7779F809B660B100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA560AE0993718D00F3E977; remoteInfo = Polytopes; }; AF7779FA09B660B100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA5619D09937D7E00F3E977; remoteInfo = Polyhedra; }; AF7779FC09B660B100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4812B30990D3D900FB32B8; remoteInfo = Pipes; }; AF7779FE09B660B200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA5621F0993852500F3E977; remoteInfo = Pinion; }; AF777A0009B660B200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA5617B09937CF100F3E977; remoteInfo = Noof; }; AF777A0209B660B200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA559B50993328000F3E977; remoteInfo = Morph3D; }; AF777A0409B660B200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA560FD0993781600F3E977; remoteInfo = Molecule; }; AF777A0609B660B200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA5596D0993317900F3E977; remoteInfo = Moebius; }; AF777A0809B660B200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF77778E09B64A5200EA3033; remoteInfo = MirrorBlob; }; AF777A0A09B660B200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55BE40993429100F3E977; remoteInfo = Menger; }; AF777A0C09B660B200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55DC809935D7000F3E977; remoteInfo = Lavalite; }; AF777A0E09B660B200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55A790993364300F3E977; remoteInfo = Lament; }; AF777A1009B660B300EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55F2A0993622F00F3E977; remoteInfo = Klein; }; AF777A1209B660B300EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA563A4099398BB00F3E977; remoteInfo = Juggler3D; }; AF777A1409B660B300EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55F06099361B700F3E977; remoteInfo = JigglyPuff; }; AF777A1609B660B300EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55F420993629000F3E977; remoteInfo = HyperTorus; }; AF777A1809B660B300EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56DF10996A03800BA26F7; remoteInfo = GLText; }; AF777A1A09B660B300EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55C77099349A600F3E977; remoteInfo = GLSnake; }; AF777A1C09B660B300EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF7777D009B64C6B00EA3033; remoteInfo = GLSlideshow; }; AF777A1E09B660B300EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55B0909933E0500F3E977; remoteInfo = GLPlanet; }; AF777A2009B660B300EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55F720993643600F3E977; remoteInfo = GLMatrix; }; AF777A2209B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55FF909936C6D00F3E977; remoteInfo = GLKnots; }; AF777A2409B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA56331099395ED00F3E977; remoteInfo = GLHanoi; }; AF777A2809B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55E2F09935F8E00F3E977; remoteInfo = GLBlur; }; AF777A2A09B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55B9109933FDA00F3E977; remoteInfo = GFlux; }; AF777A2C09B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF77777409B6497800EA3033; remoteInfo = Gleidescope; }; AF777A2E09B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4812500990CE2700FB32B8; remoteInfo = Gears; }; AF777A3009B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55E4E09935FF900F3E977; remoteInfo = FlyingToasters; }; AF777A3209B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF7777EA09B64E3100EA3033; remoteInfo = FlipText; }; AF777A3409B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF77773E09B6446500EA3033; remoteInfo = FlipScreen3D; }; AF777A3609B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA5603209936D5100F3E977; remoteInfo = FlipFlop; }; AF777A3809B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF6423F2099FF9C2000F4CD4; remoteInfo = Extrusion; }; AF777A3A09B660B500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55C0E0993431300F3E977; remoteInfo = Engine; }; AF777A3C09B660B500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55E0D09935EDC00F3E977; remoteInfo = Endgame; }; AF777A3E09B660B500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF77786109B6536000EA3033; remoteInfo = DNAlogo; }; AF777A4009B660B500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4810EB09909FBA00FB32B8; remoteInfo = DangerBall; }; AF777A4209B660B500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55FD309936BFA00F3E977; remoteInfo = CubeStorm; }; AF777A4409B660B500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55D620993584B00F3E977; remoteInfo = Cubenetic; }; AF777A4609B660B500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA56351099396C000F3E977; remoteInfo = Cube21; }; AF777A4809B660B500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA563130993951000F3E977; remoteInfo = Crackberg; }; AF777A4A09B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55BAB099340CE00F3E977; remoteInfo = Circuit; }; AF777A4C09B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF77784409B6528100EA3033; remoteInfo = Carousel; }; AF777A4E09B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55946099330B000F3E977; remoteInfo = Cage; }; AF777A5009B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55ACF09933CEF00F3E977; remoteInfo = Bubble3D; }; AF777A5209B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55CA909934BB200F3E977; remoteInfo = Boxed; }; AF777A5409B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55EC7099360E300F3E977; remoteInfo = BouncingCow; }; AF777A5609B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA562BF099392C600F3E977; remoteInfo = Boing; }; AF777A5809B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA5601409936CC800F3E977; remoteInfo = BlockTube; }; AF777A5A09B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA5615609937C0D00F3E977; remoteInfo = BlinkBox; }; AF777A5C09B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF083A32099311D700277BE9; remoteInfo = Atunnel; }; AF777A5E09B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF08398F09930B6B00277BE9; remoteInfo = Atlantis; }; AF777A6009B660B700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA5606209936F3800F3E977; remoteInfo = AntSpotlight; }; AF777A6209B660B700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA562DA099393C900F3E977; remoteInfo = AntMaze; }; AF777A6409B660B700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA5604A09936E2100F3E977; remoteInfo = AntInspect; }; AF78D177142DD8F3002AAF77 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF794F66099748450059A8B0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF794F9009974A320059A8B0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF794FCF09974FA60059A8B0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF7ACFC219FF0A9200BD752B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF7ACFDB19FF0BDB00BD752B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF7ACFC019FF0A9200BD752B; remoteInfo = GeodesicGears; }; AF7E07FD15925DF200D81407 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4FF4930D52CA0800666F98; remoteInfo = m6502.h; }; AF7E07FF15925DFE00D81407 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA56119099378CB00F3E977; remoteInfo = molecules.h; }; AF918979158FC00A002B5D1E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF97572F099C317000B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975777099C374A00B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9757C4099C3E6300B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF97580A099C41D500B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975867099C475900B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975A38099C681F00B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975A6E099C6AB200B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975A88099C6BC300B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975AD9099C6EB100B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975AFE099C6FE400B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975C14099C8C1500B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975C3F099C8DCF00B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975C5F099C8F3F00B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975D54099CA0F000B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF998EDC0A083DB30051049D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF998EF60A083E1D0051049D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF998EDA0A083DB30051049D; remoteInfo = TopBlock; }; AF9D466809B5109C006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D474609B5300A006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D476109B53166006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D48DD09B53322006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D48F609B535DA006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D492D09B53CBA006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D495609B53FC9006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D496E09B5411D006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D499909B544C2006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D4C6B09B59F27006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D4CE909B5AA8E006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D4D8009B5B2DC006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D4DB109B5B71E006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D4DEE09B5BB19006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA160911052FF87009B93AA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF6425CC09A18855000F4CD4; remoteInfo = HyperCube; }; AFA160931052FF87009B93AA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF64260F09A18D6C000F4CD4; remoteInfo = HyperBall; }; AFA339300B058505002B0E7D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA33B8E0B0585A4002B0E7D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA3392E0B058505002B0E7D; remoteInfo = WebCollage; }; AFA33BCE0B0587B2002B0E7D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA33BC60B058740002B0E7D; remoteInfo = "webcollage-helper"; }; AFA33BDB0B058952002B0E7D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA33BC60B058740002B0E7D; remoteInfo = "webcollage-helper"; }; AFA33C030B058E3C002B0E7D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA33C020B058E17002B0E7D; remoteInfo = webcollage; }; AFA55948099330B000F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA5596F0993317900F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA559940993322100F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA559B70993328000F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA559D10993330600F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55A050993340300F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55A22099334A000F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55A7B0993364300F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55AD109933CEF00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55B0B09933E0500F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55B2709933E8D00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55B7B09933F7200F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55B9309933FDA00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55BAD099340CE00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55BE60993429100F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55C100993431300F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55C79099349A600F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55CAB09934BB200F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55CCE09934CE400F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55D3E0993565300F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55D640993584B00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55D81099358C400F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55DCA09935D7000F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55DF209935E4900F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55E0F09935EDC00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55E3109935F8E00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55E5009935FF900F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55EC9099360E300F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55F08099361B700F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55F2C0993622F00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55F440993629000F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55F740993643600F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55FD509936BFA00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55FFB09936C6D00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA5601609936CC800F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA5603409936D5100F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA5604C09936E2100F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA5606409936F3800F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA560B00993718D00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA560FF0993781600F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA5611D0993791D00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA56119099378CB00F3E977; remoteInfo = molecules.h; }; AFA5615809937C0D00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA5617D09937CF100F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA5619F09937D7E00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA562080993849F00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA562210993852500F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA562C1099392C600F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA562DC099393C900F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA562F40993943B00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA563150993951000F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA56333099395ED00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA56353099396C000F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA5637B099397B300F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA563A6099398BB00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFB581AF102F363300342B11 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD571B50996D9DC00BA26F7; remoteInfo = Juggle; }; AFB591A9178B812C00EA4005 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFB591C2178B821E00EA4005 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFB591A7178B812C00EA4005; remoteInfo = Hexadrop; }; AFBFE73F1786405E00432B21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFF2867F17860E830050A578; remoteInfo = QuasiCrystal; }; AFBFE7411786407000432B21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF7510FF1782B5B900380EA1; remoteInfo = Kaleidocycle; }; AFBFE74D178642DC00432B21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFBFE7631786438900432B21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D4DEC09B5BB19006E59CF; remoteInfo = Apple2; }; AFBFE76B178647FE00432B21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFBFE7801786482B00432B21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF7776E409B63ABF00EA3033; remoteInfo = Phosphor; }; AFBFE784178648E600432B21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFBFE74B178642DC00432B21; remoteInfo = "Apple2-OSX"; }; AFBFE786178648F500432B21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFBFE767178647FE00432B21; remoteInfo = "Phosphor-OSX"; }; AFCAD5F80992DFE00009617A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9771D60989DC4A001F8B92; remoteInfo = SaverTester; }; AFCF833D1AF5B515008BB7E1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFCF835B1AF5B683008BB7E1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFCF833B1AF5B515008BB7E1; remoteInfo = SplitFlap; }; AFD51B1D0F063B4A00471C02 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD51B340F063B7800471C02 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD51B1B0F063B4A00471C02; remoteInfo = Photopile; }; AFD56DF30996A03800BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56EB00996A72600BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56EDC0996A95700BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56F0D0996AAFA00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56F250996AB8A00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56F510996AEEE00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56F6D0996B01600BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56F8E0996B09400BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56FA50996B10F00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56FBB0996B18F00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56FD10996B20900BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56FFA0996B43800BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD570110996B4CC00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD570280996B56D00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD570450996B61600BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD5705B0996B6A300BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD570710996B72700BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD570870996B80300BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD5709D0996B88E00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD570B30996B93000BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD570CB0996B9F800BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD570EC0996BBBF00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD571150996BE9300BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD5712E0996BF2E00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD571450996C01700BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD5715B0996C0CE00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD571B70996D9DC00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD572240996E4A300BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD5726F0996EE8500BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD572A70996F99600BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD572C40996FC0F00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD572FB099701C000BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD5735F0997411200BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFDA6590178A52B70070D24B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFDA65A9178A54690070D24B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFDA658E178A52B70070D24B; remoteInfo = "Unknown Pleasures"; }; AFE2A4580E2E904600ADB298 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFE2A46E0E2E908E00ADB298 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFE2A4560E2E904600ADB298; remoteInfo = SkyTentacles; }; AFE30BEA0E52B14700CCF4A5 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFE6A1840CDD7B2E002805BF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFE6A19B0CDD7B7F002805BF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFE6A1820CDD7B2E002805BF; remoteInfo = MoebiusGears; }; AFE6A41D0CDD7FAA002805BF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFE6A42F0CDD7FEE002805BF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFE6A41B0CDD7FAA002805BF; remoteInfo = Abstractile; }; AFF2868117860E830050A578 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFF3C9EA17CCAC440028F240 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFF3CA0017CCAE210028F240 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFF3C9E817CCAC440028F240; remoteInfo = Geodesic; }; AFF463380C4403E400EE6509 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFF463520C44062500EE6509 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFF463360C4403E400EE6509; remoteInfo = CWaves; }; AFF4635A0C440AEF00EE6509 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFF4636E0C440B3B00EE6509 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFF463580C440AEF00EE6509; remoteInfo = GLCells; }; AFFAB31719158CE40020F021 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFFAB33419158F1E0020F021 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFFAB31519158CE40020F021; remoteInfo = ProjectivePlane; }; CE04E8CA1B9B61D00085910B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = CE3D01511B76F4C100993C75; remoteInfo = TestX11; }; CE3D01531B76F4C100993C75 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ AF1ADA191850185F00932759 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( AF1ADA1A1850186B00932759 /* Sparkle.framework in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9E7EBD190F4C1B00A8B01F /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ 089C165DFE840E0CC02AAC07 /* InfoPlist.strings */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = InfoPlist.strings; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 32CA4F630368D1EE00C91783 /* xscreensaver_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xscreensaver_Prefix.pch; sourceTree = ""; }; 550FB5FD1AD64424001A4FA5 /* Media-iOS.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Media-iOS.xcassets"; 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; }; AF0839A909930C4900277BE9 /* atlantis.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = atlantis.c; path = hacks/glx/atlantis.c; sourceTree = ""; }; AF0839AA09930C4900277BE9 /* dolphin.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = dolphin.c; path = hacks/glx/dolphin.c; sourceTree = ""; }; AF0839AB09930C4900277BE9 /* shark.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = shark.c; path = hacks/glx/shark.c; sourceTree = ""; }; AF0839AC09930C4900277BE9 /* swim.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = swim.c; path = hacks/glx/swim.c; sourceTree = ""; }; AF0839AD09930C4900277BE9 /* whale.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = whale.c; path = hacks/glx/whale.c; sourceTree = ""; }; AF0839AE09930C4900277BE9 /* xpm-ximage.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = "xpm-ximage.c"; path = "hacks/glx/xpm-ximage.c"; sourceTree = ""; }; AF0839AF09930C4900277BE9 /* xpm-ximage.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = "xpm-ximage.h"; path = "hacks/glx/xpm-ximage.h"; sourceTree = ""; }; AF083A31099311CE00277BE9 /* atunnel.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = atunnel.c; path = hacks/glx/atunnel.c; sourceTree = ""; }; AF083A48099311D700277BE9 /* Atunnel.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Atunnel.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF083A58099312B000277BE9 /* tunnel_draw.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = tunnel_draw.c; path = hacks/glx/tunnel_draw.c; sourceTree = ""; }; AF083A5D099312DB00277BE9 /* tunnel_draw.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = tunnel_draw.h; path = hacks/glx/tunnel_draw.h; sourceTree = ""; }; AF0DC7BD0C4C73F600D76972 /* m6502.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = m6502.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF0DCA320C4C74A200D76972 /* asm6502.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = asm6502.c; path = hacks/asm6502.c; sourceTree = ""; }; AF0DCA330C4C74A200D76972 /* asm6502.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = asm6502.h; path = hacks/asm6502.h; sourceTree = ""; }; AF0DCA340C4C74A200D76972 /* m6502.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = m6502.c; path = hacks/m6502.c; sourceTree = ""; }; AF0DCA370C4C74B700D76972 /* m6502.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = m6502.xml; sourceTree = ""; }; AF0DCA560C4CBB0D00D76972 /* Voronoi.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Voronoi.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF0DCA5F0C4CBB7300D76972 /* voronoi.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = voronoi.c; path = hacks/glx/voronoi.c; sourceTree = ""; }; AF0DCA610C4CBB8E00D76972 /* voronoi.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = voronoi.xml; sourceTree = ""; }; AF0F46DC104E1809000A929C /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.perl; name = "xscreensaver-text"; path = "../driver/xscreensaver-text"; sourceTree = ""; }; AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.perl; name = "xscreensaver-getimage-file"; path = "../driver/xscreensaver-getimage-file"; sourceTree = ""; }; AF0FAF3B159BAC7B00BCE2F7 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/System/Library/Frameworks/CoreText.framework; sourceTree = DEVELOPER_DIR; }; AF14EE300E3CEF1A004CBBD2 /* XScreenSaver.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = XScreenSaver.icns; sourceTree = ""; }; AF1A17730D6D6EE3008AF328 /* LCDscrub.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = LCDscrub.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF1A177E0D6D6F3E008AF328 /* lcdscrub.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = lcdscrub.c; path = hacks/lcdscrub.c; sourceTree = ""; }; AF1A17800D6D6F62008AF328 /* lcdscrub.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = lcdscrub.xml; sourceTree = ""; }; AF1AD9E218500F9F00932759 /* XScreenSaverUpdater.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = XScreenSaverUpdater.app; sourceTree = BUILT_PRODUCTS_DIR; }; AF1AD9E518500F9F00932759 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; AF1AD9E618500FA000932759 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; AF1AD9E718500FA000932759 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; AF1ADA0118500FA100932759 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; AF1ADA151850157400932759 /* Updater.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = Updater.xib; sourceTree = SOURCE_ROOT; }; AF1ADA171850180E00932759 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Sparkle.framework; sourceTree = ""; }; 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; }; AF2D4D8F13E902F5002AA818 /* Phosphor.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Phosphor.app; sourceTree = BUILT_PRODUCTS_DIR; }; AF2D4F7E13E91093002AA818 /* Apple2.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Apple2.app; sourceTree = BUILT_PRODUCTS_DIR; }; AF2D522513E954A0002AA818 /* SaverRunner.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = SaverRunner.icns; sourceTree = ""; }; AF32D9F40F3AD0B40080F535 /* RubikBlocks.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RubikBlocks.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF32D9FA0F3AD1200080F535 /* rubikblocks.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = rubikblocks.c; path = hacks/glx/rubikblocks.c; sourceTree = ""; }; AF32D9FC0F3AD1330080F535 /* rubikblocks.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = rubikblocks.xml; sourceTree = ""; }; AF34085409B80AAF00F2CEC1 /* StarWars.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = StarWars.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF34085509B80AB000F2CEC1 /* StonerView.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = StonerView.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF34085609B80AB000F2CEC1 /* Gleidescope.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Gleidescope.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF34085709B80AB000F2CEC1 /* FontGlide.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FontGlide.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF3581D51431D47B00E09C51 /* CompanionCube.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CompanionCube.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF3581D61431D5FC00E09C51 /* companion_disc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = companion_disc.c; path = hacks/glx/companion_disc.c; sourceTree = ""; }; AF3581D71431D5FC00E09C51 /* companion_heart.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = companion_heart.c; path = hacks/glx/companion_heart.c; sourceTree = ""; }; AF3581D81431D5FC00E09C51 /* companion_quad.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = companion_quad.c; path = hacks/glx/companion_quad.c; sourceTree = ""; }; AF3581D91431D5FC00E09C51 /* companion.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = companion.c; path = hacks/glx/companion.c; sourceTree = ""; }; AF3581E61431D61D00E09C51 /* companioncube.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = companioncube.xml; sourceTree = ""; }; AF358216143330F900E09C51 /* TronBit.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TronBit.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF3582171433314C00E09C51 /* tronbit_idle1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tronbit_idle1.c; path = hacks/glx/tronbit_idle1.c; sourceTree = ""; }; AF3582181433314C00E09C51 /* tronbit_idle2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tronbit_idle2.c; path = hacks/glx/tronbit_idle2.c; sourceTree = ""; }; AF3582191433314C00E09C51 /* tronbit_no.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tronbit_no.c; path = hacks/glx/tronbit_no.c; sourceTree = ""; }; AF35821A1433314C00E09C51 /* tronbit_yes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tronbit_yes.c; path = hacks/glx/tronbit_yes.c; sourceTree = ""; }; AF35821B1433314C00E09C51 /* tronbit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tronbit.c; path = hacks/glx/tronbit.c; sourceTree = ""; }; AF3582211433318500E09C51 /* tronbit.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = tronbit.xml; sourceTree = ""; }; AF35E8A00E63823600691F2F /* Jigsaw.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Jigsaw.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF35EB250E6382BA00691F2F /* jigsaw.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = jigsaw.c; path = hacks/glx/jigsaw.c; sourceTree = ""; }; AF3633F918530DD90086A439 /* sparkle_dsa_pub.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = sparkle_dsa_pub.pem; sourceTree = ""; }; AF3633FA18530DD90086A439 /* Updater.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Updater.h; sourceTree = ""; }; AF3633FB18530DD90086A439 /* Updater.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Updater.m; sourceTree = ""; }; AF3633FE18530DFF0086A439 /* Updater.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Updater.plist; sourceTree = ""; }; AF39E296198A11F60064A58D /* WindupRobot.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WindupRobot.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF39E2A0198A13F50064A58D /* robot-wireframe.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "robot-wireframe.c"; path = "hacks/glx/robot-wireframe.c"; sourceTree = ""; }; AF39E2A1198A13F50064A58D /* winduprobot.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = winduprobot.c; path = hacks/glx/winduprobot.c; sourceTree = ""; }; AF39E2AC198A15820064A58D /* winduprobot.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = winduprobot.xml; sourceTree = ""; }; AF3C71590D624BF50030CC0D /* Hypnowheel.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Hypnowheel.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF3C715D0D624C600030CC0D /* hypnowheel.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = hypnowheel.c; path = hacks/glx/hypnowheel.c; sourceTree = ""; }; AF3C715F0D624C7C0030CC0D /* hypnowheel.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = hypnowheel.xml; sourceTree = ""; }; AF476FC6099D154F001F091E /* Interference.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Interference.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF476FD0099D15AA001F091E /* interference.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = interference.c; path = hacks/interference.c; sourceTree = ""; }; AF476FEB099D1686001F091E /* Truchet.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Truchet.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF476FF0099D1713001F091E /* truchet.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = truchet.c; path = hacks/truchet.c; sourceTree = ""; }; AF47705C099D4385001F091E /* Deluxe.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Deluxe.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477145099D43E2001F091E /* deluxe.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = deluxe.c; path = hacks/deluxe.c; sourceTree = ""; }; AF477179099D4786001F091E /* Compass.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Compass.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF47717C099D47D3001F091E /* compass.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = compass.c; path = hacks/compass.c; sourceTree = ""; }; AF47718F099D4803001F091E /* Wander.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Wander.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477192099D4864001F091E /* wander.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = wander.c; path = hacks/wander.c; sourceTree = ""; }; AF4771B7099D4949001F091E /* T3D.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = T3D.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4771BA099D4997001F091E /* t3d.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = t3d.c; path = hacks/t3d.c; sourceTree = ""; }; AF4771EB099D4D9A001F091E /* CCurve.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CCurve.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4771EF099D4DFE001F091E /* ccurve.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = ccurve.c; path = hacks/ccurve.c; sourceTree = ""; }; AF477202099D4E64001F091E /* NerveRot.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NerveRot.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477205099D4EB6001F091E /* nerverot.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = nerverot.c; path = hacks/nerverot.c; sourceTree = ""; }; AF477218099D4EE8001F091E /* Whirlygig.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Whirlygig.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF47721B099D4F47001F091E /* whirlygig.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = whirlygig.c; path = hacks/whirlygig.c; sourceTree = ""; }; AF47722E099D4F67001F091E /* Anemone.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Anemone.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477231099D4FD5001F091E /* anemone.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = anemone.c; path = hacks/anemone.c; sourceTree = ""; }; AF477263099D5717001F091E /* Halftone.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Halftone.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477266099D5768001F091E /* halftone.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = halftone.c; path = hacks/halftone.c; sourceTree = ""; }; AF47727B099D57B9001F091E /* PopSquares.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PopSquares.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF47727E099D5808001F091E /* popsquares.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = popsquares.c; path = hacks/popsquares.c; sourceTree = ""; }; AF477293099D5926001F091E /* Piecewise.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Piecewise.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477297099D5980001F091E /* piecewise.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = piecewise.c; path = hacks/piecewise.c; sourceTree = ""; }; AF477392099D65A1001F091E /* Wormhole.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Wormhole.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477395099D65FE001F091E /* wormhole.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = wormhole.c; path = hacks/wormhole.c; sourceTree = ""; }; AF4773AA099D6648001F091E /* FuzzyFlakes.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FuzzyFlakes.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4773B4099D6778001F091E /* fuzzyflakes.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = fuzzyflakes.c; path = hacks/fuzzyflakes.c; sourceTree = ""; }; AF4773D1099D67B9001F091E /* Anemotaxis.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Anemotaxis.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4773D4099D6817001F091E /* anemotaxis.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = anemotaxis.c; path = hacks/anemotaxis.c; sourceTree = ""; }; AF477412099D69E7001F091E /* Intermomentary.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Intermomentary.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF47741C099D6A6C001F091E /* intermomentary.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = intermomentary.c; path = hacks/intermomentary.c; sourceTree = ""; }; AF477437099D7C70001F091E /* IFS.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = IFS.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF47743A099D7CEA001F091E /* ifs.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = ifs.c; path = hacks/ifs.c; sourceTree = ""; }; AF477452099D7D33001F091E /* XMatrix.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XMatrix.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477455099D7D8A001F091E /* xmatrix.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = xmatrix.c; path = hacks/xmatrix.c; sourceTree = ""; }; AF477493099D89E4001F091E /* Flame.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Flame.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477496099D8A53001F091E /* flame.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = flame.c; path = hacks/flame.c; sourceTree = ""; }; AF4774A9099D8A74001F091E /* Kaleidescope.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Kaleidescope.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4774AC099D8B08001F091E /* kaleidescope.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = kaleidescope.c; path = hacks/kaleidescope.c; sourceTree = ""; }; AF4774C4099D8B5F001F091E /* LMorph.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = LMorph.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4774CB099D8BC2001F091E /* lmorph.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = lmorph.c; path = hacks/lmorph.c; sourceTree = ""; }; AF4774DE099D8BFF001F091E /* Maze.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Maze.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4774E1099D8C8B001F091E /* maze.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = maze.c; path = hacks/maze.c; sourceTree = ""; }; AF4774E7099D8D8C001F091E /* logo.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = logo.c; path = utils/logo.c; sourceTree = ""; }; AF47756D099D9A1A001F091E /* Pedal.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Pedal.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477570099D9A8A001F091E /* pedal.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = pedal.c; path = hacks/pedal.c; sourceTree = ""; }; AF477593099D9C28001F091E /* Pyro.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Pyro.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF47759C099D9CA3001F091E /* pyro.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = pyro.c; path = hacks/pyro.c; sourceTree = ""; }; AF4775AF099D9CF7001F091E /* Starfish.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Starfish.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4775B3099D9D67001F091E /* starfish.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = starfish.c; path = hacks/starfish.c; sourceTree = ""; }; AF4775BE099D9E79001F091E /* resources.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = resources.c; path = utils/resources.c; sourceTree = ""; }; AF4775BF099D9E79001F091E /* resources.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = resources.h; path = utils/resources.h; sourceTree = ""; }; AF4775E8099D9F69001F091E /* Coral.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Coral.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4775EF099D9FFF001F091E /* coral.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = coral.c; path = hacks/coral.c; sourceTree = ""; }; AF477602099DA030001F091E /* Epicycle.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Epicycle.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477605099DA097001F091E /* epicycle.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = epicycle.c; path = hacks/epicycle.c; sourceTree = ""; }; AF477623099DA26C001F091E /* Kumppa.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Kumppa.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF47762A099DA2E9001F091E /* kumppa.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = kumppa.c; path = hacks/kumppa.c; sourceTree = ""; }; AF477654099DA6D0001F091E /* Squiral.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Squiral.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477657099DA75D001F091E /* squiral.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = squiral.c; path = hacks/squiral.c; sourceTree = ""; }; AF47766A099DA78F001F091E /* Critical.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Critical.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF47766D099DA80D001F091E /* critical.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = critical.c; path = hacks/critical.c; sourceTree = ""; }; AF477680099DA849001F091E /* Petri.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Petri.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477683099DA8C7001F091E /* petri.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = petri.c; path = hacks/petri.c; sourceTree = ""; }; AF47769F099DAA6F001F091E /* Blaster.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Blaster.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4776A2099DAADE001F091E /* blaster.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = blaster.c; path = hacks/blaster.c; sourceTree = ""; }; AF4776BA099DABDD001F091E /* XSpirograph.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XSpirograph.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4776BD099DAC46001F091E /* xspirograph.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = xspirograph.c; path = hacks/xspirograph.c; sourceTree = ""; }; AF4776D0099DAC8A001F091E /* XRaySwarm.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XRaySwarm.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4776D3099DACEB001F091E /* xrayswarm.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = xrayswarm.c; path = hacks/xrayswarm.c; sourceTree = ""; }; AF4776EB099DADDF001F091E /* WhirlWindWarp.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WhirlWindWarp.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4776EE099DAE58001F091E /* whirlwindwarp.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = whirlwindwarp.c; path = hacks/whirlwindwarp.c; sourceTree = ""; }; AF477701099DAE7A001F091E /* Vermiculate.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Vermiculate.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477704099DAF3F001F091E /* vermiculate.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = vermiculate.c; path = hacks/vermiculate.c; sourceTree = ""; }; AF47771D099DAF9F001F091E /* CloudLife.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CloudLife.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477720099DB01C001F091E /* cloudlife.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cloudlife.c; path = hacks/cloudlife.c; sourceTree = ""; }; AF477733099DB044001F091E /* Substrate.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Substrate.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477736099DB104001F091E /* substrate.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = substrate.c; path = hacks/substrate.c; sourceTree = ""; }; AF477762099DB61E001F091E /* Interaggregate.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Interaggregate.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477769099DB710001F091E /* interaggregate.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = interaggregate.c; path = hacks/interaggregate.c; sourceTree = ""; }; AF477784099DB965001F091E /* Celtic.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Celtic.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477787099DBA29001F091E /* celtic.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = celtic.c; path = hacks/celtic.c; sourceTree = ""; }; AF4777A0099DBA90001F091E /* FluidBalls.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FluidBalls.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4777A4099DBB11001F091E /* fluidballs.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = fluidballs.c; path = hacks/fluidballs.c; sourceTree = ""; }; AF4777E1099DC183001F091E /* BoxFit.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BoxFit.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4778A3099DDA91001F091E /* boxfit.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = boxfit.c; path = hacks/boxfit.c; sourceTree = ""; }; AF4778BB099DDB79001F091E /* Penetrate.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Penetrate.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4778BE099DDC32001F091E /* penetrate.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = penetrate.c; path = hacks/penetrate.c; sourceTree = ""; }; AF4778D7099DDCAE001F091E /* XJack.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XJack.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4778DA099DDD2B001F091E /* xjack.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = xjack.c; path = hacks/xjack.c; sourceTree = ""; }; AF4778F8099DDDC8001F091E /* Cynosure.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Cynosure.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4778FB099DDE79001F091E /* cynosure.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cynosure.c; path = hacks/cynosure.c; sourceTree = ""; }; AF477919099DE379001F091E /* Flag.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Flag.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF47791C099DE3F1001F091E /* flag.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = flag.c; path = hacks/flag.c; sourceTree = ""; }; AF47793A099DE4C7001F091E /* Slip.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Slip.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF47793D099DE56A001F091E /* slip.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = slip.c; path = hacks/slip.c; sourceTree = ""; }; AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libjwxyz.a; sourceTree = BUILT_PRODUCTS_DIR; }; AF480C21098E28EF00FB32B8 /* greynetic.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = greynetic.c; path = hacks/greynetic.c; sourceTree = ""; }; AF480C29098E295D00FB32B8 /* halo.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = halo.c; path = hacks/halo.c; sourceTree = ""; }; AF480C2F098E2A6700FB32B8 /* helix.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = helix.c; path = hacks/helix.c; sourceTree = ""; }; AF480C58098E301400FB32B8 /* Helix.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Helix.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF480C82098E336D00FB32B8 /* drift.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = drift.c; path = hacks/drift.c; sourceTree = ""; }; AF480C89098E346700FB32B8 /* xlockmore.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = xlockmore.h; path = hacks/xlockmore.h; sourceTree = ""; }; AF480C8A098E34AB00FB32B8 /* xlockmoreI.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = xlockmoreI.h; path = hacks/xlockmoreI.h; sourceTree = ""; }; AF480CBB098E37D600FB32B8 /* xlockmore.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = xlockmore.c; path = hacks/xlockmore.c; sourceTree = ""; }; AF480D81098EEDDE00FB32B8 /* Drift.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Drift.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF480DD1098F4F6200FB32B8 /* dangerball.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = dangerball.c; path = hacks/glx/dangerball.c; sourceTree = ""; }; AF480DF1098F528500FB32B8 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; AF480EAC098F63B000FB32B8 /* rotator.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = rotator.h; path = hacks/glx/rotator.h; sourceTree = ""; }; AF480EAD098F63BE00FB32B8 /* trackball.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = trackball.c; path = hacks/glx/trackball.c; sourceTree = ""; }; AF480EAF098F63CD00FB32B8 /* trackball.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = trackball.h; path = hacks/glx/trackball.h; sourceTree = ""; }; AF480EB0098F63D600FB32B8 /* gltrackball.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = gltrackball.c; path = hacks/glx/gltrackball.c; sourceTree = ""; }; AF480EB2098F63DF00FB32B8 /* gltrackball.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = gltrackball.h; path = hacks/glx/gltrackball.h; sourceTree = ""; }; AF480EB7098F646400FB32B8 /* rotator.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = rotator.c; path = hacks/glx/rotator.c; sourceTree = ""; }; AF480EBA098F648700FB32B8 /* sphere.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = sphere.h; path = hacks/glx/sphere.h; sourceTree = ""; }; AF480EBB098F649600FB32B8 /* sphere.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = sphere.c; path = hacks/glx/sphere.c; sourceTree = ""; }; AF480ED1098F651C00FB32B8 /* tube.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = tube.h; path = hacks/glx/tube.h; sourceTree = ""; }; AF480ED2098F652A00FB32B8 /* tube.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = tube.c; path = hacks/glx/tube.c; sourceTree = ""; }; AF480FE70990375900FB32B8 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; AF4810FB09909FBA00FB32B8 /* DangerBall.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DangerBall.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF48112B0990A2C700FB32B8 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; AF4812250990CB8C00FB32B8 /* gears.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = gears.c; path = hacks/glx/gears.c; sourceTree = ""; }; AF4812640990CE2700FB32B8 /* Gears.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Gears.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4812760990CF5D00FB32B8 /* buildlwo.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = buildlwo.c; path = hacks/glx/buildlwo.c; sourceTree = ""; }; AF4812770990CF5D00FB32B8 /* buildlwo.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = buildlwo.h; path = hacks/glx/buildlwo.h; sourceTree = ""; }; AF4812780990CF5D00FB32B8 /* pipeobjs.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = pipeobjs.c; path = hacks/glx/pipeobjs.c; sourceTree = ""; }; AF4812790990CF5D00FB32B8 /* pipes.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = pipes.c; path = hacks/glx/pipes.c; sourceTree = ""; }; AF4812C60990D3D900FB32B8 /* Pipes.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Pipes.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4812F70990D9AE00FB32B8 /* XScreenSaverGLView.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = XScreenSaverGLView.h; sourceTree = ""; }; AF4812F80990D9AE00FB32B8 /* XScreenSaverGLView.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = XScreenSaverGLView.m; sourceTree = ""; }; AF48DF030A0C25E000F94CF9 /* GLSchool.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLSchool.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF48E1620A0C268400F94CF9 /* glschool_alg.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glschool_alg.c; path = hacks/glx/glschool_alg.c; sourceTree = ""; }; AF48E1630A0C268500F94CF9 /* glschool_alg.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = glschool_alg.h; path = hacks/glx/glschool_alg.h; sourceTree = ""; }; AF48E1640A0C268500F94CF9 /* glschool_gl.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glschool_gl.c; path = hacks/glx/glschool_gl.c; sourceTree = ""; }; AF48E1650A0C268500F94CF9 /* glschool_gl.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = glschool_gl.h; path = hacks/glx/glschool_gl.h; sourceTree = ""; }; AF48E1660A0C268500F94CF9 /* glschool.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glschool.c; path = hacks/glx/glschool.c; sourceTree = ""; }; AF48E1670A0C268500F94CF9 /* glschool.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = glschool.h; path = hacks/glx/glschool.h; sourceTree = ""; }; AF48E16B0A0C26A400F94CF9 /* glschool.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glschool.xml; sourceTree = ""; }; AF4A345D102A593600A81B2A /* Surfaces.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Surfaces.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4A3461102A59EB00A81B2A /* surfaces.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = surfaces.xml; sourceTree = ""; }; AF4A3463102A5A0E00A81B2A /* surfaces.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = surfaces.c; path = hacks/glx/surfaces.c; sourceTree = ""; }; AF4FD6FA0CE7A486005EE58E /* Lockward.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Lockward.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4FD7000CE7A577005EE58E /* lockward.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = lockward.c; path = hacks/glx/lockward.c; sourceTree = ""; }; AF4FD7020CE7A5BC005EE58E /* lockward.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = lockward.xml; sourceTree = ""; }; AF4FF4CE0D52CBDE00666F98 /* CubicGrid.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CubicGrid.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4FF4D00D52CC8400666F98 /* cubicgrid.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cubicgrid.c; path = hacks/glx/cubicgrid.c; sourceTree = ""; }; AF4FF4D30D52CCAA00666F98 /* cubicgrid.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = cubicgrid.xml; sourceTree = ""; }; AF56019B157DAA3D00DB2055 /* iSaverRunner.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = iSaverRunner.xib; sourceTree = ""; }; AF561DF3159651A7007CA5ED /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/System/Library/Frameworks/AudioToolbox.framework; sourceTree = DEVELOPER_DIR; }; AF561DF515969BC3007CA5ED /* iosgrabimage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iosgrabimage.m; sourceTree = ""; }; AF561DF715969C5B007CA5ED /* AssetsLibrary.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AssetsLibrary.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/System/Library/Frameworks/AssetsLibrary.framework; sourceTree = DEVELOPER_DIR; }; AF5C9B0D1A0CCE6E00B0147A /* Cityflow.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Cityflow.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF5C9B0F1A0CCF4E00B0147A /* cityflow.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = cityflow.xml; sourceTree = ""; }; AF5C9B101A0CCF4E00B0147A /* cityflow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cityflow.c; path = hacks/glx/cityflow.c; sourceTree = ""; }; AF6048F8157C07C600CA21E4 /* jwzgles.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jwzgles.c; path = ../hacks/glx/jwzgles.c; sourceTree = ""; }; AF6048F9157C07C600CA21E4 /* jwzgles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jwzgles.h; path = ../hacks/glx/jwzgles.h; sourceTree = ""; }; AF6048FA157C07C600CA21E4 /* jwzglesI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jwzglesI.h; path = ../hacks/glx/jwzglesI.h; sourceTree = ""; }; AF63A8061AB4EDDB00593C75 /* RomanBoy.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RomanBoy.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF63A8081AB4EF5D00593C75 /* romanboy.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = romanboy.xml; sourceTree = ""; }; AF63A8091AB4EF5D00593C75 /* romanboy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = romanboy.c; path = hacks/glx/romanboy.c; sourceTree = ""; }; AF642405099FF9C2000F4CD4 /* Extrusion.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Extrusion.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF642409099FFAF0000F4CD4 /* extrusion-helix2.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "extrusion-helix2.c"; path = "hacks/glx/extrusion-helix2.c"; sourceTree = ""; }; AF64240A099FFAF0000F4CD4 /* extrusion-helix3.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "extrusion-helix3.c"; path = "hacks/glx/extrusion-helix3.c"; sourceTree = ""; }; AF64240B099FFAF0000F4CD4 /* extrusion-helix4.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "extrusion-helix4.c"; path = "hacks/glx/extrusion-helix4.c"; sourceTree = ""; }; AF64240C099FFAF0000F4CD4 /* extrusion-joinoffset.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "extrusion-joinoffset.c"; path = "hacks/glx/extrusion-joinoffset.c"; sourceTree = ""; }; AF64240D099FFAF0000F4CD4 /* extrusion-screw.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "extrusion-screw.c"; path = "hacks/glx/extrusion-screw.c"; sourceTree = ""; }; AF64240E099FFAF0000F4CD4 /* extrusion-taper.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "extrusion-taper.c"; path = "hacks/glx/extrusion-taper.c"; sourceTree = ""; }; AF64240F099FFAF1000F4CD4 /* extrusion-twistoid.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "extrusion-twistoid.c"; path = "hacks/glx/extrusion-twistoid.c"; sourceTree = ""; }; AF642410099FFAF1000F4CD4 /* extrusion.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = extrusion.c; path = hacks/glx/extrusion.c; sourceTree = ""; }; AF642411099FFAF1000F4CD4 /* extrusion.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = extrusion.h; path = hacks/glx/extrusion.h; sourceTree = ""; }; AF6425DC09A18856000F4CD4 /* HyperCube.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HyperCube.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF6425DF09A188FB000F4CD4 /* hypercube.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = hypercube.c; path = hacks/hypercube.c; sourceTree = ""; }; AF6425FC09A189EC000F4CD4 /* Qix.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Qix.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF6425FF09A18A94000F4CD4 /* qix.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = qix.c; path = hacks/qix.c; sourceTree = ""; }; AF64261F09A18D6C000F4CD4 /* HyperBall.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HyperBall.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF64262209A18E1E000F4CD4 /* hyperball.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = hyperball.c; path = hacks/hyperball.c; sourceTree = ""; }; AF64263C09A18F54000F4CD4 /* Moire2.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Moire2.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF64263F09A18FEB000F4CD4 /* moire2.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = moire2.c; path = hacks/moire2.c; sourceTree = ""; }; AF64265F09A19229000F4CD4 /* Munch.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Munch.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF64266209A192C5000F4CD4 /* munch.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = munch.c; path = hacks/munch.c; sourceTree = ""; }; AF64268B09A194B0000F4CD4 /* Goop.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Goop.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF64268E09A19542000F4CD4 /* goop.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = goop.c; path = hacks/goop.c; sourceTree = ""; }; AF64278109A1D37A000F4CD4 /* SpeedMine.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SpeedMine.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF64278709A1D433000F4CD4 /* speedmine.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = speedmine.c; path = hacks/speedmine.c; sourceTree = ""; }; AF6427B809A2DE36000F4CD4 /* Bubbles.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Bubbles.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF6427BB09A2DF47000F4CD4 /* bubbles-default.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "bubbles-default.c"; path = "hacks/bubbles-default.c"; sourceTree = ""; }; AF6427BC09A2DF47000F4CD4 /* bubbles.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = bubbles.c; path = hacks/bubbles.c; sourceTree = ""; }; AF6427BD09A2DF47000F4CD4 /* bubbles.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = bubbles.h; path = hacks/bubbles.h; sourceTree = ""; }; AF68A49219196CF800D41CD1 /* Tessellimage.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Tessellimage.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF68A49419196E3E00D41CD1 /* tessellimage.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = tessellimage.xml; sourceTree = ""; }; AF68A49519196E3E00D41CD1 /* tessellimage.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tessellimage.c; path = hacks/tessellimage.c; sourceTree = ""; }; AF68A49619196E3E00D41CD1 /* delaunay.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = delaunay.c; path = hacks/delaunay.c; sourceTree = ""; }; AF73FF201A08AB9400E485E9 /* iSaverRunner57t.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = iSaverRunner57t.png; sourceTree = ""; }; AF73FF361A09877F00E485E9 /* BinaryRing.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BinaryRing.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF73FF381A09889700E485E9 /* binaryring.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = binaryring.c; path = hacks/binaryring.c; sourceTree = ""; }; AF73FF3B1A0988C500E485E9 /* binaryring.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = binaryring.xml; sourceTree = ""; }; AF7511121782B5B900380EA1 /* Kaleidocycle.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Kaleidocycle.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF7511141782B64300380EA1 /* kaleidocycle.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = kaleidocycle.c; path = hacks/glx/kaleidocycle.c; sourceTree = ""; }; AF7511161782B66400380EA1 /* kaleidescope.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = kaleidescope.xml; sourceTree = ""; }; AF7776F609B63ABF00EA3033 /* Phosphor.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Phosphor.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF77770309B63B5F00EA3033 /* phosphor.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = phosphor.c; path = hacks/phosphor.c; sourceTree = ""; }; AF77772A09B6416100EA3033 /* Pacman.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Pacman.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF77775109B6446500EA3033 /* FlipScreen3D.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FlipScreen3D.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF77775409B644FF00EA3033 /* flipscreen3d.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = flipscreen3d.c; path = hacks/glx/flipscreen3d.c; sourceTree = ""; }; AF77778B09B64A2A00EA3033 /* gleidescope.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = gleidescope.c; path = hacks/glx/gleidescope.c; sourceTree = ""; }; AF7777A209B64A5200EA3033 /* MirrorBlob.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MirrorBlob.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF7777A509B64AFC00EA3033 /* mirrorblob.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = mirrorblob.c; path = hacks/glx/mirrorblob.c; sourceTree = ""; }; AF7777BF09B64BD400EA3033 /* stonerview-move.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "stonerview-move.c"; path = "hacks/glx/stonerview-move.c"; sourceTree = ""; }; AF7777C009B64BD400EA3033 /* stonerview-move.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = "stonerview-move.h"; path = "hacks/glx/stonerview-move.h"; sourceTree = ""; }; AF7777C109B64BD400EA3033 /* stonerview-osc.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "stonerview-osc.c"; path = "hacks/glx/stonerview-osc.c"; sourceTree = ""; }; AF7777C209B64BD400EA3033 /* stonerview-osc.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = "stonerview-osc.h"; path = "hacks/glx/stonerview-osc.h"; sourceTree = ""; }; AF7777C309B64BD400EA3033 /* stonerview-view.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "stonerview-view.c"; path = "hacks/glx/stonerview-view.c"; sourceTree = ""; }; AF7777C409B64BD400EA3033 /* stonerview.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = stonerview.c; path = hacks/glx/stonerview.c; sourceTree = ""; }; AF7777C509B64BD400EA3033 /* stonerview.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = stonerview.h; path = hacks/glx/stonerview.h; sourceTree = ""; }; AF7777E409B64C6B00EA3033 /* GLSlideshow.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLSlideshow.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF7777E709B64CF700EA3033 /* glslideshow.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glslideshow.c; path = hacks/glx/glslideshow.c; sourceTree = ""; }; AF7777FE09B64E3100EA3033 /* FlipText.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FlipText.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF77780109B64EC000EA3033 /* fliptext.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = fliptext.c; path = hacks/glx/fliptext.c; sourceTree = ""; }; AF77780809B64F4900EA3033 /* texfont.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = texfont.c; path = hacks/glx/texfont.c; sourceTree = ""; }; AF77780909B64F4900EA3033 /* texfont.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = texfont.h; path = hacks/glx/texfont.h; sourceTree = ""; }; AF77782809B650FF00EA3033 /* starwars.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = starwars.c; path = hacks/glx/starwars.c; sourceTree = ""; }; AF77782909B650FF00EA3033 /* starwars.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = starwars.txt; path = hacks/glx/starwars.txt; sourceTree = ""; }; AF77785809B6528100EA3033 /* Carousel.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Carousel.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF77785E09B6530E00EA3033 /* carousel.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = carousel.c; path = hacks/glx/carousel.c; sourceTree = ""; }; AF77787409B6536000EA3033 /* DNAlogo.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DNAlogo.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF77787609B653DC00EA3033 /* dnalogo.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = dnalogo.c; path = hacks/glx/dnalogo.c; sourceTree = ""; }; AF77787909B6545E00EA3033 /* dnalogo.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = dnalogo.xml; sourceTree = ""; }; AF77789209B656C300EA3033 /* fontglide.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = fontglide.c; path = hacks/fontglide.c; sourceTree = ""; }; AF7778B509B659C800EA3033 /* BlitSpin.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BlitSpin.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF7778BA09B65A8A00EA3033 /* blitspin.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = blitspin.c; path = hacks/blitspin.c; sourceTree = ""; }; AF7778BC09B65B1800EA3033 /* automata.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = automata.h; path = hacks/automata.h; sourceTree = ""; }; AF7778BD09B65B3F00EA3033 /* atlantis.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = atlantis.h; path = hacks/glx/atlantis.h; sourceTree = ""; }; AF7778BE09B65BA300EA3033 /* molecules.sh */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; name = molecules.sh; path = hacks/glx/molecules.sh; sourceTree = ""; }; AF7778C009B65C0F00EA3033 /* sproingies.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = sproingies.h; path = hacks/glx/sproingies.h; sourceTree = ""; }; AF7778C109B65C6A00EA3033 /* e_textures.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = e_textures.h; path = hacks/glx/e_textures.h; sourceTree = ""; }; AF78369617DB9F25003B9FC0 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; AF78377C17DBA85D003B9FC0 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/lib/libz.dylib; sourceTree = DEVELOPER_DIR; }; AF78D189142DD8F3002AAF77 /* Hilbert.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Hilbert.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF78D18A142DD96E002AAF77 /* hilbert.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = hilbert.c; path = hacks/glx/hilbert.c; sourceTree = ""; }; AF78D18E142DD99A002AAF77 /* hilbert.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = hilbert.xml; sourceTree = ""; }; AF794F74099748450059A8B0 /* Demon.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Demon.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF794F7E099748860059A8B0 /* demon.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = demon.c; path = hacks/demon.c; sourceTree = ""; }; AF794F9E09974A320059A8B0 /* Fiberlamp.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Fiberlamp.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF794FA909974AE30059A8B0 /* fiberlamp.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = fiberlamp.c; path = hacks/fiberlamp.c; sourceTree = ""; }; AF794FDD09974FA60059A8B0 /* Loop.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Loop.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF794FE009974FEC0059A8B0 /* loop.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = loop.c; path = hacks/loop.c; sourceTree = ""; }; AF795011099751940059A8B0 /* pacman_ai.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = pacman_ai.c; path = hacks/pacman_ai.c; sourceTree = ""; }; AF795012099751940059A8B0 /* pacman_ai.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = pacman_ai.h; path = hacks/pacman_ai.h; sourceTree = ""; }; AF795013099751940059A8B0 /* pacman_level.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = pacman_level.c; path = hacks/pacman_level.c; sourceTree = ""; }; AF795014099751940059A8B0 /* pacman_level.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = pacman_level.h; path = hacks/pacman_level.h; sourceTree = ""; }; AF795015099751940059A8B0 /* pacman.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = pacman.c; path = hacks/pacman.c; sourceTree = ""; }; AF795016099751940059A8B0 /* pacman.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = pacman.h; path = hacks/pacman.h; sourceTree = ""; }; AF7ACFD419FF0A9200BD752B /* GeodesicGears.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GeodesicGears.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF7ACFD619FF0B7A00BD752B /* geodesicgears.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = geodesicgears.c; path = hacks/glx/geodesicgears.c; sourceTree = ""; }; AF7ACFD819FF0BA600BD752B /* geodesicgears.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = geodesicgears.xml; sourceTree = ""; }; AF84AF1E15829AF000607E4C /* SaverListController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SaverListController.m; sourceTree = ""; }; AF84FD4109B1209E00F3AB06 /* GLUT.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLUT.framework; path = /System/Library/Frameworks/GLUT.framework; sourceTree = ""; }; AF91898F158FC00A002B5D1E /* XScreenSaver.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = XScreenSaver.app; sourceTree = BUILT_PRODUCTS_DIR; }; AF94E7411A16E93600289B93 /* xscreensaver.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = xscreensaver.xcconfig; sourceTree = ""; }; AF97573D099C317000B05160 /* IMSMap.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = IMSMap.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975740099C31DD00B05160 /* imsmap.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = imsmap.c; path = hacks/imsmap.c; sourceTree = ""; }; AF975785099C374A00B05160 /* Moire.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Moire.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975789099C37A500B05160 /* moire.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = moire.c; path = hacks/moire.c; sourceTree = ""; }; AF9757D2099C3E6300B05160 /* RDbomb.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RDbomb.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9757D5099C3EB800B05160 /* rd-bomb.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "rd-bomb.c"; path = "hacks/rd-bomb.c"; sourceTree = ""; }; AF975818099C41D500B05160 /* XFlame.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XFlame.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF97582F099C427500B05160 /* xflame.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = xflame.c; path = hacks/xflame.c; sourceTree = ""; }; AF975875099C475900B05160 /* ShadeBobs.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ShadeBobs.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF97587A099C492000B05160 /* shadebobs.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = shadebobs.c; path = hacks/shadebobs.c; sourceTree = ""; }; AF975A46099C681F00B05160 /* MetaBalls.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MetaBalls.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975A49099C689F00B05160 /* metaballs.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = metaballs.c; path = hacks/metaballs.c; sourceTree = ""; }; AF975A7C099C6AB200B05160 /* Eruption.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Eruption.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975A83099C6B4900B05160 /* eruption.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = eruption.c; path = hacks/eruption.c; sourceTree = ""; }; AF975A96099C6BC300B05160 /* Barcode.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Barcode.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975A99099C6C3500B05160 /* barcode.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = barcode.c; path = hacks/barcode.c; sourceTree = ""; }; AF975AE7099C6EB100B05160 /* Fireworkx.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Fireworkx.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975AEE099C6F1700B05160 /* fireworkx.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = fireworkx.c; path = hacks/fireworkx.c; sourceTree = ""; }; AF975B0C099C6FE400B05160 /* MemScroller.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MemScroller.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975B14099C709E00B05160 /* memscroller.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = memscroller.c; path = hacks/memscroller.c; sourceTree = ""; }; AF975C22099C8C1500B05160 /* Halo.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Halo.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975C4E099C8DCF00B05160 /* Greynetic.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Greynetic.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975C6E099C8F3F00B05160 /* NoseGuy.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NoseGuy.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975C76099C8FC700B05160 /* noseguy.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = noseguy.c; path = hacks/noseguy.c; sourceTree = ""; }; AF975C91099C929800B05160 /* xpm-pixmap.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "xpm-pixmap.c"; path = "hacks/xpm-pixmap.c"; sourceTree = ""; }; AF975C92099C929800B05160 /* xpm-pixmap.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = "xpm-pixmap.h"; path = "hacks/xpm-pixmap.h"; sourceTree = ""; }; AF975D63099CA0F000B05160 /* Rocks.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Rocks.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975D66099CA16A00B05160 /* rocks.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = rocks.c; path = hacks/rocks.c; sourceTree = ""; }; AF976DFA09896BEB001F8B92 /* attraction.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = attraction.c; path = hacks/attraction.c; sourceTree = ""; }; AF976ED30989BF59001F8B92 /* ScreenSaver.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ScreenSaver.framework; path = /System/Library/Frameworks/ScreenSaver.framework; sourceTree = ""; }; AF976FBC0989CAA2001F8B92 /* Deco.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Deco.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9770400989D1E6001F8B92 /* Rorschach.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Rorschach.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF97707D0989D2F6001F8B92 /* Attraction.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Attraction.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9771D70989DC4A001F8B92 /* SaverTester.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SaverTester.app; sourceTree = BUILT_PRODUCTS_DIR; }; AF9771D90989DC4A001F8B92 /* SaverRunner.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = SaverRunner.plist; sourceTree = ""; }; AF9772E20989DFC6001F8B92 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/SaverRunner.nib; sourceTree = ""; }; AF998EEE0A083DB30051049D /* TopBlock.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TopBlock.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF998EF80A083E750051049D /* topblock.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = topblock.c; path = hacks/glx/topblock.c; sourceTree = ""; }; AF998EFA0A083E8C0051049D /* topblock.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = topblock.xml; sourceTree = ""; }; AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */ = {isa = PBXFileReference; fileEncoding = 5; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = XScreenSaverSubclass.m; sourceTree = ""; }; AF9D467609B5109C006E59CF /* DecayScreen.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DecayScreen.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D467809B5110B006E59CF /* decayscreen.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = decayscreen.c; path = hacks/decayscreen.c; sourceTree = ""; }; AF9D468E09B51567006E59CF /* osxgrabscreen.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = osxgrabscreen.m; sourceTree = ""; }; AF9D473609B52EE0006E59CF /* colorbars.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = colorbars.c; path = utils/colorbars.c; sourceTree = ""; }; AF9D473709B52EE0006E59CF /* colorbars.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = colorbars.h; path = utils/colorbars.h; sourceTree = ""; }; AF9D475409B5300A006E59CF /* SlideScreen.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SlideScreen.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D475809B53091006E59CF /* slidescreen.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = slidescreen.c; path = hacks/slidescreen.c; sourceTree = ""; }; AF9D476F09B53166006E59CF /* Zoom.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Zoom.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D48D409B53229006E59CF /* zoom.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = zoom.c; path = hacks/zoom.c; sourceTree = ""; }; AF9D48EB09B53322006E59CF /* Bumps.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Bumps.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D48EE09B533AE006E59CF /* bumps.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = bumps.c; path = hacks/bumps.c; sourceTree = ""; }; AF9D490409B535DA006E59CF /* Distort.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Distort.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D490709B536F7006E59CF /* distort.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = distort.c; path = hacks/distort.c; sourceTree = ""; }; AF9D493B09B53CBA006E59CF /* Ripples.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Ripples.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D493E09B53D55006E59CF /* ripples.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = ripples.c; path = hacks/ripples.c; sourceTree = ""; }; AF9D496409B53FC9006E59CF /* RotZoomer.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RotZoomer.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D496709B540A4006E59CF /* rotzoomer.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = rotzoomer.c; path = hacks/rotzoomer.c; sourceTree = ""; }; AF9D497C09B5411D006E59CF /* Twang.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Twang.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D497F09B541E5006E59CF /* twang.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = twang.c; path = hacks/twang.c; sourceTree = ""; }; AF9D49A709B544C3006E59CF /* Spotlight.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Spotlight.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D49AA09B54596006E59CF /* spotlight.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = spotlight.c; path = hacks/spotlight.c; sourceTree = ""; }; AF9D4C7909B59F27006E59CF /* XLyap.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XLyap.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D4C7C09B5A044006E59CF /* xlyap.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = xlyap.c; path = hacks/xlyap.c; sourceTree = ""; }; AF9D4CF709B5AA8E006E59CF /* Pong.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Pong.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D4CFA09B5AC94006E59CF /* analogtv.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = analogtv.c; path = hacks/analogtv.c; sourceTree = ""; }; AF9D4CFB09B5AC94006E59CF /* analogtv.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = analogtv.h; path = hacks/analogtv.h; sourceTree = ""; }; AF9D4CFC09B5AC94006E59CF /* pong.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = pong.c; path = hacks/pong.c; sourceTree = ""; }; AF9D4D8F09B5B2DC006E59CF /* XAnalogTV.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XAnalogTV.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D4D9209B5B444006E59CF /* xanalogtv.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = xanalogtv.c; path = hacks/xanalogtv.c; sourceTree = ""; }; AF9D4DC009B5B71E006E59CF /* BSOD.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BSOD.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D4DC309B5B87D006E59CF /* bsod.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = bsod.c; path = hacks/bsod.c; sourceTree = ""; }; AF9D4DD309B5B990006E59CF /* apple2.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = apple2.c; path = hacks/apple2.c; sourceTree = ""; }; AF9D4DFE09B5BB19006E59CF /* Apple2.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Apple2.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D4E0509B5BC9D006E59CF /* apple2-main.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "apple2-main.c"; path = "hacks/apple2-main.c"; sourceTree = ""; }; AF9D4E2109B63413006E59CF /* jwxyz-timers.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = "jwxyz-timers.m"; 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 = ""; }; AFA339400B058505002B0E7D /* WebCollage.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WebCollage.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA33BAE0B0585F7002B0E7D /* webcollage-cocoa.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; name = "webcollage-cocoa.m"; path = "hacks/webcollage-cocoa.m"; sourceTree = ""; }; AFA33BC70B058740002B0E7D /* webcollage-helper */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "webcollage-helper"; sourceTree = BUILT_PRODUCTS_DIR; }; AFA33BD00B0587EE002B0E7D /* webcollage-helper-cocoa.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; name = "webcollage-helper-cocoa.m"; path = "hacks/webcollage-helper-cocoa.m"; sourceTree = ""; }; AFA33C0A0B058E6B002B0E7D /* webcollage */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.perl; name = webcollage; path = hacks/webcollage; sourceTree = ""; }; AFA55864099324D800F3E977 /* minixpm.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = minixpm.c; path = utils/minixpm.c; sourceTree = ""; }; AFA55865099324D800F3E977 /* minixpm.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = minixpm.h; path = utils/minixpm.h; sourceTree = ""; }; AFA5595A099330B000F3E977 /* Cage.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Cage.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA5595D0993310500F3E977 /* cage.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cage.c; path = hacks/glx/cage.c; sourceTree = ""; }; AFA5597F0993317900F3E977 /* Moebius.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Moebius.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55982099331C300F3E977 /* moebius.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = moebius.c; path = hacks/glx/moebius.c; sourceTree = ""; }; AFA559A40993322100F3E977 /* Superquadrics.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Superquadrics.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA559A80993326300F3E977 /* superquadrics.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = superquadrics.c; path = hacks/glx/superquadrics.c; sourceTree = ""; }; AFA559C70993328000F3E977 /* Morph3D.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Morph3D.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA559CC099332E800F3E977 /* morph3d.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = morph3d.c; path = hacks/glx/morph3d.c; sourceTree = ""; }; AFA559E10993330600F3E977 /* Rubik.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Rubik.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA559EA0993335C00F3E977 /* rubik.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = rubik.c; path = hacks/glx/rubik.c; sourceTree = ""; }; AFA55A150993340300F3E977 /* Stairs.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Stairs.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55A1A0993345900F3E977 /* stairs.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = stairs.c; path = hacks/glx/stairs.c; sourceTree = ""; }; AFA55A32099334A000F3E977 /* Sproingies.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Sproingies.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55A3E0993351F00F3E977 /* gllist.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = gllist.c; path = hacks/glx/gllist.c; sourceTree = ""; }; AFA55A3F0993351F00F3E977 /* gllist.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = gllist.h; path = hacks/glx/gllist.h; sourceTree = ""; }; AFA55A400993351F00F3E977 /* s1_1.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = s1_1.c; path = hacks/glx/s1_1.c; sourceTree = ""; }; AFA55A410993351F00F3E977 /* s1_2.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = s1_2.c; path = hacks/glx/s1_2.c; sourceTree = ""; }; AFA55A420993351F00F3E977 /* s1_3.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = s1_3.c; path = hacks/glx/s1_3.c; sourceTree = ""; }; AFA55A430993351F00F3E977 /* s1_4.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = s1_4.c; path = hacks/glx/s1_4.c; sourceTree = ""; }; AFA55A440993351F00F3E977 /* s1_5.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = s1_5.c; path = hacks/glx/s1_5.c; sourceTree = ""; }; AFA55A450993351F00F3E977 /* s1_6.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = s1_6.c; path = hacks/glx/s1_6.c; sourceTree = ""; }; AFA55A460993351F00F3E977 /* s1_b.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = s1_b.c; path = hacks/glx/s1_b.c; sourceTree = ""; }; AFA55A470993351F00F3E977 /* sproingies.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = sproingies.c; path = hacks/glx/sproingies.c; sourceTree = ""; }; AFA55A480993351F00F3E977 /* sproingiewrap.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = sproingiewrap.c; path = hacks/glx/sproingiewrap.c; sourceTree = ""; }; AFA55A8B0993364300F3E977 /* Lament.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Lament.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55A8E0993369100F3E977 /* lament.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = lament.c; path = hacks/glx/lament.c; sourceTree = ""; }; AFA55A93099336D800F3E977 /* normals.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = normals.c; path = hacks/glx/normals.c; sourceTree = ""; }; AFA55A94099336D800F3E977 /* normals.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = normals.h; path = hacks/glx/normals.h; sourceTree = ""; }; AFA55AE109933CEF00F3E977 /* Bubble3D.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Bubble3D.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55AE409933D3800F3E977 /* bubble3d.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = bubble3d.c; path = hacks/glx/bubble3d.c; sourceTree = ""; }; AFA55AE809933D5900F3E977 /* bubble3d.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = bubble3d.h; path = hacks/glx/bubble3d.h; sourceTree = ""; }; AFA55AF409933DBF00F3E977 /* b_draw.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = b_draw.c; path = hacks/glx/b_draw.c; sourceTree = ""; }; AFA55AF509933DBF00F3E977 /* b_lockglue.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = b_lockglue.c; path = hacks/glx/b_lockglue.c; sourceTree = ""; }; AFA55AF609933DBF00F3E977 /* b_sphere.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = b_sphere.c; path = hacks/glx/b_sphere.c; sourceTree = ""; }; AFA55B1E09933E0500F3E977 /* GLPlanet.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLPlanet.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55B2109933E4A00F3E977 /* glplanet.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glplanet.c; path = hacks/glx/glplanet.c; sourceTree = ""; }; AFA55B3709933E8D00F3E977 /* Pulsar.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Pulsar.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55B3F09933EC600F3E977 /* pulsar.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = pulsar.c; path = hacks/glx/pulsar.c; sourceTree = ""; }; AFA55B8B09933F7200F3E977 /* Sierpinski3D.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Sierpinski3D.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55B8E09933FBF00F3E977 /* sierpinski3d.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = sierpinski3d.c; path = hacks/glx/sierpinski3d.c; sourceTree = ""; }; AFA55BA309933FDA00F3E977 /* GFlux.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GFlux.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55BA60993401A00F3E977 /* gflux.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = gflux.c; path = hacks/glx/gflux.c; sourceTree = ""; }; AFA55BBD099340CE00F3E977 /* Circuit.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Circuit.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55BC00993416E00F3E977 /* circuit.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = circuit.c; path = hacks/glx/circuit.c; sourceTree = ""; }; AFA55BF60993429100F3E977 /* Menger.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Menger.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55BF9099342D500F3E977 /* menger.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = menger.c; path = hacks/glx/menger.c; sourceTree = ""; }; AFA55C200993431300F3E977 /* Engine.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Engine.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55C230993435300F3E977 /* engine.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = engine.c; path = hacks/glx/engine.c; sourceTree = ""; }; AFA55C89099349A600F3E977 /* GLSnake.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLSnake.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55C8C099349EE00F3E977 /* glsnake.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glsnake.c; path = hacks/glx/glsnake.c; sourceTree = ""; }; AFA55CBB09934BB200F3E977 /* Boxed.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Boxed.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55CBE09934C0900F3E977 /* boxed.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = boxed.c; path = hacks/glx/boxed.c; sourceTree = ""; }; AFA55CBF09934C0900F3E977 /* boxed.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = boxed.h; path = hacks/glx/boxed.h; sourceTree = ""; }; AFA55CDE09934CE400F3E977 /* GLForestFire.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLForestFire.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55CE109934D2E00F3E977 /* glforestfire.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glforestfire.c; path = hacks/glx/glforestfire.c; sourceTree = ""; }; AFA55D4E0993565300F3E977 /* SBalls.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SBalls.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55D510993569C00F3E977 /* sballs.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = sballs.c; path = hacks/glx/sballs.c; sourceTree = ""; }; AFA55D740993584B00F3E977 /* Cubenetic.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Cubenetic.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55D770993589300F3E977 /* cubenetic.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cubenetic.c; path = hacks/glx/cubenetic.c; sourceTree = ""; }; AFA55D91099358C400F3E977 /* Spheremonics.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Spheremonics.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55D940993590F00F3E977 /* spheremonics.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = spheremonics.c; path = hacks/glx/spheremonics.c; sourceTree = ""; }; AFA55DDA09935D7000F3E977 /* Lavalite.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Lavalite.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55DDD09935DB600F3E977 /* lavalite.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = lavalite.c; path = hacks/glx/lavalite.c; sourceTree = ""; }; AFA55DE109935DFB00F3E977 /* marching.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = marching.c; path = hacks/glx/marching.c; sourceTree = ""; }; AFA55DE209935DFB00F3E977 /* marching.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = marching.h; path = hacks/glx/marching.h; sourceTree = ""; }; AFA55E0309935E4900F3E977 /* Queens.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Queens.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55E0609935EB800F3E977 /* queens.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = queens.c; path = hacks/glx/queens.c; sourceTree = ""; }; AFA55E1F09935EDC00F3E977 /* Endgame.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Endgame.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55E2209935F2B00F3E977 /* chessgames.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = chessgames.h; path = hacks/glx/chessgames.h; sourceTree = ""; }; AFA55E2309935F2B00F3E977 /* chessmodels.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = chessmodels.c; path = hacks/glx/chessmodels.c; sourceTree = ""; }; AFA55E2409935F2B00F3E977 /* chessmodels.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = chessmodels.h; path = hacks/glx/chessmodels.h; sourceTree = ""; }; AFA55E2509935F2B00F3E977 /* endgame.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = endgame.c; path = hacks/glx/endgame.c; sourceTree = ""; }; AFA55E4209935F8E00F3E977 /* GLBlur.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLBlur.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55E4509935FD300F3E977 /* glblur.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glblur.c; path = hacks/glx/glblur.c; sourceTree = ""; }; AFA55E6009935FF900F3E977 /* FlyingToasters.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FlyingToasters.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55E980993608800F3E977 /* flyingtoasters.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = flyingtoasters.c; path = hacks/glx/flyingtoasters.c; sourceTree = ""; }; AFA55E990993608800F3E977 /* toast.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = toast.c; path = hacks/glx/toast.c; sourceTree = ""; }; AFA55E9A0993608800F3E977 /* toast.dxf */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = toast.dxf; path = hacks/glx/toast.dxf; sourceTree = ""; }; AFA55E9B0993608800F3E977 /* toast2.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = toast2.c; path = hacks/glx/toast2.c; sourceTree = ""; }; AFA55E9C0993608800F3E977 /* toast2.dxf */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = toast2.dxf; path = hacks/glx/toast2.dxf; sourceTree = ""; }; AFA55E9D0993608800F3E977 /* toaster_base.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = toaster_base.c; path = hacks/glx/toaster_base.c; sourceTree = ""; }; AFA55E9F0993608800F3E977 /* toaster_handle.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = toaster_handle.c; path = hacks/glx/toaster_handle.c; sourceTree = ""; }; AFA55EA10993608800F3E977 /* toaster_handle2.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = toaster_handle2.c; path = hacks/glx/toaster_handle2.c; sourceTree = ""; }; AFA55EA30993608800F3E977 /* toaster_jet.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = toaster_jet.c; path = hacks/glx/toaster_jet.c; sourceTree = ""; }; AFA55EA50993608800F3E977 /* toaster_knob.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = toaster_knob.c; path = hacks/glx/toaster_knob.c; sourceTree = ""; }; AFA55EA70993608800F3E977 /* toaster_slots.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = toaster_slots.c; path = hacks/glx/toaster_slots.c; sourceTree = ""; }; AFA55EA90993608800F3E977 /* toaster_wing.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = toaster_wing.c; path = hacks/glx/toaster_wing.c; sourceTree = ""; }; AFA55EAB0993608800F3E977 /* toaster.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = toaster.c; path = hacks/glx/toaster.c; sourceTree = ""; }; AFA55EAC0993608800F3E977 /* toaster.dxf */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = toaster.dxf; path = hacks/glx/toaster.dxf; sourceTree = ""; }; AFA55EE3099360E300F3E977 /* BouncingCow.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BouncingCow.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55EE70993613E00F3E977 /* bouncingcow.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = bouncingcow.c; path = hacks/glx/bouncingcow.c; sourceTree = ""; }; AFA55EE80993613E00F3E977 /* cow_face.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cow_face.c; path = hacks/glx/cow_face.c; sourceTree = ""; }; AFA55EE90993613E00F3E977 /* cow_hide.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cow_hide.c; path = hacks/glx/cow_hide.c; sourceTree = ""; }; AFA55EEA0993613E00F3E977 /* cow_hoofs.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cow_hoofs.c; path = hacks/glx/cow_hoofs.c; sourceTree = ""; }; AFA55EEB0993613E00F3E977 /* cow_horns.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cow_horns.c; path = hacks/glx/cow_horns.c; sourceTree = ""; }; AFA55EEC0993613E00F3E977 /* cow_tail.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cow_tail.c; path = hacks/glx/cow_tail.c; sourceTree = ""; }; AFA55EED0993613E00F3E977 /* cow_udder.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cow_udder.c; path = hacks/glx/cow_udder.c; sourceTree = ""; }; AFA55F1E099361B700F3E977 /* JigglyPuff.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = JigglyPuff.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55F210993620200F3E977 /* jigglypuff.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = jigglypuff.c; path = hacks/glx/jigglypuff.c; sourceTree = ""; }; AFA55F3C0993622F00F3E977 /* Klein.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Klein.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55F3F0993626E00F3E977 /* klein.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = klein.c; path = hacks/glx/klein.c; sourceTree = ""; }; AFA55F540993629000F3E977 /* Hypertorus.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Hypertorus.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55F59099362DF00F3E977 /* hypertorus.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = hypertorus.c; path = hacks/glx/hypertorus.c; sourceTree = ""; }; AFA55F840993643600F3E977 /* GLMatrix.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLMatrix.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55F870993648500F3E977 /* glmatrix.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glmatrix.c; path = hacks/glx/glmatrix.c; sourceTree = ""; }; AFA55FE509936BFA00F3E977 /* CubeStorm.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CubeStorm.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55FF309936C4500F3E977 /* cubestorm.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cubestorm.c; path = hacks/glx/cubestorm.c; sourceTree = ""; }; AFA5600B09936C6D00F3E977 /* GLKnots.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLKnots.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA5600E09936CB300F3E977 /* glknots.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glknots.c; path = hacks/glx/glknots.c; sourceTree = ""; }; AFA5602609936CC800F3E977 /* BlockTube.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BlockTube.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA5602909936D0700F3E977 /* blocktube.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = blocktube.c; path = hacks/glx/blocktube.c; sourceTree = ""; }; AFA5604409936D5100F3E977 /* FlipFlop.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FlipFlop.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA5604709936DCC00F3E977 /* flipflop.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = flipflop.c; path = hacks/glx/flipflop.c; sourceTree = ""; }; AFA5605C09936E2100F3E977 /* AntInspect.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AntInspect.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA5605F09936E9C00F3E977 /* antinspect.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = antinspect.c; path = hacks/glx/antinspect.c; sourceTree = ""; }; AFA5607409936F3800F3E977 /* AntSpotlight.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AntSpotlight.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA5607709936FDD00F3E977 /* ants.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = ants.h; path = hacks/glx/ants.h; sourceTree = ""; }; AFA5607809936FDD00F3E977 /* antspotlight.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = antspotlight.c; path = hacks/glx/antspotlight.c; sourceTree = ""; }; AFA5607909936FDD00F3E977 /* grab-ximage.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "grab-ximage.c"; path = "hacks/glx/grab-ximage.c"; sourceTree = ""; }; AFA5607A09936FDD00F3E977 /* grab-ximage.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = "grab-ximage.h"; path = "hacks/glx/grab-ximage.h"; sourceTree = ""; }; AFA560C00993718D00F3E977 /* Polytopes.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Polytopes.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA560C3099371D500F3E977 /* polytopes.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = polytopes.c; path = hacks/glx/polytopes.c; sourceTree = ""; }; AFA5610F0993781600F3E977 /* Molecule.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Molecule.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA561120993786800F3E977 /* molecule.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = molecule.c; path = hacks/glx/molecule.c; sourceTree = ""; }; AFA5616A09937C0D00F3E977 /* BlinkBox.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BlinkBox.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA5616D09937C9A00F3E977 /* blinkbox.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = blinkbox.c; path = hacks/glx/blinkbox.c; sourceTree = ""; }; AFA5618D09937CF100F3E977 /* Noof.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Noof.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA5619009937D3600F3E977 /* noof.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = noof.c; path = hacks/glx/noof.c; sourceTree = ""; }; AFA561AF09937D7E00F3E977 /* Polyhedra.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Polyhedra.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA561B209937DCB00F3E977 /* polyhedra-gl.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "polyhedra-gl.c"; path = "hacks/glx/polyhedra-gl.c"; sourceTree = ""; }; AFA561B309937DCC00F3E977 /* polyhedra.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = polyhedra.c; path = hacks/glx/polyhedra.c; sourceTree = ""; }; AFA561B409937DCC00F3E977 /* polyhedra.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = polyhedra.h; path = hacks/glx/polyhedra.h; sourceTree = ""; }; AFA562190993849F00F3E977 /* Providence.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Providence.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA5621C099384F600F3E977 /* providence.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = providence.c; path = hacks/glx/providence.c; sourceTree = ""; }; AFA562310993852500F3E977 /* Pinion.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Pinion.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA562340993856A00F3E977 /* pinion.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = pinion.c; path = hacks/glx/pinion.c; sourceTree = ""; }; AFA562D1099392C600F3E977 /* Boing.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Boing.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA562D40993930C00F3E977 /* boing.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = boing.c; path = hacks/glx/boing.c; sourceTree = ""; }; AFA562EC099393C900F3E977 /* AntMaze.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AntMaze.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA562EF0993941600F3E977 /* antmaze.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = antmaze.c; path = hacks/glx/antmaze.c; sourceTree = ""; }; AFA563040993943B00F3E977 /* Tangram.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Tangram.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA563070993948F00F3E977 /* tangram_shapes.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = tangram_shapes.c; path = hacks/glx/tangram_shapes.c; sourceTree = ""; }; AFA563080993948F00F3E977 /* tangram_shapes.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = tangram_shapes.h; path = hacks/glx/tangram_shapes.h; sourceTree = ""; }; AFA563090993948F00F3E977 /* tangram.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = tangram.c; path = hacks/glx/tangram.c; sourceTree = ""; }; AFA563260993951000F3E977 /* Crackberg.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Crackberg.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA563290993957100F3E977 /* crackberg.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = crackberg.c; path = hacks/glx/crackberg.c; sourceTree = ""; }; AFA56343099395ED00F3E977 /* GLHanoi.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLHanoi.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA563460993963400F3E977 /* glhanoi.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glhanoi.c; path = hacks/glx/glhanoi.c; sourceTree = ""; }; AFA56363099396C000F3E977 /* Cube21.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Cube21.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA563660993970F00F3E977 /* cube21.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cube21.c; path = hacks/glx/cube21.c; sourceTree = ""; }; AFA5638B099397B300F3E977 /* TimeTunnel.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TimeTunnel.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA5638E0993980D00F3E977 /* timetunnel.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = timetunnel.c; path = hacks/glx/timetunnel.c; sourceTree = ""; }; AFA563B6099398BB00F3E977 /* Juggler3D.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Juggler3D.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA563B90993991300F3E977 /* juggler3d.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = juggler3d.c; path = hacks/glx/juggler3d.c; sourceTree = ""; }; AFAA6B441773F07700DE720C /* ios-function-table.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "ios-function-table.m"; sourceTree = ""; }; AFAD462209D5F4DA00AB5F95 /* grabclient.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = grabclient.c; path = utils/grabclient.c; sourceTree = ""; }; AFB591BA178B812C00EA4005 /* Hexadrop.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Hexadrop.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFB591BC178B81E600EA4005 /* hexadrop.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = hexadrop.xml; sourceTree = ""; }; AFB591BD178B81E600EA4005 /* hexadrop.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = hexadrop.c; path = hacks/hexadrop.c; sourceTree = ""; }; AFB5A06B0981F4C600871B16 /* screenhack.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = screenhack.h; path = hacks/screenhack.h; sourceTree = ""; }; AFB5A0ED0981FF8B00871B16 /* usleep.c */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.c; name = usleep.c; path = utils/usleep.c; sourceTree = ""; }; AFB5A0EE0981FF8B00871B16 /* usleep.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = usleep.h; path = utils/usleep.h; sourceTree = ""; }; AFB8A69A1782BA34004EDB85 /* kaleidocycle.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = kaleidocycle.xml; sourceTree = ""; }; AFBE743F19A7C6930018AA35 /* robot.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = robot.c; path = hacks/glx/robot.c; sourceTree = ""; }; AFBF893C0E41D930006A2D66 /* fps.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = fps.c; path = hacks/fps.c; sourceTree = ""; }; AFBF893D0E41D930006A2D66 /* fps.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = fps.h; path = hacks/fps.h; sourceTree = ""; }; AFBF89AE0E423FC3006A2D66 /* fps-gl.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "fps-gl.c"; path = "hacks/glx/fps-gl.c"; sourceTree = ""; }; AFBF89B10E424036006A2D66 /* fpsI.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = fpsI.h; path = hacks/fpsI.h; sourceTree = ""; }; AFBFE75E178642DC00432B21 /* Apple2.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Apple2.app; sourceTree = BUILT_PRODUCTS_DIR; }; AFBFE77E178647FE00432B21 /* Phosphor.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Phosphor.app; sourceTree = BUILT_PRODUCTS_DIR; }; AFC211930E4E30C800D87B6E /* teapot.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = teapot.c; path = hacks/glx/teapot.c; sourceTree = ""; }; AFC211940E4E30C800D87B6E /* teapot.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = teapot.h; path = hacks/glx/teapot.h; sourceTree = ""; }; AFC254B909873AF9000655EE /* screenhackI.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = screenhackI.h; path = hacks/screenhackI.h; sourceTree = ""; }; AFC254C409882C97000655EE /* XScreenSaverView.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = XScreenSaverView.h; sourceTree = ""; }; AFC254C509882C97000655EE /* XScreenSaverView.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = XScreenSaverView.m; sourceTree = ""; }; AFC2577F09888F5A000655EE /* XScreenSaverConfigSheet.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = XScreenSaverConfigSheet.h; sourceTree = ""; }; AFC2578009888F5A000655EE /* XScreenSaverConfigSheet.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = XScreenSaverConfigSheet.m; sourceTree = ""; }; AFC258680988A468000655EE /* anemone.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = anemone.xml; sourceTree = ""; }; AFC258690988A468000655EE /* anemotaxis.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = anemotaxis.xml; sourceTree = ""; }; AFC2586A0988A468000655EE /* ant.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = ant.xml; sourceTree = ""; }; AFC2586B0988A468000655EE /* antinspect.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = antinspect.xml; sourceTree = ""; }; AFC2586C0988A468000655EE /* antmaze.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = antmaze.xml; sourceTree = ""; }; AFC2586D0988A468000655EE /* antspotlight.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = antspotlight.xml; sourceTree = ""; }; AFC2586E0988A468000655EE /* apollonian.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = apollonian.xml; sourceTree = ""; }; AFC2586F0988A468000655EE /* apple2.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = apple2.xml; sourceTree = ""; }; AFC258700988A468000655EE /* atlantis.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = atlantis.xml; sourceTree = ""; }; AFC258710988A468000655EE /* attraction.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = attraction.xml; sourceTree = ""; }; AFC258720988A468000655EE /* atunnel.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = atunnel.xml; sourceTree = ""; }; AFC258730988A468000655EE /* barcode.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = barcode.xml; sourceTree = ""; }; AFC258740988A468000655EE /* blaster.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = blaster.xml; sourceTree = ""; }; AFC258750988A468000655EE /* blinkbox.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = blinkbox.xml; sourceTree = ""; }; AFC258760988A468000655EE /* blitspin.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = blitspin.xml; sourceTree = ""; }; AFC258770988A468000655EE /* blocktube.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = blocktube.xml; sourceTree = ""; }; AFC258780988A468000655EE /* boing.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = boing.xml; sourceTree = ""; }; AFC258790988A468000655EE /* bouboule.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = bouboule.xml; sourceTree = ""; }; AFC2587A0988A468000655EE /* bouncingcow.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = bouncingcow.xml; sourceTree = ""; }; AFC2587B0988A468000655EE /* boxed.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = boxed.xml; sourceTree = ""; }; AFC2587C0988A468000655EE /* boxfit.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = boxfit.xml; sourceTree = ""; }; AFC2587D0988A468000655EE /* braid.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = braid.xml; sourceTree = ""; }; AFC2587E0988A468000655EE /* bsod.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = bsod.xml; sourceTree = ""; }; AFC2587F0988A468000655EE /* bubble3d.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = bubble3d.xml; sourceTree = ""; }; AFC258800988A468000655EE /* bubbles.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = bubbles.xml; sourceTree = ""; }; AFC258810988A468000655EE /* bumps.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = bumps.xml; sourceTree = ""; }; AFC258820988A468000655EE /* cage.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = cage.xml; sourceTree = ""; }; AFC258830988A468000655EE /* carousel.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = carousel.xml; sourceTree = ""; }; AFC258840988A468000655EE /* ccurve.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = ccurve.xml; sourceTree = ""; }; AFC258850988A468000655EE /* celtic.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = celtic.xml; sourceTree = ""; }; AFC258860988A468000655EE /* circuit.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = circuit.xml; sourceTree = ""; }; AFC258870988A468000655EE /* cloudlife.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = cloudlife.xml; sourceTree = ""; }; AFC258880988A468000655EE /* compass.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = compass.xml; sourceTree = ""; }; AFC258890988A468000655EE /* coral.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = coral.xml; sourceTree = ""; }; AFC2588B0988A468000655EE /* crackberg.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = crackberg.xml; sourceTree = ""; }; AFC2588C0988A468000655EE /* critical.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = critical.xml; sourceTree = ""; }; AFC2588D0988A468000655EE /* crystal.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = crystal.xml; sourceTree = ""; }; AFC2588E0988A468000655EE /* cube21.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = cube21.xml; sourceTree = ""; }; AFC2588F0988A468000655EE /* cubenetic.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = cubenetic.xml; sourceTree = ""; }; AFC258900988A468000655EE /* cubestorm.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = cubestorm.xml; sourceTree = ""; }; AFC258910988A468000655EE /* cynosure.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = cynosure.xml; sourceTree = ""; }; AFC258920988A468000655EE /* dangerball.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = dangerball.xml; sourceTree = ""; }; AFC258930988A468000655EE /* decayscreen.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = decayscreen.xml; sourceTree = ""; }; AFC258940988A468000655EE /* deco.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = deco.xml; sourceTree = ""; }; AFC258950988A468000655EE /* deluxe.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = deluxe.xml; sourceTree = ""; }; AFC258960988A468000655EE /* demon.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = demon.xml; sourceTree = ""; }; AFC258970988A468000655EE /* discrete.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = discrete.xml; sourceTree = ""; }; AFC258980988A468000655EE /* distort.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = distort.xml; sourceTree = ""; }; AFC258990988A468000655EE /* drift.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = drift.xml; sourceTree = ""; }; AFC2589B0988A468000655EE /* endgame.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = endgame.xml; sourceTree = ""; }; AFC2589C0988A468000655EE /* engine.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = engine.xml; sourceTree = ""; }; AFC2589D0988A468000655EE /* epicycle.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = epicycle.xml; sourceTree = ""; }; AFC2589E0988A468000655EE /* eruption.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = eruption.xml; sourceTree = ""; }; AFC2589F0988A468000655EE /* euler2d.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = euler2d.xml; sourceTree = ""; }; AFC258A00988A468000655EE /* extrusion.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = extrusion.xml; sourceTree = ""; }; AFC258A10988A468000655EE /* fadeplot.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = fadeplot.xml; sourceTree = ""; }; AFC258A20988A468000655EE /* fiberlamp.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = fiberlamp.xml; sourceTree = ""; }; AFC258A40988A468000655EE /* fireworkx.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = fireworkx.xml; sourceTree = ""; }; AFC258A50988A468000655EE /* flag.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = flag.xml; sourceTree = ""; }; AFC258A60988A468000655EE /* flame.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = flame.xml; sourceTree = ""; }; AFC258A70988A468000655EE /* flipflop.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = flipflop.xml; sourceTree = ""; }; AFC258A80988A468000655EE /* flipscreen3d.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = flipscreen3d.xml; sourceTree = ""; }; AFC258A90988A468000655EE /* fliptext.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = fliptext.xml; sourceTree = ""; }; AFC258AA0988A468000655EE /* flow.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = flow.xml; sourceTree = ""; }; AFC258AB0988A468000655EE /* fluidballs.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = fluidballs.xml; sourceTree = ""; }; AFC258AC0988A468000655EE /* flurry.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = flurry.xml; sourceTree = ""; }; AFC258AD0988A468000655EE /* flyingtoasters.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = flyingtoasters.xml; sourceTree = ""; }; AFC258AE0988A468000655EE /* fontglide.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = fontglide.xml; sourceTree = ""; }; AFC258AF0988A468000655EE /* forest.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = forest.xml; sourceTree = ""; }; AFC258B00988A468000655EE /* fuzzyflakes.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = fuzzyflakes.xml; sourceTree = ""; }; AFC258B10988A468000655EE /* galaxy.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = galaxy.xml; sourceTree = ""; }; AFC258B20988A468000655EE /* gears.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = gears.xml; sourceTree = ""; }; AFC258B30988A468000655EE /* gflux.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = gflux.xml; sourceTree = ""; }; AFC258B40988A468000655EE /* glblur.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glblur.xml; sourceTree = ""; }; AFC258B50988A468000655EE /* gleidescope.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = gleidescope.xml; sourceTree = ""; }; AFC258B60988A468000655EE /* glforestfire.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glforestfire.xml; sourceTree = ""; }; AFC258B70988A468000655EE /* glhanoi.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glhanoi.xml; sourceTree = ""; }; AFC258B80988A468000655EE /* glknots.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glknots.xml; sourceTree = ""; }; AFC258B90988A468000655EE /* glmatrix.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glmatrix.xml; sourceTree = ""; }; AFC258BA0988A468000655EE /* glplanet.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glplanet.xml; sourceTree = ""; }; AFC258BB0988A468000655EE /* glslideshow.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glslideshow.xml; sourceTree = ""; }; AFC258BC0988A468000655EE /* glsnake.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glsnake.xml; sourceTree = ""; }; AFC258BD0988A468000655EE /* gltext.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = gltext.xml; sourceTree = ""; }; AFC258BF0988A468000655EE /* goop.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = goop.xml; sourceTree = ""; }; AFC258C00988A468000655EE /* grav.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = grav.xml; sourceTree = ""; }; AFC258C10988A468000655EE /* greynetic.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = greynetic.xml; sourceTree = ""; }; AFC258C20988A468000655EE /* halftone.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = halftone.xml; sourceTree = ""; }; AFC258C30988A468000655EE /* halo.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = halo.xml; sourceTree = ""; }; AFC258C40988A468000655EE /* helix.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = helix.xml; sourceTree = ""; }; AFC258C50988A468000655EE /* hopalong.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = hopalong.xml; sourceTree = ""; }; AFC258C60988A468000655EE /* hyperball.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = hyperball.xml; sourceTree = ""; }; AFC258C70988A468000655EE /* hypercube.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = hypercube.xml; sourceTree = ""; }; AFC258C80988A468000655EE /* hypertorus.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = hypertorus.xml; sourceTree = ""; }; AFC258C90988A468000655EE /* ifs.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = ifs.xml; sourceTree = ""; }; AFC258CA0988A468000655EE /* imsmap.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = imsmap.xml; sourceTree = ""; }; AFC258CB0988A468000655EE /* interaggregate.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = interaggregate.xml; sourceTree = ""; }; AFC258CC0988A468000655EE /* interference.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = interference.xml; sourceTree = ""; }; AFC258CD0988A468000655EE /* intermomentary.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = intermomentary.xml; sourceTree = ""; }; AFC258CE0988A468000655EE /* jigglypuff.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = jigglypuff.xml; sourceTree = ""; }; AFC258CF0988A468000655EE /* jigsaw.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = jigsaw.xml; sourceTree = ""; }; AFC258D00988A468000655EE /* juggle.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = juggle.xml; sourceTree = ""; }; AFC258D10988A468000655EE /* juggler3d.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = juggler3d.xml; sourceTree = ""; }; AFC258D20988A468000655EE /* julia.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = julia.xml; sourceTree = ""; }; AFC258D30988A468000655EE /* kaleidescope.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = kaleidescope.xml; sourceTree = ""; }; AFC258D40988A468000655EE /* klein.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = klein.xml; sourceTree = ""; }; AFC258D50988A468000655EE /* kumppa.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = kumppa.xml; sourceTree = ""; }; AFC258D60988A468000655EE /* lament.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = lament.xml; sourceTree = ""; }; AFC258D70988A468000655EE /* laser.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = laser.xml; sourceTree = ""; }; AFC258D80988A468000655EE /* lavalite.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = lavalite.xml; sourceTree = ""; }; AFC258D90988A468000655EE /* lightning.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = lightning.xml; sourceTree = ""; }; AFC258DA0988A468000655EE /* lisa.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = lisa.xml; sourceTree = ""; }; AFC258DB0988A468000655EE /* lissie.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = lissie.xml; sourceTree = ""; }; AFC258DC0988A468000655EE /* lmorph.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = lmorph.xml; sourceTree = ""; }; AFC258DD0988A468000655EE /* loop.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = loop.xml; sourceTree = ""; }; AFC258DE0988A468000655EE /* maze.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = maze.xml; sourceTree = ""; }; AFC258DF0988A469000655EE /* memscroller.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = memscroller.xml; sourceTree = ""; }; AFC258E00988A469000655EE /* menger.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = menger.xml; sourceTree = ""; }; AFC258E10988A469000655EE /* metaballs.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = metaballs.xml; sourceTree = ""; }; AFC258E20988A469000655EE /* mirrorblob.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = mirrorblob.xml; sourceTree = ""; }; AFC258E30988A469000655EE /* mismunch.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = mismunch.xml; sourceTree = ""; }; AFC258E40988A469000655EE /* moebius.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = moebius.xml; sourceTree = ""; }; AFC258E50988A469000655EE /* moire.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = moire.xml; sourceTree = ""; }; AFC258E60988A469000655EE /* moire2.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = moire2.xml; sourceTree = ""; }; AFC258E70988A469000655EE /* molecule.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = molecule.xml; sourceTree = ""; }; AFC258E80988A469000655EE /* morph3d.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = morph3d.xml; sourceTree = ""; }; AFC258E90988A469000655EE /* mountain.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = mountain.xml; sourceTree = ""; }; AFC258EA0988A469000655EE /* munch.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = munch.xml; sourceTree = ""; }; AFC258EB0988A469000655EE /* nerverot.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = nerverot.xml; sourceTree = ""; }; AFC258EC0988A469000655EE /* noof.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = noof.xml; sourceTree = ""; }; AFC258ED0988A469000655EE /* noseguy.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = noseguy.xml; sourceTree = ""; }; AFC258EE0988A469000655EE /* pacman.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = pacman.xml; sourceTree = ""; }; AFC258EF0988A469000655EE /* pedal.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = pedal.xml; sourceTree = ""; }; AFC258F00988A469000655EE /* penetrate.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = penetrate.xml; sourceTree = ""; }; AFC258F10988A469000655EE /* penrose.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = penrose.xml; sourceTree = ""; }; AFC258F20988A469000655EE /* petri.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = petri.xml; sourceTree = ""; }; AFC258F30988A469000655EE /* phosphor.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = phosphor.xml; sourceTree = ""; }; AFC258F40988A469000655EE /* piecewise.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = piecewise.xml; sourceTree = ""; }; AFC258F50988A469000655EE /* pinion.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = pinion.xml; sourceTree = ""; }; AFC258F60988A469000655EE /* pipes.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = pipes.xml; sourceTree = ""; }; AFC258F70988A469000655EE /* polyhedra.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = polyhedra.xml; sourceTree = ""; }; AFC258F80988A469000655EE /* polyominoes.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = polyominoes.xml; sourceTree = ""; }; AFC258F90988A469000655EE /* polytopes.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = polytopes.xml; sourceTree = ""; }; AFC258FA0988A469000655EE /* pong.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = pong.xml; sourceTree = ""; }; AFC258FB0988A469000655EE /* popsquares.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = popsquares.xml; sourceTree = ""; }; AFC258FC0988A469000655EE /* providence.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = providence.xml; sourceTree = ""; }; AFC258FD0988A469000655EE /* pulsar.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = pulsar.xml; sourceTree = ""; }; AFC258FE0988A469000655EE /* pyro.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = pyro.xml; sourceTree = ""; }; AFC258FF0988A469000655EE /* qix.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = qix.xml; sourceTree = ""; }; AFC259000988A469000655EE /* queens.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = queens.xml; sourceTree = ""; }; AFC259030988A469000655EE /* ripples.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = ripples.xml; sourceTree = ""; }; AFC259040988A469000655EE /* rocks.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = rocks.xml; sourceTree = ""; }; AFC259050988A469000655EE /* rorschach.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = rorschach.xml; sourceTree = ""; }; AFC259060988A469000655EE /* rotor.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = rotor.xml; sourceTree = ""; }; AFC259070988A469000655EE /* rotzoomer.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = rotzoomer.xml; sourceTree = ""; }; AFC259080988A469000655EE /* rubik.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = rubik.xml; sourceTree = ""; }; AFC259090988A469000655EE /* sballs.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = sballs.xml; sourceTree = ""; }; AFC2590A0988A469000655EE /* shadebobs.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = shadebobs.xml; sourceTree = ""; }; AFC2590B0988A469000655EE /* sierpinski.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = sierpinski.xml; sourceTree = ""; }; AFC2590C0988A469000655EE /* sierpinski3d.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = sierpinski3d.xml; sourceTree = ""; }; AFC2590D0988A469000655EE /* slidescreen.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = slidescreen.xml; sourceTree = ""; }; AFC2590E0988A469000655EE /* slip.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = slip.xml; sourceTree = ""; }; AFC2590F0988A469000655EE /* sonar.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = sonar.xml; sourceTree = ""; }; AFC259100988A469000655EE /* speedmine.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = speedmine.xml; sourceTree = ""; }; AFC259110988A469000655EE /* sphere.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = sphere.xml; sourceTree = ""; }; AFC259130988A469000655EE /* spheremonics.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = spheremonics.xml; sourceTree = ""; }; AFC259140988A469000655EE /* spiral.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = spiral.xml; sourceTree = ""; }; AFC259150988A469000655EE /* spotlight.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = spotlight.xml; sourceTree = ""; }; AFC259160988A469000655EE /* sproingies.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = sproingies.xml; sourceTree = ""; }; AFC259170988A469000655EE /* squiral.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = squiral.xml; sourceTree = ""; }; AFC259190988A469000655EE /* stairs.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = stairs.xml; sourceTree = ""; }; AFC2591A0988A469000655EE /* starfish.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = starfish.xml; sourceTree = ""; }; AFC2591B0988A469000655EE /* starwars.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = starwars.xml; sourceTree = ""; }; AFC2591C0988A469000655EE /* stonerview.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = stonerview.xml; sourceTree = ""; }; AFC2591D0988A469000655EE /* strange.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = strange.xml; sourceTree = ""; }; AFC2591E0988A469000655EE /* substrate.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = substrate.xml; sourceTree = ""; }; AFC2591F0988A469000655EE /* superquadrics.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = superquadrics.xml; sourceTree = ""; }; AFC259200988A469000655EE /* swirl.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = swirl.xml; sourceTree = ""; }; AFC259210988A469000655EE /* t3d.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = t3d.xml; sourceTree = ""; }; AFC259220988A469000655EE /* tangram.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = tangram.xml; sourceTree = ""; }; AFC259230988A469000655EE /* thornbird.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = thornbird.xml; sourceTree = ""; }; AFC259240988A469000655EE /* timetunnel.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = timetunnel.xml; sourceTree = ""; }; AFC259250988A469000655EE /* triangle.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = triangle.xml; sourceTree = ""; }; AFC259260988A469000655EE /* truchet.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = truchet.xml; sourceTree = ""; }; AFC259270988A469000655EE /* twang.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = twang.xml; sourceTree = ""; }; AFC259280988A469000655EE /* vermiculate.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = vermiculate.xml; sourceTree = ""; }; AFC259290988A469000655EE /* vidwhacker.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = vidwhacker.xml; sourceTree = ""; }; AFC2592A0988A469000655EE /* vines.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = vines.xml; sourceTree = ""; }; AFC2592B0988A469000655EE /* wander.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = wander.xml; sourceTree = ""; }; AFC2592C0988A469000655EE /* webcollage.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = webcollage.xml; sourceTree = ""; }; AFC2592D0988A469000655EE /* whirlwindwarp.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = whirlwindwarp.xml; sourceTree = ""; }; AFC2592F0988A469000655EE /* whirlygig.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = whirlygig.xml; sourceTree = ""; }; AFC259300988A469000655EE /* worm.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = worm.xml; sourceTree = ""; }; AFC259310988A469000655EE /* wormhole.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = wormhole.xml; sourceTree = ""; }; AFC259320988A469000655EE /* xanalogtv.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xanalogtv.xml; sourceTree = ""; }; AFC259370988A469000655EE /* xflame.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xflame.xml; sourceTree = ""; }; AFC259380988A469000655EE /* xjack.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xjack.xml; sourceTree = ""; }; AFC259390988A469000655EE /* xlyap.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xlyap.xml; sourceTree = ""; }; AFC2593A0988A469000655EE /* xmatrix.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xmatrix.xml; sourceTree = ""; }; AFC2593D0988A469000655EE /* xrayswarm.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xrayswarm.xml; sourceTree = ""; }; AFC2593F0988A469000655EE /* xspirograph.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xspirograph.xml; sourceTree = ""; }; AFC259430988A469000655EE /* zoom.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = zoom.xml; sourceTree = ""; }; AFC25B5E0988BA63000655EE /* deco.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = deco.c; path = hacks/deco.c; sourceTree = ""; }; AFC25B990988BC08000655EE /* colors.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = colors.c; path = utils/colors.c; sourceTree = ""; }; AFC25B9A0988BC08000655EE /* colors.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = colors.h; path = utils/colors.h; sourceTree = ""; }; AFC7592B158D8E8B00C5458E /* textclient.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = textclient.c; path = utils/textclient.c; sourceTree = ""; }; AFC7592C158D8E8B00C5458E /* textclient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = textclient.h; path = utils/textclient.h; sourceTree = ""; }; AFC7592F158D9A7A00C5458E /* iostextclient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iostextclient.m; sourceTree = ""; }; AFCCCBAD09BFE4B000353F4D /* rdbomb.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = rdbomb.xml; sourceTree = ""; }; AFCF83501AF5B515008BB7E1 /* SplitFlap.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SplitFlap.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFCF83521AF5B5FD008BB7E1 /* splitflap.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = splitflap.xml; sourceTree = ""; }; AFCF83531AF5B5FD008BB7E1 /* splitflap_obj.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = splitflap_obj.c; path = hacks/glx/splitflap_obj.c; sourceTree = ""; }; AFCF83541AF5B5FD008BB7E1 /* splitflap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = splitflap.c; path = hacks/glx/splitflap.c; sourceTree = ""; }; AFD51B300F063B4A00471C02 /* Photopile.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Photopile.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD51DB60F063BCE00471C02 /* photopile.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = photopile.c; path = hacks/glx/photopile.c; sourceTree = ""; }; AFD51DB80F063BE700471C02 /* photopile.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = photopile.xml; sourceTree = ""; }; AFD56E040996A03800BA26F7 /* GLText.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLText.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56E080996A07A00BA26F7 /* gltext.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = gltext.c; path = hacks/glx/gltext.c; sourceTree = ""; }; AFD56E0A0996A0ED00BA26F7 /* glut_roman.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = glut_roman.h; path = hacks/glx/glut_roman.h; sourceTree = ""; }; AFD56E0B0996A0ED00BA26F7 /* glut_stroke.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = glut_stroke.c; path = hacks/glx/glut_stroke.c; sourceTree = ""; }; AFD56E0C0996A0ED00BA26F7 /* glut_swidth.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = glut_swidth.c; path = hacks/glx/glut_swidth.c; sourceTree = ""; }; AFD56E0D0996A0ED00BA26F7 /* glutstroke.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = glutstroke.h; path = hacks/glx/glutstroke.h; sourceTree = ""; }; AFD56EBE0996A72600BA26F7 /* Braid.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Braid.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56EC10996A76F00BA26F7 /* braid.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = braid.c; path = hacks/braid.c; sourceTree = ""; }; AFD56EEA0996A95700BA26F7 /* Forest.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Forest.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56EED0996A99E00BA26F7 /* forest.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = forest.c; path = hacks/forest.c; sourceTree = ""; }; AFD56F1B0996AAFA00BA26F7 /* Vines.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Vines.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56F1F0996AB5A00BA26F7 /* vines.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = vines.c; path = hacks/vines.c; sourceTree = ""; }; AFD56F330996AB8A00BA26F7 /* Galaxy.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Galaxy.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56F360996ABD200BA26F7 /* galaxy.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = galaxy.c; path = hacks/galaxy.c; sourceTree = ""; }; AFD56F5F0996AEEE00BA26F7 /* Grav.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Grav.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56F620996AF2D00BA26F7 /* grav.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = grav.c; path = hacks/grav.c; sourceTree = ""; }; AFD56F7B0996B01600BA26F7 /* Hopalong.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Hopalong.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56F880996B06600BA26F7 /* hopalong.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = hopalong.c; path = hacks/hopalong.c; sourceTree = ""; }; AFD56F9C0996B09400BA26F7 /* Laser.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Laser.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56FA00996B0E500BA26F7 /* laser.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = laser.c; path = hacks/laser.c; sourceTree = ""; }; AFD56FB30996B10F00BA26F7 /* Lightning.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Lightning.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56FB60996B16300BA26F7 /* lightning.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = lightning.c; path = hacks/lightning.c; sourceTree = ""; }; AFD56FC90996B18F00BA26F7 /* Lisa.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Lisa.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56FCC0996B1D600BA26F7 /* lisa.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = lisa.c; path = hacks/lisa.c; sourceTree = ""; }; AFD56FDF0996B20900BA26F7 /* Lissie.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Lissie.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56FE20996B26200BA26F7 /* lissie.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = lissie.c; path = hacks/lissie.c; sourceTree = ""; }; AFD570080996B43800BA26F7 /* Penrose.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Penrose.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD5700C0996B49D00BA26F7 /* penrose.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = penrose.c; path = hacks/penrose.c; sourceTree = ""; }; AFD5701F0996B4CC00BA26F7 /* Sierpinski.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Sierpinski.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD570220996B52700BA26F7 /* sierpinski.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = sierpinski.c; path = hacks/sierpinski.c; sourceTree = ""; }; AFD570360996B56D00BA26F7 /* Sphere.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Sphere.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD5703B0996B5E300BA26F7 /* sphere.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = sphere.c; path = hacks/sphere.c; sourceTree = ""; }; AFD570530996B61600BA26F7 /* Spiral.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Spiral.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD570560996B67600BA26F7 /* spiral.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = spiral.c; path = hacks/spiral.c; sourceTree = ""; }; AFD570690996B6A300BA26F7 /* FadePlot.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FadePlot.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD5706C0996B70000BA26F7 /* fadeplot.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = fadeplot.c; path = hacks/fadeplot.c; sourceTree = ""; }; AFD5707F0996B72800BA26F7 /* Mountain.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Mountain.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD570820996B79300BA26F7 /* mountain.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = mountain.c; path = hacks/mountain.c; sourceTree = ""; }; AFD570950996B80300BA26F7 /* Triangle.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Triangle.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD570980996B86200BA26F7 /* triangle.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = triangle.c; path = hacks/triangle.c; sourceTree = ""; }; AFD570AB0996B88E00BA26F7 /* Worm.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Worm.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD570AE0996B8EF00BA26F7 /* worm.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = worm.c; path = hacks/worm.c; sourceTree = ""; }; AFD570C10996B93000BA26F7 /* Rotor.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Rotor.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD570C40996B98500BA26F7 /* rotor.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = rotor.c; path = hacks/rotor.c; sourceTree = ""; }; AFD570D90996B9F800BA26F7 /* Ant.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Ant.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD570DE0996BA5C00BA26F7 /* ant.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = ant.c; path = hacks/ant.c; sourceTree = ""; }; AFD570FA0996BBBF00BA26F7 /* Flow.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Flow.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD571010996BC3800BA26F7 /* flow.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = flow.c; path = hacks/flow.c; sourceTree = ""; }; AFD571230996BE9300BA26F7 /* Discrete.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Discrete.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD571280996BEF700BA26F7 /* discrete.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = discrete.c; path = hacks/discrete.c; sourceTree = ""; }; AFD5713C0996BF2E00BA26F7 /* Apollonian.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Apollonian.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD5713F0996BFBE00BA26F7 /* apollonian.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = apollonian.c; path = hacks/apollonian.c; sourceTree = ""; }; AFD571530996C01700BA26F7 /* Euler2D.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Euler2D.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD571560996C07F00BA26F7 /* euler2d.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = euler2d.c; path = hacks/euler2d.c; sourceTree = ""; }; AFD571690996C0CE00BA26F7 /* Thornbird.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Thornbird.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD5716B0996C16700BA26F7 /* thornbird.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = thornbird.c; path = hacks/thornbird.c; sourceTree = ""; }; AFD571C50996D9DC00BA26F7 /* Juggle.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Juggle.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD571C80996DA4600BA26F7 /* juggle.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = juggle.c; path = hacks/juggle.c; sourceTree = ""; }; AFD572320996E4A300BA26F7 /* Swirl.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Swirl.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD572350996E53E00BA26F7 /* swirl.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = swirl.c; path = hacks/swirl.c; sourceTree = ""; }; AFD5727D0996EE8500BA26F7 /* Polyominoes.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Polyominoes.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD572800996EF2B00BA26F7 /* polyominoes.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = polyominoes.c; path = hacks/polyominoes.c; sourceTree = ""; }; AFD572B50996F99600BA26F7 /* Bouboule.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Bouboule.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD572B90996FB3D00BA26F7 /* bouboule.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = bouboule.c; path = hacks/bouboule.c; sourceTree = ""; }; AFD572D20996FC0F00BA26F7 /* Crystal.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Crystal.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD572ED0997006E00BA26F7 /* crystal.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = crystal.c; path = hacks/crystal.c; sourceTree = ""; }; AFD57309099701C000BA26F7 /* Julia.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Julia.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD5730C099702C800BA26F7 /* julia.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = julia.c; path = hacks/julia.c; sourceTree = ""; }; AFD5736D0997411200BA26F7 /* Strange.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Strange.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD57371099741A200BA26F7 /* strange.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = strange.c; path = hacks/strange.c; sourceTree = ""; }; AFDA11211934424D003D397F /* aligned_malloc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = aligned_malloc.c; path = utils/aligned_malloc.c; sourceTree = ""; }; AFDA11221934424D003D397F /* aligned_malloc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = aligned_malloc.h; path = utils/aligned_malloc.h; sourceTree = ""; }; AFDA11231934424D003D397F /* thread_util.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = thread_util.c; path = utils/thread_util.c; sourceTree = ""; }; AFDA11241934424D003D397F /* thread_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = thread_util.h; path = utils/thread_util.h; sourceTree = ""; }; AFDA65A1178A52B70070D24B /* UnknownPleasures.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = UnknownPleasures.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFDA65A3178A541A0070D24B /* unknownpleasures.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = unknownpleasures.xml; sourceTree = ""; }; AFDA65A4178A541A0070D24B /* unknownpleasures.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = unknownpleasures.c; path = hacks/glx/unknownpleasures.c; sourceTree = ""; }; AFE1FD3F0981E32E00F7970E /* SaverRunner.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; path = SaverRunner.h; sourceTree = ""; }; AFE1FD400981E32E00F7970E /* SaverRunner.m */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.objc; path = SaverRunner.m; sourceTree = ""; }; AFE1FD410981E32E00F7970E /* InvertedSlider.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; path = InvertedSlider.h; sourceTree = ""; }; AFE1FD420981E32E00F7970E /* InvertedSlider.m */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.objc; path = InvertedSlider.m; sourceTree = ""; }; AFE1FD430981E32E00F7970E /* jwxyz.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; path = jwxyz.h; sourceTree = ""; }; AFE1FD440981E32E00F7970E /* jwxyz.m */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.objc; path = jwxyz.m; sourceTree = ""; }; AFE1FD470981E32E00F7970E /* PrefsReader.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; path = PrefsReader.h; sourceTree = ""; }; AFE1FD480981E32E00F7970E /* PrefsReader.m */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.objc; path = PrefsReader.m; sourceTree = ""; }; AFE1FD530981E3CB00F7970E /* erase.c */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.c; name = erase.c; path = utils/erase.c; sourceTree = ""; }; AFE1FD540981E3CB00F7970E /* erase.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = erase.h; path = utils/erase.h; sourceTree = ""; }; AFE1FD550981E3CB00F7970E /* hsv.c */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.c; name = hsv.c; path = utils/hsv.c; sourceTree = ""; }; AFE1FD560981E3CB00F7970E /* hsv.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = hsv.h; path = utils/hsv.h; sourceTree = ""; }; AFE1FD570981E3CB00F7970E /* spline.c */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.c; name = spline.c; path = utils/spline.c; sourceTree = ""; }; AFE1FD580981E3CB00F7970E /* spline.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = spline.h; path = utils/spline.h; sourceTree = ""; }; AFE1FD590981E3CB00F7970E /* utils.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = utils.h; path = utils/utils.h; sourceTree = ""; }; AFE1FD5A0981E3CB00F7970E /* version.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = version.h; path = utils/version.h; sourceTree = ""; }; AFE1FD5B0981E3CB00F7970E /* yarandom.c */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.c; name = yarandom.c; path = utils/yarandom.c; sourceTree = ""; }; AFE1FD5C0981E3CB00F7970E /* yarandom.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = yarandom.h; path = utils/yarandom.h; sourceTree = ""; }; AFE1FD620981E40800F7970E /* rorschach.c */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.c; name = rorschach.c; path = hacks/rorschach.c; sourceTree = ""; }; AFE2A46A0E2E904600ADB298 /* SkyTentacles.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SkyTentacles.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFE2A4720E2E90E300ADB298 /* skytentacles.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = skytentacles.c; path = hacks/glx/skytentacles.c; sourceTree = ""; }; AFE2A4740E2E911200ADB298 /* skytentacles.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = skytentacles.xml; sourceTree = ""; }; AFE30BFC0E52B14700CCF4A5 /* Sonar.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Sonar.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFE30BFF0E52B1DC00CCF4A5 /* sonar-icmp.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "sonar-icmp.c"; path = "hacks/glx/sonar-icmp.c"; sourceTree = ""; }; AFE30C000E52B1DC00CCF4A5 /* sonar-sim.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "sonar-sim.c"; path = "hacks/glx/sonar-sim.c"; sourceTree = ""; }; AFE30C010E52B1DC00CCF4A5 /* sonar.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = sonar.c; path = hacks/glx/sonar.c; sourceTree = ""; }; AFE6A16A0CDD78EA002805BF /* involute.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = involute.c; path = hacks/glx/involute.c; sourceTree = ""; }; AFE6A16B0CDD78EA002805BF /* involute.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = involute.h; path = hacks/glx/involute.h; sourceTree = ""; }; AFE6A1970CDD7B2E002805BF /* MoebiusGears.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MoebiusGears.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFE6A40B0CDD7BC3002805BF /* moebiusgears.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = moebiusgears.c; path = hacks/glx/moebiusgears.c; sourceTree = ""; }; AFE6A40D0CDD7BDC002805BF /* moebiusgears.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = moebiusgears.xml; sourceTree = ""; }; AFE6A42D0CDD7FAA002805BF /* Abstractile.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Abstractile.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFE6A4340CDD800F002805BF /* abstractile.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = abstractile.c; path = hacks/abstractile.c; sourceTree = ""; }; AFE6A4360CDD8026002805BF /* abstractile.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = abstractile.xml; sourceTree = ""; }; AFE943AF19DD54C1000A5E6D /* xft.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = xft.c; path = utils/xft.c; sourceTree = ""; }; AFE943B019DD54C1000A5E6D /* xft.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = xft.h; path = utils/xft.h; sourceTree = ""; }; AFE943B319DDF97F000A5E6D /* utf8wc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = utf8wc.c; path = utils/utf8wc.c; sourceTree = ""; }; AFE943B419DDF97F000A5E6D /* utf8wc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = utf8wc.h; path = utils/utf8wc.h; sourceTree = ""; }; AFEB9C3815900514003974F3 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; AFEB9C3A1590054B003974F3 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/OpenGLES.framework; sourceTree = DEVELOPER_DIR; }; AFEB9C3C15900558003974F3 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; AFEB9C3E1590056A003974F3 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; AFEB9C3F1590056A003974F3 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; AFEC68361BD6CA85004C1B64 /* OCRAStd.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = OCRAStd.otf; sourceTree = ""; }; AFEC68381BD6CDF9004C1B64 /* YearlReg.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = YearlReg.ttf; sourceTree = ""; }; AFF1BA0E19A96D8B0016A88D /* lament_model.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lament_model.c; path = hacks/glx/lament_model.c; sourceTree = ""; }; AFF2869217860E830050A578 /* QuasiCrystal.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = QuasiCrystal.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFF28694178611720050A578 /* quasicrystal.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = quasicrystal.xml; sourceTree = ""; }; AFF28695178611720050A578 /* quasicrystal.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = quasicrystal.c; path = hacks/glx/quasicrystal.c; sourceTree = ""; }; AFF3C9FB17CCAC440028F240 /* Geodesic.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Geodesic.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFF3C9FD17CCAD9A0028F240 /* geodesic.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = geodesic.xml; sourceTree = ""; }; AFF3CA0217CCAEB70028F240 /* geodesic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = geodesic.c; path = hacks/glx/geodesic.c; sourceTree = ""; }; AFF463470C4403E400EE6509 /* CWaves.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CWaves.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFF463490C44044E00EE6509 /* cwaves.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cwaves.c; path = hacks/cwaves.c; sourceTree = ""; }; AFF4634B0C44046500EE6509 /* cwaves.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = cwaves.xml; sourceTree = ""; }; AFF4636C0C440AEF00EE6509 /* GLCells.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLCells.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFF463710C440B9200EE6509 /* glcells.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glcells.c; path = hacks/glx/glcells.c; sourceTree = ""; }; AFF463730C440BAC00EE6509 /* glcells.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glcells.xml; sourceTree = ""; }; AFFAB32919158CE40020F021 /* ProjectivePlane.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ProjectivePlane.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFFAB32C19158E2A0020F021 /* projectiveplane.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = projectiveplane.xml; sourceTree = ""; }; AFFAB33119158EA80020F021 /* projectiveplane.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = projectiveplane.c; path = hacks/glx/projectiveplane.c; sourceTree = ""; }; CE3D01661B76F4C100993C75 /* TestX11.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TestX11.saver; sourceTree = BUILT_PRODUCTS_DIR; }; CE3D01681B76F83E00993C75 /* testx11.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = testx11.xml; sourceTree = ""; }; CE3D016A1B76F8E200993C75 /* testx11.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = testx11.c; path = hacks/testx11.c; sourceTree = ""; }; CE9289D119BD00E200961F22 /* async_netdb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = async_netdb.c; path = utils/async_netdb.c; sourceTree = ""; }; CE9289D219BD00E300961F22 /* async_netdb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = async_netdb.h; path = utils/async_netdb.h; sourceTree = ""; }; CEAF85661ABE4A70008F104C /* SaverListController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SaverListController.h; sourceTree = ""; }; CEE0BC611A6B0D6200C098BF /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ AF08399709930B6B00277BE9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8EF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8F0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8F1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8F2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCDC1A6B13DD00C098BF /* OpenGL.framework in Frameworks */, AF78371217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF083A3D099311D700277BE9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8F3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8F4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8F5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8F6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCDD1A6B13E700C098BF /* OpenGL.framework in Frameworks */, AF78371317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF0DC7B40C4C73F600D76972 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7BF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7C0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7C1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7C2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC901A6B100000C098BF /* OpenGL.framework in Frameworks */, AF7836C417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF0DCA4A0C4CBB0D00D76972 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA33158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA34158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32B315C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA35158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA36158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD341A6B17EF00C098BF /* OpenGL.framework in Frameworks */, AF78376617DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF1A176A0D6D6EE3008AF328 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7BB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7BC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7BD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7BE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC8F1A6B0FF600C098BF /* OpenGL.framework in Frameworks */, AF7836C317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF1AD9DF18500F9F00932759 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1ADA181850180E00932759 /* Sparkle.framework in Frameworks */, AF1ADA1F18504A4F00932759 /* ScreenSaver.framework in Frameworks */, AF1AD9E318500F9F00932759 /* Cocoa.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF2D4D8813E902F5002AA818 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7F3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AFAA6B3D177392DD00DE720C /* OpenGLES.framework in Frameworks */, AFAA6B3E177392E000DE720C /* UIKit.framework in Frameworks */, AFAA6B3F177392E400DE720C /* AssetsLibrary.framework in Frameworks */, AFAA6B40177392E800DE720C /* Foundation.framework in Frameworks */, AFAA6B41177392EC00DE720C /* CoreGraphics.framework in Frameworks */, AFAA6B42177392F000DE720C /* CoreText.framework in Frameworks */, AFAA6B43177392F600DE720C /* QuartzCore.framework in Frameworks */, AF7F54A617DC24B500CE1158 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF2D4F7713E91093002AA818 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD723158FF96500C40F17 /* libjwxyz.a in Frameworks */, AFAA6B301773876900DE720C /* OpenGLES.framework in Frameworks */, AFAA6B311773876E00DE720C /* UIKit.framework in Frameworks */, AFAA6B321773877300DE720C /* AssetsLibrary.framework in Frameworks */, AFAA6B331773877800DE720C /* Foundation.framework in Frameworks */, AFAA6B341773877C00DE720C /* CoreGraphics.framework in Frameworks */, AFAA6B351773878000DE720C /* CoreText.framework in Frameworks */, AFAA6B361773878400DE720C /* QuartzCore.framework in Frameworks */, AF7F54A517DC24A300CE1158 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF32D9E80F3AD0B40080F535 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9F3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9F4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32A315C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9F5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9F6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD231A6B174D00C098BF /* OpenGL.framework in Frameworks */, AF78375517DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF3581C91431D47B00E09C51 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD91B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD91C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD91D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD91E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCE81A6B146F00C098BF /* OpenGL.framework in Frameworks */, AF78371D17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF35820A143330F900E09C51 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA2F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA30158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32B215C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA31158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA32158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD321A6B17DD00C098BF /* OpenGL.framework in Frameworks */, AF78376417DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF35E8940E63823600691F2F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD99B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD99C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328D15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD99D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD99E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD0A1A6B165D00C098BF /* OpenGL.framework in Frameworks */, AF78373D17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF39E28A198A11F60064A58D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF39E28B198A11F60064A58D /* libjwxyz.a in Frameworks */, AF39E28C198A11F60064A58D /* ScreenSaver.framework in Frameworks */, AF39E28D198A11F60064A58D /* QuartzCore.framework in Frameworks */, AF39E28E198A11F60064A58D /* Cocoa.framework in Frameworks */, AF39E28F198A11F60064A58D /* Carbon.framework in Frameworks */, CEE0BD351A6B17F700C098BF /* OpenGL.framework in Frameworks */, AF39E290198A11F60064A58D /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF3C714D0D624BF50030CC0D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD993158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD994158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328B15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD995158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD996158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD081A6B164A00C098BF /* OpenGL.framework in Frameworks */, AF78373B17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF476FBE099D154F001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7AB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7AC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7AD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7AE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC8B1A6B0FC900C098BF /* OpenGL.framework in Frameworks */, AF7836BF17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF476FE3099D1686001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD83F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD840158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD841158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD842158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCB11A6B116100C098BF /* OpenGL.framework in Frameworks */, AF7836E517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477054099D4385001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD767158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD768158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31FF15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD769158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD76A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC791A6B0EE700C098BF /* OpenGL.framework in Frameworks */, AF7836AD17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477171099D4786001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD74F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD750158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31F915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD751158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD752158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC731A6B0E9200C098BF /* OpenGL.framework in Frameworks */, AF7836A717DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477187099D4803001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD84B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD84C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD84D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD84E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCB41A6B117F00C098BF /* OpenGL.framework in Frameworks */, AF7836E817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4771AF099D4949001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA7B158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA7C158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32C515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA7D158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA7E158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD471A6B18BB00C098BF /* OpenGL.framework in Frameworks */, AF78377817DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4771E3099D4D9A001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD743158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD744158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31F615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD745158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD746158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC701A6B0E7200C098BF /* OpenGL.framework in Frameworks */, AF7836A417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4771FA099D4E63001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7DB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7DC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7DD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7DE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC971A6B104F00C098BF /* OpenGL.framework in Frameworks */, AF7836CB17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477210099D4EE8001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA83158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA84158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32C715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA85158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA86158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD491A6B18CE00C098BF /* OpenGL.framework in Frameworks */, AF78377A17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477226099D4F67001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD717158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD718158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31EB15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD719158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD71A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC631A6B0D8100C098BF /* OpenGL.framework in Frameworks */, AF78369917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47725B099D5717001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD793158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD794158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD795158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD796158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC841A6B0F5400C098BF /* OpenGL.framework in Frameworks */, AF7836B817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477273099D57B9001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7FF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD800158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD801158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD802158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCA01A6B10A900C098BF /* OpenGL.framework in Frameworks */, AF7836D517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47728B099D5926001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7F7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7F8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7F9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7FA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC9E1A6B109600C098BF /* OpenGL.framework in Frameworks */, AF7836D317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47738A099D65A1001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD85B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD85C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD85D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD85E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCB71A6B11DC00C098BF /* OpenGL.framework in Frameworks */, AF7836EC17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4773A2099D6648001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD787158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD788158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD789158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD78A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC811A6B0F3200C098BF /* OpenGL.framework in Frameworks */, AF7836B517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4773C9099D67B9001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD71B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD71C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31EC15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD71D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD71E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC621A6B0D6200C098BF /* OpenGL.framework in Frameworks */, AF78369A17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47740A099D69E7001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7AF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7B0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7B1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7B2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC8C1A6B0FD400C098BF /* OpenGL.framework in Frameworks */, AF7836C017DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47742F099D7C70001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD79F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7A0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7A1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7A2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC881A6B0F7C00C098BF /* OpenGL.framework in Frameworks */, AF7836BC17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47744A099D7D33001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD86F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD870158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD871158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD872158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCBC1A6B121000C098BF /* OpenGL.framework in Frameworks */, AF7836F117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47748B099D89E4001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD77B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD77C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD77D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD77E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC7E1A6B0F1600C098BF /* OpenGL.framework in Frameworks */, AF7836B217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4774A1099D8A74001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7B3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7B4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7B5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7B6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC8D1A6B0FDE00C098BF /* OpenGL.framework in Frameworks */, AF7836C117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4774BC099D8B5F001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA6B158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA6C158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32C115C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA6D158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA6E158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD431A6B189500C098BF /* OpenGL.framework in Frameworks */, AF78377417DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4774D6099D8BFF001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7C3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7C4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7C5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7C6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC911A6B100900C098BF /* OpenGL.framework in Frameworks */, AF7836C517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477565099D9A1A001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7E3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7E4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7E5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7E6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC991A6B106300C098BF /* OpenGL.framework in Frameworks */, AF7836CD17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47758B099D9C28001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD803158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD804158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD805158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD806158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCA11A6B10B400C098BF /* OpenGL.framework in Frameworks */, AF7836D617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4775A7099D9CF7001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD837158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD838158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD839158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD83A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCAE1A6B114000C098BF /* OpenGL.framework in Frameworks */, AF7836E317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4775E0099D9F69001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD753158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD754158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31FA15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD755158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD756158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC741A6B0E9B00C098BF /* OpenGL.framework in Frameworks */, AF7836A817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4775FA099DA030001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD76F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD770158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD771158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD772158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC7B1A6B0EFB00C098BF /* OpenGL.framework in Frameworks */, AF7836AF17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47761B099DA26C001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7B7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7B8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7B9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7BA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC8E1A6B0FEA00C098BF /* OpenGL.framework in Frameworks */, AF7836C217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47764C099DA6D0001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD833158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD834158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD835158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD836158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCAD1A6B113500C098BF /* OpenGL.framework in Frameworks */, AF7836E217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477662099DA78E001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA3F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA40158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32B615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA41158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA42158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD391A6B182B00C098BF /* OpenGL.framework in Frameworks */, AF78376917DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477678099DA849001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7EB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7EC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7ED158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7EE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC9B1A6B107600C098BF /* OpenGL.framework in Frameworks */, AF7836CF17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477697099DAA6F001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD72F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD730158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31F115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD731158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD732158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC6B1A6B0E4200C098BF /* OpenGL.framework in Frameworks */, AF78369F17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776B2099DABDD001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD877158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD878158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD879158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD87A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCBE1A6B122600C098BF /* OpenGL.framework in Frameworks */, AF7836F317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776C8099DAC8A001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD873158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD874158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD875158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD876158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCBD1A6B121B00C098BF /* OpenGL.framework in Frameworks */, AF7836F217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776E3099DADDF001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD857158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD858158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD859158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD85A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCB61A6B119C00C098BF /* OpenGL.framework in Frameworks */, AF7836EB17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776F9099DAE7A001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD847158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD848158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD849158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD84A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCB31A6B117500C098BF /* OpenGL.framework in Frameworks */, AF7836E717DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477715099DAF9F001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD74B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD74C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31F815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD74D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD74E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC721A6B0E8800C098BF /* OpenGL.framework in Frameworks */, AF7836A617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47772B099DB044001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD83B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD83C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD83D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD83E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCAF1A6B114D00C098BF /* OpenGL.framework in Frameworks */, AF7836E417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47775A099DB61E001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7A7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7A8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7A9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7AA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC8A1A6B0FBE00C098BF /* OpenGL.framework in Frameworks */, AF7836BE17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47777C099DB965001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD747158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD748158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31F715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD749158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD74A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC711A6B0E7D00C098BF /* OpenGL.framework in Frameworks */, AF7836A517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477798099DBA90001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD77F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD780158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD781158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD782158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC7F1A6B0F1F00C098BF /* OpenGL.framework in Frameworks */, AF7836B317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4777D9099DC183001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD737158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD738158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31F315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD739158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD73A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC6D1A6B0E5400C098BF /* OpenGL.framework in Frameworks */, AF7836A117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4778B3099DDB79001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7E7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7E8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7E9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7EA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC9A1A6B106C00C098BF /* OpenGL.framework in Frameworks */, AF7836CE17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4778CF099DDCAE001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD867158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD868158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD869158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD86A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCBA1A6B11FB00C098BF /* OpenGL.framework in Frameworks */, AF7836EF17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4778F0099DDDC8001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD75B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD75C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31FC15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD75D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD75E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC761A6B0EAE00C098BF /* OpenGL.framework in Frameworks */, AF7836AA17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477911099DE379001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA43158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA44158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32B715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA45158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA46158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD3A1A6B183600C098BF /* OpenGL.framework in Frameworks */, AF78376A17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477932099DE4C7001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD827158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD828158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD829158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD82A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCAA1A6B111200C098BF /* OpenGL.framework in Frameworks */, AF7836DF17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4808BF098C3B6C00FB32B8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF480C50098E301400FB32B8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD79B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD79C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD79D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD79E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC861A6B0F6700C098BF /* OpenGL.framework in Frameworks */, AF7836BA17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF480D79098EEDDE00FB32B8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD897158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD898158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD899158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD89A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCC61A6B12F700C098BF /* OpenGL.framework in Frameworks */, AF7836FB17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4810F309909FBA00FB32B8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD933158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD934158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD935158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD936158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCEE1A6B153800C098BF /* OpenGL.framework in Frameworks */, AF78372317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4812590990CE2700FB32B8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD957158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD958158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327C15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD959158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD95A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCF71A6B159600C098BF /* OpenGL.framework in Frameworks */, AF78372C17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4812BB0990D3D900FB32B8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9D7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9D8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329C15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9D9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9DA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD1A1A6B16F800C098BF /* OpenGL.framework in Frameworks */, AF78374D17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF48DEF70A0C25E000F94CF9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD97B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD97C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD97D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD97E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD021A6B160D00C098BF /* OpenGL.framework in Frameworks */, AF78373517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4A3451102A593600A81B2A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA1F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA20158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32AE15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA21158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA22158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD2E1A6B17B600C098BF /* OpenGL.framework in Frameworks */, AF78376017DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4FD6EE0CE7A486005EE58E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9AF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9B0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329215C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9B1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9B2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD101A6B169600C098BF /* OpenGL.framework in Frameworks */, AF78374317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4FF4C20D52CBDE00666F98 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD92F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD930158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD931158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD932158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCED1A6B152E00C098BF /* OpenGL.framework in Frameworks */, AF78372217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF5C9B011A0CCE6E00B0147A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF5C9B021A0CCE6E00B0147A /* libjwxyz.a in Frameworks */, AF5C9B031A0CCE6E00B0147A /* ScreenSaver.framework in Frameworks */, AF5C9B041A0CCE6E00B0147A /* QuartzCore.framework in Frameworks */, AF5C9B051A0CCE6E00B0147A /* Cocoa.framework in Frameworks */, AF5C9B061A0CCE6E00B0147A /* Carbon.framework in Frameworks */, CEE0BCE71A6B144800C098BF /* OpenGL.framework in Frameworks */, AF5C9B071A0CCE6E00B0147A /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF63A7F91AB4EDDB00593C75 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF63A7FA1AB4EDDB00593C75 /* libjwxyz.a in Frameworks */, AF63A7FB1AB4EDDB00593C75 /* ScreenSaver.framework in Frameworks */, AF63A7FC1AB4EDDB00593C75 /* QuartzCore.framework in Frameworks */, AF63A7FD1AB4EDDB00593C75 /* Cocoa.framework in Frameworks */, AF63A7FE1AB4EDDB00593C75 /* Carbon.framework in Frameworks */, AF63A7FF1AB4EDDB00593C75 /* OpenGL.framework in Frameworks */, AF63A8001AB4EDDB00593C75 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6423FA099FF9C2000F4CD4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD943158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD944158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD945158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD946158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCF21A6B156200C098BF /* OpenGL.framework in Frameworks */, AF78372717DBA580003B9FC0 /* libz.dylib in Frameworks */, AF84FD4209B1209E00F3AB06 /* GLUT.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6425D409A18855000F4CD4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA53158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA54158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32BB15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA55158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA56158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD3D1A6B185600C098BF /* OpenGL.framework in Frameworks */, AF78376E17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6425F409A189EC000F4CD4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD807158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD808158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD809158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD80A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCA21A6B10BF00C098BF /* OpenGL.framework in Frameworks */, AF7836D717DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64261709A18D6C000F4CD4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA4F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA50158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32BA15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA51158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA52158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD3C1A6B184C00C098BF /* OpenGL.framework in Frameworks */, AF78376D17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64263409A18F54000F4CD4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7D3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7D4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7D5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7D6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC951A6B103B00C098BF /* OpenGL.framework in Frameworks */, AF7836C917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64265709A19229000F4CD4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7D7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7D8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7D9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7DA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC961A6B104500C098BF /* OpenGL.framework in Frameworks */, AF7836CA17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64268309A194B0000F4CD4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD78B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD78C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD78D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD78E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC821A6B0F3C00C098BF /* OpenGL.framework in Frameworks */, AF7836B617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64277909A1D37A000F4CD4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD82B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD82C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD82D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD82E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCAB1A6B111E00C098BF /* OpenGL.framework in Frameworks */, AF7836E017DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6427B009A2DE36000F4CD4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA3B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA3C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32B515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA3D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA3E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD381A6B182100C098BF /* OpenGL.framework in Frameworks */, AF78376817DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF68A48619196CF800D41CD1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF68A48719196CF800D41CD1 /* libjwxyz.a in Frameworks */, AF68A48819196CF800D41CD1 /* ScreenSaver.framework in Frameworks */, AF68A48919196CF800D41CD1 /* QuartzCore.framework in Frameworks */, AF68A48A19196CF800D41CD1 /* Cocoa.framework in Frameworks */, AF68A48B19196CF800D41CD1 /* Carbon.framework in Frameworks */, CEE0BCB01A6B115700C098BF /* OpenGL.framework in Frameworks */, AF68A48C19196CF800D41CD1 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF73FF2A1A09877F00E485E9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF73FF2B1A09877F00E485E9 /* libjwxyz.a in Frameworks */, AF73FF2C1A09877F00E485E9 /* ScreenSaver.framework in Frameworks */, AF73FF2D1A09877F00E485E9 /* QuartzCore.framework in Frameworks */, AF73FF2E1A09877F00E485E9 /* Cocoa.framework in Frameworks */, AF73FF2F1A09877F00E485E9 /* Carbon.framework in Frameworks */, CEE0BC6A1A6B0E3800C098BF /* OpenGL.framework in Frameworks */, AF73FF301A09877F00E485E9 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7511071782B5B900380EA1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF7511081782B5B900380EA1 /* libjwxyz.a in Frameworks */, AF7511091782B5B900380EA1 /* ScreenSaver.framework in Frameworks */, AF75110A1782B5B900380EA1 /* QuartzCore.framework in Frameworks */, AF75110B1782B5B900380EA1 /* Cocoa.framework in Frameworks */, AF75110C1782B5B900380EA1 /* Carbon.framework in Frameworks */, CEE0BD0C1A6B167000C098BF /* OpenGL.framework in Frameworks */, AF78373F17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7776EE09B63ABF00EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7EF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7F0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7F1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7F2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC9C1A6B108000C098BF /* OpenGL.framework in Frameworks */, AF7836D117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77772209B6416100EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8C3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8C4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8C5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8C6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCD11A6B136300C098BF /* OpenGL.framework in Frameworks */, AF78370617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77774609B6446500EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD94B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD94C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327915C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD94D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD94E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCF41A6B157600C098BF /* OpenGL.framework in Frameworks */, AF78372917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77777D09B6497800EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD95B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD95C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327D15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD95D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD95E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCFD1A6B15D200C098BF /* OpenGL.framework in Frameworks */, AF78372D17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77779709B64A5200EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9B7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9B8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9B9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9BA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD121A6B16A800C098BF /* OpenGL.framework in Frameworks */, AF78374517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7777B109B64B2600EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA17158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA18158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32AC15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA19158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA1A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD2C1A6B17A200C098BF /* OpenGL.framework in Frameworks */, AF78375E17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7777D909B64C6B00EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD97F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD980158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD981158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD982158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD031A6B161700C098BF /* OpenGL.framework in Frameworks */, AF78373617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7777F309B64E3100EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD94F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD950158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327A15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD951158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD952158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCF51A6B158000C098BF /* OpenGL.framework in Frameworks */, AF78372A17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77781A09B6504400EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA13158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA14158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32AB15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA15158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA16158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD2B1A6B179900C098BF /* OpenGL.framework in Frameworks */, AF78375D17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77784D09B6528100EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD913158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD914158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD915158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD916158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCE51A6B143500C098BF /* OpenGL.framework in Frameworks */, AF78371B17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77786909B6536000EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD937158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD938158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD939158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD93A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCEF1A6B154200C098BF /* OpenGL.framework in Frameworks */, AF78372417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77788709B6563500EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD783158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD784158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD785158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD786158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC801A6B0F2900C098BF /* OpenGL.framework in Frameworks */, AF7836B417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7778AD09B659C800EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD733158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD734158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31F215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD735158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD736158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC6C1A6B0E4B00C098BF /* OpenGL.framework in Frameworks */, AF7836A017DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF78D17D142DD8F3002AAF77 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD98B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD98C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328915C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD98D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD98E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD061A6B163700C098BF /* OpenGL.framework in Frameworks */, AF78373917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF794F6C099748450059A8B0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD88F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD890158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD891158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD892158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCC41A6B126D00C098BF /* OpenGL.framework in Frameworks */, AF7836F917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF794F9609974A320059A8B0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8A3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8A4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8A5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8A6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCC91A6B131300C098BF /* OpenGL.framework in Frameworks */, AF7836FE17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF794FD509974FA60059A8B0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8BB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8BC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8BD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8BE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCCF1A6B135000C098BF /* OpenGL.framework in Frameworks */, AF78370417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7ACFC819FF0A9200BD752B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF7ACFC919FF0A9200BD752B /* libjwxyz.a in Frameworks */, AF7ACFCA19FF0A9200BD752B /* ScreenSaver.framework in Frameworks */, AF7ACFCB19FF0A9200BD752B /* QuartzCore.framework in Frameworks */, AF7ACFCC19FF0A9200BD752B /* Cocoa.framework in Frameworks */, AF7ACFCD19FF0A9200BD752B /* Carbon.framework in Frameworks */, CEE0BCF91A6B15AD00C098BF /* OpenGL.framework in Frameworks */, AF7ACFCE19FF0A9200BD752B /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF918989158FC00A002B5D1E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF918B96158FD0EA002B5D1E /* libjwxyz.a in Frameworks */, AFEB9C3B1590054B003974F3 /* OpenGLES.framework in Frameworks */, AFEB9C3915900514003974F3 /* UIKit.framework in Frameworks */, AF561DF815969C5B007CA5ED /* AssetsLibrary.framework in Frameworks */, AFEB9C3D15900558003974F3 /* Foundation.framework in Frameworks */, AFEB9C401590056A003974F3 /* CoreGraphics.framework in Frameworks */, AF0FAF3C159BAC7C00BCE2F7 /* CoreText.framework in Frameworks */, AFEB9C411590056A003974F3 /* QuartzCore.framework in Frameworks */, AF7F54A417DC249500CE1158 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975735099C317000B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7A3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7A4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7A5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7A6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC891A6B0FB300C098BF /* OpenGL.framework in Frameworks */, AF7836BD17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF97577D099C374A00B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7CF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7D0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7D1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7D2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC941A6B103100C098BF /* OpenGL.framework in Frameworks */, AF7836C817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9757CA099C3E6300B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD80B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD80C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD80D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD80E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCA31A6B10CB00C098BF /* OpenGL.framework in Frameworks */, AF7836D817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975810099C41D500B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD85F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD860158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD861158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD862158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCB81A6B11E700C098BF /* OpenGL.framework in Frameworks */, AF7836ED17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF97586D099C475900B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD81F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD820158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD821158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD822158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCA81A6B10FD00C098BF /* OpenGL.framework in Frameworks */, AF7836DD17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975A3E099C681F00B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7CB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7CC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7CD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7CE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC931A6B102600C098BF /* OpenGL.framework in Frameworks */, AF7836C717DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975A74099C6AB200B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD773158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD774158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD775158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD776158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC7C1A6B0F0400C098BF /* OpenGL.framework in Frameworks */, AF7836B017DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975A8E099C6BC300B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD72B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD72C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31F015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD72D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD72E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC691A6B0E2D00C098BF /* OpenGL.framework in Frameworks */, AF78369E17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975ADF099C6EB100B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD777158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD778158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD779158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD77A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC7D1A6B0F0D00C098BF /* OpenGL.framework in Frameworks */, AF7836B117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975B04099C6FE400B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7C7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7C8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7C9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7CA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC921A6B101900C098BF /* OpenGL.framework in Frameworks */, AF7836C617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975C1A099C8C1500B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD797158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD798158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD799158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD79A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC851A6B0F5D00C098BF /* OpenGL.framework in Frameworks */, AF7836B917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975C46099C8DCF00B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD78F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD790158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD791158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD792158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC831A6B0F4500C098BF /* OpenGL.framework in Frameworks */, AF7836B717DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975C66099C8F3F00B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7DF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7E0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7E1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7E2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC981A6B105800C098BF /* OpenGL.framework in Frameworks */, AF7836CC17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975D5B099CA0F000B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD813158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD814158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD815158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD816158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCA51A6B10DE00C098BF /* OpenGL.framework in Frameworks */, AF7836DA17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF976FBA0989CAA2001F8B92 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD763158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD764158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31FE15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD765158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD766158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC781A6B0EDD00C098BF /* OpenGL.framework in Frameworks */, AF7836AC17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9770390989D1E6001F8B92 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD817158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD818158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD819158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD81A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCA61A6B10E900C098BF /* OpenGL.framework in Frameworks */, AF7836DB17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9770760989D2F6001F8B92 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD727158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD728158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31EF15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD729158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD72A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC681A6B0E1800C098BF /* OpenGL.framework in Frameworks */, AF78369D17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9771D50989DC4A001F8B92 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFEB9C37158FFF88003974F3 /* ScreenSaver.framework in Frameworks */, AF2C31E615C0F7FE007A6896 /* QuartzCore.framework in Frameworks */, AF918B99158FF045002B5D1E /* Cocoa.framework in Frameworks */, AF918B9A158FF04C002B5D1E /* Carbon.framework in Frameworks */, AF78369717DB9F25003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF998EE20A083DB30051049D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA2B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA2C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32B115C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA2D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA2E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD311A6B17D300C098BF /* OpenGL.framework in Frameworks */, AF78376317DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D466E09B5109C006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD75F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD760158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31FD15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD761158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD762158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC771A6B0ED300C098BF /* OpenGL.framework in Frameworks */, AF7836AB17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D474C09B5300A006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD823158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD824158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD825158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD826158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCA91A6B110700C098BF /* OpenGL.framework in Frameworks */, AF7836DE17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D476709B53166006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD87B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD87C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD87D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD87E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCBF1A6B123500C098BF /* OpenGL.framework in Frameworks */, AF7836F417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D48E309B53322006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD73F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD740158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31F515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD741158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD742158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC6F1A6B0E6700C098BF /* OpenGL.framework in Frameworks */, AF7836A317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D48FC09B535DA006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD76B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD76C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD76D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD76E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC7A1A6B0EF100C098BF /* OpenGL.framework in Frameworks */, AF7836AE17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D493309B53CBA006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD80F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD810158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD811158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD812158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCA41A6B10D400C098BF /* OpenGL.framework in Frameworks */, AF7836D917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D495C09B53FC9006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD81B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD81C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD81D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD81E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCA71A6B10F300C098BF /* OpenGL.framework in Frameworks */, AF7836DC17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D497409B5411D006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD843158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD844158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD845158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD846158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCB21A6B116B00C098BF /* OpenGL.framework in Frameworks */, AF7836E617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D499F09B544C2006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD82F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD830158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD831158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD832158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCAC1A6B112A00C098BF /* OpenGL.framework in Frameworks */, AF7836E117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4C7109B59F27006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD86B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD86C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD86D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD86E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCBB1A6B120600C098BF /* OpenGL.framework in Frameworks */, AF7836F017DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4CEF09B5AA8E006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7FB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7FC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7FD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7FE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC9F1A6B10A000C098BF /* OpenGL.framework in Frameworks */, AF7836D417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4D8709B5B2DC006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD863158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD864158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD865158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD866158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCB91A6B11F100C098BF /* OpenGL.framework in Frameworks */, AF7836EE17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4DB809B5B71E006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD73B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD73C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31F415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD73D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD73E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC6E1A6B0E5E00C098BF /* OpenGL.framework in Frameworks */, AF7836A217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4DF609B5BB19006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD71F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD720158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31ED15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD721158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD722158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC671A6B0E0600C098BF /* OpenGL.framework in Frameworks */, AF78369B17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9E7EBC190F4C1B00A8B01F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA339370B058505002B0E7D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD84F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD850158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD851158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD852158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCB51A6B118C00C098BF /* OpenGL.framework in Frameworks */, AF7836E917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA33BC50B058740002B0E7D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD853158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD854158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD855158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD856158FF96500C40F17 /* Carbon.framework in Frameworks */, AF7836EA17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5594F099330B000F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD90F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD910158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD911158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD912158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCE41A6B142C00C098BF /* OpenGL.framework in Frameworks */, AF78371A17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559740993317900F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9BB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9BC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9BD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9BE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD131A6B16B200C098BF /* OpenGL.framework in Frameworks */, AF78374617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559990993322100F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA1B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA1C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32AD15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA1D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA1E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD2D1A6B17AD00C098BF /* OpenGL.framework in Frameworks */, AF78375F17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559BC0993328000F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9C7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9C8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9C9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9CA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD161A6B16D000C098BF /* OpenGL.framework in Frameworks */, AF78374917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559D60993330600F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9EF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9F0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32A215C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9F1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9F2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD221A6B174400C098BF /* OpenGL.framework in Frameworks */, AF78375417DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A0A0993340300F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA0F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA10158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32AA15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA11158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA12158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD2A1A6B178F00C098BF /* OpenGL.framework in Frameworks */, AF78375C17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A27099334A000F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA0B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA0C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32A915C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA0D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA0E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD291A6B178600C098BF /* OpenGL.framework in Frameworks */, AF78375B17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A800993364300F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9A7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9A8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329015C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9A9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9AA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD0E1A6B168200C098BF /* OpenGL.framework in Frameworks */, AF78374117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55AD609933CEF00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD90B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD90C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD90D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD90E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCE31A6B142200C098BF /* OpenGL.framework in Frameworks */, AF78371917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B1309933E0500F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD977158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD978158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD979158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD97A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD011A6B160200C098BF /* OpenGL.framework in Frameworks */, AF78373417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B2C09933E8D00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9E7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9E8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32A015C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9E9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9EA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD1F1A6B172800C098BF /* OpenGL.framework in Frameworks */, AF78375117DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B8009933F7200F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9FF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA00158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32A615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA01158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA02158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD251A6B176000C098BF /* OpenGL.framework in Frameworks */, AF78375817DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B9809933FDA00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD95F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD960158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327E15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD961158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD962158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCFA1A6B15B600C098BF /* OpenGL.framework in Frameworks */, AF78372E17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55BB2099340CE00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD917158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD918158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD919158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD91A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCE61A6B143E00C098BF /* OpenGL.framework in Frameworks */, AF78371C17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55BEB0993429100F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9B3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9B4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329315C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9B5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9B6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD111A6B169F00C098BF /* OpenGL.framework in Frameworks */, AF78374417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55C150993431300F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD93F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD940158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD941158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD942158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCF11A6B155700C098BF /* OpenGL.framework in Frameworks */, AF78372617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55C7E099349A600F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD983158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD984158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD985158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD986158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD041A6B162400C098BF /* OpenGL.framework in Frameworks */, AF78373717DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55CB009934BB200F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD907158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD908158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD909158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD90A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCE21A6B141900C098BF /* OpenGL.framework in Frameworks */, AF78371817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55CD309934CE400F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA4B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA4C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32B915C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA4D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA4E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD361A6B180D00C098BF /* OpenGL.framework in Frameworks */, AF78376C17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D430993565300F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9FB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9FC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32A515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9FD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9FE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD241A6B175700C098BF /* OpenGL.framework in Frameworks */, AF78375717DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D690993584B00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD927158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD928158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD929158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD92A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCEB1A6B151A00C098BF /* OpenGL.framework in Frameworks */, AF78372017DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D86099358C400F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA07158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA08158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32A815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA09158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA0A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD281A6B177C00C098BF /* OpenGL.framework in Frameworks */, AF78375A17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55DCF09935D7000F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9AB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9AC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329115C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9AD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9AE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD0F1A6B168D00C098BF /* OpenGL.framework in Frameworks */, AF78374217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55DF809935E4900F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9EB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9EC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32A115C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9ED158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9EE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD211A6B173A00C098BF /* OpenGL.framework in Frameworks */, AF78375317DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E1409935EDC00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD93B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD93C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD93D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD93E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCF01A6B154E00C098BF /* OpenGL.framework in Frameworks */, AF78372517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E3709935F8E00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD963158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD964158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327F15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD965158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD966158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCFB1A6B15BF00C098BF /* OpenGL.framework in Frameworks */, AF78372F17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E5509935FF900F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD953158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD954158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327B15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD955158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD956158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCF61A6B158C00C098BF /* OpenGL.framework in Frameworks */, AF78372B17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55ED8099360E300F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD903158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD904158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD905158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD906158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCE11A6B140F00C098BF /* OpenGL.framework in Frameworks */, AF78371717DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F13099361B700F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD997158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD998158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328C15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD999158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD99A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD091A6B165300C098BF /* OpenGL.framework in Frameworks */, AF78373C17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F310993622F00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9A3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9A4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328F15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9A5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9A6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD0D1A6B167900C098BF /* OpenGL.framework in Frameworks */, AF78374017DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F490993629000F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD98F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD990158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328A15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD991158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD992158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD071A6B164000C098BF /* OpenGL.framework in Frameworks */, AF78373A17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F790993643600F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD973158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD974158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328315C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD975158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD976158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD001A6B15F800C098BF /* OpenGL.framework in Frameworks */, AF78373317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55FDA09936BFA00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD92B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD92C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD92D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD92E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCEC1A6B152300C098BF /* OpenGL.framework in Frameworks */, AF78372117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5600009936C6D00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD96F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD970158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328215C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD971158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD972158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCFF1A6B15EE00C098BF /* OpenGL.framework in Frameworks */, AF78373217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5601B09936CC800F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8FB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8FC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8FD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8FE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCDF1A6B13FC00C098BF /* OpenGL.framework in Frameworks */, AF78371517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5603909936D5100F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD947158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD948158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD949158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD94A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCF31A6B156C00C098BF /* OpenGL.framework in Frameworks */, AF78372817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5605109936E2100F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8E3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8E4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8E5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8E6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCD91A6B13C000C098BF /* OpenGL.framework in Frameworks */, AF78370F17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5606909936F3800F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8EB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8EC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8ED158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8EE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCDB1A6B13D300C098BF /* OpenGL.framework in Frameworks */, AF78371117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA560B50993718D00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9DF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9E0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329E15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9E1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9E2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD1C1A6B170A00C098BF /* OpenGL.framework in Frameworks */, AF78374F17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA561040993781600F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9C3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9C4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9C5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9C6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD151A6B16C500C098BF /* OpenGL.framework in Frameworks */, AF78374817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5615F09937C0D00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8F7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8F8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8F9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8FA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCDE1A6B13F100C098BF /* OpenGL.framework in Frameworks */, AF78371417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5618209937CF100F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9CB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9CC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329915C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9CD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9CE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD171A6B16DA00C098BF /* OpenGL.framework in Frameworks */, AF78374A17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA561A409937D7E00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9DB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9DC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329D15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9DD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9DE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD1B1A6B170100C098BF /* OpenGL.framework in Frameworks */, AF78374E17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5620E0993849F00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9E3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9E4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329F15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9E5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9E6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD1E1A6B171E00C098BF /* OpenGL.framework in Frameworks */, AF78375017DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562260993852500F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9D3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9D4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329B15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9D5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9D6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD191A6B16EE00C098BF /* OpenGL.framework in Frameworks */, AF78374C17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562C6099392C600F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8FF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD900158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD901158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD902158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCE01A6B140500C098BF /* OpenGL.framework in Frameworks */, AF78371617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562E1099393C900F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8E7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8E8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8E9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8EA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCDA1A6B13C900C098BF /* OpenGL.framework in Frameworks */, AF78371017DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562F90993943B00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA23158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA24158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32AF15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA25158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA26158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD2F1A6B17BF00C098BF /* OpenGL.framework in Frameworks */, AF78376117DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5631B0993951000F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD91F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD920158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD921158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD922158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCE91A6B147900C098BF /* OpenGL.framework in Frameworks */, AF78371E17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA56338099395ED00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD96B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD96C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328115C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD96D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD96E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCFE1A6B15E300C098BF /* OpenGL.framework in Frameworks */, AF78373117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA56358099396C000F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD923158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD924158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD925158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD926158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCEA1A6B150F00C098BF /* OpenGL.framework in Frameworks */, AF78371F17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA56380099397B300F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA27158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA28158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32B015C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA29158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA2A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD301A6B17C900C098BF /* OpenGL.framework in Frameworks */, AF78376217DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA563AB099398BB00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD99F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9A0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328E15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9A1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9A2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD0B1A6B166700C098BF /* OpenGL.framework in Frameworks */, AF78373E17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFB591AF178B812C00EA4005 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFB591B0178B812C00EA4005 /* libjwxyz.a in Frameworks */, AFB591B1178B812C00EA4005 /* ScreenSaver.framework in Frameworks */, AFB591B2178B812C00EA4005 /* QuartzCore.framework in Frameworks */, AFB591B3178B812C00EA4005 /* Cocoa.framework in Frameworks */, AFB591B4178B812C00EA4005 /* Carbon.framework in Frameworks */, CEE0BC871A6B0F7000C098BF /* OpenGL.framework in Frameworks */, AF7836BB17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFBFE755178642DC00432B21 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFBFE756178642DC00432B21 /* ScreenSaver.framework in Frameworks */, AFBFE757178642DC00432B21 /* QuartzCore.framework in Frameworks */, AFBFE758178642DC00432B21 /* Cocoa.framework in Frameworks */, AFBFE759178642DC00432B21 /* Carbon.framework in Frameworks */, CEE0BC661A6B0DBF00C098BF /* OpenGL.framework in Frameworks */, AF78369C17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFBFE775178647FE00432B21 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFBFE776178647FE00432B21 /* ScreenSaver.framework in Frameworks */, AFBFE777178647FE00432B21 /* QuartzCore.framework in Frameworks */, AFBFE778178647FE00432B21 /* Cocoa.framework in Frameworks */, AFBFE779178647FE00432B21 /* Carbon.framework in Frameworks */, CEE0BC9D1A6B108B00C098BF /* OpenGL.framework in Frameworks */, AF7836D217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFCF83431AF5B515008BB7E1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFCF83441AF5B515008BB7E1 /* libjwxyz.a in Frameworks */, AFCF83451AF5B515008BB7E1 /* ScreenSaver.framework in Frameworks */, AFCF83461AF5B515008BB7E1 /* QuartzCore.framework in Frameworks */, AFCF83471AF5B515008BB7E1 /* Cocoa.framework in Frameworks */, AFCF83481AF5B515008BB7E1 /* Carbon.framework in Frameworks */, AFCF83491AF5B515008BB7E1 /* OpenGL.framework in Frameworks */, AFCF834A1AF5B515008BB7E1 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD51B240F063B4A00471C02 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9CF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9D0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329A15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9D1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9D2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD181A6B16E300C098BF /* OpenGL.framework in Frameworks */, AF78374B17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56DF90996A03800BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD987158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD988158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD989158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD98A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD051A6B162E00C098BF /* OpenGL.framework in Frameworks */, AF78373817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56EB60996A72600BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD887158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD888158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD889158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD88A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCC21A6B125800C098BF /* OpenGL.framework in Frameworks */, AF7836F717DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56EE20996A95700BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA47158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA48158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32B815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA49158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA4A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD3B1A6B184100C098BF /* OpenGL.framework in Frameworks */, AF78376B17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F130996AAFA00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA7F158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA80158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32C615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA81158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA82158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD481A6B18C400C098BF /* OpenGL.framework in Frameworks */, AF78377917DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F2B0996AB8A00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8AB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8AC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8AD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8AE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCCB1A6B132800C098BF /* OpenGL.framework in Frameworks */, AF78370017DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F570996AEEE00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8AF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8B0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8B1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8B2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCCC1A6B133300C098BF /* OpenGL.framework in Frameworks */, AF78370117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F730996B01600BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8B3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8B4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8B5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8B6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCCD1A6B133D00C098BF /* OpenGL.framework in Frameworks */, AF78370217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F940996B09400BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA5B158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA5C158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32BD15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA5D158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA5E158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD3F1A6B186C00C098BF /* OpenGL.framework in Frameworks */, AF78377017DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FAB0996B10F00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA5F158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA60158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32BE15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA61158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA62158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD401A6B187500C098BF /* OpenGL.framework in Frameworks */, AF78377117DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FC10996B18F00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA63158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA64158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32BF15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA65158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA66158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD411A6B188100C098BF /* OpenGL.framework in Frameworks */, AF78377217DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FD70996B20900BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA67158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA68158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32C015C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA69158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA6A158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD421A6B188B00C098BF /* OpenGL.framework in Frameworks */, AF78377317DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570000996B43800BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8C7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8C8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8C9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8CA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCD21A6B136C00C098BF /* OpenGL.framework in Frameworks */, AF78370717DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570170996B4CC00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8CF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8D0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8D1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8D2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCD41A6B137F00C098BF /* OpenGL.framework in Frameworks */, AF78370917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5702E0996B56D00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA73158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA74158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32C315C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA75158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA76158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD451A6B18A900C098BF /* OpenGL.framework in Frameworks */, AF78377617DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5704B0996B61600BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA77158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA78158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32C415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA79158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA7A158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD461A6B18B200C098BF /* OpenGL.framework in Frameworks */, AF78377717DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570610996B6A300BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD89F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8A0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8A1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8A2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCC81A6B130A00C098BF /* OpenGL.framework in Frameworks */, AF7836FD17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570770996B72700BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8BF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8C0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8C1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8C2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCD01A6B135900C098BF /* OpenGL.framework in Frameworks */, AF78370517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5708D0996B80300BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8DF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8E0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8E1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8E2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCD81A6B13B500C098BF /* OpenGL.framework in Frameworks */, AF78370D17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570A30996B88E00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA87158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA88158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32C815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA89158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA8A158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD4A1A6B18D700C098BF /* OpenGL.framework in Frameworks */, AF78377B17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570B90996B93000BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA6F158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA70158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32C215C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA71158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA72158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD441A6B189F00C098BF /* OpenGL.framework in Frameworks */, AF78377517DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570D10996B9F800BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA37158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA38158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32B415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA39158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA3A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD371A6B181700C098BF /* OpenGL.framework in Frameworks */, AF78376717DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570F20996BBBF00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8A7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8A8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8A9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8AA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCCA1A6B131E00C098BF /* OpenGL.framework in Frameworks */, AF7836FF17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5711B0996BE9300BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD893158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD894158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD895158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD896158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCC51A6B127700C098BF /* OpenGL.framework in Frameworks */, AF7836FA17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD571340996BF2E00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD87F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD880158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD881158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD882158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCC01A6B124400C098BF /* OpenGL.framework in Frameworks */, AF7836F517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5714B0996C01700BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD89B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD89C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD89D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD89E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCC71A6B130000C098BF /* OpenGL.framework in Frameworks */, AF7836FC17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD571610996C0CE00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8DB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8DC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8DD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8DE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCD71A6B13AA00C098BF /* OpenGL.framework in Frameworks */, AF78370C17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD571BD0996D9DC00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA57158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA58158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32BC15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA59158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA5A158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD3E1A6B186200C098BF /* OpenGL.framework in Frameworks */, AF78376F17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5722A0996E4A300BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8D7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8D8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8D9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8DA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCD61A6B13A100C098BF /* OpenGL.framework in Frameworks */, AF78370B17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572750996EE8500BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8CB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8CC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8CD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8CE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCD31A6B137600C098BF /* OpenGL.framework in Frameworks */, AF78370817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572AD0996F99600BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD883158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD884158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD885158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD886158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCC11A6B124D00C098BF /* OpenGL.framework in Frameworks */, AF7836F617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572CA0996FC0F00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD88B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD88C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD88D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD88E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCC31A6B126200C098BF /* OpenGL.framework in Frameworks */, AF7836F817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD57301099701C000BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8B7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8B8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8B9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8BA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCCE1A6B134600C098BF /* OpenGL.framework in Frameworks */, AF78370317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD573650997411200BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8D3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8D4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8D5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8D6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCD51A6B138800C098BF /* OpenGL.framework in Frameworks */, AF78370A17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFDA6596178A52B70070D24B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFDA6597178A52B70070D24B /* libjwxyz.a in Frameworks */, AFDA6598178A52B70070D24B /* ScreenSaver.framework in Frameworks */, AFDA6599178A52B70070D24B /* QuartzCore.framework in Frameworks */, AFDA659A178A52B70070D24B /* Cocoa.framework in Frameworks */, AFDA659B178A52B70070D24B /* Carbon.framework in Frameworks */, CEE0BD331A6B17E600C098BF /* OpenGL.framework in Frameworks */, AF78376517DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE2A45E0E2E904600ADB298 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA03158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA04158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32A715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA05158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA06158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD261A6B176900C098BF /* OpenGL.framework in Frameworks */, AF78375917DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE30BF00E52B14700CCF4A5 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9F7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9F8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32A415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9F9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9FA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD271A6B177200C098BF /* OpenGL.framework in Frameworks */, AF78375617DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE6A18B0CDD7B2E002805BF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9BF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9C0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9C1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9C2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD141A6B16BB00C098BF /* OpenGL.framework in Frameworks */, AF78374717DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE6A4240CDD7FAA002805BF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD713158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD714158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31EA15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD715158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD716158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC641A6B0DA100C098BF /* OpenGL.framework in Frameworks */, AF78369817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF2868717860E830050A578 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFF2868817860E830050A578 /* libjwxyz.a in Frameworks */, AFF2868917860E830050A578 /* ScreenSaver.framework in Frameworks */, AFF2868A17860E830050A578 /* QuartzCore.framework in Frameworks */, AFF2868B17860E830050A578 /* Cocoa.framework in Frameworks */, AFF2868C17860E830050A578 /* Carbon.framework in Frameworks */, CEE0BD201A6B173100C098BF /* OpenGL.framework in Frameworks */, AF78375217DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF3C9F017CCAC440028F240 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFF3C9F117CCAC440028F240 /* libjwxyz.a in Frameworks */, AFF3C9F217CCAC440028F240 /* ScreenSaver.framework in Frameworks */, AFF3C9F317CCAC440028F240 /* QuartzCore.framework in Frameworks */, AFF3C9F417CCAC440028F240 /* Cocoa.framework in Frameworks */, AFF3C9F517CCAC440028F240 /* Carbon.framework in Frameworks */, CEE0BCF81A6B15A300C098BF /* OpenGL.framework in Frameworks */, AF78370E17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF4633E0C4403E400EE6509 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD757158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD758158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31FB15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD759158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD75A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC751A6B0EA500C098BF /* OpenGL.framework in Frameworks */, AF7836A917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF463600C440AEF00EE6509 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD967158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD968158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328015C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD969158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD96A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCFC1A6B15C800C098BF /* OpenGL.framework in Frameworks */, AF78373017DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFFAB31D19158CE40020F021 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFFAB31E19158CE40020F021 /* libjwxyz.a in Frameworks */, AFFAB31F19158CE40020F021 /* ScreenSaver.framework in Frameworks */, AFFAB32019158CE40020F021 /* QuartzCore.framework in Frameworks */, AFFAB32119158CE40020F021 /* Cocoa.framework in Frameworks */, AFFAB32219158CE40020F021 /* Carbon.framework in Frameworks */, CEE0BD1D1A6B171400C098BF /* OpenGL.framework in Frameworks */, AFFAB32319158CE40020F021 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; CE3D01591B76F4C100993C75 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( CE3D015A1B76F4C100993C75 /* libjwxyz.a in Frameworks */, CE3D015B1B76F4C100993C75 /* ScreenSaver.framework in Frameworks */, CE3D015C1B76F4C100993C75 /* QuartzCore.framework in Frameworks */, CE3D015D1B76F4C100993C75 /* Cocoa.framework in Frameworks */, CE3D015E1B76F4C100993C75 /* Carbon.framework in Frameworks */, CE3D015F1B76F4C100993C75 /* OpenGL.framework in Frameworks */, CE3D01601B76F4C100993C75 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 080E96DDFE201D6D7F000001 /* libjwxyz */ = { isa = PBXGroup; children = ( AF561DF515969BC3007CA5ED /* iosgrabimage.m */, AFC7592F158D9A7A00C5458E /* iostextclient.m */, AFE1FD410981E32E00F7970E /* InvertedSlider.h */, AFE1FD420981E32E00F7970E /* InvertedSlider.m */, AF9D4E2109B63413006E59CF /* jwxyz-timers.m */, AFE1FD430981E32E00F7970E /* jwxyz.h */, AFE1FD440981E32E00F7970E /* jwxyz.m */, AF6048F8157C07C600CA21E4 /* jwzgles.c */, AF6048F9157C07C600CA21E4 /* jwzgles.h */, AF6048FA157C07C600CA21E4 /* jwzglesI.h */, AF9D468E09B51567006E59CF /* osxgrabscreen.m */, AFE1FD470981E32E00F7970E /* PrefsReader.h */, AFE1FD480981E32E00F7970E /* PrefsReader.m */, 32CA4F630368D1EE00C91783 /* xscreensaver_Prefix.pch */, AFC2577F09888F5A000655EE /* XScreenSaverConfigSheet.h */, AFC2578009888F5A000655EE /* XScreenSaverConfigSheet.m */, AF4812F70990D9AE00FB32B8 /* XScreenSaverGLView.h */, AF4812F80990D9AE00FB32B8 /* XScreenSaverGLView.m */, AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */, AFC254C409882C97000655EE /* XScreenSaverView.h */, AFC254C509882C97000655EE /* XScreenSaverView.m */, AF9E7EC8190F4C4000A8B01F /* enable_gc.c */, ); name = libjwxyz; sourceTree = ""; }; 19C28FACFE9D520D11CA2CBB /* Products */ = { isa = PBXGroup; children = ( AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */, AF97707D0989D2F6001F8B92 /* Attraction.saver */, AF4810FB09909FBA00FB32B8 /* DangerBall.saver */, AF976FBC0989CAA2001F8B92 /* Deco.saver */, AF480D81098EEDDE00FB32B8 /* Drift.saver */, AF480C58098E301400FB32B8 /* Helix.saver */, AF9770400989D1E6001F8B92 /* Rorschach.saver */, AF9771D70989DC4A001F8B92 /* SaverTester.app */, AF4812640990CE2700FB32B8 /* Gears.saver */, AF4812C60990D3D900FB32B8 /* Pipes.saver */, AF0839A209930B6B00277BE9 /* Atlantis.saver */, AF083A48099311D700277BE9 /* Atunnel.saver */, AFA5595A099330B000F3E977 /* Cage.saver */, AFA5597F0993317900F3E977 /* Moebius.saver */, AFA559A40993322100F3E977 /* Superquadrics.saver */, AFA559C70993328000F3E977 /* Morph3D.saver */, AFA559E10993330600F3E977 /* Rubik.saver */, AFA55A150993340300F3E977 /* Stairs.saver */, AFA55A32099334A000F3E977 /* Sproingies.saver */, AFA55A8B0993364300F3E977 /* Lament.saver */, AFA55AE109933CEF00F3E977 /* Bubble3D.saver */, AFA55B1E09933E0500F3E977 /* GLPlanet.saver */, AFA55B3709933E8D00F3E977 /* Pulsar.saver */, AFA55B8B09933F7200F3E977 /* Sierpinski3D.saver */, AFA55BA309933FDA00F3E977 /* GFlux.saver */, AFA55BBD099340CE00F3E977 /* Circuit.saver */, AFA55BF60993429100F3E977 /* Menger.saver */, AFA55C200993431300F3E977 /* Engine.saver */, AFA55C89099349A600F3E977 /* GLSnake.saver */, AFA55CBB09934BB200F3E977 /* Boxed.saver */, AFA55CDE09934CE400F3E977 /* GLForestFire.saver */, AFA55D4E0993565300F3E977 /* SBalls.saver */, AFA55D740993584B00F3E977 /* Cubenetic.saver */, AFA55D91099358C400F3E977 /* Spheremonics.saver */, AFA55DDA09935D7000F3E977 /* Lavalite.saver */, AFA55E0309935E4900F3E977 /* Queens.saver */, AFA55E1F09935EDC00F3E977 /* Endgame.saver */, AFA55E4209935F8E00F3E977 /* GLBlur.saver */, AFA55E6009935FF900F3E977 /* FlyingToasters.saver */, AFA55EE3099360E300F3E977 /* BouncingCow.saver */, AFA55F1E099361B700F3E977 /* JigglyPuff.saver */, AFA55F3C0993622F00F3E977 /* Klein.saver */, AFA55F540993629000F3E977 /* Hypertorus.saver */, AFA55F840993643600F3E977 /* GLMatrix.saver */, AFA55FE509936BFA00F3E977 /* CubeStorm.saver */, AFA5600B09936C6D00F3E977 /* GLKnots.saver */, AFA5602609936CC800F3E977 /* BlockTube.saver */, AFA5604409936D5100F3E977 /* FlipFlop.saver */, AFA5605C09936E2100F3E977 /* AntInspect.saver */, AFA5607409936F3800F3E977 /* AntSpotlight.saver */, AFA560C00993718D00F3E977 /* Polytopes.saver */, AFA5610F0993781600F3E977 /* Molecule.saver */, AFA5616A09937C0D00F3E977 /* BlinkBox.saver */, AFA5618D09937CF100F3E977 /* Noof.saver */, AFA561AF09937D7E00F3E977 /* Polyhedra.saver */, AFA562190993849F00F3E977 /* Providence.saver */, AFA562310993852500F3E977 /* Pinion.saver */, AFA562D1099392C600F3E977 /* Boing.saver */, AFA562EC099393C900F3E977 /* AntMaze.saver */, AFA563040993943B00F3E977 /* Tangram.saver */, AFA563260993951000F3E977 /* Crackberg.saver */, AFA56343099395ED00F3E977 /* GLHanoi.saver */, AFA56363099396C000F3E977 /* Cube21.saver */, AFA5638B099397B300F3E977 /* TimeTunnel.saver */, AFA563B6099398BB00F3E977 /* Juggler3D.saver */, AFD56E040996A03800BA26F7 /* GLText.saver */, AFD56EBE0996A72600BA26F7 /* Braid.saver */, AFD56EEA0996A95700BA26F7 /* Forest.saver */, AFD56F1B0996AAFA00BA26F7 /* Vines.saver */, AFD56F330996AB8A00BA26F7 /* Galaxy.saver */, AFD56F5F0996AEEE00BA26F7 /* Grav.saver */, AFD56F7B0996B01600BA26F7 /* Hopalong.saver */, AFD56F9C0996B09400BA26F7 /* Laser.saver */, AFD56FB30996B10F00BA26F7 /* Lightning.saver */, AFD56FC90996B18F00BA26F7 /* Lisa.saver */, AFD56FDF0996B20900BA26F7 /* Lissie.saver */, AFD570080996B43800BA26F7 /* Penrose.saver */, AFD5701F0996B4CC00BA26F7 /* Sierpinski.saver */, AFD570360996B56D00BA26F7 /* Sphere.saver */, AFD570530996B61600BA26F7 /* Spiral.saver */, AFD570690996B6A300BA26F7 /* FadePlot.saver */, AFD5707F0996B72800BA26F7 /* Mountain.saver */, AFD570950996B80300BA26F7 /* Triangle.saver */, AFD570AB0996B88E00BA26F7 /* Worm.saver */, AFD570C10996B93000BA26F7 /* Rotor.saver */, AFD570D90996B9F800BA26F7 /* Ant.saver */, AFD570FA0996BBBF00BA26F7 /* Flow.saver */, AFD571230996BE9300BA26F7 /* Discrete.saver */, AFD5713C0996BF2E00BA26F7 /* Apollonian.saver */, AFD571530996C01700BA26F7 /* Euler2D.saver */, AFD571690996C0CE00BA26F7 /* Thornbird.saver */, AFD571C50996D9DC00BA26F7 /* Juggle.saver */, AFD572320996E4A300BA26F7 /* Swirl.saver */, AFD5727D0996EE8500BA26F7 /* Polyominoes.saver */, AFD572B50996F99600BA26F7 /* Bouboule.saver */, AFD572D20996FC0F00BA26F7 /* Crystal.saver */, AFD57309099701C000BA26F7 /* Julia.saver */, AFD5736D0997411200BA26F7 /* Strange.saver */, AF794F74099748450059A8B0 /* Demon.saver */, AF794F9E09974A320059A8B0 /* Fiberlamp.saver */, AF794FDD09974FA60059A8B0 /* Loop.saver */, AF97573D099C317000B05160 /* IMSMap.saver */, AF975785099C374A00B05160 /* Moire.saver */, AF9757D2099C3E6300B05160 /* RDbomb.saver */, AF975818099C41D500B05160 /* XFlame.saver */, AF975875099C475900B05160 /* ShadeBobs.saver */, AF975A46099C681F00B05160 /* MetaBalls.saver */, AF975A7C099C6AB200B05160 /* Eruption.saver */, AF975A96099C6BC300B05160 /* Barcode.saver */, AF975AE7099C6EB100B05160 /* Fireworkx.saver */, AF975B0C099C6FE400B05160 /* MemScroller.saver */, AF975C22099C8C1500B05160 /* Halo.saver */, AF975C4E099C8DCF00B05160 /* Greynetic.saver */, AF975C6E099C8F3F00B05160 /* NoseGuy.saver */, AF975D63099CA0F000B05160 /* Rocks.saver */, AF476FC6099D154F001F091E /* Interference.saver */, AF476FEB099D1686001F091E /* Truchet.saver */, AF47705C099D4385001F091E /* Deluxe.saver */, AF477179099D4786001F091E /* Compass.saver */, AF47718F099D4803001F091E /* Wander.saver */, AF4771B7099D4949001F091E /* T3D.saver */, AF4771EB099D4D9A001F091E /* CCurve.saver */, AF477202099D4E64001F091E /* NerveRot.saver */, AF477218099D4EE8001F091E /* Whirlygig.saver */, AF47722E099D4F67001F091E /* Anemone.saver */, AF477263099D5717001F091E /* Halftone.saver */, AF47727B099D57B9001F091E /* PopSquares.saver */, AF477293099D5926001F091E /* Piecewise.saver */, AF477392099D65A1001F091E /* Wormhole.saver */, AF4773AA099D6648001F091E /* FuzzyFlakes.saver */, AF4773D1099D67B9001F091E /* Anemotaxis.saver */, AF477412099D69E7001F091E /* Intermomentary.saver */, AF477437099D7C70001F091E /* IFS.saver */, AF477452099D7D33001F091E /* XMatrix.saver */, AF477493099D89E4001F091E /* Flame.saver */, AF4774A9099D8A74001F091E /* Kaleidescope.saver */, AF4774C4099D8B5F001F091E /* LMorph.saver */, AF4774DE099D8BFF001F091E /* Maze.saver */, AF47756D099D9A1A001F091E /* Pedal.saver */, AF477593099D9C28001F091E /* Pyro.saver */, AF4775AF099D9CF7001F091E /* Starfish.saver */, AF4775E8099D9F69001F091E /* Coral.saver */, AF477602099DA030001F091E /* Epicycle.saver */, AF477623099DA26C001F091E /* Kumppa.saver */, AF477654099DA6D0001F091E /* Squiral.saver */, AF47766A099DA78F001F091E /* Critical.saver */, AF477680099DA849001F091E /* Petri.saver */, AF47769F099DAA6F001F091E /* Blaster.saver */, AF4776BA099DABDD001F091E /* XSpirograph.saver */, AF4776D0099DAC8A001F091E /* XRaySwarm.saver */, AF4776EB099DADDF001F091E /* WhirlWindWarp.saver */, AF477701099DAE7A001F091E /* Vermiculate.saver */, AF47771D099DAF9F001F091E /* CloudLife.saver */, AF477733099DB044001F091E /* Substrate.saver */, AF477762099DB61E001F091E /* Interaggregate.saver */, AF477784099DB965001F091E /* Celtic.saver */, AF4777A0099DBA90001F091E /* FluidBalls.saver */, AF4777E1099DC183001F091E /* BoxFit.saver */, AF4778BB099DDB79001F091E /* Penetrate.saver */, AF4778D7099DDCAE001F091E /* XJack.saver */, AF4778F8099DDDC8001F091E /* Cynosure.saver */, AF477919099DE379001F091E /* Flag.saver */, AF47793A099DE4C7001F091E /* Slip.saver */, AF642405099FF9C2000F4CD4 /* Extrusion.saver */, AF6425DC09A18856000F4CD4 /* HyperCube.saver */, AF6425FC09A189EC000F4CD4 /* Qix.saver */, AF64261F09A18D6C000F4CD4 /* HyperBall.saver */, AF64263C09A18F54000F4CD4 /* Moire2.saver */, AF64265F09A19229000F4CD4 /* Munch.saver */, AF64268B09A194B0000F4CD4 /* Goop.saver */, AF64278109A1D37A000F4CD4 /* SpeedMine.saver */, AF6427B809A2DE36000F4CD4 /* Bubbles.saver */, AF9D467609B5109C006E59CF /* DecayScreen.saver */, AF9D475409B5300A006E59CF /* SlideScreen.saver */, AF9D476F09B53166006E59CF /* Zoom.saver */, AF9D48EB09B53322006E59CF /* Bumps.saver */, AF9D490409B535DA006E59CF /* Distort.saver */, AF9D493B09B53CBA006E59CF /* Ripples.saver */, AF9D496409B53FC9006E59CF /* RotZoomer.saver */, AF9D497C09B5411D006E59CF /* Twang.saver */, AF9D49A709B544C3006E59CF /* Spotlight.saver */, AF9D4C7909B59F27006E59CF /* XLyap.saver */, AF9D4CF709B5AA8E006E59CF /* Pong.saver */, AF9D4D8F09B5B2DC006E59CF /* XAnalogTV.saver */, AF9D4DC009B5B71E006E59CF /* BSOD.saver */, AF9D4DFE09B5BB19006E59CF /* Apple2.saver */, AF7776F609B63ABF00EA3033 /* Phosphor.saver */, AF77772A09B6416100EA3033 /* Pacman.saver */, AF77775109B6446500EA3033 /* FlipScreen3D.saver */, AF7777A209B64A5200EA3033 /* MirrorBlob.saver */, AF7777E409B64C6B00EA3033 /* GLSlideshow.saver */, AF7777FE09B64E3100EA3033 /* FlipText.saver */, AF77785809B6528100EA3033 /* Carousel.saver */, AF77787409B6536000EA3033 /* DNAlogo.saver */, AF7778B509B659C800EA3033 /* BlitSpin.saver */, AF34085409B80AAF00F2CEC1 /* StarWars.saver */, AF34085509B80AB000F2CEC1 /* StonerView.saver */, AF34085609B80AB000F2CEC1 /* Gleidescope.saver */, AF34085709B80AB000F2CEC1 /* FontGlide.saver */, AF998EEE0A083DB30051049D /* TopBlock.saver */, AF48DF030A0C25E000F94CF9 /* GLSchool.saver */, AFA339400B058505002B0E7D /* WebCollage.saver */, AFA33BC70B058740002B0E7D /* webcollage-helper */, AFF463470C4403E400EE6509 /* CWaves.saver */, AFF4636C0C440AEF00EE6509 /* GLCells.saver */, AF0DC7BD0C4C73F600D76972 /* m6502.saver */, AF0DCA560C4CBB0D00D76972 /* Voronoi.saver */, AFE6A1970CDD7B2E002805BF /* MoebiusGears.saver */, AFE6A42D0CDD7FAA002805BF /* Abstractile.saver */, AF4FD6FA0CE7A486005EE58E /* Lockward.saver */, AF4FF4CE0D52CBDE00666F98 /* CubicGrid.saver */, AF3C71590D624BF50030CC0D /* Hypnowheel.saver */, AF1A17730D6D6EE3008AF328 /* LCDscrub.saver */, AFE2A46A0E2E904600ADB298 /* SkyTentacles.saver */, AFE30BFC0E52B14700CCF4A5 /* Sonar.saver */, AF35E8A00E63823600691F2F /* Jigsaw.saver */, AFD51B300F063B4A00471C02 /* Photopile.saver */, AF32D9F40F3AD0B40080F535 /* RubikBlocks.saver */, AF4A345D102A593600A81B2A /* Surfaces.saver */, AF2D4D8F13E902F5002AA818 /* Phosphor.app */, AF2D4F7E13E91093002AA818 /* Apple2.app */, AF78D189142DD8F3002AAF77 /* Hilbert.saver */, AF3581D51431D47B00E09C51 /* CompanionCube.saver */, AF358216143330F900E09C51 /* TronBit.saver */, AF91898F158FC00A002B5D1E /* XScreenSaver.app */, AF7511121782B5B900380EA1 /* Kaleidocycle.saver */, AFF2869217860E830050A578 /* QuasiCrystal.saver */, AFBFE75E178642DC00432B21 /* Apple2.app */, AFBFE77E178647FE00432B21 /* Phosphor.app */, AFDA65A1178A52B70070D24B /* UnknownPleasures.saver */, AFB591BA178B812C00EA4005 /* Hexadrop.saver */, AFF3C9FB17CCAC440028F240 /* Geodesic.saver */, AF1AD9E218500F9F00932759 /* XScreenSaverUpdater.app */, AF9E7EBF190F4C1B00A8B01F /* enable_gc */, AFFAB32919158CE40020F021 /* ProjectivePlane.saver */, AF68A49219196CF800D41CD1 /* Tessellimage.saver */, AF39E296198A11F60064A58D /* WindupRobot.saver */, AF7ACFD419FF0A9200BD752B /* GeodesicGears.saver */, AF73FF361A09877F00E485E9 /* BinaryRing.saver */, AF5C9B0D1A0CCE6E00B0147A /* Cityflow.saver */, AF63A8061AB4EDDB00593C75 /* RomanBoy.saver */, AFCF83501AF5B515008BB7E1 /* SplitFlap.saver */, CE3D01661B76F4C100993C75 /* TestX11.saver */, ); name = Products; path = ..; sourceTree = ""; }; 29B97314FDCFA39411CA2CEA /* xscreensaver */ = { isa = PBXGroup; children = ( AF480AB9098C66E200FB32B8 /* SaverRunner */, 080E96DDFE201D6D7F000001 /* libjwxyz */, AF1AD9E818500FA000932759 /* Updater */, AFE1FD520981E35400F7970E /* Utils */, AFE1FD610981E3E700F7970E /* Hacks */, AFC258670988A468000655EE /* config */, 29B97317FDCFA39411CA2CEA /* Resources */, 29B97323FDCFA39411CA2CEA /* Frameworks */, 19C28FACFE9D520D11CA2CBB /* Products */, ); name = xscreensaver; sourceTree = ""; }; 29B97317FDCFA39411CA2CEA /* Resources */ = { isa = PBXGroup; children = ( 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */, AF14EE300E3CEF1A004CBBD2 /* XScreenSaver.icns */, AF9772E10989DFC6001F8B92 /* SaverRunner.nib */, AF56019B157DAA3D00DB2055 /* iSaverRunner.xib */, 55EDCB3C1AD498A800251909 /* LaunchScreen.xib */, 550FB5FD1AD64424001A4FA5 /* Media-iOS.xcassets */, AF2D522513E954A0002AA818 /* SaverRunner.icns */, AF73FF201A08AB9400E485E9 /* iSaverRunner57t.png */, AF9771D90989DC4A001F8B92 /* SaverRunner.plist */, AF01294C157D31DD00C396E1 /* iSaverRunner.plist */, AF94E7411A16E93600289B93 /* xscreensaver.xcconfig */, 8D1107310486CEB800E47090 /* XScreenSaver.plist */, AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */, AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */, AFEC68361BD6CA85004C1B64 /* OCRAStd.otf */, AFEC68381BD6CDF9004C1B64 /* YearlReg.ttf */, ); name = Resources; sourceTree = ""; }; 29B97323FDCFA39411CA2CEA /* Frameworks */ = { isa = PBXGroup; children = ( AF1ADA171850180E00932759 /* Sparkle.framework */, AF78377C17DBA85D003B9FC0 /* libz.dylib */, AF78369617DB9F25003B9FC0 /* libz.dylib */, AFEB9C3E1590056A003974F3 /* CoreGraphics.framework */, AFEB9C3F1590056A003974F3 /* QuartzCore.framework */, AF1AD9E718500FA000932759 /* Foundation.framework */, AFEB9C3C15900558003974F3 /* Foundation.framework */, AFEB9C3A1590054B003974F3 /* OpenGLES.framework */, AFEB9C3815900514003974F3 /* UIKit.framework */, AF1AD9E618500FA000932759 /* CoreData.framework */, AF1AD9E518500F9F00932759 /* AppKit.framework */, AF0F46DC104E1809000A929C /* AppKit.framework */, AF976ED30989BF59001F8B92 /* ScreenSaver.framework */, AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */, AF561DF715969C5B007CA5ED /* AssetsLibrary.framework */, AF561DF3159651A7007CA5ED /* AudioToolbox.framework */, AF0FAF3B159BAC7B00BCE2F7 /* CoreText.framework */, 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, AF480DF1098F528500FB32B8 /* OpenGL.framework */, CEE0BC611A6B0D6200C098BF /* OpenGL.framework */, AF480FE70990375900FB32B8 /* AGL.framework */, AF84FD4109B1209E00F3AB06 /* GLUT.framework */, AF48112B0990A2C700FB32B8 /* Carbon.framework */, AF1ADA0118500FA100932759 /* XCTest.framework */, ); name = Frameworks; sourceTree = ""; }; AF1AD9E818500FA000932759 /* Updater */ = { isa = PBXGroup; children = ( AF3633F918530DD90086A439 /* sparkle_dsa_pub.pem */, AF3633FA18530DD90086A439 /* Updater.h */, AF3633FB18530DD90086A439 /* Updater.m */, AF3633FE18530DFF0086A439 /* Updater.plist */, AF1ADA151850157400932759 /* Updater.xib */, ); name = Updater; sourceTree = ""; }; AF480AB9098C66E200FB32B8 /* SaverRunner */ = { isa = PBXGroup; children = ( 29B97316FDCFA39411CA2CEA /* main.m */, CEAF85661ABE4A70008F104C /* SaverListController.h */, AF84AF1E15829AF000607E4C /* SaverListController.m */, AFE1FD3F0981E32E00F7970E /* SaverRunner.h */, AFE1FD400981E32E00F7970E /* SaverRunner.m */, AFAA6B441773F07700DE720C /* ios-function-table.m */, ); name = SaverRunner; sourceTree = ""; }; AF480DC7098F4EB500FB32B8 /* XScreenSaver */ = { isa = PBXGroup; children = ( AFE6A4340CDD800F002805BF /* abstractile.c */, AF9D4CFA09B5AC94006E59CF /* analogtv.c */, AF9D4CFB09B5AC94006E59CF /* analogtv.h */, AF477231099D4FD5001F091E /* anemone.c */, AF4773D4099D6817001F091E /* anemotaxis.c */, AF9D4E0509B5BC9D006E59CF /* apple2-main.c */, AF9D4DD309B5B990006E59CF /* apple2.c */, AF0DCA320C4C74A200D76972 /* asm6502.c */, AF0DCA330C4C74A200D76972 /* asm6502.h */, AF976DFA09896BEB001F8B92 /* attraction.c */, AF975A99099C6C3500B05160 /* barcode.c */, AF73FF381A09889700E485E9 /* binaryring.c */, AF4776A2099DAADE001F091E /* blaster.c */, AF7778BA09B65A8A00EA3033 /* blitspin.c */, AF4778A3099DDA91001F091E /* boxfit.c */, AF9D4DC309B5B87D006E59CF /* bsod.c */, AF6427BB09A2DF47000F4CD4 /* bubbles-default.c */, AF6427BC09A2DF47000F4CD4 /* bubbles.c */, AF6427BD09A2DF47000F4CD4 /* bubbles.h */, AF9D48EE09B533AE006E59CF /* bumps.c */, AF4771EF099D4DFE001F091E /* ccurve.c */, AF477787099DBA29001F091E /* celtic.c */, AF477720099DB01C001F091E /* cloudlife.c */, AF47717C099D47D3001F091E /* compass.c */, AF4775EF099D9FFF001F091E /* coral.c */, AF47766D099DA80D001F091E /* critical.c */, AFF463490C44044E00EE6509 /* cwaves.c */, AF4778FB099DDE79001F091E /* cynosure.c */, AF9D467809B5110B006E59CF /* decayscreen.c */, AFC25B5E0988BA63000655EE /* deco.c */, AF68A49619196E3E00D41CD1 /* delaunay.c */, AF477145099D43E2001F091E /* deluxe.c */, AF9D490709B536F7006E59CF /* distort.c */, AF477605099DA097001F091E /* epicycle.c */, AF975A83099C6B4900B05160 /* eruption.c */, AF975AEE099C6F1700B05160 /* fireworkx.c */, AF477496099D8A53001F091E /* flame.c */, AF4777A4099DBB11001F091E /* fluidballs.c */, AF77789209B656C300EA3033 /* fontglide.c */, AFBF893C0E41D930006A2D66 /* fps.c */, AFBF893D0E41D930006A2D66 /* fps.h */, AFBF89B10E424036006A2D66 /* fpsI.h */, AF4773B4099D6778001F091E /* fuzzyflakes.c */, AF64268E09A19542000F4CD4 /* goop.c */, AF480C21098E28EF00FB32B8 /* greynetic.c */, AF477266099D5768001F091E /* halftone.c */, AF480C29098E295D00FB32B8 /* halo.c */, AF480C2F098E2A6700FB32B8 /* helix.c */, AFB591BD178B81E600EA4005 /* hexadrop.c */, AF64262209A18E1E000F4CD4 /* hyperball.c */, AF6425DF09A188FB000F4CD4 /* hypercube.c */, AF47743A099D7CEA001F091E /* ifs.c */, AF975740099C31DD00B05160 /* imsmap.c */, AF477769099DB710001F091E /* interaggregate.c */, AF476FD0099D15AA001F091E /* interference.c */, AF47741C099D6A6C001F091E /* intermomentary.c */, AF4774AC099D8B08001F091E /* kaleidescope.c */, AF47762A099DA2E9001F091E /* kumppa.c */, AF1A177E0D6D6F3E008AF328 /* lcdscrub.c */, AF4774CB099D8BC2001F091E /* lmorph.c */, AF0DCA340C4C74A200D76972 /* m6502.c */, AF4774E1099D8C8B001F091E /* maze.c */, AF975B14099C709E00B05160 /* memscroller.c */, AF975A49099C689F00B05160 /* metaballs.c */, AF975789099C37A500B05160 /* moire.c */, AF64263F09A18FEB000F4CD4 /* moire2.c */, AF64266209A192C5000F4CD4 /* munch.c */, AF477205099D4EB6001F091E /* nerverot.c */, AF975C76099C8FC700B05160 /* noseguy.c */, AF477570099D9A8A001F091E /* pedal.c */, AF4778BE099DDC32001F091E /* penetrate.c */, AF477683099DA8C7001F091E /* petri.c */, AF77770309B63B5F00EA3033 /* phosphor.c */, AF477297099D5980001F091E /* piecewise.c */, AF9D4CFC09B5AC94006E59CF /* pong.c */, AF47727E099D5808001F091E /* popsquares.c */, AF47759C099D9CA3001F091E /* pyro.c */, AF6425FF09A18A94000F4CD4 /* qix.c */, AF9757D5099C3EB800B05160 /* rd-bomb.c */, AF9D493E09B53D55006E59CF /* ripples.c */, AF975D66099CA16A00B05160 /* rocks.c */, AFE1FD620981E40800F7970E /* rorschach.c */, AF9D496709B540A4006E59CF /* rotzoomer.c */, AF97587A099C492000B05160 /* shadebobs.c */, AF9D475809B53091006E59CF /* slidescreen.c */, AF64278709A1D433000F4CD4 /* speedmine.c */, AF9D49AA09B54596006E59CF /* spotlight.c */, AF477657099DA75D001F091E /* squiral.c */, AF4775B3099D9D67001F091E /* starfish.c */, AF477736099DB104001F091E /* substrate.c */, AF4771BA099D4997001F091E /* t3d.c */, AF68A49519196E3E00D41CD1 /* tessellimage.c */, CE3D016A1B76F8E200993C75 /* testx11.c */, AF35821B1433314C00E09C51 /* tronbit.c */, AF3582171433314C00E09C51 /* tronbit_idle1.c */, AF3582181433314C00E09C51 /* tronbit_idle2.c */, AF3582191433314C00E09C51 /* tronbit_no.c */, AF35821A1433314C00E09C51 /* tronbit_yes.c */, AF476FF0099D1713001F091E /* truchet.c */, AF9D497F09B541E5006E59CF /* twang.c */, AF477704099DAF3F001F091E /* vermiculate.c */, AF477192099D4864001F091E /* wander.c */, AFA33C0A0B058E6B002B0E7D /* webcollage */, AFA33BAE0B0585F7002B0E7D /* webcollage-cocoa.m */, AF4776EE099DAE58001F091E /* whirlwindwarp.c */, AF47721B099D4F47001F091E /* whirlygig.c */, AF477395099D65FE001F091E /* wormhole.c */, AF9D4D9209B5B444006E59CF /* xanalogtv.c */, AF97582F099C427500B05160 /* xflame.c */, AF4778DA099DDD2B001F091E /* xjack.c */, AF9D4C7C09B5A044006E59CF /* xlyap.c */, AF477455099D7D8A001F091E /* xmatrix.c */, AF4776D3099DACEB001F091E /* xrayswarm.c */, AF4776BD099DAC46001F091E /* xspirograph.c */, AF9D48D409B53229006E59CF /* zoom.c */, ); name = XScreenSaver; sourceTree = ""; }; AF480DCF098F4F0600FB32B8 /* Xlockmore */ = { isa = PBXGroup; children = ( AFD570DE0996BA5C00BA26F7 /* ant.c */, AFD5713F0996BFBE00BA26F7 /* apollonian.c */, AF7778BC09B65B1800EA3033 /* automata.h */, AFD572B90996FB3D00BA26F7 /* bouboule.c */, AFD56EC10996A76F00BA26F7 /* braid.c */, AFD572ED0997006E00BA26F7 /* crystal.c */, AF794F7E099748860059A8B0 /* demon.c */, AFD571280996BEF700BA26F7 /* discrete.c */, AF480C82098E336D00FB32B8 /* drift.c */, AFD571560996C07F00BA26F7 /* euler2d.c */, AFD5706C0996B70000BA26F7 /* fadeplot.c */, AF794FA909974AE30059A8B0 /* fiberlamp.c */, AF47791C099DE3F1001F091E /* flag.c */, AFD571010996BC3800BA26F7 /* flow.c */, AFD56EED0996A99E00BA26F7 /* forest.c */, AFD56F360996ABD200BA26F7 /* galaxy.c */, AFD56F620996AF2D00BA26F7 /* grav.c */, AFD56F880996B06600BA26F7 /* hopalong.c */, AFD571C80996DA4600BA26F7 /* juggle.c */, AFD5730C099702C800BA26F7 /* julia.c */, AFD56FA00996B0E500BA26F7 /* laser.c */, AFD56FB60996B16300BA26F7 /* lightning.c */, AFD56FCC0996B1D600BA26F7 /* lisa.c */, AFD56FE20996B26200BA26F7 /* lissie.c */, AF794FE009974FEC0059A8B0 /* loop.c */, AFD570820996B79300BA26F7 /* mountain.c */, AF795015099751940059A8B0 /* pacman.c */, AF795016099751940059A8B0 /* pacman.h */, AF795011099751940059A8B0 /* pacman_ai.c */, AF795012099751940059A8B0 /* pacman_ai.h */, AF795013099751940059A8B0 /* pacman_level.c */, AF795014099751940059A8B0 /* pacman_level.h */, AFD5700C0996B49D00BA26F7 /* penrose.c */, AFD572800996EF2B00BA26F7 /* polyominoes.c */, AFD570C40996B98500BA26F7 /* rotor.c */, AFD570220996B52700BA26F7 /* sierpinski.c */, AF47793D099DE56A001F091E /* slip.c */, AFD5703B0996B5E300BA26F7 /* sphere.c */, AFD570560996B67600BA26F7 /* spiral.c */, AFD57371099741A200BA26F7 /* strange.c */, AFD572350996E53E00BA26F7 /* swirl.c */, AFD5716B0996C16700BA26F7 /* thornbird.c */, AFD570980996B86200BA26F7 /* triangle.c */, AFD56F1F0996AB5A00BA26F7 /* vines.c */, AFD570AE0996B8EF00BA26F7 /* worm.c */, ); name = Xlockmore; sourceTree = ""; }; AF480DD0098F4F2000FB32B8 /* OpenGL */ = { isa = PBXGroup; children = ( AFA5605F09936E9C00F3E977 /* antinspect.c */, AFA562EF0993941600F3E977 /* antmaze.c */, AFA5607709936FDD00F3E977 /* ants.h */, AFA5607809936FDD00F3E977 /* antspotlight.c */, AF0839A909930C4900277BE9 /* atlantis.c */, AF7778BD09B65B3F00EA3033 /* atlantis.h */, AF083A31099311CE00277BE9 /* atunnel.c */, AFA55AF409933DBF00F3E977 /* b_draw.c */, AFA55AF509933DBF00F3E977 /* b_lockglue.c */, AFA55AF609933DBF00F3E977 /* b_sphere.c */, AFA5616D09937C9A00F3E977 /* blinkbox.c */, AFA5602909936D0700F3E977 /* blocktube.c */, AFA562D40993930C00F3E977 /* boing.c */, AFA55EE70993613E00F3E977 /* bouncingcow.c */, AFA55CBE09934C0900F3E977 /* boxed.c */, AFA55CBF09934C0900F3E977 /* boxed.h */, AFA55AE409933D3800F3E977 /* bubble3d.c */, AFA55AE809933D5900F3E977 /* bubble3d.h */, AF4812760990CF5D00FB32B8 /* buildlwo.c */, AF4812770990CF5D00FB32B8 /* buildlwo.h */, AFA5595D0993310500F3E977 /* cage.c */, AF77785E09B6530E00EA3033 /* carousel.c */, AFA55E2209935F2B00F3E977 /* chessgames.h */, AFA55E2309935F2B00F3E977 /* chessmodels.c */, AFA55E2409935F2B00F3E977 /* chessmodels.h */, AFA55BC00993416E00F3E977 /* circuit.c */, AF5C9B101A0CCF4E00B0147A /* cityflow.c */, AF3581D91431D5FC00E09C51 /* companion.c */, AF3581D61431D5FC00E09C51 /* companion_disc.c */, AF3581D71431D5FC00E09C51 /* companion_heart.c */, AF3581D81431D5FC00E09C51 /* companion_quad.c */, AFA55EE80993613E00F3E977 /* cow_face.c */, AFA55EE90993613E00F3E977 /* cow_hide.c */, AFA55EEA0993613E00F3E977 /* cow_hoofs.c */, AFA55EEB0993613E00F3E977 /* cow_horns.c */, AFA55EEC0993613E00F3E977 /* cow_tail.c */, AFA55EED0993613E00F3E977 /* cow_udder.c */, AFA563290993957100F3E977 /* crackberg.c */, AFA563660993970F00F3E977 /* cube21.c */, AFA55D770993589300F3E977 /* cubenetic.c */, AFA55FF309936C4500F3E977 /* cubestorm.c */, AF4FF4D00D52CC8400666F98 /* cubicgrid.c */, AF480DD1098F4F6200FB32B8 /* dangerball.c */, AF77787609B653DC00EA3033 /* dnalogo.c */, AF0839AA09930C4900277BE9 /* dolphin.c */, AF241F81107C38DF00046A84 /* dropshadow.c */, AF241F82107C38DF00046A84 /* dropshadow.h */, AF7778C109B65C6A00EA3033 /* e_textures.h */, AFA55E2509935F2B00F3E977 /* endgame.c */, AFA55C230993435300F3E977 /* engine.c */, AF642409099FFAF0000F4CD4 /* extrusion-helix2.c */, AF64240A099FFAF0000F4CD4 /* extrusion-helix3.c */, AF64240B099FFAF0000F4CD4 /* extrusion-helix4.c */, AF64240C099FFAF0000F4CD4 /* extrusion-joinoffset.c */, AF64240D099FFAF0000F4CD4 /* extrusion-screw.c */, AF64240E099FFAF0000F4CD4 /* extrusion-taper.c */, AF64240F099FFAF1000F4CD4 /* extrusion-twistoid.c */, AF642410099FFAF1000F4CD4 /* extrusion.c */, AF642411099FFAF1000F4CD4 /* extrusion.h */, AFA5604709936DCC00F3E977 /* flipflop.c */, AF77775409B644FF00EA3033 /* flipscreen3d.c */, AF77780109B64EC000EA3033 /* fliptext.c */, AFA55E980993608800F3E977 /* flyingtoasters.c */, AFBF89AE0E423FC3006A2D66 /* fps-gl.c */, AF4812250990CB8C00FB32B8 /* gears.c */, AFF3CA0217CCAEB70028F240 /* geodesic.c */, AF7ACFD619FF0B7A00BD752B /* geodesicgears.c */, AFA55BA60993401A00F3E977 /* gflux.c */, AFA55E4509935FD300F3E977 /* glblur.c */, AFF463710C440B9200EE6509 /* glcells.c */, AF77778B09B64A2A00EA3033 /* gleidescope.c */, AFA55CE109934D2E00F3E977 /* glforestfire.c */, AFA563460993963400F3E977 /* glhanoi.c */, AFA5600E09936CB300F3E977 /* glknots.c */, AFA55F870993648500F3E977 /* glmatrix.c */, AFA55B2109933E4A00F3E977 /* glplanet.c */, AF48E1660A0C268500F94CF9 /* glschool.c */, AF48E1670A0C268500F94CF9 /* glschool.h */, AF48E1620A0C268400F94CF9 /* glschool_alg.c */, AF48E1630A0C268500F94CF9 /* glschool_alg.h */, AF48E1640A0C268500F94CF9 /* glschool_gl.c */, AF48E1650A0C268500F94CF9 /* glschool_gl.h */, AF7777E709B64CF700EA3033 /* glslideshow.c */, AFA55C8C099349EE00F3E977 /* glsnake.c */, AFD56E080996A07A00BA26F7 /* gltext.c */, AF78D18A142DD96E002AAF77 /* hilbert.c */, AFA55F59099362DF00F3E977 /* hypertorus.c */, AF3C715D0D624C600030CC0D /* hypnowheel.c */, AFE6A16A0CDD78EA002805BF /* involute.c */, AFE6A16B0CDD78EA002805BF /* involute.h */, AF35EB250E6382BA00691F2F /* jigsaw.c */, AFA55F210993620200F3E977 /* jigglypuff.c */, AFA563B90993991300F3E977 /* juggler3d.c */, AF7511141782B64300380EA1 /* kaleidocycle.c */, AFA55F3F0993626E00F3E977 /* klein.c */, AFA55A8E0993369100F3E977 /* lament.c */, AFF1BA0E19A96D8B0016A88D /* lament_model.c */, AFA55DDD09935DB600F3E977 /* lavalite.c */, AF4FD7000CE7A577005EE58E /* lockward.c */, AFA55DE109935DFB00F3E977 /* marching.c */, AFA55DE209935DFB00F3E977 /* marching.h */, AFA55BF9099342D500F3E977 /* menger.c */, AF7777A509B64AFC00EA3033 /* mirrorblob.c */, AFA55982099331C300F3E977 /* moebius.c */, AFE6A40B0CDD7BC3002805BF /* moebiusgears.c */, AFA561120993786800F3E977 /* molecule.c */, AF7778BE09B65BA300EA3033 /* molecules.sh */, AFA559CC099332E800F3E977 /* morph3d.c */, AFA5619009937D3600F3E977 /* noof.c */, AFD51DB60F063BCE00471C02 /* photopile.c */, AFA562340993856A00F3E977 /* pinion.c */, AF4812780990CF5D00FB32B8 /* pipeobjs.c */, AF4812790990CF5D00FB32B8 /* pipes.c */, AFA561B209937DCB00F3E977 /* polyhedra-gl.c */, AFA561B309937DCC00F3E977 /* polyhedra.c */, AFA561B409937DCC00F3E977 /* polyhedra.h */, AFA560C3099371D500F3E977 /* polytopes.c */, AFFAB33119158EA80020F021 /* projectiveplane.c */, AFA5621C099384F600F3E977 /* providence.c */, AFA55B3F09933EC600F3E977 /* pulsar.c */, AFF28695178611720050A578 /* quasicrystal.c */, AFA55E0609935EB800F3E977 /* queens.c */, AFBE743F19A7C6930018AA35 /* robot.c */, AF39E2A0198A13F50064A58D /* robot-wireframe.c */, AF63A8091AB4EF5D00593C75 /* romanboy.c */, AFA559EA0993335C00F3E977 /* rubik.c */, AF32D9FA0F3AD1200080F535 /* rubikblocks.c */, AFA55A400993351F00F3E977 /* s1_1.c */, AFA55A410993351F00F3E977 /* s1_2.c */, AFA55A420993351F00F3E977 /* s1_3.c */, AFA55A430993351F00F3E977 /* s1_4.c */, AFA55A440993351F00F3E977 /* s1_5.c */, AFA55A450993351F00F3E977 /* s1_6.c */, AFA55A460993351F00F3E977 /* s1_b.c */, AFA55D510993569C00F3E977 /* sballs.c */, AF0839AB09930C4900277BE9 /* shark.c */, AFA55B8E09933FBF00F3E977 /* sierpinski3d.c */, AFE2A4720E2E90E300ADB298 /* skytentacles.c */, AFE30BFF0E52B1DC00CCF4A5 /* sonar-icmp.c */, AFE30C000E52B1DC00CCF4A5 /* sonar-sim.c */, AFE30C010E52B1DC00CCF4A5 /* sonar.c */, AFA55D940993590F00F3E977 /* spheremonics.c */, AFCF83541AF5B5FD008BB7E1 /* splitflap.c */, AFCF83531AF5B5FD008BB7E1 /* splitflap_obj.c */, AFA55A470993351F00F3E977 /* sproingies.c */, AF7778C009B65C0F00EA3033 /* sproingies.h */, AFA55A480993351F00F3E977 /* sproingiewrap.c */, AFA55A1A0993345900F3E977 /* stairs.c */, AF77782809B650FF00EA3033 /* starwars.c */, AF77782909B650FF00EA3033 /* starwars.txt */, AF7777BF09B64BD400EA3033 /* stonerview-move.c */, AF7777C009B64BD400EA3033 /* stonerview-move.h */, AF7777C109B64BD400EA3033 /* stonerview-osc.c */, AF7777C209B64BD400EA3033 /* stonerview-osc.h */, AF7777C309B64BD400EA3033 /* stonerview-view.c */, AF7777C409B64BD400EA3033 /* stonerview.c */, AF7777C509B64BD400EA3033 /* stonerview.h */, AFA559A80993326300F3E977 /* superquadrics.c */, AF4A3463102A5A0E00A81B2A /* surfaces.c */, AF0839AC09930C4900277BE9 /* swim.c */, AFA563090993948F00F3E977 /* tangram.c */, AFA563070993948F00F3E977 /* tangram_shapes.c */, AFA563080993948F00F3E977 /* tangram_shapes.h */, AFC211930E4E30C800D87B6E /* teapot.c */, AFC211940E4E30C800D87B6E /* teapot.h */, AFA5638E0993980D00F3E977 /* timetunnel.c */, AFA55E990993608800F3E977 /* toast.c */, AFA55E9A0993608800F3E977 /* toast.dxf */, AFA55E9B0993608800F3E977 /* toast2.c */, AFA55E9C0993608800F3E977 /* toast2.dxf */, AFA55EAB0993608800F3E977 /* toaster.c */, AFA55EAC0993608800F3E977 /* toaster.dxf */, AFA55E9D0993608800F3E977 /* toaster_base.c */, AFA55E9F0993608800F3E977 /* toaster_handle.c */, AFA55EA10993608800F3E977 /* toaster_handle2.c */, AFA55EA30993608800F3E977 /* toaster_jet.c */, AFA55EA50993608800F3E977 /* toaster_knob.c */, AFA55EA70993608800F3E977 /* toaster_slots.c */, AFA55EA90993608800F3E977 /* toaster_wing.c */, AF998EF80A083E750051049D /* topblock.c */, AF083A58099312B000277BE9 /* tunnel_draw.c */, AF083A5D099312DB00277BE9 /* tunnel_draw.h */, AFDA65A4178A541A0070D24B /* unknownpleasures.c */, AF0DCA5F0C4CBB7300D76972 /* voronoi.c */, AF0839AD09930C4900277BE9 /* whale.c */, AF39E2A1198A13F50064A58D /* winduprobot.c */, ); name = OpenGL; sourceTree = ""; }; AFC258670988A468000655EE /* config */ = { isa = PBXGroup; children = ( AFE6A4360CDD8026002805BF /* abstractile.xml */, AFC258680988A468000655EE /* anemone.xml */, AFC258690988A468000655EE /* anemotaxis.xml */, AFC2586A0988A468000655EE /* ant.xml */, AFC2586B0988A468000655EE /* antinspect.xml */, AFC2586C0988A468000655EE /* antmaze.xml */, AFC2586D0988A468000655EE /* antspotlight.xml */, AFC2586E0988A468000655EE /* apollonian.xml */, AFC2586F0988A468000655EE /* apple2.xml */, AFC258700988A468000655EE /* atlantis.xml */, AFC258710988A468000655EE /* attraction.xml */, AFC258720988A468000655EE /* atunnel.xml */, AFC258730988A468000655EE /* barcode.xml */, AF73FF3B1A0988C500E485E9 /* binaryring.xml */, AFC258740988A468000655EE /* blaster.xml */, AFC258750988A468000655EE /* blinkbox.xml */, AFC258760988A468000655EE /* blitspin.xml */, AFC258770988A468000655EE /* blocktube.xml */, AFC258780988A468000655EE /* boing.xml */, AFC258790988A468000655EE /* bouboule.xml */, AFC2587A0988A468000655EE /* bouncingcow.xml */, AFC2587B0988A468000655EE /* boxed.xml */, AFC2587C0988A468000655EE /* boxfit.xml */, AFC2587D0988A468000655EE /* braid.xml */, AFC2587E0988A468000655EE /* bsod.xml */, AFC2587F0988A468000655EE /* bubble3d.xml */, AFC258800988A468000655EE /* bubbles.xml */, AFC258810988A468000655EE /* bumps.xml */, AFC258820988A468000655EE /* cage.xml */, AFC258830988A468000655EE /* carousel.xml */, AFC258840988A468000655EE /* ccurve.xml */, AFC258850988A468000655EE /* celtic.xml */, AFC258860988A468000655EE /* circuit.xml */, AF5C9B0F1A0CCF4E00B0147A /* cityflow.xml */, AFC258870988A468000655EE /* cloudlife.xml */, AF3581E61431D61D00E09C51 /* companioncube.xml */, AFC258880988A468000655EE /* compass.xml */, AFC258890988A468000655EE /* coral.xml */, AFC2588B0988A468000655EE /* crackberg.xml */, AFC2588C0988A468000655EE /* critical.xml */, AFC2588D0988A468000655EE /* crystal.xml */, AFC2588E0988A468000655EE /* cube21.xml */, AFC2588F0988A468000655EE /* cubenetic.xml */, AFC258900988A468000655EE /* cubestorm.xml */, AF4FF4D30D52CCAA00666F98 /* cubicgrid.xml */, AFF4634B0C44046500EE6509 /* cwaves.xml */, AFC258910988A468000655EE /* cynosure.xml */, AFC258920988A468000655EE /* dangerball.xml */, AFC258930988A468000655EE /* decayscreen.xml */, AFC258940988A468000655EE /* deco.xml */, AFC258950988A468000655EE /* deluxe.xml */, AFC258960988A468000655EE /* demon.xml */, AFC258970988A468000655EE /* discrete.xml */, AFC258980988A468000655EE /* distort.xml */, AF77787909B6545E00EA3033 /* dnalogo.xml */, AFC258990988A468000655EE /* drift.xml */, AFC2589B0988A468000655EE /* endgame.xml */, AFC2589C0988A468000655EE /* engine.xml */, AFC2589D0988A468000655EE /* epicycle.xml */, AFC2589E0988A468000655EE /* eruption.xml */, AFC2589F0988A468000655EE /* euler2d.xml */, AFC258A00988A468000655EE /* extrusion.xml */, AFC258A10988A468000655EE /* fadeplot.xml */, AFC258A20988A468000655EE /* fiberlamp.xml */, AFC258A40988A468000655EE /* fireworkx.xml */, AFC258A50988A468000655EE /* flag.xml */, AFC258A60988A468000655EE /* flame.xml */, AFC258A70988A468000655EE /* flipflop.xml */, AFC258A80988A468000655EE /* flipscreen3d.xml */, AFC258A90988A468000655EE /* fliptext.xml */, AFC258AA0988A468000655EE /* flow.xml */, AFC258AB0988A468000655EE /* fluidballs.xml */, AFC258AC0988A468000655EE /* flurry.xml */, AFC258AD0988A468000655EE /* flyingtoasters.xml */, AFC258AE0988A468000655EE /* fontglide.xml */, AFC258AF0988A468000655EE /* forest.xml */, AFC258B00988A468000655EE /* fuzzyflakes.xml */, AFC258B10988A468000655EE /* galaxy.xml */, AFC258B20988A468000655EE /* gears.xml */, AFF3C9FD17CCAD9A0028F240 /* geodesic.xml */, AF7ACFD819FF0BA600BD752B /* geodesicgears.xml */, AFC258B30988A468000655EE /* gflux.xml */, AFC258B40988A468000655EE /* glblur.xml */, AFF463730C440BAC00EE6509 /* glcells.xml */, AFC258B50988A468000655EE /* gleidescope.xml */, AFC258B60988A468000655EE /* glforestfire.xml */, AFC258B70988A468000655EE /* glhanoi.xml */, AFC258B80988A468000655EE /* glknots.xml */, AFC258B90988A468000655EE /* glmatrix.xml */, AFC258BA0988A468000655EE /* glplanet.xml */, AF48E16B0A0C26A400F94CF9 /* glschool.xml */, AFC258BB0988A468000655EE /* glslideshow.xml */, AFC258BC0988A468000655EE /* glsnake.xml */, AFC258BD0988A468000655EE /* gltext.xml */, AFC258BF0988A468000655EE /* goop.xml */, AFC258C00988A468000655EE /* grav.xml */, AFC258C10988A468000655EE /* greynetic.xml */, AFC258C20988A468000655EE /* halftone.xml */, AFC258C30988A468000655EE /* halo.xml */, AFC258C40988A468000655EE /* helix.xml */, AFB591BC178B81E600EA4005 /* hexadrop.xml */, AF78D18E142DD99A002AAF77 /* hilbert.xml */, AFC258C50988A468000655EE /* hopalong.xml */, AFC258C60988A468000655EE /* hyperball.xml */, AFC258C70988A468000655EE /* hypercube.xml */, AFC258C80988A468000655EE /* hypertorus.xml */, AF3C715F0D624C7C0030CC0D /* hypnowheel.xml */, AFC258C90988A468000655EE /* ifs.xml */, AFC258CA0988A468000655EE /* imsmap.xml */, AFC258CB0988A468000655EE /* interaggregate.xml */, AFC258CC0988A468000655EE /* interference.xml */, AFC258CD0988A468000655EE /* intermomentary.xml */, AFC258CE0988A468000655EE /* jigglypuff.xml */, AFC258CF0988A468000655EE /* jigsaw.xml */, AFC258D00988A468000655EE /* juggle.xml */, AFC258D10988A468000655EE /* juggler3d.xml */, AFC258D20988A468000655EE /* julia.xml */, AFC258D30988A468000655EE /* kaleidescope.xml */, AF7511161782B66400380EA1 /* kaleidescope.xml */, AFB8A69A1782BA34004EDB85 /* kaleidocycle.xml */, AFC258D40988A468000655EE /* klein.xml */, AFC258D50988A468000655EE /* kumppa.xml */, AFC258D60988A468000655EE /* lament.xml */, AFC258D70988A468000655EE /* laser.xml */, AFC258D80988A468000655EE /* lavalite.xml */, AF1A17800D6D6F62008AF328 /* lcdscrub.xml */, AFC258D90988A468000655EE /* lightning.xml */, AFC258DA0988A468000655EE /* lisa.xml */, AFC258DB0988A468000655EE /* lissie.xml */, AFC258DC0988A468000655EE /* lmorph.xml */, AF4FD7020CE7A5BC005EE58E /* lockward.xml */, AFC258DD0988A468000655EE /* loop.xml */, AF0DCA370C4C74B700D76972 /* m6502.xml */, AFC258DE0988A468000655EE /* maze.xml */, AFC258DF0988A469000655EE /* memscroller.xml */, AFC258E00988A469000655EE /* menger.xml */, AFC258E10988A469000655EE /* metaballs.xml */, AFC258E20988A469000655EE /* mirrorblob.xml */, AFC258E30988A469000655EE /* mismunch.xml */, AFC258E40988A469000655EE /* moebius.xml */, AFE6A40D0CDD7BDC002805BF /* moebiusgears.xml */, AFC258E50988A469000655EE /* moire.xml */, AFC258E60988A469000655EE /* moire2.xml */, AFC258E70988A469000655EE /* molecule.xml */, AFC258E80988A469000655EE /* morph3d.xml */, AFC258E90988A469000655EE /* mountain.xml */, AFC258EA0988A469000655EE /* munch.xml */, AFC258EB0988A469000655EE /* nerverot.xml */, AFC258EC0988A469000655EE /* noof.xml */, AFC258ED0988A469000655EE /* noseguy.xml */, AFC258EE0988A469000655EE /* pacman.xml */, AFC258EF0988A469000655EE /* pedal.xml */, AFC258F00988A469000655EE /* penetrate.xml */, AFC258F10988A469000655EE /* penrose.xml */, AFC258F20988A469000655EE /* petri.xml */, AFC258F30988A469000655EE /* phosphor.xml */, AFD51DB80F063BE700471C02 /* photopile.xml */, AFC258F40988A469000655EE /* piecewise.xml */, AFC258F50988A469000655EE /* pinion.xml */, AFC258F60988A469000655EE /* pipes.xml */, AFC258F70988A469000655EE /* polyhedra.xml */, AFC258F80988A469000655EE /* polyominoes.xml */, AFC258F90988A469000655EE /* polytopes.xml */, AFC258FA0988A469000655EE /* pong.xml */, AFC258FB0988A469000655EE /* popsquares.xml */, AFFAB32C19158E2A0020F021 /* projectiveplane.xml */, AFC258FC0988A469000655EE /* providence.xml */, AFC258FD0988A469000655EE /* pulsar.xml */, AFC258FE0988A469000655EE /* pyro.xml */, AFC258FF0988A469000655EE /* qix.xml */, AFF28694178611720050A578 /* quasicrystal.xml */, AFC259000988A469000655EE /* queens.xml */, AFCCCBAD09BFE4B000353F4D /* rdbomb.xml */, AFC259030988A469000655EE /* ripples.xml */, AFC259040988A469000655EE /* rocks.xml */, AF63A8081AB4EF5D00593C75 /* romanboy.xml */, AFC259050988A469000655EE /* rorschach.xml */, AFC259060988A469000655EE /* rotor.xml */, AFC259070988A469000655EE /* rotzoomer.xml */, AFC259080988A469000655EE /* rubik.xml */, AF32D9FC0F3AD1330080F535 /* rubikblocks.xml */, AFC259090988A469000655EE /* sballs.xml */, AFC2590A0988A469000655EE /* shadebobs.xml */, AFC2590B0988A469000655EE /* sierpinski.xml */, AFC2590C0988A469000655EE /* sierpinski3d.xml */, AFE2A4740E2E911200ADB298 /* skytentacles.xml */, AFC2590D0988A469000655EE /* slidescreen.xml */, AFC2590E0988A469000655EE /* slip.xml */, AFC2590F0988A469000655EE /* sonar.xml */, AFC259100988A469000655EE /* speedmine.xml */, AFC259110988A469000655EE /* sphere.xml */, AFC259130988A469000655EE /* spheremonics.xml */, AFC259140988A469000655EE /* spiral.xml */, AFCF83521AF5B5FD008BB7E1 /* splitflap.xml */, AFC259150988A469000655EE /* spotlight.xml */, AFC259160988A469000655EE /* sproingies.xml */, AFC259170988A469000655EE /* squiral.xml */, AFC259190988A469000655EE /* stairs.xml */, AFC2591A0988A469000655EE /* starfish.xml */, AFC2591B0988A469000655EE /* starwars.xml */, AFC2591C0988A469000655EE /* stonerview.xml */, AFC2591D0988A469000655EE /* strange.xml */, AFC2591E0988A469000655EE /* substrate.xml */, AFC2591F0988A469000655EE /* superquadrics.xml */, AF4A3461102A59EB00A81B2A /* surfaces.xml */, AFC259200988A469000655EE /* swirl.xml */, AFC259210988A469000655EE /* t3d.xml */, AFC259220988A469000655EE /* tangram.xml */, AF68A49419196E3E00D41CD1 /* tessellimage.xml */, CE3D01681B76F83E00993C75 /* testx11.xml */, AFC259230988A469000655EE /* thornbird.xml */, AFC259240988A469000655EE /* timetunnel.xml */, AF998EFA0A083E8C0051049D /* topblock.xml */, AFC259250988A469000655EE /* triangle.xml */, AF3582211433318500E09C51 /* tronbit.xml */, AFC259260988A469000655EE /* truchet.xml */, AFC259270988A469000655EE /* twang.xml */, AFC259280988A469000655EE /* vermiculate.xml */, AFC259290988A469000655EE /* vidwhacker.xml */, AFC2592A0988A469000655EE /* vines.xml */, AFDA65A3178A541A0070D24B /* unknownpleasures.xml */, AF0DCA610C4CBB8E00D76972 /* voronoi.xml */, AFC2592B0988A469000655EE /* wander.xml */, AFC2592C0988A469000655EE /* webcollage.xml */, AFC2592D0988A469000655EE /* whirlwindwarp.xml */, AFC2592F0988A469000655EE /* whirlygig.xml */, AF39E2AC198A15820064A58D /* winduprobot.xml */, AFC259300988A469000655EE /* worm.xml */, AFC259310988A469000655EE /* wormhole.xml */, AFC259320988A469000655EE /* xanalogtv.xml */, AFC259370988A469000655EE /* xflame.xml */, AFC259380988A469000655EE /* xjack.xml */, AFC259390988A469000655EE /* xlyap.xml */, AFC2593A0988A469000655EE /* xmatrix.xml */, AFC2593D0988A469000655EE /* xrayswarm.xml */, AFC2593F0988A469000655EE /* xspirograph.xml */, AFC259430988A469000655EE /* zoom.xml */, ); name = config; path = ../hacks/config; sourceTree = ""; }; AFE1FD520981E35400F7970E /* Utils */ = { isa = PBXGroup; children = ( AFDA11211934424D003D397F /* aligned_malloc.c */, AFDA11221934424D003D397F /* aligned_malloc.h */, CE9289D119BD00E200961F22 /* async_netdb.c */, CE9289D219BD00E300961F22 /* async_netdb.h */, AF9D473609B52EE0006E59CF /* colorbars.c */, AF9D473709B52EE0006E59CF /* colorbars.h */, AFC25B990988BC08000655EE /* colors.c */, AFC25B9A0988BC08000655EE /* colors.h */, AFE1FD530981E3CB00F7970E /* erase.c */, AFE1FD540981E3CB00F7970E /* erase.h */, AFA55A3E0993351F00F3E977 /* gllist.c */, AFA55A3F0993351F00F3E977 /* gllist.h */, AF480EB0098F63D600FB32B8 /* gltrackball.c */, AF480EB2098F63DF00FB32B8 /* gltrackball.h */, AFD56E0A0996A0ED00BA26F7 /* glut_roman.h */, AFD56E0B0996A0ED00BA26F7 /* glut_stroke.c */, AFD56E0C0996A0ED00BA26F7 /* glut_swidth.c */, AFD56E0D0996A0ED00BA26F7 /* glutstroke.h */, AFA5607909936FDD00F3E977 /* grab-ximage.c */, AFA5607A09936FDD00F3E977 /* grab-ximage.h */, AFAD462209D5F4DA00AB5F95 /* grabclient.c */, AFE1FD550981E3CB00F7970E /* hsv.c */, AFE1FD560981E3CB00F7970E /* hsv.h */, AF4774E7099D8D8C001F091E /* logo.c */, AFA55864099324D800F3E977 /* minixpm.c */, AFA55865099324D800F3E977 /* minixpm.h */, AFA55A93099336D800F3E977 /* normals.c */, AFA55A94099336D800F3E977 /* normals.h */, AF4775BE099D9E79001F091E /* resources.c */, AF4775BF099D9E79001F091E /* resources.h */, AF480EB7098F646400FB32B8 /* rotator.c */, AF480EAC098F63B000FB32B8 /* rotator.h */, AFB5A06B0981F4C600871B16 /* screenhack.h */, AFC254B909873AF9000655EE /* screenhackI.h */, AF480EBB098F649600FB32B8 /* sphere.c */, AF480EBA098F648700FB32B8 /* sphere.h */, AFE1FD570981E3CB00F7970E /* spline.c */, AFE1FD580981E3CB00F7970E /* spline.h */, AF77780809B64F4900EA3033 /* texfont.c */, AF77780909B64F4900EA3033 /* texfont.h */, AFC7592B158D8E8B00C5458E /* textclient.c */, AFC7592C158D8E8B00C5458E /* textclient.h */, AFDA11231934424D003D397F /* thread_util.c */, AFDA11241934424D003D397F /* thread_util.h */, AF480EAD098F63BE00FB32B8 /* trackball.c */, AF480EAF098F63CD00FB32B8 /* trackball.h */, AF480ED2098F652A00FB32B8 /* tube.c */, AF480ED1098F651C00FB32B8 /* tube.h */, AFB5A0ED0981FF8B00871B16 /* usleep.c */, AFB5A0EE0981FF8B00871B16 /* usleep.h */, AFE943B319DDF97F000A5E6D /* utf8wc.c */, AFE943B419DDF97F000A5E6D /* utf8wc.h */, AFE1FD590981E3CB00F7970E /* utils.h */, AFE1FD5A0981E3CB00F7970E /* version.h */, AFA33BD00B0587EE002B0E7D /* webcollage-helper-cocoa.m */, AFE943AF19DD54C1000A5E6D /* xft.c */, AFE943B019DD54C1000A5E6D /* xft.h */, AF480CBB098E37D600FB32B8 /* xlockmore.c */, AF480C89098E346700FB32B8 /* xlockmore.h */, AF480C8A098E34AB00FB32B8 /* xlockmoreI.h */, AF975C91099C929800B05160 /* xpm-pixmap.c */, AF975C92099C929800B05160 /* xpm-pixmap.h */, AF0839AE09930C4900277BE9 /* xpm-ximage.c */, AF0839AF09930C4900277BE9 /* xpm-ximage.h */, AFE1FD5B0981E3CB00F7970E /* yarandom.c */, AFE1FD5C0981E3CB00F7970E /* yarandom.h */, ); name = Utils; path = ..; sourceTree = ""; }; AFE1FD610981E3E700F7970E /* Hacks */ = { isa = PBXGroup; children = ( AF480DC7098F4EB500FB32B8 /* XScreenSaver */, AF480DCF098F4F0600FB32B8 /* Xlockmore */, AF480DD0098F4F2000FB32B8 /* OpenGL */, ); name = Hacks; path = ..; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ AF4808BD098C3B6C00FB32B8 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( AFA55867099324D800F3E977 /* minixpm.h in Headers */, AFA55A540993353500F3E977 /* gllist.h in Headers */, AFA55A96099336D800F3E977 /* normals.h in Headers */, AFE943B219DD54C1000A5E6D /* xft.h in Headers */, AF975C94099C929800B05160 /* xpm-pixmap.h in Headers */, AF4775C1099D9E79001F091E /* resources.h in Headers */, AF9D473909B52EE0006E59CF /* colorbars.h in Headers */, AFDA11261934424D003D397F /* aligned_malloc.h in Headers */, AFDA11281934424D003D397F /* thread_util.h in Headers */, AFBF893F0E41D930006A2D66 /* fps.h in Headers */, AFBF89B20E424036006A2D66 /* fpsI.h in Headers */, AF6048FC157C07C600CA21E4 /* jwzgles.h in Headers */, AF6048FD157C07C600CA21E4 /* jwzglesI.h in Headers */, AFC7592E158D8E8B00C5458E /* textclient.h in Headers */, CE9289D419BD00E300961F22 /* async_netdb.h in Headers */, AFE943B619DDF97F000A5E6D /* utf8wc.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXLegacyTarget section */ AF4FF4930D52CA0800666F98 /* m6502.h */ = { isa = PBXLegacyTarget; buildArgumentsString = "m6502.sh $(PRODUCT_NAME) images/m6502/*.asm"; buildConfigurationList = AF4FF4940D52CA0800666F98 /* Build configuration list for PBXLegacyTarget "m6502.h" */; buildPhases = ( ); buildToolPath = /bin/sh; buildWorkingDirectory = ../hacks/; dependencies = ( ); name = m6502.h; passBuildSettingsInEnvironment = 1; productName = molecules.h; }; AFA56119099378CB00F3E977 /* molecules.h */ = { isa = PBXLegacyTarget; buildArgumentsString = "molecules.sh $(PRODUCT_NAME) ../images/molecules/*.pdb"; buildConfigurationList = AFA5611A099378EA00F3E977 /* Build configuration list for PBXLegacyTarget "molecules.h" */; buildPhases = ( ); buildToolPath = /bin/sh; buildWorkingDirectory = ../hacks/glx/; dependencies = ( ); name = molecules.h; passBuildSettingsInEnvironment = 1; productName = molecules.h; }; /* End PBXLegacyTarget section */ /* Begin PBXNativeTarget section */ AF08398F09930B6B00277BE9 /* Atlantis */ = { isa = PBXNativeTarget; buildConfigurationList = AF08399F09930B6B00277BE9 /* Build configuration list for PBXNativeTarget "Atlantis" */; buildPhases = ( AF08399209930B6B00277BE9 /* Resources */, AF08399409930B6B00277BE9 /* Sources */, AF08399709930B6B00277BE9 /* Frameworks */, AF08399E09930B6B00277BE9 /* Rez */, AFA3D95309C03D9800E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF08399009930B6B00277BE9 /* PBXTargetDependency */, ); name = Atlantis; productName = Atlantis; productReference = AF0839A209930B6B00277BE9 /* Atlantis.saver */; productType = "com.apple.product-type.bundle"; }; AF083A32099311D700277BE9 /* Atunnel */ = { isa = PBXNativeTarget; buildConfigurationList = AF083A45099311D700277BE9 /* Build configuration list for PBXNativeTarget "Atunnel" */; buildPhases = ( AF083A35099311D700277BE9 /* Resources */, AF083A37099311D700277BE9 /* Sources */, AF083A3D099311D700277BE9 /* Frameworks */, AF083A44099311D700277BE9 /* Rez */, AFA3D95509C03D9C00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF083A33099311D700277BE9 /* PBXTargetDependency */, ); name = Atunnel; productName = Atunnel; productReference = AF083A48099311D700277BE9 /* Atunnel.saver */; productType = "com.apple.product-type.bundle"; }; AF0DC7AB0C4C73F600D76972 /* m6502 */ = { isa = PBXNativeTarget; buildConfigurationList = AF0DC7BA0C4C73F600D76972 /* Build configuration list for PBXNativeTarget "m6502" */; buildPhases = ( AF0DC7AE0C4C73F600D76972 /* Resources */, AF0DC7B00C4C73F600D76972 /* Sources */, AF0DC7B40C4C73F600D76972 /* Frameworks */, AF0DC7B80C4C73F600D76972 /* Rez */, AF0DC7B90C4C73F600D76972 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4FF4980D52CA5000666F98 /* PBXTargetDependency */, AF0DC7AC0C4C73F600D76972 /* PBXTargetDependency */, ); name = m6502; productName = Pong; productReference = AF0DC7BD0C4C73F600D76972 /* m6502.saver */; productType = "com.apple.product-type.bundle"; }; AF0DCA420C4CBB0D00D76972 /* Voronoi */ = { isa = PBXNativeTarget; buildConfigurationList = AF0DCA530C4CBB0D00D76972 /* Build configuration list for PBXNativeTarget "Voronoi" */; buildPhases = ( AF0DCA450C4CBB0D00D76972 /* Resources */, AF0DCA470C4CBB0D00D76972 /* Sources */, AF0DCA4A0C4CBB0D00D76972 /* Frameworks */, AF0DCA510C4CBB0D00D76972 /* Rez */, AF0DCA520C4CBB0D00D76972 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF0DCA430C4CBB0D00D76972 /* PBXTargetDependency */, ); name = Voronoi; productName = Voronoi; productReference = AF0DCA560C4CBB0D00D76972 /* Voronoi.saver */; productType = "com.apple.product-type.bundle"; }; AF1A17610D6D6EE3008AF328 /* LCDscrub */ = { isa = PBXNativeTarget; buildConfigurationList = AF1A17700D6D6EE3008AF328 /* Build configuration list for PBXNativeTarget "LCDscrub" */; buildPhases = ( AF1A17640D6D6EE3008AF328 /* Resources */, AF1A17670D6D6EE3008AF328 /* Sources */, AF1A176A0D6D6EE3008AF328 /* Frameworks */, AF1A176E0D6D6EE3008AF328 /* Rez */, AF1A176F0D6D6EE3008AF328 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF1A17620D6D6EE3008AF328 /* PBXTargetDependency */, ); name = LCDscrub; productName = LCDscrub; productReference = AF1A17730D6D6EE3008AF328 /* LCDscrub.saver */; productType = "com.apple.product-type.bundle"; }; AF1AD9E118500F9F00932759 /* XScreenSaverUpdater */ = { isa = PBXNativeTarget; buildConfigurationList = AF1ADA0E18500FA200932759 /* Build configuration list for PBXNativeTarget "XScreenSaverUpdater" */; buildPhases = ( AF1AD9DE18500F9F00932759 /* Sources */, AF1AD9DF18500F9F00932759 /* Frameworks */, AF1AD9E018500F9F00932759 /* Resources */, AF1ADA191850185F00932759 /* CopyFiles */, AF1ADA1E18501DC200932759 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( ); name = XScreenSaverUpdater; productName = XScreenSaverUpdater; productReference = AF1AD9E218500F9F00932759 /* XScreenSaverUpdater.app */; productType = "com.apple.product-type.application"; }; AF2D4D7F13E902F5002AA818 /* Phosphor-iOS */ = { isa = PBXNativeTarget; buildConfigurationList = AF2D4D8C13E902F5002AA818 /* Build configuration list for PBXNativeTarget "Phosphor-iOS" */; buildPhases = ( AF2D4D8213E902F5002AA818 /* Resources */, AF2D4D8513E902F5002AA818 /* Sources */, AF2D4D8813E902F5002AA818 /* Frameworks */, AF2D51F413E94AC4002AA818 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF2D4D8013E902F5002AA818 /* PBXTargetDependency */, AF2D4D9E13E90347002AA818 /* PBXTargetDependency */, ); name = "Phosphor-iOS"; productName = PhosphorApp; productReference = AF2D4D8F13E902F5002AA818 /* Phosphor.app */; productType = "com.apple.product-type.application"; }; AF2D4F6A13E91093002AA818 /* Apple2-iOS */ = { isa = PBXNativeTarget; buildConfigurationList = AF2D4F7B13E91093002AA818 /* Build configuration list for PBXNativeTarget "Apple2-iOS" */; buildPhases = ( AF2D4F6F13E91093002AA818 /* Resources */, AF2D4F7413E91093002AA818 /* Sources */, AF2D4F7713E91093002AA818 /* Frameworks */, AF2D51FD13E94B2D002AA818 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF2D4F6B13E91093002AA818 /* PBXTargetDependency */, AF2D4F8F13E91127002AA818 /* PBXTargetDependency */, ); name = "Apple2-iOS"; productName = Apple2App; productReference = AF2D4F7E13E91093002AA818 /* Apple2.app */; productType = "com.apple.product-type.application"; }; AF32D9E00F3AD0B40080F535 /* RubikBlocks */ = { isa = PBXNativeTarget; buildConfigurationList = AF32D9F10F3AD0B40080F535 /* Build configuration list for PBXNativeTarget "RubikBlocks" */; buildPhases = ( AF32D9E30F3AD0B40080F535 /* Resources */, AF32D9E50F3AD0B40080F535 /* Sources */, AF32D9E80F3AD0B40080F535 /* Frameworks */, AF32D9EF0F3AD0B40080F535 /* Rez */, AF32D9F00F3AD0B40080F535 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF32D9E10F3AD0B40080F535 /* PBXTargetDependency */, ); name = RubikBlocks; productName = RubikBlocks; productReference = AF32D9F40F3AD0B40080F535 /* RubikBlocks.saver */; productType = "com.apple.product-type.bundle"; }; AF3581BF1431D47B00E09C51 /* CompanionCube */ = { isa = PBXNativeTarget; buildConfigurationList = AF3581D21431D47B00E09C51 /* Build configuration list for PBXNativeTarget "CompanionCube" */; buildPhases = ( AF3581C21431D47B00E09C51 /* Resources */, AF3581C51431D47B00E09C51 /* Sources */, AF3581C91431D47B00E09C51 /* Frameworks */, AF3581D01431D47B00E09C51 /* Rez */, AF3581D11431D47B00E09C51 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF3581C01431D47B00E09C51 /* PBXTargetDependency */, ); name = CompanionCube; productName = CompanionCube; productReference = AF3581D51431D47B00E09C51 /* CompanionCube.saver */; productType = "com.apple.product-type.bundle"; }; AF3581FB143330F900E09C51 /* TronBit */ = { isa = PBXNativeTarget; buildConfigurationList = AF358213143330F900E09C51 /* Build configuration list for PBXNativeTarget "TronBit" */; buildPhases = ( AF3581FE143330F900E09C51 /* Resources */, AF358202143330F900E09C51 /* Sources */, AF35820A143330F900E09C51 /* Frameworks */, AF358211143330F900E09C51 /* Rez */, AF358212143330F900E09C51 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF3581FC143330F900E09C51 /* PBXTargetDependency */, ); name = TronBit; productName = CompanionCube; productReference = AF358216143330F900E09C51 /* TronBit.saver */; productType = "com.apple.product-type.bundle"; }; AF35E88A0E63823600691F2F /* Jigsaw */ = { isa = PBXNativeTarget; buildConfigurationList = AF35E89D0E63823600691F2F /* Build configuration list for PBXNativeTarget "Jigsaw" */; buildPhases = ( AF35E88D0E63823600691F2F /* Resources */, AF35E88F0E63823600691F2F /* Sources */, AF35E8940E63823600691F2F /* Frameworks */, AF35E89B0E63823600691F2F /* Rez */, AF35E89C0E63823600691F2F /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF35E88B0E63823600691F2F /* PBXTargetDependency */, ); name = Jigsaw; productName = Jigsaw; productReference = AF35E8A00E63823600691F2F /* Jigsaw.saver */; productType = "com.apple.product-type.bundle"; }; AF39E282198A11F60064A58D /* WindupRobot */ = { isa = PBXNativeTarget; buildConfigurationList = AF39E293198A11F60064A58D /* Build configuration list for PBXNativeTarget "WindupRobot" */; buildPhases = ( AF39E285198A11F60064A58D /* Resources */, AF39E287198A11F60064A58D /* Sources */, AF39E28A198A11F60064A58D /* Frameworks */, AF39E291198A11F60064A58D /* Rez */, AF39E292198A11F60064A58D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF39E283198A11F60064A58D /* PBXTargetDependency */, ); name = WindupRobot; productName = DangerBall; productReference = AF39E296198A11F60064A58D /* WindupRobot.saver */; productType = "com.apple.product-type.bundle"; }; AF3C71450D624BF50030CC0D /* Hypnowheel */ = { isa = PBXNativeTarget; buildConfigurationList = AF3C71560D624BF50030CC0D /* Build configuration list for PBXNativeTarget "Hypnowheel" */; buildPhases = ( AF3C71480D624BF50030CC0D /* Resources */, AF3C714A0D624BF50030CC0D /* Sources */, AF3C714D0D624BF50030CC0D /* Frameworks */, AF3C71540D624BF50030CC0D /* Rez */, AF3C71550D624BF50030CC0D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF3C71460D624BF50030CC0D /* PBXTargetDependency */, ); name = Hypnowheel; productName = Hypnowheel; productReference = AF3C71590D624BF50030CC0D /* Hypnowheel.saver */; productType = "com.apple.product-type.bundle"; }; AF476FB5099D154F001F091E /* Interference */ = { isa = PBXNativeTarget; buildConfigurationList = AF476FC3099D154F001F091E /* Build configuration list for PBXNativeTarget "Interference" */; buildPhases = ( AF476FB8099D154F001F091E /* Resources */, AF476FBB099D154F001F091E /* Sources */, AF476FBE099D154F001F091E /* Frameworks */, AF476FC2099D154F001F091E /* Rez */, AFA3D89509C03C4400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF476FB6099D154F001F091E /* PBXTargetDependency */, ); name = Interference; productName = Interference; productReference = AF476FC6099D154F001F091E /* Interference.saver */; productType = "com.apple.product-type.bundle"; }; AF476FDA099D1686001F091E /* Truchet */ = { isa = PBXNativeTarget; buildConfigurationList = AF476FE8099D1686001F091E /* Build configuration list for PBXNativeTarget "Truchet" */; buildPhases = ( AF476FDD099D1686001F091E /* Resources */, AF476FE0099D1686001F091E /* Sources */, AF476FE3099D1686001F091E /* Frameworks */, AF476FE7099D1686001F091E /* Rez */, AFA3D8E309C03CCA00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF476FDB099D1686001F091E /* PBXTargetDependency */, ); name = Truchet; productName = Truchet; productReference = AF476FEB099D1686001F091E /* Truchet.saver */; productType = "com.apple.product-type.bundle"; }; AF47704C099D4385001F091E /* Deluxe */ = { isa = PBXNativeTarget; buildConfigurationList = AF477059099D4385001F091E /* Build configuration list for PBXNativeTarget "Deluxe" */; buildPhases = ( AF47704F099D4385001F091E /* Resources */, AF477051099D4385001F091E /* Sources */, AF477054099D4385001F091E /* Frameworks */, AF477058099D4385001F091E /* Rez */, AFA3D86F09C03BF700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47704D099D4385001F091E /* PBXTargetDependency */, ); name = Deluxe; productName = Deluxe; productReference = AF47705C099D4385001F091E /* Deluxe.saver */; productType = "com.apple.product-type.bundle"; }; AF477169099D4786001F091E /* Compass */ = { isa = PBXNativeTarget; buildConfigurationList = AF477176099D4786001F091E /* Build configuration list for PBXNativeTarget "Compass" */; buildPhases = ( AF47716C099D4786001F091E /* Resources */, AF47716E099D4786001F091E /* Sources */, AF477171099D4786001F091E /* Frameworks */, AF477175099D4786001F091E /* Rez */, AFA3D86309C03BE200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47716A099D4786001F091E /* PBXTargetDependency */, ); name = Compass; productName = Compass; productReference = AF477179099D4786001F091E /* Compass.saver */; productType = "com.apple.product-type.bundle"; }; AF47717F099D4803001F091E /* Wander */ = { isa = PBXNativeTarget; buildConfigurationList = AF47718C099D4803001F091E /* Build configuration list for PBXNativeTarget "Wander" */; buildPhases = ( AF477182099D4803001F091E /* Resources */, AF477184099D4803001F091E /* Sources */, AF477187099D4803001F091E /* Frameworks */, AF47718B099D4803001F091E /* Rez */, AFA3D8E909C03CD500E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477180099D4803001F091E /* PBXTargetDependency */, ); name = Wander; productName = Wander; productReference = AF47718F099D4803001F091E /* Wander.saver */; productType = "com.apple.product-type.bundle"; }; AF4771A7099D4949001F091E /* T3D */ = { isa = PBXNativeTarget; buildConfigurationList = AF4771B4099D4949001F091E /* Build configuration list for PBXNativeTarget "T3D" */; buildPhases = ( AF4771AA099D4949001F091E /* Resources */, AF4771AC099D4949001F091E /* Sources */, AF4771AF099D4949001F091E /* Frameworks */, AF4771B3099D4949001F091E /* Rez */, AFA3D8E109C03CC400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4771A8099D4949001F091E /* PBXTargetDependency */, ); name = T3D; productName = T3D; productReference = AF4771B7099D4949001F091E /* T3D.saver */; productType = "com.apple.product-type.bundle"; }; AF4771DB099D4D9A001F091E /* CCurve */ = { isa = PBXNativeTarget; buildConfigurationList = AF4771E8099D4D9A001F091E /* Build configuration list for PBXNativeTarget "CCurve" */; buildPhases = ( AF4771DE099D4D9A001F091E /* Resources */, AF4771E0099D4D9A001F091E /* Sources */, AF4771E3099D4D9A001F091E /* Frameworks */, AF4771E7099D4D9A001F091E /* Rez */, AFA3D85D09C03BD700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4771DC099D4D9A001F091E /* PBXTargetDependency */, ); name = CCurve; productName = CCurve; productReference = AF4771EB099D4D9A001F091E /* CCurve.saver */; productType = "com.apple.product-type.bundle"; }; AF4771F2099D4E63001F091E /* NerveRot */ = { isa = PBXNativeTarget; buildConfigurationList = AF4771FF099D4E63001F091E /* Build configuration list for PBXNativeTarget "NerveRot" */; buildPhases = ( AF4771F5099D4E63001F091E /* Resources */, AF4771F7099D4E63001F091E /* Sources */, AF4771FA099D4E63001F091E /* Frameworks */, AF4771FE099D4E63001F091E /* Rez */, AFA3D8AF09C03C7300E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4771F3099D4E63001F091E /* PBXTargetDependency */, ); name = NerveRot; productName = NerveRot; productReference = AF477202099D4E64001F091E /* NerveRot.saver */; productType = "com.apple.product-type.bundle"; }; AF477208099D4EE8001F091E /* Whirlygig */ = { isa = PBXNativeTarget; buildConfigurationList = AF477215099D4EE8001F091E /* Build configuration list for PBXNativeTarget "Whirlygig" */; buildPhases = ( AF47720B099D4EE8001F091E /* Resources */, AF47720D099D4EE8001F091E /* Sources */, AF477210099D4EE8001F091E /* Frameworks */, AF477214099D4EE8001F091E /* Rez */, AFA3D8ED09C03CDB00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477209099D4EE8001F091E /* PBXTargetDependency */, ); name = Whirlygig; productName = Whirlygig; productReference = AF477218099D4EE8001F091E /* Whirlygig.saver */; productType = "com.apple.product-type.bundle"; }; AF47721E099D4F67001F091E /* Anemone */ = { isa = PBXNativeTarget; buildConfigurationList = AF47722B099D4F67001F091E /* Build configuration list for PBXNativeTarget "Anemone" */; buildPhases = ( AF477221099D4F67001F091E /* Resources */, AF477223099D4F67001F091E /* Sources */, AF477226099D4F67001F091E /* Frameworks */, AF47722A099D4F67001F091E /* Rez */, AFCCCBB509C033DF00353F4D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47721F099D4F67001F091E /* PBXTargetDependency */, ); name = Anemone; productName = Anemone; productReference = AF47722E099D4F67001F091E /* Anemone.saver */; productType = "com.apple.product-type.bundle"; }; AF477253099D5717001F091E /* Halftone */ = { isa = PBXNativeTarget; buildConfigurationList = AF477260099D5717001F091E /* Build configuration list for PBXNativeTarget "Halftone" */; buildPhases = ( AF477256099D5717001F091E /* Resources */, AF477258099D5717001F091E /* Sources */, AF47725B099D5717001F091E /* Frameworks */, AF47725F099D5717001F091E /* Rez */, AFA3D88509C03C2700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477254099D5717001F091E /* PBXTargetDependency */, ); name = Halftone; productName = Halftone; productReference = AF477263099D5717001F091E /* Halftone.saver */; productType = "com.apple.product-type.bundle"; }; AF47726B099D57B9001F091E /* PopSquares */ = { isa = PBXNativeTarget; buildConfigurationList = AF477278099D57B9001F091E /* Build configuration list for PBXNativeTarget "PopSquares" */; buildPhases = ( AF47726E099D57B9001F091E /* Resources */, AF477270099D57B9001F091E /* Sources */, AF477273099D57B9001F091E /* Frameworks */, AF477277099D57B9001F091E /* Rez */, AFA3D8BF09C03C8D00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47726C099D57B9001F091E /* PBXTargetDependency */, ); name = PopSquares; productName = PopSquares; productReference = AF47727B099D57B9001F091E /* PopSquares.saver */; productType = "com.apple.product-type.bundle"; }; AF477283099D5926001F091E /* Piecewise */ = { isa = PBXNativeTarget; buildConfigurationList = AF477290099D5926001F091E /* Build configuration list for PBXNativeTarget "Piecewise" */; buildPhases = ( AF477286099D5926001F091E /* Resources */, AF477288099D5926001F091E /* Sources */, AF47728B099D5926001F091E /* Frameworks */, AF47728F099D5926001F091E /* Rez */, AFA3D8BB09C03C8600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477284099D5926001F091E /* PBXTargetDependency */, ); name = Piecewise; productName = Piecewise; productReference = AF477293099D5926001F091E /* Piecewise.saver */; productType = "com.apple.product-type.bundle"; }; AF477382099D65A1001F091E /* Wormhole */ = { isa = PBXNativeTarget; buildConfigurationList = AF47738F099D65A1001F091E /* Build configuration list for PBXNativeTarget "Wormhole" */; buildPhases = ( AF477385099D65A1001F091E /* Resources */, AF477387099D65A1001F091E /* Sources */, AF47738A099D65A1001F091E /* Frameworks */, AF47738E099D65A1001F091E /* Rez */, AFA3D8EF09C03CDE00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477383099D65A1001F091E /* PBXTargetDependency */, ); name = Wormhole; productName = Wormhole; productReference = AF477392099D65A1001F091E /* Wormhole.saver */; productType = "com.apple.product-type.bundle"; }; AF47739A099D6648001F091E /* FuzzyFlakes */ = { isa = PBXNativeTarget; buildConfigurationList = AF4773A7099D6648001F091E /* Build configuration list for PBXNativeTarget "FuzzyFlakes" */; buildPhases = ( AF47739D099D6648001F091E /* Resources */, AF47739F099D6648001F091E /* Sources */, AF4773A2099D6648001F091E /* Frameworks */, AF4773A6099D6648001F091E /* Rez */, AFA3D87F09C03C1E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47739B099D6648001F091E /* PBXTargetDependency */, ); name = FuzzyFlakes; productName = FuzzyFlakes; productReference = AF4773AA099D6648001F091E /* FuzzyFlakes.saver */; productType = "com.apple.product-type.bundle"; }; AF4773C1099D67B9001F091E /* Anemotaxis */ = { isa = PBXNativeTarget; buildConfigurationList = AF4773CE099D67B9001F091E /* Build configuration list for PBXNativeTarget "Anemotaxis" */; buildPhases = ( AF4773C4099D67B9001F091E /* Resources */, AF4773C6099D67B9001F091E /* Sources */, AF4773C9099D67B9001F091E /* Frameworks */, AF4773CD099D67B9001F091E /* Rez */, AFCCCBC709C03AAF00353F4D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4773C2099D67B9001F091E /* PBXTargetDependency */, ); name = Anemotaxis; productName = Anemotaxis; productReference = AF4773D1099D67B9001F091E /* Anemotaxis.saver */; productType = "com.apple.product-type.bundle"; }; AF477401099D69E7001F091E /* Intermomentary */ = { isa = PBXNativeTarget; buildConfigurationList = AF47740F099D69E7001F091E /* Build configuration list for PBXNativeTarget "Intermomentary" */; buildPhases = ( AF477404099D69E7001F091E /* Resources */, AF477407099D69E7001F091E /* Sources */, AF47740A099D69E7001F091E /* Frameworks */, AF47740E099D69E7001F091E /* Rez */, AFA3D89709C03C4700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477402099D69E7001F091E /* PBXTargetDependency */, ); name = Intermomentary; productName = Intermomentary; productReference = AF477412099D69E7001F091E /* Intermomentary.saver */; productType = "com.apple.product-type.bundle"; }; AF477426099D7C70001F091E /* IFS */ = { isa = PBXNativeTarget; buildConfigurationList = AF477434099D7C70001F091E /* Build configuration list for PBXNativeTarget "IFS" */; buildPhases = ( AF477429099D7C70001F091E /* Resources */, AF47742C099D7C70001F091E /* Sources */, AF47742F099D7C70001F091E /* Frameworks */, AF477433099D7C70001F091E /* Rez */, AFA3D88F09C03C3900E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477427099D7C70001F091E /* PBXTargetDependency */, ); name = IFS; productName = IFS; productReference = AF477437099D7C70001F091E /* IFS.saver */; productType = "com.apple.product-type.bundle"; }; AF477442099D7D33001F091E /* XMatrix */ = { isa = PBXNativeTarget; buildConfigurationList = AF47744F099D7D33001F091E /* Build configuration list for PBXNativeTarget "XMatrix" */; buildPhases = ( AF477445099D7D33001F091E /* Resources */, AF477447099D7D33001F091E /* Sources */, AF47744A099D7D33001F091E /* Frameworks */, AF47744E099D7D33001F091E /* Rez */, AFA3D8F909C03CED00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477443099D7D33001F091E /* PBXTargetDependency */, ); name = XMatrix; productName = XMatrix; productReference = AF477452099D7D33001F091E /* XMatrix.saver */; productType = "com.apple.product-type.bundle"; }; AF477483099D89E4001F091E /* Flame */ = { isa = PBXNativeTarget; buildConfigurationList = AF477490099D89E4001F091E /* Build configuration list for PBXNativeTarget "Flame" */; buildPhases = ( AF477486099D89E4001F091E /* Resources */, AF477488099D89E4001F091E /* Sources */, AF47748B099D89E4001F091E /* Frameworks */, AF47748F099D89E4001F091E /* Rez */, AFA3D87909C03C1200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477484099D89E4001F091E /* PBXTargetDependency */, ); name = Flame; productName = Flame; productReference = AF477493099D89E4001F091E /* Flame.saver */; productType = "com.apple.product-type.bundle"; }; AF477499099D8A74001F091E /* Kaleidescope */ = { isa = PBXNativeTarget; buildConfigurationList = AF4774A6099D8A74001F091E /* Build configuration list for PBXNativeTarget "Kaleidescope" */; buildPhases = ( AF47749C099D8A74001F091E /* Resources */, AF47749E099D8A74001F091E /* Sources */, AF4774A1099D8A74001F091E /* Frameworks */, AF4774A5099D8A74001F091E /* Rez */, AFA3D89B09C03C4D00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47749A099D8A74001F091E /* PBXTargetDependency */, ); name = Kaleidescope; productName = Kaleidescope; productReference = AF4774A9099D8A74001F091E /* Kaleidescope.saver */; productType = "com.apple.product-type.bundle"; }; AF4774B4099D8B5F001F091E /* LMorph */ = { isa = PBXNativeTarget; buildConfigurationList = AF4774C1099D8B5F001F091E /* Build configuration list for PBXNativeTarget "LMorph" */; buildPhases = ( AF4774B7099D8B5F001F091E /* Resources */, AF4774B9099D8B5F001F091E /* Sources */, AF4774BC099D8B5F001F091E /* Frameworks */, AF4774C0099D8B5F001F091E /* Rez */, AFA3D89F09C03C5300E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4774B5099D8B5F001F091E /* PBXTargetDependency */, ); name = LMorph; productName = LMorph; productReference = AF4774C4099D8B5F001F091E /* LMorph.saver */; productType = "com.apple.product-type.bundle"; }; AF4774CE099D8BFF001F091E /* Maze */ = { isa = PBXNativeTarget; buildConfigurationList = AF4774DB099D8BFF001F091E /* Build configuration list for PBXNativeTarget "Maze" */; buildPhases = ( AF4774D1099D8BFF001F091E /* Resources */, AF4774D3099D8BFF001F091E /* Sources */, AF4774D6099D8BFF001F091E /* Frameworks */, AF4774DA099D8BFF001F091E /* Rez */, AFA3D8A109C03C5600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4774CF099D8BFF001F091E /* PBXTargetDependency */, ); name = Maze; productName = Maze; productReference = AF4774DE099D8BFF001F091E /* Maze.saver */; productType = "com.apple.product-type.bundle"; }; AF47755D099D9A1A001F091E /* Pedal */ = { isa = PBXNativeTarget; buildConfigurationList = AF47756A099D9A1A001F091E /* Build configuration list for PBXNativeTarget "Pedal" */; buildPhases = ( AF477560099D9A1A001F091E /* Resources */, AF477562099D9A1A001F091E /* Sources */, AF477565099D9A1A001F091E /* Frameworks */, AF477569099D9A1A001F091E /* Rez */, AFA3D8B309C03C7900E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47755E099D9A1A001F091E /* PBXTargetDependency */, ); name = Pedal; productName = Pedal; productReference = AF47756D099D9A1A001F091E /* Pedal.saver */; productType = "com.apple.product-type.bundle"; }; AF477583099D9C28001F091E /* Pyro */ = { isa = PBXNativeTarget; buildConfigurationList = AF477590099D9C28001F091E /* Build configuration list for PBXNativeTarget "Pyro" */; buildPhases = ( AF477586099D9C28001F091E /* Resources */, AF477588099D9C28001F091E /* Sources */, AF47758B099D9C28001F091E /* Frameworks */, AF47758F099D9C28001F091E /* Rez */, AFA3D8C109C03C9000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477584099D9C28001F091E /* PBXTargetDependency */, ); name = Pyro; productName = Pyro; productReference = AF477593099D9C28001F091E /* Pyro.saver */; productType = "com.apple.product-type.bundle"; }; AF47759F099D9CF7001F091E /* Starfish */ = { isa = PBXNativeTarget; buildConfigurationList = AF4775AC099D9CF7001F091E /* Build configuration list for PBXNativeTarget "Starfish" */; buildPhases = ( AF4775A2099D9CF7001F091E /* Resources */, AF4775A4099D9CF7001F091E /* Sources */, AF4775A7099D9CF7001F091E /* Frameworks */, AF4775AB099D9CF7001F091E /* Rez */, AFA3D8DD09C03CBD00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4775A0099D9CF7001F091E /* PBXTargetDependency */, ); name = Starfish; productName = Starfish; productReference = AF4775AF099D9CF7001F091E /* Starfish.saver */; productType = "com.apple.product-type.bundle"; }; AF4775D8099D9F69001F091E /* Coral */ = { isa = PBXNativeTarget; buildConfigurationList = AF4775E5099D9F69001F091E /* Build configuration list for PBXNativeTarget "Coral" */; buildPhases = ( AF4775DB099D9F69001F091E /* Resources */, AF4775DD099D9F69001F091E /* Sources */, AF4775E0099D9F69001F091E /* Frameworks */, AF4775E4099D9F69001F091E /* Rez */, AFA3D86509C03BE500E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4775D9099D9F69001F091E /* PBXTargetDependency */, ); name = Coral; productName = Coral; productReference = AF4775E8099D9F69001F091E /* Coral.saver */; productType = "com.apple.product-type.bundle"; }; AF4775F2099DA030001F091E /* Epicycle */ = { isa = PBXNativeTarget; buildConfigurationList = AF4775FF099DA030001F091E /* Build configuration list for PBXNativeTarget "Epicycle" */; buildPhases = ( AF4775F5099DA030001F091E /* Resources */, AF4775F7099DA030001F091E /* Sources */, AF4775FA099DA030001F091E /* Frameworks */, AF4775FE099DA030001F091E /* Rez */, AFA3D87309C03C0000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4775F3099DA030001F091E /* PBXTargetDependency */, ); name = Epicycle; productName = Epicycle; productReference = AF477602099DA030001F091E /* Epicycle.saver */; productType = "com.apple.product-type.bundle"; }; AF477613099DA26C001F091E /* Kumppa */ = { isa = PBXNativeTarget; buildConfigurationList = AF477620099DA26C001F091E /* Build configuration list for PBXNativeTarget "Kumppa" */; buildPhases = ( AF477616099DA26C001F091E /* Resources */, AF477618099DA26C001F091E /* Sources */, AF47761B099DA26C001F091E /* Frameworks */, AF47761F099DA26C001F091E /* Rez */, AFA3D89D09C03C5000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477614099DA26C001F091E /* PBXTargetDependency */, ); name = Kumppa; productName = Kumppa; productReference = AF477623099DA26C001F091E /* Kumppa.saver */; productType = "com.apple.product-type.bundle"; }; AF477644099DA6D0001F091E /* Squiral */ = { isa = PBXNativeTarget; buildConfigurationList = AF477651099DA6D0001F091E /* Build configuration list for PBXNativeTarget "Squiral" */; buildPhases = ( AF477647099DA6D0001F091E /* Resources */, AF477649099DA6D0001F091E /* Sources */, AF47764C099DA6D0001F091E /* Frameworks */, AF477650099DA6D0001F091E /* Rez */, AFA3D8DB09C03CBA00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477645099DA6D0001F091E /* PBXTargetDependency */, ); name = Squiral; productName = Squiral; productReference = AF477654099DA6D0001F091E /* Squiral.saver */; productType = "com.apple.product-type.bundle"; }; AF47765A099DA78E001F091E /* Critical */ = { isa = PBXNativeTarget; buildConfigurationList = AF477667099DA78E001F091E /* Build configuration list for PBXNativeTarget "Critical" */; buildPhases = ( AF47765D099DA78E001F091E /* Resources */, AF47765F099DA78E001F091E /* Sources */, AF477662099DA78E001F091E /* Frameworks */, AF477666099DA78E001F091E /* Rez */, AFA3D86709C03BE800E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47765B099DA78E001F091E /* PBXTargetDependency */, ); name = Critical; productName = Critical; productReference = AF47766A099DA78F001F091E /* Critical.saver */; productType = "com.apple.product-type.bundle"; }; AF477670099DA849001F091E /* Petri */ = { isa = PBXNativeTarget; buildConfigurationList = AF47767D099DA849001F091E /* Build configuration list for PBXNativeTarget "Petri" */; buildPhases = ( AF477673099DA849001F091E /* Resources */, AF477675099DA849001F091E /* Sources */, AF477678099DA849001F091E /* Frameworks */, AF47767C099DA849001F091E /* Rez */, AFA3D8B709C03C7F00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477671099DA849001F091E /* PBXTargetDependency */, ); name = Petri; productName = Petri; productReference = AF477680099DA849001F091E /* Petri.saver */; productType = "com.apple.product-type.bundle"; }; AF47768F099DAA6F001F091E /* Blaster */ = { isa = PBXNativeTarget; buildConfigurationList = AF47769C099DAA6F001F091E /* Build configuration list for PBXNativeTarget "Blaster" */; buildPhases = ( AF477692099DAA6F001F091E /* Resources */, AF477694099DAA6F001F091E /* Sources */, AF477697099DAA6F001F091E /* Frameworks */, AF47769B099DAA6F001F091E /* Rez */, AFCCCBD109C03AFC00353F4D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477690099DAA6F001F091E /* PBXTargetDependency */, ); name = Blaster; productName = Blaster; productReference = AF47769F099DAA6F001F091E /* Blaster.saver */; productType = "com.apple.product-type.bundle"; }; AF4776AA099DABDD001F091E /* XSpirograph */ = { isa = PBXNativeTarget; buildConfigurationList = AF4776B7099DABDD001F091E /* Build configuration list for PBXNativeTarget "XSpirograph" */; buildPhases = ( AF4776AD099DABDD001F091E /* Resources */, AF4776AF099DABDD001F091E /* Sources */, AF4776B2099DABDD001F091E /* Frameworks */, AF4776B6099DABDD001F091E /* Rez */, AFA3D8FD09C03CF400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4776AB099DABDD001F091E /* PBXTargetDependency */, ); name = XSpirograph; productName = XSpirograph; productReference = AF4776BA099DABDD001F091E /* XSpirograph.saver */; productType = "com.apple.product-type.bundle"; }; AF4776C0099DAC8A001F091E /* XRaySwarm */ = { isa = PBXNativeTarget; buildConfigurationList = AF4776CD099DAC8A001F091E /* Build configuration list for PBXNativeTarget "XRaySwarm" */; buildPhases = ( AF4776C3099DAC8A001F091E /* Resources */, AF4776C5099DAC8A001F091E /* Sources */, AF4776C8099DAC8A001F091E /* Frameworks */, AF4776CC099DAC8A001F091E /* Rez */, AFA3D8FB09C03CF100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4776C1099DAC8A001F091E /* PBXTargetDependency */, ); name = XRaySwarm; productName = XRaySwarm; productReference = AF4776D0099DAC8A001F091E /* XRaySwarm.saver */; productType = "com.apple.product-type.bundle"; }; AF4776DB099DADDF001F091E /* WhirlWindWarp */ = { isa = PBXNativeTarget; buildConfigurationList = AF4776E8099DADDF001F091E /* Build configuration list for PBXNativeTarget "WhirlWindWarp" */; buildPhases = ( AF4776DE099DADDF001F091E /* Resources */, AF4776E0099DADDF001F091E /* Sources */, AF4776E3099DADDF001F091E /* Frameworks */, AF4776E7099DADDF001F091E /* Rez */, AFA3D8EB09C03CD800E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4776DC099DADDF001F091E /* PBXTargetDependency */, ); name = WhirlWindWarp; productName = WhirlWindWarp; productReference = AF4776EB099DADDF001F091E /* WhirlWindWarp.saver */; productType = "com.apple.product-type.bundle"; }; AF4776F1099DAE7A001F091E /* Vermiculate */ = { isa = PBXNativeTarget; buildConfigurationList = AF4776FE099DAE7A001F091E /* Build configuration list for PBXNativeTarget "Vermiculate" */; buildPhases = ( AF4776F4099DAE7A001F091E /* Resources */, AF4776F6099DAE7A001F091E /* Sources */, AF4776F9099DAE7A001F091E /* Frameworks */, AF4776FD099DAE7A001F091E /* Rez */, AFA3D8E709C03CD100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4776F2099DAE7A001F091E /* PBXTargetDependency */, ); name = Vermiculate; productName = Vermiculate; productReference = AF477701099DAE7A001F091E /* Vermiculate.saver */; productType = "com.apple.product-type.bundle"; }; AF47770D099DAF9F001F091E /* CloudLife */ = { isa = PBXNativeTarget; buildConfigurationList = AF47771A099DAF9F001F091E /* Build configuration list for PBXNativeTarget "CloudLife" */; buildPhases = ( AF477710099DAF9F001F091E /* Resources */, AF477712099DAF9F001F091E /* Sources */, AF477715099DAF9F001F091E /* Frameworks */, AF477719099DAF9F001F091E /* Rez */, AFA3D86109C03BDE00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47770E099DAF9F001F091E /* PBXTargetDependency */, ); name = CloudLife; productName = CloudLife; productReference = AF47771D099DAF9F001F091E /* CloudLife.saver */; productType = "com.apple.product-type.bundle"; }; AF477723099DB044001F091E /* Substrate */ = { isa = PBXNativeTarget; buildConfigurationList = AF477730099DB044001F091E /* Build configuration list for PBXNativeTarget "Substrate" */; buildPhases = ( AF477726099DB044001F091E /* Resources */, AF477728099DB044001F091E /* Sources */, AF47772B099DB044001F091E /* Frameworks */, AF47772F099DB044001F091E /* Rez */, AFA3D8DF09C03CC000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477724099DB044001F091E /* PBXTargetDependency */, ); name = Substrate; productName = Substrate; productReference = AF477733099DB044001F091E /* Substrate.saver */; productType = "com.apple.product-type.bundle"; }; AF477752099DB61E001F091E /* Interaggregate */ = { isa = PBXNativeTarget; buildConfigurationList = AF47775F099DB61E001F091E /* Build configuration list for PBXNativeTarget "Interaggregate" */; buildPhases = ( AF477755099DB61E001F091E /* Resources */, AF477757099DB61E001F091E /* Sources */, AF47775A099DB61E001F091E /* Frameworks */, AF47775E099DB61E001F091E /* Rez */, AFA3D89309C03C4000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477753099DB61E001F091E /* PBXTargetDependency */, ); name = Interaggregate; productName = Interaggregate; productReference = AF477762099DB61E001F091E /* Interaggregate.saver */; productType = "com.apple.product-type.bundle"; }; AF477774099DB965001F091E /* Celtic */ = { isa = PBXNativeTarget; buildConfigurationList = AF477781099DB965001F091E /* Build configuration list for PBXNativeTarget "Celtic" */; buildPhases = ( AF477777099DB965001F091E /* Resources */, AF477779099DB965001F091E /* Sources */, AF47777C099DB965001F091E /* Frameworks */, AF477780099DB965001F091E /* Rez */, AFA3D85F09C03BDA00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477775099DB965001F091E /* PBXTargetDependency */, ); name = Celtic; productName = Celtic; productReference = AF477784099DB965001F091E /* Celtic.saver */; productType = "com.apple.product-type.bundle"; }; AF477790099DBA90001F091E /* FluidBalls */ = { isa = PBXNativeTarget; buildConfigurationList = AF47779D099DBA90001F091E /* Build configuration list for PBXNativeTarget "FluidBalls" */; buildPhases = ( AF477793099DBA90001F091E /* Resources */, AF477795099DBA90001F091E /* Sources */, AF477798099DBA90001F091E /* Frameworks */, AF47779C099DBA90001F091E /* Rez */, AFA3D87B09C03C1700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477791099DBA90001F091E /* PBXTargetDependency */, ); name = FluidBalls; productName = FluidBalls; productReference = AF4777A0099DBA90001F091E /* FluidBalls.saver */; productType = "com.apple.product-type.bundle"; }; AF4777D1099DC183001F091E /* BoxFit */ = { isa = PBXNativeTarget; buildConfigurationList = AF4777DE099DC183001F091E /* Build configuration list for PBXNativeTarget "BoxFit" */; buildPhases = ( AF4777D4099DC183001F091E /* Resources */, AF4777D6099DC183001F091E /* Sources */, AF4777D9099DC183001F091E /* Frameworks */, AF4777DD099DC183001F091E /* Rez */, AFCCCBD509C03B0500353F4D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4777D2099DC183001F091E /* PBXTargetDependency */, ); name = BoxFit; productName = BoxFit; productReference = AF4777E1099DC183001F091E /* BoxFit.saver */; productType = "com.apple.product-type.bundle"; }; AF4778AB099DDB79001F091E /* Penetrate */ = { isa = PBXNativeTarget; buildConfigurationList = AF4778B8099DDB79001F091E /* Build configuration list for PBXNativeTarget "Penetrate" */; buildPhases = ( AF4778AE099DDB79001F091E /* Resources */, AF4778B0099DDB79001F091E /* Sources */, AF4778B3099DDB79001F091E /* Frameworks */, AF4778B7099DDB79001F091E /* Rez */, AFA3D8B509C03C7C00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4778AC099DDB79001F091E /* PBXTargetDependency */, ); name = Penetrate; productName = Penetrate; productReference = AF4778BB099DDB79001F091E /* Penetrate.saver */; productType = "com.apple.product-type.bundle"; }; AF4778C7099DDCAE001F091E /* XJack */ = { isa = PBXNativeTarget; buildConfigurationList = AF4778D4099DDCAE001F091E /* Build configuration list for PBXNativeTarget "XJack" */; buildPhases = ( AF4778CA099DDCAE001F091E /* Resources */, AF4778CC099DDCAE001F091E /* Sources */, AF4778CF099DDCAE001F091E /* Frameworks */, AF4778D3099DDCAE001F091E /* Rez */, AFA3D8F509C03CE800E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4778C8099DDCAE001F091E /* PBXTargetDependency */, ); name = XJack; productName = XJack; productReference = AF4778D7099DDCAE001F091E /* XJack.saver */; productType = "com.apple.product-type.bundle"; }; AF4778E8099DDDC8001F091E /* Cynosure */ = { isa = PBXNativeTarget; buildConfigurationList = AF4778F5099DDDC8001F091E /* Build configuration list for PBXNativeTarget "Cynosure" */; buildPhases = ( AF4778EB099DDDC8001F091E /* Resources */, AF4778ED099DDDC8001F091E /* Sources */, AF4778F0099DDDC8001F091E /* Frameworks */, AF4778F4099DDDC8001F091E /* Rez */, AFA3D86909C03BEC00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4778E9099DDDC8001F091E /* PBXTargetDependency */, ); name = Cynosure; productName = Cynosure; productReference = AF4778F8099DDDC8001F091E /* Cynosure.saver */; productType = "com.apple.product-type.bundle"; }; AF477909099DE379001F091E /* Flag */ = { isa = PBXNativeTarget; buildConfigurationList = AF477916099DE379001F091E /* Build configuration list for PBXNativeTarget "Flag" */; buildPhases = ( AF47790C099DE379001F091E /* Resources */, AF47790E099DE379001F091E /* Sources */, AF477911099DE379001F091E /* Frameworks */, AF477915099DE379001F091E /* Rez */, AFA3D91709C03D2400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47790A099DE379001F091E /* PBXTargetDependency */, ); name = Flag; productName = Flag; productReference = AF477919099DE379001F091E /* Flag.saver */; productType = "com.apple.product-type.bundle"; }; AF47792A099DE4C7001F091E /* Slip */ = { isa = PBXNativeTarget; buildConfigurationList = AF477937099DE4C7001F091E /* Build configuration list for PBXNativeTarget "Slip" */; buildPhases = ( AF47792D099DE4C7001F091E /* Resources */, AF47792F099DE4C7001F091E /* Sources */, AF477932099DE4C7001F091E /* Frameworks */, AF477936099DE4C7001F091E /* Rez */, AFA3D8D309C03CAE00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47792B099DE4C7001F091E /* PBXTargetDependency */, ); name = Slip; productName = Slip; productReference = AF47793A099DE4C7001F091E /* Slip.saver */; productType = "com.apple.product-type.bundle"; }; AF4808C0098C3B6C00FB32B8 /* jwxyz */ = { isa = PBXNativeTarget; buildConfigurationList = AF4808C2098C3B8B00FB32B8 /* Build configuration list for PBXNativeTarget "jwxyz" */; buildPhases = ( AF4E1D1819CE7013002B6190 /* Update GC build settings */, AF4808BD098C3B6C00FB32B8 /* Headers */, AF4808BE098C3B6C00FB32B8 /* Sources */, AF4808BF098C3B6C00FB32B8 /* Frameworks */, ); buildRules = ( ); dependencies = ( ); name = jwxyz; productName = jwxyz; productReference = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; productType = "com.apple.product-type.library.static"; }; AF480C49098E301400FB32B8 /* Helix */ = { isa = PBXNativeTarget; buildConfigurationList = AF480C55098E301400FB32B8 /* Build configuration list for PBXNativeTarget "Helix" */; buildPhases = ( AF480C4C098E301400FB32B8 /* Resources */, AF480C4E098E301400FB32B8 /* Sources */, AF480C50098E301400FB32B8 /* Frameworks */, AF480C54098E301400FB32B8 /* Rez */, AFA3D88909C03C2E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF480C4A098E301400FB32B8 /* PBXTargetDependency */, ); name = Helix; productName = Helix; productReference = AF480C58098E301400FB32B8 /* Helix.saver */; productType = "com.apple.product-type.bundle"; }; AF480D72098EEDDE00FB32B8 /* Drift */ = { isa = PBXNativeTarget; buildConfigurationList = AF480D7E098EEDDE00FB32B8 /* Build configuration list for PBXNativeTarget "Drift" */; buildPhases = ( AF480D75098EEDDE00FB32B8 /* Resources */, AF480D77098EEDDE00FB32B8 /* Sources */, AF480D79098EEDDE00FB32B8 /* Frameworks */, AF480D7D098EEDDE00FB32B8 /* Rez */, AFA3D90F09C03D1800E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF480D73098EEDDE00FB32B8 /* PBXTargetDependency */, ); name = Drift; productName = Drift; productReference = AF480D81098EEDDE00FB32B8 /* Drift.saver */; productType = "com.apple.product-type.bundle"; }; AF4810EB09909FBA00FB32B8 /* DangerBall */ = { isa = PBXNativeTarget; buildConfigurationList = AF4810F809909FBA00FB32B8 /* Build configuration list for PBXNativeTarget "DangerBall" */; buildPhases = ( AF4810EE09909FBA00FB32B8 /* Resources */, AF4810F009909FBA00FB32B8 /* Sources */, AF4810F309909FBA00FB32B8 /* Frameworks */, AF4810F709909FBA00FB32B8 /* Rez */, AFA3D97109C03DD000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4810EC09909FBA00FB32B8 /* PBXTargetDependency */, ); name = DangerBall; productName = DangerBall; productReference = AF4810FB09909FBA00FB32B8 /* DangerBall.saver */; productType = "com.apple.product-type.bundle"; }; AF4812500990CE2700FB32B8 /* Gears */ = { isa = PBXNativeTarget; buildConfigurationList = AF4812610990CE2700FB32B8 /* Build configuration list for PBXNativeTarget "Gears" */; buildPhases = ( AF4812530990CE2700FB32B8 /* Resources */, AF4812550990CE2700FB32B8 /* Sources */, AF4812590990CE2700FB32B8 /* Frameworks */, AF4812600990CE2700FB32B8 /* Rez */, AFA3D98309C03DEE00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4812510990CE2700FB32B8 /* PBXTargetDependency */, ); name = Gears; productName = Gears; productReference = AF4812640990CE2700FB32B8 /* Gears.saver */; productType = "com.apple.product-type.bundle"; }; AF4812B30990D3D900FB32B8 /* Pipes */ = { isa = PBXNativeTarget; buildConfigurationList = AF4812C30990D3D900FB32B8 /* Build configuration list for PBXNativeTarget "Pipes" */; buildPhases = ( AF4812B60990D3D900FB32B8 /* Resources */, AF4812B80990D3D900FB32B8 /* Sources */, AF4812BB0990D3D900FB32B8 /* Frameworks */, AF4812C20990D3D900FB32B8 /* Rez */, AFA3D9B509C03E5700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4812B40990D3D900FB32B8 /* PBXTargetDependency */, ); name = Pipes; productName = Pipes; productReference = AF4812C60990D3D900FB32B8 /* Pipes.saver */; productType = "com.apple.product-type.bundle"; }; AF48DEEF0A0C25E000F94CF9 /* GLSchool */ = { isa = PBXNativeTarget; buildConfigurationList = AF48DF000A0C25E000F94CF9 /* Build configuration list for PBXNativeTarget "GLSchool" */; buildPhases = ( AF48DEF20A0C25E000F94CF9 /* Resources */, AF48DEF40A0C25E000F94CF9 /* Sources */, AF48DEF70A0C25E000F94CF9 /* Frameworks */, AF48DEFE0A0C25E000F94CF9 /* Rez */, AF48DEFF0A0C25E000F94CF9 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF48DEF00A0C25E000F94CF9 /* PBXTargetDependency */, ); name = GLSchool; productName = GLSchool; productReference = AF48DF030A0C25E000F94CF9 /* GLSchool.saver */; productType = "com.apple.product-type.bundle"; }; AF4A3449102A593600A81B2A /* Surfaces */ = { isa = PBXNativeTarget; buildConfigurationList = AF4A345A102A593600A81B2A /* Build configuration list for PBXNativeTarget "Surfaces" */; buildPhases = ( AF4A344C102A593600A81B2A /* Resources */, AF4A344E102A593600A81B2A /* Sources */, AF4A3451102A593600A81B2A /* Frameworks */, AF4A3458102A593600A81B2A /* Rez */, AF4A3459102A593600A81B2A /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4A344A102A593600A81B2A /* PBXTargetDependency */, ); name = Surfaces; productName = Surfaces; productReference = AF4A345D102A593600A81B2A /* Surfaces.saver */; productType = "com.apple.product-type.bundle"; }; AF4FD6E60CE7A486005EE58E /* Lockward */ = { isa = PBXNativeTarget; buildConfigurationList = AF4FD6F70CE7A486005EE58E /* Build configuration list for PBXNativeTarget "Lockward" */; buildPhases = ( AF4FD6E90CE7A486005EE58E /* Resources */, AF4FD6EB0CE7A486005EE58E /* Sources */, AF4FD6EE0CE7A486005EE58E /* Frameworks */, AF4FD6F50CE7A486005EE58E /* Rez */, AF4FD6F60CE7A486005EE58E /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4FD6E70CE7A486005EE58E /* PBXTargetDependency */, ); name = Lockward; productName = Lockward; productReference = AF4FD6FA0CE7A486005EE58E /* Lockward.saver */; productType = "com.apple.product-type.bundle"; }; AF4FF4BA0D52CBDE00666F98 /* CubicGrid */ = { isa = PBXNativeTarget; buildConfigurationList = AF4FF4CB0D52CBDE00666F98 /* Build configuration list for PBXNativeTarget "CubicGrid" */; buildPhases = ( AF4FF4BD0D52CBDE00666F98 /* Resources */, AF4FF4BF0D52CBDE00666F98 /* Sources */, AF4FF4C20D52CBDE00666F98 /* Frameworks */, AF4FF4C90D52CBDE00666F98 /* Rez */, AF4FF4CA0D52CBDE00666F98 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4FF4BB0D52CBDE00666F98 /* PBXTargetDependency */, ); name = CubicGrid; productName = CubicGrid; productReference = AF4FF4CE0D52CBDE00666F98 /* CubicGrid.saver */; productType = "com.apple.product-type.bundle"; }; AF5C9AF91A0CCE6E00B0147A /* Cityflow */ = { isa = PBXNativeTarget; buildConfigurationList = AF5C9B0A1A0CCE6E00B0147A /* Build configuration list for PBXNativeTarget "Cityflow" */; buildPhases = ( AF5C9AFC1A0CCE6E00B0147A /* Resources */, AF5C9AFE1A0CCE6E00B0147A /* Sources */, AF5C9B011A0CCE6E00B0147A /* Frameworks */, AF5C9B081A0CCE6E00B0147A /* Rez */, AF5C9B091A0CCE6E00B0147A /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF5C9AFA1A0CCE6E00B0147A /* PBXTargetDependency */, ); name = Cityflow; productName = DangerBall; productReference = AF5C9B0D1A0CCE6E00B0147A /* Cityflow.saver */; productType = "com.apple.product-type.bundle"; }; AF63A7F11AB4EDDB00593C75 /* RomanBoy */ = { isa = PBXNativeTarget; buildConfigurationList = AF63A8031AB4EDDB00593C75 /* Build configuration list for PBXNativeTarget "RomanBoy" */; buildPhases = ( AF63A7F41AB4EDDB00593C75 /* Resources */, AF63A7F61AB4EDDB00593C75 /* Sources */, AF63A7F91AB4EDDB00593C75 /* Frameworks */, AF63A8011AB4EDDB00593C75 /* Rez */, AF63A8021AB4EDDB00593C75 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF63A7F21AB4EDDB00593C75 /* PBXTargetDependency */, ); name = RomanBoy; productName = Klein; productReference = AF63A8061AB4EDDB00593C75 /* RomanBoy.saver */; productType = "com.apple.product-type.bundle"; }; AF6423F2099FF9C2000F4CD4 /* Extrusion */ = { isa = PBXNativeTarget; buildConfigurationList = AF642402099FF9C2000F4CD4 /* Build configuration list for PBXNativeTarget "Extrusion" */; buildPhases = ( AF6423F5099FF9C2000F4CD4 /* Resources */, AF6423F7099FF9C2000F4CD4 /* Sources */, AF6423FA099FF9C2000F4CD4 /* Frameworks */, AF642401099FF9C2000F4CD4 /* Rez */, AFA3D97909C03DDD00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF6423F3099FF9C2000F4CD4 /* PBXTargetDependency */, ); name = Extrusion; productName = Extrusion; productReference = AF642405099FF9C2000F4CD4 /* Extrusion.saver */; productType = "com.apple.product-type.bundle"; }; AF6425CC09A18855000F4CD4 /* HyperCube */ = { isa = PBXNativeTarget; buildConfigurationList = AF6425D909A18855000F4CD4 /* Build configuration list for PBXNativeTarget "HyperCube" */; buildPhases = ( AF6425CF09A18855000F4CD4 /* Resources */, AF6425D109A18855000F4CD4 /* Sources */, AF6425D409A18855000F4CD4 /* Frameworks */, AF6425D809A18855000F4CD4 /* Rez */, AFA3D88D09C03C3600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF6425CD09A18855000F4CD4 /* PBXTargetDependency */, ); name = HyperCube; productName = HyperCube; productReference = AF6425DC09A18856000F4CD4 /* HyperCube.saver */; productType = "com.apple.product-type.bundle"; }; AF6425EC09A189EC000F4CD4 /* Qix */ = { isa = PBXNativeTarget; buildConfigurationList = AF6425F909A189EC000F4CD4 /* Build configuration list for PBXNativeTarget "Qix" */; buildPhases = ( AF6425EF09A189EC000F4CD4 /* Resources */, AF6425F109A189EC000F4CD4 /* Sources */, AF6425F409A189EC000F4CD4 /* Frameworks */, AF6425F809A189EC000F4CD4 /* Rez */, AFA3D8C309C03C9300E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF6425ED09A189EC000F4CD4 /* PBXTargetDependency */, ); name = Qix; productName = Qix; productReference = AF6425FC09A189EC000F4CD4 /* Qix.saver */; productType = "com.apple.product-type.bundle"; }; AF64260F09A18D6C000F4CD4 /* HyperBall */ = { isa = PBXNativeTarget; buildConfigurationList = AF64261C09A18D6C000F4CD4 /* Build configuration list for PBXNativeTarget "HyperBall" */; buildPhases = ( AF64261209A18D6C000F4CD4 /* Resources */, AF64261409A18D6C000F4CD4 /* Sources */, AF64261709A18D6C000F4CD4 /* Frameworks */, AF64261B09A18D6C000F4CD4 /* Rez */, AFA3D88B09C03C3200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF64261009A18D6C000F4CD4 /* PBXTargetDependency */, ); name = HyperBall; productName = HyperBall; productReference = AF64261F09A18D6C000F4CD4 /* HyperBall.saver */; productType = "com.apple.product-type.bundle"; }; AF64262C09A18F54000F4CD4 /* Moire2 */ = { isa = PBXNativeTarget; buildConfigurationList = AF64263909A18F54000F4CD4 /* Build configuration list for PBXNativeTarget "Moire2" */; buildPhases = ( AF64262F09A18F54000F4CD4 /* Resources */, AF64263109A18F54000F4CD4 /* Sources */, AF64263409A18F54000F4CD4 /* Frameworks */, AF64263809A18F54000F4CD4 /* Rez */, AFA3D8AB09C03C6D00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF64262D09A18F54000F4CD4 /* PBXTargetDependency */, ); name = Moire2; productName = Moire2; productReference = AF64263C09A18F54000F4CD4 /* Moire2.saver */; productType = "com.apple.product-type.bundle"; }; AF64264F09A19229000F4CD4 /* Munch */ = { isa = PBXNativeTarget; buildConfigurationList = AF64265C09A19229000F4CD4 /* Build configuration list for PBXNativeTarget "Munch" */; buildPhases = ( AF64265209A19229000F4CD4 /* Resources */, AF64265409A19229000F4CD4 /* Sources */, AF64265709A19229000F4CD4 /* Frameworks */, AF64265B09A19229000F4CD4 /* Rez */, AFA3D8AD09C03C7000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF64265009A19229000F4CD4 /* PBXTargetDependency */, ); name = Munch; productName = Munch; productReference = AF64265F09A19229000F4CD4 /* Munch.saver */; productType = "com.apple.product-type.bundle"; }; AF64267B09A194B0000F4CD4 /* Goop */ = { isa = PBXNativeTarget; buildConfigurationList = AF64268809A194B0000F4CD4 /* Build configuration list for PBXNativeTarget "Goop" */; buildPhases = ( AF64267E09A194B0000F4CD4 /* Resources */, AF64268009A194B0000F4CD4 /* Sources */, AF64268309A194B0000F4CD4 /* Frameworks */, AF64268709A194B0000F4CD4 /* Rez */, AFA3D88109C03C2100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF64267C09A194B0000F4CD4 /* PBXTargetDependency */, ); name = Goop; productName = Goop; productReference = AF64268B09A194B0000F4CD4 /* Goop.saver */; productType = "com.apple.product-type.bundle"; }; AF64277109A1D37A000F4CD4 /* SpeedMine */ = { isa = PBXNativeTarget; buildConfigurationList = AF64277E09A1D37A000F4CD4 /* Build configuration list for PBXNativeTarget "SpeedMine" */; buildPhases = ( AF64277409A1D37A000F4CD4 /* Resources */, AF64277609A1D37A000F4CD4 /* Sources */, AF64277909A1D37A000F4CD4 /* Frameworks */, AF64277D09A1D37A000F4CD4 /* Rez */, AFA3D8D709C03CB400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF64277209A1D37A000F4CD4 /* PBXTargetDependency */, ); name = SpeedMine; productName = SpeedMine; productReference = AF64278109A1D37A000F4CD4 /* SpeedMine.saver */; productType = "com.apple.product-type.bundle"; }; AF6427A809A2DE36000F4CD4 /* Bubbles */ = { isa = PBXNativeTarget; buildConfigurationList = AF6427B509A2DE36000F4CD4 /* Build configuration list for PBXNativeTarget "Bubbles" */; buildPhases = ( AF6427AB09A2DE36000F4CD4 /* Resources */, AF6427AD09A2DE36000F4CD4 /* Sources */, AF6427B009A2DE36000F4CD4 /* Frameworks */, AF6427B409A2DE36000F4CD4 /* Rez */, AFA3D69409C03B6200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF6427A909A2DE36000F4CD4 /* PBXTargetDependency */, ); name = Bubbles; productName = Bubbles; productReference = AF6427B809A2DE36000F4CD4 /* Bubbles.saver */; productType = "com.apple.product-type.bundle"; }; AF68A47E19196CF800D41CD1 /* Tessellimage */ = { isa = PBXNativeTarget; buildConfigurationList = AF68A48F19196CF800D41CD1 /* Build configuration list for PBXNativeTarget "Tessellimage" */; buildPhases = ( AF68A48119196CF800D41CD1 /* Resources */, AF68A48319196CF800D41CD1 /* Sources */, AF68A48619196CF800D41CD1 /* Frameworks */, AF68A48D19196CF800D41CD1 /* Rez */, AF68A48E19196CF800D41CD1 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF68A47F19196CF800D41CD1 /* PBXTargetDependency */, ); name = Tessellimage; productName = Attraction; productReference = AF68A49219196CF800D41CD1 /* Tessellimage.saver */; productType = "com.apple.product-type.bundle"; }; AF73FF221A09877F00E485E9 /* BinaryRing */ = { isa = PBXNativeTarget; buildConfigurationList = AF73FF331A09877F00E485E9 /* Build configuration list for PBXNativeTarget "BinaryRing" */; buildPhases = ( AF73FF251A09877F00E485E9 /* Resources */, AF73FF271A09877F00E485E9 /* Sources */, AF73FF2A1A09877F00E485E9 /* Frameworks */, AF73FF311A09877F00E485E9 /* Rez */, AF73FF321A09877F00E485E9 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF73FF231A09877F00E485E9 /* PBXTargetDependency */, ); name = BinaryRing; productName = Attraction; productReference = AF73FF361A09877F00E485E9 /* BinaryRing.saver */; productType = "com.apple.product-type.bundle"; }; AF7510FF1782B5B900380EA1 /* Kaleidocycle */ = { isa = PBXNativeTarget; buildConfigurationList = AF75110F1782B5B900380EA1 /* Build configuration list for PBXNativeTarget "Kaleidocycle" */; buildPhases = ( AF7511021782B5B900380EA1 /* Resources */, AF7511041782B5B900380EA1 /* Sources */, AF7511071782B5B900380EA1 /* Frameworks */, AF75110D1782B5B900380EA1 /* Rez */, AF75110E1782B5B900380EA1 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF7511001782B5B900380EA1 /* PBXTargetDependency */, ); name = Kaleidocycle; productName = Voronoi; productReference = AF7511121782B5B900380EA1 /* Kaleidocycle.saver */; productType = "com.apple.product-type.bundle"; }; AF7776E409B63ABF00EA3033 /* Phosphor */ = { isa = PBXNativeTarget; buildConfigurationList = AF7776F309B63ABF00EA3033 /* Build configuration list for PBXNativeTarget "Phosphor" */; buildPhases = ( AF7776E709B63ABF00EA3033 /* Resources */, AF7776E909B63ABF00EA3033 /* Sources */, AF7776EE09B63ABF00EA3033 /* Frameworks */, AF7776F209B63ABF00EA3033 /* Rez */, AFA3D8B909C03C8200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF7776E509B63ABF00EA3033 /* PBXTargetDependency */, ); name = Phosphor; productName = Phosphor; productReference = AF7776F609B63ABF00EA3033 /* Phosphor.saver */; productType = "com.apple.product-type.bundle"; }; AF77771A09B6416100EA3033 /* Pacman */ = { isa = PBXNativeTarget; buildConfigurationList = AF77772709B6416100EA3033 /* Build configuration list for PBXNativeTarget "Pacman" */; buildPhases = ( AF77771D09B6416100EA3033 /* Resources */, AF77771F09B6416100EA3033 /* Sources */, AF77772209B6416100EA3033 /* Frameworks */, AF77772609B6416100EA3033 /* Rez */, AFA3D93509C03D5700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF77771B09B6416100EA3033 /* PBXTargetDependency */, ); name = Pacman; productName = Pacman; productReference = AF77772A09B6416100EA3033 /* Pacman.saver */; productType = "com.apple.product-type.bundle"; }; AF77773E09B6446500EA3033 /* FlipScreen3D */ = { isa = PBXNativeTarget; buildConfigurationList = AF77774E09B6446500EA3033 /* Build configuration list for PBXNativeTarget "FlipScreen3D" */; buildPhases = ( AF77774109B6446500EA3033 /* Resources */, AF77774309B6446500EA3033 /* Sources */, AF77774609B6446500EA3033 /* Frameworks */, AF77774D09B6446500EA3033 /* Rez */, AFA3D97D09C03DE400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF77773F09B6446500EA3033 /* PBXTargetDependency */, ); name = FlipScreen3D; productName = FlipScreen3D; productReference = AF77775109B6446500EA3033 /* FlipScreen3D.saver */; productType = "com.apple.product-type.bundle"; }; AF77777409B6497800EA3033 /* Gleidescope */ = { isa = PBXNativeTarget; buildConfigurationList = AF77778509B6497800EA3033 /* Build configuration list for PBXNativeTarget "Gleidescope" */; buildPhases = ( AF77777709B6497800EA3033 /* Resources */, AF77777909B6497800EA3033 /* Sources */, AF77777D09B6497800EA3033 /* Frameworks */, AF77778409B6497800EA3033 /* Rez */, AFA3D98509C03DF100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF77777509B6497800EA3033 /* PBXTargetDependency */, ); name = Gleidescope; productName = Gleidescope; productReference = AF34085609B80AB000F2CEC1 /* Gleidescope.saver */; productType = "com.apple.product-type.bundle"; }; AF77778E09B64A5200EA3033 /* MirrorBlob */ = { isa = PBXNativeTarget; buildConfigurationList = AF77779F09B64A5200EA3033 /* Build configuration list for PBXNativeTarget "MirrorBlob" */; buildPhases = ( AF77779109B64A5200EA3033 /* Resources */, AF77779309B64A5200EA3033 /* Sources */, AF77779709B64A5200EA3033 /* Frameworks */, AF77779E09B64A5200EA3033 /* Rez */, AFA3D9A909C03E3D00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF77778F09B64A5200EA3033 /* PBXTargetDependency */, ); name = MirrorBlob; productName = MirrorBlob; productReference = AF7777A209B64A5200EA3033 /* MirrorBlob.saver */; productType = "com.apple.product-type.bundle"; }; AF7777A809B64B2600EA3033 /* StonerView */ = { isa = PBXNativeTarget; buildConfigurationList = AF7777B909B64B2600EA3033 /* Build configuration list for PBXNativeTarget "StonerView" */; buildPhases = ( AF7777AB09B64B2600EA3033 /* Resources */, AF7777AD09B64B2600EA3033 /* Sources */, AF7777B109B64B2600EA3033 /* Frameworks */, AF7777B809B64B2600EA3033 /* Rez */, AFA3D9CF09C03E8700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF7777A909B64B2600EA3033 /* PBXTargetDependency */, ); name = StonerView; productName = StonerView; productReference = AF34085509B80AB000F2CEC1 /* StonerView.saver */; productType = "com.apple.product-type.bundle"; }; AF7777D009B64C6B00EA3033 /* GLSlideshow */ = { isa = PBXNativeTarget; buildConfigurationList = AF7777E109B64C6B00EA3033 /* Build configuration list for PBXNativeTarget "GLSlideshow" */; buildPhases = ( AF7777D309B64C6B00EA3033 /* Resources */, AF7777D509B64C6B00EA3033 /* Sources */, AF7777D909B64C6B00EA3033 /* Frameworks */, AF7777E009B64C6B00EA3033 /* Rez */, AFA3D99509C03E1900E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF7777D109B64C6B00EA3033 /* PBXTargetDependency */, ); name = GLSlideshow; productName = GLSlideshow; productReference = AF7777E409B64C6B00EA3033 /* GLSlideshow.saver */; productType = "com.apple.product-type.bundle"; }; AF7777EA09B64E3100EA3033 /* FlipText */ = { isa = PBXNativeTarget; buildConfigurationList = AF7777FB09B64E3100EA3033 /* Build configuration list for PBXNativeTarget "FlipText" */; buildPhases = ( AF7777ED09B64E3100EA3033 /* Resources */, AF7777EF09B64E3100EA3033 /* Sources */, AF7777F309B64E3100EA3033 /* Frameworks */, AF7777FA09B64E3100EA3033 /* Rez */, AFA3D97F09C03DE700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF7777EB09B64E3100EA3033 /* PBXTargetDependency */, ); name = FlipText; productName = FlipText; productReference = AF7777FE09B64E3100EA3033 /* FlipText.saver */; productType = "com.apple.product-type.bundle"; }; AF77781009B6504400EA3033 /* StarWars */ = { isa = PBXNativeTarget; buildConfigurationList = AF77782209B6504400EA3033 /* Build configuration list for PBXNativeTarget "StarWars" */; buildPhases = ( AF77781309B6504400EA3033 /* Resources */, AF77781509B6504400EA3033 /* Sources */, AF77781A09B6504400EA3033 /* Frameworks */, AF77782109B6504400EA3033 /* Rez */, AFA3D9CD09C03E8400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF77781109B6504400EA3033 /* PBXTargetDependency */, ); name = StarWars; productName = StarWars; productReference = AF34085409B80AAF00F2CEC1 /* StarWars.saver */; productType = "com.apple.product-type.bundle"; }; AF77784409B6528100EA3033 /* Carousel */ = { isa = PBXNativeTarget; buildConfigurationList = AF77785509B6528100EA3033 /* Build configuration list for PBXNativeTarget "Carousel" */; buildPhases = ( AF77784709B6528100EA3033 /* Resources */, AF77784A09B6528100EA3033 /* Sources */, AF77784D09B6528100EA3033 /* Frameworks */, AF77785409B6528100EA3033 /* Rez */, AFA3D96509C03DB900E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF77784509B6528100EA3033 /* PBXTargetDependency */, ); name = Carousel; productName = Carousel; productReference = AF77785809B6528100EA3033 /* Carousel.saver */; productType = "com.apple.product-type.bundle"; }; AF77786109B6536000EA3033 /* DNAlogo */ = { isa = PBXNativeTarget; buildConfigurationList = AF77787109B6536000EA3033 /* Build configuration list for PBXNativeTarget "DNAlogo" */; buildPhases = ( AF77786409B6536000EA3033 /* Resources */, AF77786609B6536000EA3033 /* Sources */, AF77786909B6536000EA3033 /* Frameworks */, AF77787009B6536000EA3033 /* Rez */, AFA3D97309C03DD300E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF77786209B6536000EA3033 /* PBXTargetDependency */, ); name = DNAlogo; productName = DNAlogo; productReference = AF77787409B6536000EA3033 /* DNAlogo.saver */; productType = "com.apple.product-type.bundle"; }; AF77787F09B6563500EA3033 /* FontGlide */ = { isa = PBXNativeTarget; buildConfigurationList = AF77788C09B6563500EA3033 /* Build configuration list for PBXNativeTarget "FontGlide" */; buildPhases = ( AF77788209B6563500EA3033 /* Resources */, AF77788409B6563500EA3033 /* Sources */, AF77788709B6563500EA3033 /* Frameworks */, AF77788B09B6563500EA3033 /* Rez */, AFA3D87D09C03C1B00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF77788009B6563500EA3033 /* PBXTargetDependency */, ); name = FontGlide; productName = FontGlide; productReference = AF34085709B80AB000F2CEC1 /* FontGlide.saver */; productType = "com.apple.product-type.bundle"; }; AF7778A509B659C800EA3033 /* BlitSpin */ = { isa = PBXNativeTarget; buildConfigurationList = AF7778B209B659C800EA3033 /* Build configuration list for PBXNativeTarget "BlitSpin" */; buildPhases = ( AF7778A809B659C800EA3033 /* Resources */, AF7778AA09B659C800EA3033 /* Sources */, AF7778AD09B659C800EA3033 /* Frameworks */, AF7778B109B659C800EA3033 /* Rez */, AFCCCBD309C03B0000353F4D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF7778A609B659C800EA3033 /* PBXTargetDependency */, ); name = BlitSpin; productName = BlitSpin; productReference = AF7778B509B659C800EA3033 /* BlitSpin.saver */; productType = "com.apple.product-type.bundle"; }; AF78D175142DD8F3002AAF77 /* Hilbert */ = { isa = PBXNativeTarget; buildConfigurationList = AF78D186142DD8F3002AAF77 /* Build configuration list for PBXNativeTarget "Hilbert" */; buildPhases = ( AF78D178142DD8F3002AAF77 /* Resources */, AF78D17A142DD8F3002AAF77 /* Sources */, AF78D17D142DD8F3002AAF77 /* Frameworks */, AF78D184142DD8F3002AAF77 /* Rez */, AF78D185142DD8F3002AAF77 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF78D176142DD8F3002AAF77 /* PBXTargetDependency */, ); name = Hilbert; productName = Hilbert; productReference = AF78D189142DD8F3002AAF77 /* Hilbert.saver */; productType = "com.apple.product-type.bundle"; }; AF794F64099748450059A8B0 /* Demon */ = { isa = PBXNativeTarget; buildConfigurationList = AF794F71099748450059A8B0 /* Build configuration list for PBXNativeTarget "Demon" */; buildPhases = ( AF794F67099748450059A8B0 /* Resources */, AF794F69099748450059A8B0 /* Sources */, AF794F6C099748450059A8B0 /* Frameworks */, AF794F70099748450059A8B0 /* Rez */, AFA3D90B09C03D1100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF794F65099748450059A8B0 /* PBXTargetDependency */, ); name = Demon; productName = Demon; productReference = AF794F74099748450059A8B0 /* Demon.saver */; productType = "com.apple.product-type.bundle"; }; AF794F8E09974A320059A8B0 /* Fiberlamp */ = { isa = PBXNativeTarget; buildConfigurationList = AF794F9B09974A320059A8B0 /* Build configuration list for PBXNativeTarget "Fiberlamp" */; buildPhases = ( AF794F9109974A320059A8B0 /* Resources */, AF794F9309974A320059A8B0 /* Sources */, AF794F9609974A320059A8B0 /* Frameworks */, AF794F9A09974A320059A8B0 /* Rez */, AFA3D91509C03D2100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF794F8F09974A320059A8B0 /* PBXTargetDependency */, ); name = Fiberlamp; productName = Fiberlamp; productReference = AF794F9E09974A320059A8B0 /* Fiberlamp.saver */; productType = "com.apple.product-type.bundle"; }; AF794FCD09974FA60059A8B0 /* Loop */ = { isa = PBXNativeTarget; buildConfigurationList = AF794FDA09974FA60059A8B0 /* Build configuration list for PBXNativeTarget "Loop" */; buildPhases = ( AF794FD009974FA60059A8B0 /* Resources */, AF794FD209974FA60059A8B0 /* Sources */, AF794FD509974FA60059A8B0 /* Frameworks */, AF794FD909974FA60059A8B0 /* Rez */, AFA3D93109C03D5100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF794FCE09974FA60059A8B0 /* PBXTargetDependency */, ); name = Loop; productName = Loop; productReference = AF794FDD09974FA60059A8B0 /* Loop.saver */; productType = "com.apple.product-type.bundle"; }; AF7ACFC019FF0A9200BD752B /* GeodesicGears */ = { isa = PBXNativeTarget; buildConfigurationList = AF7ACFD119FF0A9200BD752B /* Build configuration list for PBXNativeTarget "GeodesicGears" */; buildPhases = ( AF7ACFC319FF0A9200BD752B /* Resources */, AF7ACFC519FF0A9200BD752B /* Sources */, AF7ACFC819FF0A9200BD752B /* Frameworks */, AF7ACFCF19FF0A9200BD752B /* Rez */, AF7ACFD019FF0A9200BD752B /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF7ACFC119FF0A9200BD752B /* PBXTargetDependency */, ); name = GeodesicGears; productName = DangerBall; productReference = AF7ACFD419FF0A9200BD752B /* GeodesicGears.saver */; productType = "com.apple.product-type.bundle"; }; AF918977158FC00A002B5D1E /* XScreenSaver-iOS */ = { isa = PBXNativeTarget; buildConfigurationList = AF91898C158FC00A002B5D1E /* Build configuration list for PBXNativeTarget "XScreenSaver-iOS" */; buildPhases = ( AF7E080115925EE300D81407 /* ICMP Sanity Check */, AF94E7421A16F66900289B93 /* Update Function Table */, AF91897B158FC00A002B5D1E /* Resources */, AF918985158FC00A002B5D1E /* Sources */, AF918989158FC00A002B5D1E /* Frameworks */, AF91898A158FC00A002B5D1E /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF918978158FC00A002B5D1E /* PBXTargetDependency */, AF7E07FE15925DF200D81407 /* PBXTargetDependency */, AF7E080015925DFE00D81407 /* PBXTargetDependency */, ); name = "XScreenSaver-iOS"; productName = SaverTester; productReference = AF91898F158FC00A002B5D1E /* XScreenSaver.app */; productType = "com.apple.product-type.application"; }; AF97572D099C317000B05160 /* IMSMap */ = { isa = PBXNativeTarget; buildConfigurationList = AF97573A099C317000B05160 /* Build configuration list for PBXNativeTarget "IMSMap" */; buildPhases = ( AF975730099C317000B05160 /* Resources */, AF975732099C317000B05160 /* Sources */, AF975735099C317000B05160 /* Frameworks */, AF975739099C317000B05160 /* Rez */, AFA3D89109C03C3C00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF97572E099C317000B05160 /* PBXTargetDependency */, ); name = IMSMap; productName = IMSMap; productReference = AF97573D099C317000B05160 /* IMSMap.saver */; productType = "com.apple.product-type.bundle"; }; AF975775099C374A00B05160 /* Moire */ = { isa = PBXNativeTarget; buildConfigurationList = AF975782099C374A00B05160 /* Build configuration list for PBXNativeTarget "Moire" */; buildPhases = ( AF975778099C374A00B05160 /* Resources */, AF97577A099C374A00B05160 /* Sources */, AF97577D099C374A00B05160 /* Frameworks */, AF975781099C374A00B05160 /* Rez */, AFA3D8A909C03C6900E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975776099C374A00B05160 /* PBXTargetDependency */, ); name = Moire; productName = Moire; productReference = AF975785099C374A00B05160 /* Moire.saver */; productType = "com.apple.product-type.bundle"; }; AF9757C2099C3E6300B05160 /* RDbomb */ = { isa = PBXNativeTarget; buildConfigurationList = AF9757CF099C3E6300B05160 /* Build configuration list for PBXNativeTarget "RDbomb" */; buildPhases = ( AF9757C5099C3E6300B05160 /* Resources */, AF9757C7099C3E6300B05160 /* Sources */, AF9757CA099C3E6300B05160 /* Frameworks */, AF9757CE099C3E6300B05160 /* Rez */, AFA3D8C509C03C9600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9757C3099C3E6300B05160 /* PBXTargetDependency */, ); name = RDbomb; productName = RDbomb; productReference = AF9757D2099C3E6300B05160 /* RDbomb.saver */; productType = "com.apple.product-type.bundle"; }; AF975808099C41D500B05160 /* XFlame */ = { isa = PBXNativeTarget; buildConfigurationList = AF975815099C41D500B05160 /* Build configuration list for PBXNativeTarget "XFlame" */; buildPhases = ( AF97580B099C41D500B05160 /* Resources */, AF97580D099C41D500B05160 /* Sources */, AF975810099C41D500B05160 /* Frameworks */, AF975814099C41D500B05160 /* Rez */, AFA3D8F109C03CE100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975809099C41D500B05160 /* PBXTargetDependency */, ); name = XFlame; productName = XFlame; productReference = AF975818099C41D500B05160 /* XFlame.saver */; productType = "com.apple.product-type.bundle"; }; AF975865099C475900B05160 /* ShadeBobs */ = { isa = PBXNativeTarget; buildConfigurationList = AF975872099C475900B05160 /* Build configuration list for PBXNativeTarget "ShadeBobs" */; buildPhases = ( AF975868099C475900B05160 /* Resources */, AF97586A099C475900B05160 /* Sources */, AF97586D099C475900B05160 /* Frameworks */, AF975871099C475900B05160 /* Rez */, AFA3D8CF09C03CA800E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975866099C475900B05160 /* PBXTargetDependency */, ); name = ShadeBobs; productName = ShadeBobs; productReference = AF975875099C475900B05160 /* ShadeBobs.saver */; productType = "com.apple.product-type.bundle"; }; AF975A36099C681F00B05160 /* MetaBalls */ = { isa = PBXNativeTarget; buildConfigurationList = AF975A43099C681F00B05160 /* Build configuration list for PBXNativeTarget "MetaBalls" */; buildPhases = ( AF975A39099C681F00B05160 /* Resources */, AF975A3B099C681F00B05160 /* Sources */, AF975A3E099C681F00B05160 /* Frameworks */, AF975A42099C681F00B05160 /* Rez */, AFA3D8A509C03C6200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975A37099C681F00B05160 /* PBXTargetDependency */, ); name = MetaBalls; productName = MetaBalls; productReference = AF975A46099C681F00B05160 /* MetaBalls.saver */; productType = "com.apple.product-type.bundle"; }; AF975A6C099C6AB200B05160 /* Eruption */ = { isa = PBXNativeTarget; buildConfigurationList = AF975A79099C6AB200B05160 /* Build configuration list for PBXNativeTarget "Eruption" */; buildPhases = ( AF975A6F099C6AB200B05160 /* Resources */, AF975A71099C6AB200B05160 /* Sources */, AF975A74099C6AB200B05160 /* Frameworks */, AF975A78099C6AB200B05160 /* Rez */, AFA3D87509C03C0400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975A6D099C6AB200B05160 /* PBXTargetDependency */, ); name = Eruption; productName = Eruption; productReference = AF975A7C099C6AB200B05160 /* Eruption.saver */; productType = "com.apple.product-type.bundle"; }; AF975A86099C6BC300B05160 /* Barcode */ = { isa = PBXNativeTarget; buildConfigurationList = AF975A93099C6BC300B05160 /* Build configuration list for PBXNativeTarget "Barcode" */; buildPhases = ( AF975A89099C6BC300B05160 /* Resources */, AF975A8B099C6BC300B05160 /* Sources */, AF975A8E099C6BC300B05160 /* Frameworks */, AF975A92099C6BC300B05160 /* Rez */, AFCCCBCF09C03AF800353F4D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975A87099C6BC300B05160 /* PBXTargetDependency */, ); name = Barcode; productName = Barcode; productReference = AF975A96099C6BC300B05160 /* Barcode.saver */; productType = "com.apple.product-type.bundle"; }; AF975AD7099C6EB100B05160 /* Fireworkx */ = { isa = PBXNativeTarget; buildConfigurationList = AF975AE4099C6EB100B05160 /* Build configuration list for PBXNativeTarget "Fireworkx" */; buildPhases = ( AF975ADA099C6EB100B05160 /* Resources */, AF975ADC099C6EB100B05160 /* Sources */, AF975ADF099C6EB100B05160 /* Frameworks */, AF975AE3099C6EB100B05160 /* Rez */, AFA3D87709C03C0A00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975AD8099C6EB100B05160 /* PBXTargetDependency */, ); name = Fireworkx; productName = Fireworkx; productReference = AF975AE7099C6EB100B05160 /* Fireworkx.saver */; productType = "com.apple.product-type.bundle"; }; AF975AFC099C6FE400B05160 /* MemScroller */ = { isa = PBXNativeTarget; buildConfigurationList = AF975B09099C6FE400B05160 /* Build configuration list for PBXNativeTarget "MemScroller" */; buildPhases = ( AF975AFF099C6FE400B05160 /* Resources */, AF975B01099C6FE400B05160 /* Sources */, AF975B04099C6FE400B05160 /* Frameworks */, AF975B08099C6FE400B05160 /* Rez */, AFA3D8A309C03C5F00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975AFD099C6FE400B05160 /* PBXTargetDependency */, ); name = MemScroller; productName = MemScroller; productReference = AF975B0C099C6FE400B05160 /* MemScroller.saver */; productType = "com.apple.product-type.bundle"; }; AF975C12099C8C1500B05160 /* Halo */ = { isa = PBXNativeTarget; buildConfigurationList = AF975C1F099C8C1500B05160 /* Build configuration list for PBXNativeTarget "Halo" */; buildPhases = ( AF975C15099C8C1500B05160 /* Resources */, AF975C17099C8C1500B05160 /* Sources */, AF975C1A099C8C1500B05160 /* Frameworks */, AF975C1E099C8C1500B05160 /* Rez */, AFA3D88709C03C2A00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975C13099C8C1500B05160 /* PBXTargetDependency */, ); name = Halo; productName = Halo; productReference = AF975C22099C8C1500B05160 /* Halo.saver */; productType = "com.apple.product-type.bundle"; }; AF975C3D099C8DCF00B05160 /* Greynetic */ = { isa = PBXNativeTarget; buildConfigurationList = AF975C4B099C8DCF00B05160 /* Build configuration list for PBXNativeTarget "Greynetic" */; buildPhases = ( AF975C40099C8DCF00B05160 /* Resources */, AF975C43099C8DCF00B05160 /* Sources */, AF975C46099C8DCF00B05160 /* Frameworks */, AF975C4A099C8DCF00B05160 /* Rez */, AFA3D88309C03C2400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975C3E099C8DCF00B05160 /* PBXTargetDependency */, ); name = Greynetic; productName = Greynetic; productReference = AF975C4E099C8DCF00B05160 /* Greynetic.saver */; productType = "com.apple.product-type.bundle"; }; AF975C5D099C8F3F00B05160 /* NoseGuy */ = { isa = PBXNativeTarget; buildConfigurationList = AF975C6B099C8F3F00B05160 /* Build configuration list for PBXNativeTarget "NoseGuy" */; buildPhases = ( AF975C60099C8F3F00B05160 /* Resources */, AF975C63099C8F3F00B05160 /* Sources */, AF975C66099C8F3F00B05160 /* Frameworks */, AF975C6A099C8F3F00B05160 /* Rez */, AFA3D8B109C03C7600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975C5E099C8F3F00B05160 /* PBXTargetDependency */, ); name = NoseGuy; productName = NoseGuy; productReference = AF975C6E099C8F3F00B05160 /* NoseGuy.saver */; productType = "com.apple.product-type.bundle"; }; AF975D52099CA0F000B05160 /* Rocks */ = { isa = PBXNativeTarget; buildConfigurationList = AF975D60099CA0F000B05160 /* Build configuration list for PBXNativeTarget "Rocks" */; buildPhases = ( AF975D55099CA0F000B05160 /* Resources */, AF975D58099CA0F000B05160 /* Sources */, AF975D5B099CA0F000B05160 /* Frameworks */, AF975D5F099CA0F000B05160 /* Rez */, AFA3D8C909C03C9E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975D53099CA0F000B05160 /* PBXTargetDependency */, ); name = Rocks; productName = Rocks; productReference = AF975D63099CA0F000B05160 /* Rocks.saver */; productType = "com.apple.product-type.bundle"; }; AF976FBB0989CAA2001F8B92 /* Deco */ = { isa = PBXNativeTarget; buildConfigurationList = AF976FBE0989CAA4001F8B92 /* Build configuration list for PBXNativeTarget "Deco" */; buildPhases = ( AF976FB80989CAA2001F8B92 /* Resources */, AF976FB90989CAA2001F8B92 /* Sources */, AF976FBA0989CAA2001F8B92 /* Frameworks */, AF9770150989D0F6001F8B92 /* Rez */, AFA3D86D09C03BF300E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF480922098C412F00FB32B8 /* PBXTargetDependency */, ); name = Deco; productName = Deco; productReference = AF976FBC0989CAA2001F8B92 /* Deco.saver */; productType = "com.apple.product-type.bundle"; }; AF9770290989D1E6001F8B92 /* Rorschach */ = { isa = PBXNativeTarget; buildConfigurationList = AF97703D0989D1E6001F8B92 /* Build configuration list for PBXNativeTarget "Rorschach" */; buildPhases = ( AF97702A0989D1E6001F8B92 /* Resources */, AF97702C0989D1E6001F8B92 /* Sources */, AF9770390989D1E6001F8B92 /* Frameworks */, AF97703C0989D1E6001F8B92 /* Rez */, AFA3D8CB09C03CA100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF48092A098C419000FB32B8 /* PBXTargetDependency */, ); name = Rorschach; productName = Rorschach; productReference = AF9770400989D1E6001F8B92 /* Rorschach.saver */; productType = "com.apple.product-type.bundle"; }; AF9770660989D2F6001F8B92 /* Attraction */ = { isa = PBXNativeTarget; buildConfigurationList = AF97707A0989D2F6001F8B92 /* Build configuration list for PBXNativeTarget "Attraction" */; buildPhases = ( AF9770670989D2F6001F8B92 /* Resources */, AF9770690989D2F6001F8B92 /* Sources */, AF9770760989D2F6001F8B92 /* Frameworks */, AF9770790989D2F6001F8B92 /* Rez */, AFCCCBCD09C03AF400353F4D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF48092D098C41AE00FB32B8 /* PBXTargetDependency */, ); name = Attraction; productName = Attraction; productReference = AF97707D0989D2F6001F8B92 /* Attraction.saver */; productType = "com.apple.product-type.bundle"; }; AF9771D60989DC4A001F8B92 /* SaverTester */ = { isa = PBXNativeTarget; buildConfigurationList = AF9771DA0989DC4B001F8B92 /* Build configuration list for PBXNativeTarget "SaverTester" */; buildPhases = ( AF9771D30989DC4A001F8B92 /* Resources */, AF9771D40989DC4A001F8B92 /* Sources */, AF9771D50989DC4A001F8B92 /* Frameworks */, AF578FA11434E918002455DD /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF480936098C421200FB32B8 /* PBXTargetDependency */, ); name = SaverTester; productName = SaverTester; productReference = AF9771D70989DC4A001F8B92 /* SaverTester.app */; productType = "com.apple.product-type.application"; }; AF998EDA0A083DB30051049D /* TopBlock */ = { isa = PBXNativeTarget; buildConfigurationList = AF998EEB0A083DB30051049D /* Build configuration list for PBXNativeTarget "TopBlock" */; buildPhases = ( AF998EDD0A083DB30051049D /* Resources */, AF998EDF0A083DB30051049D /* Sources */, AF998EE20A083DB30051049D /* Frameworks */, AF998EE90A083DB30051049D /* Rez */, AF998EEA0A083DB30051049D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF998EDB0A083DB30051049D /* PBXTargetDependency */, ); name = TopBlock; productName = TopBlock; productReference = AF998EEE0A083DB30051049D /* TopBlock.saver */; productType = "com.apple.product-type.bundle"; }; AF9D466609B5109C006E59CF /* DecayScreen */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D467309B5109C006E59CF /* Build configuration list for PBXNativeTarget "DecayScreen" */; buildPhases = ( AF9D466909B5109C006E59CF /* Resources */, AF9D466B09B5109C006E59CF /* Sources */, AF9D466E09B5109C006E59CF /* Frameworks */, AF9D467209B5109C006E59CF /* Rez */, AFA3D86B09C03BEF00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D466709B5109C006E59CF /* PBXTargetDependency */, ); name = DecayScreen; productName = DecayScreen; productReference = AF9D467609B5109C006E59CF /* DecayScreen.saver */; productType = "com.apple.product-type.bundle"; }; AF9D474409B5300A006E59CF /* SlideScreen */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D475109B5300A006E59CF /* Build configuration list for PBXNativeTarget "SlideScreen" */; buildPhases = ( AF9D474709B5300A006E59CF /* Resources */, AF9D474909B5300A006E59CF /* Sources */, AF9D474C09B5300A006E59CF /* Frameworks */, AF9D475009B5300A006E59CF /* Rez */, AFA3D8D109C03CAB00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D474509B5300A006E59CF /* PBXTargetDependency */, ); name = SlideScreen; productName = SlideScreen; productReference = AF9D475409B5300A006E59CF /* SlideScreen.saver */; productType = "com.apple.product-type.bundle"; }; AF9D475F09B53166006E59CF /* Zoom */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D476C09B53166006E59CF /* Build configuration list for PBXNativeTarget "Zoom" */; buildPhases = ( AF9D476209B53166006E59CF /* Resources */, AF9D476409B53166006E59CF /* Sources */, AF9D476709B53166006E59CF /* Frameworks */, AF9D476B09B53166006E59CF /* Rez */, AFA3D8FF09C03CF700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D476009B53166006E59CF /* PBXTargetDependency */, ); name = Zoom; productName = Zoom; productReference = AF9D476F09B53166006E59CF /* Zoom.saver */; productType = "com.apple.product-type.bundle"; }; AF9D48DB09B53322006E59CF /* Bumps */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D48E809B53322006E59CF /* Build configuration list for PBXNativeTarget "Bumps" */; buildPhases = ( AF9D48DE09B53322006E59CF /* Resources */, AF9D48E009B53322006E59CF /* Sources */, AF9D48E309B53322006E59CF /* Frameworks */, AF9D48E709B53322006E59CF /* Rez */, AFA3D85B09C03BD300E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D48DC09B53322006E59CF /* PBXTargetDependency */, ); name = Bumps; productName = Bumps; productReference = AF9D48EB09B53322006E59CF /* Bumps.saver */; productType = "com.apple.product-type.bundle"; }; AF9D48F409B535DA006E59CF /* Distort */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D490109B535DA006E59CF /* Build configuration list for PBXNativeTarget "Distort" */; buildPhases = ( AF9D48F709B535DA006E59CF /* Resources */, AF9D48F909B535DA006E59CF /* Sources */, AF9D48FC09B535DA006E59CF /* Frameworks */, AF9D490009B535DA006E59CF /* Rez */, AFA3D87109C03BFB00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D48F509B535DA006E59CF /* PBXTargetDependency */, ); name = Distort; productName = Distort; productReference = AF9D490409B535DA006E59CF /* Distort.saver */; productType = "com.apple.product-type.bundle"; }; AF9D492B09B53CBA006E59CF /* Ripples */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D493809B53CBA006E59CF /* Build configuration list for PBXNativeTarget "Ripples" */; buildPhases = ( AF9D492E09B53CBA006E59CF /* Resources */, AF9D493009B53CBA006E59CF /* Sources */, AF9D493309B53CBA006E59CF /* Frameworks */, AF9D493709B53CBA006E59CF /* Rez */, AFA3D8C709C03C9900E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D492C09B53CBA006E59CF /* PBXTargetDependency */, ); name = Ripples; productName = Ripples; productReference = AF9D493B09B53CBA006E59CF /* Ripples.saver */; productType = "com.apple.product-type.bundle"; }; AF9D495409B53FC9006E59CF /* RotZoomer */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D496109B53FC9006E59CF /* Build configuration list for PBXNativeTarget "RotZoomer" */; buildPhases = ( AF9D495709B53FC9006E59CF /* Resources */, AF9D495909B53FC9006E59CF /* Sources */, AF9D495C09B53FC9006E59CF /* Frameworks */, AF9D496009B53FC9006E59CF /* Rez */, AFA3D8CD09C03CA400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D495509B53FC9006E59CF /* PBXTargetDependency */, ); name = RotZoomer; productName = RotZoomer; productReference = AF9D496409B53FC9006E59CF /* RotZoomer.saver */; productType = "com.apple.product-type.bundle"; }; AF9D496C09B5411D006E59CF /* Twang */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D497909B5411D006E59CF /* Build configuration list for PBXNativeTarget "Twang" */; buildPhases = ( AF9D496F09B5411D006E59CF /* Resources */, AF9D497109B5411D006E59CF /* Sources */, AF9D497409B5411D006E59CF /* Frameworks */, AF9D497809B5411D006E59CF /* Rez */, AFA3D8E509C03CCD00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D496D09B5411D006E59CF /* PBXTargetDependency */, ); name = Twang; productName = Twang; productReference = AF9D497C09B5411D006E59CF /* Twang.saver */; productType = "com.apple.product-type.bundle"; }; AF9D499709B544C2006E59CF /* Spotlight */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D49A409B544C2006E59CF /* Build configuration list for PBXNativeTarget "Spotlight" */; buildPhases = ( AF9D499A09B544C2006E59CF /* Resources */, AF9D499C09B544C2006E59CF /* Sources */, AF9D499F09B544C2006E59CF /* Frameworks */, AF9D49A309B544C2006E59CF /* Rez */, AFA3D8D909C03CB700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D499809B544C2006E59CF /* PBXTargetDependency */, ); name = Spotlight; productName = Spotlight; productReference = AF9D49A709B544C3006E59CF /* Spotlight.saver */; productType = "com.apple.product-type.bundle"; }; AF9D4C6909B59F27006E59CF /* XLyap */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D4C7609B59F27006E59CF /* Build configuration list for PBXNativeTarget "XLyap" */; buildPhases = ( AF9D4C6C09B59F27006E59CF /* Resources */, AF9D4C6E09B59F27006E59CF /* Sources */, AF9D4C7109B59F27006E59CF /* Frameworks */, AF9D4C7509B59F27006E59CF /* Rez */, AFA3D8F709C03CEA00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D4C6A09B59F27006E59CF /* PBXTargetDependency */, ); name = XLyap; productName = XLyap; productReference = AF9D4C7909B59F27006E59CF /* XLyap.saver */; productType = "com.apple.product-type.bundle"; }; AF9D4CE709B5AA8E006E59CF /* Pong */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D4CF409B5AA8E006E59CF /* Build configuration list for PBXNativeTarget "Pong" */; buildPhases = ( AF9D4CEA09B5AA8E006E59CF /* Resources */, AF9D4CEC09B5AA8E006E59CF /* Sources */, AF9D4CEF09B5AA8E006E59CF /* Frameworks */, AF9D4CF309B5AA8E006E59CF /* Rez */, AFA3D8BD09C03C8900E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D4CE809B5AA8E006E59CF /* PBXTargetDependency */, ); name = Pong; productName = Pong; productReference = AF9D4CF709B5AA8E006E59CF /* Pong.saver */; productType = "com.apple.product-type.bundle"; }; AF9D4D7E09B5B2DC006E59CF /* XAnalogTV */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D4D8C09B5B2DC006E59CF /* Build configuration list for PBXNativeTarget "XAnalogTV" */; buildPhases = ( AF9D4D8109B5B2DC006E59CF /* Resources */, AF9D4D8309B5B2DC006E59CF /* Sources */, AF9D4D8709B5B2DC006E59CF /* Frameworks */, AF9D4D8B09B5B2DC006E59CF /* Rez */, AFA3D8F309C03CE400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D4D7F09B5B2DC006E59CF /* PBXTargetDependency */, ); name = XAnalogTV; productName = XAnalogTV; productReference = AF9D4D8F09B5B2DC006E59CF /* XAnalogTV.saver */; productType = "com.apple.product-type.bundle"; }; AF9D4DAF09B5B71E006E59CF /* BSOD */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D4DBD09B5B71E006E59CF /* Build configuration list for PBXNativeTarget "BSOD" */; buildPhases = ( AF9D4DB209B5B71E006E59CF /* Resources */, AF9D4DB409B5B71E006E59CF /* Sources */, AF9D4DB809B5B71E006E59CF /* Frameworks */, AF9D4DBC09B5B71E006E59CF /* Rez */, AFA3D69209C03B5C00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D4DB009B5B71E006E59CF /* PBXTargetDependency */, ); name = BSOD; productName = BSOD; productReference = AF9D4DC009B5B71E006E59CF /* BSOD.saver */; productType = "com.apple.product-type.bundle"; }; AF9D4DEC09B5BB19006E59CF /* Apple2 */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D4DFB09B5BB19006E59CF /* Build configuration list for PBXNativeTarget "Apple2" */; buildPhases = ( AF9D4DEF09B5BB19006E59CF /* Resources */, AF9D4DF109B5BB19006E59CF /* Sources */, AF9D4DF609B5BB19006E59CF /* Frameworks */, AF9D4DFA09B5BB19006E59CF /* Rez */, AFCCCBCB09C03AEE00353F4D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D4DED09B5BB19006E59CF /* PBXTargetDependency */, ); name = Apple2; productName = Apple2; productReference = AF9D4DFE09B5BB19006E59CF /* Apple2.saver */; productType = "com.apple.product-type.bundle"; }; AF9E7EBE190F4C1B00A8B01F /* enable_gc */ = { isa = PBXNativeTarget; buildConfigurationList = AF9E7EC5190F4C1C00A8B01F /* Build configuration list for PBXNativeTarget "enable_gc" */; buildPhases = ( AF9E7EBB190F4C1B00A8B01F /* Sources */, AF9E7EBC190F4C1B00A8B01F /* Frameworks */, AF9E7EBD190F4C1B00A8B01F /* CopyFiles */, ); buildRules = ( ); dependencies = ( ); name = enable_gc; productName = enable_gc; productReference = AF9E7EBF190F4C1B00A8B01F /* enable_gc */; productType = "com.apple.product-type.tool"; }; AFA3392E0B058505002B0E7D /* WebCollage */ = { isa = PBXNativeTarget; buildConfigurationList = AFA3393D0B058505002B0E7D /* Build configuration list for PBXNativeTarget "WebCollage" */; buildPhases = ( AFA339310B058505002B0E7D /* Resources */, AFA339340B058505002B0E7D /* Sources */, AFA339370B058505002B0E7D /* Frameworks */, AFA3393B0B058505002B0E7D /* Rez */, AFA3393C0B058505002B0E7D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA3392F0B058505002B0E7D /* PBXTargetDependency */, AFA33BDC0B058952002B0E7D /* PBXTargetDependency */, AFA33C040B058E3C002B0E7D /* PBXTargetDependency */, ); name = WebCollage; productName = WebCollage; productReference = AFA339400B058505002B0E7D /* WebCollage.saver */; productType = "com.apple.product-type.bundle"; }; AFA33BC60B058740002B0E7D /* webcollage-helper */ = { isa = PBXNativeTarget; buildConfigurationList = AFA33BCB0B058754002B0E7D /* Build configuration list for PBXNativeTarget "webcollage-helper" */; buildPhases = ( AFA33BC40B058740002B0E7D /* Sources */, AFA33BC50B058740002B0E7D /* Frameworks */, ); buildRules = ( ); dependencies = ( ); name = "webcollage-helper"; productName = "webcollage-helper"; productReference = AFA33BC70B058740002B0E7D /* webcollage-helper */; productType = "com.apple.product-type.tool"; }; AFA55946099330B000F3E977 /* Cage */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55957099330B000F3E977 /* Build configuration list for PBXNativeTarget "Cage" */; buildPhases = ( AFA55949099330B000F3E977 /* Resources */, AFA5594B099330B000F3E977 /* Sources */, AFA5594F099330B000F3E977 /* Frameworks */, AFA55956099330B000F3E977 /* Rez */, AFA3D96309C03DB500E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55947099330B000F3E977 /* PBXTargetDependency */, ); name = Cage; productName = Cage; productReference = AFA5595A099330B000F3E977 /* Cage.saver */; productType = "com.apple.product-type.bundle"; }; AFA5596D0993317900F3E977 /* Moebius */ = { isa = PBXNativeTarget; buildConfigurationList = AFA5597C0993317900F3E977 /* Build configuration list for PBXNativeTarget "Moebius" */; buildPhases = ( AFA559700993317900F3E977 /* Resources */, AFA559720993317900F3E977 /* Sources */, AFA559740993317900F3E977 /* Frameworks */, AFA5597B0993317900F3E977 /* Rez */, AFA3D9AB09C03E4200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA5596E0993317900F3E977 /* PBXTargetDependency */, ); name = Moebius; productName = Moebius; productReference = AFA5597F0993317900F3E977 /* Moebius.saver */; productType = "com.apple.product-type.bundle"; }; AFA559920993322100F3E977 /* Superquadrics */ = { isa = PBXNativeTarget; buildConfigurationList = AFA559A10993322100F3E977 /* Build configuration list for PBXNativeTarget "Superquadrics" */; buildPhases = ( AFA559950993322100F3E977 /* Resources */, AFA559970993322100F3E977 /* Sources */, AFA559990993322100F3E977 /* Frameworks */, AFA559A00993322100F3E977 /* Rez */, AFA3D9D109C03E8B00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA559930993322100F3E977 /* PBXTargetDependency */, ); name = Superquadrics; productName = Superquadrics; productReference = AFA559A40993322100F3E977 /* Superquadrics.saver */; productType = "com.apple.product-type.bundle"; }; AFA559B50993328000F3E977 /* Morph3D */ = { isa = PBXNativeTarget; buildConfigurationList = AFA559C40993328000F3E977 /* Build configuration list for PBXNativeTarget "Morph3D" */; buildPhases = ( AFA559B80993328000F3E977 /* Resources */, AFA559BA0993328000F3E977 /* Sources */, AFA559BC0993328000F3E977 /* Frameworks */, AFA559C30993328000F3E977 /* Rez */, AFA3D9AF09C03E4B00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA559B60993328000F3E977 /* PBXTargetDependency */, ); name = Morph3D; productName = Morph3D; productReference = AFA559C70993328000F3E977 /* Morph3D.saver */; productType = "com.apple.product-type.bundle"; }; AFA559CF0993330600F3E977 /* Rubik */ = { isa = PBXNativeTarget; buildConfigurationList = AFA559DE0993330600F3E977 /* Build configuration list for PBXNativeTarget "Rubik" */; buildPhases = ( AFA559D20993330600F3E977 /* Resources */, AFA559D40993330600F3E977 /* Sources */, AFA559D60993330600F3E977 /* Frameworks */, AFA559DD0993330600F3E977 /* Rez */, AFA3D9C109C03E6E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA559D00993330600F3E977 /* PBXTargetDependency */, ); name = Rubik; productName = Rubik; productReference = AFA559E10993330600F3E977 /* Rubik.saver */; productType = "com.apple.product-type.bundle"; }; AFA55A030993340300F3E977 /* Stairs */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55A120993340300F3E977 /* Build configuration list for PBXNativeTarget "Stairs" */; buildPhases = ( AFA55A060993340300F3E977 /* Resources */, AFA55A080993340300F3E977 /* Sources */, AFA55A0A0993340300F3E977 /* Frameworks */, AFA55A110993340300F3E977 /* Rez */, AFA3D9CB09C03E7F00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55A040993340300F3E977 /* PBXTargetDependency */, ); name = Stairs; productName = Stairs; productReference = AFA55A150993340300F3E977 /* Stairs.saver */; productType = "com.apple.product-type.bundle"; }; AFA55A20099334A000F3E977 /* Sproingies */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55A2F099334A000F3E977 /* Build configuration list for PBXNativeTarget "Sproingies" */; buildPhases = ( AFA55A23099334A000F3E977 /* Resources */, AFA55A25099334A000F3E977 /* Sources */, AFA55A27099334A000F3E977 /* Frameworks */, AFA55A2E099334A000F3E977 /* Rez */, AFA3D9C909C03E7C00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55A21099334A000F3E977 /* PBXTargetDependency */, ); name = Sproingies; productName = Sproingies; productReference = AFA55A32099334A000F3E977 /* Sproingies.saver */; productType = "com.apple.product-type.bundle"; }; AFA55A790993364300F3E977 /* Lament */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55A880993364300F3E977 /* Build configuration list for PBXNativeTarget "Lament" */; buildPhases = ( AFA55A7C0993364300F3E977 /* Resources */, AFA55A7E0993364300F3E977 /* Sources */, AFA55A800993364300F3E977 /* Frameworks */, AFA55A870993364300F3E977 /* Rez */, AFA3D9A309C03E3200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55A7A0993364300F3E977 /* PBXTargetDependency */, ); name = Lament; productName = Lament; productReference = AFA55A8B0993364300F3E977 /* Lament.saver */; productType = "com.apple.product-type.bundle"; }; AFA55ACF09933CEF00F3E977 /* Bubble3D */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55ADE09933CEF00F3E977 /* Build configuration list for PBXNativeTarget "Bubble3D" */; buildPhases = ( AFA55AD209933CEF00F3E977 /* Resources */, AFA55AD409933CEF00F3E977 /* Sources */, AFA55AD609933CEF00F3E977 /* Frameworks */, AFA55ADD09933CEF00F3E977 /* Rez */, AFA3D96109C03DB100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55AD009933CEF00F3E977 /* PBXTargetDependency */, ); name = Bubble3D; productName = Bubble3D; productReference = AFA55AE109933CEF00F3E977 /* Bubble3D.saver */; productType = "com.apple.product-type.bundle"; }; AFA55B0909933E0500F3E977 /* GLPlanet */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55B1B09933E0500F3E977 /* Build configuration list for PBXNativeTarget "GLPlanet" */; buildPhases = ( AFA55B0C09933E0500F3E977 /* Resources */, AFA55B0E09933E0500F3E977 /* Sources */, AFA55B1309933E0500F3E977 /* Frameworks */, AFA55B1A09933E0500F3E977 /* Rez */, AFA3D99309C03E1600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55B0A09933E0500F3E977 /* PBXTargetDependency */, ); name = GLPlanet; productName = GLPlanet; productReference = AFA55B1E09933E0500F3E977 /* GLPlanet.saver */; productType = "com.apple.product-type.bundle"; }; AFA55B2509933E8D00F3E977 /* Pulsar */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55B3409933E8D00F3E977 /* Build configuration list for PBXNativeTarget "Pulsar" */; buildPhases = ( AFA55B2809933E8D00F3E977 /* Resources */, AFA55B2A09933E8D00F3E977 /* Sources */, AFA55B2C09933E8D00F3E977 /* Frameworks */, AFA55B3309933E8D00F3E977 /* Rez */, AFA3D9BD09C03E6500E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55B2609933E8D00F3E977 /* PBXTargetDependency */, ); name = Pulsar; productName = Pulsar; productReference = AFA55B3709933E8D00F3E977 /* Pulsar.saver */; productType = "com.apple.product-type.bundle"; }; AFA55B7909933F7200F3E977 /* Sierpinski3D */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55B8809933F7200F3E977 /* Build configuration list for PBXNativeTarget "Sierpinski3D" */; buildPhases = ( AFA55B7C09933F7200F3E977 /* Resources */, AFA55B7E09933F7200F3E977 /* Sources */, AFA55B8009933F7200F3E977 /* Frameworks */, AFA55B8709933F7200F3E977 /* Rez */, AFA3D9C509C03E7400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55B7A09933F7200F3E977 /* PBXTargetDependency */, ); name = Sierpinski3D; productName = Sierpinski3D; productReference = AFA55B8B09933F7200F3E977 /* Sierpinski3D.saver */; productType = "com.apple.product-type.bundle"; }; AFA55B9109933FDA00F3E977 /* GFlux */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55BA009933FDA00F3E977 /* Build configuration list for PBXNativeTarget "GFlux" */; buildPhases = ( AFA55B9409933FDA00F3E977 /* Resources */, AFA55B9609933FDA00F3E977 /* Sources */, AFA55B9809933FDA00F3E977 /* Frameworks */, AFA55B9F09933FDA00F3E977 /* Rez */, AFA3D98709C03DF400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55B9209933FDA00F3E977 /* PBXTargetDependency */, ); name = GFlux; productName = GFlux; productReference = AFA55BA309933FDA00F3E977 /* GFlux.saver */; productType = "com.apple.product-type.bundle"; }; AFA55BAB099340CE00F3E977 /* Circuit */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55BBA099340CE00F3E977 /* Build configuration list for PBXNativeTarget "Circuit" */; buildPhases = ( AFA55BAE099340CE00F3E977 /* Resources */, AFA55BB0099340CE00F3E977 /* Sources */, AFA55BB2099340CE00F3E977 /* Frameworks */, AFA55BB9099340CE00F3E977 /* Rez */, AFA3D96709C03DBC00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55BAC099340CE00F3E977 /* PBXTargetDependency */, ); name = Circuit; productName = Circuit; productReference = AFA55BBD099340CE00F3E977 /* Circuit.saver */; productType = "com.apple.product-type.bundle"; }; AFA55BE40993429100F3E977 /* Menger */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55BF30993429100F3E977 /* Build configuration list for PBXNativeTarget "Menger" */; buildPhases = ( AFA55BE70993429100F3E977 /* Resources */, AFA55BE90993429100F3E977 /* Sources */, AFA55BEB0993429100F3E977 /* Frameworks */, AFA55BF20993429100F3E977 /* Rez */, AFA3D9A709C03E3A00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55BE50993429100F3E977 /* PBXTargetDependency */, ); name = Menger; productName = Menger; productReference = AFA55BF60993429100F3E977 /* Menger.saver */; productType = "com.apple.product-type.bundle"; }; AFA55C0E0993431300F3E977 /* Engine */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55C1D0993431300F3E977 /* Build configuration list for PBXNativeTarget "Engine" */; buildPhases = ( AFA55C110993431300F3E977 /* Resources */, AFA55C130993431300F3E977 /* Sources */, AFA55C150993431300F3E977 /* Frameworks */, AFA55C1C0993431300F3E977 /* Rez */, AFA3D97709C03DDA00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55C0F0993431300F3E977 /* PBXTargetDependency */, ); name = Engine; productName = Engine; productReference = AFA55C200993431300F3E977 /* Engine.saver */; productType = "com.apple.product-type.bundle"; }; AFA55C77099349A600F3E977 /* GLSnake */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55C86099349A600F3E977 /* Build configuration list for PBXNativeTarget "GLSnake" */; buildPhases = ( AFA55C7A099349A600F3E977 /* Resources */, AFA55C7C099349A600F3E977 /* Sources */, AFA55C7E099349A600F3E977 /* Frameworks */, AFA55C85099349A600F3E977 /* Rez */, AFA3D99709C03E1C00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55C78099349A600F3E977 /* PBXTargetDependency */, ); name = GLSnake; productName = GLSnake; productReference = AFA55C89099349A600F3E977 /* GLSnake.saver */; productType = "com.apple.product-type.bundle"; }; AFA55CA909934BB200F3E977 /* Boxed */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55CB809934BB200F3E977 /* Build configuration list for PBXNativeTarget "Boxed" */; buildPhases = ( AFA55CAC09934BB200F3E977 /* Resources */, AFA55CAE09934BB200F3E977 /* Sources */, AFA55CB009934BB200F3E977 /* Frameworks */, AFA55CB709934BB200F3E977 /* Rez */, AFA3D95F09C03DAE00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55CAA09934BB200F3E977 /* PBXTargetDependency */, ); name = Boxed; productName = Boxed; productReference = AFA55CBB09934BB200F3E977 /* Boxed.saver */; productType = "com.apple.product-type.bundle"; }; AFA55CCC09934CE400F3E977 /* GLForestFire */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55CDB09934CE400F3E977 /* Build configuration list for PBXNativeTarget "GLForestFire" */; buildPhases = ( AFA55CCF09934CE400F3E977 /* Resources */, AFA55CD109934CE400F3E977 /* Sources */, AFA55CD309934CE400F3E977 /* Frameworks */, AFA55CDA09934CE400F3E977 /* Rez */, AFA3D98B09C03DFC00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55CCD09934CE400F3E977 /* PBXTargetDependency */, ); name = GLForestFire; productName = GLForestFire; productReference = AFA55CDE09934CE400F3E977 /* GLForestFire.saver */; productType = "com.apple.product-type.bundle"; }; AFA55D3C0993565300F3E977 /* SBalls */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55D4B0993565300F3E977 /* Build configuration list for PBXNativeTarget "SBalls" */; buildPhases = ( AFA55D3F0993565300F3E977 /* Resources */, AFA55D410993565300F3E977 /* Sources */, AFA55D430993565300F3E977 /* Frameworks */, AFA55D4A0993565300F3E977 /* Rez */, AFA3D9C309C03E7100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55D3D0993565300F3E977 /* PBXTargetDependency */, ); name = SBalls; productName = SBalls; productReference = AFA55D4E0993565300F3E977 /* SBalls.saver */; productType = "com.apple.product-type.bundle"; }; AFA55D620993584B00F3E977 /* Cubenetic */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55D710993584B00F3E977 /* Build configuration list for PBXNativeTarget "Cubenetic" */; buildPhases = ( AFA55D650993584B00F3E977 /* Resources */, AFA55D670993584B00F3E977 /* Sources */, AFA55D690993584B00F3E977 /* Frameworks */, AFA55D700993584B00F3E977 /* Rez */, AFA3D96D09C03DCA00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55D630993584B00F3E977 /* PBXTargetDependency */, ); name = Cubenetic; productName = Cubenetic; productReference = AFA55D740993584B00F3E977 /* Cubenetic.saver */; productType = "com.apple.product-type.bundle"; }; AFA55D7F099358C400F3E977 /* Spheremonics */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55D8E099358C400F3E977 /* Build configuration list for PBXNativeTarget "Spheremonics" */; buildPhases = ( AFA55D82099358C400F3E977 /* Resources */, AFA55D84099358C400F3E977 /* Sources */, AFA55D86099358C400F3E977 /* Frameworks */, AFA55D8D099358C400F3E977 /* Rez */, AFA3D9C709C03E7800E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55D80099358C400F3E977 /* PBXTargetDependency */, ); name = Spheremonics; productName = Spheremonics; productReference = AFA55D91099358C400F3E977 /* Spheremonics.saver */; productType = "com.apple.product-type.bundle"; }; AFA55DC809935D7000F3E977 /* Lavalite */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55DD709935D7000F3E977 /* Build configuration list for PBXNativeTarget "Lavalite" */; buildPhases = ( AFA55DCB09935D7000F3E977 /* Resources */, AFA55DCD09935D7000F3E977 /* Sources */, AFA55DCF09935D7000F3E977 /* Frameworks */, AFA55DD609935D7000F3E977 /* Rez */, AFA3D9A509C03E3600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55DC909935D7000F3E977 /* PBXTargetDependency */, ); name = Lavalite; productName = Lavalite; productReference = AFA55DDA09935D7000F3E977 /* Lavalite.saver */; productType = "com.apple.product-type.bundle"; }; AFA55DF009935E4900F3E977 /* Queens */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55E0009935E4900F3E977 /* Build configuration list for PBXNativeTarget "Queens" */; buildPhases = ( AFA55DF309935E4900F3E977 /* Resources */, AFA55DF509935E4900F3E977 /* Sources */, AFA55DF809935E4900F3E977 /* Frameworks */, AFA55DFF09935E4900F3E977 /* Rez */, AFA3D9BF09C03E6900E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55DF109935E4900F3E977 /* PBXTargetDependency */, ); name = Queens; productName = Queens; productReference = AFA55E0309935E4900F3E977 /* Queens.saver */; productType = "com.apple.product-type.bundle"; }; AFA55E0D09935EDC00F3E977 /* Endgame */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55E1C09935EDC00F3E977 /* Build configuration list for PBXNativeTarget "Endgame" */; buildPhases = ( AFA55E1009935EDC00F3E977 /* Resources */, AFA55E1209935EDC00F3E977 /* Sources */, AFA55E1409935EDC00F3E977 /* Frameworks */, AFA55E1B09935EDC00F3E977 /* Rez */, AFA3D97509C03DD700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55E0E09935EDC00F3E977 /* PBXTargetDependency */, ); name = Endgame; productName = Endgame; productReference = AFA55E1F09935EDC00F3E977 /* Endgame.saver */; productType = "com.apple.product-type.bundle"; }; AFA55E2F09935F8E00F3E977 /* GLBlur */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55E3F09935F8E00F3E977 /* Build configuration list for PBXNativeTarget "GLBlur" */; buildPhases = ( AFA55E3209935F8E00F3E977 /* Resources */, AFA55E3409935F8E00F3E977 /* Sources */, AFA55E3709935F8E00F3E977 /* Frameworks */, AFA55E3E09935F8E00F3E977 /* Rez */, AFA3D98909C03DF700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55E3009935F8E00F3E977 /* PBXTargetDependency */, ); name = GLBlur; productName = GLBlur; productReference = AFA55E4209935F8E00F3E977 /* GLBlur.saver */; productType = "com.apple.product-type.bundle"; }; AFA55E4E09935FF900F3E977 /* FlyingToasters */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55E5D09935FF900F3E977 /* Build configuration list for PBXNativeTarget "FlyingToasters" */; buildPhases = ( AFA55E5109935FF900F3E977 /* Resources */, AFA55E5309935FF900F3E977 /* Sources */, AFA55E5509935FF900F3E977 /* Frameworks */, AFA55E5C09935FF900F3E977 /* Rez */, AFA3D98109C03DEA00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55E4F09935FF900F3E977 /* PBXTargetDependency */, ); name = FlyingToasters; productName = FlyingToasters; productReference = AFA55E6009935FF900F3E977 /* FlyingToasters.saver */; productType = "com.apple.product-type.bundle"; }; AFA55EC7099360E300F3E977 /* BouncingCow */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55EE0099360E300F3E977 /* Build configuration list for PBXNativeTarget "BouncingCow" */; buildPhases = ( AFA55ECA099360E300F3E977 /* Resources */, AFA55ECC099360E300F3E977 /* Sources */, AFA55ED8099360E300F3E977 /* Frameworks */, AFA55EDF099360E300F3E977 /* Rez */, AFA3D95D09C03DAB00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55EC8099360E300F3E977 /* PBXTargetDependency */, ); name = BouncingCow; productName = BouncingCow; productReference = AFA55EE3099360E300F3E977 /* BouncingCow.saver */; productType = "com.apple.product-type.bundle"; }; AFA55F06099361B700F3E977 /* JigglyPuff */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55F1B099361B700F3E977 /* Build configuration list for PBXNativeTarget "JigglyPuff" */; buildPhases = ( AFA55F09099361B700F3E977 /* Resources */, AFA55F0B099361B700F3E977 /* Sources */, AFA55F13099361B700F3E977 /* Frameworks */, AFA55F1A099361B700F3E977 /* Rez */, AFA3D99D09C03E2600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55F07099361B700F3E977 /* PBXTargetDependency */, ); name = JigglyPuff; productName = JigglyPuff; productReference = AFA55F1E099361B700F3E977 /* JigglyPuff.saver */; productType = "com.apple.product-type.bundle"; }; AFA55F2A0993622F00F3E977 /* Klein */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55F390993622F00F3E977 /* Build configuration list for PBXNativeTarget "Klein" */; buildPhases = ( AFA55F2D0993622F00F3E977 /* Resources */, AFA55F2F0993622F00F3E977 /* Sources */, AFA55F310993622F00F3E977 /* Frameworks */, AFA55F380993622F00F3E977 /* Rez */, AFA3D9A109C03E2E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55F2B0993622F00F3E977 /* PBXTargetDependency */, ); name = Klein; productName = Klein; productReference = AFA55F3C0993622F00F3E977 /* Klein.saver */; productType = "com.apple.product-type.bundle"; }; AFA55F420993629000F3E977 /* Hypertorus */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55F510993629000F3E977 /* Build configuration list for PBXNativeTarget "Hypertorus" */; buildPhases = ( AFA55F450993629000F3E977 /* Resources */, AFA55F470993629000F3E977 /* Sources */, AFA55F490993629000F3E977 /* Frameworks */, AFA55F500993629000F3E977 /* Rez */, AFA3D99B09C03E2300E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55F430993629000F3E977 /* PBXTargetDependency */, ); name = Hypertorus; productName = HyperTorus; productReference = AFA55F540993629000F3E977 /* Hypertorus.saver */; productType = "com.apple.product-type.bundle"; }; AFA55F720993643600F3E977 /* GLMatrix */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55F810993643600F3E977 /* Build configuration list for PBXNativeTarget "GLMatrix" */; buildPhases = ( AFA55F750993643600F3E977 /* Resources */, AFA55F770993643600F3E977 /* Sources */, AFA55F790993643600F3E977 /* Frameworks */, AFA55F800993643600F3E977 /* Rez */, AFA3D99109C03E1200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55F730993643600F3E977 /* PBXTargetDependency */, ); name = GLMatrix; productName = GLMatrix; productReference = AFA55F840993643600F3E977 /* GLMatrix.saver */; productType = "com.apple.product-type.bundle"; }; AFA55FD309936BFA00F3E977 /* CubeStorm */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55FE209936BFA00F3E977 /* Build configuration list for PBXNativeTarget "CubeStorm" */; buildPhases = ( AFA55FD609936BFA00F3E977 /* Resources */, AFA55FD809936BFA00F3E977 /* Sources */, AFA55FDA09936BFA00F3E977 /* Frameworks */, AFA55FE109936BFA00F3E977 /* Rez */, AFA3D96F09C03DCD00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55FD409936BFA00F3E977 /* PBXTargetDependency */, ); name = CubeStorm; productName = CubeStorm; productReference = AFA55FE509936BFA00F3E977 /* CubeStorm.saver */; productType = "com.apple.product-type.bundle"; }; AFA55FF909936C6D00F3E977 /* GLKnots */ = { isa = PBXNativeTarget; buildConfigurationList = AFA5600809936C6D00F3E977 /* Build configuration list for PBXNativeTarget "GLKnots" */; buildPhases = ( AFA55FFC09936C6D00F3E977 /* Resources */, AFA55FFE09936C6D00F3E977 /* Sources */, AFA5600009936C6D00F3E977 /* Frameworks */, AFA5600709936C6D00F3E977 /* Rez */, AFA3D98F09C03E0F00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55FFA09936C6D00F3E977 /* PBXTargetDependency */, ); name = GLKnots; productName = GLKnots; productReference = AFA5600B09936C6D00F3E977 /* GLKnots.saver */; productType = "com.apple.product-type.bundle"; }; AFA5601409936CC800F3E977 /* BlockTube */ = { isa = PBXNativeTarget; buildConfigurationList = AFA5602309936CC800F3E977 /* Build configuration list for PBXNativeTarget "BlockTube" */; buildPhases = ( AFA5601709936CC800F3E977 /* Resources */, AFA5601909936CC800F3E977 /* Sources */, AFA5601B09936CC800F3E977 /* Frameworks */, AFA5602209936CC800F3E977 /* Rez */, AFA3D95909C03DA400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA5601509936CC800F3E977 /* PBXTargetDependency */, ); name = BlockTube; productName = BlockTube; productReference = AFA5602609936CC800F3E977 /* BlockTube.saver */; productType = "com.apple.product-type.bundle"; }; AFA5603209936D5100F3E977 /* FlipFlop */ = { isa = PBXNativeTarget; buildConfigurationList = AFA5604109936D5100F3E977 /* Build configuration list for PBXNativeTarget "FlipFlop" */; buildPhases = ( AFA5603509936D5100F3E977 /* Resources */, AFA5603709936D5100F3E977 /* Sources */, AFA5603909936D5100F3E977 /* Frameworks */, AFA5604009936D5100F3E977 /* Rez */, AFA3D97B09C03DE000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA5603309936D5100F3E977 /* PBXTargetDependency */, ); name = FlipFlop; productName = FlipFlop; productReference = AFA5604409936D5100F3E977 /* FlipFlop.saver */; productType = "com.apple.product-type.bundle"; }; AFA5604A09936E2100F3E977 /* AntInspect */ = { isa = PBXNativeTarget; buildConfigurationList = AFA5605909936E2100F3E977 /* Build configuration list for PBXNativeTarget "AntInspect" */; buildPhases = ( AFA5604D09936E2100F3E977 /* Resources */, AFA5604F09936E2100F3E977 /* Sources */, AFA5605109936E2100F3E977 /* Frameworks */, AFA5605809936E2100F3E977 /* Rez */, AFA3D94D09C03D8D00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA5604B09936E2100F3E977 /* PBXTargetDependency */, ); name = AntInspect; productName = AntInspect; productReference = AFA5605C09936E2100F3E977 /* AntInspect.saver */; productType = "com.apple.product-type.bundle"; }; AFA5606209936F3800F3E977 /* AntSpotlight */ = { isa = PBXNativeTarget; buildConfigurationList = AFA5607109936F3800F3E977 /* Build configuration list for PBXNativeTarget "AntSpotlight" */; buildPhases = ( AFA5606509936F3800F3E977 /* Resources */, AFA5606709936F3800F3E977 /* Sources */, AFA5606909936F3800F3E977 /* Frameworks */, AFA5607009936F3800F3E977 /* Rez */, AFA3D95109C03D9400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA5606309936F3800F3E977 /* PBXTargetDependency */, ); name = AntSpotlight; productName = AntSpotlight; productReference = AFA5607409936F3800F3E977 /* AntSpotlight.saver */; productType = "com.apple.product-type.bundle"; }; AFA560AE0993718D00F3E977 /* Polytopes */ = { isa = PBXNativeTarget; buildConfigurationList = AFA560BD0993718D00F3E977 /* Build configuration list for PBXNativeTarget "Polytopes" */; buildPhases = ( AFA560B10993718D00F3E977 /* Resources */, AFA560B30993718D00F3E977 /* Sources */, AFA560B50993718D00F3E977 /* Frameworks */, AFA560BC0993718D00F3E977 /* Rez */, AFA3D9B909C03E5E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA560AF0993718D00F3E977 /* PBXTargetDependency */, ); name = Polytopes; productName = Polytopes; productReference = AFA560C00993718D00F3E977 /* Polytopes.saver */; productType = "com.apple.product-type.bundle"; }; AFA560FD0993781600F3E977 /* Molecule */ = { isa = PBXNativeTarget; buildConfigurationList = AFA5610C0993781600F3E977 /* Build configuration list for PBXNativeTarget "Molecule" */; buildPhases = ( AFA561000993781600F3E977 /* Resources */, AFA561020993781600F3E977 /* Sources */, AFA561040993781600F3E977 /* Frameworks */, AFA5610B0993781600F3E977 /* Rez */, AFA3D9AD09C03E4600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA560FE0993781600F3E977 /* PBXTargetDependency */, AFA5611E0993791D00F3E977 /* PBXTargetDependency */, ); name = Molecule; productName = Molecule; productReference = AFA5610F0993781600F3E977 /* Molecule.saver */; productType = "com.apple.product-type.bundle"; }; AFA5615609937C0D00F3E977 /* BlinkBox */ = { isa = PBXNativeTarget; buildConfigurationList = AFA5616709937C0D00F3E977 /* Build configuration list for PBXNativeTarget "BlinkBox" */; buildPhases = ( AFA5615B09937C0D00F3E977 /* Resources */, AFA5615D09937C0D00F3E977 /* Sources */, AFA5615F09937C0D00F3E977 /* Frameworks */, AFA5616609937C0D00F3E977 /* Rez */, AFA3D95709C03DA100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA5615709937C0D00F3E977 /* PBXTargetDependency */, ); name = BlinkBox; productName = BlinkBox; productReference = AFA5616A09937C0D00F3E977 /* BlinkBox.saver */; productType = "com.apple.product-type.bundle"; }; AFA5617B09937CF100F3E977 /* Noof */ = { isa = PBXNativeTarget; buildConfigurationList = AFA5618A09937CF100F3E977 /* Build configuration list for PBXNativeTarget "Noof" */; buildPhases = ( AFA5617E09937CF100F3E977 /* Resources */, AFA5618009937CF100F3E977 /* Sources */, AFA5618209937CF100F3E977 /* Frameworks */, AFA5618909937CF100F3E977 /* Rez */, AFA3D9B109C03E4E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA5617C09937CF100F3E977 /* PBXTargetDependency */, ); name = Noof; productName = Noof; productReference = AFA5618D09937CF100F3E977 /* Noof.saver */; productType = "com.apple.product-type.bundle"; }; AFA5619D09937D7E00F3E977 /* Polyhedra */ = { isa = PBXNativeTarget; buildConfigurationList = AFA561AC09937D7E00F3E977 /* Build configuration list for PBXNativeTarget "Polyhedra" */; buildPhases = ( AFA561A009937D7E00F3E977 /* Resources */, AFA561A209937D7E00F3E977 /* Sources */, AFA561A409937D7E00F3E977 /* Frameworks */, AFA561AB09937D7E00F3E977 /* Rez */, AFA3D9B709C03E5B00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA5619E09937D7E00F3E977 /* PBXTargetDependency */, ); name = Polyhedra; productName = Polyhedra; productReference = AFA561AF09937D7E00F3E977 /* Polyhedra.saver */; productType = "com.apple.product-type.bundle"; }; AFA562060993849F00F3E977 /* Providence */ = { isa = PBXNativeTarget; buildConfigurationList = AFA562160993849F00F3E977 /* Build configuration list for PBXNativeTarget "Providence" */; buildPhases = ( AFA562090993849F00F3E977 /* Resources */, AFA5620B0993849F00F3E977 /* Sources */, AFA5620E0993849F00F3E977 /* Frameworks */, AFA562150993849F00F3E977 /* Rez */, AFA3D9BB09C03E6200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA562070993849F00F3E977 /* PBXTargetDependency */, ); name = Providence; productName = Providence; productReference = AFA562190993849F00F3E977 /* Providence.saver */; productType = "com.apple.product-type.bundle"; }; AFA5621F0993852500F3E977 /* Pinion */ = { isa = PBXNativeTarget; buildConfigurationList = AFA5622E0993852500F3E977 /* Build configuration list for PBXNativeTarget "Pinion" */; buildPhases = ( AFA562220993852500F3E977 /* Resources */, AFA562240993852500F3E977 /* Sources */, AFA562260993852500F3E977 /* Frameworks */, AFA5622D0993852500F3E977 /* Rez */, AFA3D9B309C03E5100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA562200993852500F3E977 /* PBXTargetDependency */, ); name = Pinion; productName = Pinion; productReference = AFA562310993852500F3E977 /* Pinion.saver */; productType = "com.apple.product-type.bundle"; }; AFA562BF099392C600F3E977 /* Boing */ = { isa = PBXNativeTarget; buildConfigurationList = AFA562CE099392C600F3E977 /* Build configuration list for PBXNativeTarget "Boing" */; buildPhases = ( AFA562C2099392C600F3E977 /* Resources */, AFA562C4099392C600F3E977 /* Sources */, AFA562C6099392C600F3E977 /* Frameworks */, AFA562CD099392C600F3E977 /* Rez */, AFA3D95B09C03DA800E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA562C0099392C600F3E977 /* PBXTargetDependency */, ); name = Boing; productName = Boing; productReference = AFA562D1099392C600F3E977 /* Boing.saver */; productType = "com.apple.product-type.bundle"; }; AFA562DA099393C900F3E977 /* AntMaze */ = { isa = PBXNativeTarget; buildConfigurationList = AFA562E9099393C900F3E977 /* Build configuration list for PBXNativeTarget "AntMaze" */; buildPhases = ( AFA562DD099393C900F3E977 /* Resources */, AFA562DF099393C900F3E977 /* Sources */, AFA562E1099393C900F3E977 /* Frameworks */, AFA562E8099393C900F3E977 /* Rez */, AFA3D94F09C03D9100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA562DB099393C900F3E977 /* PBXTargetDependency */, ); name = AntMaze; productName = AntMaze; productReference = AFA562EC099393C900F3E977 /* AntMaze.saver */; productType = "com.apple.product-type.bundle"; }; AFA562F20993943B00F3E977 /* Tangram */ = { isa = PBXNativeTarget; buildConfigurationList = AFA563010993943B00F3E977 /* Build configuration list for PBXNativeTarget "Tangram" */; buildPhases = ( AFA562F50993943B00F3E977 /* Resources */, AFA562F70993943B00F3E977 /* Sources */, AFA562F90993943B00F3E977 /* Frameworks */, AFA563000993943B00F3E977 /* Rez */, AFA3D9D309C03E8F00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA562F30993943B00F3E977 /* PBXTargetDependency */, ); name = Tangram; productName = Tangram; productReference = AFA563040993943B00F3E977 /* Tangram.saver */; productType = "com.apple.product-type.bundle"; }; AFA563130993951000F3E977 /* Crackberg */ = { isa = PBXNativeTarget; buildConfigurationList = AFA563230993951000F3E977 /* Build configuration list for PBXNativeTarget "Crackberg" */; buildPhases = ( AFA563160993951000F3E977 /* Resources */, AFA563180993951000F3E977 /* Sources */, AFA5631B0993951000F3E977 /* Frameworks */, AFA563220993951000F3E977 /* Rez */, AFA3D96909C03DBF00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA563140993951000F3E977 /* PBXTargetDependency */, ); name = Crackberg; productName = Crackberg; productReference = AFA563260993951000F3E977 /* Crackberg.saver */; productType = "com.apple.product-type.bundle"; }; AFA56331099395ED00F3E977 /* GLHanoi */ = { isa = PBXNativeTarget; buildConfigurationList = AFA56340099395ED00F3E977 /* Build configuration list for PBXNativeTarget "GLHanoi" */; buildPhases = ( AFA56334099395ED00F3E977 /* Resources */, AFA56336099395ED00F3E977 /* Sources */, AFA56338099395ED00F3E977 /* Frameworks */, AFA5633F099395ED00F3E977 /* Rez */, AFA3D98D09C03E0500E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA56332099395ED00F3E977 /* PBXTargetDependency */, ); name = GLHanoi; productName = GLHanoi; productReference = AFA56343099395ED00F3E977 /* GLHanoi.saver */; productType = "com.apple.product-type.bundle"; }; AFA56351099396C000F3E977 /* Cube21 */ = { isa = PBXNativeTarget; buildConfigurationList = AFA56360099396C000F3E977 /* Build configuration list for PBXNativeTarget "Cube21" */; buildPhases = ( AFA56354099396C000F3E977 /* Resources */, AFA56356099396C000F3E977 /* Sources */, AFA56358099396C000F3E977 /* Frameworks */, AFA5635F099396C000F3E977 /* Rez */, AFA3D96B09C03DC600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA56352099396C000F3E977 /* PBXTargetDependency */, ); name = Cube21; productName = Cube21; productReference = AFA56363099396C000F3E977 /* Cube21.saver */; productType = "com.apple.product-type.bundle"; }; AFA56379099397B300F3E977 /* TimeTunnel */ = { isa = PBXNativeTarget; buildConfigurationList = AFA56388099397B300F3E977 /* Build configuration list for PBXNativeTarget "TimeTunnel" */; buildPhases = ( AFA5637C099397B300F3E977 /* Resources */, AFA5637E099397B300F3E977 /* Sources */, AFA56380099397B300F3E977 /* Frameworks */, AFA56387099397B300F3E977 /* Rez */, AFA3D9D509C03E9300E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA5637A099397B300F3E977 /* PBXTargetDependency */, ); name = TimeTunnel; productName = TimeTunnel; productReference = AFA5638B099397B300F3E977 /* TimeTunnel.saver */; productType = "com.apple.product-type.bundle"; }; AFA563A4099398BB00F3E977 /* Juggler3D */ = { isa = PBXNativeTarget; buildConfigurationList = AFA563B3099398BB00F3E977 /* Build configuration list for PBXNativeTarget "Juggler3D" */; buildPhases = ( AFA563A7099398BB00F3E977 /* Resources */, AFA563A9099398BB00F3E977 /* Sources */, AFA563AB099398BB00F3E977 /* Frameworks */, AFA563B2099398BB00F3E977 /* Rez */, AFA3D99F09C03E2900E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA563A5099398BB00F3E977 /* PBXTargetDependency */, ); name = Juggler3D; productName = Juggler3D; productReference = AFA563B6099398BB00F3E977 /* Juggler3D.saver */; productType = "com.apple.product-type.bundle"; }; AFB591A7178B812C00EA4005 /* Hexadrop */ = { isa = PBXNativeTarget; buildConfigurationList = AFB591B7178B812C00EA4005 /* Build configuration list for PBXNativeTarget "Hexadrop" */; buildPhases = ( AFB591AA178B812C00EA4005 /* Resources */, AFB591AC178B812C00EA4005 /* Sources */, AFB591AF178B812C00EA4005 /* Frameworks */, AFB591B5178B812C00EA4005 /* Rez */, AFB591B6178B812C00EA4005 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFB591A8178B812C00EA4005 /* PBXTargetDependency */, ); name = Hexadrop; productName = Attraction; productReference = AFB591BA178B812C00EA4005 /* Hexadrop.saver */; productType = "com.apple.product-type.bundle"; }; AFBFE74B178642DC00432B21 /* Apple2-OSX */ = { isa = PBXNativeTarget; buildConfigurationList = AFBFE75B178642DC00432B21 /* Build configuration list for PBXNativeTarget "Apple2-OSX" */; buildPhases = ( AFBFE74E178642DC00432B21 /* Resources */, AFBFE751178642DC00432B21 /* Sources */, AFBFE755178642DC00432B21 /* Frameworks */, AFBFE78817894FFA00432B21 /* Copy Standalone Preferences XML File */, AFBFE75A178642DC00432B21 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFBFE7641786438900432B21 /* PBXTargetDependency */, AFBFE74C178642DC00432B21 /* PBXTargetDependency */, ); name = "Apple2-OSX"; productName = SaverTester; productReference = AFBFE75E178642DC00432B21 /* Apple2.app */; productType = "com.apple.product-type.application"; }; AFBFE767178647FE00432B21 /* Phosphor-OSX */ = { isa = PBXNativeTarget; buildConfigurationList = AFBFE77B178647FE00432B21 /* Build configuration list for PBXNativeTarget "Phosphor-OSX" */; buildPhases = ( AFBFE76C178647FE00432B21 /* Resources */, AFBFE771178647FE00432B21 /* Sources */, AFBFE775178647FE00432B21 /* Frameworks */, AFBFE78917895AAF00432B21 /* Copy Standalone Preferences XML File */, AFBFE77A178647FE00432B21 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFBFE7811786482B00432B21 /* PBXTargetDependency */, AFBFE76A178647FE00432B21 /* PBXTargetDependency */, ); name = "Phosphor-OSX"; productName = SaverTester; productReference = AFBFE77E178647FE00432B21 /* Phosphor.app */; productType = "com.apple.product-type.application"; }; AFCF833B1AF5B515008BB7E1 /* SplitFlap */ = { isa = PBXNativeTarget; buildConfigurationList = AFCF834D1AF5B515008BB7E1 /* Build configuration list for PBXNativeTarget "SplitFlap" */; buildPhases = ( AFCF833E1AF5B515008BB7E1 /* Resources */, AFCF83401AF5B515008BB7E1 /* Sources */, AFCF83431AF5B515008BB7E1 /* Frameworks */, AFCF834B1AF5B515008BB7E1 /* Rez */, AFCF834C1AF5B515008BB7E1 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFCF833C1AF5B515008BB7E1 /* PBXTargetDependency */, ); name = SplitFlap; productName = DangerBall; productReference = AFCF83501AF5B515008BB7E1 /* SplitFlap.saver */; productType = "com.apple.product-type.bundle"; }; AFD51B1B0F063B4A00471C02 /* Photopile */ = { isa = PBXNativeTarget; buildConfigurationList = AFD51B2D0F063B4A00471C02 /* Build configuration list for PBXNativeTarget "Photopile" */; buildPhases = ( AFD51B1E0F063B4A00471C02 /* Resources */, AFD51B210F063B4A00471C02 /* Sources */, AFD51B240F063B4A00471C02 /* Frameworks */, AFD51B2B0F063B4A00471C02 /* Rez */, AFD51B2C0F063B4A00471C02 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD51B1C0F063B4A00471C02 /* PBXTargetDependency */, ); name = Photopile; productName = Photopile; productReference = AFD51B300F063B4A00471C02 /* Photopile.saver */; productType = "com.apple.product-type.bundle"; }; AFD56DF10996A03800BA26F7 /* GLText */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56E010996A03800BA26F7 /* Build configuration list for PBXNativeTarget "GLText" */; buildPhases = ( AFD56DF40996A03800BA26F7 /* Resources */, AFD56DF60996A03800BA26F7 /* Sources */, AFD56DF90996A03800BA26F7 /* Frameworks */, AFD56E000996A03800BA26F7 /* Rez */, AFA3D99909C03E2000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56DF20996A03800BA26F7 /* PBXTargetDependency */, ); name = GLText; productName = GLText; productReference = AFD56E040996A03800BA26F7 /* GLText.saver */; productType = "com.apple.product-type.bundle"; }; AFD56EAE0996A72600BA26F7 /* Braid */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56EBB0996A72600BA26F7 /* Build configuration list for PBXNativeTarget "Braid" */; buildPhases = ( AFD56EB10996A72600BA26F7 /* Resources */, AFD56EB30996A72600BA26F7 /* Sources */, AFD56EB60996A72600BA26F7 /* Frameworks */, AFD56EBA0996A72600BA26F7 /* Rez */, AFA3D90709C03D0B00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56EAF0996A72600BA26F7 /* PBXTargetDependency */, ); name = Braid; productName = Braid; productReference = AFD56EBE0996A72600BA26F7 /* Braid.saver */; productType = "com.apple.product-type.bundle"; }; AFD56EDA0996A95700BA26F7 /* Forest */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56EE70996A95700BA26F7 /* Build configuration list for PBXNativeTarget "Forest" */; buildPhases = ( AFD56EDD0996A95700BA26F7 /* Resources */, AFD56EDF0996A95700BA26F7 /* Sources */, AFD56EE20996A95700BA26F7 /* Frameworks */, AFD56EE60996A95700BA26F7 /* Rez */, AFA3D91D09C03D3000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56EDB0996A95700BA26F7 /* PBXTargetDependency */, ); name = Forest; productName = Forest; productReference = AFD56EEA0996A95700BA26F7 /* Forest.saver */; productType = "com.apple.product-type.bundle"; }; AFD56F0B0996AAFA00BA26F7 /* Vines */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56F180996AAFA00BA26F7 /* Build configuration list for PBXNativeTarget "Vines" */; buildPhases = ( AFD56F0E0996AAFA00BA26F7 /* Resources */, AFD56F100996AAFA00BA26F7 /* Sources */, AFD56F130996AAFA00BA26F7 /* Frameworks */, AFD56F170996AAFA00BA26F7 /* Rez */, AFA3D94909C03D8100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56F0C0996AAFA00BA26F7 /* PBXTargetDependency */, ); name = Vines; productName = Vines; productReference = AFD56F1B0996AAFA00BA26F7 /* Vines.saver */; productType = "com.apple.product-type.bundle"; }; AFD56F230996AB8A00BA26F7 /* Galaxy */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56F300996AB8A00BA26F7 /* Build configuration list for PBXNativeTarget "Galaxy" */; buildPhases = ( AFD56F260996AB8A00BA26F7 /* Resources */, AFD56F280996AB8A00BA26F7 /* Sources */, AFD56F2B0996AB8A00BA26F7 /* Frameworks */, AFD56F2F0996AB8A00BA26F7 /* Rez */, AFA3D91F09C03D3300E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56F240996AB8A00BA26F7 /* PBXTargetDependency */, ); name = Galaxy; productName = Galaxy; productReference = AFD56F330996AB8A00BA26F7 /* Galaxy.saver */; productType = "com.apple.product-type.bundle"; }; AFD56F4F0996AEEE00BA26F7 /* Grav */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56F5C0996AEEE00BA26F7 /* Build configuration list for PBXNativeTarget "Grav" */; buildPhases = ( AFD56F520996AEEE00BA26F7 /* Resources */, AFD56F540996AEEE00BA26F7 /* Sources */, AFD56F570996AEEE00BA26F7 /* Frameworks */, AFD56F5B0996AEEE00BA26F7 /* Rez */, AFA3D92109C03D3600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56F500996AEEE00BA26F7 /* PBXTargetDependency */, ); name = Grav; productName = Grav; productReference = AFD56F5F0996AEEE00BA26F7 /* Grav.saver */; productType = "com.apple.product-type.bundle"; }; AFD56F6B0996B01600BA26F7 /* Hopalong */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56F780996B01600BA26F7 /* Build configuration list for PBXNativeTarget "Hopalong" */; buildPhases = ( AFD56F6E0996B01600BA26F7 /* Resources */, AFD56F700996B01600BA26F7 /* Sources */, AFD56F730996B01600BA26F7 /* Frameworks */, AFD56F770996B01600BA26F7 /* Rez */, AFA3D92309C03D3A00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56F6C0996B01600BA26F7 /* PBXTargetDependency */, ); name = Hopalong; productName = Hopalong; productReference = AFD56F7B0996B01600BA26F7 /* Hopalong.saver */; productType = "com.apple.product-type.bundle"; }; AFD56F8C0996B09400BA26F7 /* Laser */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56F990996B09400BA26F7 /* Build configuration list for PBXNativeTarget "Laser" */; buildPhases = ( AFD56F8F0996B09400BA26F7 /* Resources */, AFD56F910996B09400BA26F7 /* Sources */, AFD56F940996B09400BA26F7 /* Frameworks */, AFD56F980996B09400BA26F7 /* Rez */, AFA3D92909C03D4400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56F8D0996B09400BA26F7 /* PBXTargetDependency */, ); name = Laser; productName = Laser; productReference = AFD56F9C0996B09400BA26F7 /* Laser.saver */; productType = "com.apple.product-type.bundle"; }; AFD56FA30996B10F00BA26F7 /* Lightning */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56FB00996B10F00BA26F7 /* Build configuration list for PBXNativeTarget "Lightning" */; buildPhases = ( AFD56FA60996B10F00BA26F7 /* Resources */, AFD56FA80996B10F00BA26F7 /* Sources */, AFD56FAB0996B10F00BA26F7 /* Frameworks */, AFD56FAF0996B10F00BA26F7 /* Rez */, AFA3D92B09C03D4700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56FA40996B10F00BA26F7 /* PBXTargetDependency */, ); name = Lightning; productName = Lightning; productReference = AFD56FB30996B10F00BA26F7 /* Lightning.saver */; productType = "com.apple.product-type.bundle"; }; AFD56FB90996B18F00BA26F7 /* Lisa */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56FC60996B18F00BA26F7 /* Build configuration list for PBXNativeTarget "Lisa" */; buildPhases = ( AFD56FBC0996B18F00BA26F7 /* Resources */, AFD56FBE0996B18F00BA26F7 /* Sources */, AFD56FC10996B18F00BA26F7 /* Frameworks */, AFD56FC50996B18F00BA26F7 /* Rez */, AFA3D92D09C03D4A00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56FBA0996B18F00BA26F7 /* PBXTargetDependency */, ); name = Lisa; productName = Lisa; productReference = AFD56FC90996B18F00BA26F7 /* Lisa.saver */; productType = "com.apple.product-type.bundle"; }; AFD56FCF0996B20900BA26F7 /* Lissie */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56FDC0996B20900BA26F7 /* Build configuration list for PBXNativeTarget "Lissie" */; buildPhases = ( AFD56FD20996B20900BA26F7 /* Resources */, AFD56FD40996B20900BA26F7 /* Sources */, AFD56FD70996B20900BA26F7 /* Frameworks */, AFD56FDB0996B20900BA26F7 /* Rez */, AFA3D92F09C03D4E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56FD00996B20900BA26F7 /* PBXTargetDependency */, ); name = Lissie; productName = Lissie; productReference = AFD56FDF0996B20900BA26F7 /* Lissie.saver */; productType = "com.apple.product-type.bundle"; }; AFD56FF80996B43800BA26F7 /* Penrose */ = { isa = PBXNativeTarget; buildConfigurationList = AFD570050996B43800BA26F7 /* Build configuration list for PBXNativeTarget "Penrose" */; buildPhases = ( AFD56FFB0996B43800BA26F7 /* Resources */, AFD56FFD0996B43800BA26F7 /* Sources */, AFD570000996B43800BA26F7 /* Frameworks */, AFD570040996B43800BA26F7 /* Rez */, AFA3D93709C03D5B00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56FF90996B43800BA26F7 /* PBXTargetDependency */, ); name = Penrose; productName = Penrose; productReference = AFD570080996B43800BA26F7 /* Penrose.saver */; productType = "com.apple.product-type.bundle"; }; AFD5700F0996B4CC00BA26F7 /* Sierpinski */ = { isa = PBXNativeTarget; buildConfigurationList = AFD5701C0996B4CC00BA26F7 /* Build configuration list for PBXNativeTarget "Sierpinski" */; buildPhases = ( AFD570120996B4CC00BA26F7 /* Resources */, AFD570140996B4CC00BA26F7 /* Sources */, AFD570170996B4CC00BA26F7 /* Frameworks */, AFD5701B0996B4CC00BA26F7 /* Rez */, AFA3DBA209C0424C00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD570100996B4CC00BA26F7 /* PBXTargetDependency */, ); name = Sierpinski; productName = Sierpinski; productReference = AFD5701F0996B4CC00BA26F7 /* Sierpinski.saver */; productType = "com.apple.product-type.bundle"; }; AFD570260996B56D00BA26F7 /* Sphere */ = { isa = PBXNativeTarget; buildConfigurationList = AFD570330996B56D00BA26F7 /* Build configuration list for PBXNativeTarget "Sphere" */; buildPhases = ( AFD570290996B56D00BA26F7 /* Resources */, AFD5702B0996B56D00BA26F7 /* Sources */, AFD5702E0996B56D00BA26F7 /* Frameworks */, AFD570320996B56D00BA26F7 /* Rez */, AFA3D93D09C03D6C00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD570270996B56D00BA26F7 /* PBXTargetDependency */, ); name = Sphere; productName = Sphere; productReference = AFD570360996B56D00BA26F7 /* Sphere.saver */; productType = "com.apple.product-type.bundle"; }; AFD570430996B61600BA26F7 /* Spiral */ = { isa = PBXNativeTarget; buildConfigurationList = AFD570500996B61600BA26F7 /* Build configuration list for PBXNativeTarget "Spiral" */; buildPhases = ( AFD570460996B61600BA26F7 /* Resources */, AFD570480996B61600BA26F7 /* Sources */, AFD5704B0996B61600BA26F7 /* Frameworks */, AFD5704F0996B61600BA26F7 /* Rez */, AFA3D93F09C03D6F00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD570440996B61600BA26F7 /* PBXTargetDependency */, ); name = Spiral; productName = Spiral; productReference = AFD570530996B61600BA26F7 /* Spiral.saver */; productType = "com.apple.product-type.bundle"; }; AFD570590996B6A300BA26F7 /* FadePlot */ = { isa = PBXNativeTarget; buildConfigurationList = AFD570660996B6A300BA26F7 /* Build configuration list for PBXNativeTarget "FadePlot" */; buildPhases = ( AFD5705C0996B6A300BA26F7 /* Resources */, AFD5705E0996B6A300BA26F7 /* Sources */, AFD570610996B6A300BA26F7 /* Frameworks */, AFD570650996B6A300BA26F7 /* Rez */, AFA3D91309C03D1E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD5705A0996B6A300BA26F7 /* PBXTargetDependency */, ); name = FadePlot; productName = FadePlot; productReference = AFD570690996B6A300BA26F7 /* FadePlot.saver */; productType = "com.apple.product-type.bundle"; }; AFD5706F0996B72700BA26F7 /* Mountain */ = { isa = PBXNativeTarget; buildConfigurationList = AFD5707C0996B72700BA26F7 /* Build configuration list for PBXNativeTarget "Mountain" */; buildPhases = ( AFD570720996B72700BA26F7 /* Resources */, AFD570740996B72700BA26F7 /* Sources */, AFD570770996B72700BA26F7 /* Frameworks */, AFD5707B0996B72700BA26F7 /* Rez */, AFA3D93309C03D5400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD570700996B72700BA26F7 /* PBXTargetDependency */, ); name = Mountain; productName = Mountain; productReference = AFD5707F0996B72800BA26F7 /* Mountain.saver */; productType = "com.apple.product-type.bundle"; }; AFD570850996B80300BA26F7 /* Triangle */ = { isa = PBXNativeTarget; buildConfigurationList = AFD570920996B80300BA26F7 /* Build configuration list for PBXNativeTarget "Triangle" */; buildPhases = ( AFD570880996B80300BA26F7 /* Resources */, AFD5708A0996B80300BA26F7 /* Sources */, AFD5708D0996B80300BA26F7 /* Frameworks */, AFD570910996B80300BA26F7 /* Rez */, AFA3D94709C03D7E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD570860996B80300BA26F7 /* PBXTargetDependency */, ); name = Triangle; productName = Triangle; productReference = AFD570950996B80300BA26F7 /* Triangle.saver */; productType = "com.apple.product-type.bundle"; }; AFD5709B0996B88E00BA26F7 /* Worm */ = { isa = PBXNativeTarget; buildConfigurationList = AFD570A80996B88E00BA26F7 /* Build configuration list for PBXNativeTarget "Worm" */; buildPhases = ( AFD5709E0996B88E00BA26F7 /* Resources */, AFD570A00996B88E00BA26F7 /* Sources */, AFD570A30996B88E00BA26F7 /* Frameworks */, AFD570A70996B88E00BA26F7 /* Rez */, AFA3D94B09C03D8500E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD5709C0996B88E00BA26F7 /* PBXTargetDependency */, ); name = Worm; productName = Worm; productReference = AFD570AB0996B88E00BA26F7 /* Worm.saver */; productType = "com.apple.product-type.bundle"; }; AFD570B10996B93000BA26F7 /* Rotor */ = { isa = PBXNativeTarget; buildConfigurationList = AFD570BE0996B93000BA26F7 /* Build configuration list for PBXNativeTarget "Rotor" */; buildPhases = ( AFD570B40996B93000BA26F7 /* Resources */, AFD570B60996B93000BA26F7 /* Sources */, AFD570B90996B93000BA26F7 /* Frameworks */, AFD570BD0996B93000BA26F7 /* Rez */, AFA3D93B09C03D6200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD570B20996B93000BA26F7 /* PBXTargetDependency */, ); name = Rotor; productName = Rotor; productReference = AFD570C10996B93000BA26F7 /* Rotor.saver */; productType = "com.apple.product-type.bundle"; }; AFD570C90996B9F800BA26F7 /* Ant */ = { isa = PBXNativeTarget; buildConfigurationList = AFD570D60996B9F800BA26F7 /* Build configuration list for PBXNativeTarget "Ant" */; buildPhases = ( AFD570CC0996B9F800BA26F7 /* Resources */, AFD570CE0996B9F800BA26F7 /* Sources */, AFD570D10996B9F800BA26F7 /* Frameworks */, AFD570D50996B9F800BA26F7 /* Rez */, AFA3D90109C03D0000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD570CA0996B9F800BA26F7 /* PBXTargetDependency */, ); name = Ant; productName = Ant; productReference = AFD570D90996B9F800BA26F7 /* Ant.saver */; productType = "com.apple.product-type.bundle"; }; AFD570EA0996BBBF00BA26F7 /* Flow */ = { isa = PBXNativeTarget; buildConfigurationList = AFD570F70996BBBF00BA26F7 /* Build configuration list for PBXNativeTarget "Flow" */; buildPhases = ( AFD570ED0996BBBF00BA26F7 /* Resources */, AFD570EF0996BBBF00BA26F7 /* Sources */, AFD570F20996BBBF00BA26F7 /* Frameworks */, AFD570F60996BBBF00BA26F7 /* Rez */, AFA3D91909C03D2700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD570EB0996BBBF00BA26F7 /* PBXTargetDependency */, ); name = Flow; productName = Flow; productReference = AFD570FA0996BBBF00BA26F7 /* Flow.saver */; productType = "com.apple.product-type.bundle"; }; AFD571130996BE9300BA26F7 /* Discrete */ = { isa = PBXNativeTarget; buildConfigurationList = AFD571200996BE9300BA26F7 /* Build configuration list for PBXNativeTarget "Discrete" */; buildPhases = ( AFD571160996BE9300BA26F7 /* Resources */, AFD571180996BE9300BA26F7 /* Sources */, AFD5711B0996BE9300BA26F7 /* Frameworks */, AFD5711F0996BE9300BA26F7 /* Rez */, AFA3D90D09C03D1400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD571140996BE9300BA26F7 /* PBXTargetDependency */, ); name = Discrete; productName = Discrete; productReference = AFD571230996BE9300BA26F7 /* Discrete.saver */; productType = "com.apple.product-type.bundle"; }; AFD5712C0996BF2E00BA26F7 /* Apollonian */ = { isa = PBXNativeTarget; buildConfigurationList = AFD571390996BF2E00BA26F7 /* Build configuration list for PBXNativeTarget "Apollonian" */; buildPhases = ( AFD5712F0996BF2E00BA26F7 /* Resources */, AFD571310996BF2E00BA26F7 /* Sources */, AFD571340996BF2E00BA26F7 /* Frameworks */, AFD571380996BF2E00BA26F7 /* Rez */, AFA3D90309C03D0400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD5712D0996BF2E00BA26F7 /* PBXTargetDependency */, ); name = Apollonian; productName = Apollonian; productReference = AFD5713C0996BF2E00BA26F7 /* Apollonian.saver */; productType = "com.apple.product-type.bundle"; }; AFD571430996C01700BA26F7 /* Euler2D */ = { isa = PBXNativeTarget; buildConfigurationList = AFD571500996C01700BA26F7 /* Build configuration list for PBXNativeTarget "Euler2D" */; buildPhases = ( AFD571460996C01700BA26F7 /* Resources */, AFD571480996C01700BA26F7 /* Sources */, AFD5714B0996C01700BA26F7 /* Frameworks */, AFD5714F0996C01700BA26F7 /* Rez */, AFA3D91109C03D1B00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD571440996C01700BA26F7 /* PBXTargetDependency */, ); name = Euler2D; productName = Euler2D; productReference = AFD571530996C01700BA26F7 /* Euler2D.saver */; productType = "com.apple.product-type.bundle"; }; AFD571590996C0CE00BA26F7 /* Thornbird */ = { isa = PBXNativeTarget; buildConfigurationList = AFD571660996C0CE00BA26F7 /* Build configuration list for PBXNativeTarget "Thornbird" */; buildPhases = ( AFD5715C0996C0CE00BA26F7 /* Resources */, AFD5715E0996C0CE00BA26F7 /* Sources */, AFD571610996C0CE00BA26F7 /* Frameworks */, AFD571650996C0CE00BA26F7 /* Rez */, AFA3D94509C03D7A00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD5715A0996C0CE00BA26F7 /* PBXTargetDependency */, ); name = Thornbird; productName = Thornbird; productReference = AFD571690996C0CE00BA26F7 /* Thornbird.saver */; productType = "com.apple.product-type.bundle"; }; AFD571B50996D9DC00BA26F7 /* Juggle */ = { isa = PBXNativeTarget; buildConfigurationList = AFD571C20996D9DC00BA26F7 /* Build configuration list for PBXNativeTarget "Juggle" */; buildPhases = ( AFD571B80996D9DC00BA26F7 /* Resources */, AFD571BA0996D9DC00BA26F7 /* Sources */, AFD571BD0996D9DC00BA26F7 /* Frameworks */, AFD571C10996D9DC00BA26F7 /* Rez */, AFA3D92509C03D3D00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD571B60996D9DC00BA26F7 /* PBXTargetDependency */, ); name = Juggle; productName = Juggle; productReference = AFD571C50996D9DC00BA26F7 /* Juggle.saver */; productType = "com.apple.product-type.bundle"; }; AFD572220996E4A300BA26F7 /* Swirl */ = { isa = PBXNativeTarget; buildConfigurationList = AFD5722F0996E4A300BA26F7 /* Build configuration list for PBXNativeTarget "Swirl" */; buildPhases = ( AFD572250996E4A300BA26F7 /* Resources */, AFD572270996E4A300BA26F7 /* Sources */, AFD5722A0996E4A300BA26F7 /* Frameworks */, AFD5722E0996E4A300BA26F7 /* Rez */, AFA3D94309C03D7600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD572230996E4A300BA26F7 /* PBXTargetDependency */, ); name = Swirl; productName = Swirl; productReference = AFD572320996E4A300BA26F7 /* Swirl.saver */; productType = "com.apple.product-type.bundle"; }; AFD5726D0996EE8500BA26F7 /* Polyominoes */ = { isa = PBXNativeTarget; buildConfigurationList = AFD5727A0996EE8500BA26F7 /* Build configuration list for PBXNativeTarget "Polyominoes" */; buildPhases = ( AFD572700996EE8500BA26F7 /* Resources */, AFD572720996EE8500BA26F7 /* Sources */, AFD572750996EE8500BA26F7 /* Frameworks */, AFD572790996EE8500BA26F7 /* Rez */, AFA3D93909C03D5E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD5726E0996EE8500BA26F7 /* PBXTargetDependency */, ); name = Polyominoes; productName = Polyominoes; productReference = AFD5727D0996EE8500BA26F7 /* Polyominoes.saver */; productType = "com.apple.product-type.bundle"; }; AFD572A50996F99600BA26F7 /* Bouboule */ = { isa = PBXNativeTarget; buildConfigurationList = AFD572B20996F99600BA26F7 /* Build configuration list for PBXNativeTarget "Bouboule" */; buildPhases = ( AFD572A80996F99600BA26F7 /* Resources */, AFD572AA0996F99600BA26F7 /* Sources */, AFD572AD0996F99600BA26F7 /* Frameworks */, AFD572B10996F99600BA26F7 /* Rez */, AFA3D90509C03D0700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD572A60996F99600BA26F7 /* PBXTargetDependency */, ); name = Bouboule; productName = Bouboule; productReference = AFD572B50996F99600BA26F7 /* Bouboule.saver */; productType = "com.apple.product-type.bundle"; }; AFD572C20996FC0F00BA26F7 /* Crystal */ = { isa = PBXNativeTarget; buildConfigurationList = AFD572CF0996FC0F00BA26F7 /* Build configuration list for PBXNativeTarget "Crystal" */; buildPhases = ( AFD572C50996FC0F00BA26F7 /* Resources */, AFD572C70996FC0F00BA26F7 /* Sources */, AFD572CA0996FC0F00BA26F7 /* Frameworks */, AFD572CE0996FC0F00BA26F7 /* Rez */, AFA3D90909C03D0E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD572C30996FC0F00BA26F7 /* PBXTargetDependency */, ); name = Crystal; productName = Crystal; productReference = AFD572D20996FC0F00BA26F7 /* Crystal.saver */; productType = "com.apple.product-type.bundle"; }; AFD572F9099701C000BA26F7 /* Julia */ = { isa = PBXNativeTarget; buildConfigurationList = AFD57306099701C000BA26F7 /* Build configuration list for PBXNativeTarget "Julia" */; buildPhases = ( AFD572FC099701C000BA26F7 /* Resources */, AFD572FE099701C000BA26F7 /* Sources */, AFD57301099701C000BA26F7 /* Frameworks */, AFD57305099701C000BA26F7 /* Rez */, AFA3D92709C03D4000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD572FA099701C000BA26F7 /* PBXTargetDependency */, ); name = Julia; productName = Julia; productReference = AFD57309099701C000BA26F7 /* Julia.saver */; productType = "com.apple.product-type.bundle"; }; AFD5735D0997411200BA26F7 /* Strange */ = { isa = PBXNativeTarget; buildConfigurationList = AFD5736A0997411200BA26F7 /* Build configuration list for PBXNativeTarget "Strange" */; buildPhases = ( AFD573600997411200BA26F7 /* Resources */, AFD573620997411200BA26F7 /* Sources */, AFD573650997411200BA26F7 /* Frameworks */, AFD573690997411200BA26F7 /* Rez */, AFA3D94109C03D7200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD5735E0997411200BA26F7 /* PBXTargetDependency */, ); name = Strange; productName = Strange; productReference = AFD5736D0997411200BA26F7 /* Strange.saver */; productType = "com.apple.product-type.bundle"; }; AFDA658E178A52B70070D24B /* Unknown Pleasures */ = { isa = PBXNativeTarget; buildConfigurationList = AFDA659E178A52B70070D24B /* Build configuration list for PBXNativeTarget "Unknown Pleasures" */; buildPhases = ( AFDA6591178A52B70070D24B /* Resources */, AFDA6593178A52B70070D24B /* Sources */, AFDA6596178A52B70070D24B /* Frameworks */, AFDA659C178A52B70070D24B /* Rez */, AFDA659D178A52B70070D24B /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFDA658F178A52B70070D24B /* PBXTargetDependency */, ); name = "Unknown Pleasures"; productName = DangerBall; productReference = AFDA65A1178A52B70070D24B /* UnknownPleasures.saver */; productType = "com.apple.product-type.bundle"; }; AFE2A4560E2E904600ADB298 /* SkyTentacles */ = { isa = PBXNativeTarget; buildConfigurationList = AFE2A4670E2E904600ADB298 /* Build configuration list for PBXNativeTarget "SkyTentacles" */; buildPhases = ( AFE2A4590E2E904600ADB298 /* Resources */, AFE2A45B0E2E904600ADB298 /* Sources */, AFE2A45E0E2E904600ADB298 /* Frameworks */, AFE2A4650E2E904600ADB298 /* Rez */, AFE2A4660E2E904600ADB298 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFE2A4570E2E904600ADB298 /* PBXTargetDependency */, ); name = SkyTentacles; productName = SkyTentacles; productReference = AFE2A46A0E2E904600ADB298 /* SkyTentacles.saver */; productType = "com.apple.product-type.bundle"; }; AFE30BE80E52B14700CCF4A5 /* Sonar */ = { isa = PBXNativeTarget; buildConfigurationList = AFE30BF90E52B14700CCF4A5 /* Build configuration list for PBXNativeTarget "Sonar" */; buildPhases = ( AF7E08021592661100D81407 /* ICMP Sanity Check */, AFE30BEB0E52B14700CCF4A5 /* Resources */, AFE30BED0E52B14700CCF4A5 /* Sources */, AFE30BF00E52B14700CCF4A5 /* Frameworks */, AFE30BF70E52B14700CCF4A5 /* Rez */, AFE30BF80E52B14700CCF4A5 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFE30BE90E52B14700CCF4A5 /* PBXTargetDependency */, ); name = Sonar; productName = Sonar; productReference = AFE30BFC0E52B14700CCF4A5 /* Sonar.saver */; productType = "com.apple.product-type.bundle"; }; AFE6A1820CDD7B2E002805BF /* MoebiusGears */ = { isa = PBXNativeTarget; buildConfigurationList = AFE6A1940CDD7B2E002805BF /* Build configuration list for PBXNativeTarget "MoebiusGears" */; buildPhases = ( AFE6A1850CDD7B2E002805BF /* Resources */, AFE6A1870CDD7B2E002805BF /* Sources */, AFE6A18B0CDD7B2E002805BF /* Frameworks */, AFE6A1920CDD7B2E002805BF /* Rez */, AFE6A1930CDD7B2E002805BF /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFE6A1830CDD7B2E002805BF /* PBXTargetDependency */, ); name = MoebiusGears; productName = MoebiusGears; productReference = AFE6A1970CDD7B2E002805BF /* MoebiusGears.saver */; productType = "com.apple.product-type.bundle"; }; AFE6A41B0CDD7FAA002805BF /* Abstractile */ = { isa = PBXNativeTarget; buildConfigurationList = AFE6A42A0CDD7FAA002805BF /* Build configuration list for PBXNativeTarget "Abstractile" */; buildPhases = ( AFE6A41E0CDD7FAA002805BF /* Resources */, AFE6A4210CDD7FAA002805BF /* Sources */, AFE6A4240CDD7FAA002805BF /* Frameworks */, AFE6A4280CDD7FAA002805BF /* Rez */, AFE6A4290CDD7FAA002805BF /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFE6A41C0CDD7FAA002805BF /* PBXTargetDependency */, ); name = Abstractile; productName = Abstractile; productReference = AFE6A42D0CDD7FAA002805BF /* Abstractile.saver */; productType = "com.apple.product-type.bundle"; }; AFF2867F17860E830050A578 /* QuasiCrystal */ = { isa = PBXNativeTarget; buildConfigurationList = AFF2868F17860E830050A578 /* Build configuration list for PBXNativeTarget "QuasiCrystal" */; buildPhases = ( AFF2868217860E830050A578 /* Resources */, AFF2868417860E830050A578 /* Sources */, AFF2868717860E830050A578 /* Frameworks */, AFF2868D17860E830050A578 /* Rez */, AFF2868E17860E830050A578 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFF2868017860E830050A578 /* PBXTargetDependency */, ); name = QuasiCrystal; productName = DangerBall; productReference = AFF2869217860E830050A578 /* QuasiCrystal.saver */; productType = "com.apple.product-type.bundle"; }; AFF3C9E817CCAC440028F240 /* Geodesic */ = { isa = PBXNativeTarget; buildConfigurationList = AFF3C9F817CCAC440028F240 /* Build configuration list for PBXNativeTarget "Geodesic" */; buildPhases = ( AFF3C9EB17CCAC440028F240 /* Resources */, AFF3C9ED17CCAC440028F240 /* Sources */, AFF3C9F017CCAC440028F240 /* Frameworks */, AFF3C9F617CCAC440028F240 /* Rez */, AFF3C9F717CCAC440028F240 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFF3C9E917CCAC440028F240 /* PBXTargetDependency */, ); name = Geodesic; productName = DangerBall; productReference = AFF3C9FB17CCAC440028F240 /* Geodesic.saver */; productType = "com.apple.product-type.bundle"; }; AFF463360C4403E400EE6509 /* CWaves */ = { isa = PBXNativeTarget; buildConfigurationList = AFF463440C4403E400EE6509 /* Build configuration list for PBXNativeTarget "CWaves" */; buildPhases = ( AFF463390C4403E400EE6509 /* Resources */, AFF4633B0C4403E400EE6509 /* Sources */, AFF4633E0C4403E400EE6509 /* Frameworks */, AFF463420C4403E400EE6509 /* Rez */, AFF463430C4403E400EE6509 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFF463370C4403E400EE6509 /* PBXTargetDependency */, ); name = CWaves; productName = CWaves; productReference = AFF463470C4403E400EE6509 /* CWaves.saver */; productType = "com.apple.product-type.bundle"; }; AFF463580C440AEF00EE6509 /* GLCells */ = { isa = PBXNativeTarget; buildConfigurationList = AFF463690C440AEF00EE6509 /* Build configuration list for PBXNativeTarget "GLCells" */; buildPhases = ( AFF4635B0C440AEF00EE6509 /* Resources */, AFF4635D0C440AEF00EE6509 /* Sources */, AFF463600C440AEF00EE6509 /* Frameworks */, AFF463670C440AEF00EE6509 /* Rez */, AFF463680C440AEF00EE6509 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFF463590C440AEF00EE6509 /* PBXTargetDependency */, ); name = GLCells; productName = GLCells; productReference = AFF4636C0C440AEF00EE6509 /* GLCells.saver */; productType = "com.apple.product-type.bundle"; }; AFFAB31519158CE40020F021 /* ProjectivePlane */ = { isa = PBXNativeTarget; buildConfigurationList = AFFAB32619158CE40020F021 /* Build configuration list for PBXNativeTarget "ProjectivePlane" */; buildPhases = ( AFFAB31819158CE40020F021 /* Resources */, AFFAB31A19158CE40020F021 /* Sources */, AFFAB31D19158CE40020F021 /* Frameworks */, AFFAB32419158CE40020F021 /* Rez */, AFFAB32519158CE40020F021 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFFAB31619158CE40020F021 /* PBXTargetDependency */, ); name = ProjectivePlane; productName = DangerBall; productReference = AFFAB32919158CE40020F021 /* ProjectivePlane.saver */; productType = "com.apple.product-type.bundle"; }; CE3D01511B76F4C100993C75 /* TestX11 */ = { isa = PBXNativeTarget; buildConfigurationList = CE3D01631B76F4C100993C75 /* Build configuration list for PBXNativeTarget "TestX11" */; buildPhases = ( CE3D01541B76F4C100993C75 /* Resources */, CE3D01561B76F4C100993C75 /* Sources */, CE3D01591B76F4C100993C75 /* Frameworks */, CE3D01611B76F4C100993C75 /* Rez */, CE3D01621B76F4C100993C75 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( CE3D01521B76F4C100993C75 /* PBXTargetDependency */, ); name = TestX11; productName = Attraction; productReference = CE3D01661B76F4C100993C75 /* TestX11.saver */; productType = "com.apple.product-type.bundle"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; attributes = { LastUpgradeCheck = 0620; TargetAttributes = { AF918977158FC00A002B5D1E = { DevelopmentTeam = 4627ATJELP; }; }; }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "xscreensaver" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 1; knownRegions = ( English, Japanese, French, German, en, Base, ); mainGroup = 29B97314FDCFA39411CA2CEA /* xscreensaver */; projectDirPath = ""; projectRoot = ""; targets = ( AF480D5A098EED5E00FB32B8 /* All Savers */, AF4808C0098C3B6C00FB32B8 /* jwxyz */, AF480AAF098C669800FB32B8 /* All Savers (XScreenSaver) */, AFE6A41B0CDD7FAA002805BF /* Abstractile */, AF47721E099D4F67001F091E /* Anemone */, AF4773C1099D67B9001F091E /* Anemotaxis */, AF9D4DEC09B5BB19006E59CF /* Apple2 */, AF2D4F6A13E91093002AA818 /* Apple2-iOS */, AFBFE74B178642DC00432B21 /* Apple2-OSX */, AF9770660989D2F6001F8B92 /* Attraction */, AF975A86099C6BC300B05160 /* Barcode */, AF73FF221A09877F00E485E9 /* BinaryRing */, AF47768F099DAA6F001F091E /* Blaster */, AF7778A509B659C800EA3033 /* BlitSpin */, AF4777D1099DC183001F091E /* BoxFit */, AF9D4DAF09B5B71E006E59CF /* BSOD */, AF9D48DB09B53322006E59CF /* Bumps */, AF4771DB099D4D9A001F091E /* CCurve */, AF477774099DB965001F091E /* Celtic */, AF47770D099DAF9F001F091E /* CloudLife */, AF477169099D4786001F091E /* Compass */, AF4775D8099D9F69001F091E /* Coral */, AFF463360C4403E400EE6509 /* CWaves */, AF4778E8099DDDC8001F091E /* Cynosure */, AF9D466609B5109C006E59CF /* DecayScreen */, AF976FBB0989CAA2001F8B92 /* Deco */, AF47704C099D4385001F091E /* Deluxe */, AF9D48F409B535DA006E59CF /* Distort */, AF4775F2099DA030001F091E /* Epicycle */, AF975A6C099C6AB200B05160 /* Eruption */, AF975AD7099C6EB100B05160 /* Fireworkx */, AF477483099D89E4001F091E /* Flame */, AF477790099DBA90001F091E /* FluidBalls */, AF77787F09B6563500EA3033 /* FontGlide */, AF47739A099D6648001F091E /* FuzzyFlakes */, AF64267B09A194B0000F4CD4 /* Goop */, AF975C3D099C8DCF00B05160 /* Greynetic */, AF477253099D5717001F091E /* Halftone */, AF975C12099C8C1500B05160 /* Halo */, AF480C49098E301400FB32B8 /* Helix */, AFB591A7178B812C00EA4005 /* Hexadrop */, AF477426099D7C70001F091E /* IFS */, AF97572D099C317000B05160 /* IMSMap */, AF477752099DB61E001F091E /* Interaggregate */, AF476FB5099D154F001F091E /* Interference */, AF477401099D69E7001F091E /* Intermomentary */, AF477499099D8A74001F091E /* Kaleidescope */, AF477613099DA26C001F091E /* Kumppa */, AF1A17610D6D6EE3008AF328 /* LCDscrub */, AF4FF4930D52CA0800666F98 /* m6502.h */, AF0DC7AB0C4C73F600D76972 /* m6502 */, AF4774CE099D8BFF001F091E /* Maze */, AF975AFC099C6FE400B05160 /* MemScroller */, AF975A36099C681F00B05160 /* MetaBalls */, AF975775099C374A00B05160 /* Moire */, AF64262C09A18F54000F4CD4 /* Moire2 */, AF64264F09A19229000F4CD4 /* Munch */, AF4771F2099D4E63001F091E /* NerveRot */, AF975C5D099C8F3F00B05160 /* NoseGuy */, AF47755D099D9A1A001F091E /* Pedal */, AF4778AB099DDB79001F091E /* Penetrate */, AF477670099DA849001F091E /* Petri */, AF7776E409B63ABF00EA3033 /* Phosphor */, AF2D4D7F13E902F5002AA818 /* Phosphor-iOS */, AFBFE767178647FE00432B21 /* Phosphor-OSX */, AF477283099D5926001F091E /* Piecewise */, AF9D4CE709B5AA8E006E59CF /* Pong */, AF47726B099D57B9001F091E /* PopSquares */, AF477583099D9C28001F091E /* Pyro */, AF6425EC09A189EC000F4CD4 /* Qix */, AF9757C2099C3E6300B05160 /* RDbomb */, AF9D492B09B53CBA006E59CF /* Ripples */, AF975D52099CA0F000B05160 /* Rocks */, AF9770290989D1E6001F8B92 /* Rorschach */, AF9D495409B53FC9006E59CF /* RotZoomer */, AF975865099C475900B05160 /* ShadeBobs */, AF9D474409B5300A006E59CF /* SlideScreen */, AF47792A099DE4C7001F091E /* Slip */, AF64277109A1D37A000F4CD4 /* SpeedMine */, AF9D499709B544C2006E59CF /* Spotlight */, AF477644099DA6D0001F091E /* Squiral */, AF47759F099D9CF7001F091E /* Starfish */, AF477723099DB044001F091E /* Substrate */, AF68A47E19196CF800D41CD1 /* Tessellimage */, CE3D01511B76F4C100993C75 /* TestX11 */, AF476FDA099D1686001F091E /* Truchet */, AF9D496C09B5411D006E59CF /* Twang */, AF4776F1099DAE7A001F091E /* Vermiculate */, AF47717F099D4803001F091E /* Wander */, AFA3392E0B058505002B0E7D /* WebCollage */, AFA33C020B058E17002B0E7D /* webcollage-perl */, AFA33BC60B058740002B0E7D /* webcollage-helper */, AF4776DB099DADDF001F091E /* WhirlWindWarp */, AF477382099D65A1001F091E /* Wormhole */, AF975808099C41D500B05160 /* XFlame */, AF9D4D7E09B5B2DC006E59CF /* XAnalogTV */, AF4778C7099DDCAE001F091E /* XJack */, AF9D4C6909B59F27006E59CF /* XLyap */, AF477442099D7D33001F091E /* XMatrix */, AF4776C0099DAC8A001F091E /* XRaySwarm */, AF4776AA099DABDD001F091E /* XSpirograph */, AF9D475F09B53166006E59CF /* Zoom */, AF480D58098EED3D00FB32B8 /* All Savers (XLockmore) */, AFD5712C0996BF2E00BA26F7 /* Apollonian */, AFD572A50996F99600BA26F7 /* Bouboule */, AFD56EAE0996A72600BA26F7 /* Braid */, AFD572C20996FC0F00BA26F7 /* Crystal */, AF794F64099748450059A8B0 /* Demon */, AFD571130996BE9300BA26F7 /* Discrete */, AF480D72098EEDDE00FB32B8 /* Drift */, AFD571430996C01700BA26F7 /* Euler2D */, AFD570590996B6A300BA26F7 /* FadePlot */, AF794F8E09974A320059A8B0 /* Fiberlamp */, AFD570EA0996BBBF00BA26F7 /* Flow */, AFD56F230996AB8A00BA26F7 /* Galaxy */, AFD56F4F0996AEEE00BA26F7 /* Grav */, AFD56F6B0996B01600BA26F7 /* Hopalong */, AFD572F9099701C000BA26F7 /* Julia */, AF794FCD09974FA60059A8B0 /* Loop */, AFD5706F0996B72700BA26F7 /* Mountain */, AF77771A09B6416100EA3033 /* Pacman */, AFD56FF80996B43800BA26F7 /* Penrose */, AFD5726D0996EE8500BA26F7 /* Polyominoes */, AFD5700F0996B4CC00BA26F7 /* Sierpinski */, AFD5735D0997411200BA26F7 /* Strange */, AFD572220996E4A300BA26F7 /* Swirl */, AFD571590996C0CE00BA26F7 /* Thornbird */, AFD570850996B80300BA26F7 /* Triangle */, AF480D59098EED5100FB32B8 /* All Savers (OpenGL) */, AFA5604A09936E2100F3E977 /* AntInspect */, AFA562DA099393C900F3E977 /* AntMaze */, AFA5606209936F3800F3E977 /* AntSpotlight */, AF08398F09930B6B00277BE9 /* Atlantis */, AF083A32099311D700277BE9 /* Atunnel */, AFA5615609937C0D00F3E977 /* BlinkBox */, AFA5601409936CC800F3E977 /* BlockTube */, AFA562BF099392C600F3E977 /* Boing */, AFA55EC7099360E300F3E977 /* BouncingCow */, AFA55CA909934BB200F3E977 /* Boxed */, AFA55ACF09933CEF00F3E977 /* Bubble3D */, AFA55946099330B000F3E977 /* Cage */, AF77784409B6528100EA3033 /* Carousel */, AFA55BAB099340CE00F3E977 /* Circuit */, AF5C9AF91A0CCE6E00B0147A /* Cityflow */, AF3581BF1431D47B00E09C51 /* CompanionCube */, AFA563130993951000F3E977 /* Crackberg */, AFA56351099396C000F3E977 /* Cube21 */, AFA55D620993584B00F3E977 /* Cubenetic */, AFA55FD309936BFA00F3E977 /* CubeStorm */, AF4FF4BA0D52CBDE00666F98 /* CubicGrid */, AF4810EB09909FBA00FB32B8 /* DangerBall */, AF77786109B6536000EA3033 /* DNAlogo */, AFA55E0D09935EDC00F3E977 /* Endgame */, AFA55C0E0993431300F3E977 /* Engine */, AF6423F2099FF9C2000F4CD4 /* Extrusion */, AFA5603209936D5100F3E977 /* FlipFlop */, AF77773E09B6446500EA3033 /* FlipScreen3D */, AF7777EA09B64E3100EA3033 /* FlipText */, AFA55E4E09935FF900F3E977 /* FlyingToasters */, AF4812500990CE2700FB32B8 /* Gears */, AFF3C9E817CCAC440028F240 /* Geodesic */, AF7ACFC019FF0A9200BD752B /* GeodesicGears */, AFA55B9109933FDA00F3E977 /* GFlux */, AFA55E2F09935F8E00F3E977 /* GLBlur */, AFF463580C440AEF00EE6509 /* GLCells */, AF77777409B6497800EA3033 /* Gleidescope */, AFA56331099395ED00F3E977 /* GLHanoi */, AFA55FF909936C6D00F3E977 /* GLKnots */, AFA55F720993643600F3E977 /* GLMatrix */, AFA55B0909933E0500F3E977 /* GLPlanet */, AF48DEEF0A0C25E000F94CF9 /* GLSchool */, AF7777D009B64C6B00EA3033 /* GLSlideshow */, AFA55C77099349A600F3E977 /* GLSnake */, AFD56DF10996A03800BA26F7 /* GLText */, AF78D175142DD8F3002AAF77 /* Hilbert */, AFA55F420993629000F3E977 /* Hypertorus */, AF3C71450D624BF50030CC0D /* Hypnowheel */, AFA55F06099361B700F3E977 /* JigglyPuff */, AF35E88A0E63823600691F2F /* Jigsaw */, AFA563A4099398BB00F3E977 /* Juggler3D */, AF7510FF1782B5B900380EA1 /* Kaleidocycle */, AFA55F2A0993622F00F3E977 /* Klein */, AFA55A790993364300F3E977 /* Lament */, AFA55DC809935D7000F3E977 /* Lavalite */, AF4FD6E60CE7A486005EE58E /* Lockward */, AFA55BE40993429100F3E977 /* Menger */, AF77778E09B64A5200EA3033 /* MirrorBlob */, AFA5596D0993317900F3E977 /* Moebius */, AFE6A1820CDD7B2E002805BF /* MoebiusGears */, AFA56119099378CB00F3E977 /* molecules.h */, AFA560FD0993781600F3E977 /* Molecule */, AFA559B50993328000F3E977 /* Morph3D */, AFA5617B09937CF100F3E977 /* Noof */, AFD51B1B0F063B4A00471C02 /* Photopile */, AFA5621F0993852500F3E977 /* Pinion */, AF4812B30990D3D900FB32B8 /* Pipes */, AFA5619D09937D7E00F3E977 /* Polyhedra */, AFA560AE0993718D00F3E977 /* Polytopes */, AFFAB31519158CE40020F021 /* ProjectivePlane */, AFA562060993849F00F3E977 /* Providence */, AFA55B2509933E8D00F3E977 /* Pulsar */, AFF2867F17860E830050A578 /* QuasiCrystal */, AFA55DF009935E4900F3E977 /* Queens */, AF63A7F11AB4EDDB00593C75 /* RomanBoy */, AFA559CF0993330600F3E977 /* Rubik */, AF32D9E00F3AD0B40080F535 /* RubikBlocks */, AFA55D3C0993565300F3E977 /* SBalls */, AFA55B7909933F7200F3E977 /* Sierpinski3D */, AFE2A4560E2E904600ADB298 /* SkyTentacles */, AFE30BE80E52B14700CCF4A5 /* Sonar */, AFA55D7F099358C400F3E977 /* Spheremonics */, AFCF833B1AF5B515008BB7E1 /* SplitFlap */, AFA55A20099334A000F3E977 /* Sproingies */, AFA55A030993340300F3E977 /* Stairs */, AF77781009B6504400EA3033 /* StarWars */, AF7777A809B64B2600EA3033 /* StonerView */, AFA559920993322100F3E977 /* Superquadrics */, AF4A3449102A593600A81B2A /* Surfaces */, AFA562F20993943B00F3E977 /* Tangram */, AFA56379099397B300F3E977 /* TimeTunnel */, AF998EDA0A083DB30051049D /* TopBlock */, AF3581FB143330F900E09C51 /* TronBit */, AFDA658E178A52B70070D24B /* Unknown Pleasures */, AF0DCA420C4CBB0D00D76972 /* Voronoi */, AF39E282198A11F60064A58D /* WindupRobot */, AF137D410F075C9B004DE3B2 /* Obsolete */, AFA55CCC09934CE400F3E977 /* GLForestFire */, AFD570C90996B9F800BA26F7 /* Ant */, AF6427A809A2DE36000F4CD4 /* Bubbles */, AF47765A099DA78E001F091E /* Critical */, AF477909099DE379001F091E /* Flag */, AFD56EDA0996A95700BA26F7 /* Forest */, AF64260F09A18D6C000F4CD4 /* HyperBall */, AF6425CC09A18855000F4CD4 /* HyperCube */, AFD571B50996D9DC00BA26F7 /* Juggle */, AFD56F8C0996B09400BA26F7 /* Laser */, AFD56FA30996B10F00BA26F7 /* Lightning */, AFD56FB90996B18F00BA26F7 /* Lisa */, AFD56FCF0996B20900BA26F7 /* Lissie */, AF4774B4099D8B5F001F091E /* LMorph */, AFD570B10996B93000BA26F7 /* Rotor */, AFD570260996B56D00BA26F7 /* Sphere */, AFD570430996B61600BA26F7 /* Spiral */, AF4771A7099D4949001F091E /* T3D */, AFD56F0B0996AAFA00BA26F7 /* Vines */, AF477208099D4EE8001F091E /* Whirlygig */, AFD5709B0996B88E00BA26F7 /* Worm */, AF9E7EBE190F4C1B00A8B01F /* enable_gc */, AF9771D60989DC4A001F8B92 /* SaverTester */, AF918977158FC00A002B5D1E /* XScreenSaver-iOS */, AF1AD9E118500F9F00932759 /* XScreenSaverUpdater */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ AF08399209930B6B00277BE9 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF0839A609930BAC00277BE9 /* atlantis.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF083A35099311D700277BE9 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF083A4B0993120900277BE9 /* atunnel.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF0DC7AE0C4C73F600D76972 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF0DCA380C4C74B700D76972 /* m6502.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF0DCA450C4CBB0D00D76972 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF0DCA620C4CBB8E00D76972 /* voronoi.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF1A17640D6D6EE3008AF328 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF1A17810D6D6F62008AF328 /* lcdscrub.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF1AD9E018500F9F00932759 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF1ADA1B18501B3D00932759 /* SaverRunner.icns in Resources */, AF3633FC18530DD90086A439 /* sparkle_dsa_pub.pem in Resources */, AF1ADA161850157400932759 /* Updater.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF2D4D8213E902F5002AA818 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF51FD3715845F9F00E5741F /* iSaverRunner.xib in Resources */, 55EDCB3F1AD49DFE00251909 /* LaunchScreen.xib in Resources */, 550FB5FF1AD64424001A4FA5 /* Media-iOS.xcassets in Resources */, AF51FD3415845CD500E5741F /* phosphor.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF2D4F6F13E91093002AA818 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF51FD3615845F9900E5741F /* iSaverRunner.xib in Resources */, 55EDCB3E1AD49DFA00251909 /* LaunchScreen.xib in Resources */, 550FB5FE1AD64424001A4FA5 /* Media-iOS.xcassets in Resources */, AFBFE78B17895CD000432B21 /* apple2.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF32D9E30F3AD0B40080F535 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF32D9FD0F3AD1330080F535 /* rubikblocks.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF3581C21431D47B00E09C51 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF3581C31431D47B00E09C51 /* voronoi.xml in Resources */, AF3581E81431D61D00E09C51 /* companioncube.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF3581FE143330F900E09C51 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF3581FF143330F900E09C51 /* voronoi.xml in Resources */, AF3582221433318500E09C51 /* tronbit.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF35E88D0E63823600691F2F /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF35EB240E63829600691F2F /* jigsaw.xml in Resources */, AF4A8CA010B609B50074B062 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF39E285198A11F60064A58D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF39E2AD198A15820064A58D /* winduprobot.xml in Resources */, AFCF509D198C3612005B0DB1 /* xscreensaver-text in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF3C71480D624BF50030CC0D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF3C71600D624C7C0030CC0D /* hypnowheel.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF476FB8099D154F001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF476FCF099D1587001F091E /* interference.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF476FDD099D1686001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF476FEF099D16E4001F091E /* truchet.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47704F099D4385001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47705E099D43B7001F091E /* deluxe.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47716C099D4786001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47717B099D47B7001F091E /* compass.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477182099D4803001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477191099D4846001F091E /* wander.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4771AA099D4949001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4771B9099D4981001F091E /* t3d.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4771DE099D4D9A001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4771EE099D4DE5001F091E /* ccurve.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4771F5099D4E63001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477204099D4EA2001F091E /* nerverot.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47720B099D4EE8001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47721A099D4F27001F091E /* whirlygig.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477221099D4F67001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477230099D4FBD001F091E /* anemone.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477256099D5717001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477265099D5752001F091E /* halftone.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47726E099D57B9001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47727D099D57F5001F091E /* popsquares.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477286099D5926001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477296099D596A001F091E /* piecewise.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477385099D65A1001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477394099D65EB001F091E /* wormhole.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47739D099D6648001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4773AC099D6762001F091E /* fuzzyflakes.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4773C4099D67B9001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4773D3099D6804001F091E /* anemotaxis.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477404099D69E7001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47741B099D6A58001F091E /* intermomentary.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477429099D7C70001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477439099D7CD0001F091E /* ifs.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477445099D7D33001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477454099D7D75001F091E /* xmatrix.xml in Resources */, AF998ED60A083A280051049D /* xscreensaver-text in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477486099D89E4001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477495099D8A3A001F091E /* flame.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47749C099D8A74001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4774AB099D8AF3001F091E /* kaleidescope.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4774B7099D8B5F001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4774CA099D8BAE001F091E /* lmorph.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4774D1099D8BFF001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4774E0099D8C74001F091E /* maze.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477560099D9A1A001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47756F099D9A70001F091E /* pedal.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477586099D9C28001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47759B099D9C8D001F091E /* pyro.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4775A2099D9CF7001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4775B1099D9D51001F091E /* starfish.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4775DB099D9F69001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4775EC099D9FDB001F091E /* coral.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4775F5099DA030001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477604099DA083001F091E /* epicycle.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477616099DA26C001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477629099DA2D2001F091E /* kumppa.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477647099DA6D0001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477656099DA738001F091E /* squiral.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47765D099DA78E001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47766C099DA7F3001F091E /* critical.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477673099DA849001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477682099DA8AC001F091E /* petri.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477692099DAA6F001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4776A1099DAAC9001F091E /* blaster.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776AD099DABDD001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4776BC099DAC29001F091E /* xspirograph.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776C3099DAC8A001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4776D2099DACD6001F091E /* xrayswarm.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776DE099DADDF001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4776ED099DAE38001F091E /* whirlwindwarp.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776F4099DAE7A001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477703099DAF24001F091E /* vermiculate.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477710099DAF9F001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47771F099DB000001F091E /* cloudlife.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477726099DB044001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477735099DB0ED001F091E /* substrate.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477755099DB61E001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477768099DB6FD001F091E /* interaggregate.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477777099DB965001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477786099DBA11001F091E /* celtic.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477793099DBA90001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4777A3099DBAF8001F091E /* fluidballs.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4777D4099DC183001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4778A2099DDA76001F091E /* boxfit.xml in Resources */, AF0FAF1609CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4778AE099DDB79001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4778BD099DDC1B001F091E /* penetrate.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4778CA099DDCAE001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4778D9099DDD14001F091E /* xjack.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4778EB099DDDC8001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4778FA099DDE5F001F091E /* cynosure.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47790C099DE379001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47791B099DE3D9001F091E /* flag.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47792D099DE4C7001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47793C099DE535001F091E /* slip.xml in Resources */, AF0FAF2509CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF480C4C098E301400FB32B8 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF480C69098E309E00FB32B8 /* helix.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF480D75098EEDDE00FB32B8 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF480D85098EEE3100FB32B8 /* drift.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4810EE09909FBA00FB32B8 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4811440990A35B00FB32B8 /* dangerball.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4812530990CE2700FB32B8 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF48126D0990CE8600FB32B8 /* gears.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4812B60990D3D900FB32B8 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4812C80990D41700FB32B8 /* pipes.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF48DEF20A0C25E000F94CF9 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF48E16C0A0C26A400F94CF9 /* glschool.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4A344C102A593600A81B2A /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4A3462102A59EB00A81B2A /* surfaces.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4FD6E90CE7A486005EE58E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4FD7030CE7A5BC005EE58E /* lockward.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4FF4BD0D52CBDE00666F98 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4FF4D40D52CCAA00666F98 /* cubicgrid.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF5C9AFC1A0CCE6E00B0147A /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF5C9B111A0CCF4E00B0147A /* cityflow.xml in Resources */, AF5C9AFD1A0CCE6E00B0147A /* dangerball.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF63A7F41AB4EDDB00593C75 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF63A80A1AB4EF5D00593C75 /* romanboy.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6423F5099FF9C2000F4CD4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF642408099FFAB0000F4CD4 /* extrusion.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6425CF09A18855000F4CD4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF6425DE09A188D7000F4CD4 /* hypercube.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6425EF09A189EC000F4CD4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF6425FE09A18A77000F4CD4 /* qix.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64261209A18D6C000F4CD4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF64262109A18DFF000F4CD4 /* hyperball.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64262F09A18F54000F4CD4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF64263E09A18FCE000F4CD4 /* moire2.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64265209A19229000F4CD4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF64266109A1929A000F4CD4 /* munch.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64267E09A194B0000F4CD4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF64268D09A19525000F4CD4 /* goop.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64277409A1D37A000F4CD4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF64278309A1D418000F4CD4 /* speedmine.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6427AB09A2DE36000F4CD4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF6427BA09A2DF09000F4CD4 /* bubbles.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF68A48119196CF800D41CD1 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF68A49719196E3E00D41CD1 /* tessellimage.xml in Resources */, AF4A6692191F7CAE00C74753 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF73FF251A09877F00E485E9 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF73FF3C1A0988C500E485E9 /* binaryring.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7511021782B5B900380EA1 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFB8A69B1782BA34004EDB85 /* kaleidocycle.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7776E709B63ABF00EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77770209B63B3900EA3033 /* phosphor.xml in Resources */, AF0FAF1009CA6FF900EE1051 /* xscreensaver-text in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77771D09B6416100EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77772C09B641C800EA3033 /* pacman.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77774109B6446500EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77775309B644E300EA3033 /* flipscreen3d.xml in Resources */, AF0FAF1C09CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77777709B6497800EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77778A09B64A0D00EA3033 /* gleidescope.xml in Resources */, AF0FAF1E09CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77779109B64A5200EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7777A409B64AE200EA3033 /* mirrorblob.xml in Resources */, AF0FAF2109CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7777AB09B64B2600EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7777BE09B64BAC00EA3033 /* stonerview.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7777D309B64C6B00EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7777E609B64CD800EA3033 /* glslideshow.xml in Resources */, AF0FAF1F09CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7777ED09B64E3100EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77780009B64EA800EA3033 /* fliptext.xml in Resources */, AF0FAF0D09CA6FF900EE1051 /* xscreensaver-text in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77781309B6504400EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77782709B650D200EA3033 /* starwars.xml in Resources */, AF0FAF1109CA6FF900EE1051 /* xscreensaver-text in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77784709B6528100EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77787D09B654FE00EA3033 /* carousel.xml in Resources */, AF0FAF1909CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77786409B6536000EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77787A09B6545E00EA3033 /* dnalogo.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77788209B6563500EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77789109B656A900EA3033 /* fontglide.xml in Resources */, AF0FAF0E09CA6FF900EE1051 /* xscreensaver-text in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7778A809B659C800EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7778B909B65A6E00EA3033 /* blitspin.xml in Resources */, AF0FAF1509CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF78D178142DD8F3002AAF77 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF78D179142DD8F3002AAF77 /* voronoi.xml in Resources */, AF78D191142DD99B002AAF77 /* hilbert.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF794F67099748450059A8B0 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF794F7D0997486C0059A8B0 /* demon.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF794F9109974A320059A8B0 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF794FA809974AC60059A8B0 /* fiberlamp.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF794FD009974FA60059A8B0 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF794FDF09974FD10059A8B0 /* loop.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7ACFC319FF0A9200BD752B /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7ACFD919FF0BA600BD752B /* geodesicgears.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF91897B158FC00A002B5D1E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF918983158FC00A002B5D1E /* iSaverRunner.xib in Resources */, 55EDCB3D1AD498A800251909 /* LaunchScreen.xib in Resources */, AF73FF211A08AB9400E485E9 /* iSaverRunner57t.png in Resources */, AFEC68371BD6CA85004C1B64 /* OCRAStd.otf in Resources */, AFEC68391BD6CDF9004C1B64 /* YearlReg.ttf in Resources */, AF918AB4158FC53D002B5D1E /* abstractile.xml in Resources */, AF918AB5158FC53D002B5D1E /* anemone.xml in Resources */, AF918AB6158FC53D002B5D1E /* anemotaxis.xml in Resources */, AF918AB8158FC53D002B5D1E /* antinspect.xml in Resources */, AF918AB9158FC53D002B5D1E /* antmaze.xml in Resources */, AF918ABA158FC53D002B5D1E /* antspotlight.xml in Resources */, AF918ABB158FC53D002B5D1E /* apollonian.xml in Resources */, AF918ABC158FC53D002B5D1E /* apple2.xml in Resources */, AF918ABD158FC53D002B5D1E /* atlantis.xml in Resources */, AF918ABE158FC53D002B5D1E /* attraction.xml in Resources */, AF918ABF158FC53D002B5D1E /* atunnel.xml in Resources */, AF918AC0158FC53D002B5D1E /* barcode.xml in Resources */, AF73FF3D1A0988C500E485E9 /* binaryring.xml in Resources */, AF918AC1158FC53D002B5D1E /* blaster.xml in Resources */, AF918AC2158FC53D002B5D1E /* blinkbox.xml in Resources */, AF918AC3158FC53D002B5D1E /* blitspin.xml in Resources */, AF918AC4158FC53D002B5D1E /* blocktube.xml in Resources */, AF918AC5158FC53D002B5D1E /* boing.xml in Resources */, AF918AC6158FC53D002B5D1E /* bouboule.xml in Resources */, AF918AC7158FC53D002B5D1E /* bouncingcow.xml in Resources */, AF918AC8158FC53D002B5D1E /* boxed.xml in Resources */, AF918AC9158FC53D002B5D1E /* boxfit.xml in Resources */, AF918ACA158FC53D002B5D1E /* braid.xml in Resources */, AF918ACB158FC53D002B5D1E /* bsod.xml in Resources */, AF918ACC158FC53D002B5D1E /* bubble3d.xml in Resources */, AF918ACE158FC53D002B5D1E /* bumps.xml in Resources */, AF918ACF158FC53D002B5D1E /* cage.xml in Resources */, AF918AD0158FC53D002B5D1E /* carousel.xml in Resources */, AF918AD1158FC53D002B5D1E /* ccurve.xml in Resources */, AF918AD2158FC53D002B5D1E /* celtic.xml in Resources */, AF918AD3158FC53D002B5D1E /* circuit.xml in Resources */, AF5C9B121A0CCF4E00B0147A /* cityflow.xml in Resources */, AF918AD4158FC53D002B5D1E /* cloudlife.xml in Resources */, AF918AD5158FC53D002B5D1E /* companioncube.xml in Resources */, AF918AD6158FC53D002B5D1E /* compass.xml in Resources */, AF918AD7158FC53D002B5D1E /* coral.xml in Resources */, AF918AD8158FC53D002B5D1E /* crackberg.xml in Resources */, AF918ADA158FC53D002B5D1E /* crystal.xml in Resources */, AF918ADB158FC53D002B5D1E /* cube21.xml in Resources */, AF918ADC158FC53D002B5D1E /* cubenetic.xml in Resources */, AF918ADD158FC53D002B5D1E /* cubestorm.xml in Resources */, AF918ADE158FC53D002B5D1E /* cubicgrid.xml in Resources */, AF918ADF158FC53D002B5D1E /* cwaves.xml in Resources */, AF918AE0158FC53D002B5D1E /* cynosure.xml in Resources */, AF918AE1158FC53D002B5D1E /* dangerball.xml in Resources */, AF918AE2158FC53D002B5D1E /* decayscreen.xml in Resources */, AF918AE3158FC53D002B5D1E /* deco.xml in Resources */, AF918AE4158FC53D002B5D1E /* deluxe.xml in Resources */, AF918AE5158FC53D002B5D1E /* demon.xml in Resources */, AF918AE6158FC53D002B5D1E /* discrete.xml in Resources */, AF918AE7158FC53D002B5D1E /* distort.xml in Resources */, AFCF453815986A3000E6E8CC /* dnalogo.xml in Resources */, AF918AE9158FC53D002B5D1E /* drift.xml in Resources */, AF918AEA158FC53D002B5D1E /* endgame.xml in Resources */, AF918AEB158FC53D002B5D1E /* engine.xml in Resources */, AF918AEC158FC53D002B5D1E /* epicycle.xml in Resources */, AF918AED158FC53D002B5D1E /* eruption.xml in Resources */, AF918AEE158FC53D002B5D1E /* euler2d.xml in Resources */, AF918AF0158FC53D002B5D1E /* fadeplot.xml in Resources */, AF918AF1158FC53D002B5D1E /* fiberlamp.xml in Resources */, AF918AF2158FC53D002B5D1E /* fireworkx.xml in Resources */, AF918AF4158FC53D002B5D1E /* flame.xml in Resources */, AF918AF5158FC53D002B5D1E /* flipflop.xml in Resources */, AF918AF6158FC53D002B5D1E /* flipscreen3d.xml in Resources */, AF918AF7158FC53D002B5D1E /* fliptext.xml in Resources */, AF918AF8158FC53D002B5D1E /* flow.xml in Resources */, AF918AF9158FC53D002B5D1E /* fluidballs.xml in Resources */, AF918AFB158FC53D002B5D1E /* flyingtoasters.xml in Resources */, AF918AFC158FC53D002B5D1E /* fontglide.xml in Resources */, AF918AFE158FC53D002B5D1E /* fuzzyflakes.xml in Resources */, AF918AFF158FC53D002B5D1E /* galaxy.xml in Resources */, AF918B00158FC53D002B5D1E /* gears.xml in Resources */, AFF3C9FF17CCAD9A0028F240 /* geodesic.xml in Resources */, AF918B01158FC53D002B5D1E /* gflux.xml in Resources */, AF918B02158FC53D002B5D1E /* glblur.xml in Resources */, AF918B03158FC53D002B5D1E /* glcells.xml in Resources */, AF918B04158FC53D002B5D1E /* gleidescope.xml in Resources */, AF918B06158FC53D002B5D1E /* glhanoi.xml in Resources */, AF918B07158FC53D002B5D1E /* glknots.xml in Resources */, AF918B08158FC53D002B5D1E /* glmatrix.xml in Resources */, AF918B09158FC53D002B5D1E /* glplanet.xml in Resources */, 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 */, AF918B0E158FC53D002B5D1E /* goop.xml in Resources */, AF918B0F158FC53D002B5D1E /* grav.xml in Resources */, AF918B11158FC53D002B5D1E /* halftone.xml in Resources */, AF918B12158FC53D002B5D1E /* halo.xml in Resources */, AF918B13158FC53D002B5D1E /* helix.xml in Resources */, AFB591BF178B81E600EA4005 /* hexadrop.xml in Resources */, AF918B14158FC53D002B5D1E /* hilbert.xml in Resources */, AF918B15158FC53D002B5D1E /* hopalong.xml in Resources */, AF918B18158FC53D002B5D1E /* hypertorus.xml in Resources */, AF918B19158FC53D002B5D1E /* hypnowheel.xml in Resources */, AF918B1A158FC53D002B5D1E /* ifs.xml in Resources */, 550FB6001AD64424001A4FA5 /* Media-iOS.xcassets in Resources */, AF918B1B158FC53D002B5D1E /* imsmap.xml in Resources */, AF918B1C158FC53D002B5D1E /* interaggregate.xml in Resources */, AF918B1D158FC53D002B5D1E /* interference.xml in Resources */, AF918B1E158FC53D002B5D1E /* intermomentary.xml in Resources */, AF918B1F158FC53D002B5D1E /* jigglypuff.xml in Resources */, AF39483F15A1647A0000FFCD /* jigsaw.xml in Resources */, AF918B22158FC53D002B5D1E /* juggler3d.xml in Resources */, AF918B23158FC53D002B5D1E /* julia.xml in Resources */, AFB8A69C1782BF6C004EDB85 /* kaleidocycle.xml in Resources */, AF918B24158FC53D002B5D1E /* kaleidescope.xml in Resources */, AF918B25158FC53D002B5D1E /* klein.xml in Resources */, AF918B26158FC53D002B5D1E /* kumppa.xml in Resources */, AF918B27158FC53D002B5D1E /* lament.xml in Resources */, AF918B29158FC53D002B5D1E /* lavalite.xml in Resources */, AF918B30158FC53D002B5D1E /* loop.xml in Resources */, AF918B31158FC53D002B5D1E /* m6502.xml in Resources */, AF918B32158FC53D002B5D1E /* maze.xml in Resources */, AF918B33158FC53D002B5D1E /* memscroller.xml in Resources */, AF918B34158FC53D002B5D1E /* menger.xml in Resources */, AF918B35158FC53D002B5D1E /* metaballs.xml in Resources */, AF918B36158FC53D002B5D1E /* mirrorblob.xml in Resources */, AF7ACFDA19FF0BA600BD752B /* geodesicgears.xml in Resources */, AF918B38158FC53D002B5D1E /* moebius.xml in Resources */, AF918B39158FC53D002B5D1E /* moebiusgears.xml in Resources */, AF918B3A158FC53D002B5D1E /* moire.xml in Resources */, AF918B3B158FC53D002B5D1E /* moire2.xml in Resources */, AF918B3C158FC53D002B5D1E /* molecule.xml in Resources */, AF918B3D158FC53D002B5D1E /* morph3d.xml in Resources */, AF918B3E158FC53D002B5D1E /* mountain.xml in Resources */, AF918B3F158FC53D002B5D1E /* munch.xml in Resources */, AF918B40158FC53D002B5D1E /* nerverot.xml in Resources */, AF918B41158FC53D002B5D1E /* noof.xml in Resources */, AF918B42158FC53D002B5D1E /* noseguy.xml in Resources */, AF918B43158FC53D002B5D1E /* pacman.xml in Resources */, AF918B44158FC53D002B5D1E /* pedal.xml in Resources */, AF918B45158FC53D002B5D1E /* penetrate.xml in Resources */, AF918B46158FC53D002B5D1E /* penrose.xml in Resources */, AF918B47158FC53D002B5D1E /* petri.xml in Resources */, AF918B48158FC53E002B5D1E /* phosphor.xml in Resources */, AF918B49158FC53E002B5D1E /* photopile.xml in Resources */, AF918B4A158FC53E002B5D1E /* piecewise.xml in Resources */, AF918B4B158FC53E002B5D1E /* pinion.xml in Resources */, AF918B4C158FC53E002B5D1E /* pipes.xml in Resources */, AFCF4547159878D500E6E8CC /* polyhedra.xml in Resources */, AF918B4E158FC53E002B5D1E /* polyominoes.xml in Resources */, AF918B4F158FC53E002B5D1E /* polytopes.xml in Resources */, AF918B50158FC53E002B5D1E /* pong.xml in Resources */, AF918B51158FC53E002B5D1E /* popsquares.xml in Resources */, AFFAB33019158E2A0020F021 /* projectiveplane.xml in Resources */, AF918B52158FC53E002B5D1E /* providence.xml in Resources */, AF918B53158FC53E002B5D1E /* pulsar.xml in Resources */, AF918B54158FC53E002B5D1E /* pyro.xml in Resources */, AF918B55158FC53E002B5D1E /* qix.xml in Resources */, AFF28697178611720050A578 /* quasicrystal.xml in Resources */, AF918B56158FC53E002B5D1E /* queens.xml in Resources */, AF918B57158FC53E002B5D1E /* rdbomb.xml in Resources */, AF918B58158FC53E002B5D1E /* ripples.xml in Resources */, AF918B59158FC53E002B5D1E /* rocks.xml in Resources */, AF63A80B1AB4EF5D00593C75 /* romanboy.xml in Resources */, AF918B5A158FC53E002B5D1E /* rorschach.xml in Resources */, AF918B5C158FC53E002B5D1E /* rotzoomer.xml in Resources */, AF918B5D158FC53E002B5D1E /* rubik.xml in Resources */, AF918B5E158FC53E002B5D1E /* rubikblocks.xml in Resources */, AF918B5F158FC53E002B5D1E /* sballs.xml in Resources */, AF918B60158FC53E002B5D1E /* shadebobs.xml in Resources */, AF918B61158FC53E002B5D1E /* sierpinski.xml in Resources */, AF918B62158FC53E002B5D1E /* sierpinski3d.xml in Resources */, AF918B63158FC53E002B5D1E /* skytentacles.xml in Resources */, AF918B64158FC53E002B5D1E /* slidescreen.xml in Resources */, AF918B65158FC53E002B5D1E /* slip.xml in Resources */, AF918B66158FC53E002B5D1E /* sonar.xml in Resources */, AF918B67158FC53E002B5D1E /* speedmine.xml in Resources */, AF918B69158FC53E002B5D1E /* spheremonics.xml in Resources */, AFCF83561AF5B5FD008BB7E1 /* splitflap.xml in Resources */, AF918B6B158FC53E002B5D1E /* spotlight.xml in Resources */, AF918B6C158FC53E002B5D1E /* sproingies.xml in Resources */, AF918B6D158FC53E002B5D1E /* squiral.xml in Resources */, AF918B6E158FC53E002B5D1E /* stairs.xml in Resources */, AF918B6F158FC53E002B5D1E /* starfish.xml in Resources */, AF918B70158FC53E002B5D1E /* starwars.xml in Resources */, AF918B71158FC53E002B5D1E /* stonerview.xml in Resources */, AF918B72158FC53E002B5D1E /* strange.xml in Resources */, AF918B73158FC53E002B5D1E /* substrate.xml in Resources */, AF918B74158FC53E002B5D1E /* superquadrics.xml in Resources */, AF918B75158FC53E002B5D1E /* surfaces.xml in Resources */, AF918B76158FC53E002B5D1E /* swirl.xml in Resources */, AF918B78158FC53E002B5D1E /* tangram.xml in Resources */, AF68A49819196E3E00D41CD1 /* tessellimage.xml in Resources */, CE3D016C1B76FEB100993C75 /* testx11.xml in Resources */, AF918B79158FC53E002B5D1E /* thornbird.xml in Resources */, AF918B7A158FC53E002B5D1E /* timetunnel.xml in Resources */, AF918B7B158FC53E002B5D1E /* topblock.xml in Resources */, AF918B7C158FC53E002B5D1E /* triangle.xml in Resources */, AF918B7D158FC53E002B5D1E /* tronbit.xml in Resources */, AF918B7E158FC53E002B5D1E /* truchet.xml in Resources */, AF918B7F158FC53E002B5D1E /* twang.xml in Resources */, AF918B80158FC53E002B5D1E /* vermiculate.xml in Resources */, AFDA65A6178A541A0070D24B /* unknownpleasures.xml in Resources */, AF918B83158FC53E002B5D1E /* voronoi.xml in Resources */, AF918B84158FC53E002B5D1E /* wander.xml in Resources */, AF918B86158FC53E002B5D1E /* whirlwindwarp.xml in Resources */, AF39E2AE198A15820064A58D /* winduprobot.xml in Resources */, AF918B89158FC53E002B5D1E /* wormhole.xml in Resources */, AF918B8A158FC53E002B5D1E /* xanalogtv.xml in Resources */, AF918B8B158FC53E002B5D1E /* xflame.xml in Resources */, AF918B8C158FC53E002B5D1E /* xjack.xml in Resources */, AF918B8D158FC53E002B5D1E /* xlyap.xml in Resources */, AF918B8E158FC53E002B5D1E /* xmatrix.xml in Resources */, AF918B8F158FC53E002B5D1E /* xrayswarm.xml in Resources */, AF918B90158FC53E002B5D1E /* xspirograph.xml in Resources */, AF918B91158FC554002B5D1E /* zoom.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975730099C317000B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF97573F099C31BB00B05160 /* imsmap.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975778099C374A00B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975788099C378B00B05160 /* moire.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9757C5099C3E6300B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFCCCBB009BFE4B000353F4D /* rdbomb.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF97580B099C41D500B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF97581B099C423600B05160 /* xflame.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975868099C475900B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975879099C490500B05160 /* shadebobs.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975A39099C681F00B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975A48099C688B00B05160 /* metaballs.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975A6F099C6AB200B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975A82099C6B2700B05160 /* eruption.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975A89099C6BC300B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975A98099C6C2000B05160 /* barcode.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975ADA099C6EB100B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975AED099C6EFE00B05160 /* fireworkx.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975AFF099C6FE400B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975B16099C70B200B05160 /* memscroller.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975C15099C8C1500B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975C28099C8C6A00B05160 /* halo.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975C40099C8DCF00B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975C55099C8E2800B05160 /* greynetic.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975C60099C8F3F00B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975C75099C8FAC00B05160 /* noseguy.xml in Resources */, AF0FAF0F09CA6FF900EE1051 /* xscreensaver-text in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975D55099CA0F000B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975D65099CA14B00B05160 /* rocks.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF976FB80989CAA2001F8B92 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF976FCD0989CAEA001F8B92 /* deco.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF97702A0989D1E6001F8B92 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9770430989D226001F8B92 /* rorschach.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9770670989D2F6001F8B92 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9770800989D32E001F8B92 /* attraction.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9771D30989DC4A001F8B92 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9772E30989DFC6001F8B92 /* SaverRunner.nib in Resources */, AF51FD3915845FCB00E5741F /* SaverRunner.icns in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF998EDD0A083DB30051049D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF998EFB0A083E8C0051049D /* topblock.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D466909B5109C006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D467A09B51126006E59CF /* decayscreen.xml in Resources */, AF0FAF1A09CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D474709B5300A006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D475609B5306A006E59CF /* slidescreen.xml in Resources */, AF0FAF2409CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D476209B53166006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D48D309B53214006E59CF /* zoom.xml in Resources */, AF0FAF2909CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D48DE09B53322006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D48ED09B5338A006E59CF /* bumps.xml in Resources */, AF0FAF1809CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D48F709B535DA006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D490609B536DE006E59CF /* distort.xml in Resources */, AF0FAF1B09CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D492E09B53CBA006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D493D09B53D3B006E59CF /* ripples.xml in Resources */, AF0FAF2209CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D495709B53FC9006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D496609B54087006E59CF /* rotzoomer.xml in Resources */, AF0FAF2309CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D496F09B5411D006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D497E09B541CE006E59CF /* twang.xml in Resources */, AF0FAF2709CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D499A09B544C2006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D49A909B5457B006E59CF /* spotlight.xml in Resources */, AF0FAF2609CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4C6C09B59F27006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D4C7B09B5A02D006E59CF /* xlyap.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4CEA09B5AA8E006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D4CF909B5AC73006E59CF /* pong.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4D8109B5B2DC006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D4D9109B5B42B006E59CF /* xanalogtv.xml in Resources */, AF0FAF2809CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4DB209B5B71E006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D4DC209B5B862006E59CF /* bsod.xml in Resources */, AF0FAF1709CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4DEF09B5BB19006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D4E0409B5BC85006E59CF /* apple2.xml in Resources */, AF0FAF0C09CA6FF900EE1051 /* xscreensaver-text in Resources */, AF0FAF1409CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA339310B058505002B0E7D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA33BB00B05860F002B0E7D /* webcollage.xml in Resources */, AFA33BDD0B058A30002B0E7D /* webcollage-helper in Resources */, AFA33C0C0B058ED2002B0E7D /* webcollage in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55949099330B000F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5595C099330E500F3E977 /* cage.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559700993317900F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55981099331AC00F3E977 /* moebius.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559950993322100F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA559A70993325200F3E977 /* superquadrics.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559B80993328000F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA559CB099332CF00F3E977 /* morph3d.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559D20993330600F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA559E90993333D00F3E977 /* rubik.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A060993340300F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55A190993344100F3E977 /* stairs.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A23099334A000F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55A34099334CB00F3E977 /* sproingies.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A7C0993364300F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55A8D0993366F00F3E977 /* lament.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55AD209933CEF00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55AE309933D1C00F3E977 /* bubble3d.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B0C09933E0500F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55B2009933E3100F3E977 /* glplanet.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B2809933E8D00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55B3909933EB400F3E977 /* pulsar.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B7C09933F7200F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55B8D09933FAA00F3E977 /* sierpinski3d.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B9409933FDA00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55BA50993400200F3E977 /* gflux.xml in Resources */, AF0FAF1D09CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55BAE099340CE00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55BBF0993410100F3E977 /* circuit.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55BE70993429100F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55BF8099342BF00F3E977 /* menger.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55C110993431300F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55C220993433D00F3E977 /* engine.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55C7A099349A600F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55C8B099349CC00F3E977 /* glsnake.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55CAC09934BB200F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55CBD09934BDD00F3E977 /* boxed.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55CCF09934CE400F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55CE009934D1500F3E977 /* glforestfire.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D3F0993565300F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55D500993568200F3E977 /* sballs.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D650993584B00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55D760993587600F3E977 /* cubenetic.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D82099358C400F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55D93099358FB00F3E977 /* spheremonics.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55DCB09935D7000F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55DDC09935D9D00F3E977 /* lavalite.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55DF309935E4900F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55E0509935E7E00F3E977 /* queens.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E1009935EDC00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55E2109935F0B00F3E977 /* endgame.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E3209935F8E00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55E4409935FBA00F3E977 /* glblur.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E5109935FF900F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55E970993602F00F3E977 /* flyingtoasters.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55ECA099360E300F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55EE50993610F00F3E977 /* bouncingcow.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F09099361B700F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55F20099361E800F3E977 /* jigglypuff.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F2D0993622F00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55F3E0993625B00F3E977 /* klein.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F450993629000F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55F57099362C500F3E977 /* hypertorus.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F750993643600F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55F860993646900F3E977 /* glmatrix.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55FD609936BFA00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55FF209936C2F00F3E977 /* cubestorm.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55FFC09936C6D00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5600D09936C9D00F3E977 /* glknots.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5601709936CC800F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5602809936CF700F3E977 /* blocktube.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5603509936D5100F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF0D117D0E41566300BB14A4 /* xscreensaver-getimage-file in Resources */, AFA5604609936DAB00F3E977 /* flipflop.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5604D09936E2100F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA560820993700500F3E977 /* antinspect.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5606509936F3800F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA560830993700900F3E977 /* antspotlight.xml in Resources */, AF0FAF1309CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA560B10993718D00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA560C2099371BE00F3E977 /* polytopes.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA561000993781600F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA561110993784D00F3E977 /* molecule.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5615B09937C0D00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5616C09937C6800F3E977 /* blinkbox.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5617E09937CF100F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5618F09937D2100F3E977 /* noof.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA561A009937D7E00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA561B109937DB400F3E977 /* polyhedra.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562090993849F00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5621B099384DA00F3E977 /* providence.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562220993852500F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA562330993855500F3E977 /* pinion.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562C2099392C600F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA562D3099392F900F3E977 /* boing.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562DD099393C900F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA562EE0993940400F3E977 /* antmaze.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562F50993943B00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA563060993947300F3E977 /* tangram.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA563160993951000F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA563280993955000F3E977 /* crackberg.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA56334099395ED00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA563740993977100F3E977 /* glhanoi.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA56354099396C000F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA563770993979A00F3E977 /* cube21.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5637C099397B300F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5638D099397ED00F3E977 /* timetunnel.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA563A7099398BB00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA563B8099398F700F3E977 /* juggler3d.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFB591AA178B812C00EA4005 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFB591BE178B81E600EA4005 /* hexadrop.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFBFE74E178642DC00432B21 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFBFE765178643B200432B21 /* Apple2.saver in Resources */, AFBFE74F178642DC00432B21 /* SaverRunner.nib in Resources */, AFBFE750178642DC00432B21 /* SaverRunner.icns in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFBFE76C178647FE00432B21 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFBFE7831786483B00432B21 /* Phosphor.saver in Resources */, AFBFE76F178647FE00432B21 /* SaverRunner.nib in Resources */, AFBFE770178647FE00432B21 /* SaverRunner.icns in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFCF833E1AF5B515008BB7E1 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFCF83551AF5B5FD008BB7E1 /* splitflap.xml in Resources */, AFE349291B033A8200AF3D73 /* xscreensaver-text in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD51B1E0F063B4A00471C02 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD51B200F063B4A00471C02 /* xscreensaver-getimage-file in Resources */, AFD51DB90F063BE700471C02 /* photopile.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56DF40996A03800BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56E9F0996A23800BA26F7 /* gltext.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56EB10996A72600BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF642330099F45CA000F4CD4 /* braid.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56EDD0996A95700BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F1D0996AB1D00BA26F7 /* forest.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F0E0996AAFA00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F1E0996AB4000BA26F7 /* vines.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F260996AB8A00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F350996ABB300BA26F7 /* galaxy.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F520996AEEE00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F610996AF1500BA26F7 /* grav.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F6E0996B01600BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F870996B04D00BA26F7 /* hopalong.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F8F0996B09400BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F9F0996B0D000BA26F7 /* laser.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FA60996B10F00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56FB50996B15000BA26F7 /* lightning.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FBC0996B18F00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56FCB0996B1BE00BA26F7 /* lisa.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FD20996B20900BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56FE10996B24B00BA26F7 /* lissie.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FFB0996B43800BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD5700B0996B47E00BA26F7 /* penrose.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570120996B4CC00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570210996B51100BA26F7 /* sierpinski.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570290996B56D00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD5703A0996B5D000BA26F7 /* sphere.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570460996B61600BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570550996B65A00BA26F7 /* spiral.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5705C0996B6A300BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD5706B0996B6E700BA26F7 /* fadeplot.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570720996B72700BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570810996B77F00BA26F7 /* mountain.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570880996B80300BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570970996B84E00BA26F7 /* triangle.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5709E0996B88E00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570AD0996B8DC00BA26F7 /* worm.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570B40996B93000BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570C30996B96F00BA26F7 /* rotor.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570CC0996B9F800BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570DD0996BA4600BA26F7 /* ant.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570ED0996BBBF00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570FE0996BC2000BA26F7 /* flow.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD571160996BE9300BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD571270996BEE100BA26F7 /* discrete.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5712F0996BF2E00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD5713E0996BFA500BA26F7 /* apollonian.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD571460996C01700BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD571550996C05F00BA26F7 /* euler2d.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5715C0996C0CE00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFCCCBB309BFE51900353F4D /* thornbird.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD571B80996D9DC00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD571C70996DA3300BA26F7 /* juggle.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572250996E4A300BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD572340996E52B00BA26F7 /* swirl.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572700996EE8500BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD5727F0996EF1900BA26F7 /* polyominoes.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572A80996F99600BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD572B80996FAF900BA26F7 /* bouboule.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572C50996FC0F00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD572EC0997005900BA26F7 /* crystal.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572FC099701C000BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD5730B099702AF00BA26F7 /* julia.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD573600997411200BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD573700997418D00BA26F7 /* strange.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFDA6591178A52B70070D24B /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFDA65A5178A541A0070D24B /* unknownpleasures.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE2A4590E2E904600ADB298 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFE2A4750E2E911200ADB298 /* skytentacles.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE30BEB0E52B14700CCF4A5 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFE30BFE0E52B18300CCF4A5 /* sonar.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE6A1850CDD7B2E002805BF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFE6A40E0CDD7BDC002805BF /* moebiusgears.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE6A41E0CDD7FAA002805BF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFE6A4370CDD8027002805BF /* abstractile.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF2868217860E830050A578 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFF28696178611720050A578 /* quasicrystal.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF3C9EB17CCAC440028F240 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFF3C9FE17CCAD9A0028F240 /* geodesic.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF463390C4403E400EE6509 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFF4634C0C44046500EE6509 /* cwaves.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF4635B0C440AEF00EE6509 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFF463740C440BAC00EE6509 /* glcells.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFFAB31819158CE40020F021 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFFAB32F19158E2A0020F021 /* projectiveplane.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; CE3D01541B76F4C100993C75 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( CE3D01691B76F88A00993C75 /* testx11.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXRezBuildPhase section */ AF08399E09930B6B00277BE9 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF083A44099311D700277BE9 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF0DC7B80C4C73F600D76972 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF0DCA510C4CBB0D00D76972 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF1A176E0D6D6EE3008AF328 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF32D9EF0F3AD0B40080F535 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF3581D01431D47B00E09C51 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF358211143330F900E09C51 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF35E89B0E63823600691F2F /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF39E291198A11F60064A58D /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF3C71540D624BF50030CC0D /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF476FC2099D154F001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF476FE7099D1686001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477058099D4385001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477175099D4786001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47718B099D4803001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4771B3099D4949001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4771E7099D4D9A001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4771FE099D4E63001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477214099D4EE8001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47722A099D4F67001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47725F099D5717001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477277099D57B9001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47728F099D5926001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47738E099D65A1001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4773A6099D6648001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4773CD099D67B9001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47740E099D69E7001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477433099D7C70001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47744E099D7D33001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47748F099D89E4001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4774A5099D8A74001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4774C0099D8B5F001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4774DA099D8BFF001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477569099D9A1A001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47758F099D9C28001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4775AB099D9CF7001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4775E4099D9F69001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4775FE099DA030001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47761F099DA26C001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477650099DA6D0001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477666099DA78E001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47767C099DA849001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47769B099DAA6F001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4776B6099DABDD001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4776CC099DAC8A001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4776E7099DADDF001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4776FD099DAE7A001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477719099DAF9F001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47772F099DB044001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47775E099DB61E001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477780099DB965001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47779C099DBA90001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4777DD099DC183001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4778B7099DDB79001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4778D3099DDCAE001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4778F4099DDDC8001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477915099DE379001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477936099DE4C7001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF480C54098E301400FB32B8 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF480D7D098EEDDE00FB32B8 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4810F709909FBA00FB32B8 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4812600990CE2700FB32B8 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4812C20990D3D900FB32B8 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF48DEFE0A0C25E000F94CF9 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4A3458102A593600A81B2A /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4FD6F50CE7A486005EE58E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4FF4C90D52CBDE00666F98 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF5C9B081A0CCE6E00B0147A /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF63A8011AB4EDDB00593C75 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF642401099FF9C2000F4CD4 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF6425D809A18855000F4CD4 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF6425F809A189EC000F4CD4 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF64261B09A18D6C000F4CD4 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF64263809A18F54000F4CD4 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF64265B09A19229000F4CD4 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF64268709A194B0000F4CD4 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF64277D09A1D37A000F4CD4 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF6427B409A2DE36000F4CD4 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF68A48D19196CF800D41CD1 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF73FF311A09877F00E485E9 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF75110D1782B5B900380EA1 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF7776F209B63ABF00EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF77772609B6416100EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF77774D09B6446500EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF77778409B6497800EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF77779E09B64A5200EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF7777B809B64B2600EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF7777E009B64C6B00EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF7777FA09B64E3100EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF77782109B6504400EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF77785409B6528100EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF77787009B6536000EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF77788B09B6563500EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF7778B109B659C800EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF78D184142DD8F3002AAF77 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF794F70099748450059A8B0 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF794F9A09974A320059A8B0 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF794FD909974FA60059A8B0 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF7ACFCF19FF0A9200BD752B /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975739099C317000B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975781099C374A00B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9757CE099C3E6300B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975814099C41D500B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975871099C475900B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975A42099C681F00B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975A78099C6AB200B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975A92099C6BC300B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975AE3099C6EB100B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975B08099C6FE400B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975C1E099C8C1500B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975C4A099C8DCF00B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975C6A099C8F3F00B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975D5F099CA0F000B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9770150989D0F6001F8B92 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF97703C0989D1E6001F8B92 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9770790989D2F6001F8B92 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF998EE90A083DB30051049D /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D467209B5109C006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D475009B5300A006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D476B09B53166006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D48E709B53322006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D490009B535DA006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D493709B53CBA006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D496009B53FC9006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D497809B5411D006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D49A309B544C2006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4C7509B59F27006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4CF309B5AA8E006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4D8B09B5B2DC006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4DBC09B5B71E006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4DFA09B5BB19006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA3393B0B058505002B0E7D /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55956099330B000F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5597B0993317900F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA559A00993322100F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA559C30993328000F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA559DD0993330600F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A110993340300F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A2E099334A000F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A870993364300F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55ADD09933CEF00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B1A09933E0500F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B3309933E8D00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B8709933F7200F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B9F09933FDA00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55BB9099340CE00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55BF20993429100F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55C1C0993431300F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55C85099349A600F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55CB709934BB200F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55CDA09934CE400F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D4A0993565300F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D700993584B00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D8D099358C400F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55DD609935D7000F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55DFF09935E4900F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E1B09935EDC00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E3E09935F8E00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E5C09935FF900F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55EDF099360E300F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F1A099361B700F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F380993622F00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F500993629000F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F800993643600F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55FE109936BFA00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5600709936C6D00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5602209936CC800F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5604009936D5100F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5605809936E2100F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5607009936F3800F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA560BC0993718D00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5610B0993781600F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5616609937C0D00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5618909937CF100F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA561AB09937D7E00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA562150993849F00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5622D0993852500F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA562CD099392C600F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA562E8099393C900F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA563000993943B00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA563220993951000F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5633F099395ED00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5635F099396C000F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA56387099397B300F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA563B2099398BB00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFB591B5178B812C00EA4005 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFCF834B1AF5B515008BB7E1 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD51B2B0F063B4A00471C02 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56E000996A03800BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56EBA0996A72600BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56EE60996A95700BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F170996AAFA00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F2F0996AB8A00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F5B0996AEEE00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F770996B01600BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F980996B09400BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FAF0996B10F00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FC50996B18F00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FDB0996B20900BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD570040996B43800BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD5701B0996B4CC00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD570320996B56D00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD5704F0996B61600BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD570650996B6A300BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD5707B0996B72700BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD570910996B80300BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD570A70996B88E00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD570BD0996B93000BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD570D50996B9F800BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD570F60996BBBF00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD5711F0996BE9300BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD571380996BF2E00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD5714F0996C01700BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD571650996C0CE00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD571C10996D9DC00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD5722E0996E4A300BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD572790996EE8500BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD572B10996F99600BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD572CE0996FC0F00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD57305099701C000BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD573690997411200BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFDA659C178A52B70070D24B /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFE2A4650E2E904600ADB298 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFE30BF70E52B14700CCF4A5 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFE6A1920CDD7B2E002805BF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFE6A4280CDD7FAA002805BF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFF2868D17860E830050A578 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFF3C9F617CCAC440028F240 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFF463420C4403E400EE6509 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFF463670C440AEF00EE6509 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFFAB32419158CE40020F021 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; CE3D01611B76F4C100993C75 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXRezBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ AF0DC7B90C4C73F600D76972 /* 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; }; AF0DCA520C4CBB0D00D76972 /* 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; }; AF1A176F0D6D6EE3008AF328 /* 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; }; AF1ADA1E18501DC200932759 /* 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; }; AF2D51F413E94AC4002AA818 /* 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; }; AF2D51FD13E94B2D002AA818 /* 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; 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; }; AF3581D11431D47B00E09C51 /* 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; }; AF358212143330F900E09C51 /* 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; }; AF35E89C0E63823600691F2F /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF39E292198A11F60064A58D /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; 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; }; AF3C71550D624BF50030CC0D /* 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; }; AF48DEFF0A0C25E000F94CF9 /* 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; }; AF4A3459102A593600A81B2A /* 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; }; AF4E1D1819CE7013002B6190 /* Update GC build settings */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Update GC build settings"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "#!/bin/sh\n\n# Edit the contents of \"xscreensaver.xcconfig\" based on the running\n# Xcode version. If we are running Xcode 5.0.2, we *must* turn on GC.\n# If we are running a newer version of Xcode than that, we *cannot*\n# turn on GC.\n\nTMP=`mktemp -t xcode`\nSRC=\"$SRCROOT/xscreensaver.xcconfig\"\nOBJC_GC_CFLAGS=\nif [ \"$XCODE_VERSION_MAJOR\" -lt \"0600\" ]; then\n OBJC_GC_CFLAGS=\"-fobjc-gc\"\nfi\n\nrm -f \"$TMP\"\nsed -e \"s/^\\(OBJC_GC_CFLAGS=\\).*/\\1${OBJC_GC_CFLAGS}/\" < $SRC > $TMP\nif ! ( cmp -s \"$SRC\" \"$TMP\" ); then\necho \"$SRC updated:\"\n diff -U0 \"$SRC\" \"$TMP\"\n cat \"$TMP\" > \"$SRC\"\nelse\n echo \"$SRC unchanged\"\nfi\n\nrm -f \"$TMP\"\nexit 0\n"; showEnvVarsInLog = 0; }; AF4FD6F60CE7A486005EE58E /* 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; }; AF4FF4CA0D52CBDE00666F98 /* 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; }; AF578FA11434E918002455DD /* 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; }; AF5C9B091A0CCE6E00B0147A /* 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; }; AF63A8021AB4EDDB00593C75 /* 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; }; AF68A48E19196CF800D41CD1 /* 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; }; AF73FF321A09877F00E485E9 /* 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; }; AF75110E1782B5B900380EA1 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF78D185142DD8F3002AAF77 /* 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; }; AF7ACFD019FF0A9200BD752B /* 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; }; AF7E080115925EE300D81407 /* ICMP Sanity Check */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "ICMP Sanity Check"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/icmp-warning.pl"; }; AF7E08021592661100D81407 /* ICMP Sanity Check */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "ICMP Sanity Check"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/icmp-warning.pl"; }; AF91898A158FC00A002B5D1E /* 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; }; AF94E7421A16F66900289B93 /* Update Function Table */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Update Function Table"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/build-fntable.pl $SOURCE_ROOT/ios-function-table.m"; }; AF998EEA0A083DB30051049D /* 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; }; AFA3393C0B058505002B0E7D /* 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; }; AFA3D69209C03B5C00E4CFCA /* 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; }; AFA3D69409C03B6200E4CFCA /* 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; }; AFA3D85B09C03BD300E4CFCA /* 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; }; AFA3D85D09C03BD700E4CFCA /* 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; }; AFA3D85F09C03BDA00E4CFCA /* 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; }; AFA3D86109C03BDE00E4CFCA /* 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; }; AFA3D86309C03BE200E4CFCA /* 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; }; AFA3D86509C03BE500E4CFCA /* 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; }; AFA3D86709C03BE800E4CFCA /* 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; }; AFA3D86909C03BEC00E4CFCA /* 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; }; AFA3D86B09C03BEF00E4CFCA /* 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; }; AFA3D86D09C03BF300E4CFCA /* 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; }; AFA3D86F09C03BF700E4CFCA /* 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; }; AFA3D87109C03BFB00E4CFCA /* 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; }; AFA3D87309C03C0000E4CFCA /* 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; }; AFA3D87509C03C0400E4CFCA /* 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; }; AFA3D87709C03C0A00E4CFCA /* 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; }; AFA3D87909C03C1200E4CFCA /* 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; }; AFA3D87B09C03C1700E4CFCA /* 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; }; AFA3D87D09C03C1B00E4CFCA /* 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; }; AFA3D87F09C03C1E00E4CFCA /* 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; }; AFA3D88109C03C2100E4CFCA /* 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; }; AFA3D88309C03C2400E4CFCA /* 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; }; AFA3D88509C03C2700E4CFCA /* 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; }; AFA3D88709C03C2A00E4CFCA /* 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; }; AFA3D88909C03C2E00E4CFCA /* 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; }; AFA3D88B09C03C3200E4CFCA /* 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; }; AFA3D88D09C03C3600E4CFCA /* 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; }; AFA3D88F09C03C3900E4CFCA /* 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; }; AFA3D89109C03C3C00E4CFCA /* 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; }; AFA3D89309C03C4000E4CFCA /* 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; }; AFA3D89509C03C4400E4CFCA /* 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; }; AFA3D89709C03C4700E4CFCA /* 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; }; AFA3D89B09C03C4D00E4CFCA /* 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; }; AFA3D89D09C03C5000E4CFCA /* 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; }; AFA3D89F09C03C5300E4CFCA /* 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; }; AFA3D8A109C03C5600E4CFCA /* 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; }; AFA3D8A309C03C5F00E4CFCA /* 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; }; AFA3D8A509C03C6200E4CFCA /* 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; }; AFA3D8A909C03C6900E4CFCA /* 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; }; AFA3D8AB09C03C6D00E4CFCA /* 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; }; AFA3D8AD09C03C7000E4CFCA /* 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; }; AFA3D8AF09C03C7300E4CFCA /* 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; }; AFA3D8B109C03C7600E4CFCA /* 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; }; AFA3D8B309C03C7900E4CFCA /* 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; }; AFA3D8B509C03C7C00E4CFCA /* 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; }; AFA3D8B709C03C7F00E4CFCA /* 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; }; AFA3D8B909C03C8200E4CFCA /* 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; }; AFA3D8BB09C03C8600E4CFCA /* 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; }; AFA3D8BD09C03C8900E4CFCA /* 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; }; AFA3D8BF09C03C8D00E4CFCA /* 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; }; AFA3D8C109C03C9000E4CFCA /* 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; }; AFA3D8C309C03C9300E4CFCA /* 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; }; AFA3D8C509C03C9600E4CFCA /* 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; }; AFA3D8C709C03C9900E4CFCA /* 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; }; AFA3D8C909C03C9E00E4CFCA /* 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; }; AFA3D8CB09C03CA100E4CFCA /* 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; }; AFA3D8CD09C03CA400E4CFCA /* 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; }; AFA3D8CF09C03CA800E4CFCA /* 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; }; AFA3D8D109C03CAB00E4CFCA /* 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; }; AFA3D8D309C03CAE00E4CFCA /* 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; }; AFA3D8D709C03CB400E4CFCA /* 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; }; AFA3D8D909C03CB700E4CFCA /* 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; }; AFA3D8DB09C03CBA00E4CFCA /* 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; }; AFA3D8DD09C03CBD00E4CFCA /* 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; }; AFA3D8DF09C03CC000E4CFCA /* 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; }; AFA3D8E109C03CC400E4CFCA /* 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; }; AFA3D8E309C03CCA00E4CFCA /* 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; }; AFA3D8E509C03CCD00E4CFCA /* 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; }; AFA3D8E709C03CD100E4CFCA /* 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; }; AFA3D8E909C03CD500E4CFCA /* 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; }; AFA3D8EB09C03CD800E4CFCA /* 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; }; AFA3D8ED09C03CDB00E4CFCA /* 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; }; AFA3D8EF09C03CDE00E4CFCA /* 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; }; AFA3D8F109C03CE100E4CFCA /* 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; }; AFA3D8F309C03CE400E4CFCA /* 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; }; AFA3D8F509C03CE800E4CFCA /* 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; }; AFA3D8F709C03CEA00E4CFCA /* 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; }; AFA3D8F909C03CED00E4CFCA /* 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; }; AFA3D8FB09C03CF100E4CFCA /* 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; }; AFA3D8FD09C03CF400E4CFCA /* 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; }; AFA3D8FF09C03CF700E4CFCA /* 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; }; AFA3D90109C03D0000E4CFCA /* 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; }; AFA3D90309C03D0400E4CFCA /* 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; }; AFA3D90509C03D0700E4CFCA /* 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; }; AFA3D90709C03D0B00E4CFCA /* 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; }; AFA3D90909C03D0E00E4CFCA /* 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; }; AFA3D90B09C03D1100E4CFCA /* 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; }; AFA3D90D09C03D1400E4CFCA /* 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; }; AFA3D90F09C03D1800E4CFCA /* 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; }; AFA3D91109C03D1B00E4CFCA /* 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; }; AFA3D91309C03D1E00E4CFCA /* 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; }; AFA3D91509C03D2100E4CFCA /* 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; }; AFA3D91709C03D2400E4CFCA /* 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; }; AFA3D91909C03D2700E4CFCA /* 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; }; AFA3D91D09C03D3000E4CFCA /* 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; }; AFA3D91F09C03D3300E4CFCA /* 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; }; AFA3D92109C03D3600E4CFCA /* 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; }; AFA3D92309C03D3A00E4CFCA /* 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; }; AFA3D92509C03D3D00E4CFCA /* 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; }; AFA3D92709C03D4000E4CFCA /* 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; }; AFA3D92909C03D4400E4CFCA /* 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; }; AFA3D92B09C03D4700E4CFCA /* 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; }; AFA3D92D09C03D4A00E4CFCA /* 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; }; AFA3D92F09C03D4E00E4CFCA /* 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; }; AFA3D93109C03D5100E4CFCA /* 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; }; AFA3D93309C03D5400E4CFCA /* 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; }; AFA3D93509C03D5700E4CFCA /* 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; }; AFA3D93709C03D5B00E4CFCA /* 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; }; AFA3D93909C03D5E00E4CFCA /* 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; }; AFA3D93B09C03D6200E4CFCA /* 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; }; AFA3D93D09C03D6C00E4CFCA /* 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; }; AFA3D93F09C03D6F00E4CFCA /* 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; }; AFA3D94109C03D7200E4CFCA /* 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; }; AFA3D94309C03D7600E4CFCA /* 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; }; AFA3D94509C03D7A00E4CFCA /* 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; }; AFA3D94709C03D7E00E4CFCA /* 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; }; AFA3D94909C03D8100E4CFCA /* 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; }; AFA3D94B09C03D8500E4CFCA /* 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; }; AFA3D94D09C03D8D00E4CFCA /* 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; }; AFA3D94F09C03D9100E4CFCA /* 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; }; AFA3D95109C03D9400E4CFCA /* 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; }; AFA3D95309C03D9800E4CFCA /* 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; }; AFA3D95509C03D9C00E4CFCA /* 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; }; AFA3D95709C03DA100E4CFCA /* 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; }; AFA3D95909C03DA400E4CFCA /* 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; }; AFA3D95B09C03DA800E4CFCA /* 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; }; AFA3D95D09C03DAB00E4CFCA /* 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; }; AFA3D95F09C03DAE00E4CFCA /* 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; }; AFA3D96109C03DB100E4CFCA /* 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; }; AFA3D96309C03DB500E4CFCA /* 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; }; AFA3D96509C03DB900E4CFCA /* 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; }; AFA3D96709C03DBC00E4CFCA /* 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; }; AFA3D96909C03DBF00E4CFCA /* 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; }; AFA3D96B09C03DC600E4CFCA /* 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; }; AFA3D96D09C03DCA00E4CFCA /* 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; }; AFA3D96F09C03DCD00E4CFCA /* 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; }; AFA3D97109C03DD000E4CFCA /* 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; }; AFA3D97309C03DD300E4CFCA /* 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; }; AFA3D97509C03DD700E4CFCA /* 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; }; AFA3D97709C03DDA00E4CFCA /* 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; }; AFA3D97909C03DDD00E4CFCA /* 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; }; AFA3D97B09C03DE000E4CFCA /* 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; }; AFA3D97D09C03DE400E4CFCA /* 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; }; AFA3D97F09C03DE700E4CFCA /* 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; }; AFA3D98109C03DEA00E4CFCA /* 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; }; AFA3D98309C03DEE00E4CFCA /* 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; }; AFA3D98509C03DF100E4CFCA /* 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; }; AFA3D98709C03DF400E4CFCA /* 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; }; AFA3D98909C03DF700E4CFCA /* 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; }; AFA3D98B09C03DFC00E4CFCA /* 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; }; AFA3D98D09C03E0500E4CFCA /* 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; }; AFA3D98F09C03E0F00E4CFCA /* 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; }; AFA3D99109C03E1200E4CFCA /* 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; }; AFA3D99309C03E1600E4CFCA /* 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; }; AFA3D99509C03E1900E4CFCA /* 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; }; AFA3D99709C03E1C00E4CFCA /* 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; }; AFA3D99909C03E2000E4CFCA /* 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; }; AFA3D99B09C03E2300E4CFCA /* 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; }; AFA3D99D09C03E2600E4CFCA /* 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; }; AFA3D99F09C03E2900E4CFCA /* 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; }; AFA3D9A109C03E2E00E4CFCA /* 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; }; AFA3D9A309C03E3200E4CFCA /* 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; }; AFA3D9A509C03E3600E4CFCA /* 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; }; AFA3D9A709C03E3A00E4CFCA /* 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; }; AFA3D9A909C03E3D00E4CFCA /* 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; }; AFA3D9AB09C03E4200E4CFCA /* 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; }; AFA3D9AD09C03E4600E4CFCA /* 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; }; AFA3D9AF09C03E4B00E4CFCA /* 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; }; AFA3D9B109C03E4E00E4CFCA /* 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; }; AFA3D9B309C03E5100E4CFCA /* 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; }; AFA3D9B509C03E5700E4CFCA /* 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; }; AFA3D9B709C03E5B00E4CFCA /* 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; }; AFA3D9B909C03E5E00E4CFCA /* 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; }; AFA3D9BB09C03E6200E4CFCA /* 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; }; AFA3D9BD09C03E6500E4CFCA /* 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; }; AFA3D9BF09C03E6900E4CFCA /* 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; }; AFA3D9C109C03E6E00E4CFCA /* 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; }; AFA3D9C309C03E7100E4CFCA /* 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; }; AFA3D9C509C03E7400E4CFCA /* 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; }; AFA3D9C709C03E7800E4CFCA /* 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; }; AFA3D9C909C03E7C00E4CFCA /* 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; }; AFA3D9CB09C03E7F00E4CFCA /* 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; }; AFA3D9CD09C03E8400E4CFCA /* 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; }; AFA3D9CF09C03E8700E4CFCA /* 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; }; AFA3D9D109C03E8B00E4CFCA /* 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; }; AFA3D9D309C03E8F00E4CFCA /* 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; }; AFA3D9D509C03E9300E4CFCA /* 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; }; AFA3DBA209C0424C00E4CFCA /* 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; }; AFB591B6178B812C00EA4005 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFBFE75A178642DC00432B21 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFBFE77A178647FE00432B21 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFBFE78817894FFA00432B21 /* Copy Standalone Preferences XML File */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Copy Standalone Preferences XML File"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "SRC=$SRCROOT/$PRODUCT_NAME-app.xml\nDST=$BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX/Contents/Resources\nNAME=`echo $PRODUCT_NAME.xml | tr A-Z a-z`\ncp -p $SRC $DST/$NAME\nln -sf ../../../$NAME $DST/$PRODUCT_NAME.saver/Contents/Resources/"; }; AFBFE78917895AAF00432B21 /* Copy Standalone Preferences XML File */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Copy Standalone Preferences XML File"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "SRC=$SRCROOT/$PRODUCT_NAME-app.xml\nDST=$BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX/Contents/Resources\nNAME=`echo $PRODUCT_NAME.xml | tr A-Z a-z`\ncp -p $SRC $DST/$NAME\nln -sf ../../../$NAME $DST/$PRODUCT_NAME.saver/Contents/Resources/"; }; AFCCCBB509C033DF00353F4D /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; 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; }; AFCCCBC709C03AAF00353F4D /* 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; }; AFCCCBCB09C03AEE00353F4D /* 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; }; AFCCCBCD09C03AF400353F4D /* 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; }; AFCCCBCF09C03AF800353F4D /* 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; }; AFCCCBD109C03AFC00353F4D /* 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; }; AFCCCBD309C03B0000353F4D /* 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; }; AFCCCBD509C03B0500353F4D /* 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; }; AFCF834C1AF5B515008BB7E1 /* 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; }; AFD51B2C0F063B4A00471C02 /* 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; }; AFDA659D178A52B70070D24B /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFE2A4660E2E904600ADB298 /* 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; }; AFE30BF80E52B14700CCF4A5 /* 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; }; AFE6A1930CDD7B2E002805BF /* 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; }; AFE6A4290CDD7FAA002805BF /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFF2868E17860E830050A578 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; 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; }; AFF3C9F717CCAC440028F240 /* 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; }; AFF463430C4403E400EE6509 /* 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; }; AFF463680C440AEF00EE6509 /* 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; }; AFFAB32519158CE40020F021 /* 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; }; CE3D01621B76F4C100993C75 /* 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; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ AF08399409930B6B00277BE9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF0839B009930C4900277BE9 /* atlantis.c in Sources */, AF0839B109930C4900277BE9 /* dolphin.c in Sources */, AF0839B209930C4900277BE9 /* shark.c in Sources */, AF0839B309930C4900277BE9 /* swim.c in Sources */, AF0839B409930C4900277BE9 /* whale.c in Sources */, AF9CCAB509959CEF0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF083A37099311D700277BE9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF083A4A099311FF00277BE9 /* atunnel.c in Sources */, AF083A59099312B000277BE9 /* tunnel_draw.c in Sources */, AF9CCAB609959CF70075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF0DC7B00C4C73F600D76972 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF0DC7B10C4C73F600D76972 /* XScreenSaverSubclass.m in Sources */, AF0DC7B20C4C73F600D76972 /* analogtv.c in Sources */, AF0DCA350C4C74A200D76972 /* asm6502.c in Sources */, AF0DCA360C4C74A200D76972 /* m6502.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF0DCA470C4CBB0D00D76972 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF0DCA480C4CBB0D00D76972 /* XScreenSaverSubclass.m in Sources */, AF0DCA600C4CBB7300D76972 /* voronoi.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF1A17670D6D6EE3008AF328 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF1A17680D6D6EE3008AF328 /* XScreenSaverSubclass.m in Sources */, AF1A177F0D6D6F3E008AF328 /* lcdscrub.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF1AD9DE18500F9F00932759 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF1ADA141850132600932759 /* main.m in Sources */, AF3633FD18530DD90086A439 /* Updater.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF2D4D8513E902F5002AA818 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF2D4D8613E902F5002AA818 /* SaverRunner.m in Sources */, AF2D4D8713E902F5002AA818 /* main.m in Sources */, AF84AF1F15829AF000607E4C /* SaverListController.m in Sources */, AFAA6B461773F30500DE720C /* ios-function-table.m in Sources */, AFAA6B3B1773926C00DE720C /* phosphor.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF2D4F7413E91093002AA818 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF2D4F7513E91093002AA818 /* SaverRunner.m in Sources */, AF2D4F7613E91093002AA818 /* main.m in Sources */, AF51FD3515845D1400E5741F /* SaverListController.m in Sources */, AFAA6B471773F35600DE720C /* ios-function-table.m in Sources */, AFAA6B2F1773871900DE720C /* analogtv.c in Sources */, AFAA6B2D1773870700DE720C /* apple2-main.c in Sources */, AFAA6B2E1773870700DE720C /* apple2.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF32D9E50F3AD0B40080F535 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF32D9E70F3AD0B40080F535 /* XScreenSaverSubclass.m in Sources */, AF32D9FB0F3AD1200080F535 /* rubikblocks.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF3581C51431D47B00E09C51 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF3581C61431D47B00E09C51 /* XScreenSaverSubclass.m in Sources */, AF3581C71431D47B00E09C51 /* voronoi.c in Sources */, AF3581C81431D47B00E09C51 /* hilbert.c in Sources */, AF3581DC1431D5FC00E09C51 /* companion_disc.c in Sources */, AF3581DF1431D5FC00E09C51 /* companion_heart.c in Sources */, AF3581E21431D5FC00E09C51 /* companion_quad.c in Sources */, AF3581E51431D5FC00E09C51 /* companion.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF358202143330F900E09C51 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF358203143330F900E09C51 /* XScreenSaverSubclass.m in Sources */, AF358204143330F900E09C51 /* voronoi.c in Sources */, AF358205143330F900E09C51 /* hilbert.c in Sources */, AF358206143330F900E09C51 /* companion_disc.c in Sources */, AF358207143330F900E09C51 /* companion_heart.c in Sources */, AF358208143330F900E09C51 /* companion_quad.c in Sources */, AF358209143330F900E09C51 /* companion.c in Sources */, AF35821C1433314C00E09C51 /* tronbit_idle1.c in Sources */, AF35821D1433314C00E09C51 /* tronbit_idle2.c in Sources */, AF35821E1433314C00E09C51 /* tronbit_no.c in Sources */, AF35821F1433314C00E09C51 /* tronbit_yes.c in Sources */, AF3582201433314C00E09C51 /* tronbit.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF35E88F0E63823600691F2F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF35E8900E63823600691F2F /* XScreenSaverSubclass.m in Sources */, AF35EB260E6382BA00691F2F /* jigsaw.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF39E287198A11F60064A58D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFCF509C198A1861005B0DB1 /* involute.c in Sources */, AF39E289198A11F60064A58D /* XScreenSaverSubclass.m in Sources */, AF39E2AB198A13F50064A58D /* winduprobot.c in Sources */, AFBE744019A7C6930018AA35 /* robot.c in Sources */, AF39E2AA198A13F50064A58D /* robot-wireframe.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF3C714A0D624BF50030CC0D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF3C714B0D624BF50030CC0D /* XScreenSaverSubclass.m in Sources */, AF3C715E0D624C600030CC0D /* hypnowheel.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF476FBB099D154F001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF476FBC099D154F001F091E /* XScreenSaverSubclass.m in Sources */, AF476FD1099D15AA001F091E /* interference.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF476FE0099D1686001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF476FE1099D1686001F091E /* XScreenSaverSubclass.m in Sources */, AF476FF1099D1713001F091E /* truchet.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477051099D4385001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477052099D4385001F091E /* XScreenSaverSubclass.m in Sources */, AF477146099D43E2001F091E /* deluxe.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47716E099D4786001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47716F099D4786001F091E /* XScreenSaverSubclass.m in Sources */, AF47717D099D47D3001F091E /* compass.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477184099D4803001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477185099D4803001F091E /* XScreenSaverSubclass.m in Sources */, AF477193099D4864001F091E /* wander.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4771AC099D4949001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4771AD099D4949001F091E /* XScreenSaverSubclass.m in Sources */, AF4771BB099D4997001F091E /* t3d.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4771E0099D4D9A001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4771E1099D4D9A001F091E /* XScreenSaverSubclass.m in Sources */, AF4771F0099D4DFE001F091E /* ccurve.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4771F7099D4E63001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4771F8099D4E63001F091E /* XScreenSaverSubclass.m in Sources */, AF477206099D4EB6001F091E /* nerverot.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47720D099D4EE8001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47720E099D4EE8001F091E /* XScreenSaverSubclass.m in Sources */, AF47721C099D4F47001F091E /* whirlygig.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477223099D4F67001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477224099D4F67001F091E /* XScreenSaverSubclass.m in Sources */, AF477232099D4FD5001F091E /* anemone.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477258099D5717001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477259099D5717001F091E /* XScreenSaverSubclass.m in Sources */, AF477267099D5768001F091E /* halftone.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477270099D57B9001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477271099D57B9001F091E /* XScreenSaverSubclass.m in Sources */, AF47727F099D5808001F091E /* popsquares.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477288099D5926001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477289099D5926001F091E /* XScreenSaverSubclass.m in Sources */, AF477298099D5980001F091E /* piecewise.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477387099D65A1001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477388099D65A1001F091E /* XScreenSaverSubclass.m in Sources */, AF477396099D65FE001F091E /* wormhole.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47739F099D6648001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4773A0099D6648001F091E /* XScreenSaverSubclass.m in Sources */, AF4773B5099D6778001F091E /* fuzzyflakes.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4773C6099D67B9001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4773C7099D67B9001F091E /* XScreenSaverSubclass.m in Sources */, AF4773D5099D6817001F091E /* anemotaxis.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477407099D69E7001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477408099D69E7001F091E /* XScreenSaverSubclass.m in Sources */, AF47741D099D6A6D001F091E /* intermomentary.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47742C099D7C70001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47742D099D7C70001F091E /* XScreenSaverSubclass.m in Sources */, AF47743B099D7CEA001F091E /* ifs.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477447099D7D33001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477448099D7D33001F091E /* XScreenSaverSubclass.m in Sources */, AF477456099D7D8A001F091E /* xmatrix.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477488099D89E4001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477489099D89E4001F091E /* XScreenSaverSubclass.m in Sources */, AF477497099D8A53001F091E /* flame.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47749E099D8A74001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47749F099D8A74001F091E /* XScreenSaverSubclass.m in Sources */, AF4774AD099D8B08001F091E /* kaleidescope.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4774B9099D8B5F001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4774BA099D8B5F001F091E /* XScreenSaverSubclass.m in Sources */, AF4774CC099D8BC2001F091E /* lmorph.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4774D3099D8BFF001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4774D4099D8BFF001F091E /* XScreenSaverSubclass.m in Sources */, AF4774E2099D8C8B001F091E /* maze.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477562099D9A1A001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477563099D9A1A001F091E /* XScreenSaverSubclass.m in Sources */, AF477571099D9A8A001F091E /* pedal.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477588099D9C28001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477589099D9C28001F091E /* XScreenSaverSubclass.m in Sources */, AF47759D099D9CA3001F091E /* pyro.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4775A4099D9CF7001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4775A5099D9CF7001F091E /* XScreenSaverSubclass.m in Sources */, AF4775B4099D9D67001F091E /* starfish.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4775DD099D9F69001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4775DE099D9F69001F091E /* XScreenSaverSubclass.m in Sources */, AF4775F0099D9FFF001F091E /* coral.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4775F7099DA030001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4775F8099DA030001F091E /* XScreenSaverSubclass.m in Sources */, AF477606099DA097001F091E /* epicycle.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477618099DA26C001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477619099DA26C001F091E /* XScreenSaverSubclass.m in Sources */, AF47762B099DA2E9001F091E /* kumppa.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477649099DA6D0001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47764A099DA6D0001F091E /* XScreenSaverSubclass.m in Sources */, AF477658099DA75D001F091E /* squiral.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47765F099DA78E001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477660099DA78E001F091E /* XScreenSaverSubclass.m in Sources */, AF47766E099DA80D001F091E /* critical.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477675099DA849001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477676099DA849001F091E /* XScreenSaverSubclass.m in Sources */, AF477684099DA8C7001F091E /* petri.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477694099DAA6F001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477695099DAA6F001F091E /* XScreenSaverSubclass.m in Sources */, AF4776A3099DAADE001F091E /* blaster.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776AF099DABDD001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4776B0099DABDD001F091E /* XScreenSaverSubclass.m in Sources */, AF4776BE099DAC46001F091E /* xspirograph.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776C5099DAC8A001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4776C6099DAC8A001F091E /* XScreenSaverSubclass.m in Sources */, AF4776D4099DACEB001F091E /* xrayswarm.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776E0099DADDF001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4776E1099DADDF001F091E /* XScreenSaverSubclass.m in Sources */, AF4776EF099DAE58001F091E /* whirlwindwarp.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776F6099DAE7A001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4776F7099DAE7A001F091E /* XScreenSaverSubclass.m in Sources */, AF477705099DAF3F001F091E /* vermiculate.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477712099DAF9F001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477713099DAF9F001F091E /* XScreenSaverSubclass.m in Sources */, AF477721099DB01C001F091E /* cloudlife.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477728099DB044001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477729099DB044001F091E /* XScreenSaverSubclass.m in Sources */, AF477737099DB104001F091E /* substrate.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477757099DB61E001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477758099DB61E001F091E /* XScreenSaverSubclass.m in Sources */, AF47776A099DB710001F091E /* interaggregate.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477779099DB965001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47777A099DB965001F091E /* XScreenSaverSubclass.m in Sources */, AF477788099DBA29001F091E /* celtic.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477795099DBA90001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477796099DBA90001F091E /* XScreenSaverSubclass.m in Sources */, AF4777A5099DBB12001F091E /* fluidballs.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4777D6099DC183001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4777D7099DC183001F091E /* XScreenSaverSubclass.m in Sources */, AF4778A4099DDA91001F091E /* boxfit.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4778B0099DDB79001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4778B1099DDB79001F091E /* XScreenSaverSubclass.m in Sources */, AF4778BF099DDC33001F091E /* penetrate.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4778CC099DDCAE001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4778CD099DDCAE001F091E /* XScreenSaverSubclass.m in Sources */, AF4778DB099DDD2B001F091E /* xjack.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4778ED099DDDC8001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4778EE099DDDC8001F091E /* XScreenSaverSubclass.m in Sources */, AF4778FC099DDE79001F091E /* cynosure.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47790E099DE379001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47790F099DE379001F091E /* XScreenSaverSubclass.m in Sources */, AF47791D099DE3F1001F091E /* flag.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47792F099DE4C7001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477930099DE4C7001F091E /* XScreenSaverSubclass.m in Sources */, AF47793E099DE56A001F091E /* slip.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4808BE098C3B6C00FB32B8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFE943B119DD54C1000A5E6D /* xft.c in Sources */, AFE943B519DDF97F000A5E6D /* utf8wc.c in Sources */, AF4808C5098C3BDC00FB32B8 /* colors.c in Sources */, AF4808C6098C3BDF00FB32B8 /* erase.c in Sources */, AF4808C7098C3BE600FB32B8 /* hsv.c in Sources */, AFBF893E0E41D930006A2D66 /* fps.c in Sources */, AFBF89AF0E423FC3006A2D66 /* fps-gl.c in Sources */, AF4808C8098C3BE800FB32B8 /* InvertedSlider.m in Sources */, AF4808C9098C3BEC00FB32B8 /* jwxyz.m in Sources */, AF4808CA098C3BEE00FB32B8 /* PrefsReader.m in Sources */, AFDA11251934424D003D397F /* aligned_malloc.c in Sources */, AF4808CC098C3BF200FB32B8 /* spline.c in Sources */, AF4808CD098C3BF400FB32B8 /* usleep.c in Sources */, AF4808CE098C3BF800FB32B8 /* XScreenSaverConfigSheet.m in Sources */, AF4808CF098C3BFB00FB32B8 /* XScreenSaverView.m in Sources */, AF4808D0098C3BFD00FB32B8 /* yarandom.c in Sources */, AF480FCC09901DF900FB32B8 /* gltrackball.c in Sources */, AF480FCD09901E0000FB32B8 /* rotator.c in Sources */, AF480FCE09901E0400FB32B8 /* sphere.c in Sources */, AF480FCF09901E0700FB32B8 /* trackball.c in Sources */, AF480FD009901E0A00FB32B8 /* tube.c in Sources */, AF4812FA0990D9AE00FB32B8 /* XScreenSaverGLView.m in Sources */, AF083A1C099310B300277BE9 /* xpm-ximage.c in Sources */, AF083A21099310CF00277BE9 /* xlockmore.c in Sources */, AFA55866099324D800F3E977 /* minixpm.c in Sources */, AFA55A530993353500F3E977 /* gllist.c in Sources */, AFA55A95099336D800F3E977 /* normals.c in Sources */, AFDA11271934424D003D397F /* thread_util.c in Sources */, AF975C93099C929800B05160 /* xpm-pixmap.c in Sources */, AF4774E8099D8D8C001F091E /* logo.c in Sources */, AF4775C0099D9E79001F091E /* resources.c in Sources */, AF9D468F09B51567006E59CF /* osxgrabscreen.m in Sources */, AF9D473809B52EE0006E59CF /* colorbars.c in Sources */, AF9D4E2209B63413006E59CF /* jwxyz-timers.m in Sources */, AF77783409B6516900EA3033 /* grab-ximage.c in Sources */, AF77783709B6518400EA3033 /* texfont.c in Sources */, AF77783A09B651AF00EA3033 /* glut_stroke.c in Sources */, AF77783D09B651C700EA3033 /* glut_swidth.c in Sources */, AFAD462309D5F4DA00AB5F95 /* grabclient.c in Sources */, AF6048FB157C07C600CA21E4 /* jwzgles.c in Sources */, AFC7592D158D8E8B00C5458E /* textclient.c in Sources */, AFC75930158D9A7A00C5458E /* iostextclient.m in Sources */, AF561DF615969BC3007CA5ED /* iosgrabimage.m in Sources */, CE9289D319BD00E300961F22 /* async_netdb.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF480C4E098E301400FB32B8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF480C5C098E305900FB32B8 /* helix.c in Sources */, AF9CCABB09959D1C0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF480D77098EEDDE00FB32B8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF480D88098EEE5B00FB32B8 /* drift.c in Sources */, AF9CCAB909959D100075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4810F009909FBA00FB32B8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4811030990A02700FB32B8 /* dangerball.c in Sources */, AF9CC7A1099580E70075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4812550990CE2700FB32B8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4812580990CE2700FB32B8 /* gears.c in Sources */, AF9CCABA09959D170075E99B /* XScreenSaverSubclass.m in Sources */, AFCFF1D90CE4517C00C7D111 /* involute.c in Sources */, AFCFF1DA0CE4518B00C7D111 /* tube.c in Sources */, AFCFF1DB0CE451A300C7D111 /* normals.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4812B80990D3D900FB32B8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4812C90990D41E00FB32B8 /* buildlwo.c in Sources */, AF4812CA0990D42000FB32B8 /* pipeobjs.c in Sources */, AF4812CB0990D42100FB32B8 /* pipes.c in Sources */, AF9CCABD09959D250075E99B /* XScreenSaverSubclass.m in Sources */, AF69640B0E4FE3470085DBCE /* teapot.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF48DEF40A0C25E000F94CF9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF48DEF60A0C25E000F94CF9 /* XScreenSaverSubclass.m in Sources */, AF48E1680A0C268500F94CF9 /* glschool_alg.c in Sources */, AF48E1690A0C268500F94CF9 /* glschool_gl.c in Sources */, AF48E16A0A0C268500F94CF9 /* glschool.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4A344E102A593600A81B2A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4A3450102A593600A81B2A /* XScreenSaverSubclass.m in Sources */, AF4A3464102A5A0E00A81B2A /* surfaces.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4FD6EB0CE7A486005EE58E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4FD6EC0CE7A486005EE58E /* XScreenSaverSubclass.m in Sources */, AF4FD7010CE7A577005EE58E /* lockward.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4FF4BF0D52CBDE00666F98 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4FF4C10D52CBDE00666F98 /* XScreenSaverSubclass.m in Sources */, AF4FF4D10D52CC8400666F98 /* cubicgrid.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF5C9AFE1A0CCE6E00B0147A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF5C9B131A0CCF4E00B0147A /* cityflow.c in Sources */, AF5C9AFF1A0CCE6E00B0147A /* dangerball.c in Sources */, AF5C9B001A0CCE6E00B0147A /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF63A7F61AB4EDDB00593C75 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF63A80C1AB4EF5D00593C75 /* romanboy.c in Sources */, AF63A7F81AB4EDDB00593C75 /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6423F7099FF9C2000F4CD4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF6423F9099FF9C2000F4CD4 /* XScreenSaverSubclass.m in Sources */, AF642412099FFAF1000F4CD4 /* extrusion-helix2.c in Sources */, AF642413099FFAF1000F4CD4 /* extrusion-helix3.c in Sources */, AF642414099FFAF1000F4CD4 /* extrusion-helix4.c in Sources */, AF642415099FFAF1000F4CD4 /* extrusion-joinoffset.c in Sources */, AF642416099FFAF1000F4CD4 /* extrusion-screw.c in Sources */, AF642417099FFAF1000F4CD4 /* extrusion-taper.c in Sources */, AF642418099FFAF1000F4CD4 /* extrusion-twistoid.c in Sources */, AF642419099FFAF1000F4CD4 /* extrusion.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6425D109A18855000F4CD4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF6425D209A18855000F4CD4 /* XScreenSaverSubclass.m in Sources */, AF6425E009A188FB000F4CD4 /* hypercube.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6425F109A189EC000F4CD4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF6425F209A189EC000F4CD4 /* XScreenSaverSubclass.m in Sources */, AF64260009A18A94000F4CD4 /* qix.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64261409A18D6C000F4CD4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF64261509A18D6C000F4CD4 /* XScreenSaverSubclass.m in Sources */, AF64262309A18E1E000F4CD4 /* hyperball.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64263109A18F54000F4CD4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF64263209A18F54000F4CD4 /* XScreenSaverSubclass.m in Sources */, AF64264009A18FEB000F4CD4 /* moire2.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64265409A19229000F4CD4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF64265509A19229000F4CD4 /* XScreenSaverSubclass.m in Sources */, AF64266309A192C5000F4CD4 /* munch.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64268009A194B0000F4CD4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF64268109A194B0000F4CD4 /* XScreenSaverSubclass.m in Sources */, AF64268F09A19542000F4CD4 /* goop.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64277609A1D37A000F4CD4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF64277709A1D37A000F4CD4 /* XScreenSaverSubclass.m in Sources */, AF64278809A1D433000F4CD4 /* speedmine.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6427AD09A2DE36000F4CD4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF6427AE09A2DE36000F4CD4 /* XScreenSaverSubclass.m in Sources */, AF6427BE09A2DF47000F4CD4 /* bubbles-default.c in Sources */, AF6427BF09A2DF47000F4CD4 /* bubbles.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF68A48319196CF800D41CD1 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF68A49919196E3E00D41CD1 /* tessellimage.c in Sources */, AF68A49B19196E3E00D41CD1 /* delaunay.c in Sources */, AF68A48519196CF800D41CD1 /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF73FF271A09877F00E485E9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF73FF391A09889700E485E9 /* binaryring.c in Sources */, AF73FF291A09877F00E485E9 /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7511041782B5B900380EA1 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7511151782B64300380EA1 /* kaleidocycle.c in Sources */, AF7511051782B5B900380EA1 /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7776E909B63ABF00EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7776EA09B63ABF00EA3033 /* XScreenSaverSubclass.m in Sources */, AF77770409B63B5F00EA3033 /* phosphor.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77771F09B6416100EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77772009B6416100EA3033 /* XScreenSaverSubclass.m in Sources */, AF77772D09B641D300EA3033 /* pacman.c in Sources */, AF77772E09B641D400EA3033 /* pacman_ai.c in Sources */, AF77772F09B641D600EA3033 /* pacman_level.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77774309B6446500EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77774509B6446500EA3033 /* XScreenSaverSubclass.m in Sources */, AF77775509B644FF00EA3033 /* flipscreen3d.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77777909B6497800EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77777A09B6497800EA3033 /* XScreenSaverSubclass.m in Sources */, AF77778C09B64A2A00EA3033 /* gleidescope.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77779309B64A5200EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77779409B64A5200EA3033 /* XScreenSaverSubclass.m in Sources */, AF7777A609B64AFC00EA3033 /* mirrorblob.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7777AD09B64B2600EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7777AE09B64B2600EA3033 /* XScreenSaverSubclass.m in Sources */, AF7777C609B64BD400EA3033 /* stonerview-move.c in Sources */, AF7777C709B64BD400EA3033 /* stonerview-osc.c in Sources */, AF7777C809B64BD400EA3033 /* stonerview-view.c in Sources */, AF7777C909B64BD400EA3033 /* stonerview.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7777D509B64C6B00EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7777D609B64C6B00EA3033 /* XScreenSaverSubclass.m in Sources */, AF7777E809B64CF700EA3033 /* glslideshow.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7777EF09B64E3100EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7777F009B64E3100EA3033 /* XScreenSaverSubclass.m in Sources */, AF77780209B64EC000EA3033 /* fliptext.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77781509B6504400EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77781609B6504400EA3033 /* XScreenSaverSubclass.m in Sources */, AF77782A09B650FF00EA3033 /* starwars.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77784A09B6528100EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77784B09B6528100EA3033 /* XScreenSaverSubclass.m in Sources */, AF77787C09B654F800EA3033 /* carousel.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77786609B6536000EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77786709B6536000EA3033 /* XScreenSaverSubclass.m in Sources */, AF77787709B653DC00EA3033 /* dnalogo.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77788409B6563500EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77788509B6563500EA3033 /* XScreenSaverSubclass.m in Sources */, AF77789309B656C300EA3033 /* fontglide.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7778AA09B659C800EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7778AB09B659C800EA3033 /* XScreenSaverSubclass.m in Sources */, AF7778BB09B65A8A00EA3033 /* blitspin.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF78D17A142DD8F3002AAF77 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF78D17B142DD8F3002AAF77 /* XScreenSaverSubclass.m in Sources */, AF78D17C142DD8F3002AAF77 /* voronoi.c in Sources */, AF78D18D142DD96E002AAF77 /* hilbert.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF794F69099748450059A8B0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF794F6A099748450059A8B0 /* XScreenSaverSubclass.m in Sources */, AF794F7F099748860059A8B0 /* demon.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF794F9309974A320059A8B0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF794F9409974A320059A8B0 /* XScreenSaverSubclass.m in Sources */, AF794FAA09974AE30059A8B0 /* fiberlamp.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF794FD209974FA60059A8B0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF794FD309974FA60059A8B0 /* XScreenSaverSubclass.m in Sources */, AF794FE109974FEC0059A8B0 /* loop.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7ACFC519FF0A9200BD752B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7ACFC719FF0A9200BD752B /* XScreenSaverSubclass.m in Sources */, AF7ACFD719FF0B7A00BD752B /* geodesicgears.c in Sources */, AFDDCCEC19FF0D170072365B /* involute.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF918985158FC00A002B5D1E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF918986158FC00A002B5D1E /* SaverRunner.m in Sources */, AF918987158FC00A002B5D1E /* main.m in Sources */, AF918988158FC00A002B5D1E /* SaverListController.m in Sources */, AF918993158FC2BE002B5D1E /* abstractile.c in Sources */, AF918994158FC2BE002B5D1E /* anemone.c in Sources */, AF918995158FC2E0002B5D1E /* analogtv.c in Sources */, AF918996158FC310002B5D1E /* anemotaxis.c in Sources */, AF918997158FC310002B5D1E /* apple2-main.c in Sources */, AF918998158FC310002B5D1E /* apple2.c in Sources */, AF918999158FC310002B5D1E /* asm6502.c in Sources */, AF91899A158FC310002B5D1E /* attraction.c in Sources */, AF91899B158FC310002B5D1E /* barcode.c in Sources */, AF73FF3A1A09889700E485E9 /* binaryring.c in Sources */, AF91899C158FC310002B5D1E /* blaster.c in Sources */, AF91899D158FC310002B5D1E /* blitspin.c in Sources */, AF91899E158FC310002B5D1E /* boxfit.c in Sources */, AF91899F158FC310002B5D1E /* bsod.c in Sources */, AF9189A0158FC310002B5D1E /* bubbles-default.c in Sources */, AF9189A2158FC310002B5D1E /* bumps.c in Sources */, AF9189A3158FC310002B5D1E /* ccurve.c in Sources */, AF9189A4158FC310002B5D1E /* celtic.c in Sources */, AF9189A5158FC310002B5D1E /* cloudlife.c in Sources */, AF9189AA158FC311002B5D1E /* compass.c in Sources */, AF9189AB158FC311002B5D1E /* coral.c in Sources */, AF9189AD158FC311002B5D1E /* cwaves.c in Sources */, AF9189AE158FC311002B5D1E /* cynosure.c in Sources */, AF9189AF158FC311002B5D1E /* decayscreen.c in Sources */, AF9189B0158FC311002B5D1E /* deco.c in Sources */, AF9189B1158FC311002B5D1E /* deluxe.c in Sources */, AF9189B2158FC311002B5D1E /* distort.c in Sources */, AF9189B3158FC311002B5D1E /* epicycle.c in Sources */, AF9189B4158FC311002B5D1E /* eruption.c in Sources */, AF9189B5158FC311002B5D1E /* fireworkx.c in Sources */, AF9189B6158FC334002B5D1E /* flame.c in Sources */, AF9189B7158FC334002B5D1E /* fluidballs.c in Sources */, AF9189B8158FC334002B5D1E /* fontglide.c in Sources */, AF9189B9158FC334002B5D1E /* fps.c in Sources */, AF9189BA158FC334002B5D1E /* fuzzyflakes.c in Sources */, AF9189BB158FC334002B5D1E /* goop.c in Sources */, AF9189BC158FC334002B5D1E /* greynetic.c in Sources */, AF9189BD158FC334002B5D1E /* halftone.c in Sources */, AF9189BE158FC334002B5D1E /* halo.c in Sources */, AF9189BF158FC334002B5D1E /* helix.c in Sources */, AF9189C2158FC334002B5D1E /* ifs.c in Sources */, AF9189C3158FC334002B5D1E /* imsmap.c in Sources */, AF9189C4158FC334002B5D1E /* interaggregate.c in Sources */, AF9189C5158FC334002B5D1E /* interference.c in Sources */, AF9189C6158FC334002B5D1E /* intermomentary.c in Sources */, AF9189C7158FC334002B5D1E /* kaleidescope.c in Sources */, AF9189C8158FC334002B5D1E /* kumppa.c in Sources */, AF9189CB158FC334002B5D1E /* m6502.c in Sources */, AF9189CC158FC334002B5D1E /* maze.c in Sources */, AF9189CD158FC334002B5D1E /* memscroller.c in Sources */, AF9189CE158FC334002B5D1E /* metaballs.c in Sources */, AF9189CF158FC334002B5D1E /* moire.c in Sources */, AF9189D0158FC334002B5D1E /* moire2.c in Sources */, AF9189D1158FC334002B5D1E /* munch.c in Sources */, AF9189D2158FC334002B5D1E /* nerverot.c in Sources */, AF9189D3158FC334002B5D1E /* noseguy.c in Sources */, AF9189D4158FC334002B5D1E /* pedal.c in Sources */, AF9189D5158FC334002B5D1E /* penetrate.c in Sources */, AF9189D6158FC334002B5D1E /* petri.c in Sources */, AF9189D7158FC334002B5D1E /* phosphor.c in Sources */, AF9189D8158FC334002B5D1E /* piecewise.c in Sources */, AF9189D9158FC334002B5D1E /* pong.c in Sources */, AF9189DA158FC334002B5D1E /* popsquares.c in Sources */, AF9189DB158FC334002B5D1E /* pyro.c in Sources */, AF9189DC158FC334002B5D1E /* qix.c in Sources */, AF9189DD158FC334002B5D1E /* rd-bomb.c in Sources */, AF9189DE158FC334002B5D1E /* ripples.c in Sources */, AF9189DF158FC35D002B5D1E /* rocks.c in Sources */, AF9189E0158FC35D002B5D1E /* rorschach.c in Sources */, AF9189E1158FC35D002B5D1E /* rotzoomer.c in Sources */, AF9189E2158FC35D002B5D1E /* shadebobs.c in Sources */, AF9189E3158FC35D002B5D1E /* slidescreen.c in Sources */, AF9189E4158FC35D002B5D1E /* speedmine.c in Sources */, AF9189E5158FC35D002B5D1E /* spotlight.c in Sources */, AF9189E6158FC35D002B5D1E /* squiral.c in Sources */, AF9189E7158FC35D002B5D1E /* starfish.c in Sources */, AF9189E8158FC35D002B5D1E /* substrate.c in Sources */, CE3D016D1B76FF1600993C75 /* testx11.c in Sources */, AF9189EF158FC35D002B5D1E /* truchet.c in Sources */, AF9189F0158FC35D002B5D1E /* twang.c in Sources */, AF9189F1158FC35D002B5D1E /* vermiculate.c in Sources */, AF9189F2158FC35D002B5D1E /* wander.c in Sources */, AF9189F3158FC35E002B5D1E /* whirlwindwarp.c in Sources */, AF9189F5158FC35E002B5D1E /* wormhole.c in Sources */, AF9189F6158FC35E002B5D1E /* xanalogtv.c in Sources */, AF9189F7158FC35E002B5D1E /* xflame.c in Sources */, AF9189F8158FC35E002B5D1E /* xjack.c in Sources */, AF9189F9158FC35E002B5D1E /* xlyap.c in Sources */, AF9189FA158FC35E002B5D1E /* xmatrix.c in Sources */, AF9189FB158FC35E002B5D1E /* xrayswarm.c in Sources */, AF9189FC158FC35E002B5D1E /* xspirograph.c in Sources */, AF9189FD158FC35E002B5D1E /* zoom.c in Sources */, AF9189FF158FC38A002B5D1E /* apollonian.c in Sources */, AF918A00158FC38A002B5D1E /* bouboule.c in Sources */, AF918A01158FC38A002B5D1E /* braid.c in Sources */, AF918A02158FC38A002B5D1E /* crystal.c in Sources */, AF918A03158FC38A002B5D1E /* demon.c in Sources */, AF918A04158FC38A002B5D1E /* discrete.c in Sources */, AF918A05158FC38A002B5D1E /* drift.c in Sources */, AF918A06158FC38A002B5D1E /* euler2d.c in Sources */, AF918A07158FC38A002B5D1E /* fadeplot.c in Sources */, AF918A08158FC38A002B5D1E /* fiberlamp.c in Sources */, AF918A0A158FC38A002B5D1E /* flow.c in Sources */, AF918A0C158FC38A002B5D1E /* galaxy.c in Sources */, AF918A0D158FC38A002B5D1E /* grav.c in Sources */, AFB591C1178B81E600EA4005 /* hexadrop.c in Sources */, AF918A0E158FC38A002B5D1E /* hopalong.c in Sources */, AF918A11158FC38A002B5D1E /* julia.c in Sources */, AF918A16158FC38A002B5D1E /* loop.c in Sources */, AF918A17158FC38A002B5D1E /* mountain.c in Sources */, AF918A18158FC38A002B5D1E /* pacman.c in Sources */, AF918A19158FC38A002B5D1E /* pacman_ai.c in Sources */, AF918A1A158FC38A002B5D1E /* pacman_level.c in Sources */, AF918A1B158FC38A002B5D1E /* penrose.c in Sources */, AF918A1C158FC38A002B5D1E /* polyominoes.c in Sources */, AF918A1E158FC38A002B5D1E /* sierpinski.c in Sources */, AF918A1F158FC38A002B5D1E /* slip.c in Sources */, AF918A22158FC38A002B5D1E /* strange.c in Sources */, AF918A23158FC38A002B5D1E /* swirl.c in Sources */, AF68A49A19196E3E00D41CD1 /* tessellimage.c in Sources */, AF918A24158FC38A002B5D1E /* thornbird.c in Sources */, AF68A49C19196E3E00D41CD1 /* delaunay.c in Sources */, AF918A25158FC38A002B5D1E /* triangle.c in Sources */, AF918A28158FC3BB002B5D1E /* antinspect.c in Sources */, AF918A29158FC3BB002B5D1E /* antmaze.c in Sources */, AF918A2A158FC3BB002B5D1E /* antspotlight.c in Sources */, AF918A2B158FC3BB002B5D1E /* atlantis.c in Sources */, AF918A2C158FC3BB002B5D1E /* atunnel.c in Sources */, AF918A2D158FC3BB002B5D1E /* b_draw.c in Sources */, AF918A2E158FC3BB002B5D1E /* b_lockglue.c in Sources */, AF918A2F158FC3BB002B5D1E /* b_sphere.c in Sources */, AF918A30158FC3BB002B5D1E /* blinkbox.c in Sources */, AF918A31158FC3BB002B5D1E /* blocktube.c in Sources */, AF918A32158FC3BB002B5D1E /* boing.c in Sources */, AF918A33158FC3BB002B5D1E /* bouncingcow.c in Sources */, AF918A34158FC3BB002B5D1E /* boxed.c in Sources */, AF918A35158FC3BB002B5D1E /* bubble3d.c in Sources */, AF918A36158FC3BB002B5D1E /* buildlwo.c in Sources */, AF918A37158FC3BB002B5D1E /* cage.c in Sources */, AF918A38158FC3BB002B5D1E /* carousel.c in Sources */, AF918A39158FC3BB002B5D1E /* chessmodels.c in Sources */, AF918A3A158FC3BB002B5D1E /* circuit.c in Sources */, AF5C9B141A0CCF4E00B0147A /* cityflow.c in Sources */, AF9189A6158FC310002B5D1E /* companion.c in Sources */, AF9189A7158FC311002B5D1E /* companion_disc.c in Sources */, AF9189A8158FC311002B5D1E /* companion_heart.c in Sources */, AF9189A9158FC311002B5D1E /* companion_quad.c in Sources */, AF918A3B158FC3BB002B5D1E /* cow_face.c in Sources */, AF918A3C158FC3BB002B5D1E /* cow_hide.c in Sources */, AF918A3D158FC3BB002B5D1E /* cow_hoofs.c in Sources */, AF918A3E158FC3BB002B5D1E /* cow_horns.c in Sources */, AF918A3F158FC3BB002B5D1E /* cow_tail.c in Sources */, AF918A40158FC3BB002B5D1E /* cow_udder.c in Sources */, AF918A41158FC3BB002B5D1E /* crackberg.c in Sources */, AF918A42158FC3BB002B5D1E /* cube21.c in Sources */, AF918A43158FC3BB002B5D1E /* cubenetic.c in Sources */, AF918A44158FC3BB002B5D1E /* cubestorm.c in Sources */, AF918A45158FC3BB002B5D1E /* cubicgrid.c in Sources */, AF918A46158FC3BB002B5D1E /* dangerball.c in Sources */, AFCF453715986A2100E6E8CC /* dnalogo.c in Sources */, AF918A48158FC3BB002B5D1E /* dolphin.c in Sources */, AF918A49158FC3BB002B5D1E /* dropshadow.c in Sources */, AF918A4A158FC3E5002B5D1E /* endgame.c in Sources */, AF918A4B158FC3E5002B5D1E /* engine.c in Sources */, AF918A54158FC3E5002B5D1E /* flipflop.c in Sources */, AF918A55158FC3E5002B5D1E /* flipscreen3d.c in Sources */, AF918A56158FC3E5002B5D1E /* fliptext.c in Sources */, AF918A57158FC3E5002B5D1E /* flyingtoasters.c in Sources */, AF918A59158FC3E5002B5D1E /* fps-gl.c in Sources */, AF918A5A158FC3E5002B5D1E /* gears.c in Sources */, AFDDCCED19FF0EBD0072365B /* geodesicgears.c in Sources */, AF918A5B158FC3E5002B5D1E /* gflux.c in Sources */, AF918A5C158FC3E5002B5D1E /* glblur.c in Sources */, AF918A5D158FC3E5002B5D1E /* glcells.c in Sources */, AF918A5E158FC3E5002B5D1E /* gleidescope.c in Sources */, AF918A60158FC3E5002B5D1E /* glhanoi.c in Sources */, AF918A61158FC3E5002B5D1E /* glknots.c in Sources */, AF918A62158FC3E5002B5D1E /* glmatrix.c in Sources */, AF918A63158FC3E5002B5D1E /* glplanet.c in Sources */, AF918A64158FC3E5002B5D1E /* glschool.c in Sources */, AF918A65158FC3E5002B5D1E /* glschool_alg.c in Sources */, AF918A66158FC3E5002B5D1E /* glschool_gl.c in Sources */, AF918A67158FC3E5002B5D1E /* glslideshow.c in Sources */, AF918A68158FC3E5002B5D1E /* glsnake.c in Sources */, AF918A69158FC3E5002B5D1E /* gltext.c in Sources */, AF918A6A158FC3E5002B5D1E /* hilbert.c in Sources */, AF918A6B158FC3E5002B5D1E /* hypertorus.c in Sources */, AF918A6C158FC3E5002B5D1E /* hypnowheel.c in Sources */, AF918A6D158FC3E5002B5D1E /* involute.c in Sources */, AF918A6E158FC417002B5D1E /* jigglypuff.c in Sources */, AF39483E15A164680000FFCD /* jigsaw.c in Sources */, AF918A6F158FC417002B5D1E /* juggler3d.c in Sources */, AFB8A69D1782BFA6004EDB85 /* kaleidocycle.c in Sources */, AF918A70158FC417002B5D1E /* klein.c in Sources */, AF918A71158FC417002B5D1E /* lament.c in Sources */, AFF1BA1019A96D8B0016A88D /* lament_model.c in Sources */, AF918A72158FC417002B5D1E /* lavalite.c in Sources */, AF918A74158FC417002B5D1E /* marching.c in Sources */, AF918A75158FC417002B5D1E /* menger.c in Sources */, AF918A76158FC417002B5D1E /* mirrorblob.c in Sources */, AF918A77158FC417002B5D1E /* moebius.c in Sources */, AFF3CA0417CCAEB70028F240 /* geodesic.c in Sources */, AF918A78158FC417002B5D1E /* moebiusgears.c in Sources */, AF918A79158FC417002B5D1E /* molecule.c in Sources */, AF918A7A158FC417002B5D1E /* morph3d.c in Sources */, AF918A7B158FC417002B5D1E /* noof.c in Sources */, AFFAB33319158EA80020F021 /* projectiveplane.c in Sources */, AF918A7C158FC417002B5D1E /* photopile.c in Sources */, AF918A7D158FC417002B5D1E /* pinion.c in Sources */, AF918A7E158FC417002B5D1E /* pipeobjs.c in Sources */, AF918A7F158FC417002B5D1E /* pipes.c in Sources */, AFCF4545159878C300E6E8CC /* polyhedra-gl.c in Sources */, AFCF4546159878C300E6E8CC /* polyhedra.c in Sources */, AF918A82158FC417002B5D1E /* polytopes.c in Sources */, AF918A83158FC417002B5D1E /* providence.c in Sources */, AF918A84158FC417002B5D1E /* pulsar.c in Sources */, AFF28699178611720050A578 /* quasicrystal.c in Sources */, AF918A85158FC417002B5D1E /* queens.c in Sources */, AFBE744119A7C6EF0018AA35 /* robot.c in Sources */, AF39E2B7198A15EE0064A58D /* robot-wireframe.c in Sources */, AF63A80D1AB4EF5D00593C75 /* romanboy.c in Sources */, AF918A86158FC417002B5D1E /* rubik.c in Sources */, AF918A87158FC417002B5D1E /* rubikblocks.c in Sources */, AF918A88158FC417002B5D1E /* s1_1.c in Sources */, AF918A89158FC417002B5D1E /* s1_2.c in Sources */, AF918A8A158FC417002B5D1E /* s1_3.c in Sources */, AF918A8B158FC417002B5D1E /* s1_4.c in Sources */, AF918A8C158FC417002B5D1E /* s1_5.c in Sources */, AF918A8D158FC417002B5D1E /* s1_6.c in Sources */, AF918A8E158FC417002B5D1E /* s1_b.c in Sources */, AF918A8F158FC417002B5D1E /* sballs.c in Sources */, AF918A90158FC417002B5D1E /* shark.c in Sources */, AF918A91158FC417002B5D1E /* sierpinski3d.c in Sources */, AF918A92158FC417002B5D1E /* skytentacles.c in Sources */, AF918A93158FC417002B5D1E /* sonar-icmp.c in Sources */, AF918A94158FC417002B5D1E /* sonar-sim.c in Sources */, AF918A95158FC417002B5D1E /* sonar.c in Sources */, AF918A96158FC417002B5D1E /* spheremonics.c in Sources */, AFCF835A1AF5B5FD008BB7E1 /* splitflap.c in Sources */, AFCF83581AF5B5FD008BB7E1 /* splitflap_obj.c in Sources */, AF918A97158FC473002B5D1E /* sproingies.c in Sources */, AF918A98158FC473002B5D1E /* sproingiewrap.c in Sources */, AF918A99158FC473002B5D1E /* stairs.c in Sources */, AF918A9A158FC473002B5D1E /* starwars.c in Sources */, AF918A9B158FC473002B5D1E /* stonerview-move.c in Sources */, AF918A9C158FC473002B5D1E /* stonerview-osc.c in Sources */, AF918A9D158FC473002B5D1E /* stonerview-view.c in Sources */, AF918A9E158FC473002B5D1E /* stonerview.c in Sources */, AF918A9F158FC473002B5D1E /* superquadrics.c in Sources */, AF918AA0158FC473002B5D1E /* surfaces.c in Sources */, AF918AA1158FC473002B5D1E /* swim.c in Sources */, AF918AA2158FC473002B5D1E /* tangram.c in Sources */, AF918AA3158FC473002B5D1E /* tangram_shapes.c in Sources */, AF918AA4158FC473002B5D1E /* teapot.c in Sources */, AF918AA5158FC473002B5D1E /* timetunnel.c in Sources */, AF918AA6158FC473002B5D1E /* toast.c in Sources */, AF918AA7158FC473002B5D1E /* toast2.c in Sources */, AF918AA8158FC473002B5D1E /* toaster.c in Sources */, AF918AA9158FC473002B5D1E /* toaster_base.c in Sources */, AF918AAA158FC473002B5D1E /* toaster_handle.c in Sources */, AF918AAB158FC473002B5D1E /* toaster_handle2.c in Sources */, AF918AAC158FC473002B5D1E /* toaster_jet.c in Sources */, AF918AAD158FC473002B5D1E /* toaster_knob.c in Sources */, AF918AAE158FC473002B5D1E /* toaster_slots.c in Sources */, AF918AAF158FC473002B5D1E /* toaster_wing.c in Sources */, AF918AB0158FC473002B5D1E /* topblock.c in Sources */, AF9189EA158FC35D002B5D1E /* tronbit.c in Sources */, AF9189EB158FC35D002B5D1E /* tronbit_idle1.c in Sources */, AF9189EC158FC35D002B5D1E /* tronbit_idle2.c in Sources */, AF9189ED158FC35D002B5D1E /* tronbit_no.c in Sources */, AF9189EE158FC35D002B5D1E /* tronbit_yes.c in Sources */, AF918AB1158FC47B002B5D1E /* tunnel_draw.c in Sources */, AFDA65A8178A541A0070D24B /* unknownpleasures.c in Sources */, AF918AB2158FC47B002B5D1E /* voronoi.c in Sources */, AF918AB3158FC47B002B5D1E /* whale.c in Sources */, AF39E2B8198A15EE0064A58D /* winduprobot.c in Sources */, AFAA6B451773F07800DE720C /* ios-function-table.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975732099C317000B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975734099C317000B05160 /* XScreenSaverSubclass.m in Sources */, AF975741099C31DD00B05160 /* imsmap.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF97577A099C374A00B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF97577B099C374A00B05160 /* XScreenSaverSubclass.m in Sources */, AF97578A099C37A500B05160 /* moire.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9757C7099C3E6300B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9757C8099C3E6300B05160 /* XScreenSaverSubclass.m in Sources */, AF9757D6099C3EB800B05160 /* rd-bomb.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF97580D099C41D500B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF97580E099C41D500B05160 /* XScreenSaverSubclass.m in Sources */, AF975830099C427500B05160 /* xflame.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF97586A099C475900B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF97586B099C475900B05160 /* XScreenSaverSubclass.m in Sources */, AF97587B099C492000B05160 /* shadebobs.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975A3B099C681F00B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975A3C099C681F00B05160 /* XScreenSaverSubclass.m in Sources */, AF975A4A099C689F00B05160 /* metaballs.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975A71099C6AB200B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975A72099C6AB200B05160 /* XScreenSaverSubclass.m in Sources */, AF975A84099C6B4900B05160 /* eruption.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975A8B099C6BC300B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975A8C099C6BC300B05160 /* XScreenSaverSubclass.m in Sources */, AF975A9A099C6C3600B05160 /* barcode.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975ADC099C6EB100B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975ADD099C6EB100B05160 /* XScreenSaverSubclass.m in Sources */, AF975AEF099C6F1700B05160 /* fireworkx.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975B01099C6FE400B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975B02099C6FE400B05160 /* XScreenSaverSubclass.m in Sources */, AF975B15099C709E00B05160 /* memscroller.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975C17099C8C1500B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975C18099C8C1500B05160 /* XScreenSaverSubclass.m in Sources */, AF975C29099C8C7600B05160 /* halo.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975C43099C8DCF00B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975C44099C8DCF00B05160 /* XScreenSaverSubclass.m in Sources */, AF975C56099C8E3000B05160 /* greynetic.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975C63099C8F3F00B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975C64099C8F3F00B05160 /* XScreenSaverSubclass.m in Sources */, AF975C77099C8FC700B05160 /* noseguy.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975D58099CA0F000B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975D59099CA0F000B05160 /* XScreenSaverSubclass.m in Sources */, AF975D67099CA16A00B05160 /* rocks.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF976FB90989CAA2001F8B92 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF976FCC0989CAD7001F8B92 /* deco.c in Sources */, AF9CCAB809959D0D0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF97702C0989D1E6001F8B92 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9770420989D21A001F8B92 /* rorschach.c in Sources */, AF9CCABC09959D200075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9770690989D2F6001F8B92 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF97707F0989D327001F8B92 /* attraction.c in Sources */, AF9CC8EE09958D920075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9771D40989DC4A001F8B92 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9771DF0989DC88001F8B92 /* SaverRunner.m in Sources */, AF9772C80989DCD5001F8B92 /* main.m in Sources */, AF84AF2015829AF000607E4C /* SaverListController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF998EDF0A083DB30051049D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF998EE10A083DB30051049D /* XScreenSaverSubclass.m in Sources */, AF998EF90A083E750051049D /* topblock.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D466B09B5109C006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D466D09B5109C006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D467909B5110B006E59CF /* decayscreen.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D474909B5300A006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D474A09B5300A006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D475909B53091006E59CF /* slidescreen.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D476409B53166006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D476509B53166006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D48D509B53229006E59CF /* zoom.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D48E009B53322006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D48E109B53322006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D48F009B533AE006E59CF /* bumps.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D48F909B535DA006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D48FA09B535DA006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D490809B536F7006E59CF /* distort.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D493009B53CBA006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D493109B53CBA006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D493F09B53D55006E59CF /* ripples.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D495909B53FC9006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D495A09B53FC9006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D496809B540A4006E59CF /* rotzoomer.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D497109B5411D006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D497209B5411D006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D498009B541E6006E59CF /* twang.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D499C09B544C2006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D499D09B544C2006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D49AB09B54596006E59CF /* spotlight.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4C6E09B59F27006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D4C6F09B59F27006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D4C7D09B5A044006E59CF /* xlyap.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4CEC09B5AA8E006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D4CED09B5AA8E006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D4CFD09B5AC94006E59CF /* analogtv.c in Sources */, AF9D4CFE09B5AC94006E59CF /* pong.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4D8309B5B2DC006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D4D8409B5B2DC006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D4D8509B5B2DC006E59CF /* analogtv.c in Sources */, AF9D4D9309B5B444006E59CF /* xanalogtv.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4DB409B5B71E006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D4DB509B5B71E006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D4DB609B5B71E006E59CF /* analogtv.c in Sources */, AF9D4DC409B5B87D006E59CF /* bsod.c in Sources */, AF9D4DD409B5B990006E59CF /* apple2.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4DF109B5BB19006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D4DF209B5BB19006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D4DF309B5BB19006E59CF /* analogtv.c in Sources */, AF9D4DF509B5BB19006E59CF /* apple2.c in Sources */, AF9D4E0609B5BC9D006E59CF /* apple2-main.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9E7EBB190F4C1B00A8B01F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9E7EC9190F4C4000A8B01F /* enable_gc.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA339340B058505002B0E7D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA339350B058505002B0E7D /* XScreenSaverSubclass.m in Sources */, AFA33BAF0B0585F7002B0E7D /* webcollage-cocoa.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA33BC40B058740002B0E7D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA33BD10B0587EE002B0E7D /* webcollage-helper-cocoa.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5594B099330B000F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5595E0993310500F3E977 /* cage.c in Sources */, AF9CCAB709959D000075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559720993317900F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55983099331C300F3E977 /* moebius.c in Sources */, AF9CCABF09959D2E0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559970993322100F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA559A90993326300F3E977 /* superquadrics.c in Sources */, AF9CCAC109959D380075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559BA0993328000F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA559CD099332E800F3E977 /* morph3d.c in Sources */, AF9CCAC009959D310075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559D40993330600F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA559EB0993335C00F3E977 /* rubik.c in Sources */, AF9CCABE09959D290075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A080993340300F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55A1B0993345900F3E977 /* stairs.c in Sources */, AF9CCAC209959D3C0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A25099334A000F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55A4A0993351F00F3E977 /* s1_1.c in Sources */, AFA55A4B0993351F00F3E977 /* s1_2.c in Sources */, AFA55A4C0993351F00F3E977 /* s1_3.c in Sources */, AFA55A4D0993351F00F3E977 /* s1_4.c in Sources */, AFA55A4E0993351F00F3E977 /* s1_5.c in Sources */, AFA55A4F0993351F00F3E977 /* s1_6.c in Sources */, AFA55A500993351F00F3E977 /* s1_b.c in Sources */, AFA55A510993351F00F3E977 /* sproingies.c in Sources */, AFA55A520993351F00F3E977 /* sproingiewrap.c in Sources */, AF9CCAC309959D420075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A7E0993364300F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55A8F0993369100F3E977 /* lament.c in Sources */, AFF1BA0F19A96D8B0016A88D /* lament_model.c in Sources */, AF9CCAC409959D450075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55AD409933CEF00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55AE509933D3800F3E977 /* bubble3d.c in Sources */, AFA55AF709933DBF00F3E977 /* b_draw.c in Sources */, AFA55AF809933DBF00F3E977 /* b_lockglue.c in Sources */, AFA55AF909933DBF00F3E977 /* b_sphere.c in Sources */, AF9CCAC509959D4B0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B0E09933E0500F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55B2209933E4A00F3E977 /* glplanet.c in Sources */, AF9CCAC609959D500075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B2A09933E8D00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55B4509933EF800F3E977 /* pulsar.c in Sources */, AF9CCAC709959D550075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B7E09933F7200F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55B8F09933FBF00F3E977 /* sierpinski3d.c in Sources */, AF9CCAC809959D5A0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B9609933FDA00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55BA70993401A00F3E977 /* gflux.c in Sources */, AF9CCAC909959D5D0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55BB0099340CE00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55BC10993416E00F3E977 /* circuit.c in Sources */, AF9CCACA09959D630075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55BE90993429100F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55BFA099342D500F3E977 /* menger.c in Sources */, AF9CCACB09959D680075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55C130993431300F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55C240993435300F3E977 /* engine.c in Sources */, AF9CCACC09959D6B0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55C7C099349A600F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55C8D099349EE00F3E977 /* glsnake.c in Sources */, AF9CCACD09959D720075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55CAE09934BB200F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55CC009934C0900F3E977 /* boxed.c in Sources */, AF9CCACE09959D750075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55CD109934CE400F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55CE209934D2E00F3E977 /* glforestfire.c in Sources */, AF9CCACF09959D7C0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D410993565300F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55D520993569C00F3E977 /* sballs.c in Sources */, AF9CCAD009959D800075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D670993584B00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55D780993589300F3E977 /* cubenetic.c in Sources */, AF9CCAD109959D850075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D84099358C400F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55D950993590F00F3E977 /* spheremonics.c in Sources */, AF9CCAD209959D8A0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55DCD09935D7000F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55DDE09935DB600F3E977 /* lavalite.c in Sources */, AFA55DE309935DFB00F3E977 /* marching.c in Sources */, AF9CCAD309959D8F0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55DF509935E4900F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55E0709935EB800F3E977 /* queens.c in Sources */, AF9CCAD409959D980075E99B /* XScreenSaverSubclass.m in Sources */, AF012918157C1E4C00C396E1 /* chessmodels.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E1209935EDC00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55E2609935F2B00F3E977 /* chessmodels.c in Sources */, AFA55E2709935F2B00F3E977 /* endgame.c in Sources */, AF9CCAD509959D9C0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E3409935F8E00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55E4609935FD300F3E977 /* glblur.c in Sources */, AF9CCAD609959DA30075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E5309935FF900F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55EAD0993608800F3E977 /* flyingtoasters.c in Sources */, AFA55EAE0993608800F3E977 /* toast.c in Sources */, AFA55EB00993608800F3E977 /* toast2.c in Sources */, AFA55EB20993608800F3E977 /* toaster_base.c in Sources */, AFA55EB40993608800F3E977 /* toaster_handle.c in Sources */, AFA55EB60993608800F3E977 /* toaster_handle2.c in Sources */, AFA55EB80993608800F3E977 /* toaster_jet.c in Sources */, AFA55EBA0993608800F3E977 /* toaster_knob.c in Sources */, AFA55EBC0993608800F3E977 /* toaster_slots.c in Sources */, AFA55EBE0993608800F3E977 /* toaster_wing.c in Sources */, AFA55EC00993608800F3E977 /* toaster.c in Sources */, AF9CCAD709959DA70075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55ECC099360E300F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55EEE0993613E00F3E977 /* bouncingcow.c in Sources */, AFA55EEF0993613E00F3E977 /* cow_face.c in Sources */, AFA55EF00993613E00F3E977 /* cow_hide.c in Sources */, AFA55EF10993613E00F3E977 /* cow_hoofs.c in Sources */, AFA55EF20993613E00F3E977 /* cow_horns.c in Sources */, AFA55EF30993613E00F3E977 /* cow_tail.c in Sources */, AFA55EF40993613E00F3E977 /* cow_udder.c in Sources */, AF9CCAD809959DAE0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F0B099361B700F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55F220993620200F3E977 /* jigglypuff.c in Sources */, AF9CCAD909959DB20075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F2F0993622F00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55F400993626E00F3E977 /* klein.c in Sources */, AF9CCADA09959DB60075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F470993629000F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55F5A099362DF00F3E977 /* hypertorus.c in Sources */, AF9CCADB09959DBB0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F770993643600F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55F880993648500F3E977 /* glmatrix.c in Sources */, AF9CCADC09959DC10075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55FD809936BFA00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55FF409936C4500F3E977 /* cubestorm.c in Sources */, AF9CCADD09959DC60075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55FFE09936C6D00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5600F09936CB300F3E977 /* glknots.c in Sources */, AF9CCADE09959DCB0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5601909936CC800F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5602A09936D0700F3E977 /* blocktube.c in Sources */, AF9CCADF09959DCE0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5603709936D5100F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5604809936DCC00F3E977 /* flipflop.c in Sources */, AF9CCAE009959DD50075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5604F09936E2100F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5608109936FFA00F3E977 /* antinspect.c in Sources */, AF9CCAE109959DDA0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5606709936F3800F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5607B09936FDD00F3E977 /* antspotlight.c in Sources */, AF9CCAE209959DDF0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA560B30993718D00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA560C4099371D500F3E977 /* polytopes.c in Sources */, AF9CCAE309959DE20075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA561020993781600F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA561130993786800F3E977 /* molecule.c in Sources */, AF9CCAE409959DE60075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5615D09937C0D00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5616E09937C9A00F3E977 /* blinkbox.c in Sources */, AF9CCAE509959DEB0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5618009937CF100F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5619109937D3600F3E977 /* noof.c in Sources */, AF9CCAE609959DF00075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA561A209937D7E00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA561B509937DCC00F3E977 /* polyhedra-gl.c in Sources */, AFA561B609937DCC00F3E977 /* polyhedra.c in Sources */, AF9CCAE709959DF50075E99B /* XScreenSaverSubclass.m in Sources */, AFC211950E4E30C800D87B6E /* teapot.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5620B0993849F00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5621D099384F600F3E977 /* providence.c in Sources */, AF9CCAE809959DF90075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562240993852500F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA562350993856A00F3E977 /* pinion.c in Sources */, AF9CCAE909959E000075E99B /* XScreenSaverSubclass.m in Sources */, AFE6A16C0CDD78EA002805BF /* involute.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562C4099392C600F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA562D50993930C00F3E977 /* boing.c in Sources */, AF9CCAEA09959E050075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562DF099393C900F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA562F00993941600F3E977 /* antmaze.c in Sources */, AF9CCAEB09959E090075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562F70993943B00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5630A0993948F00F3E977 /* tangram_shapes.c in Sources */, AFA5630B0993948F00F3E977 /* tangram.c in Sources */, AF9CCAEC09959E0D0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA563180993951000F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5632A0993957100F3E977 /* crackberg.c in Sources */, AF9CCAED09959E140075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA56336099395ED00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA563750993977D00F3E977 /* glhanoi.c in Sources */, AF9CCAEE09959E170075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA56356099396C000F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA563760993978D00F3E977 /* cube21.c in Sources */, AF9CCAEF09959E1E0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5637E099397B300F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5638F0993980D00F3E977 /* timetunnel.c in Sources */, AF9CCAF009959E230075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA563A9099398BB00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA563BA0993991300F3E977 /* juggler3d.c in Sources */, AF9CCAF109959E270075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFB591AC178B812C00EA4005 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFB591AE178B812C00EA4005 /* XScreenSaverSubclass.m in Sources */, AFB591C0178B81E600EA4005 /* hexadrop.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFBFE751178642DC00432B21 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFBFE752178642DC00432B21 /* SaverRunner.m in Sources */, AFBFE753178642DC00432B21 /* main.m in Sources */, AFBFE754178642DC00432B21 /* SaverListController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFBFE771178647FE00432B21 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFBFE772178647FE00432B21 /* SaverRunner.m in Sources */, AFBFE773178647FE00432B21 /* main.m in Sources */, AFBFE774178647FE00432B21 /* SaverListController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFCF83401AF5B515008BB7E1 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFCF83421AF5B515008BB7E1 /* XScreenSaverSubclass.m in Sources */, AFCF83571AF5B5FD008BB7E1 /* splitflap_obj.c in Sources */, AFCF83591AF5B5FD008BB7E1 /* splitflap.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD51B210F063B4A00471C02 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD51B220F063B4A00471C02 /* XScreenSaverSubclass.m in Sources */, AFD51DB70F063BCE00471C02 /* photopile.c in Sources */, AF241F83107C38DF00046A84 /* dropshadow.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56DF60996A03800BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56DF80996A03800BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD56E090996A07A00BA26F7 /* gltext.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56EB30996A72600BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56EB50996A72600BA26F7 /* XScreenSaverSubclass.m in Sources */, AF64232F099F45C3000F4CD4 /* braid.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56EDF0996A95700BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56EE00996A95700BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD56EEE0996A99E00BA26F7 /* forest.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F100996AAFA00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F110996AAFA00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD56F200996AB5A00BA26F7 /* vines.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F280996AB8A00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F290996AB8A00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD56F370996ABD200BA26F7 /* galaxy.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F540996AEEE00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F550996AEEE00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD56F630996AF2D00BA26F7 /* grav.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F700996B01600BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F710996B01600BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD56F890996B06600BA26F7 /* hopalong.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F910996B09400BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F920996B09400BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD56FA10996B0E500BA26F7 /* laser.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FA80996B10F00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56FA90996B10F00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD56FB70996B16300BA26F7 /* lightning.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FBE0996B18F00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56FBF0996B18F00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD56FCD0996B1D600BA26F7 /* lisa.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FD40996B20900BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56FD50996B20900BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD56FE30996B26200BA26F7 /* lissie.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FFD0996B43800BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56FFE0996B43800BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD5700D0996B49D00BA26F7 /* penrose.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570140996B4CC00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570150996B4CC00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD570230996B52700BA26F7 /* sierpinski.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5702B0996B56D00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD5702C0996B56D00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD5703C0996B5E300BA26F7 /* sphere.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570480996B61600BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570490996B61600BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD570570996B67600BA26F7 /* spiral.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5705E0996B6A300BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD5705F0996B6A300BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD5706D0996B70000BA26F7 /* fadeplot.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570740996B72700BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570750996B72700BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD570830996B79300BA26F7 /* mountain.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5708A0996B80300BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD5708B0996B80300BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD570990996B86200BA26F7 /* triangle.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570A00996B88E00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570A10996B88E00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD570AF0996B8EF00BA26F7 /* worm.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570B60996B93000BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570B70996B93000BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD570C50996B98500BA26F7 /* rotor.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570CE0996B9F800BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570CF0996B9F800BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD570DF0996BA5D00BA26F7 /* ant.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570EF0996BBBF00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570F00996BBBF00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD571020996BC3800BA26F7 /* flow.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD571180996BE9300BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD571190996BE9300BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD571290996BEF700BA26F7 /* discrete.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD571310996BF2E00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD571320996BF2E00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD571400996BFBE00BA26F7 /* apollonian.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD571480996C01700BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD571490996C01700BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD571570996C07F00BA26F7 /* euler2d.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5715E0996C0CE00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD5715F0996C0CE00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD5716C0996C16700BA26F7 /* thornbird.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD571BA0996D9DC00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD571BB0996D9DC00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD571C90996DA4600BA26F7 /* juggle.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572270996E4A300BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD572280996E4A300BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD572360996E53E00BA26F7 /* swirl.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572720996EE8500BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD572730996EE8500BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD572810996EF2B00BA26F7 /* polyominoes.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572AA0996F99600BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD572AB0996F99600BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD572BA0996FB3D00BA26F7 /* bouboule.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572C70996FC0F00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD572C80996FC0F00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD572EE0997006E00BA26F7 /* crystal.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572FE099701C000BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD572FF099701C000BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD5730D099702C800BA26F7 /* julia.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD573620997411200BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD573630997411200BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD57372099741A200BA26F7 /* strange.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFDA6593178A52B70070D24B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFDA6595178A52B70070D24B /* XScreenSaverSubclass.m in Sources */, AFDA65A7178A541A0070D24B /* unknownpleasures.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE2A45B0E2E904600ADB298 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFE2A45C0E2E904600ADB298 /* XScreenSaverSubclass.m in Sources */, AFE2A4730E2E90E300ADB298 /* skytentacles.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE30BED0E52B14700CCF4A5 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFE30BEE0E52B14700CCF4A5 /* XScreenSaverSubclass.m in Sources */, AFE30C020E52B1DC00CCF4A5 /* sonar-icmp.c in Sources */, AFE30C030E52B1DC00CCF4A5 /* sonar-sim.c in Sources */, AFE30C040E52B1DC00CCF4A5 /* sonar.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE6A1870CDD7B2E002805BF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFE6A1890CDD7B2E002805BF /* XScreenSaverSubclass.m in Sources */, AFE6A18A0CDD7B2E002805BF /* involute.c in Sources */, AFE6A40C0CDD7BC3002805BF /* moebiusgears.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE6A4210CDD7FAA002805BF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFE6A4220CDD7FAA002805BF /* XScreenSaverSubclass.m in Sources */, AFE6A4350CDD800F002805BF /* abstractile.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF2868417860E830050A578 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFF2868617860E830050A578 /* XScreenSaverSubclass.m in Sources */, AFF28698178611720050A578 /* quasicrystal.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF3C9ED17CCAC440028F240 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFF3C9EF17CCAC440028F240 /* XScreenSaverSubclass.m in Sources */, AFF3CA0317CCAEB70028F240 /* geodesic.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF4633B0C4403E400EE6509 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFF4633C0C4403E400EE6509 /* XScreenSaverSubclass.m in Sources */, AFF4634A0C44044F00EE6509 /* cwaves.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF4635D0C440AEF00EE6509 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFF4635F0C440AEF00EE6509 /* XScreenSaverSubclass.m in Sources */, AFF463720C440B9200EE6509 /* glcells.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFFAB31A19158CE40020F021 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFFAB31C19158CE40020F021 /* XScreenSaverSubclass.m in Sources */, AFFAB33219158EA80020F021 /* projectiveplane.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; CE3D01561B76F4C100993C75 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( CE3D016B1B76F93700993C75 /* testx11.c in Sources */, CE3D01581B76F4C100993C75 /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ AF08399009930B6B00277BE9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF08399109930B6B00277BE9 /* PBXContainerItemProxy */; }; AF083A33099311D700277BE9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF083A34099311D700277BE9 /* PBXContainerItemProxy */; }; AF0DC7AC0C4C73F600D76972 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF0DC7AD0C4C73F600D76972 /* PBXContainerItemProxy */; }; AF0DCA310C4C744D00D76972 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF0DC7AB0C4C73F600D76972 /* m6502 */; targetProxy = AF0DCA300C4C744D00D76972 /* PBXContainerItemProxy */; }; AF0DCA430C4CBB0D00D76972 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF0DCA440C4CBB0D00D76972 /* PBXContainerItemProxy */; }; AF0DCA5C0C4CBB4300D76972 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF0DCA420C4CBB0D00D76972 /* Voronoi */; targetProxy = AF0DCA5B0C4CBB4300D76972 /* PBXContainerItemProxy */; }; AF137D470F075CC8004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF137D410F075C9B004DE3B2 /* Obsolete */; targetProxy = AF137D460F075CC8004DE3B2 /* PBXContainerItemProxy */; }; AF137D490F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD5709B0996B88E00BA26F7 /* Worm */; targetProxy = AF137D480F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D4B0F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477208099D4EE8001F091E /* Whirlygig */; targetProxy = AF137D4A0F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D4D0F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56F0B0996AAFA00BA26F7 /* Vines */; targetProxy = AF137D4C0F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D4F0F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4771A7099D4949001F091E /* T3D */; targetProxy = AF137D4E0F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D510F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD570430996B61600BA26F7 /* Spiral */; targetProxy = AF137D500F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D530F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD570260996B56D00BA26F7 /* Sphere */; targetProxy = AF137D520F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D550F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD570B10996B93000BA26F7 /* Rotor */; targetProxy = AF137D540F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D570F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56FCF0996B20900BA26F7 /* Lissie */; targetProxy = AF137D560F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D590F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56FB90996B18F00BA26F7 /* Lisa */; targetProxy = AF137D580F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D5B0F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56FA30996B10F00BA26F7 /* Lightning */; targetProxy = AF137D5A0F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D5D0F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56F8C0996B09400BA26F7 /* Laser */; targetProxy = AF137D5C0F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D610F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55CCC09934CE400F3E977 /* GLForestFire */; targetProxy = AF137D600F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D630F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56EDA0996A95700BA26F7 /* Forest */; targetProxy = AF137D620F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D650F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477909099DE379001F091E /* Flag */; targetProxy = AF137D640F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D670F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47765A099DA78E001F091E /* Critical */; targetProxy = AF137D660F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D690F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF6427A809A2DE36000F4CD4 /* Bubbles */; targetProxy = AF137D680F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF1A17620D6D6EE3008AF328 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF1A17630D6D6EE3008AF328 /* PBXContainerItemProxy */; }; AF1A17840D6D6FA7008AF328 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF1A17610D6D6EE3008AF328 /* LCDscrub */; targetProxy = AF1A17830D6D6FA7008AF328 /* PBXContainerItemProxy */; }; AF2D4D8013E902F5002AA818 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF2D4D8113E902F5002AA818 /* PBXContainerItemProxy */; }; AF2D4D9E13E90347002AA818 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF7776E409B63ABF00EA3033 /* Phosphor */; targetProxy = AF2D4D9D13E90347002AA818 /* PBXContainerItemProxy */; }; AF2D4F6B13E91093002AA818 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF2D4F6C13E91093002AA818 /* PBXContainerItemProxy */; }; AF2D4F8F13E91127002AA818 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D4DEC09B5BB19006E59CF /* Apple2 */; targetProxy = AF2D4F8E13E91127002AA818 /* PBXContainerItemProxy */; }; AF32D9E10F3AD0B40080F535 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF32D9E20F3AD0B40080F535 /* PBXContainerItemProxy */; }; AF32D9F90F3AD0D90080F535 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF32D9E00F3AD0B40080F535 /* RubikBlocks */; targetProxy = AF32D9F80F3AD0D90080F535 /* PBXContainerItemProxy */; }; AF3581C01431D47B00E09C51 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF3581C11431D47B00E09C51 /* PBXContainerItemProxy */; }; AF3581FC143330F900E09C51 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF3581FD143330F900E09C51 /* PBXContainerItemProxy */; }; AF35E88B0E63823600691F2F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF35E88C0E63823600691F2F /* PBXContainerItemProxy */; }; AF35E8A30E63825600691F2F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF35E88A0E63823600691F2F /* Jigsaw */; targetProxy = AF35E8A20E63825600691F2F /* PBXContainerItemProxy */; }; AF36340118540D050086A439 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF1AD9E118500F9F00932759 /* XScreenSaverUpdater */; targetProxy = AF36340018540D050086A439 /* PBXContainerItemProxy */; }; AF39E283198A11F60064A58D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF39E284198A11F60064A58D /* PBXContainerItemProxy */; }; AF39E2BA198A16920064A58D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF39E282198A11F60064A58D /* WindupRobot */; targetProxy = AF39E2B9198A16920064A58D /* PBXContainerItemProxy */; }; AF3C71460D624BF50030CC0D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF3C71470D624BF50030CC0D /* PBXContainerItemProxy */; }; AF42C5160D624E9200B27FF6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF3C71450D624BF50030CC0D /* Hypnowheel */; targetProxy = AF42C5150D624E9200B27FF6 /* PBXContainerItemProxy */; }; AF4540D20E52BE8800AE87B5 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFE30BE80E52B14700CCF4A5 /* Sonar */; targetProxy = AF4540D10E52BE8800AE87B5 /* PBXContainerItemProxy */; }; AF476FB6099D154F001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF476FB7099D154F001F091E /* PBXContainerItemProxy */; }; AF476FDB099D1686001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF476FDC099D1686001F091E /* PBXContainerItemProxy */; }; AF47704D099D4385001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47704E099D4385001F091E /* PBXContainerItemProxy */; }; AF47716A099D4786001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47716B099D4786001F091E /* PBXContainerItemProxy */; }; AF477180099D4803001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477181099D4803001F091E /* PBXContainerItemProxy */; }; AF4771A8099D4949001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4771A9099D4949001F091E /* PBXContainerItemProxy */; }; AF4771DC099D4D9A001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4771DD099D4D9A001F091E /* PBXContainerItemProxy */; }; AF4771F3099D4E63001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4771F4099D4E63001F091E /* PBXContainerItemProxy */; }; AF477209099D4EE8001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47720A099D4EE8001F091E /* PBXContainerItemProxy */; }; AF47721F099D4F67001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477220099D4F67001F091E /* PBXContainerItemProxy */; }; AF477254099D5717001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477255099D5717001F091E /* PBXContainerItemProxy */; }; AF47726C099D57B9001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47726D099D57B9001F091E /* PBXContainerItemProxy */; }; AF477284099D5926001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477285099D5926001F091E /* PBXContainerItemProxy */; }; AF477383099D65A1001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477384099D65A1001F091E /* PBXContainerItemProxy */; }; AF47739B099D6648001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47739C099D6648001F091E /* PBXContainerItemProxy */; }; AF4773C2099D67B9001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4773C3099D67B9001F091E /* PBXContainerItemProxy */; }; AF477402099D69E7001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477403099D69E7001F091E /* PBXContainerItemProxy */; }; AF477427099D7C70001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477428099D7C70001F091E /* PBXContainerItemProxy */; }; AF477443099D7D33001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477444099D7D33001F091E /* PBXContainerItemProxy */; }; AF477484099D89E4001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477485099D89E4001F091E /* PBXContainerItemProxy */; }; AF47749A099D8A74001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47749B099D8A74001F091E /* PBXContainerItemProxy */; }; AF4774B5099D8B5F001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4774B6099D8B5F001F091E /* PBXContainerItemProxy */; }; AF4774CF099D8BFF001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4774D0099D8BFF001F091E /* PBXContainerItemProxy */; }; AF47755E099D9A1A001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47755F099D9A1A001F091E /* PBXContainerItemProxy */; }; AF477584099D9C28001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477585099D9C28001F091E /* PBXContainerItemProxy */; }; AF4775A0099D9CF7001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4775A1099D9CF7001F091E /* PBXContainerItemProxy */; }; AF4775D9099D9F69001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4775DA099D9F69001F091E /* PBXContainerItemProxy */; }; AF4775F3099DA030001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4775F4099DA030001F091E /* PBXContainerItemProxy */; }; AF477614099DA26C001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477615099DA26C001F091E /* PBXContainerItemProxy */; }; AF477645099DA6D0001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477646099DA6D0001F091E /* PBXContainerItemProxy */; }; AF47765B099DA78E001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47765C099DA78E001F091E /* PBXContainerItemProxy */; }; AF477671099DA849001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477672099DA849001F091E /* PBXContainerItemProxy */; }; AF477690099DAA6F001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477691099DAA6F001F091E /* PBXContainerItemProxy */; }; AF4776AB099DABDD001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4776AC099DABDD001F091E /* PBXContainerItemProxy */; }; AF4776C1099DAC8A001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4776C2099DAC8A001F091E /* PBXContainerItemProxy */; }; AF4776DC099DADDF001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4776DD099DADDF001F091E /* PBXContainerItemProxy */; }; AF4776F2099DAE7A001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4776F3099DAE7A001F091E /* PBXContainerItemProxy */; }; AF47770E099DAF9F001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47770F099DAF9F001F091E /* PBXContainerItemProxy */; }; AF477724099DB044001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477725099DB044001F091E /* PBXContainerItemProxy */; }; AF477753099DB61E001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477754099DB61E001F091E /* PBXContainerItemProxy */; }; AF477775099DB965001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477776099DB965001F091E /* PBXContainerItemProxy */; }; AF477791099DBA90001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477792099DBA90001F091E /* PBXContainerItemProxy */; }; AF4777D2099DC183001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4777D3099DC183001F091E /* PBXContainerItemProxy */; }; AF4778AC099DDB79001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4778AD099DDB79001F091E /* PBXContainerItemProxy */; }; AF4778C8099DDCAE001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4778C9099DDCAE001F091E /* PBXContainerItemProxy */; }; AF4778E9099DDDC8001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4778EA099DDDC8001F091E /* PBXContainerItemProxy */; }; AF47790A099DE379001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47790B099DE379001F091E /* PBXContainerItemProxy */; }; AF47792B099DE4C7001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47792C099DE4C7001F091E /* PBXContainerItemProxy */; }; AF480922098C412F00FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF480921098C412F00FB32B8 /* PBXContainerItemProxy */; }; AF48092A098C419000FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF480929098C419000FB32B8 /* PBXContainerItemProxy */; }; AF48092D098C41AE00FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF48092C098C41AE00FB32B8 /* PBXContainerItemProxy */; }; AF480936098C421200FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF480935098C421200FB32B8 /* PBXContainerItemProxy */; }; AF480C4A098E301400FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF480C4B098E301400FB32B8 /* PBXContainerItemProxy */; }; AF480D5C098EED6900FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF480D59098EED5100FB32B8 /* All Savers (OpenGL) */; targetProxy = AF480D5B098EED6900FB32B8 /* PBXContainerItemProxy */; }; AF480D5E098EED6900FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF480D58098EED3D00FB32B8 /* All Savers (XLockmore) */; targetProxy = AF480D5D098EED6900FB32B8 /* PBXContainerItemProxy */; }; AF480D60098EED6900FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF480AAF098C669800FB32B8 /* All Savers (XScreenSaver) */; targetProxy = AF480D5F098EED6900FB32B8 /* PBXContainerItemProxy */; }; AF480D73098EEDDE00FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF480D74098EEDDE00FB32B8 /* PBXContainerItemProxy */; }; AF4810EC09909FBA00FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4810ED09909FBA00FB32B8 /* PBXContainerItemProxy */; }; AF4812510990CE2700FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4812520990CE2700FB32B8 /* PBXContainerItemProxy */; }; AF4812B40990D3D900FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4812B50990D3D900FB32B8 /* PBXContainerItemProxy */; }; AF48DEF00A0C25E000F94CF9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF48DEF10A0C25E000F94CF9 /* PBXContainerItemProxy */; }; AF48DF060A0C261100F94CF9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF48DEEF0A0C25E000F94CF9 /* GLSchool */; targetProxy = AF48DF050A0C261100F94CF9 /* PBXContainerItemProxy */; }; AF4A344A102A593600A81B2A /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4A344B102A593600A81B2A /* PBXContainerItemProxy */; }; AF4A3460102A59A400A81B2A /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4A3449102A593600A81B2A /* Surfaces */; targetProxy = AF4A345F102A59A400A81B2A /* PBXContainerItemProxy */; }; AF4F10EE143450C300E34F3F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF3581BF1431D47B00E09C51 /* CompanionCube */; targetProxy = AF4F10ED143450C300E34F3F /* PBXContainerItemProxy */; }; AF4F10F0143450C300E34F3F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF78D175142DD8F3002AAF77 /* Hilbert */; targetProxy = AF4F10EF143450C300E34F3F /* PBXContainerItemProxy */; }; AF4F10F2143450C300E34F3F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF3581FB143330F900E09C51 /* TronBit */; targetProxy = AF4F10F1143450C300E34F3F /* PBXContainerItemProxy */; }; AF4FD6E70CE7A486005EE58E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4FD6E80CE7A486005EE58E /* PBXContainerItemProxy */; }; AF4FD6FF0CE7A4F9005EE58E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4FD6E60CE7A486005EE58E /* Lockward */; targetProxy = AF4FD6FE0CE7A4F9005EE58E /* PBXContainerItemProxy */; }; AF4FF4980D52CA5000666F98 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4FF4930D52CA0800666F98 /* m6502.h */; targetProxy = AF4FF4970D52CA5000666F98 /* PBXContainerItemProxy */; }; AF4FF4BB0D52CBDE00666F98 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4FF4BC0D52CBDE00666F98 /* PBXContainerItemProxy */; }; AF4FF4D70D52CD0D00666F98 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4FF4BA0D52CBDE00666F98 /* CubicGrid */; targetProxy = AF4FF4D60D52CD0D00666F98 /* PBXContainerItemProxy */; }; AF5C9AFA1A0CCE6E00B0147A /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF5C9AFB1A0CCE6E00B0147A /* PBXContainerItemProxy */; }; AF5C9B161A0CCF8000B0147A /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF5C9AF91A0CCE6E00B0147A /* Cityflow */; targetProxy = AF5C9B151A0CCF8000B0147A /* PBXContainerItemProxy */; }; AF63A7F21AB4EDDB00593C75 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF63A7F31AB4EDDB00593C75 /* PBXContainerItemProxy */; }; AF63A80F1AB4EFD300593C75 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF63A7F11AB4EDDB00593C75 /* RomanBoy */; targetProxy = AF63A80E1AB4EFD300593C75 /* PBXContainerItemProxy */; }; AF6423F3099FF9C2000F4CD4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF6423F4099FF9C2000F4CD4 /* PBXContainerItemProxy */; }; AF6425CD09A18855000F4CD4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF6425CE09A18855000F4CD4 /* PBXContainerItemProxy */; }; AF6425ED09A189EC000F4CD4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF6425EE09A189EC000F4CD4 /* PBXContainerItemProxy */; }; AF64261009A18D6C000F4CD4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF64261109A18D6C000F4CD4 /* PBXContainerItemProxy */; }; AF64262D09A18F54000F4CD4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF64262E09A18F54000F4CD4 /* PBXContainerItemProxy */; }; AF64265009A19229000F4CD4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF64265109A19229000F4CD4 /* PBXContainerItemProxy */; }; AF64267C09A194B0000F4CD4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF64267D09A194B0000F4CD4 /* PBXContainerItemProxy */; }; AF64277209A1D37A000F4CD4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF64277309A1D37A000F4CD4 /* PBXContainerItemProxy */; }; AF6427A909A2DE36000F4CD4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF6427AA09A2DE36000F4CD4 /* PBXContainerItemProxy */; }; AF68A47F19196CF800D41CD1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF68A48019196CF800D41CD1 /* PBXContainerItemProxy */; }; AF68A49E19196EA000D41CD1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF68A47E19196CF800D41CD1 /* Tessellimage */; targetProxy = AF68A49D19196EA000D41CD1 /* PBXContainerItemProxy */; }; AF714E4F105613410046AB1D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4774B4099D8B5F001F091E /* LMorph */; targetProxy = AF714E4E105613410046AB1D /* PBXContainerItemProxy */; }; AF714E51105613580046AB1D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD570C90996B9F800BA26F7 /* Ant */; targetProxy = AF714E50105613580046AB1D /* PBXContainerItemProxy */; }; AF73FF231A09877F00E485E9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF73FF241A09877F00E485E9 /* PBXContainerItemProxy */; }; AF73FF3F1A0988F000E485E9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF73FF221A09877F00E485E9 /* BinaryRing */; targetProxy = AF73FF3E1A0988F000E485E9 /* PBXContainerItemProxy */; }; AF7511001782B5B900380EA1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF7511011782B5B900380EA1 /* PBXContainerItemProxy */; }; AF7776E509B63ABF00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF7776E609B63ABF00EA3033 /* PBXContainerItemProxy */; }; AF77771B09B6416100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF77771C09B6416100EA3033 /* PBXContainerItemProxy */; }; AF77773F09B6446500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF77774009B6446500EA3033 /* PBXContainerItemProxy */; }; AF77777509B6497800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF77777609B6497800EA3033 /* PBXContainerItemProxy */; }; AF77778F09B64A5200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF77779009B64A5200EA3033 /* PBXContainerItemProxy */; }; AF7777A909B64B2600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF7777AA09B64B2600EA3033 /* PBXContainerItemProxy */; }; AF7777D109B64C6B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF7777D209B64C6B00EA3033 /* PBXContainerItemProxy */; }; AF7777EB09B64E3100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF7777EC09B64E3100EA3033 /* PBXContainerItemProxy */; }; AF77781109B6504400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF77781209B6504400EA3033 /* PBXContainerItemProxy */; }; AF77784509B6528100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF77784609B6528100EA3033 /* PBXContainerItemProxy */; }; AF77786209B6536000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF77786309B6536000EA3033 /* PBXContainerItemProxy */; }; AF77788009B6563500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF77788109B6563500EA3033 /* PBXContainerItemProxy */; }; AF7778A609B659C800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF7778A709B659C800EA3033 /* PBXContainerItemProxy */; }; AF7778D709B6604500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D475F09B53166006E59CF /* Zoom */; targetProxy = AF7778D609B6604500EA3033 /* PBXContainerItemProxy */; }; AF7778D909B6604500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4776AA099DABDD001F091E /* XSpirograph */; targetProxy = AF7778D809B6604500EA3033 /* PBXContainerItemProxy */; }; AF7778DB09B6604500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4776C0099DAC8A001F091E /* XRaySwarm */; targetProxy = AF7778DA09B6604500EA3033 /* PBXContainerItemProxy */; }; AF7778DD09B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477442099D7D33001F091E /* XMatrix */; targetProxy = AF7778DC09B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778DF09B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D4C6909B59F27006E59CF /* XLyap */; targetProxy = AF7778DE09B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778E109B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4778C7099DDCAE001F091E /* XJack */; targetProxy = AF7778E009B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778E309B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D4D7E09B5B2DC006E59CF /* XAnalogTV */; targetProxy = AF7778E209B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778E509B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975808099C41D500B05160 /* XFlame */; targetProxy = AF7778E409B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778E709B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477382099D65A1001F091E /* Wormhole */; targetProxy = AF7778E609B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778EB09B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4776DB099DADDF001F091E /* WhirlWindWarp */; targetProxy = AF7778EA09B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778ED09B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47717F099D4803001F091E /* Wander */; targetProxy = AF7778EC09B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778EF09B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4776F1099DAE7A001F091E /* Vermiculate */; targetProxy = AF7778EE09B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778F109B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D496C09B5411D006E59CF /* Twang */; targetProxy = AF7778F009B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778F309B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF476FDA099D1686001F091E /* Truchet */; targetProxy = AF7778F209B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778F709B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477723099DB044001F091E /* Substrate */; targetProxy = AF7778F609B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778F909B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47759F099D9CF7001F091E /* Starfish */; targetProxy = AF7778F809B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778FB09B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477644099DA6D0001F091E /* Squiral */; targetProxy = AF7778FA09B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778FD09B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D499709B544C2006E59CF /* Spotlight */; targetProxy = AF7778FC09B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778FF09B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF64277109A1D37A000F4CD4 /* SpeedMine */; targetProxy = AF7778FE09B6604700EA3033 /* PBXContainerItemProxy */; }; AF77790309B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47792A099DE4C7001F091E /* Slip */; targetProxy = AF77790209B6604700EA3033 /* PBXContainerItemProxy */; }; AF77790509B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D474409B5300A006E59CF /* SlideScreen */; targetProxy = AF77790409B6604700EA3033 /* PBXContainerItemProxy */; }; AF77790709B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975865099C475900B05160 /* ShadeBobs */; targetProxy = AF77790609B6604700EA3033 /* PBXContainerItemProxy */; }; AF77790909B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D495409B53FC9006E59CF /* RotZoomer */; targetProxy = AF77790809B6604700EA3033 /* PBXContainerItemProxy */; }; AF77790B09B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9770290989D1E6001F8B92 /* Rorschach */; targetProxy = AF77790A09B6604700EA3033 /* PBXContainerItemProxy */; }; AF77790D09B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975D52099CA0F000B05160 /* Rocks */; targetProxy = AF77790C09B6604700EA3033 /* PBXContainerItemProxy */; }; AF77790F09B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D492B09B53CBA006E59CF /* Ripples */; targetProxy = AF77790E09B6604700EA3033 /* PBXContainerItemProxy */; }; AF77791109B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9757C2099C3E6300B05160 /* RDbomb */; targetProxy = AF77791009B6604700EA3033 /* PBXContainerItemProxy */; }; AF77791309B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF6425EC09A189EC000F4CD4 /* Qix */; targetProxy = AF77791209B6604700EA3033 /* PBXContainerItemProxy */; }; AF77791509B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477583099D9C28001F091E /* Pyro */; targetProxy = AF77791409B6604700EA3033 /* PBXContainerItemProxy */; }; AF77791709B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47726B099D57B9001F091E /* PopSquares */; targetProxy = AF77791609B6604700EA3033 /* PBXContainerItemProxy */; }; AF77791909B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D4CE709B5AA8E006E59CF /* Pong */; targetProxy = AF77791809B6604700EA3033 /* PBXContainerItemProxy */; }; AF77791B09B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477283099D5926001F091E /* Piecewise */; targetProxy = AF77791A09B6604700EA3033 /* PBXContainerItemProxy */; }; AF77791D09B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF7776E409B63ABF00EA3033 /* Phosphor */; targetProxy = AF77791C09B6604800EA3033 /* PBXContainerItemProxy */; }; AF77791F09B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477670099DA849001F091E /* Petri */; targetProxy = AF77791E09B6604800EA3033 /* PBXContainerItemProxy */; }; AF77792109B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4778AB099DDB79001F091E /* Penetrate */; targetProxy = AF77792009B6604800EA3033 /* PBXContainerItemProxy */; }; AF77792309B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47755D099D9A1A001F091E /* Pedal */; targetProxy = AF77792209B6604800EA3033 /* PBXContainerItemProxy */; }; AF77792509B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975C5D099C8F3F00B05160 /* NoseGuy */; targetProxy = AF77792409B6604800EA3033 /* PBXContainerItemProxy */; }; AF77792709B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4771F2099D4E63001F091E /* NerveRot */; targetProxy = AF77792609B6604800EA3033 /* PBXContainerItemProxy */; }; AF77792909B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF64264F09A19229000F4CD4 /* Munch */; targetProxy = AF77792809B6604800EA3033 /* PBXContainerItemProxy */; }; AF77792B09B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF64262C09A18F54000F4CD4 /* Moire2 */; targetProxy = AF77792A09B6604800EA3033 /* PBXContainerItemProxy */; }; AF77792D09B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975775099C374A00B05160 /* Moire */; targetProxy = AF77792C09B6604800EA3033 /* PBXContainerItemProxy */; }; AF77793109B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975A36099C681F00B05160 /* MetaBalls */; targetProxy = AF77793009B6604800EA3033 /* PBXContainerItemProxy */; }; AF77793309B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975AFC099C6FE400B05160 /* MemScroller */; targetProxy = AF77793209B6604800EA3033 /* PBXContainerItemProxy */; }; AF77793509B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4774CE099D8BFF001F091E /* Maze */; targetProxy = AF77793409B6604800EA3033 /* PBXContainerItemProxy */; }; AF77793909B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477613099DA26C001F091E /* Kumppa */; targetProxy = AF77793809B6604800EA3033 /* PBXContainerItemProxy */; }; AF77793B09B6604900EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477499099D8A74001F091E /* Kaleidescope */; targetProxy = AF77793A09B6604900EA3033 /* PBXContainerItemProxy */; }; AF77793F09B6604900EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477401099D69E7001F091E /* Intermomentary */; targetProxy = AF77793E09B6604900EA3033 /* PBXContainerItemProxy */; }; AF77794109B6604900EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF476FB5099D154F001F091E /* Interference */; targetProxy = AF77794009B6604900EA3033 /* PBXContainerItemProxy */; }; AF77794309B6604900EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477752099DB61E001F091E /* Interaggregate */; targetProxy = AF77794209B6604900EA3033 /* PBXContainerItemProxy */; }; AF77794509B6604900EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF97572D099C317000B05160 /* IMSMap */; targetProxy = AF77794409B6604900EA3033 /* PBXContainerItemProxy */; }; AF77794709B6604900EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477426099D7C70001F091E /* IFS */; targetProxy = AF77794609B6604900EA3033 /* PBXContainerItemProxy */; }; AF77794D09B6604900EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF480C49098E301400FB32B8 /* Helix */; targetProxy = AF77794C09B6604900EA3033 /* PBXContainerItemProxy */; }; AF77794F09B6604900EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975C12099C8C1500B05160 /* Halo */; targetProxy = AF77794E09B6604900EA3033 /* PBXContainerItemProxy */; }; AF77795109B6604900EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477253099D5717001F091E /* Halftone */; targetProxy = AF77795009B6604900EA3033 /* PBXContainerItemProxy */; }; AF77795309B6604900EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975C3D099C8DCF00B05160 /* Greynetic */; targetProxy = AF77795209B6604900EA3033 /* PBXContainerItemProxy */; }; AF77795509B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF64267B09A194B0000F4CD4 /* Goop */; targetProxy = AF77795409B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77795709B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47739A099D6648001F091E /* FuzzyFlakes */; targetProxy = AF77795609B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77795909B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF77787F09B6563500EA3033 /* FontGlide */; targetProxy = AF77795809B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77795B09B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477790099DBA90001F091E /* FluidBalls */; targetProxy = AF77795A09B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77795D09B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477483099D89E4001F091E /* Flame */; targetProxy = AF77795C09B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77795F09B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975AD7099C6EB100B05160 /* Fireworkx */; targetProxy = AF77795E09B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77796109B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975A6C099C6AB200B05160 /* Eruption */; targetProxy = AF77796009B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77796309B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4775F2099DA030001F091E /* Epicycle */; targetProxy = AF77796209B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77796509B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D48F409B535DA006E59CF /* Distort */; targetProxy = AF77796409B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77796709B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47704C099D4385001F091E /* Deluxe */; targetProxy = AF77796609B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77796909B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF976FBB0989CAA2001F8B92 /* Deco */; targetProxy = AF77796809B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77796B09B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D466609B5109C006E59CF /* DecayScreen */; targetProxy = AF77796A09B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77796D09B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4778E8099DDDC8001F091E /* Cynosure */; targetProxy = AF77796C09B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77797109B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4775D8099D9F69001F091E /* Coral */; targetProxy = AF77797009B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77797309B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477169099D4786001F091E /* Compass */; targetProxy = AF77797209B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77797509B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47770D099DAF9F001F091E /* CloudLife */; targetProxy = AF77797409B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77797709B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477774099DB965001F091E /* Celtic */; targetProxy = AF77797609B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77797909B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4771DB099D4D9A001F091E /* CCurve */; targetProxy = AF77797809B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77797B09B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D48DB09B53322006E59CF /* Bumps */; targetProxy = AF77797A09B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77797F09B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D4DAF09B5B71E006E59CF /* BSOD */; targetProxy = AF77797E09B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77798109B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4777D1099DC183001F091E /* BoxFit */; targetProxy = AF77798009B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77798309B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF7778A509B659C800EA3033 /* BlitSpin */; targetProxy = AF77798209B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77798509B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47768F099DAA6F001F091E /* Blaster */; targetProxy = AF77798409B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77798709B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975A86099C6BC300B05160 /* Barcode */; targetProxy = AF77798609B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77798909B6604C00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9770660989D2F6001F8B92 /* Attraction */; targetProxy = AF77798809B6604C00EA3033 /* PBXContainerItemProxy */; }; AF77798B09B6604C00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D4DEC09B5BB19006E59CF /* Apple2 */; targetProxy = AF77798A09B6604C00EA3033 /* PBXContainerItemProxy */; }; AF77798D09B6604C00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4773C1099D67B9001F091E /* Anemotaxis */; targetProxy = AF77798C09B6604C00EA3033 /* PBXContainerItemProxy */; }; AF77798F09B6604C00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47721E099D4F67001F091E /* Anemone */; targetProxy = AF77798E09B6604C00EA3033 /* PBXContainerItemProxy */; }; AF77799509B6608000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD570850996B80300BA26F7 /* Triangle */; targetProxy = AF77799409B6608000EA3033 /* PBXContainerItemProxy */; }; AF77799709B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD571590996C0CE00BA26F7 /* Thornbird */; targetProxy = AF77799609B6608100EA3033 /* PBXContainerItemProxy */; }; AF77799909B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD572220996E4A300BA26F7 /* Swirl */; targetProxy = AF77799809B6608100EA3033 /* PBXContainerItemProxy */; }; AF77799B09B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD5735D0997411200BA26F7 /* Strange */; targetProxy = AF77799A09B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779A109B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD5700F0996B4CC00BA26F7 /* Sierpinski */; targetProxy = AF7779A009B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779A509B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD5726D0996EE8500BA26F7 /* Polyominoes */; targetProxy = AF7779A409B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779A709B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56FF80996B43800BA26F7 /* Penrose */; targetProxy = AF7779A609B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779A909B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF77771A09B6416100EA3033 /* Pacman */; targetProxy = AF7779A809B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779AB09B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD5706F0996B72700BA26F7 /* Mountain */; targetProxy = AF7779AA09B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779AD09B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF794FCD09974FA60059A8B0 /* Loop */; targetProxy = AF7779AC09B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779B709B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD572F9099701C000BA26F7 /* Julia */; targetProxy = AF7779B609B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779BB09B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56F6B0996B01600BA26F7 /* Hopalong */; targetProxy = AF7779BA09B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779BD09B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56F4F0996AEEE00BA26F7 /* Grav */; targetProxy = AF7779BC09B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779BF09B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56F230996AB8A00BA26F7 /* Galaxy */; targetProxy = AF7779BE09B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779C309B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD570EA0996BBBF00BA26F7 /* Flow */; targetProxy = AF7779C209B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779C709B6608200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF794F8E09974A320059A8B0 /* Fiberlamp */; targetProxy = AF7779C609B6608200EA3033 /* PBXContainerItemProxy */; }; AF7779C909B6608200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD570590996B6A300BA26F7 /* FadePlot */; targetProxy = AF7779C809B6608200EA3033 /* PBXContainerItemProxy */; }; AF7779CB09B6608200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD571430996C01700BA26F7 /* Euler2D */; targetProxy = AF7779CA09B6608200EA3033 /* PBXContainerItemProxy */; }; AF7779CD09B6608200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF480D72098EEDDE00FB32B8 /* Drift */; targetProxy = AF7779CC09B6608200EA3033 /* PBXContainerItemProxy */; }; AF7779CF09B6608200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD571130996BE9300BA26F7 /* Discrete */; targetProxy = AF7779CE09B6608200EA3033 /* PBXContainerItemProxy */; }; AF7779D109B6608200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF794F64099748450059A8B0 /* Demon */; targetProxy = AF7779D009B6608200EA3033 /* PBXContainerItemProxy */; }; AF7779D309B6608200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD572C20996FC0F00BA26F7 /* Crystal */; targetProxy = AF7779D209B6608200EA3033 /* PBXContainerItemProxy */; }; AF7779D509B6608200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56EAE0996A72600BA26F7 /* Braid */; targetProxy = AF7779D409B6608200EA3033 /* PBXContainerItemProxy */; }; AF7779D709B6608200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD572A50996F99600BA26F7 /* Bouboule */; targetProxy = AF7779D609B6608200EA3033 /* PBXContainerItemProxy */; }; AF7779D909B6608200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD5712C0996BF2E00BA26F7 /* Apollonian */; targetProxy = AF7779D809B6608200EA3033 /* PBXContainerItemProxy */; }; AF7779DD09B660AF00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA56379099397B300F3E977 /* TimeTunnel */; targetProxy = AF7779DC09B660AF00EA3033 /* PBXContainerItemProxy */; }; AF7779DF09B660AF00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA562F20993943B00F3E977 /* Tangram */; targetProxy = AF7779DE09B660AF00EA3033 /* PBXContainerItemProxy */; }; AF7779E109B660AF00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA559920993322100F3E977 /* Superquadrics */; targetProxy = AF7779E009B660AF00EA3033 /* PBXContainerItemProxy */; }; AF7779E309B660B000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF7777A809B64B2600EA3033 /* StonerView */; targetProxy = AF7779E209B660B000EA3033 /* PBXContainerItemProxy */; }; AF7779E509B660B000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF77781009B6504400EA3033 /* StarWars */; targetProxy = AF7779E409B660B000EA3033 /* PBXContainerItemProxy */; }; AF7779E709B660B000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55A030993340300F3E977 /* Stairs */; targetProxy = AF7779E609B660B000EA3033 /* PBXContainerItemProxy */; }; AF7779E909B660B000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55A20099334A000F3E977 /* Sproingies */; targetProxy = AF7779E809B660B000EA3033 /* PBXContainerItemProxy */; }; AF7779EB09B660B000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55D7F099358C400F3E977 /* Spheremonics */; targetProxy = AF7779EA09B660B000EA3033 /* PBXContainerItemProxy */; }; AF7779ED09B660B000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55B7909933F7200F3E977 /* Sierpinski3D */; targetProxy = AF7779EC09B660B000EA3033 /* PBXContainerItemProxy */; }; AF7779EF09B660B000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55D3C0993565300F3E977 /* SBalls */; targetProxy = AF7779EE09B660B000EA3033 /* PBXContainerItemProxy */; }; AF7779F109B660B000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA559CF0993330600F3E977 /* Rubik */; targetProxy = AF7779F009B660B000EA3033 /* PBXContainerItemProxy */; }; AF7779F309B660B000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55DF009935E4900F3E977 /* Queens */; targetProxy = AF7779F209B660B000EA3033 /* PBXContainerItemProxy */; }; AF7779F509B660B100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55B2509933E8D00F3E977 /* Pulsar */; targetProxy = AF7779F409B660B100EA3033 /* PBXContainerItemProxy */; }; AF7779F709B660B100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA562060993849F00F3E977 /* Providence */; targetProxy = AF7779F609B660B100EA3033 /* PBXContainerItemProxy */; }; AF7779F909B660B100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA560AE0993718D00F3E977 /* Polytopes */; targetProxy = AF7779F809B660B100EA3033 /* PBXContainerItemProxy */; }; AF7779FB09B660B100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA5619D09937D7E00F3E977 /* Polyhedra */; targetProxy = AF7779FA09B660B100EA3033 /* PBXContainerItemProxy */; }; AF7779FD09B660B100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4812B30990D3D900FB32B8 /* Pipes */; targetProxy = AF7779FC09B660B100EA3033 /* PBXContainerItemProxy */; }; AF7779FF09B660B200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA5621F0993852500F3E977 /* Pinion */; targetProxy = AF7779FE09B660B200EA3033 /* PBXContainerItemProxy */; }; AF777A0109B660B200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA5617B09937CF100F3E977 /* Noof */; targetProxy = AF777A0009B660B200EA3033 /* PBXContainerItemProxy */; }; AF777A0309B660B200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA559B50993328000F3E977 /* Morph3D */; targetProxy = AF777A0209B660B200EA3033 /* PBXContainerItemProxy */; }; AF777A0509B660B200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA560FD0993781600F3E977 /* Molecule */; targetProxy = AF777A0409B660B200EA3033 /* PBXContainerItemProxy */; }; AF777A0709B660B200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA5596D0993317900F3E977 /* Moebius */; targetProxy = AF777A0609B660B200EA3033 /* PBXContainerItemProxy */; }; AF777A0909B660B200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF77778E09B64A5200EA3033 /* MirrorBlob */; targetProxy = AF777A0809B660B200EA3033 /* PBXContainerItemProxy */; }; AF777A0B09B660B200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55BE40993429100F3E977 /* Menger */; targetProxy = AF777A0A09B660B200EA3033 /* PBXContainerItemProxy */; }; AF777A0D09B660B200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55DC809935D7000F3E977 /* Lavalite */; targetProxy = AF777A0C09B660B200EA3033 /* PBXContainerItemProxy */; }; AF777A0F09B660B200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55A790993364300F3E977 /* Lament */; targetProxy = AF777A0E09B660B200EA3033 /* PBXContainerItemProxy */; }; AF777A1109B660B300EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55F2A0993622F00F3E977 /* Klein */; targetProxy = AF777A1009B660B300EA3033 /* PBXContainerItemProxy */; }; AF777A1309B660B300EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA563A4099398BB00F3E977 /* Juggler3D */; targetProxy = AF777A1209B660B300EA3033 /* PBXContainerItemProxy */; }; AF777A1509B660B300EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55F06099361B700F3E977 /* JigglyPuff */; targetProxy = AF777A1409B660B300EA3033 /* PBXContainerItemProxy */; }; AF777A1709B660B300EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55F420993629000F3E977 /* Hypertorus */; targetProxy = AF777A1609B660B300EA3033 /* PBXContainerItemProxy */; }; AF777A1909B660B300EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56DF10996A03800BA26F7 /* GLText */; targetProxy = AF777A1809B660B300EA3033 /* PBXContainerItemProxy */; }; AF777A1B09B660B300EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55C77099349A600F3E977 /* GLSnake */; targetProxy = AF777A1A09B660B300EA3033 /* PBXContainerItemProxy */; }; AF777A1D09B660B300EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF7777D009B64C6B00EA3033 /* GLSlideshow */; targetProxy = AF777A1C09B660B300EA3033 /* PBXContainerItemProxy */; }; AF777A1F09B660B300EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55B0909933E0500F3E977 /* GLPlanet */; targetProxy = AF777A1E09B660B300EA3033 /* PBXContainerItemProxy */; }; AF777A2109B660B300EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55F720993643600F3E977 /* GLMatrix */; targetProxy = AF777A2009B660B300EA3033 /* PBXContainerItemProxy */; }; AF777A2309B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55FF909936C6D00F3E977 /* GLKnots */; targetProxy = AF777A2209B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A2509B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA56331099395ED00F3E977 /* GLHanoi */; targetProxy = AF777A2409B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A2909B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55E2F09935F8E00F3E977 /* GLBlur */; targetProxy = AF777A2809B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A2B09B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55B9109933FDA00F3E977 /* GFlux */; targetProxy = AF777A2A09B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A2D09B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF77777409B6497800EA3033 /* Gleidescope */; targetProxy = AF777A2C09B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A2F09B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4812500990CE2700FB32B8 /* Gears */; targetProxy = AF777A2E09B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A3109B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55E4E09935FF900F3E977 /* FlyingToasters */; targetProxy = AF777A3009B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A3309B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF7777EA09B64E3100EA3033 /* FlipText */; targetProxy = AF777A3209B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A3509B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF77773E09B6446500EA3033 /* FlipScreen3D */; targetProxy = AF777A3409B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A3709B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA5603209936D5100F3E977 /* FlipFlop */; targetProxy = AF777A3609B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A3909B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF6423F2099FF9C2000F4CD4 /* Extrusion */; targetProxy = AF777A3809B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A3B09B660B500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55C0E0993431300F3E977 /* Engine */; targetProxy = AF777A3A09B660B500EA3033 /* PBXContainerItemProxy */; }; AF777A3D09B660B500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55E0D09935EDC00F3E977 /* Endgame */; targetProxy = AF777A3C09B660B500EA3033 /* PBXContainerItemProxy */; }; AF777A3F09B660B500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF77786109B6536000EA3033 /* DNAlogo */; targetProxy = AF777A3E09B660B500EA3033 /* PBXContainerItemProxy */; }; AF777A4109B660B500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4810EB09909FBA00FB32B8 /* DangerBall */; targetProxy = AF777A4009B660B500EA3033 /* PBXContainerItemProxy */; }; AF777A4309B660B500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55FD309936BFA00F3E977 /* CubeStorm */; targetProxy = AF777A4209B660B500EA3033 /* PBXContainerItemProxy */; }; AF777A4509B660B500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55D620993584B00F3E977 /* Cubenetic */; targetProxy = AF777A4409B660B500EA3033 /* PBXContainerItemProxy */; }; AF777A4709B660B500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA56351099396C000F3E977 /* Cube21 */; targetProxy = AF777A4609B660B500EA3033 /* PBXContainerItemProxy */; }; AF777A4909B660B500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA563130993951000F3E977 /* Crackberg */; targetProxy = AF777A4809B660B500EA3033 /* PBXContainerItemProxy */; }; AF777A4B09B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55BAB099340CE00F3E977 /* Circuit */; targetProxy = AF777A4A09B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A4D09B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF77784409B6528100EA3033 /* Carousel */; targetProxy = AF777A4C09B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A4F09B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55946099330B000F3E977 /* Cage */; targetProxy = AF777A4E09B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A5109B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55ACF09933CEF00F3E977 /* Bubble3D */; targetProxy = AF777A5009B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A5309B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55CA909934BB200F3E977 /* Boxed */; targetProxy = AF777A5209B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A5509B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55EC7099360E300F3E977 /* BouncingCow */; targetProxy = AF777A5409B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A5709B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA562BF099392C600F3E977 /* Boing */; targetProxy = AF777A5609B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A5909B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA5601409936CC800F3E977 /* BlockTube */; targetProxy = AF777A5809B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A5B09B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA5615609937C0D00F3E977 /* BlinkBox */; targetProxy = AF777A5A09B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A5D09B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF083A32099311D700277BE9 /* Atunnel */; targetProxy = AF777A5C09B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A5F09B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF08398F09930B6B00277BE9 /* Atlantis */; targetProxy = AF777A5E09B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A6109B660B700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA5606209936F3800F3E977 /* AntSpotlight */; targetProxy = AF777A6009B660B700EA3033 /* PBXContainerItemProxy */; }; AF777A6309B660B700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA562DA099393C900F3E977 /* AntMaze */; targetProxy = AF777A6209B660B700EA3033 /* PBXContainerItemProxy */; }; AF777A6509B660B700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA5604A09936E2100F3E977 /* AntInspect */; targetProxy = AF777A6409B660B700EA3033 /* PBXContainerItemProxy */; }; AF78D176142DD8F3002AAF77 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF78D177142DD8F3002AAF77 /* PBXContainerItemProxy */; }; AF794F65099748450059A8B0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF794F66099748450059A8B0 /* PBXContainerItemProxy */; }; AF794F8F09974A320059A8B0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF794F9009974A320059A8B0 /* PBXContainerItemProxy */; }; AF794FCE09974FA60059A8B0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF794FCF09974FA60059A8B0 /* PBXContainerItemProxy */; }; AF7ACFC119FF0A9200BD752B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF7ACFC219FF0A9200BD752B /* PBXContainerItemProxy */; }; AF7ACFDC19FF0BDB00BD752B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF7ACFC019FF0A9200BD752B /* GeodesicGears */; targetProxy = AF7ACFDB19FF0BDB00BD752B /* PBXContainerItemProxy */; }; AF7E07FE15925DF200D81407 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4FF4930D52CA0800666F98 /* m6502.h */; targetProxy = AF7E07FD15925DF200D81407 /* PBXContainerItemProxy */; }; AF7E080015925DFE00D81407 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA56119099378CB00F3E977 /* molecules.h */; targetProxy = AF7E07FF15925DFE00D81407 /* PBXContainerItemProxy */; }; AF918978158FC00A002B5D1E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF918979158FC00A002B5D1E /* PBXContainerItemProxy */; }; AF97572E099C317000B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF97572F099C317000B05160 /* PBXContainerItemProxy */; }; AF975776099C374A00B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975777099C374A00B05160 /* PBXContainerItemProxy */; }; AF9757C3099C3E6300B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9757C4099C3E6300B05160 /* PBXContainerItemProxy */; }; AF975809099C41D500B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF97580A099C41D500B05160 /* PBXContainerItemProxy */; }; AF975866099C475900B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975867099C475900B05160 /* PBXContainerItemProxy */; }; AF975A37099C681F00B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975A38099C681F00B05160 /* PBXContainerItemProxy */; }; AF975A6D099C6AB200B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975A6E099C6AB200B05160 /* PBXContainerItemProxy */; }; AF975A87099C6BC300B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975A88099C6BC300B05160 /* PBXContainerItemProxy */; }; AF975AD8099C6EB100B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975AD9099C6EB100B05160 /* PBXContainerItemProxy */; }; AF975AFD099C6FE400B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975AFE099C6FE400B05160 /* PBXContainerItemProxy */; }; AF975C13099C8C1500B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975C14099C8C1500B05160 /* PBXContainerItemProxy */; }; AF975C3E099C8DCF00B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975C3F099C8DCF00B05160 /* PBXContainerItemProxy */; }; AF975C5E099C8F3F00B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975C5F099C8F3F00B05160 /* PBXContainerItemProxy */; }; AF975D53099CA0F000B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975D54099CA0F000B05160 /* PBXContainerItemProxy */; }; AF998EDB0A083DB30051049D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF998EDC0A083DB30051049D /* PBXContainerItemProxy */; }; AF998EF70A083E1D0051049D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF998EDA0A083DB30051049D /* TopBlock */; targetProxy = AF998EF60A083E1D0051049D /* PBXContainerItemProxy */; }; AF9D466709B5109C006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D466809B5109C006E59CF /* PBXContainerItemProxy */; }; AF9D474509B5300A006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D474609B5300A006E59CF /* PBXContainerItemProxy */; }; AF9D476009B53166006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D476109B53166006E59CF /* PBXContainerItemProxy */; }; AF9D48DC09B53322006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D48DD09B53322006E59CF /* PBXContainerItemProxy */; }; AF9D48F509B535DA006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D48F609B535DA006E59CF /* PBXContainerItemProxy */; }; AF9D492C09B53CBA006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D492D09B53CBA006E59CF /* PBXContainerItemProxy */; }; AF9D495509B53FC9006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D495609B53FC9006E59CF /* PBXContainerItemProxy */; }; AF9D496D09B5411D006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D496E09B5411D006E59CF /* PBXContainerItemProxy */; }; AF9D499809B544C2006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D499909B544C2006E59CF /* PBXContainerItemProxy */; }; AF9D4C6A09B59F27006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D4C6B09B59F27006E59CF /* PBXContainerItemProxy */; }; AF9D4CE809B5AA8E006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D4CE909B5AA8E006E59CF /* PBXContainerItemProxy */; }; AF9D4D7F09B5B2DC006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D4D8009B5B2DC006E59CF /* PBXContainerItemProxy */; }; AF9D4DB009B5B71E006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D4DB109B5B71E006E59CF /* PBXContainerItemProxy */; }; AF9D4DED09B5BB19006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D4DEE09B5BB19006E59CF /* PBXContainerItemProxy */; }; AFA160921052FF87009B93AA /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF6425CC09A18855000F4CD4 /* HyperCube */; targetProxy = AFA160911052FF87009B93AA /* PBXContainerItemProxy */; }; AFA160941052FF87009B93AA /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF64260F09A18D6C000F4CD4 /* HyperBall */; targetProxy = AFA160931052FF87009B93AA /* PBXContainerItemProxy */; }; AFA3392F0B058505002B0E7D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA339300B058505002B0E7D /* PBXContainerItemProxy */; }; AFA33B8F0B0585A4002B0E7D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA3392E0B058505002B0E7D /* WebCollage */; targetProxy = AFA33B8E0B0585A4002B0E7D /* PBXContainerItemProxy */; }; AFA33BCF0B0587B2002B0E7D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA33BC60B058740002B0E7D /* webcollage-helper */; targetProxy = AFA33BCE0B0587B2002B0E7D /* PBXContainerItemProxy */; }; AFA33BDC0B058952002B0E7D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA33BC60B058740002B0E7D /* webcollage-helper */; targetProxy = AFA33BDB0B058952002B0E7D /* PBXContainerItemProxy */; }; AFA33C040B058E3C002B0E7D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA33C020B058E17002B0E7D /* webcollage-perl */; targetProxy = AFA33C030B058E3C002B0E7D /* PBXContainerItemProxy */; }; AFA55947099330B000F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55948099330B000F3E977 /* PBXContainerItemProxy */; }; AFA5596E0993317900F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA5596F0993317900F3E977 /* PBXContainerItemProxy */; }; AFA559930993322100F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA559940993322100F3E977 /* PBXContainerItemProxy */; }; AFA559B60993328000F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA559B70993328000F3E977 /* PBXContainerItemProxy */; }; AFA559D00993330600F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA559D10993330600F3E977 /* PBXContainerItemProxy */; }; AFA55A040993340300F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55A050993340300F3E977 /* PBXContainerItemProxy */; }; AFA55A21099334A000F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55A22099334A000F3E977 /* PBXContainerItemProxy */; }; AFA55A7A0993364300F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55A7B0993364300F3E977 /* PBXContainerItemProxy */; }; AFA55AD009933CEF00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55AD109933CEF00F3E977 /* PBXContainerItemProxy */; }; AFA55B0A09933E0500F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55B0B09933E0500F3E977 /* PBXContainerItemProxy */; }; AFA55B2609933E8D00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55B2709933E8D00F3E977 /* PBXContainerItemProxy */; }; AFA55B7A09933F7200F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55B7B09933F7200F3E977 /* PBXContainerItemProxy */; }; AFA55B9209933FDA00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55B9309933FDA00F3E977 /* PBXContainerItemProxy */; }; AFA55BAC099340CE00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55BAD099340CE00F3E977 /* PBXContainerItemProxy */; }; AFA55BE50993429100F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55BE60993429100F3E977 /* PBXContainerItemProxy */; }; AFA55C0F0993431300F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55C100993431300F3E977 /* PBXContainerItemProxy */; }; AFA55C78099349A600F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55C79099349A600F3E977 /* PBXContainerItemProxy */; }; AFA55CAA09934BB200F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55CAB09934BB200F3E977 /* PBXContainerItemProxy */; }; AFA55CCD09934CE400F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55CCE09934CE400F3E977 /* PBXContainerItemProxy */; }; AFA55D3D0993565300F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55D3E0993565300F3E977 /* PBXContainerItemProxy */; }; AFA55D630993584B00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55D640993584B00F3E977 /* PBXContainerItemProxy */; }; AFA55D80099358C400F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55D81099358C400F3E977 /* PBXContainerItemProxy */; }; AFA55DC909935D7000F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55DCA09935D7000F3E977 /* PBXContainerItemProxy */; }; AFA55DF109935E4900F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55DF209935E4900F3E977 /* PBXContainerItemProxy */; }; AFA55E0E09935EDC00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55E0F09935EDC00F3E977 /* PBXContainerItemProxy */; }; AFA55E3009935F8E00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55E3109935F8E00F3E977 /* PBXContainerItemProxy */; }; AFA55E4F09935FF900F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55E5009935FF900F3E977 /* PBXContainerItemProxy */; }; AFA55EC8099360E300F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55EC9099360E300F3E977 /* PBXContainerItemProxy */; }; AFA55F07099361B700F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55F08099361B700F3E977 /* PBXContainerItemProxy */; }; AFA55F2B0993622F00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55F2C0993622F00F3E977 /* PBXContainerItemProxy */; }; AFA55F430993629000F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55F440993629000F3E977 /* PBXContainerItemProxy */; }; AFA55F730993643600F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55F740993643600F3E977 /* PBXContainerItemProxy */; }; AFA55FD409936BFA00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55FD509936BFA00F3E977 /* PBXContainerItemProxy */; }; AFA55FFA09936C6D00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55FFB09936C6D00F3E977 /* PBXContainerItemProxy */; }; AFA5601509936CC800F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA5601609936CC800F3E977 /* PBXContainerItemProxy */; }; AFA5603309936D5100F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA5603409936D5100F3E977 /* PBXContainerItemProxy */; }; AFA5604B09936E2100F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA5604C09936E2100F3E977 /* PBXContainerItemProxy */; }; AFA5606309936F3800F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA5606409936F3800F3E977 /* PBXContainerItemProxy */; }; AFA560AF0993718D00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA560B00993718D00F3E977 /* PBXContainerItemProxy */; }; AFA560FE0993781600F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA560FF0993781600F3E977 /* PBXContainerItemProxy */; }; AFA5611E0993791D00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA56119099378CB00F3E977 /* molecules.h */; targetProxy = AFA5611D0993791D00F3E977 /* PBXContainerItemProxy */; }; AFA5615709937C0D00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA5615809937C0D00F3E977 /* PBXContainerItemProxy */; }; AFA5617C09937CF100F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA5617D09937CF100F3E977 /* PBXContainerItemProxy */; }; AFA5619E09937D7E00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA5619F09937D7E00F3E977 /* PBXContainerItemProxy */; }; AFA562070993849F00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA562080993849F00F3E977 /* PBXContainerItemProxy */; }; AFA562200993852500F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA562210993852500F3E977 /* PBXContainerItemProxy */; }; AFA562C0099392C600F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA562C1099392C600F3E977 /* PBXContainerItemProxy */; }; AFA562DB099393C900F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA562DC099393C900F3E977 /* PBXContainerItemProxy */; }; AFA562F30993943B00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA562F40993943B00F3E977 /* PBXContainerItemProxy */; }; AFA563140993951000F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA563150993951000F3E977 /* PBXContainerItemProxy */; }; AFA56332099395ED00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA56333099395ED00F3E977 /* PBXContainerItemProxy */; }; AFA56352099396C000F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA56353099396C000F3E977 /* PBXContainerItemProxy */; }; AFA5637A099397B300F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA5637B099397B300F3E977 /* PBXContainerItemProxy */; }; AFA563A5099398BB00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA563A6099398BB00F3E977 /* PBXContainerItemProxy */; }; AFB581B0102F363300342B11 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD571B50996D9DC00BA26F7 /* Juggle */; targetProxy = AFB581AF102F363300342B11 /* PBXContainerItemProxy */; }; AFB591A8178B812C00EA4005 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFB591A9178B812C00EA4005 /* PBXContainerItemProxy */; }; AFB591C3178B821E00EA4005 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFB591A7178B812C00EA4005 /* Hexadrop */; targetProxy = AFB591C2178B821E00EA4005 /* PBXContainerItemProxy */; }; AFBFE7401786405E00432B21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFF2867F17860E830050A578 /* QuasiCrystal */; targetProxy = AFBFE73F1786405E00432B21 /* PBXContainerItemProxy */; }; AFBFE7421786407000432B21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF7510FF1782B5B900380EA1 /* Kaleidocycle */; targetProxy = AFBFE7411786407000432B21 /* PBXContainerItemProxy */; }; AFBFE74C178642DC00432B21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFBFE74D178642DC00432B21 /* PBXContainerItemProxy */; }; AFBFE7641786438900432B21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D4DEC09B5BB19006E59CF /* Apple2 */; targetProxy = AFBFE7631786438900432B21 /* PBXContainerItemProxy */; }; AFBFE76A178647FE00432B21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFBFE76B178647FE00432B21 /* PBXContainerItemProxy */; }; AFBFE7811786482B00432B21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF7776E409B63ABF00EA3033 /* Phosphor */; targetProxy = AFBFE7801786482B00432B21 /* PBXContainerItemProxy */; }; AFBFE785178648E600432B21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFBFE74B178642DC00432B21 /* Apple2-OSX */; targetProxy = AFBFE784178648E600432B21 /* PBXContainerItemProxy */; }; AFBFE787178648F500432B21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFBFE767178647FE00432B21 /* Phosphor-OSX */; targetProxy = AFBFE786178648F500432B21 /* PBXContainerItemProxy */; }; AFCAD5F90992DFE00009617A /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9771D60989DC4A001F8B92 /* SaverTester */; targetProxy = AFCAD5F80992DFE00009617A /* PBXContainerItemProxy */; }; AFCF833C1AF5B515008BB7E1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFCF833D1AF5B515008BB7E1 /* PBXContainerItemProxy */; }; AFCF835C1AF5B683008BB7E1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFCF833B1AF5B515008BB7E1 /* SplitFlap */; targetProxy = AFCF835B1AF5B683008BB7E1 /* PBXContainerItemProxy */; }; AFD51B1C0F063B4A00471C02 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD51B1D0F063B4A00471C02 /* PBXContainerItemProxy */; }; AFD51B350F063B7800471C02 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD51B1B0F063B4A00471C02 /* Photopile */; targetProxy = AFD51B340F063B7800471C02 /* PBXContainerItemProxy */; }; AFD56DF20996A03800BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56DF30996A03800BA26F7 /* PBXContainerItemProxy */; }; AFD56EAF0996A72600BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56EB00996A72600BA26F7 /* PBXContainerItemProxy */; }; AFD56EDB0996A95700BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56EDC0996A95700BA26F7 /* PBXContainerItemProxy */; }; AFD56F0C0996AAFA00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56F0D0996AAFA00BA26F7 /* PBXContainerItemProxy */; }; AFD56F240996AB8A00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56F250996AB8A00BA26F7 /* PBXContainerItemProxy */; }; AFD56F500996AEEE00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56F510996AEEE00BA26F7 /* PBXContainerItemProxy */; }; AFD56F6C0996B01600BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56F6D0996B01600BA26F7 /* PBXContainerItemProxy */; }; AFD56F8D0996B09400BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56F8E0996B09400BA26F7 /* PBXContainerItemProxy */; }; AFD56FA40996B10F00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56FA50996B10F00BA26F7 /* PBXContainerItemProxy */; }; AFD56FBA0996B18F00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56FBB0996B18F00BA26F7 /* PBXContainerItemProxy */; }; AFD56FD00996B20900BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56FD10996B20900BA26F7 /* PBXContainerItemProxy */; }; AFD56FF90996B43800BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56FFA0996B43800BA26F7 /* PBXContainerItemProxy */; }; AFD570100996B4CC00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD570110996B4CC00BA26F7 /* PBXContainerItemProxy */; }; AFD570270996B56D00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD570280996B56D00BA26F7 /* PBXContainerItemProxy */; }; AFD570440996B61600BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD570450996B61600BA26F7 /* PBXContainerItemProxy */; }; AFD5705A0996B6A300BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD5705B0996B6A300BA26F7 /* PBXContainerItemProxy */; }; AFD570700996B72700BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD570710996B72700BA26F7 /* PBXContainerItemProxy */; }; AFD570860996B80300BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD570870996B80300BA26F7 /* PBXContainerItemProxy */; }; AFD5709C0996B88E00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD5709D0996B88E00BA26F7 /* PBXContainerItemProxy */; }; AFD570B20996B93000BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD570B30996B93000BA26F7 /* PBXContainerItemProxy */; }; AFD570CA0996B9F800BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD570CB0996B9F800BA26F7 /* PBXContainerItemProxy */; }; AFD570EB0996BBBF00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD570EC0996BBBF00BA26F7 /* PBXContainerItemProxy */; }; AFD571140996BE9300BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD571150996BE9300BA26F7 /* PBXContainerItemProxy */; }; AFD5712D0996BF2E00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD5712E0996BF2E00BA26F7 /* PBXContainerItemProxy */; }; AFD571440996C01700BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD571450996C01700BA26F7 /* PBXContainerItemProxy */; }; AFD5715A0996C0CE00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD5715B0996C0CE00BA26F7 /* PBXContainerItemProxy */; }; AFD571B60996D9DC00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD571B70996D9DC00BA26F7 /* PBXContainerItemProxy */; }; AFD572230996E4A300BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD572240996E4A300BA26F7 /* PBXContainerItemProxy */; }; AFD5726E0996EE8500BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD5726F0996EE8500BA26F7 /* PBXContainerItemProxy */; }; AFD572A60996F99600BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD572A70996F99600BA26F7 /* PBXContainerItemProxy */; }; AFD572C30996FC0F00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD572C40996FC0F00BA26F7 /* PBXContainerItemProxy */; }; AFD572FA099701C000BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD572FB099701C000BA26F7 /* PBXContainerItemProxy */; }; AFD5735E0997411200BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD5735F0997411200BA26F7 /* PBXContainerItemProxy */; }; AFDA658F178A52B70070D24B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFDA6590178A52B70070D24B /* PBXContainerItemProxy */; }; AFDA65AA178A54690070D24B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFDA658E178A52B70070D24B /* Unknown Pleasures */; targetProxy = AFDA65A9178A54690070D24B /* PBXContainerItemProxy */; }; AFE2A4570E2E904600ADB298 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFE2A4580E2E904600ADB298 /* PBXContainerItemProxy */; }; AFE2A46F0E2E908E00ADB298 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFE2A4560E2E904600ADB298 /* SkyTentacles */; targetProxy = AFE2A46E0E2E908E00ADB298 /* PBXContainerItemProxy */; }; AFE30BE90E52B14700CCF4A5 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFE30BEA0E52B14700CCF4A5 /* PBXContainerItemProxy */; }; AFE6A1830CDD7B2E002805BF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFE6A1840CDD7B2E002805BF /* PBXContainerItemProxy */; }; AFE6A19C0CDD7B7F002805BF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFE6A1820CDD7B2E002805BF /* MoebiusGears */; targetProxy = AFE6A19B0CDD7B7F002805BF /* PBXContainerItemProxy */; }; AFE6A41C0CDD7FAA002805BF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFE6A41D0CDD7FAA002805BF /* PBXContainerItemProxy */; }; AFE6A4300CDD7FEE002805BF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFE6A41B0CDD7FAA002805BF /* Abstractile */; targetProxy = AFE6A42F0CDD7FEE002805BF /* PBXContainerItemProxy */; }; AFF2868017860E830050A578 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFF2868117860E830050A578 /* PBXContainerItemProxy */; }; AFF3C9E917CCAC440028F240 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFF3C9EA17CCAC440028F240 /* PBXContainerItemProxy */; }; AFF3CA0117CCAE210028F240 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFF3C9E817CCAC440028F240 /* Geodesic */; targetProxy = AFF3CA0017CCAE210028F240 /* PBXContainerItemProxy */; }; AFF463370C4403E400EE6509 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFF463380C4403E400EE6509 /* PBXContainerItemProxy */; }; AFF463530C44062500EE6509 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFF463360C4403E400EE6509 /* CWaves */; targetProxy = AFF463520C44062500EE6509 /* PBXContainerItemProxy */; }; AFF463590C440AEF00EE6509 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFF4635A0C440AEF00EE6509 /* PBXContainerItemProxy */; }; AFF4636F0C440B3B00EE6509 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFF463580C440AEF00EE6509 /* GLCells */; targetProxy = AFF4636E0C440B3B00EE6509 /* PBXContainerItemProxy */; }; AFFAB31619158CE40020F021 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFFAB31719158CE40020F021 /* PBXContainerItemProxy */; }; AFFAB33519158F1E0020F021 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFFAB31519158CE40020F021 /* ProjectivePlane */; targetProxy = AFFAB33419158F1E0020F021 /* PBXContainerItemProxy */; }; CE04E8CB1B9B61D00085910B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = CE3D01511B76F4C100993C75 /* TestX11 */; targetProxy = CE04E8CA1B9B61D00085910B /* PBXContainerItemProxy */; }; CE3D01521B76F4C100993C75 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = CE3D01531B76F4C100993C75 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( 089C165DFE840E0CC02AAC07 /* InfoPlist.strings */, ); name = InfoPlist.strings; sourceTree = ""; }; AF9772E10989DFC6001F8B92 /* SaverRunner.nib */ = { isa = PBXVariantGroup; children = ( AF9772E20989DFC6001F8B92 /* English */, ); name = SaverRunner.nib; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ AF0839A009930B6B00277BE9 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF0839A109930B6B00277BE9 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF083A46099311D700277BE9 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF083A47099311D700277BE9 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF0DC7BB0C4C73F600D76972 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF0DC7BC0C4C73F600D76972 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF0DCA540C4CBB0D00D76972 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF0DCA550C4CBB0D00D76972 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF137D420F075C9C004DE3B2 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = Obsolete; }; name = Debug; }; AF137D430F075C9C004DE3B2 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = Obsolete; }; name = Release; }; AF1A17710D6D6EE3008AF328 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF1A17720D6D6EE3008AF328 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF1ADA0F18500FA200932759 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.updater"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(SRCROOT)", ); INFOPLIST_FILE = "$(SRCROOT)/Updater.plist"; "OTHER_CFLAGS[sdk=macosx*]" = "-fno-objc-gc"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; name = Debug; }; AF1ADA1018500FA200932759 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.updater"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(SRCROOT)", ); INFOPLIST_FILE = "$(SRCROOT)/Updater.plist"; "OTHER_CFLAGS[sdk=macosx*]" = "-fno-objc-gc"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; name = Release; }; AF2D4D8D13E902F5002AA818 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; GCC_PREPROCESSOR_DEFINITIONS = ( "USE_IPHONE=1", "PHOSPHOR_ONLY=1", "$(inherited)", ); INFOPLIST_FILE = iSaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_NAME = Phosphor; SDKROOT = iphoneos; WRAPPER_EXTENSION = app; }; name = Debug; }; AF2D4D8E13E902F5002AA818 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; GCC_PREPROCESSOR_DEFINITIONS = ( "USE_IPHONE=1", "PHOSPHOR_ONLY=1", "$(inherited)", ); INFOPLIST_FILE = iSaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_NAME = Phosphor; SDKROOT = iphoneos; WRAPPER_EXTENSION = app; }; name = Release; }; AF2D4F7C13E91093002AA818 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; GCC_PREPROCESSOR_DEFINITIONS = ( "USE_IPHONE=1", "APPLE2_ONLY=1", "$(inherited)", ); INFOPLIST_FILE = iSaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_NAME = Apple2; SDKROOT = iphoneos; WRAPPER_EXTENSION = app; }; name = Debug; }; AF2D4F7D13E91093002AA818 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; GCC_PREPROCESSOR_DEFINITIONS = ( "USE_IPHONE=1", "APPLE2_ONLY=1", "$(inherited)", ); INFOPLIST_FILE = iSaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_NAME = Apple2; SDKROOT = iphoneos; WRAPPER_EXTENSION = app; }; name = Release; }; AF32D9F20F3AD0B40080F535 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF32D9F30F3AD0B40080F535 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF3581D31431D47B00E09C51 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF3581D41431D47B00E09C51 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF358214143330F900E09C51 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF358215143330F900E09C51 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF35E89E0E63823600691F2F /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF35E89F0E63823600691F2F /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF39E294198A11F60064A58D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = WindupRobot; }; name = Debug; }; AF39E295198A11F60064A58D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = WindupRobot; }; name = Release; }; AF3C71570D624BF50030CC0D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF3C71580D624BF50030CC0D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF476FC4099D154F001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF476FC5099D154F001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF476FE9099D1686001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF476FEA099D1686001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF47705A099D4385001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF47705B099D4385001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477177099D4786001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477178099D4786001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF47718D099D4803001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF47718E099D4803001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4771B5099D4949001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4771B6099D4949001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4771E9099D4D9A001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4771EA099D4D9A001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477200099D4E63001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477201099D4E63001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477216099D4EE8001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477217099D4EE8001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF47722C099D4F67001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF47722D099D4F67001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477261099D5717001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477262099D5717001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477279099D57B9001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF47727A099D57B9001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477291099D5926001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477292099D5926001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477390099D65A1001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477391099D65A1001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4773A8099D6648001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4773A9099D6648001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4773CF099D67B9001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4773D0099D67B9001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477410099D69E7001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477411099D69E7001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477435099D7C70001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477436099D7C70001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477450099D7D33001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477451099D7D33001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477491099D89E4001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477492099D89E4001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4774A7099D8A74001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4774A8099D8A74001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4774C2099D8B5F001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4774C3099D8B5F001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4774DC099D8BFF001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4774DD099D8BFF001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF47756B099D9A1A001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF47756C099D9A1A001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477591099D9C28001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477592099D9C28001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4775AD099D9CF7001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4775AE099D9CF7001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4775E6099D9F69001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4775E7099D9F69001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477600099DA030001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477601099DA030001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477621099DA26C001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477622099DA26C001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477652099DA6D0001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477653099DA6D0001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477668099DA78E001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477669099DA78E001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF47767E099DA849001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF47767F099DA849001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF47769D099DAA6F001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF47769E099DAA6F001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4776B8099DABDD001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4776B9099DABDD001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4776CE099DAC8A001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4776CF099DAC8A001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4776E9099DADDF001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4776EA099DADDF001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4776FF099DAE7A001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477700099DAE7A001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF47771B099DAF9F001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF47771C099DAF9F001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477731099DB044001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477732099DB044001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477760099DB61E001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477761099DB61E001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477782099DB965001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477783099DB965001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF47779E099DBA90001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF47779F099DBA90001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4777DF099DC183001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4777E0099DC183001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4778B9099DDB79001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4778BA099DDB79001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4778D5099DDCAE001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4778D6099DDCAE001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4778F6099DDDC8001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4778F7099DDDC8001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477917099DE379001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477918099DE379001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477938099DE4C7001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477939099DE4C7001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4808C3098C3B8B00FB32B8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { INSTALL_PATH = /usr/local/lib; SKIP_INSTALL = YES; SUPPORTED_PLATFORMS = "macosx iphonesimulator iphoneos"; VALID_ARCHS = "i386 x86_64 armv6 armv7 armv7s arm64"; }; name = Debug; }; AF4808C4098C3B8B00FB32B8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { INSTALL_PATH = /usr/local/lib; SKIP_INSTALL = YES; SUPPORTED_PLATFORMS = "macosx iphonesimulator iphoneos"; VALID_ARCHS = "i386 x86_64 armv6 armv7 armv7s arm64"; }; name = Release; }; AF480ABB098C66E300FB32B8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "All Savers (XScreenSaver)"; }; name = Debug; }; AF480ABC098C66E300FB32B8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "All Savers (XScreenSaver)"; }; name = Release; }; AF480C56098E301400FB32B8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF480C57098E301400FB32B8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF480D65098EED6E00FB32B8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "All Savers (XLockmore)"; }; name = Debug; }; AF480D66098EED6E00FB32B8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "All Savers (XLockmore)"; }; name = Release; }; AF480D68098EED6E00FB32B8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "All Savers (OpenGL)"; }; name = Debug; }; AF480D69098EED6E00FB32B8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "All Savers (OpenGL)"; }; name = Release; }; AF480D6B098EED6E00FB32B8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "All Savers"; }; name = Debug; }; AF480D6C098EED6E00FB32B8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "All Savers"; }; name = Release; }; AF480D7F098EEDDE00FB32B8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF480D80098EEDDE00FB32B8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4810F909909FBA00FB32B8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF4810FA09909FBA00FB32B8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF4812620990CE2700FB32B8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF4812630990CE2700FB32B8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF4812C40990D3D900FB32B8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF4812C50990D3D900FB32B8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF48DF010A0C25E000F94CF9 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF48DF020A0C25E000F94CF9 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF4A345B102A593600A81B2A /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF4A345C102A593600A81B2A /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF4FD6F80CE7A486005EE58E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF4FD6F90CE7A486005EE58E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF4FF4950D52CA0800666F98 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = m6502.h; }; name = Debug; }; AF4FF4960D52CA0800666F98 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = m6502.h; }; name = Release; }; AF4FF4CC0D52CBDE00666F98 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF4FF4CD0D52CBDE00666F98 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF5C9B0B1A0CCE6E00B0147A /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF5C9B0C1A0CCE6E00B0147A /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF63A8041AB4EDDB00593C75 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = RomanBoy; }; name = Debug; }; AF63A8051AB4EDDB00593C75 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = RomanBoy; }; name = Release; }; AF642403099FF9C2000F4CD4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF642404099FF9C2000F4CD4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF6425DA09A18855000F4CD4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF6425DB09A18855000F4CD4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF6425FA09A189EC000F4CD4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF6425FB09A189EC000F4CD4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF64261D09A18D6C000F4CD4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF64261E09A18D6C000F4CD4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF64263A09A18F54000F4CD4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF64263B09A18F54000F4CD4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF64265D09A19229000F4CD4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF64265E09A19229000F4CD4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF64268909A194B0000F4CD4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF64268A09A194B0000F4CD4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF64277F09A1D37A000F4CD4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF64278009A1D37A000F4CD4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF6427B609A2DE36000F4CD4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF6427B709A2DE36000F4CD4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF68A49019196CF800D41CD1 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = Tessellimage; }; name = Debug; }; AF68A49119196CF800D41CD1 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = Tessellimage; }; name = Release; }; AF73FF341A09877F00E485E9 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = BinaryRing; }; name = Debug; }; AF73FF351A09877F00E485E9 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = BinaryRing; }; name = Release; }; AF7511101782B5B900380EA1 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = Kaleidocycle; }; name = Debug; }; AF7511111782B5B900380EA1 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = Kaleidocycle; }; name = Release; }; AF7776F409B63ABF00EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF7776F509B63ABF00EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF77772809B6416100EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF77772909B6416100EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF77774F09B6446500EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF77775009B6446500EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF77778609B6497800EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF77778709B6497800EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF7777A009B64A5200EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF7777A109B64A5200EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF7777BA09B64B2600EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF7777BB09B64B2600EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF7777E209B64C6B00EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF7777E309B64C6B00EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF7777FC09B64E3100EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF7777FD09B64E3100EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF77782309B6504400EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF77782409B6504400EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF77785609B6528100EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF77785709B6528100EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF77787209B6536000EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF77787309B6536000EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF77788D09B6563500EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { "OTHER_CFLAGS[sdk=macosx*]" = ( "$(OBJC_GC_CFLAGS)", "-DDEBUG", ); }; name = Debug; }; AF77788E09B6563500EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF7778B309B659C800EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF7778B409B659C800EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF78D187142DD8F3002AAF77 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF78D188142DD8F3002AAF77 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF794F72099748450059A8B0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF794F73099748450059A8B0 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF794F9C09974A320059A8B0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF794F9D09974A320059A8B0 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF794FDB09974FA60059A8B0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF794FDC09974FA60059A8B0 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF7ACFD219FF0A9200BD752B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = GeodesicGears; }; name = Debug; }; AF7ACFD319FF0A9200BD752B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = GeodesicGears; }; name = Release; }; AF91898D158FC00A002B5D1E /* Debug */ = { 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"; GCC_PREPROCESSOR_DEFINITIONS = ( "USE_IPHONE=1", "$(inherited)", ); "GCC_WARN_64_TO_32_BIT_CONVERSION[arch=*64]" = NO; INFOPLIST_FILE = iSaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_NAME = XScreenSaver; PROVISIONING_PROFILE = ""; SDKROOT = iphoneos; WRAPPER_EXTENSION = app; }; name = Debug; }; AF91898E158FC00A002B5D1E /* Release */ = { 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"; GCC_PREPROCESSOR_DEFINITIONS = ( "USE_IPHONE=1", "$(inherited)", ); "GCC_WARN_64_TO_32_BIT_CONVERSION[arch=*64]" = NO; INFOPLIST_FILE = iSaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_NAME = XScreenSaver; PROVISIONING_PROFILE = ""; SDKROOT = iphoneos; WRAPPER_EXTENSION = app; }; name = Release; }; AF97573B099C317000B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF97573C099C317000B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975783099C374A00B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975784099C374A00B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9757D0099C3E6300B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9757D1099C3E6300B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975816099C41D500B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975817099C41D500B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975873099C475900B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975874099C475900B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975A44099C681F00B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975A45099C681F00B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975A7A099C6AB200B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975A7B099C6AB200B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975A94099C6BC300B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975A95099C6BC300B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975AE5099C6EB100B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975AE6099C6EB100B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975B0A099C6FE400B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975B0B099C6FE400B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975C20099C8C1500B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975C21099C8C1500B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975C4C099C8DCF00B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975C4D099C8DCF00B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975C6C099C8F3F00B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975C6D099C8F3F00B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975D61099CA0F000B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975D62099CA0F000B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF976FBF0989CAA4001F8B92 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF976FC00989CAA4001F8B92 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF97703E0989D1E6001F8B92 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF97703F0989D1E6001F8B92 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF97707B0989D2F6001F8B92 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF97707C0989D2F6001F8B92 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9771DB0989DC4B001F8B92 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { INFOPLIST_FILE = SaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; WRAPPER_EXTENSION = app; }; name = Debug; }; AF9771DC0989DC4B001F8B92 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { INFOPLIST_FILE = SaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; WRAPPER_EXTENSION = app; }; name = Release; }; AF998EEC0A083DB30051049D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF998EED0A083DB30051049D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF9D467409B5109C006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D467509B5109C006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D475209B5300A006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D475309B5300A006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D476D09B53166006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D476E09B53166006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D48E909B53322006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D48EA09B53322006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D490209B535DA006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D490309B535DA006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D493909B53CBA006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D493A09B53CBA006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D496209B53FC9006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D496309B53FC9006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D497A09B5411D006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D497B09B5411D006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D49A509B544C2006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D49A609B544C2006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D4C7709B59F27006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D4C7809B59F27006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D4CF509B5AA8E006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D4CF609B5AA8E006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D4D8D09B5B2DC006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D4D8E09B5B2DC006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D4DBE09B5B71E006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D4DBF09B5B71E006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D4DFC09B5BB19006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D4DFD09B5BB19006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9E7EC6190F4C1C00A8B01F /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; }; name = Debug; }; AF9E7EC7190F4C1C00A8B01F /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; }; name = Release; }; AFA3393E0B058505002B0E7D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFA3393F0B058505002B0E7D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFA33BCC0B058754002B0E7D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; INSTALL_PATH = "$(HOME)/bin"; "OTHER_CFLAGS[sdk=macosx*]" = "-fno-objc-gc"; OTHER_LDFLAGS = ( "-framework", Cocoa, ); PRODUCT_NAME = "webcollage-helper"; }; name = Debug; }; AFA33BCD0B058754002B0E7D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; INSTALL_PATH = "$(HOME)/bin"; "OTHER_CFLAGS[sdk=macosx*]" = "-fno-objc-gc"; OTHER_LDFLAGS = ( "-framework", Cocoa, ); PRODUCT_NAME = "webcollage-helper"; }; name = Release; }; AFA33C080B058E67002B0E7D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = webcollage; }; name = Debug; }; AFA33C090B058E67002B0E7D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = webcollage; }; name = Release; }; AFA55958099330B000F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55959099330B000F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA5597D0993317900F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA5597E0993317900F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA559A20993322100F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA559A30993322100F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA559C50993328000F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA559C60993328000F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA559DF0993330600F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA559E00993330600F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55A130993340300F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55A140993340300F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55A30099334A000F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55A31099334A000F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55A890993364300F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55A8A0993364300F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55ADF09933CEF00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55AE009933CEF00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55B1C09933E0500F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55B1D09933E0500F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55B3509933E8D00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55B3609933E8D00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55B8909933F7200F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55B8A09933F7200F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55BA109933FDA00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55BA209933FDA00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55BBB099340CE00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55BBC099340CE00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55BF40993429100F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55BF50993429100F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55C1E0993431300F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55C1F0993431300F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55C87099349A600F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55C88099349A600F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55CB909934BB200F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55CBA09934BB200F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55CDC09934CE400F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55CDD09934CE400F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55D4C0993565300F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55D4D0993565300F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55D720993584B00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55D730993584B00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55D8F099358C400F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55D90099358C400F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55DD809935D7000F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55DD909935D7000F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55E0109935E4900F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55E0209935E4900F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55E1D09935EDC00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55E1E09935EDC00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55E4009935F8E00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55E4109935F8E00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55E5E09935FF900F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55E5F09935FF900F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55EE1099360E300F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55EE2099360E300F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55F1C099361B700F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55F1D099361B700F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55F3A0993622F00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55F3B0993622F00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55F520993629000F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55F530993629000F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55F820993643600F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55F830993643600F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55FE309936BFA00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55FE409936BFA00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA5600909936C6D00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA5600A09936C6D00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA5602409936CC800F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA5602509936CC800F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA5604209936D5100F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA5604309936D5100F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA5605A09936E2100F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA5605B09936E2100F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA5607209936F3800F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA5607309936F3800F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA560BE0993718D00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA560BF0993718D00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA5610D0993781600F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA5610E0993781600F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA5611B099378EA00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = molecules.h; }; name = Debug; }; AFA5611C099378EA00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = molecules.h; }; name = Release; }; AFA5616809937C0D00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA5616909937C0D00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA5618B09937CF100F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA5618C09937CF100F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA561AD09937D7E00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA561AE09937D7E00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA562170993849F00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA562180993849F00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA5622F0993852500F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA562300993852500F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA562CF099392C600F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA562D0099392C600F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA562EA099393C900F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA562EB099393C900F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA563020993943B00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA563030993943B00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA563240993951000F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA563250993951000F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA56341099395ED00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA56342099395ED00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA56361099396C000F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA56362099396C000F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA56389099397B300F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA5638A099397B300F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA563B4099398BB00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA563B5099398BB00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFB591B8178B812C00EA4005 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = Hexadrop; }; name = Debug; }; AFB591B9178B812C00EA4005 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = Hexadrop; }; name = Release; }; AFBFE75C178642DC00432B21 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { INFOPLIST_FILE = SaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; "OTHER_CFLAGS[sdk=macosx*]" = ""; PRODUCT_NAME = Apple2; WRAPPER_EXTENSION = app; }; name = Debug; }; AFBFE75D178642DC00432B21 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { INFOPLIST_FILE = SaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; "OTHER_CFLAGS[sdk=macosx*]" = ""; PRODUCT_NAME = Apple2; WRAPPER_EXTENSION = app; }; name = Release; }; AFBFE77C178647FE00432B21 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { INFOPLIST_FILE = SaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; "OTHER_CFLAGS[sdk=macosx*]" = ""; PRODUCT_NAME = Phosphor; WRAPPER_EXTENSION = app; }; name = Debug; }; AFBFE77D178647FE00432B21 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { INFOPLIST_FILE = SaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; "OTHER_CFLAGS[sdk=macosx*]" = ""; PRODUCT_NAME = Phosphor; WRAPPER_EXTENSION = app; }; name = Release; }; AFCF834E1AF5B515008BB7E1 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = SplitFlap; }; name = Debug; }; AFCF834F1AF5B515008BB7E1 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = SplitFlap; }; name = Release; }; AFD51B2E0F063B4A00471C02 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFD51B2F0F063B4A00471C02 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFD56E020996A03800BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFD56E030996A03800BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFD56EBC0996A72600BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD56EBD0996A72600BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD56EE80996A95700BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD56EE90996A95700BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD56F190996AAFA00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD56F1A0996AAFA00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD56F310996AB8A00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD56F320996AB8A00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD56F5D0996AEEE00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD56F5E0996AEEE00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD56F790996B01600BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD56F7A0996B01600BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD56F9A0996B09400BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD56F9B0996B09400BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD56FB10996B10F00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD56FB20996B10F00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD56FC70996B18F00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD56FC80996B18F00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD56FDD0996B20900BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD56FDE0996B20900BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD570060996B43800BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD570070996B43800BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD5701D0996B4CC00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD5701E0996B4CC00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD570340996B56D00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD570350996B56D00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD570510996B61600BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD570520996B61600BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD570670996B6A300BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD570680996B6A300BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD5707D0996B72700BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD5707E0996B72700BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD570930996B80300BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD570940996B80300BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD570A90996B88E00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD570AA0996B88E00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD570BF0996B93000BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD570C00996B93000BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD570D70996B9F800BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD570D80996B9F800BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD570F80996BBBF00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD570F90996BBBF00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD571210996BE9300BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD571220996BE9300BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD5713A0996BF2E00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD5713B0996BF2E00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD571510996C01700BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD571520996C01700BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD571670996C0CE00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD571680996C0CE00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD571C30996D9DC00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD571C40996D9DC00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD572300996E4A300BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD572310996E4A300BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD5727B0996EE8500BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD5727C0996EE8500BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD572B30996F99600BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD572B40996F99600BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD572D00996FC0F00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD572D10996FC0F00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD57307099701C000BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD57308099701C000BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD5736B0997411200BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD5736C0997411200BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFDA659F178A52B70070D24B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = UnknownPleasures; }; name = Debug; }; AFDA65A0178A52B70070D24B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = UnknownPleasures; }; name = Release; }; AFE2A4680E2E904600ADB298 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFE2A4690E2E904600ADB298 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFE30BFA0E52B14700CCF4A5 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFE30BFB0E52B14700CCF4A5 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFE6A1950CDD7B2E002805BF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFE6A1960CDD7B2E002805BF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFE6A42B0CDD7FAA002805BF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFE6A42C0CDD7FAA002805BF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFF2869017860E830050A578 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = QuasiCrystal; }; name = Debug; }; AFF2869117860E830050A578 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = QuasiCrystal; }; name = Release; }; AFF3C9F917CCAC440028F240 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = Geodesic; }; name = Debug; }; AFF3C9FA17CCAC440028F240 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = Geodesic; }; name = Release; }; AFF463450C4403E400EE6509 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFF463460C4403E400EE6509 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFF4636A0C440AEF00EE6509 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFF4636B0C440AEF00EE6509 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFFAB32719158CE40020F021 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFFAB32819158CE40020F021 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = AF94E7411A16E93600289B93 /* xscreensaver.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.${PRODUCT_NAME:rfc1034identifier}"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphonesimulator*]" = "iPhone Developer"; COMBINE_HIDPI_IMAGES = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = xscreensaver_Prefix.pch; GCC_PREPROCESSOR_DEFINITIONS = ( "HAVE_COCOA=1", "GETTIMEOFDAY_TWO_ARGS=1", "HAVE_UNISTD_H=1", "STANDALONE=1", "HAVE_GLBINDTEXTURE=1", "HAVE_UNAME=1", "HAVE_ICMP=1", "HAVE_GETIFADDRS=1", "HAVE_FORKPTY=1", "HAVE_UTIL_H=1", "HAVE_PTHREAD=1", "HAVE_GETADDRINFO=1", "HAVE_STRUCT_SOCKADDR_SA_LEN=1", "HAVE_XUTF8DRAWSTRING=1", "HAVE_INTTYPES_H=1", "$(GCC_PREPROCESSOR_DEFINITIONS)", ); GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "CLASS=XScreenSaver${EXECUTABLE_NAME}View", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_ABOUT_MISSING_NEWLINE = YES; GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES; GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; GCC_WARN_MISSING_PARENTHESES = YES; GCC_WARN_SHADOW = NO; GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_LABEL = YES; GCC_WARN_UNUSED_VALUE = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( "$(HEADER_SEARCH_PATHS)", "$(SRCROOT)/..", "$(SRCROOT)/../utils", "$(SRCROOT)/../hacks", ); INFOPLIST_FILE = XScreenSaver.plist; INSTALL_PATH = "$(HOME)/Library/Screen Savers"; IPHONEOS_DEPLOYMENT_TARGET = 5.1.1; LIBRARY_SEARCH_PATHS = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)"; MACOSX_DEPLOYMENT_TARGET = 10.4; ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = ""; "OTHER_CFLAGS[sdk=macosx*]" = "$(OBJC_GC_CFLAGS)"; "OTHER_LDFLAGS[sdk=macosx*]" = "-headerpad_max_install_names"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = "A33D2D59-2A1E-4D45-8AA1-CB2EC74F9DCC"; SDKROOT = macosx; "SDKROOT[arch=arm*]" = iphoneos; SYMROOT = "$(SRCROOT)/build"; TARGETED_DEVICE_FAMILY = "1,2"; USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR) $(USER_HEADER_SEARCH_PATHS)"; WARNING_CFLAGS = "-Wimplicit"; WRAPPER_EXTENSION = saver; }; name = Debug; }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = AF94E7411A16E93600289B93 /* xscreensaver.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.${PRODUCT_NAME:rfc1034identifier}"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Jamie Zawinski (4627ATJELP)"; "CODE_SIGN_IDENTITY[sdk=iphonesimulator*]" = "iPhone Distribution: Jamie Zawinski (4627ATJELP)"; COMBINE_HIDPI_IMAGES = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = xscreensaver_Prefix.pch; GCC_PREPROCESSOR_DEFINITIONS = ( "HAVE_COCOA=1", "GETTIMEOFDAY_TWO_ARGS=1", "HAVE_UNISTD_H=1", "STANDALONE=1", "HAVE_GLBINDTEXTURE=1", "HAVE_UNAME=1", "HAVE_ICMP=1", "HAVE_GETIFADDRS=1", "HAVE_FORKPTY=1", "HAVE_UTIL_H=1", "HAVE_PTHREAD=1", "HAVE_GETADDRINFO=1", "HAVE_STRUCT_SOCKADDR_SA_LEN=1", "HAVE_XUTF8DRAWSTRING=1", "HAVE_INTTYPES_H=1", "$(GCC_PREPROCESSOR_DEFINITIONS)", ); GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "CLASS=XScreenSaver${EXECUTABLE_NAME}View", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); GCC_WARN_ABOUT_MISSING_NEWLINE = YES; GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES; GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; GCC_WARN_MISSING_PARENTHESES = YES; GCC_WARN_SHADOW = NO; GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_LABEL = YES; GCC_WARN_UNUSED_VALUE = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( "$(HEADER_SEARCH_PATHS)", "$(SRCROOT)/..", "$(SRCROOT)/../utils", "$(SRCROOT)/../hacks", ); INFOPLIST_FILE = XScreenSaver.plist; INSTALL_PATH = "$(HOME)/Library/Screen Savers"; IPHONEOS_DEPLOYMENT_TARGET = 5.1.1; LIBRARY_SEARCH_PATHS = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)"; LLVM_LTO = NO; "LLVM_LTO[sdk=macosx*]" = YES; MACOSX_DEPLOYMENT_TARGET = 10.4; OTHER_CFLAGS = ""; "OTHER_CFLAGS[sdk=macosx*]" = "$(OBJC_GC_CFLAGS)"; "OTHER_LDFLAGS[sdk=macosx*]" = "-headerpad_max_install_names"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = "A33D2D59-2A1E-4D45-8AA1-CB2EC74F9DCC"; SDKROOT = macosx; "SDKROOT[arch=arm*]" = iphoneos; SYMROOT = "$(SRCROOT)/build"; TARGETED_DEVICE_FAMILY = "1,2"; USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR) $(USER_HEADER_SEARCH_PATHS)"; VALIDATE_PRODUCT = YES; WARNING_CFLAGS = "-Wimplicit"; WRAPPER_EXTENSION = saver; }; name = Release; }; CE3D01641B76F4C100993C75 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; CE3D01651B76F4C100993C75 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ AF08399F09930B6B00277BE9 /* Build configuration list for PBXNativeTarget "Atlantis" */ = { isa = XCConfigurationList; buildConfigurations = ( AF0839A009930B6B00277BE9 /* Debug */, AF0839A109930B6B00277BE9 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF083A45099311D700277BE9 /* Build configuration list for PBXNativeTarget "Atunnel" */ = { isa = XCConfigurationList; buildConfigurations = ( AF083A46099311D700277BE9 /* Debug */, AF083A47099311D700277BE9 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF0DC7BA0C4C73F600D76972 /* Build configuration list for PBXNativeTarget "m6502" */ = { isa = XCConfigurationList; buildConfigurations = ( AF0DC7BB0C4C73F600D76972 /* Debug */, AF0DC7BC0C4C73F600D76972 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF0DCA530C4CBB0D00D76972 /* Build configuration list for PBXNativeTarget "Voronoi" */ = { isa = XCConfigurationList; buildConfigurations = ( AF0DCA540C4CBB0D00D76972 /* Debug */, AF0DCA550C4CBB0D00D76972 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF137D450F075CA4004DE3B2 /* Build configuration list for PBXAggregateTarget "Obsolete" */ = { isa = XCConfigurationList; buildConfigurations = ( AF137D420F075C9C004DE3B2 /* Debug */, AF137D430F075C9C004DE3B2 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF1A17700D6D6EE3008AF328 /* Build configuration list for PBXNativeTarget "LCDscrub" */ = { isa = XCConfigurationList; buildConfigurations = ( AF1A17710D6D6EE3008AF328 /* Debug */, AF1A17720D6D6EE3008AF328 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF1ADA0E18500FA200932759 /* Build configuration list for PBXNativeTarget "XScreenSaverUpdater" */ = { isa = XCConfigurationList; buildConfigurations = ( AF1ADA0F18500FA200932759 /* Debug */, AF1ADA1018500FA200932759 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF2D4D8C13E902F5002AA818 /* Build configuration list for PBXNativeTarget "Phosphor-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( AF2D4D8D13E902F5002AA818 /* Debug */, AF2D4D8E13E902F5002AA818 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF2D4F7B13E91093002AA818 /* Build configuration list for PBXNativeTarget "Apple2-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( AF2D4F7C13E91093002AA818 /* Debug */, AF2D4F7D13E91093002AA818 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF32D9F10F3AD0B40080F535 /* Build configuration list for PBXNativeTarget "RubikBlocks" */ = { isa = XCConfigurationList; buildConfigurations = ( AF32D9F20F3AD0B40080F535 /* Debug */, AF32D9F30F3AD0B40080F535 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF3581D21431D47B00E09C51 /* Build configuration list for PBXNativeTarget "CompanionCube" */ = { isa = XCConfigurationList; buildConfigurations = ( AF3581D31431D47B00E09C51 /* Debug */, AF3581D41431D47B00E09C51 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF358213143330F900E09C51 /* Build configuration list for PBXNativeTarget "TronBit" */ = { isa = XCConfigurationList; buildConfigurations = ( AF358214143330F900E09C51 /* Debug */, AF358215143330F900E09C51 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF35E89D0E63823600691F2F /* Build configuration list for PBXNativeTarget "Jigsaw" */ = { isa = XCConfigurationList; buildConfigurations = ( AF35E89E0E63823600691F2F /* Debug */, AF35E89F0E63823600691F2F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF39E293198A11F60064A58D /* Build configuration list for PBXNativeTarget "WindupRobot" */ = { isa = XCConfigurationList; buildConfigurations = ( AF39E294198A11F60064A58D /* Debug */, AF39E295198A11F60064A58D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF3C71560D624BF50030CC0D /* Build configuration list for PBXNativeTarget "Hypnowheel" */ = { isa = XCConfigurationList; buildConfigurations = ( AF3C71570D624BF50030CC0D /* Debug */, AF3C71580D624BF50030CC0D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF476FC3099D154F001F091E /* Build configuration list for PBXNativeTarget "Interference" */ = { isa = XCConfigurationList; buildConfigurations = ( AF476FC4099D154F001F091E /* Debug */, AF476FC5099D154F001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF476FE8099D1686001F091E /* Build configuration list for PBXNativeTarget "Truchet" */ = { isa = XCConfigurationList; buildConfigurations = ( AF476FE9099D1686001F091E /* Debug */, AF476FEA099D1686001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477059099D4385001F091E /* Build configuration list for PBXNativeTarget "Deluxe" */ = { isa = XCConfigurationList; buildConfigurations = ( AF47705A099D4385001F091E /* Debug */, AF47705B099D4385001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477176099D4786001F091E /* Build configuration list for PBXNativeTarget "Compass" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477177099D4786001F091E /* Debug */, AF477178099D4786001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47718C099D4803001F091E /* Build configuration list for PBXNativeTarget "Wander" */ = { isa = XCConfigurationList; buildConfigurations = ( AF47718D099D4803001F091E /* Debug */, AF47718E099D4803001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4771B4099D4949001F091E /* Build configuration list for PBXNativeTarget "T3D" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4771B5099D4949001F091E /* Debug */, AF4771B6099D4949001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4771E8099D4D9A001F091E /* Build configuration list for PBXNativeTarget "CCurve" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4771E9099D4D9A001F091E /* Debug */, AF4771EA099D4D9A001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4771FF099D4E63001F091E /* Build configuration list for PBXNativeTarget "NerveRot" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477200099D4E63001F091E /* Debug */, AF477201099D4E63001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477215099D4EE8001F091E /* Build configuration list for PBXNativeTarget "Whirlygig" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477216099D4EE8001F091E /* Debug */, AF477217099D4EE8001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47722B099D4F67001F091E /* Build configuration list for PBXNativeTarget "Anemone" */ = { isa = XCConfigurationList; buildConfigurations = ( AF47722C099D4F67001F091E /* Debug */, AF47722D099D4F67001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477260099D5717001F091E /* Build configuration list for PBXNativeTarget "Halftone" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477261099D5717001F091E /* Debug */, AF477262099D5717001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477278099D57B9001F091E /* Build configuration list for PBXNativeTarget "PopSquares" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477279099D57B9001F091E /* Debug */, AF47727A099D57B9001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477290099D5926001F091E /* Build configuration list for PBXNativeTarget "Piecewise" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477291099D5926001F091E /* Debug */, AF477292099D5926001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47738F099D65A1001F091E /* Build configuration list for PBXNativeTarget "Wormhole" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477390099D65A1001F091E /* Debug */, AF477391099D65A1001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4773A7099D6648001F091E /* Build configuration list for PBXNativeTarget "FuzzyFlakes" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4773A8099D6648001F091E /* Debug */, AF4773A9099D6648001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4773CE099D67B9001F091E /* Build configuration list for PBXNativeTarget "Anemotaxis" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4773CF099D67B9001F091E /* Debug */, AF4773D0099D67B9001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47740F099D69E7001F091E /* Build configuration list for PBXNativeTarget "Intermomentary" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477410099D69E7001F091E /* Debug */, AF477411099D69E7001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477434099D7C70001F091E /* Build configuration list for PBXNativeTarget "IFS" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477435099D7C70001F091E /* Debug */, AF477436099D7C70001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47744F099D7D33001F091E /* Build configuration list for PBXNativeTarget "XMatrix" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477450099D7D33001F091E /* Debug */, AF477451099D7D33001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477490099D89E4001F091E /* Build configuration list for PBXNativeTarget "Flame" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477491099D89E4001F091E /* Debug */, AF477492099D89E4001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4774A6099D8A74001F091E /* Build configuration list for PBXNativeTarget "Kaleidescope" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4774A7099D8A74001F091E /* Debug */, AF4774A8099D8A74001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4774C1099D8B5F001F091E /* Build configuration list for PBXNativeTarget "LMorph" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4774C2099D8B5F001F091E /* Debug */, AF4774C3099D8B5F001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4774DB099D8BFF001F091E /* Build configuration list for PBXNativeTarget "Maze" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4774DC099D8BFF001F091E /* Debug */, AF4774DD099D8BFF001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47756A099D9A1A001F091E /* Build configuration list for PBXNativeTarget "Pedal" */ = { isa = XCConfigurationList; buildConfigurations = ( AF47756B099D9A1A001F091E /* Debug */, AF47756C099D9A1A001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477590099D9C28001F091E /* Build configuration list for PBXNativeTarget "Pyro" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477591099D9C28001F091E /* Debug */, AF477592099D9C28001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4775AC099D9CF7001F091E /* Build configuration list for PBXNativeTarget "Starfish" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4775AD099D9CF7001F091E /* Debug */, AF4775AE099D9CF7001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4775E5099D9F69001F091E /* Build configuration list for PBXNativeTarget "Coral" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4775E6099D9F69001F091E /* Debug */, AF4775E7099D9F69001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4775FF099DA030001F091E /* Build configuration list for PBXNativeTarget "Epicycle" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477600099DA030001F091E /* Debug */, AF477601099DA030001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477620099DA26C001F091E /* Build configuration list for PBXNativeTarget "Kumppa" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477621099DA26C001F091E /* Debug */, AF477622099DA26C001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477651099DA6D0001F091E /* Build configuration list for PBXNativeTarget "Squiral" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477652099DA6D0001F091E /* Debug */, AF477653099DA6D0001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477667099DA78E001F091E /* Build configuration list for PBXNativeTarget "Critical" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477668099DA78E001F091E /* Debug */, AF477669099DA78E001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47767D099DA849001F091E /* Build configuration list for PBXNativeTarget "Petri" */ = { isa = XCConfigurationList; buildConfigurations = ( AF47767E099DA849001F091E /* Debug */, AF47767F099DA849001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47769C099DAA6F001F091E /* Build configuration list for PBXNativeTarget "Blaster" */ = { isa = XCConfigurationList; buildConfigurations = ( AF47769D099DAA6F001F091E /* Debug */, AF47769E099DAA6F001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4776B7099DABDD001F091E /* Build configuration list for PBXNativeTarget "XSpirograph" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4776B8099DABDD001F091E /* Debug */, AF4776B9099DABDD001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4776CD099DAC8A001F091E /* Build configuration list for PBXNativeTarget "XRaySwarm" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4776CE099DAC8A001F091E /* Debug */, AF4776CF099DAC8A001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4776E8099DADDF001F091E /* Build configuration list for PBXNativeTarget "WhirlWindWarp" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4776E9099DADDF001F091E /* Debug */, AF4776EA099DADDF001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4776FE099DAE7A001F091E /* Build configuration list for PBXNativeTarget "Vermiculate" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4776FF099DAE7A001F091E /* Debug */, AF477700099DAE7A001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47771A099DAF9F001F091E /* Build configuration list for PBXNativeTarget "CloudLife" */ = { isa = XCConfigurationList; buildConfigurations = ( AF47771B099DAF9F001F091E /* Debug */, AF47771C099DAF9F001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477730099DB044001F091E /* Build configuration list for PBXNativeTarget "Substrate" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477731099DB044001F091E /* Debug */, AF477732099DB044001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47775F099DB61E001F091E /* Build configuration list for PBXNativeTarget "Interaggregate" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477760099DB61E001F091E /* Debug */, AF477761099DB61E001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477781099DB965001F091E /* Build configuration list for PBXNativeTarget "Celtic" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477782099DB965001F091E /* Debug */, AF477783099DB965001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47779D099DBA90001F091E /* Build configuration list for PBXNativeTarget "FluidBalls" */ = { isa = XCConfigurationList; buildConfigurations = ( AF47779E099DBA90001F091E /* Debug */, AF47779F099DBA90001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4777DE099DC183001F091E /* Build configuration list for PBXNativeTarget "BoxFit" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4777DF099DC183001F091E /* Debug */, AF4777E0099DC183001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4778B8099DDB79001F091E /* Build configuration list for PBXNativeTarget "Penetrate" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4778B9099DDB79001F091E /* Debug */, AF4778BA099DDB79001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4778D4099DDCAE001F091E /* Build configuration list for PBXNativeTarget "XJack" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4778D5099DDCAE001F091E /* Debug */, AF4778D6099DDCAE001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4778F5099DDDC8001F091E /* Build configuration list for PBXNativeTarget "Cynosure" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4778F6099DDDC8001F091E /* Debug */, AF4778F7099DDDC8001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477916099DE379001F091E /* Build configuration list for PBXNativeTarget "Flag" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477917099DE379001F091E /* Debug */, AF477918099DE379001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477937099DE4C7001F091E /* Build configuration list for PBXNativeTarget "Slip" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477938099DE4C7001F091E /* Debug */, AF477939099DE4C7001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4808C2098C3B8B00FB32B8 /* Build configuration list for PBXNativeTarget "jwxyz" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4808C3098C3B8B00FB32B8 /* Debug */, AF4808C4098C3B8B00FB32B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF480ABA098C66E300FB32B8 /* Build configuration list for PBXAggregateTarget "All Savers (XScreenSaver)" */ = { isa = XCConfigurationList; buildConfigurations = ( AF480ABB098C66E300FB32B8 /* Debug */, AF480ABC098C66E300FB32B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF480C55098E301400FB32B8 /* Build configuration list for PBXNativeTarget "Helix" */ = { isa = XCConfigurationList; buildConfigurations = ( AF480C56098E301400FB32B8 /* Debug */, AF480C57098E301400FB32B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF480D64098EED6E00FB32B8 /* Build configuration list for PBXAggregateTarget "All Savers (XLockmore)" */ = { isa = XCConfigurationList; buildConfigurations = ( AF480D65098EED6E00FB32B8 /* Debug */, AF480D66098EED6E00FB32B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF480D67098EED6E00FB32B8 /* Build configuration list for PBXAggregateTarget "All Savers (OpenGL)" */ = { isa = XCConfigurationList; buildConfigurations = ( AF480D68098EED6E00FB32B8 /* Debug */, AF480D69098EED6E00FB32B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF480D6A098EED6E00FB32B8 /* Build configuration list for PBXAggregateTarget "All Savers" */ = { isa = XCConfigurationList; buildConfigurations = ( AF480D6B098EED6E00FB32B8 /* Debug */, AF480D6C098EED6E00FB32B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF480D7E098EEDDE00FB32B8 /* Build configuration list for PBXNativeTarget "Drift" */ = { isa = XCConfigurationList; buildConfigurations = ( AF480D7F098EEDDE00FB32B8 /* Debug */, AF480D80098EEDDE00FB32B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4810F809909FBA00FB32B8 /* Build configuration list for PBXNativeTarget "DangerBall" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4810F909909FBA00FB32B8 /* Debug */, AF4810FA09909FBA00FB32B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4812610990CE2700FB32B8 /* Build configuration list for PBXNativeTarget "Gears" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4812620990CE2700FB32B8 /* Debug */, AF4812630990CE2700FB32B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4812C30990D3D900FB32B8 /* Build configuration list for PBXNativeTarget "Pipes" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4812C40990D3D900FB32B8 /* Debug */, AF4812C50990D3D900FB32B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF48DF000A0C25E000F94CF9 /* Build configuration list for PBXNativeTarget "GLSchool" */ = { isa = XCConfigurationList; buildConfigurations = ( AF48DF010A0C25E000F94CF9 /* Debug */, AF48DF020A0C25E000F94CF9 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4A345A102A593600A81B2A /* Build configuration list for PBXNativeTarget "Surfaces" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4A345B102A593600A81B2A /* Debug */, AF4A345C102A593600A81B2A /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4FD6F70CE7A486005EE58E /* Build configuration list for PBXNativeTarget "Lockward" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4FD6F80CE7A486005EE58E /* Debug */, AF4FD6F90CE7A486005EE58E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4FF4940D52CA0800666F98 /* Build configuration list for PBXLegacyTarget "m6502.h" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4FF4950D52CA0800666F98 /* Debug */, AF4FF4960D52CA0800666F98 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4FF4CB0D52CBDE00666F98 /* Build configuration list for PBXNativeTarget "CubicGrid" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4FF4CC0D52CBDE00666F98 /* Debug */, AF4FF4CD0D52CBDE00666F98 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF5C9B0A1A0CCE6E00B0147A /* Build configuration list for PBXNativeTarget "Cityflow" */ = { isa = XCConfigurationList; buildConfigurations = ( AF5C9B0B1A0CCE6E00B0147A /* Debug */, AF5C9B0C1A0CCE6E00B0147A /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF63A8031AB4EDDB00593C75 /* Build configuration list for PBXNativeTarget "RomanBoy" */ = { isa = XCConfigurationList; buildConfigurations = ( AF63A8041AB4EDDB00593C75 /* Debug */, AF63A8051AB4EDDB00593C75 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF642402099FF9C2000F4CD4 /* Build configuration list for PBXNativeTarget "Extrusion" */ = { isa = XCConfigurationList; buildConfigurations = ( AF642403099FF9C2000F4CD4 /* Debug */, AF642404099FF9C2000F4CD4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF6425D909A18855000F4CD4 /* Build configuration list for PBXNativeTarget "HyperCube" */ = { isa = XCConfigurationList; buildConfigurations = ( AF6425DA09A18855000F4CD4 /* Debug */, AF6425DB09A18855000F4CD4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF6425F909A189EC000F4CD4 /* Build configuration list for PBXNativeTarget "Qix" */ = { isa = XCConfigurationList; buildConfigurations = ( AF6425FA09A189EC000F4CD4 /* Debug */, AF6425FB09A189EC000F4CD4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF64261C09A18D6C000F4CD4 /* Build configuration list for PBXNativeTarget "HyperBall" */ = { isa = XCConfigurationList; buildConfigurations = ( AF64261D09A18D6C000F4CD4 /* Debug */, AF64261E09A18D6C000F4CD4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF64263909A18F54000F4CD4 /* Build configuration list for PBXNativeTarget "Moire2" */ = { isa = XCConfigurationList; buildConfigurations = ( AF64263A09A18F54000F4CD4 /* Debug */, AF64263B09A18F54000F4CD4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF64265C09A19229000F4CD4 /* Build configuration list for PBXNativeTarget "Munch" */ = { isa = XCConfigurationList; buildConfigurations = ( AF64265D09A19229000F4CD4 /* Debug */, AF64265E09A19229000F4CD4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF64268809A194B0000F4CD4 /* Build configuration list for PBXNativeTarget "Goop" */ = { isa = XCConfigurationList; buildConfigurations = ( AF64268909A194B0000F4CD4 /* Debug */, AF64268A09A194B0000F4CD4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF64277E09A1D37A000F4CD4 /* Build configuration list for PBXNativeTarget "SpeedMine" */ = { isa = XCConfigurationList; buildConfigurations = ( AF64277F09A1D37A000F4CD4 /* Debug */, AF64278009A1D37A000F4CD4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF6427B509A2DE36000F4CD4 /* Build configuration list for PBXNativeTarget "Bubbles" */ = { isa = XCConfigurationList; buildConfigurations = ( AF6427B609A2DE36000F4CD4 /* Debug */, AF6427B709A2DE36000F4CD4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF68A48F19196CF800D41CD1 /* Build configuration list for PBXNativeTarget "Tessellimage" */ = { isa = XCConfigurationList; buildConfigurations = ( AF68A49019196CF800D41CD1 /* Debug */, AF68A49119196CF800D41CD1 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF73FF331A09877F00E485E9 /* Build configuration list for PBXNativeTarget "BinaryRing" */ = { isa = XCConfigurationList; buildConfigurations = ( AF73FF341A09877F00E485E9 /* Debug */, AF73FF351A09877F00E485E9 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF75110F1782B5B900380EA1 /* Build configuration list for PBXNativeTarget "Kaleidocycle" */ = { isa = XCConfigurationList; buildConfigurations = ( AF7511101782B5B900380EA1 /* Debug */, AF7511111782B5B900380EA1 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF7776F309B63ABF00EA3033 /* Build configuration list for PBXNativeTarget "Phosphor" */ = { isa = XCConfigurationList; buildConfigurations = ( AF7776F409B63ABF00EA3033 /* Debug */, AF7776F509B63ABF00EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF77772709B6416100EA3033 /* Build configuration list for PBXNativeTarget "Pacman" */ = { isa = XCConfigurationList; buildConfigurations = ( AF77772809B6416100EA3033 /* Debug */, AF77772909B6416100EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF77774E09B6446500EA3033 /* Build configuration list for PBXNativeTarget "FlipScreen3D" */ = { isa = XCConfigurationList; buildConfigurations = ( AF77774F09B6446500EA3033 /* Debug */, AF77775009B6446500EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF77778509B6497800EA3033 /* Build configuration list for PBXNativeTarget "Gleidescope" */ = { isa = XCConfigurationList; buildConfigurations = ( AF77778609B6497800EA3033 /* Debug */, AF77778709B6497800EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF77779F09B64A5200EA3033 /* Build configuration list for PBXNativeTarget "MirrorBlob" */ = { isa = XCConfigurationList; buildConfigurations = ( AF7777A009B64A5200EA3033 /* Debug */, AF7777A109B64A5200EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF7777B909B64B2600EA3033 /* Build configuration list for PBXNativeTarget "StonerView" */ = { isa = XCConfigurationList; buildConfigurations = ( AF7777BA09B64B2600EA3033 /* Debug */, AF7777BB09B64B2600EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF7777E109B64C6B00EA3033 /* Build configuration list for PBXNativeTarget "GLSlideshow" */ = { isa = XCConfigurationList; buildConfigurations = ( AF7777E209B64C6B00EA3033 /* Debug */, AF7777E309B64C6B00EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF7777FB09B64E3100EA3033 /* Build configuration list for PBXNativeTarget "FlipText" */ = { isa = XCConfigurationList; buildConfigurations = ( AF7777FC09B64E3100EA3033 /* Debug */, AF7777FD09B64E3100EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF77782209B6504400EA3033 /* Build configuration list for PBXNativeTarget "StarWars" */ = { isa = XCConfigurationList; buildConfigurations = ( AF77782309B6504400EA3033 /* Debug */, AF77782409B6504400EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF77785509B6528100EA3033 /* Build configuration list for PBXNativeTarget "Carousel" */ = { isa = XCConfigurationList; buildConfigurations = ( AF77785609B6528100EA3033 /* Debug */, AF77785709B6528100EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF77787109B6536000EA3033 /* Build configuration list for PBXNativeTarget "DNAlogo" */ = { isa = XCConfigurationList; buildConfigurations = ( AF77787209B6536000EA3033 /* Debug */, AF77787309B6536000EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF77788C09B6563500EA3033 /* Build configuration list for PBXNativeTarget "FontGlide" */ = { isa = XCConfigurationList; buildConfigurations = ( AF77788D09B6563500EA3033 /* Debug */, AF77788E09B6563500EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF7778B209B659C800EA3033 /* Build configuration list for PBXNativeTarget "BlitSpin" */ = { isa = XCConfigurationList; buildConfigurations = ( AF7778B309B659C800EA3033 /* Debug */, AF7778B409B659C800EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF78D186142DD8F3002AAF77 /* Build configuration list for PBXNativeTarget "Hilbert" */ = { isa = XCConfigurationList; buildConfigurations = ( AF78D187142DD8F3002AAF77 /* Debug */, AF78D188142DD8F3002AAF77 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF794F71099748450059A8B0 /* Build configuration list for PBXNativeTarget "Demon" */ = { isa = XCConfigurationList; buildConfigurations = ( AF794F72099748450059A8B0 /* Debug */, AF794F73099748450059A8B0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF794F9B09974A320059A8B0 /* Build configuration list for PBXNativeTarget "Fiberlamp" */ = { isa = XCConfigurationList; buildConfigurations = ( AF794F9C09974A320059A8B0 /* Debug */, AF794F9D09974A320059A8B0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF794FDA09974FA60059A8B0 /* Build configuration list for PBXNativeTarget "Loop" */ = { isa = XCConfigurationList; buildConfigurations = ( AF794FDB09974FA60059A8B0 /* Debug */, AF794FDC09974FA60059A8B0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF7ACFD119FF0A9200BD752B /* Build configuration list for PBXNativeTarget "GeodesicGears" */ = { isa = XCConfigurationList; buildConfigurations = ( AF7ACFD219FF0A9200BD752B /* Debug */, AF7ACFD319FF0A9200BD752B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF91898C158FC00A002B5D1E /* Build configuration list for PBXNativeTarget "XScreenSaver-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( AF91898D158FC00A002B5D1E /* Debug */, AF91898E158FC00A002B5D1E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF97573A099C317000B05160 /* Build configuration list for PBXNativeTarget "IMSMap" */ = { isa = XCConfigurationList; buildConfigurations = ( AF97573B099C317000B05160 /* Debug */, AF97573C099C317000B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975782099C374A00B05160 /* Build configuration list for PBXNativeTarget "Moire" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975783099C374A00B05160 /* Debug */, AF975784099C374A00B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9757CF099C3E6300B05160 /* Build configuration list for PBXNativeTarget "RDbomb" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9757D0099C3E6300B05160 /* Debug */, AF9757D1099C3E6300B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975815099C41D500B05160 /* Build configuration list for PBXNativeTarget "XFlame" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975816099C41D500B05160 /* Debug */, AF975817099C41D500B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975872099C475900B05160 /* Build configuration list for PBXNativeTarget "ShadeBobs" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975873099C475900B05160 /* Debug */, AF975874099C475900B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975A43099C681F00B05160 /* Build configuration list for PBXNativeTarget "MetaBalls" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975A44099C681F00B05160 /* Debug */, AF975A45099C681F00B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975A79099C6AB200B05160 /* Build configuration list for PBXNativeTarget "Eruption" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975A7A099C6AB200B05160 /* Debug */, AF975A7B099C6AB200B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975A93099C6BC300B05160 /* Build configuration list for PBXNativeTarget "Barcode" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975A94099C6BC300B05160 /* Debug */, AF975A95099C6BC300B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975AE4099C6EB100B05160 /* Build configuration list for PBXNativeTarget "Fireworkx" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975AE5099C6EB100B05160 /* Debug */, AF975AE6099C6EB100B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975B09099C6FE400B05160 /* Build configuration list for PBXNativeTarget "MemScroller" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975B0A099C6FE400B05160 /* Debug */, AF975B0B099C6FE400B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975C1F099C8C1500B05160 /* Build configuration list for PBXNativeTarget "Halo" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975C20099C8C1500B05160 /* Debug */, AF975C21099C8C1500B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975C4B099C8DCF00B05160 /* Build configuration list for PBXNativeTarget "Greynetic" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975C4C099C8DCF00B05160 /* Debug */, AF975C4D099C8DCF00B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975C6B099C8F3F00B05160 /* Build configuration list for PBXNativeTarget "NoseGuy" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975C6C099C8F3F00B05160 /* Debug */, AF975C6D099C8F3F00B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975D60099CA0F000B05160 /* Build configuration list for PBXNativeTarget "Rocks" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975D61099CA0F000B05160 /* Debug */, AF975D62099CA0F000B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF976FBE0989CAA4001F8B92 /* Build configuration list for PBXNativeTarget "Deco" */ = { isa = XCConfigurationList; buildConfigurations = ( AF976FBF0989CAA4001F8B92 /* Debug */, AF976FC00989CAA4001F8B92 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF97703D0989D1E6001F8B92 /* Build configuration list for PBXNativeTarget "Rorschach" */ = { isa = XCConfigurationList; buildConfigurations = ( AF97703E0989D1E6001F8B92 /* Debug */, AF97703F0989D1E6001F8B92 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF97707A0989D2F6001F8B92 /* Build configuration list for PBXNativeTarget "Attraction" */ = { isa = XCConfigurationList; buildConfigurations = ( AF97707B0989D2F6001F8B92 /* Debug */, AF97707C0989D2F6001F8B92 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9771DA0989DC4B001F8B92 /* Build configuration list for PBXNativeTarget "SaverTester" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9771DB0989DC4B001F8B92 /* Debug */, AF9771DC0989DC4B001F8B92 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF998EEB0A083DB30051049D /* Build configuration list for PBXNativeTarget "TopBlock" */ = { isa = XCConfigurationList; buildConfigurations = ( AF998EEC0A083DB30051049D /* Debug */, AF998EED0A083DB30051049D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D467309B5109C006E59CF /* Build configuration list for PBXNativeTarget "DecayScreen" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D467409B5109C006E59CF /* Debug */, AF9D467509B5109C006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D475109B5300A006E59CF /* Build configuration list for PBXNativeTarget "SlideScreen" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D475209B5300A006E59CF /* Debug */, AF9D475309B5300A006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D476C09B53166006E59CF /* Build configuration list for PBXNativeTarget "Zoom" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D476D09B53166006E59CF /* Debug */, AF9D476E09B53166006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D48E809B53322006E59CF /* Build configuration list for PBXNativeTarget "Bumps" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D48E909B53322006E59CF /* Debug */, AF9D48EA09B53322006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D490109B535DA006E59CF /* Build configuration list for PBXNativeTarget "Distort" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D490209B535DA006E59CF /* Debug */, AF9D490309B535DA006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D493809B53CBA006E59CF /* Build configuration list for PBXNativeTarget "Ripples" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D493909B53CBA006E59CF /* Debug */, AF9D493A09B53CBA006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D496109B53FC9006E59CF /* Build configuration list for PBXNativeTarget "RotZoomer" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D496209B53FC9006E59CF /* Debug */, AF9D496309B53FC9006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D497909B5411D006E59CF /* Build configuration list for PBXNativeTarget "Twang" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D497A09B5411D006E59CF /* Debug */, AF9D497B09B5411D006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D49A409B544C2006E59CF /* Build configuration list for PBXNativeTarget "Spotlight" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D49A509B544C2006E59CF /* Debug */, AF9D49A609B544C2006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D4C7609B59F27006E59CF /* Build configuration list for PBXNativeTarget "XLyap" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D4C7709B59F27006E59CF /* Debug */, AF9D4C7809B59F27006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D4CF409B5AA8E006E59CF /* Build configuration list for PBXNativeTarget "Pong" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D4CF509B5AA8E006E59CF /* Debug */, AF9D4CF609B5AA8E006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D4D8C09B5B2DC006E59CF /* Build configuration list for PBXNativeTarget "XAnalogTV" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D4D8D09B5B2DC006E59CF /* Debug */, AF9D4D8E09B5B2DC006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D4DBD09B5B71E006E59CF /* Build configuration list for PBXNativeTarget "BSOD" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D4DBE09B5B71E006E59CF /* Debug */, AF9D4DBF09B5B71E006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D4DFB09B5BB19006E59CF /* Build configuration list for PBXNativeTarget "Apple2" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D4DFC09B5BB19006E59CF /* Debug */, AF9D4DFD09B5BB19006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9E7EC5190F4C1C00A8B01F /* Build configuration list for PBXNativeTarget "enable_gc" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9E7EC6190F4C1C00A8B01F /* Debug */, AF9E7EC7190F4C1C00A8B01F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA3393D0B058505002B0E7D /* Build configuration list for PBXNativeTarget "WebCollage" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA3393E0B058505002B0E7D /* Debug */, AFA3393F0B058505002B0E7D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA33BCB0B058754002B0E7D /* Build configuration list for PBXNativeTarget "webcollage-helper" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA33BCC0B058754002B0E7D /* Debug */, AFA33BCD0B058754002B0E7D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA33C070B058E67002B0E7D /* Build configuration list for PBXAggregateTarget "webcollage-perl" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA33C080B058E67002B0E7D /* Debug */, AFA33C090B058E67002B0E7D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55957099330B000F3E977 /* Build configuration list for PBXNativeTarget "Cage" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55958099330B000F3E977 /* Debug */, AFA55959099330B000F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5597C0993317900F3E977 /* Build configuration list for PBXNativeTarget "Moebius" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5597D0993317900F3E977 /* Debug */, AFA5597E0993317900F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA559A10993322100F3E977 /* Build configuration list for PBXNativeTarget "Superquadrics" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA559A20993322100F3E977 /* Debug */, AFA559A30993322100F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA559C40993328000F3E977 /* Build configuration list for PBXNativeTarget "Morph3D" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA559C50993328000F3E977 /* Debug */, AFA559C60993328000F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA559DE0993330600F3E977 /* Build configuration list for PBXNativeTarget "Rubik" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA559DF0993330600F3E977 /* Debug */, AFA559E00993330600F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55A120993340300F3E977 /* Build configuration list for PBXNativeTarget "Stairs" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55A130993340300F3E977 /* Debug */, AFA55A140993340300F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55A2F099334A000F3E977 /* Build configuration list for PBXNativeTarget "Sproingies" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55A30099334A000F3E977 /* Debug */, AFA55A31099334A000F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55A880993364300F3E977 /* Build configuration list for PBXNativeTarget "Lament" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55A890993364300F3E977 /* Debug */, AFA55A8A0993364300F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55ADE09933CEF00F3E977 /* Build configuration list for PBXNativeTarget "Bubble3D" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55ADF09933CEF00F3E977 /* Debug */, AFA55AE009933CEF00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55B1B09933E0500F3E977 /* Build configuration list for PBXNativeTarget "GLPlanet" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55B1C09933E0500F3E977 /* Debug */, AFA55B1D09933E0500F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55B3409933E8D00F3E977 /* Build configuration list for PBXNativeTarget "Pulsar" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55B3509933E8D00F3E977 /* Debug */, AFA55B3609933E8D00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55B8809933F7200F3E977 /* Build configuration list for PBXNativeTarget "Sierpinski3D" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55B8909933F7200F3E977 /* Debug */, AFA55B8A09933F7200F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55BA009933FDA00F3E977 /* Build configuration list for PBXNativeTarget "GFlux" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55BA109933FDA00F3E977 /* Debug */, AFA55BA209933FDA00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55BBA099340CE00F3E977 /* Build configuration list for PBXNativeTarget "Circuit" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55BBB099340CE00F3E977 /* Debug */, AFA55BBC099340CE00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55BF30993429100F3E977 /* Build configuration list for PBXNativeTarget "Menger" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55BF40993429100F3E977 /* Debug */, AFA55BF50993429100F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55C1D0993431300F3E977 /* Build configuration list for PBXNativeTarget "Engine" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55C1E0993431300F3E977 /* Debug */, AFA55C1F0993431300F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55C86099349A600F3E977 /* Build configuration list for PBXNativeTarget "GLSnake" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55C87099349A600F3E977 /* Debug */, AFA55C88099349A600F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55CB809934BB200F3E977 /* Build configuration list for PBXNativeTarget "Boxed" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55CB909934BB200F3E977 /* Debug */, AFA55CBA09934BB200F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55CDB09934CE400F3E977 /* Build configuration list for PBXNativeTarget "GLForestFire" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55CDC09934CE400F3E977 /* Debug */, AFA55CDD09934CE400F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55D4B0993565300F3E977 /* Build configuration list for PBXNativeTarget "SBalls" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55D4C0993565300F3E977 /* Debug */, AFA55D4D0993565300F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55D710993584B00F3E977 /* Build configuration list for PBXNativeTarget "Cubenetic" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55D720993584B00F3E977 /* Debug */, AFA55D730993584B00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55D8E099358C400F3E977 /* Build configuration list for PBXNativeTarget "Spheremonics" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55D8F099358C400F3E977 /* Debug */, AFA55D90099358C400F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55DD709935D7000F3E977 /* Build configuration list for PBXNativeTarget "Lavalite" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55DD809935D7000F3E977 /* Debug */, AFA55DD909935D7000F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55E0009935E4900F3E977 /* Build configuration list for PBXNativeTarget "Queens" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55E0109935E4900F3E977 /* Debug */, AFA55E0209935E4900F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55E1C09935EDC00F3E977 /* Build configuration list for PBXNativeTarget "Endgame" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55E1D09935EDC00F3E977 /* Debug */, AFA55E1E09935EDC00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55E3F09935F8E00F3E977 /* Build configuration list for PBXNativeTarget "GLBlur" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55E4009935F8E00F3E977 /* Debug */, AFA55E4109935F8E00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55E5D09935FF900F3E977 /* Build configuration list for PBXNativeTarget "FlyingToasters" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55E5E09935FF900F3E977 /* Debug */, AFA55E5F09935FF900F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55EE0099360E300F3E977 /* Build configuration list for PBXNativeTarget "BouncingCow" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55EE1099360E300F3E977 /* Debug */, AFA55EE2099360E300F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55F1B099361B700F3E977 /* Build configuration list for PBXNativeTarget "JigglyPuff" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55F1C099361B700F3E977 /* Debug */, AFA55F1D099361B700F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55F390993622F00F3E977 /* Build configuration list for PBXNativeTarget "Klein" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55F3A0993622F00F3E977 /* Debug */, AFA55F3B0993622F00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55F510993629000F3E977 /* Build configuration list for PBXNativeTarget "Hypertorus" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55F520993629000F3E977 /* Debug */, AFA55F530993629000F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55F810993643600F3E977 /* Build configuration list for PBXNativeTarget "GLMatrix" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55F820993643600F3E977 /* Debug */, AFA55F830993643600F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55FE209936BFA00F3E977 /* Build configuration list for PBXNativeTarget "CubeStorm" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55FE309936BFA00F3E977 /* Debug */, AFA55FE409936BFA00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5600809936C6D00F3E977 /* Build configuration list for PBXNativeTarget "GLKnots" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5600909936C6D00F3E977 /* Debug */, AFA5600A09936C6D00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5602309936CC800F3E977 /* Build configuration list for PBXNativeTarget "BlockTube" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5602409936CC800F3E977 /* Debug */, AFA5602509936CC800F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5604109936D5100F3E977 /* Build configuration list for PBXNativeTarget "FlipFlop" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5604209936D5100F3E977 /* Debug */, AFA5604309936D5100F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5605909936E2100F3E977 /* Build configuration list for PBXNativeTarget "AntInspect" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5605A09936E2100F3E977 /* Debug */, AFA5605B09936E2100F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5607109936F3800F3E977 /* Build configuration list for PBXNativeTarget "AntSpotlight" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5607209936F3800F3E977 /* Debug */, AFA5607309936F3800F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA560BD0993718D00F3E977 /* Build configuration list for PBXNativeTarget "Polytopes" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA560BE0993718D00F3E977 /* Debug */, AFA560BF0993718D00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5610C0993781600F3E977 /* Build configuration list for PBXNativeTarget "Molecule" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5610D0993781600F3E977 /* Debug */, AFA5610E0993781600F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5611A099378EA00F3E977 /* Build configuration list for PBXLegacyTarget "molecules.h" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5611B099378EA00F3E977 /* Debug */, AFA5611C099378EA00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5616709937C0D00F3E977 /* Build configuration list for PBXNativeTarget "BlinkBox" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5616809937C0D00F3E977 /* Debug */, AFA5616909937C0D00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5618A09937CF100F3E977 /* Build configuration list for PBXNativeTarget "Noof" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5618B09937CF100F3E977 /* Debug */, AFA5618C09937CF100F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA561AC09937D7E00F3E977 /* Build configuration list for PBXNativeTarget "Polyhedra" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA561AD09937D7E00F3E977 /* Debug */, AFA561AE09937D7E00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA562160993849F00F3E977 /* Build configuration list for PBXNativeTarget "Providence" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA562170993849F00F3E977 /* Debug */, AFA562180993849F00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5622E0993852500F3E977 /* Build configuration list for PBXNativeTarget "Pinion" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5622F0993852500F3E977 /* Debug */, AFA562300993852500F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA562CE099392C600F3E977 /* Build configuration list for PBXNativeTarget "Boing" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA562CF099392C600F3E977 /* Debug */, AFA562D0099392C600F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA562E9099393C900F3E977 /* Build configuration list for PBXNativeTarget "AntMaze" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA562EA099393C900F3E977 /* Debug */, AFA562EB099393C900F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA563010993943B00F3E977 /* Build configuration list for PBXNativeTarget "Tangram" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA563020993943B00F3E977 /* Debug */, AFA563030993943B00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA563230993951000F3E977 /* Build configuration list for PBXNativeTarget "Crackberg" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA563240993951000F3E977 /* Debug */, AFA563250993951000F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA56340099395ED00F3E977 /* Build configuration list for PBXNativeTarget "GLHanoi" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA56341099395ED00F3E977 /* Debug */, AFA56342099395ED00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA56360099396C000F3E977 /* Build configuration list for PBXNativeTarget "Cube21" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA56361099396C000F3E977 /* Debug */, AFA56362099396C000F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA56388099397B300F3E977 /* Build configuration list for PBXNativeTarget "TimeTunnel" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA56389099397B300F3E977 /* Debug */, AFA5638A099397B300F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA563B3099398BB00F3E977 /* Build configuration list for PBXNativeTarget "Juggler3D" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA563B4099398BB00F3E977 /* Debug */, AFA563B5099398BB00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFB591B7178B812C00EA4005 /* Build configuration list for PBXNativeTarget "Hexadrop" */ = { isa = XCConfigurationList; buildConfigurations = ( AFB591B8178B812C00EA4005 /* Debug */, AFB591B9178B812C00EA4005 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFBFE75B178642DC00432B21 /* Build configuration list for PBXNativeTarget "Apple2-OSX" */ = { isa = XCConfigurationList; buildConfigurations = ( AFBFE75C178642DC00432B21 /* Debug */, AFBFE75D178642DC00432B21 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFBFE77B178647FE00432B21 /* Build configuration list for PBXNativeTarget "Phosphor-OSX" */ = { isa = XCConfigurationList; buildConfigurations = ( AFBFE77C178647FE00432B21 /* Debug */, AFBFE77D178647FE00432B21 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFCF834D1AF5B515008BB7E1 /* Build configuration list for PBXNativeTarget "SplitFlap" */ = { isa = XCConfigurationList; buildConfigurations = ( AFCF834E1AF5B515008BB7E1 /* Debug */, AFCF834F1AF5B515008BB7E1 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD51B2D0F063B4A00471C02 /* Build configuration list for PBXNativeTarget "Photopile" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD51B2E0F063B4A00471C02 /* Debug */, AFD51B2F0F063B4A00471C02 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56E010996A03800BA26F7 /* Build configuration list for PBXNativeTarget "GLText" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56E020996A03800BA26F7 /* Debug */, AFD56E030996A03800BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56EBB0996A72600BA26F7 /* Build configuration list for PBXNativeTarget "Braid" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56EBC0996A72600BA26F7 /* Debug */, AFD56EBD0996A72600BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56EE70996A95700BA26F7 /* Build configuration list for PBXNativeTarget "Forest" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56EE80996A95700BA26F7 /* Debug */, AFD56EE90996A95700BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56F180996AAFA00BA26F7 /* Build configuration list for PBXNativeTarget "Vines" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56F190996AAFA00BA26F7 /* Debug */, AFD56F1A0996AAFA00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56F300996AB8A00BA26F7 /* Build configuration list for PBXNativeTarget "Galaxy" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56F310996AB8A00BA26F7 /* Debug */, AFD56F320996AB8A00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56F5C0996AEEE00BA26F7 /* Build configuration list for PBXNativeTarget "Grav" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56F5D0996AEEE00BA26F7 /* Debug */, AFD56F5E0996AEEE00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56F780996B01600BA26F7 /* Build configuration list for PBXNativeTarget "Hopalong" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56F790996B01600BA26F7 /* Debug */, AFD56F7A0996B01600BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56F990996B09400BA26F7 /* Build configuration list for PBXNativeTarget "Laser" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56F9A0996B09400BA26F7 /* Debug */, AFD56F9B0996B09400BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56FB00996B10F00BA26F7 /* Build configuration list for PBXNativeTarget "Lightning" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56FB10996B10F00BA26F7 /* Debug */, AFD56FB20996B10F00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56FC60996B18F00BA26F7 /* Build configuration list for PBXNativeTarget "Lisa" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56FC70996B18F00BA26F7 /* Debug */, AFD56FC80996B18F00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56FDC0996B20900BA26F7 /* Build configuration list for PBXNativeTarget "Lissie" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56FDD0996B20900BA26F7 /* Debug */, AFD56FDE0996B20900BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD570050996B43800BA26F7 /* Build configuration list for PBXNativeTarget "Penrose" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD570060996B43800BA26F7 /* Debug */, AFD570070996B43800BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD5701C0996B4CC00BA26F7 /* Build configuration list for PBXNativeTarget "Sierpinski" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD5701D0996B4CC00BA26F7 /* Debug */, AFD5701E0996B4CC00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD570330996B56D00BA26F7 /* Build configuration list for PBXNativeTarget "Sphere" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD570340996B56D00BA26F7 /* Debug */, AFD570350996B56D00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD570500996B61600BA26F7 /* Build configuration list for PBXNativeTarget "Spiral" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD570510996B61600BA26F7 /* Debug */, AFD570520996B61600BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD570660996B6A300BA26F7 /* Build configuration list for PBXNativeTarget "FadePlot" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD570670996B6A300BA26F7 /* Debug */, AFD570680996B6A300BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD5707C0996B72700BA26F7 /* Build configuration list for PBXNativeTarget "Mountain" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD5707D0996B72700BA26F7 /* Debug */, AFD5707E0996B72700BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD570920996B80300BA26F7 /* Build configuration list for PBXNativeTarget "Triangle" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD570930996B80300BA26F7 /* Debug */, AFD570940996B80300BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD570A80996B88E00BA26F7 /* Build configuration list for PBXNativeTarget "Worm" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD570A90996B88E00BA26F7 /* Debug */, AFD570AA0996B88E00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD570BE0996B93000BA26F7 /* Build configuration list for PBXNativeTarget "Rotor" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD570BF0996B93000BA26F7 /* Debug */, AFD570C00996B93000BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD570D60996B9F800BA26F7 /* Build configuration list for PBXNativeTarget "Ant" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD570D70996B9F800BA26F7 /* Debug */, AFD570D80996B9F800BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD570F70996BBBF00BA26F7 /* Build configuration list for PBXNativeTarget "Flow" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD570F80996BBBF00BA26F7 /* Debug */, AFD570F90996BBBF00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD571200996BE9300BA26F7 /* Build configuration list for PBXNativeTarget "Discrete" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD571210996BE9300BA26F7 /* Debug */, AFD571220996BE9300BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD571390996BF2E00BA26F7 /* Build configuration list for PBXNativeTarget "Apollonian" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD5713A0996BF2E00BA26F7 /* Debug */, AFD5713B0996BF2E00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD571500996C01700BA26F7 /* Build configuration list for PBXNativeTarget "Euler2D" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD571510996C01700BA26F7 /* Debug */, AFD571520996C01700BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD571660996C0CE00BA26F7 /* Build configuration list for PBXNativeTarget "Thornbird" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD571670996C0CE00BA26F7 /* Debug */, AFD571680996C0CE00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD571C20996D9DC00BA26F7 /* Build configuration list for PBXNativeTarget "Juggle" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD571C30996D9DC00BA26F7 /* Debug */, AFD571C40996D9DC00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD5722F0996E4A300BA26F7 /* Build configuration list for PBXNativeTarget "Swirl" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD572300996E4A300BA26F7 /* Debug */, AFD572310996E4A300BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD5727A0996EE8500BA26F7 /* Build configuration list for PBXNativeTarget "Polyominoes" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD5727B0996EE8500BA26F7 /* Debug */, AFD5727C0996EE8500BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD572B20996F99600BA26F7 /* Build configuration list for PBXNativeTarget "Bouboule" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD572B30996F99600BA26F7 /* Debug */, AFD572B40996F99600BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD572CF0996FC0F00BA26F7 /* Build configuration list for PBXNativeTarget "Crystal" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD572D00996FC0F00BA26F7 /* Debug */, AFD572D10996FC0F00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD57306099701C000BA26F7 /* Build configuration list for PBXNativeTarget "Julia" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD57307099701C000BA26F7 /* Debug */, AFD57308099701C000BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD5736A0997411200BA26F7 /* Build configuration list for PBXNativeTarget "Strange" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD5736B0997411200BA26F7 /* Debug */, AFD5736C0997411200BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFDA659E178A52B70070D24B /* Build configuration list for PBXNativeTarget "Unknown Pleasures" */ = { isa = XCConfigurationList; buildConfigurations = ( AFDA659F178A52B70070D24B /* Debug */, AFDA65A0178A52B70070D24B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFE2A4670E2E904600ADB298 /* Build configuration list for PBXNativeTarget "SkyTentacles" */ = { isa = XCConfigurationList; buildConfigurations = ( AFE2A4680E2E904600ADB298 /* Debug */, AFE2A4690E2E904600ADB298 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFE30BF90E52B14700CCF4A5 /* Build configuration list for PBXNativeTarget "Sonar" */ = { isa = XCConfigurationList; buildConfigurations = ( AFE30BFA0E52B14700CCF4A5 /* Debug */, AFE30BFB0E52B14700CCF4A5 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFE6A1940CDD7B2E002805BF /* Build configuration list for PBXNativeTarget "MoebiusGears" */ = { isa = XCConfigurationList; buildConfigurations = ( AFE6A1950CDD7B2E002805BF /* Debug */, AFE6A1960CDD7B2E002805BF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFE6A42A0CDD7FAA002805BF /* Build configuration list for PBXNativeTarget "Abstractile" */ = { isa = XCConfigurationList; buildConfigurations = ( AFE6A42B0CDD7FAA002805BF /* Debug */, AFE6A42C0CDD7FAA002805BF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFF2868F17860E830050A578 /* Build configuration list for PBXNativeTarget "QuasiCrystal" */ = { isa = XCConfigurationList; buildConfigurations = ( AFF2869017860E830050A578 /* Debug */, AFF2869117860E830050A578 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFF3C9F817CCAC440028F240 /* Build configuration list for PBXNativeTarget "Geodesic" */ = { isa = XCConfigurationList; buildConfigurations = ( AFF3C9F917CCAC440028F240 /* Debug */, AFF3C9FA17CCAC440028F240 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFF463440C4403E400EE6509 /* Build configuration list for PBXNativeTarget "CWaves" */ = { isa = XCConfigurationList; buildConfigurations = ( AFF463450C4403E400EE6509 /* Debug */, AFF463460C4403E400EE6509 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFF463690C440AEF00EE6509 /* Build configuration list for PBXNativeTarget "GLCells" */ = { isa = XCConfigurationList; buildConfigurations = ( AFF4636A0C440AEF00EE6509 /* Debug */, AFF4636B0C440AEF00EE6509 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFFAB32619158CE40020F021 /* Build configuration list for PBXNativeTarget "ProjectivePlane" */ = { isa = XCConfigurationList; buildConfigurations = ( AFFAB32719158CE40020F021 /* Debug */, AFFAB32819158CE40020F021 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; C01FCF4E08A954540054247B /* Build configuration list for PBXProject "xscreensaver" */ = { isa = XCConfigurationList; buildConfigurations = ( C01FCF4F08A954540054247B /* Debug */, C01FCF5008A954540054247B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; CE3D01631B76F4C100993C75 /* Build configuration list for PBXNativeTarget "TestX11" */ = { isa = XCConfigurationList; buildConfigurations = ( CE3D01641B76F4C100993C75 /* Debug */, CE3D01651B76F4C100993C75 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; } xscreensaver-5.34/utils/README000644 000767 000767 00000000425 05627212565 015714 0ustar00jwzjwz000000 000000 This directory contains various utilities that are used both by the screensaver driver and by the demo programs; for example, a portable implementation of usleep(), and code for manipulating color maps. If you have compilation problems, check the parameters in ../config.h. xscreensaver-5.34/utils/Makefile.in000664 000767 000000 00000025631 12612754262 017354 0ustar00jwzwheel000000 000000 # utils/Makefile.in --- xscreensaver, Copyright (c) 1997-2010 Jamie Zawinski. # the `../configure' script generates `utils/Makefile' from this file. # The utilities in this directory are used mostly by the demos in ../hacks/. # The Makefile in that directory builds executables by simply referencing # the .o files in this directory. ############################################################################## # # Some rambling about dynamic libraries follows, ignore it if you don't care # (which is almost assuredly the case.) # # # It would probably be sensible to just build a single .a file in this # directory, and link the hacks against that (statically.) I haven't done # that for two reasons: first, it works now, and why fix what ain't broke; # second, it wouldn't actually improve anything for the end user (it would # just make the Makefiles be a little smaller.) # # People sometimes suggest that the stuff in this directory should be in a # dynamic library, and that the hacks should be linked dynamically against # it. I haven't done this for a number of reasons: # # * First, the only thing that would improve would be disk space, in that # the executable files themselves would be smaller. That's it. Many other # things would get worse if we used a dynamic library: # # * Complication of installation procedures: suddenly, before any of the # hacks will work, you need to have a dynamic library installed, and # the system configured to use it. This is, basically, rocket science. # Most people don't know how to do this, it's a huge pain, and on many # systems, it requires root access. # # * Complication of the Makefile: every system builds dynamic libraries # differently. Every compiler takes different flags. I don't want to # do the hand-holding for the scores of Unix systems and compilers on # which people try to build this program. # # * Reduction of maintainability: gdb is remarkably bad at dealing with # debug info in dynamic libraries, and when debugging a hack, one would # constantly be fighting the linker and the debugger (or linking # statically when debugging.) # # * Version skew: when things are statically linked, it's perfectly ok to # make incompatible changes to the APIs defined in this directory, so long # as the current version in ../hacks/ is in sync. Much more care would # need to be taken with such things if dynamic libraries were involved, # to make sure that the major and minor versions of the library changed # at the appropriate time. This isn't too hard, but it's more work, and # yet another opportunity to screw up. # # * Runtime memory usage goes *up*. That's right, up! When a program # links in a dynamic library, the whole library is brought into the # address space, not just the files that are actually used. Normally, # this is ok, because if several programs are using (for example) # libX11.so, chances are that the savings outweighs the overhead. But # the nature of xscreensaver is that only one of the hacks ever runs at # a time -- so there would never be a second program using the utils/ # dynamic library with which things could be shared. # # * Runtime speed decreases slightly, since dynamic code is marginally # slower. On modern machines, this probably doesn't make a perceptible # difference, however. # # So basically, I just don't think using libraries would be a win, and it would # definitely cause more of a maintenance and portability headache. However, # if someone else wants to do the work to make it be an option to configure, # and verifies that it works on several (more than three) different Unixes, # I'd be happy to take the patches. # -- jwz, 30-Jun-98 # ############################################################################## @SET_MAKE@ .SUFFIXES: .SUFFIXES: .c .o srcdir = @srcdir@ VPATH = @srcdir@ prefix = @prefix@ datarootdir = @datarootdir@ CC = @CC@ CFLAGS = @CFLAGS@ DEFS = @DEFS@ DEPEND = @DEPEND@ DEPEND_FLAGS = @DEPEND_FLAGS@ DEPEND_DEFINES = @DEPEND_DEFINES@ SHELL = /bin/sh INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DIRS = @INSTALL_DIRS@ X_CFLAGS = @X_CFLAGS@ INCLUDES_1 = -I$(srcdir) -I.. INCLUDES = $(INCLUDES_1) @INCLUDES@ SRCS = alpha.c colors.c fade.c grabscreen.c grabclient.c hsv.c \ overlay.c resources.c spline.c usleep.c visual.c \ visual-gl.c xmu.c logo.c yarandom.c erase.c \ xshm.c xdbe.c colorbars.c minixpm.c textclient.c \ aligned_malloc.c thread_util.c async_netdb.c xft.c utf8wc.c OBJS = alpha.o colors.o fade.o grabscreen.o grabclient.o hsv.o \ overlay.o resources.o spline.o usleep.o visual.o \ visual-gl.o xmu.o logo.o yarandom.o erase.o \ xshm.o xdbe.o colorbars.o minixpm.o textclient.o \ aligned_malloc.o thread_util.o async_netdb.o xft.o utf8wc.o HDRS = alpha.h colors.h fade.h grabscreen.h hsv.h resources.h \ spline.h usleep.h utils.h version.h visual.h vroot.h xmu.h \ yarandom.h erase.h xshm.h xdbe.h colorbars.h minixpm.h \ xscreensaver-intl.h textclient.h aligned_malloc.h \ thread_util.h async_netdb.h xft.h utf8wc.h STAR = * LOGOS = images/$(STAR).xpm \ images/$(STAR).png \ images/$(STAR).gif \ images/$(STAR).eps EXTRAS = README Makefile.in ad2c VMSFILES = compile_axp.com compile_decc.com vms-gtod.c vms-gtod.h \ vms-strdup.c TARFILES = $(EXTRAS) $(VMSFILES) $(SRCS) $(HDRS) $(LOGOS) default: all all: $(OBJS) install: install-program install-man uninstall: uninstall-program uninstall-man install-strip: $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' install install-program: install-man: uninstall-program: uninstall-man: clean: -rm -f *.o a.out core distclean: clean -rm -f Makefile TAGS *~ "#"* # Adds all current dependencies to Makefile depend: $(DEPEND) -s '# DO NOT DELETE: updated by make depend' \ $(DEPEND_FLAGS) -- \ $(INCLUDES) $(DEFS) $(DEPEND_DEFINES) $(CFLAGS) $(X_CFLAGS) -- \ $(SRCS) # Adds some dependencies to Makefile.in -- not totally accurate, but pretty # close. This excludes dependencies on files in /usr/include, etc. It tries # to include only dependencies on files which are themselves a part of this # package. distdepend:: @echo updating dependencies in `pwd`/Makefile.in... ; \ $(DEPEND) -w 0 -f - \ -s '# DO NOT DELETE: updated by make distdepend' $(DEPEND_FLAGS) -- \ $(INCLUDES_1) $(DEFS) $(DEPEND_DEFINES) $(CFLAGS) $(X_CFLAGS) -- \ $(SRCS) 2>/dev/null | \ sort -d | \ ( \ awk '/^# .*Makefile.in ---/,/^# DO .*distdepend/' < Makefile.in ; \ sed -e '/^#.*/d' \ -e 's@ \./@ @g;s@ /[^ ]*@@g;/^.*:$$/d' \ -e 's@ \([^$$]\)@ $$(srcdir)/\1@g' \ -e 's@ $$(srcdir)/\(.*config.h\)@ \1@g' ; \ echo '' \ ) > /tmp/distdepend.$$$$ && \ mv Makefile.in Makefile.in.bak && \ mv /tmp/distdepend.$$$$ Makefile.in TAGS: tags tags: find $(srcdir) -name '*.[chly]' -print | xargs etags -a echo_tarfiles: @echo $(TARFILES) # How we build object files in this directory. .c.o: $(CC) -c $(INCLUDES) $(DEFS) $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) $< # Rules for generating the VMS makefiles on Unix, so that it doesn't have to # be done by hand... # VMS_AXP_COMPILE=$$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) compile_axp.com: Makefile.in @echo generating $@ from $<... ; \ ( ( for c in $(SRCS) vms-*.c ; do \ c=`echo $$c | tr a-z A-Z` ; \ echo "$(VMS_AXP_COMPILE) $$c" ; \ done ; \ ) | sort -d ; \ echo '$$ lib/cre utils.olb_axp' ; \ echo '$$ lib utils.olb_axp *.obj' ; \ echo '$$! delete/noconf *.obj;' ; \ ) > $@ compile_decc.com: compile_axp.com @echo generating $@ from $<... ; \ sed 's/axp/decc/g' < $< > $@ distdepend:: compile_axp.com compile_decc.com ############################################################################## # # DO NOT DELETE: updated by make distdepend aligned_malloc.o: $(srcdir)/aligned_malloc.h alpha.o: $(srcdir)/alpha.h alpha.o: ../config.h alpha.o: $(srcdir)/hsv.h alpha.o: $(srcdir)/resources.h alpha.o: $(srcdir)/utils.h alpha.o: $(srcdir)/visual.h alpha.o: $(srcdir)/yarandom.h async_netdb.o: $(srcdir)/aligned_malloc.h async_netdb.o: $(srcdir)/async_netdb.h async_netdb.o: ../config.h async_netdb.o: $(srcdir)/thread_util.h colorbars.o: $(srcdir)/colorbars.h colorbars.o: ../config.h colorbars.o: $(srcdir)/resources.h colorbars.o: $(srcdir)/utils.h colors.o: $(srcdir)/colors.h colors.o: ../config.h colors.o: $(srcdir)/hsv.h colors.o: $(srcdir)/utils.h colors.o: $(srcdir)/visual.h colors.o: $(srcdir)/yarandom.h erase.o: ../config.h erase.o: $(srcdir)/erase.h erase.o: $(srcdir)/resources.h erase.o: $(srcdir)/usleep.h erase.o: $(srcdir)/utils.h erase.o: $(srcdir)/yarandom.h fade.o: ../config.h fade.o: $(srcdir)/fade.h fade.o: $(srcdir)/usleep.h fade.o: $(srcdir)/utils.h fade.o: $(srcdir)/visual.h grabclient.o: ../config.h grabclient.o: $(srcdir)/grabscreen.h grabclient.o: $(srcdir)/resources.h grabclient.o: $(srcdir)/utils.h grabclient.o: $(srcdir)/vroot.h grabclient.o: $(srcdir)/yarandom.h grabscreen.o: $(srcdir)/colors.h grabscreen.o: ../config.h grabscreen.o: $(srcdir)/grabscreen.h grabscreen.o: $(srcdir)/resources.h grabscreen.o: $(srcdir)/usleep.h grabscreen.o: $(srcdir)/utils.h grabscreen.o: $(srcdir)/visual.h grabscreen.o: $(srcdir)/vroot.h grabscreen.o: $(srcdir)/yarandom.h hsv.o: ../config.h hsv.o: $(srcdir)/hsv.h hsv.o: $(srcdir)/utils.h logo.o: ../config.h logo.o: $(srcdir)/images/logo-180.xpm logo.o: $(srcdir)/images/logo-50.xpm logo.o: $(srcdir)/minixpm.h logo.o: $(srcdir)/resources.h logo.o: $(srcdir)/utils.h logo.o: $(srcdir)/visual.h minixpm.o: ../config.h minixpm.o: $(srcdir)/minixpm.h overlay.o: ../config.h overlay.o: $(srcdir)/utils.h overlay.o: $(srcdir)/visual.h resources.o: ../config.h resources.o: $(srcdir)/resources.h resources.o: $(srcdir)/utils.h spline.o: ../config.h spline.o: $(srcdir)/spline.h spline.o: $(srcdir)/utils.h textclient.o: ../config.h textclient.o: $(srcdir)/resources.h textclient.o: $(srcdir)/textclient.h textclient.o: $(srcdir)/utils.h thread_util.o: $(srcdir)/aligned_malloc.h thread_util.o: ../config.h thread_util.o: $(srcdir)/resources.h thread_util.o: $(srcdir)/thread_util.h usleep.o: ../config.h utf8wc.o: ../config.h utf8wc.o: $(srcdir)/utf8wc.h visual-gl.o: ../config.h visual-gl.o: $(srcdir)/resources.h visual-gl.o: $(srcdir)/utils.h visual-gl.o: $(srcdir)/visual.h visual.o: ../config.h visual.o: $(srcdir)/resources.h visual.o: $(srcdir)/utils.h visual.o: $(srcdir)/visual.h xdbe.o: ../config.h xdbe.o: $(srcdir)/resources.h xdbe.o: $(srcdir)/utils.h xdbe.o: $(srcdir)/xdbe.h xft.o: ../config.h xmu.o: ../config.h xshm.o: ../config.h xshm.o: $(srcdir)/resources.h xshm.o: $(srcdir)/utils.h xshm.o: $(srcdir)/xshm.h yarandom.o: ../config.h yarandom.o: $(srcdir)/yarandom.h xscreensaver-5.34/utils/ad2c000755 000767 000767 00000001407 10160203524 015553 0ustar00jwzjwz000000 000000 #!/bin/sh # # ad2c : Convert app-defaults file to C strings decls. # # George Ferguson, ferguson@cs.rcohester.edu, 12 Nov 1990. # 19 Mar 1991 : gf # Made it self-contained. # 6 Jan 1992 : mycroft@gnu.ai.mit.edu (Charles Hannum) # Removed use of "-n" and ":read" label since Gnu and # IBM sed print pattern space on "n" command. Still works # with Sun sed, of course. # 7 Jan 1992: matthew@sunpix.East.Sun.COM (Matthew Stier) # Escape quotes after escaping backslashes. # 22 Oct 2004: jwz: # Convert CR to LF. # #sed 's/\r/\n/g' "$@" | perl -npe 's/\r/\n/g' < "$@" | sed ' /^!/d /^$/d s/\\/\\\\/g s/\\$//g s/"/\\"/g s/^/"/ : test /\\$/b slash s/$/",/ p d : slash n /^!/d /^$/d s/"/\\"/g s/\\\\/\\/g s/\\n/\\\\n/g s/\\t/\\\\t/g s/\\f/\\\\f/g s/\\b/\\\\b/g b test' xscreensaver-5.34/utils/compile_axp.com000644 000767 000767 00000004054 12612754262 020033 0ustar00jwzjwz000000 000000 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) ALIGNED_MALLOC.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) ALPHA.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) ASYNC_NETDB.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) COLORBARS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) COLORS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) ERASE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) FADE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) GRABCLIENT.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) GRABSCREEN.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) HSV.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) LOGO.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) MINIXPM.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) OVERLAY.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) RESOURCES.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) SPLINE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) TEXTCLIENT.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) THREAD_UTIL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) USLEEP.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) UTF8WC.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) VISUAL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) VISUAL-GL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) VMS-GTOD.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) VMS-STRDUP.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) XDBE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) XFT.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) XMU.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) XSHM.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) YARANDOM.C $ lib/cre utils.olb_axp $ lib utils.olb_axp *.obj $! delete/noconf *.obj; xscreensaver-5.34/utils/compile_decc.com000644 000767 000767 00000004056 12612754262 020143 0ustar00jwzjwz000000 000000 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) ALIGNED_MALLOC.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) ALPHA.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) ASYNC_NETDB.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) COLORBARS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) COLORS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) ERASE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) FADE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) GRABCLIENT.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) GRABSCREEN.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) HSV.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) LOGO.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) MINIXPM.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) OVERLAY.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) RESOURCES.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) SPLINE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) TEXTCLIENT.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) THREAD_UTIL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) USLEEP.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) UTF8WC.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) VISUAL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) VISUAL-GL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) VMS-GTOD.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) VMS-STRDUP.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) XDBE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) XFT.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) XMU.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) XSHM.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) YARANDOM.C $ lib/cre utils.olb_decc $ lib utils.olb_decc *.obj $! delete/noconf *.obj; xscreensaver-5.34/utils/vms-gtod.c000644 000767 000767 00000001743 06366446436 016753 0ustar00jwzjwz000000 000000 /* * UNIX-style Time Functions, by pmoreau@cena.dgac.fr * (picked up from XVMSUTILS unix emulation routines for VMS by * Trevor Taylor, Patrick Mahans and Martin P.J. Zinser) * * 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. */ #include #include #include #include "vms-gtod.h" /* * gettimeofday(2) - Returns the current time */ int gettimeofday(tv) struct timeval *tv; { timeb_t tmp_time; ftime(&tmp_time); tv->tv_sec = tmp_time.time; tv->tv_usec = tmp_time.millitm * 1000; return (0); } xscreensaver-5.34/utils/vms-gtod.h000644 000767 000767 00000003235 06366446436 016756 0ustar00jwzjwz000000 000000 /* @(#)time.h 2.9 87/01/17 SMI; from UCB 7.1 6/4/86 */ /* Definitions of various structures used on UNIX for time-related syscalls. */ /* * Copyright (c) 1982, 1986 Regents of the University of California. * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ #ifndef _VMS_GTOD_ #define _VMS_GTOD_ #ifdef __cplusplus extern "C" { #endif /* * Structure returned by gettimeofday(2) system call, * and used in other calls. */ #ifndef __DECC struct timeval { long tv_sec; /* seconds */ long tv_usec; /* and microseconds */ }; #else #if __DECC_VER < 50200000 struct timeval { long tv_sec; /* seconds */ long tv_usec; /* and microseconds */ }; #endif /* __DECC_VER */ #endif /* __DECC */ /* * Operations on timevals. * * NB: timercmp does not work for >= or <=. */ #define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec) #define timercmp(tvp, uvp, cmp) \ ((tvp)->tv_sec cmp (uvp)->tv_sec || \ (tvp)->tv_sec == (uvp)->tv_sec && (tvp)->tv_usec cmp (uvp)->tv_usec) #define timerclear(tvp) (tvp)->tv_sec = (tvp)->tv_usec = 0 /* * Names of the interval timers, and structure * defining a timer setting. */ #define ITIMER_REAL 0 #define ITIMER_VIRTUAL 1 #define ITIMER_PROF 2 #ifndef __DECC struct itimerval { struct timeval it_interval; /* timer interval */ struct timeval it_value; /* current value */ }; #else #if __DECC_VER < 50200000 struct itimerval { struct timeval it_interval; /* timer interval */ struct timeval it_value; /* current value */ }; #endif /* __DECC_VER */ #endif /* __DECC */ #ifndef KERNEL #include #endif #ifdef __cplusplus } #endif #endif /*!_VMS_GTOD_*/ xscreensaver-5.34/utils/vms-strdup.c000644 000767 000767 00000000757 06371504272 017330 0ustar00jwzjwz000000 000000 /* * strdup.c * * Simple version of strdup for machines without it (ie DEC Ultrix 4.2) * Apparently VMS only got strdup in 1995 (v5.2...) * * By David Chatterton * 29 July 1993 * * You can do anything you like to this... :) * I've stolen it from xpilot and added it to the xvmstuils MPJZ ;-) */ #if (__VMS_VER < 70000000) #include #include char* strdup (const char* s1) { char* s2; if (s2 = (char*)malloc(strlen(s1)+1)) strcpy(s2,s1); return s2; } #endif xscreensaver-5.34/utils/alpha.c000644 000767 000767 00000014067 10370535275 016271 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 1992, 1995, 1996, 1997, 2006 * Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ /* Beauty is only skin deep, unless you've got an alpha channel. */ #include "utils.h" #include "alpha.h" #include "visual.h" #include "hsv.h" #include "yarandom.h" #include "resources.h" #include #ifndef countof # define countof(x) (sizeof(*(x))/sizeof((x))) #endif /* I don't believe this fucking language doesn't have builtin exponentiation. I further can't believe that the fucking ^ character means fucking XOR!! */ static int i_exp (int i, int j) { int k = 1; while (j--) k *= i; return k; } static void merge_colors (int argc, XColor **argv, XColor *into_color, int mask, Bool additive_p) { int j; *into_color = *argv [0]; into_color->pixel |= mask; for (j = 1; j < argc; j++) { # define SHORT_INC(x,y) (x = ((((x)+(y)) > 0xFFFF) ? 0xFFFF : ((x)+(y)))) # define SHORT_DEC(x,y) (x = ((((x)-(y)) < 0) ? 0 : ((x)-(y)))) if (additive_p) { SHORT_INC (into_color->red, argv[j]->red); SHORT_INC (into_color->green, argv[j]->green); SHORT_INC (into_color->blue, argv[j]->blue); } else { SHORT_DEC (into_color->red, argv[j]->red); SHORT_DEC (into_color->green, argv[j]->green); SHORT_DEC (into_color->blue, argv[j]->blue); } # undef SHORT_INC # undef SHORT_DEC } } static void permute_colors (XColor *pcolors, XColor *colors, int count, unsigned long *plane_masks, Bool additive_p) { int out = 0; int max = i_exp (2, count); if (count > 31) abort (); for (out = 1; out < max; out++) { XColor *argv [32]; int this_mask = 0; int argc = 0; int bit; for (bit = 0; bit < 32; bit++) if (out & (1< 1 && !XAllocColorCells (dpy, cmap, False, plane_masks, nplanes, base_pixel_ret, 1)) nplanes--; return nplanes; } static void initialize_transparency_colormap (Display *dpy, Colormap cmap, int nplanes, unsigned long base_pixel, unsigned long *plane_masks, XColor *colors, Bool additive_p) { int i; int total_colors = i_exp (2, nplanes); XColor *all_colors = (XColor *) calloc (total_colors, sizeof (XColor)); for (i = 0; i < nplanes; i++) colors[i].pixel = base_pixel | plane_masks [i]; permute_colors (colors, all_colors, nplanes, plane_masks, additive_p); /* clone the default background of the window into our "base" pixel */ all_colors [total_colors - 1].pixel = get_pixel_resource (dpy, cmap, "background", "Background"); XQueryColor (dpy, cmap, &all_colors [total_colors - 1]); all_colors [total_colors - 1].pixel = base_pixel; for (i = 0; i < total_colors; i++) all_colors[i].flags = DoRed|DoGreen|DoBlue; XStoreColors (dpy, cmap, all_colors, total_colors); XFree ((XPointer) all_colors); } Bool allocate_alpha_colors (Screen *screen, Visual *visual, Colormap cmap, int *nplanesP, Bool additive_p, unsigned long **plane_masks, unsigned long *base_pixelP) { Display *dpy = DisplayOfScreen (screen); XColor *colors; int nplanes = *nplanesP; int i; if (!has_writable_cells (screen, visual)) cmap = 0; if (!cmap) /* A TrueColor visual, or similar. */ { int depth = visual_depth (screen, visual); unsigned long masks; XVisualInfo vi_in, *vi_out; /* Find out which bits the R, G, and B components actually occupy on this visual. */ vi_in.screen = screen_number (screen); vi_in.visualid = XVisualIDFromVisual (visual); vi_out = XGetVisualInfo (dpy, VisualScreenMask|VisualIDMask, &vi_in, &i); if (! vi_out) abort (); masks = vi_out[0].red_mask | vi_out[0].green_mask | vi_out[0].blue_mask; XFree ((char *) vi_out); if (nplanes > depth) nplanes = depth; *nplanesP = nplanes; *base_pixelP = 0; *plane_masks = (unsigned long *) calloc(sizeof(unsigned long), nplanes); /* Pick the planar values randomly, but constrain them to fall within the bit positions of the R, G, and B fields. */ for (i = 0; i < nplanes; i++) (*plane_masks)[i] = random() & masks; } else /* A PseudoColor visual, or similar. */ { if (nplanes > 31) nplanes = 31; *plane_masks = (unsigned long *) malloc(sizeof(unsigned long) * nplanes); nplanes = allocate_color_planes (dpy, cmap, nplanes, *plane_masks, base_pixelP); *nplanesP = nplanes; if (nplanes <= 1) { free(*plane_masks); *plane_masks = 0; return False; } colors = (XColor *) calloc (nplanes, sizeof (XColor)); for (i = 0; i < nplanes; i++) { /* pick the base colors. If we are in subtractive mode, pick higher intensities. */ hsv_to_rgb (random () % 360, frand (1.0), frand (0.5) + (additive_p ? 0.2 : 0.5), &colors[i].red, &colors[i].green, &colors[i].blue); } initialize_transparency_colormap (dpy, cmap, nplanes, *base_pixelP, *plane_masks, colors, additive_p); XFree ((XPointer) colors); } return True; } xscreensaver-5.34/utils/colors.c000644 000767 000767 00000046064 12170203571 016476 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 1997-2013 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ /* This file contains some utility routines for randomly picking the colors to hack the screen with. */ #include "utils.h" #include "hsv.h" #include "yarandom.h" #include "visual.h" #include "colors.h" extern char *progname; void free_colors (Screen *screen, Colormap cmap, XColor *colors, int ncolors) { Display *dpy = screen ? DisplayOfScreen (screen) : 0; int i; if (ncolors > 0) { unsigned long *pixels = (unsigned long *) malloc(sizeof(*pixels) * ncolors); for (i = 0; i < ncolors; i++) pixels[i] = colors[i].pixel; XFreeColors (dpy, cmap, pixels, ncolors, 0L); free(pixels); } } void allocate_writable_colors (Screen *screen, Colormap cmap, unsigned long *pixels, int *ncolorsP) { Display *dpy = screen ? DisplayOfScreen (screen) : 0; int desired = *ncolorsP; int got = 0; int requested = desired; unsigned long *new_pixels = pixels; *ncolorsP = 0; while (got < desired && requested > 0) { if (desired - got < requested) requested = desired - got; if (XAllocColorCells (dpy, cmap, False, 0, 0, new_pixels, requested)) { /* Got all the pixels we asked for. */ new_pixels += requested; got += requested; } else { /* We didn't get all/any of the pixels we asked for. This time, ask for half as many. (If we do get all that we ask for, we ask for the same number again next time, so we only do O(log(n)) server roundtrips.) */ requested = requested / 2; } } *ncolorsP += got; } static void complain (int wanted_colors, int got_colors, Bool wanted_writable, Bool got_writable) { if (got_colors > wanted_colors - 10) /* don't bother complaining if we're within ten pixels. */ return; if (wanted_writable && !got_writable) fprintf (stderr, "%s: wanted %d writable colors; got %d read-only colors.\n", progname, wanted_colors, got_colors); else fprintf (stderr, "%s: wanted %d%s colors; got %d.\n", progname, wanted_colors, (got_writable ? " writable" : ""), got_colors); } void make_color_ramp (Screen *screen, Visual *visual, Colormap cmap, int h1, double s1, double v1, /* 0-360, 0-1.0, 0-1.0 */ int h2, double s2, double v2, /* 0-360, 0-1.0, 0-1.0 */ XColor *colors, int *ncolorsP, Bool closed_p, Bool allocate_p, Bool *writable_pP) { Display *dpy = screen ? DisplayOfScreen (screen) : 0; Bool verbose_p = True; /* argh. */ int i; int total_ncolors = *ncolorsP; int ncolors, wanted; Bool wanted_writable = (allocate_p && writable_pP && *writable_pP); double dh, ds, dv; /* deltas */ wanted = total_ncolors; if (closed_p) wanted = (wanted / 2) + 1; /* If this visual doesn't support writable cells, don't bother trying. */ if (wanted_writable && !has_writable_cells(screen, visual)) *writable_pP = False; AGAIN: ncolors = total_ncolors; memset (colors, 0, (*ncolorsP) * sizeof(*colors)); if (closed_p) ncolors = (ncolors / 2) + 1; /* Note: unlike other routines in this module, this function assumes that if h1 and h2 are more than 180 degrees apart, then the desired direction is always from h1 to h2 (rather than the shorter path.) make_uniform depends on this. */ dh = ((double)h2 - (double)h1) / ncolors; ds = (s2 - s1) / ncolors; dv = (v2 - v1) / ncolors; for (i = 0; i < ncolors; i++) { colors[i].flags = DoRed|DoGreen|DoBlue; hsv_to_rgb ((int) (h1 + (i*dh)), (s1 + (i*ds)), (v1 + (i*dv)), &colors[i].red, &colors[i].green, &colors[i].blue); } if (closed_p) for (i = ncolors; i < *ncolorsP; i++) colors[i] = colors[(*ncolorsP)-i]; if (!allocate_p) return; if (writable_pP && *writable_pP) { unsigned long *pixels = (unsigned long *) malloc(sizeof(*pixels) * ((*ncolorsP) + 1)); /* allocate_writable_colors() won't do here, because we need exactly this number of cells, or the color sequence we've chosen won't fit. */ if (! XAllocColorCells(dpy, cmap, False, 0, 0, pixels, *ncolorsP)) { free(pixels); goto FAIL; } for (i = 0; i < *ncolorsP; i++) colors[i].pixel = pixels[i]; free (pixels); XStoreColors (dpy, cmap, colors, *ncolorsP); } else { for (i = 0; i < *ncolorsP; i++) { XColor color; color = colors[i]; if (XAllocColor (dpy, cmap, &color)) { colors[i].pixel = color.pixel; } else { free_colors (screen, cmap, colors, i); goto FAIL; } } } goto WARN; FAIL: /* we weren't able to allocate all the colors we wanted; decrease the requested number and try again. */ total_ncolors = (total_ncolors > 170 ? total_ncolors - 20 : total_ncolors > 100 ? total_ncolors - 10 : total_ncolors > 75 ? total_ncolors - 5 : total_ncolors > 25 ? total_ncolors - 3 : total_ncolors > 10 ? total_ncolors - 2 : total_ncolors > 2 ? total_ncolors - 1 : 0); *ncolorsP = total_ncolors; ncolors = total_ncolors; if (total_ncolors > 0) goto AGAIN; WARN: if (verbose_p && /* don't warn if we got 0 writable colors -- probably TrueColor. */ (ncolors != 0 || !wanted_writable)) complain (wanted, ncolors, wanted_writable, (wanted_writable && writable_pP && *writable_pP)); } #define MAXPOINTS 50 /* yeah, so I'm lazy */ static void make_color_path (Screen *screen, Visual *visual, Colormap cmap, int npoints, int *h, double *s, double *v, XColor *colors, int *ncolorsP, Bool allocate_p, Bool *writable_pP) { Display *dpy = screen ? DisplayOfScreen (screen) : 0; int i, j, k; int total_ncolors = *ncolorsP; int ncolors[MAXPOINTS]; /* number of pixels per edge */ double dh[MAXPOINTS]; /* distance between pixels, per edge (0 - 360.0) */ double ds[MAXPOINTS]; /* distance between pixels, per edge (0 - 1.0) */ double dv[MAXPOINTS]; /* distance between pixels, per edge (0 - 1.0) */ if (npoints == 0) { *ncolorsP = 0; return; } else if (npoints == 2) /* using make_color_ramp() will be faster */ { make_color_ramp (screen, visual, cmap, h[0], s[0], v[0], h[1], s[1], v[1], colors, ncolorsP, True, /* closed_p */ allocate_p, writable_pP); return; } else if (npoints >= MAXPOINTS) { npoints = MAXPOINTS-1; } AGAIN: { double DH[MAXPOINTS]; /* Distance between H values in the shortest direction around the circle, that is, the distance between 10 and 350 is 20. (Range is 0 - 360.0.) */ double edge[MAXPOINTS]; /* lengths of edges in unit HSV space. */ double ratio[MAXPOINTS]; /* proportions of the edges (total 1.0) */ double circum = 0; double one_point_oh = 0; /* (debug) */ for (i = 0; i < npoints; i++) { int j = (i+1) % npoints; double d = ((double) (h[i] - h[j])) / 360; if (d < 0) d = -d; if (d > 0.5) d = 0.5 - (d - 0.5); DH[i] = d; } for (i = 0; i < npoints; i++) { int j = (i+1) % npoints; edge[i] = sqrt((DH[i] * DH[j]) + ((s[j] - s[i]) * (s[j] - s[i])) + ((v[j] - v[i]) * (v[j] - v[i]))); circum += edge[i]; } #ifdef DEBUG fprintf(stderr, "\ncolors:"); for (i=0; i < npoints; i++) fprintf(stderr, " (%d, %.3f, %.3f)", h[i], s[i], v[i]); fprintf(stderr, "\nlengths:"); for (i=0; i < npoints; i++) fprintf(stderr, " %.3f", edge[i]); #endif /* DEBUG */ if (circum < 0.0001) goto FAIL; for (i = 0; i < npoints; i++) { ratio[i] = edge[i] / circum; one_point_oh += ratio[i]; } #ifdef DEBUG fprintf(stderr, "\nratios:"); for (i=0; i < npoints; i++) fprintf(stderr, " %.3f", ratio[i]); #endif /* DEBUG */ if (one_point_oh < 0.99999 || one_point_oh > 1.00001) abort(); /* space the colors evenly along the circumference -- that means that the number of pixels on a edge is proportional to the length of that edge (relative to the lengths of the other edges.) */ for (i = 0; i < npoints; i++) ncolors[i] = total_ncolors * ratio[i]; #ifdef DEBUG fprintf(stderr, "\npixels:"); for (i=0; i < npoints; i++) fprintf(stderr, " %d", ncolors[i]); fprintf(stderr, " (%d)\n", total_ncolors); #endif /* DEBUG */ for (i = 0; i < npoints; i++) { int j = (i+1) % npoints; if (ncolors[i] > 0) { dh[i] = 360 * (DH[i] / ncolors[i]); ds[i] = (s[j] - s[i]) / ncolors[i]; dv[i] = (v[j] - v[i]) / ncolors[i]; } } } memset (colors, 0, (*ncolorsP) * sizeof(*colors)); k = 0; for (i = 0; i < npoints; i++) { int distance = h[(i+1) % npoints] - h[i]; int direction = (distance >= 0 ? -1 : 1); if (distance <= 180 && distance >= -180) direction = -direction; #ifdef DEBUG fprintf (stderr, "point %d: %3d %.2f %.2f\n", i, h[i], s[i], v[i]); fprintf(stderr, " h[i]=%d dh[i]=%.2f ncolors[i]=%d\n", h[i], dh[i], ncolors[i]); #endif /* DEBUG */ for (j = 0; j < ncolors[i]; j++, k++) { double hh = (h[i] + (j * dh[i] * direction)); if (hh < 0) hh += 360; else if (hh > 360) hh -= 0; colors[k].flags = DoRed|DoGreen|DoBlue; hsv_to_rgb ((int) hh, (s[i] + (j * ds[i])), (v[i] + (j * dv[i])), &colors[k].red, &colors[k].green, &colors[k].blue); #ifdef DEBUG fprintf (stderr, "point %d+%d: %.2f %.2f %.2f %04X %04X %04X\n", i, j, hh, (s[i] + (j * ds[i])), (v[i] + (j * dv[i])), colors[k].red, colors[k].green, colors[k].blue); #endif /* DEBUG */ } } /* Floating-point round-off can make us decide to use fewer colors. */ if (k < *ncolorsP) { *ncolorsP = k; if (k <= 0) return; } if (!allocate_p) return; if (writable_pP && *writable_pP) { unsigned long *pixels = (unsigned long *) malloc(sizeof(*pixels) * ((*ncolorsP) + 1)); /* allocate_writable_colors() won't do here, because we need exactly this number of cells, or the color sequence we've chosen won't fit. */ if (! XAllocColorCells(dpy, cmap, False, 0, 0, pixels, *ncolorsP)) { free(pixels); goto FAIL; } for (i = 0; i < *ncolorsP; i++) colors[i].pixel = pixels[i]; free (pixels); XStoreColors (dpy, cmap, colors, *ncolorsP); } else { for (i = 0; i < *ncolorsP; i++) { XColor color; color = colors[i]; if (XAllocColor (dpy, cmap, &color)) { colors[i].pixel = color.pixel; } else { free_colors (screen, cmap, colors, i); goto FAIL; } } } return; FAIL: /* we weren't able to allocate all the colors we wanted; decrease the requested number and try again. */ total_ncolors = (total_ncolors > 170 ? total_ncolors - 20 : total_ncolors > 100 ? total_ncolors - 10 : total_ncolors > 75 ? total_ncolors - 5 : total_ncolors > 25 ? total_ncolors - 3 : total_ncolors > 10 ? total_ncolors - 2 : total_ncolors > 2 ? total_ncolors - 1 : 0); *ncolorsP = total_ncolors; if (total_ncolors > 0) goto AGAIN; } void make_color_loop (Screen *screen, Visual *visual, Colormap cmap, int h0, double s0, double v0, /* 0-360, 0-1.0, 0-1.0 */ int h1, double s1, double v1, /* 0-360, 0-1.0, 0-1.0 */ int h2, double s2, double v2, /* 0-360, 0-1.0, 0-1.0 */ XColor *colors, int *ncolorsP, Bool allocate_p, Bool *writable_pP) { Bool wanted_writable = (allocate_p && writable_pP && *writable_pP); int h[3]; double s[3], v[3]; h[0] = h0; h[1] = h1; h[2] = h2; s[0] = s0; s[1] = s1; s[2] = s2; v[0] = v0; v[1] = v1; v[2] = v2; /* If this visual doesn't support writable cells, don't bother trying. */ if (wanted_writable && !has_writable_cells(screen, visual)) *writable_pP = False; make_color_path (screen, visual, cmap, 3, h, s, v, colors, ncolorsP, allocate_p, writable_pP); } void make_smooth_colormap (Screen *screen, Visual *visual, Colormap cmap, XColor *colors, int *ncolorsP, Bool allocate_p, Bool *writable_pP, Bool verbose_p) { int npoints; int ncolors = *ncolorsP; Bool wanted_writable = (allocate_p && writable_pP && *writable_pP); int i; int h[MAXPOINTS]; double s[MAXPOINTS]; double v[MAXPOINTS]; double total_s = 0; double total_v = 0; int loop = 0; if (*ncolorsP <= 0) return; { int n = random() % 20; if (n <= 5) npoints = 2; /* 30% of the time */ else if (n <= 15) npoints = 3; /* 50% of the time */ else if (n <= 18) npoints = 4; /* 15% of the time */ else npoints = 5; /* 5% of the time */ } REPICK_ALL_COLORS: for (i = 0; i < npoints; i++) { REPICK_THIS_COLOR: if (++loop > 10000) abort(); h[i] = random() % 360; s[i] = frand(1.0); v[i] = frand(0.8) + 0.2; /* Make sure that no two adjascent colors are *too* close together. If they are, try again. */ if (i > 0) { int j = (i+1 == npoints) ? 0 : (i-1); double hi = ((double) h[i]) / 360; double hj = ((double) h[j]) / 360; double dh = hj - hi; double distance; if (dh < 0) dh = -dh; if (dh > 0.5) dh = 0.5 - (dh - 0.5); distance = sqrt ((dh * dh) + ((s[j] - s[i]) * (s[j] - s[i])) + ((v[j] - v[i]) * (v[j] - v[i]))); if (distance < 0.2) goto REPICK_THIS_COLOR; } total_s += s[i]; total_v += v[i]; } /* If the average saturation or intensity are too low, repick the colors, so that we don't end up with a black-and-white or too-dark map. */ if (total_s / npoints < 0.2) goto REPICK_ALL_COLORS; if (total_v / npoints < 0.3) goto REPICK_ALL_COLORS; /* If this visual doesn't support writable cells, don't bother trying. */ if (wanted_writable && !has_writable_cells(screen, visual)) *writable_pP = False; RETRY_NON_WRITABLE: make_color_path (screen, visual, cmap, npoints, h, s, v, colors, &ncolors, allocate_p, writable_pP); /* If we tried for writable cells and got none, try for non-writable. */ if (allocate_p && *ncolorsP == 0 && writable_pP && *writable_pP) { *writable_pP = False; goto RETRY_NON_WRITABLE; } if (verbose_p) complain(*ncolorsP, ncolors, wanted_writable, wanted_writable && *writable_pP); *ncolorsP = ncolors; } void make_uniform_colormap (Screen *screen, Visual *visual, Colormap cmap, XColor *colors, int *ncolorsP, Bool allocate_p, Bool *writable_pP, Bool verbose_p) { int ncolors = *ncolorsP; Bool wanted_writable = (allocate_p && writable_pP && *writable_pP); double S = ((double) (random() % 34) + 66) / 100.0; /* range 66%-100% */ double V = ((double) (random() % 34) + 66) / 100.0; /* range 66%-100% */ if (*ncolorsP <= 0) return; /* If this visual doesn't support writable cells, don't bother trying. */ if (wanted_writable && !has_writable_cells(screen, visual)) *writable_pP = False; RETRY_NON_WRITABLE: make_color_ramp(screen, visual, cmap, 0, S, V, 359, S, V, colors, &ncolors, False, allocate_p, writable_pP); /* If we tried for writable cells and got none, try for non-writable. */ if (allocate_p && *ncolorsP == 0 && writable_pP && *writable_pP) { ncolors = *ncolorsP; *writable_pP = False; goto RETRY_NON_WRITABLE; } if (verbose_p) complain(*ncolorsP, ncolors, wanted_writable, wanted_writable && *writable_pP); *ncolorsP = ncolors; } void make_random_colormap (Screen *screen, Visual *visual, Colormap cmap, XColor *colors, int *ncolorsP, Bool bright_p, Bool allocate_p, Bool *writable_pP, Bool verbose_p) { Display *dpy = screen ? DisplayOfScreen (screen) : 0; Bool wanted_writable = (allocate_p && writable_pP && *writable_pP); int ncolors = *ncolorsP; int i; if (*ncolorsP <= 0) return; /* If this visual doesn't support writable cells, don't bother trying. */ if (wanted_writable && !has_writable_cells(screen, visual)) *writable_pP = False; RETRY_ALL: for (i = 0; i < ncolors; i++) { colors[i].flags = DoRed|DoGreen|DoBlue; if (bright_p) { int H = random() % 360; /* range 0-360 */ double S = ((double) (random()%70) + 30)/100.0; /* range 30%-100% */ double V = ((double) (random()%34) + 66)/100.0; /* range 66%-100% */ hsv_to_rgb (H, S, V, &colors[i].red, &colors[i].green, &colors[i].blue); } else { colors[i].red = random() % 0xFFFF; colors[i].green = random() % 0xFFFF; colors[i].blue = random() % 0xFFFF; } } /* If there are a small number of colors, make sure at least the first two contrast well. */ if (!bright_p && ncolors <= 4) { int h0, h1; double s0, s1, v0, v1; rgb_to_hsv (colors[0].red, colors[0].green, colors[0].blue, &h0,&s0,&v0); rgb_to_hsv (colors[1].red, colors[1].green, colors[1].blue, &h1,&s1,&v1); if (fabs (v1-v0) < 0.5) goto RETRY_ALL; } if (!allocate_p) return; RETRY_NON_WRITABLE: if (writable_pP && *writable_pP) { unsigned long *pixels = (unsigned long *) malloc(sizeof(*pixels) * (ncolors + 1)); allocate_writable_colors (screen, cmap, pixels, &ncolors); if (ncolors > 0) for (i = 0; i < ncolors; i++) colors[i].pixel = pixels[i]; free (pixels); if (ncolors > 0) XStoreColors (dpy, cmap, colors, ncolors); } else { for (i = 0; i < ncolors; i++) { XColor color; color = colors[i]; if (!XAllocColor (dpy, cmap, &color)) break; colors[i].pixel = color.pixel; } ncolors = i; } /* If we tried for writable cells and got none, try for non-writable. */ if (allocate_p && ncolors == 0 && writable_pP && *writable_pP) { ncolors = *ncolorsP; *writable_pP = False; goto RETRY_NON_WRITABLE; } if (verbose_p) complain(*ncolorsP, ncolors, wanted_writable, wanted_writable && *writable_pP); *ncolorsP = ncolors; } void rotate_colors (Screen *screen, Colormap cmap, XColor *colors, int ncolors, int distance) { Display *dpy = screen ? DisplayOfScreen (screen) : 0; int i; XColor *colors2; if (ncolors < 2) return; colors2 = (XColor *) malloc(sizeof(*colors2) * ncolors); distance = distance % ncolors; for (i = 0; i < ncolors; i++) { int j = i - distance; if (j >= ncolors) j -= ncolors; if (j < 0) j += ncolors; colors2[i] = colors[j]; colors2[i].pixel = colors[i].pixel; } XStoreColors (dpy, cmap, colors2, ncolors); XFlush(dpy); memcpy(colors, colors2, sizeof(*colors) * ncolors); free(colors2); } xscreensaver-5.34/utils/fade.c000644 000767 000767 00000067060 12440151113 016065 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 1992-2011 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #include "utils.h" #include /* for gettimeofday() */ #ifdef VMS # include "vms-gtod.h" #endif /* VMS */ #include "visual.h" #include "usleep.h" #include "fade.h" Colormap copy_colormap (Screen *screen, Visual *visual, Colormap cmap, Colormap into_cmap) { int i; Display *dpy = DisplayOfScreen (screen); Window window = RootWindowOfScreen (screen); int ncolors = CellsOfScreen (screen); XColor *colors = 0; /* If this is a colormap on a mono visual, or one with insanely many color cells, bug out. */ if (ncolors <= 2 || ncolors > 4096) return 0; /* If this is a non-writable visual, bug out. */ if (!has_writable_cells (screen, visual)) return 0; if (! into_cmap) into_cmap = XCreateColormap (dpy, window, visual, AllocAll); if (! cmap) cmap = DefaultColormapOfScreen (screen); colors = (XColor *) calloc(sizeof(XColor), ncolors); for (i = 0; i < ncolors; i++) colors [i].pixel = i; XQueryColors (dpy, cmap, colors, ncolors); XStoreColors (dpy, into_cmap, colors, ncolors); free (colors); return into_cmap; } void blacken_colormap (Screen *screen, Colormap cmap) { Display *dpy = DisplayOfScreen (screen); int ncolors = CellsOfScreen (screen); XColor *colors; int i; if (ncolors > 4096) return; colors = (XColor *) calloc(sizeof(XColor), ncolors); for (i = 0; i < ncolors; i++) colors[i].pixel = i; XStoreColors (dpy, cmap, colors, ncolors); free (colors); } static void fade_screens_1 (Display *dpy, Colormap *cmaps, Window *black_windows, int nwindows, int seconds, int ticks, Bool out_p, Bool clear_windows); #ifdef HAVE_SGI_VC_EXTENSION static int sgi_gamma_fade (Display *dpy, Window *black_windows, int nwindows, int seconds, int ticks, Bool out_p, Bool clear_windows); #endif /* HAVE_SGI_VC_EXTENSION */ #ifdef HAVE_XF86VMODE_GAMMA static int xf86_gamma_fade (Display *dpy, Window *black_windows, int nwindows, int seconds, int ticks, Bool out_p, Bool clear_windows); #endif /* HAVE_XF86VMODE_GAMMA */ void fade_screens (Display *dpy, Colormap *cmaps, Window *black_windows, int nwindows, int seconds, int ticks, Bool out_p, Bool clear_windows) { int oseconds = seconds; Bool was_in_p = !out_p; /* When we're asked to fade in, first fade out, then fade in. That way all the transitions are smooth -- from what's on the screen, to black, to the desktop. */ if (was_in_p) { clear_windows = True; out_p = True; seconds /= 3; if (seconds == 0) seconds = 1; } AGAIN: /* #### printf("\n\nfade_screens %d %d %d\n", seconds, ticks, out_p); */ #ifdef HAVE_SGI_VC_EXTENSION /* First try to do it by fading the gamma in an SGI-specific way... */ if (0 == sgi_gamma_fade(dpy, black_windows, nwindows, seconds, ticks, out_p, clear_windows)) ; else #endif /* HAVE_SGI_VC_EXTENSION */ #ifdef HAVE_XF86VMODE_GAMMA /* Then try to do it by fading the gamma in an XFree86-specific way... */ if (0 == xf86_gamma_fade(dpy, black_windows, nwindows, seconds, ticks, out_p, clear_windows)) ; else #endif /* HAVE_XF86VMODE_GAMMA */ /* Else, do it the old-fashioned way, which (somewhat) loses if there are TrueColor windows visible. */ fade_screens_1 (dpy, cmaps, black_windows, nwindows, seconds, ticks, out_p, clear_windows); /* If we were supposed to be fading in, do so now (we just faded out, so now fade back in.) */ if (was_in_p) { was_in_p = False; out_p = False; seconds = oseconds * 2 / 3; if (seconds == 0) seconds = 1; goto AGAIN; } } static void sleep_from (struct timeval *now, struct timeval *then, long usecs_per_step) { /* If several seconds have passed, the machine must have been asleep or thrashing or something. Don't sleep in that case, to avoid overflowing and sleeping for an unconscionably long time. This function should only be sleeping for very short periods. */ if (now->tv_sec - then->tv_sec < 5) { long diff = (((now->tv_sec - then->tv_sec) * 1000000) + now->tv_usec - then->tv_usec); if (usecs_per_step > diff) usleep (usecs_per_step - diff); } then->tv_sec = now->tv_sec; then->tv_usec = now->tv_usec; } /* The business with `cmaps_per_screen' is to fake out the SGI 8-bit video hardware, which is capable of installing multiple (4) colormaps simultaneously. We have to install multiple copies of the same set of colors in order to fill up all the available slots in the hardware color lookup table, so we install an extra N colormaps per screen to make sure that all screens really go black. I'm told that this trick also works with XInside's AcceleratedX when using the Matrox Millennium card (which also allows multiple PseudoColor and TrueColor visuals to co-exist and display properly at the same time.) This trick works ok on the 24-bit Indy video hardware, but doesn't work at all on the O2 24-bit hardware. I guess the higher-end hardware is too "good" for this to work (dammit.) So... I figured out the "right" way to do this on SGIs, which is to ramp the monitor's gamma down to 0. That's what is implemented in sgi_gamma_fade(), so we use that if we can. */ static void fade_screens_1 (Display *dpy, Colormap *cmaps, Window *black_windows, int nwindows, int seconds, int ticks, Bool out_p, Bool clear_windows) { int i, j, k; int steps = seconds * ticks; long usecs_per_step = (long)(seconds * 1000000) / (long)steps; XEvent dummy_event; int cmaps_per_screen = 5; int nscreens = ScreenCount(dpy); int ncmaps = nscreens * cmaps_per_screen; Colormap *fade_cmaps = 0; Bool installed = False; int total_ncolors; XColor *orig_colors, *current_colors, *screen_colors, *orig_screen_colors; struct timeval then, now; #ifdef GETTIMEOFDAY_TWO_ARGS struct timezone tzp; #endif total_ncolors = 0; for (i = 0; i < nscreens; i++) total_ncolors += CellsOfScreen (ScreenOfDisplay(dpy, i)); orig_colors = (XColor *) calloc(sizeof(XColor), total_ncolors); current_colors = (XColor *) calloc(sizeof(XColor), total_ncolors); /* Get the contents of the colormap we are fading from or to. */ screen_colors = orig_colors; for (i = 0; i < nscreens; i++) { int ncolors = CellsOfScreen (ScreenOfDisplay (dpy, i)); Colormap cmap = (cmaps ? cmaps[i] : 0); if (!cmap) cmap = DefaultColormap(dpy, i); for (j = 0; j < ncolors; j++) screen_colors[j].pixel = j; XQueryColors (dpy, cmap, screen_colors, ncolors); screen_colors += ncolors; } memcpy (current_colors, orig_colors, total_ncolors * sizeof (XColor)); /* Make the writable colormaps (we keep these around and reuse them.) */ if (!fade_cmaps) { fade_cmaps = (Colormap *) calloc(sizeof(Colormap), ncmaps); for (i = 0; i < nscreens; i++) { Visual *v = DefaultVisual(dpy, i); Screen *s = ScreenOfDisplay(dpy, i); if (has_writable_cells (s, v)) for (j = 0; j < cmaps_per_screen; j++) fade_cmaps[(i * cmaps_per_screen) + j] = XCreateColormap (dpy, RootWindowOfScreen (s), v, AllocAll); } } #ifdef GETTIMEOFDAY_TWO_ARGS gettimeofday(&then, &tzp); #else gettimeofday(&then); #endif /* Iterate by steps of the animation... */ for (i = (out_p ? steps : 0); (out_p ? i > 0 : i < steps); (out_p ? i-- : i++)) { /* For each screen, compute the current value of each color... */ orig_screen_colors = orig_colors; screen_colors = current_colors; for (j = 0; j < nscreens; j++) { int ncolors = CellsOfScreen (ScreenOfDisplay (dpy, j)); for (k = 0; k < ncolors; k++) { /* This doesn't take into account the relative luminance of the RGB components (0.299, 0.587, and 0.114 at gamma 2.2) but the difference is imperceptible for this application... */ screen_colors[k].red = orig_screen_colors[k].red * i / steps; screen_colors[k].green = orig_screen_colors[k].green * i / steps; screen_colors[k].blue = orig_screen_colors[k].blue * i / steps; } screen_colors += ncolors; orig_screen_colors += ncolors; } /* Put the colors into the maps... */ screen_colors = current_colors; for (j = 0; j < nscreens; j++) { int ncolors = CellsOfScreen (ScreenOfDisplay (dpy, j)); for (k = 0; k < cmaps_per_screen; k++) { Colormap c = fade_cmaps[j * cmaps_per_screen + k]; if (c) XStoreColors (dpy, c, screen_colors, ncolors); } screen_colors += ncolors; } /* Put the maps on the screens, and then take the windows off the screen. (only need to do this the first time through the loop.) */ if (!installed) { for (j = 0; j < ncmaps; j++) if (fade_cmaps[j]) XInstallColormap (dpy, fade_cmaps[j]); installed = True; if (black_windows && !out_p) for (j = 0; j < nwindows; j++) if (black_windows[j]) { XUnmapWindow (dpy, black_windows[j]); XClearWindow (dpy, black_windows[j]); } } XSync (dpy, False); /* If there is user activity, bug out. (Bug out on keypresses or mouse presses, but not motion, and not release events. Bugging out on motion made the unfade hack be totally useless, I think.) We put the event back so that the calling code can notice it too. It would be better to not remove it at all, but that's harder because Xlib has such a non-design for this kind of crap, and in this application it doesn't matter if the events end up out of order, so in the grand unix tradition we say "fuck it" and do something that mostly works for the time being. */ if (XCheckMaskEvent (dpy, (KeyPressMask|ButtonPressMask), &dummy_event)) { XPutBackEvent (dpy, &dummy_event); goto DONE; } #ifdef GETTIMEOFDAY_TWO_ARGS gettimeofday(&now, &tzp); #else gettimeofday(&now); #endif /* If we haven't already used up our alotted time, sleep to avoid changing the colormap too fast. */ sleep_from (&now, &then, usecs_per_step); } DONE: if (orig_colors) free (orig_colors); if (current_colors) free (current_colors); /* If we've been given windows to raise after blackout, raise them before releasing the colormaps. */ if (out_p && black_windows) { for (i = 0; i < nwindows; i++) { if (clear_windows) XClearWindow (dpy, black_windows[i]); XMapRaised (dpy, black_windows[i]); } XSync(dpy, False); } /* Now put the target maps back. If we're fading out, use the given cmap (or the default cmap, if none.) If we're fading in, always use the default cmap. */ for (i = 0; i < nscreens; i++) { Colormap cmap = (cmaps ? cmaps[i] : 0); if (!cmap || !out_p) cmap = DefaultColormap(dpy, i); XInstallColormap (dpy, cmap); } /* The fade (in or out) is complete, so we don't need the black maps on stage any more. */ for (i = 0; i < ncmaps; i++) if (fade_cmaps[i]) { XUninstallColormap(dpy, fade_cmaps[i]); XFreeColormap(dpy, fade_cmaps[i]); fade_cmaps[i] = 0; } free(fade_cmaps); fade_cmaps = 0; } /* SGI Gamma fading */ #ifdef HAVE_SGI_VC_EXTENSION # include struct screen_sgi_gamma_info { int gamma_map; /* ??? always using 0 */ int nred, ngreen, nblue; unsigned short *red1, *green1, *blue1; unsigned short *red2, *green2, *blue2; int gamma_size; int gamma_precision; Bool alpha_p; }; static void sgi_whack_gamma(Display *dpy, int screen, struct screen_sgi_gamma_info *info, float ratio); static int sgi_gamma_fade (Display *dpy, Window *black_windows, int nwindows, int seconds, int ticks, Bool out_p, Bool clear_windows) { int steps = seconds * ticks; long usecs_per_step = (long)(seconds * 1000000) / (long)steps; XEvent dummy_event; int nscreens = ScreenCount(dpy); struct timeval then, now; #ifdef GETTIMEOFDAY_TWO_ARGS struct timezone tzp; #endif int i, screen; int status = -1; struct screen_sgi_gamma_info *info = (struct screen_sgi_gamma_info *) calloc(nscreens, sizeof(*info)); /* Get the current gamma maps for all screens. Bug out and return -1 if we can't get them for some screen. */ for (screen = 0; screen < nscreens; screen++) { if (!XSGIvcQueryGammaMap(dpy, screen, info[screen].gamma_map, &info[screen].gamma_size, &info[screen].gamma_precision, &info[screen].alpha_p)) goto FAIL; if (!XSGIvcQueryGammaColors(dpy, screen, info[screen].gamma_map, XSGIVC_COMPONENT_RED, &info[screen].nred, &info[screen].red1)) goto FAIL; if (! XSGIvcQueryGammaColors(dpy, screen, info[screen].gamma_map, XSGIVC_COMPONENT_GREEN, &info[screen].ngreen, &info[screen].green1)) goto FAIL; if (!XSGIvcQueryGammaColors(dpy, screen, info[screen].gamma_map, XSGIVC_COMPONENT_BLUE, &info[screen].nblue, &info[screen].blue1)) goto FAIL; if (info[screen].gamma_precision == 8) /* Scale it up to 16 bits. */ { int j; for(j = 0; j < info[screen].nred; j++) info[screen].red1[j] = ((info[screen].red1[j] << 8) | info[screen].red1[j]); for(j = 0; j < info[screen].ngreen; j++) info[screen].green1[j] = ((info[screen].green1[j] << 8) | info[screen].green1[j]); for(j = 0; j < info[screen].nblue; j++) info[screen].blue1[j] = ((info[screen].blue1[j] << 8) | info[screen].blue1[j]); } info[screen].red2 = (unsigned short *) malloc(sizeof(*info[screen].red2) * (info[screen].nred+1)); info[screen].green2 = (unsigned short *) malloc(sizeof(*info[screen].green2) * (info[screen].ngreen+1)); info[screen].blue2 = (unsigned short *) malloc(sizeof(*info[screen].blue2) * (info[screen].nblue+1)); } #ifdef GETTIMEOFDAY_TWO_ARGS gettimeofday(&then, &tzp); #else gettimeofday(&then); #endif /* If we're fading in (from black), then first crank the gamma all the way down to 0, then take the windows off the screen. */ if (!out_p) { for (screen = 0; screen < nscreens; screen++) sgi_whack_gamma(dpy, screen, &info[screen], 0.0); for (screen = 0; screen < nwindows; screen++) if (black_windows && black_windows[screen]) { XUnmapWindow (dpy, black_windows[screen]); XClearWindow (dpy, black_windows[screen]); XSync(dpy, False); } } /* Iterate by steps of the animation... */ for (i = (out_p ? steps : 0); (out_p ? i > 0 : i < steps); (out_p ? i-- : i++)) { for (screen = 0; screen < nscreens; screen++) { sgi_whack_gamma(dpy, screen, &info[screen], (((float)i) / ((float)steps))); /* If there is user activity, bug out. (Bug out on keypresses or mouse presses, but not motion, and not release events. Bugging out on motion made the unfade hack be totally useless, I think.) We put the event back so that the calling code can notice it too. It would be better to not remove it at all, but that's harder because Xlib has such a non-design for this kind of crap, and in this application it doesn't matter if the events end up out of order, so in the grand unix tradition we say "fuck it" and do something that mostly works for the time being. */ if (XCheckMaskEvent (dpy, (KeyPressMask|ButtonPressMask), &dummy_event)) { XPutBackEvent (dpy, &dummy_event); goto DONE; } #ifdef GETTIMEOFDAY_TWO_ARGS gettimeofday(&now, &tzp); #else gettimeofday(&now); #endif /* If we haven't already used up our alotted time, sleep to avoid changing the colormap too fast. */ sleep_from (&now, &then, usecs_per_step); } } DONE: if (out_p && black_windows) { for (screen = 0; screen < nwindows; screen++) { if (clear_windows) XClearWindow (dpy, black_windows[screen]); XMapRaised (dpy, black_windows[screen]); } XSync(dpy, False); } /* I can't explain this; without this delay, we get a flicker. I suppose there's some lossage with stale bits being in the hardware frame buffer or something, and this delay gives it time to flush out. This sucks! */ usleep(100000); /* 1/10th second */ for (screen = 0; screen < nscreens; screen++) sgi_whack_gamma(dpy, screen, &info[screen], 1.0); XSync(dpy, False); status = 0; FAIL: for (screen = 0; screen < nscreens; screen++) { if (info[screen].red1) free (info[screen].red1); if (info[screen].green1) free (info[screen].green1); if (info[screen].blue1) free (info[screen].blue1); if (info[screen].red2) free (info[screen].red2); if (info[screen].green2) free (info[screen].green2); if (info[screen].blue2) free (info[screen].blue2); } free(info); return status; } static void sgi_whack_gamma(Display *dpy, int screen, struct screen_sgi_gamma_info *info, float ratio) { int k; if (ratio < 0) ratio = 0; if (ratio > 1) ratio = 1; for (k = 0; k < info->gamma_size; k++) { info->red2[k] = info->red1[k] * ratio; info->green2[k] = info->green1[k] * ratio; info->blue2[k] = info->blue1[k] * ratio; } XSGIvcStoreGammaColors16(dpy, screen, info->gamma_map, info->nred, XSGIVC_MComponentRed, info->red2); XSGIvcStoreGammaColors16(dpy, screen, info->gamma_map, info->ngreen, XSGIVC_MComponentGreen, info->green2); XSGIvcStoreGammaColors16(dpy, screen, info->gamma_map, info->nblue, XSGIVC_MComponentBlue, info->blue2); XSync(dpy, False); } #endif /* HAVE_SGI_VC_EXTENSION */ /* XFree86 4.x+ Gamma fading */ #ifdef HAVE_XF86VMODE_GAMMA #include typedef struct { XF86VidModeGamma vmg; int size; unsigned short *r, *g, *b; } xf86_gamma_info; static int xf86_check_gamma_extension (Display *dpy); static Bool xf86_whack_gamma (Display *dpy, int screen, xf86_gamma_info *ginfo, float ratio); static int xf86_gamma_fade (Display *dpy, Window *black_windows, int nwindows, int seconds, int ticks, Bool out_p, Bool clear_windows) { int steps = seconds * ticks; long usecs_per_step = (long)(seconds * 1000000) / (long)steps; XEvent dummy_event; int nscreens = ScreenCount(dpy); struct timeval then, now; #ifdef GETTIMEOFDAY_TWO_ARGS struct timezone tzp; #endif int i, screen; int status = -1; xf86_gamma_info *info = 0; static int ext_ok = -1; /* Only probe the extension once: the answer isn't going to change. */ if (ext_ok == -1) ext_ok = xf86_check_gamma_extension (dpy); /* If this server doesn't have the gamma extension, bug out. */ if (ext_ok == 0) goto FAIL; # ifndef HAVE_XF86VMODE_GAMMA_RAMP if (ext_ok == 2) ext_ok = 1; /* server is newer than client! */ # endif info = (xf86_gamma_info *) calloc(nscreens, sizeof(*info)); /* Get the current gamma maps for all screens. Bug out and return -1 if we can't get them for some screen. */ for (screen = 0; screen < nscreens; screen++) { if (ext_ok == 1) /* only have gamma parameter, not ramps. */ { if (!XF86VidModeGetGamma(dpy, screen, &info[screen].vmg)) goto FAIL; } # ifdef HAVE_XF86VMODE_GAMMA_RAMP else if (ext_ok == 2) /* have ramps */ { if (!XF86VidModeGetGammaRampSize(dpy, screen, &info[screen].size)) goto FAIL; if (info[screen].size <= 0) goto FAIL; info[screen].r = (unsigned short *) calloc(info[screen].size, sizeof(unsigned short)); info[screen].g = (unsigned short *) calloc(info[screen].size, sizeof(unsigned short)); info[screen].b = (unsigned short *) calloc(info[screen].size, sizeof(unsigned short)); if (!(info[screen].r && info[screen].g && info[screen].b)) goto FAIL; if (!XF86VidModeGetGammaRamp(dpy, screen, info[screen].size, info[screen].r, info[screen].g, info[screen].b)) goto FAIL; } # endif /* HAVE_XF86VMODE_GAMMA_RAMP */ else abort(); } #ifdef GETTIMEOFDAY_TWO_ARGS gettimeofday(&then, &tzp); #else gettimeofday(&then); #endif /* If we're fading in (from black), then first crank the gamma all the way down to 0, then take the windows off the screen. */ if (!out_p) { for (screen = 0; screen < nscreens; screen++) xf86_whack_gamma(dpy, screen, &info[screen], 0.0); for (screen = 0; screen < nwindows; screen++) if (black_windows && black_windows[screen]) { XUnmapWindow (dpy, black_windows[screen]); XClearWindow (dpy, black_windows[screen]); XSync(dpy, False); } } /* Iterate by steps of the animation... */ for (i = (out_p ? steps : 0); (out_p ? i > 0 : i < steps); (out_p ? i-- : i++)) { for (screen = 0; screen < nscreens; screen++) { xf86_whack_gamma(dpy, screen, &info[screen], (((float)i) / ((float)steps))); /* If there is user activity, bug out. (Bug out on keypresses or mouse presses, but not motion, and not release events. Bugging out on motion made the unfade hack be totally useless, I think.) We put the event back so that the calling code can notice it too. It would be better to not remove it at all, but that's harder because Xlib has such a non-design for this kind of crap, and in this application it doesn't matter if the events end up out of order, so in the grand unix tradition we say "fuck it" and do something that mostly works for the time being. */ if (XCheckMaskEvent (dpy, (KeyPressMask|ButtonPressMask), &dummy_event)) { XPutBackEvent (dpy, &dummy_event); goto DONE; } #ifdef GETTIMEOFDAY_TWO_ARGS gettimeofday(&now, &tzp); #else gettimeofday(&now); #endif /* If we haven't already used up our alotted time, sleep to avoid changing the colormap too fast. */ sleep_from (&now, &then, usecs_per_step); } } DONE: if (out_p && black_windows) { for (screen = 0; screen < nwindows; screen++) { if (clear_windows) XClearWindow (dpy, black_windows[screen]); XMapRaised (dpy, black_windows[screen]); } XSync(dpy, False); } /* I can't explain this; without this delay, we get a flicker. I suppose there's some lossage with stale bits being in the hardware frame buffer or something, and this delay gives it time to flush out. This sucks! */ usleep(100000); /* 1/10th second */ for (screen = 0; screen < nscreens; screen++) xf86_whack_gamma(dpy, screen, &info[screen], 1.0); XSync(dpy, False); status = 0; FAIL: if (info) { for (screen = 0; screen < nscreens; screen++) { if (info[screen].r) free(info[screen].r); if (info[screen].g) free(info[screen].g); if (info[screen].b) free(info[screen].b); } free(info); } return status; } /* This bullshit is needed because the VidMode extension doesn't work on remote displays -- but if the remote display has the extension at all, XF86VidModeQueryExtension returns true, and then XF86VidModeQueryVersion dies with an X error. Thank you XFree, may I have another. */ static Bool error_handler_hit_p = False; static int ignore_all_errors_ehandler (Display *dpy, XErrorEvent *error) { error_handler_hit_p = True; return 0; } static Bool safe_XF86VidModeQueryVersion (Display *dpy, int *majP, int *minP) { Bool result; XErrorHandler old_handler; XSync (dpy, False); error_handler_hit_p = False; old_handler = XSetErrorHandler (ignore_all_errors_ehandler); result = XF86VidModeQueryVersion (dpy, majP, minP); XSync (dpy, False); XSetErrorHandler (old_handler); XSync (dpy, False); return (error_handler_hit_p ? False : result); } /* VidModeExtension version 2.0 or better is needed to do gamma. 2.0 added gamma values; 2.1 added gamma ramps. */ # define XF86_VIDMODE_GAMMA_MIN_MAJOR 2 # define XF86_VIDMODE_GAMMA_MIN_MINOR 0 # define XF86_VIDMODE_GAMMA_RAMP_MIN_MAJOR 2 # define XF86_VIDMODE_GAMMA_RAMP_MIN_MINOR 1 /* Returns 0 if gamma fading not available; 1 if only gamma value setting is available; 2 if gamma ramps are available. */ static int xf86_check_gamma_extension (Display *dpy) { int event, error, major, minor; if (!XF86VidModeQueryExtension (dpy, &event, &error)) return 0; /* display doesn't have the extension. */ if (!safe_XF86VidModeQueryVersion (dpy, &major, &minor)) return 0; /* unable to get version number? */ if (major < XF86_VIDMODE_GAMMA_MIN_MAJOR || (major == XF86_VIDMODE_GAMMA_MIN_MAJOR && minor < XF86_VIDMODE_GAMMA_MIN_MINOR)) return 0; /* extension is too old for gamma. */ if (major < XF86_VIDMODE_GAMMA_RAMP_MIN_MAJOR || (major == XF86_VIDMODE_GAMMA_RAMP_MIN_MAJOR && minor < XF86_VIDMODE_GAMMA_RAMP_MIN_MINOR)) return 1; /* extension is too old for gamma ramps. */ /* Copacetic */ return 2; } /* XFree doesn't let you set gamma to a value smaller than this. Apparently they didn't anticipate the trick I'm doing here... */ #define XF86_MIN_GAMMA 0.1 static Bool xf86_whack_gamma(Display *dpy, int screen, xf86_gamma_info *info, float ratio) { Bool status; XErrorHandler old_handler; XSync (dpy, False); error_handler_hit_p = False; old_handler = XSetErrorHandler (ignore_all_errors_ehandler); if (ratio < 0) ratio = 0; if (ratio > 1) ratio = 1; if (info->size == 0) /* we only have a gamma number, not a ramp. */ { XF86VidModeGamma g2; g2.red = info->vmg.red * ratio; g2.green = info->vmg.green * ratio; g2.blue = info->vmg.blue * ratio; # ifdef XF86_MIN_GAMMA if (g2.red < XF86_MIN_GAMMA) g2.red = XF86_MIN_GAMMA; if (g2.green < XF86_MIN_GAMMA) g2.green = XF86_MIN_GAMMA; if (g2.blue < XF86_MIN_GAMMA) g2.blue = XF86_MIN_GAMMA; # endif status = XF86VidModeSetGamma (dpy, screen, &g2); } else { # ifdef HAVE_XF86VMODE_GAMMA_RAMP unsigned short *r, *g, *b; int i; r = (unsigned short *) malloc(info->size * sizeof(unsigned short)); g = (unsigned short *) malloc(info->size * sizeof(unsigned short)); b = (unsigned short *) malloc(info->size * sizeof(unsigned short)); for (i = 0; i < info->size; i++) { r[i] = info->r[i] * ratio; g[i] = info->g[i] * ratio; b[i] = info->b[i] * ratio; } status = XF86VidModeSetGammaRamp(dpy, screen, info->size, r, g, b); free (r); free (g); free (b); # else /* !HAVE_XF86VMODE_GAMMA_RAMP */ abort(); # endif /* !HAVE_XF86VMODE_GAMMA_RAMP */ } XSync (dpy, False); XSetErrorHandler (old_handler); XSync (dpy, False); return status; } #endif /* HAVE_XF86VMODE_GAMMA */ xscreensaver-5.34/utils/grabscreen.c000644 000767 000767 00000065236 12165611221 017311 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 1992-2013 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ /* This file contains code for grabbing an image of the screen to hack its bits. This is a little tricky, since doing this involves the need to tell the difference between drawing on the actual root window, and on the fake root window used by the screensaver, since at this level the illusion breaks down... The hacks themselves use utils/grabclient.c to invoke the "xscreensaver-getimage" program as a sub-process. This code is linked only into "driver/xscreensaver-getimage". On normal X11 systems, "xscreensaver-getimage.c" invokes the code in this file. However, under X11 on MacOS, "xscreensaver-getimage" instead runs the script "driver/xscreensaver-getimage-desktop", which invokes the MacOS- specific program "/usr/sbin/screencapture" to get the desktop image. However again, for the MacOS-native (Cocoa) build of the screen savers, "utils/grabclient.c" instead links against "OSX/osxgrabscreen.m", which grabs screen images directly without invoking a sub-process to do it. */ #include "utils.h" #include "yarandom.h" #include #include #ifdef HAVE_XMU # ifndef VMS # include # else /* VMS */ # include # endif /* VMS */ #endif #include "usleep.h" #include "colors.h" #include "grabscreen.h" #include "visual.h" #include "resources.h" #include "vroot.h" #undef RootWindowOfScreen #undef RootWindow #undef DefaultRootWindow #ifdef HAVE_READ_DISPLAY_EXTENSION # include static Bool read_display (Screen *, Window, Pixmap, Bool); #endif /* HAVE_READ_DISPLAY_EXTENSION */ static void copy_default_colormap_contents (Screen *, Colormap, Visual *); #ifdef HAVE_READ_DISPLAY_EXTENSION static void allocate_cubic_colormap (Screen *, Window, Visual *); void remap_image (Screen *, Window, Colormap, XImage *); #endif static Bool MapNotify_event_p (Display *dpy, XEvent *event, XPointer window) { return (event->xany.type == MapNotify && event->xvisibility.window == (Window) window); } extern char *progname; Bool grab_verbose_p = False; void grabscreen_verbose(void) { grab_verbose_p = True; } static void raise_window(Display *dpy, Window window, Bool dont_wait) { if (grab_verbose_p) fprintf(stderr, "%s: raising window 0x%08lX (%s)\n", progname, (unsigned long) window, (dont_wait ? "not waiting" : "waiting")); if (! dont_wait) { XWindowAttributes xgwa; XSizeHints hints; long supplied = 0; memset(&hints, 0, sizeof(hints)); XGetWMNormalHints(dpy, window, &hints, &supplied); XGetWindowAttributes (dpy, window, &xgwa); hints.x = xgwa.x; hints.y = xgwa.y; hints.width = xgwa.width; hints.height = xgwa.height; hints.flags |= (PPosition|USPosition|PSize|USSize); XSetWMNormalHints(dpy, window, &hints); XSelectInput (dpy, window, (xgwa.your_event_mask | StructureNotifyMask)); } XMapRaised(dpy, window); if (! dont_wait) { XEvent event; XIfEvent (dpy, &event, MapNotify_event_p, (XPointer) window); XSync (dpy, True); } } static Bool xscreensaver_window_p (Display *dpy, Window window) { Atom type; int format; unsigned long nitems, bytesafter; unsigned char *version; if (XGetWindowProperty (dpy, window, XInternAtom (dpy, "_SCREENSAVER_VERSION", False), 0, 1, False, XA_STRING, &type, &format, &nitems, &bytesafter, &version) == Success && type != None) return True; return False; } /* Whether the given window is: - the real root window; - a direct child of the root window; - a direct child of the window manager's decorations. */ Bool top_level_window_p (Screen *screen, Window window) { Display *dpy = DisplayOfScreen (screen); Window root, parent, *kids; unsigned int nkids; if (!XQueryTree (dpy, window, &root, &parent, &kids, &nkids)) return False; if (window == root) return True; /* If our direct parent is the real root window, then yes. */ if (parent == root) return True; else { Atom type = None; int format; unsigned long nitems, bytesafter; unsigned char *data; /* If our direct parent has the WM_STATE property, then it is a window manager decoration -- yes. */ if (XGetWindowProperty (dpy, window, XInternAtom (dpy, "WM_STATE", True), 0, 0, False, AnyPropertyType, &type, &format, &nitems, &bytesafter, (unsigned char **) &data) == Success && type != None) return True; } /* Else, no. We're deep in a tree somewhere. */ return False; } static Bool error_handler_hit_p = False; static XErrorHandler old_ehandler = 0; static int BadWindow_ehandler (Display *dpy, XErrorEvent *error) { error_handler_hit_p = True; if (error->error_code == BadWindow || error->error_code == BadDrawable) return 0; else if (!old_ehandler) { abort(); return 0; } else return (*old_ehandler) (dpy, error); } /* XCopyArea seems not to work right on SGI O2s if you draw in SubwindowMode on a window whose depth is not the maximal depth of the screen? Or something. Anyway, things don't work unless we: use SubwindowMode for the real root window (or a legitimate virtual root window); but do not use SubwindowMode for the xscreensaver window. I make no attempt to explain. */ Bool use_subwindow_mode_p(Screen *screen, Window window) { if (window != VirtualRootWindowOfScreen(screen)) return False; else if (xscreensaver_window_p(DisplayOfScreen(screen), window)) return False; else return True; } /* Install the colormaps of all visible windows, deepest first. This should leave the colormaps of the topmost windows installed (if only N colormaps can be installed at a time, then only the topmost N windows will be shown in the right colors.) */ static void install_screen_colormaps (Screen *screen) { unsigned int i; Display *dpy = DisplayOfScreen (screen); Window real_root; Window parent, *kids = 0; unsigned int nkids = 0; XSync (dpy, False); old_ehandler = XSetErrorHandler (BadWindow_ehandler); error_handler_hit_p = False; real_root = XRootWindowOfScreen (screen); /* not vroot */ if (XQueryTree (dpy, real_root, &real_root, &parent, &kids, &nkids)) for (i = 0; i < nkids; i++) { XWindowAttributes xgwa; Window client; #ifdef HAVE_XMU /* #### need to put XmuClientWindow() in xmu.c, sigh... */ if (! (client = XmuClientWindow (dpy, kids[i]))) #endif client = kids[i]; xgwa.colormap = 0; XGetWindowAttributes (dpy, client, &xgwa); if (xgwa.colormap && xgwa.map_state == IsViewable) XInstallColormap (dpy, xgwa.colormap); } XInstallColormap (dpy, DefaultColormapOfScreen (screen)); XSync (dpy, False); XSetErrorHandler (old_ehandler); XSync (dpy, False); if (kids) XFree ((char *) kids); } void grab_screen_image_internal (Screen *screen, Window window) { Display *dpy = DisplayOfScreen (screen); XWindowAttributes xgwa; Window real_root; Bool root_p; Bool saver_p; Bool grab_mouse_p = False; int unmap_time = 0; real_root = XRootWindowOfScreen (screen); /* not vroot */ root_p = (window == real_root); saver_p = xscreensaver_window_p (dpy, window); XGetWindowAttributes (dpy, window, &xgwa); screen = xgwa.screen; if (saver_p) /* I think this is redundant, but just to be safe... */ root_p = False; if (saver_p) /* The only time grabbing the mouse is important is if this program is being run while the saver is locking the screen. */ grab_mouse_p = True; if (!root_p) { double unmap = 0; if (saver_p) { unmap = get_float_resource(dpy, "grabRootDelay", "Seconds"); if (unmap <= 0.00001 || unmap > 20) unmap = 2.5; } else { unmap = get_float_resource(dpy, "grabWindowDelay", "Seconds"); if (unmap <= 0.00001 || unmap > 20) unmap = 0.66; } unmap_time = unmap * 100000; } if (grab_verbose_p) { fprintf(stderr, "\n%s: window 0x%08lX root: %d saver: %d grab: %d wait: %.1f\n", progname, (unsigned long) window, root_p, saver_p, grab_mouse_p, ((double)unmap_time)/1000000.0); fprintf(stderr, "%s: ", progname); describe_visual(stderr, screen, xgwa.visual, False); fprintf (stderr, "\n"); } if (!root_p && !top_level_window_p (screen, window)) { if (grab_verbose_p) fprintf (stderr, "%s: not a top-level window: 0x%08lX: not grabbing\n", progname, (unsigned long) window); return; } if (!root_p) XSetWindowBackgroundPixmap (dpy, window, None); if (grab_mouse_p) { /* prevent random viewer of the screen saver (locker) from messing with windows. We don't check whether it succeeded, because what are our options, really... */ XGrabPointer (dpy, real_root, True, ButtonPressMask|ButtonReleaseMask, GrabModeAsync, GrabModeAsync, None, None, CurrentTime); XGrabKeyboard (dpy, real_root, True, GrabModeSync, GrabModeAsync, CurrentTime); } if (unmap_time > 0) { XUnmapWindow (dpy, window); install_screen_colormaps (screen); XSync (dpy, True); usleep(unmap_time); /* wait for everyone to swap in and handle exposes */ } if (!root_p) { #ifdef HAVE_READ_DISPLAY_EXTENSION if (! read_display(screen, window, 0, saver_p)) #endif /* HAVE_READ_DISPLAY_EXTENSION */ { #ifdef HAVE_READ_DISPLAY_EXTENSION if (grab_verbose_p) fprintf(stderr, "%s: read_display() failed\n", progname); #endif /* HAVE_READ_DISPLAY_EXTENSION */ copy_default_colormap_contents (screen, xgwa.colormap, xgwa.visual); raise_window(dpy, window, saver_p); /* Generally it's bad news to call XInstallColormap() explicitly, but this file does a lot of sleazy stuff already... This is to make sure that the window's colormap is installed, even in the case where the window is OverrideRedirect. */ if (xgwa.colormap) XInstallColormap (dpy, xgwa.colormap); XSync (dpy, False); } } else /* root_p */ { Pixmap pixmap; pixmap = XCreatePixmap(dpy, window, xgwa.width, xgwa.height, xgwa.depth); #ifdef HAVE_READ_DISPLAY_EXTENSION if (! read_display(screen, window, pixmap, True)) #endif { Window real_root = XRootWindowOfScreen (screen); /* not vroot */ XGCValues gcv; GC gc; #ifdef HAVE_READ_DISPLAY_EXTENSION if (grab_verbose_p) fprintf(stderr, "%s: read_display() failed\n", progname); #endif /* HAVE_READ_DISPLAY_EXTENSION */ copy_default_colormap_contents (screen, xgwa.colormap, xgwa.visual); gcv.function = GXcopy; gcv.subwindow_mode = IncludeInferiors; gc = XCreateGC (dpy, window, GCFunction | GCSubwindowMode, &gcv); XCopyArea (dpy, real_root, pixmap, gc, xgwa.x, xgwa.y, xgwa.width, xgwa.height, 0, 0); XFreeGC (dpy, gc); } XSetWindowBackgroundPixmap (dpy, window, pixmap); XFreePixmap (dpy, pixmap); } if (grab_verbose_p) fprintf (stderr, "%s: grabbed %d bit screen image to %swindow.\n", progname, xgwa.depth, (root_p ? "real root " : "")); if (grab_mouse_p) { XUngrabPointer (dpy, CurrentTime); XUngrabKeyboard (dpy, CurrentTime); } XSync (dpy, True); } /* When we are grabbing and manipulating a screen image, it's important that we use the same colormap it originally had. So, if the screensaver was started with -install, we need to copy the contents of the default colormap into the screensaver's colormap. */ static void copy_default_colormap_contents (Screen *screen, Colormap to_cmap, Visual *to_visual) { Display *dpy = DisplayOfScreen (screen); Visual *from_visual = DefaultVisualOfScreen (screen); Colormap from_cmap = XDefaultColormapOfScreen (screen); XColor *old_colors, *new_colors; unsigned long *pixels; XVisualInfo vi_in, *vi_out; int out_count; int from_cells, to_cells, max_cells, got_cells; int i; if (from_cmap == to_cmap) return; vi_in.screen = XScreenNumberOfScreen (screen); vi_in.visualid = XVisualIDFromVisual (from_visual); vi_out = XGetVisualInfo (dpy, VisualScreenMask|VisualIDMask, &vi_in, &out_count); if (! vi_out) abort (); from_cells = vi_out [0].colormap_size; XFree ((char *) vi_out); vi_in.screen = XScreenNumberOfScreen (screen); vi_in.visualid = XVisualIDFromVisual (to_visual); vi_out = XGetVisualInfo (dpy, VisualScreenMask|VisualIDMask, &vi_in, &out_count); if (! vi_out) abort (); to_cells = vi_out [0].colormap_size; XFree ((char *) vi_out); max_cells = (from_cells > to_cells ? to_cells : from_cells); old_colors = (XColor *) calloc (sizeof (XColor), max_cells); new_colors = (XColor *) calloc (sizeof (XColor), max_cells); pixels = (unsigned long *) calloc (sizeof (unsigned long), max_cells); for (i = 0; i < max_cells; i++) old_colors[i].pixel = i; XQueryColors (dpy, from_cmap, old_colors, max_cells); got_cells = max_cells; allocate_writable_colors (screen, to_cmap, pixels, &got_cells); if (grab_verbose_p && got_cells != max_cells) fprintf(stderr, "%s: got only %d of %d cells\n", progname, got_cells, max_cells); if (got_cells <= 0) /* we're screwed */ ; else if (got_cells == max_cells && /* we're golden */ from_cells == to_cells) XStoreColors (dpy, to_cmap, old_colors, got_cells); else /* try to cope... */ { for (i = 0; i < got_cells; i++) { XColor *c = old_colors + i; int j; for (j = 0; j < got_cells; j++) if (pixels[j] == c->pixel) { /* only store this color value if this is one of the pixels we were able to allocate. */ XStoreColors (dpy, to_cmap, c, 1); break; } } } if (grab_verbose_p) fprintf(stderr, "%s: installing copy of default colormap\n", progname); free (old_colors); free (new_colors); free (pixels); } /* The SGI ReadDisplay extension. This extension lets you get back a 24-bit image of the screen, taking into account the colors with which all windows are *currently* displayed, even if those windows have different visuals. Without this extension, presence of windows with different visuals or colormaps will result in technicolor when one tries to grab the screen image. */ #ifdef HAVE_READ_DISPLAY_EXTENSION static Bool read_display (Screen *screen, Window window, Pixmap into_pixmap, Bool dont_wait) { Display *dpy = DisplayOfScreen (screen); XWindowAttributes xgwa; int rd_event_base = 0; int rd_error_base = 0; unsigned long hints = 0; XImage *image = 0; XGCValues gcv; int class; GC gc; Bool remap_p = False; /* Check to see if the server supports the extension, and bug out if not. */ if (! XReadDisplayQueryExtension (dpy, &rd_event_base, &rd_error_base)) { if (grab_verbose_p) fprintf(stderr, "%s: no XReadDisplay extension\n", progname); return False; } /* If this isn't a visual we know how to handle, bug out. We handle: = TrueColor in depths 8, 12, 15, 16, and 32; = PseudoColor and DirectColor in depths 8 and 12. */ XGetWindowAttributes(dpy, window, &xgwa); class = visual_class (screen, xgwa.visual); if (class == TrueColor) { if (xgwa.depth != 8 && xgwa.depth != 12 && xgwa.depth != 15 && xgwa.depth != 16 && xgwa.depth != 24 && xgwa.depth != 32) { if (grab_verbose_p) fprintf(stderr, "%s: TrueColor depth %d unsupported\n", progname, xgwa.depth); return False; } } else if (class == PseudoColor || class == DirectColor) { if (xgwa.depth != 8 && xgwa.depth != 12) { if (grab_verbose_p) fprintf(stderr, "%s: Pseudo/DirectColor depth %d unsupported\n", progname, xgwa.depth); return False; } else /* Allocate a TrueColor-like spread of colors for the image. */ remap_p = True; } /* Try and read the screen. */ hints = (XRD_TRANSPARENT | XRD_READ_POINTER); image = XReadDisplay (dpy, window, xgwa.x, xgwa.y, xgwa.width, xgwa.height, hints, &hints); if (!image) { if (grab_verbose_p) fprintf(stderr, "%s: XReadDisplay() failed\n", progname); return False; } if (!image->data) { if (grab_verbose_p) fprintf(stderr, "%s: XReadDisplay() returned no data\n", progname); XDestroyImage(image); return False; } /* XReadDisplay tends to LIE about the depth of the image it read. It is returning an XImage which has `depth' and `bits_per_pixel' confused! That is, on a 24-bit display, where all visuals claim depth 24, and where XGetImage would return an XImage with depth 24, and where XPutImage will get a BadMatch with images that are not depth 24, XReadDisplay is returning images with depth 32! Fuckwits! So if the visual is of depth 24, but the image came back as depth 32, hack it to be 24 lest we get a BadMatch from XPutImage. I wonder what happens on an 8-bit SGI... Probably it still returns an image claiming depth 32? Certainly it can't be 8. So, let's just smash it to 32... */ if (image->depth == 32 /* && xgwa.depth == 24 */ ) image->depth = 24; /* If the visual of the window/pixmap into which we're going to draw is less deep than the screen itself, then we need to convert the grabbed bits to match the depth by clipping off the less significant bit-planes of each color component. */ if (image->depth > xgwa.depth) { int x, y; /* We use the same image->data in both images -- that's ok, because since we're reading from B and writing to A, and B uses more bytes per pixel than A, the write pointer won't overrun the read pointer. */ XImage *image2 = XCreateImage (dpy, xgwa.visual, xgwa.depth, ZPixmap, 0, image->data, xgwa.width, xgwa.height, 8, 0); if (!image2) { if (grab_verbose_p) fprintf(stderr, "%s: out of memory?\n", progname); return False; } if (grab_verbose_p) fprintf(stderr, "%s: converting from depth %d to depth %d\n", progname, image->depth, xgwa.depth); for (y = 0; y < image->height; y++) for (x = 0; x < image->width; x++) { /* #### really these shift values should be determined from the mask values -- but that's a pain in the ass, and anyway, this is an SGI-specific extension so hardcoding assumptions about the SGI server's behavior isn't *too* heinous... */ unsigned long pixel = XGetPixel(image, x, y); unsigned int r = (pixel & image->red_mask); unsigned int g = (pixel & image->green_mask) >> 8; unsigned int b = (pixel & image->blue_mask) >> 16; if (xgwa.depth == 8) pixel = ((r >> 5) | ((g >> 5) << 3) | ((b >> 6) << 6)); else if (xgwa.depth == 12) pixel = ((r >> 4) | ((g >> 4) << 4) | ((b >> 4) << 8)); else if (xgwa.depth == 16 || xgwa.depth == 15) /* Gah! I don't understand why these are in the other order. */ pixel = (((r >> 3) << 10) | ((g >> 3) << 5) | ((b >> 3))); else abort(); XPutPixel(image2, x, y, pixel); } image->data = 0; XDestroyImage(image); image = image2; } if (remap_p) { allocate_cubic_colormap (screen, window, xgwa.visual); remap_image (screen, window, xgwa.colormap, image); } /* Now actually put the bits into the window or pixmap -- note the design bogosity of this extension, where we've been forced to take 24 bit data from the server to the client, and then push it back from the client to the server, *without alteration*. We should have just been able to tell the server, "put a screen image in this drawable", instead of having to go through the intermediate step of converting it to an Image. Geez. (Assuming that the window is of screen depth; we happen to handle less deep windows, but that's beside the point.) */ gcv.function = GXcopy; gc = XCreateGC (dpy, window, GCFunction, &gcv); if (into_pixmap) { gcv.function = GXcopy; gc = XCreateGC (dpy, into_pixmap, GCFunction, &gcv); XPutImage (dpy, into_pixmap, gc, image, 0, 0, 0, 0, xgwa.width, xgwa.height); } else { gcv.function = GXcopy; gc = XCreateGC (dpy, window, GCFunction, &gcv); /* Ok, now we'll be needing that window on the screen... */ raise_window(dpy, window, dont_wait); /* Plop down the bits... */ XPutImage (dpy, window, gc, image, 0, 0, 0, 0, xgwa.width, xgwa.height); } XFreeGC (dpy, gc); if (image->data) { free(image->data); image->data = 0; } XDestroyImage(image); return True; } #endif /* HAVE_READ_DISPLAY_EXTENSION */ #ifdef HAVE_READ_DISPLAY_EXTENSION /* Makes and installs a colormap that makes a PseudoColor or DirectColor visual behave like a TrueColor visual of the same depth. #### Duplicated in driver/xscreensaver-getimage.c */ static void allocate_cubic_colormap (Screen *screen, Window window, Visual *visual) { Display *dpy = DisplayOfScreen (screen); XWindowAttributes xgwa; Colormap cmap; int nr, ng, nb, cells; int r, g, b; int depth; XColor colors[4097]; int i; XGetWindowAttributes (dpy, window, &xgwa); cmap = xgwa.colormap; depth = visual_depth (screen, visual); switch (depth) { case 8: nr = 3; ng = 3; nb = 2; cells = 256; break; case 12: nr = 4; ng = 4; nb = 4; cells = 4096; break; default: abort(); break; } memset(colors, 0, sizeof(colors)); for (r = 0; r < (1 << nr); r++) for (g = 0; g < (1 << ng); g++) for (b = 0; b < (1 << nb); b++) { i = (r | (g << nr) | (b << (nr + ng))); colors[i].pixel = i; colors[i].flags = DoRed|DoGreen|DoBlue; if (depth == 8) { colors[i].red = ((r << 13) | (r << 10) | (r << 7) | (r << 4) | (r << 1)); colors[i].green = ((g << 13) | (g << 10) | (g << 7) | (g << 4) | (g << 1)); colors[i].blue = ((b << 14) | (b << 12) | (b << 10) | (b << 8) | (b << 6) | (b << 4) | (b << 2) | b); } else { colors[i].red = (r << 12) | (r << 8) | (r << 4) | r; colors[i].green = (g << 12) | (g << 8) | (g << 4) | g; colors[i].blue = (b << 12) | (b << 8) | (b << 4) | b; } } { int j; int allocated = 0; int interleave = cells / 8; /* skip around, rather than allocating in order, so that we get better coverage if we can't allocated all of them. */ for (j = 0; j < interleave; j++) for (i = 0; i < cells; i += interleave) if (XAllocColor (dpy, cmap, &colors[i + j])) allocated++; if (grab_verbose_p) fprintf (stderr, "%s: allocated %d of %d colors for cubic map\n", progname, allocated, cells); } } /* Find the pixel index that is closest to the given color (using linear distance in RGB space -- which is far from the best way.) #### Duplicated in driver/xscreensaver-getimage.c */ static unsigned long find_closest_pixel (XColor *colors, int ncolors, unsigned long r, unsigned long g, unsigned long b) { unsigned long distance = ~0; int i, found = 0; if (ncolors == 0) abort(); for (i = 0; i < ncolors; i++) { unsigned long d; int rd, gd, bd; rd = r - colors[i].red; gd = g - colors[i].green; bd = b - colors[i].blue; if (rd < 0) rd = -rd; if (gd < 0) gd = -gd; if (bd < 0) bd = -bd; d = (rd << 1) + (gd << 2) + bd; if (d < distance) { distance = d; found = i; if (distance == 0) break; } } return found; } /* Given an XImage with 8-bit or 12-bit RGB data, convert it to be displayable with the given X colormap. The farther from a perfect color cube the contents of the colormap are, the lossier the transformation will be. No dithering is done. #### Duplicated in driver/xscreensaver-getimage.c */ void remap_image (Screen *screen, Window window, Colormap cmap, XImage *image) { Display *dpy = DisplayOfScreen (screen); unsigned long map[4097]; int x, y, i; int cells; XColor colors[4097]; if (image->depth == 8) cells = 256; else if (image->depth == 12) cells = 4096; else abort(); memset(map, -1, sizeof(*map)); memset(colors, -1, sizeof(*colors)); for (i = 0; i < cells; i++) colors[i].pixel = i; XQueryColors (dpy, cmap, colors, cells); if (grab_verbose_p) fprintf(stderr, "%s: building table for %d bit image\n", progname, image->depth); for (i = 0; i < cells; i++) { unsigned short r, g, b; if (cells == 256) { /* "RRR GGG BB" In an 8 bit map. Convert that to "RRR RRR RR" "GGG GGG GG" "BB BB BB BB" to give an even spread. */ r = (i & 0x07); g = (i & 0x38) >> 3; b = (i & 0xC0) >> 6; r = ((r << 13) | (r << 10) | (r << 7) | (r << 4) | (r << 1)); g = ((g << 13) | (g << 10) | (g << 7) | (g << 4) | (g << 1)); b = ((b << 14) | (b << 12) | (b << 10) | (b << 8) | (b << 6) | (b << 4) | (b << 2) | b); } else { /* "RRRR GGGG BBBB" In a 12 bit map. Convert that to "RRRR RRRR" "GGGG GGGG" "BBBB BBBB" to give an even spread. */ r = (i & 0x00F); g = (i & 0x0F0) >> 4; b = (i & 0xF00) >> 8; r = (r << 12) | (r << 8) | (r << 4) | r; g = (g << 12) | (g << 8) | (g << 4) | g; b = (b << 12) | (b << 8) | (b << 4) | b; } map[i] = find_closest_pixel (colors, cells, r, g, b); } if (grab_verbose_p) fprintf(stderr, "%s: remapping colors in %d bit image\n", progname, image->depth); for (y = 0; y < image->height; y++) for (x = 0; x < image->width; x++) { unsigned long pixel = XGetPixel(image, x, y); if (pixel >= cells) abort(); XPutPixel(image, x, y, map[pixel]); } } #endif /* HAVE_READ_DISPLAY_EXTENSION */ xscreensaver-5.34/utils/grabclient.c000664 000767 000767 00000065133 12426265150 017314 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 1992-2014 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ /* This file contains code for running an external program to grab an image onto the given window. The external program in question must take a window ID as its argument, e.g., the "xscreensaver-getimage" program in the hacks/ directory. That program links against utils/grabimage.c, which happens to export the same API as this program (utils/grabclient.c). */ #include "utils.h" #include "grabscreen.h" #include "resources.h" #include "yarandom.h" #ifdef HAVE_COCOA # include "jwxyz.h" # include "colorbars.h" #else /* !HAVE_COCOA -- real Xlib */ # include "vroot.h" # include # include /* for XtInputId, etc */ #endif /* !HAVE_COCOA */ #include #ifdef HAVE_UNISTD_H # include #endif #ifdef HAVE_SYS_WAIT_H # include /* for waitpid() and associated macros */ #endif extern char *progname; static void print_loading_msg (Screen *, Window); #ifndef HAVE_COCOA static Bool error_handler_hit_p = False; static int ignore_all_errors_ehandler (Display *dpy, XErrorEvent *error) { error_handler_hit_p = True; return 0; } /* Returns True if the given Drawable is a Window; False if it's a Pixmap. */ static Bool drawable_window_p (Display *dpy, Drawable d) { XErrorHandler old_handler; XWindowAttributes xgwa; XSync (dpy, False); old_handler = XSetErrorHandler (ignore_all_errors_ehandler); error_handler_hit_p = False; XGetWindowAttributes (dpy, d, &xgwa); XSync (dpy, False); XSetErrorHandler (old_handler); XSync (dpy, False); if (!error_handler_hit_p) return True; /* It's a Window. */ else return False; /* It's a Pixmap, or an invalid ID. */ } static Bool xscreensaver_window_p (Display *dpy, Window window) { Atom type; int format; unsigned long nitems, bytesafter; unsigned char *version; if (XGetWindowProperty (dpy, window, XInternAtom (dpy, "_SCREENSAVER_VERSION", False), 0, 1, False, XA_STRING, &type, &format, &nitems, &bytesafter, &version) == Success && type != None) return True; return False; } /* XCopyArea seems not to work right on SGI O2s if you draw in SubwindowMode on a window whose depth is not the maximal depth of the screen? Or something. Anyway, things don't work unless we: use SubwindowMode for the real root window (or a legitimate virtual root window); but do not use SubwindowMode for the xscreensaver window. I make no attempt to explain. */ Bool use_subwindow_mode_p (Screen *screen, Window window) { if (window != VirtualRootWindowOfScreen(screen)) return False; else if (xscreensaver_window_p(DisplayOfScreen(screen), window)) return False; else return True; } static void checkerboard (Screen *screen, Drawable drawable) { Display *dpy = DisplayOfScreen (screen); unsigned int x, y; int size = 24; XColor fg, bg; XGCValues gcv; GC gc = XCreateGC (dpy, drawable, 0, &gcv); Colormap cmap; unsigned int win_width, win_height; fg.flags = bg.flags = DoRed|DoGreen|DoBlue; fg.red = fg.green = fg.blue = 0x0000; bg.red = bg.green = bg.blue = 0x4444; fg.pixel = 0; bg.pixel = 1; if (drawable_window_p (dpy, drawable)) { XWindowAttributes xgwa; XGetWindowAttributes (dpy, drawable, &xgwa); win_width = xgwa.width; win_height = xgwa.height; cmap = xgwa.colormap; screen = xgwa.screen; } else /* it's a pixmap */ { XWindowAttributes xgwa; Window root; int x, y; unsigned int bw, d; XGetWindowAttributes (dpy, RootWindowOfScreen (screen), &xgwa); cmap = xgwa.colormap; XGetGeometry (dpy, drawable, &root, &x, &y, &win_width, &win_height, &bw, &d); } /* Allocate black and gray, but don't hold them locked. */ if (XAllocColor (dpy, cmap, &fg)) XFreeColors (dpy, cmap, &fg.pixel, 1, 0); if (XAllocColor (dpy, cmap, &bg)) XFreeColors (dpy, cmap, &bg.pixel, 1, 0); XSetForeground (dpy, gc, bg.pixel); XFillRectangle (dpy, drawable, gc, 0, 0, win_width, win_height); XSetForeground (dpy, gc, fg.pixel); for (y = 0; y < win_height; y += size+size) for (x = 0; x < win_width; x += size+size) { XFillRectangle (dpy, drawable, gc, x, y, size, size); XFillRectangle (dpy, drawable, gc, x+size, y+size, size, size); } XFreeGC (dpy, gc); } static char * get_name (Display *dpy, Window window) { Atom type; int format; unsigned long nitems, bytesafter; unsigned char *name = 0; Atom atom = XInternAtom (dpy, XA_XSCREENSAVER_IMAGE_FILENAME, False); if (XGetWindowProperty (dpy, window, atom, 0, 1024, False, XA_STRING, &type, &format, &nitems, &bytesafter, &name) == Success && type != None) return (char *) name; else return 0; } static Bool get_geometry (Display *dpy, Window window, XRectangle *ret) { Atom type; int format; unsigned long nitems, bytesafter; unsigned char *name = 0; Atom atom = XInternAtom (dpy, XA_XSCREENSAVER_IMAGE_GEOMETRY, False); int x, y; unsigned int w, h; if (XGetWindowProperty (dpy, window, atom, 0, 1024, False, XA_STRING, &type, &format, &nitems, &bytesafter, &name) == Success && type != None) { int flags = XParseGeometry ((char *) name, &x, &y, &w, &h); free (name); /* Require all four, and don't allow negative positions. */ if (flags == (XValue|YValue|WidthValue|HeightValue)) { ret->x = x; ret->y = y; ret->width = w; ret->height = h; return True; } else return False; } else return False; } static void hack_subproc_environment (Display *dpy) { /* Store $DISPLAY into the environment, so that the $DISPLAY variable that the spawned processes inherit is what we are actually using. */ const char *odpy = DisplayString (dpy); char *ndpy = (char *) malloc(strlen(odpy) + 20); strcpy (ndpy, "DISPLAY="); strcat (ndpy, odpy); /* Allegedly, BSD 4.3 didn't have putenv(), but nobody runs such systems any more, right? It's not Posix, but everyone seems to have it. */ #ifdef HAVE_PUTENV if (putenv (ndpy)) abort (); #endif /* HAVE_PUTENV */ /* don't free (ndpy) -- some implementations of putenv (BSD 4.4, glibc 2.0) copy the argument, but some (libc4,5, glibc 2.1.2, MacOS) do not. So we must leak it (and/or the previous setting). Yay. */ } /* Spawn a program, and wait for it to finish. If we just use system() for this, then sometimes the subprocess doesn't die when *this* process is sent a TERM signal. Perhaps this is due to the intermediate /bin/sh that system() uses to parse arguments? I'm not sure. But using fork() and execvp() here seems to close the race. */ static void exec_simple_command (const char *command) { char *av[1024]; int ac = 0; char *token = strtok (strdup(command), " \t"); while (token) { av[ac++] = token; token = strtok(0, " \t"); } av[ac] = 0; execvp (av[0], av); /* shouldn't return. */ } static void fork_exec_wait (const char *command) { char buf [255]; pid_t forked; int status; switch ((int) (forked = fork ())) { case -1: sprintf (buf, "%s: couldn't fork", progname); perror (buf); return; case 0: exec_simple_command (command); exit (1); /* exits child fork */ break; default: waitpid (forked, &status, 0); break; } } typedef struct { void (*callback) (Screen *, Window, Drawable, const char *name, XRectangle *geom, void *closure); Screen *screen; Window window; Drawable drawable; void *closure; FILE *read_pipe; FILE *write_pipe; XtInputId pipe_id; pid_t pid; } grabclient_data; static void finalize_cb (XtPointer closure, int *fd, XtIntervalId *id); static void fork_exec_cb (const char *command, Screen *screen, Window window, Drawable drawable, void (*callback) (Screen *, Window, Drawable, const char *name, XRectangle *geom, void *closure), void *closure) { XtAppContext app = XtDisplayToApplicationContext (DisplayOfScreen (screen)); grabclient_data *data; char buf [255]; pid_t forked; int fds [2]; if (pipe (fds)) { sprintf (buf, "%s: creating pipe", progname); perror (buf); exit (1); } data = (grabclient_data *) calloc (1, sizeof(*data)); data->callback = callback; data->closure = closure; data->screen = screen; data->window = window; data->drawable = drawable; data->read_pipe = fdopen (fds[0], "r"); data->write_pipe = fdopen (fds[1], "w"); if (!data->read_pipe || !data->write_pipe) { sprintf (buf, "%s: fdopen", progname); perror (buf); exit (1); } data->pipe_id = XtAppAddInput (app, fileno (data->read_pipe), (XtPointer) (XtInputReadMask | XtInputExceptMask), finalize_cb, (XtPointer) data); forked = fork (); switch ((int) forked) { case -1: sprintf (buf, "%s: couldn't fork", progname); perror (buf); return; case 0: /* child */ fclose (data->read_pipe); data->read_pipe = 0; /* clone the write pipe onto stdout so that it gets closed when the fork exits. This will shut down the pipe and signal the parent. */ close (fileno (stdout)); dup2 (fds[1], fileno (stdout)); close (fds[1]); close (fileno (stdin)); /* for kicks */ exec_simple_command (command); exit (1); /* exits child fork */ break; default: /* parent */ fclose (data->write_pipe); data->write_pipe = 0; data->pid = forked; break; } } /* Called in the parent when the forked process dies. Runs the caller's callback, and cleans up. */ static void finalize_cb (XtPointer closure, int *fd, XtIntervalId *id) { grabclient_data *data = (grabclient_data *) closure; Display *dpy = DisplayOfScreen (data->screen); char *name; XRectangle geom = { 0, 0, 0, 0 }; XtRemoveInput (*id); name = get_name (dpy, data->window); get_geometry (dpy, data->window, &geom); data->callback (data->screen, data->window, data->drawable, name, &geom, data->closure); if (name) free (name); fclose (data->read_pipe); if (data->pid) /* reap zombies */ { int status; waitpid (data->pid, &status, 0); data->pid = 0; } memset (data, 0, sizeof (*data)); free (data); } /* Loads an image into the Drawable. When grabbing desktop images, the Window will be unmapped first. */ static void load_random_image_1 (Screen *screen, Window window, Drawable drawable, void (*callback) (Screen *, Window, Drawable, const char *name, XRectangle *geom, void *closure), void *closure, char **name_ret, XRectangle *geom_ret) { Display *dpy = DisplayOfScreen (screen); char *grabber = get_string_resource(dpy, "desktopGrabber", "DesktopGrabber"); char *cmd; char id[200]; if (!grabber || !*grabber) { fprintf (stderr, "%s: resources installed incorrectly: \"desktopGrabber\" is unset!\n", progname); exit (1); } sprintf (id, "0x%lx 0x%lx", (unsigned long) window, (unsigned long) drawable); cmd = (char *) malloc (strlen(grabber) + strlen(id) + 1); /* Needn't worry about buffer overflows here, because the buffer is longer than the length of the format string, and the length of what we're putting into it. So the only way to crash would be if the format string itself was corrupted, but that comes from the resource database, and if hostile forces have access to that, then the game is already over. */ sprintf (cmd, grabber, id); free (grabber); grabber = 0; /* In case "cmd" fails, leave some random image on the screen, not just black or white, so that it's more obvious what went wrong. */ checkerboard (screen, drawable); if (window == drawable) print_loading_msg (screen, window); XSync (dpy, True); hack_subproc_environment (dpy); if (callback) { /* Start the image loading in another fork and return immediately. Invoke the callback function when done. */ if (name_ret) abort(); fork_exec_cb (cmd, screen, window, drawable, callback, closure); } else { /* Wait for the image to load, and return it immediately. */ fork_exec_wait (cmd); if (name_ret) *name_ret = get_name (dpy, window); if (geom_ret) get_geometry (dpy, window, geom_ret); } free (cmd); XSync (dpy, True); } #else /* HAVE_COCOA */ struct pipe_closure { FILE *pipe; XtInputId id; Screen *screen; Window xwindow; Drawable drawable; char *directory; void (*callback) (Screen *, Window, Drawable, const char *name, XRectangle *geom, void *closure); void *closure; }; # ifndef USE_IPHONE # define BACKSLASH(c) \ (! ((c >= 'a' && c <= 'z') || \ (c >= 'A' && c <= 'Z') || \ (c >= '0' && c <= '9') || \ c == '.' || c == '_' || c == '-' || c == '+' || c == '/')) /* Gets the name of an image file to load by running xscreensaver-getimage-file at the end of a pipe. This can be very slow! */ static FILE * open_image_name_pipe (const char *dir) { char *s; # ifdef HAVE_COCOA /* /bin/sh on OS X 10.10 wipes out the PATH. */ const char *path = getenv("PATH"); char *cmd = s = malloc ((strlen(dir) + strlen(path)) * 2 + 100); strcpy (s, "/bin/sh -c 'export PATH="); s += strlen (s); while (*path) { char c = *path++; if (BACKSLASH(c)) *s++ = '\\'; *s++ = c; } strcpy (s, "; "); s += strlen (s); # else char *cmd = s = malloc (strlen(dir) * 2 + 100); # endif strcpy (s, "xscreensaver-getimage-file --name "); s += strlen (s); while (*dir) { char c = *dir++; if (BACKSLASH(c)) *s++ = '\\'; *s++ = c; } # ifdef HAVE_COCOA strcpy (s, "'"); s += strlen (s); # endif *s = 0; FILE *pipe = popen (cmd, "r"); free (cmd); return pipe; } static void pipe_cb (XtPointer closure, int *source, XtInputId *id) { /* This is not called from a signal handler, so doing stuff here is fine. */ struct pipe_closure *clo2 = (struct pipe_closure *) closure; char buf[10240]; const char *dir = clo2->directory; char *absfile = 0; *buf = 0; fgets (buf, sizeof(buf)-1, clo2->pipe); pclose (clo2->pipe); clo2->pipe = 0; XtRemoveInput (clo2->id); clo2->id = 0; /* strip trailing newline */ int L = strlen(buf); while (L > 0 && (buf[L-1] == '\r' || buf[L-1] == '\n')) buf[--L] = 0; Display *dpy = DisplayOfScreen (clo2->screen); XRectangle geom; if (*buf && *buf != '/') /* pathname is relative to dir. */ { absfile = malloc (strlen(dir) + strlen(buf) + 10); strcpy (absfile, dir); if (dir[strlen(dir)-1] != '/') strcat (absfile, "/"); strcat (absfile, buf); } if (! osx_load_image_file (clo2->screen, clo2->xwindow, clo2->drawable, (absfile ? absfile : buf), &geom)) { /* unable to load image - draw colorbars */ XWindowAttributes xgwa; XGetWindowAttributes (dpy, clo2->xwindow, &xgwa); Window r; int x, y; unsigned int w, h, bbw, d; struct stat st; /* Log something to syslog so we can tell the difference between corrupted images and broken symlinks. */ if (!*buf) fprintf (stderr, "%s: no image filename found\n", progname); else if (! stat (buf, &st)) fprintf (stderr, "%s: %s: unparsable\n", progname, buf); else { char buf2[2048]; sprintf (buf2, "%.255s: %.1024s", progname, buf); perror (buf2); } XGetGeometry (dpy, clo2->drawable, &r, &x, &y, &w, &h, &bbw, &d); draw_colorbars (clo2->screen, xgwa.visual, clo2->drawable, xgwa.colormap, 0, 0, w, h); geom.x = geom.y = 0; geom.width = w; geom.height = h; } /* Take the extension off of the file name. */ /* Duplicated in driver/xscreensaver-getimage.c. */ if (buf && *buf) { char *slash = strrchr (buf, '/'); char *dot = strrchr ((slash ? slash : buf), '.'); if (dot) *dot = 0; /* Replace slashes with newlines */ /* while (dot = strchr(buf, '/')) *dot = '\n'; */ /* Replace slashes with spaces */ /* while ((dot = strchr(buf, '/'))) *dot = ' '; */ } if (absfile) free (absfile); clo2->callback (clo2->screen, clo2->xwindow, clo2->drawable, buf, &geom, clo2->closure); clo2->callback = 0; free (clo2->directory); free (clo2); } # else /* USE_IPHONE */ /* Callback for ios_load_random_image(), called after we have loaded an image from the iOS device's Photo Library. See iosgrabimage.m. */ static void ios_load_random_image_cb (void *uiimage, const char *filename, int width, int height, void *closure) { struct pipe_closure *clo2 = (struct pipe_closure *) closure; Display *dpy = DisplayOfScreen (clo2->screen); XRectangle geom; XWindowAttributes xgwa; Window r; int x, y; unsigned int w, h, bbw, d; int rot = 0; XGetWindowAttributes (dpy, clo2->xwindow, &xgwa); XGetGeometry (dpy, clo2->drawable, &r, &x, &y, &w, &h, &bbw, &d); /* If the image is portrait and the window is landscape, or vice versa, rotate the image. The idea is to fill up as many pixels as possible, and assume the user will just rotate their phone until it looks right. This makes "decayscreen", etc. much more easily viewable. */ if (get_boolean_resource (dpy, "rotateImages", "RotateImages")) { if ((width > height) != (w > h)) rot = 5; } if (uiimage) { jwxyz_draw_NSImage_or_CGImage (DisplayOfScreen (clo2->screen), clo2->drawable, True, uiimage, &geom, rot); } else /* Probably means no images in the gallery. */ { draw_colorbars (clo2->screen, xgwa.visual, clo2->drawable, xgwa.colormap, 0, 0, w, h); geom.x = geom.y = 0; geom.width = w; geom.height = h; filename = 0; } clo2->callback (clo2->screen, clo2->xwindow, clo2->drawable, filename, &geom, clo2->closure); clo2->callback = 0; if (clo2->directory) free (clo2->directory); free (clo2); } # endif /* USE_IPHONE */ static void osx_load_image_file_async (Screen *screen, Window xwindow, Drawable drawable, const char *dir, void (*callback) (Screen *, Window, Drawable, const char *name, XRectangle *geom, void *closure), void *closure) { # if 0 /* do it synchronously */ FILE *pipe = open_image_name_pipe (dir); char buf[10240]; *buf = 0; fgets (buf, sizeof(buf)-1, pipe); pclose (pipe); /* strip trailing newline */ int L = strlen(buf); while (L > 0 && (buf[L-1] == '\r' || buf[L-1] == '\n')) buf[--L] = 0; XRectangle geom; if (! osx_load_image_file (screen, xwindow, drawable, buf, &geom)) { /* draw colorbars */ abort(); } callback (screen, xwindow, drawable, buf, &geom, closure); # else /* do it asynchronously */ struct pipe_closure *clo2 = (struct pipe_closure *) calloc (1, sizeof(*clo2)); clo2->screen = screen; clo2->xwindow = xwindow; clo2->drawable = drawable; clo2->callback = callback; clo2->closure = closure; # ifndef USE_IPHONE clo2->directory = strdup (dir); clo2->pipe = open_image_name_pipe (dir); clo2->id = XtAppAddInput (XtDisplayToApplicationContext ( DisplayOfScreen (screen)), fileno (clo2->pipe), (XtPointer) (XtInputReadMask | XtInputExceptMask), pipe_cb, (XtPointer) clo2); # else /* USE_IPHONE */ ios_load_random_image (ios_load_random_image_cb, clo2); # endif /* USE_IPHONE */ # endif } /* Loads an image into the Drawable, returning once the image is loaded. */ static void load_random_image_1 (Screen *screen, Window window, Drawable drawable, void (*callback) (Screen *, Window, Drawable, const char *name, XRectangle *geom, void *closure), void *closure, char **name_ret, XRectangle *geom_ret) { Display *dpy = DisplayOfScreen (screen); XWindowAttributes xgwa; Bool deskp = get_boolean_resource (dpy, "grabDesktopImages", "Boolean"); Bool filep = get_boolean_resource (dpy, "chooseRandomImages", "Boolean"); const char *dir = 0; Bool done = False; XRectangle geom_ret_2; char *name_ret_2 = 0; if (!drawable) abort(); if (callback) { geom_ret = &geom_ret_2; name_ret = &name_ret_2; } XGetWindowAttributes (dpy, window, &xgwa); { Window r; int x, y; unsigned int w, h, bbw, d; XGetGeometry (dpy, drawable, &r, &x, &y, &w, &h, &bbw, &d); xgwa.width = w; xgwa.height = h; } if (name_ret) *name_ret = 0; if (geom_ret) { geom_ret->x = 0; geom_ret->y = 0; geom_ret->width = xgwa.width; geom_ret->height = xgwa.height; } # ifndef USE_IPHONE if (filep) dir = get_string_resource (dpy, "imageDirectory", "ImageDirectory"); if (!dir || !*dir) filep = False; # endif /* ! USE_IPHONE */ if (deskp && filep) { deskp = !(random() & 5); /* if both, desktop 1/5th of the time */ filep = !deskp; } if (filep && !done) { osx_load_image_file_async (screen, window, drawable, dir, callback, closure); return; } if (deskp && !done) { if (osx_grab_desktop_image (screen, window, drawable, &geom_ret_2)) { if (name_ret) *name_ret = strdup ("desktop"); done = True; } } if (! done) draw_colorbars (screen, xgwa.visual, drawable, xgwa.colormap, 0, 0, xgwa.width, xgwa.height); if (callback) { /* If we got here, we loaded synchronously even though they wanted async. */ callback (screen, window, drawable, name_ret_2, &geom_ret_2, closure); if (name_ret_2) free (name_ret_2); } } #endif /* HAVE_COCOA */ /* Writes the string "Loading..." in the middle of the screen. This will presumably get blown away when the image finally loads, minutes or hours later... This is called by load_image_async_simple() but not by load_image_async(), since it is assumed that hacks that are loading more than one image *at one time* will be doing something more clever than just blocking with a blank screen. */ static void print_loading_msg (Screen *screen, Window window) { Display *dpy = DisplayOfScreen (screen); XWindowAttributes xgwa; XGCValues gcv; XFontStruct *f = 0; GC gc; char *fn = get_string_resource (dpy, "labelFont", "Font"); const char *text = "Loading..."; int w; if (!fn) fn = get_string_resource (dpy, "titleFont", "Font"); if (!fn) fn = get_string_resource (dpy, "font", "Font"); if (!fn) fn = strdup ("-*-times-bold-r-normal-*-180-*"); f = XLoadQueryFont (dpy, fn); if (!f) f = XLoadQueryFont (dpy, "fixed"); if (!f) abort(); free (fn); fn = 0; XGetWindowAttributes (dpy, window, &xgwa); w = XTextWidth (f, text, (int) strlen(text)); gcv.foreground = get_pixel_resource (dpy, xgwa.colormap, "foreground", "Foreground"); gcv.background = get_pixel_resource (dpy, xgwa.colormap, "background", "Background"); gcv.font = f->fid; gc = XCreateGC (dpy, window, GCFont | GCForeground | GCBackground, &gcv); XDrawImageString (dpy, window, gc, (xgwa.width - w) / 2, (xgwa.height - (f->ascent + f->descent)) / 2 + f->ascent, text, (int) strlen(text)); XFreeFont (dpy, f); XFreeGC (dpy, gc); XSync (dpy, False); } /* Loads an image into the Drawable in the background; when the image is fully loaded, runs the callback. When grabbing desktop images, the Window will be unmapped first. */ void load_image_async (Screen *screen, Window window, Drawable drawable, void (*callback) (Screen *, Window, Drawable, const char *name, XRectangle *geom, void *closure), void *closure) { load_random_image_1 (screen, window, drawable, callback, closure, 0, 0); } struct async_load_state { Bool done_p; char *filename; XRectangle geom; }; static void load_image_async_simple_cb (Screen *screen, Window window, Drawable drawable, const char *name, XRectangle *geom, void *closure) { async_load_state *state = (async_load_state *) closure; state->done_p = True; state->filename = (name ? strdup (name) : 0); state->geom = *geom; } async_load_state * load_image_async_simple (async_load_state *state, Screen *screen, Window window, Drawable drawable, char **filename_ret, XRectangle *geometry_ret) { if (state && state->done_p) /* done! */ { if (filename_ret) *filename_ret = state->filename; else if (state->filename) free (state->filename); if (geometry_ret) *geometry_ret = state->geom; free (state); return 0; } else if (! state) /* first time */ { state = (async_load_state *) calloc (1, sizeof(*state)); state->done_p = False; print_loading_msg (screen, window); load_image_async (screen, window, drawable, load_image_async_simple_cb, state); return state; } else /* still waiting */ return state; } xscreensaver-5.34/utils/hsv.c000644 000767 000767 00000004215 06561646263 016005 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 1992, 1997 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ /* This file contains some utility routines for randomly picking the colors to hack the screen with. */ #include "utils.h" #include "hsv.h" void hsv_to_rgb (int h, double s, double v, unsigned short *r, unsigned short *g, unsigned short *b) { double H, S, V, R, G, B; double p1, p2, p3; double f; int i; if (s < 0) s = 0; if (v < 0) v = 0; if (s > 1) s = 1; if (v > 1) v = 1; S = s; V = v; H = (h % 360) / 60.0; i = H; f = H - i; p1 = V * (1 - S); p2 = V * (1 - (S * f)); p3 = V * (1 - (S * (1 - f))); if (i == 0) { R = V; G = p3; B = p1; } else if (i == 1) { R = p2; G = V; B = p1; } else if (i == 2) { R = p1; G = V; B = p3; } else if (i == 3) { R = p1; G = p2; B = V; } else if (i == 4) { R = p3; G = p1; B = V; } else { R = V; G = p1; B = p2; } *r = R * 65535; *g = G * 65535; *b = B * 65535; } void rgb_to_hsv (unsigned short r, unsigned short g, unsigned short b, int *h, double *s, double *v) { double R, G, B, H, S, V; double cmax, cmin; double cmm; int imax; R = ((double) r) / 65535.0; G = ((double) g) / 65535.0; B = ((double) b) / 65535.0; cmax = R; cmin = G; imax = 1; if ( cmax < G ) { cmax = G; cmin = R; imax = 2; } if ( cmax < B ) { cmax = B; imax = 3; } if ( cmin > B ) { cmin = B; } cmm = cmax - cmin; V = cmax; if (cmm == 0) S = H = 0; else { S = cmm / cmax; if (imax == 1) H = (G - B) / cmm; else if (imax == 2) H = 2.0 + (B - R) / cmm; else /*if (imax == 3)*/ H = 4.0 + (R - G) / cmm; if (H < 0) H += 6.0; } *h = (H * 60.0); *s = S; *v = V; } xscreensaver-5.34/utils/overlay.c000644 000767 000767 00000012321 10107254766 016655 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 1997, 2001, 2004 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ /* If the server's root window contains a SERVER_OVERLAY_VISUALS property, then that identifies the visuals which correspond to the video hardware's overlay planes. Windows created in these kinds of visuals have the property that one or more particular pixel values is transparent. Vendor support: SGI: - Supported on all systems since IRIX 4.0. - Their version of the Motif toolkit renders menus into the overlay visual, so that they don't cause exposure events on occluded windows. - 2 bit overlay plane with Indigo Entry graphics (e.g., Indy). - 8 bit overlay on O2 with Indigo 24 graphics or better (e.g., O2). HP: - Supported on workstations with CRX24 and CRX48Z graphics hardware. - 8 bit or 24 bit overlay plane. - The default visual is the overlay visual, with a transparent pixel. That way, all Xlib programs draw into the overlay plane, and no Xlib program causes exposures on occluded OpenGL windows. IBM: - Supported on some graphics hardware (which?) DEC: - Supported on some graphics hardware (which?) SUN: - Some systems apparently implement it VERRRRRRY SLOWLY, so drawing into the overlay plane is a performance killer (about as bad as using the SHAPE extension.) On my Indy, there are two transparent visuals, one of which is at layer 1, and one of which is at layer 2. This is apparently the ordering in which they are overlayed (1 being topmost.) The other difference between them is that the topmost one only has 2 planes, while the next one has 8. This code selects the topmost one, regardless of depth. Maybe that's not the right thing. Well, in XScreenSaver, we only need to allocate two colors from it (it's only used to display the stderr output, so that the text can overlay the graphics without being obliterated by it.) Documentation, such as it is, on SERVER_OVERLAY_VISUALS found on the web: http://www.hp.com/xwindow/sharedInfo/Whitepapers/Visuals/server_overlay_visuals.html http://www.xig.com/Pages/Ed-Overlays.html */ #include "utils.h" #include #include #include "visual.h" struct overlay_data { CARD32 visual_id; CARD32 transparency; /* 0: none; 1: pixel; 2: mask ("mask" means "any pixel with these bits set is a transparent pixel") */ CARD32 value; /* the transparent pixel or mask */ CARD32 layer; /* -1: underlay; 0: normal; 1: popup; 2: overlay */ }; static int get_overlay_prop (Screen *screen, struct overlay_data **data_ret) { int result; Atom actual_type; int actual_format; unsigned long nitems, bytes_after; unsigned char *data = 0; Display *dpy = DisplayOfScreen(screen); Window window = RootWindowOfScreen(screen); Atom XA_SERVER_OVERLAY_VISUALS = XInternAtom (dpy, "SERVER_OVERLAY_VISUALS", False); *data_ret = 0; result = XGetWindowProperty (dpy, window, XA_SERVER_OVERLAY_VISUALS, 0, (65536 / sizeof (long)), False, XA_SERVER_OVERLAY_VISUALS, &actual_type, &actual_format, &nitems, &bytes_after, &data); if (result != Success || actual_type != XA_SERVER_OVERLAY_VISUALS || actual_format != 32 || nitems < 1) { if (data) XFree(data); return 0; } else { struct overlay_data *d = (struct overlay_data *) data; *data_ret = d; return nitems / (sizeof(*d) / sizeof(CARD32)); } } Visual * get_overlay_visual (Screen *screen, unsigned long *transparent_pixel_ret) { struct overlay_data *data = 0; int n_visuals = get_overlay_prop (screen, &data); Visual *visual = 0; int depth = 0; unsigned long pixel = 0; unsigned int layer = 0; int i; if (data) for (i = 0; i < n_visuals; i++) /* Only accept ones that have a transparent pixel or mask. */ if (data[i].transparency == 1 || data[i].transparency == 2) { XVisualInfo vi_in, *vi_out; int out_count; vi_in.visualid = data[i].visual_id; vi_out = XGetVisualInfo (DisplayOfScreen(screen), VisualIDMask, &vi_in, &out_count); if (vi_out) { /* Prefer the one at the topmost layer; after that, prefer the one with the greatest depth (most colors.) */ if (layer < data[i].layer || (layer == data[i].layer && depth < vi_out[0].depth)) { visual = vi_out[0].visual; depth = vi_out[0].depth; layer = data[i].layer; pixel = data[i].value; } XFree(vi_out); } } if (data) XFree(data); if (visual && transparent_pixel_ret) *transparent_pixel_ret = pixel; return visual; } xscreensaver-5.34/utils/resources.c000664 000767 000767 00000017126 12423567560 017222 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 1992-2014 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #include "utils.h" #include "resources.h" extern char *progname; #if !defined(HAVE_COCOA) && !defined(HAVE_ANDROID) #include /* These are the Xlib/Xrm versions of these functions. The Cocoa versions are on OSX/XScreenSaverView.m. */ extern char *progclass; extern XrmDatabase XtDatabase (Display *); static unsigned int get_time_resource (Display *dpy, char *res_name, char *res_class, Bool sec_p); #ifndef isupper # define isupper(c) ((c) >= 'A' && (c) <= 'Z') #endif #ifndef _tolower # define _tolower(c) ((c) - 'A' + 'a') #endif char * get_string_resource (Display *dpy, char *res_name, char *res_class) { XrmValue value; char *type; char full_name [1024], full_class [1024]; strcpy (full_name, progname); strcat (full_name, "."); strcat (full_name, res_name); strcpy (full_class, progclass); strcat (full_class, "."); strcat (full_class, res_class); if (XrmGetResource (XtDatabase (dpy), full_name, full_class, &type, &value)) { char *str = (char *) malloc (value.size + 1); strncpy (str, (char *) value.addr, value.size); str [value.size] = 0; return str; } return 0; } Bool get_boolean_resource (Display *dpy, char *res_name, char *res_class) { char *tmp, buf [100]; char *s = get_string_resource (dpy, res_name, res_class); char *os = s; if (! s) return 0; for (tmp = buf; *s; s++) *tmp++ = isupper (*s) ? _tolower (*s) : *s; *tmp = 0; free (os); while (*buf && (buf[strlen(buf)-1] == ' ' || buf[strlen(buf)-1] == '\t')) buf[strlen(buf)-1] = 0; if (!strcmp (buf, "on") || !strcmp (buf, "true") || !strcmp (buf, "yes")) return 1; if (!strcmp (buf,"off") || !strcmp (buf, "false") || !strcmp (buf,"no")) return 0; fprintf (stderr, "%s: %s must be boolean, not %s.\n", progname, res_name, buf); return 0; } int get_integer_resource (Display *dpy, char *res_name, char *res_class) { int val; char c, *s = get_string_resource (dpy, res_name, res_class); char *ss = s; if (!s) return 0; while (*ss && *ss <= ' ') ss++; /* skip whitespace */ if (ss[0] == '0' && (ss[1] == 'x' || ss[1] == 'X')) /* 0x: parse as hex */ { if (1 == sscanf (ss+2, "%x %c", (unsigned int *) &val, &c)) { free (s); return val; } } else /* else parse as dec */ { if (1 == sscanf (ss, "%d %c", &val, &c)) { free (s); return val; } } fprintf (stderr, "%s: %s must be an integer, not %s.\n", progname, res_name, s); free (s); return 0; } double get_float_resource (Display *dpy, char *res_name, char *res_class) { double val; char c, *s = get_string_resource (dpy, res_name, res_class); if (! s) return 0.0; if (1 == sscanf (s, " %lf %c", &val, &c)) { free (s); return val; } fprintf (stderr, "%s: %s must be a float, not %s.\n", progname, res_name, s); free (s); return 0.0; } #endif /* !HAVE_COCOA && !HAVE_ANDROID */ /* These functions are the same with Xlib, Cocoa and Android: */ unsigned int get_pixel_resource (Display *dpy, Colormap cmap, char *res_name, char *res_class) { XColor color; char *s = get_string_resource (dpy, res_name, res_class); char *s2; Bool ok = True; if (!s) goto DEFAULT; for (s2 = s + strlen(s) - 1; s2 > s; s2--) if (*s2 == ' ' || *s2 == '\t') *s2 = 0; else break; if (! XParseColor (dpy, cmap, s, &color)) { fprintf (stderr, "%s: can't parse color %s", progname, s); ok = False; goto DEFAULT; } if (! XAllocColor (dpy, cmap, &color)) { fprintf (stderr, "%s: couldn't allocate color %s", progname, s); ok = False; goto DEFAULT; } free (s); return (unsigned int) color.pixel; DEFAULT: if (s) free (s); { Bool black_p = (strlen(res_class) >= 10 && !strcasecmp ("Background", res_class + strlen(res_class) - 10)); if (!ok) fprintf (stderr, ": using %s.\n", (black_p ? "black" : "white")); color.flags = DoRed|DoGreen|DoBlue; color.red = color.green = color.blue = (black_p ? 0 : 0xFFFF); if (XAllocColor (dpy, cmap, &color)) return (unsigned int) color.pixel; else { fprintf (stderr, "%s: couldn't allocate %s either!\n", progname, (black_p ? "black" : "white")); /* We can't use BlackPixel/WhitePixel here, because we don't know what screen we're allocating on (only an issue when running inside the xscreensaver daemon: for hacks, DefaultScreen is fine.) */ return 0; } } } int parse_time (const char *string, Bool seconds_default_p, Bool silent_p) { unsigned int h, m, s; char c; if (3 == sscanf (string, " %u : %2u : %2u %c", &h, &m, &s, &c)) ; else if (2 == sscanf (string, " : %2u : %2u %c", &m, &s, &c) || 2 == sscanf (string, " %u : %2u %c", &m, &s, &c)) h = 0; else if (1 == sscanf (string, " : %2u %c", &s, &c)) h = m = 0; else if (1 == sscanf (string, " %u %c", (seconds_default_p ? &s : &m), &c)) { h = 0; if (seconds_default_p) m = 0; else s = 0; } else { if (! silent_p) fprintf (stderr, "%s: invalid time interval specification \"%s\".\n", progname, string); return -1; } if (s >= 60 && (h != 0 || m != 0)) { if (! silent_p) fprintf (stderr, "%s: seconds > 59 in \"%s\".\n", progname, string); return -1; } if (m >= 60 && h > 0) { if (! silent_p) fprintf (stderr, "%s: minutes > 59 in \"%s\".\n", progname, string); return -1; } return ((h * 60 * 60) + (m * 60) + s); } static unsigned int get_time_resource (Display *dpy, char *res_name, char *res_class, Bool sec_p) { int val; char *s = get_string_resource (dpy, res_name, res_class); if (!s) return 0; val = parse_time (s, sec_p, False); free (s); return (val < 0 ? 0 : val); } unsigned int get_seconds_resource (Display *dpy, char *res_name, char *res_class) { return get_time_resource (dpy, res_name, res_class, True); } unsigned int get_minutes_resource (Display *dpy, char *res_name, char *res_class) { return get_time_resource (dpy, res_name, res_class, False); } /* A utility function for event-handler functions: Returns True if the event is a simple click, Space, Tab, etc. Returns False otherwise. The idea here is that most hacks interpret to clicks or basic keypresses as "change it up". This isn't really the right file for this, but whatever. */ Bool screenhack_event_helper (Display *dpy, Window window, XEvent *event) { if (event->xany.type == KeyPress) { KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); if (c == ' ' || c == '\t' || c == '\r' || c == '\n' || keysym == XK_Left || keysym == XK_Right || keysym == XK_Up || keysym == XK_Down || keysym == XK_Prior || keysym == XK_Next) return True; } else if (event->xany.type == ButtonPress) { if (event->xbutton.button == 1) return True; } return False; } xscreensaver-5.34/utils/spline.c000644 000767 000767 00000022523 12155140543 016463 0ustar00jwzjwz000000 000000 /* * Copyright (c) 1987, 1988, 1989 Stanford University * * 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, and that the name of Stanford not be used in advertising or * publicity pertaining to distribution of the software without specific, * written prior permission. Stanford makes no representations about * the suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * STANFORD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. * IN NO EVENT SHALL STANFORD BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* This code came with the InterViews distribution, and was translated from C++ to C by Matthieu Devin some time in 1992. */ #include "utils.h" #include "spline.h" #define SMOOTHNESS 1.0 static void grow_spline_points (spline* s); static void mid_point (double x0, double y0, double x1, double y1, double *mx, double *my); static int can_approx_with_line (double x0, double y0, double x2, double y2, double x3, double y3); static void add_line (spline* s, double x0, double y0, double x1, double y1); static void add_bezier_arc (spline* s, double x0, double y0, double x1, double y1, double x2, double y2, double x3, double y3); static void third_point (double x0, double y0, double x1, double y1, double *tx, double *ty); static void calc_section (spline* s, double cminus1x, double cminus1y, double cx, double cy, double cplus1x, double cplus1y, double cplus2x, double cplus2y); spline* make_spline (unsigned int size) { spline* s = (spline*)calloc (1, sizeof (spline)); if (!s) abort(); s->n_controls = size; s->control_x = (double*)calloc (s->n_controls, sizeof (double)); s->control_y = (double*)calloc (s->n_controls, sizeof (double)); s->n_points = 0; s->allocated_points = s->n_controls; s->points = (XPoint*)calloc (s->allocated_points, sizeof (XPoint)); if (!s->control_x || !s->control_y || !s->points) abort(); return s; } static void grow_spline_points (spline *s) { s->allocated_points = 10 + (s->allocated_points * 1.3); s->points = (XPoint*)realloc (s->points, s->allocated_points * sizeof (XPoint)); if (!s->points) abort(); } static void mid_point (double x0, double y0, double x1, double y1, double *mx, double *my) { *mx = (x0 + x1) / 2.0; *my = (y0 + y1) / 2.0; } static void third_point (double x0, double y0, double x1, double y1, double *tx, double *ty) { *tx = (2 * x0 + x1) / 3.0; *ty = (2 * y0 + y1) / 3.0; } static int can_approx_with_line (double x0, double y0, double x2, double y2, double x3, double y3) { double triangle_area, side_squared, dx, dy; triangle_area = x0 * y2 - x2 * y0 + x2 * y3 - x3 * y2 + x3 * y0 - x0 * y3; /* actually 4 times the area. */ triangle_area *= triangle_area; dx = x3 - x0; dy = y3 - y0; side_squared = dx * dx + dy * dy; return triangle_area <= SMOOTHNESS * side_squared; } static void add_line (spline *s, double x0, double y0, double x1, double y1) { if (s->n_points >= s->allocated_points) grow_spline_points (s); if (s->n_points == 0) { s->points [s->n_points].x = x0; s->points [s->n_points].y = y0; s->n_points += 1; } s->points [s->n_points].x = x1; s->points [s->n_points].y = y1; s->n_points += 1; } static void add_bezier_arc (spline *s, double x0, double y0, double x1, double y1, double x2, double y2, double x3, double y3) { double midx01, midx12, midx23, midlsegx, midrsegx, cx, midy01, midy12, midy23, midlsegy, midrsegy, cy; mid_point (x0, y0, x1, y1, &midx01, &midy01); mid_point (x1, y1, x2, y2, &midx12, &midy12); mid_point (x2, y2, x3, y3, &midx23, &midy23); mid_point (midx01, midy01, midx12, midy12, &midlsegx, &midlsegy); mid_point (midx12, midy12, midx23, midy23, &midrsegx, &midrsegy); mid_point (midlsegx, midlsegy, midrsegx, midrsegy, &cx, &cy); if (can_approx_with_line (x0, y0, midlsegx, midlsegy, cx, cy)) add_line (s, x0, y0, cx, cy); else if ((midx01 != x1) || (midy01 != y1) || (midlsegx != x2) || (midlsegy != y2) || (cx != x3) || (cy != y3)) add_bezier_arc (s, x0, y0, midx01, midy01, midlsegx, midlsegy, cx, cy); if (can_approx_with_line (cx, cy, midx23, midy23, x3, y3)) add_line (s, cx, cy, x3, y3); else if ((cx != x0) || (cy != y0) || (midrsegx != x1) || (midrsegy != y1) || (midx23 != x2) || (midy23 != y2)) add_bezier_arc (s, cx, cy, midrsegx, midrsegy, midx23, midy23, x3, y3); } static void calc_section (spline *s, double cminus1x, double cminus1y, double cx, double cy, double cplus1x, double cplus1y, double cplus2x, double cplus2y) { double p0x, p1x, p2x, p3x, tempx, p0y, p1y, p2y, p3y, tempy; third_point (cx, cy, cplus1x, cplus1y, &p1x, &p1y); third_point (cplus1x, cplus1y, cx, cy, &p2x, &p2y); third_point (cx, cy, cminus1x, cminus1y, &tempx, &tempy); mid_point (tempx, tempy, p1x, p1y, &p0x, &p0y); third_point (cplus1x, cplus1y, cplus2x, cplus2y, &tempx, &tempy); mid_point (tempx, tempy, p2x, p2y, &p3x, &p3y); add_bezier_arc (s, p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y); } void compute_spline (spline *s) { int i; s->n_points = 0; if (s->n_controls < 3) return; calc_section (s, s->control_x [0], s->control_y [0], s->control_x [0], s->control_y [0], s->control_x [0], s->control_y [0], s->control_x [1], s->control_y [1]); calc_section (s, s->control_x [0], s->control_y [0], s->control_x [0], s->control_y [0], s->control_x [1], s->control_y [1], s->control_x [2], s->control_y [2]); for (i = 1; i < s->n_controls - 2; i++) calc_section (s, s->control_x [i - 1], s->control_y [i - 1], s->control_x [i], s->control_y [i], s->control_x [i + 1], s->control_y [i + 1], s->control_x [i + 2], s->control_y [i + 2]); calc_section (s, s->control_x [i - 1], s->control_y [i - 1], s->control_x [i], s->control_y [i], s->control_x [i + 1], s->control_y [i + 1], s->control_x [i + 1], s->control_y [i + 1]); calc_section (s, s->control_x [i], s->control_y [i], s->control_x [i + 1], s->control_y [i + 1], s->control_x [i + 1], s->control_y [i + 1], s->control_x [i + 1], s->control_y [i + 1]); } void compute_closed_spline (spline *s) { int i; s->n_points = 0; if (s->n_controls < 3) return; calc_section (s, s->control_x [s->n_controls - 1], s->control_y [s->n_controls - 1], s->control_x [0], s->control_y [0], s->control_x [1], s->control_y [1], s->control_x [2], s->control_y [2]); for (i = 1; i < s->n_controls - 2; i++) calc_section (s, s->control_x [i - 1], s->control_y [i - 1], s->control_x [i], s->control_y [i], s->control_x [i + 1], s->control_y [i + 1], s->control_x [i + 2], s->control_y [i + 2]); calc_section (s, s->control_x [i - 1], s->control_y [i - 1], s->control_x [i], s->control_y [i], s->control_x [i + 1], s->control_y [i + 1], s->control_x [0], s->control_y [0]); calc_section (s, s->control_x [i], s->control_y [i], s->control_x [i + 1], s->control_y [i + 1], s->control_x [0], s->control_y [0], s->control_x [1], s->control_y [1]); } void just_fill_spline (spline *s) { int i; while (s->allocated_points < s->n_controls + 1) grow_spline_points (s); for (i = 0; i < s->n_controls; i++) { s->points [i].x = s->control_x [i]; s->points [i].y = s->control_y [i]; } s->points [s->n_controls].x = s->control_x [0]; s->points [s->n_controls].y = s->control_y [0]; s->n_points = s->n_controls + 1; } void append_spline_points (spline *s1, spline *s2) { int i; while (s1->allocated_points < s1->n_points + s2->n_points) grow_spline_points (s1); for (i = s1->n_points; i < s1->n_points + s2->n_points; i++) { s1->points [i].x = s2->points [i - s1->n_points].x; s1->points [i].y = s2->points [i - s1->n_points].y; } s1->n_points = s1->n_points + s2->n_points; } void spline_bounding_box (spline *s, XRectangle *rectangle_out) { int min_x; int max_x; int min_y; int max_y; int i; if (s->n_points == 0) { rectangle_out->x = 0; rectangle_out->y = 0; rectangle_out->width = 0; rectangle_out->height = 0; } min_x = s->points [0].x; max_x = min_x; min_y = s->points [0].y; max_y = min_y; for (i = 1; i < s->n_points; i++) { if (s->points [i].x < min_x) min_x = s->points [i].x; if (s->points [i].x > max_x) max_x = s->points [i].x; if (s->points [i].y < min_y) min_y = s->points [i].y; if (s->points [i].y > max_y) max_y = s->points [i].y; } rectangle_out->x = min_x; rectangle_out->y = min_y; rectangle_out->width = max_x - min_x; rectangle_out->height = max_y - min_y; } void free_spline(spline * s) { free ((void *) s->control_x); free ((void *) s->control_y); free ((void *) s->points); free ((void *) s); } xscreensaver-5.34/utils/usleep.c000644 000767 000767 00000003263 10364344116 016470 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 1992, 1996, 1997, 2003 * Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifdef HAVE_CONFIG_H # include "config.h" #else /* !HAVE_CONFIG_H */ # ifndef NO_SELECT # define HAVE_SELECT # endif #endif /* !HAVE_CONFIG_H */ #ifdef __STDC__ # include #endif #ifdef HAVE_UNISTD_H # include #endif #if defined(VMS) # include # include # include #elif defined(HAVE_SELECT) # include /* for struct timeval */ #endif #ifdef __SCREENHACK_USLEEP_H__ ERROR, do not include that here #endif extern void screenhack_usleep (unsigned long usecs); /* suppress warning */ void screenhack_usleep (unsigned long usecs) { # if defined(VMS) float seconds = ((float) usecs)/1000000.0; unsigned long int statvms = lib$wait(&seconds); #elif defined(HAVE_SELECT) /* usleep() doesn't exist everywhere, and select() is faster anyway. */ struct timeval tv; tv.tv_sec = usecs / 1000000L; tv.tv_usec = usecs % 1000000L; (void) select (0, 0, 0, 0, &tv); #else /* !VMS && !HAVE_SELECT */ /* If you don't have select() or usleep(), I guess you lose... Maybe you have napms() instead? Let me know. */ usleep (usecs); #endif /* !VMS && !HAVE_SELECT */ } xscreensaver-5.34/utils/visual.c000644 000767 000767 00000041272 12474760714 016512 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 1993-2014 by Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ /* This file contains some code for intelligently picking the best visual (where "best" is biased in the direction of either: high color counts; or: having writable color cells...) */ #include "utils.h" #include "resources.h" /* for get_string_resource() */ #include "visual.h" #include #include extern char *progname; #ifndef isupper # define isupper(c) ((c) >= 'A' && (c) <= 'Z') #endif #ifndef _tolower # define _tolower(c) ((c) - 'A' + 'a') #endif static Visual *pick_best_visual (Screen *, Bool, Bool); static Visual *pick_mono_visual (Screen *); static Visual *pick_best_visual_of_class (Screen *, int); static Visual *pick_best_gl_visual (Screen *); #define DEFAULT_VISUAL -1 #define BEST_VISUAL -2 #define MONO_VISUAL -3 #define GRAY_VISUAL -4 #define COLOR_VISUAL -5 #define GL_VISUAL -6 #define SPECIFIC_VISUAL -7 Visual * get_visual (Screen *screen, const char *string, Bool prefer_writable_cells, Bool verbose_p) { char *v = (string ? strdup(string) : 0); char c, *tmp; int vclass; unsigned long id; Visual *result = 0; if (v) for (tmp = v; *tmp; tmp++) if (isupper (*tmp)) *tmp = _tolower (*tmp); if (!v || !*v) vclass = BEST_VISUAL; else if (!strcmp (v, "default")) vclass = DEFAULT_VISUAL; else if (!strcmp (v, "best")) vclass = BEST_VISUAL; else if (!strcmp (v, "mono")) vclass = MONO_VISUAL; else if (!strcmp (v, "monochrome")) vclass = MONO_VISUAL; else if (!strcmp (v, "gray")) vclass = GRAY_VISUAL; else if (!strcmp (v, "grey")) vclass = GRAY_VISUAL; else if (!strcmp (v, "color")) vclass = COLOR_VISUAL; else if (!strcmp (v, "gl")) vclass = GL_VISUAL; else if (!strcmp (v, "staticgray")) vclass = StaticGray; else if (!strcmp (v, "staticcolor")) vclass = StaticColor; else if (!strcmp (v, "truecolor")) vclass = TrueColor; else if (!strcmp (v, "grayscale")) vclass = GrayScale; else if (!strcmp (v, "greyscale")) vclass = GrayScale; else if (!strcmp (v, "pseudocolor")) vclass = PseudoColor; else if (!strcmp (v, "directcolor")) vclass = DirectColor; else if (1 == sscanf (v, " %lu %c", &id, &c)) vclass = SPECIFIC_VISUAL; else if (1 == sscanf (v, " 0x%lx %c", &id, &c)) vclass = SPECIFIC_VISUAL; else { fprintf (stderr, "%s: unrecognized visual \"%s\".\n", progname, v); vclass = DEFAULT_VISUAL; } if (vclass == DEFAULT_VISUAL) result = DefaultVisualOfScreen (screen); else if (vclass == BEST_VISUAL) result = pick_best_visual (screen, prefer_writable_cells, False); else if (vclass == MONO_VISUAL) { result = pick_mono_visual (screen); if (!result && verbose_p) fprintf (stderr, "%s: no monochrome visuals.\n", progname); } else if (vclass == GRAY_VISUAL) { if (prefer_writable_cells) result = pick_best_visual_of_class (screen, GrayScale); if (!result) result = pick_best_visual_of_class (screen, StaticGray); if (!result) result = pick_best_visual_of_class (screen, GrayScale); if (!result && verbose_p) fprintf (stderr, "%s: no GrayScale or StaticGray visuals.\n", progname); } else if (vclass == COLOR_VISUAL) { int class; /* First see if the default visual will do. */ result = DefaultVisualOfScreen (screen); class = visual_class(screen, result); if (class != TrueColor && class != PseudoColor && class != DirectColor && class != StaticColor) result = 0; if (result && visual_depth(screen, result) <= 1) result = 0; /* Else, find the best non-default color visual */ if (!result) result = pick_best_visual (screen, prefer_writable_cells, True); if (!result && verbose_p) fprintf (stderr, "%s: no color visuals.\n", progname); } else if (vclass == GL_VISUAL) { Visual *visual = pick_best_gl_visual (screen); if (visual) result = visual; else if (verbose_p) fprintf (stderr, "%s: no visual suitable for GL.\n", progname); } else if (vclass == SPECIFIC_VISUAL) { result = id_to_visual (screen, id); if (!result && verbose_p) fprintf (stderr, "%s: no visual with id 0x%x.\n", progname, (unsigned int) id); } else { Visual *visual = pick_best_visual_of_class (screen, vclass); if (visual) result = visual; else if (verbose_p) fprintf (stderr, "%s: no visual of class %s.\n", progname, v); } if (v) free (v); return result; } Visual * get_visual_resource (Screen *screen, char *name, char *class, Bool prefer_writable_cells) { char *string = get_string_resource (DisplayOfScreen (screen), name, class); Visual *v = get_visual (screen, string, prefer_writable_cells, True); if (string) free(string); if (v) return v; else return DefaultVisualOfScreen (screen); } static Visual * pick_best_visual (Screen *screen, Bool prefer_writable_cells, Bool color_only) { Visual *visual; if (!prefer_writable_cells) { /* If we don't prefer writable cells, then the "best" visual is the one on which we can allocate the largest range and number of colors. Therefore, a TrueColor visual which is at least 16 bits deep is best. (The assumption here being that a TrueColor of less than 16 bits is really just a PseudoColor visual with a pre-allocated color cube.) The next best thing is a PseudoColor visual of any type. After that come the non-colormappable visuals, and non-color visuals. */ if ((visual = pick_best_visual_of_class (screen, TrueColor)) && visual_depth (screen, visual) >= 16) return visual; } #define TRY_CLASS(CLASS) \ if ((visual = pick_best_visual_of_class (screen, CLASS)) && \ (!color_only || visual_depth(screen, visual) > 1)) \ return visual TRY_CLASS(PseudoColor); TRY_CLASS(TrueColor); TRY_CLASS(DirectColor); TRY_CLASS(StaticColor); if (!color_only) { TRY_CLASS(GrayScale); TRY_CLASS(StaticGray); } #undef TRY_CLASS visual = DefaultVisualOfScreen (screen); if (!color_only || visual_depth(screen, visual) > 1) return visual; else return 0; } static Visual * pick_mono_visual (Screen *screen) { Display *dpy = DisplayOfScreen (screen); XVisualInfo vi_in, *vi_out; int out_count; vi_in.depth = 1; vi_in.screen = screen_number (screen); vi_out = XGetVisualInfo (dpy, (VisualDepthMask | VisualScreenMask), &vi_in, &out_count); if (vi_out) { Visual *v = (out_count > 0 ? vi_out [0].visual : 0); if (v && vi_out[0].depth != 1) v = 0; XFree ((char *) vi_out); return v; } else return 0; } static Visual * pick_best_visual_of_class (Screen *screen, int visual_class) { /* The best visual of a class is the one which on which we can allocate the largest range and number of colors, which means the one with the greatest depth and number of cells. (But actually, for XDaliClock, all visuals of the same class are probably equivalent - either we have writable cells or we don't.) */ Display *dpy = DisplayOfScreen (screen); XVisualInfo vi_in, *vi_out; int out_count; vi_in.class = visual_class; vi_in.screen = screen_number (screen); vi_out = XGetVisualInfo (dpy, (VisualClassMask | VisualScreenMask), &vi_in, &out_count); if (vi_out) { /* choose the 'best' one, if multiple */ int i, best; Visual *visual; /* for (i = 0, best = 0; i < out_count; i++) */ for (i = out_count-1, best = i; i >= 0; i--) /* go backwards */ /* It's better if it's deeper, or if it's the same depth with more cells (does that ever happen? Well, it could...) */ if ((vi_out [i].depth > vi_out [best].depth) || ((vi_out [i].depth == vi_out [best].depth) && (vi_out [i].colormap_size > vi_out [best].colormap_size))) best = i; visual = (best < out_count ? vi_out [best].visual : 0); XFree ((char *) vi_out); return visual; } else return 0; } static Visual * pick_best_gl_visual (Screen *screen) { /* The best visual for GL is a TrueColor visual that is half as deep as the screen. If such a thing doesn't exist, then TrueColor is best. Failing that, the deepest available color visual is best. Compare this function to get_gl_visual() in visual-gl.c. This function tries to find the best GL visual using Xlib calls, whereas that function does the same thing using GLX calls. */ Display *dpy = DisplayOfScreen (screen); XVisualInfo vi_in, *vi_out; int out_count; Visual *result = 0; int ndepths = 0; int *depths = XListDepths (dpy, screen_number (screen), &ndepths); int screen_depth = (depths && ndepths) ? depths[ndepths - 1] : 0; XFree (depths); vi_in.class = TrueColor; vi_in.screen = screen_number (screen); vi_in.depth = screen_depth / 2; vi_out = XGetVisualInfo (dpy, (VisualClassMask | VisualScreenMask | VisualDepthMask), &vi_in, &out_count); if (out_count > 0) result = vi_out[0].visual; if (vi_out) XFree ((char *) vi_out); if (!result && screen_depth > 24) { /* If it's a 32-deep screen and we didn't find a depth-16 visual, see if there's a depth-12 visual. */ vi_in.class = TrueColor; vi_in.screen = screen_number (screen); vi_in.depth = 12; vi_out = XGetVisualInfo (dpy, (VisualClassMask | VisualScreenMask | VisualDepthMask), &vi_in, &out_count); if (out_count > 0) result = vi_out[0].visual; } if (!result) /* No half-depth TrueColor? Ok, try for any TrueColor (the deepest.) */ result = pick_best_visual_of_class (screen, TrueColor); if (!result) /* No TrueColor? Ok, try for anything. */ result = pick_best_visual (screen, False, False); return result; } Visual * id_to_visual (Screen *screen, int id) { Display *dpy = DisplayOfScreen (screen); XVisualInfo vi_in, *vi_out; int out_count; vi_in.screen = screen_number (screen); vi_in.visualid = id; vi_out = XGetVisualInfo (dpy, (VisualScreenMask | VisualIDMask), &vi_in, &out_count); if (vi_out) { Visual *v = vi_out[0].visual; XFree ((char *) vi_out); return v; } return 0; } int visual_depth (Screen *screen, Visual *visual) { Display *dpy = DisplayOfScreen (screen); XVisualInfo vi_in, *vi_out; int out_count, d; vi_in.screen = screen_number (screen); vi_in.visualid = XVisualIDFromVisual (visual); vi_out = XGetVisualInfo (dpy, VisualScreenMask|VisualIDMask, &vi_in, &out_count); if (! vi_out) abort (); d = vi_out [0].depth; XFree ((char *) vi_out); return d; } #if 0 /* You very probably don't want to be using this. Pixmap depth doesn't refer to the depths of pixmaps, but rather, to the depth of protocol-level on-the-wire pixmap data, that is, XImages. To get this info, you should be looking at XImage->bits_per_pixel instead. (And allocating the data for your XImage structures by multiplying ximage->bytes_per_line by ximage->height.) */ int visual_pixmap_depth (Screen *screen, Visual *visual) { Display *dpy = DisplayOfScreen (screen); int vdepth = visual_depth (screen, visual); int pdepth = vdepth; int i, pfvc = 0; XPixmapFormatValues *pfv = XListPixmapFormats (dpy, &pfvc); /* Return the first matching depth in the pixmap formats. If there are no matching pixmap formats (which shouldn't be able to happen at all) then return the visual depth instead. */ for (i = 0; i < pfvc; i++) if (pfv[i].depth == vdepth) { pdepth = pfv[i].bits_per_pixel; break; } if (pfv) XFree (pfv); return pdepth; } #endif /* 0 */ int visual_class (Screen *screen, Visual *visual) { Display *dpy = DisplayOfScreen (screen); XVisualInfo vi_in, *vi_out; int out_count, c; vi_in.screen = screen_number (screen); vi_in.visualid = XVisualIDFromVisual (visual); vi_out = XGetVisualInfo (dpy, VisualScreenMask|VisualIDMask, &vi_in, &out_count); if (! vi_out) abort (); c = vi_out [0].class; XFree ((char *) vi_out); return c; } Bool has_writable_cells (Screen *screen, Visual *visual) { switch (visual_class (screen, visual)) { case GrayScale: /* Mappable grays. */ case PseudoColor: /* Mappable colors. */ case DirectColor: /* Like TrueColor, but with three colormaps: one each for red, green, and blue. */ return True; case StaticGray: /* Fixed grays. */ case TrueColor: /* Fixed colors. */ case StaticColor: /* Like PseudoColor with an unmodifiable colormap. */ return False; default: abort(); return False; } } void describe_visual (FILE *f, Screen *screen, Visual *visual, Bool private_cmap_p) { char n[10]; Display *dpy = DisplayOfScreen (screen); XVisualInfo vi_in, *vi_out; int out_count; vi_in.screen = screen_number (screen); vi_in.visualid = XVisualIDFromVisual (visual); vi_out = XGetVisualInfo (dpy, (VisualScreenMask | VisualIDMask), &vi_in, &out_count); if (! vi_out) abort (); if (private_cmap_p) sprintf(n, "%3d", vi_out->colormap_size); else strcpy(n, "default"); fprintf (f, "0x%02x (%s depth: %2d, cmap: %s)\n", (unsigned int) vi_out->visualid, (vi_out->class == StaticGray ? "StaticGray, " : vi_out->class == StaticColor ? "StaticColor," : vi_out->class == TrueColor ? "TrueColor, " : vi_out->class == GrayScale ? "GrayScale, " : vi_out->class == PseudoColor ? "PseudoColor," : vi_out->class == DirectColor ? "DirectColor," : "UNKNOWN: "), vi_out->depth, n); XFree ((char *) vi_out); } int screen_number (Screen *screen) { Display *dpy = DisplayOfScreen (screen); int i; for (i = 0; i < ScreenCount (dpy); i++) if (ScreenOfDisplay (dpy, i) == screen) return i; abort (); return 0; } int visual_cells (Screen *screen, Visual *visual) { Display *dpy = DisplayOfScreen (screen); XVisualInfo vi_in, *vi_out; int out_count, c; vi_in.screen = screen_number (screen); vi_in.visualid = XVisualIDFromVisual (visual); vi_out = XGetVisualInfo (dpy, VisualScreenMask|VisualIDMask, &vi_in, &out_count); if (! vi_out) abort (); c = vi_out [0].colormap_size; XFree ((char *) vi_out); return c; } Visual * find_similar_visual(Screen *screen, Visual *old_visual) { Display *dpy = DisplayOfScreen (screen); XVisualInfo vi_in, *vi_out; Visual *result = 0; int out_count; vi_in.screen = screen_number (screen); vi_in.class = visual_class (screen, old_visual); vi_in.depth = visual_depth (screen, old_visual); /* Look for a visual of the same class and depth. */ vi_out = XGetVisualInfo (dpy, (VisualScreenMask | VisualClassMask | VisualDepthMask), &vi_in, &out_count); if (vi_out && out_count > 0) result = vi_out[0].visual; if (vi_out) XFree (vi_out); vi_out = 0; /* Failing that, look for a visual of the same class. */ if (!result) { vi_out = XGetVisualInfo (dpy, (VisualScreenMask | VisualClassMask), &vi_in, &out_count); if (vi_out && out_count > 0) result = vi_out[0].visual; if (vi_out) XFree (vi_out); vi_out = 0; } /* Failing that, return the default visual. */ if (!result) result = DefaultVisualOfScreen (screen); return result; } int get_bits_per_pixel(Display *dpy, int depth) { unsigned i = 0; int count, result; XPixmapFormatValues *formats = XListPixmapFormats(dpy, &count); /* XCreateImage calls _XGetBitsPerPixel to figure this out, but that function is private to Xlib. For some reason, _XGetBitsPerPixel tries a hard-coded list of depths if it doesn't find a matching pixmap format, but I (Dave Odell) couldn't find any justification for this in the X11 spec. And the XFree86 CVS repository doesn't quite go back far enough to shed any light on what the deal is with that. http://cvsweb.xfree86.org/cvsweb/xc/lib/X11/ImUtil.c The hard-coded list apparently was added between X11R5 and X11R6. See . */ if (!formats) return 0; for (;;) { if (i == (unsigned)count) { result = 0; break; } if (formats[i].depth == depth) { result = formats[i].bits_per_pixel; break; } ++i; } XFree (formats); return result; } xscreensaver-5.34/utils/visual-gl.c000644 000767 000767 00000024615 11512766644 017114 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 1999-2011 by Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ /* This file contains code for picking the best visual for GL programs by actually asking the GL library to figure it out for us. The code in visual.c might do a good job of this on most systems, but not on most high end 3D cards (e.g., Silicon Graphics or nVidia.) There exists information about visuals which is available to GL, but which is not available via Xlib calls. So the only way to know which visual to use (other than impirically) is to actually call glXChooseVisual(). */ #include "utils.h" #include "visual.h" #include "resources.h" #ifdef HAVE_GL # include # include #endif /* HAVE_GL */ extern char *progname; Visual * get_gl_visual (Screen *screen) { #ifdef HAVE_GL Display *dpy = DisplayOfScreen (screen); int screen_num = screen_number (screen); # define R GLX_RED_SIZE # define G GLX_GREEN_SIZE # define B GLX_BLUE_SIZE # define A GLX_ALPHA_SIZE # define D GLX_DEPTH_SIZE # define I GLX_BUFFER_SIZE # define DB GLX_DOUBLEBUFFER # define ST GLX_STENCIL_SIZE # if defined(GL_SAMPLE_BUFFERS) # define SB GL_SAMPLE_BUFFERS # define SM GL_SAMPLES # elif defined(GLX_SAMPLE_BUFFERS) # define SB GLX_SAMPLE_BUFFERS # define SM GLX_SAMPLES # elif defined(GLX_SAMPLE_BUFFERS_ARB) # define SB GLX_SAMPLE_BUFFERS_ARB # define SM GLX_SAMPLES_ARB # elif defined(GLX_SAMPLE_BUFFERS_SGIS) # define SB GLX_SAMPLE_BUFFERS_SGIS # define SM GLX_SAMPLES_SGIS # endif int attrs[][40] = { # ifdef SB /* rgba double stencil multisample */ { GLX_RGBA, R,8, G,8, B,8, A,8, D,8, DB, ST,1, SB,1, SM,8, 0 }, { GLX_RGBA, R,8, G,8, B,8, A,8, D,8, DB, ST,1, SB,1, SM,6, 0 }, { GLX_RGBA, R,8, G,8, B,8, A,8, D,8, DB, ST,1, SB,1, SM,4, 0 }, { GLX_RGBA, R,8, G,8, B,8, A,8, D,8, DB, ST,1, SB,1, SM,2, 0 }, # define SB_COUNT 4 /* #### Kludgey count of preceeding lines! */ # endif { GLX_RGBA, R,8, G,8, B,8, A,8, D,8, DB, ST,1, 0 }, /* rgba double stencil */ { GLX_RGBA, R,8, G,8, B,8, D,8, DB, ST,1, 0 }, /* rgb double stencil */ { GLX_RGBA, R,4, G,4, B,4, D,4, DB, ST,1, 0 }, { GLX_RGBA, R,2, G,2, B,2, D,2, DB, ST,1, 0 }, { GLX_RGBA, R,8, G,8, B,8, A,8, D,8, DB, 0 }, /* rgba double */ { GLX_RGBA, R,8, G,8, B,8, D,8, DB, 0 }, /* rgb double */ { GLX_RGBA, R,4, G,4, B,4, D,4, DB, 0 }, { GLX_RGBA, R,2, G,2, B,2, D,2, DB, 0 }, { GLX_RGBA, R,8, G,8, B,8, A,8, D,8, 0 }, /* rgba single */ { GLX_RGBA, R,8, G,8, B,8, D,8, 0 }, /* rgb single */ { GLX_RGBA, R,4, G,4, B,4, D,4, 0 }, { GLX_RGBA, R,2, G,2, B,2, D,2, 0 }, { I, 8, D,8, DB, 0 }, /* cmap double */ { I, 4, D,4, DB, 0 }, { I, 8, D,8, 0 }, /* cmap single */ { I, 4, D,4, 0 }, { GLX_RGBA, R,1, G,1, B,1, D,1, 0 } /* monochrome */ }; int i = 0; # ifdef SB if (! get_boolean_resource (dpy, "multiSample", "MultiSample")) i = SB_COUNT; /* skip over the multibuffer entries in 'attrs' */ # endif /* SB */ for (; i < sizeof(attrs)/sizeof(*attrs); i++) { XVisualInfo *vi = glXChooseVisual (dpy, screen_num, attrs[i]); if (vi) { Visual *v = vi->visual; XFree (vi); /* describe_gl_visual (stderr, screen, v, False); */ return v; } } #endif /* !HAVE_GL */ return 0; } void describe_gl_visual (FILE *f, Screen *screen, Visual *visual, Bool private_cmap_p) { describe_visual (f, screen, visual, private_cmap_p); #ifdef HAVE_GL { int status; int value = False; Display *dpy = DisplayOfScreen (screen); XVisualInfo vi_in, *vi_out; int out_count; vi_in.screen = screen_number (screen); vi_in.visualid = XVisualIDFromVisual (visual); vi_out = XGetVisualInfo (dpy, (VisualScreenMask | VisualIDMask), &vi_in, &out_count); if (! vi_out) abort (); status = glXGetConfig (dpy, vi_out, GLX_USE_GL, &value); if (status == GLX_NO_EXTENSION) /* dpy does not support the GLX extension. */ return; if (status == GLX_BAD_VISUAL || value == False) /* this visual does not support GLX. */ return; if (!glXGetConfig (dpy, vi_out, GLX_LEVEL, &value) && value != 0) printf (" GLX level: %d\n", value); if (!glXGetConfig (dpy, vi_out, GLX_RGBA, &value) && value) { int r=0, g=0, b=0, a=0; glXGetConfig (dpy, vi_out, GLX_RED_SIZE, &r); glXGetConfig (dpy, vi_out, GLX_GREEN_SIZE, &g); glXGetConfig (dpy, vi_out, GLX_BLUE_SIZE, &b); glXGetConfig (dpy, vi_out, GLX_ALPHA_SIZE, &a); printf (" GLX type: RGBA (%2d, %2d, %2d, %2d)\n", r, g, b, a); r=0, g=0, b=0, a=0; glXGetConfig (dpy, vi_out, GLX_ACCUM_RED_SIZE, &r); glXGetConfig (dpy, vi_out, GLX_ACCUM_GREEN_SIZE, &g); glXGetConfig (dpy, vi_out, GLX_ACCUM_BLUE_SIZE, &b); glXGetConfig (dpy, vi_out, GLX_ACCUM_ALPHA_SIZE, &a); printf (" GLX accum: RGBA (%2d, %2d, %2d, %2d)\n", r, g, b, a); } else { value = 0; glXGetConfig (dpy, vi_out, GLX_BUFFER_SIZE, &value); printf (" GLX type: indexed (%d)\n", value); } # ifndef GLX_NONE_EXT /* Hooray for gratuitious name changes. */ # define GLX_NONE_EXT GLX_NONE # define GLX_TRANSPARENT_TYPE_EXT GLX_TRANSPARENT_TYPE # define GLX_TRANSPARENT_INDEX_EXT GLX_TRANSPARENT_INDEX # define GLX_TRANSPARENT_INDEX_VALUE_EXT GLX_TRANSPARENT_INDEX_VALUE # define GLX_TRANSPARENT_RGB_EXT GLX_TRANSPARENT_RGB # define GLX_TRANSPARENT_RED_VALUE_EXT GLX_TRANSPARENT_RED_VALUE # define GLX_TRANSPARENT_GREEN_VALUE_EXT GLX_TRANSPARENT_GREEN_VALUE # define GLX_TRANSPARENT_BLUE_VALUE_EXT GLX_TRANSPARENT_BLUE_VALUE # define GLX_TRANSPARENT_ALPHA_VALUE_EXT GLX_TRANSPARENT_ALPHA_VALUE # endif # ifdef GLX_VISUAL_CAVEAT_EXT if (!glXGetConfig (dpy, vi_out, GLX_VISUAL_CAVEAT_EXT, &value) && value != GLX_NONE_EXT) # ifdef GLX_NON_CONFORMANT_EXT printf (" GLX rating: %s\n", (value == GLX_NONE_EXT ? "none" : value == GLX_SLOW_VISUAL_EXT ? "slow" : value == GLX_NON_CONFORMANT_EXT ? "non-conformant" : "???")); # else printf (" GLX rating: %s\n", (value == GLX_NONE_EXT ? "none" : value == GLX_SLOW_VISUAL_EXT ? "slow" : "???")); # endif /* GLX_NON_CONFORMANT_EXT */ # endif /* GLX_VISUAL_CAVEAT_EXT */ if (!glXGetConfig (dpy, vi_out, GLX_DOUBLEBUFFER, &value)) printf (" GLX double-buffer: %s\n", (value ? "yes" : "no")); if (!glXGetConfig (dpy, vi_out, GLX_STEREO, &value) && value) printf (" GLX stereo: %s\n", (value ? "yes" : "no")); if (!glXGetConfig (dpy, vi_out, GLX_AUX_BUFFERS, &value) && value != 0) printf (" GLX aux buffers: %d\n", value); if (!glXGetConfig (dpy, vi_out, GLX_DEPTH_SIZE, &value)) printf (" GLX depth size: %d\n", value); if (!glXGetConfig (dpy, vi_out, GLX_STENCIL_SIZE, &value) && value != 0) printf (" GLX stencil size: %d\n", value); # ifdef SB /* GL_SAMPLE_BUFFERS || GLX_SAMPLE_BUFFERS_* */ if (!glXGetConfig (dpy, vi_out, SB, &value) && value != 0) { int bufs = value; if (!glXGetConfig (dpy, vi_out, SM, &value)) printf (" GLX multisample: %d, %d\n", bufs, value); } # endif /* GL_SAMPLE_BUFFERS || GLX_SAMPLE_BUFFERS_* */ if (!glXGetConfig (dpy, vi_out, GLX_TRANSPARENT_TYPE_EXT, &value) && value != GLX_NONE_EXT) { if (value == GLX_NONE_EXT) printf (" GLX transparency: none\n"); else if (value == GLX_TRANSPARENT_INDEX_EXT) { if (!glXGetConfig (dpy, vi_out, GLX_TRANSPARENT_INDEX_VALUE_EXT, &value)) printf (" GLX transparency: indexed (%d)\n", value); } else if (value == GLX_TRANSPARENT_RGB_EXT) { int r=0, g=0, b=0, a=0; glXGetConfig (dpy, vi_out, GLX_TRANSPARENT_RED_VALUE_EXT, &r); glXGetConfig (dpy, vi_out, GLX_TRANSPARENT_GREEN_VALUE_EXT, &g); glXGetConfig (dpy, vi_out, GLX_TRANSPARENT_BLUE_VALUE_EXT, &b); glXGetConfig (dpy, vi_out, GLX_TRANSPARENT_ALPHA_VALUE_EXT, &a); printf (" GLX transparency: RGBA (%2d, %2d, %2d, %2d)\n", r, g, b, a); } } } #endif /* HAVE_GL */ } Bool validate_gl_visual (FILE *out, Screen *screen, const char *window_desc, Visual *visual) { #ifdef HAVE_GL int status; int value = False; Display *dpy = DisplayOfScreen (screen); XVisualInfo vi_in, *vi_out; int out_count; unsigned int id; vi_in.screen = screen_number (screen); vi_in.visualid = XVisualIDFromVisual (visual); vi_out = XGetVisualInfo (dpy, (VisualScreenMask | VisualIDMask), &vi_in, &out_count); if (! vi_out) abort (); status = glXGetConfig (dpy, vi_out, GLX_USE_GL, &value); id = (unsigned int) vi_out->visualid; XFree ((char *) vi_out); if (status == GLX_NO_EXTENSION) { fprintf (out, "%s: display \"%s\" does not support the GLX extension.\n", progname, DisplayString (dpy)); return False; } else if (status == GLX_BAD_VISUAL || value == False) { fprintf (out, "%s: %s's visual 0x%x does not support the GLX extension.\n", progname, window_desc, id); return False; } else { return True; } #else /* !HAVE_GL */ fprintf (out, "%s: GL support was not compiled in to this program.\n", progname); return False; #endif /* !HAVE_GL */ } xscreensaver-5.34/utils/xmu.c000644 000767 000767 00000014127 10107254766 016013 0ustar00jwzjwz000000 000000 /* This file contains compatibility routines for systems without Xmu. * You would be better served by installing Xmu on your machine or * yelling at your vendor to ship it. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifndef HAVE_XMU /* * Copyright 1989 Massachusetts Institute of Technology * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of M.I.T. not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. M.I.T. makes no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL M.I.T. * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "xmu.h" #ifndef NEED_EVENTS # define NEED_EVENTS /* to make Xproto.h define xEvent */ #endif #ifndef VMS # include /* for xEvent (used by Xlibint.h) */ # include /* for _XExtension */ #else /* VMS */ # include #endif /* VMS */ #include /* for XtSpecificationRelease */ /* * XmuPrintDefaultErrorMessage - print a nice error that looks like the usual * message. Returns 1 if the caller should consider exitting else 0. */ int XmuPrintDefaultErrorMessage (Display *dpy, XErrorEvent *event, FILE *fp) { char buffer[BUFSIZ]; char mesg[BUFSIZ]; char number[32]; char *mtype = "XlibMessage"; _XExtension *ext = (_XExtension *)NULL; XGetErrorText(dpy, event->error_code, buffer, BUFSIZ); XGetErrorDatabaseText(dpy, mtype, "XError", "X Error", mesg, BUFSIZ); (void) fprintf(fp, "%s: %s\n ", mesg, buffer); XGetErrorDatabaseText(dpy, mtype, "MajorCode", "Request Major code %d", mesg, BUFSIZ); (void) fprintf(fp, mesg, event->request_code); if (event->request_code < 128) { sprintf(number, "%d", event->request_code); XGetErrorDatabaseText(dpy, "XRequest", number, "", buffer, BUFSIZ); } else { /* XXX this is non-portable */ for (ext = dpy->ext_procs; ext && (ext->codes.major_opcode != event->request_code); ext = ext->next) ; if (ext) strcpy(buffer, ext->name); else buffer[0] = '\0'; } (void) fprintf(fp, " (%s)", buffer); fputs("\n ", fp); #if (XtSpecificationRelease >= 5) if (event->request_code >= 128) { XGetErrorDatabaseText(dpy, mtype, "MinorCode", "Request Minor code %d", mesg, BUFSIZ); (void) fprintf(fp, mesg, event->minor_code); if (ext) { sprintf(mesg, "%s.%d", ext->name, event->minor_code); XGetErrorDatabaseText(dpy, "XRequest", mesg, "", buffer, BUFSIZ); (void) fprintf(fp, " (%s)", buffer); } fputs("\n ", fp); } if (event->error_code >= 128) { /* let extensions try to print the values */ /* XXX this is non-portable code */ for (ext = dpy->ext_procs; ext; ext = ext->next) { if (ext->error_values) (*ext->error_values)(dpy, event, fp); } /* the rest is a fallback, providing a simple default */ /* kludge, try to find the extension that caused it */ buffer[0] = '\0'; for (ext = dpy->ext_procs; ext; ext = ext->next) { if (ext->error_string) (*ext->error_string)(dpy, event->error_code, &ext->codes, buffer, BUFSIZ); if (buffer[0]) break; } if (buffer[0]) sprintf(buffer, "%s.%d", ext->name, event->error_code - ext->codes.first_error); else strcpy(buffer, "Value"); XGetErrorDatabaseText(dpy, mtype, buffer, "", mesg, BUFSIZ); if (*mesg) { (void) fprintf(fp, mesg, event->resourceid); fputs("\n ", fp); } } else if ((event->error_code == BadWindow) || (event->error_code == BadPixmap) || (event->error_code == BadCursor) || (event->error_code == BadFont) || (event->error_code == BadDrawable) || (event->error_code == BadColor) || (event->error_code == BadGC) || (event->error_code == BadIDChoice) || (event->error_code == BadValue) || (event->error_code == BadAtom)) { if (event->error_code == BadValue) XGetErrorDatabaseText(dpy, mtype, "Value", "Value 0x%x", mesg, BUFSIZ); else if (event->error_code == BadAtom) XGetErrorDatabaseText(dpy, mtype, "AtomID", "AtomID 0x%x", mesg, BUFSIZ); else XGetErrorDatabaseText(dpy, mtype, "ResourceID", "ResourceID 0x%x", mesg, BUFSIZ); (void) fprintf(fp, mesg, event->resourceid); fputs("\n ", fp); } #elif (XtSpecificationRelease == 4) XGetErrorDatabaseText(dpy, mtype, "MinorCode", "Request Minor code %d", mesg, BUFSIZ); (void) fprintf(fp, mesg, event->minor_code); fputs("\n ", fp); if (ext) { sprintf(mesg, "%s.%d", ext->name, event->minor_code); XGetErrorDatabaseText(dpy, "XRequest", mesg, "", buffer, BUFSIZ); (void) fprintf(fp, " (%s)", buffer); } XGetErrorDatabaseText(dpy, mtype, "ResourceID", "ResourceID 0x%x", mesg, BUFSIZ); (void) fprintf(fp, mesg, event->resourceid); fputs("\n ", fp); #else ERROR! Unsupported release of X11 #endif XGetErrorDatabaseText(dpy, mtype, "ErrorSerial", "Error Serial #%d", mesg, BUFSIZ); (void) fprintf(fp, mesg, event->serial); fputs("\n ", fp); XGetErrorDatabaseText(dpy, mtype, "CurrentSerial", "Current Serial #%d", mesg, BUFSIZ); (void) fprintf(fp, mesg, NextRequest(dpy)-1); fputs("\n", fp); if (event->error_code == BadImplementation) return 0; return 1; } #else /* HAVE_XMU */ /* Shut up the stupid "gcc -pedantic" warning */ int _I_dont_care_that_ISO_C_forbids_an_empty_source_file_ = 1; #endif /* HAVE_XMU */ xscreensaver-5.34/utils/logo.c000644 000767 000767 00000004637 10373253065 016143 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 2001-2006 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ /* XScreenSaver Logo designed by Angela Goodman */ /* If you are looking in here because you're trying to figure out how to change the logo that xscreensaver displays on the splash screen and password dialog, please don't. The logo is xscreensaver's identity. You wouldn't alter the name or copyright notice on a program that you didn't write; please don't alter its logo either. */ #include "utils.h" #include "resources.h" #include "visual.h" #include "minixpm.h" #include #include "images/logo-50.xpm" #include "images/logo-180.xpm" /* Returns a pixmap of the xscreensaver logo. */ Pixmap xscreensaver_logo (Screen *screen, Visual *visual, Drawable drawable, Colormap cmap, unsigned long background_color, unsigned long **pixels_ret, int *npixels_ret, Pixmap *mask_ret, Bool big_p) { Display *dpy = DisplayOfScreen (screen); int depth = visual_depth (screen, visual); int iw, ih; XImage *image; Pixmap p = 0; unsigned char *mask = 0; image = minixpm_to_ximage (dpy, visual, cmap, depth, background_color, (big_p ? logo_180_xpm : logo_50_xpm), &iw, &ih, pixels_ret, npixels_ret, (mask_ret ? &mask : 0)); if (image) { XGCValues gcv; GC gc; p = XCreatePixmap (dpy, drawable, iw, ih, depth); gc = XCreateGC (dpy, p, 0, &gcv); XPutImage (dpy, p, gc, image, 0, 0, 0, 0, iw, ih); free (image->data); image->data = 0; XDestroyImage (image); XFreeGC (dpy, gc); if (mask_ret && mask) { *mask_ret = (Pixmap) XCreatePixmapFromBitmapData (dpy, drawable, (char *) mask, iw, ih, 1L, 0L, 1); free (mask); } } return p; } xscreensaver-5.34/utils/yarandom.c000664 000767 000767 00000011337 12327637675 017030 0ustar00jwzjwz000000 000000 /* yarandom.c -- Yet Another Random Number Generator. * Copyright (c) 1997-2014 by Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ /* The unportable mess that is rand(), random(), drand48() and friends led me to ask Phil Karlton what the Right Thing to Do was. He responded with this. It is non-cryptographically secure, reasonably random (more so than anything that is in any C library), and very fast. I don't understand how it works at all, but he says "look at Knuth, Vol. 2 (original edition), page 26, Algorithm A. In this case n=55, k=24 and m=2^32." So there you have it. --------------------------- Note: xlockmore 4.03a10 uses this very simple RNG: if ((seed = seed % 44488 * 48271 - seed / 44488 * 3399) < 0) seed += 2147483647; return seed-1; of which it says ``Dr. Park's algorithm published in the Oct. '88 ACM "Random Number Generators: Good Ones Are Hard To Find" His version available at ftp://cs.wm.edu/pub/rngs.tar Present form by many authors.'' Karlton says: ``the usual problem with that kind of RNG turns out to be unexepected short cycles for some word lengths.'' Karlton's RNG is faster, since it does three adds and two stores, while the xlockmore RNG does two multiplies, two divides, three adds, and one store. Compiler optimizations make a big difference here: gcc -O: difference is 1.2x. gcc -O2: difference is 1.4x. gcc -O3: difference is 1.5x. SGI cc -O: difference is 2.4x. SGI cc -O2: difference is 2.4x. SGI cc -O3: difference is 5.1x. Irix 6.2; Indy r5k; SGI cc version 6; gcc version 2.7.2.1. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifdef HAVE_UNISTD_H # include /* for getpid() */ #endif #include /* for gettimeofday() */ #include "yarandom.h" # undef ya_rand_init /* The following 'random' numbers are taken from CRC, 18th Edition, page 622. Each array element was taken from the corresponding line in the table, except that a[0] was from line 100. 8s and 9s in the table were simply skipped. The high order digit was taken mod 4. */ #define VectorSize 55 static unsigned int a[VectorSize] = { 035340171546, 010401501101, 022364657325, 024130436022, 002167303062, /* 5 */ 037570375137, 037210607110, 016272055420, 023011770546, 017143426366, /* 10 */ 014753657433, 021657231332, 023553406142, 004236526362, 010365611275, /* 14 */ 007117336710, 011051276551, 002362132524, 001011540233, 012162531646, /* 20 */ 007056762337, 006631245521, 014164542224, 032633236305, 023342700176, /* 25 */ 002433062234, 015257225043, 026762051606, 000742573230, 005366042132, /* 30 */ 012126416411, 000520471171, 000725646277, 020116577576, 025765742604, /* 35 */ 007633473735, 015674255275, 017555634041, 006503154145, 021576344247, /* 40 */ 014577627653, 002707523333, 034146376720, 030060227734, 013765414060, /* 45 */ 036072251540, 007255221037, 024364674123, 006200353166, 010126373326, /* 50 */ 015664104320, 016401041535, 016215305520, 033115351014, 017411670323 /* 55 */ }; static int i1, i2; unsigned int ya_random (void) { register int ret = a[i1] + a[i2]; a[i1] = ret; if (++i1 >= VectorSize) i1 = 0; if (++i2 >= VectorSize) i2 = 0; return ret; } void ya_rand_init(unsigned int seed) { int i; if (seed == 0) { struct timeval tp; #ifdef GETTIMEOFDAY_TWO_ARGS struct timezone tzp; gettimeofday(&tp, &tzp); #else gettimeofday(&tp); #endif /* Since the multiplications will have a larger effect on the upper bits than the lower bits, after every addition in the seed, perform a bitwise rotate by an odd number, resulting in a better distribution of randomness throughout the bits. -- Brian Carlson, 2010. */ #define ROT(X,N) (((X)<<(N)) | ((X)>>((sizeof(unsigned int)*8)-(N)))) seed = (999U * (unsigned int) tp.tv_sec); seed = ROT (seed, 11); seed += (1001 * tp.tv_usec); seed = ROT (seed, 7); seed += (1003 * getpid()); seed = ROT (seed, 13); } a[0] += seed; for (i = 1; i < VectorSize; i++) { seed = seed*999; seed = ROT (seed, 9); seed += a[i-1]*1001; seed = ROT (seed, 15); a[i] += seed; } i1 = a[0] % VectorSize; i2 = (i1 + 24) % VectorSize; } xscreensaver-5.34/utils/erase.c000644 000767 000767 00000045102 11376405144 016273 0ustar00jwzjwz000000 000000 /* erase.c: Erase the screen in various more or less interesting ways. * Copyright (c) 1997-2008 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. * * Portions (c) 1997 by Johannes Keukelaar : * Permission to use in any way granted. Provided "as is" without expressed * or implied warranty. NO WARRANTY, NO EXPRESSION OF SUITABILITY FOR ANY * PURPOSE. (I.e.: Use in any way, but at your own risk!) */ #include "utils.h" #include "yarandom.h" #include "usleep.h" #include "resources.h" #include "erase.h" #include /* for gettimeofday() */ extern char *progname; #undef countof #define countof(x) (sizeof(x)/sizeof(*(x))) typedef void (*Eraser) (eraser_state *); struct eraser_state { Display *dpy; Window window; GC fg_gc, bg_gc; int width, height; Eraser fn; double start_time, stop_time; double ratio, prev_ratio; /* data for random_lines, venetian, random_squares */ Bool horiz_p; Bool flip_p; int nlines, *lines; /* data for triple_wipe, quad_wipe */ Bool flip_x, flip_y; /* data for circle_wipe, three_circle_wipe */ int start; /* data for random_squares */ int cols; }; static double double_time (void) { struct timeval now; # ifdef GETTIMEOFDAY_TWO_ARGS struct timezone tzp; gettimeofday(&now, &tzp); # else gettimeofday(&now); # endif return (now.tv_sec + ((double) now.tv_usec * 0.000001)); } static void random_lines (eraser_state *st) { int i; if (! st->lines) /* first time */ { st->horiz_p = (random() & 1); st->nlines = (st->horiz_p ? st->height : st->width); st->lines = (int *) calloc (st->nlines, sizeof(*st->lines)); for (i = 0; i < st->nlines; i++) /* every line */ st->lines[i] = i; for (i = 0; i < st->nlines; i++) /* shuffle */ { int t, r; t = st->lines[i]; r = random() % st->nlines; st->lines[i] = st->lines[r]; st->lines[r] = t; } } for (i = st->nlines * st->prev_ratio; i < st->nlines * st->ratio; i++) { if (st->horiz_p) XDrawLine (st->dpy, st->window, st->bg_gc, 0, st->lines[i], st->width, st->lines[i]); else XDrawLine (st->dpy, st->window, st->bg_gc, st->lines[i], 0, st->lines[i], st->height); } if (st->ratio >= 1.0) { free (st->lines); st->lines = 0; } } static void venetian (eraser_state *st) { int i; if (st->ratio == 0.0) { int j = 0; st->horiz_p = (random() & 1); st->flip_p = (random() & 1); st->nlines = (st->horiz_p ? st->height : st->width); st->lines = (int *) calloc (st->nlines, sizeof(*st->lines)); for (i = 0; i < st->nlines * 2; i++) { int line = ((i / 16) * 16) - ((i % 16) * 15); if (line >= 0 && line < st->nlines) st->lines[j++] = (st->flip_p ? st->nlines - line : line); } } for (i = st->nlines * st->prev_ratio; i < st->nlines * st->ratio; i++) { if (st->horiz_p) XDrawLine (st->dpy, st->window, st->bg_gc, 0, st->lines[i], st->width, st->lines[i]); else XDrawLine (st->dpy, st->window, st->bg_gc, st->lines[i], 0, st->lines[i], st->height); } if (st->ratio >= 1.0) { free (st->lines); st->lines = 0; } } static void triple_wipe (eraser_state *st) { int i; if (st->ratio == 0.0) { st->flip_x = random() & 1; st->flip_y = random() & 1; st->nlines = st->width + (st->height / 2); st->lines = (int *) calloc (st->nlines, sizeof(*st->lines)); for (i = 0; i < st->width / 2; i++) st->lines[i] = i * 2 + st->height; for (i = 0; i < st->height / 2; i++) st->lines[i + st->width / 2] = i*2; for (i = 0; i < st->width / 2; i++) st->lines[i + st->width / 2 + st->height / 2] = st->width - i * 2 - (st->width % 2 ? 0 : 1) + st->height; } for (i = st->nlines * st->prev_ratio; i < st->nlines * st->ratio; i++) { int x, y, x2, y2; if (st->lines[i] < st->height) x = 0, y = st->lines[i], x2 = st->width, y2 = y; else x = st->lines[i]-st->height, y = 0, x2 = x, y2 = st->height; if (st->flip_x) x = st->width - x, x2 = st->width - x2; if (st->flip_y) y = st->height - y, y2 = st->height - y2; XDrawLine (st->dpy, st->window, st->bg_gc, x, y, x2, y2); } if (st->ratio >= 1.0) { free (st->lines); st->lines = 0; } } static void quad_wipe (eraser_state *st) { int i; if (st->ratio == 0.0) { st->flip_x = random() & 1; st->flip_y = random() & 1; st->nlines = st->width + st->height; st->lines = (int *) calloc (st->nlines, sizeof(*st->lines)); for (i = 0; i < st->nlines/4; i++) { st->lines[i*4] = i*2; st->lines[i*4+1] = st->height - i*2 - (st->height % 2 ? 0 : 1); st->lines[i*4+2] = st->height + i*2; st->lines[i*4+3] = st->height + st->width - i*2 - (st->width % 2 ? 0 : 1); } } for (i = st->nlines * st->prev_ratio; i < st->nlines * st->ratio; i++) { int x, y, x2, y2; if (st->lines[i] < st->height) x = 0, y = st->lines[i], x2 = st->width, y2 = y; else x = st->lines[i] - st->height, y = 0, x2 = x, y2 = st->height; if (st->flip_x) x = st->width-x, x2 = st->width-x2; if (st->flip_y) y = st->height-y, y2 = st->height-y2; XDrawLine (st->dpy, st->window, st->bg_gc, x, y, x2, y2); } if (st->ratio >= 1.0) { free (st->lines); st->lines = 0; } } static void circle_wipe (eraser_state *st) { int rad = (st->width > st->height ? st->width : st->height); int max = 360 * 64; int th, oth; if (st->ratio == 0.0) { st->flip_p = random() & 1; st->start = random() % max; } th = max * st->ratio; oth = max * st->prev_ratio; if (st->flip_p) { th = max - th; oth = max - oth; } XFillArc (st->dpy, st->window, st->bg_gc, (st->width / 2) - rad, (st->height / 2) - rad, rad*2, rad*2, (st->start + oth) % max, th-oth); } static void three_circle_wipe (eraser_state *st) { int rad = (st->width > st->height ? st->width : st->height); int max = 360 * 64; int th, oth; int i; if (st->ratio == 0.0) st->start = random() % max; th = max/6 * st->ratio; oth = max/6 * st->prev_ratio; for (i = 0; i < 3; i++) { int off = i * max / 3; XFillArc (st->dpy, st->window, st->bg_gc, (st->width / 2) - rad, (st->height / 2) - rad, rad*2, rad*2, (st->start + off + oth) % max, th-oth); XFillArc (st->dpy, st->window, st->bg_gc, (st->width / 2) - rad, (st->height / 2) - rad, rad*2, rad*2, (st->start + off - oth) % max, oth-th); } } static void squaretate (eraser_state *st) { int max = ((st->width > st->height ? st->width : st->height) * 2); XPoint points [3]; int i = max * st->ratio; if (st->ratio == 0.0) st->flip_p = random() & 1; # define DRAW() \ if (st->flip_p) { \ points[0].x = st->width - points[0].x; \ points[1].x = st->width - points[1].x; \ points[2].x = st->width - points[2].x; \ } \ XFillPolygon (st->dpy, st->window, st->bg_gc, \ points, 3, Convex, CoordModeOrigin) points[0].x = 0; points[0].y = 0; points[1].x = st->width; points[1].y = 0; points[2].x = 0; points[2].y = points[0].y + ((i * st->height) / max); DRAW(); points[0].x = 0; points[0].y = 0; points[1].x = 0; points[1].y = st->height; points[2].x = ((i * st->width) / max); points[2].y = st->height; DRAW(); points[0].x = st->width; points[0].y = st->height; points[1].x = 0; points[1].y = st->height; points[2].x = st->width; points[2].y = st->height - ((i * st->height) / max); DRAW(); points[0].x = st->width; points[0].y = st->height; points[1].x = st->width; points[1].y = 0; points[2].x = st->width - ((i * st->width) / max); points[2].y = 0; DRAW(); # undef DRAW } static void fizzle (eraser_state *st) { XPoint *points; int chunk = 20000; int npoints = st->width * st->height * 4; npoints *= (st->ratio - st->prev_ratio); points = (XPoint *) malloc (chunk * sizeof(*points)); if (! points) return; while (npoints > 0) { int remain = (chunk > npoints ? npoints : chunk); int i; for (i = 0; i < remain; i++) { int r = random(); points[i].x = r % st->width; points[i].y = (r >> 16) % st->height; } XDrawPoints (st->dpy, st->window, st->bg_gc, points, remain, CoordModeOrigin); npoints -= remain; } free (points); } static void spiral (eraser_state *st) { int max_radius = (st->width > st->height ? st->width : st->height) * 0.7; int loops = 10; float max_th = M_PI * 2 * loops; int i; int steps = 360 * loops / 4; float off; if (st->ratio == 0.0) { st->flip_p = random() & 1; st->start = random() % 360; } off = st->start * M_PI / 180; for (i = steps * st->prev_ratio; i < steps * st->ratio; i++) { float th1 = i * max_th / steps; float th2 = (i+1) * max_th / steps; int r1 = i * max_radius / steps; int r2 = (i+1) * max_radius / steps; XPoint points[3]; if (st->flip_p) { th1 = max_th - th1; th2 = max_th - th2; } points[0].x = st->width / 2; points[0].y = st->height / 2; points[1].x = points[0].x + r1 * cos (off + th1); points[1].y = points[0].y + r1 * sin (off + th1); points[2].x = points[0].x + r2 * cos (off + th2); points[2].y = points[0].y + r2 * sin (off + th2); /* XFillRectangle(st->dpy, st->window, st->fg_gc,0,0,st->width, st->height);*/ XFillPolygon (st->dpy, st->window, st->bg_gc, points, 3, Convex, CoordModeOrigin); } } static void random_squares (eraser_state *st) { int i, size, rows; if (st->ratio == 0.0) { st->cols = 10 + random() % 30; size = st->width / st->cols; rows = (size ? (st->height / size) : 0) + 1; st->nlines = st->cols * rows; st->lines = (int *) calloc (st->nlines, sizeof(*st->lines)); for (i = 0; i < st->nlines; i++) /* every square */ st->lines[i] = i; for (i = 0; i < st->nlines; i++) /* shuffle */ { int t, r; t = st->lines[i]; r = random() % st->nlines; st->lines[i] = st->lines[r]; st->lines[r] = t; } } size = st->width / st->cols; rows = (size ? (st->height / size) : 0) + 1; for (i = st->nlines * st->prev_ratio; i < st->nlines * st->ratio; i++) { int x = st->lines[i] % st->cols; int y = st->lines[i] / st->cols; XFillRectangle (st->dpy, st->window, st->bg_gc, st->width * x / st->cols, st->height * y / rows, size+1, size+1); } if (st->ratio >= 1.0) { free (st->lines); st->lines = 0; } } /* I first saw something like this, albeit in reverse, in an early Tetris implementation for the Mac. -- Torbjörn Andersson */ static void slide_lines (eraser_state *st) { int max = st->width * 1.1; int nlines = 40; int h = st->height / nlines; int y, step; int tick = 0; if (h < 10) h = 10; step = (max * st->ratio) - (max * st->prev_ratio); if (step <= 0) step = 1; for (y = 0; y < st->height; y += h) { if (st->width <= step) ; else if (tick & 1) { XCopyArea (st->dpy, st->window, st->window, st->fg_gc, 0, y, st->width-step, h, step, y); XFillRectangle (st->dpy, st->window, st->bg_gc, 0, y, step, h); } else { XCopyArea (st->dpy, st->window, st->window, st->fg_gc, step, y, st->width-step, h, 0, y); XFillRectangle (st->dpy, st->window, st->bg_gc, st->width-step, y, step, h); } tick++; } } /* from Frederick Roeber */ static void losira (eraser_state *st) { double mode1 = 0.55; double mode2 = mode1 + 0.30; double mode3 = 1.0; int radius = 10; if (st->ratio < mode1) /* squeeze from the sides */ { double ratio = st->ratio / mode1; double prev_ratio = st->prev_ratio / mode1; int max = st->width / 2; int step = (max * ratio) - (max * prev_ratio); if (step <= 0) step = 1; /* pull from left */ XCopyArea (st->dpy, st->window, st->window, st->fg_gc, 0, 0, max - step, st->height, step, 0); XFillRectangle (st->dpy, st->window, st->bg_gc, 0, 0, max * ratio, st->height); /* pull from right */ XCopyArea (st->dpy, st->window, st->window, st->fg_gc, max+step, 0, max - step, st->height, max, 0); XFillRectangle (st->dpy, st->window, st->bg_gc, max + max*(1-ratio), 0, max, st->height); /* expand white from center */ XFillRectangle (st->dpy, st->window, st->fg_gc, max - (radius * ratio), 0, radius * ratio * 2, st->height); } else if (st->ratio < mode2) /* squeeze from the top/bottom */ { double ratio = (st->ratio - mode1) / (mode2 - mode1); int max = st->height / 2; /* fill middle */ XFillRectangle (st->dpy, st->window, st->fg_gc, st->width/2 - radius, max * ratio, radius*2, st->height * (1 - ratio)); /* fill left and right */ XFillRectangle (st->dpy, st->window, st->bg_gc, 0, 0, st->width/2 - radius, st->height); XFillRectangle (st->dpy, st->window, st->bg_gc, st->width/2 + radius, 0, st->width/2, st->height); /* fill top and bottom */ XFillRectangle (st->dpy, st->window, st->bg_gc, 0, 0, st->width, max * ratio); XFillRectangle (st->dpy, st->window, st->bg_gc, 0, st->height - (max * ratio), st->width, max); /* cap top */ XFillArc (st->dpy, st->window, st->fg_gc, st->width/2 - radius, max * ratio - radius, radius*2, radius*2, 0, 180*64); /* cap bottom */ XFillArc (st->dpy, st->window, st->fg_gc, st->width/2 - radius, st->height - (max * ratio + radius), radius*2, radius*2, 180*64, 180*64); } else /* starburst */ { double ratio = (st->ratio - mode2) / (mode3 - mode2); double r2 = ratio * radius * 4; XArc arc[9]; int i; int angle = 360*64/countof(arc); for (i = 0; i < countof(arc); i++) { double th; arc[i].angle1 = angle * i; arc[i].angle2 = angle; arc[i].width = radius*2 * (1 + ratio); arc[i].height = radius*2 * (1 + ratio); arc[i].x = st->width / 2 - radius; arc[i].y = st->height / 2 - radius; th = ((arc[i].angle1 + (arc[i].angle2 / 2)) / 64.0 / 180 * M_PI); arc[i].x += r2 * cos (th); arc[i].y -= r2 * sin (th); } XFillRectangle (st->dpy, st->window, st->bg_gc, 0, 0, st->width, st->height); XFillArcs (st->dpy, st->window, st->fg_gc, arc, countof(arc)); } } static Eraser erasers[] = { random_lines, venetian, triple_wipe, quad_wipe, circle_wipe, three_circle_wipe, squaretate, fizzle, spiral, random_squares, slide_lines, losira, }; static eraser_state * eraser_init (Display *dpy, Window window) { eraser_state *st = (eraser_state *) calloc (1, sizeof(*st)); XWindowAttributes xgwa; XGCValues gcv; unsigned long fg, bg; double duration; int which; char *s; st->dpy = dpy; st->window = window; XGetWindowAttributes (dpy, window, &xgwa); st->width = xgwa.width; st->height = xgwa.height; bg = get_pixel_resource (dpy, xgwa.colormap, "background", "Background"); fg = get_pixel_resource (dpy, xgwa.colormap, "foreground", "Foreground"); gcv.foreground = fg; gcv.background = bg; st->fg_gc = XCreateGC (dpy, window, GCForeground|GCBackground, &gcv); gcv.foreground = bg; gcv.background = fg; st->bg_gc = XCreateGC (dpy, window, GCForeground|GCBackground, &gcv); # ifdef HAVE_COCOA /* Pretty much all of these leave turds if AA is on. */ jwxyz_XSetAntiAliasing (st->dpy, st->fg_gc, False); jwxyz_XSetAntiAliasing (st->dpy, st->bg_gc, False); # endif s = get_string_resource (dpy, "eraseMode", "Integer"); if (!s || !*s) which = -1; else which = get_integer_resource(dpy, "eraseMode", "Integer"); if (which < 0 || which >= countof(erasers)) which = random() % countof(erasers); st->fn = erasers[which]; duration = get_float_resource (dpy, "eraseSeconds", "Float"); if (duration < 0.1 || duration > 10) duration = 1; st->start_time = double_time(); st->stop_time = st->start_time + duration; XSync (st->dpy, False); return st; } static Bool eraser_draw (eraser_state *st, Bool first_p) { double now = (first_p ? st->start_time : double_time()); double duration = st->stop_time - st->start_time; st->prev_ratio = st->ratio; st->ratio = (now - st->start_time) / duration; if (st->ratio > 1.0) st->ratio = 1.0; st->fn (st); XSync (st->dpy, False); return (st->ratio < 1.0); } static void eraser_free (eraser_state *st) { XClearWindow (st->dpy, st->window); XFreeGC (st->dpy, st->fg_gc); XFreeGC (st->dpy, st->bg_gc); free (st); } eraser_state * erase_window (Display *dpy, Window window, eraser_state *st) { Bool first_p = False; if (! st) { first_p = True; st = eraser_init (dpy, window); } if (! eraser_draw (st, first_p)) { eraser_free (st); st = 0; } return st; } xscreensaver-5.34/utils/xshm.c000644 000767 000767 00000014226 10370535256 016157 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 1993, 1994, 1995, 1996, 1997, 1998, 2001, 2006 * by Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ /* The MIT-SHM (Shared Memory) extension is pretty tricky to use. This file contains the common boiler-plate for creating a shared XImage structure, and for making sure that the shared memory segments get allocated and shut down cleanly. This code currently deals only with shared XImages, not with shared Pixmaps. It also doesn't use "completion events", but so far that doesn't seem to be a problem (and I'm not entirely clear on when they would actually be needed, anyway.) If you don't have man pages for this extension, see http://www.x.org/X11R6.8.1/docs/Xext/ (This document seems not to ever remain available on the web in one place for very long; you can search for it by the title, "MIT-SHM -- The MIT Shared Memory Extension".) To monitor the system's shared memory segments, run "ipcs -m". */ #include "utils.h" #ifdef HAVE_XSHM_EXTENSION /* whole file */ /* #define DEBUG */ #include /* for perror() */ #include /* for XDestroyImage() */ #include "xshm.h" #include "resources.h" /* for get_string_resource() */ #ifdef DEBUG # include #endif extern char *progname; /* The documentation for the XSHM extension implies that if the server supports XSHM but is not the local machine, the XShm calls will return False; but this turns out not to be the case. Instead, the server throws a BadAccess error. So, we need to catch X errors around all of our XSHM calls, sigh. */ static Bool shm_got_x_error = False; XErrorHandler old_handler = 0; static int shm_ehandler (Display *dpy, XErrorEvent *error) { shm_got_x_error = True; #ifdef DEBUG fprintf (stderr, "\n%s: ignoring X error from XSHM:\n", progname); XmuPrintDefaultErrorMessage (dpy, error, stderr); fprintf (stderr, "\n"); #endif return 0; } #define CATCH_X_ERROR(DPY) do { \ XSync((DPY), False); \ shm_got_x_error = False; \ if (old_handler != shm_ehandler) \ old_handler = XSetErrorHandler (shm_ehandler); \ } while(0) #define UNCATCH_X_ERROR(DPY) do { \ XSync((DPY), False); \ if (old_handler) \ XSetErrorHandler (old_handler); \ old_handler = 0; \ } while(0) XImage * create_xshm_image (Display *dpy, Visual *visual, unsigned int depth, int format, char *data, XShmSegmentInfo *shm_info, unsigned int width, unsigned int height) { Status status; XImage *image = 0; if (!get_boolean_resource(dpy, "useSHM", "Boolean")) return 0; if (!XShmQueryExtension (dpy)) return 0; CATCH_X_ERROR(dpy); image = XShmCreateImage(dpy, visual, depth, format, data, shm_info, width, height); UNCATCH_X_ERROR(dpy); if (shm_got_x_error) return 0; #ifdef DEBUG fprintf(stderr, "\n%s: XShmCreateImage(... %d, %d)\n", progname, width, height); #endif shm_info->shmid = shmget(IPC_PRIVATE, image->bytes_per_line * image->height, IPC_CREAT | 0777); #ifdef DEBUG fprintf(stderr, "%s: shmget(IPC_PRIVATE, %d, IPC_CREAT | 0777) ==> %d\n", progname, image->bytes_per_line * image->height, shm_info->shmid); #endif if (shm_info->shmid == -1) { char buf[1024]; sprintf (buf, "%s: shmget failed", progname); perror(buf); XDestroyImage (image); image = 0; XSync(dpy, False); } else { shm_info->readOnly = False; image->data = shm_info->shmaddr = shmat(shm_info->shmid, 0, 0); #ifdef DEBUG fprintf(stderr, "%s: shmat(%d, 0, 0) ==> %d\n", progname, shm_info->shmid, (int) image->data); #endif CATCH_X_ERROR(dpy); status = XShmAttach(dpy, shm_info); UNCATCH_X_ERROR(dpy); if (shm_got_x_error) status = False; if (!status) { fprintf (stderr, "%s: XShmAttach failed!\n", progname); XDestroyImage (image); XSync(dpy, False); shmdt (shm_info->shmaddr); image = 0; } #ifdef DEBUG else fprintf(stderr, "%s: XShmAttach(dpy, shm_info) ==> True\n", progname); #endif XSync(dpy, False); /* Delete the shared segment right now; the segment won't actually go away until both the client and server have deleted it. The server will delete it as soon as the client disconnects, so we should delete our side early in case of abnormal termination. (And note that, in the context of xscreensaver, abnormal termination is the rule rather than the exception, so this would leak like a sieve if we didn't do this...) #### Are we leaking anyway? Perhaps because of the window of opportunity between here and the XShmAttach call above, during which we might be killed? Do we need to establish a signal handler for this case? */ shmctl (shm_info->shmid, IPC_RMID, 0); #ifdef DEBUG fprintf(stderr, "%s: shmctl(%d, IPC_RMID, 0)\n\n", progname, shm_info->shmid); #endif } return image; } void destroy_xshm_image (Display *dpy, XImage *image, XShmSegmentInfo *shm_info) { Status status; CATCH_X_ERROR(dpy); status = XShmDetach (dpy, shm_info); UNCATCH_X_ERROR(dpy); if (shm_got_x_error) status = False; if (!status) fprintf (stderr, "%s: XShmDetach failed!\n", progname); #ifdef DEBUG else fprintf (stderr, "%s: XShmDetach(dpy, shm_info) ==> True\n", progname); #endif XDestroyImage (image); XSync(dpy, False); status = shmdt (shm_info->shmaddr); if (status != 0) { char buf[1024]; sprintf (buf, "%s: shmdt(0x%lx) failed", progname, (unsigned long) shm_info->shmaddr); perror(buf); } #ifdef DEBUG else fprintf (stderr, "%s: shmdt(shm_info->shmaddr) ==> 0\n", progname); #endif XSync(dpy, False); } #endif /* HAVE_XSHM_EXTENSION */ xscreensaver-5.34/utils/xdbe.c000644 000767 000767 00000003653 10370535261 016120 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 1998, 1999, 2006 * by Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ /* The XDBE (Double Buffering) extension is pretty tricky to use, since you can get X errors at inconvenient times during initialization. This file contains a utility routine to make it easier to deal with. */ #include "utils.h" #include "xdbe.h" #include "resources.h" /* for get_string_resource() */ /* #define DEBUG */ #ifdef DEBUG # include #endif extern char *progname; #ifdef HAVE_DOUBLE_BUFFER_EXTENSION /* whole file */ static Bool xdbe_got_x_error = False; static int xdbe_ehandler (Display *dpy, XErrorEvent *error) { xdbe_got_x_error = True; #ifdef DEBUG fprintf (stderr, "\n%s: ignoring X error from DOUBLE-BUFFER:\n", progname); XmuPrintDefaultErrorMessage (dpy, error, stderr); fprintf (stderr, "\n"); #endif return 0; } XdbeBackBuffer xdbe_get_backbuffer (Display *dpy, Window window, XdbeSwapAction action) { XdbeBackBuffer b; XErrorHandler old_handler; int maj, min; if (!get_boolean_resource(dpy, "useDBE", "Boolean")) return 0; if (!XdbeQueryExtension (dpy, &maj, &min)) return 0; XSync (dpy, False); xdbe_got_x_error = False; old_handler = XSetErrorHandler (xdbe_ehandler); b = XdbeAllocateBackBufferName(dpy, window, XdbeUndefined); XSync (dpy, False); XSetErrorHandler (old_handler); if (xdbe_got_x_error) return 0; return b; } #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ xscreensaver-5.34/utils/colorbars.c000644 000767 000767 00000010654 12440151451 017156 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 2001, 2003 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ /* This file contains code for drawing NTSC colorbars. A couple of things use this. */ #include "utils.h" #include "resources.h" #include "colorbars.h" static const char * const colors[7][18] = { { "#CCCCCC", "#FFFF00", "#00FFFF", "#00FF00", /* tall bars */ "#FF00FF", "#FF0000", "#0000FF", "#000000", 0 }, { "#000000", "#0000FF", "#FF0000", "#FF00FF", /* short rev bars */ "#00FF00", "#00FFFF", "#FFFF00", "#CCCCCC", 0 }, { "#000000", 0 /* blank */ }, { "#FFFFFF", "#EEEEEE", "#DDDDDD", "#CCCCCC", /* gray ramp */ "#BBBBBB", "#AAAAAA", "#999999", "#888888", "#777777", "#666666", "#555555", "#444444", "#333333", "#222222", "#111111", "#000000" }, { "#000000", "#111111", "#222222", "#333333", /* gray rev ramp */ "#444444", "#555555", "#666666", "#777777", "#888888", "#999999", "#AAAAAA", "#BBBBBB", "#CCCCCC", "#DDDDDD", "#EEEEEE", "#FFFFFF" }, { "#000000", 0 /* blank */ }, { "#FF00FF", "#FF00FF", "#FF00FF", /* blacklevel row */ "#FFFFFF", "#FFFFFF", "#FFFFFF", "#0000AD", "#0000AD", "#0000AD", "#131313", "#131313", "#131313", "#000000", "#000000", "#262626", "#000000", "#000000", "#000000" } }; static const int heights[7] = { 63, 10, 1, 5, 5, 1, 15 }; /* percentages */ void draw_colorbars (Screen *screen, Visual *visual, Drawable drawable, Colormap cmap, int x, int y, int width, int height) { Display *dpy = DisplayOfScreen (screen); int oy = y; int ypct = 0; int j; XGCValues gcv; GC gc = XCreateGC (dpy, drawable, 0, &gcv); if (width <= 0 || height <= 0) { Window root; int xx, yy; unsigned int bw, d; XGetGeometry (dpy, drawable, &root, &xx, &yy, (unsigned int *) &width, (unsigned int *) &height, &bw, &d); } for (j = 0; j < sizeof(colors) / sizeof(*colors); j++) { int i, h, ncols; int x1 = 0; int y2; for (ncols = 0; ncols < sizeof(*colors) / sizeof(**colors); ncols++) if (!colors[j][ncols]) break; ypct += heights[j]; y2 = height * ypct / 100; h = y2 - y; /* avoid roundoff fencepost */ for (i = 0; i < ncols; i++) { XColor xcolor; const char *color = colors[j][i]; int x2 = x + (width * (i+1) / ncols); int w = x2 - x1; /* avoid roundoff fencepost */ if (! XParseColor (dpy, cmap, color, &xcolor)) abort(); xcolor.flags = DoRed|DoGreen|DoBlue; if (!XAllocColor (dpy, cmap, &xcolor)) continue; XSetForeground (dpy, gc, xcolor.pixel); XFillRectangle (dpy, drawable, gc, x1, y, w, h); x1 = x2; } y = y2; } y = oy; /* Add in the xscreensaver logo */ { unsigned long *pixels; /* ignored - unfreed */ int npixels; unsigned long bg = ~0; Pixmap logo_mask = 0; Pixmap logo_map = xscreensaver_logo (screen, visual, drawable, cmap, bg, &pixels, &npixels, &logo_mask, True); if (logo_map) { Window root; unsigned int logo_width, logo_height; int w = width; int h = height * heights[0] / 100; int x1, y1; unsigned int bw, d; XGetGeometry (dpy, logo_map, &root, &x1, &y1, &logo_width, &logo_height, &bw, &d); x1 = x + (w - (int) logo_width) / 2; y1 = y + (h - (int) logo_height) / 2; if (logo_mask) { XSetClipMask (dpy, gc, logo_mask); XSetClipOrigin (dpy, gc, x1, y1); } XCopyArea (dpy, logo_map, drawable, gc, 0, 0, logo_width, logo_height, x1, y1); XFreePixmap (dpy, logo_map); if (logo_mask) XFreePixmap (dpy, logo_mask); } } XFreeGC(dpy, gc); } xscreensaver-5.34/utils/minixpm.c000644 000767 000767 00000016414 12517037012 016652 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 2001-2014 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ /* I implemented this subset of libXPM here because I don't want the xscreensaver daemon to depend on libXPM for two reasons: first, because I want the logo to show up even if libXPM is not installed on the system; and second, I don't want to have to security-audit libXPM. The fewer libraries that are linked into the xscreensaver daemon, the more likely to be secure it is. Also, the Cocoa port uses this code since libXPM isn't available by default on MacOS. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #if defined (HAVE_COCOA) || defined(HAVE_ANDROID) # include "jwxyz.h" #else /* real Xlib */ # include # include #endif /* !HAVE_COCOA && !HAVE_ANDROID */ #include "minixpm.h" extern const char *progname; static Bool bigendian (void) { union { int i; char c[sizeof(int)]; } u; u.i = 1; return !u.c[0]; } static const char hex[128] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 10,11,12,13,14,15,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,11,12,13,14,15,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; XImage * minixpm_to_ximage (Display *dpy, Visual *visual, Colormap colormap, int depth, unsigned long transparent_color, const char * const * data, int *width_ret, int *height_ret, unsigned long **pixels_ret, int *npixels_ret, unsigned char **mask_ret) { int w, w8, h, ncolors, nbytes; char c; int x, y, i, pixel_count; struct { char byte; int cr; int cg; int cb; int mr; int mg; int mb; } cmap[256]; unsigned char rmap[256]; unsigned long *pixels; XImage *ximage = 0; memset (cmap, 0, sizeof(cmap)); /* avoid warnings */ if (4 != sscanf ((const char *) *data, "%d %d %d %d %c", &w, &h, &ncolors, &nbytes, &c)) { fprintf (stderr, "%s: unparsable XPM header\n", progname); abort(); } if (ncolors < 1 || ncolors > 255) { fprintf (stderr, "%s: XPM: ncolors is %d\n", progname, ncolors); abort(); } if (nbytes != 1) { fprintf (stderr, "%s: %d-byte XPM files not supported\n", progname, nbytes); abort(); } data++; for (i = 0; i < ncolors; i++) { const char *line = *data; cmap[i].byte = *line++; while (*line) { int r, g, b; char which; while (*line == ' ' || *line == '\t') line++; which = *line; if (!which) continue; /* whitespace at end of line */ line++; if (which != 'c' && which != 'm') { fprintf (stderr, "%s: unknown XPM pixel type '%c' in \"%s\"\n", progname, which, *data); abort(); } while (*line == ' ' || *line == '\t') line++; if (!strncasecmp(line, "None", 4)) { r = g = b = -1; line += 4; } else if (!strncasecmp(line, "white", 5)) { r = g = b = 255; line += 5; } else if (!strncasecmp(line, "black", 5)) { r = g = b = 0; line += 5; } else { if (*line != '#') { fprintf (stderr, "%s: unparsable XPM color spec: \"%s\"\n", progname, line); abort(); } if (*line == '#') line++; r = (hex[(int) line[0]] << 4) | hex[(int) line[1]]; line += 2; g = (hex[(int) line[0]] << 4) | hex[(int) line[1]]; line += 2; b = (hex[(int) line[0]] << 4) | hex[(int) line[1]]; line += 2; } if (which == 'c') { cmap[i].cr = r; cmap[i].cg = g; cmap[i].cb = b; } else { cmap[i].mr = r; cmap[i].mg = g; cmap[i].mb = b; } } data++; } if (depth == 1) transparent_color = 1; pixels = (unsigned long *) calloc (ncolors+1, sizeof(*pixels)); pixel_count = 0; for (i = 0; i < ncolors; i++) { if (cmap[i].cr == -1) /* transparent */ { rmap[(int) cmap[i].byte] = 255; } else { XColor color; color.flags = DoRed|DoGreen|DoBlue; color.red = (cmap[i].cr << 8) | cmap[i].cr; color.green = (cmap[i].cg << 8) | cmap[i].cg; color.blue = (cmap[i].cb << 8) | cmap[i].cb; if (depth == 1 || !XAllocColor (dpy, colormap, &color)) { color.red = (cmap[i].mr << 8) | cmap[i].mr; color.green = (cmap[i].mg << 8) | cmap[i].mg; color.blue = (cmap[i].mb << 8) | cmap[i].mb; if (!XAllocColor (dpy, colormap, &color)) { fprintf (stderr, "%s: unable to allocate XPM color\n", progname); abort(); } } pixels[pixel_count] = color.pixel; rmap[(int) cmap[i].byte] = pixel_count; pixel_count++; } } ximage = XCreateImage (dpy, visual, depth, (depth == 1 ? XYBitmap : ZPixmap), 0, 0, w, h, 8, 0); if (! ximage) { if (pixels) free (pixels); return 0; } ximage->bitmap_bit_order = ximage->byte_order = (bigendian() ? MSBFirst : LSBFirst); ximage->data = (char *) calloc (ximage->height, ximage->bytes_per_line); if (!ximage->data) { XDestroyImage (ximage); if (pixels) free (pixels); return 0; } w8 = (w + 7) / 8; if (mask_ret) { int s = (w8 * h) + 1; *mask_ret = (unsigned char *) malloc (s); if (!*mask_ret) mask_ret = 0; else memset (*mask_ret, 255, s); } for (y = 0; y < h; y++) { const char *line = *data++; for (x = 0; x < w; x++) { int p = rmap[(int) *line]; line++; XPutPixel (ximage, x, y, (p == 255 ? transparent_color : pixels[p])); if (p == 255 && mask_ret) (*mask_ret)[(y * w8) + (x >> 3)] &= (~(1 << (x & 7))); } } *width_ret = w; *height_ret = h; *pixels_ret = pixels; *npixels_ret = pixel_count; return ximage; } xscreensaver-5.34/utils/textclient.c000644 000767 000767 00000032515 12426265146 017366 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 2012-2014 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. * * Running programs under a pipe or pty and returning bytes from them. * Uses these X resources: * * program: What to run. Usually "xscreensaver-text". * relaunchDelay: secs How long after the command dies before restarting. * usePty: bool Whether to run the command interactively. * metaSendsESC: bool Whether to send Alt-x as ESC x in pty-mode. * swapBSDEL: bool Swap Backspace and Delete in pty-mode. */ #include "utils.h" #ifndef USE_IPHONE /* whole file -- see OSX/iostextclient.m */ #include "textclient.h" #include "resources.h" #ifndef HAVE_COCOA # define XK_MISCELLANY # include # include # include #endif #include #include #include #ifdef HAVE_UNISTD_H # include # include /* for O_RDWR */ #endif #ifdef HAVE_FORKPTY # include # ifdef HAVE_PTY_H # include # endif # ifdef HAVE_UTIL_H # include # endif #endif /* HAVE_FORKPTY */ #undef DEBUG extern const char *progname; struct text_data { Display *dpy; char *program; int pix_w, pix_h, char_w, char_h; int max_lines; Bool pty_p; XtIntervalId pipe_timer; FILE *pipe; pid_t pid; XtInputId pipe_id; Bool input_available_p; Time subproc_relaunch_delay; XComposeStatus compose; Bool meta_sends_esc_p; Bool swap_bs_del_p; Bool meta_done_once; unsigned int meta_mask; const char *out_buffer; int out_column; }; static void subproc_cb (XtPointer closure, int *source, XtInputId *id) { text_data *d = (text_data *) closure; # ifdef DEBUG if (! d->input_available_p) fprintf (stderr, "%s: textclient: input available\n", progname); # endif d->input_available_p = True; } # define BACKSLASH(c) \ (! ((c >= 'a' && c <= 'z') || \ (c >= 'A' && c <= 'Z') || \ (c >= '0' && c <= '9') || \ c == '.' || c == '_' || c == '-' || c == '+' || c == '/')) static void launch_text_generator (text_data *d) { XtAppContext app = XtDisplayToApplicationContext (d->dpy); char buf[255]; const char *oprogram = d->program; char *s; # ifdef HAVE_COCOA /* /bin/sh on OS X 10.10 wipes out the PATH. */ const char *path = getenv("PATH"); char *cmd = s = malloc ((strlen(oprogram) + strlen(path)) * 2 + 100); strcpy (s, "export PATH="); s += strlen (s); while (*path) { char c = *path++; if (BACKSLASH(c)) *s++ = '\\'; *s++ = c; } strcpy (s, "; "); s += strlen (s); # else char *cmd = s = malloc ((strlen(oprogram)) * 2 + 100); # endif strcpy (s, "( "); strcat (s, oprogram); s += strlen (s); /* Kludge! Special-case "xscreensaver-text" to tell it how wide the screen is. We used to do this by just always feeding `program' through sprintf() and setting the default value to "xscreensaver-text --cols %d", but that makes things blow up if someone ever uses a --program that includes a % anywhere. */ if (!strcmp (oprogram, "xscreensaver-text")) { if (d->char_w) sprintf (s, " --cols %d", d->char_w); if (d->max_lines) sprintf (s, " --lines %d", d->max_lines); s += strlen(s); } strcpy (s, " ) 2>&1"); # ifdef DEBUG fprintf (stderr, "%s: textclient: launch %s: %s\n", cmd, (d->pty_p ? "pty" : "pipe"), program); # endif #ifdef HAVE_FORKPTY if (d->pty_p) { int fd; struct winsize ws; ws.ws_col = d->char_w; ws.ws_row = d->char_h; ws.ws_xpixel = d->pix_w; ws.ws_ypixel = d->pix_h; d->pipe = 0; if ((d->pid = forkpty(&fd, NULL, NULL, &ws)) < 0) { /* Unable to fork */ sprintf (buf, "%.100s: forkpty", progname); perror (buf); } else if (!d->pid) { /* This is the child fork. */ char *av[10]; int i = 0; if (putenv ("TERM=vt100")) abort(); av[i++] = "/bin/sh"; av[i++] = "-c"; av[i++] = cmd; av[i] = 0; execvp (av[0], av); sprintf (buf, "%.100s: %.100s", progname, oprogram); perror (buf); exit (1); } else { /* This is the parent fork. */ if (d->pipe) abort(); d->pipe = fdopen (fd, "r+"); if (d->pipe_id) abort(); d->pipe_id = XtAppAddInput (app, fileno (d->pipe), (XtPointer) (XtInputReadMask | XtInputExceptMask), subproc_cb, (XtPointer) d); # ifdef DEBUG fprintf (stderr, "%s: textclient: pid = %d\n", progname, d->pid); # endif } } else #endif /* HAVE_FORKPTY */ { /* don't mess up controlling terminal on "-pipe -program tcsh". */ static int protected_stdin_p = 0; if (! protected_stdin_p) { fclose (stdin); open ("/dev/null", O_RDWR); /* re-allocate fd 0 */ protected_stdin_p = 1; } if (d->pipe) abort(); if ((d->pipe = popen (cmd, "r"))) { if (d->pipe_id) abort(); d->pipe_id = XtAppAddInput (app, fileno (d->pipe), (XtPointer) (XtInputReadMask | XtInputExceptMask), subproc_cb, (XtPointer) d); # ifdef DEBUG fprintf (stderr, "%s: textclient: popen\n", progname); # endif } else { sprintf (buf, "%.100s: %.100s", progname, cmd); perror (buf); } } free (cmd); } static void relaunch_generator_timer (XtPointer closure, XtIntervalId *id) { text_data *d = (text_data *) closure; /* if (!d->pipe_timer) abort(); */ d->pipe_timer = 0; # ifdef DEBUG fprintf (stderr, "%s: textclient: launch timer fired\n", progname); # endif launch_text_generator (d); } static void start_timer (text_data *d) { XtAppContext app = XtDisplayToApplicationContext (d->dpy); # ifdef DEBUG fprintf (stderr, "%s: textclient: relaunching in %d\n", progname, (int) d->subproc_relaunch_delay); # endif if (d->pipe_timer) XtRemoveTimeOut (d->pipe_timer); d->pipe_timer = XtAppAddTimeOut (app, d->subproc_relaunch_delay, relaunch_generator_timer, (XtPointer) d); } static void close_pipe (text_data *d) { if (d->pid) { # ifdef DEBUG fprintf (stderr, "%s: textclient: kill %d\n", progname, d->pid); # endif kill (d->pid, SIGTERM); } d->pid = 0; if (d->pipe_id) XtRemoveInput (d->pipe_id); d->pipe_id = 0; if (d->pipe) { # ifdef DEBUG fprintf (stderr, "%s: textclient: pclose\n", progname); # endif pclose (d->pipe); } d->pipe = 0; } void textclient_reshape (text_data *d, int pix_w, int pix_h, int char_w, int char_h, int max_lines) { # if defined(HAVE_FORKPTY) && defined(TIOCSWINSZ) d->pix_w = pix_w; d->pix_h = pix_h; d->char_w = char_w; d->char_h = char_h; d->max_lines = max_lines; # ifdef DEBUG fprintf (stderr, "%s: textclient: reshape: %dx%d, %dx%d\n", progname, pix_w, pix_h, char_w, char_h); # endif if (d->pid && d->pipe) { /* Tell the sub-process that the screen size has changed. */ struct winsize ws; ws.ws_col = char_w; ws.ws_row = char_h; ws.ws_xpixel = pix_w; ws.ws_ypixel = pix_h; ioctl (fileno (d->pipe), TIOCSWINSZ, &ws); kill (d->pid, SIGWINCH); } # endif /* HAVE_FORKPTY && TIOCSWINSZ */ /* If we're running xscreensaver-text, then kill and restart it any time the window is resized so that it gets an updated --cols arg right away. But if we're running something else, leave it alone. */ if (!strcmp (d->program, "xscreensaver-text")) { close_pipe (d); d->input_available_p = False; start_timer (d); } } text_data * textclient_open (Display *dpy) { text_data *d = (text_data *) calloc (1, sizeof (*d)); # ifdef DEBUG fprintf (stderr, "%s: textclient: init\n", progname); # endif d->dpy = dpy; if (get_boolean_resource (dpy, "usePty", "UsePty")) { # ifdef HAVE_FORKPTY d->pty_p = True; # else fprintf (stderr, "%s: no pty support on this system; using a pipe instead.\n", progname); # endif } d->subproc_relaunch_delay = get_integer_resource (dpy, "relaunchDelay", "Time"); if (d->subproc_relaunch_delay < 1) d->subproc_relaunch_delay = 1; d->subproc_relaunch_delay *= 1000; d->meta_sends_esc_p = get_boolean_resource (dpy, "metaSendsESC", "Boolean"); d->swap_bs_del_p = get_boolean_resource (dpy, "swapBSDEL", "Boolean"); d->program = get_string_resource (dpy, "program", "Program"); # ifdef HAVE_FORKPTY /* Kludge for MacOS standalone mode: see OSX/SaverRunner.m. */ { const char *s = getenv ("XSCREENSAVER_STANDALONE"); if (s && *s && strcmp(s, "0")) { d->pty_p = 1; d->program = strdup (getenv ("SHELL")); } } # endif start_timer (d); return d; } void textclient_close (text_data *d) { # ifdef DEBUG fprintf (stderr, "%s: textclient: free\n", progname); # endif close_pipe (d); if (d->program) free (d->program); if (d->pipe_timer) XtRemoveTimeOut (d->pipe_timer); d->pipe_timer = 0; memset (d, 0, sizeof (*d)); free (d); } int textclient_getc (text_data *d) { XtAppContext app = XtDisplayToApplicationContext (d->dpy); int ret = -1; if (XtAppPending (app) & (XtIMTimer|XtIMAlternateInput)) XtAppProcessEvent (app, XtIMTimer|XtIMAlternateInput); if (d->out_buffer && *d->out_buffer) { ret = *d->out_buffer; d->out_buffer++; } else if (d->input_available_p && d->pipe) { unsigned char s[2]; int n = read (fileno (d->pipe), (void *) s, 1); if (n > 0) ret = s[0]; else /* EOF */ { if (d->pid) { # ifdef DEBUG fprintf (stderr, "%s: textclient: waitpid %d\n", progname, d->pid); # endif waitpid (d->pid, NULL, 0); d->pid = 0; } close_pipe (d); if (d->out_column > 0) { # ifdef DEBUG fprintf (stderr, "%s: textclient: adding blank line at EOF\n", progname); # endif d->out_buffer = "\r\n\r\n"; } start_timer (d); } d->input_available_p = False; } if (ret == '\r' || ret == '\n') d->out_column = 0; else if (ret > 0) d->out_column++; # ifdef DEBUG if (ret <= 0) fprintf (stderr, "%s: textclient: getc: %d\n", progname, ret); else if (ret < ' ') fprintf (stderr, "%s: textclient: getc: %03o\n", progname, ret); else fprintf (stderr, "%s: textclient: getc: '%c'\n", progname, (char) ret); # endif return ret; } /* The interpretation of the ModN modifiers is dependent on what keys are bound to them: Mod1 does not necessarily mean "meta". It only means "meta" if Meta_L or Meta_R are bound to it. If Meta_L is on Mod5, then Mod5 is the one that means Meta. Oh, and Meta and Alt aren't necessarily the same thing. Icepicks in my forehead! */ static unsigned int do_icccm_meta_key_stupidity (Display *dpy) { unsigned int modbits = 0; # ifndef HAVE_COCOA int i, j, k; XModifierKeymap *modmap = XGetModifierMapping (dpy); for (i = 3; i < 8; i++) for (j = 0; j < modmap->max_keypermod; j++) { int code = modmap->modifiermap[i * modmap->max_keypermod + j]; KeySym *syms; int nsyms = 0; if (code == 0) continue; syms = XGetKeyboardMapping (dpy, code, 1, &nsyms); for (k = 0; k < nsyms; k++) if (syms[k] == XK_Meta_L || syms[k] == XK_Meta_R || syms[k] == XK_Alt_L || syms[k] == XK_Alt_R) modbits |= (1 << i); XFree (syms); } XFreeModifiermap (modmap); # endif /* HAVE_COCOA */ return modbits; } /* Returns a mask of the bit or bits of a KeyPress event that mean "meta". */ static unsigned int meta_modifier (text_data *d) { if (!d->meta_done_once) { /* Really, we are supposed to recompute this if a KeymapNotify event comes in, but fuck it. */ d->meta_done_once = True; d->meta_mask = do_icccm_meta_key_stupidity (d->dpy); # ifdef DEBUG fprintf (stderr, "%s: textclient: ICCCM Meta is 0x%08X\n", progname, d->meta_mask); # endif } return d->meta_mask; } Bool textclient_putc (text_data *d, XKeyEvent *k) { KeySym keysym; unsigned char c = 0; XLookupString (k, (char *) &c, 1, &keysym, &d->compose); if (c != 0 && d->pipe) { if (!d->swap_bs_del_p) ; else if (c == 127) c = 8; else if (c == 8) c = 127; /* If meta was held down, send ESC, or turn on the high bit. */ if (k->state & meta_modifier (d)) { if (d->meta_sends_esc_p) fputc ('\033', d->pipe); else c |= 0x80; } fputc (c, d->pipe); fflush (d->pipe); k->type = 0; /* don't interpret this event defaultly. */ # ifdef DEBUG fprintf (stderr, "%s: textclient: putc '%c'\n", progname, (char) c); # endif return True; } return False; } #endif /* !USE_IPHONE -- whole file */ xscreensaver-5.34/utils/aligned_malloc.c000644 000767 000767 00000002410 12340230454 020111 0ustar00jwzjwz000000 000000 /* -*- mode: c; tab-width: 4; fill-column: 128 -*- */ /* vi: set ts=4 tw=128: */ /* aligned_malloc.c, Copyright (c) 2014 Dave Odell Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that 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. */ #include "aligned_malloc.h" #include #include #if !(_POSIX_VERSION >= 200112L || _XOPEN_VERSION >= 600) #include #include int aligned_malloc(void **ptr, unsigned alignment, size_t size) { void *block_start; ptrdiff_t align1 = alignment - 1; assert(alignment && !(alignment & (alignment - 1))); /* alignment must be a power of two. */ size += sizeof(void *) + align1; block_start = malloc(size); if(!block_start) return ENOMEM; *ptr = (void *)(((ptrdiff_t)block_start + sizeof(void *) + align1) & ~align1); ((void **)(*ptr))[-1] = block_start; return 0; } void aligned_free(void *ptr) { free(((void **)(ptr))[-1]); } #endif xscreensaver-5.34/utils/thread_util.c000644 000767 000024 00000072313 12612500073 017746 0ustar00jwzstaff000000 000000 /* -*- mode: c; tab-width: 4; fill-column: 78 -*- */ /* vi: set ts=4 tw=78: */ /* thread_util.c, Copyright (c) 2014 Dave Odell Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that 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. */ #include "thread_util.h" #include "aligned_malloc.h" #include "resources.h" #if HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include /* Only used by thread_memory_alignment(). */ #include #if HAVE_ALLOCA_H # include #endif #if HAVE_UNISTD_H # include #endif #if defined __MACH__ && defined __APPLE__ /* OS X, iOS */ # include # include #endif #define IS_POWER_OF_2(x) ((x) > 0 && !((x) & ((x) - 1))) /* arraysize(a). Also known as countof(x), XtNumber(x), NELEMS(x), LEN(x), NUMOF(x), ARRAY_SIZE(x), etc., since the fine folks behind C never got around to including this incredibly useful macro in the standard library, which is where it belongs. Much of the code here assumes that multiple processors in a system all use the same cache line size...which might be wrong on occasion. */ #define arraysize(a) (sizeof(a) / sizeof(*(a))) #define arrayend(a) ((a) + arraysize(a)) /* These numbers are from: - Linux: arch/(arch name)/include/asm/cache.h, note L1_CACHE_BYTES/L1_CACHE_SHIFT/SMP_CACHE_BYTES. - FreeBSD: sys/(sys name)/include/param.h, note CACHE_LINE_SHIFT/CACHE_LINE_SIZE. Preprocessor symbols come from: - TARGET_CPU_CPP_BUILTINS() in the GNU C preprocessor - http://predef.sourceforge.net/ */ /* Several architectures need preprocessor symbols. Qualcomm Hexagon: 1 << 5 Imagination Technologies META: 1 << 6 OpenRISC: 16 (Linux has the cache line size as a todo.) Unicore: 1 << 5 */ #if HAVE_PTHREAD # if !HAVE_UNISTD_H # error unistd.h must be present whenever pthread.h is. # endif # if defined __MACH__ && defined __APPLE__ /* OS X, iOS */ # include /* For TARGET_OS_IPHONE. */ # ifdef TARGET_OS_IPHONE # define _CACHE_LINE_SIZE 64 # endif # endif # if defined __FreeBSD__ && !defined _CACHE_LINE_SIZE # include # ifdef CACHE_LINE_SIZE # define _CACHE_LINE_SIZE CACHE_LINE_SIZE # endif # endif # if !defined _CACHE_LINE_SIZE # if defined __alpha || defined __alpha__ /* DEC Alpha */ # define _CACHE_LINE_SIZE 64 /* EV6 and above. EV4 and EV5 use 32 bytes. */ # elif defined __arm__ /* ARM architecture */ # define _CACHE_LINE_SIZE (1 << 6) # elif defined __AVR || defined __AVR__ /* Atmel AVR32 */ # define _CACHE_LINE_SIZE (1 << 5) # elif defined __bfin || defined __BFIN__ /* Analog Devices Blackfin */ # define _CACHE_LINE_SIZE (1 << 5) # elif defined _TMS320C6X || defined __TMS320C6X__ /* Texas Instruments TMS320C6x */ # define _CACHE_LINE_SIZE (1 << 7) /* From L2. L1 data cache line is 1 << 6. */ # elif defined __cris /* Axis Communications ETRAX CRIS */ # define _CACHE_LINE_SIZE 32 # elif defined __ia64__ || defined _IA64 /* Intel Itanium */ # define _CACHE_LINE_SIZE (1 << 7) # elif defined __M32R__ || defined __m32r__ /* Mitsubishi/Renesas M32R */ # define _CACHE_LINE_SIZE (1 << 4) # elif defined __m68k__ || defined M68000 || defined __MC68K__ /* Motorola 68000 */ # define _CACHE_LINE_SIZE (1 << 4) # elif defined __MICROBLAZE__ || defined __microblaze__ /* Xilinx MicroBlaze */ # define _CACHE_LINE_SIZE (1 << 5) # elif defined __mips__ || defined __mips || defined __MIPS__ /* MIPS */ # define _CACHE_LINE_SIZE (1 << 6) # elif defined __mn10300__ || defined __MN10300__ /* Matsushita/Panasonic MN103 */ # define _CACHE_LINE_SIZE 32 /* MN103E010 has 16 bytes. */ # elif defined __hppa || defined __hppa__ /* Hewlett-Packard PA-RISC */ # define _CACHE_LINE_SIZE 64 /* PA-RISC 2.0 uses 64 bytes, PA-RISC 1.1 uses 32. */ # elif defined __powerpc || defined _ARCH_PPC /* Power Architecture (a.k.a. PowerPC) */ # define _CACHE_LINE_SIZE (1 << 7) /* Linux has a list of PPC models with associated L1_CACHE_SHIFT values. */ # elif defined __s390__ || defined __370__ || defined __zarch__ || defined __SYSC_ZARCH__ /* IBM System/390 */ # define _CACHE_LINE_SIZE 256 # elif defined SUNPLUS || defined __SCORE__ || defined __score__ /* Sunplus S+core */ # define _CACHE_LINE_SIZE (1 << 4) # elif defined __sh__ /* Hitachi SuperH */ # define _CACHE_LINE_SIZE (1 << 5) /* SH3 and earlier used 1 << 4. */ # elif defined __sparc__ || defined __sparc /* SPARC */ # define _CACHE_LINE_SIZE (1 << 7) /* Linux and FreeBSD disagree as to what this should be. */ # elif defined __tile__ /* Tilera TILE series */ # define _CACHE_LINE_SIZE (1 << 6) /* TILEPro uses different sizes for L1 and L2. */ # elif defined __i386 || defined __x86_64 /* x86(-64) */ # define _CACHE_LINE_SIZE (1 << 7) # elif defined __xtensa__ || defined __XTENSA__ /* Cadence Design Systems/Tensilica Xtensa */ # define _CACHE_LINE_SIZE (1 << 5) /* 1 << 4 on some models. */ # endif # endif /* !defined _CACHE_LINE_SIZE */ # if defined __NetBSD__ && !defined _CACHE_LINE_SIZE /* NetBSD defines COHERENCY_UNIT to be 32 on MIPS, and 64 for all other platforms -- which is wrong. Still, this is what the kernel uses; if this value didn't work, the system wouldn't run. */ # include # ifdef COHERENCY_UNIT # define _CACHE_LINE_SIZE COHERENCY_UNIT # endif # endif # ifndef _CACHE_LINE_SIZE # define _CACHE_LINE_SIZE 256 /* Fallback cache line size. */ # endif static unsigned _get_cache_line_size(void) { /* The general idea: - Try to get the actual cache line size from the operating system. - In the interest of keeping things simple, this only checks with glibc and OS X. - A few other methods that could be added: - Query x86 CPUs directly with the CPUID instruction. - Query various ELF systems through the auxillary vector. (Power, Alpha, SuperH) - Query Linux through /sys/devices/system/cpu/cpu?/cache/index?/coherency_line_size (x86 only, AFAIK) - Query Linux through cache_alignment in /proc/cpuinfo - Query Solaris through PICL. - If that fails, return a value appropriate for the current CPU architecture. - Otherwise, return a sufficiently large number. */ /* sysconf(3) is not a syscall, it's a glibc call that, for cache line sizes, uses CPUID on x86 and returns 0 on other platforms. If it were to work on most other platforms, it would have to get cache information from the kernel, since that information is usually made available by the processor only in privileged mode. https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/i386/sysconf.c;hb=HEAD */ /* uClibc, newlib, dietlibc, musl, Bionic do not have this. */ # if HAVE_UNISTD_H && ( \ defined _SC_LEVEL1_DCACHE_LINESIZE || \ defined _SC_LEVEL2_CACHE_LINESIZE || \ defined _SC_LEVEL3_CACHE_LINESIZE || \ defined _SC_LEVEL4_CACHE_LINESIZE) { static const int names[] = { # ifdef _SC_LEVEL1_DCACHE_LINESIZE _SC_LEVEL1_DCACHE_LINESIZE, # endif # ifdef _SC_LEVEL2_CACHE_LINESIZE _SC_LEVEL2_CACHE_LINESIZE, # endif # ifdef _SC_LEVEL3_CACHE_LINESIZE _SC_LEVEL3_CACHE_LINESIZE, # endif # ifdef _SC_LEVEL4_CACHE_LINESIZE _SC_LEVEL4_CACHE_LINESIZE # endif }; const int *name; long result = 0; for(name = names; name != arrayend(names); ++name) { long sysconf_result = sysconf(*name); /* Can return -1 or 0 on failure. */ if(sysconf_result > result) result = sysconf_result; } if(result) return result; /* Currently, this fails for every platform that isn't x86. Perhaps future versions will support other processors? */ } # endif # if defined __MACH__ && defined __APPLE__ { uint32_t result; /* sysctl.h says that hw.cachelinesize is a CTLTYPE_INT. */ size_t size = sizeof(result); static const int name[] = {CTL_HW, HW_CACHELINE}; if(!sysctl((int *)name, 2, &result, &size, NULL, 0)) /* (int *) is for OS X. */ { assert(size == sizeof(result)); return result; }; } # endif /* Guess based on the CPU type. */ return _CACHE_LINE_SIZE; } const pthread_mutex_t mutex_initializer = # if defined _GNU_SOURCE && !defined NDEBUG PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP # else PTHREAD_MUTEX_INITIALIZER # endif ; const pthread_cond_t cond_initializer = PTHREAD_COND_INITIALIZER; static int _has_pthread = 0; /* Initialize when needed. */ static int _cache_line_size = sizeof(void *); /* This is actually the init function for various things in here. */ int threads_available(Display *dpy) { /* This is maybe not thread-safe, but: this should -- and generally will -- be called before the program launches its second thread. */ if(!_has_pthread) { # if _POSIX_THREADS _has_pthread = _POSIX_THREADS; # else _has_pthread = sysconf(_SC_THREADS); # endif if(_has_pthread >= 0) { if(get_boolean_resource(dpy, "useThreads", "Boolean")) { _cache_line_size = _get_cache_line_size(); assert(_cache_line_size >= sizeof(void *)); assert(IS_POWER_OF_2(_cache_line_size)); } else { _has_pthread = -1; } } } return _has_pthread; } #endif /* HAVE_PTHREAD */ /* hardware_concurrency() - Various platforms offer various statistics that look like they should be useful: sysconf(_SC_NPROCESSORS_ONLN) (i.e. the number of 'online' processors) in particular is available on many Unixes, and is frequently used for functions like hardware_concurrency(). But 'online' is somewhat ambiguous; it can mean: 1. The number of CPU cores that are not (temporarily) asleep. (e.g. Android can sometimes put cores to sleep if they aren't being used, and this is reflected in _SC_NPROCESSORS_ONLN.) 2. The maximum number of CPU cores that can be provided to this application, as currently set by the system administrator. (2) is the one that hardware_concurrency() ultimately needs. */ /* Shamelessly plagarized from Boost.Thread and Stack Overflow . GNU libstdc++ has some of this too, see thread::hardware_concurrency() in thread.cc. http://gcc.gnu.org/viewcvs/gcc/trunk/libstdc%2B%2B-v3/src/c%2B%2B11/thread.cc?view=markup This might not work right on less common systems for various reasons. */ #if HAVE_PTHREAD # if defined __APPLE__ && defined __MACH__ || \ defined __FreeBSD__ || \ defined __OpenBSD__ || \ defined __NetBSD__ || \ defined __DragonFly__ || \ defined __minix /* BSD Unixes use sysctl(3) for this. Some BSDs also support sysconf(3) for this, but in each case this was added after sysctl(3). Linux: sysctl is present, but strongly deprecated. Minix uses the NetBSD userspace, so it has both this and sysconf(3). QNX: sysctl is present for kern.* and net.*, but it doesn't say anything about hw.* */ /* __APPLE__ without __MACH__ is OS 9 or earlier. __APPLE__ with __MACH__ is OS X. */ /* The usual thing to do here is for sysctl(3) to call __sysctl(2). http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/gen/sysctl.c?only_with_tag=HEAD http://svnweb.freebsd.org/base/head/lib/libc/gen/sysctl.c?view=markup */ /* OS X: Xcode Instruments (as of Xcode 4; Apple likes to move things like this around) can disable CPUs as a debugging tool. Instruments -> Preferences... (Command-,) -> General -> Active Processor Cores FreeBSD, OpenBSD: It doesn't look like CPUs can be disabled. NetBSD: CPUs can be disabled manually through cpuctl(8). */ # include /* FreeBSD: sys/sysctl.h needs sys/types.h, but the one doesn't bring the other in automatically. */ # include # include static unsigned _hardware_concurrency(void) { int count; size_t size = sizeof(count); # if defined __APPLE__ && defined __MACH__ /* Apple sez: sysctl("hw.logicalcpu") is affected by the "current power management mode", so use hw.logicalcpu_max. */ /* https://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/sysctl.3.html */ if(!sysctlbyname("hw.logicalcpu_max", &count, &size, NULL, 0)) /* Preferred on more recent Darwin. */ { assert(size == sizeof(count)); return count; } # endif # if defined HW_NCPUONLINE /* NetBSD has this. */ { static const int name[] = {CTL_HW, HW_NCPUONLINE}; if(!sysctl(name, 2, &count, &size, NULL, 0)) { assert(size == sizeof(count)); return count; } } # endif { static const int name[] = {CTL_HW, HW_NCPU}; if(!sysctl((int *)name, 2, &count, &size, NULL, 0)) /* (int *) is for OS X. */ { assert(size == sizeof(count)); return count; } } return 1; } # elif HAVE_UNISTD_H && defined _SC_NPROCESSORS_ONLN /* Supported by: Linux 2.0 was the first version to provide SMP support via clone(2). (e)glibc on Linux provides this, which in turn uses get_nprocs(). get_nprocs in turn uses /sys/devices/system/cpu/online, /proc/stat, or /proc/cpuinfo, whichever's available. https://sourceware.org/git/?p=glibc.git;a=blob;f=posix/sysconf.c;hb=HEAD https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/getsysstats.c;hb=HEAD Linux usually isn't configured to auto-enable/disable cores. SunOS (Solaris), sometime between 4.1.3 and 5.5.1. This includes all open source derivatives of 5.10. (Illumos, OpenIndiana) sysconf(_SC_NPROCESSORS_ONLN) call _sysconfig(2). Not sure if CPU power management (enabled by default, see cpupm and cpu_deep_idle in power.conf(4)) affects this. psradm(1M) can bring up/down CPU cores, which affects sysconf(_SC_NPROCESSORS_ONLN). http://src.illumos.org/source/xref/illumos-gate/usr/src/lib/libc/port/gen/sysconf.c Minix 3.2, at the latest. (This is the first version to support SMP.) AIX 7.1, probably earlier. Also: Mac OS X apparently has this on 10.5+. FreeBSD 5.0, NetBSD 5.0 also have this. They both call sysctl(3). http://svnweb.freebsd.org/base/head/lib/libc/gen/sysconf.c?view=markup http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/gen/sysconf.c?only_with_tag=HEAD QNX has sysconf(3), but it doesn't have _SC_NPROCESSORS_*. */ static unsigned _hardware_concurrency(void) { long count = sysconf(_SC_NPROCESSORS_ONLN); return count > 0 ? count : 1; } # else static unsigned _hardware_concurrency(void) { return 1; /* Fallback for unknown systems. */ } # endif #endif unsigned hardware_concurrency(Display *dpy) { #if HAVE_PTHREAD if(threads_available(dpy) >= 0) return _hardware_concurrency(); #endif return 1; } /* thread_memory_alignment() - */ unsigned thread_memory_alignment(Display *dpy) { (void)threads_available(dpy); #if HAVE_PTHREAD return _cache_line_size; #else return sizeof(void *); #endif } /* Thread pool - */ static unsigned _threadpool_count_serial(struct threadpool *self) { #if HAVE_PTHREAD assert(_has_pthread); if(_has_pthread >= 0) return self->count ? 1 : 0; #endif return self->count; } static void _serial_destroy(struct threadpool *self) { void *thread = self->serial_threads; unsigned i, count = _threadpool_count_serial(self); for(i = 0; i != count; ++i) { self->thread_destroy(thread); thread = (char *)thread + self->thread_size; } free(self->serial_threads); } #if HAVE_PTHREAD static void _parallel_abort(struct threadpool *self) { assert(self->count > 1); self->count = self->parallel_unfinished + 1 /* The '+ 1' should technically be _threadpool_count_serial(self). */; PTHREAD_VERIFY(pthread_cond_broadcast(&self->cond)); } struct _parallel_startup_type { struct threadpool *parent; int (*thread_create)(void *self, struct threadpool *pool, unsigned id); int last_errno; }; static unsigned _threadpool_count_parallel(struct threadpool *self) { assert(_has_pthread); assert(self->count >= 1); return self->count - 1 /* The '- 1' should technically be _threadpool_count_serial(self). */; } static void *_start_routine(void *startup_raw); /* Tricky lock sequence: _add_next_thread unlocks on error. */ static void _add_next_thread(struct _parallel_startup_type *self) { assert(!self->last_errno); if(self->parent->parallel_unfinished == _threadpool_count_parallel(self->parent)) { PTHREAD_VERIFY(pthread_cond_broadcast(&self->parent->cond)); } else { pthread_t *thread = self->parent->parallel_threads + self->parent->parallel_unfinished; self->last_errno = pthread_create(thread, NULL, _start_routine, self); if(self->last_errno) _parallel_abort(self->parent); } } static void *_thread_free_and_unlock(struct threadpool *self, void *thread) { PTHREAD_VERIFY(pthread_mutex_unlock(&self->mutex)); # if !HAVE_ALLOCA thread_free(thread); # endif return NULL; } static void *_thread_destroy_and_unlock(struct threadpool *self, void *thread) { self->thread_destroy(thread); return _thread_free_and_unlock(self, thread); } /* At one point, one of the threads refused to destroy itself at the end. Why?! And why won't it happen again? */ static void *_start_routine(void *startup_raw) { struct _parallel_startup_type *startup = (struct _parallel_startup_type *)startup_raw; struct threadpool *parent = startup->parent; void *thread; PTHREAD_VERIFY(pthread_mutex_lock(&parent->mutex)); ++parent->parallel_unfinished; # if HAVE_ALLOCA /* Ideally, the thread object goes on the thread's stack. This guarantees no false sharing with other threads, and in a NUMA configuration, ensures that the thread object is using memory from the right node. */ thread = alloca(parent->thread_size); # else startup->last_errno = thread_malloc(&thread, NULL, parent->thread_size); if(startup->last_errno) { _parallel_abort(parent); PTHREAD_VERIFY(pthread_mutex_unlock(&parent->mutex)); return NULL; } # endif /* Setting thread affinity for threads running in lock-step can cause delays and jumpiness. Ideally, there would be some way to recommend (but not require) that a thread run on a certain core/set of cores. */ /* Neither Linux nor libnuma seem to support the concept of a preferred/ideal CPU for a thread/process. */ /* Untested. */ /* { cpu_set_t cpu_set; CPU_ZERO(&cpu_set); CPU_SET(&cpu_set, &parent._threads_unfinished); pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpu_set); } */ startup->last_errno = startup->thread_create(thread, parent, parent->parallel_unfinished); if(startup->last_errno) { _parallel_abort(parent); return _thread_free_and_unlock(parent, thread); /* Tail calls make everything better. */ } assert(!startup->last_errno); _add_next_thread(startup); /* Calls _parallel_abort() on failure. */ if(startup->last_errno) return _thread_destroy_and_unlock(parent, thread); for(;;) { for(;;) { /* This must come before the '.threads' check, otherwise if threadpool_destroy is called immediately after a run starts, then it's possible that not all threads would be launched for the final run. This can cause deadlock in conjunction with things like barriers. */ if(parent->parallel_pending) break; /* Start a run. */ if(!parent->parallel_threads) return _thread_destroy_and_unlock(parent, thread); /* Threads are shutting down. */ PTHREAD_VERIFY(pthread_cond_wait(&parent->cond, &parent->mutex)); } --parent->parallel_pending; if(!parent->parallel_pending) PTHREAD_VERIFY(pthread_cond_broadcast(&parent->cond)); /* All threads have started processing, other threads can finish. */ PTHREAD_VERIFY(pthread_mutex_unlock(&parent->mutex)); parent->thread_run(thread); PTHREAD_VERIFY(pthread_mutex_lock(&parent->mutex)); # if 0 if(!parent->parallel_threads) /* I don't think this is necessary anymore. */ break; # endif /* Don't loop around until all other threads have begun processing. */ /* I suspect it doesn't matter whether this comes before or after the threads_unfinished check. */ while(parent->parallel_pending) PTHREAD_VERIFY(pthread_cond_wait(&parent->cond, &parent->mutex)); --parent->parallel_unfinished; if(!parent->parallel_unfinished) PTHREAD_VERIFY(pthread_cond_broadcast(&parent->cond)); /* All threads done for now. */ } /* return _thread_destroy_and_unlock(parent, thread); */ } static void _unlock_and_destroy(struct threadpool *self) { pthread_t *threads; threads = self->parallel_threads; self->parallel_threads = NULL; if(threads) PTHREAD_VERIFY(pthread_cond_broadcast(&self->cond)); PTHREAD_VERIFY(pthread_mutex_unlock(&self->mutex)); if(threads) { unsigned i, count = _threadpool_count_parallel(self); for(i = 0; i != count; ++i) PTHREAD_VERIFY(pthread_join(threads[i], NULL)); free(threads); PTHREAD_VERIFY(pthread_cond_destroy(&self->cond)); PTHREAD_VERIFY(pthread_mutex_destroy(&self->mutex)); } _serial_destroy(self); } #endif /* HAVE_PTHREAD */ int threadpool_create(struct threadpool *self, const struct threadpool_class *cls, Display *dpy, unsigned count) { (void)threads_available(dpy); self->count = count; /* If threads are not present, run each "thread" in sequence on the calling thread. Otherwise, only run the first thread on the main thread. */ assert(cls); self->thread_size = cls->size; self->thread_destroy = cls->destroy; { void *thread; unsigned i, count_serial = _threadpool_count_serial(self); if(count_serial) { thread = malloc(cls->size * count_serial); if(!thread) return ENOMEM; } else { /* Might as well skip the malloc. */ thread = NULL; } self->serial_threads = thread; for(i = 0; i != count_serial; ++i) { int error = cls->create(thread, self, i); if(error) { self->count = i; _serial_destroy(self); return error; } thread = (char *)thread + self->thread_size; } } #if HAVE_PTHREAD assert(_has_pthread); /* _has_pthread should be either -1 or >0. */ if(_has_pthread >= 0) { unsigned count_parallel = _threadpool_count_parallel(self); self->mutex = mutex_initializer; self->cond = cond_initializer; self->parallel_pending = 0; self->parallel_unfinished = 0; if(!count_parallel) { self->parallel_threads = NULL; return 0; } self->parallel_threads = malloc(sizeof(pthread_t) * count_parallel); if(!self->parallel_threads) return ENOMEM; { struct _parallel_startup_type startup; startup.parent = self; startup.thread_create = cls->create; startup.last_errno = 0; PTHREAD_VERIFY(pthread_mutex_lock(&self->mutex)); _add_next_thread(&startup); if(!startup.last_errno) { while(self->parallel_unfinished != count_parallel && self->parallel_threads) PTHREAD_VERIFY(pthread_cond_wait(&self->cond, &self->mutex)); } /* This must come after the if(!startup.last_errno). */ if(startup.last_errno) { _unlock_and_destroy(self); } else { self->parallel_unfinished = 0; PTHREAD_VERIFY(pthread_mutex_unlock(&self->mutex)); } return startup.last_errno; } } #endif return 0; } void threadpool_destroy(struct threadpool *self) { #if HAVE_PTHREAD if(_has_pthread >= 0) { PTHREAD_VERIFY(pthread_mutex_lock(&self->mutex)); _unlock_and_destroy(self); return; } #endif _serial_destroy(self); } void threadpool_run(struct threadpool *self, void (*func)(void *)) { #if HAVE_PTHREAD if(_has_pthread >= 0) { unsigned count = _threadpool_count_parallel(self); PTHREAD_VERIFY(pthread_mutex_lock(&self->mutex)); /* Do not call threadpool_run() twice without a threadpool_wait() in the middle. */ assert(!self->parallel_pending); assert(!self->parallel_unfinished); self->parallel_pending = count; self->parallel_unfinished = count; self->thread_run = func; PTHREAD_VERIFY(pthread_cond_broadcast(&self->cond)); PTHREAD_VERIFY(pthread_mutex_unlock(&self->mutex)); } #endif /* It's perfectly valid to move this to the beginning of threadpool_wait(). */ { void *thread = self->serial_threads; unsigned i, count = _threadpool_count_serial(self); for(i = 0; i != count; ++i) { func(thread); thread = (char *)thread + self->thread_size; } } } void threadpool_wait(struct threadpool *self) { #if HAVE_PTHREAD if(_has_pthread >= 0) { PTHREAD_VERIFY(pthread_mutex_lock(&self->mutex)); while(self->parallel_unfinished) PTHREAD_VERIFY(pthread_cond_wait(&self->cond, &self->mutex)); PTHREAD_VERIFY(pthread_mutex_unlock(&self->mutex)); } #endif } /* io_thread - */ #if HAVE_PTHREAD /* Without threads at compile time, there's only stubs in thread_util.h. */ # define VERSION_CHECK(cc_major, cc_minor, req_major, req_minor) \ ((cc_major) > (req_major) || \ (cc_major) == (req_major) && (cc_minor) >= (req_minor)) # if defined(__GNUC__) && (__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__ >= 7) || \ defined(__clang__) && \ (!defined(__apple_build_version__) && VERSION_CHECK(__clang_major__, __clang_minor__, 3, 1) || \ defined(__apple_build_version__) && VERSION_CHECK(__clang_major__, __clang_minor__, 3, 1)) || \ defined(__ICC) && __ICC >= 1400 /* Clang 3.0 has a partial implementation of GNU atomics; 3.1 rounds it out. http://llvm.org/viewvc/llvm-project/cfe/tags/RELEASE_30/final/include/clang/Basic/Builtins.def?view=markup http://llvm.org/viewvc/llvm-project/cfe/tags/RELEASE_31/final/include/clang/Basic/Builtins.def?view=markup Apple changes the Clang version to track Xcode versions; use __apple_build_version__ to distinguish between the two. Xcode 4.3 uses Apple LLVM 3.1, which corresponds to Clang 3.1. https://en.wikipedia.org/wiki/Xcode Earlier versions of Intel C++ may also support these intrinsics. */ #define _status_load(status) (__atomic_load_n((status), __ATOMIC_SEQ_CST)) #define _status_exchange(obj, desired) (__atomic_exchange_n((obj), (desired), __ATOMIC_SEQ_CST)) /* C11 atomics are around the corner, but they're not here yet for many systems. (Including mine.) */ /* #elif __STDC_VERSION__ >= 201112l && !defined __STDC_NO_ATOMICS__ #include #define _status_load(status) (atomic_load((status))) #define _status_exchange(obj, desired) (atomic_exchange((obj), (desired))) */ /* Solaris profiles atomic ops on at least Solaris 10. See atomic_swap(3C) and membar_ops(3C). This would probably also need a snippet in configure.in. http://graegert.com/programming/using-atomic-operations-in-c-on-solaris-10 */ # else /* No atomic variables, so here's some ugly mutex-based code instead. */ /* Nothing ever destroys this mutex. */ pthread_mutex_t _global_mutex = PTHREAD_MUTEX_INITIALIZER; #define _lock() PTHREAD_VERIFY(pthread_mutex_lock(&_global_mutex)) #define _unlock() PTHREAD_VERIFY(pthread_mutex_unlock(&_global_mutex)) static enum _io_thread_status _status_load(enum _io_thread_status *status) { enum _io_thread_status result; _lock(); result = *status; _unlock(); return result; } static enum _io_thread_status _status_exchange(enum _io_thread_status *obj, enum _io_thread_status desired) { enum _io_thread_status result; _lock(); result = *obj; *obj = desired; _unlock(); return result; } # endif void *io_thread_create(struct io_thread *self, void *parent, void *(*start_routine)(void *), Display *dpy, unsigned stacksize) { if(threads_available(dpy) >= 0) { int error; pthread_attr_t attr; pthread_attr_t *attr_ptr = NULL; if(stacksize) { attr_ptr = &attr; if(pthread_attr_init(&attr)) return NULL; # if defined _POSIX_SOURCE || defined _POSIX_C_SOURCE || defined _XOPEN_SOURCE /* PTHREAD_STACK_MIN needs the above test. */ assert(stacksize >= PTHREAD_STACK_MIN); # endif PTHREAD_VERIFY(pthread_attr_setstacksize(&attr, stacksize)); } /* This doesn't need to be an atomic store, since pthread_create(3) "synchronizes memory with respect to other threads". http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_11 */ self->status = _io_thread_working; error = pthread_create(&self->thread, attr_ptr, start_routine, parent); assert(!error || error == EAGAIN); if(error) parent = NULL; if(attr_ptr) PTHREAD_VERIFY(pthread_attr_destroy(attr_ptr)); return parent; } return NULL; } int io_thread_return(struct io_thread *self) { if(_has_pthread >= 0) { enum _io_thread_status old_status = _status_exchange(&self->status, _io_thread_done); assert(old_status == _io_thread_working || old_status == _io_thread_cancelled); return old_status != _io_thread_working; } return 0; } int io_thread_is_done(struct io_thread *self) { if(_has_pthread >= 0) { int result = _status_load(&self->status); assert(result != _io_thread_cancelled); return result; } return 1; } int io_thread_cancel(struct io_thread *self) { if(_has_pthread >= 0) { enum _io_thread_status old_status = _status_exchange(&self->status, _io_thread_cancelled); assert(old_status == _io_thread_working || old_status == _io_thread_done); PTHREAD_VERIFY(pthread_detach(self->thread)); return old_status != _io_thread_working; } return 0; } void io_thread_finish(struct io_thread *self) { if(_has_pthread >= 0) { # ifndef NDEBUG enum _io_thread_status status = _status_load(&self->status); assert(status == _io_thread_working || status == _io_thread_done); # endif PTHREAD_VERIFY(pthread_join(self->thread, NULL)); assert(_status_load(&self->status) == _io_thread_done); } } #endif /* HAVE_PTHREAD */ xscreensaver-5.34/utils/async_netdb.c000664 000767 000767 00000025656 12415276745 017513 0ustar00jwzjwz000000 000000 /* vi: set tw=78: */ /* async_netdb.c, Copyright (c) Dave Odell * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * 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. * * Threaded versions of get(name/addr)info to replace calls to * gethostby(name/addr), for Sonar. */ #include "async_netdb.h" #include "thread_util.h" #include #include #include #include #include #include /* This is very much system-dependent, but hopefully 64K covers it just about everywhere. The threads here shouldn't need much. */ #define ASYNC_NETDB_STACK 65536 #if ASYNC_NETDB_USE_GAI # define _get_addr_family(addr) ((addr)->ss_family) # define _get_addr_len(addr) ((addr)->ss_len) static int _has_threads; int _async_netdb_is_done (struct io_thread *io) { if (_has_threads >= 0) return io_thread_is_done (io); return 1; } #else /* ASYNC_NETDB_USE_GAI */ # define _get_addr_family(addr) ((addr)->sin_family) # define _get_addr_len(addr) ((addr)->sin_len) static const int _has_threads = -1; # if ASYNC_NETDB_FAKE_EAI const char *_async_netdb_strerror (int errcode) { /* (h)strerror should return messages in the user's preferred language. */ /* On Solaris, gethostbyname(3) is in libnsl, but hstrerror(3) is in libresolv. Not that it matters, since Solaris has real gai_strerror in libsocket. */ switch (errcode) { case EAI_NONAME: return hstrerror (HOST_NOT_FOUND); case EAI_AGAIN: return hstrerror (TRY_AGAIN); case EAI_FAIL: return hstrerror (NO_RECOVERY); case EAI_MEMORY: return strerror (ENOMEM); } /* case EAI_SYSTEM: default: */ return strerror (EINVAL); /* No good errno equivalent here. */ } # endif /* ASYNC_NETDB_FAKE_EAI */ #endif /* !ASYNC_NETDB_USE_GAI */ static int _translate_h_errno (int error) { switch (error) { case HOST_NOT_FOUND: case NO_DATA: return EAI_NONAME; case TRY_AGAIN: return EAI_AGAIN; } /* case NO_RECOVERY: default: */ return EAI_FAIL; } /* async_name_from_addr - */ #if ASYNC_NETDB_USE_GAI static void * _async_name_from_addr_thread (void *self_raw) { /* The stack is unusually small here. If this crashes, you may need to bump the value of ASYNC_NETDB_STACK. */ async_name_from_addr_t self = (async_name_from_addr_t)self_raw; /* getnameinfo() is thread-safe, gethostbyaddr() is not. */ self->gai_error = getnameinfo ((void *)&self->param.addr, self->param.addrlen, self->host, sizeof(self->host), NULL, 0, NI_NAMEREQD); /* Removing NI_MAKEREQD would require a call to inet_ntoa in async_name_from_addr_finish. */ self->errno_error = errno; if (io_thread_return (&self->io)) thread_free(self); return NULL; } #endif /* ASYNC_NETDB_USE_GAI */ static void _async_name_from_addr_set_param (struct _async_name_from_addr_param *self, const struct sockaddr *addr, socklen_t addrlen) { self->addrlen = addrlen; memcpy (&self->addr, addr, addrlen); #if HAVE_STRUCT_SOCKADDR_SA_LEN _get_addr_len (&self->addr) = addrlen; /* The BSDs need this. */ #endif } async_name_from_addr_t async_name_from_addr_start (Display *dpy, const struct sockaddr *addr, socklen_t addrlen) { assert (addrlen); assert (addrlen <= sizeof (async_netdb_sockaddr_storage_t)); #if ASYNC_NETDB_USE_GAI _has_threads = threads_available (dpy); if (_has_threads >= 0) { async_name_from_addr_t self, result; if (thread_malloc ((void **)&self, dpy, sizeof (struct async_name_from_addr))) return NULL; _async_name_from_addr_set_param (&self->param, addr, addrlen); result = io_thread_create (&self->io, self, _async_name_from_addr_thread, dpy, ASYNC_NETDB_STACK); if (!result) thread_free (self); return result; } #endif /* ASYNC_NETDB_USE_GAI */ { struct _async_name_from_addr_param *result = (struct _async_name_from_addr_param *) malloc (sizeof (struct _async_name_from_addr_param)); if (result) _async_name_from_addr_set_param (result, addr, addrlen); return (async_name_from_addr_t)result; } } #if ASYNC_NETDB_USE_GAI void async_name_from_addr_cancel (async_name_from_addr_t self) { if (_has_threads >= 0) { if(io_thread_cancel (&self->io)) thread_free (self); } else { free (self); } } #endif /* ASYNC_NETDB_USE_GAI */ int async_name_from_addr_finish (async_name_from_addr_t self_raw, char **host, int *errno_error) { #if ASYNC_NETDB_USE_GAI if (_has_threads >= 0) { async_name_from_addr_t self = self_raw; int gai_error; io_thread_finish (&self->io); gai_error = self->gai_error; if (gai_error) { if (errno_error) *errno_error = self->errno_error; *host = NULL; /* For safety's sake. */ } else { *host = strdup(self->host); if (!*host) gai_error = EAI_MEMORY; } thread_free (self); return gai_error; } #endif /* ASYNC_NETDB_USE_GAI */ { struct _async_name_from_addr_param *self = (struct _async_name_from_addr_param *)self_raw; const struct hostent *he; int error; const void *raw_addr; socklen_t addrlen; switch (_get_addr_family (&self->addr)) { case AF_INET: raw_addr = &((const struct sockaddr_in *)&self->addr)->sin_addr; addrlen = 4; break; #if ASYNC_NETDB_USE_GAI case AF_INET6: raw_addr = &((const struct sockaddr_in6 *)&self->addr)->sin6_addr; addrlen = 16; break; #endif /* ASYNC_NETDB_USE_GAI */ default: return EAI_NONAME; } he = gethostbyaddr(raw_addr, addrlen, _get_addr_family (&self->addr)); error = h_errno; free (self); if (!he) { *host = NULL; /* For safety's sake. */ return _translate_h_errno(error); } if (!he->h_name) return EAI_NONAME; *host = strdup (he->h_name); if (!*host) return EAI_MEMORY; return 0; } } /* async_addr_from_name - */ static char * _async_addr_from_name_hostname (async_addr_from_name_t self) { return (char *)(self + 1); } static void _async_addr_from_name_free (async_addr_from_name_t self) { #if ASYNC_NETDB_USE_GAI if (self->res) /* FreeBSD won't do freeaddrinfo (NULL). */ freeaddrinfo (self->res); #endif thread_free (self); } #if ASYNC_NETDB_USE_GAI static void * _async_addr_from_name_thread (void *self_raw) { /* The stack is unusually small here. If this crashes, you may need to bump the value of ASYNC_NETDB_STACK. */ async_addr_from_name_t self = (async_addr_from_name_t)self_raw; self->gai_error = getaddrinfo (_async_addr_from_name_hostname (self), NULL, NULL, &self->res); self->errno_error = errno; if (io_thread_return (&self->io)) _async_addr_from_name_free (self); return NULL; } #endif /* ASYNC_NETDB_USE_GAI */ /* getaddrinfo supports more than a hostname, but gethostbyname does not. */ async_addr_from_name_t async_addr_from_name_start (Display *dpy, const char *hostname) { async_addr_from_name_t self; if (thread_malloc ((void **)&self, dpy, sizeof(struct async_addr_from_name) + strlen(hostname) + 1)) return NULL; strcpy (_async_addr_from_name_hostname (self), hostname); #if ASYNC_NETDB_USE_GAI _has_threads = threads_available (dpy); self->res = NULL; if (_has_threads >= 0) { async_addr_from_name_t result = io_thread_create (&self->io, self, _async_addr_from_name_thread, dpy, ASYNC_NETDB_STACK); if (!result) thread_free(result); self = result; } #endif /* ASYNC_NETDB_USE_GAI */ return self; } #if ASYNC_NETDB_USE_GAI void async_addr_from_name_cancel (async_addr_from_name_t self) { if (_has_threads >= 0) { if (io_thread_cancel (&self->io)) _async_addr_from_name_free (self); } else { thread_free (self); } } #endif /* ASYNC_NETDB_USE_GAI */ /* async_name_from_addr_finish does sockaddr_in or sockaddr_in6. */ int async_addr_from_name_finish (async_addr_from_name_t self, void *addr, socklen_t *addrlen, int *errno_error) { #if ASYNC_NETDB_USE_GAI if (_has_threads >= 0) { int gai_error; io_thread_finish (&self->io); gai_error = self->gai_error; if (errno_error) *errno_error = self->errno_error; if (!gai_error) { struct addrinfo *ai = self->res; if (!ai) gai_error = EAI_NONAME; else { assert (ai->ai_addrlen <= sizeof (async_netdb_sockaddr_storage_t)); memcpy (addr, ai->ai_addr, ai->ai_addrlen); *addrlen = ai->ai_addrlen; } } _async_addr_from_name_free (self); return gai_error; } #endif /* ASYNC_NETDB_USE_GAI */ { struct hostent *he = gethostbyname (_async_addr_from_name_hostname (self)); int error = h_errno; void *raw_addr; async_netdb_sockaddr_storage_t *addr_storage = (async_netdb_sockaddr_storage_t *)addr; _async_addr_from_name_free (self); if (!he) return _translate_h_errno (error); switch (he->h_addrtype) { case AF_INET: { struct sockaddr_in *addr_in = (struct sockaddr_in *)addr; addr_in->sin_port = 0; raw_addr = &addr_in->sin_addr; *addrlen = sizeof(*addr_in); assert (he->h_length == 4); } break; #if ASYNC_NETDB_USE_GAI case AF_INET6: { struct sockaddr_in6 *addr_in6 = (struct sockaddr_in6 *)addr; addr_in6->sin6_port = 0; addr_in6->sin6_flowinfo = 0; raw_addr = &addr_in6->sin6_addr; *addrlen = sizeof(*addr_in6); assert (he->h_length == 16); } break; #endif /* ASYNC_NETDB_USE_GAI */ default: return EAI_NONAME; } #if HAVE_STRUCT_SOCKADDR_SA_LEN _get_addr_len (addr_storage) = *addrlen; #endif _get_addr_family (addr_storage) = he->h_addrtype; memcpy (raw_addr, he->h_addr_list[0], he->h_length); return 0; } } /* Local Variables: */ /* mode: c */ /* fill-column: 78 */ /* c-file-style: "gnu" */ /* c-basic-offset: 2 */ /* indent-tabs-mode: nil */ /* End: */ xscreensaver-5.34/utils/xft.c000644 000767 000767 00000021672 12533204075 015777 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 2014-2015 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ /* Compatibility layer using XDrawString, XDrawString16() or Xutf8DrawString(). This layer is used by X11 systems without Xft, and by MacOS / iOS. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifndef HAVE_XFT # include "utils.h" # include "resources.h" # include "xft.h" # include "utf8wc.h" extern const char *progname; struct _XftDraw { Display *dpy; Drawable drawable; GC gc; unsigned long pixel; Font fid; Visual *visual; Colormap colormap; }; XftFont * XftFontOpenXlfd (Display *dpy, int screen, _Xconst char *xlfd) { XftFont *ff = (XftFont *) calloc (1, sizeof(*ff)); if (!dpy || !xlfd) abort(); if (!ff) return 0; ff->xfont = XLoadQueryFont (dpy, xlfd); if (!ff->xfont) { free (ff); return 0; } ff->name = strdup (xlfd); ff->ascent = ff->xfont->ascent; ff->descent = ff->xfont->descent; ff->height = ff->ascent + ff->descent; # ifdef HAVE_XUTF8DRAWSTRING { unsigned i; // In the event of -*-random-* (under JWXYZ), get the actual XLFD, // otherwise we'll get another random font that doesn't match ff->xfont. char *xlfd_resolved = NULL; char **missing_charset_list_return; int missing_charset_count_return; char *def_string_return; char *ss; for (i = 0; i != ff->xfont->n_properties; ++i) { if (ff->xfont->properties[i].name == XA_FONT) { xlfd_resolved = XGetAtomName (dpy, ff->xfont->properties[i].card32); if (xlfd_resolved) xlfd = xlfd_resolved; break; } } ss = (char *) malloc (strlen(xlfd) + 10); strcpy (ss, xlfd); strcat (ss, ",*"); ff->fontset = XCreateFontSet (dpy, ss, &missing_charset_list_return, &missing_charset_count_return, &def_string_return); # if 0 { int i; for (i = 0; i < missing_charset_count_return; i++) fprintf (stderr, "%s: missing charset: %s\n", ss, missing_charset_list_return[i]); } # endif /* Apparently this is not to be freed. */ /* if (def_string_return) XFree (def_string_return); */ if (missing_charset_list_return) XFreeStringList (missing_charset_list_return); free (ss); free (xlfd_resolved); } # endif return ff; } void XftFontClose (Display *dpy, XftFont *font) { if (!dpy || !font) abort(); free (font->name); XFreeFont (dpy, font->xfont); # ifdef HAVE_XUTF8DRAWSTRING XFreeFontSet (dpy, font->fontset); # endif free (font); } Bool XftColorAllocName (Display *dpy, _Xconst Visual *visual, Colormap cmap, _Xconst char *name, XftColor *result) { XColor color; if (!dpy || !visual || !name || !result) abort(); if (! XParseColor (dpy, cmap, name, &color)) { fprintf (stderr, "%s: can't parse color %s", progname, name); return False; } else if (! XAllocColor (dpy, cmap, &color)) { fprintf (stderr, "%s: couldn't allocate color %s", progname, name); return False; } else { XRenderColor color2; color2.red = color.red; color2.green = color.green; color2.blue = color.blue; color2.alpha = 0xFFFF; XftColorAllocValue (dpy, visual, cmap, &color2, result); result->pixel = color.pixel; return True; } } static short maskbase (unsigned long m) { short i; if (!m) return 0; i = 0; while (! (m&1)) { m >>= 1; i++; } return i; } static short masklen (unsigned long m) { unsigned long y; y = (m >> 1) & 033333333333; y = m - y - ((y >>1) & 033333333333); return (short) (((y + (y >> 3)) & 030707070707) % 077); } Bool XftColorAllocValue (Display *dpy, _Xconst Visual *visual, Colormap cmap, _Xconst XRenderColor *color, XftColor *result) { if (!dpy || !visual || !color || !result) abort(); if (visual->class == TrueColor) { int red_shift, red_len; int green_shift, green_len; int blue_shift, blue_len; red_shift = maskbase (visual->red_mask); red_len = masklen (visual->red_mask); green_shift = maskbase (visual->green_mask); green_len = masklen (visual->green_mask); blue_shift = maskbase (visual->blue_mask); blue_len = masklen (visual->blue_mask); result->pixel = (((color->red >> (16 - red_len)) << red_shift) | ((color->green >> (16 - green_len)) << green_shift) | ((color->blue >> (16 - blue_len)) << blue_shift)); # ifdef HAVE_COCOA result->pixel |= BlackPixel(dpy, 0); /* alpha */ # endif } else { XColor xcolor; xcolor.red = color->red; xcolor.green = color->green; xcolor.blue = color->blue; if (!XAllocColor (dpy, cmap, &xcolor)) return False; result->pixel = xcolor.pixel; } result->color.red = color->red; result->color.green = color->green; result->color.blue = color->blue; result->color.alpha = color->alpha; return True; } void XftColorFree (Display *dpy, Visual *visual, Colormap cmap, XftColor *color) { if (!dpy || !visual || !color) abort(); if (visual->class != TrueColor) XFreeColors (dpy, cmap, &color->pixel, 1, 0); } XftDraw * XftDrawCreate (Display *dpy, Drawable drawable, Visual *visual, Colormap colormap) { XftDraw *dd = (XftDraw *) calloc (1, sizeof(*dd)); if (!dpy || !drawable || !visual) abort(); if (!dd) return 0; dd->dpy = dpy; dd->drawable = drawable; dd->visual = visual; dd->colormap = colormap; dd->gc = XCreateGC (dpy, drawable, 0, 0); return dd; } void XftDrawDestroy (XftDraw *draw) { if (!draw) abort(); XFreeGC (draw->dpy, draw->gc); free (draw); } void XftTextExtentsUtf8 (Display *dpy, XftFont *font, _Xconst FcChar8 *string, int len, XGlyphInfo *extents) { XCharStruct overall; if (!dpy || !font || !string || !extents) abort(); # ifdef HAVE_XUTF8DRAWSTRING { XRectangle ink; int advancement = Xutf8TextExtents (font->fontset, (const char *) string, len, &ink, 0); XmbRectangle_to_XCharStruct (ink, overall, advancement); } # else /* !HAVE_XUTF8DRAWSTRING */ { char *s2 = (char *) malloc (len + 1); int direction, ascent, descent; XChar2b *s16; int s16_len = 0; strncpy (s2, (char *) string, len); s2[len] = 0; s16 = utf8_to_XChar2b (s2, &s16_len); XTextExtents16 (font->xfont, s16, s16_len, &direction, &ascent, &descent, &overall); free (s2); free (s16); } # endif /* !HAVE_XUTF8DRAWSTRING */ XCharStruct_to_XGlyphInfo (overall, *extents); } void XftDrawStringUtf8 (XftDraw *draw, _Xconst XftColor *color, XftFont *font, int x, int y, _Xconst FcChar8 *string, int len) { if (!draw || !color || !font || !string) abort(); if (color->pixel != draw->pixel) { XSetForeground (draw->dpy, draw->gc, color->pixel); draw->pixel = color->pixel; } if (font->xfont->fid != draw->fid) { XSetFont (draw->dpy, draw->gc, font->xfont->fid); draw->fid = font->xfont->fid; } # ifdef HAVE_XUTF8DRAWSTRING /* If we have Xutf8DrawString, use it instead of XDrawString16 because there is some chance it will handle characters of more than 16 bits (beyond the Basic Multilingual Plane). */ /* #### I guess I don't really understand how FontSet works, because when using the real X11 implementation of Xutf8DrawString, this seems to just truncate the text at the first non-ASCII character. The XDrawString16() path works, however, at the expense of losing everything above Basic Multilingual. However, that path is only taken on X11 systems that are old enough to not have libXft, which means that the chance of Unicode working was already slim. */ Xutf8DrawString (draw->dpy, draw->drawable, font->fontset, draw->gc, x, y, (const char *) string, len); # else { int s16_len = 0; char *s2 = (char *) malloc (len + 1); XChar2b *s16; strncpy (s2, (char *) string, len); s2[len] = 0; s16 = utf8_to_XChar2b (s2, &s16_len); free (s2); XDrawString16 (draw->dpy, draw->drawable, draw->gc, x, y, s16, s16_len); free (s16); } # endif } #else /* HAVE_XFT */ const int Wempty_translation_unit_is_a_dumb_warning = 0; #endif /* HAVE_XFT */ xscreensaver-5.34/utils/utf8wc.c000644 000767 000767 00000072056 12537401705 016423 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 2014-2015 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #ifdef HAVE_COCOA # include "jwxyz.h" # elif defined(HAVE_ANDROID) # include "jwxyz.h" #else /* !HAVE_COCOA */ # include #endif #include "utf8wc.h" /* "Unicode Replacement Character", displayed in lieu of invalid characters. */ # define INVALID 0xFFFD /* Mask the number to be within the valid range of unicode characters. */ static unsigned long uc_truncate (unsigned long uc) { uc &= 0x7FFFFFFFL; /* Unicode is 31 bits */ if (uc > 0x10FFFF) uc = INVALID; /* But UTF-8 is 4 bytes */ if (uc == 0) uc = INVALID; /* no nulls */ if (uc >= 0xD800 && uc <= 0xDFFF) /* Reserved for use with UTF-16: not a real character. */ uc = INVALID; return uc; } /* Parse the first UTF8 character at the front of the string. Return the Unicode character, and the number of bytes read. */ long utf8_decode (const unsigned char *in, long length, unsigned long *unicode_ret) { const unsigned char *start = in; const unsigned char *end = in + length; unsigned long uc = INVALID; unsigned long min = 0; unsigned char c; if (length <= 0) goto DONE; c = *in++; # define PREMATURE_EOF { in = end; goto DONE; } if ((c & 0xC0) == 0x80) { /* 10xxxxxx - lonely continuation byte */ uc = INVALID; } else if ((c & 0x80) == 0) { /* 0xxxxxxx - 7 bits in 1 byte */ uc = (c & 0x7F); /* 01111111 */ } else if ((c & 0xE0) == 0xC0) { /* 110xxxxx - 11 bits in 2 bytes */ if (in+1 > end) PREMATURE_EOF; min = 1 << 7; uc = (((c & 0x1F) << 6) | /* 00011111------ */ (in[0] & 0x3F)); /* 00111111 */ in += 1; } else if ((c & 0xF0) == 0xE0) { /* 1110xxxx - 16 bits in 3 bytes */ if (in+2 > end) PREMATURE_EOF; min = 1 << 11; uc = (((c & 0x0F) << 12) | /* 00001111----+------- */ ((in[0] & 0x3F) << 6) | /* 00111111------ */ ((in[1] & 0x3F))); /* 00111111 */ in += 2; } else if ((c & 0xF8) == 0xF0) { /* 11110xxx - 21 bits in 4 bytes */ if (in+3 > end) PREMATURE_EOF; min = 1 << 16; uc = (((c & 0x07) << 18) | /* 00000111--+-------+------- */ ((in[0] & 0x3F) << 12) | /* 01111111----+------- */ ((in[1] & 0x3F) << 6) | /* 00111111------ */ ((in[2] & 0x3F))); /* 00111111 */ in += 3; } else if ((c & 0xFC) == 0xF8) { /* 111110xx - 26 bits in 5 bytes */ if (in+4 > end) PREMATURE_EOF; min = 1 << 21; uc = (((c & 0x03) << 24) | /* 00000011--------+-------+------- */ ((in[0] & 0x3F) << 18) | /* 00111111--+-------+------- */ ((in[1] & 0x3F) << 12) | /* 00111111----+------- */ ((in[2] & 0x3F) << 6) | /* 00111111------ */ ((in[3] & 0x3F))); /* 00111111 */ in += 4; } else if ((c & 0xFE) == 0xFC) { /* 1111110x - 31 bits in 6 bytes */ if (in+5 > end) PREMATURE_EOF; min = 1 << 26; uc = (((c & 0x01) << 30) | /* 00000001------+-------+-------+------- */ ((in[0] & 0x3F) << 24) | /* 00111111+-------+-------+------- */ ((in[1] & 0x3F) << 18) | /* 00111111--+-------+------- */ ((in[2] & 0x3F) << 12) | /* 00111111----+------- */ ((in[3] & 0x3F) << 6) | /* 00111111------ */ ((in[4] & 0x3F))); /* 00111111 */ in += 5; } else { uc = INVALID; /* Unparsable sequence. */ } DONE: length = in - start; /* If any of the continuation bytes didn't begin with the continuation tag, the sequence is invalid; stop at the bad byte, not consuming later ones. (It's easier to check this after the fact than up above.) */ { int i; for (i = 1; i < length; i++) if ((start[i] & 0xC0) != 0x80) { uc = INVALID; length = i+1; break; } } if (uc < min) /* A multi-byte sequence encoded a character that could have been encoded with a shorter sequence, e.g., hiding ASCII inside a multi-byte sequence. Something hinky's going on. Reject it. */ uc = INVALID; uc = uc_truncate (uc); if (unicode_ret) *unicode_ret = uc; return length; } /* Converts a Unicode character to a multi-byte UTF8 sequence. Returns the number of bytes written. */ int utf8_encode (unsigned long uc, char *out, long length) { const char *old = out; uc = uc_truncate (uc); if (uc < 0x80 && length >= 1) /* 7 bits in 1 byte */ { *out++ = uc; /* 0xxxxxxx */ } else if (uc < 0x800 && length >= 2) /* 11 bits in 2 bytes */ { *out++ = (0xC0 | ((uc >> 6) & 0x1F)); /* 110xxxxx */ *out++ = (0x80 | (uc & 0x3F)); /* 10xxxxxx */ } else if (uc < 0x10000L && length >= 3) /* 16 bits in 3 bytes */ { *out++ = (0xE0 | ((uc >> 12) & 0x0F)); /* 1110xxxx */ *out++ = (0x80 | ((uc >> 6) & 0x3F)); /* 10xxxxxx */ *out++ = (0x80 | (uc & 0x3F)); /* 10xxxxxx */ } else if (uc < 0x200000L && length >= 4) /* 21 bits in 4 bytes */ { *out++ = (0xF0 | ((uc >> 18) & 0x07)); /* 11110xxx */ *out++ = (0x80 | ((uc >> 12) & 0x3F)); /* 10xxxxxx */ *out++ = (0x80 | ((uc >> 6) & 0x3F)); /* 10xxxxxx */ *out++ = (0x80 | (uc & 0x3F)); /* 10xxxxxx */ } else if (uc < 0x4000000L && length >= 5) /* 26 bits in 5 bytes */ { *out++ = (0xF8 | ((uc >> 24) & 0x03)); /* 111110xx */ *out++ = (0x80 | ((uc >> 18) & 0x3F)); /* 10xxxxxx */ *out++ = (0x80 | ((uc >> 12) & 0x3F)); /* 10xxxxxx */ *out++ = (0x80 | ((uc >> 6) & 0x3F)); /* 10xxxxxx */ *out++ = (0x80 | (uc & 0x3F)); /* 10xxxxxx */ } else if (length >= 6) /* 31 bits in 6 bytes */ { *out++ = (0xFC | ((uc >> 30) & 0x01)); /* 1111110x */ *out++ = (0x80 | ((uc >> 24) & 0x3F)); /* 10xxxxxx */ *out++ = (0x80 | ((uc >> 18) & 0x3F)); /* 10xxxxxx */ *out++ = (0x80 | ((uc >> 12) & 0x3F)); /* 10xxxxxx */ *out++ = (0x80 | ((uc >> 6) & 0x3F)); /* 10xxxxxx */ *out++ = (0x80 | (uc & 0x3F)); /* 10xxxxxx */ } return (int) (out - old); } /* Converts a null-terminated UTF8 string to a null-terminated XChar2b array. This only handles characters that can be represented in 16 bits, the Basic Multilingual Plane. (No hieroglyphics, Elvish, Klingon or Emoji.) */ XChar2b * utf8_to_XChar2b (const char *string, int *length_ret) { long in_len = strlen(string); const unsigned char *in = (const unsigned char *) string; const unsigned char *in_end = in + in_len; XChar2b *c2b = (XChar2b *) malloc ((in_len + 1) * sizeof(*c2b)); XChar2b *out = c2b; if (! out) return 0; while (in < in_end) { unsigned long uc = 0; long L = utf8_decode (in, in_end - in, &uc); in += L; /* If it can't be represented in a 16-bit XChar2b, use "Unicode Replacement Character". */ if (uc > 0xFFFF) uc = INVALID; out->byte1 = (uc >> 8) & 0xFF; out->byte2 = uc & 0xFF; out++; } out->byte1 = 0; out->byte2 = 0; /* shrink */ c2b = (XChar2b *) realloc (c2b, (out - c2b + 1) * sizeof(*c2b)); if (length_ret) *length_ret = (int) (out - c2b); return c2b; } /* Split a UTF8 string into an array of strings, one per character. The sub-strings will be null terminated and may be multiple bytes. */ char ** utf8_split (const char *string, int *length_ret) { const unsigned char *in = (const unsigned char *) string; long len = strlen (string); const unsigned char *end = in + len; char **ret = (char **) malloc ((len+1) * sizeof(*ret)); int i = 0; if (!ret) return 0; while (in < end) { unsigned long uc; long len2 = utf8_decode (in, len, &uc); char tmp[10]; strncpy (tmp, (char *) in, len2); tmp[len2] = 0; ret[i++] = strdup (tmp); in += len2; /* If this is a Combining Diacritical, append it to the previous character. E.g., "y\314\206\314\206" is one string, not three. */ if (i > 1 && uc >= 0x300 && uc <= 0x36F) { long L1 = strlen(ret[i-2]); long L2 = strlen(ret[i-1]); char *s2 = (char *) malloc (L1 + L2 + 1); strncpy (s2, ret[i-2], L1); strncpy (s2 + L1, ret[i-1], L2); s2[L1 + L2] = 0; free (ret[i-2]); ret[i-2] = s2; i--; } } ret[i] = 0; /* shrink */ ret = (char **) realloc (ret, (i+1) * sizeof(*ret)); if (length_ret) *length_ret = i; return ret; } /* Converts a null-terminated XChar2b array to a null-terminated UTF8 string. */ char * XChar2b_to_utf8 (const XChar2b *in, int *length_ret) { int in_len = 0; const XChar2b *in_end; int out_len; char *utf8, *out; const char *out_end; /* Find the null termination on the XChar2b. */ for (in_end = in; in_end->byte1 || in_end->byte2; in_end++, in_len++) ; out_len = (in_len + 1) * 3; /* 16 bit chars = 3 bytes max */ utf8 = out = (char *) malloc (out_len + 1); if (! out) return 0; out_end = out + out_len; while (in < in_end) { unsigned long uc = (in->byte1 << 8) | in->byte2; int wrote = utf8_encode (uc, out, out_end - out); if (wrote > 3) abort(); /* Can't happen with 16 bit input */ out += wrote; in++; } *out = 0; /* shrink */ out_len = (int) (out - utf8 + 1); utf8 = (char *) realloc (utf8, out_len); if (length_ret) *length_ret = out_len; return utf8; } /* Converts a UTF8 string to the closest Latin1 or ASCII equivalent. */ char * utf8_to_latin1 (const char *string, Bool ascii_p) { long in_len = strlen(string); const unsigned char *in = (const unsigned char *) string; const unsigned char *in_end = in + in_len; unsigned char *ret = (unsigned char *) malloc (in_len + 1); unsigned char *out = ret; if (! ret) return 0; while (in < in_end) { unsigned long uc = 0; long len2 = utf8_decode (in, in_end - in, &uc); in += len2; if (uc == '\240') /*   */ uc = ' '; else if (uc >= 0x300 && uc <= 0x36F) uc = 0; /* Discard "Unicode Combining Diacriticals Block" */ else if (uc > 0xFF) switch (uc) { /* Map "Unicode General Punctuation Block" to Latin1 equivalents. */ case 0x2000: /* EN QUAD */ case 0x2001: /* EM QUAD */ case 0x2002: /* EN SPACE */ case 0x2003: /* EM SPACE */ case 0x2004: /* THREE-PER-EM SPACE */ case 0x2005: /* FOUR-PER-EM SPACE */ case 0x2006: /* SIX-PER-EM SPACE */ case 0x2007: /* FIGURE SPACE */ case 0x2008: /* PUNCTUATION SPACE */ case 0x2009: /* THIN SPACE */ case 0x200A: /* HAIR SPACE */ uc = ' '; break; case 0x2010: /* HYPHEN */ case 0x2011: /* NON-BREAKING HYPHEN */ case 0x2012: /* FIGURE DASH */ case 0x2013: /* EN DASH */ case 0x2014: /* EM DASH */ case 0x2015: /* HORIZONTAL BAR */ uc = '-'; break; case 0x2018: /* LEFT SINGLE QUOTATION MARK */ case 0x2019: /* SINGLE LOW-9 QUOTATION MARK */ case 0x201A: /* SINGLE LOW-9 QUOTATION MARK */ case 0x201B: /* SINGLE HIGH-REVERSED-9 QUOTATION MARK */ uc = '\''; break; case 0x201C: /* LEFT DOUBLE QUOTATION MARK */ case 0x201D: /* RIGHT DOUBLE QUOTATION MARK */ case 0x201E: /* DOUBLE LOW-9 QUOTATION MARK */ case 0x201F: /* DOUBLE HIGH-REVERSED-9 QUOTATION MARK */ uc = '"'; break; case 0x2022: uc = '\267'; break; /* BULLET */ case 0x2023: uc = '\273'; break; /* TRIANGULAR BULLET */ case 0x2027: uc = '\267'; break; /* HYPHENATION POINT */ case 0x202F: uc = ' '; break; /* NARROW NO-BREAK SPACE */ case 0x2038: uc = '^'; break; /* CARET */ case 0x2039: uc = '\253'; break; /* SINGLE LEFT ANGLE QUOTATION MARK */ case 0x203A: uc = '\273'; break; /* SINGLE RIGHT ANGLE QUOTATION MARK*/ case 0x2041: uc = '^'; break; /* CARET INSERTION POINT */ case 0x2042: uc = '*'; break; /* ASTERISM */ case 0x2043: uc = '='; break; /* HYPHEN BULLET */ case 0x2044: uc = '/'; break; /* FRACTION SLASH */ case 0x204B: uc = '\266'; break; /* REVERSED PILCROW SIGN */ case 0x204C: uc = '\267'; break; /* BLACK LEFTWARDS BULLET */ case 0x204D: uc = '\267'; break; /* BLACK RIGHTWARDS BULLET */ case 0x204E: uc = '*'; break; /* LOW ASTERISK */ case 0x204F: uc = ';'; break; /* REVERSED SEMICOLON */ default: break; } if (uc > 0xFF) /* "Inverted question mark" looks enough like 0xFFFD, the "Unicode Replacement Character". */ uc = (ascii_p ? '#' : '\277'); if (ascii_p) /* Map Latin1 to the closest ASCII versions. */ { const unsigned char latin1_to_ascii[96] = " !C##Y|S_C#<=-R_##23'uP.,1o>###?" "AAAAAAECEEEEIIIIDNOOOOOx0UUUUYpS" "aaaaaaeceeeeiiiionooooo/ouuuuypy"; if (uc >= 0xA0) uc = latin1_to_ascii[uc - 0xA0]; } if (uc > 0) *out++ = (unsigned char) uc; } *out = 0; /* shrink */ ret = (unsigned char *) realloc (ret, (out - ret + 1) * sizeof(*ret)); return (char *) ret; } /************************************************************************* cd ../hacks ; make test-utf8wc *************************************************************************/ #ifdef SELFTEST /* Convert a UTF8 string to Unicode and back again. */ static char * split_and_join (const char *string) { const unsigned char *in = (const unsigned char *) string; int len = strlen (string); const unsigned char *end = in + len; unsigned long *unicode = (unsigned long *) malloc((len + 1) * sizeof(*unicode)); int i = 0; char *ret, *out, *out_end; while (in < end) { long len2 = utf8_decode (in, len, &unicode[i]); i++; in += len2; } unicode[i] = 0; i = i*6 + 1; out = ret = (char *) malloc(i); out_end = out + i; i = 0; while (unicode[i]) { int len2 = utf8_encode (unicode[i], out, out_end - out); out += len2; i++; } *out = 0; free (unicode); return ret; } static void LOG (FILE *out, const char *prefix, const char *s) { fprintf (out, "%6s: \"", prefix); while (*s) { unsigned char c = *s; if (c == '"' || c == '\\') fprintf(out, "\\%c", c); else if (c < 32 || c >= 127) fprintf(out, "\\%03o", c); else fprintf (out, "%c", c); s++; } fprintf (out, "\"\n"); } int main (int argc, char **argv) { /* Adapted from http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt */ # define URC "\357\277\275" /* 0xFFFD, "Unicode Replacement Character" */ static const struct { const char *name, *in, *target, *target2; } tests[] = { /* 1 Some correct UTF-8 text */ /* The Greek word 'kosme': */ { "1", "\316\272\341\275\271\317\203\316\274\316\265" }, /* 2 Boundary condition test cases */ /* 2.1 First possible sequence of a certain length */ { "2.1.1", /* 1 byte (U-00000000): */ "\000" }, { "2.1.2", /* 2 bytes (U-00000080): */ "\302\200" }, { "2.1.3", /* 3 bytes (U-00000800): */ "\340\240\200" }, { "2.1.4", /* 4 bytes (U-00010000): */ "\360\220\200\200", 0, URC }, { "2.1.5", /* 5 bytes (U-00200000): */ "\370\210\200\200\200", URC }, { "2.1.6", /* 6 bytes (U-04000000): */ "\374\204\200\200\200\200", URC }, /* 2.2 Last possible sequence of a certain length */ { "2.2.1", /* 1 byte (U-0000007F): */ "\177" }, { "2.2.2", /* 2 bytes (U-000007FF): */ "\337\277" }, { "2.2.3", /* 3 bytes (U-0000FFFF): */ "\357\277\277" }, { "2.2.4", /* 4 bytes (U-001FFFFF): */ "\367\277\277\277", URC }, { "2.2.5", /* 5 bytes (U-03FFFFFF): */ "\373\277\277\277\277", URC }, { "2.2.6", /* 6 bytes (U-7FFFFFFF): */ "\375\277\277\277\277\277", URC }, /* 2.3 Other boundary conditions */ { "2.3.1", /* U-0000D7FF = ed 9f bf = */ "\355\237\277" }, { "2.3.2", /* U-0000E000 = ee 80 80 = */ "\356\200\200" }, { "2.3.3", /* U-0000FFFD = ef bf bd = */ URC }, { "2.3.4", /* U-0010FFFF = f4 8f bf bf = */ "\364\217\277\277", 0, URC }, { "2.3.5", /* U-00110000 = f4 90 80 80 = */ "\364\220\200\200", URC }, /* 3 Malformed sequences */ /* 3.1 Unexpected continuation bytes */ /* Each unexpected continuation byte should be separately signalled as a malformed sequence of its own. */ { "3.1.1", /* First continuation byte 0x80: */ "\200", URC }, { "3.1.2", /* Last continuation byte 0xbf: */ "\277", URC }, { "3.1.3", /* 2 continuation bytes: */ "\200\277", URC URC }, { "3.1.4", /* 3 continuation bytes: */ "\200\277\200", URC URC URC }, { "3.1.5", /* 4 continuation bytes: */ "\200\277\200\277", URC URC URC URC }, { "3.1.6", /* 5 continuation bytes: */ "\200\277\200\277\200", URC URC URC URC URC }, { "3.1.7", /* 6 continuation bytes: */ "\200\277\200\277\200\277", URC URC URC URC URC URC }, { "3.1.8", /* 7 continuation bytes: */ "\200\277\200\277\200\277\200", URC URC URC URC URC URC URC }, { "3.1.9", /* Sequence of all 64 possible continuation bytes (0x80-0xbf):*/ "\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217" "\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237" "\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257" "\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277", URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC }, /* 3.2 Lonely start characters */ { "3.2.1", /* All 32 first bytes of 2-byte sequences (0xc0-0xdf), each followed by a space character: */ "\300 \301 \302 \303 \304 \305 \306 \307 \310 \311 \312 \313 \314 " "\315 \316 \317 \320 \321 \322 \323 \324 \325 \326 \327 \330 \331 " "\332 \333 \334 \335 \336 \337 ", URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC }, { "3.2.2", /* All 16 first bytes of 3-byte sequences (0xe0-0xef), each followed by a space character: */ "\340 \341 \342 \343 \344 \345 \346 \347 " "\350 \351 \352 \353 \354 \355 \356 \357 ", URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC }, { "3.2.3", /* All 8 first bytes of 4-byte sequences (0xf0-0xf7), each followed by a space character: */ URC URC URC URC URC URC URC URC }, { "3.2.4", /* All 4 first bytes of 5-byte sequences (0xf8-0xfb), each followed by a space character: */ "\370 \371 \372 \373 ", URC URC URC URC }, { "3.2.5", /* All 2 first bytes of 6-byte sequences (0xfc-0xfd), each followed by a space character: */ "\374 \375 ", URC URC }, /* 3.3 Sequences with last continuation byte missing */ /* All bytes of an incomplete sequence should be signalled as a single malformed sequence, i.e., you should see only a single replacement character in each of the next 10 tests. (Characters as in section 2) */ { "3.3.1", /* 2-byte sequence with last byte missing (U+0000): */ "\300", URC }, { "3.3.2", /* 3-byte sequence with last byte missing (U+0000): */ "\340\200", URC }, { "3.3.3", /* 4-byte sequence with last byte missing (U+0000): */ "\360\200\200", URC }, { "3.3.4", /* 5-byte sequence with last byte missing (U+0000): */ "\370\200\200\200", URC }, { "3.3.5", /* 6-byte sequence with last byte missing (U+0000): */ "\374\200\200\200\200", URC }, { "3.3.6", /* 2-byte sequence with last byte missing (U-000007FF): */ "\337", URC }, { "3.3.7", /* 3-byte sequence with last byte missing (U-0000FFFF): */ "\357\277", URC }, { "3.3.8", /* 4-byte sequence with last byte missing (U-001FFFFF): */ "\367\277\277", URC }, { "3.3.9", /* 5-byte sequence with last byte missing (U-03FFFFFF): */ "\373\277\277\277", URC }, { "3.3.10", /* 6-byte sequence with last byte missing (U-7FFFFFFF): */ "\375\277\277\277\277", URC }, /* 3.4 Concatenation of incomplete sequences */ /* All the 10 sequences of 3.3 concatenated, you should see 10 malformed sequences being signalled: */ { "3.4", "\300\340\200\360\200\200\370\200\200\200\374\200\200\200\200" "\337\357\277\367\277\277\373\277\277\277\375\277\277\277\277", URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC }, /* 3.5 Impossible bytes */ /* The following two bytes cannot appear in a correct UTF-8 string */ { "3.5.1", /* fe = */ "\376", URC }, { "3.5.2", /* ff = */ "\377", URC }, { "3.5.3", /* fe fe ff ff = */ "\376\376\377\377", URC URC URC URC }, /* 4 Overlong sequences */ /* 4.1 Examples of an overlong ASCII character */ { "4.1.1", /* U+002F = c0 af = */ "\300\257", URC }, { "4.1.2", /* U+002F = e0 80 af = */ "\340\200\257", URC }, { "4.1.3", /* U+002F = f0 80 80 af = */ "\360\200\200\257", URC }, { "4.1.4", /* U+002F = f8 80 80 80 af = */ "\370\200\200\200\257", URC }, { "4.1.5", /* U+002F = fc 80 80 80 80 af = */ "\374\200\200\200\200\257", URC }, /* 4.2 Maximum overlong sequences */ { "4.2.1", /* U-0000007F = c1 bf = */ "\301\277", URC }, { "4.2.2", /* U-000007FF = e0 9f bf = */ "\340\237\277", URC }, { "4.2.3", /* U-0000FFFF = f0 8f bf bf = */ "\360\217\277\277", URC }, { "4.2.4", /* U-001FFFFF = f8 87 bf bf bf = */ "\370\207\277\277\277", URC }, { "4.2.5", /* U-03FFFFFF = fc 83 bf bf bf bf = */ URC }, /* 4.3 Overlong representation of the NUL character */ { "4.3.1", /* U+0000 = c0 80 = */ "\300\200", URC }, { "4.3.2", /* U+0000 = e0 80 80 = */ "\340\200\200", URC }, { "4.3.3", /* U+0000 = f0 80 80 80 = */ "\360\200\200\200", URC }, { "4.3.4", /* U+0000 = f8 80 80 80 80 = */ "\370\200\200\200\200", URC }, { "4.3.5", /* U+0000 = fc 80 80 80 80 80 = */ "\374\200\200\200\200\200", URC }, /* 5 Illegal code positions */ /* 5.1 Single UTF-16 surrogates */ { "5.1.1", /* U+D800 = ed a0 80 = */ "\355\240\200", URC }, { "5.1.2", /* U+DB7F = ed ad bf = */ "\355\255\277", URC }, { "5.1.3", /* U+DB80 = ed ae 80 = */ "\355\256\200", URC }, { "5.1.4", /* U+DBFF = ed af bf = */ "\355\257\277", URC }, { "5.1.5", /* U+DC00 = ed b0 80 = */ "\355\260\200", URC }, { "5.1.6", /* U+DF80 = ed be 80 = */ "\355\276\200", URC }, { "5.1.7", /* U+DFFF = ed bf bf = */ "\355\277\277", URC }, /* 5.2 Paired UTF-16 surrogates */ { "5.2.1", /* U+D800 U+DC00 = ed a0 80 ed b0 80 = */ URC URC }, { "5.2.2", /* U+D800 U+DFFF = ed a0 80 ed bf bf = */ URC URC }, { "5.2.3", /* U+DB7F U+DC00 = ed ad bf ed b0 80 = */ URC URC }, { "5.2.4", /* U+DB7F U+DFFF = ed ad bf ed bf bf = */ URC URC }, { "5.2.5", /* U+DB80 U+DC00 = ed ae 80 ed b0 80 = */ URC URC }, { "5.2.6", /* U+DB80 U+DFFF = ed ae 80 ed bf bf = */ URC URC }, { "5.2.7", /* U+DBFF U+DC00 = ed af bf ed b0 80 = */ URC URC }, { "5.2.8", /* U+DBFF U+DFFF = ed af bf ed bf bf = */ URC URC }, /* 5.3 Other illegal code positions */ { "5.3.1", /* U+FFFE = ef bf be = */ "\357\277\276" }, { "5.3.2", /* U+FFFF = ef bf bf = */ "\357\277\277" }, /* 6 Some other junk */ { "6.0", "" }, { "6.1", "\001\002\003\004\005 ABC" }, { "6.2", /* every non-ASCII Latin1 character */ "\302\241\302\242\302\243\302\244\302\245\302\246\302\247\302\250" "\302\251\302\252\302\253\302\254\302\255\302\256\302\257\302\260" "\302\261\302\262\302\263\302\264\302\265\302\266\302\267\302\270" "\302\271\302\272\302\273\302\274\302\275\302\276\302\277\303\200" "\303\201\303\202\303\203\303\204\303\205\303\206\303\207\303\210" "\303\211\303\212\303\213\303\214\303\215\303\216\303\217\303\220" "\303\221\303\222\303\223\303\224\303\225\303\226\303\227\303\230" "\303\231\303\232\303\233\303\234\303\235\303\236\303\237\303\240" "\303\241\303\242\303\243\303\244\303\245\303\246\303\247\303\250" "\303\251\303\252\303\253\303\254\303\255\303\256\303\257\303\260" "\303\261\303\262\303\263\303\264\303\265\303\266\303\267\303\270" "\303\271\303\272\303\273\303\274\303\275\303\276\303\277" }, { "6.3", /* Christmas tree */ "\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020" "\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040" "\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060" "\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100" "\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120" "\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140" "\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160" "\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200" "\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220" "\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240" "\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260" "\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300" "\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320" "\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340" "\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360" "\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377", "\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020" "\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ" "[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\177" URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC }, }; int i; int ok = 1; for (i = 0; i < sizeof(tests)/sizeof(*tests); i++) { const char *name = tests[i].name; const char *in = tests[i].in; const char *target = (tests[i].target ? tests[i].target : in); const char *target2 = (tests[i].target2 ? tests[i].target2 : target); char *out = split_and_join (in); XChar2b *out16 = utf8_to_XChar2b (in, 0); char *out2 = XChar2b_to_utf8 (out16, 0); if (strcmp (out, target)) { LOG (stderr, name, target); LOG (stderr, "FAIL", out); fprintf (stderr, "\n"); ok = 0; } if (strcmp (out2, target2)) { LOG (stderr, name, target2); LOG (stderr, "FAIL2", out2); fprintf (stderr, "\n"); ok = 0; } free (out); free (out2); free (out16); } { const char *utf8 = ("son \303\256le int\303\251rieure, \303\240 " "c\303\264t\303\251 de l'alc\303\264ve " "ovo\303\257de, o\303\271 les b\303\273ches " "se consument dans l'\303\242tre"); const char *latin1 = ("son \356le int\351rieure, \340 " "c\364t\351 de l'alc\364ve ovo\357de, " "o\371 les b\373ches se consument dans " "l'\342tre"); const char *ascii = ("son ile interieure, a cote de l'alcove " "ovoide, ou les buches se consument dans " "l'atre"); char *latin1b = utf8_to_latin1 (utf8, False); char *ascii2 = utf8_to_latin1 (utf8, True); if (strcmp (latin1, latin1b)) { LOG (stderr, "LATIN1", utf8); LOG (stderr, "FAIL3", latin1b); fprintf (stderr, "\n"); ok = 0; } if (strcmp (ascii, ascii2)) { LOG (stderr, "ASCII", utf8); LOG (stderr, "FAIL4", ascii2); fprintf (stderr, "\n"); ok = 0; } free (latin1b); free (ascii2); } if (ok) fprintf (stderr, "OK\n"); return (ok == 0); } #endif /* SELFTEST */ xscreensaver-5.34/utils/alpha.h000644 000767 000767 00000001723 06724605463 016276 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 1992, 1995, 1996, 1997 * Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifndef __XSCREENSAVER_ALPHA_H__ #define __XSCREENSAVER_ALPHA_H__ extern Bool allocate_alpha_colors (Screen *screen, Visual *visual, Colormap cmap, int *nplanesP, Bool additive_p, unsigned long **plane_masks, unsigned long *base_pixelP); #endif /* __XSCREENSAVER_ALPHA_H__ */ xscreensaver-5.34/utils/colors.h000644 000767 000767 00000013441 12166643073 016506 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 1992-2013 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifndef __COLORS_H__ #define __COLORS_H__ /* Like XFreeColors, but works on `XColor *' instead of `unsigned long *' */ extern void free_colors (Screen *, Colormap, XColor *, int ncolors); /* Allocates writable, non-contiguous color cells. The number requested is passed in *ncolorsP, and the number actually allocated is returned there. (Unlike XAllocColorCells(), this will allocate as many as it can, instead of failing if they can't all be allocated.) */ extern void allocate_writable_colors (Screen *, Colormap, unsigned long *pixels, int *ncolorsP); /* Generates a sequence of colors evenly spaced between the given pair of HSV coordinates. If closed_p is true, the colors will go from the first point to the second then back to the first. If allocate_p is true, the colors will be allocated from the map; if enough colors can't be allocated, we will try for less, and the result will be returned to ncolorsP. If writable_p is true, writable color cells will be allocated; otherwise, read-only cells will be allocated. If allocate_p is false, screen and cmap are unused (OpenGL usage). */ extern void make_color_ramp (Screen *, Visual *, Colormap, int h1, double s1, double v1, int h2, double s2, double v2, XColor *colors, int *ncolorsP, Bool closed_p, Bool allocate_p, Bool *writable_pP); /* Generates a sequence of colors evenly spaced around the triangle indicated by the thee HSV coordinates. If allocate_p is true, the colors will be allocated from the map; if enough colors can't be allocated, we will try for less, and the result will be returned to ncolorsP. If writable_p is true, writable color cells will be allocated; otherwise, read-only cells will be allocated. If allocate_p is false, screen, visual and cmap are unused (OpenGL usage). */ extern void make_color_loop (Screen *, Visual *, Colormap, int h1, double s1, double v1, int h2, double s2, double v2, int h3, double s3, double v3, XColor *colors, int *ncolorsP, Bool allocate_p, Bool *writable_pP); /* Allocates a hopefully-interesting colormap, which will be a closed loop without any sudden transitions. If allocate_p is true, the colors will be allocated from the map; if enough colors can't be allocated, we will try for less, and the result will be returned to ncolorsP. An error message will be printed on stderr (if verbose_p). If *writable_pP is true, writable color cells will be allocated; otherwise, read-only cells will be allocated. If no writable cells cannot be allocated, we will try to allocate unwritable cells instead, and print a message on stderr to that effect (if verbose_p). If allocate_p is false, screen, visual and cmap are unused (OpenGL usage). */ extern void make_smooth_colormap (Screen *, Visual *, Colormap, XColor *colors, int *ncolorsP, Bool allocate_p, Bool *writable_pP, Bool verbose_p); /* Allocates a uniform colormap which touches each hue of the spectrum, evenly spaced. The saturation and intensity are chosen randomly, but will be high enough to be visible. If allocate_p is true, the colors will be allocated from the map; if enough colors can't be allocated, we will try for less, and the result will be returned to ncolorsP. An error message will be printed on stderr (if verbose_p). If *writable_pP is true, writable color cells will be allocated; otherwise, read-only cells will be allocated. If no writable cells cannot be allocated, we will try to allocate unwritable cells instead, and print a message on stderr to that effect (if verbose_p). If allocate_p is false, screen, visual and cmap are unused (OpenGL usage). */ extern void make_uniform_colormap (Screen *, Visual *, Colormap, XColor *colors, int *ncolorsP, Bool allocate_p, Bool *writable_pP, Bool verbose_p); /* Allocates a random colormap (the colors are unrelated to one another.) If `bright_p' is false, the colors will be completely random; if it is true, all of the colors will be bright enough to see on a black background. If allocate_p is true, the colors will be allocated from the map; if enough colors can't be allocated, we will try for less, and the result will be returned to ncolorsP. An error message will be printed on stderr (if verbose_p). If *writable_pP is true, writable color cells will be allocated; otherwise, read-only cells will be allocated. If no writable cells cannot be allocated, we will try to allocate unwritable cells instead, and print a message on stderr to that effect (if verbose_p). If allocate_p is false, screen, visual and cmap are unused (OpenGL usage). */ extern void make_random_colormap (Screen *, Visual *, Colormap, XColor *colors, int *ncolorsP, Bool bright_p, Bool allocate_p, Bool *writable_pP, Bool verbose_p); /* Assuming that the array of colors indicates the current state of a set of writable color cells, this rotates the contents of the array by `distance' steps, moving the colors of cell N to cell (N - distance). */ extern void rotate_colors (Screen *, Colormap, XColor *, int ncolors, int distance); #endif /* __COLORS_H__ */ xscreensaver-5.34/utils/fade.h000644 000767 000767 00000001623 07726555710 016111 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 1992-1997, 2003 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifndef __FADE_H__ #define __FADE_H__ extern Colormap copy_colormap (Screen *, Visual *, Colormap from, Colormap to); extern void blacken_colormap (Screen *, Colormap cmap); extern void fade_screens (Display *dpy, Colormap *cmaps, Window *black_windows, int nwindows, int seconds, int ticks, Bool out_p, Bool clear_windows); #endif /* __FADE_H__ */ xscreensaver-5.34/utils/grabscreen.h000644 000767 000767 00000010743 12400217124 017303 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 1992-2014 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifndef __GRABSCREEN_H__ #define __GRABSCREEN_H__ /* This will write an image onto the given Drawable. The Drawable (arg 3) may be a Window or a Pixmap. The Window must be the top-level window. The image *may or may not* be written to the window, though it will definitely be written to the drawable. It's fine for args 2 and 3 to be the same window, or for arg 2 to be a Window, and arg 3 to be a Pixmap. The loaded image might be from a file, or from a screen shot of the desktop, or from the system's video input, depending on user preferences. When the callback is called, the image data will have been loaded into the given drawable. Copy `name' if you want to keep it. If it is from a file, then the `filename' argument will be the name of the file. It may be NULL. If you want to keep this string, copy it. The size and position of the image is in the `geometry' arg. The image will generally have been scaled up to fit the window, but if a loaded file had a different aspect ratio than the window, it will have been centered, and the returned coords will describe that. Many colors may be allocated from the window's colormap. */ extern void load_image_async (Screen *, Window, Drawable, void (*callback) (Screen *, Window, Drawable, const char *name, XRectangle *geometry, void *closure), void *closure); /* A utility wrapper around load_image_async() that is simpler if you are only loading a single image at a time: just keep calling it periodically until it returns NULL. When it does, the image has been loaded. */ typedef struct async_load_state async_load_state; extern async_load_state *load_image_async_simple (async_load_state *, Screen *, Window top_level, Drawable target, char **filename_ret, XRectangle *geometry_ret); /* Whether one should use GCSubwindowMode when drawing on this window (assuming a screen image has been grabbed onto it.) Yes, this is a total kludge. */ extern Bool use_subwindow_mode_p(Screen *screen, Window window); /* Whether the given window is: - the real root window; - the virtual root window; - a direct child of the root window; - a direct child of the window manager's decorations. */ extern Bool top_level_window_p(Screen *screen, Window window); /* Don't call this: this is for the "xscreensaver-getimage" program only. */ extern void grab_screen_image_internal (Screen *, Window); /* Don't use these: this is how "xscreensaver-getimage" and "grabclient.c" pass the file name around. */ #define XA_XSCREENSAVER_IMAGE_FILENAME "_SCREENSAVER_IMAGE_FILENAME" #define XA_XSCREENSAVER_IMAGE_GEOMETRY "_SCREENSAVER_IMAGE_GEOMETRY" /* For debugging: turn on verbosity. */ extern void grabscreen_verbose (void); #ifdef HAVE_COCOA /* Don't use these: internal interface of grabclient.c. */ extern Bool osx_grab_desktop_image (Screen *, Window, Drawable, XRectangle *geom_ret); extern Bool osx_load_image_file (Screen *, Window, Drawable, const char *filename, XRectangle *geom_ret); #endif /* HAVE_COCOA */ #ifdef USE_IPHONE extern void ios_load_random_image (void (*callback) (void *uiimage, const char *filename, int w, int h, void *closure), void *closure); #endif /* USE_IPHONE */ #endif /* __GRABSCREEN_H__ */ xscreensaver-5.34/utils/hsv.h000644 000767 000767 00000001746 06561646263 016020 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 1992, 1997 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifndef __HSV_H__ #define __HSV_H__ /* Converts between RGB and HSV color spaces. R, G, and B are in the range 0 - 65535; H is in the range 0 - 360; S and V are in the range 0.0 - 1.0. */ extern void hsv_to_rgb (int h, double s, double v, unsigned short *r, unsigned short *g, unsigned short *b); extern void rgb_to_hsv (unsigned short r, unsigned short g, unsigned short b, int *h, double *s, double *v); #endif /* __HSV_H__ */ xscreensaver-5.34/utils/resources.h000644 000767 000767 00000003427 12377501362 017220 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 1992-2014 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifndef __XSCREENSAVER_RESOURCES_H__ #define __XSCREENSAVER_RESOURCES_H__ extern char *get_string_resource (Display*,char*,char*); extern Bool get_boolean_resource (Display*,char*,char*); extern int get_integer_resource (Display*,char*,char*); extern double get_float_resource (Display*,char*,char*); extern unsigned int get_pixel_resource (Display*,Colormap,char*,char*); extern unsigned int get_minutes_resource (Display*,char*,char*); extern unsigned int get_seconds_resource (Display*,char*,char*); extern int parse_time (const char *string, Bool seconds_default_p, Bool silent_p); extern Pixmap xscreensaver_logo (Screen *screen, Visual *visual, Drawable drawable, Colormap cmap, unsigned long background_color, unsigned long **pixels_ret, int *npixels_ret, Pixmap *mask_ret, Bool big_p); /* A utility function for event-handler functions: Returns True if the event is a simple click, Space, Tab, etc. Returns False otherwise. The idea here is that most hacks interpret to clicks or basic keypresses as "change it up". */ extern Bool screenhack_event_helper (Display *, Window, XEvent *); #endif /* __XSCREENSAVER_RESOURCES_H__ */ xscreensaver-5.34/utils/spline.h000644 000767 000767 00000003530 06535622305 016473 0ustar00jwzjwz000000 000000 /* * Copyright (c) 1987, 1988, 1989 Stanford University * * 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, and that the name of Stanford not be used in advertising or * publicity pertaining to distribution of the software without specific, * written prior permission. Stanford makes no representations about * the suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * STANFORD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. * IN NO EVENT SHALL STANFORD BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* This code came with the InterViews distribution, and was translated from C++ to C by Matthieu Devin some time in 1992. */ #ifndef _SPLINE_H_ #define _SPLINE_H_ typedef struct _spline { /* input */ unsigned int n_controls; double* control_x; double* control_y; /* output */ unsigned int n_points; XPoint* points; unsigned int allocated_points; } spline; spline* make_spline (unsigned int size); void compute_spline (spline* s); void compute_closed_spline (spline* s); void just_fill_spline (spline* s); void append_spline_points (spline* s1, spline* s2); void spline_bounding_box (spline* s, XRectangle* rectangle_out); void free_spline(spline *s); #endif /* _SPLINE_H_ */ xscreensaver-5.34/utils/usleep.h000644 000767 000767 00000001537 12341003022 016460 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 1992, 1996 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifndef __SCREENHACK_USLEEP_H__ #define __SCREENHACK_USLEEP_H__ #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifdef HAVE_UNISTD_H # include #endif extern void screenhack_usleep (unsigned long usecs); #undef usleep #define usleep(usecs) screenhack_usleep(usecs) #endif /* __SCREENHACK_USLEEP_H__ */ xscreensaver-5.34/utils/utils.h000644 000767 000767 00000001530 12423567617 016346 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 1997-2014 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #if defined(HAVE_COCOA) || defined(HAVE_ANDROID) # include "jwxyz.h" #else /* real X11 */ # include # include # include #endif /* !HAVE_COCOA */ xscreensaver-5.34/utils/version.h000644 000767 000767 00000000156 12612751640 016665 0ustar00jwzjwz000000 000000 static const char screensaver_id[] = "@(#)xscreensaver 5.34 (24-Oct-2015), by Jamie Zawinski (jwz@jwz.org)"; xscreensaver-5.34/utils/visual.h000644 000767 000767 00000003021 12341002716 016465 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 1993-2014 by Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifndef __VISUAL_H__ #define __VISUAL_H__ extern Visual *get_visual (Screen *, const char *name, Bool, Bool); extern Visual *get_visual_resource (Screen *, char *, char *, Bool); extern int visual_depth (Screen *, Visual *); /* extern int visual_pixmap_depth (Screen *, Visual *); */ extern int visual_class (Screen *, Visual *); extern int visual_cells (Screen *, Visual *); extern int screen_number (Screen *); extern Visual *find_similar_visual (Screen *, Visual *old); extern void describe_visual (FILE *f, Screen *, Visual *, Bool private_cmap_p); extern Visual *get_overlay_visual (Screen *, unsigned long *pixel_return); extern Bool has_writable_cells (Screen *, Visual *); extern Visual *id_to_visual (Screen *, int); extern int get_bits_per_pixel(Display *dpy, int depth); extern Visual *get_gl_visual (Screen *); extern void describe_gl_visual (FILE *, Screen *, Visual *, Bool priv_cmap_p); extern Bool validate_gl_visual (FILE *, Screen *, const char *, Visual *); #endif /* __VISUAL_H__ */ xscreensaver-5.34/utils/vroot.h000644 000767 000767 00000014132 10160307476 016350 0ustar00jwzjwz000000 000000 /* -*- Mode: C; tab-width: 2 -*- */ /*****************************************************************************/ /** Copyright 1991 by Andreas Stolcke **/ /** Copyright 1990 by Solbourne Computer Inc. **/ /** Longmont, Colorado **/ /** **/ /** All Rights Reserved **/ /** **/ /** Permission to use, copy, modify, and distribute this software and **/ /** its documentation for any purpose and without fee is hereby **/ /** granted, provided that the above copyright notice appear in all **/ /** copies and that both that copyright notice and this permis- **/ /** sion notice appear in supporting documentation, and that the **/ /** name of Solbourne not be used in advertising **/ /** in publicity pertaining to distribution of the software without **/ /** specific, written prior permission. **/ /** **/ /** ANDREAS STOLCKE AND SOLBOURNE COMPUTER INC. DISCLAIMS ALL WARRANTIES **/ /** WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF **/ /** MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL ANDREAS STOLCKE **/ /** OR SOLBOURNE BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL **/ /** DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA **/ /** OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER **/ /** TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE **/ /** OR PERFORMANCE OF THIS SOFTWARE. **/ /*****************************************************************************/ /* * vroot.h -- Virtual Root Window handling header file * * This header file redefines the X11 macros RootWindow and DefaultRootWindow, * making them look for a virtual root window as provided by certain `virtual' * window managers like swm and tvtwm. If none is found, the ordinary root * window is returned, thus retaining backward compatibility with standard * window managers. * The function implementing the virtual root lookup remembers the result of * its last invocation to avoid overhead in the case of repeated calls * on the same display and screen arguments. * The lookup code itself is taken from Tom LaStrange's ssetroot program. * * Most simple root window changing X programs can be converted to using * virtual roots by just including * * #include * * after all the X11 header files. It has been tested on such popular * X clients as xphoon, xfroot, xloadimage, and xaqua. * It also works with the core clients xprop, xwininfo, xwd, and editres * (and is necessary to get those clients working under tvtwm). * It does NOT work with xsetroot; get the xsetroot replacement included in * the tvtwm distribution instead. * * Andreas Stolcke , 9/7/90 * - replaced all NULL's with properly cast 0's, 5/6/91 * - free children list (suggested by Mark Martin ), 5/16/91 * - include X11/Xlib.h and support RootWindowOfScreen, too 9/17/91 * * Jamie Zawinski , 28-Apr-1997 * - use ANSI C * * Jamie Zawinski , 3-Sep-2003 * - if the environment variable "XSCREENSAVER_WINDOW" is set, use that * as the root window instead of searching for __SWM_VROOT. * * Jamie Zawinski , 14-Aug-2004 * - changes to get gcc to stop whining about "type punning". * * Jamie Zawinski , 16-Dec-2004 * - fixed that last fix. */ #ifndef _VROOT_H_ #define _VROOT_H_ #define _XSCREENSAVER_VROOT_H_ #if !defined(lint) && !defined(SABER) static const char vroot_rcsid[] = "#Id: vroot.h,v 1.8 2004/12/16 05:33:54 jwz Exp #" "\n" "#Id: vroot.h,v 1.4 1991/09/30 19:23:16 stolcke Exp stolcke #"; #endif #include #include #include static Window #ifdef __STDC__ /* ANSIfication added by jwz, to avoid superfluous warnings. */ VirtualRootWindowOfScreen(Screen *screen) #else /* !__STDC__ */ VirtualRootWindowOfScreen(screen) Screen *screen; #endif /* !__STDC__ */ { static Screen *save_screen = (Screen *)0; static Window root = (Window)0; if (screen != save_screen) { Display *dpy = DisplayOfScreen(screen); Atom __SWM_VROOT = None; int i; Window rootReturn, parentReturn, *children; unsigned int numChildren; /* first check for a hex or decimal window ID in the environment */ const char *xss_id = getenv("XSCREENSAVER_WINDOW"); if (xss_id && *xss_id) { unsigned long id = 0; char c; if (1 == sscanf (xss_id, " 0x%lx %c", &id, &c) || 1 == sscanf (xss_id, " %lu %c", &id, &c)) { root = (Window) id; save_screen = screen; return root; } } root = RootWindowOfScreen(screen); /* go look for a virtual root */ __SWM_VROOT = XInternAtom(dpy, "__SWM_VROOT", False); if (XQueryTree(dpy, root, &rootReturn, &parentReturn, &children, &numChildren)) { for (i = 0; i < numChildren; i++) { Atom actual_type; int actual_format; unsigned long nitems, bytesafter; unsigned char *newRoot = 0; if (XGetWindowProperty(dpy, children[i], __SWM_VROOT, 0, 1, False, XA_WINDOW, &actual_type, &actual_format, &nitems, &bytesafter, &newRoot) == Success && newRoot) { root = *((Window *) newRoot); break; } } if (children) XFree((char *)children); } save_screen = screen; } return root; } #undef RootWindowOfScreen #define RootWindowOfScreen(s) VirtualRootWindowOfScreen(s) #undef RootWindow #define RootWindow(dpy,screen) VirtualRootWindowOfScreen(ScreenOfDisplay(dpy,screen)) #undef DefaultRootWindow #define DefaultRootWindow(dpy) VirtualRootWindowOfScreen(DefaultScreenOfDisplay(dpy)) #endif /* _VROOT_H_ */ xscreensaver-5.34/utils/xmu.h000644 000767 000767 00000000551 06347372223 016014 0ustar00jwzjwz000000 000000 /* This file contains compatibility routines for systems without Xmu. * You would be better served by installing Xmu on your machine or * yelling at your vendor to ship it. */ #ifndef __XMU_H__ #define __XMU_H__ #include #include int XmuPrintDefaultErrorMessage (Display *dpy, XErrorEvent *event, FILE *fp); #endif /* __XMU_H__ */ xscreensaver-5.34/utils/yarandom.h000644 000767 000767 00000006577 12474760217 017035 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 1997, 1998, 2003 by Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifndef __YARANDOM_H__ #define __YARANDOM_H__ #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifdef HAVE_INTTYPES_H # include #endif #undef random #undef rand #undef drand48 #undef srandom #undef srand #undef srand48 #undef frand #undef RAND_MAX #ifdef VMS # include "vms-gtod.h" #endif extern unsigned int ya_random (void); extern void ya_rand_init (unsigned int); #define random() ya_random() #define RAND_MAX 0xFFFFFFFF /*#define srandom(i) ya_rand_init(0)*/ /* Define these away to keep people from using the wrong APIs in xscreensaver. */ #define rand __ERROR_use_random_not_rand_in_xscreensaver__ #define drand48 __ERROR_use_frand_not_drand48_in_xscreensaver__ #define srandom __ERROR_do_not_call_srandom_in_xscreensaver__ #define srand __ERROR_do_not_call_srand_in_xscreensaver__ #define srand48 __ERROR_do_not_call_srand48_in_xscreensaver__ #define ya_rand_init __ERROR_do_not_call_ya_rand_init_in_xscreensaver__ #if defined (__GNUC__) && (__GNUC__ >= 2) /* Implement frand using GCC's statement-expression extension. */ # define frand(f) \ __extension__ \ ({ double tmp = ((((double) random()) * ((double) (f))) / \ ((double) ((unsigned int)~0))); \ tmp < 0 ? (-tmp) : tmp; }) #else /* not GCC2 - implement frand using a global variable.*/ static double _frand_tmp_; # define frand(f) \ (_frand_tmp_ = ((((double) random()) * ((double) (f))) / \ ((double) ((unsigned int)~0))), \ _frand_tmp_ < 0 ? (-_frand_tmp_) : _frand_tmp_) #endif /* not GCC2 */ /* Compatibility with the xlockmore RNG API (note that the xlockmore hacks never expect negative numbers.) */ #define LRAND() ((long) (random() & 0x7fffffff)) /* The first NRAND(n) is much faster, when uint64_t is available to allow it. * Especially on ARM and other processors without built-in division. * * n must be greater than zero. * * The division by RAND_MAX+1 should optimize down to a bit shift. * * Although the result here is never negative, this needs to return signed * integers: A binary operator in C requires operands have the same type, and * if one side is signed and the other is unsigned, but they're both the same * size, then the signed operand is cast to unsigned, and the result is * similarly unsigned. This can potentially cause problems when idioms like * "NRAND(n) * RANDSIGN()" (where RANDSIGN() returns either -1 or 1) is used * to get random numbers from the range (-n,n). */ #ifdef HAVE_INTTYPES_H # define NRAND(n) ((int32_t) ((uint64_t) random() * (uint32_t) (n) / \ ((uint64_t) RAND_MAX + 1))) #else # define NRAND(n) ((int) (LRAND() % (n))) #endif #define MAXRAND (2147483648.0) /* unsigned 1<<31 as a float */ #define SRAND(n) /* already seeded by screenhack.c */ #endif /* __YARANDOM_H__ */ xscreensaver-5.34/utils/erase.h000644 000767 000767 00000001473 10402235066 016274 0ustar00jwzjwz000000 000000 /* erase.c: Erase the screen in various more or less interesting ways. * Copyright (c) 1997-2001, 2006 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifndef __XSCREENSAVER_ERASE_H__ #define __XSCREENSAVER_ERASE_H__ typedef struct eraser_state eraser_state; extern eraser_state *erase_window (Display *, Window, eraser_state *); #endif /* __XSCREENSAVER_ERASE_H__ */ xscreensaver-5.34/utils/xshm.h000644 000767 000767 00000002530 07246100474 016155 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 1993, 1994, 1995, 1996, 1997, 1998, 2001 * by Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ /* The MIT-SHM (Shared Memory) extension is pretty tricky to use. This file contains the common boiler-plate for creating a shared XImage structure, and for making sure that the shared memory segments get allocated and shut down cleanly. */ #ifndef __XSCREENSAVER_XSHM_H__ #ifdef HAVE_XSHM_EXTENSION # include # include # include extern XImage *create_xshm_image (Display *dpy, Visual *visual, unsigned int depth, int format, char *data, XShmSegmentInfo *shm_info, unsigned int width, unsigned int height); extern void destroy_xshm_image (Display *dpy, XImage *image, XShmSegmentInfo *shm_info); #endif /* HAVE_XSHM_EXTENSION */ #endif /* __XSCREENSAVER_XSHM_H__ */ xscreensaver-5.34/utils/xdbe.h000644 000767 000767 00000002010 06674151401 016111 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 1998, 1999 by Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ /* The XDBE (Double Buffering) extension is pretty tricky to use, since you can get X errors at inconvenient times during initialization. This file contains a utility routine to make it easier to deal with. */ #ifndef __XSCREENSAVER_XDBE_H__ #ifdef HAVE_DOUBLE_BUFFER_EXTENSION # include extern XdbeBackBuffer xdbe_get_backbuffer (Display *, Window, XdbeSwapAction); #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ #endif /* __XSCREENSAVER_XDBE_H__ */ xscreensaver-5.34/utils/colorbars.h000644 000767 000767 00000001704 07635005242 017165 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 2001, 2003 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifndef __COLORBARS_H__ #define __COLORBARS_H__ /* Renders colorbars (plus an xscreensaver logo) onto the given Window or Pixmap. Width and height may be zero (meaning "full size".) Colors will be allocated from the cmap, and never freed. */ extern void draw_colorbars (Screen *, Visual *, Drawable, Colormap, int x, int y, int width, int height); #endif /* __COLORBARS_H__ */ xscreensaver-5.34/utils/minixpm.h000644 000767 000767 00000002243 10370561431 016654 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 2001-2006 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifndef __MINIXPM_H__ #define __MINIXPM_H__ /* A dead simple XPM parser that knows how to make XImage structures. Only handles single-byte color XPMs. */ extern XImage * minixpm_to_ximage (Display *, Visual *, Colormap, int depth, unsigned long transparent_color, const char * const * data, int *width_ret, int *height_ret, unsigned long **pixels_ret, int *npixels_ret, unsigned char **mask_ret); #endif /* __MINIXPM_H__ */ xscreensaver-5.34/utils/xscreensaver-intl.h000644 000767 000767 00000002272 07475025012 020653 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 2002 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifndef __XSCREENSAVER_INTL_H__ #define __XSCREENSAVER_INTL_H__ #ifdef ENABLE_NLS # include # define _(String) dgettext(GETTEXT_PACKAGE,(String)) # ifdef gettext_noop # define N_(String) gettext_noop((String)) # else /* !gettext_noop */ # define N_(String) (String) # endif /* !gettext_noop */ #else /* !ENABLE_NLS */ # define _(String) (String) # define N_(String) (String) # define textdomain(String) (String) # define gettext(String) (String) # define dgettext(Domain,String) (String) # define dcgettext(Domain,String,Type) (String) # define bindtextdomain(Domain,Directory) (Domain) #endif /* !ENABLE_NLS */ #endif /* __XSCREENSAVER_INTL_H__ */ xscreensaver-5.34/utils/textclient.h000644 000767 000767 00000002220 12367026006 017353 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 2012-2014 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. * * Running "xscreensaver-text" and returning bytes from it. */ #ifndef __TEXTCLIENT_H__ #define __TEXTCLIENT_H__ # ifdef USE_IPHONE # undef HAVE_FORKPTY # endif typedef struct text_data text_data; extern text_data *textclient_open (Display *); extern void textclient_close (text_data *); extern void textclient_reshape (text_data *, int pix_w, int pix_h, int char_w, int char_h, int max_lines); extern int textclient_getc (text_data *); extern Bool textclient_putc (text_data *, XKeyEvent *); #endif /* __TEXTCLIENT_H__ */ xscreensaver-5.34/utils/aligned_malloc.h000644 000767 000767 00000002162 12341003331 020113 0ustar00jwzjwz000000 000000 /* -*- mode: c; tab-width: 4; fill-column: 128 -*- */ /* vi: set ts=4 tw=128: */ /* aligned_malloc.h, Copyright (c) 2014 Dave Odell Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that 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. */ #ifndef __ALIGNED_MALLOC_H__ #define __ALIGNED_MALLOC_H__ #include #if HAVE_UNISTD_H # include #endif #if _POSIX_VERSION >= 200112L || _XOPEN_VERSION >= 600 # define aligned_malloc posix_memalign # define aligned_free free #else /* old POSIX */ /* This can't simply be named posix_memalign, since the real thing uses free(), but this one can't. */ int aligned_malloc(void **ptr, unsigned alignment, size_t size); void aligned_free(void *); #endif /* old POSIX */ #endif /* __ALIGNED_MALLOC_H__ */ xscreensaver-5.34/utils/thread_util.h000644 000767 000767 00000041276 12415276745 017525 0ustar00jwzjwz000000 000000 /* -*- mode: c; tab-width: 4; fill-column: 78 -*- */ /* vi: set ts=4 tw=78: */ /* thread_util.h, Copyright (c) 2014 Dave Odell Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that 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. */ #ifndef THREAD_UTIL_H #define THREAD_UTIL_H /* thread_util.h because C11 took threads.h. */ /* And POSIX threads because there aren't too many systems that support C11 threads that don't already support POSIX threads. ...Not that it would be too hard to convert from the one to the other. Or to have both. */ /* Beware! Multithreading is a great way to add insidious and catastrophic bugs to a program. Make sure you understand the risks. You may wish to become familiar with race conditions, deadlocks, mutexes, condition variables, and, in lock-free code, memory ordering, cache hierarchies, etc., before working with threads. On the other hand, if a screenhack locks up or crashes, it's not the end of the world: XScreenSaver won't unlock the screen if that happens. */ /* The basic stragegy for applying threads to a CPU-hungry screenhack: 1. Find the CPU-hungry part of the hack. 2. Change that part so the workload can be divided into N equal-sized loads, where N is the number of CPU cores in the machine. (For example: with two cores, one core could render even scan lines, and the other odd scan lines.) 2a. Keeping in mind that two threads should not write to the same memory at the same time. Specifically, they should not be writing to the same cache line at the same time -- so align memory allocation and memory accesses to the system cache line size as necessary. 3. On screenhack_init, create a threadpool object. This creates N worker threads, and each thread creates and owns a user-defined struct. After creation, the threads are idle. 4. On screenhack_frame, call threadpool_run(). Each thread simultaneously wakes up, calls a function that does one of the equal-sized loads, then goes back to sleep. The main thread then calls threadpool_wait(), which returns once all the worker threads have finished. Using this to implement SMP won't necessarily increase performance by a factor of N (again, N is CPU cores.). Both X11 and Cocoa on OS X can impose a not-insignificant amount of overhead even when simply blitting full-screen XImages @ 30 FPS. On systems with simultaneous multithreading (a.k.a. Hyper-threading), performance gains may be slim to non-existant. */ #include "aligned_malloc.h" #if HAVE_CONFIG_H /* For HAVE_PTHREAD. */ # include "config.h" #endif #include #if HAVE_UNISTD_H /* For _POSIX_THREADS. */ # include #endif #ifdef HAVE_COCOA # include "jwxyz.h" #else # include #endif #if HAVE_PTHREAD int threads_available(Display *dpy); #else # define threads_available(dpy) (-1) #endif /* > 0: Threads are available. This is normally _POSIX_VERSION. -1: Threads are not available. */ unsigned hardware_concurrency(Display *dpy); /* This is supposed to return the number of available CPU cores. This number isn't necessarily constant: a system administrator can hotplug or enable/disable CPUs on certain systems, or the system can deactivate a malfunctioning core -- but these are rare. If threads are unavailable, this function will return 1. This function isn't fast; the result should be cached. */ unsigned thread_memory_alignment(Display *dpy); /* Returns the proper alignment for memory allocated by a thread that is shared with other threads. A typical CPU accesses the system RAM through a cache, and this cache is divided up into cache lines - aligned chunks of memory typically 32 or 64 bytes in size. Cache faults cause cache lines to be populated from memory. And, in a multiprocessing environment, two CPU cores can access the same cache line. The consequences of this depend on the CPU model: - x86 implements the MESI protocol [1] to maintain cache coherency between CPU cores, with a serious performance penalty on both Intel [1] and AMD [2]. Intel uses the term "false sharing" to describe two CPU cores accessing different memory in the same cache line. - ARM allows CPU caches to become inconsistent in this case [3]. Memory fences are needed to prevent horrible non-deterministic bugs from occurring. Other CPU architectures have similar behavior to one of the above, depending on whether they are "strongly-orderered" (like x86), or "weakly-ordered" (like ARM). Aligning multithreaded memory accesses according to the cache line size neatly sidesteps both issues. One complication is that CPU caches are divided up into separate levels, and occasionally different levels can have different cache line sizes, so to be safe this function returns the largest cache line size among all levels. If multithreading is not in effect, this returns sizeof(void *), because posix_memalign(3) will error out if the alignment is set to be smaller than that. [1] Intel(R) 64 and IA-32 Architectures Optimization Reference Manual (Order Number: 248966-026): 2.1.5 Cache Hierarchy [2] Software Optimization Guide for AMD Family 10h Processors (Publication #40546): 11.3.4 Data Sharing between Caches [3] http://wanderingcoder.net/2011/04/01/arm-memory-ordering/ */ /* Note: aligned_malloc uses posix_memalign(3) when available, or malloc(3) otherwise. As of SUSv2 (1997), and *probably* earlier, these are guaranteed to be thread-safe. C89 does not discuss threads, or thread safety; non-POSIX systems, watch out! http://pubs.opengroup.org/onlinepubs/7908799/xsh/threads.html http://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_09.html */ /* int thread_malloc(void **ptr, Display *dpy, unsigned size); */ #define thread_malloc(ptr, dpy, size) \ (aligned_malloc((ptr), thread_memory_alignment(dpy), (size))) /* This simply does a malloc aligned to thread_memory_alignment(). See above. On failure, an errno is returned, usually ENOMEM. It's possible for two malloc()'d blocks to at least partially share the same cache line. When a different thread is writing to each block, then bad things can happen (see thread_memory_alignment). Better malloc() implementations will divide memory into pools belonging to one thread or another, causing memory blocks belonging to different threads to typically be located on different memory pages (see getpagesize(2)), mitigating the problem in question...but there's nothing stopping threads from passing memory to each other. And it's not practical for the system to align each block to 64 or 128 byte boundaries -- it's not uncommon to need lots and lots of 8-32 byte allocations, and the waste could become a bit excessive. Some rules of thumb to take away from this: 1. Use thread_alloc for memory that might be written to by a thread that didn't originally allocate the object. 2. Use thread_alloc for memory that will be handed from one thread to another. 3. Use malloc if a single thread allocates, reads from, writes to, and frees the block of memory. Oddly, I (Dave) have not seen this problem described anywhere else. */ #define thread_free(ptr) aligned_free(ptr) #if HAVE_PTHREAD # if defined _POSIX_THREADS && _POSIX_THREADS >= 0 /* See The Open Group Base Specifications Issue 7, , Constants for Options and Option Groups http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/unistd.h.html#tag_13_77_03_02 */ # include /* Most PThread synchronization functions only fail when they are misused. */ # if defined NDEBUG # define PTHREAD_VERIFY(expr) (void)(expr) # else # include # define PTHREAD_VERIFY(expr) assert(!(expr)) # endif extern const pthread_mutex_t mutex_initializer; extern const pthread_cond_t cond_initializer; # else /* Whatever caused HAVE_PTHREAD to be defined (configure script, usually) made a mistake if this is reached. */ /* Maybe this should be a warning. */ # error HAVE_PTHREAD is defined, but _POSIX_THREADS is not. /* #undef HAVE_PTHREAD */ # endif #endif struct threadpool { /* This is always the same as the count parameter fed to threadpool_create(). Here's a neat trick: if the threadpool is zeroed out with a memset, and threadpool_create() is never called to create 0 threads, then threadpool::count can be used to determine if the threadpool object was ever initialized. */ unsigned count; /* Copied from threadpool_class. No need for thread_create here, though. */ size_t thread_size; void (*thread_run)(void *self); void (*thread_destroy)(void *self); void *serial_threads; #if HAVE_PTHREAD pthread_mutex_t mutex; pthread_cond_t cond; /* Number of threads waiting for the startup signal. */ unsigned parallel_pending; /* Number of threads still running. During startup, this is the index of the thread currently being initialized. */ unsigned parallel_unfinished; pthread_t *parallel_threads; #endif }; /* The threadpool_* functions manage a group of threads (naturally). Each thread owns an object described by a threadpool_class. When threadpool_run() is called, the specified func parameter is called on each thread in parallel. Sometime after calling threadpool_run(), call threadpool_wait(), which waits for each thread to return from threadpool_class::run(). Note that thread 0 runs on the thread from which threadpool_run is called from, so if each thread has an equal workload, then when threadpool_run returns, the other threads will be finished or almost finished. Adding code between threadpool_run and threadpool_wait increases the odds that threadpool_wait won't actually have to wait at all -- which is nice. If the system does not provide threads, then these functions will fake it: everything will appear to work normally from the perspective of the caller, but when threadpool_run() is called, the "threads" are run synchronously; threadpool_wait() does nothing. */ struct threadpool_class { /* Size of the thread private object. */ size_t size; /* Create the thread private object. Called in sequence for each thread (effectively) from threadpool_create. self: A pointer to size bytes of memory, allocated to hold the thread object. pool: The threadpool object that owns all the threads. If the threadpool is nested in another struct, try GET_PARENT_OBJ. id: The ID for the thread; numbering starts at zero and goes up by one for each thread. Return 0 on success. On failure, return a value from errno.h; this will be returned from threadpool_create. */ int (*create)(void *self, struct threadpool *pool, unsigned id); /* Destroys the thread private object. Called in sequence (though not always the same sequence as create). Warning: During shutdown, it is possible for destroy() to be called while other threads are still in threadpool_run(). */ void (*destroy)(void *self); }; /* Returns 0 on success, on failure can return ENOMEM, or any error code from threadpool_class.create. */ int threadpool_create(struct threadpool *self, const struct threadpool_class *cls, Display *dpy, unsigned count); void threadpool_destroy(struct threadpool *self); void threadpool_run(struct threadpool *self, void (*func)(void *)); void threadpool_wait(struct threadpool *self); /* io_thread is meant to wrap blocking I/O operations in a one-shot worker thread, with cancel semantics. Unlike threadpool_*, io_thread will not 'fake it'; it is up to the caller to figure out what to do if the system doesn't have threads. In particular, the start_routine passed to io_thread_create will never be called. Clients of io_thread implement four functions: - state *process_start(...); Starts the worker thread. - bool process_is_done(state *); Returns true if the I/O operation is complete. - void process_cancel(state *); "Cancels" the I/O operation. The thread will continue to run, but it will detach, and clean itself up upon completion. - int process_finish(state *, ...) Waits for the I/O operation to complete, returns results, and cleans up. Or: /---\ \/ | /--> cancel start -> is_done --+ \--> finish These functions follow a basic pattern: - start: 1. Allocate a thread state object with thread_alloc. This state object contains an io_thread member. 2. Save parameters from the start parameters to the state object. 3. Start the thread with _io_thread_create. The thread receives the state object as its parameter. - On the worker thread: 1. Do the I/O. 2. Call io_thread_return. 2a. If the result != 0, free the state object. - is_done: 1. Just call _io_thread_is_done. - cancel: 1. Call io_thread_cancel. 1a. If the result != 0, free the state object. - finish: 1. Call io_thread_finish. 2. Copy results out of the state object as needed. 3. Free the state object...or return it to the caller. Incidentally, there may sometimes be asynchronous versions of blocking I/O functions (struct aiocb and friends, for example); these should be preferred over io_thread when performance is a concern. */ enum _io_thread_status { _io_thread_working, _io_thread_done, _io_thread_cancelled }; struct io_thread { #if HAVE_PTHREAD /* Common misconception: "volatile" should be applied to atomic variables, such as 'status', below. This is false, see . */ enum _io_thread_status status; pthread_t thread; #else char gcc_emits_a_warning_when_the_struct_has_no_members; #endif }; #if HAVE_PTHREAD void *io_thread_create(struct io_thread *self, void *parent, void *(*start_routine)(void *), Display *dpy, unsigned stacksize); /* Create the thread, returns NULL on failure. Failure is usually due to ENOMEM, or the system doesn't support threads. self: The io_thread object to be initialized. parent: The parameter to start_routine. The io_thread should be contained within or be reachable from this. start_routine: The start routine for the worker thread. dpy: The X11 Display, so that '*useThreads' is honored. stacksize: The stack size for the thread. Set to 0 for the system default. A note about stacksize: Linux, for example, uses a default of 2 MB of stack per thread. Now, this memory is usually committed on the first write, so lots of threads won't waste RAM, but it does mean that on a 32-bit system, there's a limit of just under 1024 threads with the 2 MB default due to typical address space limitations of 2 GB for userspace processes. And 1024 threads might not always be enough... */ int io_thread_return(struct io_thread *self); /* Called at the end of start_routine, from above. Returns non-zero if the thread has been cancelled, and cleanup needs to take place. */ int io_thread_is_done(struct io_thread *self); /* Call from the main thread. Returns non-zero if the thread finished. */ int io_thread_cancel(struct io_thread *self); /* Call from the main thread if the results from the worker thread are not needed. This cleans up the io_thread. Returns non-zero if cleanup needs to take place. */ void io_thread_finish(struct io_thread *self); /* Call from the main thread to wait for the worker thread to finish. This cleans up the io_thread. */ #else #define IO_THREAD_STACK_MIN 0 #define io_thread_create(self, parent, start_routine, dpy, stacksize) NULL #define io_thread_return(self) 0 #define io_thread_is_done(self) 1 #define io_thread_cancel(self) 0 #define io_thread_finish(self) #endif #if HAVE_PTHREAD # define THREAD_DEFAULTS "*useThreads: True", # define THREAD_DEFAULTS_XLOCK "*useThreads: True\n" # define THREAD_OPTIONS \ {"-threads", ".useThreads", XrmoptionNoArg, "True"}, \ {"-no-threads", ".useThreads", XrmoptionNoArg, "False"}, #else # define THREAD_DEFAULTS # define THREAD_DEFAULTS_XLOCK # define THREAD_OPTIONS #endif /* If a variable 'member' is known to be a member (named 'member_name') of a struct (named 'struct_name'), then this can find a pointer to the struct that contains it. */ #define GET_PARENT_OBJ(struct_name, member_name, member) (struct_name *)((char *)member - offsetof(struct_name, member_name)); #endif xscreensaver-5.34/utils/async_netdb.h000664 000767 000767 00000015535 12415276745 017513 0ustar00jwzjwz000000 000000 /* vi: set tw=78: */ /* async_netdb.h, Copyright (c) Dave Odell * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * 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. */ #ifndef ASYNC_NETDB_H #define ASYNC_NETDB_H #include "thread_util.h" #include #include #include #include /* Both async_name_from_addr_* and async_addr_from_name_* follow basic pattern for io_thread clients as described in thread_util.h: 1. async_*_from_*_start 2. async_*_from_*_is_done (repeat as necessary) 3a. async_*_from_*_finish to retrieve the results, or: 3b. async_*_from_*_cancel to abort the lookup. On systems that can't do asynchronous host lookups, the *_finish functions do the actual lookup. */ #ifndef NI_MAXHOST /* From the glibc man page for getnameinfo(3): Since glibc 2.8, these definitions are exposed only if one of the feature test macros _BSD_SOURCE, _SVID_SOURCE, or _GNU_SOURCE is defined. */ # define NI_MAXHOST 1025 #endif #if HAVE_PTHREAD && HAVE_GETADDRINFO /* If threads or getaddrinfo() are unavailable, then the older gethostbyname() and gethostbyaddr() functions are used, and IPv6 is disabled. */ # define ASYNC_NETDB_USE_GAI 1 #endif #if ASYNC_NETDB_USE_GAI typedef struct sockaddr_storage async_netdb_sockaddr_storage_t; int _async_netdb_is_done (struct io_thread *io); #else typedef struct sockaddr_in async_netdb_sockaddr_storage_t; # ifndef EAI_SYSTEM /* The EAI_* codes are specified specifically as preprocessor macros, so the #ifdef here should always work... http://pubs.opengroup.org/onlinepubs/009604499/basedefs/netdb.h.html */ # define ASYNC_NETDB_FAKE_EAI 1 /* Even without addrinfo, the EAI_* error codes are used. The numbers are from Linux's netdb.h. */ # define EAI_NONAME -2 # define EAI_AGAIN -3 # define EAI_FAIL -4 # define EAI_MEMORY -10 # define EAI_SYSTEM -11 const char *_async_netdb_strerror (int errcode); # define gai_strerror(errcode) _async_netdb_strerror (errcode) # endif # define _async_netdb_is_done(io) 1 #endif /* In non-threaded mode, _async_name_from_addr_param is used in place of async_name_from_addr. */ struct _async_name_from_addr_param { socklen_t addrlen; async_netdb_sockaddr_storage_t addr; }; typedef struct async_name_from_addr { /* Stupid memory trick, thwarted: The host string could be at the beginning of this structure, and the memory block that contains this struct could be resized and returned directly in async_name_from_addr_finish. But... There is no aligned_realloc. In fact, aligned_realloc is a bit of a problem, mostly because: 1. realloc() is the only way to resize a heap-allocated memory block. 2. realloc() moves memory. 3. The location that realloc() moves memory to won't be aligned. */ struct _async_name_from_addr_param param; struct io_thread io; char host[NI_MAXHOST]; int gai_error; int errno_error; } *async_name_from_addr_t; async_name_from_addr_t async_name_from_addr_start (Display *dpy, const struct sockaddr *addr, socklen_t addrlen); /* Starts an asynchronous name-from-address lookup. dpy: An X11 Display with a .useThreads resource. addr: An address. Like various socket functions (e.g. bind(2), connect(2), sendto(2)), this isn't really a struct sockaddr so much as a "subtype" of sockaddr, like sockaddr_in, or sockaddr_in6, or whatever. addrlen: The (actual) length of *addr. Returns NULL if the request couldn't be created (due to low memory). */ #define async_name_from_addr_is_done(self) _async_netdb_is_done (&(self)->io) #if ASYNC_NETDB_USE_GAI void async_name_from_addr_cancel (async_name_from_addr_t self); #else # define async_name_from_addr_cancel(self) (free (self)) #endif int async_name_from_addr_finish (async_name_from_addr_t self, char **host, int *errno_error); /* Gets the result of an asynchronous name-from-address lookup. If the lookup operation is still in progress, or if the system can't do async lookups, this will block. This cleans up the lookup operation; do not use 'self' after calling this function. self: The lookup operation. host: If no error, the name of the host. Free this with free(3). errno_error: The value of errno if EAI_SYSTEM is returned. Can be NULL. Returns 0 on success, otherwise an error from getnameinfo(3). */ /* In non-threaded mode, async_addr_from_name contains different stuff. */ typedef struct async_addr_from_name { #if ASYNC_NETDB_USE_GAI struct io_thread io; int gai_error; int errno_error; struct addrinfo *res; #else char dont_complain_about_empty_structs; #endif } *async_addr_from_name_t; async_addr_from_name_t async_addr_from_name_start (Display *dpy, const char *host); /* Starts an asynchronous address-from-name lookup. dpy: An X11 display. host: The hostname to look up. Returns NULL if the request couldn't be created (due to low memory). */ #define async_addr_from_name_is_done(self) _async_netdb_is_done (&(self)->io) #if ASYNC_NETDB_USE_GAI void async_addr_from_name_cancel (async_addr_from_name_t self); #else # define async_addr_from_name_cancel(self) (thread_free (self)); #endif /* sockaddr must be sizeof(async_netdb_sockaddr_storage_t) in size. */ int async_addr_from_name_finish (async_addr_from_name_t self, void *addr, socklen_t *addrlen, int *errno_error); /* Returns the address from an asynchronous address-from-name operation. If the lookup is still in progress, or the system can't do an asynchronous lookup, this blocks. This cleans up the lookup operation; do not use 'self' after calling this function. self: The lookup operation. addr: A sockaddr. This must be as large as or larger than sizeof(async_netdb_sockaddr_storage_t). (Hint: just use an instance of async_netdb_sockaddr_storage_t itself here.) addrlen: The length of the obtained sockaddr. errno_error: The value of errno if EAI_SYSTEM is returned. Can be NULL. Returns 0 on success, or an error from getaddrinfo(3). */ #endif /* Local Variables: */ /* mode: c */ /* fill-column: 78 */ /* c-file-style: "gnu" */ /* c-basic-offset: 2 */ /* indent-tabs-mode: nil */ /* End: */ xscreensaver-5.34/utils/xft.h000644 000767 000767 00000011020 12524712374 015774 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 2014-2015 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ /* Compatibility layer using XDrawString, XDrawString16() or Xutf8DrawString(). This layer is used by X11 systems without Xft, and by MacOS / iOS. */ #ifndef __XSCREENSAVER_XFT_H__ #define __XSCREENSAVER_XFT_H__ /* The XGlyphInfo field names and values are, of course, arbitrarily different from XCharStruct for no sensible reason. These macros translate between them. */ # define XGlyphInfo_to_XCharStruct(G,C) do { \ (C).lbearing = -(G).x; \ (C).rbearing = (G).width - (G).x; \ (C).ascent = (G).y; \ (C).descent = (G).height - (G).y; \ (C).width = (G).xOff; \ } while (0) # define XCharStruct_to_XGlyphInfo(C,G) do { \ (G).x = -(C).lbearing; \ (G).y = (C).ascent; \ (G).xOff = (C).width; \ (G).yOff = 0; \ (G).width = (C).rbearing - (C).lbearing; \ (G).height = (C).ascent + (C).descent; \ } while (0) /* Xutf8TextExtents returns a bounding box in an XRectangle, which conveniently interprets everything in the opposite direction from XGlyphInfo! */ # define XCharStruct_to_XmbRectangle(C,R) do { \ (R).x = (C).lbearing; \ (R).y = -(C).ascent; \ (R).width = (C).rbearing - (C).lbearing; \ (R).height = (C).ascent + (C).descent; \ } while (0) # define XmbRectangle_to_XCharStruct(R,C,ADV) do { \ (C).lbearing = (R).x; \ (C).rbearing = (R).width + (R).x; \ (C).ascent = -(R).y; \ (C).descent = (R).height + (R).y; \ (C).width = (ADV); \ } while (0) # ifdef HAVE_XFT # include # else /* !HAVE_XFT -- the rest of the file */ # ifdef HAVE_COCOA # include "jwxyz.h" #elif defined(HAVE_ANDROID) # include "jwxyz.h" # else # include # endif /* This doesn't seem to work right under X11. See comment in xft.c. */ # ifndef HAVE_COCOA # undef HAVE_XUTF8DRAWSTRING # endif # ifndef _Xconst # define _Xconst const # endif typedef struct _XGlyphInfo { unsigned short width, height; /* bounding box of the ink */ short x, y; /* distance from upper left of bbox to glyph origin. */ short xOff, yOff; /* distance from glyph origin to next origin. */ } XGlyphInfo; typedef struct _XftFont { XFontStruct *xfont; # ifdef HAVE_XUTF8DRAWSTRING XFontSet fontset; # endif char *name; int ascent; int descent; int height; } XftFont; typedef struct { unsigned short red; unsigned short green; unsigned short blue; unsigned short alpha; } XRenderColor; typedef struct _XftColor { unsigned long pixel; XRenderColor color; } XftColor; typedef struct _XftDraw XftDraw; typedef unsigned char FcChar8; XftFont *XftFontOpenXlfd (Display *dpy, int screen, _Xconst char *xlfd); #define XftFontOpenName XftFontOpenXlfd void XftFontClose (Display *dpy, XftFont *font); Bool XftColorAllocName (Display *dpy, _Xconst Visual *visual, Colormap cmap, _Xconst char *name, XftColor *result); Bool XftColorAllocValue (Display *dpy, _Xconst Visual *visual, Colormap cmap, _Xconst XRenderColor *color, XftColor *result); void XftColorFree (Display *dpy, Visual *visual, Colormap cmap, XftColor *color); XftDraw *XftDrawCreate (Display *dpy, Drawable drawable, Visual *visual, Colormap colormap); void XftDrawDestroy (XftDraw *draw); void XftTextExtentsUtf8 (Display *dpy, XftFont *pub, _Xconst FcChar8 *string, int len, XGlyphInfo *extents); void XftDrawStringUtf8 (XftDraw *draw, _Xconst XftColor *color, XftFont *pub, int x, int y, _Xconst FcChar8 *string, int len); # endif /* !HAVE_XFT */ #endif /* __XSCREENSAVER_XFT_H__ */ xscreensaver-5.34/utils/utf8wc.h000644 000767 000767 00000003606 12521213762 016420 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 2014-2015 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifndef __XSCREENSAVER_UTF8WC_H__ #define __XSCREENSAVER_UTF8WC_H__ /* Utilities for converting between UTF8 and XChar2b. */ /* Converts a null-terminated UTF8 string to a null-terminated XChar2b array. This only handles characters that can be represented in 16 bits, the Basic Multilingual Plane. (No hieroglyphics, Elvish, Klingon or Emoji.) */ extern XChar2b * utf8_to_XChar2b (const char *, int *length_ret); /* Converts a null-terminated XChar2b array to a null-terminated UTF8 string. */ extern char * XChar2b_to_utf8 (const XChar2b *, int *length_ret); /* Split a UTF8 string into an array of strings, one per character. The sub-strings will be null terminated and may be multiple bytes. */ extern char ** utf8_split (const char *string, int *length_ret); /* Converts a UTF8 string to the closest Latin1 or ASCII equivalent. */ extern char *utf8_to_latin1 (const char *string, Bool ascii_p); /* Converts a Unicode character to a multi-byte UTF8 sequence. Returns the number of bytes written. */ extern int utf8_encode (unsigned long uc, char *out, long length); /* Parse the first UTF8 character at the front of the string. Return the Unicode character, and the number of bytes read. */ extern long utf8_decode (const unsigned char *in, long length, unsigned long *unicode_ret); #endif /* __XSCREENSAVER_UTF8WC_H__ */ xscreensaver-5.34/utils/images/logo-180.xpm000644 000767 000767 00000102021 10416374157 020266 0ustar00jwzjwz000000 000000 /* XPM */ /* XScreenSaver Logo, designed by Angela Goodman Copyright (c) 2001, 2002 by Jamie Zawinski Unauthorized use or reproduction prohibited. http://www.jwz.org/xscreensaver/ */ static const char * const logo_180_xpm[] = { "180 180 16 1", " c None m None", ") c #FF0000 m #FFFFFF", ", c #FFFFFF m #FFFFFF", ". c #000000 m #000000", "- c #ED9E00 m #FFFFFF", "' c #4F3504 m #000000", "= c #DBDBDB m #000000", "> c #B0B0B0 m #000000", "+ c #929292 m #000000", "; c #797979 m #000000", "@ c #A30000 m #000000", "# c #604D28 m #000000", "$ c #600000 m #000000", "% c #37332D m #000000", "& c #2D0C05 m #000000", "* c #A46E00 m #000000", " ", " . ", " .. ", " ... ", " . ... ", " .. ... ", " .&..... ", " &&.... ", " .@&.... ", " $)..... ", " .)@.... ", " .@)@.... ", " &))$.... ", " .)))&... ", " .@))@&... ", " $)))@.... ", " &))))$.... ", " .)))))&... ", " @))))@.... ", " $)))))$&... ", " .)))))).&.. ", " .))))))@.... .. ", " .)))))))&'... .. ... ", " .@)))))))%'.. . ... ", " @)))))))$#&.. .. ... ", " $))))))))&#... .& .... ", " &))))))))$*%.. &. .... ", " $))))))))@#*... .$..... ", " &)))))))))&-'.. .@$..... ", " $)))))))))&-*.. &)...... ", " &)))))))))@*-... .@@..... ", " .)))))))))$*-&.. &)@..... ", " .)))))))))$**... .@)$..&.. ", " .)))))))))&-'.. &))$.&'.. ", " $))))))))$'-... .@))$.*'.. ", " $)))))))).-'.. $)))&%-... ", " @)))))))$#-... .))))&*-.. ", " .@)))))))&-#.. &))))&-*.. ", " .)))))))$*-... .@))))&--... ", " ....................................................$)))))))&-*.........&)))))&-*............................................................... ", " .....................................................@))))))$#-&.........$)))))&--................................................................. ", " .....................................................&)))))))&-*..........))))))$--.................................................................. ", " .....................................................@))))))$*-'.........$))))))$*-.................................................................. ", " .....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,+&))))))).--..;,,,,,,#@))))))@*-..;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=#.... ", " ....%,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=&)))))))@'-#..=,,,,,=&)))))))$*-..;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%@)))))))&--&.%,,,,,,+$)))))))@#-..;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%$)))))))@'-*..+,,,,,,%)))))))))&-%.#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,+$))))))))$*-'.&=,,,,,=&)))))))))&-'.&,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>.)))))))))&--..#,,,,,,;@)))))))))$-#..=,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=&@))))))))$*-*..>,,,,,,#@)))))))))$**..>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=%@)))))))))&--'.&,,,,,,=&))))))))))@#-..+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;$))))))))))%--..;,,,,,,>$)))))))))))%-&.#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=&))))))))))@#--..+,,,,,,;@)))))))))))&-'.%,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>=,,,,,,,%@))))))))))$--#..=,,,,,,%))))))))))))$*#..=,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;.>,&&=,,+$)))))))))))&--'.%,,,,,,,&))))))))))))@'*..>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,=>>>>>>+>>>>+>>>>+&$;#..;>>&)))))))))))@'--..%>>>>>>+&)))))))))))))&-&.%>>>>+>>>>+>>>>+>>>>+>>>>+>>>>+>>>>>>>>>>>>>>=,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,+...................@&.......$)))))))))))@#--..........$)))))))))))))$*#...............................................%>,,,,,,,,,=.... ", " ....+,,,,,,,,,#...................&)........@)))))))))))@*-*..........@)))))))))))))@#*.................................................+,,,,,,,,=.... ", " ....+,,,,,,,,+....................@@.......$))))))))))))$*-*..........@))))))))))))))&-&.................................................=,,,,,,,=.... ", " ....+,,,,,,,=....................&)@.......)))))))))))))$--#..........@))))))))))))))$*#.................................................%,,,,,,,=.... ", " ....+,,,,,,,>....................@)$......&)))))))))))))$*-*..........)))))))))))))))@'*..................................................,,,,,,,=.... ", " ....+,,,,,,,+....................)).......$)))))))))))))@*-#..........))))))))))))))))&-..................................................>,,,,,,=.... ", " ....+,,,,,,,+...................@)).......@)))))))))))))@#-*..........))))))))))))))))$#'.................................................>,,,,,,=.... ", " ....+,,,,,,,+...................@)@......&)))))))))))))))%-*..........)))))))))))))))))&-.................................................>,,,,,,=.... ", " ....+,,,,,,,+..................$))$......$)))))))))))))))&--..........)))))))))))))))))$*'................................................>,,,,,,=.... ", " ....+,,,,,,,+..................@))&......$)))))))))))))))$*-&.........)))))))))))))))))@%-................................................>,,,,,,=.... ", " ....+,,,,,,,+..................))).......@))))))))))))))))&-#.........))))))))))))))))))&*'...............................................>,,,,,,=.... ", " ....+,,,,,,,+.................$))).......@))))))))))))))))$*-.........))))))))))))))))))@'*...............................................>,,,,,,=.... ", " ....+,,,,,,,+.................@))@.......))))))))))))))))))&-&........)))))))))))))))))))$*'..............................................>,,,,,,=.... ", " ....+,,,,,,,+.................)))@.%.....))))))))))))))))))$#*........@))))))))))))))))))@&-..............................................>,,,,,,=.... ", " ....+,,,,,,,+................$)))$.*.....)))))))))))))))))))&*&.......$)))))))))))))))))))$*#.............................................>,,,,,,=.... ", " ....+,,,,,,,+................@)))$'*.....@)))))))))))))))))))&*.......&))))))))))))))))))))&-&............................................>,,,,,,=.... ", " ....+,,,,,,,+...............&))))$**..&%&@)))))))))))))))))))@%#...%&%.))))))))))))))))))))$#*...&%%&%%&%%&%%&%%&%%&%%....................>,,,,,,=.... ", " ....+,,,,,,,+...............$))))$*-..+,;@))))))))))))))))))))$#%..+,,#@))))))))))))))))))))&-#..%,,,,,,,,,,,,,,,,,,,,=+..................>,,,,,,=.... ", " ....+,,,,,,,+...............@))))$--..+,+@)))))))))))))))))))))&#...=,=&))))))))))))))))))))).-&..#,,,,,,,,,,,,,,,,,,,,,=.................>,,,,,,=.... ", " ....+,,,,,,,+...............)))))$*-%.#,>$))))))))))))))))))))))&#...=,'@))))))))))))))))))))@%-%..;,,,,,,,,,,,,,,,,,,,,,#................>,,,,,,=.... ", " ....+,,,,,,,+..............$)))))$--&.#,,&))))))))))))))))))))))@&'..%,>$)))))))))))))))))))))$#-...+,,,,,,,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+..............@)))))@*-#.%,,#@))))))))))))))))))))))@&'..%=%))))))))))))))))))))))&**...>,,,,,,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+..............@)))))@#-#..,,+$)))))))))))))))))))))))@&%..;+$)))))))))))))))))))))@&--..#,,,,,,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.............&))))))@#-*..=,=&))))))))))))))))))))))))$'&..;%))))))))))))))))))))))@'-#..>,,,,,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.............&)))))))&--..+,,'@))))))))))))))))))))))))&#...#$))))))))))))))))))))))&*-..#,,,,,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.............@)))))))&--..#,,>$)))))))))))))))))))))))))&#....)))))))))))))))))))))))&-#..>,,,,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.............@)))))))@#-#.&=,,&)))))))))))))))))))))))))@&#...$))))))))))))))))))))))$#-..#,,,,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.............)))))))))#-*..>,,;@)))))))))))))))))))))))))@''...)))))))))))))))))))))))&-'..,,,,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+............&)))))))))&--&.#,,=&))))))))))))))))))))))))))&*&..&))))))))))))))))))))))@#*..>,,,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+............@)))))))))$*-'.&,,,#@))))))))))))))))))))))))))&*...@))))))))))))))))))))))&-..#,,,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+............@)))))))))@#-*..>,,=&))))))))))))))))))))))))))$##..$))))))))))))))))))))))@##..=,,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+............@))))))))))%--..#,,,%)))))))))))))))))))))))))))&-&..@))))))))))))))))))))))&*..+,,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+............)))))))))))$*-#..=,,>&))))))))))))))))))))))))))@#*..$))))))))))))))))))))))$*&.#,,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+............))))))))))))&--..#,,,%@))))))))))))))))))))))))))&-&..@)))))))))))))))))))))@''.%,,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+...........$))))))))))))&*-'..=,,+$))))))))))))))))))))))))))@#*..$))))))))))))))))))))))&#..=,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+...........$))))))))))))@'-*..;,,,&)))))))))))))))))))))))))))&-&..))))))))))))))))))))))$#..>,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+...........$)))))))))))))&*-'..=,,+$))))))))))))))))))))))))))$**..$))))))))))))))))))))))&..;,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+...........@)))))))))))))@'-*..;,,,.))))))))))))))))))))))))))@%-...))))))))))))))))))))))&%.%,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+...........@))))))))))))))$*-%..=,,;$))))))))))))))))))))))))))&-'..@)))))))))))))))))))))$&..,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+...........@)))))))))))))))&-*..%,,=&))))))))))))))))))))))))))@'-..$)))))))))))))))))))))@&..>,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+...........@)))))))))))))))$#-#..>,,;@))))))))))))))))))))))))))&*&.&))))))))))))))))))))))...;,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+...........@))))))))))))))))&*-&.&=,=.)))))))))))))))))))))))))))&&..))))))))))))))))))))))$..%,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+...........@))))))))))))))))@&-#..+,,#@)))))))))))))))))))))))))))$.$))))))))))))))))))))))@...=,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+...........$)))))))))))))))))$#-%..=,>&)))))))))))))))))))))))))))))))))))))))))))))))))))))...>,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+...........$))))))))))))))))))$**..#,,#@))))))))))))))))))))))))))))))))))))))))))))))))))))...+,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+...........&))))))))))))))))))@&-'..>,>$))))))))))))))))))))))))))))))))))))))))))))))))))))$..#,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+............)))))))))))))))))))@%-..%,,&))))))))))))))))))))))))))))))))))))))))))))))))))))@..%,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+............@)))))))))))))))))))$##..;,#@)))))))))))))))))))))))))))))))))))))))))))))))))))@...,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+............$))))))))))))))))))))&*&.&=>$))))))))))))))))))))))))))))))))))))))))))))))))))))...=,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.............)))))))))))))))))))))%#..;,&))))))))))))))))))))))))))))))))))))))))))))))))))))&..>,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.............@))))))))))))))))))))$''..=#@)))))))))))))))))))))))))))))))))))))))))))))))))))$..;,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.............&)))))))))))))))))))))&#..#+$)))))))))))))))))))))))))))))))))))))))))))))))))))$..;,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+..............@))))))))))))))))))))@&'..=$)))))))))))))))))))))))))))))))))))))))))))))))))))@..&,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+..............$)))))))))))))))))))))$'..+&)))))))))))))))))))))))))))))))))))))))))))))))))))@...=,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+...............))))))))))))))))))))))...#%))))))))))))))))))))))))))))))))))))))))))))))))))))...=,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+...............$)))))))))))))))))))))$....))))))))))))))))))))))))))))))))))))))))))))))))))))...+,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+................))))))))))))))))))))))....))))))))))))))))))))))))))))))))))))))))))))))))))))...;,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+................$)))))))))))))))))))))$...@)))))))))))))))))))))))))))))))))))))))))))))))))))&&.#,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................))))))))))))))))))))))&..))))))))))))))))))))))))))))))))))))))))))))))))))))$%.%,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................$))))))))))))))))))))))&&))))))))))))))))))))))))))))))))))))))))))))))))))))$'..,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................&))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))$#..=,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................+$)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))$*..>,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................=%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))$*..>,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................,+&))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))&-..;,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................,,#@)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))&-%.#,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................,,=&)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))&-'.%,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................,,,;$)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))@'-#.&,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................,,,,&@))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))@*-*..=,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................,,,,>$))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))&--&..=,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................,,,,,#@)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))&-'..#,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................,,,,,=&))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))$**..%,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................,,,,,,>&))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))).*..&=,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................,,,,,,,;$)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))$'...=,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................,,,,,,,,%@)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))).&..;,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................=,,,,,,,=&)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))$...#,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................>,,,,,,,,>&))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))...%,,,,,,,,,,,,,,+................>,,,,,,=.... ", " ....+,,,,,,,+.................;,,,,,,,,,#$))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))&..&=,,,,,,,,,,,,,,%................>,,,,,,=.... ", " ....+,,,,,,,+..................+,,,,,,,,,#$))))))))))))))))))))))))))))))))))))))))))))))))))))))))))@...=,,,,,,,,,,,,,,;.................>,,,,,,=.... ", " ....+,,,,,,,+...................#+>>>>>>>>%@))))))))))))))))))))))))))))))))))))))))))))))))))))))))@...#>>>>>>>>>>>>>+#..................>,,,,,,=.... ", " ....+,,,,,,,+...............................@)))))))))))))))))))))))))))))))))))))))))))))))))))))))&.....................................>,,,,,,=.... ", " ....+,,,,,,,+................................@)))))))))))))))))))))))))))))))))))))))))))))))))))))&......................................>,,,,,,=.... ", " ....+,,,,,,,+................................&@)))))))))))))))))))))))))))))))))))))))))))))))))))$.......................................>,,,,,,=.... ", " ....+,,,,,,,+.................................&@)))))))))))))))))))))))))))))))))))))))))))))))))@........................................>,,,,,,=.... ", " ....+,,,,,,,+..................................&@)))))))))))))))))))))))))))))))))))))))))))))))$.........................................>,,,,,,=.... ", " ....+,,,,,,,+...................................&@)))))))))))))))))))))))))))))))))))))))))))))$..........................................>,,,,,,=.... ", " ....+,,,,,,,+....................................&@)))))))))))))))))))))))))))))))))))))))))))$...........................................>,,,,,,=.... ", " ....+,,,,,,,+......................................@)))))))))))))))))))))))))))))))))))))))))&............................................>,,,,,,=.... ", " ....+,,,,,,,+.......................................$))))))))))))))))))))))))))))))))))))))@..............................................>,,,,,,=.... ", " ....+,,,,,,,+.........................................@)))))))))))))))))))))))))))))))))))&...............................................>,,,,,,=.... ", " ....+,,,,,,,+..........................................$))))))))))))))))))))))))))))))))@.................................................=,,,,,,=.... ", " ....+,,,,,,,=............................................$))))))))))))))))))))))))))))$&.................................................&,,,,,,,=.... ", " ....+,,,,,,,,%.............................................$@))))))))))))))))))))))@$&...................................................;,,,,,,,=.... ", " ....+,,,,,,,,=................................................$@@))))))))))))))@@@&'#%..................................................%,,,,,,,,=.... ", " ....+,,,,,,,,,=&...................................................$$@@@@@@@$$&''**'...................................................%=,,,,,,,,=.... ", " ....+,,,,,,,,,,=+%%%#%%%%#%%%%#%%%%#%%%%#%%%%#%%%%#%%%%#%%..................#----'............%%%#%%%%#%%%%#%%%%#%%%%#%%%%#%%%%#%%%%##+,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,&..................&''..............=,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,+....................................;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,&.....................................=,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#......................................%,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,+........................................;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>&.........................................>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>............................................>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>..............................................;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#................................................#=,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>%..................................................&+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>%......................................................%>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=;%..........................................................&;=,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>................................................................+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.................................................................%,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%................................................................#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+=,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....&,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>.... ", " ....%;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;..... ", " ..................................................................................................................................................... ", " ................................................................................................................................................... ", " .................................................................................................................................................. ", " ............................................................................................................................................... ", " ", " ", " "}; xscreensaver-5.34/utils/images/logo-50.xpm000644 000767 000767 00000006472 07707370774 020231 0ustar00jwzjwz000000 000000 /* XPM */ /* XScreenSaver Logo, designed by Angela Goodman Copyright (c) 2001, 2002 by Jamie Zawinski Unauthorized use or reproduction prohibited. http://www.jwz.org/xscreensaver/ */ static const char * const logo_50_xpm[] = { "50 50 16 1", " c None m None", "& c #FF0000 m #FFFFFF", ", c #FFFFFF m #FFFFFF", ". c #000000 m #000000", "= c #CCCCCC m #000000", "- c #B0B0B0 m #000000", "+ c #989898 m #000000", "; c #707070 m #000000", "@ c #A30805 m #000000", "# c #5E4D34 m #000000", "$ c #A6531B m #000000", "% c #620805 m #000000", "* c #A63013 m #000000", "> c #523410 m #000000", "' c #AC6C44 m #000000", ") c #24221C m #000000", " ", " .. ", " .. ", " @. ", " @@. ", " %&% ", " &&. . ", " &&*. .. ", " &&@> %. ", " &&*. @) ", " %&&#. @&# ", " ..............@&*)..&&#................. ", " .+,,,,,,,,,,,,'&&$;,'&@#=,,,,,,,,,,,,,,,-. ", " .+,,,,,,,,,,,-&&*#=,@&&>-,,,,,,,,,,,,,,,-. ", " .+,,,,,,,,,,,@&&$#,=&&&*;,,,,,,,,,,,,,,,-. ", " .+,,=;;;;;>)*&&&'>;#&&&*>;;;;;;;;;;;;+,,-. ", " .+,=.....%..&&&&'..%&&&&>.............+,-. ", " .+,-.....@..&&&&$..%&&&&*.............;,-. ", " .+,+....%@.%&&&&$..%&&&&@)............;,-. ", " .+,-....@@.%&&&&&).%&&&&&*............;,-. ", " .+,-....&*>$&&&&&@);&&&&&@>#==-==;....;,-. ", " .+,-....&*>-&&&&&&%#*&&&&&*>-,,,,,....;,-. ", " .+,+...%&@#=&&&&&&&%)&&&&&&*#,,,,,....;,-. ", " .+,-...@&&$;'&&&&&&&)@&&&&&@>=,,,,....;,-. ", " .+,-...&&&$>=&&&&&&&@)&&&&&&*;,,,,....;,-. ", " .+,-...&&&&#-$&&&&&&&>@&&&&&@#,,,,....;,-. ", " .+,+...&&&&$>-&&&&&&&*%&&&&&&),,,,....;,-. ", " .+,-...&&&&&#+*&&&&&&&@&&&&&&%=,,,....;,-. ", " .+,-...&&&&&@>+&&&&&&&&&&&&&&%+,,,....;,-. ", " .+,-...@&&&&&%#&&&&&&&&&&&&&&@;,,,....;,-. ", " .+,+....&&&&&&)@&&&&&&&&&&&&&&>,,,....;,-. ", " .+,-....@&&&&&%%&&&&&&&&&&&&&&),,,....;,-. ", " .+,-....%&&&&&&&&&&&&&&&&&&&&&),,,....;,-. ", " .+,-....;*&&&&&&&&&&&&&&&&&&&&>=,,....;,-. ", " .+,+....;=&&&&&&&&&&&&&&&&&&&@#-,,....;,-. ", " .+,-....;,'&&&&&&&&&&&&&&&&&&*#,,,....;,-. ", " .+,-....;,,*&&&&&&&&&&&&&&&&@),,,,....;,-. ", " .+,-.....#;#@&&&&&&&&&&&&&&&.#;;;)....;,-. ", " .+,+.........@&&&&&&&&&&&&&%..........;,-. ", " .+,-..........@&&&&&&&&&&&............;,-. ", " .+,-...........%&&&&&&&&@.............;,-. ", " .+,,#)))))))))))..%@@@*)...))))))))))>,,-. ", " .+,,,,,,,,,,,,,,).........;,,,,,,,,,,,,,-. ", " .+,,,,,,,,,,,,,#...........-,,,,,,,,,,,,-. ", " .+,,,,,,,,,,,=#.............+,,,,,,,,,,,-. ", " .+,,,,,,,,,,#.................-,,,,,,,,,-. ", " .+,,,,,,,,,,==-=-=-=-=-=-=-=-=,,,,,,,,,,-. ", " .;++++++++++++++++++++++++++++++++++++++;. ", " ........................................ ", " "}; xscreensaver-5.34/utils/images/screensaver-cmndln.png000644 000767 000767 00000002020 07666260010 022562 0ustar00jwzjwz000000 000000 ‰PNG  IHDRàw=øbKGDÿÿÿ ½§“ÅIDATxÚµ•=«U†Ÿý1çk¼IÐN¼¶‘€`,­Rè°µ [+•ÄFH­`¡)„ü‚4’" ‚‚ÁBÉg¡†œ$jî™Ù{¯µ,öœ9ÞÜ`!q`˜föû¬wíõÿ÷óééOþìY¿§?úð!à`?]ÿŽà=!œó8çÆTAÍP)”")”œI)‘R¢ï;ú¾§ï{º®#çÌ{ïŸØŠÞ9¾<÷5¿/ïÑ4 Î9bŒxçð>âÃ03LU%¥L‘Bê3)õ¤”I}âÍ7^çù[ëø*ÀÌX¥Ž;·Å0vº¦“)“fÂt:Å{O qt%"”R(¹K¦ïzRJt]Çd2#§´þµž’"ãáóçÎsùòe.}{‰[woÑĦºñCê¬D„œ2«nE qpì™Ïgô;z çJ|¼zÌÉNrôèQÎ||†#¯a>ŸÓ¶-mÛ²ÿ~Ú¶e_»ÅbÁb±`>›3i&4±¡iú¾ å @;o9ûÙY.\¼Àµ«×H)Ñ.ZB„°hÕq½&Í„œsu<¦¶Ðw]´-ÇOg6›Õèæsš¦Ù¬Þ.;ï=MlÈ)|@Uéþ𩯀”1Fš¦æ=ø0þhjqW…q›êp8ÌŒô$`µªï|mÝû¡7L­ö…*f†Šî׊TÒ¦Š†õ+ÖåªV)JÉ…#"‚s®~qµDKAE‘ ¢žUµ½€Õj¬oS«—"Á¼÷䜟 (2|µ *ƒC‹f¬@Úß{OŸzœs¨*1Ä¡VwR„\29gTµº)5u"Bþ7@úa&9¼óõ€Ïc ×VJ’a>‰ÊÓï ë6€u…¬Å¼÷øàñΫª£ø®T•RÝ= ˜Lf,,9xà ‡–*Ò4 Î\®º(¹Œãbí$çÌòÁQATvBl8¼ý¯:±nPÌ´VEQDeŒ®hAE("H© Z=‚ªñ¡­]û¦ŽŠ”øåç›x53†ª¡ë(¥ ‚‚hA†4­Óµ«7쇽€{÷~#§„ +Èl(Z…uˆTdp¶7ÃL×¶gcº—·_üñÆÍ;‡Þ>öqÒ`bø1[­ Y)*”œkž‹PJ®ÎDÃ9Ï•kÕÁ¡ƒÏ]¿¿|ôN¼qóÎWÀ«À»Y„` ÓÅœÙtÆt:Ã9C†Ž÷@Éä”èûºhD ªµ ‡ç›ûËGß+€màðÅ3ZøŸzÛÀ$·?‡Áwe=ÿã#À]à*ðп·š4Ü2ËæIEND®B`‚xscreensaver-5.34/utils/images/screensaver-colorselector.png000644 000767 000767 00000002120 07666260010 024167 0ustar00jwzjwz000000 000000 ‰PNG  IHDRàw=ø pHYs  ÒÝ~ütIMEÓ3N†ïIDATxœµ•Kh\UÇçÞ›™LÒd3y4¶¦V‚&¨© ›Ú¥ TªmPI|Ô˜¶ŒT¡W*Ø…-¥øè¢7.\H¬PRÑØ—…>L“”LÒtâ¼2Ídî<ï܇‹™ÌqJÍ&çð}ßùÿ¿×ý.¬ò…ÓZ-|eùfúül™6sñwê_âÁ][z@Hy¹, Í¾-Ð3!L=e+=姦yE}~mòJAvâ2[zà™í— 8R!vSO‘S'K”™È¯EŒ"ÁŠâ•l`Y*–€—ÉlÉ—!ËE{!Áôä9†ö¦'Ï‘N©X–…aÉè†Bˆ2Œ»F ›fþ`êW~9J"­#Ë G? Q¹ÇU*Ê}.¤ÇΠù&l;!ˆþô=žFˆ-@0tÔx€äâ j—@HXZüZ…³ÖJöჭìRxE¶…m×À0tRñ(ñ…ùüޏþÇŒ3::J2™C£o÷®2ï>úà]Nýð-ѹ«äb³d®~]™¢äbˆÅÀL1‡BÔ…yÆÆÆðz½ìm/HÐÙ±ÓБdË4ðxšˆÞŽqìÈ[ôíÜÎzëF%Ai–;aùôz½¨ñ8ß}s,‹‡ÚÞ9ü&–e±ï¥çÙ´uƒƒ¯ÓÝÙT«!¥ÿ/F¨Æò-©%ñG—0RQÚ;îCE¨nðà÷ûq3·‚$2¹;ü\QÖrš¦ÑX_‹–Nñô“[™šü›¾gwúgŽ}ÔV™…Zšˆ’wÅ…¦/ ΖEã¿~¶h”N¥x¬k#`˜–†Z4MCÑ“„ƒašZˆ†Cds:JjÆvºpÞuš:œ=ÍÅógÙüh'†e‘M§‘$"+ŒOM3í»É_ “-ZL´eè:™H¸L¹ð'ö¼Èñ‘O~ï$Ýt±®½uk=dÒYœNŠ,31åãÓÃô òò«Cb=Ú× ¥ã: “¸é!! - Ðzo ½ýÛ8ub„ÞÞÇ …¢`j¸ªDci››¨,\¸;™ Û ©hÓeðÒ·oXËŽ¾§x¢{3ú½8eÝ0@@΂®îM<7ð­mí¸jÖ „YI $e»=%©xw:œ¸Ýn^éßKÐ?G\UÑ´Õ5N\µkhjnÅYãàý#ŸS¥™J‚|ElðeRD}C÷?€–Ëánp³[ÂQí Ñ@@]]=ŠREä¶VI -ň\º` ’`îçΧ~CÁñ…cùz©Yæ¯øx÷—ì?”Ÿ¸ 5Œï–×_|s6ÁªÿôW ×^ÿƒD¹eXq¿IEND®B`‚xscreensaver-5.34/utils/images/screensaver-diagnostic.png000644 000767 000767 00000002433 07666260010 023443 0ustar00jwzjwz000000 000000 ‰PNG  IHDRàw=øbKGDÿÿÿ ½§“ÐIDATxÚµ–Kh”WÇßc&ß<㤘«q|Œ“dªÁ¦5” Fˆ´ˆtÑtS(Ô ëîÔ¥…RAi } –ÖTpQñŒ±&ÅGÒd45˜‡L&Ç™ùæûæ{u‘⦤.çÞ³8¿{8÷ð¿s&â¼_ s{Þ³{~³’ë dp4MclllE®®ë:MMMÛQ NÓÕÕÅ7PI’E¯×‹®ësu;²,cÛ6’$Q__Ͼ}û°m›ááaª««) ¬M@V^8ݼy'P¢¡9ŠÇë! `²$¢ë&6ÅW ½B¡XÆÔ º.œåèÑ£\¿~/>ÿ”ÇOžsòäÉ…”~@Y¸ÝnVEœ;ñ>¹ÅÓÉ´rÙ-¡5Lò³y ¥üècΜ9³0Å‹¶øLeY&—ÍñxðÁUÕØ†Å×çNàˆFÅÀ6Îþð-/ 9dQA]ŠE‚Á «W¯æðáÆAMMÍò€rA£TÐQñ¸½˜¦Mu ˆ·6€€ˆVPq»ä¹øª †n!Ë2ôöö …Èf³ËöîÝK"‘ÀÌgEÌŒŠÇãaÖeãñx$ LS‹3ëæê•›‚Ààà ›7Õp©ûµµµË,Ëâøñãø|>ÇADQ¤¦¦†r¹L]]ŽãÌ5NÑu‘‘îÝ»G(bum{öÈ:thy@"‘@×uFGGQ…óçÏsðàA¦§§éììdxxMÓ¨ªªÂï÷“Ëåðz½´´´púôiöïßO__Š¢¼€¯Ž9Âøø8©T UUéé顽½¡¡!Âá0ýýý(ŠÂää$UUU\¾|™P(D©TÂq¢Ñ(ÇŽ#™LÒÜÜL__ÀïÀ3`||œp8ŒeY¼xñ‚`0H2™$‹ÑÚÚJ$! ¢ø|>|>²,sñâEÚÚÚ˜šš"—Ë-•MàËÿA2¯ŸdàW`Øx– Ÿðž¼˜ÏY×¼@‡e6 ¯€¼°¤Ù®úº,@,Àüí@Jôç@IEND®B`‚xscreensaver-5.34/utils/images/screensaver-locking.png000644 000767 000767 00000001660 07666260010 022746 0ustar00jwzjwz000000 000000 ‰PNG  IHDRàw=øbKGDùC»eIDATxÚµ•Ïk\UÇ?÷¾7“I&1S£ÄZP ]è" ¸‰Bº’ªëˆ¸(]¸ÔE‚ÿÀºuS$Ù» hpS1 Šù¤é(™4c33ÉLæefÞýq\ÌÓD'/\¸ï¼sÏ÷|Ï9÷øŸ—êSO g`¾ŸÚ,ð° õö:ð50@ŸÊø €ÌÏÏK­V“J¥"{{{²³³#«««255•°±ÀðB+ÈÚÚš”ËeYXXHO2(‹²²²"ÓÓÓ.ÈF.r4p{nnNÊå²ÌÎÎ#ï×›€loo»ååe™˜˜øø,„³¯w«Õª,..ö< ¸<}x ™™™à{à™Ó,ô¿¼™$ KKKI=*@8V …“““À¡Óñ9áHÓ”J¥Ò r*æwE„|>ß“€ÐúO0P¯|TŽï~Å»×Ôxø· ÔOì*@éÛÏZ¿Ó»¿ùêXöc`¸ÇätÖ#ÀlýÀqåŽ*»ØN k[¤íΦëWk ®`“:irD©´Ã­ov^¹ø¬—­DÀ[ƒ àªÜÛ,Q­·¸ñöäu»«®u÷–öø¿t¶gë¬à½Cœ}yç-÷6w¹³ð û‡-Öìóå·¨—ïƒÒ JEè3žA|v "]"‚Rš?kMŠ{ ~üuQo:xÓÆ;‹3çåÌŠy²Gè­5J+t$ˆÒ¼øÜ(—džÉec>½ù¶ÝDðà=â\78Šþðë,6M±Æàáê•K<_¢Z>˜z¤ö +Ý5Gq‚"RQœAG1Z)Jû jcÖ?Z‚x!—¿Ô'€·xÓÆ¤ 6MètÚ,­la¬`cc‘ñk8›"&ÅZ‹÷Ž(›ë/ÉJk$Ê õd„Œ÷\½2Æp~ï…4©ƒ8tœE¼#ŠZds9Œ賊œCpˆ38gp&å“nEΚîƒxÄ;Tœ!74ÊQõð?`ï·ŸH;M’ýÖRÓÆ=ÜÆ‰G£ÐQ7?Ê ¨,ÍúÅ­bÏŽ=oŒê—FâWNÆ íŒæzhçú¼¡ŸFCúè´¡›6ÂùÜ*»ÿx"ÄÒkÕÖ³ÂpL³EÀIEND®B`‚xscreensaver-5.34/utils/images/screensaver-power.png000644 000767 000767 00000001715 07666260010 022455 0ustar00jwzjwz000000 000000 ‰PNG  IHDRàw=øbKGDùC»‚IDATxÚÅ–;o$E€¿ž‡÷vmlñò›„°tD BRøFY BDJ@€ñÈ€ 2‰éN'­‘‘½~ÜÝ®wwvw^=Ó‚› ¶¹Û‹(©45ê®úªª»§þGYo?»ö5`Kuñ ðÐzÔ`x« °·oü NoØÃÎwöú_Ùßst~ðîÃó|{僃î½/Îþú&vlҒɘ<—Qƒ•ökœÞ°óÇ/ û'¼òò*ãqL,3~»yš~íº¼ üðŸÀÆÁ®Nƒ›®+\²4 “Szý!½³)wψ"ÉÕ—Vp]Ëp0% #¢8Ej?ýè³ï¯ÔbýK¼Ò˜k>éjÙÆZƒKß]du}…§×,›W2Mè÷î0Œ™DƒQH’ä,¯>qåA-ªáñ·Ì?ó8sdéO|ÏG«”$`‡h3 ‘™kžZÛ$8<Øg&&C§'ø /2טG«€tt›pt„²>Y’ã¸Ðj5iµgo÷w¢D¢ ³”6Ŧpq\Ž%N‰Âˆi(¹{oÀh$9Fhe1F0 ÕNiÜÚ{Œ8N±&ÅZµ£Æh”ÒdyŽ1`ŒÂFÀp ªÙ*è-:û)/˜ KKKxŽÄ(‰5S(Âe;Ü΄ Nú,f6€6†TZ&¡D¸ka÷p£#E„aÈd2¹ÿÌÆ$y„ëù!gk€µ­uõÔZ_pX\\dyy™f³9Ó'¢8ŽƒÖš<Ï+ˆR c BÇ©ìùùy<Ïõv6€µ¶ÊÜS©¢Bežw¿³åX!nO\ºe&J©ª‚PÂ…c˜N§dY†¢Y1 [Jç² Õeaa×u/ëÆ@Œ€#àH½ú cLÕ÷r Jx½ß÷ñ<¯z/d0@41 ½ói”NõÌëöx<¦×ëÇñùùÀ¯¯ƒSs¼t;Ôƒ!PJ†aÕÆ0 Ë“¦Šìna[ Ñh¼·µµ%vvvª@Û~Ýn—N§ã_'@¸‹më[êuàW€ííí£¥ýýý–RÊM’D$Ibƒ ý~_îííG£Q»ðûø8z@dE».H»¸cí ú!ð*° ,â,ˆË®ÌGù98˜L zAþ„F»WßIEND®B`‚xscreensaver-5.34/utils/images/screensaver-snap.png000644 000767 000767 00000002370 07666260010 022260 0ustar00jwzjwz000000 000000 ‰PNG  IHDRàw=øbKGDùC»­IDATxÚµ–]hTG†Ÿ9çìOþ6b4»lˆ5ôF…!ö¢c ”FôFAñÚ‹@K‘‚P¨´hÉE[ ¥7ÒT""Š7zUD!ÊÒ$„ÄpÓ]›²»Ù¿ó3sfz‘³Ë¶ØÖ\tàcœsÞ÷ûfÞoÞÿyˆ×xgEϯúÖ:šÍfHmà‹¶_ß½@'œ¶d^ ÚÓÑÑñn*•ú0™LÆÌÏϯ-//{¥Rɬ­­™B¡`–––ÌÕ«WW›D‰Dâ[˲Þ"Âd” h[ÀGÀt&“áÂ… œ‡b||)% P(pöìY(•JضÍÄÄDÏØØØüýû÷¿ÞâV«Ƙ–­5J)r¹µZ|>Ïêê*–e1;;ËŽ;˜žžfrr’r¹L6›uŽ;ÖAvIë/Ý&À6¶°0Æ ”"´Ö­>ÐZ£µfaa\.ÇÓ§O¹{÷.GŽAk;}û’\Ðá´7³´1h£[o ôööbŒÁÚØ2ž={Æèè(ÏŸ?çÚµk ‘Ïç9|ø0‹‹‹íg˜ÕªÀÑ‹ˆTëL&Ö-[èéé!N“Ïç‘RrðàA<ÏãÉ“' ³k×.ùàÁƒð% ÕªÀhM¨C´6i R¢”Âó<€Ör5 I§ÓLMMÉd’+W®Äfff~æ€à9ÕêzX©¬›zÍ®ëâù>J*”’4 J¥RʉçyH)™››cmmjµŠçy\¿~x<¾øN"‘øtd佋'NLªÕ|Í UHÆéìLÑߟF)…ïûê2¦UU†X–…mÛôõõál(ÇqT>à¾ãûþwÀÅr¹6ûÆÎ7”R–mÛ"£”¢X,’Íf‰Åb-Ù6U%¥Ä÷}êõ:Bt]·Òö8ðõ˜ËëÆ 0 ¼ùCGÓѱÝé7öoîô£iŸ>PŠ¢Ö®Y'"r"GzßnoÎ!  i8í@Vl2û¿éæe@lò¦±Y"þG8}WN¥'?IEND®B`‚xscreensaver-5.34/utils/images/logo-180.gif000644 000767 000767 00000006400 07376667334 020250 0ustar00jwzjwz000000 000000 GIF89a´´ã’’‘£`M(`73-- ¤nÛÛÚížyyw°°®þþüO5ýÿÿÿ!ù ,´´þðÉI«½8ëÍ»ÿ`(Ždfª®lëNúÎtm›±|ï|O£9ŸpH<cŤr 0ä˨tgp§Ø, °Bµà0ˆàxêÄètà<Õp8·ýŽÛǃP¿û¥lz^„Lz]W…‹Bdˆ}Œ‘6yz{’˜-•ƒ™ž-‡•nŠŸ¥$Ž•¦¬ ›•M_­³¯¤F´‹¶‚ ¸µGgºws••¾Âµ¿Ãq¡Æ{VHÍÎp¨Ñ×M—Øq”Ñ{²NáÞãbÚÆî|âïjåæ É¸às§LÇ" mý¨jÆ©‹A¾O“_»@é™D§€ç¼âìó'7¯QÄØú‘þW€}>)àl%Hé àƒ¶ñç ÿAH]} ®å‹ÛÍÖ‚45aáˆÕ‡C’˜Û29€ƒ´)ðJbÅСŠúIÕs(⸜3®¥ÐÁÍxÎ>æh"1¤˜¤l¸§ |JPÛ‡ Þ×ä“ìéèZ\ΦOÇø^m Y¦0†)ž—/Tèfu׉rÕON2 ã” ú2ßœÓÁ邜#.p#‚FîÑ™vµ%Èç9Œ* š€i¡YE‡òù–Ÿ¶Õ)OHJª¥[XŠ ´êj®.ë« ÀX ´**">ýT@¬­îöè‚òÅ:k°Æ&ûª²Àþ6kèq¨®@¨m–cÞç¶Ã¦Ôk€ýºê’ªJÛ·€5$W¢mT”™Cì"B¸†åY¹#L;[µÖŽ”ƒšaVW¼ÄÒ[Ø¡Pâ럹÷&’fÝ.:ð°(€®Áwýé¡ÂFl‰æc‡ ”î¿kżšŒ±]rì ú=†·ÙVtñ(/¸r`DrçòúÆÆ/a¡¬Kñ}*ç³4Éì|WÏ÷×1öØ!þ6‘óSIǰ4|NûuÂR¿ì1}…9"r ‡µíÉK§ÔtØsÝð„ùÂlõ_¡,ÆvÎkùóÒf}qb_´ñØì©~V€„S?øŒEcrÞÓ®¤ºtNƒs¡ gð¤›ñå¥9ÛÁRé’b…6½‰0”ïµ4ˆiª  PÈ€˜p"Ožz¨3¹ºq0wœa]â1B6ÅÆ||êB2¢“à Z*öJþ‹ÃJµ„“‡Í~ êPŠ1(@”t8•ho<[üKSõE¾Mä*cšõ²¥?ðtª~]0“ ¥G±QyS«ÚûÌ4щ=±‚UAd'‰CN!7è3$ràƒ‹ì‡™äCHΤ9ØãùF7H-òìÜË[ïòÁ¨ŠäFð*(9LRg“v™£´”£ܧz¢)Û Ë¿éðŠ1håq€‰8X²jÔòË”®RªBÒ’MËåi~ùÊN"Òlج Gv¾ø¼¨,k›åf®¹Ã\­~ȱL´€ÅËs€°îbvsEï¼zEàmG§×ÅèÇjXª"v¦Ï]§zãæÆw2€ ù=nûhãÝý¯h¥ËN"‹â2ÁVT(Q{ט†´50a O$/íoY!¬NZBp¸:0zML‡¤˜Ãö°béòWA—C¦ñÒØ»aCvXµqýîGØ y&¾\Ñ{;øI£Ž×ŠPµ‚Ÿü[ÂJYÅ™ý¯Uw,a6sär—ÛzY0Ã÷Dòemñ’€ÓxVú2ŽýËb‰ÞÅÎ{H†°ÔŒþ²Œ´÷¶Sö$0âì6æ`(%ô£ˆÜæ=¯XÇþó3w)i>ÁL6 ŽrŽ‘Lf»8ZirõläQï¶Ôz…àASý¨*X¹‰Öl• ±ÁB6Õ¨,«9éjçÂ:Öõ«­ù—Œa¼ýäµCœ¼lÀ‰•Á¹óf“ ˜4W;¿)u]-æ>ó.0kü6†ÃmQ\»™Ê‹æö_tCmu·ÓËî}·¢5ÊÀ”qÆö¾Ì ÝMî73IÞ~¹hÀ™ªîÆ&Ôí.vx~Ù„vá±½džó]pxóÛÊs™ ý0^IwõuÜ­æ3¦[ìoPão±Â¡q˜mscµåøÂ+,Íþ‡×|å~ž·‡êðÀŽ˜à)¿4©3p]ÝßÌ}®o]ÇûØt±ÍÅIþÛ¦Mêßw@@.—Û,•ë“–ä“^n Ÿ0‡†-Ú7óh†Ýê—6s»ûôNçÀá,¿»¶wMq»$w /—4=¿Ž Ÿ/=ðÝÆM*ç~â“SŽ5Óÿ‚fg-àìsÏÈ<¬qŸÐŽoá+£s!§5D…óêY?÷×Ã>õ²Ç:eFŽñµ­,ö×ýî[Ѭý÷Áßüjxÿmßï øÝ›=h˜Okç?ùÑþg¨/ië_ÿÈš‡üʈ_¹ìE\åúÎYó‹[éáW¿ÓÈï)÷þ¿¿íéûáØŸ%ûSZâÑö\:‚9ü— ¶w8€ª—EÀ“= s  þ—-#vÐ9af~8>ÐÐ6(Vx7v F'"È6Ø,HªU*q9ö§F·apÙ·@÷£ƒ;¨ƒæƒ<øƒ$„=8„DwÒ2è@Ø„Fè„E…DcYÆf*Çq€rñK(Œ7'6(KÏ……½µ2‡‡…aQUˆ…Zø_&ixVdtx€‡‰5‡òg†zh…·†s¢S¶c[pèq&8†€q«AˆO‚‡ˆ\¢ˆ¬q†…h€nrzt3oH"Ž8fÑdøy)h艆xŸ–$¢˜‚Ljò‰ÛVŠ‚“ÄŠ[¨˜°Hx²¨’h½¸»xunb‹~a‡³xŠ—˜Š#Ò€Æ8=÷ŠÊ˜ÌøŠ pØ˜Ú¸ÜØÞøÝ¹(ŒÓ¸Õ؇è˜$Øwˆ˜Žîˆ#ëxˆÁøŽôHŽ–HøVúhŠ÷hŽ1€ûRH¢‘F¹Bz™ ¹ Ùù¹˜×þøŒ6“q‘‰16°‘É<ð‘"hQ’&y’( !þã XScreenSaver Logo, designed by Angela Goodman Copyright (c) 2001 by Jamie Zawinski Unauthorized use or reproduction prohibited. http://www.jwz.org/xscreensaver/ ;xscreensaver-5.34/utils/images/logo-50.gif000644 000767 000767 00000001531 07376667334 020164 0ustar00jwzjwz000000 000000 GIF89a22㘗˜£^M4¦Sbú¦0ÌË˱°®pppR4üüú¬lD$"ÿÿÿ!ù ,22þðÉI«½8ë-à`˜ybi>Âw®š²°UElO†¡Nûæ‡É'Ê ’BȪfhf|U¦gËíbOÎÚ-wG†zÍV7rã- ÚxvbÉKç× @v X y{~‰… 9r‰m‹j    • •¨¡®®~›]J• T9 fei²{\)¸•¼¹AÀ\rÃ\)½ËÙPÏ[Ñ|ÂÇØ¹aÙ–ßáŒä[– çP õ v ŸÐ Òúä"/йJ5;Ôæ_Àq ª1«Cé HbãP܃bþ[ )xcÑA¡JGî¬éøn 8 *ÖÃxîGp[K6&=‹ NÙ¨†%§4yj;dÑ’:t7Ûå<êRi• ëY, ’ÑYð¬ дiG_‰…JCUÙz˜¼â|ø)Ás&ßž[°r®G!>-ë ¯Tº€™éÕ[¸¨_в.ª2í4»àdNÎU‘ÜÃÃCró*¢–î­Fòd(QY# `@*¶zk‡ ó˜jÒ2¸Í~sGu5ðÅìd‡® l°d숃U3ÀõëØy_sfKöì|§NÏ´†·™¸™f“§ÎÎsúå™açèúDó“{pçþŸ~ü!¸Ï€ü0à{Œ(À‚ 6èàƒF¸ }¤ß…ÉIÁD!þã XScreenSaver Logo, designed by Angela Goodman Copyright (c) 2001 by Jamie Zawinski Unauthorized use or reproduction prohibited. http://www.jwz.org/xscreensaver/ ;xscreensaver-5.34/utils/images/logo-big.gif000644 000767 000767 00000041173 07376667335 020510 0ustar00jwzjwz000000 000000 GIF89a½1Âÿÿªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!ù ,½1þHºÜþ0ÊI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~Ïïûÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀNÃÁÅÆ’ÃÉÇÌÍ…ÊÐÎÒÓ|ÐÊÔØÙsÖ×ÚÞßhÜÉàäåaâÄæêëVèËìðñEé îïòøù9ÝõèúÿgðS`/ Áƒ)¢-(ˆ°¡ÃÖúù{H±¢…ˆZÜÈþq!F{÷:Ьˆ‘È‘(r˨1¥K€+A†|IS^²×dÖÜON™ãx UwèÀ¡H³ù44©Sj7}JUšO©@«j=«Î­`}uõÚ2¬Ù[WÉ–=ËVÖX¦3ÛÊm5V­»¹xéÖeš·¯ª½|ý &•6€Ý‰ƒ{*l8°âÇ›ê6ž ¹ò%Æ“³ZÞTšå¢¦¢êq«ja Æz)¡…Zg­¶ŽŠk©º’Äk¯tRþ ì¤8°ê¬ÅŠ„jªË2[ƒ³OjmJÓÒJlЦåº-·Ç"›¬ªÕÂù‚¶âŽ+k¹æî¨ì· Á6i»îŽ4í£ézè¬ùê o¼S *½%,uÀw´/µéª[oI 7ÌÑôöƒÂ!Ul±ECŒ0E5åñÇÆBI°¹¿ - ?;2Êÿ„œñÌp|ÏÉ4«4ðÊS¢«1‰QuÃcÏ ÿ 4uÊ¢û2 W™Ì3Ò…̯ËÚžuPGSM‘ÕcíjÂrݵ×>/ÍrÓb-BZfO¶AJ«öÐdk9N—s§m·¯-·ÞÛ]åtvßU«ü·¡lãM¸ÞÄô‰xâ‹þn°ÐÕ¾HèÞ|O~PÝvg,øà—µžS^9ã—;ý´€žº±«³Žyæ+îœÜ³ãzèã‚d§KÜ{>¿«øè–N¼ìÇ;öÝÂCtlñÑKŸ<ÐËWïüõÐgÿùö+wÿúEà‡/~@Ó/ßéªoüúë€-ºã°“æŽ÷ô#O~¼î;|³¿¬õϺ«ÓZǼæý7èàßmò?d‰î}ùƒW8ArX킌ÀzÄÑÀêãƒÃàFB š(ì ¸ÂÊëf4|¡9l@lå,;ÜpuC®n†C¬¡åH:"z0†Éb þ”È:&¢Îþ‰O4ââ¬ØDô)ÍB !1§µ5N…(…è¶1jc)c‘Ôx?9ºÑûª£p=&ñŽJb†¸xÅ4ö1x{ä/ºÕÃ?R‹ƒ4_9 F² ^„¤¼n·,J‚£ŒKÄ&+À DNғͰäí)3‚Ï…¨L¥ 5$JV>É•¦td,ñˆ*Iž’”ÛóewYŒ^6r˜À f.‘ILÈï™ÐŒ¦4§IÍâ)P˜Õ„÷–™Ínzó›à g8½!ÎršóœèekYÎmJ1b錧<çIO].²žøÌ§>gÅMpºs•û ¨@JMfô Ífíü(Î¥a3¡þ(B‹)ÑŠZÔ íç7ªÑ‹zô£æ¼'HG*Ñ#>Ô›Êë(IWÊÒgö¢¥0hFßyΔÒ4¦8ÍéáÜ¢ÓžÆÓ¤*U(Gß OŸ•¤¹8ªRÃ9S€¶Ó¦œ\ªTaŠ‹©Z•š@½éS‡Õ«zÕ£hùªX™ÒTv6ôo'«ZZ‹µº£•»_Q¥¹Å ¾õ®é¤^÷ªI\ju«P5+_{ÎYö®YuêYÑj×Ã:Vš†}ìXË*XÖõ¯’ÍlAc¡Ù¯&¶²kc;KZ|­¢xH­jWËÚÖºöµ°­lgKÛÚÚö¶¸­­:£Ô½jåÖµ˜Réo‡KÜâ÷¸ÈþM®r±‹Ó)÷¹Ð®t»Û*ÖÇ­nÐ@;Œéz÷»à ¯xS Îe¼èM¯ze«Ý‚]ÙefÞ›ŒõÚ÷¾ø oy_Á”üú÷¿Ë5&QÑ_ùRÀN°‚üZÉ¢¿ ް„Y«ÍφÁÅ0}»;á{½6„?Lbÿ¶w»Üåp† |`q”øÅ0FnçP1âÛ¼'¦å†Pà¾úU ÜŠø¼DNrrsÜŸ®º˜º,žï…¹¡ä*yÆŠ•·üÛ [xÊØ…r”ïd.›yÂX>²LÎÌföZ³ð³˜â6ÛyÁi.’ïÌg&7yÇ<–þóœÉüd>ú¾y&Œ–Ýf?/pÀ…&®£ æ83úÒãMô(öŒi+{™²•¶´¤ÇLçP×·Ó¨ž®¦EÁéT_yÒW3µŠGMj)³QԮε˜M›ŠVë:ư¦^º <è?ßZ¿N6­yMãE+ÆÁ–ë°]lBSùÙØÖ­‘õììl{8ر>ö©©]lBÚÛè.2ï6Ýít3ÜÂvG«]jqÏÚÝé^u(|ïÿ~úš½•7¹«}Ld÷ÛÝú¿Žhx÷ַĦ·­Èð|o[Ñk®¸¿QøJ¯¸ÖƦ¸Æ³ðO,|ä™¶ß+!>p‚ÇñÚ(WvÉÓäánàþ¹?.ñ—Ùæ®žy'Ntéþ{Î÷8Ï{>q–=ÕBçÑŸàö­üç]ž^½ENuTG=25ï:tá½'Ã|éL·v˜ÅŽé¯kbêl_6Ó“ŽõÜjÒöÞyÜ íöLÀ}ï¸%ûÖe­÷á ÅNüûމ¿+^Û8|ÞeùMþñ}¾8»3ŽùûX´¯{à+øÄwžËŒ¿LØOùσž“¦7<éC{Ö+9õ–p¼í)|wa×~ô³Ç;×wïiͳzõÄopï¥ýûÛöñ¢O¾q_ Ýÿð’×9å]ô3FZú¯^÷ñ9~Øb¿é“ß~Ú-Ÿþò‡ŸÙY&¿ûþy|ßGß¶çwoûç?}ãïùî÷|97|´¶~‘Ä@÷Çhæ €à—ö—€´%€Ð÷} XbÔG Ö's·}ÜT°'XúG€øaØèmkG…g~È|"8[Xgw‚(È€&·‚$‡kpƒÊG‚×|øWƒ>g8¸€â÷ò×o@ˆ„«èg‚²÷åÖ2J—„Jj#W2zwR@X…x.û§…–‚ÈÀƒh/³–….x†egv>h†tÈ~D¨†&¦ƒ4ׄGãöƒÑg„t…vG‚Ø:rȇ Ɔ‘°Ñ5R»MyH†æt‰zXZ…þ_ ’Øc”"Fq‰‡Xš8qœøQêõ‰£á†KÖR†U¦xu5•ŠG¸Šb~8t°(Š$5‹Ó¤‰§¸X¸kºRâ劎ŠY'‹ÂM©XŒLuŒ[—ŒÊˆc½(u¿X…0¥!ÃHŒ¶˜‰Ö¨ŠØÈŠßÅŒàŒESàHWÓHT:WMå(|suŽå]êÈì8‚îøŽÒ(Žòx–X戥Ûv€‹8U0ð(!x‹ùrÙ‰F·o×Î÷i‡ÕX‘y‘•‘KØ€ Œ,õ‘òˆNy&‰‘c§‘~Ç‘­ùLÇH–5“%Y“5‰8þÙx:Iƒ9uC “IŽB9”D‰P7™’;¸’Ëö=iM?9ލXR9•U•\ÈmXéßÈ”>i@Z36bYQϵ‹ÐA¨•Ñ(?娖(õ–È—EYue‰q^H–<¹•§³—^9’~–€¹Osy”ªw–‰è‘.É•l¹˜AÙ˜Xø˜T)˜8ã‹” |i©–z©˜1 •~)2žyP‘i•X˜ Ù’¦yš™™š_•Øšc郹y²é›‡™—˜Ù•¸iŒœÙ4¼Ù›šÜ8šYš—™˜`pª¹š¹œ5›¶´‘ÐÙŽÃIœp¡›"é–«y5Ú¹Â9JfœÍŒþ¼ŽÕ i¹ù–Ù™žøÄ¿Ôžö`˜ðY›ÔI’ô‰œØyŸø9OúiOüÙˆž÷Ÿ:žä hôxžÂw ù¹žÝ™“ß¹“£¸ˆ/9Ÿpfžê˜*N ÊL„ÙŸ¯¹RQ´–özZ ÊY¢òt¢ÁÒkI ƒ,Ÿ¡)6¡J“4ŠN6ÚE]¨¢EQ-ê¢>Jx@¤è9¤DŠ¡û™¢ š•UE* åÙMPš‹Rj¢Tª V:ƒêQZj›/:ZM ¥8¦búžŠ”êê¡jº¦]ú¤nJ¢p*MIê@8Z§Jy§JVçiŒù¥~ú§Ð¨óœH:¦%µ¤yª›!*þT_Z‡óè¨ò©Í•£w‰¦iz©MÚ©mʨ—ä©Ýªü%ªê–¥¥ZœÉ d1¤oʪÔ䪮`—­å ‡ZŠ}š©´¸©Bª«€J©7Úl„êf²j©´*£¶º™Æš«Èú¨Êj¤ j¦vzQK´¥‰ê}Ôº©æv­¾ªZt©ç… õ­L:¢ǧÕj æê\ÙZHñçž,©¤îjª2ú£©J®Z¯Ü[éšëŠ®Ï ­:¬Óê¥ÆZ‚û©÷*¨Ìª¯»fQýê¯ÿê¤à±;±wˆ–ìY¦ˆH²ü:«Ñ ¯â ±[¡"[c[²’z¥( Q2$Ÿóú°šú²³{³dþZ³ë¬»± +°«Ú—>Ë©@ «ì ›¢´Xг9Û£;»›.Û´pù´“:³s:™T+´eAÐ@FxYZ»µ>[®^Ë«zѬë­W['+«ªKÛ³Mk­^;²Ïø›ã7¶›²îжŠ8SŒÈ´\ë¶@ ·¬°äu´u{9w‹·k[¬\¥}Û‚`[¥D{²ƒkµ…k¸Vˆ©y÷®{²븧µ.(º£[¹J›¸z›ºy»¹/H¶Ëš¯_»¯eF3 ¡™Ë/Š›¹ªk®¬û®µ„«¥§ WÆK¯Û¶Ç‹¬É;¨‚[™°û­Ï‹Ãë´òº¸-Û·×{±½Û¹@Õ›¶þÝ7/ák»—û¶©{¾ ŠPê{»Âú½gKºÞû½œê¿pZ¾¼k³¡û»ù¿@À૳ÃËPOKÀGjÀÚ‹¿ù+¡âÀÀ <½ðë±È;¿¡*·:šP~µaA¨Áu(¸ì{…úë·ýS¼­ [Á|Áuö«‡Ko|넘Ã,̳œ[e,Ã&[†÷›¾%|Ãô‡ÂlÄ [º,«À<,d$EÄŸëĺ›Oå#\8 Ÿú+c;†Ǹl6RV\¿Lš5l××Å^Å:·o,­Üh»¯*£ŠÄIÜÆ]ÌĹ1r<Çk*ÅSLÅ ‰Ç½º¼O\¶[L¬' È^!Èw þÈŒ›»IvÇrê¹h\´ƒÌÇ},k‘,ÉgKµ+ìr-ÄBl“¾‹¢W¬ÊG¼O\eÂê&Éx´b<Æd\Ær©Èq›½j,Sÿ´cµlË)l¿§üËÉDÆÊèëÊ<ÃÁ,˳¬ÄÌkÌÇ܈¹¬Ëã‹Åˆ|’¾ü¸Œ¹kÊiøÄØœÍX—ÌÊ\ÇfÖË›<´ÑìÍ4LÍÃlÍQ›Î“Œ±ì¼~lÙx×ëM¿ƒÑ{LÖ±m³Ñ Ú”ÛŸâÝÎNúÍÕÝÔ×ÝÓê}Àô„ÔÌÍÚ¾}Õòàjû£NÛç½à•ØÖM‘í}Î×üÝ3mú\ß¾Ôøíà`mÚ„]×þ ‚«-áœíÚ.fáºá/œà_-×WI×—-O$MÞ#L⌨،â­âŽá[ÀüÛ1j"¾Ù$Ná ¡×Ýœâß¶âõÌÉûÝ0>OþÚ<\àtˆå&žÎJÎÛ]Þä®ß.åÉ=å2®ãÍmäjþ¿l¾åKþæ<×”ýÔ\.è î×3^ÌF^âÜç~îÖ÷ þç þäØ-ÚAžÚ,ᕼèÏ ½Iþèþˆ^>Í`>çb~éì]æ»ýçV®ç6îé¶\®9-é=>èémß…ºÝªþ” Žæy¸çÜ å%íæ£mÞqÂ@Þ­d>Þ‰®è‹¾ÃÖpâ$zÒ£®Ý¥þã§Í⩞éD^䜮¹°NÊ©LìÆÔµŽÞanéÊ.ä ½§nã=ìÑîè†Lí´nèN謎ï·Û{ï6ªÒnȡއ÷žßÈží_¾í¨¬é›þíÐîëC^åïVícÞâØþâ¨^ŸÞíyÎéò~t–<îo}ðÚnëéÞà èÜÞìnüíMìôÙ9hò+ò¦®î¹þ¾ìßÝK óàÞèŸ^ï5èŸÇɾóìïf>ÅÿëÁËçÆñßp6Oê› õ×ÙîOãW.½"ÏÄbOî¢~õÖžõS»õißõÌîó­òã>ßiñE¯áÇŽôlñnoàn´@ô2?ô4_ì®iÜØ»÷¿¨ÜÌë‡ ðLOð ýÅ´«óéeîü.çOç¯ûSô­¨ôüôiî§3¯Ðgoô'î9¬ßúþÙú°û²?û´/ûg¸ïîþø]‹û¾ÿûOñöûÄ_üÆüÈŸüÉ_Ú›ü¯¯üÐý¸û¾¯û€ô¿ï±¥¿ü†/ýÞÿýÆÏüZÏýþ þÐõ«Žû»øÕÿ¼Áoúgþò?ÿâ¿öä?¿óüèŸþïîûìßþ Ü!ÊI«½8ë›ZO3Œdižhª®cè¾p,¿l]Î ¡ï|ïÿÀ pH,Èäǰ9[Ì(“C­z>Ÿ˜­Qíz¿`ÍU! ›Ï^™öl»SÒ¸œýFE•ø¼~Ïïë£u+sƒh`jXkt*†ŽaˆŠ/•ŽW0šm„R›&w~£¤¥¦§:€ ¡žƒ–TcXZ5\¯¶· ²1¸½c™«Â'­Å³Â¢¨ÊËÌÍªÃÆr¾’».[µÕÜ‘±eÝáˆÁÑÑÓèçLÎíîïJÐÃéSþâ×YåŒÛöýß¼üUôÈÜ*zéÖá€Ç°¡ÃTL "œ!pœ®D ÂáW±ã5pm©ÑgÔÄi g<\Ér™ñÞŽF5^’8ÙZ•òI¨eÿ!É ’W†¨Ò“hî¥SöDÓ’Ú}i×}ßÉ9A‹À‰ #™ó9wfš€&±¦6:fõf7di'…VÖ¹¨Eæ©'–|öÉT“fJÄ ËíU‰eJó㣿ìä¨þaNêc¥Ù]ú§¦°Á阅zœJªˆ·¨†ªîÉjL¾ë±;ÌZÞW‘z¤¨ÛíÚEŠ…H‹§¥ÁB;,±~…ì·¥ZlZÍÞŠ(¥ÑJ K¯§¢j¤¤“nÛ*aÆ‚ «²¦yZn‚¸b˜®º,šêå£âf+ï‚ÝŠe/²øæªoc Ù À¥Bå«»çŠy0·®z»p¬ ûû0Äæ–©(Å`J2$ÁÀ¼1€||lÈ«’Ëš³ð¢‹rÅU®ükËÁn Ì9È|osã2{sÉëºóÀ´+'Ъ M4F]pÇJ/ÍoÆ?Á]ž¬%Õñ¾œ´_YgJ³°]£þqÎPü+¶dKýåÖzZ½¶fmúv¢µÊÍ4Ýaß7EÖ¢­±Ú ³xšƒ£k³q8c»§â¼úÌrÆú9à“£YyÝ#{Í¥‚‹Ìyçïê8’¢s-yéNž®íå˜þ@œ¯ÿ£¢º|Ó¹í¤ãn£îmöÎî•fŸKôS÷Û÷ñôz¬|Ì_–_æšë,ýøÌ:ö3bº}‡Ýîüêe·î#ùôOªrµg¯ðú¶ï¾pø°žøê'½âï`Wÿ¸‡´Ñ ÅAd‹ÐïLDÀ ðEùK_½ÿ¥Ž;“‰ÑþgnÈYHkž“K2zã:WÔNgŠš’ç%éII.ò3jéŒâ>ùH·Ø|3G•({Læ`¬g µÛBÚM‰Äœû“èQŠyË‹²ŽcÚÚè5åX’‡Ji–"] IKºÒßhN*%K=úN=&/¦2¥(H ÊQõ §9K?½ùQˆ†¨ ™©1ÅhT’è3©ïk¨?·uE¨JG¨NµèE«Z¤bAÍdjO«R¯F¬/ÍÐçȺ³žu-;M sºêÖ‰j± æ™ëI §Ñ»°£z _ûÊ©ÒÔ¤pºªaušVžþželcáÊ&%‘Šú°ëdû±TËru”™Õþ,8K¨}öZníhƒXÔÆh±ªm‡c[½Ÿ”C²³uSmz[Û-·îØ-ok¿¡í2¸‡®Où„[ä~ˆµríkß[…B¯•M,hªk]e(wª‚mîs¿»¯¼7Cä-ï)΋^ªª·nìUV[ÚÔ¸FT¾£ ïDhØ\çÊ6¿¸(­x/_“BÀÞn¤æ\“VÁïõOƒ %ìÒŠOþ­w-L[é–ó´V ‡ÍëáeiW³80‰+áËfÃ+VS‹óâ)Nx‚2žñ#jl\ YÅ9¾ÑŽÖcg"ÈBž“‰ëÉ*'®/UŸ<â(§Æ½Ó%“þ•¯,¨%‹¬RÌdœ—á3劢³1#óƒÍ\34ûkFkxá ß#ËyÎu³|±<—Ì'Ö˜ÿ\„,/··j6´h0f%-šÑCp´–ÇZhIsƒÈ|6rŠ1­:ÃUiöœ§¿Œh*WêÒ¤–•© »­TëmÕ æ®.ÝyÙJÇ9ÖyÐô£WÚi\ß¶óâõ›}}\`ÇcÖ–«õ‹mìW ;™[U´Ÿeh£î`¶®Vµ?­ëdg»ÊÛæv™=Ôa.ã¶O›ÃŠîQ«{Ý Î.¸ÃÝåx£!߉®w¨‘|o#•„†²¿;¿*.›­·+ø¦¼½»½{x ïŵþQzîW§[âg7½åÕKŒgüØåƶZ{ ñŸ‚<ÏdªO.ïû†òáwùËs„O›æ5ou»©ûñËZäþZ¿Ç;÷æÚ¶·ÑaNq¥‹›é*u:\ÚYaN=\w±Ð°žÓ­ìú—ýíúÞs™“}Ÿf?;ךs$~çU·zJßwßîwà{-úÝ“•w¥ã—ï댻¹çÎòºÇsð„GºÚÕVaÄWPñ*7mÔyÁ^t•·<ý0Ïñ•ãÜÕvï<Ø)ýaÈ…^ôã#ýÓ•½yfcMõ‘;ßùzØ¿¡r×¼ÀmOpÕ·!¬ô}ÓÑéG´¤½µOüñéþÑIå øÁ·ñ^`]ðé'¤úÖ¿<ó³äÀK÷ÞGǪÂ?Cì/ÞùtGýã;Ÿ~”¬ŸýõCæìÑÀFœþŸGH ‡%A™§}iÁ}÷VÆà0H>^ô~ø ¨n Hø€Á˜bæÇy¸·zóvj§·wÈ9x€¨X‚yØ Às‚%ô<ÍW~,x~Æ€ýwx2(6)Xzð×xò—Z9(yзƒ&؃CDƒäx7‚!ø‚žÐ)J¸„LØN8^-(}:(„„U…®? G{Ã×r©W„ºÇdH¨L`H`!túV†ŽG„h„qX‚É׆éÕ(5˜… ¶…wþ'…`ÑZzø9Á:dèq8X‡ixfk8@…xN‡hs¦W{f8.Ø…x~‘˜JbH‰Œ·‰#w†ŒÈzbg‰1؉NÄ#pØz¨8„¿†~šøŠ¤ŠŠ­xŠbˆ_'ˆ|Q¶¸ŠbhŠ“G‹‚ö™h‡®è…ùŒ|ô†Äx„r‹Í††ÑèˆÌ˜ÎB_3‚ºhi¼8u¾8”´Ü¸:(Š…²¨ŒßHteŽªc€M¸‚Z¸ˆÉ˜Ž$hŒ©(Ju…õhˆ\莻—ýèhEXhƒ÷ÈŽÖèц ©‡O×8Š»H8‹Ó¨v)\ã÷w9YŠùmþX‘!yh'„'™¹é_-)#A(ŠI×V(™‹´¶’–“æwB©‘àÈ‘½è‘ëXNFi²§‚üG‘ňŒ©Ci•T•ä–r<)|Oy‰tH“)Yq\Ù•^©q`ÙUé“W©sYY“[ — ¹–(×–0)IDy‡¤h–I©’i©–x‰"z¹—Pw“C‡‰sy–V·®R˜†IqÇ8–s‹˜hi—8)™CF™•)“Ä‚"¨™¹rž)eZI|8š¤9Žs€š©iºs™}Æ”âè”–™³y é» œÙ˜¦yš²Ù›²š~xcáÈvº)šAˆœÉyþ–¬ù„®…Ϲ‘Œ'J¤0ê˜ÂºGx¬†G«è«Ê:Jø¬8 ŸeY¤š£Òª©'˜­ÏG­ ˜FÊžÜê É:®:¢ŒY¬Åi®›æ{ìz®X:¦ù¹¥ïaÖW¯-ºŸòª§eНö*zþš¯uö¢Z£ä°ä °«˜Jù­ÖÚ‡¡¹°ÀŠx˰?I°dJ¯; |·±Á±Õª®áŠ® ­þXW²Ði›·‡ýв° t.«á™™#¯1k² w³KI¬k¬:[ 9û³·É³k°Bû²Õv´C;³ ±‹©´R€kP»´ Úžàz­Þ:µxfhZKµ*[|M¦YÛµð6cd;¤L{µNÛ°giÖ¶h[µ++žF ·û¶vÛšr ¶j+¶bš·[û]€ë¤Ì ¥Î:¸K·Lˆ«·_KšÏp¸‹[X¹Œk¥|û°~+®”krY·¹à¹·Ž{ª [vžû¹ ûš[º Uº zº,[Ÿ¬{·ž»­Û¸¨Ë¤´+»×—»µk¹¡K™¼«»ù¼½+œéÚ³šy°Ä붸¼Åkþ¼!‹¼5K²ÎKm%W½¦ëºtëØ+¼×½&Y¸lú›à뽜ætå‹7бój°u™¾õp¾t¿Rº¾YZ´ ª¼ô˼ ¥2ûK}•ȾüZ¥=ú¿ñ]/À<ˆ!*À—ʤºÀQËf3À‡¬¾ |¿í›¿yÁ +oLÜ€1y¼ø›¼ú:¸ªš!|ˆ*¬~‰¸¯LÀüÂò2‰6eÿ˜¤^'½X»·:<8,ÂAÌÀ<¼vì¾[Ä{1Ä8ÌÄSèp@Ù·(šÁP<NLÄWü ÓÃ'<½ÙÆbܤ̑ÅÅ5ÆhœÆVlÂŒÂjüÆj|§.,³p\Çv¼Äþ+²?|Ç| ÇZ`ÏÛÇ‚œÆÉ°½n<Ȉ\Â]›ÈŒìÇ0EÅTÙÈ’\5‹;É–4Œ¹U|Éœ¬È‹ÜÉ Ì—H<ÃJʦL½d{ʪ̢lœÄ¼Ê§ì¹°<Ëi«É‘L˸<¶©œË¼Œ­ÑûÅ{Ü˸̺Â\Ì6ûËm ÆÆlʱ»Ìά¿Vkˈù̼œ»Ô\Ì…L³Á|̻͜ÜÜËÙ¶›üÍ ¼ä<Ì™¬Çk{ÎåL¼ì Ëá ÉÓüÎì¼ô¬Êñ,ÍyÏÌ\½üÊù¬Î™ûÏ|ܽÝÍéìÃë|Ђ\¾ =É­ÐýЄœ¾ÍÈ Ì }ÑoL¿ÈÌþÛüÑ”ìÑ$]Ð ­Ñ}Ò]¼¿,mÇ!íʇüÒökÑ4Ç)-Ò}ÓÆsÁ<Æ1MʯüÓ– ¾Dí2^¬Ó+}Ô¬lÀL6I-ÓÊüÔd¼¼TÝӣܫ|ÕªÂ\½u9-Õ#ýÕÐëÕdí,Ô3}Ö5üÂlÀ,Ö;ýÖOËÄt]Ói­Õ4üÖ[\Ê\Ôzí×|ÝׂýÔ€mª¿ÉÖ„]›W}Ø­ºÕd½Ø˜q×eÍ=Δ=°’ Ù?íØµÊÙL½ÙQœÙ¾œÇÙ™-Ú$LÚšû» }Óª]¿¬ÝÖ—{Ù·LÚ±}³MÛ®½×$Û ¸ÛžÝ¬¯MÑÀ½ŠÖj=þÕ4}Üq{ÖÃm¸ÅMÐÎíµ_Ýã;Ý÷\Ý; ÝÊØCÍÏÜMÇý݈­Ýï<ÞÝ}Ýæýؾ½Ýê}ÆÞÕË=Ö'ßëÝØíýÙïMÏø-ßìMßà½Öâýß„›Ü~ÞýíßÈDÝ‚šØÝàÈMÕž¨>á. ƒàî]Ø ½áC‘ÚûMÜ ¾Û(žâPÕ â*þâ0ÖÎß.ã6~ãxÌr½Ô8Þã>n¡q]ßsýãD^ä9nÚ*ÚF¾äL²H®ÔJÞäR>åÇüä;åTžåT~៚áZþå/Îå˜ÆØ`^æa^âÒ}âf¾æÎâÞlçóíæ4þçr~çŽæÙ­æxÞç°­çîå~>è>ã&Î焞è-æŒÆÅŠþègè]Næ^éÆÍèæè–¾ét½ÞœêËìéŸ.è¢~êàLê·k ¨Þê—>Ž[š">ë´ëK븞»¶žë¼Îº¶.ë½ìmûë·.ìÆ>ìÄ^ìǾìJ›ì¹ÇìÐ~³ÎþìÑ^í;íÔníÚŽ¯ØÎÛþíÜÞíÞîäž­âŽwåžî·zîT§îîÞ¨ìžiï>ïiïfAïø~0öÎùÞï̱ïð?ð_ððŸð ¿ð ßðÿðñ?ñ_ññŸñ¿ñßñþÿñ ò"?ò$_ò&ò(Ÿò*¿ò,ßò.ÿò0ó2?óÎ4/3kÐ;?L9ß?_:=oë° ]d·I¿P GÏ8K/OÐ0 g`½ [?M¯`õfðàWÿ]OõUöaŽàQÏógoô‹suOEb÷UàõmÏõ}ïö†Ð öC¿eøôÙ{AOø+ï÷PøE÷eÌ0÷Íp÷¤ø+ló“_>»ø>@JŸ ÛPúœï9™ùEÏökoø˜Ï÷ÿ ´¢ùï$÷à%®)‘©À– ·¿ùa@ü³þ´Ÿü´ü@ûƒøßøÎq PSý;°?ü;ðûŒú_&ÓϨHú„Ðúfžïôè©÷ž¿ý¦ü²?ÿË/ã?1¶ý¾¯üÔ_û@ºÜî!‚9c|¸YÊÍ bIÞøef§®¬z†š9®òßx®mï3Ö –j;£]¬FBÊ”˜Ú±Â„ò‚Ó¬kÁj¿¥_7ÐâÞz¾Ð vŠ­Ñ&%¹–sÌ96õÍ(¶µt8RSLjp‡ˆ"vsx!hi‚zŒ|g…dFOˆ~`Uu“Š˜ Yce¢q¤‘¥{†‰}¯{Jµ”²:’¶«°¦ªK‹À𳯮©ºþ–ñËÌ §Îœ„Å·¼€5»Ï¿w¢¸ÜnÊ ß½yÛÁãדѳßìŽç•Dñâé¬àiõcÛÔÕÇÿ¨„ £uÏ4|Ýä=´Î”iК+ˆ0! ~ø‘ £ÏW²ƒ9$7`&…é¥ )°£=ŒÄJøÐÞ[ÞÇ<\q¾F­—™ZƸ¶Y{ÒEG]>û7 6L˜UÞL‘ý›^ñqa^!L¤q¨v—´sa‰›€o𘖈úˆÑN”Øb'†g¢‹2”`Fßd5v˜×%E˜V3-öÚDB)£iä%˜¤‘³Õ÷#’RÚØ• š'¥@Ò4£m]É]˜n5×"Ù e†N„ò¡‹ïðÒ•ÙYAfyñ9¨Ý˜þVÃb"…–9hšrʧ¢~žY‰ž}ªÙ¤ˆZfu)‰m²å_vnŠi~ ݉àcîÔžW~:*A‚Uši©`¦÷ßXf)–¤¹S¥¥Â´ÚŸ¦¹Úš)bm Wά§ujì‚Ïîú( «Â§´ºjUŠ<(¦§Å.«¤°ÿé¥;+Ž7Zˆ'»s¾UÈ©ëç«©ä¶v!µÝ²ê¨“áþú„µê®·Ì üí–¢n«.dôôzmÃÙ[ñƒÂxñ°Íb‹pÂéZÃç„:x(³ï®Èì0Å/“ºE¼áíÃ"·«o½I:âÆ%'á£Á2Ç<îÍEwC3l$w+îÑþ/šæ½ˆÊ»bªoæ‹q*Kë¼0±8Gê5ÔQ7#Ì)›í&¬Ã¸«µÚ`ƒÜ5eM‡ŠöÓw¬¥ÂRy+ÒI3é1#s3JuØë\OÍ_4²ˆÆ]d;®-Þ—+ÝôÈÔÚ‰ÙÄ•[Þßt¦ rÏc\Bá+?.+âŸ9æÓ«ªÛ¾ÜݦÏ.Ó›Ó­ªÓ¶÷ ¸ñ¢ÇîÄŽv7ntínŸÄzÙ[;ïfðüwòp÷œ½(bom¬Ÿsίð¨Êõû´§o¯p齫<õɃS1½õÝ}½â0î|ÜØ‚ÜÛ^Ò'ú n}¬Zꤕ,xå k0{Ÿú ºö‰/dkþ¢òô·?èqÁ€ªÛIÛò½×eÕK)TÁ‘è\û²àϸǻ|¸ €³Óß ]¸ÀšvÚSžSˆÂŸ¼Hbï Zç;¨ì°\-„"ñW;ïÅP=¤àÏ eÄ.ùï`|›¡k¢D ‚î‹b"Ut:ZOzi|^þ8È­&n.õ³"û¤§;60;O$¢9ÆŽ‹$ä YÅͰ±‘?\¢@þ‡@Dú‘‰Ì³ ¯É2‘ÆLS¤âCxHKŠ }‹$â‚Äí R"Üãùàx·JbrJv<¥&åÁÆ–ªÌ"ÙKþÝofqÄa"/¨†b’²Œ®Tþ&QéÃòåò’jŒJ(1çLA¾ÒRðËE4ã×Í’”” fØÌ…Æd~SôJŸùRiMSjóš,Ãc¥YNu…Sš¾à-½IGPRóXêÄÏú¹O½ў÷¤%oÅiBt‹ä*g ùO:¶Òb%è/3É5wt™"ÕP»^G ºC†Î‘©M-iTêŒæ5wCêT ‰:/VTŠø|jË:™G°ï2ãªIÒIš4­þ„ß$iÔˆ›¸û«þߪ¯Z”89Eâ`W¹V´R­ªIí§XÍRv›þ‘+ kzX]Š•žc½«S7;Ù” ´´pmÌMñÀׯ’éôì:·zÒ¯ö6Ÿ°®_k¹XDzи•mdëz[/)—µ´e¬9×*·Î’U´sÅ.@ûêS˜ž¶š©•g\ ûGe`5‰Z­¬(•­†—1E¨nw Úí¢¬¹¶¥.QÛzËÚ†5›ÂÕ§o_ àÇ>÷½˜Íì1—gÝë:²Úý­vñ»\âÖ3¸[¤0o?vÞÖ>ì{6ætå_Ò”Œ&ov#lWÓØÅÔC1Uç«Výú6r®Õiˆe {°Ò1þéjáct¼H§j1¬âW¢ëÂ6œ¥ìŽ1t˜Sô}ÔY…<â&¯×Àe{²‘]Ú*åD‹ÿ í‚,•ÊœHÊSŽíÏû( Ÿ®ÎeíN‰“¬70ãOÆcþß–YÚÇä2ÙË´cLô”êg\Qù3?èg )ç|ø˜Ëù%1¯–ÌDEÛX¡~XÐ> ãwâò;Oš_)mbýj©É1 ûµ»F'uжr›)¸êWcØž­s^èÜue¥zŽ—“ëT'pÔ÷v´kmîÈeµ®é>všíþ#KÕ¤nÏ|v6½ÙêîÕ5œ¬o¾5M>«7ÖVÝ’º§Í ‰ã»3“Ž8‰Â¸Ð7 z‘ÞfÅõ}ñ—[ã_LE| è5#DPæbÌO|¦/eÜß+']ŽÐûñn#·ä„5^O.èËO1@j¹Ks5…ïõá4—Íï§«¹ÔüÞv¦·Žh“]ÀDÏZÆvu%œe—yÚG;óKjãTw‹Õ݈ugký§6¨P¥ÚîS¾ZØGñµØ‘n³sï;$±ôPÑ5S\9)îì­ò¯X4iþÆà¯Íâ!v¡·‹9·¥á[øÄ¿gó¹yæÎï¾ÆÐ›òæÊst0ïþwÖþê/yZ‡eð¢}îÃ\»í…Ïæ:Ÿç²‡àiˆ›oö´'¾}3ÏøÜ£þók‘ü¬ .oS|—Eu=”µjÖÿø}}aœÏÌè£?Ý׿õ¿},ò>jd2ºÁHáúë×xå÷æ·F÷7z©RyE7 ÖQ{ÿ·åõiéå4ÍUpÍSc¿Ç¬€GÒè÷€Í6GR€ç'‚Aa'( xf²Âw !ûC'†&Ô&b.7-XY$‡rÇr«G€¸&wórƒdÖ*]îåy#7~‡fó'réw\6ˆI˜Wwü÷:ÕƒôÇoËÇNƒ|bS…þ†5Iø|^Õl¸|)ƒìfF´¦ö74ƒt…†u?ôOÄbM2b.$ø&3Zí&L¦§CXE®Æ†72¸Lð6ƒ&(:v`šGzwjžSUx"h#J7xlÂ~Ï”ˆßÆ0Üu‰Qø`Ÿ(OU1SFg‰Þw‡Žhhn˜ŠÁ‚b8<¯Èk“¥€Ó†g²ø¶8t«È„oMfjÞÅy˜x$Ù–‰¸¨9|FŠœFˆìgþâuÈȈ‹W:Þ_@rÍÈ]ÑHŒš8\ ÖŠÃhW¤h’ãŒñˆŠÅˆŽÇ¨†„èrË8}Ó(ˆ¶†é-ØÏ(wþc‡˜z÷¨Žë¨ŠûXo©&¡Èu9x‚X(‘i93÷†©†Ù“†ÔÇl°¶ ¹K)ЬÁQ»¦`™v¢¦"Ÿ–(CF?#ùˆsô+ƒ’¼5y8)‡.è“’¸MÉèNÿHlyO9ŽÁx[< uÉx8J8) i‘±Œä(y/É•¹fmQ‰|8v9…íe6Š1w•Ìsœdˆáç’i)•]Ø{ayŠŽÆS3‰5ù~DÙomùw8؆ðÛØ:ôxtvI‹£w–F¸—]ô˜I9$f™ŽPÙuv†’ù2o‰”å.Šy})–ÌHd×h”‰˜†yŽÏ“™Ý“Ù™sþù‘âšr¸O‹f…Çàè™iY^­Ùˆ* j ˜i™œùˆÂ9aoN©˜nF˜tiyù™©©ÕWœ) Žù›æxxúø^…™Æ—É9c8÷nœq“?ž¬¹—Ò¹”¾÷c¸q­(›h¸›Iv’N'š£Y\Š“'[ ƒÛÙeKG~Á6f%Dnȉ™ãْѦ—é  x  ´žÚDã÷ƒèveIþIpºø¡jº–â9Ÿ¸ n·Ùsz¢‡Y™ XíÉ?Ë6@¼'•6º_“ˆžz!-ªϨW¯ÉL­7^Az£™6C )&—ˆˆ‡ñ7꓌£‹þ­¹PŒŠ/¸7¼T¡¹-±‡‚Î9£.j4 9>{ˆ6ìr#X—w—múo ºìWÒæÙj\žI¸K+^ ›½Õˆºƒá½;»¬×¹]èh Uc²‹{£¾ðÙ®+Ôºh[iDz½_‡´t'_üHitˆ¡ü«N𻲠̵nš†ù“ZÀ?«ŸŒÚwþ˳øÅWð#ÁÅwø»>âx¥‘»Áš‹£„J_Aµ¼ß&zDÂ|Y´›Âª›¶öÕS.¼]¡¨“|´¿"׿$ ®³KÄ~默†Vˆ½Ú‹½þŠ\BIÅÍ™±Õ:ÃÛ‡Á†û4^™}os†j›^ Ƹe^¥#œ‘`ÈÅûÆÂØÀFÜ´>Ë•ubC @¬ÆýE¸6lÂT«¡Ú²Þ–ÆŒC•G†yü@0›Èä{žÃG<>Ì–ȺV ŠZ‡Èp ºñëÁ$<º§+EÇ”\ÉñÅõ»º²)ëëÄùÊ£ÊxuŽ{ÊòÛi¥Œœ¸ Ìè6¢#·úÛÅ–¼ÇBªkʱ‚ïÍ}qË©ûÄË\¶h R¾,¾ìÄ6ªZ¸³ÌÈR|Äßzmƒ ËHA›ÒËÍ$ w Rx}o2¤q2ܽVk^¡\ÄL:¬ñ …¶[☸6þÀ>vZ+©8›Ä#5Éÿ\ÆÁÛ Ìk®Ä‹šÌéŸ!,´oê…ñ<¾ÊcúÑý½À –â<Ëßɧɻ*mÀ(-t½É¬ú̾d7hz×È çª7<½Dw¾­¸Ô.­Ñw6Ò$Í»ÆXÂ)ݼK" Î»Ñæ¬Åžëz»Û­=½kÀMͪT›Ä¼ÆÒ·Ò›Ô/z‹Y°¡ƒ—VZPMÕ;}Æ~LÌ[KÀêW°³–®CMÔõ\Òd=ÖŒ7ÓÕŠÃ!%!] ¾š«nõÔmýrÀûÂíÀòÆÉ‡tum×Ûn­Ð ·Ñ€²Д]9j Ú¦²8ÍØ# ÖÎŒ·çê­þLØöaŠçÑý/œÚ· Ø–äÊ÷*~ì5Ú‘u×9ì×ÜÈH [¤Áˆçk“±D|&d… ×¥·8B]±µkšØÛfw4ÀÝÃ4×ØÍ¬o½ÖFfØf–½­}!˜{ÒÚ•-ÖR¨ÞH i3mOùÇpVyχ­MÅyÝíšòMÚ)'àÛí`^¤× Kx˜3sÐÞôÜð àôÍ×d- lháûÍ6 >‡þŠ P8±úUÝLº:Ò×xyÓdä1 ðì2@™o߸‰Ô×üF*î˜øZuäà;Î-rðãÞ3î†5þR÷MÎü­–ˆ}D뽩9.9®¼­ÓÜ·½þâ÷©6mõHåŽ*ä<ån€]#`~~L>†iñ‚n{Â=Rnž @$çd*ÑrþÐ hÚ²'äxnçDØç¤¶tÎàcîoÿ)¶åàœ“€n˹(®èI9T>†ŽNv‡né^.èƒæÞéœþé;êšN…—ç…ê®(ê¤N@›Lg‰€õ¨„.é‰Sé@Þꄬ潮밲+eì¬Áÿ ë¿~¯±þÉ©.“FyìÞYçÍnë"`²Ñ~í/ í} ë´N„~Šíà®/á>îäÎÚåîBçžîê¾îìÞîàäîðïò>ïô^ïö~ïøžïú¾ïüÞïþþïšð?ð_ððŸð ¿ð ßðÿðñ?ñ_ññŸñ¿ñßñÿñ ò"?ò$_ò&ò(Ÿò*¿ò,ßò.ÿò0ó2?ó4_ó6ó8Ÿó:¿ó<ßó>ÿó@ôB?ôD_ôFôHŸôJ¿ôLßôNÿôPõR?õT_õVõXŸõZ¿õ\ßõ^ÿõ`öb?öd_öAŸ!þã XScreenSaver Logo, designed by Angela Goodman Copyright (c) 2001 by Jamie Zawinski Unauthorized use or reproduction prohibited. http://www.jwz.org/xscreensaver/ ;xscreensaver-5.34/utils/images/logo.eps000644 000767 000767 00001001020 07376667335 017757 0ustar00jwzjwz000000 000000 %!PS-Adobe-3.0 EPSF-3.0 %%Creator: Adobe Illustrator(R) 8.0 %%AI8_CreatorVersion: 8 %%For: (rzr Grl) (evol engel) %%Title: (xscreensaver.eps) %%CreationDate: (1/30/01) (8:38 PM) %%BoundingBox: 179 249 429 531 %%HiResBoundingBox: 179.3335 249.9619 428.666 530.8477 %%DocumentProcessColors: Black %%DocumentFonts: Device %%DocumentSuppliedFonts: Device %%DocumentSuppliedResources: procset Adobe_level2_AI5 1.2 0 %%+ procset Adobe_typography_AI5 1.0 1 %%+ procset Adobe_ColorImage_AI6 1.3 0 %%+ procset Adobe_Illustrator_AI5 1.3 0 %%+ procset Adobe_cshow 2.0 8 %%+ procset Adobe_shading_AI8 1.0 0 %AI5_FileFormat 4.0 %AI3_ColorUsage: Color %AI3_IncludePlacedImages %AI7_ImageSettings: 1 %%DocumentCustomColors: (PANTONE 152 CVC) %%+ (PANTONE 485 CVC) %%CMYKCustomColor: 0 0.51 1 0 (PANTONE 152 CVC) %%+ 0.91 0.01 0.93 0 (PANTONE 354 2X CVC) %%+ 0 1 0.91 0 (PANTONE 485 CVC) %%CMYKProcessColor: 1 1 1 1 ([Registration]) %%AI6_ColorSeparationSet: 1 1 (AI6 Default Color Separation Set) %%+ Options: 1 16 0 1 0 1 1 1 0 1 1 1 1 18 0 0 0 0 0 0 0 0 131071 -1 %%+ PPD: 1 21 0 0 60 45 2 2 1 0 0 1 0 0 0 0 0 0 0 0 0 0 () %AI3_TemplateBox: 306.5 395.5 306.5 395.5 %AI3_TileBox: 30 31 582 761 %AI3_DocumentPreview: Header %AI5_ArtSize: 612 792 %AI5_RulerUnits: 2 %AI5_ArtFlags: 1 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 4 %AI8_OpenToView: -109 667 1 718 623 18 0 1 153 44 0 0 %AI5_OpenViewLayers: 3733 %%PageOrigin:30 31 %%AI3_PaperRect:-30 761 582 -31 %%AI3_Margin:30 -31 -30 31 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI7_Thumbnail: 116 128 8 %%BeginData: 12612 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FD2BFF2727FD71FF2052F87DFD70FF76F8F8F8A8FD6FFFA8FD04F8 %FD70FF4B69F8F852FD6FFFA84468F8F87DFD6FFF27FC44F827A8FD6EFF27 %8C8C20F827A8FD6DFFA844B08C27F852FD6DFFA820FCFC4426F87DFD6DFF %20B0FCB0204AF8FD09FFA1FFA8FD61FF4B8CFCFC8CF8F827FD07FF7DF87D %F87DFD60FF528DFCB0FC4B26F8A8FD06FF204B27F8FD61FF7D68FCFCFC8C %4AF827FD05FF27F827F852FD61FFA869FCB0FCB02074F8FD04FFA8204BF8 %F8A8FD61FFA844FD04FC4492F87DFFFFFF2068F8F8F8FD62FF7D69FCB0FC %B02050F8A8FFFF526944F8F852FD62FF7668FCFCFC684AF827FFFFA8208C %68F8F852FD62FF27B0FCB0FC274AF87DFFFF7644B02050F87DFD45FFA852 %FD1B2720FCFCFC6820F8F8272727F8FCFC206EF8F8FD202752A8FD22FF7D %FD1CF82044B0FCB0F874FD04F82069FCB0449EFD23F827FD22FF27F8F8F8 %FD1927F8FCFCFC4474F8F8272727208CFCFC6844F8F8FD1F27F8F8F87DFD %21FFF8F8F8FD19FF4B69FCB08C206EF852FFFFA844B0FCB06898F87DFD1F %FFA8F8F827FD21FFF8F827FD18FF2744FCFCFC684426F8A8FFFF4B68FCFC %FC8C44F827FD20FFF8F827FD21FFF8F827FD17FF764BFCB0FCB0F8C0F852 %FFFFFF27FCB0FCB0FC4B2027FD20FFF8F827FD21FFF8F827FD16FF7D20FD %04FC8C4A44F87DFFFFA844FD05FC204AF8FD20FFF8F827FD21FFF8F827FD %16FF278CB0FCB0FC696E26F8FFFFFF768DFCB0FCB0FC444AF87DFD1FFFF8 %F827FD21FFF8F827FD10FF4BA1A8FFFF5268FD05FC20C0F852FFFFFF4B8C %FD05FC6844F852FD1FFFF8F827FD21FFF8F827FD05FF7D52275227522752 %2752274B27F8F85220B0FCB0FCB0FC4B92F8F852275220B0FCB0FCB0FCB0 %2026F852275227522752275227522752275227522752275227522752A8FD %05FFF8F827FD21FFF8F827FD04FF52FD0AF8206820F8F8F88CFD05FC8C44 %74FD05F820FD07FC44FD1CF87DFD04FFF8F827FD21FFF8F827FFFFFFA8FD %0AF8204444F826F820FCB0FCB0FCB08C744AFD05F844B0FCB0FCB0FCB068 %4AFD1BF827FD04FFF8F827FD21FFF8F827FFFFFFA8FD0BF88CF8F8F82068 %FD06FC8C444AFD05F868FD08FC2020FD1BF8FD04FFF8F827FD21FFF8F827 %FFFFFFA8FD0AF8458C20F8F820B0FCB0FCB0FCB0FC266EFD05F844B0FCB0 %FCB0FCB0FC6944FD1BF8FD04FFF8F827FD21FFF8F827FFFFFFA8FD09F820 %6868F8F8F820FD08FC449EFD05F868FD08FC8C20FD1BF8FD04FFF8F827FD %21FFF8F827FFFFFF7DFD0AF8B044F8F8F820B0FCB0FCB0FCB0FC8D2026FD %04F844B0FCB0FCB0FCB0FCB0446EFD1AF8FD04FFF8F827FD21FFF8F827FF %FFFFA8FD09F844FC20F8F8F820FD09FC4420FD04F820FD0AFC2020FD19F8 %FD04FFF8F827FD21FFF8F827FFFFFFA8FD08F8218CB02026F8F820B0FCB0 %FCB0FCB0FCB0FC20FD04F820B0FCB0FCB0FCB0FCB0FC6944FD19F8FD04FF %F8F827FD21FFF8F827FFFFFFA8FD09F8FCFC444AF85220FD0AFC8C20F8F8 %274B8CFD0AFC2020F8F87D527D527D527D527D527D27FD0AF8FD04FFF8F8 %27FD21FFF8F827FFFFFFA8FD08F845FCB02074F8A820B0FCB0FCB0FCB0FC %B0FCB06820F827A84BFCB0FCB0FCB0FCB0FCB08C2020F852FD0BFF27FD09 %F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD07F82068FCFC206EF87D4B8C %FD0BFC4420F827208CFD0AFC6820F8F852FD0AFFA8FD09F8FD04FFF8F827 %FD21FFF8F827FFFFFFA8FD07F820B0FCB0209EF87D7D69FCB0FCB0FCB0FC %B0FCB0FCB0444BF87620B0FCB0FCB0FCB0FCB0FCB0685120F8A8FD09FFA8 %FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD07F844FCFCFC686EF827 %FF20FD0DFC2026F82068FD0BFC2074F852FD09FFA8FD09F8FD04FFF8F827 %FD21FFF8F827FFFFFF7DFD06F82068B0FCB0686E26F8A87668B0FCB0FCB0 %FCB0FCB0FCB0FCB0204AF820FCB0FCB0FCB0FCB0FCB0FCB0204AF8FD09FF %7DFD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD07F88CFD04FCF874F8 %7DA820FD0DFC8CF8F8F868FD0BFC4420F852FD08FFA8FD09F8FD04FFF8F8 %27FD21FFF8F827FFFFFFA8FD06F820FCB0FCB0FC4B98F827FF4B8DFCB0FC %B0FCB0FCB0FCB0FCB0FC8D44F8F8B0FCB0FCB0FCB0FCB0FCB0FC27F827FD %08FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD06F820FD05FC68 %4A44F87DFF20FD0EFC20202044FD0BFC444AF8A8FD07FFA8FD09F8FD04FF %F8F827FD21FFF8F827FFFFFFA8FD06F821FCB0FCB0FCB0209EF827FF4C8C %B0FCB0FCB0FCB0FCB0FCB0FCB0684AF820FCB0FCB0FCB0FCB0FCB0FCB020 %F87DFD07FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD06F844FD %06FC684426F8A8A820FD0EFCF84AF868FD0BFC20F852FD07FFA8FD09F8FD %04FFF8F827FD21FFF8F827FFFFFFA8FD06F869FCB0FCB0FCB0FC4B74F827 %FF4B8DFCB0FCB0FCB0FCB0FCB0FCB0FC694AF820B0FCB0FCB0FCB0FCB0FC %B0684AF8FD07FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD06F8 %44FD07FC8C2644F87DFF20FD0DFC8C20F820FD0BFC8C20F8A8FD06FFA8FD %09F8FD04FFF8F827FD21FFF8F827FFFFFF7DFD06F869FCB0FCB0FCB0FCB0 %4474F826A84B8CB0FCB0FCB0FCB0FCB0FCB0FCB08C2020B0FCB0FCB0FCB0 %FCB0FCB0FC20F87DFD06FF7DFD09F8FD04FFF8F827FD21FFF8F827FFFFFF %A8FD06F844FD09FCF874F8527D44FD0EFC8C8CFD0CFC44F827FD06FFA8FD %09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD06F821FCB0FCB0FCB0FCB0 %FCB0204AF8A821B0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0 %FCB0FCB0FC8DF827FD06FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFFFF %A8FD07F8FD0AFC8C20F8F87D44FD1BFC8C20F8FD06FFA8FD09F8FD04FFF8 %F827FD21FFF8F827FFFFFFA8FD06F82068B0FCB0FCB0FCB0FCB0FC6920F8 %5227FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0 %20F87DFD05FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD07F820 %FD0BFC20F8F820FD1CFC44F87DFD05FFA8FD09F8FD04FFF8F827FD21FFF8 %F827FFFFFFA8FD07F8208DFCB0FCB0FCB0FCB0FCB08C26F8528CB0FCB0FC %B0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB044F852FD05FFA8 %FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD08F820FD0BFC44F8F868 %FD1BFC68F827FD05FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFFFF7DFD %08F8208CB0FCB0FCB0FCB0FCB0FCB020F844B0FCB0FCB0FCB0FCB0FCB0FC %B0FCB0FCB0FCB0FCB0FCB0FCB0FCB0684AF8FD05FF7DFD09F8FD04FFF8F8 %27FD21FFF8F827FFFFFFA8FD09F820FD0BFC8CF868FD1BFC8CF8F8FD05FF %A8FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD09F8208DFCB0FCB0FC %B0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FC %B0FCB0FCB08C4BF8A8FD04FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFF %FFA8FD09F82720FD28FC8C20F87DFD04FFA8FD09F8FD04FFF8F827FD21FF %F8F827FFFFFFA8FD09F8277644B0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0 %FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB08C74F87DFD04FFA8 %FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD09F827FF278CFD26FC44 %6EF827FD04FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD09F827 %FFA84BFCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FC %B0FCB0FCB0FCB0FCB0FCB02074F852FD04FFA8FD09F8FD04FFF8F827FD21 %FFF8F827FFFFFFA8FD09F827FFFF5268FD24FC684AF8F8A8FD04FFA8FD09 %F8FD04FFF8F827FD21FFF8F827FFFFFF7DFD09F827FFFFFF208DFCB0FCB0 %FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0 %FC20F827A8FD05FF7DFD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD09 %F827FD04FFF88CFD21FC8CF8F87DFD06FFA8FD09F8FD04FFF8F827FD21FF %F8F827FFFFFFA8FD08F82727FD04FFA820B0FCB0FCB0FCB0FCB0FCB0FCB0 %FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB020F852FD07FF52FD09F8 %FD04FFF8F827FD21FFF8F827FFFFFFA8FD0AF8277D7DA87D7DF8FD1FFC20 %2027A87DA87DA87DA852FD0AF8FD04FFF8F827FD21FFF8F827FFFFFFA8FD %10F82020B0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FC %B0FCB06820FD14F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD11F82020FD %1BFC6820FD15F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD12F82120B0FC %B0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB06821FD16F8FD04 %FFF8F827FD21FFF8F827FFFFFFA8FD13F820F88CFD16FC4420FD17F8FD04 %FFF8F827FD21FFF8F827FFFFFF7DFD14F820F88DFCB0FCB0FCB0FCB0FCB0 %FCB0FCB0FCB0FCB0FC8DF820FD18F8FD04FFF8F827FD21FFF8F827FFFFFF %A8FD17F82068FD0FFC8C44FD1BF8FD04FFF8F827FD21FFF8F827FD04FF27 %FD17F82120698CB0FCB0FCB0FCB0FCB0FC8D4427FD1BF852FD04FFF8F827 %FD21FFF8F827FD04FF7DFD1AF820F820446844684444202620FD1CF827A8 %FD04FFF8F827FD21FFF8F827FD05FFA87D527D527D527D527D527D527D52 %7D527D527D527D527DFD0AF82050FD07F827527D527D527D527D527D527D %527D527D527D527D52A8FD06FFF8F827FD21FFF8F827FD1CFFFD15F8A8FD %1BFFF8F827FD21FFF8F827FD1BFF52FD16F8FD1BFFF8F827FD21FFF8F827 %FD1AFF52FD18F8FD1AFFF8F827FD21FFF8F827FD19FF2727FD19F8A8FD18 %FFF8F827FD21FFF8F827FD17FF7DFD1DF827A8FD16FFF8F827FD21FFF8F8 %27FD15FFFD23F8A8FD14FFF8F827FD21FFF8F827FD14FF52FD24F8FD14FF %F8F827FD21FFF8F827FD15FF2727F827F827F827F827F827F827F827F827 %F827F827F827F827F827F827F827F827F8A8FD14FFF8F827FD21FFF8F827 %FD4DFFF8F827FD21FFF8F827FD4DFFF8F827FD21FFF8F8F8277D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D27F8F852FD21FF52FD51F87DFD22FF52FD4EF827 %7DFD25FFFD4CA8FD91FFCACACAFFFFFF9AC3CAFFFFCA93B59ACAFD05FFCA %FD06FFCACACAFD04FFCA93B593BC6FFFFFCA93B593BC93FFCABC9AFFFFFF %93BCFFFFFFCA9AB593CAFD05FFB6A1FFFFFF94CAFD04FFCAFFFFFF93B593 %BC93FD04FFCAC4FD13FF9A448DCAFFA18C44BCFFBC6820F8208CCAFFFF93 %93688D93FFFFFF8C68448D8CCAFFCA8C20F8F8F8449ACA8C20F8F8F8449A %BC448CCAFF9A6868CAFFBC6820F84468FD04FFCA688CCAFF9A6868CAFFFF %8C688DFF8C20F8F8F82093FF9AB044688CBCCAFD10FFCA6944BCFFB62068 %CAFF8CF82069444493FF8C44F820F8689AFF9320F86944208CFFCA68F893 %8CB58CCACA68F8938CB58CCA9A4420BCFFC32069CAFF8CF82068204593FF %FFFF9A4444C3FFC320459AFFCA6920B6FF93F8938CB58CBCFFB5F8444445 %68C3FD11FF8CF88CFF8CF88CFFC368F8B0C3B0F8B5FF8DF8208C68F8B5FF %B5F88C9ABC208DFFCA442093FD04FFCA442093FD04FFBC20F88CFF762020 %CAA144F8B5C38CF8B5FFFFFFB5F8208CFFC368F8B5FFC4442093FF8CF88C %FD04FFCA68208CCA8C208CFD11FFB5F893C393F8B5FFCA44449AFF934493 %FF68F88CFF93B59AFF68F88CFF764444CAC46920BCFD04FFC46920BCFD04 %FF9320F893A1BC204493CA204493FF934493FFFFFF8CF8F8B5FFFF8CF88C %FF932044CAFF8DF8B5FD04FFCA68F8B5FFB5F893FD11FF9A4420FC20449A %FFC368F8BCFFCA93CAC368F8B0FD05FF69F88DFFA12068C3CA442093FD04 %FFCA442093FD04FF93F8F82093932020BCC34420BCFFCA93A1FFFFCA8DF8 %F844CAFFB5F88CFF93F88CCAFF68F88CFD04FFCA44F88CFF8CF88CFD12FF %8CF844F88CFFFFCA44F894FD04FFCA44F88DFD05FF68F88CFFCA4544CACA %6920BCFD04FFCA6920BCFD04FF8CF8F8F88CBD20449ACA442093FD06FFCA %44F8F8449AFF932068CA8CF88CFFFF68F8B5FD04FFCA68F8B5FFB5F8B5FD %12FF93F8F8F8B5FFFFC368F8B093CACAFFC36820BCFD05FF6FF88DC39320 %68CACA44208CCAC3CAFFCA20208CCAC3CAFFB5F8F8F8688C2020BCC368F8 %FC6FCACAFFFFFF93202044F8B5FFBD20449393F893FFCA44F88CCAC3CAFF %CA44F88CCA8CF88CFD12FFA144F84493FFFFFF8C20F84444B5CAFF444493 %FD05FF68F8446920F88CFFCA44F84444688CFFA144F84444688CFF8DF820 %4420B020449AFF8C20204444B5FFFFFFB5F89368F88CFFC46920B544449A %FFC469F82044698CFFC469F868442020BCFD12FFCA44F844CAFFFFFFC38C %68202020BCFF682093FD05FF6FF8F8F82068BCFFCA20F8F820688DFFA120 %F8F820688DFFB5F86868F88C2020BCFFC38C68442020BCFFFF8CF88C8CF8 %68C3FF8CF88C2044CAFFCA44F8F82044B0CACA44F8F8F8208DCAFD12FFA1 %68F8699BFD05FFCACA8C2093FF44F88CFD05FF69F8F8F844BCFFFFCA44F8 %4593CAFFFFA144F84593CAFFFF8DF844B5F868F8459AFFFFFFCAC38C2093 %FFCA93F8938C2044C3FFB5F868F893CAFFCA69F8208CCAFFFFCA69F8F8F8 %93CAFD13FF9420F8F8B5FD07FFB5F893C368F8B5FD05FF9AF8F8F8208CFF %FFCA44208CFD04FFCA20208CFD04FFB5F8689344F8F820BCFD05FFB5F8B5 %FFBC202093BC202093FF8C20F8F88CFFFFCA44F88CFD04FFCA44F8F8F844 %C3FD13FF8CF868208CFFFFFFA1C3FFFF8CF868CA44F88DFD05FF6FF86893 %F8B5FFFFC46920BCFD04FFC46820BCFD04FF8CF88CCA68F8F84493FF9AC3 %CAFF8DF86FFF932068B58C44F8B5FFBC20F8F8B5FFFFCA68F8B5FD04FFCA %68F8B0442093FD12FFCA68F8FC44449AFFC38C44BCFF93F88DC368F8B5FF %FF68B0FF93F86F8CF844CAFFCA442093FD04FFCA442093FD04FF93F88DFF %93F8F820BCC38C449AFFB5F869FFB0FD06F868FFA168F82093FFFFFF44F8 %8CFD04FFCA4420938DF88DFD12FFBC2045BC93F8B5FFCA442193FF8CF88C %CA44F893FF9A4568FF6FF88CC3444593FFCA69209AFD04FFCA69209AFD04 %FF8CF88CFF9321F8449ACA442093FF8DF868FF8CF820934420F8699BFF8C %F844C3FFFFFF6FF8B5FD04FFCA6820BD8D2068CAFD11FF8CF868FF8CF868 %FFCA68F8B09BFCF88DC368F8B593B5F868C39AF88DCA68F8B5FFCA442093 %FD04FFCA442093FD04FFB5F88DFFCA44F820BCC368F88C9AB5F86F9A4420 %93CAC38C20F893FF93F868C3FFFFFF68F88CFD04FFCA442093BD204493FD %10FFCA93F8B5FFBC20449AFF8CF8206920208CFF8CF8204444F88CFF6FF8 %8CFF8CF868FFCA68F8938C8D8CC3CA68F8938C8D8CC38DF88CFFFFB5F844 %9AFF8CF82068F82093BC2093CAFFFFCA68F88CFF8DF88CFD04FFB5F8938C %B568B5C469F8BCCA93F8B5FD10FFCA688DA1FFCA8D2093FFBC6820F82068 %A1FFBC44F8F8204493FFB5F88DFF93204494CA44FD05F88CCA44FD05F88C %93208CFFFF934444BCFFBC6820F82068CA9A8C93FD04FFB020FCCABC4493 %FD04FF8CFD05F868CA682093FF8CF868CAFD10FFB5CAFFFFFFBCB59AFFFF %CA93B593CAFFFFFFC38DB593C3FFFF9AB59AFFCAB593FFFFB58CB58DB58C %CAFFB58CB58DB58CCACAB59AFFFFFF93CAFFFFFFCA93B593CAFFFFC3FD05 %FFCAB5CAFFFFB59AFD04FFBC8DB58CB58DBCFFB68DCAFFCA8CBCFDFCFFFD %FCFFFDFCFFFDFCFFFDFCFFFDFCFFFDECFFFF %%EndData %%EndComments %%BeginProlog %%BeginResource: procset Adobe_level2_AI5 1.2 0 %%Title: (Adobe Illustrator (R) Version 5.0 Level 2 Emulation) %%Version: 1.2 0 %%CreationDate: (04/10/93) () %%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) userdict /Adobe_level2_AI5 26 dict dup begin put /packedarray where not { userdict begin /packedarray { array astore readonly } bind def /setpacking /pop load def /currentpacking false def end 0 } if pop userdict /defaultpacking currentpacking put true setpacking /initialize { Adobe_level2_AI5 begin } bind def /terminate { currentdict Adobe_level2_AI5 eq { end } if } bind def mark /setcustomcolor where not { /findcmykcustomcolor { (AI8_CMYK_CustomColor) 6 packedarray } bind def /findrgbcustomcolor { (AI8_RGB_CustomColor) 5 packedarray } bind def /setcustomcolor { exch aload pop dup (AI8_CMYK_CustomColor) eq { pop pop 4 { 4 index mul 4 1 roll } repeat 5 -1 roll pop setcmykcolor } { dup (AI8_RGB_CustomColor) eq { pop pop 3 { 1 exch sub 3 index mul 1 exch sub 3 1 roll } repeat 4 -1 roll pop setrgbcolor } { pop 4 { 4 index mul 4 1 roll } repeat 5 -1 roll pop setcmykcolor } ifelse } ifelse } def } if /setAIseparationgray { false setoverprint 0 setgray /setseparationgray where{ pop setseparationgray }{ /setcolorspace where{ pop [/Separation (All) /DeviceCMYK {dup dup dup}] setcolorspace 1 exch sub setcolor }{ setgray }ifelse }ifelse } def /gt38? mark {version cvr cvx exec} stopped {cleartomark true} {38 gt exch pop} ifelse def userdict /deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt put userdict /level2? systemdict /languagelevel known dup { pop systemdict /languagelevel get 2 ge } if put /level2ScreenFreq { begin 60 HalftoneType 1 eq { pop Frequency } if HalftoneType 2 eq { pop GrayFrequency } if HalftoneType 5 eq { pop Default level2ScreenFreq } if end } bind def userdict /currentScreenFreq level2? {currenthalftone level2ScreenFreq} {currentscreen pop pop} ifelse put level2? not { /setcmykcolor where not { /setcmykcolor { exch .11 mul add exch .59 mul add exch .3 mul add 1 exch sub setgray } def } if /currentcmykcolor where not { /currentcmykcolor { 0 0 0 1 currentgray sub } def } if /setoverprint where not { /setoverprint /pop load def } if /selectfont where not { /selectfont { exch findfont exch dup type /arraytype eq { makefont } { scalefont } ifelse setfont } bind def } if /cshow where not { /cshow { [ 0 0 5 -1 roll aload pop ] cvx bind forall } bind def } if } if cleartomark /anyColor? { add add add 0 ne } bind def /testColor { gsave setcmykcolor currentcmykcolor grestore } bind def /testCMYKColorThrough { testColor anyColor? } bind def userdict /composite? 1 0 0 0 testCMYKColorThrough 0 1 0 0 testCMYKColorThrough 0 0 1 0 testCMYKColorThrough 0 0 0 1 testCMYKColorThrough and and and put composite? not { userdict begin gsave /cyan? 1 0 0 0 testCMYKColorThrough def /magenta? 0 1 0 0 testCMYKColorThrough def /yellow? 0 0 1 0 testCMYKColorThrough def /black? 0 0 0 1 testCMYKColorThrough def grestore /isCMYKSep? cyan? magenta? yellow? black? or or or def /customColor? isCMYKSep? not def end } if end defaultpacking setpacking %%EndResource %%BeginResource: procset Adobe_typography_AI5 1.0 1 %%Title: (Typography Operators) %%Version: 1.0 1 %%CreationDate:(6/10/1996) () %%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_typography_AI5 68 dict dup begin put /initialize { begin begin Adobe_typography_AI5 begin Adobe_typography_AI5 { dup xcheck { bind } if pop pop } forall end end end Adobe_typography_AI5 begin } def /terminate { currentdict Adobe_typography_AI5 eq { end } if } def /modifyEncoding { /_tempEncode exch ddef /_pntr 0 ddef { counttomark -1 roll dup type dup /marktype eq { pop pop exit } { /nametype eq { _tempEncode /_pntr dup load dup 3 1 roll 1 add ddef 3 -1 roll put } { /_pntr exch ddef } ifelse } ifelse } loop _tempEncode } def /havefont { systemdict /languagelevel known { /Font resourcestatus dup { exch pop exch pop } if } { systemdict /FontDirectory get 1 index known { pop true } { systemdict /fileposition known { dup length 6 add exch Ss 6 250 getinterval cvs pop Ss exch 0 exch getinterval status { pop pop pop pop true } { false } ifelse } { pop false } ifelse } ifelse } ifelse } def /TE { StandardEncoding 256 array copy modifyEncoding /_nativeEncoding exch def } def /subststring { exch 2 index exch search { exch pop exch dup () eq { pop exch concatstring } { 3 -1 roll exch concatstring concatstring } ifelse exch pop true } { pop pop false } ifelse } def /concatstring { 1 index length 1 index length 1 index add string dup 0 5 index putinterval dup 2 index 4 index putinterval 4 1 roll pop pop pop } def % /TZ { dup type /arraytype eq { /_wv exch def } { /_wv 0 def } ifelse /_useNativeEncoding exch def 2 index havefont { 3 index 255 string cvs dup (_Symbol_) eq { pop 2 index findfont } { 1 index 0 eq { dup length 1 sub 1 exch getinterval cvn findfont } { pop 2 index findfont } ifelse } ifelse } { dup 1 eq { 2 index 64 string cvs dup (-90pv-RKSJ-) (-83pv-RKSJ-) subststring { exch pop dup havefont { findfont false } { pop true } ifelse } { pop dup (-90ms-RKSJ-) (-Ext-RKSJ-) subststring { exch pop dup havefont { findfont false } { pop true } ifelse } { pop pop true } ifelse } ifelse { 1 index 1 eq { /Ryumin-Light-Ext-RKSJ-V havefont {/Ryumin-Light-Ext-RKSJ-V} {/Courier} ifelse } { /Ryumin-Light-83pv-RKSJ-H havefont {/Ryumin-Light-83pv-RKSJ-H} {/Courier} ifelse } ifelse findfont [1 0 0.5 1 0 0] makefont } if } { /Courier findfont } ifelse } ifelse _wv type /arraytype eq { _wv makeblendedfont } if dup length 10 add dict begin mark exch { 1 index /FID ne { def } if cleartomark mark } forall pop /FontScript exch def /FontDirection exch def /FontRequest exch def /FontName exch def counttomark 0 eq { 1 _useNativeEncoding eq { /Encoding _nativeEncoding def } if cleartomark } { /Encoding load 256 array copy modifyEncoding /Encoding exch def } ifelse FontName currentdict end definefont pop } def /tr { _ax _ay 3 2 roll } def /trj { _cx _cy _sp _ax _ay 6 5 roll } def /a0 { /Tx { dup currentpoint 3 2 roll tr _psf newpath moveto tr _ctm _pss } ddef /Tj { dup currentpoint 3 2 roll trj _pjsf newpath moveto trj _ctm _pjss } ddef } def /a1 { W B } def /e0 { /Tx { tr _psf } ddef /Tj { trj _pjsf } ddef } def /e1 { W F } def /i0 { /Tx { tr sp } ddef /Tj { trj jsp } ddef } def /i1 { W N } def /o0 { /Tx { tr sw rmoveto } ddef /Tj { trj swj rmoveto } ddef } def /r0 { /Tx { tr _ctm _pss } ddef /Tj { trj _ctm _pjss } ddef } def /r1 { W S } def /To { pop _ctm currentmatrix pop } def /TO { iTe _ctm setmatrix newpath } def /Tp { pop _tm astore pop _ctm setmatrix _tDict begin /W { } def /h { } def } def /TP { end iTm 0 0 moveto } def /Tr { _render 3 le { currentpoint newpath moveto } if dup 8 eq { pop 0 } { dup 9 eq { pop 1 } if } ifelse dup /_render exch ddef _renderStart exch get load exec } def /iTm { _ctm setmatrix _tm concat _shift aload pop _lineorientation 1 eq { exch } if translate _scale aload pop _lineorientation 1 eq _yokoorientation 1 eq or { exch } if scale } def /Tm { _tm astore pop iTm 0 0 moveto } def /Td { _mtx translate _tm _tm concatmatrix pop iTm 0 0 moveto } def /iTe { _render -1 eq { } { _renderEnd _render get dup null ne { load exec } { pop } ifelse } ifelse /_render -1 ddef } def /Ta { pop } def /Tf { 1 index type /nametype eq { dup 0.75 mul 1 index 0.25 mul neg } if /_fontDescent exch ddef /_fontAscent exch ddef /_fontSize exch ddef /_fontRotateAdjust _fontAscent _fontDescent add 2 div neg ddef /_fontHeight _fontSize ddef findfont _fontSize scalefont setfont } def /Tl { pop neg 0 exch _leading astore pop } def /Tt { pop } def /TW { 3 npop } def /Tw { /_cx exch ddef } def /TC { 3 npop } def /Tc { /_ax exch ddef } def /Ts { 0 exch _shift astore pop currentpoint iTm moveto } def /Ti { 3 npop } def /Tz { count 1 eq { 100 } if 100 div exch 100 div exch _scale astore pop iTm } def /TA { pop } def /Tq { pop } def /Tg { pop } def /TG { pop } def /Tv { /_lineorientation exch ddef } def /TV { /_charorientation exch ddef } def /Ty { dup /_yokoorientation exch ddef 1 sub neg Tv } def /TY { pop } def /T~ { Tx } def /Th { pop pop pop pop pop } def /TX { pop } def /Tk { _fontSize mul 1000 div _lineorientation 0 eq { neg 0 } { 0 exch } ifelse rmoveto pop } def /TK { 2 npop } def /T* { _leading aload pop _lineorientation 0 ne { exch } if Td } def /T*- { _leading aload pop _lineorientation 0 ne { exch } if exch neg exch neg Td } def /T- { _ax neg 0 rmoveto _lineorientation 1 eq _charorientation 0 eq and { 1 TV _hyphen Tx 0 TV } { _hyphen Tx } ifelse } def /T+ { } def /TR { _ctm currentmatrix pop _tm astore pop iTm 0 0 moveto } def /TS { currentfont 3 1 roll /_Symbol_ findfont _fontSize scalefont setfont 0 eq { Tx } { Tj } ifelse setfont } def /Xb { pop pop } def /Tb /Xb load def /Xe { pop pop pop pop } def /Te /Xe load def /XB { } def /TB /XB load def currentdict readonly pop end setpacking % /X^ { currentfont 5 1 roll dup havefont { findfont _fontSize scalefont setfont } { pop exch } ifelse 2 index 0 eq { Tx } { Tj } ifelse pop pop setfont } def /T^ /X^ load def %%EndResource %%BeginProcSet: Adobe_ColorImage_AI6 1.3 0 userdict /Adobe_ColorImage_AI6 known not { userdict /Adobe_ColorImage_AI6 53 dict put } if userdict /Adobe_ColorImage_AI6 get begin /initialize { Adobe_ColorImage_AI6 begin Adobe_ColorImage_AI6 { dup type /arraytype eq { dup xcheck { bind } if } if pop pop } forall } def /terminate { end } def currentdict /Adobe_ColorImage_AI6_Vars known not { /Adobe_ColorImage_AI6_Vars 41 dict def } if Adobe_ColorImage_AI6_Vars begin /plateindex -1 def /_newproc null def /_proc1 null def /_proc2 null def /sourcearray 4 array def /_ptispace null def /_ptiname null def /_pti0 0 def /_pti1 0 def /_ptiproc null def /_ptiscale 0 def /_pticomps 0 def /_ptibuf 0 string def /_gtigray 0 def /_cticmyk null def /_rtirgb null def /XIEnable true def /XIType 0 def /XIEncoding 0 def /XICompression 0 def /XIChannelCount 0 def /XIBitsPerPixel 0 def /XIImageHeight 0 def /XIImageWidth 0 def /XIImageMatrix null def /XIRowBytes 0 def /XIFile null def /XIBuffer1 null def /XIBuffer2 null def /XIBuffer3 null def /XIDataProc null def /XIColorSpace /DeviceGray def /XIColorValues 0 def /XIPlateList false def end /ci6colorimage /colorimage where {/colorimage get}{null} ifelse def /ci6image systemdict /image get def /ci6curtransfer systemdict /currenttransfer get def /ci6curoverprint /currentoverprint where {/currentoverprint get}{{_of}} ifelse def /ci6foureq { 4 index ne { pop pop pop false }{ 4 index ne { pop pop false }{ 4 index ne { pop false }{ 4 index eq } ifelse } ifelse } ifelse } def /ci6testplate { Adobe_ColorImage_AI6_Vars begin /plateindex -1 def /setcmykcolor where { pop gsave 1 0 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub 0 1 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub 0 0 1 0 setcmykcolor systemdict /currentgray get exec 1 exch sub 0 0 0 1 setcmykcolor systemdict /currentgray get exec 1 exch sub grestore 1 0 0 0 ci6foureq { /plateindex 0 def }{ 0 1 0 0 ci6foureq { /plateindex 1 def }{ 0 0 1 0 ci6foureq { /plateindex 2 def }{ 0 0 0 1 ci6foureq { /plateindex 3 def }{ 0 0 0 0 ci6foureq { /plateindex 5 def } if } ifelse } ifelse } ifelse } ifelse pop pop pop pop } if plateindex end } def /ci6concatprocs { /packedarray where { pop dup type /packedarraytype eq 2 index type /packedarraytype eq or }{ false } ifelse { /_proc2 exch cvlit def /_proc1 exch cvlit def _proc1 aload pop _proc2 aload pop _proc1 length _proc2 length add packedarray cvx }{ /_proc2 exch cvlit def /_proc1 exch cvlit def /_newproc _proc1 length _proc2 length add array def _newproc 0 _proc1 putinterval _newproc _proc1 length _proc2 putinterval _newproc cvx } ifelse } def /ci6istint { type /arraytype eq } def /ci6isspot { dup type /arraytype eq { dup length 1 sub get /Separation eq }{ pop false } ifelse } def /ci6spotname { dup ci6isspot {dup length 2 sub get}{pop ()} ifelse } def /ci6altspace { aload pop pop pop ci6colormake } def /ci6numcomps { dup /DeviceGray eq { pop 1 }{ dup /DeviceRGB eq { pop 3 }{ /DeviceCMYK eq { 4 }{ 1 } ifelse } ifelse } ifelse } def /ci6marksplate { dup /DeviceGray eq { pop plateindex 3 eq }{ dup /DeviceRGB eq { pop plateindex 5 ne }{ dup /DeviceCMYK eq { pop plateindex 5 ne }{ dup ci6isspot { /findcmykcustomcolor where { pop dup length 2 sub get 0.1 0.1 0.1 0.1 5 -1 roll findcmykcustomcolor 1 setcustomcolor systemdict /currentgray get exec 1 ne }{ pop plateindex 5 ne } ifelse }{ pop plateindex 5 ne } ifelse } ifelse } ifelse } ifelse } def /ci6colormake { dup ci6numcomps exch 1 index 2 add 1 roll dup 1 eq {pop}{array astore} ifelse exch } def /ci6colorexpand { dup ci6spotname exch dup ci6istint { ci6altspace exch 4 1 roll }{ 1 3 1 roll } ifelse } def /ci6colortint { dup /DeviceGray eq { 3 1 roll 1 exch sub mul 1 exch sub exch }{ dup /DeviceRGB eq { 3 1 roll {1 exch sub 1 index mul 1 exch sub exch} forall pop 3 array astore exch }{ dup /DeviceCMYK eq { 3 1 roll {1 index mul exch} forall pop 4 array astore exch }{ 3 1 roll mul exch } ifelse } ifelse } ifelse } def /ci6colortocmyk { dup /DeviceGray eq { pop 1 exch sub 0 0 0 4 -1 roll 4 array astore }{ dup /DeviceRGB eq { pop aload pop _rgbtocmyk 4 array astore }{ dup /DeviceCMYK eq { pop }{ ci6altspace ci6colortint ci6colortocmyk } ifelse } ifelse } ifelse } def /ci6makeimagedict { 7 dict begin /ImageType 1 def /Decode exch def /DataSource exch def /ImageMatrix exch def /BitsPerComponent exch def /Height exch def /Width exch def currentdict end } def /ci6stringinvert { 0 1 2 index length 1 sub { dup 2 index exch get 255 exch sub 2 index 3 1 roll put } for } def /ci6stringknockout { 0 1 2 index length 1 sub { 255 2 index 3 1 roll put } for } def /ci6stringapply { 0 1 4 index length 1 sub { dup 4 index exch get 3 index 3 1 roll 3 index exec } for pop exch pop } def /ci6walkrgbstring { 0 3 index dup length 1 sub 0 3 3 -1 roll { 3 getinterval {} forall 5 index exec 3 index } for 5 {pop} repeat } def /ci6walkcmykstring { 0 3 index dup length 1 sub 0 4 3 -1 roll { 4 getinterval {} forall 6 index exec 3 index } for 5 { pop } repeat } def /ci6putrgbtograystr { .11 mul exch .59 mul add exch .3 mul add cvi 3 copy put pop 1 add } def /ci6putcmyktograystr { exch .11 mul add exch .59 mul add exch .3 mul add dup 255 gt { pop 255 } if 255 exch sub cvi 3 copy put pop 1 add } def /ci6rgbtograyproc { Adobe_ColorImage_AI6_Vars begin sourcearray 0 get exec XIBuffer3 dup 3 1 roll /ci6putrgbtograystr load exch ci6walkrgbstring end } def /ci6cmyktograyproc { Adobe_ColorImage_AI6_Vars begin sourcearray 0 get exec XIBuffer3 dup 3 1 roll /ci6putcmyktograystr load exch ci6walkcmykstring end } def /ci6separatecmykproc { Adobe_ColorImage_AI6_Vars begin sourcearray 0 get exec XIBuffer3 0 2 index plateindex 4 2 index length 1 sub { get 255 exch sub 3 copy put pop 1 add 2 index } for pop pop exch pop end } def /ci6compositeimage { dup 1 eq { pop pop image }{ /ci6colorimage load null ne { ci6colorimage }{ 3 1 roll pop sourcearray 0 3 -1 roll put 3 eq {/ci6rgbtograyproc}{/ci6cmyktograyproc} ifelse load image } ifelse } ifelse } def /ci6knockoutimage { gsave 0 ci6curtransfer exec 1 ci6curtransfer exec eq { 0 ci6curtransfer exec 0.5 lt }{ 0 ci6curtransfer exec 1 ci6curtransfer exec gt } ifelse {{pop 0}}{{pop 1}} ifelse systemdict /settransfer get exec ci6compositeimage grestore } def /ci6drawimage { ci6testplate -1 eq { pop ci6compositeimage }{ dup type /arraytype eq { dup length plateindex gt {plateindex get}{pop false} ifelse }{ { true }{ dup 1 eq {plateindex 3 eq}{plateindex 3 le} ifelse } ifelse } ifelse { dup 1 eq { pop pop ci6image }{ dup 3 eq { ci6compositeimage }{ pop pop sourcearray 0 3 -1 roll put /ci6separatecmykproc load ci6image } ifelse } ifelse }{ ci6curoverprint { 7 {pop} repeat }{ ci6knockoutimage } ifelse } ifelse } ifelse } def /ci6proctintimage { /_ptispace exch store /_ptiname exch store /_pti1 exch store /_pti0 exch store /_ptiproc exch store /_pticomps _ptispace ci6numcomps store /_ptiscale _pti1 _pti0 sub store level2? { _ptiname length 0 gt version cvr 2012 ge and { [/Separation _ptiname _ptispace {_ptiproc}] setcolorspace [_pti0 _pti1] ci6makeimagedict ci6image }{ [/Indexed _ptispace 255 {255 div _ptiscale mul _pti0 add _ptiproc}] setcolorspace [0 255] ci6makeimagedict ci6image } ifelse }{ _pticomps 1 eq { { dup { 255 div _ptiscale mul _pti0 add _ptiproc 255 mul cvi put } ci6stringapply } ci6concatprocs ci6image }{ { dup length _pticomps mul dup _ptibuf length ne {/_ptibuf exch string store}{pop} ifelse _ptibuf { exch _pticomps mul exch 255 div _ptiscale mul _pti0 add _ptiproc _pticomps 2 add -2 roll _pticomps 1 sub -1 0 { 1 index add 2 index exch 5 -1 roll 255 mul cvi put } for pop pop } ci6stringapply } ci6concatprocs false _pticomps /ci6colorimage load null eq {7 {pop} repeat}{ci6colorimage} ifelse } ifelse } ifelse } def /ci6graytintimage { /_gtigray 5 -1 roll store {1 _gtigray sub mul 1 exch sub} 4 1 roll /DeviceGray ci6proctintimage } def /ci6cmyktintimage { /_cticmyk 5 -1 roll store {_cticmyk {1 index mul exch} forall pop} 4 1 roll /DeviceCMYK ci6proctintimage } def /ci6rgbtintimage { /_rtirgb 5 -1 roll store {_rtirgb {1 exch sub 1 index mul 1 exch sub exch} forall pop} 4 1 roll /DeviceRGB ci6proctintimage } def /ci6tintimage { ci6testplate -1 eq { ci6colorexpand 3 -1 roll 5 -1 roll {0}{0 exch} ifelse 4 2 roll dup /DeviceGray eq { pop ci6graytintimage }{ dup /DeviceRGB eq { pop ci6rgbtintimage }{ pop ci6cmyktintimage } ifelse } ifelse }{ dup ci6marksplate { plateindex 5 lt { ci6colortocmyk plateindex get dup 0 eq ci6curoverprint and { 7 {pop} repeat }{ 1 exch sub exch {1 0}{0 1} ifelse () ci6graytintimage } ifelse }{ pop exch {0}{0 exch} ifelse 0 3 1 roll () ci6graytintimage } ifelse }{ ci6curoverprint { 8 {pop} repeat }{ pop pop pop {pop 1} 0 1 () /DeviceGray ci6proctintimage } ifelse } ifelse } ifelse } def /XINullImage { } def /XIImageMask { XIImageWidth XIImageHeight false [XIImageWidth 0 0 XIImageHeight neg 0 0] /XIDataProc load imagemask } def /XIImageTint { XIImageWidth XIImageHeight XIBitsPerPixel [XIImageWidth 0 0 XIImageHeight neg 0 0] /XIDataProc load XIType 3 eq XIColorValues XIColorSpace ci6tintimage } def /XIImage { XIImageWidth XIImageHeight XIBitsPerPixel [XIImageWidth 0 0 XIImageHeight neg 0 0] /XIDataProc load false XIChannelCount XIPlateList ci6drawimage } def /XG { pop pop } def /XF { 13 {pop} repeat } def /Xh { Adobe_ColorImage_AI6_Vars begin gsave /XIType exch def /XIImageHeight exch def /XIImageWidth exch def /XIImageMatrix exch def 0 0 moveto XIImageMatrix concat XIImageWidth XIImageHeight scale /_lp /null ddef _fc /_lp /imagemask ddef end } def /XH { Adobe_ColorImage_AI6_Vars begin grestore end } def /XIEnable { Adobe_ColorImage_AI6_Vars /XIEnable 3 -1 roll put } def /XC { Adobe_ColorImage_AI6_Vars begin ci6colormake /XIColorSpace exch def /XIColorValues exch def end } def /XIPlates { Adobe_ColorImage_AI6_Vars begin /XIPlateList exch def end } def /XI { Adobe_ColorImage_AI6_Vars begin gsave /XIType exch def cvi dup 256 idiv /XICompression exch store 256 mod /XIEncoding exch store pop pop /XIChannelCount exch def /XIBitsPerPixel exch def /XIImageHeight exch def /XIImageWidth exch def pop pop pop pop /XIImageMatrix exch def XIBitsPerPixel 1 eq { XIImageWidth 8 div ceiling cvi }{ XIImageWidth XIChannelCount mul } ifelse /XIRowBytes exch def XIEnable { /XIBuffer3 XIImageWidth string def XICompression 0 eq { /XIBuffer1 XIRowBytes string def XIEncoding 0 eq { {currentfile XIBuffer1 readhexstring pop} }{ {currentfile XIBuffer1 readstring pop} } ifelse }{ /XIBuffer1 256 string def /XIBuffer2 XIRowBytes string def {currentfile XIBuffer1 readline pop (%) anchorsearch {pop} if} /ASCII85Decode filter /DCTDecode filter /XIFile exch def {XIFile XIBuffer2 readstring pop} } ifelse /XIDataProc exch def XIType 1 ne { 0 setgray } if XIType 1 eq { XIImageMask }{ XIType 2 eq XIType 3 eq or { XIImageTint }{ XIImage } ifelse } ifelse }{ XINullImage } ifelse /XIPlateList false def grestore end } def end %%EndProcSet %%BeginResource: procset Adobe_Illustrator_AI5 1.3 0 %%Title: (Adobe Illustrator (R) Version 8.0 Full Prolog) %%Version: 1.3 0 %%CreationDate: (3/7/1994) () %%Copyright: ((C) 1987-1998 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_Illustrator_AI5_vars 112 dict dup begin put /_?cmyk false def /_eo false def /_lp /none def /_pf { } def /_ps { } def /_psf { } def /_pss { } def /_pjsf { } def /_pjss { } def /_pola 0 def /_doClip 0 def /cf currentflat def /_lineorientation 0 def /_charorientation 0 def /_yokoorientation 0 def /_tm matrix def /_renderStart [ /e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0 ] def /_renderEnd [ null null null null /i1 /i1 /i1 /i1 ] def /_render -1 def /_shift [0 0] def /_ax 0 def /_ay 0 def /_cx 0 def /_cy 0 def /_leading [ 0 0 ] def /_ctm matrix def /_mtx matrix def /_sp 16#020 def /_hyphen (-) def /_fontSize 0 def /_fontAscent 0 def /_fontDescent 0 def /_fontHeight 0 def /_fontRotateAdjust 0 def /Ss 256 string def Ss 0 (fonts/) putinterval /_cnt 0 def /_scale [1 1] def /_nativeEncoding 0 def /_useNativeEncoding 0 def /_tempEncode 0 def /_pntr 0 def /_tDict 2 dict def /_hfname 100 string def /_hffound false def /Tx { } def /Tj { } def /CRender { } def /_AI3_savepage { } def /_gf null def /_cf 4 array def /_rgbf 3 array def /_if null def /_of false def /_fc { } def /_gs null def /_cs 4 array def /_rgbs 3 array def /_is null def /_os false def /_sc { } def /_pd 1 dict def /_ed 15 dict def /_pm matrix def /_fm null def /_fd null def /_fdd null def /_sm null def /_sd null def /_sdd null def /_i null def /_lobyte 0 def /_hibyte 0 def /_cproc null def /_cscript 0 def /_hvax 0 def /_hvay 0 def /_hvwb 0 def /_hvcx 0 def /_hvcy 0 def /_bitfont null def /_bitlobyte 0 def /_bithibyte 0 def /_bitkey null def /_bitdata null def /_bitindex 0 def /discardSave null def /buffer 256 string def /beginString null def /endString null def /endStringLength null def /layerCnt 1 def /layerCount 1 def /perCent (%) 0 get def /perCentSeen? false def /newBuff null def /newBuffButFirst null def /newBuffLast null def /clipForward? false def end userdict /Adobe_Illustrator_AI5 known not { userdict /Adobe_Illustrator_AI5 100 dict put } if userdict /Adobe_Illustrator_AI5 get begin /initialize { Adobe_Illustrator_AI5 dup begin Adobe_Illustrator_AI5_vars begin /_aicmykps where {pop /_?cmyk _aicmykps def}if discardDict { bind pop pop } forall dup /nc get begin { dup xcheck 1 index type /operatortype ne and { bind } if pop pop } forall end newpath } def /terminate { end end } def /_ null def /ddef { Adobe_Illustrator_AI5_vars 3 1 roll put } def /xput { dup load dup length exch maxlength eq { dup dup load dup length 2 mul dict copy def } if load begin def end } def /npop { { pop } repeat } def /hswj { dup stringwidth 3 2 roll { _hvwb eq { exch _hvcx add exch _hvcy add } if exch _hvax add exch _hvay add } cforall } def /vswj { 0 0 3 -1 roll { dup 255 le _charorientation 1 eq and { dup cstring stringwidth 5 2 roll _hvwb eq { exch _hvcy sub exch _hvcx sub } if exch _hvay sub exch _hvax sub 4 -1 roll sub exch 3 -1 roll sub exch } { _hvwb eq { exch _hvcy sub exch _hvcx sub } if exch _hvay sub exch _hvax sub _fontHeight sub } ifelse } cforall } def /swj { 6 1 roll /_hvay exch ddef /_hvax exch ddef /_hvwb exch ddef /_hvcy exch ddef /_hvcx exch ddef _lineorientation 0 eq { hswj } { vswj } ifelse } def /sw { 0 0 0 6 3 roll swj } def /vjss { 4 1 roll { dup cstring dup length 1 eq _charorientation 1 eq and { -90 rotate currentpoint _fontRotateAdjust add moveto gsave false charpath currentpoint 5 index setmatrix stroke grestore _fontRotateAdjust sub moveto _sp eq { 5 index 5 index rmoveto } if 2 copy rmoveto 90 rotate } { currentpoint _fontHeight sub 5 index sub 3 index _sp eq { 9 index sub } if currentpoint exch 4 index stringwidth pop 2 div sub exch _fontAscent sub moveto gsave 2 index false charpath 6 index setmatrix stroke grestore moveto pop pop } ifelse } cforall 6 npop } def /hjss { 4 1 roll { dup cstring gsave false charpath currentpoint 5 index setmatrix stroke grestore moveto _sp eq { 5 index 5 index rmoveto } if 2 copy rmoveto } cforall 6 npop } def /jss { _lineorientation 0 eq { hjss } { vjss } ifelse } def /ss { 0 0 0 7 3 roll jss } def /vjsp { 4 1 roll { dup cstring dup length 1 eq _charorientation 1 eq and { -90 rotate currentpoint _fontRotateAdjust add moveto false charpath currentpoint _fontRotateAdjust sub moveto _sp eq { 5 index 5 index rmoveto } if 2 copy rmoveto 90 rotate } { currentpoint _fontHeight sub 5 index sub 3 index _sp eq { 9 index sub } if currentpoint exch 4 index stringwidth pop 2 div sub exch _fontAscent sub moveto 2 index false charpath moveto pop pop } ifelse } cforall 6 npop } def /hjsp { 4 1 roll { dup cstring false charpath _sp eq { 5 index 5 index rmoveto } if 2 copy rmoveto } cforall 6 npop } def /jsp { matrix currentmatrix _lineorientation 0 eq {hjsp} {vjsp} ifelse } def /sp { matrix currentmatrix 0 0 0 7 3 roll _lineorientation 0 eq {hjsp} {vjsp} ifelse } def /pl { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add exch itransform } def /setstrokeadjust where { pop true setstrokeadjust /c { curveto } def /C /c load def /v { currentpoint 6 2 roll curveto } def /V /v load def /y { 2 copy curveto } def /Y /y load def /l { lineto } def /L /l load def /m { moveto } def } { /c { pl curveto } def /C /c load def /v { currentpoint 6 2 roll pl curveto } def /V /v load def /y { pl 2 copy curveto } def /Y /y load def /l { pl lineto } def /L /l load def /m { pl moveto } def } ifelse /d { setdash } def /cf { } def /i { dup 0 eq { pop cf } if setflat } def /j { setlinejoin } def /J { setlinecap } def /M { setmiterlimit } def /w { setlinewidth } def /XR { 0 ne /_eo exch ddef } def /H { } def /h { closepath } def /N { _pola 0 eq { _doClip 1 eq { _eo {eoclip} {clip} ifelse /_doClip 0 ddef } if newpath } { /CRender { N } ddef } ifelse } def /n { N } def /F { _pola 0 eq { _doClip 1 eq { gsave _pf grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _fc /_doClip 0 ddef } { _pf } ifelse } { /CRender { F } ddef } ifelse } def /f { closepath F } def /S { _pola 0 eq { _doClip 1 eq { gsave _ps grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc /_doClip 0 ddef } { _ps } ifelse } { /CRender { S } ddef } ifelse } def /s { closepath S } def /B { _pola 0 eq { _doClip 1 eq gsave F grestore { gsave S grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc /_doClip 0 ddef } { S } ifelse } { /CRender { B } ddef } ifelse } def /b { closepath B } def /W { /_doClip 1 ddef } def /* { count 0 ne { dup type /stringtype eq { pop } if } if newpath } def /u { } def /U { } def /q { _pola 0 eq { gsave } if } def /Q { _pola 0 eq { grestore } if } def /*u { _pola 1 add /_pola exch ddef } def /*U { _pola 1 sub /_pola exch ddef _pola 0 eq { CRender } if } def /D { pop } def /*w { } def /*W { } def /` { /_i save ddef clipForward? { nulldevice } if 6 1 roll 4 npop concat pop userdict begin /showpage { } def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash /setstrokeadjust where {pop false setstrokeadjust} if newpath 0 setgray false setoverprint } def /~ { end _i restore } def /_rgbtocmyk { 3 { 1 exch sub 3 1 roll } repeat 3 copy 1 4 1 roll 3 { 3 index 2 copy gt { exch } if pop 4 1 roll } repeat pop pop pop 4 1 roll 3 { 3 index sub 3 1 roll } repeat 4 -1 roll } def /setrgbfill { _rgbf astore pop /_fc { _lp /fill ne { _of setoverprint _rgbf aload pop setrgbcolor /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /setrgbstroke { _rgbs astore pop /_sc { _lp /stroke ne { _os setoverprint _rgbs aload pop setrgbcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /O { 0 ne /_of exch ddef /_lp /none ddef } def /R { 0 ne /_os exch ddef /_lp /none ddef } def /g { /_gf exch ddef /_fc { _lp /fill ne { _of setoverprint _gf setgray /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /G { /_gs exch ddef /_sc { _lp /stroke ne { _os setoverprint _gs setgray /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /k { _cf astore pop /_fc { _lp /fill ne { _of setoverprint _cf aload pop setcmykcolor /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /K { _cs astore pop /_sc { _lp /stroke ne { _os setoverprint _cs aload pop setcmykcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /Xa { _?cmyk { 3 npop k }{ setrgbfill 4 npop } ifelse } def /XA { _?cmyk { 3 npop K }{ setrgbstroke 4 npop } ifelse } def /Xs { /_gf exch ddef 5 npop /_fc { _lp /fill ne { _of setoverprint _gf setAIseparationgray /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /XS { /_gs exch ddef 5 npop /_sc { _lp /stroke ne { _os setoverprint _gs setAIseparationgray /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /Xx { exch /_gf exch ddef 0 eq { findcmykcustomcolor }{ _?cmyk {true}{/findrgbcustomcolor where{pop false}{true}ifelse}ifelse { 4 1 roll 3 npop findcmykcustomcolor }{ 8 -4 roll 4 npop findrgbcustomcolor } ifelse } ifelse /_if exch ddef /_fc { _lp /fill ne { _of setoverprint _if _gf 1 exch sub setcustomcolor /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /XX { exch /_gs exch ddef 0 eq { findcmykcustomcolor }{ _?cmyk {true}{/findrgbcustomcolor where{pop false}{true}ifelse}ifelse { 4 1 roll 3 npop findcmykcustomcolor }{ 8 -4 roll 4 npop findrgbcustomcolor } ifelse } ifelse /_is exch ddef /_sc { _lp /stroke ne { _os setoverprint _is _gs 1 exch sub setcustomcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /x { /_gf exch ddef findcmykcustomcolor /_if exch ddef /_fc { _lp /fill ne { _of setoverprint _if _gf 1 exch sub setcustomcolor /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /X { /_gs exch ddef findcmykcustomcolor /_is exch ddef /_sc { _lp /stroke ne { _os setoverprint _is _gs 1 exch sub setcustomcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /XK { 3 -1 roll pop 0 eq { 1 exch sub 3 {dup 3 1 roll mul 5 1 roll} repeat mul 4 1 roll K } { 1 exch sub 4 1 roll 3 {1 exch sub 3 index mul 1 exch sub 3 1 roll} repeat 4 -1 roll pop XA } ifelse } def /Xk { 3 -1 roll pop 0 eq { 1 exch sub 3 {dup 3 1 roll mul 5 1 roll} repeat mul 4 1 roll k } { 1 exch sub 4 1 roll 3 {1 exch sub 3 index mul 1 exch sub 3 1 roll} repeat 4 -1 roll pop Xa } ifelse } def /A { pop } def /annotatepage { userdict /annotatepage 2 copy known {get exec} {pop pop} ifelse } def /XT { pop pop } def /Xt { pop } def /discard { save /discardSave exch store discardDict begin /endString exch store gt38? { 2 add } if load stopped pop end discardSave restore } bind def userdict /discardDict 7 dict dup begin put /pre38Initialize { /endStringLength endString length store /newBuff buffer 0 endStringLength getinterval store /newBuffButFirst newBuff 1 endStringLength 1 sub getinterval store /newBuffLast newBuff endStringLength 1 sub 1 getinterval store } def /shiftBuffer { newBuff 0 newBuffButFirst putinterval newBuffLast 0 currentfile read not { stop } if put } def 0 { pre38Initialize mark currentfile newBuff readstring exch pop { { newBuff endString eq { cleartomark stop } if shiftBuffer } loop } { stop } ifelse } def 1 { pre38Initialize /beginString exch store mark currentfile newBuff readstring exch pop { { newBuff beginString eq { /layerCount dup load 1 add store } { newBuff endString eq { /layerCount dup load 1 sub store layerCount 0 eq { cleartomark stop } if } if } ifelse shiftBuffer } loop } if } def 2 { mark { currentfile buffer {readline} stopped { % assume error was due to overfilling the buffer }{ not { stop } if endString eq { cleartomark stop } if }ifelse } loop } def 3 { /beginString exch store /layerCnt 1 store mark { currentfile buffer {readline} stopped { % assume error was due to overfilling the buffer }{ not { stop } if dup beginString eq { pop /layerCnt dup load 1 add store } { endString eq { layerCnt 1 eq { cleartomark stop } { /layerCnt dup load 1 sub store } ifelse } if } ifelse }ifelse } loop } def end userdict /clipRenderOff 15 dict dup begin put { /n /N /s /S /f /F /b /B } { { _doClip 1 eq { /_doClip 0 ddef _eo {eoclip} {clip} ifelse } if newpath } def } forall /Tr /pop load def /Bb {} def /BB /pop load def /Bg {12 npop} def /Bm {6 npop} def /Bc /Bm load def /Bh {4 npop} def end /Lb { 6 npop 7 2 roll 5 npop 0 eq { 0 eq { (%AI5_BeginLayer) 1 (%AI5_EndLayer--) discard } { /clipForward? true def /Tx /pop load def /Tj /pop load def currentdict end clipRenderOff begin begin } ifelse } { 0 eq { save /discardSave exch store } if } ifelse } bind def /LB { discardSave dup null ne { restore } { pop clipForward? { currentdict end end begin /clipForward? false ddef } if } ifelse } bind def /Pb { pop pop 0 (%AI5_EndPalette) discard } bind def /Np { 0 (%AI5_End_NonPrinting--) discard } bind def /Ln /pop load def /Ap /pop load def /Ar { 72 exch div 0 dtransform dup mul exch dup mul add sqrt dup 1 lt { pop 1 } if setflat } def /Mb { q } def /Md { } def /MB { Q } def /nc 4 dict def nc begin /setgray { pop } bind def /setcmykcolor { 4 npop } bind def /setrgbcolor { 3 npop } bind def /setcustomcolor { 2 npop } bind def currentdict readonly pop end /XP { 4 npop } bind def /XD { pop } bind def end setpacking %%EndResource %%BeginResource: procset Adobe_cshow 2.0 8 %%Title: (Writing System Operators) %%Version: 2.0 8 %%CreationDate: (1/23/89) () %%Copyright: ((C) 1992-1996 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_cshow 14 dict dup begin put /initialize { Adobe_cshow begin Adobe_cshow { dup xcheck { bind } if pop pop } forall end Adobe_cshow begin } def /terminate { currentdict Adobe_cshow eq { end } if } def /cforall { /_lobyte 0 ddef /_hibyte 0 ddef /_cproc exch ddef /_cscript currentfont /FontScript known { currentfont /FontScript get } { -1 } ifelse ddef { /_lobyte exch ddef _hibyte 0 eq _cscript 1 eq _lobyte 129 ge _lobyte 159 le and _lobyte 224 ge _lobyte 252 le and or and _cscript 2 eq _lobyte 161 ge _lobyte 254 le and and _cscript 3 eq _lobyte 161 ge _lobyte 254 le and and _cscript 25 eq _lobyte 161 ge _lobyte 254 le and and _cscript -1 eq or or or or and { /_hibyte _lobyte ddef } { _hibyte 256 mul _lobyte add _cproc /_hibyte 0 ddef } ifelse } forall } def /cstring { dup 256 lt { (s) dup 0 4 3 roll put } { dup 256 idiv exch 256 mod (hl) dup dup 0 6 5 roll put 1 4 3 roll put } ifelse } def /clength { 0 exch { 256 lt { 1 } { 2 } ifelse add } cforall } def /hawidthshow { { dup cstring show _hvax _hvay rmoveto _hvwb eq { _hvcx _hvcy rmoveto } if } cforall } def /vawidthshow { { dup 255 le _charorientation 1 eq and { -90 rotate 0 _fontRotateAdjust rmoveto cstring _hvcx _hvcy _hvwb _hvax _hvay 6 -1 roll awidthshow 0 _fontRotateAdjust neg rmoveto 90 rotate } { currentpoint _fontHeight sub exch _hvay sub exch _hvax sub 2 index _hvwb eq { exch _hvcy sub exch _hvcx sub } if 3 2 roll cstring dup stringwidth pop 2 div neg _fontAscent neg rmoveto show moveto } ifelse } cforall } def /hvawidthshow { 6 1 roll /_hvay exch ddef /_hvax exch ddef /_hvwb exch ddef /_hvcy exch ddef /_hvcx exch ddef _lineorientation 0 eq { hawidthshow } { vawidthshow } ifelse } def /hvwidthshow { 0 0 3 -1 roll hvawidthshow } def /hvashow { 0 0 0 6 -3 roll hvawidthshow } def /hvshow { 0 0 0 0 0 6 -1 roll hvawidthshow } def currentdict readonly pop end setpacking %%EndResource %%BeginResource: procset Adobe_shading_AI8 1.0 0 %%Title: (Adobe Illustrator 8 Shading Procset) %%Version: 1.0 0 %%CreationDate: (12/17/97) () %%Copyright: ((C) 1987-1997 Adobe Systems Incorporated All Rights Reserved) userdict /defaultpacking currentpacking put true setpacking userdict /Adobe_shading_AI8 10 dict dup begin put /initialize { Adobe_shading_AI8 begin Adobe_shading_AI8 bdprocs Mesh /initialize get exec } def /terminate { currentdict Adobe_shading_AI8 eq { end } if } def /bdprocs { { dup xcheck 1 index type /arraytype eq and { bind } if pop pop } forall } def /X! {pop} def /X# {pop pop} def /Mesh 40 dict def Mesh begin /initialize { Mesh bdprocs Mesh begin /emulate? /AI8MeshEmulation where { pop AI8MeshEmulation }{ systemdict /shfill known not } ifelse def end } def /bd { shadingdict begin } def /paint { emulate? { end }{ /_lp /none ddef _fc /_lp /none ddef /AIColorSpace AIColorSpace tocolorspace store /ColorSpace AIColorSpace topsspace store version_ge_3010.106 not systemdict /setsmoothness known and { 0.0001 setsmoothness } if composite? { /DataSource getdatasrc def Matrix concat currentdict end shfill }{ AIColorSpace makesmarks AIPlateList markingplate and not isoverprint and { end }{ /ColorSpace /DeviceGray store /Decode [0 1 0 1 0 1] store /DataSource getplatesrc def Matrix concat currentdict end shfill } ifelse } ifelse } ifelse } def /shadingdict 12 dict def shadingdict begin /ShadingType 6 def /BitsPerCoordinate 16 def /BitsPerComponent 8 def /BitsPerFlag 8 def end /datafile null def /databuf 256 string def /dataptr 0 def /srcspace null def /srcchannels 0 def /dstchannels 0 def /dstplate 0 def /srctodstcolor null def /getplatesrc { /srcspace AIColorSpace store /srcchannels AIColorSpace getnchannels store /dstchannels 1 store /dstplate getplateindex store /srctodstcolor srcspace makesmarks { dstplate 4 eq { {1 exch sub} }{ {srcspace tocmyk 3 dstplate sub index 1 exch sub 5 1 roll 4 {pop} repeat} } ifelse }{ {srcchannels {pop} repeat 1} } ifelse store /datafile getdatasrc store /rdpatch168 load DataLength () /SubFileDecode filter } def /getdatasrc { /rdcmntline load /ASCII85Decode filter } def /rdpatch168 { /dataptr 0 store 49 rdcount 4 { dup {pop srcchannels getint8} if dup {pop srctodstcolor dstchannels putint8 true} if } repeat {databuf 0 dataptr getinterval}{()} ifelse } def /rdpatch3216 { /dataptr 0 store 97 rdcount 4 { dup {pop srcchannels getint16} if dup {pop srctodstcolor dstchannels putint16 true} if } repeat {databuf 0 dataptr getinterval}{()} ifelse } def /rdcount { dup 0 gt { datafile databuf dataptr 4 -1 roll getinterval readstring exch length dataptr add /dataptr exch store }{ true } ifelse } def /getint8 { mark true 3 -1 roll { dup {pop datafile read} if dup {pop 255 div true} if } repeat { counttomark 1 add -1 roll pop true }{ cleartomark false } ifelse } def /putint8 { dup dataptr add /dataptr exch store dataptr exch { 1 sub exch 255 mul cvi databuf 2 index 3 -1 roll put } repeat pop } def /getint16 { mark true 3 -1 roll { dup {pop datafile read} if dup {pop 256 mul datafile read} if dup {pop add 65535 div true} if } repeat { counttomark 1 add -1 roll pop true }{ cleartomark false } ifelse } def /putint16 { dup 2 mul dataptr add /dataptr exch store dataptr exch { 2 sub exch 65535 mul cvi dup 256 idiv databuf 3 index 3 -1 roll put 256 mod databuf 2 index 1 add 3 -1 roll put } repeat pop } def /srcbuf 256 string def /rdcmntline { currentfile srcbuf readline pop (%) anchorsearch {pop} if } def /getplateindex { 0 [cyan? magenta? yellow? black? customColor?] {{exit} if 1 add} forall } def /aicsarray 4 array def /aicsaltvals 4 array def /aicsaltcolr aicsaltvals def /tocolorspace { dup type /arraytype eq { mark exch aload pop aicsarray 0 3 -1 roll put aicsarray 1 3 -1 roll put dup aicsarray 2 3 -1 roll put gettintxform aicsarray 3 3 -1 roll put counttomark aicsaltvals 0 3 -1 roll getinterval /aicsaltcolr exch store aicsaltcolr astore pop pop aicsarray } if } def /subtintxform {aicsaltcolr {1 index mul exch} forall pop} def /addtintxform {aicsaltcolr {1 sub 1 index mul 1 add exch} forall pop} def /gettintxform { /DeviceRGB eq {/addtintxform}{/subtintxform} ifelse load } def /getnchannels { dup type /arraytype eq {0 get} if colorspacedict exch get begin Channels end } def /makesmarks { composite? { pop true }{ dup dup type /arraytype eq {0 get} if colorspacedict exch get begin MarksPlate end } ifelse } def /markingplate { composite? { pop true }{ dup type /arraytype eq { dup length getplateindex gt {getplateindex get}{pop false} ifelse } if } ifelse } def /tocmyk { dup dup type /arraytype eq {0 get} if colorspacedict exch get begin ToCMYK end } def /topsspace { dup dup type /arraytype eq {0 get} if colorspacedict exch get begin ToPSSpace end } def /colorspacedict 5 dict dup begin /DeviceGray 4 dict dup begin /Channels 1 def /MarksPlate {pop black?} def /ToCMYK {pop 1 exch sub 0 0 0 4 -1 roll} def /ToPSSpace {} def end def /DeviceRGB 4 dict dup begin /Channels 3 def /MarksPlate {pop isCMYKSep?} def /ToCMYK {pop _rgbtocmyk} def /ToPSSpace {} def end def /DeviceCMYK 4 dict dup begin /Channels 4 def /MarksPlate {pop isCMYKSep?} def /ToCMYK {pop} def /ToPSSpace {} def end def /Separation 4 dict dup begin /Channels 1 def /MarksPlate { /findcmykcustomcolor where { pop dup 1 exch ToCMYK 5 -1 roll 1 get findcmykcustomcolor 1 setcustomcolor systemdict /currentgray get exec 1 ne }{ pop false } ifelse } def /ToCMYK { dup 2 get mark exch 4 2 roll 3 get exec counttomark -1 roll tocmyk 5 -1 roll pop } def /ToPSSpace {} def end def /Process 4 dict dup begin /Channels 1 def /MarksPlate { isCMYKSep? { 1 exch ToCMYK 4 array astore getplateindex get 0 ne }{ pop false } ifelse } def /ToCMYK { dup 2 get mark exch 4 2 roll 3 get exec counttomark -1 roll tocmyk 5 -1 roll pop } def /ToPSSpace { 4 array copy dup 0 /Separation put } def end def end def /isoverprint { /currentoverprint where {pop currentoverprint}{_of} ifelse } def /version_ge_3010.106 { version {cvr} stopped { pop false }{ 3010.106 ge } ifelse } def end end defaultpacking setpacking %%EndResource %%EndProlog %%BeginSetup userdict /_useSmoothShade false put userdict /_aicmykps true put userdict /_forceToCMYK true put Adobe_level2_AI5 /initialize get exec Adobe_cshow /initialize get exec Adobe_Illustrator_AI5_vars Adobe_Illustrator_AI5 Adobe_typography_AI5 /initialize get exec Adobe_ColorImage_AI6 /initialize get exec Adobe_shading_AI8 /initialize get exec Adobe_Illustrator_AI5 /initialize get exec %AI3_BeginRider currentpacking true setpacking %%BeginFont: Device %!PS-AdobeFont-1.0: Device 001.000 %%CreationDate: 3/28/94 at 10:55:02 PM %%VMusage: 1024 52339 % Generated by Fontographer 4.0.2 % ©1994 InFonts. 619-234-9400. Created by Gary Hustwit % ADL: 800 200 0 %%EndComments FontDirectory/Device known{/Device findfont dup/UniqueID known{dup /UniqueID get 4115447 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 20 dict begin /FontInfo 16 dict dup begin /version (001.000) readonly def /FullName (Device) readonly def /FamilyName (Device) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -133 def /UnderlineThickness 20 def /Notice (©1994 InFonts. 619-234-9400. Created by Gary Hustwit) readonly def /em 1000 def /ascent 800 def /descent 200 def end readonly def /FontName /Device def /Encoding 256 array dup 0/NUL put dup 1/Eth put dup 2/eth put dup 3/Lslash put dup 4/lslash put dup 5/Scaron put dup 6/scaron put dup 7/Yacute put dup 8/yacute put dup 9/HT put dup 10/LF put dup 11/Thorn put dup 12/thorn put dup 13/CR put dup 14/Zcaron put dup 15/zcaron put dup 16/DLE put dup 17/DC1 put dup 18/DC2 put dup 19/DC3 put dup 20/DC4 put dup 21/onehalf put dup 22/onequarter put dup 23/onesuperior put dup 24/threequarters put dup 25/threesuperior put dup 26/twosuperior put dup 27/brokenbar put dup 28/minus put dup 29/multiply put dup 30/RS put dup 31/US put dup 32/space put dup 33/exclam put dup 34/quotedbl put dup 35/numbersign put dup 36/dollar put dup 37/percent put dup 38/ampersand put dup 39/quotesingle put dup 40/parenleft put dup 41/parenright put dup 42/asterisk put dup 43/plus put dup 44/comma put dup 45/hyphen put dup 46/period put dup 47/slash put dup 48/zero put dup 49/one put dup 50/two put dup 51/three put dup 52/four put dup 53/five put dup 54/six put dup 55/seven put dup 56/eight put dup 57/nine put dup 58/colon put dup 59/semicolon put dup 60/less put dup 61/equal put dup 62/greater put dup 63/question put dup 64/at put dup 65/A put dup 66/B put dup 67/C put dup 68/D put dup 69/E put dup 70/F put dup 71/G put dup 72/H put dup 73/I put dup 74/J put dup 75/K put dup 76/L put dup 77/M put dup 78/N put dup 79/O put dup 80/P put dup 81/Q put dup 82/R put dup 83/S put dup 84/T put dup 85/U put dup 86/V put dup 87/W put dup 88/X put dup 89/Y put dup 90/Z put dup 91/bracketleft put dup 92/backslash put dup 93/bracketright put dup 94/asciicircum put dup 95/underscore put dup 96/grave put dup 97/a put dup 98/b put dup 99/c put dup 100/d put dup 101/e put dup 102/f put dup 103/g put dup 104/h put dup 105/i put dup 106/j put dup 107/k put dup 108/l put dup 109/m put dup 110/n put dup 111/o put dup 112/p put dup 113/q put dup 114/r put dup 115/s put dup 116/t put dup 117/u put dup 118/v put dup 119/w put dup 120/x put dup 121/y put dup 122/z put dup 123/braceleft put dup 124/bar put dup 125/braceright put dup 126/asciitilde put dup 127/DEL put dup 128/Adieresis put dup 129/Aring put dup 130/Ccedilla put dup 131/Eacute put dup 132/Ntilde put dup 133/Odieresis put dup 134/Udieresis put dup 135/aacute put dup 136/agrave put dup 137/acircumflex put dup 138/adieresis put dup 139/atilde put dup 140/aring put dup 141/ccedilla put dup 142/eacute put dup 143/egrave put dup 144/ecircumflex put dup 145/edieresis put dup 146/iacute put dup 147/igrave put dup 148/icircumflex put dup 149/idieresis put dup 150/ntilde put dup 151/oacute put dup 152/ograve put dup 153/ocircumflex put dup 154/odieresis put dup 155/otilde put dup 156/uacute put dup 157/ugrave put dup 158/ucircumflex put dup 159/udieresis put dup 160/dagger put dup 161/degree put dup 162/cent put dup 163/sterling put dup 164/section put dup 165/bullet put dup 166/paragraph put dup 167/germandbls put dup 168/registered put dup 169/copyright put dup 170/trademark put dup 171/acute put dup 172/dieresis put dup 173/notequal put dup 174/AE put dup 175/Oslash put dup 176/infinity put dup 177/plusminus put dup 178/lessequal put dup 179/greaterequal put dup 180/yen put dup 181/mu put dup 182/partialdiff put dup 183/summation put dup 184/product put dup 185/pi put dup 186/integral put dup 187/ordfeminine put dup 188/ordmasculine put dup 189/Omega put dup 190/ae put dup 191/oslash put dup 192/questiondown put dup 193/exclamdown put dup 194/logicalnot put dup 195/radical put dup 196/florin put dup 197/approxequal put dup 198/Delta put dup 199/guillemotleft put dup 200/guillemotright put dup 201/ellipsis put dup 202/nbspace put dup 203/Agrave put dup 204/Atilde put dup 205/Otilde put dup 206/OE put dup 207/oe put dup 208/endash put dup 209/emdash put dup 210/quotedblleft put dup 211/quotedblright put dup 212/quoteleft put dup 213/quoteright put dup 214/divide put dup 215/lozenge put dup 216/ydieresis put dup 217/Ydieresis put dup 218/fraction put dup 219/currency put dup 220/guilsinglleft put dup 221/guilsinglright put dup 222/fi put dup 223/fl put dup 224/daggerdbl put dup 225/periodcentered put dup 226/quotesinglbase put dup 227/quotedblbase put dup 228/perthousand put dup 229/Acircumflex put dup 230/Ecircumflex put dup 231/Aacute put dup 232/Edieresis put dup 233/Egrave put dup 234/Iacute put dup 235/Icircumflex put dup 236/Idieresis put dup 237/Igrave put dup 238/Oacute put dup 239/Ocircumflex put dup 240/apple put dup 241/Ograve put dup 242/Uacute put dup 243/Ucircumflex put dup 244/Ugrave put dup 245/dotlessi put dup 246/circumflex put dup 247/tilde put dup 248/macron put dup 249/breve put dup 250/dotaccent put dup 251/ring put dup 252/cedilla put dup 253/hungarumlaut put dup 254/ogonek put dup 255/caron put readonly def /PaintType 0 def /FontType 1 def /StrokeWidth 0 def /FontMatrix[0.001 0 0 0.001 0 0]readonly def /UniqueID 4115447 def /FontBBox{12 -148 648 974}readonly def currentdict end currentfile eexec d8061d93a824652cab7761a8dac65b57ec3fe6381b068e57a586b08ef37fe40b49b7d7633b8ad558cfeda279bfa8db2693a95b593a4473e0e0f38e654ad86ce1231549719ea44878ff49585a89f37ddb79b56f99b7d19a6f1acf5bae20ca0c10d8ed181b136c268f5815bb0b476c700d50e8d29a6c215ecd2f8dc20a8607af 2d7ea45a72aa45d6134609a1958b1c5eb3371c235e02c89fc6c20f6d9d89e7de177924fa6330368f5fe19f98a087d7eca80136d901279d0a430b7318a2c7cd321fae1e0a6d7b61e387f08c3ef3c1af63d5b419648455e43086bc0f48779a66c5282b6305c0ba8613d66f3fb7dcbf4f6993d06a8341171e0b6716dec273b955 3282dbdf7725e2adbfeecc4cb50c0bc17354017a7ed420764d36644dc641e5ad23b874d1afce9e0d21c8a51de06eb32f7596def184be868771c0b9c40f9f473a95b361a8f9440635cbfbdc756e9ab670bb141d723e2d00b774782034fc49c519e7c63b4e3c831b0b3c7940a6b493ed4d7b2f633f0e953d09d843ba3fd0a6c4 1820e5ca93a99ded985442f057bf442caf1ffbdbbf70cf5788351bd1445566488a9beb9419fa93b418dfbee8ca9752a50f79165b62281a7a17ed89c099d068ba53d667d632f5cebcd874b18d88b90f0254fc7f8567a15a50b4a183b123a054cebc9ea1a7ce89bd58774ff507d6eb0e11a447f7527679ff9665257d5f9a7518 be658907cdad9d68c196bc411b35395d66cc9ef105609942dca7a1833b182aa820c6490eba6c87a1acc52a7391465235c249598578cdfdd7bf1219c8ea8496efec282c08b54127cb1675aced783aca8f6e2520857d1692c18f6a60881693c0e3811089aff3e70ab7e72de2b1f4ad0e3a664dfd0858970ddbeba4e8ab877322 26616c2f7dabd2421d5efcd3666728fc69fcaebf926af2c3174aab7bdec6e0d8431449eb938d33b68992e6c36984e05fd2d74e837708b42d4899c0614df95303b2b33e22a3b0dc6883d6516e6804b2d5ba6ce94db57ee254b840490b82ee2a847fbc1e2957d3ffa335f026167c05562a79c4ca7467990ab22f816c47061417 cf969ca6f300a72c7d2e3aacc12dba2477170a4999e8624d924717f9cd83dab168eab77a1b41631f986be5587beee9ffa5c9ea5cac6cc6d3429d57a10149fe4d81a8a5a27e68f193765cc7c1db653647271ceb9ee3ab6be87989888457ce0861f3ecfb57abb2b33776cc54ca83c846ddfcb0d31065224b0735a85536e334ba 7cfe1f29ec0a17c3c0120bb269f115213d4e2cc9bba6a6188dcb51efe797904b6953943b7c823c9966437973cf0da10d500db5b19f492119b5f8dc1efb27c38666a1982ab013ca68654b6de603f315ba15c9056260935613fc97312d41a8f6c36e31e3df887a73065d555cb3fb914d03b0f6e0fa179e1330bddcf8461c400e ec3c58c0279ab5226cc73f3376db7ff98d3aac32808b595120873be783c9a56690a01dff3b5cf183490cb8200318bffac052eef361834649ea9430efefbd981dbb5aa7052f67fb96399fab7070195a8a85989b4565d136fc4ee2f5060a6d48823041f44bb3e27415f81538b2dfa16afcce8ad23e885d4bead26c16fbe97f14 40cc98ab1a5af166133fab2ed572f805b4084b21e4cd289bc2c93b44e01200d1b0611d704e814b856d48c6377128fa2f90e4dc173f97e5a677f44084b6dbc25014ab7ae1e8539511c2ad200cb4b9e1f60b3c82a22434a8bff68779166190883f9624580d26230e61d06a692b09101c1f60fab7672b5d6a168519f9061f1311 c662b6033166660875692c7cb400a45f49a9058d0eec60158000c1b3ff6cb6ada7e3cb0f549696060766d6c88417de185e8f92fd0b95b3e60a8d5d92d3eb3fa7ff4e0268ef612cd93e6b70f2fa393ebf3f15cb105696464ea23e7ee2c467539c3df167859fb8318cedd23cfbf8d8acb1cd7cf1d07e6023873d0f7d6236c412 79de21b2cfff6b2c22c5fb824880bb115bd80bdc923c6d0aec0d30ff65024fb9fd55b0eb0163055138b9f140dc7fc02a7206b3d48f240bdaed454e73798e57e898ede3c3c90cebf437a11d2587322a026889cecae0580f851c3b24f776ecc40454fa2a4a18d6a9f7acf0eb1ed77aa874666426892829b27806d58bfcbb2fe8 bfaa8ffbe9af08035a80e38fec7d365f7bbb0252c977b6067ca276c7f8eb1fedd4992730ac0bf1eb423e11f23110c40a05f2962a58e6f945caa0353668c1a748bc96ebbc31dcf33811139bb4a09bd798670ecd4bf27b69632f24c43a7e9932d23b3c5ac161b588e5510bd34aa9fca0effdb0d04648d0938f0604bee4053952 889b115efb5874087ea4d968898243af4f823470154a5ff87bd5b7ff15e503a202b7c1a6ea95972f6e41cb541e4d64b51cc9cde37dc8829d0dd5c5e15de63b23b275ab2a2dd8677909a97f2b7298a88f01934587e99dbab11efaedd8ffbcf7cc71dd15d6899c6b9b5d0c116ce2905164a99526068aa57b92e5288128a75759 9f51a287484491c727e258bc146e14e139ade61d957b2bccfdbf1d7251c9c6c11bb59ea4896c9ab6901a11454acc95098ec9b1072bc3043fbb0f532ba75aa47aa61e340f1cf1d679648c3b5d0eecef05212c571dcdee915e54fddeb48574433f25ec49b5e51aff9096dcc37f3ecc251e324ab189c0d9900873e4a25af639f9 9cd818f0bf3b2e7ccfc9eef7094b49ad6e912cdcce96189cb646369683084148de4c6a4f5e6e55a322164f063072ab7010367f3b0d7f544ad8072f54badd32cc5bf51e0f7203780041db263fe150af7300895f1fb7be300853c264a2777076fee6f9e56619a1b7d44154b95c3a3e0433ce02a1db6262f3d9f5438838ffb362 b963da4f4e438a1a01d74ff6ecc56bfc4cb4b1a135ab81431dc7c81ace913fbd056e5f2266ef565d4464c9ecab8094d638bfbe0a640f7f892a46572b5db1f618e6a71b727937a672c95e604a6bad1977a907616c8aa3af17ace4d9530d02a992314728455be5f207c13cf209499c748ce2f7c4bcc8756e9579bac1ce84eebb 02d9fe35ed80ac2a4323bbd15d91e2c214c4bdb0e1dc8101f349f0328c371754eb08f5508d3b6a14afde9181e85611ecb2de720c2bb332ee6b6eeb928a5e3cc5a1b7a0bc72116aba7cc9684c7d3bb96203ab60f550bdb279129576aba4b2657aae837efcb4e56a711c56d6ac6777bf68b91a4fdeda09f9ea528f532a45f291 258957255cca6ebd4534ede89c2bc397c91388ceb8655995b8ce792a4d617063645bcbe7a2770be9cda1a0161cd5f33e36a71ca94883a1067ea9c97571832a8892cfc6ac2c9fee7f115b306817f3d2f8eba2c52f9150503087bd7c6d118980418e0682767c287b23ac1474cb820d17b9991335c3ab932cecc7901c50daaa83 8aedd750d8f2655f2500151319600e3ec08d1ab3d4e529bcca3e87fcdff2fa0eb4903c23e7ca155e7dc021bdfd981581303ddcd133563ab65e99b93dffe49fc52a394e6650ae60df8bf615237b78aa426d3da8b8db58dbc54c38543771a0ed633d5ee39cfdcaeb824f266348c21d4e456cee8ded74af8d20e73186f1228258 7ecfa09ea725b674ba887e7efb22a5644abbeb890670f6263e3b9eb011f6940148f46c29b4145192521d8247a4c6066a02dd4d90353c170ab70163269e12972640b34efcd9298f86e9fe6b83ad0628ec8b803c32bf2c2a550f8e89c71d47f2a63c0792677373048be1c8729ac277545334e7b460958491daae755f6af3c06a 8b848ca70336e5b585908d93422f3da947090ffd9175c98b08e523fde5ccc9043acc4c9960af2ecef6aaebcd12ff4c9af27f0a5e3b3a772195c1bace42a568a535e30b5aab6729fa405de74d4a649af84d70e10ba0b69f76e0234c4fbcc5ec377d0ffb49c67208ef3f0aac2c477e726009fcd49bdb0387d134983d12f51df2 21057c51753a0ecdca14ae8c9f2eaf2b4ac7516d72d8ae78e950cbfb19aa676dfc03e3c923c4d8ce25e4a7c9cadfe5fbf9fadfa382da04cbb47829b988ed99f208d60f915f52a3564efd3462d68e54aebe58cb5678817415f2e00d698c1469bbabfbf6919d7ef821dfc497df4b8db1dd53c70906f8e518f3b7f34c8b26171b 590829a68bd7be76dab9db6239955c04942e2b261be108aaeeedbe77f2f4d05e4902ae99eba1cd4f482bd36f72fffc124e3c90ed48ade35a25e673841c149113ad0da2fe2bab1207bd002323509ba5d29ae00285e8909dfbe7ea3bcc73998346dde576a41ac98939c174a973b41e1a0666dd247ebd5e00a4e408d39503f490 de243866ea7893643495cf9bf551bca3200baeac4e0f1955adb174416b29900bdc2def860e7ab7bd013de0dcd8679e183aa2e7693a86659caae141afe8ec7f357e9713b0e7d07de7e38e2259e558643413ed046fa3aeb75fb7fabcbcc3dd89ea664f5e5e811041a31384f420656c62f5128ceb1289cb807d0cc41359d61cda 741f98f967e29eae00fd8dc3741869e37d84734817f8d8efe8289ddcac1cf7453a5f847817f1904a3d12c06c6ec290df8136fbc0234f4e3408d1470c3ecbe6e5f5667974b01eb6ee6e59dd577375bf21696bfa4d5e4a3941a326187dd3ac06f6612bc53dc31bd7199f13a4fc3bc565b7aeb3ab7715c6d54441e8a88ba29ca9 4c1afba6770d72d0e20710c4bd382b1ffe3d47a6c54be048d93d7da86f8f385eb30f79d6821087ac542a1da642a1fca38c7236eb55471a55f85d95e3325c145623d017167eca2909721302bfc6a6023967c6c3513c2c69ccbaf875801138640fc1f47fe28b9d8bcdb948135e74050d60db4b3b583dbf2c6a627d1b46d39ca6 88b8413c95d0935ff58d8b5ced048fa04a5890dc4e1e257c0ab5a8200532ea3a11611c170d7834b23ded19d0f6438906b7a7d6ca1ec1b3216a5e651e270583970b96da93617b82932dabe11feaf993a93ead759dfb34f4cb9bda39c2b5910808a8ab41168c2773a0fbbcb896a85913ddbc41446d1a2fa208df5ff3660e2095 fe17138d0b735eca1aebeb34fe0311c4df5ff111f6f5d7e2be085afc3f231f2cabd5a4e7b7fe5996e7ee2fc56ec6a4b593b400c3707ec7d954807fc1f8013174286daf55d9d03c0b1a6e6de0af0067b4f42b13b767777398f6fa494ab448c08d603238434c8b2de9c140e890b9da0cb80529c58eaccb50eb7a560eaa32c9d9 e179b39fb7d8b18b523966763d2cb6bbc0273db6ad7a29b31fdb9ced9943d9f2c3348d3a5fb22939f84609af0cbd5078bfce54b52c45cdfffafba11f221bb43b31848dee06579182715fa0aaee8492ba378f03afcee8823e00c06a4012ababe9a78a3a3288ace313061084dde37b21d34cdcd02ea1117d3acfa3245eccf86c 6315e71e446687e6d9517910c440c838aafba25779151e4a64fa43f39abec747260a6ede4ae9b8a38c94ea57ee4ad5734d4d8a32d3b087c1331bed493f5482552252aeb7de7c0d9adb11882b96f074ff1b41f558987af3f081d64704721d3c0219f9e762f74c65d7420067527328b1e2913b772e82330d22ac35b7677c96ee 8eaed8b99f2d7b8c28a42b3a7d22e79a2c3818c8bedfb3e3ef42215c21e338cb8cbedc151ba547f7c6592bf7e13cfb8081ff8fcdc1e54fcb6708f3e28374fb366953157eeee486f706253ba18af4623f38c1a74cd46dc01fa49a12dff6a6fe59ef589c2c0b55b7c16e35fa8184b1aab386ae793bea13fa656a8fdfbf712831 5c4806d00cd2df4afb6a5e84b237b5a68415479531a47afbd5a00bc1ccd5fd1f4f9c95a426a553ef445615de74bc01dcd1226971233099ee75d0ee5cb06321e0c96aafde7ca90b8153d0c81758238af7c55402116abdb470ef76e025125bbe6d91ffbe99263494c65c59eb9cba650c957bee2250e79757eee857f07bea6023 569590e1348049bf932e0422edfc51751310368da04e96ce80729eacb63fa140fa83e759655153a590fd44840abc6ec60aef47489fecd48fa953103a5f642aee55e28cab055da0d15e3d750e93e08cbe9d5277e61fd55312f518c293c1cf98fc9eea0d2f6d7b0c26df869b36bc869664bef19b6d2577106d7dc9b15a69bdc1 d0b2263926b249bcbbd392c7b55e59aa9066022733ee075a7ac0d407c56659660bbf4d051c793fc4ae5f3984fc8bad99d5d8aa6141501960c52efb0a75219c934e4e989f23844fc319bade151406a45afe6a34450367bc34cce43fb8f18e20a3451d999548121cc552abf976489c60ce14b164321285e67c76ffe46211e557 109742bd3861b74fbc28a26e16cc367f83eb08f3399d01114b78c615757f768934edf990fdbcbe160ba0be780723dd5558ab3274c09e76b4086efaffa891826e5c94c4355aec9caf4eec8b557b28163b809180a7754ed0edc212a4e6e7aa42cfd842202c320341889709b351309fe55e2d96c3b433ca7e70a4c68cdd424b88 0f9c9379b41075bfa77f72808718a26a509f708427be64c8c9d82f5eb45f64079ef03613a19e6ad4a231d1e5dce672cc69a8ccec7773bd07c5d29a78c17797831ff7111f73a47fc637f32eed55d42c869eda61049308d43a1854ce98a2ba7b2819911beaa1b375a52cf825364681f7b9d0aa55e377fd7792db37c59b3193e7 b7203b5764616b5efe8bb2f63c248118fe52aaf104f2a0554dbc013ff95753f7a64da8d877f265870c0ec98e9eab430286d0b8616c5e1731d32ffd85888b904b1861f2ba9e74dc3f2a4f3faa8f6425ff88aa2f1498a98be44748d6100f20c704323ec200a47f3de3a850097410674ebc0de4c0bbd6c781dfacf665c18f327e f6166d933838aec0583fa35fd3321db29f27af50b4d158e5d9a875b45286c19c675d92d56936c603c5cc533da08683e13bd35e2a1a02690cf4b0c9e25d2357fda47dec700321e4e2b9a1afe0b9210736b970cdb25bb9b4802d06697892aad68e825b9d2efe0be08593279d78271c42f2f7ec281c009c6cf34f2b71e8adb0b7 39431882a521cff5001ca81a1fce7f46b87b6a7e793e4327a244f3ef16019febd705c463979b60ee6ea6f87c2c9202c060bf5521ed2b61a729697fadb707fd2eca5b5bb74580228a7cac3579a0707175bf10e35b6f5a4f72497390564d2c0a9e30614bfd1982cd528faf0081ddf57e2311315cd5b21de66f5eb01582c6c9d5 7c4bc18687638c120c9dfe0fa4565f7f4ff2facdbc455ead34703595dec11b94c866791ec7594471a2addb3fe7e3a4ff3baffa0e4793e2fc6b6d2a991baa3d2277ae71d3e200c9e66f9acc298793021e0146019a0be4f7f393d6530bc397b71b6a4b6bd57d25deb41dd8748b6a49bf110615acafe1924be715616af387267c 3032c9dc819206d67bf16c005b8406697e31dcc27cb978896c86d151043a6284bcdbd3491adfaed4d752ab0545040722dc822ebeb86aabc704547026c5f7ed488a96e40c80fd1318a12d1f08807ccdffc4ca2f28c7a6e4610d31879be015f6e5dc654e13ac2e6c978a3e8caefa23b84ea909f82af078f9bdb6efb13f614107 7a70a9cbb32f3c44858aada1fc329e53fed7b91dfc087e9e99ead0add11e1f6f1b64f8c01f63f0f66d8b0e72532131fa0e5a8491d9104a8e469165466b51381ad969ba3f40180d0d248b2b12d3e7400dcf7f6a79a773e237318ce8da78cca61f8d47e916f87e5c796be484cc75ca49e111e8669516de77ddb5f11e33f60205 5654b1bca7cade5774593cc239cd4fcb3d5e4f3a92992dbaeb54823260f6b39a9b5ccc95dcc870f5b06ddebd1d5efd8793d69d30abac25586345ff9c770a92e65a04105b21198e72fff5bb2701511cac912935a3ae9633a4fcf046db1ccd4d95b5223d62a452ce58a5df0382f0caf9021490c540c4bdcbf4e93ce337781069 82268503d6238c5c738884f95bdd5ff4a21c0c09afc08d520dd5811066a94707911fb57ee495284aafd51f747924b1bc7dbe035a81b5cf83b8307830e760271dc5f23e8892a55d8dcf43bdc5fbe96b1107f6059318260a090882912cb9bb134d19bad158f23d9d7524d75b0c4895a2c51d0fd8d727b6830bce8bf2a946206d 4bde47d871d2f2e0765768d751c3c176f142b7c935e9b56a9eb4629ebcca59b11fc4e8ee672e8dd7b86c32ca8b14ac3cfd38010f11b24bd8195861bf04af8406c846305993922fca7525e2d41a2155df3ce5e69d65b023fc516e122aeea9a60fddfa366671530867c9ea775560ede353f845f069a97f99bf0fd36a745aa244 efe7a6cdefd3223fa50b4c7202ff06cdd500957d22ef4ceb99f7209f47edbad226d803c59060522cb64d75d33a0a528234a5a08624295588ee5f43571b6eb3005ffd9f3c6aa25b47ccc54899f8d2c92e873eb8428cd87224253f7425d921a88e0274a5ecc536845f4109dcb58d549be8ecde36fc996a681142d9eaf8eeb6a1 860e88a98ef857f4b85d247cdb4c320f39a565b568b5fabbe86cfe097c6500ddcaa28216422c0b3f59d1c965cf0d75b487f1fd16a22815cacec8cac0f87e9eae79c0bfd4b60750dcd740bde980a11f4ad2499505a259f7619151fd5c0ae1eef55eac375251121f9651994c31534632458c92d3ef9549ba7556a8c65bf13d70 e20583b41c57a460ebcb92fb2f36c567763f1e40da89ac94c4b89aa148431e294854a85835e73a730cd6c53202b5065ddf04d784f8d4326b7adc1e9b2a4e0265fd236f6d186cfa6c93a469486bc341ce64b12fb2f4c2e8c981e208888b748d944231dc1fb5362db890ef1edfdc15420a10020d15fa3ba1acc41c3ed0a0e295 b366ffb47505aff24ee0ade40f070260c863515afbcd8a93637f2f7a82b7802c05a310b6b4c0da22a4c1e8ff47e739656282a57f97af84c04d645b5dba2d9a763fe2e18d7a92d00b4c95b314726889ff51543429de1d2d8a3819dfbe42cccda4466d20569e3d036f86428a1ed1b801fe287da0c91060e14b149dafba38ee6d fb2a790cdbeb4747b89d2afb44d86100a9f228a00f8019812d4d79bd400dd2643bf59475c882c83fa8837d8ddf5c602cda009303a7344576bd14db7cf1f42a9915e49586dd6216d86d53f644a245fbacabb985ce746169509ef0067a98528ab696b88814d791dac614373e7a14761e7c860bb86e7016ae11c3fd99aa935dbe e4773b2fa8317da780ee188914274b3cb4b2ab2590b0478abadba0f6db801be4488bae80e0bd16425d8a10f3975c5b0e4eaa3c17e30343aa04fcfb0d1bd3a5c6ad6ec33174ecfd9cc6ceaf1ddd0a0c2763be7ba3aa580ec4c0e4efe578fffd37dd044285ee207e728469a8f79d541945a70141851ab25530bb5a09be0e2d40 3b56e6a5152dc75a59d70afb83af949c13898b3ae3da49455c92b2ee0337fca9613d147c492df5ea23e9a72d3e003b374c409ecb50d8f5895df1f017c30e8095573ee46395195961a5addd97c2237c54d3086e430da34ee6e1ae85b32a98d7212a6e072ffe73e57d065e2497508c0899e3309945a8e0c48f6b908fe569911e f443a5a39f72a474536945731a0358a18aacb46df1c1e8b27857aa9dbff6322c7ee3555f657daa27e78aa1f57a67b2b3286ed4d5c50446e0c8116acfa2350633acf375471b0328708854e7d6e92265f3e74e0a16c6bbaa81544e9cca44c351a477b2202d64b47fa89bafb043b2b704c4848eb349cdbff9cf31ea28a813918c 117b259d343aa5f03a2bad1724bff9cc7dc9686eae637673438c20de1ec832eba488006c16b771a4be83c2880d378a73312a0ba07c246a72f03fb55214e205b59b2cf1826fa459c2f1d55a420ab9bdf1ce11f8fd7c659e3d43edcfeec64f591651ee7e7ca23c4b78f6f17362f6ab27701b8c84db6ce89c571603d2171cf5b7 3300357abb2920e5652bd859ee437581870eb729858f65e8356856956fe1dcf617de21f80cb69977f0aaa02260e306d672f5f9196c06b08a4126be7cbf431bea44e03a3ab86bfbd685099658369680a307313fa23e4ed89b02b4062fbd40fe42d270344a916530749c56ddc245183607b4a07d4f1ffb4599e8460ce525d6ab 19af4b561fa987401d2160cfc9e78ff4d211d84863e09d3f8c6f906c1c42c3dd8bdd0ecd709a5e90cbc4679d0ecedd20014694015f36a20eadfca4c818b0a2fc0353d4c576e7e94c308c08ed67236858bb88f180611dcf38cae8d14bdc3ad0f40a5f9695c11f584d4801390b885b544c3f3a5b07a6d3821724c09137260dde 72224f90f206921b38768da87d0df7721b7a5cde0735d7164a4cf429ce3584da362454c6e389c8c2073e49564b245aac532e0a3631e868a3ac174f7a62c0e8cd8e4b6932e7cecd5618ba937e637ba20ea131863012a5688315520270e866b85c0ef3a450a292f9fc8052766240f632263fee77f3538b5e1058787cb65295af 7e5eea99d41a84beadfdccff9f4fab6879ee0eb54654ac5cb345e830ef22a5bf9a00026e526086a27264d70e181aa2336e96e987d341ea74c7212048092af199b711cad5195e64ff60789ee873d301dc3fac7b681ed94aff52490ee6aeba217d5861a39a148dda37e2ccb876065c47818e49ae05272f6038b3a58f3f4824b9 5538d791c678305ebd5c5aaa346658bae0c2d3f4f0f1f04a2941a1fa7c3e14ff067e9ad1e1e95a72d267c6394353320c4b4d31ab1d090a0d53bdc3df6dfba09642adb22c18a5d66dba104bd9a6331efaa34853f299fc0e9d435fb251b48bfbc56acfb79bd032dbe2ab2303538bdddb3c8083ef4696b569b070de832afe8e99 d8869d408702e052001e5b39280136384653693b35ace3fc01c9f859f709d1078c17c75d32c9a00fb3db97c4d3ae4445507e238e5c0b7806d9c8492b9b843e3f0cc5e2cc5dd817e081c00d6d83378297f27c4131a29b9437323175bf5b9d3cf86e250578387df3e342f97e7cccafcd0bc229e22a9cf8fd48a3b28f82adff7b 65e654706d8d79fa6b0d4e6754651dc2235f37ba47984e6e26cb99f46056ab74da43b1cc76561fe82aa233263b05126e66cf6f4f6aa3c52c3c6bafac90494e266fc7f47212f164e041761211f73514363cef69d5e1fe3155d19260fa622e41431584bf71212f42cdb6ecc2bce920591e6a06abc72c70863a116877aec33aed 235f43f01bbb320ec12da7c95744f604544988ad2b68936db008c324e500b1e614c5035559957d3307d8d57028da029826e09a601d667ff635dac374e390e70b968511b5b859a029a3d80b22eba03bb4d4dda966139e927d62fa9869f6bc3b65d19fb81d1509a23bb396e6ec9df76555781ff2e595648c73a05133476f8339 e71c97b2e7478e15e11c553178dc901a5b5aedcfe928cbbf46db104402d1b0224893c67f3efed78acd7193fc4a960850b6c4c167594a528576d1ae64c0e88ea5b57bffd4e1bfb56cea85436ef0bbb8846076dcbd88be89727c6277bfa4502c121d6eafc514332daecf17f681a36d1860263f9e3bb24483f84451acdf849067 2f497e5c656dea475d9df57046c0ce4577e2f5f76ec273aacf56b12cd527db47bf88c7dec117b9500a3c4d1842a1b61fc7bd430de6d563526fca71b341fd97613802812b4c1b77ddced234619b459867b3201a9f1da37b8db636ad07c70968976e5e33df49d4bb2c74bb6d2c472f624032d47f1309d5139dfe6e6804987058 a227fc0adc716e6ceb2401b4158929e5634e8b329facdea8c8f6edf33d52c5ccce8db18bae293c19bce6a1caff9af9d3a1a4c9125735d97090e212427c5cd2462127b1756f9b2b1968517f9b06ecedfa1a890328a7a68554f727240e7828e9bb54b788fd49ccb0ab90386f1ceea196e588a6ad17155b25fcd5071a4cd4fc98 1a2ac8a930f85d9e70ccc6f5f2eef51c144e5f4c1523f5cc9de9027a6a96b14280ffbfa12bdf07ddae577b7b0559a500451ed1e254b05e29b7fbcb09a908ef2dc5054224ea7f9c91288d1f4c1bfdce151331e0a8841cb41296525e2d51ff2bc7ee6430b40f15c64f0ab35ba1917e35e0a2c9c1afddfd64049cd3b1544bc1f8 95cb3e653160b62c93046dba6c49bce6d0026f06cc771e462c9796c6657ccdf4c9db0d346e1574a5181e52493bd08c7196845359be3f837eeeb3ab445c348502da48d840b8887d239a51f84ef32cc9699d27f4f783ee311f8639dfa8a5ce0c33c518a45c5f6474a8d7765d25e0453f3f60f88bb40ed5e2dc2344160c171b6b 66d8894342502baf13f63532314bf2ed29576a7584df8e3d5a44eea8185fd3ec095e8bed72520b9334d1431d9f3004f17202b98b3409419b6f8747854a104a5f0afb9da9bc8c93bc4391e33cf99c3c8b9bdb3ccb251341c5979be14d8a9b1213219c2947e2604cab41f00a7226db4c1ae3d65739afdefd62ce3d268d854540 549fceb1c46a3d37fec17a3bd01631ebc63cfc36c576bd41118ff2524bc6361bb52799425c93f2dc275c1a988b2083c82a2cdb5d6aa311b135a38721e46e57e00e518a0f06e09622d86301727a3ee674aab7267fd680f2b4c0379d96818422e41634d568ff18538a4eb4aa309bc1bd174dd987047b817733424d4392ed9236 3dd395f517c2ba622ea25dda82738e9a942558bdf278f96508a6ef4c2a457e845667caa84173b11c46e8a8a4f9c33aaabe426295baebaae0eac62f8dbd68b71362d4076a503cfe9f95b26d744fc9a7186953cac74a4b5ebd605e702278a5c6f5b6311fd50a39625e63319d932cbc5353833822fec28824eed4a8793eda8d5c 081711ddeb87a5f915eb07189931ef1b015af1cf555c99208ca09d3c802b2f1593a23a8774410947c39c116697e4edeb29954fee933d2c46f1c2f61449e08a0df628f100bd986869b4812e259dc5ef37a59b56e938da476ca294a430f1fe1e836aed44fcdba589689e90dd6e1e215eff05e70c0df258056303238260b26797 48aa26a396d7bcf99a086e5ed03c1a48ea3fd63d61daf7c1c56faa45f824f011b594af1569f2c1ebf0fc4cf99c692442c0957fbe6561728774c0860debc7e265a98297f6bdab8d18b0938993777bf50ecd3ca6395074ea555fc3a925b8433bcd68ea6366c9bc148268f68dbd9c292d8c821a108c3a1b8a194e7f3e745d1428 7441c7e9c8895b15c6a9abbc42292bc373056079083360cb3481d749ef439e788303d500ac098dd88903f487ab6b198126675dcf021367d32e24680d58dbf551ec5c92acc019ac5e170705190dd7b89338514c3f102afce6409fd3ac4d95ad85b809f920579a2b6697d2424cd7a6324e2fcb6daa2a5f4c5e80970275567393 4a599e605aed017aba72d3b84390d7336c1c39f2199f732befcdb6532bc2bdfbc92ce17316e5519b53abce88d54f6877fd0a00bba4192197a89b61e6076d521ef6bacf588d19aed7cbdba39819c9a4019ab0641227eea491e5a0aee1eef458571ba706342fe0876d0419704118b18d1ee9e4e055c286c1fa59ca2fd375346a fb75570429922b44b376006e2a23c3228dff653e6ee6ae109c82655c18c02908efe8f447784e5719f3aef0ea4040774200ecb72e96f7752c3d89a7bac7b1da38452f820315b39441e0300944c657cded958620ed0178b0901e03e349bced5bb23ae9e4294deb84e5031116633483e5af73d30e221d1b9d0bc05d6a7507fd52 f6f6db80bcc9116adc6c34eb6e037d4bf40bf04f282005d8539bcc32ff7719a5256e0cc263724a645973a8be965cb20a5d87b53ee0ac408af6c89dc54f79f04ded7cde96a166c30bef69fb320ca5ceafbbdf8252ffb2c0ac82558f65bffb8022bc9c7c8f373e1cd7819a3375c29646557ac306b47f9ff2cb91e0679029110f a583655f8d29a7def1e84ae42480a4b79d23c9d7b1e000a913d26522ed86aa3497d93345139dd461ee93bad486fb47229ea75607c51206cc994e3efb187aafaadc9ec1a905eac775ea8debe6faabd7ff22b11e06fe8554576575b337065ac891761a25975b9b59284f842dbbb3b2c1a27016113a1c13bcb6e552d5204a1f41 a0775987910fee7eaf8cfadf31c537b85bb4853ba8a3fe6aa222f09233cf8d72f573b1651c90ca32aa7ba49185b8afd79c483e0a6241a89aa7dc18ba9d9ed6576b2e81e0168d57c496bcae44e9d07875a6f3c447c622d1d9004020acbe566047055435279a093cebd7c4bd6ed9a29721f1eec21c4ae24199876541d113f744 6219637f4477e6977287e704ef7edfa1bdde7fd4be8ff57439ea8f2146b0629d8e98a5a80c2b8763f7189bcbfdb3222b9003d92dcc07bb7f1215b27c1b5a9a6b3595eca046df1ca827400c216f2f6da33bbcd47300ba4c4bf6d5b61fa5172f0813868d7a684e1adc3740e4e22a9e430141d68db63d6c40b5b8b837a9a27e3b a41eb6cfdc48765ca00b5f88b5ca84f19dc5b7e481a9fdafa504a673f0871c5a44f2d44f726d6f042cfd5b76828bee85dfada1a721533771e995d24ac9bef9e40dec0c0d0ab444dfeb55cd83048eedef09501f1f0e3b7ceb5f96686d571eac8f5c710e551c350560a85b68931d3ec66bba5c3673e59ac0cef367f9bb5b63a2 98c1900e13569a540affc04c8a42768636c45469ca2d2173073e40a743d78cd8f58449efd6662978a3d58d73d05ecde6daad772894d9d2b27ceb04afae35f3a18854c61968cc052943109c2358b66a31aeeffae17b9112758796e41470498ccba8009bdb2e400d8177af4ab29e57c67e2a816a7a682e6f89ac9d4c0d3c5fcd c353523354221aa5f227d902a8fd6ea1ee63fc6df9cdadd1373d516c6d00a80d46472eee97d0393100db54a0034635d772766b1533a0b41186d87727a64c3e90e02d0a00deda7e91b72f752661a5e8da1ee320c97781f804b4fc9169a67ad3713eaf027e64dba1b4c1ac04ebb31b91b0b287e235f9ed9786e5b509d8b73b80 75f74c95c8e269af91c5d38e45486fcec38e00abdd2c82f241142331709d78d7ad32c0237ac3e04eb79d78962d9bd014e2c1a58803b17ef22f0e05e234253b665ec0a813ed61e93733414c065693b7f6d78ee298356ff8f7a275ed990fa6d2ed7e52e9a5465acbfdd07be9affd4b4731314b5e80d1564212863e5498ba1eaf 7508a899fc41ac1b33e7b20aec88de070c9a490d7a573f11bbc260ec929478cdd1348ee0a9356e16a22563222f89cc049828d3d07bfcd566f2e075915a7b709375ea963ae4a226d430200e227f8e7b602496fae39d595d9e34a642dc8c16efbb51f13e8f3026d4c4adbc7f6ff14321066e996f256a9cc9b6115a9ffa9aae77 e794ddfb7d5efd704c61adfab6588dd8e42b988e332757a4876eae9aac89e7f86b89f48ccae16adb137eb79a9289cf391a95dd4e73719ea2ccec34bcb59754b939b5a99d3077de748cb4df3b8b534dce94ac3b7a709a3ee13859d215ebfad213687f75a9988f23607b2dd603c2cd3e2af8d49d659bf1e7d214fd6b92db86cd af8878d0002e2a050009d9db2d4a0700728870d2d3165e7611d7eb20058f27fb7f7922db96a92b8573fdc8b6e0d1bb9e8df799621a1615bc5dfb089eb220fc4a8085efa031436c767a63731200728aff1c8047848108becb8e554e05f6140159a40b1073bede345010aeade337f2d502383fbd036a500bb5c1ddf42204f2b8 4b5c339bc5e269c1704bc1b95661d4b633540c50162f56661689cfcfcee775de2126d729a37c31bdc4fcc06c540ef8f6cc9ba978f85bf8270c1bbb9c2d49707c1695d4fa8381520b2511e40d890a50282376639e70b2145f1ba4738275951bd6e1427f9612c78260bdab1e2315d41c6f5ccb7ebcd9e9b6ab9be818a3485604 2369744103a0210c2ab48be9235c2344efb570e82e16ebe934790d6acfa8606db201ba275cd3592a0c2b7c627808a0f08e181af74e4dd0dcff9a54fc1af11688e3b550991700b3693dfdf834657ac3e4977f75cc120679b35e4b0d82359e57b4a6ad12b3199e6e54068bc65dee5760ca3a813df048bd8503348a660bc4550a 8f504649dfedb69031ea44343daeb2f994022cd2d70f828f355f0f35d5fd031408b6f0be5876da5e993c23e8d3118f2436408b99aee857a02824b2c66591f31bfd41e91fa3252739ac5359bfb1212fbb8a244b6d41354c42fdf0c3109e950ba4bc24124caaaeac7ba166b8c8c67198ece4dc222bfa6b866325e792d552a5e0 ede88df12921b03d1ef2fe0aa5201b294582ffd3f132739afcf97e2a1feb9dbf490173530dbd7155da05e86b3e1fcf1237ad6ddc2059633b6134bdaa312427327958fe100989d4043219275b63a00612dcf4e50cc5ab5c9d634906bab562e5303f2fca751eb973bd8cbe505db334f5952aac5bb4eed480196d3b8556226b98 6f2bd57a77fae30252e1c6de72cdaeefe3c23897dc796ece0bf11aa3cc72ee4c54481f426e2d4934dfbe34798961855bfcaa2174fee48565da40c617c84070dbda70ceea64631821f11183d25cfa78f0a7b4d6a50908a39cd090ca5c932f4c96b92ddb0933867be413dde51d795aed8e9abb4559ed0ef83fb6676f353fc383 52ed0fab4da9d5cc60701b83e6e67640233a6d47b33063f08f758960d8b0efaf21a1843a771c760fd9dc4169f4464ac7a2c6ddaf0fb748ef6f66d541c669f2f3a3fdda3f638517c74925e8780901e61eebcbac3db53c36e6848e16e4b99dd9fe3c0d4f42aec5218f4cb6c9ba80153d53e77726fa110b61b137718e608da99d 4fe056bb4b05d69143fc87f52d4aa130ab026b5c8afae8df0be26c260f807e1626f38ea644865ff8a6838eca7c0dd98314cbdc861bd06ffe8d8b8fc1b5ed1f4e643a4bbff318f16aa5f1e122a18ccf5becda91b97c3ff4b068a71d8b1492718c282e84932578fa10d3500c35a25f62781e3f85b5ce786530a5e95a815e6a58 df70cd2bf2fcff4003152bebd49e7191a31a298b124407e39097335e5559b67415c7c695128caad080553ebc9dcf39f80fdb4b1e6f119ae487f809130e177586307004c46ca5d6e669fca92251d598577a9b53975f19a3748b23c429e033e27dcb4b79309f02a07063e4e5c085984a436cc61d86ac36692066c49522ca78c4 4d0f4e94bed0327104958798f1c1e813727b4e5a1f722921b210d9e55debf6b0165b4139082bd20126c5f07bb145974c776bfbde92bd0b258ecbf6484bc8e7fc85594a68f8f21a48651044d367f0dc843963d4676f5ab892a4b2b54c8ad5f3e6ad73d32247495e2df10a4b937d6a0b3bce9828bf147f845e2edf9290c605a0 24452fab80be623d1415433a48a2fda1ef272133cd4ad4cef69ff078b3d1036abef3121014e89456446c115a7b5d5ea3233173239ad9677ac6f2bf1afafb2c47c83443ab90b8e6558b7861d38f1b77f121ed2a4825e9f5a41f12ab36e1520244d790ca5823aae2a74efc30982a47c761bd8870699e70ccdb5dc90388b2fba2 fc13f32c15ea3db5ec31cdc76c19c1ffd71590a2a0867e30674d9e0f71239f36e5afec527e3b67bd50c2c0ad98a96ea16e1306ed31f807a2b08bb72adf690974e8fc148b559731b0a2cb98b7ca2d610db0ea0c875891ec8e12be3ff4d16658596399332244d9a6468e501622caa053ca43ae0e7b9fcb9fd98b99d964478b93 793ceefea54a96bdf2663c64eee639375f7d4ad7127f0f816ec8a7512b83b3cb83e5b40c7ab4fb1afd590008a522e548e39b64f5d31e42b15989e736f9b0e1e542b0b0acd5e1df5fb712d66e939fc2359f720587e24d7046f39ebeb464dbb353d19cc64ebbd2a3463064d9b4ab3b9b5de3d8805aa62cf477a18359c661a199 0d27393a1dbbd7b38b4b56a13e9be9cac64b5edf3465db6f0773d65e86dae5dbe5b6dd4b579c532866fa94775ad1d992e20e6b828a68536a7baed097965941f92130d454a17f1740cdf1b2fb7537d1c02e1ffb06e30104bbbd7957c83a5bdd3af99819c0d2e95894fc463a6111532457c72e61bc801e1869d4175b2a6d031c 82bd15c12fff28c31f766dd362ef74960e2ef41852b21d5b052bceab43de4d7501cd80d0ed60613cca8b875fada6d3746b8e6cea1f0d507d80a2f89bc42e75caa36da8f7095189f81c87fd24fd533e0528b942cccaca578b8481785edb2845063012ce78aa93afa6a8b39139b1cdac135d1a30a59a3130275f28ab74be35cf 8fcf6cead29c4295bb3db61feadc8f6e5d333c81c133ad9c765f3f432cf31f0ad3a1806fd34f409dc6537c998ef3b63253012ccbe3edac76663602bedd2c28abfb1f3f883b7383ac09dc42802639ebb83db822802b53214963eb988e4d1fb430c86445d4cb24d2bb3d7fd7e191a62221a4e0c24d2af499655d79ee67d642aa 49f63fd82a7cc170500f964c7c33165291bef814a1cc0362f9b36e733049e9c0030fb2679c75b5f4c36d7e7b4b86230f8ef88467f39b772b646344e0c3f010c3d1e0e32f58d91f2501f47184f5106ff250b431816d4de7c09b0355718cd7722e531cfd1cd922730b7f71db7b882fb52f495c241bf1cf4f0ec77a059757d2c9 7a9fb187d48e997086c55bc2bd04a061db81985b6a37f721d7c55aebbc36b5fdf99558d07823f53b007858e38146a62e5ca25f100e0d26f644d2c5e5949afa8b03d322f626eef137a54ba8ba9937233509e3db69ef2ab64518e57ddad3cf3f230b7b889f613e9037c49ee18c0ed3fa60dbd4ffb887d08619711e2926f57f27 1dbc112d9cb068f7346236d0b168e31728f3c005ed22beb18f0708c345c23582e86e4306c944e1b2183013dcf7ae4d72dd6705671f6566440ed19622d619822c643e98c7c361c78aa1cf4d216493854fb3ef4635c3c265fbd43c6096f3eb459cbc8474a44998492bdd286c14e328df8a73e421ff5ea5ba8003fdbba9cff842 2e0a8e32f7ea5c60be79ba96d87242201c0e83cb1db0582c5e548acd0e5c79b0f6025521a22af244b7490a8aab533fae10d22655c08f65f36ff668811de6cbcd6912b88f1df605ee4ed92606e405d44338a781cf0c55b55e1c61dca12c5b6714e23963712a6f6cc39976d3cd3f5156b0af67d59fb1f394a0909eda39c97cf7 e96cb1a12606dd36ba6c07c41b00f5528c20bbce7acebdffd14d298ba83dd3af61a1da522b4ee302a811df4878806395249ae13345294501640f8e5c9192b616a49d5d1bf30c48315b33def4ac77ad6291be2be111c8bceb45463d961c5da3a0dbc6e7618c7478781c84320bcc32ba0c725f599ea2fca47c9480617c03bb23 9426619c2caab2547fc917066e9ad80ef1d0b365b859ebfe662c81fe19d3f7beb819c3c122a1b88d6df0d4afafef05ddf49cdc2e8802432d29eacfa8f3d7dfdbe3776179aba4dc7fa113b1a63bb6ba896516adf6a6ab2e09feee2b93a493f0e65f969d255e24f72671a3f76b27cd20a86d0438a0ddc70f7501973235d99949 14224f86bb91bbe36c9a60fc43dc75ee6901914cd332e1d511c2167e748f2f8b2399f33d52782b6a587617d6eb0877ce02123b097af276d012eef72e8e785477cd37dd04a287a0d1f9d32ea95e12a30408dfe61efae276b3569aa9cc355b3cbed0b56e671fbdfcad47b3249ad477ce7e823669a8e0f317f1b9f8f9c5a7a787 0d5d87e057747e2bb07378064e3b1fcf2cebf2ef865c1bb9fcb567c5c2d6ecbfdf9ec7805e4bf36e09f3ec3c4e696a2910d382497b1ea650aca0291965be3f893994626769aebfb03d19f9ca084d62d8453a637c4791211f9e4a4b9efdc6669e4b0328a33274cc3de6248132b01ea2ac56160497a19f1759057ecf9d0daf9f 054f10d9203c2cb2f2d53d357ccc1fc400be9f20481f0e2c095e2df843d8d393521d3b2d6ffd8db68c1468e75f15c4378d07783a7d3a956b4f5a9698f368059e84f406cbf60a9157cd734e81ad0b07e8c67f96a408bb246d2d47f6bed1af8c9df5bc2263d9ce0418ca8e57ec7030bc820c1fdc8f8e0ef1703d3eaad05d19db e49d20a80b44e6b5fbe8f1dca5b53e7de7a0d699a64b35ba61546e8aefe6f608dcaf4ca7e202726d1f118773d4e161da4dc6867956439bfc4da4e1b4d45d98674c395d01be779a22c12f1b9f77628399acd7e9f9f100669d57aa992434523f8a1942dd69ea3b1090474c3b9e1482f53a9e0c9d43517165416327f98b6424b8 1e37aa1dbf1d976c809a8fce1a713b625883b2233ae2e7949196d41785307e538bf1c2b1f1dcc71ac96d76bd34f26085752a616930940a2cd6fe5d1ea6599d6f3a92fa9272fbd899f4d6ae7d6173b933cbb95c49ed8ba27cbb20d639b692d9160d4d41543f504ff04ace06759403db8bd42abb37225b1b72c04a6367e2edd8 aeaa29249bafb5353331f4cd42b373f45184c5bbedadc4b31ddb226c607e1e68f82070850194d31e9368bd2881e2a9fc7760378b44f7ade27aec4ba4a74de72d2753558ef5840b8f1ca013afb4eb9272ea0a6e9916817ab0ba9691a015e348fa3d500685ff999f91c74a9a72ed499b8efe4b8e5bebdb6bf6557dfc8fee44ea c6c9c94a28191c714b524c3c62eb285b0b93dc4162d13c1fd1c3ea2a6209566f2b8d8725ba60ee78231fc7f7d54b8f7095575453850fa30fc4f35ed7d13b624d9d4f1ed0c624ea561d8362ef397d31610e06fb18c2a64dbab31df2779af4134756f1e1a0de30f9bf9a12a3377e72717fcabb6de9e207ddc511eec03dae3f3b 9d710b9c5df8eee0773ab5af103d383a83ff26f92d29702802d3dc7e33c53626d41c06459de547d9bfe8d62e4adc9aca779aac7048954a42a97de0c13aa3298f2d4a1bcf6c3b012f49ecb90fc37a17c16e35a81d04d5fdd3a8ebad6292a1cd5edf831a7d3ae35045c12e3e7ecf9fbe2331dd8b7650987da815f01f9e0dc261 1fcee1b811987a752ebedd4857bf39c2688ebc2235c997ffc2e2aa833f132b61241c48b4b84c61ffd4fcd3cbf7b569e42624e02e80f471fb1fed83e9c6eafac8ea5bd0d33b033661bf1ac89a13056a21a42349a37bb094fc5097b306087a77cde8f9b85df6082d62938f539cacd3bb3eb690c729767712801c272ffd0bcede ae1f2dc6808322930287a020a2d843058e4b562cde75b0f37ac94fc9abf0cd7f8248a1f0fc70c3d58c21064018c3ee44272fd8d56c6527af50e47cda397ac4cd3bcc365fd8f441af41edc41fcf081f7e73f38f98872cf95f1915e66c43f06c68cce9868e69c570ac36a2bb4d818a46c985804fce150637749cde4495cb2620 7dc942dbc2c929f80313b14d27327fba035214d915282d319d8e36e243632f71cf917ff964b97d26a00f793e452e64fd4aa229b40755011c6016984fb12375b74397f7ed824ebdf86648d9997ec708f30f985ef7f100fb309148eb12dcf8a6582c1a1cae6ada5e06acf0a562d79b78008575a547505182630390d4e0c4e1fd def9e529d96a92bb602962f54866a7b29107c949f1388013093c3e34e7ac8351249d90b30a60587cf4aa7411b1f526f991d72a631a2105307b12008283f5ee36baa88345d3859d821b03c097ded9df4122b0a4b294350fa3404179ff2daac414a973fc51fb4a250d320aae115ab384726b2e1b9096e26c864df7360b516cbc 0afcdca17101fb4f65d0895aa2ab801a97e26cf024b656ee6785e1847cf2b135287987b9ac2efbb673883317ec4886551a892e83f1be0c61febfaec860736509d9e9b4c756e7a0b5ad5993266aa6d1ee11be77d8b90f3fe2e8a0f9917ab42d28609db7fa218000d840d7714a9fc30c41cf0a7b0b3e78f7ca7c907b289b5fef f4619e200ce56090a0de35544137c83aee3c6289f99fbaae9ad8ead6416206b1c03ec59062ddf5ed123b37e34948cd2b2ea8164b06be73d0d54cc98304d6432a3f6f3bf3f6d8ebbffdee3e47bd9bd22c4f9dbe42a926c09199a6b17db66b61c0593d766b7bf2aa63241384c0f32d61e020082118e08dac70f5034dafbde839 db49b6826cf37832ac11829f2aebba2e06bcb179c2e6fa5b3a1a4976081469d50d64ab44e8e2f94764bf3c1a3454f057fd45ede47c9ebfc034cd07cb5d6eb2a27057af83d6b123402de65ee88fd55c30795270d122fade06b80cc4b237818085e62e2b8603638b910baa4e5f688cb31238568b3e6e307ced895a6684eb7fca bb54c91ea12e6a8d996868adae73cac1237425c00ca1c09a1f29bbc89e59fff8d2069916b51976c89aaa64bc58116e49d92bfc8140644210bcf4b3e785a2b6485ddd2157815fd425d421dc69e1b8f1ea1bb6fa6380b9e27fe67c792b05333acb05aa8f95323eae7ebb406ecf96cdd213231c943b02e3c3385df462e6c1b504 6d58f94cdd30ed7747797ee142d44968ce450dd46352003b858e73e4d07b0f1d3fa872d2419a88be3889f87d7ba0d31052cfd4f0c6644f24dee7fab7c9bac7d8043a253c83d4fa4f6a5da82868e43064d50924cd155ec5751f44768e249c96e78bf703fee7b49c63cc57a8097125e11878e8410487860481077a950605a604 a65c43e955eff1dcafbdb807afcc4d780b9cf39188e217698a0e09b761b3cac7bd578ec4bf5169b45a5d82506b019b93598d01521a00eba75863aba9e360fa24e90bb62a02f64bd9caf4339f787ed8f2a0e6be587e622caf7c9994336a16f96c1f1e82e932895100f49cba410bc594506b6142c2af6aba49dedfcb99e3bd23 f6e1013c96f3163c55411a4b64ecdcfe9c718c931ddfe9599bcd6670e831f6d7c3451381a44e6c83827aa688e1be4e002ba0251555756bcdee6488229d4ff0b6462a38acd17990788293df3405b667a9466a954275bd1c148125fcb5623da03027a61ef99523cc99ba5718f25e3c124fab4f38ec79b5157739bcad24e069af bd59ef843125a07bd83745d9664f79b412b40ce53254308be8672f73f7f1e047107f5e385534c881479fff9d713d26f1286de459c153c6328ba44e526d3bbba2b6475799e84499195aec9da34be296b21002c2182f826bed70ded6c5234c13ed40653c88da4e2685afc022e22f6b33989d19d6cf06cb6025106e42892c2655 24071a67147c254a904a10bd7abfe3eb13bf474ddd385753e537c97a5ff42fe7d6409eabfefda62e14e58fbe4e6a961b55475ee469f97cd04437b0fe4375a95a33730aad517b540173e42042e4bb38bce522f68138fd35cd036a986e36e9e5e9b2d2aa9f6fc2ba39816738104bc9d3d12843773f51a1e227e949bb7981bb16 b1423ab3cc0dee9a025971722e0078f8e2a505dc93d8f5793ddc91683637c7892041a465be94741c335c7cb30f8d4a195c6fc350a99f665afb964248d63dc236fab7e201dc6400043213437147fce4f849f598fa21735aed8a5e42a8bfbd786137044fadbe0c41d982f312ffbefcf9341f6f1e8d18374d933fc20f2a5e82c7 08e707763f9330014b7b6339c71d5f08041fe1500e268da79ac61e24bb4ffa3967242a8c688edec625ae14379ad5532b33be8d513db0405915da79141c23d0f46299e4e39fbcdd4704f9b618b1e73b8b618f1b9d53b31d34f11c91fd786331c0bce3a63575a616d949044fc241a125b4426f185c8cde39d68c0d094da11440 76e777c9958e3e9db8e80afdc36f30f1596766bc7357c5bf4400f843038f0e9dcf43b0207227875e306b44bfa7e2c92288880e76ca80a24975be7a55bf27bfbedf0234c20e5f3a5dfa7cb174e4533d7f685f61dbf1ef23318537332896866275b60ebd8a036a1d01d9cfd8bc6e7814c18e928ff189405ae91707ba995b6a5e a0aecabd94029b34e09aca3adef0c9f48e362feb00caf969c5922a54003394abeac728b7d68f17b3ae58f6503b8697ca4668ff9df3f328d922f7d6e3a58172db6d1bf9a1dc110059e25bfb18829a0121c417420676bf90f37bf7e3c9eb7e3b65bab1e6484935ab1cd496932676a33c02829cc39bd386074c9639be07b4859b 64af2b428c79c25ed460ccbee77725afae2119b1f9196cc30ecfae5a9effa104eb71689f2e0afa38ae1a5b08045886aab635e6a62646a1526890cc276b00828db6abfab88dc2f14ce5966dff518693813396d8d0f8cb1f437a800e5150b8fdec1d431f81ec7cddb4eadf22eb3e9c0116d36e175093391668d3befe49194bf7 fd4dc5a27dec66c19d88bf40e0abab2297ac18e63daaff6cd571c717cfcd79e8c0811f4ba50d191d7b0b92bf93228b3a288cc363beb68a055520e8e1bad3b65b7c9acd753e11df768a763dbeb8df640a788dbd8659f44342cd17128ff47e1b372c95c562f1d31211ba6871c8a877ad39b4edbe382499b254b778d6c01720c4 b86f8c3da6f212cc62ae297721212d9e033935ec7130c7a6f98bd28a8028c8cc5644dc06a1fddedbc0c6ca77370ac2f016025bc2f53663a7c83a55cd1d21fbdd983fcec08660c881ba1d01b2d2685eaa278213f71a58e07eb2892a0493cf269963854584f1c452d6762aaa05d482c75f61bd2d13952e3b04eb359d6204ce4f 1abd87f33581b93305f67bc32fd92779ed3f95ef120fd44207fc47b3e8ad65f7ba4a22885b9d0d217bf34bc169b738abe0a2abb7a0d2465c95d6d16526937db61b8563af385706f1c2f970f13e321e7d8621edb9e444f2a3a9f46b2d9d17228d670e2a131e016672049161b837730cafc10617b0d20b562dc85b97516a64e2 0a38952519dc5d8bd2827a8b8ab6555e2c86a8a3e07447e0bf8e0d393eae352435a70ad83f38bd657820e028c40e2c7267c91b9826f5210737b6999ce841410b526f8782c8816a612c8b9457fd19e41c9ce4972946738f6461d33302be7978e8bbf9aaad56f02ab4e8ec01364ceca2bfa62dacc60e7abd9fe72a55420f7c89 a9a326b55d239a3070fc4c316cb852c7f28e4481236af2caa71ed3a8088a3e77e027f8b42d1bdd7e7334cf2ad3be330510ff3ab45f16cf114415a14e104c900e3b87afbdc3f0f3af28f25306c1416f314138da6e4585d16cab538c6255284c4d05520a1aa959b62d9d8b917b44997ad2abf563ed70ef00beab3bb9562839ae f7e4abb3dc9f5e5734b44bf7dcb257795891325bf746a9ced8ceeeff486769ebcfa27fac8a2353947b2bd378327dbfddba3a67a378099809b6c6fc5f4e18ffb8a7d3e1af912381dab3113ac87a24adbc08f1b6dc8076a29b88932918e8fcbe52b705daac632e176e6044ee7f4587d6d0370532c702c9dc92eb3ee8938c08e1 e23a9e1ceefbd05dcc3f048ac631e38c6b46ace97e893ec455dffd1bb3873b1a85703126d7bf0a47f5e0633bd0e7dca7f174137cdd5508bd1c6493cb7b619f482c541ebe705f83c03719de967e083f1c9e3a4e357155a4b20553fec360ea773258ef477f8952c5172b10062958f72f2964f653ead7d3e1c4b1c9efb2bfc324 ac2de310776b8cd5d910afa419c441ad7d239fe39f6179d20e0bb0db05f89ef02baaae6d53f39522fbc48e613aea450926d42560cb970b2d18c9ef992aa73843242fd5b3730ccb7da14e6dacd48cf0e08a22750ab9046034f494e4909c07b0e9de13794247f497e5a0e9c1354bbcbb71625f19a5ce5d94cf5af1ef5ca0feb1 7c0a097882d41b7889a1e4da2476abf38521c490bdf845ea0e246da370a2f68029f4ba1ad7c183b442d63eaff498aa2b33604edb786030d033a37a251b09f55fa77b88ca7e77b0f9fa91e323049b344c82ce7d79acbeb379c4b23a8510e20566878268b2d835273cf5b36614528a4693960b27df4f0b93458dabca1badfd74 0c380d30512e68713b88d193899de03552567267a9f99deac408fbb832258bdba1765bf12c0ab5e020ba228363170cda6aafbe8eaf50596aa41635d6a32dd60ae3ea3dc2d2850184fc2e9567e2d827c2509386b01a10d255e317a2b5d7354d325d52c542b3b3fc740c9872bced1b4833e7f2788e959847a002eececa271dbf fca11fb781880c82f5ab623456e8f70264de2a8ca5297ee960cedb48de05f41a66a5b4a60d427f281e71e19a5c2c176a004ba276f6e2fb8023227a8a46354938c656e0d1fc9b6d825584b43b73ab00f3b2b265af5a56208f8b8392cb954e207ee90e73782592cccf684d7d3a4982fa925195df7b21cebacee35227e9d58a84 f6f035ceb665160084ba5dd53a2a1f5614a5830c28ad191886692067d5e2a505db188afc8e074a0c8d31c6a8726440f841c53a93f87f0ca724a6a7f4dcf166a376df218596050473e3eee63a9d0a1f40f9a59dc400dc6688d3fad7c7637ed6bacd16dbd80b27f4f8161d38c70f2f776519abca443e2ea6f6668080ffffc680 81d96a16fe53a299cddc74f53169a10bf4c09613d88a6a12730e9728d00f1bd91efe8bf2331885589c047b1a94be3350d3afe43b35892c45c4d7dde587c1adbfe18afd376aab2ba652c512eed5ebf8f2da844fb30ac4c86dc0838f204847db7420deb9e059e185f968d134a4a7a6bfc09ab4b93e6e1cae167f6c984cc99b97 c1feb59e31e3f5c87979ad351a5497554dcaa314aa4d35cd296d372e6f9344655cdac01a7c804e6aa229fb65684e7693dccdb7bdc018e9eb5d7c4eb739cde06ae9833ec2aa9d437e226e0adc91b6e0f15e848c36d7f61214daf57bc1bb10c51f8e2d99b0d8d04c68572da6b5ac1871911f18f024e80cd1c77e2b1596b221ac c4da476a4a54c91097d77393a51626b2ab5ebefc17e69c47c854b856a5b17402c55ad9c587509116eb49b3f7629b64ebd9d6a49fdb03318238de4a7a7351394225a80f28bba86937399ab6b1b02464958ebb832d3c1843713309ddbdda3afbcd1f2abdd6510075388585635cbdcfd6d3c59f71e90b287daaff8689d0a3266c f1470d27051f024eb406dd6861b2212026cb1cc188c309dc1659309c970b6316b066796844e605e606c7c050b548fcd702a7de57df2656ad727fa271f9ef79393c3fc8b2bbdc43214616c3db1587e317676750a3c0ab61b2160d55d18614e35276cbc77d0bcf0a5b14301dc7d6b5ca78876fcd00d843d6023b52fed7c390c6 4c68850bca9f1623ff9508c312fe2d6e597850bebd23f705295e606651f021e1554810229fc9a98ed50c9a61bbc464ae8c5c6563a0ac09ba85a33f7ad555b51e59c32c7147b140822b9182d29521652ea64a22e40b2456c6044d28cc00f835e83d7560a146a7ca3d76911e72d01d69d0eb8a139c1fa62f69aee3c9642c08af 6cba103bbfe56fc46451d775a826f54a949011924ea3ced9d739643c9ce3a45ce94998c69b6baaeb5c17e12119ddbeae483ede540c1912b153ee7522fe3f8bdfa76db94eba99005440ddd907c59aebf5cc76a7c5e1a60d40eb9e56a028c5293356a7bbe3cfb02350dfa177525c7637d885f3eced08dbbfbb365d1cca0a60db 572d07e0a6829ce8ffe562c04553258b7ae406546b8d9a676d931f30355e17963a3f11eb4c9e190ce2c28347c164faeb9051a815d47c2986ba2cf3094caf2c5f64a2422f2222743c1700a21b79b1ffd8ce31a3589239af38be807dcdcd355c8e7cf3e8671764bb23031b5ada1acabb63928267cd26b2c9cacd1b4f4b0a71c9 426161788e7ee7f32fb5520ab759938beefa4fcdd968bd53701ae9c27429b5d6e059342b9adef7b56b4c5eee2f46e0cd472d48f4b9d47d04dd0a390f88a2be3e275b65c3b7049431f94d850d63b2b2154105edb0527a4f712cf523b75aec52c4816683d59ecccb03a26e151114dae625f446a713af28d7d8173e4c44624ec3 30f84446f46752fb18ca83e19392b1570739b4d02cef8427ae082b2cc31d8115bc18f2d71940437f77c1f98046b243b41f0ec5b8db811f1e8785fa163b58703e813161ea55c4ec7bd96206f318d2ca177d2d00df885cde32a2c589323bb40ff941da9726655daded4d7758dcca859606892ffbddb1889a4a0b2cca0470051a 799292acbcf80ec3d459dc25208c73b0923bfa81e73e558c0a86c805bc450293ae9fd058a5f860074c6a200517a59c51582ef0c3ff883ab42cf184e7501919c9249e4cf3cee68a5df88e6c3d25f865df22ab77383427e73fc409cc5f24112251389c58d40dce86648cbb4abe34ca5aa1627202e281aa2261a37f6ab2e46856 cb978aec861908094a865447eb1db7460287e2c4aade4853895eccbab40eeb427631087b3602286d2d2756894d74753afd3a82e61d33cb0cf748dc9321d7909abf4c362a3d00f1fb2bdb29ffe13427db353790f94629ff9756b2c3a4fdb544946d95d67f0b8e4253bc0272e7bdf1b84ea04aaab353a83bc2db356ef30f14d6 ca7c6a280e8305a8874ac689d49c297c6a71fe61caa17ca8c1912701dced09cfc9436ec44c18b239c173e9f235e301a9aa2b23011d64a84a78d6f279e836257dee1dd4b6e44c92b06cd5a1a14a6dda6b7edaa4581203049333fa934279f0f4978f3c4508e78d348fd9f19ed2c0e7e39338b724ef376e351659dd0ced44defe 1eae9b5e53a8b71726c08ba2660a50c5a2dfab6453d60d03662addd8aeac2453a1366b46f3d8133896382636aa4b401005a3fc9dd7722badea24dc1388fcb9ce23bf480621b513ee70e2d2cf1493a7a32343bf24cca354f6bda4ce719baae7d2563529f3026a6df7fcc843f735d1ada133f59f131053bce12b4d5f28bf87f9 52034379a9759ea86ba5ae959d98408305b3c4e03142868ec2e9a7474a17d67964c115ab811f7a6b11425c1ca749effafcd6fe5e2cd8f709460902a2cb94111691d1f775142590fef526b3c7c12d0c525b7c95ac270a7375918c01b10bd5c0fb9479d4d4ec1cbbf11b893a6f78dbef8aa7e59cb014951015c89341c09e09a3 e498cf9d17653bd0d93f4ff0457e499988e5109dde6b58d09491910869d7fd39d11a9d5223116b05bb766fcc9083f5f70a9d061d678c1655261b98b0697253b5e141a9d47d119384361241f3a1bbc7d80e6a454762e54400ba253cc72a37e27504731399a4d0b32316c32ca317bb22b4663f464dcbbe0bf81e1e0192c24365 cca2cf7f329ea990a8657775a2bdea4773d2f61f4d0c75e3c5d85064ee3b042204b77feab4e3cfcb7877e8019c7a94c69e309c617dd1fe9faac9975e52cac77342e5fe156a5660abac1c3b4717779650c8d347322e8df24f47dbe690a78683bf67c01fff514f6317f8e52f78bfd780459818f32ece4124f16c6d43877e9d81 e2061bbdcf8dc6aa52b9381528ea453ca9ff79a476a157cd2c5fd48f21421ae7d1447158ba806dffcc23cc37182a1ec042d8c9ccdc1457e579a1d07fb1ea4b76656e725a1cd26d675ba20ca83500ce9833da0c6125722f676c181164d442058ec5554c11ed6e4fdcbaba1241ff49bae20dce32e390bb0b50c2b815903a8e8a ffecc0676f6e5e86fdd36360040c9910faf0444df024d5c7bda00c59a4515f928c93d21a94ee872fe678059c8630bf7f81e9ae18c367456942f630c06cd0964b9684277cd2be69ec352ecfcdaf9b831dde441bc3ea50b8017590e68a79ba7eb827756e43d0ef9930cf498081a35546779536fba79bf3a27f05d32a905e7059 f9f021026254d242c6660df02c95013c117c6d24ebe13841361d37bd46ae35e9666fe1d038ab598d9d9b390cb84f392160e25118164d28c6fd26ba993a34e9c43438f23f3a0ba3ca8bc64930ea374933d1e78303222529ce0e863b6b23e986bf56273f3fb30e0713e480e10db649efbaaf6e1639d350b248774b104e7faebc be52194905e54e132b02bcf999fa2467d0d35b913f81b23b6779ca937d80d225935e3c84bc5d0351789b514e08a6371a092a3745c36a6047173ee1c00f08acb111bb0d51ff4636fdd5278aa4c47980cf4782747aa0f5c48f95554977acd04e4bc95e9f3e57c04add8299fde93cf0ce05f03d5f795572892abf04d5e9350c9b d5ab7dfed8a30a55b73abcd420552acfe07a306333e4cee21e14eb790d3275e85af87db5ebdf952ce6a87fd1ff3413a7dc2ae3239f5ba51638e0ddc0e8bf8cbd73352856d0c71286c4670b24bc7e45f9e94afa897b24fb32dde0adad6edecfda7ed4ad98e2d3b3ab70fb48146dbbdbba0cd135c5eafe5a39edcf57ef873d52 cf6924d2b449d199e3b902bbb475b7753ddd39f211a7fc6846b6d47203c4560a9b2304c86dc7a45dd5764d150ebcd4154e03410c453ee7e50b9156b7c1100534be5febc06046f1c2b7b28a17d1bc83a812ac100233b08daf42fe4130b7f650ba2e456f83c54b688f57fc4577dc2433aa2003dafa0390fd8d554e01b4863d64 55e65dfdca016c9cc4df2749a736829211c192258e278f8e7b93089554647c545f50f5e7e2dd6addf75c20574c96f8182f102feead3f2fedeb26ac1dc75d93296d87c2983402551d21ec439ab0221a2c8be1f6ce0de9e44eef0a2e21f7471cc2f2ad9be8682b4f48e91aa07c49743225705e541b09015788e511ca78a1d537 044e211b7b69d6c3f1e5d1489f9d909b08ad05a6488c79ab27578375b4ce7187646501dd31e0bcf7eefe884cb43ffff02dd9d0495f9c896bf2bedaa1fd88cf2f81a2626e6b9ff3640458b833ad44c6611695a9bd5ccbd6bb0f119d394b2ab32afb571a9cf3aa3119eb6b653d746dd90a8a79375474d96fc8bc274ebb15525f de953cb11a30556cc9c158f28d274a1b0bba86edcb16deccf8ceaad0e6e296296d3650eeb9e31977631147dc46b4ee8e98a8f2dd98dda6bc34160a90b0853aee24b31fb51bb9e59648d491708295e22c9428539deba079170f84a0956e8e6d85aac3218b2c0cb14d86af8512bfa0ee21b8dd8461716d539129fd604def7e0d 64299308cda32c03bb63a5bae0465938d656fbbee6218080c3646853e30553b4b7e413be75334c607ade51b0111342419e48abf43a336fc56d27f1d826e3814376c7981dacc200a068fcd1bfa7e5466766fde52d26e23f05de090b134f6abc8e7891685670b646e3f08c5938c058a0d28463643895137745ef1cb9ec10d96c 99deb3909b48b545d9f105e115e339543e058fef584a5eb28c465bce0972d57704db6b7a9a76deb1e0b09ef4102586e99c01f8e5b4ddb6871ee426e2b14464d4b0f9fb6efa1d26cefd389e7e3abe64f472a7b26cfd2d01e925e55d8e16b1a3f724cc03564f4b02a95c1159b9bbca97b698489861f971def07536dca84e9893 9f49e1481e717384e4af2a3d8401434857c6afd424518f073a0c6611d0640b381c7ecfd17e1ffe8ffeeaf029991aa8b94814ad301cee7f9ab2f81471747d55c3bc61ba3de62827cab35b11c70f6dae3ecae2ac474b7cbfa5f39e382e979b63bd4a11de546c8be9b31773711b5e67913c18226f84643afa17b91d9b324a7330 9a38ca8d98cb7f004bf1e9b587463cf9210a0a7ceed051573e312322712f5229a7a6d560c3503fa045a0682266b92c0136e0b3c29cbfd6fbd95c6c9c4be00480e892590bb12cc2240c98813283f65ed0886f781f520d36b037a7d08ca5513d4a90e4a883829999943f2a7fea006f074c898e7116176671691a2c95ae13f83e 394c79c281dda817b542b762a39ee76e224af79c6a43776f09ec76604d3b4b240f0bad91e4d856e61011dfbd53c06141def0d1d0ec98123831c693cec547a0194ab274a7a2b9397b490f2dc1da0ec2d0c180cbed2ee5fe7e366070fffb3627eb8ef42eb9469828472769c2ad188584487254cd2af779be1f6730684cbfff9e e6c1b7bf5ac833e7fc34b7193f9d51296c0d719003471533da36f1130855177b7ed3e60760155c86377b20ab674b69e32365967e28703e3922b23a15b021091e07c0b75fa538090b235dd96be442c3baa1ea8add831b97d211c2ff5b3fe53f038a1c12144dcc8361c31ffbcbab2167a4f0e51da23642480214498125011a1d 711771b41153fcf6b934c0c25c35d5dcd02db5349dd083518aaa14f32543ed076e9fd2ebf53d4e88892feca7b3a5189470b21d142b154d75e1ede154bdc78592ecb14d82c6715ba1624088c2b90357f3416c01b34397aaa942bab61df55396ec5ce23407d3dd3c2eda7f107a401017f232dfbd1b150f6c0ec3b93152c74e9d 2591f3c6909f378b4947de867eba25f89d9e69de798b652103bad8bd49260f8492b622c282d635270144a12d58e0492713ed4609b1d609dfa57b9201939e9f18f524b019357f3cafd9f6c12679d8d9400475f66b93ce1135667370068a5b527dffad644143fe8741d56807e046368b91dd66e75a88f74637d0b5a59c04baab 6dbf44b5b89e702e074d7dc6feffc48697a74797d773f4d8c960bb99344bd458751c4754cc2b4eab9c563b750098110697e586fd3b9c4bb33296e34de4ec1eb86d8974722e53559e301495d26c3197e65440582e5f54dccc5dad10a14cce792602c8c6c7c617f55a759981e358bd1d33e659d5c77cf30687e502126429171d da8c596be3395a78af1bd6cf2b643c2de81ba7e1e22078c91746a3bb40adf99553ed61c621e2b24387394f18a66d7caeb16daa0ffb60ad9b9d425090a9b6a5e0d035303b137fd254cd27733d8b67058685fb62e343f874a7941162fd5580cadad88c7608ac4487a0f14058a9196d884da3a1916d7079617213d5f89db244fc ab39c41bd7f51b18d9c9257b16ab12b8d921020105007a5b2d02421a34af52bcd2ddde0f344d50d90565119b889595dc8dbb37c9c9b8cfb965ba3839e735ff91f72374c1eeeab92d472733a3d6978840ed61465fe61979ba2379029ba59c50aef02892a39d8320113f019d32c34c27312089826ccc562fb970982fdd14de3b dfe77f5ae32d49c99adfd6978d6aa7fd7fa6071073f8f9bba55fbc95b54e7992b953da492bed8a5728d14393bab1f54e739de8c3025a5f8b61d171255e3517ef9e19314b8d107c6ad9d41f1e40ee4bde3dfb0efd4ab519007a77b0e023e08492a6de7155233d041d5cf7b7e9e82039906ddc523cb8810217bcc199925f31b5 0fb6a8d47d3ebeb1560f5ede57d549b0763e0c67a40295b84e8ab7692d05c13989967e616a427dd96f4e077428125be951b10b1e5817cdd22bd232ff958c526d256a5670e3219e6d2a3ddeb6e1ab790176bada7032aeec3a9aabcc2ace9aeac918c01f337455ed11cb724e5e258d0628853eca184210dabb0c6ed6b95023be 9057833399b78aa2aeff5dde3f0aaa2c2009f9efbc48eb0d9d4765dbf07b4663f228ed941f59a76d55fc9f67c07810748456b8e334e77e6d4f74277e9261d9ffc2da1cdd3128bf863691fce8cc48a100359b65666ba38069d3b29912546ea0a16e305db0d1545226c50628d4f6a08c408d64f2474eaccc41695dc2aef0d4bc 683c40a3f0f94f9948d58efe7822a240e172491acdd6e8ca1b68f271ac6dfaf2e1705951485f15f8b9432b9a72e8c1bfbd0402a0e50bd3e71cbe8cf62503794ca877ebe9dbfbab545adaf15cc37a2a97d01449214036423409ff042a1dc07ad4882dd5a8d10b141153e451a4af2c2662bdc8a79061c9603b38e9b5ac67f5cd aacf5fcd6836a2de4d2ce94d9cfff1c2bbe4f98ada627d7f27b8d44b7f0e37393c19ee16038dd6346f5e7bf07e0cd51f3604732359109b8996146c40ece11bdb91c86f4b6e7e74d8d8918b625705ae75ff05bff1dc185fdbd897241b0b74d37591875cf7dffbd6da4a4fb3bb516e141f0f7ead76025343d328965e3315df4f 56217f9f55afbe29bb5523ccf7ff4aa3f42889a5f3e85a7a22f0475aacc8c4fab17c4443ae7a72024749c5a40a5bf8c82b4f58a8c09f9a4ee0cba8f21f1e178e8232600a43e2ff86c61c5982227f95c93cee2d4674058d2127bf050fa113d478cd1485934eb9e37b55aeed7cd56e4db12cbebe8e666f679824c09ecf92aa2e 09fc84edd85473d49de862a62f78ac63d87d53e61dbbe5b74932fe27e2b8fb73d60b154f8a456bd2f570e94ed58bd8201e460eef859d800c58c3b59d8cffc122d6a334d96f52cd88491ecaabbc25b414fc2b9efee56a0ba1c673151ff35de2d810dc1c7b0f9ec2c823a8b8d835210cdb55cb2e959533ee6b54dfda46722d85 e3794c50c5c9dcf1dd618b2035e8bb8f0d99520a9864f2e96021aa1db1aab35f3e32e45c0bb457e5e117f313fcfe6938b9974207c10775f906eeffc4176fce43c79cc555edb26dbd02c54cd3df65838b6ce17a6604ac71036e882eca31325344fcde4371b928e47b55595bc299827908e617bb4b82e5bcd954c439c84fadfb 0bfc9cb00ee1e5d41dac337699fa4c49b1a3d2214aada8a7dd63dfa83663660094d6d753493c1310da086f069ecac792e1e8598850af44f9719912be8463fed1d7ec2544245f70b1833d1af7114596ee3063e3ddaee634022a6fb39a0a2137681fc136ff3a21ff9d032089b9089a7dbcacf55945108f30607bab327a9de8c1 31d1484c2463a8ec2e7072a2c0b14617e2bdbc332113a1f3c5d6f680af024929045070fd4d49f1d12015f8049a449835457b4b9eeebf04ed5f805020a428d607d7e4b8c8c406ef9faad69fcbed1ae04e4d69eaaff06b91d73b6aafa2f6d5378daccd9c6681dce4383e48501681ad611917f734b3d97174c2fc5c32bd3cc987 172ac14aea7ed03f4ee707ccbfcc64b29d2909379bd95c96caa59217e8e33b6ac95e1218d6c3ebcdf6479c7f7fece2905e402a85df4430e44fe77e8d6ce4e4ada1031482c5e423dcc6c1a7b6dcf308b2f5a88e8c617acd02644ac99ce42beae85ab78473d01cf6a4830e8e83febacfad50fe475ad206654e567d26abf4766d cb8e75a9f62aaed4cb0d65d6af505e05dcb6f2e9b54f76f2f40f6dbc25b60d647d96133edeeb0673f74bcf1a3bda8c9c74f92f7f3f9026ee2b84ddf074d5b0d305d45253a56b33cd66b515e4a747c2ea5b53956044bdbab253d8a52fccaf0d6aa108b793840f6d0daccf8839204daaa69b3cb2cadfd063417168cbe3bebf55 719fc878f02aaa2cdd1d32ee97747b5f5adc46d13d15e986360ac7991e65075b2cf47dfe8d35c9d47ae8d20cf5fa1b235852660722e87179910378bb654f214666338884eb2f0bb7524bc12dc072cbc192520c7c62a193b5649b3993578d799eae9cb034044e93b61f80946ec63ce375443d8054620fadb5d3c894f1e15b13 7adcdc4de399976680989537b849876eeaa2b443433a4db069e42eeec7c596ed6bcb020dab6a476fd5aaf4c3c2a3bbf301b249f5a0a8bbdd54b328d13f6f930f4a0fee218be4f192a8854fd9ba70b99a30f1709988abf51cd282896a4542f5835ffa7b9188cbdcc381a9400911ec727fa7942d47405a469f09552f51a60179 81a7fc216110b492662e23919146a0baee38a5526705a1434306031d4914041964763c55f4214b07a5a43bf6917f34a7b00cbd233ec93a2d4500a601b25a0b215ce4d6405e1aa53a459e6e4ecede606ec4b8ba535e27d7df3902f0517f6eeeead89841d1b32095348bb19178169740fbfc3cf2f8619efea7dcbf4b0f95a4ad 15939056f09a9eb4f79783d82c2e18a5686eaed7ff7381bdfed64f2b364c0329745148b86911cde3e293f30ae05db48637bd22d0bd8e2fe5a236229213736068513b9c8e691f7b2a659495c81a6b70774140c628586d25588f3e6d16434ec06c058fba057b593151d10c869f55797d313e06afb3fb16d01c4c291058e7583d 6398ea0cb269ac8d2aed9c9b14b5054cd1410d61f4aece806a6b3cb7d6db1394153b6e46d755c148b7f9a923db78a9ddd36df5dcdaa70d40c12fe125935765ce3297a24b50acc37cd98d05b49c141e19c71c55b9a807a0788b79d6b6fb3bbfc4312e76f50ca414895430419ada545ac3b632cb9aedfae267e75fba42d213d6 50ea89afc6259499bf1ab0cc9cc47e8a323ceaa6018b1f14561f66e6e450be7b99ef54b39eed97b9674dd6ff5967b450f3ea40f26f222605a07c5235683b8709165a57324fb8b68b0b328f083505ed8f18a67be25c64c5c837fd218f85580d31bc4a88a296a07d0f8052f86944fceb8492ad0baf0bd911e927088853a01ff5 a2fdbecccfc31abcbd7f50dd1a958512bdbb34a0df4c08fa597f1e736e3c118b2d1b3c79f199cb3adf45782c514134ae761e0b74bf3a1cb791212bd92b5d90a097425ee12161e0073ae64eb111bb2443fa5faa7b22aa1735a4eb83dfca07c7dd90aeb8fbc357ca7af634dbcb9ede0751e9196657ccecbfc8e5eacf760965d2 ca09cf01259945f5fd92f5ccbe2f63bd939ee89f2eb4bf6ffee83a1d04b6fbe2676f5a266d06b7e9d762e79f280f3acced9672c9dde6aa50c68a4627c59abd96460a3839f5a7ef734c1021f4aad7a481911e71ed9f8c7fce0dde8f1d68fc7d2ce95947ac080378954246b8a09a1c53c11111323b1f04ffc08fc330ff65c590 f5b186342c0618d617c9a9b3ad4a58a37fd8e2f96d8c7f8be066eaea8db5155607b6e0678b9f8c1d20100d4b1e5f8063f90484747f5ba080f40cc0ab075e5b6605a296c1effdd9a3db89b9c564fa2e5033737d084929ec3402e5dfb594b9c69e57e9aa53b12f242303ec7c3acfaffb3bd4a23718a5b4ccebb09e0c4c770a7c 131233f6e402e1fa7f8f9fe3b8572a7fcf5074735c984e4d7d26ae626c609ffec1e1342df9cd6c2409b1c9dfb7945914ad4571bf97b6ccfbdb527f749f09c1ceaf3edb56f06e2bb4f75a99f35145fbaa2604f339a095e734dc504e3a017c1a69c0f545d61a0b2e5eb476e64ec60e7f5f101b6d1c2039c58a383b337d57b31e 49bbf407c98f2cb09f45bbf07c9f6d43636f61f6fb9cc72b0a1e66665c3bfadc795b274b28c862fefbd8c9df6415494712f4d39b6c9e8b6840ff6a53d06c00b89fd41bb3155c38d873e9da1fdeb144c40bed42d56b7d9369f7bf4edfbb9a7335cf9cd8f9dd7d1cbd555eb8e0dfa95599d3e8cb39852de35f3fca0f6d1d24a9 56f93f4fd1a6619d112f30822c0a7fe9c2c844c5bbd59b6fbd8a056d88d22af574c272a8b0be09d988d37472d4094585e837f36ab119aeb02b9d3b4d4454f19f755c41dd926a4856bfa3c2ba360f72ad13e8d18506e30a9b01b83deb9c89b09184dc68a2bd29c54ede5444c90fb369e0ca546255d1b25a97ddc37092ccaf79 8a4df6ae1ab1f6fe5978f58ab0f12d3a18253a661a527db5e4bb6b68b35ab57f4d351b0c3143b6231ddd0ae6fc7781da577a421b15c9adcfa0b7a850be966de93ac1a1e7f0aadfb026d2d275c3d37604b2174dd3bb7982ec4430122462c21591313e0aa701a10e8f580712abc662a71fcae9baf937b67c16195c040f02aaf6 de17db5b302c189eb0cd7dde487eb7a897a006c5506af24f65c42d639d82fb78499b8c6212e32e14079c420c86ef3f0acccddf7ae63921adcb7f64cc084e6aeaea1f5c0b2b67ff411b86c6e788da96c68bfa68c6093219b2d9d80f854cb946cd702d076ce093e5d2cb2943540a45d145c0e22c52a3dc69ff278a46751e1ba4 db39a4c5246714fccf80a49a520d887a8f2e33f5e6dec99cb3d8b717b95ec797b7f7ba2691485154171352c4d8d348faaa50f72168a0a8ac4922761cdac42e9f97305e253730d6ce6bf2e72e5c88b30d86e9d0372bf385fd5864b4aa9b492333e0eb6d90e194fad705b9a9800239b53f3055eb976d6372431e9694c4e9b469 6d49a3e4182f09e34758fb925efa2e6b89fc2e7b820e8ff605df9446a6960d099f014a2c541950a71aee75677a871c2d81ecc8654518e3e13226dd0e7ed9c6e0aaa7b2be4c2af2118bd4c3058e0ca8d6043eda24c69c3751524493a1787c20c3780c51230fad06300cd2d161906190ba01956b4aed0b0b2b1938d12bd12c3c 6ebcb75fb6e0ce53dc25429733cb2bc11542715ddf9aed35302f942c9ac1bc0ea1ee18a4d1b09c32a7501c45a91881b60cea11ef61ddfe0cac4bc73caf3a8ef7a0fd5c8e6bcfbb81dc0adec060503519b151e1a7504a53cfe8f0704044c4cbf6a4c06eccc11f7aef476aaf8319488be982467bf55917a403726930d92a240d c3af32db6f83e06f3964f8b22329b7eab6c51b419ecacec0cb45e82eea7af08890a85df3dd8a078c94352cc9bb22de7cfbf06fdc59ce5198d62138d563c5ea959d6950ab0334134c3deb6b78babc9746ef3d66ada708edcc4f70d20252ea79b4c195e9710f558a60b0bbf28ff9d34a400a76ba580cbf8f2f2aea376a82d740 22bb9ea003a3b5962948ccbfb92574683c45db36edf0376cd8a5a83c9032044e23f695d700014054ad65037a273fd8c876f229902e4b64d6f660d28e412276cad4971f1927d85f8c89e7c7afdb59fc341aa415e83d9fee5a0b9b2dba23b499a4593e564758333700aee0565348d981cdb87d394b5bd72eae7ce76c4208e044 9cea3a959243051bb44583223bce68b50719a47f783c9705f461ff40f40de2d284bec99048f8b9558b5aa3bd55771eb45a04d94555e6fdf1be530c1d0d39b8e112704b41ce0d7f86540165aa9dfcfc6aac9e2c1f1adaf871a937aea0b5cb6ecdaf64042d33e4b8e67a8e27ab68946c23a69703eaa4cdf02977273b775e7cac 1071ed89fe72282620873c5c8f501060b6a5a4478f43b19f63833372b5a45b0bb8ba292c97acc3ae6ea644c0bf01565c1a4324a6ef5420dc3b1058c186d5b373ef3cf7e5606b6fffdeebe23d36a634f3d5a87543d2e79b7c4d56c424fcfb06629fa126e6b5b7efa57b809cf83cf078b13ae067da2f9ca4e17c43c413cc4db0 4865b15989d63481cd055414b4d35abec549c0b8d0ccc748d0b617481e44accf8136072a0a736a35f55467fb482d56d5c6115078eb2fdfa1b35d9262fe7efa40cbcffa8548463afc1bd47062a66598269b4af1a3c4ae0bf91f759b9dc51cc18e9205268436b29100e529424aec36e21b34c5b1a81480115a0fb0abc00bf73e b90761bd52b1253382752af2916ea7a938e26843ee420dcd820b5ae0c32f3a96c586e3ac08b55adaa81f8887410a7e4b00db81f2143c59074627753055bdc3c7a2e6146823e7dd932bd4e4ded28bc218ed865c9f8d7a69c760d00dbac27bc455c254d539066ea5551e2654afc675cfd2e17acab2123ab0c65e3e99521ca52f dcb7d5c044fdbd8871d447e395e1de2c9362e8eaef9065c1176a1995d70020318caed30d4edf4ab45986cd3e7cd64d57783523c3b892d27410a3d4bcad5c01a0ef6a92694c9a98b7c040b2783f9a1074d9e16fe6853af21d2ab3e985d904a0e04749565c956ec0ca450c67e6f826c4480c339b6b732909db08ab4550c0cd80 5a585b9d3c52673bbe79f23e0083d1135030dea216596a2ca5e2f4feaf6783238197c21dfe92075a556a793d1aac9d2ebee27da1294665ea9b1edb71c15de79fec422c9d516511315742c97fd880f6717f303d058ff1ea803578291eecc227366d3361f08ac7ba33c47ff14739421098d38eb1da367104667607eb192cc561 e8a80f2ce7726a65ed75f5f0c0b18bbb676cf82a468251d983352bd1a147134294762579018705cb98379c606754bf75149dd2e300aa5ecc8812edbac86a622cef1f51b8cd2b6cb8bdc081f730abbcb33091d4ac5a90d183e16278c69192247db4882da8c58b75dd93a77ce01fc76f55caadaa7017f91c6f4b2e2e7a3f0bb3 f0c839f13d73cc8d8293bc981eb9c5866b9a3b1534c064384e1437023528fa6e6169775882522275040c3e373cda0c2743d078d7a04f5d29b622ff4e55c460909d18ed428078916824488bb49f197ed81d96b67cbb7f36f03039fd1d9bfc5b4bb7091c6584fa240d6d706d43f68c1643524cb0ce831ea345309574cab2ee1f bf1567a9760e4975b57af854ad3f8b95a76718a01d1a5fa977ee6f7d41db653f822953e52cffb8d914143b7cf599e4935b73426e8d55eb7f630d3c2fbf03358cd08fdf9ec23fc4b759455f5ad2936344c2cb4709cf5778bbe53c42a2fdff9df9494e08c26b099fd64e58f06b7b044283b34b220d6f223ca0765396c432a3bc 662e21925679e63e149ea48b0a3591ff9d03a973b74fcf109ba19483eb66187a9556df04bfc88980079080025539219b580c7f7b6f85595f017729a426a4c670ef41ed5570c74b1d6dee3c1a20d6dd4117737519fe81496dbceb0cb6f54326786efd14eeae887cd226f7398a3e316d25f52d5f37b323828d416a50517b6e4a e7dcdebe12cd7ace92823aea4e3e99c39b2b45e978f3e3d4b68576f4a57b28b5c8e3a9925c600cf28170750cb89793543045690d32248b9ba3c7f592cabb34b6cb49fcb022bd128739dd758b432a5ef1bd01c110e6ba2fe7e90c8c3aceae45189eddac411090e34ea00b76969ec399e84948b8b317af70d4e8e429e46fbc8c ee535d79e72056f14fdf84bdd95fb6f1418ec8cf97b48880f7f91ff7e7d12f1988d8d17d70176643d880a2ce377d27f9efcd971d19dfa6b8f17ab7bc4ef1a90192c5d9a21b4bda44adb6b2e57933a60d2f7f44679ab7f59f86530aac0813920c24baa47e3a8cc1e6e2cb49d4968668564624e310230851723e309660ef3ded dca8cb501c6ba2fe14b086d96344fddeb0e209b7877d7bd5d4fe878cb6082de69d5d5f6d516a06932aaa40411633b4b7e3feb851f94394845c661074094cecda80d302d2a5a7e9cb683b9c34fc4cec21092322933fd6bdb6835282ad8e20e0c46ef3601704b4e0153fe1a08d08c4846dcc8d77fa464b899b7d3c06be15dd62 7dea14d40c447fdc6f80a18a1264c480895d8b03d8e660366cf34e526451f0146bfbd5b34d8f85a1597f298ada965187780d0d2f280889b50c00d18e4ea710c1d03b361d0a7b4b9a8d4725dd9d92a40f8b817f7dd7257f2d15795688d36ccaa4c5ca2758acda97542f24232bb30b92d4f4992d788c6904e848b5ffd60d3e77 ded7ea6165f84978c879f8f453710bbb5d19198b38c563cf9670d91cff10d6d381172febce3335bd186995e3673e8920fa73b43cb5fe34d301ab247e9fd7f795f67b2805947ac022cfda235665598aaf238b887cf84fa4cbc8214fb930166fcfc30a921c1f123338101d1d1679ecb7bb3b1e51e00dafa82bb986f9f61406c9 b571aeb79066a84cdcd6cdcfd70d98bf53799a1a1269a888ba4c24e470840a498f101764f5d92a5d6f575894bc6be6527ea89f2b0e387251c9c8a34af1fb6478f49a482de89dfb5215fd77bcd1dd94ebb068b062a9992a4108f3f1ebf313440394f09fb2715d95c9e995c157330702fcac08a1366d675630eb6bb8402f8327 e54a8022b1409e5594c3649ff14443058e5a0ddccb421ffd1697979a900d924be3c6f7568483802f119da1686738079b96e3d6aa432f9c2eb233af9d8c0adf1c257da8d5b7ee0388e51817fe50b0d7a5f9dd8649c3f8283ff52034f2e6828436b9b29876d9ecb6fa0a3cb8f861380e482bf56dffa994f7225d3d1dc03b667f a65ee3a1298b8ff5f5315abef5de514b3f58cd2b83c28aab17f8581d146fbf9e248f4eb056f01ec41e689739ac72d6f055382420743fbb279a1f855121511cd17971580ea4b1a809df10ecec464444acafc6e7e2d96014198ed9bf3a891c61d71db5b00d451550adda9c225aac412be9aa65dbb1539c8918117458307cf0e3 3a50d04720b30c752bab5774028dec340a53c9b9ccd62d6ecb9142fd0f598a4cf4a0c26c8d5f7e5ec8bb283d13201a17b449cfd95405b1d3b8860aad3796fab1e3a3a94805013bf17764cc230a97428bafd855b045fb04095783a84908670a6dab743a0d3318270dde32fe787fb352932e219cad6e02b6072b2e0f69949313 c12f95a256c71ae06d285756dac443fa7a6e6332f640e48fae5948b4528a1aa9947825c8ee43ca95b59b0eace71574c07dacd10c01916fa61e3c4904b5baf81ddaf8157ed27600b1f547efe0b17478a90c4b41f139a427e06a4afdaea2d49fc65769bef1b1a31d789de62f6f657eb1819cc684018018b1bbc0e050c0f4d074 f176760a6a834dbe624c63951e6977b09bb28c7f928c787b01ae8101b77f022617e010e2a13e137468a7dee42d2534eeddcf7b5f377f621e3e653f98a964da7f375991b063ae81bd4586b89a5559bccf1e9deb68966857375a3f312fb7f595d5f1cef91ae58bae549a5e054b4c247bef7bfd3b829124e3e39b6993c9f168e8 65e7dea0b0063052efbbb22b01ed459cd09770b71ece09a6a115667d9e86028ce21c696ef46920c230f478ff62a4fadd93bd3dc09e9436141650b6251e01259fcc48800c883665b7ed6abe106ac781f96f5913154eadf17a95fe937ab883b7119c03ed1b77210646c088c0c569c73398ecda80aafea7a07dcce9e4b4119859 336ab79ddb8aa826afe882b6ac8549042726aaeb294081568aa220e6b264ec8333f1363a848e965c913c860d8f468b57b2e963a42f28cbf4871ac8419e297b4bea4ebbb9663ffa1fe6159250a214c88258756d90c83747e84ba9555511d02adb9bd5be7910763cc502509a2c0909ae5adb592ad760dadc9b5cabd6b5425e6a dfca15a0904ed052af61e409d77976009a5b9bc2a262cfce4ea086857ec043c20c8129e20e5649c838895aec54af9d0bf4dc6c464d9b6b67b24667e6b36e699e135a92a51bfa85f8c7e530a50641582ce89baa2d8596664e83d2d52f55618f0303d589b91ddadda7b87fdfe331a88a7dd29f47f00ed3bf3bcc8021cb63c90a 802dd8dfc62104c58df37b0270ba95037b82402a3ecb6898f1474bf51b91f97c420e0c517f03b61e3b6544856c4bb4c5e426e167e314b4f77323125794f0786ca00081ae0345ef0075ad9a454ec3b38add9ef11c2f31fcaad866f7cd5cb6d20d07b514795dbdc89f77a00ab8af90634a3cb8d31bce450e8ce5ef362bda0b3f cb25aa983c21fd82a4ee68a45fa2e5c1483fd27e02455142371614b5633e5aa22b2dcf4607ec925d60a461c8598a8dd4f66f7d8f274f11ef129373624add11a097334630e43873a9eb99ac8495b0dc83dc20d2756892ae42b6730f228ed47b7672cbae329052454b1e7e0febb380adc51ba89d0743c908c263f1b4b60e4b7f 4844cc8d24c342b8fca2be5395ede85f872bf99f71d9289a721719b48eecc37d16e512cf94e30270e592d2b9ea12db08607f1c3033b0bd0cb65a045466a8e454e2d0b1d619b6767ea791a5022f7caa72f9568f3244f47b38c2f3ce4ba191c09cfaed4d6777c6c3fb54e1b45f272e3cda7c94fa8a23da81061880beb0925e01 622d6a4d1ab1d637a0e35a27ed1ae46d4501d511b3e0616e7f4f791b9fa8725d194aed5b0496c00a7c87f376fc5befcd54375d96c8907c58ab707c6c004a5d263d22ca106d6744d8b9af3fecdb292941d00646ec96c9e9b4c75eb7b2c636d5a9eaa7e209ed2f2608bd14f54a9f313c7551ee688489699f4f523d427fe02797 481e69dc8063dffbec8f76136a32dbb93ff555f631e54a21ce87d2751333c1b5059265c8715229a5fe02fa731ae37a5b7dd0142f353b4434cb1e693b0119bd31c7ca7d211703bc1df0bcadc6a33ae167889d8d6fe2a22884766546911956febdc6661ec3ffc59b4fcd0fa7c3b0775887f251f919a35f941aa56488dc98dc62 5ef65019913809e33e5abda90d4fe37120a4da79d61e3676cdeb6f895bc46e012228bb306beef82e2e6ad40ee1da4cd8dc5919e626c31c8a3e6754422f35770fee9659cb742cf8f7642362fe2bb9752bf15158d6d5c67e42b617050818d1709629475ba093335c2687f3cf90a04805af3528211dfa3c9ac93ccfd78cf82abb 21c8b717c5bbe37d6741acf7b2c17fe0ff1ea23f9a538f0aa76d89bea204b5d054f336551779300e51faddb9ef11b680d21a7430512b5ffc9ebe6d684b3bc9cda6025e9ac6460c51f374e36d4c35522eb5176697c2e03c9d213e12ec32f1b7187dfb4066c3ca80ceee0923c01075fc1c9862a206b45ba3021bd7f4147fd0f6 bccd893602d07fde9976e33be17bec186af2870e312625f9832364613345263fb4d98813b39dee77cccca0410613f7a9f538a70131245f6d1289ff2002bd21994253d5f1c58180c1e8a2b8fa5fca661260043c7a9d5d8a525bddd960cc9e158d6cd58e51e9053800941fc906a4bb969f096196a48c100b7378afcd56372f17 aa8deb5c891ae09bd79af8b6453622b2697a84d494064acfe74e09cee528dfe3b218b96f0beec9d41b53f6e648705ccccfaaf72eb00028edf3d4fb0fe4c7633bb93999e2fcfae53ff072468a8ada44e0090e7dc3b5dd4fa284a936e72e2f9fc600ef23e24364f2c17ae8ad548b4e19ce7082be7439d9e948f31b939d0cbca5 21a24ef72cec3eae0b3bf708fd3313c5a60aa5d60defc56eea51508fdf5c02a366d76699ff03d5e86f3451313cee71c3d7413c441ce9f00b2bc5959e0e2dc4e5288caf3cadf7f4af729471acc283d5db5cc63dd26a6389508784c7320b6c5f0e48e8978070cbf418edb7ba5b84a28aac19b345ce4c50a1f066413c24b5df9c 1fa9d26d73749c1af1af0eecb0d7549820cc7d3796f15e98e1a9ec2f03dc864f6e57a3e7c6e714e170a5aeacdf02a02279fd4c68b683c83192ecd3b459775c81acb661689e65542e5466a9524a03774a20547758d5cf86daac6b0fb47b4eb0ec9d007645ed2a3a1282583789c5c615b32affc5085561091317cf53e64d7d9a 688f5c61608b042ce2902af5cf42c0799e35aaef0a7b2da4453135a8b08d9d051ed73aa1b64388c8469242ad2fe61154d3715b4aea1cc9c055824c28a3aa05cec976484569b3086b43e22e7d656bb263f5402c8d6509f8e165589098638b4eb466b85026521d70bfa96f1890ad481d2f12ca27fcb75ad53138a430232f5d03 b68024be7d4063a26fb5812606d295577a1cc0d642536882b16d70c95a69027a8ebea67c2ed63fa51e5f2687e35337eb6afdf9ff763d6b7155d5616d1f66df53f264ee1ceb52143cb481aff34aad961beb6a466f011a97906f7235ac1482b59caf4f35bf10c106a17849b9eab63dee84e84389ca872f0c55f9c88122b6d6f0 c758d0dbb717bf7c66b04db20b2ba106bb7b51a01f4f60a45431157c3767fbf164604167583f3ebffa0d874d78e54e673d922091584593f45c0653eec563a7115b497984ade01c733126c968a156d562f14b9d1bc3555565f84af0cbf9b67d390d1eea546bf8f53abce45dcb31de4e15aecb10c71437efc777537e89c2d906 249d55ac4d17fe2346b1b68a1696953fa4484d0408e2c8ca96d0b6a04bf78cdf672d99c3d8697a6c388c31bba5f487d68d516e0f5f9d0f71f7d0c12d9030c7440f3f8219d1fce3cd87f1ab5a2ab38288b99f98253a648a350bd78bef72ca7f334c1e92a2cf4f274827648efe4d4c986d6b28683878990269e0d695cc93a18c 7f8f64c4a1a89e4568e43c8e0118bc039c271146e047511ea911a4afe7e01885f69d310c37d0ba5257f0d1a025dc9dc32d23c9580a0ee224ed267bfd6501907720b19126f43b5844267e73aa9ff473382388810eb339c7ab6766fc56ccf74caa2a7c0d66294a6c5cb210fcfb6232584cf7016c3328c54295ede965bf88a6e5 e0cc3d5bb9e023da53ceaed73ab6053f58f0c31258a1b74c90d2402dbc638e4f7e235c9a81c91adbe55f2e4f9cf8de445a6fcf0c7f4d33cf5e7eb89fb1fe6bf6e8aaaa3cba72b90965807ec54d18617b0af0bb4a1308aac8e957b52e5d395f0831f2906557f1ece3c17063cd73e1c31c50f2e2f81aae3412be4fa3c08164f4 d8803936644a984eced76fc2fd3eb150d8f5792bb61351b84d59b9d01b32391848c87932d99074424d0824db25a0c994646c66115f9c47ee44477893342ae1a7b7031ce6d859470e583b8c75e71f34463ea780c87c50db3623b344013bbb98fc8172fe9018487921ed239a9bcb44acfa7f8a69fbcb6131f883be0483fdaf75 6bc76e3eb32e3b353272e9d8187398ae8114e6874319adecb93bc38f2f8c1aa0e10ee71d69d64f3a149a7ec6a80663d80fa5e2253df2b2b4489713f10c337ef9d480854742234e6b715daebea54b2719546999fa791dcaf99c162962a488a0b54de92543bdd0dc09ca49ed58afb252476e3933cace812e910ddf8d88ff4a77 292928b547a23ac37e2fdcf1595f6183c6b69b5fcb4af16ee950750819842d44457a4ecfa9b0401c914116ad58d5b73a4573d22a029c3693b6ecb62e13d7e788181facbfb7ca5dae15be9386758149d49a3565af847ce37e8b9f4f2b1c9f3da84b4c6fe37d03479da226e7feaa71fb1ea7b6ac7fa1ded0f474337888f6df18 1f2adb07179da391f95b5663712ed86bcceae06626b53408b89a00e9ab7d97866bec9f47fc4be2885d7c5757438a886866500f803d0e228ee3e5f83287415814e0525b5c12ccf748b34fa769bf76001fbcc764bdcaef33f75a2fb1a064f9893842385111a6116879c29686939c8682071adbb78c6f7c28e57ffae6568419e2 6b58505a631092c46b49a64951e05d0be79d2034598f03587a322c214c064413810072f4ba8cb847c9b1a6fef06a55a2dc915edff4308e911cdb1f1d09ccf9be8481a014670dd438b17773d8cfa065bb84aaeb476a5467905da4980b7a1c9311fdea5b6a627977041bf74aaa1bd0b239455118899f53291a0c0e4b3c8d0d58 f01ac3c7fac9530025720609865d9f242573414f23a4c184884cadabfe4b5409e7ca3e607a1ea0868217e77f404570388cc484df144649a0504abd9e8c06ef4e8fe3ca6863842bebff55fff6751dd3c17e0083b9eaa3bc6e5ca60fd81f82fd2b2a662563a6dbce2cedc61d270ee9c96b543226f900e720f0c60b784b258c9e 5499f664312b77d1e4eb6d92709c306f796e7027228be42b5b900e414736aa94c8a2f9b8a9c5099751b720a0b1417ded6fcf1d4e091aa8c3e474b7b111b1e51c6caf82c8af141d425e65475af041335ef8cdb22c4816e0518759982776fbd91378a2c98eecdc23d36ebb93a6af735e063f9f0698ca7a24a098b9fea98f0c71 c8abd33b6df1bc8cf2c1f387aa6480c32b978b31a8e72fa9724f7ffa07dbcd1058da143c6110ae8626d427f1efc6bf7e61d98c79b860e468aa22c5dbad1db9d6c81c4cd6c2c0ffdd78ec68b23eb64031b17725b6d59176340fcd113cb6af9ad9825851c82dac499f01669f541364a978ecbc8f0596b218accb1b4fa860130a 2cc6cc108b71d54b78092469172096c9d3d81b502f747355cbacc6747573b002da8d63a30bb08be6565e77e6f8de66aef8c388ba228022bb054d0c6bde488fedbde7bc556e29ac4f6c3335597f5379ebfd24c3e36cde88b49a4e72ac4980da7c17a6492b4193c04827e3bfe7795107e25df2121aaed1886060640777d8fd46 dafa1d4ebe76d5d7b45f8a6a907e69cc66d55c38e7a3071e67ad47fa326c3a6efadf5aafbb5b76eb4658ad84d52d563cd5e53a4558085af5005ad11036c67f96680d882d24a611fea4cde2fd25cf6c925a94071f4bf6ff3322f8129d8660a73328b20287bc2e80157fcb64990b3a2ee994ea93b4666d2968b9624902e9366a c1d297b2b1c71b2a03c61121bd42e8513960ca64d54aac073b72b965b3d20f3fd355d21317eb15698c8a8b9a4f84f8d61040ab20b90bb6c82645f7d261c825e874f25a3dcb1f10b4db4bd43abab67b4b7061f419cb350c923208e8ca8c65398a7c7928209fc6abf82d08c913f9373fb5faeff071e79ff75fb7937e5e276195 8b37f6b0c6c17462fbcc88ddf758bdf1fd344e36cd4d6947a6ba2cc35c0a9939d36cce7683e58641eef683ea29b30e311f128f695950be5e83d892a004678ebde3c8f8d8d8916a7f12d65ef50df425196285b0be8ff4b8b939342dbd843e3cab919212178e2fc5c3627a225e41274485dc7f28e4642410382a5c92438cb4e3 2ddc7263e3afbb76362d6e9542504dc427950df6a80336d76165d5b93774319dd6428f3dd5ce365801b75252ac934856cf75c69f9dcdae1209c6c2cfae1f139911d92d0f154a5d5f21c00c0cde4ba030af503e424827c1b7057399e5f1503d170242cb3bffa736f5f4966fbeb8c9333fcdcb91486800f6d13462bdceca6282 45abddbb1cece414f8107ce640512c1360a01e8784a14155ffa9be5ba9422312bf08ee622683841bb42f561188876d072be23fb02646e63161119f01a691faf0655e6875928f12d461d352ec5018ea94678f74a18bf610d3080f0264f31b6ab50741493db8c0805037c7308954b2657b5d3c2f6f982a8a86537cbfd551cb4c 4c1bddc2ecaf4b800084462464c52380b756fe9d323ac82868f0b476843b6b12cf7888d7e45be3fe8ab2168d0a4b9cf1a9c82d2c53d94097dcc8a9c95ba808757b8ad42bdf4f525419a27d16619e30ff31be2b5464165507bf1be59a66fa379db86d16ce98c6a95e3d27825fa01c90d16c88ff86755cbbac54579b637e94b1 e8db989c65b8b4af9daf4e71d15f75aa65be4e79a9440a62e7021bd412ff18cbba097a341526d66eb035eae1a541db3b21f5cbbc4b8cb2c4b6f0e5e45e0927811242e0f4d2863be6933bdbb87179f354d99e899e3e1d010085c50c59d23653bdf35e881a9ae4352f176e9938931d724d7e5e795ef8e8cd2b47cc8f9eb253c9 02591b57fb345d48ae00d8cd5d8fdd82db9b92ccbb66d9b4f89d5133abec9e5a933f89452426cae8c2bb4984e64f6790f410cc4cc113ce680fbd43cab83886c2a31ede57811e61da4dc51c0e9d965f36a45983041057252632fe7e38a20ba5fc66bfb02349a1321667c6a07f6fef33a97a8e2e9f3e3348c8fc32f230fc2473 feb6169e1448deaf125ba0e0742830bcb698b1f992d1f3a07a6bc286a52aa03e65aa72b4ac989951e8dfa34c6cd1984f180f7175ed611dc5ab87303c7a2961de9bb50dfd1a789b6c048b3bff4a36cc8756007ad771d9c09d6ea718a6fc42618f94e619332eec80de01d30bb169318a19e44fb6852097238d221d4102f76285 cc3df433b21150c0f400537aa52056aea9cb5f8030c5e5b49d8210753f5926f6d85ef9006b3ebdc4f66f4b23270edc9663303a27abc38ef56020b3fdc01716585747456c9cac8987305fee9786bf59170f4241b38c1ad0d4294b84cea35b015bf52a0a73f142d278df4f1011c8696c38a2fc0867240a5190a5730a582874f9 fe454c49bd989be6952ac9bfd7d219d718d2d08547defb57e793e339bfa32a3e44425a365776a1df8e568d1b838855e826f7822427d99a82f19bcb8aa14b5ecb6570fa85871c10e59c10074793aec3e0e22bc98d709780758687e5cb818aa59f3f759401c7a5ed92298d5f59b74f6b184eea9b9168c908609e1d8245e44a33 727679c49f9ee78371843ff1105bcd8ab15a1bb52926bbe0f81dcf9666299bb89f3237e60077c5bb2fcff808839b3be0991161f62794929f9aeb5e5459e97e24496f2e1af05000a6d12957ffadfde6d6d2bc67404f04faec739caabc9fc004ecb08937af3a110e3d341c7d865303c3741a74e02c937403137a4f37cdbbbca9 24c1252efabdb73adddc933bfb6d7eee605e79262f98d747d4f5e62c0ead33d2778c1559889ed63125ef5ba53b6cea71e9ee844101eefdc455c2d11dc6d1252670124a168c55fd43aedec416ed01856344966e70c89f6a6f372eeee25884bf84d52d563cd5e53a4558095906115b7b6e942ec369d377d18000da1dbe1cc4be ad068874d9222d0d3a3f266639ac0466fc5f6a672f176640b42b761954ad82a7574fb389d0ca69c0715c30e72b37d7178dc2b00092c0bb689b400e91c7433951133627bd61b23221c6deb012414d4c3550a061f6c37515a0f23c54e46aadcb641c5d8bed81f511c801c7e13b54398ef8a2e5df59f82df5dd075349fba603ff 0271319f79f573bcee0ec9f545e49f9b083b8d61c33c55f2286dcaf20fcd22a7bc94e8bc193707ec31eeab18a57c5619d815f1bb17860c1f8732465a574a668e35f47b1d2a805878309f59f5b64a5217b399215a0076384ba874beafb8135caea2185ade836552d1495389b0ec6f230272a507ebf00f33c4ca1c5b85a395ae 5b924065aecaa169085c2864ad4329bc054731a8b510e814443d091027fdd6c35e100d46967a2fb9f2a6018a3e9a973dc91fd9e8741bf4f6d1f4ccf29f35aa37ba439587f04ed97e0bd53624028156bc5ae38bc65325143672f08b41ef2196e2d47a60fc778332054765a60bcbda40ef1a192faff26a811d65a729325db934 d95838e444b51fe5d2780eeae5fe444028f9e291c637aa64e988402eb2e7d4d6d32925f93d18eab3ade01ecb66fa8eb298202a94c9e3f24024030dd162897b08c66756bf2cd92f3fdc294012500bd2383313376ba6e559593f9ba2437d420c173fb60b3274c4ccd091ca96d276d63435563fea10663753c3bb859c07a8b8b5 d60b723aba33dad8d1926092dddae3e31010acc1d69900c2cc66a029a91e10e018b3cbaabd813eb1202714b1f221dbcd735fdd75ad90d32036197a8f7684dee75171d9eafb518dfcb3870cac88eae93b509302f3da384ab4250de9ae074495135cacda458861b8478d7bae74bed7b035cb268c04ae5488ab9fb86d839b69f1 38705abbf82f01b0f7139b976bdc09f80a9cf584725a39b2735415ee4a1cacaa3da06e242d339382ec35949be25dd673a2c62995df7d0ac79a45bde93b91f400821eabcd3aa1c5534d3f8e79770de25c76e28460c65162756e55b9f3bb137c74710722aa0468598a3cb7afebb1dbfe77cad22e9654f93790f94629e0d4882b 24b79ee955fec15120b0f2cd29f59ca860ea833e7023ab716d3a15e43fc5130ac41161bc94fa860d077964e589210ee8e383e3fc2222ce1486f0b52634f6a7f003b7a1a37f1ed3bfc0ff5336c36a3ab2910f513b98cc1df9acc3c5d0585245e605cf2ddeb6b07bb822d5f72796b17ff35e822e523dd24a6069ef8baf345175 d46225f77a129154e9dc985cc74238d307a4d8272aa2ff736c428e1a3ff734badbeebaf7114d1afe2c7dcf390eabcc5d54686b1a3ddca593eac4b9a5737a14e6f16cc20c4986070da4b9431d8efb42f6003792044b5984073be785906d74ba0bbfb2a19bc1d465d1024af069c2e6092628ec67feb230f288829b8b83633925 b9242a35a44fb2f946795c125917c9554063cb6e740b7e6d56ed4e070861dffecf723a2ca1dac1ed59a642cc55afb63a54e41fc27ed61ce27ba656107e25fbb53d779201e62034a95a07618666940e42357e342dfdfed3c38d448b9f0f818098ba08dbb645c85e0107c1d4912ac2a3445fadf63731721aec26fd81bcc7859e 1058c9dd448f5eadef0a47915598bf58db577f172c462ee5ec69d3b1e3e8dbee0d46b5196c36dac3140889b89a8f53b11b92caf302f71a62a5c3909806ae315866f4ebe2c05773898697443ace1a3757a79f96b713dca1ec16e053d11e6ed5f27b1ac42a877f32fd2eecda6e44e04808bf109b777702c6c3b9d10c06ca4210 5f15a31995a472a811348b3f68671ac7760af3b5b9eca0d80f3a3cba3fc4f008cae55b377f7ab315dbe2338ebc38b165ad38d4ac6aaea58f46a0882defb5aa4fce2c2c13749a5115bf210197ed59107f58be06cf234b82dbb7ceeb9da3c8b7a1f055f3009dd620c6a43eba73d1b21b5435d5389274dfd82460cf63a26a2c54 8d75a402913c812aa2974ce87850a4560c24ddeef1ec53a1ea9356ab26b148a6aa4e9e30c3fd94effb017d41e5a1c9b11b1e92d25874a17239f0ebfb8e131a7465b09946d9ca665a78d940f0d367e73b18768809eeda4c4365230cce7ffee67d5e850ca8754c97bd579ac36c6605f2121995b6f0d1d212fece438ade5d7525 56024bcc58acaa3338299c419d99d3ece454ca23064139d89dd65937e12eee7d859fd6bbaeb697fb074015e5e10719b3aa0de6e02e38425e9970403bd58286dd868063efc25d08418a9856b8649ce4a9e7d7d7c5510ca5858f3faa4387d4bb11177772747a78e928bb36b3879b2ef749f9b7a831ce5761ef228e660eb8aeb1 f0ae24433d9af3a555afc08c3dfbdc9f74f1db0cd64b8101453a2944364d902fef71d1cac0f97515f39601157dbf76a310bd8bf13c4690e85bcf962507848a27be29cb7ff0e0fc7230b141f8558d06a194c5e799fc0e803a8b9bd5f9558bdfc955d2146ea5ef9f05759590437cf0571f942a71e9643ef081de4c80a096ca0f bb5a234109311865c88bff1eccd8be1dc394d9f099a8600c3e1d850568d2b54fc758d88b6af9e960a18162cd793a8de95fd0a58392e26e6cd662c9cc1a12589a8e0bfa1df1f466c9c575d7b7868d0d3ba22782a6a0f63a50f03d10e606749377e6672f606e32b55022fc9b329f6d50334994cc53c13fed75053054095e66fc 5fc6297fa80154541c5b34afab967fda3dcdaf387074a99f3ba7767bc2a20ed0391f07c17e5b0bc3235d88324859d01a2ebb6b72d3eb0b6aaafc3df45da43651c331be0f4e5ff8c8f0974d98b97678aebee35bc3d66f46306150e8fef0690732ea21975a05668b1aec7dc955b0a3a2a02c8c75dfb1a3138b5711e2a8d920f3 185ff967e4a7ce7df4343a5f642480a2807be5c686aec981ddec06bcf5c46619c51d4cb34ec0de9325a6ee9693d6f3849efce363c4e6d187c0b1095aecd2a9c29caeeb9627465f6fbabeb7c63a2650f6f77d636012445690c032459661e9f4c330f733744626646af8dd235a4ae2e841a3c0637ddc3cb3e93fa48c51a84206 0ccbe19ded9d784571db78235115dd2bacf6fa0579b1e77fcbf19fd1b88aa57551e869f0aaed338d2db14d0968fab6a02907e0e5aefc2fb8aff9748576d2fd1490e50425e6ea36e3536d696709f072e0046a271fb772b8d9c0812834ae6b42124d29ef360ac09152de058adc9afaacbca9f9012247b74459bd84ff3aabc1ae de433d7a4efbb169fc51e12f2b9bee837e4888ac1b76739d82e99e8d8056479cbb9a957cfa8499594bcaac8899d270e149d664c55648af1ca0d56de23aad43be627bc3ee7051cd1e17cf12caef2f4de2578e06170a13c01ef38ff72ca985114212dc6aff41c50f87150f2fd3db8c6273f2ca478a19a7cb92427c9c339447da 84b6297c2f95d04ddb2440d227e55023f2d2fdfda574404e0b274b7dafcf4d993756b8b56094da880ed11be1dcada1080cf8a912c0f6e206307590f797414ecfec6c691254f520a2516610697817a4ef0e1354b7f3b66226c8b403f4955426a651c0237b54da17e15598f62977a0f0a4bafa09f64c730c016ec8b163413749 2d0429e247d1374e3d1cac75fbc0e8820158e776004e542e7f50934c9f4b477776ff5c567561a2100f08af0343d4131e5713fd49c996aab67c0b1c0947c280fb78973c06bd9f590f9cb25cdbda2e342aa22f9d45cd441f130d206dcc38ad026ecd85c0258ee98de88cf1ac5a8c038ddf87c48ac6c5e64708759968b9887a4e fc00e5d08ce8842b3c1649b5e54a00411b1587d76acb57e3dbded888141e4c3f90ced5b3c5ade78e6b6d12297584eda04e1ff673ef825437abb45f32f721b2803bbbfeb31d93d7573ce70f8f61391e3a1af911375434db1054fff2a0503529b48b891680e15e3f16d46556365314dd5d81629dcb31ed07dc32c2b1bfeb1935 685e406fb5fc31ca37a306c213053ade935c9bea95fc2f6227fb3e10d5d617f3d64b31641d8ff54ce1c6c960061e02908b3c1e4f088c457f345ceac29cb05986c09b51565ae11d89c807376503c6a152642b693367326a0ce6e65b48b2b07d9395e3daa04d30d5fa14b0c4d35ef65db3519aa866cfbd9035d157639259a34c 21bf729e12537bd5107566b8d089a6fc47fd3ebe25e9884cfd77579d3ac5f9d5f3d0f26ddde548193f8df07fad054a6145dcd353a53aa7b4134dc06df0a7431d92e4e826be68def13a2c904595d08bb71360a29a5e915a0320d019ae20f0cbe9c215fbab7313bfad387ac60f766e26ced406062dc33e908be782abacc9bb16 f68a468b4edf4dd11bcdda9712575249c2aef455a6c4281426df8fd595ae3543a33b8ac9ff42f202b11472bf35006ca1e953f3f8cbdf4828402ccbc7351409193d18bbedc5e44d4359cd46dd6af0dff1ab9c361a319e628e7daae57d145b5633325c4454d821ebcd57f14e8d475f157e7b7e32ce47fd0d1c2c5b6d46005e93 5cad8e4b9736db6533ad14736270d8ebd87172293a1ba351ebb1b49df031f97b4db7d2bc8b7c8b660a4fe78af4816a5e123651eb5e804ae2e94ae54c17b5be968a5af1438a965a57e9f2f9ba168e55c346c11dafc8d2f4bbde2afa19d0576340a865a3da4cc556ff2a7e620333b6e5a83c601d4ceeeb6242ed3a07e0b18dc3 c1aed25b27a74e8e5d5ecd5afe2bdcd57f0248b1d0c6e26bbcb040f7f20d1149884aef92014465eb9a205716577ca2e93cbb953711317884960ed05d4896c6419ccbf960e7a29790a14ea30390614a4f843c22f253c070c41e70e67e323f74452b6c4f1a598f8b84d9353443db4fc7721b5f3e6432f68fd9619aca2cb8fa0b e2f56c57d004f068e4780940a4f7986d26beab8c6bd3753feef6dc34e0957f1265438c1f5279630eabcdeed9ed7e8d22efc60fa98761fa930b7cc14a2fa087ace3dc45473459298f61820cc6f7a9028585ea1fed8d25528ff063d8d4c131da0b99b03a8414bfb286a3e41c013ce5055e93b2889a8034f0cb51b00e657970c5 de52e263dede0861497404b86694437ac2643a753f1682002e947a5822e0b52c1cf9c9f52904f6e2b1998c0e0f880327e35eac4252d52e52ab2c5f4d440a40a69ec8bd2b0efa87f4283ef1ef9ad3414429d572bef98a6df87c0d24c0b8d9f33c5430cf12d627f9372e0fdb25a28af925c1ec95921813bdacacf7c1f6195a9a 1ed7d7fed7df9a3df68b1366f9eea34fc437b4dd78738c2701c6322bf732d61ea1dd3eeb38c3ac10de840fb4a7cfb03c1b23d815d51fc77ad6551c6782e2a1206adeac949ed0ae6cdbbb1f20150f2e1a75a8730d70f0083c070fce79541ec0b2c6e6f1a91ec8c509a525b0be7f76ea7f4f17981a0eaf9c0af95d8e45da4be9 8a07e567d7b5a31b161c14ba138a29fc704fffeb42d1f2f7d6ee3e31adcf5f323ba3b6466e77e1751e390ef49f682f865ae68788c7da3c2bff07828010b072bc1fb9a163c6e2796adaa6e2a623cdadcfbab371c2bcaf7adb2f8da46c07692cd097013c8fc2377c15a75b5e8cecfbcb8483def7a4cc62e2305e26df4b0a8e1c 79de4361a16586a4f1bfcad1b44aa103ea3bb553094d689f5532bebdfd6e0cb21b0d071656a69d5321679712e3957547a4e6bbe527a734ba59af93ae82b803e0b0ccbb1d5c771ea0ca8602b51b89c22fba82cda89ef3dde6dadf07ecbdc3ee1528a40566b22bef138eb95985da8e2e9b9a8b6d839999b048d481a460914b61 75a3f8dbe10d7e44acd6b7e7c394bd717e7edf4e670858c0d84c5bbff06c9fffb0231fc4d7563cd79320729e8d03ab47ccc8d7016f13ac6ce5862bfbac90eaec0ae22222bd838a9be96d2fa24cf80636e5ad658f45a3ea63a588a14550ef3a81f898b4afe83c8bc2f04954471feb715374712539158ee5567b2b3d3e454ffe d3c0eab4202ae27cfaadd673da7f9655888efe008a07f50168d1e8ae5368f5af3b9eef2a2fbb0808773a22149815bc5902aadbf6ab7bffe6e1cab56a99d671fbb2d8375614388bc2f452d46aca0d318afba07ffc17831ce7f8da474c995aba7af56583a2425236b568b7aaf216131bcfcf099aa14db701854218e746b40dca a974b9f3b63a7f6b8dc348ccab4fd21edb7150876f27ffd5d09d27dc365f5e08468f178f8005133a14459059cffb60dc48da774b7583344395ecf7a274caee349725143548875cd9cfc74e14e8c4a5c7c03cda2baea7b463724cc6028addd5bd71d2630574a5fc96f8c13a75cc2804f1b1f7f195c1166900157466537f761f f51eb0db89174a040bf2dd160f92f24896c998139a115ce941ec46e1aeefbaac7b0cbfa26d764070acdf094cad687f209090f98d38d4f3918b2acad3b5b342c94d2114acc977e40990e2ef16413e03c8442d8186987b0adf0bbe2836aa434a6d44f3ccd7eae175fc02abb0db726ce79c65cee83c9ac23ee37e3bba34d8c03d fcdc68c7a130b13e566ea129d8af8cb271fc2519421e9c4c55c6d029a99093f3290a9bafa66ae6a22882731e6cb62d16c6c23590583c0c21e6e0ffbe466f15e0cace20727ec72e06c7b03a3db3620b8cb12123f8f2648e7c606ee233404462681b8979e20fd8e47e6c42f0e4705f60b444c299b6e4f9200dd60b086b166e3b 05c3aa67bf2625eea32fa4facc8fe18f980d2871a0fa6cec81e90c0c7d0d88fac1d91af8377917bb8834c6d428d7e6dd0febcf651ff687ca55a6d207003f30e1d1da0a19e560f0121b3da29e3ba68248728f453a7829ef70993743e153dba668df62c043bd8904406c80f4b396a7a134b1addc90934cf3ee949fd26a6ff9e5 e01d72540caf415f97f26dab45d861b70129187c07bc667856c74c39f9d27b6060f47f5e16df2e611574b3148cb4ce1e7c431142d4a992f3ca7b66e524c0aade577dc4c22d27ef10aae6dc4bb0a106a2fe2fe379c752f91dd4a98146ed35d4470746a9fb8949cbef8b6017f960baa82db48f5f71142e9442bcb5452980b9a0 c7e699a663bd99e8df94f5591aca08b8e1031952e1a8d0c141b819f9cdcb39f952b27e2026a18e8e3f6ec026c987f4a124d18a383f9ba4f9dc883e3f1b8c9262687a84cb854c7764699538519fa10a804a54aa7feb1426d80919f8ed1cfda18ee5cd138afd66a9ae0f0882a28a207fe355a2270701057e40e7f83d43ebd5b8 3aa2e6c1435e4e3f12f2540e70b2da3e356163586ea6a41be1a782b0e460d5e1a3cc317b96435c3ce0e1f147959bcb5f74e42fef522cabf2334b8fa3971c894ea0842306f4a9dea99e46163557ca4c93c3eb10493643782bda19511e8e763faf815051af4b30dd72ad3fb775fd29e33b9109b22a8682426e36671366b0f615 def2a72b09286139acd2cf7dcd487d068485c559b0d5adf247bcffc542c9bacca6271a46e9a5906db57ea691fb85cfd966f40422997d9c67a39117804f4da3a9158add2cdb25a98ffedb70fb947c221b0ca1f3d24a89871fc16cd1fa0aa5dd312f8153ec3c1bb9ff62ced28f56a064947bd0559221a9c478e341b5681569d3 35444b2b357d2f142c34fb86e5bd5df49c1837034c95b12b3979cf08f54330a1ea420e597bbefaadddf284671057e243f2a48a3e7993a116c0b806ba232b0e31897349961ba6516bca4c3bcf482b0f05f27bd36b30580623048de317b82f7dc41c9b45091044a51db54fb1fa728a70ea90ebf6f7f812b5fbc9a3cafdbfa54f 16d53f2c155129bb21d94c22a7f9c444ed47c87f0a0988ce25c802ffb20da648085e706fe36c01b8baa3371fa2f11df97aa9d08b7fa819049b607cce3c16a7a5ed4848778105724f7bf2ea2d7b04d0368284b143a3e7e03ca448e4ad7765bac6718a6fcb285fa415671c24159fe77788d9b4213f27ecd65935f0d2d4c92b18 37ecfd8b513c5b77a5aef7d3102ce4b862671a13b1fc29284e36652744aa7c9545499008d56e6d1b42c8ffbe54586a464a0a834b95fbbdb449164c8dcd4cf18c7150f78d6420257c1ba47ad7b86d1bd91aa88b284f604d455852c3551fd10cb4917835965e87a0a42f86eaea2d4571876df9d5237965dca6e4332efc683e3a 6376b09c4ab9c9cac459910044dde61b776f87b9353f9c93e68072f9947a54fe6ad8ff874a12653badfe2f6f1a21d47dab6c808bbf32cf3dd3ceb95a2bd0b273ccc79549c590377df9c4d1b2e056033cd694b3ca7923abc563d9aa27f85fd895b69a3f1152410cbe526e704ac4d568548893b0a16fdb7645aef7ad09c33064 e82a457f5ee84634032f63e229792b952b65c909513ac03ecd1a4a22ae605e087fccdd1e17a22586248ffbae45cd3b8c80814722bc46451d15e97ded57ca354d85ba70bff0cdca4a47d876593eaf84c59e9abb3b10aedeb9e8aac86ce8019b5c7831b1a3241d88f56e8d436620503fb86d035da5068a34f7a6ef6f1d25d695 9e8451a7cad54bf85624eeb2355978713578dbb847ec7605d1ebe0aa238a4de8545ee6d4d6d9b719044a39989867ce69bbc8445c20466a7e4f5161d0a6ae263717db731e1eb08f4e1f24d28ea2d55a63d6d2b1c717e4c171511b51c3ee46b039179fbf69fcd3c5c84318add0a76771650e8d1d3ba948abd048e2281d5a0ed8 ca90a7196ba4fdcb202265f0b6faa659267a492009a28dba3787f07f4af3770d64301ed11e13a9ab9762b1a110729f9db5d39562a1a5aa96e34082fcd4279c7a0646e3fad1380269d0d9cdf546a08ecc22b9a6dbe08d75568de8540e9c1e6a4795bd39bc712810a80a6fdea258e4936481c7a4b7d293eab715a331af11df78 4a66f2ca8241982d24e5ccdc3bd775bd08e00d873ed022384b63a5f023ff9cc9cc5c60f3ecb64bac383f380cc3de3a2746b4225db983663d179bbb063fd5bf8cd6a3a7a84b9a273087691e1e89b7c7d65f18d2454d3704993843b285cfb54557cfc8647ec40f90234ef022576dd05ba17b07c45caf035873a18647618962c0 f37583a907bbdce2afee783a8a8b46bfae16c33e19b34ab8c2926e568b3e16ba66feb54ffab3c3fd353d15cf35085f1d59cbead0192698e5c26bfe498119340df867ab86ff3e58f061ba5a061d274e809aae1f7513a28eed3d279f3f34f2de44cfa12aab0303d311b7c0e4b4cb66dc3959fb21b9c26348068311738cf2258d 5381f9dc01cdc49dcff5e588d9fe854fa4759395cb1dc51b58c83d4b55fcd3da70272881575b5acd9c11de97b79702ef417d0ac199bd5185533911dc5b4c8ec0db6e96e1a3c00477ce553b81a0f610d19c837699cbbf9c0bc4ed8dd9ffe6d13a8008b20d4c52135b6a9e515ea4fdf2057d9d4312ac75337abe16da9d7ef1bf 07aa4e4e8a5dff5381619fd1f2353a4de0ca3330417f3ebf9f86cb5921a1635f2da48f8aea9fba25db2f4d86ea8ff54ad165b68a0f30c1835b944221e4a674e9f805857bf7c93298f147a529636ce2b6aab94e37abef08e8261d74633ceaf5ae110455a53ac96a14637677d4f9392b8927a6031d0eee4b004ea1d41cd5c4f8 904c389bcf5c7ae18f77dc22438742eef46e018040a03144134968c92b82f88e22a9f9846f506444d5fd43f72c9272235fbf0845b5a0676c803bc61d66d5a18a2fbd447761c41fb79a30c90cbcab35840fb14a9bc8d5d6edb19f70b420d81df60713b6cac192bc9ef006f7af35114461cc87fc50a2323cf30af4788312239e 8546618038952f0e93de5ac06ad51551b8e968d49c16e7d59c7738e7e69798bc9f04b2b6175d24f33ba2eafa0bc36a5226b368c6636bc33334ab4b94ae08c4f9370bb31da42f53c3b76cee0da4146e99ae0f57086c479500c6d2342297e3d4f49f556d6934c312bd3ddc9beb1c07119dc1d91c20f678e7e52d1e0494859f6c 9dacb7ec450aa2047ac38fc0d3f1fb9b794eefb18e62daedafaac5bc083c5a8a0ef03c176195dab2c5dbc8aae1803e3a811369d1ea946c0eba323ff60e5affc5b60194997eaf8be304b65256d10ad5bfde7da1378a94902ee2005981d9c9ca902875fb9354c1ddd201484fbfb851e86a5d6dc541819e67d8ba415912f7f2e7 b1def89c663dedf9b5f2633f1c45f5529f944466bb5c0cd03ae26c78ab1c5491ff310f335d53d967214b2a5e2f0ac75a66048ebab664c15a69ea7c256c40783cc9f001aedfb315e16607a06f4c9cde1034f27e05a0e6a73381d83a5e678ba952308a6c9b73c98cefa070d3c52b2ecaf706b9b247fc88028c710c8d5d0aa49e b35b5f4006d43e554937605e1f5712667e46e63eff3f1082257c82669b1cfc8815b3c3e87069977dc980d23a145e33f43dbf5e90cdbdb684f7db8d66f84c50a594f6f4b4057b58e6c5e27b34df4ea6849d4668efd8d402eaf6dfcbf5c54e4f52d15f7236def60a892a9e300091e438d447fa6fd26435692a457e5eea4e2d69 ef8bb74daf6aecf57616fb6be91598ac5fa15d4dcb0c5806d4e43db6e526564cc3e2122b6ce50b5c637de8fb1b5bafffdf51214a8355f74cadd668f0d9b20e5bcee2a1485f2599088cfade4f5496f612de6f7607bd76d152c3f26944de667ca264af64eaba6f6f0fa1841e860a73075cb8e98792361b23a4cc2150cb9842d2 59f78e62959a21a5873e190356117a31e75377908e48f249345f9727c0c9d1231bb2ac7a4533b9f2f3c2f479fb24f38cde23dd8e29a7d1d381b92ca4557225b4a796cd5abe2cdb90d032189388fcbf9848b0602efd6aa662162b53a8c83ce3cf06a9dfd0f0ecd017e7c0a1c1adb88f64c85809fead4bea4b639ce4e74e008d a9f35970a1e9b973a878d5d419b43b8073c3dbbd829f07c45694edaa1ab98dfdd823830d663930ac316ea0c52f5e290e02b26fbb07d18f57d7bc4e572822f494304d6458efa42222bc6486acb53674595a913d613952fdba9e59f433641f01dbb7a7a2a16ca96480c229feaac7242ec15a7291637f09a99b3160c6ada9a478 e1b276f6d77329cb2f9569b539b24f174e2ff12218aafd06abd1b663dd42d1089ee817719ea0e7bba089e167bec881b68a59bab6556106b128126bfcc1be67017a2beb29e307d5a9ca5e6d916b2f829964f13a06249e1bbc41264eb0217462365451e96f4e9ac13941d9fd2fc1fd8d4aa2e6f14ef4b99d9b4c16a3850e2423 a84130f218a5cf5a64d467f7fe0f027c12f79c1ec8db81a4e4d584559d169ce624cad2d3c53bc2293e4de6e70a1f516e28d96710fcdade6a305816673be3f463cf03e98941162c265ba8dc5b88d2cd7d6e9ce00857cd7fa9498655eefa74e85a2b8ef749ce35ae966a9064052ad5a192bf7c5d9e9f7bf0f4254dbfed25b52d c0c98ea598b6decd079783a2524a25e7054e0280923537f3e00d05baab5bc51d67442e6bb14986248a6543e90ea9b14f777b6d575bb07a11996c311c98ae4a90d983415e0e6d14b2f509acb555e605644dc9cde6968e290fa223441dee889d832773e4b0b66404d7b583fb76bfc4a9b5a708c852613ab2212032ae4c59c922 2cf397dca566147a468838e2267fd4a55f2daf9b54f0cc55db9ca1ecc1a997a596a82812de11f0770b5eb5dde5412df05e9e02039e6d5e7d428c493b36d76b8208375861343469c5af66ff26ef2ee0e8b21f6c81be86d5bfe42d563901d8efd57f9ac0cf1acba4ca506b3499a790677792a528890c0562f44b6aa0b1608ee3 fc66c4e0e0b8432ea1b2c8adf009c14d6bd099e5d55457d0143628b907d3aa00fb6dfd690b7f6fc45c60cc937e99a3945719987c4108186762dfe0140731e12169d6b3cf6fc5cbcf1db786aa88068044b5260aa9bf8fd767f50691b123208d7cfd3d8805076a456b3455d36c569a3e7fc38d466f57f29e38aa97d030e0f4c2 fcaf77081fb37259948ef21c4c51b5b2661acb8b8e5e230346e19b03233fff6ed14c73092237cc8becda676e0c3d4205689d9b506bd0a079ab0f9ca49bb06e383896fb00f2a6b9b3485849fa6f8b3dd14946dcf5c5dc260800d54365fc619f594733f55fbb7e6b8c208d09a480a1ba1193f48f56416d6c36351861eff0ccf2 3990ff8a012f1652d082d061011cfc98bfa9d089fad96f48b275267710da5ec1e1ce243b609bcb72ef943521be21fdda9f24a9da985a6df8f0300ded2c5416313dff090042b1434952fe7ba55f07c19d97b2a8587e90431ab7375dff1a818e218340116c51c0a2c96ce249221a3f9c29f1f9bd7cb7b6e4595fa7764640ab41 9a2d69249c0fd1a2fd964f101bb46e61680bc62b1f55ae93a027b7c777611891566d89c1a33b999317c2a196cbfd4a6f8ec7f53ea3a9ca213f6dfe86f6ee51dff65aaa56612b1d78d55b23834a629c1f8b5347e8179e33ce883e0540d1a3036c163f2ce26ee6042fed8eede235251acc8904d71825ba22be8e34c2e06b0b01 6cb4584614c59abc462ddec40a9d43cb74e1d61b99e60a1dad094a33528cfb83bad8e7ce451c41b2a9c1c0fb554c62793e27553534ecf0af92ff48492fb4565f05cfdc2ff70f3299833c5c62912601ed94572c03430f4906d9d9298619d22b421b198f8323d5dc6c48a193a856f22b2a3f7adc218733d2dd9e6540879bb5c8 aa75b45fd299a6711eadb04410121076e0372b3cf7e22c949b51bf5c1d02f6fddd7a997fe2dfbb863bb96314cf130fd0a76dcdb21ea3d04f24d2948d4bb54e5070161f92e5212bec9da48827d791a83390aef110183038837cb513d717bc6b5619047157185121910a60cd0d6ebd5e6139d630be33d660e5380c11dadf1275 2f34d2cd155aa8d6e38553dfa89e2dd9964e0ade344e0d8ce50ece046db1496839859b4bdd3b4971af731ab12da964b0f7d4f220ad692c94473e176eeac031f237d8f0d576076ea791a6b670cd5fb4936a10acddeb44f4275183424b437245ec1729004edfe5e7e60d9ff533a606c69c52adb0d78732997f4d62551faaec01 e49094465d6fcf339ffe4b841fb20bb75f67f54d5e30993d1e24502d602b55948720411530024b3e5d8ac52f9a840fc5c7c15a2a9f652261e5d144eed3fca65d283db21c90cf1bc9c98dbbf6d2b0113a7d4c237d255b2704c5f7cd8d1f575d11bfcb3cd27a416605388b500681e3a41ebc1125a8a3fffda2db0dd3c7ca9eab 670823e8afe16f5628a879482838c09f00e780288bc2b470f39298d666e33142cb8068c4c99434368fc19638844e2fb241a18fdea88a6578cd9c311f6b36125d953c9d1d6850c006d1a9ad0bba7c4bed86b92befc612414e6ad90f8b1380a7d22a48f1cafd8cc6f8cd3f7dd17a61a5336caaa3a7d8ba40925585d41d4f1172 ecdcc2c3f613d6b2c0bce2c177b3445337fa2ac0038cb13e5636e5af3f5e82b387d6aed0814370dce2899abd93db3f6c576f7e3c9564c89dfbe904ab963e41716d9bd730cd79916a3de3b72fc19a4bbf350050388c7aa3b3a7f6bbb92208e09d48401d9e5af523aced2e3663abb00f34aada3e7a234e9f316bdf66dc19f95a c5d434e7c0f669524cf617426aacec209138d160d0ebce8ffa1f36a308937c09b84babf87a9e12ce22dcf4f74d766690c538bfd7e2f12c2507a9b8ef2941ba1103452b860c89d9e9ce5856eb68724d0e179a7c56509973502700879fc3c62dfbf427d9fddbb826884e4ecec9b9fbf52ac0550e9754ec76a5714a12a8832e10 755e0952b3f4758af045dd6050a930512f9b3120949349b9e8b88fe8d8f95650687ecca00e5882bace4deaf25ea5215cd4d150b675a5e74118e40b0647e54590262e0aa4b01a7cc80401ca6b3f064d9ebae831e5b4a318e0a3fc710887f3877ecbaf0d8a379ab23bc9b19d9478ed552c1bcb5f70e03b34ed8429af033fa1b0 8d99da8c61c26bedfdbbd22bad46b97a731d94ef4c8641e0d7f2734f6ab08c896d2c0b1d4531bad9d880882d5cde429616015ca37bf416e2b5fa7c68cb32af6d16d1980f1baf477d6a5205c640ee82f29df0eb4c4522b54a01989ba42fe0bf94912cb426ce2da3d0fcaa730b9cecbbf12a9577 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark{restore}if %%EndFont setpacking %AI3_EndRider [ 39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis /Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute /egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde /oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex /udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash /.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef /.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash /questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef /guillemotleft/guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide /.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright /fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex /Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex /Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla /hungarumlaut/ogonek/caron TE %AI55J_Tsume: None %AI3_BeginEncoding: _Device Device [/NUL /Eth /eth /Lslash /lslash /Scaron /scaron /Yacute /yacute /HT /LF /Thorn /thorn /CR /Zcaron /zcaron /DLE /DC1 /DC2 /DC3 /DC4 /onehalf /onequarter /onesuperior /threequarters /threesuperior /twosuperior /brokenbar /minus /multiply /RS /US /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /DEL /Adieresis /Aring /Ccedilla /Eacute /Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis /atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis /iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve /ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex /udieresis /dagger /degree /cent /sterling /section /bullet /paragraph /germandbls /registered /copyright /trademark /acute /dieresis /notequal /AE /Oslash /infinity /plusminus /lessequal /greaterequal /yen /mu /partialdiff /summation /product /pi /integral /ordfeminine /ordmasculine /Omega /ae /oslash /questiondown /exclamdown /logicalnot /radical /florin /approxequal /Delta /guillemotleft /guillemotright /ellipsis /nbspace /Agrave /Atilde /Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright /quoteleft /quoteright /divide /lozenge /ydieresis /Ydieresis /fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl /periodcentered /quotesinglbase /quotedblbase /perthousand /Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute /Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /apple /Ograve /Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron /breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron /_Device/Device 0 0 0 TZ %AI3_EndEncoding AdobeType [161/degree 173/notequal 176/infinity/plusminus/lessequal/greaterequal 181/mu/partialdiff/summation/product/pi/integral 189/Omega 195/radical 197/approxequal 198/Delta 214/divide/lozenge 240/apple /_Symbol_/Symbol 0 0 0 TZ %AI5_Begin_NonPrinting Np %AI3_BeginPattern: (Brick) (Brick) 0 0 72 72 [ %AI3_Tile (0 O 0 R 0.3 0.85 0.85 0 k 0.3 0.85 0.85 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 0 0 m 0 72 L 72 72 L 72 0 L 0 0 L f %AI6_EndPatternLayer ) & (0 O 0 R 1 g 1 G ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 0 68.4097 m 72 68.4097 l S 0 61.209 m 72 61.209 L S 0 54.0088 m 72 54.0088 L S 0 46.8076 m 72 46.8076 L S 0 39.6084 m 72 39.6084 L S 0 32.4072 m 72 32.4072 L S 0 25.207 m 72 25.207 L S 0 18.0059 m 72 18.0059 L S 0 10.8057 m 72 10.8057 L S 0 3.6064 m 72 3.6064 L S 68.4102 68.4097 m 68.4102 61.2217 l S 54.0098 68.4097 m 54.0098 61.2217 L S 39.6094 68.4097 m 39.6094 61.2217 L S 25.21 68.4097 m 25.21 61.2217 L S 10.8105 68.4097 m 10.8105 61.2217 L S 68.4102 53.9717 m 68.4102 46.7842 l S 54.0098 53.9717 m 54.0098 46.7842 L S 39.6094 53.9717 m 39.6094 46.7842 L S 25.21 53.9717 m 25.21 46.7842 L S 10.8105 53.9717 m 10.8105 46.7842 L S 68.4102 39.5967 m 68.4102 32.4092 l S 54.0098 39.5967 m 54.0098 32.4092 L S 39.6094 39.5967 m 39.6094 32.4092 L S 25.21 39.5967 m 25.21 32.4092 L S 10.8105 39.5967 m 10.8105 32.4092 L S 68.4102 25.2217 m 68.4102 18.0342 l S 54.0098 25.2217 m 54.0098 18.0342 L S 39.6094 25.2217 m 39.6094 18.0342 L S 25.21 25.2217 m 25.21 18.0342 L S 10.8105 25.2217 m 10.8105 18.0342 L S 68.4102 10.7842 m 68.4102 3.5967 l S 54.0098 10.7842 m 54.0098 3.5967 L S 39.6094 10.7842 m 39.6094 3.5967 L S 25.21 10.7842 m 25.21 3.5967 L S 10.8105 10.7842 m 10.8105 3.5967 L S 61.1973 3.5967 m 61.1973 0 L S 46.7969 3.5967 m 46.7969 0 L S 32.3965 3.5967 m 32.3965 0 L S 17.9971 3.5967 m 17.9971 0 L S 3.5967 3.5967 m 3.5967 0 l S 61.1973 18.0342 m 61.1973 10.8467 L S 46.7969 18.0342 m 46.7969 10.8467 L S 32.3965 18.0342 m 32.3965 10.8467 L S 17.9971 18.0342 m 17.9971 10.8467 L S 3.5967 18.0342 m 3.5967 10.8467 l S 61.1973 32.4092 m 61.1973 25.2217 L S 46.7969 32.4092 m 46.7969 25.2217 L S 17.9971 32.4092 m 17.9971 25.2217 L S 3.5967 32.4092 m 3.5967 25.2217 l S 61.1973 46.7842 m 61.1973 39.5967 L S 46.7969 46.7842 m 46.7969 39.5967 L S 32.3965 46.7842 m 32.3965 39.5967 L S 17.9971 46.7842 m 17.9971 39.5967 L S 3.5967 46.7842 m 3.5967 39.5967 l S 61.1973 61.2217 m 61.1973 54.0347 L S 46.7969 61.2217 m 46.7969 54.0347 L S 32.3965 61.2217 m 32.3965 54.0347 L S 17.9971 61.2217 m 17.9971 54.0347 L S 3.5967 61.2217 m 3.5967 54.0347 l S 61.1973 71.959 m 61.1973 68.4717 L S 46.7969 71.959 m 46.7969 68.4717 L S 32.3965 71.959 m 32.3965 68.4717 L S 17.9971 71.959 m 17.9971 68.4717 L S 3.5967 71.959 m 3.5967 68.4717 l S 32.3965 32.4092 m 32.3965 25.2217 L S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Confetti) (Confetti) 4.85 3.617 76.85 75.617 [ %AI3_Tile (0 O 0 R 1 g 1 G ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 4.85 3.617 m 4.85 75.617 L 76.85 75.617 L 76.85 3.617 L 4.85 3.617 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 g 0 G ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 10.6 64.867 m 7.85 62.867 l S 9.1 8.617 m 6.85 6.867 l S 78.1 68.617 m 74.85 67.867 l S 76.85 56.867 m 74.35 55.117 l S 79.6 51.617 m 76.6 51.617 l S 76.35 44.117 m 73.6 45.867 l S 78.6 35.867 m 76.6 34.367 l S 76.1 23.867 m 73.35 26.117 l S 78.1 12.867 m 73.85 13.617 l S 68.35 14.617 m 66.1 12.867 l S 76.6 30.617 m 73.6 30.617 l S 62.85 58.117 m 60.956 60.941 l S 32.85 59.617 m 31.196 62.181 l S 47.891 64.061 m 49.744 66.742 l S 72.814 2.769 m 73.928 5.729 l S 67.976 2.633 m 67.35 5.909 l S 61.85 27.617 m 59.956 30.441 l S 53.504 56.053 m 51.85 58.617 l S 52.762 1.779 m 52.876 4.776 l S 45.391 5.311 m 47.244 7.992 l S 37.062 3.375 m 35.639 5.43 l S 55.165 34.828 m 57.518 37.491 l S 20.795 3.242 m 22.12 5.193 l S 14.097 4.747 m 15.008 8.965 l S 9.736 1.91 m 8.073 4.225 l S 31.891 5.573 m 32.005 8.571 l S 12.1 70.367 m 15.6 68.867 l S 9.35 54.867 m 9.6 58.117 l S 12.85 31.867 m 14.35 28.117 l S 10.1 37.367 m 12.35 41.117 l S 34.1 71.117 m 31.85 68.617 l S 38.35 71.117 m 41.6 68.367 l S 55.1 71.117 m 58.35 69.117 l S 57.35 65.117 m 55.35 61.867 l S 64.35 66.367 m 69.35 68.617 l S 71.85 62.867 m 69.35 61.117 l S 23.6 70.867 m 23.6 67.867 l S 20.6 65.867 m 17.35 65.367 l S 24.85 61.367 m 25.35 58.117 l S 25.85 65.867 m 29.35 66.617 l S 14.1 54.117 m 16.85 56.117 l S 12.35 11.617 m 12.6 15.617 l S 12.1 19.867 m 14.35 22.367 l S 26.1 9.867 m 23.6 13.367 l S 34.6 47.117 m 32.1 45.367 l S 62.6 41.867 m 59.85 43.367 l S 31.6 35.617 m 27.85 36.367 l S 36.35 26.117 m 34.35 24.617 l S 33.85 14.117 m 31.1 16.367 l S 37.1 9.867 m 35.1 11.117 l S 34.35 20.867 m 31.35 20.867 l S 44.6 56.617 m 42.1 54.867 l S 47.35 51.367 m 44.35 51.367 l S 44.1 43.867 m 41.35 45.617 l S 43.35 33.117 m 42.6 30.617 l S 43.85 23.617 m 41.1 25.867 l S 44.35 15.617 m 42.35 16.867 l S 67.823 31.1 m 64.823 31.1 l S 27.1 32.617 m 29.6 30.867 l S 31.85 55.117 m 34.85 55.117 l S 19.6 40.867 m 22.1 39.117 l S 16.85 35.617 m 19.85 35.617 l S 20.1 28.117 m 22.85 29.867 l S 52.1 42.617 m 54.484 44.178 l S 52.437 50.146 m 54.821 48.325 l S 59.572 54.133 m 59.35 51.117 l S 50.185 10.055 m 53.234 9.928 l S 51.187 15.896 m 53.571 14.075 l S 58.322 19.883 m 59.445 16.823 l S 53.1 32.117 m 50.6 30.367 l S 52.85 24.617 m 49.6 25.617 l S 61.85 9.117 m 59.1 10.867 l S 69.35 34.617 m 66.6 36.367 l S 67.1 23.617 m 65.1 22.117 l S 24.435 46.055 m 27.484 45.928 l S 25.437 51.896 m 27.821 50.075 l S 62.6 47.117 m 65.321 46.575 l S 19.85 19.867 m 20.35 16.617 l S 21.85 21.867 m 25.35 22.617 l S 37.6 62.867 m 41.6 62.117 l S 38.323 42.1 m 38.823 38.6 l S 69.35 52.617 m 66.85 53.867 l S 14.85 62.117 m 18.1 59.367 l S 9.6 46.117 m 7.1 44.367 l S 20.6 51.617 m 18.6 50.117 l S 46.141 70.811 m 47.994 73.492 l S 69.391 40.561 m 71.244 43.242 l S 38.641 49.311 m 39.35 52.117 l S 25.141 16.811 m 25.85 19.617 l S 36.6 32.867 m 34.6 31.367 l S 6.1 68.617 m 2.85 67.867 l S 4.85 56.867 m 2.35 55.117 l S 7.6 51.617 m 4.6 51.617 l S 6.6 35.867 m 4.6 34.367 l S 6.1 12.867 m 1.85 13.617 l S 4.6 30.617 m 1.6 30.617 l S 72.814 74.769 m 73.928 77.729 l S 67.976 74.633 m 67.35 77.909 l S 52.762 73.779 m 52.876 76.776 l S 37.062 75.375 m 35.639 77.43 l S 20.795 75.242 m 22.12 77.193 l S 9.736 73.91 m 8.073 76.225 l S 10.1 23.617 m 6.35 24.367 l S 73.217 18.276 m 71.323 21.1 l S 28.823 39.6 m 29.505 42.389 l S 49.6 38.617 m 47.6 37.117 l S 60.323 73.6 m 62.323 76.6 l S 60.323 1.6 m 62.323 4.6 l S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Leaves - Fall ) (Leaves - Fall ) 0 0 64.0781 78.9336 [ %AI3_Tile (0 O 0 R 0.05 0.2 1 0 k 0.05 0.2 1 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 64.0781 78.9336 m 64.0781 0 L 0 0 L 0 78.9336 L 64.0781 78.9336 L f %AI6_EndPatternLayer ) & (0 O 0 R 0.83 0 1 0 k 0.83 0 1 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 1 D 0 XR 29.7578 0.9902 m 30.4346 1.1914 30.7246 1.3428 V 29.2559 4.0547 33.707 8.3359 34.627 9.0762 C 35.2275 8.8506 35.3477 6.3184 34.6699 4.9805 C 35.5137 5.1035 37.7031 3.7256 38.4609 2.4365 C 38.5254 3.125 40.0957 6.0664 40.9219 6.4434 C 40.002 6.8408 39.3359 8.3135 38.5742 9.7617 C 39.5957 9.9287 40.9961 9.0078 42.4668 8.1025 C 42.9814 8.9043 44.3555 9.875 45.6143 10.3916 C 44.5264 11.0781 44.0313 11.8203 43.5352 13.2793 C 42.4922 12.7139 40.3057 12.5645 39.7764 12.8516 C 40.291 13.9648 42.5371 14.5078 43.2676 14.4551 C 43.0137 15.3164 42.8652 17.4697 43.0391 20.0625 C 41.3789 18.7461 39.834 17.4297 38.1738 17.4883 C 38.4434 16.0664 37.8076 14.2607 37.4307 13.7676 C 36.8574 14.5117 36.4463 15.3389 36.8008 17.3164 C 35.3486 17.8008 34.1113 18.3467 32.7373 19.6045 C 32.7373 17.7734 32.166 16.5723 31.2969 15.2959 C 32.5576 14.8076 33.8301 13.6045 33.8252 12.5664 C 32.9775 12.7178 31.2852 13.4619 30.793 14.4551 C 30.0742 13.707 28.3906 12.3984 26.7871 12.3945 C 27.9746 11.5391 28.8945 10.5059 28.9893 8.5938 C 30.2422 9.5645 32.6953 10.1797 34.0752 9.582 C 29.2344 5.3457 29.7031 2.3125 29.7578 0.9902 C f 13.8525 29.9844 m 13.3281 29.5127 13.1309 29.25 V 15.623 27.4326 13.3691 21.6074 12.8555 20.5439 C 12.2168 20.4883 10.8096 23.2285 10.8457 24.7266 C 9.7129 23.9707 8.0488 24.0918 6.4463 24.3779 C 7.0186 23.2891 6.6172 21.3447 5.8164 20.5439 C 6.8184 20.5801 8.1699 19.8652 9.4785 18.8838 C 8.6436 18.0645 6.8164 18.2246 4.9004 18.8838 C 4.9004 17.5107 4.0781 15.7734 3.2412 14.5918 C 4.5576 14.6484 5.7031 13.9629 6.5605 12.9316 C 7.2256 14.5 9.2598 15.6133 10.166 15.5645 C 10.1826 14.1992 8.6094 12.1094 7.5879 11.7109 C 8.1875 11.041 9.207 9.5107 10.166 7.0947 C 10.9648 9.0205 12.1348 10.2627 13.3672 11.1953 C 12.2256 12.7578 12.3994 13.6289 12.7988 15.1074 C 13.541 14.5664 14.5723 14.1338 14.7441 12.1309 C 16.4609 12.416 17.5957 12.3447 19.0938 11.4434 C 18.6387 13.1055 18.6348 14.707 18.9551 16.4063 C 17.1055 16.2666 15.5449 16.4795 14.5156 17.9688 C 15.3457 18.1953 17.6055 18.2549 18.4795 17.3223 C 18.8066 18.3047 19.7012 19.7109 21.1475 20.4043 C 19.707 20.6641 18.7227 21.7637 17.8135 23.4492 C 17.1006 22.0332 14.873 20.3691 13.3711 20.3145 C 15.373 24.3779 15.373 27.2959 13.8525 29.9844 C f 41.2324 26.0742 m 41.5518 26.7021 41.7549 26.959 V 44.1523 25.0176 48.958 28.3262 49.8535 29.0957 C 49.7432 29.7266 47.6182 30.8643 45.9004 29.834 C 46.3408 31.123 45.4395 33.084 44.2402 34.126 C 45.9805 34.0254 48.126 35.3867 48.6484 36.1289 C 48.8701 35.1514 50.0527 33.8809 51.3379 32.8672 C 51.6895 33.8398 50.9941 35.958 50.0781 37.5605 C 51.3125 38.0605 52.4248 38.9912 52.8828 40.25 C 53.3398 38.9336 54.3428 38.2598 55.6875 37.5039 C 54.5273 36.0762 53.7471 33.9023 54.0273 33.0391 C 55.3496 33.374 56.9209 36.0918 57.0439 37.1816 C 57.9189 36.415 59.4727 35.7285 62.0537 35.4219 C 60.3535 34.3438 59.9902 32.3516 59.4063 30.9219 C 58.2588 31.3682 56.0898 31.4277 55.1152 30.8643 C 55.8281 30.2852 57.168 29.7344 59.1777 29.7207 C 59.1777 28.1758 59.6406 27.043 60.8945 25.8281 C 59.1719 25.8418 57.0723 25.3555 55.5762 24.9629 C 55.3281 26.292 54.4844 27.8887 53.3398 28.2891 C 53.334 27.4277 53.5996 25.1797 54.4844 24.5117 C 53.6201 23.9443 52.3672 22.5674 51.9102 20.8496 C 51.2881 22.1758 50.4268 23.4805 48.5645 23.9238 C 49.749 24.9766 50.584 26.9941 50.25 28.4609 C 45.1973 24.4785 42.5215 25.7773 41.2324 26.0742 C f 27.7578 38.7324 m 28.4346 38.9316 28.7246 39.084 V 27.2559 41.7969 31.707 46.0776 32.627 46.8169 C 33.2275 46.5918 33.3477 44.0586 32.6699 42.7227 C 33.5137 42.8457 35.7031 41.4678 36.4609 40.1787 C 36.5254 40.8652 38.0957 43.8066 38.9219 44.1846 C 38.002 44.582 37.3359 46.0547 36.5742 47.5039 C 37.5957 47.6709 38.9961 46.7485 40.4668 45.8438 C 40.9814 46.6445 42.3555 47.6177 43.6143 48.1328 C 42.5264 48.8198 42.0313 49.5615 41.5352 51.0205 C 40.4922 50.4556 38.3057 50.3057 37.7764 50.5938 C 38.291 51.7056 40.5371 52.2485 41.2676 52.1958 C 41.0137 53.0576 40.8652 55.2109 41.0391 57.8037 C 39.3789 56.4878 37.834 55.1719 36.1738 55.2285 C 36.4434 53.8076 35.8076 52.002 35.4307 51.5088 C 34.8574 52.2529 34.4463 53.0796 34.8008 55.0576 C 33.3486 55.5425 32.1113 56.0879 30.7373 57.3467 C 30.7373 55.5146 30.166 54.314 29.2969 53.0366 C 30.5576 52.5488 31.8301 51.3467 31.8252 50.3076 C 30.9775 50.46 29.2852 51.2036 28.793 52.1958 C 28.0742 51.4497 26.3906 50.1396 24.7871 50.1357 C 25.9746 49.2817 26.8945 48.2466 26.9893 46.335 C 28.2422 47.3057 30.6953 47.9209 32.0752 47.3237 C 27.2344 43.0869 27.7031 40.0547 27.7578 38.7324 C f 13.5195 70.3916 m 12.9941 69.9209 12.7988 69.6587 V 15.2891 67.8418 13.0352 62.0146 12.5225 60.9517 C 11.8828 60.8955 10.4766 63.6367 10.5117 65.1348 C 9.3809 64.3789 7.7148 64.4995 6.1133 64.7856 C 6.6855 63.6987 6.2842 61.7529 5.4834 60.9517 C 6.4854 60.9878 7.8359 60.2729 9.1455 59.2925 C 8.3105 58.4717 6.4834 58.6338 4.5674 59.2925 C 4.5674 57.9189 3.7461 56.1816 2.9082 54.9995 C 4.2246 55.0576 5.3691 54.3706 6.2275 53.3408 C 6.8926 54.9097 8.9258 56.0215 9.832 55.9727 C 9.8496 54.6079 8.2764 52.5176 7.2539 52.1187 C 7.8545 51.4497 8.873 49.9189 9.832 47.5039 C 10.6309 49.4297 11.8008 50.6719 13.0342 51.6045 C 11.8926 53.1655 12.0664 54.0366 12.4648 55.5146 C 13.209 54.9746 14.2393 54.5415 14.4102 52.5386 C 16.127 52.8247 17.2637 52.7529 18.7598 51.8525 C 18.3057 53.5137 18.3027 55.1147 18.623 56.8149 C 16.7725 56.6748 15.2129 56.8887 14.1826 58.377 C 15.0117 58.6035 17.2725 58.6626 18.1465 57.731 C 18.4736 58.7129 19.3691 60.1187 20.8145 60.8125 C 19.375 61.0728 18.3896 62.1719 17.4805 63.8579 C 16.7676 62.4429 14.541 60.7769 13.0371 60.7227 C 15.041 64.7856 15.041 67.7046 13.5195 70.3916 C f 41.2324 64.4824 m 41.5518 65.1113 41.7549 65.3682 V 44.1523 63.4272 48.958 66.7354 49.8535 67.5034 C 49.7432 68.1362 47.6182 69.2725 45.9004 68.2422 C 46.3408 69.5313 45.4395 71.4922 44.2402 72.5342 C 45.9805 72.4341 48.126 73.7954 48.6484 74.5371 C 48.8701 73.5601 50.0527 72.29 51.3379 71.2754 C 51.6895 72.249 50.9941 74.3662 50.0781 75.9683 C 51.3125 76.4692 52.4248 77.3994 52.8828 78.6582 C 53.3398 77.3423 54.3428 76.667 55.6875 75.9111 C 54.5273 74.4844 53.7471 72.3101 54.0273 71.4473 C 55.3496 71.7822 56.9209 74.5 57.0439 75.5903 C 57.9189 74.8232 59.4727 74.1372 62.0537 73.8311 C 60.3535 72.7534 59.9902 70.7612 59.4063 69.3301 C 58.2588 69.7773 56.0898 69.8364 55.1152 69.2725 C 55.8281 68.6934 57.168 68.1431 59.1777 68.1284 C 59.1777 66.583 59.6406 65.4512 60.8945 64.2373 C 59.1719 64.249 57.0723 63.7632 55.5762 63.3721 C 55.3281 64.7002 54.4844 66.2974 53.3398 66.6973 C 53.334 65.8364 53.5996 63.5874 54.4844 62.9214 C 53.6201 62.353 52.3672 60.9751 51.9102 59.2583 C 51.2881 60.583 50.4268 61.8882 48.5645 62.333 C 49.749 63.3862 50.584 65.4033 50.25 66.8691 C 45.1973 62.8872 42.5215 64.1851 41.2324 64.4824 C f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Stripes) (Stripes) 8.45 4.6001 80.45 76.6001 [ %AI3_Tile (0 O 0 R 1 0.07 1 0 k 1 0.07 1 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 3.6 w 4 M []0 d %AI3_Note: 0 D 0 XR 8.2 8.2 m 80.7 8.2 L S 8.2 22.6001 m 80.7 22.6001 L S 8.2 37.0002 m 80.7 37.0002 L S 8.2 51.4 m 80.7 51.4 L S 8.2 65.8001 m 80.7 65.8001 L S 8.2 15.4 m 80.7 15.4 L S 8.2 29.8001 m 80.7 29.8001 L S 8.2 44.2 m 80.7 44.2 L S 8.2 58.6001 m 80.7 58.6001 L S 8.2 73.0002 m 80.7 73.0002 L S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI5_End_NonPrinting-- %AI5_Begin_NonPrinting Np %AI8_BeginBrushPattern (New Pattern 1) 0 A u 1 Ap 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7834.75 8587 m -7834.75 8563 L -7884.75 8563 L -7884.75 8587 L -7834.75 8587 L n u 0 Ap 0 O 1 g -7854.75 8585 m -7866.96 8588.0527 -7875.4434 8578.0605 -7884.75 8570.9512 C F -7844.75 8585 m -7861.1279 8589.0947 -7870.8008 8569.7227 -7884.75 8565.3154 C F -7884.75 8565 m -7864.75 8560 -7854.75 8590 -7834.75 8585 C F -7874.75 8565 m -7858.3721 8560.9053 -7848.6992 8580.2773 -7834.75 8584.6846 C F -7864.75 8565 m -7852.54 8561.9473 -7844.0566 8571.9395 -7834.75 8579.0488 C F -7844.75 8565 m -7841.1279 8564.0947 -7837.835 8564.3408 -7834.75 8565.3154 C F -7874.75 8585 m -7878.3721 8585.9053 -7881.665 8585.6592 -7884.75 8584.6846 C F -7844.7817 8565.125 m -7850.9009 8563.6162 -7854.7817 8565.125 V -7858.877 8563.6484 -7864.7817 8565.125 V -7869.7446 8563.4492 -7874.7817 8565.125 V -7880.7969 8563.5742 -7884.7817 8565.125 V -7884.7817 8584.8096 L -7881.6958 8585.7842 -7878.2969 8585.9912 -7874.3799 8584.9082 C -7868.2134 8586.4912 -7864.4634 8584.9082 V -7859.4634 8586.4912 -7854.3799 8584.8242 V -7850.0474 8586.4082 -7844.3799 8584.9082 V -7838.8799 8586.3242 -7834.7817 8585.125 V -7834.7817 8565.4404 L -7837.5254 8564.4287 -7840.6514 8563.9287 -7844.7817 8565.125 C f 0 R 0 G 1 J 1 j 0.5 w -7864.75 8585 m -7872.54 8586.9473 -7878.813 8583.585 -7884.75 8579.0488 C S -7854.75 8585 m -7866.96 8588.0527 -7875.4434 8578.0605 -7884.75 8570.9512 C S -7844.75 8585 m -7861.1279 8589.0947 -7870.8008 8569.7227 -7884.75 8565.3154 C S -7884.75 8565 m -7864.75 8560 -7854.75 8590 -7834.75 8585 C S -7874.75 8565 m -7858.3721 8560.9053 -7848.6992 8580.2773 -7834.75 8584.6846 C S -7864.75 8565 m -7852.54 8561.9473 -7844.0566 8571.9395 -7834.75 8579.0488 C S -7854.75 8565 m -7846.96 8563.0527 -7840.687 8566.415 -7834.75 8570.9512 C S -7844.75 8565 m -7841.1279 8564.0947 -7837.835 8564.3408 -7834.75 8565.3154 C S -7874.75 8585 m -7878.3721 8585.9053 -7881.665 8585.6592 -7884.75 8584.6846 C S U U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 2) 0 A u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7884 8586 m -7819.187 8586 L -7819.187 8521.9023 L -7884 8521.9023 L -7884 8586 L n u 0 O 0 g -7849.6978 8544.4297 m -7851.6094 8521.9023 L -7853.5215 8544.4297 L -7852.9033 8544.3066 -7852.2642 8544.2402 -7851.6094 8544.2402 c -7850.9551 8544.2402 -7850.3159 8544.3066 -7849.6978 8544.4297 C f -7861.2402 8552.3975 m -7884 8554.3301 L -7861.1138 8556.2734 L -7861.2856 8555.5469 -7861.3848 8554.793 -7861.3848 8554.0156 c -7861.3848 8553.4629 -7861.3281 8552.9248 -7861.2402 8552.3975 C f -7856.519 8545.5723 m -7870.1626 8536.8047 L -7860.2153 8549.377 L -7859.3574 8547.791 -7858.0718 8546.4766 -7856.519 8545.5723 C f -7853.481 8563.6074 m -7851.5786 8586 L -7849.6768 8563.5967 L -7850.3018 8563.7227 -7850.9473 8563.791 -7851.6094 8563.791 c -7852.25 8563.791 -7852.873 8563.7246 -7853.481 8563.6074 C f -7841.9609 8555.5068 m -7819.187 8553.5732 L -7842.083 8551.6289 L -7842.083 8551.8506 L -7841.9258 8552.5488 -7841.834 8553.2695 -7841.834 8554.0156 c -7841.834 8554.5234 -7841.8848 8555.0195 -7841.9609 8555.5068 C f -7860.1138 8558.8262 m -7870.1641 8571.5293 L -7856.2778 8562.6055 L -7857.8823 8561.7305 -7859.2114 8560.416 -7860.1138 8558.8262 C f -7842.9961 8549.3945 m -7832.875 8536.6055 L -7846.7666 8545.5313 L -7845.1768 8546.4414 -7843.8633 8547.7793 -7842.9961 8549.3945 C f -7846.6895 8562.4512 m -7832.873 8571.3281 L -7842.9658 8558.5732 L -7843.8198 8560.1895 -7845.1152 8561.5313 -7846.6895 8562.4512 C f -7842.8887 8558.6133 m -7842.3862 8557.6641 -7842.043 8556.6211 -7841.875 8555.5195 c -7841.7993 8555.0293 -7841.748 8554.5273 -7841.748 8554.0156 c -7841.748 8553.2637 -7841.8398 8552.5352 -7841.998 8551.8311 c -7842.1958 8550.957 -7842.5049 8550.124 -7842.918 8549.3545 c -7843.7954 8547.7246 -7845.1191 8546.374 -7846.7241 8545.4561 c -7847.6294 8544.9375 -7848.6226 8544.5537 -7849.6802 8544.3457 c -7850.3047 8544.2207 -7850.9497 8544.1523 -7851.6094 8544.1523 c -7852.2695 8544.1523 -7852.915 8544.2207 -7853.5391 8544.3457 c -7854.623 8544.5605 -7855.6382 8544.957 -7856.5625 8545.4961 c -7858.1313 8546.4102 -7859.4282 8547.7363 -7860.291 8549.335 c -7860.7969 8550.2695 -7861.145 8551.2969 -7861.3262 8552.3828 c -7861.415 8552.916 -7861.4727 8553.459 -7861.4727 8554.0156 c -7861.4727 8554.8008 -7861.3711 8555.5605 -7861.1978 8556.293 c -7860.981 8557.207 -7860.6406 8558.0732 -7860.187 8558.8701 c -7859.2793 8560.4727 -7857.939 8561.8008 -7856.3174 8562.6826 c -7855.4487 8563.1553 -7854.5 8563.498 -7853.4961 8563.6934 c -7852.8848 8563.8115 -7852.2554 8563.8779 -7851.6094 8563.8779 c -7850.9414 8563.8779 -7850.29 8563.8086 -7849.6602 8563.6826 c -7848.5786 8563.4668 -7847.5664 8563.0654 -7846.6455 8562.5273 c -7845.0566 8561.5977 -7843.751 8560.2441 -7842.8887 8558.6133 c f U U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 3) 0 A u 1 Ap 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7874.75 8587 m -7874.75 8563 L -7884.75 8563 L -7884.75 8587 L -7874.75 8587 L n u u 0 Ap 0 O 1 g -7875.4058 8578.5361 m -7874.9878 8577.4355 -7874.75 8576.2471 -7874.75 8575 c -7874.75 8573.1377 -7875.2681 8571.4004 -7876.1543 8569.9072 c -7877.897 8566.9736 -7881.0898 8565 -7884.75 8565 C -7884.75 8585 L -7884.4297 8585 -7884.1143 8584.9814 -7883.8018 8584.9521 c -7881.9121 8584.7754 -7880.1807 8584.0645 -7878.7441 8582.9824 c -7877.2471 8581.8545 -7876.0801 8580.3184 -7875.4058 8578.5361 c f 0 R 0 G 1 J 1 j 0.5 w -7884.75 8565.3174 m -7881.7207 8566.2744 -7878.8926 8567.9326 -7876.1543 8569.9072 C S -7884.75 8570.9512 m -7881.5991 8573.3564 -7878.543 8576.0869 -7875.4058 8578.5361 C S -7878.7441 8582.9824 m -7880.8105 8581.8916 -7882.7993 8580.5342 -7884.75 8579.043 C S -7883.8018 8584.9521 m -7884.1191 8584.8682 -7884.4375 8584.7852 -7884.75 8584.6865 C S -7878.7441 8582.9824 m -7880.1807 8584.0645 -7881.9121 8584.7744 -7883.8018 8584.9521 C S -7875.4058 8578.5361 m -7874.9878 8577.4355 -7874.75 8576.2471 -7874.75 8575 c -7874.75 8573.1377 -7875.2681 8571.4004 -7876.1543 8569.9072 C S -7884.75 8585 m -7884.4297 8585 -7884.1143 8584.9814 -7883.8018 8584.9521 C S -7878.7441 8582.9824 m -7877.2471 8581.8545 -7876.0801 8580.3184 -7875.4058 8578.5361 C S -7876.1543 8569.9072 m -7877.8975 8566.9736 -7881.0898 8565 -7884.75 8565 C S U U U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 5) 0 A u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7726.3994 8587 m -7726.3994 8573.4199 L -7885 8573.4199 L -7885 8587 L -7726.3994 8587 L n u u 0 O 0.285 0.228 0.171 0 k -7741.0786 8585.4844 m -7741.043 8586.6895 L -7727.5103 8587.5176 -7726.8418 8586.2822 v -7726.7441 8586.1016 -7726.647 8585.7148 -7726.561 8585.1934 C -7728.584 8585.8242 -7738.291 8585.5713 -7741.0786 8585.4844 C f 0.44 0.352 0.264 0 k -7741.4063 8574.0234 m -7741.3711 8575.2676 L -7738.4912 8575.0488 -7728.1914 8574.3164 -7726.543 8574.8652 C -7726.7031 8574.2188 -7726.9199 8573.7646 -7727.2046 8573.6152 c -7728.8306 8572.7656 -7741.4063 8574.0234 Y f 0.145 0.116 0.087 0 k -7741.3711 8575.2676 m -7741.0786 8585.4844 L -7738.291 8585.5713 -7728.584 8585.8242 -7726.561 8585.1934 C -7726.1519 8582.7773 -7725.9258 8577.3604 -7726.543 8574.8652 C -7728.1914 8574.3164 -7738.4912 8575.0488 -7741.3711 8575.2676 C f U u 0.155 0.124 0.093 0 k -7766.9375 8579.2734 m -7765.897 8579.6563 L -7747.0728 8575.1465 L -7747.481 8574.3145 L -7766.3633 8576.7246 L -7767.252 8577.0059 L -7767.6504 8576.8936 -7768.1934 8576.8242 V -7767.6094 8577.2373 -7767.1426 8578.1406 -7766.9375 8579.2734 C f u 0.085 0.068 0.051 0 k -7771.7993 8583.666 m -7772.5977 8583.7217 -7769.749 8583.6641 Y -7770.3481 8583.0176 -7770.771 8581.8203 -7770.8105 8580.4375 c -7770.8169 8580.2246 -7770.8105 8580.0176 -7770.7993 8579.8135 C -7771.041 8579.707 -7771.0918 8579.7734 -7771.6289 8579.5645 C -7771 8583.6113 -7771.7993 8583.666 v f 0.305 0.244 0.183 0 k -7770.3442 8576.8672 m -7770.5527 8576.8105 -7770.4937 8578.9307 Y -7769.4785 8579.7588 L -7767.8359 8578.9434 L -7766.9375 8579.2734 L -7767.1426 8578.1406 -7767.6094 8577.2373 -7768.1934 8576.8242 C -7768.6094 8576.7715 -7769.874 8576.7998 -7770.3442 8576.8672 C f U 0.115 0.092 0.069 0 k -7766.9375 8579.2734 m -7767.8359 8578.9434 L -7769.4785 8579.7588 L -7770.4937 8578.9307 L -7770.793 8579.708 -7770.7993 8579.8135 V -7769.5137 8580.3789 -7768.1831 8580.7402 -7766.8398 8580.9258 C -7766.79 8580.7275 -7766.7842 8580.543 -7766.79 8580.3369 c -7766.7998 8579.9717 -7766.8218 8579.6182 -7766.9375 8579.2734 C f 0.41 0.328 0.246 0 k -7747.4512 8575.3965 m -7749.377 8576.6426 -7758.3862 8582.0986 -7766.8398 8580.9258 C -7766.9038 8582.0928 -7767.248 8583.0908 -7767.75 8583.6631 C -7767.1895 8583.6621 L -7746.7402 8586.7559 L -7747.0366 8576.4258 L -7747.0728 8575.1465 L -7747.2046 8575.2373 -7747.4512 8575.3965 v f 0.395 0.316 0.237 0 k -7770.8105 8580.4375 m -7770.771 8581.8203 -7770.3481 8583.0176 -7769.749 8583.6641 C -7767.6807 8583.6631 L -7767.1782 8583.0908 -7766.8218 8582.0713 -7766.8398 8580.9258 C -7768.1831 8580.7402 -7769.5137 8580.3789 -7770.7993 8579.8135 C -7770.8105 8580.0176 -7770.8169 8580.2246 -7770.8105 8580.4375 c f U u 0 0 0 0.11 k -7741.2642 8574.2012 m -7740.2407 8574.0352 L -7741.2642 8574.2012 L -7741.2642 8574.2012 L f 0 0 0 0.34 k -7747.481 8574.3145 m -7747.0728 8575.1465 L -7745.6714 8574.918 L -7744.5234 8574.7314 L -7742.6758 8574.4307 L -7741.2642 8574.2012 L -7740.2407 8574.0352 L -7740.2954 8573.7168 -7740.3672 8573.498 -7740.4648 8573.4199 C -7747.481 8574.3145 L f 0 0 0 0.32 k -7745.8042 8579.207 m -7746.041 8586.8613 L -7740.7144 8587 L -7739.7266 8583.5146 -7740.1816 8579.1543 V -7745.8042 8579.207 L f U 0.025 0.02 0.015 0 k -7739.3223 8576.3848 m -7736.373 8576.9199 -7733.2402 8577.1602 -7730.3159 8576.3613 c -7730.2856 8576.3496 -7730.2754 8576.3184 -7730.2871 8576.2969 c -7730.2881 8576.2656 -7730.3198 8576.2559 -7730.3418 8576.2559 c -7733.2422 8577.0645 -7736.375 8576.8242 -7739.3042 8576.2783 c -7739.3262 8576.2793 -7739.3574 8576.291 -7739.3672 8576.3223 c -7739.3662 8576.3438 -7739.355 8576.375 -7739.3223 8576.3848 c -7739.3223 8576.3848 l f -7737.8374 8575.3076 m -7737.7295 8575.3789 -7737.6313 8575.4941 -7737.5234 8575.502 c -7733.7886 8575.832 -7730.1631 8575.7813 -7726.4746 8575.6641 c -7726.4526 8575.6641 -7726.4209 8575.6426 -7726.4214 8575.6211 c -7726.4214 8575.5879 -7726.4551 8575.5684 -7726.4766 8575.5684 c -7729.3223 8575.6816 -7732.1401 8575.6992 -7735.0039 8575.5352 c -7735.9336 8575.4766 -7736.9082 8575.7402 -7737.7778 8575.2207 c -7737.7993 8575.2109 -7737.8306 8575.2109 -7737.8506 8575.2334 c -7737.8618 8575.2559 -7737.8594 8575.2871 -7737.8374 8575.3076 c -7737.8374 8575.3076 l f -7733.373 8577.3672 m -7731.5098 8578.6797 -7729.3022 8579.374 -7727.1001 8579.8867 c -7727.0679 8579.8965 -7727.0474 8579.8848 -7727.0366 8579.8535 c -7727.0273 8579.8203 -7727.0488 8579.8008 -7727.0703 8579.79 c -7729.2617 8579.2656 -7731.459 8578.6035 -7733.3105 8577.2803 c -7733.3433 8577.2598 -7733.375 8577.2715 -7733.3848 8577.293 c -7733.4058 8577.3145 -7733.3945 8577.3457 -7733.373 8577.3672 c -7733.373 8577.3672 l f -7738.9321 8584.0566 m -7736.7295 8584.5703 -7734.5298 8585.0303 -7732.2798 8585.2754 c -7732.2598 8585.2852 -7732.229 8585.2637 -7732.229 8585.2422 c -7732.2183 8585.209 -7732.2407 8585.1777 -7732.2729 8585.1787 c -7734.5122 8584.8809 -7736.7305 8584.5176 -7738.9126 8583.9502 c -7738.9351 8583.9512 -7738.9673 8583.9629 -7738.9766 8583.9941 c -7738.9751 8584.0156 -7738.9648 8584.0479 -7738.9321 8584.0566 c -7738.9321 8584.0566 l f -7738.439 8583.3604 m -7736.3457 8584.1973 -7734.1016 8583.9297 -7731.9023 8583.9629 c -7731.8706 8583.9609 -7731.8496 8583.9395 -7731.8506 8583.9082 c -7731.8521 8583.875 -7731.873 8583.8555 -7731.8945 8583.8555 c -7734.0928 8583.8438 -7736.3374 8584.0996 -7738.4209 8583.2529 c -7738.4434 8583.2539 -7738.4746 8583.2656 -7738.4834 8583.2969 c -7738.4834 8583.3184 -7738.4722 8583.3506 -7738.439 8583.3604 c -7738.439 8583.3604 l f -7737.707 8584.7051 m -7736.3833 8584.752 -7735.1504 8584.5469 -7733.8271 8584.209 c -7733.3594 8584.0996 -7732.9199 8584.2266 -7732.4609 8584.2129 c -7731.897 8584.1973 l -7731.874 8584.1963 -7731.8633 8584.1855 -7731.8535 8584.1738 c -7731.834 8584.1523 -7731.8442 8584.1211 -7731.8662 8584.0996 c -7732.0625 8583.9453 l -7732.0742 8583.9453 -7732.085 8583.9355 -7732.0962 8583.9355 c -7732.5 8583.9473 l -7733.9551 8584.1914 -7735.457 8584.6719 -7736.8926 8584.0742 c -7736.9258 8584.0645 -7736.957 8584.0859 -7736.9673 8584.1074 c -7736.9673 8584.1396 -7736.9551 8584.1602 -7736.9336 8584.1709 c -7735.647 8584.6992 -7734.1714 8584.4756 -7732.8818 8584.0547 c -7732.0918 8584.043 L -7732.124 8584.0332 L -7731.9282 8584.1875 L -7731.8984 8584.0898 L -7732.4639 8584.1064 l -7732.9321 8584.1406 -7733.3848 8583.9834 -7733.8398 8584.1035 c -7735.1543 8584.4609 -7736.3975 8584.625 -7737.71 8584.5986 c -7737.7422 8584.5996 -7737.7642 8584.6211 -7737.7617 8584.6533 c -7737.7617 8584.6855 -7737.7402 8584.7061 -7737.707 8584.7051 c -7737.707 8584.7051 l f -7738.5718 8585.0605 m -7735.8711 8586.2207 -7732.9023 8585.5703 -7730.1279 8585.1816 c -7729.7832 8585.2891 l -7729.7617 8585.2988 -7729.7417 8585.2871 -7729.7207 8585.2656 c -7729.71 8585.2441 -7729.7217 8585.2129 -7729.7422 8585.2021 c -7730.0801 8585.0098 l -7732.7754 8584.3926 -7735.5391 8584.7813 -7738.271 8584.7852 c -7738.3022 8584.7871 -7738.3232 8584.8086 -7738.3223 8584.8398 c -7738.3198 8584.8721 -7738.2983 8584.8926 -7738.2681 8584.8926 c -7735.6738 8584.9355 -7733.0303 8584.4434 -7730.4727 8585.0742 c -7729.7954 8585.2891 L -7729.7534 8585.1914 L -7730.1406 8585.0859 l -7732.9058 8585.4424 -7735.8418 8586.1348 -7738.5313 8584.9746 c -7738.5537 8584.9648 -7738.585 8584.9648 -7738.5962 8584.998 c -7738.6055 8585.0195 -7738.605 8585.0508 -7738.5718 8585.0605 c -7738.5718 8585.0605 l f -7735.6895 8578.3945 m -7734.3945 8578.9004 -7732.9834 8578.6465 -7731.6802 8578.3438 c -7731.647 8578.3418 -7731.6367 8578.3203 -7731.6382 8578.2891 c -7731.6504 8578.2568 -7731.6714 8578.2461 -7731.7031 8578.248 c -7732.998 8578.5303 -7734.377 8578.8154 -7735.6504 8578.2969 c -7735.6826 8578.2871 -7735.7144 8578.2988 -7735.7246 8578.3311 c -7735.7222 8578.3525 -7735.7114 8578.3848 -7735.6895 8578.3945 c -7735.6895 8578.3945 l f -7736.1401 8580.2207 m -7734.2266 8580.6895 -7732.3145 8581.1035 -7730.355 8581.3242 c -7730.3242 8581.334 -7730.3022 8581.3125 -7730.293 8581.2803 c -7730.2954 8581.2598 -7730.3159 8581.2285 -7730.3374 8581.2285 c -7732.2959 8581.0078 -7734.209 8580.582 -7736.1206 8580.1133 c -7736.1426 8580.1152 -7736.1738 8580.126 -7736.1831 8580.1582 c -7736.1831 8580.1797 -7736.1719 8580.2109 -7736.1401 8580.2207 c -7736.1401 8580.2207 l f -7736.9336 8582.6348 m -7734.499 8583.4609 -7731.8647 8583.0547 -7729.3457 8583.0879 c -7729.313 8583.0879 -7729.293 8583.0664 -7729.293 8583.0332 c -7729.2954 8583.0117 -7729.3159 8582.9922 -7729.3481 8582.9922 c -7731.8574 8582.916 -7734.481 8583.3848 -7736.8945 8582.5264 c -7736.9282 8582.5273 -7736.959 8582.5391 -7736.9688 8582.5605 c -7736.9678 8582.5918 -7736.9561 8582.624 -7736.9336 8582.6348 c -7736.9336 8582.6348 l f -7732.0542 8583.8496 m -7730.6582 8584.5449 -7729.0503 8584.4033 -7727.5342 8584.4668 c -7727.502 8584.4648 -7727.4824 8584.4434 -7727.4824 8584.4121 c -7727.4834 8584.3906 -7727.5054 8584.3594 -7727.5366 8584.3594 c -7729.0137 8584.2207 -7730.6489 8584.5234 -7732.0039 8583.7617 c -7732.0366 8583.7529 -7732.0679 8583.7637 -7732.0786 8583.7861 c -7732.0879 8583.8076 -7732.0767 8583.8398 -7732.0542 8583.8496 c -7732.0542 8583.8496 l f -7731.3418 8580.4248 m -7730.3926 8580.3975 -7729.4336 8580.3701 -7728.4839 8580.3428 c -7728.4526 8580.3418 -7728.4312 8580.3203 -7728.4336 8580.2881 c -7728.4336 8580.2559 -7728.4551 8580.2354 -7728.4878 8580.2363 c -7729.437 8580.2637 -7730.397 8580.291 -7731.3457 8580.3184 c -7731.377 8580.3184 -7731.3975 8580.3418 -7731.3975 8580.373 c -7731.397 8580.4043 -7731.374 8580.4258 -7731.3418 8580.4248 c -7731.3418 8580.4248 l f -7729.1592 8578.0361 m -7728.6895 8578.0645 -7728.209 8578.0723 -7727.7383 8578.0918 c -7727.7168 8578.0908 -7727.6855 8578.0684 -7727.6865 8578.0371 c -7727.687 8578.0039 -7727.71 8577.9844 -7727.7417 8577.9844 c -7728.2114 8577.9873 -7728.6816 8577.9375 -7729.1514 8577.9395 c -7729.1831 8577.9297 -7729.2031 8577.9512 -7729.2134 8577.9844 c -7729.2129 8578.0156 -7729.1914 8578.0371 -7729.1592 8578.0361 c -7729.1592 8578.0361 l f -7736.9702 8580.2344 m -7736.5688 8580.5107 -7736.125 8580.6797 -7735.645 8580.751 c -7735.6113 8580.7607 -7735.5918 8580.7383 -7735.5806 8580.7168 c -7735.5703 8580.6855 -7735.5928 8580.6543 -7735.6152 8580.6543 c -7736.0854 8580.5723 -7736.5176 8580.4023 -7736.9209 8580.1475 c -7736.9521 8580.1377 -7736.9849 8580.1387 -7736.9946 8580.1709 c -7737.0039 8580.1934 -7736.9922 8580.2246 -7736.9702 8580.2344 c -7736.9702 8580.2344 l f -7738.1904 8586.085 m -7735.7344 8586.5273 -7733.2983 8587.001 -7730.7993 8586.7266 c -7730.7778 8586.7266 -7730.7568 8586.7041 -7730.7578 8586.6719 c -7730.7578 8586.6406 -7730.7798 8586.6191 -7730.8022 8586.6191 c -7733.291 8586.873 -7735.7344 8586.4844 -7738.1719 8585.9775 c -7738.1934 8585.9785 -7738.2256 8585.9902 -7738.2344 8586.0215 c -7738.2344 8586.043 -7738.2222 8586.0752 -7738.1904 8586.085 c -7738.1904 8586.085 l f 0.195 0.156 0.117 0 k -7738.166 8574.6445 m -7735.7969 8574.2676 -7733.4058 8574.3477 -7731.0298 8574.5898 c -7730.998 8574.5879 -7730.9766 8574.5664 -7730.9766 8574.5352 c -7730.9785 8574.5137 -7731 8574.4824 -7731.0215 8574.4824 c -7733.4082 8574.2422 -7735.791 8574.1602 -7738.1694 8574.5391 c -7738.2026 8574.5391 -7738.2222 8574.5605 -7738.2217 8574.5938 c -7738.2207 8574.625 -7738.1992 8574.6465 -7738.166 8574.6445 c -7738.166 8574.6445 l f 0.335 0.268 0.201 0 k -7737.4351 8574.1113 m -7734.9282 8574.1152 -7732.4146 8574.2773 -7729.918 8573.8965 c -7729.8862 8573.8945 -7729.8647 8573.873 -7729.8662 8573.8418 c -7729.8672 8573.8086 -7729.8896 8573.7891 -7729.9209 8573.7891 c -7732.418 8574.1699 -7734.9297 8574.0293 -7737.4375 8574.0059 c -7737.46 8574.0059 -7737.481 8574.0273 -7737.4785 8574.0596 c -7737.4785 8574.0918 -7737.457 8574.1123 -7737.4351 8574.1113 c -7737.4351 8574.1113 l f 0.205 0.164 0.123 0 k -7738.9766 8574.3262 m -7737.5039 8574.668 -7736.0078 8574.4023 -7734.5391 8574.2207 c -7734.5078 8574.2207 -7734.4873 8574.1973 -7734.499 8574.166 c -7734.5 8574.1348 -7734.5215 8574.1133 -7734.5537 8574.125 c -7736.0103 8574.2842 -7737.4961 8574.583 -7738.9473 8574.2188 c -7738.9785 8574.2207 -7739.0103 8574.2324 -7739.0098 8574.2637 c -7739.019 8574.2852 -7738.998 8574.3164 -7738.9766 8574.3262 c -7738.9766 8574.3262 l f -7732.3535 8573.7949 m -7731.1978 8573.9219 -7730.0273 8573.8145 -7728.8926 8573.5898 c -7728.8711 8573.5781 -7728.8506 8573.5566 -7728.8618 8573.5244 c -7728.8623 8573.5029 -7728.8945 8573.4824 -7728.916 8573.4941 c -7730.0503 8573.7402 -7731.1914 8573.7939 -7732.3462 8573.6885 c -7732.3794 8573.6895 -7732.3984 8573.7109 -7732.4087 8573.7324 c -7732.4082 8573.7646 -7732.3862 8573.7852 -7732.3535 8573.7949 c -7732.3535 8573.7949 l f 0.335 0.268 0.201 0 k -7739.2681 8576.4473 m -7737.9214 8577.1885 -7736.3066 8576.5977 -7734.855 8576.6416 c -7734.8223 8576.6406 -7734.8022 8576.6191 -7734.8022 8576.5859 c -7734.8042 8576.5654 -7734.8262 8576.5449 -7734.8574 8576.5449 c -7736.2886 8576.4902 -7737.8823 8577.0801 -7739.2168 8576.3506 c -7739.2383 8576.3398 -7739.2695 8576.3516 -7739.291 8576.374 c -7739.3008 8576.3955 -7739.2886 8576.4277 -7739.2681 8576.4473 c -7739.2681 8576.4473 l f -7737.8945 8578.5645 m -7735.6719 8579.0449 -7733.3896 8578.6162 -7731.1504 8578.5625 c -7731.1177 8578.5615 -7731.0977 8578.5391 -7731.0977 8578.5078 c -7731.1001 8578.4863 -7731.1318 8578.4668 -7731.1519 8578.4668 c -7733.3833 8578.4775 -7735.6519 8578.9805 -7737.875 8578.457 c -7737.8975 8578.457 -7737.9287 8578.4688 -7737.9375 8578.502 c -7737.9375 8578.5225 -7737.9258 8578.5547 -7737.8945 8578.5645 c -7737.8945 8578.5645 l f -7732.0273 8575.1406 m -7730.3496 8575.9688 -7728.499 8576.502 -7726.603 8576.3613 c -7726.5718 8576.3613 -7726.5513 8576.3389 -7726.5527 8576.3066 c -7726.5527 8576.2754 -7726.5742 8576.2539 -7726.6074 8576.2559 c -7728.481 8576.416 -7730.3198 8575.8604 -7731.9873 8575.0547 c -7732.0078 8575.0449 -7732.041 8575.0449 -7732.0503 8575.0781 c -7732.061 8575.0996 -7732.061 8575.1309 -7732.0273 8575.1406 c -7732.0273 8575.1406 l f u 0.5 0.85 1 0.45 k -7885 8581.9082 m -7885.0254 8582.4883 -7884.5664 8583.1875 -7883.167 8583.9902 C -7882.8521 8584.0029 -7881.3945 8584.0234 -7879.0889 8584.0488 C -7879.0889 8581.8223 L -7881.1382 8581.8457 -7883.1177 8581.8867 -7885 8581.9082 C f -7884.5088 8580.9688 m -7879.0889 8580.8447 L -7879.0889 8579.8145 L -7882.644 8579.959 L -7883.8145 8580.3301 -7884.5088 8580.9688 V f 0.5 0.85 1 0.32 k -7879.0889 8580.8252 m -7884.4746 8580.9434 L -7884.7695 8581.2148 -7884.9849 8581.5566 -7885 8581.9277 C -7883.1177 8581.9063 -7881.1382 8581.8848 -7879.0889 8581.8613 C -7879.0889 8580.8252 L f 0.5 0.85 1 0.45 k -7774.1504 8580.6172 m -7852.3584 8581.541 -7879.1079 8581.8418 V -7879.1079 8584.0488 L -7862.8145 8584.2324 -7803.9902 8584.707 Y -7769.749 8583.6641 L -7770.457 8580.5684 L -7774.1504 8580.6172 L f 0.5 0.85 1 0.12 k -7879.1079 8579.8145 m -7879.1079 8580.8447 L -7770.4258 8579 L -7770.3833 8576.8633 L -7803.6553 8576.7129 L -7879.1079 8579.8145 L f u 0.065 0.052 0.039 0 k -7747.0728 8575.1465 m -7747.0366 8576.4258 L -7747.2954 8575.1172 L -7765.897 8579.6563 L -7766.9375 8579.2734 L -7766.8794 8579.6055 -7766.8398 8579.957 -7766.8306 8580.3223 c -7766.8242 8580.5283 -7766.8281 8580.7285 -7766.8398 8580.9258 C -7758.3862 8582.0986 -7748.9634 8577.6719 -7747.0366 8576.4258 C -7746.7402 8586.7559 L -7746.041 8586.8613 L -7745.8042 8579.207 L -7740.1816 8579.1543 L -7740.0898 8577.0137 -7740.0718 8575.0215 -7740.2407 8574.0352 C -7747.0728 8575.1465 L f 0.4 0.7 1 0 k -7770.457 8580.5879 m -7770.4258 8578.9805 L -7879.1079 8580.8252 L -7879.1079 8581.8613 L -7852.3584 8581.5605 -7770.457 8580.5879 Y f U U 0.025 0.02 0.015 0 k -7734.7344 8583.0293 m -7734.7344 8583.0625 -7734.7129 8583.082 -7734.6802 8583.082 c -7731.6714 8583.1133 -7729.4214 8582.9453 -7726.415 8582.8594 C -7726.4087 8582.7656 L -7729.3262 8582.8701 -7731.7607 8583.0078 -7734.6841 8582.9746 C -7734.7168 8582.9766 -7734.7358 8582.998 -7734.7344 8583.0293 C f -7726.3994 8582.7656 m -7726.4082 8582.7441 L -7726.4087 8582.7656 L -7726.4063 8582.7656 -7726.4033 8582.7656 -7726.3994 8582.7656 C f -7730.4487 8581.4238 m -7731.4458 8581.292 -7732.3394 8581.7656 -7733.2114 8582.1973 C -7733.2441 8582.208 -7733.2534 8582.2402 -7733.2422 8582.2715 C -7733.2305 8582.293 -7733.1982 8582.3027 -7733.1777 8582.291 c -7732.3262 8581.8301 -7731.4312 8581.4199 -7730.4678 8581.5195 c -7729.1079 8581.6621 -7727.9038 8582.375 -7726.5254 8582.4531 C -7726.4463 8582.3594 L -7728.04 8582.2656 -7728.8647 8581.623 -7730.4487 8581.4238 c f U U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 6) 0 A u 1 Ap 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7884.75 8563 m -7884.75 8587 L -7874.75 8587 L -7874.75 8563 L -7884.75 8563 L n 0 Ap 0 O 1 g -7874.75 8565 m -7875.0703 8565 -7875.3857 8565.0186 -7875.6982 8565.0479 c -7877.5879 8565.2256 -7879.3198 8565.9346 -7880.7559 8567.0176 c -7882.2529 8568.1465 -7883.4199 8569.6816 -7884.0942 8571.4639 c -7884.5122 8572.5645 -7884.75 8573.7529 -7884.75 8575 c -7884.75 8576.8623 -7884.2319 8578.5996 -7883.3457 8580.0918 c -7881.6025 8583.0273 -7878.4102 8585 -7874.75 8585 C -7874.75 8565 L f 0 R 0 G 1 J 1 j 0.5 w -7874.75 8584.6816 m -7877.7793 8583.7256 -7880.6074 8582.0674 -7883.3457 8580.0918 C S -7874.75 8579.0488 m -7877.8999 8576.6436 -7880.957 8573.9131 -7884.0942 8571.4639 C S -7880.7559 8567.0176 m -7878.6904 8568.1084 -7876.7017 8569.4668 -7874.75 8570.957 C S -7875.6982 8565.0479 m -7875.3809 8565.1309 -7875.063 8565.2148 -7874.75 8565.3145 C S -7880.7559 8567.0176 m -7879.3193 8565.9355 -7877.5879 8565.2256 -7875.6982 8565.0479 C S -7884.0942 8571.4639 m -7884.5122 8572.5645 -7884.75 8573.7529 -7884.75 8575 c -7884.75 8576.8623 -7884.231 8578.5996 -7883.3457 8580.0918 C S -7874.75 8565 m -7875.0703 8565 -7875.3857 8565.0186 -7875.6982 8565.0479 C S -7880.7559 8567.0176 m -7882.2529 8568.1465 -7883.4199 8569.6816 -7884.0942 8571.4639 C S -7883.3457 8580.0918 m -7881.6025 8583.0273 -7878.4102 8585 -7874.75 8585 C S U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 8) 0 A u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7883.9521 8584.3125 m -7776.7954 8584.3125 L -7776.7954 8570.1855 L -7883.9521 8570.1855 L -7883.9521 8584.3125 L n u 0 O 0 0 0 1 k -7882.2832 8583.623 m -7882.8535 8586 -7882.8184 8582.0039 V -7883.0479 8578.8027 L -7883.6167 8576.4551 L -7883.4502 8574.123 L -7881.9502 8573.4551 -7865.2832 8572.123 V -7858.6167 8570.7891 -7849.6167 8570.7891 V -7784.3936 8571.4766 -7779.4912 8572.8848 v -7820.3882 8570.875 -7822.9688 8571.5117 v -7783.8569 8573.1602 -7780.8545 8574.4316 v -7818.79 8572.5469 -7822.167 8574.1777 v -7787.249 8575.9102 -7783.021 8577.5313 v -7789.7217 8576.8828 -7791.5127 8577.082 v -7788.3896 8577.5703 l -7793.4194 8577.502 l -7796.3218 8577.1289 l -7788.4521 8578.2422 -7787.9033 8578.8086 v -7784.3154 8578.1309 -7798.5186 8578.3848 v -7832.1177 8574.4551 -7882.2832 8583.623 V f /BBAccumRotation (5.805971) XT 0 R 0 0 0 0.5 K 0.025 w -7883.9502 8573.123 m -7863.667 8571.2949 -7843.9727 8570.2207 v -7801.1514 8570.502 -7796.5737 8570.9004 v -7784.1631 8571.0313 -7776.7959 8572.0273 v S /BBAccumRotation (5.805971) XT 0 0 0 1 K -7821.8369 8570.4082 m -7825.2959 8570.0273 -7851.2607 8570.2793 Y -7861.627 8570.1602 -7883.9502 8573.123 Y S /BBAccumRotation (5.805971) XT -7820.9873 8573.6641 m -7790.3608 8574.582 -7783.6606 8575.2324 v S /BBAccumRotation (5.805971) XT 0 0 0 0.5 K -7829.6201 8578.2051 m -7794.3706 8579.6172 -7791.4058 8580.1406 v S /BBAccumRotation (5.805971) XT U U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 10) 0 A u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7884 8586 m -7833.8921 8586 L -7833.8921 8529.9756 L -7884 8529.9756 L -7884 8586 L n u 0 O 0.1 1 1 0 k -7846.9014 8551.5752 m -7848.7178 8545.0957 -7858.8247 8548.4658 Y -7858.791 8548.5303 L -7868.8999 8545.1611 -7870.7144 8551.6396 V -7876.6758 8569.0068 -7871.4922 8575.7451 V -7864.7529 8585.3369 -7860.6055 8585.3369 V -7857.0103 8585.2705 L -7852.8638 8585.2705 -7846.125 8575.6816 Y -7840.9409 8568.9424 -7846.9014 8551.5752 Y f u 0 0 0 1 k -7851.3926 8529.9756 m -7852.1167 8531.4199 -7852.9238 8532.4756 V -7852.4058 8532.0635 -7851.5151 8531.1924 -7851.3926 8529.9756 C f -7865.064 8532.4854 m -7865.8711 8531.4307 -7866.5942 8529.9863 Y -7866.4727 8531.2021 -7865.582 8532.0732 -7865.064 8532.4854 C f U 0 0.61 0.74 0 k -7850.5977 8554.4609 m -7851.9038 8549.7959 -7859.1816 8552.2217 Y -7859.1567 8552.2686 L -7866.436 8549.8428 -7867.7417 8554.5078 V -7872.0337 8567.0117 -7868.3018 8571.8633 V -7863.4487 8578.7686 -7860.4634 8578.7686 V -7857.875 8578.7227 L -7854.8887 8578.7227 -7850.0366 8571.8174 Y -7846.3042 8566.9639 -7850.5977 8554.4609 Y f u 1 Ap 0.73 0.43 1 0.22 k 0 R 0 0 0 1 K -7854.6226 8557.2754 m -7853.813 8557.2754 -7853.1558 8556.6182 -7853.1558 8555.8096 c -7853.1558 8555 -7853.813 8554.3428 -7854.6226 8554.3428 c -7855.4321 8554.3428 -7856.0889 8555 -7856.0889 8555.8096 c -7856.0889 8556.6182 -7855.4321 8557.2754 -7854.6226 8557.2754 c b -7854.3638 8568.9971 m -7853.0806 8568.9971 -7852.0415 8568.1201 -7852.0415 8567.042 c -7852.0415 8565.9619 -7853.0806 8565.0869 -7854.3638 8565.0869 c -7855.645 8565.0869 -7856.6846 8565.9619 -7856.6846 8567.042 c -7856.6846 8568.1201 -7855.645 8568.9971 -7854.3638 8568.9971 c b -7853.834 8580.7861 m -7852.2817 8580.7861 -7851.0239 8580.1299 -7851.0239 8579.3213 c -7851.0239 8578.5117 -7852.2817 8577.8545 -7853.834 8577.8545 c -7855.3862 8577.8545 -7856.645 8578.5117 -7856.645 8579.3213 c -7856.645 8580.1299 -7855.3862 8580.7861 -7853.834 8580.7861 c b -7849.6104 8552.5264 m -7848.8687 8552.5264 -7848.2671 8551.8154 -7848.2671 8550.9365 c -7848.2671 8550.0596 -7848.8687 8549.3477 -7849.6104 8549.3477 c -7850.353 8549.3477 -7850.9546 8550.0596 -7850.9546 8550.9365 c -7850.9546 8551.8154 -7850.353 8552.5264 -7849.6104 8552.5264 c b -7848.0034 8574.083 m -7848.8818 8573.7354 -7849.1494 8572.335 -7848.603 8570.9541 c -7848.0566 8569.5752 -7846.9014 8568.7363 -7846.0234 8569.085 c -7845.145 8569.4326 -7844.877 8570.833 -7845.4233 8572.2139 c -7845.9702 8573.5947 -7847.125 8574.4316 -7848.0034 8574.083 c b u -7863.0566 8557.1592 m -7863.8662 8557.1592 -7864.5239 8556.502 -7864.5239 8555.6934 c -7864.5239 8554.8828 -7863.8662 8554.2266 -7863.0566 8554.2266 c -7862.248 8554.2266 -7861.5913 8554.8828 -7861.5913 8555.6934 c -7861.5913 8556.502 -7862.248 8557.1592 -7863.0566 8557.1592 c b -7863.3159 8568.8799 m -7864.5991 8568.8799 -7865.6382 8568.0049 -7865.6382 8566.9248 c -7865.6382 8565.8447 -7864.5991 8564.9697 -7863.3159 8564.9697 c -7862.0342 8564.9697 -7860.9951 8565.8447 -7860.9951 8566.9248 c -7860.9951 8568.0049 -7862.0342 8568.8799 -7863.3159 8568.8799 c b -7863.8457 8580.6709 m -7865.3975 8580.6709 -7866.6558 8580.0146 -7866.6558 8579.2041 c -7866.6558 8578.3936 -7865.3975 8577.7383 -7863.8457 8577.7383 c -7862.293 8577.7383 -7861.0352 8578.3936 -7861.0352 8579.2041 c -7861.0352 8580.0146 -7862.293 8580.6709 -7863.8457 8580.6709 c b -7868.0679 8552.4092 m -7868.811 8552.4092 -7869.4121 8551.6982 -7869.4121 8550.8213 c -7869.4121 8549.9443 -7868.811 8549.2334 -7868.0679 8549.2334 c -7867.3262 8549.2334 -7866.7241 8549.9443 -7866.7241 8550.8213 c -7866.7241 8551.6982 -7867.3262 8552.4092 -7868.0679 8552.4092 c b -7869.6758 8573.9678 m -7868.7983 8573.6201 -7868.5298 8572.2188 -7869.0762 8570.8379 c -7869.6226 8569.457 -7870.7778 8568.6201 -7871.6558 8568.9678 c -7872.5342 8569.3164 -7872.8032 8570.7178 -7872.2568 8572.0967 c -7871.7104 8573.4775 -7870.5552 8574.3154 -7869.6758 8573.9678 c b U U 0 Ap 0 0 0 1 k -7859.1318 8552.6553 m -7859.1318 8585.3145 l F u -7843.3906 8538.5303 m -7844.0815 8537.8369 -7847.019 8538.7021 Y -7848.229 8538.874 -7848.0562 8541.2939 Y -7847.019 8543.3682 -7847.7104 8543.1943 Y -7848.2998 8543.1943 -7849.855 8543.1143 -7850.7822 8543.0635 C -7851.1226 8541.6689 -7852.6128 8540.4756 -7854.7217 8539.7695 C -7852.7578 8536.4775 -7854.5176 8535.7949 -7856.2935 8535.79 C -7856.3096 8535.7021 -7856.332 8535.6162 -7856.3599 8535.5332 C -7854.1089 8535.5791 -7853.6392 8533.2588 Y -7853.4048 8533.0635 -7853.1606 8532.7861 -7852.9238 8532.4756 C -7853.1416 8532.6475 -7853.2944 8532.7393 Y -7854.2583 8532.7393 -7855.8774 8534.4941 -7856.4966 8535.207 C -7856.9194 8534.4434 -7857.853 8533.9111 -7858.9434 8533.9111 c -7860.0698 8533.9111 -7861.0322 8534.4795 -7861.4312 8535.2852 C -7861.9985 8534.624 -7863.6968 8532.751 -7864.6943 8532.751 C -7864.8462 8532.6572 -7865.064 8532.4854 V -7864.8281 8532.7939 -7864.583 8533.0732 -7864.3481 8533.2686 C -7863.8638 8535.6563 -7861.5254 8535.5342 V -7861.5449 8535.5889 -7861.5674 8535.6436 -7861.5806 8535.7021 C -7864.9238 8535.6924 -7863.937 8538.3174 -7863.2104 8539.6602 C -7865.5918 8540.376 -7867.2646 8541.7012 -7867.5239 8543.25 C -7868.4473 8543.2998 -7869.6729 8543.3584 -7870.1802 8543.3584 C -7870.8726 8543.5313 -7869.835 8541.458 V -7869.6626 8539.0391 -7870.8726 8538.8662 V -7873.8096 8538.002 -7874.501 8538.6934 V -7875.1919 8539.5566 -7876.0562 8538.3467 V -7875.1919 8540.0752 -7873.291 8539.5566 V -7870.6982 8538.8662 -7871.3906 8540.5938 V -7871.9087 8544.0498 -7870.1802 8544.7402 V -7868.0342 8545.8545 -7866.2822 8546.0889 V -7865.9087 8546.4141 -7865.4639 8546.7109 -7864.958 8546.9766 C -7867.5562 8547.0469 -7870.2246 8547.9209 -7871.0752 8550.9561 C -7871.5151 8552.2432 -7872.0518 8554.2432 V -7873.1025 8554.8252 -7874.3022 8556.0078 -7875.541 8558.2627 C -7876.394 8561.4502 -7877.167 8556.7129 V -7878.3975 8553.6494 -7879.6504 8553.5381 V -7878.4702 8555.2871 -7878.9038 8556.416 V -7877.2998 8560.917 -7875.6138 8559.8994 V -7874.0986 8559.2197 -7872.688 8556.8154 V -7873.0698 8558.4971 -7873.4326 8560.417 -7873.6743 8562.3906 C -7874.4888 8562.3975 L -7876.3506 8561.4795 -7876.3262 8564.959 V -7877.1226 8568.9453 -7876.3594 8571.6826 V -7875.647 8574.1504 -7878.1274 8572.9307 V -7879.2842 8573.3242 -7879.9839 8572.7881 V -7882.3882 8571.4131 -7884 8573.124 V -7882.147 8572.8799 -7881.4482 8573.417 V -7879.9785 8573.5615 -7879.897 8574.1787 V -7876.9561 8574.8555 -7876.188 8574.0771 V -7874.417 8573.2139 -7875.1304 8570.3604 V -7875.8799 8562.4814 -7874.3198 8564.4053 V -7874.1182 8564.4219 -7873.8784 8564.5176 V -7874.1519 8568.4326 -7873.8018 8572.3252 -7871.9961 8574.8516 C -7875.4536 8567.333 -7870.2974 8552.3037 Y -7868.9609 8547.5303 -7863.127 8548.1016 -7860.145 8548.7344 C -7860.0718 8550.1299 -7859.8374 8551.9492 -7859.1318 8552.6553 C -7858.2134 8550.6963 -7858.2358 8549.0732 V -7857.0762 8548.7217 -7850.2817 8546.8447 -7847.4487 8550.3369 C -7848.4312 8547.8135 -7850.8262 8547.0186 -7853.2007 8546.9189 C -7852.667 8546.6318 -7852.2041 8546.3047 -7851.8257 8545.9502 C -7850.041 8545.7861 -7847.7104 8544.5771 Y -7845.9814 8543.8857 -7846.5015 8540.4307 Y -7847.1919 8538.7021 -7844.5991 8539.3936 Y -7842.7002 8539.9111 -7841.835 8538.1836 Y -7842.7002 8539.3936 -7843.3906 8538.5303 Y f -7837.9082 8572.9521 m -7838.6074 8573.4893 -7839.7632 8573.0938 Y -7842.2446 8574.3135 -7841.5327 8571.8467 Y -7840.769 8569.1104 -7841.564 8565.1221 Y -7841.541 8561.6445 -7843.4014 8562.5596 Y -7844.0342 8562.5557 L -7844.3198 8560.6123 -7844.7046 8558.7549 -7845.0898 8557.1699 C -7843.7129 8559.4199 -7842.2778 8560.0635 Y -7840.5913 8561.082 -7838.9878 8556.5791 Y -7839.4214 8555.4502 -7838.2417 8553.7021 Y -7839.4937 8553.8125 -7840.7246 8556.876 Y -7841.4976 8561.6152 -7842.3511 8558.4268 Y -7843.5776 8556.1904 -7844.769 8555.0098 -7845.814 8554.4229 C -7846.2026 8553.0635 -7846.4858 8552.2393 Y -7846.7002 8551.4727 -7847.0337 8550.8486 -7847.4487 8550.3369 C -7847.3799 8550.5127 -7847.3174 8550.6982 -7847.2632 8550.8916 C -7841.3022 8568.2588 -7846.4858 8574.9971 V -7853.2246 8584.5869 -7857.3721 8584.5869 V -7860.9663 8584.6514 L -7865.1138 8584.6514 -7871.853 8575.0615 Y -7871.9038 8574.9961 -7871.9463 8574.9219 -7871.9961 8574.8516 C -7871.7378 8575.4141 -7871.437 8575.9404 -7871.0752 8576.4092 C -7864.3359 8586 -7860.189 8586 V -7856.5942 8585.9346 L -7852.4482 8585.9346 -7845.709 8576.3447 Y -7843.5801 8573.5771 -7843.3306 8569.0176 -7843.7769 8564.6055 C -7843.6553 8564.5752 -7843.5698 8564.5684 Y -7842.0112 8562.6475 -7842.7598 8570.5244 Y -7843.4746 8573.3789 -7841.7026 8574.2402 Y -7840.9351 8575.0186 -7837.9946 8574.3428 Y -7837.9136 8573.7256 -7836.4434 8573.5811 Y -7835.7446 8573.0449 -7833.8921 8573.2881 Y -7835.5024 8571.5771 -7837.9082 8572.9521 Y f U U U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 34) 0 A u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7884.0254 8586.0264 m -7828.0542 8586.0264 L -7828.0542 8524.5342 L -7884.0254 8524.5342 L -7884.0254 8586.0264 L n u u 0 O 0.0745 0.9 0.9019 0.18 k 0 R 0 0 0 1 K 1 J 1 j 0.0518 w -7857.5991 8562.7217 m -7857.3594 8573.5215 -7862.8794 8583.8398 v -7862.4009 8586 -7860.959 8586 v -7861.2002 8582.6406 -7860.2393 8582.1611 v -7855.9199 8570.1602 -7856.6382 8562.2402 v -7857.5991 8562.7217 l b -7857.5991 8562.7217 m -7859.2793 8568 -7871.0391 8569.2012 v -7875.3594 8569.6807 -7875.5991 8571.1211 v -7869.1206 8561.5195 -7868.1602 8561.7607 v -7881.3594 8556.001 -7884 8550.7197 v -7878.959 8553.6006 -7875.5991 8551.4404 v -7867.6802 8551.2012 -7862.6406 8553.3613 v -7858.8008 8555.2813 -7866.7202 8539.2012 v -7862.8794 8550.9609 -7859.2793 8524.5605 v -7858.3198 8529.8408 -7856.8799 8531.2813 v -7850.8799 8538.9609 -7851.8398 8541.1211 v -7852.3198 8544.9609 -7847.7598 8538.7207 v -7848 8548.3213 -7850.4009 8551.6807 v -7852.5591 8555.2813 -7846.5591 8553.1211 v -7840.5591 8551.2012 -7835.2793 8552.8809 v -7829.7598 8554.3203 -7828.0801 8551.4404 v -7839.8398 8563.9209 -7845.5991 8563.6807 v -7843.9194 8567.2813 l -7841.519 8572.0811 -7842 8573.2813 v -7857.2681 8563.8828 -7857.5991 8562.7217 v b -7857.5991 8562.7217 m -7854.959 8544.2402 -7857.5991 8536.5605 v -7859.998 8526.001 -7859.2793 8524.5605 v S -7856.1602 8551.4404 m -7850.1602 8546.6406 -7848.959 8541.3604 v S -7856.1602 8550.7197 m -7865.0391 8543.041 -7866.7202 8539.2012 v S -7828.0801 8551.4404 m -7829.2793 8553.6006 -7857.3594 8561.7607 y -7862.4009 8556.2422 -7873.9199 8553.8408 v -7881.5986 8552.8809 -7884 8550.7197 v S -7874.6382 8569.6807 m -7863.1191 8560.5615 -7857.3594 8561.7607 y -7843.1992 8568 -7842 8573.2813 v S U U U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 36) 0 A u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7883.8496 8585.9961 m -7833.96 8585.9961 L -7833.96 8534.9258 L -7883.8496 8534.9258 L -7883.8496 8585.9961 L n u 0 O 0.025 0.1 0.475 0 k -7862.1504 8553.9043 m -7864.4766 8552.8125 -7866.6914 8552.4434 -7868.373 8552.9238 c -7869.0518 8553.1172 -7869.645 8553.4473 -7870.123 8553.9238 c -7870.6006 8554.4023 -7870.9297 8554.9951 -7871.123 8555.6729 c -7872.0088 8558.7715 -7870.0103 8563.6777 -7865.9233 8567.7666 c -7861.834 8571.8535 -7856.9297 8573.8516 -7853.8286 8572.9668 c -7853.1519 8572.7715 -7852.5586 8572.4424 -7852.0806 8571.9658 c -7851.603 8571.4883 -7851.2754 8570.8955 -7851.082 8570.2168 c -7850.5176 8568.2461 -7851.1226 8565.5449 -7852.6855 8562.7891 c -7853.582 8561.21 -7854.791 8559.6133 -7856.2793 8558.123 c -7858.1504 8556.2539 -7860.1914 8554.8242 -7862.1504 8553.9043 c f u 0.0035 0.014 0.0665 0 k -7861.2183 8552.9727 m -7863.8306 8552.0215 -7866.3975 8551.9688 -7868.373 8552.9238 C -7866.6914 8552.4434 -7864.4766 8552.8125 -7862.1504 8553.9043 c -7861.6191 8554.1543 -7861.0806 8554.4434 -7860.543 8554.7676 C -7858.8984 8554.0537 L -7859.667 8553.6172 -7860.4434 8553.2539 -7861.2183 8552.9727 c f 0.015 0.06 0.285 0 k -7858.8984 8554.0537 m -7860.543 8554.7676 L -7859.0962 8555.6348 -7857.6426 8556.7607 -7856.2793 8558.123 c -7856.1538 8558.25 -7856.0327 8558.3779 -7855.9102 8558.5059 C -7855.2153 8556.8633 L -7856.3706 8555.7236 -7857.6191 8554.7813 -7858.8984 8554.0537 C f U u 0.039 0.156 0.741 0 k -7849.687 8541.4043 m -7849.9746 8541.6914 -7861.2183 8552.9727 Y -7860.4434 8553.2539 -7859.667 8553.6172 -7858.8984 8554.0537 C -7845.4146 8540.5703 L -7847.061 8540.0996 -7848.6406 8540.3555 -7849.687 8541.4043 c f 0.025 0.1 0.475 0 k -7845.4146 8540.5703 m -7858.8984 8554.0537 L -7857.584 8554.8027 -7856.2969 8555.7754 -7855.1143 8556.957 c -7855.084 8556.9863 -7855.0586 8557.0156 -7855.0278 8557.0449 C -7841.3408 8543.3574 L -7841.5264 8543.1328 -7841.7202 8542.9141 -7841.9302 8542.7012 c -7843.0103 8541.623 -7844.2305 8540.9082 -7845.4146 8540.5703 C f U u 0.0115 0.046 0.2185 0 k -7835.9346 8550.3926 m -7833.5337 8547.9893 -7833.335 8544.0898 -7835.1382 8540.6973 C -7836.2954 8541.1182 L -7834.0938 8544.4961 -7833.8398 8548.2949 -7835.9346 8550.3926 c f 0.015 0.06 0.285 0 k -7843.5337 8535.5957 m -7842.582 8534.9258 L -7845.2046 8534.3516 -7847.8306 8534.9141 -7849.6206 8536.7061 c -7848.1719 8535.2578 -7845.9082 8534.9307 -7843.5337 8535.5957 C f 0.0295 0.118 0.5605 0 k -7843.5337 8535.5957 m -7845.9082 8534.9307 -7848.1719 8535.2578 -7849.6206 8536.7061 c -7851.019 8538.1055 -7851.3706 8540.2637 -7850.7954 8542.5469 C -7848.8672 8539.5449 -7845.4082 8540.5537 V -7843.585 8535.6309 L -7843.5337 8535.5957 L f *u 0.048 0.192 0.912 0 k 1 D -7835.9346 8550.3926 m -7837.2817 8551.7383 -7839.332 8552.1133 -7841.5234 8551.627 C -7851.6714 8561.7734 L -7851.7695 8561.5684 -7851.7695 8561.5684 -7851.6714 8561.7734 c -7850.2246 8564.8145 -7849.9702 8567.916 -7851.082 8570.2168 C -7850.5176 8568.2461 -7851.1226 8565.5449 -7852.6855 8562.7891 c -7853.5054 8561.3438 -7854.5918 8559.8848 -7855.9102 8558.5059 C -7855.2153 8556.8633 L -7855.1816 8556.8945 -7855.1465 8556.9238 -7855.1143 8556.957 c -7855.084 8556.9883 -7855.0566 8557.0176 -7855.0273 8557.0469 c -7855.0278 8557.0469 -7855.0278 8557.0469 -7855.0278 8557.0449 C -7841.3408 8543.3574 L -7836.3262 8541.1289 L -7836.2954 8541.1182 L -7834.0938 8544.4961 -7833.8398 8548.2949 -7835.9346 8550.3926 c f *U 0.0215 0.086 0.4085 0 k 0 D -7842.582 8534.9258 m -7843.5337 8535.5957 L -7841.6846 8536.1113 -7839.7656 8537.2285 -7838.1138 8538.8828 c -7837.4063 8539.5889 -7836.7998 8540.3418 -7836.2954 8541.1182 C -7835.1382 8540.6973 L -7835.6553 8539.7246 -7836.3374 8538.793 -7837.1802 8537.9512 c -7838.7695 8536.3594 -7840.6758 8535.3428 -7842.582 8534.9258 C f 0.0205 0.082 0.3895 0 k -7836.2954 8541.1182 m -7836.7998 8540.3418 -7837.4063 8539.5889 -7838.1138 8538.8828 c -7839.7656 8537.2285 -7841.6846 8536.1113 -7843.5337 8535.5957 C -7843.585 8535.6309 L -7845.4082 8540.5537 L -7844.2114 8540.9219 -7842.9878 8541.6436 -7841.9302 8542.7012 c -7841.7202 8542.9141 -7841.5264 8543.1328 -7841.3408 8543.3574 C -7836.3262 8541.1289 L -7836.2954 8541.1182 L f U u 0.445 0.356 0.267 0 k -7883.8496 8585.9961 m -7861.957 8562.9688 L -7862.2007 8562.6494 -7862.5752 8562.6133 -7862.8887 8562.6592 C -7867.1802 8567.2891 -7878.3145 8579.4561 -7882.7266 8584.2793 C -7883.5649 8585.3516 -7884 8585.9932 -7883.8496 8585.9961 C f 0.15 0.12 0.09 0 k -7883.834 8585.9961 m -7882.6606 8585.7031 -7861.6934 8564.0029 Y -7861.6934 8563.502 -7861.7993 8563.1758 -7861.957 8562.9688 C -7883.8496 8585.9961 L -7883.8442 8585.9961 -7883.8418 8586 -7883.834 8585.9961 c f 0.2 0.16 0.12 0 k -7882.7266 8584.2793 m -7878.3145 8579.4561 -7867.1802 8567.2891 -7862.8887 8562.6592 C -7863.2002 8562.7041 -7863.4526 8562.8301 Y -7864.603 8563.1328 -7878.5742 8578.9619 -7882.7266 8584.2793 C f U U U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 37) 0 A u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7882.9502 8585.2324 m -7833.0391 8585.2324 L -7833.0391 8521.1152 L -7882.9502 8521.1152 L -7882.9502 8585.2324 L n u 0 O 0 0 0 1 k 0 R 0 0 0 1 K 0 w -7833.2358 8521.1152 m -7833.6064 8521.248 -7833.9858 8521.2832 -7834.3833 8521.2031 c -7834.4863 8521.168 l -7834.5254 8521.1602 -7834.5703 8521.1787 -7834.6025 8521.1992 c -7834.9434 8521.3926 l -7838.7129 8523.2959 -7842.0962 8525.8965 -7844.5 8529.4473 c -7845.9634 8531.5918 -7847.123 8533.8789 -7848.7993 8535.8564 c -7849.1729 8536.209 -7849.1758 8536.7725 -7848.834 8537.1309 c -7848.4951 8537.501 -7847.918 8537.5078 -7847.561 8537.165 c -7847.4038 8537.21 l -7847.2642 8537.1289 -7847.0742 8537.0703 -7847.0234 8536.957 c -7845.853 8534.2031 -7845.1895 8531.5137 -7843.4336 8529.1387 c -7841.1719 8526.0947 -7838.1777 8523.9941 -7835.0298 8522.0234 c -7834.3672 8521.6055 L -7834.4966 8521.6348 L -7833.7695 8521.6426 l -7833.791 8521.6113 -7833.8008 8521.5957 -7833.8223 8521.5645 C -7833.6064 8521.5234 -7833.377 8521.4746 -7833.1626 8521.4336 c -7833.0762 8521.4238 -7833.0186 8521.3389 -7833.0391 8521.2383 c -7833.0503 8521.1523 -7833.1382 8521.1084 -7833.2358 8521.1152 c -7833.2358 8521.1152 l b -7849.2222 8534.9951 m -7849.5742 8534.8066 -7849.9658 8534.6719 -7850.248 8534.3887 c -7856.4521 8528.1719 -7866.6802 8527.2734 -7874.0488 8533.6855 C -7874.1582 8533.7813 -7874.1582 8533.957 -7874.063 8534.0645 C -7871.0527 8532.9434 -7862.8838 8534.375 -7859.3223 8537.4121 C -7859.2534 8537.4668 -7859.1465 8537.4531 -7859.1055 8537.3711 C -7859.0503 8537.3047 -7859.0664 8537.1953 -7859.1328 8537.1563 C -7862.5625 8534.0859 -7867.0674 8532.29 -7871.6729 8532.748 C -7868.8535 8531.1855 -7865.6313 8530.4941 -7862.3984 8530.6885 c -7857.7144 8530.9717 -7853.4634 8533.1191 -7849.3711 8535.2793 c -7849.291 8535.3193 -7849.1978 8535.293 -7849.1553 8535.2109 C -7849.1016 8535.1309 -7849.1426 8535.0352 -7849.2222 8534.9951 c b -7858.647 8536.3359 m -7860.2266 8540.3613 -7862.3911 8544.3203 -7865.8018 8547.0762 c -7865.9648 8547.2119 -7865.9946 8547.4492 -7865.8711 8547.6055 c -7865.7344 8547.7676 -7865.5049 8547.7793 -7865.3481 8547.6563 c -7861.123 8545.5967 -7858.1904 8541.1309 -7858.1626 8536.4014 c -7858.1626 8536.4014 l -7858.1328 8536.2676 -7858.2354 8536.1348 -7858.3633 8536.1221 c -7858.5039 8536.1055 -7858.6318 8536.1973 -7858.647 8536.3359 c -7858.647 8536.3359 l b -7852.9414 8541.0176 m -7853.042 8541.1816 -7853.1152 8541.3838 -7853.2617 8541.4824 c -7856.0806 8543.3906 -7858.9785 8544.6309 -7861.8848 8546.1328 c -7862.0503 8546.209 -7862.1118 8546.418 -7862.0313 8546.5703 c -7861.9512 8546.7227 -7861.7559 8546.7793 -7861.5898 8546.7041 c -7858.439 8545.3232 -7854.313 8544.5 -7852.6729 8541.1797 c -7852.6289 8541.1113 -7852.6455 8541.0146 -7852.7266 8540.9648 c -7852.7959 8540.9199 -7852.897 8540.9492 -7852.9414 8541.0176 c -7852.9414 8541.0176 l b -7852.6602 8541.918 m -7852.4438 8542.4297 -7852.1431 8542.8896 -7852.0503 8543.4355 c -7851.2183 8548.2773 -7851.1152 8553.042 -7852.248 8557.6875 c -7852.248 8557.6875 l -7852.3418 8557.9531 -7852.2114 8558.2441 -7851.9438 8558.3389 c -7851.6777 8558.4336 -7851.3882 8558.3125 -7851.2935 8558.0479 c -7849.293 8552.8115 -7849.897 8546.7373 -7852.3711 8541.7832 c -7852.4063 8541.7002 -7852.498 8541.6689 -7852.582 8541.6914 c -7852.6641 8541.7275 -7852.6978 8541.835 -7852.6602 8541.918 c -7852.6602 8541.918 l b -7851.5352 8557.5938 m -7848.8984 8555.2275 -7846.6816 8552.252 -7845.853 8548.7363 c -7845.853 8548.7363 l -7845.7246 8548.1816 -7846.0742 8547.623 -7846.6416 8547.4902 c -7847.1992 8547.375 -7847.7578 8547.7246 -7847.8862 8548.2793 c -7848.5649 8551.5313 -7849.8711 8554.6729 -7851.7954 8557.3867 c -7851.7954 8557.3867 l -7851.8462 8557.4551 -7851.834 8557.5576 -7851.7695 8557.6201 c -7851.6992 8557.6699 -7851.5977 8557.6582 -7851.5352 8557.5938 c -7851.5352 8557.5938 l b -7836.3711 8550.1826 m -7837.7114 8545.8301 -7840.2598 8542.0693 -7843.689 8539.1533 C -7843.729 8539.0723 -7843.8242 8539.0322 -7843.9038 8539.0859 C -7843.9863 8539.127 -7844.0122 8539.2207 -7843.9722 8539.3018 C -7843.957 8539.7891 -7843.7144 8540.2334 -7843.4458 8540.5313 c -7838.4063 8546.1621 -7834.9902 8554.7197 -7837.3433 8561.9551 C -7837.0762 8556.4512 -7838.7241 8550.3008 -7842.1362 8545.6738 c -7843.1606 8544.2695 -7844.7422 8544.1211 -7846.3081 8544.2031 C -7846.4023 8544.1895 -7846.4834 8544.2432 -7846.4961 8544.3369 c -7846.5098 8544.4189 -7846.4551 8544.5137 -7846.3623 8544.5254 C -7843.1479 8545.7695 -7841.4878 8549.2246 -7840.084 8552.1943 c -7838.415 8555.7441 -7837.7017 8559.6387 -7838.0054 8563.5 C -7838.0454 8563.6777 -7838.1138 8565.3975 -7837.9775 8565.4102 C -7837.8306 8565.4395 -7837.709 8565.3438 -7837.6802 8565.1943 C -7837.645 8565.0449 -7834.6426 8555.7988 -7836.3711 8550.1826 c b -7844.4863 8537.4912 m -7843.3945 8533.6211 -7841.1094 8530.251 -7838.4824 8527.2383 c -7838.3306 8527.1045 -7838.3145 8526.8867 -7838.4502 8526.7354 c -7838.5752 8526.6006 -7838.8047 8526.582 -7838.957 8526.7178 c -7842.3306 8529.332 -7843.4487 8533.541 -7844.7954 8537.375 c -7844.7954 8537.375 l -7844.8262 8537.4648 -7844.7754 8537.5586 -7844.6982 8537.5869 c -7844.6094 8537.6191 -7844.5166 8537.5684 -7844.4863 8537.4912 c -7844.4863 8537.4912 l b -7838.5313 8562.1094 m -7838.5991 8562.0566 -7838.707 8562.083 -7838.748 8562.1504 C -7838.9634 8562.4746 -7840.6914 8564.5195 -7841.3926 8565.1406 c -7846.1719 8569.3945 -7849.5137 8573.9609 -7857.5391 8577.7227 c -7864.4512 8580.9639 -7867.1113 8583.5957 -7874.3862 8581.8262 c -7877.687 8581.0293 -7879.0313 8580.5313 -7880.4351 8575.4551 C -7881.9473 8569.2988 -7880.8672 8571.7832 -7881.084 8564.4385 c -7881.2222 8559.6973 -7884 8548.4551 -7871.5254 8534.2598 C -7871.4199 8534.1484 -7871.4336 8533.9961 -7871.5337 8533.9072 C -7871.6328 8533.8027 -7871.7959 8533.8164 -7871.8862 8533.916 C -7877.5786 8538.7168 -7881.0234 8545.6582 -7882.3145 8552.9424 c -7883.2871 8558.4668 -7882.9199 8563.25 -7882.666 8569.6367 c -7882.5688 8572.0938 -7883.6855 8579.0723 -7878.9102 8583.0625 c -7875.3926 8586 -7870.3911 8585.5469 -7866.3545 8584.1563 c -7860.6992 8582.2119 -7855.9727 8579.1465 -7850.8711 8575.6094 c -7847.2656 8573.125 -7839.2881 8563.2852 -7838.4785 8562.3262 C -7838.4351 8562.2588 -7838.4502 8562.1504 -7838.5313 8562.1094 C b -7873.0503 8549.3057 m -7872.168 8548.5029 -7871.7017 8549.8457 -7871.4297 8550.6016 c -7871.1626 8551.3574 -7870.189 8551.25 -7870.5127 8551.5732 c -7870.8369 8551.8975 -7870.8369 8551.9521 -7871.3232 8551.5195 c -7871.8086 8551.0879 -7871.8086 8551.7363 -7872.5649 8551.25 c -7873.3198 8550.7627 -7873.645 8549.8457 -7873.0503 8549.3057 c b -7865.6519 8553.9492 m -7865.3657 8553.5918 -7864.6802 8553.5723 -7864.4648 8553.8945 c -7864.25 8554.2197 -7863.3306 8554.2734 -7863.4937 8554.5967 c -7863.6543 8554.9219 -7863.6016 8555.1387 -7864.0874 8554.9219 c -7864.5737 8554.7051 -7864.4121 8555.2998 -7864.897 8555.084 c -7865.3833 8554.8672 -7865.8687 8554.2197 -7865.6519 8553.9492 c b -7857.6074 8559.0791 m -7857.1206 8558.7559 -7855.8794 8559.5117 -7856.4727 8559.5117 c -7857.0674 8559.5117 -7856.311 8560.2676 -7856.8521 8560.4834 c -7857.3906 8560.6992 -7857.2832 8560.4297 -7857.6074 8560.6445 c -7857.9297 8560.8613 -7858.3633 8561.2393 -7858.5239 8560.4297 c -7858.6855 8559.6191 -7858.3633 8559.6191 -7857.9849 8559.3496 c -7857.6074 8559.0791 -7857.6074 8559.0791 y b -7872.2402 8559.3496 m -7871.1074 8559.2422 -7871.8633 8559.998 -7871.269 8560.4834 c -7870.6738 8560.9697 -7869.918 8561.6172 -7870.729 8561.4004 c -7871.5391 8561.1855 -7872.9961 8561.6719 -7872.9434 8560.5381 c -7872.8887 8559.4033 -7872.6328 8559.3867 -7872.2402 8559.3496 c b -7866.5703 8567.6113 m -7866.1016 8567.3438 -7866.6802 8567.7197 -7866.0303 8567.6113 c -7865.3833 8567.5039 -7864.7886 8567.6113 -7865.2207 8567.8281 c -7865.6519 8568.0439 -7866.3008 8568.1523 -7866.4634 8567.9893 c -7866.625 8567.8281 -7866.9473 8567.8281 -7866.5703 8567.6113 c b -7857.0674 8567.1797 m -7857.4785 8566.1797 -7856.0962 8566.4238 -7855.4473 8566.7461 c -7854.7998 8567.0723 -7853.8262 8566.4775 -7854.4209 8566.9102 c -7855.0137 8567.3418 -7854.7998 8566.9102 -7855.3926 8567.2334 c -7855.9873 8567.5566 -7856.6895 8568.0977 -7857.0674 8567.1797 c b -7872.6738 8573.0664 m -7872.7222 8572.0752 -7871.8086 8572.957 -7871.269 8573.0117 c -7870.729 8573.0664 -7870.0801 8573.0664 -7870.2432 8573.2813 c -7870.4038 8573.498 -7870.459 8573.498 -7871.1626 8573.7129 c -7871.8633 8573.9297 -7872.6191 8574.1445 -7872.6738 8573.0664 c b -7873.1582 8567.6113 m -7874.0664 8567.9746 -7874.293 8567.8809 -7874.5625 8568.2051 c -7874.834 8568.5293 -7875.1558 8569.2314 -7875.5352 8568.0977 c -7875.9121 8566.9629 -7875.4282 8565.7764 -7875.0479 8565.9375 c -7874.6714 8566.0996 -7874.293 8566.7461 -7873.8618 8566.9629 c -7873.4297 8567.1797 -7872.6191 8567.3945 -7873.1582 8567.6113 c b U U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 41) 0 A u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7884 8586 m -7803 8586 L -7803 8481 L -7884 8481 L -7884 8586 L n u u u 0 O 0 0 0 1 k -7865.8057 8498.4258 m -7866.0742 8496.6621 -7867.1602 8495.291 -7868.5239 8495.3965 c -7869.8862 8495.502 -7870.707 8497.0234 -7870.7432 8498.8066 c -7870.748 8499.0693 -7870.6743 8500.2441 -7870.6304 8500.4775 C -7870.6382 8500.582 -7870.6191 8500.6738 -7870.6104 8500.7803 c -7870.5142 8502.0254 -7869.3574 8503.3604 -7867.9414 8503.25 c -7866.5249 8503.1406 -7865.4897 8501.8613 -7865.6367 8500.4727 c -7865.644 8500.4072 -7865.6958 8499.626 -7865.707 8499.5625 C -7865.6816 8499.2852 -7865.7598 8498.7256 -7865.8057 8498.4258 c f -7876.2646 8507.7334 m -7876.9946 8515.916 -7871.5015 8515.1191 v -7868.3682 8514.0186 -7869.4414 8511.1211 v -7869.6426 8509.752 -7871.7847 8508.498 v -7872.146 8508.25 -7872.7632 8507.1016 v -7873.1294 8505.5977 -7874.5186 8505.2979 v -7876.0762 8505.251 -7876.2646 8507.7334 v f -7850.7646 8516.4971 m F -7850.0762 8514.3408 m -7850.7847 8513.1934 -7853.8848 8513.6279 Y -7854.811 8513.6885 -7855.3799 8513.1113 Y -7857.8394 8509.0918 -7861.0386 8509.8857 -7861.4082 8509.9932 C -7861.4097 8509.9863 L -7864.999 8510.6045 -7865.2666 8515.6035 V -7865.4912 8516.3828 -7866.335 8516.7695 V -7869.2695 8517.8613 -7869.3481 8519.208 V -7869.8999 8521.1152 -7867.6006 8521.7422 V -7865.6792 8522.2568 -7863.7886 8519.8945 V -7862.6113 8518.6797 -7859.5762 8517.9395 V -7859.5728 8517.9531 L -7856.3594 8517.0459 -7854.6392 8517.5889 Y -7851.8521 8518.7676 -7850.4063 8517.4014 Y -7848.6826 8515.7559 -7850.0762 8514.3408 Y f -7863.9834 8497.8789 m -7864.5854 8496.2002 -7864.2822 8494.4775 -7863.0327 8493.9229 c -7861.7842 8493.3672 -7860.3384 8494.3164 -7859.4585 8495.8672 c -7859.3286 8496.0957 -7858.8359 8497.165 -7858.7632 8497.3906 C -7858.7065 8497.4785 -7858.6792 8497.5684 -7858.6362 8497.667 c -7858.1289 8498.8086 -7858.5122 8500.5303 -7859.8105 8501.1074 c -7861.1089 8501.6855 -7862.6279 8501.0527 -7863.1582 8499.7617 c -7863.1831 8499.7002 -7863.5078 8498.9883 -7863.5298 8498.9268 C -7863.6831 8498.6963 -7863.8809 8498.166 -7863.9834 8497.8789 c f -7849.7129 8500.9316 m -7845.1802 8507.7822 -7850.3911 8509.6943 v -7853.6714 8510.2168 -7854.103 8507.1572 v -7854.5786 8505.8564 -7853.29 8503.7354 v -7853.0903 8503.3447 -7853.0938 8502.04 v -7853.4858 8500.5449 -7852.4082 8499.6182 v -7851.0591 8498.8359 -7849.7129 8500.9316 v f U u -7824.7358 8550.1074 m -7824.3687 8548.3623 -7824.9048 8546.6963 -7826.2183 8546.3164 c -7827.5322 8545.9375 -7828.8345 8547.0752 -7829.4937 8548.7324 c -7829.5903 8548.9775 -7829.9326 8550.1025 -7829.9746 8550.3369 C -7830.0176 8550.4326 -7830.0322 8550.5244 -7830.0625 8550.6279 c -7830.4087 8551.8271 -7829.7935 8553.4805 -7828.4282 8553.875 c -7827.063 8554.2695 -7825.645 8553.4365 -7825.2969 8552.085 c -7825.2793 8552.0205 -7825.0552 8551.2705 -7825.0425 8551.207 C -7824.9214 8550.9551 -7824.7983 8550.4053 -7824.7358 8550.1074 c f -7838.2705 8554.6172 m -7841.8242 8562.0244 -7836.3999 8563.2061 v -7833.0801 8563.2754 -7833.0688 8560.1846 v -7832.7778 8558.8311 -7834.3433 8556.9072 v -7834.5942 8556.5459 -7834.7695 8555.2539 v -7834.5854 8553.7188 -7835.7793 8552.9492 v -7837.2222 8552.3594 -7838.2705 8554.6172 v f -7817.4648 8571.7695 m F -7816.063 8569.9912 m -7816.3247 8568.6689 -7819.3799 8567.9883 Y -7820.27 8567.7197 -7820.5986 8566.9795 Y -7821.4922 8562.3535 -7824.7666 8561.9746 -7825.1494 8561.9453 C -7825.1494 8561.9395 L -7828.7271 8561.2588 -7830.731 8565.8467 V -7831.2153 8566.4961 -7832.1416 8566.5625 V -7835.272 8566.5557 -7835.8169 8567.7891 V -7837.0039 8569.3809 -7835.0713 8570.7764 V -7833.4526 8571.9316 -7830.853 8570.3818 V -7829.3242 8569.6582 -7826.2222 8570.0293 V -7826.2231 8570.042 L -7822.896 8570.3213 -7821.4766 8571.4326 Y -7819.2793 8573.5146 -7817.4463 8572.7432 Y -7815.2554 8571.8057 -7816.063 8569.9912 Y f -7822.8374 8550.2354 m -7822.813 8548.4512 -7821.9258 8546.9453 -7820.5601 8546.8633 c -7819.1943 8546.7803 -7818.1743 8548.1768 -7817.895 8549.9385 c -7817.854 8550.1973 -7817.7666 8551.3711 -7817.7778 8551.6094 C -7817.7559 8551.7109 -7817.7617 8551.8037 -7817.7559 8551.9121 c -7817.6807 8553.1592 -7818.644 8554.6367 -7820.0625 8554.7217 c -7821.4814 8554.8066 -7822.6826 8553.6826 -7822.7246 8552.2871 c -7822.7271 8552.2217 -7822.7822 8551.4404 -7822.7798 8551.375 C -7822.8433 8551.1045 -7822.8423 8550.54 -7822.8374 8550.2354 c f -7811.0186 8557.5625 m -7809.1777 8565.5684 -7814.7271 8565.5303 v -7817.9834 8564.8691 -7817.3154 8561.8516 v -7817.3032 8560.4668 -7815.353 8558.9326 v -7815.0278 8558.6377 -7814.5742 8557.415 v -7814.417 8555.876 -7813.083 8555.3877 v -7811.5454 8555.1279 -7811.0186 8557.5625 v f U U 1 Ap -7884 8586 m -7884 8481 L -7803 8481 L -7803 8586 L -7884 8586 L n U U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 42) 0 A u 0 Ap 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7857.4609 8559.085 m -7885 8559.085 L -7885 8586.624 L -7857.4609 8586.624 L -7857.4609 8559.085 L n 0 O 0 0.55 1 0.12 k -7871.7598 8577.3623 m -7871.7598 8587 L -7870.6343 8587 L -7870.6343 8577.3623 L -7871.7598 8577.3623 L f 0 0.55 1 0.3 k -7875.4233 8572.876 m -7874.3096 8571.1553 -7870.8809 8569.457 -7866.4966 8569.457 c -7862.1152 8569.457 -7858.6138 8571.1064 -7857.5718 8572.874 C -7857.5718 8572.874 L -7858.6138 8574.6006 -7862.1152 8576.2979 -7866.4966 8576.2979 c -7870.875 8576.2979 -7874.3242 8574.5615 -7875.4233 8572.876 C f U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 45) 0 A u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7885 8543.918 m -7885 8587 L -7798.2217 8587 L -7798.2217 8543.918 L -7885 8543.918 L n u u 0 O 0 0 0 1 k -7825.2217 8573.2363 m -7825.2217 8581.0742 L -7813.2217 8574.1445 L -7801.2217 8567.2168 L -7813.2217 8560.2891 L -7825.2217 8553.3613 L -7825.2217 8561.4824 L -7883.9351 8547.7168 L -7870.9878 8566.8027 L -7885 8587 L -7825.2217 8573.2363 L f 0 1 1 0.1 k 0 R 0 0 0 1 K -7823.2217 8570.2363 m -7823.2217 8578.0742 L -7811.2217 8571.1445 L -7799.2217 8564.2168 L -7811.2217 8557.2891 L -7823.2217 8550.3613 L -7823.2217 8558.4824 L -7881.9351 8544.7168 L -7867.2754 8564.3594 L -7881.9351 8584 L -7823.2217 8570.2363 L b U U U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 50) 0 A u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7884 8586 m -7756.877 8586 L -7756.877 8538.415 L -7884 8538.415 L -7884 8586 L n u *u 0 O 0.9529 0.949 0.1961 0.0745 k -7857.793 8570.417 m -7857.8232 8570.2676 L -7859.9849 8564.3643 -7860.9438 8561.6377 -7861.2754 8560.2891 c -7861.3657 8560.2891 L -7861.6953 8561.6074 -7862.7754 8564.335 -7864.9673 8570.2676 c -7864.9966 8570.417 L -7857.793 8570.417 l f 1 D -7868.1182 8578.9678 m -7869.6191 8582.5371 -7870.3994 8584.709 -7868.1182 8584.917 c -7868.1182 8585.9678 L -7870.6992 8585.9375 -7873.5806 8585.917 -7876.3418 8585.917 c -7880.0649 8585.917 -7882.5273 8585.9375 -7884 8585.9678 c -7884 8584.917 L -7882.1064 8584.709 -7881.0542 8582.5674 -7873.5513 8565.5029 c -7861.6953 8538.415 L -7859.8638 8538.415 L -7848.1582 8565.5029 L -7840.8047 8582.5078 -7839.7246 8584.709 -7837.8887 8584.917 c -7837.8887 8585.9678 L -7839.5142 8585.9375 -7841.916 8585.917 -7845.5767 8585.917 c -7848.5488 8585.917 -7851.6694 8585.9375 -7854.7026 8585.9678 c -7854.7026 8584.917 L -7852.481 8584.709 -7853.3218 8582.5078 -7854.7617 8578.9678 C -7868.1182 8578.9678 l f *U *u 0 D -7813.0762 8554.0811 m -7813.0762 8550.4717 -7815.3535 8548.0947 -7819.1294 8548.0947 c -7820.2383 8548.0947 -7821.0767 8548.2158 -7821.5273 8548.2451 c -7821.5273 8560.5479 L -7820.8672 8560.6084 -7820.208 8560.6084 -7819.729 8560.6084 c -7818.2002 8560.6084 -7816.7026 8560.127 -7815.6841 8559.4053 c -7814.3945 8558.5332 -7813.0762 8556.7881 -7813.0762 8554.1416 C -7813.0762 8554.0811 l f 1 D -7832.0806 8558.3926 m -7832.0806 8542.6445 -7832.0806 8540.4287 -7834.542 8540.2783 c -7834.542 8539.3184 L -7833.042 8539.2588 -7830.3174 8539.1992 -7827.5664 8539.1689 c -7825.6538 8539.1084 -7822.3945 8539.0186 -7820.1479 8538.9775 c -7816.582 8538.9775 -7813.585 8539.4258 -7811.0049 8540.2627 c -7806.353 8541.8477 -7801.9702 8545.8525 -7801.9702 8553.6602 c -7801.9702 8558.7432 -7804.4014 8562.3193 -7806.5034 8564.0605 c -7807.583 8565.0215 -7808.8135 8565.832 -7809.7744 8566.3125 c -7809.7744 8566.4629 L -7807.5234 8569.4912 -7805.6025 8572.0625 -7799.3906 8580.6426 c -7797.5 8583.0645 -7795.9102 8584.7383 -7794.7402 8584.9775 c -7794.7402 8586 L -7796.6602 8586 -7799 8585.8848 -7801.1294 8585.8848 c -7803.3511 8585.8848 -7804.8521 8586 -7806.4424 8586 c -7807.6729 8586 -7808.7241 8585.9404 -7809.5039 8585.2725 c -7813.0151 8579.8477 -7816.9121 8573.7559 -7820.1182 8568.7139 c -7820.5078 8568.7139 -7820.957 8568.7139 -7821.5273 8568.7139 c -7821.5273 8571.2852 L -7821.5273 8582.5264 -7821.437 8584.7686 -7819.1895 8584.9775 c -7819.1895 8585.9697 L -7820.6279 8585.9404 -7823.9194 8585.915 -7826.6992 8585.915 c -7829.9287 8585.915 -7832.8921 8585.9404 -7834.5122 8585.9697 c -7834.5122 8584.9775 L -7832.0518 8584.7686 -7832.0806 8582.5264 -7832.0806 8565.5918 C -7832.0806 8558.3926 l f *U *u 0 D -7781.4561 8565.5928 m -7781.4561 8582.4941 -7781.4561 8584.6484 -7784.2832 8584.9775 C -7784.2832 8585.9697 l -7782.3887 8585.9404 -7779.0542 8585.915 -7775.7822 8585.915 c -7772.6294 8585.915 -7769.5688 8585.9404 -7767.2881 8585.9697 C -7767.2881 8584.9775 l -7770.2578 8584.9775 -7770.2881 8582.5244 -7770.2881 8565.5928 C -7770.2881 8548.1514 L -7762.8193 8548.1514 l -7759.999 8548.1514 -7758.5298 8548.96 -7757.8994 8551.2627 C -7756.9072 8551.2627 l -7756.9072 8546.4697 -7756.877 8542.415 -7756.877 8539.1709 c -7761.3486 8539.2012 -7766.748 8539.2314 -7772.0601 8539.2314 C -7779.7446 8539.2314 l -7784.5537 8539.2314 -7789.9966 8539.2012 -7794.9614 8539.1709 c -7794.9614 8542.3848 -7794.9326 8546.4697 -7794.9326 8551.2627 C -7793.9072 8551.2627 l -7793.3657 8549.1094 -7791.771 8548.1514 -7788.9438 8548.1514 C -7781.4561 8548.1514 l -7781.4561 8565.5928 L f *U U U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 62) 0 A u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7885 8587 m -7885 8548.7305 L -7846.7305 8548.7305 L -7846.7305 8587 L -7885 8587 L n 0 O 1 0.14 0.09 0 k -7846.7305 8569.9043 m -7846.7305 8561.3408 L -7885 8561.3408 L -7885 8569.9043 L -7846.7305 8569.9043 L f -7846.7305 8573.0967 m -7846.7305 8572.4229 L -7885 8572.4229 L -7885 8573.0967 L -7846.7305 8573.0967 L f U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 63) 0 A u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7885 8587 m -7885 8548.7305 L -7846.7305 8548.7305 L -7846.7305 8587 L -7885 8587 L n 0 O 1 0.14 0.09 0 k -7846.7305 8565.8262 m -7846.7305 8574.3896 L -7859.3408 8574.3896 L -7859.3408 8587 L -7867.9038 8587 L -7867.9063 8565.8262 L -7867.9038 8565.8262 L -7867.9038 8565.8252 L -7846.7305 8565.8262 L f -7846.7305 8563.3076 m -7870.4233 8563.3076 L -7870.4233 8587 L -7871.0967 8587 L -7871.0977 8562.6328 L -7846.7305 8562.6328 L -7846.7305 8563.3076 L f U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 64) 0 A u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7885 8586.999 m -7885 8548.7285 L -7846.7305 8548.7285 L -7846.7305 8586.999 L -7885 8586.999 L n 0 O 1 0.14 0.09 0 k -7846.7305 8561.3389 m -7872.3896 8561.3389 L -7872.3896 8586.999 L -7863.8262 8587 L -7863.8262 8569.9033 L -7846.7305 8569.9033 L -7846.7305 8561.3389 L f -7846.7305 8572.4219 m -7861.3081 8572.4219 L -7861.3081 8587 L -7860.6338 8587 L -7860.6338 8573.0957 L -7846.7305 8573.0957 L -7846.7305 8572.4219 L f U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 65) 0 A u 1 Ap 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7857.0625 8559.4609 m -7884.6025 8559.4609 L -7884.6025 8587 L -7857.0625 8587 L -7857.0625 8559.4609 L n 0 O 0 0.55 1 0.12 k -7856.8418 8572.7002 m -7885 8572.7002 L -7885 8573.8252 L -7856.8418 8573.8252 L -7856.8418 8572.7002 L f u 0 0.55 1 0.3 k -7883.9814 8560.5215 m -7884.4102 8562.5254 -7883.1865 8566.1514 -7880.0874 8569.251 c -7876.9878 8572.3496 -7873.3457 8573.6602 -7871.3594 8573.1455 C -7871.3594 8573.1455 L -7870.875 8571.1895 -7872.1519 8567.5117 -7875.25 8564.4141 c -7878.3457 8561.3184 -7882.0122 8560.1064 -7883.9814 8560.5215 C f 0 0.39 0.7 0.12 k -7883.9814 8585.9912 m -7884.4102 8583.9883 -7883.1865 8580.3613 -7880.0874 8577.2617 c -7876.9878 8574.1641 -7873.3457 8572.8535 -7871.3594 8573.3672 C -7871.3594 8573.3672 L -7870.875 8575.3242 -7872.1519 8579.001 -7875.25 8582.0996 c -7878.3457 8585.1953 -7882.0122 8586.4063 -7883.9814 8585.9912 C f U u 0 0.55 1 0.3 k -7870.1782 8585.9912 m -7870.6074 8583.9883 -7869.3838 8580.3613 -7866.2842 8577.2617 c -7863.1855 8574.1641 -7859.543 8572.8535 -7857.5576 8573.3672 C -7857.5566 8573.3672 L -7857.0718 8575.3242 -7858.3496 8579.001 -7861.4473 8582.0996 c -7864.543 8585.1953 -7868.209 8586.4063 -7870.1782 8585.9912 C f 0 0.39 0.7 0.12 k -7870.1782 8560.5215 m -7870.6074 8562.5254 -7869.3838 8566.1514 -7866.2842 8569.251 c -7863.1855 8572.3496 -7859.543 8573.6602 -7857.5576 8573.1455 C -7857.5566 8573.1455 L -7857.0718 8571.1895 -7858.3496 8567.5117 -7861.4473 8564.4141 c -7864.543 8561.3184 -7868.209 8560.1064 -7870.1782 8560.5215 C f U U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 67) 0 A u 0 Ap 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7857.4609 8559.085 m -7885 8559.085 L -7885 8586.624 L -7857.4609 8586.624 L -7857.4609 8559.085 L n 0 O 0 0.55 1 0.12 k -7871.7598 8577.3623 m -7871.7598 8587 L -7870.6343 8587 L -7870.6343 8577.3623 L -7871.7598 8577.3623 L f 0 0.55 1 0.3 k -7875.4233 8572.876 m -7874.3096 8571.1553 -7870.8809 8569.457 -7866.4966 8569.457 c -7862.1152 8569.457 -7858.6138 8571.1064 -7857.5718 8572.874 C -7857.5718 8572.874 L -7858.6138 8574.6006 -7862.1152 8576.2979 -7866.4966 8576.2979 c -7870.875 8576.2979 -7874.3242 8574.5615 -7875.4233 8572.876 C f U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 69) 0 A u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7857.4609 8559.4609 m -7885 8559.4609 L -7885 8587 L -7857.4609 8587 L -7857.4609 8559.4609 L n 0 O 0 0.55 1 0.3 k -7875.4233 8573.252 m -7874.3096 8571.5313 -7870.8809 8569.833 -7866.4966 8569.833 c -7862.1152 8569.833 -7858.6138 8571.4824 -7857.5718 8573.25 C -7857.5718 8573.25 L -7858.6138 8574.9766 -7862.1152 8576.6738 -7866.4966 8576.6738 c -7870.875 8576.6738 -7874.3242 8574.9375 -7875.4233 8573.252 C f U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 83) 0 A u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7884 8585.9355 m -7670.4009 8585.9355 L -7670.4009 8578.1348 L -7884 8578.1348 L -7884 8585.9355 L n 0 O 0 0 0 1 k -7884 8582.0352 m -7873.9858 8584.5273 -7867.187 8585.875 -7855.2007 8585.9355 c -7842.2183 8586 -7777.2002 8585.9355 y -7712.1816 8586 -7699.2002 8585.9355 v -7687.2129 8585.875 -7680.415 8584.5273 -7670.4009 8582.0352 C -7680.415 8579.543 -7687.2129 8578.1953 -7699.2002 8578.1348 c -7712.1816 8578.0693 -7777.2002 8578.1348 y -7842.2183 8578.0693 -7855.2007 8578.1348 v -7867.187 8578.1953 -7873.9858 8579.543 -7884 8582.0352 C f U %AI8_EndBrushPattern %AI5_End_NonPrinting-- %AI5_Begin_NonPrinting Np 4 Bn %AI5_BeginGradient: (Black, White) (Black, White) 0 2 Bd [ < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 0 %_Br [ 0 0 50 100 %_BS %_0 0 50 100 Bs 1 0 50 0 %_BS %_1 0 50 0 Bs BD %AI5_EndGradient %AI5_BeginGradient: (Chrome) (Chrome) 0 6 Bd [ 0 < 464646454545444444444343434342424241414141404040403F3F3F3E3E3E3E3D3D3D3C3C3C3C3B 3B3B3B3A3A3A39393939383838383737373636363635353535343434333333333232323131313130 3030302F2F2F2E2E2E2E2D2D2D2D2C2C2C2B2B2B2B2A2A2A2A292929282828282727272626262625 2525252424242323232322222222212121202020201F1F1F1F1E1E1E1D1D1D1D1C1C1C1B1B1B1B1A 1A1A1A1919191818181817171717161616151515151414141413131312121212111111101010100F 0F0F0F0E0E0E0D0D0D0D0C0C0C0C0B0B0B0A0A0A0A09090909080808070707070606060505050504 04040403030302020202010101010000 > < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > < 1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A 1A1A1A19191919191919191818181818181818181717171717171717161616161616161615151515 15151515151414141414141414131313131313131312121212121212121211111111111111111010 1010101010100F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C 0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A090909090909090909080808080808080807070707070707 07060606060606060606050505050505050504040404040404040303030303030303030202020202 02020201010101010101010000000000 > 1 %_Br 0 0.275 1 < 6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544 434241403F3E3D3C3B3A393837363534333231302F2E2D2C2B2A292827262524232221201F > 1 %_Br 0 < 00000101010102020202030303040404040505050506060607070707080808090909090A0A0A0A0B 0B0B0C0C0C0C0D0D0D0D0E0E0E0F0F0F0F1010101011111112121212131313141414141515151516 161617171717181818181919191A1A1A1A1B1B1B1C1C1C1C1D1D1D1D1E1E1E1F1F1F1F2020202021 212122222222232323232424242525252526262626272727282828282929292A2A2A2A2B2B2B2B2C 2C2C2D2D2D2D2E2E2E2E2F2F2F303030303131313132323233333333343434353535353636363637 373738383838393939393A3A3A3B3B3B3B3C3C3C3D3D3D3D3E3E3E3E3F3F3F404040404141414142 42424343434344444444454545464646 > < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > < 00000101020203030304040505050606070708080809090A0A0B0B0B0C0C0D0D0D0E0E0F0F101010 1111121212131314141515151616171718181819191A1A1A1B1B1C1C1D1D1D1E1E1F1F1F20202121 222222232324242525252626272727282829292A2A2A2B2B2C2C2D2D2D2E2E2F2F2F303031313232 32333334343435353636373737383839393A3A3A3B3B3C3C3C3D3D3E3E3F3F3F4040414142424243 434444444545464647474748484949494A4A4B4B4C4C4C4D4D4E4E4F4F4F50505151515252535354 54545555565657575758585959595A5A5B5B5C5C5C5D5D5E5E5E5F5F606061616162626363646464 6565666666676768686969696A6A6B6B > 1 %_Br 1 0 %_Br < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > < 4D4C4C4C4B4B4B4A4A4A4A4949494848484747474746464645454544444444434343424242414141 414040403F3F3F3E3E3E3E3D3D3D3C3C3C3B3B3B3B3A3A3A39393938383838373737363636353535 35343434333333323232323131313030302F2F2F2E2E2E2E2D2D2D2C2C2C2B2B2B2B2A2A2A292929 282828282727272626262525252524242423232322222222212121202020201F1F1F1E1E1E1D1D1D 1D1C1C1C1B1B1B1A1A1A1A1919191818181717171616161615151514141413131313121212111111 101010100F0F0F0E0E0E0D0D0D0D0C0C0C0B0B0B0A0A0A0A09090908080807070707060606050505 04040404030303020202010101010000 > 0 0 1 %_Br [ 1 0 50 92 %_BS %_1 0 50 92 Bs 0 0.275 1 0.12 1 50 59 %_BS %_0 0.275 1 0.12 1 50 59 Bs 0 0.275 1 0.42 1 50 50 %_BS %_0 0.275 1 0.42 1 50 50 Bs 1 0 50 49 %_BS %_1 0 50 49 Bs 1 0 50 41 %_BS %_1 0 50 41 Bs 1 0.3 0 0 1 50 0 %_BS %_1 0.3 0 0 1 50 0 Bs BD %AI5_EndGradient %AI5_BeginGradient: (Rainbow) (Rainbow) 0 6 Bd [ < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 1 0 0 1 %_Br 1 < 0708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E 2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F50515253545556 5758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E 7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6 A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCE CFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6 F7F8F9FAFBFCFDFEFF > 0 0 1 %_Br 1 < 00000000000000000000000000000000000001010101010101010101010101010101010101010101 01010101010101010101010101010202020202020202020202020202020202020202020202020202 02020202020202020202030303030303030303030303030303030303030303030303030303030303 03030303030304040404040404040404040404040404040404040404040404040404040404040404 04040505050505050505050505050505050505050505050505050505050505050505050505050606 06060606060606060606060606060606060606060606060606060606060606060607070707070707 07070707070707070707070707070707 > < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 0 1 %_Br < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > 0 1 0 1 %_Br 0 < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 1 0 1 %_Br [ 0 1 0 0 1 50 100 %_BS %_0 1 0 0 1 50 100 Bs 1 1 0 0 1 50 80 %_BS %_1 1 0 0 1 50 80 Bs 1 0.0279 0 0 1 50 60 %_BS %_1 0.0279 0 0 1 50 60 Bs 1 0 1 0 1 50 40 %_BS %_1 0 1 0 1 50 40 Bs 0 0 1 0 1 50 20 %_BS %_0 0 1 0 1 50 20 Bs 0 1 1 0 1 50 0 %_BS %_0 1 1 0 1 50 0 Bs BD %AI5_EndGradient %AI5_BeginGradient: (Yellow & Orange Radial) (Yellow & Orange Radial) 1 2 Bd [ 0 < 0001010203040506060708090A0B0C0C0D0E0F10111213131415161718191A1B1C1D1D1E1F202122 232425262728292A2B2B2C2D2E2F303132333435363738393A3B3C3D3E3E3F404142434445464748 494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60606162636465666768696A6B6C6D6E6F 707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C > < FFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAFAFAFAF9F9F9F9F9 F9F8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F6F6F6F5F5F5F5F5F5F4F4F4F4F4F3F3F3F3F3F3F2F2F2F2 F2F2F1F1F1F1F1F0F0F0F0F0F0EFEFEFEFEFEFEEEEEEEEEEEDEDEDEDEDEDECECECECECEBEBEBEBEB EBEAEAEAEAEAE9E9E9E9E9E9E8E8E8E8E8E8E7E7E7E7E7E6E6E6E6E6E6 > 0 1 %_Br [ 0 0 1 0 1 52 19 %_BS %_0 0 1 0 1 52 19 Bs 0 0.55 0.9 0 1 50 100 %_BS %_0 0.55 0.9 0 1 50 100 Bs BD %AI5_EndGradient %AI5_End_NonPrinting-- %AI5_BeginPalette 0 0 Pb 0 0 0 0 k (WHITE) Pc 1 1 1 1 ([Registration]) 0 Xs ([Registration]) Pc 0 0 0 1 k (C=0 M=0 Y=0 K=100) Pc Bb 2 (Black, White) -7885 8587 0 0 1 0 0 1 0 0 Bg 0 BB (Black, White) Pc Bb 2 (Chrome) -7885 8587 0 0 1 0 0 1 0 0 Bg 0 BB (Chrome) Pc Bb 2 (Rainbow) -7885 8587 0 0 1 0 0 1 0 0 Bg 0 BB (Rainbow) Pc Bb 0 0 0 0 Bh 2 (Yellow & Orange Radial) -7885 8587 0 0 1 0 0 1 0 0 Bg 0 BB (Yellow & Orange Radial) Pc (Brick) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p (Brick) Pc (Confetti) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p (Confetti) Pc (Leaves - Fall ) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p (Leaves - Fall ) Pc (Stripes) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p (Stripes) Pc 0.91 0.01 0.93 0 (PANTONE 354 2X CVC) 0 x (PANTONE 354 2X CVC) Pc 0 1 0.91 0 (PANTONE 485 CVC) 0 x (PANTONE 485 CVC) Pc 0 0.51 1 0 (PANTONE 152 CVC) 0 x (PANTONE 152 CVC) Pc PB %AI5_EndPalette %AI5_Begin_NonPrinting Np %AI8_BeginPluginObject (Adobe Brush Manager Order) (Adobe Brush Manager Order) ( Adobe Calligraphic Brush Tool/ 6 pt Flat / Adobe Calligraphic Brush T) - (ool/ 10 pt Oval/ Adobe Calligraphic Brush Tool/ 12 pt Oval / Adobe Cal) - (ligraphic Brush Tool/ 20 pt Oval/ Adobe Calligraphic Brush Tool/ 25 pt) - ( Round / Adobe Calligraphic Brush Tool/ 50 pt Flat/ Adobe Scatter Brus) - (h Tool/ Dog Tracks/ Adobe Scatter Brush Tool/ Fall Leaf/ Adobe Scatter) - ( Brush Tool/ Ladybug/ Adobe Scatter Brush Tool/ Push Pin/ Adobe Scatte) - (r Brush Tool/ Strawberry/ Adobe Scatter Brush Tool/ Twinkle Star / Ado) - (be ArtOnPath Brush Tool/ Marker/ Adobe ArtOnPath Brush Tool/ Tapered S) - (troke/ Adobe ArtOnPath Brush Tool/ Arrow/ Adobe ArtOnPath Brush Tool/ ) - (Paintbrush/ Adobe ArtOnPath Brush Tool/ Type/ Adobe PatternOnPath Brus) - (h Tool/ Double Lines/ Adobe PatternOnPath Brush Tool/ Laurel/ Adobe Pa) - (tternOnPath Brush Tool/ Rope /) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe Calligraphic Brush Tool) (6 pt Flat ) (1 4 8 10 10 90 90 2 0 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe Calligraphic Brush Tool) (10 pt Oval) (1 1 19 15 15 130 130 2 0 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe Calligraphic Brush Tool) (12 pt Oval ) (1 7 17 45 45 0 0 2 0 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe Calligraphic Brush Tool) (20 pt Oval) (1 20 20 20 100 40 80 0 2 1 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe Calligraphic Brush Tool) (25 pt Round ) (1 10 40 100 100 0 0 2 0 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe Calligraphic Brush Tool) (50 pt Flat) (1 40 60 0 0 44 44 0 0 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe ArtOnPath Brush Tool) (Arrow) (1 / New Pattern 45/ / / / / 5 0.898039 0 0 / 2 0 1 0 1 0 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe ArtOnPath Brush Tool) (Marker) (1 / New Pattern 8/ / / / / 0 0 / 1 1 1 0 1 0 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe ArtOnPath Brush Tool) (Paintbrush) (1 / New Pattern 5/ / / / / 1 0.5 0.85 1 0.45 / 0 0 1 0 1 0 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe ArtOnPath Brush Tool) (Tapered Stroke) (1 / New Pattern 83/ / / / / 1 0 0 0 1 / 1 1 1 0 1 0 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe ArtOnPath Brush Tool) (Type) (1 / New Pattern 50/ / / / / 1 0.952941 0.94902 0.196078 0.0745098 / 1) - ( 0 1 0 1 0 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe PatternOnPath Brush Tool) (Double Lines) (1 / New Pattern 62/ New Pattern 63/ New Pattern 64/ / / 1 1 0.14 0.09 ) - (0 / 1 0 1 0 1 0 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe PatternOnPath Brush Tool) (Laurel) (1 / New Pattern 65/ New Pattern 42/ New Pattern 67/ / New Pattern 69/ ) - (1 0 0.55 1 0.3 / 1 0 1 0 1 0 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe PatternOnPath Brush Tool) (Rope ) (1 / New Pattern 1/ / / New Pattern 3/ New Pattern 6/ 5 0 0 0 / 1 0 1 ) - (0 1 0 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe Scatter Brush Tool) (Dog Tracks) (1 /New Pattern 41/ 1 0 0 0 1 / 0 1 1 0 1 1 0 0 0 0 -90 -90 0 1 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe Scatter Brush Tool) (Fall Leaf) (1 /New Pattern 34/ 1 0.0745 0.9 0.9019 0.18 / 0 0.602793 1 1 0.1 1 1 -) - (1 1 1 -180 180 1 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe Scatter Brush Tool) (Ladybug) (1 /New Pattern 10/ 5 0.898039 0 0 / 0 1 1 0 0.803911 1.2 1 -1.55 1.55 ) - (1 -180 180 1 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe Scatter Brush Tool) (Push Pin) (1 /New Pattern 36/ 1 0.025 0.1 0.475 0 / 0 1 1 0 0.401676 1 1 -1.06145) - ( 1.06 1 -180 180 1 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe Scatter Brush Tool) (Strawberry) (1 /New Pattern 37/ 1 0 0 0 1 / 0 0.803911 1 1 0.803911 1 1 -0.5 0.5 1 ) - (-75 75.419 1 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe Scatter Brush Tool) (Twinkle Star ) (1 /New Pattern 2/ 0 1 / 1 0.5 1 1 0.25 1 1 -0.5 0.5 1 0 0 0 0 0) . %AI8_EndPluginObject %AI5_End_NonPrinting-- %AI5_Begin_NonPrinting Np %AI8_PluginGroupInfo (Adobe Path Blends) (Adobe Blends Plugin) (Live Blends) %AI8_PluginGroupInfo (Adobe PatternOnPath Brush Tool) (Adobe Pattern Brush Plugin) (Art Brush Tool) %AI8_PluginGroupInfo (Adobe ArtOnPath Brush Tool) (Adobe Art Brush Plugin) (Art Brush Tool) %AI8_PluginGroupInfo (Adobe Calligraphic Brush Tool) (Undo New Calligraphic Brush) (Calligraphic Brush Tool) %AI8_PluginGroupInfo (Adobe Scatter Brush Tool) (Adobe Scatter Brush Plugin) (Scatter Brush Tool) %AI5_End_NonPrinting-- %%EndSetup %AI5_BeginLayer 1 1 0 1 0 0 1 8 0 0 0 0 50 Lb (border) Ln 0 A 1 Ap 0 R 0 0 0 1 K 800 Ar 0 J 0 j 5.2327 w 4 M []0 d %AI3_Note: 0 D 0 XR 390.7588 335.9102 m 390.7588 333.4834 388.5283 331.5156 385.7754 331.5156 C 220.209 331.5156 L 217.457 331.5156 215.2256 333.4834 215.2256 335.9102 C 215.2256 481.3916 L 215.2256 483.8184 217.457 485.7856 220.209 485.7856 C 385.7754 485.7856 L 388.5283 485.7856 390.7588 483.8184 390.7588 481.3916 C 390.7588 335.9102 L s LB %AI5_EndLayer-- %AI5_BeginLayer 1 1 0 1 0 0 1 20 102 102 0 0 50 Lb (tv) Ln 0 A 0 O 0 0 0 1 k 0 R 0 0 0 1 K 800 Ar 0 J 0 j 3 w 4 M []0 d %AI3_Note: 0 D 0 XR 377.3408 366.4893 m 377.3408 363.1758 374.6543 360.4893 371.3408 360.4893 C 234.6743 360.4893 L 231.3608 360.4893 228.6743 363.1758 228.6743 366.4893 C 228.6743 461.1563 L 228.6743 464.4697 231.3608 467.1563 234.6743 467.1563 C 371.3408 467.1563 L 374.6543 467.1563 377.3408 464.4697 377.3408 461.1563 C 377.3408 366.4893 L b 0 0 0 0 k 360.3711 382.1641 m 360.3711 378.8506 357.6846 376.1641 354.3711 376.1641 C 253.0381 376.1641 L 249.7246 376.1641 247.0381 378.8506 247.0381 382.1641 C 247.0381 444.1641 L 247.0381 447.4775 249.7246 450.1641 253.0381 450.1641 C 354.3711 450.1641 L 357.6846 450.1641 360.3711 447.4775 360.3711 444.1641 C 360.3711 382.1641 L b u 0 Ap 0 0 0 1 k 1 w 325.7354 369.5391 m 322.2354 375.0391 318.2354 351.5391 342.2354 344.5391 c 265.4619 344.5391 l 289.4619 351.5391 285.4619 375.0391 281.9619 369.5391 c 325.7354 369.5391 l b 1 Ap 1.0096 w 342.9453 343.0273 m 342.9453 342.1924 342.2539 341.5156 341.4043 341.5156 C 266.0039 341.5156 L 265.1523 341.5156 264.4639 342.1924 264.4639 343.0273 C 264.4639 343.0273 L 264.4639 343.8623 265.1523 344.5391 266.0039 344.5391 C 341.4043 344.5391 L 342.2539 344.5391 342.9453 343.8623 342.9453 343.0273 C 342.9453 343.0273 L b U LB %AI5_EndLayer-- %AI5_BeginLayer 1 1 1 1 0 0 1 1 255 79 79 0 50 Lb (flames!) Ln 0 A u 0 Ap 0 O 0 0.51 1 0 (PANTONE 152 CVC) 0 x 0 R 0 0 0 1 K 800 Ar 0 J 0 j 3 w 4 M []0 d %AI3_Note: 0 D 0 XR 268.1118 375.1055 m 278.0723 371.9902 285.0166 362.1172 307.6953 356.7012 C 328.5361 364.6758 339.9619 383.5098 345.8936 389.666 C 343.8018 403.9888 340.0576 432.1499 332.6553 443.0522 C 319.5771 453.9092 308.0566 485.27 318.7891 505.4521 C 325.9775 515.9902 288.2168 468.6289 304.229 442.3589 C 318.9365 416.1494 313.5049 417.688 311.5088 418.7856 C 306.4565 424.1489 308.7578 428.8916 297.6426 440.9727 C 282.4565 457.4297 280.1528 461.7734 296.6025 495.0522 C 301.0166 499.0298 277.292 523.6685 275.7539 530.4106 C 277.292 523.6685 293.3374 492.3101 277.8828 480.4922 C 265.1763 462.8696 265.939 450.7354 264.7095 445.1323 C 268.3765 438.5493 275.417 425.7495 278.5762 413.9326 C 284.3765 406.5493 284.7471 391.6973 275.8027 404.2261 C 273.8164 414.5488 252.376 431.5088 257.4292 460.0386 C 269.9766 491.3496 240.8564 433.4292 244.603 410.4658 C 256.2168 392.4688 270.3921 380.3086 268.1118 375.1055 C b 0 1 0.91 0 (PANTONE 485 CVC) 0 x 1 w 263.0464 378.707 m 271.0464 370.041 280.3799 358.707 303.0464 360.041 c 325.7129 361.373 339.7129 382.041 341.7129 392.707 c 343.7129 403.374 337.7129 432.708 327.0459 444.041 c 316.3799 455.374 304.3794 488.041 313.7129 504.041 c 323.0469 520.041 283.7129 470.707 299.7129 443.374 c 315.7129 416.041 310.0547 417.644 306.7129 420.7075 c 302.7129 424.374 305.1094 429.314 293.3799 442.041 c 277.7129 459.041 275.3135 463.5659 292.3799 494.041 c 297.0464 502.374 272.333 528.0396 y 289.0469 495.3745 274.3799 480.041 v 259.7129 464.7075 260.5073 452.0679 261.7129 446.041 c 263.0464 439.374 270.3799 426.041 275.0464 416.041 c 279.7129 406.041 280.0986 390.5684 272.3799 406.7075 c 268.7129 414.374 246.3794 432.0405 254.7129 460.374 c 264.7129 494.374 234.3799 434.041 242.3799 412.7075 c 250.3799 391.373 263.0464 378.707 y b U LB %AI5_EndLayer-- %AI5_BeginLayer 1 1 0 1 0 0 1 2 79 255 79 0 50 Lb (text) Ln 0 A 1 To 1 0 0 1 179.3335 327.2939 0 Tp 0 Tv 1 Ap 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 428.666 249.9619 m 428.666 327.2939 L 179.3335 327.2939 L 179.3335 249.9619 L 428.666 249.9619 L n TP 14.3068 -43.125 Td 2 Tr 0 O 0 0 0 1 k 0 R 0 1 0.91 0 (PANTONE 485 CVC) 0 X %_ 0 50 XQ /_Device 48 46.752 -7.1038 Tf 0 Ts 100 100 Tz 0 Tt %_0 0 100 100 Xu %AI55J_GlyphSubst: GlyphSubstNone 1 TA %_ 0 XL 0 TY 0 TV 36 0 Xb XB 0 0 5 TC 100 100 200 TW 25 TG 0 0 0 Ti 1 Ta 0 1 2 2 3 Th 0 Tq 240 Tg 0 0 Tl 0 Tc 0 Tw (XSCREENSA) Tx 1 91 Tk (VER) Tx 1 0 Tk (\r) TX TO LB %AI5_EndLayer-- %%PageTrailer gsave annotatepage grestore showpage %%Trailer Adobe_Illustrator_AI5 /terminate get exec Adobe_shading_AI8 /terminate get exec Adobe_ColorImage_AI6 /terminate get exec Adobe_typography_AI5 /terminate get exec Adobe_cshow /terminate get exec Adobe_level2_AI5 /terminate get exec %%EOF xscreensaver-5.34/driver/README000644 000767 000767 00000000435 05627212451 016042 0ustar00jwzjwz000000 000000 This directory contains the source for xscreensaver and xscreensaver-command, the screensaver driver, and the program for externally controlling it. Some stuff from the ../utils/ directory is used here as well. If you have compilation problems, check the parameters in ../config.h. xscreensaver-5.34/driver/Makefile.in000664 000767 000000 00000107244 12612754262 017510 0ustar00jwzwheel000000 000000 # driver/Makefile.in --- xscreensaver, Copyright (c) 1997-2010 Jamie Zawinski. # the `../configure' script generates `driver/Makefile' from this file. @SET_MAKE@ .SUFFIXES: .SUFFIXES: .c .m .o srcdir = @srcdir@ VPATH = @srcdir@ top_srcdir = @top_srcdir@ top_builddir = .. install_prefix = prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ datarootdir = @datarootdir@ datadir = @datadir@ localedir = @PO_DATADIR@/locale mandir = @mandir@ libexecdir = @libexecdir@ mansuffix = 1 manNdir = $(mandir)/man$(mansuffix) INTLTOOL_MERGE = @INTLTOOL_MERGE@ GTK_DATADIR = @GTK_DATADIR@ GTK_APPDIR = $(GTK_DATADIR)/applications GTK_ICONDIR = $(GTK_DATADIR)/pixmaps GTK_GLADEDIR = $(GTK_DATADIR)/xscreensaver/glade HACK_CONF_DIR = @HACK_CONF_DIR@ CC = @CC@ OBJCC = @OBJCC@ CFLAGS = @CFLAGS@ LDFLAGS = @LDFLAGS@ DEFS = @DEFS@ INTL_DEFS = -DLOCALEDIR=\"$(localedir)\" SUBP_DEFS = $(DEFS) -DDEFAULT_PATH_PREFIX='"@HACKDIR@"' GTK_DEFS = $(DEFS) -DDEFAULT_ICONDIR='"$(GTK_GLADEDIR)"' CONF_DEFS = -DHACK_CONFIGURATION_PATH='"$(HACK_CONF_DIR)"' LIBS = @LIBS@ INTL_LIBS = @INTLLIBS@ JPEG_LIBS = @JPEG_LIBS@ PERL = @PERL@ DEPEND = @DEPEND@ DEPEND_FLAGS = @DEPEND_FLAGS@ 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@ X_CFLAGS = @X_CFLAGS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ XMU_LIBS = @XMU_LIBS@ XPM_LIBS = @XPM_LIBS@ # Note: # # X_LIBS would more properly be called X_LDFLAGS (it contains the -L args.) # X_PRE_LIBS contains extra libraries you have to link against on some systems, # and that must come before -lX11. (e.g., -lSM and -lICE.) # X_EXTRA_LIBS contains extra libraries needed by X that aren't a part of X. # (e.g., -lsocket, -lnsl, etc.) # # I think (but am not totally sure) that LIBS is also really "LDFLAGS". # # SAVER_LIBS is the link line for "xscreensaver", and # CMD_LIBS is the link line for "xscreensaver-command". # GETIMG_LIBS is the link line for "xscreensaver-getimage". AD_DIR = @APPDEFAULTS@ PAM_DIR = /etc/pam.d PAM_CONF = /etc/pam.conf UTILS_SRC = $(srcdir)/../utils UTILS_BIN = ../utils INCLUDES_1 = -I. -I$(srcdir) -I$(UTILS_SRC) -I.. INCLUDES = $(INCLUDES_1) @INCLUDES@ MOTIF_SRCS = demo-Xm.c demo-Xm-widgets.c MOTIF_OBJS = demo-Xm.o demo-Xm-widgets.o GTK_SRCS = demo-Gtk.c demo-Gtk-conf.c GTK_OBJS = demo-Gtk.o demo-Gtk-conf.o @GTK_EXTRA_OBJS@ PWENT_SRCS = passwd-pwent.c PWENT_OBJS = passwd-pwent.o KERBEROS_SRCS = passwd-kerberos.c KERBEROS_OBJS = passwd-kerberos.o PAM_SRCS = passwd-pam.c PAM_OBJS = passwd-pam.o PWHELPER_SRCS = passwd-helper.c PWHELPER_OBJS = passwd-helper.o LOCK_SRCS_1 = lock.c passwd.c LOCK_OBJS_1 = lock.o passwd.o NOLOCK_SRCS_1 = lock.c NOLOCK_OBJS_1 = lock.o TEST_SRCS = test-passwd.c test-uid.c test-xdpms.c test-grab.c \ test-apm.c test-fade.c test-xinerama.c test-vp.c \ test-randr.c xdpyinfo.c test-mlstring.c test-screens.c TEST_EXES = test-passwd test-uid test-xdpms test-grab \ test-apm test-fade test-xinerama test-vp \ test-randr xdpyinfo test-mlstring test-screens MOTIF_LIBS = @MOTIF_LIBS@ @XPM_LIBS@ $(XMU_LIBS) GTK_LIBS = @GTK_LIBS@ $(XMU_LIBS) XML_LIBS = @XML_LIBS@ XDPMS_LIBS = @XDPMS_LIBS@ XINERAMA_LIBS = @XINERAMA_LIBS@ XINPUT_LIBS = @XINPUT_LIBS@ PASSWD_SRCS = @PASSWD_SRCS@ PASSWD_OBJS = @PASSWD_OBJS@ PASSWD_LIBS = @PASSWD_LIBS@ LOCK_SRCS = @LOCK_SRCS@ LOCK_OBJS = @LOCK_OBJS@ XMU_SRCS = @XMU_SRCS@ XMU_OBJS = @XMU_OBJS@ GL_SRCS = @SAVER_GL_SRCS@ GL_OBJS = @SAVER_GL_OBJS@ GL_LIBS = @SAVER_GL_LIBS@ ICON_SRC = $(UTILS_SRC)/images LOGO = $(ICON_SRC)/logo-50.xpm GTK_ICONS = $(ICON_SRC)/screensaver-*.png DEMO_UTIL_SRCS = $(UTILS_SRC)/resources.c $(UTILS_SRC)/usleep.c \ $(UTILS_SRC)/visual.c $(XMU_SRCS) DEMO_UTIL_OBJS = $(UTILS_BIN)/resources.o $(UTILS_BIN)/usleep.o \ $(UTILS_BIN)/visual.o $(XMU_OBJS) SAVER_UTIL_SRCS = $(UTILS_SRC)/fade.c $(UTILS_SRC)/overlay.c \ $(UTILS_SRC)/logo.c $(UTILS_SRC)/yarandom.c \ $(UTILS_SRC)/minixpm.c \ $(DEMO_UTIL_SRCS) SAVER_UTIL_OBJS = $(UTILS_BIN)/fade.o $(UTILS_BIN)/overlay.o \ $(UTILS_BIN)/logo.o $(UTILS_BIN)/yarandom.o \ $(UTILS_BIN)/minixpm.o \ $(DEMO_UTIL_OBJS) GETIMG_SRCS_1 = xscreensaver-getimage.c GETIMG_OBJS_1 = xscreensaver-getimage.o GETIMG_SRCS = $(GETIMG_SRCS_1) \ $(UTILS_BIN)/colorbars.o $(UTILS_BIN)/resources.o \ $(UTILS_BIN)/yarandom.o $(UTILS_BIN)/visual.o \ $(UTILS_BIN)/usleep.o $(UTILS_BIN)/hsv.o \ $(UTILS_BIN)/colors.o $(UTILS_BIN)/grabscreen.o \ $(UTILS_BIN)/logo.o $(UTILS_BIN)/minixpm.o prefs.o \ $(XMU_SRCS) GETIMG_OBJS = $(GETIMG_OBJS_1) \ $(UTILS_BIN)/colorbars.o $(UTILS_BIN)/resources.o \ $(UTILS_BIN)/yarandom.o $(UTILS_BIN)/visual.o \ $(UTILS_BIN)/usleep.o $(UTILS_BIN)/hsv.o \ $(UTILS_BIN)/colors.o $(UTILS_BIN)/grabscreen.o \ $(UTILS_BIN)/logo.o $(UTILS_BIN)/minixpm.o prefs.o \ $(XMU_OBJS) SAVER_SRCS_1 = xscreensaver.c windows.c screens.c timers.c subprocs.c \ exec.c xset.c splash.c setuid.c stderr.c mlstring.c SAVER_OBJS_1 = xscreensaver.o windows.o screens.o timers.o subprocs.o \ exec.o xset.o splash.o setuid.o stderr.o mlstring.o SAVER_SRCS = $(SAVER_SRCS_1) prefs.c dpms.c $(LOCK_SRCS) \ $(SAVER_UTIL_SRCS) $(GL_SRCS) SAVER_OBJS = $(SAVER_OBJS_1) prefs.o dpms.o $(LOCK_OBJS) \ $(SAVER_UTIL_OBJS) $(GL_OBJS) CMD_SRCS = remote.c xscreensaver-command.c CMD_OBJS = remote.o xscreensaver-command.o DEMO_SRCS_1 = prefs.c dpms.c DEMO_OBJS_1 = prefs.o dpms.o DEMO_SRCS = $(DEMO_SRCS_1) remote.c exec.c $(DEMO_UTIL_SRCS) DEMO_OBJS = $(DEMO_OBJS_1) remote.o exec.o $(DEMO_UTIL_OBJS) PDF2JPEG_SRCS = pdf2jpeg.m PDF2JPEG_OBJS = pdf2jpeg.o PDF2JPEG_LIBS = -framework Cocoa SAVER_LIBS = $(LIBS) $(X_LIBS) $(XMU_LIBS) @SAVER_LIBS@ \ $(XDPMS_LIBS) $(XINERAMA_LIBS) $(GL_LIBS) $(X_PRE_LIBS) \ -lXt -lX11 -lXext $(X_EXTRA_LIBS) \ $(PASSWD_LIBS) CMD_LIBS = $(LIBS) $(X_LIBS) \ $(X_PRE_LIBS) -lX11 -lXext $(X_EXTRA_LIBS) GETIMG_LIBS = $(LIBS) $(X_LIBS) $(XPM_LIBS) $(JPEG_LIBS) \ $(X_PRE_LIBS) -lXt -lX11 $(XMU_LIBS) -lXext $(X_EXTRA_LIBS) EXES = xscreensaver xscreensaver-command xscreensaver-demo \ xscreensaver-getimage @EXES_OSX@ EXES2 = @ALL_DEMO_PROGRAMS@ EXES_OSX = pdf2jpeg SCRIPTS_1 = xscreensaver-getimage-file xscreensaver-getimage-video \ xscreensaver-text SCRIPTS_OSX = xscreensaver-getimage-desktop SCRIPTS = $(SCRIPTS_1) @SCRIPTS_OSX@ HDRS = XScreenSaver_ad.h XScreenSaver_Xm_ad.h \ xscreensaver.h prefs.h remote.h exec.h \ demo-Gtk-conf.h auth.h mlstring.h types.h MEN_1 = xscreensaver.man xscreensaver-demo.man \ xscreensaver-command.man \ xscreensaver-text.man \ xscreensaver-getimage.man \ xscreensaver-getimage-file.man \ xscreensaver-getimage-video.man MEN_OSX = xscreensaver-getimage-desktop.man pdf2jpeg.man MEN = $(MEN_1) @MEN_OSX@ EXTRAS = README Makefile.in \ XScreenSaver.ad.in XScreenSaver-Xm.ad xscreensaver.pam.in \ xscreensaver-demo.glade2.in xscreensaver-demo.glade2p \ screensaver-properties.desktop.in \ .gdbinit VMSFILES = compile_axp.com compile_decc.com link_axp.com link_decc.com \ vms-getpwnam.c vms-pwd.h vms-hpwd.c vms-validate.c \ vms_axp.opt vms_axp_12.opt vms_decc.opt vms_decc_12.opt TARFILES = $(EXTRAS) $(VMSFILES) $(SAVER_SRCS_1) \ $(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) $(HDRS) \ $(SCRIPTS_1) $(SCRIPTS_OSX) $(MEN_1) $(MEN_OSX) \ $(TEST_SRCS) default: $(EXES) all: $(EXES) $(EXES2) tests: $(TEST_EXES) install: install-program install-ad install-scripts \ install-gnome install-man install-xml install-pam uninstall: uninstall-program uninstall-ad \ uninstall-gnome uninstall-man uninstall-xml install-strip: $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' \ install install-program: $(EXES) @if [ ! -d $(install_prefix)$(bindir) ]; then \ $(INSTALL_DIRS) $(install_prefix)$(bindir) ; \ fi @inst="$(INSTALL_PROGRAM)" ; \ if [ @NEED_SETUID@ = yes ]; then \ me=`PATH="$$PATH:/usr/ucb" whoami` ; \ if [ "$$me" = root ]; then \ inst="$(INSTALL_SETUID)" ; \ else \ e=echo ; \ $$e "" ;\ $$e " ####################################################################";\ $$e " Warning: xscreensaver has been compiled with support for shadow" ;\ $$e " passwords. If your system actually uses shadow passwords," ;\ $$e " then xscreensaver must be installed as a setuid root" ;\ $$e " program in order for locking to work. To do this, you" ;\ $$e " must run 'make install' as 'root', not as '$$me'." ;\ $$e "" ;\ $$e " For now, xscreensaver will be installed non-setuid, which" ;\ $$e " means that locking might not work. (Try it and see.)" ;\ $$e " ####################################################################";\ $$e "" ;\ fi ; \ fi ; \ 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 \ echo $(INSTALL_PROGRAM) $$exe $(install_prefix)$(bindir)/$$exe ; \ $(INSTALL_PROGRAM) $$exe $(install_prefix)$(bindir)/$$exe ; \ done install-ad: XScreenSaver.ad @if [ ! -d $(install_prefix)$(AD_DIR) ]; then \ $(INSTALL_DIRS) $(install_prefix)$(AD_DIR) ; \ fi @-echo $(INSTALL_DATA) XScreenSaver.ad \ $(install_prefix)$(AD_DIR)/XScreenSaver ; \ if $(INSTALL_DATA) XScreenSaver.ad \ $(install_prefix)$(AD_DIR)/XScreenSaver ; then \ true ; \ else \ e=echo ; \ if [ -f $(install_prefix)$(AD_DIR)/XScreenSaver ]; then \ $$e "" ;\ $$e " ####################################################################";\ $$e " Warning: unable to install $(install_prefix)$(AD_DIR)/XScreenSaver" ;\ $$e " That file exists, and is unwritable. It is probably from" ;\ $$e " an older version of xscreensaver, and could cause things" ;\ $$e " to malfunction. Please delete it!" ;\ $$e " ####################################################################";\ $$e "" ;\ exit 1 ; \ else \ $$e "" ;\ $$e " ####################################################################";\ $$e " Warning: unable to install $(install_prefix)$(AD_DIR)/XScreenSaver" ;\ $$e " The directory is unwritable. This is probably ok;" ;\ $$e " xscreensaver should work without that file." ;\ $$e " ####################################################################";\ $$e "" ;\ exit 0 ; \ fi \ fi install-scripts: $(SCRIPTS) munge-scripts @for program in $(SCRIPTS); do \ if [ -r $$program ] ; then \ p=$$program ; \ else \ p=$(srcdir)/$$program ; \ fi ; \ echo $(INSTALL_SCRIPT) $$p \ $(install_prefix)$(bindir)/$$program ; \ $(INSTALL_SCRIPT) $$p \ $(install_prefix)$(bindir)/$$program ; \ done munge-scripts: $(SCRIPTS) @tmp=/tmp/mf.$$$$ ; \ perl="${PERL}" ; \ rm -f $$tmp ; \ for program in $(SCRIPTS); do \ sed "s@^\(#!\)\(/[^ ]*/perl[^ ]*\)\(.*\)\$$@\1$$perl\3@" \ < $(srcdir)/$$program > $$tmp ; \ if cmp -s $(srcdir)/$$program $$tmp ; then \ true ; \ else \ echo "$$program: setting interpreter to $$perl" >&2 ; \ cat $$tmp > ./$$program ; \ fi ; \ done ; \ rm -f $$tmp # When installing man pages, we install "foo.man" as "foo.N" and update # the .TH line in the installed file with one like # # .TH XScreenSaver N "V.VV (DD-MMM-YYYY)" "X Version 11" # # where N is the manual section suffix. # install-man: $(MEN) @men="$(MEN)" ; \ U=$(UTILS_SRC)/version.h ; \ V=`sed -n 's/.*xscreensaver \([0-9]\.[^)]*)\).*/\1/p' < $$U` ; \ T=/tmp/xs$$$$.$(mansuffix) ; \ TH=".TH XScreenSaver $(mansuffix) \"$$V\" \"X Version 11\"" ; \ echo "installing man pages: $$TH" ; \ \ if [ ! -d $(install_prefix)$(manNdir) ]; then \ $(INSTALL_DIRS) $(install_prefix)$(manNdir) ; \ fi ; \ \ for man in $$men; do \ instname=`echo $$man | sed 's/\.man$$/\.$(mansuffix)/'` ; \ manbase=`echo $$man | sed 's/\.man$$//'` ; \ TH=".TH $$manbase $(mansuffix) \"$$V\" \"X Version 11\" \"XScreenSaver manual\"" ; \ sed -e "s/^\.TH.*/$$TH/" \ -e 's/^\(\.BR xscr.*(\)[^()]\(.*\)/\1$(mansuffix)\2/' \ -e 's@(MANSUFFIX)@($(mansuffix))@g' \ < $(srcdir)/$$man > $$T ; \ echo $(INSTALL_DATA) $(srcdir)/$$man \ $(install_prefix)$(manNdir)/$$instname ; \ $(INSTALL_DATA) $$T \ $(install_prefix)$(manNdir)/$$instname ; \ done ; \ rm -f $$T uninstall-program: @for program in $(EXES) $(SCRIPTS); do \ echo rm -f $(install_prefix)$(bindir)/$$program ; \ rm -f $(install_prefix)$(bindir)/$$program ; \ done uninstall-ad: rm -f $(install_prefix)$(AD_DIR)/XScreenSaver uninstall-man: @men="$(MEN)" ; \ for man in $$men; do \ instname=`echo $$man | sed 's/\.man$$/\.$(mansuffix)/'` ; \ echo rm -f $(install_prefix)$(manNdir)/$$instname* ; \ rm -f $(install_prefix)$(manNdir)/$$instname* ; \ done install-pam: xscreensaver.pam @src="xscreensaver.pam" ; \ dest=`sed -n 's/.*PAM_SERVICE_NAME[ ]*"\([^"]*\)".*$$/\1/p' \ < ../config.h` ; \ dir="$(install_prefix)$(PAM_DIR)" ; \ conf="$(PAM_CONF)" ; \ \ if [ -d $$dir ] ; then \ \ if [ -f $$dir/xdm ]; then \ src2=$$dir/xdm ; \ elif [ -f $$dir/login ]; then \ src2=$$dir/login ; \ fi ; \ \ if [ -z "$$src2" ]; then \ echo $(INSTALL_DATA) $$src $$dir/$$dest ; \ $(INSTALL_DATA) $$src $$dir/$$dest ; \ else \ src="xscreensaver.pam.$$$$" ; \ echo "grep '^#%\|^auth\|^@include' $$src2 > $$src" ; \ grep '^#%\|^auth\|^@include' $$src2 > $$src ; \ echo $(INSTALL_DATA) $$src $$dir/$$dest ; \ $(INSTALL_DATA) $$src $$dir/$$dest ; \ echo rm -f $$src ; \ rm -f $$src ; \ fi ; \ \ if [ ! -f $$dir/$$dest ]; then \ e=echo ; \ $$e "" ;\ $$e " ####################################################################";\ $$e " Warning: xscreensaver has been compiled with support for Pluggable" ;\ $$e " Authentication Modules (PAM). However, we were unable to" ;\ $$e " install the file $$dir/$$dest. PAM is unlikely" ;\ $$e " to work without this file (and old-style password" ;\ $$e " authentication will be used instead, which may or may not" ;\ $$e " work.)" ;\ $$e " ####################################################################";\ $$e "" ;\ fi ; \ elif [ -f $$conf -a "x$$dest" != "x" ]; then \ if ( grep $$dest $$conf >/dev/null ); then \ echo "$$conf unchanged: already has an entry for $$dest" ; \ else \ src="pam.conf.$$$$" ; \ echo "grep -v $$dest $$conf > $$src" ; \ grep -v $$dest $$conf > $$src ; \ extras=`sed -n "s/^login\(.*auth.*\)$$/$$dest\1/p" $$conf`; \ echo "$$extras" >> $$src ; \ if [ "x$$extras" = "x" ]; then \ echo "Error: no login rules in $$conf?" >&2 ; \ else \ echo "adding $$dest rules to $$src:" ; \ echo "$$extras" | sed 's/^/ /' ; \ fi ; \ echo $(INSTALL_DATA) $$src $$conf ; \ $(INSTALL_DATA) $$src $$conf ; \ echo rm -f $$src ; \ rm -f $$src ; \ fi ; \ if ( grep $$dest $$conf >/dev/null ); then \ echo ; \ else \ e=echo ; \ $$e "" ;\ $$e " ####################################################################";\ $$e " Warning: xscreensaver has been compiled with support for Pluggable" ;\ $$e " Authentication Modules (PAM). However, we were unable to" ;\ $$e " install xscreensaver rules in the file $$conf." ;\ $$e " PAM is unlikely to work without this (and old-style" ;\ $$e " password authentication will be used instead, which may" ;\ $$e " or may not work.)" ;\ $$e " ####################################################################";\ $$e "" ;\ fi ; \ fi # screensaver-properties.desktop # into /usr/share/applications/ install-gnome:: screensaver-properties.desktop @if [ "$(GTK_DATADIR)" != "" ]; then \ if [ ! -d "$(install_prefix)$(GTK_APPDIR)" ]; then \ echo $(INSTALL_DIRS) "$(install_prefix)$(GTK_APPDIR)" ;\ $(INSTALL_DIRS) "$(install_prefix)$(GTK_APPDIR)" ;\ fi ;\ name2=xscreensaver-properties.desktop ;\ echo $(INSTALL_DATA) screensaver-properties.desktop \ $(install_prefix)$(GTK_APPDIR)/$$name2 ;\ $(INSTALL_DATA) screensaver-properties.desktop \ $(install_prefix)$(GTK_APPDIR)/$$name2 ;\ fi # xscreensaver.xpm # into /usr/share/pixmaps/ install-gnome:: $(LOGO) @if [ "$(GTK_DATADIR)" != "" ]; then \ if [ ! -d "$(install_prefix)$(GTK_ICONDIR)" ]; then \ echo $(INSTALL_DIRS) "$(install_prefix)$(GTK_ICONDIR)" ;\ $(INSTALL_DIRS) "$(install_prefix)$(GTK_ICONDIR)" ;\ fi ;\ target=xscreensaver.xpm ;\ echo $(INSTALL_DATA) $(LOGO) \ $(install_prefix)$(GTK_ICONDIR)/$$target ;\ $(INSTALL_DATA) $(LOGO) \ $(install_prefix)$(GTK_ICONDIR)/$$target ;\ fi # ../utils/images/screensaver-*.png # into /usr/share/xscreensaver/glade/ install-gnome:: @if [ "$(GTK_DATADIR)" != "" ]; then \ if [ ! -d "$(install_prefix)$(GTK_GLADEDIR)" ]; then \ echo $(INSTALL_DIRS) "$(install_prefix)$(GTK_GLADEDIR)" ;\ $(INSTALL_DIRS) "$(install_prefix)$(GTK_GLADEDIR)" ;\ fi ;\ for target in $(GTK_ICONS) ; do \ dest=`echo $$target | sed 's@^.*/@@'` ;\ echo $(INSTALL_DATA) $$target \ $(install_prefix)$(GTK_GLADEDIR)/$$dest ;\ $(INSTALL_DATA) $$target \ $(install_prefix)$(GTK_GLADEDIR)/$$dest ;\ done ;\ fi # xscreensaver-demo.glade2 # into /usr/share/xscreensaver/glade/ install-gnome:: xscreensaver-demo.glade2 @if [ "$(GTK_DATADIR)" != "" ]; then \ if [ ! -d "$(install_prefix)$(GTK_GLADEDIR)" ]; then \ echo $(INSTALL_DIRS) "$(install_prefix)$(GTK_GLADEDIR)" ;\ $(INSTALL_DIRS) "$(install_prefix)$(GTK_GLADEDIR)" ;\ fi ;\ target=xscreensaver-demo.glade2 ;\ echo $(INSTALL_DATA) $$target \ $(install_prefix)$(GTK_GLADEDIR)/$$target ;\ if $(INSTALL_DATA) $$target \ $(install_prefix)$(GTK_GLADEDIR)/$$target ;\ then true ;\ else \ e=echo ; \ $$e "" ;\ $$e " ####################################################################";\ $$e " Warning: unable to install $$target into" ;\ $$e " $(install_prefix)$(GTK_GLADEDIR)/." ;\ $$e " Without this file, xscreensaver-demo will not" ;\ $$e " be able to run properly." ;\ $$e " ####################################################################";\ $$e "" ;\ exit 1 ; \ fi ; \ fi # screensaver-properties.desktop # into /usr/share/applications/ uninstall-gnome:: @if [ "$(GTK_DATADIR)" != "" ]; then \ f=xscreensaver-properties.desktop ;\ echo rm -f $(install_prefix)$(GTK_APPDIR)/$$f ;\ rm -f $(install_prefix)$(GTK_APPDIR)/$$f ;\ fi # xscreensaver.xpm # into /usr/share/pixmaps/ uninstall-gnome:: @if [ "$(GTK_ICONDIR)" != "" ]; then \ target=xscreensaver.xpm ;\ echo rm -f $(install_prefix)$(GTK_ICONDIR)/$$target ;\ rm -f $(install_prefix)$(GTK_ICONDIR)/$$target ;\ fi # ../utils/images/screensaver-*.png # into /usr/share/xscreensaver/glade/ uninstall-gnome:: @if [ "$(GTK_DATADIR)" != "" ]; then \ for target in $(GTK_ICONS) ; do \ dest=`echo $$target | sed 's@^.*/@@'` ;\ echo rm -f $(install_prefix)$(GTK_GLADEDIR)/$$dest ;\ rm -f $(install_prefix)$(GTK_GLADEDIR)/$$dest ;\ done ;\ fi # xscreensaver-demo.glade2 # into /usr/share/xscreensaver/glade/ uninstall-gnome:: xscreensaver-demo.glade2 @if [ "$(GTK_DATADIR)" != "" ]; then \ target=xscreensaver-demo.glade2 ;\ echo rm -f $(install_prefix)$(GTK_GLADEDIR)/$$target ;\ rm -f $(install_prefix)$(GTK_GLADEDIR)/$$target ;\ fi # /usr/share/xscreensaver/config/README install-xml: @dest=$(install_prefix)$(HACK_CONF_DIR) ; \ if [ ! -d $$dest ]; then \ $(INSTALL_DIRS) $$dest ; \ fi ; \ src=$(srcdir)/../hacks/config ; \ echo $(INSTALL_DATA) $$src/README $$dest/README ; \ $(INSTALL_DATA) $$src/README $$dest/README # /usr/share/xscreensaver/config/README uninstall-xml: rm -f $(install_prefix)$(HACK_CONF_DIR)/README clean: -rm -f *.o a.out core $(EXES) $(EXES2) $(TEST_EXES) \ XScreenSaver_ad.h XScreenSaver_Xm_ad.h distclean: clean -rm -f Makefile XScreenSaver.ad \ TAGS *~ "#"* screensaver-properties.desktop # Adds all current dependencies to Makefile depend: XScreenSaver_ad.h XScreenSaver_Xm_ad.h $(DEPEND) -s '# DO NOT DELETE: updated by make depend' \ $(DEPEND_FLAGS) -- \ $(INCLUDES_1) $(DEFS) $(DEPEND_DEFINES) $(CFLAGS) $(X_CFLAGS) -- \ $(SAVER_SRCS) $(CMD_SRCS) $(GETIMG_SRCS_1) # Adds some dependencies to Makefile.in -- not totally accurate, but pretty # close. This excludes dependencies on files in /usr/include, etc. It tries # to include only dependencies on files which are themselves a part of this # package. distdepend: check_men update_ad_version XScreenSaver_ad.h XScreenSaver_Xm_ad.h @echo updating dependencies in `pwd`/Makefile.in... ; \ $(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) \ $(TEST_SRCS) 2>/dev/null | \ sort -d | \ ( \ awk '/^# .*Makefile.in ---/,/^# DO .*distdepend/' < Makefile.in ; \ sed -e '/^#.*/d' \ -e 's@ \./@ @g;s@ /[^ ]*@@g;/^.*:$$/d' \ -e 's@\.\./utils@$$(UTILS_SRC)@g' \ -e 's@ \([^$$]\)@ $$(srcdir)/\1@g' \ -e 's@$$.*\(XScreenSaver_ad\)@\1@g' \ -e 's@$$.*\(XScreenSaver_Xm_ad\)@\1@g' \ -e 's@ $$(srcdir)/\(.*config\.h\)@ \1@g' ; \ echo '' \ ) > /tmp/distdepend.$$$$ && \ mv Makefile.in Makefile.in.bak && \ mv /tmp/distdepend.$$$$ Makefile.in # Updates the version number in the app-defaults file to be in sync with # the version number in version.h. This is so people can tell when they # have a version skew between the app-defaults file and the executable. # Also update hacks/config/README in the same way. update_ad_version:: @ \ files="XScreenSaver.ad.in ../hacks/config/README ../OSX/bindist.rtf" ; \ U=$(UTILS_SRC)/version.h ; \ V=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^. ]*\).*/\1/p' < $$U` ; \ Y=`date '+%Y'` ; \ D=`date '+%d-%b-%Y'` ; \ for S in $$files ; do \ T=/tmp/xs.$$$$ ; \ sed -e "s/\(.*version \)[0-9][0-9]*\.[0-9]*[ab]*[0-9]*\(.*\)/\1$$V\2/" \ -e "s/\([0-9][0-9]-[A-Z][a-z][a-z]-[0-9][0-9][0-9]*\)/$$D/" \ -e "s/\( [0-9][0-9][0-9][0-9]-\)[0-9][0-9][0-9][0-9] /\1$$Y /" \ < $$S > $$T ; \ if cmp -s $$S $$T ; then \ true ; \ else \ cat $$T > $$S ; \ echo "updated $$S to $$V $$D" ; \ fi ; \ done ; \ rm $$T TAGS: tags tags: find $(srcdir) -name '*.[chly]' -print | xargs etags -a echo_tarfiles: @$(MAKE) XScreenSaver_ad.h XScreenSaver_Xm_ad.h 2>&1 >/dev/null @echo $(TARFILES) check_men: @badmen="" ; \ for exe in $(EXES); do \ if ! [ -f $(srcdir)/$$exe.man ]; then \ badmen="$$badmen $$exe" ; \ fi ; \ done ; \ if [ -n "$$badmen" ]; then \ echo "" ; \ echo "Warning: The following programs have no manuals:" ; \ echo "" ; \ for m in $$badmen ; do \ echo " $$m" ; \ done ; \ echo "" ; \ fi # Rules for noticing when the objects from the utils directory are out of # date with respect to their sources, and going and building them according # to the rules in their own Makefile... # $(UTILS_BIN)/fade.o: $(UTILS_SRC)/fade.c $(UTILS_BIN)/overlay.o: $(UTILS_SRC)/overlay.c $(UTILS_BIN)/resources.o: $(UTILS_SRC)/resources.c $(UTILS_BIN)/usleep.o: $(UTILS_SRC)/usleep.c $(UTILS_BIN)/visual.o: $(UTILS_SRC)/visual.c $(UTILS_BIN)/xmu.o: $(UTILS_SRC)/xmu.c $(UTILS_BIN)/logo.o: $(UTILS_SRC)/logo.c $(UTILS_BIN)/minixpm.o: $(UTILS_SRC)/minixpm.c $(UTILS_BIN)/yarandom.o: $(UTILS_SRC)/yarandom.c $(UTILS_BIN)/colorbars.o: $(UTILS_SRC)/colorbars.c $(SAVER_UTIL_OBJS): $(MAKE) -C $(UTILS_BIN) $(@F) CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" # How we build object files in this directory. .c.o: $(CC) -c $(INCLUDES) $(DEFS) $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) $< .m.o: $(OBJCC) -c $(INCLUDES) $(DEFS) $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) $< # subprocs takes an extra -D option. subprocs.o: subprocs.c $(CC) -c $(INCLUDES) $(SUBP_DEFS) $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) \ $(srcdir)/subprocs.c # xscreensaver takes an extra -D option. xscreensaver.o: xscreensaver.c $(CC) -c $(INCLUDES) $(DEFS) $(INTL_DEFS) $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) \ $(srcdir)/xscreensaver.c # demo-Gtk takes extra -D options, and an extra -I option. demo-Gtk.o: demo-Gtk.c $(CC) -c $(INCLUDES) $(SUBP_DEFS) -I$(ICON_SRC) \ $(GTK_DEFS) $(INTL_DEFS) $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) \ $(srcdir)/demo-Gtk.c # demo-Gtk-conf takes an extra -D option. demo-Gtk-conf.o: demo-Gtk-conf.c $(CC) -c $(INCLUDES) $(CONF_DEFS) $(GTK_DEFS) $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) \ $(srcdir)/demo-Gtk-conf.c # How we build the default app-defaults file into the program. # XScreenSaver_ad.h: XScreenSaver.ad $(SHELL) $(UTILS_SRC)/ad2c XScreenSaver.ad > XScreenSaver_ad.h XScreenSaver_Xm_ad.h: XScreenSaver-Xm.ad $(SHELL) $(UTILS_SRC)/ad2c XScreenSaver-Xm.ad > XScreenSaver_Xm_ad.h @INTLTOOL_DESKTOP_RULE@ # The executables linked in this directory. # xscreensaver: $(SAVER_OBJS) $(CC) $(LDFLAGS) -o $@ $(SAVER_OBJS) $(SAVER_LIBS) $(INTL_LIBS) xscreensaver-command: $(CMD_OBJS) $(CC) $(LDFLAGS) -o $@ $(CMD_OBJS) $(CMD_LIBS) xscreensaver-demo: @PREFERRED_DEMO_PROGRAM@ @if [ "@PREFERRED_DEMO_PROGRAM@" = "" ]; then \ echo "WARNING: neither GTK nor Motif are available," \ "therefore no xscreensaver-demo!" ; \ rm -f $@@EXEEXT@ ; \ else \ echo cp -p @PREFERRED_DEMO_PROGRAM@@EXEEXT@ $@@EXEEXT@ ; \ cp -p @PREFERRED_DEMO_PROGRAM@@EXEEXT@ $@@EXEEXT@ ; \ fi xscreensaver-demo-Xm: $(DEMO_OBJS) $(MOTIF_OBJS) $(CC) $(LDFLAGS) -o $@ $(DEMO_OBJS) $(MOTIF_OBJS) $(LIBS) $(X_LIBS) \ $(MOTIF_LIBS) $(INTL_LIBS) $(X_PRE_LIBS) -lXt -lX11 \ $(XDPMS_LIBS) $(XINERAMA_LIBS) -lXext $(X_EXTRA_LIBS) xscreensaver-demo-Gtk: $(DEMO_OBJS) $(GTK_OBJS) $(CC) $(LDFLAGS) -o $@ $(DEMO_OBJS) $(GTK_OBJS) $(LIBS) $(X_LIBS) \ $(GTK_LIBS) $(XPM_LIBS) $(XML_LIBS) $(INTL_LIBS) $(X_PRE_LIBS) \ -lXt -lX11 $(XDPMS_LIBS) $(XINERAMA_LIBS) -lXext $(X_EXTRA_LIBS) demo-Gtk.o: XScreenSaver_ad.h demo-Xm.o: XScreenSaver_Xm_ad.h xscreensaver.o: XScreenSaver_ad.h xscreensaver-getimage.o: XScreenSaver_ad.h xscreensaver-getimage: $(GETIMG_OBJS) $(CC) $(LDFLAGS) -o $@ $(GETIMG_OBJS) $(GETIMG_LIBS) -lm pdf2jpeg: $(PDF2JPEG_OBJS) $(OBJCC) $(LDFLAGS) -o $@ $(PDF2JPEG_OBJS) $(PDF2JPEG_LIBS) -lm TEST_PASSWD_OBJS = test-passwd.o $(LOCK_OBJS_1) $(PASSWD_OBJS) \ subprocs.o setuid.o splash.o prefs.o mlstring.o exec.o \ $(SAVER_UTIL_OBJS) test-passwd.o: XScreenSaver_ad.h test-passwd: $(TEST_PASSWD_OBJS) XScreenSaver_ad.h $(CC) $(LDFLAGS) -o $@ $(TEST_PASSWD_OBJS) $(SAVER_LIBS) test-uid: test-uid.o $(CC) $(LDFLAGS) -o $@ test-uid.o test-xdpms: test-xdpms.o $(CC) $(LDFLAGS) -o $@ test-xdpms.o $(LIBS) $(X_LIBS) $(XDPMS_LIBS) \ $(X_PRE_LIBS) -lXt -lX11 -lXext $(X_EXTRA_LIBS) test-xinerama: test-xinerama.o $(CC) $(LDFLAGS) -o $@ test-xinerama.o $(LIBS) $(X_LIBS) $(SAVER_LIBS) \ $(X_PRE_LIBS) $(XINERAMA_LIBS) -lXt -lX11 -lXext $(X_EXTRA_LIBS) test-vp: test-vp.o $(CC) $(LDFLAGS) -o $@ test-vp.o $(LIBS) $(X_LIBS) $(SAVER_LIBS) \ $(X_PRE_LIBS) -lXt -lX11 -lXext $(X_EXTRA_LIBS) test-randr: test-randr.o $(CC) $(LDFLAGS) -o $@ test-randr.o $(LIBS) $(X_LIBS) $(SAVER_LIBS) \ $(X_PRE_LIBS) -lXt -lX11 -lXext $(X_EXTRA_LIBS) test-grab: test-grab.o $(CC) $(LDFLAGS) -o $@ test-grab.o $(SAVER_LIBS) test-apm: test-apm.o $(CC) $(LDFLAGS) -o $@ test-apm.o $(SAVER_LIBS) -lapm 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: test-fade.o $(UTILS_BIN)/fade.o $(CC) $(LDFLAGS) -o $@ $(TEST_FADE_OBJS) $(SAVER_LIBS) TEST_SCREENS_OBJS = test-screens.o $(DEMO_UTIL_OBJS) test-screens.o: screens.c test-screens: test-screens.o $(CC) $(LDFLAGS) -o $@ $(TEST_SCREENS_OBJS) $(SAVER_LIBS) xdpyinfo.o: xdpyinfo.c $(CC) -c $(INCLUDES) -DHAVE_GLX $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) \ $(srcdir)/xdpyinfo.c xdpyinfo: xdpyinfo.o $(CC) $(LDFLAGS) -o $@ xdpyinfo.o \ $(LIBS) $(X_LIBS) @GL_LIBS@ \ $(X_PRE_LIBS) -lX11 -lXext $(X_EXTRA_LIBS) -lm ############################################################################## # # DO NOT DELETE: updated by make distdepend demo-Gtk-conf.o: ../config.h demo-Gtk-conf.o: $(srcdir)/demo-Gtk-conf.h demo-Gtk-conf.o: $(UTILS_SRC)/xscreensaver-intl.h demo-Gtk.o: XScreenSaver_ad.h demo-Gtk.o: ../config.h demo-Gtk.o: $(srcdir)/demo-Gtk-conf.h demo-Gtk.o: $(srcdir)/prefs.h demo-Gtk.o: $(srcdir)/remote.h demo-Gtk.o: $(srcdir)/types.h demo-Gtk.o: $(UTILS_SRC)/resources.h demo-Gtk.o: $(UTILS_SRC)/usleep.h demo-Gtk.o: $(UTILS_SRC)/version.h demo-Gtk.o: $(UTILS_SRC)/visual.h demo-Gtk.o: $(UTILS_SRC)/xscreensaver-intl.h demo-Xm.o: ../config.h demo-Xm-widgets.o: ../config.h dpms.o: ../config.h dpms.o: $(srcdir)/prefs.h dpms.o: $(srcdir)/types.h dpms.o: $(srcdir)/xscreensaver.h exec.o: ../config.h exec.o: $(srcdir)/exec.h lock.o: $(srcdir)/auth.h lock.o: ../config.h lock.o: $(srcdir)/mlstring.h lock.o: $(srcdir)/prefs.h lock.o: $(srcdir)/types.h lock.o: $(UTILS_SRC)/resources.h lock.o: $(srcdir)/xscreensaver.h mlstring.o: $(srcdir)/mlstring.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-pwent.o: ../config.h prefs.o: ../config.h prefs.o: $(srcdir)/prefs.h prefs.o: $(srcdir)/types.h prefs.o: $(UTILS_SRC)/resources.h prefs.o: $(UTILS_SRC)/version.h remote.o: ../config.h remote.o: $(srcdir)/remote.h screens.o: ../config.h screens.o: $(srcdir)/prefs.h screens.o: $(srcdir)/types.h screens.o: $(UTILS_SRC)/visual.h screens.o: $(srcdir)/xscreensaver.h setuid.o: ../config.h setuid.o: $(srcdir)/prefs.h setuid.o: $(srcdir)/types.h setuid.o: $(srcdir)/xscreensaver.h splash.o: ../config.h splash.o: $(srcdir)/prefs.h splash.o: $(srcdir)/types.h splash.o: $(UTILS_SRC)/resources.h splash.o: $(srcdir)/xscreensaver.h stderr.o: ../config.h stderr.o: $(srcdir)/prefs.h stderr.o: $(srcdir)/types.h stderr.o: $(UTILS_SRC)/resources.h stderr.o: $(UTILS_SRC)/visual.h stderr.o: $(srcdir)/xscreensaver.h subprocs.o: ../config.h subprocs.o: $(srcdir)/exec.h subprocs.o: $(srcdir)/prefs.h subprocs.o: $(srcdir)/types.h subprocs.o: $(UTILS_SRC)/visual.h subprocs.o: $(UTILS_SRC)/yarandom.h subprocs.o: $(srcdir)/xscreensaver.h test-apm.o: ../config.h test-fade.o: ../config.h test-fade.o: $(srcdir)/prefs.h test-fade.o: $(srcdir)/types.h test-fade.o: $(UTILS_SRC)/fade.h test-fade.o: $(srcdir)/xscreensaver.h test-grab.o: ../config.h test-mlstring.o: $(srcdir)/mlstring.c test-mlstring.o: $(srcdir)/mlstring.h test-passwd.o: XScreenSaver_ad.h test-passwd.o: $(srcdir)/auth.h test-passwd.o: ../config.h test-passwd.o: $(srcdir)/prefs.h test-passwd.o: $(srcdir)/types.h test-passwd.o: $(UTILS_SRC)/resources.h test-passwd.o: $(UTILS_SRC)/version.h test-passwd.o: $(UTILS_SRC)/visual.h test-passwd.o: $(srcdir)/xscreensaver.h test-randr.o: ../config.h test-screens.o: ../config.h test-screens.o: $(srcdir)/prefs.h test-screens.o: $(srcdir)/screens.c test-screens.o: $(srcdir)/types.h test-screens.o: $(UTILS_SRC)/visual.h test-screens.o: $(srcdir)/xscreensaver.h test-uid.o: ../config.h test-vp.o: ../config.h test-xdpms.o: ../config.h test-xinerama.o: ../config.h timers.o: ../config.h timers.o: $(srcdir)/prefs.h timers.o: $(srcdir)/types.h timers.o: $(srcdir)/xscreensaver.h windows.o: ../config.h windows.o: $(srcdir)/prefs.h windows.o: $(srcdir)/types.h windows.o: $(UTILS_SRC)/fade.h windows.o: $(UTILS_SRC)/visual.h windows.o: $(srcdir)/xscreensaver.h xscreensaver-command.o: ../config.h xscreensaver-command.o: $(srcdir)/remote.h xscreensaver-command.o: $(UTILS_SRC)/version.h xscreensaver-getimage.o: ../config.h xscreensaver-getimage.o: XScreenSaver_ad.h xscreensaver-getimage.o: $(srcdir)/prefs.h xscreensaver-getimage.o: $(srcdir)/types.h xscreensaver-getimage.o: $(UTILS_SRC)/colorbars.h xscreensaver-getimage.o: $(UTILS_SRC)/grabscreen.h xscreensaver-getimage.o: $(UTILS_SRC)/resources.h xscreensaver-getimage.o: $(UTILS_SRC)/utils.h xscreensaver-getimage.o: $(UTILS_SRC)/version.h xscreensaver-getimage.o: $(UTILS_SRC)/visual.h xscreensaver-getimage.o: $(UTILS_SRC)/vroot.h xscreensaver-getimage.o: $(UTILS_SRC)/yarandom.h xscreensaver.o: XScreenSaver_ad.h xscreensaver.o: $(srcdir)/auth.h xscreensaver.o: ../config.h xscreensaver.o: $(srcdir)/prefs.h xscreensaver.o: $(srcdir)/types.h xscreensaver.o: $(UTILS_SRC)/resources.h xscreensaver.o: $(UTILS_SRC)/usleep.h xscreensaver.o: $(UTILS_SRC)/version.h xscreensaver.o: $(UTILS_SRC)/visual.h xscreensaver.o: $(UTILS_SRC)/yarandom.h xscreensaver.o: $(srcdir)/xscreensaver.h xset.o: ../config.h xset.o: $(srcdir)/prefs.h xset.o: $(srcdir)/types.h xset.o: $(srcdir)/xscreensaver.h xscreensaver-5.34/driver/XScreenSaver.ad.in000664 000767 000767 00000044137 12612752045 020456 0ustar00jwzjwz000000 000000 ! ! XScreenSaver ! ! a screen saver and locker for the X window system ! by Jamie Zawinski ! ! version 5.34 ! 24-Oct-2015 ! ! See "man xscreensaver" for more info. The latest version is always ! available at http://www.jwz.org/xscreensaver/ ! These resources, when placed in the system-wide app-defaults directory ! (e.g., /usr/lib/X11/app-defaults/XScreenSaver) will provide the default ! settings for new users. However, if you have a ".xscreensaver" file in ! your home directory, the settings in that file take precedence. ! Don't hand this file to "xrdb" -- that isn't how app-defaults files work. ! Though app-defaults files have (mostly) the same syntax as your ~/.Xdefaults ! file, they are used differently, and if you run this file through xrdb, ! you will probably mess things up. #error Do not run app-defaults files through xrdb! #error That does not do what you might expect. #error Put this file in /usr/lib/X11/app-defaults/XScreenSaver instead. ! /* (xrdb prevention kludge: whole file) *mode: random *timeout: 0:10:00 *cycle: 0:10:00 *lockTimeout: 0:00:00 *passwdTimeout: 0:00:30 *dpmsEnabled: False *dpmsQuickoffEnabled: False *dpmsStandby: 2:00:00 *dpmsSuspend: 2:00:00 *dpmsOff: 4:00:00 *grabDesktopImages: True *grabVideoFrames: False *chooseRandomImages: @DEFAULT_IMAGES_P@ ! This can be a local directory name, or the URL of an RSS or Atom feed. *imageDirectory: @DEFAULT_IMAGE_DIRECTORY@ *nice: 10 *memoryLimit: 0 *lock: False *verbose: False *timestamp: True *fade: True *unfade: False *fadeSeconds: 0:00:03 *fadeTicks: 20 *splash: True *splashDuration: 0:00:05 *visualID: default *captureStderr: True *ignoreUninstalledPrograms: False *authWarningSlack: 20 *textMode: file *textLiteral: XScreenSaver *textFile: @DEFAULT_TEXT_FILE@ *textProgram: fortune *textURL: https://en.wikipedia.org/w/index.php?title=Special:NewPages&feed=rss *overlayTextForeground: #FFFF00 *overlayTextBackground: #000000 *overlayStderr: True *font: *-medium-r-*-140-*-m-* ! The default is to use these extensions if available (as noted.) *sgiSaverExtension: True *xidleExtension: True *procInterrupts: True ! Turning this on makes pointerHysteresis not work. *xinputExtensionDev: False ! Set this to True if you are experiencing longstanding XFree86 bug #421 ! (xscreensaver not covering the whole screen) GetViewPortIsFullOfLies: False ! This is what the "Demo" button on the splash screen runs (/bin/sh syntax.) *demoCommand: xscreensaver-demo ! This is what the "Prefs" button on the splash screen runs (/bin/sh syntax.) *prefsCommand: xscreensaver-demo -prefs ! This is the URL loaded by the "Help" button on the splash screen, ! and by the "Documentation" menu item in xscreensaver-demo. *helpURL: http://www.jwz.org/xscreensaver/man.html ! loadURL -- how the "Help" buttons load the helpURL (/bin/sh syntax.) ! manualCommand -- how the "Documentation" buttons display man pages. ! ! And there are so very many options to choose from! ! ! Gnome 2.4, 2.6: (yelp can't display man pages, as of 2.6.3) ! @GNOME24@*loadURL: @WITH_BROWSER@ '%s' @GNOME24@*manualCommand: gnome-terminal --title '%s manual' \ @GNOME24@ --command '/bin/sh -c "man %s; read foo"' ! ! Gnome 2.2: ! @GNOME22@*loadURL: gnome-url-show '%s' @GNOME22@*manualCommand: gnome-terminal --title '%s manual' \ @GNOME22@ --command '/bin/sh -c "man %s; read foo"' ! ! Gnome 1.4: ! ! *loadURL: gnome-moz-remote --newwin '%s' ! *manualCommand: gnome-help-browser 'man:%s' ! ! non-Gnome systems: ! @NOGNOME@*loadURL: firefox '%s' || mozilla '%s' || netscape '%s' @NOGNOME@*manualCommand: xterm -sb -fg black -bg gray75 -T '%s manual' \ @NOGNOME@ -e /bin/sh -c 'man "%s" ; read foo' ! The format used for printing the date and time in the password dialog box ! (see the strftime(3) manual page for details.) *dateFormat: %d-%b-%y (%a); %I:%M %p ! To show the time only: ! *dateFormat: %I:%M %p ! For 24 hour time: ! *dateFormat: %H:%M ! This command is executed by the "New Login" button on the lock dialog. ! (That button does not appear on the dialog if this program does not exist.) ! For Gnome: probably "gdmflexiserver -ls". KDE, probably "kdmctl reserve". ! Or maybe yet another wheel-reinvention, "lxdm -c USER_SWITCH". ! Oh wait, this wheel just keeps getting better: "dm-tool switch-to-greeter". ! @NEW_LOGIN_COMMAND_P@*newLoginCommand: @NEW_LOGIN_COMMAND@ ! Turning on "installColormap" on 8-bit systems interacts erratically with ! certain jurassic window managers. If your screen turns some color other ! than black, the window manager is buggy, and you need to set this resource ! to false. Or switch WMs. Or join the 21st century and get a 24-bit ! graphics card. ! *installColormap: True ! This is the list of installed screen saver modes. See "man xscreensaver" ! for the syntax used here. ! ! If you want to disable a screensaver, DO NOT remove it from this list: ! instead, mark it as inactive by placing a "-" at the beginning of the line. ! ! You can use the `xscreensaver-demo' program to edit the current list of ! screen savers interactively. ! *programs: \ maze -root \n\ @GL_KLUDGE@ GL: superquadrics -root \n\ attraction -root \n\ blitspin -root \n\ greynetic -root \n\ helix -root \n\ hopalong -root \n\ imsmap -root \n\ - noseguy -root \n\ - pyro -root \n\ qix -root \n\ - rocks -root \n\ rorschach -root \n\ decayscreen -root \n\ flame -root \n\ halo -root \n\ slidescreen -root \n\ pedal -root \n\ bouboule -root \n\ - braid -root \n\ coral -root \n\ deco -root \n\ drift -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\ @GL_KLUDGE@ GL: moebius -root \n\ moire -root \n\ @GL_KLUDGE@ GL: morph3d -root \n\ mountain -root \n\ munch -root \n\ penrose -root \n\ @GL_KLUDGE@ GL: pipes -root \n\ rd-bomb -root \n\ @GL_KLUDGE@ GL: rubik -root \n\ - sierpinski -root \n\ slip -root \n\ @GL_KLUDGE@ GL: sproingies -root \n\ starfish -root \n\ strange -root \n\ swirl -root \n\ triangle -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\ cynosure -root \n\ discrete -root \n\ distort -root \n\ epicycle -root \n\ flow -root \n\ @GL_KLUDGE@ GL: glplanet -root \n\ interference -root \n\ kumppa -root \n\ @GL_KLUDGE@ GL: lament -root \n\ moire2 -root \n\ @GL_KLUDGE@ GL: sonar -root \n\ @GL_KLUDGE@ GL: stairs -root \n\ truchet -root \n\ - vidwhacker -root \n\ blaster -root \n\ bumps -root \n\ ccurve -root \n\ compass -root \n\ deluxe -root \n\ - demon -root \n\ @GLE_KLUDGE@ GL: extrusion -root \n\ - loop -root \n\ penetrate -root \n\ petri -root \n\ phosphor -root \n\ @GL_KLUDGE@ GL: pulsar -root \n\ ripples -root \n\ shadebobs -root \n\ @GL_KLUDGE@ GL: sierpinski3d -root \n\ spotlight -root \n\ squiral -root \n\ wander -root \n\ - webcollage -root \n\ xflame -root \n\ xmatrix -root \n\ @GL_KLUDGE@ GL: gflux -root \n\ - nerverot -root \n\ xrayswarm -root \n\ xspirograph -root \n\ @GL_KLUDGE@ GL: circuit -root \n\ @GL_KLUDGE@ GL: dangerball -root \n\ - GL: dnalogo -root \n\ @GL_KLUDGE@ GL: engine -root \n\ @GL_KLUDGE@ GL: flipscreen3d -root \n\ @GL_KLUDGE@ GL: gltext -root \n\ @GL_KLUDGE@ GL: menger -root \n\ @GL_KLUDGE@ GL: molecule -root \n\ rotzoomer -root \n\ speedmine -root \n\ @GL_KLUDGE@ GL: starwars -root \n\ @GL_KLUDGE@ GL: stonerview -root \n\ vermiculate -root \n\ whirlwindwarp -root \n\ zoom -root \n\ anemone -root \n\ apollonian -root \n\ @GL_KLUDGE@ GL: boxed -root \n\ @GL_KLUDGE@ GL: cubenetic -root \n\ @GL_KLUDGE@ GL: endgame -root \n\ euler2d -root \n\ fluidballs -root \n\ @GL_KLUDGE@ GL: flurry -root \n\ - GL: glblur -root \n\ @GL_KLUDGE@ GL: glsnake -root \n\ halftone -root \n\ @GL_KLUDGE@ GL: juggler3d -root \n\ @GL_KLUDGE@ GL: lavalite -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: antspotlight -root \n\ apple2 -root \n\ @GL_KLUDGE@ GL: atunnel -root \n\ barcode -root \n\ @GL_KLUDGE@ GL: blinkbox -root \n\ @GL_KLUDGE@ GL: blocktube -root \n\ @GL_KLUDGE@ GL: bouncingcow -root \n\ cloudlife -root \n\ @GL_KLUDGE@ GL: cubestorm -root \n\ eruption -root \n\ @GL_KLUDGE@ GL: flipflop -root \n\ @GL_KLUDGE@ GL: flyingtoasters -root \n\ fontglide -root \n\ @GL_KLUDGE@ GL: gleidescope -root \n\ @GL_KLUDGE@ GL: glknots -root \n\ @GL_KLUDGE@ GL: glmatrix -root \n\ - GL: glslideshow -root \n\ @GL_KLUDGE@ GL: hypertorus -root \n\ - GL: jigglypuff -root \n\ metaballs -root \n\ @GL_KLUDGE@ GL: mirrorblob -root \n\ piecewise -root \n\ @GL_KLUDGE@ GL: polytopes -root \n\ pong -root \n\ popsquares -root \n\ @GL_KLUDGE@ GL: surfaces -root \n\ xanalogtv -root \n\ abstractile -root \n\ anemotaxis -root \n\ - GL: antinspect -root \n\ fireworkx -root \n\ fuzzyflakes -root \n\ interaggregate -root \n\ intermomentary -root \n\ memscroller -root \n\ @GL_KLUDGE@ GL: noof -root \n\ pacman -root \n\ @GL_KLUDGE@ GL: pinion -root \n\ @GL_KLUDGE@ GL: polyhedra -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_KLUDGE@ GL: carousel -root \n\ celtic -root \n\ @GL_KLUDGE@ GL: crackberg -root \n\ @GL_KLUDGE@ GL: cube21 -root \n\ fiberlamp -root \n\ @GL_KLUDGE@ GL: fliptext -root \n\ @GL_KLUDGE@ GL: glhanoi -root \n\ @GL_KLUDGE@ GL: tangram -root \n\ @GL_KLUDGE@ GL: timetunnel -root \n\ @GL_KLUDGE@ GL: glschool -root \n\ @GL_KLUDGE@ GL: topblock -root \n\ @GL_KLUDGE@ GL: cubicgrid -root \n\ cwaves -root \n\ @GL_KLUDGE@ GL: gears -root \n\ @GL_KLUDGE@ GL: glcells -root \n\ @GL_KLUDGE@ GL: lockward -root \n\ m6502 -root \n\ @GL_KLUDGE@ GL: moebiusgears -root \n\ @GL_KLUDGE@ GL: voronoi -root \n\ @GL_KLUDGE@ GL: hypnowheel -root \n\ @GL_KLUDGE@ GL: klein -root \n\ - lcdscrub -root \n\ @GL_KLUDGE@ GL: photopile -root \n\ @GL_KLUDGE@ GL: skytentacles -root \n\ @GL_KLUDGE@ GL: rubikblocks -root \n\ @GL_KLUDGE@ GL: companioncube -root \n\ @GL_KLUDGE@ GL: hilbert -root \n\ @GL_KLUDGE@ GL: tronbit -root \n\ @GL_KLUDGE@ GL: geodesic -root \n\ hexadrop -root \n\ @GL_KLUDGE@ GL: kaleidocycle -root \n\ @GL_KLUDGE@ GL: quasicrystal -root \n\ @GL_KLUDGE@ GL: unknownpleasures -root \n\ binaryring -root \n\ @GL_KLUDGE@ GL: cityflow -root \n\ @GL_KLUDGE@ GL: geodesicgears -root \n\ @GL_KLUDGE@ GL: projectiveplane -root \n\ @GL_KLUDGE@ GL: romanboy -root \n\ tessellimage -root \n\ @GL_KLUDGE@ GL: winduprobot -root \n\ @GL_KLUDGE@ GL: splitflap -root \n\ testx11 -root \n !============================================================================= ! ! You probably don't want to change anything after this point. ! !============================================================================= XScreenSaver.pointerPollTime: 0:00:05 XScreenSaver.pointerHysteresis: 10 XScreenSaver.initialDelay: 0:00:00 XScreenSaver.windowCreationTimeout: 0:00:30 XScreenSaver.bourneShell: /bin/sh ! Resources for the password and splash-screen dialog boxes of ! the "xscreensaver" daemon. ! *Dialog.headingFont: *-helvetica-bold-r-*-*-*-180-*-*-*-iso8859-1 *Dialog.bodyFont: *-helvetica-bold-r-*-*-*-140-*-*-*-iso8859-1 *Dialog.labelFont: *-helvetica-bold-r-*-*-*-140-*-*-*-iso8859-1 *Dialog.unameFont: *-helvetica-bold-r-*-*-*-120-*-*-*-iso8859-1 *Dialog.buttonFont: *-helvetica-bold-r-*-*-*-140-*-*-*-iso8859-1 *Dialog.dateFont: *-helvetica-medium-r-*-*-*-80-*-*-*-iso8859-1 ! Helvetica asterisks look terrible. !*passwd.passwdFont: *-helvetica-medium-r-*-*-*-140-*-*-*-iso8859-1 *passwd.passwdFont: *-courier-medium-r-*-*-*-140-*-*-*-iso8859-1 *Dialog.foreground: #000000 *Dialog.background: #E6E6E6 *Dialog.Button.foreground: #000000 *Dialog.Button.background: #F5F5F5 !*Dialog.Button.pointBackground: #EAEAEA !*Dialog.Button.clickBackground: #C3C3C3 *Dialog.text.foreground: #000000 *Dialog.text.background: #FFFFFF *passwd.thermometer.foreground: #4464AC *passwd.thermometer.background: #FFFFFF *Dialog.topShadowColor: #FFFFFF *Dialog.bottomShadowColor: #CECECE *Dialog.logo.width: 210 *Dialog.logo.height: 210 *Dialog.internalBorderWidth: 24 *Dialog.borderWidth: 1 *Dialog.shadowThickness: 2 *passwd.heading.label: XScreenSaver %s *passwd.body.label: This screen is locked. *passwd.unlock.label: OK *passwd.login.label: New Login *passwd.user.label: Username: *passwd.thermometer.width: 8 *passwd.asterisks: True *passwd.uname: True *splash.heading.label: XScreenSaver %s *splash.body.label: Copyright \251 1991-2015 by *splash.body2.label: Jamie Zawinski *splash.demo.label: Settings *splash.help.label: Help !============================================================================= ! ! Pretty names for the hacks that have unusual capitalization. ! !============================================================================= *hacks.antinspect.name: AntInspect *hacks.antmaze.name: AntMaze *hacks.antspotlight.name: AntSpotlight *hacks.binaryring.name: BinaryRing *hacks.blinkbox.name: BlinkBox *hacks.blitspin.name: BlitSpin *hacks.blocktube.name: BlockTube *hacks.bouncingcow.name: BouncingCow *hacks.boxfit.name: BoxFit *hacks.bsod.name: BSOD *hacks.bubble3d.name: Bubble3D *hacks.ccurve.name: CCurve *hacks.cloudlife.name: CloudLife *hacks.companioncube.name: CompanionCube *hacks.cubestorm.name: CubeStorm *hacks.cubicgrid.name: CubicGrid *hacks.cwaves.name: CWaves *hacks.dangerball.name: DangerBall *hacks.decayscreen.name: DecayScreen *hacks.dnalogo.name: DNA Logo *hacks.euler2d.name: Euler2D *hacks.fadeplot.name: FadePlot *hacks.flipflop.name: FlipFlop *hacks.flipscreen3d.name: FlipScreen3D *hacks.fliptext.name: FlipText *hacks.fluidballs.name: FluidBalls *hacks.flyingtoasters.name: FlyingToasters *hacks.fontglide.name: FontGlide *hacks.fuzzyflakes.name: FuzzyFlakes *hacks.geodesicgears.name: GeodesicGears *hacks.gflux.name: GFlux *hacks.gleidescope.name: Gleidescope *hacks.glforestfire.name: GLForestFire *hacks.hyperball.name: HyperBall *hacks.hypercube.name: HyperCube *hacks.ifs.name: IFS *hacks.imsmap.name: IMSMap *hacks.jigglypuff.name: JigglyPuff *hacks.juggler3d.name: Juggler3D *hacks.lcdscrub.name: LCDscrub *hacks.lmorph.name: LMorph *hacks.m6502.name: m6502 *hacks.memscroller.name: MemScroller *hacks.metaballs.name: MetaBalls *hacks.mirrorblob.name: MirrorBlob *hacks.moebiusgears.name: MoebiusGears *hacks.morph3d.name: Morph3D *hacks.nerverot.name: NerveRot *hacks.noseguy.name: NoseGuy *hacks.popsquares.name: PopSquares *hacks.projectiveplane.name:ProjectivePlane *hacks.quasicrystal.name: QuasiCrystal *hacks.rd-bomb.name: RDbomb *hacks.rdbomb.name: RDbomb *hacks.romanboy.name: RomanBoy *hacks.rotzoomer.name: RotZoomer *hacks.rubikblocks.name: RubikBlocks *hacks.sballs.name: SBalls *hacks.shadebobs.name: ShadeBobs *hacks.sierpinski3d.name: Sierpinski3D *hacks.skytentacles.name: SkyTentacles *hacks.slidescreen.name: SlideScreen *hacks.speedmine.name: SpeedMine *hacks.splitflap.name: SplitFlap *hacks.starwars.name: StarWars *hacks.stonerview.name: StonerView *hacks.t3d.name: T3D *hacks.testx11.name: TestX11 *hacks.timetunnel.name: TimeTunnel *hacks.topblock.name: TopBlock *hacks.tronbit.name: TronBit *hacks.unknownpleasures.name:UnknownPleasures *hacks.vidwhacker.name: VidWhacker *hacks.webcollage.name: WebCollage *hacks.whirlwindwarp.name: WhirlWindWarp *hacks.winduprobot.name: WindupRobot *hacks.xanalogtv.name: XAnalogTV *hacks.xrayswarm.name: XRaySwarm ! obsolete, but still used by xscreensaver-demo-Xm. *hacks.documentation.isInstalled: True ! (xrdb prevention kludge: whole file) */ xscreensaver-5.34/driver/XScreenSaver-Xm.ad000644 000767 000767 00000007001 10365550722 020417 0ustar00jwzjwz000000 000000 ! Resources for the Motif dialog boxes of the "xscreensaver-demo" program. ! *fontList: *-helvetica-medium-r-*-*-*-120-*-*-*-iso8859-1 *demoDialog*label1.fontList: *-helvetica-medium-r-*-*-*-140-*-*-*-iso8859-1 *cmdText.fontList: *-courier-medium-r-*-*-*-120-*-*-*-iso8859-1 *label0.fontList: *-helvetica-bold-r-*-*-*-140-*-*-*-iso8859-1 XScreenSaver*doc.fontList: *-helvetica-medium-r-*-*-*-100-*-*-*-iso8859-1 ! above must be fully qualified to get around *sgiMode. *foreground: #000000 *background: #C0C0C0 *XmTextField.foreground: #000000 *XmTextField.background: #FFFFFF *list.foreground: #000000 *list.background: #FFFFFF *ApplicationShell.title: XScreenSaver *warning.title: XScreenSaver *warning_popup.title: XScreenSaver *allowShellResize: True *autoUnmanage: False *menubar*file.labelString: File *menubar*file.mnemonic: F *file.blank.labelString: Blank Screen Now *file.blank.mnemonic: B *file.lock.labelString: Lock Screen Now *file.lock.mnemonic: L *file.kill.labelString: Kill Daemon *file.kill.mnemonic: K *file.restart.labelString: Restart Daemon *file.restart.mnemonic: R *file.exit.labelString: Exit *file.exit.mnemonic: E *menubar*edit.labelString: Edit *menubar*edit.mnemonic: E *edit.cut.labelString: Cut *edit.cut.mnemonic: u *edit.copy.labelString: Copy *edit.copy.mnemonic: C *edit.paste.labelString: Paste *edit.paste.mnemonic: P *menubar*help.labelString: Help *menubar*help.mnemonic: H *help.about.labelString: About... *help.about.mnemonic: A *help.docMenu.labelString: Documentation... *help.docMenu.mnemonic: D *demoTab.marginWidth: 10 *optionsTab.marginWidth: 10 *XmScrolledWindow.topOffset: 10 *XmScrolledWindow.leftOffset: 10 *demoTab.topOffset: 4 *form1.bottomOffset: 10 *form3.leftOffset: 10 *form3.rightOffset: 10 *frame.topOffset: 10 *frame.bottomOffset: 10 *enabled.topOffset: 10 *visLabel.topOffset: 10 *combo.topOffset: 10 *form4.bottomOffset: 4 *hr.bottomOffset: 4 *XmComboBox.marginWidth: 0 *XmComboBox.marginHeight: 0 *demo.marginWidth: 30 *demo.marginHeight: 4 *man.marginWidth: 10 *man.marginHeight: 4 *down.leftOffset: 40 *down.marginWidth: 4 *down.marginHeight: 4 *up.marginWidth: 4 *up.marginHeight: 4 *frame.traversalOn: False *list.automaticSelection: True *list.visibleItemCount: 20 *doc.columns: 60 *combo.columns: 11 *demoTab.labelString: Graphics Demos *optionsTab.labelString: Screensaver Options *down.labelString: \\/ *up.labelString: /\\ *frameLabel.labelString: *cmdLabel.labelString: Command Line: *cmdLabel.alignment: ALIGNMENT_BEGINNING *enabled.labelString: Enabled *visLabel.labelString: Visual: *visLabel.alignment: ALIGNMENT_END *visLabel.leftOffset: 20 *demo.labelString: Demo *man.labelString: Documentation... *done.labelString: Quit *preferencesLabel.labelString: XScreenSaver Parameters *timeoutLabel.labelString: Saver Timeout *cycleLabel.labelString: Cycle Timeout *fadeSecondsLabel.labelString: Fade Duration *fadeTicksLabel.labelString: Fade Ticks *lockLabel.labelString: Lock Timeout *passwdLabel.labelString: Password Timeout *preferencesForm*XmTextField.columns: 8 *verboseToggle.labelString: Verbose *cmapToggle.labelString: Install Colormap *fadeToggle.labelString: Fade Colormap *unfadeToggle.labelString: Unfade Colormap *lockToggle.labelString: Require Password *OK.marginWidth: 30 *OK.marginHeight: 4 *OK.leftOffset: 10 *OK.bottomOffset: 10 *Cancel.marginWidth: 30 *Cancel.marginHeight: 4 *Cancel.rightOffset: 10 *Cancel.bottomOffset: 10 xscreensaver-5.34/driver/xscreensaver.pam.in000644 000767 000767 00000000523 11767547636 021016 0ustar00jwzjwz000000 000000 #%PAM-1.0 # Fedora Core 5: auth include system-auth # SuSE 9.0: (along with "configure --with-passwd-helper" and "unix2_chkpwd") # auth required pam_unix2.so nullok # Distant past: # auth required /lib/security/pam_pwdb.so shadow nullok # Account validation @COMMENT_PAM_CHECK_ACCOUNT@account include system-auth xscreensaver-5.34/driver/xscreensaver-demo.glade2.in000644 000767 000767 00000374101 12404142677 022310 0ustar00jwzjwz000000 000000 XScreenSaver GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False True False 5 True GTK_PACK_DIRECTION_LTR GTK_PACK_DIRECTION_LTR True _File True True _Blank Screen Now True True _Lock Screen Now True True _Kill Daemon True True _Restart Daemon True True True _Quit True True _Help True True _About... True True _Documentation... True 0 False False 8 True False 0 True True True True GTK_POS_TOP False False 10 True 2 2 False 0 0 True 3 4 False 2 0 True _Cycle After True False GTK_JUSTIFY_RIGHT False False 1 0.5 8 0 cycle_spinbutton PANGO_ELLIPSIZE_NONE -1 False 0 1 2 1 2 fill True Whether a password should be required to un-blank the screen. True False True True _Lock Screen After True GTK_RELIEF_NORMAL True False False True Lock Screen 0 2 2 3 fill True How long before the screen saver activates. True 15 0 True GTK_UPDATE_ALWAYS True False 1 1 720 1 15 0 2 3 0 1 fill True How long after the screen blanks until a password will be required. True 15 0 True GTK_UPDATE_ALWAYS True False 0 0 720 1 15 0 Lock Screen After 2 3 2 3 10 fill True How long each display mode should run before choosing a new one (in Random mode.) True 15 0 True GTK_UPDATE_ALWAYS True False 0 0 720 1 15 0 2 3 1 2 fill True minutes False False GTK_JUSTIFY_LEFT False False 0 0.5 8 0 PANGO_ELLIPSIZE_NONE -1 False 0 3 4 2 3 True minutes False False GTK_JUSTIFY_LEFT False False 0 0.5 8 0 PANGO_ELLIPSIZE_NONE -1 False 0 3 4 1 2 True _Blank After True False GTK_JUSTIFY_RIGHT False False 1 0.5 8 0 timeout_spinbutton PANGO_ELLIPSIZE_NONE -1 False 0 1 2 0 1 fill True minutes False False GTK_JUSTIFY_LEFT False False 0 0.5 8 0 PANGO_ELLIPSIZE_NONE -1 False 0 3 4 0 1 0 1 1 2 fill fill True GTK_BUTTONBOX_SPREAD 30 True Demo the selected screen saver in full-screen mode (click the mouse to return.) True True _Preview True GTK_RELIEF_NORMAL True True Customization and explanation of the selected screen saver. True True _Settings... True GTK_RELIEF_NORMAL True 1 2 1 2 fill fill 10 True False 0 True False 0 True _Mode: True False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 mode_menu PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True True 0 True True Never blank the screen or power down the monitor. _Disable Screen Saver True True When idle or locked, blacken the screen only. _Blank Screen Only True True When idle or locked, run the display mode selected below. _Only One Screen Saver True True When idle or locked, choose a random display mode from among the checked items in the list below. _Random Screen Saver True True When idle or locked, choose a random display mode from among the checked items in the list below. Run that same mode on each monitor. _Same Random Savers True 4 True True 10 False True True True GTK_POLICY_NEVER GTK_POLICY_ALWAYS GTK_SHADOW_IN GTK_CORNER_TOP_LEFT True True False True False True False False False 0 True True True True 0 True False 0 True Run the next screen saver in the list in full-screen mode (click the mouse to return.) True GTK_RELIEF_NORMAL True True GTK_ARROW_DOWN GTK_SHADOW_OUT 0.5 0.5 0 0 0 False False True Run the previous screen saver in the list in full-screen mode (click the mouse to return.) True GTK_RELIEF_NORMAL True True GTK_ARROW_UP GTK_SHADOW_OUT 0.5 0.5 0 0 0 False False 0 False False 0 False True GTK_PACK_END 0 1 0 1 fill True 0 0.5 GTK_SHADOW_ETCHED_IN True True True False GTK_POS_BOTTOM False False 8 True 0 0.5 GTK_SHADOW_ETCHED_IN 0.5 0.5 1.33000004292 False True False True True preview False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab True No Preview Available False False GTK_JUSTIFY_CENTER False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 False True True no preview False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab True Not Installed False False GTK_JUSTIFY_CENTER False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 False True True not installed False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab True Very few (or no) screen savers appear to be available. This probably means that the "xscreensaver-extras" and "xscreensaver-gl-extras" packages are not installed. False False GTK_JUSTIFY_CENTER False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 False True True nothing False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab True Description False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 1 2 0 1 6 expand|shrink|fill expand|shrink|fill False True True _Display Modes True False GTK_JUSTIFY_CENTER False False 0.5 0.5 0 0 notebook PANGO_ELLIPSIZE_NONE -1 False 0 tab True 2 2 True 0 0 10 True 0 0.5 GTK_SHADOW_ETCHED_IN 8 True False 8 True screensaver-snap.png 0 0 4 8 0 False False True False 0 True Whether the image-manipulating modes should be allowed to operate on an image of your desktop. True Grab Desktop _Images True GTK_RELIEF_NORMAL True False False True 0 False False True Whether the image-manipulating modes should operate on images captured from the system's video input (if there is one.) True Grab _Video Frames True GTK_RELIEF_NORMAL True False False True 0 False False True Whether the image-manipulating modes should load image files. True Choose _Random Image: True GTK_RELIEF_NORMAL True False False True 0 False False True False 0 True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 8 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True The local directory, RSS feed or Atom feed from which images will be randomly chosen. True True True 0 True * False 2 True True True True _Browse True GTK_RELIEF_NORMAL True 0 False False 0 False False True Local directory, or RSS feed URL. False False GTK_JUSTIFY_LEFT False False 0 0.5 20 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True True Image Manipulation False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 1 0 1 10 True 0 0.5 GTK_SHADOW_ETCHED_IN 8 True False 8 0 False False True 5 3 False 2 2 True Text-displaying modes will display the text typed here. True _Text True GTK_RELIEF_NORMAL True False False True 0 1 1 2 fill True Text-displaying modes will display the contents of this file. True Text _file True GTK_RELIEF_NORMAL True False False True text_radio 0 1 2 3 fill True Text-displaying modes will display the output of this program. True _Program True GTK_RELIEF_NORMAL True False False True text_radio 0 1 3 4 fill True Text-displaying modes will display the contents of this URL (HTML or RSS). True _URL True GTK_RELIEF_NORMAL True False False True text_radio 0 1 4 5 fill True Text-displaying modes will display the local host name, date, and time. True _Host Name and Time True GTK_RELIEF_NORMAL True True False True text_radio 0 3 0 1 fill True Text-displaying modes will display the contents of this URL (HTML or RSS). True True True 0 True * False 1 3 4 5 True True _Browse True GTK_RELIEF_NORMAL True 2 3 2 3 fill True Text-displaying modes will display the text typed here. True True True 0 True * False 1 3 1 2 True Text-displaying modes will display the output of this program. True True True 0 True * False 1 2 3 4 True True _Browse True GTK_RELIEF_NORMAL True 2 3 3 4 fill True Text-displaying modes will display the contents of this file. True True True 0 True * False 1 2 2 3 0 True True True Text Manipulation False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 1 1 2 fill 10 True 0 0.5 GTK_SHADOW_ETCHED_IN 8 True False 8 0 False False True False 0 True Whether the monitor should be powered down after a while. True _Power Management Enabled True GTK_RELIEF_NORMAL True True False True 0 False False True 3 3 False 2 4 True Stand_by After True False GTK_JUSTIFY_LEFT False False 1 0.5 10 0 dpms_standby_spinbutton PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True Sus_pend After True False GTK_JUSTIFY_LEFT False False 1 0.5 10 0 dpms_suspend_spinbutton PANGO_ELLIPSIZE_NONE -1 False 0 0 1 1 2 fill True _Off After True False GTK_JUSTIFY_LEFT False False 1 0.5 10 0 dpms_off_spinbutton PANGO_ELLIPSIZE_NONE -1 False 0 0 1 2 3 fill True minutes False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 0 1 fill True minutes False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 1 2 fill True minutes False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 2 3 fill True How long until the monitor powers down. True 15 0 True GTK_UPDATE_ALWAYS True False 0 0 1440 1 15 0 1 2 2 3 True How long until the monitor goes into power-saving mode. True 15 0 True GTK_UPDATE_ALWAYS True False 0 0 1440 1 15 0 1 2 1 2 True How long until the monitor goes completely black. True 15 0 True GTK_UPDATE_ALWAYS True False 0 0 1440 1 15 0 1 2 0 1 0 False True True Whether the monitor should be powered off immediately in "Blank Screen Only" mode, regardless of the above power-management timeouts. True _Quick Power-off in Blank Only Mode True GTK_RELIEF_NORMAL True False False True 0 False False 0 True True True Display Power Management False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 1 2 0 1 fill 10 True 0 0.5 GTK_SHADOW_ETCHED_IN 8 True False 8 True screensaver-colorselector.png 0.5 0 0 0 0 False False True False 0 True Whether the screen should slowly fade to black when the screen saver activates. True Fade to Black when _Blanking True GTK_RELIEF_NORMAL True False False True 0 False False True Whether the screen should slowly fade in from black when the screen saver deactivates. True Fade from Black When _Unblanking True GTK_RELIEF_NORMAL True False False True 0 False False True False 0 True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 3 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True F_ade Duration True False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 fade_spinbutton PANGO_ELLIPSIZE_NONE -1 False 0 14 False False True How long it should take for the screen to fade in and out. True 1 0 True GTK_UPDATE_ALWAYS True False 0 0 10 1 1 0 4 False False True seconds False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 False False 0 False False True 8 False False True Whether to install a private colormap when running in 8-bit mode on the default Visual. True Install _Colormap True GTK_RELIEF_NORMAL True False False True 0 False False 0 True True True Fading and Colormaps False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 1 2 1 2 fill fill False True True _Advanced True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 notebook PANGO_ELLIPSIZE_NONE -1 False 0 tab 0 True True 0 True True 5 GTK_BUTTONBOX_EDGE 10 True True True gtk-help True GTK_RELIEF_NORMAL True True True True gtk-close True GTK_RELIEF_NORMAL True 0 False True GTK_PACK_END dialog1 GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True False @COMMENT_DEMO_GLADE2_GTK_2_22_HEAD@False@COMMENT_DEMO_GLADE2_GTK_2_22_TAIL@ True False 0 True GTK_BUTTONBOX_END True True True _Advanced >> True GTK_RELIEF_NORMAL True 0 True True True _Standard << True GTK_RELIEF_NORMAL True 0 True True True _Reset to Defaults True GTK_RELIEF_NORMAL True 0 True True True gtk-cancel True GTK_RELIEF_NORMAL True -6 True True True gtk-ok True GTK_RELIEF_NORMAL True -5 0 False True GTK_PACK_END True False 0 True 0 0 GTK_SHADOW_ETCHED_IN 12 True True True False GTK_POS_BOTTOM False False True False 0 True True GTK_PACK_END True Standard False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab True 4 2 False 0 0 0 1 0 1 fill fill True _Command Line: True False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 cmd_text PANGO_ELLIPSIZE_NONE -1 False 0 1 2 1 2 fill True True True True 0 True * False 1 2 2 3 True False 0 True _Visual: True False GTK_JUSTIFY_LEFT False False 1 0.5 3 0 visual_entry PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True False True False True False True True True True 0 True * False True GTK_SELECTION_BROWSE True True Any True True Best True True Default True True Default-N True True GL True True TrueColor True True PseudoColor True True StaticGray True True GrayScale True True DirectColor True True Color True True Gray True True Mono 0 False False 1 2 3 4 fill fill False True True Advanced False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab True Settings False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True True 0 0 GTK_SHADOW_NONE 5 True False 5 True True False False GTK_JUSTIFY_LEFT True True 0 0 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 True True True False 0 True True _Documentation... True GTK_RELIEF_NORMAL True 0 False False GTK_PACK_END 0 False False True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 False False 0 True True xscreensaver-5.34/driver/xscreensaver-demo.glade2p000644 000767 000767 00000001624 10276064337 022061 0ustar00jwzjwz000000 000000 XScreenSaver Demo xscreensaver-demo ../utils/images TRUE FALSE FALSE FALSE demo-Gtk2-widgets.c demo-Gtk2-widgets.h demo-Gtk2-stubs.c demo-Gtk2-stubs.h demo-Gtk2-support.c demo-Gtk2-support.h xscreensaver-5.34/driver/screensaver-properties.desktop.in000644 000767 000767 00000000307 11262776141 023675 0ustar00jwzjwz000000 000000 [Desktop Entry] Exec=xscreensaver-demo Icon=xscreensaver Terminal=false _Name=Screensaver _Comment=Change screensaver properties Type=Application Categories=Settings;DesktopSettings;Security;X-XFCE; xscreensaver-5.34/driver/.gdbinit000644 000767 000767 00000001454 11033302722 016572 0ustar00jwzjwz000000 000000 # If you're debugging xscreensaver and you are running a virtual root window # manager, you'd better let the process handle these signals: it remaps the # virtual root window when they arrive. If you don't do this, your window # manager will be hosed. # # Also, gdb copes badly with breakpoints in functions that are called on the # other side of a fork(). The Trace/BPT traps cause the spawned process to # die. # #handle 1 pass nostop #handle 3 pass nostop #handle 4 pass nostop #handle 6 pass nostop #handle 7 pass nostop #handle 8 pass nostop #handle 9 pass nostop #handle 10 pass nostop #handle 11 pass nostop #handle 12 pass nostop #handle 13 pass nostop #handle 15 pass nostop #handle 19 pass nostop set env MallocGuardEdges 1 set env MallocPreScribble 1 set env MallocScribble 1 b exit set args -debug xscreensaver-5.34/driver/compile_axp.com000644 000767 000767 00000002373 06366446377 020206 0ustar00jwzjwz000000 000000 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) DEMO.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) DIALOGS-XM.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) LOCK.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) PASSWD.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) STDERR.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,NO_SETUID)/INCL=([],[-],[-.UTILS]) SUBPROCS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) TIMERS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) WINDOWS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) XSCREENSAVER-COMMAND.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,NO_SETUID)/INCL=([],[-],[-.UTILS]) XSCREENSAVER.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) XSET.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) VMS-GETPWNAM.C $!!! CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) GETPWUID.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) VMS-HPWD.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) VMS-VALIDATE.C xscreensaver-5.34/driver/compile_decc.com000644 000767 000767 00000002373 06366446377 020314 0ustar00jwzjwz000000 000000 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) DEMO.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) DIALOGS-XM.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) LOCK.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) PASSWD.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) STDERR.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,NO_SETUID)/INCL=([],[-],[-.UTILS]) SUBPROCS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) TIMERS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) WINDOWS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) XSCREENSAVER-COMMAND.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,NO_SETUID)/INCL=([],[-],[-.UTILS]) XSCREENSAVER.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) XSET.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) VMS-GETPWNAM.C $!!! CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) GETPWUID.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) VMS-HPWD.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) VMS-VALIDATE.C xscreensaver-5.34/driver/link_axp.com000644 000767 000767 00000001264 06366446377 017511 0ustar00jwzjwz000000 000000 $! We fisrt test the version of DECW/Motif ; if 1.2 we need to link with new $! X11R5 libraries $@sys$update:decw$get_image_version sys$share:decw$xlibshr.exe decw$version $ if f$extract(4,3,decw$version).eqs."1.2" $ then $! DECW/Motif 1.2 : link with X11R5 libraries $ link xscreensaver-command,vms_axp_12.opt/opt $ link xscreensaver,demo,dialogs-xm,lock,passwd,stderr,subprocs,timers, - windows,xset,vms-getpwnam,vms-hpwd,vms-validate,vms_axp_12.opt/opt $ else $! Else, link with X11R4 libraries $ link xscreensaver-command,vms_axp.opt/opt $ link xscreensaver,demo,dialogs-xm,lock,passwd,stderr,subprocs,timers, - windows,xset,vms-getpwnam,vms-hpwd,vms-validate,vms_axp.opt/opt $ endif xscreensaver-5.34/driver/link_decc.com000644 000767 000767 00000001270 06366446377 017614 0ustar00jwzjwz000000 000000 $! We fisrt test the version of DECW/Motif ; if 1.2 we need to link with new $! X11R5 libraries $@sys$update:decw$get_image_version sys$share:decw$xlibshr.exe decw$version $ if f$extract(4,3,decw$version).eqs."1.2" $ then $! DECW/Motif 1.2 : link with X11R5 libraries $ link xscreensaver-command,vms_decc_12.opt/opt $ link xscreensaver,demo,dialogs-xm,lock,passwd,stderr,subprocs,timers, - windows,xset,vms-getpwnam,vms-hpwd,vms-validate,vms_decc_12.opt/opt $ else $! Else, link with X11R4 libraries $ link xscreensaver-command,vms_decc.opt/opt $ link xscreensaver,demo,dialogs-xm,lock,passwd,stderr,subprocs,timers, - windows,xset,vms-getpwnam,vms-hpwd,vms-validate,vms_decc.opt/opt $ endif xscreensaver-5.34/driver/vms-getpwnam.c000644 000767 000767 00000006745 06534716616 017777 0ustar00jwzjwz000000 000000 /* * getpwnam(name) - retrieves a UAF entry * * Author: Patrick L. Mahan * Location: TGV, Inc * Date: 15-Nov-1991 * * Purpose: Provides emulation for the UNIX getpwname routine. * * Modification History * * Date | Who | Version | Reason * ------------+-----------+---------------+--------------------------- * 15-Nov-1991 | PLM | 1.0 | First Write */ #define PASSWDROUTINES #include #include #include #include #include #include #include "vms-pwd.h" struct uic { unsigned short uid; unsigned short gid; }; #define TEST(ptr, str) { if (ptr == NULL) { \ fprintf(stderr, "getpwnam: memory allocation failure for \"%s\"\n", \ str); \ return ((struct passwd *)(NULL)); \ } } struct passwd *getpwnam(name) char *name; { int istatus; int UserNameLen; int UserOwnerLen; int UserDeviceLen; int UserDirLen; static char UserName[13]; static char UserOwner[32]; static char UserDevice[32]; static char UserDir[64]; char *cptr, *sptr; unsigned long int UserPwd[2]; unsigned short int UserSalt; unsigned long int UserEncrypt; struct uic UicValue; struct passwd *entry; struct dsc$descriptor_s VMSNAME = {strlen(name), DSC$K_DTYPE_T, DSC$K_CLASS_S, name}; struct itmlist3 { unsigned short int length; unsigned short int item; unsigned long int addr; unsigned long int retaddr; } ItemList[] = { {12, UAI$_USERNAME, (unsigned long)&UserName, (unsigned long)&UserNameLen}, {8, UAI$_PWD, (unsigned long)&UserPwd, 0}, {4, UAI$_UIC, (unsigned long)&UicValue, 0}, {32, UAI$_OWNER, (unsigned long)&UserOwner, (unsigned long)&UserOwnerLen}, {32, UAI$_DEFDEV, (unsigned long)&UserDevice, (unsigned long)&UserDeviceLen}, {64, UAI$_DEFDIR, (unsigned long)&UserDir, (unsigned long)&UserDirLen}, {2, UAI$_SALT, (unsigned long)&UserSalt, 0}, {4, UAI$_ENCRYPT, (unsigned long)&UserEncrypt, 0}, {0, 0, 0, 0} }; UserNameLen = 0; istatus = sys$getuai (0, 0, &VMSNAME, &ItemList, 0, 0, 0); if (!(istatus & 1)) { fprintf (stderr, "getpwnam: unable to retrieve passwd entry for %s\n", name); fprintf (stderr, "getpwnam: vms error number is 0x%x\n", istatus); return ((struct passwd *)NULL); } entry = (struct passwd *) calloc (1, sizeof(struct passwd)); TEST(entry, "PASSWD_ENTRY"); entry->pw_uid = UicValue.uid; entry->pw_gid = UicValue.gid; entry->pw_salt = UserSalt; entry->pw_encrypt = UserEncrypt; sptr = UserName; cptr = calloc (UserNameLen+1, sizeof(char)); TEST(cptr, "USERNAME"); strncpy (cptr, sptr, UserNameLen); cptr[UserNameLen] = '\0'; entry->pw_name = cptr; cptr = calloc(8, sizeof(char)); TEST(cptr, "PASSWORD"); memcpy(cptr, UserPwd, 8); entry->pw_passwd = cptr; sptr = UserOwner; sptr++; cptr = calloc ((int)UserOwner[0]+1, sizeof(char)); TEST(cptr, "FULLNAME"); strncpy (cptr, sptr, (int)UserOwner[0]); cptr[(int)UserOwner[0]] = '\0'; entry->pw_gecos = cptr; cptr = calloc ((int)UserDevice[0]+(int)UserDir[0]+1, sizeof(char)); TEST(cptr, "HOME"); sptr = UserDevice; sptr++; strncpy (cptr, sptr, (int)UserDevice[0]); sptr = UserDir; sptr++; strncat (cptr, sptr, (int)UserDir[0]); cptr[(int)UserDevice[0]+(int)UserDir[0]] = '\0'; entry->pw_dir = cptr; cptr = calloc (strlen("SYS$SYSTEM:LOGINOUT.EXE")+1, sizeof(char)); TEST(cptr,"SHELL"); strcpy (cptr, "SYS$SYSTEM:LOGINOUT.EXE"); entry->pw_shell = cptr; return (entry); } xscreensaver-5.34/driver/vms-pwd.h000644 000767 000767 00000001373 06366446401 016737 0ustar00jwzjwz000000 000000 /* @(#)pwd.h 1.7 89/08/24 SMI; from S5R2 1.1 */ #ifndef __pwd_h #define __pwd_h #ifdef vax11c #include #else #include #endif /* vax11c */ #ifdef PASSWDROUTINES #define EXTERN #else #define EXTERN extern #endif /* PASSWDROUTINES */ struct passwd { char *pw_name; char *pw_passwd; int pw_uid; int pw_gid; short pw_salt; int pw_encrypt; char *pw_age; char *pw_comment; char *pw_gecos; char *pw_dir; char *pw_shell; }; #ifndef _POSIX_SOURCE extern struct passwd *getpwent(); struct comment { char *c_dept; char *c_name; char *c_acct; char *c_bin; }; #endif EXTERN struct passwd *getpwuid(/* uid_t uid */); EXTERN struct passwd *getpwnam(/* char *name */); #endif /* !__pwd_h */ xscreensaver-5.34/driver/vms-hpwd.c000644 000767 000767 00000004075 06366446401 017104 0ustar00jwzjwz000000 000000 /* * VAX/VMS Password hashing routines: * * uses the System Service SYS$HASH_PASSWORD * * 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. * */ #include #include #include #include /* * Hashing routine */ hash_vms_password(output_buf,input_buf,input_length,username,encryption_type,salt) char *output_buf; char *input_buf; int input_length; char *username; int encryption_type; unsigned short salt; { struct dsc$descriptor_s password; struct dsc$descriptor_s user; /* * Check the VMS Version. If this is V5.4 or later, then * we can use the new system service SYS$HASH_PASSWORD. Else * fail and return garbage. */ static char VMS_Version[32]; struct { unsigned short int Size; unsigned short int Code; char *Buffer; unsigned short int *Resultant_Size; } Item_List[2]={32, SYI$_VERSION, VMS_Version, 0, 0, 0}; struct {int Size; char *Ptr;} Descr1; /* * Get the information */ sys$getsyiw(0,0,0,Item_List,0,0,0); /* * Call the old routine if this isn't V5.4 or later... */ #ifndef __DECC if ((VMS_Version[1] < '5') || ((VMS_Version[1] == '5') && (VMS_Version[3] < '4'))) { printf("Unsupported OS version\n"); return(1); } #endif /* !__DECC */ /* * Call the SYS$HASH_PASSWORD system service... */ password.dsc$b_dtype = DSC$K_DTYPE_T; password.dsc$b_class = DSC$K_CLASS_S; password.dsc$w_length = input_length; password.dsc$a_pointer = input_buf; user.dsc$b_dtype = DSC$K_DTYPE_T; user.dsc$b_class = DSC$K_CLASS_S; user.dsc$w_length = strlen(username); user.dsc$a_pointer = username; sys$hash_password (&password, encryption_type, salt, &user, output_buf); } xscreensaver-5.34/driver/vms-validate.c000644 000767 000767 00000003240 06366446401 017724 0ustar00jwzjwz000000 000000 /* * validate a password for a user * * 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. */ /* * Includes */ #include #include #include #include "vms-pwd.h" int hash_vms_password(char *output_buf,char *input_buf,int input_length, char *username,int encryption_type,unsigned short salt); /* * * Validate a VMS UserName/Password pair. * */ int validate_user(name,password) char *name; char *password; { char password_buf[64]; char username_buf[31]; char encrypt_buf[8]; register int i; register char *cp,*cp1; struct passwd *user_entry; /* * Get the users UAF entry */ user_entry = getpwnam(name); /* * If user_entry == NULL then we got a bad error * return -1 to indicate a bad error */ if (user_entry == NULL) return (-1); /* * Uppercase the password */ cp = password; cp1 = password_buf; while (*cp) if (islower(*cp)) *cp1++ = toupper(*cp++); else *cp1++ = *cp++; /* * Get the length of the password */ i = strlen(password); /* * Encrypt the password */ hash_vms_password(encrypt_buf,password_buf,i,user_entry->pw_name, user_entry->pw_encrypt, user_entry->pw_salt); if (memcmp(encrypt_buf,user_entry->pw_passwd,8) == 0) return(1); else return(0); } xscreensaver-5.34/driver/vms_axp.opt000644 000767 000767 00000000240 06366446401 017362 0ustar00jwzjwz000000 000000 [-.UTILS]UTILS.OLB_AXP/LIB SYS$SHARE:DECW$XMLIBSHR.EXE/SHARE SYS$SHARE:DECW$XMULIBSHR.EXE/SHARE SYS$SHARE:DECW$XTSHR.EXE/SHARE SYS$SHARE:DECW$XLIBSHR.EXE/SHARE xscreensaver-5.34/driver/vms_axp_12.opt000644 000767 000767 00000000251 06366446401 017666 0ustar00jwzjwz000000 000000 [-.UTILS]UTILS.OLB_AXP/LIB SYS$SHARE:DECW$XMLIBSHR12.EXE/SHARE SYS$SHARE:DECW$XMULIBSHRR5.EXE/SHARE SYS$SHARE:DECW$XTLIBSHRR5.EXE/SHARE SYS$SHARE:DECW$XLIBSHR.EXE/SHARE xscreensaver-5.34/driver/vms_decc.opt000644 000767 000767 00000000241 06366446401 017471 0ustar00jwzjwz000000 000000 [-.UTILS]UTILS.OLB_DECC/LIB SYS$SHARE:DECW$XMLIBSHR.EXE/SHARE SYS$SHARE:DECW$XMULIBSHR.EXE/SHARE SYS$SHARE:DECW$XTSHR.EXE/SHARE SYS$SHARE:DECW$XLIBSHR.EXE/SHARE xscreensaver-5.34/driver/vms_decc_12.opt000644 000767 000767 00000000252 06366446402 017776 0ustar00jwzjwz000000 000000 [-.UTILS]UTILS.OLB_DECC/LIB SYS$SHARE:DECW$XMLIBSHR12.EXE/SHARE SYS$SHARE:DECW$XMULIBSHRR5.EXE/SHARE SYS$SHARE:DECW$XTLIBSHRR5.EXE/SHARE SYS$SHARE:DECW$XLIBSHR.EXE/SHARE xscreensaver-5.34/driver/xscreensaver.c000664 000767 000767 00000231001 12612750537 020037 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 1991-2015 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ /* ======================================================================== * First we wait until the keyboard and mouse become idle for the specified * amount of time. We do this in one of three different ways: periodically * checking with the XIdle server extension; selecting key and mouse events * on (nearly) all windows; or by waiting for the MIT-SCREEN-SAVER extension * to send us a "you are idle" event. * * Then, we map a full screen black window. * * We place a __SWM_VROOT property on this window, so that newly-started * clients will think that this window is a "virtual root" window (as per * the logic in the historical "vroot.h" header.) * * If there is an existing "virtual root" window (one that already had * an __SWM_VROOT property) then we remove that property from that window. * Otherwise, clients would see that window (the real virtual root) instead * of ours (the impostor.) * * Then we pick a random program to run, and start it. Two assumptions * are made about this program: that it has been specified with whatever * command-line options are necessary to make it run on the root window; * and that it has been compiled with vroot.h, so that it is able to find * the root window when a virtual-root window manager (or this program) is * running. * * Then, we wait for keyboard or mouse events to be generated on the window. * When they are, we kill the inferior process, unmap the window, and restore * the __SWM_VROOT property to the real virtual root window if there was one. * * On multi-screen systems, we do the above on each screen, and start * multiple programs, each with a different value of $DISPLAY. * * On Xinerama systems, we do a similar thing, but instead create multiple * windows on the (only) display, and tell the subprocess which one to use * via the $XSCREENSAVER_WINDOW environment variable -- this trick requires * a recent (Aug 2003) revision of vroot.h. * * (See comments in screens.c for more details about Xinerama/RANDR stuff.) * * While we are waiting for user activity, we also set up timers so that, * after a certain amount of time has passed, we can start a different * screenhack. We do this by killing the running child process with * SIGTERM, and then starting a new one in the same way. * * If there was a real virtual root, meaning that we removed the __SWM_VROOT * property from it, meaning we must (absolutely must) restore it before we * exit, then we set up signal handlers for most signals (SIGINT, SIGTERM, * etc.) that do this. Most Xlib and Xt routines are not reentrant, so it * is not generally safe to call them from signal handlers; however, this * program spends most of its time waiting, so the window of opportunity * when code could be called reentrantly is fairly small; and also, the worst * that could happen is that the call would fail. If we've gotten one of * these signals, then we're on our way out anyway. If we didn't restore the * __SWM_VROOT property, that would be very bad, so it's worth a shot. Note * that this means that, if you're using a virtual-root window manager, you * can really fuck up the world by killing this process with "kill -9". * * This program accepts ClientMessages of type SCREENSAVER; these messages * may contain the atoms ACTIVATE, DEACTIVATE, etc, meaning to turn the * screensaver on or off now, regardless of the idleness of the user, * and a few other things. The included "xscreensaver-command" program * sends these messsages. * * If we don't have the XIdle, MIT-SCREEN-SAVER, or SGI SCREEN_SAVER * extensions, then we do the XAutoLock trick: notice every window that * gets created, and wait 30 seconds or so until its creating process has * settled down, and then select KeyPress events on those windows which * already select for KeyPress events. It's important that we not select * KeyPress on windows which don't select them, because that would * interfere with event propagation. This will break if any program * changes its event mask to contain KeyRelease or PointerMotion more than * 30 seconds after creating the window, but such programs do not seem to * occur in nature (I've never seen it happen in all these years.) * * The reason that we can't select KeyPresses on windows that don't have * them already is that, when dispatching a KeyPress event, X finds the * lowest (leafmost) window in the hierarchy on which *any* client selects * for KeyPress, and sends the event to that window. This means that if a * client had a window with subwindows, and expected to receive KeyPress * events on the parent window instead of the subwindows, then that client * would malfunction if some other client selected KeyPress events on the * subwindows. It is an incredible misdesign that one client can make * another client malfunction in this way. * * But here's a new kink that started showing up in late 2014: GNOME programs * don't actually select for or receive KeyPress events! They do it behind * the scenes through some kind of Input Method magic, even when running in * an en_US locale. However, in that case, those applications *do* seem to * update the _NET_WM_USER_TIME on their own windows every time they have * received a secret KeyPress, so we *also* monitor that property on every * window, and treat changes to it as identical to KeyPress. * * To detect mouse motion, we periodically wake up and poll the mouse * position and button/modifier state, and notice when something has * changed. We make this check every five seconds by default, and since the * screensaver timeout has a granularity of one minute, this makes the * chance of a false positive very small. We could detect mouse motion in * the same way as keyboard activity, but that would suffer from the same * "client changing event mask" problem that the KeyPress events hack does. * I think polling is more reliable. * * On systems with /proc/interrupts (Linux) we poll that file and note when * the interrupt counter numbers on the "keyboard" and "PS/2" lines change. * (There is no reliable way, using /proc/interrupts, to detect non-PS/2 * mice, so it doesn't help for serial or USB mice.) * * None of this crap happens if we're using one of the extensions. Sadly, * the XIdle extension hasn't been available for many years; the SGI * extension only exists on SGIs; and the MIT extension, while widely * deployed, is garbage in several ways. * * A third idle-detection option could be implemented (but is not): when * running on the console display ($DISPLAY is `localhost`:0) and we're on a * machine where /dev/tty and /dev/mouse have reasonable last-modification * times, we could just stat() those. But the incremental benefit of * implementing this is really small, so forget I said anything. * * Debugging hints: * - Have a second terminal handy. * - Be careful where you set your breakpoints, you don't want this to * stop under the debugger with the keyboard grabbed or the blackout * window exposed. * - If you run your debugger under XEmacs, try M-ESC (x-grab-keyboard) * to keep your emacs window alive even when xscreensaver has grabbed. * - Go read the code related to `debug_p'. * - You probably can't set breakpoints in functions that are called on * the other side of a call to fork() -- if your subprocesses are * dying with signal 5, Trace/BPT Trap, you're losing in this way. * - If you aren't using a server extension, don't leave this stopped * under the debugger for very long, or the X input buffer will get * huge because of the keypress events it's selecting for. This can * make your X server wedge with "no more input buffers." * * ======================================================================== */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #ifdef ENABLE_NLS # include # include #endif /* ENABLE_NLS */ #include #include #include #include #include #include #include #include #include /* for gethostbyname() */ #include #include #ifdef HAVE_XMU # ifndef VMS # include # else /* !VMS */ # include # endif /* !VMS */ #else /* !HAVE_XMU */ # include "xmu.h" #endif /* !HAVE_XMU */ #ifdef HAVE_MIT_SAVER_EXTENSION #include #endif /* HAVE_MIT_SAVER_EXTENSION */ #ifdef HAVE_XIDLE_EXTENSION # include #endif /* HAVE_XIDLE_EXTENSION */ #ifdef HAVE_SGI_VC_EXTENSION # include #endif /* HAVE_SGI_VC_EXTENSION */ #ifdef HAVE_READ_DISPLAY_EXTENSION # include #endif /* HAVE_READ_DISPLAY_EXTENSION */ #ifdef HAVE_XSHM_EXTENSION # include #endif /* HAVE_XSHM_EXTENSION */ #ifdef HAVE_DPMS_EXTENSION # include #endif /* HAVE_DPMS_EXTENSION */ #ifdef HAVE_DOUBLE_BUFFER_EXTENSION # include #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ #ifdef HAVE_XF86VMODE # include #endif /* HAVE_XF86VMODE */ #ifdef HAVE_XF86MISCSETGRABKEYSSTATE # include #endif /* HAVE_XF86MISCSETGRABKEYSSTATE */ #ifdef HAVE_XINERAMA # include #endif /* HAVE_XINERAMA */ #ifdef HAVE_RANDR # include #endif /* HAVE_RANDR */ #include "xscreensaver.h" #include "version.h" #include "yarandom.h" #include "resources.h" #include "visual.h" #include "usleep.h" #include "auth.h" saver_info *global_si_kludge = 0; /* I hate C so much... */ char *progname = 0; char *progclass = 0; XrmDatabase db = 0; static Atom XA_SCREENSAVER_RESPONSE; static Atom XA_ACTIVATE, XA_DEACTIVATE, XA_CYCLE, XA_NEXT, XA_PREV; static Atom XA_RESTART, XA_SELECT; static Atom XA_THROTTLE, XA_UNTHROTTLE; Atom XA_DEMO, XA_PREFS, XA_EXIT, XA_LOCK, XA_BLANK; static XrmOptionDescRec options [] = { { "-verbose", ".verbose", XrmoptionNoArg, "on" }, { "-silent", ".verbose", XrmoptionNoArg, "off" }, /* xscreensaver-demo uses this one */ { "-nosplash", ".splash", XrmoptionNoArg, "off" }, { "-no-splash", ".splash", XrmoptionNoArg, "off" }, /* useful for debugging */ { "-no-capture-stderr", ".captureStderr", XrmoptionNoArg, "off" }, { "-log", ".logFile", XrmoptionSepArg, 0 }, }; #ifdef __GNUC__ __extension__ /* shut up about "string length is greater than the length ISO C89 compilers are required to support" when including the .ad file... */ #endif static char *defaults[] = { #include "XScreenSaver_ad.h" 0 }; #ifdef _VROOT_H_ ERROR! You must not include vroot.h in this file. #endif static void do_help (saver_info *si) { char *s, year[5]; s = strchr (screensaver_id, '-'); s = strrchr (s, '-'); s++; strncpy (year, s, 4); year[4] = 0; fflush (stdout); fflush (stderr); fprintf (stdout, "\ xscreensaver %s, copyright (c) 1991-%s by Jamie Zawinski \n\ \n\ All xscreensaver configuration is via the `~/.xscreensaver' file.\n\ Rather than editing that file by hand, just run `xscreensaver-demo':\n\ that program lets you configure the screen saver graphically,\n\ including timeouts, locking, and display modes.\n\ \n", si->version, year); fprintf (stdout, "\ Just getting started? Try this:\n\ \n\ xscreensaver &\n\ xscreensaver-demo\n\ \n\ For updates, online manual, and FAQ, please see the web page:\n\ \n\ http://www.jwz.org/xscreensaver/\n\ \n"); fflush (stdout); fflush (stderr); exit (1); } Bool in_signal_handler_p = 0; /* I hate C so much... */ char * timestring (void) { if (in_signal_handler_p) { /* Turns out that ctime() and even localtime_r() call malloc() on Linux! So we can't call them from inside SIGCHLD. WTF. */ static char buf[30]; strcpy (buf, "... ... .. signal ...."); return buf; } else { time_t now = time ((time_t *) 0); char *str = (char *) ctime (&now); char *nl = (char *) strchr (str, '\n'); if (nl) *nl = 0; /* take off that dang newline */ return str; } } static Bool blurb_timestamp_p = True; /* kludge */ const char * blurb (void) { if (!blurb_timestamp_p) return progname; else { static char buf[255]; char *ct = timestring(); int n = strlen(progname); if (n > 100) n = 99; strncpy(buf, progname, n); buf[n++] = ':'; buf[n++] = ' '; strncpy(buf+n, ct+11, 8); strcpy(buf+n+9, ": "); return buf; } } int saver_ehandler (Display *dpy, XErrorEvent *error) { saver_info *si = global_si_kludge; /* I hate C so much... */ int i; Bool fatal_p; if (!real_stderr) real_stderr = stderr; fprintf (real_stderr, "\n" "#######################################" "#######################################\n\n" "%s: X Error! PLEASE REPORT THIS BUG.\n", blurb()); for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; fprintf (real_stderr, "%s: screen %d/%d: 0x%x, 0x%x, 0x%x\n", blurb(), ssi->real_screen_number, ssi->number, (unsigned int) RootWindowOfScreen (si->screens[i].screen), (unsigned int) si->screens[i].real_vroot, (unsigned int) si->screens[i].screensaver_window); } fprintf (real_stderr, "\n" "#######################################" "#######################################\n\n"); fatal_p = XmuPrintDefaultErrorMessage (dpy, error, real_stderr); fatal_p = True; /* The only time I've ever seen a supposedly nonfatal error, it has been BadImplementation / Xlib sequence lost, which are in truth pretty damned fatal. */ fprintf (real_stderr, "\n"); if (! fatal_p) fprintf (real_stderr, "%s: nonfatal error.\n\n", blurb()); else { if (si->prefs.xsync_p) { saver_exit (si, -1, "because of synchronous X Error"); } else { #ifdef __GNUC__ __extension__ /* don't warn about "string length is greater than the length ISO C89 compilers are required to support". */ #endif fprintf (real_stderr, "#######################################################################\n" "\n" " If at all possible, please re-run xscreensaver with the command\n" " line arguments `-sync -verbose -log log.txt', and reproduce this\n" " bug. That will cause xscreensaver to dump a `core' file to the\n" " current directory. Please include the stack trace from that core\n" " file in your bug report. *DO NOT* mail the core file itself! That\n" " won't work. A \"log.txt\" file will also be written. Please *do*\n" " include the complete \"log.txt\" file with your bug report.\n" "\n" " http://www.jwz.org/xscreensaver/bugs.html explains how to create\n" " the most useful bug reports, and how to examine core files.\n" "\n" " The more information you can provide, the better. But please\n" " report this bug, regardless!\n" "\n" "#######################################################################\n" "\n" "\n"); saver_exit (si, -1, 0); } } return 0; } /* 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 message than "cannot open display." */ static void startup_ehandler (String name, String type, String class, String defalt, /* one can't even spel properly in this joke of a language */ String *av, Cardinal *ac) { char fmt[512]; String p[10]; saver_info *si = global_si_kludge; /* I hate C so much... */ XrmDatabase *db = XtAppGetErrorDatabase(si->app); *fmt = 0; XtAppGetErrorDatabaseText(si->app, name, type, class, defalt, fmt, sizeof(fmt)-1, *db); fprintf (stderr, "%s: ", blurb()); memset (p, 0, sizeof(p)); if (*ac > countof (p)) *ac = countof (p); memcpy ((char *) p, (char *) av, (*ac) * sizeof(*av)); fprintf (stderr, fmt, /* Did I mention that I hate C? */ p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8], p[9]); fprintf (stderr, "\n"); describe_uids (si, stderr); if (si->orig_uid && !strncmp (si->orig_uid, "root/", 5)) { fprintf (stderr, "\n" "%s: This is probably because you're logging in as root. You\n" " shouldn't log in as root: you should log in as a normal user,\n" " and then `su' as needed. If you insist on logging in as\n" " root, you will have to turn off X's security features before\n" " xscreensaver will work.\n" "\n" " Please read the manual and FAQ for more information:\n", blurb()); } else { fprintf (stderr, "\n" "%s: Errors at startup are usually authorization problems.\n" " But you're not logging in as root (good!) so something\n" " else must be wrong. Did you read the manual and the FAQ?\n", blurb()); } fprintf (stderr, "\n" " http://www.jwz.org/xscreensaver/faq.html\n" " http://www.jwz.org/xscreensaver/man.html\n" "\n"); fflush (stderr); fflush (stdout); exit (1); } /* The zillions of initializations. */ /* Set progname, version, etc. This is done very early. */ static void set_version_string (saver_info *si, int *argc, char **argv) { progclass = "XScreenSaver"; /* progname is reset later, after we connect to X. */ progname = strrchr(argv[0], '/'); if (progname) progname++; else progname = argv[0]; if (strlen(progname) > 100) /* keep it short. */ progname[99] = 0; /* The X resource database blows up if argv[0] has a "." in it. */ { char *s = argv[0]; while ((s = strchr (s, '.'))) *s = '_'; } si->version = (char *) malloc (5); memcpy (si->version, screensaver_id + 17, 4); si->version [4] = 0; } /* Initializations that potentially take place as a priveleged user: If the xscreensaver executable is setuid root, then these initializations are run as root, before discarding privileges. */ static void privileged_initialization (saver_info *si, int *argc, char **argv) { #ifndef NO_LOCKING /* before hack_uid() for proper permissions */ lock_priv_init (*argc, argv, si->prefs.verbose_p); #endif /* NO_LOCKING */ hack_uid (si); } /* Figure out what locking mechanisms are supported. */ static void lock_initialization (saver_info *si, int *argc, char **argv) { #ifdef NO_LOCKING si->locking_disabled_p = True; si->nolock_reason = "not compiled with locking support"; #else /* !NO_LOCKING */ /* Finish initializing locking, now that we're out of privileged code. */ if (! lock_init (*argc, argv, si->prefs.verbose_p)) { si->locking_disabled_p = True; si->nolock_reason = "error getting password"; } /* If locking is currently enabled, but the environment indicates that we have been launched as GDM's "Background" program, then disable locking just in case. */ if (!si->locking_disabled_p && getenv ("RUNNING_UNDER_GDM")) { si->locking_disabled_p = True; si->nolock_reason = "running under GDM"; } /* If the server is XDarwin (MacOS X) then disable locking. (X grabs only affect X programs, so you can use Command-Tab to bring any other Mac program to the front, e.g., Terminal.) */ if (!si->locking_disabled_p) { int op = 0, event = 0, error = 0; Bool macos_p = False; #ifdef __APPLE__ /* Disable locking if *running* on Apple hardware, since we have no reliable way to determine whether the server is running on MacOS. Hopefully __APPLE__ means "MacOS" and not "Linux on Mac hardware" but I'm not really sure about that. */ macos_p = True; #endif if (!macos_p) /* This extension exists on the Apple X11 server, but not on earlier versions of the XDarwin server. */ macos_p = XQueryExtension (si->dpy, "Apple-DRI", &op, &event, &error); if (macos_p) { si->locking_disabled_p = True; si->nolock_reason = "Cannot lock securely on MacOS X"; } } /* Like MacOS, locking under Wayland's embedded X11 server does not work. (X11 grabs don't work because the Wayland window manager lives at a higher level than the X11 emulation layer.) */ if (!si->locking_disabled_p && getenv ("WAYLAND_DISPLAY")) { si->locking_disabled_p = True; si->nolock_reason = "Cannot lock securely under Wayland"; } if (si->prefs.debug_p) /* But allow locking anyway in debug mode. */ si->locking_disabled_p = False; #endif /* NO_LOCKING */ } /* Open the connection to the X server, and intern our Atoms. */ static Widget connect_to_server (saver_info *si, int *argc, char **argv) { Widget toplevel_shell; #ifdef HAVE_PUTENV char *d = getenv ("DISPLAY"); if (!d || !*d) { char *ndpy = strdup("DISPLAY=:0.0"); /* if (si->prefs.verbose_p) */ /* sigh, too early to test this... */ fprintf (stderr, "%s: warning: $DISPLAY is not set: defaulting to \"%s\".\n", blurb(), ndpy+8); if (putenv (ndpy)) abort (); /* don't free (ndpy) -- some implementations of putenv (BSD 4.4, glibc 2.0) copy the argument, but some (libc4,5, glibc 2.1.2) do not. So we must leak it (and/or the previous setting). Yay. */ } #endif /* HAVE_PUTENV */ XSetErrorHandler (saver_ehandler); XtAppSetErrorMsgHandler (si->app, startup_ehandler); toplevel_shell = XtAppInitialize (&si->app, progclass, options, XtNumber (options), argc, argv, defaults, 0, 0); XtAppSetErrorMsgHandler (si->app, 0); si->dpy = XtDisplay (toplevel_shell); si->prefs.db = XtDatabase (si->dpy); XtGetApplicationNameAndClass (si->dpy, &progname, &progclass); if(strlen(progname) > 100) /* keep it short. */ progname [99] = 0; db = si->prefs.db; /* resources.c needs this */ XA_VROOT = XInternAtom (si->dpy, "__SWM_VROOT", False); XA_SCREENSAVER = XInternAtom (si->dpy, "SCREENSAVER", False); XA_SCREENSAVER_VERSION = XInternAtom (si->dpy, "_SCREENSAVER_VERSION",False); XA_SCREENSAVER_ID = XInternAtom (si->dpy, "_SCREENSAVER_ID", False); XA_SCREENSAVER_STATUS = XInternAtom (si->dpy, "_SCREENSAVER_STATUS", False); XA_SCREENSAVER_RESPONSE = XInternAtom (si->dpy, "_SCREENSAVER_RESPONSE", False); XA_XSETROOT_ID = XInternAtom (si->dpy, "_XSETROOT_ID", False); XA_ESETROOT_PMAP_ID = XInternAtom (si->dpy, "ESETROOT_PMAP_ID", False); XA_XROOTPMAP_ID = XInternAtom (si->dpy, "_XROOTPMAP_ID", False); XA_NET_WM_USER_TIME = XInternAtom (si->dpy, "_NET_WM_USER_TIME", False); XA_ACTIVATE = XInternAtom (si->dpy, "ACTIVATE", False); XA_DEACTIVATE = XInternAtom (si->dpy, "DEACTIVATE", False); XA_RESTART = XInternAtom (si->dpy, "RESTART", False); XA_CYCLE = XInternAtom (si->dpy, "CYCLE", False); XA_NEXT = XInternAtom (si->dpy, "NEXT", False); XA_PREV = XInternAtom (si->dpy, "PREV", False); XA_SELECT = XInternAtom (si->dpy, "SELECT", False); XA_EXIT = XInternAtom (si->dpy, "EXIT", False); XA_DEMO = XInternAtom (si->dpy, "DEMO", False); XA_PREFS = XInternAtom (si->dpy, "PREFS", False); XA_LOCK = XInternAtom (si->dpy, "LOCK", False); XA_BLANK = XInternAtom (si->dpy, "BLANK", False); XA_THROTTLE = XInternAtom (si->dpy, "THROTTLE", False); XA_UNTHROTTLE = XInternAtom (si->dpy, "UNTHROTTLE", False); return toplevel_shell; } /* Handle the command-line arguments that were not handled for us by Xt. Issue an error message and exit if there are unknown options. */ static void process_command_line (saver_info *si, int *argc, char **argv) { int i; for (i = 1; i < *argc; i++) { if (!strcmp (argv[i], "-debug")) /* no resource for this one, out of paranoia. */ si->prefs.debug_p = True; else if (!strcmp (argv[i], "-h") || !strcmp (argv[i], "-help") || !strcmp (argv[i], "--help")) do_help (si); else { const char *s = argv[i]; fprintf (stderr, "%s: unknown option \"%s\". Try \"-help\".\n", blurb(), s); if (s[0] == '-' && s[1] == '-') s++; if (!strcmp (s, "-activate") || !strcmp (s, "-deactivate") || !strcmp (s, "-cycle") || !strcmp (s, "-next") || !strcmp (s, "-prev") || !strcmp (s, "-exit") || !strcmp (s, "-restart") || !strcmp (s, "-demo") || !strcmp (s, "-prefs") || !strcmp (s, "-preferences") || !strcmp (s, "-lock") || !strcmp (s, "-version") || !strcmp (s, "-time")) { if (!strcmp (s, "-demo") || !strcmp (s, "-prefs")) fprintf (stderr, "\n\ Perhaps you meant to run the `xscreensaver-demo' program instead?\n"); else fprintf (stderr, "\n\ However, `%s' is an option to the `xscreensaver-command' program.\n", s); fprintf (stderr, "\ The `xscreensaver' program is a daemon that runs in the background.\n\ You control a running xscreensaver process by sending it messages\n\ with `xscreensaver-demo' or `xscreensaver-command'.\n\ . See the man pages for details, or check the web page:\n\ http://www.jwz.org/xscreensaver/\n\n"); } exit (1); } } } /* Print out the xscreensaver banner to the tty if applicable; Issue any other warnings that are called for at this point. */ static void print_banner (saver_info *si) { saver_preferences *p = &si->prefs; char *s, year[5]; s = strchr (screensaver_id, '-'); s = strrchr (s, '-'); s++; strncpy (year, s, 4); year[4] = 0; /* This resource gets set some time before the others, so that we know whether to print the banner (and so that the banner gets printed before any resource-database-related error messages.) */ p->verbose_p = (p->debug_p || get_boolean_resource (si->dpy, "verbose", "Boolean")); /* Ditto, for the locking_disabled_p message. */ p->lock_p = get_boolean_resource (si->dpy, "lock", "Boolean"); if (p->verbose_p) fprintf (stderr, "%s %s, copyright (c) 1991-%s " "by Jamie Zawinski .\n", progname, si->version, year); if (p->debug_p) fprintf (stderr, "\n" "%s: Warning: running in DEBUG MODE. Be afraid.\n" "\n" "\tNote that in debug mode, the xscreensaver window will only\n" "\tcover the left half of the screen. (The idea is that you\n" "\tcan still see debugging output in a shell, if you position\n" "\tit on the right side of the screen.)\n" "\n" "\tDebug mode is NOT SECURE. Do not run with -debug in\n" "\tuntrusted environments.\n" "\n", blurb()); if (p->verbose_p && senescent_p ()) fprintf (stderr, "\n" "*************************************" "**************************************\n" "%s: Warning: this version of xscreensaver is VERY OLD!\n" "%s: Please upgrade! http://www.jwz.org/xscreensaver/\n" "*************************************" "**************************************\n" "\n", blurb(), blurb()); if (p->verbose_p) { if (!si->uid_message || !*si->uid_message) describe_uids (si, stderr); else { if (si->orig_uid && *si->orig_uid) fprintf (stderr, "%s: initial effective uid/gid was %s.\n", blurb(), si->orig_uid); fprintf (stderr, "%s: %s\n", blurb(), si->uid_message); } fprintf (stderr, "%s: in process %lu.\n", blurb(), (unsigned long) getpid()); } } static void print_lock_failure_banner (saver_info *si) { saver_preferences *p = &si->prefs; /* If locking was not able to be initalized for some reason, explain why. (This has to be done after we've read the lock_p resource.) */ if (si->locking_disabled_p) { p->lock_p = False; fprintf (stderr, "%s: locking is disabled (%s).\n", blurb(), si->nolock_reason); if (strstr (si->nolock_reason, "passw")) fprintf (stderr, "%s: does xscreensaver need to be setuid? " "consult the manual.\n", blurb()); else if (strstr (si->nolock_reason, "running as ")) fprintf (stderr, "%s: locking only works when xscreensaver is launched\n" "\t by a normal, non-privileged user (e.g., not \"root\".)\n" "\t See the manual for details.\n", blurb()); } } /* called from screens.c so that all the Xt crud is here. */ void initialize_screen_root_widget (saver_screen_info *ssi) { saver_info *si = ssi->global; if (ssi->toplevel_shell) XtDestroyWidget (ssi->toplevel_shell); ssi->toplevel_shell = XtVaAppCreateShell (progname, progclass, applicationShellWidgetClass, si->dpy, XtNscreen, ssi->screen, XtNvisual, ssi->current_visual, XtNdepth, visual_depth (ssi->screen, ssi->current_visual), NULL); } /* Examine all of the display's screens, and populate the `saver_screen_info' structures. Make sure this is called after hack_environment() sets $PATH. */ static void initialize_per_screen_info (saver_info *si, Widget toplevel_shell) { int i; update_screen_layout (si); /* Check to see whether fading is ever possible -- if any of the screens on the display has a PseudoColor visual, then fading can work (on at least some screens.) If no screen has a PseudoColor visual, then don't bother ever trying to fade, because it will just cause a delay without causing any visible effect. */ for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (has_writable_cells (ssi->screen, ssi->current_visual) || get_visual (ssi->screen, "PseudoColor", True, False) || get_visual (ssi->screen, "GrayScale", True, False)) { si->fading_possible_p = True; break; } } #ifdef HAVE_XF86VMODE_GAMMA si->fading_possible_p = True; /* if we can gamma fade, go for it */ #endif } /* If any server extensions have been requested, try and initialize them. Issue warnings if requests can't be honored. */ static void initialize_server_extensions (saver_info *si) { saver_preferences *p = &si->prefs; Bool server_has_xidle_extension_p = False; Bool server_has_sgi_saver_extension_p = False; Bool server_has_mit_saver_extension_p = False; Bool system_has_proc_interrupts_p = False; Bool server_has_xinput_extension_p = False; const char *piwhy = 0; si->using_xidle_extension = p->use_xidle_extension; si->using_sgi_saver_extension = p->use_sgi_saver_extension; si->using_mit_saver_extension = p->use_mit_saver_extension; si->using_proc_interrupts = p->use_proc_interrupts; si->using_xinput_extension = p->use_xinput_extension; #ifdef HAVE_XIDLE_EXTENSION { int ev, er; server_has_xidle_extension_p = XidleQueryExtension (si->dpy, &ev, &er); } #endif #ifdef HAVE_SGI_SAVER_EXTENSION server_has_sgi_saver_extension_p = XScreenSaverQueryExtension (si->dpy, &si->sgi_saver_ext_event_number, &si->sgi_saver_ext_error_number); #endif #ifdef HAVE_MIT_SAVER_EXTENSION server_has_mit_saver_extension_p = XScreenSaverQueryExtension (si->dpy, &si->mit_saver_ext_event_number, &si->mit_saver_ext_error_number); #endif #ifdef HAVE_PROC_INTERRUPTS system_has_proc_interrupts_p = query_proc_interrupts_available (si, &piwhy); #endif #ifdef HAVE_XINPUT server_has_xinput_extension_p = query_xinput_extension (si); #endif if (!server_has_xidle_extension_p) si->using_xidle_extension = False; else if (p->verbose_p) { if (si->using_xidle_extension) fprintf (stderr, "%s: using XIDLE extension.\n", blurb()); else fprintf (stderr, "%s: not using server's XIDLE extension.\n", blurb()); } if (!server_has_sgi_saver_extension_p) si->using_sgi_saver_extension = False; else if (p->verbose_p) { if (si->using_sgi_saver_extension) fprintf (stderr, "%s: using SGI SCREEN_SAVER extension.\n", blurb()); else fprintf (stderr, "%s: not using server's SGI SCREEN_SAVER extension.\n", blurb()); } if (!server_has_mit_saver_extension_p) si->using_mit_saver_extension = False; else if (p->verbose_p) { if (si->using_mit_saver_extension) fprintf (stderr, "%s: using lame MIT-SCREEN-SAVER extension.\n", blurb()); else fprintf (stderr, "%s: not using server's lame MIT-SCREEN-SAVER extension.\n", blurb()); } #ifdef HAVE_RANDR if (XRRQueryExtension (si->dpy, &si->randr_event_number, &si->randr_error_number)) { int nscreens = ScreenCount (si->dpy); /* number of *real* screens */ int i; si->using_randr_extension = TRUE; if (p->verbose_p) fprintf (stderr, "%s: selecting RANDR events\n", blurb()); for (i = 0; i < nscreens; i++) # ifdef RRScreenChangeNotifyMask /* randr.h 1.5, 2002/09/29 */ XRRSelectInput (si->dpy, RootWindow (si->dpy, i), RRScreenChangeNotifyMask); # else /* !RRScreenChangeNotifyMask */ /* Xrandr.h 1.4, 2001/06/07 */ XRRScreenChangeSelectInput (si->dpy, RootWindow (si->dpy, i), True); # endif /* !RRScreenChangeNotifyMask */ } # endif /* HAVE_RANDR */ #ifdef HAVE_XINPUT if (!server_has_xinput_extension_p) si->using_xinput_extension = False; else { if (si->using_xinput_extension) init_xinput_extension(si); if (p->verbose_p) { if (si->using_xinput_extension) fprintf (stderr, "%s: selecting events from %d XInputExtension devices.\n", blurb(), si->num_xinput_devices); else fprintf (stderr, "%s: not using XInputExtension.\n", blurb()); } } #endif if (!system_has_proc_interrupts_p) { si->using_proc_interrupts = False; if (p->verbose_p && piwhy) fprintf (stderr, "%s: not using /proc/interrupts: %s.\n", blurb(), piwhy); } else if (p->verbose_p) { if (si->using_proc_interrupts) fprintf (stderr, "%s: consulting /proc/interrupts for keyboard activity.\n", blurb()); else fprintf (stderr, "%s: not consulting /proc/interrupts for keyboard activity.\n", blurb()); } } #ifdef DEBUG_MULTISCREEN static void debug_multiscreen_timer (XtPointer closure, XtIntervalId *id) { saver_info *si = (saver_info *) closure; saver_preferences *p = &si->prefs; if (update_screen_layout (si)) { if (p->verbose_p) { fprintf (stderr, "%s: new layout:\n", blurb()); describe_monitor_layout (si); } resize_screensaver_window (si); } XtAppAddTimeOut (si->app, 1000*4, debug_multiscreen_timer, (XtPointer) si); } #endif /* DEBUG_MULTISCREEN */ /* For the case where we aren't using an server extensions, select user events on all the existing windows, and launch timers to select events on newly-created windows as well. If a server extension is being used, this does nothing. */ static void select_events (saver_info *si) { saver_preferences *p = &si->prefs; int i; if (si->using_xidle_extension || si->using_mit_saver_extension || si->using_sgi_saver_extension) return; if (p->initial_delay) { if (p->verbose_p) { fprintf (stderr, "%s: waiting for %d second%s...", blurb(), (int) p->initial_delay/1000, (p->initial_delay == 1000 ? "" : "s")); fflush (stderr); fflush (stdout); } usleep (p->initial_delay); if (p->verbose_p) fprintf (stderr, " done.\n"); } if (p->verbose_p) { fprintf (stderr, "%s: selecting events on extant windows...", blurb()); fflush (stderr); fflush (stdout); } /* Select events on the root windows of every screen. This also selects for window creation events, so that new subwindows will be noticed. */ for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (ssi->real_screen_p) start_notice_events_timer (si, RootWindowOfScreen (si->screens[i].screen), False); } if (p->verbose_p) fprintf (stderr, " done.\n"); # ifdef DEBUG_MULTISCREEN if (p->debug_p) debug_multiscreen_timer ((XtPointer) si, 0); # endif } void maybe_reload_init_file (saver_info *si) { saver_preferences *p = &si->prefs; if (init_file_changed_p (p)) { if (p->verbose_p) fprintf (stderr, "%s: file \"%s\" has changed, reloading.\n", blurb(), init_file_name()); load_init_file (si->dpy, p); /* If a server extension is in use, and p->timeout has changed, we need to inform the server of the new timeout. */ disable_builtin_screensaver (si, False); /* If the DPMS settings in the init file have changed, change the settings on the server to match. */ sync_server_dpms_settings (si->dpy, (p->dpms_enabled_p && p->mode != DONT_BLANK), p->dpms_quickoff_p, p->dpms_standby / 1000, p->dpms_suspend / 1000, p->dpms_off / 1000, False); } } /* Loop forever: - wait until the user is idle; - blank the screen; - wait until the user is active; - unblank the screen; - repeat. */ static void main_loop (saver_info *si) { saver_preferences *p = &si->prefs; Bool ok_to_unblank; int i; while (1) { Bool was_locked = False; if (p->verbose_p) fprintf (stderr, "%s: awaiting idleness.\n", blurb()); check_for_leaks ("unblanked A"); sleep_until_idle (si, True); check_for_leaks ("unblanked B"); if (p->verbose_p) { if (si->demoing_p) fprintf (stderr, "%s: demoing %d at %s.\n", blurb(), si->selection_mode, timestring()); else fprintf (stderr, "%s: blanking screen at %s.\n", blurb(), timestring()); } maybe_reload_init_file (si); if (p->mode == DONT_BLANK) { if (p->verbose_p) fprintf (stderr, "%s: idle with blanking disabled at %s.\n", blurb(), timestring()); /* Go around the loop and wait for the next bout of idleness, or for the init file to change, or for a remote command to come in, or something. But, if locked_p is true, go ahead. This can only happen if we're in "disabled" mode but a "lock" clientmessage came in: in that case, we should go ahead and blank/lock the screen. */ if (!si->locked_p) continue; } /* Since we're about to blank the screen, kill the de-race timer, if any. It might still be running if we have unblanked and then re-blanked in a short period (e.g., when using the "next" button in xscreensaver-demo.) */ if (si->de_race_id) { if (p->verbose_p) fprintf (stderr, "%s: stopping de-race timer (%d remaining.)\n", blurb(), si->de_race_ticks); XtRemoveTimeOut (si->de_race_id); si->de_race_id = 0; } /* Now, try to blank. */ if (! blank_screen (si)) { /* We were unable to grab either the keyboard or mouse. This means we did not (and must not) blank the screen. If we were to blank the screen while some other program is holding both the mouse and keyboard grabbed, then we would never be able to un-blank it! We would never see any events, and the display would be wedged. In particular, without that keyboard grab, we will be unable to ever read keypresses on the unlock dialog. You can't unlock if you can't type your password. So, just go around the loop again and wait for the next bout of idleness. (If the user remains idle, we will next try to blank the screen again in no more than 60 seconds.) */ Time retry = 60 * 1000; if (p->timeout < retry) retry = p->timeout; if (p->debug_p) { fprintf (stderr, "%s: DEBUG MODE: unable to grab -- BLANKING ANYWAY.\n", blurb()); } else { fprintf (stderr, "%s: unable to grab keyboard or mouse! Blanking aborted.\n", blurb()); /* Since we were unable to blank, clearly we're not locked, but we might have been prematurely marked as locked by the LOCK ClientMessage. */ if (si->locked_p) set_locked_p (si, False); schedule_wakeup_event (si, retry, p->debug_p); continue; } } for (i = 0; i < si->nscreens; i++) kill_screenhack (&si->screens[i]); raise_window (si, True, True, False); if (si->throttled_p) fprintf (stderr, "%s: not launching hack (throttled.)\n", blurb()); else for (i = 0; i < si->nscreens; i++) spawn_screenhack (&si->screens[i]); /* If we are blanking only, optionally power down monitor right now. */ if (p->mode == BLANK_ONLY && p->dpms_enabled_p && p->dpms_quickoff_p) { sync_server_dpms_settings (si->dpy, True, p->dpms_quickoff_p, p->dpms_standby / 1000, p->dpms_suspend / 1000, p->dpms_off / 1000, False); monitor_power_on (si, False); } /* Don't start the cycle timer in demo mode. */ if (!si->demoing_p && p->cycle) si->cycle_id = XtAppAddTimeOut (si->app, (si->selection_mode /* see comment in cycle_timer() */ ? 1000 * 60 * 60 : p->cycle), cycle_timer, (XtPointer) si); #ifndef NO_LOCKING /* Maybe start locking the screen. */ { Time lock_timeout = p->lock_timeout; if (si->emergency_lock_p && p->lock_p && lock_timeout) { int secs = p->lock_timeout / 1000; if (p->verbose_p) fprintf (stderr, "%s: locking now, instead of waiting for %d:%02d:%02d.\n", blurb(), (secs / (60 * 60)), ((secs / 60) % 60), (secs % 60)); lock_timeout = 0; } si->emergency_lock_p = False; if (!si->demoing_p && /* if not going into demo mode */ p->lock_p && /* and locking is enabled */ !si->locking_disabled_p && /* and locking is possible */ lock_timeout == 0) /* and locking is not timer-deferred */ set_locked_p (si, True); /* then lock right now. */ /* locked_p might be true already because of the above, or because of the LOCK ClientMessage. But if not, and if we're supposed to lock after some time, set up a timer to do so. */ if (p->lock_p && !si->locked_p && lock_timeout > 0) si->lock_id = XtAppAddTimeOut (si->app, lock_timeout, activate_lock_timer, (XtPointer) si); } #endif /* !NO_LOCKING */ ok_to_unblank = True; do { check_for_leaks ("blanked A"); sleep_until_idle (si, False); /* until not idle */ check_for_leaks ("blanked B"); maybe_reload_init_file (si); #ifndef NO_LOCKING /* Maybe unlock the screen. */ if (si->locked_p) { saver_screen_info *ssi = si->default_screen; if (si->locking_disabled_p) abort (); was_locked = True; si->dbox_up_p = True; for (i = 0; i < si->nscreens; i++) suspend_screenhack (&si->screens[i], True); /* suspend */ XUndefineCursor (si->dpy, ssi->screensaver_window); ok_to_unblank = unlock_p (si); si->dbox_up_p = False; XDefineCursor (si->dpy, ssi->screensaver_window, ssi->cursor); for (i = 0; i < si->nscreens; i++) suspend_screenhack (&si->screens[i], False); /* resume */ if (!ok_to_unblank && !screenhack_running_p (si)) { /* If the lock dialog has been dismissed and we're not about to unlock the screen, and there is currently no hack running, then launch one. (There might be no hack running if DPMS had kicked in. But DPMS is off now, so bring back the hack) */ if (si->cycle_id) XtRemoveTimeOut (si->cycle_id); si->cycle_id = 0; cycle_timer ((XtPointer) si, 0); } } #endif /* !NO_LOCKING */ } while (!ok_to_unblank); if (p->verbose_p) fprintf (stderr, "%s: unblanking screen at %s.\n", blurb(), timestring ()); /* Kill before unblanking, to stop drawing as soon as possible. */ for (i = 0; i < si->nscreens; i++) kill_screenhack (&si->screens[i]); unblank_screen (si); set_locked_p (si, False); si->emergency_lock_p = False; si->demoing_p = 0; si->selection_mode = 0; /* If we're throttled, and the user has explicitly unlocked the screen, then unthrottle. If we weren't locked, then don't unthrottle automatically, because someone might have just bumped the desk... */ if (was_locked) { if (si->throttled_p && p->verbose_p) fprintf (stderr, "%s: unthrottled.\n", blurb()); si->throttled_p = False; } if (si->cycle_id) { XtRemoveTimeOut (si->cycle_id); si->cycle_id = 0; } if (si->lock_id) { XtRemoveTimeOut (si->lock_id); si->lock_id = 0; } /* Since we're unblanked now, break race conditions and make sure we stay that way (see comment in timers.c.) */ if (! si->de_race_id) de_race_timer ((XtPointer) si, 0); } } static void analyze_display (saver_info *si); static void fix_fds (void); int main (int argc, char **argv) { Widget shell; saver_info the_si; saver_info *si = &the_si; saver_preferences *p = &si->prefs; struct passwd *spasswd; int i; /* It turns out that if we do setlocale (LC_ALL, "") here, people running in Japanese locales get font craziness on the password dialog, presumably because it is displaying Japanese characters in a non-Japanese font. However, if we don't call setlocale() at all, then XLookupString() never returns multi-byte UTF-8 characters when people type non-Latin1 characters on the keyboard. The current theory (and at this point, I'm really guessing!) is that using LC_CTYPE instead of LC_ALL will make XLookupString() behave usefully, without having the side-effect of screwing up the fonts on the unlock dialog. See https://bugs.launchpad.net/ubuntu/+source/xscreensaver/+bug/671923 from comment #20 onward. -- jwz, 24-Sep-2011 */ #ifdef ENABLE_NLS if (!setlocale (LC_CTYPE, "")) fprintf (stderr, "%s: warning: could not set default locale\n", progname); bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); textdomain (GETTEXT_PACKAGE); #endif /* ENABLE_NLS */ memset(si, 0, sizeof(*si)); global_si_kludge = si; /* I hate C so much... */ fix_fds(); # undef ya_rand_init ya_rand_init (0); save_argv (argc, argv); set_version_string (si, &argc, argv); privileged_initialization (si, &argc, argv); hack_environment (si); spasswd = getpwuid(getuid()); if (!spasswd) { fprintf(stderr, "Could not figure out who the current user is!\n"); return 1; } si->user = strdup(spasswd->pw_name ? spasswd->pw_name : "(unknown)"); # ifndef NO_LOCKING si->unlock_cb = gui_auth_conv; si->auth_finished_cb = auth_finished_cb; # endif /* !NO_LOCKING */ shell = connect_to_server (si, &argc, argv); process_command_line (si, &argc, argv); stderr_log_file (si); print_banner (si); load_init_file(si->dpy, p); /* must be before initialize_per_screen_info() */ blurb_timestamp_p = p->timestamp_p; /* kludge */ initialize_per_screen_info (si, shell); /* also sets si->fading_possible_p */ /* We can only issue this warning now. */ if (p->verbose_p && !si->fading_possible_p && (p->fade_p || p->unfade_p)) fprintf (stderr, "%s: there are no PseudoColor or GrayScale visuals.\n" "%s: ignoring the request for fading/unfading.\n", blurb(), blurb()); for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (ssi->real_screen_p) if (ensure_no_screensaver_running (si->dpy, si->screens[i].screen)) exit (1); } lock_initialization (si, &argc, argv); print_lock_failure_banner (si); if (p->xsync_p) XSynchronize (si->dpy, True); if (p->verbose_p) analyze_display (si); initialize_server_extensions (si); si->blank_time = time ((time_t *) 0); /* must be before ..._window */ initialize_screensaver_window (si); select_events (si); init_sigchld (); disable_builtin_screensaver (si, True); sync_server_dpms_settings (si->dpy, (p->dpms_enabled_p && p->mode != DONT_BLANK), p->dpms_quickoff_p, p->dpms_standby / 1000, p->dpms_suspend / 1000, p->dpms_off / 1000, False); initialize_stderr (si); handle_signals (si); make_splash_dialog (si); main_loop (si); /* doesn't return */ return 0; } static void fix_fds (void) { /* Bad Things Happen if stdin, stdout, and stderr have been closed (as by the `sh incantation "xscreensaver >&- 2>&-"). When you do that, the X connection gets allocated to one of these fds, and then some random library writes to stderr, and random bits get stuffed down the X pipe, causing "Xlib: sequence lost" errors. So, we cause the first three file descriptors to be open to /dev/null if they aren't open to something else already. This must be done before any other files are opened (or the closing of that other file will again free up one of the "magic" first three FDs.) We do this by opening /dev/null three times, and then closing those fds, *unless* any of them got allocated as #0, #1, or #2, in which case we leave them open. Gag. Really, this crap is technically required of *every* X program, if you want it to be robust in the face of "2>&-". */ int fd0 = open ("/dev/null", O_RDWR); int fd1 = open ("/dev/null", O_RDWR); int fd2 = open ("/dev/null", O_RDWR); if (fd0 > 2) close (fd0); if (fd1 > 2) close (fd1); if (fd2 > 2) close (fd2); } /* Processing ClientMessage events. */ static Bool error_handler_hit_p = False; static int ignore_all_errors_ehandler (Display *dpy, XErrorEvent *error) { error_handler_hit_p = True; return 0; } /* Sometimes some systems send us ClientMessage events with bogus atoms in them. We only look up the atom names for printing warning messages, so don't bomb out when it happens... */ static char * XGetAtomName_safe (Display *dpy, Atom atom) { char *result; XErrorHandler old_handler; if (!atom) return 0; XSync (dpy, False); error_handler_hit_p = False; old_handler = XSetErrorHandler (ignore_all_errors_ehandler); result = XGetAtomName (dpy, atom); XSync (dpy, False); XSetErrorHandler (old_handler); XSync (dpy, False); if (error_handler_hit_p) result = 0; if (result) return result; else { char buf[100]; sprintf (buf, "<>", (unsigned int) atom); return strdup (buf); } } static void clientmessage_response (saver_info *si, Window w, Bool error, const char *stderr_msg, const char *protocol_msg) { char *proto; int L; saver_preferences *p = &si->prefs; XErrorHandler old_handler; if (error || p->verbose_p) fprintf (stderr, "%s: %s\n", blurb(), stderr_msg); L = strlen(protocol_msg); proto = (char *) malloc (L + 2); proto[0] = (error ? '-' : '+'); strcpy (proto+1, protocol_msg); L++; /* Ignore all X errors while sending a response to a ClientMessage. Pretty much the only way we could get an error here is if the window we're trying to send the reply on has been deleted, in which case, the sender of the ClientMessage won't see our response anyway. */ XSync (si->dpy, False); error_handler_hit_p = False; old_handler = XSetErrorHandler (ignore_all_errors_ehandler); XChangeProperty (si->dpy, w, XA_SCREENSAVER_RESPONSE, XA_STRING, 8, PropModeReplace, (unsigned char *) proto, L); XSync (si->dpy, False); XSetErrorHandler (old_handler); XSync (si->dpy, False); free (proto); } static void bogus_clientmessage_warning (saver_info *si, XEvent *event) { #if 0 /* Oh, fuck it. GNOME likes to spew random ClientMessages at us all the time. This is presumably indicative of an error in the sender of that ClientMessage: if we're getting it and ignoring it, then it's not reaching the intended recipient. But people complain to me about this all the time ("waaah! xscreensaver is printing to it's stderr and that gets my panties all in a bunch!") And I'm sick of hearing about it. So we'll just ignore these messages and let GNOME go right ahead and continue to stumble along in its malfunction. */ saver_preferences *p = &si->prefs; char *str = XGetAtomName_safe (si->dpy, event->xclient.message_type); Window w = event->xclient.window; char wdesc[255]; int screen = 0; Bool root_p = False; *wdesc = 0; for (screen = 0; screen < si->nscreens; screen++) if (w == si->screens[screen].screensaver_window) { strcpy (wdesc, "xscreensaver"); break; } else if (w == RootWindow (si->dpy, screen)) { strcpy (wdesc, "root"); root_p = True; break; } /* If this ClientMessage was sent to the real root window instead of to the xscreensaver window, then it might be intended for someone else who is listening on the root window (e.g., the window manager). So only print the warning if: we are in debug mode; or if the bogus message was actually sent to one of the xscreensaver-created windows. */ if (root_p && !p->debug_p) return; if (!*wdesc) { XErrorHandler old_handler; XClassHint hint; XWindowAttributes xgwa; memset (&hint, 0, sizeof(hint)); memset (&xgwa, 0, sizeof(xgwa)); XSync (si->dpy, False); old_handler = XSetErrorHandler (ignore_all_errors_ehandler); XGetClassHint (si->dpy, w, &hint); XGetWindowAttributes (si->dpy, w, &xgwa); XSync (si->dpy, False); XSetErrorHandler (old_handler); XSync (si->dpy, False); screen = (xgwa.screen ? screen_number (xgwa.screen) : -1); sprintf (wdesc, "%.20s / %.20s", (hint.res_name ? hint.res_name : "(null)"), (hint.res_class ? hint.res_class : "(null)")); if (hint.res_name) XFree (hint.res_name); if (hint.res_class) XFree (hint.res_class); } fprintf (stderr, "%s: %d: unrecognised ClientMessage \"%s\" received\n", blurb(), screen, (str ? str : "(null)")); fprintf (stderr, "%s: %d: for window 0x%lx (%s)\n", blurb(), screen, (unsigned long) w, wdesc); if (str) XFree (str); #endif /* 0 */ } Bool handle_clientmessage (saver_info *si, XEvent *event, Bool until_idle_p) { saver_preferences *p = &si->prefs; Atom type = 0; Window window = event->xclient.window; /* Preferences might affect our handling of client messages. */ maybe_reload_init_file (si); if (event->xclient.message_type != XA_SCREENSAVER || event->xclient.format != 32) { bogus_clientmessage_warning (si, event); return False; } type = event->xclient.data.l[0]; if (type == XA_ACTIVATE) { if (until_idle_p) { if (p->mode == DONT_BLANK) { clientmessage_response(si, window, True, "ACTIVATE ClientMessage received in DONT_BLANK mode.", "screen blanking is currently disabled."); return False; } clientmessage_response(si, window, False, "ACTIVATE ClientMessage received.", "activating."); si->selection_mode = 0; si->demoing_p = False; if (si->throttled_p && p->verbose_p) fprintf (stderr, "%s: unthrottled.\n", blurb()); si->throttled_p = False; if (si->using_mit_saver_extension || si->using_sgi_saver_extension) { XForceScreenSaver (si->dpy, ScreenSaverActive); return False; } else { return True; } } clientmessage_response(si, window, True, "ClientMessage ACTIVATE received while already active.", "already active."); } else if (type == XA_DEACTIVATE) { # if 0 /* When -deactivate is received while locked, pop up the dialog box instead of just ignoring it. Some people depend on this behavior to be able to unlock by using e.g. a fingerprint reader without also having to click the mouse first. */ if (si->locked_p) { clientmessage_response(si, window, False, "DEACTIVATE ClientMessage received while locked: ignored.", "screen is locked."); } else # endif /* 0 */ { if (! until_idle_p) { if (si->throttled_p && p->verbose_p) fprintf (stderr, "%s: unthrottled.\n", blurb()); si->throttled_p = False; clientmessage_response(si, window, False, "DEACTIVATE ClientMessage received.", "deactivating."); if (si->using_mit_saver_extension || si->using_sgi_saver_extension) { XForceScreenSaver (si->dpy, ScreenSaverReset); return False; } else { return True; } } clientmessage_response(si, window, False, "ClientMessage DEACTIVATE received while inactive: " "resetting idle timer.", "not active: idle timer reset."); reset_timers (si); } } else if (type == XA_CYCLE) { if (! until_idle_p) { clientmessage_response(si, window, False, "CYCLE ClientMessage received.", "cycling."); si->selection_mode = 0; /* 0 means randomize when its time. */ si->demoing_p = False; if (si->throttled_p && p->verbose_p) fprintf (stderr, "%s: unthrottled.\n", blurb()); si->throttled_p = False; if (si->cycle_id) XtRemoveTimeOut (si->cycle_id); si->cycle_id = 0; cycle_timer ((XtPointer) si, 0); return False; } clientmessage_response(si, window, True, "ClientMessage CYCLE received while inactive.", "not active."); } else if (type == XA_NEXT || type == XA_PREV) { clientmessage_response(si, window, False, (type == XA_NEXT ? "NEXT ClientMessage received." : "PREV ClientMessage received."), "cycling."); si->selection_mode = (type == XA_NEXT ? -1 : -2); si->demoing_p = False; if (si->throttled_p && p->verbose_p) fprintf (stderr, "%s: unthrottled.\n", blurb()); si->throttled_p = False; if (! until_idle_p) { if (si->cycle_id) XtRemoveTimeOut (si->cycle_id); si->cycle_id = 0; cycle_timer ((XtPointer) si, 0); } else return True; } else if (type == XA_SELECT) { char buf [255]; char buf2 [255]; long which = event->xclient.data.l[1]; if (p->mode == DONT_BLANK) { clientmessage_response(si, window, True, "SELECT ClientMessage received in DONT_BLANK mode.", "screen blanking is currently disabled."); return False; } sprintf (buf, "SELECT %ld ClientMessage received.", which); sprintf (buf2, "activating (%ld).", which); clientmessage_response (si, window, False, buf, buf2); if (which < 0) which = 0; /* 0 == "random" */ si->selection_mode = which; si->demoing_p = False; if (si->throttled_p && p->verbose_p) fprintf (stderr, "%s: unthrottled.\n", blurb()); si->throttled_p = False; if (! until_idle_p) { if (si->cycle_id) XtRemoveTimeOut (si->cycle_id); si->cycle_id = 0; cycle_timer ((XtPointer) si, 0); } else return True; } else if (type == XA_EXIT) { /* Ignore EXIT message if the screen is locked. */ if (until_idle_p || !si->locked_p) { clientmessage_response (si, window, False, "EXIT ClientMessage received.", "exiting."); if (! until_idle_p) { int i; for (i = 0; i < si->nscreens; i++) kill_screenhack (&si->screens[i]); unblank_screen (si); XSync (si->dpy, False); } saver_exit (si, 0, 0); } else clientmessage_response (si, window, True, "EXIT ClientMessage received while locked.", "screen is locked."); } else if (type == XA_RESTART) { /* The RESTART message works whether the screensaver is active or not, unless the screen is locked, in which case it doesn't work. */ if (until_idle_p || !si->locked_p) { clientmessage_response (si, window, False, "RESTART ClientMessage received.", "restarting."); if (! until_idle_p) { int i; for (i = 0; i < si->nscreens; i++) kill_screenhack (&si->screens[i]); unblank_screen (si); XSync (si->dpy, False); } restart_process (si); /* does not return */ abort(); } else clientmessage_response (si, window, True, "RESTART ClientMessage received while locked.", "screen is locked."); } else if (type == XA_DEMO) { long arg = event->xclient.data.l[1]; Bool demo_one_hack_p = (arg == 5000); if (demo_one_hack_p) { if (until_idle_p) { long which = event->xclient.data.l[2]; char buf [255]; char buf2 [255]; sprintf (buf, "DEMO %ld ClientMessage received.", which); sprintf (buf2, "demoing (%ld).", which); clientmessage_response (si, window, False, buf, buf2); if (which < 0) which = 0; /* 0 == "random" */ si->selection_mode = which; si->demoing_p = True; if (si->throttled_p && p->verbose_p) fprintf (stderr, "%s: unthrottled.\n", blurb()); si->throttled_p = False; return True; } clientmessage_response (si, window, True, "DEMO ClientMessage received while active.", "already active."); } else { clientmessage_response (si, window, True, "obsolete form of DEMO ClientMessage.", "obsolete form of DEMO ClientMessage."); } } else if (type == XA_PREFS) { clientmessage_response (si, window, True, "the PREFS client-message is obsolete.", "the PREFS client-message is obsolete."); } else if (type == XA_LOCK) { #ifdef NO_LOCKING clientmessage_response (si, window, True, "not compiled with support for locking.", "locking not enabled."); #else /* !NO_LOCKING */ if (si->locking_disabled_p) clientmessage_response (si, window, True, "LOCK ClientMessage received, but locking is disabled.", "locking not enabled."); else if (si->locked_p) clientmessage_response (si, window, True, "LOCK ClientMessage received while already locked.", "already locked."); else { char buf [255]; char *response = (until_idle_p ? "activating and locking." : "locking."); sprintf (buf, "LOCK ClientMessage received; %s", response); clientmessage_response (si, window, False, buf, response); /* Note that this leaves things in a slightly inconsistent state: we are blanked but not locked. And blanking might actually fail if we can't get the grab. */ set_locked_p (si, True); /* Have to set the time or xscreensaver-command doesn't report the LOCK state change. */ si->blank_time = time ((time_t *) 0); si->selection_mode = 0; si->demoing_p = False; if (si->lock_id) /* we're doing it now, so lose the timeout */ { XtRemoveTimeOut (si->lock_id); si->lock_id = 0; } if (until_idle_p) { if (si->using_mit_saver_extension || si->using_sgi_saver_extension) { XForceScreenSaver (si->dpy, ScreenSaverActive); return False; } else { return True; } } } #endif /* !NO_LOCKING */ } else if (type == XA_THROTTLE) { /* The THROTTLE command is deprecated -- it predates the XDPMS extension. Instead of using -throttle, users should instead just power off the monitor (e.g., "xset dpms force off".) In a few minutes, xscreensaver will notice that the monitor is off, and cease running hacks. */ if (si->throttled_p) clientmessage_response (si, window, True, "THROTTLE ClientMessage received, but " "already throttled.", "already throttled."); else { char buf [255]; char *response = "throttled."; si->throttled_p = True; si->selection_mode = 0; si->demoing_p = False; sprintf (buf, "THROTTLE ClientMessage received; %s", response); clientmessage_response (si, window, False, buf, response); if (! until_idle_p) { if (si->cycle_id) XtRemoveTimeOut (si->cycle_id); si->cycle_id = 0; cycle_timer ((XtPointer) si, 0); } } } else if (type == XA_UNTHROTTLE) { if (! si->throttled_p) clientmessage_response (si, window, True, "UNTHROTTLE ClientMessage received, but " "not throttled.", "not throttled."); else { char buf [255]; char *response = "unthrottled."; si->throttled_p = False; si->selection_mode = 0; si->demoing_p = False; sprintf (buf, "UNTHROTTLE ClientMessage received; %s", response); clientmessage_response (si, window, False, buf, response); if (! until_idle_p) { if (si->cycle_id) XtRemoveTimeOut (si->cycle_id); si->cycle_id = 0; cycle_timer ((XtPointer) si, 0); } } } else { char buf [1024]; char *str; str = XGetAtomName_safe (si->dpy, type); if (str) { if (strlen (str) > 80) strcpy (str+70, "..."); sprintf (buf, "unrecognised screensaver ClientMessage %s received.", str); free (str); } else { sprintf (buf, "unrecognised screensaver ClientMessage 0x%x received.", (unsigned int) event->xclient.data.l[0]); } clientmessage_response (si, window, True, buf, buf); } return False; } /* Some random diagnostics printed in -verbose mode. */ static void analyze_display (saver_info *si) { int i, j; static struct { const char *name; const char *desc; Bool useful_p; Status (*version_fn) (Display *, int *majP, int *minP); } exts[] = { { "SCREEN_SAVER", /* underscore */ "SGI Screen-Saver", # ifdef HAVE_SGI_SAVER_EXTENSION True, 0 # else False, 0 # endif }, { "SCREEN-SAVER", /* dash */ "SGI Screen-Saver", # ifdef HAVE_SGI_SAVER_EXTENSION True, 0 # else False, 0 # endif }, { "MIT-SCREEN-SAVER", "MIT Screen-Saver", # ifdef HAVE_MIT_SAVER_EXTENSION True, XScreenSaverQueryVersion # else False, 0 # endif }, { "XIDLE", "XIdle", # ifdef HAVE_XIDLE_EXTENSION True, 0 # else False, 0 # endif }, { "SGI-VIDEO-CONTROL", "SGI Video-Control", # ifdef HAVE_SGI_VC_EXTENSION True, XSGIvcQueryVersion # else False, 0 # endif }, { "READDISPLAY", "SGI Read-Display", # ifdef HAVE_READ_DISPLAY_EXTENSION True, XReadDisplayQueryVersion # else False, 0 # endif }, { "MIT-SHM", "Shared Memory", # ifdef HAVE_XSHM_EXTENSION True, (Status (*) (Display*,int*,int*)) XShmQueryVersion /* 4 args */ # else False, 0 # endif }, { "DOUBLE-BUFFER", "Double-Buffering", # ifdef HAVE_DOUBLE_BUFFER_EXTENSION True, XdbeQueryExtension # else False, 0 # endif }, { "DPMS", "Power Management", # ifdef HAVE_DPMS_EXTENSION True, DPMSGetVersion # else False, 0 # endif }, { "GLX", "GLX", # ifdef HAVE_GL True, 0 # else False, 0 # endif }, { "XFree86-VidModeExtension", "XF86 Video-Mode", # ifdef HAVE_XF86VMODE True, XF86VidModeQueryVersion # else False, 0 # endif }, { "XC-VidModeExtension", "XC Video-Mode", # ifdef HAVE_XF86VMODE True, XF86VidModeQueryVersion # else False, 0 # endif }, { "XFree86-MISC", "XF86 Misc", # ifdef HAVE_XF86MISCSETGRABKEYSSTATE True, XF86MiscQueryVersion # else False, 0 # endif }, { "XC-MISC", "XC Misc", # ifdef HAVE_XF86MISCSETGRABKEYSSTATE True, XF86MiscQueryVersion # else False, 0 # endif }, { "XINERAMA", "Xinerama", # ifdef HAVE_XINERAMA True, XineramaQueryVersion # else False, 0 # endif }, { "RANDR", "Resize-and-Rotate", # ifdef HAVE_RANDR True, XRRQueryVersion # else False, 0 # endif }, { "DRI", "DRI", True, 0 }, { "NV-CONTROL", "NVidia", True, 0 }, { "NV-GLX", "NVidia GLX", True, 0 }, { "Apple-DRI", "Apple-DRI (XDarwin)", True, 0 }, { "XInputExtension", "XInput", True, 0 }, }; fprintf (stderr, "%s: running on display \"%s\"\n", blurb(), DisplayString(si->dpy)); fprintf (stderr, "%s: vendor is %s, %d.\n", blurb(), ServerVendor(si->dpy), VendorRelease(si->dpy)); fprintf (stderr, "%s: useful extensions:\n", blurb()); for (i = 0; i < countof(exts); i++) { int op = 0, event = 0, error = 0; char buf [255]; int maj = 0, min = 0; int dummy1, dummy2, dummy3; int j; /* Most of the extension version functions take 3 args, writing results into args 2 and 3, but some take more. We only ever care about the first two results, but we pass in three extra pointers just in case. */ Status (*version_fn_2) (Display*,int*,int*,int*,int*,int*) = (Status (*) (Display*,int*,int*,int*,int*,int*)) exts[i].version_fn; if (!XQueryExtension (si->dpy, exts[i].name, &op, &event, &error)) continue; sprintf (buf, "%s: ", blurb()); j = strlen (buf); strcat (buf, exts[i].desc); if (!version_fn_2) ; else if (version_fn_2 (si->dpy, &maj, &min, &dummy1, &dummy2, &dummy3)) sprintf (buf+strlen(buf), " (%d.%d)", maj, min); else strcat (buf, " (unavailable)"); if (!exts[i].useful_p) strcat (buf, " (disabled at compile time)"); fprintf (stderr, "%s\n", buf); } for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; unsigned long colormapped_depths = 0; unsigned long non_mapped_depths = 0; XVisualInfo vi_in, *vi_out; int out_count; if (!ssi->real_screen_p) continue; vi_in.screen = ssi->real_screen_number; vi_out = XGetVisualInfo (si->dpy, VisualScreenMask, &vi_in, &out_count); if (!vi_out) continue; for (j = 0; j < out_count; j++) { if (vi_out[j].depth >= 32) continue; if (vi_out[j].class == PseudoColor) colormapped_depths |= (1 << vi_out[j].depth); else non_mapped_depths |= (1 << vi_out[j].depth); } XFree ((char *) vi_out); if (colormapped_depths) { fprintf (stderr, "%s: screen %d colormapped depths:", blurb(), ssi->real_screen_number); for (j = 0; j < 32; j++) if (colormapped_depths & (1 << j)) fprintf (stderr, " %d", j); fprintf (stderr, ".\n"); } if (non_mapped_depths) { fprintf (stderr, "%s: screen %d non-colormapped depths:", blurb(), ssi->real_screen_number); for (j = 0; j < 32; j++) if (non_mapped_depths & (1 << j)) fprintf (stderr, " %d", j); fprintf (stderr, ".\n"); } } describe_monitor_layout (si); } Bool display_is_on_console_p (saver_info *si) { Bool not_on_console = True; char *dpystr = DisplayString (si->dpy); char *tail = (char *) strchr (dpystr, ':'); if (! tail || strncmp (tail, ":0", 2)) not_on_console = True; else { char dpyname[255], localname[255]; strncpy (dpyname, dpystr, tail-dpystr); dpyname [tail-dpystr] = 0; if (!*dpyname || !strcmp(dpyname, "unix") || !strcmp(dpyname, "localhost")) not_on_console = False; else if (gethostname (localname, sizeof (localname))) not_on_console = True; /* can't find hostname? */ else if (!strncmp (dpyname, "/tmp/launch-", 12)) /* MacOS X launchd */ not_on_console = False; else { /* We have to call gethostbyname() on the result of gethostname() because the two aren't guarenteed to be the same name for the same host: on some losing systems, one is a FQDN and the other is not. Here in the wide wonderful world of Unix it's rocket science to obtain the local hostname in a portable fashion. And don't forget, gethostbyname() reuses the structure it returns, so we have to copy the fucker before calling it again. Thank you master, may I have another. */ struct hostent *h = gethostbyname (dpyname); if (!h) not_on_console = True; else { char hn [255]; struct hostent *l; strcpy (hn, h->h_name); l = gethostbyname (localname); not_on_console = (!l || !!(strcmp (l->h_name, hn))); } } } return !not_on_console; } /* Do a little bit of heap introspection... */ void check_for_leaks (const char *where) { #if defined(HAVE_SBRK) && defined(LEAK_PARANOIA) static unsigned long last_brk = 0; int b = (unsigned long) sbrk(0); if (last_brk && last_brk < b) fprintf (stderr, "%s: %s: brk grew by %luK.\n", blurb(), where, (((b - last_brk) + 1023) / 1024)); last_brk = b; #endif /* HAVE_SBRK */ } xscreensaver-5.34/driver/windows.c000644 000767 000767 00000162250 12612750417 017025 0ustar00jwzjwz000000 000000 /* windows.c --- turning the screen black; dealing with visuals, virtual roots. * xscreensaver, Copyright (c) 1991-2014 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifdef VMS # include /* for getpid() */ # include "vms-gtod.h" /* for gettimeofday() */ #endif /* VMS */ #ifndef VMS # include /* for getpwuid() */ #else /* VMS */ # include "vms-pwd.h" #endif /* VMS */ #ifdef HAVE_UNAME # include /* for uname() */ #endif /* HAVE_UNAME */ #include /* #include / * for CARD32 */ #include #include /* for XSetClassHint() */ #include #include /* for time() */ #include /* for the signal names */ #include #include /* You might think that to store an array of 32-bit quantities onto a server-side property, you would pass an array of 32-bit data quantities into XChangeProperty(). You would be wrong. You have to use an array of longs, even if long is 64 bits (using 32 of each 64.) */ typedef long PROP32; #ifdef HAVE_MIT_SAVER_EXTENSION # include #endif /* HAVE_MIT_SAVER_EXTENSION */ #ifdef HAVE_XF86VMODE # include #endif /* HAVE_XF86VMODE */ #ifdef HAVE_XINERAMA # include #endif /* HAVE_XINERAMA */ /* This file doesn't need the Xt headers, so stub these types out... */ #undef XtPointer #define XtAppContext void* #define XrmDatabase void* #define XtIntervalId void* #define XtPointer void* #define Widget void* #include "xscreensaver.h" #include "visual.h" #include "fade.h" extern int kill (pid_t, int); /* signal() is in sys/signal.h... */ Atom XA_VROOT, XA_XSETROOT_ID, XA_ESETROOT_PMAP_ID, XA_XROOTPMAP_ID; Atom XA_NET_WM_USER_TIME; Atom XA_SCREENSAVER, XA_SCREENSAVER_VERSION, XA_SCREENSAVER_ID; Atom XA_SCREENSAVER_STATUS; extern saver_info *global_si_kludge; /* I hate C so much... */ static void maybe_transfer_grabs (saver_screen_info *ssi, Window old_w, Window new_w, int new_screen); #define ALL_POINTER_EVENTS \ (ButtonPressMask | ButtonReleaseMask | EnterWindowMask | \ LeaveWindowMask | PointerMotionMask | PointerMotionHintMask | \ Button1MotionMask | Button2MotionMask | Button3MotionMask | \ Button4MotionMask | Button5MotionMask | ButtonMotionMask) static const char * grab_string(int status) { switch (status) { case GrabSuccess: return "GrabSuccess"; case AlreadyGrabbed: return "AlreadyGrabbed"; case GrabInvalidTime: return "GrabInvalidTime"; case GrabNotViewable: return "GrabNotViewable"; case GrabFrozen: return "GrabFrozen"; default: { static char foo[255]; sprintf(foo, "unknown status: %d", status); return foo; } } } static int grab_kbd(saver_info *si, Window w, int screen_no) { saver_preferences *p = &si->prefs; int status = XGrabKeyboard (si->dpy, w, True, /* I don't really understand Sync vs Async, but these seem to work... */ GrabModeSync, GrabModeAsync, CurrentTime); if (status == GrabSuccess) { si->keyboard_grab_window = w; si->keyboard_grab_screen = screen_no; } if (p->verbose_p) fprintf(stderr, "%s: %d: grabbing keyboard on 0x%lx... %s.\n", blurb(), screen_no, (unsigned long) w, grab_string(status)); return status; } static int grab_mouse (saver_info *si, Window w, Cursor cursor, int screen_no) { saver_preferences *p = &si->prefs; int status = XGrabPointer (si->dpy, w, True, ALL_POINTER_EVENTS, GrabModeAsync, GrabModeAsync, w, cursor, CurrentTime); if (status == GrabSuccess) { si->mouse_grab_window = w; si->mouse_grab_screen = screen_no; } if (p->verbose_p) fprintf(stderr, "%s: %d: grabbing mouse on 0x%lx... %s.\n", blurb(), screen_no, (unsigned long) w, grab_string(status)); return status; } static void ungrab_kbd(saver_info *si) { saver_preferences *p = &si->prefs; XUngrabKeyboard(si->dpy, CurrentTime); if (p->verbose_p) fprintf(stderr, "%s: %d: ungrabbing keyboard (was 0x%lx).\n", blurb(), si->keyboard_grab_screen, (unsigned long) si->keyboard_grab_window); si->keyboard_grab_window = 0; } static void ungrab_mouse(saver_info *si) { saver_preferences *p = &si->prefs; XUngrabPointer(si->dpy, CurrentTime); if (p->verbose_p) fprintf(stderr, "%s: %d: ungrabbing mouse (was 0x%lx).\n", blurb(), si->mouse_grab_screen, (unsigned long) si->mouse_grab_window); si->mouse_grab_window = 0; } /* Apparently there is this program called "rdesktop" which is a windows terminal server client for Unix. It would seem that this program holds the keyboard GRABBED the whole time it has focus! This is, of course, completely idiotic: the whole point of grabbing is to get events when you do *not* have focus, so grabbing *only when* you have focus is completely redundant -- unless your goal is to make xscreensaver not able to ever lock the screen when your program is running. If xscreensaver blanks while rdesktop still has a keyboard grab, then when we try to prompt for the password, we won't get the characters: they'll be typed into rdesktop. Perhaps rdesktop will release its keyboard grab if it loses focus? What the hell, let's give it a try. If we fail to grab the keyboard four times in a row, we forcibly set focus to "None" and try four more times. (We don't touch focus unless we're already having a hard time getting a grab.) */ static void nuke_focus (saver_info *si, int screen_no) { saver_preferences *p = &si->prefs; Window focus = 0; int rev = 0; XGetInputFocus (si->dpy, &focus, &rev); if (p->verbose_p) { char w[255], r[255]; if (focus == PointerRoot) strcpy (w, "PointerRoot"); else if (focus == None) strcpy (w, "None"); else sprintf (w, "0x%lx", (unsigned long) focus); if (rev == RevertToParent) strcpy (r, "RevertToParent"); else if (rev == RevertToPointerRoot) strcpy (r, "RevertToPointerRoot"); else if (rev == RevertToNone) strcpy (r, "RevertToNone"); else sprintf (r, "0x%x", rev); fprintf (stderr, "%s: %d: removing focus from %s / %s.\n", blurb(), screen_no, w, r); } XSetInputFocus (si->dpy, None, RevertToNone, CurrentTime); XSync (si->dpy, False); } static void ungrab_keyboard_and_mouse (saver_info *si) { ungrab_mouse (si); ungrab_kbd (si); } static Bool grab_keyboard_and_mouse (saver_info *si, Window window, Cursor cursor, int screen_no) { Status mstatus = 0, kstatus = 0; int i; int retries = 4; Bool focus_fuckus = False; AGAIN: for (i = 0; i < retries; i++) { XSync (si->dpy, False); kstatus = grab_kbd (si, window, screen_no); if (kstatus == GrabSuccess) break; /* else, wait a second and try to grab again. */ sleep (1); } if (kstatus != GrabSuccess) { fprintf (stderr, "%s: couldn't grab keyboard! (%s)\n", blurb(), grab_string(kstatus)); if (! focus_fuckus) { focus_fuckus = True; nuke_focus (si, screen_no); goto AGAIN; } } for (i = 0; i < retries; i++) { XSync (si->dpy, False); mstatus = grab_mouse (si, window, cursor, screen_no); if (mstatus == GrabSuccess) break; /* else, wait a second and try to grab again. */ sleep (1); } if (mstatus != GrabSuccess) fprintf (stderr, "%s: couldn't grab pointer! (%s)\n", blurb(), grab_string(mstatus)); /* When should we allow blanking to proceed? The current theory is that a keyboard grab is mandatory; a mouse grab is optional. - If we don't have a keyboard grab, then we won't be able to read a password to unlock, so the kbd grab is mandatory. (We can't conditionalize this on locked_p, because someone might run "xscreensaver-command -lock" at any time.) - If we don't have a mouse grab, then we might not see mouse clicks as a signal to unblank -- but we will still see kbd activity, so that's not a disaster. It has been suggested that we should allow blanking if locking is disabled, and we have a mouse grab but no keyboard grab (that is: kstatus != GrabSuccess && mstatus == GrabSuccess && si->locking_disabled_p) That would allow screen blanking (but not locking) while the gdm login screen had the keyboard grabbed, but one would have to use the mouse to unblank. Keyboard characters would go to the gdm login field without unblanking. I have not made this change because I'm not completely convinced it is a safe thing to do. */ if (kstatus != GrabSuccess) /* Do not blank without a kbd grab. */ { /* If we didn't get both grabs, release the one we did get. */ ungrab_keyboard_and_mouse (si); return False; } return True; /* Grab is good, go ahead and blank. */ } int move_mouse_grab (saver_info *si, Window to, Cursor cursor, int to_screen_no) { Window old = si->mouse_grab_window; if (old == 0) return grab_mouse (si, to, cursor, to_screen_no); else { saver_preferences *p = &si->prefs; int status; XSync (si->dpy, False); XGrabServer (si->dpy); /* ############ DANGER! */ XSync (si->dpy, False); if (p->verbose_p) fprintf(stderr, "%s: grabbing server...\n", blurb()); ungrab_mouse (si); status = grab_mouse (si, to, cursor, to_screen_no); if (status != GrabSuccess) /* Augh! */ { sleep (1); /* Note dramatic evil of sleeping with server grabbed. */ XSync (si->dpy, False); status = grab_mouse (si, to, cursor, to_screen_no); } if (status != GrabSuccess) /* Augh! Try to get the old one back... */ grab_mouse (si, old, cursor, to_screen_no); XUngrabServer (si->dpy); XSync (si->dpy, False); /* ###### (danger over) */ if (p->verbose_p) fprintf(stderr, "%s: ungrabbing server.\n", blurb()); return status; } } /* Prints an error message to stderr and returns True if there is another xscreensaver running already. Silently returns False otherwise. */ Bool ensure_no_screensaver_running (Display *dpy, Screen *screen) { Bool status = 0; int i; Window root = RootWindowOfScreen (screen); Window root2, parent, *kids; unsigned int nkids; XErrorHandler old_handler = XSetErrorHandler (BadWindow_ehandler); if (! XQueryTree (dpy, root, &root2, &parent, &kids, &nkids)) abort (); if (root != root2) abort (); if (parent) abort (); for (i = 0; i < nkids; i++) { Atom type; int format; unsigned long nitems, bytesafter; unsigned char *version; if (XGetWindowProperty (dpy, kids[i], XA_SCREENSAVER_VERSION, 0, 1, False, XA_STRING, &type, &format, &nitems, &bytesafter, &version) == Success && type != None) { unsigned char *id; if (XGetWindowProperty (dpy, kids[i], XA_SCREENSAVER_ID, 0, 512, False, XA_STRING, &type, &format, &nitems, &bytesafter, &id) != Success || type == None) id = (unsigned char *) "???"; fprintf (stderr, "%s: already running on display %s (window 0x%x)\n from process %s.\n", blurb(), DisplayString (dpy), (int) kids [i], (char *) id); status = True; } else if (XGetWindowProperty (dpy, kids[i], XA_WM_COMMAND, 0, 128, False, XA_STRING, &type, &format, &nitems, &bytesafter, &version) == Success && type != None && !strcmp ((char *) version, "gnome-screensaver")) { fprintf (stderr, "%s: \"%s\" is already running on display %s (window 0x%x)\n", blurb(), (char *) version, DisplayString (dpy), (int) kids [i]); status = True; break; } } if (kids) XFree ((char *) kids); XSync (dpy, False); XSetErrorHandler (old_handler); return status; } /* Virtual-root hackery */ #ifdef _VROOT_H_ ERROR! You must not include vroot.h in this file. #endif static void store_vroot_property (Display *dpy, Window win, Window value) { #if 0 if (p->verbose_p) fprintf (stderr, "%s: storing XA_VROOT = 0x%x (%s) = 0x%x (%s)\n", blurb(), win, (win == screensaver_window ? "ScreenSaver" : (win == real_vroot ? "VRoot" : (win == real_vroot_value ? "Vroot_value" : "???"))), value, (value == screensaver_window ? "ScreenSaver" : (value == real_vroot ? "VRoot" : (value == real_vroot_value ? "Vroot_value" : "???")))); #endif XChangeProperty (dpy, win, XA_VROOT, XA_WINDOW, 32, PropModeReplace, (unsigned char *) &value, 1); } static void remove_vroot_property (Display *dpy, Window win) { #if 0 if (p->verbose_p) fprintf (stderr, "%s: removing XA_VROOT from 0x%x (%s)\n", blurb(), win, (win == screensaver_window ? "ScreenSaver" : (win == real_vroot ? "VRoot" : (win == real_vroot_value ? "Vroot_value" : "???")))); #endif XDeleteProperty (dpy, win, XA_VROOT); } static Bool safe_XKillClient (Display *dpy, XID id); static void kill_xsetroot_data_1 (Display *dpy, Window window, Atom prop, const char *atom_name, Bool verbose_p) { Atom type; int format; unsigned long nitems, bytesafter; unsigned char *dataP = 0; /* If the user has been using xv or xsetroot as a screensaver (to display an image on the screensaver window, as a kind of slideshow) then the pixmap and its associated color cells have been put in RetainPermanent CloseDown mode. Since we're not destroying the xscreensaver window, but merely unmapping it, we need to free these resources or those colormap cells will stay allocated while the screensaver is off. (We could just delete the screensaver window and recreate it later, but that could cause other problems.) This code does an atomic read-and- delete of the _XSETROOT_ID property, and if it held a pixmap, then we cause the RetainPermanent resources of the client which created it (and which no longer exists) to be freed. Update: it seems that Gnome and KDE do this same trick, but with the properties "ESETROOT_PMAP_ID" and/or "_XROOTPMAP_ID" instead of "_XSETROOT_ID". So, we'll kill those too. */ if (XGetWindowProperty (dpy, window, prop, 0, 1, True, AnyPropertyType, &type, &format, &nitems, &bytesafter, &dataP) == Success && type != None) { Pixmap *pixP = (Pixmap *) dataP; if (pixP && *pixP && type == XA_PIXMAP && format == 32 && nitems == 1 && bytesafter == 0) { if (verbose_p) fprintf (stderr, "%s: destroying %s data (0x%lX).\n", blurb(), atom_name, *pixP); safe_XKillClient (dpy, *pixP); } else fprintf (stderr, "%s: deleted unrecognised %s property: \n" "\t%lu, %lu; type: %lu, format: %d, " "nitems: %lu, bytesafter %ld\n", blurb(), atom_name, (unsigned long) pixP, (pixP ? *pixP : 0), type, format, nitems, bytesafter); } } static void kill_xsetroot_data (Display *dpy, Window w, Bool verbose_p) { kill_xsetroot_data_1 (dpy, w, XA_XSETROOT_ID, "_XSETROOT_ID", verbose_p); kill_xsetroot_data_1 (dpy, w, XA_ESETROOT_PMAP_ID, "ESETROOT_PMAP_ID", verbose_p); kill_xsetroot_data_1 (dpy, w, XA_XROOTPMAP_ID, "_XROOTPMAP_ID", verbose_p); } static void save_real_vroot (saver_screen_info *ssi) { saver_info *si = ssi->global; Display *dpy = si->dpy; Screen *screen = ssi->screen; int i; Window root = RootWindowOfScreen (screen); Window root2, parent, *kids; unsigned int nkids; XErrorHandler old_handler; /* It's possible that a window might be deleted between our call to XQueryTree() and our call to XGetWindowProperty(). Don't die if that happens (but just ignore that window, it's not the one we're interested in anyway.) */ XSync (dpy, False); old_handler = XSetErrorHandler (BadWindow_ehandler); XSync (dpy, False); ssi->real_vroot = 0; ssi->real_vroot_value = 0; if (! XQueryTree (dpy, root, &root2, &parent, &kids, &nkids)) abort (); if (root != root2) abort (); if (parent) abort (); for (i = 0; i < nkids; i++) { Atom type; int format; unsigned long nitems, bytesafter; unsigned char *dataP = 0; Window *vrootP; int j; /* Skip this window if it is the xscreensaver window of any other screen (this can happen in the Xinerama case.) */ for (j = 0; j < si->nscreens; j++) { saver_screen_info *ssi2 = &si->screens[j]; if (kids[i] == ssi2->screensaver_window) goto SKIP; } if (XGetWindowProperty (dpy, kids[i], XA_VROOT, 0, 1, False, XA_WINDOW, &type, &format, &nitems, &bytesafter, &dataP) != Success) continue; if (! dataP) continue; vrootP = (Window *) dataP; if (ssi->real_vroot) { if (*vrootP == ssi->screensaver_window) abort (); fprintf (stderr, "%s: more than one virtual root window found (0x%x and 0x%x).\n", blurb(), (int) ssi->real_vroot, (int) kids [i]); exit (1); } ssi->real_vroot = kids [i]; ssi->real_vroot_value = *vrootP; SKIP: ; } XSync (dpy, False); XSetErrorHandler (old_handler); XSync (dpy, False); if (ssi->real_vroot) { remove_vroot_property (si->dpy, ssi->real_vroot); XSync (dpy, False); } XFree ((char *) kids); } static Bool restore_real_vroot_1 (saver_screen_info *ssi) { saver_info *si = ssi->global; saver_preferences *p = &si->prefs; if (p->verbose_p && ssi->real_vroot) fprintf (stderr, "%s: restoring __SWM_VROOT property on the real vroot (0x%lx).\n", blurb(), (unsigned long) ssi->real_vroot); if (ssi->screensaver_window) remove_vroot_property (si->dpy, ssi->screensaver_window); if (ssi->real_vroot) { store_vroot_property (si->dpy, ssi->real_vroot, ssi->real_vroot_value); ssi->real_vroot = 0; ssi->real_vroot_value = 0; /* make sure the property change gets there before this process terminates! We might be doing this because we have intercepted SIGTERM or something. */ XSync (si->dpy, False); return True; } return False; } Bool restore_real_vroot (saver_info *si) { int i; Bool did_any = False; for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (restore_real_vroot_1 (ssi)) did_any = True; } return did_any; } /* Signal hackery to ensure that the vroot doesn't get left in an inconsistent state */ const char * signal_name(int signal) { switch (signal) { case SIGHUP: return "SIGHUP"; case SIGINT: return "SIGINT"; case SIGQUIT: return "SIGQUIT"; case SIGILL: return "SIGILL"; case SIGTRAP: return "SIGTRAP"; #ifdef SIGABRT case SIGABRT: return "SIGABRT"; #endif case SIGFPE: return "SIGFPE"; case SIGKILL: return "SIGKILL"; case SIGBUS: return "SIGBUS"; case SIGSEGV: return "SIGSEGV"; case SIGPIPE: return "SIGPIPE"; case SIGALRM: return "SIGALRM"; case SIGTERM: return "SIGTERM"; #ifdef SIGSTOP case SIGSTOP: return "SIGSTOP"; #endif #ifdef SIGCONT case SIGCONT: return "SIGCONT"; #endif #ifdef SIGUSR1 case SIGUSR1: return "SIGUSR1"; #endif #ifdef SIGUSR2 case SIGUSR2: return "SIGUSR2"; #endif #ifdef SIGEMT case SIGEMT: return "SIGEMT"; #endif #ifdef SIGSYS case SIGSYS: return "SIGSYS"; #endif #ifdef SIGCHLD case SIGCHLD: return "SIGCHLD"; #endif #ifdef SIGPWR case SIGPWR: return "SIGPWR"; #endif #ifdef SIGWINCH case SIGWINCH: return "SIGWINCH"; #endif #ifdef SIGURG case SIGURG: return "SIGURG"; #endif #ifdef SIGIO case SIGIO: return "SIGIO"; #endif #ifdef SIGVTALRM case SIGVTALRM: return "SIGVTALRM"; #endif #ifdef SIGXCPU case SIGXCPU: return "SIGXCPU"; #endif #ifdef SIGXFSZ case SIGXFSZ: return "SIGXFSZ"; #endif #ifdef SIGDANGER case SIGDANGER: return "SIGDANGER"; #endif default: { static char buf[50]; sprintf(buf, "signal %d\n", signal); return buf; } } } static RETSIGTYPE restore_real_vroot_handler (int sig) { saver_info *si = global_si_kludge; /* I hate C so much... */ signal (sig, SIG_DFL); if (restore_real_vroot (si)) fprintf (real_stderr, "\n%s: %s intercepted, vroot restored.\n", blurb(), signal_name(sig)); kill (getpid (), sig); } static void catch_signal (saver_info *si, int sig, RETSIGTYPE (*handler) (int)) { # ifdef HAVE_SIGACTION struct sigaction a; a.sa_handler = handler; sigemptyset (&a.sa_mask); a.sa_flags = 0; /* On Linux 2.4.9 (at least) we need to tell the kernel to not mask delivery of this signal from inside its handler, or else when we execvp() the process again, it starts up with SIGHUP blocked, meaning that killing it with -HUP only works *once*. You'd think that execvp() would reset all the signal masks, but it doesn't. */ # if defined(SA_NOMASK) a.sa_flags |= SA_NOMASK; # elif defined(SA_NODEFER) a.sa_flags |= SA_NODEFER; # endif if (sigaction (sig, &a, 0) < 0) # else /* !HAVE_SIGACTION */ if (((long) signal (sig, handler)) == -1L) # endif /* !HAVE_SIGACTION */ { char buf [255]; sprintf (buf, "%s: couldn't catch %s", blurb(), signal_name(sig)); perror (buf); saver_exit (si, 1, 0); } } static RETSIGTYPE saver_sighup_handler (int sig); void handle_signals (saver_info *si) { catch_signal (si, SIGHUP, saver_sighup_handler); catch_signal (si, SIGINT, restore_real_vroot_handler); catch_signal (si, SIGQUIT, restore_real_vroot_handler); catch_signal (si, SIGILL, restore_real_vroot_handler); catch_signal (si, SIGTRAP, restore_real_vroot_handler); #ifdef SIGIOT catch_signal (si, SIGIOT, restore_real_vroot_handler); #endif catch_signal (si, SIGABRT, restore_real_vroot_handler); #ifdef SIGEMT catch_signal (si, SIGEMT, restore_real_vroot_handler); #endif catch_signal (si, SIGFPE, restore_real_vroot_handler); catch_signal (si, SIGBUS, restore_real_vroot_handler); catch_signal (si, SIGSEGV, restore_real_vroot_handler); #ifdef SIGSYS catch_signal (si, SIGSYS, restore_real_vroot_handler); #endif catch_signal (si, SIGTERM, restore_real_vroot_handler); #ifdef SIGXCPU catch_signal (si, SIGXCPU, restore_real_vroot_handler); #endif #ifdef SIGXFSZ catch_signal (si, SIGXFSZ, restore_real_vroot_handler); #endif #ifdef SIGDANGER catch_signal (si, SIGDANGER, restore_real_vroot_handler); #endif } static RETSIGTYPE saver_sighup_handler (int sig) { saver_info *si = global_si_kludge; /* I hate C so much... */ /* Re-establish SIGHUP handler */ catch_signal (si, SIGHUP, saver_sighup_handler); fprintf (stderr, "%s: %s received: restarting...\n", blurb(), signal_name(sig)); if (si->screen_blanked_p) { int i; for (i = 0; i < si->nscreens; i++) kill_screenhack (&si->screens[i]); unblank_screen (si); XSync (si->dpy, False); } restart_process (si); /* Does not return */ abort (); } void saver_exit (saver_info *si, int status, const char *dump_core_reason) { saver_preferences *p = &si->prefs; static Bool exiting = False; Bool bugp; Bool vrs; if (exiting) exit(status); exiting = True; vrs = restore_real_vroot (si); emergency_kill_subproc (si); shutdown_stderr (si); if (p->verbose_p && vrs) fprintf (real_stderr, "%s: old vroot restored.\n", blurb()); fflush(real_stdout); #ifdef VMS /* on VMS, 1 is the "normal" exit code instead of 0. */ if (status == 0) status = 1; else if (status == 1) status = -1; #endif bugp = !!dump_core_reason; if (si->prefs.debug_p && !dump_core_reason) dump_core_reason = "because of -debug"; if (dump_core_reason) { /* Note that the Linux man page for setuid() says If uid is different from the old effective uid, the process will be forbidden from leaving core dumps. */ char cwd[4096]; /* should really be PATH_MAX, but who cares. */ cwd[0] = 0; fprintf(real_stderr, "%s: dumping core (%s)\n", blurb(), dump_core_reason); if (bugp) fprintf(real_stderr, "%s: see http://www.jwz.org/xscreensaver/bugs.html\n" "\t\t\tfor bug reporting information.\n\n", blurb()); # if defined(HAVE_GETCWD) if (!getcwd (cwd, sizeof(cwd))) # elif defined(HAVE_GETWD) if (!getwd (cwd)) # endif strcpy(cwd, "unknown."); fprintf (real_stderr, "%s: current directory is %s\n", blurb(), cwd); describe_uids (si, real_stderr); /* Do this to drop a core file, so that we can get a stack trace. */ abort(); } exit (status); } /* Managing the actual screensaver window */ Bool window_exists_p (Display *dpy, Window window) { XErrorHandler old_handler; XWindowAttributes xgwa; xgwa.screen = 0; old_handler = XSetErrorHandler (BadWindow_ehandler); XGetWindowAttributes (dpy, window, &xgwa); XSync (dpy, False); XSetErrorHandler (old_handler); return (xgwa.screen != 0); } static void store_saver_id (saver_screen_info *ssi) { XClassHint class_hints; saver_info *si = ssi->global; unsigned long pid = (unsigned long) getpid (); char buf[20]; struct passwd *p = getpwuid (getuid ()); const char *name, *host; char *id; /* First store the name and class on the window. */ class_hints.res_name = progname; class_hints.res_class = progclass; XSetClassHint (si->dpy, ssi->screensaver_window, &class_hints); XStoreName (si->dpy, ssi->screensaver_window, "screensaver"); /* Then store the xscreensaver version number. */ XChangeProperty (si->dpy, ssi->screensaver_window, XA_SCREENSAVER_VERSION, XA_STRING, 8, PropModeReplace, (unsigned char *) si->version, strlen (si->version)); /* Now store the XSCREENSAVER_ID property, that says what user and host xscreensaver is running as. */ if (p && p->pw_name && *p->pw_name) name = p->pw_name; else if (p) { sprintf (buf, "%lu", (unsigned long) p->pw_uid); name = buf; } else name = "???"; # if defined(HAVE_UNAME) { struct utsname uts; if (uname (&uts) < 0) host = "???"; else host = uts.nodename; } # elif defined(VMS) host = getenv("SYS$NODE"); # else /* !HAVE_UNAME && !VMS */ host = "???"; # endif /* !HAVE_UNAME && !VMS */ id = (char *) malloc (strlen(name) + strlen(host) + 50); sprintf (id, "%lu (%s@%s)", pid, name, host); XChangeProperty (si->dpy, ssi->screensaver_window, XA_SCREENSAVER_ID, XA_STRING, 8, PropModeReplace, (unsigned char *) id, strlen (id)); free (id); } void store_saver_status (saver_info *si) { PROP32 *status; int size = si->nscreens + 2; int i; status = (PROP32 *) calloc (size, sizeof(PROP32)); status[0] = (PROP32) (si->screen_blanked_p || si->locked_p ? (si->locked_p ? XA_LOCK : XA_BLANK) : 0); status[1] = (PROP32) si->blank_time; for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; status [2 + i] = ssi->current_hack + 1; } XChangeProperty (si->dpy, RootWindow (si->dpy, 0), /* always screen #0 */ XA_SCREENSAVER_STATUS, XA_INTEGER, 32, PropModeReplace, (unsigned char *) status, size); free (status); } static Bool error_handler_hit_p = False; static int ignore_all_errors_ehandler (Display *dpy, XErrorEvent *error) { error_handler_hit_p = True; return 0; } /* Returns True if successful, False if an X error occurred. We need this because other programs might have done things to our window that will cause XChangeWindowAttributes() to fail: if that happens, we give up, destroy the window, and re-create it. */ static Bool safe_XChangeWindowAttributes (Display *dpy, Window window, unsigned long mask, XSetWindowAttributes *attrs) { XErrorHandler old_handler; XSync (dpy, False); error_handler_hit_p = False; old_handler = XSetErrorHandler (ignore_all_errors_ehandler); XChangeWindowAttributes (dpy, window, mask, attrs); XSync (dpy, False); XSetErrorHandler (old_handler); XSync (dpy, False); return (!error_handler_hit_p); } /* This might not be necessary, but just in case. */ static Bool safe_XConfigureWindow (Display *dpy, Window window, unsigned long mask, XWindowChanges *changes) { XErrorHandler old_handler; XSync (dpy, False); error_handler_hit_p = False; old_handler = XSetErrorHandler (ignore_all_errors_ehandler); XConfigureWindow (dpy, window, mask, changes); XSync (dpy, False); XSetErrorHandler (old_handler); XSync (dpy, False); return (!error_handler_hit_p); } /* This might not be necessary, but just in case. */ static Bool safe_XDestroyWindow (Display *dpy, Window window) { XErrorHandler old_handler; XSync (dpy, False); error_handler_hit_p = False; old_handler = XSetErrorHandler (ignore_all_errors_ehandler); XDestroyWindow (dpy, window); XSync (dpy, False); XSetErrorHandler (old_handler); XSync (dpy, False); return (!error_handler_hit_p); } static Bool safe_XKillClient (Display *dpy, XID id) { XErrorHandler old_handler; XSync (dpy, False); error_handler_hit_p = False; old_handler = XSetErrorHandler (ignore_all_errors_ehandler); XKillClient (dpy, id); XSync (dpy, False); XSetErrorHandler (old_handler); XSync (dpy, False); return (!error_handler_hit_p); } #ifdef HAVE_XF86VMODE Bool safe_XF86VidModeGetViewPort (Display *dpy, int screen, int *xP, int *yP) { Bool result; XErrorHandler old_handler; XSync (dpy, False); error_handler_hit_p = False; old_handler = XSetErrorHandler (ignore_all_errors_ehandler); result = XF86VidModeGetViewPort (dpy, screen, xP, yP); XSync (dpy, False); XSetErrorHandler (old_handler); XSync (dpy, False); return (error_handler_hit_p ? False : result); } /* There is no "safe_XF86VidModeGetModeLine" because it fails with an untrappable I/O error instead of an X error -- so one must call safe_XF86VidModeGetViewPort first, and assume that both have the same error condition. Thank you XFree, may I have another. */ #endif /* HAVE_XF86VMODE */ static void initialize_screensaver_window_1 (saver_screen_info *ssi) { saver_info *si = ssi->global; saver_preferences *p = &si->prefs; Bool install_cmap_p = ssi->install_cmap_p; /* not p->install_cmap_p */ /* This resets the screensaver window as fully as possible, since there's no way of knowing what some random client may have done to us in the meantime. We could just destroy and recreate the window, but that has its own set of problems... */ XColor black; XSetWindowAttributes attrs; unsigned long attrmask; static Bool printed_visual_info = False; /* only print the message once. */ Window horked_window = 0; black.red = black.green = black.blue = 0; if (ssi->cmap == DefaultColormapOfScreen (ssi->screen)) ssi->cmap = 0; if (ssi->current_visual != DefaultVisualOfScreen (ssi->screen)) /* It's not the default visual, so we have no choice but to install. */ install_cmap_p = True; if (install_cmap_p) { if (! ssi->cmap) { ssi->cmap = XCreateColormap (si->dpy, RootWindowOfScreen (ssi->screen), ssi->current_visual, AllocNone); if (! XAllocColor (si->dpy, ssi->cmap, &black)) abort (); ssi->black_pixel = black.pixel; } } else { Colormap def_cmap = DefaultColormapOfScreen (ssi->screen); if (ssi->cmap) { XFreeColors (si->dpy, ssi->cmap, &ssi->black_pixel, 1, 0); if (ssi->cmap != ssi->demo_cmap && ssi->cmap != def_cmap) XFreeColormap (si->dpy, ssi->cmap); } ssi->cmap = def_cmap; ssi->black_pixel = BlackPixelOfScreen (ssi->screen); } attrmask = (CWOverrideRedirect | CWEventMask | CWBackingStore | CWColormap | CWBackPixel | CWBackingPixel | CWBorderPixel); attrs.override_redirect = True; /* When use_mit_saver_extension or use_sgi_saver_extension is true, we won't actually be reading these events during normal operation; but we still need to see Button events for demo-mode to work properly. */ attrs.event_mask = (KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask | PointerMotionMask); attrs.backing_store = NotUseful; attrs.colormap = ssi->cmap; attrs.background_pixel = ssi->black_pixel; attrs.backing_pixel = ssi->black_pixel; attrs.border_pixel = ssi->black_pixel; if (!p->verbose_p || printed_visual_info) ; else if (ssi->current_visual == DefaultVisualOfScreen (ssi->screen)) { fprintf (stderr, "%s: %d: visual ", blurb(), ssi->number); describe_visual (stderr, ssi->screen, ssi->current_visual, install_cmap_p); } else { fprintf (stderr, "%s: using visual: ", blurb()); describe_visual (stderr, ssi->screen, ssi->current_visual, install_cmap_p); fprintf (stderr, "%s: default visual: ", blurb()); describe_visual (stderr, ssi->screen, DefaultVisualOfScreen (ssi->screen), ssi->install_cmap_p); } printed_visual_info = True; #ifdef HAVE_MIT_SAVER_EXTENSION if (si->using_mit_saver_extension) { XScreenSaverInfo *info; Window root = RootWindowOfScreen (ssi->screen); #if 0 /* This call sets the server screensaver timeouts to what we think they should be (based on the resources and args xscreensaver was started with.) It's important that we do this to sync back up with the server - if we have turned on prematurely, as by an ACTIVATE ClientMessage, then the server may decide to activate the screensaver while it's already active. That's ok for us, since we would know to ignore that ScreenSaverActivate event, but a side effect of this would be that the server would map its saver window (which we then hide again right away) meaning that the bits currently on the screen get blown away. Ugly. */ /* #### Ok, that doesn't work - when we tell the server that the screensaver is "off" it sends us a Deactivate event, which is sensible... but causes the saver to never come on. Hmm. */ disable_builtin_screensaver (si, True); #endif /* 0 */ #if 0 /* #### The MIT-SCREEN-SAVER extension gives us access to the window that the server itself uses for saving the screen. However, using this window in any way, in particular, calling XScreenSaverSetAttributes() as below, tends to make the X server crash. So fuck it, let's try and get along without using it... It's also inconvenient to use this window because it doesn't always exist (though the ID is constant.) So to use this window, we'd have to reimplement the ACTIVATE ClientMessage to tell the *server* to tell *us* to turn on, to cause the window to get created at the right time. Gag. */ XScreenSaverSetAttributes (si->dpy, root, 0, 0, width, height, 0, current_depth, InputOutput, visual, attrmask, &attrs); XSync (si->dpy, False); #endif /* 0 */ info = XScreenSaverAllocInfo (); XScreenSaverQueryInfo (si->dpy, root, info); ssi->server_mit_saver_window = info->window; if (! ssi->server_mit_saver_window) abort (); XFree (info); } #endif /* HAVE_MIT_SAVER_EXTENSION */ if (ssi->screensaver_window) { XWindowChanges changes; unsigned int changesmask = CWX|CWY|CWWidth|CWHeight|CWBorderWidth; changes.x = ssi->x; changes.y = ssi->y; changes.width = ssi->width; changes.height = ssi->height; changes.border_width = 0; if (! (safe_XConfigureWindow (si->dpy, ssi->screensaver_window, changesmask, &changes) && safe_XChangeWindowAttributes (si->dpy, ssi->screensaver_window, attrmask, &attrs))) { horked_window = ssi->screensaver_window; ssi->screensaver_window = 0; } } if (!ssi->screensaver_window) { ssi->screensaver_window = XCreateWindow (si->dpy, RootWindowOfScreen (ssi->screen), ssi->x, ssi->y, ssi->width, ssi->height, 0, ssi->current_depth, InputOutput, ssi->current_visual, attrmask, &attrs); reset_stderr (ssi); if (horked_window) { fprintf (stderr, "%s: someone horked our saver window (0x%lx)! Recreating it...\n", blurb(), (unsigned long) horked_window); maybe_transfer_grabs (ssi, horked_window, ssi->screensaver_window, ssi->number); safe_XDestroyWindow (si->dpy, horked_window); horked_window = 0; } if (p->verbose_p) fprintf (stderr, "%s: %d: saver window is 0x%lx.\n", blurb(), ssi->number, (unsigned long) ssi->screensaver_window); } store_saver_id (ssi); /* store window name and IDs */ if (!ssi->cursor) { Pixmap bit; bit = XCreatePixmapFromBitmapData (si->dpy, ssi->screensaver_window, "\000", 1, 1, BlackPixelOfScreen (ssi->screen), BlackPixelOfScreen (ssi->screen), 1); ssi->cursor = XCreatePixmapCursor (si->dpy, bit, bit, &black, &black, 0, 0); XFreePixmap (si->dpy, bit); } XSetWindowBackground (si->dpy, ssi->screensaver_window, ssi->black_pixel); if (si->demoing_p) XUndefineCursor (si->dpy, ssi->screensaver_window); else XDefineCursor (si->dpy, ssi->screensaver_window, ssi->cursor); } void initialize_screensaver_window (saver_info *si) { int i; for (i = 0; i < si->nscreens; i++) initialize_screensaver_window_1 (&si->screens[i]); } /* Called when the RANDR (Resize and Rotate) extension tells us that the size of the screen has changed while the screen was blanked. Call update_screen_layout() first, then call this to synchronize the size of the saver windows to the new sizes of the screens. */ void resize_screensaver_window (saver_info *si) { saver_preferences *p = &si->prefs; int i; for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; XWindowAttributes xgwa; /* Make sure a window exists -- it might not if a monitor was just added for the first time. */ if (! ssi->screensaver_window) { initialize_screensaver_window_1 (ssi); if (p->verbose_p) fprintf (stderr, "%s: %d: newly added window 0x%lx %dx%d+%d+%d\n", blurb(), i, (unsigned long) ssi->screensaver_window, ssi->width, ssi->height, ssi->x, ssi->y); } /* Make sure the window is the right size -- it might not be if the monitor changed resolution, or if a badly-behaved hack screwed with it. */ XGetWindowAttributes (si->dpy, ssi->screensaver_window, &xgwa); if (xgwa.x != ssi->x || xgwa.y != ssi->y || xgwa.width != ssi->width || xgwa.height != ssi->height) { XWindowChanges changes; unsigned int changesmask = CWX|CWY|CWWidth|CWHeight|CWBorderWidth; changes.x = ssi->x; changes.y = ssi->y; changes.width = ssi->width; changes.height = ssi->height; changes.border_width = 0; if (p->verbose_p) fprintf (stderr, "%s: %d: resize 0x%lx from %dx%d+%d+%d to %dx%d+%d+%d\n", blurb(), i, (unsigned long) ssi->screensaver_window, xgwa.width, xgwa.height, xgwa.x, xgwa.y, ssi->width, ssi->height, ssi->x, ssi->y); if (! safe_XConfigureWindow (si->dpy, ssi->screensaver_window, changesmask, &changes)) fprintf (stderr, "%s: %d: someone horked our saver window" " (0x%lx)! Unable to resize it!\n", blurb(), i, (unsigned long) ssi->screensaver_window); } /* Now (if blanked) make sure that it's mapped and running a hack -- it might not be if we just added it. (We also might be re-using an old window that existed for a previous monitor that was removed and re-added.) Note that spawn_screenhack() calls select_visual() which may destroy and re-create the window via initialize_screensaver_window_1(). */ if (si->screen_blanked_p) { if (ssi->cmap) XInstallColormap (si->dpy, ssi->cmap); XMapRaised (si->dpy, ssi->screensaver_window); if (! ssi->pid) spawn_screenhack (ssi); /* Make sure the act of adding a screen doesn't present as pointer motion (and thus cause an unblank). */ { Window root, child; int x, y; unsigned int mask; XQueryPointer (si->dpy, ssi->screensaver_window, &root, &child, &ssi->last_poll_mouse.root_x, &ssi->last_poll_mouse.root_y, &x, &y, &mask); } } } /* Kill off any savers running on no-longer-extant monitors. */ for (; i < si->ssi_count; i++) { saver_screen_info *ssi = &si->screens[i]; if (ssi->pid) kill_screenhack (ssi); if (ssi->screensaver_window) { XUnmapWindow (si->dpy, ssi->screensaver_window); restore_real_vroot_1 (ssi); } } } void raise_window (saver_info *si, Bool inhibit_fade, Bool between_hacks_p, Bool dont_clear) { saver_preferences *p = &si->prefs; int i; if (si->demoing_p) inhibit_fade = True; if (si->emergency_lock_p) inhibit_fade = True; if (!dont_clear) initialize_screensaver_window (si); reset_watchdog_timer (si, True); if (p->fade_p && si->fading_possible_p && !inhibit_fade) { Window *current_windows = (Window *) calloc(sizeof(Window), si->nscreens); Colormap *current_maps = (Colormap *) calloc(sizeof(Colormap), si->nscreens); for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; current_windows[i] = ssi->screensaver_window; current_maps[i] = (between_hacks_p ? ssi->cmap : DefaultColormapOfScreen (ssi->screen)); /* Ensure that the default background of the window is really black, not a pixmap or something. (This does not clear the window.) */ XSetWindowBackground (si->dpy, ssi->screensaver_window, ssi->black_pixel); } if (p->verbose_p) fprintf (stderr, "%s: fading...\n", blurb()); XGrabServer (si->dpy); /* ############ DANGER! */ /* Clear the stderr layer on each screen. */ if (!dont_clear) for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (ssi->stderr_overlay_window) /* Do this before the fade, since the stderr cmap won't fade even if we uninstall it (beats me...) */ clear_stderr (ssi); } /* Note! The server is grabbed, and this will take several seconds to complete! */ fade_screens (si->dpy, current_maps, current_windows, si->nscreens, p->fade_seconds/1000, p->fade_ticks, True, !dont_clear); free(current_maps); free(current_windows); current_maps = 0; current_windows = 0; if (p->verbose_p) fprintf (stderr, "%s: fading done.\n", blurb()); #ifdef HAVE_MIT_SAVER_EXTENSION for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (ssi->server_mit_saver_window && window_exists_p (si->dpy, ssi->server_mit_saver_window)) XUnmapWindow (si->dpy, ssi->server_mit_saver_window); } #endif /* HAVE_MIT_SAVER_EXTENSION */ XUngrabServer (si->dpy); XSync (si->dpy, False); /* ###### (danger over) */ } else { for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (!dont_clear) XClearWindow (si->dpy, ssi->screensaver_window); if (!dont_clear || ssi->stderr_overlay_window) clear_stderr (ssi); XMapRaised (si->dpy, ssi->screensaver_window); #ifdef HAVE_MIT_SAVER_EXTENSION if (ssi->server_mit_saver_window && window_exists_p (si->dpy, ssi->server_mit_saver_window)) XUnmapWindow (si->dpy, ssi->server_mit_saver_window); #endif /* HAVE_MIT_SAVER_EXTENSION */ } } for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (ssi->cmap) XInstallColormap (si->dpy, ssi->cmap); } } int mouse_screen (saver_info *si) { saver_preferences *p = &si->prefs; Window pointer_root, pointer_child; int root_x, root_y, win_x, win_y; unsigned int mask; int i; if (si->nscreens == 1) return 0; for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (XQueryPointer (si->dpy, RootWindowOfScreen (ssi->screen), &pointer_root, &pointer_child, &root_x, &root_y, &win_x, &win_y, &mask) && root_x >= ssi->x && root_y >= ssi->y && root_x < ssi->x + ssi->width && root_y < ssi->y + ssi->height) { if (p->verbose_p) fprintf (stderr, "%s: mouse is on screen %d of %d\n", blurb(), i, si->nscreens); return i; } } /* couldn't figure out where the mouse is? Oh well. */ return 0; } Bool blank_screen (saver_info *si) { int i; Bool ok; Window w; int mscreen; /* Note: we do our grabs on the root window, not on the screensaver window. If we grabbed on the saver window, then the demo mode and lock dialog boxes wouldn't get any events. By "the root window", we mean "the root window that contains the mouse." We use to always grab the mouse on screen 0, but that has the effect of moving the mouse to screen 0 from whichever screen it was on, on multi-head systems. */ mscreen = mouse_screen (si); w = RootWindowOfScreen(si->screens[mscreen].screen); ok = grab_keyboard_and_mouse (si, w, (si->demoing_p ? 0 : si->screens[0].cursor), mscreen); # if 0 if (si->using_mit_saver_extension || si->using_sgi_saver_extension) /* If we're using a server extension, then failure to get a grab is not a big deal -- even without the grab, we will still be able to un-blank when there is user activity, since the server will tell us. */ /* #### No, that's not true: if we don't have a keyboard grab, then we can't read passwords to unlock. */ ok = True; # endif /* 0 */ if (!ok) return False; for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (ssi->real_screen_p) save_real_vroot (ssi); store_vroot_property (si->dpy, ssi->screensaver_window, ssi->screensaver_window); #ifdef HAVE_XF86VMODE { int ev, er; if (!XF86VidModeQueryExtension (si->dpy, &ev, &er) || !safe_XF86VidModeGetViewPort (si->dpy, i, &ssi->blank_vp_x, &ssi->blank_vp_y)) ssi->blank_vp_x = ssi->blank_vp_y = -1; } #endif /* HAVE_XF86VMODE */ } raise_window (si, False, False, False); si->screen_blanked_p = True; si->blank_time = time ((time_t *) 0); si->last_wall_clock_time = 0; store_saver_status (si); /* store blank time */ return True; } void unblank_screen (saver_info *si) { saver_preferences *p = &si->prefs; Bool unfade_p = (si->fading_possible_p && p->unfade_p); int i; monitor_power_on (si, True); reset_watchdog_timer (si, False); if (si->demoing_p) unfade_p = False; if (unfade_p) { Window *current_windows = (Window *) calloc(sizeof(Window), si->nscreens); for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; current_windows[i] = ssi->screensaver_window; /* Ensure that the default background of the window is really black, not a pixmap or something. (This does not clear the window.) */ XSetWindowBackground (si->dpy, ssi->screensaver_window, ssi->black_pixel); } if (p->verbose_p) fprintf (stderr, "%s: unfading...\n", blurb()); XSync (si->dpy, False); XGrabServer (si->dpy); /* ############ DANGER! */ XSync (si->dpy, False); /* Clear the stderr layer on each screen. */ for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; clear_stderr (ssi); } XUngrabServer (si->dpy); XSync (si->dpy, False); /* ###### (danger over) */ fade_screens (si->dpy, 0, current_windows, si->nscreens, p->fade_seconds/1000, p->fade_ticks, False, False); free(current_windows); current_windows = 0; if (p->verbose_p) fprintf (stderr, "%s: unfading done.\n", blurb()); } else { for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (ssi->cmap) { Colormap c = DefaultColormapOfScreen (ssi->screen); /* avoid technicolor */ XClearWindow (si->dpy, ssi->screensaver_window); if (c) XInstallColormap (si->dpy, c); } XUnmapWindow (si->dpy, ssi->screensaver_window); } } /* If the focus window does has a non-default colormap, then install that colormap as well. (On SGIs, this will cause both the root map and the focus map to be installed simultaneously. It'd be nice to pick up the other colormaps that had been installed, too; perhaps XListInstalledColormaps could be used for that?) */ { Window focus = 0; int revert_to; XGetInputFocus (si->dpy, &focus, &revert_to); if (focus && focus != PointerRoot && focus != None) { XWindowAttributes xgwa; xgwa.colormap = 0; XGetWindowAttributes (si->dpy, focus, &xgwa); if (xgwa.colormap && xgwa.colormap != DefaultColormapOfScreen (xgwa.screen)) XInstallColormap (si->dpy, xgwa.colormap); } } for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; kill_xsetroot_data (si->dpy, ssi->screensaver_window, p->verbose_p); } store_saver_status (si); /* store unblank time */ ungrab_keyboard_and_mouse (si); restore_real_vroot (si); /* Unmap the windows a second time, dammit -- just to avoid a race with the screen-grabbing hacks. (I'm not sure if this is really necessary; I'm stabbing in the dark now.) */ for (i = 0; i < si->nscreens; i++) XUnmapWindow (si->dpy, si->screens[i].screensaver_window); si->screen_blanked_p = False; si->blank_time = time ((time_t *) 0); si->last_wall_clock_time = 0; store_saver_status (si); /* store unblank time */ } /* Transfer any grabs from the old window to the new. Actually I think none of this is necessary, since we always hold our grabs on the root window, but I wrote this before re-discovering that... */ static void maybe_transfer_grabs (saver_screen_info *ssi, Window old_w, Window new_w, int new_screen_no) { saver_info *si = ssi->global; /* If the old window held our mouse grab, transfer the grab to the new window. (Grab the server while so doing, to avoid a race condition.) */ if (old_w == si->mouse_grab_window) { XGrabServer (si->dpy); /* ############ DANGER! */ ungrab_mouse (si); grab_mouse (si, ssi->screensaver_window, (si->demoing_p ? 0 : ssi->cursor), new_screen_no); XUngrabServer (si->dpy); XSync (si->dpy, False); /* ###### (danger over) */ } /* If the old window held our keyboard grab, transfer the grab to the new window. (Grab the server while so doing, to avoid a race condition.) */ if (old_w == si->keyboard_grab_window) { XGrabServer (si->dpy); /* ############ DANGER! */ ungrab_kbd(si); grab_kbd(si, ssi->screensaver_window, ssi->number); XUngrabServer (si->dpy); XSync (si->dpy, False); /* ###### (danger over) */ } } static Visual * get_screen_gl_visual (saver_info *si, int real_screen_number) { int i; int nscreens = ScreenCount (si->dpy); if (! si->best_gl_visuals) si->best_gl_visuals = (Visual **) calloc (nscreens + 1, sizeof (*si->best_gl_visuals)); for (i = 0; i < nscreens; i++) if (! si->best_gl_visuals[i]) si->best_gl_visuals[i] = get_best_gl_visual (si, ScreenOfDisplay (si->dpy, i)); if (real_screen_number < 0 || real_screen_number >= nscreens) abort(); return si->best_gl_visuals[real_screen_number]; } Bool select_visual (saver_screen_info *ssi, const char *visual_name) { XWindowAttributes xgwa; saver_info *si = ssi->global; saver_preferences *p = &si->prefs; Bool install_cmap_p = p->install_cmap_p; Bool was_installed_p = (ssi->cmap != DefaultColormapOfScreen(ssi->screen)); Visual *new_v = 0; Bool got_it; /* On some systems (most recently, MacOS X) OpenGL programs get confused when you kill one and re-start another on the same window. So maybe it's best to just always destroy and recreate the xscreensaver window when changing hacks, instead of trying to reuse the old one? */ Bool always_recreate_window_p = True; get_screen_gl_visual (si, 0); /* let's probe all the GL visuals early */ /* We make sure the existing window is actually on ssi->screen before trying to use it, in case things moved around radically when monitors were added or deleted. If we don't do this we could get a BadMatch even though the depths match. I think. */ memset (&xgwa, 0, sizeof(xgwa)); if (ssi->screensaver_window) XGetWindowAttributes (si->dpy, ssi->screensaver_window, &xgwa); if (visual_name && *visual_name) { if (!strcmp(visual_name, "default-i") || !strcmp(visual_name, "Default-i") || !strcmp(visual_name, "Default-I") ) { visual_name = "default"; install_cmap_p = True; } else if (!strcmp(visual_name, "default-n") || !strcmp(visual_name, "Default-n") || !strcmp(visual_name, "Default-N")) { visual_name = "default"; install_cmap_p = False; } else if (!strcmp(visual_name, "gl") || !strcmp(visual_name, "Gl") || !strcmp(visual_name, "GL")) { new_v = get_screen_gl_visual (si, ssi->real_screen_number); if (!new_v && p->verbose_p) fprintf (stderr, "%s: no GL visuals.\n", progname); } if (!new_v) new_v = get_visual (ssi->screen, visual_name, True, False); } else { new_v = ssi->default_visual; } got_it = !!new_v; if (new_v && new_v != DefaultVisualOfScreen(ssi->screen)) /* It's not the default visual, so we have no choice but to install. */ install_cmap_p = True; ssi->install_cmap_p = install_cmap_p; if ((ssi->screen != xgwa.screen) || (new_v && (always_recreate_window_p || (ssi->current_visual != new_v) || (install_cmap_p != was_installed_p)))) { Colormap old_c = ssi->cmap; Window old_w = ssi->screensaver_window; if (! new_v) new_v = ssi->current_visual; if (p->verbose_p) { fprintf (stderr, "%s: %d: visual ", blurb(), ssi->number); describe_visual (stderr, ssi->screen, new_v, install_cmap_p); #if 0 fprintf (stderr, "%s: from ", blurb()); describe_visual (stderr, ssi->screen, ssi->current_visual, was_installed_p); #endif } reset_stderr (ssi); ssi->current_visual = new_v; ssi->current_depth = visual_depth(ssi->screen, new_v); ssi->cmap = 0; ssi->screensaver_window = 0; initialize_screensaver_window_1 (ssi); /* stderr_overlay_window is a child of screensaver_window, so we need to destroy that as well (actually, we just need to invalidate and drop our pointers to it, but this will destroy it, which is ok so long as it happens before old_w itself is destroyed.) */ reset_stderr (ssi); raise_window (si, True, True, False); store_vroot_property (si->dpy, ssi->screensaver_window, ssi->screensaver_window); /* Transfer any grabs from the old window to the new. */ maybe_transfer_grabs (ssi, old_w, ssi->screensaver_window, ssi->number); /* Now we can destroy the old window without horking our grabs. */ XDestroyWindow (si->dpy, old_w); if (p->verbose_p) fprintf (stderr, "%s: %d: destroyed old saver window 0x%lx.\n", blurb(), ssi->number, (unsigned long) old_w); if (old_c && old_c != DefaultColormapOfScreen (ssi->screen) && old_c != ssi->demo_cmap) XFreeColormap (si->dpy, old_c); } return got_it; } xscreensaver-5.34/driver/screens.c000644 000767 000767 00000101655 11767545147 017013 0ustar00jwzjwz000000 000000 /* screens.c --- dealing with RANDR, Xinerama, and VidMode Viewports. * xscreensaver, Copyright (c) 1991-2008 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ /* There are a bunch of different mechanisms for multiple monitors * available in X. XScreenSaver needs to care about this for two * reasons: first, to ensure that all visible areas go black; and * second, so that the windows of screen savers exactly fill the * glass of each monitor (instead of one saver spanning multiple * monitors, or a monitor displaying only a sub-rectangle of the * screen saver.) * * 1) Multi-screen: * * This is the original way. Each monitor gets its own display * number. :0.0 is the first one, :0.1 is the next, etc. The * value of $DISPLAY determines which screen windows open on by * default. A single app can open windows on multiple screens * with the same display connection, but windows cannot be moved * from one screen to another. The mouse can be moved from one * screen to another, though. Screens may be different depths * (e.g., one can be TrueColor and one can be PseudoColor.) * Screens cannot be resized or moved without restarting X. * * Everyone hates this way of doing things because of the * inability to move a window from one screen to another without * restarting the application. * * 2) Xinerama: * * There is a single giant root window that spans all the * monitors. All monitors are the same depth, and windows can be * moved around. Applications can learn which rectangles are * actually visible on monitors by querying the Xinerama server * extension. (If you don't do that, you end up with dialog * boxes that try to appear in the middle of the screen actually * spanning the gap between two monitors.) * * Xinerama doesn't work with DRI, which means that if you use * it, you lose hardware acceleration on OpenGL programs. Also, * screens can't be resized or moved without restarting X. * * 3) Vidmode Viewports: * * With this extension, the root window can be bigger than the * monitor. Moving the mouse near the edges of the screen * scrolls around, like a pan-and-scan movie. There can also be * a hot key for changing the monitor's resolution (zooming * in/out). * * Trying to combine this with Xinerama crashes the server, so * you can only use this if you have only a single screen, or are * in old-multi-screen mode. * * Also, half the time it doesn't work at all: it tends to lie * about the size of the rectangle in use. * * 4) RANDR 1.0: * * The first version of the "Resize and Rotate" extension let you * change the resolution of a screen on the fly. The root window * would actually resize. However, it was also incompatible with * Xinerama (did it crash, or just do nothing? I can't remember) * so you needed to be in single-screen or old multi-screen mode. * I believe RANDR could co-exist with Vidmode Viewports, but I'm * not sure. * * 5) RANDR 1.2: * * Finally, RANDR added the functionality of Xinerama, plus some. * Each X screen (in the sense of #1, "multi-screen") can have a * number of sub-rectangles that are displayed on monitors, and * each of those sub-rectangles can be displayed on more than one * monitor. So it's possible (I think) to have a hybrid of * multi-screen and Xinerama (e.g., to have two monitors running * in one depth, and three monitors running in another?) * Typically though, there will be a single X screen, with * Xinerama-like division of that large root window onto multiple * monitors. Also everything's dynamic: monitors can be added, * removed, and resized at runtime. * * I believe that as of RANDR 1.2, the Xinerama extension still * exists but only as a compatiblity layer: it's actually * returning data from the RANDR extension. * * Though RANDR 1.2 allows the same image to be cloned onto more * than one monitor, and also allows one monitor to show a * subsection of something on another monitor (e.g., the * rectangles can be enclosed or overlap). Since there's no way * to put seperate savers on those duplicated-or-overlapping * monitors, xscreensaver just ignores them (which allows them to * display duplicates or overlaps). * * 5a) Nvidia fucks it up: * * Nvidia drivers as of Aug 2008 running in "TwinView" mode * apparently report correct screen geometry via Xinerama, but * report one giant screen via RANDR. The response from the * nvidia developers is, "we don't support RANDR, use Xinerama * 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 # include "config.h" #endif #include #ifdef HAVE_RANDR # include #endif /* HAVE_RANDR */ #ifdef HAVE_XINERAMA # include #endif /* HAVE_XINERAMA */ #ifdef HAVE_XF86VMODE # include #endif /* HAVE_XF86VMODE */ /* This file doesn't need the Xt headers, so stub these types out... */ #undef XtPointer #define XtAppContext void* #define XrmDatabase void* #define XtIntervalId void* #define XtPointer void* #define Widget void* #include "xscreensaver.h" #include "visual.h" typedef enum { S_SANE, S_ENCLOSED, S_DUPLICATE, S_OVERLAP, S_OFFSCREEN, S_DISABLED } monitor_sanity; /* 'typedef monitor' is in types.h */ struct _monitor { int id; char *desc; Screen *screen; 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); static void free_monitors (monitor **monitors) { monitor **m2 = monitors; if (! monitors) return; while (*m2) { if ((*m2)->desc) free ((*m2)->desc); if ((*m2)->err) free ((*m2)->err); free (*m2); m2++; } free (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, char **errP) { Screen *screen = DefaultScreenOfDisplay (dpy); int event, error, nscreens, i; XineramaScreenInfo *xsi; monitor **monitors; if (! XineramaQueryExtension (dpy, &event, &error)) return 0; if (! XineramaIsActive (dpy)) return 0; xsi = XineramaQueryScreens (dpy, &nscreens); if (!xsi) return 0; monitors = (monitor **) calloc (nscreens + 1, sizeof(*monitors)); if (!monitors) return 0; for (i = 0; i < nscreens; i++) { monitor *m = (monitor *) calloc (1, sizeof (monitor)); monitors[i] = m; m->id = i; m->screen = screen; m->x = xsi[i].x_org; m->y = xsi[i].y_org; m->width = xsi[i].width; m->height = xsi[i].height; } return monitors; } #endif /* HAVE_XINERAMA */ #ifdef HAVE_XF86VMODE static monitor ** vidmode_scan_monitors (Display *dpy, char **errP) { int event, error, nscreens, i; monitor **monitors; /* Note that XF86VidModeGetViewPort() tends to be full of lies on laptops that have a docking station or external monitor that runs in a different resolution than the laptop's screen: http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=81593 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=208417 http://bugs.xfree86.org/show_bug.cgi?id=421 Presumably this is fixed by using RANDR instead of VidMode. */ # ifdef HAVE_XINERAMA /* Attempts to use the VidMode extension when the Xinerama extension is active can result in a server crash! Yay! */ if (XQueryExtension (dpy, "XINERAMA", &error, &event, &error)) return 0; # endif /* !HAVE_XINERAMA */ if (! XF86VidModeQueryExtension (dpy, &event, &error)) return 0; nscreens = ScreenCount (dpy); monitors = (monitor **) calloc (nscreens + 1, sizeof(*monitors)); if (!monitors) return 0; for (i = 0; i < nscreens; i++) { monitor *m = (monitor *) calloc (1, sizeof (monitor)); XF86VidModeModeLine ml; int dot; Screen *screen = ScreenOfDisplay (dpy, i); monitors[i] = m; m->id = i; m->screen = screen; if (! safe_XF86VidModeGetViewPort (dpy, i, &m->x, &m->y)) m->x = m->y = -1; if (XF86VidModeGetModeLine (dpy, i, &dot, &ml)) { m->width = ml.hdisplay; m->height = ml.vdisplay; } /* Apparently, though the server stores the X position in increments of 1 pixel, it will only make changes to the *display* in some other increment. With XF86_SVGA on a Thinkpad, the display only updates in multiples of 8 pixels when in 8-bit mode, and in multiples of 4 pixels in 16-bit mode. I don't know what it does in 24- and 32-bit mode, because I don't have enough video memory to find out. I consider it a bug that XF86VidModeGetViewPort() is telling me the server's *target* scroll position rather than the server's *actual* scroll position. David Dawes agrees, and says they may fix this in XFree86 4.0, but it's notrivial. He also confirms that this behavior is server-dependent, so the actual scroll position cannot be reliably determined by the client. So... that means the only solution is to provide a ``sandbox'' around the blackout window -- we make the window be up to N pixels larger than the viewport on both the left and right sides. That means some part of the outer edges of each hack might not be visible, but screw it. I'm going to guess that 16 pixels is enough, and that the Y dimension doesn't have this problem. The drawback of doing this, of course, is that some of the screenhacks will still look pretty stupid -- for example, "slidescreen" will cut off the left and right edges of the grid, etc. */ # define FUDGE 16 if (m->x > 0 && m->x < m->width - ml.hdisplay) { /* Not at left edge or right edge: Round X position down to next lower multiple of FUDGE. Increase width by 2*FUDGE in case some server rounds up. */ m->x = ((m->x - 1) / FUDGE) * FUDGE; m->width += (FUDGE * 2); } # undef FUDGE } return monitors; } #endif /* HAVE_XF86VMODE */ #ifdef HAVE_RANDR static monitor ** randr_scan_monitors (Display *dpy, char **errP) { int event, error, major, minor, nscreens, i, j; monitor **monitors; Bool new_randr_p = False; if (! XRRQueryExtension (dpy, &event, &error)) return 0; if (! XRRQueryVersion (dpy, &major, &minor)) return 0; if (major <= 0) /* Protocol was still in flux back then -- fuck it. */ return 0; # ifdef HAVE_RANDR_12 new_randr_p = (major > 1 || (major == 1 && minor >= 2)); # endif if (! new_randr_p) /* RANDR 1.0 -- no Xinerama-like virtual screens. */ nscreens = ScreenCount (dpy); else /* RANDR 1.2 or newer -- built-in Xinerama */ { # ifdef HAVE_RANDR_12 int xsc = ScreenCount (dpy); nscreens = 0; /* Add up the virtual screens on each X screen. */ for (i = 0; i < xsc; i++) { XRRScreenResources *res = XRRGetScreenResources (dpy, RootWindow (dpy, i)); nscreens += res->noutput; XRRFreeScreenResources (res); } # 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; for (i = 0, j = 0; i < ScreenCount (dpy); i++) { Screen *screen = ScreenOfDisplay (dpy, i); if (! new_randr_p) /* RANDR 1.0 */ { XRRScreenConfiguration *rrc; monitor *m = (monitor *) calloc (1, sizeof (monitor)); monitors[i] = m; m->screen = screen; m->id = i; rrc = XRRGetScreenInfo (dpy, RootWindowOfScreen (screen)); if (rrc) { SizeID size = -1; Rotation rot = ~0; XRRScreenSize *rrsizes; int nsizes = 0; size = XRRConfigCurrentConfiguration (rrc, &rot); rrsizes = XRRConfigSizes (rrc, &nsizes); if (nsizes <= 0) /* WTF? Shouldn't happen but does. */ { m->width = DisplayWidth (dpy, i); m->height = DisplayHeight (dpy, i); } else if (rot & (RR_Rotate_90|RR_Rotate_270)) { m->width = rrsizes[size].height; m->height = rrsizes[size].width; } else { m->width = rrsizes[size].width; m->height = rrsizes[size].height; } /* don't free 'rrsizes' */ XRRFreeScreenConfigInfo (rrc); } } else /* RANDR 1.2 or newer */ { # ifdef HAVE_RANDR_12 int k; XRRScreenResources *res = XRRGetScreenResources (dpy, RootWindowOfScreen (screen)); 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->ncrtc ? 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); 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; } if (rroi->connection == RR_Disconnected) m->sanity = S_DISABLED; /* #### do the same for RR_UnknownConnection? */ if (crtci) XRRFreeCrtcInfo (crtci); XRRFreeOutputInfo (rroi); } XRRFreeScreenResources (res); # endif /* HAVE_RANDR_12 */ } } /* 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; } #endif /* HAVE_RANDR */ static monitor ** basic_scan_monitors (Display *dpy, char **errP) { int nscreens = ScreenCount (dpy); int i; monitor **monitors = (monitor **) calloc (nscreens + 1, sizeof(*monitors)); if (!monitors) return 0; for (i = 0; i < nscreens; i++) { Screen *screen = ScreenOfDisplay (dpy, i); monitor *m = (monitor *) calloc (1, sizeof (monitor)); monitors[i] = m; m->id = i; m->screen = screen; m->x = 0; m->y = 0; m->width = WidthOfScreen (screen); m->height = HeightOfScreen (screen); } return monitors; } #if defined(HAVE_RANDR) && defined(HAVE_XINERAMA) /* From: Aaron Plattner Date: August 7, 2008 10:21:25 AM PDT To: linux-bugs@nvidia.com The NVIDIA X driver does not yet support RandR 1.2. The X server has a compatibility layer in it that allows RandR 1.2 clients to talk to RandR 1.1 drivers through an RandR 1.2 pseudo-output called "default". This reports the total combined resolution of the TwinView display, since it doesn't have any visibility into TwinView metamodes. There is no way for the driver to prevent the server from turning on this compatibility layer. The intention is for X client applications to continue to use the Xinerama extension to query the screen geometry. RandR 1.2 reports its own Xinerama info for this purpose. I would recommend against modifying xscreensaver to try to get this information from RandR. */ static monitor ** 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, errP); if (!xinerama_monitors) return randr_monitors; if (! layouts_differ_p (randr_monitors, xinerama_monitors)) { free_monitors (xinerama_monitors); return randr_monitors; } else if ( randr_monitors[0] && !randr_monitors[1] && /* 1 monitor */ xinerama_monitors[0] && xinerama_monitors[1]) /* >1 monitor */ { *errP = append (*errP, "WARNING: RANDR reports 1 screen but Xinerama\n" "\t\treports multiple. Believing Xinerama."); free_monitors (randr_monitors); return xinerama_monitors; } else { *errP = append (*errP, "WARNING: RANDR and Xinerama report different\n" "\t\tscreen layouts! Believing RANDR."); free_monitors (xinerama_monitors); return randr_monitors; } } #endif /* HAVE_RANDR && HAVE_XINERAMA */ #ifdef DEBUG_MULTISCREEN /* If DEBUG_MULTISCREEN is defined, then in "-debug" mode, xscreensaver will pretend that it is changing the number of connected monitors every few seconds, using the geometries in the following list, for stress-testing purposes. */ static monitor ** debug_scan_monitors (Display *dpy, char **errP) { static const char * const geoms[] = { "1600x1028+0+22", "1024x768+0+22", "800x600+0+22", "800x600+0+22,800x600+800+22", "800x600+0+22,800x600+800+22,800x600+300+622", "800x600+0+22,800x600+800+22,800x600+0+622,800x600+800+622", "640x480+0+22,640x480+640+22,640x480+0+502,640x480+640+502", "640x480+240+22,640x480+0+502,640x480+640+502", "640x480+0+200,640x480+640+200", "800x600+400+22", "320x200+0+22,320x200+320+22,320x200+640+22,320x200+960+22,320x200+0+222,320x200+320+222,320x200+640+222,320x200+960+222,320x200+0+422,320x200+320+422,320x200+640+422,320x200+960+422,320x200+0+622,320x200+320+622,320x200+640+622,320x200+960+622,320x200+0+822,320x200+320+822,320x200+640+822,320x200+960+822" }; static int index = 0; monitor **monitors = (monitor **) calloc (100, sizeof(*monitors)); int nscreens = 0; Screen *screen = DefaultScreenOfDisplay (dpy); char *s = strdup (geoms[index]); char *token = strtok (s, ","); while (token) { monitor *m = calloc (1, sizeof (monitor)); char c; m->id = nscreens; m->screen = screen; if (4 != sscanf (token, "%dx%d+%d+%d%c", &m->width, &m->height, &m->x, &m->y, &c)) abort(); m->width -= 2; m->height -= 2; monitors[nscreens++] = m; token = strtok (0, ","); } free (s); index = (index+1) % countof(geoms); return monitors; } #endif /* DEBUG_MULTISCREEN */ #ifdef QUAD_MODE static monitor ** quadruple (monitor **monitors, Bool debug_p, char **errP) { int i, j, count = 0; monitor **monitors2; while (monitors[count]) count++; monitors2 = (monitor **) calloc (count * 4 + 1, sizeof(*monitors)); if (!monitors2) abort(); for (i = 0, j = 0; i < count; i++) { int k; for (k = 0; k < 4; k++) { monitors2[j+k] = (monitor *) calloc (1, sizeof (monitor)); *monitors2[j+k] = *monitors[i]; monitors2[j+k]->width /= (debug_p ? 4 : 2); monitors2[j+k]->height /= 2; monitors2[j+k]->id = (monitors[i]->id * 4) + k; monitors2[j+k]->name = (monitors[i]->name ? strdup (monitors[i]->name) : 0); } monitors2[j+1]->x += monitors2[j]->width; monitors2[j+2]->y += monitors2[j]->height; monitors2[j+3]->x += monitors2[j]->width; monitors2[j+3]->y += monitors2[j]->height; j += 4; } free_monitors (monitors); return monitors2; } #endif /* QUAD_MODE */ static monitor ** 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, &err); # endif # ifdef HAVE_RANDR if (! p->getviewport_full_of_lies_p) if (! monitors) monitors = randr_scan_monitors (si->dpy, &err); # ifdef HAVE_XINERAMA monitors = randr_versus_xinerama_fight (si->dpy, monitors, &err); # endif # endif /* HAVE_RANDR */ # ifdef HAVE_XF86VMODE if (! monitors) monitors = vidmode_scan_monitors (si->dpy, &err); # endif # ifdef HAVE_XINERAMA if (! monitors) monitors = xinerama_scan_monitors (si->dpy, &err); # endif if (! monitors) monitors = basic_scan_monitors (si->dpy, &err); # ifdef QUAD_MODE if (p->quad_p) monitors = quadruple (monitors, p->debug_p, &err); # endif if (monitors && err) monitors[0]->err = err; return monitors; } static Bool monitors_overlap_p (monitor *a, monitor *b) { /* Two rectangles overlap if the max of the tops is less than the min of the bottoms and the max of the lefts is less than the min of the rights. */ # undef MAX # undef MIN # define MAX(A,B) ((A)>(B)?(A):(B)) # define MIN(A,B) ((A)<(B)?(A):(B)) int maxleft = MAX(a->x, b->x); int maxtop = MAX(a->y, b->y); int minright = MIN(a->x + a->width - 1, b->x + b->width); int minbot = MIN(a->y + a->height - 1, b->y + b->height); return (maxtop < minbot && maxleft < minright); } static Bool plausible_aspect_ratio_p (monitor **monitors) { /* Modern wide-screen monitors come in the following aspect ratios: One monitor: If you tack a 640x480 monitor onto the right, the ratio is: 16 x 9 --> 1.78 852 x 480 --> 1.77 852+640 x 480 --> 3.11 "SD 480p" 1280 x 720 --> 1.78 1280+640 x 720 --> 2.67 "HD 720p" 1280 x 920 --> 1.39 1280+640 x 920 --> 2.09 1366 x 768 --> 1.78 1366+640 x 768 --> 2.61 "HD 768p" 1440 x 900 --> 1.60 1440+640 x 900 --> 2.31 1680 x 1050 --> 1.60 1680+640 x 1050 --> 2.21 1690 x 1050 --> 1.61 1690+640 x 1050 --> 2.22 1920 x 1080 --> 1.78 1920+640 x 1080 --> 2.37 "HD 1080p" 1920 x 1200 --> 1.60 1920+640 x 1200 --> 2.13 2560 x 1600 --> 1.60 2560+640 x 1600 --> 2.00 So that implies that if we ever see an aspect ratio >= 2.0, we can be pretty sure that the X server is lying to us, and that's actually two monitors, not one. */ if (monitors[0] && !monitors[1] && /* exactly 1 monitor */ monitors[0]->height && monitors[0]->width / (double) monitors[0]->height >= 1.9) return False; else return True; } /* Mark the ones that overlap, etc. */ static void check_monitor_sanity (monitor **monitors) { int i, j, count = 0; while (monitors[count]) count++; # define X1 monitors[i]->x # define X2 monitors[j]->x # define Y1 monitors[i]->y # define Y2 monitors[j]->y # define W1 monitors[i]->width # define W2 monitors[j]->width # define H1 monitors[i]->height # define H2 monitors[j]->height /* If a monitor is enclosed by any other monitor, that's insane. */ for (i = 0; i < count; i++) for (j = 0; j < count; j++) if (i != j && monitors[i]->sanity == S_SANE && monitors[j]->sanity == S_SANE && monitors[i]->screen == monitors[j]->screen && X2 >= X1 && Y2 >= Y1 && (X2+W2) <= (X1+W1) && (Y2+H2) <= (Y1+H1)) { if (X1 == X2 && Y1 == Y2 && W1 == W2 && H1 == H2) monitors[j]->sanity = S_DUPLICATE; else monitors[j]->sanity = S_ENCLOSED; monitors[j]->enemy = i; } /* After checking for enclosure, check for other lossage against earlier monitors. We do enclosure first so that we make sure to pick the larger one. */ for (i = 0; i < count; i++) for (j = 0; j < i; j++) { if (monitors[i]->sanity != S_SANE) continue; /* already marked */ if (monitors[j]->sanity != S_SANE) continue; if (monitors[i]->screen != monitors[j]->screen) continue; if (monitors_overlap_p (monitors[i], monitors[j])) { monitors[i]->sanity = S_OVERLAP; monitors[i]->enemy = j; } } /* Finally, make sure all monitors have sane positions and sizes. Xinerama sometimes reports 1024x768 VPs at -1936862040, -1953705044. */ for (i = 0; i < count; i++) { if (monitors[i]->sanity != S_SANE) continue; /* already marked */ if (X1 < 0 || Y1 < 0 || W1 <= 0 || H1 <= 0 || X1+W1 >= 0x7FFF || Y1+H1 >= 0x7FFF) { monitors[i]->sanity = S_OFFSCREEN; monitors[i]->enemy = 0; } } # undef X1 # undef X2 # undef Y1 # undef Y2 # undef W1 # undef W2 # undef H1 # undef H2 } static Bool layouts_differ_p (monitor **a, monitor **b) { if (!a || !b) return True; while (1) { if (!*a) break; if (!*b) break; if ((*a)->screen != (*b)->screen || (*a)->x != (*b)->x || (*a)->y != (*b)->y || (*a)->width != (*b)->width || (*a)->height != (*b)->height) return True; a++; b++; } if (*a) return True; if (*b) return True; return False; } void describe_monitor_layout (saver_info *si) { monitor **monitors = si->monitor_layout; int count = 0; int good_count = 0; int bad_count = 0; int implausible_p = !plausible_aspect_ratio_p (monitors); while (monitors[count]) { if (monitors[count]->sanity == S_SANE) good_count++; else bad_count++; 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 { int i; fprintf (stderr, "%s: screens in use: %d\n", blurb(), good_count); for (i = 0; i < count; i++) { monitor *m = monitors[i]; if (m->sanity != S_SANE) continue; fprintf (stderr, "%s: %3d/%d: %dx%d+%d+%d", blurb(), m->id, screen_number (m->screen), m->width, m->height, m->x, m->y); if (m->desc && *m->desc) fprintf (stderr, " (%s)", m->desc); fprintf (stderr, "\n"); } if (bad_count > 0) { fprintf (stderr, "%s: rejected screens: %d\n", blurb(), bad_count); for (i = 0; i < count; i++) { monitor *m = monitors[i]; monitor *e = monitors[m->enemy]; if (m->sanity == S_SANE) continue; fprintf (stderr, "%s: %3d/%d: %dx%d+%d+%d", blurb(), m->id, screen_number (m->screen), m->width, m->height, m->x, m->y); if (m->desc && *m->desc) fprintf (stderr, " (%s)", m->desc); fprintf (stderr, " -- "); switch (m->sanity) { case S_SANE: abort(); break; case S_ENCLOSED: fprintf (stderr, "enclosed by %d (%dx%d+%d+%d)\n", e->id, e->width, e->height, e->x, e->y); break; case S_DUPLICATE: fprintf (stderr, "duplicate of %d\n", e->id); break; case S_OVERLAP: fprintf (stderr, "overlaps %d (%dx%d+%d+%d)\n", e->id, e->width, e->height, e->x, e->y); break; case S_OFFSCREEN: fprintf (stderr, "off screen (%dx%d)\n", WidthOfScreen (e->screen), HeightOfScreen (e->screen)); break; case S_DISABLED: fprintf (stderr, "output disabled\n"); break; } } } if (implausible_p) fprintf (stderr, "%s: WARNING: single screen aspect ratio is %dx%d = %.2f\n" "%s: probable X server bug in Xinerama/RANDR!\n", blurb(), monitors[0]->width, monitors[0]->height, monitors[0]->width / (double) monitors[0]->height, blurb()); } } /* Synchronize the contents of si->ssi to the current state of the monitors. Doesn't change anything if nothing has changed; otherwise, alters and reuses existing saver_screen_info structs as much as possible. Returns True if anything changed. */ Bool update_screen_layout (saver_info *si) { monitor **monitors = scan_monitors (si); int count = 0; int good_count = 0; int i, j; int seen_screens[100] = { 0, }; if (! layouts_differ_p (monitors, si->monitor_layout)) { free_monitors (monitors); return False; } free_monitors (si->monitor_layout); si->monitor_layout = monitors; check_monitor_sanity (si->monitor_layout); while (monitors[count]) { if (monitors[count]->sanity == S_SANE) good_count++; count++; } if (si->ssi_count == 0) { si->ssi_count = 10; si->screens = (saver_screen_info *) calloc (sizeof(*si->screens), si->ssi_count); } if (si->ssi_count <= good_count) { si->ssi_count = good_count + 10; si->screens = (saver_screen_info *) realloc (si->screens, sizeof(*si->screens) * si->ssi_count); memset (si->screens + si->nscreens, 0, sizeof(*si->screens) * (si->ssi_count - si->nscreens)); } if (! si->screens) abort(); si->nscreens = good_count; /* Regenerate the list of GL visuals as needed. */ if (si->best_gl_visuals) free (si->best_gl_visuals); si->best_gl_visuals = 0; for (i = 0, j = 0; i < count; i++) { monitor *m = monitors[i]; saver_screen_info *ssi = &si->screens[j]; Screen *old_screen = ssi->screen; int sn; if (monitors[i]->sanity != S_SANE) continue; ssi->global = si; ssi->number = j; sn = screen_number (m->screen); ssi->screen = m->screen; ssi->real_screen_number = sn; ssi->real_screen_p = (seen_screens[sn] == 0); seen_screens[sn]++; ssi->default_visual = get_visual_resource (ssi->screen, "visualID", "VisualID", False); ssi->current_visual = ssi->default_visual; ssi->current_depth = visual_depth (ssi->screen, ssi->current_visual); /* If the screen changed (or if this is the first time) we need a new toplevel shell for this screen's depth. */ if (ssi->screen != old_screen) initialize_screen_root_widget (ssi); ssi->last_poll_mouse.root_x = -1; ssi->last_poll_mouse.root_y = -1; ssi->x = m->x; ssi->y = m->y; ssi->width = m->width; ssi->height = m->height; # ifndef DEBUG_MULTISCREEN { saver_preferences *p = &si->prefs; if (p->debug_p # ifdef QUAD_MODE && !p->quad_p # endif ) ssi->width /= 2; } # endif j++; } si->default_screen = &si->screens[0]; return True; } xscreensaver-5.34/driver/timers.c000644 000767 000767 00000156022 12440157064 016634 0ustar00jwzjwz000000 000000 /* timers.c --- detecting when the user is idle, and other timer-related tasks. * xscreensaver, Copyright (c) 1991-2014 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #include #ifdef HAVE_XMU # ifndef VMS # include # else /* VMS */ # include # endif /* VMS */ # else /* !HAVE_XMU */ # include "xmu.h" #endif /* !HAVE_XMU */ #ifdef HAVE_XIDLE_EXTENSION #include #endif /* HAVE_XIDLE_EXTENSION */ #ifdef HAVE_MIT_SAVER_EXTENSION #include #endif /* HAVE_MIT_SAVER_EXTENSION */ #ifdef HAVE_SGI_SAVER_EXTENSION #include #endif /* HAVE_SGI_SAVER_EXTENSION */ #ifdef HAVE_RANDR #include #endif /* HAVE_RANDR */ #include "xscreensaver.h" #undef ABS #define ABS(x)((x)<0?-(x):(x)) #undef MAX #define MAX(x,y)((x)>(y)?(x):(y)) #ifdef HAVE_PROC_INTERRUPTS static Bool proc_interrupts_activity_p (saver_info *si); #endif /* HAVE_PROC_INTERRUPTS */ static void check_for_clock_skew (saver_info *si); void idle_timer (XtPointer closure, XtIntervalId *id) { saver_info *si = (saver_info *) closure; /* What an amazingly shitty design. Not only does Xt execute timeout events from XtAppNextEvent() instead of from XtDispatchEvent(), but there is no way to tell Xt to block until there is an X event OR a timeout happens. Once your timeout proc is called, XtAppNextEvent() still won't return until a "real" X event comes in. So this function pushes a stupid, gratuitous, unnecessary event back on the event queue to force XtAppNextEvent to return Right Fucking Now. When the code in sleep_until_idle() sees an event of type XAnyEvent, which the server never generates, it knows that a timeout has occurred. */ XEvent fake_event; fake_event.type = 0; /* XAnyEvent type, ignored. */ fake_event.xany.display = si->dpy; fake_event.xany.window = 0; XPutBackEvent (si->dpy, &fake_event); /* If we are the timer that just went off, clear the pointer to the id. */ if (id) { if (si->timer_id && *id != si->timer_id) abort(); /* oops, scheduled timer twice?? */ si->timer_id = 0; } } void schedule_wakeup_event (saver_info *si, Time when, Bool verbose_p) { if (si->timer_id) { if (verbose_p) fprintf (stderr, "%s: idle_timer already running\n", blurb()); return; } /* Wake up periodically to ask the server if we are idle. */ si->timer_id = XtAppAddTimeOut (si->app, when, idle_timer, (XtPointer) si); if (verbose_p) fprintf (stderr, "%s: starting idle_timer (%ld, %ld)\n", blurb(), when, si->timer_id); } static void notice_events (saver_info *si, Window window, Bool top_p) { saver_preferences *p = &si->prefs; XWindowAttributes attrs; unsigned long events; Window root, parent, *kids; unsigned int nkids; int screen_no; if (XtWindowToWidget (si->dpy, window)) /* If it's one of ours, don't mess up its event mask. */ return; if (!XQueryTree (si->dpy, window, &root, &parent, &kids, &nkids)) return; if (window == root) top_p = False; /* Figure out which screen this window is on, for the diagnostics. */ for (screen_no = 0; screen_no < si->nscreens; screen_no++) if (root == RootWindowOfScreen (si->screens[screen_no].screen)) break; XGetWindowAttributes (si->dpy, window, &attrs); events = ((attrs.all_event_masks | attrs.do_not_propagate_mask) & (KeyPressMask | PropertyChangeMask)); /* Select for SubstructureNotify on all windows. Select for PropertyNotify on all windows. Select for KeyPress on all windows that already have it selected. Note that we can't select for ButtonPress, because of X braindamage: only one client at a time may select for ButtonPress on a given window, though any number can select for KeyPress. Someone explain *that* to me. So, if the user spends a while clicking the mouse without ever moving the mouse or touching the keyboard, we won't know that they've been active, and the screensaver will come on. That sucks, but I don't know how to get around it. Since X presents mouse wheels as clicks, this applies to those, too: scrolling through a document using only the mouse wheel doesn't count as activity... Fortunately, /proc/interrupts helps, on systems that have it. Oh, if it's a PS/2 mouse, not serial or USB. This sucks! */ XSelectInput (si->dpy, window, SubstructureNotifyMask | PropertyChangeMask | events); if (top_p && p->debug_p && (events & KeyPressMask)) { /* Only mention one window per tree (hack hack). */ fprintf (stderr, "%s: %d: selected KeyPress on 0x%lX\n", blurb(), screen_no, (unsigned long) window); top_p = False; } if (kids) { while (nkids) notice_events (si, kids [--nkids], top_p); XFree ((char *) kids); } } int BadWindow_ehandler (Display *dpy, XErrorEvent *error) { /* When we notice a window being created, we spawn a timer that waits 30 seconds or so, and then selects events on that window. This error handler is used so that we can cope with the fact that the window may have been destroyed <30 seconds after it was created. */ if (error->error_code == BadWindow || error->error_code == BadMatch || error->error_code == BadDrawable) return 0; else return saver_ehandler (dpy, error); } struct notice_events_timer_arg { saver_info *si; Window w; }; static void notice_events_timer (XtPointer closure, XtIntervalId *id) { struct notice_events_timer_arg *arg = (struct notice_events_timer_arg *) closure; XErrorHandler old_handler = XSetErrorHandler (BadWindow_ehandler); saver_info *si = arg->si; Window window = arg->w; free(arg); notice_events (si, window, True); XSync (si->dpy, False); XSetErrorHandler (old_handler); } void start_notice_events_timer (saver_info *si, Window w, Bool verbose_p) { saver_preferences *p = &si->prefs; struct notice_events_timer_arg *arg = (struct notice_events_timer_arg *) malloc(sizeof(*arg)); arg->si = si; arg->w = w; XtAppAddTimeOut (si->app, p->notice_events_timeout, notice_events_timer, (XtPointer) arg); if (verbose_p) fprintf (stderr, "%s: starting notice_events_timer for 0x%X (%lu)\n", blurb(), (unsigned int) w, p->notice_events_timeout); } /* When the screensaver is active, this timer will periodically change the running program. */ void cycle_timer (XtPointer closure, XtIntervalId *id) { saver_info *si = (saver_info *) closure; saver_preferences *p = &si->prefs; Time how_long = p->cycle; if (si->selection_mode > 0 && screenhack_running_p (si)) /* If we're in "SELECT n" mode, the cycle timer going off will just restart this same hack again. There's not much point in doing this every 5 or 10 minutes, but on the other hand, leaving one hack running for days is probably not a great idea, since they tend to leak and/or crash. So, restart the thing once an hour. */ how_long = 1000 * 60 * 60; if (si->dbox_up_p) { if (p->verbose_p) fprintf (stderr, "%s: dialog box up; delaying hack change.\n", blurb()); how_long = 30000; /* 30 secs */ } else { int i; maybe_reload_init_file (si); for (i = 0; i < si->nscreens; i++) kill_screenhack (&si->screens[i]); raise_window (si, True, True, False); if (!si->throttled_p) for (i = 0; i < si->nscreens; i++) spawn_screenhack (&si->screens[i]); else { if (p->verbose_p) fprintf (stderr, "%s: not launching new hack (throttled.)\n", blurb()); } } if (how_long > 0) { si->cycle_id = XtAppAddTimeOut (si->app, how_long, cycle_timer, (XtPointer) si); if (p->debug_p) fprintf (stderr, "%s: starting cycle_timer (%ld, %ld)\n", blurb(), how_long, si->cycle_id); } else { if (p->debug_p) fprintf (stderr, "%s: not starting cycle_timer: how_long == %ld\n", blurb(), (unsigned long) how_long); } } void activate_lock_timer (XtPointer closure, XtIntervalId *id) { saver_info *si = (saver_info *) closure; saver_preferences *p = &si->prefs; if (p->verbose_p) fprintf (stderr, "%s: timed out; activating lock.\n", blurb()); set_locked_p (si, True); } /* Call this when user activity (or "simulated" activity) has been noticed. */ void reset_timers (saver_info *si) { saver_preferences *p = &si->prefs; if (si->using_mit_saver_extension || si->using_sgi_saver_extension) return; if (si->timer_id) { if (p->debug_p) fprintf (stderr, "%s: killing idle_timer (%ld, %ld)\n", blurb(), p->timeout, si->timer_id); XtRemoveTimeOut (si->timer_id); si->timer_id = 0; } schedule_wakeup_event (si, p->timeout, p->debug_p); /* sets si->timer_id */ if (si->cycle_id) abort (); /* no cycle timer when inactive */ si->last_activity_time = time ((time_t *) 0); /* This will (hopefully, supposedly) tell the server to re-set its DPMS timer. Without this, the -deactivate clientmessage would prevent xscreensaver from blanking, but would not prevent the monitor from powering down. */ #if 0 /* #### With some servers, this causes the screen to flicker every time a key is pressed! Ok, I surrender. I give up on ever having DPMS work properly. */ XForceScreenSaver (si->dpy, ScreenSaverReset); /* And if the monitor is already powered off, turn it on. You'd think the above would do that, but apparently not? */ monitor_power_on (si, True); #endif } /* Returns true if a mouse has moved since the last time we checked. Small motions (of less than "hysteresis" pixels/second) are ignored. */ static Bool device_pointer_moved_p (saver_info *si, poll_mouse_data *last_poll_mouse, poll_mouse_data *this_poll_mouse, Bool mods_p, const char *debug_type, int debug_id) { saver_preferences *p = &si->prefs; unsigned int distance, dps; unsigned long seconds = 0; Bool moved_p = False; distance = MAX (ABS (last_poll_mouse->root_x - this_poll_mouse->root_x), ABS (last_poll_mouse->root_y - this_poll_mouse->root_y)); seconds = (this_poll_mouse->time - last_poll_mouse->time); /* When the screen is blanked, we get MotionNotify events, but when not blanked, we poll only every 5 seconds, and that's not enough resolution to do hysteresis based on a 1 second interval. So, assume that any motion we've seen during the 5 seconds when our eyes were closed happened in the last 1 second instead. */ if (seconds > 1) seconds = 1; dps = (seconds <= 0 ? distance : (distance / seconds)); /* Motion only counts if the rate is more than N pixels per second. */ if (dps >= p->pointer_hysteresis && distance > 0) moved_p = True; /* If the mouse is not on this screen but used to be, that's motion. If the mouse was not on this screen, but is now, that's motion. */ { Bool on_screen_p = (this_poll_mouse->root_x != -1 && this_poll_mouse->root_y != -1); Bool was_on_screen_p = (last_poll_mouse->root_x != -1 && last_poll_mouse->root_y != -1); if (on_screen_p != was_on_screen_p) moved_p = True; } if (p->debug_p && (distance != 0 || moved_p)) { fprintf (stderr, "%s: %s %d: pointer %s", blurb(), debug_type, debug_id, (moved_p ? "moved: " : "ignored:")); if (last_poll_mouse->root_x == -1) fprintf (stderr, "off screen"); else fprintf (stderr, "%d,%d", last_poll_mouse->root_x, last_poll_mouse->root_y); fprintf (stderr, " -> "); if (this_poll_mouse->root_x == -1) fprintf (stderr, "off screen"); else fprintf (stderr, "%d,%d", this_poll_mouse->root_x, this_poll_mouse->root_y); if (last_poll_mouse->root_x != -1 && this_poll_mouse->root_x != -1) fprintf (stderr, " (%d,%d; %d/%lu=%d)", ABS(last_poll_mouse->root_x - this_poll_mouse->root_x), ABS(last_poll_mouse->root_y - this_poll_mouse->root_y), distance, seconds, dps); fprintf (stderr, ".\n"); } if (!moved_p && mods_p && this_poll_mouse->mask != last_poll_mouse->mask) { moved_p = True; if (p->debug_p) fprintf (stderr, "%s: %s %d: modifiers changed: 0x%04x -> 0x%04x.\n", blurb(), debug_type, debug_id, last_poll_mouse->mask, this_poll_mouse->mask); } last_poll_mouse->child = this_poll_mouse->child; last_poll_mouse->mask = this_poll_mouse->mask; if (moved_p || seconds > 0) { last_poll_mouse->time = this_poll_mouse->time; last_poll_mouse->root_x = this_poll_mouse->root_x; last_poll_mouse->root_y = this_poll_mouse->root_y; } return moved_p; } /* Returns true if core mouse pointer has moved since the last time we checked. */ static Bool pointer_moved_p (saver_screen_info *ssi, Bool mods_p) { saver_info *si = ssi->global; Window root; poll_mouse_data this_poll_mouse; int x, y; /* don't check xinerama pseudo-screens. */ if (!ssi->real_screen_p) return False; this_poll_mouse.time = time ((time_t *) 0); if (!XQueryPointer (si->dpy, ssi->screensaver_window, &root, &this_poll_mouse.child, &this_poll_mouse.root_x, &this_poll_mouse.root_y, &x, &y, &this_poll_mouse.mask)) { /* If XQueryPointer() returns false, the mouse is not on this screen. */ this_poll_mouse.root_x = -1; this_poll_mouse.root_y = -1; this_poll_mouse.child = 0; this_poll_mouse.mask = 0; } else si->last_activity_screen = ssi; return device_pointer_moved_p(si, &(ssi->last_poll_mouse), &this_poll_mouse, mods_p, "screen", ssi->number); } /* When we aren't using a server extension, this timer is used to periodically wake up and poll the mouse position, which is possibly more reliable than selecting motion events on every window. */ static void check_pointer_timer (XtPointer closure, XtIntervalId *id) { int i; saver_info *si = (saver_info *) closure; saver_preferences *p = &si->prefs; Bool active_p = False; if (!si->using_proc_interrupts && (si->using_xidle_extension || si->using_mit_saver_extension || si->using_sgi_saver_extension)) /* If an extension is in use, we should not be polling the mouse. Unless we're also checking /proc/interrupts, in which case, we should. */ abort (); if (id && *id == si->check_pointer_timer_id) /* this is us - it's expired */ si->check_pointer_timer_id = 0; if (si->check_pointer_timer_id) /* only queue one at a time */ XtRemoveTimeOut (si->check_pointer_timer_id); si->check_pointer_timer_id = /* now re-queue */ XtAppAddTimeOut (si->app, p->pointer_timeout, check_pointer_timer, (XtPointer) si); for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (pointer_moved_p (ssi, True)) active_p = True; } #ifdef HAVE_PROC_INTERRUPTS if (!active_p && si->using_proc_interrupts && proc_interrupts_activity_p (si)) { active_p = True; } #endif /* HAVE_PROC_INTERRUPTS */ if (active_p) reset_timers (si); check_for_clock_skew (si); } /* An unfortunate situation is this: the saver is not active, because the user has been typing. The machine is a laptop. The user closes the lid and suspends it. The CPU halts. Some hours later, the user opens the lid. At this point, Xt's timers will fire, and xscreensaver will blank the screen. So far so good -- well, not really, but it's the best that we can do, since the OS doesn't send us a signal *before* shutdown -- but if the user had delayed locking (lockTimeout > 0) then we should start off in the locked state, rather than only locking N minutes from when the lid was opened. Also, eschewing fading is probably a good idea, to clamp down as soon as possible. We only do this when we'd be polling the mouse position anyway. This amounts to an assumption that machines with APM support also have /proc/interrupts. */ static void check_for_clock_skew (saver_info *si) { saver_preferences *p = &si->prefs; time_t now = time ((time_t *) 0); long shift = now - si->last_wall_clock_time; if (p->debug_p) { int i = (si->last_wall_clock_time == 0 ? 0 : shift); fprintf (stderr, "%s: checking wall clock for hibernation (%d:%02d:%02d).\n", blurb(), (i / (60 * 60)), ((i / 60) % 60), (i % 60)); } if (si->last_wall_clock_time != 0 && shift > (p->timeout / 1000)) { if (p->verbose_p) fprintf (stderr, "%s: wall clock has jumped by %ld:%02ld:%02ld%s\n", blurb(), (shift / (60 * 60)), ((shift / 60) % 60), (shift % 60), (p->mode == DONT_BLANK ? " while saver disabled" : "")); /* If the saver is entirely disabled, there's no need to do the emergency-blank-and-lock thing. */ if (p->mode != DONT_BLANK) { si->emergency_lock_p = True; idle_timer ((XtPointer) si, 0); } } si->last_wall_clock_time = now; } static void dispatch_event (saver_info *si, XEvent *event) { /* If this is for the splash dialog, pass it along. Note that the password dialog is handled with its own event loop, so events for that window will never come through here. */ if (si->splash_dialog && event->xany.window == si->splash_dialog) handle_splash_event (si, event); XtDispatchEvent (event); } static void swallow_unlock_typeahead_events (saver_info *si, XEvent *e) { XEvent event; char buf [100]; int i = 0; memset (buf, 0, sizeof(buf)); event = *e; do { if (event.xany.type == KeyPress) { char s[2]; int size = XLookupString ((XKeyEvent *) &event, s, 1, 0, 0); if (size != 1) continue; switch (*s) { case '\010': case '\177': /* Backspace */ if (i > 0) i--; break; case '\025': case '\030': /* Erase line */ case '\012': case '\015': /* Enter */ case '\033': /* ESC */ i = 0; break; case '\040': /* Space */ if (i == 0) break; /* ignore space at beginning of line */ /* else, fall through */ default: buf [i++] = *s; break; } } } while (i < sizeof(buf)-1 && XCheckMaskEvent (si->dpy, KeyPressMask, &event)); buf[i] = 0; if (si->unlock_typeahead) { memset (si->unlock_typeahead, 0, strlen(si->unlock_typeahead)); free (si->unlock_typeahead); } if (i > 0) si->unlock_typeahead = strdup (buf); else si->unlock_typeahead = 0; memset (buf, 0, sizeof(buf)); } /* methods of detecting idleness: explicitly informed by SGI SCREEN_SAVER server event; explicitly informed by MIT-SCREEN-SAVER server event; poll server idle time with XIDLE extension; select events on all windows, and note absence of recent events; note that /proc/interrupts has not changed in a while; activated by clientmessage. methods of detecting non-idleness: read events on the xscreensaver window; explicitly informed by SGI SCREEN_SAVER server event; explicitly informed by MIT-SCREEN-SAVER server event; select events on all windows, and note events on any of them; note that a client updated their window's _NET_WM_USER_TIME property; note that /proc/interrupts has changed; deactivated by clientmessage. I trust that explains why this function is a big hairy mess. */ void sleep_until_idle (saver_info *si, Bool until_idle_p) { saver_preferences *p = &si->prefs; /* We have to go through this union bullshit because gcc-4.4.0 has stricter struct-aliasing rules. Without this, the optimizer can fuck things up. */ union { XEvent x_event; # ifdef HAVE_RANDR XRRScreenChangeNotifyEvent xrr_event; # endif /* HAVE_RANDR */ # ifdef HAVE_MIT_SAVER_EXTENSION XScreenSaverNotifyEvent sevent; # endif /* HAVE_MIT_SAVER_EXTENSION */ } event; /* We need to select events on all windows if we're not using any extensions. Otherwise, we don't need to. */ Bool scanning_all_windows = !(si->using_xidle_extension || si->using_mit_saver_extension || si->using_sgi_saver_extension); /* We need to periodically wake up and check for idleness if we're not using any extensions, or if we're using the XIDLE extension. The other two extensions explicitly deliver events when we go idle/non-idle, so we don't need to poll. */ Bool polling_for_idleness = !(si->using_mit_saver_extension || si->using_sgi_saver_extension); /* Whether we need to periodically wake up and check to see if the mouse has moved. We only need to do this when not using any extensions. The reason this isn't the same as `polling_for_idleness' is that the "idleness" poll can happen (for example) 5 minutes from now, whereas the mouse-position poll should happen with low periodicity. We don't need to poll the mouse position with the XIDLE extension, but we do need to periodically wake up and query the server with that extension. For our purposes, polling /proc/interrupts is just like polling the mouse position. It has to happen on the same kind of schedule. */ Bool polling_mouse_position = (si->using_proc_interrupts || !(si->using_xidle_extension || si->using_mit_saver_extension || si->using_sgi_saver_extension) || si->using_xinput_extension); const char *why = 0; /* What caused the idle-state to change? */ if (until_idle_p) { if (polling_for_idleness) /* This causes a no-op event to be delivered to us in a while, so that we come back around through the event loop again. */ schedule_wakeup_event (si, p->timeout, p->debug_p); if (polling_mouse_position) /* Check to see if the mouse has moved, and set up a repeating timer to do so periodically (typically, every 5 seconds.) */ check_pointer_timer ((XtPointer) si, 0); } while (1) { XtAppNextEvent (si->app, &event.x_event); switch (event.x_event.xany.type) { case 0: /* our synthetic "timeout" event has been signalled */ if (until_idle_p) { Time idle; /* We may be idle; check one last time to see if the mouse has moved, just in case the idle-timer went off within the 5 second window between mouse polling. If the mouse has moved, then check_pointer_timer() will reset last_activity_time. */ if (polling_mouse_position) check_pointer_timer ((XtPointer) si, 0); #ifdef HAVE_XIDLE_EXTENSION if (si->using_xidle_extension) { /* The XIDLE extension uses the synthetic event to prod us into re-asking the server how long the user has been idle. */ if (! XGetIdleTime (si->dpy, &idle)) { fprintf (stderr, "%s: XGetIdleTime() failed.\n", blurb()); saver_exit (si, 1, 0); } } else #endif /* HAVE_XIDLE_EXTENSION */ #ifdef HAVE_MIT_SAVER_EXTENSION if (si->using_mit_saver_extension) { /* We don't need to do anything in this case - the synthetic event isn't necessary, as we get sent specific events to wake us up. In fact, this event generally shouldn't be being delivered when the MIT extension is in use. */ idle = 0; } else #endif /* HAVE_MIT_SAVER_EXTENSION */ #ifdef HAVE_SGI_SAVER_EXTENSION if (si->using_sgi_saver_extension) { /* We don't need to do anything in this case - the synthetic event isn't necessary, as we get sent specific events to wake us up. In fact, this event generally shouldn't be being delivered when the SGI extension is in use. */ idle = 0; } else #endif /* HAVE_SGI_SAVER_EXTENSION */ { /* Otherwise, no server extension is in use. The synthetic event was to tell us to wake up and see if the user is now idle. Compute the amount of idle time by comparing the `last_activity_time' to the wall clock. The l_a_t was set by calling `reset_timers()', which is called only in only two situations: when polling the mouse position has revealed the the mouse has moved (user activity) or when we have read an event (again, user activity.) */ idle = 1000 * (si->last_activity_time - time ((time_t *) 0)); } if (idle >= p->timeout) { /* Look, we've been idle long enough. We're done. */ why = "timeout"; goto DONE; } else if (si->emergency_lock_p) { /* Oops, the wall clock has jumped far into the future, so we need to lock down in a hurry! */ why = "large wall clock change"; goto DONE; } else { /* The event went off, but it turns out that the user has not yet been idle for long enough. So re-signal the event. Be economical: if we should blank after 5 minutes, and the user has been idle for 2 minutes, then set this timer to go off in 3 minutes. */ if (polling_for_idleness) schedule_wakeup_event (si, p->timeout - idle, p->debug_p); } } break; case ClientMessage: if (handle_clientmessage (si, &event.x_event, until_idle_p)) { why = "ClientMessage"; goto DONE; } break; case CreateNotify: /* A window has been created on the screen somewhere. If we're supposed to scan all windows for events, prepare this window. */ if (scanning_all_windows) { Window w = event.x_event.xcreatewindow.window; start_notice_events_timer (si, w, p->debug_p); } break; case KeyPress: case ButtonPress: /* 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) { Window root=0, window=0; int x=-1, y=-1; const char *type = 0; if (event.x_event.xany.type == MotionNotify) { /*type = "MotionNotify";*/ root = event.x_event.xmotion.root; window = event.x_event.xmotion.window; x = event.x_event.xmotion.x_root; y = event.x_event.xmotion.y_root; } else if (event.x_event.xany.type == KeyPress) { type = "KeyPress"; root = event.x_event.xkey.root; window = event.x_event.xkey.window; x = y = -1; } else if (event.x_event.xany.type == ButtonPress) { type = "ButtonPress"; root = event.x_event.xkey.root; window = event.x_event.xkey.window; x = event.x_event.xmotion.x_root; y = event.x_event.xmotion.y_root; } if (type) { int i; for (i = 0; i < si->nscreens; i++) if (root == RootWindowOfScreen (si->screens[i].screen)) break; fprintf (stderr,"%s: %d: %s on 0x%lx", blurb(), i, type, (unsigned long) window); /* Be careful never to do this unless in -debug mode, as this could expose characters from the unlock password. */ if (p->debug_p && event.x_event.xany.type == KeyPress) { KeySym keysym; char c = 0; XLookupString (&event.x_event.xkey, &c, 1, &keysym, 0); fprintf (stderr, " (%s%s)", (event.x_event.xkey.send_event ? "synthetic " : ""), XKeysymToString (keysym)); } if (x == -1) fprintf (stderr, "\n"); else fprintf (stderr, " at %d,%d.\n", x, y); } } /* If any widgets want to handle this event, let them. */ dispatch_event (si, &event.x_event); /* If we got a MotionNotify event, figure out what screen it was on and poll the mouse there: if the mouse hasn't moved far enough to count as "real" motion, then ignore this event. */ if (event.x_event.xany.type == MotionNotify) { int i; for (i = 0; i < si->nscreens; i++) if (event.x_event.xmotion.root == RootWindowOfScreen (si->screens[i].screen)) break; if (i < si->nscreens) { if (!pointer_moved_p (&si->screens[i], False)) continue; } } /* We got a user event. If we're waiting for the user to become active, this is it. If we're waiting until the user becomes idle, reset the timers (since now we have longer to wait.) */ if (!until_idle_p) { if (si->demoing_p && (event.x_event.xany.type == MotionNotify || event.x_event.xany.type == KeyRelease)) /* When we're demoing a single hack, mouse motion doesn't cause deactivation. Only clicks and keypresses do. */ ; else { /* If we're not demoing, then any activity causes deactivation. */ why = (event.x_event.xany.type == MotionNotify ?"mouse motion": event.x_event.xany.type == KeyPress?"keyboard activity": event.x_event.xany.type == ButtonPress ? "mouse click" : "unknown user activity"); goto DONE; } } else reset_timers (si); break; case PropertyNotify: if (event.x_event.xproperty.state == PropertyNewValue && event.x_event.xproperty.atom == XA_NET_WM_USER_TIME) { /* Let's just assume that they only ever set USER_TIME to the current time, and don't do something stupid like repeatedly setting it to 20 minutes ago. */ why = "WM_USER_TIME"; if (p->debug_p) { Window w = event.x_event.xproperty.window; XWindowAttributes xgwa; int i; XGetWindowAttributes (si->dpy, w, &xgwa); for (i = 0; i < si->nscreens; i++) if (xgwa.root == RootWindowOfScreen (si->screens[i].screen)) break; fprintf (stderr,"%s: %d: %s on 0x%lx\n", blurb(), i, why, (unsigned long) w); } if (until_idle_p) reset_timers (si); else goto DONE; } break; default: #ifdef HAVE_MIT_SAVER_EXTENSION if (event.x_event.type == si->mit_saver_ext_event_number) { /* This event's number is that of the MIT-SCREEN-SAVER server extension. This extension has one event number, and the event itself contains sub-codes that say what kind of event it was (an "idle" or "not-idle" event.) */ if (event.sevent.state == ScreenSaverOn) { int i = 0; if (p->verbose_p) fprintf (stderr, "%s: MIT ScreenSaverOn event received.\n", blurb()); /* Get the "real" server window(s) out of the way as soon as possible. */ for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (ssi->server_mit_saver_window && window_exists_p (si->dpy, ssi->server_mit_saver_window)) XUnmapWindow (si->dpy, ssi->server_mit_saver_window); } if (event.sevent.kind != ScreenSaverExternal) { fprintf (stderr, "%s: ScreenSaverOn event wasn't of type External!\n", blurb()); } if (until_idle_p) { why = "MIT ScreenSaverOn"; goto DONE; } } else if (event.sevent.state == ScreenSaverOff) { if (p->verbose_p) fprintf (stderr, "%s: MIT ScreenSaverOff event received.\n", blurb()); if (!until_idle_p) { why = "MIT ScreenSaverOff"; goto DONE; } } else fprintf (stderr, "%s: unknown MIT-SCREEN-SAVER event %d received!\n", blurb(), event.sevent.state); } else #endif /* HAVE_MIT_SAVER_EXTENSION */ #ifdef HAVE_SGI_SAVER_EXTENSION if (event.x_event.type == (si->sgi_saver_ext_event_number + ScreenSaverStart)) { /* The SGI SCREEN_SAVER server extension has two event numbers, and this event matches the "idle" event. */ if (p->verbose_p) fprintf (stderr, "%s: SGI ScreenSaverStart event received.\n", blurb()); if (until_idle_p) { why = "SGI ScreenSaverStart"; goto DONE; } } else if (event.x_event.type == (si->sgi_saver_ext_event_number + ScreenSaverEnd)) { /* The SGI SCREEN_SAVER server extension has two event numbers, and this event matches the "idle" event. */ if (p->verbose_p) fprintf (stderr, "%s: SGI ScreenSaverEnd event received.\n", blurb()); if (!until_idle_p) { why = "SGI ScreenSaverEnd"; goto DONE; } } else #endif /* HAVE_SGI_SAVER_EXTENSION */ #ifdef HAVE_XINPUT /* If we got a MotionNotify event, check to see if the mouse has moved far enough to count as "real" motion, if not, then ignore this event. */ if ((si->num_xinput_devices > 0) && (event.x_event.type == si->xinput_DeviceMotionNotify)) { XDeviceMotionEvent *dme = (XDeviceMotionEvent *) &event; poll_mouse_data *last_poll_mouse = NULL; int d; for (d = 0; d < si->num_xinput_devices; d++) { if (si->xinput_devices[d].device->device_id == dme->deviceid) { last_poll_mouse = &(si->xinput_devices[d].last_poll_mouse); break; } } if (last_poll_mouse) { poll_mouse_data this_poll_mouse; this_poll_mouse.root_x = dme->x_root; this_poll_mouse.root_y = dme->y_root; this_poll_mouse.child = dme->subwindow; this_poll_mouse.mask = dme->device_state; this_poll_mouse.time = dme->time / 1000; /* milliseconds */ if (!device_pointer_moved_p (si, last_poll_mouse, &this_poll_mouse, False, "device", dme->deviceid)) continue; } else if (p->debug_p) fprintf (stderr, "%s: received MotionNotify from unknown device %d\n", blurb(), (int) dme->deviceid); } if ((!until_idle_p) && (si->num_xinput_devices > 0) && (event.x_event.type == si->xinput_DeviceMotionNotify || event.x_event.type == si->xinput_DeviceButtonPress)) /* Ignore DeviceButtonRelease, see ButtonRelease comment above. */ { dispatch_event (si, &event.x_event); if (si->demoing_p && event.x_event.type == si->xinput_DeviceMotionNotify) /* When we're demoing a single hack, mouse motion doesn't cause deactivation. Only clicks and keypresses do. */ ; else /* If we're not demoing, then any activity causes deactivation. */ { why = (event.x_event.type == si->xinput_DeviceMotionNotify ? "XI mouse motion" : event.x_event.type == si->xinput_DeviceButtonPress ? "XI mouse click" : "unknown XINPUT event"); goto DONE; } } else #endif /* HAVE_XINPUT */ #ifdef HAVE_RANDR if (si->using_randr_extension && (event.x_event.type == (si->randr_event_number + RRScreenChangeNotify))) { /* The Resize and Rotate extension sends an event when the size, rotation, or refresh rate of any screen has changed. */ if (p->verbose_p) { /* XRRRootToScreen is in Xrandr.h 1.4, 2001/06/07 */ int screen = XRRRootToScreen (si->dpy, event.xrr_event.window); fprintf (stderr, "%s: %d: screen change event received\n", blurb(), screen); } # ifdef RRScreenChangeNotifyMask /* Inform Xlib that it's ok to update its data structures. */ XRRUpdateConfiguration (&event.x_event); /* Xrandr.h 1.9, 2002/09/29 */ # endif /* RRScreenChangeNotifyMask */ /* Resize the existing xscreensaver windows and cached ssi data. */ if (update_screen_layout (si)) { if (p->verbose_p) { fprintf (stderr, "%s: new layout:\n", blurb()); describe_monitor_layout (si); } resize_screensaver_window (si); } } else #endif /* HAVE_RANDR */ /* Just some random event. Let the Widgets handle it, if desired. */ dispatch_event (si, &event.x_event); } } DONE: if (p->verbose_p) { if (! why) why = "unknown reason"; fprintf (stderr, "%s: %s (%s)\n", blurb(), (until_idle_p ? "user is idle" : "user is active"), why); } /* If there's a user event on the queue, swallow it. If we're using a server extension, and the user becomes active, we get the extension event before the user event -- so the keypress or motion or whatever is still on the queue. This makes "unfade" not work, because it sees that event, and bugs out. (This problem doesn't exhibit itself without an extension, because in that case, there's only one event generated by user activity, not two.) */ if (!until_idle_p && si->locked_p) swallow_unlock_typeahead_events (si, &event.x_event); else while (XCheckMaskEvent (si->dpy, (KeyPressMask|ButtonPressMask|PointerMotionMask), &event.x_event)) ; if (si->check_pointer_timer_id) { XtRemoveTimeOut (si->check_pointer_timer_id); si->check_pointer_timer_id = 0; } if (si->timer_id) { XtRemoveTimeOut (si->timer_id); si->timer_id = 0; } if (until_idle_p && si->cycle_id) /* no cycle timer when inactive */ abort (); } /* Some crap for dealing with /proc/interrupts. On Linux systems, it's possible to see the hardware interrupt count associated with the keyboard. We can therefore use that as another method of detecting idleness. Why is it a good idea to do this? Because it lets us detect keyboard activity that is not associated with X events. For example, if the user has switched to another virtual console, it's good for xscreensaver to not be running graphics hacks on the (non-visible) X display. The common complaint that checking /proc/interrupts addresses is that the user is playing Quake on a non-X console, and the GL hacks are perceptibly slowing the game... This is tricky for a number of reasons. * First, we must be sure to only do this when running on an X server that is on the local machine (because otherwise, we'd be reacting to the wrong keyboard.) The way we do this is by noting that the $DISPLAY is pointing to display 0 on the local machine. It *could* be that display 1 is also on the local machine (e.g., two X servers, each on a different virtual-terminal) but it's also possible that screen 1 is an X terminal, using this machine as the host. So we can't take that chance. * Second, one can only access these interrupt numbers in a completely and utterly brain-damaged way. You would think that one would use an ioctl for this. But no. The ONLY way to get this information is to open the pseudo-file /proc/interrupts AS A FILE, and read the numbers out of it TEXTUALLY. Because this is Unix, and all the world's a file, and the only real data type is the short-line sequence of ASCII bytes. Now it's all well and good that the /proc/interrupts pseudo-file exists; that's a clever idea, and a useful API for things that are already textually oriented, like shell scripts, and users doing interactive debugging sessions. But to make a *C PROGRAM* open a file and parse the textual representation of integers out of it is just insane. * Third, you can't just hold the file open, and fseek() back to the beginning to get updated data! If you do that, the data never changes. And I don't want to call open() every five seconds, because I don't want to risk going to disk for any inodes. It turns out that if you dup() it early, then each copy gets fresh data, so we can get around that in this way (but for how many releases, one might wonder?) * Fourth, the format of the output of the /proc/interrupts file is undocumented, and has changed several times already! In Linux 2.0.33, even on a multiprocessor machine, it looks like this: 0: 309453991 timer 1: 4771729 keyboard but in Linux 2.2 and 2.4 kernels with MP machines, it looks like this: CPU0 CPU1 0: 1671450 1672618 IO-APIC-edge timer 1: 13037 13495 IO-APIC-edge keyboard and in Linux 2.6, it's gotten even goofier: now there are two lines labelled "i8042". One of them is the keyboard, and one of them is the PS/2 mouse -- and of course, you can't tell them apart, except by wiggling the mouse and noting which one changes: CPU0 CPU1 1: 32051 30864 IO-APIC-edge i8042 12: 476577 479913 IO-APIC-edge i8042 Joy! So how are we expected to parse that? Well, this code doesn't parse it: it saves the first line with the string "keyboard" (or "i8042") in it, and does a string-comparison to note when it has changed. If there are two "i8042" lines, we assume the first is the keyboard and the second is the mouse (doesn't matter which is which, really, as long as we don't compare them against each other.) Thanks to Nat Friedman for figuring out most of this crap. Note that if you have a serial or USB mouse, or a USB keyboard, it won't detect it. That's because there's no way to tell the difference between a serial mouse and a general serial port, and all USB devices look the same from here. It would be somewhat unfortunate to have the screensaver turn off when the modem on COM1 burped, or when a USB disk was accessed. */ #ifdef HAVE_PROC_INTERRUPTS #define PROC_INTERRUPTS "/proc/interrupts" Bool query_proc_interrupts_available (saver_info *si, const char **why) { /* We can use /proc/interrupts if $DISPLAY points to :0, and if the "/proc/interrupts" file exists and is readable. */ FILE *f; if (why) *why = 0; if (!display_is_on_console_p (si)) { if (why) *why = "not on primary console"; return False; } f = fopen (PROC_INTERRUPTS, "r"); if (!f) { if (why) *why = "does not exist"; return False; } fclose (f); return True; } static Bool proc_interrupts_activity_p (saver_info *si) { static FILE *f0 = 0; FILE *f1 = 0; int fd; static char last_kbd_line[255] = { 0, }; static char last_ptr_line[255] = { 0, }; char new_line[sizeof(last_kbd_line)]; Bool checked_kbd = False, kbd_changed = False; Bool checked_ptr = False, ptr_changed = False; int i8042_count = 0; if (!f0) { /* First time -- open the file. */ f0 = fopen (PROC_INTERRUPTS, "r"); if (!f0) { char buf[255]; sprintf(buf, "%s: error opening %s", blurb(), PROC_INTERRUPTS); perror (buf); goto FAIL; } # if defined(HAVE_FCNTL) && defined(FD_CLOEXEC) /* Close this fd upon exec instead of inheriting / leaking it. */ if (fcntl (fileno (f0), F_SETFD, FD_CLOEXEC) != 0) perror ("fcntl: CLOEXEC:"); # endif } if (f0 == (FILE *) -1) /* means we got an error initializing. */ return False; fd = dup (fileno (f0)); if (fd < 0) { char buf[255]; sprintf(buf, "%s: could not dup() the %s fd", blurb(), PROC_INTERRUPTS); perror (buf); goto FAIL; } f1 = fdopen (fd, "r"); if (!f1) { char buf[255]; sprintf(buf, "%s: could not fdopen() the %s fd", blurb(), PROC_INTERRUPTS); perror (buf); goto FAIL; } /* Actually, I'm unclear on why this fseek() is necessary, given the timing of the dup() above, but it is. */ if (fseek (f1, 0, SEEK_SET) != 0) { char buf[255]; sprintf(buf, "%s: error rewinding %s", blurb(), PROC_INTERRUPTS); perror (buf); goto FAIL; } /* Now read through the pseudo-file until we find the "keyboard", "PS/2 mouse", or "i8042" lines. */ while (fgets (new_line, sizeof(new_line)-1, f1)) { Bool i8042_p = !!strstr (new_line, "i8042"); if (i8042_p) i8042_count++; if (strchr (new_line, ',')) { /* Ignore any line that has a comma on it: this is because a setup like this: 12: 930935 XT-PIC usb-uhci, PS/2 Mouse is really bad news. It *looks* like we can note mouse activity from that line, but really, that interrupt gets fired any time any USB device has activity! So we have to ignore any shared IRQs. */ } else if (!checked_kbd && (strstr (new_line, "keyboard") || (i8042_p && i8042_count == 1))) { /* Assume the keyboard interrupt is the line that says "keyboard", or the *first* line that says "i8042". */ kbd_changed = (*last_kbd_line && !!strcmp (new_line, last_kbd_line)); strcpy (last_kbd_line, new_line); checked_kbd = True; } else if (!checked_ptr && (strstr (new_line, "PS/2 Mouse") || (i8042_p && i8042_count == 2))) { /* Assume the mouse interrupt is the line that says "PS/2 mouse", or the *second* line that says "i8042". */ ptr_changed = (*last_ptr_line && !!strcmp (new_line, last_ptr_line)); strcpy (last_ptr_line, new_line); checked_ptr = True; } if (checked_kbd && checked_ptr) break; } if (checked_kbd || checked_ptr) { fclose (f1); if (si->prefs.debug_p && (kbd_changed || ptr_changed)) fprintf (stderr, "%s: /proc/interrupts activity: %s\n", blurb(), ((kbd_changed && ptr_changed) ? "mouse and kbd" : kbd_changed ? "kbd" : ptr_changed ? "mouse" : "ERR")); return (kbd_changed || ptr_changed); } /* If we got here, we didn't find either a "keyboard" or a "PS/2 Mouse" line in the file at all. */ fprintf (stderr, "%s: no keyboard or mouse data in %s?\n", blurb(), PROC_INTERRUPTS); FAIL: if (f1) fclose (f1); if (f0 && f0 != (FILE *) -1) fclose (f0); f0 = (FILE *) -1; return False; } #endif /* HAVE_PROC_INTERRUPTS */ /* This timer goes off every few minutes, whether the user is idle or not, to try and clean up anything that has gone wrong. It calls disable_builtin_screensaver() so that if xset has been used, or some other program (like xlock) has messed with the XSetScreenSaver() settings, they will be set back to sensible values (if a server extension is in use, messing with xlock can cause xscreensaver to never get a wakeup event, and could cause monitor power-saving to occur, and all manner of heinousness.) If the screen is currently blanked, it raises the window, in case some other window has been mapped on top of it. If the screen is currently blanked, and there is no hack running, it clears the window, in case there is an error message printed on it (we don't want the error message to burn in.) */ static void watchdog_timer (XtPointer closure, XtIntervalId *id) { saver_info *si = (saver_info *) closure; saver_preferences *p = &si->prefs; disable_builtin_screensaver (si, False); /* If the DPMS settings on the server have changed, change them back to what ~/.xscreensaver says they should be. */ sync_server_dpms_settings (si->dpy, (p->dpms_enabled_p && p->mode != DONT_BLANK), p->dpms_quickoff_p, p->dpms_standby / 1000, p->dpms_suspend / 1000, p->dpms_off / 1000, False); if (si->screen_blanked_p) { Bool running_p = screenhack_running_p (si); if (si->dbox_up_p) { if (si->prefs.debug_p) fprintf (stderr, "%s: dialog box is up: not raising screen.\n", blurb()); } else { if (si->prefs.debug_p) fprintf (stderr, "%s: watchdog timer raising %sscreen.\n", blurb(), (running_p ? "" : "and clearing ")); raise_window (si, True, True, running_p); } if (screenhack_running_p (si) && !monitor_powered_on_p (si)) { int i; if (si->prefs.verbose_p) fprintf (stderr, "%s: X says monitor has powered down; " "killing running hacks.\n", blurb()); for (i = 0; i < si->nscreens; i++) kill_screenhack (&si->screens[i]); } /* Re-schedule this timer. The watchdog timer defaults to a bit less than the hack cycle period, but is never longer than one hour. */ si->watchdog_id = 0; reset_watchdog_timer (si, True); } } void reset_watchdog_timer (saver_info *si, Bool on_p) { saver_preferences *p = &si->prefs; if (si->watchdog_id) { XtRemoveTimeOut (si->watchdog_id); si->watchdog_id = 0; } if (on_p && p->watchdog_timeout) { si->watchdog_id = XtAppAddTimeOut (si->app, p->watchdog_timeout, watchdog_timer, (XtPointer) si); if (p->debug_p) fprintf (stderr, "%s: restarting watchdog_timer (%ld, %ld)\n", blurb(), p->watchdog_timeout, si->watchdog_id); } } /* It's possible that a race condition could have led to the saver window being unexpectedly still mapped. This can happen like so: - screen is blanked - hack is launched - that hack tries to grab a screen image (it does this by first unmapping the saver window, then remapping it.) - hack unmaps window - hack waits - user becomes active - hack re-maps window (*) - driver kills subprocess - driver unmaps window (**) The race is that (*) might have been sent to the server before the client process was killed, but, due to scheduling randomness, might not have been received by the server until after (**). In other words, (*) and (**) might happen out of order, meaning the driver will unmap the window, and then after that, the recently-dead client will re-map it. This leaves the user locked out (it looks like a desktop, but it's not!) To avoid this: after un-blanking the screen, we launch a timer that wakes up once a second for ten seconds, and makes damned sure that the window is still unmapped. */ void de_race_timer (XtPointer closure, XtIntervalId *id) { saver_info *si = (saver_info *) closure; saver_preferences *p = &si->prefs; int secs = 1; if (id == 0) /* if id is 0, this is the initialization call. */ { si->de_race_ticks = 10; if (p->verbose_p) fprintf (stderr, "%s: starting de-race timer (%d seconds.)\n", blurb(), si->de_race_ticks); } else { int i; XSync (si->dpy, False); for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; Window w = ssi->screensaver_window; XWindowAttributes xgwa; XGetWindowAttributes (si->dpy, w, &xgwa); if (xgwa.map_state != IsUnmapped) { if (p->verbose_p) fprintf (stderr, "%s: %d: client race! emergency unmap 0x%lx.\n", blurb(), i, (unsigned long) w); XUnmapWindow (si->dpy, w); } else if (p->debug_p) fprintf (stderr, "%s: %d: (de-race of 0x%lx is cool.)\n", blurb(), i, (unsigned long) w); } XSync (si->dpy, False); si->de_race_ticks--; } if (id && *id == si->de_race_id) si->de_race_id = 0; if (si->de_race_id) abort(); if (si->de_race_ticks <= 0) { si->de_race_id = 0; if (p->verbose_p) fprintf (stderr, "%s: de-race completed.\n", blurb()); } else { si->de_race_id = XtAppAddTimeOut (si->app, secs * 1000, de_race_timer, closure); } } xscreensaver-5.34/driver/subprocs.c000664 000767 000767 00000106701 12612473763 017202 0ustar00jwzjwz000000 000000 /* subprocs.c --- choosing, spawning, and killing screenhacks. * xscreensaver, Copyright (c) 1991-2015 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include /* not used for much... */ #ifndef ESRCH # include #endif #include /* sys/resource.h needs this for timeval */ #include /* for PATH_MAX */ #ifdef HAVE_SYS_WAIT_H # include /* for waitpid() and associated macros */ #endif #ifdef HAVE_SETRLIMIT # include /* for setrlimit() and RLIMIT_AS */ #endif #ifdef VMS # include # include /* for close */ # include /* for getpid */ # define pid_t int # define fork vfork #endif /* VMS */ #include /* for the signal names */ #if !defined(SIGCHLD) && defined(SIGCLD) # define SIGCHLD SIGCLD #endif #if 0 /* putenv() is declared in stdlib.h on modern linux systems. */ #ifdef HAVE_PUTENV extern int putenv (/* const char * */); /* getenv() is in stdlib.h... */ #endif #endif extern int kill (pid_t, int); /* signal() is in sys/signal.h... */ /* This file doesn't need the Xt headers, so stub these types out... */ #undef XtPointer #define XtAppContext void* #define XrmDatabase void* #define XtIntervalId void* #define XtPointer void* #define Widget void* #include "xscreensaver.h" #include "exec.h" #include "yarandom.h" #include "visual.h" /* for id_to_visual() */ extern saver_info *global_si_kludge; /* I hate C so much... */ /* Used when printing error/debugging messages from signal handlers. */ static const char * no_malloc_number_to_string (long num) { static char string[128] = ""; int num_digits; Bool negative_p = False; num_digits = 0; if (num == 0) return "0"; if (num < 0) { negative_p = True; num = -num; } while ((num > 0) && (num_digits < sizeof(string) - 1)) { int digit; digit = (int) num % 10; num_digits++; string[sizeof(string) - 1 - num_digits] = digit + '0'; num /= 10; } if (negative_p) { num_digits++; string[sizeof(string) - 1 - num_digits] = '-'; } return string + sizeof(string) - 1 - num_digits; } /* Like write(), but runs strlen() on the arg to get the length. */ static int write_string (int fd, const char *str) { return write (fd, str, strlen (str)); } static int write_long (int fd, long n) { const char *str = no_malloc_number_to_string (n); return write_string (fd, str); } /* RLIMIT_AS (called RLIMIT_VMEM on some systems) controls the maximum size of a process's address space, i.e., the maximal brk(2) and mmap(2) values. Setting this lets you put a cap on how much memory a process can allocate. Except the "and mmap()" part kinda makes this useless, since many GL implementations end up using mmap() to pull the whole frame buffer into memory (or something along those lines) making it appear processes are using hundreds of megabytes when in fact they're using very little, and we end up capping their mallocs prematurely. YAY! */ #if defined(RLIMIT_VMEM) && !defined(RLIMIT_AS) # define RLIMIT_AS RLIMIT_VMEM #endif static void limit_subproc_memory (int address_space_limit, Bool verbose_p) { /* This has caused way more problems than it has solved... Let's just completely ignore the "memoryLimit" option now. */ #undef HAVE_SETRLIMIT #if defined(HAVE_SETRLIMIT) && defined(RLIMIT_AS) struct rlimit r; if (address_space_limit < 10 * 1024) /* let's not be crazy */ return; if (getrlimit (RLIMIT_AS, &r) != 0) { char buf [512]; sprintf (buf, "%s: getrlimit(RLIMIT_AS) failed", blurb()); perror (buf); return; } r.rlim_cur = address_space_limit; if (setrlimit (RLIMIT_AS, &r) != 0) { char buf [512]; sprintf (buf, "%s: setrlimit(RLIMIT_AS, {%lu, %lu}) failed", blurb(), r.rlim_cur, r.rlim_max); perror (buf); return; } if (verbose_p) { int i = address_space_limit; char buf[100]; if (i >= (1<<30) && i == ((i >> 30) << 30)) sprintf(buf, "%dG", i >> 30); else if (i >= (1<<20) && i == ((i >> 20) << 20)) sprintf(buf, "%dM", i >> 20); else if (i >= (1<<10) && i == ((i >> 10) << 10)) sprintf(buf, "%dK", i >> 10); else sprintf(buf, "%d bytes", i); fprintf (stderr, "%s: limited pid %lu address space to %s.\n", blurb(), (unsigned long) getpid (), buf); } #endif /* HAVE_SETRLIMIT && RLIMIT_AS */ } /* Management of child processes, and de-zombification. */ enum job_status { job_running, /* the process is still alive */ job_stopped, /* we have sent it a STOP signal */ job_killed, /* we have sent it a TERM signal */ job_dead /* we have wait()ed for it, and it's dead -- this state only occurs so that we can avoid calling free() from a signal handler. Shortly after going into this state, the list element will be removed. */ }; struct screenhack_job { char *name; pid_t pid; int screen; enum job_status status; struct screenhack_job *next; }; static struct screenhack_job *jobs = 0; /* for debugging -- nothing calls this, but it's useful to invoke from gdb. */ void show_job_list (void); void show_job_list (void) { struct screenhack_job *job; fprintf(stderr, "%s: job list:\n", blurb()); for (job = jobs; job; job = job->next) fprintf (stderr, " %5ld: %2d: (%s) %s\n", (long) job->pid, job->screen, (job->status == job_running ? "running" : job->status == job_stopped ? "stopped" : job->status == job_killed ? " killed" : job->status == job_dead ? " dead" : " ???"), job->name); fprintf (stderr, "\n"); } static void clean_job_list (void); static struct screenhack_job * make_job (pid_t pid, int screen, const char *cmd) { struct screenhack_job *job = (struct screenhack_job *) malloc (sizeof(*job)); static char name [1024]; const char *in = cmd; char *out = name; int got_eq = 0; int first = 1; clean_job_list(); AGAIN: while (isspace(*in)) in++; /* skip whitespace */ while (!isspace(*in) && *in != ':') { if (*in == '=') got_eq = 1; *out++ = *in++; /* snarf first token */ } if (got_eq) /* if the first token was FOO=bar */ { /* then get the next token instead. */ got_eq = 0; out = name; first = 0; goto AGAIN; } while (isspace(*in)) in++; /* skip whitespace */ *out = 0; job->name = strdup(name); job->pid = pid; job->screen = screen; job->status = job_running; job->next = jobs; jobs = job; return jobs; } static void free_job (struct screenhack_job *job) { if (!job) return; else if (job == jobs) jobs = jobs->next; else { struct screenhack_job *job2, *prev; for (prev = 0, job2 = jobs; job2; prev = job2, job2 = job2->next) if (job2 == job) { prev->next = job->next; break; } } free(job->name); free(job); } /* Cleans out dead jobs from the jobs list -- this must only be called from the main thread, not from a signal handler. */ static void clean_job_list (void) { struct screenhack_job *job, *prev, *next; for (prev = 0, job = jobs, next = (job ? job->next : 0); job; prev = job, job = next, next = (job ? job->next : 0)) { if (job->status == job_dead) { if (prev) prev->next = next; free_job (job); job = prev; } } } static struct screenhack_job * find_job (pid_t pid) { struct screenhack_job *job; for (job = jobs; job; job = job->next) if (job->pid == pid) return job; return 0; } static void await_dying_children (saver_info *si); #ifndef VMS static void describe_dead_child (saver_info *, pid_t, int wait_status); #endif /* Semaphore to temporarily turn the SIGCHLD handler into a no-op. Don't alter this directly -- use block_sigchld() / unblock_sigchld(). */ static int block_sigchld_handler = 0; #ifdef HAVE_SIGACTION sigset_t #else /* !HAVE_SIGACTION */ int #endif /* !HAVE_SIGACTION */ block_sigchld (void) { #ifdef HAVE_SIGACTION struct sigaction sa; sigset_t child_set; memset (&sa, 0, sizeof (sa)); sa.sa_handler = SIG_IGN; sigaction (SIGPIPE, &sa, NULL); sigemptyset (&child_set); sigaddset (&child_set, SIGCHLD); sigprocmask (SIG_BLOCK, &child_set, 0); #else /* !HAVE_SIGACTION */ signal (SIGPIPE, SIG_IGN); #endif /* !HAVE_SIGACTION */ block_sigchld_handler++; #ifdef HAVE_SIGACTION return child_set; #else /* !HAVE_SIGACTION */ return 0; #endif /* !HAVE_SIGACTION */ } void unblock_sigchld (void) { if (block_sigchld_handler <= 0) abort(); if (block_sigchld_handler <= 1) /* only unblock if count going to 0 */ { #ifdef HAVE_SIGACTION struct sigaction sa; sigset_t child_set; memset(&sa, 0, sizeof (sa)); sa.sa_handler = SIG_DFL; sigaction(SIGPIPE, &sa, NULL); sigemptyset(&child_set); sigaddset(&child_set, SIGCHLD); sigprocmask(SIG_UNBLOCK, &child_set, 0); #else /* !HAVE_SIGACTION */ signal(SIGPIPE, SIG_DFL); #endif /* !HAVE_SIGACTION */ } block_sigchld_handler--; } static int kill_job (saver_info *si, pid_t pid, int signal) { saver_preferences *p = &si->prefs; struct screenhack_job *job; int status = -1; clean_job_list(); if (in_signal_handler_p) /* This function should not be called from the signal handler. */ abort(); block_sigchld(); /* we control the horizontal... */ job = find_job (pid); if (!job || !job->pid || job->status == job_killed) { if (p->verbose_p) fprintf (stderr, "%s: no child %ld to signal!\n", blurb(), (long) pid); goto DONE; } switch (signal) { case SIGTERM: job->status = job_killed; break; #ifdef SIGSTOP /* #### there must be a way to do this on VMS... */ case SIGSTOP: job->status = job_stopped; break; case SIGCONT: job->status = job_running; break; #endif /* SIGSTOP */ default: abort(); } if (p->verbose_p) fprintf (stderr, "%s: %d: %s pid %lu (%s)\n", blurb(), job->screen, (job->status == job_killed ? "killing" : job->status == job_stopped ? "suspending" : "resuming"), (unsigned long) job->pid, job->name); status = kill (job->pid, signal); if (p->verbose_p && status < 0) { if (errno == ESRCH) fprintf (stderr, "%s: %d: child process %lu (%s) was already dead.\n", blurb(), job->screen, (unsigned long) job->pid, job->name); else { char buf [1024]; sprintf (buf, "%s: %d: couldn't kill child process %lu (%s)", blurb(), job->screen, (unsigned long) job->pid, job->name); perror (buf); } } await_dying_children (si); DONE: unblock_sigchld(); if (block_sigchld_handler < 0) abort(); clean_job_list(); return status; } #ifdef SIGCHLD static RETSIGTYPE sigchld_handler (int sig) { saver_info *si = global_si_kludge; /* I hate C so much... */ in_signal_handler_p++; if (si->prefs.debug_p) { /* Don't call fprintf() from signal handlers, as it might malloc. fprintf(stderr, "%s: got SIGCHLD%s\n", blurb(), (block_sigchld_handler ? " (blocked)" : "")); */ write_string (STDERR_FILENO, blurb()); write_string (STDERR_FILENO, ": got SIGCHLD"); if (block_sigchld_handler) write_string (STDERR_FILENO, " (blocked)\n"); else write_string (STDERR_FILENO, "\n"); } if (block_sigchld_handler < 0) abort(); else if (block_sigchld_handler == 0) { block_sigchld(); await_dying_children (si); unblock_sigchld(); } init_sigchld(); in_signal_handler_p--; } #endif /* SIGCHLD */ #ifndef VMS static void await_dying_children (saver_info *si) { while (1) { int wait_status = 0; pid_t kid; errno = 0; kid = waitpid (-1, &wait_status, WNOHANG|WUNTRACED); if (si->prefs.debug_p) { if (kid < 0 && errno) { /* Don't call fprintf() from signal handlers, as it might malloc. fprintf (stderr, "%s: waitpid(-1) ==> %ld (%d)\n", blurb(), (long) kid, errno); */ write_string (STDERR_FILENO, blurb()); write_string (STDERR_FILENO, ": waitpid(-1) ==> "); write_long (STDERR_FILENO, (long) kid); write_string (STDERR_FILENO, " ("); write_long (STDERR_FILENO, (long) errno); write_string (STDERR_FILENO, ")\n"); } else { /* Don't call fprintf() from signal handlers, as it might malloc. fprintf (stderr, "%s: waitpid(-1) ==> %ld\n", blurb(), (long) kid); */ write_string (STDERR_FILENO, blurb()); write_string (STDERR_FILENO, ": waitpid(-1) ==> "); write_long (STDERR_FILENO, (long) kid); write_string (STDERR_FILENO, "\n"); } } /* 0 means no more children to reap. -1 means error -- except "interrupted system call" isn't a "real" error, so if we get that, we should just try again. */ if (kid == 0 || (kid < 0 && errno != EINTR)) break; describe_dead_child (si, kid, wait_status); } } static void describe_dead_child (saver_info *si, pid_t kid, int wait_status) { int i; saver_preferences *p = &si->prefs; struct screenhack_job *job = find_job (kid); const char *name = job ? job->name : ""; int screen_no = job ? job->screen : 0; if (WIFEXITED (wait_status)) { int exit_status = WEXITSTATUS (wait_status); /* Treat exit code as a signed 8-bit quantity. */ if (exit_status & 0x80) exit_status |= ~0xFF; /* One might assume that exiting with non-0 means something went wrong. But that loser xswarm exits with the code that it was killed with, so it *always* exits abnormally. Treat abnormal exits as "normal" (don't mention them) if we've just killed the subprocess. But mention them if they happen on their own. */ if (!job || (exit_status != 0 && (p->verbose_p || job->status != job_killed))) { /* Don't call fprintf() from signal handlers, as it might malloc. fprintf (stderr, "%s: %d: child pid %lu (%s) exited abnormally (code %d).\n", blurb(), screen_no, (unsigned long) kid, name, exit_status); */ write_string (STDERR_FILENO, blurb()); write_string (STDERR_FILENO, ": "); write_long (STDERR_FILENO, (long) screen_no); write_string (STDERR_FILENO, ": child pid "); write_long (STDERR_FILENO, (long) kid); write_string (STDERR_FILENO, " ("); write_string (STDERR_FILENO, name); write_string (STDERR_FILENO, ") exited abnormally (code "); write_long (STDERR_FILENO, (long) exit_status); write_string (STDERR_FILENO, ").\n"); } else if (p->verbose_p) { /* Don't call fprintf() from signal handlers, as it might malloc. fprintf (stderr, "%s: %d: child pid %lu (%s) exited normally.\n", blurb(), screen_no, (unsigned long) kid, name); */ write_string (STDERR_FILENO, blurb()); write_string (STDERR_FILENO, ": "); write_long (STDERR_FILENO, (long) screen_no); write_string (STDERR_FILENO, ": child pid "); write_long (STDERR_FILENO, (long) kid); write_string (STDERR_FILENO, " ("); write_string (STDERR_FILENO, name); write_string (STDERR_FILENO, ") exited normally.\n"); } if (job) job->status = job_dead; } else if (WIFSIGNALED (wait_status)) { if (p->verbose_p || !job || job->status != job_killed || WTERMSIG (wait_status) != SIGTERM) { /* Don't call fprintf() from signal handlers, as it might malloc. fprintf (stderr, "%s: %d: child pid %lu (%s) terminated with %s.\n", blurb(), screen_no, (unsigned long) kid, name, signal_name (WTERMSIG(wait_status))); */ write_string (STDERR_FILENO, blurb()); write_string (STDERR_FILENO, ": "); write_long (STDERR_FILENO, (long) screen_no); write_string (STDERR_FILENO, ": child pid "); write_long (STDERR_FILENO, (long) kid); write_string (STDERR_FILENO, " ("); write_string (STDERR_FILENO, name); write_string (STDERR_FILENO, ") terminated with signal "); write_long (STDERR_FILENO, WTERMSIG(wait_status)); write_string (STDERR_FILENO, ".\n"); } if (job) job->status = job_dead; } else if (WIFSTOPPED (wait_status)) { if (p->verbose_p) { /* Don't call fprintf() from signal handlers, as it might malloc. fprintf (stderr, "%s: child pid %lu (%s) stopped with %s.\n", blurb(), (unsigned long) kid, name, signal_name (WSTOPSIG (wait_status))); */ write_string (STDERR_FILENO, blurb()); write_string (STDERR_FILENO, ": "); write_long (STDERR_FILENO, (long) screen_no); write_string (STDERR_FILENO, ": child pid "); write_long (STDERR_FILENO, (long) kid); write_string (STDERR_FILENO, " ("); write_string (STDERR_FILENO, name); write_string (STDERR_FILENO, ") stopped with signal "); write_long (STDERR_FILENO, WSTOPSIG(wait_status)); write_string (STDERR_FILENO, ".\n"); } if (job) job->status = job_stopped; } else { /* Don't call fprintf() from signal handlers, as it might malloc. fprintf (stderr, "%s: child pid %lu (%s) died in a mysterious way!", blurb(), (unsigned long) kid, name); */ write_string (STDERR_FILENO, blurb()); write_string (STDERR_FILENO, ": "); write_long (STDERR_FILENO, (long) screen_no); write_string (STDERR_FILENO, ": child pid "); write_long (STDERR_FILENO, (long) kid); write_string (STDERR_FILENO, " ("); write_string (STDERR_FILENO, name); write_string (STDERR_FILENO, ") died in a mysterious way!"); if (job) job->status = job_dead; } /* Clear out the pid so that screenhack_running_p() knows it's dead. */ if (!job || job->status == job_dead) for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (kid == ssi->pid) ssi->pid = 0; } } #else /* VMS */ static void await_dying_children (saver_info *si) { return; } #endif /* VMS */ void init_sigchld (void) { #ifdef SIGCHLD # ifdef HAVE_SIGACTION /* Thanks to Tom Kelly */ static Bool sigchld_initialized_p = 0; if (!sigchld_initialized_p) { struct sigaction action, old; action.sa_handler = sigchld_handler; sigemptyset(&action.sa_mask); action.sa_flags = 0; if (sigaction(SIGCHLD, &action, &old) < 0) { char buf [255]; sprintf (buf, "%s: couldn't catch SIGCHLD", blurb()); perror (buf); } sigchld_initialized_p = True; } # else /* !HAVE_SIGACTION */ if (((long) signal (SIGCHLD, sigchld_handler)) == -1L) { char buf [255]; sprintf (buf, "%s: couldn't catch SIGCHLD", blurb()); perror (buf); } # endif /* !HAVE_SIGACTION */ #endif /* SIGCHLD */ } static Bool select_visual_of_hack (saver_screen_info *ssi, screenhack *hack) { saver_info *si = ssi->global; saver_preferences *p = &si->prefs; Bool selected; if (hack->visual && *hack->visual) selected = select_visual(ssi, hack->visual); else selected = select_visual(ssi, 0); if (!selected && (p->verbose_p || si->demoing_p)) fprintf (stderr, (si->demoing_p ? "%s: warning, no \"%s\" visual for \"%s\".\n" : "%s: no \"%s\" visual; skipping \"%s\".\n"), blurb(), (hack->visual && *hack->visual ? hack->visual : "???"), hack->command); return selected; } static void print_path_error (const char *program) { char buf [512]; char *cmd = strdup (program); char *token = strchr (cmd, ' '); if (token) *token = 0; sprintf (buf, "%s: could not execute \"%.100s\"", blurb(), cmd); free (cmd); perror (buf); if (errno == ENOENT && (token = getenv("PATH"))) { # ifndef PATH_MAX # ifdef MAXPATHLEN # define PATH_MAX MAXPATHLEN # else # define PATH_MAX 2048 # endif # endif char path[PATH_MAX]; fprintf (stderr, "\n"); *path = 0; # if defined(HAVE_GETCWD) if (! getcwd (path, sizeof(path))) *path = 0; # elif defined(HAVE_GETWD) getwd (path); # endif if (*path) fprintf (stderr, " Current directory is: %s\n", path); fprintf (stderr, " PATH is:\n"); token = strtok (strdup(token), ":"); while (token) { fprintf (stderr, " %s\n", token); token = strtok(0, ":"); } fprintf (stderr, "\n"); } } /* Executes the command in another process. Command may be any single command acceptable to /bin/sh. It may include wildcards, but no semicolons. If successful, the pid of the other process is returned. Otherwise, -1 is returned and an error may have been printed to stderr. */ pid_t fork_and_exec (saver_screen_info *ssi, const char *command) { saver_info *si = ssi->global; saver_preferences *p = &si->prefs; pid_t forked; switch ((int) (forked = fork ())) { case -1: { char buf [255]; sprintf (buf, "%s: couldn't fork", blurb()); perror (buf); break; } case 0: close (ConnectionNumber (si->dpy)); /* close display fd */ limit_subproc_memory (p->inferior_memory_limit, p->verbose_p); hack_subproc_environment (ssi->screen, ssi->screensaver_window); if (p->verbose_p) fprintf (stderr, "%s: %d: spawning \"%s\" in pid %lu.\n", blurb(), ssi->number, command, (unsigned long) getpid ()); exec_command (p->shell, command, p->nice_inferior); /* If that returned, we were unable to exec the subprocess. Print an error message, if desired. */ if (! p->ignore_uninstalled_p) print_path_error (command); exit (1); /* exits child fork */ break; default: /* parent */ (void) make_job (forked, ssi->number, command); break; } return forked; } void spawn_screenhack (saver_screen_info *ssi) { saver_info *si = ssi->global; saver_preferences *p = &si->prefs; XFlush (si->dpy); if (!monitor_powered_on_p (si)) { if (si->prefs.verbose_p) fprintf (stderr, "%s: %d: X says monitor has powered down; " "not launching a hack.\n", blurb(), ssi->number); return; } if (p->screenhacks_count) { screenhack *hack; pid_t forked; char buf [255]; int new_hack = -1; int retry_count = 0; Bool force = False; AGAIN: if (p->screenhacks_count < 1) { /* No hacks at all */ new_hack = -1; } else if (p->screenhacks_count == 1) { /* Exactly one hack in the list */ new_hack = 0; } else if (si->selection_mode == -1) { /* Select the next hack, wrapping. */ new_hack = (ssi->current_hack + 1) % p->screenhacks_count; } else if (si->selection_mode == -2) { /* Select the previous hack, wrapping. */ if (ssi->current_hack < 0) new_hack = p->screenhacks_count - 1; else new_hack = ((ssi->current_hack + p->screenhacks_count - 1) % p->screenhacks_count); } else if (si->selection_mode > 0) { /* Select a specific hack, by number (via the ACTIVATE command.) */ new_hack = ((si->selection_mode - 1) % p->screenhacks_count); force = True; } else if (p->mode == ONE_HACK && p->selected_hack >= 0) { /* Select a specific hack, by number (via "One Saver" mode.) */ new_hack = p->selected_hack; force = True; } else if (p->mode == BLANK_ONLY || p->mode == DONT_BLANK) { new_hack = -1; } else if (p->mode == RANDOM_HACKS_SAME && ssi->number != 0) { /* Use the same hack that's running on screen 0. (Assumes this function was called on screen 0 first.) */ new_hack = si->screens[0].current_hack; } else /* (p->mode == RANDOM_HACKS) */ { /* Select a random hack (but not the one we just ran.) */ while ((new_hack = random () % p->screenhacks_count) == ssi->current_hack) ; } if (new_hack < 0) /* don't run a hack */ { ssi->current_hack = -1; if (si->selection_mode < 0) si->selection_mode = 0; return; } ssi->current_hack = new_hack; hack = p->screenhacks[ssi->current_hack]; /* If the hack is disabled, or there is no visual for this hack, then try again (move forward, or backward, or re-randomize.) Unless this hack was specified explicitly, in which case, use it regardless. */ if (force) select_visual_of_hack (ssi, hack); if (!force && (!hack->enabled_p || !on_path_p (hack->command) || !select_visual_of_hack (ssi, hack))) { if (++retry_count > (p->screenhacks_count*4)) { /* Uh, oops. Odds are, there are no suitable visuals, and we're looping. Give up. (This is totally lame, what we should do is make a list of suitable hacks at the beginning, then only loop over them.) */ if (p->verbose_p) fprintf(stderr, "%s: %d: no programs enabled, or no suitable visuals.\n", blurb(), ssi->number); return; } else goto AGAIN; } /* Turn off "next" and "prev" modes now, but "demo" mode is only turned off by explicit action. */ if (si->selection_mode < 0) si->selection_mode = 0; forked = fork_and_exec (ssi, hack->command); switch ((int) forked) { case -1: /* fork failed */ case 0: /* child fork (can't happen) */ sprintf (buf, "%s: couldn't fork", blurb()); perror (buf); restore_real_vroot (si); saver_exit (si, 1, "couldn't fork"); break; default: ssi->pid = forked; break; } } store_saver_status (si); /* store current hack number */ } void kill_screenhack (saver_screen_info *ssi) { saver_info *si = ssi->global; if (ssi->pid) kill_job (si, ssi->pid, SIGTERM); ssi->pid = 0; } void suspend_screenhack (saver_screen_info *ssi, Bool suspend_p) { #ifdef SIGSTOP /* older VMS doesn't have it... */ saver_info *si = ssi->global; if (ssi->pid) kill_job (si, ssi->pid, (suspend_p ? SIGSTOP : SIGCONT)); #endif /* SIGSTOP */ } /* Called when we're exiting abnormally, to kill off the subproc. */ void emergency_kill_subproc (saver_info *si) { int i; #ifdef SIGCHLD signal (SIGCHLD, SIG_IGN); #endif /* SIGCHLD */ for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (ssi->pid) { kill_job (si, ssi->pid, SIGTERM); ssi->pid = 0; } } } Bool screenhack_running_p (saver_info *si) { Bool any_running_p = False; int i; for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (ssi->pid) any_running_p = True; } return any_running_p; } /* Environment variables. */ /* Modifies $PATH in the current environment, so that if DEFAULT_PATH_PREFIX is defined, the xscreensaver daemon will search that directory for hacks. */ void hack_environment (saver_info *si) { #if defined(HAVE_PUTENV) && defined(DEFAULT_PATH_PREFIX) static const char *def_path = DEFAULT_PATH_PREFIX; if (def_path && *def_path) { const char *opath = getenv("PATH"); char *npath; if (! opath) opath = "/bin:/usr/bin"; /* WTF */ npath = (char *) malloc(strlen(def_path) + strlen(opath) + 20); strcpy (npath, "PATH="); strcat (npath, def_path); strcat (npath, ":"); strcat (npath, opath); if (putenv (npath)) abort (); /* don't free (npath) -- some implementations of putenv (BSD 4.4, glibc 2.0) copy the argument, but some (libc4,5, glibc 2.1.2) do not. So we must leak it (and/or the previous setting). Yay. */ } #endif /* HAVE_PUTENV && DEFAULT_PATH_PREFIX */ } void hack_subproc_environment (Screen *screen, Window saver_window) { /* Store $DISPLAY into the environment, so that the $DISPLAY variable that the spawned processes inherit is correct. First, it must be on the same host and display as the value of -display passed in on our command line (which is not necessarily the same as what our $DISPLAY variable is.) Second, the screen number in the $DISPLAY passed to the subprocess should be the screen on which this particular hack is running -- not the display specification which the driver itself is using, since the driver ignores its screen number and manages all existing screens. Likewise, store a window ID in $XSCREENSAVER_WINDOW -- this will allow us to (eventually) run multiple hacks in Xinerama mode, where each hack has the same $DISPLAY but a different piece of glass. */ Display *dpy = DisplayOfScreen (screen); const char *odpy = DisplayString (dpy); char *ndpy = (char *) malloc (strlen(odpy) + 20); char *nssw = (char *) malloc (40); char *s, *c; strcpy (ndpy, "DISPLAY="); s = ndpy + strlen(ndpy); strcpy (s, odpy); /* We have to find the last colon since it is the boundary between hostname & screen - IPv6 numeric format addresses may have many colons before that point, and DECnet addresses always have two colons */ c = strrchr(s,':'); /* skip to last colon */ if (c != NULL) s = c+1; while (isdigit(*s)) s++; /* skip over dpy number */ while (*s == '.') s++; /* skip over dot */ if (s[-1] != '.') *s++ = '.'; /* put on a dot */ sprintf(s, "%d", screen_number (screen)); /* put on screen number */ sprintf (nssw, "XSCREENSAVER_WINDOW=0x%lX", (unsigned long) saver_window); /* Allegedly, BSD 4.3 didn't have putenv(), but nobody runs such systems any more, right? It's not Posix, but everyone seems to have it. */ #ifdef HAVE_PUTENV if (putenv (ndpy)) abort (); if (putenv (nssw)) abort (); /* don't free ndpy/nssw -- some implementations of putenv (BSD 4.4, glibc 2.0) copy the argument, but some (libc4,5, glibc 2.1.2) do not. So we must leak it (and/or the previous setting). Yay. */ #endif /* HAVE_PUTENV */ } /* GL crap */ Visual * get_best_gl_visual (saver_info *si, Screen *screen) { pid_t forked; int fds [2]; int in, out; int errfds[2]; int errin = -1, errout = -1; char buf[1024]; char *av[10]; int ac = 0; av[ac++] = "xscreensaver-gl-helper"; av[ac] = 0; if (pipe (fds)) { perror ("error creating pipe:"); return 0; } in = fds [0]; out = fds [1]; if (!si->prefs.verbose_p) { if (pipe (errfds)) { perror ("error creating pipe:"); return 0; } errin = errfds [0]; errout = errfds [1]; } block_sigchld(); /* This blocks it in the parent and child, to avoid racing. It is never unblocked in the child before the child exits, but that doesn't matter. */ switch ((int) (forked = fork ())) { case -1: { sprintf (buf, "%s: couldn't fork", blurb()); perror (buf); saver_exit (si, 1, 0); } case 0: { close (in); /* don't need this one */ close (ConnectionNumber (si->dpy)); /* close display fd */ if (dup2 (out, STDOUT_FILENO) < 0) /* pipe stdout */ { perror ("could not dup() a new stdout:"); return 0; } if (! si->prefs.verbose_p) { close(errin); if (dup2 (errout, STDERR_FILENO) < 0) { perror ("could not dup() a new stderr:"); return 0; } } hack_subproc_environment (screen, 0); /* set $DISPLAY */ execvp (av[0], av); /* shouldn't return. */ if (errno != ENOENT /* || si->prefs.verbose_p */ ) { /* Ignore "no such file or directory" errors. Issue all other exec errors, though. */ sprintf (buf, "%s: running %s", blurb(), av[0]); perror (buf); } exit (1); /* exits fork */ break; } default: { int result = 0; int wait_status = 0; FILE *f = fdopen (in, "r"); unsigned long v = 0; char c; close (out); /* don't need this one */ *buf = 0; if (! fgets (buf, sizeof(buf)-1, f)) *buf = 0; fclose (f); if (! si->prefs.verbose_p) { close (errout); close (errin); } /* Wait for the child to die. */ waitpid (-1, &wait_status, 0); unblock_sigchld(); /* child is dead and waited, unblock now. */ if (1 == sscanf (buf, "0x%lx %c", &v, &c)) result = (int) v; if (result == 0) { if (si->prefs.verbose_p) { int L = strlen(buf); fprintf (stderr, "%s: %s did not report a GL visual!\n", blurb(), av[0]); if (L && buf[L-1] == '\n') buf[--L] = 0; if (*buf) fprintf (stderr, "%s: %s said: \"%s\"\n", blurb(), av[0], buf); } return 0; } else { Visual *v = id_to_visual (screen, result); if (si->prefs.verbose_p) fprintf (stderr, "%s: %d: %s: GL visual is 0x%X%s.\n", blurb(), screen_number (screen), av[0], result, (v == DefaultVisualOfScreen (screen) ? " (default)" : "")); return v; } } } abort(); } /* Restarting the xscreensaver process from scratch. */ static char **saved_argv; void save_argv (int argc, char **argv) { saved_argv = (char **) calloc (argc+2, sizeof (char *)); saved_argv [argc] = 0; while (argc--) { int i = strlen (argv [argc]) + 1; saved_argv [argc] = (char *) malloc (i); memcpy (saved_argv [argc], argv [argc], i); } } /* Re-execs the process with the arguments in saved_argv. Does not return. */ void restart_process (saver_info *si) { fflush (stdout); fflush (stderr); shutdown_stderr (si); if (si->prefs.verbose_p) { int i; fprintf (stderr, "%s: re-executing", blurb()); for (i = 0; saved_argv[i]; i++) fprintf (stderr, " %s", saved_argv[i]); fprintf (stderr, "\n"); } describe_uids (si, stderr); fprintf (stderr, "\n"); fflush (stdout); fflush (stderr); execvp (saved_argv [0], saved_argv); /* shouldn't return */ { char buf [512]; sprintf (buf, "%s: could not restart process", blurb()); perror(buf); fflush(stderr); abort(); } } xscreensaver-5.34/driver/exec.c000644 000767 000767 00000017013 12166052460 016250 0ustar00jwzjwz000000 000000 /* exec.c --- executes a program in *this* pid, without an intervening process. * xscreensaver, Copyright (c) 1991-2013 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ /* I don't believe what a sorry excuse for an operating system UNIX is! - I want to spawn a process. - I want to know it's pid so that I can kill it. - I would like to receive a message when it dies of natural causes. - I want the spawned process to have user-specified arguments. If shell metacharacters are present (wildcards, backquotes, etc), the only way to parse those arguments is to run a shell to do the parsing for you. And the only way to know the pid of the process is to fork() and exec() it in the spawned side of the fork. But if you're running a shell to parse your arguments, this gives you the pid of the *shell*, not the pid of the *process* that you're actually interested in, which is an *inferior* of the shell. This also means that the SIGCHLD you get applies to the shell, not its inferior. (Why isn't that sufficient? I don't remember any more, but it turns out that it isn't.) So, the only solution, when metacharacters are present, is to force the shell to exec() its inferior. What a fucking hack! We prepend "exec " to the command string, and hope it doesn't contain unquoted semicolons or ampersands (we don't search for them, because we don't want to prohibit their use in quoted strings (messages, for example) and parsing out the various quote characters is too much of a pain.) (Actually, Clint Wong points out that process groups might be used to take care of this problem; this may be worth considering some day, except that, 1: this code works now, so why fix it, and 2: from what I've seen in Emacs, dealing with process groups isn't especially portable.) */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include #include #ifndef ESRCH # include #endif #if defined(HAVE_SETPRIORITY) && defined(PRIO_PROCESS) # include /* for setpriority() and PRIO_PROCESS */ /* and also setrlimit() and RLIMIT_AS */ #endif #ifdef VMS # include # include /* for close */ # include /* for getpid */ # define pid_t int # define fork vfork #endif /* VMS */ #include "exec.h" extern const char *blurb (void); static void nice_process (int nice_level); #ifndef VMS static void exec_simple_command (const char *command) { char *av[1024]; int ac = 0; char *token = strtok (strdup(command), " \t"); while (token) { av[ac++] = token; token = strtok(0, " \t"); } av[ac] = 0; execvp (av[0], av); /* shouldn't return. */ } static void exec_complex_command (const char *shell, const char *command) { char *av[5]; int ac = 0; char *command2 = (char *) malloc (strlen (command) + 10); const char *s; int got_eq = 0; const char *after_vars; /* Skip leading whitespace. */ while (*command == ' ' || *command == '\t') command++; /* If the string has a series of tokens with "=" in them at them, set `after_vars' to point into the string after those tokens and any trailing whitespace. Otherwise, after_vars == command. */ after_vars = command; for (s = command; *s; s++) { if (*s == '=') got_eq = 1; else if (*s == ' ') { if (got_eq) { while (*s == ' ' || *s == '\t') s++; after_vars = s; got_eq = 0; } else break; } } *command2 = 0; strncat (command2, command, after_vars - command); strcat (command2, "exec "); strcat (command2, after_vars); /* We have now done these transformations: "foo -x -y" ==> "exec foo -x -y" "BLAT=foop foo -x" ==> "BLAT=foop exec foo -x" "BLAT=foop A=b foo -x" ==> "BLAT=foop A=b exec foo -x" */ /* Invoke the shell as "/bin/sh -c 'exec prog -arg -arg ...'" */ av [ac++] = (char *) shell; av [ac++] = "-c"; av [ac++] = command2; av [ac] = 0; execvp (av[0], av); /* shouldn't return. */ } #else /* VMS */ static void exec_vms_command (const char *command) { system (command); fflush (stderr); fflush (stdout); exit (1); /* Note that this only exits a child fork. */ } #endif /* !VMS */ void exec_command (const char *shell, const char *command, int nice_level) { int hairy_p; #ifndef VMS nice_process (nice_level); hairy_p = !!strpbrk (command, "*?$&!<>[];`'\\\"="); /* note: = is in the above because of the sh syntax "FOO=bar cmd". */ if (getuid() == (uid_t) 0 || geteuid() == (uid_t) 0) { /* If you're thinking of commenting this out, think again. If you do so, you will open a security hole. Mail jwz so that he may enlighten you as to the error of your ways. */ fprintf (stderr, "%s: we're still running as root! Disaster!\n", blurb()); exit (-1); } if (hairy_p) /* If it contains any shell metacharacters, do it the hard way, and fork a shell to parse the arguments for us. */ exec_complex_command (shell, command); else /* Otherwise, we can just exec the program directly. */ exec_simple_command (command); #else /* VMS */ exec_vms_command (command); #endif /* VMS */ } /* Setting process priority */ static void nice_process (int nice_level) { if (nice_level == 0) return; #if defined(HAVE_NICE) { int old_nice = nice (0); int n = nice_level - old_nice; errno = 0; if (nice (n) == -1 && errno != 0) { char buf [512]; sprintf (buf, "%s: nice(%d) failed", blurb(), n); perror (buf); } } #elif defined(HAVE_SETPRIORITY) && defined(PRIO_PROCESS) if (setpriority (PRIO_PROCESS, getpid(), nice_level) != 0) { char buf [512]; sprintf (buf, "%s: setpriority(PRIO_PROCESS, %lu, %d) failed", blurb(), (unsigned long) getpid(), nice_level); perror (buf); } #else fprintf (stderr, "%s: don't know how to change process priority on this system.\n", blurb()); #endif } /* Whether the given command exists on $PATH. (Anything before the first space is considered to be the program name.) */ int on_path_p (const char *program) { int result = 0; struct stat st; char *cmd = strdup (program); char *token = strchr (cmd, ' '); char *path = 0; int L; if (token) *token = 0; token = 0; if (strchr (cmd, '/')) { result = (0 == stat (cmd, &st)); goto DONE; } path = getenv("PATH"); if (!path || !*path) goto DONE; L = strlen (cmd); path = strdup (path); token = strtok (path, ":"); while (token) { char *p2 = (char *) malloc (strlen (token) + L + 3); strcpy (p2, token); strcat (p2, "/"); strcat (p2, cmd); result = (0 == stat (p2, &st)); free (p2); if (result) goto DONE; token = strtok (0, ":"); } DONE: free (cmd); if (path) free (path); return result; } xscreensaver-5.34/driver/xset.c000644 000767 000767 00000026765 11767545147 016344 0ustar00jwzjwz000000 000000 /* xset.c --- interacting with server extensions and the builtin screensaver. * xscreensaver, Copyright (c) 1991-2008 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include /* This file doesn't need the Xt headers, so stub these types out... */ #undef XtPointer #define XtAppContext void* #define XrmDatabase void* #define XtIntervalId void* #define XtPointer void* #define Widget void* #include "xscreensaver.h" #ifdef _VROOT_H_ ERROR! You must not include vroot.h in this file. #endif /* MIT SCREEN-SAVER server extension hackery. */ #ifdef HAVE_MIT_SAVER_EXTENSION # include static int ignore_all_errors_ehandler (Display *dpy, XErrorEvent *error) { return 0; } static void init_mit_saver_extension (saver_info *si) { int i; Pixmap *blank_pix = (Pixmap *) calloc (sizeof(Pixmap), si->nscreens); for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; XID kill_id = 0; Atom kill_type = 0; Window root = RootWindowOfScreen (ssi->screen); blank_pix[i] = XCreatePixmap (si->dpy, root, 1, 1, 1); /* Kill off the old MIT-SCREEN-SAVER client if there is one. This tends to generate X errors, though (possibly due to a bug in the server extension itself?) so just ignore errors here. */ if (XScreenSaverGetRegistered (si->dpy, XScreenNumberOfScreen (ssi->screen), &kill_id, &kill_type) && kill_id != blank_pix[i]) { XErrorHandler old_handler = XSetErrorHandler (ignore_all_errors_ehandler); XKillClient (si->dpy, kill_id); XSync (si->dpy, False); XSetErrorHandler (old_handler); } XScreenSaverSelectInput (si->dpy, root, ScreenSaverNotifyMask); XScreenSaverRegister (si->dpy, XScreenNumberOfScreen (ssi->screen), (XID) blank_pix[i], XA_PIXMAP); } free(blank_pix); } #endif /* HAVE_MIT_SAVER_EXTENSION */ #ifdef HAVE_XINPUT /* XInputExtension device support */ Bool query_xinput_extension (saver_info *si) { XExtCodes codes; return XQueryExtension (si->dpy, INAME, &codes.major_opcode, &codes.first_event, &codes.first_error); } void init_xinput_extension (saver_info *si) { int i, ndevices; int class; XDeviceInfo *list; XDevice *dev; XAnyClassPtr pClass; XEventClass *event_list; int nevents = 0; /* skip if already initialized */ if (si->num_xinput_devices && si->xinput_devices) return; si->num_xinput_devices = 0; list = XListInputDevices (si->dpy, &ndevices); if (list == NULL) { si->xinput_devices = NULL; return; } /* We only care about 3 event types per device (DeviceButtonPress, DeviceButtonRelease, and DeviceMotionNotify), hence the "* 3" for the event count. */ event_list = calloc(ndevices * 3, sizeof(XEventClass)); if (event_list == NULL) return; si->xinput_devices = calloc(ndevices, sizeof(struct xinput_dev_info)); if (si->xinput_devices == NULL) { free(event_list); return; } for (i = 0; i < ndevices; i++) { if ((list[i].use == IsXExtensionDevice) #ifdef IsXExtensionPointer || (list[i].use == IsXExtensionPointer) #endif ) { struct xinput_dev_info *dev_info = &si->xinput_devices[si->num_xinput_devices]; Bool device_we_want = False; if (si->prefs.debug_p) fprintf(stderr, "Extension device #%2d: XID=%2d type=%3d name=\"%s\"\n", i, (int) list[i].id, (int) list[i].type, list[i].name); dev = XOpenDevice (si->dpy, list[i].id); if (!dev) continue; dev_info->device = dev; pClass = list[i].inputclassinfo; for (class = 0; class < list[i].num_classes; class++) { switch (pClass->class) { case ButtonClass: if (((XButtonInfo *) pClass)->num_buttons > 0) { /* Macros set values in the second & third arguments */ DeviceButtonPress (dev, si->xinput_DeviceButtonPress, dev_info->press); event_list[nevents++] = dev_info->press; DeviceButtonRelease (dev, si->xinput_DeviceButtonRelease, dev_info->release); event_list[nevents++] = dev_info->release; device_we_want = True; } break; case ValuatorClass: if (((XValuatorInfo *) pClass)->num_axes > 0) { DeviceMotionNotify (dev, si->xinput_DeviceMotionNotify, dev_info->valuator); event_list[nevents++] = dev_info->valuator; device_we_want = True; } break; default: /* ignore other classes of devices/events */ break; } pClass = (XAnyClassPtr) & ((char *) pClass)[pClass->length]; } if (device_we_want) si->num_xinput_devices++; else XCloseDevice (si->dpy, dev); } } if (list) XFreeDeviceList (list); if ((nevents == 0) || (si->num_xinput_devices == 0)) { free(event_list); free(si->xinput_devices); si->xinput_devices = NULL; si->num_xinput_devices = 0; return; } for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; Window root = RootWindowOfScreen (ssi->screen); XSelectExtensionEvent (si->dpy, root, event_list, nevents); } free(event_list); } #if 0 /* not used */ static void close_xinput_extension (saver_info *si) { int i; for (i = 0; i < si->num_xinput_devices; i++) XCloseDevice (si->dpy, si->xinput_devices[i].device); free(si->xinput_devices); si->xinput_devices = NULL; si->num_xinput_devices = 0; } #endif #endif /* HAVE_XINPUT */ /* SGI SCREEN_SAVER server extension hackery. */ #ifdef HAVE_SGI_SAVER_EXTENSION # include static void init_sgi_saver_extension (saver_info *si) { saver_preferences *p = &si->prefs; int i; if (si->screen_blanked_p) /* If you mess with this while the server thinks it's active, the server crashes. */ return; for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; XScreenSaverDisable (si->dpy, XScreenNumberOfScreen(ssi->screen)); if (! XScreenSaverEnable (si->dpy, XScreenNumberOfScreen(ssi->screen))) { fprintf (stderr, "%s: SGI SCREEN_SAVER extension exists, but can't be initialized;\n\ perhaps some other screensaver program is already running?\n", blurb()); si->using_sgi_saver_extension = False; return; } } } #endif /* HAVE_SGI_SAVER_EXTENSION */ /* Figuring out what the appropriate XSetScreenSaver() parameters are (one wouldn't expect this to be rocket science.) */ void disable_builtin_screensaver (saver_info *si, Bool unblank_screen_p) { saver_preferences *p = &si->prefs; int current_server_timeout, current_server_interval; int current_prefer_blank, current_allow_exp; int desired_server_timeout, desired_server_interval; int desired_prefer_blank, desired_allow_exp; XGetScreenSaver (si->dpy, ¤t_server_timeout, ¤t_server_interval, ¤t_prefer_blank, ¤t_allow_exp); desired_server_timeout = current_server_timeout; desired_server_interval = current_server_interval; desired_prefer_blank = current_prefer_blank; desired_allow_exp = current_allow_exp; /* On SGIs, if interval is non-zero, it is the number of seconds after screen saving starts at which the monitor should be powered down. Obviously I don't want that, so set it to 0 (meaning "never".) Power saving is disabled if DontPreferBlanking, but in that case, we don't get extension events either. So we can't turn it off that way. Note: if you're running Irix 6.3 (O2), you may find that your monitor is powering down anyway, regardless of the xset settings. This is fixed by installing SGI patches 2447 and 2537. */ desired_server_interval = 0; /* I suspect (but am not sure) that DontAllowExposures might have something to do with powering off the monitor as well, at least on some systems that don't support XDPMS? Who knows... */ desired_allow_exp = AllowExposures; if (si->using_mit_saver_extension || si->using_sgi_saver_extension) { desired_server_timeout = (p->timeout / 1000); /* The SGI extension won't give us events unless blanking is on. I think (unsure right now) that the MIT extension is the opposite. */ if (si->using_sgi_saver_extension) desired_prefer_blank = PreferBlanking; else desired_prefer_blank = DontPreferBlanking; } else { /* When we're not using an extension, set the server-side timeout to 0, so that the server never gets involved with screen blanking, and we do it all ourselves. (However, when we *are* using an extension, we tell the server when to notify us, and rather than blanking the screen, the server will send us an X event telling us to blank.) */ desired_server_timeout = 0; } /* XSetScreenSaver() generates BadValue if either timeout parameter exceeds 15 bits (signed short.) That is 09:06:07. */ if (desired_server_timeout > 0x7FFF) desired_server_timeout = 0x7FFF; if (desired_server_interval > 0x7FFF) desired_server_interval = 0x7FFF; if (desired_server_timeout != current_server_timeout || desired_server_interval != current_server_interval || desired_prefer_blank != current_prefer_blank || desired_allow_exp != current_allow_exp) { if (p->verbose_p) fprintf (stderr, "%s: disabling server builtin screensaver:\n" "%s: (xset s %d %d; xset s %s; xset s %s)\n", blurb(), blurb(), desired_server_timeout, desired_server_interval, (desired_prefer_blank ? "blank" : "noblank"), (desired_allow_exp ? "expose" : "noexpose")); XSetScreenSaver (si->dpy, desired_server_timeout, desired_server_interval, desired_prefer_blank, desired_allow_exp); XSync(si->dpy, False); } #if defined(HAVE_MIT_SAVER_EXTENSION) || defined(HAVE_SGI_SAVER_EXTENSION) { static Bool extension_initted = False; if (!extension_initted) { extension_initted = True; # ifdef HAVE_MIT_SAVER_EXTENSION if (si->using_mit_saver_extension) init_mit_saver_extension(si); # endif # ifdef HAVE_SGI_SAVER_EXTENSION if (si->using_sgi_saver_extension) init_sgi_saver_extension(si); # endif } } #endif /* HAVE_MIT_SAVER_EXTENSION || HAVE_SGI_SAVER_EXTENSION */ if (unblank_screen_p) /* Turn off the server builtin saver if it is now running. */ XForceScreenSaver (si->dpy, ScreenSaverReset); } xscreensaver-5.34/driver/splash.c000644 000767 000767 00000067550 12342222551 016625 0ustar00jwzjwz000000 000000 /* xscreensaver, Copyright (c) 1991-2014 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include "xscreensaver.h" #include "resources.h" #undef MAX #define MAX(a,b) ((a)>(b)?(a):(b)) void draw_shaded_rectangle (Display *dpy, Window window, int x, int y, int width, int height, int thickness, unsigned long top_color, unsigned long bottom_color) { XPoint points[4]; XGCValues gcv; GC gc1, gc2; if (thickness == 0) return; gcv.foreground = top_color; gc1 = XCreateGC (dpy, window, GCForeground, &gcv); gcv.foreground = bottom_color; gc2 = XCreateGC (dpy, window, GCForeground, &gcv); points [0].x = x; points [0].y = y; points [1].x = x + width; points [1].y = y; points [2].x = x + width - thickness; points [2].y = y + thickness; points [3].x = x; points [3].y = y + thickness; XFillPolygon (dpy, window, gc1, points, 4, Convex, CoordModeOrigin); points [0].x = x; points [0].y = y + thickness; points [1].x = x; points [1].y = y + height; points [2].x = x + thickness; points [2].y = y + height - thickness; points [3].x = x + thickness; points [3].y = y + thickness; XFillPolygon (dpy, window, gc1, points, 4, Convex, CoordModeOrigin); points [0].x = x + width; points [0].y = y; points [1].x = x + width - thickness; points [1].y = y + thickness; points [2].x = x + width - thickness; points [2].y = y + height - thickness; points [3].x = x + width; points [3].y = y + height - thickness; XFillPolygon (dpy, window, gc2, points, 4, Convex, CoordModeOrigin); points [0].x = x; points [0].y = y + height; points [1].x = x + width; points [1].y = y + height; points [2].x = x + width; points [2].y = y + height - thickness; points [3].x = x + thickness; points [3].y = y + height - thickness; XFillPolygon (dpy, window, gc2, points, 4, Convex, CoordModeOrigin); XFreeGC (dpy, gc1); XFreeGC (dpy, gc2); } int string_width (XFontStruct *font, char *s) { return XTextWidth(font, s, strlen(s)); } static void update_splash_window (saver_info *si); static void draw_splash_window (saver_info *si); static void destroy_splash_window (saver_info *si); static void unsplash_timer (XtPointer closure, XtIntervalId *id); static void do_demo (saver_screen_info *ssi); #ifdef PREFS_BUTTON static void do_prefs (saver_screen_info *ssi); #endif /* PREFS_BUTTON */ static void do_help (saver_screen_info *ssi); struct splash_dialog_data { saver_screen_info *prompt_screen; XtIntervalId timer; Dimension width; Dimension height; char *heading_label; char *body_label; char *body2_label; char *body3_label; char *body4_label; char *demo_label; #ifdef PREFS_BUTTON char *prefs_label; #endif /* PREFS_BUTTON */ char *help_label; XFontStruct *heading_font; XFontStruct *body_font; XFontStruct *button_font; Pixel foreground; Pixel background; Pixel border; Pixel button_foreground; Pixel button_background; Pixel shadow_top; Pixel shadow_bottom; Dimension logo_width; Dimension logo_height; Dimension internal_border; Dimension shadow_width; Dimension button_width, button_height; Dimension demo_button_x, demo_button_y; #ifdef PREFS_BUTTON Dimension prefs_button_x, prefs_button_y; #endif /* PREFS_BUTTON */ Dimension help_button_x, help_button_y; Pixmap logo_pixmap; Pixmap logo_clipmask; int logo_npixels; unsigned long *logo_pixels; int pressed; }; void make_splash_dialog (saver_info *si) { saver_preferences *p = &si->prefs; int x, y, bw; XSetWindowAttributes attrs; unsigned long attrmask = 0; splash_dialog_data *sp; saver_screen_info *ssi; Colormap cmap; char *f; Bool whine = senescent_p (); if (whine) { /* If locking is not enabled, make sure they see the message. */ if (!p->lock_p) { si->prefs.splash_p = True; if (si->prefs.splash_duration < 5000) si->prefs.splash_duration = 5000; } si->prefs.splash_duration += 3000; } if (si->sp_data) return; if (!si->prefs.splash_p || si->prefs.splash_duration <= 0) return; ssi = &si->screens[mouse_screen (si)]; if (!ssi || !ssi->screen) return; /* WTF? Trying to splash while no screens connected? */ cmap = DefaultColormapOfScreen (ssi->screen); sp = (splash_dialog_data *) calloc (1, sizeof(*sp)); sp->prompt_screen = ssi; sp->heading_label = get_string_resource (si->dpy, "splash.heading.label", "Dialog.Label.Label"); sp->body_label = get_string_resource (si->dpy, "splash.body.label", "Dialog.Label.Label"); sp->body2_label = get_string_resource (si->dpy, "splash.body2.label", "Dialog.Label.Label"); sp->demo_label = get_string_resource (si->dpy, "splash.demo.label", "Dialog.Button.Label"); #ifdef PREFS_BUTTON sp->prefs_label = get_string_resource (si->dpy, "splash.prefs.label", "Dialog.Button.Label"); #endif /* PREFS_BUTTON */ sp->help_label = get_string_resource (si->dpy, "splash.help.label", "Dialog.Button.Label"); if (whine) { sp->body3_label = strdup("WARNING: This version is very old!"); sp->body4_label = strdup("Please upgrade!"); } if (!sp->heading_label) sp->heading_label = strdup("ERROR: REESOURCES NOT INSTALLED CORRECTLY"); if (!sp->body_label) sp->body_label = strdup("ERROR: REESOURCES NOT INSTALLED CORRECTLY"); if (!sp->body2_label) sp->body2_label = strdup("ERROR: REESOURCES NOT INSTALLED CORRECTLY"); if (!sp->demo_label) sp->demo_label = strdup("ERROR"); #ifdef PREFS_BUTTON if (!sp->prefs_label) sp->prefs_label = strdup("ERROR"); #endif /* PREFS_BUTTON */ if (!sp->help_label) sp->help_label = strdup("ERROR"); /* Put the version number in the label. */ { char *s = (char *) malloc (strlen(sp->heading_label) + 20); sprintf(s, sp->heading_label, si->version); free (sp->heading_label); sp->heading_label = s; } f = get_string_resource (si->dpy, "splash.headingFont", "Dialog.Font"); sp->heading_font = XLoadQueryFont (si->dpy, (f ? f : "fixed")); if (!sp->heading_font) sp->heading_font = XLoadQueryFont (si->dpy, "fixed"); if (f) free (f); f = get_string_resource(si->dpy, "splash.bodyFont", "Dialog.Font"); sp->body_font = XLoadQueryFont (si->dpy, (f ? f : "fixed")); if (!sp->body_font) sp->body_font = XLoadQueryFont (si->dpy, "fixed"); if (f) free (f); f = get_string_resource(si->dpy, "splash.buttonFont", "Dialog.Font"); sp->button_font = XLoadQueryFont (si->dpy, (f ? f : "fixed")); if (!sp->button_font) sp->button_font = XLoadQueryFont (si->dpy, "fixed"); if (f) free (f); sp->foreground = get_pixel_resource (si->dpy, cmap, "splash.foreground", "Dialog.Foreground"); sp->background = get_pixel_resource (si->dpy, cmap, "splash.background", "Dialog.Background"); sp->border = get_pixel_resource (si->dpy, cmap, "splash.borderColor", "Dialog.borderColor"); if (sp->foreground == sp->background) { /* Make sure the error messages show up. */ sp->foreground = BlackPixelOfScreen (ssi->screen); sp->background = WhitePixelOfScreen (ssi->screen); } sp->button_foreground = get_pixel_resource (si->dpy, cmap, "splash.Button.foreground", "Dialog.Button.Foreground"); sp->button_background = get_pixel_resource (si->dpy, cmap, "splash.Button.background", "Dialog.Button.Background"); sp->shadow_top = get_pixel_resource (si->dpy, cmap, "splash.topShadowColor", "Dialog.Foreground"); sp->shadow_bottom = get_pixel_resource (si->dpy, cmap, "splash.bottomShadowColor", "Dialog.Background"); sp->logo_width = get_integer_resource (si->dpy, "splash.logo.width", "Dialog.Logo.Width"); sp->logo_height = get_integer_resource (si->dpy, "splash.logo.height", "Dialog.Logo.Height"); sp->internal_border = get_integer_resource (si->dpy, "splash.internalBorderWidth", "Dialog.InternalBorderWidth"); sp->shadow_width = get_integer_resource (si->dpy, "splash.shadowThickness", "Dialog.ShadowThickness"); if (sp->logo_width == 0) sp->logo_width = 150; if (sp->logo_height == 0) sp->logo_height = 150; if (sp->internal_border == 0) sp->internal_border = 15; if (sp->shadow_width == 0) sp->shadow_width = 4; { int direction, ascent, descent; XCharStruct overall; sp->width = 0; sp->height = 0; /* Measure the heading_label. */ XTextExtents (sp->heading_font, sp->heading_label, strlen(sp->heading_label), &direction, &ascent, &descent, &overall); if (overall.width > sp->width) sp->width = overall.width; sp->height += ascent + descent; /* Measure the body_label. */ XTextExtents (sp->body_font, sp->body_label, strlen(sp->body_label), &direction, &ascent, &descent, &overall); if (overall.width > sp->width) sp->width = overall.width; sp->height += ascent + descent; /* Measure the body2_label. */ XTextExtents (sp->body_font, sp->body2_label, strlen(sp->body2_label), &direction, &ascent, &descent, &overall); if (overall.width > sp->width) sp->width = overall.width; sp->height += ascent + descent; /* Measure the optional body3_label. */ if (sp->body3_label) { XTextExtents (sp->heading_font, sp->body3_label, strlen(sp->body3_label), &direction, &ascent, &descent, &overall); if (overall.width > sp->width) sp->width = overall.width; XTextExtents (sp->heading_font, sp->body4_label, strlen(sp->body4_label), &direction, &ascent, &descent, &overall); if (overall.width > sp->width) sp->width = overall.width; sp->height += (ascent + descent) * 5; } { Dimension w2 = 0, w3 = 0, w4 = 0; Dimension h2 = 0, h3 = 0, h4 = 0; /* Measure the Demo button. */ XTextExtents (sp->button_font, sp->demo_label, strlen(sp->demo_label), &direction, &ascent, &descent, &overall); w2 = overall.width; h2 = ascent + descent; #ifdef PREFS_BUTTON /* Measure the Prefs button. */ XTextExtents (sp->button_font, sp->prefs_label, strlen(sp->prefs_label), &direction, &ascent, &descent, &overall); w3 = overall.width; h3 = ascent + descent; #else /* !PREFS_BUTTON */ w3 = 0; h3 = 0; #endif /* !PREFS_BUTTON */ /* Measure the Help button. */ XTextExtents (sp->button_font, sp->help_label, strlen(sp->help_label), &direction, &ascent, &descent, &overall); w4 = overall.width; h4 = ascent + descent; w2 = MAX(w2, w3); w2 = MAX(w2, w4); h2 = MAX(h2, h3); h2 = MAX(h2, h4); /* Add some horizontal padding inside the buttons. */ w2 += ascent; w2 += ((ascent + descent) / 2) + (sp->shadow_width * 2); h2 += ((ascent + descent) / 2) + (sp->shadow_width * 2); sp->button_width = w2; sp->button_height = h2; #ifdef PREFS_BUTTON w2 *= 3; #else /* !PREFS_BUTTON */ w2 *= 2; #endif /* !PREFS_BUTTON */ w2 += ((ascent + descent) * 2); /* for space between buttons */ if (w2 > sp->width) sp->width = w2; sp->height += h2; } sp->width += (sp->internal_border * 2); sp->height += (sp->internal_border * 3); if (sp->logo_height > sp->height) sp->height = sp->logo_height; else if (sp->height > sp->logo_height) sp->logo_height = sp->height; sp->logo_width = sp->logo_height; sp->width += sp->logo_width; } attrmask |= CWOverrideRedirect; attrs.override_redirect = True; attrmask |= CWEventMask; attrs.event_mask = (ExposureMask | ButtonPressMask | ButtonReleaseMask); { int sx = 0, sy = 0, w, h; int mouse_x = 0, mouse_y = 0; { Window pointer_root, pointer_child; int root_x, root_y, win_x, win_y; unsigned int mask; if (XQueryPointer (si->dpy, RootWindowOfScreen (ssi->screen), &pointer_root, &pointer_child, &root_x, &root_y, &win_x, &win_y, &mask)) { mouse_x = root_x; mouse_y = root_y; } } x = ssi->x; y = ssi->y; w = ssi->width; h = ssi->height; if (si->prefs.debug_p) w /= 2; x = sx + (((w + sp->width) / 2) - sp->width); y = sy + (((h + sp->height) / 2) - sp->height); if (x < sx) x = sx; if (y < sy) y = sy; } bw = get_integer_resource (si->dpy, "splash.borderWidth", "Dialog.BorderWidth"); si->splash_dialog = XCreateWindow (si->dpy, RootWindowOfScreen(ssi->screen), x, y, sp->width, sp->height, bw, DefaultDepthOfScreen (ssi->screen), InputOutput, DefaultVisualOfScreen(ssi->screen), attrmask, &attrs); XSetWindowBackground (si->dpy, si->splash_dialog, sp->background); XSetWindowBorder (si->dpy, si->splash_dialog, sp->border); sp->logo_pixmap = xscreensaver_logo (ssi->screen, /* same visual as si->splash_dialog */ DefaultVisualOfScreen (ssi->screen), si->splash_dialog, cmap, sp->background, &sp->logo_pixels, &sp->logo_npixels, &sp->logo_clipmask, True); XMapRaised (si->dpy, si->splash_dialog); XSync (si->dpy, False); si->sp_data = sp; sp->timer = XtAppAddTimeOut (si->app, si->prefs.splash_duration, unsplash_timer, (XtPointer) si); draw_splash_window (si); XSync (si->dpy, False); } static void draw_splash_window (saver_info *si) { splash_dialog_data *sp = si->sp_data; XGCValues gcv; GC gc1, gc2; int hspacing, vspacing, height; int x1, x2, x3, y1, y2; int sw; #ifdef PREFS_BUTTON int nbuttons = 3; #else /* !PREFS_BUTTON */ int nbuttons = 2; #endif /* !PREFS_BUTTON */ height = (sp->heading_font->ascent + sp->heading_font->descent + sp->body_font->ascent + sp->body_font->descent + sp->body_font->ascent + sp->body_font->descent + sp->button_font->ascent + sp->button_font->descent); vspacing = ((sp->height - (4 * sp->shadow_width) - (2 * sp->internal_border) - height) / 5); if (vspacing < 0) vspacing = 0; if (vspacing > (sp->heading_font->ascent * 2)) vspacing = (sp->heading_font->ascent * 2); gcv.foreground = sp->foreground; gc1 = XCreateGC (si->dpy, si->splash_dialog, GCForeground, &gcv); gc2 = XCreateGC (si->dpy, si->splash_dialog, GCForeground, &gcv); x1 = sp->logo_width; x3 = sp->width - (sp->shadow_width * 2); y1 = sp->internal_border; /* top heading */ XSetFont (si->dpy, gc1, sp->heading_font->fid); sw = string_width (sp->heading_font, sp->heading_label); x2 = (x1 + ((x3 - x1 - sw) / 2)); y1 += sp->heading_font->ascent; XDrawString (si->dpy, si->splash_dialog, gc1, x2, y1, sp->heading_label, strlen(sp->heading_label)); y1 += sp->heading_font->descent; /* text below top heading */ XSetFont (si->dpy, gc1, sp->body_font->fid); y1 += vspacing + sp->body_font->ascent; sw = string_width (sp->body_font, sp->body_label); x2 = (x1 + ((x3 - x1 - sw) / 2)); XDrawString (si->dpy, si->splash_dialog, gc1, x2, y1, sp->body_label, strlen(sp->body_label)); y1 += sp->body_font->descent; y1 += sp->body_font->ascent; sw = string_width (sp->body_font, sp->body2_label); x2 = (x1 + ((x3 - x1 - sw) / 2)); XDrawString (si->dpy, si->splash_dialog, gc1, x2, y1, sp->body2_label, strlen(sp->body2_label)); y1 += sp->body_font->descent; if (sp->body3_label) { XSetFont (si->dpy, gc1, sp->heading_font->fid); y1 += sp->heading_font->ascent + sp->heading_font->descent; y1 += sp->heading_font->ascent; sw = string_width (sp->heading_font, sp->body3_label); x2 = (x1 + ((x3 - x1 - sw) / 2)); XDrawString (si->dpy, si->splash_dialog, gc1, x2, y1, sp->body3_label, strlen(sp->body3_label)); y1 += sp->heading_font->descent + sp->heading_font->ascent; sw = string_width (sp->heading_font, sp->body4_label); x2 = (x1 + ((x3 - x1 - sw) / 2)); XDrawString (si->dpy, si->splash_dialog, gc1, x2, y1, sp->body4_label, strlen(sp->body4_label)); y1 += sp->heading_font->descent; XSetFont (si->dpy, gc1, sp->body_font->fid); } /* The buttons */ XSetForeground (si->dpy, gc1, sp->button_foreground); XSetForeground (si->dpy, gc2, sp->button_background); /* y1 += (vspacing * 2);*/ y1 = sp->height - sp->internal_border - sp->button_height; x1 += sp->internal_border; y2 = (y1 + ((sp->button_height - (sp->button_font->ascent + sp->button_font->descent)) / 2) + sp->button_font->ascent); hspacing = ((sp->width - x1 - (sp->shadow_width * 2) - sp->internal_border - (sp->button_width * nbuttons)) / 2); x2 = x1 + ((sp->button_width - string_width(sp->button_font, sp->demo_label)) / 2); XFillRectangle (si->dpy, si->splash_dialog, gc2, x1, y1, sp->button_width, sp->button_height); XDrawString (si->dpy, si->splash_dialog, gc1, x2, y2, sp->demo_label, strlen(sp->demo_label)); sp->demo_button_x = x1; sp->demo_button_y = y1; #ifdef PREFS_BUTTON x1 += hspacing + sp->button_width; x2 = x1 + ((sp->button_width - string_width(sp->button_font,sp->prefs_label)) / 2); XFillRectangle (si->dpy, si->splash_dialog, gc2, x1, y1, sp->button_width, sp->button_height); XDrawString (si->dpy, si->splash_dialog, gc1, x2, y2, sp->prefs_label, strlen(sp->prefs_label)); sp->prefs_button_x = x1; sp->prefs_button_y = y1; #endif /* PREFS_BUTTON */ #ifdef PREFS_BUTTON x1 += hspacing + sp->button_width; #else /* !PREFS_BUTTON */ x1 = (sp->width - sp->button_width - sp->internal_border - (sp->shadow_width * 2)); #endif /* !PREFS_BUTTON */ x2 = x1 + ((sp->button_width - string_width(sp->button_font,sp->help_label)) / 2); XFillRectangle (si->dpy, si->splash_dialog, gc2, x1, y1, sp->button_width, sp->button_height); XDrawString (si->dpy, si->splash_dialog, gc1, x2, y2, sp->help_label, strlen(sp->help_label)); sp->help_button_x = x1; sp->help_button_y = y1; /* The logo */ x1 = sp->shadow_width * 6; y1 = sp->shadow_width * 6; x2 = sp->logo_width - (sp->shadow_width * 12); y2 = sp->logo_height - (sp->shadow_width * 12); if (sp->logo_pixmap) { Window root; int x, y; unsigned int w, h, bw, d; XGetGeometry (si->dpy, sp->logo_pixmap, &root, &x, &y, &w, &h, &bw, &d); XSetForeground (si->dpy, gc1, sp->foreground); XSetBackground (si->dpy, gc1, sp->background); XSetClipMask (si->dpy, gc1, sp->logo_clipmask); XSetClipOrigin (si->dpy, gc1, x1 + ((x2 - (int)w) /2), y1 + ((y2 - (int)h) / 2)); if (d == 1) XCopyPlane (si->dpy, sp->logo_pixmap, si->splash_dialog, gc1, 0, 0, w, h, x1 + ((x2 - (int)w) / 2), y1 + ((y2 - (int)h) / 2), 1); else XCopyArea (si->dpy, sp->logo_pixmap, si->splash_dialog, gc1, 0, 0, w, h, x1 + ((x2 - (int)w) / 2), y1 + ((y2 - (int)h) / 2)); } /* Solid border inside the logo box. */ #if 0 XSetForeground (si->dpy, gc1, sp->foreground); XDrawRectangle (si->dpy, si->splash_dialog, gc1, x1, y1, x2-1, y2-1); #endif /* The shadow around the logo */ draw_shaded_rectangle (si->dpy, si->splash_dialog, sp->shadow_width * 4, sp->shadow_width * 4, sp->logo_width - (sp->shadow_width * 8), sp->logo_height - (sp->shadow_width * 8), sp->shadow_width, sp->shadow_bottom, sp->shadow_top); /* The shadow around the whole window */ draw_shaded_rectangle (si->dpy, si->splash_dialog, 0, 0, sp->width, sp->height, sp->shadow_width, sp->shadow_top, sp->shadow_bottom); XFreeGC (si->dpy, gc1); XFreeGC (si->dpy, gc2); update_splash_window (si); } static void update_splash_window (saver_info *si) { splash_dialog_data *sp = si->sp_data; int pressed; if (!sp) return; pressed = sp->pressed; /* The shadows around the buttons */ draw_shaded_rectangle (si->dpy, si->splash_dialog, sp->demo_button_x, sp->demo_button_y, sp->button_width, sp->button_height, sp->shadow_width, (pressed == 1 ? sp->shadow_bottom : sp->shadow_top), (pressed == 1 ? sp->shadow_top : sp->shadow_bottom)); #ifdef PREFS_BUTTON draw_shaded_rectangle (si->dpy, si->splash_dialog, sp->prefs_button_x, sp->prefs_button_y, sp->button_width, sp->button_height, sp->shadow_width, (pressed == 2 ? sp->shadow_bottom : sp->shadow_top), (pressed == 2 ? sp->shadow_top : sp->shadow_bottom)); #endif /* PREFS_BUTTON */ draw_shaded_rectangle (si->dpy, si->splash_dialog, sp->help_button_x, sp->help_button_y, sp->button_width, sp->button_height, sp->shadow_width, (pressed == 3 ? sp->shadow_bottom : sp->shadow_top), (pressed == 3 ? sp->shadow_top : sp->shadow_bottom)); } static void destroy_splash_window (saver_info *si) { splash_dialog_data *sp = si->sp_data; saver_screen_info *ssi = sp->prompt_screen; Colormap cmap = DefaultColormapOfScreen (ssi->screen); Pixel black = BlackPixelOfScreen (ssi->screen); Pixel white = WhitePixelOfScreen (ssi->screen); if (sp->timer) XtRemoveTimeOut (sp->timer); if (si->splash_dialog) { XDestroyWindow (si->dpy, si->splash_dialog); si->splash_dialog = 0; } if (sp->heading_label) free (sp->heading_label); if (sp->body_label) free (sp->body_label); if (sp->body2_label) free (sp->body2_label); if (sp->body3_label) free (sp->body3_label); if (sp->body4_label) free (sp->body4_label); if (sp->demo_label) free (sp->demo_label); #ifdef PREFS_BUTTON if (sp->prefs_label) free (sp->prefs_label); #endif /* PREFS_BUTTON */ if (sp->help_label) free (sp->help_label); if (sp->heading_font) XFreeFont (si->dpy, sp->heading_font); if (sp->body_font) XFreeFont (si->dpy, sp->body_font); if (sp->button_font) XFreeFont (si->dpy, sp->button_font); if (sp->foreground != black && sp->foreground != white) XFreeColors (si->dpy, cmap, &sp->foreground, 1, 0L); if (sp->background != black && sp->background != white) XFreeColors (si->dpy, cmap, &sp->background, 1, 0L); if (sp->button_foreground != black && sp->button_foreground != white) XFreeColors (si->dpy, cmap, &sp->button_foreground, 1, 0L); if (sp->button_background != black && sp->button_background != white) XFreeColors (si->dpy, cmap, &sp->button_background, 1, 0L); if (sp->shadow_top != black && sp->shadow_top != white) XFreeColors (si->dpy, cmap, &sp->shadow_top, 1, 0L); if (sp->shadow_bottom != black && sp->shadow_bottom != white) XFreeColors (si->dpy, cmap, &sp->shadow_bottom, 1, 0L); if (sp->logo_pixmap) XFreePixmap (si->dpy, sp->logo_pixmap); if (sp->logo_clipmask) XFreePixmap (si->dpy, sp->logo_clipmask); if (sp->logo_pixels) { if (sp->logo_npixels) XFreeColors (si->dpy, cmap, sp->logo_pixels, sp->logo_npixels, 0L); free (sp->logo_pixels); sp->logo_pixels = 0; sp->logo_npixels = 0; } memset (sp, 0, sizeof(*sp)); free (sp); si->sp_data = 0; } void handle_splash_event (saver_info *si, XEvent *event) { splash_dialog_data *sp = si->sp_data; saver_screen_info *ssi; int which = 0; if (!sp) return; ssi = sp->prompt_screen; switch (event->xany.type) { case Expose: draw_splash_window (si); break; case ButtonPress: case ButtonRelease: if (event->xbutton.x >= sp->demo_button_x && event->xbutton.x < sp->demo_button_x + sp->button_width && event->xbutton.y >= sp->demo_button_y && event->xbutton.y < sp->demo_button_y + sp->button_height) which = 1; #ifdef PREFS_BUTTON else if (event->xbutton.x >= sp->prefs_button_x && event->xbutton.x < sp->prefs_button_x + sp->button_width && event->xbutton.y >= sp->prefs_button_y && event->xbutton.y < sp->prefs_button_y + sp->button_height) which = 2; #endif /* PREFS_BUTTON */ else if (event->xbutton.x >= sp->help_button_x && event->xbutton.x < sp->help_button_x + sp->button_width && event->xbutton.y >= sp->help_button_y && event->xbutton.y < sp->help_button_y + sp->button_height) which = 3; if (event->xany.type == ButtonPress) { sp->pressed = which; update_splash_window (si); if (which == 0) XBell (si->dpy, False); } else if (event->xany.type == ButtonRelease) { if (which && sp->pressed == which) { destroy_splash_window (si); sp = si->sp_data; switch (which) { case 1: do_demo (ssi); break; #ifdef PREFS_BUTTON case 2: do_prefs (ssi); break; #endif /* PREFS_BUTTON */ case 3: do_help (ssi); break; default: abort(); } } else if (which == 0 && sp->pressed == 0) { /* click and release on the window but not in a button: treat that as "dismiss the splash dialog." */ destroy_splash_window (si); sp = si->sp_data; } if (sp) sp->pressed = 0; update_splash_window (si); } break; default: break; } } static void unsplash_timer (XtPointer closure, XtIntervalId *id) { saver_info *si = (saver_info *) closure; if (si && si->sp_data) destroy_splash_window (si); } /* Button callbacks */ #ifdef VMS # define pid_t int # define fork vfork #endif /* VMS */ static void do_demo (saver_screen_info *ssi) { saver_info *si = ssi->global; saver_preferences *p = &si->prefs; const char *cmd = p->demo_command; if (cmd && *cmd) fork_and_exec (ssi, cmd); else fprintf (stderr, "%s: no demo-mode command has been specified.\n", blurb()); } #ifdef PREFS_BUTTON static void do_prefs (saver_screen_info *ssi) { saver_info *si = ssi->global; saver_preferences *p = &si->prefs; const char *cmd = p->prefs_command; if (command && *command) fork_and_exec (ssi, cmd); else fprintf (stderr, "%s: no preferences command has been specified.\n", blurb()); } #endif /* PREFS_BUTTON */ static void do_help (saver_screen_info *ssi) { saver_info *si = ssi->global; saver_preferences *p = &si->prefs; char *help_command = 0; if (!p->load_url_command || !*p->load_url_command) { fprintf (stderr, "%s: no URL command has been specified.\n", blurb()); return; } if (!p->help_url || !*p->help_url) { fprintf (stderr, "%s: no Help URL has been specified.\n", blurb()); return; } help_command = (char *) malloc (strlen (p->load_url_command) + (strlen (p->help_url) * 4) + 10); sprintf (help_command, p->load_url_command, p->help_url, p->help_url, p->help_url, p->help_url); fork_and_exec (ssi, help_command); free (help_command); } xscreensaver-5.34/driver/setuid.c000644 000767 000767 00000024663 11125400266 016625 0ustar00jwzjwz000000 000000 /* setuid.c --- management of runtime privileges. * xscreensaver, Copyright (c) 1993-1998, 2005 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include /* not used for much... */ /* This file doesn't need the Xt headers, so stub these types out... */ #undef XtPointer #define XtAppContext void* #define XrmDatabase void* #define XtIntervalId void* #define XtPointer void* #define Widget void* #include "xscreensaver.h" #ifndef EPERM #include #endif #include /* for getpwnam() and struct passwd */ #include /* for getgrgid() and struct group */ static const char * uid_gid_string (uid_t uid, gid_t gid) { static char buf[255]; struct passwd *p = 0; struct group *g = 0; p = getpwuid (uid); g = getgrgid (gid); sprintf (buf, "%.100s/%.100s (%ld/%ld)", (p && p->pw_name ? p->pw_name : "???"), (g && g->gr_name ? g->gr_name : "???"), (long) uid, (long) gid); return buf; } void describe_uids (saver_info *si, FILE *out) { uid_t uid = getuid(); gid_t gid = getgid(); uid_t euid = geteuid(); gid_t egid = getegid(); char *s1 = strdup (uid_gid_string (uid, gid)); char *s2 = strdup (uid_gid_string (euid, egid)); if (si->orig_uid && *si->orig_uid && (!!strcmp (si->orig_uid, s1) || !!strcmp (si->orig_uid, s2))) fprintf (out, "%s: initial effective uid/gid was %s\n", blurb(), si->orig_uid); fprintf (out, "%s: running as %s", blurb(), s1); if (uid != euid || gid != egid) fprintf (out, "; effectively %s", s2); fprintf(out, "\n"); free(s1); free(s2); } /* Returns true if we need to call setgroups(). Without calling setgroups(), the process will retain any supplementary gids associated with the uid, e.g.: % groups root root : root bin daemon sys adm disk wheel However, setgroups() can only be called by root, and returns EPERM for other users even if the call would be a no-op (e.g., setting the group list to the current list.) So, to avoid that spurious error, before calling setgroups() we first check whether the current list of groups contains only one element, our target group. If so, we don't need to call setgroups(). */ static int setgroups_needed_p (uid_t target_group) { gid_t groups[1024]; int n, size; size = sizeof(groups) / sizeof(gid_t); n = getgroups (size - 1, groups); if (n < 0) { char buf [1024]; sprintf (buf, "%s: getgroups(%ld, ...)", blurb(), (long int)(size - 1)); perror (buf); return 1; } else if (n == 0) /* an empty list means only egid is in effect. */ return 0; else if (n == 1 && groups[0] == target_group) /* one element, the target */ return 0; else /* more than one, or the wrong one. */ return 1; } static int set_ids_by_number (uid_t uid, gid_t gid, char **message_ret) { int uid_errno = 0; int gid_errno = 0; int sgs_errno = 0; struct passwd *p = getpwuid (uid); struct group *g = getgrgid (gid); if (message_ret) *message_ret = 0; /* Rumor has it that some implementations of of setuid() do nothing when called with -1; therefore, if the "nobody" user has a uid of -1, then that would be Really Bad. Rumor further has it that such systems really ought to be using -2 for "nobody", since that works. So, if we get a uid (or gid, for good measure) of -1, switch to -2 instead. Note that this must be done after we've looked up the user/group names with getpwuid(-1) and/or getgrgid(-1). */ if (gid == (gid_t) -1) gid = (gid_t) -2; if (uid == (uid_t) -1) uid = (uid_t) -2; errno = 0; if (setgroups_needed_p (gid) && setgroups (1, &gid) < 0) sgs_errno = errno ? errno : -1; errno = 0; if (setgid (gid) != 0) gid_errno = errno ? errno : -1; errno = 0; if (setuid (uid) != 0) uid_errno = errno ? errno : -1; if (uid_errno == 0 && gid_errno == 0 && sgs_errno == 0) { static char buf [1024]; sprintf (buf, "changed uid/gid to %.100s/%.100s (%ld/%ld).", (p && p->pw_name ? p->pw_name : "???"), (g && g->gr_name ? g->gr_name : "???"), (long) uid, (long) gid); if (message_ret) *message_ret = buf; return 0; } else { char buf [1024]; gid_t groups[1024]; int n, size; if (sgs_errno) { sprintf (buf, "%s: couldn't setgroups to %.100s (%ld)", blurb(), (g && g->gr_name ? g->gr_name : "???"), (long) gid); if (sgs_errno == -1) fprintf(stderr, "%s: unknown error\n", buf); else { errno = sgs_errno; perror(buf); } fprintf (stderr, "%s: effective group list: ", blurb()); size = sizeof(groups) / sizeof(gid_t); n = getgroups (size - 1, groups); if (n < 0) fprintf (stderr, "unknown!\n"); else { int i; fprintf (stderr, "["); for (i = 0; i < n; i++) { g = getgrgid (groups[i]); if (i > 0) fprintf (stderr, ", "); if (g && g->gr_name) fprintf (stderr, "%s", g->gr_name); else fprintf (stderr, "%ld", (long) groups[i]); } fprintf (stderr, "]\n"); } } if (gid_errno) { sprintf (buf, "%s: couldn't set gid to %.100s (%ld)", blurb(), (g && g->gr_name ? g->gr_name : "???"), (long) gid); if (gid_errno == -1) fprintf(stderr, "%s: unknown error\n", buf); else { errno = gid_errno; perror(buf); } } if (uid_errno) { sprintf (buf, "%s: couldn't set uid to %.100s (%ld)", blurb(), (p && p->pw_name ? p->pw_name : "???"), (long) uid); if (uid_errno == -1) fprintf(stderr, "%s: unknown error\n", buf); else { errno = uid_errno; perror(buf); } } return -1; } } /* If we've been run as setuid or setgid to someone else (most likely root) turn off the extra permissions so that random user-specified programs don't get special privileges. (On some systems it is necessary to install this program as setuid root in order to read the passwd file to implement lock-mode.) *** WARNING: DO NOT DISABLE ANY OF THE FOLLOWING CODE! If you do so, you will open a security hole. See the sections of the xscreensaver manual titled "LOCKING AND ROOT LOGINS", and "USING XDM". */ void hack_uid (saver_info *si) { /* Discard privileges, and set the effective user/group ids to the real user/group ids. That is, give up our "chmod +s" rights. */ { uid_t euid = geteuid(); gid_t egid = getegid(); uid_t uid = getuid(); gid_t gid = getgid(); si->orig_uid = strdup (uid_gid_string (euid, egid)); if (uid != euid || gid != egid) if (set_ids_by_number (uid, gid, &si->uid_message) != 0) saver_exit (si, 1, 0); } /* Locking can't work when running as root, because we have no way of knowing what the user id of the logged in user is (so we don't know whose password to prompt for.) *** WARNING: DO NOT DISABLE THIS CODE! If you do so, you will open a security hole. See the sections of the xscreensaver manual titled "LOCKING AND ROOT LOGINS", and "USING XDM". */ if (getuid() == (uid_t) 0) { si->locking_disabled_p = True; si->nolock_reason = "running as root"; } /* If we're running as root, switch to a safer user. This is above and beyond the fact that we've disabling locking, above -- the theory is that running graphics demos as root is just always a stupid thing to do, since they have probably never been security reviewed and are more likely to be buggy than just about any other kind of program. (And that assumes non-malicious code. There are also attacks here.) *** WARNING: DO NOT DISABLE THIS CODE! If you do so, you will open a security hole. See the sections of the xscreensaver manual titled "LOCKING AND ROOT LOGINS", and "USING XDM". */ if (getuid() == (uid_t) 0) { struct passwd *p; p = getpwnam ("nobody"); if (! p) p = getpwnam ("noaccess"); if (! p) p = getpwnam ("daemon"); if (! p) { fprintf (stderr, "%s: running as root, and couldn't find a safer uid.\n", blurb()); saver_exit(si, 1, 0); } if (set_ids_by_number (p->pw_uid, p->pw_gid, &si->uid_message) != 0) saver_exit (si, -1, 0); } /* If there's anything even remotely funny looking about the passwd struct, or if we're running as some other user from the list below (a non-comprehensive selection of users known to be privileged in some way, and not normal end-users) then disable locking. If it was possible, switching to "nobody" would be the thing to do, but only root itself has the privs to do that. *** WARNING: DO NOT DISABLE THIS CODE! If you do so, you will open a security hole. See the sections of the xscreensaver manual titled "LOCKING AND ROOT LOGINS", and "USING XDM". */ { uid_t uid = getuid (); /* get it again */ struct passwd *p = getpwuid (uid); /* get it again */ if (!p || uid == (uid_t) 0 || uid == (uid_t) -1 || uid == (uid_t) -2 || p->pw_uid == (uid_t) 0 || p->pw_uid == (uid_t) -1 || p->pw_uid == (uid_t) -2 || !p->pw_name || !*p->pw_name || !strcmp (p->pw_name, "root") || !strcmp (p->pw_name, "nobody") || !strcmp (p->pw_name, "noaccess") || !strcmp (p->pw_name, "operator") || !strcmp (p->pw_name, "daemon") || !strcmp (p->pw_name, "bin") || !strcmp (p->pw_name, "adm") || !strcmp (p->pw_name, "sys") || !strcmp (p->pw_name, "games")) { static char buf [1024]; sprintf (buf, "running as %.100s", (p && p->pw_name && *p->pw_name ? p->pw_name : "")); si->nolock_reason = buf; si->locking_disabled_p = True; si->dangerous_uid_p = True; } } } xscreensaver-5.34/driver/stderr.c000664 000767 000767 00000034202 11773011646 016634 0ustar00jwzjwz000000 000000 /* stderr.c --- capturing stdout/stderr output onto the screensaver window. * xscreensaver, Copyright (c) 1991-2012 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ /* stderr hackery - Why Unix Sucks, reason number 32767. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #ifdef HAVE_UNISTD_H # include #endif #ifdef HAVE_FCNTL # include #endif #include #include "xscreensaver.h" #include "resources.h" #include "visual.h" FILE *real_stderr = 0; FILE *real_stdout = 0; /* It's ok for these to be global, since they refer to the one and only stderr stream, not to a particular screen or window or visual. */ static char stderr_buffer [4096]; static char *stderr_tail = 0; static time_t stderr_last_read = 0; static int stderr_stdout_read_fd = -1; static void make_stderr_overlay_window (saver_screen_info *); /* Recreates the stderr window or GCs: do this when the xscreensaver window on a screen has been re-created. */ void reset_stderr (saver_screen_info *ssi) { saver_info *si = ssi->global; if (si->prefs.debug_p) fprintf ((real_stderr ? real_stderr : stderr), "%s: resetting stderr\n", blurb()); ssi->stderr_text_x = 0; ssi->stderr_text_y = 0; if (ssi->stderr_gc) XFreeGC (si->dpy, ssi->stderr_gc); ssi->stderr_gc = 0; if (ssi->stderr_overlay_window) XDestroyWindow(si->dpy, ssi->stderr_overlay_window); ssi->stderr_overlay_window = 0; if (ssi->stderr_cmap) XFreeColormap(si->dpy, ssi->stderr_cmap); ssi->stderr_cmap = 0; } /* Erases any stderr text overlaying the screen (if possible) and resets the stderr output cursor to the upper left. Do this when the xscreensaver window is cleared. */ void clear_stderr (saver_screen_info *ssi) { saver_info *si = ssi->global; ssi->stderr_text_x = 0; ssi->stderr_text_y = 0; if (ssi->stderr_overlay_window) XClearWindow (si->dpy, ssi->stderr_overlay_window); } /* Draws the string on the screen's window. */ static void print_stderr_1 (saver_screen_info *ssi, char *string) { saver_info *si = ssi->global; Display *dpy = si->dpy; Screen *screen = ssi->screen; Window window = (ssi->stderr_overlay_window ? ssi->stderr_overlay_window : ssi->screensaver_window); int h_border = 20; int v_border = 20; char *head = string; char *tail; if (! ssi->stderr_font) { char *font_name = get_string_resource (dpy, "font", "Font"); if (!font_name) font_name = strdup ("fixed"); ssi->stderr_font = XLoadQueryFont (dpy, font_name); if (! ssi->stderr_font) ssi->stderr_font = XLoadQueryFont (dpy, "fixed"); ssi->stderr_line_height = (ssi->stderr_font->ascent + ssi->stderr_font->descent); free (font_name); } if (! ssi->stderr_gc) { XGCValues gcv; Pixel fg, bg; Colormap cmap = ssi->cmap; if (!ssi->stderr_overlay_window && get_boolean_resource(dpy, "overlayStderr", "Boolean")) { make_stderr_overlay_window (ssi); if (ssi->stderr_overlay_window) window = ssi->stderr_overlay_window; if (ssi->stderr_cmap) cmap = ssi->stderr_cmap; } fg = get_pixel_resource (dpy,cmap,"overlayTextForeground","Foreground"); bg = get_pixel_resource (dpy,cmap,"overlayTextBackground","Background"); gcv.font = ssi->stderr_font->fid; gcv.foreground = fg; gcv.background = bg; ssi->stderr_gc = XCreateGC (dpy, window, (GCFont | GCForeground | GCBackground), &gcv); } if (ssi->stderr_cmap) XInstallColormap(si->dpy, ssi->stderr_cmap); for (tail = string; *tail; tail++) { if (*tail == '\n' || *tail == '\r') { int maxy = HeightOfScreen (screen) - v_border - v_border; if (tail != head) XDrawImageString (dpy, window, ssi->stderr_gc, ssi->stderr_text_x + h_border, ssi->stderr_text_y + v_border + ssi->stderr_font->ascent, head, tail - head); ssi->stderr_text_x = 0; ssi->stderr_text_y += ssi->stderr_line_height; head = tail + 1; if (*tail == '\r' && *head == '\n') head++, tail++; if (ssi->stderr_text_y > maxy - ssi->stderr_line_height) { #if 0 ssi->stderr_text_y = 0; #else int offset = ssi->stderr_line_height * 5; XWindowAttributes xgwa; XGetWindowAttributes (dpy, window, &xgwa); XCopyArea (dpy, window, window, ssi->stderr_gc, 0, v_border + offset, xgwa.width, (xgwa.height - v_border - v_border - offset), 0, v_border); XClearArea (dpy, window, 0, xgwa.height - v_border - offset, xgwa.width, offset, False); ssi->stderr_text_y -= offset; #endif } } } if (tail != head) { int direction, ascent, descent; XCharStruct overall; XDrawImageString (dpy, window, ssi->stderr_gc, ssi->stderr_text_x + h_border, ssi->stderr_text_y + v_border + ssi->stderr_font->ascent, head, tail - head); XTextExtents (ssi->stderr_font, tail, tail - head, &direction, &ascent, &descent, &overall); ssi->stderr_text_x += overall.width; } } static void make_stderr_overlay_window (saver_screen_info *ssi) { saver_info *si = ssi->global; unsigned long transparent_pixel = 0; Visual *visual = get_overlay_visual (ssi->screen, &transparent_pixel); if (visual) { int depth = visual_depth (ssi->screen, visual); XSetWindowAttributes attrs; XWindowAttributes xgwa; unsigned long attrmask; XGetWindowAttributes (si->dpy, ssi->screensaver_window, &xgwa); if (si->prefs.debug_p) fprintf(real_stderr, "%s: using overlay visual 0x%0x for stderr text layer.\n", blurb(), (int) XVisualIDFromVisual (visual)); ssi->stderr_cmap = XCreateColormap(si->dpy, RootWindowOfScreen(ssi->screen), visual, AllocNone); attrmask = (CWColormap | CWBackPixel | CWBackingPixel | CWBorderPixel | CWBackingStore | CWSaveUnder); attrs.colormap = ssi->stderr_cmap; attrs.background_pixel = transparent_pixel; attrs.backing_pixel = transparent_pixel; attrs.border_pixel = transparent_pixel; attrs.backing_store = NotUseful; attrs.save_under = False; ssi->stderr_overlay_window = XCreateWindow(si->dpy, ssi->screensaver_window, 0, 0, xgwa.width, xgwa.height, 0, depth, InputOutput, visual, attrmask, &attrs); XMapRaised(si->dpy, ssi->stderr_overlay_window); } } /* Draws the string on each screen's window as error text. */ static void print_stderr (saver_info *si, char *string) { saver_preferences *p = &si->prefs; int i; /* In verbose mode, copy it to stderr as well. */ if (p->verbose_p) fprintf (real_stderr, "%s", string); for (i = 0; i < si->nscreens; i++) print_stderr_1 (&si->screens[i], string); } /* Polls the stderr buffer every few seconds and if it finds any text, writes it on all screens. */ static void stderr_popup_timer_fn (XtPointer closure, XtIntervalId *id) { saver_info *si = (saver_info *) closure; char *s = stderr_buffer; if (*s) { /* If too much data was printed, then something has gone haywire, so truncate it. */ char *trailer = "\n\n<< stderr diagnostics have been truncated >>\n\n"; int max = sizeof (stderr_buffer) - strlen (trailer) - 5; if (strlen (s) > max) strcpy (s + max, trailer); /* Now show the user. */ print_stderr (si, s); } stderr_tail = stderr_buffer; si->stderr_popup_timer = 0; } /* Called when data becomes available on the stderr pipe. Copies it into stderr_buffer where stderr_popup_timer_fn() can find it later. */ static void stderr_callback (XtPointer closure, int *fd, XtIntervalId *id) { saver_info *si = (saver_info *) closure; char *s; int left; int size; int read_this_time = 0; if (!fd || *fd < 0 || *fd != stderr_stdout_read_fd) abort(); if (stderr_tail == 0) stderr_tail = stderr_buffer; left = ((sizeof (stderr_buffer) - 2) - (stderr_tail - stderr_buffer)); s = stderr_tail; *s = 0; /* Read as much data from the fd as we can, up to our buffer size. */ if (left > 0) { while ((size = read (*fd, (void *) s, left)) > 0) { left -= size; s += size; read_this_time += size; } *s = 0; } else { char buf2 [1024]; /* The buffer is full; flush the rest of it. */ while (read (*fd, (void *) buf2, sizeof (buf2)) > 0) ; } stderr_tail = s; stderr_last_read = time ((time_t *) 0); /* Now we have read some data that we would like to put up in a dialog box. But more data may still be coming in - so don't pop up the dialog right now, but instead, start a timer that will pop it up a second from now. Should more data come in in the meantime, we will be called again, and will reset that timer again. So the dialog will only pop up when a second has elapsed with no new data being written to stderr. However, if the buffer is full (meaning lots of data has been written) then we don't reset the timer. */ if (read_this_time > 0) { if (si->stderr_popup_timer) XtRemoveTimeOut (si->stderr_popup_timer); si->stderr_popup_timer = XtAppAddTimeOut (si->app, 1 * 1000, stderr_popup_timer_fn, (XtPointer) si); } } /* If stderr capturing is desired, this replaces `stdout' and `stderr' with a pipe, so that any output written to them will show up on the screen as well as on the original value of those streams. */ void initialize_stderr (saver_info *si) { static Boolean done = False; int fds [2]; int in, out; int new_stdout, new_stderr; int stdout_fd = 1; int stderr_fd = 2; int flags = 0; Boolean stderr_dialog_p; if (done) return; done = True; real_stderr = stderr; real_stdout = stdout; stderr_dialog_p = get_boolean_resource (si->dpy, "captureStderr", "Boolean"); if (!stderr_dialog_p) return; if (pipe (fds)) { perror ("error creating pipe:"); return; } in = fds [0]; out = fds [1]; # ifdef HAVE_FCNTL # if defined(O_NONBLOCK) flags = O_NONBLOCK; # elif defined(O_NDELAY) flags = O_NDELAY; # else ERROR!! neither O_NONBLOCK nor O_NDELAY are defined. # endif /* Set both sides of the pipe to nonblocking - this is so that our reads (in stderr_callback) will terminate, and so that out writes (in the client programs) will silently fail when the pipe is full, instead of hosing the program. */ if (fcntl (in, F_SETFL, flags) != 0) { perror ("fcntl:"); return; } if (fcntl (out, F_SETFL, flags) != 0) { perror ("fcntl:"); return; } # endif /* !HAVE_FCNTL */ if (stderr_dialog_p) { FILE *new_stderr_file; FILE *new_stdout_file; new_stderr = dup (stderr_fd); if (new_stderr < 0) { perror ("could not dup() a stderr:"); return; } if (! (new_stderr_file = fdopen (new_stderr, "w"))) { perror ("could not fdopen() the new stderr:"); return; } real_stderr = new_stderr_file; close (stderr_fd); if (dup2 (out, stderr_fd) < 0) { perror ("could not dup() a new stderr:"); return; } new_stdout = dup (stdout_fd); if (new_stdout < 0) { perror ("could not dup() a stdout:"); return; } if (! (new_stdout_file = fdopen (new_stdout, "w"))) { perror ("could not fdopen() the new stdout:"); return; } real_stdout = new_stdout_file; close (stdout_fd); if (dup2 (out, stdout_fd) < 0) { perror ("could not dup() a new stdout:"); return; } close (out); } stderr_stdout_read_fd = in; XtAppAddInput (si->app, in, (XtPointer) XtInputReadMask, stderr_callback, (XtPointer) si); } /* If the "-log file" command-line option has been specified, open the file for append, and redirect stdout/stderr there. This is called very early, before initialize_stderr(). */ void stderr_log_file (saver_info *si) { int stdout_fd = 1; int stderr_fd = 2; const char *filename = get_string_resource (si->dpy, "logFile", "LogFile"); int fd; if (!filename || !*filename) return; fd = open (filename, O_WRONLY | O_APPEND | O_CREAT, 0666); if (fd < 0) { char buf[255]; FAIL: sprintf (buf, "%.100s: %.100s", blurb(), filename); perror (buf); fflush (stderr); fflush (stdout); exit (1); } fprintf (stderr, "%s: logging to file %s\n", blurb(), filename); if (dup2 (fd, stdout_fd) < 0) goto FAIL; if (dup2 (fd, stderr_fd) < 0) goto FAIL; fprintf (stderr, "\n\n" "##########################################################################\n" "%s: logging to \"%s\" at %s\n" "##########################################################################\n" "\n", blurb(), filename, timestring()); } /* If there is anything in the stderr buffer, flush it to the real stderr. This does no X operations. Call this when exiting to make sure any last words actually show up. */ void shutdown_stderr (saver_info *si) { fflush (stdout); fflush (stderr); if (!real_stderr || stderr_stdout_read_fd < 0) return; stderr_callback ((XtPointer) si, &stderr_stdout_read_fd, 0); if (stderr_tail && stderr_buffer < stderr_tail) { *stderr_tail = 0; fprintf (real_stderr, "%s", stderr_buffer); stderr_tail = stderr_buffer; } if (real_stdout) fflush (real_stdout); if (real_stderr) fflush (real_stderr); if (stdout != real_stdout) { dup2 (fileno(real_stdout), fileno(stdout)); fclose (real_stdout); real_stdout = stdout; } if (stderr != real_stderr) { dup2 (fileno(real_stderr), fileno(stderr)); fclose (real_stderr); real_stderr = stderr; } if (stderr_stdout_read_fd != -1) { close (stderr_stdout_read_fd); stderr_stdout_read_fd = -1; } } xscreensaver-5.34/driver/mlstring.c000644 000767 000767 00000012060 11453734655 017173 0ustar00jwzjwz000000 000000 /* * (c) 2007, Quest Software, Inc. All rights reserved. * * This file is part of XScreenSaver, * Copyright (c) 1993-2009 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #include #include #include #include "mlstring.h" #define LINE_SPACING 1.2 static mlstring * mlstring_allocate(const char *msg); static void mlstring_calculate(mlstring *str, XFontStruct *font); mlstring* mlstring_new(const char *msg, XFontStruct *font, Dimension wrap_width) { mlstring *newstr; if (!(newstr = mlstring_allocate(msg))) return NULL; newstr->font_id = font->fid; mlstring_wrap(newstr, font, wrap_width); return newstr; } mlstring * mlstring_allocate(const char *msg) { const char *s; mlstring *ml; struct mlstr_line *cur, *prev = NULL; size_t linelength; int the_end = 0; if (!msg) return NULL; ml = calloc(1, sizeof(mlstring)); if (!ml) return NULL; for (s = msg; !the_end; msg = ++s) { /* New string struct */ cur = calloc(1, sizeof(struct mlstr_line)); if (!cur) goto fail; if (!ml->lines) ml->lines = cur; /* Find the \n or end of string */ while (*s != '\n') { if (*s == '\0') { the_end = 1; break; } ++s; } linelength = s - msg; /* Duplicate the string */ cur->line = malloc(linelength + 1); if (!cur->line) goto fail; strncpy(cur->line, msg, linelength); cur->line[linelength] = '\0'; if (prev) prev->next_line = cur; prev = cur; } return ml; fail: if (ml) mlstring_free(ml); return NULL; } /* * Frees an mlstring. * This function does not have any unit tests. */ void mlstring_free(mlstring *str) { struct mlstr_line *cur, *next; for (cur = str->lines; cur; cur = next) { next = cur->next_line; free(cur->line); free(cur); } free(str); } void mlstring_wrap(mlstring *mstring, XFontStruct *font, Dimension width) { short char_width = font->max_bounds.width; int line_length, wrap_at; struct mlstr_line *mstr, *newml; /* An alternative implementation of this function would be to keep trying * XTextWidth() on space-delimited substrings until the longest one less * than 'width' is found, however there shouldn't be much difference * between that, and this implementation. */ for (mstr = mstring->lines; mstr; mstr = mstr->next_line) { if (XTextWidth(font, mstr->line, strlen(mstr->line)) > width) { /* Wrap it */ line_length = width / char_width; if (line_length == 0) line_length = 1; /* First try to soft wrap by finding a space */ for (wrap_at = line_length; wrap_at >= 0 && !isspace(mstr->line[wrap_at]); --wrap_at); if (wrap_at == -1) /* No space found, hard wrap */ wrap_at = line_length; else wrap_at++; /* Leave the space at the end of the line. */ newml = calloc(1, sizeof(*newml)); if (!newml) /* OOM, don't bother trying to wrap */ break; if (NULL == (newml->line = strdup(mstr->line + wrap_at))) { /* OOM, jump ship */ free(newml); break; } /* Terminate the existing string at its end */ mstr->line[wrap_at] = '\0'; newml->next_line = mstr->next_line; mstr->next_line = newml; } } mlstring_calculate(mstring, font); } #undef MAX #define MAX(x, y) ((x) > (y) ? (x) : (y)) /* * Calculates the overall extents (width + height of the multi-line string). * This function is called as part of mlstring_new(). * It does not have any unit testing. */ void mlstring_calculate(mlstring *str, XFontStruct *font) { struct mlstr_line *line; str->font_height = font->ascent + font->descent; str->overall_height = 0; str->overall_width = 0; /* XXX: Should there be some baseline calculations to help XDrawString later on? */ str->font_ascent = font->ascent; for (line = str->lines; line; line = line->next_line) { line->line_width = XTextWidth(font, line->line, strlen(line->line)); str->overall_width = MAX(str->overall_width, line->line_width); /* Don't add line spacing for the first line */ str->overall_height += (font->ascent + font->descent) * (line == str->lines ? 1 : LINE_SPACING); } } void mlstring_draw(Display *dpy, Drawable dialog, GC gc, mlstring *string, int x, int y) { struct mlstr_line *line; if (!string) return; y += string->font_ascent; XSetFont(dpy, gc, string->font_id); for (line = string->lines; line; line = line->next_line) { XDrawString(dpy, dialog, gc, x, y, line->line, strlen(line->line)); y += string->font_height * LINE_SPACING; } } /* vim:ts=8:sw=2:noet */ xscreensaver-5.34/driver/demo-Xm.c000644 000767 000767 00000142656 10712253504 016643 0ustar00jwzjwz000000 000000 /* demo-Xm.c --- implements the interactive demo-mode and options dialogs. * xscreensaver, Copyright (c) 1993-2003, 2005 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifdef HAVE_MOTIF /* whole file */ #include #ifdef HAVE_UNISTD_H # include #endif #ifndef VMS # include /* for getpwuid() */ #else /* VMS */ # include "vms-pwd.h" #endif /* VMS */ #ifdef HAVE_UNAME # include /* for uname() */ #endif /* HAVE_UNAME */ #include #include /* for CARD32 */ #include /* for XA_INTEGER */ #include #include /* We don't actually use any widget internals, but these are included so that gdb will have debug info for the widgets... */ #include #include #ifdef HAVE_XPM # include #endif /* HAVE_XPM */ #ifdef HAVE_XMU # ifndef VMS # include # else /* VMS */ # include # endif #else # include "xmu.h" #endif #include #include #include #include #include #include #ifdef HAVE_XMCOMBOBOX /* a Motif 2.0 widget */ # include # ifndef XmNtextField /* Lesstif 0.89.4 bug */ # undef HAVE_XMCOMBOBOX # endif # if (XmVersion < 2001) /* Lesstif has two personalities these days */ # undef HAVE_XMCOMBOBOX # endif #endif /* HAVE_XMCOMBOBOX */ #include "version.h" #include "prefs.h" #include "resources.h" /* for parse_time() */ #include "visual.h" /* for has_writable_cells() */ #include "remote.h" /* for xscreensaver_command() */ #include "usleep.h" #include #include #include #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) char *progname = 0; char *progclass = "XScreenSaver"; XrmDatabase db; typedef struct { saver_preferences *a, *b; } prefs_pair; static void *global_prefs_pair; /* I hate C so much... */ char *blurb (void) { return progname; } extern Widget create_xscreensaver_demo (Widget parent); extern const char *visual_menu[]; static char *short_version = 0; Atom XA_VROOT; Atom XA_SCREENSAVER, XA_SCREENSAVER_RESPONSE, XA_SCREENSAVER_VERSION; Atom XA_SCREENSAVER_ID, XA_SCREENSAVER_STATUS, XA_SELECT, XA_DEMO; Atom XA_ACTIVATE, XA_BLANK, XA_LOCK, XA_RESTART, XA_EXIT; static void populate_demo_window (Widget toplevel, int which, prefs_pair *pair); static void populate_prefs_page (Widget top, prefs_pair *pair); static int apply_changes_and_save (Widget widget); static int maybe_reload_init_file (Widget widget, prefs_pair *pair); static void await_xscreensaver (Widget widget); /* Some random utility functions */ static Widget name_to_widget (Widget widget, const char *name) { Widget parent; char name2[255]; name2[0] = '*'; strcpy (name2+1, name); while ((parent = XtParent (widget))) widget = parent; return XtNameToWidget (widget, name2); } /* Why this behavior isn't automatic in *either* toolkit, I'll never know. Takes a scroller, viewport, or list as an argument. */ static void ensure_selected_item_visible (Widget list) { int *pos_list = 0; int pos_count = 0; if (XmListGetSelectedPos (list, &pos_list, &pos_count) && pos_count > 0) { int top = -2; int visible = 0; XtVaGetValues (list, XmNtopItemPosition, &top, XmNvisibleItemCount, &visible, NULL); if (pos_list[0] >= top + visible) { int pos = pos_list[0] - visible + 1; if (pos < 0) pos = 0; XmListSetPos (list, pos); } else if (pos_list[0] < top) { XmListSetPos (list, pos_list[0]); } } if (pos_list) XtFree ((char *) pos_list); } static void warning_dialog_dismiss_cb (Widget button, XtPointer client_data, XtPointer user_data) { Widget shell = (Widget) client_data; XtDestroyWidget (shell); } static void warning_dialog (Widget parent, const char *message, int center) { char *msg = strdup (message); char *head; Widget dialog = 0; Widget label = 0; Widget ok = 0; int i = 0; Widget w; Widget container; XmString xmstr; Arg av[10]; int ac = 0; ac = 0; dialog = XmCreateWarningDialog (parent, "warning", av, ac); w = XmMessageBoxGetChild (dialog, XmDIALOG_MESSAGE_LABEL); if (w) XtUnmanageChild (w); w = XmMessageBoxGetChild (dialog, XmDIALOG_CANCEL_BUTTON); if (w) XtUnmanageChild (w); w = XmMessageBoxGetChild (dialog, XmDIALOG_HELP_BUTTON); if (w) XtUnmanageChild (w); ok = XmMessageBoxGetChild (dialog, XmDIALOG_OK_BUTTON); ac = 0; XtSetArg (av[ac], XmNnumColumns, 1); ac++; XtSetArg (av[ac], XmNorientation, XmVERTICAL); ac++; XtSetArg (av[ac], XmNpacking, XmPACK_COLUMN); ac++; XtSetArg (av[ac], XmNrowColumnType, XmWORK_AREA); ac++; XtSetArg (av[ac], XmNspacing, 0); ac++; container = XmCreateRowColumn (dialog, "container", av, ac); head = msg; while (head) { char name[20]; char *s = strchr (head, '\n'); if (s) *s = 0; sprintf (name, "label%d", i++); xmstr = XmStringCreate (head, XmSTRING_DEFAULT_CHARSET); ac = 0; XtSetArg (av[ac], XmNlabelString, xmstr); ac++; XtSetArg (av[ac], XmNmarginHeight, 0); ac++; label = XmCreateLabelGadget (container, name, av, ac); XtManageChild (label); XmStringFree (xmstr); if (s) head = s+1; else head = 0; center--; } XtManageChild (container); XtRealizeWidget (dialog); XtManageChild (dialog); XtAddCallback (ok, XmNactivateCallback, warning_dialog_dismiss_cb, dialog); free (msg); } static void run_cmd (Widget widget, Atom command, int arg) { char *err = 0; int status; apply_changes_and_save (widget); status = xscreensaver_command (XtDisplay (widget), command, arg, False, &err); if (status < 0) { char buf [255]; if (err) sprintf (buf, "Error:\n\n%s", err); else strcpy (buf, "Unknown error!"); warning_dialog (widget, buf, 100); } if (err) free (err); } static void run_hack (Widget widget, int which, Bool report_errors_p) { if (which < 0) return; apply_changes_and_save (widget); if (report_errors_p) run_cmd (widget, XA_DEMO, which + 1); else { char *s = 0; xscreensaver_command (XtDisplay (widget), XA_DEMO, which + 1, False, &s); if (s) free (s); } } /* Button callbacks */ void exit_menu_cb (Widget button, XtPointer client_data, XtPointer ignored) { apply_changes_and_save (XtParent (button)); exit (0); } #if 0 static void wm_close_cb (Widget widget, GdkEvent *event, XtPointer data) { apply_changes_and_save (XtParent (button)); exit (0); } #endif void cut_menu_cb (Widget button, XtPointer client_data, XtPointer ignored) { /* #### */ warning_dialog (XtParent (button), "Error:\n\n" "cut unimplemented\n", 1); } void copy_menu_cb (Widget button, XtPointer client_data, XtPointer ignored) { /* #### */ warning_dialog (XtParent (button), "Error:\n\n" "copy unimplemented\n", 1); } void paste_menu_cb (Widget button, XtPointer client_data, XtPointer ignored) { /* #### */ warning_dialog (XtParent (button), "Error:\n\n" "paste unimplemented\n", 1); } void about_menu_cb (Widget button, XtPointer client_data, XtPointer ignored) { char buf [2048]; char *s = strdup (screensaver_id + 4); char *s2; s2 = strchr (s, ','); *s2 = 0; s2 += 2; sprintf (buf, "%s\n%s\n" "\n" "This is the Motif version of \"xscreensaver-demo\". The Motif\n" "version is no longer maintained. Please use the GTK version\n" "instead, which has many more features.\n" "\n" "For xscreensaver updates, check http://www.jwz.org/xscreensaver/", s, s2); free (s); warning_dialog (XtParent (button), buf, 100); } void doc_menu_cb (Widget button, XtPointer client_data, XtPointer ignored) { prefs_pair *pair = (prefs_pair *) client_data; saver_preferences *p = pair->a; char *help_command; if (!p->help_url || !*p->help_url) { warning_dialog (XtParent (button), "Error:\n\n" "No Help URL has been specified.\n", 100); return; } help_command = (char *) malloc (strlen (p->load_url_command) + (strlen (p->help_url) * 4) + 20); strcpy (help_command, "( "); sprintf (help_command + strlen(help_command), p->load_url_command, p->help_url, p->help_url, p->help_url, p->help_url); strcat (help_command, " ) &"); system (help_command); free (help_command); } void activate_menu_cb (Widget button, XtPointer client_data, XtPointer ignored) { run_cmd (XtParent (button), XA_ACTIVATE, 0); } void lock_menu_cb (Widget button, XtPointer client_data, XtPointer ignored) { run_cmd (XtParent (button), XA_LOCK, 0); } void kill_menu_cb (Widget button, XtPointer client_data, XtPointer ignored) { run_cmd (XtParent (button), XA_EXIT, 0); } void restart_menu_cb (Widget button, XtPointer client_data, XtPointer ignored) { #if 0 run_cmd (XtParent (button), XA_RESTART, 0); #else button = XtParent (button); apply_changes_and_save (button); xscreensaver_command (XtDisplay (button), XA_EXIT, 0, False, NULL); sleep (1); system ("xscreensaver -nosplash &"); #endif await_xscreensaver (button); } static void await_xscreensaver (Widget widget) { int countdown = 5; Display *dpy = XtDisplay (widget); char *rversion = 0; while (!rversion && (--countdown > 0)) { /* Check for the version of the running xscreensaver... */ server_xscreensaver_version (dpy, &rversion, 0, 0); /* If it's not there yet, wait a second... */ sleep (1); } if (rversion) { /* Got it. */ free (rversion); } else { /* Timed out, no screensaver running. */ char buf [1024]; Bool root_p = (geteuid () == 0); strcpy (buf, "Error:\n\n" "The xscreensaver daemon did not start up properly.\n" "\n"); if (root_p) # ifdef __GNUC__ __extension__ /* don't warn about "string length is greater than the length ISO C89 compilers are required to support" in the following expression... */ # endif strcat (buf, "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" "\n" " xhost +localhost\n" "\n" "and then selecting `File / Restart Daemon'.\n" "\n" "Note that turning off access control will allow anyone logged\n" "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."); else strcat (buf, "Please check your $PATH and permissions."); warning_dialog (XtParent (widget), buf, 1); } } static int _selected_hack_number = -1; static int selected_hack_number (Widget toplevel) { return _selected_hack_number; } static int demo_write_init_file (Widget widget, saver_preferences *p) { if (!write_init_file (XtDisplay (widget), p, short_version, False)) return 0; else { const char *f = init_file_name(); if (!f || !*f) warning_dialog (widget, "Error:\n\nCouldn't determine init file name!\n", 100); else { char *b = (char *) malloc (strlen(f) + 1024); sprintf (b, "Error:\n\nCouldn't write %s\n", f); warning_dialog (widget, b, 100); free (b); } return -1; } } static int apply_changes_and_save (Widget widget) { prefs_pair *pair = global_prefs_pair; saver_preferences *p = pair->a; Widget list_widget = name_to_widget (widget, "list"); int which = selected_hack_number (widget); Widget cmd = name_to_widget (widget, "cmdText"); Widget enabled = name_to_widget (widget, "enabled"); Widget vis = name_to_widget (widget, "combo"); # ifdef HAVE_XMCOMBOBOX Widget text = 0; # else /* !HAVE_XMCOMBOBOX */ Widget menu = 0, *kids = 0, selected_item = 0; Cardinal nkids = 0; int i = 0; # endif /* !HAVE_XMCOMBOBOX */ Bool enabled_p = False; const char *visual = 0; const char *command = 0; char c; unsigned long id; if (which < 0) return -1; # ifdef HAVE_XMCOMBOBOX XtVaGetValues (vis, XmNtextField, &text, NULL); if (!text) /* If we can't get at the text field of this combo box, we're screwed. */ abort(); XtVaGetValues (text, XmNvalue, &visual, NULL); # else /* !HAVE_XMCOMBOBOX */ XtVaGetValues (vis, XmNsubMenuId, &menu, NULL); XtVaGetValues (menu, XmNnumChildren, &nkids, XmNchildren, &kids, NULL); XtVaGetValues (menu, XmNmenuHistory, &selected_item, NULL); if (selected_item) for (i = 0; i < nkids; i++) if (kids[i] == selected_item) break; visual = visual_menu[i]; # endif /* !HAVE_XMCOMBOBOX */ XtVaGetValues (enabled, XmNset, &enabled_p, NULL); XtVaGetValues (cmd, XtNvalue, &command, NULL); if (maybe_reload_init_file (widget, pair) != 0) return 1; /* Sanity-check and canonicalize whatever the user typed into the combo box. */ if (!strcasecmp (visual, "")) visual = ""; else if (!strcasecmp (visual, "any")) visual = ""; else if (!strcasecmp (visual, "default")) visual = "Default"; else if (!strcasecmp (visual, "default-n")) visual = "Default-N"; else if (!strcasecmp (visual, "default-i")) visual = "Default-I"; else if (!strcasecmp (visual, "best")) visual = "Best"; else if (!strcasecmp (visual, "mono")) visual = "Mono"; else if (!strcasecmp (visual, "monochrome")) visual = "Mono"; else if (!strcasecmp (visual, "gray")) visual = "Gray"; else if (!strcasecmp (visual, "grey")) visual = "Gray"; else if (!strcasecmp (visual, "color")) visual = "Color"; else if (!strcasecmp (visual, "gl")) visual = "GL"; else if (!strcasecmp (visual, "staticgray")) visual = "StaticGray"; else if (!strcasecmp (visual, "staticcolor")) visual = "StaticColor"; else if (!strcasecmp (visual, "truecolor")) visual = "TrueColor"; else if (!strcasecmp (visual, "grayscale")) visual = "GrayScale"; else if (!strcasecmp (visual, "greyscale")) visual = "GrayScale"; else if (!strcasecmp (visual, "pseudocolor")) visual = "PseudoColor"; else if (!strcasecmp (visual, "directcolor")) visual = "DirectColor"; else if (1 == sscanf (visual, " %lu %c", &id, &c)) ; else if (1 == sscanf (visual, " 0x%lx %c", &id, &c)) ; else { XBell (XtDisplay (widget), 0); /* unparsable */ visual = ""; /* #### gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (vis)->entry), "Any");*/ } ensure_selected_item_visible (list_widget); if (!p->screenhacks[which]->visual) p->screenhacks[which]->visual = strdup (""); if (!p->screenhacks[which]->command) p->screenhacks[which]->command = strdup (""); if (p->screenhacks[which]->enabled_p != enabled_p || !!strcasecmp (p->screenhacks[which]->visual, visual) || !!strcasecmp (p->screenhacks[which]->command, command)) { /* Something was changed -- store results into the struct, and write the file. */ free (p->screenhacks[which]->visual); free (p->screenhacks[which]->command); p->screenhacks[which]->visual = strdup (visual); p->screenhacks[which]->command = strdup (command); p->screenhacks[which]->enabled_p = enabled_p; return demo_write_init_file (widget, p); } /* No changes made */ return 0; } void run_this_cb (Widget button, XtPointer client_data, XtPointer ignored) { int which = selected_hack_number (XtParent (button)); if (which < 0) return; if (0 == apply_changes_and_save (XtParent (button))) run_hack (XtParent (button), which, True); } void manual_cb (Widget button, XtPointer client_data, XtPointer ignored) { prefs_pair *pair = (prefs_pair *) client_data; saver_preferences *p = pair->a; Widget list_widget = name_to_widget (button, "list"); int which = selected_hack_number (button); char *name, *name2, *cmd, *s; if (which < 0) return; apply_changes_and_save (button); ensure_selected_item_visible (list_widget); name = strdup (p->screenhacks[which]->command); name2 = name; while (isspace (*name2)) name2++; s = name2; while (*s && !isspace (*s)) s++; *s = 0; s = strrchr (name2, '/'); if (s) name = s+1; cmd = get_string_resource (XtDisplay (button), "manualCommand", "ManualCommand"); if (cmd) { char *cmd2 = (char *) malloc (strlen (cmd) + (strlen (name2) * 4) + 100); strcpy (cmd2, "( "); sprintf (cmd2 + strlen (cmd2), cmd, name2, name2, name2, name2); strcat (cmd2, " ) &"); system (cmd2); free (cmd2); } else { warning_dialog (XtParent (button), "Error:\n\nno `manualCommand' resource set.", 100); } free (name); } void run_next_cb (Widget button, XtPointer client_data, XtPointer ignored) { prefs_pair *pair = (prefs_pair *) client_data; saver_preferences *p = pair->a; Widget list_widget = name_to_widget (button, "list"); int which = selected_hack_number (button); button = XtParent (button); if (which < 0) which = 0; else which++; if (which >= p->screenhacks_count) which = 0; apply_changes_and_save (button); XmListDeselectAllItems (list_widget); /* LessTif lossage */ XmListSelectPos (list_widget, which+1, True); ensure_selected_item_visible (list_widget); populate_demo_window (button, which, pair); run_hack (button, which, False); } void run_prev_cb (Widget button, XtPointer client_data, XtPointer ignored) { prefs_pair *pair = (prefs_pair *) client_data; saver_preferences *p = pair->a; Widget list_widget = name_to_widget (button, "list"); int which = selected_hack_number (button); button = XtParent (button); if (which < 0) which = p->screenhacks_count - 1; else which--; if (which < 0) which = p->screenhacks_count - 1; apply_changes_and_save (button); XmListDeselectAllItems (list_widget); /* LessTif lossage */ XmListSelectPos (list_widget, which+1, True); ensure_selected_item_visible (list_widget); populate_demo_window (button, which, pair); run_hack (button, which, False); } /* Helper for the text fields that contain time specifications: this parses the text, and does error checking. */ static void hack_time_text (Widget button, const char *line, Time *store, Bool sec_p) { if (*line) { int value; value = parse_time ((char *) line, sec_p, True); value *= 1000; /* Time measures in microseconds */ if (value < 0) { char b[255]; sprintf (b, "Error:\n\n" "Unparsable time format: \"%s\"\n", line); warning_dialog (XtParent (button), b, 100); } else *store = value; } } void prefs_ok_cb (Widget button, XtPointer client_data, XtPointer ignored) { prefs_pair *pair = (prefs_pair *) client_data; saver_preferences *p = pair->a; saver_preferences *p2 = pair->b; Bool changed = False; char *v = 0; button = XtParent (button); # define SECONDS(field, name) \ v = 0; \ XtVaGetValues (name_to_widget (button, (name)), XtNvalue, &v, NULL); \ hack_time_text (button, v, (field), True) # define MINUTES(field, name) \ v = 0; \ XtVaGetValues (name_to_widget (button, (name)), XtNvalue, &v, NULL); \ hack_time_text (button, v, (field), False) # define INTEGER(field, name) do { \ unsigned int value; \ char c; \ XtVaGetValues (name_to_widget (button, (name)), XtNvalue, &v, NULL); \ if (! *v) \ ; \ else if (sscanf (v, "%u%c", &value, &c) != 1) \ { \ char b[255]; \ sprintf (b, "Error:\n\n" "Not an integer: \"%s\"\n", v); \ warning_dialog (XtParent (button), b, 100); \ } \ else \ *(field) = value; \ } while(0) # define CHECKBOX(field, name) \ XtVaGetValues (name_to_widget (button, (name)), XmNset, &field, NULL) MINUTES (&p2->timeout, "timeoutText"); MINUTES (&p2->cycle, "cycleText"); SECONDS (&p2->fade_seconds, "fadeSecondsText"); INTEGER (&p2->fade_ticks, "fadeTicksText"); MINUTES (&p2->lock_timeout, "lockText"); SECONDS (&p2->passwd_timeout, "passwdText"); CHECKBOX (p2->verbose_p, "verboseToggle"); CHECKBOX (p2->install_cmap_p, "cmapToggle"); CHECKBOX (p2->fade_p, "fadeToggle"); CHECKBOX (p2->unfade_p, "unfadeToggle"); CHECKBOX (p2->lock_p, "lockToggle"); # undef SECONDS # undef MINUTES # undef INTEGER # undef CHECKBOX # define COPY(field) \ if (p->field != p2->field) changed = True; \ p->field = p2->field COPY(timeout); COPY(cycle); COPY(lock_timeout); COPY(passwd_timeout); COPY(fade_seconds); COPY(fade_ticks); COPY(verbose_p); COPY(install_cmap_p); COPY(fade_p); COPY(unfade_p); COPY(lock_p); # undef COPY populate_prefs_page (button, pair); if (changed) demo_write_init_file (button, p); } void prefs_cancel_cb (Widget button, XtPointer client_data, XtPointer ignored) { prefs_pair *pair = (prefs_pair *) client_data; *pair->b = *pair->a; populate_prefs_page (XtParent (button), pair); } static void list_select_cb (Widget list, XtPointer client_data, XtPointer call_data) { prefs_pair *pair = (prefs_pair *) client_data; XmListCallbackStruct *lcb = (XmListCallbackStruct *) call_data; int which = lcb->item_position - 1; apply_changes_and_save (list); populate_demo_window (list, which, pair); if (lcb->reason == XmCR_DEFAULT_ACTION && which >= 0) run_hack (list, which, True); } /* Populating the various widgets */ /* Formats a `Time' into "H:MM:SS". (Time is microseconds.) */ static void format_time (char *buf, Time time) { int s = time / 1000; unsigned int h = 0, m = 0; if (s >= 60) { m += (s / 60); s %= 60; } if (m >= 60) { h += (m / 60); m %= 60; } sprintf (buf, "%u:%02u:%02u", h, m, s); } /* Finds the number of the last hack to run, and makes that item be selected by default. */ static void scroll_to_current_hack (Widget toplevel, prefs_pair *pair) { Atom type; int format; unsigned long nitems, bytesafter; unsigned char *data = 0; Display *dpy = XtDisplay (toplevel); int which = 0; Widget list; if (XGetWindowProperty (dpy, RootWindow (dpy, 0), /* always screen #0 */ XA_SCREENSAVER_STATUS, 0, 3, False, XA_INTEGER, &type, &format, &nitems, &bytesafter, &data) == Success && type == XA_INTEGER && nitems >= 3 && data) which = (int) data[2] - 1; if (data) free (data); if (which < 0) return; list = name_to_widget (toplevel, "list"); apply_changes_and_save (toplevel); XmListDeselectAllItems (list); /* LessTif lossage */ XmListSelectPos (list, which+1, True); ensure_selected_item_visible (list); populate_demo_window (toplevel, which, pair); } static void populate_hack_list (Widget toplevel, prefs_pair *pair) { saver_preferences *p = pair->a; Widget list = name_to_widget (toplevel, "list"); screenhack **hacks = p->screenhacks; screenhack **h; for (h = hacks; *h; h++) { char *pretty_name = (h[0]->name ? strdup (h[0]->name) : make_hack_name (XtDisplay (toplevel), h[0]->command)); XmString xmstr = XmStringCreate (pretty_name, XmSTRING_DEFAULT_CHARSET); XmListAddItem (list, xmstr, 0); XmStringFree (xmstr); } XtAddCallback (list, XmNbrowseSelectionCallback, list_select_cb, pair); XtAddCallback (list, XmNdefaultActionCallback, list_select_cb, pair); } static void populate_prefs_page (Widget top, prefs_pair *pair) { saver_preferences *p = pair->a; char s[100]; format_time (s, p->timeout); XtVaSetValues (name_to_widget (top, "timeoutText"), XmNvalue, s, NULL); format_time (s, p->cycle); XtVaSetValues (name_to_widget (top, "cycleText"), XmNvalue, s, NULL); format_time (s, p->lock_timeout); XtVaSetValues (name_to_widget (top, "lockText"), XmNvalue, s, NULL); format_time (s, p->passwd_timeout); XtVaSetValues (name_to_widget (top, "passwdText"), XmNvalue, s, NULL); format_time (s, p->fade_seconds); XtVaSetValues (name_to_widget (top, "fadeSecondsText"), XmNvalue, s, NULL); sprintf (s, "%u", p->fade_ticks); XtVaSetValues (name_to_widget (top, "fadeTicksText"), XmNvalue, s, NULL); XtVaSetValues (name_to_widget (top, "verboseToggle"), XmNset, p->verbose_p, NULL); XtVaSetValues (name_to_widget (top, "cmapToggle"), XmNset, p->install_cmap_p, NULL); XtVaSetValues (name_to_widget (top, "fadeToggle"), XmNset, p->fade_p, NULL); XtVaSetValues (name_to_widget (top, "unfadeToggle"), XmNset, p->unfade_p, NULL); XtVaSetValues (name_to_widget (top, "lockToggle"), XmNset, p->lock_p, NULL); { Bool found_any_writable_cells = False; Display *dpy = XtDisplay (top); int nscreens = ScreenCount(dpy); int i; for (i = 0; i < nscreens; i++) { Screen *s = ScreenOfDisplay (dpy, i); if (has_writable_cells (s, DefaultVisualOfScreen (s))) { found_any_writable_cells = True; break; } } #ifdef HAVE_XF86VMODE_GAMMA found_any_writable_cells = True; /* if we can gamma fade, go for it */ #endif XtVaSetValues (name_to_widget (top, "fadeSecondsLabel"), XtNsensitive, found_any_writable_cells, NULL); XtVaSetValues (name_to_widget (top, "fadeTicksLabel"), XtNsensitive, found_any_writable_cells, NULL); XtVaSetValues (name_to_widget (top, "fadeSecondsText"), XtNsensitive, found_any_writable_cells, NULL); XtVaSetValues (name_to_widget (top, "fadeTicksText"), XtNsensitive, found_any_writable_cells, NULL); XtVaSetValues (name_to_widget (top, "cmapToggle"), XtNsensitive, found_any_writable_cells, NULL); XtVaSetValues (name_to_widget (top, "fadeToggle"), XtNsensitive, found_any_writable_cells, NULL); XtVaSetValues (name_to_widget (top, "unfadeToggle"), XtNsensitive, found_any_writable_cells, NULL); } } static void sensitize_demo_widgets (Widget toplevel, Bool sensitive_p) { const char *names[] = { "cmdLabel", "cmdText", "enabled", "visLabel", "combo", "demo", "man" }; int i; for (i = 0; i < sizeof(names)/countof(*names); i++) { Widget w = name_to_widget (toplevel, names[i]); XtVaSetValues (w, XtNsensitive, sensitive_p, NULL); } /* I don't know how to handle these yet... */ { const char *names2[] = { "cut", "copy", "paste" }; for (i = 0; i < sizeof(names2)/countof(*names2); i++) { Widget w = name_to_widget (toplevel, names2[i]); XtVaSetValues (w, XtNsensitive, FALSE, NULL); } } } /* Pixmaps for the up and down arrow buttons (yeah, this is sleazy...) */ #ifdef HAVE_XPM static char *up_arrow_xpm[] = { "15 15 4 1", " c None s background", "- c #FFFFFF", "+ c #D6D6D6", "@ c #000000", " @ ", " @ ", " -+@ ", " -+@ ", " -+++@ ", " -+++@ ", " -+++++@ ", " -+++++@ ", " -+++++++@ ", " -+++++++@ ", " -+++++++++@ ", " -+++++++++@ ", " -+++++++++++@ ", " @@@@@@@@@@@@@ ", " " }; static char *down_arrow_xpm[] = { "15 15 4 1", " c None s background", "- c #FFFFFF", "+ c #D6D6D6", "@ c #000000", " ", " ------------- ", " -+++++++++++@ ", " -+++++++++@ ", " -+++++++++@ ", " -+++++++@ ", " -+++++++@ ", " -+++++@ ", " -+++++@ ", " -+++@ ", " -+++@ ", " -+@ ", " -+@ ", " @ ", " @ " }; #endif /* HAVE_XPM */ static void pixmapify_buttons (Widget toplevel) { #ifdef HAVE_XPM Display *dpy = XtDisplay (toplevel); Window window = XtWindow (toplevel); XWindowAttributes xgwa; XpmAttributes xpmattrs; Pixmap up_pixmap = 0, down_pixmap = 0; int result; Widget up = name_to_widget (toplevel, "up"); Widget dn = name_to_widget (toplevel, "down"); # ifdef XpmColorSymbols XColor xc; XpmColorSymbol symbols[2]; char color[20]; # endif XGetWindowAttributes (dpy, window, &xgwa); xpmattrs.valuemask = 0; # ifdef XpmColorSymbols symbols[0].name = "background"; symbols[0].pixel = 0; symbols[1].name = 0; XtVaGetValues (up, XmNbackground, &xc, NULL); XQueryColor (dpy, xgwa.colormap, &xc); sprintf (color, "#%04X%04X%04X", xc.red, xc.green, xc.blue); symbols[0].value = color; symbols[0].pixel = xc.pixel; xpmattrs.valuemask |= XpmColorSymbols; xpmattrs.colorsymbols = symbols; xpmattrs.numsymbols = 1; # endif # ifdef XpmCloseness xpmattrs.valuemask |= XpmCloseness; xpmattrs.closeness = 40000; # endif # ifdef XpmVisual xpmattrs.valuemask |= XpmVisual; xpmattrs.visual = xgwa.visual; # endif # ifdef XpmDepth xpmattrs.valuemask |= XpmDepth; xpmattrs.depth = xgwa.depth; # endif # ifdef XpmColormap xpmattrs.valuemask |= XpmColormap; xpmattrs.colormap = xgwa.colormap; # endif result = XpmCreatePixmapFromData(dpy, window, up_arrow_xpm, &up_pixmap, 0 /* mask */, &xpmattrs); if (!up_pixmap || (result != XpmSuccess && result != XpmColorError)) { fprintf (stderr, "%s: Can't load pixmaps\n", progname); return; } result = XpmCreatePixmapFromData(dpy, window, down_arrow_xpm, &down_pixmap, 0 /* mask */, &xpmattrs); if (!down_pixmap || (result != XpmSuccess && result != XpmColorError)) { fprintf (stderr, "%s: Can't load pixmaps\n", progname); return; } XtVaSetValues (up, XmNlabelType, XmPIXMAP, XmNlabelPixmap, up_pixmap, NULL); XtVaSetValues (dn, XmNlabelType, XmPIXMAP, XmNlabelPixmap, down_pixmap,NULL); #endif /* HAVE_XPM */ } char * get_hack_blurb (Display *dpy, screenhack *hack) { char *doc_string; char *prog_name = strdup (hack->command); char *pretty_name = (hack->name ? strdup (hack->name) : make_hack_name (dpy, hack->command)); char doc_name[255], doc_class[255]; char *s, *s2; for (s = prog_name; *s && !isspace(*s); s++) ; *s = 0; s = strrchr (prog_name, '/'); if (s) strcpy (prog_name, s+1); sprintf (doc_name, "hacks.%s.documentation", pretty_name); sprintf (doc_class, "hacks.%s.documentation", prog_name); free (prog_name); free (pretty_name); doc_string = get_string_resource (dpy, doc_name, doc_class); if (doc_string) { for (s = doc_string; *s; s++) { if (*s == '\n') { /* skip over whitespace at beginning of line */ s++; while (*s && (*s == ' ' || *s == '\t')) s++; } else if (*s == ' ' || *s == '\t') { /* compress all other horizontal whitespace. */ *s = ' '; s++; for (s2 = s; *s2 && (*s2 == ' ' || *s2 == '\t'); s2++) ; if (s2 > s) strcpy (s, s2); s--; } } while (*s && isspace (*s)) /* Strip trailing whitespace */ *(--s) = 0; /* Delete whitespace at end of each line. */ for (; s > doc_string; s--) if (*s == '\n' && (s[-1] == ' ' || s[-1] == '\t')) { for (s2 = s-1; s2 > doc_string && (*s2 == ' ' || *s2 == '\t'); s2--) ; s2++; if (s2 < s) strcpy (s2, s); s = s2; } /* Delete leading blank lines. */ for (s = doc_string; *s == '\n'; s++) ; if (s > doc_string) strcpy (doc_string, s); } else { # if 0 static int doc_installed = 0; if (doc_installed == 0) { if (get_boolean_resource ("hacks.documentation.isInstalled", "hacks.documentation.isInstalled")) doc_installed = 1; else doc_installed = -1; } if (doc_installed < 0) doc_string = strdup ("Error:\n\n" "The documentation strings do not appear to be " "installed. This is probably because there is " "an \"XScreenSaver\" app-defaults file installed " "that is from an older version of the program. " "To fix this problem, delete that file, or " "install a current version (either will work.)"); else # endif /* 0 */ doc_string = strdup ( "\n" "This is the Motif version of \"xscreensaver-demo\". The Motif " "version is no longer maintained. Please use the GTK version " "instead, which has many more features." "\n\n" "If you were running the GTK version, there would be a preview " "of this screen saver mode displayed here, along with graphical " "configuration options."); } return doc_string; } static void populate_demo_window (Widget toplevel, int which, prefs_pair *pair) { saver_preferences *p = pair->a; screenhack *hack = (which >= 0 ? p->screenhacks[which] : 0); Widget frameL = name_to_widget (toplevel, "frameLabel"); Widget doc = name_to_widget (toplevel, "doc"); Widget cmd = name_to_widget (toplevel, "cmdText"); Widget enabled = name_to_widget (toplevel, "enabled"); Widget vis = name_to_widget (toplevel, "combo"); int i = 0; char *pretty_name = (hack ? (hack->name ? strdup (hack->name) : make_hack_name (XtDisplay (toplevel), hack->command)) : 0); char *doc_string = hack ? get_hack_blurb (XtDisplay (toplevel), hack) : 0; XmString xmstr; xmstr = XmStringCreate (pretty_name, XmSTRING_DEFAULT_CHARSET); XtVaSetValues (frameL, XmNlabelString, xmstr, NULL); XmStringFree (xmstr); XtVaSetValues (doc, XmNvalue, doc_string, NULL); XtVaSetValues (cmd, XmNvalue, (hack ? hack->command : ""), NULL); XtVaSetValues (enabled, XmNset, (hack ? hack->enabled_p : False), NULL); i = 0; if (hack && hack->visual && *hack->visual) for (i = 0; visual_menu[i]; i++) if (!strcasecmp (hack->visual, visual_menu[i])) break; if (!visual_menu[i]) i = -1; { # ifdef HAVE_XMCOMBOBOX Widget text = 0; XtVaGetValues (vis, XmNtextField, &text, NULL); XtVaSetValues (vis, XmNselectedPosition, i, NULL); if (i < 0) XtVaSetValues (text, XmNvalue, hack->visual, NULL); # else /* !HAVE_XMCOMBOBOX */ Cardinal nkids; Widget *kids; Widget menu; XtVaGetValues (vis, XmNsubMenuId, &menu, NULL); if (!menu) abort (); XtVaGetValues (menu, XmNnumChildren, &nkids, XmNchildren, &kids, NULL); if (!kids) abort(); if (i < nkids) XtVaSetValues (vis, XmNmenuHistory, kids[i], NULL); # endif /* !HAVE_XMCOMBOBOX */ } sensitize_demo_widgets (toplevel, (hack ? True : False)); if (pretty_name) free (pretty_name); if (doc_string) free (doc_string); _selected_hack_number = which; } static int maybe_reload_init_file (Widget widget, prefs_pair *pair) { int status = 0; saver_preferences *p = pair->a; static Bool reentrant_lock = False; if (reentrant_lock) return 0; reentrant_lock = True; if (init_file_changed_p (p)) { const char *f = init_file_name(); char *b; int which; Widget list; if (!f || !*f) return 0; b = (char *) malloc (strlen(f) + 1024); sprintf (b, "Warning:\n\n" "file \"%s\" has changed, reloading.\n", f); warning_dialog (widget, b, 100); free (b); load_init_file (XtDisplay (widget), p); which = selected_hack_number (widget); list = name_to_widget (widget, "list"); XtVaSetValues (list, XmNitemCount, 0, NULL); populate_hack_list (widget, pair); XmListDeselectAllItems (list); /* LessTif lossage */ XmListSelectPos (list, which+1, True); populate_prefs_page (widget, pair); populate_demo_window (widget, which, pair); ensure_selected_item_visible (list); status = 1; } reentrant_lock = False; return status; } /* Attach all callback functions to widgets */ static void add_callbacks (Widget toplevel, prefs_pair *pair) { Widget w; # define CB(NAME,FN) \ w = name_to_widget (toplevel, (NAME)); \ XtAddCallback (w, XmNactivateCallback, (FN), pair) CB ("blank", activate_menu_cb); CB ("lock", lock_menu_cb); CB ("kill", kill_menu_cb); CB ("restart", restart_menu_cb); CB ("exit", exit_menu_cb); CB ("cut", cut_menu_cb); CB ("copy", copy_menu_cb); CB ("paste", paste_menu_cb); CB ("about", about_menu_cb); CB ("docMenu", doc_menu_cb); CB ("down", run_next_cb); CB ("up", run_prev_cb); CB ("demo", run_this_cb); CB ("man", manual_cb); CB ("preferencesForm.Cancel", prefs_cancel_cb); CB ("preferencesForm.OK", prefs_ok_cb); # undef CB } static void sanity_check_resources (Widget toplevel) { const char *names[] = { "demoTab", "optionsTab", "cmdLabel", "visLabel", "enabled", "demo", "man", "timeoutLabel", "cycleLabel", "fadeSecondsLabel", "fadeTicksLabel", "lockLabel", "passwdLabel" }; int i; for (i = 0; i < sizeof(names)/countof(*names); i++) { Widget w = name_to_widget (toplevel, names[i]); const char *name = XtName(w); XmString xm = 0; char *label = 0; XtVaGetValues (w, XmNlabelString, &xm, NULL); if (xm) XmStringGetLtoR (xm, XmSTRING_DEFAULT_CHARSET, &label); if (w && (!label || !strcmp (name, label))) { xm = XmStringCreate ("ERROR", XmSTRING_DEFAULT_CHARSET); XtVaSetValues (w, XmNlabelString, xm, NULL); } } } /* Set certain buttons to be the same size (the max of the set.) */ static void hack_button_sizes (Widget toplevel) { Widget demo = name_to_widget (toplevel, "demo"); Widget man = name_to_widget (toplevel, "man"); Widget ok = name_to_widget (toplevel, "OK"); Widget can = name_to_widget (toplevel, "Cancel"); Widget up = name_to_widget (toplevel, "up"); Widget down = name_to_widget (toplevel, "down"); Dimension w1, w2; XtVaGetValues (demo, XmNwidth, &w1, NULL); XtVaGetValues (man, XmNwidth, &w2, NULL); XtVaSetValues ((w1 > w2 ? man : demo), XmNwidth, (w1 > w2 ? w1 : w2), NULL); XtVaGetValues (ok, XmNwidth, &w1, NULL); XtVaGetValues (can, XmNwidth, &w2, NULL); XtVaSetValues ((w1 > w2 ? can : ok), XmNwidth, (w1 > w2 ? w1 : w2), NULL); XtVaGetValues (up, XmNwidth, &w1, NULL); XtVaGetValues (down, XmNwidth, &w2, NULL); XtVaSetValues ((w1 > w2 ? down : up), XmNwidth, (w1 > w2 ? w1 : w2), NULL); } /* The main demo-mode command loop. */ #if 0 static Bool mapper (XrmDatabase *db, XrmBindingList bindings, XrmQuarkList quarks, XrmRepresentation *type, XrmValue *value, XPointer closure) { int i; for (i = 0; quarks[i]; i++) { if (bindings[i] == XrmBindTightly) fprintf (stderr, (i == 0 ? "" : ".")); else if (bindings[i] == XrmBindLoosely) fprintf (stderr, "*"); else fprintf (stderr, " ??? "); fprintf(stderr, "%s", XrmQuarkToString (quarks[i])); } fprintf (stderr, ": %s\n", (char *) value->addr); return False; } #endif static void the_network_is_not_the_computer (Widget parent) { Display *dpy = XtDisplay (parent); char *rversion, *ruser, *rhost; char *luser, *lhost; char *msg = 0; struct passwd *p = getpwuid (getuid ()); const char *d = DisplayString (dpy); # if defined(HAVE_UNAME) struct utsname uts; if (uname (&uts) < 0) lhost = ""; else lhost = uts.nodename; # elif defined(VMS) strcpy (lhost, getenv("SYS$NODE")); # else /* !HAVE_UNAME && !VMS */ strcat (lhost, ""); # endif /* !HAVE_UNAME && !VMS */ if (p && p->pw_name) luser = p->pw_name; else luser = "???"; server_xscreensaver_version (dpy, &rversion, &ruser, &rhost); /* Make a buffer that's big enough for a number of copies of all the strings, plus some. */ msg = (char *) malloc (10 * ((rversion ? strlen(rversion) : 0) + (ruser ? strlen(ruser) : 0) + (rhost ? strlen(rhost) : 0) + strlen(lhost) + strlen(luser) + strlen(d) + 1024)); *msg = 0; if (!rversion || !*rversion) { sprintf (msg, "Warning:\n\n" "The XScreenSaver daemon doesn't seem to be running\n" "on display \"%s\". You can launch it by selecting\n" "`Restart Daemon' from the File menu, or by typing\n" "\"xscreensaver &\" in a shell.", d); } else if (p && ruser && *ruser && !!strcmp (ruser, p->pw_name)) { /* Warn that the two processes are running as different users. */ sprintf(msg, "Warning:\n\n" "%s is running as user \"%s\" on host \"%s\".\n" "But the xscreensaver managing display \"%s\"\n" "is running as user \"%s\" on host \"%s\".\n" "\n" "Since they are different users, they won't be reading/writing\n" "the same ~/.xscreensaver file, so %s isn't\n" "going to work right.\n" "\n" "Either re-run %s as \"%s\", or re-run\n" "xscreensaver as \"%s\" (which you can do by\n" "selecting `Restart Daemon' from the File menu.)\n", progname, luser, lhost, d, (ruser ? ruser : "???"), (rhost ? rhost : "???"), progname, progname, (ruser ? ruser : "???"), luser); } else if (rhost && *rhost && !!strcmp (rhost, lhost)) { /* Warn that the two processes are running on different hosts. */ sprintf (msg, "Warning:\n\n" "%s is running as user \"%s\" on host \"%s\".\n" "But the xscreensaver managing display \"%s\"\n" "is running as user \"%s\" on host \"%s\".\n" "\n" "If those two machines don't share a file system (that is,\n" "if they don't see the same ~%s/.xscreensaver file) then\n" "%s won't work right.\n" "\n" "You can restart the daemon on \"%s\" as \"%s\" by\n" "selecting `Restart Daemon' from the File menu.)", progname, luser, lhost, d, (ruser ? ruser : "???"), (rhost ? rhost : "???"), luser, progname, lhost, luser); } else if (!!strcmp (rversion, short_version)) { /* Warn that the version numbers don't match. */ sprintf (msg, "Warning:\n\n" "This is %s version %s.\n" "But the xscreensaver managing display \"%s\"\n" "is version %s. This could cause problems.", progname, short_version, d, rversion); } if (*msg) warning_dialog (parent, msg, 1); free (msg); } /* We use this error handler so that X errors are preceeded by the name of the program that generated them. */ static int demo_ehandler (Display *dpy, XErrorEvent *error) { fprintf (stderr, "\nX error in %s:\n", progname); XmuPrintDefaultErrorMessage (dpy, error, stderr); exit (-1); return 0; } #ifdef __GNUC__ __extension__ /* shut up about "string length is greater than the length ISO C89 compilers are required to support" when including the .ad file... */ #endif static char *defaults[] = { #include "XScreenSaver_ad.h" #include "XScreenSaver_Xm_ad.h" 0 }; int main (int argc, char **argv) { XtAppContext app; prefs_pair Pair, *pair; saver_preferences P, P2, *p, *p2; Bool prefs = False; int i; Display *dpy; Widget toplevel_shell, dialog; char *real_progname = argv[0]; char *s; s = strrchr (real_progname, '/'); if (s) real_progname = s+1; p = &P; p2 = &P2; pair = &Pair; pair->a = p; pair->b = p2; memset (p, 0, sizeof (*p)); memset (p2, 0, sizeof (*p2)); global_prefs_pair = pair; progname = real_progname; /* We must read exactly the same resources as xscreensaver. That means we must have both the same progclass *and* progname, at least as far as the resource database is concerned. So, put "xscreensaver" in argv[0] while initializing Xt. */ argv[0] = "xscreensaver"; progname = argv[0]; toplevel_shell = XtAppInitialize (&app, progclass, 0, 0, &argc, argv, defaults, 0, 0); dpy = XtDisplay (toplevel_shell); db = XtDatabase (dpy); XtGetApplicationNameAndClass (dpy, &progname, &progclass); XSetErrorHandler (demo_ehandler); /* Complain about unrecognized command-line arguments. */ for (i = 1; i < argc; i++) { char *s = argv[i]; if (s[0] == '-' && s[1] == '-') s++; if (!strcmp (s, "-prefs")) prefs = True; else { fprintf (stderr, "usage: %s [ -display dpy-string ] [ -prefs ]\n", real_progname); exit (1); } } short_version = (char *) malloc (5); memcpy (short_version, screensaver_id + 17, 4); short_version [4] = 0; /* Load the init file, which may end up consulting the X resource database and the site-wide app-defaults file. Note that at this point, it's important that `progname' be "xscreensaver", rather than whatever was in argv[0]. */ p->db = db; load_init_file (dpy, p); *p2 = *p; /* Now that Xt has been initialized, and the resources have been read, we can set our `progname' variable to something more in line with reality. */ progname = real_progname; #if 0 { XrmName name = { 0 }; XrmClass class = { 0 }; int count = 0; XrmEnumerateDatabase (db, &name, &class, XrmEnumAllLevels, mapper, (POINTER) &count); } #endif /* Intern the atoms that xscreensaver_command() needs. */ XA_VROOT = XInternAtom (dpy, "__SWM_VROOT", False); XA_SCREENSAVER = XInternAtom (dpy, "SCREENSAVER", False); XA_SCREENSAVER_VERSION = XInternAtom (dpy, "_SCREENSAVER_VERSION",False); XA_SCREENSAVER_STATUS = XInternAtom (dpy, "_SCREENSAVER_STATUS", False); XA_SCREENSAVER_ID = XInternAtom (dpy, "_SCREENSAVER_ID", False); XA_SCREENSAVER_RESPONSE = XInternAtom (dpy, "_SCREENSAVER_RESPONSE", False); XA_SELECT = XInternAtom (dpy, "SELECT", False); XA_DEMO = XInternAtom (dpy, "DEMO", False); XA_ACTIVATE = XInternAtom (dpy, "ACTIVATE", False); XA_BLANK = XInternAtom (dpy, "BLANK", False); XA_LOCK = XInternAtom (dpy, "LOCK", False); XA_EXIT = XInternAtom (dpy, "EXIT", False); XA_RESTART = XInternAtom (dpy, "RESTART", False); /* Create the window and all its widgets. */ dialog = create_xscreensaver_demo (toplevel_shell); /* Set the window's title. */ { char title[255]; char *v = (char *) strdup(strchr(screensaver_id, ' ')); char *s1, *s2, *s3, *s4; s1 = (char *) strchr(v, ' '); s1++; s2 = (char *) strchr(s1, ' '); s3 = (char *) strchr(v, '('); s3++; s4 = (char *) strchr(s3, ')'); *s2 = 0; *s4 = 0; sprintf (title, "%.50s %.50s, %.50s", progclass, s1, s3); XtVaSetValues (toplevel_shell, XtNtitle, title, NULL); free (v); } sanity_check_resources (toplevel_shell); add_callbacks (toplevel_shell, pair); populate_hack_list (toplevel_shell, pair); populate_prefs_page (toplevel_shell, pair); sensitize_demo_widgets (toplevel_shell, False); scroll_to_current_hack (toplevel_shell, pair); XtManageChild (dialog); XtRealizeWidget(toplevel_shell); /* The next few calls must come after XtRealizeWidget(). */ pixmapify_buttons (toplevel_shell); hack_button_sizes (toplevel_shell); ensure_selected_item_visible (name_to_widget (toplevel_shell, "list")); XSync (dpy, False); XtVaSetValues (toplevel_shell, XmNallowShellResize, False, NULL); /* Handle the -prefs command-line argument. */ if (prefs) { Widget tabber = name_to_widget (toplevel_shell, "folder"); Widget this_tab = name_to_widget (toplevel_shell, "optionsTab"); Widget this_page = name_to_widget (toplevel_shell, "preferencesForm"); Widget *kids = 0; Cardinal nkids = 0; if (!tabber) abort(); XtVaGetValues (tabber, XmNnumChildren, &nkids, XmNchildren, &kids, NULL); if (!kids) abort(); if (nkids > 0) XtUnmanageChildren (kids, nkids); XtManageChild (this_page); XmProcessTraversal (this_tab, XmTRAVERSE_CURRENT); } /* Issue any warnings about the running xscreensaver daemon. */ the_network_is_not_the_computer (toplevel_shell); XtAppMainLoop (app); exit (0); } #endif /* HAVE_MOTIF -- whole file */ xscreensaver-5.34/driver/demo-Xm-widgets.c000644 000767 000767 00000073742 07672461511 020320 0ustar00jwzjwz000000 000000 /* demo-Xm.c --- implements the interactive demo-mode and options dialogs. * xscreensaver, Copyright (c) 1999, 2003 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include /* just for debug info */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_XMCOMBOBOX /* a Motif 2.0 widget */ # include # ifndef XmNtextField /* Lesstif 0.89.4 bug */ # undef HAVE_XMCOMBOBOX # endif #endif /* HAVE_XMCOMBOBOX */ #include #include const char *visual_menu[] = { "Any", "Best", "Default", "Default-N", "GL", "TrueColor", "PseudoColor", "StaticGray", "GrayScale", "DirectColor", "Color", "Gray", "Mono", 0 }; static Widget create_demos_page (Widget parent); static Widget create_options_page (Widget parent); static void tab_cb (Widget button, XtPointer client_data, XtPointer ignored) { Widget parent = XtParent(button); Widget tabber = XtNameToWidget (parent, "*folder"); Widget this_tab = (Widget) client_data; Widget *kids = 0; Cardinal nkids = 0; if (!tabber) abort(); XtVaGetValues (tabber, XmNnumChildren, &nkids, XmNchildren, &kids, NULL); if (!kids) abort(); if (nkids > 0) XtUnmanageChildren (kids, nkids); XtManageChild (this_tab); } Widget create_xscreensaver_demo (Widget parent) { /* MainWindow Form Menubar DemoTab OptionsTab HR Tabber (demo page) (options page) */ Widget mainw, form, menubar; Widget demo_tab, options_tab, hr, tabber, demos, options; Arg av[100]; int ac = 0; mainw = XmCreateMainWindow (parent, "demoForm", av, ac); form = XmCreateForm (mainw, "form", av, ac); menubar = XmCreateSimpleMenuBar (form, "menubar", av, ac); XtVaSetValues (menubar, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); { Widget menu = 0, item = 0; char *menus[] = { "*file", "blank", "lock", "kill", "restart", "-", "exit", "*edit", "cut", "copy", "paste", "*help", "about", "docMenu" }; int i; for (i = 0; i < sizeof(menus)/sizeof(*menus); i++) { ac = 0; if (menus[i][0] == '-') item = XmCreateSeparatorGadget (menu, "separator", av, ac); else if (menus[i][0] != '*') item = XmCreatePushButtonGadget (menu, menus[i], av, ac); else { menu = XmCreatePulldownMenu (parent, menus[i]+1, av, ac); XtSetArg (av [ac], XmNsubMenuId, menu); ac++; item = XmCreateCascadeButtonGadget (menubar, menus[i]+1, av, ac); if (!strcmp (menus[i]+1, "help")) XtVaSetValues(menubar, XmNmenuHelpWidget, item, NULL); } XtManageChild (item); } ac = 0; } demo_tab = XmCreatePushButtonGadget (form, "demoTab", av, ac); XtVaSetValues (demo_tab, XmNleftAttachment, XmATTACH_FORM, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, menubar, NULL); options_tab = XmCreatePushButtonGadget (form, "optionsTab", av, ac); XtVaSetValues (options_tab, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, demo_tab, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, demo_tab, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomWidget, demo_tab, NULL); hr = XmCreateSeparatorGadget (form, "hr", av, ac); XtVaSetValues (hr, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, demo_tab, NULL); tabber = XmCreateForm (form, "folder", av, ac); XtVaSetValues (tabber, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, hr, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); demos = create_demos_page (tabber); options = create_options_page (tabber); XtAddCallback (demo_tab, XmNactivateCallback, tab_cb, demos); XtAddCallback (options_tab, XmNactivateCallback, tab_cb, options); XtManageChild (demos); XtManageChild (options); XtManageChild (demo_tab); XtManageChild (options_tab); XtManageChild (hr); XtManageChild (menubar); XtManageChild (tabber); XtManageChild (form); #if 1 XtUnmanageChild (options); XtManageChild (demos); #endif return mainw; } static Widget create_demos_page (Widget parent) { /* Form1 (horizontal) Form2 (vertical) Scroller List ButtonBox1 (vertical) Button ("Down") Button ("Up") Form3 (vertical) Frame Label TextArea (doc) Label Text ("Command Line") Form4 (horizontal) Checkbox ("Enabled") Label ("Visual") ComboBox HR ButtonBox2 (vertical) Button ("Demo") Button ("Documentation") */ Widget form1, form2, form3, form4; Widget scroller, list, buttonbox1, down, up; Widget frame, frame_label, doc, cmd_label, cmd_text, enabled, vis_label; Widget combo; Widget hr, buttonbox2, demo, man; Arg av[100]; int ac = 0; int i; form1 = XmCreateForm (parent, "form1", av, ac); form2 = XmCreateForm (form1, "form2", av, ac); XtVaSetValues (form2, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); scroller = XmCreateScrolledWindow (form2, "scroller", av, ac); XtVaSetValues (scroller, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_WIDGET, NULL); list = XmCreateList (scroller, "list", av, ac); buttonbox1 = XmCreateForm (form2, "buttonbox1", av, ac); XtVaSetValues (buttonbox1, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); XtVaSetValues (scroller, XmNbottomWidget, buttonbox1, NULL); down = XmCreatePushButton (buttonbox1, "down", av, ac); XtVaSetValues (down, XmNleftAttachment, XmATTACH_FORM, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); up = XmCreatePushButton (buttonbox1, "up", av, ac); XtVaSetValues (up, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, down, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); form3 = XmCreateForm (form1, "form3", av, ac); XtVaSetValues (form3, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, form2, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); frame = XmCreateFrame (form3, "frame", av, ac); ac = 0; XtSetArg (av [ac], XmNchildType, XmFRAME_TITLE_CHILD); ac++; frame_label = XmCreateLabelGadget (frame, "frameLabel", av, ac); ac = 0; XtVaSetValues (frame, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_WIDGET, NULL); ac = 0; XtSetArg (av [ac], XmNchildType, XmFRAME_WORKAREA_CHILD); ac++; doc = XmCreateText (frame, "doc", av, ac); ac = 0; XtVaSetValues (doc, XmNeditable, FALSE, XmNcursorPositionVisible, FALSE, XmNwordWrap, TRUE, XmNeditMode, XmMULTI_LINE_EDIT, XmNshadowThickness, 0, NULL); cmd_label = XmCreateLabelGadget (form3, "cmdLabel", av, ac); XtVaSetValues (cmd_label, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_WIDGET, NULL); XtVaSetValues (frame, XmNbottomWidget, cmd_label, NULL); cmd_text = XmCreateTextField (form3, "cmdText", av, ac); XtVaSetValues (cmd_text, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_WIDGET, NULL); XtVaSetValues (cmd_label, XmNbottomWidget, cmd_text, NULL); form4 = XmCreateForm (form3, "form4", av, ac); XtVaSetValues (form4, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_WIDGET, NULL); XtVaSetValues (cmd_text, XmNbottomWidget, form4, NULL); enabled = XmCreateToggleButtonGadget (form4, "enabled", av, ac); XtVaSetValues (enabled, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); vis_label = XmCreateLabelGadget (form4, "visLabel", av, ac); XtVaSetValues (vis_label, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, enabled, XmNbottomAttachment, XmATTACH_FORM, NULL); #ifdef HAVE_XMCOMBOBOX { Widget list; ac = 0; XtSetArg (av [ac], XmNcomboBoxType, XmDROP_DOWN_COMBO_BOX); ac++; combo = XmCreateComboBox (form4, "combo", av, ac); for (i = 0; visual_menu[i]; i++) { XmString xs = XmStringCreate ((char *) visual_menu[i], XmSTRING_DEFAULT_CHARSET); XmComboBoxAddItem (combo, xs, 0, False); XmStringFree (xs); } XtVaGetValues (combo, XmNlist, &list, NULL); XtVaSetValues (list, XmNvisibleItemCount, i, NULL); } #else /* !HAVE_XMCOMBOBOX */ { Widget popup_menu = XmCreatePulldownMenu (parent, "menu", av, ac); Widget kids[100]; for (i = 0; visual_menu[i]; i++) { XmString xs = XmStringCreate ((char *) visual_menu[i], XmSTRING_DEFAULT_CHARSET); ac = 0; XtSetArg (av [ac], XmNlabelString, xs); ac++; kids[i] = XmCreatePushButtonGadget (popup_menu, "button", av, ac); /* XtAddCallback (combo, XmNactivateCallback, visual_popup_cb, combo); */ XmStringFree (xs); } XtManageChildren (kids, i); ac = 0; XtSetArg (av [ac], XmNsubMenuId, popup_menu); ac++; combo = XmCreateOptionMenu (form4, "combo", av, ac); ac = 0; } #endif /* !HAVE_XMCOMBOBOX */ XtVaSetValues (combo, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, vis_label, XmNbottomAttachment, XmATTACH_FORM, NULL); hr = XmCreateSeparatorGadget (form3, "hr", av, ac); XtVaSetValues (hr, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_WIDGET, NULL); XtVaSetValues (form4, XmNbottomWidget, hr, NULL); buttonbox2 = XmCreateForm (form3, "buttonbox2", av, ac); XtVaSetValues (buttonbox2, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); XtVaSetValues (hr, XmNbottomWidget, buttonbox2, NULL); demo = XmCreatePushButtonGadget (buttonbox2, "demo", av, ac); XtVaSetValues (demo, XmNleftAttachment, XmATTACH_FORM, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); man = XmCreatePushButtonGadget (buttonbox2, "man", av, ac); XtVaSetValues (man, XmNrightAttachment, XmATTACH_FORM, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); XtManageChild (demo); XtManageChild (man); XtManageChild (buttonbox2); XtManageChild (hr); XtManageChild (combo); XtManageChild (vis_label); XtManageChild (enabled); XtManageChild (form4); XtManageChild (cmd_text); XtManageChild (cmd_label); XtManageChild (doc); XtManageChild (frame_label); XtManageChild (frame); XtManageChild (form3); XtManageChild (up); XtManageChild (down); XtManageChild (buttonbox1); XtManageChild (list); XtManageChild (scroller); XtManageChild (form2); XtManageChild (form1); XtVaSetValues (form1, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); return form1; } static Widget create_options_page (Widget parent) { /* This is what the layout is today: Form (horizontal) Label ("Saver Timeout") Label ("Cycle Timeout") Label ("Fade Duration") Label ("Fade Ticks") Label ("Lock Timeout") Label ("Password Timeout") Text (timeout) Text (cycle) Text (fade seconds) Text (fade ticks) Text (lock) Text (passwd) Toggle ("Verbose") Toggle ("Install Colormap") Toggle ("Fade Colormap") Toggle ("Unfade Colormap") Toggle ("Require Password") HR Button ("OK") Button ("Cancel") */ /* This is what it should be: Form (horizontal) Form (vertical) ("column1") Frame Label ("Blanking and Locking") Form Label ("Blank After") Label ("Cycle After") Text ("Blank After") Text ("Cycle After") HR Checkbox ("Require Password") Label ("Lock After") Text ("Lock After") Frame Label ("Image Manipulation") Form Checkbox ("Grab Desktop Images") Checkbox ("Grab Video Frames") Checkbox ("Choose Random Image") Text (pathname) Button ("Browse") Frame Label ("Diagnostics") Form Checkbox ("Verbose Diagnostics") Checkbox ("Display Subprocess Errors") Checkbox ("Display Splash Screen at Startup") Form (vertical) ("column2") Frame Label ("Display Power Management") Form Checkbox ("Power Management Enabled") Label ("Standby After") Label ("Suspend After") Label ("Off After") Text ("Standby After") Text ("Suspend After") Text ("Off After") Frame Label ("Colormaps") Form Checkbox ("Install Colormap") HR Checkbox ("Fade To Black When Blanking") Checkbox ("Fade From Black When Unblanking") Label ("Fade Duration") Text ("Fade Duration") timeoutLabel cycleLabel fadeSecondsLabel fadeTicksLabel lockLabel passwdLabel timeoutText cycleText fadeSecondsText fadeTicksText lockText passwdText verboseToggle cmapToggle fadeToggle unfadeToggle lockToggle separator OK Cancel */ Arg av[64]; int ac = 0; Widget children[100]; Widget timeout_label, cycle_label, fade_seconds_label, fade_ticks_label; Widget lock_label, passwd_label, hr; Widget preferences_form; Widget timeout_text, cycle_text, fade_text, fade_ticks_text; Widget lock_timeout_text, passwd_timeout_text, verbose_toggle; Widget install_cmap_toggle, fade_toggle, unfade_toggle; Widget lock_toggle, prefs_done, prefs_cancel; ac = 0; XtSetArg (av [ac], XmNdialogType, XmDIALOG_PROMPT); ac++; ac = 0; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; preferences_form = XmCreateForm (parent, "preferencesForm", av, ac); XtManageChild (preferences_form); ac = 0; XtSetArg(av[ac], XmNalignment, XmALIGNMENT_END); ac++; timeout_label = XmCreateLabelGadget (preferences_form, "timeoutLabel", av, ac); ac = 0; XtSetArg(av[ac], XmNalignment, XmALIGNMENT_END); ac++; cycle_label = XmCreateLabelGadget (preferences_form, "cycleLabel", av, ac); ac = 0; XtSetArg(av[ac], XmNalignment, XmALIGNMENT_END); ac++; fade_seconds_label = XmCreateLabelGadget (preferences_form, "fadeSecondsLabel", av, ac); ac = 0; XtSetArg(av[ac], XmNalignment, XmALIGNMENT_END); ac++; fade_ticks_label = XmCreateLabelGadget (preferences_form, "fadeTicksLabel", av, ac); ac = 0; XtSetArg(av[ac], XmNalignment, XmALIGNMENT_END); ac++; lock_label = XmCreateLabelGadget (preferences_form, "lockLabel", av, ac); ac = 0; XtSetArg(av[ac], XmNalignment, XmALIGNMENT_END); ac++; passwd_label = XmCreateLabelGadget (preferences_form, "passwdLabel", av, ac); ac = 0; timeout_text = XmCreateTextField (preferences_form, "timeoutText", av, ac); cycle_text = XmCreateTextField (preferences_form, "cycleText", av, ac); fade_text = XmCreateTextField (preferences_form, "fadeSecondsText", av, ac); fade_ticks_text = XmCreateTextField (preferences_form, "fadeTicksText", av, ac); lock_timeout_text = XmCreateTextField (preferences_form, "lockText", av, ac); passwd_timeout_text = XmCreateTextField (preferences_form, "passwdText", av, ac); XtSetArg(av[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++; verbose_toggle = XmCreateToggleButtonGadget (preferences_form, "verboseToggle", av, ac); ac = 0; XtSetArg(av[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++; install_cmap_toggle = XmCreateToggleButtonGadget (preferences_form, "cmapToggle", av, ac); ac = 0; XtSetArg(av[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++; fade_toggle = XmCreateToggleButtonGadget (preferences_form, "fadeToggle", av, ac); ac = 0; XtSetArg(av[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++; unfade_toggle = XmCreateToggleButtonGadget (preferences_form, "unfadeToggle", av,ac); ac = 0; XtSetArg(av[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++; lock_toggle = XmCreateToggleButtonGadget (preferences_form, "lockToggle", av, ac); ac = 0; hr = XmCreateSeparatorGadget (preferences_form, "separator", av, ac); prefs_done = XmCreatePushButtonGadget (preferences_form, "OK", av, ac); prefs_cancel = XmCreatePushButtonGadget (preferences_form, "Cancel", av, ac); XtVaSetValues (timeout_label, XmNtopAttachment, XmATTACH_FORM, XmNtopOffset, 4, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomWidget, timeout_text, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 20, XmNrightAttachment, XmATTACH_WIDGET, XmNrightOffset, 4, XmNrightWidget, timeout_text, NULL); XtVaSetValues (cycle_label, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopOffset, 0, XmNtopWidget, cycle_text, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomOffset, 0, XmNbottomWidget, cycle_text, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 20, XmNrightAttachment, XmATTACH_WIDGET, XmNrightOffset, 4, XmNrightWidget, cycle_text, NULL); XtVaSetValues (fade_seconds_label, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopOffset, 0, XmNtopWidget, fade_text, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomOffset, 0, XmNbottomWidget, fade_text, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 20, XmNrightAttachment, XmATTACH_WIDGET, XmNrightOffset, 4, XmNrightWidget, fade_text, NULL); XtVaSetValues (fade_ticks_label, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopOffset, 0, XmNtopWidget, fade_ticks_text, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomOffset, 0, XmNbottomWidget, fade_ticks_text, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 20, XmNrightAttachment, XmATTACH_WIDGET, XmNrightOffset, 4, XmNrightWidget, fade_ticks_text, NULL); XtVaSetValues (lock_label, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopOffset, 0, XmNtopWidget, lock_timeout_text, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomOffset, 0, XmNbottomWidget, lock_timeout_text, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 19, XmNrightAttachment, XmATTACH_WIDGET, XmNrightOffset, 4, XmNrightWidget, lock_timeout_text, NULL); XtVaSetValues (passwd_label, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopOffset, 0, XmNtopWidget, passwd_timeout_text, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomOffset, 0, XmNbottomWidget, passwd_timeout_text, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 14, XmNrightAttachment, XmATTACH_WIDGET, XmNrightOffset, 4, XmNrightWidget, passwd_timeout_text, NULL); XtVaSetValues (timeout_text, XmNtopAttachment, XmATTACH_FORM, XmNtopOffset, 4, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 141, NULL); XtVaSetValues (cycle_text, XmNtopAttachment, XmATTACH_WIDGET, XmNtopOffset, 2, XmNtopWidget, timeout_text, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftOffset, 0, XmNleftWidget, timeout_text, NULL); XtVaSetValues (fade_text, XmNtopAttachment, XmATTACH_WIDGET, XmNtopOffset, 2, XmNtopWidget, cycle_text, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftOffset, 0, XmNleftWidget, cycle_text, NULL); XtVaSetValues (fade_ticks_text, XmNtopAttachment, XmATTACH_WIDGET, XmNtopOffset, 2, XmNtopWidget, fade_text, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftOffset, 0, XmNleftWidget, fade_text, NULL); XtVaSetValues (lock_timeout_text, XmNtopAttachment, XmATTACH_WIDGET, XmNtopOffset, 2, XmNtopWidget, fade_ticks_text, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftOffset, 0, XmNleftWidget, fade_ticks_text, NULL); XtVaSetValues (passwd_timeout_text, XmNtopAttachment, XmATTACH_WIDGET, XmNtopOffset, 4, XmNtopWidget, lock_timeout_text, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftOffset, 0, XmNleftWidget, lock_timeout_text, NULL); XtVaSetValues (verbose_toggle, XmNtopAttachment, XmATTACH_FORM, XmNtopOffset, 4, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomOffset, 0, XmNbottomWidget, timeout_text, XmNleftAttachment, XmATTACH_WIDGET, XmNleftOffset, 20, XmNleftWidget, timeout_text, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 20, NULL); XtVaSetValues (install_cmap_toggle, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopOffset, 0, XmNtopWidget, cycle_text, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomOffset, 0, XmNbottomWidget, cycle_text, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftOffset, 0, XmNleftWidget, verbose_toggle, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 20, NULL); XtVaSetValues (fade_toggle, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopOffset, 0, XmNtopWidget, fade_text, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomOffset, 0, XmNbottomWidget, fade_text, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftOffset, 0, XmNleftWidget, install_cmap_toggle, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 20, NULL); XtVaSetValues (unfade_toggle, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopOffset, 0, XmNtopWidget, fade_ticks_text, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomOffset, 0, XmNbottomWidget, fade_ticks_text, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftOffset, 0, XmNleftWidget, fade_toggle, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 20, NULL); XtVaSetValues (lock_toggle, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopOffset, 0, XmNtopWidget, lock_timeout_text, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomOffset, 0, XmNbottomWidget, lock_timeout_text, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftOffset, 0, XmNleftWidget, unfade_toggle, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 20, NULL); XtVaSetValues (hr, XmNtopWidget, passwd_timeout_text, XmNbottomAttachment, XmATTACH_FORM, XmNbottomOffset, 4, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues (prefs_done, XmNleftAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); XtVaSetValues (prefs_cancel, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); XtVaSetValues (hr, XmNbottomAttachment, XmATTACH_WIDGET, XmNbottomWidget, prefs_done, NULL); ac = 0; children[ac++] = timeout_label; children[ac++] = cycle_label; children[ac++] = fade_seconds_label; children[ac++] = fade_ticks_label; children[ac++] = lock_label; children[ac++] = passwd_label; children[ac++] = timeout_text; children[ac++] = cycle_text; children[ac++] = fade_text; children[ac++] = fade_ticks_text; children[ac++] = lock_timeout_text; children[ac++] = passwd_timeout_text; children[ac++] = verbose_toggle; children[ac++] = install_cmap_toggle; children[ac++] = fade_toggle; children[ac++] = unfade_toggle; children[ac++] = lock_toggle; children[ac++] = hr; XtManageChildren(children, ac); ac = 0; XtManageChild (prefs_done); XtManageChild (prefs_cancel); XtManageChild (preferences_form); XtVaSetValues (preferences_form, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); return preferences_form; } xscreensaver-5.34/driver/demo-Gtk.c000644 000767 000767 00000460332 12474761110 017002 0ustar00jwzjwz000000 000000 /* demo-Gtk.c --- implements the interactive demo-mode and options dialogs. * xscreensaver, Copyright (c) 1993-2013 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifdef HAVE_GTK /* whole file */ #include #include #ifdef HAVE_UNISTD_H # include #endif # ifdef __GNUC__ # define STFU __extension__ /* ignore gcc -pendantic warnings in next sexp */ # else # define STFU /* */ # endif #ifdef ENABLE_NLS # include #endif /* ENABLE_NLS */ #ifndef VMS # include /* for getpwuid() */ #else /* VMS */ # include "vms-pwd.h" #endif /* VMS */ #ifdef HAVE_UNAME # include /* for uname() */ #endif /* HAVE_UNAME */ #include #include #include #include #include #include #ifdef HAVE_SYS_WAIT_H # include /* for waitpid() and associated macros */ #endif #include /* for CARD32 */ #include /* for XA_INTEGER */ #include #include /* We don't actually use any widget internals, but these are included so that gdb will have debug info for the widgets... */ #include #include #ifdef HAVE_XMU # ifndef VMS # include # else /* VMS */ # include # endif #else # include "xmu.h" #endif #ifdef HAVE_XINERAMA # include #endif /* HAVE_XINERAMA */ #include #ifdef HAVE_CRAPPLET # include # include #endif #include #ifdef HAVE_GTK2 # include # include #else /* !HAVE_GTK2 */ # define G_MODULE_EXPORT /**/ #endif /* !HAVE_GTK2 */ #if defined(DEFAULT_ICONDIR) && !defined(GLADE_DIR) # define GLADE_DIR DEFAULT_ICONDIR #endif #if !defined(DEFAULT_ICONDIR) && defined(GLADE_DIR) # define DEFAULT_ICONDIR GLADE_DIR #endif #ifndef HAVE_XML /* Kludge: this is defined in demo-Gtk-conf.c when HAVE_XML. It is unused otherwise, so in that case, stub it out. */ static const char *hack_configuration_path = 0; #endif #include "version.h" #include "prefs.h" #include "resources.h" /* for parse_time() */ #include "visual.h" /* for has_writable_cells() */ #include "remote.h" /* for xscreensaver_command() */ #include "usleep.h" #include "logo-50.xpm" #include "logo-180.xpm" #include "demo-Gtk-conf.h" #include #include #include #ifdef HAVE_GTK2 enum { COL_ENABLED, COL_NAME, COL_LAST }; #endif /* HAVE_GTK2 */ /* Deal with deprecation of direct access to struct fields on the way to GTK3 See http://live.gnome.org/GnomeGoals/UseGseal */ #if GTK_CHECK_VERSION(2,14,0) # define GET_PARENT(w) gtk_widget_get_parent (w) # define GET_WINDOW(w) gtk_widget_get_window (w) # define GET_ACTION_AREA(d) gtk_dialog_get_action_area (d) # define GET_CONTENT_AREA(d) gtk_dialog_get_content_area (d) # define GET_ADJ_VALUE(a) gtk_adjustment_get_value (a) # define SET_ADJ_VALUE(a,v) gtk_adjustment_set_value (a, v) # define SET_ADJ_UPPER(a,v) gtk_adjustment_set_upper (a, v) #else # define GET_PARENT(w) ((w)->parent) # define GET_WINDOW(w) ((w)->window) # define GET_ACTION_AREA(d) ((d)->action_area) # define GET_CONTENT_AREA(d) ((d)->vbox) # define GET_ADJ_VALUE(a) ((a)->value) # define SET_ADJ_VALUE(a,v) (a)->value = v # define SET_ADJ_UPPER(a,v) (a)->upper = v #endif #if GTK_CHECK_VERSION(2,18,0) # define SET_CAN_DEFAULT(w) gtk_widget_set_can_default ((w), TRUE) # define GET_SENSITIVE(w) gtk_widget_get_sensitive (w) #else # define SET_CAN_DEFAULT(w) GTK_WIDGET_SET_FLAGS ((w), GTK_CAN_DEFAULT) # define GET_SENSITIVE(w) GTK_WIDGET_IS_SENSITIVE (w) #endif #if GTK_CHECK_VERSION(2,20,0) # define GET_REALIZED(w) gtk_widget_get_realized (w) #else # define GET_REALIZED(w) GTK_WIDGET_REALIZED (w) #endif /* from exec.c */ extern void exec_command (const char *shell, const char *command, int nice); extern int on_path_p (const char *program); static void hack_subproc_environment (Window preview_window_id, Bool debug_p); #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) /* You might think that to read an array of 32-bit quantities out of a server-side property, you would pass an array of 32-bit data quantities into XGetWindowProperty(). You would be wrong. You have to use an array of longs, even if long is 64 bits (using 32 of each 64.) */ typedef long PROP32; char *progname = 0; char *progclass = "XScreenSaver"; XrmDatabase db; /* The order of the items in the mode menu. */ static int mode_menu_order[] = { DONT_BLANK, BLANK_ONLY, ONE_HACK, RANDOM_HACKS, RANDOM_HACKS_SAME }; typedef struct { char *short_version; /* version number of this xscreensaver build */ GtkWidget *toplevel_widget; /* the main window */ GtkWidget *base_widget; /* root of our hierarchy (for name lookups) */ GtkWidget *popup_widget; /* the "Settings" dialog */ conf_data *cdata; /* private data for per-hack configuration */ #ifdef HAVE_GTK2 GladeXML *glade_ui; /* Glade UI file */ #endif /* HAVE_GTK2 */ Bool debug_p; /* whether to print diagnostics */ Bool initializing_p; /* flag for breaking recursion loops */ Bool saving_p; /* flag for breaking recursion loops */ char *desired_preview_cmd; /* subprocess we intend to run */ char *running_preview_cmd; /* subprocess we are currently running */ pid_t running_preview_pid; /* pid of forked subproc (might be dead) */ Bool running_preview_error_p; /* whether the pid died abnormally */ Bool preview_suppressed_p; /* flag meaning "don't launch subproc" */ int subproc_timer_id; /* timer to delay subproc launch */ int subproc_check_timer_id; /* timer to check whether it started up */ int subproc_check_countdown; /* how many more checks left */ int *list_elt_to_hack_number; /* table for sorting the hack list */ int *hack_number_to_list_elt; /* the inverse table */ Bool *hacks_available_p; /* whether hacks are on $PATH */ int total_available; /* how many are on $PATH */ int list_count; /* how many items are in the list: this may be less than p->screenhacks_count, if some are suppressed. */ int _selected_list_element; /* don't use this: call selected_list_element() instead */ int nscreens; /* How many X or Xinerama screens there are */ saver_preferences prefs; } state; /* Total fucking evilness due to the fact that it's rocket science to get a closure object of our own down into the various widget callbacks. */ static state *global_state_kludge; Atom XA_VROOT; Atom XA_SCREENSAVER, XA_SCREENSAVER_RESPONSE, XA_SCREENSAVER_VERSION; Atom XA_SCREENSAVER_ID, XA_SCREENSAVER_STATUS, XA_SELECT, XA_DEMO; Atom XA_ACTIVATE, XA_BLANK, XA_LOCK, XA_RESTART, XA_EXIT; static void populate_demo_window (state *, int list_elt); static void populate_prefs_page (state *); static void populate_popup_window (state *); static Bool flush_dialog_changes_and_save (state *); static Bool flush_popup_changes_and_save (state *); static int maybe_reload_init_file (state *); static void await_xscreensaver (state *); static Bool xscreensaver_running_p (state *); static void sensitize_menu_items (state *s, Bool force_p); static void force_dialog_repaint (state *s); static void schedule_preview (state *, const char *cmd); static void kill_preview_subproc (state *, Bool reset_p); static void schedule_preview_check (state *); /* Prototypes of functions used by the Glade-generated code, to avoid warnings. */ void exit_menu_cb (GtkMenuItem *, gpointer user_data); void about_menu_cb (GtkMenuItem *, gpointer user_data); void doc_menu_cb (GtkMenuItem *, gpointer user_data); void file_menu_cb (GtkMenuItem *, gpointer user_data); void activate_menu_cb (GtkMenuItem *, gpointer user_data); void lock_menu_cb (GtkMenuItem *, gpointer user_data); void kill_menu_cb (GtkMenuItem *, gpointer user_data); void restart_menu_cb (GtkWidget *, gpointer user_data); void run_this_cb (GtkButton *, gpointer user_data); void manual_cb (GtkButton *, gpointer user_data); void run_next_cb (GtkButton *, gpointer user_data); void run_prev_cb (GtkButton *, gpointer user_data); void pref_changed_cb (GtkWidget *, gpointer user_data); gboolean pref_changed_event_cb (GtkWidget *, GdkEvent *, gpointer user_data); void mode_menu_item_cb (GtkWidget *, gpointer user_data); void switch_page_cb (GtkNotebook *, GtkNotebookPage *, gint page_num, gpointer user_data); void browse_image_dir_cb (GtkButton *, gpointer user_data); void browse_text_file_cb (GtkButton *, gpointer user_data); void browse_text_program_cb (GtkButton *, gpointer user_data); void settings_cb (GtkButton *, gpointer user_data); void settings_adv_cb (GtkButton *, gpointer user_data); void settings_std_cb (GtkButton *, gpointer user_data); void settings_reset_cb (GtkButton *, gpointer user_data); void settings_switch_page_cb (GtkNotebook *, GtkNotebookPage *, gint page_num, gpointer user_data); void settings_cancel_cb (GtkButton *, gpointer user_data); void settings_ok_cb (GtkButton *, gpointer user_data); static void kill_gnome_screensaver (void); static void kill_kde_screensaver (void); /* Some random utility functions */ const char *blurb (void); const char * blurb (void) { time_t now = time ((time_t *) 0); char *ct = (char *) ctime (&now); static char buf[255]; int n = strlen(progname); if (n > 100) n = 99; strncpy(buf, progname, n); buf[n++] = ':'; buf[n++] = ' '; strncpy(buf+n, ct+11, 8); strcpy(buf+n+9, ": "); return buf; } static GtkWidget * name_to_widget (state *s, const char *name) { GtkWidget *w; if (!s) abort(); if (!name) abort(); if (!*name) abort(); #ifdef HAVE_GTK2 if (!s->glade_ui) { /* First try to load the Glade file from the current directory; if there isn't one there, check the installed directory. */ # define GLADE_FILE_NAME "xscreensaver-demo.glade2" const char * const files[] = { GLADE_FILE_NAME, GLADE_DIR "/" GLADE_FILE_NAME }; int i; for (i = 0; i < countof (files); i++) { struct stat st; if (!stat (files[i], &st)) { s->glade_ui = glade_xml_new (files[i], NULL, NULL); break; } } if (!s->glade_ui) { fprintf (stderr, "%s: could not load \"" GLADE_FILE_NAME "\"\n" "\tfrom " GLADE_DIR "/ or current directory.\n", blurb()); exit (-1); } # undef GLADE_FILE_NAME glade_xml_signal_autoconnect (s->glade_ui); } w = glade_xml_get_widget (s->glade_ui, name); #else /* !HAVE_GTK2 */ w = (GtkWidget *) gtk_object_get_data (GTK_OBJECT (s->base_widget), name); if (w) return w; w = (GtkWidget *) gtk_object_get_data (GTK_OBJECT (s->popup_widget), name); #endif /* HAVE_GTK2 */ if (w) return w; fprintf (stderr, "%s: no widget \"%s\" (wrong Glade file?)\n", blurb(), name); abort(); } /* Why this behavior isn't automatic in *either* toolkit, I'll never know. Takes a scroller, viewport, or list as an argument. */ static void ensure_selected_item_visible (GtkWidget *widget) { #ifdef HAVE_GTK2 GtkTreePath *path; GtkTreeSelection *selection; GtkTreeIter iter; GtkTreeModel *model; selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)); if (!gtk_tree_selection_get_selected (selection, &model, &iter)) path = gtk_tree_path_new_first (); else path = gtk_tree_model_get_path (model, &iter); gtk_tree_view_set_cursor (GTK_TREE_VIEW (widget), path, NULL, FALSE); gtk_tree_path_free (path); #else /* !HAVE_GTK2 */ GtkScrolledWindow *scroller = 0; GtkViewport *vp = 0; GtkList *list_widget = 0; GList *slist; GList *kids; int nkids = 0; GtkWidget *selected = 0; int list_elt = -1; GtkAdjustment *adj; gint parent_h, child_y, child_h, children_h, ignore; double ratio_t, ratio_b; if (GTK_IS_SCROLLED_WINDOW (widget)) { scroller = GTK_SCROLLED_WINDOW (widget); vp = GTK_VIEWPORT (GTK_BIN (scroller)->child); list_widget = GTK_LIST (GTK_BIN(vp)->child); } else if (GTK_IS_VIEWPORT (widget)) { vp = GTK_VIEWPORT (widget); scroller = GTK_SCROLLED_WINDOW (GTK_WIDGET (vp)->parent); list_widget = GTK_LIST (GTK_BIN(vp)->child); } else if (GTK_IS_LIST (widget)) { list_widget = GTK_LIST (widget); vp = GTK_VIEWPORT (GTK_WIDGET (list_widget)->parent); scroller = GTK_SCROLLED_WINDOW (GTK_WIDGET (vp)->parent); } else abort(); slist = list_widget->selection; selected = (slist ? GTK_WIDGET (slist->data) : 0); if (!selected) return; list_elt = gtk_list_child_position (list_widget, GTK_WIDGET (selected)); for (kids = gtk_container_children (GTK_CONTAINER (list_widget)); kids; kids = kids->next) nkids++; adj = gtk_scrolled_window_get_vadjustment (scroller); gdk_window_get_geometry (GET_WINDOW (GTK_WIDGET (vp)), &ignore, &ignore, &ignore, &parent_h, &ignore); gdk_window_get_geometry (GET_WINDOW (GTK_WIDGET (selected)), &ignore, &child_y, &ignore, &child_h, &ignore); children_h = nkids * child_h; ratio_t = ((double) child_y) / ((double) children_h); ratio_b = ((double) child_y + child_h) / ((double) children_h); if (adj->upper == 0.0) /* no items in list */ return; if (ratio_t < (adj->value / adj->upper) || ratio_b > ((adj->value + adj->page_size) / adj->upper)) { double target; int slop = parent_h * 0.75; /* how much to overshoot by */ if (ratio_t < (adj->value / adj->upper)) { double ratio_w = ((double) parent_h) / ((double) children_h); double ratio_l = (ratio_b - ratio_t); target = ((ratio_t - ratio_w + ratio_l) * adj->upper); target += slop; } else /* if (ratio_b > ((adj->value + adj->page_size) / adj->upper))*/ { target = ratio_t * adj->upper; target -= slop; } if (target > adj->upper - adj->page_size) target = adj->upper - adj->page_size; if (target < 0) target = 0; gtk_adjustment_set_value (adj, target); } #endif /* !HAVE_GTK2 */ } static void warning_dialog_dismiss_cb (GtkWidget *widget, gpointer user_data) { GtkWidget *shell = GTK_WIDGET (user_data); while (GET_PARENT (shell)) shell = GET_PARENT (shell); gtk_widget_destroy (GTK_WIDGET (shell)); } void restart_menu_cb (GtkWidget *widget, gpointer user_data); static void warning_dialog_restart_cb (GtkWidget *widget, gpointer user_data) { restart_menu_cb (widget, user_data); warning_dialog_dismiss_cb (widget, user_data); } static void warning_dialog_killg_cb (GtkWidget *widget, gpointer user_data) { kill_gnome_screensaver (); warning_dialog_dismiss_cb (widget, user_data); } static void warning_dialog_killk_cb (GtkWidget *widget, gpointer user_data) { kill_kde_screensaver (); warning_dialog_dismiss_cb (widget, user_data); } typedef enum { D_NONE, D_LAUNCH, D_GNOME, D_KDE } dialog_button; static Bool warning_dialog (GtkWidget *parent, const char *message, dialog_button button_type, int center) { char *msg = strdup (message); char *head; GtkWidget *dialog = gtk_dialog_new (); GtkWidget *label = 0; GtkWidget *ok = 0; GtkWidget *cancel = 0; int i = 0; while (parent && !GET_WINDOW (parent)) parent = GET_PARENT (parent); if (!parent || !GET_WINDOW (parent)) /* too early to pop up transient dialogs */ { fprintf (stderr, "%s: too early for dialog?\n", progname); free(msg); return False; } head = msg; while (head) { char name[20]; char *s = strchr (head, '\n'); if (s) *s = 0; sprintf (name, "label%d", i++); { label = gtk_label_new (head); #ifdef HAVE_GTK2 gtk_label_set_selectable (GTK_LABEL (label), TRUE); #endif /* HAVE_GTK2 */ #ifndef HAVE_GTK2 if (i == 1) { GTK_WIDGET (label)->style = gtk_style_copy (GTK_WIDGET (label)->style); GTK_WIDGET (label)->style->font = gdk_font_load (get_string_resource("warning_dialog.headingFont", "Dialog.Font")); gtk_widget_set_style (GTK_WIDGET (label), GTK_WIDGET (label)->style); } #endif /* !HAVE_GTK2 */ if (center <= 0) gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); gtk_box_pack_start (GTK_BOX (GET_CONTENT_AREA (GTK_DIALOG (dialog))), label, TRUE, TRUE, 0); gtk_widget_show (label); } if (s) head = s+1; else head = 0; center--; } label = gtk_label_new (""); gtk_box_pack_start (GTK_BOX (GET_CONTENT_AREA (GTK_DIALOG (dialog))), label, TRUE, TRUE, 0); gtk_widget_show (label); label = gtk_hbutton_box_new (); gtk_box_pack_start (GTK_BOX (GET_ACTION_AREA (GTK_DIALOG (dialog))), label, TRUE, TRUE, 0); #ifdef HAVE_GTK2 if (button_type != D_NONE) { cancel = gtk_button_new_from_stock (GTK_STOCK_CANCEL); gtk_container_add (GTK_CONTAINER (label), cancel); } ok = gtk_button_new_from_stock (GTK_STOCK_OK); gtk_container_add (GTK_CONTAINER (label), ok); #else /* !HAVE_GTK2 */ ok = gtk_button_new_with_label ("OK"); gtk_container_add (GTK_CONTAINER (label), ok); if (button_type != D_NONE) { cancel = gtk_button_new_with_label ("Cancel"); gtk_container_add (GTK_CONTAINER (label), cancel); } #endif /* !HAVE_GTK2 */ gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (dialog), 10); gtk_window_set_title (GTK_WINDOW (dialog), progclass); SET_CAN_DEFAULT (ok); gtk_widget_show (ok); gtk_widget_grab_focus (ok); if (cancel) { SET_CAN_DEFAULT (cancel); gtk_widget_show (cancel); } gtk_widget_show (label); gtk_widget_show (dialog); if (button_type != D_NONE) { GtkSignalFunc fn; switch (button_type) { case D_LAUNCH: fn = GTK_SIGNAL_FUNC (warning_dialog_restart_cb); break; case D_GNOME: fn = GTK_SIGNAL_FUNC (warning_dialog_killg_cb); break; case D_KDE: fn = GTK_SIGNAL_FUNC (warning_dialog_killk_cb); break; default: abort(); break; } gtk_signal_connect_object (GTK_OBJECT (ok), "clicked", fn, (gpointer) dialog); gtk_signal_connect_object (GTK_OBJECT (cancel), "clicked", GTK_SIGNAL_FUNC (warning_dialog_dismiss_cb), (gpointer) dialog); } else { gtk_signal_connect_object (GTK_OBJECT (ok), "clicked", GTK_SIGNAL_FUNC (warning_dialog_dismiss_cb), (gpointer) dialog); } gdk_window_set_transient_for (GET_WINDOW (GTK_WIDGET (dialog)), GET_WINDOW (GTK_WIDGET (parent))); #ifdef HAVE_GTK2 gtk_window_present (GTK_WINDOW (dialog)); #else /* !HAVE_GTK2 */ gdk_window_show (GTK_WIDGET (dialog)->window); gdk_window_raise (GTK_WIDGET (dialog)->window); #endif /* !HAVE_GTK2 */ free (msg); return True; } static void run_cmd (state *s, Atom command, int arg) { char *err = 0; int status; flush_dialog_changes_and_save (s); status = xscreensaver_command (GDK_DISPLAY(), command, arg, False, &err); /* Kludge: ignore the spurious "window unexpectedly deleted" errors... */ if (status < 0 && err && strstr (err, "unexpectedly deleted")) status = 0; if (status < 0) { char buf [255]; if (err) sprintf (buf, "Error:\n\n%s", err); else strcpy (buf, "Unknown error!"); warning_dialog (s->toplevel_widget, buf, D_NONE, 100); } if (err) free (err); sensitize_menu_items (s, True); force_dialog_repaint (s); } static void run_hack (state *s, int list_elt, Bool report_errors_p) { int hack_number; char *err = 0; int status; if (list_elt < 0) return; hack_number = s->list_elt_to_hack_number[list_elt]; flush_dialog_changes_and_save (s); schedule_preview (s, 0); status = xscreensaver_command (GDK_DISPLAY(), XA_DEMO, hack_number + 1, False, &err); if (status < 0 && report_errors_p) { if (xscreensaver_running_p (s)) { /* Kludge: ignore the spurious "window unexpectedly deleted" errors... */ if (err && strstr (err, "unexpectedly deleted")) status = 0; if (status < 0) { char buf [255]; if (err) sprintf (buf, "Error:\n\n%s", err); else strcpy (buf, "Unknown error!"); warning_dialog (s->toplevel_widget, buf, D_NONE, 100); } } else { /* The error is that the daemon isn't running; offer to restart it. */ const char *d = DisplayString (GDK_DISPLAY()); char msg [1024]; sprintf (msg, _("Warning:\n\n" "The XScreenSaver daemon doesn't seem to be running\n" "on display \"%s\". Launch it now?"), d); warning_dialog (s->toplevel_widget, msg, D_LAUNCH, 1); } } if (err) free (err); sensitize_menu_items (s, False); } /* Button callbacks According to Eric Lassauge, this G_MODULE_EXPORT crud is needed to make libglade work on Cygwin; apparently all Glade callbacks need this magic extra declaration. I do not pretend to understand. */ G_MODULE_EXPORT void exit_menu_cb (GtkMenuItem *menuitem, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ flush_dialog_changes_and_save (s); kill_preview_subproc (s, False); gtk_main_quit (); } static gboolean wm_toplevel_close_cb (GtkWidget *widget, GdkEvent *event, gpointer data) { state *s = (state *) data; flush_dialog_changes_and_save (s); gtk_main_quit (); return TRUE; } G_MODULE_EXPORT void about_menu_cb (GtkMenuItem *menuitem, gpointer user_data) { char msg [2048]; char *vers = strdup (screensaver_id + 4); char *s, *s2; char copy[1024]; char year[5]; char *desc = _("For updates, check http://www.jwz.org/xscreensaver/"); s = strchr (vers, ','); *s = 0; s += 2; s2 = vers; s2 = strrchr (vers, '-'); s2++; strncpy (year, s2, 4); year[4] = 0; /* Ole Laursen says "don't use _() here because non-ASCII characters aren't allowed in localizable string keys." (I don't want to just use (c) instead of © because that doesn't look as good in the plain-old default Latin1 "C" locale.) */ #ifdef HAVE_GTK2 sprintf(copy, ("Copyright \xC2\xA9 1991-%s %s"), year, s); #else /* !HAVE_GTK2 */ sprintf(copy, ("Copyright \251 1991-%s %s"), year, s); #endif /* !HAVE_GTK2 */ sprintf (msg, "%s\n\n%s", copy, desc); /* I can't make gnome_about_new() work here -- it starts dying in gdk_imlib_get_visual() under gnome_about_new(). If this worked, then this might be the thing to do: #ifdef HAVE_CRAPPLET { const gchar *auth[] = { 0 }; GtkWidget *about = gnome_about_new (progclass, vers, "", auth, desc, "xscreensaver.xpm"); gtk_widget_show (about); } #else / * GTK but not GNOME * / ... */ { GdkColormap *colormap; GdkPixmap *gdkpixmap; GdkBitmap *mask; GtkWidget *dialog = gtk_dialog_new (); GtkWidget *hbox, *icon, *vbox, *label1, *label2, *hb, *ok; GtkWidget *parent = GTK_WIDGET (menuitem); while (GET_PARENT (parent)) parent = GET_PARENT (parent); hbox = gtk_hbox_new (FALSE, 20); gtk_box_pack_start (GTK_BOX (GET_CONTENT_AREA (GTK_DIALOG (dialog))), hbox, TRUE, TRUE, 0); colormap = gtk_widget_get_colormap (parent); gdkpixmap = gdk_pixmap_colormap_create_from_xpm_d (NULL, colormap, &mask, NULL, (gchar **) logo_180_xpm); icon = gtk_pixmap_new (gdkpixmap, mask); gtk_misc_set_padding (GTK_MISC (icon), 10, 10); gtk_box_pack_start (GTK_BOX (hbox), icon, FALSE, FALSE, 0); vbox = gtk_vbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0); label1 = gtk_label_new (vers); gtk_box_pack_start (GTK_BOX (vbox), label1, TRUE, TRUE, 0); gtk_label_set_justify (GTK_LABEL (label1), GTK_JUSTIFY_LEFT); gtk_misc_set_alignment (GTK_MISC (label1), 0.0, 0.75); #ifndef HAVE_GTK2 GTK_WIDGET (label1)->style = gtk_style_copy (GTK_WIDGET (label1)->style); GTK_WIDGET (label1)->style->font = gdk_font_load (get_string_resource ("about.headingFont","Dialog.Font")); gtk_widget_set_style (GTK_WIDGET (label1), GTK_WIDGET (label1)->style); #endif /* HAVE_GTK2 */ label2 = gtk_label_new (msg); gtk_box_pack_start (GTK_BOX (vbox), label2, TRUE, TRUE, 0); gtk_label_set_justify (GTK_LABEL (label2), GTK_JUSTIFY_LEFT); gtk_misc_set_alignment (GTK_MISC (label2), 0.0, 0.25); #ifndef HAVE_GTK2 GTK_WIDGET (label2)->style = gtk_style_copy (GTK_WIDGET (label2)->style); GTK_WIDGET (label2)->style->font = gdk_font_load (get_string_resource ("about.bodyFont","Dialog.Font")); gtk_widget_set_style (GTK_WIDGET (label2), GTK_WIDGET (label2)->style); #endif /* HAVE_GTK2 */ hb = gtk_hbutton_box_new (); gtk_box_pack_start (GTK_BOX (GET_ACTION_AREA (GTK_DIALOG (dialog))), hb, TRUE, TRUE, 0); #ifdef HAVE_GTK2 ok = gtk_button_new_from_stock (GTK_STOCK_OK); #else /* !HAVE_GTK2 */ ok = gtk_button_new_with_label (_("OK")); #endif /* !HAVE_GTK2 */ gtk_container_add (GTK_CONTAINER (hb), ok); gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (dialog), 10); gtk_window_set_title (GTK_WINDOW (dialog), progclass); gtk_widget_show (hbox); gtk_widget_show (icon); gtk_widget_show (vbox); gtk_widget_show (label1); gtk_widget_show (label2); gtk_widget_show (hb); gtk_widget_show (ok); gtk_widget_show (dialog); gtk_signal_connect_object (GTK_OBJECT (ok), "clicked", GTK_SIGNAL_FUNC (warning_dialog_dismiss_cb), (gpointer) dialog); gdk_window_set_transient_for (GET_WINDOW (GTK_WIDGET (dialog)), GET_WINDOW (GTK_WIDGET (parent))); gdk_window_show (GET_WINDOW (GTK_WIDGET (dialog))); gdk_window_raise (GET_WINDOW (GTK_WIDGET (dialog))); } } G_MODULE_EXPORT void doc_menu_cb (GtkMenuItem *menuitem, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ saver_preferences *p = &s->prefs; char *help_command; if (!p->help_url || !*p->help_url) { warning_dialog (s->toplevel_widget, _("Error:\n\n" "No Help URL has been specified.\n"), D_NONE, 100); return; } help_command = (char *) malloc (strlen (p->load_url_command) + (strlen (p->help_url) * 4) + 20); strcpy (help_command, "( "); sprintf (help_command + strlen(help_command), p->load_url_command, p->help_url, p->help_url, p->help_url, p->help_url); strcat (help_command, " ) &"); if (system (help_command) < 0) fprintf (stderr, "%s: fork error\n", blurb()); free (help_command); } G_MODULE_EXPORT void file_menu_cb (GtkMenuItem *menuitem, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ sensitize_menu_items (s, False); } G_MODULE_EXPORT void activate_menu_cb (GtkMenuItem *menuitem, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ run_cmd (s, XA_ACTIVATE, 0); } G_MODULE_EXPORT void lock_menu_cb (GtkMenuItem *menuitem, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ run_cmd (s, XA_LOCK, 0); } G_MODULE_EXPORT void kill_menu_cb (GtkMenuItem *menuitem, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ run_cmd (s, XA_EXIT, 0); } G_MODULE_EXPORT void restart_menu_cb (GtkWidget *widget, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ flush_dialog_changes_and_save (s); xscreensaver_command (GDK_DISPLAY(), XA_EXIT, 0, False, NULL); sleep (1); if (system ("xscreensaver -nosplash &") < 0) fprintf (stderr, "%s: fork error\n", blurb()); await_xscreensaver (s); } static Bool xscreensaver_running_p (state *s) { Display *dpy = GDK_DISPLAY(); char *rversion = 0; server_xscreensaver_version (dpy, &rversion, 0, 0); if (!rversion) return False; free (rversion); return True; } static void await_xscreensaver (state *s) { int countdown = 5; Bool ok = False; while (!ok && (--countdown > 0)) if (xscreensaver_running_p (s)) ok = True; else sleep (1); /* If it's not there yet, wait a second... */ sensitize_menu_items (s, True); if (! ok) { /* Timed out, no screensaver running. */ char buf [1024]; Bool root_p = (geteuid () == 0); strcpy (buf, _("Error:\n\n" "The xscreensaver daemon did not start up properly.\n" "\n")); if (root_p) # ifdef __GNUC__ __extension__ /* don't warn about "string length is greater than the length ISO C89 compilers are required to support" in the following expression... */ # endif 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" "\n" " xhost +localhost\n" "\n" "and then selecting `File / Restart Daemon'.\n" "\n" "Note that turning off access control will allow anyone logged\n" "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.")); else strcat (buf, _("Please check your $PATH and permissions.")); warning_dialog (s->toplevel_widget, buf, D_NONE, 1); } force_dialog_repaint (s); } static int selected_list_element (state *s) { return s->_selected_list_element; } static int demo_write_init_file (state *s, saver_preferences *p) { Display *dpy = GDK_DISPLAY(); #if 0 /* #### try to figure out why shit keeps getting reordered... */ if (strcmp (s->prefs.screenhacks[0]->name, "DNA Lounge Slideshow")) abort(); #endif if (!write_init_file (dpy, p, s->short_version, False)) { if (s->debug_p) fprintf (stderr, "%s: wrote %s\n", blurb(), init_file_name()); return 0; } else { const char *f = init_file_name(); if (!f || !*f) warning_dialog (s->toplevel_widget, _("Error:\n\nCouldn't determine init file name!\n"), D_NONE, 100); else { char *b = (char *) malloc (strlen(f) + 1024); sprintf (b, _("Error:\n\nCouldn't write %s\n"), f); warning_dialog (s->toplevel_widget, b, D_NONE, 100); free (b); } return -1; } } G_MODULE_EXPORT void run_this_cb (GtkButton *button, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ int list_elt = selected_list_element (s); if (list_elt < 0) return; if (!flush_dialog_changes_and_save (s)) run_hack (s, list_elt, True); } G_MODULE_EXPORT void manual_cb (GtkButton *button, gpointer user_data) { Display *dpy = GDK_DISPLAY(); state *s = global_state_kludge; /* I hate C so much... */ saver_preferences *p = &s->prefs; GtkWidget *list_widget = name_to_widget (s, "list"); int list_elt = selected_list_element (s); int hack_number; char *name, *name2, *cmd, *str; char *oname = 0; if (list_elt < 0) return; hack_number = s->list_elt_to_hack_number[list_elt]; flush_dialog_changes_and_save (s); ensure_selected_item_visible (list_widget); name = strdup (p->screenhacks[hack_number]->command); name2 = name; oname = name; while (isspace (*name2)) name2++; str = name2; while (*str && !isspace (*str)) str++; *str = 0; str = strrchr (name2, '/'); if (str) name2 = str+1; cmd = get_string_resource (dpy, "manualCommand", "ManualCommand"); if (cmd) { char *cmd2 = (char *) malloc (strlen (cmd) + (strlen (name2) * 4) + 100); strcpy (cmd2, "( "); sprintf (cmd2 + strlen (cmd2), cmd, name2, name2, name2, name2); strcat (cmd2, " ) &"); if (system (cmd2) < 0) fprintf (stderr, "%s: fork error\n", blurb()); free (cmd2); } else { warning_dialog (GTK_WIDGET (button), _("Error:\n\nno `manualCommand' resource set."), D_NONE, 100); } free (oname); } static void force_list_select_item (state *s, GtkWidget *list, int list_elt, Bool scroll_p) { GtkWidget *parent = name_to_widget (s, "scroller"); gboolean was = GET_SENSITIVE (parent); #ifdef HAVE_GTK2 GtkTreeIter iter; GtkTreeModel *model; GtkTreeSelection *selection; #endif /* HAVE_GTK2 */ if (!was) gtk_widget_set_sensitive (parent, True); #ifdef HAVE_GTK2 model = gtk_tree_view_get_model (GTK_TREE_VIEW (list)); g_assert (model); if (gtk_tree_model_iter_nth_child (model, &iter, NULL, list_elt)) { selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (list)); gtk_tree_selection_select_iter (selection, &iter); } #else /* !HAVE_GTK2 */ gtk_list_select_item (GTK_LIST (list), list_elt); #endif /* !HAVE_GTK2 */ if (scroll_p) ensure_selected_item_visible (GTK_WIDGET (list)); if (!was) gtk_widget_set_sensitive (parent, False); } G_MODULE_EXPORT void run_next_cb (GtkButton *button, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ /* saver_preferences *p = &s->prefs; */ Bool ops = s->preview_suppressed_p; GtkWidget *list_widget = name_to_widget (s, "list"); int list_elt = selected_list_element (s); if (list_elt < 0) list_elt = 0; else list_elt++; if (list_elt >= s->list_count) list_elt = 0; s->preview_suppressed_p = True; flush_dialog_changes_and_save (s); force_list_select_item (s, list_widget, list_elt, True); populate_demo_window (s, list_elt); run_hack (s, list_elt, False); s->preview_suppressed_p = ops; } G_MODULE_EXPORT void run_prev_cb (GtkButton *button, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ /* saver_preferences *p = &s->prefs; */ Bool ops = s->preview_suppressed_p; GtkWidget *list_widget = name_to_widget (s, "list"); int list_elt = selected_list_element (s); if (list_elt < 0) list_elt = s->list_count - 1; else list_elt--; if (list_elt < 0) list_elt = s->list_count - 1; s->preview_suppressed_p = True; flush_dialog_changes_and_save (s); force_list_select_item (s, list_widget, list_elt, True); populate_demo_window (s, list_elt); run_hack (s, list_elt, False); s->preview_suppressed_p = ops; } /* Writes the given settings into prefs. Returns true if there was a change, False otherwise. command and/or visual may be 0, or enabled_p may be -1, meaning "no change". */ static Bool flush_changes (state *s, int list_elt, int enabled_p, const char *command, const char *visual) { saver_preferences *p = &s->prefs; Bool changed = False; screenhack *hack; int hack_number; if (list_elt < 0 || list_elt >= s->list_count) abort(); hack_number = s->list_elt_to_hack_number[list_elt]; hack = p->screenhacks[hack_number]; if (enabled_p != -1 && enabled_p != hack->enabled_p) { hack->enabled_p = enabled_p; changed = True; if (s->debug_p) fprintf (stderr, "%s: \"%s\": enabled => %d\n", blurb(), hack->name, enabled_p); } if (command) { if (!hack->command || !!strcmp (command, hack->command)) { if (hack->command) free (hack->command); hack->command = strdup (command); changed = True; if (s->debug_p) fprintf (stderr, "%s: \"%s\": command => \"%s\"\n", blurb(), hack->name, command); } } if (visual) { const char *ov = hack->visual; if (!ov || !*ov) ov = "any"; if (!*visual) visual = "any"; if (!!strcasecmp (visual, ov)) { if (hack->visual) free (hack->visual); hack->visual = strdup (visual); changed = True; if (s->debug_p) fprintf (stderr, "%s: \"%s\": visual => \"%s\"\n", blurb(), hack->name, visual); } } return changed; } /* Helper for the text fields that contain time specifications: this parses the text, and does error checking. */ static void hack_time_text (state *s, const char *line, Time *store, Bool sec_p) { if (*line) { int value; if (!sec_p || strchr (line, ':')) value = parse_time ((char *) line, sec_p, True); else { char c; if (sscanf (line, "%d%c", &value, &c) != 1) value = -1; if (!sec_p) value *= 60; } value *= 1000; /* Time measures in microseconds */ if (value < 0) { char b[255]; sprintf (b, _("Error:\n\n" "Unparsable time format: \"%s\"\n"), line); warning_dialog (s->toplevel_widget, b, D_NONE, 100); } else *store = value; } } static Bool directory_p (const char *path) { struct stat st; if (!path || !*path) return False; else if (stat (path, &st)) return False; else if (!S_ISDIR (st.st_mode)) return False; else return True; } static Bool file_p (const char *path) { struct stat st; if (!path || !*path) return False; else if (stat (path, &st)) return False; else if (S_ISDIR (st.st_mode)) return False; else return True; } static char * normalize_directory (const char *path) { int L; char *p2, *s; if (!path || !*path) return 0; L = strlen (path); p2 = (char *) malloc (L + 2); strcpy (p2, path); if (p2[L-1] == '/') /* remove trailing slash */ p2[--L] = 0; for (s = p2; s && *s; s++) { if (*s == '/' && (!strncmp (s, "/../", 4) || /* delete "XYZ/../" */ !strncmp (s, "/..\000", 4))) /* delete "XYZ/..$" */ { char *s0 = s; while (s0 > p2 && s0[-1] != '/') s0--; if (s0 > p2) { s0--; s += 3; /* strcpy (s0, s); */ memmove(s0, s, strlen(s) + 1); s = s0-1; } } else if (*s == '/' && !strncmp (s, "/./", 3)) { /* delete "/./" */ /* strcpy (s, s+2), s--; */ memmove(s, s+2, strlen(s+2) + 1); s--; } else if (*s == '/' && !strncmp (s, "/.\000", 3)) /* delete "/.$" */ *s = 0, s--; } /* Normalize consecutive slashes. Ignore doubled slashes after ":" to avoid mangling URLs. */ for (s = p2; s && *s; s++){ if (*s == ':') continue; if (!s[1] || !s[2]) continue; while (s[1] == '/' && s[2] == '/') /* strcpy (s+1, s+2); */ memmove (s+1, s+2, strlen(s+2) + 1); } /* and strip trailing whitespace for good measure. */ L = strlen(p2); while (isspace(p2[L-1])) p2[--L] = 0; return p2; } #ifdef HAVE_GTK2 typedef struct { state *s; int i; Bool *changed; } FlushForeachClosure; static gboolean flush_checkbox (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) { FlushForeachClosure *closure = data; gboolean checked; gtk_tree_model_get (model, iter, COL_ENABLED, &checked, -1); if (flush_changes (closure->s, closure->i, checked, 0, 0)) *closure->changed = True; closure->i++; /* don't remove row */ return FALSE; } #endif /* HAVE_GTK2 */ /* Flush out any changes made in the main dialog window (where changes take place immediately: clicking on a checkbox causes the init file to be written right away.) */ static Bool flush_dialog_changes_and_save (state *s) { saver_preferences *p = &s->prefs; saver_preferences P2, *p2 = &P2; #ifdef HAVE_GTK2 GtkTreeView *list_widget = GTK_TREE_VIEW (name_to_widget (s, "list")); GtkTreeModel *model = gtk_tree_view_get_model (list_widget); FlushForeachClosure closure; #else /* !HAVE_GTK2 */ GtkList *list_widget = GTK_LIST (name_to_widget (s, "list")); GList *kids = gtk_container_children (GTK_CONTAINER (list_widget)); int i; #endif /* !HAVE_GTK2 */ static Bool already_warned_about_missing_image_directory = False; /* very long name... */ Bool changed = False; GtkWidget *w; if (s->saving_p) return False; s->saving_p = True; *p2 = *p; /* Flush any checkbox changes in the list down into the prefs struct. */ #ifdef HAVE_GTK2 closure.s = s; closure.changed = &changed; closure.i = 0; gtk_tree_model_foreach (model, flush_checkbox, &closure); #else /* !HAVE_GTK2 */ for (i = 0; kids; kids = kids->next, i++) { GtkWidget *line = GTK_WIDGET (kids->data); GtkWidget *line_hbox = GTK_WIDGET (GTK_BIN (line)->child); GtkWidget *line_check = GTK_WIDGET (gtk_container_children (GTK_CONTAINER (line_hbox))->data); Bool checked = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (line_check)); if (flush_changes (s, i, (checked ? 1 : 0), 0, 0)) changed = True; } #endif /* ~HAVE_GTK2 */ /* Flush the non-hack-specific settings down into the prefs struct. */ # define SECONDS(FIELD,NAME) \ w = name_to_widget (s, (NAME)); \ hack_time_text (s, gtk_entry_get_text (GTK_ENTRY (w)), (FIELD), True) # define MINUTES(FIELD,NAME) \ w = name_to_widget (s, (NAME)); \ hack_time_text (s, gtk_entry_get_text (GTK_ENTRY (w)), (FIELD), False) # define CHECKBOX(FIELD,NAME) \ w = name_to_widget (s, (NAME)); \ (FIELD) = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)) # define PATHNAME(FIELD,NAME) \ w = name_to_widget (s, (NAME)); \ (FIELD) = normalize_directory (gtk_entry_get_text (GTK_ENTRY (w))) # define TEXT(FIELD,NAME) \ w = name_to_widget (s, (NAME)); \ (FIELD) = (char *) g_strdup(gtk_entry_get_text (GTK_ENTRY (w))) MINUTES (&p2->timeout, "timeout_spinbutton"); MINUTES (&p2->cycle, "cycle_spinbutton"); CHECKBOX (p2->lock_p, "lock_button"); MINUTES (&p2->lock_timeout, "lock_spinbutton"); CHECKBOX (p2->dpms_enabled_p, "dpms_button"); CHECKBOX (p2->dpms_quickoff_p, "dpms_quickoff_button"); MINUTES (&p2->dpms_standby, "dpms_standby_spinbutton"); MINUTES (&p2->dpms_suspend, "dpms_suspend_spinbutton"); MINUTES (&p2->dpms_off, "dpms_off_spinbutton"); CHECKBOX (p2->grab_desktop_p, "grab_desk_button"); CHECKBOX (p2->grab_video_p, "grab_video_button"); CHECKBOX (p2->random_image_p, "grab_image_button"); PATHNAME (p2->image_directory, "image_text"); #if 0 CHECKBOX (p2->verbose_p, "verbose_button"); CHECKBOX (p2->capture_stderr_p, "capture_button"); CHECKBOX (p2->splash_p, "splash_button"); #endif { Bool v = False; CHECKBOX (v, "text_host_radio"); if (v) p2->tmode = TEXT_DATE; CHECKBOX (v, "text_radio"); if (v) p2->tmode = TEXT_LITERAL; CHECKBOX (v, "text_file_radio"); if (v) p2->tmode = TEXT_FILE; CHECKBOX (v, "text_program_radio"); if (v) p2->tmode = TEXT_PROGRAM; CHECKBOX (v, "text_url_radio"); if (v) p2->tmode = TEXT_URL; TEXT (p2->text_literal, "text_entry"); PATHNAME (p2->text_file, "text_file_entry"); PATHNAME (p2->text_program, "text_program_entry"); PATHNAME (p2->text_program, "text_program_entry"); TEXT (p2->text_url, "text_url_entry"); } CHECKBOX (p2->install_cmap_p, "install_button"); CHECKBOX (p2->fade_p, "fade_button"); CHECKBOX (p2->unfade_p, "unfade_button"); SECONDS (&p2->fade_seconds, "fade_spinbutton"); # undef SECONDS # undef MINUTES # undef CHECKBOX # undef PATHNAME # undef TEXT /* Warn if the image directory doesn't exist, when: - not being warned before - image directory is changed and the directory doesn't exist - image directory does not begin with http:// */ if (p2->image_directory && *p2->image_directory && !directory_p (p2->image_directory) && strncmp(p2->image_directory, "http://", 6) && ( !already_warned_about_missing_image_directory || ( p->image_directory && *p->image_directory && strcmp(p->image_directory, p2->image_directory) ) ) ) { char b[255]; sprintf (b, "Warning:\n\n" "Directory does not exist: \"%s\"\n", p2->image_directory); if (warning_dialog (s->toplevel_widget, b, D_NONE, 100)) already_warned_about_missing_image_directory = True; } /* Map the mode menu to `saver_mode' enum values. */ { GtkOptionMenu *opt = GTK_OPTION_MENU (name_to_widget (s, "mode_menu")); GtkMenu *menu = GTK_MENU (gtk_option_menu_get_menu (opt)); GtkWidget *selected = gtk_menu_get_active (menu); GList *kids = gtk_container_children (GTK_CONTAINER (menu)); int menu_elt = g_list_index (kids, (gpointer) selected); if (menu_elt < 0 || menu_elt >= countof(mode_menu_order)) abort(); p2->mode = mode_menu_order[menu_elt]; } if (p2->mode == ONE_HACK) { int list_elt = selected_list_element (s); p2->selected_hack = (list_elt >= 0 ? s->list_elt_to_hack_number[list_elt] : -1); } # define COPY(field, name) \ if (p->field != p2->field) { \ changed = True; \ if (s->debug_p) \ fprintf (stderr, "%s: %s => %d\n", blurb(), name, (int) p2->field); \ } \ p->field = p2->field COPY(mode, "mode"); COPY(selected_hack, "selected_hack"); COPY(timeout, "timeout"); COPY(cycle, "cycle"); COPY(lock_p, "lock_p"); COPY(lock_timeout, "lock_timeout"); COPY(dpms_enabled_p, "dpms_enabled_p"); COPY(dpms_quickoff_p, "dpms_quickoff_enabled_p"); COPY(dpms_standby, "dpms_standby"); COPY(dpms_suspend, "dpms_suspend"); COPY(dpms_off, "dpms_off"); #if 0 COPY(verbose_p, "verbose_p"); COPY(capture_stderr_p, "capture_stderr_p"); COPY(splash_p, "splash_p"); #endif COPY(tmode, "tmode"); COPY(install_cmap_p, "install_cmap_p"); COPY(fade_p, "fade_p"); COPY(unfade_p, "unfade_p"); COPY(fade_seconds, "fade_seconds"); COPY(grab_desktop_p, "grab_desktop_p"); COPY(grab_video_p, "grab_video_p"); COPY(random_image_p, "random_image_p"); # undef COPY # define COPYSTR(FIELD,NAME) \ if (!p->FIELD || \ !p2->FIELD || \ strcmp(p->FIELD, p2->FIELD)) \ { \ changed = True; \ if (s->debug_p) \ fprintf (stderr, "%s: %s => \"%s\"\n", blurb(), NAME, p2->FIELD); \ } \ if (p->FIELD && p->FIELD != p2->FIELD) \ free (p->FIELD); \ p->FIELD = p2->FIELD; \ p2->FIELD = 0 COPYSTR(image_directory, "image_directory"); COPYSTR(text_literal, "text_literal"); COPYSTR(text_file, "text_file"); COPYSTR(text_program, "text_program"); COPYSTR(text_url, "text_url"); # undef COPYSTR populate_prefs_page (s); if (changed) { Display *dpy = GDK_DISPLAY(); Bool enabled_p = (p->dpms_enabled_p && p->mode != DONT_BLANK); sync_server_dpms_settings (dpy, enabled_p, p->dpms_quickoff_p, p->dpms_standby / 1000, p->dpms_suspend / 1000, p->dpms_off / 1000, False); changed = demo_write_init_file (s, p); } s->saving_p = False; return changed; } /* Flush out any changes made in the popup dialog box (where changes take place only when the OK button is clicked.) */ static Bool flush_popup_changes_and_save (state *s) { Bool changed = False; saver_preferences *p = &s->prefs; int list_elt = selected_list_element (s); GtkEntry *cmd = GTK_ENTRY (name_to_widget (s, "cmd_text")); GtkCombo *vis = GTK_COMBO (name_to_widget (s, "visual_combo")); const char *visual = gtk_entry_get_text (GTK_ENTRY (GTK_COMBO (vis)->entry)); const char *command = gtk_entry_get_text (cmd); char c; unsigned long id; if (s->saving_p) return False; s->saving_p = True; if (list_elt < 0) goto DONE; if (maybe_reload_init_file (s) != 0) { changed = True; goto DONE; } /* Sanity-check and canonicalize whatever the user typed into the combo box. */ if (!strcasecmp (visual, "")) visual = ""; else if (!strcasecmp (visual, "any")) visual = ""; else if (!strcasecmp (visual, "default")) visual = "Default"; else if (!strcasecmp (visual, "default-n")) visual = "Default-N"; else if (!strcasecmp (visual, "default-i")) visual = "Default-I"; else if (!strcasecmp (visual, "best")) visual = "Best"; else if (!strcasecmp (visual, "mono")) visual = "Mono"; else if (!strcasecmp (visual, "monochrome")) visual = "Mono"; else if (!strcasecmp (visual, "gray")) visual = "Gray"; else if (!strcasecmp (visual, "grey")) visual = "Gray"; else if (!strcasecmp (visual, "color")) visual = "Color"; else if (!strcasecmp (visual, "gl")) visual = "GL"; else if (!strcasecmp (visual, "staticgray")) visual = "StaticGray"; else if (!strcasecmp (visual, "staticcolor")) visual = "StaticColor"; else if (!strcasecmp (visual, "truecolor")) visual = "TrueColor"; else if (!strcasecmp (visual, "grayscale")) visual = "GrayScale"; else if (!strcasecmp (visual, "greyscale")) visual = "GrayScale"; else if (!strcasecmp (visual, "pseudocolor")) visual = "PseudoColor"; else if (!strcasecmp (visual, "directcolor")) visual = "DirectColor"; else if (1 == sscanf (visual, " %lu %c", &id, &c)) ; else if (1 == sscanf (visual, " 0x%lx %c", &id, &c)) ; else { gdk_beep (); /* unparsable */ visual = ""; gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (vis)->entry), _("Any")); } changed = flush_changes (s, list_elt, -1, command, visual); if (changed) { changed = demo_write_init_file (s, p); /* Do this to re-launch the hack if (and only if) the command line has changed. */ populate_demo_window (s, selected_list_element (s)); } DONE: s->saving_p = False; return changed; } G_MODULE_EXPORT void pref_changed_cb (GtkWidget *widget, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ if (! s->initializing_p) { s->initializing_p = True; flush_dialog_changes_and_save (s); s->initializing_p = False; } } G_MODULE_EXPORT gboolean pref_changed_event_cb (GtkWidget *widget, GdkEvent *event, gpointer user_data) { pref_changed_cb (widget, user_data); return FALSE; } /* Callback on menu items in the "mode" options menu. */ G_MODULE_EXPORT void mode_menu_item_cb (GtkWidget *widget, gpointer user_data) { state *s = (state *) user_data; saver_preferences *p = &s->prefs; GtkWidget *list = name_to_widget (s, "list"); int list_elt; GList *menu_items = gtk_container_children (GTK_CONTAINER (GET_PARENT (widget))); int menu_index = 0; saver_mode new_mode; while (menu_items) { if (menu_items->data == widget) break; menu_index++; menu_items = menu_items->next; } if (!menu_items) abort(); new_mode = mode_menu_order[menu_index]; /* Keep the same list element displayed as before; except if we're switching *to* "one screensaver" mode from any other mode, set "the one" to be that which is currently selected. */ list_elt = selected_list_element (s); if (new_mode == ONE_HACK) p->selected_hack = s->list_elt_to_hack_number[list_elt]; { saver_mode old_mode = p->mode; p->mode = new_mode; populate_demo_window (s, list_elt); force_list_select_item (s, list, list_elt, True); p->mode = old_mode; /* put it back, so the init file gets written */ } pref_changed_cb (widget, user_data); } G_MODULE_EXPORT void switch_page_cb (GtkNotebook *notebook, GtkNotebookPage *page, gint page_num, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ pref_changed_cb (GTK_WIDGET (notebook), user_data); /* If we're switching to page 0, schedule the current hack to be run. Otherwise, schedule it to stop. */ if (page_num == 0) populate_demo_window (s, selected_list_element (s)); else schedule_preview (s, 0); } #ifdef HAVE_GTK2 static void list_activated_cb (GtkTreeView *list, GtkTreePath *path, GtkTreeViewColumn *column, gpointer data) { state *s = data; char *str; int list_elt; g_return_if_fail (!gdk_pointer_is_grabbed ()); str = gtk_tree_path_to_string (path); list_elt = strtol (str, NULL, 10); g_free (str); if (list_elt >= 0) run_hack (s, list_elt, True); } static void list_select_changed_cb (GtkTreeSelection *selection, gpointer data) { state *s = (state *)data; GtkTreeModel *model; GtkTreeIter iter; GtkTreePath *path; char *str; int list_elt; if (!gtk_tree_selection_get_selected (selection, &model, &iter)) return; path = gtk_tree_model_get_path (model, &iter); str = gtk_tree_path_to_string (path); list_elt = strtol (str, NULL, 10); gtk_tree_path_free (path); g_free (str); populate_demo_window (s, list_elt); flush_dialog_changes_and_save (s); /* Re-populate the Settings window any time a new item is selected in the list, in case both windows are currently visible. */ populate_popup_window (s); } #else /* !HAVE_GTK2 */ static time_t last_doubleclick_time = 0; /* FMH! This is to suppress the list_select_cb that comes in *after* we've double-clicked. */ static gint list_doubleclick_cb (GtkWidget *button, GdkEventButton *event, gpointer data) { state *s = (state *) data; if (event->type == GDK_2BUTTON_PRESS) { GtkList *list = GTK_LIST (name_to_widget (s, "list")); int list_elt = gtk_list_child_position (list, GTK_WIDGET (button)); last_doubleclick_time = time ((time_t *) 0); if (list_elt >= 0) run_hack (s, list_elt, True); } return FALSE; } static void list_select_cb (GtkList *list, GtkWidget *child, gpointer data) { state *s = (state *) data; time_t now = time ((time_t *) 0); if (now >= last_doubleclick_time + 2) { int list_elt = gtk_list_child_position (list, GTK_WIDGET (child)); populate_demo_window (s, list_elt); flush_dialog_changes_and_save (s); } } static void list_unselect_cb (GtkList *list, GtkWidget *child, gpointer data) { state *s = (state *) data; populate_demo_window (s, -1); flush_dialog_changes_and_save (s); } #endif /* !HAVE_GTK2 */ /* Called when the checkboxes that are in the left column of the scrolling list are clicked. This both populates the right pane (just as clicking on the label (really, listitem) does) and also syncs this checkbox with the right pane Enabled checkbox. */ static void list_checkbox_cb ( #ifdef HAVE_GTK2 GtkCellRendererToggle *toggle, gchar *path_string, #else /* !HAVE_GTK2 */ GtkWidget *cb, #endif /* !HAVE_GTK2 */ gpointer data) { state *s = (state *) data; #ifdef HAVE_GTK2 GtkScrolledWindow *scroller = GTK_SCROLLED_WINDOW (name_to_widget (s, "scroller")); GtkTreeView *list = GTK_TREE_VIEW (name_to_widget (s, "list")); GtkTreeModel *model = gtk_tree_view_get_model (list); GtkTreePath *path = gtk_tree_path_new_from_string (path_string); GtkTreeIter iter; gboolean active; #else /* !HAVE_GTK2 */ GtkWidget *line_hbox = GTK_WIDGET (cb)->parent; GtkWidget *line = GTK_WIDGET (line_hbox)->parent; GtkList *list = GTK_LIST (GTK_WIDGET (line)->parent); GtkViewport *vp = GTK_VIEWPORT (GTK_WIDGET (list)->parent); GtkScrolledWindow *scroller = GTK_SCROLLED_WINDOW (GTK_WIDGET (vp)->parent); #endif /* !HAVE_GTK2 */ GtkAdjustment *adj; double scroll_top; int list_elt; #ifdef HAVE_GTK2 if (!gtk_tree_model_get_iter (model, &iter, path)) { g_warning ("bad path: %s", path_string); return; } gtk_tree_path_free (path); gtk_tree_model_get (model, &iter, COL_ENABLED, &active, -1); gtk_list_store_set (GTK_LIST_STORE (model), &iter, COL_ENABLED, !active, -1); list_elt = strtol (path_string, NULL, 10); #else /* !HAVE_GTK2 */ list_elt = gtk_list_child_position (list, line); #endif /* !HAVE_GTK2 */ /* remember previous scroll position of the top of the list */ adj = gtk_scrolled_window_get_vadjustment (scroller); scroll_top = GET_ADJ_VALUE (adj); flush_dialog_changes_and_save (s); force_list_select_item (s, GTK_WIDGET (list), list_elt, False); populate_demo_window (s, list_elt); /* restore the previous scroll position of the top of the list. this is weak, but I don't really know why it's moving... */ gtk_adjustment_set_value (adj, scroll_top); } typedef struct { state *state; GtkFileSelection *widget; } file_selection_data; static void store_image_directory (GtkWidget *button, gpointer user_data) { file_selection_data *fsd = (file_selection_data *) user_data; state *s = fsd->state; GtkFileSelection *selector = fsd->widget; GtkWidget *top = s->toplevel_widget; saver_preferences *p = &s->prefs; const char *path = gtk_file_selection_get_filename (selector); if (p->image_directory && !strcmp(p->image_directory, path)) return; /* no change */ /* No warning for URLs. */ if ((!directory_p (path)) && strncmp(path, "http://", 6)) { char b[255]; sprintf (b, _("Error:\n\n" "Directory does not exist: \"%s\"\n"), path); warning_dialog (GTK_WIDGET (top), b, D_NONE, 100); return; } if (p->image_directory) free (p->image_directory); p->image_directory = normalize_directory (path); gtk_entry_set_text (GTK_ENTRY (name_to_widget (s, "image_text")), (p->image_directory ? p->image_directory : "")); demo_write_init_file (s, p); } static void store_text_file (GtkWidget *button, gpointer user_data) { file_selection_data *fsd = (file_selection_data *) user_data; state *s = fsd->state; GtkFileSelection *selector = fsd->widget; GtkWidget *top = s->toplevel_widget; saver_preferences *p = &s->prefs; const char *path = gtk_file_selection_get_filename (selector); if (p->text_file && !strcmp(p->text_file, path)) return; /* no change */ if (!file_p (path)) { char b[255]; sprintf (b, _("Error:\n\n" "File does not exist: \"%s\"\n"), path); warning_dialog (GTK_WIDGET (top), b, D_NONE, 100); return; } if (p->text_file) free (p->text_file); p->text_file = normalize_directory (path); gtk_entry_set_text (GTK_ENTRY (name_to_widget (s, "text_file_entry")), (p->text_file ? p->text_file : "")); demo_write_init_file (s, p); } static void store_text_program (GtkWidget *button, gpointer user_data) { file_selection_data *fsd = (file_selection_data *) user_data; state *s = fsd->state; GtkFileSelection *selector = fsd->widget; /*GtkWidget *top = s->toplevel_widget;*/ saver_preferences *p = &s->prefs; const char *path = gtk_file_selection_get_filename (selector); if (p->text_program && !strcmp(p->text_program, path)) return; /* no change */ # if 0 if (!file_p (path)) { char b[255]; sprintf (b, _("Error:\n\n" "File does not exist: \"%s\"\n"), path); warning_dialog (GTK_WIDGET (top), b, D_NONE, 100); return; } # endif if (p->text_program) free (p->text_program); p->text_program = normalize_directory (path); gtk_entry_set_text (GTK_ENTRY (name_to_widget (s, "text_program_entry")), (p->text_program ? p->text_program : "")); demo_write_init_file (s, p); } static void browse_image_dir_cancel (GtkWidget *button, gpointer user_data) { file_selection_data *fsd = (file_selection_data *) user_data; gtk_widget_hide (GTK_WIDGET (fsd->widget)); } static void browse_image_dir_ok (GtkWidget *button, gpointer user_data) { browse_image_dir_cancel (button, user_data); store_image_directory (button, user_data); } static void browse_text_file_ok (GtkWidget *button, gpointer user_data) { browse_image_dir_cancel (button, user_data); store_text_file (button, user_data); } static void browse_text_program_ok (GtkWidget *button, gpointer user_data) { browse_image_dir_cancel (button, user_data); store_text_program (button, user_data); } static void browse_image_dir_close (GtkWidget *widget, GdkEvent *event, gpointer user_data) { browse_image_dir_cancel (widget, user_data); } G_MODULE_EXPORT void browse_image_dir_cb (GtkButton *button, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ saver_preferences *p = &s->prefs; static file_selection_data *fsd = 0; GtkFileSelection *selector = GTK_FILE_SELECTION( gtk_file_selection_new ("Please select the image directory.")); if (!fsd) fsd = (file_selection_data *) malloc (sizeof (*fsd)); fsd->widget = selector; fsd->state = s; if (p->image_directory && *p->image_directory) gtk_file_selection_set_filename (selector, p->image_directory); gtk_signal_connect (GTK_OBJECT (selector->ok_button), "clicked", GTK_SIGNAL_FUNC (browse_image_dir_ok), (gpointer *) fsd); gtk_signal_connect (GTK_OBJECT (selector->cancel_button), "clicked", GTK_SIGNAL_FUNC (browse_image_dir_cancel), (gpointer *) fsd); gtk_signal_connect (GTK_OBJECT (selector), "delete_event", GTK_SIGNAL_FUNC (browse_image_dir_close), (gpointer *) fsd); gtk_widget_set_sensitive (GTK_WIDGET (selector->file_list), False); gtk_window_set_modal (GTK_WINDOW (selector), True); gtk_widget_show (GTK_WIDGET (selector)); } G_MODULE_EXPORT void browse_text_file_cb (GtkButton *button, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ saver_preferences *p = &s->prefs; static file_selection_data *fsd = 0; GtkFileSelection *selector = GTK_FILE_SELECTION( gtk_file_selection_new ("Please select a text file.")); if (!fsd) fsd = (file_selection_data *) malloc (sizeof (*fsd)); fsd->widget = selector; fsd->state = s; if (p->text_file && *p->text_file) gtk_file_selection_set_filename (selector, p->text_file); gtk_signal_connect (GTK_OBJECT (selector->ok_button), "clicked", GTK_SIGNAL_FUNC (browse_text_file_ok), (gpointer *) fsd); gtk_signal_connect (GTK_OBJECT (selector->cancel_button), "clicked", GTK_SIGNAL_FUNC (browse_image_dir_cancel), (gpointer *) fsd); gtk_signal_connect (GTK_OBJECT (selector), "delete_event", GTK_SIGNAL_FUNC (browse_image_dir_close), (gpointer *) fsd); gtk_window_set_modal (GTK_WINDOW (selector), True); gtk_widget_show (GTK_WIDGET (selector)); } G_MODULE_EXPORT void browse_text_program_cb (GtkButton *button, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ saver_preferences *p = &s->prefs; static file_selection_data *fsd = 0; GtkFileSelection *selector = GTK_FILE_SELECTION( gtk_file_selection_new ("Please select a text-generating program.")); if (!fsd) fsd = (file_selection_data *) malloc (sizeof (*fsd)); fsd->widget = selector; fsd->state = s; if (p->text_program && *p->text_program) gtk_file_selection_set_filename (selector, p->text_program); gtk_signal_connect (GTK_OBJECT (selector->ok_button), "clicked", GTK_SIGNAL_FUNC (browse_text_program_ok), (gpointer *) fsd); gtk_signal_connect (GTK_OBJECT (selector->cancel_button), "clicked", GTK_SIGNAL_FUNC (browse_image_dir_cancel), (gpointer *) fsd); gtk_signal_connect (GTK_OBJECT (selector), "delete_event", GTK_SIGNAL_FUNC (browse_image_dir_close), (gpointer *) fsd); gtk_window_set_modal (GTK_WINDOW (selector), True); gtk_widget_show (GTK_WIDGET (selector)); } G_MODULE_EXPORT void settings_cb (GtkButton *button, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ int list_elt = selected_list_element (s); populate_demo_window (s, list_elt); /* reset the widget */ populate_popup_window (s); /* create UI on popup window */ gtk_widget_show (s->popup_widget); } static void settings_sync_cmd_text (state *s) { # ifdef HAVE_XML GtkWidget *cmd = GTK_WIDGET (name_to_widget (s, "cmd_text")); char *cmd_line = get_configurator_command_line (s->cdata, False); gtk_entry_set_text (GTK_ENTRY (cmd), cmd_line); gtk_entry_set_position (GTK_ENTRY (cmd), strlen (cmd_line)); free (cmd_line); # endif /* HAVE_XML */ } G_MODULE_EXPORT void settings_adv_cb (GtkButton *button, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ GtkNotebook *notebook = GTK_NOTEBOOK (name_to_widget (s, "opt_notebook")); settings_sync_cmd_text (s); gtk_notebook_set_page (notebook, 1); } G_MODULE_EXPORT void settings_std_cb (GtkButton *button, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ GtkNotebook *notebook = GTK_NOTEBOOK (name_to_widget (s, "opt_notebook")); /* Re-create UI to reflect the in-progress command-line settings. */ populate_popup_window (s); gtk_notebook_set_page (notebook, 0); } G_MODULE_EXPORT void settings_reset_cb (GtkButton *button, gpointer user_data) { # ifdef HAVE_XML state *s = global_state_kludge; /* I hate C so much... */ GtkWidget *cmd = GTK_WIDGET (name_to_widget (s, "cmd_text")); char *cmd_line = get_configurator_command_line (s->cdata, True); gtk_entry_set_text (GTK_ENTRY (cmd), cmd_line); gtk_entry_set_position (GTK_ENTRY (cmd), strlen (cmd_line)); free (cmd_line); populate_popup_window (s); # endif /* HAVE_XML */ } G_MODULE_EXPORT void settings_switch_page_cb (GtkNotebook *notebook, GtkNotebookPage *page, gint page_num, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ GtkWidget *adv = name_to_widget (s, "adv_button"); GtkWidget *std = name_to_widget (s, "std_button"); if (page_num == 0) { gtk_widget_show (adv); gtk_widget_hide (std); } else if (page_num == 1) { gtk_widget_hide (adv); gtk_widget_show (std); } else abort(); } G_MODULE_EXPORT void settings_cancel_cb (GtkButton *button, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ gtk_widget_hide (s->popup_widget); } G_MODULE_EXPORT void settings_ok_cb (GtkButton *button, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ GtkNotebook *notebook = GTK_NOTEBOOK (name_to_widget (s, "opt_notebook")); int page = gtk_notebook_get_current_page (notebook); if (page == 0) /* Regenerate the command-line from the widget contents before saving. But don't do this if we're looking at the command-line page already, or we will blow away what they typed... */ settings_sync_cmd_text (s); flush_popup_changes_and_save (s); gtk_widget_hide (s->popup_widget); } static gboolean wm_popup_close_cb (GtkWidget *widget, GdkEvent *event, gpointer data) { state *s = (state *) data; settings_cancel_cb (0, (gpointer) s); return TRUE; } /* Populating the various widgets */ /* Returns the number of the last hack run by the server. */ static int server_current_hack (void) { Atom type; int format; unsigned long nitems, bytesafter; unsigned char *dataP = 0; Display *dpy = GDK_DISPLAY(); int hack_number = -1; if (XGetWindowProperty (dpy, RootWindow (dpy, 0), /* always screen #0 */ XA_SCREENSAVER_STATUS, 0, 3, False, XA_INTEGER, &type, &format, &nitems, &bytesafter, &dataP) == Success && type == XA_INTEGER && nitems >= 3 && dataP) { PROP32 *data = (PROP32 *) dataP; hack_number = (int) data[2] - 1; } if (dataP) XFree (dataP); return hack_number; } /* Finds the number of the last hack that was run, and makes that item be selected by default. */ static void scroll_to_current_hack (state *s) { saver_preferences *p = &s->prefs; int hack_number = -1; if (p->mode == ONE_HACK) /* in "one" mode, use the one */ hack_number = p->selected_hack; if (hack_number < 0) /* otherwise, use the last-run */ hack_number = server_current_hack (); if (hack_number < 0) /* failing that, last "one mode" */ hack_number = p->selected_hack; if (hack_number < 0) /* failing that, newest hack. */ { /* We should only get here if the user does not have a .xscreensaver file, and the screen has not been blanked with a hack since X started up: in other words, this is probably a fresh install. Instead of just defaulting to hack #0 (in either "programs" or "alphabetical" order) let's try to default to the last runnable hack in the "programs" list: this is probably the hack that was most recently added to the xscreensaver distribution (and so it's probably the currently-coolest one!) */ hack_number = p->screenhacks_count-1; while (hack_number > 0 && ! (s->hacks_available_p[hack_number] && p->screenhacks[hack_number]->enabled_p)) hack_number--; } if (hack_number >= 0 && hack_number < p->screenhacks_count) { int list_elt = s->hack_number_to_list_elt[hack_number]; GtkWidget *list = name_to_widget (s, "list"); force_list_select_item (s, list, list_elt, True); populate_demo_window (s, list_elt); } } static void populate_hack_list (state *s) { Display *dpy = GDK_DISPLAY(); #ifdef HAVE_GTK2 saver_preferences *p = &s->prefs; GtkTreeView *list = GTK_TREE_VIEW (name_to_widget (s, "list")); GtkListStore *model; GtkTreeSelection *selection; GtkCellRenderer *ren; GtkTreeIter iter; int i; g_object_get (G_OBJECT (list), "model", &model, NULL); if (!model) { model = gtk_list_store_new (COL_LAST, G_TYPE_BOOLEAN, G_TYPE_STRING); g_object_set (G_OBJECT (list), "model", model, NULL); g_object_unref (model); ren = gtk_cell_renderer_toggle_new (); gtk_tree_view_insert_column_with_attributes (list, COL_ENABLED, _("Use"), ren, "active", COL_ENABLED, NULL); g_signal_connect (ren, "toggled", G_CALLBACK (list_checkbox_cb), s); ren = gtk_cell_renderer_text_new (); gtk_tree_view_insert_column_with_attributes (list, COL_NAME, _("Screen Saver"), ren, "markup", COL_NAME, NULL); g_signal_connect_after (list, "row_activated", G_CALLBACK (list_activated_cb), s); selection = gtk_tree_view_get_selection (list); g_signal_connect (selection, "changed", G_CALLBACK (list_select_changed_cb), s); } for (i = 0; i < s->list_count; i++) { int hack_number = s->list_elt_to_hack_number[i]; screenhack *hack = (hack_number < 0 ? 0 : p->screenhacks[hack_number]); char *pretty_name; Bool available_p = (hack && s->hacks_available_p [hack_number]); if (!hack) continue; /* If we're to suppress uninstalled hacks, check $PATH now. */ if (p->ignore_uninstalled_p && !available_p) continue; pretty_name = (hack->name ? strdup (hack->name) : make_hack_name (dpy, hack->command)); if (!available_p) { /* Make the text foreground be the color of insensitive widgets (but don't actually make it be insensitive, since we still want to be able to click on it.) */ GtkStyle *style = gtk_widget_get_style (GTK_WIDGET (list)); GdkColor *fg = &style->fg[GTK_STATE_INSENSITIVE]; /* GdkColor *bg = &style->bg[GTK_STATE_INSENSITIVE]; */ char *buf = (char *) malloc (strlen (pretty_name) + 100); sprintf (buf, "%s", fg->red >> 8, fg->green >> 8, fg->blue >> 8, /* bg->red >> 8, bg->green >> 8, bg->blue >> 8, */ pretty_name); free (pretty_name); pretty_name = buf; } gtk_list_store_append (model, &iter); gtk_list_store_set (model, &iter, COL_ENABLED, hack->enabled_p, COL_NAME, pretty_name, -1); free (pretty_name); } #else /* !HAVE_GTK2 */ saver_preferences *p = &s->prefs; GtkList *list = GTK_LIST (name_to_widget (s, "list")); int i; for (i = 0; i < s->list_count; i++) { int hack_number = s->list_elt_to_hack_number[i]; screenhack *hack = (hack_number < 0 ? 0 : p->screenhacks[hack_number]); /* A GtkList must contain only GtkListItems, but those can contain an arbitrary widget. We add an Hbox, and inside that, a Checkbox and a Label. We handle single and double click events on the line itself, for clicking on the text, but the interior checkbox also handles its own events. */ GtkWidget *line; GtkWidget *line_hbox; GtkWidget *line_check; GtkWidget *line_label; char *pretty_name; Bool available_p = (hack && s->hacks_available_p [hack_number]); if (!hack) continue; /* If we're to suppress uninstalled hacks, check $PATH now. */ if (p->ignore_uninstalled_p && !available_p) continue; pretty_name = (hack->name ? strdup (hack->name) : make_hack_name (hack->command)); line = gtk_list_item_new (); line_hbox = gtk_hbox_new (FALSE, 0); line_check = gtk_check_button_new (); line_label = gtk_label_new (pretty_name); gtk_container_add (GTK_CONTAINER (line), line_hbox); gtk_box_pack_start (GTK_BOX (line_hbox), line_check, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (line_hbox), line_label, FALSE, FALSE, 0); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (line_check), hack->enabled_p); gtk_label_set_justify (GTK_LABEL (line_label), GTK_JUSTIFY_LEFT); gtk_widget_show (line_check); gtk_widget_show (line_label); gtk_widget_show (line_hbox); gtk_widget_show (line); free (pretty_name); gtk_container_add (GTK_CONTAINER (list), line); gtk_signal_connect (GTK_OBJECT (line), "button_press_event", GTK_SIGNAL_FUNC (list_doubleclick_cb), (gpointer) s); gtk_signal_connect (GTK_OBJECT (line_check), "toggled", GTK_SIGNAL_FUNC (list_checkbox_cb), (gpointer) s); gtk_widget_show (line); if (!available_p) { /* Make the widget be colored like insensitive widgets (but don't actually make it be insensitive, since we still want to be able to click on it.) */ GtkRcStyle *rc_style; GdkColor fg, bg; gtk_widget_realize (GTK_WIDGET (line_label)); fg = GTK_WIDGET (line_label)->style->fg[GTK_STATE_INSENSITIVE]; bg = GTK_WIDGET (line_label)->style->bg[GTK_STATE_INSENSITIVE]; rc_style = gtk_rc_style_new (); rc_style->fg[GTK_STATE_NORMAL] = fg; rc_style->bg[GTK_STATE_NORMAL] = bg; rc_style->color_flags[GTK_STATE_NORMAL] |= GTK_RC_FG|GTK_RC_BG; gtk_widget_modify_style (GTK_WIDGET (line_label), rc_style); gtk_rc_style_unref (rc_style); } } gtk_signal_connect (GTK_OBJECT (list), "select_child", GTK_SIGNAL_FUNC (list_select_cb), (gpointer) s); gtk_signal_connect (GTK_OBJECT (list), "unselect_child", GTK_SIGNAL_FUNC (list_unselect_cb), (gpointer) s); #endif /* !HAVE_GTK2 */ } static void update_list_sensitivity (state *s) { saver_preferences *p = &s->prefs; Bool sensitive = (p->mode == RANDOM_HACKS || p->mode == RANDOM_HACKS_SAME || p->mode == ONE_HACK); Bool checkable = (p->mode == RANDOM_HACKS || p->mode == RANDOM_HACKS_SAME); Bool blankable = (p->mode != DONT_BLANK); #ifndef HAVE_GTK2 GtkWidget *head = name_to_widget (s, "col_head_hbox"); GtkWidget *use = name_to_widget (s, "use_col_frame"); #endif /* HAVE_GTK2 */ GtkWidget *scroller = name_to_widget (s, "scroller"); GtkWidget *buttons = name_to_widget (s, "next_prev_hbox"); GtkWidget *blanker = name_to_widget (s, "blanking_table"); #ifdef HAVE_GTK2 GtkTreeView *list = GTK_TREE_VIEW (name_to_widget (s, "list")); GtkTreeViewColumn *use = gtk_tree_view_get_column (list, COL_ENABLED); #else /* !HAVE_GTK2 */ GtkList *list = GTK_LIST (name_to_widget (s, "list")); GList *kids = gtk_container_children (GTK_CONTAINER (list)); gtk_widget_set_sensitive (GTK_WIDGET (head), sensitive); #endif /* !HAVE_GTK2 */ gtk_widget_set_sensitive (GTK_WIDGET (scroller), sensitive); gtk_widget_set_sensitive (GTK_WIDGET (buttons), sensitive); gtk_widget_set_sensitive (GTK_WIDGET (blanker), blankable); #ifdef HAVE_GTK2 gtk_tree_view_column_set_visible (use, checkable); #else /* !HAVE_GTK2 */ if (checkable) gtk_widget_show (use); /* the "Use" column header */ else gtk_widget_hide (use); while (kids) { GtkBin *line = GTK_BIN (kids->data); GtkContainer *line_hbox = GTK_CONTAINER (line->child); GtkWidget *line_check = GTK_WIDGET (gtk_container_children (line_hbox)->data); if (checkable) gtk_widget_show (line_check); else gtk_widget_hide (line_check); kids = kids->next; } #endif /* !HAVE_GTK2 */ } static void populate_prefs_page (state *s) { saver_preferences *p = &s->prefs; Bool can_lock_p = True; /* Disable all the "lock" controls if locking support was not provided at compile-time, or if running on MacOS. */ # if defined(NO_LOCKING) || defined(__APPLE__) can_lock_p = False; # endif /* If there is only one screen, the mode menu contains "random" but not "random-same". */ if (s->nscreens <= 1 && p->mode == RANDOM_HACKS_SAME) p->mode = RANDOM_HACKS; /* The file supports timeouts of less than a minute, but the GUI does not, so throttle the values to be at least one minute (since "0" is a bad rounding choice...) */ # define THROTTLE(NAME) if (p->NAME != 0 && p->NAME < 60000) p->NAME = 60000 THROTTLE (timeout); THROTTLE (cycle); /* THROTTLE (passwd_timeout); */ /* GUI doesn't set this; leave it alone */ # undef THROTTLE # define FMT_MINUTES(NAME,N) \ gtk_spin_button_set_value (GTK_SPIN_BUTTON (name_to_widget (s, (NAME))), (double)((N) + 59) / (60 * 1000)) # define FMT_SECONDS(NAME,N) \ gtk_spin_button_set_value (GTK_SPIN_BUTTON (name_to_widget (s, (NAME))), (double)((N) / 1000)) FMT_MINUTES ("timeout_spinbutton", p->timeout); FMT_MINUTES ("cycle_spinbutton", p->cycle); FMT_MINUTES ("lock_spinbutton", p->lock_timeout); FMT_MINUTES ("dpms_standby_spinbutton", p->dpms_standby); FMT_MINUTES ("dpms_suspend_spinbutton", p->dpms_suspend); FMT_MINUTES ("dpms_off_spinbutton", p->dpms_off); FMT_SECONDS ("fade_spinbutton", p->fade_seconds); # undef FMT_MINUTES # undef FMT_SECONDS # define TOGGLE_ACTIVE(NAME,ACTIVEP) \ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (name_to_widget (s,(NAME))),\ (ACTIVEP)) TOGGLE_ACTIVE ("lock_button", p->lock_p); #if 0 TOGGLE_ACTIVE ("verbose_button", p->verbose_p); TOGGLE_ACTIVE ("capture_button", p->capture_stderr_p); TOGGLE_ACTIVE ("splash_button", p->splash_p); #endif TOGGLE_ACTIVE ("dpms_button", p->dpms_enabled_p); TOGGLE_ACTIVE ("dpms_quickoff_button", p->dpms_quickoff_p); TOGGLE_ACTIVE ("grab_desk_button", p->grab_desktop_p); TOGGLE_ACTIVE ("grab_video_button", p->grab_video_p); TOGGLE_ACTIVE ("grab_image_button", p->random_image_p); TOGGLE_ACTIVE ("install_button", p->install_cmap_p); TOGGLE_ACTIVE ("fade_button", p->fade_p); TOGGLE_ACTIVE ("unfade_button", p->unfade_p); switch (p->tmode) { case TEXT_LITERAL: TOGGLE_ACTIVE ("text_radio", True); break; case TEXT_FILE: TOGGLE_ACTIVE ("text_file_radio", True); break; case TEXT_PROGRAM: TOGGLE_ACTIVE ("text_program_radio", True); break; case TEXT_URL: TOGGLE_ACTIVE ("text_url_radio", True); break; default: TOGGLE_ACTIVE ("text_host_radio", True); break; } # undef TOGGLE_ACTIVE gtk_entry_set_text (GTK_ENTRY (name_to_widget (s, "image_text")), (p->image_directory ? p->image_directory : "")); gtk_widget_set_sensitive (name_to_widget (s, "image_text"), p->random_image_p); gtk_widget_set_sensitive (name_to_widget (s, "image_browse_button"), p->random_image_p); gtk_entry_set_text (GTK_ENTRY (name_to_widget (s, "text_entry")), (p->text_literal ? p->text_literal : "")); gtk_entry_set_text (GTK_ENTRY (name_to_widget (s, "text_file_entry")), (p->text_file ? p->text_file : "")); gtk_entry_set_text (GTK_ENTRY (name_to_widget (s, "text_program_entry")), (p->text_program ? p->text_program : "")); gtk_entry_set_text (GTK_ENTRY (name_to_widget (s, "text_url_entry")), (p->text_url ? p->text_url : "")); gtk_widget_set_sensitive (name_to_widget (s, "text_entry"), p->tmode == TEXT_LITERAL); gtk_widget_set_sensitive (name_to_widget (s, "text_file_entry"), p->tmode == TEXT_FILE); gtk_widget_set_sensitive (name_to_widget (s, "text_file_browse"), p->tmode == TEXT_FILE); gtk_widget_set_sensitive (name_to_widget (s, "text_program_entry"), p->tmode == TEXT_PROGRAM); gtk_widget_set_sensitive (name_to_widget (s, "text_program_browse"), p->tmode == TEXT_PROGRAM); gtk_widget_set_sensitive (name_to_widget (s, "text_url_entry"), p->tmode == TEXT_URL); /* Map the `saver_mode' enum to mode menu to values. */ { GtkOptionMenu *opt = GTK_OPTION_MENU (name_to_widget (s, "mode_menu")); int i; for (i = 0; i < countof(mode_menu_order); i++) if (mode_menu_order[i] == p->mode) break; gtk_option_menu_set_history (opt, i); update_list_sensitivity (s); } { Bool found_any_writable_cells = False; Bool fading_possible = False; Bool dpms_supported = False; Display *dpy = GDK_DISPLAY(); int nscreens = ScreenCount(dpy); /* real screens, not Xinerama */ int i; for (i = 0; i < nscreens; i++) { Screen *s = ScreenOfDisplay (dpy, i); if (has_writable_cells (s, DefaultVisualOfScreen (s))) { found_any_writable_cells = True; break; } } fading_possible = found_any_writable_cells; #ifdef HAVE_XF86VMODE_GAMMA fading_possible = True; #endif #ifdef HAVE_DPMS_EXTENSION { int op = 0, event = 0, error = 0; if (XQueryExtension (dpy, "DPMS", &op, &event, &error)) dpms_supported = True; } #endif /* HAVE_DPMS_EXTENSION */ # define SENSITIZE(NAME,SENSITIVEP) \ gtk_widget_set_sensitive (name_to_widget (s, (NAME)), (SENSITIVEP)) /* Blanking and Locking */ SENSITIZE ("lock_button", can_lock_p); SENSITIZE ("lock_spinbutton", can_lock_p && p->lock_p); SENSITIZE ("lock_mlabel", can_lock_p && p->lock_p); /* DPMS */ dpms_supported=1; SENSITIZE ("dpms_frame", dpms_supported); SENSITIZE ("dpms_button", dpms_supported); SENSITIZE ("dpms_quickoff_button", dpms_supported); SENSITIZE ("dpms_standby_label", dpms_supported && p->dpms_enabled_p); SENSITIZE ("dpms_standby_mlabel", dpms_supported && p->dpms_enabled_p); SENSITIZE ("dpms_standby_spinbutton", dpms_supported && p->dpms_enabled_p); SENSITIZE ("dpms_suspend_label", dpms_supported && p->dpms_enabled_p); SENSITIZE ("dpms_suspend_mlabel", dpms_supported && p->dpms_enabled_p); SENSITIZE ("dpms_suspend_spinbutton", dpms_supported && p->dpms_enabled_p); SENSITIZE ("dpms_off_label", dpms_supported && p->dpms_enabled_p); SENSITIZE ("dpms_off_mlabel", dpms_supported && p->dpms_enabled_p); SENSITIZE ("dpms_off_spinbutton", dpms_supported && p->dpms_enabled_p); /* Colormaps */ SENSITIZE ("cmap_frame", found_any_writable_cells || fading_possible); SENSITIZE ("install_button", found_any_writable_cells); SENSITIZE ("fade_button", fading_possible); SENSITIZE ("unfade_button", fading_possible); SENSITIZE ("fade_label", (fading_possible && (p->fade_p || p->unfade_p))); SENSITIZE ("fade_spinbutton", (fading_possible && (p->fade_p || p->unfade_p))); # undef SENSITIZE } } static void populate_popup_window (state *s) { GtkLabel *doc = GTK_LABEL (name_to_widget (s, "doc")); char *doc_string = 0; /* #### not in Gtk 1.2 gtk_label_set_selectable (doc); */ # ifdef HAVE_XML if (s->cdata) { free_conf_data (s->cdata); s->cdata = 0; } { saver_preferences *p = &s->prefs; int list_elt = selected_list_element (s); int hack_number = (list_elt >= 0 && list_elt < s->list_count ? s->list_elt_to_hack_number[list_elt] : -1); screenhack *hack = (hack_number >= 0 ? p->screenhacks[hack_number] : 0); if (hack) { GtkWidget *parent = name_to_widget (s, "settings_vbox"); GtkWidget *cmd = GTK_WIDGET (name_to_widget (s, "cmd_text")); const char *cmd_line = gtk_entry_get_text (GTK_ENTRY (cmd)); s->cdata = load_configurator (cmd_line, s->debug_p); if (s->cdata && s->cdata->widget) gtk_box_pack_start (GTK_BOX (parent), s->cdata->widget, TRUE, TRUE, 0); } } doc_string = (s->cdata ? s->cdata->description : 0); # else /* !HAVE_XML */ doc_string = _("Descriptions not available: no XML support compiled in."); # endif /* !HAVE_XML */ gtk_label_set_text (doc, (doc_string ? _(doc_string) : _("No description available."))); } static void sensitize_demo_widgets (state *s, Bool sensitive_p) { const char *names[] = { "demo", "settings", "cmd_label", "cmd_text", "manual", "visual", "visual_combo" }; int i; for (i = 0; i < countof(names); i++) { GtkWidget *w = name_to_widget (s, names[i]); gtk_widget_set_sensitive (GTK_WIDGET(w), sensitive_p); } } static void sensitize_menu_items (state *s, Bool force_p) { static Bool running_p = False; static time_t last_checked = 0; time_t now = time ((time_t *) 0); const char *names[] = { "activate_menu", "lock_menu", "kill_menu", /* "demo" */ }; int i; if (force_p || now > last_checked + 10) /* check every 10 seconds */ { running_p = xscreensaver_running_p (s); last_checked = time ((time_t *) 0); } for (i = 0; i < countof(names); i++) { GtkWidget *w = name_to_widget (s, names[i]); gtk_widget_set_sensitive (GTK_WIDGET(w), running_p); } } /* When the File menu is de-posted after a "Restart Daemon" command, the window underneath doesn't repaint for some reason. I guess this is a bug in exposure handling in GTK or GDK. This works around it. */ static void force_dialog_repaint (state *s) { #if 1 /* Tell GDK to invalidate and repaint the whole window. */ GdkWindow *w = GET_WINDOW (s->toplevel_widget); GdkRegion *region = gdk_region_new (); GdkRectangle rect; rect.x = rect.y = 0; rect.width = rect.height = 32767; gdk_region_union_with_rect (region, &rect); gdk_window_invalidate_region (w, region, True); gdk_region_destroy (region); gdk_window_process_updates (w, True); #else /* Force the server to send an exposure event by creating and then destroying a window as a child of the top level shell. */ Display *dpy = GDK_DISPLAY(); Window parent = GDK_WINDOW_XWINDOW (s->toplevel_widget->window); Window w; XWindowAttributes xgwa; XGetWindowAttributes (dpy, parent, &xgwa); w = XCreateSimpleWindow (dpy, parent, 0, 0, xgwa.width, xgwa.height, 0,0,0); XMapRaised (dpy, w); XDestroyWindow (dpy, w); XSync (dpy, False); #endif } /* Even though we've given these text fields a maximum number of characters, their default size is still about 30 characters wide -- so measure out a string in their font, and resize them to just fit that. */ static void fix_text_entry_sizes (state *s) { GtkWidget *w; # if 0 /* appears no longer necessary with Gtk 1.2.10 */ const char * const spinbuttons[] = { "timeout_spinbutton", "cycle_spinbutton", "lock_spinbutton", "dpms_standby_spinbutton", "dpms_suspend_spinbutton", "dpms_off_spinbutton", "-fade_spinbutton" }; int i; int width = 0; for (i = 0; i < countof(spinbuttons); i++) { const char *n = spinbuttons[i]; int cols = 4; while (*n == '-') n++, cols--; w = GTK_WIDGET (name_to_widget (s, n)); width = gdk_text_width (w->style->font, "MMMMMMMM", cols); gtk_widget_set_usize (w, width, -2); } /* Now fix the width of the combo box. */ w = GTK_WIDGET (name_to_widget (s, "visual_combo")); w = GTK_COMBO (w)->entry; width = gdk_string_width (w->style->font, "PseudoColor___"); gtk_widget_set_usize (w, width, -2); /* Now fix the width of the file entry text. */ w = GTK_WIDGET (name_to_widget (s, "image_text")); width = gdk_string_width (w->style->font, "mmmmmmmmmmmmmm"); gtk_widget_set_usize (w, width, -2); /* Now fix the width of the command line text. */ w = GTK_WIDGET (name_to_widget (s, "cmd_text")); width = gdk_string_width (w->style->font, "mmmmmmmmmmmmmmmmmmmm"); gtk_widget_set_usize (w, width, -2); # endif /* 0 */ /* Now fix the height of the list widget: make it default to being around 10 text-lines high instead of 4. */ w = GTK_WIDGET (name_to_widget (s, "list")); { int lines = 10; int height; int leading = 3; /* approximate is ok... */ int border = 2; #ifdef HAVE_GTK2 PangoFontMetrics *pain = pango_context_get_metrics (gtk_widget_get_pango_context (w), gtk_widget_get_style (w)->font_desc, gtk_get_default_language ()); height = PANGO_PIXELS (pango_font_metrics_get_ascent (pain) + pango_font_metrics_get_descent (pain)); #else /* !HAVE_GTK2 */ height = w->style->font->ascent + w->style->font->descent; #endif /* !HAVE_GTK2 */ height += leading; height *= lines; height += border * 2; w = GTK_WIDGET (name_to_widget (s, "scroller")); gtk_widget_set_usize (w, -2, height); } } #ifndef HAVE_GTK2 /* Pixmaps for the up and down arrow buttons (yeah, this is sleazy...) */ static char *up_arrow_xpm[] = { "15 15 4 1", " c None", "- c #FFFFFF", "+ c #D6D6D6", "@ c #000000", " @ ", " @ ", " -+@ ", " -+@ ", " -+++@ ", " -+++@ ", " -+++++@ ", " -+++++@ ", " -+++++++@ ", " -+++++++@ ", " -+++++++++@ ", " -+++++++++@ ", " -+++++++++++@ ", " @@@@@@@@@@@@@ ", " ", /* Need these here because gdk_pixmap_create_from_xpm_d() walks off the end of the array (Gtk 1.2.5.) */ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000", "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" }; static char *down_arrow_xpm[] = { "15 15 4 1", " c None", "- c #FFFFFF", "+ c #D6D6D6", "@ c #000000", " ", " ------------- ", " -+++++++++++@ ", " -+++++++++@ ", " -+++++++++@ ", " -+++++++@ ", " -+++++++@ ", " -+++++@ ", " -+++++@ ", " -+++@ ", " -+++@ ", " -+@ ", " -+@ ", " @ ", " @ ", /* Need these here because gdk_pixmap_create_from_xpm_d() walks off the end of the array (Gtk 1.2.5.) */ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000", "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" }; static void pixmapify_button (state *s, int down_p) { GdkPixmap *pixmap; GdkBitmap *mask; GtkWidget *pixmapwid; GtkStyle *style; GtkWidget *w; w = GTK_WIDGET (name_to_widget (s, (down_p ? "next" : "prev"))); style = gtk_widget_get_style (w); mask = 0; pixmap = gdk_pixmap_create_from_xpm_d (w->window, &mask, &style->bg[GTK_STATE_NORMAL], (down_p ? (gchar **) down_arrow_xpm : (gchar **) up_arrow_xpm)); pixmapwid = gtk_pixmap_new (pixmap, mask); gtk_widget_show (pixmapwid); gtk_container_remove (GTK_CONTAINER (w), GTK_BIN (w)->child); gtk_container_add (GTK_CONTAINER (w), pixmapwid); } static void map_next_button_cb (GtkWidget *w, gpointer user_data) { state *s = (state *) user_data; pixmapify_button (s, 1); } static void map_prev_button_cb (GtkWidget *w, gpointer user_data) { state *s = (state *) user_data; pixmapify_button (s, 0); } #endif /* !HAVE_GTK2 */ #ifndef HAVE_GTK2 /* Work around a Gtk bug that causes label widgets to wrap text too early. */ static void you_are_not_a_unique_or_beautiful_snowflake (GtkWidget *label, GtkAllocation *allocation, void *foo) { GtkRequisition req; GtkWidgetAuxInfo *aux_info; aux_info = gtk_object_get_data (GTK_OBJECT (label), "gtk-aux-info"); aux_info->width = allocation->width; aux_info->height = -2; aux_info->x = -1; aux_info->y = -1; gtk_widget_size_request (label, &req); } /* Feel the love. Thanks to Nat Friedman for finding this workaround. */ static void eschew_gtk_lossage (GtkLabel *label) { GtkWidgetAuxInfo *aux_info = g_new0 (GtkWidgetAuxInfo, 1); aux_info->width = GTK_WIDGET (label)->allocation.width; aux_info->height = -2; aux_info->x = -1; aux_info->y = -1; gtk_object_set_data (GTK_OBJECT (label), "gtk-aux-info", aux_info); gtk_signal_connect (GTK_OBJECT (label), "size_allocate", GTK_SIGNAL_FUNC (you_are_not_a_unique_or_beautiful_snowflake), 0); gtk_widget_set_usize (GTK_WIDGET (label), -2, -2); gtk_widget_queue_resize (GTK_WIDGET (label)); } #endif /* !HAVE_GTK2 */ static void populate_demo_window (state *s, int list_elt) { Display *dpy = GDK_DISPLAY(); saver_preferences *p = &s->prefs; screenhack *hack; char *pretty_name; GtkFrame *frame1 = GTK_FRAME (name_to_widget (s, "preview_frame")); GtkFrame *frame2 = GTK_FRAME (name_to_widget (s, "opt_frame")); GtkEntry *cmd = GTK_ENTRY (name_to_widget (s, "cmd_text")); GtkCombo *vis = GTK_COMBO (name_to_widget (s, "visual_combo")); GtkWidget *list = GTK_WIDGET (name_to_widget (s, "list")); if (p->mode == BLANK_ONLY) { hack = 0; pretty_name = strdup (_("Blank Screen")); schedule_preview (s, 0); } else if (p->mode == DONT_BLANK) { hack = 0; pretty_name = strdup (_("Screen Saver Disabled")); schedule_preview (s, 0); } else { int hack_number = (list_elt >= 0 && list_elt < s->list_count ? s->list_elt_to_hack_number[list_elt] : -1); hack = (hack_number >= 0 ? p->screenhacks[hack_number] : 0); pretty_name = (hack ? (hack->name ? strdup (hack->name) : make_hack_name (dpy, hack->command)) : 0); if (hack) schedule_preview (s, hack->command); else schedule_preview (s, 0); } if (!pretty_name) pretty_name = strdup (_("Preview")); gtk_frame_set_label (frame1, _(pretty_name)); gtk_frame_set_label (frame2, _(pretty_name)); gtk_entry_set_text (cmd, (hack ? hack->command : "")); gtk_entry_set_position (cmd, 0); { char title[255]; sprintf (title, _("%s: %.100s Settings"), progclass, (pretty_name ? pretty_name : "???")); gtk_window_set_title (GTK_WINDOW (s->popup_widget), title); } gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (vis)->entry), (hack ? (hack->visual && *hack->visual ? hack->visual : _("Any")) : "")); sensitize_demo_widgets (s, (hack ? True : False)); if (pretty_name) free (pretty_name); ensure_selected_item_visible (list); s->_selected_list_element = list_elt; } static void widget_deleter (GtkWidget *widget, gpointer data) { /* #### Well, I want to destroy these widgets, but if I do that, they get referenced again, and eventually I get a SEGV. So instead of destroying them, I'll just hide them, and leak a bunch of memory every time the disk file changes. Go go go Gtk! #### Ok, that's a lie, I get a crash even if I just hide the widget and don't ever delete it. Fuck! */ #if 0 gtk_widget_destroy (widget); #else gtk_widget_hide (widget); #endif } static char **sort_hack_cmp_names_kludge; static int sort_hack_cmp (const void *a, const void *b) { if (a == b) return 0; else { int aa = *(int *) a; int bb = *(int *) b; const char last[] = "\377\377\377\377\377\377\377\377\377\377\377"; return strcmp ((aa < 0 ? last : sort_hack_cmp_names_kludge[aa]), (bb < 0 ? last : sort_hack_cmp_names_kludge[bb])); } } static void initialize_sort_map (state *s) { Display *dpy = GDK_DISPLAY(); saver_preferences *p = &s->prefs; int i, j; if (s->list_elt_to_hack_number) free (s->list_elt_to_hack_number); if (s->hack_number_to_list_elt) free (s->hack_number_to_list_elt); if (s->hacks_available_p) free (s->hacks_available_p); s->list_elt_to_hack_number = (int *) calloc (sizeof(int), p->screenhacks_count + 1); s->hack_number_to_list_elt = (int *) calloc (sizeof(int), p->screenhacks_count + 1); s->hacks_available_p = (Bool *) calloc (sizeof(Bool), p->screenhacks_count + 1); s->total_available = 0; /* Check which hacks actually exist on $PATH */ for (i = 0; i < p->screenhacks_count; i++) { screenhack *hack = p->screenhacks[i]; int on = on_path_p (hack->command) ? 1 : 0; s->hacks_available_p[i] = on; s->total_available += on; } /* Initialize list->hack table to unsorted mapping, omitting nonexistent hacks, if desired. */ j = 0; for (i = 0; i < p->screenhacks_count; i++) { if (!p->ignore_uninstalled_p || s->hacks_available_p[i]) s->list_elt_to_hack_number[j++] = i; } s->list_count = j; for (; j < p->screenhacks_count; j++) s->list_elt_to_hack_number[j] = -1; /* Generate list of sortable names (once) */ sort_hack_cmp_names_kludge = (char **) calloc (sizeof(char *), p->screenhacks_count); for (i = 0; i < p->screenhacks_count; i++) { screenhack *hack = p->screenhacks[i]; char *name = (hack->name && *hack->name ? strdup (hack->name) : make_hack_name (dpy, hack->command)); char *str; for (str = name; *str; str++) *str = tolower(*str); sort_hack_cmp_names_kludge[i] = name; } /* Sort list->hack map alphabetically */ qsort (s->list_elt_to_hack_number, p->screenhacks_count, sizeof(*s->list_elt_to_hack_number), sort_hack_cmp); /* Free names */ for (i = 0; i < p->screenhacks_count; i++) free (sort_hack_cmp_names_kludge[i]); free (sort_hack_cmp_names_kludge); sort_hack_cmp_names_kludge = 0; /* Build inverse table */ for (i = 0; i < p->screenhacks_count; i++) { int n = s->list_elt_to_hack_number[i]; if (n != -1) s->hack_number_to_list_elt[n] = i; } } static int maybe_reload_init_file (state *s) { Display *dpy = GDK_DISPLAY(); saver_preferences *p = &s->prefs; int status = 0; static Bool reentrant_lock = False; if (reentrant_lock) return 0; reentrant_lock = True; if (init_file_changed_p (p)) { const char *f = init_file_name(); char *b; int list_elt; GtkWidget *list; if (!f || !*f) return 0; b = (char *) malloc (strlen(f) + 1024); sprintf (b, _("Warning:\n\n" "file \"%s\" has changed, reloading.\n"), f); warning_dialog (s->toplevel_widget, b, D_NONE, 100); free (b); load_init_file (dpy, p); initialize_sort_map (s); list_elt = selected_list_element (s); list = name_to_widget (s, "list"); gtk_container_foreach (GTK_CONTAINER (list), widget_deleter, NULL); populate_hack_list (s); force_list_select_item (s, list, list_elt, True); populate_prefs_page (s); populate_demo_window (s, list_elt); ensure_selected_item_visible (list); status = 1; } reentrant_lock = False; return status; } /* Making the preview window have the right X visual (so that GL works.) */ static Visual *get_best_gl_visual (state *); static GdkVisual * x_visual_to_gdk_visual (Visual *xv) { GList *gvs = gdk_list_visuals(); if (!xv) return gdk_visual_get_system(); for (; gvs; gvs = gvs->next) { GdkVisual *gv = (GdkVisual *) gvs->data; if (xv == GDK_VISUAL_XVISUAL (gv)) return gv; } fprintf (stderr, "%s: couldn't convert X Visual 0x%lx to a GdkVisual\n", blurb(), (unsigned long) xv->visualid); abort(); } static void clear_preview_window (state *s) { GtkWidget *p; GdkWindow *window; GtkStyle *style; if (!s->toplevel_widget) return; /* very early */ p = name_to_widget (s, "preview"); window = GET_WINDOW (p); if (!window) return; /* Flush the widget background down into the window, in case a subproc has changed it. */ style = gtk_widget_get_style (p); gdk_window_set_background (window, &style->bg[GTK_STATE_NORMAL]); gdk_window_clear (window); { int list_elt = selected_list_element (s); int hack_number = (list_elt >= 0 ? s->list_elt_to_hack_number[list_elt] : -1); Bool available_p = (hack_number >= 0 ? s->hacks_available_p [hack_number] : True); Bool nothing_p = (s->total_available < 5); #ifdef HAVE_GTK2 GtkWidget *notebook = name_to_widget (s, "preview_notebook"); gtk_notebook_set_page (GTK_NOTEBOOK (notebook), (s->running_preview_error_p ? (available_p ? 1 : nothing_p ? 3 : 2) : 0)); #else /* !HAVE_GTK2 */ if (s->running_preview_error_p) { const char * const lines1[] = { N_("No Preview"), N_("Available") }; const char * const lines2[] = { N_("Not"), N_("Installed") }; int nlines = countof(lines1); int lh = p->style->font->ascent + p->style->font->descent; int y, i; gint w, h; const char * const *lines = (available_p ? lines1 : lines2); gdk_window_get_size (window, &w, &h); y = (h - (lh * nlines)) / 2; y += p->style->font->ascent; for (i = 0; i < nlines; i++) { int sw = gdk_string_width (p->style->font, _(lines[i])); int x = (w - sw) / 2; gdk_draw_string (window, p->style->font, p->style->fg_gc[GTK_STATE_NORMAL], x, y, _(lines[i])); y += lh; } } #endif /* !HAVE_GTK2 */ } gdk_flush (); } static void reset_preview_window (state *s) { /* On some systems (most recently, MacOS X) OpenGL programs get confused when you kill one and re-start another on the same window. So maybe it's best to just always destroy and recreate the preview window when changing hacks, instead of always trying to reuse the same one? */ GtkWidget *pr = name_to_widget (s, "preview"); if (GET_REALIZED (pr)) { GdkWindow *window = GET_WINDOW (pr); Window oid = (window ? GDK_WINDOW_XWINDOW (window) : 0); Window id; gtk_widget_hide (pr); gtk_widget_unrealize (pr); gtk_widget_realize (pr); gtk_widget_show (pr); id = (window ? GDK_WINDOW_XWINDOW (window) : 0); if (s->debug_p) fprintf (stderr, "%s: window id 0x%X -> 0x%X\n", blurb(), (unsigned int) oid, (unsigned int) id); } } static void fix_preview_visual (state *s) { GtkWidget *widget = name_to_widget (s, "preview"); Visual *xvisual = get_best_gl_visual (s); GdkVisual *visual = x_visual_to_gdk_visual (xvisual); GdkVisual *dvisual = gdk_visual_get_system(); GdkColormap *cmap = (visual == dvisual ? gdk_colormap_get_system () : gdk_colormap_new (visual, False)); if (s->debug_p) fprintf (stderr, "%s: using %s visual 0x%lx\n", blurb(), (visual == dvisual ? "default" : "non-default"), (xvisual ? (unsigned long) xvisual->visualid : 0L)); if (!GET_REALIZED (widget) || gtk_widget_get_visual (widget) != visual) { gtk_widget_unrealize (widget); gtk_widget_set_visual (widget, visual); gtk_widget_set_colormap (widget, cmap); gtk_widget_realize (widget); } /* Set the Widget colors to be white-on-black. */ { GdkWindow *window = GET_WINDOW (widget); GtkStyle *style = gtk_style_copy (gtk_widget_get_style (widget)); GdkColormap *cmap = gtk_widget_get_colormap (widget); GdkColor *fg = &style->fg[GTK_STATE_NORMAL]; GdkColor *bg = &style->bg[GTK_STATE_NORMAL]; GdkGC *fgc = gdk_gc_new(window); GdkGC *bgc = gdk_gc_new(window); if (!gdk_color_white (cmap, fg)) abort(); if (!gdk_color_black (cmap, bg)) abort(); gdk_gc_set_foreground (fgc, fg); gdk_gc_set_background (fgc, bg); gdk_gc_set_foreground (bgc, bg); gdk_gc_set_background (bgc, fg); style->fg_gc[GTK_STATE_NORMAL] = fgc; style->bg_gc[GTK_STATE_NORMAL] = fgc; gtk_widget_set_style (widget, style); /* For debugging purposes, put a title on the window (so that it can be easily found in the output of "xwininfo -tree".) */ gdk_window_set_title (window, "Preview"); } gtk_widget_show (widget); } /* Subprocesses */ static char * subproc_pretty_name (state *s) { if (s->running_preview_cmd) { char *ps = strdup (s->running_preview_cmd); char *ss = strchr (ps, ' '); if (ss) *ss = 0; ss = strrchr (ps, '/'); if (!ss) ss = ps; else { ss = strdup (ss+1); free (ps); } return ss; } else return strdup ("???"); } static void reap_zombies (state *s) { int wait_status = 0; pid_t pid; while ((pid = waitpid (-1, &wait_status, WNOHANG|WUNTRACED)) > 0) { if (s->debug_p) { if (pid == s->running_preview_pid) { char *ss = subproc_pretty_name (s); fprintf (stderr, "%s: pid %lu (%s) died\n", blurb(), (unsigned long) pid, ss); free (ss); } else fprintf (stderr, "%s: pid %lu died\n", blurb(), (unsigned long) pid); } } } /* Mostly lifted from driver/subprocs.c */ static Visual * get_best_gl_visual (state *s) { Display *dpy = GDK_DISPLAY(); pid_t forked; int fds [2]; int in, out; char buf[1024]; char *av[10]; int ac = 0; av[ac++] = "xscreensaver-gl-helper"; av[ac] = 0; if (pipe (fds)) { perror ("error creating pipe:"); return 0; } in = fds [0]; out = fds [1]; switch ((int) (forked = fork ())) { case -1: { sprintf (buf, "%s: couldn't fork", blurb()); perror (buf); exit (1); } case 0: { int stdout_fd = 1; close (in); /* don't need this one */ close (ConnectionNumber (dpy)); /* close display fd */ if (dup2 (out, stdout_fd) < 0) /* pipe stdout */ { perror ("could not dup() a new stdout:"); return 0; } execvp (av[0], av); /* shouldn't return. */ if (errno != ENOENT) { /* Ignore "no such file or directory" errors, unless verbose. Issue all other exec errors, though. */ sprintf (buf, "%s: running %s", blurb(), av[0]); perror (buf); } /* Note that one must use _exit() instead of exit() in procs forked off of Gtk programs -- Gtk installs an atexit handler that has a copy of the X connection (which we've already closed, for safety.) If one uses exit() instead of _exit(), then one sometimes gets a spurious "Gdk-ERROR: Fatal IO error on X server" error message. */ _exit (1); /* exits fork */ break; } default: { int result = 0; int wait_status = 0; FILE *f = fdopen (in, "r"); unsigned int v = 0; char c; close (out); /* don't need this one */ *buf = 0; if (!fgets (buf, sizeof(buf)-1, f)) *buf = 0; fclose (f); /* Wait for the child to die. */ waitpid (-1, &wait_status, 0); if (1 == sscanf (buf, "0x%x %c", &v, &c)) result = (int) v; if (result == 0) { if (s->debug_p) fprintf (stderr, "%s: %s did not report a GL visual!\n", blurb(), av[0]); return 0; } else { Visual *v = id_to_visual (DefaultScreenOfDisplay (dpy), result); if (s->debug_p) fprintf (stderr, "%s: %s says the GL visual is 0x%X.\n", blurb(), av[0], result); if (!v) abort(); return v; } } } abort(); } static void kill_preview_subproc (state *s, Bool reset_p) { s->running_preview_error_p = False; reap_zombies (s); clear_preview_window (s); if (s->subproc_check_timer_id) { gtk_timeout_remove (s->subproc_check_timer_id); s->subproc_check_timer_id = 0; s->subproc_check_countdown = 0; } if (s->running_preview_pid) { int status = kill (s->running_preview_pid, SIGTERM); char *ss = subproc_pretty_name (s); if (status < 0) { if (errno == ESRCH) { if (s->debug_p) fprintf (stderr, "%s: pid %lu (%s) was already dead.\n", blurb(), (unsigned long) s->running_preview_pid, ss); } else { char buf [1024]; sprintf (buf, "%s: couldn't kill pid %lu (%s)", blurb(), (unsigned long) s->running_preview_pid, ss); perror (buf); } } else { int endstatus; waitpid(s->running_preview_pid, &endstatus, 0); if (s->debug_p) fprintf (stderr, "%s: killed pid %lu (%s)\n", blurb(), (unsigned long) s->running_preview_pid, ss); } free (ss); s->running_preview_pid = 0; if (s->running_preview_cmd) free (s->running_preview_cmd); s->running_preview_cmd = 0; } reap_zombies (s); if (reset_p) { reset_preview_window (s); clear_preview_window (s); } } /* Immediately and unconditionally launches the given process, after appending the -window-id option; sets running_preview_pid. */ static void launch_preview_subproc (state *s) { saver_preferences *p = &s->prefs; Window id; char *new_cmd = 0; pid_t forked; const char *cmd = s->desired_preview_cmd; GtkWidget *pr = name_to_widget (s, "preview"); GdkWindow *window; reset_preview_window (s); window = GET_WINDOW (pr); s->running_preview_error_p = False; if (s->preview_suppressed_p) { kill_preview_subproc (s, False); goto DONE; } new_cmd = malloc (strlen (cmd) + 40); id = (window ? GDK_WINDOW_XWINDOW (window) : 0); if (id == 0) { /* No window id? No command to run. */ free (new_cmd); new_cmd = 0; } else { strcpy (new_cmd, cmd); sprintf (new_cmd + strlen (new_cmd), " -window-id 0x%X", (unsigned int) id); } kill_preview_subproc (s, False); if (! new_cmd) { s->running_preview_error_p = True; clear_preview_window (s); goto DONE; } switch ((int) (forked = fork ())) { case -1: { char buf[255]; sprintf (buf, "%s: couldn't fork", blurb()); perror (buf); s->running_preview_error_p = True; goto DONE; break; } case 0: { close (ConnectionNumber (GDK_DISPLAY())); hack_subproc_environment (id, s->debug_p); usleep (250000); /* pause for 1/4th second before launching, to give the previous program time to die and flush its X buffer, so we don't get leftover turds on the window. */ exec_command (p->shell, new_cmd, p->nice_inferior); /* Don't bother printing an error message when we are unable to exec subprocesses; we handle that by polling the pid later. Note that one must use _exit() instead of exit() in procs forked off of Gtk programs -- Gtk installs an atexit handler that has a copy of the X connection (which we've already closed, for safety.) If one uses exit() instead of _exit(), then one sometimes gets a spurious "Gdk-ERROR: Fatal IO error on X server" error message. */ _exit (1); /* exits child fork */ break; default: if (s->running_preview_cmd) free (s->running_preview_cmd); s->running_preview_cmd = strdup (s->desired_preview_cmd); s->running_preview_pid = forked; if (s->debug_p) { char *ss = subproc_pretty_name (s); fprintf (stderr, "%s: forked %lu (%s)\n", blurb(), (unsigned long) forked, ss); free (ss); } break; } } schedule_preview_check (s); DONE: if (new_cmd) free (new_cmd); new_cmd = 0; } /* Modify $DISPLAY and $PATH for the benefit of subprocesses. */ static void hack_environment (state *s) { static const char *def_path = # ifdef DEFAULT_PATH_PREFIX DEFAULT_PATH_PREFIX; # else ""; # endif Display *dpy = GDK_DISPLAY(); const char *odpy = DisplayString (dpy); char *ndpy = (char *) malloc(strlen(odpy) + 20); strcpy (ndpy, "DISPLAY="); strcat (ndpy, odpy); if (putenv (ndpy)) abort (); if (s->debug_p) fprintf (stderr, "%s: %s\n", blurb(), ndpy); /* don't free(ndpy) -- some implementations of putenv (BSD 4.4, glibc 2.0) copy the argument, but some (libc4,5, glibc 2.1.2) do not. So we must leak it (and/or the previous setting). Yay. */ if (def_path && *def_path) { const char *opath = getenv("PATH"); char *npath = (char *) malloc(strlen(def_path) + strlen(opath) + 20); strcpy (npath, "PATH="); strcat (npath, def_path); strcat (npath, ":"); strcat (npath, opath); if (putenv (npath)) abort (); /* do not free(npath) -- see above */ if (s->debug_p) fprintf (stderr, "%s: added \"%s\" to $PATH\n", blurb(), def_path); } } static void hack_subproc_environment (Window preview_window_id, Bool debug_p) { /* Store a window ID in $XSCREENSAVER_WINDOW -- this isn't strictly necessary yet, but it will make programs work if we had invoked them with "-root" and not with "-window-id" -- which, of course, doesn't happen. */ char *nssw = (char *) malloc (40); sprintf (nssw, "XSCREENSAVER_WINDOW=0x%X", (unsigned int) preview_window_id); /* Allegedly, BSD 4.3 didn't have putenv(), but nobody runs such systems any more, right? It's not Posix, but everyone seems to have it. */ if (putenv (nssw)) abort (); if (debug_p) fprintf (stderr, "%s: %s\n", blurb(), nssw); /* do not free(nssw) -- see above */ } /* Called from a timer: Launches the currently-chosen subprocess, if it's not already running. If there's a different process running, kills it. */ static int update_subproc_timer (gpointer data) { state *s = (state *) data; if (! s->desired_preview_cmd) kill_preview_subproc (s, True); else if (!s->running_preview_cmd || !!strcmp (s->desired_preview_cmd, s->running_preview_cmd)) launch_preview_subproc (s); s->subproc_timer_id = 0; return FALSE; /* do not re-execute timer */ } static int settings_timer (gpointer data) { settings_cb (0, 0); return FALSE; } /* Call this when you think you might want a preview process running. It will set a timer that will actually launch that program a second from now, if you haven't changed your mind (to avoid double-click spazzing, etc.) `cmd' may be null meaning "no process". */ static void schedule_preview (state *s, const char *cmd) { int delay = 1000 * 0.5; /* 1/2 second hysteresis */ if (s->debug_p) { if (cmd) fprintf (stderr, "%s: scheduling preview \"%s\"\n", blurb(), cmd); else fprintf (stderr, "%s: scheduling preview death\n", blurb()); } if (s->desired_preview_cmd) free (s->desired_preview_cmd); s->desired_preview_cmd = (cmd ? strdup (cmd) : 0); if (s->subproc_timer_id) gtk_timeout_remove (s->subproc_timer_id); s->subproc_timer_id = gtk_timeout_add (delay, update_subproc_timer, s); } /* Called from a timer: Checks to see if the subproc that should be running, actually is. */ static int check_subproc_timer (gpointer data) { state *s = (state *) data; Bool again_p = True; if (s->running_preview_error_p || /* already dead */ s->running_preview_pid <= 0) { again_p = False; } else { int status; reap_zombies (s); status = kill (s->running_preview_pid, 0); if (status < 0 && errno == ESRCH) s->running_preview_error_p = True; if (s->debug_p) { char *ss = subproc_pretty_name (s); fprintf (stderr, "%s: timer: pid %lu (%s) is %s\n", blurb(), (unsigned long) s->running_preview_pid, ss, (s->running_preview_error_p ? "dead" : "alive")); free (ss); } if (s->running_preview_error_p) { clear_preview_window (s); again_p = False; } } /* Otherwise, it's currently alive. We might be checking again, or we might be satisfied. */ if (--s->subproc_check_countdown <= 0) again_p = False; if (again_p) return TRUE; /* re-execute timer */ else { s->subproc_check_timer_id = 0; s->subproc_check_countdown = 0; return FALSE; /* do not re-execute timer */ } } /* Call this just after launching a subprocess. This sets a timer that will, five times a second for two seconds, check whether the program is still running. The assumption here is that if the process didn't stay up for more than a couple of seconds, then either the program doesn't exist, or it doesn't take a -window-id argument. */ static void schedule_preview_check (state *s) { int seconds = 2; int ticks = 5; if (s->debug_p) fprintf (stderr, "%s: scheduling check\n", blurb()); if (s->subproc_check_timer_id) gtk_timeout_remove (s->subproc_check_timer_id); s->subproc_check_timer_id = gtk_timeout_add (1000 / ticks, check_subproc_timer, (gpointer) s); s->subproc_check_countdown = ticks * seconds; } static Bool screen_blanked_p (void) { Atom type; int format; unsigned long nitems, bytesafter; unsigned char *dataP = 0; Display *dpy = GDK_DISPLAY(); Bool blanked_p = False; if (XGetWindowProperty (dpy, RootWindow (dpy, 0), /* always screen #0 */ XA_SCREENSAVER_STATUS, 0, 3, False, XA_INTEGER, &type, &format, &nitems, &bytesafter, &dataP) == Success && type == XA_INTEGER && nitems >= 3 && dataP) { Atom *data = (Atom *) dataP; blanked_p = (data[0] == XA_BLANK || data[0] == XA_LOCK); } if (dataP) XFree (dataP); return blanked_p; } /* Wake up every now and then and see if the screen is blanked. If it is, kill off the small-window demo -- no point in wasting cycles by running two screensavers at once... */ static int check_blanked_timer (gpointer data) { state *s = (state *) data; Bool blanked_p = screen_blanked_p (); if (blanked_p && s->running_preview_pid) { if (s->debug_p) fprintf (stderr, "%s: screen is blanked: killing preview\n", blurb()); kill_preview_subproc (s, True); } return True; /* re-execute timer */ } /* How many screens are there (including Xinerama.) */ static int screen_count (Display *dpy) { int nscreens = ScreenCount(dpy); # ifdef HAVE_XINERAMA if (nscreens <= 1) { int event_number, error_number; if (XineramaQueryExtension (dpy, &event_number, &error_number) && XineramaIsActive (dpy)) { XineramaScreenInfo *xsi = XineramaQueryScreens (dpy, &nscreens); if (xsi) XFree (xsi); } } # endif /* HAVE_XINERAMA */ return nscreens; } /* Setting window manager icon */ static void init_icon (GdkWindow *window) { GdkBitmap *mask = 0; GdkPixmap *pixmap = gdk_pixmap_create_from_xpm_d (window, &mask, 0, (gchar **) logo_50_xpm); if (pixmap) gdk_window_set_icon (window, 0, pixmap, mask); } /* The main demo-mode command loop. */ #if 0 static Bool mapper (XrmDatabase *db, XrmBindingList bindings, XrmQuarkList quarks, XrmRepresentation *type, XrmValue *value, XPointer closure) { int i; for (i = 0; quarks[i]; i++) { if (bindings[i] == XrmBindTightly) fprintf (stderr, (i == 0 ? "" : ".")); else if (bindings[i] == XrmBindLoosely) fprintf (stderr, "*"); else fprintf (stderr, " ??? "); fprintf(stderr, "%s", XrmQuarkToString (quarks[i])); } fprintf (stderr, ": %s\n", (char *) value->addr); return False; } #endif static Window gnome_screensaver_window (Screen *screen) { Display *dpy = DisplayOfScreen (screen); Window root = RootWindowOfScreen (screen); Window parent, *kids; unsigned int nkids; Window gnome_window = 0; int i; if (! XQueryTree (dpy, root, &root, &parent, &kids, &nkids)) abort (); for (i = 0; i < nkids; i++) { Atom type; int format; unsigned long nitems, bytesafter; unsigned char *name; if (XGetWindowProperty (dpy, kids[i], XA_WM_COMMAND, 0, 128, False, XA_STRING, &type, &format, &nitems, &bytesafter, &name) == Success && type != None && !strcmp ((char *) name, "gnome-screensaver")) { gnome_window = kids[i]; break; } } if (kids) XFree ((char *) kids); return gnome_window; } static Bool gnome_screensaver_active_p (void) { Display *dpy = GDK_DISPLAY(); Window w = gnome_screensaver_window (DefaultScreenOfDisplay (dpy)); return (w ? True : False); } static void kill_gnome_screensaver (void) { Display *dpy = GDK_DISPLAY(); Window w = gnome_screensaver_window (DefaultScreenOfDisplay (dpy)); if (w) XKillClient (dpy, (XID) w); } static Bool 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); pclose (p); if (!strcmp (buf, "true\n")) return True; else return False; } static void kill_kde_screensaver (void) { system ("dcop kdesktop KScreensaverIface enable false"); } static void the_network_is_not_the_computer (state *s) { Display *dpy = GDK_DISPLAY(); char *rversion = 0, *ruser = 0, *rhost = 0; char *luser, *lhost; char *msg = 0; struct passwd *p = getpwuid (getuid ()); const char *d = DisplayString (dpy); # if defined(HAVE_UNAME) struct utsname uts; if (uname (&uts) < 0) lhost = ""; else lhost = uts.nodename; # elif defined(VMS) strcpy (lhost, getenv("SYS$NODE")); # else /* !HAVE_UNAME && !VMS */ strcat (lhost, ""); # endif /* !HAVE_UNAME && !VMS */ if (p && p->pw_name) luser = p->pw_name; else luser = "???"; server_xscreensaver_version (dpy, &rversion, &ruser, &rhost); /* Make a buffer that's big enough for a number of copies of all the strings, plus some. */ msg = (char *) malloc (10 * ((rversion ? strlen(rversion) : 0) + (ruser ? strlen(ruser) : 0) + (rhost ? strlen(rhost) : 0) + strlen(lhost) + strlen(luser) + strlen(d) + 1024)); *msg = 0; if (!rversion || !*rversion) { sprintf (msg, _("Warning:\n\n" "The XScreenSaver daemon doesn't seem to be running\n" "on display \"%s\". Launch it now?"), d); } else if (p && ruser && *ruser && !!strcmp (ruser, p->pw_name)) { /* Warn that the two processes are running as different users. */ sprintf(msg, _("Warning:\n\n" "%s is running as user \"%s\" on host \"%s\".\n" "But the xscreensaver managing display \"%s\"\n" "is running as user \"%s\" on host \"%s\".\n" "\n" "Since they are different users, they won't be reading/writing\n" "the same ~/.xscreensaver file, so %s isn't\n" "going to work right.\n" "\n" "You should either re-run %s as \"%s\", or re-run\n" "xscreensaver as \"%s\".\n" "\n" "Restart the xscreensaver daemon now?\n"), progname, luser, lhost, d, (ruser ? ruser : "???"), (rhost ? rhost : "???"), progname, progname, (ruser ? ruser : "???"), luser); } else if (rhost && *rhost && !!strcmp (rhost, lhost)) { /* Warn that the two processes are running on different hosts. */ sprintf (msg, _("Warning:\n\n" "%s is running as user \"%s\" on host \"%s\".\n" "But the xscreensaver managing display \"%s\"\n" "is running as user \"%s\" on host \"%s\".\n" "\n" "If those two machines don't share a file system (that is,\n" "if they don't see the same ~%s/.xscreensaver file) then\n" "%s won't work right.\n" "\n" "Restart the daemon on \"%s\" as \"%s\" now?\n"), progname, luser, lhost, d, (ruser ? ruser : "???"), (rhost ? rhost : "???"), luser, progname, lhost, luser); } else if (!!strcmp (rversion, s->short_version)) { /* Warn that the version numbers don't match. */ sprintf (msg, _("Warning:\n\n" "This is %s version %s.\n" "But the xscreensaver managing display \"%s\"\n" "is version %s. This could cause problems.\n" "\n" "Restart the xscreensaver daemon now?\n"), progname, s->short_version, d, rversion); } if (*msg) warning_dialog (s->toplevel_widget, msg, D_LAUNCH, 1); if (rversion) free (rversion); if (ruser) free (ruser); if (rhost) free (rhost); free (msg); msg = 0; /* Note: since these dialogs are not modal, they will stack up. So we do this check *after* popping up the "xscreensaver is not running" dialog so that these are on top. Good enough. */ if (gnome_screensaver_active_p ()) warning_dialog (s->toplevel_widget, _("Warning:\n\n" "The GNOME screensaver daemon appears to be running.\n" "It must be stopped for XScreenSaver to work properly.\n" "\n" "Stop the GNOME screen saver daemon now?\n"), D_GNOME, 1); if (kde_screensaver_active_p ()) warning_dialog (s->toplevel_widget, _("Warning:\n\n" "The KDE screen saver daemon appears to be running.\n" "It must be stopped for XScreenSaver to work properly.\n" "\n" "Stop the KDE screen saver daemon now?\n"), D_KDE, 1); } /* We use this error handler so that X errors are preceeded by the name of the program that generated them. */ static int demo_ehandler (Display *dpy, XErrorEvent *error) { state *s = global_state_kludge; /* I hate C so much... */ fprintf (stderr, "\nX error in %s:\n", blurb()); XmuPrintDefaultErrorMessage (dpy, error, stderr); kill_preview_subproc (s, False); exit (-1); return 0; } /* We use this error handler so that Gtk/Gdk errors are preceeded by the name of the program that generated them; and also that we can ignore one particular bogus error message that Gdk madly spews. */ static void g_log_handler (const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data) { /* Ignore the message "Got event for unknown window: 0x...". Apparently some events are coming in for the xscreensaver window (presumably reply events related to the ClientMessage) and Gdk feels the need to complain about them. So, just suppress any messages that look like that one. */ if (strstr (message, "unknown window")) return; fprintf (stderr, "%s: %s-%s: %s%s", blurb(), (log_domain ? log_domain : progclass), (log_level == G_LOG_LEVEL_ERROR ? "error" : log_level == G_LOG_LEVEL_CRITICAL ? "critical" : log_level == G_LOG_LEVEL_WARNING ? "warning" : log_level == G_LOG_LEVEL_MESSAGE ? "message" : log_level == G_LOG_LEVEL_INFO ? "info" : log_level == G_LOG_LEVEL_DEBUG ? "debug" : "???"), message, ((!*message || message[strlen(message)-1] != '\n') ? "\n" : "")); } #ifdef __GNUC__ __extension__ /* shut up about "string length is greater than the length ISO C89 compilers are required to support" when including the .ad file... */ #endif STFU static char *defaults[] = { #include "XScreenSaver_ad.h" 0 }; #if 0 #ifdef HAVE_CRAPPLET static struct poptOption crapplet_options[] = { {NULL, '\0', 0, NULL, 0} }; #endif /* HAVE_CRAPPLET */ #endif /* 0 */ const char *usage = "[--display dpy] [--prefs | --settings]" # ifdef HAVE_CRAPPLET " [--crapplet]" # endif "\n\t\t [--debug] [--sync] [--no-xshm] [--configdir dir]"; static void map_popup_window_cb (GtkWidget *w, gpointer user_data) { state *s = (state *) user_data; Boolean oi = s->initializing_p; #ifndef HAVE_GTK2 GtkLabel *label = GTK_LABEL (name_to_widget (s, "doc")); #endif s->initializing_p = True; #ifndef HAVE_GTK2 eschew_gtk_lossage (label); #endif s->initializing_p = oi; } #if 0 static void print_widget_tree (GtkWidget *w, int depth) { int i; for (i = 0; i < depth; i++) fprintf (stderr, " "); fprintf (stderr, "%s\n", gtk_widget_get_name (w)); if (GTK_IS_LIST (w)) { for (i = 0; i < depth+1; i++) fprintf (stderr, " "); fprintf (stderr, "...list kids...\n"); } else if (GTK_IS_CONTAINER (w)) { GList *kids = gtk_container_children (GTK_CONTAINER (w)); while (kids) { print_widget_tree (GTK_WIDGET (kids->data), depth+1); kids = kids->next; } } } #endif /* 0 */ static int delayed_scroll_kludge (gpointer data) { state *s = (state *) data; GtkWidget *w = GTK_WIDGET (name_to_widget (s, "list")); ensure_selected_item_visible (w); /* Oh, this is just fucking lovely, too. */ w = GTK_WIDGET (name_to_widget (s, "preview")); gtk_widget_hide (w); gtk_widget_show (w); return FALSE; /* do not re-execute timer */ } #ifdef HAVE_GTK2 static GtkWidget * create_xscreensaver_demo (void) { GtkWidget *nb; nb = name_to_widget (global_state_kludge, "preview_notebook"); gtk_notebook_set_show_tabs (GTK_NOTEBOOK (nb), FALSE); return name_to_widget (global_state_kludge, "xscreensaver_demo"); } static GtkWidget * create_xscreensaver_settings_dialog (void) { GtkWidget *w, *box; box = name_to_widget (global_state_kludge, "dialog_action_area"); w = name_to_widget (global_state_kludge, "adv_button"); gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (box), w, TRUE); w = name_to_widget (global_state_kludge, "std_button"); gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (box), w, TRUE); return name_to_widget (global_state_kludge, "xscreensaver_settings_dialog"); } #endif /* HAVE_GTK2 */ int main (int argc, char **argv) { XtAppContext app; state S, *s; saver_preferences *p; Bool prefs_p = False; Bool settings_p = False; int i; Display *dpy; Widget toplevel_shell; char *real_progname = argv[0]; char *window_title; char *geom = 0; Bool crapplet_p = False; char *str; #ifdef ENABLE_NLS bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); textdomain (GETTEXT_PACKAGE); # ifdef HAVE_GTK2 bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); # else /* !HAVE_GTK2 */ if (!setlocale (LC_ALL, "")) fprintf (stderr, "%s: locale not supported by C library\n", real_progname); # endif /* !HAVE_GTK2 */ #endif /* ENABLE_NLS */ str = strrchr (real_progname, '/'); if (str) real_progname = str+1; s = &S; memset (s, 0, sizeof(*s)); s->initializing_p = True; p = &s->prefs; global_state_kludge = s; /* I hate C so much... */ progname = real_progname; s->short_version = (char *) malloc (5); memcpy (s->short_version, screensaver_id + 17, 4); s->short_version [4] = 0; /* Register our error message logger for every ``log domain'' known. There's no way to do this globally, so I grepped the Gtk/Gdk sources for all of the domains that seem to be in use. */ { const char * const domains[] = { 0, "Gtk", "Gdk", "GLib", "GModule", "GThread", "Gnome", "GnomeUI" }; for (i = 0; i < countof(domains); i++) g_log_set_handler (domains[i], G_LOG_LEVEL_MASK, g_log_handler, 0); } #ifdef DEFAULT_ICONDIR /* from -D on compile line */ # ifndef HAVE_GTK2 { const char *dir = DEFAULT_ICONDIR; if (*dir) add_pixmap_directory (dir); } # endif /* !HAVE_GTK2 */ #endif /* DEFAULT_ICONDIR */ /* This is gross, but Gtk understands --display and not -display... */ for (i = 1; i < argc; i++) if (argv[i][0] && argv[i][1] && !strncmp(argv[i], "-display", strlen(argv[i]))) argv[i] = "--display"; /* We need to parse this arg really early... Sigh. */ for (i = 1; i < argc; i++) { if (argv[i] && (!strcmp(argv[i], "--crapplet") || !strcmp(argv[i], "--capplet"))) { # if defined(HAVE_CRAPPLET) || defined(HAVE_GTK2) int j; crapplet_p = True; for (j = i; j < argc; j++) /* remove it from the list */ argv[j] = argv[j+1]; argc--; # else /* !HAVE_CRAPPLET && !HAVE_GTK2 */ fprintf (stderr, "%s: not compiled with --crapplet support\n", real_progname); fprintf (stderr, "%s: %s\n", real_progname, usage); exit (1); # endif /* !HAVE_CRAPPLET && !HAVE_GTK2 */ } else if (argv[i] && (!strcmp(argv[i], "--debug") || !strcmp(argv[i], "-debug") || !strcmp(argv[i], "-d"))) { int j; s->debug_p = True; for (j = i; j < argc; j++) /* remove it from the list */ argv[j] = argv[j+1]; argc--; i--; } else if (argv[i] && argc > i+1 && *argv[i+1] && (!strcmp(argv[i], "-geometry") || !strcmp(argv[i], "-geom") || !strcmp(argv[i], "-geo") || !strcmp(argv[i], "-g"))) { int j; geom = argv[i+1]; for (j = i; j < argc; j++) /* remove them from the list */ argv[j] = argv[j+2]; argc -= 2; i -= 2; } else if (argv[i] && argc > i+1 && *argv[i+1] && (!strcmp(argv[i], "--configdir"))) { int j; struct stat st; hack_configuration_path = argv[i+1]; for (j = i; j < argc; j++) /* remove them from the list */ argv[j] = argv[j+2]; argc -= 2; i -= 2; if (0 != stat (hack_configuration_path, &st)) { char buf[255]; sprintf (buf, "%s: %.200s", blurb(), hack_configuration_path); perror (buf); exit (1); } else if (!S_ISDIR (st.st_mode)) { fprintf (stderr, "%s: not a directory: %s\n", blurb(), hack_configuration_path); exit (1); } } } if (s->debug_p) fprintf (stderr, "%s: using config directory \"%s\"\n", progname, hack_configuration_path); /* Let Gtk open the X connection, then initialize Xt to use that same connection. Doctor Frankenstein would be proud. */ # ifdef HAVE_CRAPPLET if (crapplet_p) { GnomeClient *client; GnomeClientFlags flags = 0; int init_results = gnome_capplet_init ("screensaver-properties", s->short_version, argc, argv, NULL, 0, NULL); /* init_results is: 0 upon successful initialization; 1 if --init-session-settings was passed on the cmdline; 2 if --ignore was passed on the cmdline; -1 on error. So the 1 signifies just to init the settings, and quit, basically. (Meaning launch the xscreensaver daemon.) */ if (init_results < 0) { # if 0 g_error ("An initialization error occurred while " "starting xscreensaver-capplet.\n"); # else /* !0 */ fprintf (stderr, "%s: gnome_capplet_init failed: %d\n", real_progname, init_results); exit (1); # endif /* !0 */ } client = gnome_master_client (); if (client) flags = gnome_client_get_flags (client); if (flags & GNOME_CLIENT_IS_CONNECTED) { int token = gnome_startup_acquire_token ("GNOME_SCREENSAVER_PROPERTIES", gnome_client_get_id (client)); if (token) { char *session_args[20]; int i = 0; session_args[i++] = real_progname; session_args[i++] = "--capplet"; session_args[i++] = "--init-session-settings"; session_args[i] = 0; gnome_client_set_priority (client, 20); gnome_client_set_restart_style (client, GNOME_RESTART_ANYWAY); gnome_client_set_restart_command (client, i, session_args); } else { gnome_client_set_restart_style (client, GNOME_RESTART_NEVER); } gnome_client_flush (client); } if (init_results == 1) { system ("xscreensaver -nosplash &"); return 0; } } else # endif /* HAVE_CRAPPLET */ { gtk_init (&argc, &argv); } /* We must read exactly the same resources as xscreensaver. That means we must have both the same progclass *and* progname, at least as far as the resource database is concerned. So, put "xscreensaver" in argv[0] while initializing Xt. */ argv[0] = "xscreensaver"; progname = argv[0]; /* Teach Xt to use the Display that Gtk/Gdk have already opened. */ XtToolkitInitialize (); app = XtCreateApplicationContext (); dpy = GDK_DISPLAY(); XtAppSetFallbackResources (app, defaults); XtDisplayInitialize (app, dpy, progname, progclass, 0, 0, &argc, argv); toplevel_shell = XtAppCreateShell (progname, progclass, applicationShellWidgetClass, dpy, 0, 0); dpy = XtDisplay (toplevel_shell); db = XtDatabase (dpy); XtGetApplicationNameAndClass (dpy, &progname, &progclass); XSetErrorHandler (demo_ehandler); /* Let's just ignore these. They seem to confuse Irix Gtk... */ signal (SIGPIPE, SIG_IGN); /* After doing Xt-style command-line processing, complain about any unrecognized command-line arguments. */ for (i = 1; i < argc; i++) { char *str = argv[i]; if (str[0] == '-' && str[1] == '-') str++; if (!strcmp (str, "-prefs")) prefs_p = True; else if (!strcmp (str, "-settings")) settings_p = True; else if (crapplet_p) /* There are lots of random args that we don't care about when we're started as a crapplet, so just ignore unknown args in that case. */ ; else { fprintf (stderr, _("%s: unknown option: %s\n"), real_progname, argv[i]); fprintf (stderr, "%s: %s\n", real_progname, usage); exit (1); } } /* Load the init file, which may end up consulting the X resource database and the site-wide app-defaults file. Note that at this point, it's important that `progname' be "xscreensaver", rather than whatever was in argv[0]. */ p->db = db; s->nscreens = screen_count (dpy); hack_environment (s); /* must be before initialize_sort_map() */ load_init_file (dpy, p); initialize_sort_map (s); /* Now that Xt has been initialized, and the resources have been read, we can set our `progname' variable to something more in line with reality. */ progname = real_progname; #if 0 /* Print out all the resources we read. */ { XrmName name = { 0 }; XrmClass class = { 0 }; int count = 0; XrmEnumerateDatabase (db, &name, &class, XrmEnumAllLevels, mapper, (POINTER) &count); } #endif /* Intern the atoms that xscreensaver_command() needs. */ XA_VROOT = XInternAtom (dpy, "__SWM_VROOT", False); XA_SCREENSAVER = XInternAtom (dpy, "SCREENSAVER", False); XA_SCREENSAVER_VERSION = XInternAtom (dpy, "_SCREENSAVER_VERSION",False); XA_SCREENSAVER_STATUS = XInternAtom (dpy, "_SCREENSAVER_STATUS", False); XA_SCREENSAVER_ID = XInternAtom (dpy, "_SCREENSAVER_ID", False); XA_SCREENSAVER_RESPONSE = XInternAtom (dpy, "_SCREENSAVER_RESPONSE", False); XA_SELECT = XInternAtom (dpy, "SELECT", False); XA_DEMO = XInternAtom (dpy, "DEMO", False); XA_ACTIVATE = XInternAtom (dpy, "ACTIVATE", False); XA_BLANK = XInternAtom (dpy, "BLANK", False); XA_LOCK = XInternAtom (dpy, "LOCK", False); XA_EXIT = XInternAtom (dpy, "EXIT", False); XA_RESTART = XInternAtom (dpy, "RESTART", False); /* Create the window and all its widgets. */ s->base_widget = create_xscreensaver_demo (); s->popup_widget = create_xscreensaver_settings_dialog (); s->toplevel_widget = s->base_widget; /* Set the main window's title. */ { char *base_title = _("Screensaver Preferences"); char *v = (char *) strdup(strchr(screensaver_id, ' ')); char *s1, *s2, *s3, *s4; s1 = (char *) strchr(v, ' '); s1++; s2 = (char *) strchr(s1, ' '); s3 = (char *) strchr(v, '('); s3++; s4 = (char *) strchr(s3, ')'); *s2 = 0; *s4 = 0; window_title = (char *) malloc (strlen (base_title) + strlen (progclass) + strlen (s1) + strlen (s3) + 100); sprintf (window_title, "%s (%s %s, %s)", base_title, progclass, s1, s3); gtk_window_set_title (GTK_WINDOW (s->toplevel_widget), window_title); gtk_window_set_title (GTK_WINDOW (s->popup_widget), window_title); free (v); } /* Adjust the (invisible) notebooks on the popup dialog... */ { GtkNotebook *notebook = GTK_NOTEBOOK (name_to_widget (s, "opt_notebook")); GtkWidget *std = GTK_WIDGET (name_to_widget (s, "std_button")); int page = 0; # ifdef HAVE_XML gtk_widget_hide (std); # else /* !HAVE_XML */ /* Make the advanced page be the only one available. */ gtk_widget_set_sensitive (std, False); std = GTK_WIDGET (name_to_widget (s, "adv_button")); gtk_widget_hide (std); std = GTK_WIDGET (name_to_widget (s, "reset_button")); gtk_widget_hide (std); page = 1; # endif /* !HAVE_XML */ gtk_notebook_set_page (notebook, page); gtk_notebook_set_show_tabs (notebook, False); } /* Various other widget initializations... */ gtk_signal_connect (GTK_OBJECT (s->toplevel_widget), "delete_event", GTK_SIGNAL_FUNC (wm_toplevel_close_cb), (gpointer) s); gtk_signal_connect (GTK_OBJECT (s->popup_widget), "delete_event", GTK_SIGNAL_FUNC (wm_popup_close_cb), (gpointer) s); populate_hack_list (s); populate_prefs_page (s); sensitize_demo_widgets (s, False); fix_text_entry_sizes (s); scroll_to_current_hack (s); gtk_signal_connect (GTK_OBJECT (name_to_widget (s, "cancel_button")), "map", GTK_SIGNAL_FUNC(map_popup_window_cb), (gpointer) s); #ifndef HAVE_GTK2 gtk_signal_connect (GTK_OBJECT (name_to_widget (s, "prev")), "map", GTK_SIGNAL_FUNC(map_prev_button_cb), (gpointer) s); gtk_signal_connect (GTK_OBJECT (name_to_widget (s, "next")), "map", GTK_SIGNAL_FUNC(map_next_button_cb), (gpointer) s); #endif /* !HAVE_GTK2 */ /* Hook up callbacks to the items on the mode menu. */ { GtkOptionMenu *opt = GTK_OPTION_MENU (name_to_widget (s, "mode_menu")); GtkMenu *menu = GTK_MENU (gtk_option_menu_get_menu (opt)); GList *kids = gtk_container_children (GTK_CONTAINER (menu)); int i; for (i = 0; kids; kids = kids->next, i++) { gtk_signal_connect (GTK_OBJECT (kids->data), "activate", GTK_SIGNAL_FUNC (mode_menu_item_cb), (gpointer) s); /* The "random-same" mode menu item does not appear unless there are multple screens. */ if (s->nscreens <= 1 && mode_menu_order[i] == RANDOM_HACKS_SAME) gtk_widget_hide (GTK_WIDGET (kids->data)); } if (s->nscreens <= 1) /* recompute option-menu size */ { gtk_widget_unrealize (GTK_WIDGET (menu)); gtk_widget_realize (GTK_WIDGET (menu)); } } /* Handle the -prefs command-line argument. */ if (prefs_p) { GtkNotebook *notebook = GTK_NOTEBOOK (name_to_widget (s, "notebook")); gtk_notebook_set_page (notebook, 1); } # ifdef HAVE_CRAPPLET if (crapplet_p) { GtkWidget *capplet; GtkWidget *outer_vbox; gtk_widget_hide (s->toplevel_widget); capplet = capplet_widget_new (); /* Make there be a "Close" button instead of "OK" and "Cancel" */ # ifdef HAVE_CRAPPLET_IMMEDIATE capplet_widget_changes_are_immediate (CAPPLET_WIDGET (capplet)); # endif /* HAVE_CRAPPLET_IMMEDIATE */ /* In crapplet-mode, take off the menubar. */ gtk_widget_hide (name_to_widget (s, "menubar")); /* Reparent our top-level container to be a child of the capplet window. */ outer_vbox = GTK_BIN (s->toplevel_widget)->child; gtk_widget_ref (outer_vbox); gtk_container_remove (GTK_CONTAINER (s->toplevel_widget), outer_vbox); STFU GTK_OBJECT_SET_FLAGS (outer_vbox, GTK_FLOATING); gtk_container_add (GTK_CONTAINER (capplet), outer_vbox); /* Find the window above us, and set the title and close handler. */ { GtkWidget *window = capplet; while (window && !GTK_IS_WINDOW (window)) window = GET_PARENT (window); if (window) { gtk_window_set_title (GTK_WINDOW (window), window_title); gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (wm_toplevel_close_cb), (gpointer) s); } } s->toplevel_widget = capplet; } # endif /* HAVE_CRAPPLET */ /* The Gnome folks hate the menubar. I think it's important to have access to the commands on the File menu (Restart Daemon, etc.) and to the About and Documentation commands on the Help menu. */ #if 0 #ifdef HAVE_GTK2 gtk_widget_hide (name_to_widget (s, "menubar")); #endif #endif free (window_title); window_title = 0; #ifdef HAVE_GTK2 /* After picking the default size, allow -geometry to override it. */ if (geom) gtk_window_parse_geometry (GTK_WINDOW (s->toplevel_widget), geom); #endif gtk_widget_show (s->toplevel_widget); init_icon (GET_WINDOW (GTK_WIDGET (s->toplevel_widget))); /* after `show' */ fix_preview_visual (s); /* Realize page zero, so that we can diddle the scrollbar when the user tabs back to it -- otherwise, the current hack isn't scrolled to the first time they tab back there, when started with "-prefs". (Though it is if they then tab away, and back again.) #### Bah! This doesn't work. Gtk eats my ass! Someone who #### understands this crap, explain to me how to make this work. */ gtk_widget_realize (name_to_widget (s, "demos_table")); gtk_timeout_add (60 * 1000, check_blanked_timer, s); /* Handle the --settings command-line argument. */ if (settings_p) gtk_timeout_add (500, settings_timer, 0); /* Issue any warnings about the running xscreensaver daemon. */ if (! s->debug_p) the_network_is_not_the_computer (s); if (senescent_p()) warning_dialog (s->toplevel_widget, _("Warning:\n\n" "This version of xscreensaver is VERY OLD!\n" "Please upgrade!\n" "\n" "http://www.jwz.org/xscreensaver/\n" "\n" "(If this is the latest version that your distro ships, then\n" "your distro is doing you a disservice. Build from source.)\n" ), D_NONE, 7); /* Run the Gtk event loop, and not the Xt event loop. This means that if there were Xt timers or fds registered, they would never get serviced, and if there were any Xt widgets, they would never have events delivered. Fortunately, we're using Gtk for all of the UI, and only initialized Xt so that we could process the command line and use the X resource manager. */ s->initializing_p = False; /* This totally sucks -- set a timer that whacks the scrollbar 0.5 seconds after we start up. Otherwise, it always appears scrolled to the top when in crapplet-mode. */ gtk_timeout_add (500, delayed_scroll_kludge, s); #if 1 /* Load every configurator in turn, to scan them for errors all at once. */ if (s->debug_p) { int i; for (i = 0; i < p->screenhacks_count; i++) { screenhack *hack = p->screenhacks[i]; conf_data *d = load_configurator (hack->command, s->debug_p); if (d) free_conf_data (d); } } #endif # ifdef HAVE_CRAPPLET if (crapplet_p) capplet_gtk_main (); else # endif /* HAVE_CRAPPLET */ gtk_main (); kill_preview_subproc (s, False); exit (0); } #endif /* HAVE_GTK -- whole file */ xscreensaver-5.34/driver/demo-Gtk-conf.c000644 000767 000767 00000155064 12411423505 017722 0ustar00jwzjwz000000 000000 /* demo-Gtk-conf.c --- implements the dynamic configuration dialogs. * xscreensaver, Copyright (c) 2001-2014 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #if defined(HAVE_GTK) && defined(HAVE_XML) /* whole file */ #include #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include /* * Both of these workarounds can be removed when support for ancient * libxml versions is dropped. versions 1.8.11 and 2.3.4 provide the * correct fixes. */ /* * Older libxml polluted the global headerspace, while libxml2 fixed * this. To support both old and recent libxmls, we have this * workaround. */ #ifdef HAVE_OLD_XML_HEADERS # include #else /* ! HAVE_OLD_XML_HEADERS */ # include #endif /* HAVE_OLD_XML_HEADERS */ /* * handle non-native spelling mistakes in earlier versions and provide * the source-compat fix for this that may not be in older versions. */ #ifndef xmlChildrenNode # if LIBXML_VERSION >= 20000 # define xmlChildrenNode children # define xmlRootNode children # else # define xmlChildrenNode childs # define xmlRootNode root # endif /* LIBXML_VERSION */ #endif /* xmlChildrenNode */ #include #include "demo-Gtk-conf.h" /* Deal with deprecation of direct access to struct fields on the way to GTK3 See http://live.gnome.org/GnomeGoals/UseGseal */ #if GTK_CHECK_VERSION(2,14,0) # define GET_PARENT(w) gtk_widget_get_parent (w) # define GET_ADJ_VALUE(a) gtk_adjustment_get_value (a) # define GET_ADJ_UPPER(a) gtk_adjustment_get_upper (a) # define GET_ADJ_LOWER(a) gtk_adjustment_get_lower (a) #else # define GET_PARENT(w) ((w)->parent) # define GET_ADJ_VALUE(a) ((a)->value) # define GET_ADJ_UPPER(a) ((a)->upper) # define GET_ADJ_LOWER(a) ((a)->lower) #endif extern const char *blurb (void); const char *hack_configuration_path = HACK_CONFIGURATION_PATH; static gboolean debug_p = FALSE; #define MIN_SLIDER_WIDTH 150 #define MIN_SPINBUTTON_WIDTH 48 #define MIN_LABEL_WIDTH 70 typedef enum { COMMAND, FAKE, DESCRIPTION, FAKEPREVIEW, STRING, FILENAME, SLIDER, SPINBUTTON, BOOLEAN, SELECT, SELECT_OPTION } parameter_type; typedef struct { parameter_type type; xmlChar *id; /* widget name */ xmlChar *label; /* heading label, or null */ /* command, fake, description, fakepreview, string, file */ xmlChar *string; /* file name, description, whatever. */ /* slider, spinbutton */ xmlChar *low_label; /* label for the left side */ xmlChar *high_label; /* label for the right side */ float low; /* minimum value */ float high; /* maximum value */ float value; /* default value */ gboolean integer_p; /* whether the range is integral, or real */ xmlChar *arg; /* command-line option to set (substitute "%") */ gboolean invert_p; /* whether to flip the value and pretend the range goes from hi-low instead of low-hi. */ /* boolean, select-option */ xmlChar *arg_set; /* command-line option to set for "yes", or null */ xmlChar *arg_unset; /* command-line option to set for "no", or null */ /* select */ GList *options; /* select_option */ GtkWidget *widget; } parameter; static parameter *make_select_option (const char *file, xmlNodePtr); static void make_parameter_widget (const char *filename, parameter *, GtkWidget *); static void browse_button_cb (GtkButton *button, gpointer user_data); /* Frees the parameter object and all strings and sub-parameters. Does not destroy the widget, if any. */ static void free_parameter (parameter *p) { GList *rest; if (p->id) free (p->id); if (p->label) free (p->label); if (p->string) free (p->string); if (p->low_label) free (p->low_label); if (p->high_label) free (p->high_label); if (p->arg) free (p->arg); if (p->arg_set) free (p->arg_set); if (p->arg_unset) free (p->arg_unset); for (rest = p->options; rest; rest = rest->next) if (rest->data) free_parameter ((parameter *) rest->data); memset (p, ~0, sizeof(*p)); free (p); } /* Debugging: dumps out a `parameter' structure. */ #if 0 void describe_parameter (FILE *out, parameter *p) { fprintf (out, "<"); switch (p->type) { case COMMAND: fprintf (out, "command"); break; case FAKE: fprintf (out, "fake"); break; case DESCRIPTION: fprintf (out, "_description"); break; case FAKEPREVIEW: fprintf (out, "fakepreview"); break; case STRING: fprintf (out, "string"); break; case FILENAME: fprintf (out, "filename"); break; case SLIDER: fprintf (out, "number type=\"slider\""); break; case SPINBUTTON: fprintf (out, "number type=\"spinbutton\""); break; case BOOLEAN: fprintf (out, "boolean"); break; case SELECT: fprintf (out, "select"); break; default: abort(); break; } if (p->id) fprintf (out, " id=\"%s\"", p->id); if (p->label) fprintf (out, " _label=\"%s\"", p->label); if (p->string && p->type != DESCRIPTION) fprintf (out, " string=\"%s\"", p->string); if (p->low_label) fprintf (out, " _low-label=\"%s\"", p->low_label); if (p->high_label) fprintf (out, " _high-label=\"%s\"", p->high_label); if (p->low) fprintf (out, " low=\"%.2f\"", p->low); if (p->high) fprintf (out, " high=\"%.2f\"", p->high); if (p->value) fprintf (out, " default=\"%.2f\"", p->value); if (p->arg) fprintf (out, " arg=\"%s\"", p->arg); if (p->invert_p) fprintf (out, " convert=\"invert\""); if (p->arg_set) fprintf (out, " arg-set=\"%s\"", p->arg_set); if (p->arg_unset) fprintf (out, " arg-unset=\"%s\"", p->arg_unset); fprintf (out, ">\n"); if (p->type == SELECT) { GList *opt; for (opt = p->options; opt; opt = opt->next) { parameter *o = (parameter *) opt->data; if (o->type != SELECT_OPTION) abort(); fprintf (out, " id) fprintf (out, " id=\"%s\"", o->id); if (o->label) fprintf (out, " _label=\"%s\"", o->label); if (o->arg_set) fprintf (out, " arg-set=\"%s\"", o->arg_set); if (o->arg_unset) fprintf (out, " arg-unset=\"%s\"", o->arg_unset); fprintf (out, ">\n"); } fprintf (out, "\n"); } else if (p->type == DESCRIPTION) { if (p->string) fprintf (out, " %s\n", p->string); fprintf (out, "\n"); } } #endif /* 0 */ /* Like xmlGetProp() but parses a float out of the string. If the number was expressed as a float and not an integer (that is, the string contained a decimal point) then `floatp' is set to TRUE. Otherwise, it is unchanged. */ static float xml_get_float (xmlNodePtr node, const xmlChar *name, gboolean *floatpP) { const char *s = (char *) xmlGetProp (node, name); float f; char c; if (!s || 1 != sscanf (s, "%f %c", &f, &c)) return 0; else { if (strchr (s, '.')) *floatpP = TRUE; return f; } } static void sanity_check_parameter (const char *filename, const xmlChar *node_name, parameter *p); static void sanity_check_text_node (const char *filename, const xmlNodePtr node); static void sanity_check_menu_options (const char *filename, const xmlChar *node_name, parameter *p); /* Allocates and returns a new `parameter' object based on the properties in the given XML node. Returns 0 if there's nothing to create (comment, or unknown tag.) */ static parameter * make_parameter (const char *filename, xmlNodePtr node) { parameter *p; const char *name = (char *) node->name; const char *convert; gboolean floatp = FALSE; if (node->type == XML_COMMENT_NODE) return 0; p = calloc (1, sizeof(*p)); if (!name) abort(); else if (!strcmp (name, "command")) p->type = COMMAND; else if (!strcmp (name, "fullcommand")) p->type = COMMAND; else if (!strcmp (name, "_description")) p->type = DESCRIPTION; else if (!strcmp (name, "fakepreview")) p->type = FAKEPREVIEW; else if (!strcmp (name, "fake")) p->type = FAKE; else if (!strcmp (name, "boolean")) p->type = BOOLEAN; else if (!strcmp (name, "string")) p->type = STRING; else if (!strcmp (name, "file")) p->type = FILENAME; else if (!strcmp (name, "number")) p->type = SPINBUTTON; else if (!strcmp (name, "select")) p->type = SELECT; else if (!strcmp (name, "xscreensaver-text") || /* ignored in X11; */ !strcmp (name, "xscreensaver-image") || /* used in Cocoa. */ !strcmp (name, "xscreensaver-updater") || !strcmp (name, "video")) { free (p); return 0; } else if (node->type == XML_TEXT_NODE) { sanity_check_text_node (filename, node); free (p); return 0; } else { if (debug_p) fprintf (stderr, "%s: WARNING: %s: unknown tag: \"%s\"\n", blurb(), filename, name); free (p); return 0; } if (p->type == SPINBUTTON) { const char *type = (char *) xmlGetProp (node, (xmlChar *) "type"); if (!type || !strcmp (type, "spinbutton")) p->type = SPINBUTTON; else if (!strcmp (type, "slider")) p->type = SLIDER; else { if (debug_p) fprintf (stderr, "%s: WARNING: %s: unknown %s type: \"%s\"\n", blurb(), filename, name, type); free (p); return 0; } } else if (p->type == DESCRIPTION) { if (node->xmlChildrenNode && node->xmlChildrenNode->type == XML_TEXT_NODE && !node->xmlChildrenNode->next) p->string = (xmlChar *) strdup ((char *) node->xmlChildrenNode->content); } p->id = xmlGetProp (node, (xmlChar *) "id"); p->label = xmlGetProp (node, (xmlChar *) "_label"); p->low_label = xmlGetProp (node, (xmlChar *) "_low-label"); p->high_label = xmlGetProp (node, (xmlChar *) "_high-label"); p->low = xml_get_float (node, (xmlChar *) "low", &floatp); p->high = xml_get_float (node, (xmlChar *) "high", &floatp); p->value = xml_get_float (node, (xmlChar *) "default", &floatp); p->integer_p = !floatp; convert = (char *) xmlGetProp (node, (xmlChar *) "convert"); p->invert_p = (convert && !strcmp (convert, "invert")); p->arg = xmlGetProp (node, (xmlChar *) "arg"); p->arg_set = xmlGetProp (node, (xmlChar *) "arg-set"); p->arg_unset = xmlGetProp (node, (xmlChar *) "arg-unset"); /* Check for missing decimal point */ if (debug_p && p->integer_p && (p->high != p->low) && (p->high - p->low) <= 1) fprintf (stderr, "%s: WARNING: %s: %s: range [%.1f, %.1f] shouldn't be integral!\n", blurb(), filename, p->id, p->low, p->high); if (p->type == SELECT) { xmlNodePtr kids; for (kids = node->xmlChildrenNode; kids; kids = kids->next) { parameter *s = make_select_option (filename, kids); if (s) p->options = g_list_append (p->options, s); } } sanity_check_parameter (filename, (const xmlChar *) name, p); return p; } /* Allocates and returns a new SELECT_OPTION `parameter' object based on the properties in the given XML node. Returns 0 if there's nothing to create (comment, or unknown tag.) */ static parameter * make_select_option (const char *filename, xmlNodePtr node) { if (node->type == XML_COMMENT_NODE) return 0; else if (node->type == XML_TEXT_NODE) { sanity_check_text_node (filename, node); return 0; } else if (node->type != XML_ELEMENT_NODE) { if (debug_p) fprintf (stderr, "%s: WARNING: %s: %s: unexpected child tag type %d\n", blurb(), filename, node->name, (int)node->type); return 0; } else if (strcmp ((char *) node->name, "option")) { if (debug_p) fprintf (stderr, "%s: WARNING: %s: %s: child not an option tag: \"%s\"\n", blurb(), filename, node->name, node->name); return 0; } else { parameter *s = calloc (1, sizeof(*s)); s->type = SELECT_OPTION; s->id = xmlGetProp (node, (xmlChar *) "id"); s->label = xmlGetProp (node, (xmlChar *) "_label"); s->arg_set = xmlGetProp (node, (xmlChar *) "arg-set"); s->arg_unset = xmlGetProp (node, (xmlChar *) "arg-unset"); sanity_check_parameter (filename, node->name, s); return s; } } /* Rudimentary check to make sure someone hasn't typed "arg-set=" when they should have typed "arg=", etc. */ static void sanity_check_parameter (const char *filename, const xmlChar *node_name, parameter *p) { struct { gboolean id; gboolean label; gboolean string; gboolean low_label; gboolean high_label; gboolean low; gboolean high; gboolean value; gboolean arg; gboolean invert_p; gboolean arg_set; gboolean arg_unset; } allowed, require; memset (&allowed, 0, sizeof (allowed)); memset (&require, 0, sizeof (require)); switch (p->type) { case COMMAND: allowed.arg = TRUE; require.arg = TRUE; break; case FAKE: break; case DESCRIPTION: allowed.string = TRUE; break; case FAKEPREVIEW: break; case STRING: allowed.id = TRUE; require.id = TRUE; allowed.label = TRUE; require.label = TRUE; allowed.arg = TRUE; require.arg = TRUE; break; case FILENAME: allowed.id = TRUE; require.id = TRUE; allowed.label = TRUE; allowed.arg = TRUE; require.arg = TRUE; break; case SLIDER: allowed.id = TRUE; require.id = TRUE; allowed.label = TRUE; allowed.low_label = TRUE; allowed.high_label = TRUE; allowed.arg = TRUE; require.arg = TRUE; allowed.low = TRUE; /* require.low = TRUE; -- may be 0 */ allowed.high = TRUE; /* require.high = TRUE; -- may be 0 */ allowed.value = TRUE; /* require.value = TRUE; -- may be 0 */ allowed.invert_p = TRUE; break; case SPINBUTTON: allowed.id = TRUE; require.id = TRUE; allowed.label = TRUE; allowed.arg = TRUE; require.arg = TRUE; allowed.low = TRUE; /* require.low = TRUE; -- may be 0 */ allowed.high = TRUE; /* require.high = TRUE; -- may be 0 */ allowed.value = TRUE; /* require.value = TRUE; -- may be 0 */ allowed.invert_p = TRUE; break; case BOOLEAN: allowed.id = TRUE; require.id = TRUE; allowed.label = TRUE; allowed.arg_set = TRUE; allowed.arg_unset = TRUE; break; case SELECT: allowed.id = TRUE; require.id = TRUE; break; case SELECT_OPTION: allowed.id = TRUE; allowed.label = TRUE; require.label = TRUE; allowed.arg_set = TRUE; break; default: abort(); break; } # define WARN(STR) \ fprintf (stderr, "%s: %s: " STR " in <%s%s id=\"%s\">\n", \ blurb(), filename, node_name, \ (!strcmp((char *) node_name, "number") \ ? (p->type == SPINBUTTON ? " type=spinbutton" : " type=slider")\ : ""), \ (p->id ? (char *) p->id : "")) # define CHECK(SLOT,NAME) \ if (p->SLOT && !allowed.SLOT) \ WARN ("\"" NAME "\" is not a valid option"); \ if (!p->SLOT && require.SLOT) \ WARN ("\"" NAME "\" is required") CHECK (id, "id"); CHECK (label, "_label"); CHECK (string, "(body text)"); CHECK (low_label, "_low-label"); CHECK (high_label, "_high-label"); CHECK (low, "low"); CHECK (high, "high"); CHECK (value, "default"); CHECK (arg, "arg"); CHECK (invert_p, "convert"); CHECK (arg_set, "arg-set"); CHECK (arg_unset, "arg-unset"); # undef CHECK # undef WARN if (p->type == SELECT) sanity_check_menu_options (filename, node_name, p); } static void sanity_check_menu_options (const char *filename, const xmlChar *node_name, parameter *p) { GList *opts; int noptions = 0; int nulls = 0; char *prefix = 0; /* fprintf (stderr, "\n## %s\n", p->id);*/ for (opts = p->options; opts; opts = opts->next) { parameter *s = (parameter *) opts->data; if (!s->arg_set) nulls++; noptions++; if (s->arg_set) { char *a = strdup ((char *) s->arg_set); char *spc = strchr (a, ' '); if (spc) *spc = 0; if (prefix) { if (strcmp (a, prefix)) fprintf (stderr, "%s: %s: both \"%s\" and \"%s\" used in \n", blurb(), filename, p->id); } /* "text" nodes show up for all the non-tag text in the file, including all the newlines between tags. Warn if there is text there that is not whitespace. */ static void sanity_check_text_node (const char *filename, const xmlNodePtr node) { const char *body = (const char *) node->content; if (node->type != XML_TEXT_NODE) abort(); while (isspace (*body)) body++; if (*body) fprintf (stderr, "%s: WARNING: %s: random text present: \"%s\"\n", blurb(), filename, body); } /* Returns a list of strings, every switch mentioned in the parameters. The strings must be freed. */ static GList * get_all_switches (const char *filename, GList *parms) { GList *switches = 0; GList *p; for (p = parms; p; p = p->next) { parameter *pp = (parameter *) p->data; if (pp->type == SELECT) { GList *list2 = get_all_switches (filename, pp->options); switches = g_list_concat (switches, list2); } if (pp->arg && *pp->arg) switches = g_list_append (switches, strdup ((char *) pp->arg)); if (pp->arg_set && *pp->arg_set) switches = g_list_append (switches, strdup ((char *) pp->arg_set)); if (pp->arg_unset && *pp->arg_unset) switches = g_list_append (switches, strdup ((char *) pp->arg_unset)); } return switches; } /* Ensures that no switch is mentioned more than once. */ static void sanity_check_parameters (const char *filename, GList *parms) { GList *list = get_all_switches (filename, parms); GList *p; for (p = list; p; p = p->next) { char *sw = (char *) p->data; GList *p2; if (*sw != '-' && *sw != '+') fprintf (stderr, "%s: %s: switch does not begin with hyphen \"%s\"\n", blurb(), filename, sw); for (p2 = p->next; p2; p2 = p2->next) { const char *sw2 = (const char *) p2->data; if (!strcmp (sw, sw2)) fprintf (stderr, "%s: %s: duplicate switch \"%s\"\n", blurb(), filename, sw); } free (sw); } g_list_free (list); } /* Helper for make_parameters() */ static GList * make_parameters_1 (const char *filename, xmlNodePtr node, GtkWidget *parent) { GList *list = 0; for (; node; node = node->next) { const char *name = (char *) node->name; if (!strcmp (name, "hgroup") || !strcmp (name, "vgroup")) { GtkWidget *box = (*name == 'h' ? gtk_hbox_new (FALSE, 0) : gtk_vbox_new (FALSE, 0)); GList *list2; gtk_widget_show (box); gtk_box_pack_start (GTK_BOX (parent), box, FALSE, FALSE, 0); list2 = make_parameters_1 (filename, node->xmlChildrenNode, box); if (list2) list = g_list_concat (list, list2); } else { parameter *p = make_parameter (filename, node); if (p) { list = g_list_append (list, p); make_parameter_widget (filename, p, parent); } } } return list; } /* Calls make_parameter() and make_parameter_widget() on each relevant tag in the XML tree. Also handles the "hgroup" and "vgroup" flags. Returns a GList of `parameter' objects. */ static GList * make_parameters (const char *filename, xmlNodePtr node, GtkWidget *parent) { for (; node; node = node->next) { if (node->type == XML_ELEMENT_NODE && !strcmp ((char *) node->name, "screensaver")) return make_parameters_1 (filename, node->xmlChildrenNode, parent); } return 0; } static gfloat invert_range (gfloat low, gfloat high, gfloat value) { gfloat range = high-low; gfloat off = value-low; return (low + (range - off)); } static GtkAdjustment * make_adjustment (const char *filename, parameter *p) { float range = (p->high - p->low); float value = (p->invert_p ? invert_range (p->low, p->high, p->value) : p->value); gfloat si = (p->high - p->low) / 100; gfloat pi = (p->high - p->low) / 10; gfloat page_size = ((p->type == SLIDER) ? 1 : 0); if (p->value < p->low || p->value > p->high) { if (debug_p && p->integer_p) fprintf (stderr, "%s: WARNING: %s: %d is not in range [%d, %d]\n", blurb(), filename, (int) p->value, (int) p->low, (int) p->high); else if (debug_p) fprintf (stderr, "%s: WARNING: %s: %.2f is not in range [%.2f, %.2f]\n", blurb(), filename, p->value, p->low, p->high); value = (value < p->low ? p->low : p->high); } #if 0 else if (debug_p && p->value < 1000 && p->high >= 10000) { if (p->integer_p) fprintf (stderr, "%s: WARNING: %s: %d is suspicious for range [%d, %d]\n", blurb(), filename, (int) p->value, (int) p->low, (int) p->high); else fprintf (stderr, "%s: WARNING: %s: %.2f is suspicious for range [%.2f, %.2f]\n", blurb(), filename, p->value, p->low, p->high); } #endif /* 0 */ si = (int) (si + 0.5); pi = (int) (pi + 0.5); if (si < 1) si = 1; if (pi < 1) pi = 1; if (range <= 500) si = 1; return GTK_ADJUSTMENT (gtk_adjustment_new (value, p->low, p->high + page_size, si, pi, page_size)); } static void set_widget_min_width (GtkWidget *w, int width) { GtkRequisition req; gtk_widget_size_request (GTK_WIDGET (w), &req); if (req.width < width) gtk_widget_set_size_request (GTK_WIDGET (w), width, -1); } /* If we're inside a vbox, we need to put an hbox in it, or labels appear on top instead of to the left, and things stretch to the full width of the window. */ static GtkWidget * insert_fake_hbox (GtkWidget *parent) { if (GTK_IS_VBOX (parent)) { GtkWidget *hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (parent), hbox, FALSE, FALSE, 4); gtk_widget_show (hbox); return hbox; } return parent; } static void link_atk_label_to_widget(GtkWidget *label, GtkWidget *widget) { AtkObject *atk_label = gtk_widget_get_accessible (label); AtkObject *atk_widget = gtk_widget_get_accessible (widget); atk_object_add_relationship (atk_label, ATK_RELATION_LABEL_FOR, atk_widget); atk_object_add_relationship (atk_widget, ATK_RELATION_LABELLED_BY, atk_label); } /* Given a `parameter' struct, allocates an appropriate GtkWidget for it, and stores it in `p->widget'. `parent' must be a GtkBox. */ static void make_parameter_widget (const char *filename, parameter *p, GtkWidget *parent) { const char *label = (char *) p->label; if (p->widget) return; switch (p->type) { case STRING: { GtkWidget *entry = gtk_entry_new (); parent = insert_fake_hbox (parent); if (label) { GtkWidget *w = gtk_label_new (_(label)); link_atk_label_to_widget (w, entry); gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_RIGHT); gtk_misc_set_alignment (GTK_MISC (w), 1.0, 0.5); set_widget_min_width (GTK_WIDGET (w), MIN_LABEL_WIDTH); gtk_widget_show (w); gtk_box_pack_start (GTK_BOX (parent), w, FALSE, FALSE, 4); } p->widget = entry; if (p->string) gtk_entry_set_text (GTK_ENTRY (p->widget), (char *) p->string); gtk_box_pack_start (GTK_BOX (parent), p->widget, FALSE, FALSE, 4); break; } case FILENAME: { GtkWidget *L = gtk_label_new (label ? _(label) : ""); GtkWidget *entry = gtk_entry_new (); GtkWidget *button = gtk_button_new_with_label (_("Browse...")); link_atk_label_to_widget (L, entry); gtk_widget_show (entry); gtk_widget_show (button); p->widget = entry; gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (browse_button_cb), (gpointer) entry); gtk_label_set_justify (GTK_LABEL (L), GTK_JUSTIFY_RIGHT); gtk_misc_set_alignment (GTK_MISC (L), 1.0, 0.5); set_widget_min_width (GTK_WIDGET (L), MIN_LABEL_WIDTH); gtk_widget_show (L); if (p->string) gtk_entry_set_text (GTK_ENTRY (entry), (char *) p->string); parent = insert_fake_hbox (parent); gtk_box_pack_start (GTK_BOX (parent), L, FALSE, FALSE, 4); gtk_box_pack_start (GTK_BOX (parent), entry, TRUE, TRUE, 4); gtk_box_pack_start (GTK_BOX (parent), button, FALSE, FALSE, 4); break; } case SLIDER: { GtkAdjustment *adj = make_adjustment (filename, p); GtkWidget *scale = gtk_hscale_new (adj); GtkWidget *labelw = 0; if (label) { labelw = gtk_label_new (_(label)); link_atk_label_to_widget (labelw, scale); gtk_label_set_justify (GTK_LABEL (labelw), GTK_JUSTIFY_LEFT); gtk_misc_set_alignment (GTK_MISC (labelw), 0.0, 0.5); set_widget_min_width (GTK_WIDGET (labelw), MIN_LABEL_WIDTH); gtk_widget_show (labelw); gtk_box_pack_start (GTK_BOX (parent), labelw, FALSE, FALSE, 2); } /* Do this after 'labelw' so that it appears above, not to left. */ parent = insert_fake_hbox (parent); if (p->low_label) { GtkWidget *w = gtk_label_new (_((char *) p->low_label)); link_atk_label_to_widget (w, scale); gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_RIGHT); gtk_misc_set_alignment (GTK_MISC (w), 1.0, 0.5); set_widget_min_width (GTK_WIDGET (w), MIN_LABEL_WIDTH); gtk_widget_show (w); gtk_box_pack_start (GTK_BOX (parent), w, FALSE, FALSE, 4); } gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_BOTTOM); gtk_scale_set_draw_value (GTK_SCALE (scale), debug_p); gtk_scale_set_digits (GTK_SCALE (scale), (p->integer_p ? 0 : 2)); set_widget_min_width (GTK_WIDGET (scale), MIN_SLIDER_WIDTH); gtk_box_pack_start (GTK_BOX (parent), scale, FALSE, FALSE, 4); gtk_widget_show (scale); if (p->high_label) { GtkWidget *w = gtk_label_new (_((char *) p->high_label)); link_atk_label_to_widget (w, scale); gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT); gtk_misc_set_alignment (GTK_MISC (w), 0.0, 0.5); set_widget_min_width (GTK_WIDGET (w), MIN_LABEL_WIDTH); gtk_widget_show (w); gtk_box_pack_start (GTK_BOX (parent), w, FALSE, FALSE, 4); } p->widget = scale; break; } case SPINBUTTON: { GtkAdjustment *adj = make_adjustment (filename, p); GtkWidget *spin = gtk_spin_button_new (adj, 15, 0); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spin), TRUE); gtk_spin_button_set_snap_to_ticks (GTK_SPIN_BUTTON (spin), TRUE); gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin), GET_ADJ_VALUE(adj)); set_widget_min_width (GTK_WIDGET (spin), MIN_SPINBUTTON_WIDTH); if (label) { GtkWidget *w = gtk_label_new (_(label)); link_atk_label_to_widget (w, spin); gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_RIGHT); gtk_misc_set_alignment (GTK_MISC (w), 1.0, 0.5); set_widget_min_width (GTK_WIDGET (w), MIN_LABEL_WIDTH); gtk_widget_show (w); parent = insert_fake_hbox (parent); gtk_box_pack_start (GTK_BOX (parent), w, FALSE, FALSE, 4); } gtk_widget_show (spin); gtk_box_pack_start (GTK_BOX (parent), spin, FALSE, FALSE, 4); p->widget = spin; break; } case BOOLEAN: { p->widget = gtk_check_button_new_with_label (_(label)); /* Let these stretch -- doesn't hurt. parent = insert_fake_hbox (parent); */ gtk_box_pack_start (GTK_BOX (parent), p->widget, FALSE, FALSE, 4); break; } case SELECT: { GtkWidget *opt = gtk_option_menu_new (); GtkWidget *menu = gtk_menu_new (); GList *opts; for (opts = p->options; opts; opts = opts->next) { parameter *s = (parameter *) opts->data; GtkWidget *i = gtk_menu_item_new_with_label (_((char *) s->label)); gtk_widget_show (i); gtk_menu_append (GTK_MENU (menu), i); } gtk_option_menu_set_menu (GTK_OPTION_MENU (opt), menu); p->widget = opt; parent = insert_fake_hbox (parent); gtk_box_pack_start (GTK_BOX (parent), p->widget, FALSE, FALSE, 4); break; } case COMMAND: case FAKE: case DESCRIPTION: case FAKEPREVIEW: break; default: abort(); } if (p->widget) { gtk_widget_set_name (p->widget, (char *) p->id); gtk_widget_show (p->widget); } } /* File selection. Absurdly, there is no GTK file entry widget, only a GNOME one, so in order to avoid depending on GNOME in this code, we have to do it ourselves. */ /* cancel button on GtkFileSelection: user_data unused */ static void file_sel_cancel (GtkWidget *button, gpointer user_data) { GtkWidget *dialog = button; while (GET_PARENT (dialog)) dialog = GET_PARENT (dialog); gtk_widget_destroy (dialog); } /* ok button on GtkFileSelection: user_data is the corresponding GtkEntry */ static void file_sel_ok (GtkWidget *button, gpointer user_data) { GtkWidget *entry = GTK_WIDGET (user_data); GtkWidget *dialog = button; const char *path; while (GET_PARENT (dialog)) dialog = GET_PARENT (dialog); gtk_widget_hide (dialog); path = gtk_file_selection_get_filename (GTK_FILE_SELECTION (dialog)); /* apparently one doesn't free `path' */ gtk_entry_set_text (GTK_ENTRY (entry), path); gtk_entry_set_position (GTK_ENTRY (entry), strlen (path)); gtk_widget_destroy (dialog); } /* WM close on GtkFileSelection: user_data unused */ static void file_sel_close (GtkWidget *widget, GdkEvent *event, gpointer user_data) { file_sel_cancel (widget, user_data); } /* "Browse" button: user_data is the corresponding GtkEntry */ static void browse_button_cb (GtkButton *button, gpointer user_data) { GtkWidget *entry = GTK_WIDGET (user_data); const char *text = gtk_entry_get_text (GTK_ENTRY (entry)); GtkFileSelection *selector = GTK_FILE_SELECTION (gtk_file_selection_new (_("Select file."))); gtk_file_selection_set_filename (selector, text); gtk_signal_connect (GTK_OBJECT (selector->ok_button), "clicked", GTK_SIGNAL_FUNC (file_sel_ok), (gpointer) entry); gtk_signal_connect (GTK_OBJECT (selector->cancel_button), "clicked", GTK_SIGNAL_FUNC (file_sel_cancel), (gpointer) entry); gtk_signal_connect (GTK_OBJECT (selector), "delete_event", GTK_SIGNAL_FUNC (file_sel_close), (gpointer) entry); gtk_window_set_modal (GTK_WINDOW (selector), TRUE); gtk_widget_show (GTK_WIDGET (selector)); } /* Converting to and from command-lines */ /* Returns a copy of string that has been quoted according to shell rules: it may have been wrapped in "" and had some characters backslashed; or it may be unchanged. */ static char * shell_quotify (const char *string) { char *string2 = (char *) malloc ((strlen (string) * 2) + 10); const char *in; char *out; int need_quotes = 0; int in_length = 0; out = string2; *out++ = '"'; for (in = string; *in; in++) { in_length++; if (*in == '!' || *in == '"' || *in == '$') { need_quotes = 1; *out++ = '\\'; *out++ = *in; } else if (*in <= ' ' || *in >= 127 || *in == '\'' || *in == '#' || *in == '%' || *in == '&' || *in == '(' || *in == ')' || *in == '*') { need_quotes = 1; *out++ = *in; } else *out++ = *in; } *out++ = '"'; *out = 0; if (in_length == 0) need_quotes = 1; if (need_quotes) return (string2); free (string2); return strdup (string); } /* Modify the string in place to remove wrapping double-quotes and interior backslashes. */ static void de_stringify (char *s) { char q = s[0]; if (q != '\'' && q != '\"' && q != '`') abort(); memmove (s, s+1, strlen (s)); while (*s && *s != q) { if (*s == '\\') memmove (s, s+1, strlen (s)+1); s++; } if (*s != q) abort(); *s = 0; } /* Substitutes a shell-quotified version of `value' into `p->arg' at the place where the `%' character appeared. */ static char * format_switch (parameter *p, const char *value) { char *fmt = (char *) p->arg; char *v2; char *result, *s; if (!fmt || !value) return 0; v2 = shell_quotify (value); result = (char *) malloc (strlen (fmt) + strlen (v2) + 10); s = result; for (; *fmt; fmt++) if (*fmt != '%') *s++ = *fmt; else { strcpy (s, v2); s += strlen (s); } *s = 0; free (v2); return result; } /* Maps a `parameter' to a command-line switch. Returns 0 if it can't, or if the parameter has the default value. */ static char * parameter_to_switch (parameter *p) { switch (p->type) { case COMMAND: if (p->arg) return strdup ((char *) p->arg); else return 0; break; case STRING: case FILENAME: if (!p->widget) return 0; { const char *s = gtk_entry_get_text (GTK_ENTRY (p->widget)); char *v; if (!strcmp ((s ? s : ""), (p->string ? (char *) p->string : ""))) v = 0; /* same as default */ else v = format_switch (p, s); /* don't free `s' */ return v; } case SLIDER: case SPINBUTTON: if (!p->widget) return 0; { GtkAdjustment *adj = (p->type == SLIDER ? gtk_range_get_adjustment (GTK_RANGE (p->widget)) : gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (p->widget))); char buf[255]; char *s1; float value = (p->invert_p ? invert_range (GET_ADJ_LOWER(adj), GET_ADJ_UPPER(adj), GET_ADJ_VALUE(adj)) - 1 : GET_ADJ_VALUE(adj)); if (value == p->value) /* same as default */ return 0; if (p->integer_p) sprintf (buf, "%d", (int) (value + (value > 0 ? 0.5 : -0.5))); else sprintf (buf, "%.4f", value); s1 = strchr (buf, '.'); if (s1) { char *s2 = s1 + strlen(s1) - 1; while (s2 > s1 && *s2 == '0') /* lose trailing zeroes */ *s2-- = 0; if (s2 >= s1 && *s2 == '.') /* lose trailing decimal */ *s2-- = 0; } return format_switch (p, buf); } case BOOLEAN: if (!p->widget) return 0; { GtkToggleButton *b = GTK_TOGGLE_BUTTON (p->widget); const char *s = (gtk_toggle_button_get_active (b) ? (char *) p->arg_set : (char *) p->arg_unset); if (s) return strdup (s); else return 0; } case SELECT: if (!p->widget) return 0; { GtkOptionMenu *opt = GTK_OPTION_MENU (p->widget); GtkMenu *menu = GTK_MENU (gtk_option_menu_get_menu (opt)); GtkWidget *selected = gtk_menu_get_active (menu); GList *kids = gtk_container_children (GTK_CONTAINER (menu)); int menu_elt = g_list_index (kids, (gpointer) selected); GList *ol = g_list_nth (p->options, menu_elt); parameter *o = (ol ? (parameter *) ol->data : 0); const char *s; if (!o) abort(); if (o->type != SELECT_OPTION) abort(); s = (char *) o->arg_set; if (s) return strdup (s); else return 0; } default: if (p->widget) abort(); else return 0; } } /* Maps a GList of `parameter' objects to a complete command-line string. All arguments will be properly quoted. */ static char * parameters_to_cmd_line (GList *parms, gboolean default_p) { int L = g_list_length (parms); int LL = 0; char **strs = (char **) calloc (sizeof (*parms), L); char *result; char *out; int i, j; for (i = 0, j = 0; parms; parms = parms->next, i++) { parameter *p = (parameter *) parms->data; if (!default_p || p->type == COMMAND) { char *s = parameter_to_switch (p); strs[j++] = s; LL += (s ? strlen(s) : 0) + 1; } } result = (char *) malloc (LL + 10); out = result; for (i = 0; i < j; i++) if (strs[i]) { strcpy (out, strs[i]); out += strlen (out); *out++ = ' '; free (strs[i]); } *out = 0; while (out > result && out[-1] == ' ') /* strip trailing spaces */ *(--out) = 0; free (strs); return result; } /* Returns a GList of the tokens the string, using shell syntax; Quoted strings are handled as a single token. */ static GList * tokenize_command_line (const char *cmd) { GList *result = 0; const char *s = cmd; while (*s) { const char *start; char *ss; for (; isspace(*s); s++); /* skip whitespace */ start = s; if (*s == '\'' || *s == '\"' || *s == '`') { char q = *s; s++; while (*s && *s != q) /* skip to matching quote */ { if (*s == '\\' && s[1]) /* allowing backslash quoting */ s++; s++; } s++; } else { while (*s && (! (isspace(*s) || *s == '\'' || *s == '\"' || *s == '`'))) s++; } if (s > start) { ss = (char *) malloc ((s - start) + 1); strncpy (ss, start, s-start); ss[s-start] = 0; if (*ss == '\'' || *ss == '\"' || *ss == '`') de_stringify (ss); result = g_list_append (result, ss); } } return result; } static void parameter_set_switch (parameter *, gpointer value); static gboolean parse_command_line_into_parameters_1 (const char *filename, GList *parms, const char *option, const char *value, parameter *parent); /* Parses the command line, and flushes those options down into the `parameter' structs in the list. */ static void parse_command_line_into_parameters (const char *filename, const char *cmd, GList *parms) { GList *tokens = tokenize_command_line (cmd); GList *rest; for (rest = tokens; rest; rest = rest->next) { char *option = rest->data; rest->data = 0; if (option[0] != '-' && option[0] != '+') { if (debug_p) fprintf (stderr, "%s: WARNING: %s: not a switch: \"%s\"\n", blurb(), filename, option); } else { char *value = 0; if (rest->next) /* pop off the arg to this option */ { char *s = (char *) rest->next->data; /* the next token is the next switch iff it matches "-[a-z]". (To avoid losing on "-x -3.1".) */ if (s && (s[0] != '-' || !isalpha(s[1]))) { value = s; rest->next->data = 0; rest = rest->next; } } parse_command_line_into_parameters_1 (filename, parms, option, value, 0); if (value) free (value); free (option); } } g_list_free (tokens); } static gboolean compare_opts (const char *option, const char *value, const char *template) { int ol = strlen (option); char *c; if (strncmp (option, template, ol)) return FALSE; if (template[ol] != (value ? ' ' : 0)) return FALSE; /* At this point, we have a match against "option". If template contains a %, we're done. Else, compare against "value" too. */ c = strchr (template, '%'); if (c) return TRUE; if (!value) return (template[ol] == 0); if (strcmp (template + ol + 1, value)) return FALSE; return TRUE; } static gboolean parse_command_line_into_parameters_1 (const char *filename, GList *parms, const char *option, const char *value, parameter *parent) { GList *p; parameter *match = 0; gint which = -1; gint index = 0; for (p = parms; p; p = p->next) { parameter *pp = (parameter *) p->data; which = -99; if (pp->type == SELECT) { if (parse_command_line_into_parameters_1 (filename, pp->options, option, value, pp)) { which = -2; match = pp; } } else if (pp->arg) { if (compare_opts (option, value, (char *) pp->arg)) { which = -1; match = pp; } } else if (pp->arg_set) { if (compare_opts (option, value, (char *) pp->arg_set)) { which = 1; match = pp; } } else if (pp->arg_unset) { if (compare_opts (option, value, (char *) pp->arg_unset)) { which = 0; match = pp; } } if (match) break; index++; } if (!match) { if (debug_p && !parent) fprintf (stderr, "%s: WARNING: %s: no match for %s %s\n", blurb(), filename, option, (value ? value : "")); return FALSE; } switch (match->type) { case STRING: case FILENAME: case SLIDER: case SPINBUTTON: if (which != -1) abort(); parameter_set_switch (match, (gpointer) value); break; case BOOLEAN: if (which != 0 && which != 1) abort(); parameter_set_switch (match, GINT_TO_POINTER(which)); break; case SELECT_OPTION: if (which != 1) abort(); parameter_set_switch (parent, GINT_TO_POINTER(index)); break; default: break; } return TRUE; } /* Set the parameter's value. For STRING, FILENAME, SLIDER, and SPINBUTTON, `value' is a char*. For BOOLEAN and SELECT, `value' is an int. */ static void parameter_set_switch (parameter *p, gpointer value) { if (p->type == SELECT_OPTION) abort(); if (!p->widget) return; switch (p->type) { case STRING: case FILENAME: { gtk_entry_set_text (GTK_ENTRY (p->widget), (char *) value); break; } case SLIDER: case SPINBUTTON: { GtkAdjustment *adj = (p->type == SLIDER ? gtk_range_get_adjustment (GTK_RANGE (p->widget)) : gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (p->widget))); float f; char c; if (1 == sscanf ((char *) value, "%f %c", &f, &c)) { if (p->invert_p) f = invert_range (GET_ADJ_LOWER(adj), GET_ADJ_UPPER(adj), f) - 1; gtk_adjustment_set_value (adj, f); } break; } case BOOLEAN: { GtkToggleButton *b = GTK_TOGGLE_BUTTON (p->widget); gtk_toggle_button_set_active (b, GPOINTER_TO_INT(value)); break; } case SELECT: { gtk_option_menu_set_history (GTK_OPTION_MENU (p->widget), GPOINTER_TO_INT(value)); break; } default: abort(); } } static void restore_defaults (const char *progname, GList *parms) { for (; parms; parms = parms->next) { parameter *p = (parameter *) parms->data; if (!p->widget) continue; switch (p->type) { case STRING: case FILENAME: { gtk_entry_set_text (GTK_ENTRY (p->widget), (p->string ? (char *) p->string : "")); break; } case SLIDER: case SPINBUTTON: { GtkAdjustment *adj = (p->type == SLIDER ? gtk_range_get_adjustment (GTK_RANGE (p->widget)) : gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (p->widget))); float value = (p->invert_p ? invert_range (p->low, p->high, p->value) : p->value); gtk_adjustment_set_value (adj, value); break; } case BOOLEAN: { /* A toggle button should be on by default if it inserts nothing into the command line when on. E.g., it should be on if `arg_set' is null. */ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (p->widget), (!p->arg_set || !*p->arg_set)); break; } case SELECT: { GtkOptionMenu *opt = GTK_OPTION_MENU (p->widget); GList *opts; int selected = 0; int index; for (opts = p->options, index = 0; opts; opts = opts->next, index++) { parameter *s = (parameter *) opts->data; /* The default menu item is the first one with no `arg_set' field. */ if (!s->arg_set) { selected = index; break; } } gtk_option_menu_set_history (GTK_OPTION_MENU (opt), selected); break; } default: abort(); } } } /* Documentation strings */ static char * get_description (GList *parms, gboolean verbose_p) { parameter *doc = 0; for (; parms; parms = parms->next) { parameter *p = (parameter *) parms->data; if (p->type == DESCRIPTION) { doc = p; break; } } if (!doc || !doc->string) return 0; else { char *d = strdup ((char *) doc->string); char *s; char *p; for (s = d; *s; s++) if (s[0] == '\n') { if (s[1] == '\n') /* blank line: leave it */ s++; else if (s[1] == ' ' || s[1] == '\t') s++; /* next line is indented: leave newline */ else if (!strncmp(s+1, "http:", 5)) s++; /* next line begins a URL: leave newline */ else s[0] = ' '; /* delete newline to un-fold this line */ } /* strip off leading whitespace on first line only */ for (s = d; *s && (*s == ' ' || *s == '\t'); s++) ; while (*s == '\n') /* strip leading newlines */ s++; if (s != d) memmove (d, s, strlen(s)+1); /* strip off trailing whitespace and newlines */ { int L = strlen(d); while (L && isspace(d[L-1])) d[--L] = 0; } /* strip off duplicated whitespaces */ for (s = d; *s; s++) if (s[0] == ' ') { p = s+1; while (*s == ' ') s++; if (*p && (s != p)) memmove (p, s, strlen(s)+1); } #if 0 if (verbose_p) { fprintf (stderr, "%s: text read is \"%s\"\n", blurb(),doc->string); fprintf (stderr, "%s: description is \"%s\"\n", blurb(), d); fprintf (stderr, "%s: translation is \"%s\"\n", blurb(), _(d)); } #endif /* 0 */ return (d); } } /* External interface. */ static conf_data * load_configurator_1 (const char *program, const char *arguments, gboolean verbose_p) { const char *dir = hack_configuration_path; char *base_program; int L = strlen (dir); char *file; char *s; FILE *f; conf_data *data; if (L == 0) return 0; base_program = strrchr(program, '/'); if (base_program) base_program++; if (!base_program) base_program = (char *) program; file = (char *) malloc (L + strlen (base_program) + 10); data = (conf_data *) calloc (1, sizeof(*data)); strcpy (file, dir); if (file[L-1] != '/') file[L++] = '/'; strcpy (file+L, base_program); for (s = file+L; *s; s++) if (*s == '/' || *s == ' ') *s = '_'; else if (isupper (*s)) *s = tolower (*s); strcat (file+L, ".xml"); f = fopen (file, "r"); if (f) { int res, size = 1024; char chars[1024]; xmlParserCtxtPtr ctxt; xmlDocPtr doc = 0; GtkWidget *vbox0; GList *parms; if (verbose_p) fprintf (stderr, "%s: reading %s...\n", blurb(), file); res = fread (chars, 1, 4, f); if (res <= 0) { free (data); data = 0; goto DONE; } ctxt = xmlCreatePushParserCtxt(NULL, NULL, chars, res, file); while ((res = fread(chars, 1, size, f)) > 0) xmlParseChunk (ctxt, chars, res, 0); xmlParseChunk (ctxt, chars, 0, 1); doc = ctxt->myDoc; xmlFreeParserCtxt (ctxt); fclose (f); /* Parsed the XML file. Now make some widgets. */ vbox0 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox0); parms = make_parameters (file, doc->xmlRootNode, vbox0); sanity_check_parameters (file, parms); xmlFreeDoc (doc); restore_defaults (program, parms); if (arguments && *arguments) parse_command_line_into_parameters (program, arguments, parms); data->widget = vbox0; data->parameters = parms; data->description = get_description (parms, verbose_p); } else { parameter *p; if (verbose_p) fprintf (stderr, "%s: %s does not exist.\n", blurb(), file); p = calloc (1, sizeof(*p)); p->type = COMMAND; p->arg = (xmlChar *) strdup (arguments); data->parameters = g_list_append (0, (gpointer) p); } data->progname = strdup (program); DONE: free (file); return data; } static void split_command_line (const char *full_command_line, char **prog_ret, char **args_ret) { char *line = strdup (full_command_line); char *prog; char *args; char *s; prog = line; s = line; while (*s) { if (isspace (*s)) { *s = 0; s++; while (isspace (*s)) s++; break; } else if (*s == '=') /* if the leading word contains an "=", skip it. */ { while (*s && !isspace (*s)) s++; while (isspace (*s)) s++; prog = s; } s++; } args = s; *prog_ret = strdup (prog); *args_ret = strdup (args); free (line); } conf_data * load_configurator (const char *full_command_line, gboolean verbose_p) { char *prog; char *args; conf_data *cd; debug_p = verbose_p; split_command_line (full_command_line, &prog, &args); cd = load_configurator_1 (prog, args, verbose_p); free (prog); free (args); return cd; } char * get_configurator_command_line (conf_data *data, gboolean default_p) { char *args = parameters_to_cmd_line (data->parameters, default_p); char *result = (char *) malloc (strlen (data->progname) + strlen (args) + 2); strcpy (result, data->progname); strcat (result, " "); strcat (result, args); free (args); return result; } void set_configurator_command_line (conf_data *data, const char *full_command_line) { char *prog; char *args; split_command_line (full_command_line, &prog, &args); if (data->progname) free (data->progname); data->progname = prog; restore_defaults (prog, data->parameters); parse_command_line_into_parameters (prog, args, data->parameters); free (args); } void free_conf_data (conf_data *data) { if (data->parameters) { GList *rest; for (rest = data->parameters; rest; rest = rest->next) { free_parameter ((parameter *) rest->data); rest->data = 0; } g_list_free (data->parameters); data->parameters = 0; } if (data->widget) gtk_widget_destroy (data->widget); if (data->progname) free (data->progname); if (data->description) free (data->description); memset (data, ~0, sizeof(*data)); free (data); } #endif /* HAVE_GTK && HAVE_XML -- whole file */ xscreensaver-5.34/driver/passwd-pwent.c000644 000767 000767 00000016426 11125400266 017762 0ustar00jwzjwz000000 000000 /* passwd-pwent.c --- verifying typed passwords with the OS. * xscreensaver, Copyright (c) 1993-1998 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifndef NO_LOCKING /* whole file */ #include #ifdef HAVE_UNISTD_H # include #endif #ifdef HAVE_CRYPT_H # include #endif #include #include #include #ifndef VMS # include # include #else /* VMS */ # include "vms-pwd.h" #endif /* VMS */ #ifdef __bsdi__ # include # if _BSDI_VERSION >= 199608 # define BSD_AUTH # endif #endif /* __bsdi__ */ #if defined(HAVE_SHADOW_PASSWD) /* passwds live in /etc/shadow */ # include # define PWTYPE struct spwd * # define PWPSLOT sp_pwdp # define GETPW getspnam #elif defined(HAVE_ENHANCED_PASSWD) /* passwds live in /tcb/files/auth/ */ /* M.Matsumoto */ # include # include # define PWTYPE struct pr_passwd * # define PWPSLOT ufld.fd_encrypt # define GETPW getprpwnam #elif defined(HAVE_ADJUNCT_PASSWD) # include # include # include # define PWTYPE struct passwd_adjunct * # define PWPSLOT pwa_passwd # define GETPW getpwanam #elif defined(HAVE_HPUX_PASSWD) # include # include # define PWTYPE struct s_passwd * # define PWPSLOT pw_passwd # define GETPW getspwnam # define HAVE_BIGCRYPT #endif /* blargh */ #undef Bool #undef True #undef False #define Bool int #define True 1 #define False 0 extern const char *blurb(void); static char *encrypted_root_passwd = 0; static char *encrypted_user_passwd = 0; #ifdef VMS # define ROOT "SYSTEM" #else # define ROOT "root" #endif #ifndef VMS Bool pwent_priv_init (int argc, char **argv, Bool verbose_p); Bool pwent_lock_init (int argc, char **argv, Bool verbose_p); Bool pwent_passwd_valid_p (const char *typed_passwd, Bool verbose_p); #endif #ifndef VMS static char * user_name (void) { /* I think that just checking $USER here is not the best idea. */ const char *u = 0; /* It has been reported that getlogin() returns the wrong user id on some very old SGI systems... And I've seen it return the string "rlogin" sometimes! Screw it, using getpwuid() should be enough... */ /* u = (char *) getlogin (); */ /* getlogin() fails if not attached to a terminal; in that case, use getpwuid(). (Note that in this case, we're not doing shadow stuff, since all we're interested in is the name, not the password. So that should still work. Right?) */ if (!u || !*u) { struct passwd *p = getpwuid (getuid ()); u = (p ? p->pw_name : 0); } return (u ? strdup(u) : 0); } #else /* VMS */ static char * user_name (void) { char *u = getenv("USER"); return (u ? strdup(u) : 0); } #endif /* VMS */ static Bool passwd_known_p (const char *pw) { return (pw && pw[0] != '*' && /* This would be sensible... */ strlen(pw) > 4); /* ...but this is what Solaris does. */ } static char * get_encrypted_passwd(const char *user) { char *result = 0; #ifdef PWTYPE if (user && *user && !result) { /* First check the shadow passwords. */ PWTYPE p = GETPW((char *) user); if (p && passwd_known_p (p->PWPSLOT)) result = strdup(p->PWPSLOT); } #endif /* PWTYPE */ if (user && *user && !result) { /* Check non-shadow passwords too. */ struct passwd *p = getpwnam(user); if (p && passwd_known_p (p->pw_passwd)) result = strdup(p->pw_passwd); } /* The manual for passwd(4) on HPUX 10.10 says: Password aging is put in effect for a particular user if his encrypted password in the password file is followed by a comma and a nonnull string of characters from the above alphabet. This string defines the "age" needed to implement password aging. So this means that passwd->pw_passwd isn't simply a string of cyphertext, it might have trailing junk. So, if there is a comma in the string, and that comma is beyond position 13, terminate the string before the comma. */ if (result && strlen(result) > 13) { char *s = strchr (result+13, ','); if (s) *s = 0; } #ifndef HAVE_PAM /* We only issue this warning if not compiled with support for PAM. If we're using PAM, it's not unheard of that normal pwent passwords would be unavailable. */ if (!result) fprintf (stderr, "%s: couldn't get password of \"%s\"\n", blurb(), (user ? user : "(null)")); #endif /* !HAVE_PAM */ return result; } /* This has to be called before we've changed our effective user ID, because it might need privileges to get at the encrypted passwords. Returns false if we weren't able to get any passwords, and therefore, locking isn't possible. (It will also have written to stderr.) */ #ifndef VMS Bool pwent_priv_init (int argc, char **argv, Bool verbose_p) { char *u; #ifdef HAVE_ENHANCED_PASSWD set_auth_parameters(argc, argv); check_auth_parameters(); #endif /* HAVE_DEC_ENHANCED */ u = user_name(); encrypted_user_passwd = get_encrypted_passwd(u); encrypted_root_passwd = get_encrypted_passwd(ROOT); if (u) free (u); if (encrypted_user_passwd) return True; else return False; } Bool pwent_lock_init (int argc, char **argv, Bool verbose_p) { if (encrypted_user_passwd) return True; else return False; } static Bool passwds_match_p (const char *cleartext, const char *ciphertext) { char *s = 0; /* note that on some systems, crypt() may return null */ s = (char *) crypt (cleartext, ciphertext); if (s && !strcmp (s, ciphertext)) return True; #ifdef HAVE_BIGCRYPT /* There seems to be no way to tell at runtime if an HP machine is in "trusted" mode, and thereby, which of crypt() or bigcrypt() we should be calling to compare passwords. So call them both, and see which one works. */ s = (char *) bigcrypt (cleartext, ciphertext); if (s && !strcmp (s, ciphertext)) return True; #endif /* HAVE_BIGCRYPT */ return False; } /* This can be called at any time, and says whether the typed password belongs to either the logged in user (real uid, not effective); or to root. */ Bool pwent_passwd_valid_p (const char *typed_passwd, Bool verbose_p) { if (encrypted_user_passwd && passwds_match_p (typed_passwd, encrypted_user_passwd)) return True; #ifdef ALLOW_ROOT_PASSWD /* do not allow root to have a null password. */ else if (typed_passwd[0] && encrypted_root_passwd && passwds_match_p (typed_passwd, encrypted_root_passwd)) return True; #endif /* ALLOW_ROOT_PASSWD */ else return False; } #else /* VMS */ Bool pwent_lock_init (int argc, char **argv, Bool verbose_p) { return True; } #endif /* VMS */ #endif /* NO_LOCKING -- whole file */ xscreensaver-5.34/driver/passwd-helper.c000644 000767 000767 00000010274 10576201212 020076 0ustar00jwzjwz000000 000000 /* passwd-helper.c --- verifying typed passwords with external helper program * written by Olaf Kirch * xscreensaver, Copyright (c) 1993-2005 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ /* The idea here is to be able to run xscreensaver without any setuid bits. * Password verification happens through an external program that you feed * your password to on stdin. The external command is invoked with a user * name argument. * * The external helper does whatever authentication is necessary. Currently, * SuSE uses "unix2_chkpwd", which is a variation of "unix_chkpwd" from the * PAM distribution. * * Normally, the password helper should just authenticate the calling user * (i.e. based on the caller's real uid). This is in order to prevent * brute-forcing passwords in a shadow environment. A less restrictive * approach would be to allow verifying other passwords as well, but always * with a 2 second delay or so. (Not sure what SuSE's "unix2_chkpwd" * currently does.) * -- Olaf Kirch , 16-Dec-2003 */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifndef NO_LOCKING /* whole file */ #include /* not used for much... */ /* This file doesn't need the Xt headers, so stub these types out... */ #undef XtPointer #define XtAppContext void* #define XrmDatabase void* #define XtIntervalId void* #define XtPointer void* #define Widget void* #include "xscreensaver.h" #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include #include #include #include static int ext_run (const char *user, const char *typed_passwd, int verbose_p) { int pfd[2], status; pid_t pid; if (pipe(pfd) < 0) return 0; if (verbose_p) fprintf (stderr, "%s: ext_run (%s, %s)\n", blurb(), PASSWD_HELPER_PROGRAM, user); block_sigchld(); if ((pid = fork()) < 0) { close(pfd[0]); close(pfd[1]); return 0; } if (pid == 0) { close(pfd[1]); if (pfd[0] != 0) dup2(pfd[0], 0); /* Helper is invoked as helper service-name [user] */ execlp(PASSWD_HELPER_PROGRAM, PASSWD_HELPER_PROGRAM, "xscreensaver", user, NULL); if (verbose_p) fprintf(stderr, "%s: %s\n", PASSWD_HELPER_PROGRAM, strerror(errno)); exit(1); } close(pfd[0]); /* Write out password to helper process */ if (!typed_passwd) typed_passwd = ""; write(pfd[1], typed_passwd, strlen(typed_passwd)); close(pfd[1]); while (waitpid(pid, &status, 0) < 0) { if (errno == EINTR) continue; if (verbose_p) fprintf(stderr, "%s: ext_run: waitpid failed: %s\n", blurb(), strerror(errno)); unblock_sigchld(); return 0; } unblock_sigchld(); if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) return 0; return 1; } /* This can be called at any time, and says whether the typed password belongs to either the logged in user (real uid, not effective); or to root. */ int ext_passwd_valid_p (const char *typed_passwd, int verbose_p) { struct passwd *pw; int res = 0; if ((pw = getpwuid(getuid())) != NULL) res = ext_run (pw->pw_name, typed_passwd, verbose_p); endpwent(); #ifdef ALLOW_ROOT_PASSWD if (!res) res = ext_run ("root", typed_passwd, verbose_p); #endif /* ALLOW_ROOT_PASSWD */ return res; } int ext_priv_init (int argc, char **argv, int verbose_p) { /* Make sure the passwd helper exists */ if (access(PASSWD_HELPER_PROGRAM, X_OK) < 0) { fprintf(stderr, "%s: warning: %s does not exist.\n" "%s: password authentication via " "external helper will not work.\n", blurb(), PASSWD_HELPER_PROGRAM, blurb()); return 0; } return 1; } #endif /* NO_LOCKING -- whole file */ xscreensaver-5.34/driver/passwd-kerberos.c000644 000767 000767 00000016441 11032511554 020436 0ustar00jwzjwz000000 000000 /* kpasswd.c --- verify kerberos passwords. * written by Nat Lanza (magus@cs.cmu.edu) for * xscreensaver, Copyright (c) 1993-2004 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifndef NO_LOCKING /* whole file */ #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include #include /* I'm not sure if this is exactly the right test... Might __APPLE__ be defined if this is apple hardware, but not an Apple OS? Thanks to Alexei Kosut for the MacOS X code. */ #ifdef __APPLE__ # define HAVE_DARWIN #endif #if defined(HAVE_DARWIN) # include #elif defined(HAVE_KERBEROS5) # include # include #else /* !HAVE_KERBEROS5 (meaning Kerberos 4) */ # include # include #endif /* !HAVE_KERBEROS5 */ #if !defined(VMS) && !defined(HAVE_ADJUNCT_PASSWD) # include #endif #ifdef __bsdi__ # include # if _BSDI_VERSION >= 199608 # define BSD_AUTH # endif #endif /* __bsdi__ */ /* blargh */ #undef Bool #undef True #undef False #define Bool int #define True 1 #define False 0 /* The user information we need to store */ #ifdef HAVE_DARWIN static KLPrincipal princ; #else /* !HAVE_DARWIN */ static char realm[REALM_SZ]; static char name[ANAME_SZ]; static char inst[INST_SZ]; static const char *tk_file; #endif /* !HAVE_DARWIN */ /* warning suppression: duplicated in passwd.c */ extern Bool kerberos_lock_init (int argc, char **argv, Bool verbose_p); extern Bool kerberos_passwd_valid_p (const char *typed_passwd, Bool verbose_p); /* Called at startup to grab user, instance, and realm information from the user's ticketfile (remember, name.inst@realm). Since we're using tf_get_pname(), this should work even if your kerberos username isn't the same as your local username. We grab the ticket at startup time so that even if your ticketfile dies while the screen's locked we'll still have the information to unlock it. Problems: the password dialog currently displays local username, so if you have some non-standard name/instance when you run xscreensaver, you'll need to remember what it was when unlocking, or else you lose. Also, we use des_string_to_key(), so if you have an AFS password (encrypted with ka_StringToKey()), you'll lose. Get a kerberos password; it isn't that hard. Like the original lock_init, we return false if something went wrong. We don't use the arguments we're given, though. */ Bool kerberos_lock_init (int argc, char **argv, Bool verbose_p) { # ifdef HAVE_DARWIN KLBoolean found; return ((klNoErr == (KLCacheHasValidTickets (NULL, kerberosVersion_Any, &found, &princ, NULL))) && found); # else /* !HAVE_DARWIN */ /* Perhaps we should be doing it the Mac way (above) all the time? The following code assumes Unix-style file-based Kerberos credentials cache, which Mac OS X doesn't use. But is there any real reason to do it this way at all, even on other Unixen? */ int k_errno; memset(name, 0, sizeof(name)); memset(inst, 0, sizeof(inst)); /* find out where the user's keeping his tickets. squirrel it away for later use. */ tk_file = tkt_string(); /* open ticket file or die trying. */ if ((k_errno = tf_init(tk_file, R_TKT_FIL))) { return False; } /* same with principal and instance names */ if ((k_errno = tf_get_pname(name)) || (k_errno = tf_get_pinst(inst))) { return False; } /* close the ticketfile to release the lock on it. */ tf_close(); /* figure out what realm we're authenticated to. this ought to be the local realm, but it pays to be sure. */ if ((k_errno = krb_get_tf_realm(tk_file, realm))) { return False; } /* last-minute sanity check on what we got. */ if ((strlen(name)+strlen(inst)+strlen(realm)+3) > (REALM_SZ + ANAME_SZ + INST_SZ + 3)) { return False; } /* success */ return True; # endif /* !HAVE_DARWIN */ } /* des_string_to_key() wants this. If C didn't suck, we could have an anonymous function do this. Even a local one. But it does, so here we are. Calling it ive_got_your_local_function_right_here_buddy() would have been rude. */ #ifndef HAVE_DARWIN static int key_to_key(char *user, char *instance, char *realm, char *passwd, C_Block key) { memcpy(key, passwd, sizeof(des_cblock)); return (0); } #endif /* !HAVE_DARWIN */ /* Called to see if the user's typed password is valid. We do this by asking the kerberos server for a ticket and checking to see if it gave us one. We need to move the ticketfile first, or otherwise we end up updating the user's tkfile with new tickets. This would break services like zephyr that like to stay authenticated, and it would screw with AFS authentication at some sites. So, we do a quick, painful hack with a tmpfile. */ Bool kerberos_passwd_valid_p (const char *typed_passwd, Bool verbose_p) { # ifdef HAVE_DARWIN return (klNoErr == KLAcquireNewInitialTicketsWithPassword (princ, NULL, typed_passwd, NULL)); # else /* !HAVE_DARWIN */ /* See comments in kerberos_lock_init -- should we do it the Mac Way on all systems? */ C_Block mitkey; Bool success; char *newtkfile; int fh = -1; /* temporarily switch to a new ticketfile. I'm not using tmpnam() because it isn't entirely portable. this could probably be fixed with autoconf. */ newtkfile = malloc(80 * sizeof(char)); memset(newtkfile, 0, sizeof(newtkfile)); sprintf(newtkfile, "/tmp/xscrn-%i.XXXXXX", getpid()); if( (fh = mkstemp(newtkfile)) < 0) { free(newtkfile); return(False); } if( fchmod(fh, 0600) < 0) { free(newtkfile); return(False); } krb_set_tkt_string(newtkfile); /* encrypt the typed password. if you have an AFS password instead of a kerberos one, you lose *right here*. If you want to use AFS passwords, you can use ka_StringToKey() instead. As always, ymmv. */ des_string_to_key(typed_passwd, mitkey); if (krb_get_in_tkt(name, inst, realm, "krbtgt", realm, DEFAULT_TKT_LIFE, key_to_key, NULL, (char *) mitkey) != 0) { success = False; } else { success = True; } /* quickly block out the tempfile and password to prevent snooping, then restore the old ticketfile and cleean up a bit. */ dest_tkt(); krb_set_tkt_string(tk_file); free(newtkfile); memset(mitkey, 0, sizeof(mitkey)); close(fh); /* #### tom: should the file be removed? */ /* Did we verify successfully? */ return success; # endif /* !HAVE_DARWIN */ } #endif /* NO_LOCKING -- whole file */ xscreensaver-5.34/driver/passwd-pam.c000644 000767 000767 00000042102 11767550237 017410 0ustar00jwzjwz000000 000000 /* passwd-pam.c --- verifying typed passwords with PAM * (Pluggable Authentication Modules.) * written by Bill Nottingham (and jwz) for * xscreensaver, Copyright (c) 1993-2012 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. * * Some PAM resources: * * PAM home page: * http://www.us.kernel.org/pub/linux/libs/pam/ * * PAM FAQ: * http://www.us.kernel.org/pub/linux/libs/pam/FAQ * * PAM Application Developers' Guide: * http://www.us.kernel.org/pub/linux/libs/pam/Linux-PAM-html/Linux-PAM_ADG.html * * PAM Mailing list archives: * http://www.linuxhq.com/lnxlists/linux-pam/ * * Compatibility notes, especially between Linux and Solaris: * http://www.contrib.andrew.cmu.edu/u/shadow/pam.html * * The Open Group's PAM API documentation: * http://www.opengroup.org/onlinepubs/8329799/pam_start.htm */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifndef NO_LOCKING /* whole file */ #include #ifdef HAVE_UNISTD_H # include #endif extern char *blurb(void); #include #include #include #include #include #include #include #include #include #include #include "auth.h" extern sigset_t block_sigchld (void); extern void unblock_sigchld (void); /* blargh */ #undef Bool #undef True #undef False #define Bool int #define True 1 #define False 0 #undef countof #define countof(x) (sizeof((x))/sizeof(*(x))) /* Some time between Red Hat 4.2 and 7.0, the words were transposed in the various PAM_x_CRED macro names. Yay! */ #ifndef PAM_REFRESH_CRED # define PAM_REFRESH_CRED PAM_CRED_REFRESH #endif static int pam_conversation (int nmsgs, const struct pam_message **msg, struct pam_response **resp, void *closure); void pam_try_unlock(saver_info *si, Bool verbose_p, Bool (*valid_p)(const char *typed_passwd, Bool verbose_p)); Bool pam_priv_init (int argc, char **argv, Bool verbose_p); #ifdef HAVE_PAM_FAIL_DELAY /* We handle delays ourself.*/ /* Don't set this to 0 (Linux bug workaround.) */ # define PAM_NO_DELAY(pamh) pam_fail_delay ((pamh), 1) #else /* !HAVE_PAM_FAIL_DELAY */ # define PAM_NO_DELAY(pamh) /* */ #endif /* !HAVE_PAM_FAIL_DELAY */ /* On SunOS 5.6, and on Linux with PAM 0.64, pam_strerror() takes two args. On some other Linux systems with some other version of PAM (e.g., whichever Debian release comes with a 2.2.5 kernel) it takes one arg. I can't tell which is more "recent" or "correct" behavior, so configure figures out which is in use for us. Shoot me! */ #ifdef PAM_STRERROR_TWO_ARGS # define PAM_STRERROR(pamh, status) pam_strerror((pamh), (status)) #else /* !PAM_STRERROR_TWO_ARGS */ # define PAM_STRERROR(pamh, status) pam_strerror((status)) #endif /* !PAM_STRERROR_TWO_ARGS */ /* PAM sucks in that there is no way to tell whether a particular service is configured at all. That is, there is no way to tell the difference between "authentication of the FOO service is not allowed" and "the user typed the wrong password." On RedHat 5.1 systems, if a service name is not known, it defaults to being not allowed (because the fallback service, /etc/pam.d/other, is set to `pam_deny'.) On Solaris 2.6 systems, unknown services default to authenticating normally. So, we could simply require that the person who installs xscreensaver set up an "xscreensaver" PAM service. However, if we went that route, it would have a really awful failure mode: the failure mode would be that xscreensaver was willing to *lock* the screen, but would be unwilling to *unlock* the screen. (With the non-PAM password code, the analagous situation -- security not being configured properly, for example do to the executable not being installed as setuid root -- the failure mode is much more palettable, in that xscreensaver will refuse to *lock* the screen, because it can know up front that there is no password that will work.) Another route would be to have the service name to consult be computed at compile-time (perhaps with a configure option.) However, that doesn't really solve the problem, because it means that the same executable might work fine on one machine, but refuse to unlock when run on another machine. Another alternative would be to look in /etc/pam.conf or /etc/pam.d/ at runtime to see what services actually exist. But I think that's no good, because who is to say that the PAM info is actually specified in those files? Opening and reading those files is not a part of the PAM client API, so it's not guarenteed to work on any given system. An alternative I tried was to specify a list of services to try, and to try them all in turn ("xscreensaver", "xlock", "xdm", and "login"). This worked, but it was slow (and I also had to do some contortions to work around bugs in Linux PAM 0.64-3.) So what we do today is, try PAM once, and if that fails, try the usual getpwent() method. So if PAM doesn't work, it will at least make an attempt at looking up passwords in /etc/passwd or /etc/shadow instead. This all kind of blows. I'm not sure what else to do. */ /* On SunOS 5.6, the `pam_conv.appdata_ptr' slot seems to be ignored, and the `closure' argument to pc.conv always comes in as random garbage. So we get around this by using a global variable instead. Shoot me! (I've been told this is bug 4092227, and is fixed in Solaris 7.) (I've also been told that it's fixed in Solaris 2.6 by patch 106257-05.) */ static void *suns_pam_implementation_blows = 0; /** * This function is the PAM conversation driver. It conducts a full * authentication round by invoking the GUI with various prompts. */ void pam_try_unlock(saver_info *si, Bool verbose_p, Bool (*valid_p)(const char *typed_passwd, Bool verbose_p)) { const char *service = PAM_SERVICE_NAME; pam_handle_t *pamh = 0; int status = -1; struct pam_conv pc; sigset_t set; struct timespec timeout; pc.conv = &pam_conversation; pc.appdata_ptr = (void *) si; /* On SunOS 5.6, the `appdata_ptr' slot seems to be ignored, and the `closure' argument to pc.conv always comes in as random garbage. */ suns_pam_implementation_blows = (void *) si; /* Initialize PAM. */ status = pam_start (service, si->user, &pc, &pamh); if (verbose_p) fprintf (stderr, "%s: pam_start (\"%s\", \"%s\", ...) ==> %d (%s)\n", blurb(), service, si->user, status, PAM_STRERROR (pamh, status)); if (status != PAM_SUCCESS) goto DONE; /* #### We should set PAM_TTY to the display we're using, but we don't have that handy from here. So set it to :0.0, which is a good guess (and has the bonus of counting as a "secure tty" as far as PAM is concerned...) */ { char *tty = strdup (":0.0"); status = pam_set_item (pamh, PAM_TTY, tty); if (verbose_p) fprintf (stderr, "%s: pam_set_item (p, PAM_TTY, \"%s\") ==> %d (%s)\n", blurb(), tty, status, PAM_STRERROR(pamh, status)); free (tty); } /* Try to authenticate as the current user. We must turn off our SIGCHLD handler for the duration of the call to pam_authenticate(), because in some cases, the underlying PAM code will do this: 1: fork a setuid subprocess to do some dirty work; 2: read a response from that subprocess; 3: waitpid(pid, ...) on that subprocess. If we (the ignorant parent process) have a SIGCHLD handler, then there's a race condition between steps 2 and 3: if the subprocess exits before waitpid() was called, then our SIGCHLD handler fires, and gets notified of the subprocess death; then PAM's call to waitpid() fails, because the process has already been reaped. I consider this a bug in PAM, since the caller should be able to have whatever signal handlers it wants -- the PAM documentation doesn't say "oh by the way, if you use PAM, you can't use SIGCHLD." */ PAM_NO_DELAY(pamh); if (verbose_p) fprintf (stderr, "%s: pam_authenticate (...) ...\n", blurb()); timeout.tv_sec = 0; timeout.tv_nsec = 1; set = block_sigchld(); status = pam_authenticate (pamh, 0); # ifdef HAVE_SIGTIMEDWAIT sigtimedwait (&set, NULL, &timeout); /* #### What is the portable thing to do if we don't have it? */ # endif /* HAVE_SIGTIMEDWAIT */ unblock_sigchld(); if (verbose_p) fprintf (stderr, "%s: pam_authenticate (...) ==> %d (%s)\n", blurb(), status, PAM_STRERROR(pamh, status)); if (status == PAM_SUCCESS) /* Win! */ { int status2; /* On most systems, it doesn't matter whether the account modules are run, or whether they fail or succeed. On some systems, the account modules fail, because they were never configured properly, but it's necessary to run them anyway because certain PAM modules depend on side effects of the account modules having been run. And on still other systems, the account modules are actually used, and failures in them should be considered to be true! So: - We run the account modules on all systems. - Whether we ignore them is a configure option. It's all kind of a mess. */ status2 = pam_acct_mgmt (pamh, 0); if (verbose_p) fprintf (stderr, "%s: pam_acct_mgmt (...) ==> %d (%s)\n", blurb(), status2, PAM_STRERROR(pamh, status2)); /* HPUX for some reason likes to make PAM defines different from * everyone else's. */ #ifdef PAM_AUTHTOKEN_REQD if (status2 == PAM_AUTHTOKEN_REQD) #else if (status2 == PAM_NEW_AUTHTOK_REQD) #endif { status2 = pam_chauthtok (pamh, PAM_CHANGE_EXPIRED_AUTHTOK); if (verbose_p) fprintf (stderr, "%s: pam_chauthtok (...) ==> %d (%s)\n", blurb(), status2, PAM_STRERROR(pamh, status2)); } /* If 'configure' requested that we believe the results of PAM account module failures, then obey that status code. Otherwise ignore it. */ #ifdef PAM_CHECK_ACCOUNT_TYPE status = status2; #endif /* Each time we successfully authenticate, refresh credentials, for Kerberos/AFS/DCE/etc. If this fails, just ignore that failure and blunder along; it shouldn't matter. Note: this used to be PAM_REFRESH_CRED instead of PAM_REINITIALIZE_CRED, but Jason Heiss says that the Linux PAM library ignores that one, and only refreshes credentials when using PAM_REINITIALIZE_CRED. */ status2 = pam_setcred (pamh, PAM_REINITIALIZE_CRED); if (verbose_p) fprintf (stderr, "%s: pam_setcred (...) ==> %d (%s)\n", blurb(), status2, PAM_STRERROR(pamh, status2)); } DONE: if (pamh) { int status2 = pam_end (pamh, status); pamh = 0; if (verbose_p) fprintf (stderr, "%s: pam_end (...) ==> %d (%s)\n", blurb(), status2, (status2 == PAM_SUCCESS ? "Success" : "Failure")); } if (status == PAM_SUCCESS) si->unlock_state = ul_success; /* yay */ else if (si->unlock_state == ul_cancel || si->unlock_state == ul_time) ; /* more specific failures ok */ else si->unlock_state = ul_fail; /* generic failure */ } Bool pam_priv_init (int argc, char **argv, Bool verbose_p) { /* We have nothing to do at init-time. However, we might as well do some error checking. If "/etc/pam.d" exists and is a directory, but "/etc/pam.d/xlock" does not exist, warn that PAM probably isn't going to work. This is a priv-init instead of a non-priv init in case the directory is unreadable or something (don't know if that actually happens.) */ const char dir[] = "/etc/pam.d"; const char file[] = "/etc/pam.d/" PAM_SERVICE_NAME; const char file2[] = "/etc/pam.conf"; struct stat st; # ifndef S_ISDIR # define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) # endif if (stat (dir, &st) == 0 && S_ISDIR(st.st_mode)) { if (stat (file, &st) != 0) fprintf (stderr, "%s: warning: %s does not exist.\n" "%s: password authentication via PAM is unlikely to work.\n", blurb(), file, blurb()); } else if (stat (file2, &st) == 0) { FILE *f = fopen (file2, "r"); if (f) { Bool ok = False; char buf[255]; while (fgets (buf, sizeof(buf), f)) if (strstr (buf, PAM_SERVICE_NAME)) { ok = True; break; } fclose (f); if (!ok) { fprintf (stderr, "%s: warning: %s does not list the `%s' service.\n" "%s: password authentication via PAM is unlikely to work.\n", blurb(), file2, PAM_SERVICE_NAME, blurb()); } } /* else warn about file2 existing but being unreadable? */ } else { fprintf (stderr, "%s: warning: neither %s nor %s exist.\n" "%s: password authentication via PAM is unlikely to work.\n", blurb(), file2, file, blurb()); } /* Return true anyway, just in case. */ return True; } static int pam_conversation (int nmsgs, const struct pam_message **msg, struct pam_response **resp, void *vsaver_info) { int i, ret = -1; struct auth_message *messages = 0; struct auth_response *authresp = 0; struct pam_response *pam_responses; saver_info *si = (saver_info *) vsaver_info; Bool verbose_p; /* On SunOS 5.6, the `closure' argument always comes in as random garbage. */ si = (saver_info *) suns_pam_implementation_blows; verbose_p = si->prefs.verbose_p; /* Converting the PAM prompts into the XScreenSaver native format. * It was a design goal to collapse (INFO,PROMPT) pairs from PAM * into a single call to the unlock_cb function. The unlock_cb function * does that, but only if it is passed several prompts at a time. Most PAM * modules only send a single prompt at a time, but because there is no way * of telling whether there will be more prompts to follow, we can only ever * pass along whatever was passed in here. */ messages = calloc(nmsgs, sizeof(struct auth_message)); pam_responses = calloc(nmsgs, sizeof(*pam_responses)); if (!pam_responses || !messages) goto end; if (verbose_p) fprintf (stderr, "%s: pam_conversation (", blurb()); for (i = 0; i < nmsgs; ++i) { if (verbose_p && i > 0) fprintf (stderr, ", "); messages[i].msg = msg[i]->msg; switch (msg[i]->msg_style) { case PAM_PROMPT_ECHO_OFF: messages[i].type = AUTH_MSGTYPE_PROMPT_NOECHO; if (verbose_p) fprintf (stderr, "ECHO_OFF"); break; case PAM_PROMPT_ECHO_ON: messages[i].type = AUTH_MSGTYPE_PROMPT_ECHO; if (verbose_p) fprintf (stderr, "ECHO_ON"); break; case PAM_ERROR_MSG: messages[i].type = AUTH_MSGTYPE_ERROR; if (verbose_p) fprintf (stderr, "ERROR_MSG"); break; case PAM_TEXT_INFO: messages[i].type = AUTH_MSGTYPE_INFO; if (verbose_p) fprintf (stderr, "TEXT_INFO"); break; default: messages[i].type = AUTH_MSGTYPE_PROMPT_ECHO; if (verbose_p) fprintf (stderr, "PROMPT_ECHO"); break; } if (verbose_p) fprintf (stderr, "=\"%s\"", msg[i]->msg ? msg[i]->msg : "(null)"); } if (verbose_p) fprintf (stderr, ") ...\n"); ret = si->unlock_cb(nmsgs, messages, &authresp, si); /* #### If the user times out, or hits ESC or Cancel, we return PAM_CONV_ERR, and PAM logs this as an authentication failure. It would be nice if there was some way to indicate that this was a "cancel" rather than a "fail", so that it wouldn't show up in syslog, but I think the only options are PAM_SUCCESS and PAM_CONV_ERR. (I think that PAM_ABORT means "internal error", not "cancel".) Bleh. */ if (ret == 0) { for (i = 0; i < nmsgs; ++i) pam_responses[i].resp = authresp[i].response; } end: if (messages) free(messages); if (authresp) free(authresp); if (verbose_p) fprintf (stderr, "%s: pam_conversation (...) ==> %s\n", blurb(), (ret == 0 ? "PAM_SUCCESS" : "PAM_CONV_ERR")); if (ret == 0) { *resp = pam_responses; return PAM_SUCCESS; } /* Failure only */ if (pam_responses) free(pam_responses); return PAM_CONV_ERR; } #endif /* NO_LOCKING -- whole file */ xscreensaver-5.34/driver/lock.c000664 000767 000767 00000205653 12370073752 016273 0ustar00jwzjwz000000 000000 /* lock.c --- handling the password dialog for locking-mode. * xscreensaver, Copyright (c) 1993-2014 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ /* Athena locking code contributed by Jon A. Christopher */ /* Copyright 1997, with the same permissions as above. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include /* for time() */ #include #include #include "xscreensaver.h" #include "resources.h" #include "mlstring.h" #include "auth.h" #ifndef NO_LOCKING /* (mostly) whole file */ #ifdef HAVE_XHPDISABLERESET # include static void hp_lock_reset (saver_info *si, Bool lock_p); #endif /* HAVE_XHPDISABLERESET */ #ifdef HAVE_XF86VMODE # include static void xfree_lock_mode_switch (saver_info *si, Bool lock_p); #endif /* HAVE_XF86VMODE */ #ifdef HAVE_XF86MISCSETGRABKEYSSTATE # include static void xfree_lock_grab_smasher (saver_info *si, Bool lock_p); #endif /* HAVE_XF86MISCSETGRABKEYSSTATE */ #ifdef HAVE_RANDR # include #endif /* HAVE_RANDR */ #ifdef _VROOT_H_ ERROR! You must not include vroot.h in this file. #endif #ifdef HAVE_UNAME # include /* for hostname info */ #endif /* HAVE_UNAME */ #include #ifndef VMS # include #else /* VMS */ extern char *getenv(const char *name); extern int validate_user(char *name, char *password); static Bool vms_passwd_valid_p(char *pw, Bool verbose_p) { return (validate_user (getenv("USER"), typed_passwd) == 1); } # undef passwd_valid_p # define passwd_valid_p vms_passwd_valid_p #endif /* VMS */ #define SAMPLE_INPUT "MMMMMMMMMMMM" #undef MAX #define MAX(a,b) ((a)>(b)?(a):(b)) typedef struct info_dialog_data info_dialog_data; #define MAX_BYTES_PER_CHAR 8 /* UTF-8 uses no more than 3, I think */ #define MAX_PASSWD_CHARS 128 /* Longest possible passphrase */ struct passwd_dialog_data { saver_screen_info *prompt_screen; int previous_mouse_x, previous_mouse_y; /* "Characters" in the password may be a variable number of bytes long. typed_passwd contains the raw bytes. typed_passwd_char_size indicates the size in bytes of each character, so that we can make backspace work. */ char typed_passwd [MAX_PASSWD_CHARS * MAX_BYTES_PER_CHAR]; char typed_passwd_char_size [MAX_PASSWD_CHARS]; XtIntervalId timer; int i_beam; float ratio; Position x, y; Dimension width; Dimension height; Dimension border_width; Bool echo_input; Bool show_stars_p; /* "I regret that I have but one asterisk for my country." -- Nathan Hale, 1776. */ char *heading_label; char *body_label; char *user_label; mlstring *info_label; /* The entry field shall only be displayed if prompt_label is not NULL */ mlstring *prompt_label; char *date_label; char *passwd_string; Bool passwd_changed_p; /* Whether the user entry field needs redrawing */ Bool caps_p; /* Whether we saw a keypress with caps-lock on */ char *unlock_label; char *login_label; char *uname_label; Bool show_uname_p; XFontStruct *heading_font; XFontStruct *body_font; XFontStruct *label_font; XFontStruct *passwd_font; XFontStruct *date_font; XFontStruct *button_font; XFontStruct *uname_font; Pixel foreground; Pixel background; Pixel border; Pixel passwd_foreground; Pixel passwd_background; Pixel thermo_foreground; Pixel thermo_background; Pixel shadow_top; Pixel shadow_bottom; Pixel button_foreground; Pixel button_background; Dimension preferred_logo_width, logo_width; Dimension preferred_logo_height, logo_height; Dimension thermo_width; Dimension internal_border; Dimension shadow_width; Dimension passwd_field_x, passwd_field_y; Dimension passwd_field_width, passwd_field_height; Dimension unlock_button_x, unlock_button_y; Dimension unlock_button_width, unlock_button_height; Dimension login_button_x, login_button_y; Dimension login_button_width, login_button_height; Dimension thermo_field_x, thermo_field_y; Dimension thermo_field_height; Pixmap logo_pixmap; Pixmap logo_clipmask; int logo_npixels; unsigned long *logo_pixels; Cursor passwd_cursor; Bool unlock_button_down_p; Bool login_button_down_p; Bool login_button_p; Bool login_button_enabled_p; Bool button_state_changed_p; /* Refers to both buttons */ Pixmap save_under; Pixmap user_entry_pixmap; }; static void draw_passwd_window (saver_info *si); static void update_passwd_window (saver_info *si, const char *printed_passwd, float ratio); static void destroy_passwd_window (saver_info *si); static void undo_vp_motion (saver_info *si); static void finished_typing_passwd (saver_info *si, passwd_dialog_data *pw); static void cleanup_passwd_window (saver_info *si); static void restore_background (saver_info *si); extern void xss_authenticate(saver_info *si, Bool verbose_p); static int new_passwd_window (saver_info *si) { passwd_dialog_data *pw; Screen *screen; Colormap cmap; char *f; saver_screen_info *ssi = &si->screens [mouse_screen (si)]; pw = (passwd_dialog_data *) calloc (1, sizeof(*pw)); if (!pw) return -1; /* Display the button only if the "newLoginCommand" pref is non-null. */ pw->login_button_p = (si->prefs.new_login_command && *si->prefs.new_login_command); pw->passwd_cursor = XCreateFontCursor (si->dpy, XC_top_left_arrow); pw->prompt_screen = ssi; screen = pw->prompt_screen->screen; cmap = DefaultColormapOfScreen (screen); pw->show_stars_p = get_boolean_resource(si->dpy, "passwd.asterisks", "Boolean"); pw->heading_label = get_string_resource (si->dpy, "passwd.heading.label", "Dialog.Label.Label"); pw->body_label = get_string_resource (si->dpy, "passwd.body.label", "Dialog.Label.Label"); pw->user_label = get_string_resource (si->dpy, "passwd.user.label", "Dialog.Label.Label"); pw->unlock_label = get_string_resource (si->dpy, "passwd.unlock.label", "Dialog.Button.Label"); pw->login_label = get_string_resource (si->dpy, "passwd.login.label", "Dialog.Button.Label"); pw->date_label = get_string_resource (si->dpy, "dateFormat", "DateFormat"); if (!pw->heading_label) pw->heading_label = strdup("ERROR: RESOURCES NOT INSTALLED CORRECTLY"); if (!pw->body_label) pw->body_label = strdup("ERROR: RESOURCES NOT INSTALLED CORRECTLY"); if (!pw->user_label) pw->user_label = strdup("ERROR"); if (!pw->date_label) pw->date_label = strdup("ERROR"); if (!pw->unlock_label) pw->unlock_label = strdup("ERROR (UNLOCK)"); if (!pw->login_label) pw->login_label = strdup ("ERROR (LOGIN)") ; /* Put the version number in the label. */ { char *s = (char *) malloc (strlen(pw->heading_label) + 20); sprintf(s, pw->heading_label, si->version); free (pw->heading_label); pw->heading_label = s; } /* Get hostname info */ pw->uname_label = strdup(""); /* Initialy, write nothing */ # ifdef HAVE_UNAME { struct utsname uts; if (uname (&uts) == 0) { #if 0 /* Get the full hostname */ { char *s; if ((s = strchr(uts.nodename, '.'))) *s = 0; } #endif char *s = strdup (uts.nodename); free (pw->uname_label); pw->uname_label = s; } } # endif pw->passwd_string = strdup(""); f = get_string_resource (si->dpy, "passwd.headingFont", "Dialog.Font"); pw->heading_font = XLoadQueryFont (si->dpy, (f ? f : "fixed")); if (!pw->heading_font) pw->heading_font = XLoadQueryFont (si->dpy, "fixed"); if (f) free (f); f = get_string_resource (si->dpy, "passwd.buttonFont", "Dialog.Font"); pw->button_font = XLoadQueryFont (si->dpy, (f ? f : "fixed")); if (!pw->button_font) pw->button_font = XLoadQueryFont (si->dpy, "fixed"); if (f) free (f); f = get_string_resource(si->dpy, "passwd.bodyFont", "Dialog.Font"); pw->body_font = XLoadQueryFont (si->dpy, (f ? f : "fixed")); if (!pw->body_font) pw->body_font = XLoadQueryFont (si->dpy, "fixed"); if (f) free (f); f = get_string_resource(si->dpy, "passwd.labelFont", "Dialog.Font"); pw->label_font = XLoadQueryFont (si->dpy, (f ? f : "fixed")); if (!pw->label_font) pw->label_font = XLoadQueryFont (si->dpy, "fixed"); if (f) free (f); f = get_string_resource(si->dpy, "passwd.passwdFont", "Dialog.Font"); pw->passwd_font = XLoadQueryFont (si->dpy, (f ? f : "fixed")); if (!pw->passwd_font) pw->passwd_font = XLoadQueryFont (si->dpy, "fixed"); if (f) free (f); f = get_string_resource(si->dpy, "passwd.dateFont", "Dialog.Font"); pw->date_font = XLoadQueryFont (si->dpy, (f ? f : "fixed")); if (!pw->date_font) pw->date_font = XLoadQueryFont (si->dpy, "fixed"); if (f) free (f); f = get_string_resource(si->dpy, "passwd.unameFont", "Dialog.Font"); pw->uname_font = XLoadQueryFont (si->dpy, (f ? f : "fixed")); if (!pw->uname_font) pw->uname_font = XLoadQueryFont (si->dpy, "fixed"); if (f) free (f); pw->show_uname_p = get_boolean_resource(si->dpy, "passwd.uname", "Boolean"); pw->foreground = get_pixel_resource (si->dpy, cmap, "passwd.foreground", "Dialog.Foreground" ); pw->background = get_pixel_resource (si->dpy, cmap, "passwd.background", "Dialog.Background" ); pw->border = get_pixel_resource (si->dpy, cmap, "passwd.borderColor", "Dialog.borderColor"); if (pw->foreground == pw->background) { /* Make sure the error messages show up. */ pw->foreground = BlackPixelOfScreen (screen); pw->background = WhitePixelOfScreen (screen); } pw->passwd_foreground = get_pixel_resource (si->dpy, cmap, "passwd.text.foreground", "Dialog.Text.Foreground" ); pw->passwd_background = get_pixel_resource (si->dpy, cmap, "passwd.text.background", "Dialog.Text.Background" ); pw->button_foreground = get_pixel_resource (si->dpy, cmap, "splash.Button.foreground", "Dialog.Button.Foreground" ); pw->button_background = get_pixel_resource (si->dpy, cmap, "splash.Button.background", "Dialog.Button.Background" ); pw->thermo_foreground = get_pixel_resource (si->dpy, cmap, "passwd.thermometer.foreground", "Dialog.Thermometer.Foreground"); pw->thermo_background = get_pixel_resource ( si->dpy, cmap, "passwd.thermometer.background", "Dialog.Thermometer.Background"); pw->shadow_top = get_pixel_resource ( si->dpy, cmap, "passwd.topShadowColor", "Dialog.Foreground" ); pw->shadow_bottom = get_pixel_resource (si->dpy, cmap, "passwd.bottomShadowColor", "Dialog.Background" ); pw->preferred_logo_width = get_integer_resource (si->dpy, "passwd.logo.width", "Dialog.Logo.Width"); pw->preferred_logo_height = get_integer_resource (si->dpy, "passwd.logo.height", "Dialog.Logo.Height"); pw->thermo_width = get_integer_resource (si->dpy, "passwd.thermometer.width", "Dialog.Thermometer.Width"); pw->internal_border = get_integer_resource (si->dpy, "passwd.internalBorderWidth", "Dialog.InternalBorderWidth"); pw->shadow_width = get_integer_resource (si->dpy, "passwd.shadowThickness", "Dialog.ShadowThickness"); if (pw->preferred_logo_width == 0) pw->preferred_logo_width = 150; if (pw->preferred_logo_height == 0) pw->preferred_logo_height = 150; if (pw->internal_border == 0) pw->internal_border = 15; if (pw->shadow_width == 0) pw->shadow_width = 4; if (pw->thermo_width == 0) pw->thermo_width = pw->shadow_width; /* We need to remember the mouse position and restore it afterward, or sometimes (perhaps only with Xinerama?) the mouse gets warped to inside the bounds of the lock dialog window. */ { Window pointer_root, pointer_child; int root_x, root_y, win_x, win_y; unsigned int mask; pw->previous_mouse_x = 0; pw->previous_mouse_y = 0; if (XQueryPointer (si->dpy, RootWindowOfScreen (pw->prompt_screen->screen), &pointer_root, &pointer_child, &root_x, &root_y, &win_x, &win_y, &mask)) { pw->previous_mouse_x = root_x; pw->previous_mouse_y = root_y; if (si->prefs.verbose_p) fprintf (stderr, "%s: %d: mouse is at %d,%d.\n", blurb(), pw->prompt_screen->number, pw->previous_mouse_x, pw->previous_mouse_y); } else if (si->prefs.verbose_p) fprintf (stderr, "%s: %d: unable to determine mouse position?\n", blurb(), pw->prompt_screen->number); } /* Before mapping the window, save a pixmap of the current screen. When we lower the window, we restore these bits. This works, because the running screenhack has already been sent SIGSTOP, so we know nothing else is drawing right now! */ { XGCValues gcv; GC gc; pw->save_under = XCreatePixmap (si->dpy, pw->prompt_screen->screensaver_window, pw->prompt_screen->width, pw->prompt_screen->height, pw->prompt_screen->current_depth); gcv.function = GXcopy; gc = XCreateGC (si->dpy, pw->save_under, GCFunction, &gcv); XCopyArea (si->dpy, pw->prompt_screen->screensaver_window, pw->save_under, gc, 0, 0, pw->prompt_screen->width, pw->prompt_screen->height, 0, 0); XFreeGC (si->dpy, gc); } si->pw_data = pw; return 0; } Bool debug_passwd_window_p = False; /* used only by test-passwd.c */ /** * info_msg and prompt may be NULL. */ static int make_passwd_window (saver_info *si, const char *info_msg, const char *prompt, Bool echo) { XSetWindowAttributes attrs; unsigned long attrmask = 0; passwd_dialog_data *pw; Screen *screen; Colormap cmap; Dimension max_string_width_px; saver_screen_info *ssi = &si->screens [mouse_screen (si)]; cleanup_passwd_window (si); if (! ssi) /* WTF? Trying to prompt while no screens connected? */ return -1; if (!si->pw_data) if (new_passwd_window (si) < 0) return -1; if (!(pw = si->pw_data)) return -1; pw->ratio = 1.0; pw->prompt_screen = ssi; if (si->prefs.verbose_p) fprintf (stderr, "%s: %d: creating password dialog (\"%s\")\n", blurb(), pw->prompt_screen->number, info_msg ? info_msg : ""); screen = pw->prompt_screen->screen; cmap = DefaultColormapOfScreen (screen); pw->echo_input = echo; max_string_width_px = ssi->width - pw->shadow_width * 4 - pw->border_width * 2 - pw->thermo_width - pw->preferred_logo_width - pw->internal_border * 2; /* As the string wraps it makes the window taller which makes the logo wider * which leaves less room for the text which makes the string wrap. Uh-oh, a * loop. By wrapping at a bit less than the available width, there's some * room for the dialog to grow without going off the edge of the screen. */ max_string_width_px *= 0.75; if (!info_msg && senescent_p()) info_msg = ("\n" "This version of XScreenSaver\n" "is very old! Please upgrade!\n"); pw->info_label = mlstring_new(info_msg ? info_msg : pw->body_label, pw->label_font, max_string_width_px); { int direction, ascent, descent; XCharStruct overall; pw->width = 0; pw->height = 0; /* Measure the heading_label. */ XTextExtents (pw->heading_font, pw->heading_label, strlen(pw->heading_label), &direction, &ascent, &descent, &overall); if (overall.width > pw->width) pw->width = overall.width; pw->height += ascent + descent; /* Measure the uname_label. */ if ((strlen(pw->uname_label)) && pw->show_uname_p) { XTextExtents (pw->uname_font, pw->uname_label, strlen(pw->uname_label), &direction, &ascent, &descent, &overall); if (overall.width > pw->width) pw->width = overall.width; pw->height += ascent + descent; } { Dimension w2 = 0, w3 = 0, button_w = 0; Dimension h2 = 0, h3 = 0, button_h = 0; const char *passwd_string = SAMPLE_INPUT; /* Measure the user_label. */ XTextExtents (pw->label_font, pw->user_label, strlen(pw->user_label), &direction, &ascent, &descent, &overall); if (overall.width > w2) w2 = overall.width; h2 += ascent + descent; /* Measure the info_label. */ if (pw->info_label->overall_width > pw->width) pw->width = pw->info_label->overall_width; h2 += pw->info_label->overall_height; /* Measure the user string. */ XTextExtents (pw->passwd_font, si->user, strlen(si->user), &direction, &ascent, &descent, &overall); overall.width += (pw->shadow_width * 4); ascent += (pw->shadow_width * 4); if (overall.width > w3) w3 = overall.width; h3 += ascent + descent; /* Measure the (dummy) passwd_string. */ if (prompt) { XTextExtents (pw->passwd_font, passwd_string, strlen(passwd_string), &direction, &ascent, &descent, &overall); overall.width += (pw->shadow_width * 4); ascent += (pw->shadow_width * 4); if (overall.width > w3) w3 = overall.width; h3 += ascent + descent; /* Measure the prompt_label. */ max_string_width_px -= w3; pw->prompt_label = mlstring_new (prompt, pw->label_font, max_string_width_px); if (pw->prompt_label->overall_width > w2) w2 = pw->prompt_label->overall_width; h2 += pw->prompt_label->overall_height; w2 = w2 + w3 + (pw->shadow_width * 2); h2 = MAX (h2, h3); } /* The "Unlock" button. */ XTextExtents (pw->label_font, pw->unlock_label, strlen(pw->unlock_label), &direction, &ascent, &descent, &overall); button_w = overall.width; button_h = ascent + descent; /* Add some horizontal padding inside the button. */ button_w += ascent; button_w += ((ascent + descent) / 2) + (pw->shadow_width * 2); button_h += ((ascent + descent) / 2) + (pw->shadow_width * 2); pw->unlock_button_width = button_w; pw->unlock_button_height = button_h; w2 = MAX (w2, button_w); h2 += button_h * 1.5; /* The "New Login" button */ pw->login_button_width = 0; pw->login_button_height = 0; if (pw->login_button_p) { pw->login_button_enabled_p = True; /* Measure the "New Login" button */ XTextExtents (pw->button_font, pw->login_label, strlen (pw->login_label), &direction, &ascent, &descent, &overall); button_w = overall.width; button_h = ascent + descent; /* Add some horizontal padding inside the buttons. */ button_w += ascent; button_w += ((ascent + descent) / 2) + (pw->shadow_width * 2); button_h += ((ascent + descent) / 2) + (pw->shadow_width * 2); pw->login_button_width = button_w; pw->login_button_height = button_h; if (button_h > pw->unlock_button_height) h2 += (button_h * 1.5 - pw->unlock_button_height * 1.5); /* Use (2 * shadow_width) spacing between the buttons. Another (2 * shadow_width) is required to account for button shadows. */ w2 = MAX (w2, button_w + pw->unlock_button_width + (pw->shadow_width * 4)); } if (w2 > pw->width) pw->width = w2; pw->height += h2; } pw->width += (pw->internal_border * 2); pw->height += (pw->internal_border * 4); pw->width += pw->thermo_width + (pw->shadow_width * 3); if (pw->preferred_logo_height > pw->height) pw->height = pw->logo_height = pw->preferred_logo_height; else if (pw->height > pw->preferred_logo_height) pw->logo_height = pw->height; pw->logo_width = pw->logo_height; pw->width += pw->logo_width; } attrmask |= CWOverrideRedirect; attrs.override_redirect = True; if (debug_passwd_window_p) attrs.override_redirect = False; /* kludge for test-passwd.c */ attrmask |= CWEventMask; attrs.event_mask = (ExposureMask | KeyPressMask | ButtonPressMask | ButtonReleaseMask); /* Figure out where on the desktop to place the window so that it will actually be visible; this takes into account virtual viewports as well as Xinerama. */ { saver_screen_info *ssi = &si->screens [mouse_screen (si)]; int x = ssi->x; int y = ssi->y; int w = ssi->width; int h = ssi->height; if (si->prefs.debug_p) w /= 2; pw->x = x + ((w + pw->width) / 2) - pw->width; pw->y = y + ((h + pw->height) / 2) - pw->height; if (pw->x < x) pw->x = x; if (pw->y < y) pw->y = y; } pw->border_width = get_integer_resource (si->dpy, "passwd.borderWidth", "Dialog.BorderWidth"); /* Only create the window the first time around */ if (!si->passwd_dialog) { si->passwd_dialog = XCreateWindow (si->dpy, RootWindowOfScreen(screen), pw->x, pw->y, pw->width, pw->height, pw->border_width, DefaultDepthOfScreen (screen), InputOutput, DefaultVisualOfScreen(screen), attrmask, &attrs); XSetWindowBackground (si->dpy, si->passwd_dialog, pw->background); XSetWindowBorder (si->dpy, si->passwd_dialog, pw->border); /* We use the default visual, not ssi->visual, so that the logo pixmap's visual matches that of the si->passwd_dialog window. */ pw->logo_pixmap = xscreensaver_logo (ssi->screen, /* ssi->current_visual, */ DefaultVisualOfScreen(screen), si->passwd_dialog, cmap, pw->background, &pw->logo_pixels, &pw->logo_npixels, &pw->logo_clipmask, True); } else /* On successive prompts, just resize the window */ { XWindowChanges wc; unsigned int mask = CWX | CWY | CWWidth | CWHeight; wc.x = pw->x; wc.y = pw->y; wc.width = pw->width; wc.height = pw->height; XConfigureWindow (si->dpy, si->passwd_dialog, mask, &wc); } restore_background(si); XMapRaised (si->dpy, si->passwd_dialog); XSync (si->dpy, False); move_mouse_grab (si, si->passwd_dialog, pw->passwd_cursor, pw->prompt_screen->number); undo_vp_motion (si); si->pw_data = pw; if (cmap) XInstallColormap (si->dpy, cmap); draw_passwd_window (si); return 0; } static void draw_passwd_window (saver_info *si) { passwd_dialog_data *pw = si->pw_data; XGCValues gcv; GC gc1, gc2; int spacing, height; int x1, x2, x3, y1, y2; int sw; int tb_height; /* Force redraw */ pw->passwd_changed_p = True; pw->button_state_changed_p = True; /* This height is the height of all the elements, not to be confused with * the overall window height which is pw->height. It is used to compute * the amount of spacing (padding) between elements. */ height = (pw->heading_font->ascent + pw->heading_font->descent + pw->info_label->overall_height + MAX (((pw->label_font->ascent + pw->label_font->descent) + (pw->prompt_label ? pw->prompt_label->overall_height : 0)), ((pw->passwd_font->ascent + pw->passwd_font->descent) + (pw->shadow_width * 2)) * (pw->prompt_label ? 2 : 1)) + pw->date_font->ascent + pw->date_font->descent); if ((strlen(pw->uname_label)) && pw->show_uname_p) height += (pw->uname_font->ascent + pw->uname_font->descent); height += ((pw->button_font->ascent + pw->button_font->descent) * 2 + 2 * pw->shadow_width); spacing = ((pw->height - 2 * pw->shadow_width - pw->internal_border - height) / 10); if (spacing < 0) spacing = 0; gcv.foreground = pw->foreground; gc1 = XCreateGC (si->dpy, si->passwd_dialog, GCForeground, &gcv); gc2 = XCreateGC (si->dpy, si->passwd_dialog, GCForeground, &gcv); x1 = pw->logo_width + pw->thermo_width + (pw->shadow_width * 3); x3 = pw->width - (pw->shadow_width * 2); y1 = (pw->shadow_width * 2) + spacing + spacing; /* top heading */ XSetFont (si->dpy, gc1, pw->heading_font->fid); sw = string_width (pw->heading_font, pw->heading_label); x2 = (x1 + ((x3 - x1 - sw) / 2)); y1 += spacing + pw->heading_font->ascent + pw->heading_font->descent; XDrawString (si->dpy, si->passwd_dialog, gc1, x2, y1, pw->heading_label, strlen(pw->heading_label)); /* uname below top heading */ if ((strlen(pw->uname_label)) && pw->show_uname_p) { XSetFont (si->dpy, gc1, pw->uname_font->fid); y1 += spacing + pw->uname_font->ascent + pw->uname_font->descent; sw = string_width (pw->uname_font, pw->uname_label); x2 = (x1 + ((x3 - x1 - sw) / 2)); XDrawString (si->dpy, si->passwd_dialog, gc1, x2, y1, pw->uname_label, strlen(pw->uname_label)); } /* the info_label (below uname) */ x2 = (x1 + ((x3 - x1 - pw->info_label->overall_width) / 2)); y1 += spacing + pw->info_label->font_height / 2; mlstring_draw(si->dpy, si->passwd_dialog, gc1, pw->info_label, x2, y1); y1 += pw->info_label->overall_height; tb_height = (pw->passwd_font->ascent + pw->passwd_font->descent + (pw->shadow_width * 4)); /* the "User:" prompt */ y2 = y1; XSetForeground (si->dpy, gc1, pw->foreground); XSetFont (si->dpy, gc1, pw->label_font->fid); y1 += (spacing + tb_height + pw->shadow_width); x2 = (x1 + pw->internal_border + MAX(string_width (pw->label_font, pw->user_label), pw->prompt_label ? pw->prompt_label->overall_width : 0)); XDrawString (si->dpy, si->passwd_dialog, gc1, x2 - string_width (pw->label_font, pw->user_label), y1 - pw->passwd_font->descent, pw->user_label, strlen(pw->user_label)); /* the prompt_label prompt */ if (pw->prompt_label) { y1 += tb_height - pw->label_font->ascent + pw->shadow_width; mlstring_draw(si->dpy, si->passwd_dialog, gc1, pw->prompt_label, x2 - pw->prompt_label->overall_width, y1); } /* the "user name" text field */ y1 = y2; XSetForeground (si->dpy, gc1, pw->passwd_foreground); XSetForeground (si->dpy, gc2, pw->passwd_background); XSetFont (si->dpy, gc1, pw->passwd_font->fid); y1 += (spacing + tb_height); x2 += (pw->shadow_width * 4); pw->passwd_field_width = x3 - x2 - pw->internal_border; pw->passwd_field_height = (pw->passwd_font->ascent + pw->passwd_font->descent + pw->shadow_width); XFillRectangle (si->dpy, si->passwd_dialog, gc2, x2 - pw->shadow_width, y1 - (pw->passwd_font->ascent + pw->passwd_font->descent), pw->passwd_field_width, pw->passwd_field_height); XDrawString (si->dpy, si->passwd_dialog, gc1, x2, y1 - pw->passwd_font->descent, si->user, strlen(si->user)); /* the password/prompt text field */ if (pw->prompt_label) { y1 += (spacing + pw->prompt_label->overall_height + pw->shadow_width*2); pw->passwd_field_x = x2 - pw->shadow_width; pw->passwd_field_y = y1 - (pw->passwd_font->ascent + pw->passwd_font->descent); } /* The shadow around the text fields */ y1 = y2; y1 += (spacing + (pw->shadow_width * 3)); x1 = x2 - (pw->shadow_width * 2); x2 = pw->passwd_field_width + (pw->shadow_width * 2); y2 = pw->passwd_field_height + (pw->shadow_width * 2); draw_shaded_rectangle (si->dpy, si->passwd_dialog, x1, y1, x2, y2, pw->shadow_width, pw->shadow_bottom, pw->shadow_top); if (pw->prompt_label) { y1 += (spacing + pw->prompt_label->overall_height + pw->shadow_width*2); draw_shaded_rectangle (si->dpy, si->passwd_dialog, x1, y1, x2, y2, pw->shadow_width, pw->shadow_bottom, pw->shadow_top); } /* The date, below the text fields */ { char buf[100]; time_t now = time ((time_t *) 0); struct tm *tm = localtime (&now); memset (buf, 0, sizeof(buf)); strftime (buf, sizeof(buf)-1, pw->date_label, tm); XSetFont (si->dpy, gc1, pw->date_font->fid); y1 += pw->shadow_width; y1 += (spacing + tb_height); y1 += spacing/2; sw = string_width (pw->date_font, buf); x2 = x1 + x2 - sw; XDrawString (si->dpy, si->passwd_dialog, gc1, x2, y1, buf, strlen(buf)); } /* Set up the GCs for the "New Login" and "Unlock" buttons. */ XSetForeground(si->dpy, gc1, pw->button_foreground); XSetForeground(si->dpy, gc2, pw->button_background); XSetFont(si->dpy, gc1, pw->button_font->fid); /* The "Unlock" button */ x2 = pw->width - pw->internal_border - (pw->shadow_width * 2); /* right aligned button */ x1 = x2 - pw->unlock_button_width; /* Add half the difference between y1 and the internal edge. * It actually looks better if the internal border is ignored. */ y1 += ((pw->height - MAX (pw->unlock_button_height, pw->login_button_height) - spacing - y1) / 2); pw->unlock_button_x = x1; pw->unlock_button_y = y1; /* The "New Login" button */ if (pw->login_button_p) { /* Using the same GC as for the Unlock button */ sw = string_width (pw->button_font, pw->login_label); /* left aligned button */ x1 = (pw->logo_width + pw->thermo_width + (pw->shadow_width * 3) + pw->internal_border); pw->login_button_x = x1; pw->login_button_y = y1; } /* The logo */ x1 = pw->shadow_width * 6; y1 = pw->shadow_width * 6; x2 = pw->logo_width - (pw->shadow_width * 12); y2 = pw->logo_height - (pw->shadow_width * 12); if (pw->logo_pixmap) { Window root; int x, y; unsigned int w, h, bw, d; XGetGeometry (si->dpy, pw->logo_pixmap, &root, &x, &y, &w, &h, &bw, &d); XSetForeground (si->dpy, gc1, pw->foreground); XSetBackground (si->dpy, gc1, pw->background); XSetClipMask (si->dpy, gc1, pw->logo_clipmask); XSetClipOrigin (si->dpy, gc1, x1 + ((x2 - (int)w) / 2), y1 + ((y2 - (int)h) / 2)); if (d == 1) XCopyPlane (si->dpy, pw->logo_pixmap, si->passwd_dialog, gc1, 0, 0, w, h, x1 + ((x2 - (int)w) / 2), y1 + ((y2 - (int)h) / 2), 1); else XCopyArea (si->dpy, pw->logo_pixmap, si->passwd_dialog, gc1, 0, 0, w, h, x1 + ((x2 - (int)w) / 2), y1 + ((y2 - (int)h) / 2)); } /* The thermometer */ XSetForeground (si->dpy, gc1, pw->thermo_foreground); XSetForeground (si->dpy, gc2, pw->thermo_background); pw->thermo_field_x = pw->logo_width + pw->shadow_width; pw->thermo_field_y = pw->shadow_width * 5; pw->thermo_field_height = pw->height - (pw->shadow_width * 10); #if 0 /* Solid border inside the logo box. */ XSetForeground (si->dpy, gc1, pw->foreground); XDrawRectangle (si->dpy, si->passwd_dialog, gc1, x1, y1, x2-1, y2-1); #endif /* The shadow around the logo */ draw_shaded_rectangle (si->dpy, si->passwd_dialog, pw->shadow_width * 4, pw->shadow_width * 4, pw->logo_width - (pw->shadow_width * 8), pw->logo_height - (pw->shadow_width * 8), pw->shadow_width, pw->shadow_bottom, pw->shadow_top); /* The shadow around the thermometer */ draw_shaded_rectangle (si->dpy, si->passwd_dialog, pw->logo_width, pw->shadow_width * 4, pw->thermo_width + (pw->shadow_width * 2), pw->height - (pw->shadow_width * 8), pw->shadow_width, pw->shadow_bottom, pw->shadow_top); #if 1 /* Solid border inside the thermometer. */ XSetForeground (si->dpy, gc1, pw->foreground); XDrawRectangle (si->dpy, si->passwd_dialog, gc1, pw->thermo_field_x, pw->thermo_field_y, pw->thermo_width - 1, pw->thermo_field_height - 1); #endif /* The shadow around the whole window */ draw_shaded_rectangle (si->dpy, si->passwd_dialog, 0, 0, pw->width, pw->height, pw->shadow_width, pw->shadow_top, pw->shadow_bottom); XFreeGC (si->dpy, gc1); XFreeGC (si->dpy, gc2); update_passwd_window (si, pw->passwd_string, pw->ratio); } static void draw_button(Display *dpy, Drawable dialog, XFontStruct *font, unsigned long foreground, unsigned long background, char *label, int x, int y, int width, int height, int shadow_width, Pixel shadow_light, Pixel shadow_dark, Bool button_down) { XGCValues gcv; GC gc1, gc2; int sw; int label_x, label_y; gcv.foreground = foreground; gcv.font = font->fid; gc1 = XCreateGC(dpy, dialog, GCForeground|GCFont, &gcv); gcv.foreground = background; gc2 = XCreateGC(dpy, dialog, GCForeground, &gcv); XFillRectangle(dpy, dialog, gc2, x, y, width, height); sw = string_width(font, label); label_x = x + ((width - sw) / 2); label_y = (y + (height - (font->ascent + font->descent)) / 2 + font->ascent); if (button_down) { label_x += 2; label_y += 2; } XDrawString(dpy, dialog, gc1, label_x, label_y, label, strlen(label)); XFreeGC(dpy, gc1); XFreeGC(dpy, gc2); draw_shaded_rectangle(dpy, dialog, x, y, width, height, shadow_width, shadow_light, shadow_dark); } static void update_passwd_window (saver_info *si, const char *printed_passwd, float ratio) { passwd_dialog_data *pw = si->pw_data; XGCValues gcv; GC gc1, gc2; int x, y; XRectangle rects[1]; pw->ratio = ratio; gcv.foreground = pw->passwd_foreground; gcv.font = pw->passwd_font->fid; gc1 = XCreateGC (si->dpy, si->passwd_dialog, GCForeground|GCFont, &gcv); gcv.foreground = pw->passwd_background; gc2 = XCreateGC (si->dpy, si->passwd_dialog, GCForeground, &gcv); if (printed_passwd) { char *s = strdup (printed_passwd); if (pw->passwd_string) free (pw->passwd_string); pw->passwd_string = s; } if (pw->prompt_label) { /* the "password" text field */ rects[0].x = pw->passwd_field_x; rects[0].y = pw->passwd_field_y; rects[0].width = pw->passwd_field_width; rects[0].height = pw->passwd_field_height; /* The user entry (password) field is double buffered. * This avoids flickering, particularly in synchronous mode. */ if (pw->passwd_changed_p) { pw->passwd_changed_p = False; if (pw->user_entry_pixmap) { XFreePixmap(si->dpy, pw->user_entry_pixmap); pw->user_entry_pixmap = 0; } pw->user_entry_pixmap = XCreatePixmap (si->dpy, si->passwd_dialog, rects[0].width, rects[0].height, DefaultDepthOfScreen (pw->prompt_screen->screen)); XFillRectangle (si->dpy, pw->user_entry_pixmap, gc2, 0, 0, rects[0].width, rects[0].height); XDrawString (si->dpy, pw->user_entry_pixmap, gc1, pw->shadow_width, pw->passwd_font->ascent, pw->passwd_string, strlen(pw->passwd_string)); /* Ensure the new pixmap gets copied to the window */ pw->i_beam = 0; } /* The I-beam */ if (pw->i_beam == 0) { /* Make the I-beam disappear */ XCopyArea(si->dpy, pw->user_entry_pixmap, si->passwd_dialog, gc2, 0, 0, rects[0].width, rects[0].height, rects[0].x, rects[0].y); } else if (pw->i_beam == 1) { /* Make the I-beam appear */ x = (rects[0].x + pw->shadow_width + string_width (pw->passwd_font, pw->passwd_string)); y = rects[0].y + pw->shadow_width; if (x > rects[0].x + rects[0].width - 1) x = rects[0].x + rects[0].width - 1; XDrawLine (si->dpy, si->passwd_dialog, gc1, x, y, x, y + pw->passwd_font->ascent + pw->passwd_font->descent-1); } pw->i_beam = (pw->i_beam + 1) % 4; } /* the thermometer */ y = (pw->thermo_field_height - 2) * (1.0 - pw->ratio); if (y > 0) { XFillRectangle (si->dpy, si->passwd_dialog, gc2, pw->thermo_field_x + 1, pw->thermo_field_y + 1, pw->thermo_width-2, y); XSetForeground (si->dpy, gc1, pw->thermo_foreground); XFillRectangle (si->dpy, si->passwd_dialog, gc1, pw->thermo_field_x + 1, pw->thermo_field_y + 1 + y, pw->thermo_width-2, MAX (0, pw->thermo_field_height - y - 2)); } if (pw->button_state_changed_p) { pw->button_state_changed_p = False; /* The "Unlock" button */ draw_button(si->dpy, si->passwd_dialog, pw->button_font, pw->button_foreground, pw->button_background, pw->unlock_label, pw->unlock_button_x, pw->unlock_button_y, pw->unlock_button_width, pw->unlock_button_height, pw->shadow_width, (pw->unlock_button_down_p ? pw->shadow_bottom : pw->shadow_top), (pw->unlock_button_down_p ? pw->shadow_top : pw->shadow_bottom), pw->unlock_button_down_p); /* The "New Login" button */ if (pw->login_button_p) { draw_button(si->dpy, si->passwd_dialog, pw->button_font, (pw->login_button_enabled_p ? pw->passwd_foreground : pw->shadow_bottom), pw->button_background, pw->login_label, pw->login_button_x, pw->login_button_y, pw->login_button_width, pw->login_button_height, pw->shadow_width, (pw->login_button_down_p ? pw->shadow_bottom : pw->shadow_top), (pw->login_button_down_p ? pw->shadow_top : pw->shadow_bottom), pw->login_button_down_p); } } XFreeGC (si->dpy, gc1); XFreeGC (si->dpy, gc2); XSync (si->dpy, False); } void restore_background (saver_info *si) { passwd_dialog_data *pw = si->pw_data; saver_screen_info *ssi = pw->prompt_screen; XGCValues gcv; GC gc; gcv.function = GXcopy; gc = XCreateGC (si->dpy, ssi->screensaver_window, GCFunction, &gcv); XCopyArea (si->dpy, pw->save_under, ssi->screensaver_window, gc, 0, 0, ssi->width, ssi->height, 0, 0); XFreeGC (si->dpy, gc); } /* Frees anything created by make_passwd_window */ static void cleanup_passwd_window (saver_info *si) { passwd_dialog_data *pw; if (!(pw = si->pw_data)) return; if (pw->info_label) { mlstring_free(pw->info_label); pw->info_label = 0; } if (pw->prompt_label) { mlstring_free(pw->prompt_label); pw->prompt_label = 0; } memset (pw->typed_passwd, 0, sizeof(pw->typed_passwd)); memset (pw->typed_passwd_char_size, 0, sizeof(pw->typed_passwd_char_size)); memset (pw->passwd_string, 0, strlen(pw->passwd_string)); if (pw->timer) { XtRemoveTimeOut (pw->timer); pw->timer = 0; } if (pw->user_entry_pixmap) { XFreePixmap(si->dpy, pw->user_entry_pixmap); pw->user_entry_pixmap = 0; } } static void destroy_passwd_window (saver_info *si) { saver_preferences *p = &si->prefs; passwd_dialog_data *pw = si->pw_data; saver_screen_info *ssi = pw->prompt_screen; Colormap cmap = DefaultColormapOfScreen (ssi->screen); Pixel black = BlackPixelOfScreen (ssi->screen); Pixel white = WhitePixelOfScreen (ssi->screen); XEvent event; cleanup_passwd_window (si); if (si->cached_passwd) { char *wipe = si->cached_passwd; while (*wipe) *wipe++ = '\0'; free(si->cached_passwd); si->cached_passwd = NULL; } move_mouse_grab (si, RootWindowOfScreen (ssi->screen), ssi->cursor, ssi->number); if (pw->passwd_cursor) XFreeCursor (si->dpy, pw->passwd_cursor); if (p->verbose_p) fprintf (stderr, "%s: %d: moving mouse back to %d,%d.\n", blurb(), ssi->number, pw->previous_mouse_x, pw->previous_mouse_y); XWarpPointer (si->dpy, None, RootWindowOfScreen (ssi->screen), 0, 0, 0, 0, pw->previous_mouse_x, pw->previous_mouse_y); XSync (si->dpy, False); while (XCheckMaskEvent (si->dpy, PointerMotionMask, &event)) if (p->verbose_p) fprintf (stderr, "%s: discarding MotionNotify event.\n", blurb()); #ifdef HAVE_XINPUT if (si->using_xinput_extension && si->xinput_DeviceMotionNotify) while (XCheckTypedEvent (si->dpy, si->xinput_DeviceMotionNotify, &event)) if (p->verbose_p) fprintf (stderr, "%s: discarding DeviceMotionNotify event.\n", blurb()); #endif if (si->passwd_dialog) { if (si->prefs.verbose_p) fprintf (stderr, "%s: %d: destroying password dialog.\n", blurb(), pw->prompt_screen->number); XDestroyWindow (si->dpy, si->passwd_dialog); si->passwd_dialog = 0; } if (pw->save_under) { restore_background(si); XFreePixmap (si->dpy, pw->save_under); pw->save_under = 0; } if (pw->heading_label) free (pw->heading_label); if (pw->body_label) free (pw->body_label); if (pw->user_label) free (pw->user_label); if (pw->date_label) free (pw->date_label); if (pw->login_label) free (pw->login_label); if (pw->unlock_label) free (pw->unlock_label); if (pw->passwd_string) free (pw->passwd_string); if (pw->uname_label) free (pw->uname_label); if (pw->heading_font) XFreeFont (si->dpy, pw->heading_font); if (pw->body_font) XFreeFont (si->dpy, pw->body_font); if (pw->label_font) XFreeFont (si->dpy, pw->label_font); if (pw->passwd_font) XFreeFont (si->dpy, pw->passwd_font); if (pw->date_font) XFreeFont (si->dpy, pw->date_font); if (pw->button_font) XFreeFont (si->dpy, pw->button_font); if (pw->uname_font) XFreeFont (si->dpy, pw->uname_font); if (pw->foreground != black && pw->foreground != white) XFreeColors (si->dpy, cmap, &pw->foreground, 1, 0L); if (pw->background != black && pw->background != white) XFreeColors (si->dpy, cmap, &pw->background, 1, 0L); if (!(pw->button_foreground == black || pw->button_foreground == white)) XFreeColors (si->dpy, cmap, &pw->button_foreground, 1, 0L); if (!(pw->button_background == black || pw->button_background == white)) XFreeColors (si->dpy, cmap, &pw->button_background, 1, 0L); if (pw->passwd_foreground != black && pw->passwd_foreground != white) XFreeColors (si->dpy, cmap, &pw->passwd_foreground, 1, 0L); if (pw->passwd_background != black && pw->passwd_background != white) XFreeColors (si->dpy, cmap, &pw->passwd_background, 1, 0L); if (pw->thermo_foreground != black && pw->thermo_foreground != white) XFreeColors (si->dpy, cmap, &pw->thermo_foreground, 1, 0L); if (pw->thermo_background != black && pw->thermo_background != white) XFreeColors (si->dpy, cmap, &pw->thermo_background, 1, 0L); if (pw->shadow_top != black && pw->shadow_top != white) XFreeColors (si->dpy, cmap, &pw->shadow_top, 1, 0L); if (pw->shadow_bottom != black && pw->shadow_bottom != white) XFreeColors (si->dpy, cmap, &pw->shadow_bottom, 1, 0L); if (pw->logo_pixmap) XFreePixmap (si->dpy, pw->logo_pixmap); if (pw-> logo_clipmask) XFreePixmap (si->dpy, pw->logo_clipmask); if (pw->logo_pixels) { if (pw->logo_npixels) XFreeColors (si->dpy, cmap, pw->logo_pixels, pw->logo_npixels, 0L); free (pw->logo_pixels); pw->logo_pixels = 0; pw->logo_npixels = 0; } if (pw->save_under) XFreePixmap (si->dpy, pw->save_under); if (cmap) XInstallColormap (si->dpy, cmap); memset (pw, 0, sizeof(*pw)); free (pw); si->pw_data = 0; } #if defined(HAVE_XF86MISCSETGRABKEYSSTATE) || defined(HAVE_XF86VMODE) static Bool error_handler_hit_p = False; static int ignore_all_errors_ehandler (Display *dpy, XErrorEvent *error) { error_handler_hit_p = True; return 0; } #endif /* HAVE_XF86MISCSETGRABKEYSSTATE || HAVE_XF86VMODE */ #ifdef HAVE_XHPDISABLERESET /* This function enables and disables the C-Sh-Reset hot-key, which normally resets the X server (logging out the logged-in user.) We don't want random people to be able to do that while the screen is locked. */ static void hp_lock_reset (saver_info *si, Bool lock_p) { static Bool hp_locked_p = False; /* Calls to XHPDisableReset and XHPEnableReset must be balanced, or BadAccess errors occur. (It's ok for this to be global, since it affects the whole machine, not just the current screen.) */ if (hp_locked_p == lock_p) return; if (lock_p) XHPDisableReset (si->dpy); else XHPEnableReset (si->dpy); hp_locked_p = lock_p; } #endif /* HAVE_XHPDISABLERESET */ #ifdef HAVE_XF86MISCSETGRABKEYSSTATE /* This function enables and disables the Ctrl-Alt-KP_star and Ctrl-Alt-KP_slash hot-keys, which (in XFree86 4.2) break any grabs and/or kill the grabbing client. That would effectively unlock the screen, so we don't like that. The Ctrl-Alt-KP_star and Ctrl-Alt-KP_slash hot-keys only exist if AllowDeactivateGrabs and/or AllowClosedownGrabs are turned on in XF86Config. I believe they are disabled by default. This does not affect any other keys (specifically Ctrl-Alt-BS or Ctrl-Alt-F1) but I wish it did. Maybe it will someday. */ static void xfree_lock_grab_smasher (saver_info *si, Bool lock_p) { saver_preferences *p = &si->prefs; int status; int event, error; XErrorHandler old_handler; if (!XF86MiscQueryExtension(si->dpy, &event, &error)) return; XSync (si->dpy, False); error_handler_hit_p = False; old_handler = XSetErrorHandler (ignore_all_errors_ehandler); XSync (si->dpy, False); status = XF86MiscSetGrabKeysState (si->dpy, !lock_p); XSync (si->dpy, False); if (error_handler_hit_p) status = 666; if (!lock_p && status == MiscExtGrabStateAlready) status = MiscExtGrabStateSuccess; /* shut up, consider this success */ if (p->verbose_p && status != MiscExtGrabStateSuccess) fprintf (stderr, "%s: error: XF86MiscSetGrabKeysState(%d) returned %s\n", blurb(), !lock_p, (status == MiscExtGrabStateSuccess ? "MiscExtGrabStateSuccess" : status == MiscExtGrabStateLocked ? "MiscExtGrabStateLocked" : status == MiscExtGrabStateAlready ? "MiscExtGrabStateAlready" : status == 666 ? "an X error" : "unknown value")); XSync (si->dpy, False); XSetErrorHandler (old_handler); XSync (si->dpy, False); } #endif /* HAVE_XF86MISCSETGRABKEYSSTATE */ /* This function enables and disables the C-Alt-Plus and C-Alt-Minus hot-keys, which normally change the resolution of the X server. We don't want people to be able to switch the server resolution while the screen is locked, because if they switch to a higher resolution, it could cause part of the underlying desktop to become exposed. */ #ifdef HAVE_XF86VMODE static void xfree_lock_mode_switch (saver_info *si, Bool lock_p) { static Bool any_mode_locked_p = False; saver_preferences *p = &si->prefs; int screen; int real_nscreens = ScreenCount (si->dpy); int event, error; Bool status; XErrorHandler old_handler; if (any_mode_locked_p == lock_p) return; if (!XF86VidModeQueryExtension (si->dpy, &event, &error)) return; for (screen = 0; screen < real_nscreens; screen++) { XSync (si->dpy, False); old_handler = XSetErrorHandler (ignore_all_errors_ehandler); error_handler_hit_p = False; status = XF86VidModeLockModeSwitch (si->dpy, screen, lock_p); XSync (si->dpy, False); XSetErrorHandler (old_handler); if (error_handler_hit_p) status = False; if (status) any_mode_locked_p = lock_p; if (!status && (p->verbose_p || !lock_p)) /* Only print this when verbose, or when we locked but can't unlock. I tried printing this message whenever it comes up, but mode-locking always fails if DontZoom is set in XF86Config. */ fprintf (stderr, "%s: %d: unable to %s mode switching!\n", blurb(), screen, (lock_p ? "lock" : "unlock")); else if (p->verbose_p) fprintf (stderr, "%s: %d: %s mode switching.\n", blurb(), screen, (lock_p ? "locked" : "unlocked")); } } #endif /* HAVE_XF86VMODE */ /* If the viewport has been scrolled since the screen was blanked, then scroll it back to where it belongs. This function only exists to patch over a very brief race condition. */ static void undo_vp_motion (saver_info *si) { #ifdef HAVE_XF86VMODE saver_preferences *p = &si->prefs; int screen; int real_nscreens = ScreenCount (si->dpy); int event, error; if (!XF86VidModeQueryExtension (si->dpy, &event, &error)) return; for (screen = 0; screen < real_nscreens; screen++) { saver_screen_info *ssi = &si->screens[screen]; int x, y; Bool status; if (ssi->blank_vp_x == -1 && ssi->blank_vp_y == -1) break; if (!XF86VidModeGetViewPort (si->dpy, screen, &x, &y)) return; if (ssi->blank_vp_x == x && ssi->blank_vp_y == y) return; /* We're going to move the viewport. The mouse has just been grabbed on (and constrained to, thus warped to) the password window, so it is no longer near the edge of the screen. However, wait a bit anyway, just to make sure the server drains its last motion event, so that the screen doesn't continue to scroll after we've reset the viewport. */ XSync (si->dpy, False); usleep (250000); /* 1/4 second */ XSync (si->dpy, False); status = XF86VidModeSetViewPort (si->dpy, screen, ssi->blank_vp_x, ssi->blank_vp_y); if (!status) fprintf (stderr, "%s: %d: unable to move vp from (%d,%d) back to (%d,%d)!\n", blurb(), screen, x, y, ssi->blank_vp_x, ssi->blank_vp_y); else if (p->verbose_p) fprintf (stderr, "%s: %d: vp moved to (%d,%d); moved it back to (%d,%d).\n", blurb(), screen, x, y, ssi->blank_vp_x, ssi->blank_vp_y); } #endif /* HAVE_XF86VMODE */ } /* Interactions */ static void passwd_animate_timer (XtPointer closure, XtIntervalId *id) { saver_info *si = (saver_info *) closure; int tick = 166; passwd_dialog_data *pw = si->pw_data; if (!pw) return; pw->ratio -= (1.0 / ((double) si->prefs.passwd_timeout / (double) tick)); if (pw->ratio < 0) { pw->ratio = 0; if (si->unlock_state == ul_read) si->unlock_state = ul_time; } update_passwd_window (si, 0, pw->ratio); if (si->unlock_state == ul_read) pw->timer = XtAppAddTimeOut (si->app, tick, passwd_animate_timer, (XtPointer) si); else pw->timer = 0; idle_timer ((XtPointer) si, 0); } static XComposeStatus *compose_status; static void handle_login_button (saver_info *si, XEvent *event) { saver_preferences *p = &si->prefs; Bool mouse_in_box = False; Bool hit_p = False; passwd_dialog_data *pw = si->pw_data; saver_screen_info *ssi = pw->prompt_screen; if (! pw->login_button_enabled_p) return; mouse_in_box = (event->xbutton.x >= pw->login_button_x && event->xbutton.x <= pw->login_button_x + pw->login_button_width && event->xbutton.y >= pw->login_button_y && event->xbutton.y <= pw->login_button_y + pw->login_button_height); if (ButtonRelease == event->xany.type && pw->login_button_down_p && mouse_in_box) { /* Only allow them to press the button once: don't want to accidentally launch a dozen gdm choosers if the machine is being slow. */ hit_p = True; pw->login_button_enabled_p = False; } pw->login_button_down_p = (mouse_in_box && ButtonRelease != event->xany.type); update_passwd_window (si, 0, pw->ratio); if (hit_p) fork_and_exec (ssi, p->new_login_command); } static void handle_unlock_button (saver_info *si, XEvent *event) { Bool mouse_in_box = False; passwd_dialog_data *pw = si->pw_data; mouse_in_box = (event->xbutton.x >= pw->unlock_button_x && event->xbutton.x <= pw->unlock_button_x + pw->unlock_button_width && event->xbutton.y >= pw->unlock_button_y && event->xbutton.y <= pw->unlock_button_y + pw->unlock_button_height); if (ButtonRelease == event->xany.type && pw->unlock_button_down_p && mouse_in_box) finished_typing_passwd (si, pw); pw->unlock_button_down_p = (mouse_in_box && ButtonRelease != event->xany.type); } static void finished_typing_passwd (saver_info *si, passwd_dialog_data *pw) { if (si->unlock_state == ul_read) { update_passwd_window (si, "Checking...", pw->ratio); XSync (si->dpy, False); si->unlock_state = ul_finished; update_passwd_window (si, "", pw->ratio); } } static void handle_passwd_key (saver_info *si, XKeyEvent *event) { passwd_dialog_data *pw = si->pw_data; unsigned char decoded [MAX_BYTES_PER_CHAR * 10]; /* leave some slack */ KeySym keysym = 0; /* XLookupString may return more than one character via XRebindKeysym; and on some systems it returns multi-byte UTF-8 characters (contrary to its documentation, which says it returns only Latin1.) It seems to only do so, however, if setlocale() has been called. See the code inside ENABLE_NLS in xscreensaver.c. */ int decoded_size = XLookupString (event, (char *)decoded, sizeof(decoded), &keysym, compose_status); #if 0 { const char *ks = XKeysymToString (keysym); int i; fprintf(stderr, "## %-12s\t=> %d\t", (ks ? ks : "(null)"), decoded_size); for (i = 0; i < decoded_size; i++) fprintf(stderr, "%c", decoded[i]); fprintf(stderr, "\t"); for (i = 0; i < decoded_size; i++) fprintf(stderr, "\\%03o", ((unsigned char *)decoded)[i]); fprintf(stderr, "\n"); } #endif if (decoded_size > MAX_BYTES_PER_CHAR) { /* The multi-byte character returned is too large. */ XBell (si->dpy, 0); return; } decoded[decoded_size] = 0; pw->passwd_changed_p = True; /* Add 10% to the time remaining every time a key is pressed. */ pw->ratio += 0.1; if (pw->ratio > 1) pw->ratio = 1; if (decoded_size == 1) /* Handle single-char commands */ { switch (*decoded) { case '\010': case '\177': /* Backspace */ { /* kludgey way to get the number of "logical" characters. */ int nchars = strlen (pw->typed_passwd_char_size); int nbytes = strlen (pw->typed_passwd); if (nbytes <= 0) XBell (si->dpy, 0); else { int i; for (i = pw->typed_passwd_char_size[nchars-1]; i >= 0; i--) { if (nbytes < 0) abort(); pw->typed_passwd[nbytes--] = 0; } pw->typed_passwd_char_size[nchars-1] = 0; } } break; case '\012': case '\015': /* Enter */ finished_typing_passwd (si, pw); break; case '\033': /* Escape */ si->unlock_state = ul_cancel; break; case '\025': case '\030': /* Erase line */ memset (pw->typed_passwd, 0, sizeof (pw->typed_passwd)); memset (pw->typed_passwd_char_size, 0, sizeof (pw->typed_passwd_char_size)); break; default: if (*decoded < ' ' && *decoded != '\t') /* Other ctrl char */ XBell (si->dpy, 0); else goto SELF_INSERT; break; } } else { int nbytes, nchars; SELF_INSERT: nbytes = strlen (pw->typed_passwd); nchars = strlen (pw->typed_passwd_char_size); if (nchars + 1 >= sizeof (pw->typed_passwd_char_size)-1 || nbytes + decoded_size >= sizeof (pw->typed_passwd)-1) /* overflow */ XBell (si->dpy, 0); else { pw->typed_passwd_char_size[nchars] = decoded_size; pw->typed_passwd_char_size[nchars+1] = 0; memcpy (pw->typed_passwd + nbytes, decoded, decoded_size); pw->typed_passwd[nbytes + decoded_size] = 0; } } if (pw->echo_input) { /* If the input is wider than the text box, only show the last portion, to simulate a horizontally-scrolling text field. */ int chars_in_pwfield = (pw->passwd_field_width / pw->passwd_font->max_bounds.width); const char *output = pw->typed_passwd; if (strlen(output) > chars_in_pwfield) output += (strlen(output) - chars_in_pwfield); update_passwd_window (si, output, pw->ratio); } else if (pw->show_stars_p) { int nchars = strlen (pw->typed_passwd_char_size); char *stars = 0; stars = (char *) malloc(nchars + 1); memset (stars, '*', nchars); stars[nchars] = 0; update_passwd_window (si, stars, pw->ratio); free (stars); } else { update_passwd_window (si, "", pw->ratio); } } static void passwd_event_loop (saver_info *si) { saver_preferences *p = &si->prefs; char *msg = 0; /* We have to go through this union bullshit because gcc-4.4.0 has stricter struct-aliasing rules. Without this, the optimizer can fuck things up. */ union { XEvent x_event; # ifdef HAVE_RANDR XRRScreenChangeNotifyEvent xrr_event; # endif /* HAVE_RANDR */ } event; passwd_animate_timer ((XtPointer) si, 0); reset_watchdog_timer (si, False); /* Disable watchdog while dialog up */ while (si->unlock_state == ul_read) { XtAppNextEvent (si->app, &event.x_event); #ifdef HAVE_RANDR if (si->using_randr_extension && (event.x_event.type == (si->randr_event_number + RRScreenChangeNotify))) { /* The Resize and Rotate extension sends an event when the size, rotation, or refresh rate of any screen has changed. */ if (p->verbose_p) { /* XRRRootToScreen is in Xrandr.h 1.4, 2001/06/07 */ int screen = XRRRootToScreen(si->dpy, event.xrr_event.window); fprintf (stderr, "%s: %d: screen change event received\n", blurb(), screen); } #ifdef RRScreenChangeNotifyMask /* Inform Xlib that it's ok to update its data structures. */ XRRUpdateConfiguration(&event.x_event); /* Xrandr.h 1.9, 2002/09/29*/ #endif /* RRScreenChangeNotifyMask */ /* Resize the existing xscreensaver windows and cached ssi data. */ if (update_screen_layout (si)) { if (p->verbose_p) { fprintf (stderr, "%s: new layout:\n", blurb()); describe_monitor_layout (si); } resize_screensaver_window (si); } } else #endif /* HAVE_RANDR */ if (event.x_event.xany.window == si->passwd_dialog && event.x_event.xany.type == Expose) draw_passwd_window (si); else if (event.x_event.xany.type == KeyPress) { handle_passwd_key (si, &event.x_event.xkey); si->pw_data->caps_p = (event.x_event.xkey.state & LockMask); } else if (event.x_event.xany.type == ButtonPress || event.x_event.xany.type == ButtonRelease) { si->pw_data->button_state_changed_p = True; handle_unlock_button (si, &event.x_event); if (si->pw_data->login_button_p) handle_login_button (si, &event.x_event); } else XtDispatchEvent (&event.x_event); } switch (si->unlock_state) { case ul_cancel: msg = ""; break; case ul_time: msg = "Timed out!"; break; case ul_finished: msg = "Checking..."; break; default: msg = 0; break; } if (p->verbose_p) switch (si->unlock_state) { case ul_cancel: fprintf (stderr, "%s: input cancelled.\n", blurb()); break; case ul_time: fprintf (stderr, "%s: input timed out.\n", blurb()); break; case ul_finished: fprintf (stderr, "%s: input finished.\n", blurb()); break; default: break; } if (msg) { si->pw_data->i_beam = 0; update_passwd_window (si, msg, 0.0); XSync (si->dpy, False); /* Swallow all pending KeyPress/KeyRelease events. */ { XEvent e; while (XCheckMaskEvent (si->dpy, KeyPressMask|KeyReleaseMask, &e)) ; } } reset_watchdog_timer (si, True); /* Re-enable watchdog */ } static void handle_typeahead (saver_info *si) { passwd_dialog_data *pw = si->pw_data; int i; if (!si->unlock_typeahead) return; pw->passwd_changed_p = True; i = strlen (si->unlock_typeahead); if (i >= sizeof(pw->typed_passwd) - 1) i = sizeof(pw->typed_passwd) - 1; memcpy (pw->typed_passwd, si->unlock_typeahead, i); pw->typed_passwd [i] = 0; { int j; char *c = pw->typed_passwd_char_size; for (j = 0; j < i; j++) *c++ = 1; *c = 0; } memset (si->unlock_typeahead, '*', strlen(si->unlock_typeahead)); si->unlock_typeahead[i] = 0; update_passwd_window (si, si->unlock_typeahead, pw->ratio); free (si->unlock_typeahead); si->unlock_typeahead = 0; } /** * Returns a copy of the input string with trailing whitespace removed. * Whitespace is anything considered so by isspace(). * It is safe to call this with NULL, in which case NULL will be returned. * The returned string (if not NULL) should be freed by the caller with free(). */ static char * remove_trailing_whitespace(const char *str) { size_t len; char *newstr, *chr; if (!str) return NULL; len = strlen(str); newstr = malloc(len + 1); if (!newstr) return NULL; (void) strcpy(newstr, str); chr = newstr + len; while (isspace(*--chr) && chr >= newstr) *chr = '\0'; return newstr; } /* * The authentication conversation function. * Like a PAM conversation function, this accepts multiple messages in a single * round. It then splits them into individual messages for display on the * passwd dialog. A message sequence of info or error followed by a prompt will * be reduced into a single dialog window. * * Returns 0 on success or -1 if some problem occurred (cancelled, OOM, etc.) */ int gui_auth_conv(int num_msg, const struct auth_message auth_msgs[], struct auth_response **resp, saver_info *si) { int i; 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; for (i = 0; i < num_msg; ++i) { info_msg = prompt = NULL; /* See if there is a following message that can be shown at the same * time */ if (auth_msgs[i].type == AUTH_MSGTYPE_INFO && i+1 < num_msg && ( auth_msgs[i+1].type == AUTH_MSGTYPE_PROMPT_NOECHO || auth_msgs[i+1].type == AUTH_MSGTYPE_PROMPT_ECHO) ) { info_msg = auth_msgs[i].msg; prompt = auth_msgs[++i].msg; } else { if ( auth_msgs[i].type == AUTH_MSGTYPE_INFO || auth_msgs[i].type == AUTH_MSGTYPE_ERROR) info_msg = auth_msgs[i].msg; else prompt = auth_msgs[i].msg; } { char *info_msg_trimmed, *prompt_trimmed; /* Trailing whitespace looks bad in a GUI */ info_msg_trimmed = remove_trailing_whitespace(info_msg); prompt_trimmed = remove_trailing_whitespace(prompt); if (make_passwd_window(si, info_msg_trimmed, prompt_trimmed, auth_msgs[i].type == AUTH_MSGTYPE_PROMPT_ECHO ? True : False) < 0) goto fail; if (info_msg_trimmed) free(info_msg_trimmed); if (prompt_trimmed) free(prompt_trimmed); } compose_status = calloc (1, sizeof (*compose_status)); if (!compose_status) goto fail; si->unlock_state = ul_read; handle_typeahead (si); passwd_event_loop (si); if (si->unlock_state == ul_cancel) goto fail; responses[i].response = strdup(si->pw_data->typed_passwd); /* Cache the first response to a PROMPT_NOECHO to save prompting for * each auth mechanism. */ if (si->cached_passwd == NULL && auth_msgs[i].type == AUTH_MSGTYPE_PROMPT_NOECHO) si->cached_passwd = strdup(responses[i].response); free (compose_status); compose_status = 0; } *resp = responses; return (si->unlock_state == ul_finished) ? 0 : -1; fail: if (compose_status) free (compose_status); compose_status = 0; if (responses) { for (i = 0; i < num_msg; ++i) if (responses[i].response) free (responses[i].response); free (responses); } return -1; } void auth_finished_cb (saver_info *si) { char buf[1024]; const char *s; /* If we have something to say, put the dialog back up for a few seconds to display it. Otherwise, don't bother. */ if (si->unlock_state == ul_fail && /* failed with caps lock on */ si->pw_data && si->pw_data->caps_p) s = "Authentication failed (Caps Lock?)"; else if (si->unlock_state == ul_fail) /* failed without caps lock */ s = "Authentication failed!"; else if (si->unlock_state == ul_success && /* good, but report failures */ si->unlock_failures > 0) { if (si->unlock_failures == 1) s = "There has been\n1 failed login attempt."; else { sprintf (buf, "There have been\n%d failed login attempts.", si->unlock_failures); s = buf; } si->unlock_failures = 0; /* ignore failures if they all were too recent */ if (time((time_t *) 0) - si->unlock_failure_time < si->prefs.auth_warning_slack) goto END; } else /* good, with no failures, */ goto END; /* or timeout, or cancel. */ make_passwd_window (si, s, NULL, True); XSync (si->dpy, False); { int secs = 4; time_t start = time ((time_t *) 0); XEvent event; while (time ((time_t *) 0) < start + secs) if (XPending (si->dpy)) { XNextEvent (si->dpy, &event); if (event.xany.window == si->passwd_dialog && event.xany.type == Expose) draw_passwd_window (si); else if (event.xany.type == ButtonPress || event.xany.type == KeyPress) break; XSync (si->dpy, False); } else usleep (250000); /* 1/4 second */ } END: if (si->pw_data) destroy_passwd_window (si); } Bool unlock_p (saver_info *si) { saver_preferences *p = &si->prefs; if (!si->unlock_cb) { fprintf(stderr, "%s: Error: no unlock function specified!\n", blurb()); return False; } raise_window (si, True, True, True); xss_authenticate(si, p->verbose_p); return (si->unlock_state == ul_success); } void set_locked_p (saver_info *si, Bool locked_p) { si->locked_p = locked_p; #ifdef HAVE_XHPDISABLERESET hp_lock_reset (si, locked_p); /* turn off/on C-Sh-Reset */ #endif #ifdef HAVE_XF86VMODE xfree_lock_mode_switch (si, locked_p); /* turn off/on C-Alt-Plus */ #endif #ifdef HAVE_XF86MISCSETGRABKEYSSTATE xfree_lock_grab_smasher (si, locked_p); /* turn off/on C-Alt-KP-*,/ */ #endif store_saver_status (si); /* store locked-p */ } #else /* NO_LOCKING -- whole file */ void set_locked_p (saver_info *si, Bool locked_p) { if (locked_p) abort(); } #endif /* !NO_LOCKING */ xscreensaver-5.34/driver/passwd.c000644 000767 000767 00000023327 12370074200 016623 0ustar00jwzjwz000000 000000 /* passwd.c --- verifying typed passwords with the OS. * xscreensaver, Copyright (c) 1993-2014 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifndef NO_LOCKING /* whole file */ #include #include #include #ifdef HAVE_UNISTD_H # include #endif #include #include #ifndef VMS # include /* for getpwuid() */ #else /* VMS */ # include "vms-pwd.h" #endif /* VMS */ #ifdef HAVE_SYSLOG # include #endif /* HAVE_SYSLOG */ #include #include "xscreensaver.h" #include "auth.h" extern const char *blurb(void); extern void check_for_leaks (const char *where); /* blargh */ #undef Bool #undef True #undef False #define Bool int #define True 1 #define False 0 #undef countof #define countof(x) (sizeof((x))/sizeof(*(x))) struct auth_methods { const char *name; Bool (*init) (int argc, char **argv, Bool verbose_p); Bool (*priv_init) (int argc, char **argv, Bool verbose_p); Bool (*valid_p) (const char *typed_passwd, Bool verbose_p); void (*try_unlock) (saver_info *si, Bool verbose_p, Bool (*valid_p)(const char *typed_passwd, Bool verbose_p)); Bool initted_p; Bool priv_initted_p; }; #ifdef HAVE_KERBEROS extern Bool kerberos_lock_init (int argc, char **argv, Bool verbose_p); extern Bool kerberos_passwd_valid_p (const char *typed_passwd, Bool verbose_p); #endif #ifdef HAVE_PAM extern Bool pam_priv_init (int argc, char **argv, Bool verbose_p); extern void pam_try_unlock (saver_info *si, Bool verbose_p, Bool (*valid_p)(const char *typed_passwd, Bool verbose_p)); #endif #ifdef PASSWD_HELPER_PROGRAM extern Bool ext_priv_init (int argc, char **argv, Bool verbose_p); extern Bool ext_passwd_valid_p (const char *typed_passwd, Bool verbose_p); #endif extern Bool pwent_lock_init (int argc, char **argv, Bool verbose_p); extern Bool pwent_priv_init (int argc, char **argv, Bool verbose_p); extern Bool pwent_passwd_valid_p (const char *typed_passwd, Bool verbose_p); Bool lock_priv_init (int argc, char **argv, Bool verbose_p); Bool lock_init (int argc, char **argv, Bool verbose_p); Bool passwd_valid_p (const char *typed_passwd, Bool verbose_p); /* The authorization methods to try, in order. Note that the last one (the pwent version) is actually two auth methods, since that code tries shadow passwords, and then non-shadow passwords. (It's all in the same file since the APIs are randomly nearly-identical.) */ struct auth_methods methods[] = { # ifdef HAVE_PAM { "PAM", 0, pam_priv_init, 0, pam_try_unlock, False, False }, # endif # ifdef HAVE_KERBEROS { "Kerberos", kerberos_lock_init, 0, kerberos_passwd_valid_p, 0, False, False }, # endif # ifdef PASSWD_HELPER_PROGRAM { "external", 0, ext_priv_init, ext_passwd_valid_p, 0, False, False }, # endif { "normal", pwent_lock_init, pwent_priv_init, pwent_passwd_valid_p, 0, False, False } }; Bool lock_priv_init (int argc, char **argv, Bool verbose_p) { int i; Bool any_ok = False; for (i = 0; i < countof(methods); i++) { if (!methods[i].priv_init) methods[i].priv_initted_p = True; else methods[i].priv_initted_p = methods[i].priv_init (argc, argv, verbose_p); if (methods[i].priv_initted_p) any_ok = True; else if (verbose_p) fprintf (stderr, "%s: initialization of %s passwords failed.\n", blurb(), methods[i].name); } return any_ok; } Bool lock_init (int argc, char **argv, Bool verbose_p) { int i; Bool any_ok = False; for (i = 0; i < countof(methods); i++) { if (!methods[i].priv_initted_p) /* Bail if lock_priv_init failed. */ continue; if (!methods[i].init) methods[i].initted_p = True; else methods[i].initted_p = methods[i].init (argc, argv, verbose_p); if (methods[i].initted_p) any_ok = True; else if (verbose_p) fprintf (stderr, "%s: initialization of %s passwords failed.\n", blurb(), methods[i].name); } return any_ok; } /* A basic auth driver that simply prompts for a password then runs it through * valid_p to determine whether the password is correct. */ static void try_unlock_password(saver_info *si, Bool verbose_p, Bool (*valid_p)(const char *typed_passwd, Bool verbose_p)) { struct auth_message message; struct auth_response *response = NULL; memset(&message, 0, sizeof(message)); if (verbose_p) fprintf(stderr, "%s: non-PAM password auth.\n", blurb()); /* Call the auth_conv function with "Password:", then feed * the result into valid_p() */ message.type = AUTH_MSGTYPE_PROMPT_NOECHO; message.msg = "Password:"; si->unlock_cb(1, &message, &response, si); if (!response) return; if (valid_p (response->response, verbose_p)) si->unlock_state = ul_success; /* yay */ else if (si->unlock_state == ul_cancel || si->unlock_state == ul_time) ; /* more specific failures ok */ else si->unlock_state = ul_fail; /* generic failure */ if (response->response) free(response->response); free(response); } /* Write a password failure to the system log. */ static void do_syslog (saver_info *si, Bool verbose_p) { # ifdef HAVE_SYSLOG struct passwd *pw = getpwuid (getuid ()); char *d = DisplayString (si->dpy); char *u = (pw && pw->pw_name ? pw->pw_name : "???"); int opt = 0; int fac = 0; # ifdef LOG_PID opt = LOG_PID; # endif # if defined(LOG_AUTHPRIV) fac = LOG_AUTHPRIV; # elif defined(LOG_AUTH) fac = LOG_AUTH; # else fac = LOG_DAEMON; # endif if (!d) d = ""; # undef FMT # define FMT "FAILED LOGIN %d ON DISPLAY \"%s\", FOR \"%s\"" if (verbose_p) fprintf (stderr, "%s: syslog: " FMT "\n", blurb(), si->unlock_failures, d, u); openlog (progname, opt, fac); syslog (LOG_NOTICE, FMT, si->unlock_failures, d, u); closelog (); # endif /* HAVE_SYSLOG */ } /** * Runs through each authentication driver calling its try_unlock function. * Called xss_authenticate() because AIX beat us to the name authenticate(). */ void 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) continue; if (si->cached_passwd != NULL && methods[i].valid_p) si->unlock_state = (methods[i].valid_p(si->cached_passwd, verbose_p) == True) ? ul_success : ul_fail; else if (methods[i].try_unlock != NULL) methods[i].try_unlock(si, verbose_p, methods[i].valid_p); else if (methods[i].valid_p) try_unlock_password(si, verbose_p, methods[i].valid_p); else /* Ze goggles, zey do nozing! */ fprintf(stderr, "%s: authentication method %s does nothing.\n", blurb(), methods[i].name); 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 to authenticate by method N-1 failed, mention that (since if an earlier authentication method fails and a later one succeeds, something screwy is probably going on.) */ if (verbose_p && i > 0) { for (j = 0; j < i; j++) if (methods[j].initted_p) fprintf (stderr, "%s: authentication via %s failed.\n", blurb(), methods[j].name); fprintf (stderr, "%s: authentication via %s succeeded.\n", blurb(), methods[i].name); } 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) fprintf(stderr, "%s: All authentication mechanisms failed.\n", blurb()); if (si->unlock_state == ul_fail) { /* Note the time of the first failure */ if (si->unlock_failures == 0) si->unlock_failure_time = time((time_t *) 0); si->unlock_failures++; do_syslog (si, verbose_p); } DONE: if (si->auth_finished_cb) si->auth_finished_cb (si); } #endif /* NO_LOCKING -- whole file */ xscreensaver-5.34/driver/prefs.c000644 000767 000767 00000136463 12371207600 016452 0ustar00jwzjwz000000 000000 /* dotfile.c --- management of the ~/.xscreensaver file. * xscreensaver, Copyright (c) 1998-2014 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include #include #include #include #include /* for PATH_MAX */ #include #include #ifndef VMS # include #else /* VMS */ # include "vms-pwd.h" #endif /* VMS */ /* This file doesn't need the Xt headers, so stub these types out... */ #undef XtPointer #define XtAppContext void* #define XtIntervalId void* #define XtPointer void* #define Widget void* /* Just in case there's something pathological about stat.h... */ #ifndef S_IRUSR # define S_IRUSR 00400 #endif #ifndef S_IWUSR # define S_IWUSR 00200 #endif #ifndef S_IXUSR # define S_IXUSR 00100 #endif #ifndef S_IXGRP # define S_IXGRP 00010 #endif #ifndef S_IXOTH # define S_IXOTH 00001 #endif #include "version.h" #include "prefs.h" #include "resources.h" /* don't use realpath() on fedora system */ #ifdef _FORTIFY_SOURCE #undef HAVE_REALPATH #endif extern char *progname; extern char *progclass; extern const char *blurb (void); static void get_screenhacks (Display *, saver_preferences *); static char *format_command (const char *cmd, Bool wrap_p); static void merge_system_screenhacks (Display *, saver_preferences *, screenhack **system_list, int count); static void stop_the_insanity (saver_preferences *p); static char * chase_symlinks (const char *file) { # ifdef HAVE_REALPATH if (file) { # ifndef PATH_MAX # ifdef MAXPATHLEN # define PATH_MAX MAXPATHLEN # else # define PATH_MAX 2048 # endif # endif char buf[PATH_MAX]; if (realpath (file, buf)) return strdup (buf); /* sprintf (buf, "%.100s: realpath %.200s", blurb(), file); perror(buf);*/ } # endif /* HAVE_REALPATH */ return 0; } static Bool i_am_a_nobody (uid_t uid) { struct passwd *p; p = getpwnam ("nobody"); if (! p) p = getpwnam ("noaccess"); if (! p) p = getpwnam ("daemon"); if (! p) /* There is no nobody? */ return False; return (uid == p->pw_uid); } const char * init_file_name (void) { static char *file = 0; if (!file) { uid_t uid = getuid (); struct passwd *p = getpwuid (uid); 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) { fprintf (stderr, "%s: couldn't get home directory of \"%s\"\n", blurb(), (p->pw_name ? p->pw_name : "???")); file = ""; } else { const char *home = p->pw_dir; const char *name = ".xscreensaver"; file = (char *) malloc(strlen(home) + strlen(name) + 2); strcpy(file, home); if (!*home || home[strlen(home)-1] != '/') strcat(file, "/"); strcat(file, name); } } if (file && *file) return file; else return 0; } static const char * init_file_tmp_name (void) { static char *file = 0; if (!file) { const char *name = init_file_name(); const char *suffix = ".tmp"; char *n2 = chase_symlinks (name); if (n2) name = n2; if (!name || !*name) file = ""; else { file = (char *) malloc(strlen(name) + strlen(suffix) + 2); strcpy(file, name); strcat(file, suffix); } if (n2) free (n2); } if (file && *file) return file; else return 0; } static int get_byte_resource (Display *dpy, char *name, char *class) { char *s = get_string_resource (dpy, name, class); char *s2 = s; int n = 0; if (!s) return 0; while (isspace(*s2)) s2++; while (*s2 >= '0' && *s2 <= '9') { n = (n * 10) + (*s2 - '0'); s2++; } while (isspace(*s2)) s2++; if (*s2 == 'k' || *s2 == 'K') n <<= 10; else if (*s2 == 'm' || *s2 == 'M') n <<= 20; else if (*s2 == 'g' || *s2 == 'G') n <<= 30; else if (*s2) { LOSE: fprintf (stderr, "%s: %s must be a number of bytes, not \"%s\".\n", progname, name, s); free (s); return 0; } s2++; if (*s2 == 'b' || *s2 == 'B') s2++; while (isspace(*s2)) s2++; if (*s2) goto LOSE; free (s); return n; } static const char * const prefs[] = { "timeout", "cycle", "lock", "lockVTs", /* not saved */ "lockTimeout", "passwdTimeout", "visualID", "installColormap", "verbose", "timestamp", "splash", "splashDuration", "quad", "demoCommand", "prefsCommand", "newLoginCommand", "helpURL", /* not saved */ "loadURL", /* not saved */ "newLoginCommand", /* not saved */ "nice", "memoryLimit", "fade", "unfade", "fadeSeconds", "fadeTicks", "captureStderr", "captureStdout", /* not saved -- obsolete */ "logFile", /* not saved */ "ignoreUninstalledPrograms", "font", "dpmsEnabled", "dpmsQuickOff", "dpmsStandby", "dpmsSuspend", "dpmsOff", "grabDesktopImages", "grabVideoFrames", "chooseRandomImages", "imageDirectory", "mode", "selected", "textMode", "textLiteral", "textFile", "textProgram", "textURL", "", "programs", "", "pointerPollTime", "pointerHysteresis", "windowCreationTimeout", "initialDelay", "sgiSaverExtension", /* not saved -- obsolete */ "mitSaverExtension", /* not saved -- obsolete */ "xidleExtension", /* not saved -- obsolete */ "GetViewPortIsFullOfLies", "procInterrupts", "xinputExtensionDev", "overlayStderr", "overlayTextBackground", /* not saved -- X resources only */ "overlayTextForeground", /* not saved -- X resources only */ "bourneShell", /* not saved -- X resources only */ "authWarningSlack", 0 }; static char * strip (char *s) { char *s2; while (*s == '\t' || *s == ' ' || *s == '\r' || *s == '\n') s++; for (s2 = s; *s2; s2++) ; for (s2--; s2 >= s; s2--) if (*s2 == '\t' || *s2 == ' ' || *s2 == '\r' || *s2 =='\n') *s2 = 0; else break; return s; } /* Reading */ static int handle_entry (XrmDatabase *db, const char *key, const char *value, const char *filename, int line) { int i; for (i = 0; prefs[i]; i++) if (*prefs[i] && !strcasecmp(key, prefs[i])) { char *val = strdup(value); char *spec = (char *) malloc(strlen(progclass) + strlen(prefs[i]) +10); strcpy(spec, progclass); strcat(spec, "."); strcat(spec, prefs[i]); XrmPutStringResource (db, spec, val); free(spec); free(val); return 0; } fprintf(stderr, "%s: %s:%d: unknown option \"%s\"\n", blurb(), filename, line, key); return 1; } static int parse_init_file (saver_preferences *p) { time_t write_date = 0; const char *name = init_file_name(); int line = 0; struct stat st; FILE *in; int buf_size = 1024; char *buf; if (!name) return 0; if (stat(name, &st) != 0) { p->init_file_date = 0; return 0; } in = fopen(name, "r"); if (!in) { char *buf = (char *) malloc(1024 + strlen(name)); sprintf(buf, "%s: error reading \"%s\"", blurb(), name); perror(buf); free(buf); return -1; } if (fstat (fileno(in), &st) == 0) { write_date = st.st_mtime; } else { char *buf = (char *) malloc(1024 + strlen(name)); sprintf(buf, "%s: couldn't re-stat \"%s\"", blurb(), name); perror(buf); free(buf); return -1; } buf = (char *) malloc(buf_size); while (fgets (buf, buf_size-1, in)) { char *key, *value; int L = strlen(buf); line++; while (L > 2 && (buf[L-1] != '\n' || /* whole line didn't fit in buffer */ buf[L-2] == '\\')) /* or line ended with backslash */ { if (buf[L-2] == '\\') /* backslash-newline gets swallowed */ { buf[L-2] = 0; L -= 2; } buf_size += 1024; buf = (char *) realloc(buf, buf_size); if (!buf) exit(1); line++; if (!fgets (buf + L, buf_size-L-1, in)) break; L = strlen(buf); } /* Now handle other backslash escapes. */ { int i, j; for (i = 0; buf[i]; i++) if (buf[i] == '\\') { switch (buf[i+1]) { case 'n': buf[i] = '\n'; break; case 'r': buf[i] = '\r'; break; case 't': buf[i] = '\t'; break; default: buf[i] = buf[i+1]; break; } for (j = i+2; buf[j]; j++) buf[j-1] = buf[j]; buf[j-1] = 0; } } key = strip(buf); if (*key == '#' || *key == '!' || *key == ';' || *key == '\n' || *key == 0) continue; value = strchr (key, ':'); if (!value) { fprintf(stderr, "%s: %s:%d: unparsable line: %s\n", blurb(), name, line, key); continue; } else { *value++ = 0; value = strip(value); } if (!p->db) abort(); handle_entry (&p->db, key, value, name, line); } fclose (in); free(buf); p->init_file_date = write_date; return 0; } Bool init_file_changed_p (saver_preferences *p) { const char *name = init_file_name(); struct stat st; if (!name) return False; if (stat(name, &st) != 0) return False; if (p->init_file_date == st.st_mtime) return False; return True; } /* Writing */ static int tab_to (FILE *out, int from, int to) { int tab_width = 8; int to_mod = (to / tab_width) * tab_width; while (from < to_mod) { fprintf(out, "\t"); from = (((from / tab_width) + 1) * tab_width); } while (from < to) { fprintf(out, " "); from++; } return from; } static char * stab_to (char *out, int from, int to) { int tab_width = 8; int to_mod = (to / tab_width) * tab_width; while (from < to_mod) { *out++ = '\t'; from = (((from / tab_width) + 1) * tab_width); } while (from < to) { *out++ = ' '; from++; } return out; } static int string_columns (const char *string, int length, int start) { int tab_width = 8; int col = start; const char *end = string + length; while (string < end) { if (*string == '\n') col = 0; else if (*string == '\t') col = (((col / tab_width) + 1) * tab_width); else col++; string++; } return col; } static void write_entry (FILE *out, const char *key, const char *value) { char *v = strdup(value ? value : ""); char *v2 = v; char *nl = 0; int col; Bool programs_p = (!strcmp(key, "programs")); int tab = (programs_p ? 32 : 16); Bool first = True; fprintf(out, "%s:", key); col = strlen(key) + 1; if (strlen(key) > 14) col = tab_to (out, col, 20); while (1) { if (!programs_p) v2 = strip(v2); nl = strchr(v2, '\n'); if (nl) *nl = 0; if (first && programs_p) { col = tab_to (out, col, 77); fprintf (out, " \\\n"); col = 0; } if (first) first = False; else { col = tab_to (out, col, 75); fprintf (out, " \\n\\\n"); col = 0; } if (!programs_p) col = tab_to (out, col, tab); if (programs_p && string_columns(v2, strlen (v2), col) + col > 75) { int L = strlen (v2); int start = 0; int end = start; while (start < L) { while (v2[end] == ' ' || v2[end] == '\t') end++; while (v2[end] != ' ' && v2[end] != '\t' && v2[end] != '\n' && v2[end] != 0) end++; if (string_columns (v2 + start, (end - start), col) >= 74) { col = tab_to (out, col, 75); fprintf(out, " \\\n"); col = tab_to (out, 0, tab + 2); while (v2[start] == ' ' || v2[start] == '\t') start++; } col = string_columns (v2 + start, (end - start), col); while (start < end) fputc(v2[start++], out); } } else { fprintf (out, "%s", v2); col += string_columns(v2, strlen (v2), col); } if (nl) v2 = nl + 1; else break; } fprintf(out, "\n"); free(v); } int write_init_file (Display *dpy, saver_preferences *p, const char *version_string, Bool verbose_p) { int status = -1; const char *name = init_file_name(); const char *tmp_name = init_file_tmp_name(); char *n2 = chase_symlinks (name); struct stat st; int i, j; /* Kludge, since these aren't in the saver_preferences struct as strings... */ char *visual_name; char *programs; Bool overlay_stderr_p; char *stderr_font; FILE *out; if (!name) goto END; if (n2) name = n2; /* Throttle the various timeouts to reasonable values before writing the file to disk. */ stop_the_insanity (p); if (verbose_p) fprintf (stderr, "%s: writing \"%s\".\n", blurb(), name); unlink (tmp_name); out = fopen(tmp_name, "w"); if (!out) { char *buf = (char *) malloc(1024 + strlen(name)); sprintf(buf, "%s: error writing \"%s\"", blurb(), name); perror(buf); free(buf); goto END; } /* Give the new .xscreensaver file the same permissions as the old one; except ensure that it is readable and writable by owner, and not executable. Extra hack: if we're running as root, make the file be world-readable (so that the daemon, running as "nobody", will still be able to read it.) */ if (stat(name, &st) == 0) { mode_t mode = st.st_mode; mode |= S_IRUSR | S_IWUSR; /* read/write by user */ mode &= ~(S_IXUSR | S_IXGRP | S_IXOTH); /* executable by none */ if (getuid() == (uid_t) 0) /* read by group/other */ mode |= S_IRGRP | S_IROTH; if (fchmod (fileno(out), mode) != 0) { char *buf = (char *) malloc(1024 + strlen(name)); sprintf (buf, "%s: error fchmodding \"%s\" to 0%o", blurb(), tmp_name, (unsigned int) mode); perror(buf); free(buf); goto END; } } /* Kludge, since these aren't in the saver_preferences struct... */ visual_name = get_string_resource (dpy, "visualID", "VisualID"); programs = 0; overlay_stderr_p = get_boolean_resource (dpy, "overlayStderr", "Boolean"); stderr_font = get_string_resource (dpy, "font", "Font"); i = 0; { char *ss; char **hack_strings = (char **) calloc (p->screenhacks_count, sizeof(char *)); for (j = 0; j < p->screenhacks_count; j++) { hack_strings[j] = format_hack (dpy, p->screenhacks[j], True); i += strlen (hack_strings[j]); i += 2; } ss = programs = (char *) malloc(i + 10); *ss = 0; for (j = 0; j < p->screenhacks_count; j++) { strcat (ss, hack_strings[j]); free (hack_strings[j]); ss += strlen(ss); *ss++ = '\n'; *ss = 0; } free (hack_strings); } { struct passwd *pw = getpwuid (getuid ()); char *whoami = (pw && pw->pw_name && *pw->pw_name ? pw->pw_name : ""); time_t now = time ((time_t *) 0); char *timestr = (char *) ctime (&now); char *nl = (char *) strchr (timestr, '\n'); if (nl) *nl = 0; fprintf (out, "# %s Preferences File\n" "# Written by %s %s for %s on %s.\n" "# http://www.jwz.org/xscreensaver/\n" "\n", progclass, progname, version_string, whoami, timestr); } for (j = 0; prefs[j]; j++) { char buf[255]; const char *pr = prefs[j]; enum pref_type { pref_str, pref_int, pref_bool, pref_byte, pref_time } type = pref_str; const char *s = 0; int i = 0; Bool b = False; Time t = 0; if (pr && !*pr) { fprintf(out, "\n"); continue; } # undef CHECK # define CHECK(X) else if (!strcmp(pr, X)) if (!pr || !*pr) ; CHECK("timeout") type = pref_time, t = p->timeout; CHECK("cycle") type = pref_time, t = p->cycle; CHECK("lock") type = pref_bool, b = p->lock_p; CHECK("lockVTs") continue; /* don't save, unused */ CHECK("lockTimeout") type = pref_time, t = p->lock_timeout; CHECK("passwdTimeout") type = pref_time, t = p->passwd_timeout; CHECK("visualID") type = pref_str, s = visual_name; CHECK("installColormap") type = pref_bool, b = p->install_cmap_p; CHECK("verbose") type = pref_bool, b = p->verbose_p; CHECK("timestamp") type = pref_bool, b = p->timestamp_p; CHECK("splash") type = pref_bool, b = p->splash_p; CHECK("splashDuration") type = pref_time, t = p->splash_duration; # ifdef QUAD_MODE CHECK("quad") type = pref_bool, b = p->quad_p; # else /* !QUAD_MODE */ CHECK("quad") continue; /* don't save */ # endif /* !QUAD_MODE */ CHECK("demoCommand") type = pref_str, s = p->demo_command; CHECK("prefsCommand") type = pref_str, s = p->prefs_command; /* CHECK("helpURL") type = pref_str, s = p->help_url; */ CHECK("helpURL") continue; /* don't save */ /* CHECK("loadURL") type = pref_str, s = p->load_url_command; */ CHECK("loadURL") continue; /* don't save */ /* CHECK("newLoginCommand") type = pref_str, s = p->new_login_command; */ CHECK("newLoginCommand") continue; /* don't save */ CHECK("nice") type = pref_int, i = p->nice_inferior; CHECK("memoryLimit") type = pref_byte, i = p->inferior_memory_limit; CHECK("fade") type = pref_bool, b = p->fade_p; CHECK("unfade") type = pref_bool, b = p->unfade_p; CHECK("fadeSeconds") type = pref_time, t = p->fade_seconds; CHECK("fadeTicks") type = pref_int, i = p->fade_ticks; CHECK("captureStderr") type = pref_bool, b = p->capture_stderr_p; CHECK("captureStdout") continue; /* don't save */ CHECK("logFile") continue; /* don't save */ CHECK("ignoreUninstalledPrograms") type = pref_bool, b = p->ignore_uninstalled_p; CHECK("font") type = pref_str, s = stderr_font; CHECK("dpmsEnabled") type = pref_bool, b = p->dpms_enabled_p; CHECK("dpmsQuickOff") type = pref_bool, b = p->dpms_quickoff_p; CHECK("dpmsStandby") type = pref_time, t = p->dpms_standby; CHECK("dpmsSuspend") type = pref_time, t = p->dpms_suspend; CHECK("dpmsOff") type = pref_time, t = p->dpms_off; CHECK("grabDesktopImages") type =pref_bool, b = p->grab_desktop_p; CHECK("grabVideoFrames") type =pref_bool, b = p->grab_video_p; CHECK("chooseRandomImages")type =pref_bool, b = p->random_image_p; CHECK("imageDirectory") type =pref_str, s = p->image_directory; CHECK("mode") type = pref_str, s = (p->mode == ONE_HACK ? "one" : p->mode == BLANK_ONLY ? "blank" : p->mode == DONT_BLANK ? "off" : p->mode == RANDOM_HACKS_SAME ? "random-same" : "random"); CHECK("selected") type = pref_int, i = p->selected_hack; CHECK("textMode") type = pref_str, s = (p->tmode == TEXT_URL ? "url" : p->tmode == TEXT_LITERAL ? "literal" : p->tmode == TEXT_FILE ? "file" : p->tmode == TEXT_PROGRAM ? "program" : "date"); CHECK("textLiteral") type = pref_str, s = p->text_literal; CHECK("textFile") type = pref_str, s = p->text_file; CHECK("textProgram") type = pref_str, s = p->text_program; CHECK("textURL") type = pref_str, s = p->text_url; CHECK("programs") type = pref_str, s = programs; CHECK("pointerPollTime") type = pref_time, t = p->pointer_timeout; CHECK("pointerHysteresis")type = pref_int, i = p->pointer_hysteresis; CHECK("windowCreationTimeout")type=pref_time,t= p->notice_events_timeout; CHECK("initialDelay") type = pref_time, t = p->initial_delay; CHECK("sgiSaverExtension") continue; /* don't save */ CHECK("mitSaverExtension") continue; /* don't save */ CHECK("xidleExtension") continue; /* don't save */ CHECK("procInterrupts") type = pref_bool, b = p->use_proc_interrupts; CHECK("xinputExtensionDev") type = pref_bool, b = p->use_xinput_extension; CHECK("GetViewPortIsFullOfLies") type = pref_bool, b = p->getviewport_full_of_lies_p; CHECK("overlayStderr") type = pref_bool, b = overlay_stderr_p; CHECK("overlayTextBackground") continue; /* don't save */ CHECK("overlayTextForeground") continue; /* don't save */ CHECK("bourneShell") continue; /* don't save */ CHECK("authWarningSlack") type = pref_int, i = p->auth_warning_slack; else abort(); # undef CHECK switch (type) { case pref_str: break; case pref_int: sprintf(buf, "%d", i); s = buf; break; case pref_bool: s = b ? "True" : "False"; break; case pref_time: { unsigned int hour = 0, min = 0, sec = (unsigned int) (t/1000); if (sec >= 60) { min += (sec / 60); sec %= 60; } if (min >= 60) { hour += (min / 60); min %= 60; } sprintf (buf, "%u:%02u:%02u", hour, min, sec); s = buf; } break; case pref_byte: { if (i >= (1<<30) && i == ((i >> 30) << 30)) sprintf(buf, "%dG", i >> 30); else if (i >= (1<<20) && i == ((i >> 20) << 20)) sprintf(buf, "%dM", i >> 20); else if (i >= (1<<10) && i == ((i >> 10) << 10)) sprintf(buf, "%dK", i >> 10); else sprintf(buf, "%d", i); s = buf; } break; default: abort(); break; } if (pr && (!strcmp(pr, "mode") || !strcmp(pr, "textMode"))) fprintf(out, "\n"); write_entry (out, pr, s); } fprintf(out, "\n"); if (visual_name) free(visual_name); if (stderr_font) free(stderr_font); if (programs) free(programs); if (fclose(out) == 0) { time_t write_date = 0; if (stat(tmp_name, &st) == 0) { write_date = st.st_mtime; } else { char *buf = (char *) malloc(1024 + strlen(tmp_name) + strlen(name)); sprintf(buf, "%s: couldn't stat \"%s\"", blurb(), tmp_name); perror(buf); unlink (tmp_name); free(buf); goto END; } if (rename (tmp_name, name) != 0) { char *buf = (char *) malloc(1024 + strlen(tmp_name) + strlen(name)); sprintf(buf, "%s: error renaming \"%s\" to \"%s\"", blurb(), tmp_name, name); perror(buf); unlink (tmp_name); free(buf); goto END; } else { p->init_file_date = write_date; /* Since the .xscreensaver file is used for IPC, let's try and make sure that the bits actually land on the disk right away. */ sync (); status = 0; /* wrote and renamed successfully! */ } } else { char *buf = (char *) malloc(1024 + strlen(name)); sprintf(buf, "%s: error closing \"%s\"", blurb(), name); perror(buf); free(buf); unlink (tmp_name); goto END; } END: if (n2) free (n2); return status; } /* Parsing the resource database */ void free_screenhack (screenhack *hack) { if (hack->visual) free (hack->visual); if (hack->name) free (hack->name); free (hack->command); memset (hack, 0, sizeof(*hack)); free (hack); } static void free_screenhack_list (screenhack **list, int count) { int i; if (!list) return; for (i = 0; i < count; i++) if (list[i]) free_screenhack (list[i]); free (list); } /* Populate `saver_preferences' with the contents of the resource database. Note that this may be called multiple times -- it is re-run each time the ~/.xscreensaver file is reloaded. This function can be very noisy, since it issues resource syntax errors and so on. */ void load_init_file (Display *dpy, saver_preferences *p) { static Bool first_time = True; screenhack **system_default_screenhacks = 0; int system_default_screenhack_count = 0; if (first_time) { /* Get the programs resource before the .xscreensaver file has been parsed and merged into the resource database for the first time: this is the value of *programs from the app-defaults file. Then clear it out so that it will be parsed again later, after the init file has been read. */ get_screenhacks (dpy, p); system_default_screenhacks = p->screenhacks; system_default_screenhack_count = p->screenhacks_count; p->screenhacks = 0; p->screenhacks_count = 0; } if (parse_init_file (p) != 0) /* file might have gone away */ if (!first_time) return; first_time = False; p->xsync_p = get_boolean_resource (dpy, "synchronous", "Synchronous"); p->verbose_p = get_boolean_resource (dpy, "verbose", "Boolean"); p->timestamp_p = get_boolean_resource (dpy, "timestamp", "Boolean"); p->lock_p = get_boolean_resource (dpy, "lock", "Boolean"); p->fade_p = get_boolean_resource (dpy, "fade", "Boolean"); p->unfade_p = get_boolean_resource (dpy, "unfade", "Boolean"); p->fade_seconds = 1000 * get_seconds_resource (dpy, "fadeSeconds", "Time"); p->fade_ticks = get_integer_resource (dpy, "fadeTicks", "Integer"); p->install_cmap_p = get_boolean_resource (dpy, "installColormap", "Boolean"); p->nice_inferior = get_integer_resource (dpy, "nice", "Nice"); p->inferior_memory_limit = get_byte_resource (dpy, "memoryLimit", "MemoryLimit"); p->splash_p = get_boolean_resource (dpy, "splash", "Boolean"); # ifdef QUAD_MODE p->quad_p = get_boolean_resource (dpy, "quad", "Boolean"); # endif p->capture_stderr_p = get_boolean_resource (dpy, "captureStderr", "Boolean"); p->ignore_uninstalled_p = get_boolean_resource (dpy, "ignoreUninstalledPrograms", "Boolean"); p->initial_delay = 1000 * get_seconds_resource (dpy, "initialDelay", "Time"); p->splash_duration = 1000 * get_seconds_resource (dpy, "splashDuration", "Time"); p->timeout = 1000 * get_minutes_resource (dpy, "timeout", "Time"); p->lock_timeout = 1000 * get_minutes_resource (dpy, "lockTimeout", "Time"); p->cycle = 1000 * get_minutes_resource (dpy, "cycle", "Time"); p->passwd_timeout = 1000 * get_seconds_resource (dpy, "passwdTimeout", "Time"); p->pointer_timeout = 1000 * get_seconds_resource (dpy, "pointerPollTime", "Time"); p->pointer_hysteresis = get_integer_resource (dpy, "pointerHysteresis","Integer"); p->notice_events_timeout = 1000*get_seconds_resource(dpy, "windowCreationTimeout", "Time"); p->dpms_enabled_p = get_boolean_resource (dpy, "dpmsEnabled", "Boolean"); p->dpms_quickoff_p = get_boolean_resource (dpy, "dpmsQuickOff", "Boolean"); p->dpms_standby = 1000 * get_minutes_resource (dpy, "dpmsStandby", "Time"); p->dpms_suspend = 1000 * get_minutes_resource (dpy, "dpmsSuspend", "Time"); p->dpms_off = 1000 * get_minutes_resource (dpy, "dpmsOff", "Time"); p->grab_desktop_p = get_boolean_resource (dpy, "grabDesktopImages", "Boolean"); p->grab_video_p = get_boolean_resource (dpy, "grabVideoFrames", "Boolean"); p->random_image_p = get_boolean_resource (dpy, "chooseRandomImages", "Boolean"); p->image_directory = get_string_resource (dpy, "imageDirectory", "ImageDirectory"); p->text_literal = get_string_resource (dpy, "textLiteral", "TextLiteral"); p->text_file = get_string_resource (dpy, "textFile", "TextFile"); p->text_program = get_string_resource (dpy, "textProgram", "TextProgram"); p->text_url = get_string_resource (dpy, "textURL", "TextURL"); p->shell = get_string_resource (dpy, "bourneShell", "BourneShell"); p->demo_command = get_string_resource(dpy, "demoCommand", "URL"); p->prefs_command = get_string_resource(dpy, "prefsCommand", "URL"); p->help_url = get_string_resource(dpy, "helpURL", "URL"); p->load_url_command = get_string_resource(dpy, "loadURL", "LoadURL"); p->new_login_command = get_string_resource(dpy, "newLoginCommand", "NewLoginCommand"); p->auth_warning_slack = get_integer_resource(dpy, "authWarningSlack", "Integer"); /* If "*splash" is unset, default to true. */ { char *s = get_string_resource (dpy, "splash", "Boolean"); if (s) free (s); else p->splash_p = True; } /* If "*grabDesktopImages" is unset, default to true. */ { char *s = get_string_resource (dpy, "grabDesktopImages", "Boolean"); if (s) free (s); else p->grab_desktop_p = True; } p->use_xidle_extension = get_boolean_resource (dpy, "xidleExtension","Boolean"); #if 0 /* obsolete. */ p->use_sgi_saver_extension = get_boolean_resource (dpy, "sgiSaverExtension", "Boolean"); #endif #ifdef HAVE_XINPUT p->use_xinput_extension = get_boolean_resource (dpy, "xinputExtensionDev", "Boolean"); #endif #if 0 /* broken and evil. */ p->use_mit_saver_extension = get_boolean_resource (dpy, "mitSaverExtension", "Boolean"); #endif p->use_proc_interrupts = get_boolean_resource (dpy, "procInterrupts", "Boolean"); p->getviewport_full_of_lies_p = get_boolean_resource (dpy, "GetViewPortIsFullOfLies", "Boolean"); get_screenhacks (dpy, p); /* Parse the "programs" resource. */ { char *s = get_string_resource (dpy, "selected", "Integer"); if (!s || !*s) p->selected_hack = -1; else p->selected_hack = get_integer_resource (dpy, "selected", "Integer"); if (s) free (s); if (p->selected_hack < 0 || p->selected_hack >= p->screenhacks_count) p->selected_hack = -1; } { char *s = get_string_resource (dpy, "mode", "Mode"); if (s && !strcasecmp (s, "one")) p->mode = ONE_HACK; else if (s && !strcasecmp (s, "blank")) p->mode = BLANK_ONLY; else if (s && !strcasecmp (s, "off")) p->mode = DONT_BLANK; else if (s && !strcasecmp (s, "random-same")) p->mode = RANDOM_HACKS_SAME; else p->mode = RANDOM_HACKS; if (s) free (s); } { char *s = get_string_resource (dpy, "textMode", "TextMode"); if (s && !strcasecmp (s, "url")) p->tmode = TEXT_URL; else if (s && !strcasecmp (s, "literal")) p->tmode = TEXT_LITERAL; else if (s && !strcasecmp (s, "file")) p->tmode = TEXT_FILE; else if (s && !strcasecmp (s, "program")) p->tmode = TEXT_PROGRAM; else p->tmode = TEXT_DATE; if (s) free (s); } if (system_default_screenhack_count) /* note: first_time is also true */ { merge_system_screenhacks (dpy, p, system_default_screenhacks, system_default_screenhack_count); free_screenhack_list (system_default_screenhacks, system_default_screenhack_count); system_default_screenhacks = 0; system_default_screenhack_count = 0; } if (p->debug_p) { p->xsync_p = True; p->verbose_p = True; p->timestamp_p = True; p->initial_delay = 0; } /* Throttle the various timeouts to reasonable values after reading the disk file. */ stop_the_insanity (p); } /* If there are any hacks in the system-wide defaults that are not in the ~/.xscreensaver file, add the new ones to the end of the list. This does *not* actually save the file. */ static void merge_system_screenhacks (Display *dpy, saver_preferences *p, screenhack **system_list, int system_count) { /* Yeah yeah, this is an N^2 operation, but I don't have hashtables handy, so fuck it. */ int made_space = 0; int i; for (i = 0; i < system_count; i++) { int j; Bool matched_p = False; for (j = 0; j < p->screenhacks_count; j++) { char *name; if (!system_list[i]->name) system_list[i]->name = make_hack_name (dpy, system_list[i]->command); name = p->screenhacks[j]->name; if (!name) name = make_hack_name (dpy, p->screenhacks[j]->command); matched_p = !strcasecmp (name, system_list[i]->name); if (name != p->screenhacks[j]->name) free (name); if (matched_p) break; } if (!matched_p) { /* We have an entry in the system-wide list that is not in the user's .xscreensaver file. Add it to the end. Note that p->screenhacks is a single malloc block, not a linked list, so we have to realloc it. */ screenhack *oh = system_list[i]; screenhack *nh = (screenhack *) malloc (sizeof(screenhack)); if (made_space == 0) { made_space = 10; p->screenhacks = (screenhack **) realloc (p->screenhacks, (p->screenhacks_count + made_space + 1) * sizeof(screenhack)); if (!p->screenhacks) abort(); } nh->enabled_p = oh->enabled_p; nh->visual = oh->visual ? strdup(oh->visual) : 0; nh->name = oh->name ? strdup(oh->name) : 0; nh->command = oh->command ? strdup(oh->command) : 0; p->screenhacks[p->screenhacks_count++] = nh; p->screenhacks[p->screenhacks_count] = 0; made_space--; #if 0 fprintf (stderr, "%s: noticed new hack: %s\n", blurb(), (nh->name ? nh->name : make_hack_name (dpy, nh->command))); #endif } } } /* Parsing the programs resource. */ screenhack * parse_screenhack (const char *line) { screenhack *h = (screenhack *) calloc (1, sizeof(*h)); const char *s; h->enabled_p = True; while (isspace(*line)) line++; /* skip whitespace */ if (*line == '-') /* handle "-" */ { h->enabled_p = False; line++; while (isspace(*line)) line++; /* skip whitespace */ } s = line; /* handle "visual:" */ while (*line && *line != ':' && *line != '"' && !isspace(*line)) line++; if (*line != ':') line = s; else { h->visual = (char *) malloc (line-s+1); strncpy (h->visual, s, line-s); h->visual[line-s] = 0; if (*line == ':') line++; /* skip ":" */ while (isspace(*line)) line++; /* skip whitespace */ } if (*line == '"') /* handle "name" */ { line++; s = line; while (*line && *line != '"') line++; h->name = (char *) malloc (line-s+1); strncpy (h->name, s, line-s); h->name[line-s] = 0; if (*line == '"') line++; /* skip "\"" */ while (isspace(*line)) line++; /* skip whitespace */ } h->command = format_command (line, False); /* handle command */ return h; } static char * format_command (const char *cmd, Bool wrap_p) { int tab = 30; int col = tab; char *cmd2 = (char *) calloc (1, 2 * (strlen (cmd) + 1)); const char *in = cmd; char *out = cmd2; while (*in) { /* shrink all whitespace to one space, for the benefit of the "demo" mode display. We only do this when we can easily tell that the whitespace is not significant (no shell metachars). */ switch (*in) { case '\'': case '"': case '`': case '\\': /* Metachars are scary. Copy the rest of the line unchanged. */ while (*in) *out++ = *in++, col++; break; case ' ': case '\t': /* Squeeze all other whitespace down to one space. */ while (*in == ' ' || *in == '\t') in++; *out++ = ' ', col++; break; default: /* Copy other chars unchanged. */ *out++ = *in++, col++; break; } } *out = 0; /* Strip trailing whitespace */ while (out > cmd2 && isspace (out[-1])) *(--out) = 0; return cmd2; } /* Returns a new string describing the shell command. This may be just the name of the program, capitalized. It also may be something from the resource database (gotten by looking for "hacks.XYZ.name", where XYZ is the program.) */ char * make_hack_name (Display *dpy, const char *shell_command) { char *s = strdup (shell_command); char *s2; char res_name[255]; for (s2 = s; *s2; s2++) /* truncate at first whitespace */ if (isspace (*s2)) { *s2 = 0; break; } s2 = strrchr (s, '/'); /* if pathname, take last component */ if (s2) { s2 = strdup (s2+1); free (s); s = s2; } if (strlen (s) > 50) /* 51 is hereby defined as "unreasonable" */ s[50] = 0; sprintf (res_name, "hacks.%s.name", s); /* resource? */ s2 = get_string_resource (dpy, res_name, res_name); if (s2) { free (s); return s2; } for (s2 = s; *s2; s2++) /* if it has any capitals, return it */ if (*s2 >= 'A' && *s2 <= 'Z') return s; if (s[0] >= 'a' && s[0] <= 'z') /* else cap it */ s[0] -= 'a'-'A'; if (s[0] == 'X' && s[1] >= 'a' && s[1] <= 'z') /* (magic leading X) */ s[1] -= 'a'-'A'; if (s[0] == 'G' && s[1] == 'l' && s[2] >= 'a' && s[2] <= 'z') /* (magic leading GL) */ s[1] -= 'a'-'A', s[2] -= 'a'-'A'; return s; } char * format_hack (Display *dpy, screenhack *hack, Bool wrap_p) { int tab = 32; int size; char *h2, *out, *s; int col = 0; char *def_name = make_hack_name (dpy, hack->command); /* Don't ever write out a name for a hack if it's the same as the default. */ if (hack->name && !strcmp (hack->name, def_name)) { free (hack->name); hack->name = 0; } free (def_name); size = (2 * (strlen(hack->command) + (hack->visual ? strlen(hack->visual) : 0) + (hack->name ? strlen(hack->name) : 0) + tab)); h2 = (char *) malloc (size); out = h2; if (!hack->enabled_p) *out++ = '-'; /* write disabled flag */ if (hack->visual && *hack->visual) /* write visual name */ { if (hack->enabled_p) *out++ = ' '; *out++ = ' '; strcpy (out, hack->visual); out += strlen (hack->visual); *out++ = ':'; *out++ = ' '; } *out = 0; col = string_columns (h2, strlen (h2), 0); if (hack->name && *hack->name) /* write pretty name */ { int L = (strlen (hack->name) + 2); if (L + col < tab) out = stab_to (out, col, tab - L - 2); else *out++ = ' '; *out++ = '"'; strcpy (out, hack->name); out += strlen (hack->name); *out++ = '"'; *out = 0; col = string_columns (h2, strlen (h2), 0); if (wrap_p && col >= tab) out = stab_to (out, col, 77); else *out++ = ' '; if (out >= h2+size) abort(); } *out = 0; col = string_columns (h2, strlen (h2), 0); out = stab_to (out, col, tab); /* indent */ if (out >= h2+size) abort(); s = format_command (hack->command, wrap_p); strcpy (out, s); out += strlen (s); free (s); *out = 0; return h2; } static void get_screenhacks (Display *dpy, saver_preferences *p) { int i, j; int start = 0; int end = 0; int size; char *d; d = get_string_resource (dpy, "monoPrograms", "MonoPrograms"); if (d && !*d) { free(d); d = 0; } if (!d) d = get_string_resource (dpy, "colorPrograms", "ColorPrograms"); if (d && !*d) { free(d); d = 0; } if (d) { fprintf (stderr, "%s: the `monoPrograms' and `colorPrograms' resources are obsolete;\n\ see the manual for details.\n", blurb()); free(d); } d = get_string_resource (dpy, "programs", "Programs"); free_screenhack_list (p->screenhacks, p->screenhacks_count); p->screenhacks = 0; p->screenhacks_count = 0; if (!d || !*d) return; size = strlen (d); /* Count up the number of newlines (which will be equal to or larger than one less than the number of hacks.) */ for (i = j = 0; d[i]; i++) if (d[i] == '\n') j++; j++; p->screenhacks = (screenhack **) calloc (j + 1, sizeof (screenhack *)); /* Iterate over the lines in `d' (the string with newlines) and make new strings to stuff into the `screenhacks' array. */ p->screenhacks_count = 0; while (start < size) { /* skip forward over whitespace. */ while (d[start] == ' ' || d[start] == '\t' || d[start] == '\n') start++; /* skip forward to newline or end of string. */ end = start; while (d[end] != 0 && d[end] != '\n') end++; /* null terminate. */ d[end] = 0; p->screenhacks[p->screenhacks_count++] = parse_screenhack (d + start); if (p->screenhacks_count >= i) abort(); start = end+1; } free (d); if (p->screenhacks_count == 0) { free (p->screenhacks); p->screenhacks = 0; } } /* Make sure all the values in the preferences struct are sane. */ static void stop_the_insanity (saver_preferences *p) { if (p->passwd_timeout <= 0) p->passwd_timeout = 30000; /* 30 secs */ if (p->timeout < 15000) p->timeout = 15000; /* 15 secs */ if (p->cycle != 0 && p->cycle < 2000) p->cycle = 2000; /* 2 secs */ if (p->pointer_timeout <= 0) p->pointer_timeout = 5000; /* 5 secs */ if (p->notice_events_timeout <= 0) p->notice_events_timeout = 10000; /* 10 secs */ if (p->fade_seconds <= 0 || p->fade_ticks <= 0) p->fade_p = False; if (! p->fade_p) p->unfade_p = False; /* The DPMS settings may have the value 0. But if they are negative, or are a range less than 10 seconds, reset them to sensible defaults. (Since that must be a mistake.) */ if (p->dpms_standby != 0 && p->dpms_standby < 10 * 1000) p->dpms_standby = 2 * 60 * 60 * 1000; /* 2 hours */ if (p->dpms_suspend != 0 && p->dpms_suspend < 10 * 1000) p->dpms_suspend = 2 * 60 * 60 * 1000; /* 2 hours */ if (p->dpms_off != 0 && p->dpms_off < 10 * 1000) p->dpms_off = 4 * 60 * 60 * 1000; /* 4 hours */ /* suspend may not be greater than off, unless off is 0. standby may not be greater than suspend, unless suspend is 0. */ if (p->dpms_off != 0 && p->dpms_suspend > p->dpms_off) p->dpms_suspend = p->dpms_off; if (p->dpms_suspend != 0 && p->dpms_standby > p->dpms_suspend) p->dpms_standby = p->dpms_suspend; /* These fixes above ignores the case suspend = 0 and standby > off ... */ if (p->dpms_off != 0 && p->dpms_standby > p->dpms_off) p->dpms_standby = p->dpms_off; if (p->dpms_standby == 0 && /* if *all* are 0, then DPMS is disabled */ p->dpms_suspend == 0 && p->dpms_off == 0 && !(p->dpms_quickoff_p) /* ... but we want to do DPMS quick off */ ) p->dpms_enabled_p = False; /* Set watchdog timeout to about half of the cycle timeout, but don't let it be faster than 1/2 minute or slower than 1 minute. */ p->watchdog_timeout = p->cycle * 0.6; if (p->watchdog_timeout < 27000) p->watchdog_timeout = 27000; /* 27 secs */ 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->auth_warning_slack < 0) p->auth_warning_slack = 0; if (p->auth_warning_slack > 300) p->auth_warning_slack = 300; } Bool senescent_p (void) { /* If you are in here because you're planning on disabling this warning before redistributing my software, please don't. I sincerely request that you do one of the following: 1: leave this code intact and this warning in place, -OR- 2: Remove xscreensaver from your distribution. I would seriously prefer that you not distribute my software at all than that you distribute one version and then never update it for years. I am *constantly* getting email from users reporting bugs that have been fixed for literally years who have no idea that the software they are running is years out of date. Yes, it would be great if we lived in the ideal world where people checked that they were running the latest release before they report a bug, but we don't. To most people, "running the latest release" is synonymous with "running the latest release that my distro packages for me." When they even bother to tell me what version they're running, I say, "That version is three years old!", and they say "But this is the latest version my distro ships". Then I say, "your distro sucks", and they say "but I don't know how to compile from source, herp derp I eat paste", and *everybody* goes away unhappy. It wastes an enormous amount of my time, and kind of makes me regret ever having released this software in the first place. So seriously. I ask that if you're planning on disabling this obsolescence warning, that you instead just remove xscreensaver from your distro entirely. Everybody will be happier that way. Check out gnome-screensaver instead, I understand it's really nice. Of course, my license allows you to ignore me and do whatever the fuck you want, but as the author, I hope you will have the common courtesy of complying with my request. Thank you! jwz, 2014 */ time_t now = time ((time_t *) 0); /* N */ struct tm *tm = localtime (&now); /* o */ const char *s = screensaver_id; /* */ char mon[4], year[5]; /* d */ int m, y, months; /* o */ s = strchr (s, ' '); if (!s) abort(); s++; /* n */ s = strchr (s, '('); if (!s) abort(); s++; /* ' */ s = strchr (s, '-'); if (!s) abort(); s++; /* t */ strncpy (mon, s, 3); /* */ mon[3] = 0; /* d */ s = strchr (s, '-'); if (!s) abort(); s++; /* o */ strncpy (year, s, 4); /* */ year[4] = 0; /* i */ y = atoi (year); /* t */ if (!strcmp(mon, "Jan")) m = 0; /* , */ else if (!strcmp(mon, "Feb")) m = 1; /* */ else if (!strcmp(mon, "Mar")) m = 2; /* s */ else if (!strcmp(mon, "Apr")) m = 3; /* t */ else if (!strcmp(mon, "May")) m = 4; /* o */ else if (!strcmp(mon, "Jun")) m = 5; /* p */ else if (!strcmp(mon, "Jul")) m = 6; /* , */ else if (!strcmp(mon, "Aug")) m = 7; /* */ else if (!strcmp(mon, "Sep")) m = 8; /* s */ else if (!strcmp(mon, "Oct")) m = 9; /* t */ else if (!strcmp(mon, "Nov")) m = 10; /* a */ else if (!strcmp(mon, "Dec")) m = 11; /* a */ else abort(); /* a */ months = ((((tm->tm_year + 1900) * 12) + tm->tm_mon) - /* h */ (y * 12 + m)); /* h */ /* h */ return (months > 18); /* p */ } xscreensaver-5.34/driver/dpms.c000644 000767 000767 00000022705 12327101134 016263 0ustar00jwzjwz000000 000000 /* dpms.c --- syncing the X Display Power Management values * xscreensaver, Copyright (c) 2001-2011 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ /* Display Power Management System (DPMS.) On XFree86 systems, "man xset" reports: -dpms The -dpms option disables DPMS (Energy Star) features. +dpms The +dpms option enables DPMS (Energy Star) features. dpms flags... The dpms option allows the DPMS (Energy Star) parameters to be set. The option can take up to three numerical values, or the `force' flag followed by a DPMS state. The `force' flags forces the server to immediately switch to the DPMS state specified. The DPMS state can be one of `standby', `suspend', or `off'. When numerical values are given, they set the inactivity period before the three modes are activated. The first value given is for the `standby' mode, the second is for the `suspend' mode, and the third is for the `off' mode. Setting these values implicitly enables the DPMS features. A value of zero disables a particular mode. However, note that the implementation is more than a little bogus, in that there is code in /usr/X11R6/lib/libXdpms.a to implement all the usual server-extension-querying utilities -- but there are no prototypes in any header file! Thus, the prototypes here. (The stuff in X11/extensions/dpms.h and X11/extensions/dpmsstr.h define the raw X protcol, they don't define the API to libXdpms.a.) Some documentation: Library: ftp://ftp.x.org/pub/R6.4/xc/doc/specs/Xext/DPMSLib.ms Protocol: ftp://ftp.x.org/pub/R6.4/xc/doc/specs/Xext/DPMS.ms */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #ifdef HAVE_DPMS_EXTENSION /* almost the whole file */ # include # include /*# include */ /* Why this crap is not in a header file somewhere, I have no idea. Losers! */ extern Bool DPMSQueryExtension (Display *, int *event_ret, int *err_ret); extern Status DPMSGetVersion (Display *, int *major_ret, int *minor_ret); extern Bool DPMSCapable (Display *); extern Status DPMSInfo (Display *, CARD16 *power_level, BOOL *state); extern Status DPMSEnable (Display *dpy); extern Status DPMSDisable (Display *dpy); extern Status DPMSForceLevel (Display *, CARD16 level); extern Status DPMSSetTimeouts (Display *, CARD16 standby, CARD16 suspend, CARD16 off); extern Bool DPMSGetTimeouts (Display *, CARD16 *standby, CARD16 *suspend, CARD16 *off); #endif /* HAVE_DPMS_EXTENSION */ /* This file doesn't need the Xt headers, so stub these types out... */ #undef XtPointer #define XtAppContext void* #define XrmDatabase void* #define XtIntervalId void* #define XtPointer void* #define Widget void* #include "xscreensaver.h" #ifdef HAVE_DPMS_EXTENSION static Bool error_handler_hit_p = False; static int ignore_all_errors_ehandler (Display *dpy, XErrorEvent *error) { error_handler_hit_p = True; return 0; } void sync_server_dpms_settings (Display *dpy, Bool enabled_p, Bool dpms_quickoff_p, int standby_secs, int suspend_secs, int off_secs, Bool verbose_p) { int event = 0, error = 0; BOOL o_enabled = False; CARD16 o_power = 0; CARD16 o_standby = 0, o_suspend = 0, o_off = 0; Bool bogus_p = False; if (dpms_quickoff_p && !off_secs) { /* To do this, we might need to temporarily re-enable DPMS first. */ off_secs = 0xFFFF; } if (standby_secs == 0 && suspend_secs == 0 && off_secs == 0) /* all zero implies "DPMS disabled" */ enabled_p = False; else if ((standby_secs != 0 && standby_secs < 10) || (suspend_secs != 0 && suspend_secs < 10) || (off_secs != 0 && off_secs < 10)) /* any negative, or any positive-and-less-than-10-seconds, is crazy. */ bogus_p = True; if (bogus_p) enabled_p = False; /* X protocol sends these values in a CARD16, so truncate them to 16 bits. This means that the maximum timeout is 18:12:15. */ if (standby_secs > 0xFFFF) standby_secs = 0xFFFF; if (suspend_secs > 0xFFFF) suspend_secs = 0xFFFF; if (off_secs > 0xFFFF) off_secs = 0xFFFF; if (! DPMSQueryExtension (dpy, &event, &error)) { if (verbose_p) fprintf (stderr, "%s: XDPMS extension not supported.\n", blurb()); return; } if (! DPMSCapable (dpy)) { if (verbose_p) fprintf (stderr, "%s: DPMS not supported.\n", blurb()); return; } if (! DPMSInfo (dpy, &o_power, &o_enabled)) { if (verbose_p) fprintf (stderr, "%s: unable to get DPMS state.\n", blurb()); return; } if (o_enabled != enabled_p) { if (! (enabled_p ? DPMSEnable (dpy) : DPMSDisable (dpy))) { if (verbose_p) fprintf (stderr, "%s: unable to set DPMS state.\n", blurb()); return; } else if (verbose_p) fprintf (stderr, "%s: turned DPMS %s.\n", blurb(), enabled_p ? "on" : "off"); } if (bogus_p) { if (verbose_p) fprintf (stderr, "%s: not setting bogus DPMS timeouts: %d %d %d.\n", blurb(), standby_secs, suspend_secs, off_secs); return; } if (!DPMSGetTimeouts (dpy, &o_standby, &o_suspend, &o_off)) { if (verbose_p) fprintf (stderr, "%s: unable to get DPMS timeouts.\n", blurb()); return; } if (o_standby != standby_secs || o_suspend != suspend_secs || o_off != off_secs) { if (!DPMSSetTimeouts (dpy, standby_secs, suspend_secs, off_secs)) { if (verbose_p) fprintf (stderr, "%s: unable to set DPMS timeouts.\n", blurb()); return; } else if (verbose_p) fprintf (stderr, "%s: set DPMS timeouts: %d %d %d.\n", blurb(), standby_secs, suspend_secs, off_secs); } } Bool monitor_powered_on_p (saver_info *si) { Bool result; int event_number, error_number; BOOL onoff = False; CARD16 state; if (!DPMSQueryExtension(si->dpy, &event_number, &error_number)) /* Server doesn't know -- assume the monitor is on. */ result = True; else if (!DPMSCapable(si->dpy)) /* Server says the monitor doesn't do power management -- so it's on. */ result = True; else { DPMSInfo(si->dpy, &state, &onoff); if (!onoff) /* Server says DPMS is disabled -- so the monitor is on. */ result = True; else switch (state) { case DPMSModeOn: result = True; break; /* really on */ case DPMSModeStandby: result = False; break; /* kinda off */ case DPMSModeSuspend: result = False; break; /* pretty off */ case DPMSModeOff: result = False; break; /* really off */ default: result = True; break; /* protocol error? */ } } return result; } void monitor_power_on (saver_info *si, Bool on_p) { if ((!!on_p) != monitor_powered_on_p (si)) { XErrorHandler old_handler; int event_number, error_number; if (!DPMSQueryExtension(si->dpy, &event_number, &error_number) || !DPMSCapable(si->dpy)) { if (si->prefs.verbose_p) fprintf (stderr, "%s: unable to power %s monitor: no DPMS extension.\n", blurb(), (on_p ? "on" : "off")); return; } /* The manual for DPMSForceLevel() says that it throws BadMatch if "DPMS is disabled on the specified display." The manual for DPMSCapable() says that it "returns True if the X server is capable of DPMS." Apparently they consider "capable of DPMS" and "DPMS is enabled" to be different things, and so even if DPMSCapable() returns True, DPMSForceLevel() *might* throw an X Error. Isn't that just fucking special. */ XSync (si->dpy, False); error_handler_hit_p = False; old_handler = XSetErrorHandler (ignore_all_errors_ehandler); XSync (si->dpy, False); DPMSForceLevel(si->dpy, (on_p ? DPMSModeOn : DPMSModeOff)); XSync (si->dpy, False); /* Ignore error_handler_hit_p, just probe monitor instead */ if ((!!on_p) != monitor_powered_on_p (si)) /* double-check */ fprintf (stderr, "%s: DPMSForceLevel(dpy, %s) did not change monitor power state.\n", blurb(), (on_p ? "DPMSModeOn" : "DPMSModeOff")); } } #else /* !HAVE_DPMS_EXTENSION */ void sync_server_dpms_settings (Display *dpy, Bool enabled_p, int standby_secs, int suspend_secs, int off_secs, Bool verbose_p) { if (verbose_p) fprintf (stderr, "%s: DPMS support not compiled in.\n", blurb()); } Bool monitor_powered_on_p (saver_info *si) { return True; } void monitor_power_on (saver_info *si, Bool on_p) { return; } #endif /* !HAVE_DPMS_EXTENSION */ xscreensaver-5.34/driver/remote.c000644 000767 000767 00000034571 11433134206 016622 0ustar00jwzjwz000000 000000 /* xscreensaver-command, Copyright (c) 1991-2009 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #ifdef HAVE_SYS_SELECT_H # include #endif /* HAVE_SYS_SELECT_H */ #ifdef HAVE_UNISTD_H # include #endif #include /* for CARD32 */ #include #include #include /* for XGetClassHint() */ #include #include "remote.h" #ifdef _VROOT_H_ ERROR! you must not include vroot.h in this file #endif extern char *progname; extern Atom XA_SCREENSAVER, XA_SCREENSAVER_VERSION, XA_SCREENSAVER_RESPONSE; extern Atom XA_SCREENSAVER_ID, XA_SCREENSAVER_STATUS, XA_EXIT; extern Atom XA_VROOT, XA_SELECT, XA_DEMO, XA_BLANK, XA_LOCK; static XErrorHandler old_handler = 0; static Bool got_badwindow = False; static int BadWindow_ehandler (Display *dpy, XErrorEvent *error) { if (error->error_code == BadWindow) { got_badwindow = True; return 0; } else { fprintf (stderr, "%s: ", progname); if (!old_handler) abort(); return (*old_handler) (dpy, error); } } static Window find_screensaver_window (Display *dpy, char **version) { int i; Window root = RootWindowOfScreen (DefaultScreenOfDisplay (dpy)); Window root2, parent, *kids; unsigned int nkids; if (version) *version = 0; if (! XQueryTree (dpy, root, &root2, &parent, &kids, &nkids)) abort (); if (root != root2) abort (); if (parent) abort (); if (! (kids && nkids)) return 0; for (i = 0; i < nkids; i++) { Atom type; int format; unsigned long nitems, bytesafter; unsigned char *v; int status; /* We're walking the list of root-level windows and trying to find the one that has a particular property on it. We need to trap BadWindows errors while doing this, because it's possible that some random window might get deleted in the meantime. (That window won't have been the one we're looking for.) */ XSync (dpy, False); if (old_handler) abort(); got_badwindow = False; old_handler = XSetErrorHandler (BadWindow_ehandler); status = XGetWindowProperty (dpy, kids[i], XA_SCREENSAVER_VERSION, 0, 200, False, XA_STRING, &type, &format, &nitems, &bytesafter, &v); XSync (dpy, False); XSetErrorHandler (old_handler); old_handler = 0; if (got_badwindow) { status = BadWindow; got_badwindow = False; } if (status == Success && type != None) { Window ret = kids[i]; if (version) *version = (char *) v; XFree (kids); return ret; } } if (kids) XFree (kids); return 0; } static int send_xscreensaver_command (Display *dpy, Atom command, long arg, Window *window_ret, char **error_ret) { int status = -1; char *v = 0; Window window = find_screensaver_window (dpy, &v); XWindowAttributes xgwa; char err[2048]; if (window_ret) *window_ret = window; if (!window) { sprintf (err, "no screensaver is running on display %s", DisplayString (dpy)); if (error_ret) { *error_ret = strdup (err); status = -1; goto DONE; } if (command == XA_EXIT) { /* Don't print an error if xscreensaver is already dead. */ status = 1; goto DONE; } fprintf (stderr, "%s: %s\n", progname, err); status = -1; goto DONE; } /* Select for property change events, so that we can read the response. */ XGetWindowAttributes (dpy, window, &xgwa); XSelectInput (dpy, window, xgwa.your_event_mask | PropertyChangeMask); if (command == XA_SCREENSAVER_STATUS || command == XA_SCREENSAVER_VERSION) { XClassHint hint; memset (&hint, 0, sizeof(hint)); if (!v || !*v) { sprintf (err, "version property not set on window 0x%x?", (unsigned int) window); if (error_ret) *error_ret = strdup (err); else fprintf (stderr, "%s: %s\n", progname, err); status = -1; goto DONE; } XGetClassHint(dpy, window, &hint); if (!hint.res_class) { sprintf (err, "class hints not set on window 0x%x?", (unsigned int) window); if (error_ret) *error_ret = strdup (err); else fprintf (stderr, "%s: %s\n", progname, err); status = -1; goto DONE; } fprintf (stdout, "%s %s", hint.res_class, v); if (command != XA_SCREENSAVER_STATUS) { fprintf (stdout, "\n"); } else { Atom type; int format; unsigned long nitems, bytesafter; unsigned char *dataP = 0; if (XGetWindowProperty (dpy, RootWindow (dpy, 0), XA_SCREENSAVER_STATUS, 0, 999, False, XA_INTEGER, &type, &format, &nitems, &bytesafter, &dataP) == Success && type && dataP) { Atom blanked; time_t tt; char *s; Atom *data = (Atom *) dataP; if (type != XA_INTEGER || nitems < 3) { STATUS_LOSE: if (data) free (data); fprintf (stdout, "\n"); fflush (stdout); fprintf (stderr, "bad status format on root window.\n"); status = -1; goto DONE; } blanked = (Atom) data[0]; tt = (time_t) data[1]; if (tt <= (time_t) 666000000L) /* early 1991 */ goto STATUS_LOSE; if (blanked == XA_BLANK) fputs (": screen blanked since ", stdout); else if (blanked == XA_LOCK) fputs (": screen locked since ", stdout); else if (blanked == 0) /* suggestions for a better way to phrase this are welcome. */ fputs (": screen non-blanked since ", stdout); else /* `blanked' has an unknown value - fail. */ goto STATUS_LOSE; s = ctime(&tt); if (s[strlen(s)-1] == '\n') s[strlen(s)-1] = 0; fputs (s, stdout); { int nhacks = nitems - 2; Bool any = False; int i; for (i = 0; i < nhacks; i++) if (data[i + 2] > 0) { any = True; break; } if (any && nhacks == 1) fprintf (stdout, " (hack #%d)\n", (int) data[2]); else if (any) { fprintf (stdout, " (hacks: "); for (i = 0; i < nhacks; i++) { fprintf (stdout, "#%d", (int) data[2 + i]); if (i != nhacks-1) fputs (", ", stdout); } fputs (")\n", stdout); } else fputs ("\n", stdout); } if (data) free (data); } else { if (dataP) XFree (dataP); fprintf (stdout, "\n"); fflush (stdout); fprintf (stderr, "no saver status on root window.\n"); status = -1; goto DONE; } } /* No need to read a response for these commands. */ status = 1; goto DONE; } else { XEvent event; long arg1 = arg; long arg2 = 0; if (arg < 0) abort(); else if (arg == 0 && command == XA_SELECT) abort(); else if (arg != 0 && command == XA_DEMO) { arg1 = 5000; /* version number of the XA_DEMO protocol, */ arg2 = arg; /* since it didn't use to take an argument. */ } event.xany.type = ClientMessage; event.xclient.display = dpy; event.xclient.window = window; event.xclient.message_type = XA_SCREENSAVER; event.xclient.format = 32; memset (&event.xclient.data, 0, sizeof(event.xclient.data)); event.xclient.data.l[0] = (long) command; event.xclient.data.l[1] = arg1; event.xclient.data.l[2] = arg2; if (! XSendEvent (dpy, window, False, 0L, &event)) { sprintf (err, "XSendEvent(dpy, 0x%x ...) failed.\n", (unsigned int) window); if (error_ret) *error_ret = strdup (err); else fprintf (stderr, "%s: %s\n", progname, err); status = -1; goto DONE; } } status = 0; DONE: if (v) free (v); XSync (dpy, 0); return status; } static Bool xscreensaver_command_event_p (Display *dpy, XEvent *event, XPointer arg) { return (event->xany.type == PropertyNotify && event->xproperty.state == PropertyNewValue && event->xproperty.atom == XA_SCREENSAVER_RESPONSE); } static int xscreensaver_command_response (Display *dpy, Window window, Bool verbose_p, Bool exiting_p, char **error_ret) { int sleep_count = 0; char err[2048]; XEvent event; Bool got_event = False; while (!(got_event = XCheckIfEvent(dpy, &event, &xscreensaver_command_event_p, 0)) && sleep_count++ < 10) { # if defined(HAVE_SELECT) /* Wait for an event, but don't wait longer than 1 sec. Note that we might do this multiple times if an event comes in, but it wasn't the event we're waiting for. */ int fd = XConnectionNumber(dpy); fd_set rset; struct timeval tv; tv.tv_sec = 1; tv.tv_usec = 0; FD_ZERO (&rset); FD_SET (fd, &rset); select (fd+1, &rset, 0, 0, &tv); # else /* !HAVE_SELECT */ sleep(1); # endif /* !HAVE_SELECT */ } if (!got_event) { sprintf (err, "no response to command."); if (error_ret) *error_ret = strdup (err); else fprintf (stderr, "%s: %s\n", progname, err); return -1; } else { Status st2; Atom type; int format; unsigned long nitems, bytesafter; unsigned char *msg = 0; XSync (dpy, False); if (old_handler) abort(); old_handler = XSetErrorHandler (BadWindow_ehandler); st2 = XGetWindowProperty (dpy, window, XA_SCREENSAVER_RESPONSE, 0, 1024, True, AnyPropertyType, &type, &format, &nitems, &bytesafter, &msg); XSync (dpy, False); XSetErrorHandler (old_handler); old_handler = 0; if (got_badwindow) { if (exiting_p) return 0; sprintf (err, "xscreensaver window unexpectedly deleted."); if (error_ret) *error_ret = strdup (err); else fprintf (stderr, "%s: %s\n", progname, err); return -1; } if (st2 == Success && type != None) { if (type != XA_STRING || format != 8) { sprintf (err, "unrecognized response property."); if (error_ret) *error_ret = strdup (err); else fprintf (stderr, "%s: %s\n", progname, err); if (msg) XFree (msg); return -1; } else if (!msg || (msg[0] != '+' && msg[0] != '-')) { sprintf (err, "unrecognized response message."); if (error_ret) *error_ret = strdup (err); else fprintf (stderr, "%s: %s\n", progname, err); if (msg) XFree (msg); return -1; } else { int ret = (msg[0] == '+' ? 0 : -1); sprintf (err, "%s: %s\n", progname, (char *) msg+1); if (error_ret) *error_ret = strdup (err); else if (verbose_p || ret != 0) fprintf ((ret < 0 ? stderr : stdout), "%s\n", err); XFree (msg); return ret; } } } return -1; /* warning suppression: not actually reached */ } int xscreensaver_command (Display *dpy, Atom command, long arg, Bool verbose_p, char **error_ret) { Window w = 0; int status = send_xscreensaver_command (dpy, command, arg, &w, error_ret); if (status == 0) status = xscreensaver_command_response (dpy, w, verbose_p, (command == XA_EXIT), error_ret); fflush (stdout); fflush (stderr); return (status < 0 ? status : 0); } void server_xscreensaver_version (Display *dpy, char **version_ret, char **user_ret, char **host_ret) { Window window = find_screensaver_window (dpy, 0); Atom type; int format; unsigned long nitems, bytesafter; if (version_ret) *version_ret = 0; if (user_ret) *user_ret = 0; if (host_ret) *host_ret = 0; if (!window) return; if (version_ret) { unsigned char *v = 0; XGetWindowProperty (dpy, window, XA_SCREENSAVER_VERSION, 0, 1, False, XA_STRING, &type, &format, &nitems, &bytesafter, &v); if (v) { *version_ret = strdup ((char *) v); XFree (v); } } if (user_ret || host_ret) { unsigned char *id = 0; const char *user = 0; const char *host = 0; XGetWindowProperty (dpy, window, XA_SCREENSAVER_ID, 0, 512, False, XA_STRING, &type, &format, &nitems, &bytesafter, &id); if (id && *id) { const char *old_tag = " on host "; const char *s = strstr ((char *) id, old_tag); if (s) { /* found ID of the form "1234 on host xyz". */ user = 0; host = s + strlen (old_tag); } else { char *o = 0, *p = 0, *c = 0; o = strchr ((char *) id, '('); if (o) p = strchr (o, '@'); if (p) c = strchr (p, ')'); if (c) { /* found ID of the form "1234 (user@host)". */ user = o+1; host = p+1; *p = 0; *c = 0; } } } if (user && *user && *user != '?') *user_ret = strdup (user); else *user_ret = 0; if (host && *host && *host != '?') *host_ret = strdup (host); else *host_ret = 0; if (id) XFree (id); } } xscreensaver-5.34/driver/xscreensaver-command.c000644 000767 000767 00000035502 12612750454 021457 0ustar00jwzjwz000000 000000 /* xscreensaver-command, Copyright (c) 1991-2013 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif /* #include / * for CARD32 */ #include #include #include /* for XGetClassHint() */ #include #include /* only needed to get through xscreensaver.h */ /* You might think that to read an array of 32-bit quantities out of a server-side property, you would pass an array of 32-bit data quantities into XGetWindowProperty(). You would be wrong. You have to use an array of longs, even if long is 64 bits (using 32 of each 64.) */ typedef long PROP32; #include "remote.h" #include "version.h" #ifdef _VROOT_H_ ERROR! you must not include vroot.h in this file #endif char *progname; Atom XA_VROOT; Atom XA_SCREENSAVER, XA_SCREENSAVER_VERSION, XA_SCREENSAVER_RESPONSE; Atom XA_SCREENSAVER_ID, XA_SCREENSAVER_STATUS, XA_SELECT, XA_DEMO, XA_EXIT; Atom XA_BLANK, XA_LOCK; static Atom XA_ACTIVATE, XA_DEACTIVATE, XA_CYCLE, XA_NEXT, XA_PREV; static Atom XA_RESTART, XA_PREFS, XA_THROTTLE, XA_UNTHROTTLE; static char *screensaver_version; # ifdef __GNUC__ __extension__ /* don't warn about "string length is greater than the length ISO C89 compilers are required to support" in the usage string... */ # endif static char *usage = "\n\ usage: %s -