From 1d0bb162647f00161118f5493226ad3c767c3e7f Mon Sep 17 00:00:00 2001 From: Zygo Blaxell Date: Fri, 27 Feb 2009 13:01:14 -0500 Subject: [PATCH] http://se.aminet.net/pub/X11/ftp.x.org/contrib/vms/xscreensaver-124.zip -rw-r--r-- 1 zblaxell zblaxell 1259774 May 4 1995 xscreensaver-124.zip 821fd19d9037557fbadfb34b210ce5fa5f172cde xscreensaver-124.zip --- aaa_vms.notes | Bin 0 -> 2266 bytes driver/.gdbinit | 25 + driver/ad2c | 38 + driver/axpobjs.zip | Bin 0 -> 89128 bytes driver/compile.com | Bin 0 -> 558 bytes driver/compile_axp.com | Bin 0 -> 726 bytes driver/compile_decc.com | Bin 0 -> 726 bytes driver/config.h | 98 ++ driver/demo.c | 601 ++++++++++ driver/dialogs.c | 741 ++++++++++++ driver/dialogs.xd | 569 +++++++++ driver/getpwnam.c | Bin 0 -> 3524 bytes driver/hpwd.c | Bin 0 -> 1604 bytes driver/imakefile | 117 ++ driver/link.com | Bin 0 -> 154 bytes driver/link_axp.com | Bin 0 -> 162 bytes driver/link_decc.com | Bin 0 -> 164 bytes driver/lock.c | 600 ++++++++++ driver/pwd.h | Bin 0 -> 830 bytes driver/readme | 6 + driver/resource.h | 24 + driver/subprocs.c | 672 +++++++++++ driver/timers.c | 365 ++++++ driver/validate.c | Bin 0 -> 1140 bytes driver/vaxdeccobjs.zip | Bin 0 -> 43460 bytes driver/vaxobjs.zip | Bin 0 -> 42518 bytes driver/version.h | 2 + driver/visual.c | 307 +++++ driver/vms.opt | Bin 0 -> 192 bytes driver/vms_axp.opt | Bin 0 -> 350 bytes driver/vms_decc.opt | Bin 0 -> 168 bytes driver/wait.h | 1 + driver/windows.c | 666 +++++++++++ driver/xscreensaver-command.c | 154 +++ driver/xscreensaver-command.exe_axp | Bin 0 -> 8192 bytes driver/xscreensaver-command.exe_vax | Bin 0 -> 5632 bytes driver/xscreensaver-command.hlp | 105 ++ driver/xscreensaver-command.man | 110 ++ driver/xscreensaver.ad | 152 +++ driver/xscreensaver.c | 947 +++++++++++++++ driver/xscreensaver.dat | 152 +++ driver/xscreensaver.exe_axp | Bin 0 -> 114176 bytes driver/xscreensaver.exe_vax | Bin 0 -> 60928 bytes driver/xscreensaver.h | 62 + driver/xscreensaver.hlp | 453 +++++++ driver/xscreensaver.man | 477 ++++++++ driver/xscreensaver_ad.h | 101 ++ hacks/.gdbinit | 3 + hacks/aaa_vms.notes | Bin 0 -> 664 bytes hacks/attraction.c | 611 ++++++++++ hacks/attraction.exe_axp | Bin 0 -> 45056 bytes hacks/attraction.exe_vax | Bin 0 -> 21504 bytes hacks/attraction.hlp | 129 ++ hacks/attraction.man | 132 +++ hacks/axpobjs.zip | Bin 0 -> 151263 bytes hacks/blitspin.c | 277 +++++ hacks/blitspin.exe_axp | Bin 0 -> 44544 bytes hacks/blitspin.exe_vax | Bin 0 -> 36864 bytes hacks/blitspin.hlp | 73 ++ hacks/blitspin.man | 71 ++ hacks/compile.com | Bin 0 -> 574 bytes hacks/compile_axp.com | Bin 0 -> 834 bytes hacks/compile_decc.com | Bin 0 -> 854 bytes hacks/decayscreen.c | 145 +++ hacks/decayscreen.exe_axp | Bin 0 -> 21504 bytes hacks/decayscreen.exe_vax | Bin 0 -> 12288 bytes hacks/decayscreen.hlp | 46 + hacks/decayscreen.man | 46 + hacks/default.xbm | 1686 +++++++++++++++++++++++++++ hacks/flame.c | 282 +++++ hacks/flame.exe_axp | Bin 0 -> 24064 bytes hacks/flame.exe_vax | Bin 0 -> 12288 bytes hacks/flame.hlp | 66 ++ hacks/flame.man | 65 ++ hacks/greynetic.c | 181 +++ hacks/greynetic.exe_axp | Bin 0 -> 18944 bytes hacks/greynetic.exe_vax | Bin 0 -> 13312 bytes hacks/greynetic.hlp | 45 + hacks/greynetic.man | 45 + hacks/halo.c | 345 ++++++ hacks/halo.exe_axp | Bin 0 -> 25600 bytes hacks/halo.exe_vax | Bin 0 -> 13824 bytes hacks/halo.hlp | 55 + hacks/halo.man | 54 + hacks/helix.c | 214 ++++ hacks/helix.exe_axp | Bin 0 -> 24064 bytes hacks/helix.exe_vax | Bin 0 -> 13312 bytes hacks/helix.hlp | 44 + hacks/helix.man | 43 + hacks/hopalong.c | 236 ++++ hacks/hopalong.exe_axp | Bin 0 -> 24064 bytes hacks/hopalong.exe_vax | Bin 0 -> 11776 bytes hacks/hopalong.hlp | 63 + hacks/hopalong.man | 62 + hacks/hypercube.c | 334 ++++++ hacks/hypercube.exe_axp | Bin 0 -> 26112 bytes hacks/hypercube.exe_vax | Bin 0 -> 17408 bytes hacks/hypercube.hlp | 89 ++ hacks/hypercube.man | 86 ++ hacks/imakefile | 70 ++ hacks/imsmap.c | 442 +++++++ hacks/imsmap.exe_axp | Bin 0 -> 29184 bytes hacks/imsmap.exe_vax | Bin 0 -> 16384 bytes hacks/imsmap.hlp | 58 + hacks/imsmap.man | 56 + hacks/link.com | Bin 0 -> 1072 bytes hacks/link_axp.com | Bin 0 -> 1144 bytes hacks/link_decc.com | Bin 0 -> 1154 bytes hacks/maze.c | 794 +++++++++++++ hacks/maze.exe_axp | Bin 0 -> 35840 bytes hacks/maze.exe_vax | Bin 0 -> 19968 bytes hacks/maze.hlp | 98 ++ hacks/maze.man | 97 ++ hacks/noseguy.c | 664 +++++++++++ hacks/noseguy.exe_axp | Bin 0 -> 32768 bytes hacks/noseguy.exe_vax | Bin 0 -> 21504 bytes hacks/noseguy.hlp | 69 ++ hacks/noseguy.man | 67 ++ hacks/noses/cvs/entries | 8 + hacks/noses/cvs/repository | 1 + hacks/noses/nose.0_left | 38 + hacks/noses/nose.0_right | 38 + hacks/noses/nose.1_left | 38 + hacks/noses/nose.1_right | 38 + hacks/noses/nose.down | 38 + hacks/noses/nose.front | 38 + hacks/noses/nose.left_front | 38 + hacks/noses/nose.right_front | 38 + hacks/pyro.c | 258 ++++ hacks/pyro.exe_axp | Bin 0 -> 23040 bytes hacks/pyro.exe_vax | Bin 0 -> 12800 bytes hacks/pyro.hlp | 55 + hacks/pyro.man | 53 + hacks/qix.c | 502 ++++++++ hacks/qix.exe_axp | Bin 0 -> 30208 bytes hacks/qix.exe_vax | Bin 0 -> 16384 bytes hacks/qix.hlp | 111 ++ hacks/qix.man | 107 ++ hacks/readme | 9 + hacks/rocks.c | 316 +++++ hacks/rocks.exe_axp | Bin 0 -> 22528 bytes hacks/rocks.exe_vax | Bin 0 -> 13312 bytes hacks/rocks.hlp | 67 ++ hacks/rocks.man | 64 + hacks/rorschach.c | 140 +++ hacks/rorschach.exe_axp | Bin 0 -> 21504 bytes hacks/rorschach.exe_vax | Bin 0 -> 11264 bytes hacks/rorschach.hlp | 60 + hacks/rorschach.man | 57 + hacks/screenhack.c | 219 ++++ hacks/screenhack.h | 145 +++ hacks/slidescreen.c | 252 ++++ hacks/slidescreen.exe_axp | Bin 0 -> 24576 bytes hacks/slidescreen.exe_vax | Bin 0 -> 13824 bytes hacks/slidescreen.hlp | 63 + hacks/slidescreen.man | 61 + hacks/spline.h | 63 + hacks/vaxdeccobjs.zip | Bin 0 -> 66745 bytes hacks/vaxobjs.zip | Bin 0 -> 79950 bytes hacks/version.h | 2 + hacks/vms.opt | Bin 0 -> 156 bytes hacks/vms_axp.opt | Bin 0 -> 270 bytes hacks/vms_decc.opt | Bin 0 -> 132 bytes hacks/vroot.h | 123 ++ hacks/xlock.h | 146 +++ hacks/xroger-hack.c | 103 ++ hacks/xroger.exe_axp | Bin 0 -> 26624 bytes hacks/xroger.exe_vax | Bin 0 -> 12800 bytes hacks/xroger.hlp | 44 + hacks/xroger.man | 43 + imakefile | 53 + readme | 119 ++ screenblank.txt | 46 + setup.com | Bin 0 -> 970 bytes utils/ad2c | 38 + utils/compile.com | Bin 0 -> 330 bytes utils/compile_axp.com | Bin 0 -> 422 bytes utils/compile_decc.com | Bin 0 -> 446 bytes utils/fade.c | 176 +++ utils/grabscreen.c | 204 ++++ utils/hsv.c | 120 ++ utils/imakefile | 22 + utils/readme | 6 + utils/resources.c | 233 ++++ utils/spline.c | 331 ++++++ utils/spline.h | 63 + utils/strings.c | Bin 0 -> 1374 bytes utils/usleep.c | 111 ++ utils/utils.olb | Bin 0 -> 25600 bytes utils/utils.olb_axp | Bin 0 -> 85504 bytes utils/utils.olb_decc | Bin 0 -> 20992 bytes utils/version.h | 2 + utils/xroger.c | 106 ++ 193 files changed, 20494 insertions(+) create mode 100755 aaa_vms.notes create mode 100755 driver/.gdbinit create mode 100755 driver/ad2c create mode 100755 driver/axpobjs.zip create mode 100755 driver/compile.com create mode 100755 driver/compile_axp.com create mode 100755 driver/compile_decc.com create mode 100755 driver/config.h create mode 100755 driver/demo.c create mode 100755 driver/dialogs.c create mode 100755 driver/dialogs.xd create mode 100755 driver/getpwnam.c create mode 100755 driver/hpwd.c create mode 100755 driver/imakefile create mode 100755 driver/link.com create mode 100755 driver/link_axp.com create mode 100755 driver/link_decc.com create mode 100755 driver/lock.c create mode 100755 driver/pwd.h create mode 100755 driver/readme create mode 100755 driver/resource.h create mode 100755 driver/subprocs.c create mode 100755 driver/timers.c create mode 100755 driver/validate.c create mode 100755 driver/vaxdeccobjs.zip create mode 100755 driver/vaxobjs.zip create mode 100755 driver/version.h create mode 100755 driver/visual.c create mode 100755 driver/vms.opt create mode 100755 driver/vms_axp.opt create mode 100755 driver/vms_decc.opt create mode 100755 driver/wait.h create mode 100755 driver/windows.c create mode 100755 driver/xscreensaver-command.c create mode 100755 driver/xscreensaver-command.exe_axp create mode 100755 driver/xscreensaver-command.exe_vax create mode 100755 driver/xscreensaver-command.hlp create mode 100755 driver/xscreensaver-command.man create mode 100755 driver/xscreensaver.ad create mode 100755 driver/xscreensaver.c create mode 100755 driver/xscreensaver.dat create mode 100755 driver/xscreensaver.exe_axp create mode 100755 driver/xscreensaver.exe_vax create mode 100755 driver/xscreensaver.h create mode 100755 driver/xscreensaver.hlp create mode 100755 driver/xscreensaver.man create mode 100755 driver/xscreensaver_ad.h create mode 100755 hacks/.gdbinit create mode 100755 hacks/aaa_vms.notes create mode 100755 hacks/attraction.c create mode 100755 hacks/attraction.exe_axp create mode 100755 hacks/attraction.exe_vax create mode 100755 hacks/attraction.hlp create mode 100755 hacks/attraction.man create mode 100755 hacks/axpobjs.zip create mode 100755 hacks/blitspin.c create mode 100755 hacks/blitspin.exe_axp create mode 100755 hacks/blitspin.exe_vax create mode 100755 hacks/blitspin.hlp create mode 100755 hacks/blitspin.man create mode 100755 hacks/compile.com create mode 100755 hacks/compile_axp.com create mode 100755 hacks/compile_decc.com create mode 100755 hacks/decayscreen.c create mode 100755 hacks/decayscreen.exe_axp create mode 100755 hacks/decayscreen.exe_vax create mode 100755 hacks/decayscreen.hlp create mode 100755 hacks/decayscreen.man create mode 100755 hacks/default.xbm create mode 100755 hacks/flame.c create mode 100755 hacks/flame.exe_axp create mode 100755 hacks/flame.exe_vax create mode 100755 hacks/flame.hlp create mode 100755 hacks/flame.man create mode 100755 hacks/greynetic.c create mode 100755 hacks/greynetic.exe_axp create mode 100755 hacks/greynetic.exe_vax create mode 100755 hacks/greynetic.hlp create mode 100755 hacks/greynetic.man create mode 100755 hacks/halo.c create mode 100755 hacks/halo.exe_axp create mode 100755 hacks/halo.exe_vax create mode 100755 hacks/halo.hlp create mode 100755 hacks/halo.man create mode 100755 hacks/helix.c create mode 100755 hacks/helix.exe_axp create mode 100755 hacks/helix.exe_vax create mode 100755 hacks/helix.hlp create mode 100755 hacks/helix.man create mode 100755 hacks/hopalong.c create mode 100755 hacks/hopalong.exe_axp create mode 100755 hacks/hopalong.exe_vax create mode 100755 hacks/hopalong.hlp create mode 100755 hacks/hopalong.man create mode 100755 hacks/hypercube.c create mode 100755 hacks/hypercube.exe_axp create mode 100755 hacks/hypercube.exe_vax create mode 100755 hacks/hypercube.hlp create mode 100755 hacks/hypercube.man create mode 100755 hacks/imakefile create mode 100755 hacks/imsmap.c create mode 100755 hacks/imsmap.exe_axp create mode 100755 hacks/imsmap.exe_vax create mode 100755 hacks/imsmap.hlp create mode 100755 hacks/imsmap.man create mode 100755 hacks/link.com create mode 100755 hacks/link_axp.com create mode 100755 hacks/link_decc.com create mode 100755 hacks/maze.c create mode 100755 hacks/maze.exe_axp create mode 100755 hacks/maze.exe_vax create mode 100755 hacks/maze.hlp create mode 100755 hacks/maze.man create mode 100755 hacks/noseguy.c create mode 100755 hacks/noseguy.exe_axp create mode 100755 hacks/noseguy.exe_vax create mode 100755 hacks/noseguy.hlp create mode 100755 hacks/noseguy.man create mode 100755 hacks/noses/cvs/entries create mode 100755 hacks/noses/cvs/repository create mode 100755 hacks/noses/nose.0_left create mode 100755 hacks/noses/nose.0_right create mode 100755 hacks/noses/nose.1_left create mode 100755 hacks/noses/nose.1_right create mode 100755 hacks/noses/nose.down create mode 100755 hacks/noses/nose.front create mode 100755 hacks/noses/nose.left_front create mode 100755 hacks/noses/nose.right_front create mode 100755 hacks/pyro.c create mode 100755 hacks/pyro.exe_axp create mode 100755 hacks/pyro.exe_vax create mode 100755 hacks/pyro.hlp create mode 100755 hacks/pyro.man create mode 100755 hacks/qix.c create mode 100755 hacks/qix.exe_axp create mode 100755 hacks/qix.exe_vax create mode 100755 hacks/qix.hlp create mode 100755 hacks/qix.man create mode 100755 hacks/readme create mode 100755 hacks/rocks.c create mode 100755 hacks/rocks.exe_axp create mode 100755 hacks/rocks.exe_vax create mode 100755 hacks/rocks.hlp create mode 100755 hacks/rocks.man create mode 100755 hacks/rorschach.c create mode 100755 hacks/rorschach.exe_axp create mode 100755 hacks/rorschach.exe_vax create mode 100755 hacks/rorschach.hlp create mode 100755 hacks/rorschach.man create mode 100755 hacks/screenhack.c create mode 100755 hacks/screenhack.h create mode 100755 hacks/slidescreen.c create mode 100755 hacks/slidescreen.exe_axp create mode 100755 hacks/slidescreen.exe_vax create mode 100755 hacks/slidescreen.hlp create mode 100755 hacks/slidescreen.man create mode 100755 hacks/spline.h create mode 100755 hacks/vaxdeccobjs.zip create mode 100755 hacks/vaxobjs.zip create mode 100755 hacks/version.h create mode 100755 hacks/vms.opt create mode 100755 hacks/vms_axp.opt create mode 100755 hacks/vms_decc.opt create mode 100755 hacks/vroot.h create mode 100755 hacks/xlock.h create mode 100755 hacks/xroger-hack.c create mode 100755 hacks/xroger.exe_axp create mode 100755 hacks/xroger.exe_vax create mode 100755 hacks/xroger.hlp create mode 100755 hacks/xroger.man create mode 100755 imakefile create mode 100755 readme create mode 100755 screenblank.txt create mode 100755 setup.com create mode 100755 utils/ad2c create mode 100755 utils/compile.com create mode 100755 utils/compile_axp.com create mode 100755 utils/compile_decc.com create mode 100755 utils/fade.c create mode 100755 utils/grabscreen.c create mode 100755 utils/hsv.c create mode 100755 utils/imakefile create mode 100755 utils/readme create mode 100755 utils/resources.c create mode 100755 utils/spline.c create mode 100755 utils/spline.h create mode 100755 utils/strings.c create mode 100755 utils/usleep.c create mode 100755 utils/utils.olb create mode 100755 utils/utils.olb_axp create mode 100755 utils/utils.olb_decc create mode 100755 utils/version.h create mode 100755 utils/xroger.c diff --git a/aaa_vms.notes b/aaa_vms.notes new file mode 100755 index 0000000000000000000000000000000000000000..3268e45957470818b4a1965258eeba99af9f048e GIT binary patch literal 2266 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

@3-m**s?py&J*)ldqHUlMbJe4uQo7Q6`5D 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 R?%t+coPB2|5Y`Y$;S>GszT*G@ literal 0 HcmV?d00001 diff --git a/driver/compile_decc.com b/driver/compile_decc.com new file mode 100755 index 0000000000000000000000000000000000000000..a8033fe51df0e1c9e0091f8893e7605b57469fda GIT binary patch literal 726 zcmb`F(F(#a3`O@Tdk|64`U9I9(`*LQcC=l)H~;@HtoW`_eF+KV9&Rq_npKN<)Ktpk zY2c*?kunc#sox|M_SQWD31NJ9ab~@3H5sSyT&rdfHwJ}GS4j|ucZHWqb(pV{cUTOZ zDhZJd`5*L&!wgcNU}mdbekCZC7c2oikqwZ@AJ7>CRx8whpefvaq?D&>M~YLnU=*&u R?%t+coPB2|5Y`Y$;S>GszT*G@ literal 0 HcmV?d00001 diff --git a/driver/config.h b/driver/config.h new file mode 100755 index 00000000..a6165c63 --- /dev/null +++ b/driver/config.h @@ -0,0 +1,98 @@ +/* + * Config file for xscreensaver, Copyright (c) 1991-1994 Jamie Zawinski. + * This file is included by the various Imakefiles. + */ + +/* Uncomment the following line if you have the XIdle extension installed. + * XIdle comes on the X11r5 contrib tape, in .../contrib/extensions/xidle/ + * (and maybe it will be on the r6 tape as well but I'm not sure where.) + * Installing it is the morally superior thing to do, but xscreensaver will + * work without it. + * + * Actually it's likely that the R6 `screensaver' server extension will turn + * out to be the better thing to use, but I haven't had time to add support + * for it yet. (See README to find the latest version of this program.) + */ +/* #define HAVE_XIDLE */ + +/* Uncomment the following line if you have the XPM library installed. + * Some of the demos can make use of this. + */ +#define HAVE_XPM + +/* Uncomment the following line if you don't have Motif. If you don't have + * Motif, then the screensaver won't have any dialog boxes, which means + * that it won't be compiled with support for demo-mode or display-locking. + */ +/* #define NO_MOTIF */ + +/* Uncomment the following line if for some reason the locking code doesn't + * work (for example, if you don't have the crypt() system call, or if you + * don't use standard passwd files.) + */ +/* #define NO_LOCKING */ + +/* Uncomment the following line if your system doesn't have the select() + * system call. + */ +#define NO_SELECT + +/* Uncomment the following line if your system doesn't have the setuid(), + * setregid(), and getpwnam() library routines. + * + * WARNING: if you do this, it will be unsafe to run xscreensaver as root + * (which probably means you can't have it be started by xdm.) If you are + * on such a system, please try to find the corresponding way to do this, + * and then tell me what it is. + */ +#define NO_SETUID + +/* Uncomment the following line 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(). + */ +/* #define HAVE_SHADOW */ + +/* You may need to edit these to correspond to where Motif is installed. + */ +/*#ifndef NO_MOTIF */ +/* MOTIFINCLUDES = -I/usr/local/include/ */ +/* MOTIFLDOPTIONS = -L/usr/local/lib/ */ +/* MOTIFLIBS = -lXm */ +/*#endif */ + +/* On some systems, only programs running as root can use the getpwent() + library routine. This means that, in order for locking to work, the + screensaver must be installed as setuid to root. Define this to make + that happen. (You must run "make install" as root for it to work.) + (What systems other than HP and AIX need this? Let me know.) + */ +#if defined(HPArchitecture) || defined(AIXArchitecture) || defined(HAVE_SHADOW) +# define INSTALL_SETUID +#endif + +#ifdef HPArchitecture + CCOPTIONS = -Aa -D_HPUX_SOURCE /* eat me */ +# if (ProjectX <= 4) + MOTIFINCLUDES = -I/usr/include/Motif1.1 + MOTIFLDOPTIONS = -L/usr/lib/Motif1.1 +# else /* R5 */ + MOTIFINCLUDES = -I/usr/include/Motif1.2 + MOTIFLDOPTIONS = -L/usr/lib/Motif1.2 +# endif /* R5 */ +#endif /* HPArchitecture */ + +#ifdef MacIIArchitecture + CCOPTIONS = -D_POSIX_SOURCE +#endif /* MacIIArchitecture */ + +#if (ProjectX <= 4) +# define R5ISMS -DXPointer="char*" +#else /* r5 or better */ +# define R5ISMS +#endif + +/* It seems that some versions of Sun's dynamic X libraries are broken; if + you get link errors about _get_wmShellWidgetClass being undefined, try + adding -Bstatic to the link command. + */ diff --git a/driver/demo.c b/driver/demo.c new file mode 100755 index 00000000..33916222 --- /dev/null +++ b/driver/demo.c @@ -0,0 +1,601 @@ +/* xscreensaver, Copyright (c) 1993 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 + +#if !__STDC__ +# define _NO_PROTO +#endif + +#include +#include +#include +#include + +#include "xscreensaver.h" +#include + +extern Time timeout, cycle, lock_timeout; +#ifndef NO_LOCKING +extern Time passwd_timeout; +#endif +extern int fade_seconds, fade_ticks; +extern Bool verbose_p, install_cmap_p, fade_p, unfade_p; +extern Bool lock_p, locking_disabled_p; + +static void demo_mode_hack P((char *)); +static void demo_mode_done P((void)); + +static void focus_fuckus P((Widget dialog)); +static void text_cb P((Widget button, XtPointer, XtPointer)); + +extern void demo_mode_restart_process (); + +extern Widget demo_dialog; +extern Widget label1; +extern Widget text_line; +extern Widget demo_form; +extern Widget demo_list; +extern Widget next, prev, done, restart, edit; + +extern Widget resources_dialog; +extern Widget resources_form; +extern Widget res_done, res_cancel; +extern Widget timeout_text, cycle_text, fade_text, ticks_text; +extern Widget lock_time_text, passwd_time_text; +extern Widget verbose_toggle, cmap_toggle, fade_toggle, unfade_toggle, + lock_toggle; + +extern create_demo_dialog (); +extern create_resources_dialog (); + +static void +focus_fuckus (dialog) + Widget dialog; +{ + XSetInputFocus (XtDisplay (dialog), XtWindow (dialog), + RevertToParent, CurrentTime); +} + +static void +raise_screenhack_dialog () +{ + XMapRaised (XtDisplay (demo_dialog), XtWindow (demo_dialog)); + if (resources_dialog) + XMapRaised (XtDisplay (resources_dialog), XtWindow (resources_dialog)); + focus_fuckus (resources_dialog ? resources_dialog : demo_dialog); +} + +static void +destroy_screenhack_dialogs () +{ + if (demo_dialog) XtDestroyWidget (demo_dialog); + if (resources_dialog) XtDestroyWidget (resources_dialog); + demo_dialog = resources_dialog = 0; +} + +static void +text_cb (button, client_data, call_data) + Widget button; + XtPointer client_data, call_data; +{ + char *line = XmTextGetString (button); + demo_mode_hack (line); +} + + +static void +select_cb (button, client_data, call_data) + Widget button; + XtPointer client_data, call_data; +{ + char **hacks = (char **) client_data; + XmListCallbackStruct *lcb = (XmListCallbackStruct *) call_data; + XmTextSetString (text_line, hacks [lcb->item_position - 1]); + if (lcb->reason == XmCR_DEFAULT_ACTION) + text_cb (text_line, 0, 0); + focus_fuckus (demo_dialog); +} + +static void +next_cb (button, client_data, call_data) + Widget button; + XtPointer client_data, call_data; +{ + int *pos_list; + int pos_count; + if (! XmListGetSelectedPos (demo_list, &pos_list, &pos_count)) + XmListSelectPos (demo_list, 1, True); + else + { + int pos = pos_list [0]; + XmListSelectPos (demo_list, pos + 1, True); + XtFree ((char *) pos_list); + if (! XmListGetSelectedPos (demo_list, &pos_list, &pos_count)) + abort (); + if (pos_list [0] == pos) + XmListSelectPos (demo_list, 1, True); + XtFree ((char *) pos_list); + } + text_cb (text_line, 0, 0); +} + +static void +prev_cb (button, client_data, call_data) + Widget button; + XtPointer client_data, call_data; +{ + int *pos_list; + int pos_count; + if (! XmListGetSelectedPos (demo_list, &pos_list, &pos_count)) + XmListSelectPos (demo_list, 0, True); + else + { + XmListSelectPos (demo_list, pos_list [0] - 1, True); + XtFree ((char *) pos_list); + } + text_cb (text_line, 0, 0); +} + + +static void pop_resources_dialog (); +static void make_resources_dialog (); + +static void +edit_cb (button, client_data, call_data) + Widget button; + XtPointer client_data, call_data; +{ + Widget parent = (Widget) client_data; + if (! resources_dialog) + make_resources_dialog (parent); + pop_resources_dialog (); +} + +static void +done_cb (button, client_data, call_data) + Widget button; + XtPointer client_data, call_data; +{ + demo_mode_done (); +} + + +static void +restart_cb (button, client_data, call_data) + Widget button; + XtPointer client_data, call_data; +{ + demo_mode_restart_process (); +} + +void +pop_up_dialog_box (dialog, form, where) + Widget dialog, form; + int where; +{ + /* I'm sure this is the wrong way to pop up a dialog box, but I can't + figure out how else to do it. + + It's important that the screensaver dialogs not get decorated or + otherwise reparented by the window manager, because they need to be + children of the *real* root window, not the WM's virtual root, in + order for us to guarentee that they are visible above the screensaver + window itself. + */ + Arg av [100]; + int ac = 0; + Dimension sw, sh, x, y, w, h; + XtRealizeWidget (form); + sw = WidthOfScreen (XtScreen (dialog)); + sh = HeightOfScreen (XtScreen (dialog)); + ac = 0; + XtSetArg (av [ac], XmNwidth, &w); ac++; + XtSetArg (av [ac], XmNheight, &h); ac++; + XtGetValues (form, av, ac); + switch (where) + { + case 0: /* center it in the top-right quadrant */ + x = (sw/2 + w) / 2 + (sw/2) - w; + y = (sh/2 + h) / 2 - h; + break; + case 1: /* center it in the bottom-right quadrant */ + x = (sw/2 + w) / 2 + (sw/2) - w; + y = (sh/2 + h) / 2 + (sh/2) - h; + break; + case 2: /* center it on the screen */ + x = (sw + w) / 2 - w; + y = (sh + h) / 2 - h; + break; + default: + abort (); + } + if (x + w > sw) x = sw - w; + if (y + h > sh) y = sh - h; + ac = 0; + XtSetArg (av [ac], XmNx, x); ac++; + XtSetArg (av [ac], XmNy, y); ac++; + XtSetArg (av [ac], XtNoverrideRedirect, True); ac++; + XtSetArg (av [ac], XmNdefaultPosition, False); ac++; + /* I wonder whether this does anything useful? */ + /* XtSetArg (av [ac], XmNdialogStyle, XmDIALOG_SYSTEM_MODAL); ac++; */ + XtSetValues (dialog, av, ac); + XtSetValues (form, av, ac); + XtManageChild (form); + + focus_fuckus (dialog); +} + + +static void +make_screenhack_dialog (parent, hacks) + Widget parent; + char **hacks; +{ + char buf [255]; + Arg av[10]; + int ac; + char *label; + XmString xm_label = 0; + XmString new_xm_label; + + create_demo_dialog (parent); + ac = 0; + XtSetArg (av [ac], XmNlabelString, &xm_label); ac++; + XtGetValues (label1, av, ac); + XmStringGetLtoR (xm_label, XmSTRING_DEFAULT_CHARSET, &label); + if (!strcmp (label, XtName (label1))) + strcpy (buf, "ERROR: RESOURCES ARE NOT INSTALLED CORRECTLY"); + else + sprintf (buf, label, screensaver_version); + new_xm_label = XmStringCreate (buf, XmSTRING_DEFAULT_CHARSET); + ac = 0; + XtSetArg (av [ac], XmNlabelString, new_xm_label); ac++; + XtSetValues (label1, av, ac); + XmStringFree (new_xm_label); + XtFree (label); + + XtAddCallback (demo_list, XmNbrowseSelectionCallback, select_cb, + (XtPointer) hacks); + XtAddCallback (demo_list, XmNdefaultActionCallback, select_cb, + (XtPointer) hacks); + + XtAddCallback (text_line, XmNactivateCallback, text_cb, 0); + XtAddCallback (next, XmNactivateCallback, next_cb, 0); + XtAddCallback (prev, XmNactivateCallback, prev_cb, 0); + XtAddCallback (done, XmNactivateCallback, done_cb, 0); + XtAddCallback (restart, XmNactivateCallback, restart_cb, 0); + XtAddCallback (edit, XmNactivateCallback, edit_cb, (XtPointer) parent); + + for (; *hacks; hacks++) + { + XmString xmstr = XmStringCreate (*hacks, XmSTRING_DEFAULT_CHARSET); + XmListAddItem (demo_list, xmstr, 0); + /* XmListSelectPos (widget, i, False); */ + XmStringFree (xmstr); + } + +#if 0 + /* Dialogs that have scroll-lists don't obey maxWidth! Fuck!! Hack it. */ + ac = 0; + XtSetArg (av [ac], XmNmaxWidth, &max_w); ac++; + XtGetValues (demo_dialog, av, ac); /* great, this SEGVs */ +#endif + + pop_up_dialog_box (demo_dialog, demo_form, 0); +} + + +/* the Screensaver Parameters dialog */ + +static struct resources { + int timeout, cycle, secs, ticks, lock_time, passwd_time; + int verb, cmap, fade, unfade, lock_p; +} res; + + +extern int parse_time (); + +static void +hack_time_cb (dpy, line, store, sec_p) + Display *dpy; + char *line; + int *store; + Bool sec_p; +{ + if (*line) + { + int value; + value = parse_time (line, sec_p, True); + if (value < 0) + /*XBell (dpy, 0)*/; + else + *store = value; + } +} + +static void +res_sec_cb (button, client_data, call_data) + Widget button; + XtPointer client_data, call_data; +{ + hack_time_cb (XtDisplay (button), XmTextGetString (button), + (int *) client_data, True); +} + +static void +res_min_cb (button, client_data, call_data) + Widget button; + XtPointer client_data, call_data; +{ + hack_time_cb (XtDisplay (button), XmTextGetString (button), + (int *) client_data, False); +} + +static void +res_int_cb (button, client_data, call_data) + Widget button; + XtPointer client_data, call_data; +{ + char *line = XmTextGetString (button); + int *store = (int *) client_data; + unsigned int value; + char c; + if (! *line) + ; + else if (sscanf (line, "%u%c", &value, &c) != 1) + XBell (XtDisplay (button), 0); + else + *store = value; +} + +static void +res_bool_cb (button, client_data, call_data) + Widget button; + XtPointer client_data, call_data; +{ + int *store = (int *) client_data; + *store = ((XmToggleButtonCallbackStruct *) call_data)->set; +} + +static void +res_cancel_cb (button, client_data, call_data) + Widget button; + XtPointer client_data, call_data; +{ + XtDestroyWidget (resources_dialog); + resources_dialog = 0; + raise_screenhack_dialog (); +} + + +static void +res_done_cb (button, client_data, call_data) + Widget button; + XtPointer client_data, call_data; +{ + res_cancel_cb (button, client_data, call_data); + + if (res.timeout < 10) res.timeout = 10; + if (res.cycle < 2) res.cycle = 2; + if (res.passwd_time < 2) res.passwd_time = 30; + + timeout = res.timeout * 1000; + cycle = res.cycle * 1000; + lock_timeout = res.lock_time * 1000; +#ifndef NO_LOCKING + passwd_timeout = res.passwd_time * 1000; +#endif + fade_seconds = res.secs; + fade_ticks = res.ticks; + verbose_p = res.verb; + install_cmap_p = res.cmap; + fade_p = res.fade; + unfade_p = res.unfade; + lock_p = res.lock_p; +} + + +static void +make_resources_dialog (parent) + Widget parent; +{ + Arg av[10]; + int ac; + + create_resources_dialog (parent); + + XtAddCallback (res_done, XmNactivateCallback, res_done_cb, 0); + XtAddCallback (res_cancel, XmNactivateCallback, res_cancel_cb, 0); + +#define CB(widget,type,slot) \ + XtAddCallback ((widget), XmNvalueChangedCallback, (type), \ + (XtPointer) (slot)) + CB (timeout_text, res_min_cb, &res.timeout); + CB (cycle_text, res_min_cb, &res.cycle); + CB (fade_text, res_sec_cb, &res.secs); + CB (ticks_text, res_int_cb, &res.ticks); + CB (lock_time_text, res_min_cb, &res.lock_time); + CB (passwd_time_text, res_sec_cb, &res.passwd_time); + CB (verbose_toggle, res_bool_cb, &res.verb); + CB (cmap_toggle, res_bool_cb, &res.cmap); + CB (fade_toggle, res_bool_cb, &res.fade); + CB (unfade_toggle, res_bool_cb, &res.unfade); + CB (lock_toggle, res_bool_cb, &res.lock_p); +#undef CB + ac = 0; + XtSetArg (av[ac], XmNsensitive, False); ac++; + + if (locking_disabled_p) + { + XtSetValues (passwd_time_text, av, ac); + XtSetValues (lock_time_text, av, ac); + XtSetValues (lock_toggle, av, ac); + } + if (CellsOfScreen (XtScreen (parent)) <= 2) + { + XtSetValues (fade_text, av, ac); + XtSetValues (ticks_text, av, ac); + XtSetValues (cmap_toggle, av, ac); + XtSetValues (fade_toggle, av, ac); + XtSetValues (unfade_toggle, av, ac); + } +} + + +static void +fmt_time (buf, s, min_p) + char *buf; + unsigned int s; + int min_p; +{ + unsigned int h = 0, m = 0; + if (s >= 60) + { + m += (s / 60); + s %= 60; + } + if (m >= 60) + { + h += (m / 60); + m %= 60; + } +/* + if (min_p && h == 0 && s == 0) + sprintf (buf, "%u", m); + else if (!min_p && h == 0 && m == 0) + sprintf (buf, "%u", s); + else + if (h == 0) + sprintf (buf, "%u:%02u", m, s); + else +*/ + sprintf (buf, "%u:%02u:%02u", h, m, s); +} + +static void +pop_resources_dialog () +{ + char buf [100]; + + res.timeout = timeout / 1000; + res.cycle = cycle / 1000; + res.lock_time = lock_timeout / 1000; +#ifndef NO_LOCKING + res.passwd_time = passwd_timeout / 1000; +#endif + res.secs = fade_seconds; + res.ticks = fade_ticks; + res.verb = verbose_p; + res.cmap = install_cmap_p; + res.fade = fade_p; + res.unfade = unfade_p; + res.lock_p = (lock_p && !locking_disabled_p); + + fmt_time (buf, res.timeout, 1); XmTextSetString (timeout_text, buf); + fmt_time (buf, res.cycle, 1); XmTextSetString (cycle_text, buf); + fmt_time (buf, res.lock_time, 1); XmTextSetString (lock_time_text, buf); + fmt_time (buf, res.passwd_time, 0); XmTextSetString (passwd_time_text, buf); + fmt_time (buf, res.secs, 0); XmTextSetString (fade_text, buf); + sprintf (buf, "%u", res.ticks); XmTextSetString (ticks_text, buf); + + XmToggleButtonSetState (verbose_toggle, res.verb, True); + XmToggleButtonSetState (cmap_toggle, res.cmap, True); + XmToggleButtonSetState (fade_toggle, res.fade, True); + XmToggleButtonSetState (unfade_toggle, res.unfade, True); + XmToggleButtonSetState (lock_toggle, res.lock_p, True); + + pop_up_dialog_box (resources_dialog, resources_form, 1); +} + + +/* The code on this page isn't actually Motif-specific */ + +Bool dbox_up_p = False; +Bool demo_mode_p = False; + +extern XtAppContext app; +extern Widget toplevel_shell; +extern Bool use_xidle; +extern Time notice_events_timeout; + +extern char **screenhacks; +extern char *demo_hack; + +extern void notice_events_timer P((XtPointer closure, void *timer)); +extern Bool handle_clientmessage P((/*XEvent *, Bool*/)); + +void +demo_mode () +{ + dbox_up_p = True; + initialize_screensaver_window (); + raise_window (True, False); + make_screenhack_dialog (toplevel_shell, screenhacks); + while (demo_mode_p) + { + XEvent event; + XtAppNextEvent (app, &event); + switch (event.xany.type) + { + case 0: /* synthetic "timeout" event */ + break; + + case ClientMessage: + handle_clientmessage (&event, False); + break; + + case CreateNotify: +#ifdef HAVE_XIDLE + if (! use_xidle) +#endif + XtAppAddTimeOut (app, notice_events_timeout, notice_events_timer, + (XtPointer) event.xcreatewindow.window); + break; + + case ButtonPress: + case ButtonRelease: + if (!XtWindowToWidget (dpy, event.xbutton.window)) + raise_screenhack_dialog (); + /* fall through */ + + default: + XtDispatchEvent (&event); + break; + } + } + destroy_screenhack_dialogs (); + initialize_screensaver_window (); + unblank_screen (); +} + +static void +demo_mode_hack (hack) + char *hack; +{ + if (! demo_mode_p) abort (); + kill_screenhack (); + if (! demo_hack) + blank_screen (); + demo_hack = hack; + spawn_screenhack (False); +} + +static void +demo_mode_done () +{ + kill_screenhack (); + if (demo_hack) + unblank_screen (); + demo_mode_p = False; + dbox_up_p = False; + demo_hack = 0; +} diff --git a/driver/dialogs.c b/driver/dialogs.c new file mode 100755 index 00000000..a1184e14 --- /dev/null +++ b/driver/dialogs.c @@ -0,0 +1,741 @@ + +/* +** Generated by X-Designer +*/ +/* +**LIBS: -lXm -lXt -lX11 +*/ + +#if !__STDC__ +# define _NO_PROTO +#endif + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +Widget passwd_dialog; +Widget passwd_form; +Widget roger_label; +Widget passwd_label1; +Widget passwd_label3; +Widget passwd_text; +Widget passwd_done; +Widget passwd_cancel; + +Widget resources_dialog; +Widget resources_form; +Widget timeout_text; +Widget cycle_text; +Widget fade_text; +Widget ticks_text; +Widget lock_time_text; +Widget passwd_time_text; +Widget verbose_toggle; +Widget cmap_toggle; +Widget fade_toggle; +Widget unfade_toggle; +Widget lock_toggle; +Widget res_done; +Widget res_cancel; + +Widget demo_dialog; +Widget demo_form; +Widget label1; +Widget label2; +Widget text_area; +Widget demo_list; +Widget text_line; +Widget vline; +Widget next; +Widget prev; +Widget edit; +Widget done; +Widget restart; +Widget spacer; + + +create_passwd_dialog( parent ) +Widget parent; +{ + Display *display = XtDisplay ( parent ); + Widget children[8]; /* Children to manage */ + Arg al[64]; /* Arg List */ + register int ac = 0; /* Arg Count */ + char from_s [256]; /* For font list conversion */ + XrmValue from_value, to_value; /* ditto */ + int fg, bg; /* colour values for pixmaps */ + XmString *list_items; /* For list items */ + int list_item; /* Index for list_items */ + XmString xmstrings[15]; /* temporary storage for XmStrings */ + Widget widget4; + Widget widget7; + + passwd_dialog = XmCreateDialogShell ( parent, "passwdDialog", al, ac ); + passwd_form = XmCreateForm ( passwd_dialog, "passwdForm", al, ac ); + roger_label = XmCreateDrawnButton ( passwd_form, "rogerLabel", al, ac ); + passwd_label1 = XmCreateLabel ( passwd_form, "passwdLabel1", al, ac ); + widget4 = XmCreateLabel ( passwd_form, "passwdLabel2", al, ac ); + passwd_label3 = XmCreateLabel ( passwd_form, "passwdLabel3", al, ac ); + passwd_text = XmCreateTextField ( passwd_form, "passwdText", al, ac ); + widget7 = XmCreateSeparator ( passwd_form, "widget7", al, ac ); + passwd_done = XmCreatePushButton ( passwd_form, "passwdDone", al, ac ); + passwd_cancel = XmCreatePushButton ( passwd_form, "passwdCancel", al, ac ); + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNtopOffset, 4); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNbottomOffset, 4); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNleftOffset, 4); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++; + XtSetValues ( roger_label,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNtopOffset, 4); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNbottomOffset, 4); ac++; + XtSetArg(al[ac], XmNbottomWidget, widget4); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNleftOffset, 4); ac++; + XtSetArg(al[ac], XmNleftWidget, roger_label); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNrightOffset, 4); ac++; + XtSetValues ( passwd_label1,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_NONE); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNbottomOffset, 4); ac++; + XtSetArg(al[ac], XmNbottomWidget, passwd_label3); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNleftOffset, 4); ac++; + XtSetArg(al[ac], XmNleftWidget, roger_label); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNrightOffset, 4); ac++; + XtSetValues ( widget4,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_NONE); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNbottomOffset, 4); ac++; + XtSetArg(al[ac], XmNbottomWidget, passwd_text); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNleftOffset, 4); ac++; + XtSetArg(al[ac], XmNleftWidget, roger_label); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNrightOffset, 30); ac++; + XtSetValues ( passwd_label3,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_NONE); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNbottomOffset, 4); ac++; + XtSetArg(al[ac], XmNbottomWidget, widget7); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNleftOffset, 4); ac++; + XtSetArg(al[ac], XmNleftWidget, roger_label); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNrightOffset, 4); ac++; + XtSetValues ( passwd_text,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_NONE); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNbottomOffset, 4); ac++; + XtSetArg(al[ac], XmNbottomWidget, passwd_done); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNleftOffset, 0); ac++; + XtSetArg(al[ac], XmNleftWidget, roger_label); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNrightOffset, 0); ac++; + XtSetValues ( widget7,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_NONE); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNbottomOffset, 4); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNleftOffset, 4); ac++; + XtSetArg(al[ac], XmNleftWidget, roger_label); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++; + XtSetValues ( passwd_done,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_NONE); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNbottomOffset, 4); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNleftOffset, 4); ac++; + XtSetArg(al[ac], XmNleftWidget, passwd_done); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++; + XtSetValues ( passwd_cancel,al, ac ); + ac = 0; + children[ac++] = roger_label; + children[ac++] = passwd_label1; + children[ac++] = widget4; + children[ac++] = passwd_label3; + children[ac++] = passwd_text; + children[ac++] = widget7; + children[ac++] = passwd_done; + children[ac++] = passwd_cancel; + XtManageChildren(children, ac); + ac = 0; +} + + + +create_resources_dialog( parent ) +Widget parent; +{ + Display *display = XtDisplay ( parent ); + Widget children[22]; /* Children to manage */ + Arg al[64]; /* Arg List */ + register int ac = 0; /* Arg Count */ + char from_s [256]; /* For font list conversion */ + XrmValue from_value, to_value; /* ditto */ + int fg, bg; /* colour values for pixmaps */ + XmString *list_items; /* For list items */ + int list_item; /* Index for list_items */ + XmString xmstrings[15]; /* temporary storage for XmStrings */ + Widget widget12; + Widget widget13; + Widget widget14; + Widget widget15; + Widget widget16; + Widget widget17; + Widget widget18; + Widget widget48; + Widget widget29; + + resources_dialog = XmCreateDialogShell ( parent, "resourcesDialog", al, ac ); + resources_form = XmCreateForm ( resources_dialog, "resourcesForm", al, ac ); + widget12 = XmCreateLabel ( resources_form, "resourcesLabel", al, ac ); + widget13 = XmCreateSeparator ( resources_form, "widget13", al, ac ); + XtSetArg(al[ac], XmNalignment, XmALIGNMENT_END); ac++; + widget14 = XmCreateLabel ( resources_form, "timeoutLabel", al, ac ); + ac = 0; + XtSetArg(al[ac], XmNalignment, XmALIGNMENT_END); ac++; + widget15 = XmCreateLabel ( resources_form, "cycleLabel", al, ac ); + ac = 0; + XtSetArg(al[ac], XmNalignment, XmALIGNMENT_END); ac++; + widget16 = XmCreateLabel ( resources_form, "fadeSecondsLabel", al, ac ); + ac = 0; + XtSetArg(al[ac], XmNalignment, XmALIGNMENT_END); ac++; + widget17 = XmCreateLabel ( resources_form, "fadeTicksLabel", al, ac ); + ac = 0; + XtSetArg(al[ac], XmNalignment, XmALIGNMENT_END); ac++; + widget18 = XmCreateLabel ( resources_form, "lockLabel", al, ac ); + ac = 0; + XtSetArg(al[ac], XmNalignment, XmALIGNMENT_END); ac++; + widget48 = XmCreateLabel ( resources_form, "passwdLabel", al, ac ); + ac = 0; + timeout_text = XmCreateTextField ( resources_form, "timeoutText", al, ac ); + cycle_text = XmCreateTextField ( resources_form, "cycleText", al, ac ); + fade_text = XmCreateTextField ( resources_form, "fadeSecondsText", al, ac ); + ticks_text = XmCreateTextField ( resources_form, "fadeTicksText", al, ac ); + lock_time_text = XmCreateTextField ( resources_form, "passwdText", al, ac ); + passwd_time_text = XmCreateTextField ( resources_form, "lockText", al, ac ); + XtSetArg(al[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++; + verbose_toggle = XmCreateToggleButton ( resources_form, "verboseToggle", al, ac ); + ac = 0; + XtSetArg(al[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++; + cmap_toggle = XmCreateToggleButton ( resources_form, "cmapToggle", al, ac ); + ac = 0; + XtSetArg(al[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++; + fade_toggle = XmCreateToggleButton ( resources_form, "fadeToggle", al, ac ); + ac = 0; + XtSetArg(al[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++; + unfade_toggle = XmCreateToggleButton ( resources_form, "unfadeToggle", al, ac ); + ac = 0; + XtSetArg(al[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++; + lock_toggle = XmCreateToggleButton ( resources_form, "lockToggle", al, ac ); + ac = 0; + widget29 = XmCreateSeparator ( resources_form, "widget29", al, ac ); + res_done = XmCreatePushButton ( resources_form, "resourcesDone", al, ac ); + res_cancel = XmCreatePushButton ( resources_form, "resourcesCancel", al, ac ); + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNtopOffset, 4); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNleftOffset, 4); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNrightOffset, 4); ac++; + XtSetValues ( widget12,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNtopOffset, 4); ac++; + XtSetArg(al[ac], XmNtopWidget, widget12); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNleftOffset, 0); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNrightOffset, 0); ac++; + XtSetValues ( widget13,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNtopOffset, 4); ac++; + XtSetArg(al[ac], XmNtopWidget, widget13); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNbottomWidget, timeout_text); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNleftOffset, 20); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNrightOffset, 4); ac++; + XtSetArg(al[ac], XmNrightWidget, timeout_text); ac++; + XtSetValues ( widget14,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNtopOffset, 0); ac++; + XtSetArg(al[ac], XmNtopWidget, cycle_text); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNbottomOffset, 0); ac++; + XtSetArg(al[ac], XmNbottomWidget, cycle_text); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNleftOffset, 20); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNrightOffset, 4); ac++; + XtSetArg(al[ac], XmNrightWidget, cycle_text); ac++; + XtSetValues ( widget15,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNtopOffset, 0); ac++; + XtSetArg(al[ac], XmNtopWidget, fade_text); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNbottomOffset, 0); ac++; + XtSetArg(al[ac], XmNbottomWidget, fade_text); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNleftOffset, 20); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNrightOffset, 4); ac++; + XtSetArg(al[ac], XmNrightWidget, fade_text); ac++; + XtSetValues ( widget16,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNtopOffset, 0); ac++; + XtSetArg(al[ac], XmNtopWidget, ticks_text); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNbottomOffset, 0); ac++; + XtSetArg(al[ac], XmNbottomWidget, ticks_text); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNleftOffset, 20); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNrightOffset, 4); ac++; + XtSetArg(al[ac], XmNrightWidget, ticks_text); ac++; + XtSetValues ( widget17,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNtopOffset, 0); ac++; + XtSetArg(al[ac], XmNtopWidget, lock_time_text); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNbottomOffset, 0); ac++; + XtSetArg(al[ac], XmNbottomWidget, lock_time_text); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNleftOffset, 19); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNrightOffset, 4); ac++; + XtSetArg(al[ac], XmNrightWidget, lock_time_text); ac++; + XtSetValues ( widget18,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNtopOffset, 0); ac++; + XtSetArg(al[ac], XmNtopWidget, passwd_time_text); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNbottomOffset, 0); ac++; + XtSetArg(al[ac], XmNbottomWidget, passwd_time_text); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNleftOffset, 14); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNrightOffset, 4); ac++; + XtSetArg(al[ac], XmNrightWidget, passwd_time_text); ac++; + XtSetValues ( widget48,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNtopOffset, 4); ac++; + XtSetArg(al[ac], XmNtopWidget, widget13); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNleftOffset, 141); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++; + XtSetValues ( timeout_text,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNtopOffset, 2); ac++; + XtSetArg(al[ac], XmNtopWidget, timeout_text); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNleftOffset, 0); ac++; + XtSetArg(al[ac], XmNleftWidget, timeout_text); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++; + XtSetValues ( cycle_text,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNtopOffset, 2); ac++; + XtSetArg(al[ac], XmNtopWidget, cycle_text); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNleftOffset, 0); ac++; + XtSetArg(al[ac], XmNleftWidget, cycle_text); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++; + XtSetValues ( fade_text,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNtopOffset, 2); ac++; + XtSetArg(al[ac], XmNtopWidget, fade_text); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNleftOffset, 0); ac++; + XtSetArg(al[ac], XmNleftWidget, fade_text); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++; + XtSetValues ( ticks_text,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNtopOffset, 2); ac++; + XtSetArg(al[ac], XmNtopWidget, ticks_text); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNleftOffset, 0); ac++; + XtSetArg(al[ac], XmNleftWidget, ticks_text); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++; + XtSetValues ( lock_time_text,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNtopOffset, 4); ac++; + XtSetArg(al[ac], XmNtopWidget, lock_time_text); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNleftOffset, 0); ac++; + XtSetArg(al[ac], XmNleftWidget, lock_time_text); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++; + XtSetValues ( passwd_time_text,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNtopOffset, 4); ac++; + XtSetArg(al[ac], XmNtopWidget, widget13); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNbottomOffset, 0); ac++; + XtSetArg(al[ac], XmNbottomWidget, timeout_text); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNleftOffset, 20); ac++; + XtSetArg(al[ac], XmNleftWidget, timeout_text); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNrightOffset, 20); ac++; + XtSetValues ( verbose_toggle,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNtopOffset, 0); ac++; + XtSetArg(al[ac], XmNtopWidget, cycle_text); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNbottomOffset, 0); ac++; + XtSetArg(al[ac], XmNbottomWidget, cycle_text); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNleftOffset, 0); ac++; + XtSetArg(al[ac], XmNleftWidget, verbose_toggle); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNrightOffset, 20); ac++; + XtSetValues ( cmap_toggle,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNtopOffset, 0); ac++; + XtSetArg(al[ac], XmNtopWidget, fade_text); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNbottomOffset, 0); ac++; + XtSetArg(al[ac], XmNbottomWidget, fade_text); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNleftOffset, 0); ac++; + XtSetArg(al[ac], XmNleftWidget, cmap_toggle); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNrightOffset, 20); ac++; + XtSetValues ( fade_toggle,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNtopOffset, 0); ac++; + XtSetArg(al[ac], XmNtopWidget, ticks_text); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNbottomOffset, 0); ac++; + XtSetArg(al[ac], XmNbottomWidget, ticks_text); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNleftOffset, 0); ac++; + XtSetArg(al[ac], XmNleftWidget, fade_toggle); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNrightOffset, 20); ac++; + XtSetValues ( unfade_toggle,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNtopOffset, 0); ac++; + XtSetArg(al[ac], XmNtopWidget, lock_time_text); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNbottomOffset, 0); ac++; + XtSetArg(al[ac], XmNbottomWidget, lock_time_text); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNleftOffset, 0); ac++; + XtSetArg(al[ac], XmNleftWidget, unfade_toggle); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNrightOffset, 20); ac++; + XtSetValues ( lock_toggle,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNtopOffset, 0); ac++; + XtSetArg(al[ac], XmNtopWidget, passwd_time_text); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNbottomOffset, 4); ac++; + XtSetArg(al[ac], XmNbottomWidget, res_done); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++; + XtSetValues ( widget29,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_NONE); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNbottomOffset, 4); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNleftOffset, 4); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++; + XtSetValues ( res_done,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_NONE); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNbottomOffset, 4); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNleftOffset, 4); ac++; + XtSetArg(al[ac], XmNleftWidget, res_done); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++; + XtSetValues ( res_cancel,al, ac ); + ac = 0; + children[ac++] = widget12; + children[ac++] = widget13; + children[ac++] = widget14; + children[ac++] = widget15; + children[ac++] = widget16; + children[ac++] = widget17; + children[ac++] = widget18; + children[ac++] = widget48; + children[ac++] = timeout_text; + children[ac++] = cycle_text; + children[ac++] = fade_text; + children[ac++] = ticks_text; + children[ac++] = lock_time_text; + children[ac++] = passwd_time_text; + children[ac++] = verbose_toggle; + children[ac++] = cmap_toggle; + children[ac++] = fade_toggle; + children[ac++] = unfade_toggle; + children[ac++] = lock_toggle; + children[ac++] = widget29; + children[ac++] = res_done; + children[ac++] = res_cancel; + XtManageChildren(children, ac); + ac = 0; +} + + + +create_demo_dialog( parent ) +Widget parent; +{ + Display *display = XtDisplay ( parent ); + Widget children[11]; /* Children to manage */ + Arg al[64]; /* Arg List */ + register int ac = 0; /* Arg Count */ + char from_s [256]; /* For font list conversion */ + XrmValue from_value, to_value; /* ditto */ + int fg, bg; /* colour values for pixmaps */ + XmString *list_items; /* For list items */ + int list_item; /* Index for list_items */ + XmString xmstrings[15]; /* temporary storage for XmStrings */ + + demo_dialog = XmCreateDialogShell ( parent, "demoDialog", al, ac ); + demo_form = XmCreateForm ( demo_dialog, "demoForm", al, ac ); + label1 = XmCreateLabel ( demo_form, "label1", al, ac ); + label2 = XmCreateLabel ( demo_form, "label2", al, ac ); + demo_list = XmCreateScrolledList ( demo_form, "demoList", al, ac ); + text_area = XtParent ( demo_list ); + + text_line = XmCreateTextField ( demo_form, "textLine", al, ac ); + vline = XmCreateSeparator ( demo_form, "vline", al, ac ); + next = XmCreatePushButton ( demo_form, "next", al, ac ); + prev = XmCreatePushButton ( demo_form, "prev", al, ac ); + edit = XmCreatePushButton ( demo_form, "edit", al, ac ); + done = XmCreatePushButton ( demo_form, "done", al, ac ); + restart = XmCreatePushButton ( demo_form, "restart", al, ac ); + xmstrings[0] = XmStringCreateLtoR(" ", (XmStringCharSet)XmSTRING_DEFAULT_CHARSET); + XtSetArg(al[ac], XmNlabelString, xmstrings[0]); ac++; + spacer = XmCreateLabel ( demo_form, "spacer", al, ac ); + ac = 0; + XmStringFree ( xmstrings [ 0 ] ); + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNtopOffset, 5); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNleftOffset, 4); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNrightOffset, 4); ac++; + XtSetValues ( label1,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNtopOffset, 4); ac++; + XtSetArg(al[ac], XmNtopWidget, label1); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNleftOffset, 4); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNrightOffset, 4); ac++; + XtSetValues ( label2,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNtopOffset, 4); ac++; + XtSetArg(al[ac], XmNtopWidget, label2); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNbottomOffset, 4); ac++; + XtSetArg(al[ac], XmNbottomWidget, text_line); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNleftOffset, 4); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNrightOffset, 4); ac++; + XtSetValues ( text_area,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_NONE); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNbottomOffset, 4); ac++; + XtSetArg(al[ac], XmNbottomWidget, vline); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNleftOffset, 4); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNrightOffset, 4); ac++; + XtSetValues ( text_line,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_NONE); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNbottomOffset, 4); ac++; + XtSetArg(al[ac], XmNbottomWidget, next); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNleftOffset, 4); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNrightOffset, 4); ac++; + XtSetValues ( vline,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_NONE); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNbottomOffset, 4); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNleftOffset, 3); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++; + XtSetValues ( next,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNtopOffset, 0); ac++; + XtSetArg(al[ac], XmNtopWidget, next); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNbottomOffset, 4); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNleftOffset, 4); ac++; + XtSetArg(al[ac], XmNleftWidget, next); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++; + XtSetValues ( prev,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNtopOffset, 0); ac++; + XtSetArg(al[ac], XmNtopWidget, prev); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNbottomOffset, 4); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNleftOffset, 4); ac++; + XtSetArg(al[ac], XmNleftWidget, prev); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++; + XtSetValues ( edit,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNtopOffset, 0); ac++; + XtSetArg(al[ac], XmNtopWidget, edit); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNbottomOffset, 4); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNleftOffset, 4); ac++; + XtSetArg(al[ac], XmNleftWidget, edit); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++; + XtSetValues ( done,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNtopOffset, 0); ac++; + XtSetArg(al[ac], XmNtopWidget, done); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNbottomOffset, 4); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNleftOffset, 4); ac++; + XtSetArg(al[ac], XmNleftWidget, done); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++; + XtSetValues ( restart,al, ac ); + ac = 0; + + XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; + XtSetArg(al[ac], XmNtopOffset, 0); ac++; + XtSetArg(al[ac], XmNtopWidget, restart); ac++; + XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNbottomOffset, 4); ac++; + XtSetArg(al[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++; + XtSetArg(al[ac], XmNleftOffset, 4); ac++; + XtSetArg(al[ac], XmNleftWidget, restart); ac++; + XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++; + XtSetArg(al[ac], XmNrightOffset, 4); ac++; + XtSetValues ( spacer,al, ac ); + ac = 0; + XtManageChild(demo_list); + children[ac++] = label1; + children[ac++] = label2; + children[ac++] = text_line; + children[ac++] = vline; + children[ac++] = next; + children[ac++] = prev; + children[ac++] = edit; + children[ac++] = done; + children[ac++] = restart; + children[ac++] = spacer; + XtManageChildren(children, ac); + ac = 0; +} + + diff --git a/driver/dialogs.xd b/driver/dialogs.xd new file mode 100755 index 00000000..03640b77 --- /dev/null +++ b/driver/dialogs.xd @@ -0,0 +1,569 @@ +module 'XScreenSaver' +applicationName = 'XScreenSaver'; +generateNameC = 'dialogs.c'; +generateNameUIL = ''; +generateNameResDB = 'dialogs.ad'; +generateUidFile = ''; +generateMask = 1507557; +useMask = 1; +value +object 'passwd_dialog' : XmDialogShell { + arguments { + name = 'passwdDialog'; + XmNtitle= 'XScreenSaver'; + XmNallowShellResize= true; + }; +object 'passwd_form' : XmForm { + arguments { + name = 'passwdForm'; + XmNautoUnmanage= false; + }; +object 'roger_label' : XmDrawnButton { + arguments { + name = 'rogerLabel'; + XmNwidth= 150; + }; +}; +object 'passwd_label1' : XmLabel { + arguments { + name = 'passwdLabel1'; + XmNlabelString= 'XScreenSaver %s'; + XmNalignment= 0; + }; +}; +object '' : XmLabel { + arguments { + name = 'passwdLabel2'; + XmNlabelString= 'This display is locked.'; + XmNalignment= 0; + }; +}; +object 'passwd_label3' : XmLabel { + arguments { + name = 'passwdLabel3'; + XmNlabelString= 'Please type %s\'s password to unlock it.'; + XmNalignment= 0; + }; +}; +object 'passwd_text' : XmTextField { + arguments { + name = 'passwdText'; + }; +}; +object '' : XmSeparator { + arguments { + }; +}; +object 'passwd_done' : XmPushButton { + arguments { + name = 'passwdDone'; + XmNlabelString= 'Done'; + }; +}; +object 'passwd_cancel' : XmPushButton { + arguments { + name = 'passwdCancel'; + XmNlabelString= 'Cancel'; + }; +}; + attachments { + attachment { + XmNrightAttachment = 0 0 0; + XmNleftAttachment = 1 0 4; + XmNbottomAttachment = 1 0 4; + XmNtopAttachment = 1 0 4; + }; + attachment { + XmNrightAttachment = 1 0 4; + XmNleftAttachment = 3 1 4; + XmNbottomAttachment = 3 3 4; + XmNtopAttachment = 1 0 4; + }; + attachment { + XmNrightAttachment = 1 0 4; + XmNleftAttachment = 3 1 4; + XmNbottomAttachment = 3 4 4; + XmNtopAttachment = 0 0 0; + }; + attachment { + XmNrightAttachment = 1 0 30; + XmNleftAttachment = 3 1 4; + XmNbottomAttachment = 3 5 4; + XmNtopAttachment = 0 0 0; + }; + attachment { + XmNrightAttachment = 1 0 4; + XmNleftAttachment = 3 1 4; + XmNbottomAttachment = 3 6 4; + XmNtopAttachment = 0 0 0; + }; + attachment { + XmNrightAttachment = 1 0 0; + XmNleftAttachment = 3 1 0; + XmNbottomAttachment = 3 7 4; + XmNtopAttachment = 0 0 0; + }; + attachment { + XmNrightAttachment = 0 0 0; + XmNleftAttachment = 3 1 4; + XmNbottomAttachment = 1 0 4; + XmNtopAttachment = 0 0 0; + }; + attachment { + XmNrightAttachment = 0 0 0; + XmNleftAttachment = 3 7 4; + XmNbottomAttachment = 1 0 4; + XmNtopAttachment = 0 0 0; + }; + }; +}; +}; +object 'resources_dialog' : XmDialogShell { + arguments { + name = 'resourcesDialog'; + XmNtitle= 'XScreenSaver'; + XmNallowShellResize= true; + }; +object 'resources_form' : XmForm { + arguments { + name = 'resourcesForm'; + XmNautoUnmanage= false; + }; +object '' : XmLabel { + arguments { + name = 'resourcesLabel'; + XmNlabelString= 'XScreenSaver Parameters'; + }; +}; +object '' : XmSeparator { + arguments { + }; +}; +object '' : XmLabel { + arguments { + name = 'timeoutLabel'; + XmNlabelString= 'Timeout Minutes'; + XmNalignment= * 2; + }; +}; +object '' : XmLabel { + arguments { + name = 'cycleLabel'; + XmNlabelString= 'Cycle Seconds'; + XmNalignment= * 2; + }; +}; +object '' : XmLabel { + arguments { + name = 'fadeSecondsLabel'; + XmNlabelString= 'Fade Seconds'; + XmNalignment= * 2; + }; +}; +object '' : XmLabel { + arguments { + name = 'fadeTicksLabel'; + XmNlabelString= 'Fade Ticks'; + XmNalignment= * 2; + }; +}; +object '' : XmLabel { + arguments { + name = 'lockLabel'; + XmNlabelString= 'Lock Timeout'; + XmNalignment= * 2; + }; +}; +object '' : XmLabel { + arguments { + name = 'passwdLabel'; + XmNlabelString= 'Password Timeout'; + XmNalignment= * 2; + }; +}; +object 'timeout_text' : XmTextField { + arguments { + name = 'timeoutText'; + XmNcolumns= 5; + }; +}; +object 'cycle_text' : XmTextField { + arguments { + name = 'cycleText'; + XmNcolumns= 5; + }; +}; +object 'fade_text' : XmTextField { + arguments { + name = 'fadeSecondsText'; + XmNcolumns= 5; + }; +}; +object 'ticks_text' : XmTextField { + arguments { + name = 'fadeTicksText'; + XmNcolumns= 5; + }; +}; +object 'lock_time_text' : XmTextField { + arguments { + name = 'passwdText'; + XmNcolumns= 5; + }; +}; +object 'passwd_time_text' : XmTextField { + arguments { + name = 'lockText'; + XmNcolumns= 5; + }; +}; +object 'verbose_toggle' : XmToggleButton { + arguments { + name = 'verboseToggle'; + XmNlabelString= 'Verbose'; + XmNalignment= * 0; + }; +}; +object 'cmap_toggle' : XmToggleButton { + arguments { + name = 'cmapToggle'; + XmNlabelString= 'Install Colormap'; + XmNalignment= * 0; + }; +}; +object 'fade_toggle' : XmToggleButton { + arguments { + name = 'fadeToggle'; + XmNlabelString= 'Fade Colormap'; + XmNalignment= * 0; + }; +}; +object 'unfade_toggle' : XmToggleButton { + arguments { + name = 'unfadeToggle'; + XmNlabelString= 'Unfade Colormap'; + XmNalignment= * 0; + }; +}; +object 'lock_toggle' : XmToggleButton { + arguments { + name = 'lockToggle'; + XmNlabelString= 'Require Password'; + XmNalignment= * 0; + }; +}; +object '' : XmSeparator { + arguments { + }; +}; +object 'res_done' : XmPushButton { + arguments { + name = 'resourcesDone'; + XmNlabelString= 'Done'; + }; +}; +object 'res_cancel' : XmPushButton { + arguments { + name = 'resourcesCancel'; + XmNlabelString= 'Cancel'; + }; +}; + attachments { + attachment { + XmNrightAttachment = 1 0 4; + XmNleftAttachment = 1 0 4; + XmNtopAttachment = 1 0 4; + }; + attachment { + XmNrightAttachment = 1 0 0; + XmNleftAttachment = 1 0 0; + XmNbottomAttachment = 0 0 0; + XmNtopAttachment = 3 1 4; + }; + attachment { + XmNrightAttachment = 3 9 4; + XmNleftAttachment = 1 0 20; + XmNbottomAttachment = 4 9; + XmNtopAttachment = 3 2 4; + }; + attachment { + XmNrightAttachment = 3 10 4; + XmNleftAttachment = 1 0 20; + XmNbottomAttachment = 4 10 0; + XmNtopAttachment = 4 10 0; + }; + attachment { + XmNrightAttachment = 3 11 4; + XmNleftAttachment = 1 0 20; + XmNbottomAttachment = 4 11 0; + XmNtopAttachment = 4 11 0; + }; + attachment { + XmNrightAttachment = 3 12 4; + XmNleftAttachment = 1 0 20; + XmNbottomAttachment = 4 12 0; + XmNtopAttachment = 4 12 0; + }; + attachment { + XmNrightAttachment = 3 13 4; + XmNleftAttachment = 1 0 19; + XmNbottomAttachment = 4 13 0; + XmNtopAttachment = 4 13 0; + }; + attachment { + XmNrightAttachment = 3 14 4; + XmNleftAttachment = 1 0 14; + XmNbottomAttachment = 4 14 0; + XmNtopAttachment = 4 14 0; + }; + attachment { + XmNrightAttachment = 0 0 0; + XmNleftAttachment = 1 0 141; + XmNbottomAttachment = 0 0 0; + XmNtopAttachment = 3 2 4; + }; + attachment { + XmNrightAttachment = 0 0 0; + XmNleftAttachment = 4 9 0; + XmNbottomAttachment = 0 0 0; + XmNtopAttachment = 3 9 2; + }; + attachment { + XmNrightAttachment = 0 0 0; + XmNleftAttachment = 4 10 0; + XmNbottomAttachment = 0 0 0; + XmNtopAttachment = 3 10 2; + }; + attachment { + XmNrightAttachment = 0 0 0; + XmNleftAttachment = 4 11 0; + XmNbottomAttachment = 0 0 0; + XmNtopAttachment = 3 11 2; + }; + attachment { + XmNrightAttachment = 0 0 0; + XmNleftAttachment = 4 12 0; + XmNbottomAttachment = 0 0 0; + XmNtopAttachment = 3 12 2; + }; + attachment { + XmNrightAttachment = 0 0 0; + XmNleftAttachment = 4 13 0; + XmNbottomAttachment = 0 0 0; + XmNtopAttachment = 3 13 4; + }; + attachment { + XmNrightAttachment = 1 0 20; + XmNleftAttachment = 3 9 20; + XmNbottomAttachment = 4 9 0; + XmNtopAttachment = 3 2 4; + }; + attachment { + XmNrightAttachment = 1 0 20; + XmNleftAttachment = 4 15 0; + XmNbottomAttachment = 4 10 0; + XmNtopAttachment = 4 10 0; + }; + attachment { + XmNrightAttachment = 1 0 20; + XmNleftAttachment = 4 16 0; + XmNbottomAttachment = 4 11 0; + XmNtopAttachment = 4 11 0; + }; + attachment { + XmNrightAttachment = 1 0 20; + XmNleftAttachment = 4 17 0; + XmNbottomAttachment = 4 12 0; + XmNtopAttachment = 4 12 0; + }; + attachment { + XmNrightAttachment = 1 0 20; + XmNleftAttachment = 4 18 0; + XmNbottomAttachment = 4 13 0; + XmNtopAttachment = 4 13 0; + }; + attachment { + XmNrightAttachment = 1 0; + XmNleftAttachment = 1 0; + XmNbottomAttachment = 3 21 4; + XmNtopAttachment = 3 14 0; + }; + attachment { + XmNrightAttachment = 0 0 0; + XmNleftAttachment = 1 0 4; + XmNbottomAttachment = 1 0 4; + XmNtopAttachment = 0 0 0; + }; + attachment { + XmNrightAttachment = 0 0 0; + XmNleftAttachment = 3 21 4; + XmNbottomAttachment = 1 0 4; + XmNtopAttachment = 0 0 0; + }; + }; +}; +}; +object 'demo_dialog' : XmDialogShell { + arguments { + name = 'demoDialog'; + XmNtitle= 'XScreenSaver'; + XmNmaxWidth= 500; + XmNallowShellResize= true; + }; +object 'demo_form' : XmForm { + arguments { + name = 'demoForm'; + XmNautoUnmanage= false; + }; +object 'label1' : XmLabel { + arguments { + name = 'label1'; + XmNlabelString= 'XScreenSaver %s'; + }; +}; +object 'label2' : XmLabel { + arguments { + name = 'label2'; + XmNlabelString= 'Copyright © 1991-1994 by Jamie Zawinski '; + }; +}; +object 'text_area' : XmScrolledList { + arguments { + name = 'textArea'; + }; +object '' : XmScrollBar { + arguments { + name = 'ListhScrollBar'; + }; +}; +object '' : XmScrollBar { + arguments { + name = 'ListvScrollBar'; + }; +}; +object 'demo_list' : XmList { + arguments { + name = 'demoList'; + XmNvisibleItemCount= 10; + XmNautomaticSelection= true; + XmNlistSizePolicy= 2; + }; +}; +}; +object 'text_line' : XmTextField { + arguments { + name = 'textLine'; + }; +}; +object 'vline' : XmSeparator { + arguments { + name = 'vline'; + }; +}; +object 'next' : XmPushButton { + arguments { + name = 'next'; + XmNlabelString= 'Run Next'; + }; +}; +object 'prev' : XmPushButton { + arguments { + name = 'prev'; + XmNlabelString= 'Run Previous'; + }; +}; +object 'edit' : XmPushButton { + arguments { + name = 'edit'; + XmNlabelString= 'Edit Parameters'; + }; +}; +object 'done' : XmPushButton { + arguments { + name = 'done'; + XmNlabelString= 'Exit Demo Mode'; + }; +}; +object 'restart' : XmPushButton { + arguments { + name = 'restart'; + XmNlabelString= 'Restart Screen Saver'; + }; +}; +object 'spacer' : XmLabel { + arguments { + name = 'spacer'; + XmNlabelString= * ' '; + }; +}; + attachments { + attachment { + XmNrightAttachment = 1 0 4; + XmNleftAttachment = 1 0 4; + XmNbottomAttachment = 0 0 0; + XmNtopAttachment = 1 0 5; + }; + attachment { + XmNrightAttachment = 1 0 4; + XmNleftAttachment = 1 0 4; + XmNbottomAttachment = 0 0 0; + XmNtopAttachment = 3 1 4; + }; + attachment { + XmNrightAttachment = 1 0 4; + XmNleftAttachment = 1 0 4; + XmNbottomAttachment = 3 4 4; + XmNtopAttachment = 3 2 4; + }; + attachment { + XmNrightAttachment = 1 0 4; + XmNleftAttachment = 1 0 4; + XmNbottomAttachment = 3 5 4; + XmNtopAttachment = 0 0 0; + }; + attachment { + XmNrightAttachment = 1 0 4; + XmNleftAttachment = 1 0 4; + XmNbottomAttachment = 3 6 4; + XmNtopAttachment = 0 0 0; + }; + attachment { + XmNrightAttachment = 0 0 0; + XmNleftAttachment = 1 0 3; + XmNbottomAttachment = 1 0 4; + XmNtopAttachment = 0 0 0; + }; + attachment { + XmNrightAttachment = 0 0 0; + XmNleftAttachment = 3 6 4; + XmNbottomAttachment = 1 0 4; + XmNtopAttachment = 4 6 0; + }; + attachment { + XmNrightAttachment = 0 0 0; + XmNleftAttachment = 3 7 4; + XmNbottomAttachment = 1 0 4; + XmNtopAttachment = 4 7 0; + }; + attachment { + XmNrightAttachment = 0 0 0; + XmNleftAttachment = 3 8 4; + XmNbottomAttachment = 1 0 4; + XmNtopAttachment = 4 8 0; + }; + attachment { + XmNrightAttachment = 0 0 0; + XmNleftAttachment = 3 9 4; + XmNbottomAttachment = 1 0 4; + XmNtopAttachment = 4 9 0; + }; + attachment { + XmNrightAttachment = 1 0 4; + XmNleftAttachment = 3 10 4; + XmNbottomAttachment = 1 0 4; + XmNtopAttachment = 4 10 0; + }; + }; +}; +}; +end module; diff --git a/driver/getpwnam.c b/driver/getpwnam.c new file mode 100755 index 0000000000000000000000000000000000000000..46cb9f16412fa63fee122bb940bde5e07ef75a92 GIT binary patch literal 3524 zcma)8jZfQF5P$79Y1TSv>etq_U9TyWBm_uGTeWy}V#LsBAw(pBqJWT_ybx=S9oY_) zrTO3Yd*_chK)XeyaqjNj$M5d_&NszMJ|`%zoyuT%?wErt{$!4p$diF*$usGbNv(}7 zl1|`Vh?}r|r0h3FLErV(G_7vJuJbolmubiBo6bF@t-2jEuv}+NYi{ossN!@4%gbgU zai;WYspg(7mEOKBvB!7nOnu}HT_5VY=bl+z1eSx5&2FgYdKB~}wQ7|Q6sIc5b4P*Y z$Yqt)&&tP++qHUD7@OW(e&9wqFDR{wPSNKx9rRu8Gwn;yN1}Mzlcw)FVp~}*r9O*a zcvj-HE@j4#f^kiiN}s7--9e<%a#6$AmgV^Y9e7qC#W#q$B80dvo^@ppHBo(|(KsmY z?Y5egn$ZyAws>Ya9edQ3^t&H)EqA&9?rus3z&f5ag!E2IIx>M|4?^+NRGJx{cbEGa zA#Mpj@J5}0MplQ$_XV&SIlgu3$S(P4uTpgN>*S}9-xL#Fh@~XsrqO6-hk;ihc+F{J zvU;R`)A~BqTGeWf#@dmn2o0a!(6gMNmqjJg!--7X)HNE&0lG$}ZAU{yJ=3yBp5!Sw z%FO#mnIk7tfUjHZOH<)=?P!62VQxpBLs_`y(uSt*pLZ#r%W@9NP<*c}i6%4=;&F^Y zY#3(}-URW3==4pG^6Fmb;)WOlN#KO+@t+@k|yeL?dNyD@QT|Aw!nDJpa9q(cY z8_qX1hApeJZ`vbZ{fjz%sf)})n7a9tuIqQ^qUpzdKk;dQr%~J3F=(B{OQDV7!j?|h z&H|Min{$7il$(cjq^!jIzd}r0Unkr56Q|b7k(N)iCx{ z%>{ZMk4fqgV>c;a(zWrM0)+?a2j$2B-7HWM`rn{`8S7h>O{I^T!3Imvuf_p)4{F9< zZL?sSUw!GM!@5Q9>1hz;fv~6ru z(M$HNCNHdK9u`SGMs0KNupS#l(-+$P2)iO4!+#U;ox)ZPfne-oJdq)wFY01l>7%O; ziGShGfiu9glns46j|LDK#cfO6=agTbY{iaGv$3D&RLX%MZ-J$IU~DQIf3~*o3C*@X z&M8JV?bs9^unVMvO-C#F&=AXGTg0SF*RkrzF+bXp0ykOg6cHX@Ddtu%D|j`$kti|s z;g01_2H&3{r}W5AF-3GIs{%^aHykvppm$p#5@NtqU`|vS@$|PaJXR~@4vR`D9aA7oYihv`P+9kSJQKuCLsK7FSM%2p4Jb`2S$Kg_jydy2y7?`NZ^H#q^42Ae*4m zzM@U=Wpt+ap308vPXXTgS`E?CM-hp8@MrtFqWE1TJtyyXxgMV96oR441VT~x?|PFg zayr+N_GWpBE4(E~$eF?HG+s&`xUI%jPjO44T&^_%GGyB+l3k0hQ8=hZ>@k^B<{2CB z3z^1YV-9~!V`r_pyIrZ_Reag_fNozi8<%j*G~OH4D&``_DRtGp>^H<|nyKHHwmt3n QZIx@xoNSfTZ-|Nb7cV6FIsgCw literal 0 HcmV?d00001 diff --git a/driver/hpwd.c b/driver/hpwd.c new file mode 100755 index 0000000000000000000000000000000000000000..0795b627ae5260e9457d8145ffe55b21cd3b4e28 GIT binary patch literal 1604 zcmaJ>ZBNrs6h44o`Uz2@iHUlmV{A*^##@YB(BL4jh(ahC5<;5N-ffNLcDeT!GJ*f@ zx$RcA0d`%|-ah9!&v~7OT4e#SVzst@*IGXvJoJ>hj%9#dPjy4lK^Z4H6kM&tG~sN6 zO%zwCyBwXq()B(a~L- zWJ}>)a+?cZ_Io;vg{%8LZYwX+0trEQ?%TV{LB(f0%rZAu{cHL9%A zK8>B&Kk3SgOe+TA%O_a~*gZGO47^sQcISrE}cC#kIvU-riDPkgf-S&CLu^EaI5$N@}~hST2`oI#S!L z5lTyCHt5s(xaJ4DW1{6qY}PxJ=iy9L&9q#&ff-_J6Stj4;fK3@e0sR!9%iI{&M59P_w5iaO^R zkwjaA-=q1He*o_-IeAEjwLPHWm$qjrZ%3Dmevr HwAudwm$c-k literal 0 HcmV?d00001 diff --git a/driver/imakefile b/driver/imakefile new file mode 100755 index 00000000..d0359e5d --- /dev/null +++ b/driver/imakefile @@ -0,0 +1,117 @@ +/* + * Imakefile file for xscreensaver, Copyright (c) 1993 Jamie Zawinski. + * + * You should not need to edit this file; edit ../config.h instead. + * + */ + +#include "../config.h" + +#if defined(NO_MOTIF) && !defined(NO_LOCKING) +# define NO_LOCKING +#endif + +#ifdef NO_LOCKING +# undef INSTALL_SETUID +#endif + +#ifdef HAVE_XIDLE +# define XIDLE_DEF -DHAVE_XIDLE +#else +# define XIDLE_DEF +#endif + +#ifdef NO_LOCKING +# define LOCKING_DEF -DNO_LOCKING +#else +# define LOCKING_DEF +#endif + +#ifdef NO_SETUID +# define SETUID_DEF -DNO_SETUID +#else +# define SETUID_DEF +#endif + +#ifdef HAVE_SHADOW +# define SHADOW_DEF -DHAVE_SHADOW +#else +# define SHADOW_DEF +#endif + +#ifdef NO_MOTIF +# define MOTIF_DEF -DNO_MOTIF +# define MOTIF_SRC +# define MOTIF_OBJ +# define MOTIF_LIB +# define MOTIF_INC +#else +# define MOTIF_DEF +# define MOTIF_SRC $(DBOX_SRCS) $(UTILS)/xroger.c +# define MOTIF_OBJ $(DBOX_OBJS) $(UTILS)/xroger.o +# define MOTIF_LIB $(MOTIFLDOPTIONS) $(MOTIFLIBS) +# define MOTIF_INC $(MOTIFINCLUDES) +#endif + + UTILS = ../utils + INCLUDES = -I$(UTILS) MOTIF_INC + DEFINES = SETUID_DEF XIDLE_DEF MOTIF_DEF LOCKING_DEF SHADOW_DEF R5ISMS + SAVERLIBS = $(XMULIB) $(XTOOLLIB) $(EXTENSIONLIB) $(XLIB) -lm + COMMLIBS = $(XLIB) -lm + UTIL_SRCS = $(UTILS)/resources.c $(UTILS)/fade.c $(UTILS)/usleep.c + UTIL_OBJS = $(UTILS)/resources.o $(UTILS)/fade.o $(UTILS)/usleep.o + DBOX_SRCS = dialogs.c demo.c lock.c + DBOX_OBJS = dialogs.o demo.o lock.o + SAVERSRCS = xscreensaver.c visual.c timers.c subprocs.c windows.c + SAVEROBJS = xscreensaver.o visual.o timers.o subprocs.o windows.o + SRCS1 = $(SAVERSRCS) MOTIF_SRC $(UTIL_SRCS) + OBJS1 = $(SAVEROBJS) MOTIF_OBJ $(UTIL_OBJS) + COMMSRCS = xscreensaver-command.c + COMMOBJS = xscreensaver-command.o + SRCS2 = $(COMMSRCS) + OBJS2 = $(COMMOBJS) + MEN = xscreensaver.man xscreensaver-command.man + TARFILES = README Imakefile $(SAVERSRCS) $(DBOX_SRCS) $(COMMSRCS) \ + xscreensaver.h XScreenSaver.ad dialogs.xd $(MEN) .gdbinit + +#if defined(HPArchitecture) && !defined(NO_LOCKING) +EXTRA_LIBRARIES = -lXhp11 /* for XHPDisableReset() */ +#endif + +all:: xscreensaver xscreensaver-command + +echo_tarfiles: + @echo $(TARFILES) + +PROGRAMS = xscreensaver xscreensaver-command + +#ifdef INSTALL_SETUID +#undef InstallProgram +#define InstallProgram(p,d) InstallProgramWithFlags(p,d,$(INSTUIDFLAGS)) +#endif + +ComplexProgramTarget_1(xscreensaver,MOTIF_LIB $(SAVERLIBS),) + +#ifdef INSTALL_SETUID +#undef InstallProgram +#define InstallProgram(p,d) InstallProgramWithFlags(p,d,) +#endif + +ComplexProgramTarget_2(xscreensaver-command,$(COMMLIBS),) + +InstallAppDefaults(XScreenSaver) + +xscreensaver.o: XScreenSaver.ad.h $(UTILS)/version.h +xscreensaver-command.o: $(UTILS)/version.h + +demo.o: $(UTILS)/version.h +lock.o: $(UTILS)/version.h + +/* build this before calling makedepend */ +depend:: XScreenSaver.ad.h + +XScreenSaver.ad.h: XScreenSaver.ad + $(UTILS)/ad2c XScreenSaver.ad > XScreenSaver.ad.h + +clean:: + $(RM) XScreenSaver.ad.h diff --git a/driver/link.com b/driver/link.com new file mode 100755 index 0000000000000000000000000000000000000000..8130c96c4e2e325ca4805657079b074734468075 GIT binary patch literal 154 zcmZwAF%H8Z3_wwi!VoEo(;lPeaIlqH!5CozJ$^HG=^cxueWad2Cb zsbV1*>MuO%-D-cFh3CH;h}D1uv#k!<(gwc2YqR9gMY%Z)@f|ZvDP+?jF5wztT)Ed- PP~lVOX<-(^&cEmviC#L< literal 0 HcmV?d00001 diff --git a/driver/link_decc.com b/driver/link_decc.com new file mode 100755 index 0000000000000000000000000000000000000000..5f0e746888aee37f22fabc4519faa1bf3d772e4d GIT binary patch literal 164 zcmZwAF%H5o3_#HwB?AkR3&-FX$k`zi2c>NQ@~J@9&l*vSYT>pp80{hi!u)RLDLr=`#WC% literal 0 HcmV?d00001 diff --git a/driver/lock.c b/driver/lock.c new file mode 100755 index 00000000..de8dd9fa --- /dev/null +++ b/driver/lock.c @@ -0,0 +1,600 @@ +/* xscreensaver, Copyright (c) 1993 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 __STDC__ +#include +#include +#include +#endif + +#ifdef HAVE_SHADOW +#include +#endif + +#include + +#include + +#if !__STDC__ +# define _NO_PROTO +#endif + +#include "xscreensaver.h" + +#ifndef NO_LOCKING + +#ifndef VMS +#include +#else +#include "pwd.h" +extern char *getenv(); +#endif + +#include +#include +#include + +Time passwd_timeout; + +extern char *screensaver_version; +extern char *progname; +extern XtAppContext app; +extern Bool verbose_p; + +extern Widget passwd_dialog; +extern Widget passwd_form; +extern Widget roger_label; +extern Widget passwd_label1; +extern Widget passwd_label3; +extern Widget passwd_text; +extern Widget passwd_done; +extern Widget passwd_cancel; + +extern create_passwd_dialog (); + +static enum { pw_read, pw_ok, pw_fail, pw_cancel, pw_time } passwd_state; +static char typed_passwd [1024]; + +static char root_passwd [255]; +static char user_passwd [255]; +static char * user_vms; + +#ifdef HAVE_SHADOW +# define PWTYPE struct spwd * +# define PWSLOT sp_pwdp +# define GETPW getspnam +#else +# define PWTYPE struct passwd * +# define PWSLOT pw_passwd +# define GETPW getpwnam +#endif + +Bool +lock_init () +{ + Bool ok = True; + char *u; +#ifndef VMS + PWTYPE p = GETPW ("root"); + if (p && p->PWSLOT && p->PWSLOT[0] != '*') + strcpy (root_passwd, p->PWSLOT); + else + { + fprintf (stderr, "%s: couldn't get root's password\n", progname); + strcpy (root_passwd, "*"); + } + + /* It has been reported that getlogin() returns the wrong user id on some + very old SGI systems... */ + u = getlogin (); + if (u) + p = GETPW (u); + else + { + /* getlogin() fails if not attached to a terminal; + in that case, use getpwuid(). */ + struct passwd *p2 = getpwuid (getuid ()); + u = p2->pw_name; +#ifdef HAVE_SHADOW + p = GETPW (u); +#else + p = p2; +#endif + } + + + if (p && p->PWSLOT && + /* p->PWSLOT[0] != '*' */ /* sensible */ + (strlen (p->PWSLOT) > 4) /* solaris */ + ) + strcpy (user_passwd, p->PWSLOT); + else + { + fprintf (stderr, "%s: couldn't get password of \"%s\"\n", progname, u); + strcpy (user_passwd, "*"); + ok = False; + } + return ok; +#else + return ok; +#endif /* VMS */ + +} + + + +#if (XmVersion >= 1002) /* The `destroy' bug apears to be fixed as */ +# define DESTROY_WORKS /* of Motif 1.2.1, but the `verify-callback' */ +#endif /* bug is still present. */ + +static void +passwd_cancel_cb (button, client_data, call_data) + Widget button; + XtPointer client_data, call_data; +{ + passwd_state = pw_cancel; +} + +static void +passwd_done_cb (button, client_data, call_data) + Widget button; + XtPointer client_data, call_data; +{ + + if (passwd_state != pw_read) return; /* already done */ +#ifndef VMS + if (!strcmp ((char *) crypt (typed_passwd, user_passwd), user_passwd)) + passwd_state = pw_ok; + /* do not allow root to have empty passwd */ + else if (typed_passwd [0] && + !strcmp ((char *) crypt (typed_passwd, root_passwd), root_passwd)) + passwd_state = pw_ok; + else + passwd_state = pw_fail; +#else + user_vms = getenv("USER"); + if (validate_user(user_vms,typed_passwd) == 1 ) + passwd_state = pw_ok; + else + passwd_state = pw_fail; +#endif +} + +#ifdef VERIFY_CALLBACK_WORKS + + /* #### It looks to me like adding any modifyVerify callback causes + #### Motif 1.1.4 to free the the TextF_Value() twice. I can't see + #### the bug in the Motif source, but Purify complains, even if + #### check_passwd_cb() is a no-op. + + #### Update: Motif 1.2.1 also loses, but in a different way: it + #### writes beyond the end of a malloc'ed block in ModifyVerify(). + #### Probably this block is the text field's text. + */ + +static void +check_passwd_cb (button, client_data, call_data) + Widget button; + XtPointer client_data, call_data; +{ + XmTextVerifyCallbackStruct *vcb = (XmTextVerifyCallbackStruct *) call_data; + + if (passwd_state != pw_read) + return; + else if (vcb->reason == XmCR_ACTIVATE) + { + passwd_done_cb (0, 0, 0); + } + else if (vcb->text->length > 1) /* don't allow "paste" operations */ + { + vcb->doit = False; + } + else if (vcb->text->ptr != 0) + { + int i; + strncat (typed_passwd, vcb->text->ptr, vcb->text->length); + typed_passwd [vcb->endPos + vcb->text->length] = 0; + for (i = 0; i < vcb->text->length; i++) + vcb->text->ptr [i] = '*'; + } +} + +#else /* !VERIFY_CALLBACK_WORKS */ + +static void keypress(); +static void backspace(); +static void kill_line(); +static void done(); + +static XtActionsRec actions[] = {{"keypress", keypress}, + {"backspace", backspace}, + {"kill_line", kill_line}, + {"done", done} + }; + +#if 0 /* oh fuck, why doesn't this work? */ +static char translations[] = "\ +BackSpace: backspace()\n\ +Delete: backspace()\n\ +CtrlH: backspace()\n\ +CtrlU: kill_line()\n\ +CtrlX: kill_line()\n\ +CtrlJ: done()\n\ +CtrlM: done()\n\ +: keypress()\n\ +"; +#else +static char translations[] = ":keypress()"; +#endif + +static void +keypress (w, event, argv, argc) + Widget w; + XEvent *event; + String *argv; + Cardinal *argc; +{ + int i, j; + char s [sizeof (typed_passwd)]; + int size = XLookupString ((XKeyEvent *) event, s, sizeof (s), 0, 0); + if (size != 1) return; + + /* hack because I can't get translations to dance to my tune... */ + if (*s == '\010') { backspace (w, event, argv, argc); return; } + if (*s == '\177') { backspace (w, event, argv, argc); return; } + if (*s == '\025') { kill_line (w, event, argv, argc); return; } + if (*s == '\030') { kill_line (w, event, argv, argc); return; } + if (*s == '\012') { done (w, event, argv, argc); return; } + if (*s == '\015') { done (w, event, argv, argc); return; } + + i = j = strlen (typed_passwd); + typed_passwd [i] = *s; + s [++i] = 0; + while (i--) + s [i] = '*'; + XmTextFieldSetString (passwd_text, s); + XmTextFieldSetInsertionPosition (passwd_text, j + 1); +} + +static void +backspace (w, event, argv, argc) + Widget w; + XEvent *event; + String *argv; + Cardinal *argc; +{ + char s [sizeof (typed_passwd)]; + int i = strlen (typed_passwd); + int j = i; + if (i == 0) + return; + typed_passwd [--i] = 0; + s [i] = 0; + while (i--) + s [i] = '*'; + XmTextFieldSetString (passwd_text, s); + XmTextFieldSetInsertionPosition (passwd_text, j + 1); +} + +static void +kill_line (w, event, argv, argc) + Widget w; + XEvent *event; + String *argv; + Cardinal *argc; +{ + memset (typed_passwd, 0, sizeof (typed_passwd)); + XmTextFieldSetString (passwd_text, ""); +} + +static void +done (w, event, argv, argc) + Widget w; + XEvent *event; + String *argv; + Cardinal *argc; +{ + passwd_done_cb (w, 0, 0); +} + +#endif /* !VERIFY_CALLBACK_WORKS */ + +static void +format_into_label (widget, string) + Widget widget; + char *string; +{ + char *label; + char buf [255]; + XmString xm_label = 0; + XmString new_xm_label; + Arg av[10]; + int ac = 0; + XtSetArg (av [ac], XmNlabelString, &xm_label); ac++; + XtGetValues (widget, av, ac); + XmStringGetLtoR (xm_label, XmSTRING_DEFAULT_CHARSET, &label); + if (!strcmp (label, XtName (widget))) + strcpy (buf, "ERROR: RESOURCES ARE NOT INSTALLED CORRECTLY"); + else + sprintf (buf, label, string); + new_xm_label = XmStringCreate (buf, XmSTRING_DEFAULT_CHARSET); + ac = 0; + XtSetArg (av [ac], XmNlabelString, new_xm_label); ac++; + XtSetValues (widget, av, ac); + XmStringFree (new_xm_label); + XtFree (label); +} + +#if __STDC__ +extern void skull (Display *, Window, GC, GC, int, int, int, int); +#endif + +static void +roger (button, client_data, call_data) + Widget button; + XtPointer client_data, call_data; +{ + Display *dpy = XtDisplay (button); + Screen *screen = XtScreen (button); + Window window = XtWindow (button); + Arg av [10]; + int ac = 0; + XGCValues gcv; + Colormap cmap; + GC draw_gc, erase_gc; + unsigned int fg, bg; + int x, y, size; + XWindowAttributes xgwa; + XGetWindowAttributes (dpy, window, &xgwa); + cmap = xgwa.colormap; + if (xgwa.width > xgwa.height) size = xgwa.height; + else size = xgwa.width; + if (size > 40) size -= 30; + x = (xgwa.width - size) / 2; + y = (xgwa.height - size) / 2; + XtSetArg (av [ac], XmNforeground, &fg); ac++; + XtSetArg (av [ac], XmNbackground, &bg); ac++; + XtGetValues (button, av, ac); + /* if it's black on white, swap it cause it looks better (hack hack) */ + if (fg == BlackPixelOfScreen (screen) && bg == WhitePixelOfScreen (screen)) + fg = WhitePixelOfScreen (screen), bg = BlackPixelOfScreen (screen); + gcv.foreground = bg; + erase_gc = XCreateGC (dpy, window, GCForeground, &gcv); + gcv.foreground = fg; + draw_gc = XCreateGC (dpy, window, GCForeground, &gcv); + XFillRectangle (dpy, window, erase_gc, 0, 0, xgwa.width, xgwa.height); + skull (dpy, window, draw_gc, erase_gc, x, y, size, size); + XFreeGC (dpy, draw_gc); + XFreeGC (dpy, erase_gc); +} + +static void +make_passwd_dialog (parent) + Widget parent; +{ + struct passwd *pw; + create_passwd_dialog (parent); + + XtAddCallback (passwd_done, XmNactivateCallback, passwd_done_cb, 0); + XtAddCallback (passwd_cancel, XmNactivateCallback, passwd_cancel_cb, 0); + XtAddCallback (roger_label, XmNexposeCallback, roger, 0); + +#ifdef VERIFY_CALLBACK_WORKS + XtAddCallback (passwd_text, XmNmodifyVerifyCallback, check_passwd_cb, 0); + XtAddCallback (passwd_text, XmNactivateCallback, check_passwd_cb, 0); +#else + XtAddCallback (passwd_text, XmNactivateCallback, passwd_done_cb, 0); + XtOverrideTranslations (passwd_text, XtParseTranslationTable (translations)); +#endif + +#if (XmVersion >= 1002) + /* The focus stuff changed around; this didn't exist in 1.1.5. */ + XtVaSetValues (passwd_form, XmNinitialFocus, passwd_text, 0); +#endif + + /* Another random thing necessary in 1.2.1 but not 1.1.5... */ + XtVaSetValues (roger_label, XmNborderWidth, 2, 0); + +#ifndef VMS + pw = getpwuid (getuid ()); +#else + pw->pw_name = getenv("USER"); +#endif + format_into_label (passwd_label3, (pw->pw_name ? pw->pw_name : "???")); + format_into_label (passwd_label1, screensaver_version); +} + + +extern void idle_timer (); + +static int passwd_idle_timer_tick; +static XtIntervalId id; + +static void +passwd_idle_timer (junk1, junk2) + void *junk1; + XtPointer junk2; +{ + Display *dpy = XtDisplay (passwd_form); + Window window = XtWindow (passwd_form); + static Dimension x, y, d, s, ss; + static GC gc = 0; + int max = passwd_timeout / 1000; + + idle_timer (junk1, junk2); + + if (passwd_idle_timer_tick == max) /* first time */ + { + Arg av [10]; + int ac = 0; + XGCValues gcv; + unsigned long fg, bg; + XtSetArg (av [ac], XmNheight, &d); ac++; + XtGetValues (passwd_done, av, ac); + ac = 0; + XtSetArg (av [ac], XmNwidth, &x); ac++; + XtSetArg (av [ac], XmNheight, &y); ac++; + XtSetArg (av [ac], XmNforeground, &fg); ac++; + XtSetArg (av [ac], XmNbackground, &bg); ac++; + XtGetValues (passwd_form, av, ac); + x -= d; + y -= d; + d -= 4; + gcv.foreground = fg; + if (gc) XFreeGC (dpy, gc); + gc = XCreateGC (dpy, window, GCForeground, &gcv); + s = 360*64 / (passwd_idle_timer_tick - 1); + ss = 90*64; + XFillArc (dpy, window, gc, x, y, d, d, 0, 360*64); + XSetForeground (dpy, gc, bg); + x += 1; + y += 1; + d -= 2; + } + + if (--passwd_idle_timer_tick) + { + id = XtAppAddTimeOut (app, 1000, passwd_idle_timer, 0); + XFillArc (dpy, window, gc, x, y, d, d, ss, s); + ss += s; + } +} + +extern void pop_up_dialog_box (); +extern int BadWindow_ehandler (); + +static Bool +pop_passwd_dialog (parent) + Widget parent; +{ + Display *dpy = XtDisplay (passwd_dialog); + Window focus; + int revert_to; + typed_passwd [0] = 0; + passwd_state = pw_read; + XmTextFieldSetString (passwd_text, ""); + + XGetInputFocus (dpy, &focus, &revert_to); +#ifndef DESTROY_WORKS + /* This fucker blows up if we destroy the widget. I can't figure + out why. The second destroy phase dereferences freed memory... + So we just keep it around; but unrealizing or unmanaging it + doesn't work right either, so we hack the window directly. FMH. + */ + if (XtWindow (passwd_form)) + XMapRaised (dpy, XtWindow (passwd_dialog)); +#endif + + pop_up_dialog_box (passwd_dialog, passwd_form, 2); + XtManageChild (passwd_form); + +#if (XmVersion < 1002) + /* The focus stuff changed around; this causes problems in 1.2.1 + but is necessary in 1.1.5. */ + XmProcessTraversal (passwd_text, XmTRAVERSE_CURRENT); +#endif + + passwd_idle_timer_tick = passwd_timeout / 1000; + id = XtAppAddTimeOut (app, 1000, passwd_idle_timer, 0); + + + XGrabServer (dpy); /* ############ DANGER! */ + + /* this call to ungrab used to be in main_loop() - see comment in + xscreensaver.c around line 696. */ + ungrab_keyboard_and_mouse (); + + while (passwd_state == pw_read) + { + XEvent event; + XtAppNextEvent (app, &event); + /* wait for timer event */ + if (event.xany.type == 0 && passwd_idle_timer_tick == 0) + passwd_state = pw_time; + XtDispatchEvent (&event); + } + XUngrabServer (dpy); + XSync (dpy, False); /* ###### (danger over) */ + + if (passwd_state != pw_time) + XtRemoveTimeOut (id); + + if (passwd_state != pw_ok) + { + char *lose; + switch (passwd_state) + { + case pw_time: lose = "Timed out!"; break; + case pw_fail: lose = "Sorry!"; break; + case pw_cancel: lose = 0; break; + default: abort (); + } + XmProcessTraversal (passwd_cancel, 0); /* turn off I-beam */ + if (lose) + { + XmTextFieldSetString (passwd_text, lose); + XmTextFieldSetInsertionPosition (passwd_text, strlen (lose) + 1); + passwd_idle_timer_tick = 1; + id = XtAppAddTimeOut (app, 3000, passwd_idle_timer, 0); + while (1) + { + XEvent event; + XtAppNextEvent (app, &event); + if (event.xany.type == 0 && /* wait for timer event */ + passwd_idle_timer_tick == 0) + break; + XtDispatchEvent (&event); + } + } + } + memset (typed_passwd, 0, sizeof (typed_passwd)); + XmTextFieldSetString (passwd_text, ""); + XtSetKeyboardFocus (parent, None); + +#ifdef DESTROY_WORKS + XtDestroyWidget (passwd_dialog); + passwd_dialog = 0; +#else + XUnmapWindow (XtDisplay (passwd_dialog), XtWindow (passwd_dialog)); +#endif + { + int (*old_handler) (); + old_handler = XSetErrorHandler (BadWindow_ehandler); + /* I don't understand why this doesn't refocus on the old selected + window when MWM is running in click-to-type mode. The value of + `focus' seems to be correct. */ + XSetInputFocus (dpy, focus, revert_to, CurrentTime); + XSync (dpy, False); + XSetErrorHandler (old_handler); + } + + return (passwd_state == pw_ok ? True : False); +} + +Bool +unlock_p (parent) + Widget parent; +{ + static Bool initted = False; + if (! initted) + { +#ifndef VERIFY_CALLBACK_WORKS + XtAppAddActions (app, actions, XtNumber (actions)); +#endif + passwd_dialog = 0; + initted = True; + } + if (! passwd_dialog) + make_passwd_dialog (parent); + return pop_passwd_dialog (parent); +} + +#endif /* !NO_LOCKING */ diff --git a/driver/pwd.h b/driver/pwd.h new file mode 100755 index 0000000000000000000000000000000000000000..775b20746c6b6b13b423ed5d577dc7ec8942ed1d GIT binary patch literal 830 zcmaJ@H`^wVZbNo!E#iN7Hc4v= z#T=5%ym@cm&Wr<&ZQa&ujdT(=BXpaW*t&8~Th7@zdXF83{cJQu@1l1`m}}V%0Bk`m z?#od0E#D`aADIk=u@v(Rz=o-!EPe)GuFGMUV#$+nDDYZOQ=yvC%_`JHq68dNFf~=q z4BsPMhH)PqyOhD)!TwD9`Ofp+9(vu^m(Ek$gUz{*_WMh__cYU|`obR;c@$q-WD<@m z`ioMBN`8P%zl3WQsBd>tMxFTU0ZSL-rR9C?W+F zjj|k7L82LK&#Q&x*)-K`v!WRc1lz5|d^8*isTr~6P6mRH)B-DvvxN#3i6mhw@WW_; zkoT{c;B(jOy!&4FwRhi!6DS&ki`TXXLZ=ftwB9iE?O9h!EBJi`SU$#*`L($p3cATs zByZeOB;Z`LLny_tqV^F>28I8%a%uplP|kCiUuu1w_J%&bHg6hfgSr1P$d_T{r`pD3 SPAU48@1aHLNxAf9Lw*5I3Ff2# literal 0 HcmV?d00001 diff --git a/driver/readme b/driver/readme new file mode 100755 index 00000000..df64793b --- /dev/null +++ b/driver/readme @@ -0,0 +1,6 @@ + +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. diff --git a/driver/resource.h b/driver/resource.h new file mode 100755 index 00000000..eb900297 --- /dev/null +++ b/driver/resource.h @@ -0,0 +1,24 @@ +#ifndef __sys_resource_h + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __sys_resource_h 1 + +int getrusage(int, struct rusage*); +int getrlimit (int resource, struct rlimit *rlp); +#ifndef VMS +int setrlimit _G_ARGS((int resource, const struct rlimit *rlp)); +#endif +long ulimit(int, long); +int getpriority(int, int); +int setpriority(int, int, int); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/driver/subprocs.c b/driver/subprocs.c new file mode 100755 index 00000000..494f8461 --- /dev/null +++ b/driver/subprocs.c @@ -0,0 +1,672 @@ +/* xscreensaver, Copyright (c) 1991-1993 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 would really like some error messages to show up on the screensaver window + itself when subprocs die, or when we can't launch them. If the process + produces output, but does not actually die, I would like that output to go + to the appropriate stdout/stderr as they do now. X and Unix conspire to + make this incredibly difficult. + + - Not all systems have SIGIO, so we can't necessarily be signalled when a + process dies, so we'd have to poll it with wait() or something awful like + that, which would mean the main thread waking up more often than it does + now. + + - We can't tell the difference between a process dying, and a process not + being launched correctly (for example, not being on $PATH) partly because + of the contortions we need to go through with /bin/sh in order to launch + it. + + - We can't do X stuff from signal handlers, so we'd need to set a flag, + save the error message, and notice that flag in the main thread. The + problem is that the main thread is probably sleeping, waiting for the + next X event, so to do this we'd have to register a pipe FD or something, + and write to it when something loses. + + - We could assume that any output produced by a subproc indicates an error, + and blast that across the screen. This means we'd need to use popen() + instead of forking and execing /bin/sh to run it for us. Possibly this + would work, but see comment in exec_screenhack() about getting pids. + I think we could do the "exec " trick with popen() but would SIGIO get + delivered correctly? Who knows. (We could register the pipe-FD with + Xt, and handle output on it with a callback.) + + - For the simple case of the programs not being on $PATH, we could just + search $PATH before launching the shell, but that seems hardly worth the + effort... And it's broken!! Why should we have to duplicate half the + work of the shell? (Because it's Unix, that's why! Bend over.) + */ + +#if __STDC__ +#include +#include +#include +#endif + +#include + +#include /* not used for much... */ + +#ifndef ESRCH +#include +#endif + +#include /* sys/resource.h needs this for timeval */ +#ifndef VMS +#include /* for setpriority() and PRIO_PROCESS */ +#include /* for waitpid() and associated macros */ +#else +#include "resource.h" +#include "wait.h" +#include +#define pid_t int +#define waitpid wait +#define fork vfork +#define random rand +#endif +#include /* for the signal names */ + +extern char **environ; /* why isn't this in some header file? */ + +#ifndef NO_SETUID +#include /* for getpwnam() and struct passwd */ +#include /* for getgrgid() and struct group */ +#endif /* NO_SETUID */ + +#if !defined(SIGCHLD) && defined(SIGCLD) +#define SIGCHLD SIGCLD +#endif + +#if __STDC__ +extern int putenv (/* const char * */); /* getenv() is in stdlib.h... */ +extern int kill (pid_t, int); /* signal() is in sys/signal.h... */ +#endif + +# ifndef random +# if defined(SVR4) || defined(SYSV) +# define random() rand() +# else /* !totally-losing-SYSV */ + extern long random(); /* rand() is in stdlib.h... */ +# endif /* !totally-losing-SYSV */ +# endif /* random defined */ + +#include "xscreensaver.h" + +/* this must be `sh', not whatever $SHELL happens to be. */ +char *shell; +static pid_t pid = 0; +char **screenhacks; +int screenhacks_count; +int current_hack = -1; +char *demo_hack; +int next_mode_p = 0; +Bool locking_disabled_p = False; +char *nolock_reason = 0; +int nice_inferior = 0; + +extern Bool demo_mode_p; + +static void +#if __STDC__ +exec_screenhack (char *command) +#else +exec_screenhack (command) + char *command; +#endif +{ + char *tmp; + char buf [512]; + char *av [5]; + int ac = 0; + + /* Close this fork's version of the display's fd. It will open its own. */ + close (ConnectionNumber (dpy)); + + /* 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. + + The *only way* to parse arguments the way the shells do is to run a + shell (or duplicate what they do, which would be a *lot* of code.) + + 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. + + So, the only solution other than implementing an argument parser here + is to force the shell to exec() its inferior. What a fucking hack! + We prepend "exec " to the command string. + + (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.) + */ +#ifndef VMS + tmp = command; + command = (char *) malloc (strlen (tmp) + 6); + memcpy (command, "exec ", 5); + memcpy (command + 5, tmp, strlen (tmp) + 1); +#endif + + /* Invoke the shell as "/bin/sh -c 'exec prog -arg -arg ...'" */ + +#ifndef VMS + av [ac++] = shell; + av [ac++] = "-c"; +#endif + av [ac++] = command; + av [ac++] = 0; + + if (verbose_p) + printf ("%s: spawning \"%s\" in pid %d.\n", progname, command, getpid ()); + +#if defined(SYSV) || defined(SVR4) || defined(__hpux) || defined(VMS) + { + int old_nice = nice (0); + int n = nice_inferior - old_nice; + errno = 0; + if (nice (n) == -1 && errno != 0) + { + sprintf (buf, "%s: %snice(%d) failed", progname, + (verbose_p ? "## " : ""), n); + perror (buf); + } + } +#else /* !SYSV */ +#ifdef PRIO_PROCESS + if (setpriority (PRIO_PROCESS, getpid(), nice_inferior) != 0) + { + sprintf (buf, "%s: %ssetpriority(PRIO_PROCESS, %d, %d) failed", + progname, (verbose_p ? "## " : ""), getpid(), nice_inferior); + perror (buf); + } +#else /* !PRIO_PROCESS */ + if (nice_inferior != 0) + fprintf (stderr, + "%s: %sdon't know how to change process priority on this system.\n", + progname, (verbose_p ? "## " : "")); +#endif /* !PRIO_PROCESS */ +#endif /* !SYSV */ + + /* Now overlay the current process with /bin/sh running the command. + If this returns, it's an error. + */ +#ifndef VMS + execve (av [0], av, environ); +#else + system(command); +#endif + + sprintf (buf, "%s: %sexecve() failed", progname, (verbose_p ? "## " : "")); + perror (buf); + exit (1); /* Note that this only exits a child fork. */ +} + +/* to avoid a race between the main thread and the SIGCHLD handler */ +static int killing = 0; +static Bool suspending = False; + +static char *current_hack_name P((void)); + +static void +#if __STDC__ +await_child_death (Bool killed) +#else +await_child_death (killed) + Bool killed; +#endif +{ + Bool suspended_p = False; + int status; + pid_t kid; + killing = 1; + if (! pid) + return; +#ifdef VMS + return; +#else + + do + { + kid = waitpid (pid, &status, WUNTRACED); + } + while (kid == -1 && errno == EINTR); + + if (kid == pid) + { + if (WIFEXITED (status)) + { + int exit_status = WEXITSTATUS (status); + 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 (exit_status != 0 && (verbose_p || (! killed))) + fprintf (stderr, + "%s: %schild pid %d (%s) exited abnormally (code %d).\n", + progname, (verbose_p ? "## " : ""), + pid, current_hack_name (), exit_status); + else if (verbose_p) + printf ("%s: child pid %d (%s) exited normally.\n", + progname, pid, current_hack_name ()); + } + else if (WIFSIGNALED (status)) + { + if (!killed || WTERMSIG (status) != SIGTERM) + fprintf (stderr, + "%s: %schild pid %d (%s) terminated with signal %d!\n", + progname, (verbose_p ? "## " : ""), + pid, current_hack_name (), WTERMSIG (status)); + else if (verbose_p) + printf ("%s: child pid %d (%s) terminated with SIGTERM.\n", + progname, pid, current_hack_name ()); + } + else if (suspending) + { + suspended_p = True; + suspending = False; /* complain if it happens twice */ + } + else if (WIFSTOPPED (status)) + { + suspended_p = True; + fprintf (stderr, "%s: %schild pid %d (%s) stopped with signal %d!\n", + progname, (verbose_p ? "## " : ""), pid, + current_hack_name (), WSTOPSIG (status)); + } + else + fprintf (stderr, "%s: %schild pid %d (%s) died in a mysterious way!", + progname, (verbose_p ? "## " : ""), pid, current_hack_name()); + } + else if (kid <= 0) + fprintf (stderr, "%s: %swaitpid(%d, ...) says there are no kids? (%d)\n", + progname, (verbose_p ? "## " : ""), pid, kid); + else + fprintf (stderr, "%s: %swaitpid(%d, ...) says proc %d died, not %d?\n", + progname, (verbose_p ? "## " : ""), pid, kid, pid); + killing = 0; + if (suspended_p != True) + pid = 0; +#endif /* VMS */ +} + +static char * +current_hack_name () +{ + static char chn [1024]; + char *hack = (demo_mode_p ? demo_hack : screenhacks [current_hack]); + int i; + for (i = 0; hack [i] != 0 && hack [i] != ' ' && hack [i] != '\t'; i++) + chn [i] = hack [i]; + chn [i] = 0; + return chn; +} + +#ifdef SIGCHLD +static void +sigchld_handler (sig) + int sig; +{ + if (killing) + return; + if (! pid) + abort (); + await_child_death (False); +} +#endif + + +void +init_sigchld () +{ +#ifdef SIGCHLD + if (((int) signal (SIGCHLD, sigchld_handler)) == -1) + { + char buf [255]; + sprintf (buf, "%s: %scouldn't catch SIGCHLD", progname, + (verbose_p ? "## " : "")); + perror (buf); + } +#endif +} + + +extern void raise_window P((Bool inhibit_fade, Bool between_hacks_p)); + +void +spawn_screenhack (first_time_p) + Bool first_time_p; +{ + raise_window (first_time_p, True); + XFlush (dpy); + + if (screenhacks_count || demo_mode_p) + { + char *hack; + pid_t forked; + char buf [255]; + int new_hack; + if (demo_mode_p) + { + hack = demo_hack; + } + else + { + if (screenhacks_count == 1) + new_hack = 0; + else if (next_mode_p == 1) + new_hack = (current_hack + 1) % screenhacks_count, + next_mode_p = 0; + else if (next_mode_p == 2) + { + new_hack = ((current_hack + screenhacks_count - 1) + % screenhacks_count); + next_mode_p = 0; + } + else + while ((new_hack = random () % screenhacks_count) == current_hack) + ; + current_hack = new_hack; + hack = screenhacks[current_hack]; + } + + switch (forked = fork ()) + { + case -1: + sprintf (buf, "%s: %scouldn't fork", + progname, (verbose_p ? "## " : "")); + perror (buf); + restore_real_vroot (); + exit (1); + case 0: + exec_screenhack (hack); /* this does not return */ + break; + default: + pid = forked; + break; + } + } +} + +void +kill_screenhack () +{ + killing = 1; + if (! pid) + return; + if (kill (pid, SIGTERM) < 0) + { + if (errno == ESRCH) + { + /* Sometimes we don't get a SIGCHLD at all! WTF? + It's a race condition. It looks to me like what's happening is + something like: a subprocess dies of natural causes. There is a + small window between when the process dies and when the SIGCHLD + is (would have been) delivered. If we happen to try to kill() + the process during that time, the kill() fails, because the + process is already dead. But! no SIGCHLD is delivered (perhaps + because the failed kill() has reset some state in the kernel?) + Anyway, if kill() says "No such process", then we have to wait() + for it anyway, because the process has already become a zombie. + I love Unix. + */ + await_child_death (False); + } + else + { + char buf [255]; + sprintf (buf, "%s: %scouldn't kill child process %d", progname, + (verbose_p ? "## " : ""), pid); + perror (buf); + } + } + else + { + if (verbose_p) + printf ("%s: killing pid %d.\n", progname, pid); + await_child_death (True); + } +} + + +void +suspend_screenhack (suspend_p) + Bool suspend_p; +{ + + suspending = suspend_p; + if (! pid) + ; +#ifndef VMS + else if (kill (pid, (suspend_p ? SIGSTOP : SIGCONT)) < 0) + { + char buf [255]; + sprintf (buf, "%s: %scouldn't %s child process %d", progname, + (verbose_p ? "## " : ""), + (suspend_p ? "suspend" : "resume"), + pid); + perror (buf); + } + else if (verbose_p) + printf ("%s: %s pid %d.\n", progname, + (suspend_p ? "suspending" : "resuming"), pid); +#endif +} + + +/* Restarting the xscreensaver process from scratch. */ + +static char **saved_argv; + +void +save_argv (argc, argv) + int argc; + char **argv; +{ + saved_argv = (char **) malloc ((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); + } +} + +void +restart_process () +{ + XCloseDisplay (dpy); + fflush (stdout); + fflush (stderr); + execvp (saved_argv [0], saved_argv); + fprintf (stderr, "%s: %scould not restart process: %s (%d)\n", + progname, (verbose_p ? "## " : ""), + (errno == E2BIG ? "arglist too big" : + errno == EACCES ? "could not execute" : + errno == EFAULT ? "memory fault" : + errno == EIO ? "I/O error" : + errno == ENAMETOOLONG ? "name too long" : + errno == ELOOP ? "too many symbolic links" : + errno == ENOENT ? "file no longer exists" : + errno == ENOTDIR ? "directory no longer exists" : + errno == ENOEXEC ? "bad executable file" : + errno == ENOMEM ? "out of memory" : + "execvp() returned unknown error code"), + errno); + exit (1); +} + +void +demo_mode_restart_process () +{ + int i; + for (i = 0; saved_argv [i]; i++); + /* add the -demo switch; save_argv() left room for this. */ + saved_argv [i] = "-demo"; + saved_argv [i+1] = 0; + restart_process (); +} + +void +hack_environment () +{ + /* Store $DISPLAY into the environment, so that the $DISPLAY variable that + the spawned processes inherit is the same as the value of -display passed + in on our command line (which is not necessarily the same as what our + $DISPLAY variable is.) + */ + char *s, buf [2048]; + int i; + sprintf (buf, "DISPLAY=%s", DisplayString (dpy)); + i = strlen (buf); + s = (char *) malloc (i+1); + strncpy (s, buf, i+1); +#ifndef VMS + if (putenv (s)) + abort (); +#endif +} + + +/* Change the uid/gid of the screensaver process, so that it is safe for it + to run setuid root (which it needs to do on some systems to read the + encrypted passwords from the passwd file.) + + hack_uid() is run before opening the X connection, so that XAuth works. + hack_uid_warn() is called after the connection is opened and the command + line arguments are parsed, so that the messages from hack_uid() get + printed after we know whether we're in `verbose' mode. + */ + +#ifndef NO_SETUID + +static int hack_uid_errno; +static char hack_uid_buf [255], *hack_uid_error; + +void +hack_uid () +{ + /* 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 might be necessary + to install this as setuid root in order to read the passwd file to + implement lock-mode...) + */ + setgid (getgid ()); + setuid (getuid ()); + + hack_uid_errno = 0; + hack_uid_error = 0; + + /* If we're being run as root (as from xdm) then switch the user id + to something safe. */ + if (getuid () == 0) + { + struct passwd *p; + /* 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.) + */ + locking_disabled_p = True; + nolock_reason = "running as root"; + p = getpwnam ("nobody"); + if (! p) p = getpwnam ("daemon"); + if (! p) p = getpwnam ("bin"); + if (! p) p = getpwnam ("sys"); + if (! p) + { + hack_uid_error = "couldn't find safe uid; running as root."; + hack_uid_errno = -1; + } + else + { + struct group *g = getgrgid (p->pw_gid); + hack_uid_error = hack_uid_buf; + sprintf (hack_uid_error, "changing uid/gid to %s/%s (%d/%d).", + p->pw_name, (g ? g->gr_name : "???"), p->pw_uid, p->pw_gid); + + /* Change the gid to be a safe one. If we can't do that, then + print a warning. We change the gid before the uid so that we + change the gid while still root. */ + if (setgid (p->pw_gid) != 0) + { + hack_uid_errno = errno; + sprintf (hack_uid_error, "couldn't set gid to %s (%d)", + (g ? g->gr_name : "???"), p->pw_gid); + } + + /* Now change the uid to be a safe one. */ + if (setuid (p->pw_uid) != 0) + { + hack_uid_errno = errno; + sprintf (hack_uid_error, "couldn't set uid to %s (%d)", + p->pw_name, p->pw_uid); + } + } + } +#ifndef NO_LOCKING + else /* disable locking if already being run as "someone else" */ + { + struct passwd *p = getpwuid (getuid ()); + if (!p || + !strcmp (p->pw_name, "root") || + !strcmp (p->pw_name, "nobody") || + !strcmp (p->pw_name, "daemon") || + !strcmp (p->pw_name, "bin") || + !strcmp (p->pw_name, "sys")) + { + locking_disabled_p = True; + nolock_reason = hack_uid_buf; + sprintf (nolock_reason, "running as %s", p->pw_name); + } + } +#endif /* NO_LOCKING */ +} + +void +hack_uid_warn () +{ + if (! hack_uid_error) + ; + else if (hack_uid_errno == 0) + { + if (verbose_p) + printf ("%s: %s\n", progname, hack_uid_error); + } + else + { + char buf [255]; + sprintf (buf, "%s: %s%s", progname, (verbose_p ? "## " : ""), + hack_uid_error); + if (hack_uid_errno == -1) + fprintf (stderr, "%s\n", buf); + else + { + errno = hack_uid_errno; + perror (buf); + } + } +} + +#endif /* !NO_SETUID */ diff --git a/driver/timers.c b/driver/timers.c new file mode 100755 index 00000000..9ad02064 --- /dev/null +++ b/driver/timers.c @@ -0,0 +1,365 @@ +/* xscreensaver, Copyright (c) 1991-1993 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 +#ifndef VMS +#include +#else +#include "sys$common:[decw$include.xmu]Error.h" +#endif + +#ifdef HAVE_XIDLE +#include +#endif + +#include "xscreensaver.h" + +#if __STDC__ +# define P(x)x +#else +#define P(x)() +#endif + +extern XtAppContext app; + +Time cycle; +Time timeout; +Time pointer_timeout; +Time notice_events_timeout; + +extern Bool use_xidle; +extern Bool dbox_up_p; +extern Bool locked_p; +extern Window screensaver_window; + +extern Bool handle_clientmessage P((XEvent *, Bool)); + +static time_t last_activity_time; /* for non-XIdle mode */ +static XtIntervalId timer_id = 0; +static XtIntervalId check_pointer_timer_id = 0; +XtIntervalId cycle_id = 0; +XtIntervalId lock_id = 0; + +void +idle_timer (junk1, junk2) + void *junk1; + XtPointer junk2; +{ + /* 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 = dpy; + fake_event.xany.window = 0; + XPutBackEvent (dpy, &fake_event); +} + + +static void +#if __STDC__ +notice_events (Window window, Bool top_p) +#else +notice_events (window, top_p) + Window window; + Bool top_p; +#endif +{ + XWindowAttributes attrs; + unsigned long events; + Window root, parent, *kids; + unsigned int nkids; + + if (XtWindowToWidget (dpy, window)) + /* If it's one of ours, don't mess up its event mask. */ + return; + + if (!XQueryTree (dpy, window, &root, &parent, &kids, &nkids)) + return; + if (window == root) + top_p = False; + + XGetWindowAttributes (dpy, window, &attrs); + events = ((attrs.all_event_masks | attrs.do_not_propagate_mask) + & KeyPressMask); + + /* Select for SubstructureNotify on all windows. + Select for KeyPress on all windows that already have it selected. + Do we need to select for ButtonRelease? I don't think so. + */ + XSelectInput (dpy, window, SubstructureNotifyMask | events); + + if (top_p && verbose_p && (events & KeyPressMask)) + { + /* Only mention one window per tree (hack hack). */ + printf ("%s: selected KeyPress on 0x%X\n", progname, window); + top_p = False; + } + + if (kids) + { + while (nkids) + notice_events (kids [--nkids], top_p); + XFree ((char *) kids); + } +} + + +int +BadWindow_ehandler (dpy, error) + 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 == BadDrawable) + return 0; + XmuPrintDefaultErrorMessage (dpy, error, stderr); + exit (1); +} + +void +notice_events_timer (closure, timer) + XtPointer closure; + void *timer; +{ + Window window = (Window) closure; + int (*old_handler) (); + old_handler = XSetErrorHandler (BadWindow_ehandler); + notice_events (window, True); + XSync (dpy, False); + XSetErrorHandler (old_handler); +} + + +/* When the screensaver is active, this timer will periodically change + the running program. + */ +void +cycle_timer (junk1, junk2) + void *junk1; + XtPointer junk2; +{ + Time how_long = cycle; + if (dbox_up_p) + { + if (verbose_p) + printf ("%s: dbox up; delaying hack change.\n", progname); + how_long = 30000; /* 30 secs */ + } + else + { + if (verbose_p) + printf ("%s: changing graphics hacks.\n", progname); + kill_screenhack (); + spawn_screenhack (False); + } + cycle_id = XtAppAddTimeOut (app, how_long, cycle_timer, 0); +} + + +void +activate_lock_timer (junk1, junk2) + void *junk1; + XtPointer junk2; +{ + if (verbose_p) + printf ("%s: timed out; activating lock\n", progname); + locked_p = True; +} + + +/* Call this when user activity (or "simulated" activity) has been noticed. + */ +static void +reset_timers P((void)) +{ +#ifdef DEBUG_TIMERS + if (verbose_p) + printf ("%s: restarting idle_timer (%d, %d)\n", + progname, timeout, timer_id); +#endif + XtRemoveTimeOut (timer_id); + timer_id = XtAppAddTimeOut (app, timeout, idle_timer, 0); + if (cycle_id) abort (); + + last_activity_time = time ((time_t *) 0); +} + +/* When we aren't using XIdle, 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 (closure, this_timer) + void *closure; + XtPointer this_timer; +{ + static int last_root_x = -1; + static int last_root_y = -1; + static Window last_child = (Window) -1; + static unsigned int last_mask = 0; + Window root, child; + int root_x, root_y, x, y; + unsigned int mask; + XtIntervalId *timerP = (XtIntervalId *) closure; +#ifdef HAVE_XIDLE + if (use_xidle) + abort (); +#endif + + *timerP = XtAppAddTimeOut (app, pointer_timeout, check_pointer_timer, + closure); + + XQueryPointer (dpy, screensaver_window, &root, &child, + &root_x, &root_y, &x, &y, &mask); + if (root_x == last_root_x && root_y == last_root_y && + child == last_child && mask == last_mask) + return; + +#ifdef DEBUG_TIMERS + if (verbose_p && this_timer) + if (root_x == last_root_x && root_y == last_root_y && child == last_child) + printf ("%s: modifiers changed at %s.\n", progname, timestring ()); + else + printf ("%s: pointer moved at %s.\n", progname, timestring ()); +#endif + + last_root_x = root_x; + last_root_y = root_y; + last_child = child; + last_mask = mask; + + reset_timers (); +} + + +void +sleep_until_idle (until_idle_p) + Bool until_idle_p; +{ + XEvent event; + + if (until_idle_p) + { + timer_id = XtAppAddTimeOut (app, timeout, idle_timer, 0); +#ifdef HAVE_XIDLE + if (! use_xidle) +#endif + /* start polling the mouse position */ + check_pointer_timer (&check_pointer_timer_id, 0); + } + + while (1) + { + XtAppNextEvent (app, &event); + + switch (event.xany.type) { + case 0: /* our synthetic "timeout" event has been signalled */ + if (until_idle_p) + { + Time idle; +#ifdef HAVE_XIDLE + if (use_xidle) + { + if (! XGetIdleTime (dpy, &idle)) + { + fprintf (stderr, "%s: %sXGetIdleTime() failed.\n", + progname, (verbose_p ? "## " : "")); + exit (1); + } + } + else +#endif /* HAVE_XIDLE */ + idle = 1000 * (last_activity_time - time ((time_t *) 0)); + + if (idle >= timeout) + goto DONE; + else + timer_id = XtAppAddTimeOut (app, timeout - idle, + idle_timer, 0); + } + break; + + case ClientMessage: + if (handle_clientmessage (&event, until_idle_p)) + goto DONE; + break; + + case CreateNotify: +#ifdef HAVE_XIDLE + if (! use_xidle) +#endif + XtAppAddTimeOut (app, notice_events_timeout, notice_events_timer, + (XtPointer) event.xcreatewindow.window); + break; + + case KeyPress: + case KeyRelease: + case ButtonPress: + case ButtonRelease: + case MotionNotify: + +#ifdef DEBUG_TIMERS + if (verbose_p) + { + if (event.xany.type == MotionNotify) + printf ("%s: MotionNotify at %s\n", progname, timestring ()); + else if (event.xany.type == KeyPress) + printf ("%s: KeyPress seen on 0x%X at %s\n", progname, + event.xkey.window, timestring ()); + } +#endif + + /* We got a user event */ + if (!until_idle_p) + goto DONE; + else + reset_timers (); + break; + + default: + XtDispatchEvent (&event); + } + } + DONE: + + if (check_pointer_timer_id) + { + XtRemoveTimeOut (check_pointer_timer_id); + check_pointer_timer_id = 0; + } + if (timer_id) + { + XtRemoveTimeOut (timer_id); + timer_id = 0; + } + + if (until_idle_p && cycle_id) + abort (); + + return; +} diff --git a/driver/validate.c b/driver/validate.c new file mode 100755 index 0000000000000000000000000000000000000000..255fd6c3dc3831e5b72010ea96d1802135016227 GIT binary patch literal 1140 zcmZuw?`zaR5S_MuFjQz2f1wEDiIC)Sca0V)tXEJ_Dbym!^^3@nOZF~-T(azL8V>P) zcXo4W;?Zx}H#2YEyqWC7#D5LwJ2z3DC6VSBp@@{KOPS!Zl=Q3=mvBHi69Cw!{6qT2 ziz3degsW}j5xmJ71V1XBWaT(L?_;sv2u|2>mp2e~GEN6XYFYP*)iX-2J0;iOf8vbV zUqx#^`O(S}Q6|S!gMOZC(rAfA;Kw3l zFTqh-R)QP ztGC@o&Wn{!v0UDv`zbj=J!r#}<+kcQ)@+rog0}jlxt=?!KZBD-DxKe~)x52Bd&hQr z;b!(A3p&F`=c1n5pWq!$K`!iswj{wWuA*Ff?6le6B3_IC+U<~7Nl9?#ne#dE$a^|_ Wb0ID*m;M1`VvC%3Y!Cj@J^urNhDNOb literal 0 HcmV?d00001 diff --git a/driver/vaxdeccobjs.zip b/driver/vaxdeccobjs.zip new file mode 100755 index 0000000000000000000000000000000000000000..9e58ff8a475255d0901f8186aa3848055791191f GIT binary patch literal 43460 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 literal 0 HcmV?d00001 diff --git a/driver/vaxobjs.zip b/driver/vaxobjs.zip new file mode 100755 index 0000000000000000000000000000000000000000..7de07f3c100614d91e14f764b0fbade1db614d40 GIT binary patch literal 42518 zcmb@t1F&b$v*7u?wr$_;Ya4xS+qP}nwr$()Yui>|+t~iS_uqLN`(}3L&FqP&Qx#QN z8F3==WJP`|Q%({D6cqpfKmv@c^YNMaA@5d@0DvCqe`W>&M#k2*w6+Eo;?hU}6=_8k z008W-EC8UwLdyaWmnH+Ki0}&l0p$Lf1A+KEVvqy!0|o&6fb#%Iz}DkPM6)Hhe+6;= z3W^B=0jL2mfFxV41_0PkL=d`J3}~gl8^xtb04hTKO8+eX^N=+FK;-mB27rpMMwF_I zOCJlbMnL}&!w0CyDaZl=)Br*X{0u(~fW9D*`1Jq)`hVN@j|3J#MM3DVqJO@K-Hu1$ zKNNv3X;@m}sJiqp;YuV)oeQs}6pE{?t!rPC#Gq}Qk|Q?ckJe9S#Li8|6(|r@3CqVE zgu?!cpke*Fc=@%a+xe4K^IObVP#S$p0D6-+l3csf`2tm)y1)!HEVy$zP3AJ1Ai;o# zLZYZF$Mb~WL2PWgP)!M$*>UFes{LehZsDQ+0Q;kqx*`pHPh8}+xMmR~8kVpdV!a%)EF<|9% z-#)kJAd_oA^>thwfx*uey$hP$YGJsrbVPr$TRm}n%eKza3s?^EM#f-$rj_f)pOdNv zsc1}|Pz5Dhl;4In0JgT)sbTpk4%F-J_008YLx*ASZZG@7E)ObAKe&e=hL3^a&+CUD zA%;)zL(hZk8dWGJDV)>GFBbGQY~$boe4V)3pT5M#9x6+5pBVTDctAiT3Jb5i^1&WO zmgu&`c#mJ^VnS8`>RvEFiOeD;ayH+`oWO?;ML2aqR;Lodt!q0B5}D)Mr}W&9li$rW zbVsNP`c1Q2<{Kzl%0vYTh@44ndCz}r%^xb(^MgJ}ruIZwCNNwk&D1??D%hLK0ojb! ze!XtrKA;DkgN_<74L1>XTE(bTA+k|6pJl^F&72!D5GYH!-<~UKxnOSQUyyDRK@i$b zfS6;+=+QYwVJA)RBaN?CAXA&_$kwkgGBLX`#(cfcv@v59%Q)rv`g&=av(a;o^+>R= zId0mTtB<&EiqtXCRYVx95|YN;6kSThnjuZu#R!E6x)@P+_!QQ)vNmRd$~%=;L4SIF zd(UsK+lPj_Mi%nh0X(gigp~@O9xhB;QbN|h&lqu4kvd8wSwA=Nhv2@6;%(W1J(-3Q z!&_a1>!Dd{q0|+!1(w7Wl2Lvn=8`gL`T5+1zQYsbP|oj~7kSZO2h<8xLFcq~fjmWR z!#roUx(>;D{3zF0->^7J*-OLw(*~?`jQvTQA(ON51xWSmY9M}t#v4x2Ibp?I?P#W% zv(fq zZ> zT@1rXs`Sq)R@9RtNece_?ZTj5N;nCsL5kTLYU)c6%hf|c9PJPh`)?!t#pa$Yyg-pN z)|%?@^7y4+7kV@TqQ3b)BE{92<;DkH0@}s2#rV~U-+fPX^h3D=&<6*ruA9|Vp-|${ zIS}H7vZ?~th+mx6oOYSa*4rbiOZHWqAHE?U5N3?B>+7DBT+t^!A=odc8sHzX(vR|W z3$#zs(wgQudPE)InzvRxEBR!pOifk%T`9C|jiFK247Jbk2~Dz$`uU@lPQr%bu#t zn=BAi`s%a?eHzf&)ijY#9I4ET$c6;DE>kyd<)Uu|3}2UA{2}3hNrW-+UZe8dQ=$^p z8z7kq$&?I`i*(y`O24G^sRFJ?qam<~wpv4Z7)5Ejbt&87Ll zaE_Q97cCh#GEkTAbz1h0oSU2+5gkifOGHY6!+AZ3pnDlJwNZz+OyRxJ5nCIbVT zd5Afe_>{&PruL!U)G&kYC+yzcUTEQVIq$>8b;T`>aj&X&hAR-Z=wSfKxS^B8m|~#V zUM$`ydpK6`43VU=9x%yiqeoPYMvI3$)N5midG(r8rGe4mDhRNNP^EwgvzuC+e4f~I zQAt<<5U7U^Xd!bo$MDHZ(#w!3YaHG?+s3<)2fdOoKRd~o0*FwQw*nKeD?Ht$7Y{fV zmmk{AS07gZyzwAC**c1wD-LCI&GOQ9bcTzFiI_ZHtQX=#GQiZ^=c_m;D7M^i*%Slt zTHIkU^kH?dpr`1O6x|dY5{}ml`*Acrb1H1WOKBoOnwEW@EyY4HV?GhBbcTxFmos>p zgc_I?{%FQyGjeO5j5|Ha@f&pO_Q5I61(&EQX?1rgr{3uZ0w4)e;kC|OXZdhQPIOiV zl+(7&qh1L2ufJu@_D5if7gQ!FF@H>2wS|r6pNyHu9_+|taZH;X&bX zI96Ko&ASFXLQM|SMYFYJal5@JQ9Dq2FrssP-SwZwi_Po>ioU}G-H8I+kV)wD4j)H6 z3`%8kFWx5%sL?wi=#??OZ~}i({la_y`Xkna!~T9-j%<#&Xq8pPj>d%@Y0|uAp4aS_eYh=O7Y8LX7LQw@V_~=tasC~S zb^blb^X-N~I{vbQm~Pccn7GtHKKYd=do9-xpUX?jn75XR&d?-*9)SP?MK6~w&0ygT zl|;WudkZ_|H%rMns1yZI$`I2@2u8i?cc`{e;arUL>MKJ|z)?ViNnr+$=3sT!%7hQ> z>z!Q%mv8#sMO^C4#&#gqTEavi8A~lf0(H;NIc@xFAPl{2C_@C<7f-^yZ{Qzbx#K)t zg<8kIHK>XV8067=7j3$Rx*}>8%~HU_i`QlWg8u!$^#wuw48^Tw_1mF1xFCW2#81z; zjg3BZBW|J6$HnW6n6&Mx31sn@H0Xbbcq8V<)m)7Og=;SGag0vEMM@yj>-#-Eo`&>3 zeZLNAtIBOmNDLIu-U$blj-XkjoNMG}771O1@tYW$56w-_MjQRh31w64<4jQ$Wpg&t zq~k6|Rb2>8n8f_eS#OqSC5w7fS)SXM=ZJ&I>ISu^YTBKx1=%?nFVA2UGXC_VwN`1{ za~Yffl23aW-u5Nrpfdc!=KXwO^WgzAaE#}EJ^riezztiN+2dgmZnTO`gE+f*MylX- zJPef8RTTG`9)m3B%pWv(N(k09U~ero+Jn(^swzXyaXWLr>(Bji=J}=1{anuStpARe z`MH*XE(69u2pw)ZD?q2aeR^3x-p3VF4&LuxhdXz@bmTVYTxnLyp*oO|~?S^VAcrmnmeeJlJX}A1V zEveV zkSfP0X~>9~nmc@X((orBE0dBXxjE8Zky+Ai%QB?j`L|A6s7Id(FtJw-#T=sOkbf1x zIIPf;xLy*!TC)xN`L?&io5c0!oq6%2VHRcN>08i)Z_ZUa(?2rWD+RKqvsdtUO5rZ) z1^#^zQlW^ltdbgvCgX2DHQM2NR-lQJrK=Gv&;3Hkg+sV%WAJJbyb5WncjRWL-QRY$ z)K;tdHR;#evq^jAb-GXMT-LFOe>LyXCV9EXAdg2G56QG<*UnSch)*mUWRIMzw~yhO z9OK_*@4;a0O~&Ar;>MIVBpllNnQi_?&tMw|^ge*ldQH`G*_yk+zJ+hs^%-);@>+4t zq||zV9^DvStMmF^EDCPIx4#GOMYZGSVZJ%LV|=Q+c&f@%Dbgc017?w3I8xegRI~RD(NOj!-l|$Cg(J5^|CtKI-M%(qw2?uM%S00}uBi7jXO=$OM6#6XNF9?r8>kestZ2H(t)MG2XpmJ zHoXFNqpyZAG=CGeuhxYj@T`Gb{9M-GA(3RL4NvuTV-}Bab{7_mG!;W|r zKHmgS2K1bY5UHyd=tsbox3}mLb3K0BV_GMO~Ifq~JbQ+JDi%W9BabbZuxhp1O5AT|GhI8~%g@9V-JDZgF?V)x67(y- z{C&bKqU0Do^QYx6Ye|_|>=l zx8u$~QVFYE&1s)d3@?fqZ<(mf$yvD|w>PQ8zarDd_&D4%O~|igw%dPkxSKjSB$SXN zZOPIU&4RA7g?|sCY}lmFP#5gz3Yx!&ss=Q)rH{qdE-a4Rlu8trcP>JNy|D>t3oUZJ zApBGVmF7vyJ6Am_E)ItH24S80Rzz3BVn+Bj1DD=+WtLv}j!J-}A+w>Q(Z5ylFrjD$ z?a)wJxM}F>(h`NDGo&U`rDKpl*(}(60B3C;W zx8Qz|e65uEbM$d6IwwnTSojeT))i03QM_#iIt`jzZCtir9Y$Y|Fsh`ANkE9?jqr(^ z(&C&MndBq2Hz;w=+N$V4{DvIdXpKV$x^5R*I}m5t1TCd_&18-$`UPLSg}UI5&bCwD zn_A9ZhfzTGF!5~!InZG)sEPzRlvXX z`0Y{^?aBf;gZmRVf8GFNFhXDX;NHjp?DsQ7!_FLB!8d5GrF0>hRT!;k*cR@q#Vs&0|6`4v=T8 z`v6%NvM!SsRRoE=GyDd!zGq$WDMgh3G!D`_b`tPQ!eLY!bJNZ|25y(qo2A~(gq?cC zNknoWn@23BB#y9Ma9Thz!3+;xPCPR@Jrv7M zJ!Qt?Gb+!|Ymm}bga)EAR=D~5mTm3@0+NSYV3@z@)nYioyK7MNrl*ndJ; zz|j9fSj>xoX#XIrHsv7Tzy1FUVg19b{$~ga0QfhA^)E%BQ(Au!)=F}ZAe{AD3fWo; zLHU|m%aOx(TiE4=&4RGM+@hL^MEJsM%mhq$XFgUk2ym@$?tZJkdHGk3+7yl|1%cWA;}s;cVM48|x^gJ>PE>ao!cBPYN7$vM;g4?GUc3i7 zrKM{Vj_|5XxpV`H-{=RE$yDrW0Zq95sw-;OAq1TnI1Ksgo+0*~_d~chO^moF7J8GE zuDRBXB)z~~ixBZDdcy-}lE$1t~^J}vU%NwrgE!RegL3SOsyOh?y`p6;PXx||=tuMcH)_s)pM~+aM zK3VYgNUgv9W9%YYdW#_sKLrDux`Vaf#AQ#6zjt>Qo(QOv;k;Kqnz}V#7uQ^>L7H6x zvvF>8uR9rL_j+aCOq;)9>+UI$9_K8+$@C5=q1Y^&ztQU=i?UHltDbiFSs*-X-rj9s z#~%y*q+LE7MQe3wcR((zR5eR?&aY29m&?V%`NqP=pPjVi%?|veAD^7H;v*IPv}b=> zHPi72Y@*MvTC^%yL9+=*D5G+fnujAI$X|4=BNE}2Hub4r?i8*HFVa$Q>_S|>K&-#l zyubELqo;G#GUYV zdP$e^XeoY`-LbUeJxcY|@|(0yWd53b7W`p*o5R4K#|`L`nLcn?;kxU_R%WOQbiBb& zq|CX!E!B?V>g}!Vqm(r)%w({JhbQ_m!tN$ALGr9sBX@XKW+7^H1jSOCEW;`vX3i%! zN|LUmH+tyqCx_S+Rwqhi7E+OugR|2BV5G`9#uT|iAsVIWubEaruk;3R0zF}`LHS5f z9PA(BsJzcmOz8;(&RP(ZFbBrK3RQZ8O8j}yy;KC>yUs^dB0sQAGD!8j_0nthE$PZ_ zTK^_>Z1=1YjQwPyh7;Ive$F%LDOr8s>V9DnsZY0DEg#v_{Pz3CtNeuWx_5ozTSxUe zAL5Brygu?AJ;s$I=?`e0Ytq@DCu3q-%0^lD^}{fe5pVi4w4V> z*(H6f1UtKT4K^bj8(Kk;4$p(W$ycrgoa?B@nkq)-Fm+_c%kkOrN|ORE*^gF@#OJDR z@Is%Q_8f)=_RMu;sLO@&zJxPORukLITR^W>edvlWI)cPR^6Z6jK7@*=G<~eKh&uv9 z#^VP2qiuhxvA5ATB@1mgO!Sy+g3m|NCWcn(yBwmst_rd?{H*oMq6|T71&#^89xOeu zb|CsFHrTA|p8SU*7K>}!1}2+w(rL%Fz7WpiH@o1+ben1g?;v`d#d3_1?wclY{kuR9 zemZ0)16KDAx?y+D>{{t{Ho9ihXn>P*p1=Nm(LdSxv3!2h8gF>_}d8}hfMBeLBoL!L?+NflEH%yV2Pj3 zn0hVnW4?pv$Dw%$?@5)hA(k|rOfux2Lj_GVp8RfT1=)+Z_?2PE<4T5DGyNuneWsYm zlR3lefyO|i4IhMH)J=?^h}Zk}I};cWa-*U87(LvTKgQDE&N>C9{K*TS;E!e-E!F&9 z@0ds{N@Bl!)-X6@^MpfKEMH(6aTn?tx->6o8Er5vKQ|p{Us3-)s5AvLX+b-GKwf4+ z8|qo;zUS1Os$@?y8_Wc8kg#2^Qd*fzz@+kgzv8UyINRBe^qf)0P|`Ux`A|3n)n{ow zfoc?F;RB+wdLZ}$hJZlU0V1j`!6a5afg~B7a3|4LWX)9D@nt%J`nzU|7HJh&5+bl~ z$^sUBh8F;>V?Pw5C`9gVxj6$n)QEvy%8M>NQGsn@|8Fynq^5+HJ~e!$cejR5*BtwH z9QKm6lmhuauJm{i9b3O`ee9d*1V2}yj_+$Wm2kJ#K{M&&?q?=M;iCZ}I)gVddMKmZ zJM#_{@I*oA6L}B>wxXB&;^s@A6$W|h#!ipeC zoFqHhWIO#pWa0|YT%7>@9y($pEwuSw54NufsevTQd{yTZPs!C5a;^wt1KkebRTESb zDl*ADSBo-b%4P*Yo+5=x=EVcbW(~p59Eq*u4RKVZtMDoAtwHeikpv7e{_uX|n`Putv zIbC25FToQ}7R*$ciLqRSLCa0;RGl=jJ7ITb%1(&<)ipZH!J!(;m{j|j*HRV26foxuil z#Y}~vZDxCtypG*w2CB1vW=Hm2>Iq@LN9S8I&N8T>d}(06Lxw3`kodWb8xmlrL5(9A z)`8n3jfC)%vck>|z}TbP5GzRoX?F<3F$dFw5s|K@2c!h$g%1!4RLW`P+F+Oq>Iv>I zQo|3h83F#IUQDL1aAr_qF+yfT6ahapREaptCdT!0tzf59G@k; z#-JZy3L^(S(uSmnoTfuY&cT@Uiyg5csYVnQ_D3HAxFD_$518$@5MN3DHa(F zT+04{E4>&d7_Ho#3O)H|37ls}uZRqAse$ktpU>zulaoijq*^KTUeahfVKx3PnD7xt zEYm;$Udn9r-3zydgK-pZs?~{o>Rc}HcIrv{WaDkNb=#{_Gv1@t^qnjveDP=W$HtH~ zw)RG-o*e$2SXFKIOuSsi55-wc1${HoDPI&h?Cr!KhGC3B6>@WR5_Xf5K>T6A8k{NU zIzv7yZ8jHduZvEsrKk|3JK19A2)V*7`n{#8;KbI-z&r^E>DCViY`^0IZMW{BeYsn~ zO+W*zItEU5w|f1%^N-Dv=5b-4F_e5>C5D7t+t1CcOZ5&@8G!uC;syX|Kj}v3FNuxi zbb6BYOS-a>L-wSdVCpx&3{t3;-Eq_8GEdv)EQC2}O*dfFr@S`Y0jtDvZ1R}UF@1y- zZkni^fv!S(3O9!GZHQe|&^^0lKOZ1|p#^X6p0HEK2lx(EHllt2*Agk*NOCWT^CKaM zQDFANQ-JjjTT;s$Uh{wZ`khci9o;>Tw|{s$(Dvf|9Zs}+C5=JT)d)TJ%hVLnATSCy zye=uwW`5HwSbf2cjloGiUq{PT7TxQ{FT94mJ}aRn!<615E&Mcgp=)N5cI7vRIBKFc z_<;R!jkrW!`hfT-OImE|frjmRs;s9OUhr*_uW-bhtQ?&Qd zp{IdtzdXL8gk%a^X_8{Cl+YK-@)libK1+gqhLY@|B$%yG?u>1rRg4ePa`@?qb@tV5 zOli%3-#g}P?Sw+iPJIFr8a*}$vLg!r-TM>kC4VTQU!MafEF(e5&h}?^pR+0*% zKS#vJuWw`<{@RdJQKtIhc(AW94fcbuU%vRpr#)V3cT|73|h=fT$K zwGj#XqBHVW1VSkzjx2uCrN~`B(boc3R82ukXa|=FIs_ zjnZvPD7gt0C^`9Bgj!aJS+EnoquD93If`AoTZ+EbdtyaDkFA2LK4%ys3TzFFX+2-$ zO^H#pP?#Mu=^$Dm0bVB{%zlTWpgLT4q&n2$!%+bAvX z#MF+|3DvXZh_QNP1BWO*1#s%+1~h1ZO~;*L9U36-1Nd7H(yG6={@2Sd7Cexz7XEMH zyMyh>>=(9VO%A-7u6?Jo!ks{N|CYV)9t|s%EAo(FK?@SeA(TTJro$QoW7IW!^6be7iwx6 zQsl;PBkuI974*XlcWZst_=q2hjGDwqvQrj1{rd*kpIaJP5a=GlSAxz@bA_TiQc}kE zU&FZtCwp#BdkdR8Y_ZgfB=a-ki&NpZo4GkYt4lo(mM&pfG&yNz|&Ldj%D#N(Nnd*_Ii*ke4}5JN@8 zrYQch>7s?!`4{y`ogq4Nw7ik?5(>WR_z7!xPR{o+yB})ky@Go^QUaDaOH2KMQhf8}ESEdLA+7-_zvP&yFBe(L z%}wrlT{ttc+fyp;l~pMz9nsde zRc>m?hZhFUGd8ZcPn?)I=UWzHzA&eT0pv z2A4d$;=*h{DzUjTajkfxANWN#*5<7Qw)i>o3zHooQQ-VGkoaS_;j>joGYm7(8)-b4 z686QD3CvxQIywdEfU;};xNp{InO0S=BX3plhnaAcDAUlx)o4YlWLL}KZTFWaYj#x) zj@gZ7o5KL!&$3K$H-#Ihb%wszBMZ}?zt$0fy6Z6a)b=p-DV%^VOQ&2F?}=18okc<| ze+GovogtO@B-GPH;=ZGW#u_Quf(y4BEhNMLk!bFi*Vq0NR^z0kTCtEE^GBjCS6nT^ z;W^M?{i4i0*d;ZPk?~Rf8{$7ORMlS$wF?Btr}3Bf$Up!9uz=qHQ)4GPR~von{}P9S z`tNfny#JO;^$$V%heJIO!~vjY%>n<3MExW1Z^={-&aLAAkSKb!c9H)h67?@dpvg(P zVw$R$eKYObm2=I@?ahYNRIV}*I78)20>wBw2`>k5hVb*P4YQhR1kf9sH^p?O6KSI@4$?5=%x7o4%VzsL?>37TRo*uP-OpLqGuK=@ zuRV^~akq9Q=$!)7?W8}hYpZLJENNuQw-h{&r2^GFE9!fIx^I$*fd) z&d!}DZ-I$>eX%ck-P+k^7ki zq0#IGa~52BXrF~g^oxNyb%XF^_lIFdM6jq<)c9rRezaSzpj`X`5hKLC>O?$6czlf5 z@|SZXM4q&#swhAs3$TNWS0*02xgbL_VzuVs6yd_fKvVUul}Nd(cU|`&8~rjw&-*pnQIn8=gz* zYb1-n<%I`@wf+i&wJ}t13&SJir>3g=n_O)mN|26n$qt9uZZch1E+p^ zjrk>kj)GXZABD2~Z8ep|TZ{hveK)kftr&YGz`*AXO7M$o`@GWdgRhCblf50^E6F{w z%8MW1SjBmwdY~fQ-&hqn-ryBu7hKmyZpAfz5C3_GEl^MM2=IYqjWwgeDT2H485%zL z(@z9ProXhq&l)J0POM~b0f)Ig7pOe6YpXsMzM=D_;c$T?vwgj<{sua4jPsauO6gF)2*b{eN+#QnH8`qs zjtKGnefuzrznBPmo7|g&iz7T%ub(ud!9qN;kWugo%b+xBOm>OLlS9sy5dfuI8p49o z*CQeTGzjUA5%U=qu^Zv$Q;PeJg;qc>wk?tF(ot!L8tn*)wnO)opJ%1%so4|TcE?fk zGd&|$ve@MKgoCzoY!54DM@u~fNaOfsb66x~F#RHN@s2Z;Eme_l!e+8GMK2{=!kW68 zj<(;7vl)2Dielhbeki1&kw;Df11l%o{Ajo%g}8*wMHAQkkmkXqH)Dt=W!s>C%#j?_ z_z`_uCd&i5&9xFSwXQ@l=%1zO( zXTkhBr8^g)US?(S;F-%<#G!)G1BXw2+)Q2^0z73A1y=4jngf@jBjsM?tsQX^)M;eq zZKqLy*`eQZ-R>dghNu=0aU1OAb@T}Mj}@HyL~y57M-+IZ*I+kt?u-+F8%Ce(f!7Og z-=0(e3?PJA)+g*c%Fz6DH?=ki_5NWyj*Zk14-GpAa*xM#a##|%8ze;ax%!Brij2br zK@iiX)OpgpuP5~e8Gk)buk!81_dgtI?O#U)esw zF<1MriwK}iNYPD)QjgF_Fi6ocQcp07>n=^rKqc(24x>!b{U|-Dn-l%TA23kPxyVyo zbJNnkKVI+OpL2iZ`t%+e8f{L*P4$hA_Vp8D;$l_p?_pjb5$s~(;$9IP0wWv4z(d{H zKY}o{^FwcH3kHzz45nkY=}n`9o#J?sxEK@G}P9S+_;OT=Chd3o*S+g|TE`{sKgFfkbrmc8ct>kxafa%JxE3 zc{}Py_pKwiuGCHHz7Ly33vF$&5Z|x(yiP^@K4JV;XU9w<`Z5Fs{D*n@|1~d;L33YN zcmUuA_utcb%VqkXJEQ-7 z>-v`>&|-CKE1Z$^96Vapgd>FT2AcOK>Er>vEOd$j5ikY8ux?^iq-nBqj;!_5OeK1o#YxP6D?-m zamW-2#P8D=H9|G!rBfVyZTFL0*IhgJ(`7JozGq5_-wqPw;osit-4dA_|qWtq~y= zymTkP3oK{u5WpcW5!{@Ag)LZh7Wn&=FAvP|@j**`Hk=V!M}wpG9yih6EFYC^pQNJc zE}=?f@IF3B00P}Z4etCA6XVTQRY=kq^V~GR zNCJ-1HdJDZHiKhc)itqT6?V?mC5d3R8ZQ<63CeE^nVe@+kzeTm*pJU(L2Y3m47{wM zM@T$rM#aXrxBcqF?eGpx!eJ||5JD|2fV|qDN@>KefP@#O#u~?}lV!SWW z;i@MoFuMuMe(k4wn;wP?jfaqET?z%n0l;1Rkrz?U{rLbsy8Hu+l?MwRoV3BZP8;x0 zsX!+rJ`_dms)PgYAstx{AlCPmGzNdazw)xkDw9`jEt>-9YqG>xc2oo+q1G?BRRJ&h7Fy@Ob_M0QCTmKS*>I24+|mqszx82iwX|L_W@!r!7)8PKUFHb|#Y2;VmtgU{???ze5>WDVbsNA38uUfM5i` z2b=WbUq@b_#1&>srgOX>?eU2m zF!I&EAa>eEi3S{(TVZJWpZmFIZc)=h{L@qu3$1Z;HGrvbsWCXX+J7&BrXK|_qHX)- z61%8rbTP@Y$Hwi7ypoFV%J&>*e4ToLyS0$i<7OW}56sYS=!^Sa3d{%(>55GyM+`R) z7i=J1?9=RmF@B&P2HL0vkd=F`{QEBZt_C@!@t8 z&)B0AcP!R2i1Xr3Bekv;zdL5D1k6BNWiXNR`9z(sh%)#pvM7n%8MCN-P$k~(_xg|# zG06}yEeV*UfqvUUVWbDWbH_47;)IPKHAsfH#e2Mmi(VMg^4=_=?-)nAy7j=6K=qc8 zk8tlubt~b>t`OyzxE*+OyS+7{$r@7U3}ZHG>n5)i1g8JN3j=KMe`gb}XVwL}hJ5ps zmZy5`apflwdxLAT};c)eD^ij~ZvBpKt8^A;*Ot$n7YjUy_rTl?+}O~)80B;+ko~_WvIZ#NzH(QfAOuOi2o@_ zLb+Vou(A?aG6dRTnc0PqdvtuQI-_ke6}#k@2K6^Ui@^xCf6_&e%!X7fO?$Q!6RZx&Qr}0cnRD*N69L)x;7dHW4$-e$9;lr}8~N6Zas#x7NEL?ztT*>1QJx9}gTt z13cN@X+e!I)I+nE7*8+=FJbx;ZV|(7Ojip8z|z2yzi5jwi|y}Y&;~VuNZ(_>mX>4& zR$t|s8O8M>@mE5-VX5j8{!V^f!{@hjbbfSLxW(E^M~|HBm@r(pZEZd=fe2ER6CtE1 z>z$Y`Dr3jcHH>5%&dGd)Dm`geRZH9grHKsNO0_<`SPbFwWGS6Fp(tT6z|lzy_^hOWz(aQk0nUlTq~| z9&j7E^G;x47$kw6p6p%jAu%Tq4a<#}j@!xp`MW6^(DWdR9e%?lAvhG;5ir_q0MI#R zZ^>n3bQ|~ybY_^JPRvBg3z4>{jm^1{&&If(VtOopQp@$iBB#!ke_fm2P3KgfvySy| zFvKs+DxaK)qS^0HZv`KLa)>{icf5_I#C*7e`g7WAwDc;5vW1+CQ`i2vC<{`^TQRo; zOT+BA=z^&=H!y|em2}({krKZf?Z9yaCk0qs#n_j0s>b5EjrMg~WR?2f1Z^LW|m|Q zpSAxS(He?bI?H5vLE+hNp)|?2_eki(?FH4UzyBjB_2VFwTUvZ|=Ro47kPrMKdj>(T zYp&(nm}`X>nf`Y<*iw|{XxM8qG0WhLhD}vOt*Wt3XBEH z(T-o_aCYZ8&&4!X-Jqr%f5gg9_G>fgFqz77QVE^DJzy&qj@qvzv?F(92ckst$Za_MW2EWENqDQCa?UtEoJ#t4PA-dRai6dt#K2(O3yx_JR&oY*Jx!@=0yVwFI>>*@#7~v~WlYB@G0TBKs~g9MV;I!WpfYOs)5eBJd?P$l>@<*x+v~BY8BIy zy~T@^PE;(F86nq6XQ%ssX8~E1IdPe9m(`q(%Hn#SF|1c4sm=Ne2ePrj5_sqvV-v!X z4)3?np}Y?npkjb}LXoqIK>vumCqtCL>j$ka*BZ7wE^{GIN)ub!%w=tONCmW;>er-C z;{{MI)DJ970iJ-o{08XcUlNxwN~e3c9q^qvexYUJV&Ub2W<2|w{3zyt-BKE9c)wUg z7?}a)1+a36-7?u>yKX*paXWZ$o18N;FmgN!5_VYI=D}EjSo#=PIdHr9>>Cf4VQDhc zF=sFVQ~2!+Z@E|>WlmWQS@0Y__I~=tZPw^dpCXDY3KZfZe#<*rc6(J zTvr*Tt=?7W_N%)+yj^-zwSVBpv)`_1>eoZ*d0J=A+GusPkxE@46R?Oo~zz;(Kx>bKkz1vc{K;5jiauO8A2Yx3D47b=%}|v z*OsJAShAVA$JzOtiF@0mS zIVP=9DcEQ`TiSI3_OM}B?f_dfC-=p0O$q{*u93NfB1vNf&By|h>KEYhHj0zYT}|K< zyrSk7B3U%_15Wv2cdwf^L*1e19PIF}tG<~Q1%Ht4AwD@l$_L#RG2t202)!Vj`4id@ z+y!~D_So9~UPRl`q#}NSiE_ELf|LC)i_If_&vR2j$j2o7z{g<~D8DXEHN!D0@Oynm zfiY*I%faS>F<9Qozu-uXh27W*5N~CPdTFjJS{=+jraw*$=dEkTsyl}>XIz>Pa?xxh zsXVm31PLDb+E#Y-ZD(M*atu&X=dY@l8eKlIcFM+GyhjJt; z>&=Zp%Y^1u?JiP>D-CzLp7%)+FPG|dv8iIT*JSborNu5LNSVi1hf0OZqz)uUAes>J zqN7=tc!4~Z_f@dHr@_gZEEZUU7R4{wxt@78!a>v|yskKUJ-@abXLxvnRzoclAv(%Y zpT~QT#G}J>8 zZVBJk{4Y=ho`fFOl!%?RR$U1@WyOkuP{P~n2)|}o|5lgkn1+G;T`S>nBmCmgr_KRMIH_~E{7awV|Lf@?S)Db*}?>uo9vaO?m9r>tvw|veLewZgW7NE>VVboy7m^wVG zNR!jc2Ye`KAN&Z@VFh6a0y1jaR3b0_9bCRBMEPkYG0T|lBobD9kg*j=uPq^a6!efr zUoKt3RC%g4Cl?^afJTL=B?Flr0)x%X<<+(QS z7$Jx=pXK^E^rz+ztNDPG_VseUG+mGr^is|t$Ga((N@N{U1veqfwi5lIWZ`X-7{^@m z?ysZ1yYCR9lXz3VTgctLxrT^@%qh| z7aRo48(%vu*MM_tnGh3(7loxD==4KYSKs*3qpMFy_<1k{^lT&27C#}Y8Z08xmX{n0 z`KRywS9@$tP4Z=#a!q=hB_n+rDj5a!t?^9&&5^!3()-J|x`&yz?CLy|BWC*hXe(6( zW*Wy&cra8SG)C7PzG?b>jPjUo7)v2sI2~omI3C2zjr>IIxL<4T2x<#^J$Fk;+3ZN) zsud8iV;xeaqB0P%kDbrG>vV0s_ZGgL8-e~v+y`y!ckjCltp`iH4EPiqGM80lu zx@@a|RMg`HdHR9cQ+q38DQYfD?p?K8XxVHc4(JB8Yx97os8*Laskj;u6@73!ued^4 z{+vLHKez`!DQ1s19!x{-4s*m&WH|k?oFBnC zsQS}jMDCD$wlxw0WE=YsR9yJsoK5Neo0`B?liwa9OTiyqO?k(m6>UdibUFo?riX@VAU&?oUoVah?)4l@Xd($g7JInNS#PsdD(>vPNB)6>j`aF%y`T2k=7!E z8jq};qrI=#EQEDf*X-_=QiSQ4U(MJFyShhAqR&{>gL`0qUF>(P3>|w|jd9ZY;_JWKS^WQ3C1itF}o3-xd=urt)sTX(N1c*j`f(ieTLh|90Z5sfn*uxvRGzl0#0ST%lO z%Ad!Rn+H#eo$I7aRf^L$a5R_9Rxl-AnD3q)nGskuUBb?<;`$cCA3GB3ay zdiMvZE9<-4q$K`kIWIGpqzV&sJ`L$=i4@#Gd_yx)Od&yp{#k*`zJCt)CjB+hSG&q- ze1->G-XM$oTdsD+bunpc7ja)6LUKoCZi2OBn(S|R3hZmE#17yOOquqRh|m%hUU-@m zevNjq;WYCV|`Rf@o-^%c#1D!8?+gl zAicpgn(4!u8F6VwU>f#HLA!n5g#gQ>4Gc==xKWdmj4`DWYZ8DQ3X^TH4)n77SgeRo zn$@10H76=C&E1XwrIGvcvuh#iS0)b!IP!vO3hhm@w8vB!8{ZhdBGjSr_5VfMJH_b! ze`(rf+f}=4YnN@?wr$(kW!pA(*|u%lc1`_y`ptAQ-JSQ}bM_=pvX0ilmHWQF>tkAd zq4X4#9Kjlx+K>e^5a0YP;>qHnps2sV4q1OJKM68UkXjlQZecA2G63HL=}+Ks>DST` zDlK?MEaiW;T=yj+1@mrRk_JcP%orzLLQ233kOyGyThn>DHMNHLaXSCJQ&?@MmGu5K zX$+S_iR}uTq@r@n{)b0hWTSJY{8~$g);`)f`aNQQh7t(!So7G5&ueg35?VL$+CgUE zZ%S)2Gu*Ep&9+IzhhIj%_Mkh)O4SZ8Qv#4rG)nT1V@ZGM{6BzFPxkICAgfdWKxG50 zKRt@-yTW?V+9G=p6Lm#OBUI2-5JXd7m8*e$0_e}~lQd73_NtIfE2ijZXzV#{_PMMY zs~p|@`&CsXD*o7Le>wQn4a5y*VRUx~)v4D|CvdIpqrdlA=&nq+Nhls_JOl87IM>;f+Q9bzU*J`r?L6-#iF zL)by!&r<~^z@3i*Aqo5VE0}N9f2!89dwcmjNy)5XB7_b*00@$T(ZB5R)bzo0i*#sx z09(SQ&y2+pl41%?E3-8WMUa6k@or;6UCFaR6DwvYSv<2DEFlWgQYAYHYV+F#!8Pu6QxzIrM_}3xcCv^`AYYGG^WWV&l3H*@&9dV8H_%2l1Fsjtbk1+u?DtZI zfHe;1=;ehuih=|wldq4A9T@qBPB zJ)v-?&-F<7J}=jj>)in_C_f*qQ%_Clof$nn{`psIp}ACZ4gb{>Rlm|~fCte{tS+Qw z8zpGJM*(!vcS*gk>XjTn&?apU?-BecSPp0cx4tm^o3S8nTz^|rh3m7V|EwNc?jNkX zTokwgb?`gbW+$6FAu?9xsjQVa_UfUl5d20XLBViSXOe+f_}vE zJ|Unxa|)z6V`b$9EKzOw&Eh<&C#5t8U!@ds*m3!+`6IxBHcEIZBF6nN$<)Z{*+VoPF_Ls9MMD-kC{A~5}Xk|bX#;E#I9tfSU z7aNjWtuIbo$zif?p?fK(gD)GIt}a9C&u0y@E_04S8ZeCZE>FtWMbIT3$hW7r+`CzCCBKnU9WXZmuEr>QgUDfR>mmOkd|TiqVNxKe3~$&VPMV2d~4 z$NTSzj=~@ex7ZqbF4!kEh*e_K5w5C&6|D-k4(fn;iwk;{s#4i)h zr!6y?x>VC~(q`VSRRZ9Ub49^kwIR_~4g5sZUK&`(OUub%eTb<+@h|?GMFn|X)}?|k z(^!;iVwL9bD=&GD-U24y3vxGJ((})z?ejzHT9=9Z4j3_a+`R8>Y&|=zL(|Sl ztDta9(%^0F${x-cBbjMerFP_|>*->fZ23-sfanyRDn!$MaP>XOmt5Gjr=4X<73S{& zm7o@gZGr5nl!XXT+iq+f#E}G87K#RQzGa|4iVjaUcX`m$2N7!}U8kj71E(n02q*&F z{zjou(iZT<69oBtT8n)Fi)I7pK!~=8vI_s*$aITex5GZxpnBtUJ8<}WlxU|mzA*|< z`?S3f=Yv0;CI5rD)ByLA0)P*Ufia4ik6MjfQ8kILK)ofq895#rwC=Lq%x=3yr<;z_HDKLhGE?53kh@Yd-GJ zI6=?0=nlc}Eq{ZwV`^)ogXgN|z|f%7+`_VQTj434;Dr)JUz1>i#1Y%?bkS8<>k5MG zaiKZSGvHb5EfM!GRNxMm?#;lnH8V~~`}e3j_LGrZOjx^m`T|2?R+9&5I5EE8(a?Ch zgV!Zqxn4%QBgG*(dBz3*aPs+Ug9l&W$>YKk9=B)VS03&7cLfZyXbAox=C9!M+s5Yf z$A3deGy}GFZ2JZJ<@YR2ZI$#ywEGtA%~^Tf`%%1D$-L&8Jb%bJnk_J$ct|-?!(O>~ zL-0X=)uq3n(^|8XNmD)PV4V;>P-S)Q%+x91a8Jy-yyQ}Ck`aX;10wAyG-pgy_!4R{ zVHJ46R{$}}$V{lujlqaP5p>NL7$|Y~M;FrXp$(sq6qHz7;N^J+j&E+q0liv`2A`jz z6qSGzLiad7vV4qB4J(-{f~9!p`5;&R*G`xKy}M zPWYl$mWUDJ=ic#9s{Bt5sD z9bOIMo#1N7mgo zGp*_L?v0sFMF~Nx8I0a7FuVGs?`Q0ZI|dKMfjXX;s56ge&9%qxD#+TO&#ZDR*e-Pl zU;n`>t@|OHjQ0A(z8?{a=jXuQKf#@gzLmL=zLW94WUTxbR_Xt3tZ*d*fX;yb*TJ2e zRj}+oXj9qO@sAhvKS!H?9|ZE-_{WEerWeJNMIS~`{TH05q5sc`qWS(eC#ofl@E<2C zy)fr4ndHc*m^is`Cfpi<#gEb*zdgY}{P;KWxhZL~uJ6~!>&Gh| z^1Uo+vMt@#*X#IjPs=kKFwqPen2u>ut=nvF809j~Y^LMZnD zFB5(bGsJ+2y~7hM00Rg&b|Cj&zgOTsFm_;I|7V~UU%pi@0Y6W*j}(j+Ld_!mO`jGn z9@YicK+glxg_H`asV}-JSg}m(BOk7uKN0Y}mIxXG9oxX*Jp2%F`pF(1R=|WaEKqs_ zx)l%S!0Ii`I!3DB93Zddze!cBF~LdvN2({A%+%eOh(2+x?gaQ!VTag;0OP^T*!<5+ zSCHB1#FZPH+p#G0MEE-d1%i~{e~LMB(NbfKw|t?^(2TNY7Py$jPp&qZvH93b(T%sT zXpl?W+oeuy);9fqBEcU&>yY(VvRvG&OUnKgBU&ueZ{i1|E*)3|gH`~i!6X1QI4~12 zF$SRjkTWO!tm`XU#8K}LhzI=$R#5+}tGT1IzSY09tp5dw|KH2{Zy=8F-z@9cBEvt+ zif@=e^Z&N2|9cR~rmC%!<}zyc_3Ij28gi|41AXPi-@x#4$UgCsqE()WI_U_Bi}UB~ zDDmQ!uav~eV2J)?>CHq5<-g`h^aHQCfJ1S;Q8u3!@CSmm^m}Q7;Fzwrmw_;{he?I5NaM*0KFfHl7!wqz(?SN} z>Qk>GpPUC}A4Pmaq}xXWNQXQXxI0%C_@KNyKS%2qq@ZAuqeT_PtvJNcWJ(e~!?Wub z1<{bSJ4fAg)kzPkXHq2~qU^1p5&~u%iW!_mk_?RM8N9_#uECt9%dV<($dLPF+vYxJ z6K~`U-|~(wMdlmAHuO@ja5wMftGh~qszKI|U<6_C?^Z>Gro{=eBZ}t*4ATK=2^j%* zl0Qv@iia9w#j>wF&thjI20CUd=Wva3A`CGb5`3jktNnqyJ`1kp5sdC%uA^hpb&m3+vgFz#xM+hG`Sq;(e&;w;r`VE+2~OKQA~ zC-NoC2d#xKy=cp}$f&!+l(H&pcg&)VXI$(vNPWxL?L4su4qwx#R>`DO6g($1xv#=0 zHXrHAoOdGIRD>{3GLhav-xSvvd|Hx>w4uojyj=7_s7vMPQ2$h9?%thX`?3>?9bH9B zNCaGH*0Hj-qwsKWRkxBiyoysucSselLQ;0b97aB8|QdJIAE1_rwAM#?oKiE_N6&571Qmu=10Ev!SPu4pV1RInd zozeHJH?7KURw8d2$i4Vg^rMy7bPk5Tf>L!bQ0=|$fV2BJObrXty1m0@qOo0n25en0&Jn(-3XlZwa#m+jf(2Yf7QW}3rwf{DJ zo%jfzP#(<14otX$5xo4%Fmq)2$cg4Kpd+1wf(iuA60(TwtIuq=Pl!swS&Y;xVIpp< zH4(!Ti85f)W3tw)WFdjUc59f!7j=P6dkonDHuD+YCQ`#f@YBrBh>b%oRX&hVQ>ghb zVg3?G1iAE~9A(1DPstHXi%CSlp2nrc+nA?(i?OgArY1?VFI@?S0gbprL%CKUTq~yx zSI?(YCx&PodZtbqs8mx7HAfJ`NYvLl(6yZx)02M7CdFhn&mpx>e~^|INH_7jv7G}D8`dhy18rTM9OF9595Of>zUBK}Og&agzx7peUGGR9z*#@qH4f03K; zaDD1|5KDdU7az@EU2|gn>eiwQeNon(D&xy(J#h24U>rsQP%^1m9==e2L~L{}c` z{(z3G@6geQ^#jCqFI$HQdB}(?v}5WG16Z1_V1{HhIgt>0b0<~#_>avhs6{nhNu8m> z;a_qbOuplLAb_n7;@{8+KC)IIk2-ZUQzcgpl=*8dFbdJk)a0xIJ{i?>&TW1>QLjQj zseGpLGL;Q)?7@`3Dw}kbW$ceCMGX1^O{{ONJq=Z-J2*`He4u&xADg;ywbze0Dmp6a zdii*QWy{)B=9U=`I64L!=$qqm`@(Mqz2ynq<~$?VsvUN#9K05(N;p=$O>^1$eM3fc z=$DN+UQblgBhu+;e|5+Sn5DJeOdKLjqh2S@Fq-kVc8rO}+9RM7yrld_C?7Di(>-w*y zh7|vKYWSbPN-PlBf9HZls**A%bq= zy$SRsn;-)lR%Mdsq>aw?8!=8VJ&{JrN;KBv>jL61#7PPI=`W<#S3hS7=0|0kvIdNL z6Hc9|+vbl%8-CR{^g69Efuw1`nBP@i(27H(>KTqFQ?FjNK6jPC`_`J5=dCO>cb(&AWEL4>mpE5!aO@J44TPWp^0TL2J68KK~Kuy=e62t{1hc733&vv=||x&0aN_;^yV_;AOPS&Sdj`3` zwg2;Wh~cTRTaXocspx@%WObgp)*TG+a*qlRu@IlMf# zc9sj7ux=Snty#I&UVhHurkW?91n4YpnAomTwSLfCu{76D(;^?NZMuXig`3-tU!r0( ztdWX44O}}n{f*;KIR~V3lu23GQ&wUv`u)D(q6&?< z_*Uu%`?Q2CvXVE6AEz=18~Ni5$`=z2l13E4!r^K9?)BaY`1DMjXmuRU+oS1|GfDb7EGz`Y=7i zh04ZzdKNAQ`vop%TC?&*gJdpHD4CcW3TJPqc_wijnel*s4BIPEIIw(}N*p<)ichzP z9-iZz!3=>u>((z2N(fj{bE_4V4NIbAQA>4d0s>5+Hn9Rv*BgkS#$jg<7e0DE6)`p5 z&G5ta&t1XY5oiQILGb=8ZdQd;fGF4Tcy+hPsEp2X^%qpl zN{OoX$v#k)yr%wv_qXc!`e|yd-aGW5&o2x_6a1C=)ot|9S}Y>@Me09>?j1~%Gn~SR zCTz$VWm@&fCM>B3QtBQ79e`m~fcc4AV$^Ub>(bP=gv8UA0@t^`3;?YfYI5LRJM^}J zajt&N_yotZv1lWP+;$L=6kWKGu2$IaZqZ+meO`-5x~TOOt4DJ!TqWQVyH}m3j(pwP z35s4gNL}@df3iM{=hU*|Tk9G$QKe_yej^>tZ(>aYo4Wrl-=d+)ZQktTvKp-s?XzxU zZa!DqO+$XeWKIGMu3ylZn)^1O(Z9CO>J-;pTv2bH8;Qws#_T|yGwuGH*=mk!;}>Q( zDvrh&nF3}z6wK4i6amfNHFL8Cr_GuTxCQn70`?;Ea@+%;Z<3c)Zm$0gpl`U_3OF{9 zL-vYAJmE|nN^Rj$v;bZLXox`U)Y&dI=u;3A_w4Xi}2A5d}hA_rwlFwQ$>B!Fwnw4 zDG)DL?8(UtFH@*2c9N0hg9A$ytD>cDcNszci5crDM%Sv(HZf~DiY(IZGxRk`K* zMX4X@1Sia-Tv@Fe4cQJi2j!X>+`T+7~)f+<*;qP=y-|?PfKY`i?1mm{y7?=181k z#}mCcc1|rJK4GBHgrD#fnpe~vxqPn3zQSlp%VPxSIBcySYuhiV;|b7K?f#AnOx2_U z!kqutp0mV!{RC7ZkjJ$TY36zM>_8OLD+MyZquL((d2DTIoZsKlYnA5wU~MpP7G_vN z1jLnHOY*dqS^f2dvj%n%q}9iz>nP%4;q!T-aLB1Q;<`n$(u!kimZ}(z7cGw#IoiMg zmoJf7>+uR4f=NdbRO0%F+;XFwHM2btWxHayw)>VU7poUz8S}kbpXM_$yI7c*mu5O<8_azI&qD(rShPV+2$p zU2TK2LIjWPg{@$Q2usmD^c$}4>z7oYpsY={GU6&0>&?6O3c2wbLf9Yt{@rZ~(QQgy zi+a;uZTB$&_3@>N*}cQmQ8`LAIg3!Oh$^BSnHXA zQ5vLdk_#vGkp^j0i`A2!qH=AtQXux6^xmUJkt{z9ISu{;E=AM zDCoTOR@C@c8MzTs0SitMqMC<*^i{4nx7$Dv56Nd=8pvqfPYU0NN8stydv<4cWES-VBzIltWH0FIc}Xy@i>G@w z@iw6t24NE@A2#SDGcZ<*MHUS)d9iCh)yHM-1PpWk;hsjvzixi*JB=gA)mD`#f z6XBB?fmUcT^#=1?ro0iukvE8a>P#0y%{rb$R8DpB_)t;Y-|IzH*rue@DGB|ElCV9 zsg!40q#aSUegLl+Al{*LNIz1j4j4G#o&pp%R7(>87KI(ArE-AMqMi)33NSq%e*nlz zb%4~|9!<3h(4A+L7t}90Ygj(jp9>O}&Hx|apj*QlzyR0Ou{-K!7%w+;rjk6({zdEW zYE>qNkWI-XD_F_SG}IAk>LOrx-LSR$ZApp&f6s9@_D6`eD}IQC zDYHO(%X`~YU_ruKH*hDMHHGw63G#^rSkO-=a76ITMd<|7XC=1F3i{8&&KE~4^~^PD zi;{1NHr5Lg8pThKkFvTrk!`!B zSLcX7t}Iz_Q^ifiJQcpY_Xb$O_qzX?979W|Pf7HwbT0THE!_}-yo}QRx#c;0{6d`a za&Rr%id;|-zH8*VH&49Jd<$)O1Nh4;^JQ77=JIquMJHRDGR21_gUht_VeR6ih}A?E z7)l4EQ^{q#jiK-1bRgDcDu23WDHIV(x`q&I+;$a6$UGPOoV8K#beBqv6JnV{*+c^( z`wz(C4*t*e1NFOW*K(b(CdDY2gOUM}R!=V;0%l+=9`21=N=^mW)chrB5XV8xHP7dc+k$mYo3^(Ff|0 z4FOzETDC`U$W9X4^4BRhK*`L+;B8Gk^$WHo4A9k8j9j5)K>qZWKH~lnz^uoG%u(;I zu~#aUO~7*tC=AVEI<>r7v@EDO+b8QW58uw#EXmS@w=7q^=!S$APs3&@2`;luVr2{l zjneqetd2r$Z}Lbm+49I4dSXb_*eXXc5l<~pY-Z~SOL2}AzxEftgr%j%!? z?0{Npccsdy1?uuf-vUiRC_|B!Mn^of0Sf5`NgOnh!BxUqo&g^NfuxsExb-XZY`i*@ z2R1-Esp+uSy4c&OI@z1Ktgn9x0ac;CJenXi29-IP+CPjkUxDv1`|T~u1E6`5sYLTi z4xn(E_e;siC3246}+F?OTqOO_%&>^@9q21j0T6cuS=4EY|_Uv^~WH2i@5aUg!%+R(g3p}kJm*^C$VMV6&bOT*`e(|^& zUelr&hrV4^Jp|v-c>a-8P9++?@g-wjQ$A|#3e29ABrt@+yc$cALsyJ-I%Hr(BXm^T zRZ$EVfi!WD+{|l@QQ`&VrYv!1IbqkT(v#}L2wJ8u$dYs0$m(wJh{_~OpO7ubVZ0W& zz9Y)UVW6ZP^v6n(1<78Fg#gF`+G!0lZCt3(y}YTe8Oh#=zD(~`;I{TIv@V@(JRN~r*rnwT?fau*=ePHLqc7{A z)@g>6-i?b(p!CkD);`n+iXSU-mb|Z6z{dgUJ~Gu4@1BqOR^5g+WjbmfE3wbyf#>KB zqaaRwh4eRjR$gNB@8-MMx1n#G-M^q(Ie7ibkt^}t;-u2^E%slmse9wr zIf&I7JsY4_V-rL!Juoc26CcW@P4{L{(JdU2M|XB&xQAB&cn}b1{_AD8=kAGV;Af*i z0lr7J-%O#F$Nu5w6W>mD*s64TUn)KxfYO^m+O(z)4Y`c-gw^R?37$Wn>Ti}&Ovv`~ zC?3$=DgF+wfND8PVgIw+(W*W{lbcZrAiDKI7%2znvptrpg@yo{2-vhOa+E+GNs3ks z7<@!edvFZBO3h+CN{Bx;?N5EZ!GC`+)?nrUC6b_+;7SkA7^GeAT4#>rNW@w#12o92 z7CzTa1XYaQk>h2+SsDdOK~<3ywCm z3-Z@Nm=5n40CQfZC^Gr)aK^AwLe**e<3a5Ay_QCpVqJw*svwxC0ROy5!Gf@SU5io6 zAfMBM#al}9PTaContmFZZiz^OuljGOI?Kf#G4T;i%*}m8781gk1A+d)SeZPh$My}> zQRUk_ddvCVO?AA;qq#QaW z6QBsPsc1Qz0n23_Z<;}5I^O8B&gwhNpl+d3KwOHLrWPEeKHgnwE`PD2pqq1SfRRcM zY`Mq@zcXhTC2P3mWktAvJ47B?e&|Gts=~M52+Sb-mTJI;RNcrQ@>w=145khvmqRUM zI||@w*|4?I{yw3^o=+(7ftTr<_(-iSP}xSFk~>(TjnlAa&WUkqUM|Hz!1C~6_1``E zxvT(hxRtE5X|yzrw5kSi+@G2?aCbC2a$tI-Jqg0a4~2VVEA{WQ8>(%Q%gW)U1-VdL zKl(4ToMarX>9|gk*(b#a@h{w93C&wUVK^|@)1yHZ{u$pm_k#c^NGP6?!}`P*@x z+^VH)wIITQfsUkiy#JHH<^3dZl#7TRK@b1{#jpSX7(d#co1>wFv9XP#zKgK~jiIfz zwZ6^2cKPGK=nnr=i4T6p>A#WqUW6OC|1FQx-TNn(`=2-6|2_yLO2yVn@t^YWXcK{K z_9dZ;rjN22s8L9Qa6IGtCIJa4W!Dvc&lvH6qC~9VrQh~{UYRflrZBbAwg>vJ^K27_@MkYaU zyiL8-9Qwbrf227TwNd)AVQP1txyD{V>Gsh*F^jSr(|>#M@PorC8GchzXmVC7gv@8g zsd%0@YpK;K=V;M8L$gK8aTX}haaspiummH(de>)AqS2^b6}$#W4@U{GT=G1Q2Wn>mX z<^FU{=7YW~t=Qkm#SMlldwPBQ%aBx#rIrT2Dt7}2m0HQW0lRyw%smMOa53~-gR&oJ z9J6@s?4H7%Txe^dr~21eio!ihtelmsh!!p_OSN$W0?axB?JMhRmGsJlKQ^MlcWbuqA76qZO^9JS#edGKqA&e$P{ z6#>}a7s5xew+*S!UMk{?4GFA^`#jr)8Mv&<_#UMjrFj|^Ot7rx=95Z_6J?gg*)#ZM z1fWo+-m*xry$b8O7r1tC>kDJ_47HgUu|J1iaH#lR45{T^j!e(el}(8$1-~v}E?1wW zQpSf&2rMgWRgx)qICsHJ%y+D`((EwP%8jXtKYbkxEc9KSEXtMPWZRmmmqn_mNxpb|xu z+R^M#+cLf^X{+m+uloB6GAC(?R%!+$g4ml8 z*0M4W0I?-85X?LWa_!fzCk8hhSkGt2ig@h~2Hoo!?$#~q=0+eiaOlB{mTO7wZkO*R-dR4jcJBP&{B7>DDs2G%^1h zg99@pl#HedL^nW<<57TRUHAqDzJ zWHjHTQfdyDz+OGxq*E6Qs4mM_y;fTf-q$>x(2L0XNr_lGhutL&aq?8t0OjDSgnhL_ zW(^8@R;pvm+8+(%P;gKRia^6}2lb8mya)tH+%SoH-&>8!mX%$=+SuSa&Ll|-=^bmKrGmZ7`!&AC zXj+=kRB-ax&l$je&$eY^S@+rnr6p*^w^ki z65xhk;5J7pg%mGCPunrtvN}0OI0}boY=6?h13u-nzFkRfu{*wIj}|D7vEeT=z=Ql_ zQy+YFIEEv;dB#&(@-on0PM<6VQ`VbVKxG_R=^96h9mgj8t?$*+?bh zX8caNbI5TzHjrHRdj4Ye_z>)MD~AA7onE7qn{}4y#EGXZDUwkOGlP zV~WZATxp)`jWkP#x7urQsPFIIvT#_WyuqQ2oNzi%FS|aPfQyIm3SbLy^}Ox$`>u-) z?RX*RnO?S^jT{F2Hpb!I8$`XUI5-M#+ef_SPbOxia{h3p^Fg|?!{NOg+y>#28{U4} zy9Ve&y>aGORSE237#O=#Qq;33%G{{W+I-73eq1sEu=a!Ec}h8) zPmynUpSNG1Bok%g=DxrT>%Re}vi`&R4LI2s%;J(j)3mwk7*P!T0sklV+IxEo&)TBH z-si?UDC5X}{<0=HIi+0kIpxUyS6ls`)^CPseVb~PiqDFtYg_&AOQ5#q8{q7Bgw8&DYzuYe%JxdhKQyW&BTK}Hk|F|D zi|JvIaXbXHLI-ay)^fF%hFFQcTOlUzPav7XSirN7izAGh?b16O&Z42?P&%lDx6UO| zU;U-1t&o-02kQH6S6tkGZdgyIrRhUmLh`+V`go7m5Z50;5AoMGi6FS^em_XaVTHK$ z#|8H1nSq#i34zUT+i|sHC%pH?E#erJ(s7V`HU|)c>JcuqKkK-sZ`ao`I)>CnS0O*s zB?_ft&vWse8$A2UBkgOt1d0!b%rWt{w5GMQJBGt>1mgFPO{m{(4=)!`~RCz+$X(}h5 zcurprCa1W?J%?QlJIz66udJvS3+A@Rk&wvWIK&wZgTY5rbFUND8xgZZ57MXUShQ7m zfGL2YqJjCgY_OCJ>Nha6Pgb#jZ)>P3QY|U7rmt6=+q4?Dt2H|xH(gFd z8iF$b}*x~mz`~}zm+f;c zFx@RR;EPZ034tRs)Cg!UE-Ev?2K>(lM>f3ESE1nmJGjL2%#0H@hw5~E@M9-Hu89N* zi(k3NdB#LLg82AiOa=ip zPQTg}gH9dUIsr?X8x9ndyE(CW4i*ubfQF94>TnpI@X!6Gi7uJsmiE~iz)dr$(+VqH zv0&Oad^Wl%GM)Ace;rc3w<%_2_nNcHY==gkx_IhO?LfiyYyeGdhC0I6A4n|n@ntKM zV zBj17oQ+n&pP=#yf`lu-%a#3Kdym*#LOm-(^nWs*&Vmf8XpN?fL$!8x0fPSW zDG$t}#mmLM_;n*Xu$F#VKJ+On(5n>qB=Mz0^}VDA0V=33TeCi25fS)9S%|lsSn9Rg zm+)X7Kcz!ZArT$YVf)RqEIo=X7l!*QLeXV4mX5s*(xubbNO-PNS(I~EtsMf!Av zKYxC*8`0%RMEEgDzIt4k=0WK#E57Fj;iTc`Rl%z-RT>miI<>^gLV1(CTM0aIGWvhY z8a>gT+8L$D-g(v#?Vs0e|GDrDxY!<*s*{a!2nyuNDy6>`a0y8I z)ccNIKn~cs@AKb0bT$0Bbp^>{4A{Fx&6q4O14@ns$Z<*|$9cgQ(J3~YA{?Sf9zU6c zP$Je2YyKYl6uxNw7!UvWMu;Rx<+mR91zE_OCA=k*C#tIAr5~(Eg_JGQ7p@GUDu%kk zEym^_bPi+06daq)28+QW&L|k~TG7LTf5-tWcf}YRcdl5BC=u&~9v=cjoGb+;Ein*- zs+y6ItsrCN53&?YOhD{D!8fJc%Frz56&l2@STVDPaLq9AUgWP;>HsekK;zHj+OrwR zW>K`{uhuP8$%`>k(nc&lf6UV{eH`@wbf>!*z)PFoKN^;milgXD_v+2y|<;UF?#NEYSaVdh8=;tR@ z_P{*hRS%ejSK@m!f^(O>il0N!K*+}T!T{w7SE@PWYnx@pHaBzatu(`dXtl4%ixgg4 zj&NHv)YIdGB7464>ESzo z7@lCX`&i)XfloRM?&qmiqx`i5{_E(V@93a9tra$lA*P^(AjtCLILZ(uFWj^eZ(_He z_fvCCvy`#|AHcF#uG}tm_{5?pM=Xv|r)@tv;_z~1(5GdwAB&*rn7`Iysj(V@A_(F_ zGHg5g<@q=c9_a7QOhz2kFMSOet225Qa2lBX(19OOdWa zC<%i@p)SzuuYQB>vy!-6HUz#9!a@fBC_>SBjh&U&WUtEVPmUoRkpmf_uZ+J&h_SuE zJOTlWmG5v!pRh>Wf6)keMs;FGJ%H4d92%bDkgNAH~0APSw}UR zDws8UQCzAQatAgxP&8_GCq5w;W(lv^9w*$t&F#cG%q>|DzvBwMyYP^Pd)*16Uh)?r zK)!vZ!n#DPgFZQ?!y*jE$t+5MQ zHfr}EK~xa$IR~S&hy*C%Ay=pcewc%khj}U((?@I*nZ3Lf`$Qb|tibs55Mbs!g?{q_ z-Z3|IVO2T52(5VA#G|W+PZ->7>gNHy_5m?AXO4RX3-{7V=;8yui6~B5Oa>Q^t8DI> z=U$+SwsYV^K`7zYISW0QiGc+%B6L?(=ccK~P7Rbjy zx(gQRlu^bQABHR{yw)zDm@ZUcWRHIy&o|(w3O1hd7a+J^&rm32R#E`~R&S^<;ew*Pz0X}MAR@wkeOYefxERQ0Wxc2w*46lSn4G*d336FiT1DTqKmv`PM@^zzyuavAAW&=K zKDO9rw(($u5%`<`u4PArZs;>0fSAIzU#!>5;AhjGv z8I3xEaOoim$nSh9X1r9zX)SI>3l@|}XZe$LJfpP`xLM@O7WC+NtM^9r=JH?!Ayebq zkGP}*ri ztH8P@C!N=*qp*AAGYN$OFa>hjLB@9F_%o{BU0nP~yB5z}~@ zgO(6!4iCbH!dz$?IchYQ0cNJsIQmUVYRVeqDsWa(2c=J}idJ7?y@t>Q`FXx+Q2$b8 z8!oqvn&AHG4f|ZT#fFZ21Ig`$2BKdW2u|G(Mva~TO>T{EhmXL8B3I7?0ghQja$sRv z;;3tAT2autN@C{=2(T$B=3hZUkmGuWpLH{BZfk?YCJC7)md>BzlpI?&#ZodEd_ivH z3z^2Csr97NFb=lp1lelxmt-goiSfLaUE2g4!Z$Z)LUWA<7T}v7(k-tF*3TDSc0k_} zwI!!Fp=uJY*6_yYFEdNOJ(Mi$WHKkn)iKFI016a8*RvSnM6pIW=zO4x_%gu8H9rbB z56D#%(p_K3&G#KP+Pk;TZTlV=-IbO+h5Ij>Xh@+^EFCfZI30#cNlvCi{5R{O10o^b zgD3e;dxt>PMEHK#-Sl)UG4diK%#M$21xBj5A=HyL)VA6USKuP2*sZa?D*;kRaKarx zRpC`tV;1=HQ#?8nhBFL(F77-S0B;*mno?1?2g51gQ@}<9hK3)X&LJSZNsq#g%iE*w!j})k> z#I<*6!QCpgs;o1PM`_Ep(Z$Ak%C-_VS7iPnpu!5R2>Y;Se>LQYW89>S_bHI@XwCE@ zcT^LeP;15d#7n8b+|^qM_)t&dh6q3X+QipW)MM6C)aZA&(|IU`6mPNOE>p1Y{MY|wOF*GdL!m=CYb zOth~nYK>#!ysTClK$3J!m_MXn&(JEPPCtKMqYk&P1{MLB2N0e@BdcRpPf9R|S#<8-5X4}kN)5eNDN>~)J)!rGv>;6olqNOwCh(_7Z=q=Dp-V4PLXnOF zB1S;Cc+Z*9bB=e;xpTkVad&2S_RBl_yzlPJe)#S0ahuIJBBUQ)3Z|dUV`v*l@tWGJ z6*kQHsznN@7jeo`A5tcYy*5{`-9Ai^5#!Y$fZQc>V-nJIj&{&}JQlt}Re}Q3%S2UI zm&{r>&WJg`&aKu7;RrASh>y-X_%tAHh`knCnY&NyC9~hVe(hN}38!MyIDxpmcSWXM zop61VlRXP`z`4a;vgGQQp&>FMPn|KmWUf!TR1z2D0r&4eC!`jM@-x>VftW|-YOL5b z%vezvy&uzEg1R){mn~dOB!Sc;W$M!630k^$Ll0l|%@g$-3JMRpcp46Id$t)Kho1?_ zYwU7;K?)g!<^lKjG{&GV2JaX!Uay4&f;?Yvw0AhwZ$m@z39(&e6pr-HG1ugf<-h>} z^zOlEO>ds05LGA5+4?YzAfri{=0hs4xSgjbHr1f!b^$>qmKV;+BxMZAYj58s>Gg*s zp|$QL54EfCMLX%kJa!_gO34zWjFnj~jbASoa!_rW${NL@@4tK{=^IRp!w!^+B_^-M zRCX61??-g{Yt-+sv1Y^2;7-!Ruiy>Qp1KLj)%L9Q72BHwIU5K;Jos!qs5h<0PyYr_ zukX!x${I(5`!77>?C!iT_ep5XPic7$n<4%5Aeb*! zOhcV4C;hsppji@)q@cG096K=qtN0+RTQ@on2(WDiGq-gvbo#{X;=hV+7DlY96?L+V zs4qzFM&it0_q-dvTUk_~RpW}TuDo0D(LEwY%%pc)GQWCr+5cg0HF?;mTRG!10Xew5U3S!J zLN)?ikq}c^9UE&&b{j@^CPbawwnulufC33%t)Jc)k=Fj?m&{DASuRm9+$f+ znfc8{;W5)pt*^G44VUTng%8h>US)pbDn=1mj9kI)34Ze{_~ZnbeL71g29L=7BYpy1 zzZa2dIG)+eIn?wsH3N>RDQ~6aBGC64NIP|#mJ)9HhV*Tqcfw;B@!X_L!sFO)~zDU1xR|&BJ%4CeEJLQ>8@8s&l_r!(CKh~Wr0d=3$Np3&3@|L$agFl zzGDm8Trs-2AY4~@BikWGsX1oJH+km#iiKX;Z?=lb{;(P*9SVCT0uwWb@81J_*CpJJp*Saz8QGRu zQ0Q=`m?Zb2_#&ZO^%8a&g9?q2WK3}1i$Bs7(20=eFQmM6_q=QK#uit;h-w>SQ-gx# z6w$V%X&2d&xQFX#I;@V|st;mOE3w51jj{&fo$Ysgea(xEV(mgB(bK1|cxKxroA%pf3UX+Otv=htWvv{T^ z)D}m;f}|tDdn+6#IT*VhQQpb~yn4}Hn)7=9mToi71lOR|vjdn#wx8o;a`J@s@&F4` zf?GGwi|o-${0BPxfcPDpr(Rt(mJFXwX#9h<@en<->|fF6c7)4YvbrP+m=i^|hU#+f z^mEq7d>oGxayAxMMB*ogrO&UZVhPt6%Vfw+!@$i^h&Buy(~fntP223_d=PYy2fQ2z2I zpMK?t+SU84eie2GaJL4LV@~Oj5<$vc@q2ScV073$!b8loNPI7-Ocu|$hH_BWg4K6Y zJw;D=`Kn8PaRz?C$j}HsM*!itS9BCbN=nzORW*$p5!D5KyACb_L&$ahR%ir$&k=F{ znF29A;P!~sa+M;(F=rLn9E1;)<6=*$)VZxe=D{y7DtGJ{?cu&T9)T|sZP)ol1TJ&q z+Uh>xTow3PP$ikV$XS{YwY#s{4VR8(OGsw!>a-C5wtYvREuP5S?n37tudIQ2E(I!L zs0V8RqL6qXO!1JkkX(pMiPB^806l&-(^sCd83bvf9q6Q+SA}lL-?B>&Ti}VT5vhed zKG|TV`?|khMs-x7sx>9}IKhV;De>X7z!frR+AG-TSHxx0Cj8{&EAwX)o_(y8Mq`au zgXDIz=cdL(KVlqkWsOh5=AP+#g%+NEG(|?s(lM!@3G+AJogfH3^5Ez%&{N$^-A>JE zj}Ehv>a-T3{>nuVyRu_D+c1A3-NhBEE*C+r9wNbUKJNh}c1u_Vbw_W+?8M`Z>geNh zo)SuhlT*dnq_VFSn9V4Y`YVixqD=BgZ%Ly|J9Z7PQS$*|R3gPMRFYAB5AcTh z)FaqLN|43zlXFh!=DnWiq|5RdM;;>zIx&qcQpY1J#jLKTIz>GCj~^LIz6g zAZx9H*^29bv5n@y_Zdwy}-M5BfA2IxxYB;Oaxpav)Bmr4K2ec zQbj@2RhQ>vm;xwMOuGqw=|me1;;W~qzwmT<>Ahx^QjPcE^OdhJ`Lc4l@-^>us2$H> zNFhTw8PQ}KWllk1PTt8Qz24Gj04dZ+QlBrfQs9F))^6KyA=`jN1<4hAE^&PW z;L3-haZ4%=jxc$Ij`~ z{7)BJUy|9izwbU#SW;IA;Jv9JQt8G+vd6pDC?55v=!7!|}myjMG`(4~VMdy?uz)3IV;3rLBscW7Jnp;2;1;wy?RgWrI?+Jn@fKCBfVAKc zXSQWZN=lw+HlkGw>3eXt(m~2<($?d)%h}s;Hm*8|b7n~Ywg%!I1FLZ7R5LZk@F7Nu z)2wa$qn5GOv4LBO58sLeE!T3SR+yaZc7#VwiyVWnpbMKyll1I2cucwN#U{h^)DY|{ zReX?p$N<1}eH|J7;agu{nJ36Z^o_?`v5~e85+(i((L2M{1v;y%;DCeq92-Pjk?i5w zuI<%SZqszlCq1G-uL}$Nvlot;5J8{hw5*7J;0$N02wCWGAo<&Cti80U>pYM|19$by zT0tx#D+JlUCfQH@*7<$cr#RbC z5D-|r4blQYg-Z`=@B~{Iqgr+LqcWT9F`a5|j<&^bA0fawX_=>_P&P!!Yp6}grHe0# z0)fS?MH9a;>3OH8a?x$9#9C6lWNWjI@UwwYDe&Hc=tQ+6#1LlbX7V!8$fqZ8R5eAb zFR=|^c#sFu)S!&YAVgjzt-l-Jag8as7GNTuDRm5dWlG~Dau)Zk;7UZMn=bEnFF*+?FVBh!9_xY-h$E?EA+ExYr zrYc7ugY427IuJiFDUnR7H0s$Kg^oe>Te`g4S(RrF$^jEsKBOo;>9C1i=?k6KaVea*cMYb7o*_`;sDQ^UR-CX-Oa>FWjQZyh`HS2VOkj;Hs^pd1|;E zKS|+CPT2W9mb@0TITN$42PD9Ir^-TOq4wF7#hbfRWzN+&)Y+iN(aOY`&D^xK)8xB) z5zCcFQ^MlTS@Pj-Q~oj1M|ZYA8yWE12is6;^hh>D;OV>$$tz0=NxNqml0rkziZk&3 zQV-V8Iy7;iz0AyUL$8hP+evq+p>73~3V`cHnB_dfX>apV{8|joGa*Nu_(YMDdQ-NE zcIZGJ?)X%SRctGZ?&MzCYTVN(tYf(;ql%c)OVrB#;Z&&x0!#N<1pzXiZhxC$}24 ziym!>_eySnD+q?~c03yEo~sm7oU`xx}g_up3s@%1rV z?1>f1xB6v;N*bokO(JuzyD>L6D{MZ*Q^cU_`HHg6?^)ulo2EoBwVxrXQPSVy@W-qp z5}+5CF{trUU@qaQ@Ai_QP=YV?%}fI9gddyZ)zv5nMt! zAb|JZ1x7%CB-bC7Q?@I(Jnv}#=ZYU_ZwK&4V5Ho-_)EdR1V-ewWqDaGfaipivQPj3 z^5a%7H)Zwf0DWzFT_E5GpNN~JHUL-i?*rle3hsId4zYNmk#Pym`QUFI0slS1LffD0O3Z*iPjCC{(pO$C{Xc6cf8xip1O6x}<*($wGbH{b|8)8O|3SXQU%`K8 z$@mGrCJy-1oEg8u$6Y?}|J{$;1e_H3_ukgR??E49? zrhN(jCpGx}ivGI_pr7biBLLvfDg^qK{dYfK{bcud0sKQ4_)q&4>(`n1T@d=`OkjQf kaVGxLuUx>7uiXE?v1m + * + * 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 somewhat biased in the direction of writable cells...) + */ + +#if __STDC__ +#include +#include +#endif + +#ifdef __DECC +typedef char * caddr_t; +#endif + +#include +#include +#include + +#if __STDC__ +# define P(x)x +#else +#define P(x)() +#endif + +#ifndef isupper +# define isupper(c) ((c) >= 'A' && (c) <= 'Z') +#endif +#ifndef _tolower +# define _tolower(c) ((c) - 'A' + 'a') +#endif + +extern char *progname; +extern char *get_string_resource P((char *, char *)); + +static Visual *pick_best_visual P ((Screen *)); +static Visual *pick_best_visual_of_class P((Screen *, int)); +static Visual *id_to_visual P((Screen *, int)); +static int visual_depth P((Display *, Visual *)); +static int screen_number P((Screen *)); +static Visual *id_to_visual P((Screen *screen, int id)); + + +#define DEFAULT_VISUAL -1 +#define BEST_VISUAL -2 +#define SPECIFIC_VISUAL -3 + +Visual * +get_visual_resource (dpy, name, class) + Display *dpy; + char *name, *class; +{ + Screen *screen = DefaultScreenOfDisplay (dpy); + char c, *v = get_string_resource (name, class); + char *tmp; + int vclass; + unsigned long id; + + if (v) + for (tmp = v; *tmp; tmp++) + if (isupper (*tmp)) *tmp = _tolower (*tmp); + + if (!v) vclass = BEST_VISUAL; + else if (!strcmp (v, "default")) vclass = DEFAULT_VISUAL; + else if (!strcmp (v, "best")) vclass = BEST_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, "pseudocolor")) vclass = PseudoColor; + else if (!strcmp (v, "directcolor")) vclass = DirectColor; + else if (1 == sscanf (v, " %ld %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 (v) free (v); + + if (vclass == DEFAULT_VISUAL) + return DefaultVisualOfScreen (screen); + else if (vclass == BEST_VISUAL) + return pick_best_visual (screen); + else if (vclass == SPECIFIC_VISUAL) + { + Visual *visual = id_to_visual (screen, id); + if (visual) return visual; + fprintf (stderr, "%s: no visual with id 0x%x.\n", progname, + (unsigned int) id); + return DefaultVisualOfScreen (screen); + } + else + { + Visual *visual = pick_best_visual_of_class (screen, vclass); + if (visual) return visual; + fprintf (stderr, "%s: no visual of class %s.\n", progname, v); + return DefaultVisualOfScreen (screen); + } +} + +static Visual * +pick_best_visual (screen) + Screen *screen; +{ + /* 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. + */ + Display *dpy = DisplayOfScreen (screen); + Visual *visual; + if ((visual = pick_best_visual_of_class (screen, TrueColor)) && + visual_depth (dpy, visual) >= 16) + return visual; + if ((visual = pick_best_visual_of_class (screen, PseudoColor))) + return visual; + if ((visual = pick_best_visual_of_class (screen, TrueColor))) + return visual; + if ((visual = pick_best_visual_of_class (screen, DirectColor))) + return visual; + if ((visual = pick_best_visual_of_class (screen, GrayScale))) + return visual; + if ((visual = pick_best_visual_of_class (screen, StaticGray))) + return visual; + return DefaultVisualOfScreen (screen); +} + +static Visual * +pick_best_visual_of_class (screen, visual_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. + */ + 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++) + /* 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 = vi_out [best].visual; + XFree ((char *) vi_out); + return visual; + } + else + return 0; +} + +static Visual * +id_to_visual (screen, id) + 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 +get_visual_depth (dpy, visual) + Display *dpy; + Visual *visual; +{ + XVisualInfo vi_in, *vi_out; + int out_count, d; + vi_in.screen = DefaultScreen (dpy); + 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; +} + + +int +get_visual_class (dpy, visual) + Display *dpy; + Visual *visual; +{ + XVisualInfo vi_in, *vi_out; + int out_count, c; + vi_in.screen = DefaultScreen (dpy); + 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; +} + +void +describe_visual (f, dpy, visual) + FILE *f; + Display *dpy; + Visual *visual; +{ + Screen *screen = DefaultScreenOfDisplay (dpy); + 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 (); + fprintf (f, "0x%02x (%s depth: %2d, cmap: %3d)\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, vi_out->colormap_size /*, vi_out->bits_per_rgb*/); + XFree ((char *) vi_out); +} + +static int +screen_number (screen) + Screen *screen; +{ + Display *dpy = DisplayOfScreen (screen); + int i; + for (i = 0; i < ScreenCount (dpy); i++) + if (ScreenOfDisplay (dpy, i) == screen) + return i; + abort (); +} + +static int +visual_depth (dpy, visual) + Display *dpy; + Visual *visual; +{ + XVisualInfo vi_in, *vi_out; + int out_count, d; + vi_in.screen = DefaultScreen (dpy); + 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; +} + +int +visual_cells (dpy, visual) + Display *dpy; + Visual *visual; +{ + XVisualInfo vi_in, *vi_out; + int out_count, c; + vi_in.screen = DefaultScreen (dpy); + 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; +} diff --git a/driver/vms.opt b/driver/vms.opt new file mode 100755 index 0000000000000000000000000000000000000000..74f08ec9382ca8114f543efab94410e2f34e5f04 GIT binary patch literal 192 zcmWe*h}P8$4e|5|js=r?{yt9nKAujB48f7XD#0F(L9SLVuFl~q5xzjtV2>a@*9cdA lusDMfrkYT6MRFKwLQo7*z>r5bK^jR#m}7)

2tb8vp|PGM@kd literal 0 HcmV?d00001 diff --git a/driver/vms_axp.opt b/driver/vms_axp.opt new file mode 100755 index 0000000000000000000000000000000000000000..29393bbafea26fc106f02b4168a83cfbd59bf32e GIT binary patch literal 350 zcmb1Qh}P8$4e|5|js=r?{yt9eju8R+KAui;42p^h5r&3ACJJf_zWyPeZVHBah6+HL zAjcq2*I;F!d~js2O0b7xkgJu8t8=(YgfCDw*ds{KHNsUNEY6^UO;sqmG6gKELQo8X syT%mBHAcv;!QmD|BNW$QsDipB$P}SWnE_o@2*kn2iWn3yRH6F{00_re=>Px# literal 0 HcmV?d00001 diff --git a/driver/vms_decc.opt b/driver/vms_decc.opt new file mode 100755 index 0000000000000000000000000000000000000000..0e0d91df6e404e98417470f1f2a117c4493da2fc GIT binary patch literal 168 zcmb1Uh}P8$4e|5|js=r?{yt9eF0Rhb`aYgc42lfFk-;j#9*#k-RzSgUl?Y#;aIi;^ eo@<1wK3JSV2~$ldx*|CYH6bX5C}7B=n*acM_bgEW literal 0 HcmV?d00001 diff --git a/driver/wait.h b/driver/wait.h new file mode 100755 index 00000000..b9e97b01 --- /dev/null +++ b/driver/wait.h @@ -0,0 +1 @@ +/* Null file works for VMS */ diff --git a/driver/windows.c b/driver/windows.c new file mode 100755 index 00000000..763a941f --- /dev/null +++ b/driver/windows.c @@ -0,0 +1,666 @@ +/* xscreensaver, Copyright (c) 1991-1993 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 + +#ifdef VMS +typedef char * caddr_t; +#endif + +#include +#include +#include +#include +#ifndef VMS +#include +#else +#include "sys$common:[decw$include.xmu]SysUtil.h" +#endif + +#include /* for the signal names */ + +#include "xscreensaver.h" + +#if __STDC__ +#ifndef __DECC +extern int kill (pid_t, int); /* signal() is in sys/signal.h... */ +#else +extern int kill (int, int); +#endif +#endif /* __STDC__ */ + +extern Bool lock_p, demo_mode_p; + +Atom XA_VROOT, XA_XSETROOT_ID; +Atom XA_SCREENSAVER_VERSION, XA_SCREENSAVER_ID; + +#if __STDC__ +extern void describe_visual (FILE *, Display *, Visual *); +#endif + +Window screensaver_window = 0; +Cursor cursor; +Colormap cmap, cmap2; +Bool install_cmap_p; +Bool fade_p, unfade_p; +int fade_seconds, fade_ticks; + +static unsigned long black_pixel; +static Window real_vroot, real_vroot_value; + +#define ALL_POINTER_EVENTS \ + (ButtonPressMask | ButtonReleaseMask | EnterWindowMask | \ + LeaveWindowMask | PointerMotionMask | PointerMotionHintMask | \ + Button1MotionMask | Button2MotionMask | Button3MotionMask | \ + Button4MotionMask | Button5MotionMask | ButtonMotionMask) + +/* I don't really understand Sync vs Async, but these seem to work... */ +#define grab_kbd(win) \ + XGrabKeyboard (dpy, (win), True, GrabModeSync, GrabModeAsync, CurrentTime) +#define grab_mouse(win) \ + XGrabPointer (dpy, (win), True, ALL_POINTER_EVENTS, \ + GrabModeAsync, GrabModeAsync, None, cursor, CurrentTime) + +void +grab_keyboard_and_mouse P((void)) +{ + Status status; + XSync (dpy, False); + + if (demo_mode_p) return; + + status = grab_kbd (screensaver_window); + if (status != GrabSuccess) + { /* try again in a second */ + sleep (1); + status = grab_kbd (screensaver_window); + if (status != GrabSuccess) + fprintf (stderr, "%s: %scouldn't grab keyboard! (%d)\n", + progname, (verbose_p ? "## " : ""), status); + } + status = grab_mouse (screensaver_window); + if (status != GrabSuccess) + { /* try again in a second */ + sleep (1); + status = grab_mouse (screensaver_window); + if (status != GrabSuccess) + fprintf (stderr, "%s: %scouldn't grab pointer! (%d)\n", + progname, (verbose_p ? "## " : ""), status); + } +} + +void +ungrab_keyboard_and_mouse P((void)) +{ + XUngrabPointer (dpy, CurrentTime); + XUngrabKeyboard (dpy, CurrentTime); +} + + +void +ensure_no_screensaver_running () +{ + int i; + Window root = RootWindowOfScreen (screen); + Window root2, parent, *kids; + unsigned int nkids; + int (*old_handler) (); + + 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; + char *version; + + if (XGetWindowProperty (dpy, kids[i], XA_SCREENSAVER_VERSION, 0, 1, + False, XA_STRING, &type, &format, &nitems, + &bytesafter, (unsigned char **) &version) + == Success + && type != None) + { + char *id; + if (!XGetWindowProperty (dpy, kids[i], XA_SCREENSAVER_ID, 0, 512, + False, XA_STRING, &type, &format, &nitems, + &bytesafter, (unsigned char **) &id) + == Success + || type == None) + id = "???"; + + fprintf (stderr, + "%s: %salready running on display %s (window 0x%x)\n from process %s.\n", + progname, (verbose_p ? "## " : ""), DisplayString (dpy), + (int) kids [i], id); + exit (1); + } + } + + if (kids) XFree ((char *) kids); + XSync (dpy, False); + XSetErrorHandler (old_handler); +} + + +void +disable_builtin_screensaver () +{ + int timeout, interval, prefer_blank, allow_exp; + XForceScreenSaver (dpy, ScreenSaverReset); + XGetScreenSaver (dpy, &timeout, &interval, &prefer_blank, &allow_exp); + if (timeout != 0) + { + XSetScreenSaver (dpy, 0, interval, prefer_blank, allow_exp); + printf ("%s%sisabling server builtin screensaver.\n\ + You can re-enable it with \"xset s on\".\n", + (verbose_p ? "" : progname), (verbose_p ? "\n\tD" : ": d")); + } +} + + +/* Virtual-root hackery */ + +#ifdef _VROOT_H_ +ERROR! You must not include vroot.h in this file. +#endif + +static void +#if __STDC__ +store_vroot_property (Window win, Window value) +#else +store_vroot_property (win, value) + Window win, value; +#endif +{ +#if 0 + printf ("%s: storing XA_VROOT = 0x%x (%s) = 0x%x (%s)\n", progname, + 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 +#if __STDC__ +remove_vroot_property (Window win) +#else +remove_vroot_property (win) + Window win; +#endif +{ +#if 0 + printf ("%s: removing XA_VROOT from 0x%x (%s)\n", progname, win, + (win == screensaver_window ? "ScreenSaver" : + (win == real_vroot ? "VRoot" : + (win == real_vroot_value ? "Vroot_value" : "???")))); +#endif + XDeleteProperty (dpy, win, XA_VROOT); +} + + +static void +kill_xsetroot_data P((void)) +{ + Atom type; + int format; + unsigned long nitems, bytesafter; + Pixmap *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. + */ + if (XGetWindowProperty (dpy, screensaver_window, XA_XSETROOT_ID, 0, 1, + True, AnyPropertyType, &type, &format, &nitems, + &bytesafter, (unsigned char **) &dataP) + == Success + && type != None) + { + if (dataP && *dataP && type == XA_PIXMAP && format == 32 && + nitems == 1 && bytesafter == 0) + { + if (verbose_p) + printf ("%s: destroying xsetroot data (0x%X).\n", + progname, *dataP); + XKillClient (dpy, *dataP); + } + else + fprintf (stderr, "%s: %sdeleted unrecognised _XSETROOT_ID property: \n\ + %d, %d; type: %d, format: %d, nitems: %d, bytesafter %d\n", + progname, (verbose_p ? "## " : ""), + dataP, (dataP ? *dataP : 0), type, + format, nitems, bytesafter); + } +} + + +static void handle_signals P((Bool on_p)); + +static void +save_real_vroot P((void)) +{ + int i; + Window root = RootWindowOfScreen (screen); + Window root2, parent, *kids; + unsigned int nkids; + + real_vroot = 0; + 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; + Window *vrootP = 0; + + if (XGetWindowProperty (dpy, kids[i], XA_VROOT, 0, 1, False, XA_WINDOW, + &type, &format, &nitems, &bytesafter, + (unsigned char **) &vrootP) + != Success) + continue; + if (! vrootP) + continue; + if (real_vroot) + { + if (*vrootP == screensaver_window) abort (); + fprintf (stderr, + "%s: %smore than one virtual root window found (0x%x and 0x%x).\n", + progname, (verbose_p ? "## " : ""), + (int) real_vroot, (int) kids [i]); + exit (1); + } + real_vroot = kids [i]; + real_vroot_value = *vrootP; + } + + if (real_vroot) + { + handle_signals (True); + remove_vroot_property (real_vroot); + XSync (dpy, False); + } + + XFree ((char *) kids); +} + +static Bool +restore_real_vroot_1 P((void)) +{ + if (verbose_p && real_vroot) + printf ("%s: restoring __SWM_VROOT property on the real vroot (0x%x).\n", + progname, real_vroot); + remove_vroot_property (screensaver_window); + if (real_vroot) + { + store_vroot_property (real_vroot, real_vroot_value); + real_vroot = 0; + 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 (dpy, False); + return True; + } + return False; +} + +void +restore_real_vroot () +{ + if (restore_real_vroot_1 ()) + handle_signals (False); +} + + +/* Signal hackery to ensure that the vroot doesn't get left in an + inconsistent state + */ + +static const char *sig_names [255] = { 0 }; + +static void +restore_real_vroot_handler (sig) + int sig; +{ + signal (sig, SIG_DFL); + if (restore_real_vroot_1 ()) + fprintf (stderr, "\n%s: %s%s (%d) intercepted, vroot restored.\n", + progname, (verbose_p ? "## " : ""), + ((sig < sizeof(sig_names) && sig >= 0 && sig_names [sig]) + ? sig_names [sig] : "unknown signal"), + sig); + kill (getpid (), sig); +} + + +static void +#if __STDC__ +catch_signal (int sig, char *signame, Bool on_p) +#else +catch_signal (sig, signame, on_p) + int sig; + char *signame; + Bool on_p; +#endif +{ + if (! on_p) + signal (sig, SIG_DFL); + else + { + sig_names [sig] = signame; + if (((int) signal (sig, restore_real_vroot_handler)) == -1) + { + char buf [255]; + sprintf (buf, "%s: %scouldn't catch %s (%d)", progname, + (verbose_p ? "## " : ""), signame, sig); + perror (buf); + restore_real_vroot (); + exit (1); + } + } +} + +static void +handle_signals (on_p) + Bool on_p; +{ +#if 0 + if (on_p) printf ("handling signals\n"); + else printf ("unhandling signals\n"); +#endif + + catch_signal (SIGHUP, "SIGHUP", on_p); + catch_signal (SIGINT, "SIGINT", on_p); + catch_signal (SIGQUIT, "SIGQUIT", on_p); + catch_signal (SIGILL, "SIGILL", on_p); + catch_signal (SIGTRAP, "SIGTRAP", on_p); + catch_signal (SIGIOT, "SIGIOT", on_p); +#ifndef VMS + catch_signal (SIGABRT, "SIGABRT", on_p); +#endif +#ifdef SIGEMT + catch_signal (SIGEMT, "SIGEMT", on_p); +#endif + catch_signal (SIGFPE, "SIGFPE", on_p); + catch_signal (SIGBUS, "SIGBUS", on_p); + catch_signal (SIGSEGV, "SIGSEGV", on_p); +#ifdef SIGSYS + catch_signal (SIGSYS, "SIGSYS", on_p); +#endif + catch_signal (SIGTERM, "SIGTERM", on_p); +#ifdef SIGXCPU + catch_signal (SIGXCPU, "SIGXCPU", on_p); +#endif +#ifdef SIGXFSZ + catch_signal (SIGXFSZ, "SIGXFSZ", on_p); +#endif +#ifdef SIGDANGER + catch_signal (SIGDANGER, "SIGDANGER", on_p); +#endif +} + + +/* Managing the actual screensaver window */ + +void +initialize_screensaver_window P((void)) +{ + /* 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; + XClassHint class_hints; + XSetWindowAttributes attrs; + unsigned long attrmask; + int width = WidthOfScreen (screen); + int height = HeightOfScreen (screen); + char id [2048]; + + black.red = black.green = black.blue = 0; + + if (cmap == DefaultColormapOfScreen (screen)) + cmap = 0; + + if ((install_cmap_p && !demo_mode_p) || + (visual != DefaultVisualOfScreen (screen))) + { + if (! cmap) + { + cmap = XCreateColormap (dpy, RootWindowOfScreen (screen), + visual, AllocNone); + if (! XAllocColor (dpy, cmap, &black)) abort (); + black_pixel = black.pixel; + } + } + else + { + if (cmap) + { + XFreeColors (dpy, cmap, &black_pixel, 1, 0); + XFreeColormap (dpy, cmap); + } + cmap = DefaultColormapOfScreen (screen); + black_pixel = BlackPixelOfScreen (screen); + } + + if (cmap2) + { + XFreeColormap (dpy, cmap2); + cmap2 = 0; + } + + if (fade_p) + { + cmap2 = copy_colormap (dpy, cmap, 0); + if (! cmap2) + fade_p = unfade_p = 0; + } + + attrmask = (CWOverrideRedirect | CWEventMask | CWBackingStore | CWColormap | + CWBackPixel | CWBackingPixel | CWBorderPixel); + attrs.override_redirect = True; + attrs.event_mask = (KeyPressMask | KeyReleaseMask | + ButtonPressMask | ButtonReleaseMask | + PointerMotionMask); + attrs.backing_store = NotUseful; + attrs.colormap = cmap; + attrs.background_pixel = black_pixel; + attrs.backing_pixel = black_pixel; + attrs.border_pixel = black_pixel; + +/* if (demo_mode_p || lock_p) width = width / 2; #### */ + + if (screensaver_window) + { + XWindowChanges changes; + unsigned int changesmask = CWX|CWY|CWWidth|CWHeight|CWBorderWidth; + changes.x = 0; + changes.y = 0; + changes.width = width; + changes.height = height; + changes.border_width = 0; + + XConfigureWindow (dpy, screensaver_window, changesmask, &changes); + XChangeWindowAttributes (dpy, screensaver_window, attrmask, &attrs); + } + else + { + if (! verbose_p) + ; + else if (visual == DefaultVisualOfScreen (screen)) + { + fprintf (stderr, "%s: using default visual ", progname); + describe_visual (stderr, dpy, visual); + } + else + { + fprintf (stderr, "%s: using visual: ", progname); + describe_visual (stderr, dpy, visual); + fprintf (stderr, "%s: default visual: ", progname); + describe_visual (stderr, dpy, DefaultVisualOfScreen (screen)); + } + + screensaver_window = + XCreateWindow (dpy, RootWindowOfScreen (screen), 0, 0, width, height, + 0, visual_depth, InputOutput, visual, attrmask, + &attrs); + } + + class_hints.res_name = progname; + class_hints.res_class = progclass; + XSetClassHint (dpy, screensaver_window, &class_hints); + XStoreName (dpy, screensaver_window, "screensaver"); + XChangeProperty (dpy, screensaver_window, XA_SCREENSAVER_VERSION, + XA_STRING, 8, PropModeReplace, + (unsigned char *) screensaver_version, + strlen (screensaver_version)); + + sprintf (id, "%d on host ", getpid ()); + if (! XmuGetHostname (id + strlen (id), sizeof (id) - strlen (id) - 1)) + strcat (id, "???"); + XChangeProperty (dpy, screensaver_window, XA_SCREENSAVER_ID, XA_STRING, 8, + PropModeReplace, (unsigned char *) id, strlen (id)); + + if (!cursor) + { + Pixmap bit; + bit = XCreatePixmapFromBitmapData (dpy, screensaver_window, "\000", 1, 1, + BlackPixelOfScreen (screen), + BlackPixelOfScreen (screen), 1); + cursor = XCreatePixmapCursor (dpy, bit, bit, &black, &black, 0, 0); + XFreePixmap (dpy, bit); + } + + XSetWindowBackground (dpy, screensaver_window, black_pixel); + if (! demo_mode_p) + XDefineCursor (dpy, screensaver_window, cursor); + else + XUndefineCursor (dpy, screensaver_window); +} + + +void +raise_window (inhibit_fade, between_hacks_p) + Bool inhibit_fade, between_hacks_p; +{ + initialize_screensaver_window (); + + if (fade_p && !inhibit_fade && !demo_mode_p) + { + int grabbed; + Colormap current_map = (between_hacks_p + ? cmap + : DefaultColormapOfScreen (screen)); + copy_colormap (dpy, current_map, cmap2); + XGrabServer (dpy); + /* grab and blacken mouse on the root window (saver not mapped yet) */ + grabbed = grab_mouse (RootWindowOfScreen (screen)); + /* fade what's on the screen to black */ + XInstallColormap (dpy, cmap2); + fade_colormap (dpy, current_map, cmap2, fade_seconds, fade_ticks, True); + XClearWindow (dpy, screensaver_window); + XMapRaised (dpy, screensaver_window); + /* Once the saver window is up, restore the colormap. + (The "black" pixels of the two colormaps are compatible.) */ + XInstallColormap (dpy, cmap); + if (grabbed == GrabSuccess) + XUngrabPointer (dpy, CurrentTime); + XUngrabServer (dpy); + } + else + { + XClearWindow (dpy, screensaver_window); + XMapRaised (dpy, screensaver_window); + } + + if (install_cmap_p && !demo_mode_p) + XInstallColormap (dpy, cmap); +} + +void +blank_screen () +{ + save_real_vroot (); + store_vroot_property (screensaver_window, screensaver_window); + raise_window (False, False); + grab_keyboard_and_mouse (); +#ifdef __hpux + if (lock_p) + XHPDisableReset (dpy); /* turn off C-Sh-Reset */ +#endif +} + +void +unblank_screen () +{ + if (unfade_p && !demo_mode_p) + { + int grabbed; + Colormap default_map = DefaultColormapOfScreen (screen); + blacken_colormap (dpy, cmap2); + XGrabServer (dpy); + /* grab and blacken mouse on the root window. */ + grabbed = grab_mouse (RootWindowOfScreen (screen)); + XInstallColormap (dpy, cmap2); + XUnmapWindow (dpy, screensaver_window); + fade_colormap (dpy, default_map, cmap2, fade_seconds, fade_ticks, False); + XInstallColormap (dpy, default_map); + if (grabbed == GrabSuccess) + XUngrabPointer (dpy, CurrentTime); + XUngrabServer (dpy); + } + else + { + if (install_cmap_p && !demo_mode_p) + { + XClearWindow (dpy, screensaver_window); /* avoid technicolor */ + XInstallColormap (dpy, DefaultColormapOfScreen (screen)); + } + XUnmapWindow (dpy, screensaver_window); + } + kill_xsetroot_data (); + ungrab_keyboard_and_mouse (); + restore_real_vroot (); +#ifdef __hpux + if (lock_p) + XHPEnableReset (dpy); /* turn C-Sh-Reset back on */ +#endif +} diff --git a/driver/xscreensaver-command.c b/driver/xscreensaver-command.c new file mode 100755 index 00000000..46af331f --- /dev/null +++ b/driver/xscreensaver-command.c @@ -0,0 +1,154 @@ +/* xscreensaver-command, Copyright (c) 1991-1994 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 "version.h" +#include +#include +#include +#include +#if __STDC__ +# include +#endif + +#ifdef _VROOT_H_ +ERROR! you must not include vroot.h in this file +#endif + +static char *screensaver_version; +static char *usage = "usage: %s -\n\ +\n\ + This program provides external control of a running xscreensaver process.\n\ + Version %s, copyright (c) 1991-1994 Jamie Zawinski .\n\ +\n\ + -demo Enter interactive demo mode.\n\ + -deactivate Turns off the screensaver if it is on, as user input would.\n\ + -activate Turns it on as if the user had been idle for long enough.\n\ + -cycle Stops the current hack and runs a new one.\n\ + -next Like either -activate or -cycle, depending on which is more\n\ + appropriate, except that the screenhack that will be run is\n\ + the next one in the list of hacks, instead of a randomly-\n\ + chosen one. This option is good for looking at a demo of\n\ + each of the hacks in place.\n\ + -prev Like -next, but goes in the other direction.\n\ + -exit Causes the screensaver process to exit. It should be ok to\n\ + just kill the process (NOT with -9!) but this is a slightly\n\ + easier way.\n\ + -restart Causes the screensaver process to exit and then restart with\n\ + the same command line arguments. This is a good way of \n\ + causing the screensaver to re-read the resource database.\n\ + -lock Same as -activate, but with immediate locking.\n\ +\n\ + See the man page for more details.\n\n"; + +static Window +find_screensaver_window (dpy, progname) + Display *dpy; + char *progname; +{ + int i; + Window root = RootWindowOfScreen (DefaultScreenOfDisplay (dpy)); + Window root2, parent, *kids; + unsigned int nkids; + + if (! XQueryTree (dpy, root, &root2, &parent, &kids, &nkids)) + abort (); + if (root != root2) + abort (); + if (parent) + abort (); + if (! (kids && nkids)) + abort (); + for (i = 0; i < nkids; i++) + { + Atom type; + int format; + unsigned long nitems, bytesafter; + char *version; + + if (XGetWindowProperty (dpy, kids[i], + XInternAtom (dpy, "_SCREENSAVER_VERSION", False), + 0, 1, False, XA_STRING, + &type, &format, &nitems, &bytesafter, + (unsigned char **) &version) + == Success + && type != None) + return kids[i]; + } + fprintf (stderr, "%s: no screensaver is running on display %s", progname, + DisplayString (dpy)); + exit (1); +} + + +#define USAGE() \ + { fprintf (stderr, usage, argv[0], screensaver_version); exit (1); } + +#ifndef VMS +void +#else +int +#endif +main (argc, argv) + int argc; + char **argv; +{ + Display *dpy; + Window window; + XEvent event; + int i; + char *message = 0, *dpyname = 0; + screensaver_version = (char *) malloc (5); + memcpy (screensaver_version, screensaver_id + 17, 4); + screensaver_version [4] = 0; + for (i = 1; i < argc; i++) + { + char *s = argv [i]; + int L = strlen (s); + if (L < 2) USAGE (); + if (!strncmp (s, "-display", L)) dpyname = argv [++i]; + else if (message) USAGE () + else if (!strncmp (s, "-activate", L)) message = "ACTIVATE"; + else if (!strncmp (s, "-deactivate", L)) message = "DEACTIVATE"; + else if (!strncmp (s, "-cycle", L)) message = "CYCLE"; + else if (!strncmp (s, "-next", L)) message = "NEXT"; + else if (!strncmp (s, "-prev", L)) message = "PREV"; + else if (!strncmp (s, "-exit", L)) message = "EXIT"; + else if (!strncmp (s, "-restart", L)) message = "RESTART"; + else if (!strncmp (s, "-demo", L)) message = "DEMO"; + else if (!strncmp (s, "-lock", L)) message = "LOCK"; + else USAGE (); + } + if (! message) USAGE (); + if (!dpyname) dpyname = (char *) getenv ("DISPLAY"); + dpy = XOpenDisplay (dpyname); + if (!dpy) + { + fprintf (stderr, "%s: can't open display %s\n", argv[0], + (dpyname ? dpyname : "(null)")); + exit (1); + } + window = find_screensaver_window (dpy, argv[0]); + + event.xany.type = ClientMessage; + event.xclient.display = dpy; + event.xclient.window = window; + event.xclient.message_type = XInternAtom (dpy, "SCREENSAVER", False); + event.xclient.format = 32; + event.xclient.data.l[0] = (long) XInternAtom (dpy, message, False); + if (! XSendEvent (dpy, window, False, 0L, &event)) + { + fprintf (stderr, "%s: XSendEvent(dpy, 0x%x ...) failed.\n", argv [0], + (unsigned int) window); + exit (1); + } + XSync (dpy, 0); + exit (0); +} diff --git a/driver/xscreensaver-command.exe_axp b/driver/xscreensaver-command.exe_axp new file mode 100755 index 0000000000000000000000000000000000000000..1293abb4d590b7edf1cd9eafa7433e85c1c30a70 GIT binary patch literal 8192 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 BC4&F} literal 0 HcmV?d00001 diff --git a/driver/xscreensaver-command.hlp b/driver/xscreensaver-command.hlp new file mode 100755 index 00000000..630ea866 --- /dev/null +++ b/driver/xscreensaver-command.hlp @@ -0,0 +1,105 @@ +1 XSCREENCOMMAND +Control a running xscreensaver process + +SYNOPSIS + + $ xscreencommand [-activate] [-deactivate] [-cycle] [-next] [-prev] + [-exit] [-restart] [-demo] [-lock] + +2 DESCRIPTION +The xscreensaver-command program controls a running xscreensaver +process by sending it client-messages. + +2 OPTIONS +xscreencommand accepts the following options: + + -activate +Tell the screensaver to turn on immediately (that is, pretend that the +user been idle for long enough.) It will turn off as soon as there is +any user activity, as usual. + +It is useful to run this from a menu; you may wish to run it as + + $ wait 0:00:05 + $ xscreencommand -activate + +to be sure that you have time to remove your hand from the mouse before +the screensaver comes on. + + -deactivate +Tell the screensaver to turn off, as if there had been user activity. +If locking is enabled, then the screensaver will prompt for a password +as usual. + + -cycle +Tell the screensaver to change which graphics hack it is running, just +as if the ``cycle'' timer had expired. + + -next +This is like either -activate or -cycle, depending on which is +more appropriate, except that the screenhack that will be run is the next +one in the list of programs, instead of a randomly-chosen one. This option +is good for looking at a demo of each of the screensavers currently available. +You might want to put this on a menu. + + -prev +This is like -next, but cycles in the other direction. + + -demo +Cause the screensaver to enter its interactive demo mode, if it has been +compiled with support for it. + + -lock +Like -activate, but a password will be required before the screensaver +turns off, even if the screensaver's lock resource is false. The +display will be locked immediately even if the screensaver's lockTimeout +resource is non-zero. + + -exit +Causes the screensaver process to exit gracefully. This is a slightly +safer way to kill the screensaver than by using kill. + +Never use kill -9 with xscreensaver while the screensaver is +active. If you are using a virtual root window manager, that can leave +things in an inconsistent state, and you may need to restart your window +manager to repair the damage. + + -restart +Causes the screensaver process to exit and then restart with the same command +line arguments. This is a good way of causing the screensaver to re-read the +resource database. + +If the screensaver is run from xdm(1) (that is, it is already running +before you log in) then you may want to issue the ``restart'' command from +one of your startup scripts, so that the screensaver gets your resource +settings instead of the default ones. + +2 ENVIRONMENT + + DISPLAY +to get the default host and display number. + + PATH +to find the executable to restart. + +2 BUGS +Diagnostics are reported on the stderr of the xscreensaver +process, not this process, so the caller of xscreencommand +may not see the error messages. + +2 COPYRIGHT +Copyright (co 1992, 1993 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. + +2 AUTHOR +Jamie Zawinski , 13-aug-92. + +2 VMS_PORT + +Patrick MOREAU - CENA/Athis-Mons - FRANCE (pmoreau@cena.dgac.fr) + diff --git a/driver/xscreensaver-command.man b/driver/xscreensaver-command.man new file mode 100755 index 00000000..b00acee9 --- /dev/null +++ b/driver/xscreensaver-command.man @@ -0,0 +1,110 @@ +.de EX \"Begin example +.ne 5 +.if n .sp 1 +.if t .sp .5 +.nf +.in +.5i +.. +.de EE +.fi +.in -.5i +.if n .sp 1 +.if t .sp .5 +.. +.TH XScreenSaver 1 "22-mar-93" "X Version 11" +.SH NAME +xscreensaver-command - control a running xscreensaver process +.SH SYNOPSIS +.B xscreensaver-command +[\-activate] [\-deactivate] [\-cycle] [\-next] [\-prev] [\-exit] [\-restart] [\-demo] [\-lock] +.SH DESCRIPTION +The \fIxscreensaver\-command\fP program controls a running \fIxscreensaver\fP +process by sending it client-messages. +.SH OPTIONS +.I xscreensaver-command +accepts the following options: +.TP 8 +.B \-activate +Tell the screensaver to turn on immediately (that is, pretend that the +user been idle for long enough.) It will turn off as soon as there is +any user activity, as usual. + +It is useful to run this from a menu; you may wish to run it as +.EX +sleep 5 ; xscreensaver-command -activate +.EE +to be sure that you have time to remove your hand from the mouse before +the screensaver comes on. +.TP 8 +.B \-deactivate +Tell the screensaver to turn off, as if there had been user activity. +If locking is enabled, then the screensaver will prompt for a password +as usual. +.TP 8 +.B \-cycle +Tell the screensaver to change which graphics hack it is running, just +as if the ``cycle'' timer had expired. +.TP 8 +.B \-next +This is like either \fI\-activate\fP or \fI\-cycle\fP, depending on which is +more appropriate, except that the screenhack that will be run is the next +one in the list of programs, instead of a randomly-chosen one. This option +is good for looking at a demo of each of the screensavers currently available. +You might want to put this on a menu. +.TP 8 +.B \-prev +This is like \fI\-next\fP, but cycles in the other direction. +.TP 8 +.B \-demo +Cause the screensaver to enter its interactive demo mode, if it has been +compiled with support for it. +.TP 8 +.B \-lock +Like \fI\-activate\fP, but a password will be required before the screensaver +turns off, even if the screensaver's \fIlock\fP resource is false. The +display will be locked immediately even if the screensaver's \fIlockTimeout\fP +resource is non-zero. +.TP 8 +.B \-exit +Causes the screensaver process to exit gracefully. This is a slightly +safer way to kill the screensaver than by using \fIkill\fP. + +Never use \fIkill -9\fP with \fIxscreensaver\fP while the screensaver is +active. If you are using a virtual root window manager, that can leave +things in an inconsistent state, and you may need to restart your window +manager to repair the damage. +.TP 8 +.B \-restart +Causes the screensaver process to exit and then restart with the same command +line arguments. This is a good way of causing the screensaver to re-read the +resource database. + +If the screensaver is run from \fIxdm(1)\fP (that is, it is already running +before you log in) then you may want to issue the ``restart'' command from +one of your startup scripts, so that the screensaver gets your resource +settings instead of the default ones. +.SH ENVIRONMENT +.PP +.TP 8 +.B DISPLAY +to get the default host and display number. +.TP 8 +.B PATH +to find the executable to restart. +.SH "SEE ALSO" +.BR X (1), +.BR xscreensaver (1) +.SH BUGS +Diagnostics are reported on the \fBstderr\fP of the \fIxscreensaver\fP +process, not this process, so the caller of \fIxscreensaver-command\fP +may not see the error messages. +.SH COPYRIGHT +Copyright \(co 1992, 1993 by Jamie Zawinski. Permission to use, copy, modify, +distribute, and sell this software and its documentation for any purpose is +hereby granted without fee, provided that the above copyright notice appear +in all copies and that both that copyright notice and this permission notice +appear in supporting documentation. No representations are made about the +suitability of this software for any purpose. It is provided "as is" without +express or implied warranty. +.SH AUTHOR +Jamie Zawinski , 13-aug-92. diff --git a/driver/xscreensaver.ad b/driver/xscreensaver.ad new file mode 100755 index 00000000..dda44285 --- /dev/null +++ b/driver/xscreensaver.ad @@ -0,0 +1,152 @@ +! app-defaults file for XScreenSaver by Jamie Zawinski. + +*timeout: 10 +*cycle: 10 +*lockTimeout: 0 +*passwdTimeout: 30 +*nice: 10 +*lock: False +*verbose: False +*fade: True +*unfade: False +*fadeSeconds: 1 +*fadeTicks: 75 + +! Turning on "installColormap" interacts erratically with twm and tvtwm, +! but seems to work fine with mwm and olwm. Try it and see. +! +*installColormap: False + +! Programs on this list apply all the time. +*programs: qix -root \n\ + qix -root -solid -delay 0 -segments 100 \n\ + qix -root -linear -count 10 -size 100 -segments 200 \n\ + attraction -root -mode balls \n\ + attraction -root -mode lines -points 3 -segments 200 \n\ + attraction -root -mode splines -segments 300 \n\ + attraction -root -mode lines -radius 300 \ + -orbit -vmult 0.5 \n\ + pyro -root \n\ + helix -root \n\ + rorschach -root -offset 7 \n\ + hopalong -root \n\ + greynetic -root \n\ + xroger -root \n\ + imsmap -root \n\ + slidescreen -root \n\ + decayscreen -root \n\ + hypercube -root \n\ + halo -root \n\ + maze -root \n\ + flame -root \n + +! Programs on this list are run only for monochrome screens. +*monoPrograms: qix -root -linear -count 5 -size 200 -spread 30 \ + -segments 75 -solid -xor \n\ + rocks -root \n\ + noseguy -root \n + +! Programs on this list are run only for color (really, non-mono) screens. +*colorPrograms: qix -root -count 4 -solid -transparent \n\ + qix -root -count 5 -solid -transparent -linear \ + -segments 250 -size 100 \n\ + attraction -root -mode polygons \n\ + attraction -root -mode filled-splines -segments 0 \n\ + attraction -root -glow -points 10 \n\ + rocks -root -fg darksalmon \n\ + noseguy -root -fg yellow -bg gray30 \n + + +! Some other screenhacks that you might want to track down: +! +! xdaliclock -root -builtin2 \n\ +! xswarm -r 2>&- \n\ +! xwave -root \n\ +! xbouncebits ... \n\ +! ico -r \n\ +! xsplinefun \n\ +! kaleid -root \n\ +! xfishtank -c black -d -r 2 \n\ + + +! Resources for the dialog boxes: +! +*fontList: *-helvetica-medium-r-*-*-*-120-*-*-*-iso8859-1 +*demoDialog*label1.fontList: *-helvetica-medium-r-*-*-*-140-*-*-*-iso8859-1 +*passwdDialog*fontList: *-helvetica-medium-r-*-*-*-140-*-*-*-iso8859-1 +*XmList.fontList: *-courier-medium-r-*-*-*-120-*-*-*-iso8859-1 +*XmTextField.fontList: *-courier-medium-r-*-*-*-120-*-*-*-iso8859-1 +*passwdDialog.passwdText.fontList: *-courier-medium-r-*-*-*-120-*-*-*-iso8859-1 + +*XmDialogShell*foreground: black +*XmDialogShell*background: gray90 +*XmDialogShell*XmTextField.foreground: black +*XmDialogShell*XmTextField.background: white +*XmDialogShell*demoList.foreground: black +*XmDialogShell*demoList.background: white +*XmDialogShell*rogerLabel.foreground: red3 +*XmDialogShell*rogerLabel.background: white + +*XmDialogShell.title: XScreenSaver +*allowShellResize: True +*autoUnmanage: False + +! This doesn't work. Motif ignores it if there is a scroll-list! +*demoDialog.maxWidth: 600 + +*label1.labelString: XScreenSaver %s +*label2.labelString: Copyright © 1991-1994 by Jamie Zawinski +*demoList.visibleItemCount: 10 +*demoList.automaticSelection: True +*next.labelString: Run Next +*prev.labelString: Run Previous +*edit.labelString: Edit Parameters +*done.labelString: Exit Demo Mode +*restart.labelString: Reinitialize + +*resourcesLabel.labelString: XScreenSaver Parameters + +! *timeoutLabel.labelString: Timeout Minutes +! *cycleLabel.labelString: Cycle Seconds +! *fadeSecondsLabel.labelString:Fade Seconds +! *fadeTicksLabel.labelString: Fade Ticks +! *lockLabel.labelString: Lock Timeout +! *passwdLabel.labelString: Password Timeout +! *resourcesForm*XmTextField.columns: 5 + +*timeoutLabel.labelString: Saver Timeout +*cycleLabel.labelString: Cycle Timeout +*fadeSecondsLabel.labelString: Fade Duration +*fadeTicksLabel.labelString: Fade Ticks +*lockLabel.labelString: Lock Timeout +*passwdLabel.labelString: Password Timeout +*resourcesForm*XmTextField.columns: 8 + +*verboseToggle.labelString: Verbose +*cmapToggle.labelString: Install Colormap +*fadeToggle.labelString: Fade Colormap +*unfadeToggle.labelString: Unfade Colormap +*lockToggle.labelString: Require Password +*resourcesDone.labelString: Done +*resourcesCancel.labelString: Cancel + +*passwdDialog.title: Password +*passwdLabel1.labelString: XScreenSaver %s +*passwdLabel2.labelString: This display is locked. +*passwdLabel3.labelString: Please type %s's password to unlock it. +*passwdDone.labelString: Done +*passwdCancel.labelString: Cancel + +*passwdLabel1.alignment: ALIGNMENT_BEGINNING +*passwdLabel2.alignment: ALIGNMENT_BEGINNING +*passwdLabel3.alignment: ALIGNMENT_BEGINNING +*rogerLabel.width: 150 + +! You probably won't need to change these. They aren't consulted if the +! XIdle extension is being used. +! +*pointerPollTime: 5 +*initialDelay: 30 +*windowCreationTimeout: 30 + +*bourneShell: /bin/sh diff --git a/driver/xscreensaver.c b/driver/xscreensaver.c new file mode 100755 index 00000000..77c06e0e --- /dev/null +++ b/driver/xscreensaver.c @@ -0,0 +1,947 @@ +/* xscreensaver, Copyright (c) 1991-1994 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 "version.h" + +/* ======================================================================== + * First we wait until the keyboard and mouse become idle for the specified + * amount of time. We do this by periodically checking with the XIdle + * server extension. + * + * 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. + * + * 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. + * + * While we are waiting, 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 atom ACTIVATE or DEACTIVATE, 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 extension, 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 that's probably + * pretty rare. + * + * 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. + * + * 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. + * + * None of this crap happens if we're using the XIdle extension, so install + * it if the description above sounds just too flaky to live. It is, but + * those are your choices. + * + * A third idle-detection option could be implement (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. + * - you probably can't set breakpoints in functions that are called on + * the other side of a call to fork() -- if your clients are dying + * with signal 5, Trace/BPT Trap, you're losing in this way. + * - If you aren't using XIdle, 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." + * + * ======================================================================== + */ + +#if __STDC__ +#include +#include +#endif + +#include +#include +#include +#include +#include + +#ifdef HAVE_XIDLE +#include +#endif + +#include "xscreensaver.h" + +#if defined(SVR4) || defined(SYSV) || defined(VMS) +# define srandom(i) srand((unsigned int)(i)) +#else +# ifndef __linux +extern void srandom P((int)); /* srand() is in stdlib.h... */ +# endif +#endif + +extern char *get_string_resource P((char *, char *)); +extern Bool get_boolean_resource P((char *, char *)); +extern int get_integer_resource P((char *, char *)); +extern unsigned int get_minutes_resource P((char *, char *)); +extern unsigned int get_seconds_resource P((char *, char *)); + +extern Visual *get_visual_resource P((Display *, char *, char *)); +extern int get_visual_depth P((Display *, Visual *)); + +extern void notice_events_timer P((XtPointer closure, void *timer)); +extern void cycle_timer P((void *junk1, XtPointer junk2)); +extern void activate_lock_timer P((void *junk1, XtPointer junk2)); +extern void sleep_until_idle P((Bool until_idle_p)); + +extern void ensure_no_screensaver_running P((void)); +extern void initialize_screensaver_window P((void)); +extern void disable_builtin_screensaver P((void)); + +extern void hack_environment P((void)); +extern void grab_keyboard_and_mouse P((void)); +extern void ungrab_keyboard_and_mouse P((void)); + +extern void save_argv P((int argc, char **argv)); + + +char *screensaver_version; +char *progname; +char *progclass; +XrmDatabase db; + +XtAppContext app; + +Display *dpy; +Screen *screen; +Visual *visual; +int visual_depth; + +Widget toplevel_shell; + +Time lock_timeout; + +extern Time timeout; +extern Time cycle; +#ifndef NO_LOCKING +extern Time passwd_timeout; +#endif +extern Time pointer_timeout; +extern Time notice_events_timeout; +extern XtIntervalId lock_id, cycle_id; + +Bool use_xidle; +Bool verbose_p; +Bool lock_p, locked_p; + +extern char **screenhacks; +extern int screenhacks_count; +extern char *shell; +extern int nice_inferior; +extern Window screensaver_window; +extern Cursor cursor; +extern Colormap cmap, cmap2; +extern Bool fade_p, unfade_p; +extern int fade_seconds, fade_ticks; +extern Bool install_cmap_p; +extern Bool locking_disabled_p; +extern char *nolock_reason; +extern Bool demo_mode_p; +extern Bool dbox_up_p; +extern int next_mode_p; + +static time_t initial_delay; + +extern Atom XA_VROOT, XA_XSETROOT_ID; +extern Atom XA_SCREENSAVER_VERSION, XA_SCREENSAVER_ID; + +static Atom XA_SCREENSAVER; +static Atom XA_ACTIVATE, XA_DEACTIVATE, XA_CYCLE, XA_NEXT, XA_PREV; +static Atom XA_EXIT, XA_RESTART, XA_DEMO, XA_LOCK; + +#ifdef NO_MOTIF /* kludge */ +Bool demo_mode_p = 0; +Bool dbox_up_p = 0; +#ifndef NO_LOCKING +Time passwd_timeout = 0; +#endif +#endif + + +#ifdef NO_DEMO_MODE +# define demo_mode() abort() +#else +extern void demo_mode P((void)); +#endif + +static XrmOptionDescRec options [] = { + { "-timeout", ".timeout", XrmoptionSepArg, 0 }, + { "-idelay", ".initialDelay",XrmoptionSepArg, 0 }, + { "-cycle", ".cycle", XrmoptionSepArg, 0 }, + { "-visual", ".visualID", XrmoptionSepArg, 0 }, + { "-lock-timeout", ".lockTimeout", XrmoptionSepArg, 0 }, + { "-verbose", ".verbose", XrmoptionNoArg, "on" }, + { "-silent", ".verbose", XrmoptionNoArg, "off" }, + { "-xidle", ".xidle", XrmoptionNoArg, "on" }, + { "-no-xidle", ".xidle", XrmoptionNoArg, "off" }, + { "-lock", ".lock", XrmoptionNoArg, "on" }, + { "-no-lock", ".lock", XrmoptionNoArg, "off" } +}; + +static char *defaults[] = { +#ifndef VMS +#include "XScreenSaver.ad.h" +#else +#include "XScreenSaver_ad.h" +#endif + 0 +}; + +static void +do_help P((void)) +{ + printf ("\ +xscreensaver %s, copyright (c) 1991-1994 by Jamie Zawinski .\n\ +The standard Xt command-line options are accepted; other options include:\n\ +\n\ + -timeout when the screensaver should activate\n\ + -cycle how long to let each hack run\n\ + -idelay how long to sleep before startup\n\ + -demo enter interactive demo mode on startup\n\ + -verbose be loud\n\ + -silent don't\n\ + -xidle use the XIdle server extension\n\ + -no-xidle don't\n\ + -lock require a password before deactivating\n\ + -no-lock don't\n\ + -lock-timeout grace period before locking; default 0\n\ + -help this message\n\ +\n\ +Use the `xscreensaver-command' program to control a running screensaver.\n\ +\n\ +The *programs, *colorPrograms, and *monoPrograms resources control which\n\ +graphics demos will be launched by the screensaver. See the man page for\n\ +more details.\n\n", + screensaver_version); + +#ifdef NO_LOCKING + printf("Support for locking was not enabled at compile-time.\n"); +#endif +#ifdef NO_DEMO_MODE + printf("Support for demo mode was not enabled at compile-time.\n"); +#endif +#ifndef HAVE_XIDLE + printf("Support for the XIdle extension was not enabled at compile-time.\n"); +#endif + + fflush (stdout); + exit (1); +} + + +static void +get_screenhacks P((void)) +{ + char *data[3]; + int i, hacks_size = 10; + + data[0] = get_string_resource ("programs", "Programs"); + data[1] = ((CellsOfScreen (screen) <= 2) + ? get_string_resource ("monoPrograms", "MonoPrograms") + : get_string_resource ("colorPrograms", "ColorPrograms")); + data[2] = 0; + if (! data[0]) data[0] = data[1], data[1] = 0; + + screenhacks = (char **) malloc (sizeof (char *) * hacks_size); + screenhacks_count = 0; + + for (i = 0; data[i]; i++) + { + int j = 0; + char *d = data [i]; + int size = strlen (d); + while (j < size) + { + int end, start = j; + if (d[j] == ' ' || d[j] == '\t' || d[j] == '\n' || d[j] == 0) + { + j++; + continue; + } + if (hacks_size <= screenhacks_count) + screenhacks = (char **) realloc (screenhacks, + (hacks_size = hacks_size * 2) * + sizeof (char *)); + screenhacks [screenhacks_count++] = d + j; + while (d[j] != 0 && d[j] != '\n') + j++; + end = j; + while (j > start && (d[j-1] == ' ' || d[j-1] == '\t')) + j--; + d[j] = 0; + j = end + 1; + } + } + + /* 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). + */ + for (i = 0; i < screenhacks_count; i++) + { + char *s = screenhacks [i]; + char *s2; + int L = strlen (s); + int j, k; + for (j = 0; j < L; j++) + { + switch (s[j]) + { + case '\'': case '"': case '`': case '\\': + goto DONE; + case '\t': + s[j] = ' '; + case ' ': + k = 0; + for (s2 = s+j+1; *s2 == ' ' || *s2 == '\t'; s2++) + k++; + if (k > 0) + for (s2 = s + j + 1; *s2; s2++) + s2 [0] = s2 [k]; + break; + } + } + DONE: + ; + } + + if (screenhacks_count) + { + /* Shrink down the screenhacks array to be only as big as it needs to. + This doesn't really matter at all. */ + screenhacks = (char **) + realloc (screenhacks, ((screenhacks_count + 1) * sizeof(char *))); + screenhacks [screenhacks_count] = 0; + } + else + { + free (screenhacks); + screenhacks = 0; + } +} + + +static void +get_resources P((void)) +{ + /* Note: we can't use the resource ".visual" because Xt is SO FUCKED. */ + visual = get_visual_resource (dpy, "visualID", "VisualID"); + timeout = 1000 * get_minutes_resource ("timeout", "Time"); + cycle = 1000 * get_minutes_resource ("cycle", "Time"); + lock_timeout = 1000 * get_minutes_resource ("lockTimeout", "Time"); + nice_inferior = get_integer_resource ("nice", "Nice"); + verbose_p = get_boolean_resource ("verbose", "Boolean"); + lock_p = get_boolean_resource ("lock", "Boolean"); + install_cmap_p = get_boolean_resource ("installColormap", "Boolean"); + fade_p = get_boolean_resource ("fade", "Boolean"); + unfade_p = get_boolean_resource ("unfade", "Boolean"); + fade_seconds = get_seconds_resource ("fadeSeconds", "Time"); + fade_ticks = get_integer_resource ("fadeTicks", "Integer"); + shell = get_string_resource ("bourneShell", "BourneShell"); + initial_delay = get_seconds_resource ("initialDelay", "Time"); + pointer_timeout = 1000 * get_seconds_resource ("pointerPollTime", "Time"); + notice_events_timeout = 1000 * get_seconds_resource ("windowCreationTimeout", + "Time"); +#ifndef NO_LOCKING + passwd_timeout = 1000 * get_seconds_resource ("passwdTimeout", "Time"); + if (passwd_timeout == 0) passwd_timeout = 30000; +#endif + if (timeout < 10000) timeout = 10000; + if (cycle != 0 && cycle < 2000) cycle = 2000; + if (pointer_timeout == 0) pointer_timeout = 5000; + if (notice_events_timeout == 0) notice_events_timeout = 10000; + if (fade_seconds == 0 || fade_ticks == 0) fade_p = False; + if (! fade_p) unfade_p = False; + + visual_depth = get_visual_depth (dpy, visual); + + if (visual_depth <= 1 || CellsOfScreen (screen) <= 2) + install_cmap_p = False; + +#ifdef NO_LOCKING + locking_disabled_p = True; + nolock_reason = "not compiled with locking support"; + if (lock_p) + { + lock_p = False; + fprintf (stderr, "%s: %snot compiled with support for locking.\n", + progname, (verbose_p ? "## " : "")); + } +#else /* ! NO_LOCKING */ + if (lock_p && locking_disabled_p) + { + fprintf (stderr, "%s: %slocking is disabled (%s).\n", progname, + (verbose_p ? "## " : ""), nolock_reason); + lock_p = False; + } +#endif /* ! NO_LOCKING */ + + /* don't set use_xidle unless it is explicitly specified */ + if (get_string_resource ("xidle", "Boolean")) + use_xidle = get_boolean_resource ("xidle", "Boolean"); + else +#ifdef HAVE_XIDLE /* pick a default */ + use_xidle = True; +#else + use_xidle = False; +#endif + get_screenhacks (); +} + +char * +timestring P((void)) +{ + long 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; +} + +#ifdef NO_SETUID +# define hack_uid() +# define hack_uid_warn() +#else /* !NO_SETUID */ +extern void hack_uid P((void)); +extern void hack_uid_warn P((void)); +#endif /* NO_SETUID */ + + +#ifndef NO_LOCKING +extern Bool unlock_p P((Widget)); +extern Bool lock_init P((void)); +#endif + +static void initialize P((int argc, char **argv)); +static void main_loop P((void)); + +#ifndef VMS +void +#else +int +#endif +main (argc, argv) + int argc; + char **argv; +{ + initialize (argc, argv); + main_loop (); +} + + +static void +#if __STDC__ +initialize_connection (int argc, char **argv) +#else +initialize_connection (argc, argv) + int argc; + char **argv; +#endif +{ + toplevel_shell = XtAppInitialize (&app, progclass, + options, XtNumber (options), + &argc, argv, defaults, 0, 0); + + dpy = XtDisplay (toplevel_shell); + screen = XtScreen (toplevel_shell); + db = XtDatabase (dpy); + XtGetApplicationNameAndClass (dpy, &progname, &progclass); + + if (argc == 2 && !strcmp (argv[1], "-help")) + do_help (); + else if (argc > 1) + { + fprintf (stderr, "%s: unknown option %s\n", progname, argv [1]); + exit (1); + } + get_resources (); + hack_uid_warn (); + hack_environment (); + XA_VROOT = XInternAtom (dpy, "__SWM_VROOT", False); + XA_SCREENSAVER = XInternAtom (dpy, "SCREENSAVER", False); + XA_SCREENSAVER_VERSION = XInternAtom (dpy, "_SCREENSAVER_VERSION", False); + XA_SCREENSAVER_ID = XInternAtom (dpy, "_SCREENSAVER_ID", False); + XA_XSETROOT_ID = XInternAtom (dpy, "_XSETROOT_ID", False); + XA_ACTIVATE = XInternAtom (dpy, "ACTIVATE", False); + XA_DEACTIVATE = XInternAtom (dpy, "DEACTIVATE", False); + XA_RESTART = XInternAtom (dpy, "RESTART", False); + XA_CYCLE = XInternAtom (dpy, "CYCLE", False); + XA_NEXT = XInternAtom (dpy, "NEXT", False); + XA_PREV = XInternAtom (dpy, "PREV", False); + XA_EXIT = XInternAtom (dpy, "EXIT", False); + XA_DEMO = XInternAtom (dpy, "DEMO", False); + XA_LOCK = XInternAtom (dpy, "LOCK", False); +} + +extern void init_sigchld P((void)); + +static void +initialize (argc, argv) + int argc; + char **argv; +{ + Bool initial_demo_mode_p = False; + screensaver_version = (char *) malloc (5); + memcpy (screensaver_version, screensaver_id + 17, 4); + screensaver_version [4] = 0; + progname = argv[0]; /* reset later; this is for the benefit of lock_init() */ + +#ifdef NO_LOCKING + locking_disabled_p = True; + nolock_reason = "not compiled with locking support"; +#else + locking_disabled_p = False; + if (! lock_init ()) /* before hack_uid() for proper permissions */ + { + locking_disabled_p = True; + nolock_reason = "error getting password"; + } +#endif + + hack_uid (); + progclass = "XScreenSaver"; + + /* remove -demo switch before saving argv */ + { + int i; + for (i = 1; i < argc; i++) + while (!strcmp ("-demo", argv [i])) + { + int j; + initial_demo_mode_p = True; + for (j = i; j < argc; j++) + argv [j] = argv [j+1]; + argv [j] = 0; + argc--; + if (argc <= i) break; + } + } + save_argv (argc, argv); + initialize_connection (argc, argv); + ensure_no_screensaver_running (); + + if (verbose_p) + printf ("\ +%s %s, copyright (c) 1991-1994 by Jamie Zawinski .\n\ + pid = %d.\n", progname, screensaver_version, getpid ()); + ensure_no_screensaver_running (); + + demo_mode_p = initial_demo_mode_p; + screensaver_window = 0; + cursor = 0; + initialize_screensaver_window (); + srandom ((int) time ((time_t *) 0)); + cycle_id = 0; + lock_id = 0; + locked_p = False; + + if (use_xidle) + { +#ifdef HAVE_XIDLE + int first_event, first_error; + if (! XidleQueryExtension (dpy, &first_event, &first_error)) + { + fprintf (stderr, + "%s: display %s does not support the XIdle extension.\n", + progname, DisplayString (dpy)); + use_xidle = 0; + } +#else + fprintf (stderr, "%s: not compiled with support for XIdle.\n", + progname); + use_xidle = 0; +#endif + } + + init_sigchld (); + + disable_builtin_screensaver (); + + if (initial_demo_mode_p) + /* If the user wants demo mode, don't wait around before doing it. */ + initial_delay = 0; + +#ifdef HAVE_XIDLE + if (! use_xidle) +#endif + { + if (initial_delay) + { + if (verbose_p) + { + printf ("%s: waiting for %d second%s...", progname, + initial_delay, (initial_delay == 1 ? "" : "s")); + fflush (stdout); + } + sleep (initial_delay); + if (verbose_p) + printf (" done.\n"); + } + if (verbose_p) + { + printf ("%s: selecting events on extant windows...", progname); + fflush (stdout); + } + notice_events_timer ((XtPointer) + RootWindowOfScreen (XtScreen (toplevel_shell)), + 0); + if (verbose_p) + printf (" done.\n"); + } +} + + +extern void suspend_screenhack P((Bool suspend_p)); + +static void +main_loop () +{ + while (1) + { + if (! demo_mode_p) + sleep_until_idle (True); + + if (demo_mode_p) + demo_mode (); + else + { + if (verbose_p) + printf ("%s: user is idle; waking up at %s.\n", progname, + timestring()); + blank_screen (); + spawn_screenhack (True); + if (cycle) + cycle_id = XtAppAddTimeOut (app, cycle, (XtPointer)cycle_timer, 0); + +#ifndef NO_LOCKING + if (lock_p && lock_timeout == 0) + locked_p = True; + if (lock_p && !locked_p) + /* locked_p might be true already because of ClientMessage */ + lock_id = XtAppAddTimeOut (app,lock_timeout, + (XtPointer)activate_lock_timer,0); +#endif + + PASSWD_INVALID: + + sleep_until_idle (False); /* until not idle */ + +#ifndef NO_LOCKING + if (locked_p) + { + Bool val; + if (locking_disabled_p) abort (); + dbox_up_p = True; + + /* We used to ungrab the keyboard here, before calling unlock_p() + to pop up the dialog box. This left the keyboard ungrabbed + for a small window, during an insecure state. Bennett Todd + was seeing the bahavior that, when the load was high, he could + actually get characters through to a shell under the saver + window (he accidentally typed his password there...) + + So the ungrab has been moved down into pop_passwd_dialog() + just after the server is grabbed, closing this window + entirely. + */ + /* ungrab_keyboard_and_mouse (); */ + + suspend_screenhack (True); + XUndefineCursor (dpy, screensaver_window); + if (verbose_p) + printf ("%s: prompting for password.\n", progname); + val = unlock_p (toplevel_shell); + if (verbose_p && val == False) + printf ("%s: password incorrect!\n", progname); + dbox_up_p = False; + XDefineCursor (dpy, screensaver_window, cursor); + suspend_screenhack (False); + + /* I think this grab is now redundant, but it shouldn't hurt. */ + grab_keyboard_and_mouse (); + + if (! val) + goto PASSWD_INVALID; + locked_p = False; + } +#endif + unblank_screen (); + kill_screenhack (); + if (cycle_id) + { + XtRemoveTimeOut (cycle_id); + cycle_id = 0; + } +#ifndef NO_LOCKING + if (lock_id) + { + XtRemoveTimeOut (lock_id); + lock_id = 0; + } +#endif + if (verbose_p) + printf ("%s: user is active; going to sleep at %s.\n", progname, + timestring ()); + } + } +} + + + +Bool +handle_clientmessage (event, until_idle_p) + XEvent *event; + Bool until_idle_p; +{ + Atom type; + if (event->xclient.message_type != XA_SCREENSAVER) + { + char *str; + str = XGetAtomName (dpy, event->xclient.message_type); + fprintf (stderr, "%s: %sunrecognised ClientMessage type %s received\n", + progname, (verbose_p ? "## " : ""), + (str ? str : "(null)")); + if (str) XFree (str); + } + if (event->xclient.format != 32) + { + fprintf (stderr, "%s: %sClientMessage of format %d received, not 32\n", + progname, (verbose_p ? "## " : ""), event->xclient.format); + } + type = event->xclient.data.l[0]; + if (type == XA_ACTIVATE) + { + if (until_idle_p) + { + if (verbose_p) + printf ("%s: ACTIVATE ClientMessage received.\n", progname); + return True; + } + fprintf (stderr, + "%s: %sClientMessage ACTIVATE received while already active.\n", + progname, (verbose_p ? "## " : "")); + } + else if (type == XA_DEACTIVATE) + { + if (! until_idle_p) + { + if (verbose_p) + printf ("%s: DEACTIVATE ClientMessage received.\n", progname); + return True; + } + fprintf (stderr, + "%s: %sClientMessage DEACTIVATE received while inactive.\n", + progname, (verbose_p ? "## " : "")); + } + else if (type == XA_CYCLE) + { + if (! until_idle_p) + { + if (verbose_p) + printf ("%s: CYCLE ClientMessage received.\n", progname); + if (cycle_id) + XtRemoveTimeOut (cycle_id); + cycle_id = 0; + cycle_timer (0, 0); + return False; + } + fprintf (stderr, + "%s: %sClientMessage CYCLE received while inactive.\n", + progname, (verbose_p ? "## " : "")); + } + else if (type == XA_NEXT || type == XA_PREV) + { + if (verbose_p) + printf ("%s: %s ClientMessage received.\n", progname, + (type == XA_NEXT ? "NEXT" : "PREV")); + next_mode_p = 1 + (type == XA_PREV); + + if (! until_idle_p) + { + if (cycle_id) + XtRemoveTimeOut (cycle_id); + cycle_id = 0; + cycle_timer (0, 0); + } + else + return True; + } + else if (type == XA_EXIT) + { + /* Ignore EXIT message if the screen is locked. */ + if (until_idle_p || !locked_p) + { + if (verbose_p) + printf ("%s: EXIT ClientMessage received.\n", progname); + if (! until_idle_p) + { + unblank_screen (); + kill_screenhack (); + XSync (dpy, False); + } + exit (0); + } + else + fprintf (stderr, "%s: %sEXIT ClientMessage received while locked.\n", + progname, (verbose_p ? "## " : "")); + } + 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 || !locked_p) + { + if (verbose_p) + printf ("%s: RESTART ClientMessage received.\n", progname); + if (! until_idle_p) + { + unblank_screen (); + kill_screenhack (); + XSync (dpy, False); + } + restart_process (); + } + else + fprintf(stderr, "%s: %sRESTART ClientMessage received while locked.\n", + progname, (verbose_p ? "## " : "")); + } + else if (type == XA_DEMO) + { +#ifdef NO_DEMO_MODE + fprintf (stderr, + "%s: %snot compiled with support for DEMO mode\n", + progname, (verbose_p ? "## " : "")); +#else + if (until_idle_p) + { + if (verbose_p) + printf ("%s: DEMO ClientMessage received.\n", progname); + demo_mode_p = True; + return True; + } + fprintf (stderr, + "%s: %sDEMO ClientMessage received while active.\n", + progname, (verbose_p ? "## " : "")); +#endif + } + else if (type == XA_LOCK) + { +#ifdef NO_LOCKING + fprintf (stderr, "%s: %snot compiled with support for LOCK mode\n", + progname, (verbose_p ? "## " : "")); +#else + if (locking_disabled_p) + fprintf (stderr, + "%s: %sLOCK ClientMessage received, but locking is disabled.\n", + progname, (verbose_p ? "## " : "")); + else if (locked_p) + fprintf (stderr, + "%s: %sLOCK ClientMessage received while already locked.\n", + progname, (verbose_p ? "## " : "")); + else + { + locked_p = True; + if (verbose_p) + printf ("%s: LOCK ClientMessage received;%s locking.\n", + progname, until_idle_p ? " activating and" : ""); + + if (lock_id) /* we're doing it now, so lose the timeout */ + { + XtRemoveTimeOut (lock_id); + lock_id = 0; + } + + if (until_idle_p) + return True; + } +#endif + } + else + { + char *str; + str = XGetAtomName (dpy, type); + if (str) + fprintf (stderr, + "%s: %sunrecognised screensaver ClientMessage %s received\n", + progname, (verbose_p ? "## " : ""), str); + else + fprintf (stderr, + "%s: %sunrecognised screensaver ClientMessage 0x%x received\n", + progname, (verbose_p ? "## " : ""), + event->xclient.data.l[0]); + if (str) XFree (str); + } + return False; +} diff --git a/driver/xscreensaver.dat b/driver/xscreensaver.dat new file mode 100755 index 00000000..d68c3bc9 --- /dev/null +++ b/driver/xscreensaver.dat @@ -0,0 +1,152 @@ +! app-defaults file for XScreenSaver by Jamie Zawinski. + +*timeout: 10 +*cycle: 10 +*lockTimeout: 0 +*passwdTimeout: 30 +*nice: 10 +*lock: False +*verbose: False +*fade: True +*unfade: False +*fadeSeconds: 1 +*fadeTicks: 75 + +! Turning on "installColormap" interacts erratically with twm and tvtwm, +! but seems to work fine with mwm and olwm. Try it and see. +! +*installColormap: False + +! Programs on this list apply all the time. +*programs: qix -root \n\ + qix -root -solid -delay 0 -segments 100 \n\ + qix -root -linear -count 10 -size 100 -segments 200 \n\ + attraction -root -mode balls \n\ + attraction -root -mode lines -points 3 -segments 200 \n\ + attraction -root -mode splines -segments 300 \n\ + attraction -root -mode lines -radius 300 \ + -orbit -vmult 0.5 \n\ + pyro -root \n\ + helix -root \n\ + rorschach -root -offset 7 \n\ + hopalong -root \n\ + greynetic -root -delay 1000 \n\ + xroger -root \n\ + imsmap -root \n\ + slidescreen -root \n\ + decayscreen -root \n\ + hypercube -root \n\ + halo -root \n\ + maze -root \n\ + flame -root \n + +! Programs on this list are run only for monochrome screens. +*monoPrograms: qix -root -linear -count 5 -size 200 -spread 30 \ + -segments 75 -solid -xor \n\ + rocks -root \n\ + noseguy -root \n + +! Programs on this list are run only for color (really, non-mono) screens. +*colorPrograms: qix -root -count 4 -solid -transparent \n\ + qix -root -count 5 -solid -transparent -linear \ + -segments 250 -size 100 \n\ + attraction -root -mode polygons \n\ + attraction -root -mode filled-splines -segments 0 \n\ + attraction -root -glow -points 10 \n\ + rocks -root -fg darksalmon \n\ + noseguy -root -fg yellow -bg gray30 \n + + +! Some other screenhacks that you might want to track down: +! +! xdaliclock -root -builtin2 \n\ +! xswarm -r 2>&- \n\ +! xwave -root \n\ +! xbouncebits ... \n\ +! ico -r \n\ +! xsplinefun \n\ +! kaleid -root \n\ +! xfishtank -c black -d -r 2 \n\ + + +! Resources for the dialog boxes: +! +*fontList: *-helvetica-medium-r-*-*-*-120-*-*-*-iso8859-1 +*demoDialog*label1.fontList: *-helvetica-medium-r-*-*-*-140-*-*-*-iso8859-1 +*passwdDialog*fontList: *-helvetica-medium-r-*-*-*-140-*-*-*-iso8859-1 +*XmList.fontList: *-courier-medium-r-*-*-*-120-*-*-*-iso8859-1 +*XmTextField.fontList: *-courier-medium-r-*-*-*-120-*-*-*-iso8859-1 +*passwdDialog.passwdText.fontList: *-courier-medium-r-*-*-*-120-*-*-*-iso8859-1 + +*XmDialogShell*foreground: black +*XmDialogShell*background: gray90 +*XmDialogShell*XmTextField.foreground: black +*XmDialogShell*XmTextField.background: white +*XmDialogShell*demoList.foreground: black +*XmDialogShell*demoList.background: white +*XmDialogShell*rogerLabel.foreground: red3 +*XmDialogShell*rogerLabel.background: white + +*XmDialogShell.title: XScreenSaver +*allowShellResize: True +*autoUnmanage: False + +! This doesn't work. Motif ignores it if there is a scroll-list! +*demoDialog.maxWidth: 600 + +*label1.labelString: XScreenSaver %s +*label2.labelString: Copyright © 1991-1994 by Jamie Zawinski +*demoList.visibleItemCount: 10 +*demoList.automaticSelection: True +*next.labelString: Run Next +*prev.labelString: Run Previous +*edit.labelString: Edit Parameters +*done.labelString: Exit Demo Mode +*restart.labelString: Reinitialize + +*resourcesLabel.labelString: XScreenSaver Parameters + +! *timeoutLabel.labelString: Timeout Minutes +! *cycleLabel.labelString: Cycle Seconds +! *fadeSecondsLabel.labelString:Fade Seconds +! *fadeTicksLabel.labelString: Fade Ticks +! *lockLabel.labelString: Lock Timeout +! *passwdLabel.labelString: Password Timeout +! *resourcesForm*XmTextField.columns: 5 + +*timeoutLabel.labelString: Saver Timeout +*cycleLabel.labelString: Cycle Timeout +*fadeSecondsLabel.labelString: Fade Duration +*fadeTicksLabel.labelString: Fade Ticks +*lockLabel.labelString: Lock Timeout +*passwdLabel.labelString: Password Timeout +*resourcesForm*XmTextField.columns: 8 + +*verboseToggle.labelString: Verbose +*cmapToggle.labelString: Install Colormap +*fadeToggle.labelString: Fade Colormap +*unfadeToggle.labelString: Unfade Colormap +*lockToggle.labelString: Require Password +*resourcesDone.labelString: Done +*resourcesCancel.labelString: Cancel + +*passwdDialog.title: Password +*passwdLabel1.labelString: XScreenSaver %s +*passwdLabel2.labelString: This display is locked. +*passwdLabel3.labelString: Please type %s's password to unlock it. +*passwdDone.labelString: Done +*passwdCancel.labelString: Cancel + +*passwdLabel1.alignment: ALIGNMENT_BEGINNING +*passwdLabel2.alignment: ALIGNMENT_BEGINNING +*passwdLabel3.alignment: ALIGNMENT_BEGINNING +*rogerLabel.width: 150 + +! You probably won't need to change these. They aren't consulted if the +! XIdle extension is being used. +! +*pointerPollTime: 5 +*initialDelay: 30 +*windowCreationTimeout: 30 + +*bourneShell: /bin/sh diff --git a/driver/xscreensaver.exe_axp b/driver/xscreensaver.exe_axp new file mode 100755 index 0000000000000000000000000000000000000000..e5db61632f10a3fe6b2aaf4df056bdab593ccd3c GIT binary patch literal 114176 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 literal 0 HcmV?d00001 diff --git a/driver/xscreensaver.exe_vax b/driver/xscreensaver.exe_vax new file mode 100755 index 0000000000000000000000000000000000000000..9dc4dcdd088b1eecf8cabcb3c917c3803774a0fd GIT binary patch literal 60928 zcmeFa3w%`7)i-?3%n*_gB$){iEW)6m5lKu?Dk37cC}4oe%;W~CB$JsW1CxunKu}6; z)u%pQ3Rtvg=|Dq7TQiYbv_4)C5)icxoYWb_){~)LTB_KCSI}I}`(JyXGnqux`hMT< zeZTMb6FqbGT6^90+G}6WIXioVEMcKgD$u{I=~*)jq9CZ+Kf*mG2;wgb?YB}|xZWUC zMf!iTp%X+g|EjcfatuySClxss*mH80Ip!7Q*kkgCCQSv|nOQN&j{VTuvrQP5H6tVY zih+z|;Rga~zZ;hkSCVi*7?1nCxRM2fAmdJX6BxWuh~R!3E-S8N!6aM+=0uYqxB({# zslqAsI^ylSSQrhAAWY(7Nrx$AVa|fW$wfw+TN@TXQgOc8b&h-Q*z33)l0lML8l<&KLI!DiElf_X&?w8CGAI*b)UdPX{O z7UbJ=G&L8o`X@EqJhjv^Ok9@=8I9g*Pi<49kf|p!yl#)LY`u`_ zt?@Q`%X|wNlu^FE+~*N8`7L9ux1p)bCuH*b;)OznueN;6fG~obn&b?alHxNc*{Mr5*Q;<&q_$RzRU;Xr)q}I(&36SHwY7)^-aiZs^OqU zOMt^uUR&dCfMQ`P!A@`a8bDXg5T>Fg8q0jX1+~7~`s%W}Syqj$uD-UizO1@oR>IBR zW@|=$ZEa%$`&UwvFo3dVG}QXMZfgdsCu~X3Egqtc;hYXm;wx)xtS>8X^w!pJ{nm`?TDQmQg1HT3$~VxEo(5}1U9Fc)x#B+; z-cYBpM$2&pmE+r0)t9-wO;E*3osf`GTkrBVS~J#GH~AW^S(!6*gX`AU*A8`OmB;s0 zAJ^B`He$0ubW9dG#qB9CTYt`+s`YiA`tl~1Cx(Ohu?kiX#Z{Lf z3Wk_c;VY{if)u7!*Vfe9z8ad=jKPsLLklc~5>j>bo-#M8hCG)r5TREQ6%XI$+Ir0` z^=N2_oWb#4gD#`8Y5ia{S~E48b6UgW`^u<%1aeJ7U0FR^hNdUls`SP%U`!0LUM?~` z#`5ViVpdJXd>%J^H8lRet}RyjYS%?uShn8QW87!8W>i#K ztv+vMRin$-b9<_57h)Kxt(@vBb9sE(nS(Wale{a> zA&+<2n#94Pn6ckgUQsobc8F1fianKj&U&w>{y!>jQMJ?4+<3j$<8yzF(C;QMw!E3z zcm)M9vcH?WqH69t2ddGB+OGFh)?;9BV<>a^$}q4_9ZcZ@E=oa>ay16Y!6bu=JRtC# z@?wc&Wv{F9Hew(hESZ8wtDbKW8>ReKnXC)WrBH+q2c*_}+*b@$A4B?WVljPc^wE5v z$iXII4w{4sQ!#ATu4AsYduY^+P8iCX8f)`ws>^E1Dha7iDh66hW_4L}q1WA5h1?%z z!RK1*VK+x(y|<=vh&Jn#290WZW-OI;K`jPA>JhBJvu0m?b#?}Rt~|%oaCYp}a1L*} z%=?(-d0jrw;zm#P0-8k3N}zdF)a6u`>N4~Q4v){n<_@#8X;BSDYOE~@3HGKM>oTA* z`KtGV z5MPfuq;+9aJsgc$@4%Gu>qyyr69Iv-^&BJ#xxf#o<{is9=xj7YuB~?ukiwnZRo7$k ziuO9t-C<~Ms;#B#-8={BFItifY# z#JmyR$0ZF`CY|cLvDVsDLlUfLgt~~Ya{;&M+sn@aEIYFd^OG7{vCK-Cm%I3eWlM9G zIakfkxnc3LWs8^Hpetj<)4vPx72ir6)1$A`I@jzO=*!rm#Zzyq_4%mP&a$#q+Q9mk zuMM$;cGs?3fSE0|!9mML7urOPhxPR6mM?dCYc6l75(cfvr!-8nmPfnd^zuu;LuZ_s z=&bTs(T~-*%TPH*jgVB0(ZkK=;MUqYGN{3d$*#4myxddQ=y6|Tt!=ErVnfgK)|C62 zuw+e4q}h$WRJYEq_SQ5tdK%^=B&@6Q)L6k|jon9RsH$!9xgoXDySA*+!Vx)}OmnHqc^Po34}p&^;dS>M=H$N6ZO z!2pS9L1D18^sx2mT91`7tZa3P#p)myZK)0}tb}~EO>QoUZ#e*qLF1A}j$>O5Ks8Y- zK+%g9V+X?8;HifUD~2g-r@*tER^N;mEP>hxF!fr;Q8v(ow9>fY4CXux*-=3nSBxcu zIY+Hv%2n>MVp->{b?g2iQV6>SE~qGDYh5lEQ@T2s(n$S4wWpy0bBn~pe63`qvB8Kb zEeoGZtlFLfwRh}SG}hPptYuVbHBb;62$_j21Tkv!J&I}8!Ar4eRz#z9&|1+N9V()t zG0Q8jN<^9JkU(dJDr~T>!!ig(v---KYRaoTDCYX1VVG&PIy}6F5cP0zrN@d;Nvx)D zaeEreyuJolC^(wx>T2s7DKDlvqxEQASJq&ysYQI&lwm@Hux1UZ4tr6|^_hu+UOquz zV+yg$Utwv?T38sg78Tey6y=KUj1{o0GHj7)(*=S04T0~Yu_V=|)|c=++JX|6(T^6$ z!u;A=bksEhkw$?byGT(yO(UWJ9}=Tr%oKy`A_Si)EJoA9=7bQ_lYuSTs|ka)1DWAN zI!!L{oP8wE;-kc%qE5k%*pvn>o@va&@WpE;eM-Zns1D(xi>w0Q57eD77^3B9oj`J$ zYSz@$uB*{HJcvycR;_XrE?re%U%uQa#6G`R6$7lo0}aRG<;#RYNYvM=B1evsSXTj< zx4^l$V4gEaSeO${Vk_G@&+Zf!6fell5td<}U9j163WS`Z#ZJ&IT`uG@D)T zXH2mi=v&cqH&|(N_Zl=o>btB>b=3Hvfm@1ZSB*hTvp{!}o~chlF^1LF*JF(_iF4_a zSqBT*mDqc%q^^t)C$S2qG&I$Kv$nFv+W==Q@OfeUQr=1G^B;6rTxN=gh05vtT zg#a~-nEo}k+}|ic*Q-U|SH1QP+OI*KYJEHD(b0K@iO%6xw$zDtqYdh?Kuma zxy5*xIi+bzIeunM$(qi80MIi|KCbb#od#TwzCjpRY-m`%{D}po#{ySq0IjG6EKe|G zT&1CC;iVdnVpUH77n}hIV%)DR#!R7@Vq*~-DURa*i zq%nJ$FqVpu6@{572629tB%v&!O>_9dT^QIF5ZLU5tMml9vGpG4Tj5Um%4U(D%b!O_a ztz@UxwwY~pu&v(HNK;UEbauyQQ{}X?2WMC@4p*b%>es{PZp=eGxzLH8sD>WCd74ql4FctV728;gC1qL7dTYb_Y8M_;mE%!L&6)=3waI2WrhEC*<%%$66-4v$b)U+IH3#_94_YSX-hiygMydBxXG!OV))A)8U5 zj5m7LWA_uT#FPphRuP}%xLvi)m@d(34;wq=RkpCkb4rv4{VIuI0A)p&Rz#yuuBe@| z*tsUQ3#R4=cjN62zKRrFh-v|W-RLc+jeaf37CAyA9&_^)Wi^zS!Mk-0o+fuK$8t~e zv~>#HfUc6t;A^H7nHcToZ-Fg*b!4TW)k=U0(vWPPinyUJ`zx8K?{XiegH|?k1WDHP zW&{o`CF`(PZk;mSjR`b+s6OQi3a9*KH!fRVxQso{5*D&}SU~%V(*zqcUjuGHsT@?Q zX;!O1&-6JSfP*l-lZPFd;Q{POMM$ z^rbjLLf_h>royM%%tx0dS}QPn)|(RdjMmPlG_ds)MTWMg;cD{wFwY*mv`;9mZL*eQ zVO{UZ;7eod`tb$Bh0XK;oI;XnN|{dK#xiR<1uw1M zcu^3y*sZ4~jMk`6z++ceWIA>@8rRRVCMHZl1x~^4741o)J^`T=@lJ{dFGw)F zYd!X@$|`7IXo@~%=Nj3zKqDFm%=RFzu$xrovoZrU$5qfXFJ@>n+qj@$i>^0G2z5}k z^pwRKvxtluN-dPOi!dGcS=TbbRA?q5k=vkkXnf0xZ^=#5NV)8R$)~<@ZNRoD-m2mJ z(P$|zYs6-nCXRQ;j>R`D%C`x)EnbF|?cy8q^0DM3FgKTOc)^V4(z^3s3VNLyYgH|} zK!J^70_HSz>(HB0f57@_EY{G+y8b4P1q$OdDP!vH8IcOC|tM-o6h#)81erJD~-p?<}J>8#x42$SXc&di*m?`pVXQ4U4a*T}-yk%|BC zIEsb`VZEn8zzZ{&wb2VxHMF0BhKjAoCe%On_gs7zi?5Pd|BZI54-YYPXtuP^i@|yj zsjuQ(wAKn=ZCPUsAt^;yhRF-w{lMO5Ira7|l30#Dv(X|XHh+HfQMW*b!S?C;FO6nH z;V8*KCZz_7X=i{1! zYX+`GxE#33aNUe+Bd+^!{RUSXu7kK%#tFhnT#MobVH>WKxMn5@!ds-J&5ZGTrc7JJFekL(2J`c*8{ko#PvF^Gq}#jTgY>8HQ?Hg zs}t90Txoc>c@8cwu1&c9h)c$08YKvq<0{5=3$7iw_Tl;$uJL#|d=;)A6d;N+27NC?}6_<@Vy6g55#^_rQ^Q8fA4|+)B_Yh|0(VFbl-d6 z|6LDsm~QebpDpNDOJt>>UsWToJvgezpbo!B5F)P)xAcf=@7-9_s}} ziM^vblEFU?j0Jw>Jlu->%A=50EG6bgUa?yuuPnCsl^51wYoW(bF4+R7CFPwyRkcek z>GrOc@rKmo$SYMKTWMkW_LTD?uiOr}NrNSO;L}jxY&dY*94`ev4V(@IK5aJSZ-fcU zVS;3<3RQ$wgqI-Sn0-j_tJea%GGv#4amWsklPWA-*dlG zC0j}oED2jm5-p|&O3cHK*;DGouKbGBQTy}rNsC<7V^{+nQbozJ3aQF=!0yN`ePDjM z#R3tDmXXKo1jG?w{zS6dy6n!;mvoBuk}bK=5QpCc^Vm1+giem46+&D7wRL{^0nvuM z!Zc&HS3SlGVKHXUS3`y2id19v>#()TF5TdA%1)Hyj{m0O=7${Nd}Ou>+ZMRNoB-wr z1xrDf-HOz`0*p9nvkt#exKmhwi~qMkNJ$XKQvF;PwsqMyl^}-3l^x{?(^#RH{Wn%f zSsJ#1?jLm+iYFn4&@ziI!ca}Z1Gtw!?ySm%;z1;EVA+vXnKswh(gk+w1G6z@i_8!Aw+-pV;-W1Hl4)&nyoU@ z@icPwP!wt?Po(28P|wAnlr~6=baVmz8qi7t;vABH&#>LV9)n~b-u7^?;8wDk$`6q7 z50WC;)!YndJIGi(8{O9*>aBg1ZBLTZ6^aj~tYNXH!j8wu13>y32m0P4SEP*stRCxL2> zK~htmMEr zOFX}u4WZTH)#kX6VuW$BlEQw+f&ym0jF)KOR1vr?r3W~1bc&?-ktmVc(o4G9(20O^ z7!ct#mTSYx2&61CWaSdVC@&B+yu0JgR7c9N?vCTB=oMsT0kDydKc&iQ-hZKE8>X6Z z3!ysRK@nvXQAxmK_OQ(|F4FN4P#+Mg1t?fj3Eq_9Vo13Oi5}tT7hmG6gO2!{Wa=RQ zaVOCP&PD=f0lmeb5;;*WL8rP85JVcbmP#cy;xXMcMr{I8Zi|=OOg)C91_R_3o3?Ed zZKe&B?^ixN%i=o`H^ldib68-Xtms!A8#YEdPY6<5Jo<-7n@JuK*_9EyQ(EFAr^r$X=dE@u{p!k4u{;d^yNTD*6Q9Fc(}9#V8)an|(mh7i zM>)!a0PI^^OxpSxl{-g|k{3QDMA*7O8JtQ=uhf{oe!b8hn3+l z$YSjg)SG?=0-LNn3!7!-Ui?N59~zA?@gM`_tEqP=R^IuPiuw?;L&_6KBPY3xLI!Sg zFcC!OZ zh8{ObkDDBpqOh`p_^;@4i00wlhkrE2iGJqr$}wn_)YH5P6_LZU$H3$#Ax>7`!Y_>Z z9RZJ||;%1WgL(sDMS`zw{r#?|thhOQ&4MXS8aYLjX#|^`36K+nw@)z7N z)-J~lBX2WAq4yby8;0DMu0|&$hRe+f)T|W?+Ge=iG6FsdrJ;rYBW%MEFpK&AjoYXL z(!0YTgY@q32|&C%luKj`INQd+<-Y(Df`+?M780I$J&4?vF=!^rUvC7`Ew6?vf4Pz5 zR)&>}VW4Grc#YX8i4|dGEP>~TD^Q7G$bcW@HH^W<7^=u9#kCYND==T&2`|YXlK@28 zX}AxK<4(X#^Ip`qtXvO)h&v$ReJ@B*w2@@(^Hd!t$mPls&_L|t3&^Gt5Tt}l%#7$w zB6e4<#kA&aQ?k;EMEe=8-$e5tWt^awTeW z8)hq^%5W7xnl1e|fmLA-n5z1j-&a8>{QhYq@G0{18KnFDDnPM*|Cszf2FUEo`Z530 z=3F;_#A<#cj6`sd-9>(NGN=$0hpu9ykgK#`Es)wwwyvG2yW=f+^3GIQDFYu0J(c;} zVHqYl@@d@7ADb`d!~TTsj=ZtXl;L4pcZY2(wGqrKE*LAX!5I7t@Pr+f1U7B|3}xc7 z)2x;$^3F6c$9H#Z9_vVn6T3S$jiqrMyd|91PWswR`O+ifi@S<83Pp(~r_LnB(jaFiD8j2z;?=07P8_opTD@T-8t~~w zNHRm=uV*2i`Rjjl`FC>pHm6x$w=iQfv+D->& z$j0am$81=JC?6~631Qy_QFE>wFsBUWWZw)$RAz8l&1;Dkv$tP^%{)&p(@84RYnYZY zNr+uvDU01#&@!l_$^kVfCV+xP=|f0lkAqwYfFEa%<9@tmoaV>GamDrYpv}HT z)0=Ky0=<^;x;{VYI{^yx86L>i!U6U5F~qU@`bd|zpUZ0}c~doc)3DTg0{zdAz-ze# zQZYxp@_aT&z2bbW{GV&(C%%u-X2q~FmB`b%-Sr@+ws5mfKl6O%uj`4vgXm$~7ayWx zD=m}Ac=)(gXlspaROpvT_^c8q~$N zpy)QIC0%wxJYr3OWFBk()@AP{dxoh`gEZx0`4RFR{FC(q%|Dm_Kr81bobDH(3p>#o zXu10tX{T8-nayhW0H~}T+>I5r6AeEO`;-nILib<5*cFA7C3@HJbjI|!@pyYX+ z!=z@A4JK~Gdr*!g=q%hy!afwr2g;pb3cCQf0Q?d_$Q61`=i%i`VQWZxSV;z_nFgjp zNJYrrF_-G-;}1Aid9MW4*_F2ev(aPNbzDx;O_*BeNo`5?PO&A~CeJOCm4_e-RrV~F zg#09vx4(CzPQ z9{vnIN1-o-3&YB04XfO~l6m+xz|6zDu4RSM%2EwyYtG+wu;oLjURehw@B|I+IGBg{Qf=l=%GEJ`7ZSo@&mR9Ly0 zvCFm|@#s$YY5O|!D&3kqx6>(@3gOUsV>M&RyJl;De@MZ9=UcdS!JRdv(@NDqiUfB>q z7D+Oy0osjdOTuoIU`P>uC*+9P+h~ufm-e1!7uiF3*vgU&_OuaQcH8+Qj^$CGdaK=r zg+`uZcHm3r0f%#dD3OQ~K@=x4n*ENvPG_F&jICgH;Q&<oHDf7Uq_ptk`T6`eRZL} zW*69?B5!{lRZy4B{)6G2d3NUHd}N$u8HKSK`F^zze5mx<1uPssA?QT!?0iInU;P(B zCwnC^cnVO2pwqpf;HSN^i3f@afpS|tLQaDzaOwzV!8ji&%=reopv9EMyP#WG5?#c^EQXaoO%||!{3EjBk^b($r@`O#%VGp+ zOu4ZZyqS8Qvk|w9DYa2`0c2D0Hz{GGZpNU#$@YxQDUnw2ebx`mJ;0=l7G>p2r~(l~ z8`TX!M_MyAA~Qsw`TNzs0}XwWeX#0{q=Nd@kLr+M{a^#Jw8a<51>HvzzO>8s9qMCX zrp=LDWI1|F<#GXGA7oepg~-ugeX&FRZ$cOQ7^C)88)9|vF|%0Y>TvB4yzsL9}Vhw6b7Y6Z)vBk z8`VmMqf(AQ;(*D~79V~--W)`}^2NJwo}%Cv+qXV!qEf#U?e`uiwTwlt+m?)u&!|lD zkl4I&CMoavB%+&5<1z20o~q?4*+im<>CcBfPDyk;;IgDbhyxZF71@n$*EY^5+1#dB z{-#*|v;qFmV0M2Dd)S8Yg4W!Ja%Xp=p;jKym zyH8dwCVWS_pxg`u>dW8W1_zCIkV_~em8MbfCE96c{|@!XWtGL@83hMPZyC)B3P^_2X)F+;=Z2Iozih>-A7mVF|ipe<3?S;cp@IhaHDi$ zE8&K5IvqEea34`cDMp<)op3V4-N@R$i`+CqUnVdWy=EZOLy18uV60^nDjKI;37 z{h-uJYLv7hqOXZj)x)(-LSZl7OkmFg{<&bLv@^Fq68AeeZb|kBooaq zznLagQW8MX60hBpB;`$l(Ov*E#_ZAC5V z-GOa|k_(-GaR^UU$*l{ao_zP!GVafF=y~vK39p|LUOy#T{gl|Kew6x$N&Gw?n!@R{+3&kBD?1!{CkYN5xk<|MY$zSR{jPE>j}*LN_vbwOypX|%ZmT6 z)K@deDk~=jpvlN1c9w?$Synz^nXh5^!CXBPd9pH@Q7C<t-gBy0kdvL=H$A%kr%FA#o!oJ(JxMP`pH@59DClRr!t1hO|?O(vl%2*O^I9l-u zJ-NspEBe*@V7t?=cHri~TBrh#*}}FRf$g#vv!PO&)CRWGVtJBH_#69ggRntMaajL# zpA)O+(%mU!ZxyiCZo!{F2-~vn7qDdkO)yb7sjAsO102{BQ7)ejdsjohNu3P+DQmEo zfuR_!?}F3bb*Vz*bq6g!2HPIp7Kap+|(!VYX|Np2Kb;o+O&snjox%k82w{ z<4 zLQEVf?L$ypF^jD!UjsUyPw@Nj$R>nEStR&Y9~O)lUrp-2Tu^FL{Gie@T1U#tCVJOgoYcG+E z`%3)5Py5=N{ptmTZ}tbz_O&;HzR@4-?Q5^|tD^~D=MM_~?LMh}(LSF)XzDNas~;hr zy#8Q({|d>t+8<2nUx~c};MVwq$^Au=393{3F-v$8xJrL8t=}Oj>yN2w`NNy$wwwIH z@%;sUbuTh2fT-~Yt^IaMbotc)P{GOlk|~(pFDFv8%1Q$GSeex|$ld1*p_pnFC96;b zw_h!#bSca(@vCl1H%rR#u&SaM>LP;cK+||MGAUrx!%2i zxZbCcs*on=dX@7*z*RRRM^oKINlkS%r8U(zQ@UAd&!zGf5uoX{A9{cbhFOWf*jEQgPyL~+8ecAvXy$!F(@$gc8{S4HE3NE345HekQ8@F z?^YSZdwAS=E{12K45fn^_I?dRXOy92FvIO%!w`xx6b)vue+|PsQHHv~43oZw;ln6{ zj}NQli7$ZktL=D5!`-U9*fmfa!$k5dy&x8l2C$=|*gwZ$Cq}VNF%mMO*jU<`QS3*M z5L;m$#EIsAeJCL-=YhemCJk7b4IP6^ec8D=mq%3{J35r*EF$b2%2q^KKKTmEp>wl% zqAd5KK!Xjt|J*F~QI@Be7CoAO%j$s5Yo7LzxWZ);56P`*22@`#U@Kt6IC9vGZ}`75w0 z@uM5SxI6=-7?&UGJF-`hjNN+$f3U6Z$Q}?*L{2vn!99IP+5`!&=^?$h@5p1wyNvRX z2tLzyq*ajGo4Z>9Jl}_h0;do=E`M-;pEHDs#lb!d<$njN!XJFOuTT;(-oMs|S97|6 z!#qIhD-L0*5b8U!6JqxR*^NZ-c;AujcvGQ!JJN6U9odGwJ(Pz8W-~{&3Zd?;0`-Zl zeRBH-Dvjzx{u*8a)lIZ}G@I3p1U&{T8_7!bMu0BKgpng3sR~K?;Sp7>^sCnZLWl2# zPl#csAf=Li^)iCCk#n{RG(kzFY1EO;$hm-WHZx>0&8CjveRfm#y+AB#PohcHk-I=; zB&xd@GM?sENAAG0=#C&>WxPY6Sqv4y$BOVfgyI@VKqaWZMH)p2k=NDd2|x*yO|OBC z3h`gS@Iu^%R7D8({~U=bN%4UMWvC_=l!5tBEhh+NNJSYi{t>j9N^~!vLW1rh%kO}Z zHkyEa+Q&j=G3DGwNKC>o`P(2V=Rx|u4S08#nO()q{umLZoBcl0QL~2;Kbf7Rn|&17 z-0WA7VrEN7!0dnhnVJ1G@kh;WBPeQi3qet{cM_zT?N|K--3C>^g`5EcF&#!|mWhJHxf(Kz|{o7Kntt* zQi7re-b7H;z!HMUzb46sJ4Dk|(x8p0pzknr6-J_i3Il7N7Z5~F zIQ5EFOaCm;wEP1J%%P#>1X5M#>(qCUpz8 z^-+RI>n)&Vox;t)u(H)5!L_bNifOGTYSNlZ)TGrxn88}zy4H!v)3uHzx~SG{f=KI3 zU29Liru9oCxYkdRVp`82!L%moT4llv*4nOX{T=djt-mF@sMhBQBCS8uwcZH~E9)Id zaIG7WVp@Mn)KpfduCj{eXNb3mN44dp^6ZQ5#BFtShF5CfVB|*1gT!=P!Wv*`F50Iy~c?;3$ zZ9bC#a*Ozq=9aS#-NuiRVm5w(1Z?a+#B7WJA{$N2#xOy=HvDRc05b6~Nh1@VB}~-B zX9yZ>ViSb2CfSTU-NZVg(@ngG05b7@kg}S?ad4U&mm|eYEI+K} zW)nar_8!zs97~v}iK7V`Y~qEwiDCPIi9w{JCY~gKOngE&@kwBKO}8P%O#CAfF!5e) z;zPs|HE|O`x{1FafK2?IZek;0q9)c8G}y!&brYu}Pxs49*i1rc+A#_k zZejvb%*13QU}8Q<5R9MafhB6@D)h$HcB|yNHnm~PCT%YPmOX3LW2=80O>QzI;Qk|g}@S4bjNDhd6mY}G} zJ%D%_evcF{LmN^k!%~Ps86G71!2{LhTnQ%QfmU=LfybnFcc4vbFAeOG+Dig^rS_u0 zGg5n9;CZRt7uYW;bHETdC@Hf#aDQ1+D(L>2q)Z^Zgua&Gkfc0K_v09M36H&t&kx{! z0{n!>_Jx7)CncqTU~FGh(e}k71YrB(A>4y!Re20NLHido@G%41zeuLN=tnPN`xh@m zqPBl=GxGVOc`KHqt$0s{cB5D33bcW-9dxvop{ytHo^Is$)kl$`E&r#*u)V|BX!&oC!Jdp__wOH2{$Ui`5`+CXik%Dzk#ej9o(6I(gtyVs2V*Ig%E9ee^7z%U$k?~RAKZz(aO@^xAG{U& z;C}TI!ecM|G3@G;%$R7&F^!D?Fh zVoe*uqXEB~M%WTUVMTkquN@B%_Z88q7i-72@UX$J8i>LM6jqLS{NRKwPFn1e%}+;d zeg=_+?vPA=3Q3r3gn!ilrRhln%>4t>F7!d*ffIfOh)>$LAXPa&0Llyb9MhL zi|Wb+nWk$oacH{cQCicLgEVyA{{qu>86d7}3Q}CxM55Mov2?61b5z#}1ec~uMiRP2 zDp#1&nyw(yeAGCMRE1>365#+++NeQ(N`xJ}ZZ{)?Mrd->T}bcS5F&YxP!d)9_vd-l z-VB(_T!R#^S`Sj#o`;`S5w#Cq#X}92c1y~m;KTxX5oMKx_7%~i4O0DQ;JND2$kJ7h zBr>jgDkY)1MN|Db9y@Z?r;*~S-$#n8eitcSHA_Qv6;~aktXS2d=XBK%BTH9(Kap|O zPf!x79|s{t$gP06>L#SP>RP0@YA;c1rDkcUz8Rb-wVkqJRp&)jPehikdMuG~)mKsy zs?#;q0${HCOMG&~Rey>USN(6Kbk!^k)&G8$seXg9VpZ2fRktEbSG}Fcxa$9*Bvj{U zs_z8MRsRGju6jLETy+CcYo%sss2%}Ml)8knN~pnVXO_s$sp+6K~Nmz3{cJ;lvgtddiQ@~DUS?-iUv`xe=&L{mh$`htEclppUoNVX1BTm-Kj;)a(A zR$k6tW;Ms*StH(wlMF6XuhD@ym@60=UJ|MBX8@xR@2sb z!QL}cp6!i1eCU{hGbyIVAj}^@#~Jos#i9i`uNAww47d&eQ?=8eN|Z)ukht zu1}cwx8}#_dL01MHQGFZ6&tU1qBKU;jzUKsyM%H4UMET$LX;6hbf->~Xr4hIKyI*y z-R7wg`Ybe&0?l?1b<%2*aYLOP&WP5Do7IV%Suye}yhjiWLwN7`Dle~r_Zh8YGiqr; ztLcE~uy37@G@=@3o=^>pV*c;ZoWy+6!%Fz_Jotn@0(%ATX&BTO0Gg8Uu6}P1V&w94 zL>a;fCAo`fKpi{6d1lc>mE6KAS(j-^7KiHiu(yY1o%8;LMrTlO(lser9FfO$vG+8a z&S$gceV0I?UK`MBR1YE~BJW%x(2F}~pJswa6QB03^?k&^obCv_%o!178U(@IEnpkc z7?w@rjvq#iL8P`orR+8FbpG|hyZAPTziP4q zIe3kReSWY4?D$6C9NBfL_GLj5Few(iw}S&Fq8}fqh?vN(0*&MWh+-cfxViG!j}Mq` zfi%#2`3*(-gDkdlkKYOaOgr0-kiV-;Vba{#$J{;2YDK@tbd34Plmi%N7BpG_cBx_ zM@0^%$Dw{s;JYwHkdj7NgBm6fFVXK%A7{kbj97gY=*S}j^@%Tz@J^QvA4YaRQbIkb z68a)TjvaVc+M&NE?7(}V=mjXA5u65PRU&G%V|JW_4o(vNfmSD;+rX=Cf8a64oQ_3t z>{akqS(!@47}cww!mpMQ#hi|Xad-)(80kRUoQ~_`0(n{FG^ksF8pX~jkvCO|l<%|?nhl0h4p zSdx>VHbM@13QZBdHv&vFwqpa<^0aQIft&dT)LK?jSl!q^8}EDLh>_esP*katP;T^T zb5X1%q%fC$zR8Bu%u%`Il_ha_d6yLA#vvBaZ(K>Spr*2j-wFAc1KfujUOC^08{V*d zV-Nd^W!i-lC-iar?`Mz9yyCeGe3}({1L17U7x77-s;0 zp99v~TXJ3-gw67k9?_Rd^*9n@eLCrlDjgp>>LKIi<;>3z=bN6Ly) zM$_F_lrl1G3l*i%_p$V?D5NUm;8|F*1RYYi$g&#!6qWos>Ys|BVFJjGQD6}^16YY7 zkxDzOclM@dMr@Q@>5v`^43TVa&yB-No53qpR=DR#Bmi?9mCiDXGRS72Q~ru?I%#$X zL2O`MgMvjKX<%A9uV$7}dsbJG9aP^NDPd#DCs-1h`=B(Uln#e)MfE;r0e$a-ILG@u zg|I3BoaVV_DM=syc#t5M#cvkb=S$*N$2JF!R=}s_Z0vt!B0?M#G)ry_{w0& z$60hrE)q6*|4Ew5ILUA};cqj|#Wo)$LrCBwtg)!4YBC%Hwn_Fx%2B2t6HEoRBGGA6 zmO_+WLVZ${(6Ag2JkE4e@y|RntbPH|k|kpnh;Qw8&9KvFvtswIE2)q6M0QPx;JG>` z*I&Y^EGepgCjY|wq8dbs^Pywse9Ji>>WERB)B^*I_Y)%>?9_z>+`zwiLD!C#BTtZ9 zFvnrI7pS`rD{}&Prxu@UWa93i5EUh*zm3lEQeFqjCgqmm(=uDAWOHt5o@MfuJga5m zmb?VZ`63XxElD_4F1OT@v?aHcovl}zVE*UU+>Run8<%#T7V4GO7`^nZrzM4*pp*vD zSZX`~MHqQ%02SaRZ#H^Vk4FKNCy;|eT#4$&H)Q4!VMdEKX2E$2cO#Q*z6JN<>`mxb zx|}%YC*(+Jfc;%nqIv8A(PO^_d3-gTT#1K}C@KO7v(--k#{|e|r7(PCU1~%o&-?Pwr>WA>O+6g{L-He;8KFfjINmfUasRTzP z`QX<}DAUvB8E#JM?rag;P1&2_XR*sO5@%0!ZWdRj{J6_=9;I&=SEST*d4^GXy;z*G zs>^d7rPqi>DYh=p97;RH!jySk9s{MX6$?_PcX?7NeW93_a#5Ejp3>)u&Xm+HPZFgC z(T1~pI{zjh%JH!!)?)=yL7`MwBo!4)#Ve#0E2Wj~Cb``dR<1|M5PO|(2$<1}-JQn- zniMO4{v9f zV?g-KUvwXQQltzV5>XP$MFOF_r5|tRn? zEAL&&Z1=ZshT2l#=tE!jk@Fv~pmsnTC4p0sz-eu^!ZPF3r@@985lvV_;V93*S+grPgp#SwS2hVkyx`oZ<=;a5IGW|6u<{0!T7K{^XBy4K zD*!~4<0w9aT#GV5Dh^P^DKmjnmNd+r-@sF)z$u&!^1^A%*mG3i%_rr+X?S2G6-8uy zIksAC5ARIIfuTmrur6BytiuT~s+D|%`8S#t#227|tp0+;$ohMf#t~7lvqQb=Kafu= zL3~;bRe$ZLDaf2hnb*dGgN>A|^SS-o1au4p2 zmWlAW2i$b{q$6c2^>xQIg4K**0SFd?05P$Yb^*|?ly|?NL`2z2HHUt%5u(unE}l*X zDnA1h-QW665*x36rpX+`WR^kZX)2AVJVM0U{NW?klG!eW0isC5t9=w3)4(Mw=W#9X zWRn*3k;*tA*m+~Ok>{wvQ;c9{t@*$TAN+=7k{c05ktg1lmAk+sD;5i{*6czR2wYn3Y>09GLPvBoN7rnkD_&NsyV(ZaH1uRB9Af=3oXf5 z|F)z`gqB%hW-k|M$occyKO3TZHVV(FVsVW7xSPWXglAQYN4roiQ@RsUqpRk^A};pvVDRC|0=xo&<^o3=W3EAn#zc0ssCN^SvuuA%_5-Ptx9|bKAl# z@mN~ITcWxi$WTjsxWz;mn%Pw{jEQuPz(-XiQh+3yq~W}`*@(G}M1Gi?{m>>n3Ku%= zz-MR+{&KIdQf^B^bH`fy%mrjpu_aw9&U>H?tqo5ZN7%83x0|6J-!}5!pR5 ziVGEGKMRx?*_{@}NuYa#(M=w}nToQvFkI#U4g=jr#yfKWXDmut&2S3`aKnmdx`s8{ zC$z=3+lCyIdJGQh5^d&TN5FEGo`+2x(dr=OS@gNYD5u1aS#+JAj(+a5&N7|Y2 z5q7xaE@5=K^!B}|94D`%JZy%!(LLvzhhtA9#T>TL@tdF<7eW16p;K}MUYBYDM=|c~ z2>e+#$}3>p6`5>I8YPw5@#P(!M*vPSidd)E9Tv=e(8*&xrC6ydkz_;*Ov`dI1ztN$Y(Bm79?nWTxTb4@> zr<7kH9lS#b9LK(esBXm;Gmb3`p(1t!B-o2*`|9lsX=kTA-AHm>W{t10!cL zPW#A**+w?4e_}DW%fz8;I5dny864sZfF~w$h%J8%PvAiT%EL^3I~{Jep${9d9giL2 z@s@_YK-z6`;uP+KtUlhQ`pD{G z$-o+q*ZNzOgCISpEXTQI&5x0l$YdpJvNmh7dPUgfS1ujK`oQ>sJ`fdvKJb6rPuod8 z>KuJ2;`QmNLkf!Go77f@b+GXEfnMHam3JjcyOQnZ`0kf3Lob#mcG+o;{?Y_CU$>hm zoq{>~bet4HX_J_b`MTXm=`)ycr*_$C-v843_+xs*x?hq7G;Pe+^QC-D*=fFx7QD+8 zdFfd}J4Y{0HIrsq)chFc@Od~EN=_X7f>6=BpNo0-TpajKg+pCcX1{8=cQC zlETiu`D%SXap@2@P<{IulGk?yc_dojrzq#^>bv}0vg|Rk&L>$dRvtRP)kI;xhRro^ zHnH6r*KgR?z@wPcJ25|{jk;Sw8CLEChI%;6aM|TSUYvRueFJ)mWo+8}5(tOnKg#nn zWlT%2gJ{}^xme#%nZowU4?=LHTvkKi#%9a|T!`}7uQC3UGI92%-s?6ZK^ha(VlJ_m zX>@ADFMkd3G)_E?)bFPP#C7jlPW$w`mNDInNcXO(vRcTMr{PBHayI9Oc4Y?y!vzB5 z5V)CxAL1z(olQ;c(w{)cN=Z2l2&c8j zV_opuPaqv@XNZ$*HG}4^4(!LqsXLK_83IjFegy6=N8l`*uh^(uflpa_A=2oAv1~DB z{}CJdS>Va1ahYo2z6Y8NwGs|zz(Hc6{QZ9 zfZlMdB#aN(!DSxS-RcO0Wc&|#_@fZCtPFdx&OP`WG&QVq4{jI8$*Uu+g*f_hxcVFn zW3|?f1pPgPz^Mtw>_V)#PFoWBiYtjo1bH_-05wti2x3B10~f>Jh*LT@@fDH9Y23qz zQ;>Qa7JUTP@t@L~9Ge^o z-JPGne4O(pDN~6CZv=GymR5HH>=}p+F@j~EAY0{0vhp*~(GpNr>K;Oc#;bQu0V$6m z#Y34`jhVu?|f8l8$Nsg0z4w@6urc_B-X(mzFui7ly`5C7NH;Jq<^*~DG z;Dw^BCO~jcqWUV6hjx;VvZkP{*z7TY8%<(4Za6Mt8g6JVSA!D|I-bQ1FOK{fY-l|D zEpU#c8~~DA!uZDt#o*DLieFC96@K?9ttr( zR7DQqV?HlzdzC0@Kj#G`B(#!Nlk~#z*7#`bH>f1~BBD9^qCslK@qKHk#h`BNFaQ>< zMz!=%l5I$Qh?Kt8KG5GsXR1DoO?FhuJHJAujH4w@Dhsw+z>$tOMMzpi%9Xo;z=O>< zaKnzea`-_OjHfO{F~Ky6HZf=$82g(W5UdEjM~K3pZiGrY?G`g8^eNgpKZom{z;#y+ z(ftWHHQlcfw{jlWy;9SCBiCK0>AoncyR}!-eJR&%;JPXHYzX<`v=}}5D-nihW7Z3O zeH2p$4q9^EkI~~Ab03M5z@+^ds=C&kh=drPK zfDbJ;Q2(M_Lv|r%at!?3-$M%xY_Io4NRJ#EYmn6-6d-nffg9Ua64Xjc(z$nYkT8kS zJ?9sD`)K=MTQWMta9fi3JlzE!qZB5*O^#)T%Z8?dd2{6GpZnQn^fBb=Pe^jHb&TCG zWjB;lzrEJL`|TzJYtNUFO$Uo`PARs;S)T?W|*Ae#Z34Kg;1k4|R5uMGGD55}Wo8L-13#{o!W zz;1&)96(<`NedWcoPc@sGz0b;3c&OI6wCCT z`yI45x~_-$vH6#*XR5{xyD=-UHHPv0m$;!XnvEMes4d7tyqN*vrQVBB>OyHXLLdnR zPHvA61wP-4mnT-2bd|Sd;qSPVhm~8wL4Vn0Io;#Bylv^0>+r_{YEV^P5K`#VSMPHt zBC2fVJ1|a_vnT7<0iktkZY%Nvr3U)D~_<>>c!_><`&yoh!O0rgC zs+v_U?VPEs2N4dO9Elwl8Y>OR4dIUi9JwC`O@JJxPx)H{8Bk$P3Mu!()R5AS{Mnn9 zT-I)q#K2n*Z(1G*h44OqIlY^IF+}3Me`NyQ@lO93x<7*x_-AeiZa#yTX11M?+T(-U z&xC?I&+GsSa}Rz*O7jFd*rrWxkJk{ZfXMz88tjGSAUF9AJ~B^~*F+Bf#em~(jOra! zG%sd<0F+gq;P1^`D^m6;p6!Xvo{MbC6OD{@F>?jHoUXB3k+13ZqQ_UBK`G&bcB^dP zurXR6N$T@#d#6fTL!TZ@1X1ABj=)J~vr(nJpUA;6Mh$!mpsZXBB7C2W;$SuIqAn$s z%Z^9kl@dym3*uET$T6L}AC$5U!=*72Y@==XCLmZ+bamnh=5YM6^KRr|10LC;>wv8U zhvBOVp3)&MMnw*0az@Neql{`b7YYs(iYbn4i7Gx#tcrg#9*r)MMON6Ea@$O}L5v)n z&Px-o?gJI(q8m0M7AYLtljZhQ7(QIx$#Rq*L4aJtVu@(+t_(JaHCF_gigHphT2`(g zN-DHb%|fB6%`p(q(h2P4>kbiAXj7kKLkKg0cK~5}kdB)JJxozAwhomG0b!zp4KWN= z^q0+Wh8@U}#D*C5{DZ$GDf2>8({sM=#@oOG)q_+k2`p|s7hqPfox8R!>oV*IbxSt^dx>U zOnEio$Sq^Ny;@PG0TpVns1KQ`4neg6Cpd0Kx59`HT@Z7%h$#W%~Rox2+WuzydDH^kf zn3Y2Mbz?H=>WNccB?Xi;sJDXwf9!+YMc}=}PpXe1k@7=4@603{FAOUN+|B1}vL_)I zHp^{UjB5^Yajm~b627{hCjKPw8p`6yX)H_0I0HXn&+7l!zYTaEcbuNbUv;*Ro`9Z! z9rRa2FgHL!+X0=i1#{HR=LK(2H;chVs^knVR`(30@AG6TxhCLvRMJYgPP-Lc9cs&g{+p9ViR}bGZ7!IM%36+9u%d zbCqNDX;j;Q!s2SzbO!kW(Id5~m@pXB$(-D5iFDpU?`JZSTRF*Wl&mFwc5u1clC&q# zO;2l1w3y);C!LZXI7{8+yJ@5@-<%rhd{KyWZb3*u<19@Fc66P1=g_DIi7ar|wso#Y z%6FleV{2c1Y=HN3@V?A>`++6<;_;k`@eU&s^YI6!0)KEGgX(R8Kj1AgHczVjr%&4CVF z8|6G^RPR`Pxd#D+#Z5=Q33RONt@BXcmJ8AGcY105HUr``+kX#I&2vv6`=?x=!1YBs zpAw}gBF#0eXyXMy=QFba;ahGE;G=Zp;DNgV6-dPfU{*_C;!$@*@B@1FH@RLN1%t+kKKXi z>1gVU?%8yk%Z8^je;4O^Ms52U{q@X0j1h#-ZMUZwH~;MR2V7 z^O-&V=0gmgb`wq!H|UF__>fI(wuyOv$;JmUJghZ_Yz z2atF)N9s;npzc%>JZaP4q4@D|lsn|q#9xc&3Q10s{2gIGh$Lqzl5t4p;T}(@y`_80 z_7Y?wXb+6QD@ELhLz+IuONQ_|GpXyLmcHp=&v}!e(0QmWxh=JjR%W6J+Yj%OCt2AX z(CxNM4i{|%Ff_`>?sPz6JQi-n*gr6-|Es-okB;)X4*i)=qX!^_1hTEz*ugewY3erE zr72CZ5k|zg0W(Mfgs)eJku;!*#f+i{#wm43{a9WrZsdCxZk?_y+bgCHZIKpj-4-08 zi(?W<0tS0wzyTrK2uaLC^L{_n-~PTCNnq#Rl=i=SM>_L;=bU}^*=L`9_TFcoZ)WZS zHJhlYh*q~kln&;2#>ds3U~t28;Q+Q?5u&Ee^gjW=n0l%~F+s)A=7>)+eB zsm92E(14k*GoAi9zhQS~gFy;EoGM3$@OlHMo5UWLHP;{AnE&mEO`q{w6R)fsF7N~R zlHUZrB+ozK%YGAho%_OX&TsT_^E;`3Hj(FzK7LtPP4H&sT-}&AA@vuyt&UsFG?C({!haRh znK+ws!09~1KYBaIKKGS(1F~;i8N!AS`pwU=O+Fb&L&@LM(NK$IUYT%kF9*DkVAS%M z)(6k(pm9K-642M#TL;L=Havfa&&{EjWTe%gKlcnCUGc;mV@$t;feVPnveI0fR3os- z_w-Mgq@*u^F=@`9aLFDQT3--a|0bB#f1XVLivK~sMJHsB5E2FR&{jT~7w2=5-0L)N zki5|4zsrD>(fv{&-+<&jc&TOH@0m_-Xgs^&#g_H| zb3KRbb9sNXy8Pw!mbVx1e5QQo{mbj?WA&|P8(wOeduESae|mU@PBD6V&npuTb8j5D z&%1T#jZ(@O1oX`wdZWCMF_iew8z36w-z!wiDX0*_)||ay(8>xIQuQ3 zG4pl|CNPL)%)^+>!<+yzgA&Zo!*OYGGA#439Y~R#F!S(x+!y9SDw&7BH6UdkRtltu zPPi}+`pv5+J1Byf{94k{6eCUfe=^ofntk#i+rHe}`eGLGWo_?6Tm2c)rCFechq+;xM37 zym+5n2TO307gyMOf$r8Ai zB|5CLqm1@CJBDG$n8A*H@a#181$OYW7sO+Mnzs#ijA`e`MmW+nPi)h%&Ao-9twZnp zFGg(w9Th(TL)BLV*Z?h>*kXXn6MBHkBaml-0rYPKl&>a~M;e}%j(IfCEXOi>$u}q& zdgp{Za>rnwAP4oIC;m3&&`kOiODr6_SKZDz&SzFHm1nn20YAHA1yV}#B3KaD%;f;sgkoh>Tp>bIG^eZaBOX2%O(d=N2{h_tL2yA z@d5a-T-9A?`T{ako}((~7sNIWZW}sUL$C#geid59S>!Zm+2_9?Cq^9JMdsZmkaMw3 z0{V~vdfOyuWZCBz$l2L7P|XHZbe4her}865N0+VV8j=0V+r9vPF-PAb)4F}U+XF|1 zXAEV-p#S1iBBluu=x>7qhlb266Dzpa1)2}xNhJc^Z$OGbZxYD82y{XhXzY@H^QzcK zF_Q@dI)Ol+`wLy5$FS*nn-kCl`j2R@3v>X1ju--cZl(xyU{avP=E$S!x~{_u$HTxh z`G<*aOH+9eAVHH4>TCGf2EMnuo(BgCp9jXzHJs6+QzbkzY54depW=BGoeJg5a=tF- zmM_5#zP(`_Oax&3yNJphsO*arc0iY!`x4~6h5gT^A5`@PKG<7{&+#32CEFeC)uv0i zZ$ao-!{R~zUoqk#_HcahM>9C(tKNrxutMT;?S#jFAfG7XE8T_o?{vSIFc}Y(evX{^d&|Ga>uq_fBxHe_Yy0>0-(3iLVP$EeZ&(#>C#ho=Z^KZLQ;PX+G~IH zu{r(o<)(%QA67hdU$2TiHCPY6g-@|Z=wCS4zmPfYU+C;#*k9-Dzvof=qo?l8TDJ7p zS-x(03XQvIkdx~fu&{q|dd9%wW5qfpK+Vev#M@+_A~##wESuiuL&ngUE^R$l-9MkB zK)EmkXaD^E#nRa#d;g+SLm65vmR7KSx$u#%S?w>k^)Kr$pTY$aBB}M#;NPYiJbLP% zBr~ngX>hMhhx^{IhkI^1+_ygs$H=-25Qn8NVDDdWs$H^+5dFRom0Kq(BM16IeX;xc z0_*QH?8eWu_3`z6iTnCOmSZ#f=Wjl;nGZ+m^Ie4TEpWEfEGDHY;<`WN&sa`Z3i3(=lMTMyEqw58cn?~oNG)E?*y7z7%% zKQGjZPzrujfPA0>5it5VFx3ah{(+pOf3c%~v7iG}fvQ3aBu+lXI=GqfFBB0d?Z2n~ zNdH2_;OqU>mbd#CB4GwFk~Ik}bKQEXG5zS*AH5z1X8r%yjdGxthLRR?aCE*%sbLb{ z;Q#gYTR`9dDEUn00TjVf+^HIDUm1lpq*~JRq}NCmaPDT75-k1&z%N+=T&+@z@8=ox zuP7C{7sYmuQgw^jGW|Yv;OQW3AuXcKYovYPS*lS-S`3aC9;A%VdDQZml%?Q1{bi+& z+(+3TEA=9EzYT4Gs+TuY|EN+2xgJ@s)JNREyg{ksjnKz+F=b0PGIsJGJpvx`t0~_{ ze)k$+n)o6ZQZ4u2zYDmfN_Er6;$_hHCB{Vm<&2>Q9LGtEXqO=EYf!3k9b+dgW_(SI zYxoO%aD`L}eB}cM|6q-3Vthg?Y}9XRDWqEAgs2X-Y;6QPjuRc*36IOTuD+S}Oj0eW zgRpHA*MqozP1LuM4w6nwqWopr?;{-`CFIIBH9)GVVlGHqNH0pdNvScC1>DC;r{!7= zPlz#p1pE#D}iexe-J#c2@YTnkYxVw($rBHa{|Vc!xNFsz2v(|b;#43T=!E3Icg#IODJpQ zx(E0r$VfH!!`u%eJ1=m*hHD*3@V0X`Q+9&(YiK7Aw3xX@xSpVH7ck=CuHpI&aJxv~ zC!GP`8m@b(<6kixwVNcbr69hCw4ZUw+4vb!g0$vt%Ki|ZBS%LcgPx7xrd)Agzi0sl z@vq2}%8*fWJG|WuZ+9?HPWWwwH{W4yDQl$7W60JsTa;4Zd~6}(ybD z|4RFtbov|XS3J^SSy$g^UAb=U+I8rT-}GgSziI7;8yx=}ga50VZjga9jrNT!Q?r0c0h z?wd%bNoPp^U9WkE6&g~NH#MxRU$yFyh7}uE)mIGgeP$+A+Ul~l+1oox{2PkNVhJc`4X9mIn77*;PKp*#G=D&SpQ4)_PDi)H*6#SG-P+=EI_)jp4wt|r zP;B7a^HcCm!BFu(=%{i)1&*2248dn@ce#Z0J1M_yKvn<3q^jF&&enDiwma<3ZfNPU zZLlp9yMbR@2_ zV=9-M(6n?g91UkZSF@RfRve8f&6Lzk)c+u-GW_KNp-d#kS*vEEDwffTlsC?&@8UV7 z@wFkQ!^0!KtM1XzcxZgo?G9=tAOECeXgnStrv(IzXtPog+MmqP+UM4aASIR7iYC(G za5Rr&4sC&}ONtT=gL_TK+SdIjd4C zLD8?mDwc?rh~pjMHL`!eA` zBAgnfO!`$!f=bdbE;soL6+cs1tvIU{y$6xB_no3+?k=cAiicn_Vd+U-RFSF7r9vj2 zi)W>FP>l;Y7d6waL*uleT%|KgMivG`nr?$i=OImD{#0R-c3CMb*3s+3qG*s2m?0)H zq-mi`DW$WVN7)8^>1Pg{uAR+fuPR@O5>-8rBdPnp!Mt+L=;PktIs z(8&^Htv?T7X}5i6x3#62($$o*kWN!Nqs!jT$}`GeGNAbeRaNSog#Lw5y5v1dJ38$< z4A>Wq(xXypZ*}A`h^s??!&2JnaqR|}Pw$41bc$75*Y9SR>9j*>* zPe*=?)@IjE8XiStZy!)&XH4qm?Y751n;G<_;O618a8vY^Rg{p?F&?;dJWQ2zZ0)kQ z7!{)Js91O|U$Gr+qLcc7QPEnca5(d%uBT$|fI3LUEJ4-maiN2MicJ(5KX8Lji!c5otoxf0W)VnHC-^NvaQ>@^?|{agCIrU zRbE8j3D-WOWexibW_Z!Z%y6rHyUV)W)hc>W_EtAB^PiYh#bmivxJD)W9H}h7d`+d0 zOr^{r8npY*D@ANYgKBAHd%|})bNOAlh7tZEQI)adqVu$LCgVx}=)6{h)`<96rPMp6jIw~_N_FT&5@m;~NS{Z`a7jwba#0ttP)G%XfvY+7um7G=|N3THojH?H zNi{mELZOhRg+&v_E=aE>!SYUetbB%%fF6 zTw3&*ADxfZkv@yk$5^vmj_dS9Vkk}2$5l^`IuzPRhtiptK2%>k*Q<{e>+y7gZeo!z zsQFLmFHFmXW+opS*36zU@2K1B9rb$Ay z!cgzU3z`Y#b0w<)0Ekp_%+1t$N~gG8y%M!jK~Wfc4>|9HYW0 z6}@KIXlU9$DJ)fTC<%ixP3d4Vkxaz7Pjiz>r7BFOA6FQPsHW#)PS%pLnx|o z32fbVYlp3?>xtGWF+G8>p|i@aqOaZ_&-T!5`ysli%U2#wSUqu>5 z3^K*ajtyV-d40oI#I{F5K`0D`esxyQg~wxYnfuU(*Jjg){MQ!zCRs#177gQD(93u{ z79YRC`=CzKc*tmOkQlzvEMpDHP@*9wCN9M3cOX~k{L7GP{XLzChu>n}C;48QyE1aw z4L`jjTzUB}yKxUxZx@s10y~EZb`kLT^SO8T_`QwiE zc5Ays*W(1W#3^4&xjC=e>nOqs@1m$`tE+Rnts8o~UDkG6v%MWuN2o7H1(ay2xYM=G z-bvYN3<<0GnNm&7)y-Fd-hzvA*+AMx6t5~@=Mc|ajI$t^1>JPoJyYs2V%N8Sj(Uch zDQCDnPMwM3>pu)yl*Ey?N?~sH5Fe=gT})9*n;}L7HHPAjXfxB}zAXN8R{N^h1k_0C zr9Bre9Mw!m!^wCwh-{<#ibG+(_#~B%1$}dF<(gm|aCDeu**(Wqe3urRTYJzBBHrzh#yU+ zX&zi*+7D79ek_CVj2>>Hde+Y1>|qTfDgw)R)Vuv35DO zwY0Uj(v*0dte!JeRU+n3IIrz_3q3>El1k{(CH@+^UZXJrdxqM%T|HeLc4zCg&4n-) z%oqSOx@_-FfZkbg}o<{dGEBFrZ$XtEtaTIaHs9lQkx^ z16Qd#sdncMN2klVo$=F&L?;mIvYRV~t)HL+i}7S~+84*!_Q)>ks){F)C_;6Cjn>VG zP3$5QR*tA4PxwMIi7O}AyoivP&iO{uDXmIrGtycK>tK+wZ~!MD0ccvKMTh$I`Oc}_ z@NgF2L5)(V&PJ1Q#Wp7iJqWTVlbK*^q?IF#5TV|SDwR_SUqaW>S|q8>QCgW0aV6nb z{-9qL;7B+e)@BDx@6nL8AbZ`h1p7YjOG6_#Wagmg%GriUl{7xQb`=kH;*8JJ*zix+ z5sRP#&w33Nvz@MPM~mHR-vPsf@xP>w`K%%GJNH3b>n4Y@)%AqcZtVX>!HA-}bwF7F zn0HO%Nfq=bK;WFe0K}}8CtIc|r>Bj!l{eAWMqFZtxIMZKDyT2nry-`xfGB6S35n=6 zLRo{+_(f^l(q>2dcev1}_Rh(UPXK{1Ja)4Pa=YEm#>d(1Xt&DXLGX9T6vANn!%AU^ z8)2wOWfNJSXrD4P1EyDdp!KFF)^g0yZ1k)Nu-NKlN?0ie)K^3Du&&CPdE^gks~v z4I5UhVfxH9a8V*oI~-j-w)V-r4s5bwA>d-`tzt|au(_GlnTMnLFto8U7u?3myuRA% z+DeEBHx{^4z%i2n;L07XR_vb96;*#>%u~mFdYDE-tGz>4WowM;!`D?85KA?RqwIDR z2b=VkPDitS3U?*EL$+(~K(-Azhl5d2E?@M&zWhLD}^1BX#RGHL&|g zz>!o-SEaRfe7}Uw}09IDb9dLRhg77Yw-D?ar>APP^6V z${Px?3Z2%@9;efYZ+3w5E`p-OA8%`QblIBGAk96F_HKd+#+2$U=>1u+vWZ%Bm!_(_ zx?LdM(dlw^Td^Y@_Rj7n0TEqCJir3TO`Yu6F+iV!nGXy)uN|1Vx`o?`;?WVc+PZBZ z@c@9xHQkNK={AfFTf2dWTKQN7RP4iLtQHF;bW8zQ?*-&ZqlblGpodR`0Pq|DM4t8o zaOHEo8XG*4@%3hTLfrfAVFjaC2*a8#gx}uQlpKiuUt zJ{A3)&QI$Tx~>Oycah#l$M1>~)`Mk}RrfJgy5D;bRn6@-=i_+{v=Y@VF%YUMdYso) zE}|Wa=#9@+ia_a`P^_*PVIMI`Oj+iA^$~X;ad!qW&ZL9H0q?*`;!hsJj^k)zUgWBWHMALFu?aKYB3w*& zDfD(uxh3YS+@lGCzx;WKHH+to$0;5~LIrYo9}1nXWzxjY6DSfrLdsWlUm-Grl)=HVDLdTB@N>WO)9BKVvX+2+Q#a|+6%DGWk~v6A=@ThX`* z6Lgq1vv+V1gA%b@QJ1oOzhj{MuBlS0ZwF<0SX>Qr3Vh)(Mj(k181rTHz;;0$H#F8i z{K!KMY!+AF$7Zp)#nmCYtp;T5Ik!+|Zf@Bw`#32AY^M(PO?#&+Up5n8nzEv;TSXb% zX+XUxP%L`8#Dv99pG_QzvJwuOrV7gr&6`;%{eDSIUwYiw65=%(Io#BuG*jVEXfwE^ zgRD`xOb^U|bw!5B?8u22dI;kJ||uPgQqNP1Cw1G~H@z zl{2l$ro)C(`RD3N!MqvriXz?&ivZD#AdljIXA{2kaMbPbh?G+tfw+%5IU&#Y>ICc^sp9b(W7}xdc#p; z0E-{UQ%8W`4_x)%`E&uDd}@aiD*V-EQPF@G%fF`;C( zL%Ktwg-rjbvdQ=v)LQ)g%==mOv1nHO7|PRZ&@g$I=auX2-dXME$C%y?#0Uk<60hPKCld{;C5 o2-fj`J`@b4#{*YGq47W{z{f+p-cS&3vNd}DqR_~|{-1pP2PkXI$N&HU literal 0 HcmV?d00001 diff --git a/driver/xscreensaver.h b/driver/xscreensaver.h new file mode 100755 index 00000000..77325a0d --- /dev/null +++ b/driver/xscreensaver.h @@ -0,0 +1,62 @@ +/* xscreensaver, Copyright (c) 1993 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 VMS +#include "config.h" +#endif /* VMS */ + +#if __STDC__ +# include +# include +#endif + +#if __STDC__ +# define P(x)x +#else +# define P(x)() +# ifndef const +# define const /**/ +# endif +#endif + +#ifdef NO_MOTIF +# define NO_DEMO_MODE +# ifndef NO_LOCKING +# define NO_LOCKING +# endif +#endif + +extern char *progname, *progclass; +extern char *screensaver_version; + +extern Display *dpy; +extern Screen *screen; +extern Visual *visual; +extern int visual_depth; + +extern Bool verbose_p; + +extern void initialize_screensaver_window P((void)); +extern void raise_window P((Bool inhibit_fade, Bool between_hacks_p)); +extern void blank_screen P((void)); +extern void unblank_screen P((void)); +extern void restart_process P((void)); + +extern void restore_real_vroot P((void)); + +extern void spawn_screenhack P((Bool)); +extern void kill_screenhack P((void)); + +extern Colormap copy_colormap P((Display *, Colormap, Colormap)); +extern void fade_colormap P((Display*, Colormap, Colormap, int, int, Bool)); +extern void blacken_colormap P((Display *, Colormap)); + +extern int BadWindow_ehandler P((Display *dpy, XErrorEvent *error)); diff --git a/driver/xscreensaver.hlp b/driver/xscreensaver.hlp new file mode 100755 index 00000000..17d27324 --- /dev/null +++ b/driver/xscreensaver.hlp @@ -0,0 +1,453 @@ +1 XSCREENSAVER +Run graphics hacks after the user has been idle for a while + +SYNOPSIS + + $ xscreensaver [-display host:display.screen] [-timeout int] + [-cycle int] [-nice int] [-verbose] [-silent] + [-xidle] [-no-xidle] [-lock] [-no-lock] [-lock-timeout int] + [-demo] [-visual visual] [-xrm resources] +2 DESCRIPTION +The xscreensaver program waits until the keyboard and mouse have been +idle for a period, and then runs a graphics demo chosen at random. It +turns off as soon as there is any mouse or keyboard activity. + +This program can lock your terminal in order to prevent others from using it, +though its default mode of operation is merely to display pretty pictures on +your screen when it is not in use. + +The benefit that this program has over the combination of the xlock (1) +and xautolock (1) programs is the ease with which new graphics hacks can be +installed. You don't need to recompile (or even re-run) this program to add +a new display mode. + +2 OPTIONS +xscreensaver accepts the following options: + + -timeout minutes +The screensaver will activate after the keyboard and mouse have been idle +for this many minutes. + + -cycle minutes +After the screensaver has been running for this many minutes, the currently +running sub-process will be killed (with SIGTERM), and a new one +started. If this is 0, then the sub-process will not be killed; only one +demo will run until the screensaver is deactivated by user activity. + + -nice integer +The sub-processes created by xscreensaver will be ``niced'' to this +level, so that they do not consume cycles that are needed elsewhere. + + -verbose +Print diagnostics. + + -silent + + + -xidle +Use the XIdle server extension to decide whether the user is idle. +This is the default if xscreensaver has been compiled with support +for XIdle. The XIdle method is faster and more reliable than what will +be done otherwise, so use it if you can. + + -no-xidle +Don't use XIdle. + + -lock +Enable locking: before the screensaver will turn off, it requires you to +type the password of the person who launched the screensaver, or the root +password. (Note: this doesn't work if the screensaver is launched +by xdm (1) because it can't know the user-id of the logged-in user.) + + -no-lock +Disable locking. This is the default. + + -lock-timeout minutes +This is how long after the screensaver activates that locking is enabled. +For example, if this is 5, then any user activity within five minutes of +the time when the screensaver activated will cause the screen to unblank +without requiring a password. After 5 minutes, a password will be +required. The default is 0, meaning that if locking is enabled, then +a password will be required as soon as the screensaver activates. + + -visual visual +Specify which visual to use. Legal values are: + + best + Use the visual which supports the most writable color cells; this is + the default. + + default + Use the screen's default visual (the visual of the root window.) This is + not necessarily the most colorful visual, which is why it is not the default. + + class + One of StaticGray, StaticColor, TrueColor, GrayScale, + PseudoColor, or DirectColor. Selects the deepest visual of + the given class. + + number + A number (decimal or hex) is interpreted as a visual id number, as reported + by the xdpyinfo (1) program; in this way you can select a shallower visual + if desired. + + -demo +Enter the interactive demo mode immediately after startup. Normally +demo mode is invoked via the xscreencommand (1) program. + +2 X_RESOURCES +xscreensaver understands the following resources: + + timeout (class Time) +Same as the -timeout command-line option. Default 10 minutes. + + cycle (class Time) +Same as the -cycle command-line option. Default 10 minutes. + + nice (class Nice) +Same as the -nice command-line option. Default 10. + + verbose (class Boolean) +Same as the -verbose command-line option. + + xidle (class Boolean) +Same as the -xidle command-line option. + + lock (class Boolean) +Same as the -lock command-line option. + + lockTimeout (class Time) +Same as the -lock-timeout command-line option. + + fade (class Boolean) +If this is true, then when the screensaver activates, the current contents +of the screen will fade to black instead of simply winking out. This only +works on displays with writable colormaps. Default true. A fade will also +be done when switching graphics hacks (when the cycle timer expires.) + + unfade (class Boolean) +If this is true, then when the screensaver deactivates, the original contents +of the screen will fade in from black instead of appearing immediately. This +only works on displays with writable colormaps, and if fade is true +as well. Default false. + + fadeSeconds (class Time) +If fade is true, this is how long the fade will be in seconds (default 1.) + + fadeTicks (class Integer) +If fade is true, this is how many times a second the colormap will +be changed to effect a fade. Higher numbers yield smoother fades, but +may make the fades take longer if your server isn't fast enough to keep +up. Default 75. + + installColormap (class Boolean) +Whether a new colormap should be installed while the screensaver is on, +so that the graphics hacks can get as many colors as possible. Default +false. + + passwdTimeout (class Time) +If lock is true, this is how many seconds the password dialog box +should be left on the screen before giving up (default 30.) This should +not be too large: the X server is grabbed for the duration that the password +dialog box is up (for security purposes) and leaving the server grabbed for +too long can cause problems. + + visualID (class VisualID) +Same as the -visual command-line option. Default best. + + + programs (class Programs) +The graphics hacks which xscreensaver runs when the user is idle. +The value of this resource is a string, one sh command per line. +Each line must contain exactly one command -- no semicolons. + +When the screensaver starts up, one of these is selected at random, and +run. After the cycle period expires, it is killed, and another +is selected and run. + +If the value of this resource (and the applicable one of colorPrograms +or monoPrograms) is empty, then no programs will be run; the screen +will simply be made black. + +Note that you must escape the newlines; here is an example of how you +might set this in your .Xdefaults file: + + xscreensaver.programs: \\ + qix -root \\n\\ + ico -r -faces -sleep 1 -obj ico \\n\\ + xdaliclock -builtin2 -root \\n\\ + xwave -root + +To use a program as a screensaver, two things are required: that that +program draw on the root window (or be able to be configured to draw on +the root window); and that that program understand ``virtual root'' +windows, as used by virtual window managers such as tvtwm. + +It is quite easy to make programs understand virtual roots if they +don't already: you merely need to include the file "vroot.h" in +them after the standard X includes, and recompile. This file is distributed +with X11r5, and is included with xscreensaver as well. + + monoPrograms (class MonoPrograms) +This resource is appended to the value of the programs resource if +the display on which the screensaver is running is monochrome. + + colorPrograms (class ColorPrograms) +This resource is appended to the value of the programs resource if +the display on which the screensaver is running is not monochrome. + +Normally you won't need to change the following resources: + + bourneShell (class BourneShell) +The pathname of the shell that xscreensaver uses to start subprocesses. +This must be whatever your local variant of /bin/sh is -- in particular, +it must not be csh. + + windowCreationTimeout (class Time) +When XIdle is not in use, this controls the delay between when +windows are created and when xscreensaver selects events on them. +Default 30 seconds. + + pointerPollTime (class Time) +When XIdle is not in use, this controls how frequently xscreensaver +checks to see if the mouse position or buttons have changed. Default 5 seconds. + + initialDelay (class Time) +When XIdle is not in use, xscreensaver will wait this many seconds +before selecting events on existing windows, under the assumption that +xscreensaver is started during your login procedure, and the window +state may be in flux. Default 30 seconds. + +2 HOW_IT_WORKS +When it is time to activate the screensaver, a full-screen black window is +created. This window is given the appropriate properties so that, to any +subsequently-created programs, it will appear to be a ``virtual root'' +window. Because of this, any program which draws on the root window (and +which understands virtual roots) can be used as a screensaver. + +When the user becomes active again, the screensaver window is unmapped and +the running subprocess is killed by sending it SIGTERM. This is also +how the subprocesses are killed when the screensaver decides that it's time +to run a different demo: the old one is killed and a new one is launched. + +Before launching a subprocess, xscreensaver stores an appropriate value +for $DISPLAY in the environment that the child will recieve. (This is +so that if you start xscreensaver with a -display argument, the +programs which xscreensaver launches will draw on the same display.) + +When the screensaver turns off, or is killed, care is taken to restore +the ``real'' virtual root window if there is one. Because of this, it is +important that you not kill the screensaver process with kill -9 if +you are running a virtual-root window manager. If you kill it with -9, +you may need to restart your window manager to repair the damage. This +isn't an issue if you aren't running a virtual-root window manager. + +For all the gory details, see the commentary at the top of xscreensaver.c. + +You can control a running screensaver process by using the xscreencommand (1) +program (which see.) + +2 ENVIRONMENT + + DISPLAY +to get the default host and display number. + + XENVIRONMENT +to get the name of a resource file that overrides the global resources +stored in the RESOURCE_MANAGER property. + +2 USING_XDM +You can run xscreensaver from your xdm session, so that the +screensaver will run even when nobody is logged in on the console. +Simply add "xscreensaver &" to your /usr/lib/X11/xdm/Xsetup +file. Because xdm grabs the keyboard, keypresses will not make +the screensaver deactivate, but any mouse activity will. + +Users may want to add "xscreensaver-command -restart" to their +startup scripts, so that the screensaver will be reinitialized with +their private resource settings when they log in. + +It is safe to run this program as root (as xdm is likely to do.) If +run as root, xscreensaver changes its effective user and group ids to +something safe (like "nobody") before connecting to the X server +or launching user-specified programs. + +Locking doesn't work if the screensaver is launched by xdm. To get +around this, you can run the screensaver from xdm without locking, +and kill and restart it from your personal X startup script to enable +locking. + +2 DEMO MODE +If xscreensaver receives the DEMO ClientMessage, it pops up +a dialog box from which you can examine and experiment with the screensaver's +client programs. + +Clicking left on an element in the scrolling list will place the indicated +program and its args in the text field to be edited. Edit the arguments and +hit return to run the program with the parameters you have specified. + +Double-clicking on an element in the scrolling list will run the indicated +program immediately. + +When a client program is launched, the dialog box is hidden. Clicking +any mouse button will re-expose the dialog box (but will not kill the +client program.) + + Run Next +Clicking this button will run the next program in the list after the +currently-selected one, and will scroll around to the top when it reaches +the bottom. + + Run Previous +Opposite of Run Next; at the top, it scrolls around to the bottom. + + Edit Parameters +This pops up a second dialog box, in which you have the option to +interactively change most of the screensaver's operational parameters, +such as its timeouts, and whether it should hack colormaps. Changing +these parameters here will affect only the running xscreensaver +process; to make the changes permanent, you need to edit your X resource +file. + + Exit Demo Mode +Returns to normal screensaver operation. + + Reinitialize +Causes the screensaver process to exit and then restart with the same +command-line arguments. This causes the X resource database to be +re-read. This is just like the -restart argument to xscreencommand (1) +except that when executed from this button, the screensaver will +automatically return to demo mode after restarting. + +2 SEE_ALSO + xscreencommand (1), + xlock (1), + xnlock (1), + xautolock (1), + xdm (1), + qix (1), + pyro (1), + helix (1), + rorschach (1), + hopalong (1), + attraction (1), + greynetic (1), + rocks (1), + noseguy (1), + blitspin (1), + imsmap (1), + slidescreen (1), + hypercube (1), + flame (1), + maze (1), + ico (1), + xdaliclock (1), + xbouncebits (1), + xswarm (1), + xwave (1), + xfishtank (1) + +2 BUGS +If you are not using XIdle, and an application does not +select KeyPress events on its non-leaf windows within the first + 30 seconds of their existence, but selects them later, then it is +possible that xscreensaver could interfere with the propagation +of those events. This isn't very likely, but this is the reason that +it's a good idea to install the XIdle extension. + +Although this program ``nices'' the subprocesses that it starts, +graphics-intensive subprograms can still overload the machine by causing +the X server process itself (which is not ``niced'') to suck a lot of +cycles. Care should be taken to slow down programs intended for use as +screensavers by inserting strategic calls to + sleep (3) or usleep (3). + +Also, it will cause your X server to be pretty much permanently swapped in. +(but the same is true of any program that draws periodically, like xclock or +xload.) + +If the subprocess is drawing too quickly and the connection to the X +server is a slow one (such as an X terminal running over a phone line) then +the screensaver might not turn off right away when the user becomes active +again (the ico (1) demo has this problem if being run in full-speed mode). +This can be alleviated by inserting strategic calls to XSync (3) +in code intended for use as a screensaver. This prevents too much graphics +activity from being buffered up. + +The screensaver only runs on the default screen of the display. If you have +more than one screen, you can run multiple screensaver processes, one for +each screen. This interacts poorly with locking. In an ideal world, the +screensaver would save (and lock) both screens simultaniously, and any activity +would restore both screens. It would be nice if one could run different hacks +on each screen simultaniously. However, I don't have access to a multi-headed +workstation, so it would be hard for me to implement something like this. + +If you don't have Motif, you can't compile with support for locking or +demo mode. + +When the Run Next and Run Previous buttons are used, the selected +item may not be visible in the window. It's a Motif bug that selecting a +different item doesn't scroll the list to show the new selected item. + +Locking doesn't work if the screensaver is launched by xdm. + +If you get an error message like ``couldn't get password of foo'' then +this probably means that you're on a system in which the getpwent (3) +library routine can only be effectively used by root. If this is the case, +then xscreensaver must be installed as setuid to root. Care has +been taken to make this a safe thing to do. + +There need to be a lot more graphics hacks. In particular, there should be +a simulation of a Lavalite (tm). + +The installColormap option doesn't work very well with the twm (1) +window manager and its descendants. There is a race condition between the +screensaver and this window manager, which can result in the screensaver's +colormap not getting installed properly, meaning the graphics hacks will +appear in essentially random colors. The mwm (1) and olwm (1) +window managers don't seem to have this problem. The race condition exists +because X apparently does not provide a way for an OverrideRedirect window to +have its own colormap, short of grabbing the server (which is neither a good +idea, nor really possible with the current design.) What happens is that, as +soon as the screensaver installs its colormap, twm responds to +the ColormapNotify event that is generated by re-instaling the default +colormap. Apparently, twm doesn't always do this; it seems to do +it regularly if the screensaver is activated from a menu item, but seems to +not do it if the screensaver comes on of its own volition, or is activated +from another console. Any thoughts on this problem are welcome... + +The installColormap option has no effect in "demo" mode, since the +dialog boxes allocate their colors out of the screen's default colormap +instead of the installed colormap. + +For this same reason, locking doesn't work too well along +with installColormap; the dialog box's colors are random. + +Apparently there are some problems with ``XView'' programs getting confused +and thinking that the screensaver window is the real root window even when +the screensaver is not active: ClientMessages intended for the window manager +are sent to the screensaver window instead. This could be solved by making +xscreensaver forward all unrecognised ClientMessages to the real root window, +but there may be other problems as well. + +2 COPYRIGHT +Copyright (co 1992, 1993, 1994 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. + +2 AUTHOR +Jamie Zawinski , 13-aug-92. +Please let me know if you find any bugs or make any improvements. + +Thanks to David Wojtowicz for implementing lockTimeout. + +Thanks to Martin Kraemer for adding support for shadow passwords and +locking-disabled diagnostics. + +2 VMS_PORT + +Patrick MOREAU - CENA/Athis-Mons - FRANCE (pmoreau@cena.dgac.fr) diff --git a/driver/xscreensaver.man b/driver/xscreensaver.man new file mode 100755 index 00000000..3d13f3df --- /dev/null +++ b/driver/xscreensaver.man @@ -0,0 +1,477 @@ +.de EX \"Begin example +.ne 5 +.if n .sp 1 +.if t .sp .5 +.nf +.in +.5i +.. +.de EE +.fi +.in -.5i +.if n .sp 1 +.if t .sp .5 +.. +.TH XScreenSaver 1 "12-May-94" "X Version 11" +.SH NAME +xscreensaver - run graphics hacks after the user has been idle for a while +.SH SYNOPSIS +.B xscreensaver +[\-display \fIhost:display.screen\fP] [\-timeout \fIint\fP] [\-cycle \fIint\fP] [\-nice \fIint\fP] [\-verbose] [\-silent] [\-xidle] [\-no-xidle] [\-lock] [\-no-lock] [\-lock\-timeout \fIint\fP] [\-demo] [\-visual \fIvisual\fP] [\-xrm \fIresources\fP] +.SH DESCRIPTION +The \fIxscreensaver\fP program waits until the keyboard and mouse have been +idle for a period, and then runs a graphics demo chosen at random. It +turns off as soon as there is any mouse or keyboard activity. + +This program can lock your terminal in order to prevent others from using it, +though its default mode of operation is merely to display pretty pictures on +your screen when it is not in use. + +The benefit that this program has over the combination of the +.BR xlock (1) +and +.BR xautolock (1) +programs is the ease with which new graphics hacks can be installed. You +don't need to recompile (or even re-run) this program to add a new display +mode. +.SH OPTIONS +.I xscreensaver +accepts the following options: +.TP 8 +.B \-timeout \fIminutes\fP +The screensaver will activate after the keyboard and mouse have been idle +for this many minutes. +.TP 8 +.B \-cycle \fIminutes\fP +After the screensaver has been running for this many minutes, the currently +running sub-process will be killed (with \fBSIGTERM\fP), and a new one +started. If this is 0, then the sub-process will not be killed; only one +demo will run until the screensaver is deactivated by user activity. +.TP 8 +.B \-nice \fIinteger\fP +The sub-processes created by \fIxscreensaver\fP will be ``niced'' to this +level, so that they do not consume cycles that are needed elsewhere. +.TP 8 +.B \-verbose +Print diagnostics. +.TP 8 +.B \-silent + +.TP 8 +.B \-xidle +Use the \fIXIdle\fP server extension to decide whether the user is idle. +This is the default if \fIxscreensaver\fP has been compiled with support +for XIdle. The XIdle method is faster and more reliable than what will +be done otherwise, so use it if you can. +.TP 8 +.B \-no\-xidle +Don't use \fIXIdle\fP. +.TP 8 +.B \-lock +Enable locking: before the screensaver will turn off, it requires you to +type the password of the person who launched the screensaver, or the root +password. (Note: this doesn't work if the screensaver is launched +by +.BR xdm (1) +because it can't know the user-id of the logged-in user.) +.TP 8 +.B \-no\-lock +Disable locking. This is the default. +.TP 8 +.B \-lock\-timeout \fIminutes\fP +This is how long after the screensaver activates that locking is enabled. +For example, if this is 5, then any user activity within five minutes of +the time when the screensaver activated will cause the screen to unblank +without requiring a password. After 5 minutes, a password will be +required. The default is 0, meaning that if locking is enabled, then +a password will be required as soon as the screensaver activates. +.TP 8 +.B \-visual \fIvisual\fP +Specify which visual to use. Legal values are: +.RS 8 +.TP 8 +.B best +Use the visual which supports the most writable color cells; this is +the default. +.TP 8 +.B default +Use the screen's default visual (the visual of the root window.) This is +not necessarily the most colorful visual, which is why it is not the default. +.TP 8 +.I class +One of \fBStaticGray\fP, \fBStaticColor\fP, \fBTrueColor\fP, \fBGrayScale\fP, +\fBPseudoColor\fP, or \fBDirectColor\fP. Selects the deepest visual of +the given class. +.TP 8 +.I number +A number (decimal or hex) is interpreted as a visual id number, as reported +by the +.BR xdpyinfo (1) +program; in this way you can select a shallower visual if desired. +.RE +.TP 8 +.B \-demo +Enter the interactive demo mode immediately after startup. Normally +demo mode is invoked via the +.BR xscreensaver\-command (1) +program. +.SH X RESOURCES +\fIxscreensaver\fP understands the following resources: +.PP +.TP 8 +.B timeout \fR(class \fBTime\fP) +Same as the \fI\-timeout\fP command-line option. Default 10 minutes. +.TP 8 +.B cycle \fR(class \fBTime\fP) +Same as the \fI\-cycle\fP command-line option. Default 10 minutes. +.TP 8 +.B nice \fR(class \fBNice\fP) +Same as the \fI\-nice\fP command-line option. Default 10. +.TP 8 +.B verbose \fR(class \fBBoolean\fP) +Same as the \fI\-verbose\fP command-line option. +.TP 8 +.B xidle \fR(class \fBBoolean\fP) +Same as the \fI\-xidle\fP command-line option. +.TP 8 +.B lock \fR(class \fBBoolean\fP) +Same as the \fI\-lock\fP command-line option. +.TP 8 +.B lockTimeout \fR(class \fBTime\fP) +Same as the \fI\-lock\-timeout\fP command-line option. +.TP 8 +.B fade \fR(class \fBBoolean\fP) +If this is true, then when the screensaver activates, the current contents +of the screen will fade to black instead of simply winking out. This only +works on displays with writable colormaps. Default true. A fade will also +be done when switching graphics hacks (when the \fIcycle\fP timer expires.) +.TP 8 +.B unfade \fR(class \fBBoolean\fP) +If this is true, then when the screensaver deactivates, the original contents +of the screen will fade in from black instead of appearing immediately. This +only works on displays with writable colormaps, and if \fIfade\fP is true +as well. Default false. +.TP 8 +.B fadeSeconds \fR(class \fBTime\fP) +If \fIfade\fP is true, this is how long the fade will be in +seconds (default 1.) +.TP 8 +.B fadeTicks \fR(class \fBInteger\fP) +If \fIfade\fP is true, this is how many times a second the colormap will +be changed to effect a fade. Higher numbers yield smoother fades, but +may make the fades take longer if your server isn't fast enough to keep +up. Default 75. +.TP 8 +.B installColormap \fR(class \fBBoolean\fP) +Whether a new colormap should be installed while the screensaver is on, +so that the graphics hacks can get as many colors as possible. Default +false. +.TP 8 +.B passwdTimeout \fR(class \fBTime\fP) +If \fIlock\fP is true, this is how many seconds the password dialog box +should be left on the screen before giving up (default 30.) This should +not be too large: the X server is grabbed for the duration that the password +dialog box is up (for security purposes) and leaving the server grabbed for +too long can cause problems. +.TP 8 +.B visualID \fR(class \fBVisualID\fP) +Same as the \fI\-visual\fP command-line option. Default \fBbest\fP. + +.TP 8 +.B programs \fR(class \fBPrograms\fP) +The graphics hacks which \fIxscreensaver\fP runs when the user is idle. +The value of this resource is a string, one \fIsh\fP command per line. +Each line must contain exactly one command -- no semicolons. + +When the screensaver starts up, one of these is selected at random, and +run. After the \fIcycle\fP period expires, it is killed, and another +is selected and run. + +If the value of this resource (and the applicable one of \fBcolorPrograms\fP +or \fBmonoPrograms\fP) is empty, then no programs will be run; the screen +will simply be made black. + +Note that you must escape the newlines; here is an example of how you +might set this in your \fI.Xdefaults\fP file: +.EX +xscreensaver.programs: \\ + qix -root \\n\\ + ico -r -faces -sleep 1 -obj ico \\n\\ + xdaliclock -builtin2 -root \\n\\ + xwave -root +.EE +To use a program as a screensaver, two things are required: that that +program draw on the root window (or be able to be configured to draw on +the root window); and that that program understand ``virtual root'' +windows, as used by virtual window managers such as \fItvtwm\fP. + +It is quite easy to make programs understand virtual roots if they +don't already: you merely need to include the file \fI"vroot.h"\fP in +them after the standard X includes, and recompile. This file is distributed +with X11r5, and is included with xscreensaver as well. +.TP 8 +.B monoPrograms \fR(class \fBMonoPrograms\fP) +This resource is appended to the value of the \fIprograms\fP resource if +the display on which the screensaver is running is monochrome. +.TP 8 +.B colorPrograms \fR(class \fBColorPrograms\fP) +This resource is appended to the value of the \fIprograms\fP resource if +the display on which the screensaver is running is not monochrome. +.PP +Normally you won't need to change the following resources: +.TP 8 +.B bourneShell \fR(class \fBBourneShell\fP) +The pathname of the shell that \fIxscreensaver\fP uses to start subprocesses. +This must be whatever your local variant of \fB/bin/sh\fP is -- in particular, +it must not be \fBcsh\fP. +.TP 8 +.B windowCreationTimeout \fR(class \fBTime\fP) +When \fIXIdle\fP is not in use, this controls the delay between when +windows are created and when \fIxscreensaver\fP selects events on them. +Default 30 seconds. +.TP 8 +.B pointerPollTime \fR(class \fBTime\fP) +When \fIXIdle\fP is not in use, this controls how frequently \fIxscreensaver\fP +checks to see if the mouse position or buttons have changed. Default 5 seconds. +.TP 8 +.B initialDelay \fR(class \fBTime\fP) +When \fIXIdle\fP is not in use, \fIxscreensaver\fP will wait this many seconds +before selecting events on existing windows, under the assumption that +\fIxscreensaver\fP is started during your login procedure, and the window +state may be in flux. Default 30 seconds. +.SH "HOW IT WORKS" +When it is time to activate the screensaver, a full-screen black window is +created. This window is given the appropriate properties so that, to any +subsequently-created programs, it will appear to be a ``virtual root'' +window. Because of this, any program which draws on the root window (and +which understands virtual roots) can be used as a screensaver. +.PP +When the user becomes active again, the screensaver window is unmapped and +the running subprocess is killed by sending it \fBSIGTERM\fP. This is also +how the subprocesses are killed when the screensaver decides that it's time +to run a different demo: the old one is killed and a new one is launched. +.PP +Before launching a subprocess, \fIxscreensaver\fP stores an appropriate value +for \fB$DISPLAY\fP in the environment that the child will recieve. (This is +so that if you start \fIxscreensaver\fP with a \fI-display\fP argument, the +programs which \fIxscreensaver\fP launches will draw on the same display.) +.PP +When the screensaver turns off, or is killed, care is taken to restore +the ``real'' virtual root window if there is one. Because of this, it is +important that you not kill the screensaver process with \fIkill -9\fP if +you are running a virtual-root window manager. If you kill it with \-9, +you may need to restart your window manager to repair the damage. This +isn't an issue if you aren't running a virtual-root window manager. +.PP +For all the gory details, see the commentary at the top of xscreensaver.c. +.PP +You can control a running screensaver process by using the +.BR xscreensaver\-command (1) +program (which see.) +.SH ENVIRONMENT +.PP +.TP 8 +.B DISPLAY +to get the default host and display number. +.TP 8 +.B XENVIRONMENT +to get the name of a resource file that overrides the global resources +stored in the RESOURCE_MANAGER property. +.SH USING XDM(1) +You can run \fIxscreensaver\fP from your xdm session, so that the +screensaver will run even when nobody is logged in on the console. +Simply add \fB"xscreensaver &"\fP to your \fI/usr/lib/X11/xdm/Xsetup\fP +file. Because \fIxdm\fP grabs the keyboard, keypresses will not make +the screensaver deactivate, but any mouse activity will. +.PP +Users may want to add \fB"xscreensaver-command -restart"\fP to their +startup scripts, so that the screensaver will be reinitialized with +their private resource settings when they log in. +.PP +It is safe to run this program as root (as \fIxdm\fP is likely to do.) If +run as root, \fIxscreensaver\fP changes its effective user and group ids to +something safe (like \fI"nobody"\fP) before connecting to the X server +or launching user-specified programs. +.PP +Locking doesn't work if the screensaver is launched by \fIxdm\fP. To get +around this, you can run the screensaver from \fIxdm\fP without locking, +and kill and restart it from your personal X startup script to enable +locking. +.SH DEMO MODE +If \fIxscreensaver\fP receives the \fBDEMO\fP ClientMessage, it pops up +a dialog box from which you can examine and experiment with the screensaver's +client programs. +.PP +Clicking left on an element in the scrolling list will place the indicated +program and its args in the text field to be edited. Edit the arguments and +hit return to run the program with the parameters you have specified. +.PP +Double-clicking on an element in the scrolling list will run the indicated +program immediately. +.PP +When a client program is launched, the dialog box is hidden. Clicking +any mouse button will re-expose the dialog box (but will not kill the +client program.) +.TP 8 +.B Run Next +Clicking this button will run the next program in the list after the +currently-selected one, and will scroll around to the top when it reaches +the bottom. +.TP 8 +.B Run Previous +Opposite of Run Next; at the top, it scrolls around to the bottom. +.TP 8 +.B Edit Parameters +This pops up a second dialog box, in which you have the option to +interactively change most of the screensaver's operational parameters, +such as its timeouts, and whether it should hack colormaps. Changing +these parameters here will affect only the running \fIxscreensaver\fP +process; to make the changes permanent, you need to edit your X resource +file. +.TP 8 +.B Exit Demo Mode +Returns to normal screensaver operation. +.TP 8 +.B Reinitialize +Causes the screensaver process to exit and then restart with the same +command-line arguments. This causes the X resource database to be +re-read. This is just like the \fI\-restart\fP argument to +.BR xscreensaver\-command (1) +except that when executed from this button, the screensaver will +automatically return to demo mode after restarting. +.SH SEE ALSO +.BR X (1), +.BR xscreensaver\-command (1), +.BR xlock (1), +.BR xnlock (1), +.BR xautolock (1), +.BR xdm (1), +.BR qix (1), +.BR pyro (1), +.BR helix (1), +.BR rorschach (1), +.BR hopalong (1), +.BR attraction (1), +.BR greynetic (1), +.BR rocks (1), +.BR noseguy (1), +.BR blitspin (1), +.BR imsmap (1), +.BR slidescreen (1), +.BR hypercube (1), +.BR flame (1), +.BR maze (1), +.BR ico (1), +.BR xdaliclock (1), +.BR xbouncebits (1), +.BR xswarm (1), +.BR xwave (1), +.BR xfishtank (1) +.SH BUGS +If you are not using \fIXIdle\fP, and an application does not +select \fBKeyPress\fP events on its non-leaf windows within the first +30 seconds of their existence, but selects them later, then it is +possible that \fIxscreensaver\fP could interfere with the propagation +of those events. This isn't very likely, but this is the reason that +it's a good idea to install the \fIXIdle\fP extension. +.PP +Although this program ``nices'' the subprocesses that it starts, +graphics-intensive subprograms can still overload the machine by causing +the X server process itself (which is not ``niced'') to suck a lot of +cycles. Care should be taken to slow down programs intended for use as +screensavers by inserting strategic calls to +.BR sleep (3) +or +.BR usleep (3) +\. + +Also, it will cause your X server to be pretty much permanently swapped in. +(but the same is true of any program that draws periodically, like xclock or +xload.) +.PP +If the subprocess is drawing too quickly and the connection to the X +server is a slow one (such as an X terminal running over a phone line) then +the screensaver might not turn off right away when the user becomes active +again (the +.BR ico (1) +demo has this problem if being run in full-speed mode). This can be +alleviated by inserting strategic calls to +.BR XSync (3) +in code intended for use as a screensaver. This prevents too much graphics +activity from being buffered up. +.PP +The screensaver only runs on the default screen of the display. If you have +more than one screen, you can run multiple screensaver processes, one for +each screen. This interacts poorly with locking. In an ideal world, the +screensaver would save (and lock) both screens simultaniously, and any activity +would restore both screens. It would be nice if one could run different hacks +on each screen simultaniously. However, I don't have access to a multi-headed +workstation, so it would be hard for me to implement something like this. +.PP +If you don't have Motif, you can't compile with support for locking or +demo mode. +.PP +When the \fBRun Next\fP and \fBRun Previous\fP buttons are used, the selected +item may not be visible in the window. It's a Motif bug that selecting a +different item doesn't scroll the list to show the new selected item. +.PP +Locking doesn't work if the screensaver is launched by \fIxdm\fP. +.PP +If you get an error message like ``couldn't get password of foo'' then +this probably means that you're on a system in which the +.BR getpwent (3) +library routine can only be effectively used by root. If this is the case, +then \fIxscreensaver\fP must be installed as setuid to root. Care has +been taken to make this a safe thing to do. +.PP +There need to be a lot more graphics hacks. In particular, there should be +a simulation of a Lavalite (tm). +.PP +The \fBinstallColormap\fP option doesn't work very well with the +.BR twm (1) +window manager and its descendants. There is a race condition between the +screensaver and this window manager, which can result in the screensaver's +colormap not getting installed properly, meaning the graphics hacks will +appear in essentially random colors. The +.BR mwm (1) +and +.BR olwm (1) +window managers don't seem to have this problem. The race condition exists +because X apparently does not provide a way for an OverrideRedirect window to +have its own colormap, short of grabbing the server (which is neither a good +idea, nor really possible with the current design.) What happens is that, as +soon as the screensaver installs its colormap, \fBtwm\fP responds to +the \fBColormapNotify\fP event that is generated by re-instaling the default +colormap. Apparently, \fBtwm\fP doesn't \fIalways\fP do this; it seems to do +it regularly if the screensaver is activated from a menu item, but seems to +not do it if the screensaver comes on of its own volition, or is activated +from another console. Any thoughts on this problem are welcome... +.PP +The \fBinstallColormap\fP option has no effect in "demo" mode, since the +dialog boxes allocate their colors out of the screen's default colormap +instead of the installed colormap. +.PP +For this same reason, locking doesn't work too well along +with \fBinstallColormap\fP; the dialog box's colors are random. +.PP +Apparently there are some problems with ``XView'' programs getting confused +and thinking that the screensaver window is the real root window even when +the screensaver is not active: ClientMessages intended for the window manager +are sent to the screensaver window instead. This could be solved by making +xscreensaver forward all unrecognised ClientMessages to the real root window, +but there may be other problems as well. +.SH COPYRIGHT +Copyright \(co 1992, 1993, 1994 by Jamie Zawinski. Permission to use, copy, +modify, distribute, and sell this software and its documentation for any +purpose is hereby granted without fee, provided that the above copyright +notice appear in all copies and that both that copyright notice and this +permission notice appear in supporting documentation. No representations are +made about the suitability of this software for any purpose. It is provided +"as is" without express or implied warranty. +.SH AUTHOR +Jamie Zawinski , 13-aug-92. +Please let me know if you find any bugs or make any improvements. + +Thanks to David Wojtowicz for implementing \fIlockTimeout\fP. + +Thanks to Martin Kraemer for adding support for shadow passwords and +locking-disabled diagnostics. diff --git a/driver/xscreensaver_ad.h b/driver/xscreensaver_ad.h new file mode 100755 index 00000000..5eefc623 --- /dev/null +++ b/driver/xscreensaver_ad.h @@ -0,0 +1,101 @@ +"*timeout: 10", +"*cycle: 10", +"*lockTimeout: 0", +"*passwdTimeout: 30", +"*nice: 10", +"*lock: False", +"*verbose: False", +"*fade: True", +"*unfade: False", +"*fadeSeconds: 1", +"*fadeTicks: 75", +"*installColormap: False", +"*programs: qix -root \\n\ + qix -root -solid -delay 0 -segments 100 \\n\ + qix -root -linear -count 10 -size 100 -segments 200 \\n\ + attraction -root -mode balls \\n\ + attraction -root -mode lines -points 3 -segments 200 \\n\ + attraction -root -mode splines -segments 300 \\n\ + attraction -root -mode lines -radius 300 \ + -orbit -vmult 0.5 \\n\ + pyro -root \\n\ + helix -root \\n\ + rorschach -root -offset 7 \\n\ + hopalong -root \\n\ + greynetic -root -delay 1000 \\n\ + xroger -root \\n\ + imsmap -root \\n\ + slidescreen -root \\n\ + decayscreen -root \\n\ + hypercube -root \\n\ + halo -root \\n\ + maze -root \\n\ + flame -root \\n", +"*monoPrograms: qix -root -linear -count 5 -size 200 -spread 30 \ + -segments 75 -solid -xor \\n\ + rocks -root \\n\ + noseguy -root \\n", +"*colorPrograms: qix -root -count 4 -solid -transparent \\n\ + qix -root -count 5 -solid -transparent -linear \ + -segments 250 -size 100 \\n\ + attraction -root -mode polygons \\n\ + attraction -root -mode filled-splines -segments 0 \\n\ + attraction -root -glow -points 10 \\n\ + rocks -root -fg lightblue \\n\ + noseguy -root -fg yellow -bg gray30 \\n", +"*fontList: *-helvetica-medium-r-*-*-*-120-*-*-*-iso8859-1", +"*demoDialog*label1.fontList: *-helvetica-medium-r-*-*-*-140-*-*-*-iso8859-1", +"*passwdDialog*fontList: *-helvetica-medium-r-*-*-*-140-*-*-*-iso8859-1", +"*XmList.fontList: *-courier-medium-r-*-*-*-120-*-*-*-iso8859-1", +"*XmTextField.fontList: *-courier-medium-r-*-*-*-120-*-*-*-iso8859-1", +"*passwdDialog.passwdText.fontList: *-courier-medium-r-*-*-*-120-*-*-*-iso8859-1", +"*XmDialogShell*foreground: black", +"*XmDialogShell*background: gray90", +"*XmDialogShell*XmTextField.foreground: black", +"*XmDialogShell*XmTextField.background: white", +"*XmDialogShell*demoList.foreground: black", +"*XmDialogShell*demoList.background: white", +"*XmDialogShell*rogerLabel.foreground: red3", +"*XmDialogShell*rogerLabel.background: white", +"*XmDialogShell.title: XScreenSaver", +"*allowShellResize: True", +"*autoUnmanage: False", +"*demoDialog.maxWidth: 600", +"*label1.labelString: XScreenSaver %s", +"*label2.labelString: Copyright © 1991-1994 by Jamie Zawinski ", +"*demoList.visibleItemCount: 10", +"*demoList.automaticSelection: True", +"*next.labelString: Run Next", +"*prev.labelString: Run Previous", +"*edit.labelString: Edit Parameters", +"*done.labelString: Exit Demo Mode", +"*restart.labelString: Reinitialize", +"*resourcesLabel.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", +"*resourcesForm*XmTextField.columns: 8", +"*verboseToggle.labelString: Verbose", +"*cmapToggle.labelString: Install Colormap", +"*fadeToggle.labelString: Fade Colormap", +"*unfadeToggle.labelString: Unfade Colormap", +"*lockToggle.labelString: Require Password", +"*resourcesDone.labelString: Done", +"*resourcesCancel.labelString: Cancel", +"*passwdDialog.title: Password", +"*passwdLabel1.labelString: XScreenSaver %s", +"*passwdLabel2.labelString: This display is locked.", +"*passwdLabel3.labelString: Please type %s's password to unlock it.", +"*passwdDone.labelString: Done", +"*passwdCancel.labelString: Cancel", +"*passwdLabel1.alignment: ALIGNMENT_BEGINNING", +"*passwdLabel2.alignment: ALIGNMENT_BEGINNING", +"*passwdLabel3.alignment: ALIGNMENT_BEGINNING", +"*rogerLabel.width: 150", +"*pointerPollTime: 5", +"*initialDelay: 30", +"*windowCreationTimeout: 30", +"*bourneShell: /bin/sh", diff --git a/hacks/.gdbinit b/hacks/.gdbinit new file mode 100755 index 00000000..0bd01420 --- /dev/null +++ b/hacks/.gdbinit @@ -0,0 +1,3 @@ +b exit +b abort +set args -geom =700x700+0+0 diff --git a/hacks/aaa_vms.notes b/hacks/aaa_vms.notes new file mode 100755 index 0000000000000000000000000000000000000000..f5d27ad7669e46b05952a0a8749a440db136b860 GIT binary patch literal 664 zcmah{U2oGc6unRUj>8LT(dw~{A`J*C{=cO)WZ8RTe34Avl zn$GzUmnx*M<2g!WS?x4((=?$U?$B&a%?{oSr~#%)=`ZL%fTIBkFK|?eL%?{F+V}5W z%eg8KaHa{eo|Mmnz_Flrw3d5@L~YC-(&NYE=PFs>FGZZCy^frV&axoND7%_D^u&_i zft0k|*B@2EMNb_M(dM)_Wh$nVbBscW7#HGvJiLiE%c1&7oMCjG#E5A@AH|39aTon^ zW$jEazEw3NP^>WYA$0Y_1zu4N43{_aR@M3 z^oA1s%N$OKu4pN}Rrwxic9%r=m>^CT(P`u>|`!VJ0|)AI84p! literal 0 HcmV?d00001 diff --git a/hacks/attraction.c b/hacks/attraction.c new file mode 100755 index 00000000..f5f1c2af --- /dev/null +++ b/hacks/attraction.c @@ -0,0 +1,611 @@ +/* xscreensaver, Copyright (c) 1992 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. + */ + +/* Simulation of a pair of quasi-gravitational fields, maybe sorta kinda + a little like the strong and weak electromagnetic forces. Derived from + a Lispm screensaver by John Pezaris . + + John sez: + + The simulation started out as a purely accurate gravitational simulation, + but, with constant simulation step size, I quickly realized the field being + simulated while grossly gravitational was, in fact, non-conservative. It + also had the rather annoying behavior of dealing very badly with colliding + orbs. Therefore, I implemented a negative-gravity region (with two + thresholds; as I read your code, you only implemented one) to prevent orbs + from every coming too close together, and added a viscosity factor if the + speed of any orb got too fast. This provides a nice stable system with + interesting behavior. + + I had experimented with a number of fields including the van der Waals + force (very interesting orbiting behavior) and 1/r^3 gravity (not as + interesting as 1/r^2). An even normal viscosity (rather than the + thresholded version to bleed excess energy) is also not interesting. + The 1/r^2, -1/r^2, -10/r^2 thresholds proved not only robust but also + interesting -- the orbs never collided and the threshold viscosity fixed + the non-conservational problem. + */ + +#include "screenhack.h" +#include "spline.h" +#include +#include +#ifdef VMS +#define M_PI 3.14159265358979323846 +#endif +#if __STDC__ +#include /* for M_PI */ +#endif + +struct ball { + float x, y; + float vx, vy; + float dx, dy; + float mass; + int size; + XColor color; + int hue; +}; + +static unsigned int default_fg_pixel; +static struct ball *balls; +static int npoints; +static int threshold; +static int delay; +static int global_size; +static int segments; +static Bool glow_p; +static Bool orbit_p; +static XPoint *point_stack; +static int point_stack_size, point_stack_fp, pixel_stack_fp, pixel_stack_size; +static unsigned long *pixel_stack; +static unsigned int color_shift; + +static enum object_mode { + ball_mode, line_mode, polygon_mode, spline_mode, spline_filled_mode, + tail_mode +} mode; + +static enum color_mode { + cycle_mode, random_mode +} cmode; + +static GC draw_gc, erase_gc; + +#define MAX_SIZE 16 + +#define min(a,b) ((a)<(b)?(a):(b)) +#define max(a,b) ((a)>(b)?(a):(b)) + +static void +init_balls (dpy, window) + Display *dpy; + Window window; +{ + int i; + XWindowAttributes xgwa; + XGCValues gcv; + int xlim, ylim, midx, midy, r, vx, vy; + double th; + Colormap cmap; + char *mode_str; + XGetWindowAttributes (dpy, window, &xgwa); + xlim = xgwa.width; + ylim = xgwa.height; + cmap = xgwa.colormap; + midx = xlim/2; + midy = ylim/2; + r = get_integer_resource ("radius", "Integer"); + if (r <= 0 || r > min (xlim/2, ylim/2)) + r = min (xlim/2, ylim/2) - 50; + vx = get_integer_resource ("vx", "Integer"); + vy = get_integer_resource ("vy", "Integer"); + npoints = get_integer_resource ("points", "Integer"); + if (npoints < 1) + npoints = 3 + (random () % 5); + balls = (struct ball *) malloc (npoints * sizeof (struct ball)); + segments = get_integer_resource ("segments", "Integer"); + if (segments < 0) segments = 1; + threshold = get_integer_resource ("threshold", "Integer"); + if (threshold < 0) threshold = 0; + delay = get_integer_resource ("delay", "Integer"); + if (delay < 0) delay = 0; + global_size = get_integer_resource ("size", "Integer"); + if (global_size < 0) global_size = 0; + glow_p = get_boolean_resource ("glow", "Boolean"); + orbit_p = get_boolean_resource ("orbit", "Boolean"); + color_shift = get_integer_resource ("colorShift", "Integer"); + if (color_shift >= 360) color_shift = 5; + + mode_str = get_string_resource ("mode", "Mode"); + if (! mode_str) mode = ball_mode; + else if (!strcmp (mode_str, "balls")) mode = ball_mode; + else if (!strcmp (mode_str, "lines")) mode = line_mode; + else if (!strcmp (mode_str, "polygons")) mode = polygon_mode; + else if (!strcmp (mode_str, "tails")) mode = tail_mode; + else if (!strcmp (mode_str, "splines")) mode = spline_mode; + else if (!strcmp (mode_str, "filled-splines")) mode = spline_filled_mode; + else { + fprintf (stderr, + "%s: mode must be balls, lines, tails, polygons, splines, or\n\ + filled-splines, not \"%s\"\n", + progname, mode_str); + exit (1); + } + + mode_str = get_string_resource ("colorMode", "ColorMode"); + if (! mode_str) cmode = cycle_mode; + else if (!strcmp (mode_str, "cycle")) cmode = cycle_mode; + else if (!strcmp (mode_str, "random")) cmode = random_mode; + else { + fprintf (stderr, "%s: colorMode must be cycle or random, not \"%s\"\n", + progname, mode_str); + exit (1); + } + + if (mode != ball_mode && mode != tail_mode) glow_p = False; + + if (mode == polygon_mode && npoints < 3) + mode = line_mode; + + if (mode != ball_mode) + { + int size = (segments ? segments : 1); + point_stack_size = size * (npoints + 1); + point_stack = (XPoint *) calloc (point_stack_size, sizeof (XPoint)); + point_stack_fp = 0; + if (segments > 0) + pixel_stack_size = segments; + else + pixel_stack_size = (360 / color_shift); + pixel_stack = (unsigned long *) + calloc (pixel_stack_size, sizeof (unsigned int)); + pixel_stack_fp = 0; + } + + gcv.line_width = (mode == tail_mode + ? (global_size ? global_size : (MAX_SIZE * 2 / 3)) + : 1); + gcv.cap_style = (mode == tail_mode ? CapRound : CapButt); + + gcv.foreground = default_fg_pixel = + get_pixel_resource ("foreground", "Foreground", dpy, cmap); + draw_gc = XCreateGC (dpy, window, GCForeground|GCLineWidth|GCCapStyle, &gcv); + gcv.foreground = get_pixel_resource ("background", "Background", dpy, cmap); + erase_gc = XCreateGC (dpy, window, GCForeground|GCLineWidth|GCCapStyle,&gcv); + + if (!mono_p && mode != ball_mode) + for (i = 0; i < pixel_stack_size; i++) + { + XColor color; + color.pixel = default_fg_pixel; + XQueryColor (dpy, cmap, &color); + if (!XAllocColor (dpy, cmap, &color)) abort (); + pixel_stack [i] = color.pixel; + } + +#define rand_size() min (MAX_SIZE, 8 + (random () % (MAX_SIZE - 9))) + + if (orbit_p && !global_size) + /* To orbit, all objects must be the same mass, or the math gets + really hairy... */ + global_size = rand_size (); + + th = frand (M_PI+M_PI); + for (i = 0; i < npoints; i++) + { + int new_size = (global_size ? global_size : rand_size ()); + balls [i].dx = 0; + balls [i].dy = 0; + balls [i].size = new_size; + balls [i].mass = (new_size * new_size * 10); + balls [i].x = midx + r * cos (i * ((M_PI+M_PI) / npoints) + th); + balls [i].y = midy + r * sin (i * ((M_PI+M_PI) / npoints) + th); + if (! orbit_p) + { + balls [i].vx = vx ? vx : ((6.0 - (random () % 11)) / 8.0); + balls [i].vy = vy ? vy : ((6.0 - (random () % 11)) / 8.0); + } + balls [i].color.pixel = default_fg_pixel; + balls [i].color.flags = DoRed | DoGreen | DoBlue; + if (!mono_p) + { + if (i != 0 && (glow_p || mode != ball_mode)) + balls [i].hue = balls [0].hue; + else + balls [i].hue = random () % 360; + hsv_to_rgb (balls [i].hue, 1.0, 1.0, + &balls [i].color.red, &balls [i].color.green, + &balls [i].color.blue); + if (!XAllocColor (dpy, cmap, &balls [i].color)) + mono_p = True; /* just give up */ + } + } + + if (orbit_p) + { + double a = 0; + double v; + double v_mult = get_float_resource ("vMult", "Float"); + if (v_mult == 0.0) v_mult = 1.0; + + for (i = 1; i < npoints; i++) + { + double _2ipi_n = (2 * i * M_PI / npoints); + double x = r * cos (_2ipi_n); + double y = r * sin (_2ipi_n); + double distx = r - x; + double dist2 = (distx * distx) + (y * y); + double dist = sqrt (dist2); + double a1 = ((balls[i].mass / dist2) * + ((dist < threshold) ? -1.0 : 1.0) * + (distx / dist)); + a += a1; + } + if (a < 0.0) + { + fprintf (stderr, "%s: domain error: forces on balls too great\n", + progname); + exit (-1); + } + v = sqrt (a * r) * v_mult; + for (i = 0; i < npoints; i++) + { + double k = ((2 * i * M_PI / npoints) + th); + balls [i].vx = -v * sin (k); + balls [i].vy = v * cos (k); + } + } + + if (mono_p) glow_p = False; + XClearWindow (dpy, window); +} + +static void +compute_force (i, dx_ret, dy_ret) + int i; + float *dx_ret, *dy_ret; +{ + int j; + *dx_ret = 0; + *dy_ret = 0; + for (j = 0; j < npoints; j++) + { + float x_dist, y_dist, dist, dist2; + + if (i == j) continue; + x_dist = balls [j].x - balls [i].x; + y_dist = balls [j].y - balls [i].y; + dist2 = (x_dist * x_dist) + (y_dist * y_dist); + dist = sqrt (dist2); + + if (dist > 0.1) /* the balls are not overlapping */ + { + float new_acc = ((balls[j].mass / dist2) * + ((dist < threshold) ? -1.0 : 1.0)); + float new_acc_dist = new_acc / dist; + *dx_ret += new_acc_dist * x_dist; + *dy_ret += new_acc_dist * y_dist; + } + else + { /* the balls are overlapping; move randomly */ + *dx_ret += (frand (10.0) - 5.0); + *dy_ret += (frand (10.0) - 5.0); + } + } +} + +static void +run_balls (dpy, window) + Display *dpy; + Window window; +{ + int last_point_stack_fp = point_stack_fp; + static int tick = 500, xlim, ylim; + static Colormap cmap; + int i; + + if (tick++ == 500) + { + XWindowAttributes xgwa; + XGetWindowAttributes (dpy, window, &xgwa); + tick = 0; + xlim = xgwa.width; + ylim = xgwa.height; + cmap = xgwa.colormap; + } + + /* compute the force of attraction/repulsion among all balls */ + for (i = 0; i < npoints; i++) + compute_force (i, &balls[i].dx, &balls[i].dy); + + /* move the balls according to the forces now in effect */ + for (i = 0; i < npoints; i++) + { + float old_x = balls[i].x; + float old_y = balls[i].y; + float new_x, new_y; + int size = balls[i].size; + balls[i].vx += balls[i].dx; + balls[i].vy += balls[i].dy; + + /* don't let them get too fast: impose a terminal velocity + (actually, make the medium have friction) */ + if (balls[i].vx > 10) + { + balls[i].vx *= 0.9; + balls[i].dx = 0; + } + if (balls[i].vy > 10) + { + balls[i].vy *= 0.9; + balls[i].dy = 0; + } + + balls[i].x += balls[i].vx; + balls[i].y += balls[i].vy; + + /* bounce off the walls */ + if (balls[i].x >= (xlim - balls[i].size)) + { + balls[i].x = (xlim - balls[i].size - 1); + if (balls[i].vx > 0) + balls[i].vx = -balls[i].vx; + } + if (balls[i].y >= (ylim - balls[i].size)) + { + balls[i].y = (ylim - balls[i].size - 1); + if (balls[i].vy > 0) + balls[i].vy = -balls[i].vy; + } + if (balls[i].x <= 0) + { + balls[i].x = 0; + if (balls[i].vx < 0) + balls[i].vx = -balls[i].vx; + } + if (balls[i].y <= 0) + { + balls[i].y = 0; + if (balls[i].vy < 0) + balls[i].vy = -balls[i].vy; + } + + new_x = balls[i].x; + new_y = balls[i].y; + + /* make color saturation be related to particle acceleration. */ + if (glow_p) + { + float limit = 0.5; + double s, v, fraction; + float vx = balls [i].dx; + float vy = balls [i].dy; + XColor new_color; + if (vx < 0) vx = -vx; + if (vy < 0) vy = -vy; + fraction = vx + vy; + if (fraction > limit) fraction = limit; + + s = 1 - (fraction / limit); + v = 1.0; + + s = (s * 0.75) + 0.25; + + hsv_to_rgb (balls [i].hue, s, v, + &new_color.red, &new_color.green, &new_color.blue); + if (XAllocColor (dpy, cmap, &new_color)) + { + XFreeColors (dpy, cmap, &balls [i].color.pixel, 1, 0); + balls [i].color = new_color; + } + } + + if (mode == ball_mode) + { + if (!mono_p) + XSetForeground (dpy, draw_gc, balls [i].color.pixel); + XFillArc (dpy, window, erase_gc, (int) old_x, (int) old_y, + size, size, 0, 360*64); + XFillArc (dpy, window, draw_gc, (int) new_x, (int) new_y, + size, size, 0, 360*64); + } + if (mode != ball_mode) + { + point_stack [point_stack_fp].x = new_x; + point_stack [point_stack_fp].y = new_y; + point_stack_fp++; + } + } + + /* draw the lines or polygons after computing all points */ + if (mode != ball_mode) + { + point_stack [point_stack_fp].x = balls [0].x; /* close the polygon */ + point_stack [point_stack_fp].y = balls [0].y; + point_stack_fp++; + if (point_stack_fp == point_stack_size) + point_stack_fp = 0; + else if (point_stack_fp > point_stack_size) /* better be aligned */ + abort (); + if (!mono_p) + { + XColor color2; + color2 = balls [0].color; + switch (cmode) + { + case cycle_mode: + cycle_hue (&color2, color_shift); + break; + case random_mode: + color2.red = random () % 65535; + color2.green = random () % 65535; + color2.blue = random () % 65535; + break; + default: + abort (); + } + + if (!XAllocColor (dpy, cmap, &color2)) + { + color2 = balls [0].color; + if (!XAllocColor (dpy, cmap, &balls [0].color)) + abort (); + } + pixel_stack [pixel_stack_fp++] = balls [0].color.pixel; + if (pixel_stack_fp >= pixel_stack_size) + pixel_stack_fp = 0; + XFreeColors (dpy, cmap, pixel_stack + pixel_stack_fp, 1, 0); + balls [0].color = color2; + XSetForeground (dpy, draw_gc, balls [0].color.pixel); + } + } + + switch (mode) + { + case ball_mode: + break; + case line_mode: + if (segments > 0) + XDrawLines (dpy, window, erase_gc, point_stack + point_stack_fp, + npoints + 1, CoordModeOrigin); + XDrawLines (dpy, window, draw_gc, point_stack + last_point_stack_fp, + npoints + 1, CoordModeOrigin); + break; + case polygon_mode: + if (segments > 0) + XFillPolygon (dpy, window, erase_gc, point_stack + point_stack_fp, + npoints + 1, (npoints == 3 ? Convex : Complex), + CoordModeOrigin); + XFillPolygon (dpy, window, draw_gc, point_stack + last_point_stack_fp, + npoints + 1, (npoints == 3 ? Convex : Complex), + CoordModeOrigin); + break; + case tail_mode: + { + int i; + for (i = 0; i < npoints; i++) + { + int index = point_stack_fp + i; + int next_index = (index + (npoints + 1)) % point_stack_size; + XDrawLine (dpy, window, erase_gc, + point_stack [index].x, + point_stack [index].y, + point_stack [next_index].x, + point_stack [next_index].y); + + index = last_point_stack_fp + i; + next_index = (index - (npoints + 1)) % point_stack_size; + if (next_index < 0) next_index += point_stack_size; + if (point_stack [next_index].x == 0 && + point_stack [next_index].y == 0) + continue; + XDrawLine (dpy, window, draw_gc, + point_stack [index].x, + point_stack [index].y, + point_stack [next_index].x, + point_stack [next_index].y); + } + } + break; + case spline_mode: + case spline_filled_mode: + { + int i; + static spline *s = 0; + if (! s) s = make_spline (npoints); + if (segments > 0) + { + for (i = 0; i < npoints; i++) + { + s->control_x [i] = point_stack [point_stack_fp + i].x; + s->control_y [i] = point_stack [point_stack_fp + i].y; + } + compute_closed_spline (s); + if (mode == spline_filled_mode) + XFillPolygon (dpy, window, erase_gc, s->points, s->n_points, + (s->n_points == 3 ? Convex : Complex), + CoordModeOrigin); + else + XDrawLines (dpy, window, erase_gc, s->points, s->n_points, + CoordModeOrigin); + } + for (i = 0; i < npoints; i++) + { + s->control_x [i] = point_stack [last_point_stack_fp + i].x; + s->control_y [i] = point_stack [last_point_stack_fp + i].y; + } + compute_closed_spline (s); + if (mode == spline_filled_mode) + XFillPolygon (dpy, window, draw_gc, s->points, s->n_points, + (s->n_points == 3 ? Convex : Complex), + CoordModeOrigin); + else + XDrawLines (dpy, window, draw_gc, s->points, s->n_points, + CoordModeOrigin); + } + break; + default: + abort (); + } + + XSync (dpy, True); +} + + +char *progclass = "Attraction"; + +char *defaults [] = { + "Attraction.background: black", /* to placate SGI */ + "Attraction.foreground: white", + "*mode: balls", + "*points: 0", + "*size: 0", + "*threshold: 100", + "*delay: 10000", + "*glow: false", + "*orbit: false", + "*colorShift: 3", + "*segments: 100", + 0 +}; + +XrmOptionDescRec options [] = { + { "-mode", ".mode", XrmoptionSepArg, 0 }, + { "-points", ".points", XrmoptionSepArg, 0 }, + { "-threshold", ".threshold", XrmoptionSepArg, 0 }, + { "-segments", ".segments", XrmoptionSepArg, 0 }, + { "-delay", ".delay", XrmoptionSepArg, 0 }, + { "-size", ".size", XrmoptionSepArg, 0 }, + { "-color-mode", ".colorMode", XrmoptionSepArg, 0 }, + { "-color-shift", ".colorShift", XrmoptionSepArg, 0 }, + { "-radius", ".radius", XrmoptionSepArg, 0 }, + { "-vx", ".vx", XrmoptionSepArg, 0 }, + { "-vy", ".vy", XrmoptionSepArg, 0 }, + { "-vmult", ".vMult", XrmoptionSepArg, 0 }, + { "-glow", ".glow", XrmoptionNoArg, "true" }, + { "-noglow", ".glow", XrmoptionNoArg, "false" }, + { "-orbit", ".orbit", XrmoptionNoArg, "true" } +}; +int options_size = (sizeof (options) / sizeof (options[0])); + +void +screenhack (dpy, window) + Display *dpy; + Window window; +{ + init_balls (dpy, window); + while (1) + { + run_balls (dpy, window); + if (delay) usleep (delay); + } +} diff --git a/hacks/attraction.exe_axp b/hacks/attraction.exe_axp new file mode 100755 index 0000000000000000000000000000000000000000..1304777e96cde2c88f16c01bd2def7d04916b123 GIT binary patch literal 45056 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 literal 0 HcmV?d00001 diff --git a/hacks/attraction.exe_vax b/hacks/attraction.exe_vax new file mode 100755 index 0000000000000000000000000000000000000000..95054481c7c276fad3071310aba5fe0c72928200 GIT binary patch literal 21504 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 F{tuIGT~q)7 literal 0 HcmV?d00001 diff --git a/hacks/attraction.hlp b/hacks/attraction.hlp new file mode 100755 index 00000000..9b9b3235 --- /dev/null +++ b/hacks/attraction.hlp @@ -0,0 +1,129 @@ +1 ATTRACTION +Interactions of opposing forces + +SYNOPSIS + + $ attraction [-display host:display.screen] [-foreground color] + [-background color] [-window] [-root] [-mono] [-points int] + [-threshold int] + [-mode balls | lines | polygons | splines | filled-splines | tails ] + [-color-mode cycle | random] [-size int] [-segments int] + [-delay usecs] [-color-shift degrees] [-radius int] [-vx int] + [-vy int] [-glow] [-noglow] [-orbit] + +2 DESCRIPTION +The attraction program has several visually different modes of +operation, all of which are based on the interactions of a set of control +points which attract each other up to a certain distance, and then begin +to repel each other. The attraction/repulsion is proportional to the +distance between any two particles. + +2 OPTIONS +Attraction accepts the following options: + + -window +Draw on a newly-created window. This is the default. + + -root +Draw on the root window. + + -mono +If on a color display, pretend we're on a monochrome display. + + -points integer +How many control points should be used, or 0 to select the number randomly. +Default 0. Between 3 and 15 works best. + + -threshold integer +The distance (in pixels) from each particle at which the attractive force +becomes repulsive. Default 100. + + -mode "balls | lines | polygons | tails | splines | filled-splines" +In balls mode (the default) the control points are drawn as filled +circles. The larger the circle, the more massive the particle. + +In lines mode, the control points are connected by straight lines; +the effect is something like qix. + +In polygons mode, the control points are connected by straight +lines, and filled in. This is most interesting in color. + +In splines mode, a closed spline is interpolated from the control +points. + +In filled-splines mode, the splines are filled in instead of being +outlines. This is most interesting in color. + +In tails mode, the path which each particle follows is indicated +by a worm-like trail, whose length is controlled by the segments +parameter. + + -color-mode cycle | random +Whether colors should cycle through the spectrum, or be picked randomly. + + -size integer +The size of the balls in pixels, or 0, meaning to select the sizes +randomly (the default.) If this is specified, then all balls will be +the same size. This option has an effect in all modes, since the ``size'' +of the balls controls their mass. + + -segments integer +If in lines or polygons mode, how many sets of line segments +or polygons should be drawn. Default 100. This has no effect in balls +mode. If segments is 0, then no segments will ever be erased (this +is only useful in color.) + + -delay microseconds +How much of a delay should be introduced between steps of the animation. +Default 10000, or about 0.01 seconds. + + -color-shift degrees +If on a color display, the color of the line segments or polygons will +cycle through the spectrum. This specifies how far the hue of each segment +should be from the next, in degrees on the HSV wheel. Default 3. +This has no effect in balls mode. + + -radius +The size in pixels of the circle on which the points are initially positioned. +The default is slightly smaller than the size of the window. + + -glow +This is consulted only in balls mode. If this is specified, then +the saturation of the colors of the points will vary according to their +current acceleration. This has the effect that the balls flare brighter +when they are reacting to each other most strongly. + +In glow mode, all of the balls will be drawn the same (random) +color, modulo the saturation shifts. In non-glow mode, the balls will +each be drawn in a random color that doesn't change. + + -noglow +Don't do ``glowing.'' This is the default. + + -vx pixels + + -vy pixels +Initial velocity of the balls. This has no effect in \fB\-orbit mode. + + -orbit +Make the initial force on each ball be tangential to the circle on which +they are initially placed, with the right velocity to hold them in orbit +about each other. After a while, roundoff errors will cause the orbit +to decay. + + -vmult float +In orbit mode, the initial velocity of the balls is multiplied by this; +a number less than 1 will make the balls pull closer together, and a larger +number will make them move apart. The default is 1, meaning stability. + +2 COPYRIGHT +Copyright (co 1992, 1993 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. + +2 AUTHOR +Jamie Zawinski , 13-aug-92. diff --git a/hacks/attraction.man b/hacks/attraction.man new file mode 100755 index 00000000..12c75069 --- /dev/null +++ b/hacks/attraction.man @@ -0,0 +1,132 @@ +.TH XScreenSaver 1 "22-mar-93" "X Version 11" +.SH NAME +attraction - interactions of opposing forces +.SH SYNOPSIS +.B attraction +[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-points \fIint\fP] [\-threshold \fIint\fP] [\-mode balls | lines | polygons | splines | filled-splines | tails ] [\-color-mode cycle | random] [\-size \fIint\fP] [\-segments \fIint\fP] [\-delay \fIusecs\fP] [\-color-shift \fIdegrees\fP] [\-radius \fIint\fP] [\-vx \fIint\fP] [\-vy \fIint\fP] [\-glow] [\-noglow] [\-orbit] +.SH DESCRIPTION +The \fIattraction\fP program has several visually different modes of +operation, all of which are based on the interactions of a set of control +points which attract each other up to a certain distance, and then begin +to repel each other. The attraction/repulsion is proportional to the +distance between any two particles. +.SH OPTIONS +.I attraction +accepts the following options: +.TP 8 +.B \-window +Draw on a newly-created window. This is the default. +.TP 8 +.B \-root +Draw on the root window. +.TP 8 +.B \-mono +If on a color display, pretend we're on a monochrome display. +.TP 8 +.B \-points integer +How many control points should be used, or 0 to select the number randomly. +Default 0. Between 3 and 15 works best. +.TP 8 +.B \-threshold integer +The distance (in pixels) from each particle at which the attractive force +becomes repulsive. Default 100. +.TP 8 +.B \-mode "balls | lines | polygons | tails | splines | filled-splines" +In \fIballs\fP mode (the default) the control points are drawn as filled +circles. The larger the circle, the more massive the particle. + +In \fIlines\fP mode, the control points are connected by straight lines; +the effect is something like \fIqix\fP. + +In \fIpolygons\fP mode, the control points are connected by straight +lines, and filled in. This is most interesting in color. + +In \fIsplines\fP mode, a closed spline is interpolated from the control +points. + +In \fIfilled-splines\fP mode, the splines are filled in instead of being +outlines. This is most interesting in color. + +In \fItails\fP mode, the path which each particle follows is indicated +by a worm-like trail, whose length is controlled by the \fIsegments\fP +parameter. +.TP 8 +.B \-color-mode cycle | random +Whether colors should cycle through the spectrum, or be picked randomly. +.TP 8 +.B \-size integer +The size of the balls in pixels, or 0, meaning to select the sizes +randomly (the default.) If this is specified, then all balls will be +the same size. This option has an effect in all modes, since the ``size'' +of the balls controls their mass. +.TP 8 +.B \-segments integer +If in \fIlines\fP or \fIpolygons\fP mode, how many sets of line segments +or polygons should be drawn. Default 100. This has no effect in \fIballs\fP +mode. If \fIsegments\fP is 0, then no segments will ever be erased (this +is only useful in color.) +.TP 8 +.B \-delay microseconds +How much of a delay should be introduced between steps of the animation. +Default 10000, or about 0.01 seconds. +.TP 8 +.B \-color-shift degrees +If on a color display, the color of the line segments or polygons will +cycle through the spectrum. This specifies how far the hue of each segment +should be from the next, in degrees on the HSV wheel. Default 3. +This has no effect in \fIballs\fP mode. +.TP 8 +.B \-radius +The size in pixels of the circle on which the points are initially positioned. +The default is slightly smaller than the size of the window. +.TP 8 +.B \-glow +This is consulted only in \fIballs\fP mode. If this is specified, then +the saturation of the colors of the points will vary according to their +current acceleration. This has the effect that the balls flare brighter +when they are reacting to each other most strongly. + +In \fIglow\fP mode, all of the balls will be drawn the same (random) +color, modulo the saturation shifts. In non-glow mode, the balls will +each be drawn in a random color that doesn't change. +.TP 8 +.B \-noglow +Don't do ``glowing.'' This is the default. +.TP 8 +.B \-vx pixels +.TP 8 +.B \-vy pixels +Initial velocity of the balls. This has no effect in \fB\-orbit\fP mode. +.TP 8 +.B \-orbit +Make the initial force on each ball be tangential to the circle on which +they are initially placed, with the right velocity to hold them in orbit +about each other. After a while, roundoff errors will cause the orbit +to decay. +.TP 8 +.B \-vmult float +In orbit mode, the initial velocity of the balls is multiplied by this; +a number less than 1 will make the balls pull closer together, and a larger +number will make them move apart. The default is 1, meaning stability. +.SH ENVIRONMENT +.PP +.TP 8 +.B DISPLAY +to get the default host and display number. +.TP 8 +.B XENVIRONMENT +to get the name of a resource file that overrides the global resources +stored in the RESOURCE_MANAGER property. +.SH SEE ALSO +.BR X (1), +.BR xscreensaver (1) +.SH COPYRIGHT +Copyright \(co 1992, 1993 by Jamie Zawinski. Permission to use, copy, modify, +distribute, and sell this software and its documentation for any purpose is +hereby granted without fee, provided that the above copyright notice appear +in all copies and that both that copyright notice and this permission notice +appear in supporting documentation. No representations are made about the +suitability of this software for any purpose. It is provided "as is" without +express or implied warranty. +.SH AUTHOR +Jamie Zawinski , 13-aug-92. diff --git a/hacks/axpobjs.zip b/hacks/axpobjs.zip new file mode 100755 index 0000000000000000000000000000000000000000..c6d13e427323bad059a79c6bf34fe620be7cab9b GIT binary patch literal 151263 zcmbrlWmH^U5G9HeJb~aA0)Y_R9YP2YJV=1xE&&=EcL=T>T!KS_yEX36xVuB+u8q?J z`QDp(YrXk1YyLFd=hi)^YVTdeUH6>&Du;~n8UX>}1p@w$EGmmTSRIf90UQdsL5D~uq8$^Hl zmW<$w^z_AhIv4pTn;Rghum~#r=J|^$yZdzTOt{82EZ#6%MKXfPR~wUG+Mx zv6y_3Z(%IiU)0uAGkm}$V9sTZ|7Io8cJ{8g#=Er{Hg8qtWk38Cf#^K~0ztl*c?=@H zj;Q`$rWFmfmXA8zGiz~MW{LGjz3Cq3LwvFhwn<`F^s7GB77#R~I*}Wdmg@JAwLxdW zG}$`qn?!-mc#Zh1A1ZLnURmUjphl(^73A9;)7=aDsH%s4JRSx}sCIy7g@r=)*GJiqH8$gw^H7Z(N8|6OQ|nwM#=S zfp{yip|J4H;&GSH_r-LinGO|w!U))})ze2cRzI~@GV(9B8)fAN&e;yw8Z*VjcU?B)HE!R|UQNEf;lJaN#2U@R(rG#4O!HI_ z73|z*9NgX{?7cr5Ka;ibQBm+NfPDL|TivFsS5gHnb^HdscfD}N?|Asu;4P;hu54LQ z#F=rf6f>@`tmiImc!TtJrSKxf3iE>q6^qypri;Q)w=v^l^|_-^tcuRL;uE#oBZNbz zg&n7`o9w1Q(ZIR@3Aa>kt zSSMDW_oXKgn{_#{KJ1o=H{I++h=6mFhsi@D=P+=i% zX!AF((9_VgMcQLYYUaFufa43X1*+qWCF5)N545@&@-tYn1G=JVZV#7X*`F7#89wN&sanUM0A6$n^|Hb>-w5~mm4Ue%iHY9~tf#jU6Exfw4MXh~ z8Bf)AKIzwq#K(L3D2Ssr^lD^wpSp1sdaLagu}q$_TzxaG3n!XlWgb8M{W6A4D@tEa zl57na<@qt3nvOrzCm=aC@)$`XRck!{cn-tfy2;@@4zSjJt^pD=h2_N2)<|E#6c zptY%NOG#sgmvgNKG!ZjLQS}D?Wz*~)!IbRXLArrl^@K?T4!N=r5ak)_o1+!WX@_&- z3n%hY>dDd0SxN_C$~X%yhB+JX;|e%;d8Yc{eCZ^*2cr%*a|)P~oZ24BOFjrzn@e~x z?eS%n$QYUF;ZsN|ItVEfi5&}mbY?jj{n@u(@rmhv?<3~COyCUOtbNeva4>qVfe^tk zbyDr6G3tWftnSu=>B|y;&QNFXU#?*RI_>%P8on*^o6gn4JY$2Mq2w^Q8LEXR{@_k( z5X_E{vgo5CPj8?#;-rf%W4Z*K)m!|t*k;GNE@$z=X5hB-w>GQBAFDg1g8bkjM6&}x z(2U+mXYj5cJmU(Me#f4+6}SaqTXZT{s4HsJbkMyP@of~2h_Yl5k;9uYD0#-?{Zf7y|-t&+9Gq(_^m$) zQ+`SS&;S*#L76`hc!uQ3tlhphAAaaHt0$&(R-3a-cP*8U9jlw74BvIL2TC`oE;H*L zFAEt~F_He6D9iNZ>(6TgSK?TgKFo^x9DO(6tJez$@t7@l%DpkCJtfn7Yxe#!DgTth zF{_t9CScw233ousO#>f3s>eRwP6Econv{%gy|!H+Iz93%FH{8{ zHcBub^_X_iS6oF=%Xm=4+`P$PeCQMDw$hZo1!)LVX$xcM-bqEpv`lBEFM`%{g1Sj= ztanlwBRx@bmBkd)?kDe-Saz`Dw=+A=_u26payRD&bTh*E!K?hC<`V3Ofv=nB(G}Pt z?3<7Ua-H3ysZZ%1rG$Y^l&w7Ix<4NzSYLXG)G4J^(unqWZ4Y1t>v&N6Hkn-a82e?7 z&@-K@*0K@vI%xqNk^`L0ec?%jdV3V&I%H7Nu9Oen8rSlQnQfR4SaeC{O6@_NloK3g zoTI!TcoB1IxaI~me=v|`P=4U&!LZ2or_{=?po3_ydzZW)8htML$6fm}QIua!Ur{$H zLOX#99XIm_DVw#cv-DRVe-iqj+rQVFIrLyd$Gqi8R8Nw(Jlq-SOOjCSVk2z5Sbs!K z(vE+S$!y-&TqD(KjRkuv&!TfRsKHIMS=Su1TKs;VaoW=e6=KiPcn~Gz$z&WvvwX`% zTAo$#9_ipf=0{@7fiGD|zuc}fUn7(4am&CMpW)z!=e{iCYOfrY34!vgd46!}Fw$WN zkH5|t`N&QOX83X+tt9sXOGziM;Y16s#G^kr>^=bDhG$M-!+xC#%Lsc5{)#w#yuoOG ze?!TSODXRyUyM@6B6!BrW0~&s*3WV9a$fk>VKB$59j7sdh2uzIOG&qH-EK}bJSaSd zCBuEZqM6x@bZd-+wAk++{N_vVCd#ZRqkIof)Zlu`!7I>ot}o0idBRkD@V##9d*p>( zSq~Zc_iPL~&2&0>ABdfFI0xGrEPHwe&n-)uVOe{EDXZidinC#ouvP1YuQk3&7;hID zJ00#!HJdoT&rz$RaT-eOlf#q>o6B9TP??uuG?Qs@Yts*(PRvO;n`)Im*OO^BiQzs% zKNJ)28nLK_SC+JbebjY{xkV_jS!0(gsf*GJu9<{<-R$_Oj5%;luTMovuMZ-Z{N5o# zxXB?q2F9r+)l(dWqTz<3;nEoj+~s@;C9c(|QA_HG`&x~5y6=)iOAp&GC#~Q}UMN_m z3sECK!cQ4*FiKgNYU@2K6<}#N2~GwSDEObjOzp5%PlNqS5z)=?AMiLD;YA`_BAP79 z)nBZ0llz!A-b=Z=?BwU$#MnQB2*yWs)Q~PHp1@dkZtYg?TzF4tz zxcON3Z%>)~&!wFjNu{Hj+46RdmSb;!g-t8iE{K)Yl6Pegi6Nevrx3qs*^fDiU7a85 z`Z*0ibrj9;)uDUe<9@^d+Fu1ie6M4TRsta5s$B_4#c5}%2BhA+TWgnI2*)nVD9w3L z_G2T_qb_0a1Zz5DoBNd}(e&hZc8`pqHlOBR{q4pAjlg=1BtYW!yt$kCgTxsx*0eC< zR)1B%sAlDxEUfJ&Ro{iOT|uRr>dRrOLYEVV%AMf>-zm*sibqXk>52mZUX~U9e0fau zl;^mhD*rRwO`3j@xZu$%R*bOmNw4rTy-&DP<5(~wVdt-pp;b6{pZ96c%AjH{0{&nh z=~H^cv{wc-k_4si80`Bbsmyd-WFxY1E^gFQ2ZAej_uq4xGmBC)rw1O|%)RkB3gFZ7 z@VCT+%!1YgAQyJ2*VAcr!_*FQqF2iIss{|oEyWMEcYS+i3)b(BEJd(5zj6*tRQ;kP7lytJ9B;y;H(EsD7B1OUGm_BID$4Wj(2RZ)A;QvAxZtCW zM#Lo`*)Cyr+;hO%sYOrQuWXQcdAHIuXUH*QZhDQp3&wl=){g02tj(?&ErK}Vt8c*&GuQ({P|Mq+IwCt3s-@ZRn*k)q zJBB|Z@@_0kuP{%!xPTPO-nQ%*}6}ebgeTE4eyGzhy_M$W_6L%9=X~htIWoQJ9|D- z9$6*Z;a(MXQxfIr54Y*0IktR5`Z6zsc%LUVA^|xSzL0bsvGR4GjI^sZMlaq+;J=Y& zJR;Q7tOp}m;rc2dM$krJ!Dag4ntABVz3AIzT+#P*^ia}#jY{!jX5mi&#A|ms%A@XB zme6!+f6oJJJ5_Vc#r@w%M8r1@{TEfjXIGylj?eZ2dEBlr?#^?=O5AQ^#nLWrVp|m! z6VS_h@kZD4k_py)?%$@K<$XW*($I#l4uH3AFiUK2jEb)eCRtRoLBfj+p5yL|MBAO% z&H=Oj@B0hh+$3sFc#%Zf5KZLO43$@3D&K|fiDl}vxRK<*lQObx9^!r#?H9+ejr=(4 zo7U7%y(FO4>tsGUL53mATenWX;S%JSFsvyr5UHz<=iI^6zU_!MfYp*jiGHc_(z7vg zr$3$V#;HTXa3HIS4H}bhUboJ;rb@GK(rU+E5C)&(!Jt!Dv!dNgw?!pMYiMOPlz0o_ z#J^VDY7X}T`3W91bqs&W3k2QzSm$B#jD6qU3$t}bEjP*{%T!!;j9m-$y(_^S2Y} z+hN9na0}fROFsXL7S%5vvzRLY#!5m)(q$w*YpI7z{n=723pCO)Hm})SomPOM1$vz! zS6jm6dvMF^qAj|8V}1}zN?s>Z+FR^mB|nYn?H3DYsV9qw7oE8n)16oumGBa+01e(& zD~}&psQ1U)gO}Tz>z6upmwiJpTe|~3;Yh-sHLDVud(1`3sQqEL4$^9eBZQ&o7uvkS zK@JzShZT~iy&lVpG}SIfxwt6kagLpG`frYskD`za!Z=kke!5&$I6U8}V_aIbo2y2m zBS>0$*h%z5yOm}2#3*hoDkDGJ3h_8dLMVL6-E2(E25zfda|4?Hv2Yc>HRrunRGX&D z-RBH=)s1_|U64f6#D5%zXaP~?`iR+fGPk;hyLT*o$C$(@GaSUhuIxF$507t{kB z`yVej=<>h1rt(v3u|Wni)PEVkqi#O)+`Hy(^l1LsHy>8rxsxQZfXkL-drGOd{ z=LXuAc>loXS;yIkw|jfduaqZ7`4IX*K9O#7R(@yP?Tm(-Q99Oy41@-78y}87A9T$_ zi_l~pHB+q;HTKySoI@u>ilf&Y+7PXk7`!eq+B|eI!L*{ToqiBivEFE~5Z4KJ2!onW z=rw5H`1~tR&jD@&*A=J$7f4W*0EvqmE&bu=F=3*bP5ilv{Lc23;i0>*vUBF+a_kmc z5rg)vaGi5{r|{W5d9L6_b$10F{oh&hc@=Ad8QMG+aJR4LZ^bkqbH+jP=ypeJuZu2o z>m|yRP{1$Ld7wsn9mXmK#kLp`(CF0h#B())JXnV)se%tf$wA$l<-cr%zY~-TUrsmOl~Ex zG2HgJe?ZL@i^V<^^~2g>0)!^J}W&;(7sx%y#GFq5+Ndxu5p6H%bM zn{xIhU}S1G(a;CkM&vD1ZDH?phHzmC!zdAm?WL8BqrQ!|G(9WG+e=J+}o zqO((h+s}iqR5W`0L5f=28&(u-_S)ra$ll>MhU*RxT}L5GRUj5 zRHz$$>_ffDydrWs5=3 zVtj^%PZbUL4pa1!D`kr}*V$2LemGa1Q98}?u*t@2AHtwzx<)$N?pgYqT?>!-f~-%K z3KaO|oPV518*66{A^lQ+`mr5)X-;Wf$fJftXI=yO9TSo3RdFjavHN0{W@`}n`mVBs zff&2oeR1K|b!<$8^93(6r~*g&aSPjESWf!UVw`ruUCJGobRDYp%mxuz`dkGa5}>SB zsixO<;doHX+GP%dLN;&dlV3>&iBPn=rEYo)g$2KiN{fUQJ}2TU4DUg72@v_=2(fMF z3f!3N!=wL4AN$y?!76GAw=Zy1Z*PNsmYZgTm1XPJhR<*H!&ev`&X{Wv0YXWn6ea9= zA@CQ!e%Af&R>FFBK?-cqa@C_R9j_qcRjgsN~fPpd^o!piCTG2leEU#@c@f2Tu1@>v@yj?=*7KRF_JA*-Oez zU8Z+bd8}U7`eMrQYo_6SdLP5}@$fb~h#`9zdDJ6jedE^WFrG0%KNMcY>_;$DRW-px z-}oc*$dPB-EUR_(0N7+ZuX-PauoBQ?Ad|xdgjMi2&g_7)GF+5!KxbP@hL#VTW z-zKyT|NTQY;SKl(<`+Y^0h7CrGvv6vt5-N)ml?%O0l#ZcFJ4JOTJ{kKXv}3?DSigv zK^Z`V`)fHVj~4I-LBhwY+9waY+CObbalBc>h%$OZJWX>H!N5>^)c}LQ=S)!tioNf? z)Sy)TK|ZyuA4XviIZs(VR#fs|HqN|es_F_~?9->WNRoW)5V?ADd)X(p09W+(>iJ`L z8_B1Xe;366{be}+=39pO@QPa3Gs5b~$8=NiR9cwol(}C@h5*(5oFzk#I%~J`u*LFV zcT(PUcFpJ0cYrHs`li^sPsaSVUqN5|7z9h~Y#BB|vo()M{nT+>y^3#-7~iI&)VP5T z6qJvuYn)ZQt3G*|YrEp%byGhC+Lz#a1PhgR&Jq~@p?wJlS^tE6Y^jqiZEwyY`{af` z;R_W}b+3@jCr`F&C4(MqTc(^6Jop2_0B8zKX-rIk#6^g*T2Y}+kx^7KM0x$`ngh_0 zHtjbet_>lLZs>2Agt3*qB?hd)IU+2fu@(5H2#(WAOsn*^ex%SVC@X!@ z%xmZa+MX1hM=>Ab_{9BnsKbf~nad`LiwomT|=FTeuNDx=cN~ zgQ?;ZaWNxrPOfx3touHHQCb0Igt*ypA3X*DugqZ73e>N?P{zTyciNKp)v`+K3?K)w zZpsH#XBW@6JxiR7uU&jnYS=`Hpo)L$gm`e2`U~~p*oFEoKkf^AbOm~JMN5+d-yOeY z(BdNM%I5Kh3RwXC@Lk}6wUS+xZxr7jX)zu>z7jaXb;-Y@>0atOY}Q=4@Mh=;|Ea0F zC=vk#>x4eVcEoZj#(wn4=UdGOpi8CyioOK!>UDTyuH9nj`?6_~2iLP>yo~!svmZ*2 zCAsLp1!bljZ<@Gh^j*CdppVVOMo$lk@P|R;w#O|C!|$-PV}Dyr&3K>KlS=Sg8nsB{ zyIRuie4iSq8j?B`BkKpn0(eO6mY_;h?mc5P!KZKBwYJGQ7q&ppRNr{}Px&f6Fq?W= zc-8@GXmFTH7vjj``K0K&W}NFE*RX4EanN{>08i*wBjUqAz7K~rbMHc}!gE9MT(<&C z%{>UR-Yd&r#5vp&%6iNyr}0Nnw6a`BkJsjic!Vlc6RI=X_#_C89jCnoINZg-vWoq> zB$h4L(T^l$8}SY=8DUf^^E?jTshX;s3QalX-z?E9g+mc-v#-gopt6n2%JEN6*37(w z)y6_pF3EwR9$|T5=$N&PGY;E}(Mj6&f&8r}EAh^hpuEyvX4WgmfNQfv2HYI6mdmEh z>gJH`Zzm1$FoNDIjI!^Zvkw`vLMzJ2N&3Pv_sZ>zfP47H^{1$LA8{Wz>Z$i}C=PyW zlxT>(c((n6$fOV6_Rg1fy1&gYFNqWWgz*GA|9xmn^^x(+G|8?jvo4k7gT+FQs_J~L? z^}us7PCj~t43cUXDUgrP24l)pk|8B z?Yu9b*ra>5a463^@Mrr?RqdE+@CIM!ItiTq~Zi0O( zwVD%7dK~TW_rj4#e)1h$3%eQnR7l5^eGrMr_GHqjLu~-V{kp(HM+42U@!Ai8Jo{7! zR=+Ao($qAH?Fze^R0n}!LgM!CE!e|`iA8#jG!Y80#1jOY3XAkyX{^YAe^(QsW&t^A`=X$QQOQ9kxar`fzQ9wwKLqfA zsgl6^R3$w$^Ou+ZJgW_HA0{PkpCjvOb{)otxH0RnY|DeH?%whXvH4dG0;#YP`9};I z^gs^H>Us>dpx!SKH9Z;4KaR8M6*`tA~;BWc)^wGA_1)k$F?i>Lw17B5)Ig?gY zq(OzB@k!o2TIav2s2y8C?Q#>HIOJWm{__N&NZ0cUFpz+}OBB@8ujYnN4vkx|lOjEO z_(l4TbWDwfIX`!}n>F`Xu{78C*!rK}m;A}lw!T%n2*+yvdJ2#W1wQ~6@-#oxt} z_N)}N?VIL0k#kpXz8w^od4 z0T}WOjI5k|dgdSfjdAt^>PXit9uoS24n2{FVELy>?-RP8#GmDPft(B7tgET49lMK& z`<2V3n}H}z`$Sl222_xU_2yhXccBO99bI$dlF*j{=16n?PgUl4kg*ri`y;F%ZMfuh z)i&q-4J*WnS*JwoPGC5%XKkci?&JxTu@}L0gdCK8+1p!YHjiG`>*|A!sR_M{u4#xk zAc|>223cf^b!VK3Q~Sle4#8WOjZkg+i30YG+!@l*)y2Li4`~21oN4YL?I&HY;C);) z<4QyOf0Ud2j8rqhOgGRYz9wfWbf0&X=ulAy@0p4L1(^#n!1Q%R{r7dYbZr&Q;3;V| zek}mlZc!G}uF!%4(0hUul(6s;Vq-$FsHlSkj(tXvh0okCJtdW$7rc0)K^Bp*z+y-V zn<093l6Jy!tFESs7oIKxYz*Bk=2`7|E-}3JixGBcr(I%6#oDhz-GipPDw@q@np}_H z1v<@!vA2!cpF1qhL)uFY@#}0ho@uD>lW_+S${0JG)9VU@$IEf=QbG`MfpUg|3j%;( z%@lY7=DL}&AmaZwL6^SW2>=*0h2~2IE!tR~J_n!4+ha}MHIW~67%;TSu|?0?8}4`H zV)(pe@tiGAK~8fkdp&JarX(N-ax3Wpb`~_99MdFqP|lN-QXr1=0sxWXAs;3T;DD*1 zHcs8CATn7h;29MdYx_m$qE3}_bt6hL0j)#0b7C9mw4sBQZ%(sZ)By1ONy?2Vm55*q z7mUSc)DBbC?H2dwrC>GAie6}o*+aW&|Aw_**ey1E7n;|aHGOhgYiIo_{Fh+QT&@ma zRXN}Gwe9p<03g?)=f7(FD)#aT%IcA_#hBvlE#t#e;nugor>u`R@tB}}&ANGh&vszCee4uNuuT?dFwdN(o)9bF9cCDgx?WYinaPAFLPiN3d{xJ#G11;!3;eL!?hx5!) zwbQ_;i3oTy?yHd25+|nsC)mO%oJDfvNiEvoe9pB8znYvWmgMIdSQP)|TS|wc2}s*Z zQyOmL)@Acy;*`{W;+gV2{^wFKH0w6#!&S0Aoj@ zQ^8KN`d@JDLbPcnFzo)VMlZU)Wh$tP_AiGN`JUCD=pg`jC{(OowCakS*zJt<(y!!2 zZXMv@{xrc!u|*=Q3NdrFPsOfT%vG9l;OZE&A4o0Sp615|2s}mWV72f+&lIzWIN_VU+VKBc(#KUy6)(q4hI z$E&}lz(sY}6CjQTS|?tkuDd?x8Ae+#C+{P zA$c!6l^iDuZ;w;_`{~Z-Aa92}0@JmjgvNIzM`7Vt+7eIoh6atl%LZv;ZWy@G{S=G> z0XS6NJQ(p`MJ9NLd{j60yS({~qX-x<&3ij+)i4m(<9H?iYjEs~%SZnO!f8{N{ipoh zN)QK~f1d^=Xg~gFfvOW%D!>^_@5-}Xj3 zUOKQ!gLjGz-JO(+&N%c9bk(F-kW{8%ttur&z4*s>WL#LXZfg^;4>?CLIaSv^b+EmU zpY~L{YJH`8wm$kA$jJ%$1@JR1(^F|(7u|q}RvqItHqF@^``c4`}cGZx1{mrRPn*pUf{bsiWP53V);gXu?9m* zK~p?$<6pzeGaej;$S>}t6Bt$TJVo~lyOTS-pVyUu9AbKDw_~$gCX5MYOy`0hC_ws( z36DE`9^X}sC-w@12wieIaDJ0S(lwghh%hBGrPJKzaFDeJ&#hJLJ&Y5GPaD2jfb@;$ zXwQ8>A71f)WkQKo$-w`8UZIjuET2?|AUOK^L#1iqjztTfF2C*I5t)6tI`20ID^-4e zscodxPj4TCa?}`fvknFeNL1=o$L_8@-tt_egfBq8S#8N(DljD$YrbRAZ*H)>^u!<@ zsNA&rllv_O|4~IwHP&%tZ&OYSzdGW#6G^2?Uv$Zd!Qc3+63gfW*2Dyn@?v29WVM!7 zvkBo_Q<FM4=l6euB%_PIqMp0@$@T<1=H(m9{{K}?9V%W>M{L#4=mjx?-PI*-_ zDXcGSr~_o&QsG3hk}D&sh}&+uQnTjvDM2#-Xqa*e1{Ti2yJEz2m0Tn zTU`QRZ{8(vb3Ov^AaIcToIVEKMXGi~Oc?K>E$qwyJ)8WbcE9I%j~*{#EkJ z$5)9}&hY+z!T?Eui5(dp9_a$$@SQ9u%B7B5fJ}k{Z@s@3RxXdjAmN0$aC7_OoBdxYBe)Z?9F+K<;cd|iF4lZ_ID~(+sfMK@V(Q<2wn(}18i4#FvIQJoo!>f*EGD?EL~v9 zYPF-4Nm(q-_@?T^lsq@y4Ck;mXIOgfWA-4+_7TF5#cm z1jZZU&Ms;{aM!-4X7Uj`3$CrA2(mhy+UIt-cBBq!o%!@|(M1ne%iUvgGR7{`9;O!| z?G<~Fezt8K8=|8vz|-(_{wvalT1kX!v83QsE85Ab&gh%Z zqVb${8d{Z0U6xM9fh<>Jtr* zKL?zq*GHTdy3jhFTQxX(*aw`tvl%xLzB-uF32JV50V8AW)N?@buwv^>7xQc8Ranuy zJ$!WmmfpeA2^bQ2ble0J}fv(dB zt8+3}LYttL`Y99)wdne@UHDqAy;^@F(I$WDoMPTNw-$fo)8=x?4cx_nr9xR<`Fc1l zE3H)?g0E*(D6ZX&UdRW5wjr(MmKukJ-wFeEK+mFP5;wj+}Rgr zew=ub-S*M)lG^WmED9}V0p8x5nJns*nwIRch*kahux|bHn_Rshm5b}W<9hg*?tv}z z824_sJQWuhrqejSRXm0@&F?{<{N~r0 z<+0^@SwJ16R5+7p$RRTW*(+9fKukrT(R*pjrPg}iTKk=?+;NBq%s2V+nik_R4hl|N*_TP35gH$pUgv>TTwfpCuru~lXvx-c5@%R)ya?~LDJgD$!Cs1_ zs`raW_Dj8jEYWCp4+Y*W8jm>ZOWukTQW~0tFO7BG9~;p!e>Z%Un_{df5B&_Ts1a-b zf&QB3qDt55<=pSy>2XK4%0PrtIrTtmD>>6siQIU8>q;dL4-;FJWkvA1qPWb#AHTMj zHwOuV2ab(kIi|t4QUOMMsmF&z@ zQpI4Cob#ZkH=Ut;+@JHg;W6y5RX**TAlOYaEofs}+NqswO_tHw_3wU_baGR{{G@y$ zwM&oPLZ5^lKdgMGZ`xQ%$f_xn01(ouu z_bb`ri~>UKnYJ?dt-xO!oKf$4Cszh8uO)(zk{(}_@_ZgoOyVY52!4q`3~*Wwq#1mX zl<{sxSV1mE8N=c&tcb^2|obOGNN!ahb0aWMp2;jd@EVyG>s!sR3*_j@Vk(lUz`W{(2V~{57`v ztak{xer=YtsAW&{(Rhp05Qq@3=%?-W^qXE6dW_Gk#4D&JJ4@%DOrw|Wj~xn

87LcW)HaCx<{Y9j*`OtSe0ee8*=)iRUG?3ct`^E2%^dT*_jj@;Bpedwe@@ z{&1>4mdmX{!nQ8p)#BR{AgWSc6X@sl_a(|tg*9Vj`%Cf61s>4~Qc`M_q4x#SFLQq9 zhGuYqG!~tgH|y72r#b%g>KTRDE%X~*RUhr`qL)`;VaI)sNMHYFdkOJV zd&%%t*38^n1cWbn2ng5+od`zOmW~c~mj7qXB?bSx<`VM%Uvo(SJPNbmrR8%A$p5ap zq}*6}O8%*<BV zqG|2?tkP>}S8j-`?jf~*C4VDm;!5ud?9uYTBQmkOs;su87AWs?=e2z2x#F>M^)N=6 z-6fYD5asq6ZsHl>y3i;{@X(yLbc9YegMu7c1g^EwU#c_gZ1@OWA}60AcvMBy`VjIl zyW-0meAi4%1v@8p65(CFkBSXEp|b1rh?m+jUfLc$&7dw=^TtO3n)7{Hkugn?iAVA? z{gaYvs=BV*`G&nqn7@e;Rlkdq^9rP&`Zeo82h2h{duUQG=IdeYRm$O`)MjmF3)?i& z;qKAAp3;Io{)v>Ot-g}*_|(%O$OxG1^;TpLFW6>Z_9E8P<7JDRyE{Re$dVS<#kUz% z#RV6b%Ok&33DzH#2VG3u@JR@oAi)-_^5-yM$H7HA+q_7|`wfx_L4|7xaF}xEUR&!zze?^N(w&I+xxvWB3(whE+JlOFVSjgN8BK5yMwEZptZTEx zp?cTxb0|$$*Q?@7c8Sn3p}%u0(fQ9IuL_a{v8L%cqs9dCaP;+xfF7i#74m&KYlee| zu=|JF&)H>FUfOS`ZP%UPwVErifFFZhMPdoFixb4*SC`iNAkL;+u!}T_-Vfnh0EstspS_!28Y8OzRf|5k5`K0l1io|;-wD}$#D6iMXs2!N;%Tm5+-k0^PuH_t)^?XP zeyT~$WY9%MlMF(BE` z>-OqRosjC2-q*d6L+QzB4dQ4HZPEly$*QrIY96Ss2ONkg^Sp)ln?OQe&T$aZ-{lGR z4yZP7Oim)y^YeVMSC#m)1@7FK3^hH{@l3x4@k9mhWwLx%N-rTtO-2yV(ok3~ zlb9Z2c($Q5Zj{WkNrmy+)3y!o--*Y&gC>cBB}9G#f-ObQs)TN~TP(jc}EB{RC8A2Zc2SI#gF^nID-)PIWhc8qxZ zoItP>*9|yGF9!NxJ$min@Le;0rV=EgAEDZRBmL_#=IR$tloALh#`YIZv?*Lve%VKY zj#%Txx;~XqTw@&))bA7nLr5_okW!VhCX3teINBkXAlp+VXy?*B2gV13oS!n^kG(S*?ie_Vv$~P zDQuiIzMXwlBy;g*M-1imWEo|4%Bg;7M;rJ%>h@cnj2C)@uT^aS`A>wM3={z|JBj+g z0XkT*y;kOdNgpM(5nC?yH8qEWNJCFg$3ZY&>N^ec8-Zvn|nGqzEdsa#e zhw`vULSM4ast-F-pXY_9mf^2@D)pdUT)gFAZDP>a;$S zEpTifWz5Wbi+NtfN*;#$(r%^yCYD{=-%)xy=t21q>fGV)}O5zIQXM5GDipx^@7@#>T?m_7h7NJFbY+KBshj zC+2rPVa)ILv*S(HZ(>62f%vQam z*b=&^codlsBVNN&#EfzOOC`lJz$3hO>cusO;4c(4N+0DO2dgYEjvLO(x{ZNrqe@<_ zPaPS2`ufYKi}(6VU^@QUmPH2_^s_TR+rr$9x?+n8Nor;^p8y($($U8?uQ+4V6Vd)G zd4ZuRBYW=;dGBkS40~fG6*QHySalm;L&!p$WM80W6TWd7ri}P>r~=tE8r8;aV1JC? z*b&M{2EHFznYpN=XUcjcj4e{%T+W!>46xGjRHoYeD*71${20IVr+?im4s!QHlw$fK z+q(IKi(0%x#>}m`Y3tAEsZBuxJ3sFGl1AWzGt*WZ*da+D_BlEAS z&Tfk+H+@h2TAVsE=4W($oa7LU9>OmPD7~W|z?THtcBO5=pXZ;0wuV0+-58T@e)Qcg zg5h1O`+D*~;`l{uXmh`($3oJ z7G<4sqZ?geQPsOXja|eL+mRHS6+4iASH0`~>0Tvl#;%mkC=rXPQ@CZhE#voxpqUC1 zp)NkV+QXBc>ubc;uuj&$&dQ<+5Ho_4Zn9sqm`PXPpU&fc(j~4_TegsxnRp-P3rc{7 zFY0$Zki{eKm1fjU}@Qy9aT?FHnsz6aY^h%`Qz)R_WV6#TLZ3s0+)}v zDKNiu#IRUH7QPZgdY}R(hipGTp0b$LBS1ip$M3Ryvkuz|jqd~x34Ga64`cc&H?1$$ zyg9S~m&IF?SSi*vHnL+1*0VnVzTdw^m=r&WY%r6e_R1|4?=YZVxVV%+-&8?r5zDya zCeOay1J`S*HoFVud7f}ss$4N#pA$4lxAXAm{Tj7;q+6pf*is$@7@JpF1%}UUpCr9D zHlK~c%)^`$2T+BPZq_M`T6u#(i%qW`M*YZt$#6L9t=D~@yGi1X#SeSh(qr+vA!nsX3398*k+gPevH4a5*qphgFcXmy?|vIe#Cdx{;+r&qQSm6kAN4ob!# z>EGUK_;j)aun9W0eTXP^g(H`Z>(@{T32r zNG>CrP-v#7sX2D<%~5ha(L}V7YaI?HnM}F8`5rU`$f=Xr*r`ujrmVs;q53CBE7W(9?EO|NOMNm2V-M)RdjWY#RutfJ$Vttv2>yn;0td}6 zQ+b6XFRX!8hHgzO-Y7B&CM#ppF}M zO0XVs4zT(OsG^JC^-goEM9ys`{{Ld;Z37Bf_%9?O1JL>Zp%Tmwpq^iK9!KPRCO>%7 zIRU!G$}-FX^(ANIaj2>^?gy)If%9LSe{zZUhyQ{o z`l8f-zPyDT{=os*3as*WKjClO&j-?;MgvzP14#d4xpi=`q`sIRY%q6FABc@T#D^u6 zd)osfuWGmHLIf*68^Hw9dx0LIdJAqKms!7@v~5>u{?hJ)Y%yZx15(hroBL2}H|SAE zo}(4K+W#c^v?>beC%GL;zjg?OPAiw{p4$%6g1^01RTkyqqlz^;_>6g+VZd01+(J^lheS%x^_Hk6jjX!vWPI?nMlQh9GwWQg8$P5e4u)@-n%)=8@H4=n#B zdb&YHd3T=GOzSbIITlc&R<)`af7dhaB!0hPikEES^G8Y|R@dsqO2MUrv1R9x$S=|R zipR*N(%i{AQe7zaVCShL;zQ!| zDf;>XaTEjn^%I5SQq+EgZ%>$Z6``s;NK9+=-k`uqcgo13thJtS$7>+Odth(vy2Oqb zM9DSU7k7?)8w9W+7(?+Q)epQ50&B({=^6#Y_i0s|oUNsW1)XUb$zVCFn z4gRyB8H9(o>KpMV7F51JUXb??4#cYq^Sr!`yak4qyWKN0SEms=3>41j{5?S?Kf%#g zFGbSmyhLC~evKenk5%9oct1Nz3S%4dvbbwi^@w_yml4L)d{bdrK3uOvDH~ zB;!VoZNTM~HbsEXC~2D>$X_G~Q%70l8s%|98kZXxpV9^X#Un8>dHWJ0#2hyh;U~nU z`i)VB^`a!Sb4dV$hPaqHF!Oqa_wb52MZqm^4fSDc_6g~#1_oR`` za=;!JJ#mSfA{`e6uCwOlq9myBJBN&oe|u)Ar8iiK@$4aZyje zBgsbcaE$t+psB4Po_}RZluZeZEuL>LClTwyx_993)B+~SqXQaS2YEZR9eeiKk+Z#a z2}Nx|1i2bYo1V6}yuex&pG$3O!CDB#MVB>0>v@8e9K7*PajtKxYLOH$@gDmlZ+UF@ zNMU+Dr!+apwYL1}QRf9Zo;N&Y2aC$^j!ejxK=2H)iM1f@E|RG<&qki%Z>V?WSzx58Z_* z7>rBL3ax}0bb$1)nib%(N_e%fU(__8LMk%eoh1@10Q`->H^2`PZIc8k~fP zMNUW8zUgJDnxth8f9%L7Weq%rZJzd~R81S}59@n0b+Flhf^n3PFxCB5z6|dsg(Iz% z*vE_!?r?%|@%_rBHHj>0<{3&S5>}oz(lEKd%%fS2IoPng*9pkbR1q3&&P2=)wevan zZY(+gc+6YhB52E=Dol)NKv{Rzi?Jct@O+Bq8c~ZaBXfCGrYZt70;&OWN^)_gY2FSq z$uVbPDFTZkI|-jDDLezdplP1D*vlBp?}ULJLe2T+cQInO}y)c#Vi*anpfgnnAYR_Pc%yth-0N?M#5z$cB&Wsu$wJm z0k9!cj8H{vgkjo2vcwR%u?1l%31JCSubd6j-@6tHe_c`XY!E!22pJ9aQ4%T-V(I}R zVWyH`nmiS97t1p|6CRM{l3KDSftC2ovO{N+2bVTOSwG0dvDG*4)hq~`* zPQqQ5h)R~&WLJ-pIL|-veYUX9m?h@dh_B!GKAM6RdlIIf8h92kV9e<)V|v|r4hg~l z#0qZ5tXMfL5oQa1ioVY0RBoV|Dlks=de^O5iq8$pSIm#xQ?73f!@S~6+E=u=C~2CU zXK3265R@PFbh2@GzaNd+6n#*TI=2t#s6 zJK(bh!$|Qku(n|;8c4NbJh-jQYpuP;*H8hHG;qP z8mxDRiG47U@jzghx1>4J%4MpjvFLx>BbTlu<8`zpvykkp*-D<)DY zo9kH44{fO3LkjeNnxnvd1M_EiArdVz75+iDBa;6Ct!OU{2BCc<*myjL z0C?}Xd`o6=olIkCcIA-IaA9FFJNRM?aBMzLaBXq{VIAdH5?2{$6Gg4QIHlVx9cGTrnTcUz4;%8gtITd2V<)NsHc9$pY_Ib_Gcy^7R@W}p*HRxl!`pkw$|W-Iss|*2W!(g?+{6gonA@S7FEZ(-YFu@Ib+lgPviq%0Xit?+{=34tl8MjGk%UMVF4^2#t+{J)HC;m|^o5ff6wj1)`6PSs(Fa zX!*2x&@n;Is?;jDQgG>x-x&s~=~s=}EKiD1R;UK&v%^h2WqwtcVB#czl_s0{jxkA4 zuZ@fW_lxcezBW6{InD$ZzUYjUUc(s?tbkUJGDbL!uk^w|P_+5S&yWS7F}+ZcQiw=- z+i*O?Ryl3_#uI7?bP1)O%Mgz6Mp)dyRa7}Q#+2h% zFW2>K&)pcRN5-lBtInxD(eU-SZ-kV;_6kT@fL|(N!@=Q}VksTkTe#H_?Z@KyjYq! zh<(RWvPDSLuv9+knk_Y#hrb!=-bC7~0XrGi5ku3X=ZAA@>{^;rHZq+z_V|$SpX~(8 zP@rr0n`>rhHUlXxCGX#Oq~W6gh4&BdFWQAL3ZHDwAJKACZc>S|!+tkWya-tw&o?&W z*yBLUyyzK+L_8ueQim%AwB|mmp9B8dCYC>0u5r9Wfv5(1Lv`j)1d+1?bxBHre?vzO~Yo`+}I;Bgp8q?m{3NfuNUD(>as&0jLV`kI-|e2 z;_}XtqU0Wm!uSMhuqXj^xW}Bkjeb;fk}g2w@c2koILe)zZ=pEUb+#%L>tarNL-(=P z`c2cnB^A-w>t35z-%j!6oSPBM1gTk(a$@a3kQHTAHF;@o~Bt40qb?7BjC@qjAXG&BZwQx5rI3+lR)DD5j@hAbcPQ3*K@uSkcfd`%AnGMi1Y%f3pBHS| z;|5GUBH|2Pf<~lQ(A?_9G||)mZ91P1UwUag|L;>z6$9;}hDU1S9rMxQZnq!dblzgk zy9K#%&=d|ZQlKM6aZ!_PT-Z8fj=9`go3=N_@I#8EN>7!-VyZMFr?C-np=$5KU6x4$ zWRPmdoBth`421W%mHW_90C9`4#!xImH3}4{p2@gCxM^k^ zNMoqhT9dZKrB?>?3Bf>tt-Tx~i<}d9&uEZg^_bJzA2r`X8Q?CiECt`ozYj~mQ7=)4 zGYx~VP)O3o)->yLJR1i?gymKKelEZ1k{$5xDM-QzzJ~tw3!2|(&0a{?HAf0ZSL@`5`%G}p-#NYkpBM-cbhaOn zht2d0aiZmTH{^NMXa$hcICR>I6gzsh&_)q|q^;HIoO(6BBp zp_&>%(iqOu6?}`-kd)r-b#!!^;ZFYnh^ew?`WHeVrJ2_ z$qn}q(Nt%w5>o1|H1VAyI zhs2l+R>?j3gj%lm)aLkjJR)Wzjkp~WH=n||E2^7^OYDr8&ii8mk;Wwy-%miE_ch$< z;kzfuLv*d$Rt25Zs##p-=T5Jl_uVL>fd6Ryn76@2wGzdF0E>WtFYeQ77hZO~H-Wyd zpqbZw%pS>i5eKuS!lT;wXubwVhx64@dEfn>p!&-4Gy%`;R=t;jTzOqy*NZpOSNv3V zGS^_f$qvZZ$sX`?!c1eIBv?q-T-#vQKshQ1Jxx)+dC zA3P4wa-S!p0lvQ9u9Z06iA3%iDKsu#TSGFrA>_SeBy0M8N*07urf%FpE4Z`sW=%Uc zTH&yK@vdiR7e{R+_g`MOM_#wD_-AejAy4?PHS&Q6g^+Ap%lXvg1d4bNzr(v(AY` zX`H#MGT3XKkWbF?YPZY@`LZ-UjneHGapDikKHu2Nn0!EaEzM*ZfBT#DIp60Ip`XAr zIe*FNJ(;YOVr6dFUXvu>9URqlV?w4^NzPCr^&neg;Bmer3{&{3v?%c^m1LW|FUD2kOugHuoJvv<@7 zBEGde?O9i%hXGKGz(ZolH=@a^pKbMBTkM~jT|LF^pQ!JBC=H~61IZtT3Dgq$6at{VlOUBocoD*7SQ2Gn;=6YaKI($hJ30Ozhp zREH~H)V8=rs%F<~E?Yn44HAp729}kH`c2HiPxL{;ET=cPKE*4%EpM0)D6T|0%)8$R zwl5pwI-G0{DWS3x97)3Nr0gHr_#qz?ps%Ny-VE)|bR8~qQAR6mD6gB*+jQ?pvFinR zGIhPPXUMVL2m)QW;px_xt^(hwUdws?*5$Y8ECMS3vd=bMU#=gI)h!aw3v?UVF0K}5 zT3MP`^DwB?&D#`4EG{k;^X1F;5xV(2P<n>=f2}JU`YItVfs&xs{ys zt-SjFH;V`Vi^Vf{t^zX!4+4_J3<84qbx5qSiIIUjz{t_W+y(fJz)^}&dPV;9Px-N{r% zN&=U#&!MC>anEp6{rOfUv!p=lrv9*zQ0CK>&mcIb|CN01j{dc+XbxeKA=>+sF{?=)Imh% zP45N0)6IZ`yIfW@!L{t`z2GoKD@9%Bc45tt5;cSY;Xxol7YFu4M+awiy--nj7Yz$; zj3;&g+=p34OXAOlg@-}6&shw@KYUx!ud)xIiNULAEV~`$Q$)Nc4x@6h3`Nt+uzG$1<0A}vi%kTy zvSs}HM#!;;*r)}UvgUO{#7mZESADIwYyBdPq1kD?D5n>Pi7FoFavp+y_L=GmZ&7hd zEP4S00bxVaX=!4)>h;&ly=71@8x0JCYEKyd8GjR=K$G}^gk-k z@{7YBQl+7<}!wIV+l5+uRty@*MO$*^a4&Udu&X4r=d9*(gzY1*f$c9ffa-7f@B=>t<9a*aFk82JUo{2Eh{x zX-<`r%v?Oc2o`(Nk4qN$7pu-g_a==Y;Yjt_)56W; z-zYnF)$>15GMH6IKj@uz;_*-8{sX%YdX!$I+9BeNn5m{v2*JsF5s)~bwRL|DrHym> zdvc(4yY<><>285Yn_B?1R*RP8(}&yH%tcy-H~;>S`r&~4!4$$Xu4iM+$PS~5BYX+B zN?CrH4pE+qPP{-H0}veo%<;niK~Ht2;&-#Ckj;!~`ORuPp7jC#x%dim&!{|Ef+M{% zsv-QCV&b$(6qWn49Gd3=UhV8h*X9PHr~pL;=H9C=_=4v*gibTRiq}a)ZGne?I(qSR zSg{;7mCF3244{?RAK3Bq1rI0O#h=sP%Xv~LUZD>1jVP?8lyg3)@d#kEE()104O`3& zsoGU`XUA{8&O1XN@e0|g)7^RlJ;>(9WQwvZH*|Rg{r&;X_=(Y#==l)P2_p94uxZ!T zi97eq_v8&H_HhsK@OOtQc!vt1dee#8$%i$)@c!)Hf3vIFvrF6uB6u69J&2?JIXvm- zGHu7y&K5IlQG6fMj&=Tn|3E6~if+}*LoZ5(FGTxHfltzd(}C}_g#bU-`NAJqNc}4n zek3vb%sD8q#cR~rWIMIIV&}}c-C}RewD{h$y~LLdKS73@H*3D3I{=5ox17B!+|tpY zUA%T~dwL-tICa}}vLv@nS3H3~mVdNO^X>WWkhsjdSzuo2;A2b<_uc)-x5TPcVXK<}2{or&cyW+KqBT1|D+%`J;RQ~?&M&`1`?poo?-O2}n)US=F!)*5ij+lkXO;|VW zs8?XaqPYjU#p~hA-NC9;B$g>#V%{vFS{{e*uh#Az*PSPvIjcq17oNTfE2oRuYa||w z%L-fli1_|H(~4ku>uQHZF(&fiZ8+05ui^QxaaZJUY>XzdrD`{z=-L_WL0w=fR@|Qb z1oWCQ=b}C$T2)dhXk+9Vxsc1F8<-KS#+fX%xQ2CXud|7*m{Wz-wr;@r%6jsGRd_N$ zfQS9!w_R3ck5?-Tr)gBMUF_&8jXlb3tnDM?CYN78`g>LE`hJWpJ;rPN&~S~%7m5nA zz?M^#)i%oEJ?(-88=zv}sCKOx#jJ3;63!N5Lc=f)uR?394TC1uyB*WK9XqH3qkjHxcj@oFJ$p(WpdWw0Ui0WtPlJGVE zASi8hV9=KzwyK{+bh&q{oArDmOnFooGf^#jU>L^YO{js2V%>&wSw$E{16 z0RS_@B_E=0Vq0AG2=T207Q;Zj*1mIF3?+tL@;*|oG(J!cY=p{G`7Mk|p~eJWr*NpR zXg6MAewN?2dEkTge&EfWPKdPY`enlb)hhM2T&N-MA#N4y)VIicx1BvzwjMMQTGA&( z8h`nv!T}f0%eu~m5n9M@rfjtTeIga9NoQE7ahTWXRpDQO7E+T%W0=)ZLlV$d`ajBb zm;eB5rqUzT5-;C%Y8EDL4(zDo6C(T7i~!q`h*j#Ad6+Mw3Q7aI#uEc<;oXlK#J`}J zbnw61UgJ4g4U05}bjb$yp1MeEu_p!CuDc(({6{%1T2p&UfNih)5&IAOxb3T!bmXS= zQK80ZUMC)!e+4>dO*-R3jWq5@5263TP}y>!fn2ve$X<>3SCD|xM7Ni<>P67vP4@2+ zI+(RHaI4dXzd&0lzvO?M9={rXLySeP4YQqqle=hX{+dz7)8%OFD(8n>w=`K(ogOFo zcO@It7u|kpJP~O7?cZS0{jfis5NdQIXu(Hm8n$;^7X!Bq#dG3G1==3|i_sX^Wy1`) zzVYQD^w)|(C!Mco{{PL@*-97@YE1odS^D3YV1BpV{ExYG|Lo-DlGIhSnw_M+x@J>@ zhr-kQe65+GQ}CC4d}i6nsg`|ZIT_LeHt6^4|Ae^BwjQ*RkL##`4{;sm9}9L=Ck$V} zZF|Kct{xB_O7)onm~Dk+VtcXwvG?eClpBME)*jbna3EFa?kzv!IZA>PyF-%x65B64 zDe>d-QTM=8Zp+>ee{^Fe`}1{u$Pg7p?w?fVp|{tDbxqCx{&{qsy3cVL(P)>p64#2~ z?mg(Ko8=nqMCgf;$=y9@apPbi&kyP?|Imiyd1I`%`J3JBsf1h)v1z=+S>O^I@9dOs zX_KR>(k$!HT+eP-iEl9Tm}TD_+0h!=@h$@k%aVU%5pc6r?YDtC$-zCB9XEMG#mogE z%f)W4<11KNI=yZ0#+QWb+VDH_?U}+k7$I-8l8>OA=-Q@$kOf~N5!qDBkU=$uVI79U zz5^l{*!zUGOI7$pns|eyV|8 z(;tLXeJc1aJ8H0RE9|n;+`sPLJgFw@EvK&fpkdOGpR>;&w=mFba8lbp7V2W^@JMFO zoh+Zh$<((v+tZJ8NWz1kxcHl@vxKiao-Zcf-6NLNQ}gF--Rh7FT1p{>UrnKRp}lC@ zNSViOZtbHV=HSJ`hS)tFj@T#L}-(SpS#v~k2eycO9Fch4GQOpKSX$GL># z>xd-}Rz2W%$eO)6Ktp?(i;wM|S7s3Y zDEXiV&fl53BtNTIJz)U6!W~ZQ?tKKbgOMFX$__CE>{em53|OK{5%74p?yM)TDd|DI zClLhlFZW%ZP&sS!S79r=!a04u;p26#LNDA)n}oS5*rzwPb)a@suUN1~k)J9ir^92E zCt%mD$fo7K}P9%Z`r#LmCK2Q9W%8@h^(|G*kOLxdTu zMQA@^KH=0i+}{^w0J7Plf3o_hKF!8kfe|EFSq&px)+Cw< zxXFoKiN9o+DVJGZMy-jYvs+T~v)fx2l_t{n{J0Sx6BTU@dx%^~zt{0{%EmZ~7e!EC z*v`xz=6i#Yw)bM88B-4E;KLNir7Qf%pvYvWD-Il9G^pOXX0VWa9|2ps#3!gC(57BB zf`bd67dwR>imXub`eX3>9mJa6Y`7Lf|{)&XB zw{V4{KSu~$2&<-=-gwgc@A8%St9(V}Bdfzk2LV~(0s(>k8bUF(Hn1`If4bg8=>Jr> z{?7@NzE7m@JPMxww+R#^d-(>%uZk7zUbo|)3if|dx&9Z__c<+JW#z^6&yHlsF{p0j zLI2QT$QfhHHzswIP=S#*eJsI1=m>wlUju~d))6&<>Z|KZ79|8L^?bG*6oY(_?KYc5atFV5pCo>42;C*Y-`q z%-46H%f}5@Gp7LXH4uH!dlqh7qT;-s_6-W#F};JoH;EOlcA6=lPrK1l&w4uXohanq zXGOgTplGjcv1%*oRb$O_$4*i^w10jEk-+}^v!|+zk?V4 z-2|&Yfvqx!_NdfFZLj!F)ouLe8@fsSY2917FgQ~C628;vk))j8nTO?_i(W$Y_(sDoQd~ z#VRYQUR$CyFcqTsRh^PJDpzzg$_fid?(Q$b!l)~wbk$TtJBpkjOBYV>=G+}ngfcfr zkBj3}+)AlSO6u?Gxb1=_b#$~;HMCVqcNr>N79mQeq#}FllnhnX6whye>4h4IrEg*? z=S@q0({r{*tu2jMr5IT6)^|=e6PZ%Wt!62`2!-!BkrmP?4$jb3+l5U~R(XA!SHYd4 zLVd7eSMi{@BCV_}DJwzL-;`X@FOeU~!-{R|{j*sTy6xlv}1?$z`F(U%3Qk`{`a3+YoP@poz1S?7+1rAv~xme-<2)TYCGa z8AyfGLihayQiLmePk@fB{r--y!9BqgJb9UVg;1_Kfzow!e7R726_yb?gDD6a^#pc+=o!n-&I6|ld z!rGqJ9R2Pzx4MGht_wCHDCoyT`84eJ{o9FxJu38)fM1gkdP$!>@XHP0Hm;=T&4P94 zMh%Z73Fcue2Q_%$k6gDli}!BRA=rj?W}_dYp;K?9>R9Q~FN~wM5J*b+hQvA`Jlq6m zms!3XnaI=fK~>G`;FI-FSfYs0j);LV;vQ_yu0(j=Iy`c@NO)~|3BMqXVY9AQ2Po8O~ zn~mW+gm02Nj3;!Vrs^r-R$Xkd;5@lT*S*ut6MrCA5A`}L`$+`Njo~Mzp$mH1s|nwY zxH%!;)qgwgRjxh=Rv{sXQ|VS}o$?`{N@u_oUB4OUmwG`oPkK(?m+#-W$}`7{_1oPD!Pj3T`E@PwstIyVt59ek!$2>#;sjk+kZ+Il zzxO0GRM}^ht8h-cC@TO|iy0!nSp990%`Z#~5jJMA$TSuB&0=HS&N2Y2$W+JI0og*} zPIEKDUM6A0vrZMG;_sz!2l&P={4(Mugzgz)e~}8IKFmR07(y*Y8KcX7I{b3|k@Ief zV`6;j%=7IZ!{mxKYc2=oDGF=&jcEeG?Cu>`pnsh4Mfq~mGK7ctWOt1uAfKfABAl%m z`LA9U)!&JprHkVB>K$vRE_|?04XM~KxSo1x%^a}Yiw2g`=v_f-`1-_Kf)ySO?Y&bV zCinAtukj*WC-mFcxW(J{1#lnJjzjEtZp{xKM+jeynt07UhFK7O_AQWguQ-F`G=LzY zh_16<)27kdB78|C1Y^;g20m~vhoPA-ajyh=Kil#hO3qUOU=H~WlgI+sqtCyMnr3&` z@R0ig>RoMEd#Re&a%S1E82EfQG^4ciCZ2sm7o(kWqX_;o^ttocPhc0B(I2}DP0s>- zNHe6H8j%Pi#q|w<35B-29-6-sJ0ke`u%iiwEe5Z*pEmc51MV`9;-I=-X1QLqO`0xV zG0hUTI-ZXE33mY3A+6RJYd4z7pRZFBUS0z`QtjlO0{*<6aKQ=(#}$gp42^H!mKidK z8bmt%XNd3YI9ZyVK)f$e&gs{5Ndm92ZU}q5sX$A7ZC_aI^?o@h(e56+r1?FGpR2lm zF1y%cIeUfh=W1_8yHPG~hVxAMZb6e&AWr*|hI66ytA!XiXBLZS5jRY-4)E2q7jSO3 z9jo0Afy!rku^qSCdS%q^ra|r|Kp93Ms+j>=of>WOk(0J__k*7h*S(Y%T?}sb zZaP|vJ7fAbYkV-uih39F|R{O{Dh&M$a)h3ka8`qpU_tAfAh0CrtwSC#x3TfS)r@4Weq7bC2W(bV4%7 zH>u!JTe@}g@0CrMCd2oIOdP?d(T+}74vHPp<^dCAC(qZkl&9GNH{b3{Prsc4SQ#?t zD)BYNPhN%x+Rwcy|4feFJ(BXUC|&&O47z{j=too-=reX9m0MZGNM<{<)h$pnDx~V( zKS`fJFpxH2e&w=8UO3$RfJzPeng-L~HSu6`S>d!6bJ+m0{pmAq;j)HZf(@BYJ%^-B z9WxeS?J_4_Ev-(CcbooIHDUbdt^T7Ed88WSE(upd&zt8H#9ed%S88e6NZH+!&BN6` z$*mo2R(XKOdd5h?XyiE+EX)EY&hI-2xHMKl!twl4HK{S0jF<~lYW%P^^J%qnE&u0( z)RHMvG6#IsHFG--&!zoR#F=^Zy~7g31?Xx$!|(FUUQ=V>f-pi{Xo!dPWmU&C9YT4K zHu-Bx(O}VrIo5F04({jCnQr8LDKtFHPI4LQ4P=rvBG5}Yo~;Rzcn>z|>^HI_*s^Zq zx&gwij7xozIMyCi2(c$Y6>3AFDIGaO8*IIsGplm!{^sp0-{{BA!-PmTt zStho=O&S9M($Q%g-##V;o=eM^PJ!Su%$8OgNiG<%)QBu~^cY(YdsqjRO>TChH1x}m z(-??HM<#xSiE66~`wQTaDOngn>(Bl3B`TB_cbo(EfA$L$kDY|4PK-HuEYo3WMSb(g zHg!P)BMu%{pEdS;eu;0uAbq$30}$Bjbq~a~X-{K% zTs>d?;bhn3*Qa)nwprlb3r}v0_Vs$yE#Yukzg~i_UVNqGKkkZq<~oM(2+bVm& zRmr;MI!68z1=}#S}mp-xIdKZZJTqGY}2 zf6@sQWEd86T`-Pgj_dTzOsW*&*bHHG?+|CZ)#{%9@ic1U@21Jg~-YIG%(@j>-TG~x1X`N3U|_3=}} zi97z5!VVoaaSoc67~eL3rb;+&%VOthB4C(<;6!Q{LsNM0S2}{E4}i^shYZ(Acw3&> zvfk}JUQIXKXE`Gw*p8J|zGi-WTynVomkxbNXP?%136hF7o50|X6n${`@9mg9T-IEz znt0{wWd?L-2lnH4F$&?2Iq?SX6u8?B8d z8oROHiXSyzRG-&_un9b{iIr~3n$?E!wfgg6pvS43FHw7|o1|nu$E7EP@E3wXDYK%`=(h6!~I=T*%V1U^s25aTd%L-Yg_+w=FyEwsU8pEuR z!OIFdu|5vkr&EXeC`$AT?8vr3*f+HnPFYM(Ein6*@N5LazatD@Hfnll&M0Fr3c1Ve{RsI7l#Syr>v3(Q37t zjB4L3S<$F%Z_YM|2HyZ#RX$nhxxK=-_Ql06GfNDxcu;RCvLn4Wr}AyZ3zo&ObS55V zO|UhH{1rC^oa3k>iAWw3xvRwL-fm0)`*>x^D||>D%O!mo-DfmqhL3X-BADQ0*d9a+ zA$NiN6#&3?q?2|Vgu#zPv>$O&A1c_6-Zew{7W*p z54bE5pir}}gVK~Kxtfe$mrbv(*)&nio97y{Tx;<(yH$l-pKaUEWJx&Ab3I?4SL}?_ zC5g!MC0Yaemgt?W(1x2c-a@jO5ZvyGC`ti(AIwrSEvELBe{yUCgRIX4T zxY%gZEx~F{l8Oq`7`dg2V`bV|I7vBl2ZD9~h6s}6Z@MV0paMjWEm#>xjKK%6 z#Gw9~G*tANM7Ong=n+Fd%O^&$8|U6Ax6&^>2@)dAExR<=ae*&qF%CeL&eE6 z#a9`X4^$Tk1*!j(vk4JdGVcmbZd()FRsf9}XBxra0(3~i?Om>0@(-bv@GNc606C_+ zknn|}mh1|aH1>c!%Rg98*T}DxE zP;WMkRDbHZkOUW;>>(2QhD)nEA~n!WygpM;5>_3W-|A6iN95hjYUL71US7EDt$I@9 zd$4XP<&(R9@+mcmIpxc`|9RMkkW!dsgx)6B2xQM&MVbECWMVl3f2<_-wo_n&vkLLk z^auIx7BJ~o3s@2j1$-F^1Z3{(wrTh;29ueiiMy?dlZDa$z7708`Aa{)+Q0&TaQ-j+ zrKu;=0+p}sFROue_dng>|3w%0zo5SNYuU-*nx*)fV(H^SF@?^uX~oKg%xf0DG0}PE zHyay)MG;F^S;6nO|8xp{iiLu)cpUGR#jK|FgK4^a! zA&@`aZ_*Xt>;rSU-|4#5mD+E#@7Xg|+nx3FKNn8SGM@cZ-{+!E3Jr!cVc(ks{e$(} zRV(?_YR4Pr4{vp-)xi^C-~w^crtWHm<+Cd0jhKghuqL=c!g%kugR_9OzTey34z5@^ z`u(Q`YX|EPyV8C>9TX%GUO#<1rvKAUj08)&0&9?U1s=b%P_Mb`lQ*?YEzgQ&4%Ntd z`N;Un6^erwW6r6(iDzyT6tNy^W+`GXpHi7(}-m{Hh-rya)w_nD}YdQ zgmQB<=?7l=_!Eo{Ue#05QwjE94J9P#QRC|To{}8{Za&qm(#PxXGKuW@D`*Vg^i@Yo z0anH@vN9jA@$v1K7kdCF^^*-;T_9&?aC@1zyb=Jws!rIua6q(@E=JgJ843{)$nxT3 z<4K9-*-@NN{B;jC9ZJN&1B-xIt5r20Qn+a9$%ZG=jHPF0yV-6_&tZu(>wkQB;N z&1%8`x=6nlLX8u(4)aTMD;op|5`7C-19u+tp+NuXDDx_|HH>mZ$8)Pk`p;VVyoEVK_y)d@=CbSr0ptI(QIZM}fE=dC6gJ}9Smbq)jaO}Afoy}f=9 zVj%_2_IoIlcDgxm6*awzaT*Ml!gKqiAAUqwLiK|~IcqG4)y;E{`{hbR1^qV)WPR;7 zwsFd30 z)OKT0u?JSQ8?U|JTZ#QkkLJGI5cH*8_qYtAEKT zsP#RI6W5+~A}e9rP_L&FL3k_9U*N^A&~=mMcb^@>>}eyF+_OcMK@;fvHf0m4knDL; zkk>b-NE_t~BX2$4O8s=p?S5o|G#rb-N3kFFCVBWiJTuUb;vV|Fz;^q6FM+iU+WXJR z($LpN4y8_o&j=|<`Y1_Aa(c-^ih{gHiV8_JiVEpQ3R@{yRA`Icy|TOBVXosYV?}O0 z=$qHL5-;Z&s?7|i(FOioO{x(>5#>VReE|{C5gBuYS9^@t088bld*bnTA~pBC*K4 z_+H}L_WgZg`>mwQh}ou$XNkad=j$8OEA2{2ruUk>OHaJm*L}StyvtCHO88jh*5%yX z)?1s!xefCn-rqmi8IPYHxv_U#$?-T&V6r}SLn~SA8Qy^N!IyLOf|vGdso}z3kIz40_yuI^jAu*{7;q`L35SA5P>PZE^?LPrd)fiF`P4 z%^}K(m$}HP$GH%k9+K}M>1J8k^^V*X{;C;0;joLP5~CNji*vsFZJ$cux@ut8t&>^q zL*|1zs`N)RXCUEBwJ!cA<*He~LvFMRR#)}!6#KL>=2kt2XS!YFSD!!o;%+<08E(8l zdo0&7%vH#%4nulbpHBGnpEAWQO$_iSuka_p(l}O*!9mj_m%f(~x4$bUve4-g&aWv~^vqQu?-B z7%lG1_NxuWU>DK=8ePo+-&`*#91EH`+p+)pdNgz9l_xpK!L00@X?md$*--DoEt#Wo z&1$Cs{MlPM^?KyI6j?bJzuUy0kuP0P9n$P!FkQgoM!Kw7&{yyPYHiGQs4fz#M13u% zUNvhhFANqB;#Sl`RInOYPzOt<`{V#Vt>0yH^h&hAdnaIVsFxRET;zR~8!uUGrKXJe ziI*J;o0~4i7BS0gY5K^@Q5r|ky$Iz5)WQ22hP!12bb%gA|b{fnFp||rm6q&?(lo0i$hUHG?Se6l*=-n z0K5FWvV5e2xDD&dKPnTym(%pWqY!E>uw1YSu~db&&2R|SJ{b$N9?;y~LESoyk_W`| z$^tAEg~^*swpp0DOvUQCUbX-ZW(l=#fa2jNM#o_l$V}<-Khkyt%|8i*>BR%J9p}3b zXK41AQ^e`P5Q!6!i4(P*ubLxZnn`blOiqaR9HocI)bPFNp@}gYZ?>9A35DtD`%|PV zxSzCTqLQUaqqV)T@t+T8X!l}E5%?2B{)`F|G~e+CYEM8l@0A2hng|Y=P)BR;d|{6Y z(>I@N0g_Q1B@bdo$AN!F+y49u6e~>M(E~ZzukloPSVOkk`yY+u6t{b^;`EVUE9w8W zN?y<`NPA$(nOu zye?d1Wdz$ybt-|CtLIWB&xUSyt$vo={wv(K|745TdaQrLOiuhMgeame2U{;w-E#l- z=>c_(ZD5 zyS49C?X6oyF~x9Bd!K<{_rFh}c6rtaD~5huTmbk7$=-CP^x`P$+`-z33o&j@k5l3N z7cv(B-M>97tmdh3A~_zDHu7Vp1btN@sB^#9;%oC9Clj21uY_u#_NWKDj=Kl*z+ck^ z=oga1;=C^P-aX4zdx<(Xx{(Fq!?byL7QPw$@#DNX#$3qR81IK?>Q=-!H4oYtbF7=$ zhbhkzl^^D3*|4J6)SZpFYCN;!)JC>pb@^_SB~s687GezFBr!M54$S{n%Tr->8pZZ^ z%Y>vniuc)ir)bX_%ozoMxdhAs$)RB1kEyyOLptwj6gI~S63=!fhMtAEFB7COZ?bSq znEhHlZ=r3f(L(u8(Zhr+8<9|WCt=}y+JB6bn+2MzbX>&k3xq0+*w3UlD3JW!G9anz zDh5q&pxPP4g1<(t|KHBxc_y8EsN7qGSL0G?b;|PPulfK#7O~9-vy_MlhG)6k>=M`& zqq7dnXKG;~^bf6CgB2~jDe?#0+t;~Sk{5DH*TjUbVq@&xWrs_n@TY#GBJcQkQx2Xp z^W(?$&kp1{wf&HmxnYlXi%8t}f&PH?$8MMh272Nj8YR79I7M<3xf>4_o6$ ztzB%Dyf`IV6?#53CKdA-q~5zz8bI>9f$=g@poH{EXXho`kPmF;)Hd!;3bNX2i&i($ zsas-o&m|m9ib0$8EPU#ecdM4MV=jvP|(pJ9SV9rl6wDC#g13r1k$o=I5+HWy^iJ2BkF^(d(o;p%` zTJ%5pIX;W!&g75{i(V33XB>4M0U5d1%%i{AG|AT3K)4a6TN&~YEo0rfi@+bcB$Vpb z;$yY15{{0PsHVM@(za7bEgdcJ2sA9KCPt}_SR>Yr)zX9Q)%c6`r%xCZYr=t1Lr0|SjNN;DuH4=ZHCVfMo`X06k35Y?K z&p}=fwG_JMb~zkVBoTEjwbO$LRvWwo5Z41 z0d!uq!)*;5K3Ce_R~=X_S1(`M*nItZCEYpWH#mfz>DuRED^RfL7g3h)K3-UYb=~;B z#)Ya;+fLbL?0qP{8^_Z0z%2EJRPBwEjyAdl3diV2($v|bVE$h{1%tE0l?F$)a>nlL zA=2AtPo_OPp?`<(44WKCmqFFL$E8b+q#5n!eXE>OJWHUs20uD=(}z%fdraX4iD^rp zO)ru%@wWQB6j@wUurA@xe1{&V(CF)jjg=UBjOuMn@DHCQUD{k=D!-%90s_+{>ipdD<}H7W6{An~WTG)C1~S(OCaKQ5?jxxaPTrJpp` zX1r|yD^JUkUIURjzo_>_twVn^LvUJp1BtviYnek-C40F30 zZHTcaIaP!O_%qdB3^i4 zC;?&SgsZY_OMwXu7ZSz8yY5k}cn=hE=k8aHqX64Z{emkMR|V9997yOCEV3-l(Xd$F zsrg4#a1oIZAb6+AU1$VoS7|H?c#I@nHtox-UMF(BM+UTZ0sR!Jc$f09%7)&z%h1RQ z#Qu425bIZ<9eP3i-GWy#9HL^%plcIOJBH#e9MM;gxy62Z{Z5D5FYuelWX?{j!x|@^D5k{|&`l0CQH|`a3OY?~nxod~UQ^0+ zM+a0m(DHVV$nQ|^#*#K(4%2FRKqY2Ci)*D#m-6QlsMuz8icH3l525RZaq@%mhYUm< z0C~DodIkrX{ah0xfHlFn=jepb*#tU)3FpMH`^w|Z((!h>*RjX7a4x+8BJvAPu_rrQ zJb#^S4DJCh#$z`D#yal$Yn!5lhI23Apbh+PXM}q{SCS44?8%#EjB;b8sfRKa)`U!JT`*X_2d#C*n}YZ$+GFMUqT zX)iG+`9!P_mg$gx>{%^*bo=b1UbnSxp>X+7+nb<0z2*ev=6Q7$UwNBIZOP78#|>*i zaI<2f-aouaE$Y?Sw?#wJUR7*C^Bc0T#F*yep)EfBcIm)e+L}}Qh(+#{_(l3DnZsbI z3g69m#OSh?MMU4yCqsRC1p_Iixz|(9h$M6A*TJ&h^3O^uXOz_UD!q2sM%!7CV+B&t z%qc!-9bbKF)Vev9S1O_c3q$MSl0Rgzs;;#%-=aKQq;7G3vbkJf#r7gE($2CRgo(7k zqQ{D{Jie#xy_D57PJUw8!c(a}hr?0d_3=A;4o|k5`6bx3jV&pwUCZjK7U}v&<)UxF zBI#T3q}N

oo3?sMUGx0oooyTi4Vcn&-k&=mU#_4ZkeIWvv2Bt4Yh~d}H}I+JK|0 zgsQQsG*^N}@J6T6)8>n|X&HUW1G^A_l}(XDQG&jg+$A4E8~E}O^G9G_ND*@j8AY6w zWzXfBRcRM$rDy0Be6pL5w6<0IwpGY)SAe2)XhG3y0wrVVi1OMZP|yDQyv6RV4@*St zd?6`85u1TE&#;;9eg@D$RXSoh?prjTTJ#9RrRlMVPCu!O&4RD?)Qay6G#gY0#CMZ$ zs`68a#V-*F1a}PQjIH1PK)-t_nsadnUqf*nGBFy(vyko*CY}M1vpMl zg!1V;r~sBOgBj!uRa$y$UHc;fp<-nAjB&`C9BFShybP`IZE?^ z4vL*Xk=?1uf|3ukgOvm&-|3eF#W|Io0Dr#1P19@J%-XLCIZtIWSbG2mA;2D}@VK+` z&BmK(WRXw#gQ!EP+bf>y<(drl^_FTDoeWU@S#1I+bnLpQ>X1-p3UkhrUI~;h%^x*@!TzC;QeRCmq|ehfQc6CSDSFO5N1v9Jl|Phm4#> zF2SLPEy-cn3C6lvK>~W1g66rzT6ihQPP&ud?bI&nV=+BOi$o)S*=;%$Ourh5{R4Tq1um35y4*Q8km zQAm$`_>QWZs)|BowE=aAdU`k!Z1(llQ>gwj@shm@DyRAMwuJA;25)cXTt+YN>wP(3 zB0bScQnisHeGE0Gp4q28S9;_#sf*Ic(V``pJr}5_`P=Z&QKbXZ$WUZn$wHPqQ9YEY zOP_SD0;qD63Fqp<*Oi5M6b!q9hLW+tXjz(YiP+!apT~?G2wl2!^)siar^X1&m^B+4A44%g7Mvt?9>gcw8=8EYJl|n!5`W{d z-)c787jL}}2%lLV_b>Rn!<7V}Cr@H0*W@5Dz##6t=TrO9&>q~7_1@`6KtmRWYfA`h zRgG>4#V^P9Cf6uxES5LGsE=^ilDy*=yC3Vbh7lO(qFIJxq$d zh4I=cG^jzMbAi(E=okC*+qo~d=km58E}zTO_G4Mo_Y=x80MxpID7X1>eP60p*mcjaoGxjJWYZ(3S# zYO&y94V^b7;7l9&b^7fztp4d`DT@0C#4kT!eH^5n`!$~x&B*m~(97k9v{XXk_SVsy z%e_8`Urs9C)~D2GSllr$cCgZ|LXM=c{Z3Nk|qjJB!ZRw7^+Fu82LaQ zIr05+qPphkO$E!FrjWj=vwmWCQ7Ggsm2+m_9Y>F5o81?{Wsd8fSr>SpyPVEEa^5WJ zVXa?Mh@TDXeL>0yfv2Rj!NUpjUa7Tj*pIRY8Ly(aQz9d??Z@{>I6H5R2v#roAw^pI*1a3(Ik<2qQ#|ZbY1y+8<#zh9(_%J>smr zC%%#BVs1!K^sQ~(9QQ4OZ!{0s#|~`K>Rn|y^SR~C?pH+dhKLXn2&q@o$$E>sZeSbB zz4xMe=CcFFSQol9M`F2lX|v9YV!yKD91HiAdU65S!n{K8f2 z%EXn-eAgA-JjR@;tyM+ath#|;^l6n0$GJ7}M@roxO9%6p zrT7Ew0B6V($j9m(1nYQfu4a6N)(N;C;!5Q;A}0qXEtslV-}C@W_ds>*f-PP^b` zU{bz^NjH!|YNlmmY)@bIdZaq{R=;9AHTScq`OJ8dWPkv%zRqB4U$9WY*`KAQTl0)r z+k4Z%(Ter!Jif4D*#=RXe_3!RVZ}ERL?xJOTh9}HehEo_+DzB5qB5&?^|C(0w4(W9 zyZJR5_K4goG8^DP-o+0ofsU5-z+mV>t@VYz;U3nBjg}L3ZfnSmBM#3>LiY*p;dJEHR6yRcmqS{$l|cak1Erw zbqLGqhx)#V6vGs&1Hb72C*7CmF{1I0EAa+go;Ctjq2ykbcDOEPHt#MB?oK?MeiYyk ztrdIjrx6KxylZ{6W78Al_I_w1cyqOOhpT)G6W?&TwqhCp(j#guYV|zlJfabf-iDv` zr6ka)f|x&y;pB@EY9mo!)tG*h0Xy8nZB~{eewrb zV>Gm>@h$wy_U=a%D7WkNCYKTxu4{ezlXHYVNvhXWX}cf2Ldld76MmxgJHzBt+bi}T#xe;f^8@%-MVGm1Gwh6UYOU|@`|eg@(zwi z5_e_oHI9ia+ywq!r<`>E(12?HP^xvWO%hn@(rR!%3UCc*3n#k2gm=3XVs|j2`q(z$ ztlF=Q#%iwO8qVSIR?vHzoa-9arHvs8<^X(ZN%Cp^wgP%HmD%@x^!CcoqMMt-5WvVG1i=>Hebj7?)1Qj zgVHqb>K`STZZ95%&Jof@#?D7d(KCc#ncmfPevYag4*N-0w>FpQOkeUq0=L)nUhALM zzchr#!>-$ob7%uC$dpnC3x%HQU4?)eypIFN5A-8fh%j+7oV_hmip{(SO!HDbX!G3>xh zsi}j*bu;WF|AE|SXri2oD*o_S+3M0Pc51LiW31op+6=$K@XAEoB=yWEk=}aJwHaVO zR^6|kHevObaN)>}7s{Nhe>He7m}JT~mUBF$&`%zC57 zs|RPpADe=d+TX`t;6kF^8EXK-)T$aRCe(_Ee4ivMnD zue>b4s%ypTKBVuXJ>%#-r0#PSjH(ZY^Wx)&Z{o0BCz)4!?~tnbae?-kN({?rS) zhS&52owoJ>sUnh%qugvx5h##rg`8PKvE`KvmhNUA>wVh_aU33ky-$`Pak^nmx@$!~ zmm@iMZ0*(=t}z693>WHd;IMUjV@|YI;+}t)OX|4((AS(+9^(;d3|vM&zo|2L^f%TU zh1T<~k(}S_mPRGpRq}4}Z*6*q!J?DF^mOqaTyU{QJ`JZPPsddASIZD{-KbO7zJ{-e z8fFDHz*v*w?K((Sk`mAJ0R8y+hZ{+En#oUUgo_`K%u-kpn99S5yn*(SAIPb+$@_R? zU(FBTRY<~pfms>PIf4wd35bU&`C)4lO+=#2xWi+~DcShh3$*;;eT#}7xb?c=*86FL zGodM8WbINq?3a=-^Z3)^Airn!dAaI;LQe|ZCjgePsBkIw2Zh23yqoutcM39&sN#Iu zH8Gm+=cYrpZl*Oo5g7UB3uT}UBRaSeuR_5Q9;8(BxP7J^Y!KciMBX@o_-Ai=Eu;;) z(xZdRa+Pkah2ahjopEJX5bfjb9=tD@2?M2AD8Bh8F3uJ_@Vmi3EPDCD4C-5=L`v2e z`N{7pPE(RP%wqqkvPP0h<>tX_btbX3TMd$Xc0IX~b`Q6UN0D_X+*bJrm0HR9Om+_c zlHh`x$GYXUx5`qXlQq8FpXSL_oC@YqF#JVTrR%DwJrsV^Nj@ZY&{YL$zbr(_OFVHA z@h=IT0-p7T-!!kYGSlmVe$C)x#AKAhfkj*pbAEoJKfH3qDoyXmg$;BHI^{;C`%BGT z<T*S0Y`t#*CvQAt`W=I>(tBf9+# zo;{S{ba|Y$8O8TJA;&IQ^ViAwehj>U&)(^H_Kp{VdR~=)`feruG4dVbcv|>%XJc;2 z;#Xvm?khU^9D8e}O3tST1|ug91+n(t=TnmPUk0K%ShMAIOxGcTKLwu9bKC_@Bib&x`MgZ;|?VLFIuok0Bxq-|Xb>(S=9<86(yrUjSUy4W(;4eE=BE z4|2Qiul)-h2Wp;!<2yuhUI%X#A~@ooNUcNMP9&+d6v|s|b@JBxNw41Eo2~P31V+;o$yPic61vDm z)^vXj_O%hTMd6mphGh6eTPQkO7ieicEpho=Sp)Wo@!5Bu5AEd@%^Qa(rJQw=E@mdS zOKw3b1Fb!a3&B3>v+TOflH^`Px$pDCgMW@CCgvRh6A82UX8%4D!gCW^R`q+Yoft5m z#tRaT??uTklvuQDMgL9kG0;JqV3ep~Tcp&FBK4`zC_kPc|lHu`x=dzdERG@9%*nwBhZJ-V2h z6Go6#G-W=BHn1yuAqA-LXYNbjKl+7O?#T+YJt*MQ5J?;?W%R;Yscd=s@D~fn_aJ{(;4?UvheEyz;s|1Nd+V0^ND1Qsl5uNUUtk7uLxjM|xE9 znU2$~N%`IJnb}br90$eNm6K@j{jMhP8RXYEY$=^Zd)l|d?r+W1^0-d3+^*@3*cQC4 zCN7$Q60qusJ=7HyF<8)f7n*5g^(j2CicV^^*EvW;A$&|lJEgD@&u-c5DScd!n*;yJ zOVp38lU&#BI?H_MhXFW$VO)5zx2LX@=vLw>l;JFKt_~57A9UB7tM(U=LY*bSAhXGK zV}-HIb}`X3D*`}Mg3s}L!W|{o{IlDP>Dyjb&~f+9I*0mwDUtU~%LVD1n>PuWSP0Pv zsu1>g0i!~vPreVv1$Dd$Od?K7RY=nT?s8*gyjhhWc= zZkFsG^vR>-q9C?3h23qX6Uxz~h;*tzOtZpU0fv)$uF2y^3QRYGThgFO^h0;Qf*F9I zCiEBbfPBGh>XT2=k@J}hCyk%sDrElGd&q~a7MAG(2B`VX(qim6&nUx1HEP2vA$=2c zb7d3pUW|k%=bU6mqW&F~=`@Eb(}iV*4H|B%)r^vb#fjhi8DxZnrNTN+LaUR4ug&^^ zA%b3Bx<1B#T3ZKf&5P}1nnk=noG$c_2R$LvF*tdNnSN*0XLFqTCB>80q}JiP0ot?_ znG~y6{zJCO67yjaEDkcmVmvZHSWreb`+`|v#?-?Pee(WYRYMQ?doMu@I+j65c0h(6 zz+{eY8$<${nlsXi&ag2l>`MKc9gy8b9~pzeu~L6x>k60Iuye>RYc2mQR)h`pTyoff zwyqQL4(MVTd|6Dw%Ts#-mYK9aEYbX7TW=aSz2YLCn4q+fk?G=@Kn%%q>w0XxSovb+ z2MC7WvzY~2@;Q=R^QGOQD=Dymjt}(U2I%t!5Yw#9m`yH(V{sx zdduXiIbNMmXz6pT+3)@)bv^i)^TKZ;Ub+oP4}~>Y1?isp9;&{8?DojWdH+twb)W6a z%HE?+E{~A6t5%lsQ>l}ljLGM09c+~3b=69wUibJ>*CbkTn zxkhRWTm^xXi84N1JGJYwD{>Wo**om*{Q}2*Ulot`nwuIamt0DY+mn6RK5OLNT7yM6Ch3pZ!LYt=lW^_8jK|ICUuviIJ1J`K zV+xgJe*OW@RnVb^w8*k2x{I4*trB)!F7VPeuVk}e-evs0E4v7Z7Kj>^I8XL)I>dGG zQM@7d*Fd;^D$0F|+^oS^V4UBey=Tx-^1Giy(Q%kj@TGY8dYh zuH+QnobKufL0(Z}?sSlw;aT06fW74yO+)y9A8{%Jva84)&R>oEHdN>u*rB096hhMN z1V};|@&2hVKadozSo6_41`h<>5ftjaDVwk03AGCF93a7dx;_}AKKEBLn(*KElDB; zkd6N?KyAL7PbAKWwap|xd>Rl~d=y|Y9CK2OajhLyJJ+GO#yXZzF}i9=Q_7C8znC=g zBXl4qZl%n=o2+L1RL!R|yEzIFkYbL#m=sE*O=7~rH8!wHYOJCj5^>C4Jy=yYjN!yr zA;{X+mG)5Q_-J+e!BdYRK=es;_q^SGjz&KZ&_%Eo6wL&?Ztx4z!sbQfL2bN<+JSu|U?yX2~(_Su8biz2r1{ynn}E=QX+hifG{lMZn|x6jTGu zTZ#Cnzr|G^ta%5OjMsa8gZON|;tXEiva=uDS2nu|72maQUo+}`{|Xa=8nY%2QGO4Q z_^gTRj}-1|!sg<&_t{0Mco}h(#J@(xE()S=S@;yZ6{GyVIP%77F6V*6XtKN`IrCF=W%F<``%4s58>hI4XWERFcKr(0cZ9V*pk1o3wn6Iqx@-9kHZQ5iH+c%6OeUk7*8k=#(%FxfogokiG{d#^e zM#d(uKxD0)>%@dtMD@5_mvp@Q?WI7J%VU3d$~V6(a6TDeS43lR&$9eSQ*nM{K11Yp z0?EK}y{Z@60M`cXMXV~bMi zEzh;DkE)Mu|1oA@kq@@3muh|0IJsrM>N)a|N>r*ngsIoI4w{-r$g z%O(&>ZlAHFg~vq!q075CY;u*e*s>TYu0{R0L?;ibpP3YFM+{6c*oon@2Qi2Ck_;jq zo|e$W6~gct%pJpClqTs8&p;EybzRc zRoiJ7G3ZauvLgs3g4c{*FuZZB#)QBck?f>(R|FU(WNQ$4NnB(yk*VnqkuOmod9sya zOyH4_+8#})?i)bF{Fu~_vNZ;KaFR6|TMwcM06D>!q&@=}iDCn7t`=)xU9Wsg^~76r zFSy5c%qsR|8oB++59PMbpj5{KOh;Tsp{m6!-@ zWsWvXE1{z^_TXIrXw@I5ysIL5FL{A9QJ}Y~%kUWz10kEo{r0@!K17F6Ucd|>T`woW z-LKL8w~?Q^94hN^=2_QBW}*+{Dju+QrLyexjoupbi@f<6I#7;t7vz0y+$P_7mC9bL zQTm{8ZKhqLOV&H# zqrqi*c-x28X;e-QtTCov_=#&NAvQIMA1d45&6%wgV2)myuA9l!W3zN$QRwVmW|R9$ zxuFhWl4btddfjohp8j_jkI4L5vDZ2JC9Q`mTW3v(Ll-+9^k}l>0ah7eYW8izRc9$Q z^=9*fS?R}ife7u*_kXEdoVO!UEzHj+kwuF8xU*GKRbCa7MOf48wG&0ahf3BS&p23j z&agEunVNZS$lXPSNNLVbp;DoIpX_Q_&%&P-&D zQAQB1MqE=Y+38vP>D{E<>5W%h9-H#M=StHC%P(8xpG4O)%X9}Q$q&Cw^?zQ$+?fMA zYoC;@*v96bexBy{!LRXJ655Sux7+v_S+KwCE+$GE{apyf>CWfTS*VrtX+y8UzROFt zb=66|rre!qPLv!Z>VU~F?}B}0QRGv{C|e#PsP2M9<58!+WWN6e@1u%?bZZ$z*oSOY zd*qXF%;to=4xn+w+$nC0rdBpfefQ8S<_BW2U*Y zKSz|MCLFe(Md0ftV--p~PSJftxV~p4Z}x|GEz9+zC-;TQQY5vuruS!-A+|U8=!_le z9jjPbZ=tDj>A}s{=d=Aw%Nxt>3l5~`vm-v(-Rzl*=D!%sxNNl=D?_$*ktZb~=_4SDaCCm_2#Xj!^ zQj=|>rD?yhn-&?N{8qe>P(qx?ZW#mHrq!VYzy8`aKAKw# zg*))E?tc7@){K3PWRhO#Hl1v$@oBs0$2*Yef~bSi%siql-D%2ptvX?c)zD^nZO3e! zO@*r+^ODcc-hJ=Kk&x^2HuD>oM?2!5n0;r5_^W0#Gi)emE6!gw^l#$@^VHKD1RYcM6{|AH`Tw)OeS;=3)BDT#+H)CXG|(H}xCZE43;8ND^f9y#A08Fs#;e|}ir z9??u@YO2W8%{cQm+{6j2;AB?3_Q%;vAKT7$IlvYa<_eCmq|DGJ^UiH$@Y}fiOJ`oyaj=aMT5SV7sg5~^v2GwwnTb?%JW~yoAl=!~i z^o3E>a$e&TP1kjvAc8~9*lluD$zv*c3Z^&rQ2-T*u zZft+L@s)lQMPjLwY>SPFv&?c?`^2eksqEzLMxj%OevZ zP|@n|XHr7B(3!u+iZg!NKSq&l4`g-A^ue5)9F3-X6G#_A8!COJznEh7XTRpr_RoEkQE z-=m(RI}Q_T&F|a9}hNWZd)b&j-I$~s}qfVlFBMYm7InXRd*nd4j0=r!12$a@DVqehCr57 z7R|>yS)L zQ>bw(ydL;OS18)n=Pk&h`E1M4XR`3B)^O$Slk)or^jtegLi&Ylh1M?NY+7uxjn*4$ z)n51!T&cDD4vxD+e1V5aM_oP|O4h1LN|WJH=S1u~7xvcbf>PiKlKEiVncKb&*9^D= zIDoqfKpXmCjuv4cM@tucKj9sVIbSuXQnY!w^U7}7E=o2NDK#D#0}3{tk3rPl=bxG5 z=Vc*LQ;PgsI^A38lG_e8Cb2#wd1ih1qR*8X8N90SSoO&Lq#(p?IK0 zt)n%8iUEKN1AP8pKgZtNgI66Yeps76?^m52=H)}?r71dRnPzylgbA9HwUvrNL}VZ+ z=9xp4&E|}!iov`H23X=h>R|V|3L}Gu)(s*Y;4bM-=sVQ;LQ+7%4Dg?T9`n1P<;;W!FgDY^QrU#x1jPdF^ zw#4h|D2KNarKO_rif{9VufWKG|9%;2yt4k6aFcVM5=iMK{%2UULBW_i4AveruJvpX zVA_S@6GG(}hn^ih&agGBI@!LbF&KGX6H4qP0FNrwR``<=jSxbZWisBpCM^8fb!ANy zebdEvk(Ec^N@sdC-L&Bg(|y3q-ozUEOwuzQgE^p9QhXEmcUR!gXgRVP+iKu+~PH!=Jt_c$gPNwkrfq7y81@#S;A&p85vqpgN(@JJ+n#`g`@6eAC5 zCiC`lXziAE+=cLnwPiOvMF>Ceabp~YrLN?Iw0Ar{EK2dt($8I%nsV87-I`_2Hy;L* z3%5ChRT(njXGsor@_Ecjg(=49xit9GGCVP5w`o)q6kc7-GMd97DED1jyEo5M7<5?^T&;@Q;nGB8nicw1oa1VJjQp zd$PC1OEVrQMCT}Pbp7vlSbO&rzY72Yi9k@cf)4+KEDz+Ps!cT7Ov#SB5ij5FQHGK;G4rnLy0st=aX%>h~z$0n<= zD9fMtQQvd(164_GD~LbJd5Oriy5_KOe8fjc=Lw`~hl5wMG|H5h6f- z9230C>bWc#{d#UN`Stb=!v`+S21BCcCOH0`ho)gO3x1H^ubW=0;Ia1bT}Klwf*CGW z&-2=N>V@e4Fs`v5TK#^*K=y?G-lUn6ygRH*AQsl{JFa;S9~?$C=sX$rb*2D}bGO&UQkdA$$a7>*b@*%l+!I2r#9iFeiD4rkr^D1x7yE;0gZ7CGZHumbvaM z6?i#O`FIzW-oIl8MS8%`cudw5#o3Rj1@wyNm|cM{`9~ft<=2{7{vyqM*fox^OPf`e z5T(IMDmum{mfwn)DI^Cwl+ig6P3?Iw%j>D z)ODr0$*tv-cKbt*D{a01=BvQl<=%Y1KBaM2x&n%I(TWjXXB^Pz-j*{3Mr9x=ZqdnW z^p&TkYNPm90TiBY87XL|ky%-VsQA1er0RP*dp{!`;&zC8J+)7ZpS(OkK7DD;f+UCb zG2*wyrx;uWOr146wA-a45TPuFQqWI|;ndmLWcb%&%Z@@erD>50Hn5H~G%t&uU)Hnb zjUOT5t7DwV9Zi(>z1BAf;rKhRh;fSmFNZHESA2IHG}?{TKfd(vf599G{>_+%+FPU; zZ_%+-(sfXavE)SjYw1&3HqBm1u9AngEOr?RSHQ5FDOn2Y-&w$gSL$ju2tqz8t~r2p zG!csmq`lti^vb%gu%Di0@$0#om0((cNDvX zaRxwBc613%X5<{f($@qOtFo!%%Cg4Nme=Yx7VHT~3W6-Z#QAYJuux zG=?8}Z7^G6*$9n(tMDokE^%G(nxw<8S$m}(tXjfb*hrfOaMxY!?YXohjQ|{ar>6M` zGIH96#wFm;+_@H-%*-APxG`;>rp}Mr!44^|n{Xj#@}FKz8uXj|JQ?C%y57|*`RKm z5)Sa|e0=fZEqnsIxt%@y(JfoE{}#qC`~MH)-+26mB=O7Y|Ag^ZG$?@d;n@BKKcws# z>;E5M{QpG?DOVfw3$9s$pD;K3OC)KoGW&wcAIfxOYhwK&?#f;UAw+LGQ3F@han~}D z*fQ)xsI4v6V}%uDdP$|O^0B#W4U-gu`=klg2Ab16XJW4; z0iWIO7>O5O#cp_Y#H0UOEi1l8SxCDlc-Kc2+61P>Hb0qaME77Tw8+)hR&^6CUuFva zvEi%VZ5CTlXW`34JmTw@?J(rXhvfZu+c;-qODjq{{#v>|8$M2a-^w~D*PDTC_Th)6 zzN$?wmgxo~+4t#CDxOQ1M#A!`iny)~P!!KH8v8N!+Rl2r|JMd$Zx`QcA?-K~n5ETz ziRlm@B%y9{(lBz*JLYzT_KxMNyF-jv#pjCUKgor~~C#Djub+O?3%E@Aw?Ipj?ZNR>?C-Jw0!#PrYFaA98Jh zo^oLBkxH3Vqe^b!d}jp)Pq$lpNElR8`uTn2^_^g!$0iuaG$Pl-l&iLI-jmf~`9@7Q zw%-9gZ|V)un>qDFJ|O(Mx?+y1M}pqfFpgg@IQMEI=g_`yK#~9YmeWJfJno4tiMB8B z&As`_hq*7=74O7=0WBlZ1bnPra>{IK7_-^*-w*(yX=l_& z^jGK&Z_T!NGtTLuxmET-(eMwbRmAX!LK4A zu4NhDB5g3`GY3U)v$y7ft*rH}X(q691Gckp<0VfH6h)X{0NSR*Vai>; zAJPgZs1$&s02WiZlH5JGliZy;i21R>fkRoqnI>CbHDCVH2;jg~`C0bm_rGD# zbRx>KE2yAyx$ZZ;ne;3j??1DyS-#}AZbo;=gX80s6te|R+sbVy4|-w`<^h%r#wJ*2 zjqs^Og=ILew6hW8>E?bB>`r+6r6WCHq6*P#O~CYOi{wn3X#1ISM7_Rn_w}1OwV{^> zvob6aiC9C{wMjHQ?ag1|J$A=f6T3t42199#X*Jf8f=H%oeBp<5Jj#Ki)3_!4d8t}! z*^h-QOf(mKDi(Q2-z|Tr6?@X8vDY>>Tn%{>HYvKS%6}oB(Mw9q5)pIg-QWG|!TS4& zuv>C~U(c$IR9%_@-vI<+CO#P;bBVP?$%R(v7S50C)p>PP3Fyj}3+XLNSv*H<-mb;G)Bud34)OjO1x++4xqy7tl`&&8ID3Vlvu@b2N`zMWBj? z7?CM;wHs*vIeC}vHpBIh>tuGzNWPmp#KcSP>&^b#mi(+-hFs;)UL1WUz!3pWHTP-NQ{_qKxGM=vYMaa%_0iqR_ZH7>->)w%dmB$ zOmg)$#rB9addD>Xd~8$NSsBX?q&I z?Uqza>M>X6wkjxv-Qr6=cJ+GzJdyb2z?Q?C962)-v)(ROE?k8llI zf1Gx`IKZ#LP3Jb{n@%s=HL*I~;`gXDG!Bzt`_9b4Yt+Ks0KoBCuHuUxqkKDOsl>RP zYvDa*=iCEYdE>i;g!_qv8kcvW5Eu6X#j)WLURV^-#!BJS6a{L}`5;rw@Ei}mGzPvj zFGsSweRf5!o7|8aeW2%8MNCs~@K@}5*N7W`kn?gVVT0rHzBk&i%Wmdp_MFQ_w zb1mtU=#}~4u6jT)EOTTkmdOT4A=j)h9uLP)84obGPzX^2MP5@v_kV(RDzQUOg=O}*N-XdF3cXh z3L88}g#}(PR9At2q-L@xT<6{kbK}KuB^XYM#M&*SOs!i*xh=PfxaE3cKTz27kgk^x z-ozm2Xk_W`8f;{>E*&z+_^Yk~dY5j+)#LX*Fh+Y3ZdKTLs$0wXWb4 zFZpMLhS_^Z!>m`nb;3Ogat&x9x6&EoAy;Hwkq??Mo*BbMt1M$5vNN>JevJq@eAK2| z1cYl;ld~KG7TEx|DZf-r+N~w|zs4TgL^gD2Zj-GRwZ3!CN5SD|TA5lphxh`U6ZI(} z<-F$B|FNNTE08(l$k7FMrs{XGu^hg_R}RsqbNGblk0*FTPGNr0v9_It?#}~L$3pabRqhybglnxmuPOAd?BvVOXc%hqp76Z z#3Qqz!8u5UWJf{UeS?Sl+ImI$?B=(IvDlpy_vQ~dqKPxg@L!PKBzD;^xS1n8kcX0f zx1Qc*Q26k0^=ShC6JQQ{$P~rUJWIZTrB~`Wgq;{+2QF zf1R(AUq%uUu-R9i5V;khzS;FNvy~Iaq~*U5L?CTcyr1ga)wThvq4)TP_o2#ihu9V3 z|CU{CF2Aj39^X24ydkvi7iP4nKku};%}uWNe@z_ZI6ho#`x=+{rNH_sgiVNz-&(hA zZ}H1vTc!Dg#WD!R{83?L)wg}X?jw~ufyULPyg5R zb&y-XRN7@rH9r7QIDWJun5MVkc+|H60bF6T|Fk`HPuZBL%4|AJKfOIGYnxj1xY(EOS+BlWkFK?}nu|I=uaK=((TEFjC?-w#D z)B?wb8{x;53nT29fr)dzMYc_iyjQD=s53P?W+%hU4OqVjvy{uE@?PSJRmc0WSjdz% zcjKzw(XklwpJ=W3wGUcd^=tlXT3t8L|8#nr`0($wUUuRwGkrM9w3p^>K>Dv~I&e%x zwgH>H-)x7FTP~R=N-@|$zkDqdue-S@Ee^pr4L}M#gUp=Me=HY> zKK=E9VC-pKzQ&z@#op^ukL5J}3oZ?-&51r=dv&Nrzx~lTjdP*C`EQ0sV+4b~8td`M z#OS|gD;OgB_IclB%o^;_W-;5cWZkCExjM@srFV7=DQEu6KjJtYRt@{8mE}Ajzj%eq zQ_r8HafqmEdR9aM6^9ua)a+2cym^|*FCmG@8xa?!Ra@^|$#KRUPOj`AcMC>Kq{DMk z7n38>D=NL`hR)){%Wv1y+sA5rn4wFQcaLo$&lPB~P>dwof~T#}h>I zLg#R~4GGW0%9Z|1m;m|#dzo_e5pd3A$Su3fV_nmr5i!CgUbb|)@9Y7gy((R`*;8St zJK`tKYAx5okhD?V<M15S*q*m>SZO`N+t}y6?u={=Z&J%V66>cM< z?2NfP{~}e=CC`SvY%M-6N_TEQryJK<=>8F3RBHBIGIL6oc}tFdQSod@XRc^Xhgfdu zs&8pZGn6s|IPXRZT~!q|nW5Rjwy-1~za+xePl4Ay;R^ePsgS#dr6ONGO8K|vX<_3C zt5TE9>mJ6F+8gMl8*e&rc8DQn6SzQTo#9wLf~VAgm~+~qrZvdRGishfdSL{g;oVmp zCow?5YmAXoi0a~A%rZ|t$%Z}^Y@a36HnpcUL*DTh6QG<>J@t9te5P3ZmhnWh$|6*8 z=wDIcS$)gt?t6s?#K)mW`NrjcnyiGoTxji`Jcf7{vF1MUY} zSRF(!?=ss*ORo|dSc_+B*BT>`hXp^Qh9R4TG6}PNIB@8&-Na`pJLC~RHOZ2)M7plz zdgJ6A8YnkCJ!HB^R&tmOY>*^Pp03mCdY$6F#D0Nf^kA2`AxZVBnQ09k=I!8mxXjkB z;VriOGoK9^KK&{oM2Zx%@^8*{O8Pi5-3j4oVYb0gzy__h_K0~gL_i?=(y;P8t| z9It-UL-O%*K}C8vJao0O{ijMSx`#%YT9sHR|ArUxC1Y%+N+7U2X0MSO)kT1;gdnTc z5^osAo`Vw&o2Yx0;)xpC#023sT#=dD#iL!mrz)5G>z!**!3 zz9Xr=-g)!J*?50Um-o65_2@!rJ%2KGw3wx>K3|@RnQrkX3+J)?O6E{a)Y$LEnAP`H zoQ|O8lzB{5-p)#vpi0W1N`@fXu~9N3p`|D7O7kv7+qn8`>Go0U;$9Sm&|-9+3$cSRl8#57D8_bdEoWq@4oA4%f4p4AF6Cb zg}Qs>1(rL(lXBucLUGnVmZlIXtmiNiyZsQ%$C5EidK}Q@KfUR;w{#15Jl2!hBxj^8 z^~X#)1g{*}b?UfrMrE)iqQjU+8X%ga;%DuD{VnRoPj2MALwiaq>cM8kqEsCPxF$_{ zQtzdIa3$7Ak2!9Kw69;yl3!=SU*WyH2sCX3>jq>*OgkkGkf-EPXht*{>m6*qdvvUF zbIH0zrK8tKeTJP6BrfG7`DHVoZ#UY{0pB32SuvqujP#y zF-n+wx3p3o3>#$g^$OvyE_;6A-O}B!kWHL$gv%xUCXmT5n>W5{`QzUxkG6h+J>;0S zWIYEFK9y{4I%R>m+r}AvTbQuRp$f%Sblc9LiEG{?Nog#OE?=FRo<2u@1dZff!=w*; zSHRhm+j1R3(uZh`%3Y*<;*8!MHDay^^t;IgC*_}psH&yuT>y4J*dm;FYc5kw@|UZN=$G#@7&^neDp2WE%x7}lYrBuKHrVvpD}ee< zq#dCL>XY1)Kg^MD$XJE5j_>@p*lVcD19A??&u2&IMElKvf+uJy4`0Po ztlIc#W2>8ZRyG(-M?SAam(13#R~$!!EZ zaQpx*%H~Ht_Yo*N9Dt*s_=Wgl3qjY^7s)`BswN=TfX(vOW-o}5$RWtZ5s5<&Qf0sf zwLgz#yU9rH?b=5PUVjCdBLZ@C3?lA>~)q! zr^q70xJ*A;VYJ!1Qt%z7o3x1|D9j`b9nA*r=S*f^UmpyY8?sQ)lLt1pK41C0KSv(Z zyO>hcBF5-8o;2C_S?ybgwqN0Ini$Fe(_dEHpsjzffy z$ni%8m;k?_=vBt!P4xaUAu8R=7 zrxc?0R)#@Z4y^+x{6(TR1v+_l8Pqy<^m%>256L346R1s~W+&-aY*Zv`H+0jNHzEgt z>l2y%2#|Pa%ILf9i5d=bG@g*Mep0?7FgT=q914nArKbQ@1qI6*H;(F4y&5WYTov zGkW-3z`=)6GEh(FI)Uq2iz){E9Y6V16Blj%P$zB^#M9a+-BZ0gqq~UrUtcFdU64oFq@&$` zZX41Jca(-Hs~#g_NFlC7xff1wEWR z>=cf7_$A@k%@Ph)>1DZ+$`isUZeH{V!h$mZeyTmNE$?8MQraZLM&NOl{otHv!XL?L+)V{mN%RRKL9`G(0^aN8tYsuZzDoo);su z3H1zn6wXR+ESdnSC-vZmwKRE{ssqRAZqs}$)g6_|!w&5Z{1fE((;3;FkJANfRdVm8 z%`M6&-daedu zHWx|Rx#(M}lwZ&>iIMm#$vg*8^PwEZUW(M%T25i(fTYS=w6LQp5xy}g;kp?X^>d3x z^09(-FM(WZl0Vx_+)CZ%?2k0+4NyR5E*6XO2B_fJcf$zQ&7rWUPwGEy^zt>WNTyuX zD%6&#PS-KMQuQE;ncvGg5dD>L*o)$ZZc7W;*?(h1f+hIXR>!fm`8i&qI%YrWJ3T!A zuKvv|8T9q~MFdn1q$h24I{mV$QE$%=WURgjj^;WJ9@dand`dzG6h*7-ph1^nLbW|+ z!6g>*{nOAg$>O|VIbK)m?9;1=J$(bIY15x0O%hk+?l~td&_*~=c;;UFy_q-86>^=O zHqpmg*-=V45n>y>uG>dk+-`>$a3?^!uqESQ!Uf2?&f|K4>CUM>&*Y2}oyHE1qlUQ1 zDKq9h={7))rO)R!*A&^<&mZ|vqZ?P}peyVLSmSvFoFeDVoUuJW_ol<%+F~0>SWPD` z`)v8t`-joSwcBc+qhR$NO^fUr8>Bc^)Je6DtdRMRdFZt+tuQgO?qRpMJv5d*o3%OI zo25D2n#Eh~npL0nta9w$&&YTB@dEk}lJ$4Y#zXDujb&PAgk*9W)nt}5t%^mf?29j( z>T$6^PswkF9;~=3j=E1ze{@}Sm*#8aW>tqD*V5C_)zG0ZM?)b1XKCpCrZxjEv`$OaGIb}Tw*qG-)))Md5GM9lcT1LUa;3<_t9z>}=Y?eN;^TK)q+P8STlKf3J;iZRC!zD{?x2IPO^gC6%x^=09JYTa^voAi-$7yydx#kY+gLk4(7xv6J#s-70z3rURrFWNOq$TPEPOgOZwUon|Rlv^3z)117ATZ^8cMAoGKZrP=+f+;}&A79@nZ({F* zFxyqq0OGFXzUH|Xd-LD6C!1Fa?_L|U^16{yn{u+MEM=p&BHT(kgjPaI@T|#J_iN6m z4}ez3)p1`5Ru10`{SH^?G~;5qNFJ*`#G_&1J^s$Ht`yo>vRZ3ByZe*)URGwU#s5@N+Vhg7%VJ`{|2>%elf!QDf$ZD2bMO zRe(-%x}>u;)@Z48agG$tvFRK+^RJF@Z{n5K#Z~pY5*ujsn>X;g@Wx;(A8%HI_|C#g z8@|s+I=E-s=D`_Wo2Osw8PTl;$MWk9N5+puZJ)6pj7toYC0;gCMAs9=>e<*Y)gCCk zh}m2&Jnu9|4E{PmbpfI{lUezVTl3_`SnqG{Xh$|zJ-ZZl!saMm;=rS60e;Z-5j5Ex z=f~LkRabW?2i*>=nRC=4hCGH5mK+n|5l031cRHiP(6YvrhR_FL@1j&8XAhnS(>Y3{=84`*(qiAsk|7s*oM{T1#sRPSCcuU^~c$1auzRaz8FqYniCpb?0e&>jb`34b3gmh4+-Zz?^D?7?B%nb$1$`ldB;1kUsNC+L za^rYIFq`yNk@6g0I!RSgnGIIah2WfqZGM!&54VdE9{zT6gr&zr?;k~=j%1dORre}a z-7Jre+e9@{xt9@fKNk)2Iy=%$BslMM2YFtIfLjx~5?`aS$thI<%>Lb^Ty6F_5#wgE zyTH@*-=@6vSx~b>LpkAvx}hxQC9k#z#AV;!d{}hj+9fQlQI^gl3WW`*&5E>w8NwL2 zlLlj4?u6LF@JhAER9`n4rB_T=sp5*O9qebbq(C5p=h;b7{_A@l1THONO3n;{i~A{(g(H4HYxs$EcB|w3>QVM~tHESOi+!ivQkvMZz$7xjeO5;FvGlno)}sQt zRgNncJk=A!GtCzBJxL9e2zl2%_%gDMY+S6&6j43Rw!pn=I zY%!FU9{!efFz6WI08W|pCoYPnqQ<`_13AZ`yRrb)Td6L!w>oO-K~JuN+p?QxE$n>{ zg>P30{$1BbYt2VrC-Xelo-q22#Fj=oa+Q<%U=9vQ@{-LR{LrfIm0Bi`FRIO`{m0|H z^qINg)C2T7RnT!gaub?=lUaA%z>O>GPJ=n&`JV%5(mnf}0qvQ> zIuj8^6}>AoRk+#-iGvuB& zgHrK}kK-kLE^vlNeK_oHOex>P5VwjByF= zNmN@tOhqJ8Oix0ihO@RdNm)-%tjT6DPUK$|^E)k|_a0sw@=}v$t3;e^vc;#j<+PsP zn4tm35`txl>I#w6KsC=6qPrF+WJNsrw9b7ghoWjEmOvN(oj#oqmlGw?;~JQdcTzftXh`q3GNRMkNKFVw^d|LTA9lf03iQeQGL+z|r3L zk3pglYPr`f3S0yu2wnr3%Dv95qPk)4P4P2-J?6{^a>hL>@vTF?8K=rDGqt~%#H^6# z>*Fy!bxt=De$oYr2HE6bDYhsr<_s)#y!Q{WS=biIKS#CSj0xDrJW?-JCv&9T?u4%$ z^`ZiD>=U zxt$!ec(A+;P`5Yo?k4ao1!8i`CFU3=>%wl~3w1Kc9SuvYrral|83~Tyz{-RPIYX24 zPfMc$xfOyIqZNKgto&T-LRU-s;8=F)&koWc%eFyt47A@eO_ilvE;1mud4{h*s+RHb zh+qFuk`l@)7JNK~M>3nJVeNN?zRPqQcymtv_9+$QYD=r0bqKblX+qyYaBoDK^qk>K z3Z1$QQa0sQ|kUc~$m}t#-gNV(8*2$+r2Uxz-~x*>(@M9}T&gx&& z&@%4nqw@SAU2Khb<&{)3%jQ1}#Gt(OqMjF-QOlS$++iueDEEdZjjpV^(jC>U7?!qd z=*FMHgaVd7y~R$9$O)m@%R(b`oUmcm1o?Hs@0URBrELi_U&5+?Fw61D=!C7b-~hf} z@ZTA>6mAW6+Kn?|Klk4}7M?7u7uks#2L;yAxn0VxWf!hjz&umH?IRT4B^QR+g@##v zMI?26@Xa|gA$Cl_o-M%E(UkT_&qgSRpD#8X)h-9j`zG*FM90>@SZNR+%+mn5(#bIO zoUBL zrDBbBJ+yg+0-Y8+qg|SJRMUR+P?_x@8w3u5Y0wqT`wVpcrlrplA2NHXxqzDU zGQi>8eTY9vS(U_*Gcb;-g{iEPtzFs^;kl&Ty`wVGI@Aon_!ju|%UO5Q=S1tJymhw5trjXwTyx%W0F!2^^izHX zD=rM&Nlz?!WgFo}Yu}i#QUKcT9N|x zC~Jq=Fo>%;HV8Yg?2Va%kQ3AvY)m=dZ5>70N+=ZUNGD{432P)b5e>|d7YDD+yOJQz^8 zq^-nwu;z_PZbB2RS%K;st}slZ+HCzghSWHv9XWTMmV%MLXgDwu|7MA8NZsMSZGlu? zk8G>HbDh}h3L#+4)vS|-+VZ{257LPlI3tVpKs;Q(@VxL3k-Yet(i!aMyA;T!7(Oa* zBudMN4&Bkjgy`Jv&E$mBnB{TDe`t&FN~xShCYV*?m0VG|dg7 z`)vr-H1Wn!#$P2TU)dH&PWG@p4V^WYf^ad8A=}ubk>&p^v>!tv$^CT>tr@JXDxuui zD#`d&kWoizW^bCe$$Ts{=!jx*ANs_&akeS(P8g>1SXq!!d+ITpAlPB=;5puvh^a@J zPQ6;@i>7-YM&s5-kY;EK=BG*}V6#N!d&A{f&*rW7*5bwp( zm;I9#lDFSyItdVeZ;|ps$8gzmy|$I07-LRyu|VeMaqVKD{$A`fz%t!>X4xK|jDFpLCDMc$k_9 zXg$1vzx7mRTSdop{HKPtseno!PntHbNeVT#<1<Fu? z)*>ASxTzKJsgw;BBU*;N>z;V2c*TBgv%YT39qtp8P!m}#ekA$KyQrzI0tIV&C|Zm<*SH~i%0`Jnn_*gQ2!CXp$~pAdUnDTgUzTpp*X_B zhA=_l$oRFyJmFGSk6RP$R;Hd(fNU$yG~rTFZx7l*Y(W}m)iY%i|BvrVIk##O9kX8b zueD+J_vI79k})gTfWK7pH4O~|zD$_}UOY7L%Q~%5t}3#m*$7aTU*JY=TR|OP(Sa)f z=xfi({}M6a)TWUX6Hf1#4P<+KQpA+->e-%L%P{M~n~D?3hk$C% zS`W_SKgIrbC1$iFv7=s%MVoZ}jHOH+78}xCnt=PWo|HVxQ z{2)Rx)O3kpuwmrCGCjW18>r^wmrMuTYaW9yT-shdmhh?a z^2FJbF38ht;KO!+yK5fn-iN*~B1_!svwx0ZqhW;3_fq({11A4t|50DMOak6!0w^n1#op#u#99I-J-9CquUhn-|X49-o)Jt*!=IN2q>!n#V@D?dauj>T_FZ%dzOBbtkv!UxAOkC4ZGPx2`7OSTQh%^ z?ZaB7M{d{#p&3msnD;QPY;0i)u6aJcxv6KvaN5m4X><2h=(YO#;q;CT+V!t?mmovN z?ymCYJQRGE1^4>aWF4n>+>cicY?&RSS7*Q)0ybp>9sx=ak_Vm*kioF2WhXj8W1V5G z+vRc73$b3S>&LlKQ&wfO;sPLiRi~_3wftPEDXY9$wd`Ek;uW;%-FH=|s#!I`SQ*+_ z26s64dnDU)*oFi6^ffZicsU~E_0Nz6w257WvO_!M>El>;f45cPV@~wQHkw32aCvzN z-o9pc;S-pHW4NM2yV@%0ygO`HC;vZFQS%92j6&LJoa9qVmOh z%X^wN_up=TCq&YuGHo_GY)`Ybx&H#B+V5wkHaZ>&mDXs$ zi&?cS(_9~`*!+2-k0e}0PD*o23@7O^sDN1Y#!`eD9 zUP?%84wP>y_puIyZ1XxX7V2nzEf8O?3SScaDdBvPBNQ`L6ThmVW8_A-&*AfBnUUurY2t`HhHa9w16uvin?Z zk@c?Z86|aF;WI&3+8~}Dt=h0Nv+_i+mnOH%&9rK^R$nBd(KDo|rA7tSX}}fk??m^0Hm#$r9;C6_3^3hxOI+PhihPakJ>$YlSXMs&#V~Q}<&n zZs+PJP3~jE^!M>ib;jA2GjqB;pW#juidH^V)DpmGCACD-p>w+jxuOhBNF(Z5|h^^?iO>2G6 zQkd`vX1rjJ@{*y&1Ng-qggF$-%bF+;v*L`boq?=*N{c3~nWgdvAI>Aoztw!BcU#{9 z4~X9yI8)X=yB9sD;Z)h%(*k!gN_OC`_tZ4+ZvmGZ?YbqTQ;d#vb+v%$k1RE}(1(I+ z3drjpFAK7RgIWgLah83tx+S3O9w`*-ugvMu1HtXI2*xA5iZ{ zUF843LJv#Smn%G7HK|a>mCg$>iQ}(=?yo}Vukv+)<`3Y3n8fp6#PDCl@@K>LXG8Tb zj^f~*#Pl~o5_AmA<#hgu7-!1q1!DM%jc(Y05}D=_0u0*DQ0~tp7adnR8*^jUU|`gC zmT+$h@(ZvyZ<3*(yzJ{Ak!o&W zfTP`$HGnIk58#nrHaSMduDqxD#y?JE2;0r{cudVu`MsbsXrt>J>Sat_DZ3$$3(P{w z%=TL+W50Js=aIJ?WZ$I^B(Fs%)^O?(gDNurbPV(Lf{1G-cBnDgH6);(f?#TYTZ1q( zIw>k*=AzWR1M(B$ZGF%Oi{ny=MMdYCcJC|OBuQunrzaKB-QAZ^_9H`R$?ELzF7@Y5 zOA@azztJoB^2MU*YHQI<&t3IVI*kvVo|nU=UzR3-zuVOGmr0kP$z!~Bt52lyLl}BL z9Bs_a#}il9Qa6!8n5Pvqpw&kj7CfejXFG77nix@bYDetrpJB3)pc;5Vg`*jXm6 znBrK$><-+7!I0?!?@z~w&Q5%Yk43j@8C0M1ppOjT^n>Z6zyo0{)}O=b71|FCgfyDv zNB;%0d+VZ<&m?1t=Oj^Ke$|{dg)C7zM_xffYVkT8`El@iu#)lIg(N6qfci4&3{m}p zBn^|@a;`r6qRBl)xUu!A6fh+Oclw10TwRa7Lk0D1lbBuIU3L*Rtsi^O>T)iZM#VbnxdlTCw)L~18zPr6##8=5q|;Me& zR$S^<+~Rhml3Ev8H{sr`C~O?t);JJrdD#HPT@c5ptn#&_by`5<&@77e1OX1*UFqa; z0q^tAH{H;*WL6)j_RJ%0n0%jLm*wUp5~@1C)8K*rvKW<8gzL89ant9GZkNLSd^ z_)zZ8r{8W;v+*)oVX*6Ej&5kc+#zIAf{K)x`q48}Qb2-F%eQLcl2ZSiv?uxb*^?y%C)NLg zNUGZ+penw_{R77=-h#PgL;kc8egdLC>X$7o-^189`Rr4g2ocd~%n{2`9NQB417|MW zO=%ZzKIL)EDv@dlWuLiR3w`fqGB6(o0`}h8+04OE3g|=n$g)Yc7!q!ZcF3*a)kE5` zMY^U!#k=|k4j6|KMGay<;`Am4{)R_xQc33KErL?2n4f$2`|K$RS8uGX!u#AtsR6BO zIc&z2bXi}J(Kh&{TrlDjQ=0~2~F}7P5sJ?A3K?&9{r@N==M9kGw zJIHLi;37VoI61juyY)}Y_Jr8JcqM%NOJ%PYV%>QBqG3kY*hJM)en6?4x0&3i+ z{C$>-glX^xD4ay(@XG!){Wl>!<+(Te-x61tNmRJ=!$t|^OtLY1y;t9s@XbEd~ zsDu2+hVbSJHP795WzUQ)o0k-Bi;39j>4|LUWugz8eW0?3BW29O~R5kJj_s?y(``NhIdF;C@fnz`9&G(s;BEA0J zkukoMr_b49vYdjA&5nd4(oB>BXlcR=M`-SZ#NFJCcg#NGPk=zPH;jU(UG(+=b@lTw zgO=9j1++5Cyk_LA9cub2yVmgg7fb0BefVTfo+JzuckG^u*a5`~0qRQHno5;pi!*C3 zcYS*|H-y8O*42EAk+E{AMohsRB~1kl9UX10BYRrMBrMX6;u%8=W!=c-qUQW=F=T7U2YGv05&nu~kDnzXcefY&Lw_HSUdo>B z1FM(NO6GVqK*V2E70;;4D(L~rs`Mj9*t5F3f)?oSq)y5`2Qld$$rv|ozjw>%D@$<+ ze9nHi@|SyBiSB;@)WL8%;zOrIfy5<3?+ena4G{Pvw3QEM-UOq)#VO5F z+1Xxp-(kYy-I-h4MMWhUi#z!khopLb#sNcBydzs?sY1#!Vw`j#W-p<`Wax+dez`>o zOMEm${_g&_7c%k-dT0asAJx?d$4%tQ%NX)7s{CSHgi|?E^0H#TkHeLV7}LLOnKuiK zwtGDtxk7$Ka!0#3JcKOM>3bW=aJN%w#Iy(I`X-_wJ(Glhlu6|a&1LM`Igc>ytkQQp zrSVid4>yn%b=71zY44V6=_b%*Xya#(r1nbo32dqOFLwq(LzYD4&1~C+ObL zF8GLK4J09dHm#1s%68js!f*K>nS3_W2>IDaG4g!?3V0&f)A!qQL^$exbDz@9YklN^Y7aPv~6h8G14gK|;YLb%-ScS|7a z-Q_z&=urt+>t`$8&Y9_0*c(pf@+!pJZHD#(=M{s4DqOb}RnK0${)zkS)9P*n zN9HoMmxf6?lTF$&PIiJmOt2HZW_X6q@8FkAuE0Q+bhF`F5E#)^9K!ka_j^@p&mq4? zxk%ER=G;igW=K>$AAwU_u-k~pPQ^jOg=;NS4WAiNht9~1(O4g=qa3BXsKD+~ku9SF zTi6+P=9j|o=fFGn5dKV2J{*x8-z$L<(XUgd;8{xhk$I6Ah{Vkjv@>P3V>tpF*bzP2 z4?eQqzdKSMco_W`wj{nuXr8he7U}F3CgyUDoTsHmnWIbo))4vqNRS_( z4X0;?>Ef!F(ZlH^Q6BW}J@G8O2ZsV^^w`!|)1s0ad3vUn(*gA&{nhvv4y~NzS{JoP|<2Ccy68=Q6wjLDaleqoLi*i6a;O+!2zAKL++wbj$YZ6 z0d1OT8k%Kiw}6RuQxbbOI!v-&zOy5+`c-%eEB@gZqAYyudR#27CC+hxUjOwfGWMW% zYg~3DA2*JWmWR@NmuuD&ty#*`5!dysGu%LkBig|%-3Nq~%ix3^g?eE=S)(3sB$ z@D1)I^4tZ4u6%4QY-rLA!SS;iOK37Lk5EU}th=+PBQ~Al2z$cp)bUd>lZIckEpq{+ zvuB_s$y|ldaY%+R5kYq3-S@YfTBK(X6`<>Q-;+GTnL%CXNar~cYiE2gQ={t<&p}cd zZMJ>e0=+kRTGOjA5s~bmqbvon*5_D~yB?@pFIyxhTKTuwExDjY$oN5dt+IiyCmM}t z^%Uv+3S8@<3(_1COfrlpi=j;tkqxB`(LsipI0wuFsLJo!BvzOcB@oLfAg(x{ zY=F?Kf@sCO6z*({g%3S%g5G5!iKfD~2N2J>=v{&S=P{@js&_8Q-9phQ{>4hCcDb+5 zT|#BCy4{2!qQPYAqD{c@c^XH^w>(M{!zj2wp^Q1o-rI(*pJLm1p3+v%qF-!YB2cJm@EcM+VlJ!<>D*}vv%2R}?YFSKfB-?~oacAd0p7YVyeCaIb!bB#Q>#qE!VT5^+cYQf4x zn<3sAs8bEj{8YZj+#9v7B^!4`YQ#Wi{^78ji*FG~2Mt8cP!WrIAG7Y?QS3LNi5d|?k|nIsw(J_W=J$~y zKn+Rmsrg`wY%hg~cAmHx2Hv^Rj@`YgrYqjjgrYW+ga&sA%im~Wn%DZGmq-# zJtp%wK@*-b;TM!xY<1VRK9#1}on@#h?4*%~cXQ?UQiGA)A zS?ikQu0=89ykt9SDm{bD$o%{XY^Oapbee(nUXu>tbv*b2GN;Kt$nL-{zyeKgye2g} z6XIC=1KDa?)Gia+h{0J9w@DlwkXWaKxkm;`X6Urk#q`I`w%WR+C#AYiH#VZV+a*87 z%h{3pl}<6+)TuY#0qS2ojh^{c*a-I+`CQgVHlFuYdzkxk151>u2MYb{0>U0!4s8oW zPNWuKC(2-FLEBCUP*iJI8QSb4mG%S1IvxCHh}kW~WS)lS+d$m?)t@T~-p23p4aja@ z6^ssEOhBG6>{7(-x9#a+F5gpEpS-77ct*G-n15-SfU(!u|+W>kc!Yv49cY*^@v_%`rdtB1DEwN&6xWMJs9@4bRaY zbcR(L{Mrx1*C+MY7-9LloWZ88Hp>$pCTxX67!dL8e%8NGvjMJIi#U+A1M;k-Scs5k zQr^4n9sH%01s*s)sKfkNhgce_7ylg$Vc^03RjP-^_)-+vWX5&=uNxV z$-e%}edrB-41u<03^$?y&gdyGSNffHYQ$%vfmCwRi>lfxx_}4#19p7t11|B7wwfz* zd&yD$aOrSDv~2~r>WVV9DXj2J95lA%uo=ZxxCfdSjo({@3%tU0K2)`K+XmECCDzMR zzA^T1v^5+U>8`$ue?7LFnpM=+0ST^(d7gCdR}}|n(P#&d(Nn*oKXV4jt1lz+;`4sV zy<~ygCT`GfYJRi3)dKBik(TRRIhRh`9&Q3|LwvOwn%VFxSTu6`Fj+ANyYxkPR8WGp zYGum-bHjKH^;g_r-?HDH@@uZoK-X4nfOtBfWuWD2XTG*rkyqfO7EY@u?+!tF>wjTC z%*yBrqKK^_+a(ORBi~)`vdgXhNpxLEa!>|b=*OM)yWL7&gM325AISitL2aR}3b7_& zFX%E={OFnpye$igf*W+poqzGkf@2>qU1GOua8;gNi{bwK7#z|ID_Hx<9syqcRjyv6 zrph6j=`Ydas8{a)fg|Dx?=rC#?T(s5y_RspyKpgYF3)8*(Y|C3^(oM2BH$Dd{!nJn z12>5NT&xva7XQ)TUOq$Iy#sMg(I&5MJaq@Iv(^N%UYGh;wpD{IBBzZp|D-%dEb-ng zjYK3(sKW)Xag0*<5-M9A#28RYQ=-iy8qSkFsM37HIuF;t^a>Ipd(oR-e+^;{kxbvH^GYL^P*t-P&9-C3!E_c~TIYATv0&V{O&UyTlUej@5g3zEU4uR! z$&G!l11U@fgQ2&<{hns`#f3cO4b-=FAh^3jfZ*=#?(XjH?hXk$*x(Xua19>Z-Q9M`z5DIo z-Dm&IJk!&sy6dgCs?V9J?h;0Y!Rhg`&(IkVC5VOJ^Cc7}NYw%vY!YUu< zeXt(pqG)vn{0Y=@j2i4xqI(dz*uPUBIVNFwT%hNVdObOegCTmnbLzXb z2=tokVmx2Z zX&Q!;bS3BBUPEFtqmHQbuO^UXXKm%G_H7#~EB*L$pY*n!*lX0Fom5%6G8r(93!Ndg zu~b@qGXN-WM|;^xT;}=B<17VUiVmFNgu~bgQ|I4sR+DVc>&-6uT5%B(!hv}CR@56D zp&0Pk1A;XQdLTNI->P@2#?7Poa5?5@=zYle7NuY2RnnX<|2eO3(RYtzNf1i=_x<0v z2NWn>?UpU~{^u?M#>Gn!iNqZ_G7gRE)bQpaS>SVvaoxR5bQ~{gRE0VlfAX7J&xJ<7 z#l>&-%B825G0srtb#UpKP8uV;ihI~sPJ13*)->+X^U`)$V50zE`!<8tR4$6yw5c}C zBw`ZuqHM7XZzwkUMj@0LUKmn&cHHml*wPK07l^i$Huy14n#mkmZ6?IY9P-wrAN3>; zk*3MgqZmxf6k8rof>-npryF|;K#2?{6#pjJb$P8s$Ge(>7}JRp`6+g)<)a0ptEJq| zOH&K{WG-`2I+iNOd?X^N(UO&mbEeE$8^*sDYN!0jdFg={GFLy{@LBBVn)H{YS+rv1RuMZ# z4lC89o44J0^O8t;PGKJE=j8RDRwoZnoXwnRszX&e^$e)6TMoZqzjA^R!49;vyaX6=% z;}$!>f3A->K^|>+fmqa_jH?JuLsk0{TTdi@Cd59T?^OIv!O<4IZlt`R{1}KoR4|uX z-lp47?PC5?FsoYWzChesz>jIRIe&}5_;h=9E}emOgc8ob*A$|B$0rY9mC+7& zpi(F47Fd_YOS{4R!%ziTApJQng$OgZ?;<;xJ-AKx6WxQwQlU%MV(7dJJ0o_UgTuW_6#c-#i`0!xQ^Fh z{tp*KiwsF53@G7(lSD@(C#@l?KQb*9D@=_uhbRYFHKCrR28g*32U|)7xj_0+0hH=y zYT|9qD6R$C=c$5f=_9Bl#x8P_+k^EN-YbKeE8~5-x2QQ$GyE8n_*X-yd&H|Af!f(K zPE)>3PFudni}aw1%f$fb^cjPI#P8I}F2=%(qtFXD0E5@-FyG0Gy~!ge%>C9M9_jw` z5QZqyqqjW10hccY%|#@aFKi8ml2?qg+)H1ce>b|MpFa8!b{@@@{}q96xt(75!XA6l z%*__0A=*(}9g zj}6o1m!sMFBMub{EIzz_>6Tpq&ipfEl^4HX$YaUrFuxlC+Ml+R!^2k;db(I!*EE$D zt*{g2=%dBSXer%m8PbugCZPfjlaek!dkYttqypZ8B`J@>hu>ao*W~HpuMs1LxCMR~ z2VDap0o}PxE1+D+G5J$*hz0=rTl9lYG80qA<9U72Z2f2}g+#k_)3~fty3{G*2(m#| zw=vLh;kj~5poz>Hle~Te0*_&)s=hw1*VK4#9sp;UKB|Gd%z7(6w!e7WMu|6KJb|ar zns_p|D1#)>s#F_mb~n$c=22SSry1V&cW`OR>B%iY&A5FPkRuMx5o(gP;|q(JmttyU zUWHcr_A#RI!R++&3}@BEMw)>#Eq^#YcrX?^+9E^dI^hL!<_v9QEjp{KGeK0Kgmmff ze_Lyw%JUh2#H1du)6X}hFQqoQ>y+-+6( zyBEjkyF3}ky2ws#b9zB{xPSIug1ymZ);TVL0im`zH+c?&p!#aD)p24!Gkguc-6Xva zR~pDy?ym4o$Vq%4gVWg&Q4gtL#tE}JtbrbU5ulb?Q&=x=t`6U>E^B!N^&gqypFhel|iHq8q5t;3o%^U2&{rgmwQ$OQE;416j8f|>-y1IFs z-G$7v$H^ngY`lj_?vznaT6YF}ZkIouo;7A1ia3D(PQ@ahv#;&^i~!+<#Pnzic62QS zt1G({44^Uj3^uTLOfCDJ&MaYLgJ3d)j9r};ZtK|JkRW?f`;9e`02j01?KcoTPW*y4;t4%&Po6$0eua#+2;n_tU>?<-y3>T2aPr95*Cob zlThV0sAtOXN!?#?e}~u)46&(k7=TWn*$1C}=N2{kl^ofCX3|^VKjz)2IGf<{rsm_T z=ESYr)V(TkH|uflW0E|G++NQp4rzvN0mYG%gPDW|G-2mGE?@t;<-px6jK3RczqVt- zU?d!mNbCF~Kw_h&@#nwB6p)DFl`br>9FTJaawP&o6icXu6?OtX8-NF_-|D+tO&J~S z0W>y2Aa-}Cg}!_7e?Zwtm-6!e1A6U&*xD&Qn!`G*;@kfK9ZR^Zik$Vv4LIreVEy!t zt$CXEpz*lF!Xuc9ZD9>k^oDhUP|^P!D~+oX%=el|I{1Y2y}DcVip}WYeRYuL7qd_k z<>+^_j7gXJ_wE|lytYLI+u$ZS;OTFfw7R&K|1(-v(9j>p1p~aL!H%FyY6NM*i(?cS;aQQzqopd;g7u19lSa-GOTsaFZjAxNF!@%z zi@TmU%H* z!GMqPp1{$^JF>Nk2M-$tC}GO*Mb5fp#1QpE$pNhN8GrmQ(}eMXwa4aH9@RFqJX7;X zBEZ2{*2Th+{dtHO10HI2Qk=RgB=Y){`mK56=CegbKgWzw+oD(dcar`C@|yprOl04! ztm5_SzK>3xvrp&T(}}fu=!q_vn=h^by`_JvaX@xyV3jtSh~Ejic?uQPk#4-1_ z<0&SK_7(09v)*>vF3yfeT%JAybyg9ZI2EH4r9vZ|iUG`ElLaLXD4yW4e&fGNB()Ff zS#L5ZJ-eph1XD1zU*RwA=d0>(vBM?@af!1>jTMzh&^*C?T#$s!&6sznrqC|m6;v_6 z0Uo~laVZN9QJ75)dGE{SCxa*4q(zh9n56eW-U|-oMH9~*_(0dW*whCxL`IR3=R5~> z_m1s6#R0F>UQ}b7*EF+10Tb!n_79l4U>@xGASb)XVhfxL#mb5K0Xf3!?@b zH`6+?RMGPwgN3mr(JpmiH?C6V#gmWe(Z+2qu5J$4p!$kCEt;^0L2TdUC$eYP_};#w z+4%=j{7|JzKGhsMj&5ev9DyN&_w_K9IfEW~*<)_kFC+|*!je({4!3Pij?=p}uln7e zi}cQL9&9*I=DnWG42&65k0$vLcz!C>r~hTOR1BgOJ2$5GQk)ggs5qMQJ}QX8 zW3Q>vGuK%OMjA`YtejWB{f&f&H;{ZIGFVEjwaT?U5i%F!a&*K|IdcJYY;VxXt@j-Z zEk(lPpljGQIl6h|()FZfH?xuI9cWE$#G5013PfAIHTTq-tF~GIw3rmIQ3%~X{a z*mxlC+sYegV+(AO%=l%u*dVW2Z{Vc#@~EX%+*(?SWOb;CTdc({5ofKvtk~50OHlEd zp~}MCaw(ZiB6kdLzDDOQzG34xEZMBMs`d|lkp+9IGs`3-T*&Fxu`JEvStP}+-O!fl z($>^5%eY-ht;5XlVAnr_%xaol1tOANCQ95?O?~}aL>h2ig`Y@^^2-0-Q3;cM3CZ7T zN%DvXKaEX=E=;tbF?1lSRd3B&?^jGNQ_68a*p-_v)>^8J4M(cbl+)1gZ4Ac8mctQH z%RGtpEyD$r=S?-S50b0!zv5AnzBGzl&oe}y)|kFAVIMFo@?w{CJw{%z;}JjSs1<^G z_uF#qSOm`3bltO5s9qmv*P;^plpF$z5fuoTG8JTZ2y;1&QIu#FLf_>>FOhTFrOwvR&lYL(pZ~lZmXROr7#~ECy#0}{fV$RkdAz2>IY3xh+&t4o z%gOzGAs1w>@_p+jifm1uzvM^@m(X&7lbWKHQ(7-<>WmQGhcLSHh)Z$)Bk5u0?MVJ( zYw0Zaqv#vSF6l{{qKXc+-XPj17-0yC_6yJrCs{pVnapC7xfezxMTeE$H9y}*SzGCI zj>08cRpQ%YtEO1s==|H`v=qaE4Tso*tjg{7b7$86HEV*Op}4bWSBzhn%+(53O~nQL z{570b;$;qY(OCy=el6$)_t&lzE)NQBbPfVH9`2cC5!2Ac^xu5ChBPDJ{5M6^J=Psf1Ly@~08*HVm>(W8%R5)s>vz@uf-f=h2 zwNmDQHpq3#j6*ti#>2O>nGpEY9XR9qiz1Tfcqqn0|ghsCU8|pGbM#NU)RY*UBnE)Gf=Zw+oue zYYBI+CSej3^GO|pdd%^zMjvs1W~u)vww3Dg_t_U*TuP*%QMBNpXmY7&vbAuMe%~CD zggkG1D_!A}^UvYWC@SQeNL{X=n-Y%5aX|tbrmK43AyF+_%kbV^u&2+jo|vPN=)#(H zn*ABW@_Dl$y!pM@z?xf{^_kPF{Tm7HrRLX2k~M4?quaDejr^^#?x}agn3599=UMUq$DNTiDzp4KG@;zEBei8UWF7m2}{!!i&f{dKH(TY90)b5j* z&`hi0u6dM$hDcOj!xt+KpmnuX`9M#dBb}^$oHD<9y{VCKuO~wLC!qNuX0Ot@4X@v4 zoXTZ8Sf$O$Z%mipcC&LYgO&@{j0@_CNQPKhhk9f`%Jje#^9Lar3>u#n`H2YVuKMw; zcL@l3ddCg%iWf5cMHVJk5{TF{)sJIw_C*Yy*Dpji!*nzW=`bphMC;(Ggp2-7)H6Z( zN;Sv@lO-WJ2I!_aJpB7Pq?(srJ^VVvz!Q?UV44k&4lPI!!&gT~c>Kp=hInrE@#gVo ziz*b1xoW-T%fY3aqT|kS>{3!6?&+E2lv)`EtJOb~%;iLxe{ICOkPezC+oCNzTl!$L z*m*U(ES02smu@QX*!hi%g}vbq7(#q9iznm-I2MvignnrM!TVwOGSDhUk~l@Q@vCIG zuuo#>-kiUbkPIOwe6Il`2Aw6GB5qH3!i4)`r+0F)81X2{y`RcF`u{i-ig#$M&1+kJj=>Sn3%JfodGV>!Wf#>T#>5lPT&tH3zN6JdRJ>;5{3Tq` z{}p=*%B29cNrDPKrdcyKyl)6@)l`afuJ%mvTO~rb@oJQ=s%+@sTFrLAgRX&jxG2Ef zhfoUz;du1h?WV+6lyf~l!Y@$xFNg52^UFL#rhLh;Kl^R@vc(kYHT3jPNGo4R2%nxF zJt;~w^~RML*LN)D@<=sQ?(8DDX_ z;tnNw+gZY6pEyy*b3t2Vm|=GbI~aA3H@_tkZ|*X+F187_dwNl2AoHlthx(ItH5o{h z2n~;gu}BLWy!+=#3XyydMbTONms?YbcE_0}x_(og7L0xGoB*ssL zjs`Z%kuwgIx6_+Mi|1F$JQ?u#T(_i*3_twam^;kc!s5e)ejApVsg>8>9{;A z9R`&?O1@NTtl{Ly@?7)6QsTVK*oA#HBt#~j$l;RWN|ai9m92_>WFSx0(-nf4- zkEXnFSqL&8iXx|w`zc%TT;k_SiN~(Fr~QOvg3%Ob;YMra{WSVG>oSv>?#n-(VU@S) z1%C*xX)o9HP!V38s01QfQV9R>Bw&%^L-gr~f?^c<4e6;VlQNUQe}CpYgh>~k71mh+ zd0)bOqgiQJZn-vU_G6ZgR0bnvAA)^P^9?3TV{iXbBj(KJ%Yz&sN9qdn;$D|a|FARPeDDLHzrhI3ApciOBQZl-OmCv#HXVE<17B|A8Ql1QNy zPm&b^0y7>00uG!&X=C8||8}fc#{YHtBz)2&BsiH;LWT@N^@pJH2MFGO$(3Z65K!{g z&v7>3v`OcEpK$a4zx2ufEeg89$4^;#zVWTojh>P88#3eidYn5BDie-@JYyefGs`H$ zN60~x{%>^YKZ(~`bMIOD*vD8W=I>v8Uxa7AjUCOiV+j4JP7w$%WU^UGOk-tRTWSOp zg|gZRX_mM1FEe;F4qBx=oboxH+V2gDupYI{(e7rq`FW48?j6_PwcN#i!WR4hf%eA_ z!|6jYYz~S?aU+=sa*Odp(D==W)M;CdG`&Vk>$dLtn}&QK479yh`HrQBjYWb{OYa6} zCM#?#c|T?4*8u#N)Z{Z~w!Mn%KX1^8m=NFg)Hs^?9x`8vdK5l%C+n%rY+5+Z?Nq!x zb`hv34N8ruaQ;@^gMR`{!L4x=&Wp+O|V0-r>>QUj3^uqz)q+ zJKKHvQTEsv>KQ|yooEy2$hykPBJ`Kh!>~Am$3_kh! z^6uNFjS~mge8C%U#N(Ou)!d(1Hji?x?3+$*l-n#Lr_! zy+OIDr8kTrJVB2}KPR(da!XThr1g$lO%7Y@OG=oTMEEiS**p(d*lzg8C!Ch%8ay-Snts53&}?J#I<#+KyNRiygLgH*ZD`J(ZR{)! zRn3M{dj0Lotl%{A$c-X)W@CP7fBoyv+F!+)1@*m%1C^7-_Rdbv@|Y7$4#=*LDvuD-0My;QqFX3zaYdGKJ-H4dy5Yy2 z{k7{~ueWo%+;L@S=+#>Go(*ldxb}|oO&lJXc$!(|e9tbLhWv6f&hsq$-1OvfIk(g= zEK1(ZL7PGQnxNxm{iTai=1gq*-LBoGxmNBm?zn0{tLTtMVR$x7 zB)_eQVVh&IiNS?F;s}|f{H`V9*I{=9vU`|`jep9}LaHnZdK~ z;i*));&4?`IG8uv`MlXVSa@hk zc!tCp5O`0giPc3uU5-D5cv5=RJioZN&ZDfI*#zfZ1Am`+@~nH>QP6sJAox0dgUbV# zn(p$eLa>p#92Cge&!WGU;dmtfc@c!DC#F$N+Dz{GEUibg=>p)#4~y}RpJ5&yXrxrW zAfaqw_$2uWnn9%@Qj%?n?XLajXCpj$qQ%7^ql)ee<%YltW31+AcRJW@hf5u|KV@io zpYdW)-d4k|3&Iz&UV8v%IpO%Y;om2C(Bkz(@G|8Bu-qp28%8)y5kcX;T+?QoYgP%d zMi9NAUp4WIET0d!vSsQnoTwckU))~Pq5XL1K{ZigyZtqC_*q0}ZUhmFBa@_pgok=Q z*#k0HMM;a~1P6m03SM7z{)!EnWhbs#g%6+Z7x^mOu=ozfyPw(o zUrF>drqq}p%Td8+uem6XKktNlccgif7i7;Qh+U0~AoA^z#0~lW1fuDRXde&jP(X7- z%Nq--LQ^^f6gM+}6a28C`x&zdcASeFa&ed5F7-icl@~5XYZSJd5MlG-duhYWlj3b#z;UfxhX$iP+PeCbZSO5a{;2AOx;`^{gNX#ilmLjD zg0#+uxp0A;ltAPxvcxxDuNGeMmsgrWNEeQanPgkMtruB;^qnAl#Z}&1QQz@tm|tux zO!6(S0B`DEA5&E~lMSk4iuUh=I`K6}lg(z@X*cb_h7WfYuOxz+zvB7Eqh10KV&%In z`44m4^t+>82`AX|ZdYOK*`yv5+=yeH{>W>#uS^m_fYStO)is}L7F!y*j9QvYccie} zP9n`Of|3K!W)zt$Q6pJU=YJA6xr=|coR4a0yejtSSZV$QsAt#H2}RS^aRc(QYQ3hu0?O4sOgI*u}ydV zK_>ikJHm@y)<8S>LA5Kv7E3lM{_IILkwGBB^xkStsLJaHhXB3c#CCn)dKlC1oRA|d zeVYWh0}q+arSGAC0$ugAsCqItqcJn%mLq4tKi~M0R@Z#Vx1@qT8yQKMd*VjiX+()y zX+$VSz7}!&vUpu^FfiW}SAz>alM`uF#e=mo<>JD|$wb1gm3A`N?@34B_an%yGkkZ} z%|Ujj8?;)&_?)MD)#Z`4o_^^NJ!e(bzwfsA)keve6gY=loHKk^m(zF!%I@^Y&yTA+ zUYw>_MGC$8AToLxbQz7bNAgHh(c^i7V&3+4tx>b{#cbX8$Grgh8>%|P?yRY#-_0o# zFXj!NZjF#us1mU|8M+4TULWYLL7VQS9+GGF0_X9EsF5gc0q;JhV5blhBhvC`Qm6Qu z?0yKGWz&dF)DvP-T3!Aac9wivxT&S4&80Ml6Rgc8H~nXN&`k~CM$XGXBxAD>`)d<5 zHcQuID$bVwmo5Kjhy3{d0H$K4J9&x6o;2uT5tjZj5`H1ZJ;|n=txJ&kMRp+Wm-~#VQYqO$GpUiaB}qhjnPX_JJe=0Vl^xL^R;%A^{Iou z`-1<%hfhMrTJVV%47^n4eLK>lL-8qO7z25uf?_ztE>}L7DEk~Cf@{a3Pq-8J2W>-c zD{0}$=bf~0i_f6=U?5SiLwod#4O*5=zmx~r#ba%rdz-=G($rDc83FW^==?9g_?UVD zM|h>jWOLm}r~A+&^fq=Ji8`E%Hnh7CXa6puoap|T&LQ=`_h}U$-z=`9^rap5$mtZI zhZOFr(k@>D9V8lbE>n-O{BOIo(`ex&r?Dw%B!z~Vl-er1FYm(cHk#`gO-;I)`ccFl zRg)>{1$gJLo;xJ-kqOV9Y6g!SNqOh*3NO;zkQF^~4J;HwH?<_}!rc3YZ*!`9(?kz6q2-a{u2rvVM#t2gd&<>(SVE{=NDY)>pB8j{D)da- z#DCgyfEW0P-R$_;l$5lr>>Gd~*qI<&w#Q>rtkq}#jQjjXI=^cztSn;{+qTs< zUOcu2#1KAplq3F6inR3jq_MPYS!_0!v}{XkwlcYy^GB|nz$y-z$e1Y07(L06zi(=- zpd8!E+rJT954!t@i*Zjvn{`Zr*;EjYGBa<45R>#M6sC{LHIv+F;}B1VVSdiLZMZf9w=P zzkf~co@av66N6j}Kl@`$GX4Rmy9~W;^g=z3Ozb*ljnjK`?JmBOH?82?z;6%Hf5I(5 z>%-O>8&B{0vbHrZCnvj6(5jf@7xZ%;n*8sbVFPQPl9bUSQyhRwfvdMOhEt41H=q0Y zfMfPS(3c@@;IyphD6!h^&!`{l?&=S*t4hZ5H@VKf;XG=e&Pz2lbcwokJy?>_!UUlm zco(xlt$M+X?-3(&+uTfbcS(CO?tB<*Kg1S@goRRAsP~+Ud2l0C)PKxlDbUmi z$Slj92py}DW(l8^eIno^tH>pm0(_D)U@b}z^NKmY>hzf>8mnlYBkUy9h+bStRGV4X z6EeN`5Kp}1Lz4JSb6fXeC#NY;R!;F;vEckTL9AFQ}U_yQw!$G5G{Z; znUD`h{Gc|-JEL%1(Z7o|N~L<*r6qu%2U(2*zqV@WV|7Z8o3>p>oleHI!_pY2-e8>p zf+kADd_3u^(l}>+GdLU1s`Mx)WU$Je%MJDiHh0`LEVv9 zsrGz}_|vS(vat!y<|!MU5~jTAN2*JqQGYD|=e=}%PLl7%`hQTpb^Pe)U-VoPPhTHkDwePv`c{)XmCAw<;3JSK0#rR`Vcw;r(u zqocRWe!)IahM8-0r=Uo-#g66p-L&E~`P0`=Xb;u-0y3NflGkQ9k2f|-8A2Mmt=A!! zMl);WPQxZ^rj&wfLurodzC?p3z><6LDLOVHrBKY(%h#II&FAh8)%*Q@wfyEC8Yri-}j>I^8Gz1bOj(VxY{4PhXv~9<*_yAoDY( z*OlHMg$BJ^XQN~xnL(jMSXstp4QF4Kg!#Bv9V%N&Tu>=hJ9VflO0k1nRm^Q8PLc*$ zwk#mjUkJ2q9Z{E+4{{nHHWpo+@XodqNnW4pws|3kZB|fGg!o4~$`RawX@lV`c8dpyDyU$}7`Xo=q=U@?c zz~p+lXh=+2nBqW9*!3Uv$vG}F&-L8_Ta*fRG%pHH$ z?Jh506Y&L#?=b>>^VN&bTDuowkNzq?dq?to?VaX;aW|3Re=bA`d~%xNxFw!a#FJjs zGP3!gm-buns2HQN*nr4%%e;5`)AQ%Wgoyy&l60B8FH%s>kKfn~`)R7qPuY_{YWBbS zPkwO*$@V?ce5n3R7c2!5K(B$O#|bR@*#);%*tD$wyYaE5MxgA%baBkU0Yl@9I_jf}&OGbcY^?IwYu?N9VIZe5m;e zsK(Adr6`ZGxBR=F0r`>2q#l%WU6}6x_96LGk{`@3-oxdx?>J?Z(dC50lMP?wm`zRp zkb77HMS`hXQ+$8#|aGHT2x$k%F3SmnT2vjv(VK+%`Zm0Pg}e{>_oZiUid-- zMz&#xQy@{Fop7HEDg3l1AIdFiFz)u-t?yCqZYH!V<~s1)6`Kz=$-K9RQ|p*I3uI@+ z8|CTS>PzBuu#d!`yC1A8>kNFEApvdTJ)B_<&|52-qdWsql&``4D<9BYu{a_ZKc7Xi zl-Pjp-&a0lf=ng4TQYSX;CH`b6BT(k==sp5&b#8>{sD%sA&e$#7c6 z^F+D+kdu+}9{O3M@EOtzv1Gqjx)_aG!OUSUApQtcs*Ba%%$|)>leucIQS!j5Rz5D4 z+mbnOZptM@&rQY`G7rDU?ZEr}-j$@&16*E&Ll-B?EvjZ(_X7B<`+PHrQrag6@(+a9W6qj54E-z?#S=9aJCC?wK zJ>2-j1^0}9q*9Q|Lth$tpq_-Zq}?I=qa{jki<>fkX3QXBcT7i6{4V(^ws)NZZ%;tvM`LG7-61-YuR zNwu0>?IikPvT3q58t~50DXt5Bh-7LlZv5-Q8hVm}c{rL4(#os#-p4w0`-~EJqMUV& z^_NF4Day1AUYrV7i)R>DMh0NQ33CxpNA;~*eZ9;>4ww_lR~6Lk7V zW|5uj$5x3$n6#isFv@nrK>ii$?!5)4Eeo&ya=7R8dg~Zm)TMYSM2q8x6|&;i51ocZ zN#h~vTsUY&DW|BPiq9z6S^nOravu&+#mv%Lm{XJw{>8R)a`ioB=`H!WLVIr50fQM5 zt?p)Aivj1~_Nd_Y6YXR^pcc^zTq!YVR6WVKSL`O0K5|}wQ^JX+&8piZL{4t_d<>%) z6#G0dBzA=_9#?=~u@3U`eYv}}=Q^qh&-LzmoX~$GVZ!X9Aep$GUJKzwu|M--Bf47~ z>w%T5yS6b2lJ~z6uG4|8u_>EWF8W?4;98igP5j*v&3D^I2vCal^*a;R9&vTen8+A_ z&(kgZblO|!tkR-S>ltu+iA|%x3O5SM^l5Yr0aM)3Bu|22l~(VXkvN({0|U` zP>{P74OnkDPFYL__k1`f;tq5~C(RIBr*9GuM2%IOG}vpMUlz!+?Ni|QbTkw(2bwDG z?`+gWG6J~_te92^>>H?MTb;hU!J6y2_e^RcBvN^XeT7dJz%`=S8Rvq)I_o}j{-hIl z#YmJ&D5WCDi7%Lj*l9#nDZ|BK$W^*pOHEgBG(nJL5!1UB?sQ-^`IEDrG0)P-p;-%{ zT7w?Sh%J~qX*YH&s^jNXA&puetUzI-llMz zb0%Lt>+W^N4s$fBBJxt|GAr))mpbNtyr;bTEmHZV6LtBCbWuaK31(02|D@XBhywzW-_a0$(W`C(E%bl&U;>@^a$3NfyTNa|SH8 zcA&C9A!P+)H|i;;-2$R`80!c_H$}iVa~j9M<271DX#U{DOzbM{S{ce-X-}z(ngSS$ z+huk*x_~ePELCG+pn6C{1vNYkNoC=sqP*UxKZ~CMfJLj{)}C-RC5snJmniFjYvHQ$ z`T>4H=Mj0=efyZo$C#>rio0J6uk5My1BqLN-AN}QCt!E;Vd$o%IIH()V)Pl9f8#9U z_vJ=zX+qt8Z~f*~+cgcnPQFnWeMuSkyatr~bPjekd4E^FAFhxILM5`b-q6^o{6ZIKH%OK0X zb<{+QSl872rY52>ZRO~I=J;LsMg3w%_Q&E=J|#>b)ot3 z|I@PZByxLi()5J1&t1uv=%VeJq&$+`_G&Atw9zUp0t1mwF0NiSz=mP5l!M+);F7dO zoLfLcM)?M{;L>_bx7h(O-n7q3VtyU$&S;t{56nH%DYuvWIHC6Mil~nUa`{Ln zBt62Ec5-x8?vdAezs`pfYg=xfTZT#R-&X++-y9WwDiz^Z*B!VPQIZtr)lAD1r zQk4z_tZA8UwAj$4tl)rpDZpz-a%Z}^-8i`kXNN%40}E{pRzx^nd-)RxN)A4w5o^5& z;`IBVQ#*5;GsJ}l+M4O|e6amGv3Ye4!)#&nZuuyc2j{BsBI*hf$6mtPq~3=}zgT8_ z8?3MPn5QUx)NU<8fp%gSd{l$jNrC&Iv%+e9G86VT`*C9lljbXv4eiB7Z@4;37)}GN zy!PhDG(bhEcaHp%^0d$Fuj%>h9SN>kRSO}B6vYajjkNtIy^nQxucA)}-Xc~9*3CW|DcDcra1vLQE0~A-Vy5;)a=qA)RuRZni&_WA=NLd| z3NmR2T8oX&?DRLS+@)r3gdS%re(lVOZ-(*@ivlEP8Z|00+ntm&i}UAC+Y|Ju9oUX0 zM!eczEV>#VMM_#f+g#I7#+>F{dj#{bG;wBjKprdSt#0LZ^F{HJY%OB@O`lHj2Hi#o z#8OmF&3q|S>|r?|wx)_M%j(56w0Zrd++%9Y`{WF`;5CTJ6~<@h%rcbY4*YCPa23tL2Jr(QIV>o>_1dSmM82XnihRIH$f5RuNKq2(j_KszlN4J56m zKr52On;TpiG}zoplv7dx*T)D|&+>!J@Xj1?|Hwrvn4Sxsh*NBDaakB31AD@b%UTWm zy=5j~%z(Fud%-;yAUc5^CL@PpAZ5l|Vo1U+V09%oi2+0$P$KkWB020C^ZL zTwkLCTgs6*{|RW#1!Uk%m=IX=%BdHbMfaALh3!5QM4JWnrVfzTKYrsHd*H#T`kc2P zk*>T15UpmC#p~@EA$!_pTr$s}(q}9)x8c6QgjqD}q!u7UlS*Uc1IwYH8^`!J(J>=l zQ)I2q;aXL^W%*+(!Tv5w-+Zmo5 z?6z~!3!u$7JFN~IZ0trHA3;@cBvZUIK(UR=Lg-ffA`QQy=ZaFxM zIc8)BE3oZ|!k(j3-7?*%;p%(b<;H?Na907MXBNm;W7n2de1isr9YgMou7r>1u7n$m zYtl8CSJ+`(bS}5)6rIqfMwTSISqHO*>}BMJ^zAUCbIq$-pzH~Q&J5j?Q>Af(+xlDS zwz$F|m(mr`n8BYJ;oJ7Oi{mXojuNQk$`^0ZiEWEuvc3!%%oMlyUQd<|;|cTuuh?GR z(%2*~j)>!yz>Da^#iV!aw09W~52g(9z`Gr0Y-4RU*#Qz35&vuoi!EoNNx~k|_}~T) zuSK>+6?Y`jH}H-VHK(Nw5c55CH>;RBPdpyf* zjpjOf|6RQd5q8p44_Izl1}vlgb5*Tw_fRftjLNY$YB&R}LHB|G1{9iq4l>s3PR?nK zdAke$hCmTKHsU_LD;xLEWa(SHOkk5X%&zscL@XRv@+sX=9O-BMdZgI~d(D&~%^qNO z3^L0RZ{hi$Bpb9Xi*0}l$R_8$LMZrzeqiR;(aewckRki7yUmxGF@qx&5R34adbtT( z7G);zUWMG;;7?J#uBMm^A8nzQE#CW`JUo95JHfS@aOM{%53(t}dVqg#=FZa_bzg|v zkT#L5ta{}}&Y2jA22S$wk*Ba%CLD#&)QyHGNnxilEjc0!6IfMr$%|m0nl{)HAX3|? zlg>{VtnXMdu{vV2kNa;VXmwBi1~*LeYV?@%a3QYg+q_~mnCE_G%+29ee-CnU9AOgR zAXj0^D~P=83(mD?ivYCXOz8eMf)V`(*I{>L`vsvx_hvnRQtOcDJrlk*hyRJxOBiQR z8u;vUxd(kuJCz5uW6qmCl;gdCgZ(K(o-qTwOc>zr zCj{c0!o)d(sc(K_Ix5>|I@Z~;GP>Ag%ORB=rqapn+2ESQWnDr&f#^!}rEg3xqq(JsD&3+<%H>a)Qr?-^Uq>SRSvo&z*rBCCavXmt)^vC2SV4w(jqad zCS>Gg*%Y&nZ8lTy0$blbITVmcl$nJZz!hAep?lv04Hl!L>S3C0*Xy|eel2>}aOuG{q}OzG zDq75}Q)bkdBjMmE4TFgy!7EWgB9!b>il1L-2u-8Vh69VKyJz zQvOXM?=#YvT%T)XqnW2-gWc=(f+_f20KAHTP4LuE@W=vm$g8`Rmczr{67U(xGu;=k zX=WVn^)3g`u_~k&XotB#*n(v3#Rb+H{TRrImgTbn_T2Ni+Ajkh3%`nDbD`TD7CM;_ ztO=R|sV1Qqf!rPWmzyzGK@w3$5YzcmtPVhNXTp=~>kl5bp&zGhP$A^dXy(oufo zW#YM9`kwauAd6PGE9S6}w5JI0b=Nc>FVZrU&W~0WX%31h^?$OFc zD3xq>6q^(MOS!lB5u&=^WGJD2^p*5bL2*YaowZ|IZe zlDZ+kh*X>{rpyDGV0A`O%%+H+w8ZQvMJ#)y+6_V2JQGsr&NfSoeu`?wM`4A(T@j9W zWl2)LIP7#`FL1O&sb5qtY zCGrg`@bxT8^|NxdlpY9Xy1}u-PwH{@4T^~{R;=94qix0_n|`Y=qG)5<5nU{wz_L6R z0Zvt8O^e;o>GjGU)RG@E?Z+7um?Ad7Ui>f8-ZH3?V2KjO8Qk67-JQYR-DR-B-QC?~ zaF@Z|VQ|-ryIFnz0I++$?3whvNxz@@;1mCX} ze<%y3M!hAoo#MuaTb3FUY+tkA2shfGS&pFE7{>{k6$naye{tR&=1qN};X1lAJT(O4 z+PWzFC~?@|wBh)0Ao2d$9T~Zw&vU-k;W|-@a2i*7LnA3`dL&|<-4b0?@-%HL>9|HL zDeFFWc=KIB8}MfX`)4|r|q;A`p9fMvgz(kBzsg_qLb8tZ7Zv z9|`&Q6q{>Bf%nhH8ZOSbqNuCOoc;Bc_UyZG?u0Zr?!+uyzDT(&9T*5p@78hzOn;dK z>IzdsT z1^sQ|t>4wu`9JE)~1|zIqvkl){*!(eWx#hAR zCkw5stf zY8%NkRR>h@xxy?LrCW~dn?^A2iBwKAKVD{bZrnX*6;5@QZcB+~Q;k$@+kV_*%VFi3 zh97IUliA4aV_fRR3B$T1!2JSS4!Sp8oA5b=jK;TFsa7YWku!u)ne$uT%o(dskt8W=2 z<>AT)@)sJ3O)Rc6L0{ThghbULRaPDU)RW&q$>hoHJQuOOC#0vfy|94=q$kowKvy5^ zty?dZ=lGEX+OrGVGQy`@$z-b6(NNsx_j-Hi<>3ePbjE$)XLM}i!f&6vB#PcYSur1_ zm+HU0Q=cquGFuiraJ(g&_;lX2a9YAd$RP~juFeQ>SJxK*it9l1tgUae)xE=I^(@4y z`t);~7Sl%Rnx1n=L~cpLKeE||ajYv27l}{K+OZw`WnOo5VcaP_=w@d8lhXq5<%R2=P$OPb8LqCl5NJQ zwDXM{E${fJ*I2#XeO0qI!}Cy}ipd*~r}VD@n|?E~ie1L*gjlwX5zCg<^b?;pZ=Cun zZ|JIv-Ex1!DtS0dGT)1I*P_4O&9nSIh0t!>{*kyF;TSKe;}_Ta+ZyRB{~@*peDI7| zk5V0`qSB?oI0Mv%bO?_XLngVYFNG-xEk*9Qb}S)AE!CgQE2^`L*9sMI*emFiAg+64 zb~I!(VZzB-<%5`Am=mn(OfdC}A`>T2fP87}so-^yl6wu?(S)h`@Eb%br|PD8P}Wmk zJyBnVb+0rcP=b?xfg^K0U_^1?5Yu10epBR$A%tnyd9koAWVQRfo2*;kS1kup{*IEt z6lPcUo8hEI`*2+hZ)TZ3nTn7>$wvp6rvk}!_HZ50CCrNmq8!CgYZUsj<8lfde4rgc z032KtW#l9Ve%ru#A>=G^ek17q-Hdj>){>W~c_ERT}lqk%8tl?8> zFK8bvsbmnZXtBS@YY84}*4C1=7RFGtv^5W13CHdSMy0S=I6Ih=>k>8QcOP2o1K%`0 zX(yPrtc;(xQRNR9#$KR-9OL)-rvmixun|V7m+B`SRV;Ec)K2}Xx26gHMCzG|nqmQU zay_Eg%gsil8>Hs2u0+rFM(n6kuo|)PV@-)#)zaH{T|X=ya9FS#0Iud@vbL!>paoXH zvnV}KB)_(;_HcujEmQ|Dc6s3JPJA;Q&wFU6(PLX=TWHp&1PlijlH!bCM(e91GJtZbh+1g&6o<+Yn76VN2qx)jd(X_W}_sj+}%rMDc8|i&6C~oFe zGf&iLgwQAjWjzf``W-d0G9n5w{`$Cmw!PC%ykczo|Kbo-lqp9Y_e|2_7@P(iaU8uO zZ2MOORcNd+F<4AlSJgK8dhk!*UAsj6E0)=>go~Sl&KpVVW~Pi^v!&!(71^=hsfGG~ z8ok0J-9J3qVEcJkFDo&cl%XXa8FKh3+?&<`#5X;WZ{VUL<}?zad2_|N9i^+BU^H&Y znK-eTFcv(p54e8$i(v0R<`uumj~?C9>3vu*95ZQ0y?D&Eqt1iCV|x8 zFp=vnX||4!DH+z9V!UIR0IF_NtRP;C`AH0sb3NIfrLh&eX`L@0NA$^-aTYf}!o1J)KF;pv{2IWIvnzd|*n?k{s*PV!T={wT zoM|f6G&ZO$4-pYh(>}-YCL+i)bLm*uGTrD55y5BU^y9lA&Dk9$blSP=ic>e}GUf<1 z3X7C5jt0WbU=9x1BNCfTtU3Ic_ZT{=&?DE+atVx~QaSpQVDk8a?@btY6$0+0?W0?} zMkv}puGCJ-RVZwQ3eg|y_Ai}cd{=xZ6IS=BP4bEs){qRA@yfywLGEBZdn`*2s>S?B z6_euYf3#fyj$OwEYhGX2)7u8`L<_s%fUs%u%Eoux8hp@|L|1DT_y&UAKN`CY!M@A* zxV*5yAjw8bMmaE2v`dUpB(!CQI=fKOG|8H(zjDf4iS5ZEs#DX*6#m)#iN#2Q4kNr_ z42me*tunpXekEr?bDAxKn>cI3q=J--{wA&5l7a^51yO-SQIqn@Yb7SqPYJ_K>xGXY z5C^-gJhxwdi~@z1sI(YlrV!IdMlJT(ch7%wnd*A-923IWNTQqDhknn>s_*?v-$SB@kuKl%x@CSt*O4z>r`N+s2w z^^n2k_A3%c3g{yk6it&rPwGBO@ge_^f*mGP_VwBfYM+#rAl?N}wY{m3?(n}?`sgpx z<#n=;F-l+p?q^!2tq>44x%MZv2@zddR{=+S85|4D__MEsDC`%r*XKd%XQVO;E8)nM z`S%HN-bm61j^9{KEnhpUc8v)T>3Bg)$+Wqn3w;o-NBxAX&k-~v$7h-Ozb~qIHu22} z4(pbg-6Vro@3Lt>bbS?xxgGJLswHI0MkM5T{)Znr046eQ<3HvUBxtS7UTg}l-yDIHlaGK4Is z8K$?UsNb1sR~slRAg;}b!CnroA|3jdiu{qZ8Xa=Qk9NZPFy)wwVxM`4P&j0URffOj zXm>+!s}OtFnZkP4noa^n6K!R1OI+$A=g>35!2_-+Mo(m9tL)sI=3AHw@zr$;;ugXP~U)6n{9tC z6KH>hh_MP{rnnCNY-ft^9LrLpq>0kUPI-HLLP?ed+Fnv@T7OVo$+}3d#IK1FR=31X zkC@UC`I_eG*k4Ug3x@kRQvwA$7q~Nh)}Kk)l7PtGmXdp9dU=vlq!&z!8gFSK%KqLMxsEaLq*$fc-Fub_=ZzF! z2g35c9@139FQw~bFZ7_@0>KVaG;Cqj(_t@!0vTw94Xid_!cM1BT}w2)v5M6SYjt~X zvPgZ?Z-1w+iKZf?wz$pIQ=cF#tv`H-l^CkZaA|6WaoSdSm#4J$md*xtT_4GFsJo^< zJS15C-DP4>>#n)|=m_(|wz3~FY|rXPIODQq&#JFY%l6soY4&>`Sk&tT6Vx~====RO zlpXx)dRfCGLaM84)^7=bCRdGp9YE2(YF!Pd8aq$nDe;Fo*6)ubqA6#@N;}Ei-KGsZl8Y+whn@?CSb=dD;9lci1(n zveMQ^i%JiVj!SLXv=hfUG?rr#0jXvid+nasi$kxweU~I|hTnkQsjC5W4&utbyr%Ub zdbK5x2JHzJ@2nD!8NSk1k9eoj-_kUdx~!lB1tS#qXX6vzg_8PeLUVVGm#Nze!tVLS zZup>EtjRAqu(V$A5U2)Ur|)sTbb<{4V4u`^JVm|Am~wRpN1eX2r(dabxBY>YdT zDDwVI`AYKpmVS@-+0$zBAcO+?pz)8m*EaSHZ*5%g_J2A1CA(4DmeyhK6q*Ot%j}hF z7uyzUtv61MViB3{?+f6;Wn@4Wuq_jjGwp;!2kJo};(yi=Yk+>`23?HipiQCt*^Mua~g9TvTeufz-%%-^*~ zsL7?LClY?I+!s8E&+j5V_)F?fH%_bc-skfKZbBPP#*h}@BkjcD@i-;&pc0Ga_jV+g zvLD>KO;4*>kR8939qKBi=j}Wl82`%-!Ig^N8bPU>1m6rif+81B3P*=ajnLiS*eAu{ zwFFP)YTDwFE>8K=rHw)m`q0?L5SFY|Vo;<3Bopm!q0(|&GVZr!8LUU~NPvac&s|9Y zV~@%*l#f}oz)FE?hlxZtk26bjL7jZD&+UDdrVIQ_A_U)k@$IKsF5Z{n_#T*id)iqp zsFzaArEFN|&*SS&!dsMQ3A4A$6?Y75Tsi1?#IjbBFrgfBy*m&U4Lm@wZAIle=FSW0 zA;U}Y5ysGQdb}iH9nx=bpyb8SoN)4~qm6@9gOQ)ra}Z&r$ls3!Wp z&r8GyIQ9wJmM^3oH**E=O;(Wb3uDB)zO+lSs5cdW_zK((NxeWB0Dn1s(<+C#94xGrxHG4-&Jgsem`V~*#{`VQ ze^_>9`uwo5jdP1zq}z=jF04&zmcKM9(((*n#qZFU05SV1PPBYLOqtT@D){w!cOFdr z`D)0})+*fTtN#o5XcXAtvG4!kOH;|z*MTvCp>!J-!4OjI@Sf&zuhtWLVZs!2pt1acvj0N4O(C*~lQ}Oukit z|EQRM9{~1PJFTz4(auerh0*zns3e{!=K2H z8QQjZ=={S2C`$M5^hB71A{}i(zIwMky{HpA1y-^#KeOSwprvYF2dlvIjPwY2jDH;1 zk9a&|7z_HKxj6xw|_vEMC6L{s=k-bH4TSfipL zN9cAaIH|0-sXQG8`#qbWfjfjk(~_Xs@w5(ttPX;|Ll-3-;&^d)omC{gE`}%?qv$?K za{Rag?td{YXHqgb+c?Z4OuZORrt%K4{I+FTV?kJgw2Gt{q zU)VXCVEL)k^ol%Y6)eM77Vpoz1PT2m@Am3LVZi-?9$6xyC+T}!qE5nn_$XP2u#Y8` z`;q=ZJK-m3-19>;ShLxFf)|lkb#KR!pj9U&Z$>rROGXO6maPxb$0?e^X!iEQj@-dd zB6`ziu0*N#5oU;DMdJfd+K`xudIyfa+X$h2@4`}YH+Clv31_ONwnWIC%(CK-*$3-4 zB9`C#PADYaQ>sKF)+^@S#R7ekr#KV!x8y3`KVvKUESql+2q<%4XoR}xK58QRfV|t= z8i>A>#WlDGT|yIV@{DWGJ<$(kb&di$K6&@#LYlCm3Hx$%Bhl+VXDu@o|%d z>-X*eGcw_Qlht35kF_kSCA2&6Fe@*&#Zi^qAOI(`0l#t40w1SZMOKY^FHgsA{q(gD>_@wKm+iI0KGVD6w}iyBFJ(IxWuB$A7-@ zoAa)hl))16-{<=>-a`wa142d<=kfl5K~31+xMY2)T%;qlMBht#S=LVUde{9ffMBWf zmQ^XZ6N`ei1H-je7Xjvow9q&=$uQiU)=fh>y_HYW$Nsg+mSI2Cu2jTZ2~?p33m)1W z9p&&}7oh{Gr!Bltdp9F`AD#$%g1z;?Crn45E9oaE)~9a+R42!<$v=( zb?hgFt`=B6GgVe}`rEHBwlGGLB{X$nXJF}uD^KR1tWT8QoYr*mkg{FA z|DXaVXM&FRXxG~KbJh_i0|wsNn1DZ_2>2Aw8z#+~$4tda4qUkCt; zPNz-Ky+wrhnSR?nBY=!!so&MnhC$fJ>}mE)kSkQ*?o0dD9Ch>;EM*y_b|ZRZ>7MjM z3Za z0bz03$788zxYYK{JUENuw(+E^K%~x-MimHfiuY-$fMQ(Sbj)`s)vzoby>r)b0O1nh zvgbkq<+6Pv|I-jbMiKqik<r#C4MMJK_ha%Qq9I?D6v9HSLhjSPHb6ekGR&(Z|6>MAgg4izGtnyet9TQe zwgGi4z@sPO=sD&pI@*X>!l`=}zsUD!uOY>Fthb2XBzqv|vwd! z6mq>}PcG+sK<2O{GOyUTS<*HUya<#e-QMyla&|UoQ+W9~qo~*>z8*_fsk{oH@)BUn zMUmeA*mP2@WTY&AL&q|5@%u!9hKH<$0lp3EQ6aSBkI$=Tn~~Z*c&#W8QEq3B5t;^b z(eHI|-O_xong9WhEHL@tdb7Q3^Dgh$7`ajs&x_2DJ_H4LF(@oFw z=n!2(yf|1~`)w+900$?wOE&{oTUJ9mgQ2%8Hj8W!8C5>Y9HH1IaQ;FMd!Nd4+-Egd zSAHfIU3^G-JwE51M85bh01o{t%ho@`bAvxB1z0{AB;%eniKL&1c$|hmCliZ5tBZX7 z*d{1P^gMs9vUyGM!_C59=9;h63}D@fw)I~K6?wK}OtcSjx3QrxY@9Rn;2*N30N|(sW_~p8d z(0Kna$HZTJRd(aHH5dG;x`S0>la4D;2sma^HGv|a6C=<#%8Y%YMidkL7J%aH4G(WG zZ7_&@MsA<5C}hsZqwT8c@E31BVpVuZku zUVnbSZ}Cz@5vhh0X;I))bZs$xucimxJ&LuY-)Alaq6FNgJ8tF?MT1GfCPu1Ufe5jVPy# z%niW|Ch`VyN69$4%wbBRaCZK(;FH`t7RQ9PU@?!-An*}52&9gNj-rSvg6*pr3KEEn zw~V-=kLSq~=EJj^DKU(}FkW@PD1w~q$v}HyrqcV9ozS1{faBaxd=&CU(Ez7vP1U2E zTUu*{=M+iBlkvu~wLrm@XIbVfgo&S1MMXgL%9vsW@ANA_o4m+&5-m~&m{zbk7 z^SKGGX-N9c+vxn~ycX+KweQvJ+E06bep8s$ojj9->WGnQBiiIZGQ|@Dmqg6s{<}Ie zun+l!^}({73VnOzA%Q>X>hQK&i|Utd8~<=4k_dUUN7=VqDT$(qn0*^3+*(^*rC_=v z{=s#Rp@*=z9;woSp(a&6Nk0CTjvhBJ%F75#py_2ykEFd^B{QS&22bS~9FZLK<)2wy=+%~Ns!{z&U^B-NOsm4j^dk4oySYw}yL z)R03%z+JDN%s#@a$a@y-OFG#*+)#yKu+Q`uCRQ_j-aF3Su9QC$^OoxkEWRR*jZnBF zkLr8Va1>J-wBo#~yaU{}z5Q%97-NVk9fpCV)^67A}Q%zAS^u0~Px3oC0hS<2*_gW*!Wh!)WgvPv| zx(v}TWv8=kk|e|eT21Q(Z?ybj&`V75e1R0Wz@aVj zr~ldwn|^nmTsP#Q-@_D8XO&$x0h%=lU^@1c?>{OAw${P&X9KfCY#Dpm&s=5(UPrSA zJpF+IbCIovvu6`}V4U@FWq(`iQuK=~dNj^6bUima^7eg;)p=~mi$>z+3NNq@IAt?_ zv>yO4vfY&WjW)q3wv$B#8G!tvsA(DCioN;3sE{$~_y~E|)p`thkgT-!P-`0-@U~>4 z3=-0Nb8h(%g*CB|64d@%7~*?HM{@I&rGNYS}NOl7ns<{YzY+ zHbBb2i>{EVuMsbzLKwCM1UWg_$f@GwC$2MAvhO2S`tA5yMj`4r6u{OoVX~45QPx>t z)_=hm$;yH0*8b-_Tj73Ac2Jue!{~V|mX*R7?9~m((Uyf%;*=4EcIYFs+m0mH( z0%-wH{_{1hqvG(oL&sbs3LDWb#%*8el~RY?6mZU8WrnkC)c@eFO`X-70tEKgr-1E# zol{f)6U-WgO|3l0dXKab-+#K9yz2G4nSrf9Q3cv+{hL(`mwhgQE>CSdhW!UWUkmjQ zAj&>N!tSnfcQB!jw89}j25O6rLF*-YY3dKbG7fxZ?WXsjjf4>KG`h7i`zV5eLz?|{ zpvY0_a^$)N@qnp`)0gQ0Woz{uiUdTu`wM3ym}CFN(qo-kcain8wf?x%4O(v1XPL%0 z@i6L9S_XUJ?dF1wALdoKhafqba86LChaih-dsT2N=Iakt@~>`5zUEGADIwpp%$E-N z?#BehH4MvE>#=3ra{a!?XYR7F@SGInT)|K8XPJ*^^qncV-vOqVCp^=6ja>FFu>EwUMTN3PG)?|y+6dBro4;U+-yX|&XP`~%lB1-q!6_Ux94K1@v8UgEz2 zUvrf8%^9+qk;aDd)c1o8GO^$Uo;d#@y}O6=5=>|Qa?(39wedurU=LB#iJO1|e<4v+ z>G}giDc`HHoy5nJpBC*GcE5h9hfmpgY-NMVtY9tzcI8J>lZuAltunI zcWRd(1!kRbwc+hK-7m0AeSUw?6wfy)_ZXtdqOE4XDjo>r$-aNv2 zc~eyFpHO&j^?T09WI(gMHwoQIJZ6u0Lg8On0Z*{*eHe{hz6j;~#kxC%joeK4+eiBG z>syRrZZC0fs4ln3*sYrjZD4>ay*H;6cFui-=V^Y(1$=FMYMB?smlcXF1c5wcCpdK; z#XyQNC|)4XnGyIurY0xVefbH;76({C-DC=P*YN<4Gi5o!V{2PLkbKzyc!YC0V{M|u z)UG)Wmw*v<-u+5ZA$6PMAvI$%4WKinv=erHgyKCaR*FO3}dY=9@Ad2lQgR!?Q z7$-ONiQ^v11Ag-Ty@If!$d?7lPQP&Q@PP_QOUI+d9|N3|au*_F>GP=buf$zVh`-lU0S*)?7+;+Ud)2>?30B@!yoB>9$wZf z+hcnF^5YF&8E>+|dLoabhtoDqKkLhk+O@?aLUf%&;xjL-Uk~(EmH#3g_Dqvmf!Fny z*yiu1AP1ra9F>zw zpea~?!V~JSE!TD_XKUp@y=D683 zchvI)7Us^wOPnv9V)Ejv$U_A9QRIqedWa`~H|dcZ%w6SjpyxJ%(Pa{Ie3|Cp27|Gn z8$kxr7RV9de@>emA)mCU1$W+qVy2>)+&{qp4hX{Bg?9-q`FMPv2M&sQ{pL}WnP;=y z$MFotI-GXR1~vrC|M-eMGr)hSTdeU>IUgu1gtXmY9g_9GOx>nBYu9l0i!aLJUZH@x zh$;)A;R@a7UtdyA{eBHWP#amQ!2dpHF3su4ZJLWbB(BUw|9N1&Mti=|49pAn->p=b zt06tp19NSE2fdjHe6 zwJwB#6||E>uHR0V+(yAmtW%uaCI_uf_l*2}iSdhhce>xcBLGj*>T>oUZnjvT1;@(| zS(6a8Mv~{4cDU(`^QaM7pctimak7Qs^>U5iZN~DV3|UYG(~CYTm`CEi!j*An*4<=|=?LbI>vMNWh%E(hj?IhwOq%~aD7WOF;lB3vPn$}uv|M+* z#i{md^m+CpuKaU>V$pvgyTRx#L!4vgglsn_7d`4_Nqwgj>* zr1~}P5gIS=KUCLFs`t9CW6!a3JYFHYx8Rw21zF+@P#UlB+$J%W16TdQGbaASA{I@l zj8;A9qcyxg8`Q>xinS3uq{eXu&_|DWf8Lt@k#p}?ba}`#he6)xuV_Z-Ni-g3N2PxL zTmuwmxqhD`US^_B(8+Gpqnmpbh047yX_z|*_-c2e;rn2{0&}8v-rcrrmtsm{|3cX`iLg~zw&Ql$L&S9(UCC9Dr z&~gf0??DExH3a(}UcHC8QHEa5%cI*Kbz2*UrtU9xHfNTeHdm^3=aDT(nE6~4Sxp9b z)#(BpJ$i*VW(C?ys|~fP`E!k9iI#7x2j`aS4D%2TUkzFtcBszjR=*oGuk|ej-<)Nq+6DpknXWo7vI`rlUA2v%jLOE zqDLo%H=sFFcPxzV?v|JLFL5@?T1Kpfg*(*tT2I+Uy@0$TG0*SQjm}PS!zGeYA+oVD zpnRGmVM1N@gh=N`;A4;&U+A+buqJI&UUAg7D?8M!9sHthVFZlMAT3r)Wq40rEElAc zFL-FC0|ircID*Oy2ZIv_X~0}o!Xd=WeYmWXPxFYO({=SSjq2fop_A|LrKil*%GTOa zi?y!q`o4z|lHZA;ws^p&$>)y6soI;lPwmR94A);9%adbEuPX5?8*6}j^MzlPR=?-u zu<7vHV@r2uraRLxh@I8XrLj7%vHrLullFKZxv$GJn`rgb`K)fP<(1FxmEq)u8@0Ml z7Cs%#Q^gie*VFi`jm@goi&=N0nTI3J_llNoFAKmv!wVY2N{dCc;Ls&iI(22*#m<|T z?L>{ft+i{nlOi12?AARxUPw-k$;gBn#{++ zm?;I==^$)aXE#xpd?}7Qy$!Pb-PQ%e)ToqnldnCnyltKI=F~_~$QQmB>-d*3lF41h z%r+(ek#i-cz1m(0Uk8?3)k0+^^^Us|2<|DrZN^7TcdpVc+K0+N|kps5drB7iA z85{Kk?I23WxrXPY)C+L!{_3aoPfq=|I~e?C0=KOR)GPey=rogonxbyA*J%Pi-OTj( z$AVJx<>;=B&!SZ}=aN`=j85=G4=bIyyp{F23VXD|hFXv?Vp+aHU`)Ps*wx3E?_@RX~bkfindU6WW%|GKcSwbOW(E# zl4NI4Z8vp3cfzWXY_^&zNC4hRC@o{m>s5a{-=Iil!KW0i@=0>;YY3iwdCA@vZN4g% z&Am6@8wMtRBu%Ra+0s|RRP=f>zeFmYf(!hz67c=iH@~<@@yJIpMv6B!qc+AC9|4J; zXlOx)QpP9hH(+622IPu94e z3@m-*VSYK~UrkP1UP^WlbBBxZs~KpJo#a^42s0Ae%R?&4i>!OOU%vy+MEjjKuC9(~ z(A~ZlE-0+Z^k^p60Vd5i)4MY#Ho(a~N;5OYe!J&y|5BCJrELx z-KB0FS+YH*(GGy|J}-^nW4quvO~;CEc!_Nq$qPE8d*2xa-w2qG`WNI~-?qJ$_z5kw zVuZR^;OBFh&^t|Y^{?ALV_HSY(jMuOX40~3nlmnowSA9*S6WJyYDhGx)OnM_#A#JqOIh@EN`he&g8es;79Fb9iyEM)hrTXs2bF zO^eybaQY!Qo8YU>jn%t8D~ljFzj<|+8`cf1|5r7hxpwZdJKK=h8otqG%<>$C#8IFu zeJ4bTfU-GbOEu}FBZ+N<@Y;{>!RPK-@PMnc>^Hk2j(y7<^z;jDOHQd90u0OYs~`B! zjOE)qQBg_v9-1Bucw?`_lW(?wLo;AxmGk$?XWo(8bVPZn~c?ldeH&`lhe@vu$A1x?Qhm@B3qF;B9Ja z`q{SEEuYszk6ZVGh?E!n_nDuTd2_trlsD3)fTk2ut5b;aU3R~vO#h{Lr~q}Hi+ivN zYEF4cf3f=TOOP|Glmge?Pic+Q7^y>GX%*`>didwM>{W>Dl~l#7HbYJ-?rAKmCne%w z>9HKs!R#-ln3-KYX2TOn0+i*^BSRHPsbHD@f7_1`3J*$ae_AY{eT1irA{(Ri6;+j4mEIab3?y-mor2?hpBF6W0r5{g!s?&x2 z)Lc8eLi5E9hoxvB?AgBwBFK`B8bDOsp}NrPTgr4S8q~|^U{yrG-kgRo2IUwjM{gls zziZsupLu*pmjGA{Jgu z`*E)dDG`k_V)m>5+^{Ul87#muLq0%pBhFV!OdXaone54ud{AFW9I=gBXU5S4jQ>cQ zLi)-6=LjFeoykDsh#b7irO{JQ{7Vh=qgN|PyP=U%#p=&7gfPXc_s~;G<6E%RWnJ$a zP^kE`JL!|-(m(Zed#FX{xRAUW-ADS{EEHEWW)tIoAM#eKaMfY6!ZJO7_yzdn6I**<}k6$E;){EGKXU|qt= zc#N}Z^hII6-U~aPqjW{N6mxMbEt%3#YM*cEHYZq#ynP{34QdB8xeRR+X%GNbpaw~1 z`htLl6n(OUzORD;Z{Z@oWZ_56=fU ziu2n{MCShX&>Mms7@m(|8E`B@H9>ow!TOEvP=1X+N!%&)F7z zN#9+7x`Zd;j#)s10Ny7fCKfN_>?D7H$6W@Qfmq zrQV*(dVZ-?$jpMW^H8bs(R2#qwKxW+bF0MHn`@8uPouO0Pp;o&Jd8SfGi7(Z=VR8J zZv%f_F!C-|te-1J#3P{lDB+N|N9?r3_dQ=y@1xK43i?0w{&28uOKcu>5-Gc(RKu6< zxpNFUyh`Rp$S~>kTPhWVhzCQ-)8m3kv*9LLd$PBEAQXM?DOH}Hky6S^EMZ6~spgc` z)lX}2NNWkBw~bZF@}L}8IvSrZHMg1=n=du9%1SC>5RzTLPi$E{KAn{14BXB_R9!Ws zy>8I{^AZ8{szQ=}B2@8@Cz!)8H|tc^^-gQKq_?f7w{0Gm$_mn{P;}qJH{;aoDBVl9 zWMdjmy|&c;;T6hx=JN}~hK%=o8S{`&SIiS=C!EU^&HoN{pg&4_b&D{1XOW222I@JW zec+ioHUUVTyQQThpNT3^i8)aj<`Yk_&kdclXkus87+`;+<bh zpP#!YXu3V_c<}A)FRmb2dYYxyZzFZG?E%%$^@Vzl?a(Lw9AV+6t)L&DhIPKD0TTjp zRYKheHEnvLg9Zjs0*n~+I5T>&N|4zTi9bDuc|Bc1dA;4+0K@rZkek#m+EP4lm5}s` zmJSpxJtV)(-WxkbwHF^Y%Os6-wQ<){#M^lv5R_TPotA5BIXB-{J zjzcEiy;V7lljv2n5Nx~E+0IIK)sA3c^rMKp@yL7F|B8GQ9`}h_+uvTn`q67C_y9utc!+){%X^Q=O0P@Z6mskZ^y8%r1axM* zVPbHx9L0)g$;v{~b)Adyu_a>+(yo(-#=C3J~e8^MTp(9}R~LG_r2!~bf6z>W4K zr1}n5_;kZdClE{TW}=EC*b;Pj8Wg3vF^*;camd?y%ERPu^Mxg~gd9!fBN2T_Xf3y? z8AIj1ayPZ0uiqo$c;?~F#A`_$u^e;TjF1qf)+RyiQGGW*Ik2{8+z1LjhR+aZoN1Xp zY?qh!dmG3XV`Q@ZYJ}AKulkEw{DB2y??;t2x8(Q%Uu5SLSbB}H#LL=C>J@WqkL#S! zfqI~VtVDHHC0mc)EL1=lI`{XiJggMhadPy_DLIQ-N(4(Oqy4VOE}yA!S((bwxN#+( z=Tmq|w8C_LtU}6 z9aMAm2oqHC)0MR$$>hY|jP)yd)kO3?wva!zcYA708$*rh%*#EJHi>j znpn}O9WDQer4|V4@Mbt5Lcr}$NCYxLyi$@*N)d&fquM96Dk=A!QjuLqJj87gjC6!iUk#xFNyf%4X`csaL@m%aRMmV4Tqz=HqSb}+@F*U^J` z*D<|`#!@iIbf;G5NuI(F6Xd0&g2a<~_T&1G5^5H_Vh+FbpXUzPY)aK{6NRj1lX+o7 zy{t;3B;WmO`&iXe<`IJEHN!ii=K1E3R4F=^e*N}U5>rUNzzY5Or@0Kfs-RF1(s^2c zs7@D$ChQD%k>*yMcK{k<8E4s>$3iZI^um!c$~fFfQuUPA9iw`L9DX4W{tEjIAJI=y zIWDC$+RG)e7t6d?jC0{<%Q41hRz zI@$kUiAKKvpF|^gAQ}=m@4&!HfSb&*_D&C+_AJZ%jvtyI6w$3Z5sBNEV4FsQ@P4am;3SERL+ibq8^ zy;Y=v7AzII#ubTY6vT16;XCkqW*%`-WuF)NgC>M0E<1hegC>&U3LET^WVygA`bWl0;MFluMOgJ@gj`i@9&rh z(CKoCwSJ%9!=SsY!(=kl)`L193BsiR^Syo9^g-*2iNT4{l{W`W2o6H9CJ~%ptE31$ zd_o_nlt8`>6$c-n7G74mai%o39pdcq!%0nj$s4?eHk|Y-s0_Z?P+i-%R;M?*$e@^a zT>pVFmcK;q_N)f*;;XvHIe~KBF>d|4a*6N9b0vNb^CHwwpIll^eFE|WPY?1GZ#q5e z%F{Dq8uvYA9eG<{GkI6N7+>}CAEUR!9plhl4ep4J_bkSL_~Qa9JM`!j(+>zW)zxDq z$?VIkhPBi>Ppy|M&)Gfd&>jr(!s`LVzpfY579kdHW1tjMmoc<7we<}e6)3Q9X=y8e z>wzK-u&E|NcjbC%HrI|vJ2~^GBVd5mYF@;zC3SXi3+CSOAPCy~Zs18YFX5FNBAwoS zt$a0oee>tLTeft|ZiOm$dz!cYym*cM3e(JK?J1<(d4T-6WP+UBb-JYKO+2Tdud1pK z(2BMlU!c!8Pj*wChB3^qv=90*UDhD0(gIaFj}=hOBK}EedAN5$Ts8_C^P>Xs?yCB+ zlmG9}z08~xuA1t~TQBSH&Rapo_QgrJp5U>d_WDz60V9>XLgCZP8k`=L3l{30H_Myb zT804Z>vj$&Re4_m#7d6XR7d~0Dwj807QF1=Wla0n+K{0*>@R$#Sa-l{7NS1@D(Ceg zK`I-5Z74iwF%PdlNa4^wcNc`g_3$l&@W2`B9O^I>a`e7-Z{j?C-r+ne=V9bt2!wNr z)vY^T!UoN%#p#86aHF~ey_SPK_pz?{d?i-D-0wqyx(U3f@L5=n0>bWm=NlJ6e2VM_ zcdfd{^Cs-FpxWHHQzkk&>Z5G}7quF#AMqG##I6zrBZPD4_E$JTelf%t|L%jf)=0b+ z^Mu)yI)&B7wxfEWhA*Q3w&@Xc4tsqc$@5k>10Sw9DbB~^a2is=9_7ZEn-P8i*5*k1 zcZXuEHK1pJrc!)o>QJjhbd)0HC?-mTt1S-iQ@0CS*LU&ToDhA|o&}uBXH^|>O7vqL zZg%mJ zg|>_t*N-c=o8cj!ak#^>m~{`815U)J_A=<7?E~Nl8x?_+mwUo+?xy*vy4)*$?+$gz z>)b0t|AVxz4yxk`!i10@!GpU7g1c*QC%C)2yE_Dj;2H?-?(XjH@ZjO@Jm6mPyQ}-_ zs_yFk*{YrC+3uP7W@fjmw?96<@IgJg$V)*$L)SKN*HL`th#SP!4uf;2N&-4j!80oO+OtLVb5Ag|EUt@

AU-Q{%YO-Tz&+PLPn(2Z{#;W_Dev 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

C^)pzvS)Q9=16vIe1A< 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 literal 0 HcmV?d00001 diff --git a/hacks/blitspin.c b/hacks/blitspin.c new file mode 100755 index 00000000..091d84d1 --- /dev/null +++ b/hacks/blitspin.c @@ -0,0 +1,277 @@ +/* xscreensaver, Copyright (c) 1992 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. + */ + +/* Rotate a bitmap using using bitblts. + The bitmap must be square, and must be a power of 2 in size. + This was translated from SmallTalk code which appeared in the + August 1981 issue of Byte magazine. + + The input bitmap may be non-square, it is padded and centered + with the background color. Another way would be to subdivide + the bitmap into square components and rotate them independently + (and preferably in parallel), but I don't think that would be as + interesting looking. + + It's too bad almost nothing uses blitter hardware these days, + or this might actually win. + */ + +#include "screenhack.h" +#include + +#ifdef HAVE_XPM +# include +# ifndef PIXEL_ALREADY_TYPEDEFED +# define PIXEL_ALREADY_TYPEDEFED /* Sigh, Xmu/Drawing.h needs this... */ +# endif +#endif + +#ifndef VMS +#include +#else +#include "sys$common:[decw$include.xmu]Drawing.h" +#endif + +#include "default.xbm" + +static Display *dpy; +static Window window; +static unsigned int size; +static Pixmap self, temp, mask; +static GC SET, CLR, CPY, IOR, AND, XOR; +static GC gc; +static int delay, delay2; +static Pixmap bitmap; +static int depth; +static unsigned int fg, bg; + +static void rotate(), init (), display (); + +#define copy_all_to(from, xoff, yoff, to, gc) \ + XCopyArea (dpy, (from), (to), (gc), 0, 0, \ + size-(xoff), size-(yoff), (xoff), (yoff)) + +#define copy_all_from(to, xoff, yoff, from, gc) \ + XCopyArea (dpy, (from), (to), (gc), (xoff), (yoff), \ + size-(xoff), size-(yoff), 0, 0) + +static void +rotate () +{ + int qwad; /* fuckin' C, man... who needs namespaces? */ + XFillRectangle (dpy, mask, CLR, 0, 0, size, size); + XFillRectangle (dpy, mask, SET, 0, 0, size>>1, size>>1); + for (qwad = size>>1; qwad > 0; qwad>>=1) + { + if (delay) usleep (delay); + copy_all_to (mask, 0, 0, temp, CPY); /* 1 */ + copy_all_to (mask, 0, qwad, temp, IOR); /* 2 */ + copy_all_to (self, 0, 0, temp, AND); /* 3 */ + copy_all_to (temp, 0, 0, self, XOR); /* 4 */ + copy_all_from (temp, qwad, 0, self, XOR); /* 5 */ + copy_all_from (self, qwad, 0, self, IOR); /* 6 */ + copy_all_to (temp, qwad, 0, self, XOR); /* 7 */ + copy_all_to (self, 0, 0, temp, CPY); /* 8 */ + copy_all_from (temp, qwad, qwad, self, XOR); /* 9 */ + copy_all_to (mask, 0, 0, temp, AND); /* A */ + copy_all_to (temp, 0, 0, self, XOR); /* B */ + copy_all_to (temp, qwad, qwad, self, XOR); /* C */ + copy_all_from (mask, qwad>>1, qwad>>1, mask, AND); /* D */ + copy_all_to (mask, qwad, 0, mask, IOR); /* E */ + copy_all_to (mask, 0, qwad, mask, IOR); /* F */ + display (self); + } +} + +static void +read_bitmap (bitmap_name, widthP, heightP) + char *bitmap_name; + int *widthP, *heightP; +{ +#ifdef HAVE_XPM + XpmAttributes xpmattrs; + int result; + xpmattrs.valuemask = 0; + bitmap = 0; + result = XpmReadFileToPixmap (dpy, window, bitmap_name, &bitmap, 0, + &xpmattrs); + switch (result) + { + case XpmColorError: + fprintf (stderr, "%s: warning: xpm color substitution performed\n", + progname); + /* fall through */ + case XpmSuccess: + *widthP = xpmattrs.width; + *heightP = xpmattrs.height; + break; + case XpmFileInvalid: + case XpmOpenFailed: + bitmap = 0; + break; + case XpmColorFailed: + fprintf (stderr, "%s: xpm: color allocation failed\n", progname); + exit (-1); + case XpmNoMemory: + fprintf (stderr, "%s: xpm: out of memory\n", progname); + exit (-1); + default: + fprintf (stderr, "%s: xpm: unknown error code %d\n", progname, result); + exit (-1); + } + if (! bitmap) +#endif + { + int xh, yh; + Pixmap b2; + bitmap = XmuLocateBitmapFile (DefaultScreenOfDisplay (dpy), bitmap_name, + 0, 0, widthP, heightP, &xh, &yh); + if (! bitmap) + { + fprintf (stderr, "%s: couldn't find bitmap %s\n", progname, + bitmap_name); + exit (1); + } + b2 = XmuCreatePixmapFromBitmap (dpy, window, bitmap, *widthP, *heightP, + depth, fg, bg); + XFreePixmap (dpy, bitmap); + bitmap = b2; + } +} + +static void +init () +{ + XWindowAttributes xgwa; + Colormap cmap; + XGCValues gcv; + int width, height; + unsigned int real_size; + char *bitmap_name; + int i; + + XGetWindowAttributes (dpy, window, &xgwa); + cmap = xgwa.colormap; + depth = xgwa.depth; + + fg = get_pixel_resource ("foreground", "Foreground", dpy, cmap); + bg = get_pixel_resource ("background", "Background", dpy, cmap); + delay = get_integer_resource ("delay", "Integer"); + delay2 = get_integer_resource ("delay2", "Integer"); + if (delay < 0) delay = 0; + if (delay2 < 0) delay2 = 0; + bitmap_name = get_string_resource ("bitmap", "Bitmap"); + if (! bitmap_name || !*bitmap_name) + bitmap_name = "(default)"; + + if (!strcmp (bitmap_name, "(default)")) + { + width = logo_width; + height = logo_height; + bitmap = XCreatePixmapFromBitmapData (dpy, window, (char *) logo_bits, + width, height, fg, bg, depth); + } + else + { + read_bitmap (bitmap_name, &width, &height); + } + + real_size = (width > height) ? width : height; + + size = real_size; + /* semi-sleazy way of doing (setq size (expt 2 (ceiling (log size 2)))). */ + for (i = 31; i > 0; i--) + if (size & (1<>i)<<(i+1); + self = XCreatePixmap (dpy, window, size, size, depth); + temp = XCreatePixmap (dpy, window, size, size, depth); + mask = XCreatePixmap (dpy, window, size, size, depth); + gcv.foreground = (depth == 1 ? 1 : (~0)); + gcv.function=GXset; SET = XCreateGC(dpy,self,GCFunction|GCForeground,&gcv); + gcv.function=GXclear;CLR = XCreateGC(dpy,self,GCFunction|GCForeground,&gcv); + gcv.function=GXcopy; CPY = XCreateGC(dpy,self,GCFunction|GCForeground,&gcv); + gcv.function=GXor; IOR = XCreateGC(dpy,self,GCFunction|GCForeground,&gcv); + gcv.function=GXand; AND = XCreateGC(dpy,self,GCFunction|GCForeground,&gcv); + gcv.function=GXxor; XOR = XCreateGC(dpy,self,GCFunction|GCForeground,&gcv); + + gcv.foreground = gcv.background = bg; + gc = XCreateGC (dpy, window, GCForeground|GCBackground, &gcv); + /* Clear self to the background color (not to 0, which CLR does.) */ + XFillRectangle (dpy, self, gc, 0, 0, size, size); + XSetForeground (dpy, gc, fg); + + XCopyArea (dpy, bitmap, self, CPY, 0, 0, width, height, + (size - width)>>1, (size - height)>>1); +} + +static void +display (pixmap) + Pixmap pixmap; +{ + XWindowAttributes xgwa; + static int last_w = 0, last_h = 0; + XGetWindowAttributes (dpy, window, &xgwa); + if (xgwa.width != last_w || xgwa.height != last_h) + { + XClearWindow (dpy, window); + last_w = xgwa.width; + last_h = xgwa.height; + } +#ifdef HAVE_XPM + if (depth != 1) + XCopyArea (dpy, pixmap, window, gc, 0, 0, size, size, + (xgwa.width-size)>>1, (xgwa.height-size)>>1); + else +#endif + XCopyPlane (dpy, pixmap, window, gc, 0, 0, size, size, + (xgwa.width-size)>>1, (xgwa.height-size)>>1, 1); +/* + XDrawRectangle (dpy, window, gc, + ((xgwa.width-size)>>1)-1, ((xgwa.height-size)>>1)-1, + size+2, size+2); +*/ + XSync (dpy, True); +} + + +char *progclass = "BlitSpin"; + +char *defaults [] = { + "BlitSpin.background: black", /* to placate SGI */ + "BlitSpin.foreground: white", + "*delay: 500000", + "*delay2: 500000", + "*bitmap: (default)", + 0 +}; + +XrmOptionDescRec options [] = { + { "-delay", ".delay", XrmoptionSepArg, 0 }, + { "-delay2", ".delay2", XrmoptionSepArg, 0 }, + { "-bitmap", ".bitmap", XrmoptionSepArg, 0 } +}; +int options_size = (sizeof (options) / sizeof (options[0])); + +void +screenhack (d, w) + Display *d; + Window w; +{ + dpy = d; + window = w; + init (); + while (1) + { + rotate (); + if (delay2) usleep (delay2); + } +} diff --git a/hacks/blitspin.exe_axp b/hacks/blitspin.exe_axp new file mode 100755 index 0000000000000000000000000000000000000000..4f0b7991e61fca112db3247921f385839df187ad GIT binary patch literal 44544 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 F{||-~J+lA+ literal 0 HcmV?d00001 diff --git a/hacks/blitspin.exe_vax b/hacks/blitspin.exe_vax new file mode 100755 index 0000000000000000000000000000000000000000..7fa2af45218f7bb14f12e1c0d93bccb9a82b137b GIT binary patch literal 36864 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 N*g{2l4xsl#`o9U5^2h)H literal 0 HcmV?d00001 diff --git a/hacks/blitspin.hlp b/hacks/blitspin.hlp new file mode 100755 index 00000000..2a2cfa27 --- /dev/null +++ b/hacks/blitspin.hlp @@ -0,0 +1,73 @@ +1 BLITSPIN +Rotate a bitmap in an interesting way + +SYNOPSIS + + $ blitspin [-display host:display.screen] [-foreground color] + [-background color] [-window] [-root] [-mono] [-bitmap filename] + [-delay usecs] [-delay2 usecs] + +2 DESCRIPTION +The blitspin program repeatedly rotates a bitmap by 90 degrees by +using logical operations: the bitmap is divided into quadrants, and the +quadrants are shifted clockwise. Then the same thing is done again with +progressively smaller quadrants, except that all sub-quadrants of a +given size are rotated in parallel. So this takes aO(16*log2(N)) +blits of size NxN, with the limitation that the image must be square, +and the size must be a power of 2. + +2 OPTIONS +blitspin accepts the following options: + + -window +Draw on a newly-created window. This is the default. + + -root +Draw on the root window. + + -mono +If on a color display, pretend we're on a monochrome display. + + -bitmap bitmap-name +The file name of a bitmap to rotate. It need not be square: it +will be padded with the background color. If unspecified or the +string (default), a builtin bitmap is used. + +If support for the XPM library was enabled at compile-time, +the specified file may be in XPM format as well as XBM, and thus +may be a color image. + +The XPM*bitmapFilePath resource will be searched if the bitmap +name is not a fully-qualified pathname. + +2 ENVIRONMENT + + -delay microseconds +How long to delay between steps of the rotation process, in microseconds. +Default is 500000, one-half second. + + -delay2 microseconds +How long to delay between each 90-degree rotation, in microseconds. +Default is 500000, one-half second. + + DISPLAY +to get the default host and display number. + + XENVIRONMENT +to get the name of a resource file that overrides the global resources +stored in the RESOURCE_MANAGER property. + +2 COPYRIGHT +Copyright (co 1992, 1993 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. + +2 AUTHOR +Jamie Zawinski , 17-aug-92. + +Based on SmallTalk code which appeared in the August 1981 issue of Byte +magazine. diff --git a/hacks/blitspin.man b/hacks/blitspin.man new file mode 100755 index 00000000..08b7ff05 --- /dev/null +++ b/hacks/blitspin.man @@ -0,0 +1,71 @@ +.TH XScreenSaver 1 "17-aug-92" "X Version 11" +.SH NAME +blitspin - rotate a bitmap in an interesting way +.SH SYNOPSIS +.B blitspin +[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-bitmap \fIfilename\fP] [\-delay \fIusecs\fP] [\-delay2 \fIusecs\fP] +.SH DESCRIPTION +The \fIblitspin\fP program repeatedly rotates a bitmap by 90 degrees by +using logical operations: the bitmap is divided into quadrants, and the +quadrants are shifted clockwise. Then the same thing is done again with +progressively smaller quadrants, except that all sub-quadrants of a +given size are rotated in parallel. So this takes \fBO(16*log2(N))\fP +blits of size NxN, with the limitation that the image must be square, +and the size must be a power of 2. +.SH OPTIONS +.I blitspin +accepts the following options: +.TP 8 +.B \-window +Draw on a newly-created window. This is the default. +.TP 8 +.B \-root +Draw on the root window. +.TP 8 +.B \-mono +If on a color display, pretend we're on a monochrome display. +.TP 8 +.B \-bitmap bitmap-name +The file name of a bitmap to rotate. It need not be square: it +will be padded with the background color. If unspecified or the +string \fI(default)\fP, a builtin bitmap is used. + +If support for the \fBXPM\fP library was enabled at compile-time, +the specified file may be in XPM format as well as XBM, and thus +may be a color image. + +The \fB*bitmapFilePath\fP resource will be searched if the bitmap +name is not a fully-qualified pathname. +.SH ENVIRONMENT +.PP +.TP 8 +.B \-delay microseconds +How long to delay between steps of the rotation process, in microseconds. +Default is 500000, one-half second. +.PP +.TP 8 +.B \-delay2 microseconds +How long to delay between each 90-degree rotation, in microseconds. +Default is 500000, one-half second. +.B DISPLAY +to get the default host and display number. +.TP 8 +.B XENVIRONMENT +to get the name of a resource file that overrides the global resources +stored in the RESOURCE_MANAGER property. +.SH SEE ALSO +.BR X (1), +.BR xscreensaver (1) +.SH COPYRIGHT +Copyright \(co 1992, 1993 by Jamie Zawinski. Permission to use, copy, modify, +distribute, and sell this software and its documentation for any purpose is +hereby granted without fee, provided that the above copyright notice appear +in all copies and that both that copyright notice and this permission notice +appear in supporting documentation. No representations are made about the +suitability of this software for any purpose. It is provided "as is" without +express or implied warranty. +.SH AUTHOR +Jamie Zawinski , 17-aug-92. + +Based on SmallTalk code which appeared in the August 1981 issue of Byte +magazine. diff --git a/hacks/compile.com b/hacks/compile.com new file mode 100755 index 0000000000000000000000000000000000000000..96dbc5449deea2a47610d03e556d9acff9631376 GIT binary patch literal 574 zcmZvZ%Sr=55JmG7#zz!}kcCQ|?1d~kHI?Zm{j$0vGwz~B42Z(SP5$0W6hX>GZ~Abm zZgKm)QSrQfDYm=q{*B%?kKL-<-JbJ5z@);t@i@JAsZcqSf^32>;Y`q(H91AY>_V^# zLA418k#X->@VQkEnG6J}30sfZ0MovpTG>#7oTt&6h7FlghschvOOU&C8t*|I^4Jn5KN8N}A-BAU0xS|wlBp?B0P4tg~ogPE2-Q> ylUkUXw@*%XqLT1h)Y(o+k`#1+PU*er|1Fi`*ME9gJYVS7L%X+=q><$CmG54c57C(b literal 0 HcmV?d00001 diff --git a/hacks/compile_decc.com b/hacks/compile_decc.com new file mode 100755 index 0000000000000000000000000000000000000000..7d52903ddd88d517888b193936ebea3b02a9b8cb GIT binary patch literal 854 zcma))+iC(q42FG_MS4)H+b3Ac7_&RUIW;qu9q&X0y=g)E{xm(%%ceI210P?KpMN>I zX#gHKC{JSSY3z)1^6x2N_u_M7N?`+qVrXHZ(rZU0ClYq0vNF`v42&rFy~Z_&{xMm+@^lQ_fBg1)P*2^n_l&&y`&uH>^fsRjKiZ}y^` ztHuyB4!ioVq*7%`>Q;3=f90en$`Q6%ChIA2tZ@@zI!Hytr+xfW=9+R?WWF;90%mpkN*R(D%Yz3 literal 0 HcmV?d00001 diff --git a/hacks/decayscreen.c b/hacks/decayscreen.c new file mode 100755 index 00000000..32f8167c --- /dev/null +++ b/hacks/decayscreen.c @@ -0,0 +1,145 @@ +/* xscreensaver, Copyright (c) 1992, 1993, 1994 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. + */ + +/* decayscreen + * + * Based on slidescreen program from the xscreensaver application and the + * decay program for Sun framebuffers. This is the comment from the decay.c + * file: + + * decay.c + * find the screen bitmap for the console and make it "decay" by + * randomly shifting random rectangles by one pixelwidth at a time. + * + * by David Wald, 1988 + * rewritten by Natuerlich! + * based on a similar "utility" on the Apollo ring at Yale. + + * X version by + * + * Vivek Khera + * 5-AUG-1993 + */ + +#include "screenhack.h" + +static int sizex, sizey; +static int delay; +static GC gc; + +static void +init_decay (dpy, window) + Display *dpy; + Window window; +{ + XGCValues gcv; + XWindowAttributes xgwa; + int root_p; + Pixmap pixmap; + + delay = get_integer_resource ("delay", "Integer"); + root_p = get_boolean_resource ("root", "Boolean"); + + if (delay < 0) delay = 0; + + gcv.function = GXcopy; + gcv.subwindow_mode = IncludeInferiors; + gc = XCreateGC (dpy, window, GCForeground |GCFunction | GCSubwindowMode, + &gcv); + + XGetWindowAttributes (dpy, window, &xgwa); + sizex = xgwa.width; + sizey = xgwa.height; + + copy_default_colormap_contents (dpy, xgwa.colormap, xgwa.visual); + pixmap = grab_screen_image (dpy, window, root_p); +} + + +/* + * perform one iteration of decay + */ +static void +decay1 (dpy, window) + Display *dpy; + Window window; +{ + int left, top, width, height; + +#define nrnd(x) (random() % (x)) + + switch (random() % 8) { + case 0: /* move a block left */ + case 1: + left = nrnd(sizex - 1) + 1; + top = nrnd(sizey); + width = nrnd(sizex - left); + height = nrnd(sizey - top); + XCopyArea (dpy, window, window, gc, left, top, width, height, + left - 1, top); + break; + case 2: /* move a block right */ + case 3: + left = nrnd(sizex - 1); + top = nrnd(sizey); + width = nrnd(sizex - 1 - left); + height = nrnd(sizey - top); + XCopyArea (dpy, window, window, gc, left, top, width, height, + left + 1, top); + break; + case 4: /* move a block up */ + left = nrnd(sizex); + top = nrnd(sizey - 1) + 1; + width = nrnd(sizex - left); + height = nrnd(sizey - top); + XCopyArea (dpy, window, window, gc, left, top, width, height, + left, top - 1); + break; + default: /* move block down (biased to this) */ + left = nrnd(sizex); + top = nrnd(sizey - 1); + width = nrnd(sizex - left); + height = nrnd(sizey - 1 - top); + XCopyArea (dpy, window, window, gc, left, top, width, height, + left, top + 1); + break; + } + XSync (dpy, True); +#undef nrnd +} + + +char *progclass = "DecayScreen"; + +char *defaults [] = { + "DecayScreen.mappedWhenManaged:false", + "DecayScreen.dontClearWindow: true", + "*delay: 10", + 0 +}; + +XrmOptionDescRec options [] = { + { "-delay", ".delay", XrmoptionSepArg, 0 }, +}; + +int options_size = (sizeof (options) / sizeof (options[0])); + +void +screenhack (dpy, window) + Display *dpy; + Window window; +{ + init_decay (dpy, window); + while (1) { + decay1 (dpy, window); + if (delay) usleep (delay); + } +} diff --git a/hacks/decayscreen.exe_axp b/hacks/decayscreen.exe_axp new file mode 100755 index 0000000000000000000000000000000000000000..2a16d4a39fe3850d571d4dcac2a38422b7a0bd0d GIT binary patch literal 21504 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 G_xWE$x0h-F literal 0 HcmV?d00001 diff --git a/hacks/decayscreen.exe_vax b/hacks/decayscreen.exe_vax new file mode 100755 index 0000000000000000000000000000000000000000..7da33abdeeb84800f9371e8e4610c8b1878a8945 GIT binary patch literal 12288 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 literal 0 HcmV?d00001 diff --git a/hacks/decayscreen.hlp b/hacks/decayscreen.hlp new file mode 100755 index 00000000..94f4db52 --- /dev/null +++ b/hacks/decayscreen.hlp @@ -0,0 +1,46 @@ +1 DECAYSCREEN +Make a screen meltdown. + +SYNOPSIS + decayscreen [-display host:display.screen] [-window] [-root] [-mono] + [-delay usecs] + +2 DESCRIPTION +The decayscreen program creates a melting effect by randomly +shifting rectangles around the screen. + +2 OPTIONS +decayscreen accepts the following options: + + -window +Draw on a newly-created window. This is the default. + + -root +Draw on the root window. + + -mono +If on a color display, pretend we're on a monochrome display. + + -delay microseconds +Slow it down. + +2 ENVIRONMENT + + DISPLAY +to get the default host and display number. + + XENVIRONMENT +to get the name of a resource file that overrides the global resources +stored in the RESOURCE_MANAGER property. + +2 COPYRIGHT +Copyright 1992 by Vivek Khera. 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. + +2 AUTHOR +Vivek Khera , 05-Aug-93; based on code by David Wald, 1988. diff --git a/hacks/decayscreen.man b/hacks/decayscreen.man new file mode 100755 index 00000000..a165e036 --- /dev/null +++ b/hacks/decayscreen.man @@ -0,0 +1,46 @@ +.TH XScreenSaver 1 "05-aug-93" "X Version 11" +.SH NAME +decayscreen - make a screen meltdown. +.SH SYNOPSIS +.B decayscreen +[\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-mono] [\-delay \fIusecs\fP] +.SH DESCRIPTION +The \fIdecayscreen\fP program creates a melting effect by randomly +shifting rectangles around the screen. +.SH OPTIONS +.I decayscreen +accepts the following options: +.TP 8 +.B \-window +Draw on a newly-created window. This is the default. +.TP 8 +.B \-root +Draw on the root window. +.TP 8 +.B \-mono +If on a color display, pretend we're on a monochrome display. +.TP 8 +.B \-delay microseconds +Slow it down. +.SH ENVIRONMENT +.PP +.TP 8 +.B DISPLAY +to get the default host and display number. +.TP 8 +.B XENVIRONMENT +to get the name of a resource file that overrides the global resources +stored in the RESOURCE_MANAGER property. +.SH "SEE ALSO" +X(1), +xscreensaver(1) +.SH COPYRIGHT +Copyright 1992 by Vivek Khera. Permission to use, copy, modify, distribute, +and sell this software and its documentation for any purpose is hereby granted +without fee, provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear in +supporting documentation. No representations are made about the suitability +of this software for any purpose. It is provided "as is" without express or +implied warranty. +.SH AUTHOR +Vivek Khera , 05-Aug-93; based on code by David Wald, 1988. diff --git a/hacks/default.xbm b/hacks/default.xbm new file mode 100755 index 00000000..dcd2ff50 --- /dev/null +++ b/hacks/default.xbm @@ -0,0 +1,1686 @@ +#define logo_width 464 +#define logo_height 435 +static unsigned char logo_bits[] = { +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,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,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,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,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,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,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,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,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,0x60, +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,0,0,0,0,0,0,0,0,0x60,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,0,0,0,0,0,0,0,0,0xf0,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, +0,0,0,0,0,0,0,0,0xf0,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,0,0, +0,0,0,0,0,0,0xf0,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,0,0,0,0, +0,0,0,0,0xf8,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,0,0,0,0,0,0, +0,0,0xf8,0x01,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,0,0,0,0,0,0,0, +0xf8,0x01,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,0,0,0,0,0,0,0,0xfc,0x01, +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,0,0,0,0,0,0,0,0xfc,0x01,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,0,0,0,0,0,0,0,0xfc,0x03,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, +0,0,0,0,0,0,0,0xfc,0x07,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,0,0, +0,0,0,0,0,0xfe,0x07,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,0,0,0,0, +0,0,0,0xfe,0x07,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,0,0,0,0,0,0, +0,0xfe,0x07,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,0,0,0,0,0,0,0,0xff, +0x0f,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,0,0,0,0,0,0,0,0xff,0x0f,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,0,0,0,0,0,0,0x80,0xff,0x0f,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,0,0,0,0,0,0,0x80,0xff,0x1f,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,0, +0,0,0,0,0,0x80,0xff,0x3f,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,0,0,0, +0,0,0,0x80,0xff,0x3f,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,0,0,0,0,0, +0,0x80,0xff,0x3f,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,0,0,0,0,0,0,0xc0, +0xff,0x3f,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,0,0,0,0,0,0,0xe0,0xff,0x7f, +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,0,0,0,0,0,0,0xe0,0xff,0x7f,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,0,0,0,0,0,0,0xe0,0xff,0x7f,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, +0,0,0,0,0,0,0xe0,0xff,0xff,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,0,0, +0,0,0,0,0xf0,0xff,0xff,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,0,0,0,0, +0,0,0xf0,0xff,0xff,0x01,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,0,0,0,0,0, +0xf0,0xff,0xff,0x01,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,0,0,0,0,0,0xf0,0xff, +0xff,0x01,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,0,0,0,0,0,0xf8,0xff,0xff,0x03, +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,0,0,0,0,0,0xfc,0xff,0xff,0x03,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,0,0,0,0,0,0xfc,0xff,0xff,0x03,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, +0,0,0,0,0,0xfc,0xff,0xff,0x07,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,0,0, +0,0,0,0xfc,0xff,0xff,0x07,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,0,0,0,0, +0,0xfe,0xff,0xff,0x07,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,0,0,0,0,0,0xfe, +0xff,0xff,0x0f,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,0,0,0,0,0,0xfe,0xff,0xff, +0x0f,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,0,0,0,0,0,0xff,0xff,0xff,0x0f,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,0,0,0,0,0x80,0xff,0xff,0xff,0x1f,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,0,0,0,0,0x80,0xff,0xff,0xff,0x1f,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,0, +0,0,0,0x80,0xff,0xff,0xff,0x1f,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,0,0,0, +0,0x80,0xff,0xff,0xff,0x1f,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,0,0,0,0,0xc0, +0xff,0xff,0xff,0x3f,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,0,0,0,0,0xc0,0xff,0xff, +0xff,0x7f,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,0,0,0,0,0xc0,0xff,0xff,0xff,0x7f, +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,0,0,0,0,0xc0,0xff,0xff,0xff,0x7f,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,0,0,0,0,0xe0,0xff,0xff,0xff,0xff,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, +0,0,0,0,0xe0,0xff,0xff,0xff,0xff,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,0,0, +0,0,0xf0,0xff,0xff,0xff,0xff,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,0,0,0,0, +0xf0,0xff,0xff,0xff,0xff,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,0,0,0,0,0xf0,0xff, +0xff,0xff,0xff,0x01,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,0,0,0,0xf0,0xff,0xff,0xff, +0xff,0x01,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,0,0,0,0xf8,0xff,0xff,0xff,0xff,0x03, +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,0,0,0,0xf8,0xff,0xff,0xff,0xff,0x03,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,0,0,0,0xf8,0xff,0xff,0xff,0xff,0x03,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, +0,0,0,0xf8,0xff,0xff,0xff,0xff,0x07,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,0,0, +0,0xfc,0xff,0xdf,0xff,0xff,0x07,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,0,0,0,0xfe, +0xff,0xdf,0xff,0xff,0x07,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,0,0,0,0xfe,0xff,0x8f, +0xff,0xff,0x0f,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,0,0,0,0xfe,0xff,0x0f,0xff,0xff, +0x0f,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,0,0,0,0xfe,0xff,0x0f,0xff,0xff,0x0f,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,0,0,0,0xff,0xff,0x07,0xff,0xff,0x1f,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,0,0,0,0xff,0xff,0x07,0xff,0xff,0x1f,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,0, +0,0x80,0xff,0xff,0x07,0xfe,0xff,0x1f,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,0,0,0xc0, +0xff,0xff,0x03,0xfc,0xff,0x3f,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,0,0,0xc0,0xff,0xff, +0x03,0xfc,0xff,0x3f,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,0,0,0xc0,0xff,0xff,0x03,0xfc, +0xff,0x3f,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,0,0,0xe0,0xff,0xff,0x01,0xf8,0xff,0x7f, +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,0,0,0xe0,0xff,0xff,0x01,0xf8,0xff,0x7f,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,0,0,0xe0,0xff,0xff,0,0xf0,0x03,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,0, +0,0,0xe0,0xff,0xff,0,0xf0,0x03,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,0,0,0, +0xe0,0xff,0x1f,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,0,0,0,0,0,0,0xf0,0xff, +0x01,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,0,0,0,0,0,0,0xf0,0x07,0,0, +0x80,0xff,0x03,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,0,0,0,0,0,0xf8,0xff,0xff, +0xff,0xff,0x03,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,0,0,0,0xf8,0xff,0xff,0xff,0xff, +0x03,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,0,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03, +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,0xc0,0xff,0xff,0xff,0x03,0,0,0xe0,0xff,0x7f,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,0xfc,0xff,0xff,0,0,0,0,0,0xe0,0xff,0x07,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,0xe0,0xff, +0x7f,0xfe,0,0,0,0,0,0,0xfc,0x7f,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,0xfe,0xff,0x01,0xfe, +0x01,0,0,0,0,0,0xc0,0xff,0x03,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,0xfe,0xff,0x01,0xfe,0x01,0, +0,0,0,0,0xc0,0xff,0x03,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,0xf0,0xff,0x07,0,0xce,0x07,0,0,0, +0,0,0,0xfe,0x1f,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,0xfe,0x7f,0,0,0x87,0x1f,0,0,0,0,0, +0,0xc0,0xff,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,0xe0,0xff,0x07,0,0x80,0x03,0x3e,0,0,0,0,0,0,0, +0xfe,0x07,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,0xfc, +0x3f,0,0,0x80,0x03,0xf8,0,0,0,0,0,0,0,0xe0,0x3f, +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,0xfc,0x3f,0, +0,0x80,0x03,0xf8,0,0,0,0,0,0,0,0xe0,0x3f,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,0x80,0xff,0x07,0,0,0xc0, +0x01,0xe0,0x01,0,0,0,0,0,0,0,0xff,0x01,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,0xf0,0xff,0x7f,0,0,0xc0,0xfb,0xff, +0x0f,0,0,0,0,0,0,0,0xf0,0x0f,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,0xfe,0xff,0xff,0x07,0,0xc0,0xff,0xff,0x3f,0, +0,0,0,0,0,0,0x80,0xff,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,0x80,0xff,0xc0,0xff,0x7f,0,0xe0,0xff,0xff,0x7f,0,0,0, +0,0,0,0,0,0xfe,0x01,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, +0x80,0xff,0xc0,0xff,0x7f,0,0xe0,0xff,0xff,0x7f,0,0,0,0,0, +0,0,0,0xfe,0x01,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,0xc0,0x1f, +0,0xf8,0xff,0x0f,0xf0,0x0f,0xc0,0xff,0x01,0,0,0,0,0,0, +0,0xf0,0x0f,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,0xe0,0x0f,0,0, +0xff,0x7f,0xf0,0x01,0,0xf8,0x03,0,0,0,0,0,0,0,0xc0, +0x3f,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,0xf0,0x01,0,0,0x80,0xff, +0x7b,0,0,0xe0,0x07,0,0,0,0,0,0,0,0,0xfe,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,0xf8,0,0,0,0,0xfc,0x3f,0, +0,0x80,0x1f,0,0,0,0,0,0,0,0,0xf0,0x03,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,0xf8,0,0,0,0,0xfc,0x3f,0,0,0x80, +0x1f,0,0,0,0,0,0,0,0,0xf0,0x03,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,0x3c,0,0,0,0,0xe0,0x7f,0,0,0,0x7e,0, +0,0,0,0,0,0,0,0xe0,0x0f,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,0x3e,0,0,0,0,0,0xff,0x03,0,0,0x70,0,0,0, +0,0,0,0,0,0x80,0x3f,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,0x80,0x0f, +0,0,0,0,0,0xf0,0x1f,0,0,0,0,0,0,0,0, +0,0,0,0,0xfc,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,0xc0,0x0f,0,0, +0,0,0,0,0xfe,0x01,0,0,0,0,0,0,0,0,0, +0,0,0xf0,0x01,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,0xc0,0x07,0,0,0,0, +0,0,0xf8,0x07,0,0,0,0,0,0,0,0,0,0,0, +0xe0,0x07,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,0xc0,0x07,0,0,0,0,0,0, +0xf8,0x07,0,0,0,0,0,0,0,0,0,0,0,0xe0,0x07, +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,0xe0,0x03,0,0,0,0,0,0,0xe0,0x3f, +0,0,0,0,0,0,0,0,0,0,0,0x80,0x0f,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,0xf0,0x01,0,0,0,0,0,0,0x80,0xff,0,0, +0,0,0,0,0,0,0,0,0,0,0x3f,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,0xf8,0x01,0,0,0,0,0,0,0,0xfc,0x07,0,0,0, +0,0,0,0,0,0,0,0,0x7c,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,0xf8, +0,0,0,0xfe,0x03,0,0,0,0xf0,0x0f,0,0,0,0,0, +0,0,0,0,0,0,0xf8,0x01,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,0xf8,0,0, +0,0xfe,0x03,0,0,0,0xf0,0x0f,0,0,0,0,0,0,0, +0,0,0,0,0xf8,0x01,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,0xfc,0,0,0xf0,0xff, +0x1f,0,0,0,0x80,0x7f,0,0,0,0,0,0,0,0,0, +0,0,0xf0,0x03,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,0x3f,0,0,0xfc,0xff,0x7f,0, +0,0,0,0xfe,0x01,0,0,0,0,0,0,0,0,0,0, +0xc0,0x07,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,0x80,0x1f,0,0,0xff,0x47,0x7f,0,0,0, +0,0xf8,0x0f,0,0,0,0,0,0,0,0,0,0,0x80,0x0f, +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,0xf0,0x07,0x80,0xff,0xff,0x3f,0x7c,0,0,0,0,0xc0, +0xff,0,0,0,0,0,0,0,0,0,0,0,0x3e,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,0xf0,0x07,0x80,0xff,0xff,0x3f,0x7c,0,0,0,0,0xc0,0xff,0, +0,0,0,0,0,0,0,0,0,0,0x3e,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,0xfc, +0x03,0xc0,0xff,0xfe,0xff,0x7d,0,0,0,0,0x80,0xff,0x01,0,0, +0,0,0,0,0,0,0,0,0x7c,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,0xc0,0xff,0,0x40, +0,0,0xfe,0x7f,0,0,0,0,0x80,0xff,0x07,0,0,0,0, +0,0,0,0,0,0,0xf0,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,0xf0,0x3f,0,0,0x80,0x03, +0xf8,0x3f,0,0,0,0,0x80,0xe7,0x1f,0,0,0,0,0,0, +0,0,0,0,0xf0,0x01,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,0xfe,0x0f,0,0,0xf0,0xff,0xff,0x1f, +0,0,0,0,0x80,0xc7,0x7f,0,0,0,0,0,0,0,0, +0,0,0xe0,0x03,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,0xfe,0x0f,0,0,0xf0,0xff,0xff,0x1f,0,0, +0,0,0x80,0xc7,0x7f,0,0,0,0,0,0,0,0,0,0, +0xe0,0x03,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,0xc0,0xff,0x03,0,0,0xf0,0xff,0xff,0x0f,0,0,0,0, +0xc0,0x0f,0xff,0x01,0,0,0,0,0,0,0,0,0,0xc0,0x07, +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, +0xf0,0x7f,0,0,0,0xc0,0xff,0xff,0x01,0,0,0,0,0xc0,0x0f, +0xfc,0x07,0,0,0,0,0,0,0,0,0,0x80,0x0f,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,0xff,0x0f, +0,0,0,0,0,0,0,0,0,0,0,0xc0,0x0f,0xf0,0x0f, +0,0,0,0,0,0,0,0,0,0,0x1f,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,0x80,0xff,0x01,0,0, +0,0,0,0,0,0,0,0,0,0xe0,0x1f,0x80,0x3f,0,0, +0,0,0,0,0,0,0,0,0x1c,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,0xf8,0x0f,0,0,0,0,0, +0,0,0,0,0,0,0,0xf0,0x1c,0,0xfe,0x03,0,0,0, +0,0,0,0,0,0,0x78,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,0xf8,0x0f,0,0,0,0,0,0,0, +0,0,0,0,0,0xf0,0x1c,0,0xfe,0x03,0,0,0,0,0, +0,0,0,0,0x78,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,0xfe,0x01,0,0,0,0,0,0,0,0,0, +0,0,0,0x70,0x1c,0,0xf0,0x07,0,0,0,0,0,0,0, +0,0,0xf0,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,0x3f,0,0,0,0,0,0,0,0,0,0,0,0, +0,0x70,0x38,0,0xc0,0x1f,0,0,0,0,0,0,0,0,0, +0xe0,0x01,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,0x80, +0x0f,0,0,0,0,0,0,0,0,0,0,0,0,0,0x70, +0x78,0,0,0x7f,0,0,0,0,0,0,0,0,0,0xc0,0x03, +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,0xc0,0x03,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x70,0x70,0, +0,0xfc,0,0,0,0,0,0,0,0,0,0xc0,0x07,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,0xc0,0x03,0,0,0, +0,0,0,0,0,0,0,0,0,0,0x70,0x70,0,0,0xfc, +0,0,0,0,0,0,0,0,0,0xc0,0x07,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,0xc0,0x01,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x38,0x70,0,0,0xfe,0x03,0xfe, +0x7f,0,0,0,0,0,0,0,0x0f,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,0xe0,0x01,0,0,0,0,0,0,0, +0,0,0,0,0,0,0x38,0xf0,0,0,0xfe,0x0f,0xff,0xff,0x01, +0,0,0,0,0,0,0x0f,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,0xe0,0x01,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x18,0xe0,0,0x80,0x9f,0xff,0x3f,0xfe,0x03,0,0, +0,0,0,0,0x0f,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,0xe0,0x01,0,0,0,0,0,0,0,0,0,0,0, +0,0,0x1c,0xe0,0,0x80,0x0f,0xff,0x07,0xc0,0x0f,0,0,0,0, +0,0,0x1e,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, +0xe0,0x01,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x1c,0xe0,0,0x80,0x0f,0xff,0x07,0xc0,0x0f,0,0,0,0,0,0, +0x1e,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,0xc0,0xf1, +0x1f,0,0,0,0,0,0,0,0,0,0,0,0,0x0e,0xe0, +0,0xc0,0x07,0xfc,0x01,0,0x1f,0,0,0,0,0,0,0x3e,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,0xc0,0xe1,0xff,0, +0,0,0,0,0,0,0,0,0,0,0,0x0e,0xe0,0x01,0xe0, +0x03,0x60,0,0,0x38,0,0,0,0,0,0,0x3c,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,0xc0,0xc3,0xff,0x01,0,0, +0,0,0,0,0,0,0,0,0,0x07,0xc0,0x01,0xf0,0x01,0, +0xe0,0x03,0xf0,0,0,0,0,0,0,0x38,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,0x80,0x07,0xf0,0x03,0,0,0,0, +0,0,0,0,0,0,0,0x07,0xc0,0x03,0xf8,0,0,0xf8,0x1f, +0xe0,0,0,0,0,0,0,0x38,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,0x80,0x07,0xf0,0x03,0,0,0,0,0,0, +0,0,0,0,0,0x07,0xc0,0x03,0xf8,0,0,0xf8,0x1f,0xe0,0, +0,0,0,0,0,0x38,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,0x80,0x0f,0xc0,0x07,0,0,0,0,0,0,0,0, +0,0,0,0x07,0x80,0x03,0x78,0,0,0xf8,0x7f,0xe0,0x01,0,0, +0,0,0,0x78,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,0x0f,0x80,0x0f,0,0,0,0,0,0,0,0,0,0, +0x80,0x03,0x80,0x03,0x3e,0,0,0x78,0x7e,0xc0,0x03,0,0,0,0, +0,0x78,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, +0x1e,0x1c,0x0f,0,0,0,0,0,0,0,0,0,0,0x80,0xf3, +0x9f,0x03,0x1f,0,0,0,0xf0,0x80,0x03,0,0,0,0,0,0x70, +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,0x1e,0xfe, +0x0f,0,0,0,0,0,0,0,0,0,0,0xc0,0xff,0xff,0x07, +0x0f,0,0,0,0xe0,0,0x07,0,0,0,0,0,0x70,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,0x1e,0xfe,0x0f,0, +0,0,0,0,0,0,0,0,0,0xc0,0xff,0xff,0x07,0x0f,0, +0,0,0xe0,0,0x07,0,0,0,0,0,0x70,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,0x7c,0xfc,0x0f,0,0,0, +0,0,0,0,0,0,0,0xc0,0xff,0xff,0x87,0x07,0,0,0, +0xe0,0,0x07,0,0,0,0,0,0x70,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,0x7c,0xf8,0x0f,0,0,0,0,0, +0,0,0,0,0,0xc0,0x3f,0xf4,0xc7,0x07,0,0,0,0xe0,0, +0x07,0,0,0,0,0,0x70,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,0xf0,0x01,0,0,0,0,0,0,0,0, +0,0,0,0xe0,0x03,0x80,0xe7,0x01,0,0,0,0xe0,0,0x07,0, +0,0,0,0,0xe0,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,0xf0,0x03,0,0,0,0,0,0,0,0,0,0, +0,0xe0,0,0,0xff,0x01,0,0,0,0xe0,0x80,0x07,0,0,0, +0,0,0xe0,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,0xe0,0x03,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0xff,0,0,0,0,0xf8,0x80,0x03,0,0,0,0,0, +0xe0,0x01,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,0xe0, +0x03,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xff,0,0,0,0,0xf8,0x80,0x03,0,0,0,0,0,0xe0,0x01, +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,0x80,0x07,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0x7e,0, +0,0,0,0x7c,0xc0,0x01,0,0,0,0,0,0xe0,0x01,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,0x1f,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0x3e,0,0x80,0x07, +0xe0,0x3f,0xe0,0x01,0,0,0,0,0,0xc0,0x01,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,0x1f,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0x1e,0,0xc0,0xff,0xff,0x0f, +0xe0,0,0,0,0,0,0,0xc0,0x01,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,0x1e,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0x1f,0,0xe0,0xff,0xff,0x03,0xe0,0, +0,0,0,0,0,0xc0,0x01,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,0x1e,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0x1f,0,0xe0,0xff,0xff,0x03,0xe0,0,0,0, +0,0,0,0xc0,0x01,0,0,0,0,0,0,0,0,0,0, +0,0,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0xff,0x3f,0,0x1e,0,0,0,0,0,0,0,0,0,0,0, +0,0,0x80,0x07,0,0x80,0xff,0x7f,0,0xf8,0x01,0,0,0,0, +0,0xc0,0x01,0,0,0,0,0,0,0,0,0,0,0,0, +0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0x03,0x1e,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xc0,0x07,0,0,0,0,0,0xfc,0x07,0,0,0,0,0,0xc0, +0x01,0,0,0,0,0,0,0,0,0,0,0,0,0xe0,0xff, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x1e, +0,0,0,0,0,0,0,0,0,0,0,0,0,0xe0,0x03, +0,0,0,0,0,0xfe,0x0f,0,0,0,0,0,0xc0,0x01,0, +0,0,0,0,0,0,0,0,0,0,0,0x80,0xff,0xff,0xff, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x0f,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xf0,0x01,0,0, +0,0,0x80,0xcf,0x3f,0,0,0xfe,0x01,0,0xc0,0x01,0,0,0, +0,0,0,0,0,0,0,0,0,0x80,0xff,0xff,0xff,0xff,0xff, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x0f,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xf0,0x01,0,0,0,0, +0x80,0xcf,0x3f,0,0,0xfe,0x01,0,0xc0,0x01,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x0f,0,0,0,0,0,0, +0,0,0,0,0,0,0,0xf0,0,0,0,0,0,0xe0,0xe7, +0xff,0,0,0xfe,0x0f,0,0xc0,0xe1,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0xff,0xff,0xff,0xff,0x03,0,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0xff,0xff,0xff,0xff,0xff,0x03,0x0f,0,0,0,0,0,0,0,0, +0,0,0,0,0,0x7c,0,0,0,0,0xf0,0xff,0xf9,0xff,0x01, +0,0xe0,0x1f,0,0xc0,0xe1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0xff,0xff,0x03,0,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0xff,0xff,0xff,0x03,0x0f,0,0,0,0,0,0,0,0,0,0, +0,0,0,0x7e,0,0,0,0xc0,0xff,0x7f,0xfe,0xe1,0x07,0,0xc0, +0xff,0,0xc0,0xe1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0x01,0,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0xff,0x03,0x07,0,0,0,0,0,0,0,0,0,0,0,0, +0,0x1e,0,0,0,0xfc,0xff,0x1f,0xff,0x81,0x0f,0,0x80,0xf1,0x03, +0xc0,0xe1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0,0, +0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03, +0x07,0,0,0,0,0,0,0,0,0,0,0,0,0,0x1e, +0,0,0,0xfc,0xff,0x1f,0xff,0x81,0x0f,0,0x80,0xf1,0x03,0xc0,0xe1, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0,0,0xc0,0xff, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x81,0x0f,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x1f,0,0, +0,0xff,0x3f,0x80,0xff,0,0x1f,0,0x80,0xc1,0x07,0xc0,0xe1,0xff,0xff, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0,0,0,0xff,0xff,0xff, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc1,0xff,0x3f,0,0, +0,0,0,0,0,0,0,0,0,0x80,0x0f,0,0x03,0xc0,0x3f, +0,0xe0,0x7f,0,0x7e,0,0x80,0x01,0x1f,0xe0,0xe1,0xff,0xff,0xff,0xff, +0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0,0,0,0xfc,0xff,0xff,0xff,0xff, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0xff,0xff,0x03,0,0,0, +0,0,0,0,0,0,0,0x80,0x0f,0x80,0x07,0xf0,0x07,0,0xf0, +0x3f,0,0xf8,0,0x80,0x01,0x3c,0xe0,0xe1,0xff,0xff,0xff,0xff,0xff,0xff, +0xff,0xff,0xff,0xff,0x03,0,0,0,0xf8,0xff,0xff,0xff,0xff,0xff,0xff, +0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0xff,0xff,0x7f,0,0,0,0,0, +0,0,0,0,0,0xc0,0x03,0x80,0xff,0xff,0x01,0,0xfc,0x1f,0, +0xf0,0x01,0xc0,0x01,0x38,0xe0,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0xff,0xff,0,0,0,0,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0xff,0xff,0xff,0x7f,0xf0,0,0xf8,0xff,0x07,0,0,0,0,0,0, +0,0,0,0xe0,0x03,0,0xfe,0x1f,0,0x80,0xbf,0x07,0,0x80,0x07, +0xc0,0x01,0xe0,0xf1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f, +0,0,0,0,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0xff,0x7f,0xf0,0,0xf8,0xff,0x07,0,0,0,0,0,0,0,0, +0,0xe0,0x03,0,0xfe,0x1f,0,0x80,0xbf,0x07,0,0x80,0x07,0xc0,0x01, +0xe0,0xf1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0,0, +0,0,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, +0xf0,0,0,0xfe,0x7f,0,0,0,0,0,0,0,0,0,0xf0, +0x01,0,0xf8,0x03,0,0xc0,0xcf,0x03,0,0x80,0x1f,0xf0,0x01,0xe0,0x71, +0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0,0,0,0, +0,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xf0,0, +0,0xe0,0xff,0x03,0,0,0,0,0,0,0,0,0xf8,0,0, +0,0,0,0xe0,0xe7,0x03,0,0,0x7e,0xff,0,0xc0,0x73,0xf0,0xff, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0,0,0,0,0,0xfc, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xf0,0,0,0, +0xfc,0x1f,0,0,0,0,0,0,0,0,0x78,0,0,0,0, +0,0xf8,0xf3,0,0,0,0xfc,0x7f,0,0,0x7f,0xf0,0xff,0xff,0xff, +0xff,0xff,0xff,0xff,0xff,0xff,0,0,0,0,0,0,0xf0,0xff,0xff, +0xff,0x1f,0,0,0,0,0,0,0,0xf0,0,0,0,0xe0,0xff, +0,0,0,0,0,0,0,0,0x3c,0,0,0,0,0,0x7c, +0xf8,0,0,0,0xf8,0xff,0xff,0xff,0x7f,0xf0,0xff,0xff,0xff,0xff,0xff, +0xff,0xff,0xff,0x7f,0,0,0,0,0,0,0xf0,0xff,0xff,0xff,0x1f, +0,0,0,0,0,0,0,0xf0,0,0,0,0xe0,0xff,0,0, +0,0,0,0,0,0,0x3c,0,0,0,0,0,0x7c,0xf8,0, +0,0,0xf8,0xff,0xff,0xff,0x7f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0xff,0x7f,0,0,0,0,0,0,0xe0,0xff,0xff,0xff,0x3f,0,0, +0,0,0,0,0,0x70,0,0,0,0x80,0xff,0x0f,0,0,0, +0,0,0,0,0x3e,0,0,0,0,0,0x7f,0x7c,0,0,0, +0xe0,0xff,0xff,0xff,0x7f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f, +0,0,0,0,0,0,0x80,0xff,0xff,0xff,0xff,0,0,0,0, +0,0,0,0x78,0,0,0,0,0xfe,0x7f,0,0,0,0,0, +0,0,0x1e,0,0,0,0,0xc0,0x1f,0x3e,0,0,0,0xc0,0xff, +0xff,0xff,0x7f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0,0, +0,0,0,0,0,0xff,0xff,0xff,0xff,0x01,0,0,0,0,0, +0,0x7c,0,0,0,0,0xf0,0xff,0x03,0,0,0,0,0,0, +0x0f,0,0,0,0,0xe0,0x07,0x1f,0,0,0,0x80,0x0f,0,0, +0x3c,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0,0,0,0, +0,0,0,0xfc,0xff,0xff,0xff,0x07,0,0,0,0,0,0,0x3c, +0,0,0,0,0,0xfe,0x0f,0,0,0,0,0,0,0x0f,0, +0,0,0,0xfc,0x83,0x0f,0,0,0,0,0x0f,0,0,0x38,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0,0,0,0,0,0, +0,0xfc,0xff,0xff,0xff,0x07,0,0,0,0,0,0,0x3c,0,0, +0,0,0,0xfe,0x0f,0,0,0,0,0,0,0x0f,0,0,0, +0,0xfc,0x83,0x0f,0,0,0,0,0x0f,0,0,0x38,0xf0,0xff,0xff, +0xff,0xff,0xff,0xff,0xff,0xff,0x01,0,0,0,0,0,0,0,0xf0, +0xff,0xff,0xff,0x0f,0,0,0,0,0,0,0x1e,0,0,0,0xf8, +0xff,0xff,0x3f,0,0,0,0,0,0x80,0x07,0,0,0,0,0xff, +0x80,0x07,0,0,0,0,0x3e,0,0,0x38,0,0,0,0,0, +0xff,0xff,0xff,0x7f,0,0,0,0,0,0,0,0,0xc0,0xff,0xff, +0xff,0x7f,0,0,0,0,0,0,0x0f,0,0,0,0xff,0xff,0xff, +0xff,0x03,0,0,0,0,0xe0,0x01,0,0,0,0xe0,0x1f,0xe0,0x03, +0,0,0,0,0x78,0,0,0x1c,0,0,0,0,0xe0,0xff,0xff, +0xff,0x0f,0,0,0,0,0,0,0,0,0,0xff,0xff,0xff,0xff, +0,0,0,0,0,0x80,0x0f,0,0,0,0xff,0x3f,0xe0,0xff,0x0f, +0,0,0,0,0xf0,0x01,0,0,0,0xf8,0x07,0xf0,0x01,0,0, +0,0,0xf0,0x01,0,0x1e,0,0,0,0,0xf0,0xff,0xff,0xff,0x07, +0,0,0,0,0,0,0,0,0,0xfe,0xff,0xff,0xff,0x03,0, +0,0,0,0x80,0x07,0,0,0,0xe0,0xff,0x01,0xfe,0x3f,0,0, +0,0,0xf0,0,0,0,0,0xfe,0x01,0xf8,0,0,0,0,0, +0xc0,0x03,0,0x0e,0,0,0,0,0xfc,0xff,0xff,0xff,0x01,0,0, +0,0,0,0,0,0,0,0xfe,0xff,0xff,0xff,0x03,0,0,0, +0,0x80,0x07,0,0,0,0xe0,0xff,0x01,0xfe,0x3f,0,0,0,0, +0xf0,0,0,0,0,0xfe,0x01,0xf8,0,0,0,0,0,0xc0,0x03, +0,0x0e,0,0,0,0,0xfc,0xff,0xff,0xff,0x01,0,0,0,0, +0,0,0,0,0,0xf8,0xff,0xff,0xff,0x07,0,0,0,0,0x80, +0x07,0,0,0,0,0xf8,0x07,0xc0,0xff,0x01,0,0,0,0xf8,0, +0,0,0x80,0x7f,0,0x78,0,0,0,0,0,0xc0,0x0f,0,0x0e, +0,0,0,0,0xff,0xff,0xff,0xff,0,0,0,0,0,0,0, +0,0,0,0xf0,0xff,0xff,0xff,0x1f,0,0,0,0,0xc0,0xe3,0xff, +0xff,0,0,0xc0,0x1f,0x80,0xff,0x03,0,0,0,0x3c,0,0,0, +0xe0,0x1f,0,0x3e,0,0,0,0,0,0,0x0f,0,0x07,0,0, +0,0x80,0xff,0xff,0xff,0x1f,0,0,0,0,0,0,0,0,0, +0,0xc0,0xff,0xff,0xff,0x7f,0,0,0,0,0xc0,0xfb,0xff,0xff,0x0f, +0,0,0x3e,0x80,0xf3,0x1f,0,0,0,0x3e,0,0,0,0xf8,0x07, +0,0x1e,0,0,0,0,0,0,0x1e,0,0x07,0,0,0,0xe0, +0xff,0xff,0xff,0x0f,0,0,0,0,0,0,0,0,0,0,0, +0xff,0xff,0xff,0xff,0,0,0,0,0xc0,0xff,0xff,0xff,0xff,0,0, +0x7c,0xc0,0x81,0xff,0,0,0,0x1f,0,0,0,0xff,0x01,0,0x0f, +0,0,0,0,0,0,0x7c,0x80,0x07,0,0,0,0xf0,0xff,0xff, +0xff,0x03,0,0,0,0,0,0,0,0,0,0,0,0xfc,0xff, +0xff,0xff,0x03,0,0,0,0xc0,0x7f,0,0xe0,0xff,0x3f,0,0xf0,0xc0, +0x01,0xfe,0x03,0,0,0x0f,0,0,0xc0,0x7f,0,0xc0,0x07,0,0, +0,0,0,0,0xf0,0xc0,0x03,0,0,0,0xfc,0xff,0xff,0xff,0, +0,0,0,0,0,0,0,0,0,0,0,0xfc,0xff,0xff,0xff, +0x03,0,0,0,0xc0,0x7f,0,0xe0,0xff,0x3f,0,0xf0,0xc0,0x01,0xfe, +0x03,0,0,0x0f,0,0,0xc0,0x7f,0,0xc0,0x07,0,0,0,0, +0,0,0xf0,0xc0,0x03,0,0,0,0xfc,0xff,0xff,0xff,0,0,0, +0,0,0,0,0,0,0,0,0,0xf8,0xff,0xff,0xff,0x07,0, +0,0,0xc0,0x0f,0,0,0xfc,0xff,0x03,0xc0,0xe3,0x01,0xf0,0x07,0, +0x80,0x07,0,0,0xf0,0x1f,0,0xc0,0x07,0,0,0,0,0,0, +0xf0,0xc1,0x01,0,0,0,0xff,0xff,0xff,0x7f,0,0,0,0,0, +0,0,0,0,0,0,0,0xe0,0xff,0xff,0xff,0x1f,0,0,0, +0xc0,0x07,0,0,0,0xfc,0xff,0,0xf7,0,0,0x3f,0,0xc0,0x03, +0,0,0xff,0,0,0xe0,0x01,0,0,0,0,0,0,0xc0,0xe3, +0x01,0,0,0xc0,0xff,0xff,0xff,0x0f,0,0,0,0,0,0,0, +0,0,0,0,0,0x80,0xff,0xff,0xff,0xff,0,0,0,0xc0,0x01, +0,0,0,0xc0,0xff,0x07,0x7f,0,0,0xfc,0,0xe0,0x03,0,0xe0, +0x3f,0,0,0xf0,0x01,0,0,0,0,0,0,0x80,0xff,0,0, +0,0xf0,0xff,0xff,0xff,0x07,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xfe,0xff,0xff,0xff,0,0,0,0xc0,0x01,0,0, +0,0,0xfe,0x7f,0x7f,0,0,0xf8,0x01,0xe0,0x01,0,0xfc,0x07,0, +0,0xf8,0,0,0,0,0,0,0,0,0xff,0,0,0,0xfc, +0xff,0xff,0xff,0x01,0,0,0,0,0,0,0,0,0,0,0, +0,0,0xfe,0xff,0xff,0xff,0,0,0,0xc0,0x01,0,0,0,0, +0xfe,0x7f,0x7f,0,0,0xf8,0x01,0xe0,0x01,0,0xfc,0x07,0,0,0xf8, +0,0,0,0,0,0,0,0,0xff,0,0,0,0xfc,0xff,0xff, +0xff,0x01,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xfc,0xff,0xff,0xff,0x03,0,0,0xc0,0x03,0,0,0,0,0xe0,0xff, +0x3f,0,0,0xf0,0x07,0xf0,0,0,0xff,0x03,0,0,0x7c,0,0, +0,0,0,0,0,0,0x7e,0,0,0,0xff,0xff,0xff,0x7f,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0xf0,0xff, +0xff,0xff,0x0f,0,0,0xc0,0x03,0,0,0,0,0,0xfe,0x3f,0, +0,0xc0,0x3f,0xf8,0,0xf8,0x3f,0,0,0,0x3c,0,0,0,0, +0,0,0,0,0x3c,0,0,0x80,0xff,0xff,0xff,0x3f,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xc0,0xff,0xff,0xff, +0x3f,0,0,0xc0,0x03,0,0,0,0,0,0xf0,0xff,0x0f,0,0, +0x7f,0x7c,0,0xfe,0x07,0,0,0,0x1e,0,0,0,0,0,0, +0,0,0x1e,0,0,0xe0,0xff,0xff,0xff,0x0f,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0x80,0xff,0xff,0xff,0x7f,0, +0,0x80,0x07,0,0,0,0,0,0,0xff,0x7f,0,0,0xfc,0x3e, +0xe0,0x7f,0,0,0,0,0x1f,0,0,0,0,0,0,0,0, +0x1f,0,0,0xf8,0xff,0xff,0xff,0x03,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0x80,0xff,0xff,0xff,0x7f,0,0,0x80, +0x07,0,0,0,0,0,0,0xff,0x7f,0,0,0xfc,0x3e,0xe0,0x7f, +0,0,0,0,0x1f,0,0,0,0,0,0,0,0,0x1f,0, +0,0xf8,0xff,0xff,0xff,0x03,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xfe,0xff,0xff,0xff,0x01,0,0x80,0x0f,0, +0,0,0,0,0,0xf0,0xff,0x1f,0,0xf0,0x1f,0xfe,0x0f,0,0, +0,0x80,0x0f,0,0,0,0,0,0,0,0,0x07,0,0,0xfc, +0xff,0xff,0xff,0x01,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xf8,0xff,0xff,0xff,0x03,0,0,0x0f,0,0,0, +0,0,0,0,0xfc,0xff,0x3f,0xc0,0xff,0xff,0,0,0,0,0xc0, +0x07,0,0,0,0,0,0,0,0x80,0x03,0,0,0xff,0xff,0xff, +0x3f,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0xf0,0xff,0xff,0xff,0x0f,0,0,0x1e,0,0,0,0,0, +0,0,0,0xfe,0xff,0xff,0xff,0x1f,0,0,0,0,0xe0,0x03,0, +0,0,0,0,0,0,0xe0,0x03,0,0xc0,0xff,0xff,0xff,0x1f,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x80,0xff,0xff,0xff,0x7f,0,0,0x3c,0,0,0,0,0,0,0, +0,0,0xfc,0xff,0xff,0x03,0,0,0,0,0xf0,0x01,0,0,0, +0,0,0,0,0xf8,0,0,0xf8,0xff,0xff,0xff,0x03,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0x80,0xff, +0xff,0xff,0x7f,0,0,0x3c,0,0,0,0,0,0,0,0,0, +0xfc,0xff,0xff,0x03,0,0,0,0,0xf0,0x01,0,0,0,0,0, +0,0,0xf8,0,0,0xf8,0xff,0xff,0xff,0x03,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xfe,0xff,0xff, +0xff,0,0,0x78,0,0,0,0,0,0,0,0,0,0,0xf8, +0xff,0x1f,0,0,0,0,0xf0,0,0,0,0,0,0,0,0, +0x7c,0,0,0xfc,0xff,0xff,0xff,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xfc,0xff,0xff,0xff,0x03, +0,0xf0,0,0,0,0,0,0,0,0,0,0,0,0xfe,0x7f, +0,0,0,0,0x7c,0,0,0,0,0,0,0,0,0x3e,0, +0,0xff,0xff,0xff,0x7f,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xf0,0xff,0xff,0xff,0x07,0,0xe0, +0x01,0,0,0,0,0,0,0,0,0,0,0x7c,0xfe,0,0, +0,0,0x3c,0,0,0,0,0,0,0,0x80,0x1f,0,0xc0,0xff, +0xff,0xff,0x1f,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xe0,0xff,0xff,0xff,0x1f,0,0xc0,0x03,0, +0,0,0,0,0,0,0,0,0,0x78,0xf8,0x03,0,0,0, +0x1e,0,0,0,0,0,0,0,0xc0,0x07,0,0xe0,0xff,0xff,0xff, +0x07,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x80,0xff,0xff,0xff,0x7f,0,0x80,0x07,0,0,0, +0,0,0,0,0,0,0,0x70,0xe0,0x0f,0,0,0,0x0f,0, +0,0,0,0,0,0,0xf0,0x03,0,0xf8,0xff,0xff,0xff,0x03,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0x80,0xff,0xff,0xff,0x7f,0,0x80,0x07,0,0,0,0,0, +0,0,0,0,0,0x70,0xe0,0x0f,0,0,0,0x0f,0,0,0, +0,0,0,0,0xf0,0x03,0,0xf8,0xff,0xff,0xff,0x03,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0xff,0xff,0xff,0xff,0,0x80,0x0f,0,0,0,0,0,0,0, +0,0,0,0x70,0,0x3f,0,0,0x80,0x0f,0,0,0,0,0, +0,0,0xf8,0x01,0,0xfe,0xff,0xff,0x7f,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xfc, +0xff,0xff,0xff,0x03,0,0x1f,0,0,0,0,0,0,0,0,0, +0,0x70,0,0xfe,0,0,0xc0,0x03,0,0,0,0,0,0,0, +0x7e,0,0x80,0xff,0xff,0xff,0x3f,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xf0,0xff,0xff, +0xff,0x0f,0,0x3e,0,0,0,0,0,0,0,0,0,0,0x70, +0,0xf8,0x01,0,0xc0,0x03,0,0,0,0,0,0,0,0x3e,0, +0xc0,0xff,0xff,0xff,0x0f,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xc0,0xff,0xff,0xff,0x3f, +0,0xf8,0,0,0,0,0,0,0,0,0,0,0x70,0,0x80, +0x0f,0,0xf0,0x01,0,0,0,0,0,0,0xc0,0x0f,0,0xf8,0xff, +0xff,0xff,0x01,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xc0,0xff,0xff,0xff,0x3f,0,0xf8, +0,0,0,0,0,0,0,0,0,0,0x70,0,0x80,0x0f,0, +0xf0,0x01,0,0,0,0,0,0,0xc0,0x0f,0,0xf8,0xff,0xff,0xff, +0x01,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0xff,0xff,0xff,0xff,0,0xe0,0x01,0, +0,0,0,0,0,0,0,0,0x70,0,0,0x3e,0,0xf0,0, +0,0,0,0,0,0,0xe0,0x07,0,0xfe,0xff,0xff,0xff,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xfc,0xff,0xff,0xff,0x03,0xc0,0x03,0,0,0, +0,0,0,0,0,0,0x70,0,0,0xfc,0,0x78,0,0,0, +0,0,0,0,0xf8,0x01,0x80,0xff,0xff,0xff,0x3f,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0xf0,0xff,0xff,0xff,0x0f,0xc0,0x07,0,0,0,0,0, +0,0,0,0,0x78,0,0,0xe0,0x03,0x3c,0,0,0,0,0, +0,0,0x7c,0,0xe0,0xff,0xff,0xff,0x0f,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0xc0,0xff,0xff,0xff,0x1f,0,0x0f,0,0,0,0,0,0,0, +0,0,0x7c,0,0,0xc0,0x1f,0x1e,0,0,0,0,0,0,0, +0x3e,0,0xf0,0xff,0xff,0xff,0x03,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xc0, +0xff,0xff,0xff,0x1f,0,0x0f,0,0,0,0,0,0,0,0,0, +0x7c,0,0,0xc0,0x1f,0x1e,0,0,0,0,0,0,0,0x3e,0, +0xf0,0xff,0xff,0xff,0x03,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x80,0xff,0xff, +0xff,0x7f,0,0x1e,0,0,0,0,0,0,0,0,0,0x7c,0, +0,0,0x3f,0x0f,0,0,0,0,0,0,0x80,0x0f,0,0xfc,0xff, +0xff,0xff,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xfe,0xff,0xff,0xff, +0x01,0x7c,0,0,0,0,0,0,0,0,0,0x3c,0,0,0, +0xfc,0x0f,0,0,0,0,0,0,0xe0,0x07,0,0xff,0xff,0xff,0x3f, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xfc,0xff,0xff,0xff,0x03,0x78, +0,0,0,0,0,0,0,0,0,0x3c,0,0,0,0xf8,0x07, +0,0,0,0,0,0,0xf0,0x01,0xc0,0xff,0xff,0xff,0x1f,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0xf0,0xff,0xff,0xff,0x07,0xf0,0x01,0, +0,0,0,0,0,0,0,0x1c,0,0,0,0xfc,0x03,0,0, +0,0,0,0,0xf8,0,0xf0,0xff,0xff,0xff,0x07,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xf0,0xff,0xff,0xff,0x07,0xf0,0x01,0,0,0, +0,0,0,0,0,0x1c,0,0,0,0xfc,0x03,0,0,0,0, +0,0,0xf8,0,0xf0,0xff,0xff,0xff,0x07,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0xe0,0xff,0xff,0xff,0x1f,0xe0,0x03,0,0,0,0,0, +0,0,0,0x1c,0,0,0,0xfc,0x01,0,0,0,0,0,0, +0x7e,0,0xf8,0xff,0xff,0xff,0x01,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,0xff,0xff,0xff,0xff,0x80,0x0f,0,0,0,0,0,0,0, +0,0x1e,0,0,0,0xff,0,0,0,0,0,0,0x80,0x0f,0, +0xfe,0xff,0xff,0x3f,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, +0xfc,0xff,0xff,0xff,0x01,0x1f,0,0,0,0,0,0,0,0,0x0e, +0,0,0x80,0x7f,0,0,0,0,0,0,0xc0,0x07,0x80,0xff,0xff, +0xff,0x0f,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,0xf8,0xff, +0xff,0xff,0x07,0x3e,0,0,0,0,0,0,0,0,0x0e,0,0, +0xc0,0x3f,0,0,0,0,0,0,0xf0,0x01,0xe0,0xff,0xff,0xff,0x07, +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,0xe0,0xff,0xff,0xff, +0x0f,0x7c,0,0,0,0,0,0,0,0,0x0f,0,0,0xe0,0x3f, +0,0,0,0,0,0,0xf8,0x01,0xf8,0xff,0xff,0xff,0x01,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,0xe0,0xff,0xff,0xff,0x0f,0x7c, +0,0,0,0,0,0,0,0,0x0f,0,0,0xe0,0x3f,0,0, +0,0,0,0,0xf8,0x01,0xf8,0xff,0xff,0xff,0x01,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,0xc0,0xff,0xff,0xff,0x3f,0xf0,0,0, +0,0,0,0,0,0,0x0f,0,0,0xf0,0x1f,0,0,0,0, +0,0,0x7e,0,0xfc,0xff,0xff,0xff,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,0xfe,0xff,0xff,0x7f,0xe0,0x01,0,0,0, +0,0,0,0x80,0x07,0,0,0xfc,0x1f,0,0,0,0,0,0, +0x3e,0,0xff,0xff,0xff,0x3f,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,0xfc,0xff,0xff,0xff,0xe0,0x03,0,0,0,0,0, +0,0x80,0x07,0,0,0xfc,0x0f,0,0,0,0,0,0,0x1f,0xc0, +0xff,0xff,0xff,0x1f,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,0xf0,0xff,0xff,0xff,0xc1,0x07,0,0,0,0,0,0,0xc0, +0x03,0,0,0xfe,0x07,0,0,0,0,0,0xc0,0x0f,0xf0,0xff,0xff, +0xff,0x07,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, +0xf0,0xff,0xff,0xff,0xc1,0x07,0,0,0,0,0,0,0xc0,0x03,0, +0,0xfe,0x07,0,0,0,0,0,0xc0,0x0f,0xf0,0xff,0xff,0xff,0x07, +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,0xf0,0xff, +0xff,0xff,0x83,0x0f,0,0,0,0,0,0,0xc0,0x01,0,0,0xff, +0x07,0,0,0,0,0,0xc0,0x07,0xf8,0xff,0xff,0xff,0x03,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,0x80,0xff,0xff,0xff, +0x0f,0x1e,0,0,0,0,0,0,0xe0,0x01,0,0xc0,0xef,0x03,0, +0,0,0,0,0xe0,0x01,0xff,0xff,0xff,0x7f,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,0xfe,0xff,0xff,0x0f,0x1c, +0,0,0,0,0,0,0xf0,0,0,0xe0,0xf3,0x01,0,0,0, +0,0,0xf0,0x80,0xff,0xff,0xff,0x1f,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,0xfc,0xff,0xff,0x1f,0x38,0,0, +0,0,0,0,0x70,0,0,0xf0,0xf9,0,0,0,0,0,0, +0x78,0xe0,0xff,0xff,0xff,0x07,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,0xfc,0xff,0xff,0x1f,0x38,0,0,0,0, +0,0,0x70,0,0,0xf0,0xf9,0,0,0,0,0,0,0x78,0xe0, +0xff,0xff,0xff,0x07,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,0xf0,0xff,0xff,0x7f,0xf0,0,0,0,0,0,0, +0x78,0,0,0x78,0x7c,0,0,0,0,0,0,0x3c,0xf0,0xff,0xff, +0xff,0x03,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,0x80,0xff,0xff,0xff,0xe0,0,0,0,0,0,0,0x78,0, +0,0x7e,0x7c,0,0,0,0,0,0,0x3c,0xf8,0xff,0xff,0xff,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,0xff,0xff,0xff,0xe0,0x01,0,0,0,0,0,0x3c,0,0,0x3e, +0x3e,0,0,0,0,0,0,0x1f,0xfe,0xff,0xff,0x7f,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,0xfe, +0xff,0xff,0xc1,0x03,0,0,0,0,0,0x3c,0,0,0x0f,0x1e,0, +0,0,0,0,0,0x0f,0xfe,0xff,0xff,0x1f,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,0xfe,0xff,0xff, +0xc1,0x03,0,0,0,0,0,0x3c,0,0,0x0f,0x1e,0,0,0, +0,0,0,0x0f,0xfe,0xff,0xff,0x1f,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,0xfc,0xff,0xff,0x83,0x07, +0,0,0,0,0,0x1e,0,0xc0,0x07,0x0f,0,0,0,0,0, +0x80,0x07,0xff,0xff,0xff,0x0f,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,0xf0,0xff,0xff,0x07,0x0f,0,0, +0,0,0,0x0f,0,0xe0,0x83,0x0f,0,0,0,0,0,0x80,0xc7, +0xff,0xff,0xff,0x01,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,0xc0,0xff,0xff,0x0f,0x0f,0,0,0,0, +0,0x07,0,0xf0,0x81,0x07,0,0,0,0,0,0xc0,0xc3,0xff,0xff, +0xff,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,0xff,0xff,0x1f,0x1c,0,0,0,0,0x80,0x03, +0,0x7c,0xc0,0x03,0,0,0,0,0,0xe0,0xe1,0xff,0xff,0x7f,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,0xfe,0xff,0x3f,0x3c,0,0,0,0,0xc0,0x03,0,0x3f, +0xe0,0x01,0,0,0,0,0,0xe0,0xe0,0xff,0xff,0x1f,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,0xfe,0xff,0x3f,0x3c,0,0,0,0,0xc0,0x03,0,0x3f,0xe0,0x01, +0,0,0,0,0,0xe0,0xe0,0xff,0xff,0x1f,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,0xf8, +0xff,0x3f,0x3c,0,0,0,0,0xe0,0x01,0x80,0x1f,0xe0,0x01,0,0, +0,0,0,0xf0,0xe0,0xff,0xff,0x07,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,0xf8,0xff,0x3f, +0x38,0,0,0,0,0xe0,0,0xe0,0x07,0xf0,0,0,0,0,0, +0,0x78,0xf8,0xff,0xff,0x01,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,0xf8,0xff,0x3f,0x38,0, +0,0,0,0xf0,0,0xf0,0x03,0x70,0,0,0,0,0,0,0x78, +0xf8,0xff,0xff,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,0xf8,0xff,0x3f,0x38,0,0,0, +0,0x70,0,0xfe,0,0x38,0,0,0,0,0,0,0x3c,0xfc,0xff, +0x3f,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,0xf8,0xff,0x3f,0x38,0,0,0,0,0x70, +0,0xfe,0,0x38,0,0,0,0,0,0,0x3c,0xfc,0xff,0x3f,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,0xf8,0xff,0x3f,0x38,0,0,0,0,0x38,0x80,0x3f, +0,0x3c,0,0,0,0,0,0,0x1c,0xfc,0xff,0x3f,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,0xfc,0xff,0x3f,0x38,0,0,0,0,0x1c,0xc0,0x0f,0,0x1c, +0,0,0,0,0,0,0x1e,0xfc,0xff,0x3f,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, +0xfc,0xff,0x1f,0x38,0,0,0,0,0x1e,0xf0,0x03,0,0x1e,0,0, +0,0,0,0,0x1e,0xfc,0xff,0x3f,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,0xfe,0xff, +0x1f,0x38,0,0,0,0,0x0f,0x7f,0,0,0x0f,0,0,0,0, +0,0,0x0f,0xfc,0xff,0x3f,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,0xfe,0xff,0x1f,0x38, +0,0,0,0,0x0f,0x7f,0,0,0x0f,0,0,0,0,0,0, +0x0f,0xfc,0xff,0x3f,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,0xfe,0xff,0x1f,0x38,0,0, +0,0,0xe7,0x3f,0,0,0x07,0,0,0,0,0,0,0x0f,0xfc, +0xff,0x7f,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,0xff,0xff,0x0f,0x38,0,0,0,0x80, +0xfb,0x0f,0,0x80,0x03,0,0,0,0,0,0,0x07,0xfc,0xff,0x7f, +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,0xff,0xff,0x07,0x38,0,0,0,0xc0,0xff,0x01, +0,0xc0,0x03,0,0,0,0,0,0x80,0x07,0xf8,0xff,0xff,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,0xff,0xff,0x07,0x38,0,0,0,0xe0,0x3f,0,0,0xc0, +0x01,0,0,0,0,0,0xc0,0x03,0xf8,0xff,0xff,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,0xff,0xff,0x07,0x38,0,0,0,0xe0,0x3f,0,0,0xc0,0x01,0, +0,0,0,0,0xc0,0x03,0xf8,0xff,0xff,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,0x80,0xff, +0xff,0x07,0x38,0,0,0,0xe0,0x0f,0,0,0xe0,0,0,0,0, +0,0,0xc0,0x03,0xf8,0xff,0xff,0x01,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,0x80,0xff,0xff,0x03, +0x38,0,0,0,0xf0,0x03,0,0,0xf0,0,0,0,0,0,0, +0xe0,0x01,0xf8,0xff,0xff,0x01,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,0xc0,0xff,0xff,0x03,0x38,0, +0,0,0x70,0,0,0,0x70,0,0,0,0,0,0,0xe0,0x01, +0xf0,0xff,0xff,0x01,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,0xc0,0xff,0xff,0x01,0x38,0,0,0, +0,0,0,0,0x78,0,0,0,0,0,0,0xe0,0,0xf0,0xff, +0xff,0x03,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,0xe0,0xff,0xff,0,0x38,0,0,0,0,0, +0,0,0x38,0,0,0,0,0,0,0xf0,0,0xf0,0xff,0xff,0x03, +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,0xe0,0xff,0xff,0,0x38,0,0,0,0,0,0,0, +0x38,0,0,0,0,0,0,0xf0,0,0xf0,0xff,0xff,0x03,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,0xe0,0xff,0xff,0,0x38,0,0,0,0,0,0,0,0x3c,0, +0,0,0,0,0,0xf0,0,0xe0,0xff,0xff,0x07,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,0xe0, +0xff,0xff,0,0x38,0,0,0,0,0,0,0,0x1e,0,0,0, +0,0,0,0x78,0,0xe0,0xff,0xff,0x07,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,0xf0,0xff,0x7f, +0,0x18,0,0,0,0,0,0,0,0x1e,0,0,0,0,0, +0,0x78,0,0xc0,0xff,0xff,0x0f,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,0xf0,0xff,0x7f,0,0x18, +0,0,0,0,0,0,0,0x0f,0,0,0,0,0,0,0x3c, +0,0xc0,0xff,0xff,0x0f,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,0xf0,0xff,0x7f,0,0x18,0,0, +0,0,0,0,0,0x0f,0,0,0,0,0,0,0x3c,0,0xc0, +0xff,0xff,0x0f,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,0xf8,0xff,0x7f,0,0x1c,0,0,0,0, +0,0,0x80,0x07,0,0,0,0,0,0,0x3c,0,0x80,0xff,0xff, +0x0f,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,0xf8,0xff,0x3f,0,0x1c,0,0,0,0,0,0, +0x80,0x07,0,0,0,0,0,0,0x1e,0,0x80,0xff,0xff,0x1f,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,0xfc,0xff,0x1f,0,0x1c,0,0,0,0,0,0,0xc0,0x03, +0,0,0,0,0,0,0x1e,0,0x80,0xff,0xff,0x1f,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, +0xfc,0xff,0x1f,0,0x1c,0,0,0,0,0,0,0xc0,0x03,0,0, +0,0,0,0,0x1f,0,0,0xff,0xff,0x1f,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,0xfc,0xff, +0x1f,0,0x1c,0,0,0,0,0,0,0xc0,0x03,0,0,0,0, +0,0,0x1f,0,0,0xff,0xff,0x1f,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,0xfe,0xff,0x0f,0, +0x1c,0,0,0,0,0,0,0xe0,0x01,0,0,0,0,0,0, +0x0f,0,0,0xff,0xff,0x3f,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,0xfe,0xff,0x0f,0,0x1c,0, +0,0,0,0,0,0xe0,0,0,0,0,0,0,0,0x0f,0, +0,0xff,0xff,0x3f,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,0xfe,0xff,0x07,0,0x1c,0,0,0, +0,0,0,0xf0,0,0,0,0,0,0,0x80,0x07,0,0,0xfe, +0xff,0x3f,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,0xff,0xff,0x07,0,0x1e,0,0,0,0,0, +0,0x70,0,0,0,0,0,0,0x80,0x07,0,0,0xfe,0xff,0x7f, +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,0xff,0xff,0x07,0,0x1e,0,0,0,0,0,0,0x70, +0,0,0,0,0,0,0x80,0x07,0,0,0xfe,0xff,0x7f,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,0xff,0xff,0x07,0,0x1e,0,0,0,0,0,0,0x78,0,0, +0,0,0,0,0x80,0x07,0,0,0xfc,0xff,0x7f,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,0x80,0xff, +0xff,0x03,0,0x1e,0,0,0,0,0,0,0x38,0,0,0,0, +0,0,0x80,0x03,0,0,0xfc,0xff,0xff,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,0x80,0xff,0xff,0x03, +0,0x1e,0,0,0,0,0,0,0x3c,0,0,0,0,0,0, +0xc0,0x03,0,0,0xfc,0xff,0xff,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,0xc0,0xff,0xff,0x03,0,0x1e, +0,0,0,0,0,0,0x1e,0,0,0,0,0,0,0xc0,0x03, +0,0,0xf8,0xff,0xff,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,0xc0,0xff,0xff,0x03,0,0x1e,0,0, +0,0,0,0,0x1e,0,0,0,0,0,0,0xc0,0x03,0,0, +0xf8,0xff,0xff,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,0xc0,0xff,0xff,0x01,0,0x1e,0,0,0,0, +0,0,0x1e,0,0,0,0,0,0,0xc0,0x03,0,0,0xf8,0xff, +0xff,0x01,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,0xe0,0xff,0xff,0x01,0,0x1c,0,0,0,0,0,0, +0x0f,0,0,0,0,0,0,0xc0,0x01,0,0,0xf0,0xff,0xff,0x01, +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,0xe0,0xff,0xff,0,0,0x1c,0,0,0,0,0,0x80,0x07,0, +0,0,0,0,0,0xc0,0x01,0,0,0xf0,0xff,0xff,0x01,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,0xe0, +0xff,0xff,0,0,0x3c,0,0,0,0,0,0x80,0x07,0,0,0, +0,0,0,0xc0,0x01,0,0,0xf0,0xff,0xff,0x03,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,0xf0,0xff,0x7f, +0,0,0x3c,0,0,0,0,0,0x80,0x03,0,0,0,0,0, +0,0xc0,0x01,0,0,0xe0,0xff,0xff,0x03,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,0xf0,0xff,0x7f,0,0, +0x3c,0,0,0,0,0,0x80,0x03,0,0,0,0,0,0,0xc0, +0x01,0,0,0xe0,0xff,0xff,0x03,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,0xf0,0xff,0x7f,0,0,0x38,0, +0,0,0,0,0xc0,0x03,0,0,0,0,0,0,0xc0,0x01,0, +0,0xe0,0xff,0xff,0x03,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,0xf8,0xff,0x3f,0,0,0x38,0,0,0, +0,0,0xc0,0x01,0,0,0,0,0,0,0xc0,0x01,0,0,0xe0, +0xff,0xff,0x07,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,0xf8,0xff,0x3f,0,0,0x38,0,0,0,0,0, +0xe0,0x01,0,0,0,0,0,0,0xc0,0x01,0,0,0xc0,0xff,0xff, +0x07,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,0xfc,0xff,0x1f,0,0,0x38,0,0,0,0,0,0xe0,0, +0,0,0,0,0,0,0xc0,0x01,0,0,0xc0,0xff,0xff,0x07,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, +0xfc,0xff,0x1f,0,0,0x38,0,0,0,0,0,0xe0,0,0,0, +0,0,0,0,0xc0,0x01,0,0,0xc0,0xff,0xff,0x07,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,0xfc,0xff, +0x1f,0,0,0x38,0,0,0,0,0,0xf0,0,0,0,0,0, +0,0,0xc0,0x01,0,0,0x80,0xff,0xff,0x0f,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,0xfc,0xff,0x1f,0, +0,0x38,0,0,0,0,0,0x78,0,0,0,0,0,0,0, +0xc0,0x03,0,0,0x80,0xff,0xff,0x0f,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,0xfe,0xff,0x0f,0,0,0x38, +0,0,0,0,0,0x78,0,0,0,0,0,0,0,0xc0,0x03, +0,0,0,0xff,0xff,0x1f,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,0xfe,0xff,0x0f,0,0,0x3c,0,0, +0,0,0,0x3c,0,0,0,0,0,0,0,0x80,0x07,0,0, +0,0xff,0xff,0x1f,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,0xfe,0xff,0x0f,0,0,0x3c,0,0,0,0, +0,0x3c,0,0,0,0,0,0,0,0x80,0x07,0,0,0,0xff, +0xff,0x1f,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,0xff,0x07,0,0,0xfc,0x3f,0,0,0,0,0,0x3e, +0,0,0,0,0,0,0,0x80,0x07,0,0,0,0xfe,0xff,0x1f, +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,0x0f,0,0xe0,0xff,0xff,0x3f,0,0,0,0,0,0x1e,0,0, +0,0,0,0,0,0,0x0f,0,0,0,0xfe,0xff,0x3f,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, +0xfc,0xff,0xff,0xff,0x3f,0,0,0,0,0,0x0f,0,0,0,0, +0,0,0,0,0x0f,0,0,0,0xfe,0xff,0x3f,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,0xe0,0xff,0xff, +0xff,0x0f,0x3c,0,0,0,0,0,0x0f,0,0,0,0,0,0, +0,0,0x0e,0,0,0,0xfc,0xff,0x3f,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,0xe0,0xff,0xff,0xff,0x0f, +0x3c,0,0,0,0,0,0x0f,0,0,0,0,0,0,0,0, +0x0e,0,0,0,0xfc,0xff,0x3f,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,0xfc,0xff,0xff,0x01,0,0x38,0, +0,0,0,0x80,0x07,0,0,0,0,0,0,0,0,0x1e,0, +0,0,0xfc,0xff,0x7f,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,0xf0,0xff,0xff,0,0,0,0x38,0,0,0, +0,0x80,0x07,0,0,0,0,0,0,0,0,0x3c,0,0,0, +0xfc,0xff,0x7f,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,0xff,0xff,0x03,0,0,0,0x38,0,0,0,0,0xc0, +0x03,0,0,0,0,0,0,0,0,0x78,0,0,0,0xf8,0xff, +0x7f,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, +0xfc,0xff,0x1f,0,0,0,0,0x78,0,0,0,0,0xc0,0x01,0, +0,0,0,0,0,0,0,0x70,0,0,0,0xf8,0xff,0xff,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,0xc0,0xff,0xff, +0x01,0,0,0,0,0x70,0,0,0,0,0xe0,0x01,0,0,0, +0,0,0,0,0,0xf0,0x01,0,0,0xf0,0xff,0xff,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,0xc0,0xff,0xff,0x01,0, +0,0,0,0x70,0,0,0,0,0xe0,0x01,0,0,0,0,0, +0,0,0,0xf0,0x01,0,0,0xf0,0xff,0xff,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,0xff,0xff,0x07,0,0xfe,0,0, +0,0x70,0,0,0,0,0xe0,0,0,0,0,0,0,0,0, +0,0xe0,0x03,0,0,0xf0,0xff,0xff,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,0xf0,0xff,0x1f,0,0xf8,0xff,0,0,0,0x70, +0,0,0,0,0xf0,0,0,0,0,0,0,0,0,0,0xc0, +0x03,0,0,0xf0,0xff,0xff,0x01,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,0xfe,0x7f,0,0xe0,0xff,0x7f,0,0,0,0x70,0,0, +0,0,0xf8,0,0,0,0,0,0,0,0,0,0x80,0x0f,0, +0,0xf0,0xff,0xff,0x01,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, +0xe0,0xff,0x03,0,0xf0,0xff,0x3f,0,0,0,0x70,0,0,0,0, +0x78,0,0,0,0,0,0,0,0,0,0,0x1f,0,0,0xe0, +0xff,0xff,0x03,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,0xe0,0xff, +0x03,0,0xf0,0xff,0x3f,0,0,0,0x70,0,0,0,0,0x78,0, +0,0,0,0,0,0,0,0,0,0x1f,0,0,0xe0,0xff,0xff, +0x03,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,0xfc,0x7f,0,0, +0xf8,0xff,0x3f,0,0,0,0x70,0,0,0,0,0x78,0,0,0, +0,0,0,0,0,0,0,0x7c,0,0,0xe0,0xff,0xff,0x03,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x80,0xff,0x07,0,0,0xf8,0xff, +0x1f,0,0,0,0xe0,0,0,0,0,0x3c,0,0,0,0,0, +0,0,0,0,0,0xf8,0x01,0,0xe0,0xff,0xff,0x03,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xc0,0xff,0,0,0,0xfc,0xff,0x1f,0, +0,0,0xe0,0,0,0,0,0x3c,0,0,0,0,0,0,0, +0,0,0,0xe0,0x07,0,0xc0,0xff,0xff,0x03,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xc0,0x1f,0,0,0,0xfe,0xff,0x1f,0,0,0, +0xe0,0,0,0,0,0x3c,0,0,0x60,0,0,0,0,0,0, +0,0xc0,0x3f,0,0xc0,0xff,0xff,0x07,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0xc0,0x1f,0,0,0,0xfe,0xff,0x1f,0,0,0,0xe0,0, +0,0,0,0x3c,0,0,0x60,0,0,0,0,0,0,0,0xc0, +0x3f,0,0xc0,0xff,0xff,0x07,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x80,0x03,0,0,0,0xfe,0xff,0x0f,0,0,0,0xe0,0,0,0, +0,0x3e,0,0,0x70,0,0,0,0,0,0,0,0,0xff,0x01, +0x80,0xff,0xff,0x07,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,0xfe,0xff,0x0f,0,0,0,0xe0,0,0,0,0,0x3f, +0,0,0x38,0,0,0,0,0,0,0,0,0xf8,0x3f,0x80,0xff, +0xff,0x0f,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,0xff,0xff,0x07,0,0,0,0xc0,0x01,0,0,0,0xff,0,0, +0x38,0,0,0,0,0,0,0,0,0xc0,0xff,0,0xfc,0xff,0x0f, +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,0xff, +0xff,0x07,0,0,0,0xc0,0x01,0,0,0,0xf7,0x03,0,0x3c,0, +0,0,0,0,0,0,0,0,0xff,0x0f,0xc0,0xff,0x0f,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,0xff,0xff,0x07, +0,0,0,0xc0,0x01,0,0,0,0xf7,0x03,0,0x3c,0,0,0, +0,0,0,0,0,0,0xff,0x0f,0xc0,0xff,0x0f,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,0x80,0xff,0xff,0x03,0,0, +0,0xc0,0x01,0,0,0x80,0xe3,0x0f,0,0x3f,0,0,0,0,0, +0,0,0,0,0xf0,0x7f,0,0xf8,0x1f,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,0x80,0xff,0xff,0x03,0,0,0,0xc0, +0x01,0,0,0x80,0xe3,0xff,0xff,0x3f,0,0,0,0,0,0,0, +0,0,0x80,0xff,0x03,0x80,0x0f,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,0x80,0xff,0xff,0x03,0,0,0,0xc0,0x01,0, +0,0x80,0xc3,0xff,0xff,0x3f,0,0,0,0,0,0,0,0,0, +0,0xfe,0x1f,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,0xc0,0xff,0xff,0x01,0,0,0,0xc0,0x01,0,0,0xc0, +0x01,0xff,0xff,0x3f,0,0,0,0,0,0,0,0,0,0,0xe0, +0xff,0x01,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,0xc0,0xff,0xff,0,0,0,0,0xc0,0x01,0,0,0xc0,0x01,0xfe, +0x7f,0x38,0,0,0,0,0,0,0,0,0,0,0,0xfe,0x1f, +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,0xc0, +0xff,0xff,0,0,0,0,0xc0,0x01,0,0,0xc0,0x01,0xfe,0x7f,0x38, +0,0,0,0,0,0,0,0,0,0,0,0xfe,0x1f,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,0xe0,0xff,0xff, +0,0,0,0,0xc1,0x01,0,0,0xe0,0,0x3e,0,0x38,0,0, +0,0,0,0,0,0,0,0,0,0xf0,0xff,0x01,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,0xe0,0xff,0xff,0,0, +0,0x80,0xc3,0x01,0,0,0xe0,0,0x7c,0,0x3c,0,0,0,0, +0,0,0,0,0,0,0,0,0xff,0x7f,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,0xf0,0xff,0x7f,0,0,0,0xf0, +0xc3,0x01,0,0,0xf0,0,0xf0,0,0x3c,0,0,0,0,0,0, +0,0,0,0,0,0,0x80,0xff,0xff,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,0xf8,0xff,0x7f,0,0,0,0xf8,0xc3,0x01, +0,0,0xf0,0,0xe0,0x01,0x3c,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xe0,0xff,0xff,0x03,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,0xf8,0xff,0x7f,0,0,0,0xf8,0xc3,0x01,0,0, +0xf0,0,0xe0,0x01,0x3c,0,0,0,0,0,0,0,0,0,0, +0,0,0,0xe0,0xff,0xff,0x03,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,0xf8,0xff,0x7f,0,0,0,0xff,0xc3,0x03,0,0,0x70,0, +0xc0,0x03,0x3c,0,0,0,0,0,0,0,0,0,0,0,0, +0,0x80,0xff,0xff,0xff,0x07,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xf8,0xff,0x3f,0,0,0x80,0xff,0xc3,0x03,0,0,0x70,0,0xc0,0x03, +0x3c,0,0,0,0,0,0,0,0,0,0,0,0xf0,0x01,0, +0xf0,0xff,0xff,0x0f,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0xf8,0xff, +0x1f,0,0,0xe0,0xff,0xc3,0x03,0,0,0x78,0,0x80,0x07,0x3c,0, +0,0,0,0,0,0,0,0,0,0,0xf0,0x7f,0,0,0, +0xfc,0x0f,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xfc,0xff,0x1f,0, +0,0xf8,0xff,0xc3,0x03,0,0,0x78,0,0,0x0f,0x3c,0,0,0, +0,0,0,0,0,0,0,0,0xe0,0xff,0x0f,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,0xfc,0xff,0x1f,0,0,0xf8, +0xff,0xc3,0x03,0,0,0x78,0,0,0x0f,0x3c,0,0,0,0,0, +0,0,0,0,0,0,0xe0,0xff,0x0f,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,0xfc,0xff,0x0f,0,0,0xfe,0xff,0x83, +0x03,0,0,0x3c,0,0,0x1e,0x1c,0,0,0,0,0,0,0, +0,0xfc,0xff,0x01,0xe0,0xff,0xff,0x01,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,0xfe,0xff,0x0f,0,0x80,0xff,0xff,0x87,0x03,0, +0,0x3c,0,0,0x3c,0x1c,0,0,0,0,0,0,0xf8,0xff,0xff, +0xff,0xff,0xe1,0xff,0xff,0x03,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,0xfe,0xff,0x0f,0,0xc0,0xff,0xff,0x87,0x03,0,0,0x3c, +0,0,0x78,0x1c,0,0,0,0,0,0xfe,0xff,0xff,0xff,0xff,0xff, +0xe1,0xff,0xff,0x03,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,0xff,0xff,0x07,0,0xf8,0xff,0xff,0xc7,0x03,0,0,0x1c,0,0, +0xe0,0x1c,0,0,0,0x80,0xff,0xff,0xff,0x01,0,0,0,0xc0,0xff, +0xff,0x03,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,0xff, +0xff,0x07,0,0xf8,0xff,0xff,0xc7,0x03,0,0,0x1c,0,0,0xe0,0x1c, +0,0,0,0x80,0xff,0xff,0xff,0x01,0,0,0,0xc0,0xff,0xff,0x03, +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,0xff,0xff,0x03, +0,0xfe,0xff,0xff,0xc7,0x03,0,0,0x1c,0,0,0xe0,0x1f,0,0, +0,0xf0,0xff,0xff,0,0,0,0,0,0x80,0xff,0xff,0x07,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,0x80,0xff,0xff,0x03,0,0xff, +0xff,0xff,0xc7,0x03,0,0,0x1c,0,0,0x80,0x1f,0,0,0,0xff, +0xff,0x03,0,0,0,0xfc,0x03,0x80,0xff,0xff,0x07,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,0x80,0xff,0xff,0x03,0xc0,0xff,0xff,0xff, +0xc7,0x03,0,0,0x1e,0,0,0,0x1f,0,0,0xf8,0xff,0x0f,0, +0x80,0xff,0xff,0xff,0x1f,0,0xff,0xff,0x07,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,0x80,0xff,0xff,0x01,0xf0,0xff,0xff,0xff,0xc3,0x03, +0,0,0xfe,0xff,0,0,0x1f,0,0xe0,0xff,0x3f,0,0,0x80,0xff, +0xff,0xff,0x3f,0,0xff,0xff,0x07,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,0xc0,0xff,0xff,0x01,0xfc,0xff,0xff,0xff,0xc1,0x03,0,0, +0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0,0,0x80,0xff,0xff,0xff, +0x7f,0,0xff,0xff,0x0f,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,0xc0,0xff,0xff,0x01,0xfc,0xff,0xff,0xff,0xc1,0x03,0,0,0xfe,0xff, +0xff,0xff,0xff,0xff,0xff,0xff,0x01,0,0,0x80,0xff,0xff,0xff,0x7f,0, +0xff,0xff,0x0f,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,0xe0, +0xff,0xff,0x01,0xff,0xff,0xff,0xff,0x80,0x03,0,0,0xfe,0xff,0xff,0xff, +0xff,0xff,0xff,0x07,0,0,0,0,0xfe,0xff,0xff,0xff,0x01,0xfe,0xff, +0x1f,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,0xe0,0xff,0xff, +0x80,0xff,0xff,0xff,0x3f,0,0,0,0,0x7c,0,0,0xf5,0xff,0xff, +0x3f,0,0,0,0,0,0xfc,0xff,0xff,0xff,0x07,0xfe,0xff,0x1f,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,0xe0,0xff,0x7f,0xf0,0xff, +0xff,0xff,0x0f,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xf0,0xff,0xff,0xff,0x1f,0xfe,0xff,0x1f,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,0xf0,0xff,0x7f,0xf8,0xff,0xff,0xff, +0x03,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0xc0,0xff,0xff,0xff,0x3f,0xfe,0xff,0x3f,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,0xf0,0xff,0x7f,0xf8,0xff,0xff,0xff,0x03,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xc0,0xff,0xff,0xff,0x3f,0xfe,0xff,0x3f,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,0xf0,0xff,0xff,0xff,0xff,0xff,0x7f,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xff, +0xff,0xff,0xff,0xfc,0xff,0x3f,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,0xf8,0xff,0xff,0xff,0xff,0xff,0x3f,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xfc,0xff,0xff, +0xff,0xff,0xff,0x3f,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, +0xf8,0xff,0xff,0xff,0xff,0xff,0x0f,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xf0,0xff,0xff,0xff,0xff, +0xff,0x3f,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,0xfc,0xff, +0xff,0xff,0xff,0xff,0x03,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xe0,0xff,0xff,0xff,0xff,0xff,0x7f, +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,0xfc,0xff,0xff,0xff, +0xff,0xff,0x03,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xe0,0xff,0xff,0xff,0xff,0xff,0x7f,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,0xfc,0xff,0xff,0xff,0xff,0xff, +0x01,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x80,0xff,0xff,0xff,0xff,0xff,0x7f,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,0xfc,0xff,0xff,0xff,0xff,0x7f,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0xfe,0xff,0xff,0xff,0xff,0xff,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,0xfe,0xff,0xff,0xff,0xff,0x3f,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0xfc,0xff,0xff,0xff,0xff,0xff,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,0xfe,0xff,0xff,0xff,0xff,0x07,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xf0, +0xff,0xff,0xff,0xff,0xff,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,0xfe,0xff,0xff,0xff,0xff,0x07,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xf0,0xff,0xff, +0xff,0xff,0xff,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,0xfe, +0xff,0xff,0xff,0xff,0x03,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xe0,0xff,0xff,0xff,0xff, +0xff,0x01,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,0xff,0xff,0xff, +0xff,0xff,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x80,0xff,0xff,0xff,0xff,0xff,0x01, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0x80,0xff,0xff,0xff,0xff,0x3f, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0xfe,0xff,0xff,0xff,0xff,0x01,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0x80,0xff,0xff,0xff,0xff,0x1f,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xf8,0xff,0xff,0xff,0xff,0x03,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xc0,0xff,0xff,0xff,0xff,0x07,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0xf0,0xff,0xff,0xff,0xff,0x03,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0xc0,0xff,0xff,0xff,0xff,0x07,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0xf0,0xff,0xff,0xff,0xff,0x03,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0xc0,0xff,0xff,0xff,0xff,0x01,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xc0, +0xff,0xff,0xff,0xff,0x07,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xc0, +0xff,0xff,0xff,0xff,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x80,0xff,0xff, +0xff,0xff,0x07,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xe0,0xff,0xff, +0xff,0x1f,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xff,0xff,0xff,0xff, +0x07,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xe0,0xff,0xff,0xff,0x0f, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xfc,0xff,0xff,0xff,0x0f,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xe0,0xff,0xff,0xff,0x0f,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0xfc,0xff,0xff,0xff,0x0f,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xf0,0xff,0xff,0xff,0x03,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xf8,0xff,0xff,0xff,0x0f,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xf0,0xff,0xff,0xff,0x01,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0xe0,0xff,0xff,0xff,0x0f,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0xf8,0xff,0xff,0x7f,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,0xc0,0xff,0xff,0xff,0x0f,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xf8,0xff,0xff,0x3f,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, +0xff,0xff,0xff,0x1f,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0xf8,0xff, +0xff,0x3f,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,0xff,0xff, +0xff,0x1f,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xf8,0xff,0xff,0x07, +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,0xfc,0xff,0xff,0x3f, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xfc,0xff,0xff,0x03,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,0xf8,0xff,0xff,0x3f,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0xfe,0xff,0xff,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,0xe0,0xff,0xff,0x3f,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xfe,0xff,0x3f,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,0x80,0xff,0xff,0x3f,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0xfe,0xff,0x3f,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,0x80,0xff,0xff,0x3f,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0xfe,0xff,0x0f,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,0xfe,0xff,0x7f,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xff, +0xff,0x07,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, +0xfc,0xff,0x7f,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xff,0xff,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,0xf0,0xff, +0x7f,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0x80,0xff,0x3f,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,0xc0,0xff,0x7f,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0x80,0xff,0x1f,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,0x80,0xff,0xff,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0x80,0xff,0x1f,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,0x80,0xff,0xff,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0xc0,0xff,0x03,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,0xfe,0xff,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0xc0,0xff,0x01,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,0xfc,0xff,0x01,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xc0, +0x7f,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,0xf0,0xff,0x01,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xe0,0x1f,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, +0xc0,0xff,0x01,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xe0,0x1f,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,0xc0,0xff, +0x01,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xe0,0x0f,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,0x80,0xff,0x01,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xf0,0x03,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,0xfe,0x03,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x78,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,0xf8,0x03,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0x18,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,0xf0,0x03,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x18,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,0xf0,0x03,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,0,0,0,0,0, +0,0,0xc0,0x07,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,0,0,0,0,0,0,0, +0,0x07,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,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,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,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,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,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,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, +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,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 +}; diff --git a/hacks/flame.c b/hacks/flame.c new file mode 100755 index 00000000..e010b9df --- /dev/null +++ b/hacks/flame.c @@ -0,0 +1,282 @@ +/* xscreensaver, Copyright (c) 1993 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 was ported from xlock for use in xscreensaver (and standalone) + * by jwz on 18-Oct-93. Original copyright reads: + * + * static char sccsid[] = "@(#)flame.c 1.4 91/09/27 XLOCK"; + * + * flame.c - recursive fractal cosmic flames. + * + * Copyright (c) 1991 by Patrick J. Naughton. + * + * 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. + * + * This file is provided AS IS with no warranties of any kind. The author + * shall have no liability with respect to the infringement of copyrights, + * trade secrets or any patents by this file or any part thereof. In no + * event will the author be liable for any lost revenue or profits or + * other special, indirect and consequential damages. + * + * Comments and additions should be sent to the author: + * + * naughton@eng.sun.com + * + * Patrick J. Naughton + * MS 21-14 + * Sun Laboritories, Inc. + * 2550 Garcia Ave + * Mountain View, CA 94043 + * + * Revision History: + * 27-Jun-91: vary number of functions used. + * 24-Jun-91: fixed portability problem with integer mod (%). + * 06-Jun-91: Written. (received from Scott Graves, spot@cs.cmu.edu). + */ + +#include "screenhack.h" + +/*#include */ + +#define POINT_BUFFER_SIZE 10 +#define MAXLEV 4 + +static double f[2][3][MAXLEV]; /* three non-homogeneous transforms */ +static int max_total; +static int max_levels; +static int max_points; +static int cur_level; +static int snum; +static int anum; +static int num_points; +static int total_points; +static int pixcol; +static int npixels; +static unsigned long *pixels; +static XPoint points [POINT_BUFFER_SIZE]; +static GC gc; + +static int delay, delay2; +static int width, height; + +static short +halfrandom (mv) + int mv; +{ + static short lasthalf = 0; + unsigned long r; + + if (lasthalf) + { + r = lasthalf; + lasthalf = 0; + } + else + { + r = random (); + lasthalf = r >> 16; + } + return (r % mv); +} + + +static void +init_flame (dpy, window) + Display *dpy; + Window window; +{ + XGCValues gcv; + XWindowAttributes xgwa; + Colormap cmap; + XGetWindowAttributes (dpy, window, &xgwa); + width = xgwa.width; + height = xgwa.height; + cmap = xgwa.colormap; + + max_points = get_integer_resource ("iterations", "Integer"); + if (max_points <= 0) max_points = 100; + + max_levels = max_points; + + max_total = get_integer_resource ("points", "Integer"); + if (max_total <= 0) max_total = 10000; + + delay = get_integer_resource ("delay", "Integer"); + if (delay < 0) delay = 0; + delay2 = get_integer_resource ("delay2", "Integer"); + if (delay2 < 0) delay2 = 0; + + if (mono_p) + npixels = 0; + else + { + int i = get_integer_resource ("ncolors", "Integer"); + double saturation = 1.0; + double value = 1.0; + XColor color; + if (i <= 0) i = 128; + + pixels = (unsigned long *) malloc ((i+1) * sizeof (*pixels)); + for (npixels = 0; npixels < i; npixels++) + { + hsv_to_rgb ((360*npixels)/i, saturation, value, + &color.red, &color.green, &color.blue); + if (! XAllocColor (dpy, cmap, &color)) + break; + pixels [npixels] = color.pixel; + } + } + + gcv.foreground = get_pixel_resource ("foreground", "Foreground", dpy, cmap); + gcv.background = get_pixel_resource ("background", "Background", dpy, cmap); + + if (! mono_p) + { + pixcol = halfrandom (npixels); + gcv.foreground = (pixels [pixcol]); + } + + gc = XCreateGC (dpy, window, GCForeground | GCBackground, &gcv); +} + +static int +recurse (x, y, l, dpy, win) + register double x, y; + register int l; + Display *dpy; + Window win; +{ + int xp, yp, i; + double nx, ny; + + if (l == max_levels) + { + total_points++; + if (total_points > max_total) /* how long each fractal runs */ + return 0; + + if (x > -1.0 && x < 1.0 && y > -1.0 && y < 1.0) + { + xp = points[num_points].x = (int) ((width / 2) * (x + 1.0)); + yp = points[num_points].y = (int) ((height / 2) * (y + 1.0)); + num_points++; + if (num_points >= POINT_BUFFER_SIZE) + { + XDrawPoints (dpy, win, gc, points, num_points, CoordModeOrigin); + num_points = 0; + /* if (delay) usleep (delay); */ + /* XSync (dpy, True); */ + } + } + } + else + { + for (i = 0; i < snum; i++) + { + nx = f[0][0][i] * x + f[0][1][i] * y + f[0][2][i]; + ny = f[1][0][i] * x + f[1][1][i] * y + f[1][2][i]; + if (i < anum) + { + nx = sin(nx); + ny = sin(ny); + } + if (!recurse (nx, ny, l + 1, dpy, win)) + return 0; + } + } + return 1; +} + + +static void +flame (dpy, window) + Display *dpy; + Window window; +{ + int i, j, k; + static int alt = 0; + + if (!(cur_level++ % max_levels)) + { + if (delay2) usleep (delay2); + XClearWindow (dpy, window); + alt = !alt; + } + else + { + if (npixels > 2) + { + XSetForeground (dpy, gc, pixels [pixcol]); + if (--pixcol < 0) + pixcol = npixels - 1; + } + } + + /* number of functions */ + snum = 2 + (cur_level % (MAXLEV - 1)); + + /* how many of them are of alternate form */ + if (alt) + anum = 0; + else + anum = halfrandom (snum) + 2; + + /* 6 coefs per function */ + for (k = 0; k < snum; k++) + { + for (i = 0; i < 2; i++) + for (j = 0; j < 3; j++) + f[i][j][k] = ((double) (random() & 1023) / 512.0 - 1.0); + } + num_points = 0; + total_points = 0; + (void) recurse (0.0, 0.0, 0, dpy, window); + XDrawPoints (dpy, window, gc, points, num_points, CoordModeOrigin); + XSync (dpy, True); + if (delay) usleep (delay); +} + + +char *progclass = "Flame"; + +char *defaults [] = { + "Flame.background: black", /* to placate SGI */ + "Flame.foreground: white", + "*colors: 128", + "*iterations: 25", + "*delay: 50000", + "*delay2: 2000000", + "*points: 10000", + 0 +}; + +XrmOptionDescRec options [] = { + { "-ncolors", ".colors", XrmoptionSepArg, 0 }, + { "-iterations", ".iterations", XrmoptionSepArg, 0 }, + { "-delay", ".delay", XrmoptionSepArg, 0 }, + { "-delay2", ".delay2", XrmoptionSepArg, 0 }, + { "-points", ".points", XrmoptionSepArg, 0 } +}; +int options_size = (sizeof (options) / sizeof (options[0])); + +void +screenhack (dpy, window) + Display *dpy; + Window window; +{ + init_flame (dpy, window); + while (1) + flame (dpy, window); +} diff --git a/hacks/flame.exe_axp b/hacks/flame.exe_axp new file mode 100755 index 0000000000000000000000000000000000000000..15ec19dc2e2ce3718bcd2ef1069876acf6b20216 GIT binary patch literal 24064 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 E07ovLKL7v# literal 0 HcmV?d00001 diff --git a/hacks/flame.exe_vax b/hacks/flame.exe_vax new file mode 100755 index 0000000000000000000000000000000000000000..cb2a204411f503e03cc262c73b37ba68b60b2511 GIT binary patch literal 12288 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 Ull-jM(Lrh$mHzVke~!R^0Z$~hga7~l literal 0 HcmV?d00001 diff --git a/hacks/flame.hlp b/hacks/flame.hlp new file mode 100755 index 00000000..15eba956 --- /dev/null +++ b/hacks/flame.hlp @@ -0,0 +1,66 @@ +1 FLAME +Draw weird cosmic fractals + +SYNOPSIS + $ flame [-display host:display.screen] [-foreground color] + [-background color] [-window] [-root] [-mono] [-ncolors integer] + [-iterations integer] [-points integer] [-delay microseconds] + [-delay2 microseconds] + +2 DESCRIPTION +The flame program generates colorful fractal displays. + +2 OPTIONS +flame accepts the following options: + + -window +Draw on a newly-created window. This is the default. + + -root +Draw on the root window. + + -mono +If on a color display, pretend we're on a monochrome display. + + -ncolors integer +How many colors should be used (if possible). Default 128. +The colors used cycle through the hue, making N stops around +the color wheel. + + -iterations integer +How many fractals to generate. Default 25. + + -points integer +How many pixels to draw for each fractal. Default 10000. + + -delay microseconds +How long we should wait between drawing each fractal. Default 50000, +or about 1/20th second. + + -delay2 microseconds +How long we should wait before clearing the screen when each run ends. +Default 2000000, or two seconds. + +2 ENVIRONMENT + + DISPLAY +to get the default host and display number. + + XENVIRONMENT +to get the name of a resource file that overrides the global resources +stored in the RESOURCE_MANAGER property. + +2 COPYRIGHT +Copyright (co 1991 by Patrick J. Naughton + +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. + +2 AUTHOR +Scott Graves , 06-Jun-91.n + +Ability to run standalone or with xscreensaver added by +Jamie Zawinski , 18-Oct-93. diff --git a/hacks/flame.man b/hacks/flame.man new file mode 100755 index 00000000..aefc15de --- /dev/null +++ b/hacks/flame.man @@ -0,0 +1,65 @@ +.TH XScreenSaver 1 "13-aug-92" "X Version 11" +.SH NAME +flame - draw weird cosmic fractals +.SH SYNOPSIS +.B flame +[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-ncolors \fIinteger\fP] [\-iterations \fIinteger\fP] [\-points \fIinteger\fP] [\-delay \fImicroseconds\fP] [\-delay2 \fImicroseconds\fP] +.SH DESCRIPTION +The \fIflame\fP program generates colorful fractal displays. +.SH OPTIONS +.I flame +accepts the following options: +.TP 8 +.B \-window +Draw on a newly-created window. This is the default. +.TP 8 +.B \-root +Draw on the root window. +.TP 8 +.B \-mono +If on a color display, pretend we're on a monochrome display. +.TP 8 +.B \-ncolors integer +How many colors should be used (if possible). Default 128. +The colors used cycle through the hue, making N stops around +the color wheel. +.TP 8 +.B \-iterations integer +How many fractals to generate. Default 25. +.TP 8 +.B \-points integer +How many pixels to draw for each fractal. Default 10000. +.TP 8 +.B \-delay microseconds +How long we should wait between drawing each fractal. Default 50000, +or about 1/20th second. +.TP 8 +.B \-delay2 microseconds +How long we should wait before clearing the screen when each run ends. +Default 2000000, or two seconds. +.SH ENVIRONMENT +.PP +.TP 8 +.B DISPLAY +to get the default host and display number. +.TP 8 +.B XENVIRONMENT +to get the name of a resource file that overrides the global resources +stored in the RESOURCE_MANAGER property. +.SH SEE ALSO +.BR X (1), +.BR xscreensaver (1), +.BR xlock (1) +.SH COPYRIGHT +Copyright \(co 1991 by Patrick J. Naughton + +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. +.SH AUTHOR +Scott Graves , 06-Jun-91.n + +Ability to run standalone or with \fIxscreensaver\fP added by +Jamie Zawinski , 18-Oct-93. diff --git a/hacks/greynetic.c b/hacks/greynetic.c new file mode 100755 index 00000000..2b6ed56d --- /dev/null +++ b/hacks/greynetic.c @@ -0,0 +1,181 @@ +/* xscreensaver, Copyright (c) 1992 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 "screenhack.h" + +#define NBITS 12 + +#ifndef VMS +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#else +#include "sys$common:[decw$include.bitmaps]stipple.xbm" +#include "sys$common:[decw$include.bitmaps]cross_weave.xbm" +#include "sys$common:[decw$include.bitmaps]dimple1.xbm" +#include "sys$common:[decw$include.bitmaps]dimple3.xbm" +#include "sys$common:[decw$include.bitmaps]flipped_gray.xbm" +#include "sys$common:[decw$include.bitmaps]gray1.xbm" +#include "sys$common:[decw$include.bitmaps]gray3.xbm" +#include "sys$common:[decw$include.bitmaps]hlines2.xbm" +#include "sys$common:[decw$include.bitmaps]light_gray.xbm" +#include "sys$common:[decw$include.bitmaps]root_weave.xbm" +#include "sys$common:[decw$include.bitmaps]vlines2.xbm" +#include "sys$common:[decw$include.bitmaps]vlines3.xbm" +#endif + +static Pixmap pixmaps [NBITS]; +static GC gc; +static int delay; +static unsigned long fg, bg, pixels [512]; +static int npixels; + +static void +init_greynetic (dpy, window) + Display *dpy; + Window window; +{ + int i; + XGCValues gcv; + XWindowAttributes xgwa; + Colormap cmap; + XGetWindowAttributes (dpy, window, &xgwa); + cmap = xgwa.colormap; + npixels = 0; + gcv.foreground= fg= get_pixel_resource("foreground","Foreground", dpy, cmap); + gcv.background= bg= get_pixel_resource("background","Background", dpy, cmap); + gcv.fill_style= FillOpaqueStippled; + gc = XCreateGC (dpy, window, GCForeground|GCBackground|GCFillStyle, &gcv); + + delay = get_integer_resource ("delay", "Integer"); + if (delay < 0) delay = 0; + + i = 0; +#define BITS(n,w,h) \ + pixmaps [i++] = XCreatePixmapFromBitmapData (dpy, window, n, w, h, 1, 0, 1) + + BITS (stipple_bits, stipple_width, stipple_height); + BITS (cross_weave_bits, cross_weave_width, cross_weave_height); + BITS (dimple1_bits, dimple1_width, dimple1_height); + BITS (dimple3_bits, dimple3_width, dimple3_height); + BITS (flipped_gray_bits, flipped_gray_width, flipped_gray_height); + BITS (gray1_bits, gray1_width, gray1_height); + BITS (gray3_bits, gray3_width, gray3_height); + BITS (hlines2_bits, hlines2_width, hlines2_height); + BITS (light_gray_bits, light_gray_width, light_gray_height); + BITS (root_weave_bits, root_weave_width, root_weave_height); + BITS (vlines2_bits, vlines2_width, vlines2_height); + BITS (vlines3_bits, vlines3_width, vlines3_height); +} + +static void +greynetic (dpy, window) + Display *dpy; + Window window; +{ + static int tick = 500, xlim, ylim; + static Colormap cmap; + int x, y, w, h, i; + XGCValues gcv; + if (tick++ == 500) + { + XWindowAttributes xgwa; + XGetWindowAttributes (dpy, window, &xgwa); + tick = 0; + xlim = xgwa.width; + ylim = xgwa.height; + cmap = xgwa.colormap; + } + for (i = 0; i < 10; i++) /* minimize area, but don't try too hard */ + { + w = 50 + random () % (xlim - 50); + h = 50 + random () % (ylim - 50); + if (w + h < xlim && w + h < ylim) + break; + } + x = random () % (xlim - w); + y = random () % (ylim - h); + gcv.stipple = pixmaps [random () % NBITS]; + if (mono_p) + { + if (random () % 1) + gcv.foreground = fg, gcv.background = bg; + else + gcv.foreground = bg, gcv.background = fg; + } + else + { + XColor fgc, bgc; + if (npixels == sizeof (pixels) / sizeof (unsigned long)) + goto REUSE; + fgc.flags = bgc.flags = DoRed|DoGreen|DoBlue; + fgc.red = random (); + fgc.green = random (); + fgc.blue = random (); + bgc.red = random (); + bgc.green = random (); + bgc.blue = random (); + if (! XAllocColor (dpy, cmap, &fgc)) + goto REUSE; + pixels [npixels++] = fgc.pixel; + gcv.foreground = fgc.pixel; + if (! XAllocColor (dpy, cmap, &bgc)) + goto REUSE; + pixels [npixels++] = bgc.pixel; + gcv.background = bgc.pixel; + goto DONE; + REUSE: + gcv.foreground = pixels [random () % npixels]; + gcv.background = pixels [random () % npixels]; + DONE: + ; + } + XChangeGC (dpy, gc, GCStipple|GCForeground|GCBackground, &gcv); + XFillRectangle (dpy, window, gc, x, y, w, h); + XSync (dpy, True); +} + + +char *progclass = "Greynetic"; + +char *defaults [] = { + "Greynetic.background: black", /* to placate SGI */ + "Greynetic.foreground: white", + "*delay: 0", + 0 +}; + +XrmOptionDescRec options [] = { + { "-delay", ".delay", XrmoptionSepArg, 0 } +}; +int options_size = (sizeof (options) / sizeof (options[0])); + +void +screenhack (dpy, window) + Display *dpy; + Window window; +{ + init_greynetic (dpy, window); + while (1) + { + greynetic (dpy, window); + if (delay) usleep (delay); + } +} diff --git a/hacks/greynetic.exe_axp b/hacks/greynetic.exe_axp new file mode 100755 index 0000000000000000000000000000000000000000..50af37a169ca0829cf2b7d6b16e76c563b095485 GIT binary patch literal 18944 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 literal 0 HcmV?d00001 diff --git a/hacks/greynetic.hlp b/hacks/greynetic.hlp new file mode 100755 index 00000000..d2849bd4 --- /dev/null +++ b/hacks/greynetic.hlp @@ -0,0 +1,45 @@ +1 GREYNETIC +Draw random stippled/color rectangles + +SYNOPSIS + $ greynetic [-display host:display.screen] [-foreground color] + [-background color] [-window] [-root] [-mono] [-delay usecs] + +2 DESCRIPTION +The greynetic program draws random rectangles. + +2 OPTIONS +greynetic accepts the following options: + + -window +Draw on a newly-created window. This is the default. + + -root +Draw on the root window. + + -mono +If on a color display, pretend we're on a monochrome display. + + -delay microseconds +Slow it down. + +2 ENVIRONMENT + + DISPLAY +to get the default host and display number. + + XENVIRONMENT +to get the name of a resource file that overrides the global resources +stored in the RESOURCE_MANAGER property. + +2 COPYRIGHT +Copyright (co 1992 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. + +2 AUTHOR +Jamie Zawinski , 13-aug-92. diff --git a/hacks/greynetic.man b/hacks/greynetic.man new file mode 100755 index 00000000..a34af7a4 --- /dev/null +++ b/hacks/greynetic.man @@ -0,0 +1,45 @@ +.TH XScreenSaver 1 "13-aug-92" "X Version 11" +.SH NAME +greynetic - draw random stippled/color rectangles +.SH SYNOPSIS +.B greynetic +[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-delay \fIusecs\fP] +.SH DESCRIPTION +The \fIgreynetic\fP program draws random rectangles. +.SH OPTIONS +.I greynetic +accepts the following options: +.TP 8 +.B \-window +Draw on a newly-created window. This is the default. +.TP 8 +.B \-root +Draw on the root window. +.TP 8 +.B \-mono +If on a color display, pretend we're on a monochrome display. +.TP 8 +.B \-delay microseconds +Slow it down. +.SH ENVIRONMENT +.PP +.TP 8 +.B DISPLAY +to get the default host and display number. +.TP 8 +.B XENVIRONMENT +to get the name of a resource file that overrides the global resources +stored in the RESOURCE_MANAGER property. +.SH SEE ALSO +.BR X (1), +.BR xscreensaver (1) +.SH COPYRIGHT +Copyright \(co 1992 by Jamie Zawinski. Permission to use, copy, modify, +distribute, and sell this software and its documentation for any purpose is +hereby granted without fee, provided that the above copyright notice appear +in all copies and that both that copyright notice and this permission notice +appear in supporting documentation. No representations are made about the +suitability of this software for any purpose. It is provided "as is" without +express or implied warranty. +.SH AUTHOR +Jamie Zawinski , 13-aug-92. diff --git a/hacks/halo.c b/hacks/halo.c new file mode 100755 index 00000000..b8270ee8 --- /dev/null +++ b/hacks/halo.c @@ -0,0 +1,345 @@ +/* xscreensaver, Copyright (c) 1993 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 wanted to lay down new circles with TV:ALU-ADD instead of TV:ALU-XOR, + but X doesn't support arithmetic combinations of pixmaps!! What losers. + I suppose I could crank out the 2's compliment math by hand, but that's + a real drag... + + This would probably look good with shapes other than circles as well. + + */ + +#include "screenhack.h" + +struct circle { + int x, y, radius; + int increment; + int dx, dy; +}; + +static struct circle *circles; +static int count, global_count; +static Pixmap pixmap, buffer; +static int width, height, global_inc; +static int delay; +static unsigned long fg_pixel, bg_pixel; +static XColor fgc, bgc; +static Bool xor_p; +static GC draw_gc, erase_gc, copy_gc, merge_gc; +static Bool anim_p; +static Colormap cmap; + +#define min(x,y) ((x)<(y)?(x):(y)) +#define max(x,y) ((x)>(y)?(x):(y)) + +static void +init_circles_1 (dpy, window) + Display *dpy; + Window window; +{ + int i; + count = (global_count ? global_count + : (3 + (random () % max (1, (min (width, height) / 50))) + + (random () % max (1, (min (width, height) / 50))))); + circles = (struct circle *) malloc (count * sizeof (struct circle)); + for (i = 0; i < count; i++) + { + circles [i].x = 10 + random () % (width - 20); + circles [i].y = 10 + random () % (height - 20); + if (global_inc) + circles [i].increment = global_inc; + else + { /* prefer smaller increments to larger ones */ + int j = 8; + int inc = ((random()%j) + (random()%j) + (random()%j)) - ((j*3)/2); + if (inc < 0) inc = -inc + 3; + circles [i].increment = inc + 3; + } + circles [i].radius = random () % circles [i].increment; + circles [i].dx = ((random () % 3) - 1) * (1 + random () % 5); + circles [i].dy = ((random () % 3) - 1) * (1 + random () % 5); + } +} + +static void +init_circles (dpy, window) + Display *dpy; + Window window; +{ + XGCValues gcv; + XWindowAttributes xgwa; + XGetWindowAttributes (dpy, window, &xgwa); + cmap = xgwa.colormap; + global_count = get_integer_resource ("count", "Integer"); + if (global_count < 0) global_count = 0; + global_inc = get_integer_resource ("increment", "Integer"); + if (global_inc < 0) global_inc = 0; + xor_p = get_boolean_resource ("xor", "Boolean"); +/* if (mono_p) */ xor_p = True; + anim_p = get_boolean_resource ("animate", "Boolean"); + delay = get_integer_resource ("delay", "Integer"); + if (mono_p) + { + fg_pixel = get_pixel_resource ("foreground","Foreground", dpy, cmap); + bg_pixel = get_pixel_resource ("background","Background", dpy, cmap); + } + else + { + hsv_to_rgb (0, 0.5, 1.0, &fgc.red, &fgc.green, &fgc.blue); + hsv_to_rgb (180, 1.0, 0.7, &bgc.red, &bgc.green, &bgc.blue); + XAllocColor (dpy, cmap, &fgc); + XAllocColor (dpy, cmap, &bgc); + fg_pixel = fgc.pixel; + bg_pixel = bgc.pixel; + } + + width = max (50, xgwa.width); + height = max (50, xgwa.height); + +#ifdef DEBUG + width/=2; height/=2; +#endif + + pixmap = XCreatePixmap (dpy, window, width, height, 1); + if (xor_p) + buffer = XCreatePixmap (dpy, window, width, height, 1); + else + buffer = 0; + + gcv.foreground = 1; + gcv.background = 0; + draw_gc = XCreateGC (dpy, pixmap, GCForeground | GCBackground, &gcv); + gcv.foreground = 0; + erase_gc = XCreateGC (dpy, pixmap, GCForeground, &gcv); + gcv.foreground = fg_pixel; + gcv.background = bg_pixel; + copy_gc = XCreateGC (dpy, window, GCForeground | GCBackground, &gcv); + + if (xor_p) + { + gcv.foreground = 1; + gcv.background = 0; + gcv.function = GXxor; + merge_gc = XCreateGC (dpy, pixmap, + GCForeground | GCBackground | GCFunction, &gcv); + } + else + { + gcv.foreground = fg_pixel; + gcv.background = bg_pixel; + gcv.function = GXcopy; + merge_gc = XCreateGC (dpy, window, + GCForeground | GCBackground | GCFunction, &gcv); + } + + init_circles_1 (dpy, window); + XClearWindow (dpy, window); + if (buffer) XFillRectangle (dpy, buffer, erase_gc, 0, 0, width, height); +} + +static void +run_circles (dpy, window) + Display *dpy; + Window window; +{ + int i; + static int iterations = 0; + static int oiterations = 0; + static Bool first_time_p = True; + Bool done = False; + Bool inhibit_sleep = False; + XFillRectangle (dpy, pixmap, erase_gc, 0, 0, width, height); + for (i = 0; i < count; i++) + { + int radius = circles [i].radius; + int inc = circles [i].increment; + if (! (iterations & 1)) + ; + else if (radius == 0) + ; + else if (radius < 0) + done = True; + else + { + /* Probably there's a simpler way to ask the musical question, + "is this square completely enclosed by this circle," but I've + forgotten too much trig to know it... (That's not really the + right question anyway, but the right question is too hard.) */ + double x1 = ((double) (-circles [i].x)) / ((double) radius); + double y1 = ((double) (-circles [i].y)) / ((double) radius); + double x2 = ((double) (width - circles [i].x)) / ((double) radius); + double y2 = ((double) (height - circles [i].y)) / ((double) radius); + x1 *= x1; x2 *= x2; y1 *= y1; y2 *= y2; + if ((x1 + y1) < 1 && (x2 + y2) < 1 && (x1 + y2) < 1 && (x2 + y1) < 1) + done = True; + } + if (radius > 0 && + (xor_p || circles [0].increment < 0)) + XFillArc (dpy, + (xor_p ? pixmap : window), + (xor_p ? draw_gc : merge_gc), + circles [i].x - radius, circles [i].y - radius, + radius * 2, radius * 2, 0, 360*64); + circles [i].radius += inc; + } + + if (anim_p && !first_time_p) + inhibit_sleep = !done; + + if (done) + { + if (anim_p) + { + first_time_p = False; + for (i = 0; i < count; i++) + { + circles [i].x += circles [i].dx; + circles [i].y += circles [i].dy; + circles [i].radius %= circles [i].increment; + if (circles [i].x < 0 || circles [i].x >= width) + { + circles [i].dx = -circles [i].dx; + circles [i].x += (2 * circles [i].dx); + } + if (circles [i].y < 0 || circles [i].y >= height) + { + circles [i].dy = -circles [i].dy; + circles [i].y += (2 * circles [i].dy); + } + } + } + else if (circles [0].increment < 0) + { + free (circles); + init_circles_1 (dpy, window); + if (! mono_p) + { + cycle_hue (&fgc, 10); + cycle_hue (&bgc, 10); + XFreeColors (dpy, cmap, &fgc.pixel, 1, 0); + XFreeColors (dpy, cmap, &bgc.pixel, 1, 0); + XAllocColor (dpy, cmap, &fgc); + XAllocColor (dpy, cmap, &bgc); + XSetForeground (dpy, copy_gc, fgc.pixel); + XSetBackground (dpy, copy_gc, bgc.pixel); + } + } +#if 0 + else if ((random () % 2) == 0) + { + iterations = 0; /* ick */ + for (i = 0; i < count; i++) + circles [i].radius %= circles [i].increment; + } +#endif + else + { + oiterations = iterations; + for (i = 0; i < count; i++) + { + circles [i].increment = -circles [i].increment; + circles [i].radius += (2 * circles [i].increment); + } + } + } + + if (buffer) + XCopyPlane (dpy, pixmap, buffer, merge_gc, 0, 0, width, height, 0, 0, 1); + else if (!xor_p) + { + static int ncolors = 0; + static XColor *colors = 0; + if (circles [0].increment >= 0) + inhibit_sleep = True; + else if (done) + { + int fgh, bgh; + double fgs, fgv, bgs, bgv; + if (colors) + for (i = 0; i < ncolors; i++) + XFreeColors (dpy, cmap, &colors [i].pixel, 1, 0); + + rgb_to_hsv (fgc.red, fgc.green, fgc.blue, &fgh, &fgs, &fgv); + rgb_to_hsv (bgc.red, bgc.green, bgc.blue, &bgh, &bgs, &bgv); + ncolors = oiterations; + colors = ((XColor *) + (colors + ? realloc (colors, sizeof (XColor) * ncolors) + : malloc (sizeof (XColor) * ncolors))); + + make_color_ramp (bgh, bgs, bgv, fgh, fgs, fgv, colors, ncolors); + for (i = 0; i < ncolors; i++) + XAllocColor (dpy, cmap, &colors [i]); + XSetForeground (dpy, merge_gc, colors [0].pixel); + } + else + { + XSetForeground (dpy, merge_gc, colors [iterations].pixel); + } + } + else + XCopyPlane (dpy, pixmap, window, merge_gc, 0, 0, width, height, 0, 0, 1); + + if (buffer && (anim_p + ? (done || (first_time_p && (iterations & 1))) + : (iterations & 1))) + { + XCopyPlane (dpy, buffer, window, copy_gc, 0, 0, width, height, 0, 0, 1); + XSync (dpy, True); + if (anim_p && done) + XFillRectangle (dpy, buffer, erase_gc, 0, 0, width, height); + } +#ifdef DEBUG + XCopyPlane (dpy, pixmap, window, copy_gc, 0,0,width,height,width,height, 1); + if (buffer) + XCopyPlane (dpy, buffer, window, copy_gc, 0,0,width,height,0,height, 1); + XSync (dpy, True); +#endif + + if (done) + iterations = 0; + else + iterations++; + + if (delay && !inhibit_sleep) usleep (delay); +} + + +char *progclass = "Halo"; + +char *defaults [] = { + "Halo.background: black", /* to placate SGI */ + "Halo.foreground: white", +/* "*xor: false", */ + "*count: 0", + "*delay: 100000", + 0 +}; + +XrmOptionDescRec options [] = { + { "-count", ".count", XrmoptionSepArg, 0 }, + { "-delay", ".delay", XrmoptionSepArg, 0 }, + { "-animate", ".animate", XrmoptionNoArg, "True" } /* , + { "-xor", ".xor", XrmoptionNoArg, "True" }, + { "-no-xor", ".xor", XrmoptionNoArg, "False" } */ +}; +int options_size = (sizeof (options) / sizeof (options[0])); + +void +screenhack (dpy, window) + Display *dpy; + Window window; +{ + init_circles (dpy, window); + while (1) + run_circles (dpy, window); +} diff --git a/hacks/halo.exe_axp b/hacks/halo.exe_axp new file mode 100755 index 0000000000000000000000000000000000000000..5b6b9fb9dcc3431a55f0a96ac813714ccc12f483 GIT binary patch literal 25600 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 literal 0 HcmV?d00001 diff --git a/hacks/halo.hlp b/hacks/halo.hlp new file mode 100755 index 00000000..61f37105 --- /dev/null +++ b/hacks/halo.hlp @@ -0,0 +1,55 @@ +1 HALO +Draw circular patterns + +SYNOPSIS + $ halo [-display host:display.screen] [-foreground color] + [-background color] [-window] [-root] [-mono] [-count int] + [-delay usecs] [-animate] + +2 DESCRIPTION +The halo program draws cool patterns based on circles. + +2 OPTIONS +halo accepts the following options: + + -window +Draw on a newly-created window. This is the default. + + -root +Draw on the root window. + + -mono +If on a color display, pretend we're on a monochrome display. + + -count integer +How many circles to draw. Default 0, meaning random. + + -delay microseconds +How much of a delay should be introduced between steps of the animation. +Default 100000, or about 0.1 second. + + -animate +If specified, then the centerpoints of the circles will bounce around. +Otherwise, the circles will be drawn once, erased, and a new set of +circles will be drawn. + +2 ENVIRONMENT + + DISPLAY +to get the default host and display number. + + XENVIRONMENT +to get the name of a resource file that overrides the global resources +stored in the RESOURCE_MANAGER property. + +2 COPYRIGHT +Copyright (co 1993 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. + +2 AUTHOR +Jamie Zawinski , 6-jul-93. diff --git a/hacks/halo.man b/hacks/halo.man new file mode 100755 index 00000000..1538a46a --- /dev/null +++ b/hacks/halo.man @@ -0,0 +1,54 @@ +.TH XScreenSaver 1 "7-jul-93" "X Version 11" +.SH NAME +halo - draw circular patterns +.SH SYNOPSIS +.B halo +[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-count \fIint\fP] [\-delay \fIusecs\fP] [\-animate] +.SH DESCRIPTION +The \fIhalo\fP program draws cool patterns based on circles. +.SH OPTIONS +.I halo +accepts the following options: +.TP 8 +.B \-window +Draw on a newly-created window. This is the default. +.TP 8 +.B \-root +Draw on the root window. +.TP 8 +.B \-mono +If on a color display, pretend we're on a monochrome display. +.TP 8 +.B \-count integer +How many circles to draw. Default 0, meaning random. +.TP 8 +.B \-delay microseconds +How much of a delay should be introduced between steps of the animation. +Default 100000, or about 0.1 second. +.TP 8 +.B \-animate +If specified, then the centerpoints of the circles will bounce around. +Otherwise, the circles will be drawn once, erased, and a new set of +circles will be drawn. +.SH ENVIRONMENT +.PP +.TP 8 +.B DISPLAY +to get the default host and display number. +.TP 8 +.B XENVIRONMENT +to get the name of a resource file that overrides the global resources +stored in the RESOURCE_MANAGER property. +.SH SEE ALSO +.BR X (1), +.BR xscreensaver (1) +.SH COPYRIGHT +Copyright \(co 1993 by Jamie Zawinski. Permission to use, copy, modify, +distribute, and sell this software and its documentation for any purpose is +hereby granted without fee, provided that the above copyright notice appear +in all copies and that both that copyright notice and this permission notice +appear in supporting documentation. No representations are made about the +suitability of this software for any purpose. It is provided "as is" without +express or implied warranty. +.SH AUTHOR +Jamie Zawinski , 6-jul-93. diff --git a/hacks/helix.c b/hacks/helix.c new file mode 100755 index 00000000..25149c30 --- /dev/null +++ b/hacks/helix.c @@ -0,0 +1,214 @@ +/* xscreensaver, Copyright (c) 1992 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 "screenhack.h" +#include +#ifdef VMS +#define M_PI 3.14159265358979323846 +#endif +#if __STDC__ +#include /* for M_PI */ +#endif + +static double sins [360]; +static double coss [360]; + +static GC draw_gc, erase_gc; +static unsigned int default_fg_pixel; + +static void +init_helix (dpy, window) + Display *dpy; + Window window; +{ + int i; + XGCValues gcv; + XWindowAttributes xgwa; + Colormap cmap; + XGetWindowAttributes (dpy, window, &xgwa); + cmap = xgwa.colormap; + gcv.foreground = default_fg_pixel = + get_pixel_resource ("foreground", "Foreground", dpy, cmap); + draw_gc = XCreateGC (dpy, window, GCForeground, &gcv); + gcv.foreground = get_pixel_resource ("background", "Background", dpy, cmap); + erase_gc = XCreateGC (dpy, window, GCForeground, &gcv); + + for (i = 0; i < 360; i++) + { + sins [i] = sin ((((double) i) / 180.0) * M_PI); + coss [i] = cos ((((double) i) / 180.0) * M_PI); + } +} + +static int +gcd (a, b) + int a, b; +{ + while (b > 0) + { + int tmp; + tmp = a % b; + a = b; + b = tmp; + } + return (a < 0 ? -a : a); +} + +static void +helix (dpy, window, + radius1, radius2, d_angle, + factor1, factor2, factor3, factor4) + Display *dpy; + Window window; + int radius1, radius2, d_angle; + int factor1, factor2, factor3, factor4; +{ + XWindowAttributes xgwa; + int width, height; + int xmid, ymid; + int x1, y1, x2, y2, angle, limit; + int i; + + XClearWindow (dpy, window); + XGetWindowAttributes (dpy, window, &xgwa); + width = xgwa.width; + height = xgwa.height; + + xmid = width / 2; + ymid = height / 2; + x1 = xmid; + y1 = ymid + radius2; + x2 = xmid; + y2 = ymid + radius1; + angle = 0; + limit = 1 + (360 / gcd (360, d_angle)); + + for (i = 0; i < limit; i++) + { + int tmp; +#define pmod(x,y) (tmp = (x % y), (tmp >= 0 ? tmp : tmp + y)) + x1 = xmid + (((double) radius1) * sins [pmod ((angle * factor1), 360)]); + y1 = ymid + (((double) radius2) * coss [pmod ((angle * factor2), 360)]); + XDrawLine (dpy, window, draw_gc, x1, y1, x2, y2); + x2 = xmid + (((double) radius2) * sins [pmod ((angle * factor3), 360)]); + y2 = ymid + (((double) radius1) * coss [pmod ((angle * factor4), 360)]); + XDrawLine (dpy, window, draw_gc, x1, y1, x2, y2); + angle += d_angle; + XFlush (dpy); + } +} + +#define min(a,b) ((a)<(b)?(a):(b)) + +static void +random_helix (dpy, window) + Display *dpy; + Window window; +{ + Colormap cmap; + int width, height; + int radius, radius1, radius2, d_angle, factor1, factor2, factor3, factor4; + double divisor; + XColor color; + int i, got_color = 0; + XWindowAttributes xgwa; + XGetWindowAttributes (dpy, window, &xgwa); + width = xgwa.width; + height = xgwa.height; + cmap = xgwa.colormap; + + radius = min (width, height) / 2; + + d_angle = 0; + factor1 = 2; + factor2 = 2; + factor3 = 2; + factor4 = 2; + + divisor = ((frand (3.0) + 1) * (((random() & 1) * 2) - 1)); + + if ((random () & 1) == 0) + { + radius1 = radius; + radius2 = radius / divisor; + } + else + { + radius2 = radius; + radius1 = radius / divisor; + } + + while (gcd (360, d_angle) >= 2) + d_angle = random () % 360; + +#define random_factor() \ + (((random() % 7) ? ((random() & 1) + 1) : 3) \ + * (((random() & 1) * 2) - 1)) + + while (gcd (gcd (gcd (factor1, factor2), factor3), factor4) != 1) + { + factor1 = random_factor (); + factor2 = random_factor (); + factor3 = random_factor (); + factor4 = random_factor (); + } + + if (mono_p) + XSetForeground (dpy, draw_gc, default_fg_pixel); + else + { + hsv_to_rgb (random () % 360, frand (1.0), frand (0.5) + 0.5, + &color.red, &color.green, &color.blue); + if ((got_color = XAllocColor (dpy, cmap, &color))) + XSetForeground (dpy, draw_gc, color.pixel); + else + XSetForeground (dpy, draw_gc, default_fg_pixel); + } + helix (dpy, window, radius1, radius2, d_angle, + factor1, factor2, factor3, factor4); + + XSync (dpy, True); + sleep (5); + + for (i = 0; i < height; i++) + { + int y = (random () % height); + XDrawLine (dpy, window, erase_gc, 0, y, width, y); + XFlush (dpy); + if ((i % 50) == 0) + usleep (10000); + } + XClearWindow (dpy, window); + if (got_color) XFreeColors (dpy, cmap, &color.pixel, 1, 0); + XSync (dpy, True); + sleep (1); +} + + +char *progclass = "Helix"; + +char *defaults [] = { + "Helix.background: black", /* to placate SGI */ + 0 +}; + +XrmOptionDescRec options [] = { 0 }; +int options_size = 0; + +void +screenhack (dpy, window) + Display *dpy; + Window window; +{ + init_helix (dpy, window); + while (1) + random_helix (dpy, window); +} diff --git a/hacks/helix.exe_axp b/hacks/helix.exe_axp new file mode 100755 index 0000000000000000000000000000000000000000..c04942f99114d425461a1ed54f37dbb0daaa357f GIT binary patch literal 24064 zcmeHv4_H*!nfH6|Twn$f2OI_eUj~gB{|$->G0|KGa3=T<6_Ao31Bzl$Ab^%^q9G~S zn63GiZcHD$tI0qS-8S9D6#sO$CZuV%e%oxzZqml?6Yba#r3qS z08PPj?bQvBF@lL_N8QB$d^8|2x@s|db$Iyy+{@2g?wHE|>7S)2=Awi9WIXp)f!iOB zQiL~q-2;U>&L8_x;rje_54g8@H*a21;&P<|&*X6*4;pi{7{-E*6oavub0KlqIN=qY zR-GaK59P_@qQPx*-a0Xg`}h&O{#`hM7&kUX)W9ou{kq%nxJ8)sop5xh3$Z4taa zk6k}6jw!dsTtnh)RBlP8;>(X`Pu=o`Epv18-RmC6EGfv&%-gtGmqiF`{P%fz{(rpx zIvOY|-Cnt?wt8RH4&8{g)z$S}D=FEsb$v;}=8YTkM8_gk6x2LJ&s)t=x`#A|_$*`W zuBxjq-LogNdQWxj-qIR<5dPm$T~(jCr@XXw>+Y%@)n6QiYjZ}cqT&l%Zn~4k_cxkJ z&H($v@Cp7J`l(qE+9JvgTX*d9$M?^x)7w4+uV&i#ewv`qyML;llRbzi(O1Lhsnf^fKX4m=+gn{#Eil#b_)DV4x4Xmq$sHCC&$<$Yoy_&x+&jQJ zf^r8IpU{t$5mcf=!>-S|?4o_hSno9hd8RR5O{uD`+F6R2S+amd?MF7OwB`cn;S`m#WL*H~gAN;vSjokl!Mt;7QPc+FL3NWlU z#-z{|(X%cnPzAo>$6ZGH7!Hy;4AEU-ao90_I6Xi2fxlwV>gadA&Sfw|=T929h!$vn zNXp7fT&%Z{f5PG~JilmR{@owu|7M;s>G{I+xh72ie$~X(%kX^PIKCVDNVKv(x~A%O z(~Rv8wyA&;`NQ)45(b8R0%84Tp1fT?(!%m@c)n;3>wngz3Q5#ix_mx^_pl*fhbKfB zRBMcUZ9>EIvAR;7w``yB|Ge!c8maTf1G&xJ;h1K8rxoV5IfRV>l9nBmTMuo_XC)1D2{A&7Ge~?E z8ymhQMww^WXYm*HeVPehW7uc0v9K;NN)z8KwUp!q4RzaV%gd|kO81x7s;Ntsr7cp+ z9#wNn_wFuNi%LPbu5!1U^6(e`OxwG?dhZfE3uv*iaWv&xa+{6hoh;`{o6Yo>J9m{= z?=7#deH5@2E>{B{LE=u9FBC6~-b#bQ#+v%w)m3%s?yBv3_U$NNsTu;zt6Qn=tEw&E zUcIYocU}1owOSym&UtlCUZRJp`fjhdZ@Rsk{jYuF-E*Z{Xv507V>=Dvjc>%g^Y$L;%fSM4v|vwMeHzk6>v#@CnEqOI1|lyBd? zbNBXAp3o@Gu{@?HIy1#FpY7HA_Ux#dU$0`rUX5|(fMDB>`HW6S$h*Cik!nh7>pqRa zbmrBmd-v7Vt7YYCsk(Ddb!q(~wW_)vaC259=!D``3Bh-j*M^~n(JRxpwP8qxjkvg1 z#d)KCUmZl>QLe61=k3sC7xOEvVlkjhIAXoJqkK<&sjf7v>-eZH*Glnki7VYC84AZu zkr`HI_kX)GH(F0Pb065TQr*wNwWMOvenf4mntIPYX-i${OP8%smn~cAN?W-sO-0bE z*$p-7+)+hfyw#v#N12F6HQFgCU3k)swubT$o})(Fi?Rbx7oJOadhvvR{$#nr2^sCe zu>HVo&_=pMA~*vrEQ%l^y;};%7{l+{@@9qUnTcR zJIzvwW_QNWD%DD>aVs`UO`$TtXLtVlzM@LNTMI|Zl7ZLiCGD-QAjT*G&&6Qb$!Tc; zPilTq(xn zfKzs|bzMTccR2k>!g&mswL&4TI?pLTu%aUKxNKrH%6A%33z>C8Cy#)PJPpgdr*AkT;k3#8w zg%XpaTmenN+!eaiYPN@hzqr9N=(*^)b2zxBbqefFG{05%=h^Vlk#j^lTS;O+9Xa>a z(xS>jqE-d;z2L|Eb76ml>@9Ys*OOLPRM{1Dp5S^fIoslu>z+fP&;HX4dE=B{fxgtS z12Q)-9OL~#xxEp6see{fIqgUQ`oHNP30_z8DbP#wK3ca_DXQGGlH}am|q9{n|WPhTS7)thA7}M z{AkeWj0bI=|7GArQseuKb4tX8t(ECB-p|lS)ZW5;7pM9&CR*2LN049Oa(~B&)5*AR z3cQ^y(Jn2+VlUIaX*tn0y-~T^`1L9k}+ifTu#z^;`oRs(D2sSNJ5^*&SJy zoC`S^_iaUct2_AAiK8R3lVg|R+|PYDiFGtlh5s;J^jm1VmMK4>WumkwZ)hpB-9Ho0 z&ER&mG2NHNxUYj&6m<0<1$y!*yQPqJwDA0+tq*5=NPAzQg)M%}=MdzI2QMrA$luKV z1>Y#7A9Vcv0pvoAzc}JPnL@?RLYmh)mkv0)M<74^bS7PJGVZju1D<1#6;h=PHeTsNj(YLzWY9^ZSI;`q0-$r{>=d+9Xyoj)BUe4Y-&j;>1>c#V-xBczVq40J zge;M+F0I4TtwlF$8CQaHZdlBG2t5^2c?ZkGevi}6H7k6<4*Ra&P*j;m<);(TE~FFi zN5~C0<9)ohs4^XTNMT&Wl?!mrH>}f+qN2)rTGcWiJgk@>kF#TLJZ|y!qRLB#J-zS? zAGP_}o^01b*l03jEu^fLbTO{iqhTD=O`)7to;Sy$y|Sn>1^qVI!zFaq>tURD)<5`r zkq@lK{F>-c%V9dz5<`bG*2ynrtV0>2yqw{pMJ?=8%(ox%m_BzmWH^L2uCE5TKN0;$ zA!j`1IGO2#e@uk-)=|>u?I&Hnc*w%M|8*PZ-(Jrt=!IqKV14BUJl{qPPoTg+4f5|% zS_NO}6|}zZYV<}>V^2EpCj(ytegks$^U(bz@CblD9nm= z!&>jfTAxd=b{5i=P9KeQR?zG-HDPPNiuH!qI}I_8HO@~~Usg7JL7}hvU6`AdlKs5K z+c6h~=63w(apW!Nyas(7kAR7IYyi$!JiagD@jP<)Oj-px)Wd6Ai{&cfQSGs!J{FIw zL_GRH&y2?k(27%1jCf29iO2Vic)a$R@i;}q<0^kg#QlgxdsY-=fGn-NHd>o0PaBUoo?RtLu>k+q{2I%mJ{ zCt1)@gHGpA(Ap77Z-zmS=`cN}!}ORA(_>mc1D&qmQ%!a{rCtiQHswyZsQRd^Nfzt1 zwS#&199ek*(CEeZT!$rZ6MPN74|s@_q=#fjb{!N9;LSR~%2QuM|4a5ktrQi|BZV zhIJ$bIeQU&DG&PdN*DaRm*@w+k{9p{0Y4gL7G3CwLAg%4?4O2yFJ11)!Z?)v$E8&* zrzb|b*U_re&B`5XY`}ZPHpgwJc=t1RQ_e#V6;*S8i@@$o{si9J!^4fuBFB;fhz_;YV2^ljbccqaeXz^S0i$1C7pyjQG{ zUUJ5f|JQ6Em$2`ECtcY06VDH@j!#A2a44U^H@kj4zW;{j0{W+j{u|KcYa@3{1DWqw zkE|I94q{CRe86*J`FTzb$o|Zr#Ty8gov>J=vXUcqVgFIN?n_h4y%y^((aylW#FbF$ zO&;`lOQj^78)~#9sZ>jrB<<~B@Qo?T2au)5b31vz_8Ibiz_5pD6l&kNM9D&X)!=r()gvp>+`SOnqH9=-u!I96cYp8~BWcq0%(t!AvmEJ-Yo4OUYoYq=dQjIV)_@bNV+A^$ z8}W>$D9^5IDroX5)@MX}hownVB}Kzm7(J%%oyJ)9IXqf4_{qllA6?ITS=~RG=1BvO zVeFgimuyRgwDsKo68aCrrd*G*#$?Tp=+mNz<|! ziFCX@-r>ws=|X#)VlDP#KNflEp5z}`w70O9J2lLS^E~Ht4yUF{)-KsZI8Suo?33nU?Lh|knBTo!^c0I1=m8r@g@`Ra}%>E%y3HlS@H&c<9 z`h&rdd!!qgB)L!i-1@UMR;lb{g*3+*ryxH8PeF{^Ak$w{W1kP}C)R|+6?FV;1-Q3Vxs`1LKlplu^h7fB(vnE$*C)_7 z)_---vUZwvs^^}FyE3OK^EN&?_+F0PdUcH}LUP-chz(zxIuHGKdG130CixfcWeKn6 z+%?#h^N5t{j;DWfr%Idf#AOZzy{!)1+29u2eZ;CFZ>A*YMSjhV{R8&4^-l{O4+K1G z9Uta3PmKT%X-yJ%Y=Q5tgzrvpOvq>dt&{5DzbiFA`@6IpetgwE1@}xJMSQq*65Xqv zg3VsAF3n=QCKRP0pQAksL|w>l+8(ctEmtWhX_bi2r%(ng`$T##y_wQX^dM zIAz`jJ?7Lb75&Q+B=7P;@@n!NEuL!KK8cVYG&k!(mAW#-dO}mRqt=8hmZvasdM3|_ zD6vU%sQF)+Ixi>A>VlqK?z99cXT>1p9b-Fo@T~f3A4yjw4hPh3ppJ`vS z{w(W*h`?5!`xheb&17A$UWx8$;<@>-XYgTO8IG%Y)1YhCiR8%03q)Ln9%dcGenIHr zICLAtn@i33d)wTM`e5)AKjJ73aE?zthn+$k{S$nV?;7o$ z0nZ_0+>{die#eXbTPp5%ywuvJz~4A$aUS8E6^Zk)zAodeYTRAE^jJ|PpKn<&4#WZ9 z$+FzT&>{2WeIE95tvt^f$jtJxoZQDUpM<>64t~kYunE>@vld3|&X}N-umAGd9S=;f z?#^C-b_^}ZSn!Vez#hxtj0MsnJP%~xF7FeLhw}>Vc<0Y?X5(zj_c-6OWo9U8joQBk zU;Bh}h&gYTgL6m_bDxHJYtSS2an6dQuJ^lu%lYgga3(_*2WV#j_g4DbZ|V@m1I6kCR%ZKZN=TS^twc%c7TTXPS*cwE7=D@7vgD`Kl5;)y+6~xs zDc?cy-P0E+6=PEGXWcynogD()4m+`pRM-ta3+yprxSMs(0F3)FX#rOOn+h0yUNeg4 z1uV|MOEBQrgF0gX@MNH z;6Q7~NZH9I?15Q-eCNg`pPTsZh3$kj>Lkv`ZHI7HZw~pMfxkBq{tr9p-`&9fLu}>1 zx!O+snfcBJP*F`At(DF`xBpMzgq@5(kTn;?|{a71KbOpvMz1V zCG_N<4B0pzXqcA+{TDGWo?o|^+oskozFu!nmpH%B}7QTo%>fa5) z7sI|!G3SXno=bs0x^Q2V9x_kFpqQtM@1Xu;WNe-RW1hXYnCDX=^VIYDd!u>%Cy)#C zY%=FrgZc41`wcq|jmT{T-M~LvyTyGz@x4&16?%%tJj3bzqdw0Po+svrJXwr69%xGs zn`eh%&++qou~Wmnn0MTKIj{W=`^8oGKI3CgBj){G%sT@1T}J*MUN_jL>6|wpcO1@+ ze6PXw-SBWxWjE##3HufXooz&$T66I|1>36wbBTp*Ie%H<7o4}u@tkLtM&qo9|7!0cZcY1b725 zDhJ(LQBGCfai`N=e*O;b({?!Crr}=93wz{-#FroT;JbQ`v0K~Z3hp6BaA!HT<|yKO zIA=SrJFLeD*opO+2z}N-PlyTJ;~z)NT@W!Bz&$iIP*x`9#`rv6#&-Z8>j3bM>#^Ax z@cfifUe#89!{Z!6Q@P-Nu!105W5EGO)J5`NmIitn{AU{9m(2R=)# zZpd})c5;Cq%T)up78-J~pL4vk|FT?lf1+HCgO(hX?rjf1Zz*(dlVqheG0Ns``gtVP zIP>f0k4-ptB;gFA;taxPG2}a(KjQF^+lqZO9^?K}!hIsn47BaIomTtp^x)Hp_{{^J z!>=b?-KsjIyoC-eA7_$+wT^`aD(b0@P5E~^)&iy#Y;tTW$Z_NpV9z`-K}p>vDLKV6 z4ZopuH4A@R^^gTIBSB8?pMt))LWZYqvygg2hvyV?{MZ{zH~~%%nR%0rs#y}^IvO<0 zdOZ3i(1-!Q34kZkjHY#t#{3M2nx{E@`M<^4?gN}_u3~QZ4abXk+VwfkZpYk?;c1&p zzTY7(m+ZGJ&)F<*$%$7A)}Xz5GBpD3So)~Nky9u;)+Q>`kP{vEPbNR$E0)w+R(SCp zWAY|>MNXWu3}aTT=HEF;pmie}w4!xdXs^DGdmIV0ejg25(K;=(@7Ligmi#Vyg?Cf5 zPDcVAhO>QpgAYCp8=d9vh1piH%~?FcW{LRzlWmho2cPpfqVs-~@Zr`{$DMhs>xUf= z=l_f2$@~epx3Q4_2Qero0B+9cxl7x}V)iT)C#_B;W*sE z^1XV!qp`r}@E0s=z`hLYs{}bu1v~%z5!~N)1k;+%2h-ZSf_YEl_Yux1Hco=S{q@xBwSak+1NNZ&gnMN|Y0mONU(RFFW0{lb z&)mzU$K1=LEr_*Z$Z_B~nR1;9)g(`b{A{mE=)Mnk7RdXEyW+2NJRle0w?LPl`*Fgr zw=Q&4<;N<&DPHXOCgSeP`Rg6e~4Nivr?8>)_ zXTSyt>6#~2sVv6c`i31exR2v5p^)K+L*U;MahK2#3a>0S<1XQ-#{2SX6G6kQPXb*# zXvBgS?k$Qpz=pXFsX%h6+7?G?K@9ZwVZ^Tya|e!p7}1Zi7<+E6e~h`_MC=_nj{VKa z>3Zxf+HTph)-7+r*)1~*v3K8e(hy^{i|Q=D%lVG&F8qd})@xDf&{uokH1d5+^dQE} zz?cV(F%RDNeDMCkPp>;T-x+>{I9&8zH26g8e9*oxAmXxi(Z|uh%gKz^c}U=)!yg1b zctq{~7 zRiarKt+!9IVR>! z3W?jv4Zbz~!N(A{J|k|qe?s06#=sALJ_$b8jkvuSe6T%6`El_^$JP9gB7U<~rB{z* zUjFmJe|(yMgYzWr$|qZ;tmP4ZZRn*br3(U#+W!-=H_up7^gzlu#J=T z8c8k{`gZC$u{1w`{E|YmkEPH-e#iG!_F+36eEKH|zk!clc_EQzcO*HM zV(lo+Pja;6s}4WblG1#{TfT;Mg<%|r8L$!ShvRD!Y{l_L(6t@5;&pD4h>c1SZ}HH# zUBsbwLx(3l#OoYE&pMp($JV*{qrNq`CcGwrhFRyFuE$)`Lu~6@M|8nP#|Qa2j(>*k z`?m(h^xwww3`Bf@`5tU{q3)t>?UPAGJe|fG7w65FPv=Zg&SJefjWtf~$DROdTq)K# z+(C#nPQn^Tz_%}Y#FCrC@uSIhFDY?|Kl^?98h09N9B4)Bv?S2d*D?uf9B4)Bv?P*@ zHO{{1x6z;#t<#Y}hw%v?KL4fAjJ8qe|@|p4rIE%3yjA!;UJQsWJ&FEto zpEr4&{=Eb5(aTP*<-0Awea8N;0tC6u+auI&^aEZsItf+uLxb`Kj|F?~`3Oq#U*#(;3^xkL}?xzq7m!gMSl#r_j!8 zG0sWI&1ENj*c&uX32cRLHP3|%INP+rCxr}Sd-JhP?- zy0Q5j!h<`aTYeDt#19VX)UOcrM(U*x2Y7CqA9NGCD3>cCAG6sEA`yUdyBSXx9+L5Q zU3ePt%+#Btp=`wC#{;J)6$AS5*nyLarx}kQPX`_rtQ${13kX?|r%1z7gU64jgX>`0 zh^HBkA5RyT5S0JkvkMP$f|y?bB@5@n6TssF{Qw>fv>QQ(=jy_^Ts$>+8u4`F>Br*( zoo+le(1{-ph7-`K->8En1@Iq>33PHX02PNe{MV4 zrx`WlJqly*a2Un-;}vuKq_B55{P9s^z2#Dj@9BiMck^g3z z{|NYO(bF$4@4JN7duYi6 zMg?SIY}bG`1aj9I-ND7v5CWtkn8*jfS9o3@2{Jvs{lnmcj*ly8h|2*CgDz3~gh?|9 zl>u2A=;xNz_6H#J^~9#wevAItzFt}GlPx{qr0k*LcZK+hE%-25Vgy~Am?YYbkYY%- zvWSs7WvfxaoZpr$eUL*|{NNXZ?r3HlkFi$KoX{&y=*N3?GIyhCf!j%}7CuNsLwmt?}5S?l>23 z3=m%4hb3dO9&@<0fR{&>l(0jx*h*+zRG=Y790CsuT_ESU>z|I$*DC$X`{RU*1WA)(G)=cIrJkA9cIOZ3?s*UCyj>t(e)1~Wy=6U;va!+K^|3X z7xZy@MWh3UJkFG+tq=mpbB2fHg>1B#6(oP5AE6SBiZnbRMq|gHo(P3R4$B2dyX$OsfJP)|xz8NQN!6f-(Z$U7Cx3*4d@G)R;wVgL z=n(iVT|rMl3eMH24j)13S|OS!L^D-yq8N^Cuq_q}(ihJas9Qit>Z5lt?p{_I(%nqk zRj6zmYhZkZml!~X}M{qQQq zc7vH(xnOQ6Wa(WUEK9t$2*~hm-5UgQBE#4r^)BEHa@(pGIz^+|k2TF<`wfV08NhPW zr!URk74+`gVu4$`g1W(V4I8e%_w8Oxj#HZhIY6YgN&F_0(S#;I-=AP+yIXV$&@D!e zC-HwDYdG$IM`$5^o~eo9XjTb!eE40wSlR9vx3bwbXK&eB$H zKd5Z4UJMdie+`u}dyTF;LkY&ZQ;2mZi5CcdwFbZT$-#0Me;7Yr5XLBALC%A%CD1=S z(2u?4Yt!LrF^2$h~P<>Oa`sHS}US_1ra|9JTrV?N9GW0vn-c5dlXpT1Z9xy~DfEWxMe zvW|LyKgzHPZ!8fEd$IP;VTJHJO!}iFif4t0_YRC_$Nhp`;M43roG!8g3P@qFdlUGh z?DpVAXXDxND_QupXM$bL?uPO`eiVi)nWyFh4Ej)9qm9L?tbgI|5q0e_4ZZ)7Opw?GItWVkq6#LW;3 zmSPhX-c^l>1|7xCB+PVlPKUtix$DgnOXi zG-tKVL}do1!wEPYb(!<*${BPglpuEfx>v2{F6JRBjI4nfbTANG$kUw*xksn#n`2D3 z1~(bvY$ox!YKf&sF zW(tS-qf=mdY|_|3fON5a6x*|aieuB4rw9i@0q9=3!pr!mJ~)7|+^KHV%nsb81hA=UP z8=hn-tu_?8e5Z7&L)&`C-ELD4qtdxRCNn^(S@$pbJT--R0h-t7ph>sIc>w1sp3 zJu0_w?o0CwE%Ht6RMsNDnrR3+wQYZN`=0WWihX*TW3bTQ&xP!7iT~NaseFaO6_Joo zF+Cxb<%TE7F0R1xVIK0Qcmzvec!jJAt^EV&+C^mK4#(anG@ti<@Pp>%JQf9&p#eFS zt@IpV8(0_)uVusXY_pE*9Y8;A4~RHw5XOLFQ&|GNDk3h#61}p=2sOPDVg}ZpFvI<* zjG5sUpi%$6Z-HT%br`{ECwW}jiOk=!E;~E-R+)!iilreAqU(^l#p`!)!^epja1pwP zoE%-yji|6@42WJ4CpQ5>^zmGua|)-$D6^?=9{z`bFw&)-9^O{Syx;nofWE6kaF7v; z>k;rCotlcb6N-%5h0qnN4Zlx|-&GhlcEm2(SGT9UTn}FE7F&uFpdG^^ab==eiNRLF zYJ0_rg+=%JJm8OVYcsjk82KB;e}&I1g*|~k7Q%%EZZ;&!fkODU)DN5U1=cYxa9!lU z|NIU@3=!`l3-1C&{i?RKNY1U>$CtD zGN5fozukZjV(0!(pvz*2cM_t_@APv+KHii+4VoA5rN$S5gDUZ2_a+GOg6Bs&4FW#^ sT=88AOwZrX@VnT`(8sRXg))GVEI+@CP4LFM(zwmnDgp_1=-2{xv z3GJzEJ$;@N+G2}+HsKMcia|KV* zI$1%;=IHp2-UWJV;&D~H#!Wy7Nz{|pOtn4Ycy?3G4*lv=PefzCB zUztQ$h>1W&@;ww2N;*l?`+5d-3ox_dxMaOOi_FIR8z?Dyn$*Y>1_OFt&U1SGyM$J>*(@|0>5Cu_QY?=O%Io7xSRAcErDjKY;gtK(yujH>DVf6@A%wLsqD8*Z+z^#r|MUv23&Z;;Q) zTDoirU-mfvKxs{tm)}tOSe37KOBKKP>yJH=SL5;5WTD(lN=h8=he`^?_3NGF)}Y^C zN3!&%Gq}}DZUs-d|FJmeYo*n-fYtbYev+j>4I;>`E3K|3S@Fthf3-hYQyL&T`W7l~ zMQUn=&V5Uz*I(nU3qB6W?b+G&DC8C@Ym(v;DJ$ZfX+^v@81x7EDj&b7c10TD7yJCa zic)l)b#od4h~Mf9dOiM1UsbKQoc9Ons{B6w`bD+Zr;+t~qZYiL>aFG86+B5xP36Hv z_}tQ9<=tcnPqNa8KB!fGf3>&NM|3kJ8kZB;yg+J(x6Mb#6dS%u%-s-A)qCc}HDOT`h)esN4S@`Gokvi(W$Gx@0 zUr|8})5B}jNQ-Lunys~Ue3_RoGe)|E_xbAphXMFS<@_SgrF5k}7_QD+=?zXJt**Ed zEniXXFRhzGNIUhE`fjS@1Es-QFYlq@f$j{SdHh?e%PA5OKj>q(>+gc0iaxZ@u#uK;PXOp4#c_kT8mj19LEWE#b1;35Pd)DS9+mJbO_?$cM zTy|Ub^4pf)&M#fMB7512rOS9E4nDs=z%Miyr$6t7oCoyfg%AO67s}tq+aA2DQ2g=s zR=l4;`BuEW3-9Mp{u$*zP=1GU>F>Wo$4g~?(f+~${~IlETHh`HWzBl8fZt9IFW%Us zo;#^&&L;K7UQKg^L!8hlv@Exoa(0vO9?sQO7~W%U$yG>n-*UwjGifdJ2?+~@QK>&F z4Me4(s5GJg?}{aBF8~!0G9K;{BT|1xKGP+=7p4E-k4hgzrJktNt6ZlLg+VD)R=qX= zrgW`RXR^(XNbhB&ggtRi^BlYYf4bk#e3!qfip8@95b$#`^qe*S}lctG^S_ws>hffg21G0Yync`7G zW+lX-*>bgR(Am2iHQM7&V6C$wLiF%iO3rHE1)xj7o*Z`ARS*uDh0aYGw$#o&mQcEl z{ZYa00)c}qM`t&^wM5%ESGy1NO_~?ahnv*#6Pi}kq~7+SrWMw6>bqmGTPvp?!~3@h zyE$mL*MdGQ{1$d|MAbb&E2u*|E8x1__QP)KkAVL%V{eyize-=4#6OC$re)>?||c*yB#j07g3s%CI0toEgbGlO0wQv&*sD zAsiCKL#)`kLBxD)T!$E*mmY1;);p_$I)}s!iYwZFI|Z1kz?&LvUv6OA7-%7Mx&;cm z$ABGoce(+!n{sL}fK@tBTZ4`j1{&OfO0@j}Cfc6QG^sOZ5aNijp0J?GF-;50>Eh8w zdd@uj6cN#KHm&MdeTY##i==G3MB_F*t)$ zP}M%b2ZQF0T-e)en0$*JqwlEKd{#eTpm-G&hTk^GT(sQ}nI%*vGE0^MOuFt-W$$A6 zQ<3d(L?#s>_!QrS&>I1ohuPQdJ-j*bzGeN3FOnAt*&%2e(QuMpZ@iKFXzree z+?`0;%aFAHktS_tmy0ItTTrABg1&)ds^O4bH|`iyzorRQxY^7b!u zrYU)Q`CrQ0-=sYwZ!ZgpaWC{D1(vcjB2;e*o|-w3mq?M%^fY; z1kVwJ=V##QdbmL?K80lHd$_owaoN4l5x-(@@v%q8g}K^yKp7C)4-I*bRgD(|@Td;h ze8^lh*jR~gCJ(=kB+Jnp90{4{%#R395Q1g&Nu=Wf0TUZz3~^yGWX}AMF0Xd;TS9>~ z8F@J@6oiqX_58e9gEt>UN_NGwKda@VpJr*##A>jTsw}-AhNY0>byoDf&N^f+?30(Y zhSFtD&h9G8ZQRT_!=X&aoH@|JDLmy zSn}eo4H0=Uve#XV&nKIG5Nh#3uH6^1$UFuiFN6BUP1^S}G3KKody$AvMBzzYgwfGF zGy2ivpw$rU@UH&Z8rdRjlFh=`1^3a={3~%Khef9~m5K8>z4sn{dWOt{$quGMMb4)G z3l+C=w0*83uThF)DO-+)_$!G@p$eo$glYX#QM7+~$Tsgk1OoL9*v#nWMV{9Y;=-c77%jgq{z9H>29ugCo~+J&E$7Gq?PSf62SE|D3i86w>Wj&|V)){!seY42!bn2W zh$Hi3WT7OQg-m)50xf(oopwm49lDH``Xa-W(=Z-UGY7G+oU62lQIHh$?J{Q}B@Kqm*Ca;}vN;2Dr}DZzxl z6Uh#1xLK`Cr5U;x`vYV~5&IjH7Qi1Juoub5PynZzQQ#H;tu|&tTMBanrpODY{dX%e z-%VFUZ+D0*R4QVr$NqEy=cNklAawd9q?>JE#MWB2%-I;Oz`WK<^)BOc54l!fbQBRA z4?Kv{{^nf8i*+(Zdk=q#K!wrXK?Tln2v086!`GIc+i1B7dwq2#R@vi@PKRun_p^A; zVzmPxkNB{`!ETWr;vg9IPSSQ#d5rQVN1)%Y^ag|mZib zbkg+Jz%X*;j(4$xQPfRmu-11B#31RL5D@jyMw9k9>SBy7Lx%>oOi^nu_fhEj4Au3W<2Wn9)!49@or)TQ)M&>psz?VUM=NNfNjr+VuCvQPLgfa7 zl8&y0QtpS!yU;4bHpi$mcRVw!tGp{lxfJy#LuI?6a&{{N0;+Q(0AazQps95199A4O zmM9DWan~wO*nz1W5xPVygkgs};;@-8if(C_>se36txVYEJnq`*DfoUt7t4=3p7q$ec6k*ydi)qM5#7&4rCm+h3DoJ>V8yGW`%?fj8Z)E& z(-RFFN4K)k{T7|$7t=U06GR!{xH{3$RYZdZiCU<_svpw7)hXJmV20nC@xmZ-;fG%8 zhX*6Zt~c(7g_NUXkoqAXlr(k*;fK58J>#6DBjJbhr*%r|hifP$4V}S+AM{FdM<4t! zM8T9xQJcX+V;#Fl44V3(PxnI#_-X8*sdT8rdh{HlTTKAs;iLP3ZnO09HA{ok!7X=# zl+#`SX(uDtW}(Gs-=U1sh=4N^olc5cKoxDvhY5ZK6#9Q2FP-#ZRN}VyfZF1ou4%Tg z>m%%=wzw0N)E0fPMGoqTn50P9;uCCnfuy#WO)04@XiJYtz0%xq61M24U@ApXe+U-n z@|1pB(rs~4w?zy9-4-Wdi;oOjv{4uYTyBf)0@p0{?Z6amsnTunJV+;P@dR1{Ou-3T zIR-i?6%`TQsSeV3?eyn3et19Jhd&nxh})z@K*} z%t4Vb#~=HtIr^zN@MmSi9JHmIL$5S<^cYjLALi(XIi3Ow)Y*zv0HKkC(CE?4(GP%b zjvkn!*D%K~DGd08Ij~)0x@c@H$Z^+30~F} zl-M9OX`Df7H%LPu{hmSUr=+tP-9}$VJuLMjk%<|pI%FOo(Y7}UW*hZATF`z$IFv3J z$NWQ2k%I6cdQe`uXPFS*BwDY_~HcEX6}+k ztdGKmarBWC1}vPHhLL%@G-RdwG~ke^9T_Rz(tv19V!EXvEYi^<)=An-$cZ>IlDfch zeU~&qhss3o^~{R%MrHJfol!Q!_FsaoZy~95N&~qI7Dc2HTT(Y~8kozM-r;`QDWq@#A`YK|h(`hnbvITU-ZtHcF zjsr~e1zZMb7U-yK+Qf0L`+(iyZQQYje!d~ZCsYZZ?gR6ufN(a|Vf+-B8=y99q%iL6 zjky@DPr%2CgplG~d|dDe?n#I{7ZVgmy-A3Ok?;XG4w+2hqcZQd&p?9*&=O`TK(wb| z^nBQahDDsip<(f0RJ=1F^S)ZxXS-|<$adLmy)PnE0xp|73mMx?kLVUEojA-`Z^YOO zVWTqrNLgwT0kct<$u^_RU0i|vwY^xj*UEM~w`sm??>=A=y?5xR>au`rK9Cvky>HjY zXxZ2n;zD+@JCyAVm%CnfiA5fKHkmK@T!oc|g3lAOgccT86c%IW>zb1resc*CnWO0r zp*e4_86_Eo+f*E~AUqm2$(bQDVx{3w5vC@#s%G^ygdyG6md|^GWAGh*{>B|rFI|G9 z9?UIAZi~4gw!m`BQaBTbni;V8)K{S5qz(R znh7;bvMoSI_nEOyOck+IQOEyGMO07`>k}dlf14y^9R3ll#)aGnf-tks!ZG@Ht#vrv z*i-Tvzk#p7VxcHhG}b*p7Sd=Iwh8LbsbIAQPjtTqe}~1lxaZKK=J?|Gf4~BH(2pnSLKH4}A0{8T}Lddrm?=SckiV4&2FGj{regmV=1RLLZ9=S&XpB zTme`v?mYlr1b7eNxhNLEEq5C-A(9j&88T@g1t9!o6nuLmSd7VLd~j;V=P({epI5Mb zt;fM_Cl10dqb$aU(#=rF0vx^U_X@V^djKE6$ADgxJmB)c+Y6ipU!3bvAdX-sM267u zQ|RXzlsc4OqO8S0Lx8V^B5U#fB?`6An|Qwo+$i4L(S9DZU0CDR;!S@`Ktyds@Y$QC zH~B94pIeN|$nL za%1wda~hOslXoURFRM!?;+u8CT3oyqimX<<;IGD2hN~KSt)SjY+5(V zG7^als-K)2hJZ2h$zVSjI2#=#!((LZ++hFEAccR_%`z9xj-xg(tj5SVIX`@cWy#4i zWc&min$9FV^QB>f1hE8Ez#4I@py@GRyY$I9q(h4 zG&b$*-~e1PIvPW=ya3}Jeg~F%%tEb-^lMWl7Lm>)#smcwv&C!?f2N zB#UoFxKoPw&Bv)EPs7q6c^PY%P7=TIIF%$FB=g|&+pxq?Df&&vD-g72#|Z*e_1@~K z1mA)L_-yS`_)NbISwin3LO}rtOr__)0z4H>!BZJOG6wL}vbc8fyNOdtun5ut>`sux z?cDyR{P`2)%$W$uK;Ba`=iM4ifvA7cghWKOueNq#q9r^mHD*%yJq#8x#3G^7hzAV+f7+(Mt>g zfjCh|$pDF+9wq1W=SOrlo2VW!6?4+0f#hubMctofxZkwKQ3!K}Fyyq&wcASS{3XH4 zGMIA&wg6(^?LYuR5x@h{1H@d+v9A&`yQXxDw?w~%K_@g~K))4A zGx0HWkKkB{t%r4Trk8B3t@e7U+Sq, 13-aug-92. diff --git a/hacks/helix.man b/hacks/helix.man new file mode 100755 index 00000000..e79cec06 --- /dev/null +++ b/hacks/helix.man @@ -0,0 +1,43 @@ +.TH XScreenSaver 1 "13-aug-92" "X Version 11" +.SH NAME +helix - draw helical string-art patterns +.SH SYNOPSIS +.B helix +[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] +.SH DESCRIPTION +The \fIhelix\fP program draws interesting patterns composed of line segments +in random colors. +.SH OPTIONS +.I helix +accepts the following options: +.TP 8 +.B \-window +Draw on a newly-created window. This is the default. +.TP 8 +.B \-root +Draw on the root window. +.TP 8 +.B \-mono +If on a color display, pretend we're on a monochrome display. +.SH ENVIRONMENT +.PP +.TP 8 +.B DISPLAY +to get the default host and display number. +.TP 8 +.B XENVIRONMENT +to get the name of a resource file that overrides the global resources +stored in the RESOURCE_MANAGER property. +.SH SEE ALSO +.BR X (1), +.BR xscreensaver (1) +.SH COPYRIGHT +Copyright \(co 1992 by Jamie Zawinski. Permission to use, copy, modify, +distribute, and sell this software and its documentation for any purpose is +hereby granted without fee, provided that the above copyright notice appear +in all copies and that both that copyright notice and this permission notice +appear in supporting documentation. No representations are made about the +suitability of this software for any purpose. It is provided "as is" without +express or implied warranty. +.SH AUTHOR +Jamie Zawinski , 13-aug-92. diff --git a/hacks/hopalong.c b/hacks/hopalong.c new file mode 100755 index 00000000..ef409f8f --- /dev/null +++ b/hacks/hopalong.c @@ -0,0 +1,236 @@ +/* xscreensaver, Copyright (c) 1992 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 was ported from xlock for use in xscreensaver (and standalone) + * by jwz on 12-Aug-92. Original copyright reads: + * + * hopalong.c - Real Plane Fractals for xlock, the X Window System lockscreen. + * + * Copyright (c) 1991 by Patrick J. Naughton. + * + * 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. + * + * This file is provided AS IS with no warranties of any kind. The author + * shall have no liability with respect to the infringement of copyrights, + * trade secrets or any patents by this file or any part thereof. In no + * event will the author be liable for any lost revenue or profits or + * other special, indirect and consequential damages. + * + * Comments and additions should be sent to the author: + * + * naughton@eng.sun.com + * + * Patrick J. Naughton + * MS 21-14 + * Sun Laboritories, Inc. + * 2550 Garcia Ave + * Mountain View, CA 94043 + * + * Revision History: + * 29-Oct-90: fix bad (int) cast. + * 29-Jul-90: support for multiple screens. + * 08-Jul-90: new timing and colors and new algorithm for fractals. + * 15-Dec-89: Fix for proper skipping of {White,Black}Pixel() in colors. + * 08-Oct-89: Fixed long standing typo bug in RandomInitHop(); + * Fixed bug in memory allocation in inithop(); + * Moved seconds() to an extern. + * Got rid of the % mod since .mod is slow on a sparc. + * 20-Sep-89: Lint. + * 31-Aug-88: Forked from xlock.c for modularity. + * 23-Mar-88: Coded HOPALONG routines from Scientific American Sept. 86 p. 14. + */ + +#include "screenhack.h" +#include + +static GC gc; +static int batchcount = 1000; + +static unsigned int *pixels = 0, fg_pixel, bg_pixel; +static int npixels; +static unsigned int delay; +static int timeout; + +typedef struct { + int centerx; + int centery; /* center of the screen */ + double a; + double b; + double c; + double i; + double j; /* hopalong parameters */ + int inc; + int pix; + long startTime; +} hopstruct; + +static hopstruct hop; +static XPoint *pointBuffer = 0; /* pointer for XDrawPoints */ + +static void +inithop(dsp,win) + Display *dsp; + Window win; +{ + double range; + XWindowAttributes xgwa; + hopstruct *hp = &hop; + XGCValues gcv; + Colormap cmap; + XGetWindowAttributes (dsp, win, &xgwa); + cmap = xgwa.colormap; + + if (! pixels) + { + XColor color; + int i = get_integer_resource ("ncolors", "Integer"); + int shift; + if (i <= 2) i = 2, mono_p = True; + shift = 360 / i; + pixels = (unsigned int *) calloc (i, sizeof (unsigned int)); + fg_pixel = get_pixel_resource ("foreground", "Foreground", dsp, cmap); + bg_pixel = get_pixel_resource ("background", "Background", dsp, cmap); + if (! mono_p) + { + hsv_to_rgb (random () % 360, 1.0, 1.0, + &color.red, &color.green, &color.blue); + for (npixels = 0; npixels < i; npixels++) + { + if (! XAllocColor (dsp, cmap, &color)) + break; + pixels[npixels] = color.pixel; + cycle_hue (&color, shift); + } + } + timeout = get_integer_resource ("timeout", "Seconds"); + if (timeout <= 0) timeout = 30; + delay = get_integer_resource ("delay", "Usecs"); + + gcv.foreground = fg_pixel; + gc = XCreateGC (dsp, win, GCForeground, &gcv); + } + + XClearWindow (dsp, win); + + hp->centerx = xgwa.width / 2; + hp->centery = xgwa.height / 2; + range = sqrt((double) hp->centerx * hp->centerx + + (double) hp->centery * hp->centery) / + (10.0 + random() % 10); + + hp->pix = 0; +#define frand0() (((double) random()) / ((unsigned int) (~0))) + hp->inc = (int) (frand0() * 200) - 100; + hp->a = frand0() * range - range / 2.0; + hp->b = frand0() * range - range / 2.0; + hp->c = frand0() * range - range / 2.0; + if (!(random() % 2)) + hp->c = 0.0; + + hp->i = hp->j = 0.0; + + if (!pointBuffer) + pointBuffer = (XPoint *) malloc(batchcount * sizeof(XPoint)); + + XSetForeground(dsp, gc, bg_pixel); + XFillRectangle(dsp, win, gc, 0, 0, + hp->centerx * 2, hp->centery * 2); + XSetForeground(dsp, gc, fg_pixel); + hp->startTime = time ((time_t *) 0); +} + + +static void +drawhop(dsp,win) + Display *dsp; + Window win; +{ + double oldj; + int k = batchcount; + XPoint *xp = pointBuffer; + hopstruct *hp = &hop; + + hp->inc++; + if (! mono_p) { + XSetForeground(dsp, gc, pixels[hp->pix]); + if (++hp->pix >= npixels) + hp->pix = 0; + } + while (k--) { + oldj = hp->j; + hp->j = hp->a - hp->i; + hp->i = oldj + (hp->i < 0 + ? sqrt(fabs(hp->b * (hp->i + hp->inc) - hp->c)) + : -sqrt(fabs(hp->b * (hp->i + hp->inc) - hp->c))); + xp->x = hp->centerx + (int) (hp->i + hp->j); + xp->y = hp->centery - (int) (hp->i - hp->j); + xp++; + } + XDrawPoints(dsp, win, gc, + pointBuffer, batchcount, CoordModeOrigin); + XSync (dsp, True); + if ((time ((time_t *) 0) - hp->startTime) > timeout) + { + int i; + XSetForeground(dsp, gc, bg_pixel); + for (i = 0; i < hp->centery; i++) + { + int y = (random () % (hp->centery << 1)); + XDrawLine (dsp, win, gc, 0, y, hp->centerx << 1, y); + XFlush (dsp); + if ((i % 50) == 0) + usleep (10000); + } + XClearWindow (dsp, win); + XFlush (dsp); + sleep (1); + inithop(dsp,win); + } +} + + +char *progclass = "Hopalong"; + +char *defaults [] = { + "Hopalong.background: black", /* to placate SGI */ + "Hopalong.foreground: white", + "*count: 1000", + "*ncolors: 100", + "*timeout: 20", + "*delay: 0", + 0 +}; + +XrmOptionDescRec options [] = { + { "-count", ".count", XrmoptionSepArg, 0 }, + { "-ncolors", ".ncolors", XrmoptionSepArg, 0 }, + { "-timeout", ".timeout", XrmoptionSepArg, 0 }, + { "-delay", ".delay", XrmoptionSepArg, 0 }, +}; +int options_size = (sizeof (options) / sizeof (options[0])); + +void +screenhack (dpy, window) + Display *dpy; + Window window; +{ + inithop (dpy, window); + while (1) + { + drawhop (dpy, window); + XSync (dpy, True); + if (delay) usleep (delay); + } +} diff --git a/hacks/hopalong.exe_axp b/hacks/hopalong.exe_axp new file mode 100755 index 0000000000000000000000000000000000000000..dd8d9fb595ea0d52b6bca7977056fbbb1b08297d GIT binary patch literal 24064 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, 23-mar-88. + +Ability to run standalone or with xscreensaver added by +Jamie Zawinski , 13-aug-92. diff --git a/hacks/hopalong.man b/hacks/hopalong.man new file mode 100755 index 00000000..f89769e4 --- /dev/null +++ b/hacks/hopalong.man @@ -0,0 +1,62 @@ +.TH XScreenSaver 1 "13-aug-92" "X Version 11" +.SH NAME +hopalong - draw real plane fractals +.SH SYNOPSIS +.B hopalong +[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-count \fIinteger\fP] [\-ncolors \fIinteger\fP] [\-timeout \fIseconds\fP] [\-delay \fImicroseconds\fP] +.SH DESCRIPTION +The \fIhopalong\fP program generates real plane fractals as described in +the September 1986 issue of Scientific American. +.SH OPTIONS +.I hopalong +accepts the following options: +.TP 8 +.B \-window +Draw on a newly-created window. This is the default. +.TP 8 +.B \-root +Draw on the root window. +.TP 8 +.B \-mono +If on a color display, pretend we're on a monochrome display. +.TP 8 +.B \-count integer +How many pixels should be drawn before a color change. Default 1000. +.TP 8 +.B \-ncolors integer +How many colors should be used (if possible). Default 100. +The colors used cycle through the hue, making N stops around +the color wheel. +.TP 8 +.B \-timeout seconds +How many seconds we should generate for before clearing the screen +and starting over. Default 20. +.TP 8 +.B \-delay microseconds +How long we should wait between drawing each pixel. Default 0. +.SH ENVIRONMENT +.PP +.TP 8 +.B DISPLAY +to get the default host and display number. +.TP 8 +.B XENVIRONMENT +to get the name of a resource file that overrides the global resources +stored in the RESOURCE_MANAGER property. +.SH SEE ALSO +.BR X (1), +.BR xscreensaver (1), +.BR xlock (1) +.SH COPYRIGHT +Copyright \(co 1988-91 by Patrick J. Naughton + +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. +.SH AUTHOR +Patrick J. Naughton , 23-mar-88. + +Ability to run standalone or with \fIxscreensaver\fP added by +Jamie Zawinski , 13-aug-92. diff --git a/hacks/hypercube.c b/hacks/hypercube.c new file mode 100755 index 00000000..e2e71a6b --- /dev/null +++ b/hacks/hypercube.c @@ -0,0 +1,334 @@ +/* xscreensaver, Copyright (c) 1992 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 code derived from TI Explorer Lisp code by Joe Keane, Fritz Mueller, + * and Jamie Zawinski. + */ + +#include "screenhack.h" +#include + +static Display *dpy; +static Window window; +static GC color0, color1, color2, color3, color4, color5, color6, color7; +static GC black; + +static int delay; + +static int observer_z; +static int x_offset, y_offset; +static int unit_pixels; + +struct point_state { + int old_x, old_y; + int new_x, new_y; + Bool same_p; +}; + +static void +move_line (state0, state1, gc) + struct point_state *state0, *state1; + GC gc; +{ + if (state0->same_p && state1->same_p) + return; + if (mono_p) + { + XDrawLine (dpy, window, black, + state0->old_x, state0->old_y, state1->old_x, state1->old_y); + XDrawLine (dpy, window, gc, + state0->new_x, state0->new_y, state1->new_x, state1->new_y); + } + else + { + XSegment segments [2]; + segments [0].x1 = state0->old_x; segments [0].y1 = state0->old_y; + segments [0].x2 = state1->old_x; segments [0].y2 = state1->old_y; + segments [1].x1 = state0->new_x; segments [1].y1 = state0->new_y; + segments [1].x2 = state1->new_x; segments [1].y2 = state1->new_y; + XDrawSegments (dpy, window, gc, segments, 2); + } +} + +static void +hyper (xy, xz, yz, xw, yw, zw) + double xy, xz, yz, xw, yw, zw; +{ + double cos_xy = cos (xy), sin_xy = sin (xy); + double cos_xz = cos (xz), sin_xz = sin (xz); + double cos_yz = cos (yz), sin_yz = sin (yz); + double cos_xw = cos (xw), sin_xw = sin (xw); + double cos_yw = cos (yw), sin_yw = sin (yw); + double cos_zw = cos (zw), sin_zw = sin (zw); + + double ax = 1.0, ay = 0.0, az = 0.0, aw = 0.0; + double bx = 0.0, by = 1.0, bz = 0.0, bw = 0.0; + double cx = 0.0, cy = 0.0, cz = 1.0, cw = 0.0; + double dx = 0.0, dy = 0.0, dz = 0.0, dw = 1.0; + + double _tmp0_, _tmp1_; + + struct point_state points [16]; + memset (points, 0, sizeof (points)); + +#define mmmm (&points[0]) +#define mmmp (&points[1]) +#define mmpm (&points[2]) +#define mmpp (&points[3]) +#define mpmm (&points[4]) +#define mpmp (&points[5]) +#define mppm (&points[6]) +#define mppp (&points[7]) +#define pmmm (&points[8]) +#define pmmp (&points[9]) +#define pmpm (&points[10]) +#define pmpp (&points[11]) +#define ppmm (&points[12]) +#define ppmp (&points[13]) +#define pppm (&points[14]) +#define pppp (&points[15]) + + while (1) + { + double temp_mult; + +#define compute(a,b,c,d,point_state) \ + temp_mult = (unit_pixels / (((a*az) + (b*bz) + (c*cz) + (d*dz) + \ + (a*aw) + (b*bw) + (c*cw) + (d*dw)) \ + - observer_z)); \ + point_state->old_x = point_state->new_x; \ + point_state->old_y = point_state->new_y; \ + point_state->new_x = ((((a*ax) + (b*bx) + (c*cx) + (d*dx)) * temp_mult) \ + + x_offset); \ + point_state->new_y = ((((a*ay) + (b*by) + (c*cy) + (d*dy)) * temp_mult) \ + + y_offset); \ + point_state->same_p = (point_state->old_x == point_state->new_x && \ + point_state->old_y == point_state->new_y); + + compute (-1, -1, -1, -1, mmmm); + compute (-1, -1, -1, 1, mmmp); + compute (-1, -1, 1, -1, mmpm); + compute (-1, -1, 1, 1, mmpp); + compute (-1, 1, -1, -1, mpmm); + compute (-1, 1, -1, 1, mpmp); + compute (-1, 1, 1, -1, mppm); + compute (-1, 1, 1, 1, mppp); + compute ( 1, -1, -1, -1, pmmm); + compute ( 1, -1, -1, 1, pmmp); + compute ( 1, -1, 1, -1, pmpm); + compute ( 1, -1, 1, 1, pmpp); + compute ( 1, 1, -1, -1, ppmm); + compute ( 1, 1, -1, 1, ppmp); + compute ( 1, 1, 1, -1, pppm); + compute ( 1, 1, 1, 1, pppp); + + move_line (mmmm, mmmp, color0); + move_line (mmmm, mmpm, color0); + move_line (mmpm, mmpp, color0); + move_line (mmmp, mmpp, color0); + + move_line (pmmm, pmmp, color1); + move_line (pmmm, pmpm, color1); + move_line (pmpm, pmpp, color1); + move_line (pmmp, pmpp, color1); + + move_line (mpmm, mpmp, color2); + move_line (mpmm, mppm, color2); + move_line (mppm, mppp, color2); + move_line (mpmp, mppp, color2); + + move_line (mmpp, mppp, color3); + move_line (mmpp, pmpp, color3); + move_line (pmpp, pppp, color3); + move_line (mppp, pppp, color3); + + move_line (mmmm, mpmm, color4); + move_line (mmmm, pmmm, color4); + move_line (mpmm, ppmm, color4); + move_line (pmmm, ppmm, color4); + + move_line (mmmp, mpmp, color5); + move_line (mmmp, pmmp, color5); + move_line (pmmp, ppmp, color5); + move_line (mpmp, ppmp, color5); + + move_line (mmpm, mppm, color6); + move_line (mmpm, pmpm, color6); + move_line (pmpm, pppm, color6); + move_line (mppm, pppm, color6); + + move_line (ppmm, ppmp, color7); + move_line (ppmm, pppm, color7); + move_line (pppm, pppp, color7); + move_line (ppmp, pppp, color7); + + /* If you get error messages about the following forms, and you think you're + using an ANSI C conforming compiler, then you're mistaken. Possibly you're + mixing an ANSI compiler with a non-ANSI preprocessor, or vice versa. + Regardless, your system is broken; it's not a bug in this program. + */ +#if __STDC__ +# define rotate(name,dim0,dim1,cos,sin) \ + _tmp0_ = ((name##dim0 * cos) + (name##dim1 * sin)); \ + _tmp1_ = ((name##dim1 * cos) - (name##dim0 * sin)); \ + name##dim0 = _tmp0_; \ + name##dim1 = _tmp1_; + +# define rotates(dim0,dim1) \ + if (sin_##dim0##dim1 != 0) { \ + rotate(a, dim0, dim1, cos_##dim0##dim1, sin_##dim0##dim1); \ + rotate(b, dim0, dim1, cos_##dim0##dim1, sin_##dim0##dim1); \ + rotate(c, dim0, dim1, cos_##dim0##dim1, sin_##dim0##dim1); \ + rotate(d, dim0, dim1, cos_##dim0##dim1, sin_##dim0##dim1); \ + } + +#else /* !__STDC__, courtesy of Andreas Luik */ +# define rotate(name,dim0,dim1,cos,sin) \ + _tmp0_ = ((name/**/dim0 * cos) + (name/**/dim1 * sin)); \ + _tmp1_ = ((name/**/dim1 * cos) - (name/**/dim0 * sin)); \ + name/**/dim0 = _tmp0_; \ + name/**/dim1 = _tmp1_; + +# define rotates(dim0,dim1) \ + if (sin_/**/dim0/**/dim1 != 0) { \ + rotate(a,dim0,dim1,cos_/**/dim0/**/dim1,sin_/**/dim0/**/dim1); \ + rotate(b,dim0,dim1,cos_/**/dim0/**/dim1,sin_/**/dim0/**/dim1); \ + rotate(c,dim0,dim1,cos_/**/dim0/**/dim1,sin_/**/dim0/**/dim1); \ + rotate(d,dim0,dim1,cos_/**/dim0/**/dim1,sin_/**/dim0/**/dim1); \ + } +#endif /* !__STDC__ */ + + rotates (x,y); + rotates (x,z); + rotates (y,z); + rotates (x,w); + rotates (y,w); + rotates (z,w); + + XSync (dpy, True); + if (delay) usleep (delay); + } +} + + +char *progclass = "Hypercube"; + +char *defaults [] = { + "Hypercube.background: black", /* to placate SGI */ + "Hypercube.foreground: white", + "*color0: red", + "*color1: orange", + "*color2: yellow", + "*color3: white", + "*color4: green", + "*color5: cyan", + "*color6: dodgerblue", + "*color7: magenta", + + "*xw: 0.000", + "*xy: 0.010", + "*xz: 0.005", + "*yw: 0.010", + "*yz: 0.000", + "*zw: 0.000", + + "*observer-z: 5", + "*delay: 100000", + 0 +}; + +XrmOptionDescRec options [] = { + { "-color0", ".color0", XrmoptionSepArg, 0 }, + { "-color1", ".color1", XrmoptionSepArg, 0 }, + { "-color2", ".color2", XrmoptionSepArg, 0 }, + { "-color3", ".color3", XrmoptionSepArg, 0 }, + { "-color4", ".color4", XrmoptionSepArg, 0 }, + { "-color5", ".color5", XrmoptionSepArg, 0 }, + { "-color6", ".color6", XrmoptionSepArg, 0 }, + { "-color7", ".color7", XrmoptionSepArg, 0 }, + + { "-xw", ".xw", XrmoptionSepArg, 0 }, + { "-xy", ".xy", XrmoptionSepArg, 0 }, + { "-xz", ".xz", XrmoptionSepArg, 0 }, + { "-yw", ".yw", XrmoptionSepArg, 0 }, + { "-yz", ".yz", XrmoptionSepArg, 0 }, + { "-zw", ".zw", XrmoptionSepArg, 0 }, + + { "-observer-z", ".observer-z", XrmoptionSepArg, 0 }, + { "-delay", ".delay", XrmoptionSepArg, 0 } +}; + +int options_size = (sizeof (options) / sizeof (options[0])); + + +void +screenhack (d, w) + Display *d; + Window w; +{ + XGCValues gcv; + XWindowAttributes xgwa; + Colormap cmap; + double xy, xz, yz, xw, yw, zw; + unsigned long bg; + + dpy = d; + window = w; + XGetWindowAttributes (dpy, window, &xgwa); + cmap = xgwa.colormap; + + x_offset = xgwa.width / 2; + y_offset = xgwa.height / 2; + unit_pixels = xgwa.width < xgwa.height ? xgwa.width : xgwa.height; + + xy = get_float_resource ("xy", "Float"); + xz = get_float_resource ("xz", "Float"); + yz = get_float_resource ("yz", "Float"); + xw = get_float_resource ("xw", "Float"); + yw = get_float_resource ("yw", "Float"); + zw = get_float_resource ("zw", "Float"); + + observer_z = get_integer_resource ("observer-z", "Integer"); + + delay = get_integer_resource ("delay", "Integer"); + + bg = get_pixel_resource ("background", "Background", dpy, cmap); + + if (mono_p) + { + gcv.function = GXcopy; + gcv.foreground = bg; + black = XCreateGC (dpy, window, GCForeground|GCFunction, &gcv); + gcv.foreground = get_pixel_resource ("foreground", "Foreground", + dpy, cmap); + color0 = color1 = color2 = color3 = color4 = color5 = color6 = color7 = + XCreateGC (dpy, window, GCForeground|GCFunction, &gcv); + } + else + { + black = 0; + gcv.function = GXxor; +#define make_gc(color,name) \ + gcv.foreground = bg ^ get_pixel_resource ((name), "Foreground", \ + dpy, cmap); \ + color = XCreateGC (dpy, window, GCForeground|GCFunction, &gcv) + + make_gc (color0,"color0"); + make_gc (color1,"color1"); + make_gc (color2,"color2"); + make_gc (color3,"color3"); + make_gc (color4,"color4"); + make_gc (color5,"color5"); + make_gc (color6,"color6"); + make_gc (color7,"color7"); + } + + hyper (xy, xz, yz, xw, yw, zw); +} diff --git a/hacks/hypercube.exe_axp b/hacks/hypercube.exe_axp new file mode 100755 index 0000000000000000000000000000000000000000..db07d4339c316d26dc141fbe82a18571e5df76d6 GIT binary patch literal 26112 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 literal 0 HcmV?d00001 diff --git a/hacks/hypercube.exe_vax b/hacks/hypercube.exe_vax new file mode 100755 index 0000000000000000000000000000000000000000..fbdf80caa7a389ff61cd4cf0075ecaa48f1855d6 GIT binary patch literal 17408 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 literal 0 HcmV?d00001 diff --git a/hacks/hypercube.hlp b/hacks/hypercube.hlp new file mode 100755 index 00000000..4957f54a --- /dev/null +++ b/hacks/hypercube.hlp @@ -0,0 +1,89 @@ +1 HYPERCUBE +2D projection of a 4d object + +SYNOPSIS + + $ hypercube [-display host:display.screen] [-foreground color] + [-background color] [-color[0-7] color] [-xy float] [-xz float] + [-yz float] [-xw float] [-yw float] [-zw float] + [-observer-z int] [-window] [-root] [-mono] [-delay usecs] + +2 DESCRIPTION +The hypercube program displays a wireframe projection of a hypercube +which is rotating at user-specified rates around any or all of its four axes. + +2 OPTIONS +hypercube accepts the following options: + + -window +Draw on a newly-created window. This is the default. + + -root +Draw on the root window. + + -mono +If on a color display, pretend we're on a monochrome display. + + -delay microseconds +How much of a delay should be introduced between steps of the animation. +Default 100000, or about 1/10th second. + + -observer-z int +How far away the observer is from the center of the cube (the cube is one +unit per side.) Default 5. + + -color0 color + + -color1 color + + -color2 color + + -color3 color + + -color4 color + + -color5 color + + -color6 color + + -color7 color +The colors used to draw the line segments bordering the eight faces of +the cube. Some of the faces have only two of their border-lines drawn in +the specified color, and some have all four. + + -xw float + + -xy float + + -xz float + + -yw float + + -yz float + + -zw float +The amount that the cube should be rotated around the specified axis at +each frame of the animation, expressed in radians. These should be small +floating-point values (less than 0.05 works best.) Default: xy=0.01, +xz=0.005, yw=0.01. + +2 ENVIRONMENT + + DISPLAY +to get the default host and display number. + + XENVIRONMENT +to get the name of a resource file that overrides the global resources +stored in the RESOURCE_MANAGER property. + +2 COPYRIGHT +Copyright (co 1992 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. + +2 AUTHOR +Jamie Zawinski , 6-dec-92. diff --git a/hacks/hypercube.man b/hacks/hypercube.man new file mode 100755 index 00000000..a5c58aa4 --- /dev/null +++ b/hacks/hypercube.man @@ -0,0 +1,86 @@ +.TH XScreenSaver 1 "6-dec-92" "X Version 11" +.SH NAME +hypercube - 2d projection of a 4d object +.SH SYNOPSIS +.B hypercube +[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-color[0-7] \fIcolor\fP] [\-xy \fIfloat\fP] [\-xz \fIfloat\fP] [\-yz \fIfloat\fP] [\-xw \fIfloat\fP] [\-yw \fIfloat\fP] [\-zw \fIfloat\fP] [\-observer-z \fIint\fP] [\-window] [\-root] [\-mono] [\-delay \fIusecs\fP] +.SH DESCRIPTION +The \fIhypercube\fP program displays a wireframe projection of a hypercube +which is rotating at user-specified rates around any or all of its four axes. +.SH OPTIONS +.I hypercube +accepts the following options: +.TP 8 +.B \-window +Draw on a newly-created window. This is the default. +.TP 8 +.B \-root +Draw on the root window. +.TP 8 +.B \-mono +If on a color display, pretend we're on a monochrome display. +.TP 8 +.B \-delay microseconds +How much of a delay should be introduced between steps of the animation. +Default 100000, or about 1/10th second. +.TP 8 +.B \-observer-z int +How far away the observer is from the center of the cube (the cube is one +unit per side.) Default 5. +.TP 8 +.B \-color0 color +.TP 8 +.B \-color1 color +.TP 8 +.B \-color2 color +.TP 8 +.B \-color3 color +.TP 8 +.B \-color4 color +.TP 8 +.B \-color5 color +.TP 8 +.B \-color6 color +.TP 8 +.B \-color7 color +The colors used to draw the line segments bordering the eight faces of +the cube. Some of the faces have only two of their border-lines drawn in +the specified color, and some have all four. +.TP 8 +.B \-xw float +.TP 8 +.B \-xy float +.TP 8 +.B \-xz float +.TP 8 +.B \-yw float +.TP 8 +.B \-yz float +.TP 8 +.B \-zw float +The amount that the cube should be rotated around the specified axis at +each frame of the animation, expressed in radians. These should be small +floating-point values (less than 0.05 works best.) Default: xy=0.01, +xz=0.005, yw=0.01. +.SH ENVIRONMENT +.PP +.TP 8 +.B DISPLAY +to get the default host and display number. +.TP 8 +.B XENVIRONMENT +to get the name of a resource file that overrides the global resources +stored in the RESOURCE_MANAGER property. +.SH SEE ALSO +.BR X (1), +.BR xscreensaver (1) +.SH COPYRIGHT +Copyright \(co 1992 by Jamie Zawinski. Permission to use, copy, modify, +distribute, and sell this software and its documentation for any purpose is +hereby granted without fee, provided that the above copyright notice appear +in all copies and that both that copyright notice and this permission notice +appear in supporting documentation. No representations are made about the +suitability of this software for any purpose. It is provided "as is" without +express or implied warranty. +.SH AUTHOR +Jamie Zawinski , 6-dec-92. diff --git a/hacks/imakefile b/hacks/imakefile new file mode 100755 index 00000000..ed3482c8 --- /dev/null +++ b/hacks/imakefile @@ -0,0 +1,70 @@ +/* + * Imakefile file for xscreensaver, Copyright (c) 1993 Jamie Zawinski. + * + * You should not need to edit this file; edit ../config.h instead. + * + */ + +#include "../config.h" + +#ifdef HAVE_XPM + /* Yeah, this means that all hacks link against libXpm even though only + one hack actually uses it. It doesn't matter: it's a library. */ +# define XPMDEFS -DHAVE_XPM +# define XPMLIB -lXpm +#else +# define XPMDEFS +# define XPMLIB +#endif + + UTILS = ../utils + INCLUDES = -I$(UTILS) + DEFINES = R5ISMS XPMDEFS +EXTRA_LOAD_FLAGS= $(XMULIB) $(XTOOLLIB) XPMLIB $(EXTENSIONLIB) $(XLIB) -lm + HACKS = attraction.c greynetic.c helix.c hopalong.c xroger-hack.c \ + noseguy.c pyro.c qix.c rocks.c rorschach.c blitspin.c \ + imsmap.c slidescreen.c decayscreen.c maze.c hypercube.c \ + halo.c flame.c + MEN = attraction.man greynetic.man helix.man hopalong.man \ + noseguy.man pyro.man xroger.man qix.man rocks.man \ + rorschach.man blitspin.man imsmap.man slidescreen.man \ + decayscreen.man maze.man hypercube.man halo.man flame.man + TARFILES = README Imakefile screenhack.c $(HACKS) screenhack.h \ + vroot.h xlock.h default.xbm $(MEN) .gdbinit noses/\* + +all:: + +echo_tarfiles: + @echo $(TARFILES) + +#define ScreenhackTarget(p,ps,deps) @@\ +all:: p @@\ +p: deps screenhack.h ps.o $(DEPLIBS) @@\ + RemoveTargetProgram($@) @@\ + $(CC) -o $@ $(LDOPTIONS) deps ps.o $(LDLIBS) $(EXTRA_LOAD_FLAGS) @@\ + @@\ +InstallProgram(p,$(BINDIR)) @@\ +InstallManPage(p,$(MANDIR)) @@\ +clean:: @@\ + $(RM) p + +HOBJS=screenhack.o $(UTILS)/resources.o $(UTILS)/usleep.o + +ScreenhackTarget (qix, qix, $(HOBJS) $(UTILS)/hsv.o) +ScreenhackTarget (helix, helix, $(HOBJS) $(UTILS)/hsv.o) +ScreenhackTarget (pyro, pyro, $(HOBJS) $(UTILS)/hsv.o) +ScreenhackTarget (attraction, attraction, $(HOBJS) $(UTILS)/hsv.o $(UTILS)/spline.o) +ScreenhackTarget (rorschach, rorschach, $(HOBJS) $(UTILS)/hsv.o) +ScreenhackTarget (hopalong, hopalong, $(HOBJS) $(UTILS)/hsv.o) +ScreenhackTarget (xroger, xroger-hack, $(HOBJS) $(UTILS)/hsv.o $(UTILS)/xroger.o) +ScreenhackTarget (rocks, rocks, $(HOBJS)) +ScreenhackTarget (noseguy, noseguy, $(HOBJS)) +ScreenhackTarget (blitspin, blitspin, $(HOBJS)) +ScreenhackTarget (greynetic, greynetic, $(HOBJS)) +ScreenhackTarget (slidescreen, slidescreen, $(HOBJS) $(UTILS)/grabscreen.o) +ScreenhackTarget (decayscreen, decayscreen, $(HOBJS) $(UTILS)/grabscreen.o) +ScreenhackTarget (imsmap, imsmap, $(HOBJS) $(UTILS)/hsv.o) +ScreenhackTarget (maze, maze, $(HOBJS) $(UTILS)/xroger.o) +ScreenhackTarget (hypercube, hypercube, $(HOBJS)) +ScreenhackTarget (halo, halo, $(HOBJS) $(UTILS)/hsv.o) +ScreenhackTarget (flame, flame, $(HOBJS) $(UTILS)/hsv.o) diff --git a/hacks/imsmap.c b/hacks/imsmap.c new file mode 100755 index 00000000..a69e4493 --- /dev/null +++ b/hacks/imsmap.c @@ -0,0 +1,442 @@ +/* imsmap, Copyright (c) 1992 Juergen Nickelsen + * Derived from code by Markus Schirmer, TU Berlin. + * + * 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 "screenhack.h" +#include +#include + +#define NSTEPS 7 +#define COUNT (1 << NSTEPS) +#define CELL(c, r) cell[((unsigned int)(c)) + ((unsigned int) (r)) * xmax] + +static enum mode_t { MODE_H, MODE_S, MODE_V, MODE_RANDOM } mode; + +static GC gc, gc2; +static Display *disp; +static Window wind; +static XWindowAttributes wattrs; + +#if defined(sun) && !__STDC__ /* sun cc doesn't know "signed char" */ +#define signed /**/ +#endif + +#ifdef VMS +#ifndef __DECC +#define signed /**/ /* for VAX C */ +#endif +#endif +static unsigned long *pixels = 0, fg_pixel, bg_pixel; +static int npixels = 0; +static Colormap cmap; +static int timeout, cycle_delay; +static int cycle_p; +static signed char *cell = NULL; +static int xmax, ymax; +static int iterations; + +static void +initwin (dsp, win) + Display *dsp; + Window win; +{ + int fg_h, bg_h; + double fg_s, fg_v, bg_s, bg_v; + + enum mode_t this_mode; + static Bool rv_p; + static int ncolors = 0; + int shift; + double dshift; + + XGCValues gcv; + + XGetWindowAttributes (dsp, win, &wattrs); + cmap = wattrs.colormap; + + if (!ncolors) + { + char *mode_str = get_string_resource ("mode", "Mode"); + rv_p = get_boolean_resource ("reverseVideo", "ReverseVideo"); + cycle_p = get_boolean_resource ("cycle", "Cycle"); + ncolors = get_integer_resource ("ncolors", "Integer"); + timeout = get_integer_resource ("timeout", "Integer"); + cycle_delay = get_integer_resource ("cycleDelay", "Integer"); + iterations = get_integer_resource ("iterations", "Integer"); + if (iterations < 0) iterations = 0; + else if (iterations > 7) iterations = 7; + pixels = (unsigned long *) calloc (ncolors, sizeof (unsigned int)); + fg_pixel = get_pixel_resource ("background", "Background", dsp, cmap); + bg_pixel = get_pixel_resource ("foreground", "Foreground", dsp, cmap); + + if (mono_p && fg_pixel == bg_pixel) + bg_pixel = !bg_pixel; + + if (mono_p) cycle_p = False; + + gcv.foreground = fg_pixel; + gcv.background = bg_pixel; + gc = XCreateGC (dsp, win, GCForeground|GCBackground, &gcv); + gcv.foreground = bg_pixel; + gc2 = XCreateGC (dsp, win, GCForeground, &gcv); + + if (!mode_str || !strcmp (mode_str, "random")) + mode = MODE_RANDOM; + else if (!strcmp (mode_str, "h") || !strcmp (mode_str, "hue")) + mode = MODE_H; + else if (!strcmp (mode_str, "s") || !strcmp (mode_str, "saturation")) + mode = MODE_S; + else if (!strcmp (mode_str, "v") || !strcmp (mode_str, "value")) + mode = MODE_V; + else + { + fprintf (stderr, + "%s: mode must be hue, saturation, value, or random, not \"%s\"\n", + progname, mode_str); + mode = MODE_RANDOM; + } + } + else if (! mono_p) + XFreeColors (dsp, cmap, pixels, npixels, 0); + + this_mode = mode; + if (!mono_p && mode == MODE_RANDOM) + switch (random () % 3) { + case 0: this_mode = MODE_H; break; + case 1: this_mode = MODE_S; break; + case 2: this_mode = MODE_V; break; + } + + if (mono_p) + { + npixels = ncolors; + pixels [0] = fg_pixel; + pixels [1] = bg_pixel; + } + else + { + XColor fg_color, bg_color; + + if (fg_pixel == bg_pixel) + { + HSV_AGAIN: + fg_h = random () % 360; + bg_h = random () % 360; + fg_s = frand (1.0); + bg_s = frand (1.0); + V_AGAIN: + fg_v = frand (1.0); + bg_v = frand (1.0); + if ((fg_v - bg_v) > -0.4 && (fg_v - bg_v) < 0.4) + goto V_AGAIN; + hsv_to_rgb (fg_h, fg_s, fg_v, + &fg_color.red, &fg_color.green, &fg_color.blue); + hsv_to_rgb (bg_h, bg_s, bg_v, + &bg_color.red, &bg_color.green, &bg_color.blue); + } + else + { + XQueryColor (dsp, cmap, &fg_color); + XQueryColor (dsp, cmap, &bg_color); + fg_color.pixel = fg_pixel; + bg_color.pixel = bg_pixel; + } + fg_color.flags = DoRed|DoGreen|DoBlue; + bg_color.flags = DoRed|DoGreen|DoBlue; + + rgb_to_hsv (fg_color.red, fg_color.green, fg_color.blue, + &fg_h, &fg_s, &fg_v); + rgb_to_hsv (bg_color.red, bg_color.green, bg_color.blue, + &bg_h, &bg_s, &bg_v); + + if (/*mode == MODE_RANDOM &&*/ + ((this_mode == MODE_S && (fg_s-bg_s) > -0.3 && (fg_s-bg_s) < 0.3) || + (this_mode == MODE_V && (fg_v-bg_v) > -0.3 && (fg_v-bg_v) < 0.3) || + (this_mode == MODE_H && (fg_h-bg_h) > -30 && (fg_h-bg_h) < 30))) + goto HSV_AGAIN; + + switch (this_mode) { + case MODE_H: shift = (bg_h - fg_h) / ncolors; break; + case MODE_S: dshift = (bg_s - fg_s) / ncolors; break; + case MODE_V: dshift = (bg_v - fg_v) / ncolors; break; + default: abort (); + } + + if (mode == MODE_RANDOM && + ((this_mode == MODE_H) + ? ((shift > -2 && shift < 2) || fg_s < 0.3 || fg_v < 0.3) + : (dshift > -0.005 && dshift < 0.005))) + goto HSV_AGAIN; + + if (mode == MODE_RANDOM && this_mode == MODE_S && fg_v < 0.5) + goto V_AGAIN; + + for (npixels = 0; npixels < ncolors; npixels++) + { + if (cycle_p) + { + unsigned long plane_masks; + /* allocate the writable color cells, one at a time. */ + if (! XAllocColorCells (dsp, cmap, False, &plane_masks, 0, + &fg_color.pixel, 1)) + { + fprintf (stderr, + "%s: couldn't allocate %s writable color cells. Turning off -cycle.\n", + progname, (npixels ? "enough" : "any")); + cycle_p = 0; + goto NON_CYCLE; + } + XStoreColor (dsp, cmap, &fg_color); + } + else + { + NON_CYCLE: + if (!XAllocColor (dsp, cmap, &fg_color)) + break; + } + pixels[npixels] = fg_color.pixel; + + switch (this_mode) + { + case MODE_H: fg_h = (fg_h + shift) % 360; break; + case MODE_S: fg_s += dshift; break; + case MODE_V: fg_v += dshift; break; + default: abort (); + } + hsv_to_rgb (fg_h, fg_s, fg_v, + &fg_color.red, &fg_color.green, &fg_color.blue); + } + } + XSetForeground (dsp, gc, pixels [0]); + XFillRectangle (dsp, win, gc, 0, 0, wattrs.width, wattrs.height); +} + + +#define HEIGHT_TO_PIXEL(height) \ + (((int) (height)) < 0 ? 0 : \ + ((int) (height)) >= npixels ? npixels - 3 : ((int) (height))) + +static unsigned int +set (l, c, size, height) + unsigned int l, c, size; + int height; +{ + int rang = 1 << (NSTEPS - size); + height = height + (random () % rang) - rang / 2; + CELL (l, c) = height; + + return pixels [HEIGHT_TO_PIXEL (height)]; +} + +static void +floyd_steinberg () +{ + int x, y, err; + + /* Instead of repeatedly calling XPutPixel(), we make an Image and then + send its bits over all at once. This consumes much less network + bandwidth. The image we create is Wx1 intead of WxH, so that we + don't use enormous amounts of memory. + */ + XImage *image = + XCreateImage (disp, DefaultVisual(disp,DefaultScreen(disp)), + 1, XYBitmap, 0, /* depth, format, offset */ + (char *) calloc ((xmax + 1) / 8, 1), /* data */ + xmax, 1, 8, 0); /* w, h, pad, bpl */ + + for (y = 0; y < ymax - 1; y++) + { + for (x = 0; x < xmax - 1; x++) + { + if (CELL(x, y) < 0) + { + err = CELL (x, y); + XPutPixel (image, x, 0, 1); + } + else + { + err = CELL (x, y) - 1; + XPutPixel (image, x, 0, 0); + } + /* distribute error */ + CELL (x, y+1) += (int) (((float) err) * 3.0/8.0); + CELL (x+1, y) += (int) (((float) err) * 3.0/8.0); + CELL (x+1, y+1) += (int) (((float) err) * 1.0/4.0); + } + XPutImage (disp, wind, gc, image, 0, 0, 0, y, xmax, 1); + } + XDestroyImage (image); +} + +static void +draw (x, y, pixel, grid_size) /* not called in mono mode */ + int x, y, grid_size; + unsigned long pixel; +{ + static unsigned int last_pixel, last_valid = 0; + if (! (last_valid && pixel == last_pixel)) + XSetForeground (disp, gc, pixel); + last_valid = 1, last_pixel = pixel; + if (grid_size == 1) + XDrawPoint (disp, wind, gc, x, y); + else + XFillRectangle (disp, wind, gc, x, y, grid_size, grid_size); +} + + +static void +drawmap () +{ + unsigned int x, y, i, step, nextStep, x1, x2, y1, y2; + unsigned int pixel, qpixels [4]; + + xmax = wattrs.width; + ymax = wattrs.height; + + cell = (signed char *) calloc (xmax * ymax, 1); + if (cell == NULL) + exit (1); + + CELL (0, 0) = 0; + step = COUNT; + for (i = 0; i < iterations; i++) + { + nextStep = step / 2; + for (x = 0; x < xmax; x += step) + { + x1 = x + nextStep; + if (x1 >= xmax) + x1 = 0; + x2 = x + step; + if (x2 >= xmax) + x2 = 0; + for (y = 0; y < ymax; y += step) + { + y1 = y + nextStep; + if (y1 >= ymax) + y1 = 0; + y2 = y + step; + if (y2 >= ymax) + y2 = 0; + + qpixels [0] = pixels [HEIGHT_TO_PIXEL (CELL (x, y))]; + qpixels [1] = pixels [HEIGHT_TO_PIXEL (CELL (x, y2))]; + qpixels [2] = pixels [HEIGHT_TO_PIXEL (CELL (x2, y))]; + qpixels [3] = pixels [HEIGHT_TO_PIXEL (CELL (x2, y2))]; + + pixel = set (x, y1, i, + ((int) CELL (x, y) + (int) CELL (x, y2) + 1) / 2); + if (! mono_p && + (pixel != qpixels[0] || pixel != qpixels[1] || + pixel != qpixels[2] || pixel != qpixels[3])) + draw (x, y1, pixel, nextStep); + + pixel = set (x1, y, i, + ((int) CELL (x, y) + (int) CELL (x2, y) + 1) / 2); + if (! mono_p && + (pixel != qpixels[0] || pixel != qpixels[1] || + pixel != qpixels[2] || pixel != qpixels[3])) + draw (x1, y, pixel, nextStep); + + pixel = set (x1, y1, i, + ((int) CELL (x, y) + (int) CELL (x, y2) + + (int) CELL (x2, y) + (int) CELL (x2, y2) + 2) + / 4); + if (! mono_p && + (pixel != qpixels[0] || pixel != qpixels[1] || + pixel != qpixels[2] || pixel != qpixels[3])) + draw (x1, y1, pixel, nextStep); + } + } + step = nextStep; + if (!mono_p) + XSync (disp, True); + } + if (mono_p) + /* in mono-mode, we do all the drawing at the end */ + floyd_steinberg (); + + free (cell); + XSync (disp, True); +} + +static void +cycle (dpy) + Display *dpy; +{ + XColor *colors = (XColor *) malloc (npixels * sizeof (XColor)); + time_t stop; + int i; + for (i = 0; i < npixels; i++) + colors [i].pixel = pixels [i]; + XQueryColors (dpy, cmap, colors, npixels); + stop = (time_t) ((time ((time_t) 0)) + timeout); + while (stop >= (time_t) time ((time_t) 0)) + { + unsigned long scratch = colors [npixels-1].pixel; + for (i = npixels-1; i > 0; i--) + colors [i].pixel = colors [i-1].pixel; + colors [0].pixel = scratch; + XStoreColors (dpy, cmap, colors, npixels); + XSync (dpy, True); + if (cycle_delay) usleep (cycle_delay); + } + XSync (dpy, True); + free (colors); +} + + +char *progclass = "Imsmap"; + +char *defaults [] = { + "Imsmap.background: black", /* to placate SGI */ + "Imsmap.foreground: black", + "*mode: random", + "*ncolors: 50", + "*iterations: 7", + "*timeout: 10", + "*cycleDelay: 100000", + "*cycle: true", + 0 +}; + +XrmOptionDescRec options [] = { + { "-ncolors", ".ncolors", XrmoptionSepArg, 0 }, + { "-timeout", ".timeout", XrmoptionSepArg, 0 }, + { "-cycle-delay", ".cycleDelay", XrmoptionSepArg, 0 }, + { "-mode", ".mode", XrmoptionSepArg, 0 }, + { "-iterations", ".iterations", XrmoptionSepArg, 0 }, + { "-cycle", ".cycle", XrmoptionNoArg, "True" }, + { "-no-cycle", ".cycle", XrmoptionNoArg, "False" } +}; +int options_size = (sizeof (options) / sizeof (options[0])); + + +void +screenhack (dpy, window) + Display *dpy; + Window window; +{ + disp = dpy; + wind = window; + while (1) + { + initwin (dpy, window); + drawmap (); + if (timeout) + { + if (cycle_p) + cycle (dpy); + else + sleep (timeout); + } + } +} diff --git a/hacks/imsmap.exe_axp b/hacks/imsmap.exe_axp new file mode 100755 index 0000000000000000000000000000000000000000..2f6af0b2e0cb933f9f9ec6f5a1300476c15551ef GIT binary patch literal 29184 zcmeHwdwf*Ywf{OZCt)T8GD!v!UV1X&5ix`b1c(T7W)hNN011#l3SuUKAQ(tu5;RuP z(SpSm+gP!e_9r?SLZA8wbFalJ7~mIqehJoZOHt-YoBxS7|{0D zKYpLj?|y#s@nrA4_S$Q&z1G@muf6x-XeRA<#!RG0L|ahYkLQ#QCyE-#85y7r`-SzN z3D7h=Ep0d6#RvwT4S6R6@Kezbqbp{kR)a_WK)p2(MqLR<&;bGbVzor%hxH}kntr^fy+&YY@-=kw_tIhXSa}q_ zm;Vm-d1-)ml`F&mI72j2OE6p$9idXVt1XB~E81aEv|{F#e!n zMYcC5YV8Y$HXqiunoHVmAZIeu2%>VE)>dm8(XSBq4+gju{0J&&3p!FP+U86K#}Vy> zRkT`+E-z~rgWgsZE)%T`K1G|U15JjtfyO0nv!ZbIur?~AkG(=0$wV98ynFH3)!$e> zxuD3sY)MYZn#DPVD^_Xk2V4A~>3pb7l$CC*xTU6QN987sT1{0|9p_3)R(=@xa#b_Gv4;d?CY^|)VE8Vs&r)pbO&Gyo2tr7lis;aEZ*;Za!vvzCc zrm8yz;Of-_S&{KYxSRHr;q`vU@NysmUxmzu{;G{hp#uvd{EltfP;87m{I6w4vBvr#d zqs!l>_wTN%f^;hfP}_94stka%%=F>qP=x&2g~J`hQ5KZe+;RhanboQ=v>|1%j&o@v zHGcfjlBnoTA6_4d7)QbA;q~ot!^@!v`bq>nW&CjbC0}80+p8+81g0_^KO<&%xjn+3 z+!6EPL1(hili{z8wFBA_lw06@hW;#!pb!=7dVSDo6XiX+zgKl+ENQ^PpR~%V%FU&i zGa1(~YrH-V{XOUeL4~N=qRUyY?31+iUAjFPZ6e1LIgcafTco@r=d;1TEk^6VK=0^o zo&Ogj^&4Sd-B%f$X{l|}@Unk+k$e&UVBey1-~2`XU3Pt1iui<^+^)C#V$qNA`|*zq zG7VFVoR)^>YJ6wMN&;Yu@K>dkcMfl$3@`d4>~DM3rgFyET323ETDP^TQfI7g>-O@h z9l~`A0?T#0oI5ve;|8nBZ!fQ@Enl;BQ@OCqNIT1`swp4phXoP*Q4}MmrD}xzNBUz= zoHkCQRd$B1w~;zr_ghANq<>0NwVLildK#gRf^?0ZqSO0q(QNTsQdw7iOL>h!b|7tw zkhec&ph{#6KWO-ofX-%Lm=ul|48Iz7g~OpR(MjLP6GJIP`kR6&8h-)ZKeh}-M*fTE zG{2X^60YUxfXs z${;T1YD?>OXcI$&-(I?H2iyM^@t0`dbJ~0+RjV(sYpL-U{?UePeT#)#yb5~>!BL4{ztA?4H5MZI>8+NYf01e;?w)>)A?)3*8zIc9x)#y=bJKL znKEmK{&&j8fyT;|;Xp2PbtI+h#FP9d4|@#=O29f0ICe&{;1yH0ED}-riWJ z?=08mL|u($h*f&1q(=#~xpZ4C+iBJ2&3a2MG1ha#@7Yuh9_M0jH0X~ib-00V_+3SZ zJM}a>0@}jLi*2dWc1XKk1|JVXXwjVpAB>+UJ}_z`)fDWZ#`aAG&G}` zuJys9F`o=OGS*ka?hJX`^mXP&mwy+xR`hZR2t$7}^bJRbo)+r*nQ@1nK3IXT`9X$@s@7iTCS`s1>xF?txDRhcYIUb zzOib12A*qZhQ4tzc+2>Tjm&iBbH3GT*vs@=%B!}Q*VWt!*c_*`9*-a~o%tJz7eQ~n zPGLp02qKiNl^eJ1*i=4W(HWRhJ73vRSyR5T>Xyo_wdI?XDuJjtrqnt(PK+s5%4=$> zYS2&tE`!8x$@W^Y?Sh;{paMCGbcVjLWaz0OFQaV8S8Ja!xIE3bmTf~!Je+>U;BppG zk8xuZ)*5{|qv`sBG#}Do8q)^@r}@@-DC>dKd~2pwKe(VVh<~E%=>k6AT4&ft#6p)5 zQJxVIkYz-aHF?a~WUQQ;90nKC8H0R^{xc%VGb*bLk&1fO*T$+H+cs5Bt5dK6uG&~y zR}Rf6chqdHD=phrj#@0t%Et0-+iEiurEo`0<<`nu6!;rOBc$z2m=23j*}kK;PAMx_ zuyCd;gR5$~B39IN1++9Frz@3Jbpv)G+HbAgQCD88+@Q?4j_reO#@P38eJ!l2a?@AW zZ>>ZhTQ?~zGPFmei?UK%UA}Sa=B*ePqTT_TgX@&GkQqzZmF1zyU`p+PxnjQ!xs|fe zs!I_c>rxuT;Ce{WkVdJpd0SO!oi^qvwZ^D;-##3#QZSB)Gy*jOuT0xEM<5A}YJaX* zaGp`OqZW)oDGQY;n>5~azFG7TCLB$j0$Zvp)r5xgPW%+7bH4a5!zqrSnBq`4P9inq z9@5|c?QFZgFPgk$(|qN2c5WG4(r<^?%v3V3yDn>{GkfN&Im)bA^PO4qXJsjHn#$t( zYGty)ryuS2=rkIT?#C0*%SVv5;5nt2+mKptev+)8p`1b4iM)!Z7|#|RZqU9``p@!t zC0bX4*+zpWJOy}sc&hRE@igE$f+zBK3a~SHwAGjBEb^U0%Du>25Caa>V~im@MmZUE zX+!EeQP-`@p%-a3>IgLWXF(cq+(7L*ZX{p-Xt_Q7R_eH{bBJ2+Ihjm1pH%4P)--zd z#UwD8#3OQz=bOO9r>|NbWGcOS-%A(%~>IL(oRmj1HC zM|0Ly*yMNeo#0)gn;S$s;FKK>E?ZXtId=HL;~wxA4qxqH9xdQ;1chE;ewe004nc2R zA?iT$G0@~O*f0i+qltj0&`ylyK$8>WQHP9&C^OKw!-3-*rNc&L+!AHxl6)?o z$K24*a@WS&i}8|lbE`$Vr`0As-kK~u+p0)!wWdk^txoBx= z$BU(BkNc!S9kCA2gzs-M%b#Gpla49$d=txI3&viJ@kWu&z1Z}eYHJ`jZaj|JY)90e zL1(O=vyef&{BC}6*xlS0j&3>ZURM!s?}Q$91$x85Ca#xhmzryOLM2&NxlID_4*+ij z#_u7>pE`n83Y|}uJMv}94#H%JWsF^>vq7WW8~*PL%u_+b+bZ+L<9`r*FfR9# zPhqr)Zs9&uTI`75_jdlb(2tGCq4D`1`tHcT2QVMK-IPv~9KE3Dqyvt=a9(f>^i4D^ zsM+&Xu+jdLM4N*ov7Ppx{9)<3iejRm4Ei4Q$Nd*T|1#McZE|ORR_(fqwy@(6=R3*K zlpw#CzX$Z$ej31Uy!=teIRUV_Meg@G3_X zsqb@tEwFFy>pbfcJQ_TV03O5lhaHXt(B|>K37ly1zsopB#JsQunLgwF8FfU>joj~y z%z$f@W%=SL3J6@TZ|Qe9821%{x4ALKsk+RzGWBQHrLNzE@BQ59w_eitVcgTewPl6! zw@8|ttD!@saGmfKKFQ=Lu$HA3fDgt!HA4MUd-(oC`}<7}p1Ta^dalDsddn`_64*;; z0%qE%=9unPbC8l5P)8vxZY-uvjXeGs%dLy^ zNqtwQYa0U?&mQoVfW9pBn?M8G7i^=LUTXQ*o$!Tdf2QAkIE^+qifKx4GVOG<_k(}f z=|poq=f3I%s|;XBzoBSnn3P^i)Dt2mH$<*vn2wGWxTl zy$$UZ(O--^mfnPaa>B1&LVEKFrfZ>lP9(@(@KKMSNCcf^diI1pD+D@kofw018ugzT zx9?p37c16PSkUi8&~J>o7js+6jRr5#&Nj8h+^)tnsIIrdS6?t2{t$91rt%i%hwUEg z*Le$U!3O=_aO1j)LMlI+jB+s@f<1z7z!~qe?dvMCA%`@^#k_I?&i;mF+Olq4MI9|{ zoQ6Iu7$3K@VQk!P#>RCOXLWsgU>81W3a~y|uM41~MDSWnxsBPPU1z?Ec1$;oyg?o} z&qZ6sx{5T^TcHo9kXdIw<0P>B(Z2`&z@m?D7wu`>OGg@GX|HRU=?T{|q_OhPT~11G z6gGu^yTOlPa}&VB9+Yu>)x-7sEoG_u!Dj--n8@_ee>ZUUlQ!-EY5XOC7w-EHH?#lk z%s&FTFi$NkufkCNQ<%deDb!O9|GS?S!d5y3trwksPZaq(vVornd=>ch@Y#<*_Gi&Y z2=o~@p2rS4*MN=<`7OX_c~%2ofqy$C_zC5=0iWUD-=OiqV_-fkQQEwD0c$v~b-h^Y z2zVrIXtGEkH`F)?#|A)kpoUTj;9e)e&pIg7t>i zI~8*rYg~XVzTCyI1(^;8oEV#hQUkok+b|ZHCb#_NZul+8yc%^p9|05du^u>s^YL9V zA5X!DPo#yQLmj-fHJZ<1J}Mm+DLNOnGpl8g-Eua-Ir|I)CbI5#zJjHxG|99u( z7%?9g23n#PVJ_NoM}PxK_5~s9+u1z;^{>=|GUjd+Y5Se`;}? z3fwX9BLrI-*Ms!~?IPQF(B?;o0f)wNL*lrmY{*81ObUj?b3VjtY_tDdtoGLNEmHsS zYQ${y(#?YHcnI*l6xG81<-br@065p52|FAL z+A(}0>TihF+MPi^4Ci{hg`SqX_u_`cMa;&kjJ{yn?~n)&tH*gRm!1ksDVo^R8b+tR*qU6S-ZxbmO0#R4143}Wr6Tzbs zyu{K=!Tngj1GErv?Z^4q;D`0pL~kBTz&gyd^Dy@rm+@jjdnjISII1N9INY9buLo`) zVAo?U2%(Kd0vtbM6 zxjh};9*jrap4?w{*bZIJyk}iSPk48Ls4FlIWvYi?kwdw-)$i#Bf4$)8=j+#1eEXu= z<424xSw`fhL`_pA`I=?-&7JI#EYn1}R7z15Nm3WgA?#78!&$_s|2_6&Y>P5zbF3tT zf9&vIkTEWzbnJ_i^URwC_7qFIgG5i_sW~Ro4~{(@e)8B4CCzWaz79h72a_%1^7j$F z*8)F=eKPEDiWt`^_$;39-^Ch^{ilQLdAwZDaIW8lIt#tawi!_9QVaItEooRor0~5{ zv0n{_!?lhP^u$!Q@pzh@*N(ZFK&$iODa#GKV+mB~2Hvq*w=3SsbSYQ>d&GL-fG>17 zZx4B2UlsCl+!`-m%)b}0O)To|*zaTmCz&Q;-F!yOAI4$YXyf_As*q>a?c}Ki{s{PV z>=S#kY2hvpP1@B)?%j%ADtzA_Q)njjwYG5C?l$|#!a|}~ZN-dB7eI5jN(Xkg(eu00 z?GF`wWdB}~nc9H+_U>2g-!EE1{?~XN0I$J0Ql0zl@N2j+ZTr$h{+>y6+~K0YmkZ|j zRgRtJ75UYX&>3v&Jlh`2fnYmM=@B>43~_GoG3@y!$Zd>KPustfO_Lt*(834orq4>8 z_V_h_OzK%%W=~kdwg^A-UGVsTN^d?e&eU5n$9`hX>q%dr{^S}N^#SOK?d}NlQ@n(2 z@!bH`hjKT<{y0vJ1D`k1n~nY9MM~qS)2^0pw7Dcnf=-lfA)~NkR~ux6`Sq$w8+Nmd z{=>es$O?HumM?Tm_wVkqFN6I2uPOcaLng}#G4|J(Hrruh7UEp;oo8ETKG@#75qIAQ zdv{V zLi{&rZyJ^DYD)^O_1VpZUE!#GCLFI#w};m9xbSY}O+)+h(1u5UHKgs(c9^fC9b%wI zN1-k2o!fJnWys|b(1{K9IYREvRbiuum3H?+w!g7&D_TIlm(u9|T{yGYWyp(V_4sA| z$$ytm=F|e7 zRpRV{+hSc0@P3^A4ae^sTRGqd{fIvhiy?c}2?g}_=&=a<-VkDuc-T4U1pNIDr5gK{ z2CN$)*d4D856kBe}!}&?NJruxi z^1O7?{mt=|;r_wJRBxhXR^IHW8h4^xcjF^t%Tcb$n}u?bsl+`u$>p7OQT6VSj=K|R zjeC|<0u?_I~0qdCc z%6ewqvc6bv2N8#{dDTw;%dyLG02N{;)9(ZHa!L&gUI@^m`BT3!?4a*rUDK zQipSof0cY4$Oq!UheA<-X%|j=0_IT8x95gDKaxn))dTl#tZ|IzM_!>R0X{dm8#+q> z-}SV!aWd~Y%%@$A=2BOSxjW~3@}j)&%8PREmgsyP;%fGdv!q=2LAC}`{keLjq0u{D(E2h%qIIc0TKLr3xG%l` zlJuSzZNAj#-FEO-*1x&0-{H$Kk$N!!XZcJo0c-dC3#Ciuf}dpYJXRi?vs!jx{kwgp zM1RISt_`k(2GBK+`8Xwroe^l9Rz-Q z1--FyPd>>>>i8^D+1LKcT9V_EPrFGTkF!aRD^mi5x;^vA6Ae4whWOYlf0z#)ia2i` zd{2w@36*uiw!!;#8#Sn>!hZ-pI*+_|DqY6=cGeBcI36+UnQyMEP%oJdPlde^CQ8K3OJa`J?=3%3IFz zdOB>uzR!|kk>Ahf^;nW6oGZkuPK=GmC&_ptMUGZ6Oz0;?A@U(5#TDoBs&PK=eM!@V zeUhxGcF4Ka`UGTeS6Su{K<59Az512qdo;KY^0kn(JW{^ZLcVV|J1>+%zHMsS1!>9C z;Uvh{uAZ=tQRmziKf;^XA39?0qzV07e_3$fdAxbf_}4A39tv(Dwq!+=HKym^b<{|FSCD(t{>)! zO@ZwsQa{iQ>_6J2>F0rTO+OcdEStYTKc%q$TzbH>R-Tt5%lG9HJ+OfH%tRNVpAE2o zy5K{sj`<4v-w;f+e3ln)`6O?=<;y(W7hOoOe43Xie-rvqFGM45)%3&me{sP6*FZmh zoR2hMu2*9YO{OW0GJQ)$8GifCKn!_YKQS+Hndt>}AMI@UUjL%c>(QSdYiBjqeO^=I z$>|2{*xleEj?THTzPM~u;JzDYFx&dC?jhPM&JU`w4)EC(VuTBPw&a1&;C1j1kQJ{X zICE%}oqiShmL~Hab!Gn(XuD0Ukq2>>Pjsk}@f9j>d|^op zd0o7QdQBxRFY=?i+ZJ2p>8_Df=^6>VG`gm-;SS%D#!B4L*w2B^ySS_RFuw)y4&O(e zlFAMzfId5Kb$~B*B;eCCRo8k_KWqpGckK_C?c%f0dc?oldiWB29nRaa9>(Kth}WcOdSThq z;Tes*9`c$RP3Kj%9n1k2(NwH=FDrR*Q$1|+*qik(qb&zz#2nFBk2pVhPMgX!4SLMK zh1MVDxR7N)I5U6`Z^RrI`+^wy_vLNjCmT7&_u8WhRqPME_S~Wmqe5$=DRub=QSYyf zq4(kITuY|ovB@ni*xUi!m1JOFfjHr(;Hv=h>^sUI$cZ&`x)Lud?pn#|T}1`nYcds= z=35GG_=$C^%NP&GSJ85_OQL4X&j-*xIu*YBfJ9SgzDkdJeegdd``zD^l0Dy`?4{%6 z`Or)DB8hIr+8UGbB5hh)K$2IMf2iIj-RH5%@$g^L4L=Pp`n&)!QX*sk{fhVt`h?zC z4)?UO?x4>T(B*NC%QSnO!uRcma}X=C-=7RS4xur0Q2wo|6f=Xh-A$*^%dA>IT0+?QdTM^9tjt~0Q~YUyLwSkQSoyeT*u_B9H;Pa@w(X}9^@r@}7=eq!C?j$vO*%ICPx z{SbB$7}XGP9k(8Fov=OyeN0CjJ{4yq(~nswFPKc;V@~p>#L@#n8|SJs!Rj=W`e*&QXJB!dDB~ox&Z@b=Wt&7!JR{_}tF$Yux6?Xv22GzL)KU z+mD29eP4!OAQQvi%eR;`_&Yc|TgPzy*LG1mCr`HET@nl4C9&Mo>a+~LtHAdH{0>I} zIhvE@Ne=EG?@9!(tzTEcWd&s?IUH#^|KajMcs%YC4EPre$NfLf|C=-#sloA}!R;B& zcua@K^AT_jIQkd%&Gnst`_VpGUg%)G&;l~BYnVQ zd29im4gT^QuqiX_y&77yRpXw8?;q-MU*@NqTlWmPgRwxS@$^Z~ z8N`N9giHP;fgc;$k^^DIeAlkGC%eL)9h*HY{kGHRr;OF2$iO}Bd!<(fRe5Q{Ztyhe@Q z_b^wX*O|$%BLz0}4a!8D%tb7_ddO@K+ZXi2I$ChYx{7NcTLXr7B^>hr<9ZBQz!kt| z0fv8$F@Wa*Y=(}Pq{CIf(g5RgYJ*-jV5tJ{fMXQk$^Fka@9%dsvu<&h-*g22f@n=p zk@%ci5_d~2@EZa6Kb9Y#>vGEbC%&IzJ=No0&5t{^J-8=o7;;aB@NqugiaSu;R}cENWZ~C7g`ZuB_lrKu_hZ~oW86{D?<@** zIN={yr`hZ`z&GzV`8_Ju@2$72t7ykKqM_g7u%n4+r8oy;eYIdLqoG^&Ul!N}`z@nA zpXaPVOqYOmXy3$VXT^9AjAgJ#$UqMIAQOIHU<=C;eSHAm&UfSOfb(2D3-~_B!Z>GR zIM*|r>mNcL?so%8hJAq#_-;P$58epBXvKWmg**4XxPON)Q2AWfg;bIo)hz7GjB|rs z^iFUuy%0>Ii|)0iuzM}ivGVKgY?>S3cj7MB!+|E;J2ZKqkD>Rl0qBG87rt62Z{Zz+ ze!N34s2f?l7w2f^b%*5`g|iiwBm4Vm$cfKI+1FceuEw(M!@C(&Pq{f58{_kM8Q%_k ztOLM1pv}$JQ2r;3ix*Mm>9~xy1^8FOJ+I@Y>$rZMZsdG_gYhumP0%auSDsRI{bNl* z|C$Z_Kz=y49_@$viQnn%*p8CX4(BW#+&&)dZAkeZEt}lUF%;-&370jqJ;47qs~96b zZV)6|9rS>I6*5VL9DJ}9yc?;^Mmwel83jNu!0nQ;&pP(Vw^hVB7ZT-P=Z?Z&ttA|6 zwt_a(%*MGX)6i%afwn!UfG*Sb>U8<6wegYnRQTuS7W4U>7Mu@r8wvLxxc3j?-L)Xj zKzcM9+Bq@PW*XP&G>rSeDX+JA^60FxUbAO242plt;(&!4}f`8S-~_3(QlHkLQW!SOWjkJNBk z>Pq-}hIQ-nt{3x*?>mm;9VOn2#nOgAz*?rhAe-Rlcee1HV?Lqp!?4pP1-=RAzKChG zc;N5x)egQM`zpTBAM;fWzOL2zVms&g&i2cEegB{2%YV`ARp|QW5agCd*YA=L%*V>B zZcd3(;1e>J-8Xg$?o^dr1?82dtJRbw$)j8(ajyh_rz%oB9&%fV-`~7yFYobud`F1A z9dvNOMmGd(w0?Io-a*E*_jJ;^wS0$otz9ir?aG>^_G{ND$Yv~y2PpibZ@fGUZRXs-?;T5^bs+|{Vl-MP-|!yx0TO6^ z5d&H=8ZDF;Y4AB2pT^Abtc=mZL-hKBiDX8=MXPWwia3qTcZJyIl6uMdzR+ zDf(Oq(d_*&lShe;KgzOYd2$?-Wq)|h9Q&~~cAT;Ex->?tGdG`fN;}+IuXXk9^b$0(6pFObVM!a9FVtwT^&m-a12X3Rbk6OZ6yH16(n%lyK zyYarVV+;k{@%F4W3G(Op39#`;F6Ma0TUO`Ik6N8GUS7E(4)*rrv5S`imOmS?^`?8> z^OH)wvoHF*cS(2UB+@tCv!%OmPqi9zZ3Fn&`H%_!>Q<)e)I{*l`l^8JyP`h8ygPt- zx8Weq2lyhywr@W4yQGiSUTd!`8ZCdkVTS!@n0MbTT8{hqboV4v*L7UiwD!>ZNYeYV6%|axwQ7j3*UytR}tI{Hgbs*15O{ zsqvWQTGZ7n7)QR(h}NUc1hiSNw^_g7k?^96m#;g6u_oqW`a3b`Cr0ZB6QlJZp$`qd9{A`ZM(abO^$X4cUnXaOZL$q>Q=)sP@;e`RpTl!{m4f#$RQTqb zPw*L?g87;TABsoJR}0w!!k6M*4b-(NSD3eK55L2_9VO;%o0zwwFmDqvZ+|D|CBrH< zBx2rvWdB(a&RI&9NBstR*b5tZi0AcdJePUiR@;AGl#uPiyj3x8uPv;y&k*xgD)!}d zhI!s9JqmoJ&pxU!Zpge%toP-0hws9?_387L>qi#$q7CfeFLAKBcFfx|;q}e2^6xgR zu%E-Z;KyqfdiDUu6*v|Cx83|sJiq^th<6lbN0s6}w?@CuEyeo|rEY#lVfMf~3b(mS zrNMU;9znZ!OJZ(j)ND8W>WvSNo#KtR%+BL7VqZ7jlkjF<#6LDgn|PY#PLWdZU|oZ( zp&JLwHJY3XLo!oREeA=|Kx?%DnOq>o{vZ#|k! zSGAk7ko9=f0-mJiRbIOvM!8$s4K=!)05I59UW z#C%JDylrA0suwhP%1yk^5#+4F8Gmq{OW5z@v-$H9Xc&3+>Dru2xrudMV2@d|!v21d z*Zv=nefQeXp!^ZTT=iH8=d&1VvlDr||J$5M3g**Mta0(4BGXat82JR&tD{)sly1ZX zSmR2u#^DS?tZ@?7I0C*c{Wf!fm-nQq$>zb`7UrLAfwsmS#To}%F&Zriw6wKM!Wsu! zF&Zt2Bz=vurGF9wS}__O+`lYfe8P|Se`z$KX|%LxGW&Mk*V}OB!F&4xA_e2X`D`fP ziF=;nXVgENt4-tSf8-=*+g5@(-5?cb5Og1o2PfxQ^>!FWbJ!wV2| zSE7z#yx-(@Oo#Ef{uVyl0^Fy^e_H^1Ie%S60m>GdEcn413%=3TsAo9;JFO+COTZlf!?`_?95i@xqmKEpp`Q8SxU>;G znUE6Yi1(VY4jmpmn>fJx_9nc8)fBm3Ju<}?k@ z2+m*OCj$mwLpT(mZWMe#cJT~AI;Ay}Uz|(?<8EnVX&5VL4_(v+hV_E!$sQ|Vdq8(oZBv$dvfN9ndz_?P6`r~X!KUM)VyVWH5@#r)vWbPX+ zYniieghtz~&jDuY?Hrvpf`YUcn6Y%PHU}0+W=vaf(+-BN;-2_xZTw}x_~oV5H&)ec z-F#;WzOz(WS5htd;c6TA^GXHvjJ9wxI+n?D#Q@oAgRBCw@l3WJ5SE#|y>x4(pu~_} zOzF=cAzPclub5YZ6n%#94rFT#=_2?OpiM5^wS}(}G$LMxWc7q9!iee(~17GHGeJIFubawZl zA5?r+LA{*zpc!O|+~-W1LCEx&q@HdrS*(8pLRZJ=H0vj*AKleyGIg2E9q38kMtyGx z_GN4MRx-y5x>hkrl>OkM*JNQ9qczGFJ%cg7YBG0$50e}~f3c{J;f@o~)*^}{J56T6 z-bBG(kEx66Q-S!`zU~fWt=q_C#ZbCH-VR1grfxu!wvnDdNV#A@gYiI;tz*z+1p4kU znK}W#8b!b-T2nZ~K#T>{rlH7c>FPY&IoiXPa5ofdM@M<~Z4+TX`3Jexf$#a7qFzk1i=;gJiblq4Q!33SwUDK_6y% zhEj()2mKSf5spF3e*QXP0F=LO_G7*>+MR6uyJnIpjw%eU8vg?L$PV2!4$ow@_i*zp9&a5u5JF>Cv|JVEE?3il z96PMKR00saU6Ui^gWrg)m0RoZIiUfsWgA*+t}U+{sF^slCJx^)xpPxVZC&}+$}+gW z0W9G(_)Ck545zWFrt}WsG#KJ$vE4bBOi?Tm&d4k+kue}qJVWo9OC4RD@z2EsA3fQ6 zA8<{*uZ~XV@!LUaU}U{0h`y6A8yWYF?+6WWmN1n6DDf?xfx0BF>4mYNpOdITazg7a zR+Qo5(D5(1Cf0gNtC2++H6{t};4J@Vegh4kN3~h^oG&vfyI{`1?O3>$y&aDOS^PaM z{UFNl^x)L$?gz4wCwz(s)(z7(xc#FXM$Wiqo(Nidu@v=oAR1EK{)n}D2&>gx!F zLKu`bz&K#P2s1;9HXU>D^%DyxOdrWB>@MG(LuXz^dS2JV8$fxFd%d=Iv|{}$coTX@ z<`rNe={t+o?+f->#G})#=YTW^Ja+TCXtRz3BapSs+$qSzD_gV-_sb9yFJi24MvaHO zLRu#obA=uT3PO)vE!`MSH~L8ec4}wHRLGL}9@Alh-$w>4#xjI8thIhvgUZ$)2q^4< zaUV6H$Us#RlxVU32pFj21d9kq04A9Mj|r(QL6ag>FysL8P_H2MxX3e8r z9$p~U+N7b1K!Jg56^z`h<)ywh6n>`lEE1b2y$TvXpG)`Y)`%=O;)KWiq*fG3tSFgG z?HGXUMyVFy62*(M5nxv+eC-k#7yC?w=?~dnjrvD z2Nh^+={@Q2%emGn{&9{mv$lyj_)CMmUui->qDx?)1{od}mj&l6LFTTGnG%^k20aJM z(h|l->7Pz?1_nvMp+3v>Y@Fzw3K@KzA~n2!TqL&}O5D-MYXh1;k3Lx`FKA;yq5(C1 z4i>@6L~9VW>DC`ZE*b4S@-v2D|6Sw!Ur^5C^l?km>I1gD%e1bm!{lNqo<(`S@JJSsU&sv^D8gxx5mxzMb46f{qz6`ngjpI)xL1_8 zF%tO2ju6Jj&~rfLZOPknX#u$4X2|wJ5=itC4_E+2qKUNwwVhZWIy$>d=@1+TI1Pw5 zM1VI9nIXC10Un=vd@a^LSUEs-5Ptx4c}5_mkG(QqSD^5ZfkZz&I0_O0nSvMLICP&n zEOfW7TD*Ei(W;!qt0SU!vCrmj?eh196K^T6LsVLW?-G{Ol-E}6sM%O9f;dJ70t*gQWs9##^|2^MoU^V8$?h~`C;bOubmj2bZ! z&x{u)iiCHC7VEFa^E`bCe+A2DKz@Kf=Ml+E;#;(zm#dZYv10C9@>K%5%I$|Kw{^l?Le;q`3)m!V!w+-)(>s21zXCNvzYa-Lf zPR}H8JFd9XvIt{<6+>A|0D?uJ-|`RU*A9D<7d zHDgR-1rgnmiQoaK0^qHdJ>6slBSYl#cjm#A$=6-;MFTu+W+Qd8sNSo2~ zcJ1q;!+T~7(K9X^FYkGj-t$>tiJng)bA_Ir__+K)&+NsNVP4GaS-mF0e+hfxZ!`1v z=wr6j-d<8yRZ??HndY_tzn8`F?J+#f?;OLcAXZx_2#_{y|MDQ9Vj=tP7-1ktQ2!l3 zg-Hx8_QC5xt8a*H*&{$_gF}j)n1$2MPF|%R9fS2xz_CpgYZCJ}p#RPp`WQP6bLUS* z7cl$ao7u-G1p5rHW%hpzW@2?SJj`5LtVlHej%ZvDEo&7&F))4#4D4>OOMtgFfWHtK z2H{HwsO#$rvAuS25XLsL0DTXzoP}>v3$$mgBaUR+N{Buez4hly28f zOSzImD(h*G9wCIpxoBSMhiAAq>lyIJDnY7E$5#e4;L-(*S}4qv$7sJrtxXgcGeL$g zZin|rrq`6ql4p&YySIS@6!r>Yx^AIW!H!7#x;1U~ndWgfP@8G4-XHg4=yx9rSW~ZQ z9+L;4$21p5oO~`Qw61A67sD3Dy$G2r821)@>03yVub{@Vd*^R|*F%a{ah_6wFZ~L= zGg!#)FM{_!iNCDiOpdTQBODSkh9zV&->?LelQYnKgoXSw79qBWnpKz-A+=wDu1(C0 z0uB=)a8n`2!6L(~Ak*7p%4F$1gvuM48CJ%uKGRi39>+a^Uak+YIG_;5fM7GBK|L#G z+z?H4n)3Cjre%hxfu$$Z@Oxwi)o=ySfPKG`rE6vxT3q4WvuO3Q#fuBBuo%B zan@HNzW<9W40gnTi>Zr$^usgHVig&dj1JKO*V8)D^1@f3ThZXDIQ52X!SoYPXe_Ym=9& zMM!Z7w8g%LGuS-HRslgMfsM8U3yWs;9l#&xEo+|MTQyb=7Uci`{l6fANit6q{+VeL zGW<D&ADj^ywAqk4g z1E+P?_@4HHnZ|DH@g;T=Y-c)E`d&}Jwr7yeA2!oXoP;nIFDE{_&c5zJVH)Q8MWZV_6YM8{-#dd|qkCCG z);&wI|8f${%q)RHME2j13`k~XWr@h2M>1)31Is|30s(G9p32f$zxn`sg|YEFv=)qg zQ*TOqIO{{JSGgDDuXC<_bftZbSdx{MeFwW24K*@t6zHa0Cws{4m?E3cx-_y|W87wf zTME#kV=Zx+&o+>pERIfnp8a*oI>(wAI+NLAt&KDc29>7H)nsvq53aWh8$?IRstxPb zZCFpt7BO9eab{@1rRkEd&YvdJ?aUJ6st*+sa5Hr}M{IO)mZ?1* zbz8k`3EGs`JRJi)?5VB?Y;%pThGl9`od|pzJk`}KGgeqtQ(aTH*;C6j^j*YmMRIb5 z*7~kWZ_Q?JL)|lg+>@2H4T;@Fyrw9w;j$vuG9};Ut*fi4vsL+Q3+q>;Fxw(ujjzIk zt~2jUVF1~-`s%!8HI=@qdT+U{rnaG~#%H^2Vf}3>Y=c&*N87UMt>xYoHkOi{Y(pbv z%kk7z-p>}>SY`^-2DP%LrrPWAF-;Be$~8ifE}<;_XU3WlvVt z)ok^Zvz1dt%+u+5-&|AfW$Wls=Y{F&y{@WqZw(WtSIV9#tM;;0+S6A?8m@;B4c!mr*B7m#rp_A^_~EHyodmGkY@4^%H`q$OHc&3MO%X1(X>^Niu%OOuvCUW05VH@pF00vE zUGBT1!3JNdDf2XVVP@OYbyW?X(rPcT7_zO*TU}kBX|p-D*7>S@mA0CS3fmHGxUinb z_YCv;YPMExVvlaFCkNEC%&C#CNG`308RCek!Nw8rMYuy|7-N*I)Du-5Ur$ zZB~(BkbPPRX+G>Rk@9fqK&8ybz6O{x2&q73SJqHDNqCnU5|j{ zE3dcRZ@cF{icA!4VyMkkzO4=3FQ72@$vtdYSu5y2c1u}T0kSf)mTRobJU*Hr;E$Nl zV1rvUcyzI@qSqLF+lCO_u(cl4n1bKIcw(CSYCN<)ug3$zVpp-?(ef3xrzjp~Zd&{l zR+emA_I>v)yE|+7-AnJWEnT`IYuSpW%WPO!Y^%4`+7_VI7k&?c&tuvSg)srS6X~yF z^)lpDNHwwgR^-njy%4MKLH-)jPm%r=>EDp9{rzXicrDNWpX;*|Fwc=5L2@FMB5gt1 zf%NxC@m~|lZy{-$R{;M9%KtL0-i5L>t$rNkkEhl9P#&IEr%ikkZRGKri98MI=2(3J z@+5+T{?EVvTn%hzor@lCR4!grRY#-p@R+LFr8c7w6k3*B4cU8{^oG$Ha!GHPT5@C- zXOTV&7Sf7BV%XoGwweq1k45PJ@reIq z#NQk7_sO@)Oy-bW^2+xH&?r@{*BV)8h5g6UQl$5ewd7c4gaz)X7!>{e^Y@4S18FI; ze;~@KtEuNUW6N^sbPg0D7;{*s5%RAd*W^En%-N{yjA9tuj9#(B=tJ#Nusy@s3D&hZ#`fb>Vg#n^HA-wX(fY*)goDqO9Bj zK_Z=}m|O<3PLRoEa+^tRGospZo2JlNdv~eSJI=22}VYI_vA@! zCLy>n&6*s1!`zl?<$svBH%~A^mt(UUKUl0jexqs!eWSVs&!R?UVn|i<8EEC+H>Nedx^|Q5euN%8>46z%{+S3B4(9AjA$}G~IE)h3w%~ z%3Cl;+6~YjRsI1L>&0!nUF=BLO!5H+2-cbo--ixS0^@E#J2<-tW$%b66=>9928Q(b zk3enTL39|c9Rjr(Wk^dB$;vTM!X2Z@>JFS%B_Uvv0wz&v7LkmBR5_4}(Nt)0+1QV2n}K(GgN*im=T4QPfTdou>GQUj_EbS!g_U=<3HLyvKhL#w$)gU$2!^dyN>KDkVaaf5@%X-yqz*`$2A zS&VW=UX8*SMj1u*&+zVtIbcQr2`W=Qa9G* z->ZxD6QTw^5%1H=7+pUV1QdQpg%~g8DKkdE(M(o1s47!`e}4Gahw#0R z7cfU0m?CfALdtet9sidDh4>HDSB(EoE&e+w{%eh<#sB5MH~v%4i2uu^)63zFf|25y zphEi716t@`j6pb>T8k&+=QpTD_g>b0h=sfRS(+g`!bSF3BKuNdb8!|8#2(pqdt~2@ zsGryB-F+;w?^}_5S%4hZAt68>itNj2RP1mQG0K-p0=Px?IU@Vk>b1kDRYvv|>op0r zXCwP+^ja^=NDOuNGD~U@&!pK2QWA36D1!$)<89oag5SGLhLi~Vk%Ql7k%Ql3@V+rj zM4$%?|6k)E!oL@z6r4q0A42PAc5spF02#+Yt6vK>+VLH)N3?BJ@yTdwXP`)E8ilT z2ZF6@4A%RiOubtho%k%qBRppi@`NJ-U%;YK8pTd~A(k_}@*(yEMG3*5yBm0j@{C z8jrW9(@gQ`1I=A=njcK3nc{P-%zw<^CvFjsJR6;zgzUNK+}5U^8o0`4q$kx{f8UN; z|G*9zLoq40r&FLW1IB|?0_-thPXa3en*glk9_X>Dr&5i1K7z~rxVCTVDVhdZ42b5p zmAc;+sk@VUw$Q_??)3NVq&;XT2U6_Fff#r^iLFwi^54OKr~lYa+IUJi5Ca$wJxVn6 z4xodDoOMo_|D=C_#`M3g%uYe}%PUwST@%4Vo^Y}8{*#XT8R1q;gbS^6y8MzqgdOUx zk8#I4+Y}UU0c!q)RH%85nc3JfX33qSWL_b^>GFsCQqlWxlOoGfjJeD|;6Ew&P!}sj z!DqQegZ253O@pNX2BW+-7lM+Teiz+-b2sM-7VVm#J`;jP{9Nl6|G<%XSLUW{@%K^A z?{V#R*)17pyGPvOJ7T#qI~kevN(TQ!akprH)eb-0Hm)(8N#jpOL)sMl@9_{km|`S$ zFJ=zy!-yAY6*3ng`>=@rFij{eKt+?(7x0z^v;Hr`Xq1+G;-H(eTav=UiGy|ydoo$E z57Gpk$;oO0No z7c$OKJ{TqacKAa@*O^b2n?SSC=O3_G!UFO>3-1uTF`~CJw#Q3A=H;4p%KsiGb zGP;*r*Xo<{<~dlnTQ|wA<=BW4&?Fx=GH7Kh5XO1>ndB!5mZGk<)Ffe>z}eC1VIU`G zy&W^Yqs=Uc@ALL9yVzzv*nON~_uh`vm(*s?yOft3I>y3z83`e~Weyk2gDi8Cy9~$# z%xj6_gg3KJVwH7^q7Qfx<4)F0nSk~%|0U0nA`CI*YdxrS^;J`r*O1dc%$fqsoWdQl-s zUR2!fD&D;oB8wSmd&Pp-3C|fd{$i~qEiCL6i@Uhu0`%=d4**i5Lb2T??p=vS_VoqD zu41=0-7S>wVh>!axvLSrfkiZTOClr&#~=0IyHV!8&uk= z|Kg$88BXaqhtp2DbC{)>f^Dgt11!xfx24L>YvpFzB<%nLi33{Fkg%yeXy>dq>FcRR zmQR!kY7QvrjD~4rzY5#wAfLLG(Aeh$+Of@9OPxy1<(`ogS)m&f#rbhJ`qF^AkQGFNr2WFgEeolpS z7Rr-+g2dZ1Qi68jrj(<3mPGD3@>wY_kP#{hqfcSG6M60fq4MTH-rN7I*NP& zTQFdY)or1|FoXl`3S&nhXcq(n3jiS61s#RHz@lJaQLMg*Mp9VZUR1nyEria)o=FR2 z!Msl0_mNHa{SV(|{(fo`STwCsLdc=bm+Q1~NDon)fmlBQTfC$A9J@{%%rR;+9PekU zkul`7+<0BtoYHD)GdejQ2__NtuH9&lbD<$_gkRc^+NGj=DX_pT1&prW@ODR+E2(%} zF~y4mCP^s9exz8?6yM>w^~p*>%?rMM@b_D-cn(-o@f@}$;yIe;k&2v3yT4>yOe>610RZ?U(53#?QZ0PhZ<%W`EIP=7fdo`b)d7Fj$Dd zaEl@P{b;+dC|CriN9FrbIH)hIJpCEOOGW%f2<6pBad8b2Iy<2h_ zox)$hSbm3fJC!wlFff9}>UXDcqaZ75`mh!38Hl1|KWHLlRB2TAp-g8-I`C@PQdya+ zla7G&dqmp81BDuhOtDfEZTCm1Lak)wVVDk!=xO`~4K5z;?BHfE)xCMx29+PRzglJu?eW5CV1G?wW5mCwQN0Ic{Vbn$ zQ{>Ggz~V>vH&f#ktC6m#B5#_t7KW=@q{oSHsDJaOctsNt6>=u!ehfVFDgC{ete%H^ zLJ9wl41>sl9s0-)KRTt~LdEQmN-cVZ$PQaTNxm}#J5-?@w*w(zhZCP@lw^lTh>~1q zC~gO>(A0Alb{Hlwagmi7XaW)5nxVN4+2O2ahi{`j`3|abk20cpPZUHF05SK`?11G} z)W+B3A0h*{+z(Qt8UksM6Rb0}+s+TDp?_4s-6zdHS-Fn{?OF{LoCON~OUN|R78GK- zI7zyA`Q%l)VA=@Jk}kZUBwd_^F8&JTxGo3@U3}O}x;RU^_%>0JE~uvYq*iF^ISpO( z6PUQjiVFXSEU%|b>f*Gfi@VWY)5U4%;*72f1w;}Ud{GzM1!I%{ES<<(sx)030_l`4 zI#I**z?3eQkf2>#po<7l=)W78ri&k;0B+mi7rms5oe}7wQ5m~xnqpS=lR8`=CUx{f z9qUn!tAmhGM;96aN$OZkl%x)-Y3k4lO+CH(6zzvP`k{^ioa!OY_meesWWzOjHFem~ zUQl}b8B3*xvQGW&q5Fa43 ztRP~Y)S%jQ(hQxn4WtKj(iS3}#c4XKM_KasBan${$r{81NTlm9g>DSC3^l~W`8a_H z`f0EIMV2SE(*^j0Z!8m}jiTk|FpitoLoX*Z1xjv=>r96Q#$~LLjmopojJr|28@%(I z{L17Tz)1H;bT#XeU5)C8_)|>04fF;L0(SnbY>KY?bG-PACU}FqkTz!;_{t>MY6|&B zEnA?&7`i)&LldKy+{m=uKWuU8IC}e&mUIGlHSeY`Lwn^{_Hq3N;<<(oU&p= z=!^7>l0*Lu-gigJsnV$a7nC)JcIiks^dJHQD&){bMA-_5rW#J~u|gBAkF-pV!l6gu z(DTs*4!s}m(%}*m>jpH3-hlR+Ll3~AhjoXZMKIvw4ozzgT{md44hLnNa4n`iQTnokI+gn1|~LBW^XZx5Azy_A2v8q8f+Aw-$yYgA+zJmegr`ytd8cu5B|H z;J||$kmsf@MMa+|R@^H-Av$~xp;Qpd+$Lvvfz#_2g)+euFqanu%w?iUC>Pv7iRA@& zi)Kx&E%4Qf0aLBhZ7B*mIP0w1fZ11DphF%F3qc1Dm{SLdZp*je8$pLbhXu@_D{xzG zB|0NuqOaDegJyz`cvCfCcAwavVfXIZxrScX(DiDSPX;WGo zFzrvT^&QX9#%O-LtIgP!A)aW9C<%6o9bqqtispZi-Q zhxhCA9*`4i+2MC9QUJ!>PYj0vNy_C`&%OtL1RBdsQ^6Vq8Nm6cB+M5MWbSiBHt(fKzl&ZF~(RE#kx1OeW&n2nsa?_b|$ zgtz4GdR{=3afw33u7=0h0`g|zDM9%=VywK3C%UiYDO4zbjT))r&%Zw*4dh}hl*Zs4 zwTRr?k+9YI(jUmQ?=f=Gj=nvBi?Cx3#!jxs--p@peZ~ej64J74cy=cGSjgBSxL5iL zz;f_6jezF^-V1mRk{NLG{W?#uWcdk<;iZ)JZO10O@H~`;HaK?Jklw}Cv>oXs9PGB? zAo~u|Al$_Wljf4&a2|hm;FkF6jG!GlO;;60yM! zhrNOUH6Z;n(pn65Ej)i1g7qS`AyotRB5AudopiVz_16IpVO?B{oPMYvHPt6w{xeckV9 zzB-#(*L+#?)m!S6DN|qEeBGuRed_e@Z~h1lNwH6JzN{(vBKdgr-CsueXZ)Y41}yuv zKdnu%uM$_UUcctSRo}H8pc_0k*Hu;5u+>v7;?KABk5e{O*tPG35`WFwp^o$etQ~YW zZ1&bwdQ0@rX6k`^2e_LKuv)~oH2uS(P55-8#JdUKf>e9!K#>oMj05ZtC@kwdwd-pd zsw$o-!B;E3hLT#~>3(R&0Y;x08aI2Yd;t9uLTd7_l8@(`Nw&9t#dzbnp)uY#!Shj` zQ+j#BD4#eUj82S?MlazTMgZ9;zny)`b7MSrrJv`{@mwFz4fON8@)>VZdH&qFa~H>k z#(4vHMf-TuIG=KY=Q%$M4=JBt907xI_W4jh8yJiXv5|2$esQROc!=Oq$xL!VQY1Y#Xnz#6%W z%ruNBSz~z08vWO|hT%OU<8L@S0NstSf%E6j4h{}p89e_9&wZls+y$N+zI^$!%RKj4 z-`J_~(__73uq`_?#@IzzZfx-A*yuR4I?66zzR1Ra8fNTN-^r8g`0;*hJGhTOW>I$j z{N>BAJ^92b-gwH72A>V|_h06X>}{0c25f*`fyqyS!M~49u=B7UJ45Y<`X+iuN6|m~ zcz`KqG#42jiSXRnW4uA-XAJY)FVC@lrm*p0HpVWKmr1>^{pus-;{k9~dBgDFz{Qcz z$3EeWs0>|!+kFln85tY4gr#vX#Ykeu`hR~lca)V?g6$3TRAI{XkYAHhv1FBh!NCQZSz)7CwM{k zx&@2ib=p@wCG<@V1QdWk*l4&DUP-J8JiQ^zNYWMG6_YOZjm>ltZ1RYtHck@z*5+Cg z`1YA}GwJGG^6f!o;F5Cb(kXV~!sRiBh%wIdgWS*9_~nrhS@^@T569UlEs|*P=x1ys z%Gl|V>w+)~jAyyG;Bph6v$GR$sk0L*=qYBrL%uT$LF*X%aQw_T-1sKmbAr;DP7`0ug27Vnme9o+rH}+E-I0b)L->C~AN;A7B!&$y%T&!54dg7XS{u z, 23-aug-92. + +Hacked on by Jamie Zawinski , 24-aug-92. diff --git a/hacks/imsmap.man b/hacks/imsmap.man new file mode 100755 index 00000000..79825d53 --- /dev/null +++ b/hacks/imsmap.man @@ -0,0 +1,56 @@ +.TH XScreenSaver 1 "26-apr-93" "X Version 11" +.SH NAME +imsmap - generate fractal maps +.SH SYNOPSIS +.B imsmap +[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-ncolors \fIint\fP] [\-timeout \fIseconds\fP] [\-iterations \fIint\fP] [\-mode h|s|v|random] [\-cycle] [\-no\-cycle] +.SH DESCRIPTION +The \fIimsmap\fP program generates map or cloud-like patterns. It looks +quite different in monochrome and color. +.SH OPTIONS +.I imsmap +accepts the following options: +.TP 8 +.B \-window +Draw on a newly-created window. This is the default. +.TP 8 +.B \-root +Draw on the root window. +.TP 8 +.B \-mono +If on a color display, pretend we're on a monochrome display. +.TP 8 +.B \-ncolors integer +How many colors to use. Default 50. +.TP 8 +.B \-timeout integer +How long to delay between images. Default 10 seconds. +.TP 8 +.B \-iterations integer +A measure of the resolution of the resultant image, from 0 to 7. Default 7. +.TP 8 +.B \-mode hue|saturation|value|random +The axis upon which colors should be interpolated between the foreground +and background color. Default random. +.TP 8 +.B \-cycle +Whether to do colormap cycling. This is the default. +.TP 8 +.B \-no\-cycle +Turns \fI\-cycle\fP off. +.SH ENVIRONMENT +.PP +.TP 8 +.B DISPLAY +to get the default host and display number. +.TP 8 +.B XENVIRONMENT +to get the name of a resource file that overrides the global resources +stored in the RESOURCE_MANAGER property. +.SH SEE ALSO +.BR X (1), +.BR xscreensaver (1) +.SH AUTHOR +Juergen Nickelsen , 23-aug-92. + +Hacked on by Jamie Zawinski , 24-aug-92. diff --git a/hacks/link.com b/hacks/link.com new file mode 100755 index 0000000000000000000000000000000000000000..3f806eab93b7ecc0c54f7d11fee31bcbda59c5ef GIT binary patch literal 1072 zcmZ{j%WlIU5JmYEFS<;VRo~6W5Hd9=7$}g+?$_5~|+%c0WVf`;ZUw`;PX>nw)}JU1m3g?i;#iQgT}2YBVGR zDtd_(FX(<*InYvYR~~RH!cg&nW*=#Cl#Qw$GdINSXSB7n9%3=KAQV}>nyeW?gnBDN zQLqVXALbvszR75=2xZo*o&rU6J+(=p+Yrj)6?-*98f0j>Y*GtCl}%}ozb*3rb_zm| zoe1X>_19^OgnCzms$iL6iuX2C5QvBe@@e>%mx}>dA=2gT@ww35(Qu77V ms|{Ulh}lQ1H(7J0MX5g6fbRQa^gYE};ovXmvEF^S@Zt{}YjAb| literal 0 HcmV?d00001 diff --git a/hacks/link_axp.com b/hacks/link_axp.com new file mode 100755 index 0000000000000000000000000000000000000000..aa673cadd6776f81b656cfc0d38ea8eb8d0d23c4 GIT binary patch literal 1144 zcmaKs%WlIU5JmYEFS<;Vbsy>DODaO91{nhdQrZ3b+SoWV6Sa}Dh>p&kJK*?D+%?v? z?f?TEWzJEmY`oh~Kbt102;j6--R_EZ-+lU!L)iO}57YMrC!DOwDVWtK2^Dewi2XAt zIWA*M1=Ikc8ZnO-PuTyovWKO7Gk=g@P&I3L@rvy>!ss9yRa|0k=qBM2CunIs8jt7C zh|8qA25SZ+qwWQ9S&)<0K1>5#TLZAYA|60?*JFUFE~k2W*sq8Oh-bXJ=~FL5olj10 zL0l&%*UO(en%~@vxJ#ZI=M%J-aT|@guZZh{%noDx>(*w(K3Hs4+RIDt}I=hH5~;uSNF)}-joLLiJPal!*8 zWVRgV=u!iCf2vX=Mj<`DS{Mw@57d4ZGU_V-Lxw;wA1?VuUA5(9${-kMk#q znFVRD!I}ZtQTrk>J2`pne2(bb3c&6~VgNzr*Q1A^F2{O;m{28#*yH(47dz=|19F11 z#O#8cUnhTR`0f5CiMwBLdha5%mvN0p{TGP=NV*@xU)!4`W)_b){fq35%$_A?CYujV zo#Wb@c#Fi`WN*QRsPb>B7Xq4ll^Ee2caPSbV73(oA|UC1#t>W!;W`9j%+h_iNp7!? EUpGOKnE(I) literal 0 HcmV?d00001 diff --git a/hacks/maze.c b/hacks/maze.c new file mode 100755 index 00000000..c7e09faa --- /dev/null +++ b/hacks/maze.c @@ -0,0 +1,794 @@ +/****************************************************************************** + * [ maze ] ... + * + * modified: [ 3-7-93 ] Jamie Zawinski + * added the XRoger logo, cleaned up resources, made + * grid size a parameter. + * modified: [ 3-3-93 ] Jim Randell + * Added the colour stuff and integrated it with jwz's + * screenhack stuff. There's still some work that could + * be done on this, particularly allowing a resource to + * specify how big the squares are. + * modified: [ 10-4-88 ] Richard Hess ...!uunet!cimshop!rhess + * [ Revised primary execution loop within main()... + * [ Extended X event handler, check_events()... + * modified: [ 1-29-88 ] Dave Lemke lemke@sun.com + * [ Hacked for X11... + * [ Note the word "hacked" -- this is extremely ugly, but at + * [ least it does the job. NOT a good programming example + * [ for X. + * original: [ 6/21/85 ] Martin Weiss Sun Microsystems [ SunView ] + * + ****************************************************************************** + Copyright 1988 by Sun Microsystems, Inc. Mountain View, CA. + + 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 permission notice appear in + supporting documentation, and that the names of Sun or MIT not be + used in advertising or publicity pertaining to distribution of the + software without specific prior written permission. Sun and M.I.T. + make no representations about the suitability of this software for + any purpose. It is provided "as is" without any express or implied warranty. + + SUN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING + ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE. IN NO EVENT SHALL SUN 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 "screenhack.h" + +#define XROGER + +static int solve_delay, pre_solve_delay, post_solve_delay; + +#include +#include +#include +#ifndef VMS +#include +#else +#include "sys$common:[decw$include.bitmaps]gray1.xbm" +#endif + +#define MAX_MAZE_SIZE_X 500 +#define MAX_MAZE_SIZE_Y 500 + +#define MOVE_LIST_SIZE (MAX_MAZE_SIZE_X * MAX_MAZE_SIZE_Y) + +#define WALL_TOP 0x8000 +#define WALL_RIGHT 0x4000 +#define WALL_BOTTOM 0x2000 +#define WALL_LEFT 0x1000 + +#define DOOR_IN_TOP 0x800 +#define DOOR_IN_RIGHT 0x400 +#define DOOR_IN_BOTTOM 0x200 +#define DOOR_IN_LEFT 0x100 +#define DOOR_IN_ANY 0xF00 + +#define DOOR_OUT_TOP 0x80 +#define DOOR_OUT_RIGHT 0x40 +#define DOOR_OUT_BOTTOM 0x20 +#define DOOR_OUT_LEFT 0x10 + +#define START_SQUARE 0x2 +#define END_SQUARE 0x1 + +#define border_x (0) +#define border_y (0) + +#define get_random(x) (random() % (x)) + +static int logo_x, logo_y; + +#ifdef XROGER +# define logo_width 128 +# define logo_height 128 +#else +#ifndef VMS +# include +#else +# include "sys$common:[decw$include.bitmaps]xlogo64.xbm" +#endif +# define logo_width xlogo64_width +# define logo_height xlogo64_height +# define logo_bits xlogo64_bits +#endif + +static unsigned short maze[MAX_MAZE_SIZE_X][MAX_MAZE_SIZE_Y]; + +static struct { + unsigned char x; + unsigned char y; + unsigned char dir; +} move_list[MOVE_LIST_SIZE], save_path[MOVE_LIST_SIZE], path[MOVE_LIST_SIZE]; + +static int maze_size_x, maze_size_y; +static int sqnum, cur_sq_x, cur_sq_y, path_length; +static int start_x, start_y, start_dir, end_x, end_y, end_dir; +static int grid_width, grid_height; + +static Display *dpy; +static Window win; +static GC gc, cgc, tgc, logo_gc; +static Pixmap logo_map; + +static int x = 0, y = 0, restart = 0, stop = 1, state = 1; + +static int +check_events() /* X event handler [ rhess ] */ +{ + XEvent e; + + if (XPending(dpy)) { + XNextEvent(dpy, &e); + switch (e.type) { + + case ButtonPress: + switch (e.xbutton.button) { + case 3: + exit (0); + break; + case 2: + stop = !stop ; + if (state == 5) state = 4 ; + else { + restart = 1; + stop = 0; + } + break; + default: + restart = 1 ; + stop = 0 ; + break; + } + break; + + case ConfigureNotify: + restart = 1; + break; + case UnmapNotify: + stop = 1; + XClearWindow (dpy, win); + XSync (dpy, False); + break; + case Expose: + restart = 1; + break; + } + return(1); + } + return(0); +} + + +static void +set_maze_sizes (width, height) + int width, height; +{ + maze_size_x = width / grid_width; + maze_size_y = height / grid_height; +} + + +static void +initialize_maze() /* draw the surrounding wall and start/end squares */ +{ + register int i, j, wall; + + /* initialize all squares */ + for ( i=0; i> wall ); + maze[i][j] &= ~( WALL_TOP >> wall ); + cur_sq_x = i; + cur_sq_y = j; + start_x = i; + start_y = j; + start_dir = wall; + sqnum = 0; + + /* set end square */ + wall = (wall + 2)%4; + switch (wall) { + case 0: + i = get_random(maze_size_x); + j = 0; + break; + case 1: + i = maze_size_x - 1; + j = get_random(maze_size_y); + break; + case 2: + i = get_random(maze_size_x); + j = maze_size_y - 1; + break; + case 3: + i = 0; + j = get_random(maze_size_y); + break; + } + maze[i][j] |= END_SQUARE; + maze[i][j] |= ( DOOR_OUT_TOP >> wall ); + maze[i][j] &= ~( WALL_TOP >> wall ); + end_x = i; + end_y = j; + end_dir = wall; + + /* set logo */ + if ((maze_size_x > 15) && (maze_size_y > 15)) + { + int logow = 1 + logo_width / grid_width; + int logoh = 1 + logo_height / grid_height; + /* not closer than 3 grid units from a wall */ + logo_x = get_random (maze_size_x - logow - 6) + 3; + logo_y = get_random (maze_size_y - logoh - 6) + 3; + for (i=0; i> newdoor ); + + switch (newdoor) { + case 0: cur_sq_y--; + break; + case 1: cur_sq_x++; + break; + case 2: cur_sq_y++; + break; + case 3: cur_sq_x--; + break; + } + sqnum++; + + /* mark the in door */ + maze[cur_sq_x][cur_sq_y] |= ( DOOR_IN_TOP >> ((newdoor+2)%4) ); + + /* if end square set path length and save path */ + if ( maze[cur_sq_x][cur_sq_y] & END_SQUARE ) { + path_length = sqnum; + for ( i=0; i> start_dir); + maze[end_x][end_y] |= (WALL_TOP >> end_dir); + + /* initialize search path */ + i = 0; + path[i].x = end_x; + path[i].y = end_y; + path[i].dir = -1; + + /* do it */ + while (1) { + if ( ++path[i].dir >= 4 ) { + i--; + draw_solid_square( (int)(path[i].x), (int)(path[i].y), + (int)(path[i].dir), cgc); + } + else if ( ! (maze[path[i].x][path[i].y] & + (WALL_TOP >> path[i].dir)) && + ( (i == 0) || ( (path[i].dir != + (int)(path[i-1].dir+2)%4) ) ) ) { + enter_square(i); + i++; + if ( maze[path[i].x][path[i].y] & START_SQUARE ) { + return; + } + } + if (check_events()) return; + /* Abort solve on expose - cheapo repaint strategy */ + if (solve_delay) usleep (solve_delay); + } +} + + +static void +enter_square(n) /* move into a neighboring square */ + int n; +{ + draw_solid_square( (int)path[n].x, (int)path[n].y, + (int)path[n].dir, tgc); + + path[n+1].dir = -1; + switch (path[n].dir) { + case 0: path[n+1].x = path[n].x; + path[n+1].y = path[n].y - 1; + break; + case 1: path[n+1].x = path[n].x + 1; + path[n+1].y = path[n].y; + break; + case 2: path[n+1].x = path[n].x; + path[n+1].y = path[n].y + 1; + break; + case 3: path[n+1].x = path[n].x - 1; + path[n+1].y = path[n].y; + break; + } +} + +/* ---- */ + + +/* + * jmr additions for Jamie Zawinski's screensaver stuff, + * note that the code above this has probably been hacked about in some + * arbitrary way. + */ + +char *progclass = "Maze"; + +char *defaults[] = { + "Maze.background: black", /* to placate SGI */ + "Maze.foreground: white", /* to placate SGI */ + "*gridSize: 0", + "*solveDelay: 5000", + "*preDelay: 2000000", + "*postDelay: 4000000", + "*liveColor: green", + "*deadColor: red", +#ifdef XROGER + "*logoColor: red3", +#endif + 0 +}; + +XrmOptionDescRec options[] = { + { "-grid-size", ".gridSize", XrmoptionSepArg, 0 }, + { "-solve-delay", ".solveDelay", XrmoptionSepArg, 0 }, + { "-pre-delay", ".preDelay", XrmoptionSepArg, 0 }, + { "-post-delay", ".postDelay", XrmoptionSepArg, 0 }, + { "-live-color", ".liveColor", XrmoptionSepArg, 0 }, + { "-dead-color", ".deadColor", XrmoptionSepArg, 0 } +}; + +int options_size = (sizeof(options)/sizeof(options[0])); + +void screenhack(display,window) + Display *display; + Window window; +{ + Pixmap gray; + int size, root; + XWindowAttributes xgwa; + unsigned long bg, fg, pfg, pbg, lfg; + + size = get_integer_resource ("gridSize", "Dimension"); + root = get_boolean_resource("root", "Boolean"); + solve_delay = get_integer_resource ("solveDelay", "Integer"); + pre_solve_delay = get_integer_resource ("preDelay", "Integer"); + post_solve_delay = get_integer_resource ("postDelay", "Integer"); + + if (size < 2) size = 7 + (random () % 30); + grid_width = grid_height = size; + bw = (size > 6 ? 3 : (size-1)/2); + + dpy = display; win = window; /* the maze stuff uses global variables */ + + XGetWindowAttributes (dpy, win, &xgwa); + + x = 0; + y = 0; + + set_maze_sizes (xgwa.width, xgwa.height); + + if (! root) + XSelectInput (dpy, win, ExposureMask|ButtonPressMask|StructureNotifyMask); + + gc = XCreateGC(dpy, win, 0, 0); + cgc = XCreateGC(dpy, win, 0, 0); + tgc = XCreateGC(dpy,win,0,0); + logo_gc = XCreateGC(dpy, win, 0, 0); + + gray = XCreateBitmapFromData (dpy,win,gray1_bits,gray1_width,gray1_height); + + bg = get_pixel_resource ("background","Background", dpy, xgwa.colormap); + fg = get_pixel_resource ("foreground","Foreground", dpy, xgwa.colormap); + lfg = get_pixel_resource ("logoColor", "Foreground", dpy, xgwa.colormap); + pfg = get_pixel_resource ("liveColor", "Foreground", dpy, xgwa.colormap); + pbg = get_pixel_resource ("deadColor", "Foreground", dpy, xgwa.colormap); + if (mono_p) lfg = pfg = fg; + + if (lfg == bg) + lfg = ((bg == WhitePixel (dpy, DefaultScreen (dpy))) + ? BlackPixel (dpy, DefaultScreen (dpy)) + : WhitePixel (dpy, DefaultScreen (dpy))); + + XSetForeground (dpy, gc, fg); + XSetBackground (dpy, gc, bg); + XSetForeground (dpy, cgc, pbg); + XSetBackground (dpy, cgc, bg); + XSetForeground (dpy, tgc, pfg); + XSetBackground (dpy, tgc, bg); + XSetForeground (dpy, logo_gc, lfg); + XSetBackground (dpy, logo_gc, bg); + + XSetStipple (dpy, cgc, gray); + XSetFillStyle (dpy, cgc, FillOpaqueStippled); + +#ifdef XROGER + { + int w, h; + XGCValues gcv; + GC draw_gc, erase_gc; + extern void skull (); + /* round up to grid size */ + w = ((logo_width / grid_width) + 1) * grid_width; + h = ((logo_height / grid_height) + 1) * grid_height; + logo_map = XCreatePixmap (dpy, win, w, h, 1); + gcv.foreground = 1L; + draw_gc = XCreateGC (dpy, logo_map, GCForeground, &gcv); + gcv.foreground = 0L; + erase_gc= XCreateGC (dpy, logo_map, GCForeground, &gcv); + XFillRectangle (dpy, logo_map, erase_gc, 0, 0, w, h); + skull (dpy, logo_map, draw_gc, erase_gc, 5, 0, w-10, h-10); + XFreeGC (dpy, draw_gc); + XFreeGC (dpy, erase_gc); + } +#else + if (!(logo_map = XCreateBitmapFromData (dpy, win, logo_bits, + logo_width, logo_height))) + { + fprintf (stderr, "Can't create logo pixmap\n"); + exit (1); + } +#endif + XMapRaised(dpy, win); + srandom(getpid()); + + restart = root; + + while (1) { /* primary execution loop [ rhess ] */ + if (check_events()) continue ; + if (restart || stop) goto pop; + switch (state) { + case 1: + initialize_maze(); + break; + case 2: + XClearWindow(dpy, win); + draw_maze_border(); + break; + case 3: + create_maze(); + break; + case 4: + XSync (dpy, False); + usleep (pre_solve_delay); + break; + case 5: + solve_maze(); + break; + case 6: + XSync (dpy, False); + usleep (post_solve_delay); + state = 0 ; + break; + default: + abort (); + } + ++state; + pop: + if (restart) + { + static XWindowAttributes wattr; + restart = 0; + stop = 0; + state = 1; + XGetWindowAttributes (dpy, win, &wattr); + set_maze_sizes (wattr.width, wattr.height); + XClearWindow (dpy, win); + XSync (dpy, False); + } + } +} diff --git a/hacks/maze.exe_axp b/hacks/maze.exe_axp new file mode 100755 index 0000000000000000000000000000000000000000..f2dd87c6a04ac8657c819d0a3616de67c6605e24 GIT binary patch literal 35840 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 i`$A98 + * + * 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. + */ + +/* Make a little guy with a big nose and a hat wanter around the screen, + spewing out messages. Derived from xnlock by Dan Heller . + */ + +#include "screenhack.h" +#include + +#if __STDC__ +extern FILE *popen (const char *, const char *); +extern int pclose (FILE *); +#endif + +#define Pixel unsigned long + +#define font_height(font) (font->ascent + font->descent) +#define FONT_NAME "-*-times-*-*-*-*-18-*-*-*-*-*-*-*" + +static Display *dpy; +static Window window; +static int Width, Height; +static GC fg_gc, bg_gc, text_fg_gc, text_bg_gc; +static char *words, *get_words(); +static int x, y; +static XFontStruct *font; +static char *def_words = "I'm out running around."; +static void init_images(), walk(), talk(); +static int think(); +static unsigned long interval, look(); +static Pixmap left0, left1, right0, right1; +static Pixmap left_front, right_front, front, down; + +static char *program, *orig_program, *filename, *text; + +#define FROM_ARGV 1 +#define FROM_PROGRAM 2 +#define FROM_FILE 3 +#define FROM_RESRC 4 +static int getwordsfrom; + +#define IS_MOVING 1 +#define GET_PASSWD 2 +static int state; /* indicates states: walking or getting passwd */ + +static void (*next_fn) (); + +#ifndef VMS +#include "noses/nose.0.left" +#include "noses/nose.1.left" +#include "noses/nose.0.right" +#include "noses/nose.1.right" +#include "noses/nose.left.front" +#include "noses/nose.right.front" +#include "noses/nose.front" +#include "noses/nose.down" +#else +#include "noses/nose.0_left" +#include "noses/nose.1_left" +#include "noses/nose.0_right" +#include "noses/nose.1_right" +#include "noses/nose.left_front" +#include "noses/nose.right_front" +#include "noses/nose.front" +#include "noses/nose.down" +#endif + +static void +init_images () +{ + static Pixmap *images[] = { + &left0, &left1, &right0, &right1, + &left_front, &right_front, &front, &down + }; + static unsigned char *bits[] = { + nose_0_left_bits, nose_1_left_bits, nose_0_right_bits, + nose_1_right_bits, nose_left_front_bits, nose_right_front_bits, + nose_front_bits, nose_down_bits + }; + int i; + + for (i = 0; i < sizeof (images) / sizeof (images[0]); i++) + if (!(*images[i] = + XCreatePixmapFromBitmapData(dpy, window, + (char *) bits[i], 64, 64, 1, 0, 1))) + { + fprintf (stderr, "%s: Can't load nose images", progname); + exit (1); + } +} + +#define LEFT 001 +#define RIGHT 002 +#define DOWN 004 +#define UP 010 +#define FRONT 020 +#define X_INCR 3 +#define Y_INCR 2 + +static void +move() +{ + static int length, + dir; + + if (!length) + { + register int tries = 0; + dir = 0; + if ((random() & 1) && think()) + { + talk(0); /* sets timeout to itself */ + return; + } + if (!(random() % 3) && (interval = look())) + { + next_fn = move; + return; + } + interval = 20 + random() % 100; + do + { + if (!tries) + length = Width / 100 + random() % 90, tries = 8; + else + tries--; + switch (random() % 8) + { + case 0: + if (x - X_INCR * length >= 5) + dir = LEFT; + break; + case 1: + if (x + X_INCR * length <= Width - 70) + dir = RIGHT; + break; + case 2: + if (y - (Y_INCR * length) >= 5) + dir = UP, interval = 40; + break; + case 3: + if (y + Y_INCR * length <= Height - 70) + dir = DOWN, interval = 20; + break; + case 4: + if (x - X_INCR * length >= 5 && y - (Y_INCR * length) >= 5) + dir = (LEFT | UP); + break; + case 5: + if (x + X_INCR * length <= Width - 70 && + y - Y_INCR * length >= 5) + dir = (RIGHT | UP); + break; + case 6: + if (x - X_INCR * length >= 5 && + y + Y_INCR * length <= Height - 70) + dir = (LEFT | DOWN); + break; + case 7: + if (x + X_INCR * length <= Width - 70 && + y + Y_INCR * length <= Height - 70) + dir = (RIGHT | DOWN); + break; + default: + /* No Defaults */ + break; + } + } while (!dir); + } + walk(dir); + --length; + next_fn = move; +} + +static void +walk(dir) + register int dir; +{ + register int incr = 0; + static int lastdir; + static int up = 1; + static Pixmap frame; + + if (dir & (LEFT | RIGHT)) + { /* left/right movement (mabye up/down too) */ + up = -up; /* bouncing effect (even if hit a wall) */ + if (dir & LEFT) + { + incr = X_INCR; + frame = (up < 0) ? left0 : left1; + } + else + { + incr = -X_INCR; + frame = (up < 0) ? right0 : right1; + } + if ((lastdir == FRONT || lastdir == DOWN) && dir & UP) + { + + /* + * workaround silly bug that leaves screen dust when guy is + * facing forward or down and moves up-left/right. + */ + XCopyPlane(dpy, frame, window, fg_gc, 0, 0, 64, 64, x, y, 1L); + XFlush(dpy); + } + /* note that maybe neither UP nor DOWN is set! */ + if (dir & UP && y > Y_INCR) + y -= Y_INCR; + else if (dir & DOWN && y < Height - 64) + y += Y_INCR; + } + /* Explicit up/down movement only (no left/right) */ + else if (dir == UP) + XCopyPlane(dpy, front, window, fg_gc, + 0, 0, 64, 64, x, y -= Y_INCR, 1L); + else if (dir == DOWN) + XCopyPlane(dpy, down, window, fg_gc, + 0, 0, 64, 64, x, y += Y_INCR, 1L); + else if (dir == FRONT && frame != front) + { + if (up > 0) + up = -up; + if (lastdir & LEFT) + frame = left_front; + else if (lastdir & RIGHT) + frame = right_front; + else + frame = front; + XCopyPlane(dpy, frame, window, fg_gc, 0, 0, 64, 64, x, y, 1L); + } + if (dir & LEFT) + while (--incr >= 0) + { + XCopyPlane(dpy, frame, window, fg_gc, + 0, 0, 64, 64, --x, y + up, 1L); + XFlush(dpy); + } + else if (dir & RIGHT) + while (++incr <= 0) + { + XCopyPlane(dpy, frame, window, fg_gc, + 0, 0, 64, 64, ++x, y + up, 1L); + XFlush(dpy); + } + lastdir = dir; +} + +static int +think() +{ + if (random() & 1) + walk(FRONT); + if (random() & 1) + { + if (getwordsfrom == FROM_PROGRAM) + words = get_words(0, (char **) 0); + return 1; + } + return 0; +} + +#define MAXLINES 40 + +static void +talk(force_erase) + int force_erase; +{ + int width = 0, + height, + Z, + total = 0; + static int X, + Y, + talking; + static struct + { + int x, + y, + width, + height; + } s_rect; + register char *p, + *p2; + char buf[BUFSIZ], + args[MAXLINES][256]; + + /* clear what we've written */ + if (talking || force_erase) + { + if (!talking) + return; + XFillRectangle(dpy, window, bg_gc, s_rect.x - 5, s_rect.y - 5, + s_rect.width + 10, s_rect.height + 10); + talking = 0; + if (!force_erase) + next_fn = move; + interval = 0; + { + /* might as well check the window for size changes now... */ + XWindowAttributes xgwa; + XGetWindowAttributes (dpy, window, &xgwa); + Width = xgwa.width + 2; + Height = xgwa.height + 2; + } + return; + } + talking = 1; + walk(FRONT); + p = strcpy(buf, words); + + if (!(p2 = index(p, '\n')) || !p2[1]) + { + total = strlen (words); + strcpy (args[0], words); + width = XTextWidth(font, words, total); + height = 0; + } + else + /* p2 now points to the first '\n' */ + for (height = 0; p; height++) + { + int w; + *p2 = 0; + if ((w = XTextWidth(font, p, p2 - p)) > width) + width = w; + total += p2 - p; /* total chars; count to determine reading + * time */ + (void) strcpy(args[height], p); + if (height == MAXLINES - 1) + { + puts("Message too long!"); + break; + } + p = p2 + 1; + if (!(p2 = index(p, '\n'))) + break; + } + height++; + + /* + * Figure out the height and width in pixels (height, width) extend the + * new box by 15 pixels on the sides (30 total) top and bottom. + */ + s_rect.width = width + 30; + s_rect.height = height * font_height(font) + 30; + if (x - s_rect.width - 10 < 5) + s_rect.x = 5; + else if ((s_rect.x = x + 32 - (s_rect.width + 15) / 2) + + s_rect.width + 15 > Width - 5) + s_rect.x = Width - 15 - s_rect.width; + if (y - s_rect.height - 10 < 5) + s_rect.y = y + 64 + 5; + else + s_rect.y = y - 5 - s_rect.height; + + XFillRectangle(dpy, window, text_bg_gc, + s_rect.x, s_rect.y, s_rect.width, s_rect.height); + + /* make a box that's 5 pixels thick. Then add a thin box inside it */ + XSetLineAttributes(dpy, text_fg_gc, 5, 0, 0, 0); + XDrawRectangle(dpy, window, text_fg_gc, + s_rect.x, s_rect.y, s_rect.width - 1, s_rect.height - 1); + XSetLineAttributes(dpy, text_fg_gc, 0, 0, 0, 0); + XDrawRectangle(dpy, window, text_fg_gc, + s_rect.x + 7, s_rect.y + 7, s_rect.width - 15, s_rect.height - 15); + + X = 15; + Y = 15 + font_height(font); + + /* now print each string in reverse order (start at bottom of box) */ + for (Z = 0; Z < height; Z++) + { + XDrawString(dpy, window, text_fg_gc, s_rect.x + X, s_rect.y + Y, + args[Z], strlen(args[Z])); + Y += font_height(font); + } + interval = (total / 15) * 1000; + if (interval < 2000) interval = 2000; + next_fn = talk; +} + +static unsigned long +look() +{ + if (random() % 3) + { + XCopyPlane(dpy, (random() & 1) ? down : front, window, fg_gc, + 0, 0, 64, 64, x, y, 1L); + return 1000L; + } + if (!(random() % 5)) + return 0; + if (random() % 3) + { + XCopyPlane(dpy, (random() & 1) ? left_front : right_front, + window, fg_gc, 0, 0, 64, 64, x, y, 1L); + return 1000L; + } + if (!(random() % 5)) + return 0; + XCopyPlane(dpy, (random() & 1) ? left0 : right0, window, fg_gc, + 0, 0, 64, 64, x, y, 1L); + return 1000L; +} + + +static void +init_words() +{ + char *mode = get_string_resource ("mode", "Mode"); + + program = get_string_resource ("program", "Program"); + filename = get_string_resource ("filename", "Filename"); + text = get_string_resource ("text", "Text"); + + if (program) /* get stderr on stdout, so it shows up on the window */ + { + orig_program = program; + program = (char *) malloc (strlen (program) + 10); + strcpy (program, "( "); + strcat (program, orig_program); + strcat (program, " ) 2>&1"); + } + + if (!mode || !strcmp (mode, "program")) + getwordsfrom = FROM_PROGRAM; + else if (!strcmp (mode, "file")) + getwordsfrom = FROM_FILE; + else if (!strcmp (mode, "string")) + getwordsfrom = FROM_RESRC; + else + { + fprintf (stderr, + "%s: mode must be program, file, or string, not %s\n", + progname, mode); + exit (1); + } + + if (getwordsfrom == FROM_PROGRAM && !program) + { + fprintf (stderr, "%s: no program specified.\n", progname); + exit (1); + } + if (getwordsfrom == FROM_FILE && !filename) + { + fprintf (stderr, "%s: no file specified.\n", progname); + exit (1); + } + + words = get_words(); +} + +static int first_time = 1; + +static char * +get_words() +{ + FILE *pp; + static char buf[BUFSIZ]; + register char *p = buf; + + buf[0] = '\0'; + + switch (getwordsfrom) + { + case FROM_PROGRAM: + if ((pp = popen(program, "r"))) + { + while (fgets(p, sizeof(buf) - strlen(buf), pp)) + { + if (strlen(buf) + 1 < sizeof(buf)) + p = buf + strlen(buf); + else + break; + } + (void) pclose(pp); + if (! buf[0]) + sprintf (buf, "\"%s\" produced no output!", orig_program); + else if (!first_time && + !strcmp (buf, "sh: fortune: not found\n")) + switch (random () % 20) + { + case 1: strcat (buf, "( Get with the program, bub. )\n"); + break; + case 2: strcat (buf, + "( I blow my nose at you, you silly person! ) \n"); break; + case 3: strcat (buf, + "\nThe resource you want to\nset is `noseguy.program'\n"); + break; + case 4: + strcat(buf,"\nHelp!! Help!!\nAAAAAAGGGGHHH!! \n\n"); break; + case 5: strcpy (buf, "You have new mail.\n"); break; + case 6: + strcat(buf,"( Hello? Are you paying attention? )\n");break; + case 7: + strcat (buf, "sh: what kind of fool do you take me for? \n"); + break; + } + first_time = 0; + p = buf; + } + else + { + perror(program); + p = def_words; + } + break; + case FROM_FILE: + if ((pp = fopen(filename, "r"))) + { + while (fgets(p, sizeof(buf) - strlen(buf), pp)) + { + if (strlen(buf) + 1 < sizeof(buf)) + p = buf + strlen(buf); + else + break; + } + (void) fclose(pp); + if (! buf[0]) + sprintf (buf, "file \"%s\" is empty!", filename); + p = buf; + } + else + { + sprintf (buf, "couldn't read file \"%s\"!", filename); + p = buf; + } + break; + case FROM_RESRC: + p = text; + break; + default: + p = def_words; + break; + } + + if (!p || *p == '\0') + p = def_words; + return p; +} + + + +char *progclass = "Noseguy"; + +char *defaults [] = { + "Noseguy.background: black", /* to placate SGI */ + "Noseguy.foreground: white", + "*mode: string", + "*program: fortune -s", + "noseguy.font: -*-new century schoolbook-*-r-*-*-*-180-*-*-*-*-*-*", + 0 +}; + +XrmOptionDescRec options [] = { + { "-mode", ".mode", XrmoptionSepArg, 0 }, + { "-program", ".program", XrmoptionSepArg, 0 }, + { "-text", ".text", XrmoptionSepArg, 0 }, + { "-filename", ".filename", XrmoptionSepArg, 0 }, + { "-font", ".font", XrmoptionSepArg, 0 }, + { "-text-foreground", ".textForeground", XrmoptionSepArg, 0 }, + { "-text-background", ".textBackground", XrmoptionSepArg, 0 } +}; +int options_size = (sizeof (options) / sizeof (options[0])); + + +static void +noseguy_init (d, w) + Display *d; + Window w; +{ + Pixel fg, bg, text_fg, text_bg; + XWindowAttributes xgwa; + Colormap cmap; + char *fontname = get_string_resource ("font", "Font"); + char **list; + int foo, i; + XGCValues gcvalues; + dpy = d; + window = w; + XGetWindowAttributes (dpy, window, &xgwa); + Width = xgwa.width + 2; + Height = xgwa.height + 2; + cmap = xgwa.colormap; + + init_words(); + init_images(); + + if (!fontname || !(font = XLoadQueryFont(dpy, fontname))) + { + list = XListFonts(dpy, FONT_NAME, 32767, &foo); + for (i = 0; i < foo; i++) + if ((font = XLoadQueryFont(dpy, list[i]))) + break; + if (!font) + { + fprintf (stderr, "%s: Can't find a large font.", progname); + exit (1); + } + XFreeFontNames(list); + } + + fg = get_pixel_resource ("foreground", "Foreground", dpy, cmap); + bg = get_pixel_resource ("background", "Background", dpy, cmap); + text_fg = get_pixel_resource ("textForeground", "Foreground", dpy, cmap); + text_bg = get_pixel_resource ("textBackground", "Background", dpy, cmap); + /* notice when unspecified */ + if (! get_string_resource ("textForeground", "Foreground")) + text_fg = bg; + if (! get_string_resource ("textBackground", "Background")) + text_bg = fg; + + gcvalues.font = font->fid; + gcvalues.graphics_exposures = False; + gcvalues.foreground = fg; + gcvalues.background = bg; + fg_gc = XCreateGC (dpy, window, + GCForeground|GCBackground|GCGraphicsExposures|GCFont, + &gcvalues); + gcvalues.foreground = bg; + gcvalues.background = fg; + bg_gc = XCreateGC (dpy, window, + GCForeground|GCBackground|GCGraphicsExposures|GCFont, + &gcvalues); + gcvalues.foreground = text_fg; + gcvalues.background = text_bg; + text_fg_gc = XCreateGC (dpy, window, + GCForeground|GCBackground|GCGraphicsExposures|GCFont, + &gcvalues); + gcvalues.foreground = text_bg; + gcvalues.background = text_fg; + text_bg_gc = XCreateGC (dpy, window, + GCForeground|GCBackground|GCGraphicsExposures|GCFont, + &gcvalues); + x = Width / 2; + y = Height / 2; + state = IS_MOVING; +} + +void +screenhack (d, w) + Display *d; + Window w; +{ + noseguy_init (d, w); + next_fn = move; + while (1) + { + next_fn (0); + XSync (dpy, True); + usleep (interval * 1000); + } +} + diff --git a/hacks/noseguy.exe_axp b/hacks/noseguy.exe_axp new file mode 100755 index 0000000000000000000000000000000000000000..48535013e61573fc6021dbb3481bf9fa9d403ea7 GIT binary patch literal 32768 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 literal 0 HcmV?d00001 diff --git a/hacks/noseguy.exe_vax b/hacks/noseguy.exe_vax new file mode 100755 index 0000000000000000000000000000000000000000..56cc80f8553ae4b77f1ffa95b8eb4f1ae5bea39f GIT binary patch literal 21504 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 FzW^n-T?_yK literal 0 HcmV?d00001 diff --git a/hacks/noseguy.hlp b/hacks/noseguy.hlp new file mode 100755 index 00000000..be32b73c --- /dev/null +++ b/hacks/noseguy.hlp @@ -0,0 +1,69 @@ +1 NOSEGUY +A little guy with a big nose wanders around being witty + +SYNOPSIS + + $ noseguy [-display host:display.screen] [-foreground color] + [-background color] [-text-foreground color] + [-text-background color] [-font font] [-window] [-root] + [-mode mode] [-program program] [-filename \file] [-text text] + +2 DESCRIPTION +A little man with a big nose and a hat runs around spewing out messages to +the screen. This code (and its bitmaps) were extracted from the xnlock +program. + +2 OPTIONS +noseguy accepts the following options: + + -window +Draw on a newly-created window. This is the default. + + -root +Draw on the root window. + + -font font +The font used for the messages. + + -mode program | file | string +In program mode, the messages are gotten by running a program. +The program used is controlled by the -program option, and +the .program resource. + +In filename mode, the message used is the contents of a file. +The file used is controlled by the -file option, and +the .filename resource. + +In string mode, the message is whatever was specified on the +command line as the -text option, or in the resource database +as the .text resource. + + -program " program" +If mode is program (the default), then this program will be +run periodically, and its output will be the text of the messages. The +default program is "fortune -s", but yow is also a good choice. + + -filename file +If mode is file, then the contents of this file will be used +for all messages. + + -text string +If mode is string, then this text will be used for all messages. + +2 ENVIRONMENT + + DISPLAY +to get the default host and display number. + + XENVIRONMENT +to get the name of a resource file that overrides the global resources +stored in the RESOURCE_MANAGER property. + +2 COPYRIGHT +Copyright 1985, 1990 by Dan Heller . + +2 AUTHOR +Dan Heller , 1985. + +Ability to run standalone or with xscreensaver added by +Jamie Zawinski , 13-aug-92. diff --git a/hacks/noseguy.man b/hacks/noseguy.man new file mode 100755 index 00000000..63aa3cba --- /dev/null +++ b/hacks/noseguy.man @@ -0,0 +1,67 @@ +.TH XScreenSaver 1 "13-aug-92" "X Version 11" +.SH NAME +noseguy - a little guy with a big nose wanders around being witty +.SH SYNOPSIS +.B noseguy +[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-text-foreground \fIcolor\fP] [\-text-background \fIcolor\fP] [\-font \fIfont\fP] [\-window] [\-root] [\-mode \fImode\fP] [\-program \fIprogram\fP] [\-filename \file\fP] [\-text \fItext\fP] +.SH DESCRIPTION +A little man with a big nose and a hat runs around spewing out messages to +the screen. This code (and its bitmaps) were extracted from the \fIxnlock\fP +program. +.SH OPTIONS +.I noseguy +accepts the following options: +.TP 8 +.B \-window +Draw on a newly-created window. This is the default. +.TP 8 +.B \-root +Draw on the root window. +.TP 8 +.B \-font font +The font used for the messages. +.TP 8 +.B \-mode program | file | string +In \fIprogram\fP mode, the messages are gotten by running a program. +The program used is controlled by the \fI\-program\fP option, and +the \fI.program\fP resource. + +In \fIfilename\fP mode, the message used is the contents of a file. +The file used is controlled by the \fI\-file\fP option, and +the \fI.filename\fP resource. + +In \fIstring\fP mode, the message is whatever was specified on the +command line as the \fI\-text\fP option, or in the resource database +as the \fI.text\fP resource. +.TP 8 +.B \-program " program" +If \fImode\fP is \fIprogram\fP (the default), then this program will be +run periodically, and its output will be the text of the messages. The +default program is \fI"fortune -s"\fP, but \fIyow\fP is also a good choice. +.TP 8 +.B \-filename file +If \fImode\fP is \fIfile\fP, then the contents of this file will be used +for all messages. +.TP 8 +.B \-text string +If \fImode\fP is \fIstring\fP, then this text will be used for all messages. +.SH ENVIRONMENT +.PP +.TP 8 +.B DISPLAY +to get the default host and display number. +.TP 8 +.B XENVIRONMENT +to get the name of a resource file that overrides the global resources +stored in the RESOURCE_MANAGER property. +.SH SEE ALSO +.BR X (1), +.BR xscreensaver (1), +.BR xnlock (1) +.SH COPYRIGHT +Copyright 1985, 1990 by Dan Heller . +.SH AUTHOR +Dan Heller , 1985. + +Ability to run standalone or with \fIxscreensaver\fP added by +Jamie Zawinski , 13-aug-92. diff --git a/hacks/noses/cvs/entries b/hacks/noses/cvs/entries new file mode 100755 index 00000000..86e7659f --- /dev/null +++ b/hacks/noses/cvs/entries @@ -0,0 +1,8 @@ +/nose.0.left/1.1/Tue Oct 11 12:26:40 1994 Thu Aug 25 15:04:28 1994// +/nose.0.right/1.1/Tue Oct 11 12:26:40 1994 Thu Aug 25 15:04:29 1994// +/nose.1.left/1.1/Tue Oct 11 12:26:40 1994 Thu Aug 25 15:04:30 1994// +/nose.1.right/1.1/Tue Oct 11 12:26:40 1994 Thu Aug 25 15:04:31 1994// +/nose.down/1.1/Tue Oct 11 12:26:40 1994 Thu Aug 25 15:04:32 1994// +/nose.front/1.1/Tue Oct 11 12:26:40 1994 Thu Aug 25 15:04:33 1994// +/nose.left.front/1.1/Tue Oct 11 12:26:40 1994 Thu Aug 25 15:04:34 1994// +/nose.right.front/1.1/Tue Oct 11 12:26:40 1994 Thu Aug 25 15:04:35 1994// diff --git a/hacks/noses/cvs/repository b/hacks/noses/cvs/repository new file mode 100755 index 00000000..5c363df0 --- /dev/null +++ b/hacks/noses/cvs/repository @@ -0,0 +1 @@ +/m/src/xscreensaver/hacks/noses diff --git a/hacks/noses/nose.0_left b/hacks/noses/nose.0_left new file mode 100755 index 00000000..cb3d1528 --- /dev/null +++ b/hacks/noses/nose.0_left @@ -0,0 +1,38 @@ +#define nose_0_left_width 64 +#define nose_0_left_height 64 +static unsigned char nose_0_left_bits[] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x40,0x00, + 0x00,0x04,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x40, + 0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x04,0x00,0x00,0x00,0x00, + 0x40,0x00,0x00,0x04,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0x3f,0x00,0x00, + 0x08,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x20,0x00, + 0x00,0xf8,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0xf0,0x03,0x00,0x00,0x80,0x00, + 0x00,0x00,0x0e,0x0c,0x00,0x00,0x80,0x01,0x00,0x00,0x03,0x30,0x00,0x00,0x00, + 0x01,0x00,0x80,0x00,0x40,0x00,0x00,0x00,0x02,0x00,0x40,0x00,0xc0,0x00,0x00, + 0x00,0x02,0x00,0x20,0x00,0x80,0x00,0x00,0x00,0x04,0x00,0x10,0x00,0x00,0x00, + 0x00,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x00, + 0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00, + 0x00,0x00,0x00,0x00,0x10,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x08, + 0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x10,0x00, + 0x08,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x10, + 0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x00,0x01,0x00,0x00, + 0x18,0x00,0x20,0x00,0x00,0x01,0x00,0x00,0x08,0x00,0x40,0x00,0x80,0x00,0x00, + 0x00,0x08,0x00,0x80,0x00,0x40,0x00,0x00,0x00,0x0c,0x00,0x00,0x01,0x20,0x00, + 0x00,0x00,0x04,0x00,0x00,0x06,0x18,0x00,0x00,0x00,0x06,0x00,0x00,0xf8,0x07, + 0x00,0x00,0x00,0x02,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0x01,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x0f,0x00,0x00,0x00, + 0x00,0xff,0x00,0x04,0x10,0x00,0x00,0x00,0xc0,0x00,0x03,0x03,0x10,0x00,0x00, + 0x00,0x30,0x00,0x0c,0x01,0x20,0x00,0x00,0x00,0x08,0x00,0x98,0x00,0x20,0x00, + 0x00,0x00,0x0c,0x03,0x60,0x00,0x20,0x00,0x00,0x00,0xc2,0x00,0xc0,0x00,0x20, + 0x00,0x00,0x00,0x42,0x00,0x80,0x00,0x20,0x00,0x00,0x00,0x21,0x00,0x00,0x01, + 0x20,0x00,0x00,0x00,0x21,0x00,0x00,0x01,0x20,0x00,0x00,0x00,0x21,0x00,0x00, + 0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x01,0x00, + 0x00,0x00,0x40,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x02, + 0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x00,0x00, + 0x18,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x10,0x00,0x00, + 0x00,0xc0,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00}; diff --git a/hacks/noses/nose.0_right b/hacks/noses/nose.0_right new file mode 100755 index 00000000..f387baa7 --- /dev/null +++ b/hacks/noses/nose.0_right @@ -0,0 +1,38 @@ +#define nose_0_right_width 64 +#define nose_0_right_height 64 +static unsigned char nose_0_right_bits[] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x20,0x00, + 0x00,0x02,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x20, + 0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x02,0x00,0x00,0x00,0x00, + 0x20,0x00,0x00,0x02,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0x1f,0x00,0x00, + 0x04,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x10,0x00, + 0x00,0xfc,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0xc0,0x0f, + 0x00,0x00,0x80,0x01,0x00,0x00,0x30,0x70,0x00,0x00,0x80,0x00,0x00,0x00,0x0c, + 0xc0,0x00,0x00,0x40,0x00,0x00,0x00,0x02,0x00,0x01,0x00,0x40,0x00,0x00,0x00, + 0x03,0x00,0x02,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x04,0x00,0x20,0x00,0x00, + 0x00,0x00,0x00,0x08,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x10,0x00, + 0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x08, + 0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x10,0x00, + 0x08,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x10, + 0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x08,0x00,0x00,0x00,0x00,0x00, + 0x10,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x18,0x00,0x00,0x80,0x00, + 0x00,0x08,0x00,0x10,0x00,0x00,0x80,0x00,0x00,0x04,0x00,0x10,0x00,0x00,0x00, + 0x01,0x00,0x02,0x00,0x30,0x00,0x00,0x00,0x02,0x00,0x01,0x00,0x20,0x00,0x00, + 0x00,0x04,0x80,0x00,0x00,0x60,0x00,0x00,0x00,0x18,0x60,0x00,0x00,0x40,0x00, + 0x00,0x00,0xe0,0x1f,0x00,0x00,0x80,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x1f,0x00,0x00,0x00,0x00,0x00, + 0x00,0x08,0x20,0x00,0xff,0x00,0x00,0x00,0x00,0x08,0xc0,0xc0,0x00,0x03,0x00, + 0x00,0x00,0x04,0x80,0x30,0x00,0x0c,0x00,0x00,0x00,0x04,0x00,0x19,0x00,0x10, + 0x00,0x00,0x00,0x04,0x00,0x06,0xc0,0x30,0x00,0x00,0x00,0x04,0x00,0x03,0x00, + 0x43,0x00,0x00,0x00,0x04,0x00,0x01,0x00,0x42,0x00,0x00,0x00,0x04,0x80,0x00, + 0x00,0x84,0x00,0x00,0x00,0x04,0x80,0x00,0x00,0x84,0x00,0x00,0x00,0x04,0x00, + 0x00,0x00,0x84,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x02, + 0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x40,0x00,0x00,0x00, + 0x02,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x00, + 0x00,0x04,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x0e,0x00, + 0x00,0x00,0xf0,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00}; diff --git a/hacks/noses/nose.1_left b/hacks/noses/nose.1_left new file mode 100755 index 00000000..8a6b8295 --- /dev/null +++ b/hacks/noses/nose.1_left @@ -0,0 +1,38 @@ +#define nose_1_left_width 64 +#define nose_1_left_height 64 +static unsigned char nose_1_left_bits[] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x40,0x00, + 0x00,0x04,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x40, + 0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x04,0x00,0x00,0x00,0x00, + 0x40,0x00,0x00,0x04,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0x3f,0x00,0x00, + 0x08,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x20,0x00, + 0x00,0xf8,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0xf0,0x03,0x00,0x00,0x80,0x00, + 0x00,0x00,0x0e,0x0c,0x00,0x00,0x80,0x01,0x00,0x00,0x03,0x30,0x00,0x00,0x00, + 0x01,0x00,0x80,0x00,0x40,0x00,0x00,0x00,0x02,0x00,0x40,0x00,0xc0,0x00,0x00, + 0x00,0x02,0x00,0x20,0x00,0x80,0x00,0x00,0x00,0x04,0x00,0x10,0x00,0x00,0x00, + 0x00,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x00, + 0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00, + 0x00,0x00,0x00,0x00,0x10,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x08, + 0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x10,0x00, + 0x08,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x10, + 0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x00,0x01,0x00,0x00, + 0x18,0x00,0x10,0x00,0x00,0x01,0x00,0x00,0x08,0x00,0x20,0x00,0x80,0x00,0x00, + 0x00,0x08,0x00,0x40,0x00,0x40,0x00,0x00,0x00,0x0c,0x00,0x80,0x00,0x20,0x00, + 0x00,0x00,0xe4,0x00,0x00,0x03,0x18,0x00,0x00,0x00,0x26,0x03,0x00,0xfc,0x07, + 0x00,0x00,0x00,0x12,0x0c,0x00,0x00,0xf8,0xff,0xff,0xff,0x11,0x10,0x80,0x1f, + 0x00,0x00,0x00,0x00,0x08,0x20,0x60,0x60,0xc0,0x07,0x00,0x00,0x04,0x40,0x10, + 0xc0,0x20,0x08,0x00,0x1f,0x02,0x40,0x08,0x00,0x21,0x10,0xc0,0x60,0x02,0x40, + 0x04,0x00,0x12,0x20,0x20,0x80,0x02,0x20,0xc2,0x00,0x14,0x40,0x18,0x00,0x03, + 0x20,0x22,0x00,0x0c,0x80,0x04,0x03,0x02,0x10,0x12,0x00,0x08,0x80,0x86,0x00, + 0x04,0x10,0x12,0x00,0x10,0x80,0x42,0x00,0x18,0x08,0x12,0x00,0x10,0x40,0x42, + 0x00,0x00,0x04,0x02,0x00,0x20,0x40,0x42,0x00,0x00,0x04,0x02,0x00,0x00,0x20, + 0x42,0x00,0x00,0x02,0x04,0x00,0x00,0x20,0x02,0x00,0x00,0x01,0x04,0x00,0x00, + 0x20,0x02,0x00,0x00,0x01,0x08,0x00,0x00,0x20,0x04,0x00,0x80,0x00,0x10,0x00, + 0x00,0x20,0x0c,0x00,0x80,0x00,0x60,0x00,0x00,0x10,0x08,0x00,0x40,0x00,0x80, + 0xff,0xff,0x0f,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0x0f,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00}; diff --git a/hacks/noses/nose.1_right b/hacks/noses/nose.1_right new file mode 100755 index 00000000..f7c8962c --- /dev/null +++ b/hacks/noses/nose.1_right @@ -0,0 +1,38 @@ +#define nose_1_right_width 64 +#define nose_1_right_height 64 +static unsigned char nose_1_right_bits[] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x20,0x00, + 0x00,0x02,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x20, + 0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x02,0x00,0x00,0x00,0x00, + 0x20,0x00,0x00,0x02,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0x1f,0x00,0x00, + 0x04,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x10,0x00, + 0x00,0xfc,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0xc0,0x0f, + 0x00,0x00,0x80,0x01,0x00,0x00,0x30,0x70,0x00,0x00,0x80,0x00,0x00,0x00,0x0c, + 0xc0,0x00,0x00,0x40,0x00,0x00,0x00,0x02,0x00,0x01,0x00,0x40,0x00,0x00,0x00, + 0x03,0x00,0x02,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x04,0x00,0x20,0x00,0x00, + 0x00,0x00,0x00,0x08,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x10,0x00, + 0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x08, + 0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x10,0x00, + 0x08,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x10, + 0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x08,0x00,0x00,0x00,0x00,0x00, + 0x10,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x18,0x00,0x00,0x80,0x00, + 0x00,0x08,0x00,0x10,0x00,0x00,0x80,0x00,0x00,0x08,0x00,0x10,0x00,0x00,0x00, + 0x01,0x00,0x04,0x00,0x30,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x27,0x00,0x00, + 0x00,0x04,0x00,0x01,0xc0,0x64,0x00,0x00,0x00,0x18,0xc0,0x00,0x30,0x48,0x00, + 0x00,0x00,0xe0,0x3f,0x00,0x08,0x88,0xff,0xff,0xff,0x1f,0x00,0x00,0x04,0x10, + 0x00,0x00,0x00,0x00,0xf8,0x01,0x02,0x20,0x00,0x00,0xe0,0x03,0x06,0x06,0x02, + 0x40,0xf8,0x00,0x10,0x04,0x03,0x08,0x02,0x40,0x06,0x03,0x08,0x84,0x00,0x10, + 0x04,0x40,0x01,0x04,0x04,0x48,0x00,0x20,0x04,0xc0,0x00,0x18,0x02,0x28,0x00, + 0x43,0x08,0x40,0xc0,0x20,0x01,0x30,0x00,0x44,0x08,0x20,0x00,0x61,0x01,0x10, + 0x00,0x48,0x10,0x18,0x00,0x42,0x01,0x08,0x00,0x48,0x20,0x00,0x00,0x42,0x02, + 0x08,0x00,0x48,0x20,0x00,0x00,0x42,0x02,0x04,0x00,0x40,0x40,0x00,0x00,0x42, + 0x04,0x00,0x00,0x40,0x80,0x00,0x00,0x40,0x04,0x00,0x00,0x20,0x80,0x00,0x00, + 0x40,0x04,0x00,0x00,0x20,0x00,0x01,0x00,0x20,0x04,0x00,0x00,0x10,0x00,0x01, + 0x00,0x30,0x04,0x00,0x00,0x08,0x00,0x02,0x00,0x10,0x08,0x00,0x00,0x06,0x00, + 0x0c,0x00,0x0c,0xf0,0xff,0xff,0x01,0x00,0xf0,0xff,0x03,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00}; diff --git a/hacks/noses/nose.down b/hacks/noses/nose.down new file mode 100755 index 00000000..e8bdba4f --- /dev/null +++ b/hacks/noses/nose.down @@ -0,0 +1,38 @@ +#define nose_down_width 64 +#define nose_down_height 64 +static unsigned char nose_down_bits[] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0xfc,0xff,0x01,0x00,0x00,0x00,0x00,0xc0,0x03,0x00,0x1e,0x00, + 0x00,0x00,0x00,0x38,0x00,0x00,0xe0,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00, + 0x03,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x40,0x00,0x00,0x00, + 0x00,0x08,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x10,0x00,0x80, + 0x1f,0x00,0x40,0x00,0x00,0x08,0x00,0x60,0x60,0x00,0x80,0x00,0x00,0x08,0x00, + 0x10,0x80,0x00,0x80,0x00,0x00,0x04,0x00,0x08,0x00,0x01,0x00,0x01,0x00,0x04, + 0x00,0x08,0x00,0x01,0x00,0x01,0x00,0x02,0x00,0x18,0x80,0x01,0x00,0x02,0x00, + 0x02,0x00,0x68,0x60,0x01,0x00,0x02,0x00,0x02,0x00,0x88,0x1f,0x01,0x00,0x02, + 0x00,0x02,0x00,0x08,0x00,0x01,0x00,0x02,0x00,0x02,0x00,0x10,0x80,0x00,0x00, + 0x03,0x00,0x06,0x00,0x60,0x60,0x00,0x80,0x02,0x00,0x0c,0x00,0x80,0x1f,0x00, + 0x40,0x01,0x00,0x14,0x00,0x00,0x00,0x00,0x20,0x01,0x00,0x28,0x00,0x00,0x00, + 0x00,0x90,0x00,0x00,0x50,0x00,0x00,0x00,0x00,0x48,0x00,0x00,0xa0,0x01,0x00, + 0x00,0x00,0x26,0x00,0x00,0x40,0x1e,0x00,0x00,0xc0,0x11,0x00,0x00,0x80,0xe1, + 0x03,0x00,0x3c,0x0c,0x00,0x00,0x00,0x0e,0xfc,0xff,0x83,0x03,0x00,0x00,0x00, + 0xf0,0x01,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0x0f,0x00,0x00,0x00, + 0x00,0x80,0x03,0x00,0x0c,0x00,0x00,0x00,0x00,0x80,0x02,0x00,0x14,0x00,0x00, + 0x00,0x00,0x60,0x04,0x00,0x12,0x00,0x00,0xc0,0x7f,0x10,0x04,0x00,0x22,0xe0, + 0x01,0x70,0xc0,0x18,0x08,0x00,0x61,0x1c,0x06,0x10,0x00,0x0f,0x30,0xc0,0x80, + 0x07,0x08,0x08,0x00,0x06,0xc0,0x3f,0x80,0x01,0x08,0x08,0x00,0x18,0x00,0x02, + 0xc0,0x00,0x10,0x04,0x00,0x30,0x00,0x05,0x30,0x00,0x10,0x04,0x00,0x00,0x80, + 0x08,0x18,0x00,0x20,0x04,0x00,0x00,0x80,0x08,0x00,0x00,0x20,0x04,0x00,0x00, + 0x40,0x10,0x00,0x00,0x20,0x24,0x00,0x00,0x40,0x10,0x00,0x00,0x22,0x24,0x00, + 0x00,0x40,0x10,0x00,0x00,0x22,0x44,0x00,0x00,0x40,0x10,0x00,0x00,0x11,0x84, + 0x01,0x00,0xc0,0x18,0x00,0xc0,0x10,0x08,0x00,0x00,0x80,0x08,0x00,0x00,0x08, + 0x30,0x00,0x00,0x80,0x08,0x00,0x00,0x04,0xe0,0xff,0xff,0xff,0xf8,0xff,0xff, + 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00}; diff --git a/hacks/noses/nose.front b/hacks/noses/nose.front new file mode 100755 index 00000000..64b82015 --- /dev/null +++ b/hacks/noses/nose.front @@ -0,0 +1,38 @@ +#define nose_front_width 64 +#define nose_front_height 64 +static unsigned char nose_front_bits[] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x40,0x00, + 0x00,0x04,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x40, + 0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x04,0x00,0x00,0x00,0x00, + 0x40,0x00,0x00,0x04,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0x3f,0x00,0x00, + 0x08,0x00,0xc0,0x1f,0x00,0x20,0x00,0x00,0x08,0x00,0x30,0x60,0x00,0x20,0x00, + 0x00,0xf8,0xff,0x0f,0x80,0xff,0x3f,0x00,0x00,0x00,0x02,0x02,0x00,0x82,0x00, + 0x00,0x00,0x00,0x03,0x01,0x00,0x84,0x01,0x00,0x00,0x00,0x81,0x00,0x00,0x08, + 0x01,0x00,0x00,0x80,0x80,0x00,0x00,0x08,0x02,0x00,0x00,0x80,0x40,0x00,0x00, + 0x10,0x02,0x00,0x00,0x40,0x40,0x00,0x00,0x10,0x04,0x00,0x00,0x40,0x20,0x00, + 0x00,0x20,0x04,0x00,0x00,0x60,0x20,0x00,0x00,0x20,0x0c,0x00,0x00,0x20,0x20, + 0x00,0x00,0x20,0x08,0x00,0x00,0x20,0x20,0x00,0x00,0x20,0x08,0x00,0x00,0x10, + 0x20,0x00,0x00,0x20,0x10,0x00,0x00,0x10,0x20,0x00,0x00,0x20,0x10,0x00,0x00, + 0x10,0x20,0x00,0x00,0x20,0x10,0x00,0x00,0x10,0x40,0x00,0x00,0x10,0x10,0x00, + 0x00,0x10,0x40,0x00,0x00,0x10,0x10,0x00,0x00,0x10,0x80,0x00,0x00,0x08,0x10, + 0x00,0x00,0x10,0x80,0x00,0x00,0x08,0x10,0x00,0x00,0x30,0x00,0x01,0x00,0x04, + 0x18,0x00,0x00,0x20,0x00,0x02,0x00,0x02,0x08,0x00,0x00,0x20,0x00,0x0c,0x80, + 0x01,0x08,0x00,0x00,0x60,0x00,0x30,0x60,0x00,0x0c,0x00,0x00,0x40,0x00,0xc0, + 0x1f,0x00,0x04,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01, + 0x00,0x00,0x00,0x02,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0x01,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x0f,0xc0,0x0f,0x00,0x00,0x00, + 0x00,0x40,0x10,0x20,0x10,0x00,0x00,0x00,0x00,0x20,0x60,0x30,0x20,0x00,0x00, + 0x00,0x00,0x20,0xc0,0x18,0x20,0x00,0x00,0xc0,0x7f,0x10,0x80,0x0d,0x40,0xe0, + 0x01,0x70,0xc0,0x18,0x00,0x05,0x40,0x1c,0x06,0x10,0x00,0x0f,0x00,0x05,0x80, + 0x07,0x08,0x08,0x00,0x06,0x00,0x05,0x80,0x01,0x08,0x08,0x00,0x18,0x00,0x05, + 0xc0,0x00,0x10,0x04,0x00,0x30,0x00,0x05,0x30,0x00,0x10,0x04,0x00,0x00,0x80, + 0x08,0x18,0x00,0x20,0x04,0x00,0x00,0x80,0x08,0x00,0x00,0x20,0x04,0x00,0x00, + 0x40,0x10,0x00,0x00,0x20,0x24,0x00,0x00,0x40,0x10,0x00,0x00,0x22,0x24,0x00, + 0x00,0x40,0x10,0x00,0x00,0x22,0x44,0x00,0x00,0x40,0x10,0x00,0x00,0x11,0x84, + 0x01,0x00,0xc0,0x18,0x00,0xc0,0x10,0x08,0x00,0x00,0x80,0x08,0x00,0x00,0x08, + 0x30,0x00,0x00,0x80,0x08,0x00,0x00,0x04,0xe0,0xff,0xff,0xff,0xf8,0xff,0xff, + 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00}; diff --git a/hacks/noses/nose.left_front b/hacks/noses/nose.left_front new file mode 100755 index 00000000..3a871eaa --- /dev/null +++ b/hacks/noses/nose.left_front @@ -0,0 +1,38 @@ +#define nose_left_front_width 64 +#define nose_left_front_height 64 +static unsigned char nose_left_front_bits[] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x40,0x00, + 0x00,0x04,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x40, + 0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x04,0x00,0x00,0x00,0x00, + 0x40,0x00,0x00,0x04,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0x3f,0x00,0x00, + 0x08,0x00,0xe0,0x0f,0x00,0x20,0x00,0x00,0x08,0x00,0x18,0x30,0x00,0x20,0x00, + 0x00,0xf8,0xff,0x07,0xc0,0xff,0x3f,0x00,0x00,0x00,0x02,0x01,0x00,0x81,0x00, + 0x00,0x00,0x00,0x83,0x00,0x00,0x82,0x01,0x00,0x00,0x00,0x41,0x00,0x00,0x04, + 0x01,0x00,0x00,0x80,0x40,0x00,0x00,0x04,0x02,0x00,0x00,0x80,0x20,0x00,0x00, + 0x08,0x02,0x00,0x00,0x40,0x20,0x00,0x00,0x08,0x04,0x00,0x00,0x40,0x10,0x00, + 0x00,0x10,0x04,0x00,0x00,0x60,0x10,0x00,0x00,0x10,0x0c,0x00,0x00,0x20,0x10, + 0x00,0x00,0x10,0x08,0x00,0x00,0x30,0x10,0x00,0x00,0x10,0x08,0x00,0x00,0x10, + 0x10,0x00,0x00,0x10,0x10,0x00,0x00,0x10,0x10,0x00,0x00,0x10,0x10,0x00,0x00, + 0x10,0x10,0x00,0x00,0x10,0x10,0x00,0x00,0x10,0x20,0x00,0x00,0x08,0x10,0x00, + 0x00,0x10,0x20,0x00,0x00,0x08,0x10,0x00,0x00,0x10,0x40,0x00,0x00,0x04,0x10, + 0x00,0x00,0x30,0x40,0x00,0x00,0x04,0x10,0x00,0x00,0x20,0x80,0x00,0x00,0x02, + 0x18,0x00,0x00,0x20,0x00,0x01,0x00,0x01,0x08,0x00,0x00,0x60,0x00,0x06,0xc0, + 0x00,0x08,0x00,0x00,0x80,0x00,0x18,0x30,0x00,0x0c,0x00,0x00,0x80,0x00,0xe0, + 0x0f,0x00,0x04,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01, + 0x00,0x00,0x00,0x02,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0x01,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x0f,0x00,0x00,0x00, + 0x00,0xff,0x00,0x04,0x10,0x00,0x00,0x00,0xe0,0x00,0x07,0x02,0x10,0x00,0x00, + 0x00,0x30,0x00,0x8c,0x01,0x20,0x00,0x00,0x00,0x0c,0x00,0x90,0x00,0x20,0x00, + 0x00,0x00,0x04,0x03,0x60,0x00,0x20,0x00,0x00,0x00,0xc2,0x00,0xc0,0x00,0x20, + 0x00,0x00,0x00,0x42,0x00,0x00,0x01,0x20,0x00,0x00,0x00,0x21,0x00,0x00,0x02, + 0x20,0x00,0x00,0x00,0x21,0x00,0x00,0x06,0x20,0x00,0x00,0x00,0x21,0x00,0x00, + 0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x03,0x00, + 0x00,0x00,0x40,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x02, + 0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x00,0x00, + 0x18,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x10,0x00,0x00, + 0x00,0xc0,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00}; diff --git a/hacks/noses/nose.right_front b/hacks/noses/nose.right_front new file mode 100755 index 00000000..f8214174 --- /dev/null +++ b/hacks/noses/nose.right_front @@ -0,0 +1,38 @@ +#define nose_right_front_width 64 +#define nose_right_front_height 64 +static unsigned char nose_right_front_bits[] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x20,0x00, + 0x00,0x02,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x20, + 0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x02,0x00,0x00,0x00,0x00, + 0x20,0x00,0x00,0x02,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0x1f,0x00,0x00, + 0x04,0x00,0xf0,0x07,0x00,0x10,0x00,0x00,0x04,0x00,0x0c,0x18,0x00,0x10,0x00, + 0x00,0xfc,0xff,0x03,0xe0,0xff,0x1f,0x00,0x00,0x00,0x81,0x00,0x80,0x40,0x00, + 0x00,0x00,0x80,0x41,0x00,0x00,0xc1,0x00,0x00,0x00,0x80,0x20,0x00,0x00,0x82, + 0x00,0x00,0x00,0x40,0x20,0x00,0x00,0x02,0x01,0x00,0x00,0x40,0x10,0x00,0x00, + 0x04,0x01,0x00,0x00,0x20,0x10,0x00,0x00,0x04,0x02,0x00,0x00,0x20,0x08,0x00, + 0x00,0x08,0x02,0x00,0x00,0x30,0x08,0x00,0x00,0x08,0x06,0x00,0x00,0x10,0x08, + 0x00,0x00,0x08,0x04,0x00,0x00,0x10,0x08,0x00,0x00,0x08,0x0c,0x00,0x00,0x08, + 0x08,0x00,0x00,0x08,0x08,0x00,0x00,0x08,0x08,0x00,0x00,0x08,0x08,0x00,0x00, + 0x08,0x08,0x00,0x00,0x08,0x08,0x00,0x00,0x08,0x10,0x00,0x00,0x04,0x08,0x00, + 0x00,0x08,0x10,0x00,0x00,0x04,0x08,0x00,0x00,0x08,0x20,0x00,0x00,0x02,0x08, + 0x00,0x00,0x08,0x20,0x00,0x00,0x02,0x0c,0x00,0x00,0x18,0x40,0x00,0x00,0x01, + 0x04,0x00,0x00,0x10,0x80,0x00,0x80,0x00,0x04,0x00,0x00,0x10,0x00,0x03,0x60, + 0x00,0x06,0x00,0x00,0x30,0x00,0x0c,0x18,0x00,0x01,0x00,0x00,0x20,0x00,0xf0, + 0x07,0x00,0x01,0x00,0x00,0x60,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x40,0x00, + 0x00,0x00,0x80,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x1f,0x00,0x00,0x00,0x00,0x00, + 0x00,0x08,0x20,0x00,0xff,0x00,0x00,0x00,0x00,0x08,0x40,0xe0,0x00,0x07,0x00, + 0x00,0x00,0x04,0x80,0x31,0x00,0x0c,0x00,0x00,0x00,0x04,0x00,0x09,0x00,0x30, + 0x00,0x00,0x00,0x04,0x00,0x06,0xc0,0x20,0x00,0x00,0x00,0x04,0x00,0x03,0x00, + 0x43,0x00,0x00,0x00,0x04,0x80,0x00,0x00,0x42,0x00,0x00,0x00,0x04,0x40,0x00, + 0x00,0x84,0x00,0x00,0x00,0x04,0x60,0x00,0x00,0x84,0x00,0x00,0x00,0x04,0x00, + 0x00,0x00,0x84,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x02, + 0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x40,0x00,0x00,0x00, + 0x02,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x00, + 0x00,0x04,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x0e,0x00, + 0x00,0x00,0xf0,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00}; diff --git a/hacks/pyro.c b/hacks/pyro.c new file mode 100755 index 00000000..f7df260b --- /dev/null +++ b/hacks/pyro.c @@ -0,0 +1,258 @@ +/* xscreensaver, Copyright (c) 1992, 1994 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. + */ + +/* Draw some fireworks. Inspired from TI Explorer Lisp code by + John S. Pezaris + */ + +#include "screenhack.h" + +struct projectile { + int x, y; /* position */ + int dx, dy; /* velocity */ + int decay; + int size; + int fuse; + Bool primary; + Bool dead; + XColor color; + struct projectile *next_free; +}; + +static struct projectile *projectiles, *free_projectiles; + +static struct projectile * +get_projectile () +{ + struct projectile *p; + if (free_projectiles) + { + p = free_projectiles; + free_projectiles = p->next_free; + p->next_free = 0; + p->dead = False; + return p; + } + else + return 0; +} + +static void +free_projectile (p) + struct projectile *p; +{ + p->next_free = free_projectiles; + free_projectiles = p; + p->dead = True; +} + +static void +launch (xlim, ylim, g, dpy, cmap) + int xlim, ylim, g; + Display *dpy; + Colormap cmap; +{ + struct projectile *p = get_projectile (); + int x, dx, xxx; + if (! p) return; + + do { + x = (random () % xlim); + dx = 30000 - (random () % 60000); + xxx = x + (dx * 200); + } while (xxx <= 0 || xxx >= xlim); + + p->x = x; + p->y = ylim; + p->dx = dx; + p->size = 8000; + p->decay = 0; + p->dy = (random () % 4000) - 13000; + p->fuse = ((((random () % 500) + 500) * abs (p->dy / g)) / 1000); + p->primary = True; + + if (! mono_p) + { + hsv_to_rgb (random () % 360, 1.0, 1.0, + &p->color.red, &p->color.green, &p->color.blue); + p->color.flags = DoRed | DoGreen | DoBlue; + if (!XAllocColor (dpy, cmap, &p->color)) + { + p->color.pixel = WhitePixel (dpy, DefaultScreen (dpy)); + p->color.red = p->color.green = p->color.blue = 0; + } + } +} + +static struct projectile * +shrapnel (parent, dpy, cmap) + struct projectile *parent; + Display *dpy; + Colormap cmap; +{ + struct projectile *p = get_projectile (); + if (! p) return 0; + p->x = parent->x; + p->y = parent->y; + p->dx = (random () % 5000) - 2500 + parent->dx; + p->dy = (random () % 5000) - 2500 + parent->dy; + p->decay = (random () % 50) - 60; + p->size = (parent->size * 2) / 3; + p->fuse = 0; + p->primary = False; + + p->color = parent->color; + if (! mono_p) + XAllocColor (dpy, cmap, &p->color); /* dup the lock */ + + return p; +} + +static GC draw_gc, erase_gc; +static unsigned int default_fg_pixel; + +static int how_many, frequency, scatter; + +static Colormap +init_pyro (dpy, window) + Display *dpy; + Window window; +{ + int i; + Colormap cmap; + XGCValues gcv; + XWindowAttributes xgwa; + XGetWindowAttributes (dpy, window, &xgwa); + cmap = xgwa.colormap; + how_many = get_integer_resource ("count", "Integer"); + frequency = get_integer_resource ("frequency", "Integer"); + scatter = get_integer_resource ("scatter", "Integer"); + if (how_many <= 0) how_many = 100; + if (frequency <= 0) frequency = 30; + if (scatter <= 0) scatter = 20; + projectiles = 0; + free_projectiles = 0; + projectiles = (struct projectile *) + calloc (how_many, sizeof (struct projectile)); + for (i = 0; i < how_many; i++) + free_projectile (&projectiles [i]); + gcv.foreground = default_fg_pixel = + get_pixel_resource ("foreground", "Foreground", dpy, cmap); + draw_gc = XCreateGC (dpy, window, GCForeground, &gcv); + gcv.foreground = get_pixel_resource ("background", "Background", dpy, cmap); + erase_gc = XCreateGC (dpy, window, GCForeground, &gcv); + XClearWindow (dpy, window); + return cmap; +} + +static void +pyro (dpy, window, cmap) + Display *dpy; + Window window; + Colormap cmap; +{ + XWindowAttributes xgwa; + static int xlim, ylim, real_xlim, real_ylim; + int g = 100; + int i; + + if ((random () % frequency) == 0) + { + XGetWindowAttributes (dpy, window, &xgwa); + real_xlim = xgwa.width; + real_ylim = xgwa.height; + xlim = real_xlim * 1000; + ylim = real_ylim * 1000; + launch (xlim, ylim, g, dpy, cmap); + } + + XSync (dpy, True); + usleep (10000); + + for (i = 0; i < how_many; i++) + { + struct projectile *p = &projectiles [i]; + int old_x, old_y, old_size; + int size, x, y; + if (p->dead) continue; + old_x = p->x >> 10; + old_y = p->y >> 10; + old_size = p->size >> 10; + size = (p->size += p->decay) >> 10; + x = (p->x += p->dx) >> 10; + y = (p->y += p->dy) >> 10; + p->dy += (p->size >> 6); + if (p->primary) p->fuse--; + + /* erase old one */ + XFillRectangle (dpy, window, erase_gc, old_x, old_y, + old_size, old_size); + + if ((p->primary ? (p->fuse > 0) : (p->size > 0)) && + x < real_xlim && + y < real_ylim && + x > 0 && + y > 0) + { + if (mono_p || p->primary) + XSetForeground (dpy, draw_gc, default_fg_pixel); + else + XSetForeground (dpy, draw_gc, p->color.pixel); + + if /*(p->primary)*/ (size > 2) + XFillArc (dpy, window, draw_gc, x, y, size, size, 0, 360*64); + else + XFillRectangle (dpy, window, draw_gc, x, y, size, size); + } + else + { + free_projectile (p); + if (! mono_p) XFreeColors (dpy, cmap, &p->color.pixel, 1, 0); + } + + if (p->primary && p->fuse <= 0) + { + int i = (random () % scatter) + (scatter/2); + while (i--) + shrapnel (p, dpy, cmap); + } + } +} + + +char *progclass = "Pyro"; + +char *defaults [] = { + "Pyro.background: black", /* to placate SGI */ + "Pyro.foreground: white", + "*count: 100", + "*frequency: 30", + "*scatter: 20", + "*geometry: 800x500", + 0 +}; + +XrmOptionDescRec options [] = { + { "-count", ".count", XrmoptionSepArg, 0 }, + { "-frequency", ".frequency", XrmoptionSepArg, 0 }, + { "-scatter", ".scatter", XrmoptionSepArg, 0 } +}; +int options_size = (sizeof (options) / sizeof (options[0])); + +void +screenhack (dpy, window) + Display *dpy; + Window window; +{ + Colormap cmap = init_pyro (dpy, window); + while (1) + pyro (dpy, window, cmap); +} diff --git a/hacks/pyro.exe_axp b/hacks/pyro.exe_axp new file mode 100755 index 0000000000000000000000000000000000000000..38d58dba7d18bc46bdb6ad36613d5dd215287c34 GIT binary patch literal 23040 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 literal 0 HcmV?d00001 diff --git a/hacks/pyro.exe_vax b/hacks/pyro.exe_vax new file mode 100755 index 0000000000000000000000000000000000000000..f55609441bbed7dcebb6c645d26fb20a63f6078e GIT binary patch literal 12800 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 L`t, 13-aug-92. diff --git a/hacks/pyro.man b/hacks/pyro.man new file mode 100755 index 00000000..3059dd5e --- /dev/null +++ b/hacks/pyro.man @@ -0,0 +1,53 @@ +.TH XScreenSaver 1 "13-aug-92" "X Version 11" +.SH NAME +pyro - simulate fireworks +.SH SYNOPSIS +.B pyro +[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-count \fIinteger\fP] [\-frequency \fIinteger\fP] [\-scatter \fIinteger\fP] +.SH DESCRIPTION +The \fIpyro\fP program simulates fireworks, in a way similar to a Macintosh +program of the same name. +.SH OPTIONS +.I pyro +accepts the following options: +.TP 8 +.B \-window +Draw on a newly-created window. This is the default. +.TP 8 +.B \-root +Draw on the root window. +.TP 8 +.B \-mono +If on a color display, pretend we're on a monochrome display. +.TP 8 +.B \-count integer +How many particles should be allowed on the screen at once. Default 100. +.TP 8 +.B \-frequency integer +How often new missiles should launch. Default 30. +.TP 8 +.B \-scatter integer +How many particles should appear when a missile explodes. Default 20. +The actual number used is between \fIN\fP and \fIN+(N/2)\fP. +.SH ENVIRONMENT +.PP +.TP 8 +.B DISPLAY +to get the default host and display number. +.TP 8 +.B XENVIRONMENT +to get the name of a resource file that overrides the global resources +stored in the RESOURCE_MANAGER property. +.SH SEE ALSO +.BR X (1), +.BR xscreensaver (1) +.SH COPYRIGHT +Copyright \(co 1992 by Jamie Zawinski. Permission to use, copy, modify, +distribute, and sell this software and its documentation for any purpose is +hereby granted without fee, provided that the above copyright notice appear +in all copies and that both that copyright notice and this permission notice +appear in supporting documentation. No representations are made about the +suitability of this software for any purpose. It is provided "as is" without +express or implied warranty. +.SH AUTHOR +Jamie Zawinski , 13-aug-92. diff --git a/hacks/qix.c b/hacks/qix.c new file mode 100755 index 00000000..e45c7955 --- /dev/null +++ b/hacks/qix.c @@ -0,0 +1,502 @@ +/* xscreensaver, Copyright (c) 1992 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 "screenhack.h" +#include + +struct qpoint { + int x, y; + int dx, dy; +}; + +struct qline { + struct qpoint p1, p2; + XColor color; + Bool dead; +}; + +struct qix { + int id; + int fp; + int nlines; + struct qline *lines; +}; + +static GC draw_gc, erase_gc; +static unsigned int default_fg_pixel; +static int maxx, maxy, max_spread, max_size, color_shift; +static Bool random_p, solid_p, xor_p, transparent_p; +static int delay; +static int count; +static Colormap cmap; +static unsigned long base_pixel; + +static GC *gcs[2]; + +static void +get_geom (dpy, window) + Display *dpy; + Window window; +{ + XWindowAttributes xgwa; + XGetWindowAttributes (dpy, window, &xgwa); + maxx = xgwa.width; + maxy = xgwa.height; +} + +static struct qix * +init_one_qix (dpy, window, nlines) + Display *dpy; + Window window; + int nlines; +{ + int i; + struct qix *qix = (struct qix *) calloc (1, sizeof (struct qix)); + qix->nlines = nlines; + qix->lines = (struct qline *) calloc (qix->nlines, sizeof (struct qline)); + + if (!mono_p && !transparent_p) + { + hsv_to_rgb (random () % 360, frand (1.0), frand (0.5) + 0.5, + &qix->lines[0].color.red, &qix->lines[0].color.green, + &qix->lines[0].color.blue); + if (!XAllocColor (dpy, cmap, &qix->lines[0].color)) + { + qix->lines[0].color.pixel = default_fg_pixel; + XQueryColor (dpy, cmap, &qix->lines[0].color); + if (!XAllocColor (dpy, cmap, &qix->lines[0].color)) + abort (); + } + } + qix->lines[0].p1.x = random () % maxx; + qix->lines[0].p1.y = random () % maxy; + if (max_size == 0) + { + qix->lines[0].p2.x = random () % maxx; + qix->lines[0].p2.y = random () % maxy; + } + else + { + qix->lines[0].p2.x = qix->lines[0].p1.x + (random () % (max_size/2)); + qix->lines[0].p2.y = qix->lines[0].p1.y + (random () % (max_size/2)); + if (qix->lines[0].p2.x > maxx) qix->lines[0].p2.x = maxx; + if (qix->lines[0].p2.y > maxy) qix->lines[0].p2.y = maxy; + } + qix->lines[0].p1.dx = (random () % (max_spread + 1)) - (max_spread / 2); + qix->lines[0].p1.dy = (random () % (max_spread + 1)) - (max_spread / 2); + qix->lines[0].p2.dx = (random () % (max_spread + 1)) - (max_spread / 2); + qix->lines[0].p2.dy = (random () % (max_spread + 1)) - (max_spread / 2); + qix->lines[0].dead = True; + for (i = 1; i < qix->nlines; i++) + { + qix->lines[i] = qix->lines[0]; + if (!mono_p && !transparent_p) + if (!XAllocColor (dpy, cmap, &qix->lines[i].color)) + abort (); + } + return qix; +} + +/* 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(i,j) + int i, j; +{ + int k = 1; + while (j--) k *= i; + return k; +} + + +static void +merge_colors (argc, argv, into_color, mask, increment_p) + int argc; + XColor **argv; + XColor *into_color; + int mask; + Bool increment_p; +{ + int j; + *into_color = *argv [0]; + into_color->pixel |= mask; +#define SHORT_INC(x,y) (x = ((((x)+(y)) > 0xFFFF) ? 0xFFFF : ((x)+(y)))) +#define SHORT_DEC(x,y) (x = ((((x)-(y)) < 0) ? 0 : ((x)-(y)))) + for (j = 1; j < argc; j++) + if (increment_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 +} + +/* fill in all the permutations of colors that XAllocColorCells() has + allocated for us. Thanks Ron, you're an additive kind of guy. */ +static void +permute_colors (pcolors, colors, count, plane_masks, increment_p) + XColor *pcolors, *colors; + int count; + unsigned long *plane_masks; + Bool increment_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<= 360) color_shift = 5; + if (delay < 0) delay = 0; + + if (count == 1 && transparent_p) + transparent_p = False; /* it's a no-op */ + + if (transparent_p && CellsOfScreen (DefaultScreenOfDisplay (dpy)) <= 2) + { + fprintf (stderr, "%s: -transparent only works on color displays.\n", + progname); + transparent_p = False; + } + + if (xor_p && !transparent_p) + mono_p = True; + + gcs[0] = gcs[1] = 0; + gcv.foreground = default_fg_pixel = + get_pixel_resource ("foreground", "Foreground", dpy, cmap); + + if (transparent_p) + { + Bool increment_p = get_boolean_resource ("additive", "Boolean"); + unsigned long plane_masks [32]; + XColor *pcolors, *colors; + int nplanes = count; + int i, total_colors; + + /* permutations would be harder if the number of planes didn't fit + in an int. Who has >32-bit displays anyway... */ + if (nplanes > 31) nplanes = 31; + + while (nplanes > 1 && + !XAllocColorCells (dpy, cmap, False, plane_masks, nplanes, + &base_pixel, 1)) + nplanes--; + + if (nplanes <= 1) + { + fprintf (stderr, + "%s: couldn't allocate any color planes; turning -transparent off.\n", + progname); + transparent_p = False; + if (xor_p) + goto NON_TRANSPARENT_XOR; + else + goto NON_TRANSPARENT; + } + else if (nplanes != count) + { + fprintf (stderr, + "%s: only allocated %d color planes (instead of %d).\n", + progname, nplanes, count); + count = nplanes; + } + + gcs[0] = (GC *) malloc (count * sizeof (GC)); + gcs[1] = xor_p ? gcs[0] : (GC *) malloc (count * sizeof (GC)); + total_colors = i_exp (2, count); + pcolors = (XColor *) calloc (count, sizeof (XColor)); + colors = (XColor *) calloc (total_colors, sizeof (XColor)); + for (i = 0; i < count; i++) + { + gcv.plane_mask = plane_masks [i]; + gcv.foreground = ~0; + if (xor_p) + { + gcv.function = GXxor; + gcs [0][i] = XCreateGC (dpy, window, + GCForeground|GCFunction|GCPlaneMask, + &gcv); + } + else + { + gcs [0][i] = XCreateGC (dpy, window, GCForeground|GCPlaneMask, + &gcv); + gcv.foreground = 0; + gcs [1][i] = XCreateGC (dpy, window, GCForeground|GCPlaneMask, + &gcv); + } + + /* pick the "primary" (not in that sense) colors. + If we are in subtractive mode, pick higher intensities. */ + hsv_to_rgb (random () % 360, frand (1.0), + frand (0.5) + (increment_p ? 0.2 : 0.5), + &pcolors[i].red, &pcolors[i].green, &pcolors[i].blue); + + pcolors [i].flags = DoRed | DoGreen | DoBlue; + pcolors [i].pixel = base_pixel | plane_masks [i]; + } + permute_colors (pcolors, colors, count, plane_masks, increment_p); + /* clone the default background of the window into our "base" pixel */ + colors [total_colors - 1].pixel = + get_pixel_resource ("background", "Background", dpy, cmap); + XQueryColor (dpy, cmap, &colors [total_colors - 1]); + colors [total_colors - 1].pixel = base_pixel; + XStoreColors (dpy, cmap, colors, total_colors); + XSetWindowBackground (dpy, window, base_pixel); + XClearWindow (dpy, window); + } + else if (xor_p) + { + NON_TRANSPARENT_XOR: + gcv.function = GXxor; + gcv.foreground = + (default_fg_pixel ^ get_pixel_resource ("background", "Background", + dpy, cmap)); + draw_gc = erase_gc = XCreateGC(dpy,window,GCForeground|GCFunction,&gcv); + } + else + { + NON_TRANSPARENT: + draw_gc = XCreateGC (dpy, window, GCForeground, &gcv); + gcv.foreground = get_pixel_resource ("background", "Background", + dpy, cmap); + erase_gc = XCreateGC (dpy, window, GCForeground, &gcv); + } + + qixes = (struct qix **) malloc ((count + 1) * sizeof (struct qix *)); + qixes [count] = 0; + while (count--) + { + qixes [count] = init_one_qix (dpy, window, nlines); + qixes [count]->id = count; + } + return qixes; +} + +static void +free_qline (dpy, window, cmap, qline, prev, qix) + Display *dpy; + Window window; + Colormap cmap; + struct qline *qline, *prev; + struct qix *qix; +{ + if (qline->dead || !prev) + ; + else if (solid_p) + { + XPoint points [4]; + points [0].x = qline->p1.x; points [0].y = qline->p1.y; + points [1].x = qline->p2.x; points [1].y = qline->p2.y; + points [2].x = prev->p2.x; points [2].y = prev->p2.y; + points [3].x = prev->p1.x; points [3].y = prev->p1.y; + XFillPolygon (dpy, window, (transparent_p ? gcs[1][qix->id] : erase_gc), + points, 4, Complex, CoordModeOrigin); + } + else + XDrawLine (dpy, window, (transparent_p ? gcs[1][qix->id] : erase_gc), + qline->p1.x, qline->p1.y, qline->p2.x, qline->p2.y); + + if (!mono_p && !transparent_p) + XFreeColors (dpy, cmap, &qline->color.pixel, 1, 0); + + qline->dead = True; +} + +static void +add_qline (dpy, window, cmap, qline, prev_qline, qix) + Display *dpy; + Window window; + Colormap cmap; + struct qline *qline, *prev_qline; + struct qix *qix; +{ + *qline = *prev_qline; + +#define wiggle(point,delta,max) \ + if (random_p) delta += (random () % 3) - 1; \ + if (delta > max_spread) delta = max_spread; \ + else if (delta < -max_spread) delta = -max_spread; \ + point += delta; \ + if (point < 0) point = 0, delta = -delta, point += delta<<1; \ + else if (point > max) point = max, delta = -delta, point += delta<<1; + + wiggle (qline->p1.x, qline->p1.dx, maxx); + wiggle (qline->p1.y, qline->p1.dy, maxy); + wiggle (qline->p2.x, qline->p2.dx, maxx); + wiggle (qline->p2.y, qline->p2.dy, maxy); + + if (max_size) + { + if (qline->p1.x - qline->p2.x > max_size) + qline->p1.x = qline->p2.x + max_size + - (random_p ? random() % max_spread : 0); + else if (qline->p2.x - qline->p1.x > max_size) + qline->p2.x = qline->p1.x + max_size + - (random_p ? random() % max_spread : 0); + if (qline->p1.y - qline->p2.y > max_size) + qline->p1.y = qline->p2.y + max_size + - (random_p ? random() % max_spread : 0); + else if (qline->p2.y - qline->p1.y > max_size) + qline->p2.y = qline->p1.y + max_size + - (random_p ? random() % max_spread : 0); + } + + if (!mono_p && !transparent_p) + { + cycle_hue (&qline->color, color_shift); + qline->color.flags = DoRed | DoGreen | DoBlue; + if (!XAllocColor (dpy, cmap, &qline->color)) + { + qline->color = prev_qline->color; + if (!XAllocColor (dpy, cmap, &qline->color)) + abort (); /* same color should work */ + } + XSetForeground (dpy, draw_gc, qline->color.pixel); + } + if (! solid_p) + XDrawLine (dpy, window, (transparent_p ? gcs[0][qix->id] : draw_gc), + qline->p1.x, qline->p1.y, qline->p2.x, qline->p2.y); + else if (!prev_qline->dead) + { + XPoint points [4]; + points [0].x = qline->p1.x; points [0].y = qline->p1.y; + points [1].x = qline->p2.x; points [1].y = qline->p2.y; + points [2].x = prev_qline->p2.x; points [2].y = prev_qline->p2.y; + points [3].x = prev_qline->p1.x; points [3].y = prev_qline->p1.y; + XFillPolygon (dpy, window, (transparent_p ? gcs[0][qix->id] : draw_gc), + points, 4, Complex, CoordModeOrigin); + } + + qline->dead = False; +} + +static void +qix1 (dpy, window, qix) + Display *dpy; + Window window; + struct qix *qix; +{ + int ofp = qix->fp - 1; + static int gtick = 0; + if (gtick++ == 500) + get_geom (dpy, window), gtick = 0; + if (ofp < 0) ofp = qix->nlines - 1; + free_qline (dpy, window, cmap, &qix->lines [qix->fp], + &qix->lines[(qix->fp + 1) % qix->nlines], qix); + add_qline (dpy, window, cmap, &qix->lines[qix->fp], &qix->lines[ofp], qix); + if ((++qix->fp) >= qix->nlines) + qix->fp = 0; +} + + +char *progclass = "Qix"; + +char *defaults [] = { + "Qix.background: black", /* to placate SGI */ + "Qix.foreground: white", + "*count: 1", + "*segments: 50", + "*spread: 8", + "*size: 0", + "*colorShift: 3", + "*solid: false", + "*delay: 10000", + "*random: true", + "*xor: false", + "*transparent:false", + "*additive: true", + 0 +}; + +XrmOptionDescRec options [] = { + { "-count", ".count", XrmoptionSepArg, 0 }, + { "-segments", ".segments", XrmoptionSepArg, 0 }, + { "-spread", ".spread", XrmoptionSepArg, 0 }, + { "-size", ".size", XrmoptionSepArg, 0 }, + { "-delay", ".delay", XrmoptionSepArg, 0 }, + { "-color-shift", ".colorShift", XrmoptionSepArg, 0 }, + { "-random", ".random", XrmoptionNoArg, "true" }, + { "-linear", ".random", XrmoptionNoArg, "false" }, + { "-solid", ".solid", XrmoptionNoArg, "true" }, + { "-hollow", ".solid", XrmoptionNoArg, "false" }, + { "-xor", ".xor", XrmoptionNoArg, "true" }, + { "-no-xor", ".xor", XrmoptionNoArg, "false" }, + { "-transparent", ".transparent", XrmoptionNoArg, "true" }, + { "-non-transparent", ".transparent", XrmoptionNoArg, "false" }, + { "-additive", ".additive", XrmoptionNoArg, "true" }, + { "-subtractive", ".additive", XrmoptionNoArg, "false" }, +}; +int options_size = (sizeof (options) / sizeof (options[0])); + +void +screenhack (dpy, window) + Display *dpy; + Window window; +{ + struct qix **q1 = init_qix (dpy, window); + struct qix **qn; + while (1) + for (qn = q1; *qn; qn++) + { + qix1 (dpy, window, *qn); + XSync (dpy, True); + if (delay) usleep (delay); + } +} diff --git a/hacks/qix.exe_axp b/hacks/qix.exe_axp new file mode 100755 index 0000000000000000000000000000000000000000..b8e8a19098bf6463f6ee173c0dcdd8d7880081ce GIT binary patch literal 30208 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 Rj(a=qTn`#|6#t+7`Co174{`ti literal 0 HcmV?d00001 diff --git a/hacks/qix.exe_vax b/hacks/qix.exe_vax new file mode 100755 index 0000000000000000000000000000000000000000..cf5243b95e5190553b33c2eca32fcf3037edde1f GIT binary patch literal 16384 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, 13-aug-92. diff --git a/hacks/qix.man b/hacks/qix.man new file mode 100755 index 00000000..dea9ea24 --- /dev/null +++ b/hacks/qix.man @@ -0,0 +1,107 @@ +.TH XScreenSaver 1 "9-dec-92" "X Version 11" +.SH NAME +qix - bounce colored lines around a window +.SH SYNOPSIS +.B qix +[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-segments \fIint\fP] [\-spread \fIpixels\fP] [\-size \fIpixels\fP] [\-count \fIint\fP] [\-color-shift \fIdegrees\fP] [\-delay \fIusecs\fP] [\-random] [\-linear] [\-solid] [\-hollow] [\-xor] [\-no\-xor] [\-transparent] [\-non\-transparent] [\-additive] [\-subtractive] +.SH DESCRIPTION +The \fIqix\fP program bounces a series of line segments around its window. +This is truly the swiss army chainsaw of qix programs. If you know of one +with more display modes, I want to know about it. +.SH OPTIONS +.I qix +accepts the following options: +.TP 8 +.B \-window +Draw on a newly-created window. This is the default. +.TP 8 +.B \-root +Draw on the root window. +.TP 8 +.B \-mono +If on a color display, pretend we're on a monochrome display. +.TP 8 +.B \-segments integer +How many line segments should be drawn. Default 50. +.TP 8 +.B \-spread integer +How far apart the endpoints of one segment should be from the next. +Default 8. +.TP 8 +.B \-size integer +The maximum distance one endpoint of a segment is allowed to be from +the opposite end of that segment. Default 0, meaning unlimited. +.TP 8 +.B \-count integer +How many qixes to draw. Default 1. +.TP 8 +.B \-color\-shift degrees +If on a color display, the color of the line segments will cycle through +the spectrum. This specifies how far the hue of each segment should be +from the next, in degrees on the HSV wheel. Default 3. +.TP 8 +.B \-delay microseconds +How much of a delay should be introduced between steps of the animation. +Default 25000, or about 0.025 seconds. +.TP 8 +.B \-random +The \fIqix\fP will wander around the screen semi-randomly. This is the +default. +.TP 8 +.B \-linear +The opposite of \fI\-random\fP: the \fIqix\fP will travel in straight lines +until it reaches a wall, and then it will bounce. +.TP 8 +.B \-solid +If this is specified, then the area between the line segments will be filled +in with the appropriate color, instead of the \fIqix\fP simply being composed +of one-pixel-wide line segments. This option looks really good in color. +.TP 8 +.B \-hollow +The opposite of \fI\-solid\fP; this is the default. +.TP 8 +.B \-xor +If this is specified, then qix segments will be drawn and erased with xor, +instead of being drawn in some color and erased in the background color. +This implies \fI\-mono\fP, in that only two colors can be used. +.TP 8 +.B \-transparent +If this is specified, and \fI\-count\fP is greater than 1, then each qix +will be drawn in one color, and when they overlap, the colors will be mixed. +This only works on \fBPseudoColor\fP displays. This looks best in +conjuction with \fI\-solid\fP. +.TP 8 +.B \-non\-transparent +Turns off \fI\-transparent\fP. +.TP 8 +.B \-additive +If \fI\-transparent\fP is specified, then this option means that the colors +will be mixed using an additive color model, as if the qixes were projected +light. This is the default. +.TP 8 +.B \-subtractive +If \fI\-transparent\fP is specified, then this option means that the +colors will be mixed using a subtractive color model, as if the qixes were +translucent filters. +.SH ENVIRONMENT +.PP +.TP 8 +.B DISPLAY +to get the default host and display number. +.TP 8 +.B XENVIRONMENT +to get the name of a resource file that overrides the global resources +stored in the RESOURCE_MANAGER property. +.SH SEE ALSO +.BR X (1), +.BR xscreensaver (1) +.SH COPYRIGHT +Copyright \(co 1992 by Jamie Zawinski. Permission to use, copy, modify, +distribute, and sell this software and its documentation for any purpose is +hereby granted without fee, provided that the above copyright notice appear +in all copies and that both that copyright notice and this permission notice +appear in supporting documentation. No representations are made about the +suitability of this software for any purpose. It is provided "as is" without +express or implied warranty. +.SH AUTHOR +Jamie Zawinski , 13-aug-92. diff --git a/hacks/readme b/hacks/readme new file mode 100755 index 00000000..c5ebcd64 --- /dev/null +++ b/hacks/readme @@ -0,0 +1,9 @@ + +This directory contains various graphics hacks. These are independent from +the xscreensaver program (in the ../driver/ directory) but some of them use +the utility functions found in the ../utils/ directory. + +If you have compilation problems, check the parameters in ../config.h. + +The file xlock.h makes it really easy to turn `xlock' modules into standalone +programs that can be used with xscreensaver; check it out. diff --git a/hacks/rocks.c b/hacks/rocks.c new file mode 100755 index 00000000..e1db24ba --- /dev/null +++ b/hacks/rocks.c @@ -0,0 +1,316 @@ +/* xscreensaver, Copyright (c) 1992 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. + */ + +/* Flying through an asteroid field. Based on TI Explorer Lisp code by + John Nguyen + */ + +#include "screenhack.h" +#include +#include +#ifdef VMS +#define M_PI 3.14159265358979323846 +#endif +#if __STDC__ +#include /* for M_PI */ +#endif + +#define MIN_DEPTH 2 /* rocks disappar when they get this close */ +#define MAX_DEPTH 60 /* this is where rocks appear */ +#define MAX_WIDTH 100 /* how big (in pixels) rocks are at depth 1 */ +#define DEPTH_SCALE 100 /* how many ticks there are between depths */ +#define SIN_RESOLUTION 1000 + +/* there's not much point in the above being user-customizable, but those + numbers might want to be tweaked for displays with an order of magnitude + higher resolution or compute power. + */ + +static double sins [SIN_RESOLUTION]; +static double coss [SIN_RESOLUTION]; +static double depths [(MAX_DEPTH + 1) * DEPTH_SCALE]; + +static Display *dpy; +static Window window; +static int width, height, midx, midy; +static GC draw_gc, erase_gc; +static Bool rotate_p ; + +static int speed; + +struct rock { + int real_size; + int r; + int theta; + int depth; + int size, x, y; +}; + +static struct rock *rocks; +static int nrocks; +static Pixmap pixmaps [MAX_WIDTH]; +static int delay; + +static void rock_reset(), rock_tick(), rock_compute(), rock_draw(); +static void init_pixmaps(), init_rocks(), tick_rocks(), rocks_once(); + + +static void +rock_reset (rock) + struct rock *rock; +{ + rock->real_size = MAX_WIDTH; + rock->r = (SIN_RESOLUTION * 0.7) + (random () % (30 * SIN_RESOLUTION)); + rock->theta = random () % SIN_RESOLUTION; + rock->depth = MAX_DEPTH * DEPTH_SCALE; + rock_compute (rock); + rock_draw (rock, True); +} + +static void +rock_tick (rock, d) + struct rock *rock; + int d; +{ + if (rock->depth > 0) + { + rock_draw (rock, False); + rock->depth -= speed; + if (rotate_p) + { + rock->theta = (rock->theta + d) % SIN_RESOLUTION; + } + while (rock->theta < 0) + rock->theta += SIN_RESOLUTION; + if (rock->depth < (MIN_DEPTH * DEPTH_SCALE)) + rock->depth = 0; + else + { + rock_compute (rock); + rock_draw (rock, True); + } + } + else if ((random () % 40) == 0) + rock_reset (rock); +} + +static void +rock_compute (rock) + struct rock *rock; +{ + double factor = depths [rock->depth]; + rock->size = (int) ((rock->real_size * factor) + 0.5); + rock->x = midx + (coss [rock->theta] * rock->r * factor); + rock->y = midy + (sins [rock->theta] * rock->r * factor); +} + +static void +rock_draw (rock, draw_p) + struct rock *rock; + Bool draw_p; +{ + GC gc = draw_p ? draw_gc : erase_gc; + if (rock->x <= 0 || rock->y <= 0 || rock->x >= width || rock->y >= height) + { + /* this means that if a rock were to go off the screen at 12:00, but + would have been visible at 3:00, it won't come back once the observer + rotates around so that the rock would have been visible again. + Oh well. + */ + rock->depth = 0; + return; + } + if (rock->size <= 1) + XDrawPoint (dpy, window, gc, rock->x, rock->y); + else if (rock->size <= 3 || !draw_p) + XFillRectangle (dpy, window, gc, + rock->x - rock->size/2, rock->y - rock->size/2, + rock->size, rock->size); + else if (rock->size < MAX_WIDTH) + XCopyPlane (dpy, pixmaps [rock->size], window, gc, + 0, 0, rock->size, rock->size, + rock->x - rock->size/2, rock->y - rock->size/2, + 1); + else + abort (); +} + + +static void +init_pixmaps (dpy, window) + Display *dpy; + Window window; +{ + int i; + XGCValues gcv; + GC fg_gc = 0, bg_gc; + pixmaps [0] = pixmaps [1] = 0; + for (i = MIN_DEPTH; i < MAX_WIDTH; i++) + { + int w = (1+(i/32))<<5; /* server might be faster if word-aligned */ + int h = i; + Pixmap p = XCreatePixmap (dpy, window, w, h, 1); + XPoint points [7]; + pixmaps [i] = p; + if (! p) + { + fprintf (stderr, "%s: couldn't allocate pixmaps", progname); + exit (1); + } + if (! fg_gc) + { /* must use drawable of pixmap, not window (fmh) */ + gcv.foreground = 1; + fg_gc = XCreateGC (dpy, p, GCForeground, &gcv); + gcv.foreground = 0; + bg_gc = XCreateGC (dpy, p, GCForeground, &gcv); + } + XFillRectangle (dpy, p, bg_gc, 0, 0, w, h); + points [0].x = i * 0.15; points [0].y = i * 0.85; + points [1].x = i * 0.00; points [1].y = i * 0.20; + points [2].x = i * 0.30; points [2].y = i * 0.00; + points [3].x = i * 0.40; points [3].y = i * 0.10; + points [4].x = i * 0.90; points [4].y = i * 0.10; + points [5].x = i * 1.00; points [5].y = i * 0.55; + points [6].x = i * 0.45; points [6].y = i * 1.00; + XFillPolygon (dpy, p, fg_gc, points, 7, Nonconvex, CoordModeOrigin); + } + XFreeGC (dpy, fg_gc); + XFreeGC (dpy, bg_gc); +} + + +static void +init_rocks (d, w) + Display *d; + Window w; +{ + int i; + XGCValues gcv; + Colormap cmap; + XWindowAttributes xgwa; + unsigned int fg, bg; + dpy = d; + window = w; + XGetWindowAttributes (dpy, window, &xgwa); + cmap = xgwa.colormap; + delay = get_integer_resource ("delay", "Integer"); + if (delay < 0) delay = 0; + speed = get_integer_resource ("speed", "Integer"); + if (speed < 1) speed = 1; + if (speed > 100) speed = 100; + rotate_p = get_boolean_resource ("rotate", "Boolean"); + fg = get_pixel_resource ("foreground", "Foreground", dpy, cmap); + bg = get_pixel_resource ("background", "Background", dpy, cmap); + gcv.foreground = fg; + gcv.background = bg; + draw_gc = XCreateGC (dpy, window, GCForeground|GCBackground, &gcv); + gcv.foreground = bg; + gcv.background = fg; + erase_gc = XCreateGC (dpy, window, GCForeground|GCBackground, &gcv); + + for (i = 0; i < SIN_RESOLUTION; i++) + { + sins [i] = sin ((((double) i) / (SIN_RESOLUTION / 2)) * M_PI); + coss [i] = cos ((((double) i) / (SIN_RESOLUTION / 2)) * M_PI); + } + /* we actually only need i/speed of these, but wtf */ + for (i = 1; i < (sizeof (depths) / sizeof (depths[0])); i++) + depths [i] = atan (((double) 0.5) / (((double) i) / DEPTH_SCALE)); + depths [0] = M_PI/2; /* avoid division by 0 */ + + nrocks = get_integer_resource ("count", "Count"); + if (nrocks < 1) nrocks = 1; + rocks = (struct rock *) calloc (nrocks, sizeof (struct rock)); + init_pixmaps (dpy, window); + XClearWindow (dpy, window); +} + + +static void +tick_rocks (d) + int d; +{ + int i; + for (i = 0; i < nrocks; i++) + rock_tick (&rocks [i], d); +} + +static void +rocks_once () +{ + static int current_delta = 0; /* observer Z rotation */ + static int window_tick = 50; + + if (window_tick++ == 50) + { + XWindowAttributes xgwa; + XGetWindowAttributes (dpy, window, &xgwa); + window_tick = 0; + width = xgwa.width; + height = xgwa.height; + midx = width/2; + midy = height/2; + } + + if ((random () % 50) == 0) + { + int d = current_delta; + int new_delta = ((random () % 11) - 5); + if ((random () % 10) == 0) + new_delta *= 5; + + while (d == current_delta) + { + int i; + for (i = 0; i < 3; i++) + tick_rocks (d); + if (current_delta < new_delta) d++; + else d--; + } + current_delta = new_delta; + } + tick_rocks (current_delta); +} + + +char *progclass = "Rocks"; + +char *defaults [] = { + "Rocks.background: black", /* to placate SGI */ + "Rocks.foreground: white", + "*count: 100", + "*delay: 50000", + "*speed: 100", + "*rotate: true", + 0 +}; + +XrmOptionDescRec options [] = { + { "-count", ".count", XrmoptionSepArg, 0 }, + { "-norotate", ".rotate", XrmoptionNoArg, "false" }, + { "-delay", ".delay", XrmoptionSepArg, 0 }, + { "-speed", ".speed", XrmoptionSepArg, 0 } +}; +int options_size = (sizeof (options) / sizeof (options[0])); + +void +screenhack (dpy, window) + Display *dpy; + Window window; +{ + init_rocks (dpy, window); + while (1) + { + rocks_once (); + XSync (dpy, True); + if (delay) usleep (delay); + } +} diff --git a/hacks/rocks.exe_axp b/hacks/rocks.exe_axp new file mode 100755 index 0000000000000000000000000000000000000000..aea1950ff701985f90ef1669f23bc600d79ca61e GIT binary patch literal 22528 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 DJZ4P@ literal 0 HcmV?d00001 diff --git a/hacks/rocks.exe_vax b/hacks/rocks.exe_vax new file mode 100755 index 0000000000000000000000000000000000000000..9939fb1741f4621fd9e7e68a6d676ce5058f03f1 GIT binary patch literal 13312 zcmeHN4^&jwnZNJNQwJP%U@*b_sgpErOjaql=7hR5L5Yc`i9X)U02*6FW>5^yP#6-D zT9Y=}t=-y#-ICVy4Qs%PN+=DT+?Me3S_y^r9qUaRnjB-n4BAWqK=Wt!z%Fr zqc5<<7c6@WkULUSE0NgkBx{`F3MosXobh>1Us+k8%vtPr&MRLM&z$r90e?{enohYb zo&n^n@R#`t0~`It%?-@D`R-czsKpEIuyI2`1*uC@9-_ z7hB+DDe;UOwJZ=Q@fG+PcSEdlg;H##Y4c@My#aqP3v6Y%rpID@8wv^^-dGl>@O#;^ z@gfG{M8A{ng@K9^um9Gd6P^qd76g6H(&9=uv7C8*B?XV6!Ju!WuZ)$K`h4EYwX#4E zq%782QJ~BhZSCIi;?;FPgZ?1P;$J0D_;5Mn-;{CcC2<={pmP*HE_+GbqnnD+>g`;_ zlDIVLL$2i#>Qkz5Eu$Dy$0bhs1$k7NO(XtDgN6P;)CvS1x5kW=g{IvpX136@JH^c4 zzZCon_!$@Yn6I1#ii()Yi0CAT&MS9rsVEORH~5?z%pP6f^ap}~qobYkyv})rSJD;u z5g^>nlSoU7u14!DDhU(>ClK;pETAqdEhsDZp+_+c(3}~YF!qZ69mh|I3{nibFN%Gk z>8aJuf|42bevDXk5mDiV<6}aREn=(&ZR5es8(+F6SLz zrqM-1CW_ip?5_y=K8Aw-sh^#xsY~cTR{YdSfYg-KbS}EEz)wDhd`w9}C;Bp2V5&8V zo(uR#C#I2LMLDRwKId0pPt$^O#AYe z7k?=={Y#7Pa4uT3Bz5tUMT?!7Af3xAOP#lvjFZ3jK+gSq8D&gH?m_xmv|fn37%32~ zS0H~J>8WVF8u_zG|AzD%q(2~C`TO6{@k*J0&Gkk9gK=5d;XH&?j`Rf550IWkiv3s^@T$N;n1)KyeBf% zcnPRZ+3`?^(i!S?EEhULN5l00y>RILaHu;RI;GvDF-<_q(U!f|2PT^l;7p0LIzvYt z@# zWS$!RzA>0lDfyIU$=6cHnyWHFt84?mk89rYbEYX_eKDvtlwr{tz<*kmxh>qVg7X0i zdJAt4rY!S1;yUFcR7kv7DJtullh%>AYfN!_n3fc7+0L|=~3q6vPe&Q=?(a{GEmVqANjz0sB^{y2MAwk*MyBeQDWT3~$r z8Y36nLt{o>jehOun2}Q{>4nh4)hy``A%8vQHy1U#5cI12I{fAe>mwuZ z8_Lk`CcwGh_QG%a7s01A1H*kc1-K4ZXO`XwddCd-k1DmOBo0=JE~Pn%cgfo@5Tdyc zUxyD-g5Xv_n+2BwXKxGZo59p<2ZsC@0&43vqJy8hXSCW`Hil8|Ic>tbr+ zTCG9S^m~cEl?mFz5y_YXUBazjpo(bNQ0d6+gf3wCIlLSJ|C&y@Qp%N8XqR1+S)iyJ zJT;lStxAWxeS;-YJmSU(5R6W)k<#gQOx-!vm0%I7UAtWJep%TsD$Q#ZjK``~h~YW5 zaBC`WtQhL-SJrBtaO)ieuoQzgF5H@KVp{}gA-Cts1iRaW9m#Fa1vJ@`wgm<(<3J-1 z4Qm24xDSPJ>-|Ewb-7TZS4?Nj6%h+nS&xqxhT3FPeqTlB%mYs|1vPigvW^{0R_o>~ z?e#Z^Nz+t8KYocElM4xoz**gnG;+RHuSA5lXCmkfNkh?ie>P*ahcn=BtLgIcYtU7P zD-C}_05DMe8Wd)~t!-wl5qtHf$s4V@OI9MRi zNS<@|v-th=*)^GF{=nUb@H>3y*(m%_w0`I=6JC^A#DB56Ez^XbxZ8xUT>4+LZmK`9 zDVF~s)2w6eq`AKtbAN2oUyMorXEf=%J3KV$r(@FBw-1gPnj1soSGYA%WzXb!KOLy4 z#w$R5%6Z?z=Y2Qk{YN>|gn2*x&&~TQsb$Rji`A}lM4>E=Sopj@h1M+~JU^}S`XbCI z<{B!GW4f2WS(RD=(rj6k6~7{{ulmw*uoCxX`8f&18Iy=lS)#zoVlN>2M;TU9G8PL?|M+9Wk++@LjN(3;5x z(>yL49bD7I~c7qaO;PO6eUp|=fnRPRnuseYg;)cjR@T4 z2eI%_zh$etZE|TQJe=zuD;giU%6VopnjG=XBO3&rWKu zOX?~GCON*nF1ag+(i|&MbkxCjjS}V@ySv>jB+b?8lePLJ&7*adfJp1wgl}Yu@ieZ| z$Or9i%j_v=H1T%Lt-0S2-PtYK^~u}tN!oS=(=;R3WNLR;d8woB)PyS-AOfphv@NJ0 zYnffU#+#jP#E}GweadN_4;mQNwS$I%75>mUEbTSAh9T_gXtHhPtg4uYc*D}T&$^}t z3oBzy(y^{O2wnSzGfzGuS5A@LYMz3gRbT?PB5PpYFF>ctxoYm_&fLW7wTHudZJMzF zjbdgTBIj|2VG1}to{gK|w|nz0=1 z`19O8ciZ44xmXT;7o~n)`kt=}KH@(&Fv?3x==(q(e4-C$FK3NXS&DOiZ`t{trS!AB5>!y3E zp%iy36|@_)9?Bu67Y)O-odliOkz!lv$Yg-=Es#df0Q$=F*!*LI`~iuX?d+5hLBGGj zCD&%2CsCMEwTnkw?Jka=^MNE}u$rbigpnPLF10HaaiARGS-Y|*@t)dH-J}W0VqA~b zIyiwE`X!&*)KDXz*xnF%wTspBP*x)12FNq98#LWxk`96N0=C5A z1`#OKKxB=UYUv0(OcmnN^k3_Sf!T5+$gv^1tyu{5(Fv*tb@&v=SS>UFPv9IwkWimo zow-3(WC@2jI;TO`9i*!Zy5?Z6z#3(BYq|=l;ltIW$QDwhh$=OP4`r^i$3#NqdXti@ z%Oc9XP`Mhl4VpVzs6D)6h^t&3AudgyW~%%$-vK*Pn*|V%&UccAvP(l%JG^s9b3yAN z5UBtt)yoQ1my!UbJFt|xR99}NE71Zgj)kf{&lEZq3aZC_#Iv(7`-j<8OXnowyEe&& z<7l%}RuZPd)?L}k1;u;B^-N)6N3~DOMT_5q^zdFO9ICD{zKt^31}|P0-iryi+N{jL z!V{|`O0;DT@3nJ|)sr}qVnhybToteaK)0#@bt_ zs2|?!p}}^!A65{@;eP6e4-s4xJN@Vf4dqxr5EA`xok>ak@Ef9}(CLr$125Db?m<5c z5SXNB`V(h)=qvy^jHZ6*;r;L;02Di@YKQe99z6kq0T2xz-Ve0X<@VKv`l*8(?gFV~ ztN>}dASceG0ciXkF@}a^oW-<55{}FjXf@oj94^QQ3NE+@87GZcFZ<$s^2P7YO!7qr zF+v4c_%0~P7d`MrJIXO%5E8zaX;P9eUL;ELMNiBZyij|%3%=+jFiFw$@?P!>C&;6| z=;FR;0D$|V3%)pM`l66v5b$wdY?Yq7B8|7a1TO_r-Onm0}29_C+yT4Yzy) zzHk8rU!)`BzR) zL`TLPEvLq~7f9Sr`r0ir4!C>RINiZBxQL8Q@wJPx*&_II6#L;b(W7@G$pOP>|I2IaEaL0HsVVpJzayng(DIH+Bxg*p^rV5?7 zrAxq7=*IBDWI@{m-@lGM+*_E`+CzOAbLVx2h7+fBh6Wth6J;XSCL+DhB>mZC(t(V* zPLNKf+F(*uM5%tC5gN`un30Wq09Q-d&1bQ=8Mq##nC9za_=I^XLqJ%^iTy^6aX%WzopRer+%Ugn z4-M>`8M?4j2n`+E5E@3k7xj-&*N@dFg!(%7*d3O%@55KMp@E24n|EyN2`GBXm8$78 zU~#zqX3bY)e1Hw*x`?GDT)$NFMZ^+ZV%94tSx|!VzX3YD$BOYcQN$um|09$L*B6n9 z+L(v~|HNW44*ZykQ6Z1erd8Numju3lT7?5_^0dsVCvl6X`Ln5_UqL_yZY#kClmN!_lAqT*{8R z8GC;f-j3njmwhz?3~6y1B0dFe%wudm!Y*kEVE7YGD&Tp5cLSb*WCz@i0~^VONS24m zi)2zDmZI@aE8$rGm^`C>M1FO#i$mzELL}VLt3b2oqn*7V0T>Xn{(KlSNw`-qSj>&)d zQQK$cpK88#`^Y zf)WMKUd+d7tBYLxo#52pvHkEu(mu8ybThX2$~OA)&1ZAvz`X?Ab^BN;9tk_lhlQK) z8Z6(psle|o@s)uh4;0D!SSu(J9xNzb6$lm=J(ll##ODv@mjX}c@#*^*Ju{ZJ6cqab z`gcsHaj(X`muDy4UVN2_(%JqIQ5qA)h$!gYqGec|I@%r?8y${Zz#C=&*|4~koe+f) zQMlAA3TH*(lqmG|ilTm6v>Kv#_Uzfgk^WK90$Gt$qIFb^KPHMoh;{bsX9kBLV3eKd z?`3`G!~JY%l#LGd_YU+E{NyoFxOjdHrM@9O!p7Kzp>v|hy3Vn& zNBuJ;;WeA-X7e>PJUlYv6FmG|_#j~)du67;;>+;NF2BrI?hC>b2Z6BfV_RnlERG|B z#f1+8J^;7_Znq1}#^HFTS&BzkKy5Nvjsj(}c*_bN1$@|KQ4_#Y>@SA%&8LGvRbw_l z^Iiv<=O_|My=%uh21IZ+5Y%#h3~?uf0ntbZ4$BYt3#s)BCSuPuK#a!&5Sc)rPqXIR z$r};s(}D3m?Y(-RT53dic3}9O?n}=Pi5B$Zz&SQFJj_n9;S1+S4fgyH7U+wF5eClp z9}k-}Cyt3z*hPc&e<+IQ-xVzbe>5(Nk|9dnqnAEp7e+;)XLN*pG{hoo2e25)CCklgu?;;*f44u)>5~(;a z@PTL<6D|E8Aqvi18Xg`PK;c7nu@_-DO68Hk!I7bhY*0)dC30qcl|=@6#%40%HME!PPwk)-e^idP{>y*^5SK=GAKBzVeebv@i9P81N|lH^;wu{jTx}=e7TJAlmx5eG4k{I8%P>~ZEy!X+6_d)_;|{%C@=B( zX!fLcQSilWH`s}H9(*C5=+lSUxlz_Ld|`<7As-qXVk1ywOq?D$);m)WUIWwTzrR5b F{5Q!;SD63+ literal 0 HcmV?d00001 diff --git a/hacks/rocks.hlp b/hacks/rocks.hlp new file mode 100755 index 00000000..2303ebe2 --- /dev/null +++ b/hacks/rocks.hlp @@ -0,0 +1,67 @@ +1 ROCKS +Animation of flying through an asteroid field + +SYNOPSIS + + $ rocks [-display host:display.screen] [-foreground color] + [-background color] [-window] [-root] [-count integer] + [-delay usecs] [-speed integer] [-norotate] + +2 DESCRIPTION +The rocks program draws an animation of an asteroid field moving past +the observer (or vice versa). Sometimes the observer picks up spin on Z axis. + +2 OPTIONS +rocks accepts the following options: + + -window +Draw on a newly-created window. This is the default. + + -root +Draw on the root window. + + -count integer +Maximum number of rocks to draw on the screen at once. Default 100. + + -speed integer +A measure of the speed with which the observer and the rocks pass each other, +from 1 to 100. Default 100, meaning ``very fast.'' If you're on a slow +display connection (the animation looks jerky) then try making this number +smaller, and/or decreasing the number of rocks. + + -delay microseconds +Number of microseconds to delay between each frame. Default 50000, meaning +about 1/20th second. Compare and contrast with -speed, above. + + -norotate +Don't rotate the observer; just fly straight through the field. + +2 ENVIRONMENT + + DISPLAY +to get the default host and display number. + + XENVIRONMENT +to get the name of a resource file that overrides the global resources +stored in the RESOURCE_MANAGER property. + +2 BUGS +There should be an option to display doppler shift (a gravity rainbow.) + +Speed of rotation should be settable. + +Default speed of rotation should be relative to forward velocity. + +2 COPYRIGHT +Copyright (co 1992 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. + +2 AUTHOR +Based on Lisp Machine code copyright 1988 John Nguyen . + +Ported to C and X by Jamie Zawinski , 13-aug-92. diff --git a/hacks/rocks.man b/hacks/rocks.man new file mode 100755 index 00000000..c36e5f33 --- /dev/null +++ b/hacks/rocks.man @@ -0,0 +1,64 @@ +.TH XScreenSaver 1 "13-aug-92" "X Version 11" +.SH NAME +rocks - animation of flying through an asteroid field +.SH SYNOPSIS +.B rocks +[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-count \fIinteger\fP] [\-delay \fIusecs\fP] [\-speed \fIinteger\fP] [\-norotate] +.SH DESCRIPTION +The \fIrocks\fP program draws an animation of an asteroid field moving past +the observer (or vice versa). Sometimes the observer picks up spin on Z axis. +.SH OPTIONS +.I rocks +accepts the following options: +.TP 8 +.B \-window +Draw on a newly-created window. This is the default. +.TP 8 +.B \-root +Draw on the root window. +.TP 8 +.B \-count integer +Maximum number of rocks to draw on the screen at once. Default 100. +.TP 8 +.B \-speed integer +A measure of the speed with which the observer and the rocks pass each other, +from 1 to 100. Default 100, meaning ``very fast.'' If you're on a slow +display connection (the animation looks jerky) then try making this number +smaller, and/or decreasing the number of rocks. +.TP 8 +.B \-delay microseconds +Number of microseconds to delay between each frame. Default 50000, meaning +about 1/20th second. Compare and contrast with \fI\-speed\fP, above. +.TP 8 +.B \-norotate +Don't rotate the observer; just fly straight through the field. +.SH ENVIRONMENT +.PP +.TP 8 +.B DISPLAY +to get the default host and display number. +.TP 8 +.B XENVIRONMENT +to get the name of a resource file that overrides the global resources +stored in the RESOURCE_MANAGER property. +.SH SEE ALSO +.BR X (1), +.BR xscreensaver (1) +.SH BUGS +There should be an option to display doppler shift (a gravity rainbow.) + +Speed of rotation should be settable. + +Default speed of rotation should be relative to forward velocity. +.SH COPYRIGHT +Copyright \(co 1992 by Jamie Zawinski. Permission to use, copy, modify, +distribute, and sell this software and its documentation for any purpose is +hereby granted without fee, provided that the above copyright notice appear +in all copies and that both that copyright notice and this permission notice +appear in supporting documentation. No representations are made about the +suitability of this software for any purpose. It is provided "as is" without +express or implied warranty. +.SH AUTHOR +Based on Lisp Machine code copyright 1988 John Nguyen . + +Ported to C and X by Jamie Zawinski , 13-aug-92. diff --git a/hacks/rorschach.c b/hacks/rorschach.c new file mode 100755 index 00000000..bb17ffc9 --- /dev/null +++ b/hacks/rorschach.c @@ -0,0 +1,140 @@ +/* xscreensaver, Copyright (c) 1992 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 "screenhack.h" + +static GC draw_gc, erase_gc; +static unsigned int default_fg_pixel; +static int iterations, offset; +static Bool xsym, ysym; + +static void +init_rorschach (dpy, window) + Display *dpy; + Window window; +{ + XGCValues gcv; + Colormap cmap; + XWindowAttributes xgwa; + XGetWindowAttributes (dpy, window, &xgwa); + cmap = xgwa.colormap; + gcv.foreground = default_fg_pixel = + get_pixel_resource ("foreground", "Foreground", dpy, cmap); + draw_gc = XCreateGC (dpy, window, GCForeground, &gcv); + gcv.foreground = get_pixel_resource ("background", "Background", dpy, cmap); + erase_gc = XCreateGC (dpy, window, GCForeground, &gcv); + iterations = get_integer_resource ("iterations", "Integer"); + offset = get_integer_resource ("offset", "Integer"); + if (offset <= 0) offset = 3; + if (iterations < 10) iterations = 10; + xsym = get_boolean_resource ("xsymmetry", "Symmetry"); + ysym = get_boolean_resource ("ysymmetry", "Symmetry"); +} + +static void +hurm (dpy, window) + Display *dpy; + Window window; +{ + Colormap cmap; + XWindowAttributes xgwa; + int xlim, ylim, x, y, i, got_color = 0; + XPoint points [4]; + XColor color; + XClearWindow (dpy, window); + XGetWindowAttributes (dpy, window, &xgwa); + xlim = xgwa.width; + ylim = xgwa.height; + cmap = xgwa.colormap; + + if (! mono_p) + hsv_to_rgb (random()%360, 1.0, 1.0, &color.red, &color.green, &color.blue); + if ((!mono_p) && (got_color = XAllocColor (dpy, cmap, &color))) + XSetForeground (dpy, draw_gc, color.pixel); + else + XSetForeground (dpy, draw_gc, default_fg_pixel); + + x = xlim/2; + y = ylim/2; + for (i = 0; i < iterations; i++) + { + int j = 0; + x += ((random () % (1 + (offset << 1))) - offset); + y += ((random () % (1 + (offset << 1))) - offset); + points [j].x = x; + points [j].y = y; + j++; + if (xsym) + { + points [j].x = xlim - x; + points [j].y = y; + j++; + } + if (ysym) + { + points [j].x = x; + points [j].y = ylim - y; + j++; + } + if (xsym && ysym) + { + points [j].x = xlim - x; + points [j].y = ylim - y; + j++; + } + XDrawPoints (dpy, window, draw_gc, points, j, CoordModeOrigin); + XSync (dpy, True); + } + sleep (5); + for (i = 0; i < (ylim >> 1); i++) + { + int y = (random () % ylim); + XDrawLine (dpy, window, erase_gc, 0, y, xlim, y); + XFlush (dpy); + if ((i % 50) == 0) + usleep (10000); + } + XClearWindow (dpy, window); + if (got_color) XFreeColors (dpy, cmap, &color.pixel, 1, 0); + XSync (dpy, True); + sleep (1); +} + + +char *progclass = "Rorschach"; + +char *defaults [] = { + "Rorschach.background: black", /* to placate SGI */ + "Rorschach.foreground: white", + "*xsymmetry: true", + "*ysymmetry: false", + "*iterations: 4000", + "*offset: 4", + 0 +}; + +XrmOptionDescRec options [] = { + { "-iterations", ".iterations", XrmoptionSepArg, 0 }, + { "-offset", ".offset", XrmoptionSepArg, 0 }, + { "-xsymmetry", ".xsymmetry", XrmoptionNoArg, "true" }, + { "-ysymmetry", ".ysymmetry", XrmoptionNoArg, "true" } +}; +int options_size = (sizeof (options) / sizeof (options[0])); + +void +screenhack (dpy, window) + Display *dpy; + Window window; +{ + init_rorschach (dpy, window); + while (1) + hurm (dpy, window); +} diff --git a/hacks/rorschach.exe_axp b/hacks/rorschach.exe_axp new file mode 100755 index 0000000000000000000000000000000000000000..1ad22fdabdf8ed2368883d0964abf3f9c856c66b GIT binary patch literal 21504 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 literal 0 HcmV?d00001 diff --git a/hacks/rorschach.exe_vax b/hacks/rorschach.exe_vax new file mode 100755 index 0000000000000000000000000000000000000000..c0d2f67dd790f42a04c2699f49a2e78948ed6c86 GIT binary patch literal 11264 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, 13-aug-92. diff --git a/hacks/rorschach.man b/hacks/rorschach.man new file mode 100755 index 00000000..46b832fc --- /dev/null +++ b/hacks/rorschach.man @@ -0,0 +1,57 @@ +.TH XScreenSaver 1 "13-aug-92" "X Version 11" +.SH NAME +rorschach - simulate ink-blot patterns +.SH SYNOPSIS +.B rorschach +[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-iterations \fIinteger\fP] [\-offset \fIinteger\fP] [\-xsymmetry] [\-ysymmetry] +.SH DESCRIPTION +The \fIrorschach\fP program draws random patterns reminiscent of the +psychological test of same name. +.SH OPTIONS +.I rorschach +accepts the following options: +.TP 8 +.B \-window +Draw on a newly-created window. This is the default. +.TP 8 +.B \-root +Draw on the root window. +.TP 8 +.B \-mono +If on a color display, pretend we're on a monochrome display. +.TP 8 +.B \-iterations integer +How many dots should be drawn each time. Default 4000. +.TP 8 +.B \-offset integer +How far apart the dots should be. Default 4 pixels. +.TP 8 +.B \-xsymmetry +Whether the images should be horizontally symmetrical. Default true. +.TP 8 +.B \-ysymmetry +Whether the images should be vertically symmetrical. Default false. +.SH ENVIRONMENT +.PP +.TP 8 +.B DISPLAY +to get the default host and display number. +.TP 8 +.B XENVIRONMENT +to get the name of a resource file that overrides the global resources +stored in the RESOURCE_MANAGER property. +.SH BUGS +May call your sanity into question. +.SH SEE ALSO +.BR X (1), +.BR xscreensaver (1) +.SH COPYRIGHT +Copyright \(co 1992 by Jamie Zawinski. Permission to use, copy, modify, +distribute, and sell this software and its documentation for any purpose is +hereby granted without fee, provided that the above copyright notice appear +in all copies and that both that copyright notice and this permission notice +appear in supporting documentation. No representations are made about the +suitability of this software for any purpose. It is provided "as is" without +express or implied warranty. +.SH AUTHOR +Jamie Zawinski , 13-aug-92. diff --git a/hacks/screenhack.c b/hacks/screenhack.c new file mode 100755 index 00000000..5690c47a --- /dev/null +++ b/hacks/screenhack.c @@ -0,0 +1,219 @@ +/* xscreensaver, Copyright (c) 1992 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. + * + * And remember: X Windows is to graphics hacking as roman numerals are to + * the square root of pi. + */ + +/* This file contains simple code to open a window or draw on the root. + The idea being that, when writing a graphics hack, you can just link + with this .o to get all of the uninteresting junk out of the way. + + - create a procedure `screenhack(dpy, window)' + + - create a variable `char *progclass' which names this program's + resource class. + + - create a variable `char defaults []' for the default resources. + + - create a variable `XrmOptionDescRec options []' for the command-line, + and `int options_size' which is `XtNumber (options)'. + + And that's it... + */ + +#include "version.h" + +#include +#include +#include +#include +#ifndef VMS +#include +#else +#include "sys$common:[decw$include.xmu]Error.h" +#endif + +#include "screenhack.h" + +char *progname; +XrmDatabase db; +Bool mono_p; + +#if __STDC__ +# define P(x) x +#else +# define P(x)() +#endif + + +static XrmOptionDescRec default_options [] = { + { "-root", ".root", XrmoptionNoArg, "True" }, + { "-window", ".root", XrmoptionNoArg, "False" }, + { "-mono", ".mono", XrmoptionNoArg, "True" }, + { "-install", ".installColormap", XrmoptionNoArg, "True" } +}; + +static char *default_defaults[] = { + "*root: false", + "*geometry: 500x500", + "*mono: false", + "*installColormap: false", + 0 +}; + +static XrmOptionDescRec *merged_options; +static int merged_options_size; +static char **merged_defaults; + +static void +merge_options P((void)) +{ + int options_sizeof = options_size * sizeof (options[0]); + int defaults_size; + merged_options_size = XtNumber (default_options) + options_size; + merged_options = (XrmOptionDescRec *) + malloc (sizeof (default_options) + options_sizeof); + memcpy (merged_options, options, options_sizeof); + memcpy (merged_options + options_size, default_options, + sizeof (default_options)); + + for (defaults_size = 0; defaults [defaults_size]; defaults_size++); + merged_defaults = (char **) + malloc (sizeof (default_defaults) + (defaults_size * sizeof (char *))); + memcpy (merged_defaults, default_defaults, sizeof (default_defaults)); + memcpy ((merged_defaults - 1 + + (sizeof (default_defaults) / sizeof (default_defaults[0]))), + defaults, ((defaults_size + 1) * sizeof (defaults[0]))); +} + + +/* Make the X errors print out the name of this program, so we have some + clue which one has a bug when they die under the screensaver. + */ + +static int +screenhack_ehandler (dpy, error) + Display *dpy; + XErrorEvent *error; +{ + fprintf (stderr, "\nX error in %s:\n", progname); + if (XmuPrintDefaultErrorMessage (dpy, error, stderr)) + exit (-1); + else + fprintf (stderr, " (nonfatal.)\n"); + return 0; +} + +static Bool +MapNotify_event_p (dpy, event, window) + Display *dpy; + XEvent *event; + XPointer window; +{ + return (event->xany.type == MapNotify && + event->xvisibility.window == (Window) window); +} + + +#ifndef VMS +void +#else +int +#endif +main (argc, argv) + int argc; + char **argv; +{ + XtAppContext app; + Widget toplevel; + Display *dpy; + Window window; + Colormap cmap; + Bool root_p; + XEvent event; + + merge_options (); + toplevel = XtAppInitialize (&app, progclass, merged_options, + merged_options_size, &argc, argv, + merged_defaults, 0, 0); + dpy = XtDisplay (toplevel); + db = XtDatabase (dpy); + XtGetApplicationNameAndClass (dpy, &progname, &progclass); + XSetErrorHandler (screenhack_ehandler); + if (argc > 1) + { + int i; + int x = 18; + int end = 78; + fprintf (stderr, "%s: unrecognised option \"%s\"\n", progname, argv[1]); + fprintf (stderr, "Options include: "); + for (i = 0; i < merged_options_size; i++) + { + char *sw = merged_options [i].option; + Bool argp = (merged_options [i].argKind == XrmoptionSepArg); + int size = strlen (sw) + (argp ? 6 : 0) + 2; + if (x + size >= end) + { + fprintf (stderr, "\n\t\t "); + x = 18; + } + x += size; + fprintf (stderr, "%s", sw); + if (argp) fprintf (stderr, " "); + if (i != merged_options_size - 1) fprintf (stderr, ", "); + } + fprintf (stderr, ".\n"); + exit (1); + } + + mono_p = get_boolean_resource ("mono", "Boolean"); + if (CellsOfScreen (DefaultScreenOfDisplay (dpy)) <= 2) + mono_p = True; + + root_p = get_boolean_resource ("root", "Boolean"); + if (root_p) + { + XWindowAttributes xgwa; + window = RootWindowOfScreen (XtScreen (toplevel)); + XtDestroyWidget (toplevel); + XGetWindowAttributes (dpy, window, &xgwa); + cmap = xgwa.colormap; + } + else + { + XtRealizeWidget (toplevel); + window = XtWindow (toplevel); + if (get_boolean_resource ("installColormap", "InstallColormap")) + { + cmap = XCreateColormap (dpy, window, + DefaultVisualOfScreen (XtScreen (toplevel)), + AllocNone); + XSetWindowColormap (dpy, window, cmap); + } + else + cmap = DefaultColormap (dpy, DefaultScreen (dpy)); + } + if (!get_boolean_resource ("dontClearWindow", "Boolean")) /* kludge-o-rama */ + { + XSetWindowBackground (dpy, window, + get_pixel_resource ("background", "Background", + dpy, cmap)); + XClearWindow (dpy, window); + } + + if (!root_p && toplevel->core.mapped_when_managed) + /* wait for it to be mapped */ + XIfEvent (dpy, &event, MapNotify_event_p, (XPointer) window); + + XSync (dpy, False); + srandom ((int) time ((time_t *) 0)); + screenhack (dpy, window); +} diff --git a/hacks/screenhack.h b/hacks/screenhack.h new file mode 100755 index 00000000..9737f653 --- /dev/null +++ b/hacks/screenhack.h @@ -0,0 +1,145 @@ +/* xscreensaver, Copyright (c) 1992, 1993 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 0 + * Found in Don Hopkin`s .plan file: + * + * The color situation is a total flying circus. The X approach to + * device independence is to treat everything like a MicroVax framebuffer + * on acid. A truely portable X application is required to act like the + * persistent customer in the Monty Python ``Cheese Shop'' sketch. Even + * the simplest applications must answer many difficult questions, like: + * + * WHAT IS YOUR DISPLAY? + * display = XOpenDisplay("unix:0"); + * WHAT IS YOUR ROOT? + * root = RootWindow(display, DefaultScreen(display)); + * AND WHAT IS YOUR WINDOW? + * win = XCreateSimpleWindow(display, root, 0, 0, 256, 256, 1, + * BlackPixel(display, DefaultScreen(display)), + * WhitePixel(display, DefaultScreen(display))) + * OH ALL RIGHT, YOU CAN GO ON. + * + * WHAT IS YOUR DISPLAY? + * display = XOpenDisplay("unix:0"); + * WHAT IS YOUR COLORMAP? + * cmap = DefaultColormap(display, DefaultScreen(display)); + * AND WHAT IS YOUR FAVORITE COLOR? + * favorite_color = 0; /* Black. */ + * /* Whoops! No, I mean: */ + * favorite_color = BlackPixel(display, DefaultScreen(display)); + * /* AAAYYYYEEEEE!! (client dumps core & falls into the chasm) */ + * + * WHAT IS YOUR DISPLAY? + * display = XOpenDisplay("unix:0"); + * WHAT IS YOUR VISUAL? + * struct XVisualInfo vinfo; + * if (XMatchVisualInfo(display, DefaultScreen(display), + * 8, PseudoColor, &vinfo) != 0) + * visual = vinfo.visual; + * AND WHAT IS THE NET SPEED VELOCITY OF AN XConfigureWindow REQUEST? + * /* Is that a SubStructureRedirectMask or a ResizeRedirectMask? */ + * WHAT??! HOW AM I SUPPOSED TO KNOW THAT? + * AAAAUUUGGGHHH!!!! (server dumps core & falls into the chasm) + * +#endif /* 0 */ + +#ifndef _SCREENHACK_H_ +#define _SCREENHACK_H_ + +#if __STDC__ +#include +#endif + +#include +#include +#include +#include "vroot.h" + + +extern Bool mono_p; +extern char *progname; +extern char *progclass; +extern XrmDatabase db; +extern XrmOptionDescRec options []; +extern int options_size; +extern char *defaults []; + +#if xxx__STDC__ +# if defined(SVR4) || defined(SYSV) +# ifndef random + extern int rand (void); +# define random() rand() +# endif +# ifndef srandom + extern void srand (unsigned int); +# define srandom(i) srand((unsigned int)(i)) +# endif +# else /* !totally-losing-SYSV */ +# ifndef random + extern long random (void); +# endif +# ifndef srandom + extern void srandom (int); +# endif +# endif /* !totally-losing-SYSV */ +#endif /* __STDC__ */ + + +#ifdef VMS +#define random rand +#define srandom srand +#endif + +#if __STDC__ +# define P(x)x +#else +# define P(x)() +#endif + +extern void screenhack P((Display*,Window)); + +#define usleep screenhack_usleep + +extern void screenhack_usleep P((unsigned long)); +extern char *get_string_resource P((char*,char*)); +extern Bool get_boolean_resource P((char*,char*)); +extern int get_integer_resource P((char*,char*)); +extern double get_float_resource P((char*,char*)); +extern unsigned int get_pixel_resource P((char*,char*,Display*,Colormap)); +extern unsigned int get_minutes_resource P((char*,char*)); +extern unsigned int get_seconds_resource P((char*,char*)); + +extern Visual *get_visual_resource P((Display *, char *, char *)); +extern int get_visual_depth P((Display *, Visual *)); + +extern void hsv_to_rgb P((int,double,double,unsigned short*, + unsigned short*,unsigned short*)); +extern void rgb_to_hsv P((unsigned short,unsigned short,unsigned short, + int*,double*,double*)); +extern void cycle_hue P((XColor*,int)); + +extern void make_color_ramp P((int h1, double s1, double v1, + int h2, double s2, double v2, + XColor *pixels, int npixels)); + +extern Pixmap grab_screen_image P((Display *dpy, Window window, int root_p)); +extern void copy_default_colormap_contents P((Display *dpy, Colormap to_cmap, + Visual *to_visual)); + +static double _frand_tmp_; +#define frand(f) \ + (_frand_tmp_ = (((double) random()) / \ + (((double) ((unsigned int)~0)) / ((double) (f+f)))), \ + _frand_tmp_ < 0 ? -_frand_tmp_ : _frand_tmp_) + +#undef P +#endif /* _SCREENHACK_H_ */ diff --git a/hacks/slidescreen.c b/hacks/slidescreen.c new file mode 100755 index 00000000..52f0d975 --- /dev/null +++ b/hacks/slidescreen.c @@ -0,0 +1,252 @@ +/* xscreensaver, Copyright (c) 1992, 1993, 1994 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 "screenhack.h" + +static int grid_size; +static int pix_inc; +static int hole_x, hole_y; +static int bitmap_w, bitmap_h; +static int xoff, yoff; +static int grid_w, grid_h; +static int delay, delay2; +static GC gc; + +static void +init_slide (dpy, window) + Display *dpy; + Window window; +{ + int i; + XGCValues gcv; + XWindowAttributes xgwa; + int border; + int root_p; + unsigned long fg; + Pixmap pixmap; + Drawable d; + Colormap cmap; + Visual *visual; + + XGetWindowAttributes (dpy, window, &xgwa); + cmap = xgwa.colormap; + visual = xgwa.visual; + + copy_default_colormap_contents (dpy, cmap, visual); + + delay = get_integer_resource ("delay", "Integer"); + delay2 = get_integer_resource ("delay2", "Integer"); + grid_size = get_integer_resource ("gridSize", "Integer"); + pix_inc = get_integer_resource ("pixelIncrement", "Integer"); + border = get_integer_resource ("internalBorderWidth", "InternalBorderWidth"); + fg = get_pixel_resource ("background", "Background", dpy, + /* Pixels always come out of default map. */ + XDefaultColormapOfScreen (xgwa.screen)); + root_p = get_boolean_resource ("root", "Boolean"); + + if (delay < 0) delay = 0; + if (delay2 < 0) delay2 = 0; + if (pix_inc < 1) pix_inc = 1; + if (grid_size < 1) grid_size = 1; + + gcv.foreground = fg; + gcv.function = GXcopy; + gcv.subwindow_mode = IncludeInferiors; + gc = XCreateGC (dpy, window, GCForeground |GCFunction | GCSubwindowMode, + &gcv); + + pixmap = grab_screen_image (dpy, window, root_p); + + XGetWindowAttributes (dpy, window, &xgwa); + bitmap_w = xgwa.width; + bitmap_h = xgwa.height; + + grid_w = bitmap_w / grid_size; + grid_h = bitmap_h / grid_size; + hole_x = random () % grid_w; + hole_y = random () % grid_h; + xoff = (bitmap_w - (grid_w * grid_size)) / 2; + yoff = (bitmap_h - (grid_h * grid_size)) / 2; + + d = (pixmap ? pixmap : window); + + if (border) + { + int i; + for (i = 0; i <= bitmap_w; i += grid_size) + XFillRectangle (dpy, d, gc, xoff+i-border/2, yoff, border, bitmap_h); + for (i = 0; i <= bitmap_h; i += grid_size) + XFillRectangle (dpy, d, gc, xoff, yoff+i-border/2, bitmap_w, border); + } + + if (xoff) + { + XFillRectangle (dpy, d, gc, 0, 0, xoff, bitmap_h); + XFillRectangle (dpy, d, gc, bitmap_w - xoff, 0, xoff, bitmap_h); + } + if (yoff) + { + XFillRectangle (dpy, d, gc, 0, 0, bitmap_w, yoff); + XFillRectangle (dpy, d, gc, 0, bitmap_h - yoff, bitmap_w, yoff); + } + + if (pixmap) XClearWindow (dpy, window); + XSync (dpy, True); + if (delay2) usleep (delay2 * 2); + for (i = 0; i < grid_size; i += pix_inc) + { + XPoint points [3]; + points[0].x = xoff + grid_size * hole_x; + points[0].y = yoff + grid_size * hole_y; + points[1].x = points[0].x + grid_size; + points[1].y = points[0].y; + points[2].x = points[0].x; + points[2].y = points[0].y + i; + XFillPolygon (dpy, window, gc, points, 3, Convex, CoordModeOrigin); + + points[1].x = points[0].x; + points[1].y = points[0].y + grid_size; + points[2].x = points[0].x + i; + points[2].y = points[0].y + grid_size; + XFillPolygon (dpy, window, gc, points, 3, Convex, CoordModeOrigin); + + points[0].x = points[1].x + grid_size; + points[0].y = points[1].y; + points[2].x = points[0].x; + points[2].y = points[0].y - i; + XFillPolygon (dpy, window, gc, points, 3, Convex, CoordModeOrigin); + + points[1].x = points[0].x; + points[1].y = points[0].y - grid_size; + points[2].x = points[1].x - i; + points[2].y = points[1].y; + XFillPolygon (dpy, window, gc, points, 3, Convex, CoordModeOrigin); + + XSync (dpy, True); + if (delay) usleep (delay); + } + + XFillRectangle (dpy, window, gc, + xoff + grid_size * hole_x, + yoff + grid_size * hole_y, + grid_size, grid_size); +} + +static void +slide1 (dpy, window) + Display *dpy; + Window window; +{ + /* this code is a total kludge, but who cares, it works... */ + int i, x, y, ix, iy, dx, dy, dir, w, h, size, inc; + static int last = -1; + do { + dir = random () % 4; + switch (dir) + { + case 0: dx = 0, dy = 1; break; + case 1: dx = -1, dy = 0; break; + case 2: dx = 0, dy = -1; break; + case 3: dx = 1, dy = 0; break; + default: abort (); + } + } while (dir == last || + hole_x + dx < 0 || hole_x + dx >= grid_w || + hole_y + dy < 0 || hole_y + dy >= grid_h); + if (grid_w > 1 && grid_h > 1) + last = (dir == 0 ? 2 : dir == 2 ? 0 : dir == 1 ? 3 : 1); + + switch (dir) + { + case 0: size = 1 + (random()%(grid_h - hole_y - 1)); h = size; w = 1; break; + case 1: size = 1 + (random()%hole_x); w = size; h = 1; break; + case 2: size = 1 + (random()%hole_y); h = size; w = 1; break; + case 3: size = 1 + (random()%(grid_w - hole_x - 1)); w = size; h = 1; break; + default: abort (); + } + + if (dx == -1) hole_x -= (size - 1); + else if (dy == -1) hole_y -= (size - 1); + + ix = x = xoff + (hole_x + dx) * grid_size; + iy = y = yoff + (hole_y + dy) * grid_size; + inc = pix_inc; + for (i = 0; i < grid_size; i += inc) + { + if (inc + i > grid_size) + inc = grid_size - i; + XCopyArea (dpy, window, window, gc, x, y, grid_size * w, grid_size * h, + x - dx * inc, y - dy * inc); + x -= dx * inc; + y -= dy * inc; + switch (dir) + { + case 0: XFillRectangle (dpy, window, gc, + ix, y + grid_size * h, grid_size * w, iy - y); + break; + case 1: XFillRectangle (dpy, window, gc, ix, iy, x - ix, grid_size * h); + break; + case 2: XFillRectangle (dpy, window, gc, ix, iy, grid_size * w, y - iy); + break; + case 3: XFillRectangle (dpy, window, gc, + x + grid_size * w, iy, ix - x, grid_size * h); + break; + } + + XSync (dpy, True); + if (delay) usleep (delay); + } + switch (dir) + { + case 0: hole_y += size; break; + case 1: hole_x--; break; + case 2: hole_y--; break; + case 3: hole_x += size; break; + } +} + + +char *progclass = "SlidePuzzle"; + +char *defaults [] = { + "SlidePuzzle.mappedWhenManaged:false", + "SlidePuzzle.dontClearWindow: true", + "*background: black", + "*gridSize: 70", + "*pixelIncrement: 10", + "*internalBorderWidth: 1", + "*delay: 50000", + "*delay2: 1000000", + 0 +}; + +XrmOptionDescRec options [] = { + { "-grid-size", ".gridSize", XrmoptionSepArg, 0 }, + { "-ibw", ".internalBorderWidth", XrmoptionSepArg, 0 }, + { "-increment", ".pixelIncrement", XrmoptionSepArg, 0 }, + { "-delay", ".delay", XrmoptionSepArg, 0 }, + { "-delay2", ".delay2", XrmoptionSepArg, 0 }, +}; + +int options_size = (sizeof (options) / sizeof (options[0])); + +void +screenhack (dpy, window) + Display *dpy; + Window window; +{ + init_slide (dpy, window); + while (1) + { + slide1 (dpy, window); + if (delay2) usleep (delay2); + } +} diff --git a/hacks/slidescreen.exe_axp b/hacks/slidescreen.exe_axp new file mode 100755 index 0000000000000000000000000000000000000000..449fa88aee62f83ec6cf1cb8a24a9bb6dd56f0bd GIT binary patch literal 24576 zcmeHveRNdUb??5TE0_@i4QFt5bjEHM$xN1<0>CEx z686u9);y%&`^ICRB7g(uMcK~={7lS4a3jO%wc6AFXD`!j?8xDN){l5rpo4v!@7z~0 z+b<8xluhf)OG-BtZ!9f+%!0i6|N0a8s~lPgF)5IrzcRnz=D=um=vYdK8T^keB3Ymb ztf=1v7!su@1B@<`ZGlY0vx1HGXaG#T8H~aM1o&lJnJQ11YZ9BR^;w6~5(Qz&*IAQa zmruaQ#goMI{C|AT8%f$tb|^uxATq_uz^;ohuAGw6;wP6@KKl6j@}f;;8#mrl<@e_U z#+l;*!jCIf`uL2Q*7(h-!zYXlvu6F0C0B+_7OC}GW38cS^A>W*7n0N}dK4Cn1s*LM zV~dx9;)+yYHTUqRa@QsWPRiIrcWl@%|*$gDumM9P2b{){jI)<^++1LA2Lh*h3`nMiBzQd z9q;WE`LD90Ja=M$EZgF{T`Z$)wdZTK>#^kGS>yU1o;cpLeZ!0X>mr88KFyM+ zquQenv6X%!#pu~!|N0FJ{&1E(kv)G=Qxl}y=zvMP-EJDmCabV~Vm+QFzrH&s_8SjW zH}8B9zRcq>*wemvV!t=bqDL|aej=~&+^GW@=31Em++UxqF->d3v zw!b%R;9KqSMqXo64Kxl}B-Bw4d-7%_J^Ix#_$$?MjC*6+I z?JZs2>GqtiSLyOew-0lUMQ8hDO_5}#t(VNV`a_ef{&fGdv$=lzruye-W{}DsSA@T)Vrr5uSK^?XK!)F-GO9MbhoRFU>#orO7+p zUpxNYA;ZyE!(KOUnm=z(v%g+$=qbP6GHN0NnFt?FlSjHfwy&HB-%1Ea#4L*H6WtB71%Kd5Z@ic$? zqTf`OowOs(8t2%1x;_mrnTWq4XJS3wAEeuROvQZTW4uep%Ph60*<1ShMAGD!u8;7a zZmx9eBFipJJDft;i&l|Hn!crpOX6w$&c6Fm`il`auT%#g|$1g+LR3 zqc(l9pjCJNkEP2aZGSh`7|T}gwf|qX%^4=fvWbnXvpXHq*)In3EPCMm)z6WaVb~3J z=D=5c1iZta;|D72afrngrf{0Q^rfwTZ<_qm{lA01Ziz*&Y2#1QyKL7E#i-rx?5B?3 z{4o4>1^%LcpQ6z5caGn1_T6V|tw61%d9T_ln(WZW-t}ci^{zeaXxg#Ep4rNh^WS07 z>&WBNwmg!+UQHF#>Chgnh`uR8kbtdp}pIP2>06S46=7HB=l(J{Lo z2SDm?rR~61+4*Lh|COJ#;%cY;VVnPzb|AFM&K-CsH}jUod*4P*}gj?#H8uu9WjoWtZ-Cn!KunAbUXN|G9 zvAK3z)6T~FJ+<47CIx8tmhJH|uF9%3YMYyznlaD-Y%&U5Szn_LBP;EVc9or5_0?k4 zSIeed_1kMJ_CELAE-N%isjtF0CtSPz$-3IcN2?pFch+uS<8Ujf<5s1ef!25oM|(w< zj|W1Kf~RH|;!v`-+zE)-dY@mGPYe*yny&=7ydHs1b7S?cqNe8UwK!#MZ>d}3$(QAd z9}b43A#1C?nhp7Eu*EMcInT;H$;fM!Gp{XQtnY{LvkQ8Vj8#})HIY7HJeEcl!EjEz zd3%+0g|jK}MCnExb~kP+-|(0kVE@N;-d*3gx21NE@t|?f{ajD3u@l#`e-E^var;O2 z*Ec>>jpa02>UY;-JP1ME*b}bZR==ZuTQwCdiF4d6~X<)81X%8*gthaNupi zxLUN}*bDtis+TCZY669;oA-Peg8j?(7`ylGX)$VQjcQ}ZuBPgi6-HxI3)&s7MBzz= zYgB|I(oF+R!&hS+3)6s71o|-p=k=DodqDd3T4SxTY`aCfO*hGaFyRNWm?HLD8@Yyw8>VIzif&Kdix(~JB(QlDM#M;=ESwClsj3o&1r zJ?C}QLnw!l+K>+0?GA3{|5>_t$CZlbqsoO-K?717QUoc6bRH>=G>nw~b0hxCMY5s? z^a3U?rEa2Jky3Y~-;3nH=b~(+)HBm2$V1I&H{PJ$drR z=>_^&(53$}7)QS$MO|K5V2CX2$(FT-TOP!%=mH~8YS6y0=U?`2X+V3la;# ze!Dk;F?u|BK2g&(w;&$Oe|$^BLj6WCSGIN;vb8f$&UX3b;u5X(7Y&Q_M6j21w8Rx1 zUeEzrdJH)LT3+e#r_ht34+q_{w!8m^>sa3n-!XISvz;MkT zinla)^-DoNXt(f|L@^F9HC@s5TN);d477sAHqe(yEb@^?H)xzJ@i$2iaT?-N_~vd# zA8>vNILU(-Jb;f*0h}TG!OM|OKlm|I_z}sEbnNxvI>#9BN`CZ2=ISC%@=HYjevmx3 zk5TRxzt_R9XixRHwF5m~?UkNf?TsEoyV#SbjrI7og(nNO2Tz*XQzy%`11BrAS58)H zZ=4Ki<7>ngXL{SE2v0n^z24*IpJL6p zKK+ovbp3L$GEsDFG%+dGRkWpHdd?u$;b7!?BHGD*T@IQhu2)Ubb(3Re0R9NzCWHSn zf&674>XG=BTzw#@OJPKp+$EF!aZ?BHy7Wh#`t`)WUL#Ev?LRO{7x{k?bP$&F1SNqn zlVY61lv3aHLq7=qHszj_Nb-L z3!$T9r$u%|MWddMo&Lk>Ee(|-Q62cpFdyfy!20Xr?eOY@!Gb+o8hR7Hqbv`KuXBce zHP{CH)Sq_HJ6-=F@N2Q{pm`tLF+P%T9cx8j{&QOz<{pYe{x>3HiL1ur5+4*PkDf{R zj!oYDgJ7Qcjt(kWZj0tBJ@rI~G52KX6!nXJA|3_Lb`9-W)I-@3xlckv87M<9tFT6q zHp1!|rbws*hwF$}|55PEdkynx6KnSlb;=X{1O3%f;uV>0N`;tHxo+~l*`3(v%M|lH z&KHAzbFM2~OVH@hFd1-cKb-LSW&k(&e-|*5r1dgkjw`$HM2Vkp-$kFuu@26=GCvZS z>VC8|Qz8nM{jo8hkFakkxE&o?elw8atug=9^GM)ZiRXXr%)3vs=ppRa0P8J?2kSIT z&S9*fv3ZN~6(P;#Gdwj*DnJKe^~vV9`x2i$dU(v`qwTVt{p`a{dhDRoMP8Egkqp^p z7Q3D|i;-vOZ<=|sEpjW;jl?#iwJ=md*q=-?zdaeU`b~)sY?jiFO4;5){Tg4?VqA z&iV*D_nmm~OP|`(fa|n@TV;P_5^%kiajE!r2@P=F-E!mg83hCIFAJbA`+d2XF9+kj z7;mWgvWl|hUHB(I{MrrVPn{xOw;VV%Lmz^Vdgati;K`LYPURHDf#>3>S*Yj9*r~aP zz90Pe4O<%AnD5OS)N+8F7f-eW(z z;)X7GvAz#JwxwaS)Sk#iy;6=sA3-hdjcj)=DYqC{*JHgC@oiZ=S4+l5g6g zw_!^|9{N3455JPxV305~D1Xdf27lnT`8z0W9WTl8j%;};u-^4*U_J6|{mTKrtmvRl zao%Cjb~U+1n_au{^Z0FN_?AM-x|y*w-y-x0Csn*mxl_uEg={|*L^ zLoTE#MtNp&skX9C^?{66^XFGBYHm?IAS zgq=>_f#(k3@scjUQ=VbK8}M&u6g}}^FW}k!`&%tK$OGwU%dqTbKlX6$b=R@i3E)KA z+UeHzcY3uWow?fCPD6XQGf%tG>DLw;|X-rTYz!ad##UUXR+`_`x7w;=N{`e=`6Q}(zIFyr=kS=r+m`0!h0 zE%3+y_qL9V@53IA0XNFy_PAErV+i;hd#nSl>3W`RkNGL~c-gkcE5FtrXDNGJ8;NB; z1Y7i$Oa=|0CCa_g-7bL>89y;ECLT($$HmxZmrk(93eZ#uTDCk&f4n`$_48x>bjS%d z*l8kGDMPGMA!j=)<=xJZ+~};61xLe(U0UtfMa3mp7p~7R)&{Xjk7x%Fo4kV9$GT9oXe(Zt_LR!s|S-Sb{h*E=x=|A*qi zd*DClm)MWHMBicHHZVWutN?DrF_A3vgU;yRyNtnqbjf=c62a(9;O=voKkiR-Mc;Ns zejI{*=eERy@D(RCsk*IQ7Q9aR^~wJ3cI+E<%HLiIX0~qhao#_Lp0VGe>q@ZQMY`UD zo`P@S`IgI~i)+L6N?jlJ7h{e3VH$;UBubllK+ZJL2 z3ts&gQwZ3>#OJz)5?$S+=v)6=TN>ivgK^*W#O={R(0m#DXexXha7BRQ+_NB8z(rox zZz~-IJjVfFRFmcFhY~xZ#6=ugviz~d+GmPRc^)z~xz{{=pHa44d%Ebfrz(&oPX^w? z9KU;?Sv~;VQ$X`@V)E-FiQtI>k;}Q#`d)`;QGk1~CR*SnjD^gq0E0Ml5U}v8Bk|x6 z=a;OayS4115zrv=AogL}eGqc_5$LSx8heCvPmT?pYGKLY$tnI;MwpS z7&DTXj98lXjJQ$FBbPabv=TqZ5D&+ZkJI)%ke!+bGU*_kGmpqCCpnhm3bgD1$NdS$ zOcLX=3A|;fTk~B}c7F+a7J`n^C#&`X*xTlKu$KCVvM#|69dR7>-z)0^b(3nAOv65n z_36k)+YyoX**5_B&BD0;#Lf=#5l`IS0p6fv)sGHC2XX%G?8W@&F~2c;VVOtjABCP2 zRc|uNIIrkNiATx~u~`JQ&=k;y5309OXFL z2ir*->HpS7DJPA0JR{{(^rr)N&e>6(cTFq5W6siYw_aE3);*;ddvY=Qf&bWfz-#&n z)2(L(>NZKafA+$4i=Q#d+`6|^)3s8stnDFxq=RxH9k*FD93@@-kQ3?P{G{XWz7SIL zx6R&B?$OHwd2?Llcg{XgPPw@CDL0*;bmwJeC+FupH=CbxPfqf`)#iWa1pd!&G;RLP z^1RF`n153F@@oN`|E%Qv;JgC8 zqrUwu{TJ%kgQAR;sZ-RoJ@ES%pi^9@Z25fPPdvXH*q*5RIebvWTE8wOSNJ=nZ+Jrb z*f4a_veh?EQSP(>w;X>Av1bu!nJIau(%E%5zmC-$&Bfk|b4JH#qG2)pE&V8c?oSbK zYhfuV#g*JN+(SHYPj6td^j`Kq-W%{p>(vML_6DYa)@dkDx8vd!IET2whf_}^&f%4u zvoXd**??g`?oSru{IBj!G6C!K>u8HW4>PtL-Mdb6*9QQk=f1h~u%3Fzt-s@g#7ImyOOid3w>=9#R zR$*`H?3Q@&y9JSl=T!EV=3=gX{o2E`H=|AOM`-x1ZimnN!RK6?PsDXs??t)XraM(m z$04TytPl4U(Ap6P4}-KJZ8_c+H3APJrp)q-iF>RQS@K@-Qsf@+orgX6{+r-C1boCn zeB_h3R;J-VYi-^8sb?iq}0kYkkntF?7SGyG-| z>fLedlLLvriSkZ^aZHZ9P&8Z47h!LGEk|B{Y$S2}YZnq%J7&vw9@8bK*n@N76uGxJ z8+%Hh3y8b?3o;ppP>xGTXkiS^JOlt|`V6Nrb7fjqio}2*~oS%CZV(-uq z<4l3AQI{scW@bWn4CoVW2CtY5EJ1xW_=f+B+^xM3Sc-TM`Vd7NjdS=9vDf(5({^V` z{(8=xBQe~iT?sC><;(cs9<3bX*4p$let2J^#tOb}aEG`$Vq3 zo_}M}FPzv}N8Nv;YK(dZKiqxSjdLjP>|S{z@#a^@9vWEuvSFUV*zq&#ufE3(^B%Xw zIxm^pQ>V*tk6VHBQYFqyxTEc<(=PUeabDVo^HOWdoh|RNd*Ksw+}Uz}&eVSzy14TR-m_l9omNqo8}&-8hZpyf?czJeb2R6k@$8m{oDtrAzH%xT_w!u4 z9Ndlao*w(P4|nvZvVk)fu^#tm-0`2vgI*GkT3^Joyq93y#k(Tj6Y-8Hj5sS-ZbTxP zi%hP0SH{(1tbYlVao`}%*)K^(M;LQyve*o`9x{0b2%zjmynJ#8>E`_)_2`m{_sEY! zb3X2O*d9awbkM(CxmwLy7DQDKKfzO&Ha-$(6rO0 zTeT;GXYBTW$9*mN2`hdQ!F`yQ@Kb_GSP2|!;Gg=jPQ2%6lLgqfE^nj^VEl3P^FD|?{0`_C zw&i)LTu;#(Kh#-9CBnWUGB2Mf)Ab z*n^T0<^2Y1AwpXYL4LGlFP^#7f!7MxqM{0vCy7`2`#iZ48L36gj?iKE;vg{7Na)i38 z^cH-6W177{kW?92=V?SY>M-e2G&W(FzB=9zdT|7fB6s0f6GVA|3}IByRg5F z&;J*g|Jc<3iC7AH2fKek|J#y0TSusWml`d8oPPE>dU*kTY^UC{-FpaeD#lR1zJosh zCn6^ASTyk8?TMMW5*eb;puf09%xlv`ew^bE6^VSJdv-+#_jiAQyQ#NvPnGY}+6{9~ zI8=1T<2OeVKk1&?9>V#4(Fb4gEHiQTyqZlI#5*I2Pjvq!+GYaJFA~px5VP&%jItB@ zRn7;RKwBGV+6fwz-jQFd8~1J6Gkqt0qw;0QdB?$X&+k7;T}cEVhtK6Ym1F#3@O8q| zVe%gP9>iD$VhrIAT%x=u+$^sawP=Tm3a))-U5-9tiu6Qvc?W04L$LoC_RBu(tL?~V zyjCfTiuY-`#f8_jM{@P+fGvDYm&(`NlKWb=_+S5uM+^gS-;iuP(Ji|)DB zv2K?BbHING^t=rClhLK1B@eXtai2Dth;{!%;-L?wi+Ppu!5>>i@NROT2XpJdW6B~k zgdmP*XVK%pV*pPGv`PfeK)?^@Bpz>UIPvPWUV9zRt99VMb0xVBPvZ`Yu>|Ki?m1^> z%5n3B`yyq3oH#c+Y}+0E9PQ!nv1XJz+gWG(d9+z@yoa*j-b5RH5bjyKOx(4W;jXm; zcdeDUYYpM9wGMZ!VVu$T$=ai>xNmK@?^}C6xVVIOt+{SIdv`z8ljlCr<9Clg+r@MB zZu%NLcQ}@-FMu41y6|i{`mZ?mvQGW?<1XB>nb+Yvoc8I^FQ@&_*p8T>QffLa9804A z03008cES-4Z6^v?r=8FB*~b1ap}iI3bM>{pb~SFR?=afwhw%3iSnne~?nx~?6XV$u z?z09$fTP^%0O$3G%&Cx525d5ncIv;^zUR%sJhXuZ_!zO;Bfe{aGM8S1wf3zDh_4L! z11@{r`0SnX&UJ6?GTeBdz`eiI?>^gQx~*pp^y`%CKKS%j`1H1v=LmQYpnJOfr1<=e znkBC$s=lp(9xu+rE}SQccN69i39Mr5^iL94H&@InBA;1>nAtZQJ|55UeVcE2dEKEo zpIdkO{x!>J{Q`T+(Thnd@Sq-eMC6%O&D!io5Gxs*R>;n}k9 zM@r@kd|+C&8)&0e(dm= z?-&ptbkk5LDoh#DH-x6okA`=hb3ny$^*hbcckGi0tY2mM^9eXt9}wViD#x=;J# zdml>wu}+9f@xBN2KV_}3zjb?MxOfzV{ou1Og-<>oA)f}`q4~wwIG=Hw&%vAU zxiN*$uua!Ko6lD*J`Xy4hQS~C9Jbf-`k1RzFb4V=?E`Ou_ag9|IqJsvA3V3EAsyf6 zEk3Kbmf*1qcLd;Ze`jGDpD}wqC-V79kBNP*Yy!XZYd=L?vlj1T{4CfCzW)k*GuB;= zSeda4*R+s+19V$whs$bx7uF#@0UwjFzLg1Ir^v^n6?i_w^@@R)X;@qOFE{jpe#;rp zcr^pDEdGpl1min7rV{VXPzG&E26{9EnQ*_Zqa2}2uR<2QW9vgZZLuHiWsrq)-^F(J zvz`3`^x-}=GRM&`&;j3#v)6*C3pV9}Jy~a`*CNijiDxEF?=TBwafD}H>g7SX6n#nF zjLwk{ik@^Oik?J1TmN2Bq1+qcJ47E|ha;UP_L?%RM@7neND-_D-!-6(-F!_hBGw&a ztebr2i*YRc%rWjelq2I=$}t!63`0(^37jd9z~;^>n~NdllYLTB4BiM&ehHrgcpPds>(uy}BPpAAd6I>6ry_K$7Y6*g?EjW^xi+X)AIcVS&~a39I@2fE6Z$VxtMaQxvGJ@yx$EXjKiwWF_Poj9c zJ6Z<%O~_;>bTkLLg1b=TZj2*7$S4AQ5su@XZ1)#GXEN@bssByMR0&;)C8EbXz)hTm z@>!g7E(I;zj{|p3)Bs-MAH(^ccozU~#}}`f@XyC$8CQy9>TGl=sA<~6Q^bhlU7zSA z;InXSj5_oZ$NM%8-q}*WmVK|c>|yy=bD4I`T=Kn0neTh?vQjx`2JsHo60O$sX+hH^ z+^Ajav!IZ3_C*Js;5?$1)*;TzYj2<-gpH!T0=lF$gBt9wC{ve5#* zTLzz;s9ExH_`dy44c=xH}S0`Y5_EAL+t76ie>3>7sto-l@N&tN1@j7yV_P%2fc_9 zxEEF+$mM>>_{)#;DE15Z(TfxOD4)k*eZi~i7|();!y<)gu41pf^0u+i5pkjOCK7eowkjQ%l<_ulAx@t$DRdQUA7r4QZ;{juUe-!Z43 z?G@0`C(y?>KHugz;vqivZ$KaYW5||Q9oqgJ&nZZcTb3$%uy#J;ZUaq|K$8KQZo$qQHQ4G=p#Lh>q!sS@kP+& zLM~FQ-kX39b&c=kN4U>*nuz1m{VVm#e@$D*wIiN!y&u4qy70S^zx6X<`DdKI<0}b#6o!G||4dc2zuE*G?|4V+G(`LbYlj_%s{|_S-xl{+KQEtyCaETsILYCDjypY?X6UL^kMRT!xi>0YZU zCh}IK2oj7y3=9}X@&cv;sU0bT6hk6meMrM3kTfBgNFk(NB+?neq^(H3NPS4&Nx+HZ zM>3HjNHL^dq&}oL(l8PQ;zjZ!nMf5#A*3);D^d)p7b%W3j3fwBy-0o}6R84e7)i3w zj)XX!$kABDEv+0e36#M38!s`j8B)fr%7DGJxB_ zT2vqbodAVIP^Nf*O5$h;qrg70WuhuN~G63M5F#bb;mG)=-$v)FA+289J|5iv6 z;#U`(@wcRXE96&?8t-++^P3;|R*Ch!kn!$cTXM#`oo|Nx+7S~0obi*aZ--3m{14Pp z$KyL9|A7$`L7ee3KKxCQiGcrI`~N}$x65C_=IMwuUTU_Rr?ISzfcuc^RU~?dERP}k!fyb)3S+{9Z9rd2dx3L z(}{K;S|~GpcXfTE!o-$?#PnUD&^^aM<6WcE$~;jN?j8l|PSwsT_;IUt?Yc|5etnwP za}=%G=%~xp@6z6KX+uEp=M6%(zpQ$OU3U-lqjm{3*N9yJnrzP%fL#Z=s|3$s_5z3i zs!Sqz5AZtqdS9U#7#tqOJm~mYgIs4mf?<#)N;q@pcQEvqm*IjOsILX57whQ3-9aqK>=y2%~ z%$JSsEKWQFW8JDcWzdzO$h%dMH{u#%{}KTHaCCS8Mb9pAdBDmL(C2^`VG8uCZxLkNe#Iyz~(xlPHn}g=->oQXQANZ7m{*(?Z{H=ZTexHs z3YmSWEic{$HG_WWo_0VhU9$=hK2`k?TA?Bt!?vQhJzu(u`tgTopE6+U$FaM(_9Gl# zK&D$jfs&m1sE#T%q3I@Tl@#WH#}-WlOE||8CWM4vR()fAOVu9!d3e%$+0wQECaJ#s zWTzUfJ~xx8N!GY)Q~rVNpQUjA%}>2t>KE7FjZWKa7c8H^#*85_c^eAKo|d8Df}+FQ z>7M0&*tl0^wDmhtWqk$m>!`0pZh42hoZ)sM+rxqj<~sNp%PdwayuevNBqJ`JE?|wK z?0%;URf~v^Da3=A;sMnM??4}*dx{*;Vg))3VoHe*c7!evGdenmGLCBWZCvYezY>B~ zDf0`wpYB0U<5RuEfLC=wv!I+mhCvk+LNtFIwP_{HV5fxJ#0EPnVa@U{K=mYHM&rt> zlC0lSbvmcG%k|d4AQWlXrE_o{dNS<-9iOVxv(_uApbCFQB2(&$=%>*$sJzu~zYJP_ zH%t=P(}@ocA{d(bsHz>R{qnppu87VtCHsBDj2&^@12bE9g{@T?!Zl_?H9TXWSm`Ps^-#$sZVjtebz#Tj046q>}lL)T>TLJH>^%%bnwVr`XFWT zx?l1^fh!l&#RtL7vSI88_b6JFSzuDsARFCtFLKw`5i2&xfhjBBatl9^HeO2Z2sdf^ z)qRMc+&E{^GpB`Z!Ht0;D|Ab9%qqH3-*&=xj6Nc|VYiBI9-6PB8)Oy->_~dRLR6Fw zGvL-1r+UDgl+TA$S)Uuft5Ru4vx~$Q-t#fK~c9s+q@8WnnJcpG3P=ou!D1i9E5OpLYsQ%XpV z5qM{e4h;=iaf1%QCD)*Ak-Y}3x@D5LO$e4e8%sBBczk1V>83P`R3{sL4J+iv$!2FQ zVuzOI`o^7A&9!@)_BL;`EP?~DokB!m!8kdQN&HX}YfIx>vo%DH(E zb2c-q1Q+jX^K7sD4VOkm`fK#4t^E8vwRFg+7H-eq%%hQg6aOocuLFIOzL3wR@3=!B zzY@hS>nZy9r51efWFmcpxSjO<1L?b<)USWY3UL0}nj0BRa%kF8%BU0Y$q7rA*b@%I zr!Ar#@iSH?CY(Wms86v>oR0l!y7-5u`_Vk1(jo&D_H-`+J~`bAd^=V7#pHDSDi^<` zs-{z4&Y3tJ`%QB9Gayxwu__=GL(r?yJ&kfUY;(|pxGVD=IHF1Oh5Qd)KsgIea0S_J z1)?M!J1c5?wQ2XsPNT zX=&Ai?BX1%KwuM-K?Wn!D#`8u=uWb0chYZ(GVd_))c9 zh()QN{Z*k9Q20_pEZ_n?4oMrHN8waP=<+szoKe@LAxq1{fKrCJ0fn0w=6N(L#o*1l znwg(}YjR;0Nw zb%JTd$YEGY)*i@EeHzHxUD&>d5^3|P=+e(0*&yJuHz zt#!-8PqQi8J__8~B#DKoP9YmM?e=v0u)@=FsbnR9PtJD8nJtVZq#*w<`Ypf?hQ|Z= zWyp3E_)VX65E^gGB2ZXfV0?)gt_$!tN7%RV7sbf=Z9C@t#v*g#`C~jYz~cq=z1rh= z!IIy{`90v`#lRD=zX))ZpxMBP2avaGE;Uw=FGbytyaIWv-F_O#z6csf2IJ8X=;Jpj zXQR$(qure z6z$P&d#YVn4=USr6UyUIyUk49)4Kh$N(oVmyGCAY2JzIFr-ceaU;;@73m6?)Ue8_q*Ty?tM4+C6>?bVrv=w@)zXaDhiAli67x!WK4J}T>4F_ zvoA7Mr;k2%;tCFpJ#rE?>llWyWc>=~$`yANJD1DF#rIDjf1+wFE6B^AfUTxh<2%`u z{9ET2d}W-F0nIRxeILbwlEJ34DR@7QGL^#?X2&}n2F%3U#g0U}| zqNGR2x~q7(=f?8;+$&csbC$@J`S}GmvD+ZX*?2F|jMrql%i|hno5R{U+jR+T)1fUL zWZAWnw9H|v$WE3d+a71%PQTApk|5_XM?%_4-C)yT>MU-HOI~`vQ(7gvDwnUi@4i*{ zld@bUCAbq^KwEax^5XIdHr>E7C-K1oVYGa%JSthSq^YJ#-^f0NJa2sVWL!GPoXxlPxnvsD~uf^1Fw2Cr|SgQcgXIUvLwi>exH?_~2F zEH9n$PAv-t>wQ%L#@&zvE-{L&F#9~#Rc|m5S`M*BkLj_bTy<5=!?lgU4FNA(HeSU% zo#=P3ufA$CREB)DzDCBO1!G`squ=ZFKk6GpH2639>Q@9X)a!kL&=}ee@y0+^{jy-A z*9SAap*l{x6nA-xCUw?X@Avwo4Uaxr?_(3{c^K0MpVw383*1)~sH*jO7n*}Qk>?Ue zEKGBRD3Wd&Zx$n+R$UKguv?OSBh+mOgvnh4wgAY>bZlW-0lS6!i6jw26h)@r2vI-? zpyreQ`Ay`!ykt{szP}m)eHo>oj5#%LvL$T3IYfEp%Y+s%6I{S5&1KQKw5(XJL~*WI z#n;F@mdAnt#vQQP*TjPB)-ls#m_ZbsKiQ(6mmF*82k+LcULsFvlne9QpYR=?}Y-{7H!Xy!;}r8vY=k zLqF1H$blgaRhec@;^zu(cOcb;HZ+0T>vPvzWFQ)^>V)edpg?FK2BTdD; zx_KLs!3!J(U;S#~m-CChyx>;Hf&~ln3l}aZbRdB{iZ?YlZiLh)es@97J$xs?n1r_* zin!Qt-+thTaFFS7L*p0 zU!c5(@*c`r6oEFDiC;GAb5QtZ4Y-?8&zk@*NB#Z@@PnxPCcyQmhbF+NvXyA#|N6Iu z9msvKIW{n87_R16WW+F>YO7W1l$4?@OTkX2?y|bO%G6z{$|8;Fdx|u7++zG;He;$( zriXj){Xd@G(7nLc305nt)QK zEqk>WLN=p?3uVoShL70O)mM)wi!!f>O2T2eQx5mcc_kX|wWn+0-nd|VgIaF2Dn;ti zMR1*DUBnJpVgIe8-2T0Ixtn9hhtZ8qR-fEv^|kL}ZQGWBSKbQwACSD%{sPlvJ(de@ z4R!SB+ra;D+mfxiQo`kc1;54c1COpO^V-v*(qXD(UDzbbYud8ckh(ifb$ghWt+#)V zY3+MRSs}1(g1lyvxMr*FZOZ_bbX^0q)yD1Rb!T&I>v_YFwb&rst{?c2X*FOw^96>A z)|#rdS^+9obBE5@xy_&!4}zLGBP!_!&Jnw4{1%8V36TUp>?l=RQ>D(e_N=tdT^X&m zEb+P0ou!f$z8s#>{PsNK!7Gi&z~5~AE1s*HW1|CxQQjQ;W!x~zHd$k}H2iJWSS8+X zB>m>3X5HXdr8nR=rylEtdo|Qy-3s8j-}b_9v6~<#w}HZaHy^YvXLNaNC;08t;6DPM z0+2PZNp#9>*?dSYqJvP)efS1^h#D040^24yWjK4Q9xH=TTLviP$0$f!wh|wD>x4nA zRt?sYMOy4da3UPzX~x!Bq&JePMp9*Uw~S(q*tCcZy{YA-*f6@S$2O8gEQF^P$%gv- zLDUbGje;+ZYG)s`&runRLlFh;mVa@1u{*`DIev4$yZd2#HYoa`#^ILmPSdOoFd)@& z=1yKm?{Y|mgvuac61rk#spx?~GZ{IJa`Kx)!?IG2o*b=h9KOVrSG*h$DYA> z$Z@e+m6Qg3?{)g#t4$!J?_Hqpz1ajx^t~(ey$elXrM}mv?=9tkM+>*W!`Gn=44zwm z<4GvqjNx?7AYZN4-`K(QH?}bh{Eu*)rAn@-(vV~6QW~O4h~A;7vNGGM3d+i;Qo<`G z>gw=MRZCb=h49gqu(D{|l*hMfn1TqumvPnvLpPxxgs{YNaTtYoq@J4?V;`|}tTL2x zwZmyBYksGcDCJ5Wz1Ar8ab|qTb;ysR+tN3cI;m8GMhS$2lL+-D!Sy->>*RJ>DVKjI z%F0@T>j_@NVQ(~GPf-J|Osk+)xKvkp)MI}LOPNwWEAMxr$Bi{XQ`Tr6P4TuVYh|h3 zEp64%fpX0spK1(bV+#cHO62#9F1Th57m}kA36!@fUYFD^lfYV2220gcV?P&Kqm;Og z7*S=dy^tDE)*@GPy`1L-@R(?gwJU3t@`=R9K#VG067-^(NrE+8kkIXlS6Q zoE^H!lajPwSt|`n9k&|2Y|7&ibKO{wLk z!ppY|kGkN{R5%H<1$#230p5H$gR%X}N^I7Y5-cwJM^!`sCW7mAm*SEUEAm#&XB#<)>^M#ndl&lKCP)D_fSrpFv1WcNN-5xVlQ)qYq;V!>s7PvNIrZyDlXyO%sE~NR zm26W|>Mqx&sSbNx@ZJaB&PdKS`h3c|qFo5c2V_Ocvo6y~w8gZ!m9FYvH3gv2DB)i%87Gmjvwu;p< zbV;4EG}GE%A+3HrGJ7>LTN&1kMAbv#B}Fo}z8=Xy8Y-i-v`LH1(<1p=q$r+l%!4A; z`xZEnqAATXIAv(zXqu<`vZ!L_WJKClJ#9w0rS1T)%-@<+)E!D z=68j7$UTJg$iFefL*E*X?he^|wcR01=Z|dIHy!(P-xHwcJczHkNqdetNO{5*?ANb9 zjhzYqe0d2QNi4u-OE%+WfY@ZEMZ-gO#F}Kqr;D(NHNUNnKG@}M2|u0Sv>4mKiJgT^ zdwgu@`Bx^sHSxuHLK|!6H$7-a#tvwO*^Co_&5+DSY|-!uJ2s|LCY;hGp;=48kGamV zt*q3tlI%ByiF4z4wRT*n71e^bm=JBX*&kCa9bYk2p`*!YL1oc4;qk4e zeQ*pue6a7h1MJ8lT6mX+EoXQKtZ>Gs7~L2{YzSe!i4AYp;96O8tKnmkwks7(=|&p0 zDx)eIZ-8HOb770oNda&V;)r_#?a(lwM;7Ck#7134KdDNa`R{U^eyC%lrQ`RbKv|6= zgfe}gp{lwu#>nx750auW-#eR^!}m^A$t4>EVU3wOz$dE9t-2{fY|VxPM01B)K?uI@d;m3UI>*ioRv&hDI$g8QfT=<&L)ydV%RU>r@cTw4G}<6TI?S&R}q?v(|KoZZWF@2bg~c!%pe}JcJZSOP{KLqqhj%m^&!SF!gGpEGd#3_t0@Lu> zlmxPPa@F@{aEY2p64^;6J0z}70^CFZlz?OF&~g2vYp_Stj7A7!+&p-p6O^k@&^UOG zn_s7iaVR8-jy@WP3;2+w*y+PKoJBo34n)K_q?nvE4u^=7LZ>e|4!qLRaSG$mPiWGj z#hfSkI9S1+7>84Q9DWM~#SZwjj@TfNo+k(gL?V35+z%$+zm{+x4X|=2SgpnyuyzVk z)^tAA`S*8tNWvL~hK~U)R)tpe_F}jo2u8TTg%@Z25-JH_d_caq_oGR^$R$CTfF7R4 zXCV3F6nya~)RVp-B7AWX6Awi4MLThlF9_l>$tx`#N8yVeLX#FPb~i*|%TUUgFOG6w z{G5Mq!WT#3i{qv*9w8hMpY+8R$=VV=^%$n8;^)4Qz&h@WdjK_H3Xb{0O@_9A1HPyM z3GJ8Q#eFdc6=>UnxHv|>So|mWqB(XW1jeT+W@Qh#qZ?L}J9^-b!>A|SK}5LY6y`RF z2+a8y=jjNI0!-0k+#P!$&qL!F+;PHmM;+ln zPr73Y@=6yzvSoX1OSlKa-kL#+gw=SSYsOX0qNytTSj8M2-WK8t%bnOtz#w~_o1ikS ztl6jl5vTUPP77_0_ONlj*G}SqK0d|QDN6RMCZI2lp|euE!b6$gfDaSo*QN>(vHB>C zQn!TrGwF;0G}^)0r*?;X<;*EUceo#W3H`Oqao%j`i8}35x*&3WSGbqDO8cLzOzi7x z_1AI)Y{RX_VXRnhW5?JT?p-uzE;f)^Q=;L1`xl5a3u_ax-fgn}bd0rs(HsZuH79XZ zn_S;XaJ{}LJXHGHqEfv3apYRsb{ZRH1IOkR(|mn=_>b@?`3zlgYq1hccfDhX0(u&B z=w1SvjVY+}fG#tM2?yhly+GSq*uYsxW8LQ&4LJ*k*~6ICqGV*kNatRodaOR6~V z9hTH_;5n)$l>7r2RAEnsRp8%6_hV0*Gj++f$0dwjnJlf_7P^Psh?S2?8>LtkDUPki zlY9qH;Xu3;5Qh41>$e2mp^}T9y?}nch=Lu>pZ$T2-^W{mXux>^{X3c+aWVG6{m|jW z{k&ChBuZfcMm7&^%tae;Z}vjq7U6&Gz?TDm4ERMT8Ng@UY3hVZR*nqyMZB@%vR`4R zS%<@$gE)UG!pF-8I7ctX;hqEkXxb0jc6>OWK*@n24wNC3RPfVzRWHs^OK=!`kPe+u z7>>9Qkjns$E)f0-_+7yDg7*Z<63~`F-wDt%pl1^bnqb%+ zu_w{_r%^&Ezd%_D=Nv;P`cdeAz4d@wQ76B?h4)*4hw;iF`|; zXrbGIm;9Do0{^98;&x#2{^RFXW6FSbIjGA}2tTIb~VL{omt_QL_$``CUYscGwdjkUf?^V(z+ zXfJ_w^*+{sglso2me%3YUZt*>B>(K;%MaZ!jJ6D>nx%1CE? zbYv)g9(UM*WJBT>_K_$Ii^9boQ8+CMCq$vQM-*cpi>Zbvo<4ngV7PBYv_MzUWU`+8XKIlYe!jtMF=;>E?;I;o;{USXlm7KfeM`WbR`U7M^r}z#pn? zqAQm0MhELC4go`g+IDWhr0RBki+ z2F{L7XTqz=c)wd-y3CAuL?Zn|{!=6I3;S3R=-Cr4NmrWpn|ZL_YX(Bg3n)yLffeS9jM z8W=o1z=p*%D2Vsq-H#zNFbI981~FQLsGT!wm?*LH=LgBXBNrKF3>!Mx%SJ^jW&;Mi zKOUbh2(M227B* zuEPZ37g;Om8Yv8vKtLSKzJUf2stG+&@VMClD{WkP7tL#>6Irk)qz>dHSrXSvFJ-~# z9?#AoU;T*~o>#E)4VFJHzjcun&2X;`sQ-Y%tE) z(ZS22tk8H$co73NdXk+QWj%Np;K%T?mqe=}&Okmq!rmD, 3-dec-92. diff --git a/hacks/slidescreen.man b/hacks/slidescreen.man new file mode 100755 index 00000000..762d22a5 --- /dev/null +++ b/hacks/slidescreen.man @@ -0,0 +1,61 @@ +.TH XScreenSaver 1 "3-dec-92" "X Version 11" +.SH NAME +slidescreen - permute the screen image like an 8-puzzle +.SH SYNOPSIS +.B slidescreen +[\-display \fIhost:display.screen\fP] [\-background \fIcolor\fP] [\-grid-size \fIpixels\fP] [\-ibw \fIpixels\fP] [\-increment \fIpixels\fP] [\-delay \fIusecs\fP] [\-delay2 \fIusecs\fP] [\-window] [\-root] +.SH DESCRIPTION +The \fIslidescreen\fP program takes an image of the screen, divides it into +a grid, deletes a random square of that grid, and then randomly slides +one of the neighbors of this "hole" into the hole (and repeat.) +.SH OPTIONS +.I slidescreen +accepts the following options: +.TP 8 +.B \-window +Draw on a newly-created window. This is the default. +.TP 8 +.B \-root +Draw on the root window. +.TP 8 +.B \-grid-size pixels +The size of the grid cells. Default 70 pixels. +.TP 8 +.B \-ibw pixels +The size of the "gutter" between grid cells. Default 1 pixel. +.TP 8 +.B \-increment pixels +How many pixels by which a piece should be moved when sliding to a new +location. Default 10 pixels. +.TP 8 +.B \-delay microseconds +How much of a delay should be introduced between steps of the animation of +the motion of each segment. Default 50000, which is 0.05 seconds. This +is closely related to the \fI\-increment\fP parameter. +.TP 8 +.B \-delay microseconds +How much of a delay should be introduced between the end of the motion of +one segment and the beginning of the motion of another. Default 1000000, +which isone second. +.SH ENVIRONMENT +.PP +.TP 8 +.B DISPLAY +to get the default host and display number. +.TP 8 +.B XENVIRONMENT +to get the name of a resource file that overrides the global resources +stored in the RESOURCE_MANAGER property. +.SH SEE ALSO +.BR X (1), +.BR xscreensaver (1) +.SH COPYRIGHT +Copyright \(co 1992 by Jamie Zawinski. Permission to use, copy, modify, +distribute, and sell this software and its documentation for any purpose is +hereby granted without fee, provided that the above copyright notice appear +in all copies and that both that copyright notice and this permission notice +appear in supporting documentation. No representations are made about the +suitability of this software for any purpose. It is provided "as is" without +express or implied warranty. +.SH AUTHOR +Jamie Zawinski , 3-dec-92. diff --git a/hacks/spline.h b/hacks/spline.h new file mode 100755 index 00000000..dd235866 --- /dev/null +++ b/hacks/spline.h @@ -0,0 +1,63 @@ +/* + * 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_ + +#include + +#if __STDC__ +# define P(x)x +#else +# define P(x)() +#endif + +#ifdef VMS +typedef unsigned int u_int; +#endif + +typedef struct _spline +{ + /* input */ + u_int n_controls; + double* control_x; + double* control_y; + + /* output */ + u_int n_points; + XPoint* points; + u_int allocated_points; +} spline; + +spline* make_spline P((u_int size)); +void compute_spline P((spline* s)); +void compute_closed_spline P((spline* s)); +void just_fill_spline P((spline* s)); +void append_spline_points P((spline* s1, spline* s2)); +void spline_bounding_box P((spline* s, XRectangle* rectangle_out)); + +#undef P +#endif /* _SPLINE_H_ */ diff --git a/hacks/vaxdeccobjs.zip b/hacks/vaxdeccobjs.zip new file mode 100755 index 0000000000000000000000000000000000000000..1cfa707f9eae7504834b562b38ddcfc5f1784508 GIT binary patch literal 66745 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 + * + * 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 + */ + +#ifndef _VROOT_H_ +#define _VROOT_H_ + +#if !defined(lint) && !defined(SABER) +static char vroot_rcsid[] = "$Id: vroot.h,v 1.1 1994/08/25 22:04:24 jwz Exp $"; +#endif + +#include +#include +#include + +static Window +VirtualRootWindowOfScreen(screen) + Screen *screen; +{ + 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; + + 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; + Window *newRoot = (Window *)0; + + if (XGetWindowProperty(dpy, children[i], + __SWM_VROOT, 0, 1, False, XA_WINDOW, + &actual_type, &actual_format, + &nitems, &bytesafter, + (unsigned char **) &newRoot) == Success + && newRoot) { + root = *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_ */ diff --git a/hacks/xlock.h b/hacks/xlock.h new file mode 100755 index 00000000..a53a99a9 --- /dev/null +++ b/hacks/xlock.h @@ -0,0 +1,146 @@ +/* +** Helpful definitions for porting xlock modes to xscreensaver. +** by Charles Hannum, mycroft@ai.mit.edu +** +** for xlock 2.3 and xscreensaver 1.2, 28AUG92 +** +** +** To use, just copy the appropriate file from xlock, add a target +** for it in the Imakefile, and do the following: +** +** 1) If you include math.h, make sure it is before xlock.h. +** 2) Make sure the first thing you do in initfoo() is to call +** XGetWindowAttributes. This is what actually sets up the +** colormap and whatnot. +** 3) Add an appropriate PROGRAM() line at the end of the .c file. +** The information you need for this comes from xlock's file +** resource.c. +** +** That's about all there is to it. +** +** As an added bonus, if you put an empty definition of PROGRAM() in +** xlock's xlock.h, you can now use the code with either xlock or +** xscreensaver. +** +** +** If you make any improvements to this code, please send them to me! +** It could certainly use some more work. +*/ + +#include "screenhack.h" + +#define MAXSCREENS 1 + +static GC gc; +static unsigned long *pixels = 0, fg_pixel, bg_pixel; +static int npixels; +static Colormap cmap; + +static int batchcount; +static unsigned int delay; +static double saturation; + +typedef struct { + GC gc; + int npixels; + u_long *pixels; +} perscreen; + +static perscreen Scr[MAXSCREENS]; +static Display *dsp; + +static int screen = 0; + +static void +My_XGetWindowAttributes (dpy, win, xgwa) + Display *dpy; + Window win; + XWindowAttributes *xgwa; +{ + XGetWindowAttributes (dpy, win, xgwa); + + if (! pixels) { + XGCValues gcv; + XColor color; + int n; + int i, shift; + + cmap = xgwa->colormap; + + i = get_integer_resource ("ncolors", "Integer"); + if (i <= 2) i = 2, mono_p = True; + shift = 360 / i; + pixels = (unsigned long *) calloc (i, sizeof (unsigned long)); + fg_pixel = get_pixel_resource ("foreground", "Foreground", dpy, cmap); + bg_pixel = get_pixel_resource ("background", "Background", dpy, cmap); + if (! mono_p) { + for (npixels = 0; npixels < i; npixels++) { + hsv_to_rgb ((360*npixels)/i, saturation, 1.0, &color.red, &color.green, &color.blue); + if (! XAllocColor (dpy, cmap, &color)) + break; + pixels[npixels] = color.pixel; + } + } + n = get_integer_resource ("delay", "Usecs"); + if (n >= 0) delay = n; + n = get_integer_resource ("count", "Integer"); + if (n > 0) batchcount = n; + + gcv.foreground = fg_pixel; + gcv.background = bg_pixel; + gc = XCreateGC (dpy, win, GCForeground|GCBackground, &gcv); + + XClearWindow (dpy, win); + + Scr[screen].gc = gc; + Scr[screen].npixels = npixels; + Scr[screen].pixels = pixels; + } +} + +#define XGetWindowAttributes(a,b,c) My_XGetWindowAttributes(a,b,c) + +#undef BlackPixel +#define BlackPixel(a,b) bg_pixel +#undef WhitePixel +#define WhitePixel(a,b) fg_pixel +#define mono mono_p + +#define seconds() time((time_t*)0) + +char *defaults[] = { + "*background: black", + "*foreground: white", + "*ncolors: 64", + "*delay: -1", + 0 +}; + +XrmOptionDescRec options[] = { + {"-count", ".count", XrmoptionSepArg, 0}, + {"-ncolors", ".ncolors", XrmoptionSepArg, 0}, + {"-delay", ".delay", XrmoptionSepArg, 0}, +}; +int options_size = (sizeof (options) / sizeof (options[0])); + +#define PROGRAM(Y,Z,D,B,S) \ +char *progclass = Y; \ + \ +void screenhack (dpy, window) \ + Display *dpy; \ + Window window; \ +{ \ + batchcount = B; \ + delay = D; \ + saturation = S; \ + dsp = dpy; \ + \ + while (1) { \ + init##Z (window); \ + for (;;) { \ + draw##Z (window); \ + XSync (dpy, True); \ + if (delay) usleep (delay); \ + } \ + } \ +} diff --git a/hacks/xroger-hack.c b/hacks/xroger-hack.c new file mode 100755 index 00000000..72bd2d3c --- /dev/null +++ b/hacks/xroger-hack.c @@ -0,0 +1,103 @@ +/* xscreensaver, Copyright (c) 1991-1994 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 "screenhack.h" + +char *progclass = "XRoger"; + +char *defaults [] = { + "XRoger.background: black", + "XRoger.foreground: red", + "*delay: 5", + 0 +}; + +XrmOptionDescRec options [] = { + { "-delay", ".delay", XrmoptionSepArg, 0 } +}; +int options_size = (sizeof (options) / sizeof (options[0])); + +#if __STDC__ +extern void skull (Display *, Window, GC, GC, int, int, int, int); +#endif + +void +screenhack (dpy, window) + Display *dpy; + Window window; +{ + double delta = 0.005; + XGCValues gcv; + Colormap cmap; + GC draw_gc, erase_gc; + unsigned int fg; + XColor color, color2, color3; + int delay = get_integer_resource ("delay", "Integer"); + XWindowAttributes xgwa; + XGetWindowAttributes (dpy, window, &xgwa); + cmap = xgwa.colormap; + gcv.foreground = get_pixel_resource ("background", "Background", dpy, cmap); + erase_gc = XCreateGC (dpy, window, GCForeground, &gcv); + fg = get_pixel_resource ("foreground", "Foreground", dpy, cmap); + if (fg == gcv.foreground) + fg = ((gcv.foreground == WhitePixel (dpy, DefaultScreen (dpy))) + ? BlackPixel (dpy, DefaultScreen (dpy)) + : WhitePixel (dpy, DefaultScreen (dpy))); + gcv.foreground = fg; + draw_gc = XCreateGC (dpy, window, GCForeground, &gcv); + color.pixel = gcv.foreground; + XQueryColor (dpy, cmap, &color); + while (1) + { + int w, h, ww, hh, x, y; + time_t start_time; + XWindowAttributes xgwa; + XGetWindowAttributes (dpy, window, &xgwa); + w = xgwa.width; + h = xgwa.height; + + ww = 100 + random () % (w - 100); + hh = 100 + random () % (h - 100); + if (ww < 10) ww = 50; + if (hh < 10) hh = 50; + if (ww < hh) hh = ww; + else ww = hh; + x = random () % (w - ww); + y = random () % (h - hh); + XClearWindow (dpy, window); + skull (dpy, window, draw_gc, erase_gc, x, y, ww, hh); + XSync (dpy, True); + start_time = time ((time_t *) 0); + if (mono_p) + sleep (delay); + else + while (start_time + delay > time ((time_t *) 0)) + { + int h; + double s, v; + color2 = color; + rgb_to_hsv (color2.red, color2.green, color2.blue, &h, &s, &v); + v += delta; + if (v >= 1.0) v = 1.0, delta = -delta; + if (v <= 0.7) v = 0.7, delta = -delta; + hsv_to_rgb (h, s, v, &color2.red, &color2.green, &color2.blue); + color3 = color2; + if (XAllocColor (dpy, cmap, &color3)) + { + XSetForeground (dpy, draw_gc, color3.pixel); + color2.pixel = color3.pixel; + XFreeColors (dpy, cmap, &color.pixel, 1, 0); + } + color = color2; + usleep (20000); + } + } +} diff --git a/hacks/xroger.exe_axp b/hacks/xroger.exe_axp new file mode 100755 index 0000000000000000000000000000000000000000..7139a2d5f1d769e17c0957dfb54046023a003b08 GIT binary patch literal 26624 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 O`kt0D0>Xde>wf~a6~KT1 literal 0 HcmV?d00001 diff --git a/hacks/xroger.exe_vax b/hacks/xroger.exe_vax new file mode 100755 index 0000000000000000000000000000000000000000..089b292c262f60236bfd4c8faf73d7d77889b894 GIT binary patch literal 12800 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 literal 0 HcmV?d00001 diff --git a/hacks/xroger.hlp b/hacks/xroger.hlp new file mode 100755 index 00000000..71a7e44c --- /dev/null +++ b/hacks/xroger.hlp @@ -0,0 +1,44 @@ +1 XROGER +Throbbing X logo, of a sort + +SYNOPSIS + + $ xroger [-display host:display.screen] [-foreground color] + [-background color] [-window] [-root] [-mono] + +2 DESCRIPTION +The xroger program displays a replacement for the X logo with a more +accurate Look and Feel. + +2 OPTIONS +xroger accepts the following options: + + -window +Draw on a newly-created window. This is the default. + + -root +Draw on the root window. + + -mono +If on a color display, pretend we're on a monochrome display. + +2 ENVIRONMENT + + DISPLAY +to get the default host and display number. + + XENVIRONMENT +to get the name of a resource file that overrides the global resources +stored in the RESOURCE_MANAGER property. + +2 COPYRIGHT +Copyright (co 1992, 1993 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 fnord 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 fnord this software for any purpose. It is provided "as +is" without express or fnord implied warranty. + +2 AUTHOR +Jamie Zawinski , 13-aug-92. diff --git a/hacks/xroger.man b/hacks/xroger.man new file mode 100755 index 00000000..96a1d6e0 --- /dev/null +++ b/hacks/xroger.man @@ -0,0 +1,43 @@ +.TH XScreenSaver 1 "22-mar-93" "X Version 11" +.SH NAME +xroger - throbbing X logo, of a sort +.SH SYNOPSIS +.B xroger +[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] +.SH DESCRIPTION +The \fIxroger\fP program displays a replacement for the X logo with a more +accurate Look and Feel. +.SH OPTIONS +.I xroger +accepts the following options: +.TP 8 +.B \-window +Draw on a newly-created window. This is the default. +.TP 8 +.B \-root +Draw on the root window. +.TP 8 +.B \-mono +If on a color display, pretend we're on a monochrome display. +.SH ENVIRONMENT +.PP +.TP 8 +.B DISPLAY +to get the default host and display number. +.TP 8 +.B XENVIRONMENT +to get the name of a resource file that overrides the global resources +stored in the RESOURCE_MANAGER property. +.SH SEE ALSO +.BR X (1), +.BR xscreensaver (1) +.SH COPYRIGHT +Copyright \(co 1992, 1993 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 fnord 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 fnord this software for any purpose. It is provided "as +is" without express or fnord implied warranty. +.SH AUTHOR +Jamie Zawinski , 13-aug-92. diff --git a/imakefile b/imakefile new file mode 100755 index 00000000..d7ec7c62 --- /dev/null +++ b/imakefile @@ -0,0 +1,53 @@ +/* + * Imakefile file for xscreensaver, Copyright (c) 1991-1994 Jamie Zawinski. + * + * You should not need to edit this file; edit config.h instead. + * + */ + +#include "config.h" + + TARFILES = README Imakefile config.h screenblank.txt + TAR = tar + COMPRESS = compress + COMPRESS_EXT = Z +/**/# COMPRESS = gzip --verbose --best +/**/# COMPRESS_EXT = gz + +all:: utils/Makefile driver/Makefile hacks/Makefile + cd utils ; $(MAKE) $@ CC="$(CC)" CCOPTIONS="$(CCOPTIONS)" CDEBUGFLAGS="$(CDEBUGFLAGS)" + cd driver ; $(MAKE) $@ CC="$(CC)" CCOPTIONS="$(CCOPTIONS)" CDEBUGFLAGS="$(CDEBUGFLAGS)" + cd hacks ; $(MAKE) $@ CC="$(CC)" CCOPTIONS="$(CCOPTIONS)" CDEBUGFLAGS="$(CDEBUGFLAGS)" + +clean install install.man:: utils/Makefile driver/Makefile hacks/Makefile + cd utils ; $(MAKE) $@ BINDIR=$(BINDIR) XAPPLOADDIR=$(XAPPLOADDIR) + cd driver ; $(MAKE) $@ BINDIR=$(BINDIR) XAPPLOADDIR=$(XAPPLOADDIR) + cd hacks ; $(MAKE) $@ BINDIR=$(BINDIR) XAPPLOADDIR=$(XAPPLOADDIR) + +Makefiles:: utils/Makefile driver/Makefile hacks/Makefile + +utils/Makefile: utils/Imakefile config.h + cd utils ; $(IMAKE_CMD) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT_DIR)/utils +driver/Makefile: driver/Imakefile config.h + cd driver ; $(IMAKE_CMD) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT_DIR)/driver +hacks/Makefile: hacks/Imakefile config.h + cd hacks ; $(IMAKE_CMD) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT_DIR)/hacks + +/* This really makes me sick... */ +tar: utils/Makefile driver/Makefile hacks/Makefile + @NAME=`sed -n \ + 's/[^0-9]*\([0-9]\.[0-9][0-9]*\).*/xscreensaver-\1/p' utils/version.h` ; \ + rm -f $$NAME ; ln -s . $$NAME ; \ + FILES= ; \ + for subdir in driver utils hacks ; do \ + cd $$subdir ; \ + FILES="$$FILES `make echo_tarfiles \ + | grep -v '^make\[' \ + | sed \"s|^|$$subdir/|g;s| | $$subdir/|g\" \ + ` "; \ + cd .. ; done ; \ + echo creating tar file $${NAME}.tar.$(COMPRESS_EXT)... ; \ + $(TAR) -vchf - \ + `echo $(TARFILES) $$FILES | sed "s|^|$$NAME/|g; s| | $$NAME/|g" ` \ + | $(COMPRESS) > $${NAME}.tar.$(COMPRESS_EXT) ; \ + rm $$NAME diff --git a/readme b/readme new file mode 100755 index 00000000..927c9a84 --- /dev/null +++ b/readme @@ -0,0 +1,119 @@ + +To build: + + - read the comments in `config.h' and edit it as appropriate + - xmkmf ; make + - make install install.man + +The xscreensaver program waits until the keyboard and mouse have been idle +for a period, and then runs a graphics demo chosen at random. It turns off +as soon as there is any mouse or keyboard activity. + +The purpose of xscreensaver is to display pretty pictures on your screen +when it is not in use, in keeping with the philosophy that unattended +monitors should always be doing something interesting, just like they do +in the movies. + +However, xscreensaver can also be used as a screen locker, to prevent +others from using your terminal while your are away. + +The benefit that this program has over the combination of the xlock and +xautolock programs is the ease with which new graphics hacks can be +installed: you don't need to recompile this program to add a new display +mode, you just change some resource settings. Any program which can be +invoked in such a way that it draws on the root window of the screen can +now be used as a screensaver without modification. The programs that +are being run as screensavers don't need to have any special knowledge +about what it means to be a screensaver. + +The XIdle extension will be used if you have it (win win.) + +Unfortunately, locking doesn't work if you don't have Motif. + +Also included are several graphics hacks for use as screensavers. There's +nothing magic about these: they're just programs that draw on the root +window, which are pointed at by the screensaver's default resource settings. + + qix - My own implementation of this, with many more options + than you would have thought qix could have. + helix - Generates spirally "stringart" patterns. + rorschach - Random inkblot patterns. + attraction - A bouncing ball demo, or a qix-like demo, or a wild + color-cycling thing, with some odd rules. + greynetic - Random colored/stippled rectangles. + rocks - Flying through an asteroid field. + blitspin - Rotate a bitmap using bitblts. + imsmap - Generates random maps or cloud formations. + hypercube - 2d projection of a hypercube rotating on all four axes. + slidescreen - Divides the screen into a grid and plays a 16-puzzle on it. + decayscreen - A melting effect. + halo - Random circular patterns. + pyro - Fireworks. Looks a lot like the version in xlock. + hopalong - Fractals. I snarfed this code from xlock. + flame - Fractals. Also from xlock. + noseguy - A guy with a big nose wanders around the screen saying + things. I snarfed this code from xnlock. + maze - This is the X maze demo modified to take a -root option + so that it works with xscreensaver. + +All of these will pop up their own window unless given that -root option. +See their man pages for more details. + +Other reasonable things to use as screensavers, if you have them, are + + xdaliclock -root -builtin2 - melting digital clock + xswarm -r 2>&- - swimming sperm + xwave -root - random 3d graphs + xbouncebits - bounce arbitrary bitmaps around + ico -r - it's dull, but it's there + xv -root file.gif -quit - they don't all have to animate! + xsplinefun - bouncing splines + kaleid -root - qix-like kaleidescope patterns + xfishtank -c black -d -r 1 - fish (use version 2.0 or later) + +You can get all of these from the contrib directory on ftp.x.org. If you +know of (or write) any other interesting programs that can be used as +screensavers, please let me know! + +This program should be updated to take advantage of the new R6 `screensaver' +server extension instead of XIdle. I didn't have time to do this before the +deadline for the R6 contrib tape, but by the time you read this, maybe it's +done - check a later release. + +The latest version of xscreensaver is on FTP.X.ORG. + + -- Jamie Zawinski + + +Changes since 1.23: Fixed some private-colormap oddities in slidescreen, + decayscreen, and xroger. Fixed apparent conservation- + of-mass problem in pyro; made the shrapnel round. +Changes since 1.22: Minor tweaks for IRIX5; fixed locking race condition. +Changes since 1.21: Minor tweaks for X11R6. + Fixes for non-default visuals. +Changes since 1.20: Fixed bug in color blitspin; added default image. + Added diagnostics to noseguy. Fixed off-by-one + error in flame. Added some missing casts. +Changes since 1.18: Added `flame' hack. + Fixed a minor Motif dialog text field bug. + Fixed yet another XPointer-not-defined-in-R4 bug. +Changes since 1.17: 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. +Changes since 1.16: Added `halo' hack. +Changes since 1.15: Portability fixes. +Changes since 1.14: 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. +Changes since 1.13: Added `orbit' option to `attraction' hack. + Added `lock-timeout' option. + Cleaned up options of `maze' hack. +Changes since 1.8: Added demo mode, and locking. + Added `maze' hack. + Added `norotate' option to `rocks' hack. diff --git a/screenblank.txt b/screenblank.txt new file mode 100755 index 00000000..17621585 --- /dev/null +++ b/screenblank.txt @@ -0,0 +1,46 @@ +From mrapple@quack.kfu.com Mon Apr 26 18:31:07 1993 +Newsgroups: alt.hackers +From: mrapple@quack.kfu.com (Nick Sayer) +Subject: screenblank and xautolock living in harmony +Organization: The Duck Pond public unix: +1 408 249 9630, log in as 'guest'. +Date: 23 Apr 1993 19:26:57 UTC + + +I have a Sun and use xinit to start X. This presented a problem. +If I use xautolock or xscreensaver to save the screen, then after +a period of inactivity screenblank would turn the video off despite +'xset s off'. If I didn't run screenblank, then who would take care of +the display when X wasn't running? + +The hack that saved the day was to include this in .xinitrc: + +( + +while true ; do +sleep 360 +touch /dev/console +done + +) & +killblank=$! + +[start up all the clients, etc, etc. Wait for the window manager +to die, then ] + +kill $killblank + +The result is that screenblank is kept safely out of the way when X +is running and left to do its job otherwise. + +Yes, I know using XDM would solve this problem. + +No, I'm probably not the first to think of this. + +You're welcome. + +-- +Nick Sayer | "Dear Sexy Nickers. I don't half fancy +N6QQQ @ N0ARY.#NOCAL.CA.USA.NOAM | you. Meet me at the lift at 5:30 and ++1 408 249 9630, log in as 'guest' | we'll get it together." +PGP 2.2 public key via finger | -- Mr. Lucas + diff --git a/setup.com b/setup.com new file mode 100755 index 0000000000000000000000000000000000000000..fed15d37fdfbb1b7a777f0bcd8f6c9dc5f40a63a GIT binary patch literal 970 zcmZ{j!B5*T6o-97n#2X|y6sUi6@tov-6r*bC=!T?O06`35C_+B8jIM@Y!@~A>-TIo zV6!c!_RE)_e=mLgMv6nYx6E*^EPdeyCQ$KODB*-wplf)cM(B-&+2s$gy@!TEE}T)VRL7&`!?Kv&EN@3AWH1b%5!KVW zsD$CnY11E{kODKPbB3}qRQW!gLNWHL8AtB%5n8KOINJ#Yc%|0B9r=n@#To5w8757w z$O8_o>Xu6Gqwq?-z==O^ZFsLZwqm&vIb!k|t%kNbrsS6Ae)@*DV!IR4a{?zLZ|DwP zwSM1Z;J!=Kcigbe$~VqZ22KDiA+4lcJS?>$_iZKpJq(@Ycz%fYm9~7n=|e=Cu;XFk zt~dXj*z-@A@#}ToyesnX=8b00HkQmf1RmbJ(Z;f-q^!vkB1cU8FKt^i&y!v8f>{J&`^9&bPt=`2!tu9^U`} literal 0 HcmV?d00001 diff --git a/utils/ad2c b/utils/ad2c new file mode 100755 index 00000000..1435e554 --- /dev/null +++ b/utils/ad2c @@ -0,0 +1,38 @@ +#!/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. +# + +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' "$@" diff --git a/utils/compile.com b/utils/compile.com new file mode 100755 index 0000000000000000000000000000000000000000..cb3c178ad7793eced84c7d9f05cf9c5dcb4ff7e5 GIT binary patch literal 330 zcmZvXJr9B~5Qg~?e#WH|1~sPa8V4u`k|2;)jH_UY7($bR1OMKl12H(<@;tfs?wx1` zy7L^>ZQYGg7OA|+b~jO+5YqwI58-e*G2~hfU}FC8l@eS18jGT8xIAQ!o80JY`eX8 u>n@EnV~JF4Gm{*>nxd?+C{xw{LwkZYSftNs$M3x44L2*1i7Nl{z4itmu2!1> literal 0 HcmV?d00001 diff --git a/utils/compile_axp.com b/utils/compile_axp.com new file mode 100755 index 0000000000000000000000000000000000000000..d1a439d092471afd8ab100b56ed243a264bc74ee GIT binary patch literal 422 zcma*j%?g4*5C`ymi=xv87JackKzPt`G+|TOP4O0K8yKQd20ea?T{^^e8JL+L%%7PP zg94Z?b|n_*1({`Y-t}G(qLuC?^=uazY_!f7wj)6xh74v}y^|>ever6*GD-xX?DRsb zWz4(S4D>RQ95Mb!W+L)YFj)S+?hK!j2N8sRpL9%&DXq%fEbfXv+p>DFrpk|}*KP9I ad{60$HTiYa@6M`HtupJTXzI%_-;y^KdT$Q^ literal 0 HcmV?d00001 diff --git a/utils/compile_decc.com b/utils/compile_decc.com new file mode 100755 index 0000000000000000000000000000000000000000..274a72529669813db0258407341eeaceb5d8bf62 GIT binary patch literal 446 zcma*j-3o#*6bJCVMMO6%EbN2%03o6CXo9J172ZY8MTR&qd;cbN6_ni!&i+5nIok{w zm{Q9FeWVQhFteQ~(zPGPU>|oJ`;G^MZhksb!__29Rav*PvBmY=EGBatFvsPT0mOu& z>CX<`q%A*cx9oKccyeGAxYlN`=4qs#LTJA{@CYFNM`kPufDt + * + * 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 __STDC__ +# include +#endif + +#include +#include +#include + +#if __STDC__ +# define P(x)x +#else +# define P(x)() +#endif + +extern int get_visual_class P((Display *, Visual *)); +extern void screenhack_usleep P((int)); +#define usleep screenhack_usleep + +#define MAX_COLORS 4096 +static XColor orig_colors [MAX_COLORS]; +static XColor current_colors [MAX_COLORS]; +static int ncolors; + +Colormap +copy_colormap (dpy, cmap, into_cmap) + Display *dpy; + Colormap cmap, into_cmap; +{ + int i; + Screen *screen = DefaultScreenOfDisplay (dpy); + Visual *visual = DefaultVisualOfScreen (screen); + Window window = RootWindowOfScreen (screen); + int vclass = get_visual_class (dpy, visual); + + ncolors = CellsOfScreen (screen); + + /* If this is a colormap on a mono visual, or one with insanely many + color cells, bug out. */ + if (ncolors <= 2 || ncolors > MAX_COLORS) + return 0; + /* If this is a non-writable visual, bug out. */ + if (vclass == StaticGray || vclass == StaticColor || vclass == TrueColor) + return 0; + + if (! into_cmap) + into_cmap = XCreateColormap (dpy, window, visual, AllocAll); + if (! cmap) + cmap = DefaultColormap (dpy, DefaultScreen (dpy)); + for (i = 0; i < ncolors; i++) + orig_colors [i].pixel = i; + XQueryColors (dpy, cmap, orig_colors, ncolors); + XStoreColors (dpy, into_cmap, orig_colors, ncolors); + return into_cmap; +} + +void +blacken_colormap (dpy, cmap) + Display *dpy; + Colormap cmap; +{ + int i; + for (i = 0; i < ncolors; i++) + { + current_colors [i].pixel = i; + current_colors [i].red = current_colors [i].green = + current_colors [i].blue = 0; + } + XStoreColors (dpy, cmap, current_colors, ncolors); +} + + +void +fade_colormap (dpy, cmap, cmap2, seconds, ticks, out_p) + Display *dpy; + Colormap cmap, cmap2; + int seconds, ticks; + Bool out_p; +{ + int i; + int steps = seconds * ticks; + XEvent dummy_event; + + if (! cmap2) + return; + + for (i = 0; i < ncolors; i++) + orig_colors [i].pixel = i; + XQueryColors (dpy, cmap, orig_colors, ncolors); + memcpy (current_colors, orig_colors, ncolors * sizeof (XColor)); + + for (i = (out_p ? steps : 0); + (out_p ? i > 0 : i < steps); + (out_p ? i-- : i++)) + { + int j; + for (j = 0; j < ncolors; j++) + { + current_colors[j].red = orig_colors[j].red * i / steps; + current_colors[j].green = orig_colors[j].green * i / steps; + current_colors[j].blue = orig_colors[j].blue * i / steps; + } + XStoreColors (dpy, cmap2, current_colors, ncolors); + XSync (dpy, False); + + /* If there is user activity, bug out. + 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 | KeyReleaseMask | + ButtonPressMask | ButtonReleaseMask | + PointerMotionMask), + &dummy_event)) + { + XPutBackEvent (dpy, &dummy_event); + return; + } + + usleep (1000000 / (ticks * 2)); /* the 2 is a hack... */ + } +} + +#if 0 + + +char *progclass = "foo"; + +char *defaults [] = { + 0 +}; + +XrmOptionDescRec options [] = {0}; +int options_size = 0; + +void +screenhack (dpy, w) + Display *dpy; + Window w; +{ + Colormap cmap = DefaultColormap (dpy, DefaultScreen (dpy)); + Colormap cmap2 = copy_colormap (dpy, cmap, 0); + + int seconds = 1; + int ticks = 30 * seconds; + int delay = 1; + + while (1) + { + XSync (dpy, False); + XGrabServer (dpy); + XInstallColormap (dpy, cmap2); + fade_colormap (dpy, cmap, cmap2, seconds, ticks, True); + if (delay) sleep (delay); + fade_colormap (dpy, cmap, cmap2, seconds, ticks, False); + XInstallColormap (dpy, cmap); + XUngrabServer (dpy); + XSync (dpy, False); + if (delay) sleep (delay); + } +} + +#endif diff --git a/utils/grabscreen.c b/utils/grabscreen.c new file mode 100755 index 00000000..e12aa0c8 --- /dev/null +++ b/utils/grabscreen.c @@ -0,0 +1,204 @@ +/* xscreensaver, Copyright (c) 1992, 1993, 1994 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... + */ + +#if __STDC__ +#include +#include +#endif + +#ifdef __DECC +typedef char * caddr_t; +#endif + +#include +#include +#include + +static Bool +MapNotify_event_p (dpy, event, window) + Display *dpy; + XEvent *event; + XPointer window; +{ + return (event->xany.type == MapNotify && + event->xvisibility.window == (Window) window); +} + + +#if __STDC__ +static Bool screensaver_window_p (Display *, Window); +#endif + +static Bool +screensaver_window_p (dpy, window) + Display *dpy; + Window window; +{ + Atom type; + int format; + unsigned long nitems, bytesafter; + char *version; + if (XGetWindowProperty (dpy, window, + XInternAtom (dpy, "_SCREENSAVER_VERSION", False), + 0, 1, False, XA_STRING, + &type, &format, &nitems, &bytesafter, + (unsigned char **) &version) + == Success + && type != None) + return True; + return False; +} + +Pixmap +grab_screen_image (dpy, window, root_p) + Display *dpy; + Window window; + int root_p; +{ + Pixmap pixmap = 0; + XWindowAttributes xgwa; + + XGetWindowAttributes (dpy, window, &xgwa); + + if (screensaver_window_p (dpy, window)) + { + /* note: this assumes vroot.h didn't encapsulate the XRootWindowOfScreen + function, only the RootWindowOfScreen macro... */ + Window real_root = XRootWindowOfScreen (DefaultScreenOfDisplay (dpy)); + + XSetWindowBackgroundPixmap (dpy, window, None); + + /* 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); + + XUnmapWindow (dpy, window); + XSync (dpy, True); + sleep (5); /* wait for everyone to swap in and handle exposes... */ + XMapRaised (dpy, window); + + XUngrabPointer (dpy, CurrentTime); + XUngrabKeyboard (dpy, CurrentTime); + + XSync (dpy, True); + } + else if (root_p) + { + XGCValues gcv; + GC gc; + gcv.function = GXcopy; + gcv.subwindow_mode = IncludeInferiors; + gc = XCreateGC (dpy, window, GCFunction | GCSubwindowMode, &gcv); + pixmap = XCreatePixmap(dpy, window, xgwa.width, xgwa.height, xgwa.depth); + XCopyArea (dpy, RootWindowOfScreen (xgwa.screen), pixmap, gc, + xgwa.x, xgwa.y, xgwa.width, xgwa.height, 0, 0); + XFreeGC (dpy, gc); + XSetWindowBackgroundPixmap (dpy, window, pixmap); + } + else + { + XEvent event; + XSetWindowBackgroundPixmap (dpy, window, None); + XMapWindow (dpy, window); + XFlush (dpy); + XIfEvent (dpy, &event, MapNotify_event_p, (XPointer) window); + XSync (dpy, True); + } + return pixmap; +} + + +/* 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. + */ +void +copy_default_colormap_contents (dpy, to_cmap, to_visual) + Display *dpy; + Colormap to_cmap; + Visual *to_visual; +{ + Screen *screen = DefaultScreenOfDisplay (dpy); + 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; + int requested; + 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); + + requested = max_cells; + while (requested > 0) + { + if (XAllocColorCells (dpy, to_cmap, False, 0, 0, pixels, requested)) + { + /* Got all the pixels we asked for. */ + for (i = 0; i < requested; i++) + new_colors[i] = old_colors [pixels[i]]; + XStoreColors (dpy, to_cmap, new_colors, 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; + } + } + + free (old_colors); + free (new_colors); + free (pixels); +} diff --git a/utils/hsv.c b/utils/hsv.c new file mode 100755 index 00000000..2a88dffc --- /dev/null +++ b/utils/hsv.c @@ -0,0 +1,120 @@ +/* xscreensaver, Copyright (c) 1992 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 + +void +#if __STDC__ +hsv_to_rgb (int h, double s, double v, + unsigned short *r, unsigned short *g, unsigned short *b) +#else +hsv_to_rgb (h,s,v, r,g,b) + int h; /* 0 - 360 */ + double s, v; /* 0.0 - 1.0 */ + unsigned short *r, *g, *b; /* 0 - 65535 */ +#endif +{ + double H, S, V, R, G, B; + double p1, p2, p3; + double f; + int i; + 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 +#if __STDC__ +rgb_to_hsv (unsigned short r, unsigned short g, unsigned short b, + int *h, double *s, double *v) +#else +rgb_to_hsv (r,g,b, h,s,v) + unsigned short r, g, b; /* 0 - 65535 */ + int *h; /* 0 - 360 */ + double *s, *v; /* 0.0 - 1.0 */ +#endif +{ + 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; +} + + +void +make_color_ramp (h1, s1, v1, h2, s2, v2, + pixels, npixels) + int h1, h2; /* 0 - 360 */ + double s1, s2, v1, v2; /* 0.0 - 1.0 */ + XColor *pixels; + int npixels; +{ + int dh = (h2 - h1) / npixels; + double ds = (s2 - s1) / npixels; + double dv = (v2 - v1) / npixels; + int i; + for (i = 0; i < npixels; i++) + hsv_to_rgb ((h1 += dh), (s1 += ds), (v1 += dv), + &pixels [i].red, &pixels [i].green, &pixels [i].blue); +} + + +void +cycle_hue (color, degrees) + XColor *color; + int degrees; +{ + int h; + double s, v; + rgb_to_hsv (color->red, color->green, color->blue, + &h, &s, &v); + h = (h + degrees) % 360; + hsv_to_rgb (h, s, v, &color->red, &color->green, &color->blue); +} diff --git a/utils/imakefile b/utils/imakefile new file mode 100755 index 00000000..32448377 --- /dev/null +++ b/utils/imakefile @@ -0,0 +1,22 @@ +/* + * Imakefile file for xscreensaver, Copyright (c) 1993 Jamie Zawinski. + * + * You should not need to edit this file; edit ../config.h instead. + * + */ + +#include "../config.h" + +#ifdef NO_SELECT + DEFINES = R5ISMS -DNO_SELECT +#else + DEFINES = R5ISMS +#endif + SRCS = fade.c hsv.c resources.c spline.c usleep.c xroger.c grabscreen.c + OBJS = fade.o hsv.o resources.o spline.o usleep.o xroger.o grabscreen.o + TARFILES = README Imakefile ad2c $(SRCS) spline.h version.h + +all:: $(OBJS) + +echo_tarfiles: + @echo $(TARFILES) diff --git a/utils/readme b/utils/readme new file mode 100755 index 00000000..2f5bc119 --- /dev/null +++ b/utils/readme @@ -0,0 +1,6 @@ + +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. diff --git a/utils/resources.c b/utils/resources.c new file mode 100755 index 00000000..01c1a1e4 --- /dev/null +++ b/utils/resources.c @@ -0,0 +1,233 @@ +/* xscreensaver, Copyright (c) 1992 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 __STDC__ +#include +#include +#endif + +#include +#include +#include + +/* Resource functions. Assumes: */ + +extern char *progname; +extern char *progclass; +extern XrmDatabase db; + +#if __STDC__ +char *get_string_resource (char *res_name, char *res_class); +int parse_time (char *string, Bool seconds_default_p, Bool silent_p); +static unsigned int get_time_resource (char *res_name, char *res_class, + Bool sec_p); +#endif + +#ifndef isupper +# define isupper(c) ((c) >= 'A' && (c) <= 'Z') +#endif +#ifndef _tolower +# define _tolower(c) ((c) - 'A' + 'a') +#endif + +char * +get_string_resource (res_name, res_class) + char *res_name, *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 (db, 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 (res_name, res_class) + char *res_name, *res_class; +{ + char *tmp, buf [100]; + char *s = get_string_resource (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); + + 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_class, buf); + return 0; +} + +int +get_integer_resource (res_name, res_class) + char *res_name, *res_class; +{ + int val; + char c, *s = get_string_resource (res_name, res_class); + if (!s) return 0; + if (1 == sscanf (s, " %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 (res_name, res_class) + char *res_name, *res_class; +{ + double val; + char c, *s = get_string_resource (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; +} + + +unsigned int +get_pixel_resource (res_name, res_class, dpy, cmap) + char *res_name, *res_class; + Display *dpy; + Colormap cmap; +{ + XColor color; + char *s = get_string_resource (res_name, res_class); + if (!s) goto DEFAULT; + + if (! XParseColor (dpy, cmap, s, &color)) + { + fprintf (stderr, "%s: can't parse color %s\n", progname, s); + goto DEFAULT; + } + if (! XAllocColor (dpy, cmap, &color)) + { + fprintf (stderr, "%s: couldn't allocate color %s\n", progname, s); + goto DEFAULT; + } + free (s); + return color.pixel; + DEFAULT: + if (s) free (s); + return (strcmp (res_class, "Background") + ? WhitePixel (dpy, DefaultScreen (dpy)) + : BlackPixel (dpy, DefaultScreen (dpy))); +} + + +int +parse_time (string, seconds_default_p, silent_p) + char *string; + Bool seconds_default_p, silent_p; +{ + unsigned int h, m, s; + char c; +#ifdef __DECC + 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)) +#else + if (3 == sscanf (string, " %d : %2d : %2d %c", &h, &m, &s, &c)) + ; + else if (2 == sscanf (string, " : %2d : %2d %c", &m, &s, &c) || + 2 == sscanf (string, " %d : %2d %c", &m, &s, &c)) + h = 0; + else if (1 == sscanf (string, " : %2d %c", &s, &c)) + h = m = 0; + else if (1 == sscanf (string, " %d %c", + (seconds_default_p ? &s : &m), &c)) +#endif + { + 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 (res_name, res_class, sec_p) + char *res_name, *res_class; + Bool sec_p; +{ + int val; + char *s = get_string_resource (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 (res_name, res_class) + char *res_name, *res_class; +{ + return get_time_resource (res_name, res_class, True); +} + +unsigned int +get_minutes_resource (res_name, res_class) + char *res_name, *res_class; +{ + return get_time_resource (res_name, res_class, False); +} diff --git a/utils/spline.c b/utils/spline.c new file mode 100755 index 00000000..d242d63f --- /dev/null +++ b/utils/spline.c @@ -0,0 +1,331 @@ +/* + * 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 +#include "spline.h" +#if __STDC__ +#include +#endif +#include + +/* Lifted from InterViews */ +#define SMOOTHNESS 1.0 + +#if __STDC__ +static void no_more_memory (void); +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); + +#endif + +static void +no_more_memory () +{ + fprintf (stderr, "No more memory\n"); + exit (1); +} + +spline* +make_spline (size) + u_int size; +{ + spline* s = (spline*)calloc (1, sizeof (spline)); + if (!s) + no_more_memory (); + 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) + no_more_memory (); + + return s; +} + +static void +grow_spline_points (s) + spline* s; +{ + s->allocated_points *= 2; + s->points = + (XPoint*)realloc (s->points, s->allocated_points * sizeof (XPoint)); + + if (!s->points) + no_more_memory (); +} + +static void +mid_point (x0, y0, x1, y1, mx, my) + double x0, y0, x1, y1, *mx, *my; +{ + *mx = (x0 + x1) / 2.0; + *my = (y0 + y1) / 2.0; +} + +static void +third_point (x0, y0, x1, y1, tx, ty) + double x0, y0, x1, y1, *tx, *ty; +{ + *tx = (2 * x0 + x1) / 3.0; + *ty = (2 * y0 + y1) / 3.0; +} + +static int +can_approx_with_line (x0, y0, x2, y2, x3, y3) + double x0, y0, x2, y2, x3, 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 (s, x0, y0, x1, y1) + spline* s; + double x0, y0, x1, 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 (s, x0, y0, x1, y1, x2, y2, x3, y3) + spline* s; + double x0, y0, x1, y1, x2, y2, x3, 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 (s, cminus1x, cminus1y, cx, cy, cplus1x, cplus1y, + cplus2x, cplus2y) + spline* s; + double cminus1x, cminus1y, cx, cy, cplus1x, cplus1y, cplus2x, 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 (s) + 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 (s) + 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 (s) + 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 (s1, s2) + spline *s1, *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 (s, rectangle_out) + 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; +} diff --git a/utils/spline.h b/utils/spline.h new file mode 100755 index 00000000..dd235866 --- /dev/null +++ b/utils/spline.h @@ -0,0 +1,63 @@ +/* + * 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_ + +#include + +#if __STDC__ +# define P(x)x +#else +# define P(x)() +#endif + +#ifdef VMS +typedef unsigned int u_int; +#endif + +typedef struct _spline +{ + /* input */ + u_int n_controls; + double* control_x; + double* control_y; + + /* output */ + u_int n_points; + XPoint* points; + u_int allocated_points; +} spline; + +spline* make_spline P((u_int size)); +void compute_spline P((spline* s)); +void compute_closed_spline P((spline* s)); +void just_fill_spline P((spline* s)); +void append_spline_points P((spline* s1, spline* s2)); +void spline_bounding_box P((spline* s, XRectangle* rectangle_out)); + +#undef P +#endif /* _SPLINE_H_ */ diff --git a/utils/strings.c b/utils/strings.c new file mode 100755 index 0000000000000000000000000000000000000000..3c11a811cfac0f136736aa24a74cd207fd129ce1 GIT binary patch literal 1374 zcmbVMO>Yx15S@k#DFOipq5>)-RiO1IO_KwsO%bIB!~qU1f56%GZY;WXWP5=Y@!uJL zY!jh~O5E1tnem(V-s}KQ@*FT9UVgp!^yTB_^n93|Bd_?{aVNDxU1NXs`Rsz-qudh! z7*O3ledDs!>+6gS=$rX79i^~%B~;^9zS`=}lmeZ`N?0dVXbZ8=A$-@eiajv1rksSN zNh)Vgpj>f-dAP}aeE|p1DJvT#D!kIFL8)9yFJKRT!An4FMOzXoUogQ?9PzMX4}K@~ z!-&3JXN;!7{B1Ge#)d zTH=GF-$7pbv>(!~q`~fOpg~$K^ literal 0 HcmV?d00001 diff --git a/utils/usleep.c b/utils/usleep.c new file mode 100755 index 00000000..ad0f4b6b --- /dev/null +++ b/utils/usleep.c @@ -0,0 +1,111 @@ +/* xscreensaver, Copyright (c) 1992 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 __STDC__ +#include +#endif + +#include +#include /* lazy way out */ + +#ifdef VMS +#include +#include +extern char *progname; +#include +unsigned long int statvms; +float seconds; +#endif + +/* usleep() doesn't exist everywhere, and select() is faster anyway. + */ + +#ifndef VMS + +#ifdef NO_SELECT + /* If you don't have select() or usleep(), I guess you lose... + Maybe you have napms() instead? Let me know. + */ +void +screenhack_usleep (usecs) + unsigned long usecs; +{ + usleep (usecs); +} + +#else /* ! NO_SELECT */ + +void +screenhack_usleep (usecs) + unsigned long usecs; +{ + struct timeval tv; + tv.tv_sec = usecs / 1000000L; + tv.tv_usec = usecs % 1000000L; + (void) select (0, 0, 0, 0, &tv); +} + +#endif /* ! NO_SELECT */ + +#else /* VMS */ + +#define SEC_DELTA "0000 00:00:01.00" +#define TICK_DELTA "0000 00:00:00.08" +static int bin_sec_delta[2], bin_tick_delta[2], deltas_set = 0; + +static void +set_deltas () +{ + int status; + extern int SYS$BINTIM (); + $DESCRIPTOR (str_sec_delta, SEC_DELTA); + $DESCRIPTOR (str_tick_delta, TICK_DELTA); + if (!deltas_set) + { + status = SYS$BINTIM (&str_sec_delta, &bin_sec_delta); + if (!(status & 1)) + { + fprintf (stderr, "%s: cannot convert delta time ", progname); + fprintf (stderr, SEC_DELTA); + fprintf (stderr, "; status code = %d\n", status); + exit (status); + } + status = SYS$BINTIM (&str_tick_delta, &bin_tick_delta); + if (!(status & 1)) + { + fprintf (stderr, "%s: cannot convert delta time ", progname); + fprintf (stderr, TICK_DELTA); + fprintf (stderr, "; status code = %d\n", status); + exit (status); + } + deltas_set = 1; + } +} + +void +screenhack_usleep (usecs) + unsigned long usecs; +{ + int status, *bin_delta; + +/* extern int SYS$SCHWDK (), SYS$HIBER (); */ +/*#define TICK_INTERVAL 1000 */ +/* */ +/* if (!deltas_set) set_deltas (); */ +/* bin_delta = (usecs == TICK_INTERVAL) ? &bin_tick_delta : &bin_sec_delta; */ +/* status = SYS$SCHDWK (0, 0, bin_delta, 0); */ +/* if ((status & 1)) (void) SYS$HIBER (); */ + + seconds = ((float) usecs)/1000000.0; + statvms = lib$wait(&seconds); +} + +#endif /*VMS */ diff --git a/utils/utils.olb b/utils/utils.olb new file mode 100755 index 0000000000000000000000000000000000000000..a1811111d38f04020c02cbb7af26b21b717992a6 GIT binary patch literal 25600 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 literal 0 HcmV?d00001 diff --git a/utils/utils.olb_axp b/utils/utils.olb_axp new file mode 100755 index 0000000000000000000000000000000000000000..090792df3221c39ddf584e53c482130c5cd6164e GIT binary patch literal 85504 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 UiQQG9KKQ??_f(@l{xSBy0H$cCH~;_u literal 0 HcmV?d00001 diff --git a/utils/version.h b/utils/version.h new file mode 100755 index 00000000..899992bd --- /dev/null +++ b/utils/version.h @@ -0,0 +1,2 @@ +static char *screensaver_id = + "@(#)xscreensaver 1.24, by Jamie Zawinski (jwz@mcom.com)"; diff --git a/utils/xroger.c b/utils/xroger.c new file mode 100755 index 00000000..01fd7d7f --- /dev/null +++ b/utils/xroger.c @@ -0,0 +1,106 @@ +/* xscreensaver, Copyright (c) 1991-1993 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 + +#if __STDC__ +static void crossbones (Display *, Window, GC, int x, int y, int w, int h); +#endif + +static void +crossbones (dpy, window, draw_gc, x, y, w, h) + Display *dpy; + Window window; + GC draw_gc; + int x, y, w, h; +{ + double xscale = w / 440.0; + double yscale = h / 216.0; + XPoint points [6]; + points [0].x = x + xscale * 20; + points [0].y = y + yscale * 10; + points [1].x = x + xscale * 120; + points [1].y = y + yscale * 10; + points [2].x = x + xscale * 243; + points [2].y = y + yscale * 93; + points [3].x = x + xscale * 57; + points [3].y = y + yscale * 210; + points [4].x = x + xscale * 20; + points [4].y = y + yscale * 210; + points [5].x = x + xscale * 175; + points [5].y = y + yscale * 113; + XFillPolygon (dpy, window, draw_gc, points, 6, Complex, CoordModeOrigin); + points [0].x = x + xscale * 197; + points [0].y = y + yscale * 127; + points [1].x = x + xscale * 384; + points [1].y = y + yscale * 10; + points [2].x = x + xscale * 420; + points [2].y = y + yscale * 10; + points [3].x = x + xscale * 265; + points [3].y = y + yscale * 108; + points [4].x = x + xscale * 420; + points [4].y = y + yscale * 210; + points [5].x = x + xscale * 320; + points [5].y = y + yscale * 210; + XFillPolygon (dpy, window, draw_gc, points, 6, Complex, CoordModeOrigin); +} + + +void +skull (dpy, window, draw_gc, erase_gc, x, y, w, h) + Display *dpy; + Window window; + GC draw_gc, erase_gc; + int x, y, w, h; +{ + XPoint points [3]; + crossbones (dpy, window, draw_gc, x, y+h/2, w, h/2); + x += w/100; + y += h/15; + XFillArc (dpy, window, draw_gc, (int) (x + (w * 0.3)), y, w/2, h/2, + -40*64, 260*64); + XFillRectangle (dpy, window, draw_gc, (int) (x + (w * 0.35)), y + h/5, + (int) (w * 0.4), h/5); + XFillRectangle (dpy, window, draw_gc, (int) (x + (w * 0.375)), + (int) (y + (h * 0.425)), w / 20, h / 20); + XFillRectangle (dpy, window, draw_gc, (int) (x + (w * 0.495)), + (int) (y + (h * 0.425)), w / 20, h / 20); + XFillRectangle (dpy, window, draw_gc, (int) (x + (w * 0.555)), + (int) (y + (h * 0.425)), w / 20, h / 20); + XFillRectangle (dpy, window, draw_gc, (int) (x + (w * 0.675)), + (int) (y + (h * 0.425)), w / 20, h / 20); + points [0].x = x + (w * 0.435); + points [0].y = y + (h * 0.425); + points [1].x = x + (w * 0.485); + points [1].y = points [0].y; + points [2].x = (points [0].x + points [1].x) / 2; + points [2].y = points [0].y + h/10; + XFillPolygon (dpy, window, draw_gc, points, 3, Complex, CoordModeOrigin); + points [0].x = x + (w * 0.615); + points [1].x = x + (w * 0.665); + points [2].x = (points [0].x + points [1].x) / 2; + XFillPolygon (dpy, window, draw_gc, points, 3, Complex, CoordModeOrigin); + points [0].x = x + (w * 0.52); + points [0].y = y + (h * 0.35); + points [1].x = points [0].x - (w * 0.05); + points [1].y = points [0].y; + points [2].x = points [0].x; + points [2].y = points [0].y - (w * 0.10); + XFillPolygon (dpy, window, erase_gc, points, 3, Complex, CoordModeOrigin); + points [0].x = x + (w * 0.57); + points [1].x = x + (w * 0.62); + points [2].x = points [0].x; + XFillPolygon (dpy, window, erase_gc, points, 3, Complex, CoordModeOrigin); + XFillArc (dpy, window, erase_gc, x + ((int) (w * 0.375)), y + h/7, + w/10, h/10, 0, 360*64); + XFillArc (dpy, window, erase_gc, x + ((int) (w * 0.615)), y + h/7, + w/10, h/10, 0, 360*64); +} -- 2.39.5