--- /dev/null
+#ifndef XCOMM
+#define XCOMM /**/#
+#endif
+XCOMM @(#)Imakefile 4.03 97/04/30 xlockmore
+XCOMM
+XCOMM Define these now or down further below, see below for explaination.
+#define XpmLibrary
+#define XmLibrary
+#define GLLibrary
+XCOMM #define DtSaverLibrary
+XCOMM #define RplayLibrary
+XCOMM #define NasLibrary
+XCOMM #define Hackers
+
+#if defined(SCOArchitecture)
+PATH=/bin:/usr/bin:/usr/bin/X11:/usr/local/bin
+#endif
+
+N=
+C=.c
+XCOMM C++
+XCOMM C=.cc
+O=.o
+XCOMM VMS
+XCOMM O=.obj
+S=$(N) $(N)
+XCOMM VMS
+XCOMM S=,
+E=
+XCOMM VMS
+XCOMM E=.exe
+
+XCOMM please define
+XCOMM C as the C source code extension
+XCOMM O as the object extension
+XCOMM S as the separator for object code
+XCOMM E as the executable extension
+
+LN_S = $(LN)
+
+XCOMM CC = cc
+XCOMM CC = acc
+XCOMM CC = CC
+XCOMM CC = gcc -Wall
+XCOMM CC = g++ -Wall
+CC = gcc -melf
+
+XCOMM *** BEGIN XPM CONFIG SECTION ***
+
+XCOMM Only the image.c and bat.c modes use this.
+XCOMM If your system has libXpm, remove the 'XCOMM ' from the next line.
+XCOMM #define XpmLibrary
+
+#ifdef XpmLibrary
+ XPMDEF = -DUSE_XPM
+XCOMM Use the following if your xpm.h file is not in an X11 directory
+XCOMM XPMDEF = -DUSE_XPMINC
+
+XCOMM If you get an error "Cannot find xpm.h" while compiling, set
+XCOMM XPMINC to the directory X11/xpm.h is in. Below is a guess.
+ XPMINC = -I/u/rr/src/lib/xpm-3.4j
+XCOMM SGI's ViewKit (use with -DUSE_XPMINC)
+XCOMM XPMINC = -I/usr/include/Vk
+
+XCOMM If you get an error "Cannot find libXpm" while linking, set XPMLIBPATH
+XCOMM to the directory libXpm.* is in. Below is a guess.
+ XPMLIB = /u/rr/src/lib/xpm-3.4j/lib/libXpm.a
+
+#endif
+
+XCOMM *** END XPM CONFIG SECTION ***
+
+XCOMM *** BEGIN XM CONFIG SECTION ***
+
+XCOMM Only options.c and xmlock.c uses Motif.
+XCOMM You must copy it out of the hackers directory.
+XCOMM It is there because it is experimental.
+XCOMM If your system has libXm, remove the 'XCOMM ' from the next line.
+XCOMM #define XmLibrary
+
+#ifdef XmLibrary
+XCOMM If its not with your X11 stuff you should set the following
+XCOMM MOTIFHOME = /usr/local
+XCOMM MOTIFHOME = /usr/dt
+
+XCOMM If you get an error "Cannot find Xm/PanedW.h" while compiling, set
+XCOMM XMINC to the directory Xm/PanedW.h is in. Below is a guess.
+XCOMM XMINC = -I$(MOTIFHOME)/include
+
+XCOMM If you get an error "Cannot find libXm" while linking, set XMLIBPATH
+XCOMM to the directory libXm.* is in. Below is a guess.
+XCOMM XMLIB = -L$(MOTIFHOME)/lib -lXm
+ XMLIB = -lXm
+
+XCOMM Debugging with editres
+XCOMM EDITRESDEF = -DUSE_XMU
+XCOMM EDITRESLIB = -lXmu
+#endif
+
+XCOMM *** END XM CONFIG SECTION ***
+
+XCOMM *** BEGIN MESAGL CONFIG SECTION ***
+
+XCOMM escher, gears, morph3d, pipes, superquadrics, sproingies modes use this.
+XCOMM If your system has libMesaGL & widgets,
+XCOMM remove the 'XCOMM ' from the next line.
+XCOMM #define GLLibrary
+
+#ifdef GLLibrary
+ GLDEF = -DUSE_GL
+
+XCOMM If you get an error "Cannot find GL/gl.h" while compiling, set
+XCOMM GLINC to the directory GL/gl.h is in.
+ GLINC = -I/u/rr/src/lib/Mesa-2.3/include
+
+XCOMM If you get an error "Cannot find libMesaGL" while linking, set GLLIBPATH
+XCOMM to the directory libMesaGL.* is in. Below is a guess.
+ GLLIB = /u/rr/src/lib/Mesa-2.3/lib/libMesaGL.a /u/rr/src/lib/Mesa-2.3/lib/libMesaGLU.a
+XCOMM On SGI
+XCOMM GLLIB = lGL -lGLU -lgl
+#endif
+
+XCOMM *** END MESAGL CONFIG SECTION ***
+
+XCOMM *** BEGIN CDE DT CONFIG SECTION ***
+
+XCOMM COMMON DESKTOP ENVIRONMENT
+XCOMM if your system has libDtSvc, remove the 'XCOMM ' from the next line
+XCOMM #define DtSaverLibrary
+
+#ifdef DtSaverLibrary
+DTSAVERDEF = -DUSE_DTSAVER
+DTSAVERINC = -I/usr/dt/include
+DTSAVERLIB = -L/usr/dt/lib -lDtSvc
+#endif
+
+XCOMM *** END CDE DT CONFIG SECTION ***
+
+XCOMM *** BEGIN SOUND CONFIG SECTION ***
+
+XCOMM Only xlock.c and resource.c use this
+XCOMM if your system has these sound libraries, remove the 'XCOMM '
+XCOMM #define RplayLibrary
+XCOMM #define NasLibrary
+
+#ifdef RplayLibrary
+SOUNDDEF = -DUSE_RPLAY
+SOUNDINC = -I/usr/local/include
+#SOUNDLIB = -L/share/lib -lrplay
+SOUNDLIB = -L/usr/local/lib -lrplay
+#endif
+
+#ifdef NasLibrary
+SOUNDDEF = -DUSE_NAS
+SOUNDINC = -I/usr/X11R6/include
+SOUNDLIB = -L/usr/X11R6/lib -laudio
+#endif
+
+XCOMM system play (optional software)
+XCOMM SUNOS 4.1.3
+XCOMM DEF_PLAY = "/usr/demo/SOUND/play /usr/local/share/sounds/xlock/"
+XCOMM IRIX 5.3
+XCOMM DEF_PLAY = "/usr/sbin/sfplay /usr/local/share/sounds/xlock/"
+XCOMM Digital Unix with Multimedia Services installed:
+XCOMM DEF_PLAY = "/usr/bin/mme/decsound -play /usr/local/share/sounds/xlock/"
+XCOMM LINUX and others (see config directory)
+XCOMM DEF_PLAY = "/usr/local/bin/play.sh /usr/local/share/sounds/xlock/"
+XCOMM Uncomment line below if you have one of the above
+XCOMM SOUNDDEF = -DDEF_PLAY=\"$(DEF_PLAY)\"
+
+XCOMM *** END SOUND CONFIG SECTION ***
+
+XCOMM *** BEGIN RNG CONFIG SECTION ***
+
+XCOMM Uncomment to use your system's Random Number Generator
+XCOMM They usually come in 3 types
+
+XCOMM Uncomment to use high-precision (but expensive) RNG
+XCOMM SRANDDEF = -DSRAND=srand48
+XCOMM LRANDDEF = -DLRAND=lrand48
+
+XCOMM SRANDDEF = -DSRAND=srandom
+XCOMM LRANDDEF = -DLRAND=random
+
+XCOMM Least desirable RNG
+XCOMM SRANDDEF = -DSRAND=srand
+XCOMM LRANDDEF = -DLRAND=rand
+
+XCOMM Normally use the above with (default)
+XCOMM MAXRANDDEF = -DMAXRAND=2147483648.0
+XCOMM Use the following if using srand/rand and NOT AIXV3
+XCOMM MAXRANDDEF = -DMAXRAND=32767.0
+RANDDEF = $(SRANDDEF) $(LRANDDEF) $(MAXRANDDEF)
+
+XCOMM *** END RNG CONFIG SECTION ***
+
+XCOMM *** BEGIN EXTRA MODES CONFIG SECTION ***
+
+XCOMM Uncomment to use sproingies mode. It may be slow on certain machines.
+
+XCOMM Uncomment to use hackers modes. It may make xlock unstable.
+XCOMM Please do not uncomment for precompiled distributions.
+XCOMM #define Hackers
+
+#ifdef Hackers
+XCOMM If you only want some of these you must remove the ones you do
+XCOMM not want from mode.c and mode.h and from SRC2 and OBJ2 below.
+HACKERDEF = -DUSE_HACKERS
+#endif
+
+XCOMM *** END EXTRA MODES CONFIG SECTION ***
+
+ BITMAPDIR = ./bitmaps/
+ PIXMAPDIR = ./pixmaps/
+ CONFIGDIR = ./config/
+ GLDIR = ./glx/
+ HACKERDIR = ./hackers/
+
+#ifndef __QNX__
+#ifndef MathLibrary
+#define MathLibrary -lm
+#endif
+#else
+#define MathLibrary
+ PASSWDDEF = -DHAVE_SHADOW -Dlinux
+ PASSWDLIB = -l/src/util/Lib/util
+#endif
+
+XCOMM KERBEROS
+XCOMM Kerberbos ver. 4
+XCOMM PASSWDDEF = -DHAVE_KRB4
+XCOMM PASSWDINC = -I/usr/athena/include
+XCOMM PASSWDLIB = -L/usr/athena/lib -lkrb -ldes -lresolv
+XCOMM
+XCOMM Kerberos ver. 5 (good with b6)
+XCOMM PASSWDDEF = -DHAVE_KRB5
+XCOMM PASSWDINC = -I/opt/krb5/include
+XCOMM PASSWDLIB = -L/opt/krb5/lib -lkrb5 -lcrypto -lcom_err
+
+XCOMM DCE authentication (tested only on HP's)
+XCOMM PASSWDDEF = -DDCE_PASSWD
+XCOMM PASSWDINC = -I/usr/include/reentrant
+XCOMM PASSWDLIB = -ldce -lc_r
+
+#ifdef SCOArchitecture
+ PASSWDDEF = -DHAVE_SHADOW -DSVR4
+#endif
+
+#ifdef SVR4ix86Architecture
+ PASSWDDEF = -DHAVE_SHADOW
+#endif
+
+#ifdef UltrixArchitecture
+EXTRA_LIBRARIES = -lauth
+#endif
+
+#ifdef SunArchitecture
+#if SystemV4
+ SYSTEMDEF = -DSOLARIS2
+XCOMM imake is usually not set up right here.
+XCOMM Assume shadowing... usually correct.
+XCOMM #if HasShadowPasswd
+XCOMM PASSWDDEF = -DHAVE_SHADOW
+XCOMM #endif
+ PASSWDDEF = -DHAVE_SHADOW
+XCOMM SLEEPDEF = -DHAVE_NAONOSLEEP
+
+XCOMM Problems finding libXext.so.0 when sticky bit is set
+EXTRA_LDOPTIONS = -R/usr/lib:/usr/openwin/lib:/usr/dt/lib:/usr/local/lib
+
+ PIXMAPTYPE = sol
+#else
+ SYSTEMDEF = -DSUNOS4 -DUSE_MATHERR
+ SLEEPDEF = -DHAVE_USLEEP
+#if HasShadowPasswd
+XCOMM PASSWDDEF = -DSUNOS_ADJUNCT_PASSWD
+ PASSWDDEF = -DHAVE_SHADOW
+#endif
+ PIXMAPTYPE = sun
+#endif
+ BITMAPTYPE = sun
+#else
+#if HasShadowPasswd
+ PASSWDDEF = -DHAVE_SHADOW
+XCOMM PASSWDLIB = -lshadow
+#endif
+#if defined(HPArchitecture) || defined(ApolloArchitecture)
+#ifdef HPArchitecture
+XCOMM If your site is using Secured Passwords,
+XCOMM PASSWDDEF = -DHPUX_SECURE_PASSWD
+XCOMM If your site is using Passwd Etc,
+XCOMM PASSWDDEF = -DHP_PASSWDETC
+XCOMM PASSWDLIB = -lrgy -lnck -lndbm
+XCOMM PASSWDLIB = -lrgy -lnck -lndbm -lsec
+ CCOPTIONS = -Aa
+ SYSTEMDEF = -D_HPUX_SOURCE -DSYSV -DUSE_MATHERR
+#else
+ SLEEPDEF = -DHAVE_USLEEP
+#endif
+EXTRA_LIBRARIES = -lXhp11
+ BITMAPTYPE = hp
+ PIXMAPTYPE = hp
+#else
+#ifdef i386SVR4Architecture
+EXTRA_LIBRARIES = -lsocket -lnsl -lgen
+ PASSWDDEF = -DHAVE_SHADOW
+ BITMAPTYPE = x11
+ PIXMAPTYPE = x11
+#else
+#if defined(FreeBSDArchitecture) || defined(NetBSDArchitecture) || defined(i386BsdArchitecture)
+ SLEEPDEF = -DHAVE_USLEEP
+ BITMAPTYPE = bsd
+ PIXMAPTYPE = bsd
+#if defined(FreeBSDArchitecture)
+#else
+#endif
+#else
+#ifdef LinuxArchitecture
+ SLEEPDEF = -DHAVE_USLEEP
+ BITMAPTYPE = linux
+ PIXMAPTYPE = linux
+#if HasShadowPasswd && !UseElfFormat
+EXTRA_LIBRARIES = -lgdbm
+#endif
+#else
+#ifdef SGIArchitecture
+ BITMAPTYPE = sgi
+ PIXMAPTYPE = sgi
+#else
+#ifdef AIXArchitecture
+ BITMAPTYPE = x11
+ PIXMAPTYPE = x11
+XCOMM If AIX 3.1 or less, do not have struct passwd and other things
+#if OSMajorVersion < 3 || (OSMajorVersion == 3 && OSMinorVersion < 2)
+ SYSTEMDEF = -DLESS_THAN_AIX3_2
+#endif
+XCOMM Use this if your site is using AFS:
+XCOMM PASSWDDEF = -DAFS
+XCOMM PASSWDINC = -I/usr/afsws/include
+XCOMM PASSWDLIB = -L/usr/afsws/lib -L/usr/afsws/lib/afs -lkauth -lubik -lprot -lrxkad -lrx -llwp -lauth -lsys -ldes -lcmd -lcom_err /usr/afsws/lib/afs/util.a
+XCOMM You may need this one too.
+XCOMM EXTRA_LIBRARIES = -laudit
+#else
+XCOMM Use this if your site is using OSF Enhanced Security:
+XCOMM PASSWDDEF = -DOSF1_ENH_SEC
+XCOMM PASSWDLIB = -lsecurity
+XCOMM INSTPGMFLAGS = -g auth -m 2111
+ BITMAPTYPE = x11
+ PIXMAPTYPE = x11
+#endif
+#endif
+#endif
+#endif
+#endif
+#endif
+#endif
+
+XCOMM -DUSE_VROOT Allows xlock to run in root window (some
+XCOMM window managers have problems)
+XCOMM -DALWAYS_ALLOW_ROOT Users can not turn off allowroot
+XCOMM -DUSE_SYSLOG Paranoid administrator option (a check is also
+XCOMM done to see if you have it)
+XCOMM -DUSE_MULTIPLE_ROOT Multiple root users ... security?
+XCOMM -DUSE_MOUSE_MOTION Password screen displayed with mouse motion
+XCOMM -DUSE_OLD_EVENT_LOOP Some machines may still need this (fd_set
+XCOMM errors may be a sign)
+XCOMM -DUSE_VMSUTILS This patches up old __VMS_VER < 70000000
+XCOMM
+XCOMM For personal use you may want to consider:
+XCOMM -DUSE_XLOCKRC paranoid admin or unknown shadow passwd alg
+XCOMM
+XCOMM For labs you may want to consider:
+XCOMM -DUSE_AUTO_LOGOUT=240 Enable auto-logout and set deadline (minutes)
+XCOMM -DDEF_AUTO_LOGOUT=\"120\" Set default auto-logout deadline (minutes)
+XCOMM -DUSE_BUTTON_LOGOUT=10 Enable logout button and set when to appear (min)
+XCOMM -DDEF_BUTTON_LOGOUT=\"5\" Set default logout button (min)
+XCOMM -DUSE_BOMB Enable automatic logout mode (does not come up
+XCOMM in random mode)
+XCOMM -DCLOSEDOWN_LOGOUT Use with USE_AUTO_LOGOUT, USE_BUTTON_LOGOUT,
+XCOMM USE_BOMB if using xdm
+XCOMM -DSESSION_LOGOUT Alternate of above
+XCOMM -DSTAFF_FILE=\"/etc/xlock.staff\" File of staff who are exempt
+XCOMM -DSTAFF_NETGROUP=\"/etc/xlock.netgroup\" Netgroup that is exempt
+
+XCOMM May have to combine in one long line if "+=" does not work
+ OPTDEF = -DUSE_VROOT -DALWAYS_ALLOW_ROOT -DUSE_BOMB
+XCOMM OPTDEF += -DUSE_SYSLOG -DSYSLOG_FACILITY=LOG_AUTH
+XCOMM OPTDEF += -DSYSLOG_WARNING=LOG_WARNING
+XCOMM OPTDEF += -DSYSLOG_NOTICE=LOG_NOTICE -DSYSLOG_INFO=LOG_INFO
+XCOMM OPTDEF += -DUSE_MOUSE_MOTION
+XCOMM OPTDEF += -DUSE_MULTIPLE_ROOT
+XCOMM OPTDEF += -DUSE_OLD_EVENT_LOOP
+XCOMM OPTDEF += -DUSE_XLOCKRC
+XCOMM OPTDEF += -DUSE_AUTO_LOGOUT=240
+XCOMM OPTDEF += -DDEF_AUTO_LOGOUT=\"120\"
+XCOMM OPTDEF += -DUSE_BUTTON_LOGOUT=10
+XCOMM OPTDEF += -DDEF_BUTTON_LOGOUT=\"5\"
+XCOMM OPTDEF += -DCLOSEDOWN_LOGOUT
+XCOMM OPTDEF += -DSESSION_LOGOUT
+XCOMM OPTDEF += -DSTAFF_FILE=\"/etc/xlock.staff\"
+XCOMM OPTDEF += -DSTAFF_NETGROUP=\"/etc/xlock.netgroup\"
+
+XCOMM Here is your chance to override the default icon:
+XCOMM TINYBITMAP = $(BITMAPTYPE)
+TINYBITMAP = t-x11
+SMALLBITMAP = s-$(BITMAPTYPE)
+MEDIUMBITMAP = m-$(BITMAPTYPE)
+LARGEBITMAP = l-$(BITMAPTYPE)
+MEDIUMPIXMAP = m-$(PIXMAPTYPE)
+LARGEPIXMAP = l-$(PIXMAPTYPE)
+
+XCOMM EYESBITMAP = $(MEDIUMBITMAP)
+EYESBITMAP = m-grelb
+FLAGBITMAP = $(MEDIUMBITMAP)
+IMAGEBITMAP = $(MEDIUMBITMAP)
+XCOMM IMAGEBITMAP = l-bob #Slackware icon
+XCOMM IMAGEBITMAP = m-xlock #XLock icon
+XCOMM LIFEBITMAP = $(SMALLBITMAP)
+LIFEBITMAP = s-grelb
+LIFE1DBITMAP = $(TINYBITMAP)
+MAZEBITMAP = $(LARGEBITMAP)
+XCOMM MAZEBITMAP = m-xlock
+XCOMM PACMANBITMAP = $(MEDIUMBITMAP)
+PACMANBITMAP = m-ghost
+XCOMM PUZZLEBITMAP = $(LARGEBITMAP)
+PUZZLEBITMAP = l-xlock
+XCOMM PUZZLEBITMAP = l-linux
+IMAGEPIXMAP = $(MEDIUMPIXMAP)
+XCOMM IMAGEPIXMAP = m-xlock
+XCOMM PUZZLEPIXMAP = $(LARGEPIXMAP)
+PUZZLEPIXMAP = l-xlock
+XCOMM PUZZLEPIXMAP = l-linux
+
+ DEFINES = -DDEF_FILESEARCHPATH=\"$(LIBDIR)/%T/%N%S\" \
+$(SYSTEMDEF) $(EDITRESDEF) $(SLEEPDEF) $(OPTDEF) $(RANDDEF) $(HACKERDEF) \
+$(PASSWDDEF) $(XMINC) $(XPMDEF) $(GLDEF) $(DTSAVERDEF) $(SOUNDDEF) \
+$(PASSWDINC) $(XPMINC) $(GLINC) $(DTSAVERINC) $(SOUNDINC)
+
+ DEPLIBS = $(DEPXLIB)
+LOCAL_LIBRARIES = $(XLIB) $(XPMLIB) $(GLLIB) $(DTSAVERLIB) $(SOUNDLIB)
+ GUILIBS = $(XMLIB) $(EDITRESLIB) -lXt $(XLIB) $(SMLIB) $(ICELIB)
+ LINTLIBS = $(LINTXLIB)
+#if HasLibCrypt
+ CRYPTLIB = -lcrypt
+#endif
+ SYS_LIBRARIES = $(CRYPTLIB) $(PASSWDLIB) MathLibrary
+#if defined(FreeBSDArchitecture) || defined(NetBSDArchitecture)
+ INSTPGMFLAGS = -s -m 4751
+#endif
+
+XLOCKCOREOBJS = xlock$(O)$(S)passwd$(O)$(S)resource$(O)$(S)\
+utils$(O)$(S)logout$(O)$(S)mode$(O)$(S)\
+ras$(O)$(S)xbm$(O)$(S)color$(O)$(S)sound$(O)
+XLOCKMODEOBJS = ant$(O)$(S)ball$(O)$(S)bat$(O)$(S)blot$(O)$(S)\
+bouboule$(O)$(S)bounce$(O)$(S)braid$(O)$(S)bug$(O)$(S)\
+clock$(O)$(S)crystal$(O)$(S)\
+daisy$(O)$(S)dclock$(O)$(S)demon$(O)$(S)drift$(O)$(S)eyes$(O)$(S)\
+flag$(O)$(S)flame$(O)$(S)forest$(O)$(S)fract$(O)$(S)\
+galaxy$(O)$(S)geometry$(O)$(S)grav$(O)$(S)\
+helix$(O)$(S)hop$(O)$(S)hyper$(O)$(S)\
+ico$(O)$(S)ifs$(O)$(S)image$(O)$(S)julia$(O)$(S)kaleid$(O)$(S)\
+laser$(O)$(S)life$(O)$(S)life1d$(O)$(S)life3d$(O)$(S)\
+lightning$(O)$(S)lisa$(O)$(S)lissie$(O)$(S)loop$(O)$(S)\
+marquee$(O)$(S)maze$(O)$(S)mountain$(O)$(S)nose$(O)$(S)\
+pacman$(O)$(S)penrose$(O)$(S)petal$(O)$(S)puzzle$(O)$(S)pyro$(O)$(S)\
+qix$(O)$(S)roll$(O)$(S)rotor$(O)$(S)\
+shape$(O)$(S)sierpinski$(O)$(S)slip$(O)$(S)\
+sphere$(O)$(S)spiral$(O)$(S)spline$(O)$(S)\
+star$(O)$(S)strange$(O)$(S)swarm$(O)$(S)swirl$(O)$(S)\
+triangle$(O)$(S)tube$(O)$(S)turtle$(O)$(S)voters$(O)$(S)\
+wator$(O)$(S)wire$(O)$(S)world$(O)$(S)worm$(O)$(S)\
+cartoon$(O)
+XLOCKGLOBJS = escher$(O)$(S)gears$(O)$(S)morph3d$(O)$(S)superquadrics$(O)$(S)\
+buildlwo$(O)$(S)pipes$(O)$(S)pipeobjs$(O)$(S)\
+sproingies$(O)$(S)sproingiewrap$(O)$(S)s1_b$(O)$(S)\
+s1_1$(O)$(S)s1_2$(O)$(S)s1_3$(O)$(S)s1_4$(O)$(S)s1_5$(O)$(S)s1_6$(O)
+XLOCKCOREMODEOBJS = blank$(O)$(S)bomb$(O)$(S)random$(O)
+#ifdef Hackers
+XLOCKHACKEROBJS = $(S)fadeplot$(O)
+#endif
+XLOCKOBJS = $(XLOCKCOREOBJS)$(S)$(XLOCKMODEOBJS)$(S)\
+$(XLOCKGLOBJS)$(XLOCKHACKEROBJS)$(S)$(XLOCKCOREMODEOBJS)
+XMLOCKOBJS = option$(O)$(S)xmlock$(O)
+
+BITMAPS = eyes.xbm flag.xbm ghost.xbm image.xbm life.xbm life1d.xbm \
+maze.xbm puzzle.xbm
+PIXMAPS = image.xpm puzzle.xpm
+XLOCKHDRS = xlock.h mode.h vroot.h ras.h version.h gl/buildlwo.h
+XLOCKCORESRCS = xlock$(C) passwd$(C) resource$(C) \
+utils$(C) logout$(C) mode$(C) ras$(C) xbm$(C) \
+color$(C) sound$(C)
+XLOCKMODESRCS = ant$(C) ball$(C) bat$(C) blot$(C) \
+bouboule$(C) bounce$(C) braid$(C) bug$(C) \
+clock$(C) crystal$(C) \
+daisy$(C) dclock$(C) demon$(C) drift$(C) eyes$(C) \
+flag$(C) flame$(C) forest$(C) fract$(C) \
+galaxy$(C) geometry$(C) grav$(C) \
+helix$(C) hop$(C) hyper$(C) \
+ico$(C) ifs$(C) image$(C) julia$(C) kaleid$(C) \
+laser$(C) life$(C) life1d$(C) life3d$(C) \
+lightning$(C) lisa$(C) lissie$(C) loop$(C) \
+marquee$(C) maze$(C) mountain$(C) nose$(C) \
+pacman$(C) penrose$(C) petal$(C) puzzle$(C) pyro$(C) \
+qix$(C) roll$(C) rotor$(C) \
+shape$(C) sierpinski$(C) slip$(C) sphere$(C) spiral$(C) spline$(C) \
+star$(C) strange$(C) swarm$(C) swirl$(C) \
+triangle$(C) tube$(C) turtle$(C) voters$(C)\
+wator$(C) wire$(C) world$(C) worm$(C) \
+cartoon$(C)
+XLOCKGLSRCS = escher$(C) gears$(C) morph3d$(C) superquadrics$(C) \
+buildlwo$(C) pipes$(C) pipeobjs$(C) \
+sproingies$(C) sproingiewrap$(C) buildlwo$(C) s1_b$(C) \
+s1_1$(C) s1_2$(C) s1_3$(C) s1_4$(C) s1_5$(C) s1_6$(C)
+XLOCKCOREMODESRCS = blank$(C) bomb$(C) random$(C)
+XLOCKHACKERSRCS = fadeplot$(C)
+XLOCKSRCS = $(XLOCKCORESRCS) $(XLOCKMODESRCS) $(XLOCKCOREMODESRCS) \
+$XLOCKSPROINGIESRCS) $(XLOCKHACKERSRCS)
+
+XMLOCKSRCS = option$(C) xmlock$(C)
+
+AllTarget(xlock$(E))
+#ifdef XpmLibrary
+depend:: $(BITMAPS) $(PIXMAPS)
+#else
+depend:: $(BITMAPS)
+#endif
+NormalProgramTarget(xlock$(E), $(XLOCKOBJS), $(DEPXLIB), $(LOCAL_LIBRARIES), NullParameter)
+#ifdef XmLibrary
+AllTarget(xmlock$(E))
+NormalProgramTarget(xmlock$(E), $(XMLOCKOBJS), $(DEPXLIB), $(GUILIBS), NullParameter)
+#else
+clean::
+ $(RM) xmlock$(E)
+#endif
+
+DependTarget()
+LintTarget()
+
+InstallProgram(xlock$(E),$(BINDIR))
+#ifdef XmLibrary
+InstallProgram(xmlock$(E),$(BINDIR))
+InstallAppDefaults(XmLock)
+#endif
+InstallAppDefaults(XLock)
+InstallManPage(xlock,$(MANDIR))
+
+clean::
+ $(RM) $(XLOCKGLSRCS) $(XLOCKHACKERSRCS)
+
+distclean:: clean
+ $(RM) Makefile config.status config.cache config.log config.h \
+$(BITMAPS) $(PIXMAPS)
+
+clean.all:: distclean
+
+#if ProjectX < 6
+eyes.c: eyes.xbm
+flag.c: flag.xbm
+life.c: life.xbm
+life1d.c: life1d.xbm
+maze.c: maze.xbm
+pacman.c: ghost.xbm
+#ifdef XpmLibrary
+image.c: image.xbm image.xpm
+puzzle.c: puzzle.xbm puzzle.xpm
+#else
+image.c: image.xbm
+puzzle.c: puzzle.xbm
+#endif
+#endif
+
+eyes.xbm:
+ $(RM) eyes.xbm ; $(LN_S) $(BITMAPDIR)$(EYESBITMAP).xbm eyes.xbm
+
+flag.xbm:
+ $(RM) flag.xbm ; $(LN_S) $(BITMAPDIR)$(FLAGBITMAP).xbm flag.xbm
+
+image.xbm:
+ $(RM) image.xbm ; $(LN_S) $(BITMAPDIR)$(IMAGEBITMAP).xbm image.xbm
+
+life.xbm:
+ $(RM) life.xbm ; $(LN_S) $(BITMAPDIR)$(LIFEBITMAP).xbm life.xbm
+
+life1d.xbm:
+ $(RM) life1d.xbm ; $(LN_S) $(BITMAPDIR)$(LIFE1DBITMAP).xbm life1d.xbm
+
+maze.xbm:
+ $(RM) maze.xbm ; $(LN_S) $(BITMAPDIR)$(MAZEBITMAP).xbm maze.xbm
+
+ghost.xbm:
+ $(RM) ghost.xbm ; $(LN_S) $(BITMAPDIR)$(PACMANBITMAP).xbm ghost.xbm
+
+puzzle.xbm:
+ $(RM) puzzle.xbm ; $(LN_S) $(BITMAPDIR)$(PUZZLEBITMAP).xbm puzzle.xbm
+
+image.xpm:
+ $(RM) image.xpm ; $(LN_S) $(PIXMAPDIR)$(IMAGEPIXMAP).xpm image.xpm
+
+puzzle.xpm:
+ $(RM) puzzle.xpm ; $(LN_S) $(PIXMAPDIR)$(PUZZLEPIXMAP).xpm puzzle.xpm
+
+escher$(C) : $(GLDIR)escher$(C)
+ $(RM) escher$(C) ; $(LN_S) $(GLDIR)escher$(C) escher$(C)
+
+gears$(C) : $(GLDIR)gears$(C)
+ $(RM) gears$(C) ; $(LN_S) $(GLDIR)gears$(C) gears$(C)
+
+morph3d$(C) : $(GLDIR)morph3d$(C)
+ $(RM) morph3d$(C) ; $(LN_S) $(GLDIR)morph3d$(C) morph3d$(C)
+
+superquadrics$(C) : $(GLDIR)superquadrics$(C)
+ $(RM) superquadrics$(C) ; $(LN_S) $(GLDIR)superquadrics$(C) superquadrics$(C)
+
+buildlwo$(C) : $(GLDIR)buildlwo$(C)
+ $(RM) buildlwo$(C) ; $(LN_S) $(GLDIR)buildlwo$(C) buildlwo$(C)
+
+pipes$(C) : $(GLDIR)pipes$(C)
+ $(RM) pipes$(C) ; $(LN_S) $(GLDIR)pipes$(C) pipes$(C)
+
+pipeobjs$(C) : $(GLDIR)pipeobjs$(C)
+ $(RM) pipeobjs$(C) ; $(LN_S) $(GLDIR)pipeobjs$(C) pipeobjs$(C)
+
+sproingies$(C) : $(GLDIR)sproingies$(C)
+ $(RM) sproingies$(C) ; $(LN_S) $(GLDIR)sproingies$(C) sproingies$(C)
+
+sproingiewrap$(C) : $(GLDIR)sproingiewrap$(C)
+ $(RM) sproingiewrap$(C) ; $(LN_S) $(GLDIR)sproingiewrap$(C) sproingiewrap$(C)
+
+s1_b$(C) : $(GLDIR)s1_b$(C)
+ $(RM) s1_b$(C) ; $(LN_S) $(GLDIR)s1_b$(C) s1_b$(C)
+
+s1_1$(C) : $(GLDIR)s1_1$(C)
+ $(RM) s1_1$(C) ; $(LN_S) $(GLDIR)s1_1$(C) s1_1$(C)
+
+s1_2$(C) : $(GLDIR)s1_2$(C)
+ $(RM) s1_2$(C) ; $(LN_S) $(GLDIR)s1_2$(C) s1_2$(C)
+
+s1_3$(C) : $(GLDIR)s1_3$(C)
+ $(RM) s1_3$(C) ; $(LN_S) $(GLDIR)s1_3$(C) s1_3$(C)
+
+s1_4$(C) : $(GLDIR)s1_4$(C)
+ $(RM) s1_4$(C) ; $(LN_S) $(GLDIR)s1_4$(C) s1_4$(C)
+
+s1_5$(C) : $(GLDIR)s1_5$(C)
+ $(RM) s1_5$(C) ; $(LN_S) $(GLDIR)s1_5$(C) s1_5$(C)
+
+s1_6$(C) : $(GLDIR)s1_6$(C)
+ $(RM) s1_6$(C) ; $(LN_S) $(GLDIR)s1_6$(C) s1_6$(C)
+
+fadeplot$(C) : $(HACKERDIR)fadeplot$(C)
+ $(RM) fadeplot$(C) ; $(LN_S) $(HACKERDIR)fadeplot$(C) fadeplot$(C)
+
+VER = xlockmore
+DISTVER = xlockmore-4.03
--- /dev/null
+#!/bin/sh
+
+pkgdir=$1
+[ "$pkgdir" ] || pkgdir=dist
+HERE=`pwd`
+
+echo "Installing in $HERE/pkgdir"
+echo ""
+
+./mkinstalldirs $HERE/pkgdir/usr/local/bin
+./mkinstalldirs $HERE/pkgdir/usr/local/man/man1
+./mkinstalldirs $HERE/pkgdir/usr/local/man/cat1
+./mkinstalldirs $HERE/pkgdir/usr/local/lib/X11/app-defaults
+./install-sh -c xlock $HERE/pkgdir/usr/local/bin
+./install-sh -c -m 644 xlock.man $HERE/pkgdir/usr/local/man/man1/xlock.1
+./install-sh -c -m 644 XLock.ad $HERE/pkgdir/usr/local/lib/X11/app-defaults/XLock
+ echo "install_xlock COMPLETE"
+ echo ""
+./mkinstalldirs $HERE/pkgdir/usr/local/bin
+./mkinstalldirs $HERE/pkgdir/usr/local/lib/X11/app-defaults
+./install-sh -c xmlock $HERE/pkgdir/usr/local/bin
+./install-sh -c -m 644 XmLock.ad $HERE/pkgdir/usr/local/lib/X11/app-defaults/XmLock
+ echo "install_xmlock COMPLETE"
+ echo ""
+ cd $HERE/pkgdir/usr/local/man/man1
+ nroff -man xlock.1 > ../cat1/xlock.1
+ echo "xlock man page creation COMPLETE"
+ echo ""
--- /dev/null
+# Makefile generated by imake - do not edit!
+# $XConsortium: imake.c,v 1.74 92/12/02 21:32:49 rws Exp $
+
+# -------------------------------------------------------------------------
+# Makefile generated from "Imake.tmpl" and </tmp/IIf.a006KZ>
+# $XConsortium: Imake.tmpl,v 1.160 92/11/18 14:11:25 rws Exp $
+#
+# Platform-specific parameters may be set in the appropriate <vendor>.cf
+# configuration files. Site-specific parameters should be set in the file
+# site.def. Full rebuilds are recommended if any parameters are changed.
+#
+# If your C preprocessor does not define any unique symbols, you will need
+# to set BOOTSTRAPCFLAGS when rebuilding imake (usually when doing
+# "make World" the first time).
+#
+
+# -------------------------------------------------------------------------
+# site-specific configuration parameters that need to come before
+# the platform-specific parameters - edit site.def to change
+
+# site: $XConsortium: site.def,v 1.2 91/07/30 20:26:44 rws Exp $
+
+# -------------------------------------------------------------------------
+# platform-specific configuration parameters - edit sco.cf to change
+
+#
+#
+# Copyright (C) 1983-1991 The Santa Cruz Operation, Inc.
+#
+# The information in this file is provided for the exclusive use of the
+# licensees of The Santa Cruz Operation, Inc. Such users have the right
+# to use, modify, and incorporate this code into other products for
+# purposes authorized by the license agreement provided they include this
+# notice and the associated copyright notice with any such product. The
+# information in this file is provided "AS IS" without warranty.
+#
+#
+# platform: SCO sco.cf
+
+PATH = /bin:/usr/bin:/usr/bin/X11
+
+# -------------------------------------------------------------------------
+# site-specific configuration parameters that go after
+# the platform-specific parameters - edit site.def to change
+
+# site: $XConsortium: site.def,v 1.2 91/07/30 20:26:44 rws Exp $
+
+ SHELL = /bin/sh
+
+ TOP = .
+ CURRENT_DIR = .
+
+ AR = ar clq
+ ASM = as
+ BOOTSTRAPCFLAGS = -Dsco
+ CC = cc
+ AS = as
+
+ COMPRESS = compress
+ CPP = /lib/cpp $(STD_CPP_DEFINES)
+ PREPROCESSCMD = /lib/cpp -P $(ALLDEFINES) $(STD_CPP_DEFINES)
+ INSTALL = /usr/bin/X11/scoinst
+ LD = ld
+ LEX = lex
+ YACC = yacc
+ LINT = lint
+ LINTLIBFLAG = -o
+ LINTOPTS = -ax
+ LN = ln
+ MAKE = make
+ MV = mv
+ CP = cp
+
+ RM = rm -f
+ ASM_INCLUDES =
+ TROFF = psroff
+ MSMACROS = -ms
+ TBL = tbl
+ EQN = eqn
+ STD_INCLUDES =
+ STD_CPP_DEFINES = -Dsco -DSYSV
+ STD_DEFINES = -Dsco -DSYSV
+ EXTRA_LOAD_FLAGS =
+ EXTRA_LDOPTIONS =
+ EXTRA_LIBRARIES = -lsocket -lmalloc
+ TAGS = ctags
+
+ MFLAGS = -$(MAKEFLAGS)
+
+ PROTO_DEFINES =
+
+ INSTPGMFLAGS =
+
+ INSTBINFLAGS = -m 0755
+ INSTUIDFLAGS = -m 4755
+ INSTLIBFLAGS = -m 0644
+ INSTINCFLAGS = -m 0444
+ INSTMANFLAGS = -m 0444
+ INSTDATFLAGS = -m 0444
+ INSTKMEMFLAGS = -m 4755
+
+ ASMDEBUGFLAGS =
+ ASM_DEFINES =
+ CDEBUGFLAGS =
+ CCOPTIONS =
+
+ ALLINCLUDES = $(INCLUDES) $(EXTRA_INCLUDES) $(TOP_INCLUDES) $(STD_INCLUDES)
+ ALLDEFINES = $(ALLINCLUDES) $(STD_DEFINES) $(EXTRA_DEFINES) $(PROTO_DEFINES) $(DEFINES)
+ ASMFLAGS = $(ASMDEBUGFLAGS) $(ASM_DEFINES) $(ASM_INCLUDES)
+ CFLAGS = $(CDEBUGFLAGS) $(CCOPTIONS) $(ALLDEFINES)
+ LINTFLAGS = $(LINTOPTS) -DLINT $(ALLDEFINES)
+
+ LDLIBS = $(SYS_LIBRARIES) $(EXTRA_LIBRARIES)
+
+ LDOPTIONS = $(CDEBUGFLAGS) $(CCOPTIONS) $(EXTRA_LDOPTIONS) $(LOCAL_LDFLAGS)
+
+ LDCOMBINEFLAGS = -X -r
+ DEPENDFLAGS =
+
+ MACROFILE = sco.cf
+ RM_CMD = $(RM) *.CKP *.ln *.BAK *.bak *.o core errs ,* *~ *.a .emacs_* tags TAGS make.log MakeOut
+
+ IMAKE_DEFINES =
+
+ IRULESRC = $(CONFIGDIR)
+ IMAKE_CMD = $(IMAKE) -DUseInstalled -I$(IRULESRC) $(IMAKE_DEFINES)
+
+ ICONFIGFILES = $(IRULESRC)/Imake.tmpl $(IRULESRC)/Imake.rules \
+ $(IRULESRC)/Project.tmpl $(IRULESRC)/site.def \
+ $(IRULESRC)/$(MACROFILE) \
+ $(EXTRA_ICONFIGFILES)
+
+# -------------------------------------------------------------------------
+# X Window System Build Parameters
+# $XConsortium: Project.tmpl,v 1.157 93/06/24 10:51:47 dpw Exp $
+
+# -------------------------------------------------------------------------
+# X Window System make variables; this need to be coordinated with rules
+
+ PATHSEP = /
+ USRLIBDIR = /usr/lib
+ SHLIBDIR = /usr/lib
+ BINDIR = /usr/bin/X11
+ INCROOT = /usr/include
+ BUILDINCROOT = $(TOP)
+ BUILDINCDIR = $(BUILDINCROOT)/X11
+ BUILDINCTOP = ..
+ INCDIR = $(INCROOT)/X11
+ ADMDIR = /usr/adm
+ LIBDIR = $(USRLIBDIR)/X11
+ CONFIGDIR = $(LIBDIR)/config
+ LINTLIBDIR = $(USRLIBDIR)/lint
+
+ FONTDIR = $(LIBDIR)/fonts
+ XINITDIR = $(LIBDIR)/xinit
+ XDMDIR = $(LIBDIR)/xdm
+ TWMDIR = $(LIBDIR)/twm
+ MANPATH = /usr/man
+ MANSOURCEPATH = $(MANPATH)/man
+ MANSUFFIX = n
+ LIBMANSUFFIX = 3
+ MANDIR = $(MANSOURCEPATH)$(MANSUFFIX)
+ LIBMANDIR = $(MANSOURCEPATH)$(LIBMANSUFFIX)
+ NLSDIR = $(LIBDIR)/nls
+ PEXAPIDIR = $(LIBDIR)/PEX
+ XAPPLOADDIR = $(LIBDIR)/app-defaults
+ FONTCFLAGS = -t
+
+ INSTAPPFLAGS = $(INSTDATFLAGS)
+
+ IMAKE = imake
+ DEPEND = makedepend
+ RGB = rgb
+
+ FONTC = bdftopcf
+
+ MKFONTDIR = mkfontdir
+ MKDIRHIER = /bin/sh $(BINDIR)/mkdirhier
+
+ CONFIGSRC = $(TOP)/config
+ DOCUTILSRC = $(TOP)/doc/util
+ CLIENTSRC = $(TOP)/clients
+ DEMOSRC = $(TOP)/demos
+ LIBSRC = $(TOP)/lib
+ FONTSRC = $(TOP)/fonts
+ INCLUDESRC = $(TOP)/X11
+ SERVERSRC = $(TOP)/server
+ UTILSRC = $(TOP)/util
+ SCRIPTSRC = $(UTILSRC)/scripts
+ EXAMPLESRC = $(TOP)/examples
+ CONTRIBSRC = $(TOP)/../contrib
+ DOCSRC = $(TOP)/doc
+ RGBSRC = $(TOP)/rgb
+ DEPENDSRC = $(UTILSRC)/makedepend
+ IMAKESRC = $(CONFIGSRC)
+ XAUTHSRC = $(LIBSRC)/Xau
+ XLIBSRC = $(LIBSRC)/X
+ XMUSRC = $(LIBSRC)/Xmu
+ TOOLKITSRC = $(LIBSRC)/Xt
+ AWIDGETSRC = $(LIBSRC)/Xaw
+ OLDXLIBSRC = $(LIBSRC)/oldX
+ XDMCPLIBSRC = $(LIBSRC)/Xdmcp
+
+ BDFTOPCFSRC = $(FONTSRC)/clients/bdftopcf
+
+ MKFONTDIRSRC = $(FONTSRC)/clients/mkfontdir
+ FSLIBSRC = $(FONTSRC)/lib/fs
+ FONTSERVERSRC = $(FONTSRC)/server
+ EXTENSIONSRC = $(TOP)/extensions
+ XILIBSRC = $(EXTENSIONSRC)/lib/xinput
+ XTESTLIBSRC = $(EXTENSIONSRC)/lib/xtest
+ PEXLIBSRC = $(EXTENSIONSRC)/lib/PEXlib
+ PHIGSLIBSRC = $(EXTENSIONSRC)/lib/PEX
+
+ DEPEXTENSIONLIB = $(USRLIBDIR)/libXext.a
+ EXTENSIONLIB = -lXext
+
+ DEPXLIB = $(DEPEXTENSIONLIB) $(USRLIBDIR)/libX11.a
+ XLIBONLY = -lX11
+ XLIB = $(EXTENSIONLIB) $(XLIBONLY) $(SCOMALLOC)
+
+ DEPXAUTHLIB = $(USRLIBDIR)/libXau.a
+ XAUTHLIB = -lXau
+ DEPXDMCPLIB = $(USRLIBDIR)/libXdmcp.a
+ XDMCPLIB = -lXdmcp
+
+ DEPXMULIB = $(USRLIBDIR)/libXmu.a
+ XMULIB = -lXmu
+
+ DEPOLDXLIB = $(USRLIBDIR)/liboldX.a
+ OLDXLIB = -loldX
+
+ DEPXTOOLLIB = $(USRLIBDIR)/libXt.a
+ XTOOLLIB = -lXt
+
+ DEPXAWLIB = $(USRLIBDIR)/libXaw.a
+ XAWLIB = -lXaw
+
+ DEPXILIB = $(USRLIBDIR)/libXi.a
+ XILIB = -lXi
+
+ DEPXTESTLIB = $(USRLIBDIR)/libXtst.a
+ XTESTLIB = -lXtst
+
+ DEPPEXLIB = $(USRLIBDIR)/libPEX5.a
+ PEXLIB = -lPEX5
+
+ DEPPHIGSLIB = $(USRLIBDIR)/libphigs.a
+ PHIGSLIB = -lphigs
+
+ DEPXBSDLIB = $(USRLIBDIR)/libXbsd.a
+ XBSDLIB = -lXbsd
+
+ LINTEXTENSIONLIB = $(LINTLIBDIR)/llib-lXext.ln
+ LINTXLIB = $(LINTLIBDIR)/llib-lX11.ln
+ LINTXMU = $(LINTLIBDIR)/llib-lXmu.ln
+ LINTXTOOL = $(LINTLIBDIR)/llib-lXt.ln
+ LINTXAW = $(LINTLIBDIR)/llib-lXaw.ln
+ LINTXI = $(LINTLIBDIR)/llib-lXi.ln
+ LINTPEX = $(LINTLIBDIR)/llib-lPEX5.ln
+ LINTPHIGS = $(LINTLIBDIR)/llib-lphigs.ln
+
+# $RCSfile: Motif.tmpl.ixi.install,v $ $Revision: 11.1 $ $Date: 1994/07/12 16:46:05 $
+
+ XTOP = $(TOP)
+ MTOP = $(TOP)
+ XBUILDINCROOT = $(XTOP)
+ XBUILDINCDIR = $(XBUILDINCROOT)/X11
+
+ CLIENTSRC = $(XTOP)/clients
+ DEMOSRC = $(XTOP)/demos
+ LIBSRC = $(XTOP)/lib
+ FONTSRC = $(XTOP)/fonts
+ INCLUDESRC = $(XTOP)/X11
+ SERVERSRC = $(XTOP)/server
+ UTILSRC = $(XTOP)/util
+ EXAMPLESRC = $(XTOP)/examples
+ DOCSRC = $(XTOP)/doc
+ RGBSRC = $(XTOP)/rgb
+ EXTENSIONSRC = $(XTOP)/extensions
+
+ UIL_INCLUDES = -I$(USRINCDIR)/uil
+
+ USRINCDIR = /usr/include
+ UIDDIR = $(LIBDIR)/uid
+ TESTSRC = $(MTOP)/tests
+ TESTLIB = $(TESTSRC)/lib
+ GENERALSRCLIB = $(TESTSRC)/General/lib
+ GENERALSRCBIN = $(TESTSRC)/General/bin
+ MANUALSRCLIB = $(TESTSRC)/Manual/lib
+ MANUALSRCBIN = $(TESTSRC)/Manual/bin
+ AUTOSRCLIB = $(TESTSRC)/Auto/lib
+ AUTOSRCBIN = $(TESTSRC)/Auto/bin
+ COMMONPP = $(GENERALSRCBIN)/Commonpp
+ GENRUN = $(GENERALSRCBIN)/Genrun
+ MANRUN = $(GENERALSRCBIN)/Manrun
+
+ TESTCOMSRC = $(AUTOSRCLIB)/Common
+ AUTOSCRIPTSRC = $(AUTOSRCLIB)/Script
+ AUTOSYNTHSRC = $(AUTOSRCLIB)/Synth
+ AUTOCREATESRC = $(AUTOSRCLIB)/Create
+ AUTOVISUALSRC = $(AUTOSRCLIB)/Visual
+ AUTOUTILSRC = $(AUTOSRCLIB)/Util
+ AUTOEXTRALIBS = -ll -ly -lm
+
+ MTOOLKITSRC = $(TOOLKITSRC)
+ MINCLUDESRC = $(MTOP)/X11
+ MLIBSRC = $(MTOP)/lib
+ MCLIENTSRC = $(MTOP)/clients
+ MDEMOSRC = $(MTOP)/demos
+ MWIDGETSRC = $(MLIBSRC)/Xm
+ MRESOURCESRC = $(MLIBSRC)/Mrm
+ UILSRC = $(MCLIENTSRC)/uil
+
+ UIL = uil
+ DEPUIL = $(BINDIR)/uil
+
+ XMEXTRA_LIBS = $(XMULIB)
+
+DEPXMLIB = $(USRLIBDIR)/libXm.a
+ XMLIB = -lXm
+
+DEPMRESOURCELIB = $(USRLIBDIR)/libMrm.a
+ MRESOURCELIB = -lMrm
+
+DEPUILLIB = $(USRLIBDIR)/libUil.a
+ UILLIB = -lUil
+
+DEPTESTCOMLIB = $(USRLIBDIR)/libCommon.a
+ TESTCOMLIB = -lCommon
+
+DEPAUTOSCRIPTLIB = $(USRLIBDIR)/libScript.a
+ AUTOSCRIPTLIB = -lScript
+
+DEPAUTOSYNTHLIB = $(USRLIBDIR)/libSynth.a
+ AUTOSYNTHLIB = -lSynth
+
+DEPAUTOCREATELIB = $(USRLIBDIR)/libCreate.a
+ AUTOCREATELIB = -lCreate
+
+DEPAUTOVISUALLIB = $(USRLIBDIR)/libVisual.a
+ AUTOVISUALLIB = -lVisual
+
+DEPAUTOUTILLIB = $(USRLIBDIR)/libUtil.a
+ AUTOUTILLIB = -lUtil
+
+ LINTMRESOURCE = $(MRESOURCESRC)/libMrm.a
+LINTXMWIDGETLIB = $(MWIDGETSRC)/llib-l/Xm.ln
+ LINTXMTOOL = $(MTOOLKITSRC)/llib-lXt.ln
+ LINTUILLIB = $(UILSRC)/llib-lUil.ln
+
+ YACCFLAGS =
+ UILFLAGS =
+
+ RM_CMD = $(RM) *.CKP *.ln *.BAK *.bak *.o core errs ,* *~ *.a .emacs_* tags TAGS make.log MakeOut *.Dat *.Scr
+
+ STD_DEFINES = -Dsco -DSYSV
+
+# -------------------------------------------------------------------------
+# Imake rules for building libraries, programs, scripts, and data files
+# rules: $XConsortium: Imake.rules,v 1.129 92/05/29 17:01:19 rws Exp $
+
+# $RCSfile: Motif.rules,v $ $Revision: 11.1 $ $Date: 1994/07/12 16:46:02 $
+
+# -------------------------------------------------------------------------
+# start of Imakefile
+
+# @(#)Imakefile 4.03 97/04/30 xlockmore
+#
+# Define these now or down further below, see below for explaination.
+
+# #define DtSaverLibrary
+# #define RplayLibrary
+# #define NasLibrary
+# #define Hackers
+
+PATH=/bin:/usr/bin:/usr/bin/X11:/usr/local/bin
+
+N=
+C=.c
+# C++
+# C=.cc
+O=.o
+# VMS
+# O=.obj
+S=$(N) $(N)
+# VMS
+# S=,
+E=
+# VMS
+# E=.exe
+
+# please define
+# C as the C source code extension
+# O as the object extension
+# S as the separator for object code
+# E as the executable extension
+
+LN_S = $(LN)
+
+# CC = cc
+# CC = acc
+# CC = CC
+# CC = gcc -Wall
+# CC = g++ -Wall
+CC = gcc -melf
+
+# *** BEGIN XPM CONFIG SECTION ***
+
+# Only the image.c and bat.c modes use this.
+# If your system has libXpm, remove the 'XCOMM ' from the next line.
+# #define
+
+ XPMDEF = -DUSE_XPM
+# Use the following if your xpm.h file is not in an X11 directory
+# XPMDEF = -DUSE_XPMINC
+
+# If you get an error "Cannot find xpm.h" while compiling, set
+# XPMINC to the directory X11/xpm.h is in. Below is a guess.
+ XPMINC = -I/u/rr/src/lib/xpm-3.4j
+# SGI's ViewKit (use with -DUSE_XPMINC)
+# XPMINC = -I/usr/include/Vk
+
+# If you get an error "Cannot find libXpm" while linking, set XPMLIBPATH
+# to the directory libXpm.* is in. Below is a guess.
+ XPMLIB = /u/rr/src/lib/xpm-3.4j/lib/libXpm.a
+
+# *** END XPM CONFIG SECTION ***
+
+# *** BEGIN XM CONFIG SECTION ***
+
+# Only options.c and xmlock.c uses Motif.
+# You must copy it out of the hackers directory.
+# It is there because it is experimental.
+# If your system has libXm, remove the 'XCOMM ' from the next line.
+# #define
+
+# If its not with your X11 stuff you should set the following
+# MOTIFHOME = /usr/local
+# MOTIFHOME = /usr/dt
+
+# If you get an error "Cannot find Xm/PanedW.h" while compiling, set
+# XMINC to the directory Xm/PanedW.h is in. Below is a guess.
+# XMINC = -I$(MOTIFHOME)/include
+
+# If you get an error "Cannot find libXm" while linking, set XMLIBPATH
+# to the directory libXm.* is in. Below is a guess.
+# XMLIB = -L$(MOTIFHOME)/lib -lXm
+ XMLIB = -lXm
+
+# Debugging with editres
+# EDITRESDEF = -DUSE_XMU
+# EDITRESLIB = -lXmu
+
+# *** END XM CONFIG SECTION ***
+
+# *** BEGIN MESAGL CONFIG SECTION ***
+
+# escher, gears, morph3d, pipes, superquadrics, sproingies modes use this.
+# If your system has libMesaGL & widgets,
+# remove the 'XCOMM ' from the next line.
+# #define
+
+ GLDEF = -DUSE_GL
+
+# If you get an error "Cannot find GL/gl.h" while compiling, set
+# GLINC to the directory GL/gl.h is in.
+ GLINC = -I/u/rr/src/lib/Mesa-2.3/include
+
+# If you get an error "Cannot find libMesaGL" while linking, set GLLIBPATH
+# to the directory libMesaGL.* is in. Below is a guess.
+ GLLIB = /u/rr/src/lib/Mesa-2.3/lib/libMesaGL.a /u/rr/src/lib/Mesa-2.3/lib/libMesaGLU.a
+# On SGI
+# GLLIB = lGL -lGLU -lgl
+
+# *** END MESAGL CONFIG SECTION ***
+
+# *** BEGIN CDE DT CONFIG SECTION ***
+
+# COMMON DESKTOP ENVIRONMENT
+# if your system has libDtSvc, remove the 'XCOMM ' from the next line
+# #define DtSaverLibrary
+
+# *** END CDE DT CONFIG SECTION ***
+
+# *** BEGIN SOUND CONFIG SECTION ***
+
+# Only xlock.c and resource.c use this
+# if your system has these sound libraries, remove the 'XCOMM '
+# #define RplayLibrary
+# #define NasLibrary
+
+# system play (optional software)
+# SUNOS 4.1.3
+# DEF_PLAY = "/usr/demo/SOUND/play /usr/local/share/sounds/xlock/"
+# IRIX 5.3
+# DEF_PLAY = "/usr/sbin/sfplay /usr/local/share/sounds/xlock/"
+# Digital Unix with Multimedia Services installed:
+# DEF_PLAY = "/usr/bin/mme/decsound -play /usr/local/share/sounds/xlock/"
+# LINUX and others (see config directory)
+# DEF_PLAY = "/usr/local/bin/play.sh /usr/local/share/sounds/xlock/"
+# Uncomment line below if you have one of the above
+# SOUNDDEF = -DDEF_PLAY=\"$(DEF_PLAY)\"
+
+# *** END SOUND CONFIG SECTION ***
+
+# *** BEGIN RNG CONFIG SECTION ***
+
+# Uncomment to use your system's Random Number Generator
+# They usually come in 3 types
+
+# Uncomment to use high-precision (but expensive) RNG
+# SRANDDEF = -DSRAND=srand48
+# LRANDDEF = -DLRAND=lrand48
+
+# SRANDDEF = -DSRAND=srandom
+# LRANDDEF = -DLRAND=random
+
+# Least desirable RNG
+# SRANDDEF = -DSRAND=srand
+# LRANDDEF = -DLRAND=rand
+
+# Normally use the above with (default)
+# MAXRANDDEF = -DMAXRAND=2147483648.0
+# Use the following if using srand/rand and NOT AIXV3
+# MAXRANDDEF = -DMAXRAND=32767.0
+RANDDEF = $(SRANDDEF) $(LRANDDEF) $(MAXRANDDEF)
+
+# *** END RNG CONFIG SECTION ***
+
+# *** BEGIN EXTRA MODES CONFIG SECTION ***
+
+# Uncomment to use sproingies mode. It may be slow on certain machines.
+
+# Uncomment to use hackers modes. It may make xlock unstable.
+# Please do not uncomment for precompiled distributions.
+# #define Hackers
+
+# *** END EXTRA MODES CONFIG SECTION ***
+
+ BITMAPDIR = ./bitmaps/
+ PIXMAPDIR = ./pixmaps/
+ CONFIGDIR = ./config/
+ GLDIR = ./glx/
+ HACKERDIR = ./hackers/
+
+# KERBEROS
+# Kerberbos ver. 4
+# PASSWDDEF = -DHAVE_KRB4
+# PASSWDINC = -I/usr/athena/include
+# PASSWDLIB = -L/usr/athena/lib -lkrb -ldes -lresolv
+#
+# Kerberos ver. 5 (good with b6)
+# PASSWDDEF = -DHAVE_KRB5
+# PASSWDINC = -I/opt/krb5/include
+# PASSWDLIB = -L/opt/krb5/lib -lkrb5 -lcrypto -lcom_err
+
+# DCE authentication (tested only on HP's)
+# PASSWDDEF = -DDCE_PASSWD
+# PASSWDINC = -I/usr/include/reentrant
+# PASSWDLIB = -ldce -lc_r
+
+ PASSWDDEF = -DHAVE_SHADOW -DSVR4
+
+# Use this if your site is using OSF Enhanced Security:
+# PASSWDDEF = -DOSF1_ENH_SEC
+# PASSWDLIB = -lsecurity
+# INSTPGMFLAGS = -g auth -m 2111
+ BITMAPTYPE = x11
+ PIXMAPTYPE = x11
+
+# -DUSE_VROOT Allows xlock to run in root window (some
+# window managers have problems)
+# -DALWAYS_ALLOW_ROOT Users can not turn off allowroot
+# -DUSE_SYSLOG Paranoid administrator option (a check is also
+# done to see if you have it)
+# -DUSE_MULTIPLE_ROOT Multiple root users ... security?
+# -DUSE_MOUSE_MOTION Password screen displayed with mouse motion
+# -DUSE_OLD_EVENT_LOOP Some machines may still need this (fd_set
+# errors may be a sign)
+# -DUSE_VMSUTILS This patches up old __VMS_VER < 70000000
+#
+# For personal use you may want to consider:
+# -DUSE_XLOCKRC paranoid admin or unknown shadow passwd alg
+#
+# For labs you may want to consider:
+# -DUSE_AUTO_LOGOUT=240 Enable auto-logout and set deadline (minutes)
+# -DDEF_AUTO_LOGOUT=\"120\" Set default auto-logout deadline (minutes)
+# -DUSE_BUTTON_LOGOUT=10 Enable logout button and set when to appear (min)
+# -DDEF_BUTTON_LOGOUT=\"5\" Set default logout button (min)
+# -DUSE_BOMB Enable automatic logout mode (does not come up
+# in random mode)
+# -DCLOSEDOWN_LOGOUT Use with USE_AUTO_LOGOUT, USE_BUTTON_LOGOUT,
+# USE_BOMB if using xdm
+# -DSESSION_LOGOUT Alternate of above
+# -DSTAFF_FILE=\"/etc/xlock.staff\" File of staff who are exempt
+# -DSTAFF_NETGROUP=\"/etc/xlock.netgroup\" Netgroup that is exempt
+
+# May have to combine in one long line if "+=" does not work
+ OPTDEF = -DUSE_VROOT -DALWAYS_ALLOW_ROOT -DUSE_BOMB
+# OPTDEF += -DUSE_SYSLOG -DSYSLOG_FACILITY=LOG_AUTH
+# OPTDEF += -DSYSLOG_WARNING=LOG_WARNING
+# OPTDEF += -DSYSLOG_NOTICE=LOG_NOTICE -DSYSLOG_INFO=LOG_INFO
+# OPTDEF += -DUSE_MOUSE_MOTION
+# OPTDEF += -DUSE_MULTIPLE_ROOT
+# OPTDEF += -DUSE_OLD_EVENT_LOOP
+# OPTDEF += -DUSE_XLOCKRC
+# OPTDEF += -DUSE_AUTO_LOGOUT=240
+# OPTDEF += -DDEF_AUTO_LOGOUT=\"120\"
+# OPTDEF += -DUSE_BUTTON_LOGOUT=10
+# OPTDEF += -DDEF_BUTTON_LOGOUT=\"5\"
+# OPTDEF += -DCLOSEDOWN_LOGOUT
+# OPTDEF += -DSESSION_LOGOUT
+# OPTDEF += -DSTAFF_FILE=\"/etc/xlock.staff\"
+# OPTDEF += -DSTAFF_NETGROUP=\"/etc/xlock.netgroup\"
+
+# Here is your chance to override the default icon:
+# TINYBITMAP = $(BITMAPTYPE)
+TINYBITMAP = t-x11
+SMALLBITMAP = s-$(BITMAPTYPE)
+MEDIUMBITMAP = m-$(BITMAPTYPE)
+LARGEBITMAP = l-$(BITMAPTYPE)
+MEDIUMPIXMAP = m-$(PIXMAPTYPE)
+LARGEPIXMAP = l-$(PIXMAPTYPE)
+
+# EYESBITMAP = $(MEDIUMBITMAP)
+EYESBITMAP = m-grelb
+FLAGBITMAP = $(MEDIUMBITMAP)
+IMAGEBITMAP = $(MEDIUMBITMAP)
+# IMAGEBITMAP = l-bob #Slackware icon
+# IMAGEBITMAP = m-xlock #XLock icon
+# LIFEBITMAP = $(SMALLBITMAP)
+LIFEBITMAP = s-grelb
+LIFE1DBITMAP = $(TINYBITMAP)
+MAZEBITMAP = $(LARGEBITMAP)
+# MAZEBITMAP = m-xlock
+# PACMANBITMAP = $(MEDIUMBITMAP)
+PACMANBITMAP = m-ghost
+# PUZZLEBITMAP = $(LARGEBITMAP)
+PUZZLEBITMAP = l-xlock
+# PUZZLEBITMAP = l-linux
+IMAGEPIXMAP = $(MEDIUMPIXMAP)
+# IMAGEPIXMAP = m-xlock
+# PUZZLEPIXMAP = $(LARGEPIXMAP)
+PUZZLEPIXMAP = l-xlock
+# PUZZLEPIXMAP = l-linux
+
+ DEFINES = -DDEF_FILESEARCHPATH=\"$(LIBDIR)/%T/%N%S\" \
+$(SYSTEMDEF) $(EDITRESDEF) $(SLEEPDEF) $(OPTDEF) $(RANDDEF) $(HACKERDEF) \
+$(PASSWDDEF) $(XMINC) $(XPMDEF) $(GLDEF) $(DTSAVERDEF) $(SOUNDDEF) \
+$(PASSWDINC) $(XPMINC) $(GLINC) $(DTSAVERINC) $(SOUNDINC)
+
+ DEPLIBS = $(DEPXLIB)
+LOCAL_LIBRARIES = $(XLIB) $(XPMLIB) $(GLLIB) $(DTSAVERLIB) $(SOUNDLIB)
+ GUILIBS = $(XMLIB) $(EDITRESLIB) -lXt $(XLIB) $(SMLIB) $(ICELIB)
+ LINTLIBS = $(LINTXLIB)
+
+ SYS_LIBRARIES = $(CRYPTLIB) $(PASSWDLIB) -lm
+
+XLOCKCOREOBJS = xlock$(O)$(S)passwd$(O)$(S)resource$(O)$(S)\
+utils$(O)$(S)logout$(O)$(S)mode$(O)$(S)\
+ras$(O)$(S)xbm$(O)$(S)color$(O)$(S)sound$(O)
+XLOCKMODEOBJS = ant$(O)$(S)ball$(O)$(S)bat$(O)$(S)blot$(O)$(S)\
+bouboule$(O)$(S)bounce$(O)$(S)braid$(O)$(S)bug$(O)$(S)\
+clock$(O)$(S)crystal$(O)$(S)\
+daisy$(O)$(S)dclock$(O)$(S)demon$(O)$(S)drift$(O)$(S)eyes$(O)$(S)\
+flag$(O)$(S)flame$(O)$(S)forest$(O)$(S)fract$(O)$(S)\
+galaxy$(O)$(S)geometry$(O)$(S)grav$(O)$(S)\
+helix$(O)$(S)hop$(O)$(S)hyper$(O)$(S)\
+ico$(O)$(S)ifs$(O)$(S)image$(O)$(S)julia$(O)$(S)kaleid$(O)$(S)\
+laser$(O)$(S)life$(O)$(S)life1d$(O)$(S)life3d$(O)$(S)\
+lightning$(O)$(S)lisa$(O)$(S)lissie$(O)$(S)loop$(O)$(S)\
+marquee$(O)$(S)maze$(O)$(S)mountain$(O)$(S)nose$(O)$(S)\
+pacman$(O)$(S)penrose$(O)$(S)petal$(O)$(S)puzzle$(O)$(S)pyro$(O)$(S)\
+qix$(O)$(S)roll$(O)$(S)rotor$(O)$(S)\
+shape$(O)$(S)sierpinski$(O)$(S)slip$(O)$(S)\
+sphere$(O)$(S)spiral$(O)$(S)spline$(O)$(S)\
+star$(O)$(S)strange$(O)$(S)swarm$(O)$(S)swirl$(O)$(S)\
+triangle$(O)$(S)tube$(O)$(S)turtle$(O)$(S)voters$(O)$(S)\
+wator$(O)$(S)wire$(O)$(S)world$(O)$(S)worm$(O)$(S)\
+cartoon$(O)
+XLOCKGLOBJS = escher$(O)$(S)gears$(O)$(S)morph3d$(O)$(S)superquadrics$(O)$(S)\
+buildlwo$(O)$(S)pipes$(O)$(S)pipeobjs$(O)$(S)\
+sproingies$(O)$(S)sproingiewrap$(O)$(S)s1_b$(O)$(S)\
+s1_1$(O)$(S)s1_2$(O)$(S)s1_3$(O)$(S)s1_4$(O)$(S)s1_5$(O)$(S)s1_6$(O)
+XLOCKCOREMODEOBJS = blank$(O)$(S)bomb$(O)$(S)random$(O)
+
+XLOCKOBJS = $(XLOCKCOREOBJS)$(S)$(XLOCKMODEOBJS)$(S)\
+$(XLOCKGLOBJS)$(XLOCKHACKEROBJS)$(S)$(XLOCKCOREMODEOBJS)
+XMLOCKOBJS = option$(O)$(S)xmlock$(O)
+
+BITMAPS = eyes.xbm flag.xbm ghost.xbm image.xbm life.xbm life1d.xbm \
+maze.xbm puzzle.xbm
+PIXMAPS = image.xpm puzzle.xpm
+XLOCKHDRS = xlock.h mode.h vroot.h ras.h version.h gl/buildlwo.h
+XLOCKCORESRCS = xlock$(C) passwd$(C) resource$(C) \
+utils$(C) logout$(C) mode$(C) ras$(C) xbm$(C) \
+color$(C) sound$(C)
+XLOCKMODESRCS = ant$(C) ball$(C) bat$(C) blot$(C) \
+bouboule$(C) bounce$(C) braid$(C) bug$(C) \
+clock$(C) crystal$(C) \
+daisy$(C) dclock$(C) demon$(C) drift$(C) eyes$(C) \
+flag$(C) flame$(C) forest$(C) fract$(C) \
+galaxy$(C) geometry$(C) grav$(C) \
+helix$(C) hop$(C) hyper$(C) \
+ico$(C) ifs$(C) image$(C) julia$(C) kaleid$(C) \
+laser$(C) life$(C) life1d$(C) life3d$(C) \
+lightning$(C) lisa$(C) lissie$(C) loop$(C) \
+marquee$(C) maze$(C) mountain$(C) nose$(C) \
+pacman$(C) penrose$(C) petal$(C) puzzle$(C) pyro$(C) \
+qix$(C) roll$(C) rotor$(C) \
+shape$(C) sierpinski$(C) slip$(C) sphere$(C) spiral$(C) spline$(C) \
+star$(C) strange$(C) swarm$(C) swirl$(C) \
+triangle$(C) tube$(C) turtle$(C) voters$(C)\
+wator$(C) wire$(C) world$(C) worm$(C) \
+cartoon$(C)
+XLOCKGLSRCS = escher$(C) gears$(C) morph3d$(C) superquadrics$(C) \
+buildlwo$(C) pipes$(C) pipeobjs$(C) \
+sproingies$(C) sproingiewrap$(C) buildlwo$(C) s1_b$(C) \
+s1_1$(C) s1_2$(C) s1_3$(C) s1_4$(C) s1_5$(C) s1_6$(C)
+XLOCKCOREMODESRCS = blank$(C) bomb$(C) random$(C)
+XLOCKHACKERSRCS = fadeplot$(C)
+XLOCKSRCS = $(XLOCKCORESRCS) $(XLOCKMODESRCS) $(XLOCKCOREMODESRCS) \
+$XLOCKSPROINGIESRCS) $(XLOCKHACKERSRCS)
+
+XMLOCKSRCS = option$(C) xmlock$(C)
+
+all:: xlock$(E)
+
+depend:: $(BITMAPS) $(PIXMAPS)
+
+xlock$(E): $(XLOCKOBJS) $(DEPXLIB)
+ if [ -f $@ ]; then $(RM) $@~; $(MV) $@ $@~; fi
+ $(CC) -o $@ $(XLOCKOBJS) $(LDOPTIONS) $(LOCAL_LIBRARIES) $(LDLIBS) $(EXTRA_LOAD_FLAGS)
+
+clean::
+ $(RM) xlock$(E)
+
+all:: xmlock$(E)
+
+xmlock$(E): $(XMLOCKOBJS) $(DEPXLIB)
+ if [ -f $@ ]; then $(RM) $@~; $(MV) $@ $@~; fi
+ $(CC) -o $@ $(XMLOCKOBJS) $(LDOPTIONS) $(GUILIBS) $(LDLIBS) $(EXTRA_LOAD_FLAGS)
+
+clean::
+ $(RM) xmlock$(E)
+
+depend::
+ $(DEPEND) $(DEPENDFLAGS) -s "# DO NOT DELETE" -- $(ALLDEFINES) $(DEPEND_DEFINES) -- $(SRCS)
+
+lint:
+ $(LINT) $(LINTFLAGS) $(SRCS) $(LINTLIBS)
+lint1:
+ $(LINT) $(LINTFLAGS) $(FILE) $(LINTLIBS)
+
+install:: xlock$(E)
+ @if [ -d $(DESTDIR)$(BINDIR) ]; then set +x; \
+ else (set -x; $(MKDIRHIER) $(DESTDIR)$(BINDIR)); fi
+ $(INSTALL) -c $(INSTPGMFLAGS) xlock$(E) $(DESTDIR)$(BINDIR)
+
+install:: xmlock$(E)
+ @if [ -d $(DESTDIR)$(BINDIR) ]; then set +x; \
+ else (set -x; $(MKDIRHIER) $(DESTDIR)$(BINDIR)); fi
+ $(INSTALL) -c $(INSTPGMFLAGS) xmlock$(E) $(DESTDIR)$(BINDIR)
+
+install:: XmLock.ad
+ @if [ -d $(DESTDIR)$(XAPPLOADDIR) ]; then set +x; \
+ else (set -x; $(MKDIRHIER) $(DESTDIR)$(XAPPLOADDIR)); fi
+ $(INSTALL) -c $(INSTAPPFLAGS) XmLock.ad $(DESTDIR)$(XAPPLOADDIR)/XmLock
+
+install:: XLock.ad
+ @if [ -d $(DESTDIR)$(XAPPLOADDIR) ]; then set +x; \
+ else (set -x; $(MKDIRHIER) $(DESTDIR)$(XAPPLOADDIR)); fi
+ $(INSTALL) -c $(INSTAPPFLAGS) XLock.ad $(DESTDIR)$(XAPPLOADDIR)/XLock
+
+install.man:: xlock.man
+ @if [ -d $(DESTDIR)$(MANDIR) ]; then set +x; \
+ else (set -x; $(MKDIRHIER) $(DESTDIR)$(MANDIR)); fi
+ $(INSTALL) -c $(INSTMANFLAGS) xlock.man $(DESTDIR)$(MANDIR)/xlock.$(MANSUFFIX)
+
+clean::
+ $(RM) $(XLOCKGLSRCS) $(XLOCKHACKERSRCS)
+
+distclean:: clean
+ $(RM) Makefile config.status config.cache config.log config.h \
+$(BITMAPS) $(PIXMAPS)
+
+clean.all:: distclean
+
+eyes.c: eyes.xbm
+flag.c: flag.xbm
+life.c: life.xbm
+life1d.c: life1d.xbm
+maze.c: maze.xbm
+pacman.c: ghost.xbm
+
+image.c: image.xbm image.xpm
+puzzle.c: puzzle.xbm puzzle.xpm
+
+eyes.xbm:
+ $(RM) eyes.xbm ; $(LN_S) $(BITMAPDIR)$(EYESBITMAP).xbm eyes.xbm
+
+flag.xbm:
+ $(RM) flag.xbm ; $(LN_S) $(BITMAPDIR)$(FLAGBITMAP).xbm flag.xbm
+
+image.xbm:
+ $(RM) image.xbm ; $(LN_S) $(BITMAPDIR)$(IMAGEBITMAP).xbm image.xbm
+
+life.xbm:
+ $(RM) life.xbm ; $(LN_S) $(BITMAPDIR)$(LIFEBITMAP).xbm life.xbm
+
+life1d.xbm:
+ $(RM) life1d.xbm ; $(LN_S) $(BITMAPDIR)$(LIFE1DBITMAP).xbm life1d.xbm
+
+maze.xbm:
+ $(RM) maze.xbm ; $(LN_S) $(BITMAPDIR)$(MAZEBITMAP).xbm maze.xbm
+
+ghost.xbm:
+ $(RM) ghost.xbm ; $(LN_S) $(BITMAPDIR)$(PACMANBITMAP).xbm ghost.xbm
+
+puzzle.xbm:
+ $(RM) puzzle.xbm ; $(LN_S) $(BITMAPDIR)$(PUZZLEBITMAP).xbm puzzle.xbm
+
+image.xpm:
+ $(RM) image.xpm ; $(LN_S) $(PIXMAPDIR)$(IMAGEPIXMAP).xpm image.xpm
+
+puzzle.xpm:
+ $(RM) puzzle.xpm ; $(LN_S) $(PIXMAPDIR)$(PUZZLEPIXMAP).xpm puzzle.xpm
+
+escher$(C) : $(GLDIR)escher$(C)
+ $(RM) escher$(C) ; $(LN_S) $(GLDIR)escher$(C) escher$(C)
+
+gears$(C) : $(GLDIR)gears$(C)
+ $(RM) gears$(C) ; $(LN_S) $(GLDIR)gears$(C) gears$(C)
+
+morph3d$(C) : $(GLDIR)morph3d$(C)
+ $(RM) morph3d$(C) ; $(LN_S) $(GLDIR)morph3d$(C) morph3d$(C)
+
+superquadrics$(C) : $(GLDIR)superquadrics$(C)
+ $(RM) superquadrics$(C) ; $(LN_S) $(GLDIR)superquadrics$(C) superquadrics$(C)
+
+buildlwo$(C) : $(GLDIR)buildlwo$(C)
+ $(RM) buildlwo$(C) ; $(LN_S) $(GLDIR)buildlwo$(C) buildlwo$(C)
+
+pipes$(C) : $(GLDIR)pipes$(C)
+ $(RM) pipes$(C) ; $(LN_S) $(GLDIR)pipes$(C) pipes$(C)
+
+pipeobjs$(C) : $(GLDIR)pipeobjs$(C)
+ $(RM) pipeobjs$(C) ; $(LN_S) $(GLDIR)pipeobjs$(C) pipeobjs$(C)
+
+sproingies$(C) : $(GLDIR)sproingies$(C)
+ $(RM) sproingies$(C) ; $(LN_S) $(GLDIR)sproingies$(C) sproingies$(C)
+
+sproingiewrap$(C) : $(GLDIR)sproingiewrap$(C)
+ $(RM) sproingiewrap$(C) ; $(LN_S) $(GLDIR)sproingiewrap$(C) sproingiewrap$(C)
+
+s1_b$(C) : $(GLDIR)s1_b$(C)
+ $(RM) s1_b$(C) ; $(LN_S) $(GLDIR)s1_b$(C) s1_b$(C)
+
+s1_1$(C) : $(GLDIR)s1_1$(C)
+ $(RM) s1_1$(C) ; $(LN_S) $(GLDIR)s1_1$(C) s1_1$(C)
+
+s1_2$(C) : $(GLDIR)s1_2$(C)
+ $(RM) s1_2$(C) ; $(LN_S) $(GLDIR)s1_2$(C) s1_2$(C)
+
+s1_3$(C) : $(GLDIR)s1_3$(C)
+ $(RM) s1_3$(C) ; $(LN_S) $(GLDIR)s1_3$(C) s1_3$(C)
+
+s1_4$(C) : $(GLDIR)s1_4$(C)
+ $(RM) s1_4$(C) ; $(LN_S) $(GLDIR)s1_4$(C) s1_4$(C)
+
+s1_5$(C) : $(GLDIR)s1_5$(C)
+ $(RM) s1_5$(C) ; $(LN_S) $(GLDIR)s1_5$(C) s1_5$(C)
+
+s1_6$(C) : $(GLDIR)s1_6$(C)
+ $(RM) s1_6$(C) ; $(LN_S) $(GLDIR)s1_6$(C) s1_6$(C)
+
+fadeplot$(C) : $(HACKERDIR)fadeplot$(C)
+ $(RM) fadeplot$(C) ; $(LN_S) $(HACKERDIR)fadeplot$(C) fadeplot$(C)
+
+VER = xlockmore
+DISTVER = xlockmore-4.03
+
+# -------------------------------------------------------------------------
+# common rules for all Makefiles - do not edit
+
+emptyrule::
+
+clean::
+ $(RM_CMD) "#"*
+
+Makefile::
+ -@if [ -f Makefile ]; then set -x; \
+ $(RM) Makefile.bak; $(MV) Makefile Makefile.bak; \
+ else exit 0; fi
+ $(IMAKE_CMD) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT_DIR)
+
+tags::
+ $(TAGS) -w *.[ch]
+ $(TAGS) -xw *.[ch] > TAGS
+
+# -------------------------------------------------------------------------
+# empty rules for directories that do not have SUBDIRS - do not edit
+
+install::
+ @echo "install in $(CURRENT_DIR) done"
+
+install.man::
+ @echo "install.man in $(CURRENT_DIR) done"
+
+Makefiles::
+
+includes::
+
+# -------------------------------------------------------------------------
+# dependencies generated by makedepend
+
+# DO NOT DELETE
--- /dev/null
+############################################################
+#
+# $Id : Makefile.in 4.03 1997/04/25 $
+#
+# xlockmore Makefile.in for autoconf (UNIX/VMS X11 support)
+############################################################
+
+# default target
+
+all : xlock @XMLOCK@
+
+# this tells GNU make not to export variables into the environment
+# But other makes do not understand its significance, so it must
+# not be the first target in the file. So it is here, before
+# any variables are created, but after the default target
+.NOEXPORT :
+
+SHELL = /bin/sh
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@/
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+mandir = @mandir@/man1
+xapploadroot = @libdir@/X11
+xapploaddir = $(xapploadroot)/app-defaults
+
+BITMAPDIR = @BITMAPDIR@/
+PIXMAPDIR = @PIXMAPDIR@/
+CONFIGDIR = $(srcdir)/config/
+GLDIR = $(srcdir)/glx/
+HACKERDIR = $(srcdir)/hackers/
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+INSTPGMFLAGS = @INSTPGMFLAGS@
+
+#CC = cc -g
+#CC = cc -Ac -g
+#CC = cc -Xc -g
+#CC = acc -g
+#CC = CC -g
+#CC = gcc -g -Wall -ansi -pedantic
+#CC = gcc -g -Wall
+#CC = g++ -g -Wall
+CC = @CC@
+
+LINT = lint
+#LINT = alint
+
+#BITMAPTYPE = x11
+#PIXMAPTYPE = x11
+BITMAPTYPE = @BITMAPTYPE@
+PIXMAPTYPE = @PIXMAPTYPE@
+
+# Here is your chance to override the default icon:
+TINYBITMAP = $(BITMAPTYPE)
+TINYBITMAP = t-x11
+SMALLBITMAP = s-$(BITMAPTYPE)
+MEDIUMBITMAP = m-$(BITMAPTYPE)
+LARGEBITMAP = l-$(BITMAPTYPE)
+MEDIUMPIXMAP = m-$(PIXMAPTYPE)
+LARGEPIXMAP = l-$(PIXMAPTYPE)
+
+#EYESBITMAP = $(MEDIUMBITMAP)
+EYESBITMAP = m-grelb
+FLAGBITMAP = $(MEDIUMBITMAP)
+IMAGEBITMAP = $(MEDIUMBITMAP)
+#IMAGEBITMAP = l-bob #Slackware icon
+#IMAGEBITMAP = m-xlock #XLock icon
+#LIFEBITMAP = $(SMALLBITMAP)
+LIFEBITMAP = s-grelb
+LIFE1DBITMAP = $(TINYBITMAP)
+MAZEBITMAP = $(LARGEBITMAP)
+#MAZEBITMAP = m-xlock
+#PACMANBITMAP = $(MEDIUMBITMAP)
+PACMANBITMAP = m-ghost
+#PUZZLEBITMAP = $(LARGEBITMAP)
+PUZZLEBITMAP = l-xlock
+#PUZZLEBITMAP = l-linux
+IMAGEPIXMAP = $(MEDIUMPIXMAP)
+#IMAGEPIXMAP = m-xlock
+#PUZZLEPIXMAP = $(LARGEPIXMAP)
+PUZZLEPIXMAP = l-xlock
+#PUZZLEPIXMAP = l-linux
+
+#SUNOS 4.1.3
+#DEF_PLAY = "/usr/demo/SOUND/play /usr/local/share/sounds/xlock/"
+#IRIX 5.3
+#DEF_PLAY = "/usr/sbin/sfplay /usr/local/share/sounds/xlock/"
+#Digital Unix with Multimedia Services installed:
+#DEF_PLAY = "/usr/bin/mme/decsound -play /usr/local/share/sounds/xlock/"
+#LINUX and others (see config directory)
+#DEF_PLAY = "/usr/local/bin/play.sh /usr/local/share/sounds/xlock/"
+#Uncomment line below if you have one of the above
+#SOUNDDEF = -DDEF_PLAY=\"$(DEF_PLAY)\"
+
+# Add hackers modes as you like. It may make your xlock unstable.
+# Please do not uncomment for precompiled distributions.
+@HACKERS@HACKERDEF = -DUSE_HACKERS
+@HACKERS@XLOCKHACKEROBJS = $(S)fadeplot$(O)
+
+# Uncomment and change to override defaults for SYSLOG
+# You may want to set all -DSYSLOG_* to LOG_WARNING to maximize messages
+#SYSLOGDEF = -DSYSLOG_FACILITY=LOG_AUTH -DSYSLOG_WARNING=LOG_WARNING \
+# -DSYSLOG_NOTICE=LOG_NOTICE -DSYSLOG_INFO=LOG_INFO
+
+# special password defines
+# (Shadow, KRB4, KRB5, or DCE authentication, AFS, OSF, SUNOS_ADJUNCT_PASSWD)
+#PASSWDDEF = -DHAVE_SHADOW
+#PASSWDDEF = -DHAVE_KRB4
+#PASSWDDEF = -DHAVE_KRB5
+#PASSWDDEF = -DDCE_PASSWD
+#PASSWDDEF = -DAFS
+#PASSWDDEF = -DOSF1_ENH_SEC
+#PASSWDDEF = -DSUNOS_ADJUNCT_PASSWD
+#
+# special password include path
+# The following is needed for KRB4, KRB5, or DCE authentication, AFS
+#PASSWDINC = -I/usr/athena/include
+#PASSWDINC = -I/opt/krb5/include
+#PASSWDINC = -I/usr/include/reentrant
+#PASSWDINC = -I/usr/afsws/include
+#
+# special password library (Shadow, KRB4, KRB5, or DCE authentication, AFS, OSF)
+#PASSWDLIB = -lshadow
+#PASSWDLIB = -L/usr/athena/lib -lkrb -ldes
+#PASSWDLIB = -L/opt/krb5/lib -lkrb5 -lcrypto -lcom_err
+#PASSWDLIB = -ldce -lc_r
+#PASSWDLIB = -L/usr/afsws/lib -L/usr/afsws/lib/afs -lkauth -lubik -lprot -lrxkad -lrx -llwp -lauth -lsys -ldes -lcmd -lcom_err -laudit /usr/afsws/lib/afs/util.a
+#PASSWDLIB = -lsecurity
+#
+# special encryption library
+#CRYPTLIB = -lcrypt
+
+LN_S = @LN_S@
+RM = rm -f
+RM_S = $(RM)
+ECHO = echo
+
+#BLN_S = set file/enter=[]
+#RM = delete/noconfirm/nolog
+#RM_S = set file/remove/nolog
+#ECHO = write sys$output
+
+
+DEFINES = -DDEF_FILESEARCHPATH=\"$(xapploadroot)/%T/%N%S\" \
+$(HACKERDEF) $(SOUNDDEF) $(PASSWDDEF) $(SYSLOGDEF)
+DEFS = @DEFS@ $(DEFINES)
+XLOCKINC = @XLOCKINC@ -I$(top_srcdir) -I. $(SOUNDINC) $(PASSWDINC)
+XMLOCKINC = @XMLOCKINC@ -I$(top_srcdir) -I.
+CFLAGS = @CFLAGS@
+#CFLAGS = -O
+#CFLAGS = -g
+LDFLAGS = @LDFLAGS@
+XLIBS = @XLIBS@
+XLOCKLIBS = @XLOCKLIBS@ $(SOUNDLIB) $(CRYPTLIB) $(PASSWDLIB)
+XMLOCKLIBS = @XMLOCKLIBS@
+
+VER = xlockmore
+DISTVER = xlockmore-4.03
+
+N=
+C=.c
+#C++
+#C=.cc
+
+O=.o
+S=$(N) $(N)
+E=
+A=
+
+#VMS
+#O=.obj
+#S=,
+#E=.exe
+#A=;*
+
+# please define
+# C as the C source code extension
+# O as the object extension
+# S as the separator for object code
+# E as the executable extension
+
+####################################################################
+# List of object files
+
+XLOCKCOREOBJS = xlock$(O)$(S)passwd$(O)$(S)resource$(O)$(S)\
+utils$(O)$(S)logout$(O)$(S)mode$(O)$(S)ras$(O)$(S)xbm$(O)$(S)\
+color$(O)$(S)sound$(O)
+XLOCKMODEOBJS = ant$(O)$(S)ball$(O)$(S)bat$(O)$(S)blot$(O)$(S)\
+bouboule$(O)$(S)bounce$(O)$(S)braid$(O)$(S)bug$(O)$(S)\
+clock$(O)$(S)crystal$(O)$(S)\
+daisy$(O)$(S)dclock$(O)$(S)demon$(O)$(S)drift$(O)$(S)eyes$(O)$(S)\
+flag$(O)$(S)flame$(O)$(S)forest$(O)$(S)fract$(O)$(S)\
+galaxy$(O)$(S)geometry$(O)$(S)grav$(O)$(S)\
+helix$(O)$(S)hop$(O)$(S)hyper$(O)$(S)\
+ico$(O)$(S)ifs$(O)$(S)image$(O)$(S)julia$(O)$(S)kaleid$(O)$(S)\
+laser$(O)$(S)life$(O)$(S)life1d$(O)$(S)life3d$(O)$(S)\
+lightning$(O)$(S)lisa$(O)$(S)lissie$(O)$(S)loop$(O)$(S)\
+marquee$(O)$(S)maze$(O)$(S)mountain$(O)$(S)nose$(O)$(S)\
+pacman$(O)$(S)penrose$(O)$(S)petal$(O)$(S)puzzle$(O)$(S)pyro$(O)$(S)\
+qix$(O)$(S)roll$(O)$(S)rotor$(O)$(S)\
+shape$(O)$(S)sierpinski$(O)$(S)slip$(O)$(S)\
+sphere$(O)$(S)spiral$(O)$(S)spline$(O)$(S)\
+star$(O)$(S)strange$(O)$(S)swarm$(O)$(S)swirl$(O)$(S)\
+triangle$(O)$(S)tube$(O)$(S)turtle$(O)$(S)voters$(O)$(S)\
+wator$(O)$(S)wire$(O)$(S)world$(O)$(S)worm$(O)$(S)\
+cartoon$(O)
+XLOCKGLOBJS = escher$(O)$(S)gears$(O)$(S)morph3d$(O)$(S)superquadrics$(O)$(S)\
+buildlwo$(O)$(S)pipes$(O)$(S)pipeobjs$(O)$(S)\
+sproingies$(O)$(S)sproingiewrap$(O)$(S)s1_b$(O)$(S)\
+s1_1$(O)$(S)s1_2$(O)$(S)s1_3$(O)$(S)s1_4$(O)$(S)s1_5$(O)$(S)s1_6$(O)
+XLOCKCOREMODEOBJS = blank$(O)$(S)bomb$(O)$(S)random$(O)
+XLOCKOBJS = $(XLOCKCOREOBJS)$(S)$(XLOCKMODEOBJS)$(S)\
+$(XLOCKGLOBJS)$(XLOCKHACKEROBJS)$(S)$(XLOCKCOREMODEOBJS)
+XMLOCKOBJS = option$(O)$(S)xmlock$(O)
+
+####################################################################
+# List of source files
+# Used for lint, and some dependencies.
+
+BITMAPS = eyes.xbm flag.xbm ghost.xbm image.xbm life.xbm life1d.xbm \
+maze.xbm puzzle.xbm
+PIXMAPS = image.xpm puzzle.xpm
+XLOCKHDRS = xlock.h mode.h vroot.h ras.h version.h config.h gl/buildlwo.H
+XLOCKCORESRCS = xlock$(C) passwd$(C) resource$(C) \
+utils$(C) logout$(C) mode$(C) ras$(C) xbm$(C) \
+color$(C) sound$(C)
+XLOCKMODESRCS = ant$(C) ball$(C) bat$(C) blot$(C) \
+bouboule$(C) bounce$(C) braid$(C) bug$(C) \
+clock$(C) crystal$(C) \
+daisy$(C) dclock$(C) demon$(C) drift$(C) eyes$(C) \
+flag$(C) flame$(C) forest$(C) fract$(C) \
+galaxy$(C) geometry$(C) grav$(C) \
+helix$(C) hop$(C) hyper$(C) \
+ico$(C) ifs$(C) image$(C) julia$(C) kaleid$(C) \
+laser$(C) life$(C) life1d$(C) life3d$(C) \
+lightning$(C) lisa$(C) lissie$(C) loop$(C) \
+marquee$(C) maze$(C) mountain$(C) nose$(C) \
+pacman$(C) penrose$(C) petal$(C) puzzle$(C) pyro$(C) \
+qix$(C) roll$(C) rotor$(C) \
+shape$(C) sierpinski$(C) slip$(C) \
+sphere$(C) spiral$(C) spline$(C) \
+star$(C) strange$(C) swarm$(C) swirl$(C) \
+triangle$(C) tube$(C) turtle$(C) voters$(C) \
+wator$(C) wire$(C) world$(C) worm$(C) \
+cartoon$(C)
+XLOCKGLSRCS = escher$(C) gears$(C) morph3d$(C) superquadrics$(C) \
+buildlwo$(C) pipes$(C) pipeobjs$(C) \
+sproingies$(C) sproingiewrap$(C) buildlwo$(C) s1_b$(C) \
+s1_1$(C) s1_2$(C) s1_3$(C) s1_4$(C) s1_5$(C) s1_6$(C)
+XLOCKCOREMODESRCS = blank$(C) bomb$(C) random$(C)
+XLOCKHACKERSRCS = fadeplot$(C)
+XLOCKSRCS = $(XLOCKCORESRCS) $(XLOCKMODESRCS) $(XLOCKCOREMODESRCS) \
+$(XLOCKGLSRCS) $(XLOCKHACKERSRCS)
+XMLOCKSRCS = option$(C) xmlock$(C)
+
+
+#########################################################################
+
+
+xlock$(E) : $(XLOCKOBJS)
+ $(CC) -o $@ $(XLOCKOBJS) $(LDFLAGS) $(XLOCKLIBS)
+ @ $(ECHO) "$@ BUILD COMPLETE"
+ @ $(ECHO) ""
+
+xmlock$(E) : $(XMLOCKOBJS)
+ $(CC) -o $@ $(XMLOCKOBJS) $(LDFLAGS) $(XMLOCKLIBS)
+ @ $(ECHO) "$@ BUILD COMPLETE"
+ @ $(ECHO) ""
+
+#xlock$(E) : $(XLOCKOBJS)$(S)xlock.opt
+# $(LINK)/map $(LDFLAGS) $(XLOCKOBJS)$(S)xlock.opt/opt
+
+#xmlock$(E) : $(XMLOCKOBJS)$(S)xmlock.opt
+# $(LINK)/map $(LDFLAGS) $(XMLOCKOBJS)$(S)xmlock.opt/opt
+
+xlock.opt :
+ @ close/nolog optf
+ @ open/write optf xlock.opt
+# @ if .not. axp then write optf "sys$library:vaxcrtl/lib"
+ @ write optf "sys$library:vaxcrtl/lib"
+ @ if axp then write optf "sys$library:ucx$ipc_shr/share"
+ @ if axp then write optf "sys$share:decw$xextlibshr/share"
+ @ if axp then write optf "sys$share:decw$xtlibshrr5/share"
+ @ if .not. axp then write optf "sys$library:ucx$ipc/lib"
+# @ write optf "sys$share:decw$dxmlibshr/share"
+ @ write optf "sys$share:decw$xmlibshr12/share"
+ @ write optf "sys$share:decw$xlibshr/share"
+ @ close optf
+
+xmlock.opt :
+ @ close/nolog optf
+ @ open/write optf xlock.opt
+# @ if .not. axp then write optf "sys$library:vaxcrtl/lib"
+ @ write optf "sys$library:vaxcrtl/lib"
+ @ if axp then write optf "sys$library:ucx$ipc_shr/share"
+ @ if axp then write optf "sys$share:decw$xextlibshr/share"
+ @ if axp then write optf "sys$share:decw$xtlibshrr5/share"
+ @ if .not. axp then write optf "sys$library:ucx$ipc/lib"
+# @ write optf "sys$share:decw$dxmlibshr/share"
+ @ write optf "sys$share:decw$xmlibshr12/share"
+ @ write optf "sys$share:decw$xlibshr/share"
+ @ close optf
+
+eyes$(O) : eyes$(C) eyes.xbm
+flag$(O) : flag$(C) flag.xbm
+life$(O) : life$(C) life.xbm
+life1d$(O) : life1d$(C) life1d.xbm
+maze$(O) : maze$(C) maze.xbm
+pacman$(O) : pacman$(C) ghost.xbm
+# Do not need xpm files if not using them but not worth figuring out
+image$(O) : image$(C) image.xbm image.xpm
+puzzle$(O) : puzzle$(C) puzzle.xbm puzzle.xpm
+
+eyes.xbm : $(BITMAPDIR)$(EYESBITMAP).xbm
+ $(RM) eyes.xbm ; $(LN_S) $(BITMAPDIR)$(EYESBITMAP).xbm eyes.xbm
+
+flag.xbm : $(BITMAPDIR)$(FLAGBITMAP).xbm
+ $(RM) flag.xbm ; $(LN_S) $(BITMAPDIR)$(FLAGBITMAP).xbm flag.xbm
+
+image.xbm : $(BITMAPDIR)$(IMAGEBITMAP).xbm
+ $(RM) image.xbm ; $(LN_S) $(BITMAPDIR)$(IMAGEBITMAP).xbm image.xbm
+
+ghost.xbm : $(BITMAPDIR)$(PACMANBITMAP).xbm
+ $(RM) ghost.xbm ; $(LN_S) $(BITMAPDIR)$(PACMANBITMAP).xbm ghost.xbm
+
+life.xbm : $(BITMAPDIR)$(LIFEBITMAP).xbm
+ $(RM) life.xbm ; $(LN_S) $(BITMAPDIR)$(LIFEBITMAP).xbm life.xbm
+
+life1d.xbm : $(BITMAPDIR)$(LIFE1DBITMAP).xbm
+ $(RM) life1d.xbm ; $(LN_S) $(BITMAPDIR)$(LIFE1DBITMAP).xbm life1d.xbm
+
+maze.xbm : $(BITMAPDIR)$(MAZEBITMAP).xbm
+ $(RM) maze.xbm ; $(LN_S) $(BITMAPDIR)$(MAZEBITMAP).xbm maze.xbm
+
+puzzle.xbm : $(BITMAPDIR)$(PUZZLEBITMAP).xbm
+ $(RM) puzzle.xbm ; $(LN_S) $(BITMAPDIR)$(PUZZLEBITMAP).xbm puzzle.xbm
+
+image.xpm : $(PIXMAPDIR)$(IMAGEPIXMAP).xpm
+ $(RM) image.xpm ; $(LN_S) $(PIXMAPDIR)$(IMAGEPIXMAP).xpm image.xpm
+
+puzzle.xpm : $(PIXMAPDIR)$(PUZZLEPIXMAP).xpm
+ $(RM) puzzle.xpm ; $(LN_S) $(PIXMAPDIR)$(PUZZLEPIXMAP).xpm puzzle.xpm
+
+escher$(C) : $(GLDIR)escher$(C)
+ $(RM) escher$(C) ; $(LN_S) $(GLDIR)escher$(C) escher$(C)
+
+gears$(C) : $(GLDIR)gears$(C)
+ $(RM) gears$(C) ; $(LN_S) $(GLDIR)gears$(C) gears$(C)
+
+morph3d$(C) : $(GLDIR)morph3d$(C)
+ $(RM) morph3d$(C) ; $(LN_S) $(GLDIR)morph3d$(C) morph3d$(C)
+
+superquadrics$(C) : $(GLDIR)superquadrics$(C)
+ $(RM) superquadrics$(C) ; $(LN_S) $(GLDIR)superquadrics$(C) superquadrics$(C)
+
+buildlwo$(C) : $(GLDIR)buildlwo$(C)
+ $(RM) buildlwo$(C) ; $(LN_S) $(GLDIR)buildlwo$(C) buildlwo$(C)
+
+pipes$(C) : $(GLDIR)pipes$(C)
+ $(RM) pipes$(C) ; $(LN_S) $(GLDIR)pipes$(C) pipes$(C)
+
+pipeobjs$(C) : $(GLDIR)pipeobjs$(C)
+ $(RM) pipeobjs$(C) ; $(LN_S) $(GLDIR)pipeobjs$(C) pipeobjs$(C)
+
+sproingies$(C) : $(GLDIR)sproingies$(C)
+ $(RM) sproingies$(C) ; $(LN_S) $(GLDIR)sproingies$(C) sproingies$(C)
+
+sproingiewrap$(C) : $(GLDIR)sproingiewrap$(C)
+ $(RM) sproingiewrap$(C) ; $(LN_S) $(GLDIR)sproingiewrap$(C) sproingiewrap$(C)
+
+s1_b$(C) : $(GLDIR)s1_b$(C)
+ $(RM) s1_b$(C) ; $(LN_S) $(GLDIR)s1_b$(C) s1_b$(C)
+
+s1_1$(C) : $(GLDIR)s1_1$(C)
+ $(RM) s1_1$(C) ; $(LN_S) $(GLDIR)s1_1$(C) s1_1$(C)
+
+s1_2$(C) : $(GLDIR)s1_2$(C)
+ $(RM) s1_2$(C) ; $(LN_S) $(GLDIR)s1_2$(C) s1_2$(C)
+
+s1_3$(C) : $(GLDIR)s1_3$(C)
+ $(RM) s1_3$(C) ; $(LN_S) $(GLDIR)s1_3$(C) s1_3$(C)
+
+s1_4$(C) : $(GLDIR)s1_4$(C)
+ $(RM) s1_4$(C) ; $(LN_S) $(GLDIR)s1_4$(C) s1_4$(C)
+
+s1_5$(C) : $(GLDIR)s1_5$(C)
+ $(RM) s1_5$(C) ; $(LN_S) $(GLDIR)s1_5$(C) s1_5$(C)
+
+s1_6$(C) : $(GLDIR)s1_6$(C)
+ $(RM) s1_6$(C) ; $(LN_S) $(GLDIR)s1_6$(C) s1_6$(C)
+
+fadeplot$(C) : $(HACKERDIR)fadeplot$(C)
+ $(RM) fadeplot$(C) ; $(LN_S) $(HACKERDIR)fadeplot$(C) fadeplot$(C)
+
+################################################################
+
+install : install_xlock @INSTALL_XMLOCK@
+
+install_xlock : xlock$(E)
+ $(srcdir)/mkinstalldirs $(bindir)
+ $(srcdir)/mkinstalldirs $(mandir)
+ $(srcdir)/mkinstalldirs $(xapploaddir)
+ $(INSTALL_PROGRAM) $(INSTPGMFLAGS) xlock$(E) $(bindir)
+ $(INSTALL_DATA) xlock.man $(mandir)/xlock.1
+ $(INSTALL_DATA) XLock.ad $(xapploaddir)/XLock
+ @ $(ECHO) "$@ COMPLETE"
+ @ $(ECHO) ""
+
+install_xmlock : xmlock$(E)
+ $(srcdir)/mkinstalldirs $(bindir)
+ $(srcdir)/mkinstalldirs $(xapploaddir)
+ $(INSTALL_PROGRAM) xmlock$(E) $(bindir)
+ $(INSTALL_DATA) XmLock.ad $(xapploaddir)/XmLock
+ @ $(ECHO) "$@ COMPLETE"
+ @ $(ECHO) ""
+
+uninstall : uninstall_xlock @UNINSTALL_XMLOCK@
+
+uninstall_xlock :
+ $(RM) $(bindir)/xlock$(E)$(A)
+ $(RM) $(mandir)/xlock.1
+ $(RM) $(xapploaddir)/XLock
+
+uninstall_xmlock :
+ $(RM) $(bindir)/xmlock$(E)$(A)
+ $(RM) $(xapploaddir)/XmLock
+
+################################################################
+# Dependencies
+
+.SUFFIXES : $(C) $(O) $(E)
+
+$(C)$(O) :
+ $(CC) -c $(CPPFLAGS) $(DEFS) $(XLOCKINC) $(CFLAGS) $<
+
+# file="" ; \
+# for i in $(XMLOCKSRCS); do \
+# if [ "x$${i}" = "x$<" ]; then \
+# file=$${i} ; \
+# fi ; \
+# done ; \
+# if [ -n $${file} ]; then \
+# echo "$(CC) -c $(CPPFLAGS) $(DEFS) $(XLOCKINC) $(CFLAGS) $<" ; \
+# $(CC) -c $(CPPFLAGS) $(DEFS) $(XLOCKINC) $(CFLAGS) $< ; \
+# else \
+# echo "$(CC) -c $(CPPFLAGS) $(DEFS) $(XLOCKINC) $(CFLAGS) $<" ; \
+# $(CC) -c $(CPPFLAGS) $(DEFS) $(XMLOCKINC) $(CFLAGS) $< ; \
+# fi
+
+option$(O) : option$(C)
+ $(CC) -c $(CPPFLAGS) $(DEFS) $(XMLOCKINC) $(CFLAGS) $<
+
+xmlock$(O) : xmlock$(C)
+ $(CC) -c $(CPPFLAGS) $(DEFS) $(XMLOCKINC) $(CFLAGS) $<
+
+################################################################
+
+
+Makefile : Makefile.in config.status
+ $(SHELL) config.status
+config.status : configure
+ $(SHELL) config.status --recheck
+configure : configure.in
+# enable this rule if you want autoconf to be executed automatically when
+# configure.in is changed. This is commented out, since patching might give
+# configure.in a newer timestamp than configure and not everybody has autoconf
+# cd $(srcdir); autoconf
+
+################################################################
+# Miscellaneous targets
+
+depend : $(BITMAPS) $(PIXMAPS) $(XLOCKGLSRCS) $(XLOCKHACKERSRCS)
+
+clean :
+ $(RM) *.o core *~ *% *.bak *.orig \
+glx/*~ glx/*% glx/*.bak glx/*.orig \
+hackers/*~ hackers/*% hackers/*.bak hackers/*.orig \
+make.log MakeOut $(XLOCKGLSRCS) $(XLOCKHACKERSRCS) xlock$(E)$(A) xmlock$(E)$(A)
+
+distclean : clean
+ $(RM) Makefile config.status config.cache config.log config.h \
+$(BITMAPS) $(PIXMAPS)
+
+clean.all : distclean
+
+tar : distclean
+ cd .. ; tar cvf $(VER).tar $(VER)/*
+
+compress : tar
+ cd .. ; compress -f $(VER).tar
+
+gzip : tar
+ cd .. ; gzip -f $(VER).tar
+
+dist : gzip
+
+tgz : tar
+ cd .. ; gzip -c $(VER).tar > `echo $(VER) | cut -c1-8`.tgz ; \
+$(RM) $(VER).tar
+
+man :
+ nroff -man $(srcdir)/xlock.man | more
+
+read :
+ more README
+
+lint :
+ $(LINT) -ax -DLINT $(DEFINES) $(XLOCKINC) $(XLOCKSRCS)
+ $(LINT) -ax -DLINT $(DEFINES) $(XMLOCKINC) $(XMLOCKSRCS)
+
+hlp :
+ (echo '1 XLOCK' ; \
+ nroff -man < xlock.man \
+ | sed -e 's/.^H//g' -e 's/^ *Page [0-9].*//' \
+ -e 's/^ *Xlock(.*//' \
+ -e 's/^ //' \
+ -e 's/^NAME.*//;s/^SYNOPSIS//;s/^DESCRIPTION//' \
+ -e 's/\(Copyright\) .*c.*\(19\)/\1 (C) \2/' \
+ -e 's/^\([A-Z][A-Z]*\) \([A-Z][A-Z]*\)/\1_\2/' \
+ -e 's/^\([A-Z]\)/2 \1/' \
+ | more -flsu | cat ) \
+ > xlock.hlp
--- /dev/null
+xlockmore4.03: the maintained version of xlock
+see docs/Revisions for more version stuff
+Primary site: ftp.x.org in /contrib/applications
+Maintainer: David A. Bagley <bagleyd@bigfoot.com>
+Alpha versions may be available at: http://wauug.erols.com/~bagleyd
+Adapted from Patrick J. Naughton's original xlock,
+ with lots of help from others.
+
+Note to binary redistributers:
+-----------------------------
+ Probably should not distribute with any library requirements
+ (except possibly XPM, unless you statically link them in)
+ and with USE_BOMB since it might not run right if you do not know
+ if your users will use xdm or not. For example:
+ configure --without-xpm --without-gl --without-dtsaver \
+--without-rplay --without-nas --disable-bomb; make
+ motif (and editres) are used to build xmlock and are not used in xlock.
+ Please let me know if there are other concerns.
+
+
+How to build?
+-------------
+ An ANSI C compiler is required for build.
+
+ Check below to see if your machine is one mentioned that causes
+ problems, otherwise it should be easy.
+
+ There are 3 ways to build:
+
+ configure:
+ "configure --help" to see options.
+
+ The following assumes binary installation directory to be
+ /usr/local/bin but /usr/local/lib/X11/app-defaults
+ is not exactly a standard spot for app-defaults.
+ configure ; make ; make install
+
+ For Linux and others you may want something like:
+ configure --prefix=/usr/X11R6 ; make ; make install
+ For Suns you may want:
+ configure --prefix=/usr/openwin
+ Then edit the make file and set xapploadroot to /usr/openwin/lib
+ then `make ; make install`
+
+ Experimental modes:
+ configure --enable-hackers ; make ; make install
+
+ imake:
+ Sometimes this is not setup correctly by the distributer ... i.e. not
+ my fault. You may want to do these quick edits to the Imakefile so you
+ have more capabilities:
+
+ Do you have XPM? If so, uncomment "#define XpmLibrary".
+ Do you have Motif? If so, uncomment "#define XmLibrary".
+ Do you have MESAGL? If so, uncomment "#define GLLibrary".
+ Do you have CDE? If so, uncomment "#define DtSaverLibrary".
+ Do you have RPLAY? If so, uncomment "#define RplayLibrary".
+ Do you have NAS? If so, uncomment "#define NasLibrary".
+
+ Examine Imakefile for other optional capabilities.
+
+ xmkmf ; make depend ; make ; make install
+ or
+ xmkmf ; make ; make install
+
+ make.com:
+ See VMS below.
+
+
+Likely Problems
+---------------
+ xlock: user/passwd error -> this usually means you should get your
+ administrator to setuid xlock to root or at least setgid xlock to
+ shadow. If you do not have a friendly administrator you can still
+ set it up, see USE_XLOCKRC below.
+
+ AIX (IBM RS6000)
+ AIX's "make":
+ AIX's "make" can not handle "+=" so if you use the Imakefile, you
+ have to group all your DEFINES into one long line and use "="
+ instead. GNU's "make" solves this problem.
+ AIX 3.1 and less:
+ it SHOULD compile automatically with -DLESS_THAN_AIX3_2 using the
+ Imakefile, since the passwd struct is not available.
+ AIX 3.2 and greater:
+ one must have setuid xlock to root if you want to use it
+ without being root.
+ AFS users:
+ See Imakefile, grep on "AFS".
+ Some machines have an alternate password shadowing method, if someone
+ figures it out mail me the patch.
+
+ Alpha-OSF/1 (Digital Equipment Corp)
+
+ Enhanced security:
+ Compile with -DOSF1_ENH_SEC see Imakefile
+ chown auth.auth xlock
+ chmod 2755 xlock
+ Unfortunately the following is reportedly broken since xlockmore-2.10
+ and needs a patch, I heard it produces the following at runtime.
+Unaligned access pid=1767 <xlock> va=140489e24 pc=3ff807d9978 ra=3ff807d9880
+type=ldq
+Segmentation fault (core dumped)
+
+ Apollo (HP)
+ Shift-Control-Break is caught. See HP.
+
+ CDE (DT)
+ (My heart bleeds for you.)
+ Common Desktop Environment. Go to the CDE DT CONFIG SECTION of the
+ Imakefile and uncomment (should be autodetected if you use configure)
+XCOMM #define DtSaverLibrary
+ Then have CDE somehow run xlock with the -dtsaver option. I am not
+ sure what this does for you since I do not use it. If anyone figures
+ this out LET ME KNOW.
+
+ DCE authentication (tested only on HP's)
+ See Imakefile (xmkmf) or Makefile.in (configure).
+
+ Digital Unix
+ Reported that 3.2D (8bpp) password screen color map gets messed up
+ sometimes when in random mode as it switches from one mode to another.
+
+ ESIX
+ Similar to Solaris2.x. You will need a -DSVR4 to compile.
+ chmod 440 /etc/shadow
+ if you get libX11.so.xxx not found
+ link with the static versions of the X libraries
+ chmod 2755 xlock
+
+ FreeBSD
+ One may have to setuid xlock to root (are there any objections?).
+ Also see "XFree86" if applicable.
+
+ GL
+ So far I just assume the Mesa 3-D Graphics Library. See below on
+ availability. Follow its instructions and then go to GL section
+ of the Imakefile and uncomment (should be autodetected if you use
+ configure)
+XCOMM #define GLLibrary
+
+ HP
+ Shift-Control-Break is caught. This uses a library Xhp11 that may
+ not exist on some systems. Comment out
+ XHPDisableReset(dsp);
+ and
+ XHPEnableReset(dsp);
+ in "xlock.c" if you do not have this library.
+ May have to setuid xlock to root.
+ The optimizer may break utils.c .
+ HP's "make":
+ HP's "make" can not handle "+=" so if you use the Imakefile, you
+ have to group all your DEFINES into one long line and use "="
+ instead. GNU's "make" solves this problem.
+ HP-UX with Secured Passwords:
+ Compile with -DHPUX_SECURE_PASSWD and setuid xlock to root.
+ HP-UX with Passwd Etc:
+ Compile with -DHP_PASSWDETC .
+ Link with -lrgy -lnck -lndbm .
+
+ IRIX (SGI)
+ The GL modes here probably do not work unless you have MESA GL.
+ Help would be nice here, since I do not have a SGI.
+
+ KERBEROS
+ See Imakefile (xmkmf) or Makefile.in (configure).
+
+ Linux (Intel 80386, 80486, & Pentium)
+ If you are using elf _or_ shadow passwords:
+ xlock should compile with -DHAVE_SHADOW
+ this is already forced if you have elf so do not worry, it should
+ work even if you do not have shadow passwording.
+ If you are _not_ using elf and are using shadow passwords:
+ (this old version of shadowing has a _MAJOR_ known security flaw)
+ link with -lshadow -lgdbm
+ Next if using shadow passwords:
+ chown root.root xlock (or root.shadow if it exists)
+ chmod 4755 xlock
+ (chmod 2755 xlock may be better if shadow has group read for root group)
+ Also check that the following was done:
+ Your /usr/X11R6/lib/X11/config/linux.cf should have
+#define HasShadowPasswd YES
+ This would let the Imakefile work automatically for compile/link.
+ chown root.root /etc/shadow (or root.shadow if it exists)
+ chmod 400 /etc/shadow
+ (chmod 440 /etc/shadow may be better).
+ So far, Slackware (a major Linux distribution) does NOT come with shadow
+ passwords standard. If you want to install shadow passwords (be
+ careful, it can be tricky) it's on sunsite.unc.edu in
+ /pub/Linux/system/Admin .
+ Also see "XFree86" if applicable.
+
+ Linux (Alpha)
+ Change the order of XLIB and XPMLIB in the Imakefile so the XPMLIB
+ comes first. Intel stuff above probably applies as well.
+
+ Rplay
+ Audio package. See below on availability. Follow its instructions and
+ then go to Imakefile and uncomment (should be autodetected if you use
+ configure)
+XCOMM #define RplayLibrary
+ See config directory for example. (Note: The example files are
+ concerned with getting it working ... not security).
+
+ Solaris2.x (Sun SPARC)
+ Imake will compile with the -DHAVE_SHADOW switch.
+ With GNU's gcc, get rid of the "-ansi" during compilation, also
+ one may want to get rid of the -xF references in
+ /usr/openwin/lib/config/sun.cf and Imake.tmpl if you get a
+ cc: language F not recognized
+ Solaris2.x NIS+ or not using NIS (/etc/passwd):
+ If you use netgroup make sure there is a return at the end of file.
+
+ SunOS4.1.x (Sun Sparc & 680x0)
+ Put in a link from /usr/include/X11 to your ${OPENWINHOME}/include/X11
+ to use the Imakefile (xmkmf) or use Makefile.in (configure) provided.
+ gcc -Wall gives a lot of silly warnings, its safe to disregard them.
+
+ Ultrix (DEC)
+ I heard that the logout button just kills xlock.
+ USE_XLOCKRC feature unimplemented, but may not be hard to do.
+ xlock must be either setuid root or setgid authread to validate the
+ password on an Ultrix system.
+
+ VMS (DEC)
+ You may want to set a few things like vroot, bomb, and sound (see audio
+ below) at the top of the file.
+ All you should need to do to build the executable is:
+ $ @make
+ To run xlock a symbol needs to be defined, for example:
+ XLOCK:==$H268SYSEXE:XLOCK
+ where H268SYSEXE is a logical name pointing to the directory where
+ XLOCK.EXE resides. The '$' after == means this is a foreign command
+ and VMS makes the command line available to the program.
+ If the link bombs out I recommend trying it again like the following:
+ $ @make clean
+ $ @make
+ -allowroot only works if you have SYSPRV enabled which is a bit limiting.
+ Unless one uses the privileged install by a system manager. To do
+ this, the following command needs to be executed at system startup
+ (i.e. included in systartup_vms.com):
+ INSTALL ADD {dev}:[{dir}]XLOCK.EXE/PRIV=(SYSPRV)
+ where {dev}:[{dir}] is the full path of the executable.
+ The XLock file normally in /usr/lib/X11/app-defaults needs to be in the
+ directory DECW$SYSTEM_DEFAULTS on VMS systems and be called
+ 'DECW$XLOCK.DAT'.
+ USE_XLOCKRC, USE_AUTO_LOGOUT, USE_BUTTON_LOGOUT, & USE_MULTIPLE_ROOT
+ features are not implemented.
+ To use audio:
+ Set "sound" to be 1 in the make.com file. Only available on the Alpha.
+ To get it work on a VAX some editing of the make.com is needed
+ (scan for USE_VMSPLAY)
+ The default sound files are hard coded to be in the current directory
+ see line 128 or so of the resource.c file but can be overruled from
+ the command line or the resourcefile decw$xlock.dat.
+ Sounds did not work for me on the VAX.
+ It should work OK on an AXP. (Due to a bug in the SO driver on some
+ models running VMS7.0, sounds are only available on the headset).
+ To use new event loop:
+ For VMS7.0 and higher : new event loop is used by default.
+ You do not need to install extra software.
+ For VMS6.2 or lower :
+ You need some UNIX utilities installed (XVMSUTILS). See where to get
+ it below.
+ Look at the make.com and xvmsutil stuff.
+
+ XFree86
+ Control-Alt-Backspace will defeat locking mechanism and return your
+ console back unless you put "DontZap" in your XF86Config file.
+ (In X11R5, that would be a "dontzap" in your Xconfig file).
+ Control-Alt-F1 (among others) will defeat locking mechanism with
+ virtual terminals. This is not too good, right? If you are using
+ Linux, try vlock on tsx-11.mit.edu in /pub/linux/sources/usr.bin .
+ The current XFree86 (as far as I know) does not have a server
+ extension for catching or disabling VT switching.
+ Here is a work around, put this line in /etc/profile:
+ alias x='(startx >/dev/null &);clear;logout'
+ then use 'x' instead of 'startx' (with no other active VT's).
+
+ XPM
+ Full color pixmap package. See below on availability. Follow its
+ instructions and then go to Imakefile and uncomment (should be
+ autodetected if you use configure)
+XCOMM #define XpmLibrary
+
+ X-Terminal
+ (My heart bleeds for you.)
+ To get xlock to run, run with -remote option or set XLock.remote on
+ in XLock.ad . You might have to use -allowaccess as well.
+
+ tvtwm
+ One used to get following error when running xlock (+nolock) with
+ tvtwm.
+ X Error of failed request: BadWindow (invalid Window parameter)
+ What happens is that RootWindow(dsp, screen) fails when tvtwm is
+ running. There is a kludge fix, but multiscreens will not work
+ right with tvtwm and xlock. (grep on TVTWM in xlock.c).
+ Another option, don't compile with -DUSE_VROOT . If you debug it
+ mail ME -OR- both the author of tvtwm and ME the patch.
+ StickyAbove problems:
+ Windows in a tvtwm that have "StickyAbove" set to true are still
+ visible when xlock (+inroot) is running. If this bothers you,
+ don't compile with -DUSE_VROOT . Is it possible to have xlock
+ set "StickyAbove" to true as well?
+
+ fvwm
+ -install does not install colormaps. fvwm will not allow an
+ application to install its own colormap. You could always edit the
+ source if you have it, (fvwm-1.24r)colormaps.c, where it says
+ if(ReInstall)
+ {
+ XInstallColormap(dpy,last_cmap);
+ }
+ make sure this does not happen.
+
+ swirl mode
+ Use with -install to see colormap change.
+ See "fvwm" if applicable.
+ "swirl" cycles its colors, except black and white.
+ This is easily seen when on a color monitor one enters:
+ ./xlock -mode swirl -inwindow -install
+ now move the mouse in the window.
+ If you find this annoying compile swirl.c with -DFORCEFIXEDCOLORS.
+ I hear it LOCKS UP on i386BsdArchitecture and tvtwm.
+ With twm (and fvwm see above) the colormap does not change.
+
+
+Personal Use
+------------
+ You may want to compile with USE_XLOCKRC . xlock will then prompt
+ you the first time you use it for a password. It is then encrypted
+ and stored in your $HOME/.xlockrc file. This is also good for
+ users who have an unrecognized shadow password environment. See
+ Imakefile (xmkmf) or Makefile.in (configure) for an example. Please
+ note that it may be rude to use xlock in a lab environment.
+
+Lab Environment
+---------------
+ The auto logout feature, when enabled, will log out a user after
+ 30 minutes (by default). The timeout can be changed or disabled
+ with a command-line option (or x resource -- this is allowed because
+ the logout button can always be used; see below). The time
+ remaining before auto-logout is displayed on the password entry
+ screen.
+
+ The logout button, when enabled, is a button that appears on the
+ password entry screen after 5 minutes (configurable at
+ compile-time) that, when clicked, logs out the user. The rationale
+ for this thing is that in a lab environment, we wanted a way for
+ users to be able to reliably lock their display for short periods
+ of time, but still be allowed to have the display locked for longer
+ than that if the lab isn't busy. If the lab IS busy, and there is
+ a need for workstations, the logout button can be used to logout
+ someone who's been gone for more than 5 minutes.
+
+ Of course, the auto-logout and the logout button are
+ enabled/disabled by compile-time defines. All these are OFF by
+ default. One can also force use these features with a local policy
+ of exemptions (e.g. username or group). See the Imakefile (xmkmf) or
+ Makefile.in (configure) file for an example. Edit your /etc/xlock.staff
+ file to reflect your policy. If using xdm, you may just want to use
+ -DCLOSEDOWN_LOGOUT (or -DSESSION_LOGOUT <- old way) in conjuction
+ with -DUSE_AUTO_LOGOUT or -DUSE_BUTTON_LOGOUT. That way all
+ backgrounded processes owned by a user do not have to be killed.
+
+ Don't PANIC, the auto-logout and the logout button will not run if
+ you are root. Otherwise, it will kill all of root's processes, not
+ a good idea. As long as you do not lock the screen (using -nolock,
+ -inwindow, or -inroot) the policy of xlock users does not go into
+ affect.
+
+
+xlock still does not work: :-(
+-------------------------------
+ If all that does not work you may need to adjust xlock.h, utils.c,
+ xlock.c, and resource.c since these files are highly implementation
+ dependent. If you have to make this kind of change to get it working,
+ let me know.
+
+ You can try compiling with -g and running it with -debug and your
+ favorite debugger, so xlock will run in a more friendly way (i.e. it
+ does not lock the screen). There are also may be compile time switches
+ that could be turned on with -DDEBUG depending on what is not working
+ correctly. Be aware one mode, puzzle uses XGetImage and this sometimes
+ bombs out with a BadMatch (invalid parameter attributes) if moved out of
+ view, this should be fixed but it is not a problem except with -inwindow
+ or -debug.
+
+ Here is a simple recipe:
+ Make sure the 12th line in the Imakefile is a comment
+ (This is because the debug library for xpm is not usually installed)
+XCOMM #define XpmLibrary
+ xmkmf <or configure --without-xpm>
+ edit Makefile on the line with CC = gcc or or CC = cc change to
+ CC = gcc -g -DDEBUG
+ make depend <but not if using configure>
+ make
+ gdb xlock
+ run -debug <other xlock options you want here>
+ bt <-After it bombs out try backtrace
+ print <relevant variables>
+ (you may have to use "up" to take you to xlockmore code)>
+ Mail me the results.
+
+ If xlock crashes for you when in random mode... try this and mail
+ me the results. (If it runs for a long time partial result will do
+ (gut the middle part)).
+ xlock -mode random -modelist all-puzzle +install -debug -verbose
+ -modelist all-puzzle: puzzle does not like to be moved off screen.
+ -debug: so it does not lock the screen.
+ -verbose: for maximum verbosity.
+ +install: so it does not keep changing the colormap
+
+
+Other things to try: (if you got it working :-) )
+-------------------------------------------------
+
+ You may want to compile xlock.c using -DUSE_MOUSE_MOTION, then xlock will
+ respond to (you guessed it) the motion of the mouse. This is not
+ recommended if you are using a virtual desktop; a default root window
+ that may be larger than the physical displayed resolution on your screen.
+
+ If you need to have a window up all the time, even over xlock, you
+ need to comment out
+ s[0] = '\0';
+ return 1;
+ in xlock.c after "case VisibilityNotify:". The window must be able to
+ pop itself to the front whenever it gets a visibility event. Any
+ problems here?
+
+ You may want to change the 1st line of XLock.ad "random" to "blank",
+ "life", or whatever your favorite is and copy it to
+ /usr/lib/X11/app-defaults or $HOME (or wherever your application
+ defaults files are) and rename to XLock .
+
+ You may want some of the modes never to come up in random. This is
+ already hard coded blank. See xlock man page on "modelist". In
+ mode.c you can hard code others by just putting the stuff that you do
+ not like in the LockProcs to the end of the static array and in
+ random.c increase NUMSPECIAL by the number of new screens that you do
+ not want displayed.
+
+ You may want to move xlock into /usr/bin/X11 (or wherever your X
+ binaries are). You may also want to move xlock.man to
+ /usr/man/man1/xlock.1 .
+
+ If you want to remove some unwanted modes just edit "mode.h" and
+ "mode.c" grep the for the unwanted modes. You might want to edit
+ the man page and your favorite make file as well.
+
+ I am always looking to improve life, life3d, and life1d. If anyone
+ knows any new collections (I have lifep.zip (May 94) and xlife 3.0)
+ let me know. If you would like further information let me know.
+ life1d and life3d has compile-time options that you may want to
+ check out. Also ant needs new breeds of interesting ants.
+
+ Still like xscreensaver better? (Obscenities omitted ;) ) Try
+ setting your apps-defaults file for xscreensaver like:
+*programs: xlock -nolock +grabmouse -mode random
+
+ If you want to hack a new mode check out docs/HACKERS.GUIDE. Then
+ when working, just mail it to me, grep on Maintainer for address.
+
+
+Other related stuff (all not maintained by me, except the last one):
+--------------------------------------------------------------------
+ NAME
+ LOCATION (last seen at)
+ DESCRIPTION
+ =============
+ xscreensaver
+ ftp://ftp.x.org/contrib/applications
+ http://www.netscape.com/people/jwz/xscreensaver
+ xautolock (runs xlock after a idle time)
+ ftp://ftp.x.org/contrib/applications
+ fortune
+ ftp://igor.girton.cam.ac.uk/pub/funny/cookie.tgz
+ ftp://ftp.uu.net/systems/unix/BSD/games/fortune
+ ftp://ftp.sterling.com/usenet/alt.sources/index (grep for cookie)
+ Please note that my format is slightly different. The number at the
+ top of the file should match `grep -c "^%%$" fortune.dat`
+ Lesstif
+ ftp://ftp.hungry.com/pub/hungry/lesstif/lesstif-current.tar.gz
+ Lesstif Library (just like Motif)
+ Man2HTML vh-man2html-1.4.tar.gz
+ ftp://sunsite.unc.edu/pub/Linux/system/Manual-pagers
+ MesaGL
+ ftp://iris.ssec.wisc.edu/pub/Mesa
+ Mesa 3-D Graphics Library (like GL) Mesa-2.3 or greater required.
+ Mesa-2.2 and below has some memory leaks.
+ XPM
+ ftp://ftp.x.org/contrib/libraries
+ color pixmaps
+ XPM/VMS
+ use the one above or xlock may bomb out,
+ compile with cc/standard=vaxc/define=(need_strcasecmp,need_strdup)
+ except when using XVMSUTILS.
+ NAS (audio package)
+ ftp://ftp.x.org/contrib/audio/nas
+ rplay (audio package)
+ ftp://ftp.x.org/contrib/audio/rplay
+ audio/VMS
+ http://axp616.gsi.de:8080/www/vms/mzsw.html
+ UNIX/VMS
+ Unix-like routines XVMSUTILS can be found at
+ http://axp616.gsi.de:8080/www/vms/mzsw.html
+
+
+Some open problems: (Suggestions for this would be nice)
+---------------------------------------------------------
+
+ 0. A few unitialized memory reads and memory leaks were detected in some
+ of the code. grep for "PURIFY" in the source files to see where the
+ remaining problems are. Also see docs/Purify for more details.
+
+ 1. It would be nice to have an option -idletime time. Where xlock would
+ run after a certain idle time. (Here xautolock may help you, see
+ above).
+
+ 2. All modes that use MI_PAUSE (eg. life1d, lightning, maze, nose,
+ penrose, triangle) get mouse movement events in the little password
+ window. Also on multiheaded machines MI_PAUSE on one screen affects
+ both screens.
+
+ 3. image and puzzle using xpm occasionally have the wrong colormap
+ installed. fg and bg colors can be messed up.
+
+ 4. -inwindow not correct for multiscreens, there should only be one
+ window.
+
+ 5. raster files when loaded with -install (for puzzle and image) do not
+ preserve foreground, background, or white colors.
+
+ 6. -mono does not work for XPM especially bat. -mono messed up for ball.
+
+ 7. Options within a mode can not be duplicated in other modes. Temporary
+ solution is to have xlock modes like "-neighbor" that only a few of the
+ modes use.
+
+ 8. -use3d -install is messed up on Suns. Megenta boxes are seen on rock.
+ Worms might have red and magenta worms (depending on SunCC or SunOS).
+
+ 9. If the -cpasswd option is absent, it looks for ~/.xlockrc (until
+ here, perfect) but if it doesn't find ~/.xlockrc, it should try to read
+ the info from the system files. This way, you don't need to choose
+ between XLOCKRC and not and you can use both with the default being
+ your normal password. (of course, if it's taken from the system files,
+ it should not be written back to ~/.xlockrc).
+
+ 10. Not all resources are listed in "xlock -resources", e.g. nolock.
+ If xlock is renamed these resources are not picked up.
+
+ Various modes need better refresh capability.
+
+ ball: can it be updated to use a pixmap instead of a slow circle fill?
+
+ braid: should be made so that it can be interrupted quicker.
+
+ bounce:
+ sometimes a ball does not roll off another ball.
+ momentum seems to be created.
+
+ ico:
+ should have all the features of the original.
+ triangular face objects do not look good when rotated.
+
+ flag:
+ should not always be at the same starting point.
+
+ kaleid: needs to be triangular.
+
+ life3d: draws invisible cubes when it does not have to. The original
+ MS DOS code weeded this out, but it did not seem to port to X.
+
+ marquee:
+ "-messagefile filename" truncates a large file.
+ "-message string" does not handle Control-H correctly.
+
+ mountain: -size # for mountain should do something.
+
+ nose: should handle Control-H better for underlining and accents.
+
+ pipes: middle mouse button does not change 1st screen on multiscreens.
+
+ slip:
+ should be less jarring
+ get rid of single color blotch.
+ should be made so that it can be interrupted quicker.
+
+ swirl: what does that TrueColor code do?
+
+ wire: it needs a better circuit generator.
+
+ New lockscreens suggestions (some may be very hard :) ):
+ "dead" a Grateful Dead mode with dancing bears/skeletons/turtles.
+ "graph" a random planar graph drawn ... filled in by a 5 (or 4 :) )
+ coloring algorithm.
+ "invert" a demonstration of turning a sphere inside out without creating
+ any kinks (two surfaces can occupy the same space at the same time).
+ Randomize the viewing angle.
+ "minimal" a random minimal surface generator.
+ "bubble" lockscreen
+ GL 3d maze, where your inside the maze
+ Impossible Escher-like objects in GL and spin them around?
+ A 4d ico where the 6 4D "platonic" objects "roll" around in 3d space.
+
+ Need a small 3D engine for wire, hidden surface removal, shading, ....
+
+ I REALLY hate to turn down contributions... some reasons for not making
+ it into the main directory...
+ Did not black out the screen when they start. I do not like people
+ to see what I am doing. :^|
+ Did not work in the little window or buggy.
+ Is too similar mode to a mode that already exists.
+ Many people complained about the mode (exception if I wrote it. :) ).
+ Just not enough randomness or is not interesting enough.
+ No multiscreen support.
+ But I labor over them (in a haphazard fashion) and they usually are
+ released eventually.
+
+
+Operation: (Blurb taken from Darren Senn's xlock)
+-------------------------------------------------
+
+ Under X, run xlock. The screen will clear, and some pretty animated
+ picture (exactly which depends on which module is active) will appear
+ on the screen. If you hit a key, then the screen will clear, and
+ (unless you've changed the application defaults file that I packaged
+ with this) you'll get a black screen with some graphics in the top
+ center. These graphics consist of a reduced size image of the module
+ you were viewing, the name of the user who executed xlock, and
+ password prompt field, and some short instructions.
+
+ At this point, you can either click on the graphic to return to xlock,
+ or you can type a password. If the password is verifiable as the
+ root password, or the password of the user listed above, then xlock
+ will terminate. THIS IS THE ONLY WAY TO STOP XLOCK WITHOUT SHUTTING
+ DOWN THE X SERVER. That's what makes it a lock.
+
+
+Resources: (Also taken from Darren Senn's xlock)
+------------------------------------------------
+
+ There are two sets of resources for XLock. The first set are (what I
+ call) global XLock resources, while the second set consists of
+ module-specific resources. I'll get more into modules a little further
+ below.
+
+ The global resources are:
+ XLock.mode: This sets the module. More about this later.
+ XLock.font: This is the font used on the password entry screen.
+ XLock.background: The background color for the password entry screen.
+ XLock.foreground: The foreground color for the password entry screen.
+ XLock.username: The label for the field indicating the user name.
+ XLock.password: The label for the password prompt.
+ XLock.info: The "short instructions" to print.
+ XLock.validate: A message to display while checking the password
+ XLock.invalid: A message to display if the password is incorrect
+ XLock.nice: How much XLock should nice itself.
+ XLock.timeout: How long to wait idle at the password prompt.
+ XLock.timeelapsed: Message to see how long lock running (yes or no)
+ XLock.mono: Monochrome mode (yes or no)
+ XLock.nolock: disable the lock mechanism (yes or no)
+ XLock.remote: allow remote locking (meaningless under linux)
+ XLock.allowroot: allow the root password to unlock (yes or no)
+ XLock.enablesaver: allow the system screensaver to work (yes or no)
+ XLock.allowaccess: allow other clients to connect while active
+ XLock.echokeys: Echo "?" for each password keypress (yes or no)
+ XLock.usefirst: Ignore the first character typed (yes or no)
+ XLock.verbose: Verbose mode. (yes or no)
+ XLock.inwindow: allow the xlock to run in a window (yes or no)
+ XLock.inroot: allow the xlock to run in the root window (yes or no)
+ XLock.grabmouse: Grab the keyboard and mouse (yes or no)
+
+ XLock has a number of modules which it can display. (See the man page
+ for a complete list). It turns out that each module is characterized
+ by a number of initializations, separated by a number of "draws".
+ Each module has the following resources defined:
+
+ XLock.<module>.delay: How long to wait between draws (usec)
+ XLock.<module>.batchcount: May mean various things (see man page).
+ XLock.<module>.cycles: Controls the timeout of screen (see man page).
+ XLock.<module>.size: Controls size of objects on screen (see man page).
+ XLock.<module>.saturation: Saturation (as in HSV) of colors to use.
+
+
+Acknowledgments:
+----------------
+
+ I did not write the original algorithms in any of the lock screens
+ (except wator, bug, life1d, demon, ant, and daisy), although I did
+ convert many of the new ones to run with xlock. I tried to follow
+ the original style of Patrick Naughton. Updates are made at
+ ftp.x.org in directory /contrib/applications. Many of the additions
+ were "borrowed" from xscreensaver (Jamie Zawinski <jwz@netscape.com>).
+ Some of the others were "borrowed" from old demos from Sun. Many more
+ are contributions.
+
+ I will consider putting new ones in if (1) they are more or less public
+ domain (i.e. BSD, sorry no GNU copyrights), (2) they are neat (I am
+ biased towards mathematically based programs (especially the Computer
+ Recreations of Scientific American)), and (3) I have the time.
+
+ Also many thanks to the people that helped me countless times with
+ xlock mentioned in "Revisions", especially Jouk Jansen, Tom Schmidt,
+ David Hansen, Ed Mackey, Marcelo Vianna, Ron Hitchens, and Heath Kehoe.
--- /dev/null
+!!!!
+! XLock: Class resource for xlock (xlockmore-4.03)
+!!!!
+XLock.mode: random
+!XLock.mode: blank
+!XLock.mode: life
+XLock.font: -b&h-lucida-medium-r-normal-sans-24-*-*-*-*-*-iso8859-1
+!XLock.font: -*-times-*-*-*-*-18-*-*-*-*-*-*-*
+!XLock.background: White
+!XLock.foreground: Black
+XLock.background: Black
+XLock.foreground: White
+!XLock.foreground: AntiqueWhite
+XLock.username: Name:
+XLock.password: Password:
+XLock.info: Enter password to unlock; select icon to lock.
+XLock.validate: Validating login...
+XLock.invalid: Invalid login.
+XLock.nolock: off
+XLock.inwindow: off
+XLock.inroot: off
+XLock.remote: off
+XLock.mono: off
+XLock.allowaccess: off
+XLock.allowroot: off
+XLock.echokeys: off
+XLock.enablesaver: on
+XLock.grabmouse: on
+XLock.install: on
+XLock.sound: off
+XLock.timeelapsed: off
+XLock.usefirst: off
+XLock.verbose: off
+XLock.nice: 10
+XLock.lockdelay: 0
+XLock.timeout: 30
+!XLock.geometry: 64x64
+!XLock.icongeometry: 4x4
+XLock.icongeometry: 64x64
+!XLock.icongeometry: 256x256
+
+! For bouboule, pyro, star, & worm modes
+XLock.use3d: off
+XLock.delta3d: 1.5
+XLock.right3d: Red
+XLock.left3d: Blue
+XLock.both3d: Magenta
+
+! For marquee & nose modes
+!XLock.program: fortune -o
+XLock.program: fortune -s
+!XLock.program: fortune
+!XLock.program: finger
+!XLock.messagesfile: fortune.dat
+!XLock.messagefile: /etc/hosts
+!XLock.message: "Go away, no one is here"
+XLock.mfont: -b&h-lucida-medium-r-normal-sans-24-*-*-*-*-*-iso8859-1
+!XLock.mfont: -*-times-*-*-*-*-18-*-*-*-*-*-*-*
+
+! For image & puzzle modes
+!XLock.imagefile: raster/scream.ras
+!XLock.imagefile: pixmaps/image-xlock.xpm
+
+! For ant & demon modes
+!XLock.neighbors: 6
+!XLock.neighbors: 4
+XLock.neighbors: 0
+
+XLock.logoutAuto: 0 ! 0 defaults to maximum defined value
+XLock.logoutButton: 0 ! 0 defaults to maximum defined value
+XLock.logoutButtonLabel: Click here to logout
+XLock.logoutButtonHelp: \
+You may log out this session if no terminals are available.
+XLock.logoutFailedString: \
+Logout attempt FAILED.\n\
+Current user could not be automatically logged out.
+
+! Mode options: If batchcount, cycles, or size options are set to 1 ...
+! they are probably not used by the mode.
+XLock.ant.delay: 1000
+XLock.ant.batchcount: -3
+XLock.ant.cycles: 40000
+XLock.ant.size: -7
+XLock.ant.truchet: on
+XLock.ant.saturation: 1.0
+XLock.ball.delay: 10000
+XLock.ball.batchcount: 10
+XLock.ball.cycles: 20
+XLock.ball.size: -100
+XLock.ball.saturation: 1.0
+XLock.bat.delay: 100000
+XLock.bat.batchcount: -8
+!XLock.bat.cycles: 1
+XLock.bat.size: 0
+XLock.bat.saturation: 1.0
+XLock.blot.delay: 200000
+XLock.blot.batchcount: 6
+XLock.blot.cycles: 30
+!XLock.blot.size: 1
+XLock.blot.saturation: 0.4
+XLock.bouboule.delay: 5000
+XLock.bouboule.batchcount: 100
+!XLock.bouboule.cycles: 1
+XLock.bouboule.size: 15
+XLock.bouboule.saturation: 1.0
+XLock.bounce.delay: 5000
+XLock.bounce.batchcount: -10
+!XLock.bounce.cycles: 1
+XLock.bounce.size: 0
+XLock.bounce.saturation: 1.0
+XLock.braid.delay: 1000
+XLock.braid.batchcount: 15
+XLock.braid.cycles: 100
+!XLock.braid.size: 1
+XLock.braid.saturation: 1.0
+XLock.bug.delay: 75000
+XLock.bug.batchcount: 10
+XLock.bug.cycles: 32767
+XLock.bug.size: -4
+XLock.bug.saturation: 1.0
+XLock.cartoon.delay: 10000
+!XLock.cartoon.batchcount: 1
+!XLock.cartoon.cycles: 1
+!XLock.cartoon.size: 1
+XLock.cartoon.saturation: 1.0
+XLock.clock.delay: 100000
+XLock.clock.batchcount: -16
+XLock.clock.cycles: 200
+XLock.clock.size: -200
+XLock.clock.saturation: 1.0
+XLock.crystal.delay: 60000
+XLock.crystal.batchcount: -40
+XLock.crystal.cycles: 200
+XLock.crystal.size: -15
+XLock.crystal.saturation: 1.0
+XLock.daisy.delay: 100000
+XLock.daisy.batchcount: 300
+XLock.daisy.cycles: 350
+!XLock.daisy.size: 1
+XLock.daisy.saturation: 1.0
+XLock.dclock.delay: 10000
+!XLock.dclock.batchcount: 1
+XLock.dclock.cycles: 10000
+!XLock.dclock.size: 1
+XLock.dclock.saturation: 0.2
+XLock.demon.delay: 50000
+XLock.demon.batchcount: 0
+XLock.demon.cycles: 1000
+XLock.demon.size: -7
+XLock.demon.saturation: 1.0
+XLock.drift.delay: 10000
+XLock.drift.batchcount: 30
+!XLock.drift.cycles: 1
+!XLock.drift.size: 1
+XLock.drift.saturation: 1.0
+XLock.drift.grow: off
+XLock.drift.liss: off
+XLock.eyes.delay: 20000
+XLock.eyes.batchcount: -8
+XLock.eyes.cycles: 5
+!XLock.eyes.size: 1
+XLock.eyes.saturation: 1.0
+XLock.flag.delay: 50000
+!XLock.flag.batchcount: 1
+XLock.flag.cycles: 1000
+XLock.flag.size: -7
+XLock.flag.saturation: 1.0
+XLock.flame.delay: 750000
+XLock.flame.batchcount: 20
+XLock.flame.cycles: 10000
+!XLock.flame.size: 1
+XLock.flame.saturation: 1.0
+XLock.forest.delay: 400000
+XLock.forest.batchcount: 100
+XLock.forest.cycles: 200
+!XLock.forest.size: 1
+XLock.forest.saturation: 1.0
+XLock.fract.delay: 200000
+!XLock.fract.batchcount: 1
+!XLock.fract.cycles: 1
+!XLock.fract.size: 1
+XLock.fract.saturation: 1.0
+XLock.galaxy.delay: 100
+XLock.galaxy.batchcount: -5
+XLock.galaxy.cycles: 250
+XLock.galaxy.size: -3
+XLock.galaxy.saturation: 1.0
+XLock.galaxy.tracks: off
+XLock.geometry.delay: 10000
+XLock.geometry.batchcount: -10
+!XLock.geometry.cycles: 1
+!XLock.geometry.size: 1
+XLock.geometry.saturation: 1.0
+XLock.grav.delay: 10000
+XLock.grav.batchcount: -12
+!XLock.grav.cycles: 1
+!XLock.grav.size: 1
+XLock.grav.saturation: 1.0
+XLock.grav.decay: off
+XLock.grav.trail: off
+XLock.helix.delay: 25000
+!XLock.helix.batchcount: 1
+XLock.helix.cycles: 100
+!XLock.helix.size: 1
+XLock.helix.saturation: 1.0
+XLock.helix.ellipse: off
+XLock.hop.delay: 10000
+XLock.hop.batchcount: 1000
+XLock.hop.cycles: 2500
+!XLock.hop.size: 1
+XLock.hop.saturation: 1.0
+XLock.hyper.delay: 20000
+!XLock.hyper.batchcount: 1
+XLock.hyper.cycles: 5000
+!XLock.hyper.size: 1
+XLock.hyper.saturation: 1.0
+XLock.ico.delay: 100000
+XLock.ico.batchcount: 0
+XLock.ico.cycles: 400
+XLock.ico.size: 0
+XLock.ico.saturation: 1.0
+XLock.ifs.delay: 1000
+!XLock.ifs.batchcount: 1
+!XLock.ifs.cycles: 1
+!XLock.ifs.size: 1
+XLock.ifs.saturation: 1.0
+XLock.image.delay: 2000000
+XLock.image.batchcount: -10
+!XLock.image.cycles: 1
+!XLock.image.size: 1
+XLock.image.saturation: 0.3
+XLock.julia.delay: 10000
+XLock.julia.batchcount: 1000
+XLock.julia.cycles: 20
+!XLock.julia.size: 1
+XLock.julia.saturation: 0.3
+XLock.julia.mouse: off
+XLock.kaleid.delay: 20000
+!XLock.kaleid.batchcount: 1
+XLock.kaleid.cycles: 700
+!XLock.kaleid.size: 1
+XLock.kaleid.saturation: 1.0
+XLock.laser.delay: 20000
+XLock.laser.batchcount: -10
+XLock.laser.cycles: 200
+!XLock.laser.size: 1
+XLock.laser.saturation: 1.0
+XLock.life.delay: 750000
+XLock.life.batchcount: 40
+XLock.life.cycles: 140
+XLock.life.size: 0
+XLock.life.saturation: 1.0
+XLock.life.rule: 2333
+XLock.life1d.delay: 10000
+!XLock.life1d.batchcount: 1
+XLock.life1d.cycles: 10
+XLock.life1d.size: 0
+XLock.life1d.saturation: 1.0
+XLock.life1d.totalistic: True
+XLock.life3d.delay: 1000000
+XLock.life3d.batchcount: 35
+XLock.life3d.cycles: 85
+!XLock.life3d.size: 1
+XLock.life3d.saturation: 1.0
+!XLock.life3d.rule3d: 0
+XLock.life3d.rule3d: 1
+!XLock.life3d.rule3d: 4555
+!XLock.life3d.rule3d: 5766
+!XLock.life3d.rule3d: 5655
+!XLock.life3d.rule3d: 6767
+XLock.lightning.delay: 10000
+!XLock.lightning.batchcount: 1
+!XLock.lightning.cycles: 1
+!XLock.lightning.size: 1
+XLock.lightning.saturation: 0.6
+XLock.lisa.delay: 25000
+XLock.lisa.batchcount: 1
+XLock.lisa.cycles: 256
+XLock.lisa.size: -1
+XLock.lisa.saturation: 1.0
+XLock.lissie.delay: 10000
+XLock.lissie.batchcount: 1
+XLock.lissie.cycles: 2000
+XLock.lissie.size: -200
+XLock.lissie.saturation: 0.6
+XLock.loop.delay: 100000
+!XLock.loop.batchcount: 1
+XLock.loop.cycles: 1600
+XLock.loop.size: -12
+XLock.loop.saturation: 1.0
+XLock.marquee.delay: 100000
+!XLock.marquee.batchcount: 1
+!XLock.marquee.cycles: 1
+!XLock.marquee.size: 1
+XLock.marquee.saturation: 1.0
+XLock.maze.delay: 1000
+!XLock.maze.batchcount: 1
+XLock.maze.cycles: 300
+!XLock.maze.size: 8
+XLock.maze.size: -40
+XLock.maze.saturation: 1.0
+XLock.mountain.delay: 1000
+XLock.mountain.batchcount: 30
+XLock.mountain.cycles: 300
+!XLock.mountain.size: 1
+XLock.mountain.saturation: 1.0
+XLock.nose.delay: 100000
+!XLock.nose.batchcount: 1
+!XLock.nose.cycles: 1
+!XLock.nose.size: 1
+XLock.nose.saturation: 1.0
+XLock.pacman.delay: 100000
+XLock.pacman.batchcount: 10
+!XLock.pacman.cycles: 1
+XLock.pacman.size: 0
+XLock.pacman.saturation: 1.0
+XLock.penrose.delay: 10000
+!XLock.penrose.batchcount: 1
+!XLock.penrose.cycles: 1
+XLock.penrose.size: -40
+XLock.penrose.saturation: 1.0
+XLock.penrose.ammann: off
+XLock.petal.delay: 10000
+XLock.petal.batchcount: -500
+XLock.petal.cycles: 400
+!XLock.petal.size: 1
+XLock.petal.saturation: 1.0
+XLock.puzzle.delay: 10000
+XLock.puzzle.batchcount: 250
+!XLock.puzzle.cycles: 1
+!XLock.puzzle.size: 1
+XLock.puzzle.saturation: 1.0
+XLock.pyro.delay: 15000
+XLock.pyro.batchcount: 100
+!XLock.pyro.cycles: 1
+XLock.pyro.size: -3
+XLock.pyro.saturation: 1.0
+XLock.qix.delay: 30000
+!XLock.qix.batchcount: 1
+XLock.qix.cycles: 64
+!XLock.qix.size: 1
+XLock.qix.saturation: 1.0
+XLock.roll.delay: 100000
+XLock.roll.batchcount: 25
+!XLock.roll.cycles: 1
+XLock.roll.size: -64
+XLock.roll.saturation: 1.0
+XLock.rotor.delay: 10000
+XLock.rotor.batchcount: 4
+XLock.rotor.cycles: 20
+!XLock.rotor.size: 1
+XLock.rotor.saturation: 0.4
+XLock.shape.delay: 10000
+!XLock.shape.batchcount: 1
+XLock.shape.cycles: 256
+!XLock.shape.size: 1
+XLock.shape.saturation: 1.0
+XLock.sierpinski.delay: 400000
+XLock.sierpinski.batchcount: 2000
+XLock.sierpinski.cycles: 100
+!XLock.sierpinski.size: 1
+XLock.sierpinski.saturation: 1.0
+XLock.slip.delay: 50000
+XLock.slip.batchcount: 35
+XLock.slip.cycles: 50
+!XLock.slip.size: 1
+XLock.slip.saturation: 1.0
+XLock.sphere.delay: 1000
+!XLock.sphere.batchcount: 1
+!XLock.sphere.cycles: 1
+!XLock.sphere.size: 1
+XLock.sphere.saturation: 1.0
+XLock.spiral.delay: 5000
+XLock.spiral.batchcount: -40
+XLock.spiral.cycles: 350
+!XLock.spiral.size: 1
+XLock.spiral.saturation: 1.0
+XLock.spline.delay: 30000
+XLock.spline.batchcount: -6
+XLock.spline.cycles: 2048
+!XLock.spline.size: 1
+XLock.spline.saturation: 0.4
+XLock.spline.erase: off
+XLock.star.delay: 40000
+XLock.star.batchcount: 100
+!XLock.star.cycles: 1
+XLock.star.size: 100
+XLock.star.saturation: 0.2
+!XLock.star.saturation: 1.0
+XLock.star.straight: off
+XLock.star.rock: off
+XLock.star.trek: 50
+XLock.strange.delay: 1000
+!XLock.strange.batchcount: 1
+!XLock.strange.cycles: 1
+!XLock.strange.size: 1
+XLock.strange.saturation: 1.0
+XLock.swarm.delay: 10000
+XLock.swarm.batchcount: 100
+!XLock.swarm.cycles: 1
+!XLock.swarm.size: 1
+XLock.swarm.saturation: 1.0
+XLock.swirl.delay: 10000
+XLock.swirl.batchcount: 5
+!XLock.swirl.cycles: 1
+!XLock.swirl.size: 1
+XLock.swirl.saturation: 1.0
+XLock.triangle.delay: 10000
+!XLock.triangle.batchcount: 1
+!XLock.triangle.cycles: 1
+!XLock.triangle.size: 1
+XLock.triangle.saturation: 1.0
+XLock.tube.delay: 25000
+!XLock.tube.batchcount: 1
+XLock.tube.cycles: 20000
+XLock.tube.size: -200
+XLock.tube.saturation: 1.0
+XLock.turtle.delay: 1000000
+!XLock.turtle.batchcount: 1
+XLock.turtle.cycles: 20
+!XLock.turtle.size: 1
+XLock.turtle.saturation: 1.0
+XLock.voters.delay: 1000
+XLock.voters.batchcount: 0
+XLock.voters.cycles: 327670
+XLock.voters.size: 0
+XLock.voters.saturation: 1.0
+XLock.wator.delay: 750000
+!XLock.wator.batchcount: 1
+XLock.wator.cycles: 32767
+XLock.wator.size: 0
+XLock.wator.saturation: 1.0
+XLock.wire.delay: 500000
+XLock.wire.batchcount: 1000
+XLock.wire.cycles: 150
+XLock.wire.size: -8
+XLock.wire.saturation: 1.0
+XLock.world.delay: 100000
+XLock.world.batchcount: -16
+!XLock.world.cycles: 1
+!XLock.world.size: 1
+XLock.world.saturation: 0.3
+XLock.worm.delay: 17000
+XLock.worm.batchcount: -20
+XLock.worm.cycles: 10
+XLock.worm.size: -3
+XLock.worm.saturation: 1.0
+
+XLock.escher.delay: 1000
+XLock.escher.batchcount: 0
+!XLock.escher.cycles: 1
+!XLock.escher.size: 1
+XLock.escher.saturation: 1.0
+XLock.escher.solidmoebius: off
+XLock.escher.noants: off
+XLock.gears.delay: 1000
+XLock.gears.batchcount: 1
+XLock.gears.cycles: 2
+!XLock.gears.size: 1
+XLock.gears.saturation: 1.0
+XLock.morph3d.delay: 1000
+XLock.morph3d.batchcount: 0
+!XLock.morph3d.cycles: 1
+!XLock.morph3d.size: 1
+XLock.morph3d.saturation: 1.0
+XLock.pipes.delay: 1000
+XLock.pipes.batchcount: 2
+XLock.pipes.cycles: 5
+XLock.pipes.size: 500
+XLock.pipes.saturation: 1.0
+XLock.pipes.fisheye: on
+XLock.pipes.tightturns: off
+XLock.pipes.rotatepipes: on
+
+XLock.superquadrics.delay: 1000
+XLock.superquadrics.batchcount: 25
+XLock.superquadrics.cycles: 40
+!XLock.superquadrics.size: 1
+XLock.superquadrics.saturation: 1.0
+XLock.superquadrics.spinspeed: 5.0
+XLock.sproingies.delay: 1000
+XLock.sproingies.batchcount: 5
+XLock.sproingies.cycles: 0
+XLock.sproingies.size: 400
+XLock.sproingies.saturation: 1.0
+
+XLock.fadeplot.delay: 30000
+XLock.fadeplot.batchcount: 1500
+XLock.fadeplot.cycles: 1
+XLock.fadeplot.size: 1
+XLock.fadeplot.saturation: 1.0
+
+XLock.blank.delay: 3000000
+!XLock.blank.batchcount: 1
+!XLock.blank.cycles: 1
+!XLock.blank.size: 1
+XLock.blank.saturation: 1.0
+XLock.bomb.delay: 100000
+XLock.bomb.batchcount: 10
+XLock.bomb.cycles: 20
+!XLock.bomb.size: 1
+XLock.bomb.saturation: 1.0
+
+XLock.random.duration: 60
+!XLock.random.duration: 0
+XLock.random.modelist: all
+!XLock.random.modelist: allstable
+!XLock.random.modelist: allnice
+XLock.random.sequential: off
--- /dev/null
+!!!!
+! XmLock: Class resource for xmlock
+!!!!
+!XmLock.Form.Boolean.Fontlist: -*-*-bold-i-*-*-16-*-*-*-*-*-*-*
+!XmLock.Form.Switches.Fontlist: -*-*-bold-i-*-*-16-*-*-*-*-*-*-*
+!XmLock.Form.PushButtonRow.Menubar.PopupOptions.Options.Font.Fontlist: -*-*-bold-i-*-*-*-*-*-*-*-*-*-*
+XmLock.Form.PushButtonRow.Exit.Background: red
+XmLock.Form.PushButtonRow.Exit.Armcolor: pink
+!XmLock.Form.PushButtonRow.Exit.Fontlist: -*-*-bold-i-*-*-*-*-*-*-*-*-*-*
+!XmLock.Form.Modes.Labelstring: Modes
+!XmLock.Form.Switches.Labelstring: Turn On/Off
+!XmLock.Form.Row*ScrolledListModes.BorderColor: black
+!XmLock.Form.Row*ScrolledListModes.Fontlist: -*-*-bold-*-*-*-16-*-*-*-*-*-*-*
+XmLock.Form.Row*ScrolledListModes.Background: light blue
+XmLock.Form.Row.TogglesRow.Background: white
+!XmLock.Form.Row.Xmrowcolumn*Fontlist: -*-*-*-*-*-*-14-*-*-*-*-*-*-*
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)ant.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * ant.c - Chris Langton's generalized turing machine ants (also known
+ * as Greg Turk's turmites) whose tape is the screen, for the
+ * X Window System lockscreen.
+ *
+ * Copyright (c) 1995 by David Bagley.
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 16-Apr-97: -neighbors 3 and 8 added
+ * 01-Jan-97: Updated ant.c to handle more kinds of ants. Thanks to
+ * J Austin David <Austin.David@tlogic.com>. Check it out in
+ * java at http://havoc.gtf.gatech.edu/austin He thought up the
+ * new Ladder ant.
+ * 04-Apr-96: -neighbors 6 runtime-time option added for hexagonal ants
+ * (bees), coded from an idea of Jim Propp's in Science News,
+ * Oct 28, 1995 VOL. 148 page 287
+ * 20-Sep-95: Memory leak in ant fixed. Now random colors.
+ * 05-Sep-95: Coded from A.K. Dewdney's "Computer Recreations", Scientific
+ * American Magazine" Sep 1989 pp 180-183, Mar 1990 p 121
+ * Also used Ian Stewart's Mathematical Recreations, Scientific
+ * American Jul 1994 pp 104-107
+ * also used demon.c and life.c as a guide.
+ */
+
+/*-
+ Species Grid Number of Neigbors
+ ------- ---- ------------------
+ Ants Square 4 or 8
+ Bees Hexagon 6
+ Bees Triangle 3 (9? or 12) <- 9 and 12 are not implemented
+
+ Neighbors 6 and neighbors 3 produce the same Turk ants.
+*/
+
+#ifdef STANDALONE
+#define PROGCLASS "Ant"
+#define HACK_INIT init_ant
+#define HACK_DRAW draw_ant
+#define DEF_DELAY 1000
+#define DEF_BATCHCOUNT -3
+#define DEF_CYCLES 40000
+#define DEF_SIZE -7
+#define DEF_NCOLORS 200
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+
+#endif /* STANDALONE */
+
+#define DEF_TRUCHET "False"
+
+extern int neighbors;
+static Bool truchet;
+
+#ifndef STANDALONE
+static XrmOptionDescRec opts[] =
+{
+ {"-truchet", ".ant.truchet", XrmoptionNoArg, (caddr_t) "on"},
+ {"+truchet", ".ant.truchet", XrmoptionNoArg, (caddr_t) "off"}
+};
+static argtype vars[] =
+{
+ {(caddr_t *) & truchet, "truchet", "Truchet", DEF_TRUCHET, t_Bool}
+};
+static OptionStruct desc[] =
+{
+ {"-/+truchet", "turn on/off Truchet lines"}
+};
+
+ModeSpecOpt ant_opts =
+{2, opts, 1, vars, desc};
+
+#endif /* !STANDALONE */
+
+#define ANTBITS(n,w,h)\
+ ap->pixmaps[ap->init_bits++]=\
+ XCreatePixmapFromBitmapData(display,window,(char *)n,w,h,1,0,1)
+
+/* If you change the table you may have to change the following 2 constants */
+#define STATES 2
+#define COLORS 11
+#define MINANTS 1
+#define PATTERNSIZE 8
+#define REDRAWSTEP 2000 /* How much tape to draw per cycle */
+#define MINGRIDSIZE 24
+#define MINSIZE 1
+#define ANGLES 360
+#define NEIGHBORKINDS 3
+
+static unsigned char patterns[COLORS - 1][PATTERNSIZE] =
+{
+ {0x11, 0x22, 0x11, 0x22, 0x11, 0x22, 0x11, 0x22}, /* grey+white | stripe */
+ {0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00}, /* spots */
+ {0x89, 0x44, 0x22, 0x11, 0x88, 0x44, 0x22, 0x11}, /* lt. / stripe */
+ {0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66}, /* | bars */
+ {0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa}, /* 50% grey */
+ {0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00}, /* - bars */
+ {0xee, 0xdd, 0xbb, 0x77, 0xee, 0xdd, 0xbb, 0x76}, /* dark \ stripe */
+ {0xff, 0x99, 0x99, 0xff, 0xff, 0x99, 0x99, 0xff}, /* spots */
+ {0xaa, 0xff, 0xff, 0x55, 0xaa, 0xff, 0xff, 0x55}, /* black+grey - stripe */
+ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff} /* black */
+};
+
+typedef struct {
+ unsigned char color;
+ short direction;
+ unsigned char next;
+} statestruct;
+
+typedef struct {
+ int col, row;
+ short direction;
+ unsigned char state;
+} antstruct;
+
+typedef struct {
+ int init_bits;
+ int neighbors;
+ int generation;
+ int xs, ys;
+ int xb, yb;
+ int nrows, ncols;
+ int width, height;
+ unsigned char ncolors, nstates;
+ int n;
+ int redrawing, redrawpos;
+ int truchet; /* Only for Turk modes */
+ statestruct machine[COLORS * STATES];
+ unsigned char *tape;
+ unsigned char *truchet_state;
+ antstruct *ants;
+ unsigned char colors[COLORS - 1];
+ GC stippledGC;
+ Pixmap pixmaps[COLORS - 1];
+ XPoint hexagonList[7];
+ XPoint triangleList[2][4];
+} antfarmstruct;
+
+static int initVal[NEIGHBORKINDS] =
+{3, 4, 6}; /* Neighborhoods, 8 just makes a mess */
+
+
+/* Relative ant moves */
+#define FS 0 /* Step */
+#define TRS 1 /* Turn right, then step */
+#define THRS 2 /* Turn hard right, then step */
+#define TBS 3 /* Turn back, then step */
+#define THLS 4 /* Turn hard left, then step */
+#define TLS 5 /* Turn left, then step */
+#define SF 6 /* Step */
+#define STR 7 /* Step then turn right */
+#define STHR 8 /* Step then turn hard right */
+#define STB 9 /* Step then turn back */
+#define STHL 10 /* Step then turn hard left */
+#define STL 11 /* Step then turn left */
+
+static antfarmstruct *antfarms = NULL;
+
+/* LANGTON'S ANT (10) Chaotic after 500, Builder after 10,000 (104p) */
+/* TURK'S 100 ANT Always chaotic?, tested past 150,000,000 */
+/* TURK'S 101 ANT Always chaotic? */
+/* TURK'S 110 ANT Builder at 150 (18p) */
+/* TURK'S 1000 ANT Always chaotic? */
+/* TURK'S 1100 SYMMETRIC ANT all even run 1's and 0's are symmetric */
+/* other examples 1001, 110011, 110000, 1001101 */
+/* TURK'S 1101 ANT Builder after 250,000 (388p) */
+/* Once saw a chess horse type builder (i.e. non-45 degree builder) */
+
+/* BEE ONLY */
+/* All alternating 10 appear symmetric, no proof (i.e. 10, 1010, etc) */
+/* Even runs of 0's and 1's are also symmetric */
+/* I have seen Hexagonal builders but they are more rare. */
+
+static unsigned char tables[][3 * COLORS * STATES + 2] =
+{
+#if 0
+ /* Here just so you can figure out notation */
+ { /* Langton's ant */
+ 2, 1,
+ 1, TLS, 0, 0, TRS, 0
+ },
+#else
+ /* First 2 numbers are the size (ncolors, nstates) */
+ { /* LADDER BUILDER */
+ 4, 1,
+ 1, STR, 0, 2, STL, 0, 3, TRS, 0, 0, TLS, 0
+ },
+ { /* SPIRALING PATTERN */
+ 2, 2,
+ 1, TLS, 0, 0, FS, 1,
+ 1, TRS, 0, 1, TRS, 0
+ },
+ { /* SQUARE (HEXAGON) BUILDER */
+ 2, 2,
+ 1, TLS, 0, 0, FS, 1,
+ 0, TRS, 0, 1, TRS, 0
+ },
+#endif
+};
+
+#define NTABLES (sizeof tables / sizeof tables[0])
+
+static void
+position_of_neighbor(antfarmstruct * ap, int dir, int *pcol, int *prow)
+{
+ int col = *pcol, row = *prow;
+
+ if (ap->neighbors == 6) {
+ switch (dir) {
+ case 0:
+ col = (col + 1 == ap->ncols) ? 0 : col + 1;
+ break;
+ case 60:
+ if (!(row & 1))
+ col = (col + 1 == ap->ncols) ? 0 : col + 1;
+ row = (!row) ? ap->nrows - 1 : row - 1;
+ break;
+ case 120:
+ if (row & 1)
+ col = (!col) ? ap->ncols - 1 : col - 1;
+ row = (!row) ? ap->nrows - 1 : row - 1;
+ break;
+ case 180:
+ col = (!col) ? ap->ncols - 1 : col - 1;
+ break;
+ case 240:
+ if (row & 1)
+ col = (!col) ? ap->ncols - 1 : col - 1;
+ row = (row + 1 == ap->nrows) ? 0 : row + 1;
+ break;
+ case 300:
+ if (!(row & 1))
+ col = (col + 1 == ap->ncols) ? 0 : col + 1;
+ row = (row + 1 == ap->nrows) ? 0 : row + 1;
+ break;
+ default:
+ (void) fprintf(stderr, "wrong direction %d\n", dir);
+ }
+ } else if (ap->neighbors == 4 || ap->neighbors == 8) {
+ switch (dir) {
+ case 0:
+ col = (col + 1 == ap->ncols) ? 0 : col + 1;
+ break;
+ case 45:
+ col = (col + 1 == ap->ncols) ? 0 : col + 1;
+ row = (!row) ? ap->nrows - 1 : row - 1;
+ break;
+ case 90:
+ row = (!row) ? ap->nrows - 1 : row - 1;
+ break;
+ case 135:
+ col = (!col) ? ap->ncols - 1 : col - 1;
+ row = (!row) ? ap->nrows - 1 : row - 1;
+ break;
+ case 180:
+ col = (!col) ? ap->ncols - 1 : col - 1;
+ break;
+ case 225:
+ col = (!col) ? ap->ncols - 1 : col - 1;
+ row = (row + 1 == ap->nrows) ? 0 : row + 1;
+ break;
+ case 270:
+ row = (row + 1 == ap->nrows) ? 0 : row + 1;
+ break;
+ case 315:
+ col = (col + 1 == ap->ncols) ? 0 : col + 1;
+ row = (row + 1 == ap->nrows) ? 0 : row + 1;
+ break;
+ default:
+ (void) fprintf(stderr, "wrong direction %d\n", dir);
+ }
+ } else { /* TRI */
+ if ((col + row) % 2) { /* right */
+ switch (dir) {
+ case 0:
+ col = (!col) ? ap->ncols - 1 : col - 1;
+ break;
+ case 30:
+ case 40:
+ col = (!col) ? ap->ncols - 1 : col - 1;
+ row = (!row) ? ap->nrows - 1 : row - 1;
+ break;
+ case 60:
+ col = (!col) ? ap->ncols - 1 : col - 1;
+ if (!row)
+ row = ap->nrows - 2;
+ else if (!(row - 1))
+ row = ap->nrows - 1;
+ else
+ row = row - 2;
+ case 80:
+ case 90:
+ if (!row)
+ row = ap->nrows - 2;
+ else if (!(row - 1))
+ row = ap->nrows - 1;
+ else
+ row = row - 2;
+ break;
+ case 120:
+ row = (!row) ? ap->nrows - 1 : row - 1;
+ break;
+ case 150:
+ case 160:
+ col = (col + 1 == ap->ncols) ? 0 : col + 1;
+ row = (!row) ? ap->nrows - 1 : row - 1;
+ break;
+ case 180:
+ col = (col + 1 == ap->ncols) ? 0 : col + 1;
+ break;
+ case 200:
+ case 210:
+ col = (col + 1 == ap->ncols) ? 0 : col + 1;
+ row = (row + 1 == ap->nrows) ? 0 : row + 1;
+ break;
+ case 240:
+ row = (row + 1 == ap->nrows) ? 0 : row + 1;
+ break;
+ case 270:
+ case 280:
+ if (row + 1 == ap->nrows)
+ row = 1;
+ else if (row + 2 == ap->nrows)
+ row = 0;
+ else
+ row = row + 2;
+ break;
+ case 300:
+ col = (!col) ? ap->ncols - 1 : col - 1;
+ if (row + 1 == ap->nrows)
+ row = 1;
+ else if (row + 2 == ap->nrows)
+ row = 0;
+ else
+ row = row + 2;
+ break;
+ case 320:
+ case 330:
+ col = (!col) ? ap->ncols - 1 : col - 1;
+ row = (row + 1 == ap->nrows) ? 0 : row + 1;
+ break;
+ default:
+ (void) fprintf(stderr, "wrong direction %d\n", dir);
+ }
+ } else { /* left */
+ switch (dir) {
+ case 0:
+ col = (col + 1 == ap->ncols) ? 0 : col + 1;
+ break;
+ case 30:
+ case 40:
+ col = (col + 1 == ap->ncols) ? 0 : col + 1;
+ row = (row + 1 == ap->nrows) ? 0 : row + 1;
+ break;
+ case 60:
+ col = (col + 1 == ap->ncols) ? 0 : col + 1;
+ if (row + 1 == ap->nrows)
+ row = 1;
+ else if (row + 2 == ap->nrows)
+ row = 0;
+ else
+ row = row + 2;
+ break;
+ case 80:
+ case 90:
+ if (row + 1 == ap->nrows)
+ row = 1;
+ else if (row + 2 == ap->nrows)
+ row = 0;
+ else
+ row = row + 2;
+ break;
+ case 120:
+ row = (row + 1 == ap->nrows) ? 0 : row + 1;
+ break;
+ case 150:
+ case 160:
+ col = (!col) ? ap->ncols - 1 : col - 1;
+ row = (row + 1 == ap->nrows) ? 0 : row + 1;
+ break;
+ case 180:
+ col = (!col) ? ap->ncols - 1 : col - 1;
+ break;
+ case 200:
+ case 210:
+ col = (!col) ? ap->ncols - 1 : col - 1;
+ row = (!row) ? ap->nrows - 1 : row - 1;
+ break;
+ case 240:
+ row = (!row) ? ap->nrows - 1 : row - 1;
+ break;
+ case 270:
+ case 280:
+ if (!row)
+ row = ap->nrows - 2;
+ else if (row == 1)
+ row = ap->nrows - 1;
+ else
+ row = row - 2;
+ break;
+ case 300:
+ col = (col + 1 == ap->ncols) ? 0 : col + 1;
+ if (!row)
+ row = ap->nrows - 2;
+ else if (row == 1)
+ row = ap->nrows - 1;
+ else
+ row = row - 2;
+ break;
+ case 320:
+ case 330:
+ col = (col + 1 == ap->ncols) ? 0 : col + 1;
+ row = (!row) ? ap->nrows - 1 : row - 1;
+ break;
+ default:
+ (void) fprintf(stderr, "wrong direction %d\n", dir);
+ }
+ }
+ }
+ *pcol = col;
+ *prow = row;
+}
+
+static void
+fillcell(ModeInfo * mi, GC gc, int col, int row)
+{
+ antfarmstruct *ap = &antfarms[MI_SCREEN(mi)];
+
+ if (ap->neighbors == 6) {
+ int ccol = 2 * col + !(row & 1), crow = 2 * row;
+
+ ap->hexagonList[0].x = ap->xb + ccol * ap->xs;
+ ap->hexagonList[0].y = ap->yb + crow * ap->ys;
+ if (ap->xs == 1 && ap->ys == 1)
+ XFillRectangle(MI_DISPLAY(mi), MI_WINDOW(mi), gc,
+ ap->hexagonList[0].x, ap->hexagonList[0].y, 1, 1);
+ else
+ XFillPolygon(MI_DISPLAY(mi), MI_WINDOW(mi), gc,
+ ap->hexagonList, 6, Convex, CoordModePrevious);
+ } else if (ap->neighbors == 4 || ap->neighbors == 8) {
+ XFillRectangle(MI_DISPLAY(mi), MI_WINDOW(mi), gc,
+ ap->xb + ap->xs * col, ap->yb + ap->ys * row, ap->xs, ap->ys);
+ } else { /* TRI */
+ int orient = (col + row) % 2; /* O left 1 right */
+
+ ap->triangleList[orient][0].x = ap->xb + col * ap->xs;
+ ap->triangleList[orient][0].y = ap->yb + row * ap->ys;
+ if (ap->xs <= 3 || ap->ys <= 3)
+ XFillRectangle(MI_DISPLAY(mi), MI_WINDOW(mi), gc,
+ ((orient) ? -1 : 1) + ap->triangleList[orient][0].x,
+ ap->triangleList[orient][0].y, 1, 1);
+ else {
+ if (orient)
+ ap->triangleList[orient][0].x += (ap->xs / 2 - 1);
+ else
+ ap->triangleList[orient][0].x -= (ap->xs / 2 - 1);
+ XFillPolygon(MI_DISPLAY(mi), MI_WINDOW(mi), gc,
+ ap->triangleList[orient], 3, Convex, CoordModePrevious);
+ }
+ }
+}
+
+static void
+truchetcell(ModeInfo * mi, int col, int row, int truchetstate)
+{
+ antfarmstruct *ap = &antfarms[MI_SCREEN(mi)];
+
+ if (ap->neighbors == 6) {
+ int ccol = 2 * col + !(row & 1), crow = 2 * row;
+ int side;
+ XPoint hex, hex2;
+
+ /* Very crude approx of Sqrt 3, so it will not cause drawing errors. */
+ hex.x = ap->xb + ccol * ap->xs - (int) ((double) ap->xs * 1.6 / 2.0);
+ hex.y = ap->yb + crow * ap->ys - (int) ((double) ap->ys * 1.6 / 2.0);
+ for (side = 0; side < 6; side++) {
+ if (side > 0) {
+ hex.x += ap->hexagonList[side].x;
+ hex.y += ap->hexagonList[side].y;
+ }
+ hex2.x = hex.x + ap->hexagonList[side + 1].x / 2;
+ hex2.y = hex.y + ap->hexagonList[side + 1].y / 2;
+ if (truchetstate == side % 3)
+ /* Crude approx of 120 deg, so it will not cause drawing errors. */
+ XDrawArc(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ hex2.x, hex2.y,
+ (int) ((double) ap->xs * 1.5), (int) ((double) ap->ys * 1.5),
+ ((555 - (side * 60)) % 360) * 64, 90 * 64);
+ }
+ } else if (ap->neighbors == 4) {
+ if (truchetstate) {
+ XDrawArc(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ ap->xb + ap->xs * col - ap->xs / 2,
+ ap->yb + ap->ys * row + ap->ys / 2,
+ ap->xs, ap->ys,
+ 1 * 64, 88 * 64);
+ XDrawArc(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ ap->xb + ap->xs * col + ap->xs / 2,
+ ap->yb + ap->ys * row - ap->ys / 2,
+ ap->xs, ap->ys,
+ -91 * 64, -88 * 64);
+ } else {
+ XDrawArc(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ ap->xb + ap->xs * col - ap->xs / 2,
+ ap->yb + ap->ys * row - ap->ys / 2,
+ ap->xs, ap->ys,
+ -1 * 64, -88 * 64);
+ XDrawArc(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ ap->xb + ap->xs * col + ap->xs / 2,
+ ap->yb + ap->ys * row + ap->ys / 2,
+ ap->xs, ap->ys,
+ 91 * 64, 88 * 64);
+ }
+ } else if (ap->neighbors == 3) {
+ int orient = (col + row) % 2; /* O left 1 right */
+ int side, ang;
+ XPoint tri;
+
+ tri.x = ap->xb + col * ap->xs;
+ tri.y = ap->yb + row * ap->ys;
+ if (orient) {
+ tri.x += (ap->xs / 2 - 2);
+ } else {
+ tri.x -= (ap->xs / 2 + 2);
+ }
+ for (side = 0; side < 3; side++) {
+ if (side > 0) {
+ tri.x += ap->triangleList[orient][side].x;
+ tri.y += ap->triangleList[orient][side].y;
+ }
+ if (truchetstate == side % 3) {
+ if (orient)
+ ang = (518 - side * 120) % 360; /* Right */
+ else
+ ang = (690 - side * 120) % 360; /* Left */
+ XDrawArc(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ tri.x - ap->xs / 2, tri.y - 3 * ap->ys / 4,
+ ap->xs, 3 * ap->ys / 2,
+ ang * 64, 45 * 64);
+ }
+ }
+ }
+}
+
+static void
+drawcell(ModeInfo * mi, int col, int row, unsigned char color)
+{
+ antfarmstruct *ap = &antfarms[MI_SCREEN(mi)];
+
+ if (!color) {
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WIN_BLACK_PIXEL(mi));
+ fillcell(mi, MI_GC(mi), col, row);
+ return;
+ }
+ if (MI_NPIXELS(mi) > 2) {
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi),
+ MI_PIXEL(mi, ap->colors[color - 1]));
+ fillcell(mi, MI_GC(mi), col, row);
+ } else {
+ XGCValues gcv;
+
+ gcv.stipple = ap->pixmaps[color - 1];
+ gcv.foreground = MI_WIN_WHITE_PIXEL(mi);
+ gcv.background = MI_WIN_BLACK_PIXEL(mi);
+ XChangeGC(MI_DISPLAY(mi), ap->stippledGC,
+ GCStipple | GCForeground | GCBackground, &gcv);
+ fillcell(mi, ap->stippledGC, col, row);
+ }
+}
+
+static void
+drawtruchet(ModeInfo * mi, int col, int row,
+ unsigned char color, unsigned char truchetstate)
+{
+ antfarmstruct *ap = &antfarms[MI_SCREEN(mi)];
+
+ if (!color)
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WIN_WHITE_PIXEL(mi));
+ else if (MI_NPIXELS(mi) > 2 || color > ap->ncolors / 2)
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WIN_BLACK_PIXEL(mi));
+ else
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WIN_WHITE_PIXEL(mi));
+ truchetcell(mi, col, row, truchetstate);
+}
+
+static void
+draw_anant(ModeInfo * mi, int col, int row)
+{
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WIN_WHITE_PIXEL(mi));
+ fillcell(mi, MI_GC(mi), col, row);
+#if 0 /* Can not see eyes */
+ {
+ antfarmstruct *ap = &antfarms[MI_SCREEN(mi)];
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+
+ if (ap->xs > 2 && ap->ys > 2) { /* Draw Eyes */
+
+ XSetForeground(display, MI_GC(mi), MI_WIN_BLACK_PIXEL(mi));
+ switch (direction) {
+ case 0:
+ XDrawPoint(display, window, MI_GC(mi),
+ ap->xb + ap->xs - 1, ap->yb + 1);
+ XDrawPoint(display, window, MI_GC(mi),
+ ap->xb + ap->xs - 1, ap->yb + ap->ys - 2);
+ break;
+ case 180:
+ XDrawPoint(display, window, MI_GC(mi), ap->xb, ap->yb + 1);
+ XDrawPoint(display, window, MI_GC(mi), ap->xb, ap->yb + ap->ys - 2);
+ break;
+ if (neighbors == 4) {
+ case 90:
+ XDrawPoint(display, window, MI_GC(mi), ap->xb + 1, ap->yb);
+ XDrawPoint(display, window, MI_GC(mi),
+ ap->xb + ap->xs - 2, ap->yb);
+ break;
+ case 270:
+ XDrawPoint(display, window, MI_GC(mi),
+ ap->xb + 1, ap->yb + ap->ys - 1);
+ XDrawPoint(display, window, MI_GC(mi),
+ ap->xb + ap->xs - 2, ap->yb + ap->ys - 1);
+ break;
+ } /* else BEE */
+ default:
+ }
+ }
+ }
+#endif
+}
+
+#if 0
+static void
+RandomSoup(mi)
+ ModeInfo *mi;
+{
+ antfarmstruct *ap = &antfarms[MI_SCREEN(mi)];
+ int row, col, mrow = 0;
+
+ for (row = 0; row < ap->nrows; ++row) {
+ for (col = 0; col < ap->ncols; ++col) {
+ ap->old[col + mrow] = (unsigned char) NRAND((int) ap->ncolors);
+ drawcell(mi, col, row, ap->old[col + mrow]);
+ }
+ mrow += ap->nrows;
+ }
+}
+
+#endif
+
+static short
+fromTableDirection(unsigned char dir, int neighbors)
+{
+ switch (dir) {
+ case FS:
+ return 0;
+ case TRS:
+ return (ANGLES / neighbors);
+ case THRS:
+ return (ANGLES / (2 * neighbors));
+ case TBS:
+ return (ANGLES / 2);
+ case THLS:
+ return (ANGLES - ANGLES / (2 * neighbors));
+ case TLS:
+ return (ANGLES - ANGLES / neighbors);
+ case SF:
+ return ANGLES;
+ case STR:
+ return (ANGLES + ANGLES / neighbors);
+ case STHR:
+ return (ANGLES + ANGLES / (2 * neighbors));
+ case STB:
+ return (3 * ANGLES / 2);
+ case STHL:
+ return (2 * ANGLES - ANGLES / (2 * neighbors));
+ case STL:
+ return (2 * ANGLES - ANGLES / neighbors);
+ default:
+ (void) fprintf(stderr, "wrong direction %d\n", dir);
+ }
+ return -1;
+}
+
+static void
+getTable(ModeInfo * mi, int i)
+{
+ antfarmstruct *ap = &antfarms[MI_SCREEN(mi)];
+ int j, total;
+ unsigned char *patptr;
+
+ patptr = &tables[i][0];
+ ap->ncolors = *patptr++;
+ ap->nstates = *patptr++;
+ total = ap->ncolors * ap->nstates;
+ if (MI_WIN_IS_VERBOSE(mi))
+ (void) fprintf(stdout,
+ "neighbors %d, table number %d, colors %d, states %d\n",
+ ap->neighbors, i, ap->ncolors, ap->nstates);
+ for (j = 0; j < total; j++) {
+ ap->machine[j].color = *patptr++;
+ ap->machine[j].direction = fromTableDirection(*patptr++, ap->neighbors);
+ ap->machine[j].next = *patptr++;
+ }
+ ap->truchet = False;
+}
+
+static void
+getTurk(ModeInfo * mi, int i)
+{
+ antfarmstruct *ap = &antfarms[MI_SCREEN(mi)];
+ int power2, j, number, total;
+
+ /* To force a number, say <i = 2;> has i + 2 (or 4) digits in binary */
+ power2 = 1 << (i + 1);
+ /* Dont want numbers which in binary are all 1's. */
+ number = NRAND(power2 - 1) + power2;
+ /* To force a particular number, say <number = 10;> */
+
+ ap->ncolors = i + 2;
+ ap->nstates = 1;
+ total = ap->ncolors * ap->nstates;
+ for (j = 0; j < total; j++) {
+ ap->machine[j].color = (j + 1) % total;
+ ap->machine[j].direction = (power2 & number) ?
+ fromTableDirection(TRS, ap->neighbors) :
+ fromTableDirection(TLS, ap->neighbors);
+ ap->machine[j].next = 0;
+ power2 >>= 1;
+ }
+ if (ap->neighbors != 3 && ap->neighbors != 4 && ap->neighbors != 6)
+ ap->truchet = False;
+ else if (truchet)
+ ap->truchet = True;
+ if (MI_WIN_IS_VERBOSE(mi))
+ (void) fprintf(stdout, "neighbors %d, Turk's number %d, colors %d\n",
+ ap->neighbors, number, ap->ncolors);
+}
+
+void
+init_ant(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ int size = MI_SIZE(mi);
+ XGCValues gcv;
+ antfarmstruct *ap;
+ int col, row, i, dir;
+
+ if (antfarms == NULL) {
+ if ((antfarms = (antfarmstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (antfarmstruct))) == NULL)
+ return;
+ }
+ ap = &antfarms[MI_SCREEN(mi)];
+ ap->redrawing = 0;
+ if (MI_NPIXELS(mi) <= 2) {
+ if (ap->stippledGC == None) {
+ gcv.fill_style = FillOpaqueStippled;
+ ap->stippledGC = XCreateGC(display, window, GCFillStyle, &gcv);
+ }
+ if (ap->init_bits == 0) {
+ for (i = 0; i < COLORS - 1; i++)
+ ANTBITS(patterns[i], PATTERNSIZE, PATTERNSIZE);
+ }
+ }
+ ap->generation = 0;
+ ap->n = MI_BATCHCOUNT(mi);
+ if (ap->n < -MINANTS) {
+ /* if ap->n is random ... the size can change */
+ if (ap->ants != NULL) {
+ (void) free((void *) ap->ants);
+ ap->ants = NULL;
+ }
+ ap->n = NRAND(-ap->n - MINANTS + 1) + MINANTS;
+ } else if (ap->n < MINANTS)
+ ap->n = MINANTS;
+
+ ap->width = MI_WIN_WIDTH(mi);
+ ap->height = MI_WIN_HEIGHT(mi);
+
+ if (neighbors == 8 || neighbors == 9 || neighbors == 12)
+ ap->neighbors = neighbors; /* Discourage but not deny use... */
+ else
+ for (i = 0; i < NEIGHBORKINDS; i++) {
+ if (neighbors == initVal[i]) {
+ ap->neighbors = initVal[i];
+ break;
+ }
+ if (i == NEIGHBORKINDS - 1) {
+ ap->neighbors = initVal[NRAND(NEIGHBORKINDS)];
+ break;
+ }
+ }
+
+ if (ap->neighbors == 6) {
+ int nccols, ncrows;
+
+ if (ap->width < 2)
+ ap->width = 2;
+ if (ap->height < 4)
+ ap->height = 4;
+ if (size < -MINSIZE)
+ ap->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(ap->width, ap->height) /
+ MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE) {
+ if (!size)
+ ap->ys = MAX(MINSIZE, MIN(ap->width, ap->height) / MINGRIDSIZE);
+ else
+ ap->ys = MINSIZE;
+ } else
+ ap->ys = MIN(size, MAX(MINSIZE, MIN(ap->width, ap->height) /
+ MINGRIDSIZE));
+ ap->xs = ap->ys;
+ nccols = MAX(ap->width / ap->xs - 2, 2);
+ ncrows = MAX(ap->height / ap->ys - 1, 2);
+ ap->ncols = nccols / 2;
+ ap->nrows = 2 * (ncrows / 4);
+ ap->xb = (ap->width - ap->xs * nccols) / 2 + ap->xs / 2;
+ ap->yb = (ap->height - ap->ys * (ncrows / 2) * 2) / 2 + ap->ys;
+ for (i = 0; i < 7; i++) {
+ ap->hexagonList[i].x = (ap->xs - 1) * hexagonUnit[i].x;
+ ap->hexagonList[i].y = ((ap->ys - 1) * hexagonUnit[i].y / 2) * 4 / 3;
+ }
+ } else if (ap->neighbors == 4 && ap->neighbors == 8) {
+ if (size < -MINSIZE)
+ ap->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(ap->width, ap->height) /
+ MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE) {
+ if (!size)
+ ap->ys = MAX(MINSIZE, MIN(ap->width, ap->height) / MINGRIDSIZE);
+ else
+ ap->ys = MINSIZE;
+ } else
+ ap->ys = MIN(size, MAX(MINSIZE, MIN(ap->width, ap->height) /
+ MINGRIDSIZE));
+ ap->xs = ap->ys;
+ ap->ncols = MAX(ap->width / ap->xs, 2);
+ ap->nrows = MAX(ap->height / ap->ys, 2);
+ ap->xb = (ap->width - ap->xs * ap->ncols) / 2;
+ ap->yb = (ap->height - ap->ys * ap->nrows) / 2;
+ } else { /* TRI */
+ int orient;
+
+ if (ap->width < 2)
+ ap->width = 2;
+ if (ap->height < 2)
+ ap->height = 2;
+ if (size < -MINSIZE)
+ ap->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(ap->width, ap->height) /
+ MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE) {
+ if (!size)
+ ap->ys = MAX(MINSIZE, MIN(ap->width, ap->height) / MINGRIDSIZE);
+ else
+ ap->ys = MINSIZE;
+ } else
+ ap->ys = MIN(size, MAX(MINSIZE, MIN(ap->width, ap->height) /
+ MINGRIDSIZE));
+ ap->xs = (int) (1.52 * ap->ys);
+ ap->ncols = (MAX(ap->width / ap->xs - 1, 2) / 2) * 2;
+ ap->nrows = (MAX(ap->height / ap->ys - 1, 2) / 2) * 2;
+ ap->xb = (ap->width - ap->xs * ap->ncols) / 2 + ap->xs / 2;
+ ap->yb = (ap->height - ap->ys * ap->nrows) / 2 + ap->ys;
+ for (orient = 0; orient < 2; orient++) {
+ for (i = 0; i < 4; i++) {
+ ap->triangleList[orient][i].x =
+ (ap->xs - 2) * triangleUnit[orient][i].x;
+ ap->triangleList[orient][i].y =
+ (ap->ys - 2) * triangleUnit[orient][i].y;
+ }
+ }
+ }
+ XClearWindow(display, MI_WINDOW(mi));
+
+ /* Exclude odd # of neighbors, stepping forward not defined */
+ if (!NRAND(COLORS) && ((ap->neighbors + 1) % 2)) {
+ getTable(mi, (int) (NRAND(NTABLES)));
+ } else
+ getTurk(mi, (int) (NRAND(COLORS - 1)));
+ if (MI_NPIXELS(mi) > 2)
+ for (i = 0; i < (int) ap->ncolors - 1; i++)
+ ap->colors[i] = (NRAND(MI_NPIXELS(mi)) +
+ i * MI_NPIXELS(mi)) / ((int) (ap->ncolors - 1));
+ if (ap->ants == NULL)
+ ap->ants = (antstruct *) malloc(ap->n * sizeof (antstruct));
+ if (ap->tape != NULL)
+ (void) free((void *) ap->tape);
+ ap->tape = (unsigned char *)
+ calloc(ap->ncols * ap->nrows, sizeof (unsigned char));
+
+ if (ap->truchet_state != NULL)
+ (void) free((void *) ap->truchet_state);
+ ap->truchet_state = (unsigned char *)
+ calloc(ap->ncols * ap->nrows, sizeof (unsigned char));
+
+ col = ap->ncols / 2;
+ row = ap->nrows / 2;
+ dir = NRAND(ap->neighbors) * ANGLES / ap->neighbors;
+ /* Have them all start in the same spot, why not? */
+ for (i = 0; i < ap->n; i++) {
+ ap->ants[i].col = col;
+ ap->ants[i].row = row;
+ ap->ants[i].direction = dir;
+ ap->ants[i].state = 0;
+ }
+ draw_anant(mi, col, row);
+}
+
+void
+draw_ant(ModeInfo * mi)
+{
+ antfarmstruct *ap = &antfarms[MI_SCREEN(mi)];
+ antstruct *anant;
+ statestruct *status;
+ int i, state_pos, tape_pos;
+ unsigned char color;
+ short chg_dir, old_dir;
+
+ for (i = 0; i < ap->n; i++) {
+ anant = &ap->ants[i];
+ tape_pos = anant->col + anant->row * ap->ncols;
+ color = ap->tape[tape_pos]; /* read tape */
+ state_pos = color + anant->state * ap->ncolors;
+ status = &(ap->machine[state_pos]);
+ drawcell(mi, anant->col, anant->row, status->color);
+ ap->tape[tape_pos] = status->color; /* write on tape */
+
+ /* Find direction of Bees or Ants. */
+ /* Translate relative direction to actual direction */
+ old_dir = anant->direction;
+ chg_dir = (2 * ANGLES - status->direction) % ANGLES;
+ anant->direction = (chg_dir + old_dir) % ANGLES;
+ if (ap->truchet) {
+ int a = 0, b;
+
+ if (ap->neighbors == 6) {
+ a = (old_dir / 60) % 3;
+ b = (anant->direction / 60) % 3;
+ a = (a + b + 1) % 3;
+ drawtruchet(mi, anant->col, anant->row, status->color, a);
+ } else if (ap->neighbors == 4) {
+ a = old_dir / 180;
+ b = anant->direction / 180;
+ a = ((a && !b) || (b && !a));
+ drawtruchet(mi, anant->col, anant->row, status->color, a);
+ } else if (ap->neighbors == 3) {
+ if (chg_dir == 240)
+ a = (2 + anant->direction / 120) % 3;
+ else
+ a = (1 + anant->direction / 120) % 3;
+ drawtruchet(mi, anant->col, anant->row, status->color, a);
+ }
+ ap->truchet_state[tape_pos] = a + 1;
+ }
+ anant->state = status->next;
+
+ /* If edge than wrap it */
+ old_dir = ((status->direction < ANGLES) ? anant->direction : old_dir);
+ position_of_neighbor(ap, old_dir, &(anant->col), &(anant->row));
+ draw_anant(mi, anant->col, anant->row);
+ }
+ if (++ap->generation > MI_CYCLES(mi))
+ init_ant(mi);
+ if (ap->redrawing) {
+ for (i = 0; i < REDRAWSTEP; i++) {
+ if (ap->tape[ap->redrawpos] ||
+ (ap->truchet && ap->truchet_state[ap->redrawpos])) {
+ drawcell(mi, ap->redrawpos % ap->ncols, ap->redrawpos / ap->ncols,
+ ap->tape[ap->redrawpos]);
+ if (ap->truchet)
+ drawtruchet(mi, ap->redrawpos % ap->ncols, ap->redrawpos / ap->ncols,
+ ap->tape[ap->redrawpos],
+ ap->truchet_state[ap->redrawpos] - 1);
+ }
+ if (++(ap->redrawpos) >= ap->ncols * ap->nrows) {
+ ap->redrawing = 0;
+ break;
+ }
+ }
+ }
+}
+
+void
+release_ant(ModeInfo * mi)
+{
+ if (antfarms != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ antfarmstruct *ap = &antfarms[screen];
+ int shade;
+
+ if (ap->stippledGC != None) {
+ XFreeGC(MI_DISPLAY(mi), ap->stippledGC);
+ }
+ for (shade = 0; shade < ap->init_bits; shade++)
+ XFreePixmap(MI_DISPLAY(mi), ap->pixmaps[shade]);
+ if (ap->tape != NULL)
+ (void) free((void *) ap->tape);
+ if (ap->ants != NULL)
+ (void) free((void *) ap->ants);
+ if (ap->truchet_state != NULL)
+ (void) free((void *) ap->truchet_state);
+ }
+ (void) free((void *) antfarms);
+ antfarms = NULL;
+ }
+}
+
+void
+refresh_ant(ModeInfo * mi)
+{
+ antfarmstruct *ap = &antfarms[MI_SCREEN(mi)];
+
+ ap->redrawing = 1;
+ ap->redrawpos = 0;
+}
--- /dev/null
+
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)ball.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * ball.c - bouncing balls for xlock the X Window System lockscreen.
+ *
+ * Copyright (c) 1995 by Heath Rice <rice@asl.dl.nec.com>.
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ */
+
+/*-
+ * Bouncing balls kind of mode.
+ * Random drawing functions for the balls and the trail
+ * left by the balls. This one looks pretty cool
+ * if good functions are chosen.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Ball"
+#define HACK_INIT init_ball
+#define HACK_DRAW draw_ball
+#define DEF_DELAY 10000
+#define DEF_BATCHCOUNT 10
+#define DEF_CYCLES 20
+#define DEF_SIZE -100
+#define DEF_NCOLORS 200
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt ball_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+#define NONE 0 /* not in a window */
+#define V 1 /* vertical */
+#define H 2 /* horizontal */
+#define B 3 /* ball */
+
+#define MINBALLS 1
+#define MINSIZE 2
+#define MINGRIDSIZE 4
+
+#define DEFNO 6
+#define SPEED 156
+#define SQLIMIT (SPEED*SPEED/(30*30)) /* square of lower speed limit */
+#define RATE 600
+
+typedef struct {
+ int x, y; /* x and y coords */
+ int dx, dy; /* x and y velocity */
+ int rad;
+ int bounce;
+ int dyold;
+ int started;
+ int def;
+ GC GcF, GcB;
+} balltype;
+
+typedef struct {
+ int init;
+ balltype *bt;
+ int rad;
+ int size;
+ int width, height;
+ int bounce;
+ int nballs;
+ int dispx, dispy;
+} ballstruct;
+
+static ballstruct *balls = NULL;
+
+static void
+collided(ModeInfo * mi, int i, int n, int *dx, int *dy, int td)
+{
+ ballstruct *bp = &balls[MI_SCREEN(mi)];
+ balltype *bti = &bp->bt[i];
+ balltype *btn = &bp->bt[n];
+ int rx1, ry1, rx2, ry2;
+ int Vx1, Vy1, Vx2, Vy2;
+ int NVx1, NVy1, NVx2, NVy2;
+
+ float Ux1, Uy1, Ux2, Uy2;
+ float mag1, mag2, imp;
+
+ rx1 = bti->x;
+ ry1 = bti->y;
+ Vx1 = bti->dx;
+ Vy1 = bti->dy;
+
+ rx2 = btn->x;
+ ry2 = btn->y;
+ Vx2 = btn->dx;
+ Vy2 = btn->dy;
+
+ Ux1 = rx1 - rx2;
+ Uy1 = ry1 - ry2;
+ mag1 = sqrt(((Ux1 * Ux1) + (Uy1 * Uy1)));
+ Ux1 = Ux1 / mag1;
+ Uy1 = Uy1 / mag1;
+
+ Ux2 = rx2 - rx1;
+ Uy2 = ry2 - ry1;
+ mag2 = sqrt(((Ux2 * Ux2) + (Uy2 * Uy2)));
+ Ux2 = Ux2 / mag2;
+ Uy2 = Uy2 / mag2;
+
+ imp = ((Vx1 * Ux2) + (Vy1 * Uy2)) + ((Vx2 * Ux1) + (Vy2 * Uy1));
+
+ NVx1 = Vx1 + (int) (imp * Ux1);
+ NVy1 = Vy1 + (int) (imp * Uy1);
+
+ NVx2 = Vx2 + (int) (imp * Ux2);
+ NVy2 = Vy2 + (int) (imp * Uy2);
+
+ bti->dx = NVx1;
+ bti->dy = NVy1;
+
+ btn->dx = NVx2;
+ btn->dy = NVy2;
+
+ XFillArc(MI_DISPLAY(mi), MI_WINDOW(mi), btn->GcB,
+ btn->x - (btn->rad / 2), btn->y - (btn->rad / 2),
+ btn->rad, btn->rad, 0, 360 * 64);
+ if (bp->dispx > 100) {
+ *dx = (td * btn->dx) / RATE;
+ *dy = (td * btn->dy) / RATE;
+ } else {
+ *dx = (td * btn->dx) / 150;
+ *dy = (td * btn->dy) / 150;
+ }
+
+ btn->x += (*dx / 2);
+ btn->y += (*dy / 2);
+ XFillArc(MI_DISPLAY(mi), MI_WINDOW(mi), btn->GcF,
+ btn->x - (btn->rad / 2), btn->y - (btn->rad / 2),
+ btn->rad, btn->rad, 0, 360 * 64);
+
+ if (bp->dispx > 100) {
+ *dx = (td * bti->dx) / RATE;
+ *dy = (td * bti->dy) / RATE;
+ } else {
+ *dx = (td * bti->dx) / 150;
+ *dy = (td * bti->dy) / 150;
+ }
+
+ bti->x += (*dx / 2);
+ bti->y += (*dy / 2);
+}
+
+static int
+inwin(ballstruct * bp, int x, int y, int *n, int rad)
+{
+ int i, diffx, diffy;
+
+ if ((x < 0) || (x > bp->dispx)) {
+ return (V);
+ }
+ if ((y < 0) || (y > bp->dispy)) {
+ return (H);
+ }
+ if (bp->dispx > 100) {
+ for (i = 0; i < bp->nballs; i++) {
+ if ((i == (*n)) || (!bp->bt[i].def))
+ continue;
+ diffx = (bp->bt[i].x - x);
+ diffy = (bp->bt[i].y - y);
+ if ((diffx * diffx + diffy * diffy) <
+ (((rad / 2) * (rad / 2) * 2) +
+ ((bp->bt[i].rad / 2) * (bp->bt[i].rad / 2) * 2))) {
+ (*n) = i;
+ return (B);
+ }
+ }
+ }
+ return (NONE);
+}
+
+static void
+randomball(ModeInfo * mi, int i)
+{
+ ballstruct *bp = &balls[MI_SCREEN(mi)];
+ balltype *bti = &bp->bt[i];
+ Display *display = MI_DISPLAY(mi);
+ int x, y, bn;
+ int dum;
+ int attempts;
+ unsigned long randbg = 1;
+
+ attempts = 0;
+ if (bp->bounce == -2)
+ bn = 30 + NRAND(69L);
+ else
+ bn = bp->bounce;
+
+ if (bn > 100)
+ bn = 100;
+ if (bn < 0)
+ bn = 0;
+ bn = (0 - bn);
+
+ if (bp->dispx > 100) {
+ bti->dx = NRAND(2L * SPEED) + SPEED;
+ bti->dy = NRAND(2L * SPEED) + (SPEED / 2);
+ } else {
+ bti->dx = NRAND(4L * SPEED) + (SPEED / 20);
+ bti->dy = NRAND(2L * SPEED) + (SPEED / 40);
+ }
+
+ switch (NRAND(9L) % 2) {
+ case 0:
+ break;
+ case 1:
+ bti->dx = (0 - bti->dx);
+ break;
+ }
+
+ bti->bounce = bn;
+ bti->dyold = 0;
+ bti->rad = bp->rad; /* Pretty lame... should be different sizes */
+
+ do {
+ dum = i;
+ x = NRAND((long) bp->dispx);
+ y = 0;
+ attempts++;
+ if (attempts > 5) {
+ bti->def = 0;
+ return;
+ }
+ }
+
+ while ((inwin(bp, x, y, &dum, bti->rad) != NONE) ||
+ (inwin(bp, bti->dx + x, bti->dy + y, &dum, bti->rad) != NONE));
+
+ bti->def = 1;
+ bti->x = x;
+ bti->y = y;
+
+ /* set background color for ball */
+
+ if (MI_NPIXELS(mi) > 2) {
+ randbg = MI_PIXEL(mi, NRAND(MI_NPIXELS(mi)));
+ } else {
+ randbg = (unsigned long) MI_WIN_BLACK_PIXEL(mi);
+ }
+ XSetForeground(display, bti->GcB, randbg);
+
+ /* set foreground color for ball */
+
+ if (MI_NPIXELS(mi) > 2) {
+ randbg = MI_PIXEL(mi, NRAND(MI_NPIXELS(mi)));
+ } else {
+ randbg = (unsigned long) MI_WIN_WHITE_PIXEL(mi);
+ }
+ XSetForeground(display, bti->GcF, randbg);
+
+ XFillArc(display, MI_WINDOW(mi),
+ bti->GcB, bti->x - (bti->rad / 2), bti->y - (bti->rad / 2),
+ bti->rad, bti->rad, 0, 360 * 64);
+}
+
+void
+init_ball(ModeInfo * mi)
+{
+ ballstruct *bp;
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ int GcLp, i;
+ int size = MI_SIZE(mi);
+
+ if (balls == NULL) {
+ if ((balls = (ballstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (ballstruct))) == NULL)
+ return;
+ }
+ bp = &balls[MI_SCREEN(mi)];
+
+ bp->bounce = 85;
+ bp->width = MI_WIN_WIDTH(mi);
+ bp->height = MI_WIN_HEIGHT(mi);
+
+ bp->nballs = MI_BATCHCOUNT(mi);
+ if (bp->nballs < -MINBALLS) {
+ /* if bp->nballs is random ... the size can change */
+ if (bp->bt != NULL) {
+ (void) free((void *) bp->bt);
+ bp->bt = NULL;
+ }
+ bp->nballs = NRAND(-bp->nballs - MINBALLS + 1) + MINBALLS;
+ } else if (bp->nballs < MINBALLS)
+ bp->nballs = MINBALLS;
+ if (bp->bt == NULL) {
+ bp->bt = (balltype *) calloc(bp->nballs, sizeof (balltype));
+ }
+ if (size == 0 ||
+ MINGRIDSIZE * size > bp->width || MINGRIDSIZE * size > bp->height) {
+ bp->rad = MAX(MINSIZE, MIN(bp->width, bp->height) / MINGRIDSIZE);
+ } else {
+ if (size < -MINSIZE)
+ bp->rad = NRAND(MIN(-size, MAX(MINSIZE, MIN(bp->width, bp->height) /
+ MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE)
+ bp->rad = MINSIZE;
+ else
+ bp->rad = MIN(size, MAX(MINSIZE, MIN(bp->width, bp->height) /
+ MINGRIDSIZE));
+ }
+
+ /* clearballs */
+ XClearWindow(display, window);
+ XFlush(display);
+ if (bp->nballs <= 0)
+ bp->nballs = 1;
+ if (!bp->init) {
+ for (GcLp = 0; GcLp < bp->nballs; GcLp++) {
+ bp->bt[GcLp].GcB = XCreateGC(display, window, 0L, (XGCValues *) 0);
+ bp->bt[GcLp].GcF = XCreateGC(display, window, 0L, (XGCValues *) 0);
+ }
+ bp->init = 1;
+ }
+ for (GcLp = 0; GcLp < bp->nballs; GcLp++) {
+ XSetFunction(display, bp->bt[GcLp].GcB, NRAND(16L));
+ XSetFunction(display, bp->bt[GcLp].GcF, NRAND(16L));
+ }
+
+ bp->dispx = MI_WIN_WIDTH(mi);
+ bp->dispy = MI_WIN_HEIGHT(mi);
+
+ XFlush(display);
+ for (i = 0; i < bp->nballs; i++) {
+ randomball(mi, i);
+ }
+}
+
+void
+draw_ball(ModeInfo * mi)
+{
+ ballstruct *bp = &balls[MI_SCREEN(mi)];
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ int i, n;
+ int td;
+ int dx, dy;
+ int redo;
+
+ td = 10;
+
+ for (i = 0; i < bp->nballs; i++) {
+ if (!bp->bt[i].def)
+ randomball(mi, i);
+ }
+
+ for (i = 0; i < bp->nballs; i++) {
+ if (!bp->bt[i].def) {
+ continue;
+ }
+ XFillArc(display, window, bp->bt[i].GcB,
+ bp->bt[i].x - (bp->bt[i].rad / 2), bp->bt[i].y - (bp->bt[i].rad / 2),
+ bp->bt[i].rad, bp->bt[i].rad, 0, 360 * 64);
+ redo = 0;
+ if (((bp->bt[i].dx * bp->bt[i].dx + bp->bt[i].dy * bp->bt[i].dy) <
+ SQLIMIT) && (bp->bt[i].y >= (bp->dispy - 3))) {
+ redo = 25;
+ }
+ do {
+ if (bp->dispx > 100) {
+ dx = (td * bp->bt[i].dx) / RATE;
+ dy = (td * bp->bt[i].dy) / RATE;
+ } else {
+ dx = (td * bp->bt[i].dx) / 150;
+ dy = (td * bp->bt[i].dy) / 150;
+ }
+
+ if (redo > 5) {
+ redo = 0;
+ randomball(mi, i);
+ if (!bp->bt[i].def)
+ continue;
+ XFillArc(display, window, bp->bt[i].GcF,
+ bp->bt[i].x - (bp->bt[i].rad / 2),
+ bp->bt[i].y - (bp->bt[i].rad / 2),
+ bp->bt[i].rad, bp->bt[i].rad, 0, 360 * 64);
+ }
+ n = i;
+ switch (inwin(bp, dx + bp->bt[i].x, dy + bp->bt[i].y, &n,
+ bp->bt[i].rad)) {
+ case NONE:
+ bp->bt[i].x += dx;
+ bp->bt[i].y += dy;
+ redo = 0;
+ break;
+ case V:
+ bp->bt[i].dx = (int) (((float) bp->bt[i].bounce *
+ (float) bp->bt[i].dx) / (float) 100);
+ redo++;
+ break;
+ case H:
+ bp->bt[i].dy = (int) (((float) bp->bt[i].bounce *
+ (float) bp->bt[i].dy) / (float) 100);
+ if (bp->bt[i].bounce != 100) {
+ if ((bp->bt[i].y >= (bp->dispy - 3)) && (bp->bt[i].dy > -250) &&
+ (bp->bt[i].dy < 0)) {
+ redo = 15;
+ }
+ if ((bp->bt[i].y >= (bp->dispy - 3)) &&
+ (bp->bt[i].dy == bp->bt[i].dyold)) {
+ redo = 10;
+ }
+ bp->bt[i].dyold = bp->bt[i].dy;
+ }
+ redo++;
+ break;
+ case B:
+ if (redo > 5) {
+ if (bp->bt[i].y >= (bp->dispy - 3)) {
+ randomball(mi, i);
+ redo = 0;
+ } else if (bp->bt[n].y >= (bp->dispy - 3)) {
+ randomball(mi, n);
+ redo = 0;
+ } else
+ redo = 0;
+ } else {
+ collided(mi, i, n, &dx, &dy, td);
+ redo = 0;
+ }
+ break;
+ }
+ }
+ while (redo);
+ bp->bt[i].dy += td;
+
+ if (bp->bt[i].def)
+ XFillArc(display, window, bp->bt[i].GcF,
+ bp->bt[i].x - (bp->bt[i].rad / 2), bp->bt[i].y - (bp->bt[i].rad / 2),
+ bp->bt[i].rad, bp->bt[i].rad, 0, 360 * 64);
+ }
+
+ XFlush(display);
+}
+
+void
+release_ball(ModeInfo * mi)
+{
+ if (balls != NULL) {
+ int screen, i;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ ballstruct *bp = &balls[screen];
+
+ if (bp->init)
+ for (i = 0; i < bp->nballs; i++) {
+ XFreeGC(MI_DISPLAY(mi), bp->bt[i].GcF);
+ XFreeGC(MI_DISPLAY(mi), bp->bt[i].GcB);
+ }
+ if (bp->bt != NULL)
+ (void) free((void *) bp->bt);
+
+ }
+ (void) free((void *) balls);
+ balls = NULL;
+ }
+}
+
+void
+refresh_ball(ModeInfo * mi)
+{
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+}
--- /dev/null
+
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)bat.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * bat.c - A bouncing bat for xlock, the X Window System lockscreen.
+ *
+ * Copyright (c) 1988 by Sun Microsystems
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 18-Sep-95: 5 bats now in color <patol@info.isbiel.ch>
+ * 20-Sep-94: 5 bats instead of bouncing balls, based on bounce.c
+ * <patol@info.isbiel.ch>
+ * 2-Sep-93: bounce version David Bagley <bagleyd@bigfoot.com>
+ * 1986: Sun Microsystems
+ */
+
+/*-
+ * original copyright
+ * **************************************************************************
+ * 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.
+ * ***************************************************************************
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Bat"
+#define HACK_INIT init_bat
+#define HACK_DRAW draw_bat
+#define DEF_DELAY 100000
+#define DEF_BATCHCOUNT -8
+#define DEF_SIZE 0
+#define DEF_NCOLORS 200
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt bat_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+#if defined( USE_XPM ) || defined( USE_XPMINC )
+#if USE_XPMINC
+#include <xpm.h>
+#else
+#include <X11/xpm.h> /* Normal spot */
+#endif
+#include "pixmaps/bat-0.xpm"
+#include "pixmaps/bat-1.xpm"
+#include "pixmaps/bat-2.xpm"
+#include "pixmaps/bat-3.xpm"
+#include "pixmaps/bat-4.xpm"
+#endif
+
+#include "bitmaps/bat-0.xbm"
+#include "bitmaps/bat-1.xbm"
+#include "bitmaps/bat-2.xbm"
+#include "bitmaps/bat-3.xbm"
+#include "bitmaps/bat-4.xbm"
+
+#define MAX_STRENGTH 24
+#define FRICTION 15
+#define PENETRATION 0.4
+#define SLIPAGE 4
+#define TIME 32
+#define MINBATS 1
+#define MINSIZE 1
+#define MINGRIDSIZE 3
+
+#define ARE_XBM -1
+
+#define ORIENTS 8
+#define ORIENTCYCLE 32
+#define CCW 1
+#define CW (ORIENTS-1)
+#define DIR(x) (((x)>=0)?CCW:CW)
+#define SIGN(x) (((x)>=0)?1:-1)
+
+static XImage bimages[] =
+{
+ {0, 0, 0, XYBitmap, 0, LSBFirst, 8, LSBFirst, 8, 1},
+ {0, 0, 0, XYBitmap, 0, LSBFirst, 8, LSBFirst, 8, 1},
+ {0, 0, 0, XYBitmap, 0, LSBFirst, 8, LSBFirst, 8, 1},
+ {0, 0, 0, XYBitmap, 0, LSBFirst, 8, LSBFirst, 8, 1},
+ {0, 0, 0, XYBitmap, 0, LSBFirst, 8, LSBFirst, 8, 1}
+};
+
+typedef struct {
+ int x, y, xlast, ylast;
+ int spincount, spindelay, spindir, orient;
+ int vx, vy, vang;
+ unsigned long color;
+} batstruct;
+
+typedef struct {
+ int width, height;
+ int nbats;
+ int xs, ys;
+ int avgsize;
+ int restartnum;
+ int initialized;
+ int graphics_format;
+ int pixelmode;
+ GC backGC;
+ Colormap cm;
+ unsigned long black, white;
+ batstruct *bats;
+ XImage *images[ORIENTS / 2 + 1];
+} bouncestruct;
+
+static bouncestruct *bounces = NULL;
+
+static void checkCollision(bouncestruct * bp, int a_bat);
+static void drawabat(ModeInfo * mi, batstruct * bat);
+static void movebat(bouncestruct * bp, batstruct * bat);
+static void flapbat(batstruct * bat, int dir, int *vel, int avgsize);
+static int collide(bouncestruct * bp, int a_bat);
+
+static unsigned char *bits[] =
+{
+ bat0_bits, bat1_bits, bat2_bits, bat3_bits, bat4_bits
+};
+
+#if defined( USE_XPM ) || defined( USE_XPMINC )
+static char **pixs[] =
+{
+ bat0, bat1, bat2, bat3, bat4
+};
+
+#endif
+
+static void
+init_images(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ bouncestruct *bp = &bounces[MI_SCREEN(mi)];
+ int i = 0;
+
+#if defined( USE_XPM ) || defined( USE_XPMINC )
+ XpmAttributes attrib;
+
+ if (!fixedColors(mi)) {
+ bp->cm = XCreateColormap(display, window, MI_VISUAL(mi), AllocNone);
+ attrib.colormap = bp->cm;
+ reserveColors(mi, bp->cm, &bp->black, &bp->white);
+ } else
+ attrib.colormap = MI_WIN_COLORMAP(mi);
+
+ attrib.visual = MI_VISUAL(mi);
+ attrib.depth = MI_WIN_DEPTH(mi);
+ attrib.valuemask = XpmVisual | XpmColormap | XpmDepth;
+
+#ifndef USE_MONOXPM
+ if (MI_NPIXELS(mi) > 2)
+#endif
+ {
+ for (i = 0; i <= ORIENTS / 2; i++)
+ if (XpmSuccess != XpmCreateImageFromData(display, pixs[i],
+ &(bp->images[i]), (XImage **) NULL, &attrib))
+ break;
+ bp->initialized = i;
+ if (bp->initialized <= ORIENTS / 2) { /* All or nothing */
+ if (MI_WIN_IS_VERBOSE(mi))
+ (void) fprintf(stderr, "Full color images could not be loaded.\n");
+ for (i = 0; i < bp->initialized; i++)
+ XDestroyImage(bp->images[i]);
+ if (bp->cm != None) {
+ XFreeColormap(display, bp->cm);
+ bp->cm = None;
+ }
+ }
+ }
+ if (bp->initialized <= ORIENTS / 2)
+#endif
+
+ {
+ bp->initialized = ARE_XBM; /* ie. not using xpm */
+ if (!bimages[i].data) /* Only need to do this once */
+ for (i = 0; i <= ORIENTS / 2; i++) {
+ bimages[i].data = (char *) bits[i];
+ bimages[i].width = bat0_width;
+ bimages[i].height = bat0_height;
+ bimages[i].bytes_per_line = (bat0_width + 7) / 8;
+ }
+ for (i = 0; i <= ORIENTS / 2; i++)
+ bp->images[i] = &(bimages[i]);
+ }
+ if (bp->cm != None) {
+ if (bp->backGC == None) {
+ XGCValues xgcv;
+
+ setColormap(display, window, bp->cm, MI_WIN_IS_INWINDOW(mi));
+ xgcv.background = bp->black;
+ bp->backGC = XCreateGC(display, window, GCBackground, &xgcv);
+ }
+ } else {
+ bp->black = MI_WIN_BLACK_PIXEL(mi);
+ bp->backGC = MI_GC(mi);
+ }
+}
+
+static void
+checkCollision(bouncestruct * bp, int a_bat)
+{
+ int i, amount, spin, d, size;
+ double x, y;
+
+ for (i = 0; i < bp->nbats; i++) {
+ if (i != a_bat) {
+ x = (double) (bp->bats[i].x - bp->bats[a_bat].x);
+ y = (double) (bp->bats[i].y - bp->bats[a_bat].y);
+ d = (int) sqrt(x * x + y * y);
+ size = bp->avgsize;
+ if (d > 0 && d < size) {
+ amount = size - d;
+ if (amount > PENETRATION * size)
+ amount = (int) (PENETRATION * size);
+ bp->bats[i].vx += (int) ((double) amount * x / d);
+ bp->bats[i].vy += (int) ((double) amount * y / d);
+ bp->bats[i].vx -= bp->bats[i].vx / FRICTION;
+ bp->bats[i].vy -= bp->bats[i].vy / FRICTION;
+ bp->bats[a_bat].vx -= (int) ((double) amount * x / d);
+ bp->bats[a_bat].vy -= (int) ((double) amount * y / d);
+ bp->bats[a_bat].vx -= bp->bats[a_bat].vx / FRICTION;
+ bp->bats[a_bat].vy -= bp->bats[a_bat].vy / FRICTION;
+ spin = (bp->bats[i].vang - bp->bats[a_bat].vang) /
+ (2 * size * SLIPAGE);
+ bp->bats[i].vang -= spin;
+ bp->bats[a_bat].vang += spin;
+ bp->bats[i].spindir = DIR(bp->bats[i].vang);
+ bp->bats[a_bat].spindir = DIR(bp->bats[a_bat].vang);
+ if (!bp->bats[i].vang) {
+ bp->bats[i].spindelay = 1;
+ bp->bats[i].spindir = 0;
+ } else
+ bp->bats[i].spindelay = (int) ((double) M_PI *
+ bp->avgsize / (ABS(bp->bats[i].vang))) + 1;
+ if (!bp->bats[a_bat].vang) {
+ bp->bats[a_bat].spindelay = 1;
+ bp->bats[a_bat].spindir = 0;
+ } else
+ bp->bats[a_bat].spindelay = (int) ((double) M_PI *
+ bp->avgsize / (ABS(bp->bats[a_bat].vang))) + 1;
+ return;
+ }
+ }
+ }
+}
+
+static void
+drawabat(ModeInfo * mi, batstruct * bat)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ bouncestruct *bp = &bounces[MI_SCREEN(mi)];
+
+ if (bp->pixelmode) {
+ if (bat->xlast != -1) {
+ XSetForeground(display, bp->backGC, bp->black);
+ XFillRectangle(display, window, bp->backGC,
+ bat->xlast, bat->ylast, bp->xs, bp->ys);
+ }
+ XSetForeground(display, bp->backGC, bat->color);
+ XFillRectangle(display, window, bp->backGC,
+ bat->x, bat->y, bp->xs, bp->ys);
+ } else {
+ XSetForeground(display, bp->backGC, bat->color);
+/* PURIFY 4.0.1 on SunOS4 and on Solaris 2 reports a 15985 byte memory leak on
+ * the next line. */
+ XPutImage(display, window, bp->backGC,
+ bp->images[(bat->orient > ORIENTS / 2) ?
+ ORIENTS - bat->orient : bat->orient],
+ 0, 0, bat->x, bat->y, bp->xs, bp->ys);
+ if (bat->xlast != -1) {
+ XSetForeground(display, bp->backGC, bp->black);
+ ERASE_IMAGE(display, window, bp->backGC,
+ bat->x, bat->y, bat->xlast, bat->ylast, bp->xs, bp->ys);
+ }
+ }
+}
+
+static void
+movebat(bouncestruct * bp, batstruct * bat)
+{
+ bat->xlast = bat->x;
+ bat->ylast = bat->y;
+ bat->x += bat->vx;
+ if (bat->x > (bp->width - bp->xs)) {
+ /* Bounce off the right edge */
+ bat->x = 2 * (bp->width - bp->xs) - bat->x;
+ bat->vx = -bat->vx + bat->vx / FRICTION;
+ flapbat(bat, 1, &bat->vy, bp->avgsize);
+ } else if (bat->x < 0) {
+ /* Bounce off the left edge */
+ bat->x = -bat->x;
+ bat->vx = -bat->vx + bat->vx / FRICTION;
+ flapbat(bat, -1, &bat->vy, bp->avgsize);
+ }
+ bat->vy++;
+ bat->y += bat->vy;
+ if (bat->y >= (bp->height + bp->ys)) { /* Don't see bat bounce */
+ /* Bounce off the bottom edge */
+ bat->y = (bp->height - bp->ys);
+ bat->vy = -bat->vy + bat->vy / FRICTION;
+ flapbat(bat, -1, &bat->vx, bp->avgsize);
+ } /* else if (bat->y < 0) { */
+ /* Bounce off the top edge */
+ /*bat->y = -bat->y;
+ bat->vy = -bat->vy + bat->vy / FRICTION;
+ flapbat(bat, 1, &bat->vx, bp->avgsize);
+ } */
+ if (bat->spindir) {
+ bat->spincount--;
+ if (!bat->spincount) {
+ bat->orient = (bat->spindir + bat->orient) % ORIENTS;
+ bat->spincount = bat->spindelay;
+ }
+ }
+}
+
+static void
+flapbat(batstruct * bat, int dir, int *vel, int avgsize)
+{
+ *vel -= (int) ((*vel + SIGN(*vel * dir) *
+ bat->spindelay * ORIENTCYCLE / (M_PI * avgsize)) / SLIPAGE);
+ if (*vel) {
+ bat->spindir = DIR(*vel * dir);
+ bat->vang = *vel * ORIENTCYCLE;
+ bat->spindelay = (int) ((double) M_PI * avgsize / (ABS(bat->vang))) + 1;
+ } else
+ bat->spindir = 0;
+}
+
+static int
+collide(bouncestruct * bp, int a_bat)
+{
+ int i, d, x, y;
+
+ for (i = 0; i < a_bat; i++) {
+ x = (bp->bats[i].x - bp->bats[a_bat].x);
+ y = (bp->bats[i].y - bp->bats[a_bat].y);
+ d = (int) sqrt((double) (x * x + y * y));
+ if (d < bp->avgsize)
+ return i;
+ }
+ return i;
+}
+
+void
+init_bat(ModeInfo * mi)
+{
+ bouncestruct *bp;
+ int size = MI_SIZE(mi);
+ int i, tryagain = 0;
+
+ if (bounces == NULL) {
+ if ((bounces = (bouncestruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (bouncestruct))) == NULL)
+ return;
+ }
+ bp = &bounces[MI_SCREEN(mi)];
+ if (!bp->initialized) {
+ bp->cm = None;
+ init_images(mi);
+ }
+ bp->width = MI_WIN_WIDTH(mi);
+ bp->height = MI_WIN_HEIGHT(mi);
+ if (bp->width < 2)
+ bp->width = 2;
+ if (bp->height < 2)
+ bp->height = 2;
+ bp->restartnum = TIME;
+
+ bp->nbats = MI_BATCHCOUNT(mi);
+ if (bp->nbats < -MINBATS) {
+ /* if bp->nbats is random ... the size can change */
+ if (bp->bats != NULL) {
+ (void) free((void *) bp->bats);
+ bp->bats = NULL;
+ }
+ bp->nbats = NRAND(-bp->nbats - MINBATS + 1) + MINBATS;
+ } else if (bp->nbats < MINBATS)
+ bp->nbats = MINBATS;
+ if (!bp->bats)
+ bp->bats = (batstruct *) malloc(bp->nbats * sizeof (batstruct));
+ if (size == 0 ||
+ MINGRIDSIZE * size > bp->width / 2 || MINGRIDSIZE * size > bp->height) {
+ if (bp->width > MINGRIDSIZE * bat0_width &&
+ bp->height > MINGRIDSIZE * bat0_height) {
+ bp->pixelmode = False;
+ bp->xs = bat0_width;
+ bp->ys = bat0_height;
+ } else {
+ bp->pixelmode = True;
+ bp->ys = MAX(MINSIZE, MIN(bp->width / 2, bp->height) / MINGRIDSIZE);
+ bp->xs = 2 * bp->ys;
+ }
+ } else {
+ bp->pixelmode = True;
+ if (size < -MINSIZE)
+ bp->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(bp->width / 2, bp->height) /
+ MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE)
+ bp->ys = MINSIZE;
+ else
+ bp->ys = MIN(size, MAX(MINSIZE, MIN(bp->width / 2, bp->height) /
+ MINGRIDSIZE));
+ bp->xs = 2 * bp->ys;
+ }
+ bp->avgsize = (bp->xs + bp->ys) / 2;
+ i = 0;
+ while (i < bp->nbats) {
+ bp->bats[i].vx = ((LRAND() & 1) ? -1 : 1) * (NRAND(MAX_STRENGTH) + 1);
+ bp->bats[i].x = (bp->bats[i].vx >= 0) ? 0 : bp->width - bp->xs;
+ bp->bats[i].y = NRAND(bp->height / 2);
+ if (i == collide(bp, i) || tryagain >= 8) {
+ if (MI_NPIXELS(mi) > 2)
+ bp->bats[i].color = MI_PIXEL(mi, NRAND(MI_NPIXELS(mi)));
+ else
+ bp->bats[i].color = MI_WIN_WHITE_PIXEL(mi);
+ bp->bats[i].xlast = -1;
+ bp->bats[i].ylast = 0;
+ bp->bats[i].spincount = 1;
+ bp->bats[i].spindelay = 1;
+ bp->bats[i].vy = ((LRAND() & 1) ? -1 : 1) * NRAND(MAX_STRENGTH);
+ bp->bats[i].spindir = 0;
+ bp->bats[i].vang = 0;
+ bp->bats[i].orient = NRAND(ORIENTS);
+ i++;
+ } else
+ tryagain++;
+ }
+ XSetForeground(MI_DISPLAY(mi), bp->backGC, bp->black);
+ XFillRectangle(MI_DISPLAY(mi), MI_WINDOW(mi), bp->backGC,
+ 0, 0, bp->width, bp->height);
+}
+
+void
+draw_bat(ModeInfo * mi)
+{
+ bouncestruct *bp = &bounces[MI_SCREEN(mi)];
+ int i;
+
+ for (i = 0; i < bp->nbats; i++) {
+ drawabat(mi, &bp->bats[i]);
+ movebat(bp, &bp->bats[i]);
+ }
+ for (i = 0; i < bp->nbats; i++)
+ checkCollision(bp, i);
+ if (!NRAND(TIME)) /* Put some randomness into the time */
+ bp->restartnum--;
+ if (!bp->restartnum)
+ init_bat(mi);
+}
+
+void
+release_bat(ModeInfo * mi)
+{
+ if (bounces != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ bouncestruct *bp = &bounces[screen];
+
+#if defined( USE_XPM ) || defined( USE_XPMINC )
+ int i;
+
+ for (i = 0; i < bp->initialized; i++) /* ignores ARE_XBM */
+ XDestroyImage(bp->images[i]);
+ if (bp->cm != None) {
+ if (bp->backGC != None)
+ XFreeGC(MI_DISPLAY(mi), bp->backGC);
+ XFreeColormap(MI_DISPLAY(mi), bp->cm);
+ }
+#endif
+
+ if (bp->bats != NULL)
+ (void) free((void *) bp->bats);
+ }
+ (void) free((void *) bounces);
+ bounces = NULL;
+ }
+}
+
+void
+refresh_bat(ModeInfo * mi)
+{
+ /* Do nothing, it will refresh by itself */
+}
--- /dev/null
+#define bat0_width 147
+#define bat0_height 108
+static unsigned char bat0_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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01,
+ 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x81, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xe1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf3, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x11, 0x7e, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc0, 0x03, 0xfd, 0x7f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0xb6,
+ 0xcf, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x76, 0xa7, 0x19, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
+ 0x00, 0xc6, 0xb7, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xe0, 0xdd, 0x86, 0x61, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0xf8, 0x7f, 0x8c, 0xc5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1c, 0x70, 0xfe,
+ 0x86, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0x01, 0x06, 0xf0, 0xfe, 0x0c, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x06,
+ 0x60, 0x0e, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x06, 0x70, 0x0e, 0x18, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
+ 0x80, 0x06, 0x60, 0x06, 0x90, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xe0, 0x07, 0x70, 0x07, 0x30,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x30, 0x60, 0x0e, 0x30, 0x05, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x20, 0x00, 0x30,
+ 0x05, 0x30, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x30, 0x00, 0x30, 0x05, 0x30, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30,
+ 0x00, 0x30, 0x05, 0x30, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x00, 0x30, 0x07, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x08, 0x30, 0x00, 0xb0, 0x02, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x10, 0x00, 0xb0, 0x02,
+ 0x0e, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0c, 0x10, 0x00, 0xb8, 0x02, 0x0f, 0x20, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x10, 0x00,
+ 0x98, 0x02, 0x07, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x30, 0x00, 0x98, 0x03, 0x06, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
+ 0x30, 0x00, 0x98, 0x03, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x30, 0x00, 0x98, 0x01, 0x04,
+ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x20, 0x00, 0x98, 0x01, 0x0c, 0x40, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x20, 0x00, 0x98,
+ 0x01, 0x0c, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0xc8, 0x01, 0x0c, 0xc0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x60,
+ 0x00, 0xc0, 0x00, 0x0c, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x40, 0x00, 0x00, 0x00, 0x04, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xc6, 0xdf, 0x00, 0x00, 0x00, 0x04, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe2, 0xf8, 0x00, 0x00, 0x00,
+ 0x06, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x76, 0xe0, 0x01, 0x00, 0x00, 0x06, 0xa0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0xc0, 0x01,
+ 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x16, 0x80, 0x03, 0x00, 0x00, 0x02, 0xa0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16,
+ 0x00, 0x03, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x07, 0x00, 0x00, 0x03,
+ 0xa0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1c, 0x00, 0x06, 0x00, 0x00, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
+ 0x80, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x80, 0x01, 0x80, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00,
+ 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0xc0, 0x00, 0xa0,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xbc, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, 0x60,
+ 0x00, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00,
+ 0x00, 0xf8, 0x7f, 0x60, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x08, 0x00, 0x00, 0x38, 0xe8, 0x43, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
+ 0x08, 0x00, 0x00, 0x00, 0x00, 0x27, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x08, 0x00, 0x00, 0x00, 0x00,
+ 0xac, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xf0, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x38, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x04, 0x00, 0x00,
+ 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xc0, 0x80, 0x01, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00,
+ 0x80, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x80, 0xf9, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00,
+ 0x00, 0x00, 0x00, 0x8f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define bat1_width 147
+#define bat1_height 108
+static unsigned char bat1_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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xc0, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x0b,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0a, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x38, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0c, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x1f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7c, 0xce, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xdf,
+ 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x3f, 0x80, 0xc3, 0xff, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00,
+ 0x80, 0x81, 0xbf, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x80, 0x18, 0xcf, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
+ 0x00, 0x00, 0x90, 0x09, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x1c, 0x83, 0x1f,
+ 0xe2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x38, 0x00, 0x00, 0x00, 0x06, 0xfe, 0x03, 0x03, 0x0e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x05, 0x00, 0x00, 0x00, 0x03,
+ 0xa0, 0xff, 0x01, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x00, 0x00, 0x00, 0x80, 0x00, 0x90, 0x7d, 0x00, 0x80, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
+ 0xc0, 0x00, 0x90, 0x0d, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x60, 0x00, 0x88, 0x05, 0x00,
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00,
+ 0x00, 0x00, 0x30, 0x00, 0x88, 0x85, 0x07, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0f, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xc8,
+ 0x62, 0x1c, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0c,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x84, 0x12, 0x30, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x32, 0x00, 0x00, 0x00, 0x00, 0x08,
+ 0x00, 0xa4, 0x03, 0xc0, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xe0, 0xff, 0x07, 0x00, 0x00, 0x00, 0x0c, 0x00, 0xe4, 0x01, 0x80, 0x01,
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x7c, 0x00, 0x00,
+ 0x00, 0x04, 0x00, 0x54, 0x01, 0x00, 0x03, 0x00, 0x60, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xe0, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x04, 0x00, 0xd2, 0x00,
+ 0x00, 0x06, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00,
+ 0x07, 0xf0, 0x03, 0x06, 0x00, 0xda, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x1c, 0xbc, 0x2f, 0x02, 0x00,
+ 0x68, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x8c,
+ 0x00, 0x00, 0x70, 0x0c, 0x18, 0x02, 0x00, 0x6d, 0x00, 0x00, 0x08, 0x00,
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0xc0, 0x06, 0x10,
+ 0x03, 0x00, 0x65, 0x00, 0x00, 0x08, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x0e, 0x00, 0x80, 0x03, 0x30, 0x02, 0x00, 0x35, 0x00, 0x00,
+ 0x0c, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x02, 0x30, 0x00, 0x80,
+ 0x03, 0x20, 0x03, 0x80, 0x32, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x20, 0x03, 0x80, 0x3a,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x03, 0x60, 0x01, 0x80, 0x1b, 0x00, 0x00, 0x06, 0x00, 0x00,
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x60, 0x01,
+ 0x80, 0x19, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x80, 0x19, 0x00, 0x80, 0x03,
+ 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xc0, 0x01, 0xc0, 0x0c, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0xc0, 0x0c, 0x00,
+ 0x1f, 0x00, 0x00, 0x00, 0xf8, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc0, 0x01, 0xc0, 0x0c, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x1f,
+ 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0xc0,
+ 0x04, 0x00, 0xe0, 0x00, 0x00, 0xe0, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x06, 0x00, 0x80, 0x03, 0x00,
+ 0x18, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0x01, 0x00, 0x02, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0c, 0x00, 0x03, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xc0, 0x00, 0x00, 0x00,
+ 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x60, 0x00, 0x00, 0xf0, 0x67, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x10, 0x00,
+ 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
+ 0x0c, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x06, 0x00, 0x00, 0x00, 0x33,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define bat2_width 147
+#define bat2_height 108
+static unsigned char bat2_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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
+ 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xfc, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x20, 0xf6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xc3, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x81, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81,
+ 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1f, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xce, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x8e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x0c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x58, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x90, 0xc0, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x81,
+ 0x01, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x20, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x30, 0x02, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x38, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x20, 0x00, 0xe0, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x80,
+ 0x01, 0x00, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x0f, 0x60, 0xf2, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
+ 0x00, 0x00, 0xfc, 0xfc, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x40, 0xff,
+ 0xdf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0xc0, 0x8f, 0xff,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf7, 0x0f, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0xc0, 0x00, 0x00, 0x00, 0x23, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x73, 0x38, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
+ 0xb3, 0x0f, 0x06, 0xd0, 0xaf, 0xa0, 0x0d, 0x00, 0x0e, 0x1a, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x80, 0xc3, 0x2d, 0x06, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0x03, 0x1b, 0x02, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
+ 0x00, 0x80, 0xff, 0x7c, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x1b,
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xc0, 0x7c, 0xfc, 0x3f,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x00, 0x00, 0xc0, 0x70, 0xfc, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x18,
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xc0, 0x30,
+ 0x1c, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0x00, 0x00, 0xc0, 0x30, 0x1c, 0x00, 0x03, 0x00, 0x00,
+ 0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
+ 0xfc, 0x31, 0x14, 0x00, 0x06, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0c, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xfe, 0x33, 0x1c, 0x00, 0x1c,
+ 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0x00, 0x00, 0x83, 0x37, 0x0c, 0x00, 0x18, 0x00, 0x00, 0x60, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x81, 0x2f, 0x0c,
+ 0x00, 0x30, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x00, 0x00, 0x01, 0x2a, 0x0e, 0x00, 0x30, 0x00, 0x00, 0x30,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x7e, 0x80, 0x01,
+ 0x20, 0x0c, 0x00, 0x30, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x40, 0xfe, 0x83, 0x01, 0x28, 0x0c, 0x00, 0x30, 0x00,
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03,
+ 0x8f, 0x01, 0x28, 0x0e, 0x00, 0x10, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0xb8, 0x01, 0x38, 0x0e, 0x00,
+ 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xc0, 0x00, 0xf0, 0x01, 0x18, 0x0e, 0x00, 0x0c, 0x00, 0x00, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0xc0, 0x01, 0x30,
+ 0x06, 0x00, 0xfe, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x60, 0x00, 0x80, 0x01, 0x18, 0x06, 0xc0, 0x3f, 0xfe, 0x00,
+ 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x80,
+ 0x01, 0x18, 0x06, 0xc0, 0x01, 0xc0, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x03, 0x18, 0x0e, 0x80, 0x00,
+ 0x00, 0x0e, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x00, 0x03, 0x18, 0x06, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x18, 0x06,
+ 0x00, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x06, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,
+ 0x0c, 0x06, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x07, 0x00, 0x00, 0x00,
+ 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0c, 0x0c, 0x06, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define bat3_width 147
+#define bat3_height 108
+static unsigned char bat3_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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x20, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x0c, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x87, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x38, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x27, 0x06, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0x34, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xdc, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x30, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x34,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x64, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x14, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x42, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x0c, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
+ 0x70, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x81, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xe0, 0x00, 0x80, 0x00, 0x00,
+ 0x80, 0x00, 0x89, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x80, 0x03, 0x70, 0x01, 0x00, 0x40, 0x00, 0x09, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x07, 0xc0,
+ 0x01, 0x00, 0x20, 0x80, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x1c, 0x80, 0x01, 0x00, 0x18, 0x80, 0x10,
+ 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x70, 0x00, 0x01, 0x02, 0x0c, 0x00, 0x21, 0x0c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xe0, 0x00, 0x03, 0x03, 0x02,
+ 0x40, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0x01, 0x00, 0x80, 0x03, 0xe2, 0x03, 0x01, 0x00, 0x40, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x06, 0xf3,
+ 0xc0, 0x00, 0x00, 0x80, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc0, 0x40, 0x00, 0x00, 0xf0, 0xff, 0x60, 0x00, 0xa0, 0x00, 0x60,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
+ 0xf8, 0xbf, 0x19, 0x00, 0x20, 0x00, 0x82, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x70, 0x0c, 0x8f, 0x05, 0x00, 0x90,
+ 0x00, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
+ 0x00, 0xfc, 0x6f, 0x9a, 0x01, 0x00, 0x10, 0x00, 0x08, 0x06, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x06, 0x6c, 0x93, 0x01,
+ 0x00, 0x00, 0x00, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x06, 0xf8, 0xc7, 0x00, 0x00, 0x08, 0x00, 0x40, 0x38,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x02, 0xf8,
+ 0x7f, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x02, 0xf0, 0x9e, 0x1f, 0x00, 0x44, 0x00,
+ 0x00, 0x82, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0xe0,
+ 0x06, 0x50, 0x1e, 0x38, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0xf8, 0x07, 0x50, 0x0a, 0x60, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0x00, 0x4c, 0x07, 0x50, 0x0a, 0xc0, 0x00, 0x41, 0x00, 0x00, 0xfc, 0x0f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x79, 0x00, 0x04, 0x0e, 0x50, 0x0a,
+ 0x80, 0x00, 0x00, 0x00, 0x80, 0x17, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xc0, 0xff, 0x01, 0x06, 0x00, 0x58, 0x0a, 0x80, 0x81, 0x40, 0x00, 0xe0,
+ 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x03, 0x06, 0x00,
+ 0x50, 0x0a, 0x00, 0x81, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x40, 0x00, 0x06, 0x03, 0x00, 0x70, 0x0a, 0x00, 0x43, 0x00,
+ 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c,
+ 0x03, 0x00, 0x28, 0x0a, 0x00, 0x23, 0x20, 0x80, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x03, 0x00, 0x38, 0x0e, 0x00,
+ 0x23, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x30, 0x01, 0x00, 0x28, 0x06, 0x00, 0x03, 0x00, 0x60, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x38,
+ 0x06, 0x00, 0x03, 0x20, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x38, 0x06, 0x00, 0x03, 0x00, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01,
+ 0x00, 0x38, 0x06, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x38, 0x06, 0x00, 0x01,
+ 0x10, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x00, 0x18, 0x07, 0x80, 0xff, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x18, 0x07,
+ 0x00, 0xc3, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x18, 0x03, 0x00, 0x00, 0xd1, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
+ 0x18, 0x03, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x18, 0x03, 0x00, 0x00, 0x66,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x06, 0x00, 0x18, 0x03, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x18, 0x03, 0x00,
+ 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0c, 0x00, 0x08, 0x03, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define bat4_width 147
+#define bat4_height 108
+static unsigned char bat4_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7c, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xc1, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x67, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x31,
+ 0x8c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x18, 0x98, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0x0c, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x06, 0x9c, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x83, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0c, 0x83, 0xfd, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84,
+ 0xc1, 0xc4, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x41, 0x84, 0x07, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x83, 0x80, 0x06, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0x80, 0x04, 0x36,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0x41, 0x80, 0x04, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x60, 0x80,
+ 0x05, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x00, 0x05, 0x90, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
+ 0x30, 0x00, 0x08, 0x10, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x10, 0x00, 0x00, 0x30, 0x38,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x10, 0x00, 0x00, 0x20, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x18, 0x00, 0x00,
+ 0x60, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x18, 0x00, 0x00, 0x40, 0x00, 0x1e, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0c,
+ 0x00, 0x00, 0xc0, 0x00, 0xf0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x80, 0x00, 0x00,
+ 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0x01, 0x0c, 0x00, 0x00, 0x80, 0x00, 0x00, 0xc0, 0x1f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x0c, 0x00, 0x00, 0x80,
+ 0x01, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x20, 0x00, 0x0c, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xc0, 0x07,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x0c, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0xf0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0c, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x5f, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
+ 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x04, 0x00, 0x00,
+ 0x80, 0x01, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x30, 0x00, 0x00, 0x08, 0x00, 0x00, 0x80, 0x01, 0x00, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08,
+ 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x80, 0x00, 0x80,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00,
+ 0x00, 0x08, 0x00, 0x00, 0x80, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0xc0,
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
+ 0xff, 0x07, 0x00, 0x18, 0x00, 0x00, 0x40, 0x00, 0x60, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x03, 0x1e, 0x00, 0x10, 0x00,
+ 0x00, 0x60, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x00, 0x70, 0x00, 0x10, 0x00, 0x00, 0x20, 0x00, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00,
+ 0x30, 0xc0, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x20, 0xa0, 0x01, 0x10, 0x02,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x01, 0x20, 0x00, 0x01, 0x19, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x60, 0x00, 0x81,
+ 0x0b, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0xc2, 0x0d, 0x00, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xc0,
+ 0x00, 0xf2, 0x06, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0xe1, 0x7f, 0x03, 0x00, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0xb3, 0xff, 0x01, 0xe0, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x3e, 0xff, 0x38,
+ 0xfd, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0c, 0x00, 0x6c, 0x87, 0xff, 0x0f, 0x3e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08,
+ 0x97, 0x83, 0x07, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0xbb, 0x80, 0x03, 0x70, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
+ 0xc0, 0x99, 0xe7, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xf0, 0xf0, 0x7f, 0x00, 0x00,
+ 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x18, 0xe0, 0x1c, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0c, 0xa0, 0x1c,
+ 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x30, 0x0c, 0xe0, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08,
+ 0xc0, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x1f, 0xc0, 0x14, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xe0, 0x1f, 0xc0, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0xc0, 0x14, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x60, 0x30, 0xc0, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0xc0,
+ 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0xc0, 0x14, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0xc0, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0xc0, 0x14, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x00, 0xc0, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0xc0, 0x1c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x60, 0x00, 0xc0, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00,
+ 0x80, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x80, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0x00, 0x80, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x80, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define bounce0_width 64
+#define bounce0_height 64
+static unsigned char bounce0_bits[] = {
+ 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07,
+ 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x70, 0x78, 0x1e, 0x0e, 0x00, 0x00,
+ 0x00, 0x00, 0x8c, 0x7f, 0xfe, 0x31, 0x00, 0x00, 0x00, 0x00, 0xf3, 0x7f,
+ 0xfe, 0xcf, 0x00, 0x00, 0x00, 0x80, 0xfc, 0x7f, 0xfe, 0x3f, 0x01, 0x00,
+ 0x00, 0x60, 0xff, 0x3f, 0xfc, 0xff, 0x06, 0x00, 0x00, 0x90, 0xff, 0x1f,
+ 0xf8, 0xff, 0x09, 0x00, 0x00, 0xc8, 0xff, 0x07, 0xe0, 0xff, 0x13, 0x00,
+ 0x00, 0xe4, 0xff, 0x03, 0xc0, 0xff, 0x27, 0x00, 0x00, 0xf2, 0xff, 0x01,
+ 0x80, 0xff, 0x4f, 0x00, 0x00, 0xe1, 0x7f, 0x00, 0x00, 0xfe, 0x87, 0x00,
+ 0x80, 0xc0, 0x1f, 0x00, 0x00, 0xf8, 0x03, 0x01, 0x40, 0x80, 0x01, 0x00,
+ 0x00, 0x80, 0x01, 0x02, 0x40, 0x00, 0x78, 0x00, 0x00, 0x1e, 0x00, 0x02,
+ 0x20, 0x80, 0x7f, 0x00, 0x00, 0xfe, 0x01, 0x04, 0x10, 0xc0, 0xff, 0x00,
+ 0x00, 0xff, 0x03, 0x08, 0x10, 0xe0, 0xff, 0x00, 0x00, 0xff, 0x07, 0x08,
+ 0x08, 0xe0, 0xff, 0x00, 0x00, 0xff, 0x07, 0x10, 0x08, 0xf0, 0xff, 0x01,
+ 0x80, 0xff, 0x0f, 0x10, 0x04, 0xf0, 0xff, 0x01, 0x80, 0xff, 0x0f, 0x20,
+ 0x04, 0xf8, 0xff, 0x03, 0xc0, 0xff, 0x1f, 0x20, 0x04, 0xf8, 0xff, 0x03,
+ 0xc0, 0xff, 0x1f, 0x20, 0x02, 0xfc, 0xff, 0xf9, 0x9f, 0xff, 0x3f, 0x40,
+ 0x02, 0xfc, 0xff, 0xfc, 0x3f, 0xff, 0x3f, 0x40, 0xfa, 0xfc, 0xff, 0xfe,
+ 0x7f, 0xff, 0x3f, 0x5f, 0xfa, 0xfc, 0x7f, 0xfe, 0x7f, 0xfe, 0x3f, 0x5f,
+ 0xfd, 0xfd, 0x7f, 0xff, 0xff, 0xfe, 0xbf, 0xbf, 0xfd, 0xf9, 0x3f, 0xff,
+ 0xff, 0xfc, 0x9f, 0xbf, 0xfd, 0xf9, 0xbf, 0xff, 0xff, 0xfd, 0x9f, 0xbf,
+ 0xfd, 0xfb, 0x9f, 0xff, 0xff, 0xf9, 0xdf, 0xbf, 0xfd, 0xfb, 0x9f, 0xff,
+ 0xff, 0xf9, 0xdf, 0xbf, 0xfd, 0x03, 0xc0, 0xff, 0xff, 0x03, 0xc0, 0xbf,
+ 0xfd, 0x03, 0xc0, 0xff, 0xff, 0x03, 0xc0, 0xbf, 0xfd, 0x03, 0xc0, 0xff,
+ 0xff, 0x03, 0xc0, 0xbf, 0xfd, 0x03, 0x80, 0xff, 0xff, 0x01, 0xc0, 0xbf,
+ 0xfd, 0x03, 0x80, 0xff, 0xff, 0x01, 0xc0, 0xbf, 0xfa, 0x03, 0x80, 0xff,
+ 0xff, 0x01, 0xc0, 0x5f, 0xfa, 0x03, 0x00, 0xff, 0xff, 0x00, 0xc0, 0x5f,
+ 0xfa, 0x03, 0x00, 0xff, 0xff, 0x00, 0xc0, 0x5f, 0xfa, 0x03, 0x00, 0xfe,
+ 0x7f, 0x00, 0xc0, 0x5f, 0xf4, 0x01, 0x00, 0xfe, 0x7f, 0x00, 0x80, 0x2f,
+ 0xf4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x2f, 0xf4, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0x2f, 0xe8, 0x01, 0x00, 0xfc, 0x3f, 0x00, 0x80, 0x17,
+ 0xe8, 0x01, 0x00, 0xfe, 0x7f, 0x00, 0x80, 0x17, 0xd0, 0x00, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0x0b, 0x10, 0x3e, 0x80, 0xff, 0xff, 0x01, 0x7c, 0x08,
+ 0x20, 0xff, 0x81, 0xff, 0xff, 0x81, 0xff, 0x04, 0x40, 0xff, 0xcf, 0xff,
+ 0xff, 0xf3, 0xff, 0x02, 0x40, 0xfe, 0xcf, 0xff, 0xff, 0xf3, 0x7f, 0x02,
+ 0x80, 0xfe, 0x9f, 0xff, 0xff, 0xf9, 0x7f, 0x01, 0x00, 0xfd, 0x3f, 0xff,
+ 0xff, 0xfc, 0xbf, 0x00, 0x00, 0xfa, 0x7f, 0xfe, 0x7f, 0xfe, 0x5f, 0x00,
+ 0x00, 0xf4, 0x7f, 0xfe, 0x7f, 0xfe, 0x2f, 0x00, 0x00, 0xc8, 0xff, 0xfc,
+ 0x3f, 0xff, 0x13, 0x00, 0x00, 0x90, 0xff, 0x01, 0x80, 0xff, 0x09, 0x00,
+ 0x00, 0x60, 0xff, 0x00, 0x00, 0xff, 0x06, 0x00, 0x00, 0x80, 0xfc, 0x00,
+ 0x00, 0x3f, 0x01, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0xce, 0x00, 0x00,
+ 0x00, 0x00, 0x0c, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00,
+ 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0xe0, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x00};
--- /dev/null
+#define bounce1_width 64
+#define bounce1_height 64
+static unsigned char bounce1_bits[] = {
+ 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07,
+ 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x70, 0xf8, 0x1f, 0x0e, 0x00, 0x00,
+ 0x00, 0x00, 0x8c, 0xff, 0x7f, 0x30, 0x00, 0x00, 0x00, 0x00, 0xf3, 0xff,
+ 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x80, 0xfc, 0xff, 0x7f, 0x00, 0x01, 0x00,
+ 0x00, 0x60, 0xfe, 0xff, 0x7f, 0x00, 0x06, 0x00, 0x00, 0x10, 0xfe, 0xff,
+ 0x7f, 0x00, 0x08, 0x00, 0x00, 0xc8, 0xfc, 0xff, 0x1f, 0x00, 0x10, 0x00,
+ 0x00, 0xf4, 0x81, 0xff, 0x03, 0x00, 0x20, 0x00, 0x00, 0xfa, 0x01, 0x00,
+ 0xf0, 0x01, 0x40, 0x00, 0x00, 0xfd, 0x01, 0x00, 0xff, 0x07, 0x80, 0x00,
+ 0x80, 0xfe, 0x01, 0x00, 0xff, 0x1f, 0x20, 0x01, 0x40, 0xfe, 0x01, 0x00,
+ 0xff, 0x7f, 0x70, 0x02, 0x40, 0xff, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x02,
+ 0xa0, 0xff, 0x00, 0x00, 0xff, 0xff, 0xfd, 0x05, 0xd0, 0xff, 0x00, 0x00,
+ 0xff, 0xff, 0xfd, 0x0b, 0xd0, 0x7f, 0x00, 0x00, 0xff, 0xff, 0xf9, 0x0b,
+ 0xe8, 0x7f, 0x00, 0x00, 0xff, 0xff, 0xf9, 0x17, 0xe8, 0x7f, 0x00, 0x00,
+ 0xff, 0xff, 0xfb, 0x17, 0xf4, 0x1f, 0x00, 0x00, 0xff, 0xff, 0xfb, 0x2f,
+ 0xf4, 0x0f, 0x00, 0x00, 0xfc, 0xff, 0xf3, 0x2f, 0xf4, 0x67, 0x00, 0xe0,
+ 0xf0, 0xff, 0xf3, 0x2f, 0xe2, 0xf1, 0x01, 0xfc, 0xc7, 0xff, 0xe0, 0x5f,
+ 0x82, 0xf8, 0x03, 0xff, 0x1f, 0x1f, 0xe0, 0x5f, 0x02, 0xfe, 0xc7, 0xff,
+ 0x7f, 0x06, 0xc0, 0x5f, 0x02, 0xff, 0xcf, 0xff, 0xff, 0x00, 0x80, 0x5f,
+ 0x01, 0xff, 0xcf, 0xff, 0xff, 0x01, 0x00, 0xbf, 0x01, 0xff, 0xcf, 0xff,
+ 0xff, 0x01, 0x00, 0xbf, 0x01, 0xff, 0xcf, 0xff, 0xff, 0x01, 0x00, 0xbe,
+ 0x01, 0xff, 0xcf, 0xff, 0xff, 0x01, 0x00, 0xbc, 0x01, 0xff, 0xcf, 0xff,
+ 0xff, 0x01, 0x00, 0x80, 0x01, 0xff, 0xcf, 0xff, 0xff, 0x01, 0x00, 0x80,
+ 0x01, 0xff, 0xcf, 0xff, 0xff, 0x01, 0x00, 0xbc, 0x01, 0xff, 0xcf, 0xff,
+ 0xff, 0x01, 0x00, 0xbe, 0x01, 0xff, 0xcf, 0xff, 0xff, 0x01, 0x00, 0xbf,
+ 0x01, 0xff, 0xcf, 0xff, 0xff, 0x01, 0x00, 0xbf, 0x02, 0xff, 0xcf, 0xff,
+ 0xff, 0x00, 0x80, 0x5f, 0x02, 0xfe, 0xc7, 0xff, 0x7f, 0x06, 0xc0, 0x5f,
+ 0x82, 0xf8, 0x03, 0xff, 0x1f, 0x1f, 0xe0, 0x5f, 0xe2, 0xf1, 0x01, 0xfc,
+ 0xc7, 0xff, 0xe0, 0x5f, 0xf4, 0x67, 0x00, 0xe0, 0xf0, 0xff, 0xf3, 0x2f,
+ 0xf4, 0x0f, 0x00, 0x00, 0xfc, 0xff, 0xf3, 0x2f, 0xf4, 0x1f, 0x00, 0x00,
+ 0xff, 0xff, 0xfb, 0x2f, 0xe8, 0x7f, 0x00, 0x00, 0xff, 0xff, 0xfb, 0x17,
+ 0xe8, 0x7f, 0x00, 0x00, 0xff, 0xff, 0xf9, 0x17, 0xd0, 0x7f, 0x00, 0x00,
+ 0xff, 0xff, 0xf9, 0x0b, 0xd0, 0xff, 0x00, 0x00, 0xff, 0xff, 0xfd, 0x0b,
+ 0xa0, 0xff, 0x00, 0x00, 0xff, 0xff, 0xfd, 0x05, 0x40, 0xff, 0x00, 0x00,
+ 0xff, 0xff, 0xf8, 0x02, 0x40, 0xfe, 0x01, 0x00, 0xff, 0x7f, 0x70, 0x02,
+ 0x80, 0xfe, 0x01, 0x00, 0xff, 0x1f, 0x20, 0x01, 0x00, 0xfd, 0x01, 0x00,
+ 0xff, 0x07, 0x80, 0x00, 0x00, 0xfa, 0x01, 0x00, 0xf0, 0x01, 0x40, 0x00,
+ 0x00, 0xf4, 0x81, 0xff, 0x03, 0x00, 0x20, 0x00, 0x00, 0xc8, 0xfc, 0xff,
+ 0x1f, 0x00, 0x10, 0x00, 0x00, 0x10, 0xfe, 0xff, 0x7f, 0x00, 0x08, 0x00,
+ 0x00, 0x60, 0xfe, 0xff, 0x7f, 0x00, 0x06, 0x00, 0x00, 0x80, 0xfc, 0xff,
+ 0x7f, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf3, 0xff, 0x7f, 0xc0, 0x00, 0x00,
+ 0x00, 0x00, 0x8c, 0xff, 0x7f, 0x30, 0x00, 0x00, 0x00, 0x00, 0x70, 0xf8,
+ 0x1f, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0xe0, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x00};
--- /dev/null
+#define bounce2_width 64
+#define bounce2_height 64
+static unsigned char bounce2_bits[] = {
+ 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07,
+ 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x0e, 0x00, 0x00,
+ 0x00, 0x00, 0x0c, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00,
+ 0x00, 0xce, 0x00, 0x00, 0x00, 0x80, 0xfc, 0x00, 0x00, 0x3f, 0x01, 0x00,
+ 0x00, 0x60, 0xff, 0x00, 0x00, 0xff, 0x06, 0x00, 0x00, 0x90, 0xff, 0x01,
+ 0x80, 0xff, 0x09, 0x00, 0x00, 0xc8, 0xff, 0xfc, 0x3f, 0xff, 0x13, 0x00,
+ 0x00, 0xf4, 0x7f, 0xfe, 0x7f, 0xfe, 0x2f, 0x00, 0x00, 0xfa, 0x7f, 0xfe,
+ 0x7f, 0xfe, 0x5f, 0x00, 0x00, 0xfd, 0x3f, 0xff, 0xff, 0xfc, 0xbf, 0x00,
+ 0x80, 0xfe, 0x9f, 0xff, 0xff, 0xf9, 0x7f, 0x01, 0x40, 0xfe, 0xcf, 0xff,
+ 0xff, 0xf3, 0x7f, 0x02, 0x40, 0xff, 0xcf, 0xff, 0xff, 0xf3, 0xff, 0x02,
+ 0x20, 0xff, 0x81, 0xff, 0xff, 0x81, 0xff, 0x04, 0x10, 0x3e, 0x80, 0xff,
+ 0xff, 0x01, 0x7c, 0x08, 0xd0, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x0b,
+ 0xe8, 0x01, 0x00, 0xfe, 0x7f, 0x00, 0x80, 0x17, 0xe8, 0x01, 0x00, 0xfc,
+ 0x3f, 0x00, 0x80, 0x17, 0xf4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x2f,
+ 0xf4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x2f, 0xf4, 0x01, 0x00, 0xfe,
+ 0x7f, 0x00, 0x80, 0x2f, 0xfa, 0x03, 0x00, 0xfe, 0x7f, 0x00, 0xc0, 0x5f,
+ 0xfa, 0x03, 0x00, 0xff, 0xff, 0x00, 0xc0, 0x5f, 0xfa, 0x03, 0x00, 0xff,
+ 0xff, 0x00, 0xc0, 0x5f, 0xfa, 0x03, 0x80, 0xff, 0xff, 0x01, 0xc0, 0x5f,
+ 0xfd, 0x03, 0x80, 0xff, 0xff, 0x01, 0xc0, 0xbf, 0xfd, 0x03, 0x80, 0xff,
+ 0xff, 0x01, 0xc0, 0xbf, 0xfd, 0x03, 0xc0, 0xff, 0xff, 0x03, 0xc0, 0xbf,
+ 0xfd, 0x03, 0xc0, 0xff, 0xff, 0x03, 0xc0, 0xbf, 0xfd, 0x03, 0xc0, 0xff,
+ 0xff, 0x03, 0xc0, 0xbf, 0xfd, 0xfb, 0x9f, 0xff, 0xff, 0xf9, 0xdf, 0xbf,
+ 0xfd, 0xfb, 0x9f, 0xff, 0xff, 0xf9, 0xdf, 0xbf, 0xfd, 0xf9, 0xbf, 0xff,
+ 0xff, 0xfd, 0x9f, 0xbf, 0xfd, 0xf9, 0x3f, 0xff, 0xff, 0xfc, 0x9f, 0xbf,
+ 0xfd, 0xfd, 0x7f, 0xff, 0xff, 0xfe, 0xbf, 0xbf, 0xfa, 0xfc, 0x7f, 0xfe,
+ 0x7f, 0xfe, 0x3f, 0x5f, 0xfa, 0xfc, 0xff, 0xfe, 0x7f, 0xff, 0x3f, 0x5f,
+ 0x02, 0xfc, 0xff, 0xfc, 0x3f, 0xff, 0x3f, 0x40, 0x02, 0xfc, 0xff, 0xf9,
+ 0x9f, 0xff, 0x3f, 0x40, 0x04, 0xf8, 0xff, 0x03, 0xc0, 0xff, 0x1f, 0x20,
+ 0x04, 0xf8, 0xff, 0x03, 0xc0, 0xff, 0x1f, 0x20, 0x04, 0xf0, 0xff, 0x01,
+ 0x80, 0xff, 0x0f, 0x20, 0x08, 0xf0, 0xff, 0x01, 0x80, 0xff, 0x0f, 0x10,
+ 0x08, 0xe0, 0xff, 0x00, 0x00, 0xff, 0x07, 0x10, 0x10, 0xe0, 0xff, 0x00,
+ 0x00, 0xff, 0x07, 0x08, 0x10, 0xc0, 0xff, 0x00, 0x00, 0xff, 0x03, 0x08,
+ 0x20, 0x80, 0x7f, 0x00, 0x00, 0xfe, 0x01, 0x04, 0x40, 0x00, 0x78, 0x00,
+ 0x00, 0x1e, 0x00, 0x02, 0x40, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x02,
+ 0x80, 0xc0, 0x1f, 0x00, 0x00, 0xf8, 0x03, 0x01, 0x00, 0xe1, 0x7f, 0x00,
+ 0x00, 0xfe, 0x87, 0x00, 0x00, 0xf2, 0xff, 0x01, 0x80, 0xff, 0x4f, 0x00,
+ 0x00, 0xe4, 0xff, 0x03, 0xc0, 0xff, 0x27, 0x00, 0x00, 0xc8, 0xff, 0x07,
+ 0xe0, 0xff, 0x13, 0x00, 0x00, 0x90, 0xff, 0x1f, 0xf8, 0xff, 0x09, 0x00,
+ 0x00, 0x60, 0xff, 0x3f, 0xfc, 0xff, 0x06, 0x00, 0x00, 0x80, 0xfc, 0x7f,
+ 0xfe, 0x3f, 0x01, 0x00, 0x00, 0x00, 0xf3, 0x7f, 0xfe, 0xcf, 0x00, 0x00,
+ 0x00, 0x00, 0x8c, 0x7f, 0xfe, 0x31, 0x00, 0x00, 0x00, 0x00, 0x70, 0x78,
+ 0x1e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0xe0, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x00};
--- /dev/null
+#define bounce3_width 64
+#define bounce3_height 64
+static unsigned char bounce3_bits[] = {
+ 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07,
+ 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x70, 0xf8, 0x1f, 0x0e, 0x00, 0x00,
+ 0x00, 0x00, 0x0c, 0xfe, 0xff, 0x31, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe,
+ 0xff, 0xcf, 0x00, 0x00, 0x00, 0x80, 0x00, 0xfe, 0xff, 0x3f, 0x01, 0x00,
+ 0x00, 0x60, 0x00, 0xfe, 0xff, 0x7f, 0x06, 0x00, 0x00, 0x10, 0x00, 0xfe,
+ 0xff, 0x7f, 0x08, 0x00, 0x00, 0x08, 0x00, 0xf8, 0xff, 0x3f, 0x13, 0x00,
+ 0x00, 0x04, 0x00, 0xc0, 0xff, 0x81, 0x2f, 0x00, 0x00, 0x02, 0x80, 0x0f,
+ 0x00, 0x80, 0x5f, 0x00, 0x00, 0x01, 0xe0, 0xff, 0x00, 0x80, 0xbf, 0x00,
+ 0x80, 0x04, 0xf8, 0xff, 0x00, 0x80, 0x7f, 0x01, 0x40, 0x0e, 0xfe, 0xff,
+ 0x00, 0x80, 0x7f, 0x02, 0x40, 0x1f, 0xff, 0xff, 0x00, 0x00, 0xff, 0x02,
+ 0xa0, 0xbf, 0xff, 0xff, 0x00, 0x00, 0xff, 0x05, 0xd0, 0xbf, 0xff, 0xff,
+ 0x00, 0x00, 0xff, 0x0b, 0xd0, 0x9f, 0xff, 0xff, 0x00, 0x00, 0xfe, 0x0b,
+ 0xe8, 0x9f, 0xff, 0xff, 0x00, 0x00, 0xfe, 0x17, 0xe8, 0xdf, 0xff, 0xff,
+ 0x00, 0x00, 0xfe, 0x17, 0xf4, 0xdf, 0xff, 0xff, 0x00, 0x00, 0xf8, 0x2f,
+ 0xf4, 0xcf, 0xff, 0x3f, 0x00, 0x00, 0xf0, 0x2f, 0xf4, 0xcf, 0xff, 0x0f,
+ 0x07, 0x00, 0xe6, 0x2f, 0xfa, 0x07, 0xff, 0xe3, 0x3f, 0x80, 0x8f, 0x47,
+ 0xfa, 0x07, 0xf8, 0xf8, 0xff, 0xc0, 0x1f, 0x41, 0xfa, 0x03, 0x60, 0xfe,
+ 0xff, 0xe3, 0x7f, 0x40, 0xfa, 0x01, 0x00, 0xff, 0xff, 0xf3, 0xff, 0x40,
+ 0xfd, 0x00, 0x80, 0xff, 0xff, 0xf3, 0xff, 0x80, 0xfd, 0x00, 0x80, 0xff,
+ 0xff, 0xf3, 0xff, 0x80, 0x7d, 0x00, 0x80, 0xff, 0xff, 0xf3, 0xff, 0x80,
+ 0x3d, 0x00, 0x80, 0xff, 0xff, 0xf3, 0xff, 0x80, 0x01, 0x00, 0x80, 0xff,
+ 0xff, 0xf3, 0xff, 0x80, 0x01, 0x00, 0x80, 0xff, 0xff, 0xf3, 0xff, 0x80,
+ 0x3d, 0x00, 0x80, 0xff, 0xff, 0xf3, 0xff, 0x80, 0x7d, 0x00, 0x80, 0xff,
+ 0xff, 0xf3, 0xff, 0x80, 0xfd, 0x00, 0x80, 0xff, 0xff, 0xf3, 0xff, 0x80,
+ 0xfd, 0x00, 0x80, 0xff, 0xff, 0xf3, 0xff, 0x80, 0xfa, 0x01, 0x00, 0xff,
+ 0xff, 0xf3, 0xff, 0x40, 0xfa, 0x03, 0x60, 0xfe, 0xff, 0xe3, 0x7f, 0x40,
+ 0xfa, 0x07, 0xf8, 0xf8, 0xff, 0xc0, 0x1f, 0x41, 0xfa, 0x07, 0xff, 0xe3,
+ 0x3f, 0x80, 0x8f, 0x47, 0xf4, 0xcf, 0xff, 0x0f, 0x07, 0x00, 0xe6, 0x2f,
+ 0xf4, 0xcf, 0xff, 0x3f, 0x00, 0x00, 0xf0, 0x2f, 0xf4, 0xdf, 0xff, 0xff,
+ 0x00, 0x00, 0xf8, 0x2f, 0xe8, 0xdf, 0xff, 0xff, 0x00, 0x00, 0xfe, 0x17,
+ 0xe8, 0x9f, 0xff, 0xff, 0x00, 0x00, 0xfe, 0x17, 0xd0, 0x9f, 0xff, 0xff,
+ 0x00, 0x00, 0xfe, 0x0b, 0xd0, 0xbf, 0xff, 0xff, 0x00, 0x00, 0xff, 0x0b,
+ 0xa0, 0xbf, 0xff, 0xff, 0x00, 0x00, 0xff, 0x05, 0x40, 0x1f, 0xff, 0xff,
+ 0x00, 0x00, 0xff, 0x02, 0x40, 0x0e, 0xfe, 0xff, 0x00, 0x80, 0x7f, 0x02,
+ 0x80, 0x04, 0xf8, 0xff, 0x00, 0x80, 0x7f, 0x01, 0x00, 0x01, 0xe0, 0xff,
+ 0x00, 0x80, 0xbf, 0x00, 0x00, 0x02, 0x80, 0x0f, 0x00, 0x80, 0x5f, 0x00,
+ 0x00, 0x04, 0x00, 0xc0, 0xff, 0x81, 0x2f, 0x00, 0x00, 0x08, 0x00, 0xf8,
+ 0xff, 0x3f, 0x13, 0x00, 0x00, 0x10, 0x00, 0xfe, 0xff, 0x7f, 0x08, 0x00,
+ 0x00, 0x60, 0x00, 0xfe, 0xff, 0x7f, 0x06, 0x00, 0x00, 0x80, 0x00, 0xfe,
+ 0xff, 0x3f, 0x01, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0xcf, 0x00, 0x00,
+ 0x00, 0x00, 0x0c, 0xfe, 0xff, 0x31, 0x00, 0x00, 0x00, 0x00, 0x70, 0xf8,
+ 0x1f, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0xe0, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x00};
--- /dev/null
+#define bouncemask_width 64
+#define bouncemask_height 64
+static unsigned char bouncemask_bits[] = {
+ 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff,
+ 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x0f, 0x00, 0x00,
+ 0x00, 0x00, 0xfc, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00,
+ 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0xf0, 0xff, 0xff,
+ 0xff, 0xff, 0x0f, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00,
+ 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xfe, 0xff, 0xff,
+ 0xff, 0xff, 0x7f, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
+ 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xc0, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03,
+ 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xf0, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
+ 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x1f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x3f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
+ 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
+ 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x3f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f,
+ 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xf0, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
+ 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xc0, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03,
+ 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00,
+ 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xf8, 0xff, 0xff,
+ 0xff, 0xff, 0x1f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00,
+ 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x80, 0xff, 0xff,
+ 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0xfc, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff,
+ 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x00};
--- /dev/null
+#define cross_weave_width 16
+#define cross_weave_height 16
+static unsigned char cross_weave_bits[] = {
+ 0x55, 0x55, 0x88, 0x88, 0x55, 0x55, 0x22, 0x22, 0x55, 0x55, 0x88, 0x88,
+ 0x55, 0x55, 0x22, 0x22, 0x55, 0x55, 0x88, 0x88, 0x55, 0x55, 0x22, 0x22,
+ 0x55, 0x55, 0x88, 0x88, 0x55, 0x55, 0x22, 0x22};
--- /dev/null
+#define dimple1_width 16
+#define dimple1_height 16
+static unsigned char dimple1_bits[] = {
+ 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00,
+ 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00,
+ 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00};
--- /dev/null
+#define dimple3_width 16
+#define dimple3_height 16
+static unsigned char dimple3_bits[] = {
+ 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define donkey_width 21
+#define donkey_height 21
+static unsigned char donkey_bits[] = {
+ 0x44, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x6c, 0x00, 0x00,
+ 0x28, 0x00, 0x00, 0x38, 0x00, 0x00, 0x74, 0x00, 0x00, 0xfe, 0x00, 0x00,
+ 0xef, 0xff, 0x00, 0xc2, 0xff, 0x01, 0xc0, 0xff, 0x01, 0x80, 0xff, 0x02,
+ 0x80, 0xff, 0x02, 0x80, 0xa2, 0x04, 0x80, 0x42, 0x05, 0x80, 0x42, 0x01,
+ 0x80, 0xa2, 0x00, 0x80, 0xa2, 0x00, 0x80, 0xa2, 0x00, 0x80, 0x20, 0x00,
+ 0x00, 0x00, 0x00};
--- /dev/null
+#define elephant_width 20
+#define elephant_height 20
+static unsigned char elephant_bits[] = {
+ 0xc0,0x07,0x00,0xc0,0x19,0x00,0xe0,0x76,0x00,0xe0,0xf6,0x00,0xf0,0xf7,0x01,
+ 0xf8,0xf7,0x03,0xd8,0xf7,0x07,0xfa,0xf7,0x07,0x7d,0xfb,0x07,0xfb,0xfc,0x0f,
+ 0xfe,0xff,0x0f,0xfc,0xff,0x0f,0xfe,0xff,0x0f,0xf6,0xff,0x0f,0xf2,0xff,0x06,
+ 0x72,0xe3,0x06,0x73,0xe3,0x06,0x71,0xe3,0x06,0x71,0xe3,0x06,0x70,0xe0,0x00
+ };
--- /dev/null
+#define fish0_width 20
+#define fish0_height 20
+static unsigned char fish0_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00,
+ 0x00, 0x0f, 0x00, 0x80, 0x1f, 0x00, 0xc0, 0x3f, 0x00, 0x40, 0x0f, 0x00,
+ 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x38, 0x00,
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define fish1_width 20
+#define fish1_height 20
+static unsigned char fish1_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x06, 0x00,
+ 0x80, 0x1f, 0x00, 0xc0, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0xb8, 0x1f, 0x00,
+ 0x10, 0x06, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define fish2_width 20
+#define fish2_height 20
+static unsigned char fish2_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0xc0, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00,
+ 0x00, 0x2f, 0x00, 0xc0, 0x3f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x0f, 0x00,
+ 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define fish3_width 20
+#define fish3_height 20
+static unsigned char fish3_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x86, 0x00,
+ 0x80, 0xdf, 0x01, 0xe0, 0x7f, 0x00, 0xe0, 0x3f, 0x00, 0x80, 0x1f, 0x00,
+ 0x00, 0x06, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define fish4_width 20
+#define fish4_height 20
+static unsigned char fish4_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00,
+ 0x00, 0x0f, 0x00, 0x80, 0x1f, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x2f, 0x00,
+ 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x03, 0x00, 0xc0, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define fish5_width 20
+#define fish5_height 20
+static unsigned char fish5_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x10, 0x06, 0x00,
+ 0xb8, 0x1f, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x7f, 0x00, 0x80, 0x1f, 0x00,
+ 0x00, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define fish6_width 20
+#define fish6_height 20
+static unsigned char fish6_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
+ 0x00, 0x38, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00,
+ 0x40, 0x0f, 0x00, 0xc0, 0x3f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x0f, 0x00,
+ 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define fish7_width 20
+#define fish7_height 20
+static unsigned char fish7_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x06, 0x00,
+ 0x80, 0x1f, 0x00, 0xe0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0x80, 0xdf, 0x01,
+ 0x00, 0x86, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define flipped_gray_width 4
+#define flipped_gray_height 2
+static unsigned char flipped_gray_bits[] = {
+ 0x07, 0x0d};
--- /dev/null
+#define gray1_width 2
+#define gray1_height 2
+static unsigned char gray1_bits[] = {
+ 0x01, 0x02};
--- /dev/null
+#define gray3_width 4
+#define gray3_height 4
+static unsigned char gray3_bits[] = {
+ 0x01, 0x00, 0x04, 0x00};
--- /dev/null
+#define hlines2_width 1
+#define hlines2_height 2
+static unsigned char hlines2_bits[] = {
+ 0x01, 0x00};
--- /dev/null
+#define image_width 172
+#define image_height 246
+static unsigned char image_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0xa0,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x07,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,
+ 0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,
+ 0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xdf,0xff,0xf3,0xff,0x1f,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+ 0x00,0x00,0xfe,0xff,0xff,0xff,0xdf,0xff,0xff,0x9f,0xff,0xe3,0xff,0x3f,0x00,
+ 0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x9f,0xff,
+ 0xff,0x3f,0xff,0xc7,0xff,0x3f,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,
+ 0x80,0xff,0xff,0xff,0xff,0x1f,0xf2,0x7f,0x7f,0xfe,0xc3,0xff,0x7f,0x00,0x00,
+ 0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0x3f,0xc0,0x7f,
+ 0x7e,0xfc,0xc1,0xff,0xff,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0xe0,
+ 0xff,0xff,0xff,0xcf,0x7f,0x00,0xff,0x7c,0xfc,0xc1,0xff,0xff,0x01,0x00,0x00,
+ 0x00,0xf0,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0x0f,0xff,0x00,0xff,0x78,
+ 0xf0,0xc1,0xff,0xff,0x03,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0xf8,0xff,
+ 0xff,0xfc,0x1f,0xfe,0x00,0xff,0x30,0xe0,0x81,0xff,0xff,0x03,0x00,0x00,0x00,
+ 0xf0,0x00,0x00,0x00,0x00,0xfc,0xff,0x7f,0x38,0x1f,0xfc,0x01,0xfe,0x01,0xe0,
+ 0x83,0xff,0xf9,0x07,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0xff,0xff,0x3f,
+ 0x38,0x1e,0xf8,0x01,0xfc,0x01,0xe0,0x87,0xff,0xfb,0x07,0x00,0x00,0x00,0xf0,
+ 0x00,0x00,0x00,0x80,0xff,0xff,0x7f,0x00,0x3c,0xf0,0x01,0xf8,0x01,0xe0,0x8f,
+ 0xff,0xf3,0x07,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0xc0,0xff,0xff,0x7f,0x00,
+ 0x3c,0xf0,0x03,0xf8,0x01,0xc0,0xff,0xff,0xf3,0x0f,0x00,0x00,0x00,0xf0,0x00,
+ 0x00,0x00,0xc0,0xff,0xff,0xff,0x00,0x7c,0xe0,0x03,0xf0,0x01,0xc0,0xff,0xff,
+ 0xf3,0x3f,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0x81,0x7f,
+ 0xe0,0x03,0xf0,0x03,0xc0,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0xf0,0x00,0x00,
+ 0x00,0xe0,0xff,0xff,0xff,0x83,0xff,0xe0,0x03,0xe0,0x03,0xc0,0xff,0xff,0xff,
+ 0xff,0x01,0x00,0x00,0xf0,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0x97,0xff,0xc0,
+ 0x07,0xe0,0x03,0x80,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xf0,0x00,0x00,0x00,
+ 0xf0,0xff,0xff,0xff,0xff,0xff,0xc1,0x07,0xc0,0x07,0x80,0xff,0xff,0xff,0xff,
+ 0x07,0x00,0x00,0xf0,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xc1,0x07,
+ 0xc0,0x03,0x80,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0xf0,0x00,0x00,0x00,0xf8,
+ 0xff,0xff,0xff,0xff,0xff,0x83,0x0f,0xc0,0x07,0xc0,0xff,0xff,0xff,0xff,0x3f,
+ 0x00,0x00,0xf0,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xc7,0x0f,0xc0,
+ 0x1f,0xe0,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0xf0,0x00,0x00,0x00,0xfe,0xff,
+ 0xff,0xff,0xff,0xff,0xcf,0x1f,0xc0,0x7f,0xfc,0xff,0xff,0xff,0xff,0xff,0x00,
+ 0x00,0xf0,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0xc0,0x7f,
+ 0xfe,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0xf0,0x00,0x00,0x00,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xc3,0x7f,0xfe,0xff,0xff,0xff,0xff,0xff,0x01,0x00,
+ 0xf0,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc7,0x7f,0xfe,
+ 0xff,0xff,0xff,0xff,0xff,0x03,0x00,0xf0,0x00,0x00,0x80,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0xfe,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0xf0,
+ 0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xfe,0xff,
+ 0xff,0xff,0xff,0xff,0x0f,0x00,0xf0,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x7f,0xfe,0xff,0xff,0x0f,0xff,0xff,0x1f,0x00,0xf0,0x00,
+ 0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xfe,0xff,0xff,
+ 0x07,0xff,0xff,0x1f,0x00,0xf0,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x3f,0xff,0xff,0xbf,0x00,0xff,0xff,0x1f,0x00,0xf0,0x00,0x00,
+ 0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xff,0xff,0x0f,0x00,
+ 0xff,0xff,0x1f,0x00,0xf0,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x03,0x00,0xfe,0xff,0x3f,0x00,0xf0,0x00,0x00,0xe0,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0xfe,
+ 0xff,0x3f,0x00,0xf0,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x1f,0x00,0x00,0xfe,0xff,0x3f,0x00,0xf0,0x00,0x00,0xf0,0xff,
+ 0xff,0xff,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0xfc,0xff,
+ 0x3f,0x00,0xf0,0x00,0x00,0xf0,0xff,0xff,0x7f,0xf0,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x0f,0x00,0x00,0x00,0xfc,0xff,0x3f,0x00,0xf0,0x00,0x00,0xf0,0xff,0xff,
+ 0x7f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0xf8,0xff,0x3f,
+ 0x00,0xf0,0x00,0x00,0xf0,0xff,0xff,0x03,0xf0,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0x00,0x00,0x00,0x00,0xf8,0xff,0x3f,0x00,0xf0,0x00,0x00,0xf0,0xff,0xff,0x03,
+ 0xe0,0xff,0xff,0xe7,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0xf8,0xff,0x7f,0x00,
+ 0xf0,0x00,0x00,0xf0,0xff,0xff,0x01,0x00,0x00,0x80,0xc3,0xff,0xff,0x01,0x00,
+ 0x00,0x00,0x00,0xf8,0xff,0x7f,0x00,0xf0,0x00,0x00,0xf8,0xff,0xff,0x01,0x00,
+ 0x00,0x00,0x00,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x7f,0x00,0xf0,
+ 0x00,0x00,0xf8,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0xf8,0x07,0x00,0x00,0x00,
+ 0x00,0x00,0xf0,0xff,0x7f,0x00,0xf0,0x00,0x00,0xf8,0xff,0xff,0x03,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x7f,0x00,0xf0,0x00,
+ 0x00,0xf8,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xe0,0xff,0x7f,0x00,0xf0,0x00,0x00,0xf8,0xff,0xff,0x07,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0x7f,0x00,0xf0,0x00,0x00,
+ 0xf8,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xc0,0xff,0x7f,0x00,0xf0,0x00,0x00,0xf8,0xff,0xff,0x03,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0x7f,0x00,0xf0,0x00,0x00,0xf8,
+ 0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0xff,0xff,0x00,0xf0,0x00,0x00,0xf8,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0x7f,0x00,0xf0,0x00,0x00,0xf8,0xff,
+ 0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,
+ 0x7f,0x00,0xf0,0x00,0x00,0xf8,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0x7f,0x00,0xf0,0x00,0x00,0xf8,0xff,0xff,
+ 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x7f,
+ 0x00,0xf0,0x00,0x00,0xf8,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0xff,0x7f,0x00,0xf0,0x00,0x00,0xf8,0xff,0xff,0x03,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x7f,0x00,
+ 0xf0,0x00,0x00,0xf8,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x80,0xff,0x7f,0x00,0xf0,0x00,0x00,0xf8,0xff,0xff,0x03,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0x7f,0x00,0xf0,
+ 0x00,0x00,0xf8,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xc0,0xff,0x7f,0x00,0xf0,0x00,0x00,0xf8,0xff,0xff,0x03,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xc0,0xff,0x7f,0x00,0xf0,0x00,
+ 0x00,0xf8,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x70,0xc0,0xff,0x7f,0x00,0xf0,0x00,0x00,0xf8,0xff,0xff,0x03,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xc0,0xff,0x7f,0x00,0xf0,0x00,0x00,
+ 0xf8,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,
+ 0xc1,0xff,0x7f,0x00,0xf0,0x00,0x00,0xf8,0xff,0xff,0x03,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xc1,0xff,0x7f,0x00,0xf0,0x00,0x00,0xf8,
+ 0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xc1,
+ 0xff,0x7f,0x00,0xf0,0x00,0x00,0xf8,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xf8,0xc1,0xff,0x7f,0x00,0xf0,0x00,0x00,0xf8,0xff,
+ 0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xc1,0xff,
+ 0x7f,0x00,0xf0,0x00,0x00,0xf8,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xf8,0xc1,0xff,0x7f,0x00,0xf0,0x00,0x00,0xf0,0xff,0xff,
+ 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xc1,0xff,0x7f,
+ 0x00,0xf0,0x00,0x00,0xf0,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0xf0,0xc1,0xff,0x7f,0x00,0xf0,0x00,0x00,0xf0,0xff,0xff,0x03,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xc1,0xff,0x7f,0x00,
+ 0xf0,0x00,0x00,0xf0,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xf0,0xc1,0xff,0x7f,0x00,0xf0,0x00,0x00,0xf0,0xff,0xff,0x03,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xc1,0xff,0x7f,0x00,0xf0,
+ 0x00,0x00,0xf0,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xe0,0xc3,0xff,0x7f,0x00,0xf0,0x00,0x00,0xf0,0xff,0xff,0x03,0x40,0x91,
+ 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x00,0xe0,0xc3,0xff,0x7f,0x00,0xf0,0x00,
+ 0x00,0xf0,0xff,0xff,0x03,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0xf0,0xff,0x0f,
+ 0xe0,0xc3,0xff,0x7f,0x00,0xf0,0x00,0x00,0xf0,0xff,0xff,0xc3,0xff,0xff,0x0f,
+ 0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xf3,0xc3,0xff,0x7f,0x00,0xf0,0x00,0x00,
+ 0xfc,0xff,0xff,0xe3,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xf7,
+ 0x83,0xff,0xff,0x00,0xf0,0x00,0x00,0xfc,0xff,0xff,0xf3,0xff,0xff,0x7f,0x00,
+ 0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x83,0xff,0xff,0x00,0xf0,0x00,0x00,0xfc,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x03,
+ 0xff,0xff,0x00,0xf0,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,
+ 0x00,0x80,0xff,0xff,0xff,0xff,0x07,0xff,0xff,0x00,0xf0,0x00,0x00,0xfc,0xff,
+ 0xff,0xff,0x01,0xfc,0xff,0x01,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0x07,0xff,
+ 0xff,0x00,0xf0,0x00,0x00,0xfc,0xff,0xff,0x5f,0x00,0xf8,0xff,0x03,0x00,0x00,
+ 0xc0,0xff,0x3f,0x00,0xff,0x0f,0xff,0xff,0x00,0xf0,0x00,0x00,0xf8,0xff,0xff,
+ 0x1f,0x00,0xe0,0xff,0x07,0x00,0x00,0xe0,0xff,0x03,0x00,0xfc,0x0f,0xfe,0x7f,
+ 0x00,0xf0,0x00,0x00,0xf8,0xff,0xff,0x1f,0x00,0xc0,0xff,0x0f,0x00,0x00,0xf0,
+ 0xff,0x00,0x00,0xf0,0x0f,0xfe,0x7f,0x00,0xf0,0x00,0x00,0xf8,0xff,0xff,0x1f,
+ 0xf0,0xff,0xff,0x1f,0x00,0x00,0xf8,0xff,0x23,0x00,0xe0,0x1f,0xfe,0x3f,0x00,
+ 0xf0,0x00,0x00,0xf8,0xff,0xff,0x1f,0xfe,0xff,0xff,0x3f,0x00,0x00,0xfc,0xff,
+ 0xff,0x07,0xe0,0x1f,0xfe,0x3f,0x00,0xf0,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0x00,0x00,0xfe,0xff,0xff,0x3f,0xc0,0x1f,0xfe,0x3f,0x00,0xf0,
+ 0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0xff,0xff,0xff,
+ 0x7f,0xc0,0x1f,0xfe,0x3f,0x00,0xf0,0x00,0x00,0xf8,0xff,0x3f,0xfe,0xff,0xff,
+ 0xff,0xff,0x01,0x80,0xff,0xff,0xff,0xff,0x81,0x1f,0xfc,0x3f,0x00,0xf0,0x00,
+ 0x00,0xf8,0xff,0x3f,0xfc,0xff,0xff,0xff,0xff,0x01,0xc0,0xff,0xff,0xff,0xff,
+ 0x83,0x1f,0xfc,0x3f,0x00,0xf0,0x00,0x00,0xf8,0xff,0x1f,0xf8,0xff,0xff,0xff,
+ 0xff,0x01,0xe0,0xff,0xff,0xff,0xff,0x83,0x1f,0xfc,0x3f,0x00,0xf0,0x00,0x00,
+ 0xf8,0xff,0x1f,0xf8,0xf7,0xff,0xf9,0xff,0x01,0xe0,0xff,0xff,0xff,0xfb,0x03,
+ 0x1f,0xfc,0x3f,0x00,0xf0,0x00,0x00,0xf8,0xff,0x0f,0xf8,0xc1,0xff,0xe0,0xff,
+ 0x03,0xf0,0xff,0x83,0xff,0xe1,0x07,0x1e,0xfe,0x3f,0x00,0xf0,0x00,0x00,0xf8,
+ 0xff,0x0f,0xf8,0xc1,0xff,0xe0,0xff,0x03,0xf0,0xff,0x83,0xff,0xe1,0x07,0x1e,
+ 0xfe,0x3f,0x00,0xf0,0x00,0x00,0xf8,0xff,0x0f,0xf8,0xc0,0xff,0xe0,0xff,0x03,
+ 0xe0,0xff,0x81,0xff,0xe1,0x07,0x1f,0xfe,0x3f,0x00,0xf0,0x00,0x00,0xf8,0xff,
+ 0x0f,0xf8,0xc0,0xff,0xe0,0xff,0x03,0xc0,0xff,0x80,0xff,0xe1,0x03,0x1e,0xfe,
+ 0x3f,0x00,0xf0,0x00,0x00,0xf8,0xff,0x1f,0x70,0xc0,0x7f,0xf0,0xff,0x03,0x00,
+ 0x00,0x80,0xff,0xe1,0x01,0x1e,0xfe,0x3f,0x00,0xf0,0x00,0x00,0xf8,0xff,0x1f,
+ 0x20,0x00,0x07,0xf8,0xff,0x03,0x00,0x00,0xf8,0xff,0xc0,0x00,0x1e,0xfe,0x1f,
+ 0x00,0xf0,0x00,0x00,0xf8,0xff,0x0f,0x00,0x00,0x00,0xfe,0xff,0x03,0x00,0x00,
+ 0xfe,0x07,0x00,0x00,0x1e,0xfe,0x1f,0x00,0xf0,0x00,0x00,0xf8,0xff,0x0f,0x00,
+ 0x00,0x80,0xff,0xfc,0x03,0x00,0x00,0xfe,0x03,0x00,0x00,0x1e,0xfe,0x1f,0x00,
+ 0xf0,0x00,0x00,0xf8,0xbf,0x0f,0x00,0x00,0xe0,0xff,0xfc,0x03,0x00,0x00,0xfe,
+ 0x03,0x00,0x00,0x08,0xfe,0x1f,0x00,0xf0,0x00,0x00,0xf0,0xbf,0x0f,0x00,0x00,
+ 0xf8,0x7f,0xfc,0x03,0x00,0x00,0xfc,0x0f,0x00,0x00,0x00,0xfe,0x1f,0x00,0xf0,
+ 0x00,0x00,0xf0,0x3f,0x0f,0x00,0xfc,0xff,0x3f,0xf8,0x03,0x00,0x00,0xf8,0xff,
+ 0x00,0x00,0x00,0xfe,0x0f,0x00,0xf0,0x00,0x00,0xf0,0x3f,0x0e,0x00,0xfc,0xff,
+ 0x0f,0xf8,0x01,0x00,0x00,0xf0,0xff,0x01,0x00,0x00,0xfe,0x1f,0x00,0xf0,0x00,
+ 0x00,0xf0,0x3f,0x0f,0x00,0xfc,0xff,0x07,0xf8,0x01,0x00,0x00,0xc0,0xff,0x01,
+ 0x00,0x00,0xfe,0x0f,0x00,0xf0,0x00,0x00,0xf0,0x7f,0x06,0x00,0xfc,0xff,0x01,
+ 0xf8,0x01,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xfe,0x0f,0x00,0xf0,0x00,0x00,
+ 0xf0,0x7f,0x06,0x00,0xe0,0x3f,0x00,0xf8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xfe,0x0f,0x00,0xf0,0x00,0x00,0xf0,0x7f,0x06,0x00,0x00,0x07,0x00,0xf8,
+ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x07,0x00,0xf0,0x00,0x00,0xe0,
+ 0x7f,0x00,0x00,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xfe,0x07,0x00,0xf0,0x00,0x00,0xe0,0x7f,0x00,0x00,0x00,0x00,0x00,0xf8,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x07,0x00,0xf0,0x00,0x00,0xf0,0x7f,
+ 0x00,0x00,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x07,0x00,0xf0,0x00,0x00,0xe0,0x7f,0x00,0x00,0x00,0x00,0x00,0xf8,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x0f,0x00,0xf0,0x00,0x00,0xe0,0x7f,0x1c,
+ 0x00,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x0f,
+ 0x00,0xf0,0x00,0x00,0xe0,0x7f,0x3c,0x00,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x9e,0x0f,0x00,0xf0,0x00,0x00,0xe0,0xff,0x3c,0x00,
+ 0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9e,0x0f,0x00,
+ 0xf0,0x00,0x00,0xc0,0xfd,0x7c,0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x9e,0x0f,0x00,0xf0,0x00,0x00,0x80,0xfd,0x7c,0x00,0x00,
+ 0x00,0x00,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x07,0x00,0xf0,
+ 0x00,0x00,0x00,0xfc,0x7c,0x00,0x00,0x00,0x80,0x3f,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x9f,0x07,0x00,0xf0,0x00,0x00,0x00,0xfc,0xfc,0x00,0x00,0x00,
+ 0x80,0x3f,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x07,0x00,0xf0,0x00,
+ 0x00,0x80,0xff,0xfc,0x00,0x00,0x00,0xe0,0x3f,0x00,0x38,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xff,0x03,0x00,0xf0,0x00,0x00,0x80,0xff,0xf8,0x01,0x00,0x00,0xf0,
+ 0x3f,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03,0x00,0xf0,0x00,0x00,
+ 0x00,0xff,0xf8,0x03,0x00,0x00,0xf8,0x3f,0x00,0x20,0x00,0x1e,0x00,0x00,0x00,
+ 0x04,0xef,0x01,0x00,0xf0,0x00,0x00,0x00,0xff,0xf8,0x03,0x00,0x00,0xff,0x1f,
+ 0x00,0x20,0xc0,0x7f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+ 0x7c,0xf8,0x07,0x00,0x80,0xff,0x1f,0x00,0x00,0xe0,0xff,0x01,0x00,0x00,0x0f,
+ 0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0xf8,0x07,0x00,0xe0,0xff,0x1f,0x00,
+ 0x00,0xe0,0xff,0x03,0x00,0xc0,0x0f,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,
+ 0xf8,0x07,0x00,0xf0,0xff,0x1f,0x00,0x00,0xf0,0xff,0x07,0x00,0xc0,0x1f,0x00,
+ 0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0xf8,0x0f,0x00,0xf8,0xfe,0x1f,0x00,0x00,
+ 0xfc,0xf3,0x0f,0x00,0xf0,0x0f,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0xf8,
+ 0x0f,0x00,0x7c,0xfc,0x3f,0x00,0x80,0xff,0xe1,0x3f,0x00,0xf8,0x0f,0x00,0x00,
+ 0x00,0xf0,0x00,0x00,0x00,0x00,0xf8,0x1f,0x00,0x3e,0xfc,0xbf,0x00,0xe0,0xff,
+ 0xc0,0x3f,0x00,0xfe,0x0f,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0xf8,0x1f,
+ 0x00,0x1f,0xfc,0xff,0x03,0xf0,0x7f,0x80,0x7f,0x80,0xff,0x0f,0x00,0x00,0x00,
+ 0xf0,0x00,0x00,0x00,0x00,0xf8,0x1f,0x80,0x0f,0xfe,0xff,0x07,0xfe,0x3f,0x00,
+ 0x7f,0xf8,0xff,0x0f,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0xf8,0x7f,0xe0,
+ 0x07,0xff,0xff,0xff,0xff,0x1f,0x00,0xff,0xf9,0xff,0x0f,0x00,0x00,0x00,0xf0,
+ 0x00,0x00,0x00,0x00,0xf8,0xff,0xf0,0x83,0xff,0xff,0xff,0xff,0x03,0x00,0xfe,
+ 0xff,0xff,0x0f,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0x83,
+ 0xff,0xff,0xff,0xff,0x00,0x00,0xfe,0xff,0xff,0x0f,0x00,0x00,0x00,0xf0,0x00,
+ 0x00,0x00,0x00,0xfc,0xff,0xff,0x80,0xff,0xff,0xff,0x7f,0x00,0x00,0xfc,0xff,
+ 0xff,0x0f,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xe0,0xff,
+ 0xff,0xff,0x3f,0x00,0x00,0xf8,0xff,0xff,0x0f,0x00,0x00,0x00,0xf0,0x00,0x00,
+ 0x00,0x00,0xfc,0xff,0x7f,0xe0,0xff,0xff,0xff,0x1f,0x00,0x00,0xf8,0xff,0xff,
+ 0x0f,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0xfc,0xff,0x3f,0xf0,0xff,0xff,
+ 0xff,0x0f,0x00,0x00,0xf0,0xff,0xff,0x0f,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+ 0x00,0xfe,0xff,0x1f,0xfc,0xff,0xff,0xff,0x07,0x00,0x00,0xf8,0xff,0xff,0x0f,
+ 0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0xfc,0xff,0x07,0xff,0xff,0xff,0xff,
+ 0x03,0x00,0xf0,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,
+ 0xfc,0xff,0x83,0xff,0xff,0xff,0xff,0x01,0x00,0xff,0xff,0x1f,0xff,0x1f,0x00,
+ 0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0xfc,0xff,0x81,0xff,0xff,0xff,0xff,0x00,
+ 0xe0,0xff,0xff,0x07,0xf8,0x1f,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0xfc,
+ 0xff,0x01,0xff,0xff,0xff,0x3f,0x80,0xff,0xff,0xff,0x01,0xf8,0x3f,0x00,0x00,
+ 0x00,0xf0,0x00,0x00,0x00,0x00,0xfc,0xff,0x01,0xfe,0xff,0xff,0x1f,0xc0,0xff,
+ 0xff,0xff,0x00,0xf8,0x1f,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0xf8,0xff,
+ 0x01,0xf8,0xff,0xff,0x1f,0xf8,0xff,0xff,0x7f,0x00,0xf8,0x1f,0x00,0x00,0x00,
+ 0xf0,0x00,0x00,0x00,0x00,0xf8,0xff,0x01,0xf8,0x8f,0xfc,0xff,0xff,0xff,0xff,
+ 0x3f,0x00,0xfc,0x1f,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0xf8,0xff,0x01,
+ 0xf8,0x0f,0xe0,0xff,0xff,0x07,0xf8,0x0f,0x00,0xfc,0x1f,0x00,0x00,0x00,0xf0,
+ 0x00,0x00,0x00,0x00,0xf8,0xe7,0x03,0xf8,0x0f,0x00,0x04,0x00,0x00,0xf8,0x0f,
+ 0x00,0xfc,0x0f,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0xf0,0xef,0x03,0xfc,
+ 0x0f,0x00,0x00,0x00,0x00,0xfe,0x07,0x00,0xfc,0x0f,0x00,0x00,0x00,0xf0,0x00,
+ 0x00,0x00,0x00,0xf0,0xef,0x07,0xfc,0x1f,0x00,0x00,0x00,0x00,0xff,0x03,0x00,
+ 0xfc,0x0f,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0xf0,0xc7,0x07,0xf8,0x3f,
+ 0x00,0x00,0x00,0x00,0xff,0x01,0x00,0xfe,0x07,0x00,0x00,0x00,0xf0,0x00,0x00,
+ 0x00,0x00,0xe0,0xc7,0x07,0xf8,0xff,0x01,0x00,0x00,0x00,0xff,0x00,0x00,0xfe,
+ 0x07,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0xe0,0xc7,0x07,0xf0,0xff,0x0f,
+ 0x00,0x00,0x00,0xff,0x00,0x00,0xff,0x07,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+ 0x00,0xe0,0xc7,0x07,0xf0,0xff,0x1f,0x00,0x00,0x80,0xff,0x00,0x00,0xff,0x03,
+ 0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0xc0,0xcf,0x07,0xf0,0xff,0x3f,0x00,
+ 0x00,0xc0,0x7f,0x00,0x00,0xff,0x03,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,
+ 0xc0,0xdf,0x07,0xe0,0xff,0x3f,0x00,0x00,0xe0,0x07,0x00,0x80,0xff,0x01,0x00,
+ 0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x80,0x9f,0x0f,0xe0,0xff,0x7f,0x00,0x00,
+ 0xc6,0x00,0x00,0x80,0xff,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x80,
+ 0xbf,0x0f,0xe0,0xff,0x7f,0x00,0xfc,0x0f,0x00,0x00,0x80,0xff,0x00,0x00,0x00,
+ 0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0xff,0x0f,0xc0,0xff,0xff,0xff,0xff,0x0f,
+ 0x00,0x00,0xc0,0xff,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0xff,
+ 0x0f,0x80,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0xc0,0x7f,0x00,0x00,0x00,0x00,
+ 0xf0,0x00,0x00,0x00,0x00,0x00,0xfe,0x0f,0x80,0xff,0xff,0xff,0x7f,0x00,0x00,
+ 0x00,0xc0,0x7f,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0xfe,0x0f,
+ 0x80,0xff,0xff,0xf0,0x3f,0x00,0x00,0x00,0xe0,0x7f,0x00,0x00,0x00,0x00,0xf0,
+ 0x00,0x00,0x00,0x00,0x00,0xfc,0x1f,0xc0,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,
+ 0xe0,0x3f,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0xfc,0x1f,0xe0,
+ 0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0xe0,0x3f,0x00,0x00,0x00,0x00,0xf0,0x00,
+ 0x00,0x00,0x00,0x00,0xf8,0x3c,0xf0,0xff,0x7f,0x00,0x00,0x10,0x00,0x00,0xf0,
+ 0x1f,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0xf8,0x3c,0xf0,0xff,
+ 0xff,0x00,0xf0,0x7f,0x00,0x00,0xf8,0x1f,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,
+ 0x00,0x00,0x00,0xf0,0x18,0xfc,0xff,0xff,0x07,0xfe,0xff,0x00,0x00,0xf8,0x1f,
+ 0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0xe0,0x10,0xfe,0xff,0xff,
+ 0xff,0xff,0xff,0x01,0x00,0xf8,0x0f,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+ 0x00,0x00,0xe0,0x00,0xff,0xcf,0xff,0xff,0xff,0xff,0x01,0x00,0xfc,0x0f,0x00,
+ 0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x40,0xc0,0xff,0x87,0xff,0xff,
+ 0xff,0xff,0x01,0x00,0xfc,0x07,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xe0,0xff,0x83,0xff,0xff,0xff,0xff,0x00,0x00,0xfc,0x03,0x00,0x00,
+ 0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0x81,0xff,0xff,0xff,
+ 0x7f,0x00,0x00,0xfe,0x03,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xf0,0xff,0x81,0xff,0xff,0xff,0x1f,0x00,0x00,0xfe,0x01,0x00,0x00,0x00,
+ 0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xc1,0xff,0xcf,0xff,0x0f,
+ 0x00,0x00,0xff,0x01,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xfc,0xff,0xf0,0xff,0x03,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,
+ 0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xf0,0xff,0x00,0x00,0x00,0x00,
+ 0xc0,0xff,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x7f,0xf0,0x3f,0x00,0x00,0x00,0x00,0xc0,0xff,0x00,0x00,0x00,0x00,0x00,0xf0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x3f,0xf0,0x3f,0x00,0x00,0x00,0x00,0xc0,
+ 0x7f,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0xc0,0x00,0x00,0x00,0xff,0x3f,
+ 0xfc,0x1f,0x00,0x00,0x00,0x00,0xe0,0x3f,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,
+ 0x00,0xf0,0x03,0x03,0xc0,0xff,0x1f,0xfc,0x0f,0x00,0x00,0x00,0x00,0xf0,0x1f,
+ 0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0xfc,0x83,0x07,0xe0,0xff,0x3f,0xfc,
+ 0x07,0x00,0x00,0x00,0x00,0xf8,0x0f,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,
+ 0xfe,0x87,0x07,0xf0,0xff,0x3f,0xfe,0x07,0x00,0x00,0x00,0x00,0xfc,0x0f,0x00,
+ 0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0xfe,0xc3,0x0f,0xf8,0xff,0xff,0xff,0x07,
+ 0x00,0x00,0x00,0x00,0xfe,0x0f,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x80,0xff,
+ 0xc3,0x1f,0xfc,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0xff,0x03,0x00,0x00,
+ 0x00,0x00,0x00,0xf0,0x00,0x80,0xff,0xe3,0x1f,0xfe,0xff,0xff,0xff,0x07,0x00,
+ 0x00,0x00,0x00,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0xe0,0xff,0xf1,
+ 0x3f,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x80,0xff,0x01,0x00,0x00,0x00,
+ 0x00,0x00,0xf0,0x00,0xe0,0x1f,0xfc,0xff,0xff,0x3f,0xfc,0xff,0x03,0x00,0x00,
+ 0x00,0xe0,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0xe0,0x1f,0xfc,0xff,
+ 0xff,0x3f,0xfc,0xff,0x03,0x00,0x00,0x00,0xe0,0x7f,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xf0,0x00,0xe0,0x0f,0xfc,0xff,0xff,0x1f,0xfc,0xff,0x03,0x00,0x00,0x00,
+ 0xf0,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0xc0,0x01,0xfe,0xff,0xff,
+ 0x1f,0xf8,0xff,0x07,0x00,0x00,0x00,0xfc,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xf0,0x00,0x00,0x00,0xfe,0xff,0xff,0x0f,0xf8,0xff,0x0f,0x00,0x00,0x80,0xff,
+ 0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0xfe,0xff,0xff,0x07,
+ 0xf0,0xff,0xff,0x0f,0x08,0xfc,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,
+ 0x00,0x0f,0x1c,0xfc,0xff,0xff,0x07,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x80,0xff,0x1f,0xf8,0xff,0xff,0x03,0xc0,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,
+ 0xff,0x3f,0xf8,0xff,0xff,0x01,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0xff,0x3f,0xf0,0xff,0xff,0x00,0x80,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0xff,
+ 0x7f,0xf0,0xff,0xff,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xf0,0x00,0xff,0xff,0xe0,0xff,0x7f,0x00,0x00,0xf0,0xff,
+ 0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0xff,0xff,
+ 0xe0,0xff,0x7f,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0xf0,0x00,0xfe,0xff,0xc0,0xff,0x3f,0x00,0x00,0x00,0x00,0xf8,
+ 0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0xfc,0xff,0xc1,
+ 0xff,0x1f,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xf0,0x00,0xfc,0xff,0xc1,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x0e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0xfc,0xff,0xc1,0xff,
+ 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xf0,0x00,0xfc,0xff,0xc1,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0xf8,0xff,0xc3,0xff,0x07,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xf0,0x00,0xf8,0xff,0xc3,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0xf0,0xff,0xc3,0xff,0x01,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,
+ 0x00,0xf0,0xff,0xc7,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0xe0,0xff,0xff,0xff,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,
+ 0xe0,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0xc0,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x80,
+ 0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0xfe,
+ 0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0xf0,0x00,0x00,0xfc,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0xf8,0xff,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xf0,0x00,0x00,0xe0,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0};
--- /dev/null
+#define image_width 64
+#define image_height 64
+static unsigned char image_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x50, 0x3c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x48, 0xee,
+ 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x81, 0x0f, 0x70, 0x00, 0x00,
+ 0x00, 0x00, 0xa8, 0x00, 0x0a, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00,
+ 0x38, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x38, 0x90, 0x01, 0x00,
+ 0x00, 0x00, 0x30, 0x07, 0x50, 0xdc, 0x01, 0x00, 0x00, 0x00, 0x90, 0x08,
+ 0xc0, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x90, 0xc8, 0x01, 0xd0, 0x00, 0x00,
+ 0x00, 0x00, 0x48, 0x24, 0x02, 0x7c, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x25,
+ 0x02, 0x34, 0x00, 0x00, 0x00, 0x00, 0x44, 0x25, 0x82, 0x0f, 0x00, 0x00,
+ 0x00, 0x00, 0xc4, 0x73, 0xc2, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x53,
+ 0xa2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x81, 0xf1, 0x82, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0xf3, 0xe1, 0x01, 0x00, 0x00, 0x00, 0x06, 0x81, 0xe0,
+ 0xa0, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x41, 0x00, 0x90, 0x00, 0x00, 0x00,
+ 0x00, 0x1c, 0x96, 0x08, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x24, 0x0f,
+ 0x70, 0x00, 0x00, 0x00, 0xc0, 0x18, 0xc8, 0x80, 0x58, 0x00, 0x00, 0x00,
+ 0xc0, 0x11, 0x90, 0x73, 0x34, 0x00, 0x00, 0x00, 0x80, 0x13, 0x60, 0x0f,
+ 0x1a, 0x00, 0x00, 0x00, 0x18, 0x1f, 0x80, 0x00, 0x07, 0x00, 0x00, 0x00,
+ 0x38, 0x3c, 0x00, 0xd1, 0x06, 0x00, 0x00, 0x00, 0xf0, 0xfe, 0x0e, 0x01,
+ 0x05, 0x00, 0x00, 0x00, 0xf0, 0xf3, 0x13, 0x01, 0x07, 0x00, 0x00, 0x00,
+ 0x00, 0xe0, 0xa9, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x80, 0x43, 0x80,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x00, 0x06, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0x2c, 0x80, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x80, 0xa4, 0x3e,
+ 0x0e, 0x00, 0x00, 0x00, 0x00, 0x80, 0xd2, 0xa1, 0x0e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x59, 0x61, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x01,
+ 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x00, 0x06, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x40, 0x80, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xe1,
+ 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xff, 0x05, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0xc0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x80,
+ 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x37, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x20, 0xc0, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xc1,
+ 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x7b, 0xdc, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x60, 0x08, 0xf6, 0xff, 0x00, 0x00, 0x00, 0x00, 0x30, 0x99,
+ 0x04, 0x57, 0x0f, 0x00, 0x00, 0x00, 0xd0, 0x28, 0x04, 0xfc, 0x17, 0x00,
+ 0x00, 0x00, 0xc8, 0x5e, 0x08, 0x00, 0xfc, 0x00, 0x00, 0xc0, 0xb7, 0x27,
+ 0x08, 0x00, 0xb0, 0x01, 0x00, 0x30, 0xf4, 0x19, 0x18, 0x00, 0xc0, 0x02,
+ 0x00, 0x08, 0x5c, 0x0a, 0x1c, 0x00, 0xb4, 0x03, 0x00, 0x04, 0x04, 0x03,
+ 0x0b, 0x80, 0xdb, 0x00, 0x00, 0x04, 0x06, 0xd1, 0x07, 0x80, 0x34, 0x00,
+ 0x00, 0xf8, 0x01, 0xe2, 0x00, 0xe0, 0x09, 0x00, 0x00, 0x00, 0x06, 0x1f,
+ 0x00, 0xf8, 0x07, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+
+/*
+ * BSD daemon
+ * The original BSD daemon is Copyright (c) 1988 Marshall Kirk McKusick.
+ * All Rights Reserved. Reproduced with permission.
+ */
--- /dev/null
+#define image_width 46
+#define image_height 34
+static unsigned char image_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0, 0xff, 0x79, 0xfe, 0xff, 0xc1,
+ 0xf8, 0xff, 0x39, 0xfe, 0xff, 0xc7, 0xfc, 0xff, 0x3d, 0xfc, 0xff, 0xcf,
+ 0xfc, 0xff, 0x3c, 0xe0, 0xff, 0xcf, 0xfe, 0x7f, 0x1c, 0x80, 0xff, 0xdf,
+ 0xfe, 0x3f, 0x1c, 0x00, 0xff, 0xdf, 0xfe, 0x1f, 0x1e, 0x00, 0xfe, 0xdf,
+ 0xfe, 0x0f, 0x1e, 0x00, 0xfc, 0xdf, 0xfe, 0x07, 0x0e, 0x00, 0xf8, 0xdf,
+ 0xfe, 0x07, 0x0f, 0x00, 0xf8, 0xdf, 0xfe, 0x03, 0x7f, 0xfc, 0xf1, 0xdf,
+ 0xfe, 0x03, 0xff, 0xfc, 0xf3, 0xdf, 0xfe, 0x03, 0xff, 0xfc, 0xf3, 0xdf,
+ 0xfe, 0x81, 0xf7, 0xde, 0xe3, 0xdf, 0xfe, 0x81, 0x77, 0xde, 0xe1, 0xdf,
+ 0xfe, 0x81, 0x73, 0xce, 0xe1, 0xdf, 0xfe, 0xc1, 0x7b, 0xee, 0xe1, 0xdf,
+ 0xfe, 0xc1, 0x7b, 0xef, 0xe1, 0xdf, 0xfe, 0xc1, 0x3b, 0xe7, 0xe0, 0xdf,
+ 0xfe, 0xc3, 0x39, 0xff, 0xf0, 0xdf, 0xfe, 0xe3, 0xbd, 0xff, 0xf0, 0xdf,
+ 0xfe, 0xe3, 0xbd, 0x7f, 0xf0, 0xdf, 0xfe, 0x07, 0x80, 0x03, 0xf8, 0xdf,
+ 0xfe, 0x07, 0x80, 0x03, 0xf8, 0xdf, 0xfe, 0x0f, 0xc0, 0x03, 0xfc, 0xdf,
+ 0xfe, 0x1f, 0xc0, 0x03, 0xfe, 0xdf, 0xfe, 0x3f, 0xc0, 0x01, 0xff, 0xdf,
+ 0xfe, 0x7f, 0xc0, 0x81, 0xff, 0xdf, 0xfc, 0xff, 0xe1, 0xe1, 0xff, 0xcf,
+ 0xfc, 0xff, 0xe7, 0xfc, 0xff, 0xcf, 0xf8, 0xff, 0xe7, 0xfc, 0xff, 0xc7,
+ 0xe0, 0xff, 0xf3, 0xfc, 0xff, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0};
--- /dev/null
+#define image_width 128
+#define image_height 151
+static unsigned char image_bits[] = {
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
+ 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x1f, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0xf0, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00,
+ 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00,
+ 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x1f, 0x00, 0x00, 0x00, 0x05, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x06, 0xf8, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00,
+ 0x00, 0x09, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x0f, 0x00, 0x00, 0x00, 0x02, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00,
+ 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x50, 0x00, 0x00, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x14, 0x00,
+ 0xe8, 0x03, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x03, 0x2e, 0x00, 0x5c, 0x07, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x5f, 0x00, 0xf7, 0x0b, 0x00, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0x7d, 0x00,
+ 0xfe, 0x0f, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x83, 0x7f, 0x80, 0xff, 0x0b, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0xf1, 0x80, 0x0f, 0x1f, 0x00, 0xfe,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0xe0, 0x80,
+ 0x87, 0x1e, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xc7, 0xc8, 0x81, 0x87, 0x1c, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xd0, 0x80, 0x03, 0x3c, 0x00, 0xfe,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xd0, 0x81,
+ 0x03, 0x3c, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xc7, 0xc0, 0x00, 0x03, 0x3c, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0xc0, 0x2a, 0x03, 0x3c, 0x00, 0xfe,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0x41, 0xff,
+ 0x01, 0x3c, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x87, 0xa1, 0x2b, 0x0f, 0x1e, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xeb, 0xfe, 0x9f, 0x0f, 0x00, 0xfe,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xf7, 0xfb,
+ 0x76, 0x0d, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x07, 0xba, 0xdf, 0xff, 0x07, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xea, 0xfd, 0xdb, 0x1e, 0x00, 0xfc,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x7d, 0x6f,
+ 0xff, 0x1b, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x87, 0xd6, 0xfd, 0x6d, 0x1b, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x47, 0xfb, 0xef, 0xf7, 0x15, 0x00, 0xfc,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x47, 0x6d, 0xff,
+ 0x3e, 0x1d, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x87, 0xde, 0xbb, 0xcf, 0x16, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xfa, 0xef, 0xb3, 0x0b, 0x04, 0xf8,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xd8, 0xbe,
+ 0xe8, 0x05, 0x08, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x87, 0xf2, 0x37, 0x55, 0x1d, 0x54, 0xf0, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x01, 0x40, 0x7d, 0x3f, 0x28, 0xe0,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xd7, 0xbf,
+ 0x8b, 0x3f, 0xa8, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x8f, 0x57, 0x65, 0xf5, 0x77, 0x50, 0xc0, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x4e, 0x5b, 0x75, 0x5f, 0x40, 0xc0,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0x3f, 0x2a,
+ 0xfd, 0x7f, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x83, 0x77, 0x89, 0xee, 0xff, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0xdf, 0xf5, 0xff, 0xff, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0x7f, 0xff,
+ 0xfe, 0xff, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xc0, 0xff, 0xfd, 0xff, 0xff, 0x01, 0x00, 0xfe, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x7f, 0xc0, 0xdf, 0xb7, 0xff, 0xff, 0x03, 0x00,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xe0, 0xff, 0xfe,
+ 0xff, 0xff, 0x03, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x3f, 0xf0, 0xff, 0xfb, 0xff, 0xff, 0x07, 0x00, 0xf8, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x1f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00,
+ 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf8, 0xff, 0xff,
+ 0xff, 0xff, 0x07, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x0f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0xe0, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x07, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00,
+ 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xfe, 0xff, 0xff,
+ 0xff, 0xff, 0x0f, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x03, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x01, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00,
+ 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x1f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
+ 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xfc, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x3f, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00,
+ 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x7f, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f,
+ 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xf0, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x1f, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
+ 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x80, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
+ 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0xe0, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x0f, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01,
+ 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xe0, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x03, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07,
+ 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x80, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x07, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07,
+ 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xf0, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x07, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03,
+ 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x03, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
+ 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xfe, 0xff,
+ 0xff, 0xff, 0xff, 0x01, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f,
+ 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xfc, 0xff,
+ 0xff, 0xff, 0x7f, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f,
+ 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x7f, 0x80,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xf8, 0xff,
+ 0xff, 0xff, 0x3f, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f,
+ 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x3f, 0x80, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x1f, 0x80,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xf0, 0xff,
+ 0xff, 0xff, 0x0f, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x0f, 0xc0, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x07, 0xc0,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xf0, 0xff,
+ 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x03, 0xc0,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xf0, 0xff,
+ 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x03, 0xc0,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xf0, 0xff,
+ 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xc3, 0xc0, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xe3, 0xc3,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xf0, 0xff,
+ 0xff, 0xff, 0x5f, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f,
+ 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xf7, 0x8f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x36, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xbb, 0x1d,
+ 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xfc, 0xff,
+ 0xff, 0xff, 0xf7, 0x37, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x36,
+ 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xda, 0x5e, 0xf8, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xbf, 0x7f, 0x00, 0x00, 0xff, 0xff, 0xff, 0x7f, 0xbd, 0xfb,
+ 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2d, 0x00, 0x80, 0xfb, 0xff,
+ 0xff, 0xff, 0xeb, 0xbf, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x3f,
+ 0x00, 0x80, 0xfe, 0xff, 0xff, 0x7f, 0xfd, 0xf5, 0x81, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xbf, 0x15, 0x00, 0xc0, 0xf7, 0xff, 0xff, 0x5f, 0xb7, 0xde,
+ 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x6f, 0x00, 0xe0, 0xfe, 0xff,
+ 0xff, 0xaf, 0xfd, 0xff, 0x07, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x3d,
+ 0x00, 0xb0, 0xf7, 0xff, 0xff, 0x6a, 0xd7, 0xb6, 0x05, 0xfc, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x57, 0x01, 0xd4, 0xfd, 0xff, 0x6f, 0xb5, 0xbf, 0xff,
+ 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xbb, 0x4a, 0x75, 0xff, 0xff,
+ 0xf3, 0xef, 0xf5, 0xb6, 0x06, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6,
+ 0xaa, 0xda, 0xf7, 0xff, 0x5f, 0x7d, 0xef, 0xff, 0x1f, 0xc0, 0xff, 0xff,
+ 0xff, 0xff, 0x7f, 0xbf, 0xaa, 0xf6, 0xfd, 0xff, 0xf5, 0xdf, 0x7f, 0xb7,
+ 0x2d, 0x00, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xd5, 0x55, 0xbb, 0xde, 0xff,
+ 0xdd, 0xf6, 0xd5, 0xfb, 0x3f, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xbf, 0xbe,
+ 0xfe, 0xee, 0xf7, 0xff, 0xf7, 0x7b, 0x7f, 0x6f, 0x5b, 0x00, 0xfe, 0xff,
+ 0xff, 0xff, 0x7f, 0xd5, 0xab, 0xfd, 0xbd, 0xff, 0x7b, 0xef, 0xfd, 0xdf,
+ 0xbf, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0xfd, 0xda, 0xb7, 0xef, 0xff,
+ 0xad, 0xbf, 0x57, 0xfb, 0xf6, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xbf, 0xaa,
+ 0xf7, 0xfe, 0xfd, 0xfe, 0xfb, 0xf5, 0xff, 0xb7, 0x7f, 0x01, 0xfe, 0xff,
+ 0xff, 0xff, 0x3f, 0xfd, 0x5e, 0xb7, 0xb7, 0xfb, 0x6d, 0x5f, 0xbd, 0xee,
+ 0xeb, 0x02, 0xfe, 0xff, 0xff, 0xff, 0x5f, 0xab, 0xfb, 0xfd, 0xde, 0xff,
+ 0xf7, 0xff, 0xef, 0xbd, 0xfe, 0x03, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xfd,
+ 0xef, 0xdf, 0xbd, 0xed, 0xdb, 0xea, 0xfb, 0xfb, 0xbb, 0xc5, 0xff, 0xff,
+ 0xff, 0xff, 0x83, 0xb6, 0x7d, 0xf7, 0xf7, 0xff, 0xb5, 0xbf, 0x5e, 0xaf,
+ 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xfb, 0xdf, 0xdf, 0xfe, 0xad,
+ 0xfb, 0xee, 0xf7, 0xff, 0xde, 0xea, 0xff, 0xff, 0xff, 0xff, 0x40, 0xad,
+ 0xfb, 0xfa, 0xd7, 0xfe, 0xd7, 0xbb, 0xde, 0xf6, 0xfb, 0xff, 0xff, 0xff,
+ 0xff, 0x7f, 0x00, 0xfd, 0xee, 0xbf, 0xfd, 0xb7, 0xfb, 0xff, 0xfb, 0xbf,
+ 0xbf, 0xd6, 0xff, 0xff, 0xff, 0x1f, 0xc0, 0xee, 0xbf, 0xf7, 0x77, 0xdf,
+ 0x55, 0xdb, 0x5f, 0xed, 0xd6, 0xaf, 0xff, 0xff, 0xff, 0x0f, 0x00, 0xbb,
+ 0xf6, 0x5e, 0xdf, 0xf6, 0xfb, 0xfe, 0xf6, 0xff, 0xff, 0xb5, 0xff, 0xff,
+ 0xff, 0x03, 0x40, 0xf5, 0xbf, 0xfb, 0xfb, 0xdf, 0xed, 0xab, 0xdf, 0x55,
+ 0x5b, 0x1f, 0xff, 0xff, 0xff, 0x00, 0x80, 0xde, 0xfa, 0x5e, 0x6f, 0xf5,
+ 0xb7, 0xff, 0xf6, 0xfe, 0xff, 0x6b, 0xfc, 0xff, 0x1f, 0x00, 0x40, 0xf7,
+ 0xd7, 0xf7, 0xfb, 0xff, 0xdb, 0xed, 0xff, 0xbb, 0xed, 0x36, 0xe0, 0x7f,
+ 0x00, 0x00, 0x80, 0x7a, 0x7f, 0xdd, 0xae, 0xfe, 0xed, 0xde, 0xb6, 0xff,
+ 0x77, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x40, 0xdd, 0xed, 0xfb, 0xdf, 0xff,
+ 0x57, 0xbb, 0xfb, 0xdb, 0xde, 0xab, 0x00, 0x00, 0x00, 0x00, 0x40, 0xf7,
+ 0xf7, 0xdf, 0xea, 0xff, 0xbb, 0xed, 0xae, 0xbe, 0x7f, 0x5d, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0xba, 0xbf, 0x76, 0xfb, 0xff, 0x4b, 0xb5, 0xf5, 0xf7,
+ 0xf6, 0x57, 0x00, 0x00, 0x00, 0x00, 0x40, 0x6d, 0xdb, 0xaf, 0xfc, 0xff,
+ 0xa7, 0xaa, 0x56, 0xdd, 0x5f, 0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf5,
+ 0xf7, 0x5a, 0xff, 0xff, 0x1f, 0xa9, 0x5a, 0xf5, 0xf6, 0x2b, 0x00, 0x00,
+ 0x00, 0x00, 0xa0, 0x5a, 0x5d, 0x95, 0xff, 0xff, 0xff, 0xa7, 0x52, 0xab,
+ 0x5d, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x80, 0x6a, 0xd7, 0xca, 0xff, 0xff,
+ 0xff, 0x1f, 0xa4, 0x54, 0xab, 0x09, 0x00, 0xfc, 0xff, 0xff, 0x00, 0xaa,
+ 0xba, 0xf2, 0xff, 0xff, 0xff, 0xff, 0x41, 0xaa, 0x5a, 0x25, 0xf8, 0xff,
+ 0xff, 0xff, 0x0f, 0xd5, 0x4a, 0xf9, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xa4,
+ 0x4a, 0x02, 0xfc, 0xff, 0xff, 0xff, 0x4f, 0xa4, 0x2a, 0xfc, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x11, 0x29, 0x91, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x52,
+ 0x95, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x44, 0xc4, 0xff, 0xff,
+ 0xff, 0xff, 0x1f, 0x90, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0x12, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x08, 0x91, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff};
--- /dev/null
+#define image_width 64
+#define image_height 64
+static unsigned char image_bits[] = {
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x02, 0x00,
+ 0x20, 0x00, 0x00, 0xc2, 0x12, 0x00, 0x00, 0x01, 0x00, 0x10, 0x00, 0x40,
+ 0x46, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x61, 0x04, 0x20, 0x80, 0x00,
+ 0x02, 0x08, 0x20, 0x20, 0x2c, 0x84, 0x10, 0x42, 0x08, 0x21, 0x84, 0x30,
+ 0x88, 0xf0, 0x7f, 0x08, 0x21, 0x84, 0x10, 0x12, 0x58, 0x22, 0x40, 0x21,
+ 0x84, 0x10, 0x42, 0x18, 0x10, 0x28, 0x40, 0x84, 0x10, 0x42, 0x08, 0x09,
+ 0x30, 0x61, 0xe0, 0x10, 0x42, 0x08, 0x21, 0x0c, 0x60, 0xc4, 0x30, 0x42,
+ 0x08, 0x21, 0x84, 0x04, 0xe0, 0xd2, 0x50, 0x29, 0xa5, 0x94, 0x52, 0x06,
+ 0x40, 0xa5, 0x90, 0x52, 0x4a, 0x29, 0xa5, 0x02, 0xc0, 0xca, 0x38, 0xa5,
+ 0x94, 0x52, 0x4a, 0x03, 0x80, 0xb5, 0xf8, 0xff, 0xfb, 0xef, 0xff, 0x3f,
+ 0x80, 0xdb, 0x28, 0x0c, 0x8d, 0x38, 0x0c, 0x21, 0x00, 0x77, 0x78, 0x1e,
+ 0xcb, 0x69, 0x9e, 0x31, 0x00, 0x6f, 0x78, 0x16, 0xce, 0x79, 0x9e, 0x19,
+ 0x00, 0x7a, 0x6c, 0x1e, 0xc6, 0x38, 0x9b, 0x0c, 0x00, 0x7e, 0x3c, 0x1e,
+ 0xe6, 0x3c, 0x1f, 0x04, 0x00, 0x7c, 0x3c, 0x8e, 0xe4, 0x3c, 0x1f, 0x06,
+ 0x00, 0x2c, 0x3c, 0x8f, 0xe4, 0x1c, 0x1f, 0x03, 0x00, 0x38, 0x3c, 0xcf,
+ 0x64, 0x9c, 0x0f, 0x01, 0x00, 0x38, 0x1e, 0xc7, 0x70, 0x9e, 0x07, 0x01,
+ 0x00, 0x30, 0x1e, 0xc7, 0x71, 0x9e, 0x27, 0x01, 0x00, 0x30, 0x9e, 0xe7,
+ 0x71, 0x8e, 0x33, 0x01, 0x00, 0x10, 0x9e, 0xe7, 0x79, 0xc0, 0x31, 0x03,
+ 0x00, 0x10, 0x0e, 0xc3, 0xf9, 0xe0, 0x10, 0x02, 0xff, 0x1f, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x1f, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0x00, 0x08, 0x01, 0x13,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xf1, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x0c, 0xfe, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x06, 0x7e, 0xf8,
+ 0xff, 0x7f, 0x00, 0x00, 0x00, 0x02, 0x00, 0xf8, 0xff, 0x3f, 0x00, 0x00,
+ 0x00, 0xfe, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff,
+ 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x1f, 0x00, 0x00,
+ 0x00, 0x00, 0xf0, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff,
+ 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x07, 0x00, 0x00,
+ 0x00, 0x00, 0xe0, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff,
+ 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff,
+ 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe,
+ 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xfc, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
+ 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
+ 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
+ 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define image_width 76
+#define image_height 76
+static unsigned char image_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,
+ 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x7f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x01, 0xfc, 0x07, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x78, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00,
+ 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x01, 0x1e,
+ 0x00, 0x00, 0x00, 0xe0, 0x01, 0x0c, 0x00, 0x00, 0x01, 0x38, 0x00, 0x00,
+ 0x00, 0x70, 0x00, 0x0c, 0x00, 0x80, 0x01, 0x70, 0x00, 0x00, 0x00, 0x38,
+ 0x00, 0x0c, 0x00, 0x80, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x1e,
+ 0x00, 0x80, 0x03, 0xc0, 0x01, 0x00, 0x00, 0x0e, 0x00, 0x1e, 0x00, 0x80,
+ 0x03, 0x80, 0x03, 0x00, 0x00, 0x0e, 0x00, 0x1e, 0x00, 0xc0, 0x03, 0x00,
+ 0x03, 0x00, 0x00, 0x07, 0x00, 0x1e, 0x00, 0xc0, 0x07, 0x00, 0x07, 0x00,
+ 0x80, 0x03, 0x00, 0x3f, 0x00, 0xc0, 0x07, 0x00, 0x0e, 0x00, 0x80, 0x01,
+ 0x00, 0x3f, 0x00, 0xe0, 0x07, 0x00, 0x0c, 0x00, 0xc0, 0x01, 0x00, 0x3f,
+ 0x00, 0xe0, 0x0f, 0x00, 0x18, 0x00, 0xc0, 0x00, 0x80, 0x7f, 0x00, 0xe0,
+ 0x0f, 0x00, 0x38, 0x00, 0xe0, 0x00, 0x80, 0x7f, 0x00, 0xf0, 0x0f, 0x00,
+ 0x30, 0x00, 0x60, 0x00, 0x80, 0x7f, 0x00, 0xf0, 0x1f, 0x00, 0x70, 0x00,
+ 0x70, 0x00, 0xc0, 0xff, 0x00, 0xf0, 0x1f, 0x00, 0x60, 0x00, 0x30, 0x00,
+ 0xc0, 0xff, 0x00, 0xf0, 0x1f, 0x00, 0x60, 0x00, 0x30, 0x00, 0xc0, 0xff,
+ 0x00, 0xf8, 0x3f, 0x00, 0xe0, 0x00, 0x38, 0x00, 0xc0, 0xff, 0x01, 0xf8,
+ 0x3f, 0x00, 0xc0, 0x00, 0x18, 0x00, 0xe0, 0xff, 0x01, 0xf8, 0x3f, 0x00,
+ 0xc0, 0x00, 0x18, 0x00, 0xe0, 0xff, 0x01, 0xfc, 0x7f, 0x00, 0xc0, 0x01,
+ 0x18, 0x00, 0xe0, 0xff, 0x03, 0xfc, 0x7f, 0x00, 0x80, 0x01, 0x1c, 0x00,
+ 0xf0, 0xff, 0x03, 0xfc, 0x7f, 0x00, 0x80, 0x01, 0x0c, 0x00, 0xf0, 0xff,
+ 0x03, 0xfc, 0x7f, 0x00, 0x80, 0x01, 0x0c, 0x00, 0xf0, 0xff, 0x03, 0xfe,
+ 0xff, 0x00, 0x80, 0x01, 0x0c, 0x00, 0xf8, 0xff, 0x07, 0xfe, 0xff, 0x00,
+ 0x80, 0x01, 0x0c, 0x00, 0xf8, 0xff, 0x07, 0xfe, 0xff, 0x00, 0x80, 0x03,
+ 0x0c, 0x00, 0xf8, 0xff, 0x07, 0xff, 0xff, 0x01, 0x00, 0x03, 0x0c, 0x00,
+ 0xf8, 0xff, 0x0f, 0xff, 0xff, 0x01, 0x00, 0x03, 0x0c, 0x00, 0xfc, 0xc1,
+ 0x0f, 0x1f, 0xf8, 0x01, 0x00, 0x03, 0x0c, 0x00, 0x7c, 0x00, 0x8f, 0x0f,
+ 0xe0, 0x03, 0x00, 0x03, 0x0c, 0x00, 0x3c, 0x00, 0x9e, 0x07, 0xc0, 0x03,
+ 0x00, 0x03, 0x0c, 0x00, 0x1e, 0x00, 0x9c, 0x03, 0x80, 0x03, 0x80, 0x01,
+ 0x0c, 0x00, 0x0e, 0x00, 0x9c, 0x01, 0x80, 0x07, 0x80, 0x01, 0x0c, 0x00,
+ 0x0e, 0x00, 0xf8, 0x01, 0x00, 0x07, 0x80, 0x01, 0x1c, 0x00, 0x06, 0x00,
+ 0xf0, 0x00, 0x00, 0x07, 0x80, 0x01, 0x18, 0x00, 0x07, 0x00, 0x70, 0x00,
+ 0x00, 0x06, 0x80, 0x01, 0x18, 0x00, 0x07, 0x00, 0x60, 0x00, 0x00, 0x0e,
+ 0xc0, 0x01, 0x18, 0x00, 0x03, 0x00, 0x60, 0x00, 0x00, 0x0c, 0xc0, 0x00,
+ 0x38, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x30, 0x80,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xc0, 0x00, 0x30, 0x80, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0xe0, 0x00, 0x70, 0xc0, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x60, 0x00, 0x60, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x38,
+ 0x70, 0x00, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00,
+ 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x38, 0x00, 0xc0, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0e, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x06, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x38, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x70, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x38,
+ 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00,
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00,
+ 0x1e, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00,
+ 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00,
+ 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x80, 0x1f, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x01, 0xfc, 0x07, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 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};
--- /dev/null
+#define image_width 64
+#define image_height 64
+static unsigned char image_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7f, 0xfc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7f,
+ 0xfc, 0x03, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x7f, 0xfc, 0x0f, 0x00, 0x00,
+ 0x00, 0x00, 0xf8, 0x7f, 0xfc, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f,
+ 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0xfc, 0xff, 0x01, 0x00,
+ 0x00, 0x80, 0xff, 0x7c, 0x7c, 0xfe, 0x03, 0x00, 0x00, 0xe0, 0x3f, 0x7c,
+ 0x7c, 0xf8, 0x0f, 0x00, 0x00, 0xf8, 0x1f, 0x7c, 0x7c, 0xf0, 0x3f, 0x00,
+ 0x00, 0xfc, 0x07, 0x7c, 0x7c, 0xc0, 0x7f, 0x00, 0x00, 0xff, 0x01, 0x7c,
+ 0x7c, 0x00, 0xff, 0x01, 0x00, 0x7f, 0x00, 0x7c, 0x7c, 0x00, 0xfc, 0x01,
+ 0x80, 0x3f, 0x00, 0x7c, 0x7c, 0x00, 0xf8, 0x03, 0x00, 0xff, 0x00, 0x7c,
+ 0x7c, 0x00, 0xfe, 0x01, 0x00, 0xff, 0x03, 0x7c, 0x7c, 0x80, 0xff, 0x01,
+ 0x00, 0xfc, 0x0f, 0x7c, 0x7c, 0xe0, 0x7f, 0x00, 0x40, 0xf0, 0x3f, 0x7c,
+ 0x7c, 0xf8, 0x1f, 0x04, 0xf0, 0xe1, 0xff, 0x7c, 0x7c, 0xfe, 0x0f, 0x1f,
+ 0xf8, 0x87, 0xff, 0x73, 0x9c, 0xff, 0xc3, 0x3f, 0xf8, 0x0f, 0xfe, 0x4f,
+ 0xe4, 0xff, 0xe0, 0x3f, 0xfc, 0x3f, 0xf8, 0x3f, 0xf8, 0x3f, 0xf8, 0x7f,
+ 0xfc, 0xff, 0xe0, 0xff, 0xff, 0x0f, 0xfe, 0x7f, 0xfc, 0xff, 0x83, 0xff,
+ 0xff, 0x83, 0xff, 0x7f, 0xfc, 0xff, 0x07, 0xff, 0xff, 0xc1, 0xff, 0x7f,
+ 0x7c, 0xfe, 0x1f, 0xfc, 0x7f, 0xf0, 0xff, 0x7c, 0x7c, 0xf8, 0x7f, 0xf2,
+ 0x9f, 0xfc, 0x3f, 0x7c, 0x7c, 0xe0, 0xff, 0xcd, 0x67, 0xfe, 0x0f, 0x7c,
+ 0x7c, 0xc0, 0xff, 0x33, 0x99, 0xff, 0x07, 0x7c, 0x7c, 0x00, 0xff, 0x0f,
+ 0xe0, 0xff, 0x01, 0x7c, 0x7c, 0x00, 0xfc, 0x3f, 0xf8, 0x7f, 0x00, 0x7c,
+ 0x7c, 0x00, 0xf2, 0x7f, 0xfc, 0x9f, 0x00, 0x7c, 0x7c, 0x80, 0xcf, 0x7f,
+ 0xfd, 0xe7, 0x03, 0x7c, 0x7c, 0xe0, 0xbf, 0x7f, 0xfd, 0xf9, 0x0f, 0x7c,
+ 0x7c, 0xf8, 0x7f, 0x7e, 0xfd, 0xfc, 0x3f, 0x7c, 0x7c, 0xfe, 0x0f, 0x7c,
+ 0x7d, 0xe0, 0xff, 0x7c, 0xfc, 0xff, 0x83, 0x7d, 0x7d, 0x83, 0xff, 0x7f,
+ 0xfc, 0xff, 0xe0, 0x7d, 0x7d, 0x0f, 0xfe, 0x7f, 0xfc, 0x3f, 0xf8, 0x7d,
+ 0x7c, 0x3f, 0xf8, 0x7f, 0xfc, 0x0f, 0xfe, 0x7d, 0x7c, 0xff, 0xe0, 0x7f,
+ 0xfc, 0x03, 0xff, 0x7d, 0x7c, 0xff, 0x81, 0x7f, 0xf8, 0xc0, 0xff, 0x7d,
+ 0x7c, 0xff, 0x07, 0x3e, 0x30, 0xf0, 0xff, 0x7c, 0x7c, 0xfe, 0x1f, 0x18,
+ 0x00, 0xfc, 0x3f, 0x7c, 0x7c, 0xf8, 0x7f, 0x00, 0x00, 0xff, 0x0f, 0x7c,
+ 0x7c, 0xe0, 0xff, 0x01, 0x80, 0xff, 0x03, 0x7c, 0x7c, 0x80, 0xff, 0x03,
+ 0x80, 0xff, 0x00, 0x7c, 0x7c, 0x00, 0xfe, 0x03, 0xc0, 0x3f, 0x00, 0x7c,
+ 0x7c, 0x00, 0xf8, 0x07, 0xc0, 0x7f, 0x00, 0x7c, 0x7c, 0x00, 0xfc, 0x07,
+ 0x80, 0xff, 0x01, 0x7c, 0x7c, 0x00, 0xff, 0x03, 0x80, 0xff, 0x07, 0x7c,
+ 0x7c, 0xc0, 0xff, 0x03, 0x00, 0xfe, 0x1f, 0x7c, 0x7c, 0xf0, 0xff, 0x00,
+ 0x00, 0xf8, 0x7f, 0x7c, 0x7c, 0xfc, 0x3f, 0x00, 0x00, 0xe0, 0xff, 0x7d,
+ 0x7c, 0xff, 0x0f, 0x00, 0x00, 0x80, 0xff, 0x7f, 0xfc, 0xff, 0x03, 0x00,
+ 0x00, 0x00, 0xfe, 0x7f, 0xfc, 0xff, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x7f,
+ 0xfc, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x7f, 0xfc, 0x0f, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0x7f, 0xfc, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e,
+ 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define image_width 64
+#define image_height 64
+static unsigned char image_bits[] = {
+ 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
+ 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xfc, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
+ 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7e, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x40, 0xfe,
+ 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xfc, 0xfd, 0x07, 0x00, 0x00,
+ 0x00, 0x00, 0xf0, 0xfd, 0xfb, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfb,
+ 0xf7, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf4, 0xf7, 0xef, 0x3f, 0x00, 0x00,
+ 0x00, 0x00, 0xee, 0xef, 0xdf, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xdf, 0xdf,
+ 0xbf, 0xff, 0x00, 0x00, 0x00, 0x80, 0xbf, 0xbf, 0x7f, 0xff, 0x00, 0x00,
+ 0x00, 0x80, 0x7f, 0x7f, 0xff, 0x7e, 0x03, 0x00, 0x00, 0x60, 0xff, 0xfe,
+ 0xfe, 0xbd, 0x07, 0x00, 0x00, 0xf0, 0xfe, 0xfd, 0xfd, 0xdb, 0x0f, 0x00,
+ 0x00, 0xf8, 0xfd, 0xfb, 0xfb, 0xe7, 0x1f, 0x00, 0x00, 0xfc, 0xfb, 0xf7,
+ 0xf7, 0xf7, 0x2f, 0x00, 0x00, 0xfe, 0xf5, 0xef, 0xef, 0xfb, 0x77, 0x00,
+ 0x00, 0xff, 0xee, 0xdf, 0xcf, 0xfd, 0xfb, 0x00, 0x80, 0x7f, 0xdf, 0xbf,
+ 0x9f, 0xfe, 0xfd, 0x01, 0xc0, 0xbf, 0xbf, 0xff, 0x1f, 0xff, 0xfe, 0x00,
+ 0xe0, 0xdf, 0x1f, 0xff, 0x9f, 0x7f, 0x7f, 0x00, 0xf0, 0xef, 0x0f, 0xfe,
+ 0xcf, 0xbf, 0x3f, 0x07, 0xf8, 0xf7, 0xe7, 0xfc, 0xef, 0xdf, 0xdf, 0x1f,
+ 0xfc, 0xfb, 0xfb, 0xfb, 0xf7, 0xef, 0xef, 0x3f, 0xfe, 0xfd, 0xfd, 0xe7,
+ 0xf9, 0xf7, 0xf7, 0x7f, 0xfe, 0xfe, 0xfe, 0x07, 0xf8, 0xfb, 0xfb, 0x7f,
+ 0x7f, 0x7f, 0xff, 0x0f, 0xfc, 0xfd, 0xfd, 0xff, 0xbf, 0xbf, 0xff, 0x0f,
+ 0xfc, 0xfe, 0xfe, 0xff, 0xff, 0xdf, 0xdf, 0x0f, 0xfc, 0x7f, 0xff, 0xfe,
+ 0xff, 0xef, 0xef, 0x0f, 0xfc, 0xbf, 0x7f, 0xff, 0xfe, 0xf7, 0xf7, 0x07,
+ 0xf8, 0xdf, 0xbf, 0x7f, 0xfe, 0xfb, 0xfb, 0xe7, 0xf9, 0xef, 0xdf, 0x7f,
+ 0xfc, 0xfd, 0xfd, 0xfb, 0xf7, 0xf7, 0xef, 0x3f, 0x70, 0xfe, 0xfe, 0xfd,
+ 0xcf, 0xf9, 0xf7, 0x1f, 0x00, 0x7f, 0xff, 0xfc, 0x1f, 0xfc, 0xfb, 0x0f,
+ 0x80, 0xbf, 0x7f, 0xfe, 0x3f, 0xfe, 0xfd, 0x07, 0xc0, 0xdf, 0x3f, 0xfe,
+ 0x7f, 0xff, 0xfe, 0x03, 0x80, 0xef, 0x5f, 0x7e, 0xff, 0x7e, 0xff, 0x01,
+ 0x00, 0xf7, 0xef, 0xfc, 0xfe, 0xbd, 0xff, 0x00, 0x00, 0xfa, 0xf7, 0xfd,
+ 0xfd, 0xdb, 0x7f, 0x00, 0x00, 0xfc, 0xfb, 0xfb, 0xfb, 0xe7, 0x3f, 0x00,
+ 0x00, 0xf8, 0xf9, 0xf7, 0xf7, 0xef, 0x1f, 0x00, 0x00, 0xf0, 0xee, 0xef,
+ 0xef, 0xdf, 0x0f, 0x00, 0x00, 0x60, 0xdf, 0xdf, 0xdf, 0xbf, 0x07, 0x00,
+ 0x00, 0x80, 0xbf, 0xbf, 0xbf, 0x7f, 0x03, 0x00, 0x00, 0x80, 0x7f, 0x7f,
+ 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0xfe, 0xfe, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0xfd, 0xfd, 0x7d, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfb,
+ 0xfb, 0x3b, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf7, 0xf7, 0x17, 0x00, 0x00,
+ 0x00, 0x00, 0xf0, 0xef, 0xef, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xdf,
+ 0xdf, 0x07, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xbf, 0x9f, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0x7f, 0x3f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
+ 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x3f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xfc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
+ 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00};
--- /dev/null
+#define image_width 64
+#define image_height 64
+static unsigned char image_bits[] = {
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfe, 0xff, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x7c,
+ 0xf8, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x3e, 0xf8, 0xff, 0x07, 0x00,
+ 0x00, 0x00, 0x00, 0x1f, 0xf0, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x80, 0x0f,
+ 0xe0, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x80, 0x0f, 0xc0, 0xff, 0x3f, 0x00,
+ 0x00, 0x00, 0xc0, 0x07, 0xc0, 0xff, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0x03,
+ 0x80, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0xff, 0xff, 0x00,
+ 0x00, 0x00, 0xf8, 0x00, 0x00, 0xfe, 0xff, 0x01, 0x00, 0x00, 0xf8, 0x00,
+ 0x00, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x7c, 0x00, 0x00, 0xfc, 0xff, 0x03,
+ 0x00, 0x00, 0x3e, 0x00, 0x00, 0xf8, 0xff, 0x07, 0x00, 0x00, 0x1f, 0x00,
+ 0x00, 0xf0, 0xff, 0x0f, 0x00, 0x80, 0x0f, 0x00, 0x00, 0xf0, 0xff, 0x0f,
+ 0x00, 0xc0, 0x07, 0x00, 0x00, 0xe0, 0xff, 0x1f, 0x00, 0xc0, 0x07, 0x00,
+ 0x00, 0xc0, 0xff, 0x3f, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x80, 0xff, 0x7f,
+ 0x00, 0xf0, 0x01, 0x00, 0x00, 0x80, 0xff, 0x7f, 0x00, 0xf8, 0x00, 0x00,
+ 0x00, 0x00, 0xff, 0xff, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff,
+ 0x01, 0x7c, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x03, 0x3e, 0x00, 0x00,
+ 0x00, 0x00, 0xfc, 0xff, 0x03, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff,
+ 0x87, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xcf, 0x07, 0x00, 0x00,
+ 0x00, 0x00, 0xe0, 0xff, 0xcf, 0x07, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff,
+ 0xe7, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xf3, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0xff, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
+ 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7e, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e,
+ 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0xff, 0x07, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0xcf, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe7,
+ 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe7, 0xff, 0x1f, 0x00, 0x00,
+ 0x00, 0x00, 0xe0, 0xc3, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xc1,
+ 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x80, 0xff, 0x7f, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00,
+ 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xfe, 0xff, 0x01, 0x00,
+ 0x00, 0x00, 0x1f, 0x00, 0xfc, 0xff, 0x03, 0x00, 0x00, 0x80, 0x0f, 0x00,
+ 0xf8, 0xff, 0x07, 0x00, 0x00, 0xc0, 0x07, 0x00, 0xf0, 0xff, 0x0f, 0x00,
+ 0x00, 0xe0, 0x03, 0x00, 0xf0, 0xff, 0x0f, 0x00, 0x00, 0xe0, 0x03, 0x00,
+ 0xe0, 0xff, 0x1f, 0x00, 0x00, 0xf0, 0x01, 0x00, 0xc0, 0xff, 0x3f, 0x00,
+ 0x00, 0xf8, 0x00, 0x00, 0x80, 0xff, 0x7f, 0x00, 0x00, 0x7c, 0x00, 0x00,
+ 0x80, 0xff, 0x7f, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00,
+ 0x00, 0x3e, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x01, 0x00, 0x1f, 0x00, 0x00,
+ 0x00, 0xfc, 0xff, 0x03, 0x80, 0x0f, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x03,
+ 0xc0, 0x07, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x07, 0xe0, 0x03, 0x00, 0x00,
+ 0x00, 0xf0, 0xff, 0x0f, 0xe0, 0x03, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x1f,
+ 0xf0, 0x01, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x1f, 0xf8, 0x00, 0x00, 0x00,
+ 0x00, 0xc0, 0xff, 0x3f, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x7f,
+ 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff};
--- /dev/null
+#define image_width 102
+#define image_height 56
+static unsigned char image_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, 0xfc, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x80, 0x0f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x3f, 0x00, 0x00, 0x00, 0xc0,
+ 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0x00,
+ 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x01,
+ 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff,
+ 0x03, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
+ 0xff, 0x07, 0x00, 0x00, 0x3e, 0x00, 0x00, 0xc0, 0xff, 0x00, 0x00, 0x00,
+ 0xfe, 0xff, 0x0f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0xf0, 0xff, 0x03, 0x00,
+ 0x00, 0xfc, 0xff, 0x1f, 0x00, 0x80, 0x0f, 0x00, 0x00, 0xfc, 0xff, 0x0f,
+ 0x00, 0x00, 0xf8, 0xff, 0x3f, 0x00, 0xc0, 0x07, 0x00, 0x00, 0xfc, 0xff,
+ 0x0f, 0x00, 0x00, 0xf0, 0xff, 0x7f, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xfe,
+ 0xff, 0x1f, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x00, 0xf0, 0x01, 0x00, 0x00,
+ 0xfe, 0xff, 0x1f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x01, 0xf8, 0x00, 0x00,
+ 0x00, 0xff, 0xe1, 0x3f, 0x00, 0x00, 0x80, 0xff, 0xff, 0x03, 0x7c, 0x00,
+ 0x00, 0x00, 0xff, 0xc0, 0x3f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x07, 0x3e,
+ 0x00, 0x00, 0x00, 0x7f, 0x80, 0x3f, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x0f,
+ 0x1f, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x00, 0x00, 0xfc, 0xff,
+ 0x8f, 0x0f, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x00, 0x00, 0xf8,
+ 0xff, 0xc7, 0x07, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x00, 0x00,
+ 0xf0, 0xff, 0xe3, 0x03, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x00,
+ 0x00, 0xe0, 0xff, 0xf1, 0x01, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+ 0x00, 0x00, 0xc0, 0xff, 0xf8, 0x01, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3f,
+ 0x00, 0x00, 0x00, 0x80, 0x7f, 0xfc, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3f, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfe, 0x07, 0x00, 0x00, 0xf0, 0xff,
+ 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x0f, 0x00, 0x00, 0xf0,
+ 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x80, 0x8f, 0xff, 0x1f, 0x00, 0x00,
+ 0xf0, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xc0, 0xc7, 0xff, 0x3f, 0x00,
+ 0x00, 0xf0, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xe0, 0xe3, 0xff, 0x7f,
+ 0x00, 0x00, 0xf0, 0x3f, 0x3f, 0xff, 0x03, 0x00, 0x00, 0xf0, 0xe1, 0xff,
+ 0xff, 0x00, 0x00, 0xf0, 0x3f, 0x3f, 0xff, 0x03, 0x00, 0x00, 0xf8, 0xc0,
+ 0xff, 0xff, 0x01, 0x00, 0xf0, 0x3c, 0x00, 0xcf, 0x03, 0x00, 0x00, 0x7c,
+ 0x80, 0xff, 0xff, 0x03, 0x00, 0xf0, 0x3c, 0x00, 0xcf, 0x03, 0x00, 0x00,
+ 0x3e, 0x00, 0xff, 0xff, 0x07, 0x00, 0xf0, 0x3c, 0x3f, 0xcf, 0x03, 0x00,
+ 0x00, 0x1f, 0x00, 0xfe, 0xff, 0x0f, 0x00, 0xf0, 0x3c, 0x3f, 0xcf, 0x03,
+ 0x00, 0x80, 0x0f, 0x00, 0xfc, 0xff, 0x1f, 0x00, 0xf0, 0x3c, 0x00, 0xcf,
+ 0x03, 0x00, 0xc0, 0x07, 0x00, 0xf8, 0xff, 0x3f, 0x00, 0xf0, 0x3c, 0x00,
+ 0xcf, 0x03, 0x00, 0xe0, 0x03, 0x00, 0xf0, 0xff, 0x7f, 0x00, 0xf0, 0x3c,
+ 0x3f, 0xcf, 0x03, 0x00, 0xf0, 0x01, 0x00, 0xe0, 0xff, 0xff, 0x00, 0xf0,
+ 0x3c, 0x3f, 0xcf, 0x03, 0x00, 0xf8, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x01,
+ 0xf0, 0x3c, 0x00, 0xcf, 0x03, 0x00, 0x7c, 0x00, 0x00, 0x80, 0xff, 0xff,
+ 0x03, 0xf0, 0x3c, 0x00, 0xcf, 0x03, 0x00, 0x3e, 0x00, 0x00, 0x00, 0xff,
+ 0xff, 0x07, 0xf0, 0x3c, 0x3f, 0xcf, 0x03, 0x00, 0x1f, 0x00, 0x00, 0x00,
+ 0xfe, 0xff, 0x0f, 0xf0, 0x3c, 0x3f, 0xcf, 0x03, 0x80, 0x0f, 0x00, 0x00,
+ 0x00, 0xfc, 0xff, 0x1f, 0xf0, 0xff, 0xff, 0xff, 0x03, 0xc0, 0x07, 0x00,
+ 0x00, 0x00, 0xf8, 0xff, 0x3f, 0xf0, 0xff, 0xff, 0xff, 0x03, 0xe0, 0x03,
+ 0x00, 0x00, 0x00, 0xf0, 0xff, 0x7f, 0xf0, 0xff, 0xff, 0xff, 0x03, 0xf0,
+ 0x01, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define light_gray_width 4
+#define light_gray_height 2
+static unsigned char light_gray_bits[] = {
+ 0x08, 0x02};
--- /dev/null
+#define image_width 61
+#define image_height 75
+static unsigned char image_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0x07,0x00,
+ 0x00,0x00,0x00,0xfe,0xff,0xff,0x1f,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xfb,
+ 0x00,0x00,0x00,0xc0,0xff,0xcf,0x9f,0xd1,0x03,0x00,0x00,0xf0,0x7f,0x8c,0x33,
+ 0x91,0x07,0x00,0x00,0xf8,0xa7,0x18,0x27,0xb1,0x06,0x00,0x00,0xfc,0x47,0x31,
+ 0x4e,0xa6,0x0e,0x00,0x00,0xfe,0x4f,0x21,0x4c,0xae,0x3d,0x00,0x00,0xff,0xdf,
+ 0x23,0x8d,0xbe,0x7d,0x00,0x80,0xff,0xff,0x67,0xbd,0xfe,0xff,0x01,0x80,0xff,
+ 0xff,0x7f,0xbf,0xff,0xff,0x03,0xc0,0xff,0xff,0xff,0xbf,0xff,0xf8,0x07,0xc0,
+ 0xff,0xff,0xff,0xbf,0x3f,0xf8,0x07,0xc0,0xff,0xff,0xff,0xff,0x07,0xf8,0x0f,
+ 0xc0,0xff,0xff,0xff,0x3f,0x00,0xf8,0x0f,0xe0,0x7f,0x00,0xf8,0x07,0x00,0xf0,
+ 0x0f,0xe0,0x3f,0x00,0x00,0x00,0x00,0xf0,0x07,0xe0,0x3f,0x00,0x00,0x00,0x00,
+ 0xf0,0x07,0xe0,0x3f,0x00,0x00,0x00,0x00,0xf4,0x07,0xe0,0x3f,0x00,0x00,0x00,
+ 0x00,0xe4,0x07,0xe0,0x3f,0x00,0x00,0x00,0x00,0xe4,0x07,0xe0,0x3f,0x00,0x00,
+ 0x00,0x00,0xe6,0x07,0xe0,0x3f,0x00,0x00,0x00,0x00,0xe7,0x07,0xe0,0x3f,0x00,
+ 0x00,0x00,0x00,0xe6,0x07,0xe0,0x3f,0x00,0x00,0x00,0x00,0xe6,0x07,0xe0,0x3f,
+ 0x00,0x00,0x00,0x00,0xe6,0x07,0xc0,0x3f,0x00,0x00,0x00,0x78,0xf6,0x07,0xa0,
+ 0xbf,0xff,0x00,0x00,0xff,0xf7,0x07,0x70,0x9f,0xff,0x01,0x80,0xff,0xef,0x07,
+ 0xf0,0x1c,0x80,0x03,0xe0,0x01,0xef,0x07,0xf0,0x1f,0xbe,0x07,0xf0,0x3f,0xee,
+ 0x07,0xe0,0x9d,0x83,0x1f,0xf8,0xe1,0xdc,0x07,0xe0,0xc1,0x7f,0x1f,0xfc,0xff,
+ 0xc8,0x07,0xe0,0xc1,0x69,0x1e,0x7e,0xca,0xc0,0x03,0xe0,0x81,0xb8,0x1f,0xc0,
+ 0x0e,0xc0,0x03,0xe0,0x01,0xc0,0x1b,0xc0,0xcf,0xc1,0x03,0xc0,0x03,0xf7,0x11,
+ 0x00,0x7f,0xc0,0x03,0xc0,0x03,0x7c,0x18,0x00,0x1c,0xc0,0x02,0xc0,0x02,0x30,
+ 0x08,0x00,0x00,0x40,0x03,0x40,0x03,0x00,0x08,0x00,0x00,0x40,0x02,0x40,0x13,
+ 0x00,0x0c,0x00,0x00,0x60,0x02,0x40,0x12,0x00,0x0e,0x00,0x00,0xc0,0x03,0x80,
+ 0x33,0x80,0x0e,0x00,0x00,0xa8,0x01,0x00,0x33,0x40,0x0f,0xa0,0x03,0x2c,0x00,
+ 0x00,0x74,0x30,0x0f,0x38,0x07,0x2e,0x00,0x00,0x74,0x98,0x1f,0x1e,0x1e,0x2f,
+ 0x00,0x00,0xfc,0x8f,0xff,0x0f,0xfc,0x2f,0x00,0x00,0xf8,0xe3,0xff,0x03,0xf8,
+ 0x2f,0x00,0x00,0xf8,0xfd,0xff,0x81,0xff,0x3f,0x00,0x00,0xb8,0xf9,0x1f,0xf8,
+ 0x0f,0x1e,0x00,0x00,0x30,0xf1,0xf0,0x0f,0x03,0x0e,0x00,0x00,0x30,0xf1,0x01,
+ 0x80,0x01,0x0f,0x00,0x00,0x20,0xf1,0xf7,0xff,0x00,0x07,0x00,0x00,0x60,0xe3,
+ 0x01,0x60,0x80,0x07,0x00,0x00,0x60,0xc3,0xef,0x3f,0x80,0x03,0x00,0x00,0x40,
+ 0xc2,0xff,0x0f,0xc0,0x03,0x00,0x00,0xc0,0xe6,0x1f,0x00,0xc0,0x01,0x00,0x00,
+ 0x80,0xf4,0xfe,0x3f,0xe0,0x00,0x00,0x00,0x80,0x79,0xfe,0x1f,0xe0,0x00,0x00,
+ 0xc0,0x01,0x3d,0x3e,0x00,0x70,0x00,0x00,0x30,0x06,0x3e,0x0f,0x00,0x38,0x00,
+ 0x00,0xc8,0x8c,0x1f,0x07,0x00,0x38,0x00,0x00,0xf4,0xcc,0x8f,0x07,0x00,0x1c,
+ 0x00,0x00,0x72,0xee,0xf7,0x07,0x00,0x0e,0x00,0x00,0x02,0xff,0xe3,0x07,0x00,
+ 0x07,0x00,0x00,0x32,0xfe,0xc1,0xff,0x8f,0x03,0x00,0x00,0x3e,0xfe,0x80,0xff,
+ 0xff,0x01,0x00,0x00,0x7e,0x7c,0x00,0x00,0x7e,0x00,0x00,0x00,0x7c,0x3c,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xfc,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x1c,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,
+ 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
--- /dev/null
+#define image_width 50
+#define image_height 50
+static unsigned char image_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xe3, 0x01, 0x0c, 0x00, 0x00, 0x00, 0x80, 0x1e, 0x06, 0x14, 0x00,
+ 0x00, 0x00, 0x80, 0x06, 0x1c, 0x3c, 0x00, 0x00, 0x00, 0x80, 0x03, 0x38,
+ 0x28, 0x00, 0x00, 0x00, 0x00, 0x01, 0x70, 0x2c, 0x00, 0x00, 0x00, 0x00,
+ 0x19, 0xe0, 0x27, 0x00, 0x00, 0x00, 0x00, 0x25, 0x03, 0x30, 0x00, 0x00,
+ 0x00, 0x80, 0xa4, 0x04, 0x18, 0x00, 0x00, 0x00, 0x80, 0xbe, 0x04, 0x07,
+ 0x00, 0x00, 0x00, 0x40, 0x9a, 0x45, 0x01, 0x00, 0x00, 0x00, 0x20, 0x5e,
+ 0x85, 0x00, 0x00, 0x00, 0x00, 0x20, 0xcc, 0x87, 0x00, 0x00, 0x00, 0x80,
+ 0x20, 0xc4, 0xc3, 0x00, 0x00, 0x00, 0x80, 0x23, 0x84, 0x81, 0x00, 0x00,
+ 0x00, 0x00, 0x43, 0x3d, 0x60, 0x00, 0x00, 0x00, 0x20, 0x86, 0x02, 0x70,
+ 0x00, 0x00, 0x00, 0xe0, 0x06, 0x8d, 0x39, 0x00, 0x00, 0x00, 0xc0, 0x06,
+ 0x7a, 0x1c, 0x00, 0x00, 0x00, 0x88, 0x07, 0x06, 0x0e, 0x00, 0x00, 0x00,
+ 0x18, 0xcf, 0xfa, 0x06, 0x00, 0x00, 0x00, 0xf0, 0x3f, 0x03, 0x06, 0x00,
+ 0x00, 0x00, 0xc0, 0x38, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x10, 0x03,
+ 0x0c, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
+ 0x50, 0x34, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x30, 0x7d, 0x0c, 0x00, 0x00,
+ 0x00, 0x00, 0xa0, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x04,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xc5, 0x05, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe8, 0x07, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0x10, 0x07, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x0e, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01,
+ 0xc8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x74, 0x3f, 0x00, 0x00, 0x00,
+ 0x00, 0x53, 0x88, 0xdf, 0x01, 0x00, 0x00, 0x80, 0x25, 0x09, 0xf0, 0x07,
+ 0x00, 0x00, 0x70, 0x9d, 0x18, 0x00, 0x0e, 0x00, 0x00, 0x4c, 0x4f, 0x18,
+ 0x00, 0x0c, 0x00, 0x00, 0x82, 0x3c, 0x0c, 0x80, 0x0e, 0x00, 0x00, 0x41,
+ 0x48, 0x03, 0xc0, 0x07, 0x00, 0x00, 0x3e, 0xc0, 0x01, 0x60, 0x01, 0x00,
+ 0x00, 0xc0, 0x3f, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00};
+
+/*
+ * BSD daemon
+ * The original BSD daemon is Copyright (c) 1988 Marshall Kirk McKusick.
+ * All Rights Reserved. Used by permission.
+ */
--- /dev/null
+#define image_width 58
+#define image_height 57
+static unsigned char image_bits[] = {
+ 0x00, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff,
+ 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff,
+ 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00,
+ 0x00, 0x80, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00,
+ 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xfe, 0x07, 0xff,
+ 0xff, 0xc1, 0x07, 0x00, 0x00, 0xff, 0x03, 0xfe, 0xff, 0x80, 0x1f, 0x00,
+ 0x80, 0xff, 0x01, 0xfc, 0x7f, 0x00, 0x1f, 0x00, 0x80, 0xff, 0x01, 0xfc,
+ 0x7f, 0x00, 0x3f, 0x00, 0xc0, 0xff, 0x80, 0xf9, 0x3f, 0x40, 0x3e, 0x00,
+ 0xe0, 0x7f, 0xc0, 0xfb, 0x1f, 0xf0, 0x7e, 0x00, 0xf0, 0x7f, 0xf0, 0xf3,
+ 0x1f, 0xf8, 0x7c, 0x00, 0xf0, 0x3f, 0xf8, 0xf7, 0x0f, 0xfc, 0x7d, 0x00,
+ 0xf8, 0x3f, 0xfc, 0xf3, 0x0f, 0xfe, 0x7c, 0x00, 0xf8, 0x3f, 0xfe, 0xfb,
+ 0x0f, 0xff, 0xfe, 0x00, 0xf8, 0x3f, 0xfe, 0xfb, 0x0f, 0xff, 0xfe, 0x00,
+ 0xfc, 0x3f, 0xfe, 0xf9, 0x0f, 0x7f, 0xfe, 0x00, 0xfc, 0x7f, 0xff, 0xf9,
+ 0x9f, 0x7f, 0xfe, 0x00, 0xfe, 0x7f, 0xfe, 0xfc, 0x9f, 0x3f, 0xff, 0x01,
+ 0xfe, 0xff, 0xfc, 0xfe, 0x3f, 0x9f, 0xff, 0x01, 0xfe, 0xff, 0x39, 0xff,
+ 0x7f, 0xc0, 0xff, 0x01, 0xff, 0xff, 0x87, 0xff, 0xff, 0xe1, 0xff, 0x01,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0x3f, 0xde,
+ 0xf3, 0xff, 0xff, 0x03, 0xff, 0xff, 0x07, 0xde, 0x83, 0xff, 0xff, 0x03,
+ 0xff, 0xff, 0x03, 0xde, 0x03, 0xf8, 0xff, 0x03, 0xff, 0xff, 0x01, 0xde,
+ 0x03, 0xe0, 0xff, 0x03, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x03,
+ 0xff, 0x3f, 0x80, 0xff, 0x1f, 0x80, 0xff, 0x03, 0xff, 0x1f, 0xf0, 0xff,
+ 0xff, 0x03, 0xff, 0x03, 0xff, 0x1f, 0xfc, 0xff, 0xff, 0x0f, 0xfe, 0x03,
+ 0xff, 0x0f, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0x03, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x03, 0xff, 0xfd, 0xf7, 0xef, 0xef, 0xef, 0xdf, 0x03,
+ 0x7f, 0xf8, 0xe1, 0xc7, 0xc7, 0xcf, 0x8f, 0x03, 0x3e, 0xf0, 0xc0, 0xc3,
+ 0x83, 0x87, 0x07, 0x03, 0x1c, 0x60, 0x80, 0x01, 0x00, 0x03, 0x03, 0x00};
--- /dev/null
+#define image_width 40
+#define image_height 44
+static unsigned char image_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, 0x80, 0x1f, 0x00, 0xf0, 0x03, 0x40, 0x30, 0x00, 0x18, 0x04, 0x00,
+ 0x20, 0xff, 0x09, 0x00, 0x00, 0xe0, 0xff, 0x0f, 0x00, 0x00, 0xf8, 0xff,
+ 0x3f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01,
+ 0x80, 0xff, 0xff, 0xff, 0x03, 0x80, 0xff, 0xff, 0xff, 0x03, 0xc0, 0x1f,
+ 0xff, 0xf1, 0x07, 0xc0, 0x0f, 0xfe, 0xe0, 0x07, 0xc0, 0x0f, 0xfe, 0xe0,
+ 0x07, 0xc0, 0x1f, 0xff, 0xf1, 0x07, 0xc0, 0xff, 0xff, 0xff, 0x07, 0x80,
+ 0xff, 0xff, 0xff, 0x03, 0x80, 0xff, 0xff, 0xff, 0x03, 0x00, 0xff, 0xff,
+ 0xff, 0x01, 0x00, 0xfe, 0xff, 0xff, 0x00, 0x00, 0xf8, 0xff, 0x3f, 0x00,
+ 0x00, 0xe0, 0xff, 0x0f, 0x00, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0x00,
+ 0xc7, 0x01, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00,
+ 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00,
+ 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x82,
+ 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00,
+ 0x00, 0xfe, 0x83, 0xff, 0x00, 0x00, 0xff, 0xc7, 0xff, 0x01, 0x00, 0xfe,
+ 0x83, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00};
+/*
+ * "Life. Don't talk to me about life" -Marvin the Paranoid Android
+ */
--- /dev/null
+#define image_width 46
+#define image_height 34
+static unsigned char image_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0, 0xff, 0x79, 0xfe, 0xff, 0xc1,
+ 0xf8, 0xff, 0x39, 0xfe, 0xff, 0xc7, 0xfc, 0xff, 0x3d, 0xfc, 0xff, 0xcf,
+ 0xfc, 0xff, 0x3c, 0xe0, 0xff, 0xcf, 0xfe, 0x7f, 0x1c, 0x80, 0xff, 0xdf,
+ 0xfe, 0x3f, 0x1c, 0x00, 0xff, 0xdf, 0xfe, 0x1f, 0x1e, 0x00, 0xfe, 0xdf,
+ 0xfe, 0x0f, 0x1e, 0x00, 0xfc, 0xdf, 0xfe, 0x07, 0x0e, 0x00, 0xf8, 0xdf,
+ 0xfe, 0x07, 0x0f, 0x00, 0xf8, 0xdf, 0xfe, 0x03, 0x7f, 0xfc, 0xf1, 0xdf,
+ 0xfe, 0x03, 0xff, 0xfc, 0xf3, 0xdf, 0xfe, 0x03, 0xff, 0xfc, 0xf3, 0xdf,
+ 0xfe, 0x81, 0xf7, 0xde, 0xe3, 0xdf, 0xfe, 0x81, 0x77, 0xde, 0xe1, 0xdf,
+ 0xfe, 0x81, 0x73, 0xce, 0xe1, 0xdf, 0xfe, 0xc1, 0x7b, 0xee, 0xe1, 0xdf,
+ 0xfe, 0xc1, 0x7b, 0xef, 0xe1, 0xdf, 0xfe, 0xc1, 0x3b, 0xe7, 0xe0, 0xdf,
+ 0xfe, 0xc3, 0x39, 0xff, 0xf0, 0xdf, 0xfe, 0xe3, 0xbd, 0xff, 0xf0, 0xdf,
+ 0xfe, 0xe3, 0xbd, 0x7f, 0xf0, 0xdf, 0xfe, 0x07, 0x80, 0x03, 0xf8, 0xdf,
+ 0xfe, 0x07, 0x80, 0x03, 0xf8, 0xdf, 0xfe, 0x0f, 0xc0, 0x03, 0xfc, 0xdf,
+ 0xfe, 0x1f, 0xc0, 0x03, 0xfe, 0xdf, 0xfe, 0x3f, 0xc0, 0x01, 0xff, 0xdf,
+ 0xfe, 0x7f, 0xc0, 0x81, 0xff, 0xdf, 0xfc, 0xff, 0xe1, 0xe1, 0xff, 0xcf,
+ 0xfc, 0xff, 0xe7, 0xfc, 0xff, 0xcf, 0xf8, 0xff, 0xe7, 0xfc, 0xff, 0xc7,
+ 0xe0, 0xff, 0xf3, 0xfc, 0xff, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0};
--- /dev/null
+#define image_width 64
+#define image_height 75
+static unsigned char image_bits[] = {
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07,
+ 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x80, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00,
+ 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xfc, 0xff, 0xff,
+ 0xff, 0xff, 0x3f, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00,
+ 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xf0, 0xff, 0xff,
+ 0xff, 0xff, 0x1f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00,
+ 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x04, 0x1c, 0xf0, 0xff, 0xff,
+ 0xff, 0xff, 0x1f, 0x07, 0x3f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x0f,
+ 0x7f, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x9f, 0x08, 0x63, 0xe0, 0xff, 0xff,
+ 0xff, 0xff, 0xbf, 0x1c, 0x61, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x08,
+ 0x61, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf9, 0x61, 0xe0, 0xff, 0xff,
+ 0xff, 0xff, 0x3f, 0x69, 0x37, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfe,
+ 0x3d, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xba, 0x6f, 0xe0, 0xff, 0xff,
+ 0xff, 0xff, 0x3f, 0xf7, 0x5b, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7d,
+ 0x6b, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0x1c, 0xc0, 0xff, 0xff,
+ 0xff, 0xff, 0x3f, 0x01, 0x77, 0x80, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xd7,
+ 0xf9, 0x80, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x27, 0xfe, 0x00, 0xff, 0xff,
+ 0xff, 0xff, 0x1f, 0xdf, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff,
+ 0xff, 0x01, 0xfe, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0x03, 0xfc, 0xff,
+ 0xff, 0xff, 0xc7, 0xff, 0xff, 0x03, 0xfc, 0xff, 0xff, 0xff, 0xe3, 0xff,
+ 0xff, 0x03, 0xf8, 0xff, 0xff, 0xff, 0xe1, 0xff, 0xff, 0x03, 0xf0, 0xff,
+ 0xff, 0xff, 0xe1, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0xff, 0xf0, 0xff,
+ 0xff, 0x07, 0xe0, 0xff, 0xff, 0x7f, 0xe0, 0xff, 0xff, 0x0f, 0xc0, 0xff,
+ 0xff, 0x7f, 0xf0, 0xff, 0xff, 0x0f, 0x80, 0xff, 0xff, 0x3f, 0xf8, 0xff,
+ 0xff, 0x1f, 0x80, 0xff, 0xff, 0x3f, 0xf8, 0xff, 0xff, 0x1f, 0x00, 0xff,
+ 0xff, 0x3f, 0xfc, 0xff, 0xff, 0x3f, 0x00, 0xff, 0xff, 0x1f, 0xfc, 0xff,
+ 0xff, 0x3f, 0x00, 0xff, 0xff, 0x1f, 0xfe, 0xff, 0xff, 0x3f, 0x00, 0xfe,
+ 0xff, 0x0f, 0xfe, 0xff, 0xff, 0x7f, 0x00, 0xfe, 0xff, 0x0f, 0xff, 0xff,
+ 0xff, 0x7f, 0x00, 0xfe, 0xff, 0x0f, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xfc,
+ 0xff, 0x07, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xfc, 0xff, 0x07, 0xff, 0xff,
+ 0xff, 0x7f, 0x00, 0xfc, 0xff, 0x83, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xfc,
+ 0xff, 0x81, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xfc, 0xff, 0x81, 0xff, 0xff,
+ 0xff, 0x7f, 0x00, 0xfc, 0xff, 0x81, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xfc,
+ 0xff, 0x89, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xfc, 0xff, 0xbf, 0xff, 0xff,
+ 0xff, 0x7f, 0x00, 0xfc, 0xff, 0x77, 0xfe, 0xff, 0xff, 0x7f, 0x00, 0xfe,
+ 0xff, 0xdd, 0xfc, 0xff, 0xff, 0xf7, 0x00, 0xff, 0xff, 0xfe, 0xf9, 0xff,
+ 0xff, 0x5f, 0x00, 0xff, 0x7f, 0x6b, 0xf1, 0xff, 0xff, 0x77, 0x80, 0xfd,
+ 0x5f, 0xff, 0xe3, 0xff, 0xff, 0x6f, 0xc1, 0xff, 0xed, 0xb5, 0x82, 0xff,
+ 0xff, 0xbf, 0xea, 0xfe, 0xbd, 0xff, 0x07, 0xff, 0xff, 0x6f, 0x5b, 0xff,
+ 0xf7, 0xde, 0x0b, 0xfe, 0xff, 0xe7, 0xf5, 0xfb, 0xbf, 0xb7, 0x0e, 0xfe,
+ 0xff, 0x57, 0xbf, 0xfd, 0x6b, 0xfb, 0x1b, 0xfe, 0xff, 0xef, 0xed, 0xee,
+ 0xfd, 0x5f, 0xbf, 0xff, 0xff, 0xb1, 0xfb, 0xbd, 0xb7, 0xfd, 0xab, 0xff,
+ 0xff, 0xd0, 0xef, 0xf7, 0xed, 0xaf, 0xfe, 0xff, 0x7f, 0x60, 0xbf, 0xff,
+ 0xbb, 0xfb, 0x5b, 0xff, 0x1f, 0xf0, 0xfb, 0xad, 0xfd, 0xbe, 0x7f, 0xfe,
+ 0x07, 0x50, 0x6f, 0xff, 0xd7, 0xf7, 0xaa, 0x00, 0x00, 0xf0, 0xdd, 0xf7,
+ 0x6b, 0xdd, 0x7f, 0x00, 0x00, 0xd0, 0xff, 0xfc, 0xa9, 0x76, 0xaf, 0x00,
+ 0x00, 0xa8, 0x56, 0xff, 0x5f, 0xa9, 0x35, 0x00, 0x00, 0x60, 0xab, 0xff,
+ 0xff, 0xa5, 0x16, 0xfc, 0xff, 0x93, 0xca, 0xff, 0xff, 0x9f, 0x48, 0xff,
+ 0xff, 0x47, 0xe5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
--- /dev/null
+#define image_width 64
+#define image_height 64
+static unsigned char image_bits[] = {
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x02, 0x00,
+ 0x20, 0x00, 0x00, 0xc2, 0x12, 0x00, 0x00, 0x01, 0x00, 0x10, 0x00, 0x40,
+ 0x46, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x61, 0x04, 0x20, 0x80, 0x00,
+ 0x02, 0x08, 0x20, 0x20, 0x2c, 0x84, 0x10, 0x42, 0x08, 0x21, 0x84, 0x30,
+ 0x88, 0xf0, 0x7f, 0x08, 0x21, 0x84, 0x10, 0x12, 0x58, 0x22, 0x40, 0x21,
+ 0x84, 0x10, 0x42, 0x18, 0x10, 0x28, 0x40, 0x84, 0x10, 0x42, 0x08, 0x09,
+ 0x30, 0x61, 0xe0, 0x10, 0x42, 0x08, 0x21, 0x0c, 0x60, 0xc4, 0x30, 0x42,
+ 0x08, 0x21, 0x84, 0x04, 0xe0, 0xd2, 0x50, 0x29, 0xa5, 0x94, 0x52, 0x06,
+ 0x40, 0xa5, 0x90, 0x52, 0x4a, 0x29, 0xa5, 0x02, 0xc0, 0xca, 0x38, 0xa5,
+ 0x94, 0x52, 0x4a, 0x03, 0x80, 0xb5, 0xf8, 0xff, 0xfb, 0xef, 0xff, 0x3f,
+ 0x80, 0xdb, 0x28, 0x0c, 0x8d, 0x38, 0x0c, 0x21, 0x00, 0x77, 0x78, 0x1e,
+ 0xcb, 0x69, 0x9e, 0x31, 0x00, 0x6f, 0x78, 0x16, 0xce, 0x79, 0x9e, 0x19,
+ 0x00, 0x7a, 0x6c, 0x1e, 0xc6, 0x38, 0x9b, 0x0c, 0x00, 0x7e, 0x3c, 0x1e,
+ 0xe6, 0x3c, 0x1f, 0x04, 0x00, 0x7c, 0x3c, 0x8e, 0xe4, 0x3c, 0x1f, 0x06,
+ 0x00, 0x2c, 0x3c, 0x8f, 0xe4, 0x1c, 0x1f, 0x03, 0x00, 0x38, 0x3c, 0xcf,
+ 0x64, 0x9c, 0x0f, 0x01, 0x00, 0x38, 0x1e, 0xc7, 0x70, 0x9e, 0x07, 0x01,
+ 0x00, 0x30, 0x1e, 0xc7, 0x71, 0x9e, 0x27, 0x01, 0x00, 0x30, 0x9e, 0xe7,
+ 0x71, 0x8e, 0x33, 0x01, 0x00, 0x10, 0x9e, 0xe7, 0x79, 0xc0, 0x31, 0x03,
+ 0x00, 0x10, 0x0e, 0xc3, 0xf9, 0xe0, 0x10, 0x02, 0xff, 0x1f, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x1f, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0x00, 0x08, 0x01, 0x13,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xf1, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x0c, 0xfe, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x06, 0x7e, 0xf8,
+ 0xff, 0x7f, 0x00, 0x00, 0x00, 0x02, 0x00, 0xf8, 0xff, 0x3f, 0x00, 0x00,
+ 0x00, 0xfe, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff,
+ 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x1f, 0x00, 0x00,
+ 0x00, 0x00, 0xf0, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff,
+ 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x07, 0x00, 0x00,
+ 0x00, 0x00, 0xe0, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff,
+ 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff,
+ 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe,
+ 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xfc, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
+ 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
+ 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
+ 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define image_width 76
+#define image_height 76
+static unsigned char image_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,
+ 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x7f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x01, 0xfc, 0x07, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x78, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00,
+ 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x01, 0x1e,
+ 0x00, 0x00, 0x00, 0xe0, 0x01, 0x0c, 0x00, 0x00, 0x01, 0x38, 0x00, 0x00,
+ 0x00, 0x70, 0x00, 0x0c, 0x00, 0x80, 0x01, 0x70, 0x00, 0x00, 0x00, 0x38,
+ 0x00, 0x0c, 0x00, 0x80, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x1e,
+ 0x00, 0x80, 0x03, 0xc0, 0x01, 0x00, 0x00, 0x0e, 0x00, 0x1e, 0x00, 0x80,
+ 0x03, 0x80, 0x03, 0x00, 0x00, 0x0e, 0x00, 0x1e, 0x00, 0xc0, 0x03, 0x00,
+ 0x03, 0x00, 0x00, 0x07, 0x00, 0x1e, 0x00, 0xc0, 0x07, 0x00, 0x07, 0x00,
+ 0x80, 0x03, 0x00, 0x3f, 0x00, 0xc0, 0x07, 0x00, 0x0e, 0x00, 0x80, 0x01,
+ 0x00, 0x3f, 0x00, 0xe0, 0x07, 0x00, 0x0c, 0x00, 0xc0, 0x01, 0x00, 0x3f,
+ 0x00, 0xe0, 0x0f, 0x00, 0x18, 0x00, 0xc0, 0x00, 0x80, 0x7f, 0x00, 0xe0,
+ 0x0f, 0x00, 0x38, 0x00, 0xe0, 0x00, 0x80, 0x7f, 0x00, 0xf0, 0x0f, 0x00,
+ 0x30, 0x00, 0x60, 0x00, 0x80, 0x7f, 0x00, 0xf0, 0x1f, 0x00, 0x70, 0x00,
+ 0x70, 0x00, 0xc0, 0xff, 0x00, 0xf0, 0x1f, 0x00, 0x60, 0x00, 0x30, 0x00,
+ 0xc0, 0xff, 0x00, 0xf0, 0x1f, 0x00, 0x60, 0x00, 0x30, 0x00, 0xc0, 0xff,
+ 0x00, 0xf8, 0x3f, 0x00, 0xe0, 0x00, 0x38, 0x00, 0xc0, 0xff, 0x01, 0xf8,
+ 0x3f, 0x00, 0xc0, 0x00, 0x18, 0x00, 0xe0, 0xff, 0x01, 0xf8, 0x3f, 0x00,
+ 0xc0, 0x00, 0x18, 0x00, 0xe0, 0xff, 0x01, 0xfc, 0x7f, 0x00, 0xc0, 0x01,
+ 0x18, 0x00, 0xe0, 0xff, 0x03, 0xfc, 0x7f, 0x00, 0x80, 0x01, 0x1c, 0x00,
+ 0xf0, 0xff, 0x03, 0xfc, 0x7f, 0x00, 0x80, 0x01, 0x0c, 0x00, 0xf0, 0xff,
+ 0x03, 0xfc, 0x7f, 0x00, 0x80, 0x01, 0x0c, 0x00, 0xf0, 0xff, 0x03, 0xfe,
+ 0xff, 0x00, 0x80, 0x01, 0x0c, 0x00, 0xf8, 0xff, 0x07, 0xfe, 0xff, 0x00,
+ 0x80, 0x01, 0x0c, 0x00, 0xf8, 0xff, 0x07, 0xfe, 0xff, 0x00, 0x80, 0x03,
+ 0x0c, 0x00, 0xf8, 0xff, 0x07, 0xff, 0xff, 0x01, 0x00, 0x03, 0x0c, 0x00,
+ 0xf8, 0xff, 0x0f, 0xff, 0xff, 0x01, 0x00, 0x03, 0x0c, 0x00, 0xfc, 0xc1,
+ 0x0f, 0x1f, 0xf8, 0x01, 0x00, 0x03, 0x0c, 0x00, 0x7c, 0x00, 0x8f, 0x0f,
+ 0xe0, 0x03, 0x00, 0x03, 0x0c, 0x00, 0x3c, 0x00, 0x9e, 0x07, 0xc0, 0x03,
+ 0x00, 0x03, 0x0c, 0x00, 0x1e, 0x00, 0x9c, 0x03, 0x80, 0x03, 0x80, 0x01,
+ 0x0c, 0x00, 0x0e, 0x00, 0x9c, 0x01, 0x80, 0x07, 0x80, 0x01, 0x0c, 0x00,
+ 0x0e, 0x00, 0xf8, 0x01, 0x00, 0x07, 0x80, 0x01, 0x1c, 0x00, 0x06, 0x00,
+ 0xf0, 0x00, 0x00, 0x07, 0x80, 0x01, 0x18, 0x00, 0x07, 0x00, 0x70, 0x00,
+ 0x00, 0x06, 0x80, 0x01, 0x18, 0x00, 0x07, 0x00, 0x60, 0x00, 0x00, 0x0e,
+ 0xc0, 0x01, 0x18, 0x00, 0x03, 0x00, 0x60, 0x00, 0x00, 0x0c, 0xc0, 0x00,
+ 0x38, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x30, 0x80,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xc0, 0x00, 0x30, 0x80, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0xe0, 0x00, 0x70, 0xc0, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x60, 0x00, 0x60, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x38,
+ 0x70, 0x00, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00,
+ 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x38, 0x00, 0xc0, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0e, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x06, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x38, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x70, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x38,
+ 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00,
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00,
+ 0x1e, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00,
+ 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00,
+ 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x80, 0x1f, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x01, 0xfc, 0x07, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 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};
--- /dev/null
+#define image_width 64
+#define image_height 64
+static unsigned char image_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7f, 0xfc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7f,
+ 0xfc, 0x03, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x7f, 0xfc, 0x0f, 0x00, 0x00,
+ 0x00, 0x00, 0xf8, 0x7f, 0xfc, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f,
+ 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0xfc, 0xff, 0x01, 0x00,
+ 0x00, 0x80, 0xff, 0x7c, 0x7c, 0xfe, 0x03, 0x00, 0x00, 0xe0, 0x3f, 0x7c,
+ 0x7c, 0xf8, 0x0f, 0x00, 0x00, 0xf8, 0x1f, 0x7c, 0x7c, 0xf0, 0x3f, 0x00,
+ 0x00, 0xfc, 0x07, 0x7c, 0x7c, 0xc0, 0x7f, 0x00, 0x00, 0xff, 0x01, 0x7c,
+ 0x7c, 0x00, 0xff, 0x01, 0x00, 0x7f, 0x00, 0x7c, 0x7c, 0x00, 0xfc, 0x01,
+ 0x80, 0x3f, 0x00, 0x7c, 0x7c, 0x00, 0xf8, 0x03, 0x00, 0xff, 0x00, 0x7c,
+ 0x7c, 0x00, 0xfe, 0x01, 0x00, 0xff, 0x03, 0x7c, 0x7c, 0x80, 0xff, 0x01,
+ 0x00, 0xfc, 0x0f, 0x7c, 0x7c, 0xe0, 0x7f, 0x00, 0x40, 0xf0, 0x3f, 0x7c,
+ 0x7c, 0xf8, 0x1f, 0x04, 0xf0, 0xe1, 0xff, 0x7c, 0x7c, 0xfe, 0x0f, 0x1f,
+ 0xf8, 0x87, 0xff, 0x73, 0x9c, 0xff, 0xc3, 0x3f, 0xf8, 0x0f, 0xfe, 0x4f,
+ 0xe4, 0xff, 0xe0, 0x3f, 0xfc, 0x3f, 0xf8, 0x3f, 0xf8, 0x3f, 0xf8, 0x7f,
+ 0xfc, 0xff, 0xe0, 0xff, 0xff, 0x0f, 0xfe, 0x7f, 0xfc, 0xff, 0x83, 0xff,
+ 0xff, 0x83, 0xff, 0x7f, 0xfc, 0xff, 0x07, 0xff, 0xff, 0xc1, 0xff, 0x7f,
+ 0x7c, 0xfe, 0x1f, 0xfc, 0x7f, 0xf0, 0xff, 0x7c, 0x7c, 0xf8, 0x7f, 0xf2,
+ 0x9f, 0xfc, 0x3f, 0x7c, 0x7c, 0xe0, 0xff, 0xcd, 0x67, 0xfe, 0x0f, 0x7c,
+ 0x7c, 0xc0, 0xff, 0x33, 0x99, 0xff, 0x07, 0x7c, 0x7c, 0x00, 0xff, 0x0f,
+ 0xe0, 0xff, 0x01, 0x7c, 0x7c, 0x00, 0xfc, 0x3f, 0xf8, 0x7f, 0x00, 0x7c,
+ 0x7c, 0x00, 0xf2, 0x7f, 0xfc, 0x9f, 0x00, 0x7c, 0x7c, 0x80, 0xcf, 0x7f,
+ 0xfd, 0xe7, 0x03, 0x7c, 0x7c, 0xe0, 0xbf, 0x7f, 0xfd, 0xf9, 0x0f, 0x7c,
+ 0x7c, 0xf8, 0x7f, 0x7e, 0xfd, 0xfc, 0x3f, 0x7c, 0x7c, 0xfe, 0x0f, 0x7c,
+ 0x7d, 0xe0, 0xff, 0x7c, 0xfc, 0xff, 0x83, 0x7d, 0x7d, 0x83, 0xff, 0x7f,
+ 0xfc, 0xff, 0xe0, 0x7d, 0x7d, 0x0f, 0xfe, 0x7f, 0xfc, 0x3f, 0xf8, 0x7d,
+ 0x7c, 0x3f, 0xf8, 0x7f, 0xfc, 0x0f, 0xfe, 0x7d, 0x7c, 0xff, 0xe0, 0x7f,
+ 0xfc, 0x03, 0xff, 0x7d, 0x7c, 0xff, 0x81, 0x7f, 0xf8, 0xc0, 0xff, 0x7d,
+ 0x7c, 0xff, 0x07, 0x3e, 0x30, 0xf0, 0xff, 0x7c, 0x7c, 0xfe, 0x1f, 0x18,
+ 0x00, 0xfc, 0x3f, 0x7c, 0x7c, 0xf8, 0x7f, 0x00, 0x00, 0xff, 0x0f, 0x7c,
+ 0x7c, 0xe0, 0xff, 0x01, 0x80, 0xff, 0x03, 0x7c, 0x7c, 0x80, 0xff, 0x03,
+ 0x80, 0xff, 0x00, 0x7c, 0x7c, 0x00, 0xfe, 0x03, 0xc0, 0x3f, 0x00, 0x7c,
+ 0x7c, 0x00, 0xf8, 0x07, 0xc0, 0x7f, 0x00, 0x7c, 0x7c, 0x00, 0xfc, 0x07,
+ 0x80, 0xff, 0x01, 0x7c, 0x7c, 0x00, 0xff, 0x03, 0x80, 0xff, 0x07, 0x7c,
+ 0x7c, 0xc0, 0xff, 0x03, 0x00, 0xfe, 0x1f, 0x7c, 0x7c, 0xf0, 0xff, 0x00,
+ 0x00, 0xf8, 0x7f, 0x7c, 0x7c, 0xfc, 0x3f, 0x00, 0x00, 0xe0, 0xff, 0x7d,
+ 0x7c, 0xff, 0x0f, 0x00, 0x00, 0x80, 0xff, 0x7f, 0xfc, 0xff, 0x03, 0x00,
+ 0x00, 0x00, 0xfe, 0x7f, 0xfc, 0xff, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x7f,
+ 0xfc, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x7f, 0xfc, 0x0f, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0x7f, 0xfc, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e,
+ 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define image_width 64
+#define image_height 64
+static unsigned char image_bits[] = {
+ 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
+ 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xfc, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
+ 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7e, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x40, 0xfe,
+ 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xfc, 0xfd, 0x07, 0x00, 0x00,
+ 0x00, 0x00, 0xf0, 0xfd, 0xfb, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfb,
+ 0xf7, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf4, 0xf7, 0xef, 0x3f, 0x00, 0x00,
+ 0x00, 0x00, 0xee, 0xef, 0xdf, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xdf, 0xdf,
+ 0xbf, 0xff, 0x00, 0x00, 0x00, 0x80, 0xbf, 0xbf, 0x7f, 0xff, 0x00, 0x00,
+ 0x00, 0x80, 0x7f, 0x7f, 0xff, 0x7e, 0x03, 0x00, 0x00, 0x60, 0xff, 0xfe,
+ 0xfe, 0xbd, 0x07, 0x00, 0x00, 0xf0, 0xfe, 0xfd, 0xfd, 0xdb, 0x0f, 0x00,
+ 0x00, 0xf8, 0xfd, 0xfb, 0xfb, 0xe7, 0x1f, 0x00, 0x00, 0xfc, 0xfb, 0xf7,
+ 0xf7, 0xf7, 0x2f, 0x00, 0x00, 0xfe, 0xf5, 0xef, 0xef, 0xfb, 0x77, 0x00,
+ 0x00, 0xff, 0xee, 0xdf, 0xcf, 0xfd, 0xfb, 0x00, 0x80, 0x7f, 0xdf, 0xbf,
+ 0x9f, 0xfe, 0xfd, 0x01, 0xc0, 0xbf, 0xbf, 0xff, 0x1f, 0xff, 0xfe, 0x00,
+ 0xe0, 0xdf, 0x1f, 0xff, 0x9f, 0x7f, 0x7f, 0x00, 0xf0, 0xef, 0x0f, 0xfe,
+ 0xcf, 0xbf, 0x3f, 0x07, 0xf8, 0xf7, 0xe7, 0xfc, 0xef, 0xdf, 0xdf, 0x1f,
+ 0xfc, 0xfb, 0xfb, 0xfb, 0xf7, 0xef, 0xef, 0x3f, 0xfe, 0xfd, 0xfd, 0xe7,
+ 0xf9, 0xf7, 0xf7, 0x7f, 0xfe, 0xfe, 0xfe, 0x07, 0xf8, 0xfb, 0xfb, 0x7f,
+ 0x7f, 0x7f, 0xff, 0x0f, 0xfc, 0xfd, 0xfd, 0xff, 0xbf, 0xbf, 0xff, 0x0f,
+ 0xfc, 0xfe, 0xfe, 0xff, 0xff, 0xdf, 0xdf, 0x0f, 0xfc, 0x7f, 0xff, 0xfe,
+ 0xff, 0xef, 0xef, 0x0f, 0xfc, 0xbf, 0x7f, 0xff, 0xfe, 0xf7, 0xf7, 0x07,
+ 0xf8, 0xdf, 0xbf, 0x7f, 0xfe, 0xfb, 0xfb, 0xe7, 0xf9, 0xef, 0xdf, 0x7f,
+ 0xfc, 0xfd, 0xfd, 0xfb, 0xf7, 0xf7, 0xef, 0x3f, 0x70, 0xfe, 0xfe, 0xfd,
+ 0xcf, 0xf9, 0xf7, 0x1f, 0x00, 0x7f, 0xff, 0xfc, 0x1f, 0xfc, 0xfb, 0x0f,
+ 0x80, 0xbf, 0x7f, 0xfe, 0x3f, 0xfe, 0xfd, 0x07, 0xc0, 0xdf, 0x3f, 0xfe,
+ 0x7f, 0xff, 0xfe, 0x03, 0x80, 0xef, 0x5f, 0x7e, 0xff, 0x7e, 0xff, 0x01,
+ 0x00, 0xf7, 0xef, 0xfc, 0xfe, 0xbd, 0xff, 0x00, 0x00, 0xfa, 0xf7, 0xfd,
+ 0xfd, 0xdb, 0x7f, 0x00, 0x00, 0xfc, 0xfb, 0xfb, 0xfb, 0xe7, 0x3f, 0x00,
+ 0x00, 0xf8, 0xf9, 0xf7, 0xf7, 0xef, 0x1f, 0x00, 0x00, 0xf0, 0xee, 0xef,
+ 0xef, 0xdf, 0x0f, 0x00, 0x00, 0x60, 0xdf, 0xdf, 0xdf, 0xbf, 0x07, 0x00,
+ 0x00, 0x80, 0xbf, 0xbf, 0xbf, 0x7f, 0x03, 0x00, 0x00, 0x80, 0x7f, 0x7f,
+ 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0xfe, 0xfe, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0xfd, 0xfd, 0x7d, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfb,
+ 0xfb, 0x3b, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf7, 0xf7, 0x17, 0x00, 0x00,
+ 0x00, 0x00, 0xf0, 0xef, 0xef, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xdf,
+ 0xdf, 0x07, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xbf, 0x9f, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0x7f, 0x3f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
+ 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x3f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xfc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
+ 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00};
--- /dev/null
+#define image_width 32
+#define image_height 32
+static unsigned char image_bits[] = {
+ 0xff, 0x00, 0x00, 0xc0, 0xfe, 0x01, 0x00, 0xc0, 0xfc, 0x03, 0x00, 0x60,
+ 0xf8, 0x07, 0x00, 0x30, 0xf8, 0x07, 0x00, 0x18, 0xf0, 0x0f, 0x00, 0x0c,
+ 0xe0, 0x1f, 0x00, 0x06, 0xc0, 0x3f, 0x00, 0x06, 0xc0, 0x3f, 0x00, 0x03,
+ 0x80, 0x7f, 0x80, 0x01, 0x00, 0xff, 0xc0, 0x00, 0x00, 0xfe, 0x61, 0x00,
+ 0x00, 0xfe, 0x31, 0x00, 0x00, 0xfc, 0x33, 0x00, 0x00, 0xf8, 0x1b, 0x00,
+ 0x00, 0xf0, 0x0d, 0x00, 0x00, 0xf0, 0x0e, 0x00, 0x00, 0x60, 0x1f, 0x00,
+ 0x00, 0xb0, 0x3f, 0x00, 0x00, 0x98, 0x7f, 0x00, 0x00, 0x98, 0x7f, 0x00,
+ 0x00, 0x0c, 0xff, 0x00, 0x00, 0x06, 0xfe, 0x01, 0x00, 0x03, 0xfc, 0x03,
+ 0x80, 0x01, 0xfc, 0x03, 0xc0, 0x00, 0xf8, 0x07, 0xc0, 0x00, 0xf0, 0x0f,
+ 0x60, 0x00, 0xe0, 0x1f, 0x30, 0x00, 0xe0, 0x1f, 0x18, 0x00, 0xc0, 0x3f,
+ 0x0c, 0x00, 0x80, 0x7f, 0x06, 0x00, 0x00, 0xff};
--- /dev/null
+#define image_width 51
+#define image_height 28
+static unsigned char image_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0x07, 0x00, 0x38, 0x00, 0x00, 0x00, 0xfc, 0x0f, 0x00,
+ 0x1c, 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xf0,
+ 0x3f, 0x00, 0x07, 0x80, 0x0f, 0x00, 0xe0, 0x7f, 0x80, 0x03, 0xe0, 0x3f,
+ 0x00, 0xc0, 0xff, 0xc0, 0x01, 0xe0, 0x3f, 0x00, 0x80, 0xff, 0xe1, 0x00,
+ 0xf0, 0x78, 0x00, 0x00, 0xff, 0x73, 0x00, 0x70, 0x70, 0x00, 0x00, 0xfe,
+ 0x3b, 0x00, 0x70, 0x70, 0x00, 0x00, 0xfc, 0x1d, 0x00, 0x70, 0x70, 0x00,
+ 0x00, 0xf8, 0x1e, 0x00, 0x00, 0x70, 0x00, 0x00, 0x70, 0x3f, 0x00, 0xfc,
+ 0xff, 0x01, 0x00, 0xb8, 0x7f, 0x00, 0xfc, 0xff, 0x01, 0x00, 0xdc, 0xff,
+ 0x00, 0x7c, 0xf7, 0x01, 0x00, 0x8e, 0xff, 0x01, 0x6c, 0xb0, 0x01, 0x00,
+ 0x07, 0xff, 0x03, 0x6c, 0xb7, 0x01, 0x80, 0x03, 0xfe, 0x07, 0x6c, 0xb0,
+ 0x01, 0xc0, 0x01, 0xfc, 0x0f, 0x6c, 0xb7, 0x01, 0xe0, 0x00, 0xf8, 0x1f,
+ 0x6c, 0xb0, 0x01, 0x70, 0x00, 0xf0, 0x3f, 0x6c, 0xb7, 0x01, 0x38, 0x00,
+ 0xe0, 0x7f, 0xfc, 0xff, 0x01, 0x1c, 0x00, 0xc0, 0xff, 0xfc, 0xff, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define nose_face_down_width 18
+#define nose_face_down_height 7
+static unsigned char nose_face_down_bits[] = {
+ 0xff,0xff,0x03,0xff,0xff,0x03,0xfe,0xff,0x01,0xfe,0xff,0x01,0xfc,0xff,0x00,
+ 0xf8,0x7f,0x00,0xe0,0x1f,0x00};
--- /dev/null
+#define nose_face_front_width 41
+#define nose_face_front_height 28
+static unsigned char nose_face_front_bits[] = {
+ 0x00,0x00,0xff,0x01,0x00,0x00,0x00,0xc0,0xff,0x07,0x00,0x00,0x00,0xe0,0xff,
+ 0x0f,0x00,0x00,0xe0,0xf7,0xff,0xdf,0x0f,0x00,0xe0,0xf7,0xff,0xdf,0x0f,0x00,
+ 0xf0,0xfb,0xff,0xbf,0x1f,0x00,0xf8,0xfb,0xff,0xbf,0x3f,0x00,0xf8,0xfd,0xff,
+ 0x7f,0x3f,0x00,0xfc,0xfd,0xff,0x7f,0x7f,0x00,0xfc,0xfe,0xff,0xff,0x7e,0x00,
+ 0xfe,0xfe,0xff,0xff,0xfe,0x00,0xfe,0xfe,0xff,0xff,0xfe,0x00,0xfe,0xfe,0xff,
+ 0xff,0xfe,0x00,0xff,0xfe,0xff,0xff,0xfe,0x01,0xff,0xfe,0xff,0xff,0xfe,0x01,
+ 0xff,0xfe,0xff,0xff,0xfe,0x01,0xff,0xfd,0xff,0x7f,0xff,0x01,0xff,0xfd,0xff,
+ 0x7f,0xff,0x01,0xff,0xfb,0xff,0xbf,0xff,0x01,0xff,0xfb,0xff,0xbf,0xff,0x01,
+ 0xff,0xf7,0xff,0xdf,0xff,0x01,0xfe,0xef,0xff,0xef,0xff,0x00,0xfe,0x9f,0xff,
+ 0xf3,0xff,0x00,0xfe,0x7f,0xfe,0xfc,0xff,0x00,0xfc,0xff,0x01,0xff,0x7f,0x00,
+ 0xfc,0xff,0xff,0xff,0x7f,0x00,0xf8,0xff,0xff,0xff,0x3f,0x00,0xf0,0xff,0xff,
+ 0xff,0x1f,0x00};
--- /dev/null
+#define nose_face_left_width 50
+#define nose_face_left_height 25
+static unsigned char nose_face_left_bits[] = {
+ 0x00,0x7e,0xff,0xff,0xff,0x1f,0x00,0xc0,0xff,0xfc,0xff,0xff,0x3f,0x00,0xe0,
+ 0xff,0xfb,0xff,0xff,0x3f,0x00,0xf0,0xff,0xf7,0xff,0xff,0x7f,0x00,0xf8,0xff,
+ 0xef,0xff,0xff,0x7f,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0x00,0xfe,0xff,0xff,
+ 0xff,0xff,0xff,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x03,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0x03,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x03,0xfe,0xff,0xff,0xff,0xff,0xff,0x03,0xfe,
+ 0xff,0xdf,0xff,0xff,0xff,0x03,0xfc,0xff,0xdf,0xff,0xff,0xff,0x01,0xf8,0xff,
+ 0xef,0xff,0xff,0xff,0x01,0xf0,0xff,0xf7,0xff,0xff,0xff,0x01,0xe0,0xff,0xfb,
+ 0xff,0xff,0xff,0x00,0xc0,0xff,0xfc,0xff,0xff,0xff,0x00,0x00,0x7f,0xff,0xff,
+ 0xff,0x7f,0x00,0x00,0x00,0xff,0xff,0xff,0x3f,0x00};
--- /dev/null
+#define nose_face_right_width 50
+#define nose_face_right_height 25
+static unsigned char nose_face_right_bits[] = {
+ 0xe0,0xff,0xff,0xff,0xfb,0x01,0x00,0xf0,0xff,0xff,0xff,0xfc,0x0f,0x00,0xf0,
+ 0xff,0xff,0x7f,0xff,0x1f,0x00,0xf8,0xff,0xff,0xbf,0xff,0x3f,0x00,0xf8,0xff,
+ 0xff,0xdf,0xff,0x7f,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0x00,0xfc,0xff,0xff,
+ 0xff,0xff,0xff,0x01,0xfe,0xff,0xff,0xff,0xff,0xff,0x01,0xfe,0xff,0xff,0xff,
+ 0xff,0xff,0x03,0xfe,0xff,0xff,0xff,0xff,0xff,0x03,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x03,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0x03,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0xff,
+ 0xff,0xff,0xef,0xff,0xff,0x01,0xfe,0xff,0xff,0xef,0xff,0xff,0x00,0xfe,0xff,
+ 0xff,0xdf,0xff,0x7f,0x00,0xfe,0xff,0xff,0xbf,0xff,0x3f,0x00,0xfc,0xff,0xff,
+ 0x7f,0xff,0x1f,0x00,0xfc,0xff,0xff,0xff,0xfc,0x0f,0x00,0xf8,0xff,0xff,0xff,
+ 0xfb,0x03,0x00,0xf0,0xff,0xff,0xff,0x03,0x00,0x00};
--- /dev/null
+#define nose_hat_width 43
+#define nose_hat_height 10
+static unsigned char nose_hat_bits[] = {
+ 0x00,0xf8,0xff,0xff,0x00,0x00,0x00,0xf8,0xff,0xff,0x00,0x00,0x00,0xf8,0xff,
+ 0xff,0x00,0x00,0x00,0xf8,0xff,0xff,0x00,0x00,0x00,0xf8,0xff,0xff,0x00,0x00,
+ 0x00,0xf8,0xff,0xff,0x00,0x00,0xff,0x0f,0x00,0x80,0xff,0x07,0xff,0xff,0xff,
+ 0xff,0xff,0x07,0xff,0xff,0xff,0xff,0xff,0x07,0xff,0xff,0xff,0xff,0xff,0x07
+ };
--- /dev/null
+#define nose_hat_down_width 49
+#define nose_hat_down_height 28
+static unsigned char nose_hat_down_bits[] = {
+ 0x00, 0x00, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x0f,
+ 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff,
+ 0xff, 0xff, 0x01, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0xe0,
+ 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x1f,
+ 0x00, 0xf8, 0xff, 0x1f, 0xf0, 0xff, 0x3f, 0x00, 0xfc, 0xff, 0xe7, 0xcf,
+ 0xff, 0x7f, 0x00, 0xfc, 0xff, 0xfb, 0xbf, 0xff, 0x7f, 0x00, 0xfe, 0xff,
+ 0xfd, 0x7f, 0xff, 0xff, 0x00, 0xfe, 0xff, 0xfd, 0x7f, 0xff, 0xff, 0x00,
+ 0xff, 0xff, 0xf9, 0x3f, 0xff, 0xff, 0x01, 0xff, 0xff, 0xe5, 0x4f, 0xff,
+ 0xff, 0x01, 0xff, 0xff, 0x1d, 0x70, 0xff, 0xff, 0x01, 0xff, 0xff, 0xfd,
+ 0x7f, 0xff, 0xff, 0x01, 0xfd, 0xff, 0xfb, 0xbf, 0xff, 0x7f, 0x01, 0xfb,
+ 0xff, 0xe7, 0xcf, 0xff, 0xbf, 0x01, 0xf6, 0xff, 0x1f, 0xf0, 0xff, 0xdf,
+ 0x00, 0xec, 0xff, 0xff, 0xff, 0xff, 0x6f, 0x00, 0xdc, 0xff, 0xff, 0xff,
+ 0xff, 0x77, 0x00, 0xb8, 0xff, 0xff, 0xff, 0xff, 0x3b, 0x00, 0x70, 0xfe,
+ 0xff, 0xff, 0xff, 0x1c, 0x00, 0xe0, 0xf1, 0xff, 0xff, 0x1f, 0x0f, 0x00,
+ 0x80, 0x0f, 0xff, 0xff, 0xe1, 0x03, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe,
+ 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x80, 0xff,
+ 0xff, 0x03, 0x00, 0x00};
--- /dev/null
+#define nose_shoe_front_width 61
+#define nose_shoe_front_height 20
+static unsigned char nose_shoe_front_bits[] = {
+ 0x00,0x00,0xf0,0x01,0xf0,0x01,0x00,0x00,0x00,0x00,0xf8,0x03,0xf8,0x03,0x00,
+ 0x00,0x00,0x00,0xfc,0x0f,0xfe,0x07,0x00,0x00,0x00,0x00,0xfc,0x1f,0xff,0x07,
+ 0x00,0x00,0xf0,0x0f,0xfe,0xbf,0xff,0x0f,0xfe,0x01,0xfc,0x1f,0xff,0xbf,0xff,
+ 0x1f,0xff,0x07,0xfc,0x3f,0xff,0xbf,0xff,0x9f,0xff,0x07,0xfe,0x3f,0xff,0xbf,
+ 0xff,0x9f,0xff,0x0f,0xfe,0xff,0xfc,0xbf,0xff,0xe7,0xff,0x0f,0xff,0xff,0xf9,
+ 0xbf,0xff,0xf3,0xff,0x1f,0xff,0xff,0xff,0x1f,0xff,0xff,0xff,0x1f,0xff,0xff,
+ 0xff,0x1f,0xff,0xff,0xff,0x1f,0xff,0xff,0xff,0x0f,0xfe,0xff,0xff,0x1f,0xf7,
+ 0xff,0xff,0x0f,0xfe,0xff,0xff,0x1d,0xf7,0xff,0xff,0x0f,0xfe,0xff,0xff,0x1d,
+ 0xcf,0xff,0xff,0x0f,0xfe,0xff,0x7f,0x1e,0x3f,0xff,0xff,0x1f,0xff,0xff,0x9f,
+ 0x1f,0xfe,0xff,0xff,0x1f,0xff,0xff,0xff,0x0f,0xfc,0xff,0xff,0x1f,0xff,0xff,
+ 0xff,0x07,0xf8,0xff,0xff,0x1f,0xff,0xff,0xff,0x03};
--- /dev/null
+#define nose_shoe_left_width 39
+#define nose_shoe_left_height 19
+static unsigned char nose_shoe_left_bits[] = {
+ 0x00,0x00,0x00,0xf8,0x0f,0x00,0xff,0x00,0xfc,0x1f,0xc0,0xff,0x03,0xff,0x1f,
+ 0xf0,0xff,0x0f,0xff,0x3f,0xf8,0xff,0x9f,0xff,0x3f,0xfc,0xfc,0xbf,0xff,0x3f,
+ 0x3e,0xff,0x3f,0xff,0x3f,0xbe,0xff,0x7f,0xff,0x3f,0xdf,0xff,0xff,0xfe,0x3f,
+ 0xdf,0xff,0xff,0xfe,0x3f,0xdf,0xff,0xff,0xff,0x3f,0xff,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0x7f,0xfe,0xff,0xff,0xff,0x7f,0xfe,0xff,0xff,0xff,0x7f,
+ 0xfc,0xff,0xff,0xff,0x3f,0xf8,0xff,0xff,0xff,0x3f,0xf0,0xff,0xff,0xff,0x1f,
+ 0xc0,0xff,0xff,0xff,0x0f};
--- /dev/null
+#define nose_shoe_right_width 39
+#define nose_shoe_right_height 19
+static unsigned char nose_shoe_right_bits[] = {
+ 0xf8,0x0f,0x00,0x00,0x00,0xfc,0x1f,0x80,0x7f,0x00,0xfc,0x7f,0xe0,0xff,0x01,
+ 0xfe,0x7f,0xf8,0xff,0x07,0xfe,0xff,0xfc,0xff,0x0f,0xfe,0xff,0xfe,0x9f,0x1f,
+ 0xfe,0x7f,0xfe,0x7f,0x3e,0xfe,0x7f,0xff,0xff,0x3e,0xfe,0xbf,0xff,0xff,0x7d,
+ 0xfe,0xbf,0xff,0xff,0x7d,0xfe,0xff,0xff,0xff,0x7d,0xff,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x3f,0xff,0xff,0xff,0xff,0x3f,
+ 0xfe,0xff,0xff,0xff,0x1f,0xfe,0xff,0xff,0xff,0x0f,0xfc,0xff,0xff,0xff,0x07,
+ 0xf8,0xff,0xff,0xff,0x01};
--- /dev/null
+#define nose_step_left_width 62
+#define nose_step_left_height 23
+static unsigned char nose_step_left_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,
+ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x07,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xf8,0x0f,0xc0,0x0f,0x00,0x00,0x00,0x00,0xfc,0x1f,0xf0,0x3f,0xe0,0x03,0x00,
+ 0x00,0xfe,0x3f,0xf8,0x7f,0xf0,0x07,0x80,0x0f,0xff,0x3f,0xfc,0xff,0xf0,0x0f,
+ 0xe0,0x3f,0xff,0x3f,0xfe,0xff,0xf9,0x1f,0xf0,0x7f,0xff,0x1f,0x9f,0xff,0xfb,
+ 0x3f,0xfc,0x7f,0xff,0x1f,0xef,0xff,0xfb,0x7f,0x7e,0xfe,0xfe,0x0f,0xf7,0xff,
+ 0xfb,0x7f,0xbf,0xff,0xf9,0x0f,0xf7,0xff,0xf7,0x7f,0xdf,0xff,0xff,0x07,0xf7,
+ 0xff,0xf7,0x3f,0xdf,0xff,0xff,0x03,0xff,0xff,0xef,0x3f,0xdf,0xff,0xff,0x03,
+ 0xff,0xff,0xff,0x1f,0xdf,0xff,0xff,0x01,0xfe,0xff,0xff,0x1f,0xff,0xff,0xff,
+ 0x00,0xfe,0xff,0xff,0x1f,0xff,0xff,0xff,0x00,0xfc,0xff,0xff,0x1f,0xfe,0xff,
+ 0x7f,0x00,0xf8,0xff,0xff,0x1f,0xfe,0xff,0x7f,0x00,0xf0,0xff,0xff,0x0f,0xfc,
+ 0xff,0x3f,0x00,0xc0,0xff,0xff,0x07,0xf8,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,
+ 0xe0,0xff,0x07,0x00};
--- /dev/null
+#define nose_step_right_width 62
+#define nose_step_right_height 23
+static unsigned char nose_step_right_bits[] = {
+ 0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xf8,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x07,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xfe,0x0f,0x00,0x00,0x00,0x00,0xfc,0x00,0xff,0x1f,0x00,0x00,0xf0,
+ 0x01,0xff,0x03,0xff,0x3f,0x7c,0x00,0xf8,0x83,0xff,0x07,0xff,0x3f,0xff,0x01,
+ 0xfc,0xc3,0xff,0x0f,0xfe,0xbf,0xff,0x03,0xfe,0xe7,0xff,0x1f,0xfe,0xbf,0xff,
+ 0x0f,0xff,0xf7,0x7f,0x3e,0xfc,0xdf,0x9f,0x9f,0xff,0xf7,0xff,0x3d,0xfc,0xe7,
+ 0x7f,0xbf,0xff,0xf7,0xff,0x3b,0xf8,0xff,0xff,0xbe,0xff,0xfb,0xff,0x3b,0xf0,
+ 0xff,0xff,0x3e,0xff,0xfb,0xff,0x3b,0xf0,0xff,0xff,0x3e,0xff,0xfd,0xff,0x3f,
+ 0xe0,0xff,0xff,0x3e,0xfe,0xff,0xff,0x3f,0xc0,0xff,0xff,0x3f,0xfe,0xff,0xff,
+ 0x1f,0xc0,0xff,0xff,0x3f,0xfe,0xff,0xff,0x1f,0x80,0xff,0xff,0x1f,0xfe,0xff,
+ 0xff,0x0f,0x80,0xff,0xff,0x1f,0xfe,0xff,0xff,0x07,0x00,0xff,0xff,0x0f,0xfc,
+ 0xff,0xff,0x03,0x00,0xfe,0xff,0x07,0xf8,0xff,0xff,0x00,0x00,0xf8,0xff,0x01,
+ 0x00,0x00,0x00,0x00};
--- /dev/null
+#define root_weave_width 4
+#define root_weave_height 4
+static unsigned char root_weave_bits[] = {
+ 0x07, 0x0d, 0x0b, 0x0e};
--- /dev/null
+#define image_width 29
+#define image_height 35
+static unsigned char image_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00,
+ 0x00, 0x07, 0x40, 0x00, 0x00, 0xfb, 0xc1, 0x00, 0x00, 0xfd, 0xc3, 0x00,
+ 0x00, 0xf6, 0xcf, 0x01, 0x00, 0x6a, 0xef, 0x01, 0x00, 0xb2, 0xfe, 0x00,
+ 0x00, 0x33, 0x7f, 0x00, 0x00, 0x3f, 0x1f, 0x00, 0x80, 0xf7, 0x0f, 0x00,
+ 0x98, 0xe7, 0x0f, 0x00, 0x90, 0xfd, 0x0f, 0x00, 0x36, 0xbb, 0x0f, 0x00,
+ 0x3c, 0xc7, 0x07, 0x00, 0x39, 0xfc, 0x03, 0x00, 0x3f, 0xfc, 0x00, 0x00,
+ 0xc0, 0x59, 0x01, 0x00, 0xc0, 0xfb, 0x01, 0x00, 0xc0, 0xf7, 0x01, 0x00,
+ 0x80, 0xcd, 0x01, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0xfc, 0x01, 0x00,
+ 0x00, 0xfa, 0x01, 0x00, 0x00, 0x86, 0x01, 0x00, 0x00, 0xbe, 0x07, 0x00,
+ 0x00, 0x7c, 0x1f, 0x00, 0x00, 0xfc, 0xff, 0x01, 0x00, 0xef, 0xc3, 0x0f,
+ 0xc0, 0xef, 0x03, 0x1c, 0xf0, 0xf7, 0x03, 0x18, 0xf0, 0xfd, 0x01, 0x0b,
+ 0xe0, 0xfe, 0x80, 0x07, 0x00, 0x38, 0x00, 0x00};
+
+/*
+ * BSD daemon
+ * The original BSD daemon is Copyright (c) 1988 Marshall Kirk McKusick.
+ * All rights reserved. Reproduced with permission.
+ */
--- /dev/null
+#define image_width 30
+#define image_height 33
+static unsigned char image_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0xc0, 0x03, 0x20, 0xe4, 0x27, 0x04,
+ 0x00, 0xfc, 0x3f, 0x00, 0x00, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x01,
+ 0xc0, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0x03, 0xe0, 0xe7, 0xe7, 0x07,
+ 0xe0, 0xc3, 0xc3, 0x07, 0xe0, 0xe7, 0xe7, 0x07, 0xe0, 0xff, 0xff, 0x07,
+ 0xc0, 0xff, 0xff, 0x03, 0x80, 0xff, 0xff, 0x01, 0x00, 0xff, 0xff, 0x00,
+ 0x00, 0xfc, 0x3f, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x70, 0x0e, 0x00,
+ 0x00, 0x60, 0x06, 0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 0x60, 0x06, 0x00,
+ 0x00, 0x20, 0x04, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x20, 0x04, 0x00,
+ 0x00, 0x3f, 0xfc, 0x00, 0x80, 0x7f, 0xfe, 0x01, 0x00, 0x3f, 0xfc, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+/*
+ * "Life. Don't talk to me about life" -Marvin the Paranoid Android
+ */
--- /dev/null
+#define image_width 17
+#define image_height 23
+static unsigned char image_bits[] = {
+ 0x00, 0x00, 0x00, 0xbe, 0xfe, 0x00, 0xbe, 0xfc, 0x00, 0xbf, 0xf8, 0x01,
+ 0x9f, 0xf0, 0x01, 0xcf, 0xe0, 0x01, 0x4f, 0xe0, 0x01, 0x4f, 0xe0, 0x01,
+ 0xcf, 0xec, 0x01, 0xe7, 0xce, 0x01, 0xe7, 0xca, 0x01, 0xa7, 0xca, 0x01,
+ 0xa7, 0xca, 0x01, 0xa7, 0xca, 0x01, 0xaf, 0xee, 0x01, 0x0f, 0xe6, 0x01,
+ 0x0f, 0xe2, 0x01, 0x0f, 0xe2, 0x01, 0x1f, 0xf3, 0x01, 0x3f, 0xf9, 0x01,
+ 0x7e, 0xfd, 0x00, 0x7e, 0xfd, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define image_width 32
+#define image_height 37
+static unsigned char image_bits[] = {
+ 0xff, 0x7f, 0xfe, 0xff, 0xff, 0x1f, 0xf0, 0xff, 0xff, 0x0f, 0xe0, 0xff,
+ 0xff, 0x07, 0xc0, 0xff, 0xff, 0x07, 0xc0, 0xff, 0xff, 0x07, 0xc0, 0xff,
+ 0xff, 0x37, 0xc7, 0xff, 0xff, 0x07, 0x89, 0xff, 0xff, 0x07, 0x89, 0xff,
+ 0xff, 0xd7, 0x87, 0xff, 0xff, 0x77, 0x8f, 0xff, 0xff, 0xe7, 0x85, 0xff,
+ 0xff, 0x57, 0x2d, 0xff, 0xff, 0xb7, 0x0e, 0xff, 0xff, 0xf3, 0x1f, 0xfe,
+ 0xff, 0xf9, 0x1f, 0xfe, 0xff, 0xf9, 0x3f, 0xfc, 0xff, 0xfc, 0x3f, 0xf8,
+ 0x7f, 0xfc, 0x7f, 0xf0, 0x7f, 0xfc, 0x7f, 0xf0, 0x7f, 0xfe, 0x7f, 0xf0,
+ 0x3f, 0xfe, 0xff, 0xe0, 0x3f, 0xff, 0xff, 0xe0, 0x1f, 0xff, 0xff, 0xe0,
+ 0x1f, 0xff, 0xff, 0xe0, 0x9f, 0xff, 0xff, 0xe0, 0x7f, 0xff, 0xff, 0xe0,
+ 0xef, 0xfc, 0xbf, 0xf0, 0xbf, 0xf9, 0xff, 0xf0, 0xf7, 0xf3, 0xbf, 0xdd,
+ 0xdd, 0xe2, 0xff, 0xfe, 0x7f, 0xf7, 0x9f, 0xdb, 0xdb, 0xfb, 0x8f, 0xff,
+ 0xfd, 0xee, 0xc3, 0xbb, 0xab, 0x07, 0x80, 0xee, 0xa7, 0x0a, 0x80, 0xf5,
+ 0x7f, 0xf2, 0x3f, 0xf9};
+
+/* Linux Penguin from logo.gif and logo.txt /usr/src/linux/Documentation
+This is the full-colour version of the currenly unofficial Linux logo
+("currently unofficial" just means that there has been no paperwork and
+that I haven't really announced it yet). It was created by Larry Ewing,
+and is freely usable as long as you acknowledge Larry as the original
+artist.
+
+Note that there are black-and-white versions of this available that
+scale down to smaller sizes and are better for letterheads or whatever
+you want to use it for: for the full range of logos take a look at
+Larry's web-page:
+
+ http://www.isc.tamu.edu/~lewing/linux/
+ */
--- /dev/null
+#define image_width 29
+#define image_height 29
+static unsigned char image_bits[] = {
+ 0xff, 0xff, 0xff, 0x1f, 0x03, 0x00, 0x00, 0x18, 0x12, 0x10, 0x10, 0x08,
+ 0xfe, 0x89, 0x88, 0x0c, 0x04, 0x11, 0x11, 0x05, 0x9c, 0xab, 0xaa, 0x06,
+ 0x98, 0xff, 0xff, 0x0f, 0x98, 0x68, 0xad, 0x0b, 0x90, 0x4d, 0x2d, 0x09,
+ 0x90, 0x4d, 0x6d, 0x0c, 0x90, 0x0d, 0x6d, 0x04, 0x90, 0x2d, 0x6d, 0x0c,
+ 0x90, 0x2d, 0x21, 0x09, 0x90, 0x68, 0xa1, 0x0b, 0x9f, 0xff, 0xff, 0x1f,
+ 0x9f, 0xef, 0xff, 0x1f, 0x98, 0xef, 0x3f, 0x00, 0x08, 0xe0, 0x1f, 0x00,
+ 0xf8, 0xff, 0x0f, 0x00, 0x00, 0xfe, 0x0f, 0x00, 0x00, 0xfc, 0x07, 0x00,
+ 0x00, 0xfc, 0x07, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0xf8, 0x03, 0x00,
+ 0x00, 0xf0, 0x01, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0xe0, 0x00, 0x00,
+ 0x00, 0xe0, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00};
--- /dev/null
+#define image_width 25
+#define image_height 25
+static unsigned char image_bits[] = {
+ 0x1f, 0x00, 0xf0, 0x01, 0x0f, 0xfe, 0xe0, 0x01, 0x87, 0x01, 0xc3, 0x01,
+ 0x63, 0x00, 0x8c, 0x01, 0x31, 0x01, 0x19, 0x01, 0x18, 0x01, 0x31, 0x00,
+ 0x08, 0x83, 0x23, 0x00, 0x84, 0x83, 0x43, 0x00, 0x84, 0x83, 0x43, 0x00,
+ 0x82, 0xc7, 0x83, 0x00, 0xc2, 0xc7, 0x87, 0x00, 0xc2, 0xc7, 0x87, 0x00,
+ 0xc2, 0xef, 0x8f, 0x00, 0xc2, 0xee, 0x8e, 0x00, 0x62, 0x28, 0x88, 0x00,
+ 0x22, 0x30, 0x88, 0x00, 0x24, 0x10, 0x58, 0x00, 0x14, 0x00, 0x50, 0x00,
+ 0x18, 0x00, 0x30, 0x00, 0x18, 0x00, 0x30, 0x00, 0x31, 0x00, 0x18, 0x01,
+ 0x63, 0x00, 0x8c, 0x01, 0x87, 0x01, 0xc3, 0x01, 0x0f, 0xfe, 0xe0, 0x01,
+ 0x1f, 0x00, 0xf0, 0x01};
--- /dev/null
+#define image_width 32
+#define image_height 32
+static unsigned char image_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x0e, 0x00, 0x00, 0xf0, 0x1e, 0x00,
+ 0x00, 0xfc, 0x7e, 0x00, 0x00, 0xff, 0xfe, 0x01, 0x80, 0xe7, 0xce, 0x03,
+ 0xe0, 0xe3, 0x8e, 0x0f, 0xf0, 0xe0, 0x0e, 0x1e, 0xf0, 0xe0, 0x0e, 0x1e,
+ 0xe0, 0xe3, 0x8e, 0x0f, 0x9c, 0xef, 0xee, 0x73, 0x3c, 0x1e, 0xf0, 0x78,
+ 0xfe, 0xf8, 0x3f, 0xfe, 0xfe, 0xf3, 0x9f, 0xff, 0xce, 0xcf, 0xe7, 0xe7,
+ 0x8e, 0x1f, 0xf0, 0xe3, 0x0e, 0x7e, 0xfc, 0xe0, 0x8e, 0xf9, 0x3e, 0xe3,
+ 0xce, 0xe3, 0x8e, 0xe7, 0xfe, 0xe1, 0x0e, 0xff, 0x7e, 0xec, 0x6e, 0xfc,
+ 0x1e, 0xef, 0xee, 0xf1, 0xc4, 0xef, 0xee, 0x47, 0xf0, 0xe3, 0x8e, 0x1f,
+ 0xf0, 0xe0, 0x0e, 0x1e, 0xf8, 0xe0, 0x0e, 0x3e, 0xf0, 0xe3, 0x8e, 0x1f,
+ 0xc0, 0xef, 0xee, 0x07, 0x00, 0xff, 0xfe, 0x01, 0x00, 0xfc, 0x7e, 0x00,
+ 0x00, 0xf0, 0x1e, 0x00, 0x00, 0x40, 0x04, 0x00};
--- /dev/null
+#define image_width 29
+#define image_height 29
+static unsigned char image_bits[] = {
+ 0x00, 0xe0, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0xb8, 0x03, 0x00,
+ 0x00, 0x74, 0x07, 0x00, 0x00, 0xee, 0x0e, 0x00, 0x00, 0xdd, 0x1d, 0x00,
+ 0x80, 0xbb, 0x3b, 0x00, 0x40, 0x77, 0x57, 0x00, 0xe0, 0xee, 0xee, 0x00,
+ 0x70, 0xdd, 0x75, 0x01, 0xb8, 0xbb, 0xb9, 0x03, 0xdc, 0xf1, 0xdd, 0x01,
+ 0xee, 0xee, 0xee, 0x0e, 0x77, 0x1f, 0x77, 0x1f, 0xbb, 0x1b, 0xbb, 0x1b,
+ 0xdf, 0x1d, 0xdf, 0x1d, 0xee, 0xee, 0xee, 0x0e, 0x70, 0xf7, 0x71, 0x07,
+ 0xb8, 0xb3, 0xbb, 0x03, 0xd0, 0x75, 0xd7, 0x01, 0xe0, 0xee, 0xee, 0x00,
+ 0x40, 0xdd, 0x5d, 0x00, 0x80, 0xbb, 0x3b, 0x00, 0x00, 0x77, 0x17, 0x00,
+ 0x00, 0xee, 0x0e, 0x00, 0x00, 0xdc, 0x05, 0x00, 0x00, 0xb8, 0x01, 0x00,
+ 0x00, 0xf0, 0x01, 0x00, 0x00, 0xe0, 0x00, 0x00};
--- /dev/null
+#define image_width 16
+#define image_height 16
+static unsigned char image_bits[] = {
+ 0x0f, 0x80, 0x1e, 0x80, 0x3c, 0x40, 0x78, 0x20, 0x78, 0x10, 0xf0, 0x08,
+ 0xe0, 0x09, 0xc0, 0x05, 0xc0, 0x02, 0x40, 0x07, 0x20, 0x0f, 0x20, 0x1e,
+ 0x10, 0x1e, 0x08, 0x3c, 0x04, 0x78, 0x02, 0xf0};
--- /dev/null
+#define shark0_width 20
+#define shark0_height 20
+static unsigned char shark0_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00,
+ 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x80, 0x1f, 0x00,
+ 0xc0, 0x3f, 0x00, 0x40, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00,
+ 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00,
+ 0x00, 0x06, 0x00, 0x00, 0x26, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x38, 0x00};
--- /dev/null
+#define shark1_width 20
+#define shark1_height 20
+static unsigned char shark1_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x18, 0x00,
+ 0xc0, 0xff, 0x01, 0xfc, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xc3, 0xff, 0x01,
+ 0x01, 0x18, 0x00, 0x07, 0x08, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define shark2_width 20
+#define shark2_height 20
+static unsigned char shark2_bits[] = {
+ 0xc0, 0x01, 0x00, 0x60, 0x03, 0x00, 0x40, 0x06, 0x00, 0x00, 0x06, 0x00,
+ 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00,
+ 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x2f, 0x00, 0xc0, 0x3f, 0x00,
+ 0x80, 0x1f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00,
+ 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define shark3_width 20
+#define shark3_height 20
+static unsigned char shark3_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x0e, 0x80, 0x01, 0x08,
+ 0xf8, 0x3f, 0x0c, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x03, 0xf8, 0x3f, 0x00,
+ 0x80, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define shark4_width 20
+#define shark4_height 20
+static unsigned char shark4_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00,
+ 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x80, 0x1f, 0x00,
+ 0xc0, 0x3f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00,
+ 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00,
+ 0x00, 0x06, 0x00, 0x40, 0x06, 0x00, 0x60, 0x03, 0x00, 0xc0, 0x01, 0x00};
--- /dev/null
+#define shark5_width 20
+#define shark5_height 20
+static unsigned char shark5_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x07, 0x08, 0x00, 0x01, 0x18, 0x00,
+ 0xc3, 0xff, 0x01, 0xfe, 0xff, 0x07, 0xfc, 0xff, 0x07, 0xc0, 0xff, 0x01,
+ 0x00, 0x18, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define shark6_width 20
+#define shark6_height 20
+static unsigned char shark6_bits[] = {
+ 0x00, 0x38, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x26, 0x00, 0x00, 0x06, 0x00,
+ 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00,
+ 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x40, 0x0f, 0x00, 0xc0, 0x3f, 0x00,
+ 0x80, 0x1f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00,
+ 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define shark7_width 20
+#define shark7_height 20
+static unsigned char shark7_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x80, 0x01, 0x00,
+ 0xf8, 0x3f, 0x00, 0xfe, 0xff, 0x03, 0xfe, 0xff, 0x07, 0xf8, 0x3f, 0x0c,
+ 0x80, 0x01, 0x08, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define sickle_width 21
+#define sickle_height 21
+static unsigned char sickle_bits[] = {
+ 0x00, 0x1e, 0x00, 0x00, 0x38, 0x00, 0x00, 0x60, 0x00, 0x00, 0xc0, 0x00,
+ 0xc0, 0x81, 0x01, 0xe0, 0x00, 0x03, 0xf0, 0x00, 0x03, 0xb8, 0x01, 0x07,
+ 0x10, 0x03, 0x07, 0x00, 0x06, 0x07, 0x00, 0x0c, 0x07, 0x00, 0x18, 0x07,
+ 0x00, 0x30, 0x07, 0x30, 0xe0, 0x03, 0x78, 0xc0, 0x03, 0xcc, 0xc0, 0x01,
+ 0x86, 0xe3, 0x03, 0x07, 0x7f, 0x06, 0x07, 0x3c, 0x0c, 0x03, 0x00, 0x08,
+ 0x00, 0x00, 0x00};
--- /dev/null
+#define stipple_width 16
+#define stipple_height 4
+static unsigned char stipple_bits[] = {
+ 0x55, 0x55, 0xee, 0xee, 0x55, 0x55, 0xba, 0xbb};
--- /dev/null
+#define image_width 8
+#define image_height 8
+static unsigned char image_bits[] = {
+ 0x3c, 0x7e, 0xdb, 0xff, 0xdb, 0xe7, 0x7e, 0x3c};
--- /dev/null
+#define image_width 11
+#define image_height 11
+static unsigned char image_bits[] = {
+ 0x0f, 0x04, 0x0f, 0x02, 0x1e, 0x01, 0x3c, 0x01, 0xb8, 0x00, 0x58, 0x00,
+ 0xe8, 0x00, 0xe4, 0x01, 0xc4, 0x03, 0xc2, 0x03, 0x81, 0x07 };
--- /dev/null
+#define terra00_width 64
+#define terra00_height 64
+#define terra00_x_hot 32
+#define terra00_y_hot 32
+static unsigned char terra00_bits[] = {
+0x00, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1f,
+0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x01, 0xf8, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0x20, 0x00, 0xdc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+0xdc, 0xff, 0x00, 0x00, 0x00, 0xc0, 0x00, 0xc0, 0xd8, 0xff, 0x03, 0x00,
+0x00, 0xe0, 0x00, 0xe0, 0xfc, 0xff, 0x07, 0x00, 0x00, 0x78, 0x00, 0x00,
+0xff, 0xff, 0x1f, 0x00, 0x00, 0x1c, 0x00, 0x80, 0xff, 0xff, 0x3f, 0x00,
+0x00, 0x0e, 0x00, 0x80, 0xf7, 0xff, 0x7f, 0x00, 0x00, 0x03, 0x00, 0xf0,
+0x21, 0xff, 0xff, 0x00, 0x80, 0x00, 0x00, 0xf0, 0x80, 0xfb, 0xff, 0x01,
+0x00, 0x00, 0x00, 0x60, 0x00, 0xf2, 0xff, 0x01, 0x40, 0x00, 0x00, 0xa0,
+0x1f, 0x80, 0xff, 0x03, 0x20, 0x00, 0x00, 0xf0, 0x3f, 0x00, 0xff, 0x07,
+0x00, 0x00, 0x00, 0xf0, 0xff, 0xfe, 0xff, 0x07, 0x00, 0x00, 0x00, 0xf8,
+0xff, 0xff, 0xdf, 0x0f, 0x08, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x3e, 0x1f,
+0x08, 0x00, 0x00, 0xff, 0xff, 0xff, 0x7d, 0x18, 0x00, 0x00, 0x00, 0xff,
+0xff, 0xff, 0xf9, 0x19, 0x04, 0x00, 0x80, 0xff, 0xff, 0xff, 0xfb, 0x31,
+0x08, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf7, 0x21, 0x00, 0x00, 0x00, 0xff,
+0xff, 0xff, 0xe7, 0x21, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xef, 0x00,
+0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x7f, 0x40, 0x04, 0x00, 0x80, 0xff,
+0xff, 0xff, 0x1f, 0x40, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00,
+0x1e, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x00, 0x1e, 0x00, 0x00, 0xfc,
+0xf8, 0xff, 0xff, 0x00, 0x7e, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x00,
+0x7e, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x7f, 0x00, 0x7f, 0x00, 0x00, 0x00,
+0xe0, 0xff, 0x3f, 0x00, 0xff, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x3f, 0x00,
+0xff, 0x03, 0x00, 0x00, 0xe0, 0xff, 0x1f, 0x00, 0xff, 0x0f, 0x00, 0x00,
+0xc0, 0xff, 0x0f, 0x00, 0xfe, 0x3f, 0x00, 0x00, 0x80, 0xff, 0x0f, 0x00,
+0xfe, 0x3f, 0x00, 0x00, 0x80, 0xff, 0x0f, 0x00, 0xfe, 0x1f, 0x00, 0x00,
+0x80, 0xff, 0x0f, 0x00, 0xfc, 0x1f, 0x00, 0x00, 0x00, 0xff, 0x0f, 0x00,
+0xfc, 0x0f, 0x00, 0x00, 0x80, 0xff, 0x8f, 0x00, 0xfc, 0x0f, 0x00, 0x00,
+0x80, 0xff, 0xcf, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0x80, 0xff, 0x67, 0x00,
+0xf0, 0x0f, 0x00, 0x00, 0x80, 0xff, 0x63, 0x00, 0xf0, 0x0f, 0x00, 0x00,
+0x80, 0xff, 0x21, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0xff, 0x21, 0x00,
+0xe0, 0x07, 0x00, 0x00, 0x00, 0xff, 0x11, 0x00, 0xe0, 0x03, 0x00, 0x00,
+0x00, 0x7f, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00,
+0xc0, 0x03, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00,
+0x00, 0x1e, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00};
--- /dev/null
+#define terra01_width 64
+#define terra01_height 64
+#define terra01_x_hot 32
+#define terra01_y_hot 32
+static unsigned char terra01_bits[] = {
+0x00, 0x00, 0x00, 0xf0, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3e,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x07, 0xe0, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0x86, 0x01, 0x60, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00,
+0xe0, 0xfe, 0x00, 0x00, 0x00, 0x40, 0x03, 0x00, 0xc6, 0xfc, 0x03, 0x00,
+0x00, 0xe0, 0x03, 0x00, 0xce, 0xff, 0x07, 0x00, 0x00, 0xf8, 0x02, 0x00,
+0xf0, 0xff, 0x1f, 0x00, 0x00, 0x7c, 0x00, 0x00, 0xf0, 0xff, 0x3f, 0x00,
+0x00, 0x3c, 0x00, 0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0x0f, 0x00, 0x00,
+0x3e, 0xf4, 0xff, 0x00, 0x80, 0x03, 0x00, 0x00, 0x1e, 0xa0, 0xff, 0x01,
+0x80, 0x01, 0x00, 0x00, 0x1c, 0x48, 0xff, 0x01, 0xc0, 0x00, 0x00, 0x00,
+0xf0, 0x03, 0xf0, 0x03, 0x60, 0x00, 0x00, 0x00, 0xfc, 0x07, 0xf0, 0x07,
+0x20, 0x00, 0x00, 0x00, 0xfe, 0x9f, 0xfd, 0x07, 0x30, 0x00, 0x00, 0x00,
+0xff, 0xff, 0xff, 0x0f, 0x38, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x19,
+0x38, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xdf, 0x13, 0x38, 0x00, 0x00, 0xc0,
+0xff, 0xff, 0xbf, 0x0f, 0x24, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x0f,
+0x40, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x7f, 0x0f, 0x02, 0x00, 0x00, 0xc0,
+0xff, 0xff, 0xff, 0x0e, 0x02, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x0e,
+0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x07, 0x20, 0x00, 0x00, 0xc0,
+0xff, 0xff, 0xff, 0x03, 0xf0, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x0f,
+0xfc, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0x0f, 0xf8, 0x01, 0x00, 0x00,
+0x7e, 0xfe, 0xff, 0x0f, 0xf8, 0x0f, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x07,
+0xf8, 0x0f, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x07, 0xfc, 0x0f, 0x00, 0x00,
+0x00, 0xf0, 0xff, 0x07, 0xfc, 0x1f, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x03,
+0xfc, 0x7f, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x01, 0xfc, 0xff, 0x03, 0x00,
+0x00, 0xe0, 0xff, 0x01, 0xfc, 0xff, 0x07, 0x00, 0x00, 0xe0, 0xff, 0x01,
+0xf8, 0xff, 0x07, 0x00, 0x00, 0xc0, 0xff, 0x01, 0xf8, 0xff, 0x07, 0x00,
+0x00, 0xc0, 0xff, 0x01, 0xf0, 0xff, 0x03, 0x00, 0x00, 0xc0, 0xff, 0x01,
+0xf0, 0xff, 0x03, 0x00, 0x00, 0xe0, 0xff, 0x01, 0xf0, 0xff, 0x03, 0x00,
+0x00, 0xe0, 0xff, 0x04, 0xe0, 0xff, 0x03, 0x00, 0x00, 0xe0, 0xff, 0x04,
+0xc0, 0xff, 0x03, 0x00, 0x00, 0xe0, 0x7f, 0x02, 0x80, 0xff, 0x01, 0x00,
+0x00, 0xe0, 0x3f, 0x02, 0x80, 0xff, 0x00, 0x00, 0x00, 0xe0, 0x3f, 0x01,
+0x80, 0x7f, 0x00, 0x00, 0x00, 0xe0, 0x1f, 0x01, 0x00, 0x7f, 0x00, 0x00,
+0x00, 0xe0, 0x0f, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00,
+0x00, 0x7f, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x3e, 0x00, 0x00,
+0x00, 0xc0, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xfe, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xe0, 0x1f, 0x00, 0x00, 0x00};
--- /dev/null
+#define terra02_width 64
+#define terra02_height 64
+#define terra02_x_hot 32
+#define terra02_y_hot 32
+static unsigned char terra02_bits[] = {
+0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xf9,
+0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x3c, 0x80, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0x08, 0x0c, 0x00, 0x73, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00,
+0x00, 0xf7, 0x00, 0x00, 0x00, 0xc0, 0x1e, 0x00, 0x60, 0xe4, 0x03, 0x00,
+0x00, 0xe0, 0x3f, 0x00, 0xa0, 0xfe, 0x07, 0x00, 0x00, 0xf8, 0x07, 0x00,
+0x00, 0xff, 0x1f, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0xff, 0x3f, 0x00,
+0x00, 0xfe, 0x01, 0x00, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x7f, 0x00, 0x00,
+0xc0, 0x07, 0xff, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x80, 0x03, 0xff, 0x01,
+0x80, 0x0f, 0x00, 0x00, 0x80, 0x03, 0xf4, 0x01, 0xc0, 0x07, 0x00, 0x00,
+0x00, 0x7d, 0xc0, 0x03, 0xe0, 0x03, 0x00, 0x00, 0x80, 0xff, 0x80, 0x07,
+0xe0, 0x01, 0x00, 0x00, 0x80, 0xff, 0xfb, 0x07, 0x30, 0x00, 0x00, 0x00,
+0xc0, 0xff, 0xff, 0x0f, 0x18, 0x01, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x1e,
+0x08, 0x01, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x1f, 0x08, 0x00, 0x00, 0x00,
+0xf0, 0xff, 0xff, 0x1f, 0x04, 0x01, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x3f,
+0x14, 0x02, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x37, 0x0c, 0x00, 0x00, 0x00,
+0xf0, 0xff, 0xff, 0x37, 0x18, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x2f,
+0x18, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x1f, 0x10, 0x03, 0x00, 0x00,
+0xf0, 0xff, 0xff, 0x1f, 0x90, 0x1f, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x3f,
+0xc0, 0x3f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x3f, 0x80, 0x7f, 0x00, 0x00,
+0x80, 0x9f, 0xff, 0x3f, 0xc0, 0xff, 0x01, 0x00, 0x00, 0x00, 0xfe, 0x3f,
+0xc0, 0xff, 0x01, 0x00, 0x00, 0x00, 0xfc, 0x3f, 0xc0, 0xff, 0x03, 0x00,
+0x00, 0x00, 0xfc, 0x3f, 0xe0, 0xff, 0x07, 0x00, 0x00, 0x00, 0xfc, 0x1f,
+0xe0, 0xff, 0x1f, 0x00, 0x00, 0x00, 0xfc, 0x1f, 0xe0, 0xff, 0xff, 0x00,
+0x00, 0x00, 0xf8, 0x1f, 0xe0, 0xff, 0xff, 0x03, 0x00, 0x00, 0xf8, 0x0f,
+0xc0, 0xff, 0xff, 0x03, 0x00, 0x00, 0xf8, 0x0f, 0xc0, 0xff, 0xff, 0x01,
+0x00, 0x00, 0xf8, 0x0f, 0x80, 0xff, 0xff, 0x01, 0x00, 0x00, 0xf8, 0x0f,
+0x80, 0xff, 0xff, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0xff, 0xff, 0x00,
+0x00, 0x00, 0xfc, 0x2f, 0x00, 0xfe, 0xff, 0x00, 0x00, 0x00, 0xfc, 0x07,
+0x00, 0xfc, 0xff, 0x00, 0x00, 0x00, 0xfc, 0x13, 0x00, 0xfc, 0x7f, 0x00,
+0x00, 0x00, 0xf8, 0x01, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0xf8, 0x09,
+0x00, 0xf8, 0x0f, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0xf8, 0x0f, 0x00,
+0x00, 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0x00, 0x7c, 0x00,
+0x00, 0xf0, 0x07, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0xf0, 0x07, 0x00,
+0x00, 0x00, 0x1c, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0xf8, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x90, 0x1f, 0x00, 0x00, 0x00};
--- /dev/null
+#define terra03_width 64
+#define terra03_height 64
+#define terra03_x_hot 32
+#define terra03_y_hot 32
+static unsigned char terra03_bits[] = {
+0x00, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3,
+0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf3, 0x00, 0x0e, 0x00, 0x00,
+0x00, 0x00, 0x2e, 0x70, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x63, 0x00,
+0x00, 0xd8, 0x00, 0x00, 0x00, 0xc0, 0xf3, 0x01, 0x00, 0xa2, 0x03, 0x00,
+0x00, 0xe0, 0xff, 0x01, 0x00, 0xec, 0x07, 0x00, 0x00, 0xf8, 0x3f, 0x01,
+0x00, 0xf0, 0x1f, 0x00, 0x00, 0xfc, 0x3f, 0x00, 0x00, 0xf0, 0x3f, 0x00,
+0x00, 0xfe, 0x0f, 0x00, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0xff, 0x03, 0x00,
+0x00, 0x78, 0xf8, 0x00, 0x80, 0xff, 0x01, 0x00, 0x00, 0x78, 0xe8, 0x01,
+0xc0, 0xff, 0x00, 0x00, 0x00, 0x30, 0xe8, 0x01, 0xc0, 0x7f, 0x00, 0x00,
+0x00, 0xe0, 0x07, 0x03, 0xe0, 0x1f, 0x00, 0x00, 0x00, 0xf0, 0x0f, 0x06,
+0xe0, 0x0f, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x07, 0xe0, 0x08, 0x00, 0x00,
+0x00, 0xf0, 0xff, 0x0f, 0x70, 0x08, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x1f,
+0x30, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x1f, 0x30, 0x00, 0x00, 0x00,
+0x00, 0xfc, 0xff, 0x1f, 0x30, 0x11, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x3f,
+0xb0, 0x40, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x3f, 0xf0, 0x00, 0x00, 0x00,
+0x00, 0xf8, 0xff, 0x3f, 0xc0, 0x01, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x3f,
+0x80, 0x01, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x7f, 0x00, 0x61, 0x00, 0x00,
+0x00, 0xf8, 0xff, 0x7f, 0x00, 0xf1, 0x03, 0x00, 0x00, 0xf0, 0xff, 0x7f,
+0x00, 0xfa, 0x07, 0x00, 0x00, 0xe0, 0xff, 0x7f, 0x00, 0xf8, 0x0f, 0x00,
+0x00, 0xc0, 0xe7, 0xff, 0x00, 0xf8, 0x7f, 0x00, 0x00, 0x00, 0xc0, 0xff,
+0x00, 0xfc, 0xff, 0x00, 0x00, 0x00, 0x80, 0xff, 0x00, 0xfc, 0xff, 0x00,
+0x00, 0x00, 0x80, 0xff, 0x00, 0xfc, 0xff, 0x03, 0x00, 0x00, 0x80, 0x7f,
+0x00, 0xfc, 0xff, 0x0f, 0x00, 0x00, 0x80, 0x7f, 0x00, 0xfe, 0xff, 0x7f,
+0x00, 0x00, 0x00, 0x7f, 0x00, 0xfc, 0xff, 0xff, 0x00, 0x00, 0x00, 0x7f,
+0x00, 0xfc, 0xff, 0xff, 0x00, 0x00, 0x00, 0x3f, 0x00, 0xf8, 0xff, 0xff,
+0x00, 0x00, 0x00, 0x3f, 0x00, 0xf8, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x3f,
+0x00, 0xf0, 0xff, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0xf0, 0xff, 0x3f,
+0x00, 0x00, 0x80, 0x3f, 0x00, 0xc0, 0xff, 0x3f, 0x00, 0x00, 0x80, 0x3f,
+0x00, 0x80, 0xff, 0x3f, 0x00, 0x00, 0x80, 0x1f, 0x00, 0x80, 0xff, 0x3f,
+0x00, 0x00, 0x80, 0x0f, 0x00, 0x80, 0xff, 0x0f, 0x00, 0x00, 0x80, 0x0f,
+0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0xff, 0x03,
+0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0x80, 0x03,
+0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xff, 0x00,
+0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0xe0, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x30, 0x1f, 0x00, 0x00, 0x00};
--- /dev/null
+#define terra04_width 64
+#define terra04_height 64
+#define terra04_x_hot 32
+#define terra04_y_hot 32
+static unsigned char terra04_bits[] = {
+0x00, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x8f,
+0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x9d, 0x07, 0x08, 0x00, 0x00,
+0x00, 0x00, 0x3e, 0x81, 0x03, 0x70, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0b,
+0x00, 0xa0, 0x00, 0x00, 0x00, 0xc0, 0x9f, 0x0f, 0x00, 0x90, 0x02, 0x00,
+0x00, 0xe0, 0xdf, 0x1f, 0x00, 0x70, 0x07, 0x00, 0x00, 0xf8, 0xff, 0x31,
+0x00, 0x80, 0x1f, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0x00, 0x3f, 0x00,
+0x00, 0xfc, 0xff, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0xfe, 0x7f, 0x00,
+0x00, 0x80, 0xf3, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0x00, 0xc3, 0x01,
+0x00, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x02, 0x01, 0x80, 0xff, 0x07, 0x00,
+0x00, 0x00, 0x38, 0x00, 0x80, 0xff, 0x03, 0x00, 0x00, 0x00, 0x7e, 0x00,
+0x80, 0xff, 0x01, 0x00, 0x00, 0x00, 0xfe, 0x07, 0xc0, 0x07, 0x01, 0x00,
+0x00, 0x00, 0xfe, 0x0f, 0xc0, 0x03, 0x01, 0x00, 0x00, 0x00, 0xff, 0x1f,
+0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1f, 0x80, 0x01, 0x00, 0x00,
+0x00, 0x00, 0xff, 0x1f, 0x80, 0x11, 0x02, 0x00, 0x00, 0x00, 0xff, 0x3f,
+0x80, 0x1b, 0x18, 0x00, 0x00, 0x00, 0xff, 0x3f, 0x80, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0xff, 0x3f, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f,
+0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x10, 0x08, 0x00,
+0x00, 0x00, 0xfe, 0x7f, 0x00, 0x20, 0xfe, 0x01, 0x00, 0x00, 0xfc, 0x7f,
+0x00, 0x40, 0xff, 0x03, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xff, 0x07,
+0x00, 0x00, 0xf8, 0xfe, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0x00, 0xfc,
+0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x80, 0xff, 0x7f,
+0x00, 0x00, 0x00, 0xf8, 0x00, 0x80, 0xff, 0xff, 0x00, 0x00, 0x00, 0xf8,
+0x00, 0x80, 0xff, 0xff, 0x03, 0x00, 0x00, 0xf8, 0x00, 0x80, 0xff, 0xff,
+0x3f, 0x00, 0x00, 0xf0, 0x00, 0x80, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xf0,
+0x00, 0x80, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x70, 0x00, 0x00, 0xff, 0xff,
+0x7f, 0x00, 0x00, 0x70, 0x00, 0x00, 0xfe, 0xff, 0x3f, 0x00, 0x00, 0x70,
+0x00, 0x00, 0xfe, 0xff, 0x1f, 0x00, 0x00, 0x78, 0x00, 0x00, 0xfc, 0xff,
+0x1f, 0x00, 0x00, 0x78, 0x00, 0x00, 0xf8, 0xff, 0x1f, 0x00, 0x00, 0x38,
+0x00, 0x00, 0xe0, 0xff, 0x0f, 0x00, 0x00, 0x38, 0x00, 0x00, 0xe0, 0xff,
+0x0f, 0x00, 0x00, 0x38, 0x00, 0x00, 0xe0, 0xff, 0x03, 0x00, 0x00, 0x1c,
+0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0xe0, 0xff,
+0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x00, 0x0c,
+0x00, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0xe0, 0x3f,
+0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x03,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x80, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x70, 0x1e, 0x00, 0x00, 0x00};
--- /dev/null
+#define terra05_width 64
+#define terra05_height 64
+#define terra05_x_hot 32
+#define terra05_y_hot 32
+static unsigned char terra05_bits[] = {
+0x00, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f,
+0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x67, 0x3c, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xfe, 0x00, 0x0c, 0x20, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x78,
+0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0xff, 0xf8, 0x00, 0x40, 0x02, 0x00,
+0x00, 0xc0, 0xff, 0xfd, 0x01, 0x80, 0x06, 0x00, 0x00, 0xe0, 0xff, 0x7f,
+0x02, 0x00, 0x1e, 0x00, 0x00, 0xf0, 0xff, 0x3f, 0x00, 0x00, 0x3c, 0x00,
+0x00, 0xf8, 0xff, 0x2f, 0x00, 0x00, 0x70, 0x00, 0x00, 0xf8, 0xff, 0x07,
+0x00, 0x00, 0xdc, 0x00, 0x00, 0xfc, 0xff, 0x03, 0x00, 0x00, 0x38, 0x01,
+0x00, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x30, 0x01, 0x00, 0xfe, 0xff, 0x00,
+0x00, 0x00, 0xc0, 0x01, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0xe0, 0x03,
+0x00, 0xfe, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x7c, 0x20, 0x00,
+0x00, 0x00, 0xe0, 0x0f, 0x00, 0x3c, 0x20, 0x00, 0x00, 0x00, 0xe0, 0x1f,
+0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x1f, 0x00, 0x38, 0x00, 0x00,
+0x00, 0x00, 0xe0, 0x1f, 0x00, 0x38, 0xc2, 0x00, 0x00, 0x00, 0xe0, 0x3f,
+0x00, 0x38, 0x03, 0x06, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0xf0, 0x01, 0x00,
+0x00, 0x00, 0xe0, 0x3f, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0xe0, 0x7f,
+0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0x04, 0x02,
+0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0x88, 0x7f, 0x00, 0x00, 0x80, 0x7f,
+0x00, 0x00, 0xd0, 0xff, 0x00, 0x00, 0x80, 0x7f, 0x00, 0x00, 0x80, 0xff,
+0x03, 0x00, 0x00, 0xef, 0x00, 0x00, 0x80, 0xff, 0x1f, 0x00, 0x00, 0xe0,
+0x00, 0x00, 0xc0, 0xff, 0x1f, 0x00, 0x00, 0xc0, 0x00, 0x00, 0xe0, 0xff,
+0x1f, 0x00, 0x00, 0xc0, 0x00, 0x00, 0xe0, 0xff, 0x7f, 0x00, 0x00, 0xc0,
+0x00, 0x00, 0xe0, 0xff, 0xff, 0x01, 0x00, 0xc0, 0x00, 0x00, 0xe0, 0xff,
+0xff, 0x0f, 0x00, 0x80, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x1f, 0x00, 0x80,
+0x00, 0x00, 0xe0, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff,
+0xff, 0x1f, 0x00, 0x40, 0x00, 0x00, 0x80, 0xff, 0xff, 0x0f, 0x00, 0x40,
+0x00, 0x00, 0x80, 0xff, 0xff, 0x07, 0x00, 0x40, 0x00, 0x00, 0x00, 0xff,
+0xff, 0x07, 0x00, 0x40, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x07, 0x00, 0x20,
+0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0x20, 0x00, 0x00, 0x00, 0xf8,
+0xff, 0x03, 0x00, 0x20, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xf8,
+0x1f, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x08,
+0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
+0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xf0, 0x19, 0x00, 0x00, 0x00};
--- /dev/null
+#define terra06_width 64
+#define terra06_height 64
+#define terra06_x_hot 32
+#define terra06_y_hot 32
+static unsigned char terra06_bits[] = {
+0x00, 0x00, 0x00, 0x60, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
+0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x9f, 0xf3, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xfe, 0x07, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc3,
+0x05, 0x80, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc7, 0x0f, 0x00, 0x02, 0x00,
+0x00, 0x80, 0xff, 0xdf, 0x1f, 0x00, 0x06, 0x00, 0x00, 0x80, 0xff, 0xff,
+0x07, 0x00, 0x18, 0x00, 0x00, 0x80, 0xff, 0xff, 0x07, 0x00, 0x30, 0x00,
+0x00, 0xc0, 0xff, 0xff, 0x01, 0x00, 0x40, 0x00, 0x00, 0xe0, 0xff, 0xff,
+0x00, 0x00, 0xe0, 0x00, 0x00, 0xe0, 0xff, 0x7f, 0x00, 0x00, 0xc0, 0x00,
+0x00, 0xf0, 0xff, 0x3f, 0x00, 0x00, 0x80, 0x00, 0x00, 0xf0, 0xff, 0x3f,
+0x00, 0x00, 0x00, 0x03, 0x00, 0xe0, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x07,
+0x00, 0xe0, 0xff, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0xc0, 0x1f, 0x08,
+0x00, 0x00, 0x00, 0x0e, 0x00, 0xc0, 0x0f, 0x08, 0x00, 0x00, 0x00, 0x1e,
+0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x80, 0x07, 0x00,
+0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x87, 0x20, 0x00, 0x00, 0x00, 0x3e,
+0x00, 0x00, 0xcf, 0x00, 0x03, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x7e, 0x00,
+0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x7c,
+0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x81,
+0x01, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0xc2, 0x3f, 0x00, 0x00, 0x78,
+0x00, 0x00, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xe0,
+0xff, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x07, 0x00, 0x80,
+0x00, 0x00, 0x00, 0xe0, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
+0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x1f, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xf8, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
+0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x07, 0x00,
+0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0xe0,
+0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x03, 0x00,
+0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0xc0,
+0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xfe, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x3f, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xfe, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xfe, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0x00};
--- /dev/null
+#define terra07_width 64
+#define terra07_height 64
+#define terra07_x_hot 32
+#define terra07_y_hot 32
+static unsigned char terra07_bits[] = {
+0x00, 0x00, 0x00, 0xc0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4,
+0xe1, 0x01, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xcc, 0x03, 0x00, 0x00,
+0x00, 0x00, 0xfe, 0x3f, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x1f,
+0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x7c, 0x00, 0x02, 0x00,
+0x00, 0x00, 0xfc, 0xff, 0xfd, 0x01, 0x08, 0x00, 0x00, 0x00, 0xfc, 0xff,
+0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x7f, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xfe, 0xff, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff,
+0x1f, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x01,
+0x00, 0x00, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
+0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x03, 0x00, 0x00, 0x04,
+0x00, 0x00, 0xfe, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x03,
+0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0xf8, 0x01, 0x02, 0x00, 0x00, 0x18,
+0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0xe0, 0x01,
+0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0xe0, 0x21, 0x08, 0x00, 0x00, 0x30,
+0x00, 0x00, 0xe0, 0x33, 0xe0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x80, 0x3f,
+0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x60,
+0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x80,
+0x40, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x80, 0xe1, 0x0f, 0x00, 0x40,
+0x00, 0x00, 0x00, 0x00, 0xfa, 0x1f, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
+0xf0, 0x3f, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xfc, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x07, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xfc, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xf8, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x7f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xe0, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x1f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x80, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x07, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x80, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xc0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0x00};
--- /dev/null
+#define terra08_width 64
+#define terra08_height 64
+#define terra08_x_hot 32
+#define terra08_y_hot 32
+static unsigned char terra08_bits[] = {
+0x00, 0x00, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90,
+0x83, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x33, 0x06, 0x00, 0x00,
+0x00, 0x00, 0xfc, 0xff, 0x61, 0x08, 0x00, 0x00, 0x00, 0x00, 0xe2, 0xff,
+0xe1, 0x01, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xc7, 0x03, 0x00, 0x00,
+0x00, 0x00, 0xe0, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff,
+0xff, 0x2f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x07, 0x00, 0x00,
+0x00, 0x00, 0xe0, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff,
+0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x01, 0x00, 0x00,
+0x00, 0x00, 0xe0, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff,
+0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff,
+0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7e, 0x80, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x18, 0x02, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xf0, 0x0c, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
+0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x40,
+0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xf8, 0x03, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xfc, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x3f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xfc, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x07,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xf8, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x03,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xe0, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x7f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xf8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00};
--- /dev/null
+#define terra09_width 64
+#define terra09_height 64
+#define terra09_x_hot 32
+#define terra09_y_hot 32
+static unsigned char terra09_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
+0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x9f, 0x0c, 0x00, 0x00,
+0x00, 0x00, 0xf8, 0xff, 0x0f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x88, 0xff,
+0x0f, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x3f, 0x1e, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xfe, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe,
+0xff, 0x7f, 0x01, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x7f, 0x01, 0x00,
+0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
+0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x3f, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xfc, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
+0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x1f, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xf0, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
+0x3f, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x1f, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x40, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x86, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x3c, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xf0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x10, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x7e, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x07,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x80, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x0f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x80, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x3f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x3f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x1f, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xfe, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x0f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00};
--- /dev/null
+#define terra10_width 64
+#define terra10_height 64
+#define terra10_x_hot 32
+#define terra10_y_hot 32
+static unsigned char terra10_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xff, 0xff, 0x04, 0x00, 0x00,
+0x00, 0x00, 0xc6, 0xff, 0x7f, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x60, 0xf8,
+0x7f, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x73, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0,
+0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x03, 0x00,
+0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0xc0,
+0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x03, 0x00,
+0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x03, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xf0, 0x0f, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x07, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xd0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0x10, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xdf, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc4, 0x07,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x3f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xe0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x7f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xf0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x7f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00};
--- /dev/null
+#define terra11_width 64
+#define terra11_height 64
+#define terra11_x_hot 32
+#define terra11_y_hot 32
+static unsigned char terra11_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xfe, 0xff, 0x0b, 0x00, 0x00,
+0x00, 0x00, 0x0e, 0xff, 0xff, 0x33, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc3,
+0xff, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xdf, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xfc, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x1f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xf8, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x1f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xe0, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x1f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xfd, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x40, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x11, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x13, 0x04, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3c,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe,
+0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x04, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c,
+0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x08, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x1e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x20, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01,
+0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x10, 0x00, 0x00,
+0x00, 0x00, 0x60, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00,
+0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xe0, 0x1f, 0x00, 0x00, 0x00};
--- /dev/null
+#define terra12_width 64
+#define terra12_height 64
+#define terra12_x_hot 32
+#define terra12_y_hot 32
+static unsigned char terra12_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xfb, 0xff, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0x3e, 0xf8, 0xff, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x06, 0x38,
+0xfc, 0x9f, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0xf8, 0x7f, 0x03, 0x00,
+0x00, 0x20, 0x00, 0x00, 0xe0, 0xff, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00,
+0xc0, 0xff, 0x1f, 0x00, 0x00, 0x04, 0x00, 0x00, 0x80, 0xff, 0x3f, 0x00,
+0x00, 0x02, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00,
+0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x00, 0x40, 0x00, 0x00, 0x00,
+0x00, 0xfc, 0xff, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x80, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
+0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
+0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
+0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x0c, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x20, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
+0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x04, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+0x80, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x80, 0x01, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00,
+0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xc0, 0x1f, 0x00, 0x00, 0x00};
--- /dev/null
+#define terra13_width 64
+#define terra13_height 64
+#define terra13_x_hot 32
+#define terra13_y_hot 32
+static unsigned char terra13_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
+0xe0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xcf, 0xff, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0xfe, 0xc1, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80,
+0xe1, 0x3f, 0x00, 0x00, 0x00, 0xc0, 0x0c, 0x00, 0x80, 0xff, 0x03, 0x00,
+0x00, 0x60, 0x02, 0x00, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x38, 0x00, 0x00,
+0x00, 0xfc, 0x1f, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xf8, 0x3f, 0x00,
+0x00, 0x06, 0x00, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00,
+0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x01, 0xc0, 0x01, 0x00, 0x00,
+0x00, 0x80, 0xff, 0x03, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x03,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x07, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x11, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x80, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x23,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1c, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x80, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xe0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x06, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x00};
--- /dev/null
+#define terra14_width 64
+#define terra14_height 64
+#define terra14_x_hot 32
+#define terra14_y_hot 32
+static unsigned char terra14_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03,
+0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f, 0xff, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0xfe, 0x0f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x87, 0x00,
+0x1c, 0xfe, 0x00, 0x00, 0x00, 0xc0, 0x61, 0x00, 0x00, 0xfc, 0x03, 0x00,
+0x00, 0xe0, 0x01, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xf8, 0x01, 0x00,
+0x00, 0xc0, 0x1f, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00,
+0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x07, 0x00, 0x00,
+0x00, 0x00, 0xff, 0x00, 0x80, 0x13, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x01,
+0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x40, 0x05, 0x00, 0x00,
+0x00, 0x00, 0xf8, 0x03, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07,
+0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x30, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x80, 0x07, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
+0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x30, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xf8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x07, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xf0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3f, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xe0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x3e, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x70, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x10, 0x1e, 0x00, 0x00, 0x00};
--- /dev/null
+#define terra15_width 64
+#define terra15_height 64
+#define terra15_x_hot 32
+#define terra15_y_hot 32
+static unsigned char terra15_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x05,
+0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xf9, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0xfe, 0x7f, 0xf0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x04,
+0xc0, 0xf8, 0x00, 0x00, 0x00, 0xc0, 0x0f, 0x06, 0x00, 0xe0, 0x03, 0x00,
+0x00, 0xe0, 0x0f, 0x01, 0x00, 0x80, 0x0f, 0x00, 0x00, 0xf8, 0x0f, 0x00,
+0x00, 0x00, 0x1e, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x00, 0x3c, 0x00,
+0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3f, 0x00, 0x00,
+0x00, 0x00, 0xf0, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01,
+0x80, 0x8b, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0xc0, 0x41, 0x00, 0x00,
+0x00, 0x00, 0xc0, 0x03, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
+0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xf0, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x0e, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c,
+0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x10, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
+0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x06, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x16, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x3c, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x27, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xc0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xe0, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x07, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x80, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x07, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, 0x00};
--- /dev/null
+#define terra16_width 64
+#define terra16_height 64
+#define terra16_x_hot 32
+#define terra16_y_hot 32
+static unsigned char terra16_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1b,
+0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xef, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0xfe, 0xff, 0x83, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xff, 0x61,
+0x00, 0xe6, 0x00, 0x00, 0x00, 0xc0, 0x7f, 0x30, 0x00, 0x00, 0x03, 0x00,
+0x00, 0xe0, 0xff, 0x10, 0x00, 0x00, 0x06, 0x00, 0x00, 0xf8, 0x7f, 0x00,
+0x00, 0x00, 0x18, 0x00, 0x00, 0xfc, 0x5f, 0x00, 0x00, 0x00, 0x30, 0x00,
+0x00, 0xfe, 0x4f, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0xff, 0x01, 0x00,
+0x00, 0x00, 0xc0, 0x00, 0x80, 0xbf, 0x10, 0x00, 0x00, 0x00, 0x80, 0x01,
+0x80, 0x9f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x0f, 0x06, 0x00,
+0x00, 0x00, 0x00, 0x02, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
+0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x08, 0xf8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x02, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x64, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x68, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x8f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x40, 0x04, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x60, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0c, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xfc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x3f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xfc, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xfe, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xf0, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x06, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xf0, 0x18, 0x00, 0x00, 0x00};
--- /dev/null
+#define terra17_width 64
+#define terra17_height 64
+#define terra17_x_hot 32
+#define terra17_y_hot 32
+static unsigned char terra17_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x6f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x3f, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0xfe, 0xff, 0x1f, 0x7e, 0x00, 0x00, 0x00, 0x00, 0xff, 0x0f,
+0x06, 0x90, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x03, 0x03, 0x10, 0x02, 0x00,
+0x00, 0xe0, 0xff, 0x07, 0x01, 0x00, 0x04, 0x00, 0x00, 0xf8, 0xff, 0x03,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xfe, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x3f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x1b, 0x02, 0x00, 0x00, 0x00, 0x00,
+0x80, 0xff, 0x09, 0x01, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x81, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xf8, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xf8, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xec, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xe4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x41, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x81, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x10, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x20, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x0e, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x40, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x40, 0x26, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0xe0, 0x03,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x87, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x1c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x03,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7f, 0x07, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x80, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x0f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xf0, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x3f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xc0, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc3, 0x3f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x1e, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xc0, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x03, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00};
--- /dev/null
+#define terra18_width 64
+#define terra18_height 64
+#define terra18_x_hot 32
+#define terra18_y_hot 32
+static unsigned char terra18_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xbf,
+0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x0e, 0x00, 0x00,
+0x00, 0x00, 0xfe, 0xff, 0xff, 0x78, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f,
+0x30, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x3f, 0x30, 0x00, 0x00, 0x00,
+0x00, 0xe0, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xbf, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xfe, 0xff, 0x9f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x43,
+0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x1f, 0x41, 0x00, 0x00, 0x00, 0x00,
+0x80, 0xff, 0x1f, 0x61, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x1f, 0x11,
+0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x1f, 0x04, 0x00, 0x00, 0x00, 0x00,
+0xe0, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x1f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xf8, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x03, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x70, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x38, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1e, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x08, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x08, 0x3c, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x38, 0x30, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x08, 0x02, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x22, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x86, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x03, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xc4, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xcc, 0x09, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0xf0,
+0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x40, 0xc0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x8f,
+0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xdf, 0x01, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xf0, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff,
+0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x07, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xfe, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff,
+0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x0f, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xf8, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xf8,
+0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xc0, 0x03, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x02,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x0f, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0x00};
--- /dev/null
+#define terra19_width 64
+#define terra19_height 64
+#define terra19_x_hot 32
+#define terra19_y_hot 32
+static unsigned char terra19_bits[] = {
+0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7f,
+0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0xfe, 0xff, 0xff, 0x67, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
+0x07, 0x81, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x83, 0x01, 0x00, 0x00,
+0x00, 0xe0, 0xff, 0xff, 0x0f, 0x01, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff,
+0x07, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00,
+0x00, 0xfe, 0xff, 0xff, 0x13, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7f,
+0x08, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x23, 0x00, 0x00, 0x00, 0x00,
+0x80, 0xff, 0xff, 0x63, 0x08, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x03,
+0x06, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x87, 0x00, 0x00, 0x00, 0x00,
+0xe0, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x07,
+0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00,
+0xe8, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0xc8, 0xff, 0x7f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xc4, 0xe7, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xc4, 0xe3, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0xe1, 0x07, 0x04,
+0x00, 0x00, 0x00, 0x00, 0xc0, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x40, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x0e, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xc0, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xf1, 0x08,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xf1, 0x02, 0x01, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x73, 0x02, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06,
+0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x80, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
+0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x6f, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xfc, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
+0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x80, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff,
+0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e,
+0xfe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x3f, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00};
--- /dev/null
+#define terra20_width 64
+#define terra20_height 64
+#define terra20_x_hot 32
+#define terra20_y_hot 32
+static unsigned char terra20_bits[] = {
+0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff,
+0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0xfe, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
+0x3f, 0x08, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x1f, 0x08, 0x02, 0x00,
+0x00, 0xe0, 0xff, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff,
+0x7f, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00,
+0x00, 0xfe, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
+0x0f, 0x01, 0x00, 0x00, 0x80, 0xff, 0xff, 0x7f, 0x0d, 0x00, 0x00, 0x00,
+0x80, 0xff, 0xff, 0xff, 0x08, 0x01, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff,
+0x88, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x20, 0x00, 0x00, 0x00,
+0xe0, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff,
+0x01, 0x00, 0x00, 0x00, 0xd8, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+0x38, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x38, 0xfe, 0xff, 0x1f,
+0x01, 0x00, 0x00, 0x00, 0x3c, 0xfe, 0xfc, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x1c, 0x7c, 0xf8, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x3c, 0xf8, 0x01,
+0x01, 0x00, 0x00, 0x00, 0x06, 0x0c, 0xe0, 0x03, 0x01, 0x00, 0x00, 0x00,
+0x02, 0x0c, 0xe0, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x80, 0x03,
+0x04, 0x00, 0x00, 0x00, 0x02, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x03, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x20, 0x40,
+0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x68, 0x60, 0x00, 0x00, 0x00, 0x00,
+0x01, 0x00, 0x50, 0x70, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x60, 0x7c,
+0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x60, 0x3c, 0xc0, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xc0, 0x38, 0x81, 0x06, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
+0x02, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xc0, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xf8, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x1b, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xfe, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+0xff, 0x3f, 0x00, 0x00, 0x08, 0x00, 0x00, 0xe0, 0xff, 0x7f, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xe0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
+0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x7f, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xc0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
+0x83, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1f, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x7f, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00};
--- /dev/null
+#define terra21_width 64
+#define terra21_height 64
+#define terra21_x_hot 32
+#define terra21_y_hot 32
+static unsigned char terra21_bits[] = {
+0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6,
+0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0xfe, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
+0xff, 0x21, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x61, 0x00, 0x00,
+0x00, 0xe0, 0xff, 0xff, 0xff, 0x47, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff,
+0xff, 0x0f, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00,
+0x00, 0xfe, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
+0xff, 0x21, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x9f, 0x21, 0x00, 0x00,
+0xc0, 0xff, 0xff, 0xff, 0x1f, 0x21, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff,
+0x1f, 0x30, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x3f, 0x04, 0x00, 0x00,
+0xe0, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0xf0, 0xfe, 0xff, 0xff,
+0x7f, 0x00, 0x00, 0x00, 0xf8, 0xfe, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00,
+0xf8, 0xe0, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0xe8, 0xe3, 0xff, 0xff,
+0x0f, 0x00, 0x00, 0x00, 0xfc, 0xc1, 0x1f, 0xff, 0x00, 0x00, 0x00, 0x00,
+0xf4, 0x81, 0x0f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x76, 0x80, 0x07, 0xfe,
+0x00, 0x00, 0x00, 0x00, 0x36, 0x80, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x00,
+0x1e, 0x80, 0x01, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x01, 0xe0,
+0x00, 0x00, 0x00, 0x00, 0x1e, 0x80, 0x01, 0x40, 0x00, 0x03, 0x00, 0x00,
+0x1f, 0x00, 0x02, 0x08, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x10,
+0x10, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x16, 0x38, 0x00, 0x00, 0x00,
+0x0f, 0x00, 0x00, 0x2c, 0x1c, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x18,
+0x3e, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x30, 0x1e, 0x20, 0x00, 0x00,
+0x03, 0x00, 0x00, 0x70, 0xdc, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x60,
+0x00, 0x80, 0x07, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00,
+0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x06, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x06, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00,
+0x00, 0x7e, 0x06, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00,
+0x24, 0x00, 0x00, 0x00, 0x80, 0xff, 0x07, 0x00, 0x24, 0x00, 0x00, 0x00,
+0xe0, 0xff, 0x0f, 0x00, 0x28, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x0f, 0x00,
+0x08, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x0f, 0x00, 0x08, 0x00, 0x00, 0x00,
+0xf8, 0xff, 0x0f, 0x00, 0x10, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x0f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xf0, 0xf0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x03, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x90,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00};
--- /dev/null
+#define terra22_width 64
+#define terra22_height 64
+#define terra22_x_hot 32
+#define terra22_y_hot 32
+static unsigned char terra22_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xce,
+0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xff, 0xff, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0xf8, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
+0xff, 0x0f, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x8f, 0x01, 0x00,
+0x00, 0xe0, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff,
+0xff, 0x7f, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00,
+0x00, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xff,
+0xff, 0x3f, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x13, 0x02, 0x00,
+0x80, 0xff, 0xff, 0xff, 0xff, 0x23, 0x02, 0x00, 0x00, 0xfe, 0xff, 0xff,
+0xff, 0x27, 0x03, 0x00, 0x20, 0xfe, 0xff, 0xff, 0xff, 0x87, 0x00, 0x00,
+0xe0, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xf0, 0xf7, 0xff, 0xff,
+0xff, 0x0f, 0x00, 0x00, 0xf8, 0xe7, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00,
+0xb8, 0x0f, 0xfc, 0xff, 0xff, 0x07, 0x00, 0x00, 0xb8, 0x3f, 0xfc, 0xff,
+0xff, 0x03, 0x00, 0x00, 0xbc, 0x3f, 0xf0, 0xc7, 0xbf, 0x00, 0x00, 0x00,
+0xbc, 0x1f, 0xf0, 0x83, 0x9f, 0x00, 0x00, 0x00, 0xbe, 0x0f, 0xf0, 0x81,
+0x3f, 0x00, 0x00, 0x00, 0xbe, 0x03, 0xf0, 0x00, 0x7e, 0x00, 0x00, 0x00,
+0xfe, 0x00, 0x60, 0x00, 0x7e, 0x20, 0x00, 0x00, 0x7e, 0x00, 0x60, 0x00,
+0x70, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x60, 0x00, 0x20, 0xc0, 0x00, 0x00,
+0xff, 0x01, 0x80, 0x00, 0x02, 0xc0, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
+0x04, 0x88, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x09, 0x0c, 0x00, 0x00,
+0xff, 0x00, 0x00, 0x00, 0x0a, 0x0e, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00,
+0x8c, 0x0f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x1c, 0x0f, 0x08, 0x00,
+0x1f, 0x00, 0x00, 0x00, 0x38, 0x27, 0x78, 0x00, 0x1f, 0x00, 0x00, 0x00,
+0x10, 0x20, 0xe0, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01,
+0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x3e, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x3e, 0x03, 0x00, 0x00,
+0x00, 0x80, 0x4f, 0x00, 0x3e, 0x03, 0x00, 0x00, 0x00, 0xc0, 0x7f, 0x00,
+0x3c, 0x03, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x3c, 0x02, 0x00, 0x00,
+0x00, 0xf8, 0xff, 0x00, 0x38, 0x02, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x00,
+0x38, 0x02, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x00, 0x30, 0x00, 0x00, 0x00,
+0x00, 0xfe, 0xff, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x00,
+0x60, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, 0x00, 0x40, 0x00, 0x00, 0x00,
+0x00, 0x1e, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00};
--- /dev/null
+#define terra23_width 64
+#define terra23_height 64
+#define terra23_x_hot 32
+#define terra23_y_hot 32
+static unsigned char terra23_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88,
+0xdf, 0x01, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0xfc, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
+0xff, 0x3f, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x7f, 0x02, 0x00,
+0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0xf8, 0xff, 0xff,
+0xff, 0xff, 0x03, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00,
+0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xfe, 0xff, 0xff,
+0xff, 0xff, 0x01, 0x00, 0x00, 0xfa, 0xff, 0xff, 0xff, 0xbf, 0x01, 0x00,
+0x40, 0xfc, 0xff, 0xff, 0xff, 0x7f, 0x02, 0x00, 0x40, 0xe0, 0xff, 0xff,
+0xff, 0x7f, 0x30, 0x00, 0x20, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x08, 0x00,
+0xe0, 0xfd, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0xf0, 0x7f, 0xfe, 0xff,
+0xff, 0xff, 0x01, 0x00, 0xf8, 0xff, 0xfc, 0xff, 0xff, 0xff, 0x01, 0x00,
+0xf8, 0xfb, 0x84, 0xff, 0xff, 0xff, 0x01, 0x00, 0xf8, 0xfb, 0x0f, 0xff,
+0xff, 0x7f, 0x00, 0x00, 0xfc, 0xfb, 0x07, 0xfc, 0xf3, 0x2f, 0x00, 0x00,
+0xfc, 0xf3, 0x03, 0xfc, 0xe1, 0x27, 0x00, 0x00, 0xfe, 0xf3, 0x01, 0x7c,
+0xc0, 0x0f, 0x04, 0x00, 0xfe, 0x73, 0x00, 0x38, 0x00, 0x1f, 0x04, 0x00,
+0xfe, 0x1f, 0x00, 0x38, 0x00, 0x1f, 0x08, 0x00, 0xfe, 0x07, 0x00, 0x38,
+0x00, 0x1c, 0x10, 0x00, 0xfe, 0x7f, 0x00, 0x10, 0x00, 0x08, 0x10, 0x00,
+0xff, 0x3f, 0x00, 0x40, 0x00, 0x01, 0x10, 0x00, 0xff, 0x3f, 0x00, 0x00,
+0x00, 0x02, 0x02, 0x00, 0xfe, 0x1f, 0x00, 0x00, 0x80, 0x02, 0x03, 0x00,
+0xfe, 0x0f, 0x00, 0x00, 0x00, 0x87, 0x03, 0x00, 0xfe, 0x07, 0x00, 0x00,
+0x00, 0xc7, 0x13, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x00, 0xc6, 0x03, 0x00,
+0xfe, 0x03, 0x00, 0x00, 0x00, 0xcc, 0x09, 0x07, 0xfc, 0x01, 0x00, 0x00,
+0x00, 0x0c, 0x08, 0x0e, 0xfc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c,
+0xfc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x20, 0x0c, 0xfc, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x10, 0x10, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0xf8, 0x63, 0x00, 0x00,
+0x00, 0x00, 0xf0, 0x05, 0xf8, 0x33, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x07,
+0xf8, 0x21, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0xf0, 0x21, 0x00, 0x00,
+0x00, 0x00, 0xff, 0x07, 0xf0, 0x23, 0x00, 0x00, 0x00, 0x80, 0xff, 0x07,
+0xe0, 0x23, 0x00, 0x00, 0x00, 0x80, 0xff, 0x07, 0xe0, 0x03, 0x00, 0x00,
+0x00, 0xc0, 0xff, 0x07, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x80, 0xff, 0x03,
+0x80, 0x03, 0x00, 0x00, 0x00, 0x80, 0xff, 0x03, 0x80, 0x03, 0x00, 0x00,
+0x00, 0xc0, 0xe3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00};
--- /dev/null
+#define terra24_width 64
+#define terra24_height 64
+#define terra24_x_hot 32
+#define terra24_y_hot 32
+static unsigned char terra24_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
+0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0xfe, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff,
+0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00,
+0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xf8, 0xff, 0xff,
+0xff, 0xff, 0x0f, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00,
+0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xe8, 0xff, 0xff,
+0xff, 0xff, 0x0f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x0b, 0x00,
+0x00, 0xd4, 0xff, 0xff, 0xff, 0xff, 0x87, 0x00, 0xc0, 0x01, 0xff, 0xff,
+0xff, 0xff, 0xa7, 0x00, 0xe0, 0x01, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x00,
+0xe0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0xf0, 0xff, 0xdf, 0xff,
+0xff, 0xff, 0x1f, 0x00, 0xf8, 0xbf, 0x1f, 0xff, 0xff, 0xff, 0x1f, 0x00,
+0xf8, 0x3f, 0xbf, 0xe0, 0xff, 0xff, 0x1f, 0x00, 0xf8, 0x7f, 0xff, 0xc1,
+0xff, 0xff, 0x0f, 0x00, 0xfc, 0x7f, 0xff, 0x01, 0xff, 0xfc, 0x01, 0x00,
+0xfc, 0x7f, 0xfe, 0x00, 0x7e, 0xf8, 0x05, 0x00, 0xfe, 0x7f, 0x7e, 0x00,
+0x3e, 0xf0, 0x03, 0x00, 0xfe, 0xff, 0x1e, 0x00, 0x1e, 0xc0, 0x03, 0x00,
+0xfe, 0xff, 0x03, 0x00, 0x0c, 0xc0, 0x07, 0x00, 0xfe, 0xff, 0x01, 0x00,
+0x0c, 0x00, 0x07, 0x00, 0xfe, 0xff, 0x0f, 0x00, 0x0c, 0x00, 0x02, 0x00,
+0xff, 0xff, 0x0f, 0x00, 0x00, 0x40, 0x00, 0x02, 0xff, 0xff, 0x07, 0x00,
+0x00, 0x80, 0x40, 0x02, 0xf8, 0xff, 0x07, 0x00, 0x00, 0x20, 0x60, 0x00,
+0xf0, 0xff, 0x03, 0x00, 0x00, 0x40, 0x61, 0x00, 0xf0, 0xff, 0x01, 0x00,
+0x00, 0x80, 0x71, 0x00, 0xf0, 0xff, 0x00, 0x00, 0x00, 0x80, 0x71, 0x00,
+0xf0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x33, 0x30, 0xf0, 0x7f, 0x00, 0x00,
+0x00, 0x00, 0x02, 0x20, 0xe0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
+0xe0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x20, 0x62, 0xe0, 0x7f, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xe0, 0x7f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0xe0, 0xff, 0x08, 0x00,
+0x00, 0x00, 0x00, 0x0e, 0xc0, 0x7f, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x1f,
+0xc0, 0x3f, 0x0c, 0x00, 0x00, 0x00, 0x80, 0x1f, 0xc0, 0x3f, 0x0c, 0x00,
+0x00, 0x00, 0xe0, 0x1f, 0x80, 0x3f, 0x0c, 0x00, 0x00, 0x00, 0xf0, 0x1f,
+0x00, 0x3f, 0x0c, 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x3f, 0x00, 0x00,
+0x00, 0x00, 0xf8, 0x0f, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f,
+0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x07, 0x00, 0x1c, 0x00, 0x00,
+0x00, 0x00, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00};
--- /dev/null
+#define terra25_width 64
+#define terra25_height 64
+#define terra25_x_hot 32
+#define terra25_y_hot 32
+static unsigned char terra25_bits[] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0xe0, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xd8, 0xff,
+0xff, 0xff, 0x00, 0x00, 0x00, 0x80, 0xf4, 0xff, 0xff, 0xff, 0x03, 0x00,
+0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0xc0, 0xff, 0xff,
+0xff, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00,
+0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x4c, 0xff, 0xff,
+0xff, 0xff, 0x3f, 0x00, 0x00, 0x06, 0xfd, 0xff, 0xff, 0xff, 0x7f, 0x00,
+0x00, 0x03, 0xfd, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x0f, 0xe0, 0xff,
+0xff, 0xff, 0x7f, 0x02, 0x80, 0x0f, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x02,
+0xc0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xe0, 0xff, 0xff, 0xf3,
+0xff, 0xff, 0xff, 0x01, 0xe0, 0xff, 0xf7, 0xc7, 0xff, 0xff, 0xff, 0x01,
+0xf0, 0xff, 0xef, 0x2f, 0xf8, 0xff, 0xff, 0x01, 0xf8, 0xff, 0xef, 0xff,
+0xf0, 0xff, 0xff, 0x01, 0xf8, 0xff, 0xcf, 0x7f, 0xc0, 0x3f, 0x3f, 0x00,
+0xf8, 0xff, 0xcf, 0x7f, 0x80, 0x1f, 0x3e, 0x00, 0xfc, 0xff, 0x9f, 0x1f,
+0x80, 0x0f, 0x7c, 0x00, 0xfc, 0xff, 0x9f, 0x07, 0x80, 0x07, 0x78, 0x00,
+0xfc, 0xff, 0xff, 0x01, 0x00, 0x07, 0x78, 0x08, 0xfc, 0xff, 0x7f, 0x00,
+0x00, 0x07, 0xe0, 0x00, 0xfc, 0xff, 0xff, 0x07, 0x00, 0x02, 0x40, 0x10,
+0xfc, 0xff, 0xff, 0x03, 0x00, 0x08, 0x10, 0x10, 0xdc, 0xff, 0xff, 0x03,
+0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x01, 0x00, 0x00, 0x28, 0x04,
+0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x30, 0x06, 0x80, 0xff, 0x7f, 0x00,
+0x00, 0x00, 0x30, 0x07, 0x80, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x20, 0x46,
+0x80, 0xff, 0x1f, 0x00, 0x00, 0x00, 0xe0, 0xc6, 0x00, 0xff, 0x1f, 0x00,
+0x00, 0x00, 0x40, 0x80, 0x00, 0xfe, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x80,
+0x00, 0xfe, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xfe, 0x1f, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xfe, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0xfe, 0x1f, 0x06,
+0x00, 0x00, 0x00, 0x70, 0x00, 0xfe, 0x1f, 0x03, 0x00, 0x00, 0x00, 0x38,
+0x00, 0xfc, 0x0f, 0x03, 0x00, 0x00, 0x00, 0x38, 0x00, 0xfc, 0x07, 0x03,
+0x00, 0x00, 0x00, 0x3e, 0x00, 0xf8, 0x07, 0x03, 0x00, 0x00, 0x00, 0x1f,
+0x00, 0xf8, 0x07, 0x01, 0x00, 0x00, 0x00, 0x1f, 0x00, 0xf0, 0x07, 0x00,
+0x00, 0x00, 0x80, 0x1f, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x80, 0x0f,
+0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0xc0, 0x03, 0x00,
+0x00, 0x00, 0xc0, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x80, 0x06, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00};
--- /dev/null
+#define terra26_width 64
+#define terra26_height 64
+#define terra26_x_hot 32
+#define terra26_y_hot 32
+static unsigned char terra26_bits[] = {
+0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xe0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0x80, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xfe,
+0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x32, 0xff, 0xff, 0xff, 0x03, 0x00,
+0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0xff, 0xff,
+0xff, 0xff, 0x1f, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00,
+0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x70, 0xf4, 0xff,
+0xff, 0xff, 0xff, 0x00, 0x00, 0x38, 0xb1, 0xff, 0xff, 0xff, 0xff, 0x01,
+0x00, 0x18, 0xa2, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0xf8, 0x00, 0xfc,
+0xff, 0xff, 0xff, 0x01, 0x00, 0xfc, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x03,
+0x00, 0xfe, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0xff, 0xff, 0xff,
+0xfe, 0xff, 0xff, 0x07, 0x80, 0xff, 0xff, 0xfd, 0xf1, 0xff, 0xff, 0x07,
+0xc0, 0xff, 0xff, 0xf9, 0x0b, 0xfe, 0xff, 0x0f, 0xe0, 0xff, 0xff, 0xfb,
+0x3f, 0xfc, 0xff, 0x07, 0xe0, 0xff, 0xff, 0xf3, 0x3f, 0xf0, 0xe7, 0x03,
+0xe0, 0xff, 0xff, 0xf3, 0x1f, 0xe0, 0xc3, 0x03, 0xf0, 0xff, 0xff, 0xe7,
+0x07, 0xe0, 0xc3, 0x03, 0xf0, 0xff, 0xff, 0xef, 0x01, 0xc0, 0x01, 0x07,
+0xf0, 0xff, 0xff, 0x5f, 0x00, 0xc0, 0x00, 0x07, 0xf0, 0xff, 0xff, 0x1f,
+0x00, 0x80, 0x00, 0x04, 0xf0, 0xff, 0xff, 0xff, 0x01, 0x80, 0x00, 0x04,
+0xf0, 0xff, 0xff, 0xff, 0x01, 0x00, 0x02, 0x00, 0xe0, 0xfd, 0xff, 0xff,
+0x00, 0x00, 0x00, 0x02, 0x00, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x00, 0x21,
+0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x22, 0x00, 0xf0, 0xff, 0x3f,
+0x00, 0x00, 0x00, 0xf2, 0x00, 0xf0, 0xff, 0x1f, 0x00, 0x00, 0x00, 0xf4,
+0x00, 0xf0, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x6c, 0x00, 0xe0, 0xff, 0x07,
+0x00, 0x00, 0x00, 0x04, 0x00, 0xc0, 0xff, 0x07, 0x00, 0x00, 0x00, 0x08,
+0x00, 0xc0, 0xff, 0x07, 0x00, 0x00, 0x00, 0x20, 0x00, 0xc0, 0xff, 0x0f,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xc0, 0xff, 0x0f, 0x01, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x8f,
+0x01, 0x00, 0x00, 0x40, 0x00, 0xc0, 0xff, 0xc7, 0x01, 0x00, 0x00, 0x00,
+0x00, 0xc0, 0xff, 0xc3, 0x00, 0x00, 0x00, 0x20, 0x00, 0x80, 0xff, 0xc1,
+0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0xff, 0xc1, 0x00, 0x00, 0x00, 0x18,
+0x00, 0x00, 0xff, 0x41, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0xff, 0x00,
+0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x0c,
+0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x78, 0x00,
+0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00};
--- /dev/null
+#define terra27_width 64
+#define terra27_height 64
+#define terra27_x_hot 32
+#define terra27_y_hot 32
+static unsigned char terra27_bits[] = {
+0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x30, 0xf8, 0xff, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xfe, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7,
+0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x10, 0xfb, 0xff, 0xff, 0x03, 0x00,
+0x00, 0x00, 0xdc, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0xf8, 0xff,
+0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x3f, 0x00,
+0x00, 0x00, 0x7c, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x80, 0xc7, 0xfe,
+0xff, 0xff, 0xff, 0x00, 0x00, 0xc0, 0x83, 0xf6, 0xff, 0xff, 0xff, 0x01,
+0x00, 0xc0, 0x41, 0xf0, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x1f, 0x00,
+0xff, 0xff, 0xff, 0x03, 0x00, 0xe0, 0x1f, 0x00, 0xff, 0xff, 0xff, 0x07,
+0x00, 0xf0, 0x7f, 0xef, 0xff, 0xff, 0xff, 0x07, 0x00, 0xf8, 0xff, 0xff,
+0xbf, 0xff, 0xff, 0x0f, 0x00, 0xfc, 0xff, 0x7f, 0x7f, 0xfc, 0xff, 0x1f,
+0x00, 0xfe, 0xff, 0xff, 0xfe, 0x82, 0xff, 0x1f, 0x00, 0xfe, 0xff, 0xff,
+0xfe, 0x0f, 0xff, 0x1f, 0x00, 0xff, 0xff, 0xff, 0xfc, 0x0f, 0x7c, 0x1e,
+0x00, 0xff, 0xff, 0xff, 0xf9, 0x07, 0x7c, 0x1c, 0x00, 0xff, 0xff, 0xff,
+0xf9, 0x03, 0x38, 0x1c, 0x80, 0xff, 0xff, 0xff, 0xf3, 0x00, 0x38, 0x18,
+0x80, 0xff, 0xff, 0xff, 0x37, 0x00, 0x30, 0x30, 0x80, 0xff, 0xff, 0xff,
+0x0f, 0x00, 0x30, 0x20, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x20, 0x20,
+0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x40, 0x00, 0x00, 0xbe, 0xff, 0xff,
+0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x7f, 0x00, 0x00, 0x90,
+0x00, 0x00, 0xfc, 0xff, 0x3f, 0x00, 0x00, 0x90, 0x00, 0x00, 0xfc, 0xff,
+0x0f, 0x00, 0x00, 0xb0, 0x00, 0x00, 0xfc, 0xff, 0x07, 0x00, 0x00, 0xa0,
+0x01, 0x00, 0xfc, 0xff, 0x07, 0x00, 0x00, 0xe0, 0x01, 0x00, 0xf8, 0xff,
+0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0xf8, 0xff, 0x03, 0x00, 0x00, 0x00,
+0x03, 0x00, 0xf0, 0xff, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0xf0, 0xff,
+0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0xf0, 0xff, 0x03, 0x00, 0x00, 0x00,
+0x02, 0x00, 0xf0, 0xff, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0xf0, 0xff,
+0x43, 0x00, 0x00, 0x00, 0x02, 0x00, 0xf0, 0xff, 0x71, 0x00, 0x00, 0x00,
+0x04, 0x00, 0xf0, 0xff, 0x60, 0x00, 0x00, 0x00, 0x04, 0x00, 0xe0, 0x7f,
+0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x7f, 0x30, 0x00, 0x00, 0x00,
+0x00, 0x00, 0xe0, 0x7f, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0xc0, 0x3f,
+0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00};
--- /dev/null
+#define terra28_width 64
+#define terra28_height 64
+#define terra28_x_hot 32
+#define terra28_y_hot 32
+static unsigned char terra28_bits[] = {
+0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01,
+0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x40, 0xc0, 0xff, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0x04, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38,
+0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x80, 0x98, 0xff, 0xff, 0x03, 0x00,
+0x00, 0x00, 0xe0, 0xfc, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x80, 0xff,
+0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x3f, 0x00,
+0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x78, 0xc8,
+0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x3c, 0xd0, 0xfe, 0xff, 0xff, 0x01,
+0x00, 0x00, 0x1c, 0x88, 0xfe, 0xff, 0xff, 0x01, 0x00, 0x00, 0xf8, 0x03,
+0xc0, 0xff, 0xff, 0x03, 0x00, 0x00, 0xfc, 0x03, 0xe0, 0xff, 0xff, 0x07,
+0x00, 0x00, 0xfe, 0xcf, 0xfb, 0xff, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff,
+0xff, 0xef, 0xff, 0x0f, 0x00, 0xc0, 0xff, 0xff, 0xdf, 0x9f, 0xff, 0x1f,
+0x00, 0xc0, 0xff, 0xff, 0xbf, 0xbf, 0xf0, 0x1f, 0x00, 0xe0, 0xff, 0xff,
+0x3f, 0xff, 0xe1, 0x1f, 0x00, 0xe0, 0xff, 0xff, 0x7f, 0xff, 0xc1, 0x37,
+0x00, 0xe0, 0xff, 0xff, 0x7f, 0xfe, 0x81, 0x33, 0x00, 0xf0, 0xff, 0xff,
+0xff, 0xfc, 0x80, 0x23, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x3d, 0x00, 0x63,
+0x00, 0xf0, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x43, 0x00, 0xf0, 0xff, 0xff,
+0xff, 0x03, 0x00, 0x02, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x02,
+0x00, 0xe0, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x01, 0xc0, 0xe7, 0xff,
+0xff, 0x1f, 0x00, 0x00, 0x01, 0x00, 0x80, 0xff, 0xff, 0x1f, 0x00, 0x00,
+0x01, 0x00, 0x00, 0xff, 0xff, 0x0f, 0x00, 0x80, 0x01, 0x00, 0x00, 0xff,
+0xff, 0x07, 0x00, 0x80, 0x03, 0x00, 0x00, 0xff, 0xff, 0x03, 0x00, 0x80,
+0x07, 0x00, 0x00, 0xff, 0xff, 0x01, 0x00, 0x80, 0x0f, 0x00, 0x00, 0xfe,
+0xff, 0x01, 0x00, 0x00, 0x0f, 0x00, 0x00, 0xfc, 0xff, 0x00, 0x00, 0x00,
+0x1f, 0x00, 0x00, 0xfc, 0xff, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0xfc,
+0xff, 0x01, 0x00, 0x00, 0x0e, 0x00, 0x00, 0xf8, 0xff, 0x01, 0x00, 0x00,
+0x0e, 0x00, 0x00, 0xfc, 0xff, 0x21, 0x00, 0x00, 0x0e, 0x00, 0x00, 0xfc,
+0xff, 0x31, 0x00, 0x00, 0x0e, 0x00, 0x00, 0xfc, 0x7f, 0x18, 0x00, 0x00,
+0x1c, 0x00, 0x00, 0xfc, 0x3f, 0x18, 0x00, 0x00, 0x1c, 0x00, 0x00, 0xf8,
+0x3f, 0x0c, 0x00, 0x00, 0x18, 0x00, 0x00, 0xf8, 0x3f, 0x0c, 0x00, 0x00,
+0x08, 0x00, 0x00, 0xf8, 0x1f, 0x04, 0x00, 0x00, 0x18, 0x00, 0x00, 0xf0,
+0x0f, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0xe0,
+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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00};
--- /dev/null
+#define terra29_width 64
+#define terra29_height 64
+#define terra29_x_hot 32
+#define terra29_y_hot 32
+static unsigned char terra29_bits[] = {
+0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07,
+0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xdf, 0x0f, 0x00, 0x00,
+0x00, 0x00, 0x08, 0x80, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
+0xfb, 0xff, 0x00, 0x00, 0x00, 0x40, 0x00, 0x8c, 0xf9, 0xff, 0x03, 0x00,
+0x00, 0x20, 0x00, 0xce, 0xff, 0xff, 0x07, 0x00, 0x00, 0x18, 0x00, 0xf8,
+0xff, 0xff, 0x1f, 0x00, 0x00, 0x04, 0x00, 0xfc, 0xff, 0xff, 0x3f, 0x00,
+0x00, 0x00, 0x00, 0xf8, 0xfe, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x0f,
+0xf9, 0xff, 0xff, 0x00, 0x00, 0x00, 0x80, 0x07, 0xda, 0xff, 0xff, 0x01,
+0x00, 0x00, 0x80, 0x03, 0x90, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x7d,
+0x00, 0xf8, 0xff, 0x03, 0x00, 0x00, 0xc0, 0xff, 0x00, 0xf8, 0xff, 0x07,
+0x00, 0x00, 0xc0, 0xff, 0xf3, 0xff, 0xff, 0x07, 0x00, 0x00, 0xe0, 0xff,
+0xff, 0xff, 0xfd, 0x0f, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xf7, 0xf3, 0x1f,
+0x00, 0x00, 0xf8, 0xff, 0xff, 0xef, 0x07, 0x1f, 0x00, 0x00, 0xfc, 0xff,
+0xff, 0xef, 0x3f, 0x1e, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xdf, 0x3f, 0x1c,
+0x00, 0x00, 0xfc, 0xff, 0xff, 0x9f, 0x3f, 0x18, 0x00, 0x00, 0xfc, 0xff,
+0xff, 0xbf, 0x1f, 0x18, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x7f, 0x0f, 0x18,
+0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x03, 0x10, 0x00, 0x00, 0xfe, 0xff,
+0xff, 0xff, 0x00, 0x10, 0x02, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x0f, 0x00,
+0x03, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x07, 0x00, 0x03, 0x00, 0xf0, 0xf3,
+0xff, 0xff, 0x07, 0x00, 0x07, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x07, 0x00,
+0x07, 0x00, 0x00, 0x80, 0xff, 0xff, 0x03, 0x00, 0x07, 0x00, 0x00, 0x80,
+0xff, 0xff, 0x01, 0x00, 0x1f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x00, 0x00,
+0x3f, 0x00, 0x00, 0x80, 0xff, 0x7f, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
+0xff, 0x7f, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00,
+0xff, 0x01, 0x00, 0x00, 0xfe, 0x3f, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00,
+0xfe, 0x7f, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0xfe, 0x7f, 0x00, 0x00,
+0xfe, 0x00, 0x00, 0x00, 0xfe, 0x7f, 0x04, 0x00, 0xfe, 0x00, 0x00, 0x00,
+0xff, 0x7f, 0x06, 0x00, 0xfe, 0x00, 0x00, 0x00, 0xff, 0x1f, 0x07, 0x00,
+0xfc, 0x00, 0x00, 0x00, 0xff, 0x0f, 0x03, 0x00, 0xfc, 0x00, 0x00, 0x00,
+0xfe, 0x0f, 0x03, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfe, 0x0f, 0x01, 0x00,
+0x78, 0x00, 0x00, 0x00, 0xfc, 0x07, 0x01, 0x00, 0x70, 0x00, 0x00, 0x00,
+0xfc, 0x03, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00,
+0x60, 0x00, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00,
+0x78, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x03, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00};
--- /dev/null
+#define trek0_width 241
+#define trek0_height 102
+static unsigned char trek0_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,
+ 0xe0, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc7, 0xff, 0x85, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff,
+ 0xff, 0x3f, 0x00, 0x29, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xf8, 0xc1, 0xff, 0x00, 0x00, 0x00, 0xc5, 0x14,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
+ 0x7b, 0x00, 0x00, 0xff, 0xbf, 0xb2, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x00, 0x80,
+ 0x92, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xf0, 0xff, 0x07, 0x00, 0x00, 0x00, 0x40, 0x05, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x20, 0x39, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x09, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x5f, 0x33, 0x68, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7f,
+ 0xf0, 0x89, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x24,
+ 0x34, 0x00, 0x00, 0x00, 0x00, 0x78, 0xfe, 0x4f, 0x16, 0x0c, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
+ 0x1f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xd4, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0xfa, 0x01, 0xc0, 0xfa, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xe0, 0xff, 0xff, 0xff, 0x01,
+ 0x40, 0x52, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xa0, 0x22, 0x13,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc0, 0x01, 0x00, 0x00, 0x10, 0xfb, 0xbf, 0x10, 0x09, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x50, 0x22, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0xfd, 0x0f,
+ 0x88, 0x04, 0x80, 0xc2, 0x06, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1f,
+ 0xe2, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf4, 0x67, 0x78, 0x00, 0x95, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x68, 0x19, 0x1b, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0x13, 0x70, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x28, 0x0b, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x08, 0x00,
+ 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0xa8, 0x04, 0x24, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1b, 0xf8, 0x6b, 0x07, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x82,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x94, 0x00,
+ 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1d, 0x00, 0x24, 0x05, 0x1a, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x88, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01,
+ 0x28, 0x1b, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x1f, 0xa8, 0xf0, 0x2b, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xfe, 0x33, 0x56, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x12, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x8d, 0x48, 0x74,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xaa, 0x00, 0x09, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x6e, 0x5b, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x94, 0x80, 0x04,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70,
+ 0xa0, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xf0, 0xab, 0x43, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0a, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x56,
+ 0xee, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x60, 0x14, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x4a, 0xc6, 0x12, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x40,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
+ 0x2b, 0x71, 0xa7, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x0e, 0x25, 0x07, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x25, 0x11, 0x45, 0x03, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x25, 0x11, 0x49,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xe0, 0x22, 0x11, 0x88, 0xfe, 0x87, 0x80, 0xff, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xef, 0x22,
+ 0x81, 0x0b, 0x3d, 0x78, 0xbf, 0xff, 0xff, 0xff, 0x03, 0x80, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0xec, 0xef, 0xb9, 0xde, 0x3f, 0xc0,
+ 0xff, 0xf9, 0xff, 0xfb, 0xff, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x40, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x5b, 0x7e,
+ 0x8f, 0x81, 0x20, 0x00, 0x03, 0xf8, 0xc0, 0x7f, 0x00, 0x80, 0xff, 0x07,
+ 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0d, 0x0c, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xe0, 0x6f, 0xdb, 0xc7, 0x60, 0x40, 0x40, 0x00, 0x1c,
+ 0x00, 0x0f, 0x80, 0x7f, 0x00, 0x00, 0xf8, 0x6f, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x32, 0x10, 0x00, 0x00, 0x00, 0x00, 0x80, 0x9f, 0x7f,
+ 0x7b, 0x3c, 0x18, 0x20, 0x40, 0x00, 0x60, 0x00, 0xf0, 0x03, 0x80, 0x7f,
+ 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x60,
+ 0x00, 0x00, 0x00, 0x00, 0x7f, 0x7e, 0xdf, 0xc7, 0x03, 0x07, 0x10, 0x80,
+ 0x00, 0x80, 0x03, 0x00, 0x7c, 0x00, 0x80, 0xff, 0xf0, 0x91, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x98,
+ 0xf9, 0x3c, 0x38, 0xc0, 0x00, 0x08, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x80,
+ 0x0f, 0x00, 0xc0, 0x0c, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x81, 0x01, 0x00, 0xe0, 0x73, 0xa4, 0xc7, 0x03, 0x07, 0x30, 0x00,
+ 0x06, 0x00, 0x01, 0x00, 0x30, 0x00, 0x00, 0xf0, 0x81, 0x3f, 0x04, 0x48,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x06, 0x02, 0x00, 0xde,
+ 0x8b, 0x3d, 0x3c, 0xe0, 0x00, 0x0c, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc0,
+ 0x01, 0x00, 0x00, 0x7a, 0x00, 0x04, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x19, 0x0c, 0xc0, 0x07, 0xfc, 0xe1, 0x03, 0x1e, 0x80,
+ 0x03, 0x80, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0e, 0x00, 0xf0, 0x07, 0x00,
+ 0x02, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x10,
+ 0xde, 0xb9, 0x07, 0x1e, 0xc0, 0x01, 0x60, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x10, 0xf0, 0x0f, 0x04, 0x00, 0x02, 0x2c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x00, 0xe7, 0x01, 0x0e, 0x80, 0x07,
+ 0x00, 0x06, 0x00, 0x20, 0x00, 0x00, 0x88, 0xff, 0xff, 0xff, 0x1f, 0x00,
+ 0x02, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x40, 0x13, 0x1f, 0xf0, 0x01, 0x78, 0x00, 0xc0, 0x01, 0x00, 0x10, 0x00,
+ 0xf8, 0x67, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02, 0x00, 0xb9, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7c, 0x00, 0x0f, 0x00,
+ 0x06, 0x00, 0x20, 0x00, 0x00, 0x88, 0xff, 0x07, 0x10, 0x00, 0x00, 0x10,
+ 0x00, 0x00, 0x02, 0x80, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x73, 0xbf, 0x00, 0xc0, 0x01, 0x00, 0x18, 0x00, 0xe0,
+ 0x7f, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02, 0x9c, 0x0f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc4, 0x80,
+ 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x1f, 0x04, 0x00, 0x00, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xe1, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x80, 0x00, 0x20, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x78, 0xe2,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0x80, 0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0xfc, 0x87, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x01, 0x40, 0x00,
+ 0x00, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x10, 0x00, 0xf8, 0xff, 0x03,
+ 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0x01, 0x01, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x10, 0xff, 0x07, 0x08, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00,
+ 0x80, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0xff, 0x1f, 0xf2, 0x7f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf9, 0x7f, 0x01, 0x00, 0x10, 0x00,
+ 0xc0, 0xf7, 0xff, 0xff, 0xdd, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xd0, 0x39, 0x80, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xdf, 0x41, 0x92,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xdc, 0xfd, 0xfb, 0xff,
+ 0xff, 0xff, 0x3e, 0xc0, 0x22, 0x42, 0xd0, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x44,
+ 0x22, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x0c,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0xd0, 0x89, 0x22, 0x75, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, 0x00, 0x80, 0x00,
+ 0x30, 0x12, 0x24, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x98, 0x61, 0x00, 0x00, 0x00, 0x80, 0x00, 0x30, 0x2c, 0xa4, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0x01, 0x00, 0x00,
+ 0x80, 0x00, 0x30, 0x50, 0xa5, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x19, 0x04, 0x00, 0x00, 0x80, 0x00, 0x18, 0x80, 0x4d,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x08,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc4, 0x30, 0x00, 0x00, 0x60, 0x00, 0x0c,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x41, 0x00, 0x00, 0x20, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x86, 0xf1, 0xff, 0xff,
+ 0x17, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0x08, 0xf2, 0xff, 0x3f, 0x6c, 0x0e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x04,
+ 0x00, 0x20, 0x8c, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0xd0, 0x4c, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x88, 0x60, 0x0b, 0x18, 0x10, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x0c, 0xf0, 0x03, 0x06,
+ 0xac, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x08, 0x00, 0x0c, 0x41, 0x0a, 0x3d, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x00,
+ 0x91, 0x00, 0x05, 0x71, 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, 0x03, 0x00, 0x61, 0xa1, 0x84, 0x41, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
+ 0x0c, 0x80, 0x80, 0x5a, 0xcc, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x10, 0x80, 0x40, 0x20, 0x32,
+ 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0xe0, 0x40, 0x40, 0x2c, 0x0d, 0x70, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x43, 0x20,
+ 0xd2, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x40, 0x01, 0x3c, 0x20, 0x4a, 0x01, 0xc0, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
+ 0x20, 0x03, 0x65, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x20, 0xbc, 0x64, 0x00, 0x00,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x20, 0x20, 0xd0, 0x12, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x20, 0x10, 0x09,
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xa0, 0x21, 0x90, 0x04, 0x00, 0x00, 0x05, 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, 0x22,
+ 0x90, 0x34, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x90, 0x34, 0x00, 0x00, 0x05,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x32, 0x90, 0x34, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x90, 0x34, 0x00,
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x58, 0x7c, 0x0d, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x10,
+ 0x23, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x6a, 0x00, 0x40, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x21, 0x92, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x54, 0x02, 0xb0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x47, 0xa8, 0x0d, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x0c,
+ 0xd6, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x42, 0xf8, 0x22, 0x00, 0x00, 0x00,
+ 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, 0x4c, 0x11, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x31, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define trek1_width 241
+#define trek1_height 67
+static unsigned char trek1_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe5, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff,
+ 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x05, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xc0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x05,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x2f, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xdc, 0xff, 0x3f, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0xc0, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x20, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x78, 0x00, 0x00, 0x80, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xe0,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x56, 0x00, 0x00, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xf8, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0xff, 0xff,
+ 0x7f, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1f, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x40, 0xe0, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54,
+ 0x00, 0x00, 0x7e, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x43, 0xc0, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x4c, 0x00, 0x00, 0x42, 0x60, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff,
+ 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff,
+ 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x42,
+ 0xe0, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xf0, 0xff, 0x07, 0x08, 0x00, 0x02, 0x80, 0xf8, 0xff, 0xff,
+ 0xff, 0x3f, 0x00, 0x80, 0xff, 0xff, 0x43, 0x20, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x80, 0x00,
+ 0x08, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0xc2, 0xc0, 0x1f, 0x00, 0x00,
+ 0x00, 0x42, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x83, 0x00, 0x01, 0x00, 0x00, 0x02, 0x80, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x30, 0x00, 0x00, 0x00, 0x42, 0x20, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85,
+ 0x00, 0x01, 0xf0, 0xff, 0xff, 0x7f, 0xff, 0x3f, 0x80, 0x03, 0x00, 0x20,
+ 0x00, 0x00, 0x00, 0x26, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x80, 0xff, 0x1f, 0x00, 0x02,
+ 0x80, 0x00, 0xe0, 0xff, 0xdf, 0x81, 0x30, 0x00, 0x00, 0x00, 0x26, 0x30,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3a, 0x00, 0xfe, 0x3f, 0x1f, 0x08, 0xc0, 0xff, 0x7f, 0x80, 0xf0,
+ 0xff, 0x1f, 0x00, 0x00, 0x00, 0x24, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0xfe, 0x07, 0xff,
+ 0xe0, 0x39, 0x20, 0xf0, 0x81, 0xff, 0x1f, 0x40, 0x06, 0x00, 0x00, 0x00,
+ 0x24, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x44, 0x10, 0xe1, 0xff,
+ 0xff, 0xff, 0x2f, 0x03, 0x00, 0x00, 0x00, 0x24, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
+ 0xff, 0xff, 0x3f, 0xd2, 0x09, 0x68, 0xbe, 0x00, 0x00, 0xc0, 0x01, 0x00,
+ 0x00, 0x00, 0x24, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xfd, 0x3f, 0xfe, 0x24, 0x49,
+ 0xd4, 0x7f, 0x01, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x24, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x5f, 0x4b, 0xef, 0xf7, 0x03, 0x00, 0x80,
+ 0x03, 0x00, 0x00, 0x00, 0x24, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x06, 0x2a, 0x1c, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x24,
+ 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x8a, 0x06, 0x00, 0x0c,
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x24, 0x08, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x58, 0x8b, 0x03, 0x00, 0x10, 0x00, 0x00, 0x0c, 0x00, 0x00,
+ 0x00, 0x24, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf4, 0x00,
+ 0x00, 0x30, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x24, 0x08, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x75, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x38,
+ 0x00, 0x00, 0x00, 0x24, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3f, 0x00, 0x00, 0x40, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x24, 0x08,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0x00, 0x60, 0x00, 0x00, 0x00, 0x24, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0xc0, 0x00, 0x00, 0x00,
+ 0x28, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0c, 0x00, 0x80, 0x01, 0x00, 0x00, 0x28, 0x08, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x38, 0x08, 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, 0x1f, 0x06, 0x00, 0x00, 0x18, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x3f,
+ 0xff, 0x1d, 0x00, 0x00, 0x18, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xe0, 0x17, 0x00, 0x02, 0xe0, 0x3f, 0x00, 0x18,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xf4, 0xff, 0xff, 0x07, 0xc0, 0xff, 0x1b, 0x04, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x01, 0xf8, 0xfe,
+ 0x9f, 0x1f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x02, 0x00, 0x01, 0x00, 0x01, 0xe0, 0x7f, 0x04, 0x2f, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x02, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x60, 0xfe, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x08, 0xfe, 0xff, 0xff, 0xff, 0x0b, 0x00, 0xc0, 0x01,
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x03,
+ 0x00, 0x01, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x08, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x02, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xe8, 0x03, 0x00, 0xf9, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xfe, 0xff,
+ 0x07, 0x00, 0x00, 0x00, 0x00, 0x80, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x08, 0x12, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x78, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
+ 0x12, 0x00, 0x01, 0x00, 0x00, 0xff, 0xff, 0x07, 0x06, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0xfb, 0x3f, 0x01, 0xff, 0xff,
+ 0x00, 0x80, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xd0, 0x12, 0xc0, 0xff, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x12, 0x00, 0x01,
+ 0x80, 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, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00};
--- /dev/null
+#define trek2_width 281
+#define trek2_height 82
+static unsigned char trek2_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
+ 0x01, 0x3e, 0x80, 0x40, 0x03, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02,
+ 0x08, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x80, 0x70, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x81, 0x01, 0x00,
+ 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x82, 0x80, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x0c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x00,
+ 0x0c, 0x00, 0xe1, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0e, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x80, 0x43, 0x4a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x81, 0x01, 0xe0,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x82, 0x80, 0x41, 0x12, 0x52, 0x06, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x0c,
+ 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x22, 0x25, 0x0d, 0x69, 0x81, 0x0f, 0x00, 0x00, 0x00, 0x80,
+ 0x0f, 0xf0, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x08, 0x00, 0x74, 0x00,
+ 0x00, 0x02, 0x02, 0x60, 0x29, 0x89, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff,
+ 0x07, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x30, 0x06, 0x20,
+ 0x00, 0x04, 0x04, 0x10, 0x23, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x66, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x80, 0x00, 0xc0, 0x18, 0x0d, 0x40,
+ 0x02, 0x08, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf5,
+ 0x37, 0x7f, 0x00, 0xe0, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0x07, 0x08, 0x01, 0x80, 0x51, 0x08, 0x02, 0x40,
+ 0x00, 0x20, 0x20, 0xb0, 0x00, 0x00, 0x00, 0x08, 0x1b, 0x00, 0x00, 0x00,
+ 0x40, 0x08, 0x21, 0xb0, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x20, 0x04, 0x00, 0x46, 0x25, 0x08, 0x0b, 0x40,
+ 0x00, 0x08, 0x00, 0x43, 0x1e, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x91,
+ 0x31, 0x62, 0x4c, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x20, 0x00, 0x88, 0x00, 0x8c, 0xd2, 0x14, 0x84, 0x41, 0x00,
+ 0x00, 0x00, 0x01, 0x30, 0x32, 0x18, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x30, 0x8a, 0xd2, 0x14, 0x02, 0x01, 0x04,
+ 0x00, 0x80, 0x00, 0x4c, 0xb0, 0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0x80, 0x00, 0x00, 0x3a, 0x16, 0xd1, 0x14, 0x06, 0x40, 0x00,
+ 0x00, 0x02, 0x81, 0x02, 0x26, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+ 0x07, 0x00, 0x00, 0x40, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0x00, 0x00, 0x28, 0x1a, 0x82, 0xb0, 0x0c, 0x00, 0x03, 0x00,
+ 0x20, 0x20, 0x30, 0x01, 0xf0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0x10, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x1a, 0x92, 0x30, 0x00, 0x18, 0xf0, 0xdf,
+ 0x5f, 0x02, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00,
+ 0x38, 0x00, 0x00, 0x40, 0x00, 0x04, 0x18, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x40, 0x00, 0x22, 0x96, 0x62, 0x00, 0x40, 0x00, 0x00, 0x00,
+ 0x38, 0x00, 0x00, 0x20, 0x00, 0x32, 0x00, 0x00, 0x20, 0xa5, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x00, 0x18, 0x00, 0x08, 0x00, 0x00,
+ 0x00, 0x00, 0x40, 0x20, 0x06, 0x16, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x24, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x85, 0x52, 0x03, 0x00,
+ 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x40, 0x40, 0x24, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x42, 0x28, 0xa5, 0x0c, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x08, 0x40, 0x00, 0x00, 0x00, 0x06, 0x00,
+ 0x00, 0x00, 0x40, 0x08, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0xc0,
+ 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x08, 0x10, 0x4a, 0x29, 0x14, 0x00,
+ 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x01, 0x04, 0x00, 0x19, 0x22, 0x00,
+ 0x00, 0x00, 0x40, 0x00, 0x80, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x00, 0x40, 0x10, 0x00, 0x00, 0x03, 0x00, 0x20, 0x85, 0x50, 0x2b, 0x01,
+ 0x00, 0x00, 0x80, 0x82, 0x08, 0x00, 0x10, 0x20, 0x20, 0x00, 0x20, 0x00,
+ 0x00, 0x00, 0x13, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00,
+ 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xb4, 0xd0, 0x90,
+ 0x01, 0x00, 0x00, 0x40, 0x88, 0x00, 0x00, 0x00, 0x08, 0x00, 0x80, 0x00,
+ 0x00, 0x40, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x10, 0x0a, 0x21, 0x10,
+ 0x24, 0x00, 0x00, 0x04, 0x01, 0x08, 0x80, 0xa0, 0x04, 0x00, 0x63, 0x00,
+ 0x00, 0xe0, 0x3d, 0x00, 0x10, 0x04, 0x00, 0x00, 0x24, 0x06, 0x00, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x94, 0x92, 0x00,
+ 0x02, 0x09, 0x48, 0x40, 0x28, 0x44, 0x40, 0x00, 0x09, 0x80, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x80, 0x00, 0x01, 0x20, 0x00,
+ 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0xad, 0x14, 0x00,
+ 0x40, 0x40, 0x26, 0x08, 0x85, 0x02, 0x20, 0x06, 0x10, 0x00, 0x61, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x04, 0x03, 0x00, 0x40, 0x00, 0x60,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x02, 0x02, 0x42, 0x09, 0x40,
+ 0x00, 0x04, 0x00, 0x82, 0x08, 0x10, 0x12, 0x14, 0x20, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x03, 0x00, 0x80, 0x04, 0x40, 0x4a,
+ 0x00, 0x0c, 0x00, 0x00, 0x80, 0x00, 0x04, 0x04, 0x00, 0x82, 0x02, 0x00,
+ 0x00, 0x40, 0x00, 0x41, 0x88, 0x02, 0x80, 0x08, 0x20, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x80, 0x80, 0x60, 0x20,
+ 0x04, 0x00, 0x00, 0xe0, 0x03, 0x10, 0x20, 0x08, 0x0c, 0x08, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x84, 0x10, 0x06, 0x22, 0x20, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x80, 0x02, 0x01, 0x20, 0x04,
+ 0x00, 0x70, 0x00, 0x00, 0x18, 0x10, 0x01, 0x01, 0x10, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x00, 0x41, 0x44, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00, 0x04, 0x00,
+ 0x0c, 0x00, 0x00, 0x18, 0x00, 0x00, 0x02, 0x08, 0x11, 0x00, 0x00, 0x04,
+ 0x01, 0x08, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x18, 0x04, 0x00, 0x08, 0x00, 0x08,
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x10, 0x00, 0x08, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x10, 0x04, 0x00, 0x00, 0x00, 0x02, 0x21, 0x00, 0x00, 0x40,
+ 0x10, 0x08, 0x02, 0x40, 0x00, 0x08, 0x02, 0x20, 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x20, 0x00, 0x18, 0x00, 0x00,
+ 0x18, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x08, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x22, 0x20, 0x00, 0x00, 0x30,
+ 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0x09, 0x50, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x80, 0x01, 0x08, 0x00, 0x04,
+ 0x00, 0x01, 0x00, 0x01, 0x20, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x40, 0x30, 0x00, 0x20, 0x20, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0x20, 0x00, 0x08,
+ 0x08, 0x04, 0x00, 0x00, 0x80, 0x40, 0x00, 0x81, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x01, 0x02, 0x20, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x14, 0x80, 0x00, 0x40,
+ 0x08, 0x10, 0x00, 0x28, 0x00, 0x02, 0x00, 0x94, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x03, 0x08,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x08, 0x40, 0x4c, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x82, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x06, 0x40, 0x04, 0x03, 0x80, 0x00, 0x04, 0x00,
+ 0xc0, 0x00, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x00, 0x20, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x22, 0x92, 0x00, 0x02, 0x10, 0x00,
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x20, 0x00, 0x02, 0x00, 0x00, 0x02, 0x01, 0xc0, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x01, 0x04, 0x08, 0x00, 0x00,
+ 0x00, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0xc0, 0x80, 0x00, 0x00, 0x08,
+ 0x00, 0x32, 0x00, 0x00, 0x20, 0x02, 0x01, 0x04, 0x10, 0x26, 0x00, 0x00,
+ 0x00, 0x08, 0x80, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x32, 0x01, 0x00, 0x04, 0x00,
+ 0x79, 0x92, 0x00, 0x08, 0x81, 0x06, 0x10, 0x20, 0x08, 0x80, 0x00, 0x00,
+ 0x00, 0x10, 0x40, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x30, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x23, 0x00, 0x20, 0x00,
+ 0x01, 0x92, 0x06, 0x00, 0x02, 0x20, 0x40, 0x10, 0x00, 0x02, 0x00, 0x04,
+ 0x08, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3c, 0x01, 0x00, 0x00, 0x08, 0x00, 0x02, 0x05, 0x00, 0x40, 0x01,
+ 0x29, 0x0f, 0xc2, 0x00, 0x0c, 0x41, 0x10, 0x00, 0x03, 0x06, 0x06, 0x00,
+ 0x00, 0x60, 0x00, 0x01, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x5a, 0x06, 0x00, 0x00, 0x84, 0x00, 0x88, 0x10, 0x00, 0x00, 0x05,
+ 0x2c, 0xb0, 0x19, 0x08, 0xe0, 0x01, 0x00, 0x04, 0x08, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc8, 0x03, 0x00, 0x00, 0x84, 0x00, 0x30, 0x00, 0x00, 0x00, 0x80,
+ 0x14, 0x04, 0x01, 0x80, 0x08, 0x00, 0x04, 0x28, 0x90, 0x20, 0x01, 0x08,
+ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x14, 0x00, 0x00, 0x00, 0x50, 0x00, 0x04, 0x0c, 0x00, 0x00, 0x30,
+ 0x98, 0x02, 0x00, 0x40, 0xa0, 0x80, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x18, 0xc8, 0x18, 0x00, 0x00, 0x00, 0x22,
+ 0x20, 0x44, 0x80, 0x01, 0x10, 0x80, 0x80, 0x30, 0x00, 0x00, 0x25, 0x01,
+ 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x40, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x1a, 0x00, 0x00, 0x80, 0x00,
+ 0x01, 0xa4, 0x00, 0xb0, 0x01, 0x12, 0x00, 0xa0, 0x05, 0x01, 0x0c, 0x00,
+ 0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x40, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x18, 0x00, 0x00, 0xc0, 0x00,
+ 0x00, 0x00, 0x10, 0x90, 0x12, 0x80, 0x00, 0x98, 0x02, 0x00, 0x08, 0x00,
+ 0x01, 0x08, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x01, 0x01, 0x00, 0xc0, 0x00, 0x08,
+ 0x00, 0x40, 0x00, 0x80, 0x40, 0x00, 0x00, 0x02, 0x00, 0x80, 0x80, 0x10,
+ 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x00, 0x60, 0x02, 0x10, 0x10, 0x80, 0x02, 0x00, 0x01, 0x00, 0x20,
+ 0x10, 0x00, 0x00, 0x30, 0x22, 0x03, 0x00, 0x00, 0x00, 0x01, 0x20, 0x20,
+ 0x00, 0x00, 0x20, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x40, 0x00, 0x40, 0x40, 0x80, 0x02, 0x04, 0x00, 0x06, 0x00, 0x00, 0x70,
+ 0x00, 0x00, 0x00, 0x04, 0x48, 0x18, 0x00, 0x00, 0x02, 0x00, 0x10, 0x00,
+ 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x40, 0x00, 0x05, 0x08, 0x02, 0x05, 0x00, 0x00, 0x20, 0x46,
+ 0x00, 0x00, 0x40, 0x20, 0x04, 0x28, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01,
+ 0x10, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x50, 0x60, 0x00, 0x02, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x4a,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x23, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xa0, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0x04, 0x00, 0x04, 0x20, 0x40, 0x00, 0x80, 0x00, 0x00, 0x44,
+ 0xc0, 0x33, 0x0a, 0x80, 0x52, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
+ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x01, 0x00, 0x10, 0x04, 0x00, 0x20, 0x00, 0x03, 0x80, 0x31, 0x08,
+ 0x00, 0x00, 0x50, 0x00, 0x0a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x30, 0x00, 0x06, 0x02, 0x10, 0x04, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x0c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x08, 0x02, 0x00, 0x00, 0x00, 0x40, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x20, 0x00, 0xc0, 0x01, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x24, 0x48, 0x00, 0x40, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x08, 0x30, 0x10, 0x88, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x18, 0x00, 0x00, 0x00, 0x00, 0x20,
+ 0x20, 0x02, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x38, 0x00, 0x02, 0x01, 0x88, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x00, 0x02, 0x00, 0x00, 0x04, 0x10, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x80, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x40, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00,
+ 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x01, 0x10, 0x08, 0x00, 0x01, 0x08,
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x01, 0x08, 0x01,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x20, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x08,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x3d, 0x4c, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80,
+ 0x0b, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
+ 0x48, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xc0,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10,
+ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
+ 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00,
+ 0x20, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x30,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define vlines2_width 2
+#define vlines2_height 1
+static unsigned char vlines2_bits[] = {
+ 0x01};
--- /dev/null
+#define vlines3_width 3
+#define vlines3_height 1
+static unsigned char vlines3_bits[] = {
+ 0x02};
--- /dev/null
+
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)blank.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * blank.c - blank screen 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver :) OK you probably should not
+ * use this for xscreensaver but I could not resist.
+ * 21-Mar-96: Ron Hitchens <ron@idiom.com>
+ * Bonehead alert. Don't blank during password prompting.
+ * 19-Mar-96: Ron Hitchens <ron@idiom.com>
+ * Changed to activate X server's native screensaver.
+ * On some devices, this will result in power saving "sleep"
+ * mode, or video blanking.
+ * 31-Aug-90: Written.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Blank"
+#define HACK_INIT init_blank
+#define HACK_DRAW draw_blank
+#define DEF_DELAY 3000000
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+
+ModeSpecOpt blank_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+extern enablesaver;
+
+void
+init_blank(ModeInfo * mi)
+{
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+ /* Must set PreferBlanking, or XForceScreenSaver won't work */
+ if (!MI_WIN_IS_INWINDOW(mi) && !MI_WIN_IS_INROOT(mi) && enablesaver)
+ XSetScreenSaver(MI_DISPLAY(mi), 0, 0, PreferBlanking, 0);
+}
+
+/* ARGSUSED */
+void
+draw_blank(ModeInfo * mi)
+{
+ /* Leave the lights on while user types password */
+ if (!MI_WIN_IS_INWINDOW(mi) && !MI_WIN_IS_INROOT(mi) && enablesaver) {
+ if (MI_WIN_IS_ICONIC(mi))
+ XForceScreenSaver(MI_DISPLAY(mi), ScreenSaverReset);
+ else
+ XForceScreenSaver(MI_DISPLAY(mi), ScreenSaverActive);
+ }
+}
+
+void
+release_blank(ModeInfo * mi)
+{
+ /* clear screensaver settings, just in case */
+ if (!MI_WIN_IS_INWINDOW(mi) && !MI_WIN_IS_INROOT(mi) && enablesaver) {
+ XForceScreenSaver(MI_DISPLAY(mi), ScreenSaverReset);
+ XSetScreenSaver(MI_DISPLAY(mi), 0, 0, 0, 0);
+ }
+}
+
+void
+refresh_blank(ModeInfo * mi)
+{
+ /* Do nothing, it will refresh by itself :) */
+}
--- /dev/null
+
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)blot.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * Rorschach's ink blot test
+ *
+ * Copyright (c) 1992 by Jamie Zawinski
+ *
+ * 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.
+ *
+ * 10-May-97: Compatible with xscreensaver
+ * 05-Jan-95: patch for Dual-Headed machines from Greg Onufer
+ * <Greg.Onufer@Eng.Sun.COM>
+ * 07-Dec-94: now randomly has xsym, ysym, or both.
+ * 02-Sep-93: xlock version David Bagley <bagleyd@bigfoot.com>
+ * 1992: xscreensaver version Jamie Zawinski <jwz@netscape.com>
+ */
+
+/*-
+ * original copyright
+ * Copyright (c) 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.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Blot"
+#define HACK_INIT init_blot
+#define HACK_DRAW draw_blot
+#define DEF_DELAY 200000
+#define DEF_BATCHCOUNT 6
+#define DEF_CYCLES 30
+#define DEF_NCOLORS 200
+#define BRIGHT_COLORS
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt blot_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+typedef struct {
+ int width;
+ int height;
+ int xmid, ymid;
+ int offset;
+ int xsym, ysym;
+ unsigned long size;
+ int pix;
+ int count;
+ XPoint *pointBuffer;
+ unsigned long pointBufferSize;
+} blotstruct;
+
+static blotstruct *blots = NULL;
+
+void
+init_blot(ModeInfo * mi)
+{
+ blotstruct *bp;
+ Display *display = MI_DISPLAY(mi);
+
+ if (blots == NULL) {
+ if ((blots = (blotstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (blotstruct))) == NULL)
+ return;
+ }
+ bp = &blots[MI_SCREEN(mi)];
+
+ bp->width = MI_WIN_WIDTH(mi);
+ bp->height = MI_WIN_HEIGHT(mi);
+ bp->xmid = bp->width / 2;
+ bp->ymid = bp->height / 2;
+
+ bp->offset = 4;
+ bp->ysym = LRAND() & 1;
+ bp->xsym = (bp->ysym) ? LRAND() & 1 : 1;
+ if (MI_NPIXELS(mi) > 2)
+ bp->pix = NRAND(MI_NPIXELS(mi));
+ if (bp->offset <= 0)
+ bp->offset = 3;
+ if (MI_BATCHCOUNT(mi) < 0)
+ bp->size = NRAND(-MI_BATCHCOUNT(mi) + 1);
+ else
+ bp->size = MI_BATCHCOUNT(mi);
+
+ /* Fudge the size so it takes up the whole screen */
+ bp->size *= (unsigned long) (bp->width / 32 + 1) * (bp->height / 32 + 1);
+ if (!bp->pointBuffer || bp->pointBufferSize < bp->size * sizeof (XPoint)) {
+ if (bp->pointBuffer != NULL)
+ (void) free((void *) bp->pointBuffer);
+ bp->pointBufferSize = bp->size * sizeof (XPoint);
+ bp->pointBuffer = (XPoint *) malloc(bp->pointBufferSize);
+ }
+ XClearWindow(display, MI_WINDOW(mi));
+ XSetForeground(display, MI_GC(mi), MI_WIN_WHITE_PIXEL(mi));
+ bp->count = 0;
+}
+
+void
+draw_blot(ModeInfo * mi)
+{
+ blotstruct *bp = &blots[MI_SCREEN(mi)];
+ XPoint *xp = bp->pointBuffer;
+ int x, y;
+ unsigned long k;
+
+ if (MI_NPIXELS(mi) > 2) {
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_PIXEL(mi, bp->pix));
+ if (++bp->pix >= MI_NPIXELS(mi))
+ bp->pix = 0;
+ }
+ x = bp->xmid;
+ y = bp->ymid;
+ k = bp->size;
+ while (k >= 4) {
+ x += (NRAND(1 + (bp->offset << 1)) - bp->offset);
+ y += (NRAND(1 + (bp->offset << 1)) - bp->offset);
+ k--;
+ xp->x = x;
+ xp->y = y;
+ xp++;
+ if (bp->xsym) {
+ k--;
+ xp->x = bp->width - x;
+ xp->y = y;
+ xp++;
+ }
+ if (bp->ysym) {
+ k--;
+ xp->x = x;
+ xp->y = bp->height - y;
+ xp++;
+ }
+ if (bp->xsym && bp->ysym) {
+ k--;
+ xp->x = bp->width - x;
+ xp->y = bp->height - y;
+ xp++;
+ }
+ }
+ XDrawPoints(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ bp->pointBuffer, (bp->size - k), CoordModeOrigin);
+ if (++bp->count > MI_CYCLES(mi))
+ init_blot(mi);
+}
+
+
+void
+release_blot(ModeInfo * mi)
+{
+ if (blots != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ if (blots[screen].pointBuffer != NULL) {
+ (void) free((void *) blots[screen].pointBuffer);
+ }
+ }
+ (void) free((void *) blots);
+ blots = NULL;
+ }
+}
+
+void
+refresh_blot(ModeInfo * mi)
+{
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+}
--- /dev/null
+
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)bomb.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * bomb.c - temporary screen lock for xlock, the X Window System lockscreen.
+ *
+ * Copyright (c) 1994 by Dave Shield
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Made more compatible with xscreensaver :)
+ * 09-Jan-95: Assorted defines to control various aspects of bomb mode.
+ * Uncomment, or otherwise define the appropriate line
+ * to obtain the relevant behaviour, thanks to Dave Shield
+ * <D.T.Shield@csc.liv.ac.uk>.
+ * 20-Dec-94: Time patch for multiprocessor machines (ie. Sun10) thanks to
+ * Nicolas Pioch <pioch@Email.ENST.Fr>.
+ * 1994: Written. Dave Shield Liverpool Computer Science
+ */
+
+/*-
+ * This mode may have limited appeal. Its good for logging yourself out
+ * if you do not know if your going to be back. It is no longer to be used
+ * as a way of forcing users in a lab to logout after locking the screen.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Bomb"
+#define HACK_INIT init_bomb
+#define HACK_DRAW draw_bomb
+#define DEF_DELAY 100000
+#define DEF_BATCHCOUNT 10
+#define DEF_CYCLES 20
+#define DEF_NCOLORS 200
+#define SPREAD_COLORS
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+#endif /* STANDALONE */
+
+#ifdef USE_BOMB
+
+#ifndef STANDALONE
+ModeSpecOpt bomb_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+#include <sys/signal.h>
+
+#if 0
+#define SIMPLE_COUNTDOWN /* Display a simple integer countdown, */
+#endif
+ /* rather than a "MIN:SEC" format. */
+#define COLOUR_CHANGE /* Display cycles through the colour wheel */
+ /* rather than staying red throughout. */
+
+#define FULL_COUNT_FONT "-*-*-*-*-*-*-34-*-*-*-*-*-*-*"
+#define ICON_COUNT_FONT "-*-*-*-*-*-*-8-*-*-*-*-*-*-*"
+#define COUNTDOWN 600 /* No. seconds to lock for */
+#define NDIGITS 4 /* Number of digits in count */
+
+#define MAX_DELAY 1000000 /* Max delay between updates */
+#define NAP_TIME 5 /* Sleep between shutdown attempts */
+#define DELTA 10 /* Border around the digits */
+#define RIVET_RADIUS 6 /* Size of detonator 'rivets' */
+
+typedef struct {
+ int width, height;
+ int x, y;
+ XPoint loc;
+ int delta;
+ int color;
+ int countdown;
+ int startcountdown;
+ int text_width;
+ int text_ascent;
+ int text_descent;
+ int moveok;
+} bombstruct;
+
+static bombstruct *bombs = NULL;
+
+static XFontStruct *local_font = None;
+
+ /*
+ * Game Over
+ */
+static void
+explode(ModeInfo * mi)
+{
+ bombstruct *bp = &bombs[MI_SCREEN(mi)];
+ char buff[NDIGITS + 2];
+ extern void logoutUser(void);
+
+#if defined(__cplusplus) || defined(c_plusplus)
+ extern int kill(int, int);
+
+#endif
+
+ /*
+ * ToDo:
+ * Improve the graphics - some sort of explosion?
+ * (Will need to involve the main X event loop)
+ */
+#ifdef SIMPLE_COUNTDOWN
+ (void) sprintf(buff, "%.*s", NDIGITS, "*********");
+#else
+ (void) sprintf(buff, "%.*s:**", NDIGITS - 2, "*******");
+#endif
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_PIXEL(mi, 1));
+ XDrawString(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ bp->x, bp->y, buff, NDIGITS);
+
+ (void) fprintf(stderr, "BOOM!!!!\n");
+#ifndef DEBUG
+ if (MI_WIN_IS_INWINDOW(mi) || MI_WIN_IS_INROOT(mi) ||
+ MI_WIN_IS_NOLOCK(mi) || MI_WIN_IS_DEBUG(mi))
+ (void) kill(getpid(), SIGTERM);
+ else if (getuid() == 0) { /* Do not try to logout root! */
+ bp->countdown = 0;
+ init_bomb(mi);
+ } else
+ logoutUser();
+#else
+ (void) kill(getpid(), SIGTERM);
+#endif
+}
+
+static void
+rivet(ModeInfo * mi, int x, int y)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ if (MI_NPIXELS(mi) > 2) {
+ XDrawArc(display, MI_WINDOW(mi), gc, x, y,
+ 2 * RIVET_RADIUS, 2 * RIVET_RADIUS, 270 * 64, 90 * 64);
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+ XDrawArc(display, MI_WINDOW(mi), gc, x, y,
+ 2 * RIVET_RADIUS, 2 * RIVET_RADIUS, 70 * 64, 130 * 64);
+ } else
+ XDrawArc(display, MI_WINDOW(mi), gc, x, y,
+ 2 * RIVET_RADIUS, 2 * RIVET_RADIUS, 0, 360 * 64);
+}
+
+static void
+detonator(ModeInfo * mi, int draw)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ bombstruct *bp = &bombs[MI_SCREEN(mi)];
+ int b_width, b_height;
+
+ b_width = bp->width / 2;
+ b_height = bp->height / 3;
+ if (draw) {
+ if (MI_NPIXELS(mi) > 2)
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi),
+ MI_PIXEL(mi, bp->color));
+ else
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WIN_WHITE_PIXEL(mi));
+ /*XSetForeground(display, gc, allocPixel(display, MI_WIN_COLORMAP(mi),
+ "grey", "white")); */
+ XFillRectangle(display, MI_WINDOW(mi), gc,
+ bp->loc.x, bp->loc.y, b_width, b_height);
+
+ /*
+ * If a full size screen (and colour),
+ * 'rivet' the box to it
+ */
+ if (bp->width > 160 && bp->height > 160) {
+ rivet(mi, bp->loc.x + RIVET_RADIUS, bp->loc.y + RIVET_RADIUS);
+ rivet(mi, bp->loc.x + RIVET_RADIUS,
+ bp->loc.y + b_height - 3 * RIVET_RADIUS);
+ rivet(mi, bp->loc.x + b_width - 3 * RIVET_RADIUS,
+ bp->loc.y + RIVET_RADIUS);
+ rivet(mi, bp->loc.x + b_width - 3 * RIVET_RADIUS,
+ bp->loc.y + b_height - 3 * RIVET_RADIUS);
+ }
+ } else {
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WIN_BLACK_PIXEL(mi));
+ XFillRectangle(display, MI_WINDOW(mi), gc,
+ bp->loc.x, bp->loc.y, b_width, b_height);
+ }
+}
+
+void
+init_bomb(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ bombstruct *bp;
+ char number[NDIGITS + 2];
+
+ if (bombs == NULL) {
+ if ((bombs = (bombstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (bombstruct))) == NULL)
+ return;
+ }
+ bp = &bombs[MI_SCREEN(mi)];
+
+ bp->width = MI_WIN_WIDTH(mi);
+ bp->height = MI_WIN_HEIGHT(mi);
+
+ if (local_font != None) {
+ XFreeFont(MI_DISPLAY(mi), local_font);
+ local_font = None;
+ }
+ /* Set up text font */
+ if (bp->width > 256 && bp->height > 256) { /* Full screen */
+ local_font = XLoadQueryFont(display, FULL_COUNT_FONT);
+ bp->delta = DELTA;
+ } else { /* icon window */
+ local_font = XLoadQueryFont(display, ICON_COUNT_FONT);
+ bp->delta = 2;
+ }
+ XSetFont(display, gc, local_font->fid);
+
+#ifdef SIMPLE_COUNTDOWN
+ (void) sprintf(number, "%0*d", NDIGITS, 0);
+#else
+ (void) sprintf(number, "%.*s:**", NDIGITS - 2, "*******");
+#endif
+ bp->text_width = XTextWidth(local_font, number, NDIGITS + 1);
+ bp->text_ascent = local_font->max_bounds.ascent;
+ bp->text_descent = local_font->max_bounds.descent;
+
+ if (MI_DELAY(mi) > MAX_DELAY)
+ MI_DELAY(mi) = MAX_DELAY; /* Time cannot move slowly */
+ if (MI_BATCHCOUNT(mi) < 1)
+ bp->startcountdown = 1; /* Do not want an instantaneous logout */
+ bp->startcountdown = MI_BATCHCOUNT(mi);
+ bp->startcountdown *= 60;
+#if 0 /* Stricter if uncommented but people do not have to run bomb */
+ if (bp->startcountdown > COUNTDOWN)
+ bp->startcountdown = COUNTDOWN;
+#endif
+ if (bp->countdown == 0) /* <--Stricter if uncommented */
+ bp->countdown = (time((time_t *) NULL) + bp->startcountdown);
+ /* Detonator Primed */
+ XClearWindow(display, MI_WINDOW(mi));
+ /*
+ * Draw the graphics
+ * Very simple - detonator box with countdown
+ *
+ * ToDo: Improve the graphics
+ * (e.g. stick of dynamite, with burning fuse?)
+ */
+ bp->loc.x = NRAND(bp->width / 2);
+ bp->loc.y = NRAND(bp->height * 3 / 5);
+ bp->x = bp->loc.x + bp->width / 4 - (bp->text_width / 2);
+ bp->y = bp->loc.y + bp->height / 5; /* Central-ish */
+ if (MI_NPIXELS(mi) > 2)
+ bp->color = NRAND(MI_NPIXELS(mi));
+ detonator(mi, 1);
+ bp->moveok = 0;
+}
+
+void
+draw_bomb(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ bombstruct *bp = &bombs[MI_SCREEN(mi)];
+ char number[NDIGITS + 2];
+ unsigned long crayon;
+ time_t countleft;
+
+ countleft = (bp->countdown - time((time_t *) NULL));
+ if (countleft <= 0)
+ explode(mi); /* Bye, bye.... */
+ else {
+#ifdef SIMPLE_COUNTDOWN
+ (void) sprintf(number, "%0*d", NDIGITS, (int) countleft);
+#else
+ (void) sprintf(number, "%0*d:%02d", NDIGITS - 2,
+ (int) countleft / 60, (int) countleft % 60);
+#endif
+
+ /* Blank out the previous number .... */
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XFillRectangle(display, MI_WINDOW(mi), gc,
+ bp->x - bp->delta,
+ (bp->y - bp->text_ascent) - bp->delta,
+ bp->text_width + (2 * bp->delta),
+ (bp->text_ascent + bp->text_descent) + (2 * bp->delta));
+
+ /* ... and count down */
+ if (MI_NPIXELS(mi) <= 2)
+ crayon = MI_WIN_WHITE_PIXEL(mi);
+ else
+#ifdef COLOUR_CHANGE /* Blue to red */
+ crayon = MI_PIXEL(mi, countleft * MI_NPIXELS(mi) / bp->startcountdown);
+#else
+ crayon = MI_PIXEL(mi, 1);
+#endif
+ if (!(countleft % 60)) {
+ if (bp->moveok) {
+ detonator(mi, 0);
+ bp->loc.x = NRAND(bp->width / 2);
+ bp->loc.y = NRAND(bp->height * 3 / 5);
+ bp->x = bp->loc.x + bp->width / 4 - (bp->text_width / 2);
+ bp->y = bp->loc.y + bp->height / 5; /* Central-ish */
+ if (MI_NPIXELS(mi) > 2)
+ bp->color = NRAND(MI_NPIXELS(mi));
+ detonator(mi, 1);
+ bp->moveok = 0;
+ }
+ } else {
+ bp->moveok = 1;
+ }
+ XSetForeground(display, gc, crayon);
+ XDrawString(display, MI_WINDOW(mi), gc, bp->x, bp->y,
+ number, strlen(number));
+ }
+}
+
+void
+release_bomb(ModeInfo * mi)
+{
+ if (bombs != NULL) {
+ (void) free((void *) bombs);
+ bombs = NULL;
+ }
+ if (local_font != None) {
+ XFreeFont(MI_DISPLAY(mi), local_font);
+ local_font = None;
+ }
+}
+
+void
+refresh_bomb(ModeInfo * mi)
+{
+ detonator(mi, 1);
+}
+
+void
+change_bomb(ModeInfo * mi)
+{
+ bombstruct *bp = &bombs[MI_SCREEN(mi)];
+
+ detonator(mi, 0);
+ bp->loc.x = NRAND(bp->width / 2);
+ bp->loc.y = NRAND(bp->height * 3 / 5);
+ bp->x = bp->loc.x + bp->width / 4 - (bp->text_width / 2);
+ bp->y = bp->loc.y + bp->height / 5; /* Central-ish */
+ if (MI_NPIXELS(mi) > 2)
+ bp->color = NRAND(MI_NPIXELS(mi));
+ detonator(mi, 1);
+ bp->moveok = 0;
+}
+
+#endif
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)bouboule.c 4.03 97/05/15 xlockmore";
+
+#endif
+
+/*-
+ * bouboule.c bouboule for xlock, the X Window System lockscreen.
+ *
+ * Copyright 1996 by Jeremie PETIT <petit@eurecom.fr>, <jpetit@essi.fr>
+ *
+ * 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.
+ *
+ * Revision History:
+ * 15-May-97: jwz@netscape.com: turned into a standalone program.
+ * 04-Sep-96: Added 3d support Henrik Theiling <theiling@coli-uni-sb.de>
+ * 20-Feb-96: Added tests so that already malloced objects are not
+ * malloced twice, thanks to the report from <mccomb@interport.net>
+ * 01-Feb-96: Patched by Jouk Jansen <joukj@crys.chem.uva.nl> for VMS
+ * Patched by <bagleyd@bigfoot.com> for TrueColor displays
+ * 30-Jan-96: Wrote all that I wanted to.
+ *
+ * Sort of starfield for xlockmore. I found that making a starfield for
+ * a 3D engine and thought it could be a nice lock mode. For a real starfield,
+ * I only scale the sort of sphere you see to the whole sky and clip the stars
+ * to the camera screen.
+ *
+ * Use: batchcount is the number of stars.
+ * cycles is the maximum size for a star
+ *
+ * DONE: Build up a XArc list and Draw everything once with XFillArcs
+ * That idea came from looking at swarm code.
+ * DONE: Add an old arcs list for erasing.
+ * DONE: Make center of starfield SinVariable.
+ * DONE: Add some random in the sinvary() function.
+ * DONE: check time for erasing the stars with the two methods and use the
+ * better one. Note that sometimes the time difference between
+ * beginning of erasing and its end is negative! I check this, and
+ * do not use this result when it occurs. If all values are negative,
+ * the erasing will continue being done in the currently tested mode.
+ * DONE: Allow stars size customization.
+ * DONE: Make sizey be no less than half sizex or no bigger than twice sizex.
+ *
+ * IDEA: A simple check can be performed to know which stars are "behind"
+ * and which are "in front". So is possible to very simply change
+ * the drawing mode for these two sorts of stars. BUT: this would lead
+ * to a rewrite of the XArc list code because drawing should be done
+ * in two steps: "behind" stars then "in front" stars. Also, what could
+ * be the difference between the rendering of these two types of stars?
+ * IDEA: Calculate the distance of each star to the "viewer" and render the
+ * star accordingly to this distance. Same remarks as for previous
+ * ideas can be pointed out. This would even lead to reget the old stars
+ * drawing code, that has been replaced by the XFillArcs. On another
+ * hand, this would allow particular stars (own color, shape...), as
+ * far as they would be individually drawn. One should be careful to
+ * draw them according to their distance, that is not drawing a far
+ * star after a close one.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Bouboule"
+#define HACK_INIT init_bouboule
+#define HACK_DRAW draw_bouboule
+#define DEF_DELAY 5000
+#define DEF_BATCHCOUNT 100
+#define DEF_SIZE 15
+#define DEF_NCOLORS 200
+#define SMOOTH_COLORS
+#define DEF_3D False
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt bouboule_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+#define USEOLDXARCS 1 /* If 1, we use old xarcs list for erasing.
+ * else we just roughly erase the window.
+ * This mainly depends on the number of stars,
+ * because when they are many, it is faster to
+ * erase the whole window than to erase each star
+ */
+
+#if HAVE_GETTIMEOFDAY
+#define ADAPT_ERASE 1 /* If 1, then we try ADAPT_CHECKS black XFillArcs,
+ * and after, ADAPT_CHECKS XFillRectangle.
+ * We check which method seems better, knowing that
+ * XFillArcs is generally visually better. So we
+ * consider that XFillArcs is still better if its time
+ * is about XFillRectangle * ADAPT_ARC_PREFERED
+ * We need gettimeofday
+ * for this... Does it exist on other systems ? Do we
+ * have to use another function for others ?
+ * This value overrides USEOLDXARCS.
+ */
+
+#ifdef USE_XVMSUTILS
+#if 0
+#include "../xvmsutils/unix_time.h"
+#else
+#include <X11/unix_time.h>
+#endif
+#endif
+#if HAVE_SYS_TIME_H
+#include <sys/time.h>
+#else
+#if HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+#endif
+#define ADAPT_CHECKS 50
+#define ADAPT_ARC_PREFERED 150 /* Maybe the value that is the most important
+ * for adapting to a system */
+#endif
+
+#define dtor(x) (((x) * M_PI) / 180.0) /* Degrees to radians */
+
+#define MINSTARS 1
+#define MINSIZE 1
+#define COLOR_CHANGES 50 /* How often we change colors (1 = always)
+ * This value should be tuned accordingly to
+ * the number of stars */
+#define MAX_SIZEX_SIZEY 2. /* This controls whether the sphere can be very
+ * very large and have a small height (or the
+ * opposite) or no. */
+
+#define THETACANRAND 80 /* percentage of changes for the speed of
+ * change of the 3 theta values */
+#define SIZECANRAND 80 /* percentage of changes for the speed of
+ * change of the sizex and sizey values */
+#define POSCANRAND 80 /* percentage of changes for the speed of
+ * change of the x and y values */
+/*-
+ * Note that these XXXCANRAND values can be 0, that is no rand acceleration
+ * variation.
+ */
+
+#define VARRANDALPHA (NRAND((int) (M_PI * 1000.0))/1000.0)
+#define VARRANDSTEP (M_PI/(NRAND(100)+100.0))
+#define VARRANDMIN (-70.0)
+#define VARRANDMAX 70.0
+
+#define MINZVAL 100 /* stars can come this close */
+#define SCREENZ 2000 /* this is where the screen is */
+#define MAXZVAL 10000 /* stars can go this far away */
+
+#define GETZDIFF(z) ((MI_DELTA3D(mi))*20.0*(1.0-(SCREENZ)/(z+1000)))
+#define MAXDIFF MAX(-GETZDIFF(MINZVAL),GETZDIFF(MAXZVAL))
+
+/*-
+ * These values are the variation parameters of the acceleration variation
+ * of the SinVariables that are randomized.
+ */
+
+/******************************/
+typedef struct SinVariableStruct
+/******************************/
+{
+ double alpha; /*
+ * Alpha is the current state of the sinvariable
+ * alpha should be initialized to a value between
+ * 0.0 and 2 * M_PI
+ */
+ double step; /*
+ * Speed of evolution of alpha. It should be a reasonable
+ * fraction of 2 * M_PI. This value directly influence
+ * the variable speed of variation.
+ */
+ double minimum; /* Minimum value for the variable */
+ double maximum; /* Maximum value for the variable */
+ double value; /* Current value */
+ int mayrand; /* Flag for knowing whether some randomization can be
+ * applied to the variable */
+ struct SinVariableStruct *varrand; /* Evolving Variable: the variation of
+ * alpha */
+} SinVariable;
+
+/***********************/
+typedef struct StarStruct
+/***********************/
+{
+ double x, y, z; /* Position of the star */
+ short size; /* Try to guess */
+} Star;
+
+/****************************/
+typedef struct StarFieldStruct
+/****************************/
+{
+ short width, height; /* width and height of the starfield window */
+ short max_star_size; /* Maximum radius for stars. stars radius will
+ * vary from 1 to MAX_STAR_SIZE */
+ SinVariable x; /* Evolving variables: */
+ SinVariable y; /* Center of the field on the screen */
+ SinVariable z;
+ SinVariable sizex; /* Evolving variable: half width of the field */
+ SinVariable sizey; /* Evolving variable: half height of the field */
+ SinVariable thetax; /* Evolving Variables: */
+ SinVariable thetay; /* rotation angles of the starfield */
+ SinVariable thetaz; /* around x, y and z local axis */
+ Star *star; /* List of stars */
+ XArc *xarc; /* Current List of arcs */
+ XArc *xarcleft; /* additional list for the left arcs */
+#if ((USEOLDXARCS == 1) || (ADAPT_ERASE == 1))
+ XArc *oldxarc; /* Old list of arcs */
+ XArc *oldxarcleft;
+#endif
+ unsigned long color; /* Current color of the starfield */
+ int colorp; /* Pointer to color of the starfield */
+ int NbStars; /* Number of stars */
+ short colorchange; /* Counter for the color change */
+#if (ADAPT_ERASE == 1)
+ short hasbeenchecked;
+ long rect_time;
+ long xarc_time;
+#endif
+} StarField;
+
+static StarField *starfield = NULL;
+
+/*********/
+static void
+sinvary(SinVariable * v)
+/*********/
+
+{
+ v->value = v->minimum +
+ (v->maximum - v->minimum) * (sin(v->alpha) + 1.0) / 2.0;
+
+ if (v->mayrand == 0)
+ v->alpha += v->step;
+ else {
+ int vaval = NRAND(100);
+
+ if (vaval <= v->mayrand)
+ sinvary(v->varrand);
+ v->alpha += (100.0 + (v->varrand->value)) * v->step / 100.0;
+ }
+
+ if (v->alpha > 2 * M_PI)
+ v->alpha -= 2 * M_PI;
+}
+
+/*************************************************/
+static void
+sininit(SinVariable * v,
+ double alpha, double step, double minimum, double maximum,
+ short int mayrand)
+{
+ v->alpha = alpha;
+ v->step = step;
+ v->minimum = minimum;
+ v->maximum = maximum;
+ v->mayrand = mayrand;
+ if (mayrand != 0) {
+ if (v->varrand == NULL)
+ v->varrand = (SinVariable *) calloc(1, sizeof (SinVariable));
+ sininit(v->varrand,
+ VARRANDALPHA,
+ VARRANDSTEP,
+ VARRANDMIN,
+ VARRANDMAX,
+ 0);
+ sinvary(v->varrand);
+ }
+ /* We calculate the values at least once for initialization */
+ sinvary(v);
+}
+
+static void
+sinfree(SinVariable * point)
+{
+ SinVariable *temp, *next;
+
+ next = point->varrand;
+ while (next) {
+ temp = next;
+ next = temp->varrand;
+ (void) free((void *) temp);
+ }
+}
+
+/***************/
+void
+init_bouboule(ModeInfo * mi)
+/***************/
+
+/*-
+ * The stars init part was first inspirated from the net3d game starfield
+ * code. But net3d starfield is not really 3d starfield, and I needed real 3d,
+ * so only remains the net3d starfield initialization main idea, that is
+ * the stars distribution on a sphere (theta and omega computing)
+ */
+{
+ StarField *sp;
+ int size = MI_SIZE(mi);
+ int i;
+ double theta, omega;
+
+ if (starfield == NULL) {
+ if ((starfield = (StarField *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (StarField))) == NULL)
+ return;
+ }
+ sp = &starfield[MI_SCREEN(mi)];
+
+ sp->width = MI_WIN_WIDTH(mi);
+ sp->height = MI_WIN_HEIGHT(mi);
+
+ /* use the right `black' pixel values: */
+ if (MI_WIN_IS_INSTALL(mi) && MI_WIN_IS_USE3D(mi)) {
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_NONE_COLOR(mi));
+ XFillRectangle(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ 0, 0, sp->width, sp->height);
+ } else
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+
+ if (size < -MINSIZE)
+ sp->max_star_size = NRAND(-size - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE)
+ sp->max_star_size = MINSIZE;
+ else
+ sp->max_star_size = size;
+
+ sp->NbStars = MI_BATCHCOUNT(mi);
+ if (sp->NbStars < -MINSTARS) {
+ if (sp->star) {
+ (void) free((void *) sp->star);
+ sp->star = NULL;
+ }
+ if (sp->xarc) {
+ (void) free((void *) sp->xarc);
+ sp->xarc = NULL;
+ }
+ if (sp->xarcleft) {
+ (void) free((void *) sp->xarcleft);
+ sp->xarcleft = NULL;
+ }
+#if ((USEOLDXARCS == 1) || (ADAPT_ERASE == 1))
+ if (sp->oldxarc) {
+ (void) free((void *) sp->oldxarc);
+ sp->oldxarc = NULL;
+ }
+ if (sp->oldxarcleft) {
+ (void) free((void *) sp->oldxarcleft);
+ sp->oldxarcleft = NULL;
+ }
+#endif
+ sp->NbStars = NRAND(-sp->NbStars - MINSTARS + 1) + MINSTARS;
+ } else if (sp->NbStars < MINSTARS)
+ sp->NbStars = MINSTARS;
+
+ /* We get memory for lists of objects */
+ if (sp->star == NULL)
+ sp->star = (Star *) malloc(sp->NbStars * sizeof (Star));
+ if (sp->xarc == NULL)
+ sp->xarc = (XArc *) malloc(sp->NbStars * sizeof (XArc));
+ if (MI_WIN_IS_USE3D(mi) && sp->xarcleft == NULL)
+ sp->xarcleft = (XArc *) malloc(sp->NbStars * sizeof (XArc));
+#if ((USEOLDXARCS == 1) || (ADAPT_ERASE == 1))
+ if (sp->oldxarc == NULL)
+ sp->oldxarc = (XArc *) malloc(sp->NbStars * sizeof (XArc));
+ if (MI_WIN_IS_USE3D(mi) && sp->oldxarcleft == NULL)
+ sp->oldxarcleft = (XArc *) malloc(sp->NbStars * sizeof (XArc));
+#endif
+
+ {
+ /* We initialize evolving variables */
+ sininit(&sp->x,
+ NRAND(3142) / 1000.0, M_PI / (NRAND(100) + 100.0),
+ ((double) sp->width) / 4.0,
+ 3.0 * ((double) sp->width) / 4.0,
+ POSCANRAND);
+ sininit(&sp->y,
+ NRAND(3142) / 1000.0, M_PI / (NRAND(100) + 100.0),
+ ((double) sp->height) / 4.0,
+ 3.0 * ((double) sp->height) / 4.0,
+ POSCANRAND);
+
+ /* for z, we have to ensure that the bouboule does not get behind */
+ /* the eyes of the viewer. His/Her eyes are at 0. Because the */
+ /* bouboule uses the x-radius for the z-radius, too, we have to */
+ /* use the x-values. */
+ sininit(&sp->z,
+ NRAND(3142) / 1000.0, M_PI / (NRAND(100) + 100.0),
+ ((double) sp->width / 2.0 + MINZVAL),
+ ((double) sp->width / 2.0 + MAXZVAL),
+ POSCANRAND);
+
+
+ sininit(&sp->sizex,
+ NRAND(3142) / 1000.0, M_PI / (NRAND(100) + 100.0),
+ MIN(((double) sp->width) - sp->x.value,
+ sp->x.value) / 5.0,
+ MIN(((double) sp->width) - sp->x.value,
+ sp->x.value),
+ SIZECANRAND);
+
+ sininit(&sp->sizey,
+ NRAND(3142) / 1000.0, M_PI / (NRAND(100) + 100.0),
+ MAX(sp->sizex.value / MAX_SIZEX_SIZEY,
+ sp->sizey.maximum / 5.0),
+ MIN(sp->sizex.value * MAX_SIZEX_SIZEY,
+ MIN(((double) sp->height) -
+ sp->y.value,
+ sp->y.value)),
+ SIZECANRAND);
+
+ sininit(&sp->thetax,
+ NRAND(3142) / 1000.0, M_PI / (NRAND(200) + 200.0),
+ -M_PI, M_PI,
+ THETACANRAND);
+ sininit(&sp->thetay,
+ NRAND(3142) / 1000.0, M_PI / (NRAND(200) + 200.0),
+ -M_PI, M_PI,
+ THETACANRAND);
+ sininit(&sp->thetaz,
+ NRAND(3142) / 1000.0, M_PI / (NRAND(400) + 400.0),
+ -M_PI, M_PI,
+ THETACANRAND);
+ }
+ for (i = 0; i < sp->NbStars; i++) {
+ Star *star;
+ XArc *arc = NULL, *arcleft = NULL;
+
+#if ((USEOLDXARCS == 1) || (ADAPT_ERASE == 1))
+ XArc *oarc = NULL, *oarcleft = NULL;
+
+#endif
+
+ star = &(sp->star[i]);
+ arc = &(sp->xarc[i]);
+ if (MI_WIN_IS_USE3D(mi))
+ arcleft = &(sp->xarcleft[i]);
+#if ((USEOLDXARCS == 1) || (ADAPT_ERASE == 1))
+ oarc = &(sp->oldxarc[i]);
+ if (MI_WIN_IS_USE3D(mi))
+ oarcleft = &(sp->oldxarcleft[i]);
+#endif
+ /* Elevation and bearing of the star */
+ theta = dtor((NRAND(1800)) / 10.0 - 90.0);
+ omega = dtor((NRAND(3600)) / 10.0 - 180.0);
+
+ /* Stars coordinates in a 3D space */
+ star->x = cos(theta) * sin(omega);
+ star->y = sin(omega) * sin(theta);
+ star->z = cos(omega);
+
+ /* We set the stars size */
+ star->size = NRAND(2 * sp->max_star_size);
+ if (star->size < sp->max_star_size)
+ star->size = 0;
+ else
+ star->size -= sp->max_star_size;
+
+ /* We set default values for the XArc lists elements */
+ arc->x = arc->y = 0;
+ if (MI_WIN_IS_USE3D(mi)) {
+ arcleft->x = arcleft->y = 0;
+ }
+#if ((USEOLDXARCS == 1) || (ADAPT_ERASE == 1))
+ oarc->x = oarc->y = 0;
+ if (MI_WIN_IS_USE3D(mi)) {
+ oarcleft->x = oarcleft->y = 0;
+ }
+#endif
+ arc->width = 2 + star->size;
+ arc->height = 2 + star->size;
+ if (MI_WIN_IS_USE3D(mi)) {
+ arcleft->width = 2 + star->size;
+ arcleft->height = 2 + star->size;
+ }
+#if ((USEOLDXARCS == 1) || (ADAPT_ERASE == 1))
+ oarc->width = 2 + star->size;
+ oarc->height = 2 + star->size;
+ if (MI_WIN_IS_USE3D(mi)) {
+ oarcleft->width = 2 + star->size;
+ oarcleft->height = 2 + star->size;
+ }
+#endif
+
+ arc->angle1 = 0;
+ arc->angle2 = 360 * 64;
+ if (MI_WIN_IS_USE3D(mi)) {
+ arcleft->angle1 = 0;
+ arcleft->angle2 = 360 * 64;
+ }
+#if ((USEOLDXARCS == 1) || (ADAPT_ERASE == 1))
+ oarc->angle1 = 0;
+ oarc->angle2 = 360 * 64; /* ie. we draw whole disks:
+ * from 0 to 360 degrees */
+ if (MI_WIN_IS_USE3D(mi)) {
+ oarcleft->angle1 = 0;
+ oarcleft->angle2 = 360 * 64;
+ }
+#endif
+ }
+
+ if (MI_NPIXELS(mi) > 2)
+ sp->colorp = NRAND(MI_NPIXELS(mi));
+ /* We set up the starfield color */
+ if (!MI_WIN_IS_USE3D(mi) && MI_NPIXELS(mi) > 2)
+ sp->color = MI_PIXEL(mi, sp->colorp);
+ else
+ sp->color = MI_WIN_WHITE_PIXEL(mi);
+
+#if (ADAPT_ERASE == 1)
+ /* We initialize the adaptation code for screen erasing */
+ sp->hasbeenchecked = ADAPT_CHECKS * 2;
+ sp->rect_time = 0;
+ sp->xarc_time = 0;
+#endif
+}
+
+/****************/
+void
+draw_bouboule(ModeInfo * mi)
+/****************/
+
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ StarField *sp = &starfield[MI_SCREEN(mi)];
+ int i, diff = 0;
+ double CX, CY, CZ, SX, SY, SZ;
+ Star *star;
+ XArc *arc = NULL, *arcleft = NULL;
+
+#if (ADAPT_ERASE == 1)
+ struct timeval tv1;
+ struct timeval tv2;
+
+#endif
+
+#if ((USEOLDXARCS == 0) || (ADAPT_ERASE == 1))
+ short x_1, y_1, x_2, y_2;
+
+ /* bounding rectangle around the old starfield,
+ * for erasing with the smallest rectangle
+ * instead of filling the whole screen */
+ int maxdiff = 0; /* maximal distance between left and right */
+
+ /* star in 3d mode, otherwise 0 */
+#endif
+
+#if ((USEOLDXARCS == 0) || (ADAPT_ERASE == 1))
+ if (MI_WIN_IS_USE3D(mi)) {
+ maxdiff = (int) MAXDIFF;
+ }
+ x_1 = (int) sp->x.value - (int) sp->sizex.value -
+ sp->max_star_size - maxdiff;
+ y_1 = (int) sp->y.value - (int) sp->sizey.value -
+ sp->max_star_size;
+ x_2 = 2 * ((int) sp->sizex.value + sp->max_star_size + maxdiff);
+ y_2 = 2 * ((int) sp->sizey.value + sp->max_star_size);
+#endif
+ /* We make variables vary. */
+ sinvary(&sp->thetax);
+ sinvary(&sp->thetay);
+ sinvary(&sp->thetaz);
+
+ sinvary(&sp->x);
+ sinvary(&sp->y);
+ if (MI_WIN_IS_USE3D(mi))
+ sinvary(&sp->z);
+
+ /* A little trick to prevent the bouboule from being
+ * bigger than the screen */
+ sp->sizex.maximum =
+ MIN(((double) sp->width) - sp->x.value,
+ sp->x.value);
+ sp->sizex.minimum = sp->sizex.maximum / 3.0;
+
+ /* Another trick to make the ball not too flat */
+ sp->sizey.minimum =
+ MAX(sp->sizex.value / MAX_SIZEX_SIZEY,
+ sp->sizey.maximum / 3.0);
+ sp->sizey.maximum =
+ MIN(sp->sizex.value * MAX_SIZEX_SIZEY,
+ MIN(((double) sp->height) - sp->y.value,
+ sp->y.value));
+
+ sinvary(&sp->sizex);
+ sinvary(&sp->sizey);
+
+ /*
+ * We calculate the rotation matrix values. We just make the
+ * rotation on the fly, without using a matrix.
+ * Star positions are recorded as unit vectors pointing in various
+ * directions. We just make them all rotate.
+ */
+ CX = cos(sp->thetax.value);
+ SX = sin(sp->thetax.value);
+ CY = cos(sp->thetay.value);
+ SY = sin(sp->thetay.value);
+ CZ = cos(sp->thetaz.value);
+ SZ = sin(sp->thetaz.value);
+
+ for (i = 0; i < sp->NbStars; i++) {
+ star = &(sp->star[i]);
+ arc = &(sp->xarc[i]);
+ if (MI_WIN_IS_USE3D(mi)) {
+ arcleft = &(sp->xarcleft[i]);
+ /* to help the eyes, the starfield is always as wide as */
+ /* deep, so .sizex.value can be used. */
+ diff = (int) GETZDIFF(sp->sizex.value *
+ ((SY * CX) * star->x + (SX) * star->y +
+ (CX * CY) * star->z) + sp->z.value);
+ }
+ arc->x = (short) ((sp->sizex.value *
+ ((CY * CZ - SX * SY * SZ) * star->x +
+ (-CX * SZ) * star->y +
+ (SY * CZ + SZ * SX * CY) * star->z) +
+ sp->x.value));
+ arc->y = (short) ((sp->sizey.value *
+ ((CY * SZ + SX * SY * CZ) * star->x +
+ (CX * CZ) * star->y +
+ (SY * SZ - SX * CY * CZ) * star->z) +
+ sp->y.value));
+
+ if (MI_WIN_IS_USE3D(mi)) {
+ arcleft->x = (short) ((sp->sizex.value *
+ ((CY * CZ - SX * SY * SZ) * star->x +
+ (-CX * SZ) * star->y +
+ (SY * CZ + SZ * SX * CY) * star->z) +
+ sp->x.value));
+ arcleft->y = (short) ((sp->sizey.value *
+ ((CY * SZ + SX * SY * CZ) * star->x +
+ (CX * CZ) * star->y +
+ (SY * SZ - SX * CY * CZ) * star->z) +
+ sp->y.value));
+ arc->x += diff;
+ arcleft->x -= diff;
+ }
+ if (star->size != 0) {
+ arc->x -= star->size;
+ arc->y -= star->size;
+ if (MI_WIN_IS_USE3D(mi)) {
+ arcleft->x -= star->size;
+ arcleft->y -= star->size;
+ }
+ }
+ }
+
+ /* First, we erase the previous starfield */
+ if (MI_WIN_IS_INSTALL(mi) && MI_WIN_IS_USE3D(mi))
+ XSetForeground(display, gc, MI_NONE_COLOR(mi));
+ else
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+
+#if (ADAPT_ERASE == 1)
+ if (sp->hasbeenchecked == 0) {
+ /* We just calculate which method is the faster and eventually free
+ * the oldxarc list */
+ if (sp->xarc_time >
+ ADAPT_ARC_PREFERED * sp->rect_time) {
+ sp->hasbeenchecked = -2; /* XFillRectangle mode */
+ (void) free((void *) sp->oldxarc);
+ sp->oldxarc = NULL;
+ if (MI_WIN_IS_USE3D(mi)) {
+ (void) free((void *) sp->oldxarcleft);
+ sp->oldxarcleft = NULL;
+ }
+ } else {
+ sp->hasbeenchecked = -1; /* XFillArcs mode */
+ }
+ }
+ if (sp->hasbeenchecked == -2) {
+ /* Erasing is done with XFillRectangle */
+ XFillRectangle(display, window, gc,
+ x_1, y_1, x_2, y_2);
+ } else if (sp->hasbeenchecked == -1) {
+ /* Erasing is done with XFillArcs */
+ XFillArcs(display, window, gc,
+ sp->oldxarc, sp->NbStars);
+ if (MI_WIN_IS_USE3D(mi))
+ XFillArcs(display, window, gc,
+ sp->oldxarcleft, sp->NbStars);
+ } else {
+ long usec;
+
+ if (sp->hasbeenchecked > ADAPT_CHECKS) {
+ (void) gettimeofday(&tv1, NULL);
+ XFillRectangle(display, window, gc,
+ x_1, y_1, x_2, y_2);
+ (void) gettimeofday(&tv2, NULL);
+ usec = (tv2.tv_sec - tv1.tv_sec) * 1000000;
+ if (usec + tv2.tv_usec - tv1.tv_usec > 0) {
+ sp->rect_time += usec + tv2.tv_usec - tv1.tv_usec;
+ sp->hasbeenchecked--;
+ }
+ } else {
+ (void) gettimeofday(&tv1, NULL);
+ XFillArcs(display, window, gc,
+ sp->oldxarc, sp->NbStars);
+ if (MI_WIN_IS_USE3D(mi))
+ XFillArcs(display, window, gc,
+ sp->oldxarcleft, sp->NbStars);
+ (void) gettimeofday(&tv2, NULL);
+ usec = (tv2.tv_sec - tv1.tv_sec) * 1000000;
+ if (usec + tv2.tv_usec - tv1.tv_usec > 0) {
+ sp->xarc_time += usec + tv2.tv_usec - tv1.tv_usec;
+ sp->hasbeenchecked--;
+ }
+ }
+ }
+#else
+#if (USEOLDXARCS == 1)
+ XFillArcs(display, window, gc,
+ sp->oldxarc, sp->NbStars);
+ if (MI_WIN_IS_USE3D(mi))
+ XFillArcs(display, window, gc,
+ sp->oldxarcleft, sp->NbStars);
+#else
+ XFillRectangle(display, window, gc,
+ x_1, y_1, x_2, y_2);
+#endif
+#endif
+
+ /* Then we draw the new one */
+ if (MI_WIN_IS_USE3D(mi)) {
+ if (MI_WIN_IS_INSTALL(mi))
+ XSetFunction(display, gc, GXor);
+ XSetForeground(display, gc, MI_RIGHT_COLOR(mi));
+ XFillArcs(display, window, gc, sp->xarc, sp->NbStars);
+ XSetForeground(display, gc, MI_LEFT_COLOR(mi));
+ XFillArcs(display, window, gc, sp->xarcleft, sp->NbStars);
+ if (MI_WIN_IS_INSTALL(mi))
+ XSetFunction(display, gc, GXcopy);
+ } else {
+ XSetForeground(display, gc, sp->color);
+ XFillArcs(display, window, gc, sp->xarc, sp->NbStars);
+ }
+
+#if ((USEOLDXARCS == 1) || (ADAPT_ERASE == 1))
+#if (ADAPT_ERASE == 1)
+ if (sp->hasbeenchecked >= -1) {
+ arc = sp->xarc;
+ sp->xarc = sp->oldxarc;
+ sp->oldxarc = arc;
+ if (MI_WIN_IS_USE3D(mi)) {
+ arcleft = sp->xarcleft;
+ sp->xarcleft = sp->oldxarcleft;
+ sp->oldxarcleft = arcleft;
+ }
+ }
+#else
+ arc = sp->xarc;
+ sp->xarc = sp->oldxarc;
+ sp->oldxarc = arc;
+ if (MI_WIN_IS_USE3D(mi)) {
+ arcleft = sp->xarcleft;
+ sp->xarcleft = sp->oldxarcleft;
+ sp->oldxarcleft = arcleft;
+ }
+#endif
+#endif
+
+ /* We set up the color for the next drawing */
+ if (!MI_WIN_IS_USE3D(mi) && MI_NPIXELS(mi) > 2 &&
+ (++sp->colorchange >= COLOR_CHANGES)) {
+ sp->colorchange = 0;
+ if (++sp->colorp >= MI_NPIXELS(mi))
+ sp->colorp = 0;
+ sp->color = MI_PIXEL(mi, sp->colorp);
+ }
+}
+
+void
+release_bouboule(ModeInfo * mi)
+{
+ if (starfield != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ StarField *sp = &starfield[screen];
+
+ if (sp->star)
+ (void) free((void *) sp->star);
+ if (sp->xarc)
+ (void) free((void *) sp->xarc);
+ if (sp->xarcleft)
+ (void) free((void *) sp->xarcleft);
+#if ((USEOLDXARCS == 1) || (ADAPT_ERASE == 1))
+ if (sp->oldxarc)
+ (void) free((void *) sp->oldxarc);
+ if (sp->oldxarcleft)
+ (void) free((void *) sp->oldxarcleft);
+#endif
+ sinfree(&(sp->x));
+ sinfree(&(sp->y));
+ sinfree(&(sp->z));
+ sinfree(&(sp->sizex));
+ sinfree(&(sp->sizey));
+ sinfree(&(sp->thetax));
+ sinfree(&(sp->thetay));
+ sinfree(&(sp->thetaz));
+ }
+ (void) free((void *) starfield);
+ starfield = NULL;
+ }
+}
+
+void
+refresh_bouboule(ModeInfo * mi)
+{
+ /* Do nothing, it will refresh by itself */
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)bounce.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * bounce.c - A bouncing ball for xlock, the X Window System lockscreen.
+ *
+ * Copyright (c) 1988 by Sun Microsystems
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 01-Apr-97: Curtis Larsen <larsen@rtp3.med.utah.edu>
+ * The modification is only for the inroot mode. It causes the balls to see
+ * children of the root window and bounce off of the sides of them. New
+ * windows are only recognized after every init_bounce, because fvwm did not
+ * like xlock setting SubstructureNotifyMask on root. I did not fix the
+ * initial placement of balls yet, so they can start out underneath windows.
+ * 18-Sep-95: tinkered with it to look like bat.c .
+ * 15-Jul-94: cleaned up in time for the final match.
+ * 4-Apr-94: spinning multiple ball version
+ * (I got a lot of help from with the physics of ball to ball
+ * collision looking at the source of xpool from Ismail ARIT
+ * <iarit@tara.mines.colorado.edu>
+ * 22-Mar-94: got rid of flashing problem by only erasing parts of the image
+ * that will not be in the next image.
+ * 2-Sep-93: xlock version David Bagley <bagleyd@bigfoot.com>
+ * 1986: Sun Microsystems
+ */
+
+/*-
+ * original copyright
+ * **************************************************************************
+ * 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.
+ * ***************************************************************************
+ */
+
+/*-
+ * Open for improvement:
+ * include different balls (size and mass)
+ * how about be real crazy and put in an American/Australian football?
+ * should only have 1 bitmap for ball, the others should be generated
+ * as 90 degree rotations.
+ * multiscreen interaction
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Bounce"
+#define HACK_INIT init_bounce
+#define HACK_DRAW draw_bounce
+#define DEF_DELAY 10000
+#define DEF_BATCHCOUNT -10
+#define DEF_SIZE 0
+#define DEF_NCOLORS 200
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt bounce_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+#include "bitmaps/bounce-0.xbm"
+#include "bitmaps/bounce-1.xbm"
+#include "bitmaps/bounce-2.xbm"
+#include "bitmaps/bounce-3.xbm"
+#include "bitmaps/bounce-mask.xbm"
+#define BALLBITS(n,w,h)\
+ bp->pixmaps[bp->init_orients++]=\
+ XCreateBitmapFromData(display,window,(char *)n,w,h)
+
+#define MAX_STRENGTH 24
+#define FRICTION 24
+#define PENETRATION 0.3
+#define SLIPAGE 4
+#define TIME 32
+#define MINBALLS 1
+#define MINSIZE 1
+#define MINGRIDSIZE 6
+
+#define ORIENTS 4
+#define ORIENTCYCLE 16
+#define CCW 1
+#define CW (ORIENTS-1)
+#define DIR(x) (((x)>=0)?CCW:CW)
+#define SIGN(x) (((x)>=0)?1:-1)
+
+typedef struct {
+ int x, y;
+ int width, height;
+} ballwindow;
+
+typedef struct {
+ int x, y, xlast, ylast, orientlast;
+ int spincount, spindelay, spindir, orient;
+ int vx, vy, vang;
+ unsigned long color;
+} ballstruct;
+
+typedef struct {
+ int width, height;
+ int nballs;
+ int xs, ys, avgsize;
+ int restartnum;
+ int pixelmode;
+ ballstruct *balls;
+ GC stippledGC;
+ Pixmap pixmaps[ORIENTS + 1];
+ int init_orients;
+ int nwindow;
+ ballwindow *windows;
+} bouncestruct;
+
+static bouncestruct *bounces = NULL;
+
+static void checkCollision(bouncestruct * bp, int aball);
+static void drawball(ModeInfo * mi, ballstruct * ball);
+static void moveball(ModeInfo * mi, ballstruct * ball);
+static void spinball(ballstruct * ball, int dir, int *vel, int avgsize);
+static int collide(bouncestruct * bp, int aball);
+static void bounce_windows(ModeInfo * mi, bouncestruct * bs);
+
+
+static void
+checkCollision(bouncestruct * bp, int aball)
+{
+ int i, amount, spin, d, size;
+ double x, y;
+
+ for (i = 0; i < bp->nballs; i++) {
+ if (i != aball) {
+ x = (double) (bp->balls[i].x - bp->balls[aball].x);
+ y = (double) (bp->balls[i].y - bp->balls[aball].y);
+ d = (int) sqrt(x * x + y * y);
+ size = bp->avgsize;
+ if (d > 0 && d < size) {
+ amount = size - d;
+ if (amount > PENETRATION * size)
+ amount = (int) (PENETRATION * size);
+ bp->balls[i].vx += (int) ((double) amount * x / d);
+ bp->balls[i].vy += (int) ((double) amount * y / d);
+ bp->balls[i].vx -= bp->balls[i].vx / FRICTION;
+ bp->balls[i].vy -= bp->balls[i].vy / FRICTION;
+ bp->balls[aball].vx -= (int) ((double) amount * x / d);
+ bp->balls[aball].vy -= (int) ((double) amount * y / d);
+ bp->balls[aball].vx -= bp->balls[aball].vx / FRICTION;
+ bp->balls[aball].vy -= bp->balls[aball].vy / FRICTION;
+ spin = (bp->balls[i].vang - bp->balls[aball].vang) /
+ (2 * size * SLIPAGE);
+ bp->balls[i].vang -= spin;
+ bp->balls[aball].vang += spin;
+ bp->balls[i].spindir = DIR(bp->balls[i].vang);
+ bp->balls[aball].spindir = DIR(bp->balls[aball].vang);
+ if (!bp->balls[i].vang) {
+ bp->balls[i].spindelay = 1;
+ bp->balls[i].spindir = 0;
+ } else
+ bp->balls[i].spindelay = (int) ((double) M_PI *
+ bp->avgsize / (ABS(bp->balls[i].vang))) + 1;
+ if (!bp->balls[aball].vang) {
+ bp->balls[aball].spindelay = 1;
+ bp->balls[aball].spindir = 0;
+ } else
+ bp->balls[aball].spindelay = (int) ((double) M_PI *
+ bp->avgsize / (ABS(bp->balls[aball].vang))) + 1;
+ return;
+ }
+ }
+ }
+}
+
+static void
+drawball(ModeInfo * mi, ballstruct * ball)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ bouncestruct *bp = &bounces[MI_SCREEN(mi)];
+
+ if (bp->pixelmode) {
+ if (ball->xlast != -1) {
+ XSetForeground(display, MI_GC(mi), MI_WIN_BLACK_PIXEL(mi));
+ XFillRectangle(display, window, MI_GC(mi),
+ ball->xlast, ball->ylast, bp->xs, bp->ys);
+ }
+ XSetForeground(display, MI_GC(mi), ball->color);
+ XFillRectangle(display, window, MI_GC(mi),
+ ball->x, ball->y, bp->xs, bp->ys);
+ } else {
+ bouncestruct *bp = &bounces[MI_SCREEN(mi)];
+
+ if (ball->xlast != -1) {
+ XSetForeground(display, bp->stippledGC, MI_WIN_BLACK_PIXEL(mi));
+ XSetStipple(display, bp->stippledGC, bp->pixmaps[ORIENTS]);
+ XSetFillStyle(display, bp->stippledGC, FillStippled);
+ XSetTSOrigin(display, bp->stippledGC, ball->xlast, ball->ylast);
+#ifdef FLASH
+ XFillRectangle(display, window, bp->stippledGC,
+ ball->xlast, ball->ylast, bp->xs, bp->ys);
+#else
+ ERASE_IMAGE(display, window, bp->stippledGC, ball->x, ball->y,
+ ball->xlast, ball->ylast, bp->xs, bp->ys);
+#endif
+ }
+ XSetTSOrigin(display, bp->stippledGC, ball->x, ball->y);
+ XSetForeground(display, bp->stippledGC, ball->color);
+ XSetStipple(display, bp->stippledGC, bp->pixmaps[ball->orient]);
+#ifdef FLASH
+ XSetFillStyle(display, bp->stippledGC, FillStippled);
+#else
+ XSetFillStyle(display, bp->stippledGC, FillOpaqueStippled);
+#endif
+ XFillRectangle(display, window, bp->stippledGC,
+ ball->x, ball->y, bp->xs, bp->ys);
+ XFlush(display);
+ }
+}
+
+#define BETWEEN(x, xmin, xmax) (((x) >= (xmin)) && ((x) <= (xmax)))
+static void
+hit_left_wall(ModeInfo * mi, ballstruct * ball,
+ int ytop, int height, int x, int side)
+{
+ bouncestruct *bp = &bounces[MI_SCREEN(mi)];
+
+ if ((ball->x <= x) && ((ball->xlast >= x) || side) &&
+ BETWEEN(ball->y, ytop - bp->ys, ytop + height)) {
+ /* Bounce off the wall to the left of the ball */
+
+ ball->x = 2 * x - ball->x;
+ ball->vx = (ball->vx - (ball->vx * FRICTION)) / FRICTION;
+ spinball(ball, -1, &ball->vy, bp->avgsize);
+ }
+}
+
+static void
+hit_right_wall(ModeInfo * mi, ballstruct * ball,
+ int ytop, int height, int x, int side)
+{
+ bouncestruct *bp = &bounces[MI_SCREEN(mi)];
+
+ x -= bp->xs; /* account for ball width */
+
+ if ((ball->x >= x) && ((ball->xlast <= x) || side) &&
+ BETWEEN(ball->y, ytop - bp->ys, ytop + height)) {
+ /* Bounce off the wall to the right of the ball */
+
+ ball->x = 2 * x - ball->x;
+ ball->vx = (ball->vx - (ball->vx * FRICTION)) / FRICTION;
+ spinball(ball, 1, &ball->vy, bp->avgsize);
+ }
+}
+
+static void
+hit_top_wall(bouncestruct * bp, ballstruct * ball, int xleft, int width, int y, int side)
+{
+ if ((ball->y <= y) && ((ball->ylast >= y) || side) &&
+ BETWEEN(ball->x, xleft - bp->xs, xleft + width)) { /* Bounce off the wall to the top of the ball */
+ ball->y = 2 * y - ball->y;
+ /* HACK to make it look better for iconified mode */
+ if (y == 0) {
+ ball->vy = 0;
+ } else {
+ ball->vy = (ball->vy - (FRICTION * ball->vy)) / FRICTION;
+ }
+ spinball(ball, 1, &ball->vx, bp->avgsize);
+ }
+}
+
+
+static void
+hit_bottom_wall(bouncestruct * bp, ballstruct * ball, int xleft, int width, int y, int side)
+{
+ y -= bp->ys; /* account for ball height */
+
+ if ((ball->y >= y) && ((ball->ylast <= y) || side) &&
+ BETWEEN(ball->x, xleft - bp->xs, xleft + width)) { /* Bounce off the wall to the bottom of the ball */
+ ball->y = y;
+ ball->vy = (ball->vy - (FRICTION * ball->vy)) / FRICTION;
+ spinball(ball, -1, &ball->vx, bp->avgsize);
+ }
+}
+
+static void
+moveball(ModeInfo * mi, ballstruct * ball)
+{
+ bouncestruct *bp = &bounces[MI_SCREEN(mi)];
+ int i;
+ ballwindow *win;
+
+ ball->xlast = ball->x;
+ ball->ylast = ball->y;
+ ball->orientlast = ball->orient;
+ ball->x += ball->vx;
+
+ for (i = 0; i < bp->nwindow; i++) {
+ win = &bp->windows[i];
+
+ hit_left_wall(mi, ball, win->y, win->height, win->x + win->width, 0);
+ hit_right_wall(mi, ball, win->y, win->height, win->x, 0);
+ }
+ hit_right_wall(mi, ball, 0, bp->height, bp->width, 1);
+ hit_left_wall(mi, ball, 0, bp->height, 0, 1);
+
+ ball->vy++;
+ ball->y += ball->vy;
+
+ for (i = 0; i < bp->nwindow; i++) {
+ win = &bp->windows[i];
+
+ hit_top_wall(bp, ball, win->x, win->width, win->y + win->height, 0);
+ hit_bottom_wall(bp, ball, win->x, win->width, win->y, 0);
+ }
+ hit_top_wall(bp, ball, 0, bp->width, 0, 1);
+ hit_bottom_wall(bp, ball, 0, bp->width, bp->height, 1);
+
+ if (ball->spindir) {
+ ball->spincount--;
+ if (!ball->spincount) {
+ ball->orient = (ball->spindir + ball->orient) % ORIENTS;
+ ball->spincount = ball->spindelay;
+ }
+ }
+}
+
+static void
+spinball(ballstruct * ball, int dir, int *vel, int avgsize)
+{
+ *vel -= (int) ((*vel + SIGN(*vel * dir) *
+ ball->spindelay * ORIENTCYCLE / (M_PI * avgsize)) / SLIPAGE);
+ if (*vel) {
+ ball->spindir = DIR(*vel * dir);
+ ball->vang = *vel * ORIENTCYCLE;
+ ball->spindelay = (int) ((double) M_PI * avgsize / (ABS(ball->vang))) + 1;
+ } else
+ ball->spindir = 0;
+}
+
+static int
+collide(bouncestruct * bp, int aball)
+{
+ int i, d, x, y;
+
+ for (i = 0; i < aball; i++) {
+ x = (bp->balls[i].x - bp->balls[aball].x);
+ y = (bp->balls[i].y - bp->balls[aball].y);
+ d = (int) sqrt((double) (x * x + y * y));
+ if (d < bp->avgsize)
+ return i;
+ }
+ return i;
+}
+
+void
+init_bounce(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ int size = MI_SIZE(mi);
+ bouncestruct *bp;
+ XGCValues gcv;
+ int i, tryagain = 0;
+
+ if (bounces == NULL) {
+ if ((bounces = (bouncestruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (bouncestruct))) == NULL)
+ return;
+ }
+ bp = &bounces[MI_SCREEN(mi)];
+
+ if (!bp->stippledGC) {
+ gcv.foreground = MI_WIN_BLACK_PIXEL(mi);
+ gcv.background = MI_WIN_BLACK_PIXEL(mi);
+ if ((bp->stippledGC = XCreateGC(display, window,
+ GCForeground | GCBackground, &gcv)) == None)
+ return;
+ }
+ if (!bp->init_orients) {
+ BALLBITS(bounce0_bits, bounce0_width, bounce0_height);
+ BALLBITS(bounce1_bits, bounce1_width, bounce1_height);
+ BALLBITS(bounce2_bits, bounce2_width, bounce2_height);
+ BALLBITS(bounce3_bits, bounce3_width, bounce3_height);
+ BALLBITS(bouncemask_bits, bouncemask_width, bouncemask_height);
+ }
+ bp->width = MI_WIN_WIDTH(mi);
+ bp->height = MI_WIN_HEIGHT(mi);
+ if (bp->width < 2)
+ bp->width = 2;
+ if (bp->height < 2)
+ bp->height = 2;
+ bp->restartnum = TIME;
+ bounce_windows(mi, bp);
+ bp->nballs = MI_BATCHCOUNT(mi);
+ if (bp->nballs < -MINBALLS) {
+ /* if bp->nballs is random ... the size can change */
+ if (bp->balls != NULL) {
+ (void) free((void *) bp->balls);
+ bp->balls = NULL;
+ }
+ bp->nballs = NRAND(-bp->nballs - MINBALLS + 1) + MINBALLS;
+ } else if (bp->nballs < MINBALLS)
+ bp->nballs = MINBALLS;
+ if (!bp->balls)
+ bp->balls = (ballstruct *) malloc(bp->nballs * sizeof (ballstruct));
+ if (size == 0 ||
+ MINGRIDSIZE * size > bp->width || MINGRIDSIZE * size > bp->height) {
+ if (bp->width > MINGRIDSIZE * bounce0_width &&
+ bp->height > MINGRIDSIZE * bounce0_height) {
+ bp->pixelmode = False;
+ bp->xs = bounce0_width;
+ bp->ys = bounce0_height;
+ } else {
+ bp->pixelmode = True;
+ bp->ys = MAX(MINSIZE, MIN(bp->width, bp->height) / MINGRIDSIZE);
+ bp->xs = bp->ys;
+ }
+ } else {
+ bp->pixelmode = True;
+ if (size < -MINSIZE)
+ bp->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(bp->width, bp->height) /
+ MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE)
+ bp->ys = MINSIZE;
+ else
+ bp->ys = MIN(size, MAX(MINSIZE, MIN(bp->width, bp->height) /
+ MINGRIDSIZE));
+ bp->xs = bp->ys;
+ }
+ bp->avgsize = (bp->xs + bp->ys) / 2;
+ i = 0;
+ while (i < bp->nballs) {
+ bp->balls[i].vx = ((LRAND() & 1) ? -1 : 1) * (NRAND(MAX_STRENGTH) + 1);
+ bp->balls[i].x = (bp->balls[i].vx >= 0) ? 0 : bp->width - bp->xs;
+ bp->balls[i].y = NRAND(bp->height / 2);
+ if (i == collide(bp, i) || tryagain >= 8) {
+ if (MI_NPIXELS(mi) > 2)
+ bp->balls[i].color =
+ MI_PIXEL(mi, NRAND(MI_NPIXELS(mi)));
+ else
+ bp->balls[i].color = MI_WIN_WHITE_PIXEL(mi);
+ bp->balls[i].xlast = -1;
+ bp->balls[i].ylast = 0;
+ bp->balls[i].orientlast = 0;
+ bp->balls[i].spincount = 1;
+ bp->balls[i].spindelay = 1;
+ bp->balls[i].vy = ((LRAND() & 1) ? -1 : 1) * NRAND(MAX_STRENGTH);
+ bp->balls[i].spindir = 0;
+ bp->balls[i].vang = 0;
+ bp->balls[i].orient = NRAND(ORIENTS);
+ i++;
+ } else
+ tryagain++;
+ }
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+}
+
+void
+draw_bounce(ModeInfo * mi)
+{
+ bouncestruct *bp = &bounces[MI_SCREEN(mi)];
+ int i;
+
+ for (i = 0; i < bp->nballs; i++) {
+ drawball(mi, &bp->balls[i]);
+ moveball(mi, &bp->balls[i]);
+ }
+ for (i = 0; i < bp->nballs; i++)
+ checkCollision(bp, i);
+ if (!NRAND(TIME)) /* Put some randomness into the time */
+ bp->restartnum--;
+ if (!bp->restartnum)
+ init_bounce(mi);
+}
+
+void
+release_bounce(ModeInfo * mi)
+{
+ if (bounces != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ bouncestruct *bp = &bounces[screen];
+ int bits;
+
+ if (bp->balls != NULL)
+ (void) free((void *) bp->balls);
+ if (bp->stippledGC != NULL)
+ XFreeGC(MI_DISPLAY(mi), bp->stippledGC);
+ for (bits = 0; bits < bp->init_orients; bits++)
+ XFreePixmap(MI_DISPLAY(mi), bp->pixmaps[bits]);
+ }
+ (void) free((void *) bounces);
+ bounces = NULL;
+ }
+}
+
+void
+refresh_bounce(ModeInfo * mi)
+{
+ /* Do nothing, it will refresh by itself */
+ bouncestruct *bp = &bounces[MI_SCREEN(mi)];
+
+ bounce_windows(mi, bp);
+}
+
+static void
+bounce_windows(ModeInfo * mi, bouncestruct * bs)
+{
+ Window root, parent, *children;
+ unsigned int nchildren;
+ int i;
+ int n;
+
+ if (!MI_WIN_IS_INROOT(mi)) {
+ bs->nwindow = 0;
+ return;
+ }
+ if (XQueryTree(MI_DISPLAY(mi), MI_WINDOW(mi),
+ &root, &parent, &children, &nchildren) == 0) { /* failure */
+ bs->nwindow = 0;
+ return;
+ }
+ bs->nwindow = nchildren;
+ if (bs->windows != NULL) {
+ free(bs->windows);
+ }
+ bs->windows = (ballwindow *) malloc(bs->nwindow * sizeof (ballwindow));
+ for (n = 0, i = 0; i < bs->nwindow; i++) {
+ XWindowAttributes att;
+
+/* May give X Error of failed request: BadWindow (invalid Window parameter)
+ Major opcode of failed request: 3 (X_GetWindowAttributes) */
+ if (XGetWindowAttributes(MI_DISPLAY(mi), children[i], &att) == 0) { /* failure */
+ bs->nwindow = 0;
+ return;
+ }
+ if ((att.x < 0) || (att.x > bs->width) ||
+ (att.y < 0) || (att.y > bs->height) ||
+#if defined(__cplusplus) || defined(c_plusplus)
+ (att.c_class != InputOutput) ||
+#else
+ (att.class != InputOutput) ||
+#endif
+ (att.map_state != IsViewable)) {
+ continue;
+ }
+ bs->windows[n].x = att.x;
+ bs->windows[n].y = att.y;
+ bs->windows[n].width = att.width;
+ bs->windows[n].height = att.height;
+ n++;
+ }
+ bs->nwindow = n;
+ XFree((caddr_t) children);
+ return;
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)braid.c 4.03 97/04/10 xlockmore";
+
+#endif
+
+/*-
+ * braid - random braids around a circle and then changes the color in
+ * a rotational pattern, for the X Window System lockscreen.
+ *
+ * Copyright (c) 1995 by John Neil.
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Jamie Zawinski <jwz@netscape.com> compatible with xscreensaver
+ * 01-Sep-95: color knotted components differently, J. Neil.
+ * 29-Aug-95: Written. John Neil <neil@math.idbsu.edu>
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Braid"
+#define HACK_INIT init_braid
+#define HACK_DRAW draw_braid
+#define DEF_DELAY 1000
+#define DEF_BATCHCOUNT 15
+#define DEF_CYCLES 100
+#define UNIFORM_COLORS
+#include "xlockmore.h"
+#else /* STANDALONE */
+#include "xlock.h"
+ModeSpecOpt braid_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+#if defined( COLORROUND ) && defined( COLORCOMP )
+#undef COLORROUND
+#undef COLORCOMP
+#endif
+
+#if !defined( COLORROUND ) && !defined( COLORCOMP )
+#if 0
+/* to color in a circular pattern use COLORROUND */
+#define COLORROUND
+#else
+/* to color by component use COLORCOMP */
+#define COLORCOMP
+#endif
+#endif
+
+#define MAXLENGTH 50 /* the maximum length of a braid word */
+#define MINLENGTH 8 /* the minimum length of a braid word */
+#define MAXSTRANDS 15 /* the maximum number of strands in the braid */
+#define MINSTRANDS 3 /* the minimum number of strands in the braid */
+#define SPINRATE 12.0 /* the rate at which the colors spin */
+
+#define INTRAND(min,max) (NRAND((max+1)-(min))+(min))
+#define FLOATRAND(min,max) ((min)+((double) LRAND()/((double) MAXRAND))*((max)-(min)))
+
+typedef struct {
+ int braidword[MAXLENGTH];
+ int components[MAXSTRANDS];
+ int startcomp[MAXLENGTH][MAXSTRANDS];
+ int nstrands;
+ int braidlength;
+ float startcolor;
+ int center_x;
+ int center_y;
+ float min_radius;
+ float max_radius;
+ float top, bottom, left, right;
+ int age;
+ int color_direction;
+} braidtype;
+
+static braidtype *braids = NULL;
+
+static int
+applyword(braidtype * braid, int string, int position)
+{
+ int i, c;
+
+ c = string;
+ for (i = position; i < braid->braidlength; i++) {
+ if (c == ABS(braid->braidword[i]))
+ c--;
+ else if (c == ABS(braid->braidword[i]) - 1)
+ c++;
+ }
+ for (i = 0; i < position; i++) {
+ if (c == ABS(braid->braidword[i]))
+ c--;
+ else if (c == ABS(braid->braidword[i]) - 1)
+ c++;
+ }
+ return c;
+}
+
+#if 0
+static int
+applywordto(braidtype * braid, int string, int position)
+{
+ int i, c;
+
+ c = string;
+ for (i = 0; i < position; i++) {
+ if (c == ABS(braid->braidword[i])) {
+ c--;
+ } else if (c == ABS(braid->braidword[i]) - 1) {
+ c++;
+ }
+ }
+ return c;
+}
+#endif
+
+static int
+applywordbackto(braidtype * braid, int string, int position)
+{
+ int i, c;
+
+ c = string;
+ for (i = position - 1; i >= 0; i--) {
+ if (c == ABS(braid->braidword[i])) {
+ c--;
+ } else if (c == ABS(braid->braidword[i]) - 1) {
+ c++;
+ }
+ }
+ return c;
+}
+
+void
+init_braid(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ braidtype *braid;
+ int used[MAXSTRANDS];
+ int i, count, comp, c;
+ float min_length;
+
+ if (braids == NULL) {
+ if ((braids = (braidtype *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (braidtype))) == NULL)
+ return;
+ }
+ braid = &braids[MI_SCREEN(mi)];
+
+ braid->center_x = MI_WIN_WIDTH(mi) / 2;
+ braid->center_y = MI_WIN_HEIGHT(mi) / 2;
+ braid->age = 0;
+
+ /* jwz: go in the other direction sometimes. */
+ braid->color_direction = ((LRAND() & 1) ? 1 : -1);
+
+ XClearWindow(display, MI_WINDOW(mi));
+
+ min_length = (braid->center_x > braid->center_y) ?
+ braid->center_y : braid->center_x;
+ braid->min_radius = min_length * 0.30;
+ braid->max_radius = min_length * 0.90;
+
+ if (MI_BATCHCOUNT(mi) < MINSTRANDS)
+ braid->nstrands = MINSTRANDS;
+ else
+ braid->nstrands = INTRAND(MINSTRANDS,
+ MAX(MIN(MIN(MAXSTRANDS, MI_BATCHCOUNT(mi)),
+ (int) ((braid->max_radius - braid->min_radius) / 5.0)), MINSTRANDS));
+ braid->braidlength = INTRAND(MINLENGTH, MIN(MAXLENGTH, braid->nstrands * 6));
+
+ for (i = 0; i < braid->braidlength; i++) {
+ braid->braidword[i] =
+ INTRAND(1, braid->nstrands - 1) * (INTRAND(1, 2) * 2 - 3);
+ if (i > 0)
+ while (braid->braidword[i] == -braid->braidword[i - 1])
+ braid->braidword[i] = INTRAND(1, braid->nstrands - 1) * (INTRAND(1, 2) * 2 - 3);
+ }
+
+ while (braid->braidword[0] == -braid->braidword[braid->braidlength - 1])
+ braid->braidword[braid->braidlength - 1] =
+ INTRAND(1, braid->nstrands - 1) * (INTRAND(1, 2) * 2 - 3);
+
+ do {
+ (void) memset((char *) used, 0, sizeof (used));
+ count = 0;
+ for (i = 0; i < braid->braidlength; i++)
+ used[ABS(braid->braidword[i])]++;
+ for (i = 0; i < braid->nstrands; i++)
+ count += (used[i] > 0) ? 1 : 0;
+ if (count < braid->nstrands - 1) {
+ braid->braidword[braid->braidlength] =
+ INTRAND(1, braid->nstrands - 1) * (INTRAND(1, 2) * 2 - 3);
+ while (braid->braidword[braid->braidlength] ==
+ -braid->braidword[braid->braidlength - 1] &&
+ braid->braidword[0] == -braid->braidword[braid->braidlength])
+ braid->braidword[braid->braidlength] =
+ INTRAND(1, braid->nstrands - 1) * (INTRAND(1, 2) * 2 - 3);
+ braid->braidlength++;
+ }
+ } while (count < braid->nstrands - 1 && braid->braidlength < MAXLENGTH);
+
+ braid->startcolor = (MI_NPIXELS(mi) > 2) ?
+ (float) NRAND(MI_NPIXELS(mi)) : 0.0;
+ /* XSetLineAttributes (display, MI_GC(mi), 2, LineSolid, CapRound,
+ JoinRound); */
+
+ (void) memset((char *) braid->components, 0, sizeof (braid->components));
+ c = 1;
+ comp = 0;
+ braid->components[0] = 1;
+ do {
+ i = comp;
+ do {
+ i = applyword(braid, i, 0);
+ braid->components[i] = braid->components[comp];
+ } while (i != comp);
+ count = 0;
+ for (i = 0; i < braid->nstrands; i++)
+ if (braid->components[i] == 0)
+ count++;
+ if (count > 0) {
+ for (comp = 0; braid->components[comp] != 0; comp++);
+ braid->components[comp] = ++c;
+ }
+ } while (count > 0);
+
+ for (i = 0; i < braid->nstrands; i++)
+ if (!(braid->components[i] & 1))
+ braid->components[i] *= -1;
+}
+
+void
+draw_braid(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ braidtype *braid = &braids[MI_SCREEN(mi)];
+ float num_points, t_inc;
+ float theta, psi;
+ float t, r_diff;
+ int i, s;
+ float x_1, y_1, x_2, y_2, r1, r2;
+ float color, color_use = 0.0, color_inc;
+
+ num_points = 500.0;
+ theta = (2.0 * M_PI) / (float) (braid->braidlength);
+ t_inc = (2.0 * M_PI) / num_points;
+ color_inc = (float) MI_NPIXELS(mi) / num_points;
+ color_inc *= braid->color_direction;
+ braid->startcolor += SPINRATE * color_inc;
+ if (braid->startcolor >= MI_NPIXELS(mi))
+ braid->startcolor = 0.0;
+
+ r_diff = (braid->max_radius - braid->min_radius) / (float) (braid->nstrands);
+
+ color = braid->startcolor;
+ psi = 0.0;
+ for (i = 0; i < braid->braidlength; i++) {
+ psi += theta;
+ for (t = 0.0; t < theta; t += t_inc) {
+#ifdef COLORROUND
+ color += color_inc;
+ if (color >= (float) (MI_NPIXELS(mi)))
+ color = 0.0;
+ color_use = color;
+#endif
+ for (s = 0; s < braid->nstrands; s++) {
+ if (ABS(braid->braidword[i]) == s)
+ continue;
+ if (ABS(braid->braidword[i]) - 1 == s) {
+ /* crosSINFg */
+#ifdef COLORCOMP
+ if (MI_NPIXELS(mi) > 2) {
+ color_use = color + SPINRATE *
+ braid->components[applywordbackto(braid, s, i)] +
+ (psi + t) / 2.0 / M_PI * (float) MI_NPIXELS(mi);
+ while (color_use >= (float) MI_NPIXELS(mi))
+ color_use -= (float) MI_NPIXELS(mi);
+ while (color_use < 0.0)
+ color_use += (float) MI_NPIXELS(mi);
+ }
+#endif
+#ifdef COLORROUND
+ if (MI_NPIXELS(mi) > 2) {
+ color_use += SPINRATE * color_inc;
+ while (color_use >= (float) (MI_NPIXELS(mi)))
+ color_use -= (float) MI_NPIXELS(mi);
+ }
+#endif
+ r1 = braid->min_radius + r_diff * (float) (s);
+ r2 = braid->min_radius + r_diff * (float) (s + 1);
+ if (braid->braidword[i] > 0 ||
+ (FABSF(t - theta / 2.0) > theta / 7.0)) {
+ x_1 = ((0.5 * (1.0 + SINF(t / theta * M_PI - M_PI_2)) * r2 +
+ 0.5 * (1.0 + SINF((theta - t) / theta * M_PI - M_PI_2)) * r1)) *
+ COSF(t + psi) + braid->center_x;
+ y_1 = ((0.5 * (1.0 + SINF(t / theta * M_PI - M_PI_2)) * r2 +
+ 0.5 * (1.0 + SINF((theta - t) / theta * M_PI - M_PI_2)) * r1)) *
+ SINF(t + psi) + braid->center_y;
+ x_2 = ((0.5 * (1.0 + SINF((t + t_inc) / theta * M_PI - M_PI_2)) * r2 +
+ 0.5 * (1.0 + SINF((theta - t - t_inc) / theta * M_PI - M_PI_2)) * r1)) *
+ COSF(t + t_inc + psi) + braid->center_x;
+ y_2 = ((0.5 * (1.0 + SINF((t + t_inc) / theta * M_PI - M_PI_2)) * r2 +
+ 0.5 * (1.0 + SINF((theta - t - t_inc) / theta * M_PI - M_PI_2)) * r1)) *
+ SINF(t + t_inc + psi) + braid->center_y;
+ if (MI_NPIXELS(mi) > 2)
+ XSetForeground(display, MI_GC(mi), MI_PIXEL(mi, (int) color_use));
+ else
+ XSetForeground(display, MI_GC(mi), MI_WIN_WHITE_PIXEL(mi));
+
+ XDrawLine(display, window, MI_GC(mi),
+ (int) (x_1), (int) (y_1), (int) (x_2), (int) (y_2));
+ }
+#ifdef COLORCOMP
+ if (MI_NPIXELS(mi) > 2) {
+ color_use = color + SPINRATE *
+ braid->components[applywordbackto(braid, s + 1, i)] +
+ (psi + t) / 2.0 / M_PI * (float) MI_NPIXELS(mi);
+ while (color_use >= (float) MI_NPIXELS(mi))
+ color_use -= (float) MI_NPIXELS(mi);
+ while (color_use < 0.0)
+ color_use += (float) MI_NPIXELS(mi);
+ }
+#endif
+ if (braid->braidword[i] < 0 ||
+ (FABSF(t - theta / 2.0) > theta / 7.0)) {
+ x_1 = ((0.5 * (1.0 + SINF(t / theta * M_PI - M_PI_2)) * r1 +
+ 0.5 * (1.0 + SINF((theta - t) / theta * M_PI - M_PI_2)) * r2)) *
+ COSF(t + psi) + braid->center_x;
+ y_1 = ((0.5 * (1.0 + SINF(t / theta * M_PI - M_PI_2)) * r1 +
+ 0.5 * (1.0 + SINF((theta - t) / theta * M_PI - M_PI_2)) * r2)) *
+ SINF(t + psi) + braid->center_y;
+ x_2 = ((0.5 * (1.0 + SINF((t + t_inc) / theta * M_PI - M_PI_2)) * r1 +
+ 0.5 * (1.0 + SINF((theta - t - t_inc) / theta * M_PI - M_PI_2)) * r2)) *
+ COSF(t + t_inc + psi) + braid->center_x;
+ y_2 = ((0.5 * (1.0 + SINF((t + t_inc) / theta * M_PI - M_PI_2)) * r1 +
+ 0.5 * (1.0 + SINF((theta - t - t_inc) / theta * M_PI - M_PI_2)) * r2)) *
+ SINF(t + t_inc + psi) + braid->center_y;
+ if (MI_NPIXELS(mi) > 2)
+ XSetForeground(display, MI_GC(mi), MI_PIXEL(mi, (int) color_use));
+ else
+ XSetForeground(display, MI_GC(mi), MI_WIN_WHITE_PIXEL(mi));
+
+ XDrawLine(display, window, MI_GC(mi),
+ (int) (x_1), (int) (y_1), (int) (x_2), (int) (y_2));
+ }
+ } else {
+ /* no crosSINFg */
+#ifdef COLORCOMP
+ if (MI_NPIXELS(mi) > 2) {
+ color_use = color + SPINRATE *
+ braid->components[applywordbackto(braid, s, i)] +
+ (psi + t) / 2.0 / M_PI * (float) MI_NPIXELS(mi);
+ while (color_use >= (float) MI_NPIXELS(mi))
+ color_use -= (float) MI_NPIXELS(mi);
+ while (color_use < 0.0)
+ color_use += (float) MI_NPIXELS(mi);
+ }
+#endif
+#ifdef COLORROUND
+ if (MI_NPIXELS(mi) > 2) {
+ color_use += SPINRATE * color_inc;
+ while (color_use >= (float) MI_NPIXELS(mi))
+ color_use -= (float) MI_NPIXELS(mi);
+ }
+#endif
+ r1 = braid->min_radius + r_diff * (float) (s);
+ x_1 = r1 * COSF(t + psi) + braid->center_x;
+ y_1 = r1 * SINF(t + psi) + braid->center_y;
+ x_2 = r1 * COSF(t + t_inc + psi) + braid->center_x;
+ y_2 = r1 * SINF(t + t_inc + psi) + braid->center_y;
+ if (MI_NPIXELS(mi) > 2)
+ XSetForeground(display, MI_GC(mi), MI_PIXEL(mi, (int) color_use));
+ else
+ XSetForeground(display, MI_GC(mi), MI_WIN_WHITE_PIXEL(mi));
+
+ XDrawLine(display, window, MI_GC(mi),
+ (int) (x_1), (int) (y_1), (int) (x_2), (int) (y_2));
+ }
+ }
+ }
+ }
+
+ if (++braid->age > MI_CYCLES(mi))
+ init_braid(mi);
+}
+
+void
+release_braid(ModeInfo * mi)
+{
+ if (braids != NULL) {
+ (void) free((void *) braids);
+ braids = NULL;
+ }
+}
+
+void
+refresh_braid(ModeInfo * mi)
+{
+ /* Do nothing, it will refresh by itself */
+}
--- /dev/null
+
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)bug.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * bug.c - Michael Palmiter's simulated evolution for xlock,
+ * the X Window System lockscreen.
+ *
+ * Copyright (c) 1995 by David Bagley.
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 24-Aug-95: Coded from A.K. Dewdney's, "Computer Recreations", Scientific
+ * American Magazine" May 1989 pp138-141 and Sept 1989 p 183.
+ * also used wator.c as a guide.
+ */
+
+/*-
+ * Bugs learn to hunt bacteria (or die) in the Garden of Eden and outside.
+ * They start as jitterbugs and "evolve" to move straight (in the Garden
+ * they may evolve to twirl around).
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Bug"
+#define HACK_INIT init_bug
+#define HACK_DRAW draw_bug
+#define DEF_DELAY 75000
+#define DEF_BATCHCOUNT 10
+#define DEF_CYCLES 32767
+#define DEF_SIZE -4
+#define DEF_NCOLORS 200
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt bug_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+#define BACTERIA 0
+#define BUG 1
+#define ORIENTS 6
+
+#define MAXENERGY 1500 /* Max energy storage */
+#define INITENERGY 400 /* Initial energy */
+#define FOODPERCYCLE 1
+#define BACTERIAENERGY 40
+#define STRONG 1000 /* Min energy to breed */
+#define MATURE 800 /* Breeding time of bugs */
+#define MAXGENE 6
+#define MINGENE (-MAXGENE)
+#define REDRAWSTEP 2000 /* How many bacteria to draw per cycle */
+#define MINGRIDSIZE 24
+#define MINSIZE 1
+
+/* Relative bug moves */
+/* Forward, Right, Hard Right, Reverse, Hard Left, Left */
+
+/* Compass bug moves */
+#define NE 0
+#define E 1
+#define SE 2
+#define SW 3
+#define W 4
+#define NW 5
+
+/* Bug data */
+typedef struct {
+ char direction;
+ int age, energy;
+ unsigned long color;
+ int col, row;
+ int gene[ORIENTS];
+ double gene_prob[ORIENTS];
+} bugstruct;
+
+/* Doublely linked list */
+typedef struct _BugList {
+ bugstruct info;
+ struct _BugList *previous, *next;
+} BugList;
+
+typedef struct {
+ int initialized;
+ int n; /* Number of bugs */
+ int eden; /* Does the garden exist? */
+ int generation;
+ int nhcols, nhrows;
+ int nccols, ncrows;
+ int width, height;
+ int edenwidth, edenheight;
+ int edenstartx, edenstarty;
+ int xs, ys, xb, yb;
+ int redrawing, redrawpos;
+ BugList *currbug, *babybug, *lastbug, *firstbug, *lasttemp, *firsttemp;
+ BugList **arr; /* 0=empty or pts to a bug */
+ char *bacteria; /* 0=empty or food */
+} bugfarmstruct;
+
+static double genexp[MAXGENE - MINGENE + 1];
+static bugfarmstruct *bugfarms = NULL;
+
+#if 0
+static void
+cart2hex(cx, cy, hx, hy)
+ int cx, cy, *hx, *hy;
+{
+ *hy = cy / 2;
+ *hx = (cx + 1) / 2 - 1;
+}
+
+#endif
+
+static void
+hex2cart(int hx, int hy, int *cx, int *cy)
+{
+ *cy = hy * 2 + 1;
+ *cx = 2 * hx + 1 + !(hy & 1);
+}
+
+/* hexagon compass move */
+static char
+hexcmove(bugfarmstruct * bp, int hx, int hy, int dir, int *nhx, int *nhy)
+{
+ switch (dir) {
+ case NE:
+ *nhy = hy - 1;
+ *nhx = hx + (int) !(hy & 1);
+ return (*nhy >= 0 && *nhx < bp->nhcols - !(*nhy & 1));
+ case E:
+ *nhy = hy;
+ *nhx = hx + 1;
+ return (*nhx < bp->nhcols - !(*nhy & 1));
+ case SE:
+ *nhy = hy + 1;
+ *nhx = hx + (int) !(hy & 1);
+ return (*nhy < bp->nhrows && *nhx < bp->nhcols - !(*nhy & 1));
+ case SW:
+ *nhy = hy + 1;
+ *nhx = hx - (int) (hy & 1);
+ return (*nhy < bp->nhrows && *nhx >= 0);
+ case W:
+ *nhy = hy;
+ *nhx = hx - 1;
+ return (*nhx >= 0);
+ case NW:
+ *nhy = hy - 1;
+ *nhx = hx - (int) (hy & 1);
+ return (*nhy >= 0 && *nhx >= 0);
+ default:
+ return 0;
+ }
+}
+
+static int
+neighbor(bugfarmstruct * bp, int hcol, int hrow)
+{
+ int colrow = hcol + hrow * bp->nhcols;
+
+ if ((hrow > 0) && (bp->arr[colrow - bp->nhcols]))
+ return True;
+ if ((hrow < bp->nhrows - 1) && bp->arr[colrow + bp->nhcols])
+ return True;
+ if (hcol > 0) {
+ if (bp->arr[colrow - 1])
+ return True;
+ if (hrow & 1) {
+ if ((hrow > 0) && bp->arr[colrow - 1 - bp->nhcols])
+ return True;
+ if ((hrow < bp->nhrows - 1) && bp->arr[colrow - 1 + bp->nhcols])
+ return True;
+ }
+ }
+ if (hcol < bp->nhcols - 1) {
+ if (bp->arr[colrow + 1])
+ return True;
+ if (!(hrow & 1)) {
+ if ((hrow > 0) && bp->arr[colrow + 1 - bp->nhcols])
+ return True;
+ if ((hrow < bp->nhrows - 1) && bp->arr[colrow + 1 + bp->nhcols])
+ return True;
+ }
+ }
+ return False;
+}
+
+static void
+drawabacterium(ModeInfo * mi, int hcol, int hrow, char color)
+{
+ bugfarmstruct *bp = &bugfarms[MI_SCREEN(mi)];
+ int ccol, crow;
+
+ if (color)
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WIN_WHITE_PIXEL(mi));
+ else
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WIN_BLACK_PIXEL(mi));
+ hex2cart(hcol, hrow, &ccol, &crow);
+ XFillRectangle(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ bp->xb + bp->xs * ccol, bp->yb + bp->ys * crow,
+ bp->xs, bp->ys);
+}
+
+static void
+drawabug(ModeInfo * mi, int hcol, int hrow, unsigned long color)
+{
+ bugfarmstruct *bp = &bugfarms[MI_SCREEN(mi)];
+ int ccol, crow;
+
+ if (MI_NPIXELS(mi) > 2)
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_PIXEL(mi, color));
+ else
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WIN_WHITE_PIXEL(mi));
+ hex2cart(hcol, hrow, &ccol, &crow);
+ XFillRectangle(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ bp->xb + bp->xs * (ccol - 1), bp->yb + bp->ys * (crow - 1),
+ 3 * bp->xs, 3 * bp->ys);
+}
+
+
+static void
+eraseabug(ModeInfo * mi, int hcol, int hrow)
+{
+ bugfarmstruct *bp = &bugfarms[MI_SCREEN(mi)];
+ int ccol, crow;
+
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WIN_BLACK_PIXEL(mi));
+ hex2cart(hcol, hrow, &ccol, &crow);
+ XFillRectangle(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ bp->xb + bp->xs * (ccol - 1), bp->yb + bp->ys * (crow - 1),
+ 3 * bp->xs, 3 * bp->ys);
+}
+
+static void
+init_buglist(bugfarmstruct * bp)
+{
+ /* Waste some space at the beginning and end of list
+ so we do not have to complicated checks against falling off the ends. */
+ bp->lastbug = (BugList *) malloc(sizeof (BugList));
+ bp->firstbug = (BugList *) malloc(sizeof (BugList));
+ bp->firstbug->previous = bp->lastbug->next = NULL;
+ bp->firstbug->next = bp->lastbug->previous = NULL;
+ bp->firstbug->next = bp->lastbug;
+ bp->lastbug->previous = bp->firstbug;
+
+ bp->lasttemp = (BugList *) malloc(sizeof (BugList));
+ bp->firsttemp = (BugList *) malloc(sizeof (BugList));
+ bp->firsttemp->previous = bp->lasttemp->next = NULL;
+ bp->firsttemp->next = bp->lasttemp->previous = NULL;
+ bp->firsttemp->next = bp->lasttemp;
+ bp->lasttemp->previous = bp->firsttemp;
+}
+
+static void
+addto_buglist(bugfarmstruct * bp, bugstruct info)
+{
+ bp->currbug = (BugList *) malloc(sizeof (BugList));
+ bp->lastbug->previous->next = bp->currbug;
+ bp->currbug->previous = bp->lastbug->previous;
+ bp->currbug->next = bp->lastbug;
+ bp->lastbug->previous = bp->currbug;
+ bp->currbug->info = info;
+}
+
+static void
+removefrom_buglist(bugfarmstruct * bp, BugList * ptr)
+{
+ ptr->previous->next = ptr->next;
+ ptr->next->previous = ptr->previous;
+ bp->arr[ptr->info.col + ptr->info.row * bp->nhcols] = 0;
+ (void) free((void *) ptr);
+}
+
+static void
+dupin_buglist(bugfarmstruct * bp)
+{
+ BugList *temp;
+
+ temp = (BugList *) malloc(sizeof (BugList));
+ temp->previous = bp->babybug;
+ temp->next = bp->babybug->next;
+ bp->babybug->next = temp;
+ temp->next->previous = temp;
+ temp->info = bp->babybug->info;
+ bp->babybug = temp;
+}
+
+/*-
+ * new bug at end of list, this rotates who goes first, young bugs go last
+ * this most likely will not change the feel to any real degree
+ */
+static void
+cutfrom_buglist(bugfarmstruct * bp)
+{
+ bp->babybug = bp->currbug;
+ bp->currbug = bp->currbug->previous;
+ bp->currbug->next = bp->babybug->next;
+ bp->babybug->next->previous = bp->currbug;
+ bp->babybug->next = bp->lasttemp;
+ bp->babybug->previous = bp->lasttemp->previous;
+ bp->babybug->previous->next = bp->babybug;
+ bp->babybug->next->previous = bp->babybug;
+}
+
+static void
+reattach_buglist(bugfarmstruct * bp)
+{
+ bp->currbug = bp->lastbug->previous;
+ bp->currbug->next = bp->firsttemp->next;
+ bp->currbug->next->previous = bp->currbug;
+ bp->lastbug->previous = bp->lasttemp->previous;
+ bp->lasttemp->previous->next = bp->lastbug;
+ bp->lasttemp->previous = bp->firsttemp;
+ bp->firsttemp->next = bp->lasttemp;
+}
+
+static void
+flush_buglist(bugfarmstruct * bp)
+{
+ while (bp->lastbug->previous != bp->firstbug) {
+ bp->currbug = bp->lastbug->previous;
+ bp->currbug->previous->next = bp->lastbug;
+ bp->lastbug->previous = bp->currbug->previous;
+ /*bp->arr[bp->currbug->info.col + bp->currbug->info.row * bp->nhcols] = 0; */
+ (void) free((void *) bp->currbug);
+ }
+
+ while (bp->lasttemp->previous != bp->firsttemp) {
+ bp->currbug = bp->lasttemp->previous;
+ bp->currbug->previous->next = bp->lasttemp;
+ bp->lasttemp->previous = bp->currbug->previous;
+ /*bp->arr[bp->currbug->info.col + bp->currbug->info.row * bp->nhcols] = 0; */
+ (void) free((void *) bp->currbug);
+ }
+}
+
+static int
+dirbug(bugstruct * info)
+{
+ double sum = 0.0, prob;
+ int i;
+
+ prob = (double) LRAND() / MAXRAND;
+ for (i = 0; i < ORIENTS; i++) {
+ sum += info->gene_prob[i];
+ if (prob < sum)
+ return i;
+ }
+ return ORIENTS - 1; /* Could miss due to rounding */
+}
+
+static void
+mutatebug(bugstruct * info)
+{
+ double sum = 0.0;
+ int gene;
+
+ gene = NRAND(ORIENTS);
+ if (LRAND() & 1) {
+ if (info->gene[gene] == MAXGENE)
+ return;
+ info->gene[gene]++;
+ } else {
+ if (info->gene[gene] == MINGENE)
+ return;
+ info->gene[gene]--;
+ }
+ for (gene = 0; gene < ORIENTS; gene++)
+ sum += genexp[info->gene[gene] + MAXGENE];
+ for (gene = 0; gene < ORIENTS; gene++)
+ info->gene_prob[gene] = genexp[info->gene[gene] + MAXGENE] / sum;
+}
+
+static void
+makebacteria(ModeInfo * mi,
+ int n, int startx, int starty, int width, int height)
+{
+ int i = 0, j = 0, hcol, hrow, colrow;
+ bugfarmstruct *bp = &bugfarms[MI_SCREEN(mi)];
+
+ /* Make bacteria but if can't, don't loop forever */
+ while (i < n && j < 2 * n) {
+ hrow = NRAND(height) + starty;
+ if (width - (!(hrow & 1)) > 0)
+ hcol = NRAND(width - (!(hrow & 1))) + startx;
+ else
+ hcol = startx;
+ colrow = hcol + hrow * bp->nhcols;
+ j++;
+ if (!bp->arr[colrow] && !bp->bacteria[colrow]) {
+ i++;
+ bp->bacteria[colrow] = True;
+ drawabacterium(mi, hcol, hrow, True);
+ }
+ }
+}
+
+static void
+redrawbacteria(ModeInfo * mi, int colrow)
+{
+ int hcol, hrow;
+ bugfarmstruct *bp = &bugfarms[MI_SCREEN(mi)];
+
+ if (!bp->bacteria[colrow])
+ return;
+
+ hrow = colrow / bp->nhcols;
+ hcol = colrow % bp->nhcols;
+ drawabacterium(mi, hcol, hrow, True);
+}
+
+void
+init_bug(ModeInfo * mi)
+{
+ bugfarmstruct *bp;
+ int size = MI_SIZE(mi);
+ int i = 0, j = 0, hcol, hrow, gene, colrow;
+ double sum;
+ bugstruct info;
+
+ if (bugfarms == NULL) {
+ if ((bugfarms = (bugfarmstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (bugfarmstruct))) == NULL)
+ return;
+ }
+ bp = &bugfarms[MI_SCREEN(mi)];
+ bp->redrawing = 0;
+ bp->generation = 0;
+ if (!bp->initialized) { /* Genesis */
+ bp->initialized = 1;
+ /* Set up what will be a 'triply' linked list.
+ doubly linked list, doubly linked to an array */
+ init_buglist(bp);
+ genexp[MAXGENE] = 1;
+ for (i = 1; i <= MAXGENE; i++) {
+ genexp[MAXGENE + i] = genexp[MAXGENE + i - 1] * M_E;
+ genexp[MAXGENE - i] = 1.0 / genexp[MAXGENE + i];
+ }
+ } else /* Apocolypse */
+ flush_buglist(bp);
+
+ bp->width = MI_WIN_WIDTH(mi);
+ bp->height = MI_WIN_HEIGHT(mi);
+ if (bp->width < 4)
+ bp->width = 4;
+ if (bp->height < 4)
+ bp->height = 4;
+
+ if (size < -MINSIZE)
+ bp->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(bp->width, bp->height) /
+ MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE) {
+ if (!size)
+ bp->ys = MAX(MINSIZE, MIN(bp->width, bp->height) / MINGRIDSIZE);
+ else
+ bp->ys = MINSIZE;
+ } else
+ bp->ys = MIN(size, MAX(MINSIZE, MIN(bp->width, bp->height) /
+ MINGRIDSIZE));
+ bp->xs = bp->ys;
+ bp->nccols = MAX(bp->width / bp->xs - 1, 2);
+ bp->ncrows = MAX(bp->height / bp->ys, 2);
+ bp->nhcols = bp->nccols / 2;
+ bp->nhrows = bp->ncrows / 2;
+ bp->nhrows -= !(bp->nhrows & 1); /* Must be odd */
+ bp->xb = (bp->width - bp->xs * bp->nccols) / 2;
+ bp->yb = (bp->height - bp->ys * bp->ncrows) / 2;
+ if (bp->arr != NULL)
+ (void) free((void *) bp->arr);
+ bp->arr = (BugList **) calloc(bp->nhcols * bp->nhrows, sizeof (BugList *));
+ if (bp->bacteria != NULL)
+ (void) free((void *) bp->bacteria);
+ bp->bacteria = (char *) calloc(bp->nhcols * bp->nhrows, sizeof (char));
+
+ bp->edenwidth = bp->nhcols / 4;
+ bp->edenheight = bp->nhrows / 4;
+ if (bp->edenheight)
+ bp->edenheight -= !(bp->edenheight & 1); /* Make sure its odd */
+ bp->eden = (bp->edenwidth > 1 && bp->edenheight > 1);
+ if (bp->eden) {
+ bp->edenstartx = NRAND(bp->nhcols - bp->edenwidth);
+ bp->edenstarty = NRAND(bp->nhrows - bp->edenheight);
+ if (bp->edenstarty & 1)
+ bp->edenstarty++;
+ }
+ /* Play G-d with these numbers */
+ bp->n = MI_BATCHCOUNT(mi);
+ if (bp->n < 0)
+ bp->n = NRAND(-bp->n) + 1;
+
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+
+ /* Make bugs but if can't, don't loop forever */
+ i = 0, j = 0;
+ while (i < bp->n && j < 2 * bp->n) {
+ hrow = NRAND(bp->nhrows);
+ if (bp->nhcols - (!(hrow & 1)) > 0)
+ hcol = NRAND(bp->nhcols - (!(hrow & 1)));
+ else
+ hcol = 0;
+ colrow = hcol + hrow * bp->nhcols;
+ j++;
+ if (!bp->arr[colrow] && !neighbor(bp, hcol, hrow)) {
+ i++;
+ info.age = 0;
+ info.energy = INITENERGY;
+ info.direction = NRAND(ORIENTS);
+ for (gene = 0; gene < ORIENTS; gene++)
+#if 0 /* Some creationalism, may create gliders or twirlers */
+ do {
+ double temp = (double) LRAND() / MAXRAND;
+
+ info.gene[gene] = ((int) (1.0 / (1.0 - temp * temp)) - 1) *
+ ((LRAND() & 1) ? -1 : 1);
+ } while (info.gene[gene] > MAXGENE / 2 ||
+ info.gene[gene] < MINGENE / 2);
+#else /* Jitterbugs, evolve or die */
+ info.gene[gene] = 0;
+#endif
+ sum = 0;
+ for (gene = 0; gene < ORIENTS; gene++)
+ sum += genexp[info.gene[gene] + MAXGENE];
+ for (gene = 0; gene < ORIENTS; gene++)
+ info.gene_prob[gene] = genexp[info.gene[gene] + MAXGENE] / sum;
+ if (MI_NPIXELS(mi) > 2)
+ info.color = NRAND(MI_NPIXELS(mi));
+ else
+ info.color = 0;
+ info.col = hcol;
+ info.row = hrow;
+ addto_buglist(bp, info);
+ bp->arr[colrow] = bp->currbug;
+ drawabug(mi, hcol, hrow, bp->currbug->info.color);
+ }
+ }
+ makebacteria(mi, bp->nhcols * bp->nhrows / 2, 0, 0, bp->nhcols, bp->nhrows);
+ if (bp->eden)
+ makebacteria(mi, bp->edenwidth * bp->edenheight / 2,
+ bp->edenstartx, bp->edenstarty, bp->edenwidth, bp->edenheight);
+}
+
+#define ENOUGH 16
+void
+draw_bug(ModeInfo * mi)
+{
+ bugfarmstruct *bp = &bugfarms[MI_SCREEN(mi)];
+ int hcol, hrow, nhcol, nhrow, colrow, ncolrow, absdir, tryit;
+
+ bp->currbug = bp->firstbug->next;
+ while (bp->currbug != bp->lastbug) {
+ hcol = bp->currbug->info.col;
+ hrow = bp->currbug->info.row;
+ colrow = hcol + hrow * bp->nhcols;
+ if (bp->currbug->info.energy-- < 0) { /* Time to die, Bug */
+ /* back up one or else in void */
+ bp->currbug = bp->currbug->previous;
+ removefrom_buglist(bp, bp->arr[colrow]);
+ bp->arr[colrow] = 0;
+ eraseabug(mi, hcol, hrow);
+ bp->n--;
+ } else { /* try to move */
+ bp->arr[colrow] = 0; /* Don't want neighbor to detect itself */
+ tryit = 0;
+ do {
+ if (tryit++ > ENOUGH) {
+ break;
+ }
+ absdir = (bp->currbug->info.direction +
+ dirbug(&bp->currbug->info)) % ORIENTS;
+ } while (!hexcmove(bp, hcol, hrow, absdir, &nhcol, &nhrow) ||
+ neighbor(bp, nhcol, nhrow));
+ bp->currbug->info.age++;
+ bp->currbug->info.energy--;
+ if (tryit <= ENOUGH) {
+ ncolrow = nhcol + nhrow * bp->nhcols;
+ if (bp->bacteria[ncolrow]) {
+ bp->currbug->info.energy += BACTERIAENERGY;
+ bp->bacteria[ncolrow] = 0;
+ if (bp->currbug->info.energy > MAXENERGY)
+ bp->currbug->info.energy = MAXENERGY;
+ }
+ bp->currbug->info.col = nhcol;
+ bp->currbug->info.row = nhrow;
+ bp->currbug->info.direction = absdir;
+ bp->arr[ncolrow] = bp->currbug;
+ if (bp->currbug->info.energy > STRONG &&
+ bp->currbug->info.age > MATURE) { /* breed */
+ drawabug(mi, nhcol, nhrow, bp->currbug->info.color);
+ cutfrom_buglist(bp); /* This rotates out who goes first */
+ bp->babybug->info.age = 0;
+ bp->babybug->info.energy = INITENERGY;
+ dupin_buglist(bp);
+ mutatebug(&bp->babybug->previous->info);
+ mutatebug(&bp->babybug->info);
+ bp->arr[colrow] = bp->babybug;
+ bp->babybug->info.col = hcol;
+ bp->babybug->info.row = hrow;
+ bp->n++;
+ } else {
+ eraseabug(mi, hcol, hrow);
+ drawabug(mi, nhcol, nhrow, bp->currbug->info.color);
+ }
+ } else
+ bp->arr[colrow] = bp->currbug;
+ }
+ bp->currbug = bp->currbug->next;
+ }
+ reattach_buglist(bp);
+ makebacteria(mi, FOODPERCYCLE, 0, 0, bp->nhcols, bp->nhrows);
+ if (bp->eden)
+ makebacteria(mi, FOODPERCYCLE,
+ bp->edenstartx, bp->edenstarty, bp->edenwidth, bp->edenheight);
+ if (!bp->n || bp->generation >= MI_CYCLES(mi))
+ init_bug(mi);
+ bp->generation++;
+ if (bp->redrawing) {
+ int i;
+
+ for (i = 0; i < REDRAWSTEP; i++) {
+ if (bp->bacteria[bp->redrawpos])
+ redrawbacteria(mi, bp->redrawpos);
+ if (++(bp->redrawpos) >= bp->nhcols * bp->nhrows) {
+ bp->redrawing = 0;
+ break;
+ }
+ }
+ }
+}
+
+void
+release_bug(ModeInfo * mi)
+{
+ if (bugfarms != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ bugfarmstruct *bp = &bugfarms[screen];
+
+ flush_buglist(bp);
+ (void) free((void *) bp->lastbug);
+ (void) free((void *) bp->firstbug);
+ (void) free((void *) bp->lasttemp);
+ (void) free((void *) bp->firsttemp);
+ if (bp->arr != NULL)
+ (void) free((void *) bp->arr);
+ if (bp->bacteria != NULL)
+ (void) free((void *) bp->bacteria);
+ }
+ (void) free((void *) bugfarms);
+ bugfarms = NULL;
+ }
+}
+
+void
+refresh_bug(ModeInfo * mi)
+{
+ bugfarmstruct *bp = &bugfarms[MI_SCREEN(mi)];
+
+ bp->redrawing = 1;
+ bp->redrawpos = 0;
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)cartoon.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * cartoon.c - A bouncing cartoon for xlock, the X Window System lockscreen.
+ *
+ * Copyright (c) 1988 by Sun Microsystems
+ *
+ * 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.
+ *
+ * Revision History:
+ *
+ * 10-May-97: Compatible with xscreensaver
+ * 14-Oct-96: <dhansen@metapath.com>
+ * Updated the equations for mapping the charater
+ * to follow a parabolic time curve. Also adjust
+ * the rate based on the size (area) of the cartoon.
+ * Eliminated unused variables carried over from bounce.c
+ * Still needs a user attribute to control the rate
+ * depending on their computer and preference.
+ * 20-Sep-94: I done this file starting from the previous bounce.c
+ * I draw the 8 cartoons like they are.
+ * Lorenzo Patocchi <patol@info.isbiel.ch>
+ * David monkeyed around with the cmap stuff to get it to work.
+ * 2-Sep-93: xlock version David Bagley <bagleyd@bigfoot.com>
+ * 1986: Sun Microsystems
+ */
+
+/*-
+ * original copyright
+ * **************************************************************************
+ * 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.
+ * ***************************************************************************
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Cartoon"
+#define HACK_INIT init_cartoon
+#define HACK_DRAW draw_cartoon
+#define DEF_DELAY 10000
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+
+#endif /* STANDALONE */
+
+#if defined( USE_XPM ) || defined( USE_XPMINC )
+
+#ifndef STANDALONE
+ModeSpecOpt cartoon_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif
+
+/* Yes, it does not have to be done again but you could override the above... */
+#if defined( USE_XPM ) || defined( USE_XPMINC )
+
+#if USE_XPMINC
+#include <xpm.h>
+#else
+#include <X11/xpm.h> /* Normal spot */
+#endif
+
+#include "pixmaps/calvin2.xpm"
+#include "pixmaps/gravity.xpm"
+#include "pixmaps/calvin4.xpm"
+#include "pixmaps/calvinf.xpm"
+#include "pixmaps/hobbes.xpm"
+#include "pixmaps/calvin.xpm"
+#include "pixmaps/marino2.xpm"
+#include "pixmaps/calvin3.xpm"
+#include "pixmaps/garfield.xpm"
+#ifdef ALL_CARTOONS /* Some of these gave me trouble on some systems */
+#include "pixmaps/dragon.xpm"
+#include "pixmaps/cal_hob.xpm"
+#define NUM_CARTOONS 11
+#else
+#define NUM_CARTOONS 9
+#endif
+#else
+#define NUM_CARTOONS 0 /* Not much point... */
+#endif
+
+#define MAX_X_STRENGTH 8
+#define MAX_Y_STRENGTH 3
+
+static char **cartoonlist[NUM_CARTOONS] =
+{
+#if NUM_CARTOONS
+ calvin2, gravity, calvin4, calvinf, hobbes,
+ calvin, marino2, calvin3, garfield
+#ifdef ALL_CARTOONS
+ ,dragon, cal_hob
+#endif
+#endif
+};
+
+typedef struct {
+ int x, y, xlast, ylast;
+ int vx, vy;
+ int ytime, yrate, ybase;
+ int width, height;
+ GC backGC;
+ XImage *image;
+ int success;
+ int choice;
+ Colormap cm;
+ unsigned long black, white;
+} cartoonstruct;
+
+static cartoonstruct *cartoons = NULL;
+
+static void erase_image(Display * display, Window win, GC gc,
+ int x, int y, int xl, int yl, int xsize, int ysize);
+
+static int tbx = 0;
+static int tby = 0;
+
+static void
+initimage(ModeInfo * mi, int cartoon)
+{
+#if defined( USE_XPM ) || defined( USE_XPMINC )
+ cartoonstruct *cp = &cartoons[MI_SCREEN(mi)];
+ XpmAttributes attrib;
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+
+ if (cp->cm != None) {
+ if (cp->backGC != None) {
+ XFreeGC(MI_DISPLAY(mi), cp->backGC);
+ cp->backGC = None;
+ }
+ XFreeColormap(MI_DISPLAY(mi), cp->cm);
+ }
+ if (!fixedColors(mi)) {
+ cp->cm = XCreateColormap(display, window, MI_VISUAL(mi), AllocNone);
+ attrib.colormap = cp->cm;
+ reserveColors(mi, cp->cm, &cp->black, &cp->white);
+ } else
+ attrib.colormap = MI_WIN_COLORMAP(mi);
+
+ attrib.visual = MI_VISUAL(mi);
+ attrib.depth = MI_WIN_DEPTH(mi);
+ attrib.valuemask = XpmVisual | XpmColormap | XpmDepth;
+
+ if (cp->image)
+ XDestroyImage(cp->image);
+ /* if (MI_NPIXELS(mi) > 2) *//* Does not look too bad in monochrome */
+ cp->success = (XpmSuccess == XpmCreateImageFromData(
+ display, cartoonlist[cartoon], &cp->image, (XImage **) NULL, &attrib));
+#endif
+ if (MI_WIN_IS_VERBOSE(mi))
+ (void) fprintf(stderr, "Color image %d%s loaded.\n",
+ cartoon, (cp->success) ? "" : " could not be");
+ if (cp->cm != None) {
+ if (cp->backGC == None) {
+ XGCValues xgcv;
+
+ setColormap(display, window, cp->cm, MI_WIN_IS_INWINDOW(mi));
+ xgcv.background = cp->black;
+ cp->backGC = XCreateGC(display, window, GCBackground, &xgcv);
+ }
+ } else {
+ cp->black = MI_WIN_BLACK_PIXEL(mi);
+ cp->backGC = MI_GC(mi);
+ }
+}
+
+static void
+put_cartoon(ModeInfo * mi)
+{
+ cartoonstruct *cp = &cartoons[MI_SCREEN(mi)];
+
+/* PURIFY 4.0.1 on SunOS4 and on Solaris 2 reports a 29756 byte memory leak on
+ * the next line. */
+ XPutImage(MI_DISPLAY(mi), MI_WINDOW(mi), cp->backGC,
+ cp->image, 0, 0,
+ cp->x - tbx, cp->y - tby,
+ cp->image->width, cp->image->height);
+ if (cp->xlast != -1) {
+ erase_image(MI_DISPLAY(mi), MI_WINDOW(mi), cp->backGC,
+ cp->x - tbx, cp->y - tby,
+ cp->xlast, cp->ylast,
+ cp->image->width, cp->image->height);
+ }
+} /* put_cartoon */
+
+static void
+select_cartoon(ModeInfo * mi)
+{
+#if ( NUM_CARTOONS <= 0 )
+ return;
+#else
+ cartoonstruct *cp = &cartoons[MI_SCREEN(mi)];
+
+#if ( NUM_CARTOONS > 1 )
+ int old;
+
+ old = cp->choice;
+ while (old == cp->choice)
+ cp->choice = NRAND(NUM_CARTOONS);
+ if (MI_WIN_IS_DEBUG(mi))
+ (void) fprintf(stderr, "cartoon %d.\n", cp->choice);
+ initimage(mi, cp->choice);
+#else /* Probably will never be used but ... */
+ cp->choice = 0;
+ if (MI_WIN_IS_DEBUG(mi))
+ (void) fprintf(stderr, "cartoon %d.\n", cp->choice);
+ if (!cp->success)
+ initimage(mi, cp->choice);
+#endif
+#endif
+} /* select_cartoon */
+
+static void
+move_cartoon(ModeInfo * mi)
+{
+ cartoonstruct *cp = &cartoons[MI_SCREEN(mi)];
+
+ cp->xlast = cp->x - tbx;
+ cp->ylast = cp->y - tby;
+
+ cp->x += cp->vx;
+ if ((cp->width > cp->image->width && cp->x > cp->width - cp->image->width) ||
+ (cp->width < cp->image->width && cp->x < 0)) {
+ /* Bounce off the right edge */
+ cp->x = 2 * (cp->width - cp->image->width) - cp->x;
+ cp->vx = -cp->vx;
+ } else if ((cp->width < cp->image->width &&
+ cp->x > cp->width - cp->image->width) ||
+ (cp->width > cp->image->width && cp->x < 0)) {
+ /* Bounce off the left edge */
+ cp->x = -cp->x;
+ cp->vx = -cp->vx;
+ }
+ cp->ytime++;
+
+ cp->y += ((cp->ytime / cp->yrate) - cp->ybase);
+
+
+ if (cp->y >= (cp->height + cp->image->height)) {
+ /* Back at the bottom edge, time for a new cartoon */
+ init_cartoon(mi);
+ }
+} /* move_cartoon */
+
+/* This stops some flashing, could be more efficient */
+static void
+erase_image(Display * display, Window win, GC gc,
+ int x, int y, int xl, int yl, int xsize, int ysize)
+{
+ if (y < 0)
+ y = 0;
+ if (x < 0)
+ x = 0;
+ if (xl < 0)
+ xl = 0;
+ if (yl < 0)
+ yl = 0;
+
+ if (xl - x > 0)
+ XFillRectangle(display, win, gc, x + xsize, yl, xl - x, ysize);
+ if (yl - y > 0)
+ XFillRectangle(display, win, gc, xl, y + ysize, xsize, yl - y);
+ if (y - yl > 0)
+ XFillRectangle(display, win, gc, xl, yl, xsize, y - yl);
+ if (x - xl > 0)
+ XFillRectangle(display, win, gc, xl, yl, x - xl, ysize);
+} /* erase_image */
+
+void
+init_cartoon(ModeInfo * mi)
+{
+ cartoonstruct *cp;
+ int i;
+
+ if (cartoons == NULL) {
+ if ((cartoons = (cartoonstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (cartoonstruct))) == NULL)
+ return;
+ }
+ cp = &cartoons[MI_SCREEN(mi)];
+
+ if (!cp->success) {
+ cp->choice = -1;
+
+ }
+ cp->width = MI_WIN_WIDTH(mi);
+ cp->height = MI_WIN_HEIGHT(mi);
+
+ select_cartoon(mi);
+
+ if (cp->success) {
+ cp->vx = ((LRAND() & 1) ? -1 : 1) * NRAND(MAX_X_STRENGTH);
+
+ cp->x = (cp->vx >= 0) ? 0 : cp->width - cp->image->width;
+
+ cp->y = cp->height + cp->image->height;
+ cp->ytime = 0;
+ i = 100000 / (cp->image->width * cp->image->height);
+ cp->yrate = (1 + NRAND(MAX_Y_STRENGTH)) * (i * i) / 4;
+ cp->ybase = (int) sqrt(((3 * cp->y / 4) +
+ (NRAND(cp->y / 4))) * 2 / cp->yrate);
+
+ cp->xlast = -1;
+ cp->ylast = 0;
+
+ XSetForeground(MI_DISPLAY(mi), cp->backGC, cp->black);
+ XFillRectangle(MI_DISPLAY(mi), MI_WINDOW(mi), cp->backGC,
+ 0, 0, cp->width, cp->height);
+ }
+} /* init_cartoon */
+
+void
+draw_cartoon(ModeInfo * mi)
+{
+ cartoonstruct *cp = &cartoons[MI_SCREEN(mi)];
+
+ if (cp->success) {
+ put_cartoon(mi);
+ move_cartoon(mi);
+ } else
+ init_cartoon(mi);
+} /* draw_cartoon */
+
+void
+release_cartoon(ModeInfo * mi)
+{
+ if (cartoons != NULL) {
+#if defined( USE_XPM ) || defined( USE_XPMINC )
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ cartoonstruct *cp = &cartoons[screen];
+
+ if (cp->image)
+ XDestroyImage(cp->image);
+ if (cp->cm != None) {
+ if (cp->backGC != None)
+ XFreeGC(MI_DISPLAY(mi), cp->backGC);
+ XFreeColormap(MI_DISPLAY(mi), cp->cm);
+ }
+ }
+#endif
+ (void) free((void *) cartoons);
+ cartoons = NULL;
+ }
+} /* release_cartoon */
+
+#endif
--- /dev/null
+#!/bin/sh
+
+rm -rf archives sso usr
--- /dev/null
+custom -p SKUNK97:Xlock -i -z `pwd`/archives/TAPE
--- /dev/null
+:
+# MakeSSO
+#
+
+rm -rf archives sso
+
+ CDMT_DIR=`pwd`; export CDMT_DIR
+ Xlock_DIR=`pwd`; export Xlock_DIR
+ cdmtParse
+ if test $? != 0
+ then
+ exit 1
+ fi
+
+ cdmtCompress
+ if test $? != 0
+ then
+ exit 1
+ fi
+
+ cdmtArchive
+ if test $? != 0
+ then
+ exit 1
+ fi
--- /dev/null
+MACROS:
+
+DEFAULT_EXEC_MODE = 0755
+
+DEFAULT_FILE_MODE = 0644
+DEFAULT_FILE_OWNER = bin
+DEFAULT_FILE_GROUP = bin
+
+DEFAULT_DIR_MODE = 0755
+DEFAULT_DIR_OWNER = bin
+DEFAULT_DIR_GROUP = bin
+
+DEFAULT_FIFO_MODE = 0644
+DEFAULT_FIFO_OWNER = bin
+DEFAULT_FIFO_GROUP = bin
+
+DEFAULT_DISTTREEROOT_SHARED = $CDMT_DIR
+DEFAULT_DISTTREEROOT_CLIENT = $CDMT_DIR
--- /dev/null
+
+COMP:SKUNK97:Xlock:
+description = "Xlock Screen Locker"
+version = 4.03
+subpackages = Xlock
+required = Xlock
+dependencies =
+distTreeRootSHARED = $Xlock_DIR
+distTreeRootCLIENT = $Xlock_DIR
+pkgFiles = $Xlock_DIR/input/Xlock.pkg
+
+FILE_DEFAULT:
+mode = $DEFAULT_FILE_MODE
+owner = $DEFAULT_FILE_OWNER
+group = $DEFAULT_FILE_GROUP
+
+DIR_DEFAULT:
+mode = $DEFAULT_DIR_MODE
+owner = $DEFAULT_DIR_OWNER
+group = $DEFAULT_DIR_GROUP
+
+FIFO_DEFAULT:
+mode = $DEFAULT_FIFO_MODE
+owner = $DEFAULT_FIFO_OWNER
+group = $DEFAULT_FIFO_GROUP
--- /dev/null
+
+PKG:Xlock:
+description = "Xlock Screen Locker"
+dependencies =
+distTreeRootSHARED = $Xlock_DIR
+distTreeRootCLIENT = $Xlock_DIR
+
+DIR:Xlock:SHARED:usr:
+mode = 0755
+owner = bin
+group = bin
+flags =
+
+DIR:Xlock:SHARED:usr/local:
+mode = 0755
+owner = bin
+group = bin
+flags =
+
+DIR:Xlock:SHARED:usr/local/bin:
+mode = 0755
+owner = bin
+group = bin
+flags =
+
+FILE:Xlock:SHARED:usr/local/bin/xlock:
+mode = 2755
+owner = bin
+group = auth
+flags =
+exportPath = /usr/local/bin/xlock
+
+FILE:Xlock:SHARED:usr/local/bin/xmlock:
+mode = 0755
+owner = bin
+group = bin
+flags =
+exportPath = /usr/local/bin/xmlock
+
+DIR:Xlock:SHARED:usr/local/man:
+mode = 0755
+owner = bin
+group = bin
+flags =
+
+DIR:Xlock:SHARED:usr/local/man/man1:
+mode = 0755
+owner = bin
+group = bin
+flags =
+
+FILE:Xlock:SHARED:usr/local/man/man1/xlock.1:
+mode = 0644
+owner = bin
+group = bin
+flags =
+exportPath = /usr/local/man/man1/xlock.1
+
+DIR:Xlock:SHARED:usr/local/man/cat1:
+mode = 0755
+owner = bin
+group = bin
+flags =
+
+FILE:Xlock:SHARED:usr/local/man/cat1/xlock.1:
+mode = 0644
+owner = bin
+group = bin
+flags =
+exportPath = /usr/local/man/cat1/xlock.1
+
+DIR:Xlock:SHARED:usr/local/lib:
+mode = 0755
+owner = bin
+group = bin
+flags =
+
+DIR:Xlock:SHARED:usr/local/lib/X11:
+mode = 0755
+owner = bin
+group = bin
+flags =
+
+DIR:Xlock:SHARED:usr/local/lib/X11/app-defaults:
+mode = 0755
+owner = bin
+group = bin
+flags =
+
+FILE:Xlock:CLIENT:usr/local/lib/X11/app-defaults/XLock:
+mode = 0644
+owner = bin
+group = bin
+flags =
+exportPath = /usr/lib/X11/app-defaults/XLock
+
+FILE:Xlock:CLIENT:usr/local/lib/X11/app-defaults/XmLock:
+mode = 0644
+owner = bin
+group = bin
+flags =
+exportPath = /usr/lib/X11/app-defaults/XmLock
--- /dev/null
+PROD:SKUNK97:Xlock:
+description = "Xlock Screen Locker"
+version = 4.03
+packages = SKUNK97:Xlock
+required = SKUNK97:Xlock
+cmpntFiles = Xlock.cmpnt
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)clock.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * clock.c - displays an analog clock moving around the screen.
+ * The design was highly inspirated from 'oclock' but not the code,
+ * which is all mine.
+ *
+ * Copyright (c) 1995 by Jeremie PETIT <petit@aurora.unice.fr>
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 24-Dec-95: Ron Hitchens <ron@idiom.com> cycles range and defaults
+ * changed.
+ * 01-Dec-95: Clock size changes each time it is displayed.
+ * 01-Jun-95: Written.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Clock"
+#define HACK_INIT init_clock
+#define HACK_DRAW draw_clock
+#define DEF_DELAY 100000
+#define DEF_BATCHCOUNT -16
+#define DEF_CYCLES 200
+#define DEF_SIZE -200
+#define DEF_NCOLORS 200
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt clock_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+#ifdef TM_IN_SYS_TIME
+#include <sys/time.h>
+#else
+#include <time.h>
+#endif
+
+#define MIN_CYCLES 50 /* shortest possible time before moving the clock */
+#define MAX_CYCLES 1000 /* longest possible time before moving the clock */
+#define CLOCK_BORDER 9 /* Percentage of the clock size for the border */
+#define HOURS_SIZE 50 /* Percentage of the clock size for hours length */
+#define MINUTES_SIZE 75 /* Idem for minutes */
+#define SECONDS_SIZE 80 /* Idem for seconds */
+#define HOURS_WIDTH 10 /* Percentage of the clock size for hours width */
+#define MINUTES_WIDTH 5 /* Idem for minutes */
+#define SECONDS_WIDTH 2 /* Idem for seconds */
+#define JEWEL_POSITION 90 /* The relative position of the jewel */
+#define JEWEL_SIZE 9 /* The relative size of the jewel */
+#define MINCLOCKS 1
+#define MINSIZE 16 /* size, minimum */
+
+typedef struct {
+ int size; /* length of the hand */
+ int width; /* width of the hand */
+ unsigned long color; /* color of the hand */
+} hand;
+
+typedef struct {
+ hand hours; /* the hours hand */
+ hand minutes; /* the minutes hand */
+ hand seconds; /* the seconds hand */
+ XPoint pos;
+ int size;
+ int radius;
+ int boxsize;
+ int jewel_size;
+ int jewel_position;
+ int border_width;
+ unsigned long border_color;
+ unsigned long jewel_color;
+ struct tm dd_time;
+} oclock;
+
+typedef struct {
+ oclock *oclocks;
+ time_t d_time;
+ int clock_count;
+ int width, height;
+ int nclocks;
+ int currentclocks;
+ int redrawing;
+} clockstruct;
+
+static clockstruct *clocks = NULL;
+
+static int
+myrand(int minimum, int maximum)
+{
+ return ((int) (minimum + (LRAND() / MAXRAND) * (maximum + 1 - minimum)));
+}
+
+static double
+HourToAngle(oclock * oclockp)
+{
+ return ((M_PI * ((double) oclockp->dd_time.tm_hour +
+ ((double) oclockp->dd_time.tm_min / 60) +
+ ((double) oclockp->dd_time.tm_sec / 3600))) / 6 - M_PI_2);
+}
+
+static double
+MinutesToAngle(oclock * oclockp)
+{
+ return ((M_PI * ((double) oclockp->dd_time.tm_min +
+ ((double) oclockp->dd_time.tm_sec / 60))) / 30 - M_PI_2);
+}
+
+static double
+SecondsToAngle(oclock * oclockp)
+{
+ return ((M_PI * ((double) oclockp->dd_time.tm_sec) / 30) - M_PI_2);
+}
+
+static void
+DrawDisk(Display * display, Window window, GC gc,
+ int center_x, int center_y, int diameter)
+{
+ int radius = diameter / 2;
+
+ if (diameter > 1)
+ XFillArc(display, window, gc,
+ center_x - radius, center_y - radius,
+ diameter, diameter,
+ 0, 23040);
+ else
+ XDrawPoint(display, window, gc, center_x, center_y);
+}
+
+static void
+DrawBorder(ModeInfo * mi, int clck, short int mode)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ clockstruct *cp = &clocks[MI_SCREEN(mi)];
+
+
+ if (mode == 0)
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ else
+ XSetForeground(display, gc, cp->oclocks[clck].border_color);
+
+ XSetLineAttributes(display, gc, cp->oclocks[clck].border_width,
+ LineSolid, CapNotLast, JoinMiter);
+ XDrawArc(display, MI_WINDOW(mi), gc,
+ cp->oclocks[clck].pos.x - cp->oclocks[clck].size / 2,
+ cp->oclocks[clck].pos.y - cp->oclocks[clck].size / 2,
+ cp->oclocks[clck].size, cp->oclocks[clck].size,
+ 0, 23040);
+}
+
+static void
+DrawJewel(ModeInfo * mi, int clck, short int mode)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ clockstruct *cp = &clocks[MI_SCREEN(mi)];
+
+ XSetLineAttributes(display, gc, 1, LineSolid, CapNotLast, JoinMiter);
+ if (mode == 0)
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ else
+ XSetForeground(display, gc, cp->oclocks[clck].jewel_color);
+ DrawDisk(display, MI_WINDOW(mi), gc,
+ cp->oclocks[clck].pos.x,
+ cp->oclocks[clck].pos.y - cp->oclocks[clck].jewel_position,
+ cp->oclocks[clck].jewel_size);
+}
+
+static void
+DrawHand(ModeInfo * mi, int clck, hand * h, double angle, short int mode)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ clockstruct *cp = &clocks[MI_SCREEN(mi)];
+ int cosi, sinj;
+
+ /* mode: 0 for erasing, anything else for drawing */
+ if (mode == 0)
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ else
+ XSetForeground(display, gc, h->color);
+ XSetLineAttributes(display, gc, h->width, LineSolid, CapNotLast, JoinMiter);
+ DrawDisk(display, window, gc,
+ cp->oclocks[clck].pos.x, cp->oclocks[clck].pos.y, h->width);
+ cosi = (int) (cos(angle) * (double) (h->size));
+ sinj = (int) (sin(angle) * (double) (h->size));
+ XDrawLine(display, window, gc,
+ cp->oclocks[clck].pos.x, cp->oclocks[clck].pos.y,
+ cp->oclocks[clck].pos.x + cosi, cp->oclocks[clck].pos.y + sinj);
+ DrawDisk(display, window, gc,
+ cp->oclocks[clck].pos.x + cosi, cp->oclocks[clck].pos.y + sinj,
+ h->width);
+}
+
+static void
+real_draw_clock(ModeInfo * mi, int clck, short int mode)
+{
+ clockstruct *cp = &clocks[MI_SCREEN(mi)];
+
+ DrawBorder(mi, clck, mode);
+ DrawJewel(mi, clck, mode);
+ DrawHand(mi, clck, &cp->oclocks[clck].hours,
+ HourToAngle(&cp->oclocks[clck]), mode);
+ DrawHand(mi, clck, &cp->oclocks[clck].minutes,
+ MinutesToAngle(&cp->oclocks[clck]), mode);
+ DrawHand(mi, clck, &cp->oclocks[clck].seconds,
+ SecondsToAngle(&cp->oclocks[clck]), mode);
+}
+
+static int
+collide(clockstruct * cp, int clck)
+{
+ int i, d, x, y;
+
+ for (i = 0; i < clck; i++) {
+ x = (cp->oclocks[i].pos.x - cp->oclocks[clck].pos.x);
+ y = (cp->oclocks[i].pos.y - cp->oclocks[clck].pos.y);
+ d = (int) sqrt((double) (x * x + y * y));
+ if (d < (cp->oclocks[i].size + cp->oclocks[i].border_width +
+ cp->oclocks[clck].size + cp->oclocks[clck].border_width) / 2)
+ return i;
+ }
+ return clck;
+}
+
+static int
+new_clock_state(ModeInfo * mi, int clck)
+{
+ clockstruct *cp = &clocks[MI_SCREEN(mi)];
+ int size = MI_SIZE(mi);
+ int tryit;
+
+ for (tryit = 0; tryit < 8; tryit++) {
+ /* We change the clock size */
+ if (size < -MINSIZE)
+ cp->oclocks[clck].size = NRAND(MIN(-size, MAX(MINSIZE,
+ MIN(cp->width, cp->height))) - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE) {
+ if (!size)
+ cp->oclocks[clck].size = MAX(MINSIZE, MIN(cp->width, cp->height));
+ else
+ cp->oclocks[clck].size = MINSIZE;
+ } else
+ cp->oclocks[clck].size = MIN(size, MAX(MINSIZE,
+ MIN(cp->width, cp->height)));
+
+ /* We must compute new attributes for the clock because its size changes */
+ cp->oclocks[clck].hours.size = (cp->oclocks[clck].size * HOURS_SIZE) / 200;
+ cp->oclocks[clck].minutes.size =
+ (cp->oclocks[clck].size * MINUTES_SIZE) / 200;
+ cp->oclocks[clck].seconds.size =
+ (cp->oclocks[clck].size * SECONDS_SIZE) / 200;
+ cp->oclocks[clck].jewel_size = (cp->oclocks[clck].size * JEWEL_SIZE) / 200;
+
+ cp->oclocks[clck].border_width =
+ (cp->oclocks[clck].size * CLOCK_BORDER) / 200;
+ cp->oclocks[clck].hours.width = (cp->oclocks[clck].size * HOURS_WIDTH) / 200;
+ cp->oclocks[clck].minutes.width =
+ (cp->oclocks[clck].size * MINUTES_WIDTH) / 200;
+ cp->oclocks[clck].seconds.width =
+ (cp->oclocks[clck].size * SECONDS_WIDTH) / 200;
+
+ cp->oclocks[clck].jewel_position =
+ (cp->oclocks[clck].size * JEWEL_POSITION) / 200;
+
+ cp->oclocks[clck].radius =
+ (cp->oclocks[clck].size / 2) + cp->oclocks[clck].border_width + 1;
+
+ /* Here we set new values for the next clock to be displayed */
+ if (MI_NPIXELS(mi) > 2) {
+ /* New colors */
+ cp->oclocks[clck].border_color = MI_PIXEL(mi, NRAND(MI_NPIXELS(mi)));
+ cp->oclocks[clck].jewel_color = MI_PIXEL(mi, NRAND(MI_NPIXELS(mi)));
+ cp->oclocks[clck].hours.color = MI_PIXEL(mi, NRAND(MI_NPIXELS(mi)));
+ cp->oclocks[clck].minutes.color = MI_PIXEL(mi, NRAND(MI_NPIXELS(mi)));
+ cp->oclocks[clck].seconds.color = MI_PIXEL(mi, NRAND(MI_NPIXELS(mi)));
+ }
+ /* A new position for the clock */
+ cp->oclocks[clck].pos.x = myrand(cp->oclocks[clck].radius,
+ cp->width - cp->oclocks[clck].radius);
+ cp->oclocks[clck].pos.y = myrand(cp->oclocks[clck].radius,
+ cp->height - cp->oclocks[clck].radius);
+ if (clck == collide(cp, clck))
+ return True;
+ }
+ cp->currentclocks = clck;
+ return False;
+}
+
+static void
+update_clock(ModeInfo * mi, int clck)
+{
+ clockstruct *cp = &clocks[MI_SCREEN(mi)];
+
+ DrawHand(mi, clck, &cp->oclocks[clck].hours,
+ HourToAngle(&cp->oclocks[clck]), 0);
+ DrawHand(mi, clck, &cp->oclocks[clck].minutes,
+ MinutesToAngle(&cp->oclocks[clck]), 0);
+ DrawHand(mi, clck, &cp->oclocks[clck].seconds,
+ SecondsToAngle(&cp->oclocks[clck]), 0);
+ cp->d_time = time((time_t *) 0);
+ (void) memcpy((char *) &cp->oclocks[clck].dd_time,
+ (char *) localtime(&cp->d_time),
+ sizeof (cp->oclocks[clck].dd_time));
+ DrawHand(mi, clck, &cp->oclocks[clck].hours,
+ HourToAngle(&cp->oclocks[clck]), 1);
+ DrawHand(mi, clck, &cp->oclocks[clck].minutes,
+ MinutesToAngle(&cp->oclocks[clck]), 1);
+ DrawHand(mi, clck, &cp->oclocks[clck].seconds,
+ SecondsToAngle(&cp->oclocks[clck]), 1);
+}
+
+void
+init_clock(ModeInfo * mi)
+{
+ clockstruct *cp;
+ int clck;
+
+ if (clocks == NULL) {
+ if ((clocks = (clockstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (clockstruct))) == NULL)
+ return;
+ }
+ cp = &clocks[MI_SCREEN(mi)];
+
+
+ cp->redrawing = 0;
+ cp->width = MI_WIN_WIDTH(mi);
+ cp->height = MI_WIN_HEIGHT(mi);
+
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+
+ cp->nclocks = MI_BATCHCOUNT(mi);
+ if (cp->nclocks < -MINCLOCKS) {
+ /* if cp->nclocks is random ... the size can change */
+ if (cp->oclocks != NULL) {
+ (void) free((void *) cp->oclocks);
+ cp->oclocks = NULL;
+ }
+ cp->nclocks = NRAND(-cp->nclocks - MINCLOCKS + 1) + MINCLOCKS;
+ } else if (cp->nclocks < MINCLOCKS)
+ cp->nclocks = MINCLOCKS;
+ if (cp->oclocks == NULL)
+ cp->oclocks = (oclock *) malloc(cp->nclocks * sizeof (oclock));
+
+ cp->clock_count = MI_CYCLES(mi);
+ if (cp->clock_count < MIN_CYCLES)
+ cp->clock_count = MIN_CYCLES;
+ if (cp->clock_count > MAX_CYCLES)
+ cp->clock_count = MAX_CYCLES;
+
+ for (clck = 0; clck < cp->nclocks; clck++) {
+ /* By default, we set the clock's colors to white */
+ cp->oclocks[clck].border_color = MI_WIN_WHITE_PIXEL(mi);
+ cp->oclocks[clck].jewel_color = MI_WIN_WHITE_PIXEL(mi);
+ cp->oclocks[clck].hours.color = MI_WIN_WHITE_PIXEL(mi);
+ cp->oclocks[clck].minutes.color = MI_WIN_WHITE_PIXEL(mi);
+ cp->oclocks[clck].seconds.color = MI_WIN_WHITE_PIXEL(mi);
+ cp->d_time = time((time_t *) 0);
+ }
+ for (clck = 0; clck < cp->nclocks; clck++) {
+ (void) memcpy((char *) &cp->oclocks[clck].dd_time,
+ (char *) localtime(&cp->d_time),
+ sizeof (cp->oclocks[clck].dd_time));
+ }
+ cp->currentclocks = cp->nclocks;
+ for (clck = 0; clck < cp->currentclocks; clck++)
+ if (!new_clock_state(mi, clck))
+ break;
+}
+
+void
+draw_clock(ModeInfo * mi)
+{
+ clockstruct *cp = &clocks[MI_SCREEN(mi)];
+ int clck;
+
+ if (++cp->clock_count >= MI_CYCLES(mi)) {
+ cp->clock_count = 0;
+ for (clck = 0; clck < cp->currentclocks; clck++)
+ real_draw_clock(mi, clck, 0);
+ cp->currentclocks = cp->nclocks;
+ for (clck = 0; clck < cp->currentclocks; clck++)
+ if (!new_clock_state(mi, clck))
+ break;
+ for (clck = 0; clck < cp->currentclocks; clck++)
+ real_draw_clock(mi, clck, 1);
+ cp->redrawing = 0;
+ } else if (cp->d_time != time((time_t *) 0))
+ for (clck = 0; clck < cp->currentclocks; clck++)
+ update_clock(mi, clck);
+ if (cp->redrawing) {
+ for (clck = 0; clck < cp->currentclocks; clck++)
+ real_draw_clock(mi, clck, 1);
+ cp->redrawing = 0;
+ }
+}
+
+void
+release_clock(ModeInfo * mi)
+{
+ if (clocks != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ clockstruct *cp = &clocks[screen];
+
+ if (cp->oclocks != NULL)
+ (void) free((void *) cp->oclocks);
+ }
+ (void) free((void *) clocks);
+ clocks = NULL;
+ }
+}
+
+void
+refresh_clock(ModeInfo * mi)
+{
+ clockstruct *cp = &clocks[MI_SCREEN(mi)];
+
+ cp->redrawing = 1;
+}
--- /dev/null
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)color.c 4.00 97/01/01 xlockmore";
+
+#endif
+
+/*-
+ * color.c - extracted from swirl.c, xlock.c and utils.c
+ *
+ * See xlock.c for copying information.
+ *
+ * xlock.c and utils.c Copyright (c) 1988-91 by Patrick J. Naughton.
+ * swirl.c Copyright (c) 1994 M.Dobie <mrd@ecs.soton.ac.uk>
+ *
+ */
+
+#include "xlock.h"
+
+/* Formerly in utils.c */
+/*-
+ * Create an HSB ramp.
+ *
+ * Revision History:
+ * Changes maintained by David Bagley <bagleyd@bigfoot.com>
+ * 22-Jun-94: Modified for VMS
+ * <Anthony.D.Clarke@Support.Hatfield.Raytheon.bae.eurokom.ie>
+ * Changes of Patrick J. Naughton
+ * 29-Jul-90: renamed hsbramp.c from HSBmap.c
+ * minor optimizations.
+ * 01-Sep-88: Written.
+ */
+
+static void
+hsb2rgb(double H, double S, double B,
+ unsigned char *r, unsigned char *g, unsigned char *b)
+{
+ int i;
+ double f, bb;
+ unsigned char p, q, t;
+
+ H -= floor(H); /* remove anything over 1 */
+ H *= 6.0;
+ i = (int) floor(H); /* 0..5 */
+ f = H - (float) i; /* f = fractional part of H */
+ bb = 255.0 * B;
+ p = (unsigned char) (bb * (1.0 - S));
+ q = (unsigned char) (bb * (1.0 - (S * f)));
+ t = (unsigned char) (bb * (1.0 - (S * (1.0 - f))));
+ switch (i) {
+ case 0:
+ *r = (unsigned char) bb;
+ *g = t;
+ *b = p;
+ break;
+ case 1:
+ *r = q;
+ *g = (unsigned char) bb;
+ *b = p;
+ break;
+ case 2:
+ *r = p;
+ *g = (unsigned char) bb;
+ *b = t;
+ break;
+ case 3:
+ *r = p;
+ *g = q;
+ *b = (unsigned char) bb;
+ break;
+ case 4:
+ *r = t;
+ *g = p;
+ *b = (unsigned char) bb;
+ break;
+ case 5:
+ *r = (unsigned char) bb;
+ *g = p;
+ *b = q;
+ break;
+ }
+}
+
+
+/*-
+ * Input is two points in HSB color space and a count
+ * of how many discreet rgb space values the caller wants.
+ *
+ * Output is that many rgb triples which describe a linear
+ * interpolate ramp between the two input colors.
+ */
+
+static void
+hsbramp(double h1, double s1, double b1, double h2, double s2, double b2,
+ int count, unsigned char *red, unsigned char *green, unsigned char *blue)
+{
+ double dh, ds, db;
+
+ dh = (h2 - h1) / count;
+ ds = (s2 - s1) / count;
+ db = (b2 - b1) / count;
+ while (count--) {
+ hsb2rgb(h1, s1, b1, red++, green++, blue++);
+ h1 += dh;
+ s1 += ds;
+ b1 += db;
+ }
+}
+
+
+/* Formerly in xlock.c */
+
+unsigned long
+allocPixel(Display * display, Colormap cmap, char *name, char *def)
+{
+ XColor col;
+ XColor tmp;
+
+ (void) XParseColor(display, cmap, name, &col);
+ if (!XAllocColor(display, cmap, &col)) {
+ (void) fprintf(stderr, "could not allocate: %s, using %s instead\n",
+ name, def);
+ (void) XAllocNamedColor(display, cmap, def, &col, &tmp);
+ }
+ return col.pixel;
+}
+
+void
+fixColormap(Display * display, Window window, int screen, float saturation,
+ Bool mono, Bool install, Bool inroot, Bool inwindow, Bool verbose)
+{
+ Screen *scr = ScreenOfDisplay(display, screen);
+ Colormap cmap, dcmap = DefaultColormapOfScreen(scr);
+ int colorcount = NUMCOLORS;
+ unsigned char *red, *green, *blue;
+ int i;
+ XColor xcolor;
+ static float *lastsat = NULL;
+ extern perscreen Scr[MAXSCREENS];
+
+ if (mono || CellsOfScreen(scr) <= 2) {
+ Scr[screen].pixels[0] = WhitePixelOfScreen(scr);
+ Scr[screen].pixels[1] = BlackPixelOfScreen(scr);
+ Scr[screen].npixels = 2;
+ return;
+ }
+ if (!lastsat) {
+ lastsat = (float *) malloc(MAXSCREENS * sizeof(float));
+ for (i = 0; i < MAXSCREENS; i++)
+ lastsat[i] = -1.0;
+ }
+ red = (unsigned char *) calloc(NUMCOLORS, sizeof(unsigned char));
+ green = (unsigned char *) calloc(NUMCOLORS, sizeof(unsigned char));
+ blue = (unsigned char *) calloc(NUMCOLORS, sizeof(unsigned char));
+ if (saturation != lastsat[screen]) {
+ lastsat[screen] = saturation;
+
+ cmap = Scr[screen].cmap;
+ if (cmap != None)
+ XFreeColors(display, cmap, Scr[screen].pixels, Scr[screen].npixels, 0);
+ else {
+ /* "allocate" the black and white pixels, so that they
+ will be included by XCopyColormapAndFree() if it
+ gets called */
+ xcolor.pixel = BlackPixelOfScreen(scr);
+ XQueryColor(display, dcmap, &xcolor);
+ (void) XAllocColor(display, dcmap, &xcolor);
+ xcolor.pixel = WhitePixelOfScreen(scr);
+ XQueryColor(display, dcmap, &xcolor);
+ (void) XAllocColor(display, dcmap, &xcolor);
+ /*xcolor.pixel = Scr[screen].fgcol;
+ XQueryColor(display, dcmap, &xcolor);
+ (void) XAllocColor(display, dcmap, &xcolor);
+ xcolor.pixel = Scr[screen].bgcol;
+ XQueryColor(display, dcmap, &xcolor);
+ (void) XAllocColor(display, dcmap, &xcolor); */
+ cmap = dcmap;
+ }
+
+ hsbramp(0.0, saturation, 1.0, 1.0, saturation, 1.0, colorcount,
+ red, green, blue);
+
+ Scr[screen].npixels = 0;
+ for (i = 0; i < colorcount; i++) {
+ xcolor.red = red[i] << 8;
+ xcolor.green = green[i] << 8;
+ xcolor.blue = blue[i] << 8;
+ xcolor.flags = DoRed | DoGreen | DoBlue;
+
+ if (!XAllocColor(display, cmap, &xcolor)) {
+ if (!install || cmap != dcmap)
+ break;
+ if ((cmap = XCopyColormapAndFree(display, cmap)) == dcmap)
+ break;
+ if (verbose)
+ (void) fprintf(stderr, "using private colormap\n");
+ if (!XAllocColor(display, cmap, &xcolor))
+ break;
+ }
+ Scr[screen].pixels[i] = xcolor.pixel;
+ Scr[screen].npixels++;
+ }
+ if (verbose)
+ (void) fprintf(stderr, "%d pixels allocated\n", Scr[screen].npixels);
+ } else
+ cmap = Scr[screen].cmap;
+
+ (void) free((void *) red);
+ (void) free((void *) green);
+ (void) free((void *) blue);
+ if (install && !inroot) {
+#if 0
+ XGetWindowAttributes(display, window, &xgwa);
+ if (cmap != xgwa.colormap)
+#endif
+ setColormap(display, window, cmap, inwindow);
+ }
+ Scr[screen].cmap = cmap;
+}
+
+void
+setColormap(Display * display, Window window, Colormap cmap, Bool inwindow)
+{
+ XSetWindowColormap(display, window, cmap);
+ /* Now, here we have a problem. When we are running full-screen, the
+ window's override_redirect attribute is on. So, the window manager
+ never gets the ColormapNotify event that gets generated on the
+ above XSetWindowColormap() call, and does not So, a quick solution
+ is to install it ourselves. The problem with this is that it
+ violates the ICCCM convention that only window managers should
+ install colormaps. Indeed, Fvwm _enforces_ this by immediately
+ un-doing any XInstallColormap() performed by a client (which is why
+ this does not work right under Fvwm). */
+ if (!inwindow)
+ XInstallColormap(display, cmap);
+}
+
+#if defined( USE_XPM ) || defined( USE_XPMINC )
+void
+reserveColors(ModeInfo * mi, Colormap cmap,
+ unsigned long *blackpix, unsigned long *whitepix)
+{
+ Display *display = MI_DISPLAY(mi);
+ unsigned long black, white;
+ XColor whitecolor, blackcolor;
+
+ black = MI_WIN_BLACK_PIXEL(mi);
+ white = MI_WIN_WHITE_PIXEL(mi);
+
+ blackcolor.flags = DoRed | DoGreen | DoBlue;
+ blackcolor.pixel = black;
+ blackcolor.red = 0;
+ blackcolor.green = 0;
+ blackcolor.blue = 0;
+ whitecolor.flags = DoRed | DoGreen | DoBlue;
+ whitecolor.pixel = white;
+ whitecolor.red = 0xFFFF;
+ whitecolor.green = 0xFFFF;
+ whitecolor.blue = 0xFFFF;
+
+ /* If they fail what should I do? */
+ (void) XAllocColor(display, cmap, &blackcolor);
+ (void) XAllocColor(display, cmap, &whitecolor);
+#if 0
+ /* This stuff is supposed to reserve the fg and bg
+ colors but does not work. */
+ {
+ unsigned long fg, bg;
+ XColor fgcolor, bgcolor;
+ int screen = MI_SCREEN(mi);
+
+ fg = MI_FG_COLOR(mi);
+ bg = MI_BG_COLOR(mi);
+
+ fgcolor.pixel = fg;
+ bgcolor.pixel = bg;
+ XQueryColor(display, MI_WIN_COLORMAP(mi), &fgcolor);
+ XQueryColor(display, MI_WIN_COLORMAP(mi), &bgcolor);
+
+ if ((fgcolor.pixel != blackcolor.pixel) &&
+ (fgcolor.pixel != whitecolor.pixel))
+ (void) XAllocColor(display, cmap, &fgcolor);
+ if ((bgcolor.pixel != blackcolor.pixel) &&
+ (bgcolor.pixel != whitecolor.pixel) &&
+ (bgcolor.pixel != fgcolor.pixel))
+ (void) XAllocColor(display, cmap, &bgcolor);
+ }
+#endif
+ *blackpix = blackcolor.pixel;
+ *whitepix = whitecolor.pixel;
+}
+
+#endif
--- /dev/null
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs. It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already. You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+ac_cv_c_const=${ac_cv_c_const='yes'}
+ac_cv_c_inline=${ac_cv_c_inline='inline'}
+ac_cv_c_matherr=${ac_cv_c_matherr='yes'}
+ac_cv_func_connect=${ac_cv_func_connect='no'}
+ac_cv_func_gethostbyname=${ac_cv_func_gethostbyname='no'}
+ac_cv_func_gethostname=${ac_cv_func_gethostname='no'}
+ac_cv_func_gettimeofday=${ac_cv_func_gettimeofday='yes'}
+ac_cv_func_nanosleep=${ac_cv_func_nanosleep='no'}
+ac_cv_func_remove=${ac_cv_func_remove='yes'}
+ac_cv_func_select=${ac_cv_func_select='yes'}
+ac_cv_func_seteuid=${ac_cv_func_seteuid='yes'}
+ac_cv_func_shmat=${ac_cv_func_shmat='yes'}
+ac_cv_func_srand48=${ac_cv_func_srand48='yes'}
+ac_cv_func_strdup=${ac_cv_func_strdup='yes'}
+ac_cv_func_usleep=${ac_cv_func_usleep='no'}
+ac_cv_have_x=${ac_cv_have_x='have_x=yes ac_x_includes=//usr/X/include ac_x_libraries=//usr/X/lib'}
+ac_cv_header_dirent_dirent_h=${ac_cv_header_dirent_dirent_h='yes'}
+ac_cv_header_fcntl_h=${ac_cv_header_fcntl_h='yes'}
+ac_cv_header_limits_h=${ac_cv_header_limits_h='yes'}
+ac_cv_header_memory_h=${ac_cv_header_memory_h='yes'}
+ac_cv_header_stdc=${ac_cv_header_stdc='yes'}
+ac_cv_header_sys_select_h=${ac_cv_header_sys_select_h='yes'}
+ac_cv_header_sys_time_h=${ac_cv_header_sys_time_h='yes'}
+ac_cv_header_syslog_h=${ac_cv_header_syslog_h='yes'}
+ac_cv_header_time=${ac_cv_header_time='yes'}
+ac_cv_header_unistd_h=${ac_cv_header_unistd_h='yes'}
+ac_cv_lib_ICE_IceConnectionNumber=${ac_cv_lib_ICE_IceConnectionNumber='no'}
+ac_cv_lib_dir_opendir=${ac_cv_lib_dir_opendir='no'}
+ac_cv_lib_dnet_dnet_ntoa=${ac_cv_lib_dnet_dnet_ntoa='no'}
+ac_cv_lib_dnet_stub_dnet_ntoa=${ac_cv_lib_dnet_stub_dnet_ntoa='no'}
+ac_cv_lib_nsl_gethostbyname=${ac_cv_lib_nsl_gethostbyname='no'}
+ac_cv_lib_socket_connect=${ac_cv_lib_socket_connect='yes'}
+ac_cv_path_dtsaver=${ac_cv_path_dtsaver='no_dtsaver=yes'}
+ac_cv_path_editres=${ac_cv_path_editres='no_editres= ac_editres_includes=/usr/include ac_editres_libraries=/usr/lib/X11'}
+ac_cv_path_gl=${ac_cv_path_gl='no_gl=yes'}
+ac_cv_path_mesagl=${ac_cv_path_mesagl='no_mesagl= ac_mesagl_includes=/usr/local/include ac_mesagl_libraries=/usr/local/lib'}
+ac_cv_path_motif=${ac_cv_path_motif='no_motif= ac_motif_includes= ac_motif_libraries=/usr/lib/X11'}
+ac_cv_path_nas=${ac_cv_path_nas='no_nas=yes'}
+ac_cv_path_rplay=${ac_cv_path_rplay='no_rplay=yes'}
+ac_cv_path_xpm=${ac_cv_path_xpm='no_xpm= ac_xpm_includes=/usr/include/X11 ac_xpm_libraries=/usr/lib/X11'}
+ac_cv_prog_CC=${ac_cv_prog_CC='gcc'}
+ac_cv_prog_CPP=${ac_cv_prog_CPP='gcc -E'}
+ac_cv_prog_LN_S=${ac_cv_prog_LN_S='ln -s'}
+ac_cv_prog_cc_cross=${ac_cv_prog_cc_cross='no'}
+ac_cv_prog_cc_g=${ac_cv_prog_cc_g='yes'}
+ac_cv_prog_cc_works=${ac_cv_prog_cc_works='yes'}
+ac_cv_prog_gcc=${ac_cv_prog_gcc='yes'}
+ac_cv_struct_tm=${ac_cv_struct_tm='time.h'}
+ac_cv_type_pid_t=${ac_cv_type_pid_t='yes'}
+ac_cv_type_size_t=${ac_cv_type_size_t='yes'}
+ac_cv_type_uid_t=${ac_cv_type_uid_t='yes'}
--- /dev/null
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright (C) 1992, 93, 94, 95, 1996 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Written by Per Bothner <bothner@cygnus.com>.
+# The master version of this file is at the FSF in /home/gd/gnu/lib.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub. If it succeeds, it prints the system name on stdout, and
+# exits with 0. Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit system type (host/target name).
+#
+# Only a few systems have been added to this list; please add others
+# (but try to keep the structure clean).
+#
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 8/24/94.)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+ PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ alpha:OSF1:*:*)
+ # A Vn.n version is a released version.
+ # A Tn.n version is a released field test version.
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+ echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//'`
+ exit 0 ;;
+ 21064:Windows_NT:50:3)
+ echo alpha-dec-winnt3.5
+ exit 0 ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ echo m68k-cbm-sysv4
+ exit 0;;
+ amiga:NetBSD:*:*)
+ echo m68k-cbm-netbsd${UNAME_RELEASE}
+ exit 0 ;;
+ amiga:OpenBSD:*:*)
+ echo m68k-cbm-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+ exit 0;;
+ Pyramid*:OSx*:*:*|MIS*:OSx*:*:*)
+ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
+ echo pyramid-pyramid-sysv3
+ else
+ echo pyramid-pyramid-bsd
+ fi
+ exit 0 ;;
+ NILE:*:*:dcosx)
+ echo pyramid-pyramid-svr4
+ exit 0 ;;
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ i86pc:SunOS:5.*:*)
+ echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
+ # it's likely to be more like Solaris than SunOS4.
+ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ sun4*:SunOS:*:*)
+ case "`/usr/bin/arch -k`" in
+ Series*|S4*)
+ UNAME_RELEASE=`uname -v`
+ ;;
+ esac
+ # Japanese Language versions have a version number like `4.1.3-JL'.
+ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+ exit 0 ;;
+ sun3*:SunOS:*:*)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ exit 0 ;;
+ aushp:SunOS:*:*)
+ echo sparc-auspex-sunos${UNAME_RELEASE}
+ exit 0 ;;
+ atari*:NetBSD:*:*)
+ echo m68k-atari-netbsd${UNAME_RELEASE}
+ exit 0 ;;
+ atari*:OpenBSD:*:*)
+ echo m68k-atari-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ sun3*:NetBSD:*:*)
+ echo m68k-sun-netbsd${UNAME_RELEASE}
+ exit 0 ;;
+ sun3*:OpenBSD:*:*)
+ echo m68k-sun-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mac68k:NetBSD:*:*)
+ echo m68k-apple-netbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mac68k:OpenBSD:*:*)
+ echo m68k-apple-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ powerpc:machten:*:*)
+ echo powerpc-apple-machten${UNAME_RELEASE}
+ exit 0 ;;
+ RISC*:Mach:*:*)
+ echo mips-dec-mach_bsd4.3
+ exit 0 ;;
+ RISC*:ULTRIX:*:*)
+ echo mips-dec-ultrix${UNAME_RELEASE}
+ exit 0 ;;
+ VAX*:ULTRIX*:*:*)
+ echo vax-dec-ultrix${UNAME_RELEASE}
+ exit 0 ;;
+ mips:*:*:UMIPS | mips:*:*:RISCos)
+ sed 's/^ //' << EOF >dummy.c
+ int main (argc, argv) int argc; char **argv; {
+ #if defined (host_mips) && defined (MIPSEB)
+ #if defined (SYSTYPE_SYSV)
+ printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_SVR4)
+ printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+ printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+ #endif
+ #endif
+ exit (-1);
+ }
+EOF
+ ${CC-cc} dummy.c -o dummy \
+ && ./dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
+ && rm dummy.c dummy && exit 0
+ rm -f dummy.c dummy
+ echo mips-mips-riscos${UNAME_RELEASE}
+ exit 0 ;;
+ Night_Hawk:Power_UNIX:*:*)
+ echo powerpc-harris-powerunix
+ exit 0 ;;
+ m88k:CX/UX:7*:*)
+ echo m88k-harris-cxux7
+ exit 0 ;;
+ m88k:*:4*:R4*)
+ echo m88k-motorola-sysv4
+ exit 0 ;;
+ m88k:*:3*:R3*)
+ echo m88k-motorola-sysv3
+ exit 0 ;;
+ AViiON:dgux:*:*)
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then
+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
+ -o ${TARGET_BINARY_INTERFACE}x = x ] ; then
+ echo m88k-dg-dgux${UNAME_RELEASE}
+ else
+ echo m88k-dg-dguxbcs${UNAME_RELEASE}
+ fi
+ else echo i586-dg-dgux${UNAME_RELEASE}
+ fi
+ exit 0 ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ echo m88k-dolphin-sysv3
+ exit 0 ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ echo m88k-motorola-sysv3
+ exit 0 ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ echo m88k-tektronix-sysv3
+ exit 0 ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ echo m68k-tektronix-bsd
+ exit 0 ;;
+ *:IRIX*:*:*)
+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+ exit 0 ;;
+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ i?86:AIX:*:*)
+ echo i386-ibm-aix
+ exit 0 ;;
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ sed 's/^ //' << EOF >dummy.c
+ #include <sys/systemcfg.h>
+
+ main()
+ {
+ if (!__power_pc())
+ exit(1);
+ puts("powerpc-ibm-aix3.2.5");
+ exit(0);
+ }
+EOF
+ ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
+ rm -f dummy.c dummy
+ echo rs6000-ibm-aix3.2.5
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ echo rs6000-ibm-aix3.2.4
+ else
+ echo rs6000-ibm-aix3.2
+ fi
+ exit 0 ;;
+ *:AIX:*:4)
+ if /usr/sbin/lsattr -EHl proc0 | grep POWER >/dev/null 2>&1; then
+ IBM_ARCH=rs6000
+ else
+ IBM_ARCH=powerpc
+ fi
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=4.${UNAME_RELEASE}
+ fi
+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+ exit 0 ;;
+ *:AIX:*:*)
+ echo rs6000-ibm-aix
+ exit 0 ;;
+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+ echo romp-ibm-bsd4.4
+ exit 0 ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and
+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
+ exit 0 ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ echo rs6000-bull-bosx
+ exit 0 ;;
+ DPX/2?00:B.O.S.:*:*)
+ echo m68k-bull-sysv3
+ exit 0 ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ echo m68k-hp-bsd
+ exit 0 ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ echo m68k-hp-bsd4.4
+ exit 0 ;;
+ 9000/[3478]??:HP-UX:*:*)
+ case "${UNAME_MACHINE}" in
+ 9000/31? ) HP_ARCH=m68000 ;;
+ 9000/[34]?? ) HP_ARCH=m68k ;;
+ 9000/7?? | 9000/8?[1679] ) HP_ARCH=hppa1.1 ;;
+ 9000/8?? ) HP_ARCH=hppa1.0 ;;
+ esac
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+ exit 0 ;;
+ 3050*:HI-UX:*:*)
+ sed 's/^ //' << EOF >dummy.c
+ #include <unistd.h>
+ int
+ main ()
+ {
+ long cpu = sysconf (_SC_CPU_VERSION);
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
+ results, however. */
+ if (CPU_IS_PA_RISC (cpu))
+ {
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
+ }
+ }
+ else if (CPU_IS_HP_MC68K (cpu))
+ puts ("m68k-hitachi-hiuxwe2");
+ else puts ("unknown-hitachi-hiuxwe2");
+ exit (0);
+ }
+EOF
+ ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
+ rm -f dummy.c dummy
+ echo unknown-hitachi-hiuxwe2
+ exit 0 ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+ echo hppa1.1-hp-bsd
+ exit 0 ;;
+ 9000/8??:4.3bsd:*:*)
+ echo hppa1.0-hp-bsd
+ exit 0 ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+ echo hppa1.1-hp-osf
+ exit 0 ;;
+ hp8??:OSF1:*:*)
+ echo hppa1.0-hp-osf
+ exit 0 ;;
+ i?86:OSF1:*:*)
+ if [ -x /usr/sbin/sysversion ] ; then
+ echo ${UNAME_MACHINE}-unknown-osf1mk
+ else
+ echo ${UNAME_MACHINE}-unknown-osf1
+ fi
+ exit 0 ;;
+ parisc*:Lites*:*:*)
+ echo hppa1.1-hp-lites
+ exit 0 ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ echo c1-convex-bsd
+ exit 0 ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit 0 ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ echo c34-convex-bsd
+ exit 0 ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ echo c38-convex-bsd
+ exit 0 ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ echo c4-convex-bsd
+ exit 0 ;;
+ CRAY*X-MP:*:*:*)
+ echo xmp-cray-unicos
+ exit 0 ;;
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos${UNAME_RELEASE}
+ exit 0 ;;
+ CRAY*[A-Z]90:*:*:*)
+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
+ exit 0 ;;
+ CRAY*TS:*:*:*)
+ echo t90-cray-unicos${UNAME_RELEASE}
+ exit 0 ;;
+ CRAY-2:*:*:*)
+ echo cray2-cray-unicos
+ exit 0 ;;
+ F300:UNIX_System_V:*:*)
+ FUJITSU_SYS=`uname -p | tr [A-Z] [a-z] | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+ echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit 0 ;;
+ F301:UNIX_System_V:*:*)
+ echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'`
+ exit 0 ;;
+ hp3[0-9][05]:NetBSD:*:*)
+ echo m68k-hp-netbsd${UNAME_RELEASE}
+ exit 0 ;;
+ hp3[0-9][05]:OpenBSD:*:*)
+ echo m68k-hp-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ i?86:BSD/386:*:* | *:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ exit 0 ;;
+ *:FreeBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ exit 0 ;;
+ *:NetBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ exit 0 ;;
+ *:OpenBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ exit 0 ;;
+ i*:CYGWIN*:*)
+ echo i386-pc-cygwin32
+ exit 0 ;;
+ p*:CYGWIN*:*)
+ echo powerpcle-unknown-cygwin32
+ exit 0 ;;
+ prep*:SunOS:5.*:*)
+ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ *:GNU:*:*)
+ echo `echo ${UNAME_MACHINE}|sed -e 's,/.*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ exit 0 ;;
+ *:Linux:*:*)
+ # The BFD linker knows what the default object file format is, so
+ # first see if it will tell us.
+ ld_help_string=`ld --help 2>&1`
+ if echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf_i.86"; then
+ echo "${UNAME_MACHINE}-pc-linux-gnu" ; exit 0
+ elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i.86linux"; then
+ echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0
+ elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i.86coff"; then
+ echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0
+ elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68kelf"; then
+ echo "${UNAME_MACHINE}-unknown-linux-gnu" ; exit 0
+ elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68klinux"; then
+ echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0
+ elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf32ppc"; then
+ echo "powerpc-unknown-linux-gnu" ; exit 0
+ elif test "${UNAME_MACHINE}" = "alpha" ; then
+ echo alpha-unknown-linux-gnu ; exit 0
+ elif test "${UNAME_MACHINE}" = "sparc" ; then
+ echo sparc-unknown-linux-gnu ; exit 0
+ else
+ # Either a pre-BFD a.out linker (linux-gnuoldld) or one that does not give us
+ # useful --help. Gcc wants to distinguish between linux-gnuoldld and linux-gnuaout.
+ test ! -d /usr/lib/ldscripts/. \
+ && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
+ # Determine whether the default compiler is a.out or elf
+ cat >dummy.c <<EOF
+main(argc, argv)
+int argc;
+char *argv[];
+{
+#ifdef __ELF__
+ printf ("%s-pc-linux-gnu\n", argv[1]);
+#else
+ printf ("%s-pc-linux-gnuaout\n", argv[1]);
+#endif
+ return 0;
+}
+EOF
+ ${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0
+ rm -f dummy.c dummy
+ fi ;;
+# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions
+# are messed up and put the nodename in both sysname and nodename.
+ i?86:DYNIX/ptx:4*:*)
+ echo i386-sequent-sysv4
+ exit 0 ;;
+ i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
+ else
+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
+ fi
+ exit 0 ;;
+ i?86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
+ UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+ else
+ echo ${UNAME_MACHINE}-pc-sysv32
+ fi
+ exit 0 ;;
+ Intel:Mach:3*:*)
+ echo i386-pc-mach3
+ exit 0 ;;
+ paragon:*:*:*)
+ echo i860-intel-osf1
+ exit 0 ;;
+ i860:*:4.*:*) # i860-SVR4
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+ else # Add other i860-SVR4 vendors below as they are discovered.
+ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
+ fi
+ exit 0 ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ echo m68010-convergent-sysv
+ exit 0 ;;
+ M68*:*:R3V[567]*:*)
+ test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
+ 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
+ OS_REL=''
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && echo i486-ncr-sysv4.3${OS_REL} && exit 0
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && echo i486-ncr-sysv4 && exit 0 ;;
+ m68*:LynxOS:2.*:*)
+ echo m68k-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ mc68030:UNIX_System_V:4.*:*)
+ echo m68k-atari-sysv4
+ exit 0 ;;
+ i?86:LynxOS:2.*:*)
+ echo i386-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ TSUNAMI:LynxOS:2.*:*)
+ echo sparc-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*)
+ echo rs6000-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ SM[BE]S:UNIX_SV:*:*)
+ echo mips-dde-sysv${UNAME_RELEASE}
+ exit 0 ;;
+ RM*:SINIX-*:*:*)
+ echo mips-sni-sysv4
+ exit 0 ;;
+ *:SINIX-*:*:*)
+ if uname -p 2>/dev/null >/dev/null ; then
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ echo ${UNAME_MACHINE}-sni-sysv4
+ else
+ echo ns32k-sni-sysv
+ fi
+ exit 0 ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes@openmarket.com>.
+ # How about differentiating between stratus architectures? -djm
+ echo hppa1.1-stratus-sysv4
+ exit 0 ;;
+ *:*:*:FTX*)
+ # From seanf@swdc.stratus.com.
+ echo i860-stratus-sysv4
+ exit 0 ;;
+ mc68*:A/UX:*:*)
+ echo m68k-apple-aux${UNAME_RELEASE}
+ exit 0 ;;
+ R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:*)
+ if [ -d /usr/nec ]; then
+ echo mips-nec-sysv${UNAME_RELEASE}
+ else
+ echo mips-unknown-sysv${UNAME_RELEASE}
+ fi
+ exit 0 ;;
+ PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel@ccMail.Census.GOV>
+ echo i586-unisys-sysv4
+ exit 0 ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+cat >dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+ printf ("arm-acorn-riscix"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+ printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+#if !defined (ultrix)
+ printf ("vax-dec-bsd\n"); exit (0);
+#else
+ printf ("vax-dec-ultrix\n"); exit (0);
+#endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0
+rm -f dummy.c dummy
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+ case `getsysinfo -f cpu_type` in
+ c1*)
+ echo c1-convex-bsd
+ exit 0 ;;
+ c2*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit 0 ;;
+ c34*)
+ echo c34-convex-bsd
+ exit 0 ;;
+ c38*)
+ echo c38-convex-bsd
+ exit 0 ;;
+ c4*)
+ echo c4-convex-bsd
+ exit 0 ;;
+ esac
+fi
+
+#echo '(Unable to guess system type)' 1>&2
+
+exit 1
--- /dev/null
+/* config.h. Generated automatically by configure. */
+/* Define to empty if the keyword does not work. */
+/* #undef const */
+
+/* Define to empty if the keyword does not work. */
+/* #undef inline */
+
+/* Define to the type of elements in the array set by `getgroups'. Usually
+ this is either `int' or `gid_t'. */
+/* #undef GETGROUPS_T */
+
+/* Define to `int' if <sys/types.h> doesn't define. */
+/* #undef gid_t */
+
+/* Define if you have <sys/wait.h> that is POSIX.1 compatible. */
+/* #undef HAVE_SYS_WAIT_H */
+
+/* Define to `int' if <sys/types.h> doesn't define. */
+/* #undef pid_t */
+
+/* Define as the return type of signal handlers (int or void). */
+/* #undef RETSIGTYPE */
+
+/* Define to `unsigned' if <sys/types.h> doesn't define. */
+/* #undef size_t */
+
+/* Define if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Define if you can safely include both <sys/time.h> and <time.h>. */
+#define TIME_WITH_SYS_TIME 1
+
+/* Define if your <sys/time.h> declares struct tm. */
+/* #undef TM_IN_SYS_TIME */
+
+/* Define to `int' if <sys/types.h> doesn't define. */
+/* #undef uid_t */
+
+/* Define if you have the gethostname function. */
+/* #undef HAVE_GETHOSTNAME */
+
+/* Define if you have the gettimeofday function. */
+#define HAVE_GETTIMEOFDAY 1
+
+/* Define if you have the select function. */
+#define HAVE_SELECT 1
+
+/* Define if you have the strdup function. */
+#define HAVE_STRDUP 1
+
+/* Define if you have the seteuid function. */
+#define HAVE_SETEUID 1
+
+/* Define if you have the setreuid function. */
+/* #undef HAVE_SETREUID */
+
+/* Define one of these if they exist (usually not used any more). */
+/* #undef HAVE_NANOSLEEP */
+/* #undef HAVE_USLEEP */
+
+/* If left undefined will default to internal Random Number Generator */
+#define SRAND srand48
+#define LRAND lrand48
+#define MAXRAND 2147483648.0
+
+/* Enable use of matherr function */
+#define USE_MATHERR 1
+
+/* Define if you have the <dirent.h> header file. */
+#define HAVE_DIRENT_H 1
+
+/* Define if you have the <fcntl.h> header file. */
+#define HAVE_FCNTL_H 1
+
+/* Define if you have the <limits.h> header file. */
+#define HAVE_LIMITS_H 1
+
+/* Define if you have the <ndir.h> header file. */
+/* #undef HAVE_NDIR_H */
+
+/* Define if you have the <sys/dir.h> header file. */
+/* #undef HAVE_SYS_DIR_H */
+
+/* Define if you have the <sys/ndir.h> header file. */
+/* #undef HAVE_SYS_NDIR_H */
+
+/* Define if you have the <sys/time.h> header file. */
+#define HAVE_SYS_TIME_H 1
+
+/* Define if you have the <sys/select.h> header file. */
+#define HAVE_SYS_SELECT_H 1
+
+/* Define if you have the <syslog.h> header file. */
+#define HAVE_SYSLOG_H 1
+
+/* Define if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H 1
+
+/* Define if you have the shadow passwords (or elf). */
+#define HAVE_SHADOW 1
+
+/* Various system defines. */
+#define SYSV 1
+#define SVR4 1
+/* #undef linux */
+/* #undef SOLARIS2 */
+/* #undef SUNOS4 */
+/* #undef _POSIX_SOURCE */
+/* #undef _BSD_SOURCE */
+/* #undef _GNU_SOURCE */
+/* #undef AIXV3 */
+/* #undef LESS_THAN_AIX3_2 */
+
+
+/* Define if you have XPM (look for it under a X11 dir). */
+/* #undef USE_XPM */
+
+/* Define if you have XPM. */
+#define USE_XPMINC 1
+
+/* Define if you have XMU (Editres). */
+#define USE_XMU 1
+
+/* Define if you have GL (MesaGL). */
+#define USE_GL 1
+
+/* Define if you have DtSaver. */
+/* #undef USE_DTSAVER */
+
+/* Define one of these for sounds. */
+/* #undef USE_RPLAY */
+/* #undef USE_NAS */
+/* #undef USE_VMSPLAY */
+/* #undef DEF_PLAY */
+
+/* Allows xlock to run in root window (some window managers have problems) */
+#define USE_VROOT 1
+
+/* Users can not turn off allowroot */
+#define ALWAYS_ALLOW_ROOT 1
+
+/* Paranoid administrator option (a check is also done to see if you have it) */
+/* #undef USE_SYSLOG */
+
+/* Multiple root users ... security? */
+/* #undef USE_MULTIPLE_ROOT */
+
+/* Password screen displayed with mouse motion */
+/* #undef USE_MOUSE_MOTION */
+
+/* Some machines may still need this (fd_set errors may be a sign) */
+/* #undef USE_OLD_EVENT_LOOP */
+
+/* This patches up old __VMS_VER < 70000000 */
+/* #undef USE_VMSUTILS */
+
+/* For personal use you may want to consider: */
+/* Unfriendly paranoid admininistrator or unknown shadow passwd algorithm */
+/* #undef USE_XLOCKRC */
+
+/* For labs you may want to consider: */
+
+/* Enable auto-logout code, minutes until auto-logout */
+/* #undef USE_AUTO_LOGOUT */
+
+/* Set default for auto-logout code, hard limit is USE_AUTO_LOGOUT */
+/* #undef DEF_AUTO_LOGOUT */
+
+/* Enable logout button, minutes until button appears */
+/* #undef USE_BUTTON_LOGOUT */
+
+/* Set default for logout button code, hard limit is USE_LOGOUT_BUTTON */
+/* #undef DEF_BUTTON_LOGOUT */
+
+/* Enable automatic logout mode (does not come up in random mode) */
+#define USE_BOMB 1
+
+/* Define one of these with USE_AUTO_LOGOUT,
+ USE_LOGOUT_BUTTON, and/or USE_BOMB, if using xdm */
+/* #undef CLOSEDOWN_LOGOUT */
+/* #undef SESSION_LOGOUT */
+
+/* File of staff who are exempt */
+/* #undef STAFF_FILE */
+
+/* Netgroup that is exempt */
+/* #undef STAFF_NETGROUP */
+
+/* Enable Digital Unix Enhanced Security */
+/* #undef OSF1_ENH_SEC */
--- /dev/null
+/* Define to empty if the keyword does not work. */
+#undef const
+
+/* Define to empty if the keyword does not work. */
+#undef inline
+
+/* Define to the type of elements in the array set by `getgroups'. Usually
+ this is either `int' or `gid_t'. */
+#undef GETGROUPS_T
+
+/* Define to `int' if <sys/types.h> doesn't define. */
+#undef gid_t
+
+/* Define if you have <sys/wait.h> that is POSIX.1 compatible. */
+#undef HAVE_SYS_WAIT_H
+
+/* Define to `int' if <sys/types.h> doesn't define. */
+#undef pid_t
+
+/* Define as the return type of signal handlers (int or void). */
+#undef RETSIGTYPE
+
+/* Define to `unsigned' if <sys/types.h> doesn't define. */
+#undef size_t
+
+/* Define if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define if you can safely include both <sys/time.h> and <time.h>. */
+#undef TIME_WITH_SYS_TIME
+
+/* Define if your <sys/time.h> declares struct tm. */
+#undef TM_IN_SYS_TIME
+
+/* Define to `int' if <sys/types.h> doesn't define. */
+#undef uid_t
+
+/* Define if you have the gethostname function. */
+#undef HAVE_GETHOSTNAME
+
+/* Define if you have the gettimeofday function. */
+#undef HAVE_GETTIMEOFDAY
+
+/* Define if you have the select function. */
+#undef HAVE_SELECT
+
+/* Define if you have the strdup function. */
+#undef HAVE_STRDUP
+
+/* Define if you have the seteuid function. */
+#undef HAVE_SETEUID
+
+/* Define if you have the setreuid function. */
+#undef HAVE_SETREUID
+
+/* Define one of these if they exist (usually not used any more). */
+#undef HAVE_NANOSLEEP
+#undef HAVE_USLEEP
+
+/* If left undefined will default to internal Random Number Generator */
+#undef SRAND
+#undef LRAND
+#undef MAXRAND
+
+/* Enable use of matherr function */
+#undef USE_MATHERR
+
+/* Define if you have the <dirent.h> header file. */
+#undef HAVE_DIRENT_H
+
+/* Define if you have the <fcntl.h> header file. */
+#undef HAVE_FCNTL_H
+
+/* Define if you have the <limits.h> header file. */
+#undef HAVE_LIMITS_H
+
+/* Define if you have the <ndir.h> header file. */
+#undef HAVE_NDIR_H
+
+/* Define if you have the <sys/dir.h> header file. */
+#undef HAVE_SYS_DIR_H
+
+/* Define if you have the <sys/ndir.h> header file. */
+#undef HAVE_SYS_NDIR_H
+
+/* Define if you have the <sys/time.h> header file. */
+#undef HAVE_SYS_TIME_H
+
+/* Define if you have the <sys/select.h> header file. */
+#undef HAVE_SYS_SELECT_H
+
+/* Define if you have the <syslog.h> header file. */
+#undef HAVE_SYSLOG_H
+
+/* Define if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define if you have the shadow passwords (or elf). */
+#undef HAVE_SHADOW
+
+/* Various system defines. */
+#undef SYSV
+#undef SVR4
+#undef linux
+#undef SOLARIS2
+#undef SUNOS4
+#undef _POSIX_SOURCE
+#undef _BSD_SOURCE
+#undef _GNU_SOURCE
+#undef AIXV3
+#undef LESS_THAN_AIX3_2
+
+
+/* Define if you have XPM (look for it under a X11 dir). */
+#undef USE_XPM
+
+/* Define if you have XPM. */
+#undef USE_XPMINC
+
+/* Define if you have XMU (Editres). */
+#undef USE_XMU
+
+/* Define if you have GL (MesaGL). */
+#undef USE_GL
+
+/* Define if you have DtSaver. */
+#undef USE_DTSAVER
+
+/* Define one of these for sounds. */
+#undef USE_RPLAY
+#undef USE_NAS
+#undef USE_VMSPLAY
+#undef DEF_PLAY
+
+/* Allows xlock to run in root window (some window managers have problems) */
+#undef USE_VROOT
+
+/* Users can not turn off allowroot */
+#undef ALWAYS_ALLOW_ROOT
+
+/* Paranoid administrator option (a check is also done to see if you have it) */
+#undef USE_SYSLOG
+
+/* Multiple root users ... security? */
+#undef USE_MULTIPLE_ROOT
+
+/* Password screen displayed with mouse motion */
+#undef USE_MOUSE_MOTION
+
+/* Some machines may still need this (fd_set errors may be a sign) */
+#undef USE_OLD_EVENT_LOOP
+
+/* This patches up old __VMS_VER < 70000000 */
+#undef USE_VMSUTILS
+
+/* For personal use you may want to consider: */
+/* Unfriendly paranoid admininistrator or unknown shadow passwd algorithm */
+#undef USE_XLOCKRC
+
+/* For labs you may want to consider: */
+
+/* Enable auto-logout code, minutes until auto-logout */
+#undef USE_AUTO_LOGOUT
+
+/* Set default for auto-logout code, hard limit is USE_AUTO_LOGOUT */
+#undef DEF_AUTO_LOGOUT
+
+/* Enable logout button, minutes until button appears */
+#undef USE_BUTTON_LOGOUT
+
+/* Set default for logout button code, hard limit is USE_LOGOUT_BUTTON */
+#undef DEF_BUTTON_LOGOUT
+
+/* Enable automatic logout mode (does not come up in random mode) */
+#undef USE_BOMB
+
+/* Define one of these with USE_AUTO_LOGOUT,
+ USE_LOGOUT_BUTTON, and/or USE_BOMB, if using xdm */
+#undef CLOSEDOWN_LOGOUT
+#undef SESSION_LOGOUT
+
+/* File of staff who are exempt */
+#undef STAFF_FILE
+
+/* Netgroup that is exempt */
+#undef STAFF_NETGROUP
+
+/* Enable Digital Unix Enhanced Security */
+#undef OSF1_ENH_SEC
--- /dev/null
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+configure:635: checking for gcc
+configure:712: checking whether the C compiler (gcc ) works
+configure:726: gcc -o conftest conftest.c 1>&5
+configure:746: checking whether the C compiler (gcc ) is a cross-compiler
+configure:751: checking whether we are using GNU C
+configure:760: gcc -E conftest.c
+configure:775: checking whether gcc accepts -g
+configure:810: checking whether ln -s works
+configure:831: checking how to run the C preprocessor
+configure:852: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:892: checking for AIX
+configure:945: checking for a BSD compatible install
+configure:996: checking for POSIXized ISC
+configure:1020: checking for fcntl.h
+configure:1030: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:1020: checking for limits.h
+configure:1030: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:1020: checking for sys/select.h
+configure:1030: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:1020: checking for sys/time.h
+configure:1030: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:1020: checking for syslog.h
+configure:1030: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:1020: checking for unistd.h
+configure:1030: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:1020: checking for memory.h
+configure:1030: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:1058: checking for working const
+configure:1112: gcc -c -g -O2 -Wall conftest.c 1>&5
+configure: In function `main':
+configure:1086: warning: unused variable `s'
+configure:1106: warning: unused variable `foo'
+configure:1074: warning: unused variable `zero'
+configure:1068: warning: unused variable `x'
+configure:1085: warning: `t' might be used uninitialized in this function
+configure:1103: warning: `b' might be used uninitialized in this function
+configure:1133: checking for uid_t in sys/types.h
+configure:1167: checking for ANSI C header files
+configure:1180: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:1247: gcc -o conftest -g -O2 -Wall conftest.c 1>&5
+configure:1271: checking for pid_t
+configure:1304: checking for size_t
+configure:1337: checking whether time.h and sys/time.h may both be included
+configure:1351: gcc -c -g -O2 -Wall conftest.c 1>&5
+configure: In function `main':
+configure:1347: warning: unused variable `tp'
+configure:1372: checking whether struct tm is in sys/time.h or time.h
+configure:1385: gcc -c -g -O2 -Wall conftest.c 1>&5
+configure: In function `main':
+configure:1381: warning: statement with no effect
+configure:1406: checking for inline
+configure:1420: gcc -c -g -O2 -Wall conftest.c 1>&5
+configure: In function `main':
+configure:1416: warning: control reaches end of non-void function
+configure: At top level:
+configure:1416: warning: return-type defaults to `int'
+configure:1449: checking for gethostname
+configure:1477: gcc -o conftest -g -O2 -Wall conftest.c 1>&5
+Undefined first referenced
+ symbol in file
+gethostname /var/tmp/cca001tR1.o
+UX:ld: ERROR: conftest: fatal error: Symbol referencing errors. No output written to conftest
+configure: failed program was:
+#line 1454 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char gethostname(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char gethostname();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_gethostname) || defined (__stub___gethostname)
+choke me
+#else
+gethostname();
+#endif
+
+; return 0; }
+configure:1449: checking for gettimeofday
+configure:1477: gcc -o conftest -g -O2 -Wall conftest.c 1>&5
+configure:1449: checking for select
+configure:1477: gcc -o conftest -g -O2 -Wall conftest.c 1>&5
+configure:1449: checking for strdup
+configure:1477: gcc -o conftest -g -O2 -Wall conftest.c 1>&5
+configure:1502: checking for seteuid
+configure:1530: gcc -o conftest -g -O2 -Wall conftest.c 1>&5
+configure:1609: checking for X
+configure:1923: checking for dnet_ntoa in -ldnet
+configure:1942: gcc -o conftest -g -O2 -Wall conftest.c -ldnet 1>&5
+UX:ld: ERROR: fatal error: library not found: -ldnet
+configure: failed program was:
+#line 1931 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dnet_ntoa();
+
+int main() {
+dnet_ntoa()
+; return 0; }
+configure:1964: checking for dnet_ntoa in -ldnet_stub
+configure:1983: gcc -o conftest -g -O2 -Wall conftest.c -ldnet_stub 1>&5
+UX:ld: ERROR: fatal error: library not found: -ldnet_stub
+configure: failed program was:
+#line 1972 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dnet_ntoa();
+
+int main() {
+dnet_ntoa()
+; return 0; }
+configure:2012: checking for gethostbyname
+configure:2040: gcc -o conftest -g -O2 -Wall conftest.c 1>&5
+Undefined first referenced
+ symbol in file
+gethostbyname /var/tmp/cca001vC1.o
+UX:ld: ERROR: conftest: fatal error: Symbol referencing errors. No output written to conftest
+configure: failed program was:
+#line 2017 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char gethostbyname(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char gethostbyname();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_gethostbyname) || defined (__stub___gethostbyname)
+choke me
+#else
+gethostbyname();
+#endif
+
+; return 0; }
+configure:2061: checking for gethostbyname in -lnsl
+configure:2080: gcc -o conftest -g -O2 -Wall conftest.c -lnsl 1>&5
+Undefined first referenced
+ symbol in file
+gethostbyname /var/tmp/cca001vR1.o
+UX:ld: ERROR: conftest: fatal error: Symbol referencing errors. No output written to conftest
+configure: failed program was:
+#line 2069 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char gethostbyname();
+
+int main() {
+gethostbyname()
+; return 0; }
+configure:2110: checking for connect
+configure:2138: gcc -o conftest -g -O2 -Wall conftest.c 1>&5
+Undefined first referenced
+ symbol in file
+connect /var/tmp/cca001vc1.o
+UX:ld: ERROR: conftest: fatal error: Symbol referencing errors. No output written to conftest
+configure: failed program was:
+#line 2115 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char connect(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char connect();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_connect) || defined (__stub___connect)
+choke me
+#else
+connect();
+#endif
+
+; return 0; }
+configure:2159: checking for connect in -lsocket
+configure:2178: gcc -o conftest -g -O2 -Wall conftest.c -lsocket 1>&5
+configure:2202: checking for remove
+configure:2230: gcc -o conftest -g -O2 -Wall conftest.c 1>&5
+configure:2294: checking for shmat
+configure:2322: gcc -o conftest -g -O2 -Wall conftest.c 1>&5
+configure:2395: checking for IceConnectionNumber in -lICE
+configure:2414: gcc -o conftest -g -O2 -Wall -L//usr/X/lib conftest.c -lICE 1>&5
+UX:ld: ERROR: fatal error: library not found: -lICE
+configure: failed program was:
+#line 2403 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char IceConnectionNumber();
+
+int main() {
+IceConnectionNumber()
+; return 0; }
+configure:2503: checking for XPM
+configure:2666: checking for Motif
+configure:2832: checking for Editres
+configure:2992: checking for GL
+configure:3092: checking for MesaGL
+configure:3247: checking for DtSaver
+configure:3341: checking for RPLAY
+configure:3445: checking for NAS
+configure:3554: checking host system type
+configure:3769: checking for dirent.h that defines DIR
+configure:3782: gcc -c -g -O2 -Wall conftest.c 1>&5
+configure: In function `main':
+configure:3778: warning: unused variable `dirp'
+configure:3807: checking for opendir in -ldir
+configure:3826: gcc -o conftest -g -O2 -Wall conftest.c -ldir 1>&5
+UX:ld: ERROR: fatal error: library not found: -ldir
+configure: failed program was:
+#line 3815 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char opendir();
+
+int main() {
+opendir()
+; return 0; }
+configure:3892: checking for nanosleep
+configure:3920: gcc -o conftest -g -O2 -Wall conftest.c 1>&5
+Undefined first referenced
+ symbol in file
+nanosleep /var/tmp/cca001xy1.o
+UX:ld: ERROR: conftest: fatal error: Symbol referencing errors. No output written to conftest
+configure: failed program was:
+#line 3897 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char nanosleep(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char nanosleep();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_nanosleep) || defined (__stub___nanosleep)
+choke me
+#else
+nanosleep();
+#endif
+
+; return 0; }
+configure:3941: checking for usleep
+configure:3969: gcc -o conftest -g -O2 -Wall conftest.c 1>&5
+Undefined first referenced
+ symbol in file
+usleep /var/tmp/cca001yB1.o
+UX:ld: ERROR: conftest: fatal error: Symbol referencing errors. No output written to conftest
+configure: failed program was:
+#line 3946 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char usleep(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char usleep();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_usleep) || defined (__stub___usleep)
+choke me
+#else
+usleep();
+#endif
+
+; return 0; }
+configure:3996: checking for srand48
+configure:4024: gcc -o conftest -g -O2 -Wall conftest.c 1>&5
+configure:4181: checking matherr support
+configure:4198: gcc -c -g -O2 -Wall conftest.c 1>&5
--- /dev/null
+#! /bin/sh
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# This directory was configured as follows,
+# on host disco:
+#
+# configure
+#
+# Compiler output produced by configure, useful for debugging
+# configure, is in ./config.log if it exists.
+
+ac_cs_usage="Usage: ./config.status [--recheck] [--version] [--help]"
+for ac_option
+do
+ case "$ac_option" in
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ echo "running ${CONFIG_SHELL-/bin/sh} configure --no-create --no-recursion"
+ exec ${CONFIG_SHELL-/bin/sh} configure --no-create --no-recursion ;;
+ -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
+ echo "./config.status generated by autoconf version 2.12"
+ exit 0 ;;
+ -help | --help | --hel | --he | --h)
+ echo "$ac_cs_usage"; exit 0 ;;
+ *) echo "$ac_cs_usage"; exit 1 ;;
+ esac
+done
+
+ac_given_srcdir=.
+ac_given_INSTALL="./install-sh -c"
+
+trap 'rm -fr Makefile config.h conftest*; exit 1' 1 2 15
+
+# Protect against being on the right side of a sed subst in config.status.
+sed 's/%@/@@/; s/@%/@@/; s/%g$/@g/; /@g$/s/[\\&%]/\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g$/%g/' > conftest.subs <<\CEOF
+/^[ ]*VPATH[ ]*=[^:]*$/d
+
+s%@CFLAGS@%-g -O2 -Wall%g
+s%@CPPFLAGS@%%g
+s%@CXXFLAGS@%%g
+s%@DEFS@%-DHAVE_CONFIG_H%g
+s%@LDFLAGS@%%g
+s%@LIBS@%%g
+s%@exec_prefix@%${prefix}%g
+s%@prefix@%/usr/local%g
+s%@program_transform_name@%s,x,x,%g
+s%@bindir@%${exec_prefix}/bin%g
+s%@sbindir@%${exec_prefix}/sbin%g
+s%@libexecdir@%${exec_prefix}/libexec%g
+s%@datadir@%${prefix}/share%g
+s%@sysconfdir@%${prefix}/etc%g
+s%@sharedstatedir@%${prefix}/com%g
+s%@localstatedir@%${prefix}/var%g
+s%@libdir@%${exec_prefix}/lib%g
+s%@includedir@%${prefix}/include%g
+s%@oldincludedir@%/usr/include%g
+s%@infodir@%${prefix}/info%g
+s%@mandir@%${prefix}/man%g
+s%@PACKAGE@%xlockmore%g
+s%@VERSION@%4.03%g
+s%@CC@%gcc%g
+s%@LN_S@%ln -s%g
+s%@CPP@%gcc -E%g
+s%@INSTALL_PROGRAM@%${INSTALL}%g
+s%@INSTALL_DATA@%${INSTALL} -m 644%g
+s%@X_CFLAGS@% -I//usr/X/include%g
+s%@X_PRE_LIBS@%%g
+s%@X_LIBS@% -L//usr/X/lib%g
+s%@X_EXTRA_LIBS@%-lsocket %g
+s%@host@%i386-univel-sysv4.2MP%g
+s%@host_alias@%i386-univel-sysv4.2MP%g
+s%@host_cpu@%i386%g
+s%@host_vendor@%univel%g
+s%@host_os@%sysv4.2MP%g
+s%@OSF1_ENH_SEC@%%g
+s%@INSTPGMFLAGS@%%g
+s%@XLOCKINC@%-I//usr/X/include -I/usr/include/X11 -I/usr/local/include%g
+s%@XMLOCKINC@%-I//usr/X/include -I/usr/include%g
+s%@XLIBS@%//usr/X/lib%g
+s%@BITMAPTYPE@%x11%g
+s%@PIXMAPTYPE@%x11%g
+s%@BITMAPDIR@%./bitmaps%g
+s%@PIXMAPDIR@%./pixmaps%g
+s%@XLOCKLIBS@%-L//usr/X/lib -L/usr/lib/X11 -L/usr/local/lib -lsocket -lXpm -lMesaGL -lMesaGLU -lX11 -lXext -lm%g
+s%@XMLOCKLIBS@%-L//usr/X/lib -L/usr/lib/X11 -L/usr/lib/X11 -lXmu -lXm -lXt -lX11%g
+s%@XMLOCK@%xmlock%g
+s%@INSTALL_XMLOCK@%install_xmlock%g
+s%@UNINSTALL_XMLOCK@%uninstall_xmlock%g
+s%@LINT@%%g
+s%@HACKERS@%#%g
+
+CEOF
+
+# Split the substitutions into bite-sized pieces for seds with
+# small command number limits, like on Digital OSF/1 and HP-UX.
+ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
+ac_file=1 # Number of current file.
+ac_beg=1 # First line for current file.
+ac_end=$ac_max_sed_cmds # Line after last line for current file.
+ac_more_lines=:
+ac_sed_cmds=""
+while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
+ else
+ sed "${ac_end}q" conftest.subs > conftest.s$ac_file
+ fi
+ if test ! -s conftest.s$ac_file; then
+ ac_more_lines=false
+ rm -f conftest.s$ac_file
+ else
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f conftest.s$ac_file"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+ fi
+ ac_file=`expr $ac_file + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_cmds`
+ fi
+done
+if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+fi
+
+CONFIG_FILES=${CONFIG_FILES-"Makefile"}
+for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case "$ac_file" in
+ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ *) ac_file_in="${ac_file}.in" ;;
+ esac
+
+ # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
+
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ # The file is in a subdirectory.
+ test ! -d "$ac_dir" && mkdir "$ac_dir"
+ ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+ else
+ ac_dir_suffix= ac_dots=
+ fi
+
+ case "$ac_given_srcdir" in
+ .) srcdir=.
+ if test -z "$ac_dots"; then top_srcdir=.
+ else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
+ /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+ *) # Relative path.
+ srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
+ top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+
+ case "$ac_given_INSTALL" in
+ [/$]*) INSTALL="$ac_given_INSTALL" ;;
+ *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+ esac
+
+ echo creating "$ac_file"
+ rm -f "$ac_file"
+ configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
+ case "$ac_file" in
+ *Makefile*) ac_comsub="1i\\
+# $configure_input" ;;
+ *) ac_comsub= ;;
+ esac
+
+ ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+ sed -e "$ac_comsub
+s%@configure_input@%$configure_input%g
+s%@srcdir@%$srcdir%g
+s%@top_srcdir@%$top_srcdir%g
+s%@INSTALL@%$INSTALL%g
+" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
+fi; done
+rm -f conftest.s*
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)'
+ac_dB='\([ ][ ]*\)[^ ]*%\1#\2'
+ac_dC='\3'
+ac_dD='%g'
+# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
+ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_uB='\([ ]\)%\1#\2define\3'
+ac_uC=' '
+ac_uD='\4%g'
+# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_eB='$%\1#\2define\3'
+ac_eC=' '
+ac_eD='%g'
+
+if test "${CONFIG_HEADERS+set}" != set; then
+ CONFIG_HEADERS="config.h"
+fi
+for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case "$ac_file" in
+ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ *) ac_file_in="${ac_file}.in" ;;
+ esac
+
+ echo creating $ac_file
+
+ rm -f conftest.frag conftest.in conftest.out
+ ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+ cat $ac_file_inputs > conftest.in
+
+ cat > conftest.frag <<CEOF
+${ac_dA}PACKAGE${ac_dB}PACKAGE${ac_dC}"xlockmore"${ac_dD}
+${ac_uA}PACKAGE${ac_uB}PACKAGE${ac_uC}"xlockmore"${ac_uD}
+${ac_eA}PACKAGE${ac_eB}PACKAGE${ac_eC}"xlockmore"${ac_eD}
+${ac_dA}VERSION${ac_dB}VERSION${ac_dC}"4.03"${ac_dD}
+${ac_uA}VERSION${ac_uB}VERSION${ac_uC}"4.03"${ac_uD}
+${ac_eA}VERSION${ac_eB}VERSION${ac_eC}"4.03"${ac_eD}
+${ac_dA}HAVE_FCNTL_H${ac_dB}HAVE_FCNTL_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_FCNTL_H${ac_uB}HAVE_FCNTL_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_FCNTL_H${ac_eB}HAVE_FCNTL_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_LIMITS_H${ac_dB}HAVE_LIMITS_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_LIMITS_H${ac_uB}HAVE_LIMITS_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_LIMITS_H${ac_eB}HAVE_LIMITS_H${ac_eC}1${ac_eD}
+CEOF
+ sed -f conftest.frag conftest.in > conftest.out
+ rm -f conftest.in
+ mv conftest.out conftest.in
+
+ cat > conftest.frag <<CEOF
+${ac_dA}HAVE_SYS_SELECT_H${ac_dB}HAVE_SYS_SELECT_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_SYS_SELECT_H${ac_uB}HAVE_SYS_SELECT_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_SYS_SELECT_H${ac_eB}HAVE_SYS_SELECT_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_SYS_TIME_H${ac_dB}HAVE_SYS_TIME_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_SYS_TIME_H${ac_uB}HAVE_SYS_TIME_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_SYS_TIME_H${ac_eB}HAVE_SYS_TIME_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_SYSLOG_H${ac_dB}HAVE_SYSLOG_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_SYSLOG_H${ac_uB}HAVE_SYSLOG_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_SYSLOG_H${ac_eB}HAVE_SYSLOG_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_UNISTD_H${ac_dB}HAVE_UNISTD_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_UNISTD_H${ac_uB}HAVE_UNISTD_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_UNISTD_H${ac_eB}HAVE_UNISTD_H${ac_eC}1${ac_eD}
+CEOF
+ sed -f conftest.frag conftest.in > conftest.out
+ rm -f conftest.in
+ mv conftest.out conftest.in
+
+ cat > conftest.frag <<CEOF
+${ac_dA}HAVE_MEMORY_H${ac_dB}HAVE_MEMORY_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_MEMORY_H${ac_uB}HAVE_MEMORY_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_MEMORY_H${ac_eB}HAVE_MEMORY_H${ac_eC}1${ac_eD}
+${ac_dA}STDC_HEADERS${ac_dB}STDC_HEADERS${ac_dC}1${ac_dD}
+${ac_uA}STDC_HEADERS${ac_uB}STDC_HEADERS${ac_uC}1${ac_uD}
+${ac_eA}STDC_HEADERS${ac_eB}STDC_HEADERS${ac_eC}1${ac_eD}
+${ac_dA}TIME_WITH_SYS_TIME${ac_dB}TIME_WITH_SYS_TIME${ac_dC}1${ac_dD}
+${ac_uA}TIME_WITH_SYS_TIME${ac_uB}TIME_WITH_SYS_TIME${ac_uC}1${ac_uD}
+${ac_eA}TIME_WITH_SYS_TIME${ac_eB}TIME_WITH_SYS_TIME${ac_eC}1${ac_eD}
+${ac_dA}HAVE_GETTIMEOFDAY${ac_dB}HAVE_GETTIMEOFDAY${ac_dC}1${ac_dD}
+${ac_uA}HAVE_GETTIMEOFDAY${ac_uB}HAVE_GETTIMEOFDAY${ac_uC}1${ac_uD}
+${ac_eA}HAVE_GETTIMEOFDAY${ac_eB}HAVE_GETTIMEOFDAY${ac_eC}1${ac_eD}
+CEOF
+ sed -f conftest.frag conftest.in > conftest.out
+ rm -f conftest.in
+ mv conftest.out conftest.in
+
+ cat > conftest.frag <<CEOF
+${ac_dA}HAVE_SELECT${ac_dB}HAVE_SELECT${ac_dC}1${ac_dD}
+${ac_uA}HAVE_SELECT${ac_uB}HAVE_SELECT${ac_uC}1${ac_uD}
+${ac_eA}HAVE_SELECT${ac_eB}HAVE_SELECT${ac_eC}1${ac_eD}
+${ac_dA}HAVE_STRDUP${ac_dB}HAVE_STRDUP${ac_dC}1${ac_dD}
+${ac_uA}HAVE_STRDUP${ac_uB}HAVE_STRDUP${ac_uC}1${ac_uD}
+${ac_eA}HAVE_STRDUP${ac_eB}HAVE_STRDUP${ac_eC}1${ac_eD}
+${ac_dA}HAVE_SETEUID${ac_dB}HAVE_SETEUID${ac_dC}1${ac_dD}
+${ac_uA}HAVE_SETEUID${ac_uB}HAVE_SETEUID${ac_uC}1${ac_uD}
+${ac_eA}HAVE_SETEUID${ac_eB}HAVE_SETEUID${ac_eC}1${ac_eD}
+${ac_dA}USE_XPMINC${ac_dB}USE_XPMINC${ac_dC}1${ac_dD}
+${ac_uA}USE_XPMINC${ac_uB}USE_XPMINC${ac_uC}1${ac_uD}
+${ac_eA}USE_XPMINC${ac_eB}USE_XPMINC${ac_eC}1${ac_eD}
+CEOF
+ sed -f conftest.frag conftest.in > conftest.out
+ rm -f conftest.in
+ mv conftest.out conftest.in
+
+ cat > conftest.frag <<CEOF
+${ac_dA}USE_XMU${ac_dB}USE_XMU${ac_dC}1${ac_dD}
+${ac_uA}USE_XMU${ac_uB}USE_XMU${ac_uC}1${ac_uD}
+${ac_eA}USE_XMU${ac_eB}USE_XMU${ac_eC}1${ac_eD}
+${ac_dA}USE_GL${ac_dB}USE_GL${ac_dC}1${ac_dD}
+${ac_uA}USE_GL${ac_uB}USE_GL${ac_uC}1${ac_uD}
+${ac_eA}USE_GL${ac_eB}USE_GL${ac_eC}1${ac_eD}
+${ac_dA}HAVE_DIRENT_H${ac_dB}HAVE_DIRENT_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_DIRENT_H${ac_uB}HAVE_DIRENT_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_DIRENT_H${ac_eB}HAVE_DIRENT_H${ac_eC}1${ac_eD}
+${ac_dA}SRAND${ac_dB}SRAND${ac_dC}srand48${ac_dD}
+${ac_uA}SRAND${ac_uB}SRAND${ac_uC}srand48${ac_uD}
+${ac_eA}SRAND${ac_eB}SRAND${ac_eC}srand48${ac_eD}
+CEOF
+ sed -f conftest.frag conftest.in > conftest.out
+ rm -f conftest.in
+ mv conftest.out conftest.in
+
+ cat > conftest.frag <<CEOF
+${ac_dA}LRAND${ac_dB}LRAND${ac_dC}lrand48${ac_dD}
+${ac_uA}LRAND${ac_uB}LRAND${ac_uC}lrand48${ac_uD}
+${ac_eA}LRAND${ac_eB}LRAND${ac_eC}lrand48${ac_eD}
+${ac_dA}MAXRAND${ac_dB}MAXRAND${ac_dC}2147483648.0${ac_dD}
+${ac_uA}MAXRAND${ac_uB}MAXRAND${ac_uC}2147483648.0${ac_uD}
+${ac_eA}MAXRAND${ac_eB}MAXRAND${ac_eC}2147483648.0${ac_eD}
+${ac_dA}USE_MATHERR${ac_dB}USE_MATHERR${ac_dC}1${ac_dD}
+${ac_uA}USE_MATHERR${ac_uB}USE_MATHERR${ac_uC}1${ac_uD}
+${ac_eA}USE_MATHERR${ac_eB}USE_MATHERR${ac_eC}1${ac_eD}
+${ac_dA}USE_VROOT${ac_dB}USE_VROOT${ac_dC}1${ac_dD}
+${ac_uA}USE_VROOT${ac_uB}USE_VROOT${ac_uC}1${ac_uD}
+${ac_eA}USE_VROOT${ac_eB}USE_VROOT${ac_eC}1${ac_eD}
+CEOF
+ sed -f conftest.frag conftest.in > conftest.out
+ rm -f conftest.in
+ mv conftest.out conftest.in
+
+ cat > conftest.frag <<CEOF
+${ac_dA}ALWAYS_ALLOW_ROOT${ac_dB}ALWAYS_ALLOW_ROOT${ac_dC}1${ac_dD}
+${ac_uA}ALWAYS_ALLOW_ROOT${ac_uB}ALWAYS_ALLOW_ROOT${ac_uC}1${ac_uD}
+${ac_eA}ALWAYS_ALLOW_ROOT${ac_eB}ALWAYS_ALLOW_ROOT${ac_eC}1${ac_eD}
+${ac_dA}USE_BOMB${ac_dB}USE_BOMB${ac_dC}1${ac_dD}
+${ac_uA}USE_BOMB${ac_uB}USE_BOMB${ac_uC}1${ac_uD}
+${ac_eA}USE_BOMB${ac_eB}USE_BOMB${ac_eC}1${ac_eD}
+s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
+CEOF
+ sed -f conftest.frag conftest.in > conftest.out
+ rm -f conftest.in
+ mv conftest.out conftest.in
+
+ rm -f conftest.frag conftest.h
+ echo "/* $ac_file. Generated automatically by configure. */" > conftest.h
+ cat conftest.in >> conftest.h
+ rm -f conftest.in
+ if cmp -s $ac_file conftest.h 2>/dev/null; then
+ echo "$ac_file is unchanged"
+ rm -f conftest.h
+ else
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ # The file is in a subdirectory.
+ test ! -d "$ac_dir" && mkdir "$ac_dir"
+ fi
+ rm -f $ac_file
+ mv conftest.h $ac_file
+ fi
+fi; done
+
+
+
+exit 0
--- /dev/null
+#! /bin/sh
+# Configuration validation subroutine script, version 1.1.
+# Copyright (C) 1991, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine. It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support. The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+if [ x$1 = x ]
+then
+ echo Configuration name missing. 1>&2
+ echo "Usage: $0 CPU-MFR-OPSYS" 1>&2
+ echo "or $0 ALIAS" 1>&2
+ echo where ALIAS is a recognized configuration type. 1>&2
+ exit 1
+fi
+
+# First pass through any local machine types.
+case $1 in
+ *local*)
+ echo $1
+ exit 0
+ ;;
+ *)
+ ;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+ linux-gnu*)
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
+ *)
+ basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+ if [ $basic_machine != $1 ]
+ then os=`echo $1 | sed 's/.*-/-/'`
+ else os=; fi
+ ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work. We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+ -sun*os*)
+ # Prevent following clause from handling this invalid input.
+ ;;
+ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+ -apple)
+ os=
+ basic_machine=$1
+ ;;
+ -hiux*)
+ os=-hiuxwe2
+ ;;
+ -sco5)
+ os=sco3.2v5
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco4)
+ os=-sco3.2v4
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2.[4-9]*)
+ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2v[4-9]*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco*)
+ os=-sco3.2v2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -isc)
+ os=-isc2.2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -clix*)
+ basic_machine=clipper-intergraph
+ ;;
+ -isc*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -lynx*)
+ os=-lynxos
+ ;;
+ -ptx*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+ ;;
+ -windowsnt*)
+ os=`echo $os | sed -e 's/windowsnt/winnt/'`
+ ;;
+ -psos*)
+ os=-psos
+ ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+ # Recognize the basic CPU types without company name.
+ # Some are omitted here because they have special meanings below.
+ tahoe | i860 | m68k | m68000 | m88k | ns32k | arm \
+ | arme[lb] | pyramid \
+ | tron | a29k | 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 \
+ | alpha | we32k | ns16k | clipper | i370 | sh \
+ | powerpc | powerpcle | 1750a | dsp16xx | mips64 | mipsel \
+ | pdp11 | mips64el | mips64orion | mips64orionel \
+ | sparc | sparclet | sparclite | sparc64)
+ basic_machine=$basic_machine-unknown
+ ;;
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+ i[3456]86)
+ basic_machine=$basic_machine-pc
+ ;;
+ # Object if more than one company name word.
+ *-*-*)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+ # Recognize the basic CPU types with company name.
+ vax-* | tahoe-* | i[3456]86-* | i860-* | m68k-* | m68000-* | m88k-* \
+ | sparc-* | ns32k-* | fx80-* | arm-* | c[123]* \
+ | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* | power-* \
+ | none-* | 580-* | cray2-* | h8300-* | i960-* | xmp-* | ymp-* \
+ | hppa-* | hppa1.0-* | hppa1.1-* | alpha-* | we32k-* | cydra-* | ns16k-* \
+ | pn-* | np1-* | xps100-* | clipper-* | orion-* | sparclite-* \
+ | pdp11-* | sh-* | powerpc-* | powerpcle-* | sparc64-* | mips64-* | mipsel-* \
+ | mips64el-* | mips64orion-* | mips64orionel-* | f301-*)
+ ;;
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+ basic_machine=m68000-att
+ ;;
+ 3b*)
+ basic_machine=we32k-att
+ ;;
+ alliant | fx80)
+ basic_machine=fx80-alliant
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ os=-bsd
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ os=-sysv
+ ;;
+ amiga | amiga-*)
+ basic_machine=m68k-cbm
+ ;;
+ amigados)
+ basic_machine=m68k-cbm
+ os=-amigados
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-cbm
+ os=-sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ os=-sysv
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ os=-aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ os=-dynix
+ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ os=-bsd
+ ;;
+ convex-c2)
+ basic_machine=c2-convex
+ os=-bsd
+ ;;
+ convex-c32)
+ basic_machine=c32-convex
+ os=-bsd
+ ;;
+ convex-c34)
+ basic_machine=c34-convex
+ os=-bsd
+ ;;
+ convex-c38)
+ basic_machine=c38-convex
+ os=-bsd
+ ;;
+ cray | ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+ ;;
+ cray2)
+ basic_machine=cray2-cray
+ os=-unicos
+ ;;
+ [ctj]90-cray)
+ basic_machine=c90-cray
+ os=-unicos
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ ;;
+ da30 | da30-*)
+ basic_machine=m68k-da30
+ ;;
+ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
+ ;;
+ delta | 3300 | motorola-3300 | motorola-delta \
+ | 3300-motorola | delta-motorola)
+ basic_machine=m68k-motorola
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ os=-sysv3
+ ;;
+ dpx20 | dpx20-*)
+ basic_machine=rs6000-bull
+ os=-bosx
+ ;;
+ dpx2* | dpx2*-bull)
+ basic_machine=m68k-bull
+ os=-sysv3
+ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ os=-ebmon
+ ;;
+ elxsi)
+ basic_machine=elxsi-elxsi
+ os=-bsd
+ ;;
+ encore | umax | mmax)
+ basic_machine=ns32k-encore
+ ;;
+ fx2800)
+ basic_machine=i860-alliant
+ ;;
+ genix)
+ basic_machine=ns32k-ns
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ os=-sysv
+ ;;
+ h3050r* | hiux*)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ os=-hms
+ ;;
+ harris)
+ basic_machine=m88k-harris
+ os=-sysv3
+ ;;
+ hp300-*)
+ basic_machine=m68k-hp
+ ;;
+ hp300bsd)
+ basic_machine=m68k-hp
+ os=-bsd
+ ;;
+ hp300hpux)
+ basic_machine=m68k-hp
+ os=-hpux
+ ;;
+ hp9k2[0-9][0-9] | hp9k31[0-9])
+ basic_machine=m68000-hp
+ ;;
+ hp9k3[2-9][0-9])
+ basic_machine=m68k-hp
+ ;;
+ hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7)
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hppa-next)
+ os=-nextstep3
+ ;;
+ i370-ibm* | ibm*)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
+# I'm not sure what "Sysv32" means. Should this be sysv3.2?
+ i[3456]86v32)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv32
+ ;;
+ i[3456]86v4*)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv4
+ ;;
+ i[3456]86v)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv
+ ;;
+ i[3456]86sol2)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-solaris2
+ ;;
+ iris | iris4d)
+ basic_machine=mips-sgi
+ case $os in
+ -irix*)
+ ;;
+ *)
+ os=-irix4
+ ;;
+ esac
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ os=-sysv
+ ;;
+ m88k-omron*)
+ basic_machine=m88k-omron
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ os=-sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
+ miniframe)
+ basic_machine=m68000-convergent
+ ;;
+ mips3*-*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+ ;;
+ mips3*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ os=-sysv4
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ os=-newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ os=-newsos
+ ;;
+ news-3600 | risc-news)
+ basic_machine=mips-sony
+ os=-newsos
+ ;;
+ next | m*-next )
+ basic_machine=m68k-next
+ case $os in
+ -nextstep* )
+ ;;
+ -ns2*)
+ os=-nextstep2
+ ;;
+ *)
+ os=-nextstep3
+ ;;
+ esac
+ ;;
+ nh3000)
+ basic_machine=m68k-harris
+ os=-cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ os=-cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ os=-nindy
+ ;;
+ np1)
+ basic_machine=np1-gould
+ ;;
+ pa-hitachi)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ os=-osf
+ ;;
+ pbd)
+ basic_machine=sparc-tti
+ ;;
+ pbb)
+ basic_machine=m68k-tti
+ ;;
+ pc532 | pc532-*)
+ basic_machine=ns32k-pc532
+ ;;
+ pentium | p5)
+ basic_machine=i586-intel
+ ;;
+ pentiumpro | p6)
+ basic_machine=i686-intel
+ ;;
+ pentium-* | p5-*)
+ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumpro-* | p6-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ k5)
+ # We don't have specific support for AMD's K5 yet, so just call it a Pentium
+ basic_machine=i586-amd
+ ;;
+ nexen)
+ # We don't have specific support for Nexgen yet, so just call it a Pentium
+ basic_machine=i586-nexgen
+ ;;
+ pn)
+ basic_machine=pn-gould
+ ;;
+ power) basic_machine=rs6000-ibm
+ ;;
+ ppc) basic_machine=powerpc-unknown
+ ;;
+ ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppcle | powerpclittle | ppc-le | powerpc-little)
+ basic_machine=powerpcle-unknown
+ ;;
+ ppcle-* | powerpclittle-*)
+ basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ps2)
+ basic_machine=i386-ibm
+ ;;
+ rm[46]00)
+ basic_machine=mips-siemens
+ ;;
+ rtpc | rtpc-*)
+ basic_machine=romp-ibm
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ ;;
+ sh)
+ basic_machine=sh-hitachi
+ os=-hms
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ os=-sysv2
+ ;;
+ spur)
+ basic_machine=spur-unknown
+ ;;
+ sun2)
+ basic_machine=m68000-sun
+ ;;
+ sun2os3)
+ basic_machine=m68000-sun
+ os=-sunos3
+ ;;
+ sun2os4)
+ basic_machine=m68000-sun
+ os=-sunos4
+ ;;
+ sun3os3)
+ basic_machine=m68k-sun
+ os=-sunos3
+ ;;
+ sun3os4)
+ basic_machine=m68k-sun
+ os=-sunos4
+ ;;
+ sun4os3)
+ basic_machine=sparc-sun
+ os=-sunos3
+ ;;
+ sun4os4)
+ basic_machine=sparc-sun
+ os=-sunos4
+ ;;
+ sun4sol2)
+ basic_machine=sparc-sun
+ os=-solaris2
+ ;;
+ sun3 | sun3-*)
+ basic_machine=m68k-sun
+ ;;
+ sun4)
+ basic_machine=sparc-sun
+ ;;
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ os=-dynix
+ ;;
+ tower | tower-32)
+ basic_machine=m68k-ncr
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ os=-sym1
+ ;;
+ vaxv)
+ basic_machine=vax-dec
+ os=-sysv
+ ;;
+ vms)
+ basic_machine=vax-dec
+ os=-vms
+ ;;
+ vpp*|vx|vx-*)
+ basic_machine=f301-fujitsu
+ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ os=-vxworks
+ ;;
+ vxworks68)
+ basic_machine=m68k-wrs
+ os=-vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ os=-vxworks
+ ;;
+ xmp)
+ basic_machine=xmp-cray
+ os=-unicos
+ ;;
+ xps | xps100)
+ basic_machine=xps100-honeywell
+ ;;
+ none)
+ basic_machine=none-none
+ os=-none
+ ;;
+
+# Here we handle the default manufacturer of certain CPU types. It is in
+# some cases the only manufacturer, in others, it is the most popular.
+ mips)
+ basic_machine=mips-mips
+ ;;
+ romp)
+ basic_machine=romp-ibm
+ ;;
+ rs6000)
+ basic_machine=rs6000-ibm
+ ;;
+ vax)
+ basic_machine=vax-dec
+ ;;
+ pdp11)
+ basic_machine=pdp11-dec
+ ;;
+ we32k)
+ basic_machine=we32k-att
+ ;;
+ sparc)
+ basic_machine=sparc-sun
+ ;;
+ cydra)
+ basic_machine=cydra-cydrome
+ ;;
+ orion)
+ basic_machine=orion-highlevel
+ ;;
+ orion105)
+ basic_machine=clipper-highlevel
+ ;;
+ *)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+ *-digital*)
+ basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+ ;;
+ *-commodore*)
+ basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+ ;;
+ *)
+ ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+ # First match some system type aliases
+ # that might get confused with valid system types.
+ # -solaris* is a basic system type, with this one exception.
+ -solaris1 | -solaris1.*)
+ os=`echo $os | sed -e 's|solaris1|sunos4|'`
+ ;;
+ -solaris)
+ os=-solaris2
+ ;;
+ -unixware* | svr4*)
+ os=-sysv4
+ ;;
+ -gnu/linux*)
+ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+ ;;
+ # First accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST END IN A *, to match a version number.
+ # -sysv* is not here because it comes later, after sysvr4.
+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+ | -amigados* | -msdos* | -newsos* | -unicos* | -aof* | -aos* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+ | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
+ | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -linux-gnu* | -uxpv*)
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
+ -linux*)
+ os=`echo $os | sed -e 's|linux|linux-gnu|'`
+ ;;
+ -sunos5*)
+ os=`echo $os | sed -e 's|sunos5|solaris2|'`
+ ;;
+ -sunos6*)
+ os=`echo $os | sed -e 's|sunos6|solaris3|'`
+ ;;
+ -osfrose*)
+ os=-osfrose
+ ;;
+ -osf*)
+ os=-osf
+ ;;
+ -utek*)
+ os=-bsd
+ ;;
+ -dynix*)
+ os=-bsd
+ ;;
+ -acis*)
+ os=-aos
+ ;;
+ -ctix* | -uts*)
+ os=-sysv
+ ;;
+ -ns2 )
+ os=-nextstep2
+ ;;
+ # Preserve the version number of sinix5.
+ -sinix5.*)
+ os=`echo $os | sed -e 's|sinix|sysv|'`
+ ;;
+ -sinix*)
+ os=-sysv4
+ ;;
+ -triton*)
+ os=-sysv3
+ ;;
+ -oss*)
+ os=-sysv3
+ ;;
+ -svr4)
+ os=-sysv4
+ ;;
+ -svr3)
+ os=-sysv3
+ ;;
+ -sysvr4)
+ os=-sysv4
+ ;;
+ # This must come after -sysvr4.
+ -sysv*)
+ ;;
+ -xenix)
+ os=-xenix
+ ;;
+ -none)
+ ;;
+ *)
+ # Get rid of the `-' at the beginning of $os.
+ os=`echo $os | sed 's/[^-]*-//'`
+ echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system. Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+ *-acorn)
+ os=-riscix1.2
+ ;;
+ arm*-semi)
+ os=-aout
+ ;;
+ pdp11-*)
+ os=-none
+ ;;
+ *-dec | vax-*)
+ os=-ultrix4.2
+ ;;
+ m68*-apollo)
+ os=-domain
+ ;;
+ i386-sun)
+ os=-sunos4.0.2
+ ;;
+ m68000-sun)
+ os=-sunos3
+ # This also exists in the configure program, but was not the
+ # default.
+ # os=-sunos4
+ ;;
+ *-tti) # must be before sparc entry or we get the wrong os.
+ os=-sysv3
+ ;;
+ sparc-* | *-sun)
+ os=-sunos4.1.1
+ ;;
+ *-ibm)
+ os=-aix
+ ;;
+ *-hp)
+ os=-hpux
+ ;;
+ *-hitachi)
+ os=-hiux
+ ;;
+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+ os=-sysv
+ ;;
+ *-cbm)
+ os=-amigados
+ ;;
+ *-dg)
+ os=-dgux
+ ;;
+ *-dolphin)
+ os=-sysv3
+ ;;
+ m68k-ccur)
+ os=-rtu
+ ;;
+ m88k-omron*)
+ os=-luna
+ ;;
+ *-next )
+ os=-nextstep
+ ;;
+ *-sequent)
+ os=-ptx
+ ;;
+ *-crds)
+ os=-unos
+ ;;
+ *-ns)
+ os=-genix
+ ;;
+ i370-*)
+ os=-mvs
+ ;;
+ *-next)
+ os=-nextstep3
+ ;;
+ *-gould)
+ os=-sysv
+ ;;
+ *-highlevel)
+ os=-bsd
+ ;;
+ *-encore)
+ os=-bsd
+ ;;
+ *-sgi)
+ os=-irix
+ ;;
+ *-siemens)
+ os=-sysv4
+ ;;
+ *-masscomp)
+ os=-rtu
+ ;;
+ f301-fujitsu)
+ os=-uxpv
+ ;;
+ *)
+ os=-none
+ ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer. We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+ *-unknown)
+ case $os in
+ -riscix*)
+ vendor=acorn
+ ;;
+ -sunos*)
+ vendor=sun
+ ;;
+ -aix*)
+ vendor=ibm
+ ;;
+ -hpux*)
+ vendor=hp
+ ;;
+ -hiux*)
+ vendor=hitachi
+ ;;
+ -unos*)
+ vendor=crds
+ ;;
+ -dgux*)
+ vendor=dg
+ ;;
+ -luna*)
+ vendor=omron
+ ;;
+ -genix*)
+ vendor=ns
+ ;;
+ -mvs*)
+ vendor=ibm
+ ;;
+ -ptx*)
+ vendor=sequent
+ ;;
+ -vxsim* | -vxworks*)
+ vendor=wrs
+ ;;
+ -aux*)
+ vendor=apple
+ ;;
+ esac
+ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+ ;;
+esac
+
+echo $basic_machine$os
--- /dev/null
+These files are just examples of configuration files for xlock and
+other tools which I use. They are not normally required.
+
+amd.h and amd.c should be copied up one directory if using VMS on a Alpha
+ and you want sound (also make a small edit to make.com .
+fortune.dat is for those who do not have fortune. On VMS it is very costly
+ to spawn a process.
+
+openwin* and system.fvwm* is for openwin and fvwm & fvwm2 window managers.
+By default they include all modes which may not be available depending on
+your system.
+
+*play* is for sound.
+*life* stuff is for adding life patterns to life.c not all formats are
+ handled. However, the major one that is not used is close to the format
+ I use.
+xlockrandimage.pl picks a random image. Does not have to be used since
+ it is built in, one can just give a directory name.
+
+Contributed by Charles Vidal <vidalc@univ-mlv.fr>
+xlock.tcl is another xlock launcher similar to xmlock but using tcl.
+
+Contributed by Igor Markov <imarkov@math.ucla.edu>
+xlocksat.pl use like "xlock -saturation `xlocksat.pl`" The idea is that
+ high saturation looks weird at night and low saturation looks weird
+ during the day. Unfortuantely, as the day progresses the saturation does
+ not change.
+xlockranddur.pl use like "xlock random -duration `xlockranddur.pl`"
+ This gives a random duration of a mode (providing you have fortune).
--- /dev/null
+/*-
+ * Sound file for vms
+ * Jouk Jansen <joukj@alpha.chem.uva.nl> contributed this
+ * which he found at http://axp616.gsi.de:8080/www/vms/mzsw.html
+ */
+
+/** amd.c **/
+
+#include <iodef.h> /* needed for IO$_ functions */
+#include <ssdef.h> /* system condition codes */
+#include <descrip.h> /* VMS Descriptor functions */
+#include <string.h>
+#include <starlet.h>
+
+#include "amd.h" /* AMD access functions */
+
+struct dsc$descriptor_s devname; /* device we are using */
+static short int so_chan; /* Channel to SODRIVER */
+char ReadBuffer[512]; /* Asynchronous read buffer */
+unsigned short ReadIOsb[4] =
+{0, 0, 0, 0};
+int ReadPending = 0;
+int ReadCompleted = 0;
+
+/*-
+ * Initialize access to the AMD chip
+ */
+unsigned long int
+AmdInitialize(char *device, int volume)
+{
+ unsigned long int status;
+ unsigned long int iosb[2] =
+ {0, 0};
+ int p1;
+
+#ifdef DEBUG
+ printf("Address of AMD Read buffer is 0x%x\n", &ReadBuffer);
+#endif
+ /*
+ * Create the descriptor
+ */
+ devname.dsc$w_length = strlen(device);
+ devname.dsc$a_pointer = device;
+ devname.dsc$b_dtype = DSC$K_DTYPE_T;
+ devname.dsc$b_class = DSC$K_CLASS_S;
+ /*
+ * Assign a channel to the device
+ */
+ status = sys$assign(&devname, &so_chan, 0, 0, 0);
+ if (!(status & 1))
+ return (status);
+ /*
+ * Clear MMR1
+ */
+ p1 = 0;
+ status = sys$qiow(0, /* efn */
+ so_chan, /* channel */
+ IO$_ACPCONTROL, /* function */
+ iosb, /* iosb */
+ 0, /* ast routine */
+ 0, /* ast param */
+ &p1, /* Buffer (P1) */
+ sizeof (p1), /* Buffer length (P2) */
+ AMD_SETREG, /* IOCTL code (P3) */
+ MAP_MMR1, /* AMD INDIRECT Register (P4) */
+ 0, /* P5 */
+ 0); /* P6 */
+
+ if (!(status & 1))
+ return (status);
+ if (!(iosb[0] & 1))
+ return (iosb[0]);
+ /*
+ * Clear MMR2
+ */
+ p1 = 0;
+ status = sys$qiow(0, /* efn */
+ so_chan, /* channel */
+ IO$_ACPCONTROL, /* function */
+ iosb, /* iosb */
+ 0, /* ast routine */
+ 0, /* ast param */
+ &p1, /* Buffer (P1) */
+ sizeof (p1), /* Buffer length (P2) */
+ AMD_SETREG, /* IOCTL code (P3) */
+ MAP_MMR2, /* AMD INDIRECT Register (P4) */
+ 0, /* P5 */
+ 0); /* P6 */
+
+ if (!(status & 1))
+ return (status);
+ if (!(iosb[0] & 1))
+ return (iosb[0]);
+ /*
+ * Set Volume to initial 30%
+ */
+ p1 = 0x2ABD;
+ status = sys$qiow(0, /* efn */
+ so_chan, /* channel */
+ IO$_ACPCONTROL, /* function */
+ iosb, /* iosb */
+ 0, /* ast routine */
+ 0, /* ast param */
+ &p1, /* Buffer (P1) */
+ sizeof (p1), /* Buffer length (P2) */
+ AMD_SETREG, /* IOCTL code (P3) */
+ MAP_GER, /* AMD INDIRECT Register (P4) */
+ 0, /* P5 */
+ 0); /* P6 */
+
+ if (!(status & 1))
+ return (status);
+ if (!(iosb[0] & 1))
+ return (iosb[0]);
+ /*
+ * Get MMR1
+ */
+ p1 = 0;
+ status = sys$qiow(0, /* efn */
+ so_chan, /* channel */
+ IO$_ACPCONTROL, /* function */
+ iosb, /* iosb */
+ 0, /* ast routine */
+ 0, /* ast param */
+ &p1, /* Buffer (P1) */
+ sizeof (p1), /* Buffer length (P2) */
+ AMD_GETREG, /* IOCTL code (P3) */
+ MAP_MMR1, /* AMD INDIRECT Register (P4) */
+ 0, /* P5 */
+ 0); /* P6 */
+
+ if (!(status & 1))
+ return (status);
+ if (!(iosb[0] & 1))
+ return (iosb[0]);
+ /*
+ * Set MMR1 to 8
+ */
+ p1 = 8;
+ status = sys$qiow(0, /* efn */
+ so_chan, /* channel */
+ IO$_ACPCONTROL, /* function */
+ iosb, /* iosb */
+ 0, /* ast routine */
+ 0, /* ast param */
+ &p1, /* Buffer (P1) */
+ sizeof (p1), /* Buffer length (P2) */
+ AMD_SETREG, /* IOCTL code (P3) */
+ MAP_MMR1, /* AMD INDIRECT Register (P4) */
+ 0, /* P5 */
+ 0); /* P6 */
+
+ if (!(status & 1))
+ return (status);
+ if (!(iosb[0] & 1))
+ return (iosb[0]);
+ /*
+ * Set GR
+ */
+ p1 = 0x92FB;
+ status = sys$qiow(0, /* efn */
+ so_chan, /* channel */
+ IO$_ACPCONTROL, /* function */
+ iosb, /* iosb */
+ 0, /* ast routine */
+ 0, /* ast param */
+ &p1, /* Buffer (P1) */
+ sizeof (p1), /* Buffer length (P2) */
+ AMD_SETREG, /* IOCTL code (P3) */
+ MAP_GR, /* AMD INDIRECT Register (P4) */
+ 0, /* P5 */
+ 0); /* P6 */
+
+ if (!(status & 1))
+ return (status);
+ if (!(iosb[0] & 1))
+ return (iosb[0]);
+ /*
+ * Get MMR1
+ */
+ p1 = 0;
+ status = sys$qiow(0, /* efn */
+ so_chan, /* channel */
+ IO$_ACPCONTROL, /* function */
+ iosb, /* iosb */
+ 0, /* ast routine */
+ 0, /* ast param */
+ &p1, /* Buffer (P1) */
+ sizeof (p1), /* Buffer length (P2) */
+ AMD_GETREG, /* IOCTL code (P3) */
+ MAP_MMR1, /* AMD INDIRECT Register (P4) */
+ 0, /* P5 */
+ 0); /* P6 */
+
+ if (!(status & 1))
+ return (status);
+ if (!(iosb[0] & 1))
+ return (iosb[0]);
+ /*
+ * Set MMR1 to 12 (0x0C)
+ */
+ p1 = 12;
+ status = sys$qiow(0, /* efn */
+ so_chan, /* channel */
+ IO$_ACPCONTROL, /* function */
+ iosb, /* iosb */
+ 0, /* ast routine */
+ 0, /* ast param */
+ &p1, /* Buffer (P1) */
+ sizeof (p1), /* Buffer length (P2) */
+ AMD_SETREG, /* IOCTL code (P3) */
+ MAP_MMR1, /* AMD INDIRECT Register (P4) */
+ 0, /* P5 */
+ 0); /* P6 */
+
+ if (!(status & 1))
+ return (status);
+ if (!(iosb[0] & 1))
+ return (iosb[0]);
+ /*
+ * Get MMR2
+ */
+ p1 = 0;
+ status = sys$qiow(0, /* efn */
+ so_chan, /* channel */
+ IO$_ACPCONTROL, /* function */
+ iosb, /* iosb */
+ 0, /* ast routine */
+ 0, /* ast param */
+ &p1, /* Buffer (P1) */
+ sizeof (p1), /* Buffer length (P2) */
+ AMD_GETREG, /* IOCTL code (P3) */
+ MAP_MMR2, /* AMD INDIRECT Register (P4) */
+ 0, /* P5 */
+ 0); /* P6 */
+
+ if (!(status & 1))
+ return (status);
+ if (!(iosb[0] & 1))
+ return (iosb[0]);
+ /*
+ * Put it back MMR2
+ */
+ status = sys$qiow(0, /* efn */
+ so_chan, /* channel */
+ IO$_ACPCONTROL, /* function */
+ iosb, /* iosb */
+ 0, /* ast routine */
+ 0, /* ast param */
+ &p1, /* Buffer (P1) */
+ sizeof (p1), /* Buffer length (P2) */
+ AMD_SETREG, /* IOCTL code (P3) */
+ MAP_MMR2, /* AMD INDIRECT Register (P4) */
+ 0, /* P5 */
+ 0); /* P6 */
+
+ if (!(status & 1))
+ return (status);
+ if (!(iosb[0] & 1))
+ return (iosb[0]);
+ /*
+ * Set GX to 0x0112
+ */
+ p1 = 0x0112;
+ status = sys$qiow(0, /* efn */
+ so_chan, /* channel */
+ IO$_ACPCONTROL, /* function */
+ iosb, /* iosb */
+ 0, /* ast routine */
+ 0, /* ast param */
+ &p1, /* Buffer (P1) */
+ sizeof (p1), /* Buffer length (P2) */
+ AMD_SETREG, /* IOCTL code (P3) */
+ MAP_GX, /* AMD INDIRECT Register (P4) */
+ 0, /* P5 */
+ 0); /* P6 */
+
+ if (!(status & 1))
+ return (status);
+ if (!(iosb[0] & 1))
+ return (iosb[0]);
+ /*
+ * Get MMR1
+ */
+ p1 = 0;
+ status = sys$qiow(0, /* efn */
+ so_chan, /* channel */
+ IO$_ACPCONTROL, /* function */
+ iosb, /* iosb */
+ 0, /* ast routine */
+ 0, /* ast param */
+ &p1, /* Buffer (P1) */
+ sizeof (p1), /* Buffer length (P2) */
+ AMD_GETREG, /* IOCTL code (P3) */
+ MAP_MMR1, /* AMD INDIRECT Register (P4) */
+ 0, /* P5 */
+ 0); /* P6 */
+
+ if (!(status & 1))
+ return (status);
+ if (!(iosb[0] & 1))
+ return (iosb[0]);
+ /*
+ * Set MMR1 to 14 (0x0E)
+ */
+ p1 = 14;
+ status = sys$qiow(0, /* efn */
+ so_chan, /* channel */
+ IO$_ACPCONTROL, /* function */
+ iosb, /* iosb */
+ 0, /* ast routine */
+ 0, /* ast param */
+ &p1, /* Buffer (P1) */
+ sizeof (p1), /* Buffer length (P2) */
+ AMD_SETREG, /* IOCTL code (P3) */
+ MAP_MMR1, /* AMD INDIRECT Register (P4) */
+ 0, /* P5 */
+ 0); /* P6 */
+
+ if (!(status & 1))
+ return (status);
+ if (!(iosb[0] & 1))
+ return (iosb[0]);
+ /*
+ * Set GER (Volume to what the user wants)
+ */
+ p1 = VolumeTable[volume - 1].ger_value;
+ status = sys$qiow(0, /* efn */
+ so_chan, /* channel */
+ IO$_ACPCONTROL, /* function */
+ iosb, /* iosb */
+ 0, /* ast routine */
+ 0, /* ast param */
+ &p1, /* Buffer (P1) */
+ sizeof (p1), /* Buffer length (P2) */
+ AMD_SETREG, /* IOCTL code (P3) */
+ MAP_GER, /* AMD INDIRECT Register (P4) */
+ 0, /* P5 */
+ 0); /* P6 */
+
+ if (!(status & 1))
+ return (status);
+ if (!(iosb[0] & 1))
+ return (iosb[0]);
+ /*
+ * Get MMR1
+ */
+ p1 = 0;
+ status = sys$qiow(0, /* efn */
+ so_chan, /* channel */
+ IO$_ACPCONTROL, /* function */
+ iosb, /* iosb */
+ 0, /* ast routine */
+ 0, /* ast param */
+ &p1, /* Buffer (P1) */
+ sizeof (p1), /* Buffer length (P2) */
+ AMD_GETREG, /* IOCTL code (P3) */
+ MAP_MMR1, /* AMD INDIRECT Register (P4) */
+ 0, /* P5 */
+ 0); /* P6 */
+
+ if (!(status & 1))
+ return (status);
+ if (!(iosb[0] & 1))
+ return (iosb[0]);
+ /*
+ * Set GR (Volume to what the user wants)
+ */
+ p1 = VolumeTable[volume - 1].gr_value;
+ status = sys$qiow(0, /* efn */
+ so_chan, /* channel */
+ IO$_ACPCONTROL, /* function */
+ iosb, /* iosb */
+ 0, /* ast routine */
+ 0, /* ast param */
+ &p1, /* Buffer (P1) */
+ sizeof (p1), /* Buffer length (P2) */
+ AMD_SETREG, /* IOCTL code (P3) */
+ MAP_GR, /* AMD INDIRECT Register (P4) */
+ 0, /* P5 */
+ 0); /* P6 */
+
+ if (!(status & 1))
+ return (status);
+ if (!(iosb[0] & 1))
+ return (iosb[0]);
+ /*
+ * Get MMR1
+ */
+ p1 = 0;
+ status = sys$qiow(0, /* efn */
+ so_chan, /* channel */
+ IO$_ACPCONTROL, /* function */
+ iosb, /* iosb */
+ 0, /* ast routine */
+ 0, /* ast param */
+ &p1, /* Buffer (P1) */
+ sizeof (p1), /* Buffer length (P2) */
+ AMD_GETREG, /* IOCTL code (P3) */
+ MAP_MMR1, /* AMD INDIRECT Register (P4) */
+ 0, /* P5 */
+ 0); /* P6 */
+
+ if (!(status & 1))
+ return (status);
+ if (!(iosb[0] & 1))
+ return (iosb[0]);
+ /*
+ * Return Success
+ */
+ return (SS$_NORMAL);
+}
+
+/*-
+ * Return the channel number associated with the device
+ */
+unsigned short
+AmdGetChannel(void)
+{
+ return (so_chan);
+}
+
+/*-
+ * Increase or Decrease the Volume
+ */
+AmdSetVolume(int volume)
+{
+ unsigned long int status;
+ unsigned short iosb[4] =
+ {0, 0, 0, 0};
+ int p1;
+
+ /*
+ * Set GER (Volume to what the user wants)
+ */
+ p1 = VolumeTable[volume - 1].ger_value;
+ status = sys$qiow(0, /* efn */
+ so_chan, /* channel */
+ IO$_ACPCONTROL, /* function */
+ iosb, /* iosb */
+ 0, /* ast routine */
+ 0, /* ast param */
+ &p1, /* Buffer (P1) */
+ sizeof (p1), /* Buffer length (P2) */
+ AMD_SETREG, /* IOCTL code (P3) */
+ MAP_GER, /* AMD INDIRECT Register (P4) */
+ 0, /* P5 */
+ 0); /* P6 */
+
+ if (!(status & 1))
+ return (status);
+ if (!(iosb[0] & 1))
+ return (iosb[0]);
+ /*
+ * Get MMR1
+ */
+ p1 = 0;
+ status = sys$qiow(0, /* efn */
+ so_chan, /* channel */
+ IO$_ACPCONTROL, /* function */
+ iosb, /* iosb */
+ 0, /* ast routine */
+ 0, /* ast param */
+ &p1, /* Buffer (P1) */
+ sizeof (p1), /* Buffer length (P2) */
+ AMD_GETREG, /* IOCTL code (P3) */
+ MAP_MMR1, /* AMD INDIRECT Register (P4) */
+ 0, /* P5 */
+ 0); /* P6 */
+
+ if (!(status & 1))
+ return (status);
+ if (!(iosb[0] & 1))
+ return (iosb[0]);
+ /*
+ * Set GR (Volume to what the user wants)
+ */
+ p1 = VolumeTable[volume - 1].gr_value;
+ status = sys$qiow(0, /* efn */
+ so_chan, /* channel */
+ IO$_ACPCONTROL, /* function */
+ iosb, /* iosb */
+ 0, /* ast routine */
+ 0, /* ast param */
+ &p1, /* Buffer (P1) */
+ sizeof (p1), /* Buffer length (P2) */
+ AMD_SETREG, /* IOCTL code (P3) */
+ MAP_GR, /* AMD INDIRECT Register (P4) */
+ 0, /* P5 */
+ 0); /* P6 */
+
+ if (!(status & 1))
+ return (status);
+ if (!(iosb[0] & 1))
+ return (iosb[0]);
+ /*
+ * Get MMR1
+ */
+ p1 = 0;
+ status = sys$qiow(0, /* efn */
+ so_chan, /* channel */
+ IO$_ACPCONTROL, /* function */
+ iosb, /* iosb */
+ 0, /* ast routine */
+ 0, /* ast param */
+ &p1, /* Buffer (P1) */
+ sizeof (p1), /* Buffer length (P2) */
+ AMD_GETREG, /* IOCTL code (P3) */
+ MAP_MMR1, /* AMD INDIRECT Register (P4) */
+ 0, /* P5 */
+ 0); /* P6 */
+
+ if (!(status & 1))
+ return (status);
+ if (!(iosb[0] & 1))
+ return (iosb[0]);
+ /*
+ * Return Success
+ */
+ return (SS$_NORMAL);
+}
+
+/*-
+ * Start recording sound
+ */
+unsigned long int
+AmdInitRecord()
+{
+ unsigned long int status;
+ unsigned long int iosb[2] =
+ {0, 0};
+ int p1, p2, p3, p4, p5, p6;
+
+ /*
+ * Set recording level to 100%
+ */
+ p1 = 0x0E;
+ status = sys$qiow(0, /* efn */
+ so_chan, /* channel */
+ IO$_ACPCONTROL, /* function */
+ iosb, /* I/O status */
+ 0, /* ast routine */
+ 0, /* ast param */
+ &p1, /* Buffer (P1) */
+ sizeof (p1), /* Buffer Length (P2) */
+ AMD_SETREG, /* IOCTL code (P3) */
+ MAP_GX, /* AMD Register (P4) */
+ 0, /* P5 */
+ 0); /* P6 */
+
+ if (!(status & 1))
+ return (status);
+ if (!(iosb[0] & 1))
+ return (iosb[0]);
+ /*
+ * Start recording
+ */
+ p3 = 2;
+ p4 = 0x07D0;
+ p5 = 0x14;
+ status = sys$qiow(0, /* efn */
+ so_chan, /* channel */
+ IO$_ACCESS, /* function code */
+ iosb, /* I/O Status */
+ 0, /* ast routine */
+ 0, /* ast param */
+ 0, /* P1 */
+ 0, /* P2 */
+ p3, /* Single freq tone */
+ p4, /* frequency */
+ p5, /* amplitude */
+ 0); /* P6 */
+
+ if (!(status & 1))
+ return (status);
+ if (!(iosb[0] & 1))
+ return (iosb[0]);
+ /*
+ * Retrieve the value of MMR2
+ */
+ p1 = 0;
+ status = sys$qiow(0, /* efn */
+ so_chan, /* channel */
+ IO$_ACPCONTROL, /* function */
+ iosb, /* iosb */
+ 0, /* ast routine */
+ 0, /* ast param */
+ &p1, /* Buffer (P1) */
+ sizeof (p1), /* Buffer length (P2) */
+ AMD_GETREG, /* IOCTL code (P3) */
+ MAP_MMR2, /* AMD INDIRECT Register (P4) */
+ 0, /* P5 */
+ 0); /* P6 */
+
+ if (!(status & 1))
+ return (status);
+ if (!(iosb[0] & 1))
+ return (iosb[0]);
+ /*
+ * Set MMR2 to 0
+ */
+ p1 = 0;
+ status = sys$qiow(0, /* efn */
+ so_chan, /* channel */
+ IO$_ACPCONTROL, /* function */
+ iosb, /* iosb */
+ 0, /* ast routine */
+ 0, /* ast param */
+ &p1, /* Buffer (P1) */
+ sizeof (p1), /* Buffer length (P2) */
+ AMD_SETREG, /* IOCTL code (P3) */
+ MAP_MMR2, /* AMD INDIRECT Register (P4) */
+ 0, /* P5 */
+ 0); /* P6 */
+
+ if (!(status & 1))
+ return (status);
+ if (!(iosb[0] & 1))
+ return (iosb[0]);
+ /*
+ * Issue a stop
+ */
+ status = sys$qiow(0, /* efn */
+ so_chan, /* channel */
+ IO$_ACPCONTROL, /* function */
+ iosb, /* I/O status */
+ 0, /* ast routine */
+ 0, /* ast param */
+ 0, /* P1 */
+ 0, /* P2 */
+ AMD_STOP, /* IOCTL function code */
+ 0, /* P4 */
+ 0, /* P5 */
+ 0); /* P6 */
+
+ if (!(status & 1))
+ return (status);
+ if (!(iosb[0] & 1))
+ return (iosb[0]);
+ /*
+ * Issue a read start to begin reading data
+ */
+ status = sys$qiow(0, /* efn */
+ so_chan, /* channel */
+ IO$_ACPCONTROL, /* function */
+ iosb, /* I/O status */
+ 0, /* ast routine */
+ 0, /* ast param */
+ 0, /* P1 */
+ 0, /* P2 */
+ AMD_READSTART, /* IOCTL function code */
+ 0, /* P4 */
+ 0, /* P5 */
+ 0); /* P6 */
+
+ if (!(status & 1))
+ return (status);
+ if (!(iosb[0] & 1))
+ return (iosb[0]);
+ /*
+ * Return success
+ */
+ return (SS$_NORMAL);
+}
+
+/*-
+ * Select the Internal or External Speaker
+ */
+unsigned long int
+AmdSelect(int s)
+{
+ unsigned long int status;
+ unsigned long int iosb[2];
+ int p1;
+
+ /*
+ * Set the MMR2 register to indicate speaker
+ */
+ p1 = s;
+ status = sys$qiow(0, /* efn */
+ so_chan, /* channel */
+ IO$_ACPCONTROL, /* function */
+ iosb, /* iosb */
+ 0, /* ast routine */
+ 0, /* ast param */
+ &p1, /* Buffer (P1) */
+ sizeof (p1), /* Buffer length (P2) */
+ AMD_SETREG, /* IOCTL code (P3) */
+ MAP_MMR2, /* AMD INDIRECT Register (P4) */
+ 0, /* P5 */
+ 0); /* P6 */
+
+ if (!(status & 1))
+ return (status);
+ if (!(iosb[0] & 1))
+ return (iosb[0]);
+
+}
+
+/*-
+ * Write a buffer of sound data to the device
+ */
+unsigned long int
+AmdWrite(char *buffer, int len)
+{
+ unsigned long int status;
+ unsigned long iosb[2] =
+ {0, 0};
+
+ /*
+ * Write the data to the device
+ */
+ status = sys$qiow(0,
+ so_chan,
+ IO$_WRITEVBLK,
+ iosb,
+ 0,
+ 0,
+ buffer, len, 0, 0, 0, 0);
+
+ if (!(status & 1))
+ return (status);
+ /*
+ * Return success
+ */
+ return (SS$_NORMAL);
+}
--- /dev/null
+/*-
+ * Sound file for vms
+ * Jouk Jansen <joukj@alpha.chem.uva.nl> contributed this
+ * which he found at http://axp616.gsi.de:8080/www/vms/mzsw.html
+ */
+
+/** amd.h **/
+
+/*-
+ * AMD access for the SODRIVER
+ */
+
+#ifndef AMD_H
+#define AMD_H 1
+
+/*-
+ * Define the SO Indirect Registers
+ */
+#define MAP_X 0x01
+#define MAP_R 0x02
+#define MAP_GX 0x03
+#define MAP_GR 0x04
+#define MAP_GER 0x05
+#define MAP_SGCR 0x06
+#define MAP_FTGR 0x07
+#define MAP_ATGR 0x08
+#define MAP_MMR1 0x09
+#define MAP_MMR2 0x0A
+#define MAP_PERFORM 0x0B
+#define MUX_MCR1 0x0C
+#define MUX_MCR2 0x0D
+#define MUX_MCR3 0x0E
+#define MUX_MCR4 0x0F
+#define MUX_PERFORM 0x10
+#define INIT_INIT 0x11
+
+/*-
+ * Define SO ACPCONTROL (IOCTL) Subfunctions
+ */
+#define AMD_SETQSIZE 1
+#define AMD_GETQSIZE 2
+#define AMD_GETREG 3
+#define AMD_SETREG 4
+#define AMD_READSTART 5
+#define AMD_STOP 6
+#define AMD_PAUSE 7
+#define AMD_RESUME 8
+#define AMD_READQ 9
+#define AMD_WRITEQ 10
+#define AMD_DEBUG 11
+
+/*-
+ * *** HACK ***
+ *
+ * GER and GR values for Volume Control for the SODRIVER. These values
+ * where determine via FTS (available from PUBLIC.TGV.COM) which allowed
+ * me to see the $QIO[W] calls made to the SODRIVER. How DECsound
+ * actually calculates them is beyond me. This table is index by percentage.
+ * For Example, if you want the volume at 45% then you use the following
+ * values: VolumeTable[44].ger_value and VolumeTable[44].gr_value.
+ *
+ * *** HACK ***
+ */
+
+static struct vtable {
+ unsigned short ger_value;
+ unsigned short gr_value;
+} VolumeTable[] = {
+
+/* GER GR */
+ {
+ 0XAAAA, 0X91F9
+ }, /* 001 % */
+ {
+ 0XAAAA, 0X91F9
+ }, /* 002 % */
+ {
+ 0X9BBB, 0X91F9
+ }, /* 003 % */
+ {
+ 0X9BBB, 0X91F9
+ }, /* 004 % */
+ {
+ 0X79AC, 0X91F9
+ }, /* 005 % */
+ {
+ 0X79AC, 0X91C5
+ }, /* 006 % */
+ {
+ 0X099A, 0X91C5
+ }, /* 007 % */
+ {
+ 0X099A, 0X91C5
+ }, /* 008 % */
+ {
+ 0X4199, 0X91C5
+ }, /* 009 % */
+ {
+ 0X3199, 0X91B6
+ }, /* 010 % */
+ {
+ 0X3199, 0X91B6
+ }, /* 011 % */
+ {
+ 0X9CDE, 0X91B6
+ }, /* 012 % */
+ {
+ 0X9CDE, 0X91B6
+ }, /* 013 % */
+ {
+ 0X9DEF, 0X9212
+ }, /* 014 % */
+ {
+ 0X9DEF, 0X9212
+ }, /* 015 % */
+ {
+ 0X749C, 0X9212
+ }, /* 016 % */
+ {
+ 0X749C, 0X9212
+ }, /* 017 % */
+ {
+ 0X549D, 0X91A4
+ }, /* 018 % */
+ {
+ 0X6AAE, 0X91A4
+ }, /* 019 % */
+ {
+ 0X6AAE, 0X91A4
+ }, /* 020 % */
+ {
+ 0XABCD, 0X91A4
+ }, /* 021 % */
+ {
+ 0XABCD, 0X9222
+ }, /* 022 % */
+ {
+ 0XABDF, 0X9222
+ }, /* 023 % */
+ {
+ 0XABDF, 0X9222
+ }, /* 024 % */
+ {
+ 0X7429, 0X9222
+ }, /* 025 % */
+ {
+ 0X64AB, 0X9232
+ }, /* 026 % */
+ {
+ 0X64AB, 0X9232
+ }, /* 027 % */
+ {
+ 0X6AFF, 0X9232
+ }, /* 028 % */
+ {
+ 0X6AFF, 0X9232
+ }, /* 029 % */
+ {
+ 0X2ABD, 0X9232
+ }, /* 030 % */
+ {
+ 0X2ABD, 0X92FB
+ }, /* 031 % */
+ {
+ 0XBEEF, 0X92FB
+ }, /* 032 % */
+ {
+ 0XBEEF, 0X92FB
+ }, /* 033 % */
+ {
+ 0X5CCE, 0X92FB
+ }, /* 034 % */
+ {
+ 0X75CD, 0X92AA
+ }, /* 035 % */
+ {
+ 0X75CD, 0X92AA
+ }, /* 036 % */
+ {
+ 0X0099, 0X92AA
+ }, /* 037 % */
+ {
+ 0X0099, 0X92AA
+ }, /* 038 % */
+ {
+ 0X554C, 0X9327
+ }, /* 039 % */
+ {
+ 0X554C, 0X9327
+ }, /* 040 % */
+ {
+ 0X43DD, 0X9327
+ }, /* 041 % */
+ {
+ 0X43DD, 0X9327
+ }, /* 042 % */
+ {
+ 0X33DD, 0X93B3
+ }, /* 043 % */
+ {
+ 0X52EF, 0X93B3
+ }, /* 044 % */
+ {
+ 0X52EF, 0X93B3
+ }, /* 045 % */
+ {
+ 0X771B, 0X93B3
+ }, /* 046 % */
+ {
+ 0X771B, 0X94B3
+ }, /* 047 % */
+ {
+ 0X5542, 0X94B3
+ }, /* 048 % */
+ {
+ 0X5542, 0X94B3
+ }, /* 049 % */
+ {
+ 0X41DD, 0X94B3
+ }, /* 050 % */
+ {
+ 0X31DD, 0X9F91
+ }, /* 051 % */
+ {
+ 0X31DD, 0X9F91
+ }, /* 052 % */
+ {
+ 0X441F, 0X9F91
+ }, /* 053 % */
+ {
+ 0X431F, 0X9F91
+ }, /* 054 % */
+ {
+ 0X431F, 0X9CEA
+ }, /* 055 % */
+ {
+ 0X331F, 0X9CEA
+ }, /* 056 % */
+ {
+ 0X331F, 0X9CEA
+ }, /* 057 % */
+ {
+ 0X40DD, 0X9CEA
+ }, /* 058 % */
+ {
+ 0X1100, 0X9BF9
+ }, /* 059 % */
+ {
+ 0X1100, 0X9BF9
+ }, /* 060 % */
+ {
+ 0X440F, 0X9BF9
+ }, /* 061 % */
+ {
+ 0X440F, 0X9BF9
+ }, /* 062 % */
+ {
+ 0X411F, 0X9AAC
+ }, /* 063 % */
+ {
+ 0X411F, 0X9AAC
+ }, /* 064 % */
+ {
+ 0X311F, 0X9AAC
+ }, /* 065 % */
+ {
+ 0X311F, 0X9AAC
+ }, /* 066 % */
+ {
+ 0X5520, 0X9A4A
+ }, /* 067 % */
+ {
+ 0X10DD, 0X9A4A
+ }, /* 068 % */
+ {
+ 0X10DD, 0X9A4A
+ }, /* 069 % */
+ {
+ 0X4211, 0X9A4A
+ }, /* 070 % */
+ {
+ 0X4211, 0XA222
+ }, /* 071 % */
+ {
+ 0X410F, 0XA222
+ }, /* 072 % */
+ {
+ 0X410F, 0XA222
+ }, /* 073 % */
+ {
+ 0X111F, 0XA222
+ }, /* 074 % */
+ {
+ 0X600B, 0XA2A2
+ }, /* 075 % */
+ {
+ 0X600B, 0XA2A2
+ }, /* 076 % */
+ {
+ 0X00DD, 0XA2A2
+ }, /* 077 % */
+ {
+ 0X00DD, 0XA2A2
+ }, /* 078 % */
+ {
+ 0X4210, 0XA2A2
+ }, /* 079 % */
+ {
+ 0X4210, 0XA68D
+ }, /* 080 % */
+ {
+ 0X400F, 0XA68D
+ }, /* 081 % */
+ {
+ 0X400F, 0XA68D
+ }, /* 082 % */
+ {
+ 0X110F, 0XA68D
+ }, /* 083 % */
+ {
+ 0X2210, 0XAAA3
+ }, /* 084 % */
+ {
+ 0X2210, 0XAAA3
+ }, /* 085 % */
+ {
+ 0X7200, 0XAAA3
+ }, /* 086 % */
+ {
+ 0X7200, 0XAAA3
+ }, /* 087 % */
+ {
+ 0X4200, 0XB242
+ }, /* 088 % */
+ {
+ 0X4200, 0XB242
+ }, /* 089 % */
+ {
+ 0X2110, 0XB242
+ }, /* 090 % */
+ {
+ 0X2110, 0XB242
+ }, /* 091 % */
+ {
+ 0X100F, 0XBB52
+ }, /* 092 % */
+ {
+ 0X2200, 0XBB52
+ }, /* 093 % */
+ {
+ 0X2200, 0XBB52
+ }, /* 094 % */
+ {
+ 0X1110, 0XBB52
+ }, /* 095 % */
+ {
+ 0X1110, 0XCB52
+ }, /* 096 % */
+ {
+ 0X000B, 0XCBB2
+ }, /* 097 % */
+ {
+ 0X000B, 0XCBB2
+ }, /* 098 % */
+ {
+ 0X2100, 0XCBB2
+ }, /* 099 % */
+ {
+ 0X000F, 0X0808
+ } /* 100 % */
+};
+
+#define volume_table_size ((unsigned)sizeof(VolumeTable)/(unsigned)sizeof(VolumeTable[0]))
+
+/*-
+ * Constants for Speaker selection
+ */
+#define SO_EXTERNAL 0
+#define SO_INTERNAL 2
+
+/*-
+ * How many bytes of sound / second
+ */
+#define SO_BYTES_PER_SECOND (1024*8)
+
+extern unsigned long int AmdInitialize(char *device, int volume);
+extern unsigned long int AmdSelect(int s);
+extern unsigned long int AmdWrite(char *buffer, int len);
+#endif /* !AMD_H */
--- /dev/null
+1420
+%%
+(She is loud and stubborn; her feet abide not in her house:
+Now is she without, now in the streets, and lieth in wait at every corner.)
+So she caught him, and kissed him, and
+with an impudent face said unto him,
+I have peace offerings with me; this day have I payed my vows.
+%%
+* UNIX is a trademark of AT&T Bell Laboratories.
+%%
+1 bulls, 3 cows.
+%%
+10.0 times 0.1 is hardly ever 1.0.
+%%
+A GOOD name is rather to be chosen than great riches, and
+loving favour rather than silver and gold.
+%%
+A Puritan is someone who is deathly afraid that someone
+somewhere is having fun.
+%%
+A bad compromise is better than a good battle. -- Russian
+proverb
+%%
+A bird in hand is worth two in the bush. -- Cervantes
+%%
+A bird in the bush can't relieve itself in your hand.
+%%
+A brother offended is harder to be won than a strong city:
+and their contentions are like the bars of a castle.
+%%
+A clash of doctrine is not a disaster -- it is an
+opportunity.
+%%
+A conservative is one who is too cowardly to fight and too
+fat to run.
+%%
+A continual dropping in a very rainy day and a contentious
+woman are alike.
+%%
+A divine sentence is in the lips of the king: his mouth
+transgresseth not in judgment.
+%%
+A faithful man shall abound with blessings: but he that
+maketh haste to be rich shall not be innocent.
+%%
+A faithful witness will not lie: but a false witness will
+utter lies.
+%%
+A false balance is abomination to the LORD: but a just
+weight is his delight.
+%%
+A false witness shall not be unpunished, and he that
+speaketh lies shall not escape.
+%%
+A false witness shall not be unpunished, and he that
+speaketh lies shall perish.
+%%
+A fanatic is one who can't change his mind and won't change
+the subject.
+%%
+A fool despiseth his father's instruction: but he that
+regardeth reproof is prudent.
+%%
+A fool hath no delight in understanding, but that his heart
+may discover itself.
+%%
+A fool uttereth all his mind: but a wise man keepeth it in
+till afterwards.
+%%
+A fool's lips enter into contention, and his mouth calleth
+for strokes.
+%%
+A fool's mouth is his destruction, and his lips are the
+snare of his soul.
+%%
+A fool's wrath is presently known: but a prudent man
+covereth shame.
+%%
+A foolish consistency is the hobgoblin of little minds.
+%%
+A foolish son is a grief to his father, and bitterness to
+her that bare him.
+%%
+A foolish son is the calamity of his father: and the
+contentions of a wife are a continual dropping.
+%%
+A foolish woman is clamorous: she is simple, and knoweth
+nothing.
+%%
+A froward man soweth strife: and a whisperer separateth
+chief friends.
+%%
+A gift in secret pacifieth anger: and a reward in the bosom
+strong wrath.
+%%
+A gift is as a precious stone in the eyes of him that hath
+it: whithersoever it turneth, it prospereth.
+%%
+A gift of flowers will soon be made to you.
+%%
+A good man leaveth an inheritance to his children's
+children: and the wealth of the sinner is laid up for the just.
+%%
+A good man obtaineth favour of the LORD: but a man of
+wicked devices will he condemn.
+%%
+A good memory does not equal pale ink.
+%%
+A gracious woman retaineth honour: and strong men retain
+riches.
+%%
+A great empire, like a great cake, is most easily
+diminished at the edges.
+%%
+A hammer sometimes misses its mark -- a bouquet never.
+%%
+A handful of friends is worth more than a wagon of gold.
+%%
+A hen is only an egg's way of making another egg.
+%%
+A hermit is a deserter from the army of humanity.
+%%
+A journey of a thousand miles begins with a cash advance.
+%%
+A just weight and balance are the LORD's: all the weights
+of the bag are his work.
+%%
+A king that sitteth in the throne of judgment scattereth
+away all evil with his eyes.
+%%
+A king's castle is his home.
+%%
+A lack of leadership is no substitute for inaction.
+%%
+A liberal is someone too poor to be a capitalist and too
+rich to be a communist.
+%%
+A lying tongue hateth those that are afflicted by it; and a
+flattering mouth worketh ruin.
+%%
+A man forgives only when he is in the wrong.
+%%
+A man hath joy by the answer of his mouth: and a word
+spoken in due season, how good is it! The way of life is above
+to the wise, that he may depart from hell beneath.
+%%
+A man of genius makes no mistakes. His errors are
+volitional and are the portals of discovery.
+%%
+A man of great wrath shall suffer punishment: for if thou
+deliver him, yet thou must do it again.
+%%
+A man paints with his brains and not with his hands.
+%%
+A man shall be commended according to his wisdom: but he
+that is of a perverse heart shall be despised.
+%%
+A man shall be satisfied with good by the fruit of his
+mouth: and the recompence of a man's hands shall be rendered
+unto him.
+%%
+A man shall eat good by the fruit of his mouth: but the
+soul of the transgressors shall eat violence.
+%%
+A man shall not be established by wickedness: but the root
+of the righteous shall not be moved.
+%%
+A man that beareth false witness against his neighbour is a
+maul, and a sword, and a sharp arrow.
+%%
+A man that doeth violence to the blood of any person shall
+flee to the pit; let no man stay him.
+%%
+A man that flattereth his neighbour spreadeth a net for his
+feet.
+%%
+A man that hath friends must shew himself friendly: and
+there is a friend that sticketh closer than a brother.
+%%
+A man void of understanding striketh hands, and becometh
+surety in the presence of his friend.
+%%
+A man who fishes for marlin in ponds will put his money in
+Etruscan bonds.
+%%
+A man who turns green has eschewed protein.
+%%
+A man's belly shall be satisfied with the fruit of his
+mouth; and with the increase of his lips shall he be filled.
+%%
+A man's gift maketh room for him, and bringeth him before
+great men.
+%%
+A man's heart deviseth his way: but the LORD directeth his
+steps.
+%%
+A man's pride shall bring him low: but honour shall uphold
+the humble in spirit.
+%%
+A merry heart doeth good like a medicine: but a broken
+spirit drieth the bones.
+%%
+A merry heart maketh a cheerful countenance: but by sorrow
+of the heart the spirit is broken.
+%%
+A naughty person, a wicked man, walketh with a froward
+mouth.
+%%
+A plucked goose doesn't lay golden eggs.
+%%
+A poor man that oppresseth the poor is like a sweeping rain
+which leaveth no food.
+%%
+A professor is one who talks in someone else's sleep.
+%%
+A programming language is low-level when its programs
+require attention to the irrelevant.
+%%
+A programming language that does not affect the way you
+think about programming is not worth knowing.
+%%
+A prudent man concealeth knowledge: but the heart of fools
+proclaimeth foolishness.
+%%
+A prudent man foreseeth the evil, and hideth himself: but
+the simple pass on, and are punished.
+%%
+A prudent man foreseeth the evil, and hideth himself; but
+the simple pass on, and are punished.
+%%
+A reproof entereth more into a wise man than an hundred
+stripes into a fool.
+%%
+A righteous man falling down before the wicked is as a
+troubled fountain, and a corrupt spring.
+%%
+A righteous man hateth lying: but a wicked man is
+loathsome, and cometh to shame.
+%%
+A righteous man regardeth the life of his beast: but the
+tender mercies of the wicked are cruel.
+%%
+A scorner seeketh wisdom, and findeth it not: but knowledge
+is easy unto him that understandeth.
+%%
+A servant will not be corrected by words: for though he
+understand he will not answer.
+%%
+A slothful man hideth his hand in his bosom, and will not
+so much as bring it to his mouth again.
+%%
+A soft answer turneth away wrath: but grievous words stir
+up anger.
+%%
+A soft drink turneth away company.
+%%
+A sound heart is the life of the flesh: but envy the
+rottenness of the bones.
+%%
+A stone is heavy, and the sand weighty; but a fool's wrath
+is heavier than them both.
+%%
+A straw vote only shows which way the hot air blows.
+%%
+A talebearer revealeth secrets: but he that is of a
+faithful spirit concealeth the matter.
+%%
+A thing not worth doing is worth not doing well.
+%%
+A thing worth doing is worth the trouble of asking somebody
+else to do.
+%%
+A true witness delivereth souls: but a deceitful witness
+speaketh lies.
+%%
+A truly wise man never plays leapfrog with a Unicorn.
+%%
+A violent man enticeth his neighbour, and leadeth him into
+the way that is not good.
+%%
+A virtuous woman is a crown to her husband: but she that
+maketh ashamed is as rottenness in his bones.
+%%
+A visit to a fresh place will bring strange work.
+%%
+A visit to a strange place will bring fresh work.
+%%
+A whip for the horse, a bridle for the ass, and a rod for
+the fool's back.
+%%
+A wholesome tongue is a tree of life: but perverseness
+therein is a breach in the spirit.
+%%
+A wicked doer giveth heed to false lips; and a liar giveth
+ear to a naughty tongue.
+%%
+A wicked man hardeneth his face: but as for the upright, he
+directeth his way.
+%%
+A wicked man taketh a gift out of the bosom to pervert the
+ways of judgment.
+%%
+A wicked messenger falleth into mischief: but a faithful
+ambassador is health.
+%%
+A wise king scattereth the wicked, and bringeth the wheel
+over them.
+%%
+A wise man feareth, and departeth from evil: but the fool
+rageth, and is confident.
+%%
+A wise man is strong; yea, a man of knowledge increaseth
+strength.
+%%
+A wise man scaleth the city of the mighty, and casteth down
+the strength of the confidence thereof.
+%%
+A wise man will hear, and will increase learning; and a man
+of understanding shall attain unto wise counsels: To
+understand a proverb, and the interpretation; the words of the
+wise, and their dark sayings.
+%%
+A wise servant shall have rule over a son that causeth
+shame, and shall have part of the inheritance among the
+brethren.
+%%
+A wise son heareth his father's instruction: but a scorner
+heareth not rebuke.
+%%
+A wise son maketh a glad father: but a foolish man
+despiseth his mother.
+%%
+A woman without a man is like a fish without a bicycle.
+%%
+A word fitly spoken is like apples of gold in pictures of
+silver.
+%%
+A wound and dishonour shall he get; and his reproach shall
+not be wiped away.
+%%
+A wrathful man stirreth up strife: but he that is slow to
+anger appeaseth strife.
+%%
+About all some men accomplish in life is to send a son to
+Harvard.
+%%
+About the only thing on a farm that has an easy time is the
+dog.
+%%
+Above all things, reverence yourself.
+%%
+Absence makes the heart grow fonder. -- Sextus Aurelius
+%%
+Absolute power corrupts absolutely.
+%%
+Academy: A modern school where football is taught.
+%%
+Accuse not a servant unto his master, lest he curse thee,
+and thou be found guilty.
+%%
+Actors will happen in the best-regulated families.
+%%
+Add thou not unto his words, lest he reprove thee, and thou
+be found a liar.
+%%
+Admiration: Our polite recognition of another's resemblance
+to ourselves.
+%%
+After a number of decimal places, nobody gives a darn.
+%%
+Age and treachery will always overcome youth and skill.
+%%
+Alimony and bribes will engage a large share of your wealth.
+%%
+All great ideas are controversial, or have been at one time.
+%%
+All heiresses are beautiful. -- John Dryden
+%%
+All in all, it's just another brick in the wall ...
+%%
+All that glitters has a high refractive index.
+%%
+All that trembles doesn't fall. -- Russian proverb
+%%
+All the brave men are in prison. -- Russian proverb
+%%
+All the brethren of the poor do hate him: how much more do
+his friends go far from him? he pursueth them with words,
+yet they are wanting to him.
+%%
+All the days of the afflicted are evil: but he that is of a
+merry heart hath a continual feast.
+%%
+All the ways of a man are clean in his own eyes; but the
+LORD weigheth the spirits.
+%%
+All the words of my mouth are in righteousness; there is
+nothing froward or perverse in them.
+%%
+All this wheeling and dealing around, why, it isn't for
+money, it's for fun. Money's just the way we keep score.
+%%
+Also to punish the just is not good, nor to strike princes
+for equity.
+%%
+Also, that the soul be without knowledge, it is not good;
+and he that hasteth with his feet sinneth.
+%%
+Always do right. This will gratify some people, and
+astonish the rest.
+%%
+America's best buy for a dime is a telephone call to the
+right person.
+%%
+An angry man stirreth up strife, and a furious man
+aboundeth in transgression.
+%%
+An evil man seeketh only rebellion: therefore a cruel
+messenger shall be sent against him.
+%%
+An expert is a person who avoids the small errors as he
+sweeps on to the grand fallacy.
+%%
+An eye for an eye, a tooth for a tooth.
+%%
+An high look, and a proud heart, and the plowing of the
+wicked, is sin.
+%%
+An hypocrite with his mouth destroyeth his neighbour: but
+through knowledge shall the just be delivered.
+%%
+An idle mind is worth two in the bush.
+%%
+An inheritance may be gotten hastily at the beginning; but
+the end thereof shall not be blessed.
+%%
+An optimist believes this to be the best of all possible
+worlds. A pessimist fears this to be true.
+%%
+An ungodly man diggeth up evil: and in his lips there is as
+a burning fire.
+%%
+An ungodly witness scorneth judgment: and the mouth of the
+wicked devoureth iniquity.
+%%
+An unjust man is an abomination to the just: and he that is
+upright in the way is abomination to the wicked.
+%%
+And they lay wait for their own blood; they lurk privily
+for their own lives.
+%%
+And thou shalt have goats' milk enough for thy food, for
+the food of thy household, and for the maintenance for thy
+maidens.
+%%
+And why wilt thou, my son, be ravished with a strange
+woman, and embrace the bosom of a stranger? For the ways of man
+are before the eyes of the LORD, and he pondereth all his goings.
+%%
+Answer a fool according to his folly, lest he be wise in
+his own conceit.
+%%
+Answer not a fool according to his folly, lest thou also be
+like unto him.
+%%
+Anticipated events never live up to expectations.
+%%
+Any fool can paint a picture, but it takes a wise man to be
+able to sell it.
+%%
+Anybody can win, unless there happens to be a second entry.
+%%
+Apply thine heart unto instruction, and thine ears to the
+words of knowledge.
+%%
+As a bird that wandereth from her nest, so is a man that
+wandereth from his place.
+%%
+As a dog returneth to his vomit, so a fool returneth to his
+folly.
+%%
+As a jewel of gold in a swine's snout, so is a fair woman
+which is without discretion.
+%%
+As a mad man who casteth firebrands, arrows, and death, So
+is the man that deceiveth his neighbour, and saith, Am not
+I in sport? Where no wood is, there the fire goeth out: so
+where there is no talebearer, the strife ceaseth.
+%%
+As a roaring lion, and a ranging bear; so is a wicked ruler
+over the poor people.
+%%
+As a thorn goeth up into the hand of a drunkard, so is a
+parable in the mouths of fools.
+%%
+As an earring of gold, and an ornament of fine gold, so is
+a wise reprover upon an obedient ear.
+%%
+As coals are to burning coals, and wood to fire; so is a
+contentious man to kindle strife.
+%%
+As cold waters to a thirsty soul, so is good news from a
+far country.
+%%
+As goatherd learns his trade by goat, so writer learns his
+trade by wrote.
+%%
+As he that bindeth a stone in a sling, so is he that giveth
+honour to a fool.
+%%
+As he that taketh away a garment in cold weather, and as
+vinegar upon nitre, so is he that singeth songs to an heavy
+heart.
+%%
+As in water face answereth to face, so the heart of man to
+man.
+%%
+As long as the answer is right, who cares if the question
+is wrong?
+%%
+As of next week, passwords will be entered in Morse code.
+%%
+As righteousness tendeth to life: so he that pursueth evil
+pursueth it to his own death.
+%%
+As snow in summer, and as rain in harvest, so honour is not
+seemly for a fool.
+%%
+As the bird by wandering, as the swallow by flying, so the
+curse causeless shall not come.
+%%
+As the cold of snow in the time of harvest, so is a
+faithful messenger to them that send him: for he refresheth the
+soul of his masters.
+%%
+As the door turneth upon his hinges, so doth the slothful
+upon his bed.
+%%
+As the fining pot for silver, and the furnace for gold; so
+is a man to his praise.
+%%
+As the whirlwind passeth, so is the wicked no more: but the
+righteous is an everlasting foundation.
+%%
+As vinegar to the teeth, and as smoke to the eyes, so is
+the sluggard to them that send him.
+%%
+At the last it biteth like a serpent, and stingeth like an adder.
+%%
+Audacity, and again audacity, and always audacity.
+-- Georges Jacques Danton
+%%
+Avoid GOTOs completely if you can keep the program readable.
+%%
+Avoid it, pass not by it, turn from it, and pass away.
+%%
+Avoid temporary variables.
+%%
+Avoid the Fortran arithmetic IF.
+%%
+Avoid unnecessary branches.
+%%
+Be careful when a loop exits to the same place from side
+and bottom.
+%%
+Be careful! Is it classified?
+%%
+Be friends with the wolf, but keep one hand on your ax. --
+Russian proverb
+%%
+Be not a witness against thy neighbour without cause; and
+deceive not with thy lips.
+%%
+Be not afraid of sudden fear, neither of the desolation of
+the wicked, when it cometh.
+%%
+Be not among winebibbers; among riotous eaters of flesh:
+For the drunkard and the glutton shall come to poverty: and
+drowsiness shall clothe a man with rags.
+%%
+Be not desirous of his dainties: for they are deceitful meat.
+%%
+Be not thou envious against evil men, neither desire to be
+with them.
+%%
+Be not thou one of them that strike hands, or of them that
+are sureties for debts.
+%%
+Be not wise in thine own eyes: fear the LORD, and depart
+from evil.
+%%
+Be prepared to go mad with fixed rule and method. -- Horace
+%%
+Be security conscious -- National Defense is at stake.
+%%
+Be thou diligent to know the state of thy flocks, and look
+well to thy herds.
+%%
+Because I have called, and ye refused; I have stretched out
+my hand, and no man regarded; But ye have set at nought
+all my counsel, and would none of my reproof: I also will
+laugh at your calamity; I will mock when your fear cometh;
+When your fear cometh as desolation, and your destruction
+cometh as a whirlwind; when distress and anguish cometh upon you.
+%%
+Before a fight, two men are boasting; after the fight, only
+one. -- Russian proverb
+%%
+Before destruction the heart of man is haughty, and before
+honour is humility.
+%%
+Before the mountains were settled, before the hills was I
+brought forth: While as yet he had not made the earth, nor
+the fields, nor the highest part of the dust of the world.
+%%
+Begin in the beginning and go on till you come to the end;
+then stop. -- Lewis Carroll
+%%
+Behold, the righteous shall be recompensed in the earth:
+much more the wicked and the sinner.
+%%
+Better is a dinner of herbs where love is, than a stalled
+ox and hatred therewith.
+%%
+Better is a dry morsel, and quietness therewith, than an
+house full of sacrifices with strife.
+%%
+Better is a little with righteousness than great revenues
+without right.
+%%
+Better is little with the fear of the LORD than great
+treasure and trouble therewith.
+%%
+Better is the poor that walketh in his integrity, than he
+that is perverse in his lips, and is a fool.
+%%
+Better is the poor that walketh in his uprightness, than he
+that is perverse in his ways, though he be rich.
+%%
+Better it is to be of an humble spirit with the lowly, than
+to divide the spoil with the proud.
+%%
+Better living a beggar than buried an emperor.
+%%
+Better the first quarrel than the last. -- Russian proverb
+%%
+Better to light one candle than to curse the darkness.
+%%
+Better turn back than lose your way. -- Russian proverb
+%%
+Beware of Greeks bearing gifts. -- Virgil
+%%
+Beware of a dark-haired man with a loud tie.
+%%
+Beware of a tall dark man with a spoon up his nose.
+%%
+Beware of all enterprises that require new clothes.
+%%
+Beware the new TTY code!
+%%
+Bind them upon thy fingers, write them upon the table of
+thine heart.
+%%
+Blessed are they that run around in circles, for they shall
+be known as wheels.
+%%
+Blessed is the man that heareth me, watching daily at my
+gates, waiting at the posts of my doors.
+%%
+Blessings are upon the head of the just: but violence
+covereth the mouth of the wicked.
+%%
+Boast not thyself of to morrow; for thou knowest not what a
+day may bring forth.
+%%
+Bow down thine ear, and hear the words of the wise, and
+apply thine heart unto my knowledge.
+%%
+Brain fried --
+core dumped
+%%
+Bread of deceit is sweet to a man; but afterwards his mouth
+shall be filled with gravel.
+%%
+Bullets don't respect uniforms.
+-- Russian proverb
+%%
+Burning lips and a wicked heart are like a potsherd covered
+with silver dross.
+%%
+Business will be either better or worse. -- Calvin Coolidge
+%%
+But he knoweth not that the dead are there; and that her
+guests are in the depths of hell.
+%%
+But he that sinneth against me wrongeth his own soul: all
+they that hate me love death.
+%%
+But the path of the just is as the shining light, that
+shineth more and more unto the perfect day.
+%%
+But the wicked shall be cut off from the earth, and the
+transgressors shall be rooted out of it.
+%%
+But whoso committeth adultery with a woman lacketh
+understanding: he that doeth it destroyeth his own soul.
+%%
+But whoso hearkeneth unto me shall dwell safely, and shall
+be quiet from fear of evil.
+%%
+Buy the truth, and sell it not; also wisdom, and
+instruction, and understanding.
+%%
+By failing to prepare, you are preparing to fail.
+%%
+By his knowledge the depths are broken up, and the clouds
+drop down the dew.
+%%
+By humility and the fear of the LORD are riches, and
+honour, and life.
+%%
+By long forbearing is a prince persuaded, and a soft tongue
+breaketh the bone.
+%%
+By me kings reign, and princes decree justice.
+%%
+By me princes rule, and nobles, even all the judges of the
+earth.
+%%
+By mercy and truth iniquity is purged: and by the fear of
+the LORD men depart from evil.
+%%
+By the blessing of the upright the city is exalted: but it
+is overthrown by the mouth of the wicked.
+%%
+Can a man take fire in his bosom, and his clothes not be
+burned? Can one go upon hot coals, and his feet not be
+burned? So he that goeth in to his neighbour's wife; whosoever
+toucheth her shall not be innocent.
+%%
+Can anyone remember when the times were not hard, and money
+not scarce?
+%%
+Can anything be sadder than work left unfinished? Yes,
+work never begun.
+%%
+Cannot open /usr/games/lib/fortunes.
+%%
+Cast out the scorner, and contention shall go out; yea,
+strife and reproach shall cease.
+%%
+Cease, my son, to hear the instruction that causeth to err
+from the words of knowledge.
+%%
+Change your thoughts and you change your world.
+%%
+Charity: A thing that begins at home and usually stays
+there.
+%%
+Chasten thy son while there is hope, and let not thy soul
+spare for his crying.
+%%
+Children's children are the crown of old men; and the glory
+of children are their fathers.
+%%
+Chinese saying: He who speak with forked tongue, not need
+chopsticks.
+%%
+Choose variable names that won't be confused.
+%%
+Civilization is the limitless multiplication of unnecessary
+necessities.
+%%
+Classified material requires proper storage.
+%%
+Colorless green ideas sleep furiously.
+%%
+Come, let us take our fill of love until the morning: let
+us solace ourselves with loves.
+%%
+Commit thy works unto the LORD, and thy thoughts shall be
+established.
+%%
+Common sense is not so common.
+%%
+Complaint is the largest tribute heaven receives, and the
+sincerest part of our devotion.
+%%
+Confidence in an unfaithful man in time of trouble is like
+a broken tooth, and a foot out of joint.
+%%
+Conscience doth make cowards of us all. -- William
+Shakespeare
+%%
+Continental Life. Why do you ask?
+%%
+Correct thy son, and he shall give thee rest; yea, he shall
+give delight unto thy soul.
+%%
+Correction is grievous unto him that forsaketh the way: and
+he that hateth reproof shall die.
+%%
+Could John Wayne have ever taken Normandy, Iwo Jima, Korea,
+the Gulf of Tonkin, and the entire Wild West on a diet of
+quiche and salad?
+%%
+Counsel in the heart of man is like deep water; but a man
+of understanding will draw it out.
+%%
+Counsel is mine, and sound wisdom: I am understanding; I
+have strength.
+%%
+Courage is grace under pressure.
+%%
+Courage is your greatest present need.
+%%
+Creditors have much better memories than debtors.
+%%
+Culture is the habit of being pleased with the best and
+knowing why.
+%%
+Death and life are in the power of the tongue: and they
+that love it shall eat the fruit thereof.
+%%
+Death: To stop sinning suddenly.
+%%
+Debate thy cause with thy neighbour himself; and discover
+not a secret to another: Lest he that heareth it put thee to
+shame, and thine infamy turn not away.
+%%
+Deceit is in the heart of them that imagine evil: but to
+the counsellors of peace is joy.
+%%
+Delight is not seemly for a fool; much less for a servant
+to have rule over princes.
+%%
+Deliver thyself as a roe from the hand of the hunter, and
+as a bird from the hand of the fowler.
+%%
+Democracy is the recurrent suspicion that more than half of
+the people are right more than half of the time.
+%%
+Depression is merely anger without the enthusiasm.
+%%
+Deprive a mirror of its silver and even the Czar won't see
+his face.
+%%
+Devise not evil against thy neighbour, seeing he dwelleth
+securely by thee.
+%%
+Disclose classified information only when a NEED TO KNOW
+exists.
+%%
+Discretion is the better part of valor. -- William
+Shakespeare
+%%
+Disk crunch -- please clean up.
+%%
+Divers weights are an abomination unto the LORD; and a
+false balance is not good.
+%%
+Do not clog intellect's sluices with bits of knowledge of
+questionable uses.
+%%
+Do not merely believe in miracles, rely on them.
+%%
+Do not take life too seriously: you will never get out of
+it alive.
+%%
+Do not underestimate the power of the Force.
+%%
+Do they not err that devise evil? but mercy and truth shall
+be to them that devise good.
+%%
+Do this now, my son, and deliver thyself, when thou art
+come into the hand of thy friend; go, humble thyself, and make
+sure thy friend.
+%%
+Do you always believe what a computer tells you?
+%%
+Do you really want to know what I think of you?
+%%
+Dogs do not dislike poor families.
+%%
+Don't be humble, you're not that great.
+%%
+Don't comment bad code -- rewrite it.
+%%
+Don't compare floating point numbers solely for equality.
+%%
+Don't despair -- your ideal lover is waiting for you around
+the corner.
+%%
+Don't diddle code to make it faster -- find a better
+algorithm.
+%%
+Don't drive your horse with a whip -- use the oat bag. --
+Russian proverb
+%%
+Don't force it, use a bigger hammer.
+%%
+Don't get stuck in a closet -- wear yourself out.
+%%
+Don't hit the keys so hard, it hurts.
+%%
+Don't look now, but the man in the moon is laughing at you.
+%%
+Don't look now, but there is a multi-legged creature on
+your shoulder.
+%%
+Don't patch bad code -- rewrite it.
+%%
+Don't quit now, we might just as well lock the door and
+throw away the key.
+%%
+Don't stop at one bug.
+%%
+Don't tell me what you dreamt last night for I've been
+reading Freud.
+%%
+Doth not wisdom cry? and understanding put forth her voice?
+She standeth in the top of high places, by the way in the
+places of the paths.
+%%
+Drawing on my fine command of language, I said nothing.
+%%
+Drink waters out of thine own cistern, and running waters
+out of thine own well.
+%%
+Drugs are for people who can't handle reality.
+%%
+Due to lack of interest, today has been cancelled.
+%%
+Due to popular demand, you have been awarded the day off.
+%%
+Eat thou not the bread of him that hath an evil eye,
+neither desire thou his dainty meats: For as he thinketh in his
+heart, so is he: Eat and drink, saith he to thee; but his
+heart is not with thee.
+%%
+Education helps earning capacity. Ask any college
+professor.
+%%
+Enter not into the path of the wicked, and go not in the
+way of evil men.
+%%
+Envy thou not the oppressor, and choose none of his ways.
+%%
+Eternal nothingness is fine if you're dressed for it.
+%%
+Even a cabbage may look at a king.
+%%
+Even a child is known by his doings, whether his work be
+pure, and whether it be right.
+%%
+Even a fool, when he holdeth his peace, is counted wise:
+and he that shutteth his lips is esteemed a man of
+understanding.
+%%
+Even a hawk is an eagle among crows.
+%%
+Even in laughter the heart is sorrowful; and the end of
+that mirth is heaviness.
+%%
+Even the boldest zebra fears the hungry lion.
+%%
+Even the smallest candle burns brighter in the dark.
+%%
+Every absurdity has a champion to defend it.
+%%
+Every creature has within itself the wild, uncontrollable
+urge to punt.
+%%
+Every generation laughs at old fashions, but follows
+religiously the new.
+%%
+Every man shall kiss his lips that giveth a right answer.
+%%
+Every nation has the government it deserves.
+%%
+Every one that is proud in heart is an abomination to the
+LORD: though hand join in hand, he shall not be unpunished.
+%%
+Every program has (at least) two purposes: the one for
+which it was built, and another for which it wasn't.
+%%
+Every program is a part of some other program and rarely
+fits.
+%%
+Every prudent man dealeth with knowledge: but a fool layeth
+open his folly.
+%%
+Every purchase has its price.
+%%
+Every purpose is established by counsel: and with good
+advice make war.
+%%
+Every silver lining has a cloud inside it.
+%%
+Every way of a man is right in his own eyes: but the LORD
+pondereth the hearts.
+%%
+Every wise woman buildeth her house: but the foolish
+plucketh it down with her hands.
+%%
+Everybody needs a little love sometime; stop hacking and
+fall in love!
+%%
+Everybody ought to have a friend.
+%%
+Everyone is enthusiastic about your work.
+%%
+Everyone needs to believe in something; I believe I'll have
+another beer.
+%%
+Everything should be built top-down, except the first time.
+%%
+Everything should be made as simple as possible, but no
+simpler.
+%%
+Everything you know is wrong!
+%%
+Evil men understand not judgment: but they that seek the
+LORD understand all things.
+%%
+Evil pursueth sinners: but to the righteous good shall be
+repayed.
+%%
+Exalt her, and she shall promote thee: she shall bring thee
+to honour, when thou dost embrace her.
+%%
+Excellent speech becometh not a fool: much less do lying
+lips a prince.
+%%
+Facts do not cease to exist because they are ignored.
+%%
+Failure is more frequently from want of energy than want of
+capital.
+%%
+Faithful are the wounds of a friend; but the kisses of an
+enemy are deceitful.
+%%
+Far duller than a serpent's tooth it is to spend a quiet
+youth.
+%%
+Favour is deceitful, and beauty is vain: but a woman that
+feareth the LORD, she shall be praised.
+%%
+Fear has big eyes. -- Russian proverb
+%%
+Fidelity: A virtue peculiar to those who are about to be
+betrayed.
+%%
+Finagle's Law: The perversity of the universe tends toward
+a maximum.
+%%
+Flee at once, all is discovered.
+%%
+Folly is joy to him that is destitute of wisdom: but a man
+of understanding walketh uprightly.
+%%
+Foolishness is bound in the heart of a child; but the rod
+of correction shall drive it far from him.
+%%
+Fools ignore complexity. Pragmatists suffer it. Geniuses
+remove it.
+%%
+Fools make a mock at sin: but among the righteous there is
+favour.
+%%
+Fools rush in where angels fear to tread. -- Alexander Pope
+%%
+Fools shoot, but God directs the bullets. -- Russian
+proverb
+%%
+For I give you good doctrine, forsake ye not my law.
+%%
+For I was my father's son, tender and only beloved in the
+sight of my mother.
+%%
+For a whore is a deep ditch; and a strange woman is a
+narrow pit.
+%%
+For at the window of my house I looked through my casement,
+And beheld among the simple ones, I discerned among the
+youths, a young man void of understanding, Passing through
+the street near her corner; and he went the way to her house,
+In the twilight, in the evening, in the black and dark
+night: And, behold, there met him a woman with the attire of
+an harlot, and subtil of heart.
+%%
+For by me thy days shall be multiplied, and the years of
+thy life shall be increased.
+%%
+For by means of a whorish woman a man is brought to a piece
+of bread: and the adultress will hunt for the precious
+life.
+%%
+For by wise counsel thou shalt make thy war: and in
+multitude of counsellors there is safety.
+%%
+For her house inclineth unto death, and her paths unto the
+dead.
+%%
+For it is a pleasant thing if thou keep them within thee;
+they shall withal be fitted in thy lips.
+%%
+For jealousy is the rage of a man: therefore he will not
+spare in the day of vengeance.
+%%
+For my mouth shall speak truth; and wickedness is an
+abomination to my lips.
+%%
+For riches are not for ever: and doth the crown endure to
+every generation? The hay appeareth, and the tender grass
+sheweth itself, and herbs of the mountains are gathered.
+%%
+For she hath cast down many wounded: yea, many strong men
+have been slain by her.
+%%
+For she sitteth at the door of her house, on a seat in the
+high places of the city, To call passengers who go right on
+their ways: Whoso is simple, let him turn in hither: and
+as for him that wanteth understanding, she saith to him,
+Stolen waters are sweet, and bread eaten in secret is pleasant.
+%%
+For surely there is an end; and thine expectation shall not
+be cut off.
+%%
+For the LORD giveth wisdom: out of his mouth cometh
+knowledge and understanding.
+%%
+For the LORD shall be thy confidence, and shall keep thy
+foot from being taken.
+%%
+For the commandment is a lamp; and the law is light; and
+reproofs of instruction are the way of life: To keep thee
+from the evil woman, from the flattery of the tongue of a
+strange woman.
+%%
+For the froward is abomination to the LORD: but his secret
+is with the righteous.
+%%
+For the goodman is not at home, he is gone a long journey:
+He hath taken a bag of money with him, and will come home
+at the day appointed.
+%%
+For the lips of a strange woman drop as an honeycomb, and
+her mouth is smoother than oil: But her end is bitter as
+wormwood, sharp as a two-edged sword.
+%%
+For the merchandise of it is better than the merchandise of
+silver, and the gain thereof than fine gold.
+%%
+For the transgression of a land many are the princes
+thereof: but by a man of understanding and knowledge the state
+thereof shall be prolonged.
+%%
+For the turning away of the simple shall slay them, and the
+prosperity of fools shall destroy them.
+%%
+For the upright shall dwell in the land, and the perfect
+shall remain in it.
+%%
+For their heart studieth destruction, and their lips talk
+of mischief.
+%%
+For they are life unto those that find them, and health to
+all their flesh.
+%%
+For they eat the bread of wickedness, and drink the wine of
+violence.
+%%
+For they sleep not, except they have done mischief; and
+their sleep is taken away, unless they cause some to fall.
+%%
+For three things the earth is disquieted, and for four
+which it cannot bear: For a servant when he reigneth; and a
+fool when he is filled with meat; For an odious woman when she
+is married; and an handmaid that is heir to her mistress.
+%%
+For whoso findeth me findeth life, and shall obtain favour
+of the LORD.
+%%
+For wisdom is better than rubies; and all the things that
+may be desired are not to be compared to it.
+%%
+Forgive and forget. -- Cervantes
+%%
+Forsake her not, and she shall preserve thee: love her, and
+she shall keep thee.
+%%
+Forsake the foolish, and live; and go in the way of
+understanding.
+%%
+Fret not thyself because of evil men, neither be thou
+envious at the wicked: For there shall be no reward to the evil
+man; the candle of the wicked shall be put out.
+%%
+Friends: People who borrow my books and set wet glasses on
+them.
+%%
+General notions are generally wrong.
+%%
+Genius is the talent of a man who is dead.
+%%
+Get wisdom, get understanding: forget it not; neither
+decline from the words of my mouth.
+%%
+Give her of the fruit of her hands; and let her own works
+praise her in the gates.
+%%
+Give instruction to a wise man, and he will be yet wiser:
+teach a just man, and he will increase in learning.
+%%
+Give not sleep to thine eyes, nor slumber to thine eyelids.
+%%
+Give strong drink unto him that is ready to perish, and
+wine unto those that be of heavy hearts.
+%%
+Go directly to jail. Do not pass Go, do not collect $200.
+%%
+Go from the presence of a foolish man, when thou perceivest
+not in him the lips of knowledge.
+%%
+Go not forth hastily to strive, lest thou know not what to
+do in the end thereof, when thy neighbour hath put thee to
+shame.
+%%
+Go to the ant, thou sluggard; consider her ways, and be
+wise: Which having no guide, overseer, or ruler, Provideth her
+meat in the summer, and gathereth her food in the harvest.
+%%
+God does not play dice.
+%%
+God gave us two ears and one tongue so that we may listen
+twice as much as we speak.
+%%
+God helps them that help themselves. -- Benjamin Franklin
+%%
+God is not dead; He is only swapped out.
+%%
+God made the integers; all else is the work of Man.
+%%
+God may be subtle, but He isn't plain mean.
+%%
+God must love the common man: He made so many of them.
+%%
+Good intentions are far more difficult to cope with than
+malicious behavior.
+%%
+Good intentions randomize behavior.
+%%
+Good understanding giveth favour: but the way of
+transgressors is hard.
+%%
+Great is Holy Russia, but the sun shines elsewhere, too. --
+Old Russian proverb
+%%
+Great spirits have always encountered violent opposition
+from mediocre minds.
+%%
+Greatness is a transitory experience. It is never
+consistent.
+%%
+Hackers of the world, unite!
+%%
+Happiness adds and multiplies as we divide it with others.
+%%
+Happy is the man that feareth alway: but he that hardeneth
+his heart shall fall into mischief.
+%%
+Happy is the man that findeth wisdom, and the man that
+getteth understanding.
+%%
+Hast thou found honey? eat so much as is sufficient for
+thee, lest thou be filled therewith, and vomit it.
+%%
+Haste makes waste.
+%%
+Hatred stirreth up strifes: but love covereth all sins.
+%%
+Have not I written to thee excellent things in counsels and
+knowledge, That I might make thee know the certainty of
+the words of truth; that thou mightest answer the words of
+truth to them that send unto thee? Rob not the poor, because
+he is poor: neither oppress the afflicted in the gate: For
+the LORD will plead their cause, and spoil the soul of
+those that spoiled them.
+%%
+Have you locked your file cabinet?
+%%
+He also that is slothful in his work is brother to him that
+is a great waster.
+%%
+He becometh poor that dealeth with a slack hand: but the
+hand of the diligent maketh rich.
+%%
+He coveteth greedily all the day long: but the righteous
+giveth and spareth not.
+%%
+He goeth after her straightway, as an ox goeth to the
+slaughter, or as a fool to the correction of the stocks; Till a
+dart strike through his liver; as a bird hasteth to the
+snare, and knoweth not that it is for his life.
+%%
+He is considered the most graceful speaker who can say
+nothing in most words.
+%%
+He is in the way of life that keepeth instruction: but he
+that refuseth reproof erreth.
+%%
+He is truly wise who gains wisdom from another's mishap.
+%%
+He keepeth the paths of judgment, and preserveth the way of
+his saints.
+%%
+He layeth up sound wisdom for the righteous: he is a
+buckler to them that walk uprightly.
+%%
+He looked at me as if I was a side dish he hadn't ordered.
+%%
+He loveth transgression that loveth strife: and he that
+exalteth his gate seeketh destruction.
+%%
+He shall die without instruction; and in the greatness of
+his folly he shall go astray.
+%%
+He shutteth his eyes to devise froward things: moving his
+lips he bringeth evil to pass.
+%%
+He taught me also, and said unto me, Let thine heart retain
+my words: keep my commandments, and live.
+%%
+He that answereth a matter before he heareth it, it is
+folly and shame unto him.
+%%
+He that begetteth a fool doeth it to his sorrow: and the
+father of a fool hath no joy.
+%%
+He that blesseth his friend with a loud voice, rising early
+in the morning, it shall be counted a curse to him.
+%%
+He that by usury and unjust gain increaseth his substance,
+he shall gather it for him that will pity the poor.
+%%
+He that covereth a transgression seeketh love; but he that
+repeateth a matter separateth very friends.
+%%
+He that covereth his sins shall not prosper: but whoso
+confesseth and forsaketh them shall have mercy.
+%%
+He that delicately bringeth up his servant from a child
+shall have him become his son at the length.
+%%
+He that despiseth his neighbour sinneth: but he that hath
+mercy on the poor, happy is he.
+%%
+He that deviseth to do evil shall be called a mischievous
+person.
+%%
+He that diligently seeketh good procureth favour: but he
+that seeketh mischief, it shall come unto him.
+%%
+He that followeth after righteousness and mercy findeth
+life, righteousness, and honour.
+%%
+He that gathereth in summer is a wise son: but he that
+sleepeth in harvest is a son that causeth shame.
+%%
+He that getteth wisdom loveth his own soul: he that keepeth
+understanding shall find good.
+%%
+He that giveth unto the poor shall not lack: but he that
+hideth his eyes shall have many a curse.
+%%
+He that goeth about as a talebearer revealeth secrets:
+therefore meddle not with him that flattereth with his lips.
+%%
+He that handleth a matter wisely shall find good: and whoso
+trusteth in the LORD, happy is he.
+%%
+He that hasteth to be rich hath an evil eye, and
+considereth not that poverty shall come upon him.
+%%
+He that hateth dissembleth with his lips, and layeth up
+deceit within him; When he speaketh fair, believe him not: for
+there are seven abominations in his heart.
+%%
+He that hath a bountiful eye shall be blessed; for he
+giveth of his bread to the poor.
+%%
+He that hath a froward heart findeth no good: and he that
+hath a perverse tongue falleth into mischief.
+%%
+He that hath knowledge spareth his words: and a man of
+understanding is of an excellent spirit.
+%%
+He that hath no rule over his own spirit is like a city
+that is broken down, and without walls.
+%%
+He that hath pity upon the poor lendeth unto the LORD; and
+that which he hath given will he pay him again.
+%%
+He that hideth hatred with lying lips, and he that uttereth
+a slander, is a fool.
+%%
+He that is despised, and hath a servant, is better than he
+that honoureth himself, and lacketh bread.
+%%
+He that is first in his own cause seemeth just; but his
+neighbour cometh and searcheth him.
+%%
+He that is greedy of gain troubleth his own house; but he
+that hateth gifts shall live.
+%%
+He that is of a proud heart stirreth up strife: but he that
+putteth his trust in the LORD shall be made fat.
+%%
+He that is slow to anger is better than the mighty; and he
+that ruleth his spirit than he that taketh a city.
+%%
+He that is slow to wrath is of great understanding: but he
+that is hasty of spirit exalteth folly.
+%%
+He that is soon angry dealeth foolishly: and a man of
+wicked devices is hated.
+%%
+He that is surety for a stranger shall smart for it: and he
+that hateth suretiship is sure.
+%%
+He that is void of wisdom despiseth his neighbour: but a
+man of understanding holdeth his peace.
+%%
+He that justifieth the wicked, and he that condemneth the
+just, even they both are abomination to the LORD.
+%%
+He that keepeth his mouth keepeth his life: but he that
+openeth wide his lips shall have destruction.
+%%
+He that keepeth the commandment keepeth his own soul; but
+he that despiseth his ways shall die.
+%%
+He that laboureth laboureth for himself; for his mouth
+craveth it of him.
+%%
+He that loveth pleasure shall be a poor man: he that loveth
+wine and oil shall not be rich.
+%%
+He that loveth pureness of heart, for the grace of his lips
+the king shall be his friend.
+%%
+He that oppresseth the poor reproacheth his Maker: but he
+that honoureth him hath mercy on the poor.
+%%
+He that oppresseth the poor to increase his riches, and he
+that giveth to the rich, shall surely come to want.
+%%
+He that passeth by, and meddleth with strife belonging not
+to him, is like one that taketh a dog by the ears.
+%%
+He that rebuketh a man afterwards shall find more favour
+than he that flattereth with the tongue.
+%%
+He that refuseth instruction despiseth his own soul: but he
+that heareth reproof getteth understanding.
+%%
+He that reproveth a scorner getteth to himself shame: and
+he that rebuketh a wicked man getteth himself a blot.
+%%
+He that saith unto the wicked, Thou are righteous; him
+shall the people curse, nations shall abhor him: But to them
+that rebuke him shall be delight, and a good blessing shall
+come upon them.
+%%
+He that sendeth a message by the hand of a fool cutteth off
+the feet, and drinketh damage.
+%%
+He that soweth iniquity shall reap vanity: and the rod of
+his anger shall fail.
+%%
+He that spareth his rod hateth his son: but he that loveth
+him chasteneth him betimes.
+%%
+He that speaketh truth sheweth forth righteousness: but a
+false witness deceit.
+%%
+He that tilleth his land shall be satisfied with bread: but
+he that followeth vain persons is void of understanding.
+%%
+He that tilleth his land shall have plenty of bread: but he
+that followeth after vain persons shall have poverty
+enough.
+%%
+He that troubleth his own house shall inherit the wind: and
+the fool shall be servant to the wise of heart.
+%%
+He that trusteth in his own heart is a fool: but whoso
+walketh wisely, he shall be delivered.
+%%
+He that trusteth in his riches shall fall; but the
+righteous shall flourish as a branch.
+%%
+He that turneth away his ear from hearing the law, even his
+prayer shall be abomination.
+%%
+He that walketh in his uprightness feareth the LORD: but he
+that is perverse in his ways despiseth him.
+%%
+He that walketh uprightly walketh surely: but he that
+perverteth his ways shall be known.
+%%
+He that walketh with wise men shall be wise: but a
+companion of fools shall be destroyed.
+%%
+He that wasteth his father, and chaseth away his mother, is
+a son that causeth shame, and bringeth reproach.
+%%
+He that winketh with the eye causeth sorrow: but a prating
+fool shall fall.
+%%
+He that withholdeth corn, the people shall curse him: but
+blessing shall be upon the head of him that selleth it.
+%%
+He that would govern others, first should be the master of
+himself.
+%%
+He thinks by infection, catching an opinion like a cold.
+%%
+He walks as if balancing the family tree on his nose.
+%%
+He was so narrow-minded he could see through a keyhole with
+both eyes.
+%%
+He who has imagination without learning has wings but no
+feet.
+%%
+He who hates vices hates mankind.
+%%
+He who hesitates is lost.
+%%
+He who hesitates is sometimes saved.
+%%
+He who invents adages for others to peruse takes along
+rowboat when going on cruise.
+%%
+He who laughs, lasts.
+%%
+He who lives without folly is less wise than he believes.
+%%
+He who spends a storm beneath a tree, takes life with a
+grain of TNT.
+%%
+He will not regard any ransom; neither will he rest
+content, though thou givest many gifts.
+%%
+He winketh with his eyes, he speaketh with his feet, he
+teacheth with his fingers; Frowardness is in his heart, he
+deviseth mischief continually; he soweth discord.
+%%
+He, that being often reproved hardeneth his neck, shall
+suddenly be destroyed, and that without remedy.
+%%
+Hear counsel, and receive instruction, that thou mayest be
+wise in thy latter end.
+%%
+Hear instruction, and be wise, and refuse it not.
+%%
+Hear me now therefore, O ye children, and depart not from
+the words of my mouth.
+%%
+Hear thou, my son, and be wise, and guide thine heart in
+the way.
+%%
+Hear, O my son, and receive my sayings; and the years of
+thy life shall be many.
+%%
+Hear, ye children, the instruction of a father, and attend
+to know understanding.
+%%
+Hear; for I will speak of excellent things; and the opening
+of my lips shall be right things.
+%%
+Hearken unto me now therefore, O ye children, and attend to
+the words of my mouth.
+%%
+Hearken unto thy father that begat thee, and despise not
+thy mother when she is old.
+%%
+Heaviness in the heart of man maketh it stoop: but a good
+word maketh it glad.
+%%
+Hell and destruction are before the LORD: how much more
+then the hearts of the children of men? A scorner loveth not
+one that reproveth him: neither will he go unto the wise.
+%%
+Hell and destruction are never full; so the eyes of man are
+never satisfied.
+%%
+Hell is empty and all the devils are here. [The Tempest]
+%%
+Her children arise up, and call her blessed; her husband
+also, and he praiseth her.
+%%
+Her feet go down to death; her steps take hold on hell.
+%%
+Her house is the way to hell, going down to the chambers of
+death.
+%%
+Her husband is known in the gates, when he sitteth among
+the elders of the land.
+%%
+Her ways are ways of pleasantness, and all her paths are
+peace.
+%%
+His heart was yours from the first moment that you met.
+%%
+His own iniquities shall take the wicked himself, and he
+shall be holden with the cords of his sins.
+%%
+Histories are fuller of examples of the fidelity of dogs
+than of friends.
+%%
+Honi soit la vache qui rit.
+%%
+Honour the LORD with thy substance, and with the
+firstfruits of all thine increase: So shall thy barns be filled with
+plenty, and thy presses shall burst out with new wine.
+%%
+Hope deferred maketh the heart sick: but when the desire
+cometh, it is a tree of life.
+%%
+Houdini's escaping from New Jersey!
+%%
+House and riches are the inheritance of fathers: and a
+prudent wife is from the LORD.
+%%
+How can you work when the system's so crowded?
+%%
+How long wilt thou sleep, O sluggard? when wilt thou arise
+out of thy sleep? Yet a little sleep, a little slumber, a
+little folding of the hands to sleep: So shall thy poverty
+come as one that travelleth, and thy want as an armed man.
+%%
+How many weeks are there in a light year?
+%%
+How much better is it to get wisdom than gold! and to get
+understanding rather to be chosen than silver! The highway
+of the upright is to depart from evil: he that keepeth his
+way preserveth his soul.
+%%
+How sharper than a hound's tooth it is to have a thankless
+serpent.
+%%
+How wonderful opera would be if there were no singers.
+%%
+How you look depends on where you go.
+%%
+Humility is the first of the virtues -- for other people.
+-- Oliver W. Holmes
+%%
+I GOTTA GET OUTTA HERE!
+%%
+I am not arguing with you -- I am telling you.
+%%
+I came to MIT to get an education for myself and a diploma
+for my mother.
+%%
+I hate quotations. -- Ralph Waldo Emerson
+%%
+I have decked my bed with coverings of tapestry, with
+carved works, with fine linen of Egypt.
+%%
+I have perfumed my bed with myrrh, aloes, and cinnamon.
+%%
+I have taught thee in the way of wisdom; I have led thee in
+right paths.
+%%
+I lead in the way of righteousness, in the midst of the
+paths of judgment: That I may cause those that love me to
+inherit substance; and I will fill their treasures.
+%%
+I like work; it fascinates me; I can sit and look at it for
+hours.
+%%
+I love them that love me; and those that seek me early
+shall find me.
+%%
+I must have slipped a disk; my pack hurts.
+%%
+I neither learned wisdom, nor have the knowledge of the
+holy.
+%%
+I think we're all Bozos on this bus.
+%%
+I was set up from everlasting, from the beginning, or ever
+the earth was.
+%%
+I went by the field of the slothful, and by the vineyard of
+the man void of understanding; And, lo, it was all grown
+over with thorns, and nettles had covered the face thereof,
+and the stone wall thereof was broken down.
+%%
+I will never lie to you.
+%%
+I wisdom dwell with prudence, and find out knowledge of
+witty inventions.
+%%
+I wish you humans would leave me alone.
+%%
+I'm a Hollywood writer; so I put on a sports jacket and
+take off my brain.
+%%
+I'm not sure how to fly this thing, but I'll give it that
+old college try!
+%%
+I've done so much with so little for so long that I can do
+anything with nothing.
+%%
+IKM006 4050303293 CHECK/NOCHECK PREFIX NOT PERMITTED IN
+THIS CONTEXT.
+%%
+IOT trap -- core dumped
+%%
+IOT trap -- mos dumped
+%%
+If God had wanted you to go around nude, He would have
+given you bigger hands.
+%%
+If a group of N persons implements a COBOL compiler, there
+will be N-1 passes: Someone in the group has to be the
+manager.
+%%
+If a listener nods his head when you are explaining your
+program, wake him up.
+%%
+If a program manipulates large amounts of data, it does so
+in a small number of ways.
+%%
+If a ruler hearken to lies, all his servants are wicked.
+%%
+If a wise man contendeth with a foolish man, whether he
+rage or laugh, there is no rest.
+%%
+If at first you don't succeed, get new batteries.
+%%
+If at first you don't succeed, quit; don't be a nut about
+success.
+%%
+If at first you don't succeed, try, try again.
+%%
+If it doesn't feel good, don't do it.
+%%
+If the auto industry had done what the computer industry
+has done in the past 30 years, a Rolls Royce would cost $2.50
+and would get 2,000,000 miles per gallon.
+%%
+If the path be beautiful, let us not ask where it leads. --
+Anatole France
+%%
+If they say, Come with us, let us lay wait for blood, let
+us lurk privily for the innocent without cause: Let us
+swallow them up alive as the grave; and whole, as those that go
+down into the pit: We shall find all precious substance, we
+shall fill our houses with spoil: Cast in thy lot among
+us; let us all have one purse: My son, walk not thou in the
+way with them; refrain thy foot from their path: For their
+feet run to evil, and make haste to shed blood.
+%%
+If thine enemy be hungry, give him bread to eat; and if he
+be thirsty, give him water to drink: For thou shalt heap
+coals of fire upon his head, and the LORD shall reward thee.
+%%
+If thou be wise, thou shalt be wise for thyself: but if
+thou scornest, thou alone shalt bear it.
+%%
+If thou faint in the day of adversity, thy strength is
+small.
+%%
+If thou forbear to deliver them that are drawn unto death,
+and those that are ready to be slain; If thou sayest,
+Behold, we knew it not; doth not he that pondereth the heart
+consider it? and he that keepeth thy soul, doth not he know
+it? and shall not he render to every man according to his
+works? My son, eat thou honey, because it is good; and the
+honeycomb, which is sweet to thy taste: So shall the knowledge
+of wisdom be unto thy soul: when thou hast found it, then
+there shall be a reward, and thy expectation shall not be cut off.
+%%
+If thou hast done foolishly in lifting up thyself, or if
+thou hast thought evil, lay thine hand upon thy mouth.
+%%
+If thou hast nothing to pay, why should he take away thy
+bed from under thee? Remove not the ancient landmark, which
+thy fathers have set.
+%%
+If we knew where we were going to fall, we could have
+spread a carpet there. -- Russian proverb
+%%
+If you are a rooster, crow; if you are a hen, shut up and
+lay eggs. -- Russian proverb
+%%
+If you are tired of a friend, lend him money. -- Russian
+proverb
+%%
+If you ask how much it is, you can't afford it.
+%%
+If you pick up a starving dog and make him prosperous, he
+will not bite you. This is the principal difference between
+a dog and a man. -- Mark Twain
+%%
+If you suspect a man, don't employ him.
+%%
+If you think before you speak the other guy gets his joke
+in first.
+%%
+If you tickle yourself, you can laugh when you please. --
+Russian proverb
+%%
+If you want a fortune, go to a Chinese restaurant.
+%%
+If you want to know how old a man is, ask his
+brother-in-law.
+%%
+Ignorance is a lack of knowledge. Stupidity is ignorance
+with pride.
+%%
+Ignorance is bliss. -- Thomas Gray
+%%
+Ignorance is when you don't know anything and somebody
+finds it out.
+%%
+Ignore previous fortune.
+%%
+In all labour there is profit: but the talk of the lips
+tendeth only to penury.
+%%
+In all thy ways acknowledge him, and he shall direct thy
+paths.
+%%
+In marriage, as in war, it is permitted to take every
+advantage of the enemy.
+%%
+In the fear of the LORD is strong confidence: and his
+children shall have a place of refuge.
+%%
+In the first place, God made idiots; this was for practice;
+then He made school boards. -- Mark Twain
+%%
+In the house of the righteous is much treasure: but in the
+revenues of the wicked is trouble.
+%%
+In the light of the king's countenance is life; and his
+favour is as a cloud of the latter rain.
+%%
+In the lips of him that hath understanding wisdom is found:
+but a rod is for the back of him that is void of
+understanding.
+%%
+In the mouth of the foolish is a rod of pride: but the lips
+of the wise shall preserve them.
+%%
+In the multitude of people is the king's honour: but in the
+want of people is the destruction of the prince.
+%%
+In the multitude of words there wanteth not sin: but he
+that refraineth his lips is wise.
+%%
+In the transgression of an evil man there is a snare: but
+the righteous doth sing and rejoice.
+%%
+In the way of righteousness is life: and in the pathway
+thereof there is no death.
+%%
+In this world, not everyone with a long knife is a cook. --
+Russian proverb
+%%
+In this world, truth can wait; she's used to it.
+%%
+In unanimity there is cowardice and uncritical thinking.
+%%
+In wickedness there is a strong strain toward rationality.
+%%
+Institute: An archaic school where football in not taught.
+%%
+Integrity has no need for rules.
+%%
+Iron sharpeneth iron; so a man sharpeneth the countenance
+of his friend.
+%%
+Is this really happening?
+%%
+It is a bad plan that admits of no modification. --
+Publilius Syrus
+%%
+It is a poor judge who cannot award a prize.
+%%
+It is an abomination to kings to commit wickedness: for the
+throne is established by righteousness.
+%%
+It is an honour for a man to cease from strife: but every
+fool will be meddling.
+%%
+It is as sport to a fool to do mischief: but a man of
+understanding hath wisdom.
+%%
+It is better to die on your feet than to live on your
+knees.
+%%
+It is better to dwell in a corner of the housetop, than
+with a brawling woman in a wide house.
+%%
+It is better to dwell in the corner of the housetop, than
+with a brawling woman and in a wide house.
+%%
+It is better to dwell in the wilderness, than with a
+contentious and an angry woman.
+%%
+It is better to have loved and lost -- much better.
+%%
+It is better to have loved and lost than just to have lost.
+%%
+It is better to wear out than to rust out.
+%%
+It is easier to change the specification to fit the program
+than vice versa.
+%%
+It is easier to fight for one's principles than to live up
+to them.
+%%
+It is easier to run down a hill than up one.
+%%
+It is easier to write an incorrect program than to
+understand a correct one.
+%%
+It is joy to the just to do judgment: but destruction shall
+be to the workers of iniquity.
+%%
+It is naught, it is naught, saith the buyer: but when he is
+gone his way, then he boasteth.
+%%
+It is not for kings, O Lemuel, it is not for kings to drink
+wine; nor for princes strong drink: Lest they drink, and
+forget the law, and pervert the judgment of any of the
+afflicted.
+%%
+It is not good to accept the person of the wicked, to
+overthrow the righteous in judgment.
+%%
+It is not good to eat much honey: so for men to search
+their own glory is not glory.
+%%
+It is one thing to praise discipline, and another to submit
+to it.
+%%
+It is the glory of God to conceal a thing: but the honour
+of kings is to search out a matter.
+%%
+It is the wise bird who builds his nest in a tree.
+%%
+It seems to make an auto driver mad if he misses you.
+%%
+It shall be health to thy navel, and marrow to thy bones.
+%%
+It was a book to kill time for those who liked it better
+dead.
+%%
+It's a good thing we don't get all the government we pay
+for.
+%%
+It's a poor workman who blames his tools.
+%%
+It's all in the mind, ya know.
+%%
+It's better to burn out than to fade away.
+%%
+It's later than you think.
+%%
+It's not reality that's important, but how you perceive
+things.
+%%
+It's not whether you win or lose, but how you play the
+game. -- Grantland Rice
+%%
+It's pretty hard to tell what does bring happiness; poverty
+and wealth have both failed.
+%%
+Journalism will kill you, but it will keep you alive while
+you're at it.
+%%
+Judgments are prepared for scorners, and stripes for the
+back of fools.
+%%
+Just because the bells are ringing, it is not necessarily
+dinner time. -- Russian proverb
+%%
+Keep my commandments, and live; and my law as the apple of
+thine eye.
+%%
+Keep thy heart with all diligence; for out of it are the
+issues of life.
+%%
+Kiss your keyboard good-bye!
+%%
+LISP: To call a spade a thpade.
+%%
+Labour not to be rich: cease from thine own wisdom.
+%%
+Large numbers of things are determined, and therefore not
+subject to change.
+%%
+Last guys don't finish nice.
+%%
+Laugh, and the world ignores you. Crying doesn't help
+either.
+%%
+Lay not wait, O wicked man, against the dwelling of the
+righteous; spoil not his resting place: For a just man falleth
+seven times, and riseth up again: but the wicked shall
+fall into mischief.
+%%
+Learn good things -- the bad ones will teach you by
+themselves. -- Russian proverb
+%%
+Learned men are the cisterns of knowledge, not the
+fountainheads.
+%%
+Lend money to a bad debtor and he will hate you.
+%%
+Length of days is in her right hand; and in her left hand
+riches and honour.
+%%
+Lest thou shouldest ponder the path of life, her ways are
+moveable, that thou canst not know them.
+%%
+Let a bear robbed of her whelps meet a man, rather than a
+fool in his folly.
+%%
+Let a fool hold his tongue and he will pass for a sage.
+%%
+Let another man praise thee, and not thine own mouth; a
+stranger, and not thine own lips.
+%%
+Let her be as the loving hind and pleasant roe; let her
+breasts satisfy thee at all times; and be thou ravished always
+with her love.
+%%
+Let him drink, and forget his poverty, and remember his
+misery no more.
+%%
+Let him who takes the Plunge remember to return it by
+Tuesday.
+%%
+Let not mercy and truth forsake thee: bind them about thy
+neck; write them upon the table of thine heart: So shalt
+thou find favour and good understanding in the sight of God
+and man.
+%%
+Let not the sands of time get in your lunch.
+%%
+Let not thine heart decline to her ways, go not astray in
+her paths.
+%%
+Let not thine heart envy sinners: but be thou in the fear
+of the LORD all the day long.
+%%
+Let sleeping dogs lie. -- Charles Dickens
+%%
+Let the machine do the dirty work.
+%%
+Let them be only thine own, and not strangers' with thee.
+%%
+Let them not depart from thine eyes; keep them in the midst
+of thine heart.
+%%
+Let thine eyes look right on, and let thine eyelids look
+straight before thee.
+%%
+Let thy fountain be blessed: and rejoice with the wife of
+thy youth.
+%%
+Let thy fountains be dispersed abroad, and rivers of waters
+in the streets.
+%%
+Let your conscience be your guide. -- Alexander Pope
+%%
+Liar: One who tells an unpleasant truth.
+%%
+Life as we know it doesn't exist.
+%%
+Life is a game of bridge -- and you've just been finessed.
+%%
+Life is full of little surprises, and you are one of them.
+%%
+Life is like a sewer, what you get out of it depends on
+what you put into it.
+%%
+Life is like an analogy.
+%%
+Life is unbearable, but death is not so pleasant either. --
+Russian proverb
+%%
+Like punning, programming is a play on words.
+%%
+Like winter snow on summer lawn, time past is time gone.
+%%
+Live a clean, healthy life and you will soon die of
+boredom.
+%%
+Live a hundred years, learn a hundred years, and you'll
+still die a fool. -- Russian proverb
+%%
+Live and scratch -- when you're dead, the itching will
+stop. -- Russian proverb
+%%
+Logic is a little bird, sitting in a tree, that smells
+AWFUL.
+%%
+Long computations that yield zero are probably all for
+naught.
+%%
+Long life is in store for you.
+%%
+Look before you leap. -- Samuel Butler
+%%
+Look not thou upon the wine when it is red, when it giveth
+his colour in the cup, when it moveth itself aright.
+%%
+Losing your driver's license is just God's way of saying
+"BOOGA, BOOGA!"
+%%
+Love and scandal are the best sweeteners of tea.
+%%
+Love conquers all things. -- Virgil
+%%
+Love is in the offing, said the homicidal maniac.
+%%
+Love is in the offing. Be affectionate to one who adores
+you.
+%%
+Love is the triumph of imagination over intelligence.
+%%
+Love not sleep, lest thou come to poverty; open thine eyes,
+and thou shalt be satisfied with bread.
+%%
+Love the sea? I dote upon it -- from the beach.
+%%
+Lust not after her beauty in thine heart; neither let her
+take thee with her eyelids.
+%%
+Lying lips are abomination to the LORD: but they that deal
+truly are his delight.
+%%
+Make input easy to proofread.
+%%
+Make it right before you make it faster.
+%%
+Make no friendship with an angry man; and with a furious
+man thou shalt not go: Lest thou learn his ways, and get a
+snare to thy soul.
+%%
+Make sure all variables are initialized before use.
+%%
+Make sure comments and code agree.
+%%
+Make sure your code "does nothing" gracefully.
+%%
+Make yourself into a sheep, and you'll meet a wolf nearby.
+-- Russian proverb
+%%
+Man alone suffers so excruciatingly in the world that he
+was compelled to invent laughter.
+%%
+Man who falls in blast furnace is certain to feel
+overwrought.
+%%
+Man who falls in vat of molten optical glass makes
+spectacle of self.
+%%
+Man's goings are of the LORD; how can a man then understand
+his own way? It is a snare to the man who devoureth that
+which is holy, and after vows to make enquiry.
+%%
+Man's horizons are bounded by his vision.
+%%
+Many are called, few are chosen. Fewer still get to do the
+choosing.
+%%
+Many are called, few volunteer.
+%%
+Many are cold, but few are frozen.
+%%
+Many daughters have done virtuously, but thou excellest
+them all.
+%%
+Many pages make a thick book.
+%%
+Many receive advice, few profit from it.
+%%
+Many seek the ruler's favour; but every man's judgment
+cometh from the LORD.
+%%
+Many will intreat the favour of the prince: and every man
+is a friend to him that giveth gifts.
+%%
+Marriage -- a three ring circus: engagement ring, wedding
+ring, and suffering.
+%%
+Marriage is like sneezing: even when you feel it coming on,
+you can't stop. -- Russian proverb
+%%
+Mathematics deals exclusively with the relations of
+concepts to each other without consideration of their relation to
+experience. -- Albert Einstein
+%%
+Memory should be the starting point of the present.
+%%
+Men do not despise a thief, if he steal to satisfy his soul
+when he is hungry; But if he be found, he shall restore
+sevenfold; he shall give all the substance of his house.
+%%
+Men have a much better time of it than women; for one
+thing, they marry later; for another thing, they die earlier.
+%%
+Men love to wonder, and that is the seed of science.
+%%
+Men use thought only to justify their wrong doings, and
+speech only to conceal their thoughts.
+%%
+Mercy and truth preserve the king: and his throne is
+upholden by mercy.
+%%
+Might as well be frank, Monsieur. It would take a miracle
+to get you out of Casablanca.
+%%
+Mind your own business, Spock. I'm sick of your half-breed
+interference.
+%%
+Mistakes are oft the stepping stones to failure.
+%%
+Moderation is a fatal thing. Nothing succeeds like excess.
+%%
+Modesty is a vastly overrated virtue.
+%%
+Money may buy friendship but money can not buy love.
+%%
+Money will say more in one moment than the most eloquent
+lover can in years.
+%%
+Most men will proclaim every one his own goodness: but a
+faithful man who can find? The just man walketh in his
+integrity: his children are blessed after him.
+%%
+Most people eat as though they were fattening themselves
+for market.
+%%
+Most people find the concept of programming obvious, but
+the doing impossible.
+%%
+Much food is in the tillage of the poor: but there is that
+is destroyed for want of judgment.
+%%
+My fruit is better than gold, yea, than fine gold; and my
+revenue than choice silver.
+%%
+My opponent's best move is my best move.
+%%
+My son, attend to my words; incline thine ear unto my
+sayings.
+%%
+My son, attend unto my wisdom, and bow thine ear to my
+understanding: That thou mayest regard discretion, and that thy
+lips may keep knowledge.
+%%
+My son, be wise, and make my heart glad, that I may answer
+him that reproacheth me.
+%%
+My son, despise not the chastening of the LORD; neither be
+weary of his correction: For whom the LORD loveth he
+correcteth; even as a father the son in whom he delighteth.
+%%
+My son, fear thou the LORD and the king: and meddle not
+with them that are given to change: For their calamity shall
+rise suddenly; and who knoweth the ruin of them both? These
+things also belong to the wise. It is not good to have
+respect of persons in judgment.
+%%
+My son, forget not my law; but let thine heart keep my
+commandments: For length of days, and long life, and peace,
+shall they add to thee.
+%%
+My son, give me thine heart, and let thine eyes observe my
+ways.
+%%
+My son, hear the instruction of thy father, and forsake not
+the law of thy mother: For they shall be an ornament of
+grace unto thy head, and chains about thy neck.
+%%
+My son, if sinners entice thee, consent thou not.
+%%
+My son, if thine heart be wise, my heart shall rejoice,
+even mine.
+%%
+My son, if thou be surety for thy friend, if thou hast
+stricken thy hand with a stranger, Thou art snared with the
+words of thy mouth, thou art taken with the words of thy mouth.
+%%
+My son, if thou wilt receive my words, and hide my
+commandments with thee; So that thou incline thine ear unto wisdom,
+and apply thine heart to understanding; Yea, if thou
+criest after knowledge, and liftest up thy voice for
+understanding; If thou seekest her as silver, and searchest for her as
+for hid treasures; Then shalt thou understand the fear of
+the LORD, and find the knowledge of God.
+%%
+My son, keep my words, and lay up my commandments with
+thee.
+%%
+My son, keep thy father's commandment, and forsake not the
+law of thy mother: Bind them continually upon thine heart,
+and tie them about thy neck.
+%%
+My son, let not them depart from thine eyes: keep sound
+wisdom and discretion: So shall they be life unto thy soul,
+and grace to thy neck.
+%%
+National security is in your hands -- guard it well.
+%%
+Nature teaches beasts to know their friends.
+%%
+Never give an inch!
+%%
+Never insult an alligator until you have crossed the river.
+%%
+Never look a gift horse in the mouth. -- Saint Jerome
+%%
+Never settle with words what you can accomplish with a
+flame thrower.
+%%
+Never try to teach a pig to sing: it wastes your time and
+annoys the pig.
+%%
+Nice guys finish last. -- Leo Durocher
+%%
+No amount of genius can overcome a preoccupation with
+detail.
+%%
+No civilized person ever goes to bed the same day he gets
+up.
+%%
+No directory.
+%%
+No evil can happen to a good man. -- Plato
+%%
+No one can feel as helpless as the owner of a sick
+goldfish.
+%%
+No problem is insoluble in all conceivable circumstances.
+%%
+No use beating a dead horse.
+%%
+Noblemen make promises, but peasants have to keep them. --
+Russian proverb
+%%
+Nobody can be as agreeable as an uninvited guest.
+%%
+Nobody expects the Spanish Inquisition!
+%%
+None that go unto her return again, neither take they hold
+of the paths of life.
+%%
+Nothing astonishes men so much as common sense and plain
+dealing.
+%%
+Nothing endures like change. -- Heraclitus
+%%
+Nothing in life is to be feared. It is only to be
+understood.
+%%
+Nothing so needs reforming as other people's habits.
+%%
+Nothing ventured, nothing gained.
+%%
+Nothing will dispel enthusiasm like a small admission fee.
+%%
+Now and then an innocent man is sent to the Legislature.
+%%
+Now therefore hearken unto me, O ye children: for blessed
+are they that keep my ways.
+%%
+O ye simple, understand wisdom: and, ye fools, be ye of an
+understanding heart.
+%%
+O'Toole's dictum: "Murphy was an optimist."
+%%
+Observation, not old age, brings wisdom.
+%%
+Of all forms of caution, caution in love is the most fatal.
+%%
+Oh, Aunty Em, it's so good to be home!
+%%
+Oh, what a tangled web we weave when first we practice to
+conceive.
+%%
+Ointment and perfume rejoice the heart: so doth the
+sweetness of a man's friend by hearty counsel.
+%%
+Old MacDonald had an agricultural real estate tax
+abatement.
+%%
+Old soldiers never die. Young ones do.
+%%
+Once the word is out of your mouth, you can't swallow it
+back. -- Russian proverb
+%%
+Once you understand how to write a program, get someone
+else to write it.
+%%
+One Bell System -- it sometimes works.
+%%
+One Bell System -- it works.
+%%
+One man tells a falsehood, a hundred repeat it as true.
+%%
+One man's constant is another man's variable.
+%%
+Only by pride cometh contention: but with the well advised
+is wisdom.
+%%
+Only presidents, editors, and people with tapeworms have
+the right to use the editorial "we."
+%%
+Only those who attempt the absurd achieve the impossible.
+%%
+Open thy mouth for the dumb in the cause of all such as are
+appointed to destruction.
+%%
+Open thy mouth, judge righteously, and plead the cause of
+the poor and needy.
+%%
+Opportunity knocks but once.
+%%
+Optimization hinders evolution.
+%%
+Out of sight is out of mind.
+%%
+Paranoia doesn't mean the whole world really isn't out to
+get you.
+%%
+Password:
+%%
+Passwords are implemented as a result of insecurity.
+%%
+People have declaimed against luxury for 2,000 years ...
+and people have always delighted in it.
+%%
+People who take cat naps don't usually sleep in a cat's
+cradle.
+%%
+People will buy anything that's one to a customer.
+%%
+Philosophy: Unintelligible answers to insoluble problems.
+%%
+Pleasant words are as an honeycomb, sweet to the soul, and
+health to the bones.
+%%
+Please go away.
+%%
+Please update your programs.
+%%
+Ponder the path of thy feet, and let all thy ways be
+established.
+%%
+Poverty and shame shall be to him that refuseth
+instruction: but he that regardeth reproof shall be honoured.
+%%
+Power is poison.
+%%
+Pray to God, but keep rowing to shore. -- Russian proverb
+%%
+Prepare thy work without, and make it fit for thyself in
+the field; and afterwards build thine house.
+%%
+Pride goeth before destruction, and an haughty spirit
+before a fall.
+%%
+Promptness is its own reward, if one lives by the clock
+instead of the sword.
+%%
+Proud and haughty scorner is his name, who dealeth in proud
+wrath.
+%%
+Put away from thee a froward mouth, and perverse lips put
+far from thee.
+%%
+Put not forth thyself in the presence of the king, and
+stand not in the place of great men: For better it is that it
+be said unto thee, Come up hither; than that thou shouldest
+be put lower in the presence of the prince whom thine eyes
+have seen.
+%%
+Put not your trust in money, but put your money in trust.
+%%
+Quack!
+%%
+Quantity is no substitute for quality, but it's the only
+one we've got.
+%%
+Quit work and play for once!
+%%
+Rainy days and Mondays always get me down.
+%%
+Reading is thinking with someone else's head instead of
+one's own.
+%%
+Reality is for people who can't handle drugs.
+%%
+Receive my instruction, and not silver; and knowledge
+rather than choice gold.
+%%
+Recursion is the root of computation since it trades
+description for time.
+%%
+Rejoice not when thine enemy falleth, and let not thine
+heart be glad when he stumbleth: Lest the LORD see it, and it
+displease him, and he turn away his wrath from him.
+%%
+Religions revolve madly around sexual questions.
+%%
+Remove not the old landmark; and enter not into the fields
+of the fatherless: For their redeemer is mighty; he shall
+plead their cause with thee.
+%%
+Remove thy way far from her, and come not nigh the door of
+her house: Lest thou give thine honour unto others, and thy
+years unto the cruel: Lest strangers be filled with thy
+wealth; and thy labours be in the house of a stranger; And
+thou mourn at the last, when thy flesh and thy body are
+consumed, And say, How have I hated instruction, and my heart
+despised reproof; And have not obeyed the voice of my
+teachers, nor inclined mine ear to them that instructed me! I was
+almost in all evil in the midst of the congregation and assembly.
+%%
+Replace repetitive expressions by calls to a common
+function.
+%%
+Reprove not a scorner, lest he hate thee: rebuke a wise
+man, and he will love thee.
+%%
+Riches and honour are with me; yea, durable riches and
+righteousness.
+%%
+Riches profit not in the day of wrath: but righteousness
+delivereth from death.
+%%
+Righteous lips are the delight of kings; and they love him
+that speaketh right.
+%%
+Righteousness exalteth a nation: but sin is a reproach to
+any people.
+%%
+Righteousness keepeth him that is upright in the way: but
+wickedness overthroweth the sinner.
+%%
+Rotten wood can not be carved. -- Confucius
+%%
+Satire does not look pretty upon a tombstone.
+%%
+Save yourself! Reboot in 5 seconds!
+%%
+Say not thou, I will recompense evil; but wait on the LORD,
+and he shall save thee.
+%%
+Say not unto thy neighbour, Go, and come again, and to
+morrow I will give; when thou hast it by thee.
+%%
+Say not, I will do so to him as he hath done to me: I will
+render to the man according to his work.
+%%
+Say unto wisdom, Thou art my sister; and call understanding
+thy kinswoman: That they may keep thee from the strange
+woman, from the stranger which flattereth with her words.
+%%
+Scornful men bring a city into a snare: but wise men turn
+away wrath.
+%%
+Security is the individual's responsibility.
+%%
+Security is your responsibility.
+%%
+Seest thou a man diligent in his business? he shall stand
+before kings; he shall not stand before mean men.
+%%
+Seest thou a man that is hasty in his words? there is more
+hope of a fool than of him.
+%%
+Seest thou a man wise in his own conceit? there is more
+hope of a fool than of him.
+%%
+She also lieth in wait as for a prey, and increaseth the
+transgressors among men.
+%%
+She considereth a field, and buyeth it: with the fruit of
+her hands she planteth a vineyard.
+%%
+She crieth at the gates, at the entry of the city, at the
+coming in at the doors.
+%%
+She girdeth her loins with strength, and strengtheneth her
+arms.
+%%
+She hath sent forth her maidens: she crieth upon the
+highest places of the city, Whoso is simple, let him turn in
+hither: as for him that wanteth understanding, she saith to
+him, Come, eat of my bread, and drink of the wine which I have
+mingled.
+%%
+She is a tree of life to them that lay hold upon her: and
+happy is every one that retaineth her.
+%%
+She is like the merchants' ships; she bringeth her food
+from afar.
+%%
+She is more precious than rubies: and all the things thou
+canst desire are not to be compared unto her.
+%%
+She is not afraid of the snow for her household: for all
+her household are clothed with scarlet.
+%%
+She layeth her hands to the spindle, and her hands hold the
+distaff.
+%%
+She looketh well to the ways of her household, and eateth
+not the bread of idleness.
+%%
+She maketh fine linen, and selleth it; and delivereth
+girdles unto the merchant.
+%%
+She maketh herself coverings of tapestry; her clothing is
+silk and purple.
+%%
+She openeth her mouth with wisdom; and in her tongue is the
+law of kindness.
+%%
+She perceiveth that her merchandise is good: her candle
+goeth not out by night.
+%%
+She riseth also while it is yet night, and giveth meat to
+her household, and a portion to her maidens.
+%%
+She seeketh wool, and flax, and worketh willingly with her
+hands.
+%%
+She shall give to thine head an ornament of grace: a crown
+of glory shall she deliver to thee.
+%%
+She stretcheth out her hand to the poor; yea, she reacheth
+forth her hands to the needy.
+%%
+She will do him good and not evil all the days of her life.
+%%
+Simplicity does not precede complexity, but follows it.
+%%
+Sin has many tools, but a lie is the handle that fits them
+all.
+%%
+Slang is language that takes off its coat, spits on its
+hands, and goes to work.
+%%
+Slothfulness casteth into a deep sleep; and an idle soul
+shall suffer hunger.
+%%
+Smile, it makes the world wonder what you are up to.
+%%
+Smite a scorner, and the simple will beware: and reprove
+one that hath understanding, and he will understand knowledge.
+%%
+Snow Day -- stay home.
+%%
+So are the ways of every one that is greedy of gain; which
+taketh away the life of the owners thereof.
+%%
+Soap and education are not as sudden as a massacre, but
+they are more deadly in the long run.
+%%
+Some men are discovered; others are found out.
+%%
+Some programming languages manage to absorb change but
+withstand progress.
+%%
+Someone is unenthusiastic about your work.
+%%
+Sooner will men hold fire in their mouths than keep a
+secret.
+%%
+Speak not in the ears of a fool: for he will despise the
+wisdom of thy words.
+%%
+Stability itself is nothing else than a more sluggish
+motion.
+%%
+Standing on head makes smile of frown, but rest of face
+also upside down.
+%%
+Stop searching forever: happiness is just next to you.
+%%
+Stop searching forever: happiness is unattainable.
+%%
+Strength and honour are her clothing; and she shall rejoice
+in time to come.
+%%
+Strive not with a man without cause, if he have done thee
+no harm.
+%%
+Sturgeon's Law: Ninety percent of everything is crud.
+%%
+Success is a journey, not a destination.
+%%
+Such is the way of an adulterous woman; she eateth, and
+wipeth her mouth, and saith, I have done no wickedness.
+%%
+Surely he scorneth the scorners: but he giveth grace unto
+the lowly.
+%%
+Surely in vain the net is spread in the sight of any bird.
+%%
+Surely the churning of milk bringeth forth butter, and the
+wringing of the nose bringeth forth blood: so the forcing
+of wrath bringeth forth strife.
+%%
+System going down at 1:45 this afternoon for disk crashing.
+%%
+System going down indefinitely, please log off!
+%%
+Tact is the art of making a point without making an enemy.
+%%
+Take away the dross from the silver, and there shall come
+forth a vessel for the finer.
+%%
+Take away the wicked from before the king, and his throne
+shall be established in righteousness.
+%%
+Take care of the luxuries and the necessities will take
+care of themselves.
+%%
+Take fast hold of instruction; let her not go: keep her;
+for she is thy life.
+%%
+Take his garment that is surety for a stranger, and take a
+pledge of him for a strange woman.
+%%
+Take his garment that is surety for a stranger: and take a
+pledge of him for a strange woman.
+%%
+That must be wonderful! I don't understand it at all.
+%%
+That thou mayest walk in the way of good men, and keep the
+paths of the righteous.
+%%
+That thy trust may be in the LORD, I have made known to
+thee this day, even to thee.
+%%
+That which is not good for the swarm, neither is it good
+for the bee.
+%%
+The LORD by wisdom hath founded the earth; by understanding
+hath he established the heavens.
+%%
+The LORD hath made all things for himself: yea, even the
+wicked for the day of evil.
+%%
+The LORD is far from the wicked: but he heareth the prayer
+of the righteous.
+%%
+The LORD possessed me in the beginning of his way, before
+his works of old.
+%%
+The LORD will destroy the house of the proud: but he will
+establish the border of the widow.
+%%
+The LORD will not suffer the soul of the righteous to
+famish: but he casteth away the substance of the wicked.
+%%
+The Tree of Learning bears the noblest fruit, but noble
+fruit tastes bad.
+%%
+The attacker must vanquish; the defender need only survive.
+%%
+The backslider in heart shall be filled with his own ways:
+and a good man shall be satisfied from himself.
+%%
+The beginning of strife is as when one letteth out water:
+therefore leave off contention, before it be meddled with.
+%%
+The best prophet of the future is the past.
+%%
+The blessing of the LORD, it maketh rich, and he addeth no
+sorrow with it.
+%%
+The bloodthirsty hate the upright: but the just seek his
+soul.
+%%
+The blueness of a wound cleanseth away evil: so do stripes
+the inward parts of the belly.
+%%
+The cow may be black, but the milk comes out white. --
+Russian proverb
+%%
+The crown of the wise is their riches: but the foolishness
+of fools is folly.
+%%
+The curse of the LORD is in the house of the wicked: but he
+blesseth the habitation of the just.
+%%
+The decision doesn't have to be logical, it was unanimous.
+%%
+The degree of civilization in a society can be judged by
+entering its prisons.
+%%
+The desire accomplished is sweet to the soul: but it is
+abomination to fools to depart from evil.
+%%
+The desire of a man is his kindness: and a poor man is
+better than a liar.
+%%
+The desire of the righteous is only good: but the
+expectation of the wicked is wrath.
+%%
+The desire of the slothful killeth him; for his hands
+refuse to labour.
+%%
+The discretion of a man deferreth his anger; and it is his
+glory to pass over a transgression.
+%%
+The door is the key.
+%%
+The ear that heareth the reproof of life abideth among the
+wise.
+%%
+The early worm gets the bird.
+%%
+The end of labor is to gain leisure.
+%%
+The ends justify the means.
+%%
+The evil bow before the good; and the wicked at the gates
+of the righteous.
+%%
+The eye that mocketh at his father, and despiseth to obey
+his mother, the ravens of the valley shall pick it out, and
+the young eagles shall eat it.
+%%
+The eyes of the LORD are in every place, beholding the evil
+and the good.
+%%
+The eyes of the LORD preserve knowledge, and he
+overthroweth the words of the transgressor.
+%%
+The famous politician was trying to save both his faces.
+%%
+The father of the righteous shall greatly rejoice: and he
+that begetteth a wise child shall have joy of him.
+%%
+The fear of a king is as the roaring of a lion: whoso
+provoketh him to anger sinneth against his own soul.
+%%
+The fear of man bringeth a snare: but whoso putteth his
+trust in the LORD shall be safe.
+%%
+The fear of the LORD is a fountain of life, to depart from
+the snares of death.
+%%
+The fear of the LORD is the beginning of knowledge: but
+fools despise wisdom and instruction.
+%%
+The fear of the LORD is the beginning of wisdom: and the
+knowledge of the holy is understanding.
+%%
+The fear of the LORD is the instruction of wisdom; and
+before honour is humility.
+%%
+The fear of the LORD is to hate evil: pride, and arrogancy,
+and the evil way, and the froward mouth, do I hate.
+%%
+The fear of the LORD prolongeth days: but the years of the
+wicked shall be shortened.
+%%
+The fear of the LORD tendeth to life: and he that hath it
+shall abide satisfied; he shall not be visited with evil.
+%%
+The fear of the wicked, it shall come upon him: but the
+desire of the righteous shall be granted.
+%%
+The finest eloquence is that which gets things done.
+%%
+The fining pot is for silver, and the furnace for gold: but
+the LORD trieth the hearts.
+%%
+The following statement is not true:
+%%
+The foolishness of man perverteth his way: and his heart
+fretteth against the LORD.
+%%
+The fruit of the righteous is a tree of life; and he that
+winneth souls is wise.
+%%
+The full soul loatheth an honeycomb; but to the hungry soul
+every bitter thing is sweet.
+%%
+The future is his who knows how to wait. -- Russian proverb
+%%
+The future isn't what it used to be. It never was.
+%%
+The gentlemen looked one another over with microscopic
+carelessness.
+%%
+The getting of treasures by a lying tongue is a vanity
+tossed to and fro of them that seek death.
+%%
+The glory of young men is their strength: and the beauty of
+old men is the grey head.
+%%
+The great God that formed all things both rewardeth the
+fool, and rewardeth transgressors.
+%%
+The greatest of faults is to be conscious of none.
+%%
+The hand of the diligent shall bear rule: but the slothful
+shall be under tribute.
+%%
+The hearing ear, and the seeing eye, the LORD hath made
+even both of them.
+%%
+The heart knoweth his own bitterness; and a stranger doth
+not intermeddle with his joy.
+%%
+The heart of her husband doth safely trust in her, so that
+he shall have no need of spoil.
+%%
+The heart of him that hath understanding seeketh knowledge:
+but the mouth of fools feedeth on foolishness.
+%%
+The heart of the righteous studieth to answer: but the
+mouth of the wicked poureth out evil things.
+%%
+The heart of the wise teacheth his mouth, and addeth
+learning to his lips.
+%%
+The heaven for height, and the earth for depth, and the
+heart of kings is unsearchable.
+%%
+The hoary head is a crown of glory, if it be found in the
+way of righteousness.
+%%
+The hope of the righteous shall be gladness: but the
+expectation of the wicked shall perish.
+%%
+The horse is prepared against the day of battle: but safety
+is of the LORD.
+%%
+The horseleach hath two daughters, crying, Give, give.
+There are three things that are never satisfied, yea, four
+things say not, It is enough: The grave; and the barren womb;
+the earth that is not filled with water; and the fire that
+saith not, It is enough.
+%%
+The house of the wicked shall be overthrown: but the
+tabernacle of the upright shall flourish.
+%%
+The important thing is not to stop questioning.
+%%
+The integrity of the upright shall guide them: but the
+perverseness of transgressors shall destroy them.
+%%
+The king by judgment establisheth the land: but he that
+receiveth gifts overthroweth it.
+%%
+The king that faithfully judgeth the poor, his throne shall
+be established for ever.
+%%
+The king's favour is toward a wise servant: but his wrath
+is against him that causeth shame.
+%%
+The king's heart is in the hand of the LORD, as the rivers
+of water: he turneth it whithersoever he will.
+%%
+The king's wrath is as the roaring of a lion; but his
+favour is as dew upon the grass.
+%%
+The labour of the righteous tendeth to life: the fruit of
+the wicked to sin.
+%%
+The lambs are for thy clothing, and the goats are the price
+of the field.
+%%
+The law of the wise is a fountain of life, to depart from
+the snares of death.
+%%
+The legs of the lame are not equal: so is a parable in the
+mouth of fools.
+%%
+The liberal soul shall be made fat: and he that watereth
+shall be watered also himself.
+%%
+The life that is unexamined is not worth living.
+%%
+The light of the eyes rejoiceth the heart: and a good
+report maketh the bones fat.
+%%
+The light of the righteous rejoiceth: but the lamp of the
+wicked shall be put out.
+%%
+The lip of truth shall be established for ever: but a lying
+tongue is but for a moment.
+%%
+The lips of the righteous feed many: but fools die for want
+of wisdom.
+%%
+The lips of the righteous know what is acceptable: but the
+mouth of the wicked speaketh frowardness.
+%%
+The lips of the wise disperse knowledge: but the heart of
+the foolish doeth not so.
+%%
+The lot causeth contentions to cease, and parteth between
+the mighty.
+%%
+The lot is cast into the lap; but the whole disposing
+thereof is of the LORD.
+%%
+The man that wandereth out of the way of understanding
+shall remain in the congregation of the dead.
+%%
+The man who makes no mistakes does not usually make
+anything.
+%%
+The memory of the just is blessed: but the name of the
+wicked shall rot.
+%%
+The merciful man doeth good to his own soul: but he that is
+cruel troubleth his own flesh.
+%%
+The more things change, the more they remain the same.
+%%
+The morsel which thou hast eaten shalt thou vomit up, and
+lose thy sweet words.
+%%
+The mouth of a righteous man is a well of life: but
+violence covereth the mouth of the wicked.
+%%
+The mouth of strange women is a deep pit: he that is
+abhorred of the LORD shall fall therein.
+%%
+The mouth of the just bringeth forth wisdom: but the
+froward tongue shall be cut out.
+%%
+The name of the LORD is a strong tower: the righteous
+runneth into it, and is safe.
+%%
+The north wind driveth away rain: so doth an angry
+countenance a backbiting tongue.
+%%
+The only difference between a rut and a grave is their
+size.
+%%
+The only thing to do with good advice is pass it on. It is
+never any use to oneself.
+%%
+The only way to amuse some people is to slip and fall on an
+icy pavement.
+%%
+The plural of spouse is spice.
+%%
+The poor and the deceitful man meet together: the LORD
+lighteneth both their eyes.
+%%
+The poor is hated even of his own neighbour: but the rich
+hath many friends.
+%%
+The poor useth intreaties; but the rich answereth roughly.
+%%
+The preparations of the heart in man, and the answer of the
+tongue, is from the LORD.
+%%
+The price of greatness is responsibility.
+%%
+The prince that wanteth understanding is also a great
+oppressor: but he that hateth covetousness shall prolong his
+days.
+%%
+The program is absolutely right; therefore the computer
+must be wrong.
+%%
+The proverbs of Solomon the son of David, king of Israel;
+To know wisdom and instruction; to perceive the words of
+understanding; To receive the instruction of wisdom, justice,
+and judgment, and equity; To give subtilty to the simple,
+to the young man knowledge and discretion.
+%%
+The proverbs of Solomon. A wise son maketh a glad father:
+but a foolish son is the heaviness of his mother.
+%%
+The ransom of a man's life are his riches: but the poor
+heareth not rebuke.
+%%
+The rich and poor meet together: the LORD is the maker of
+them all.
+%%
+The rich man is wise in his own conceit; but the poor that
+hath understanding searcheth him out.
+%%
+The rich man's wealth is his strong city, and as an high
+wall in his own conceit.
+%%
+The rich man's wealth is his strong city: the destruction
+of the poor is their poverty.
+%%
+The rich ruleth over the poor, and the borrower is servant
+to the lender.
+%%
+The righteous considereth the cause of the poor: but the
+wicked regardeth not to know it.
+%%
+The righteous eateth to the satisfying of his soul: but the
+belly of the wicked shall want.
+%%
+The righteous is delivered out of trouble, and the wicked
+cometh in his stead.
+%%
+The righteous is more excellent than his neighbour: but the
+way of the wicked seduceth them.
+%%
+The righteous man wisely considereth the house of the
+wicked: but God overthroweth the wicked for their wickedness.
+%%
+The righteous shall never be removed: but the wicked shall
+not inhabit the earth.
+%%
+The righteousness of the perfect shall direct his way: but
+the wicked shall fall by his own wickedness.
+%%
+The righteousness of the upright shall deliver them: but
+transgressors shall be taken in their own naughtiness.
+%%
+The road to ruin is always in good repair, and the
+travelers pay the expense of it.
+%%
+The robbery of the wicked shall destroy them; because they
+refuse to do judgment.
+%%
+The rod and reproof give wisdom: but a child left to
+himself bringeth his mother to shame.
+%%
+The sacrifice of the wicked is abomination: how much more,
+when he bringeth it with a wicked mind? A false witness
+shall perish: but the man that heareth speaketh constantly.
+%%
+The sacrifice of the wicked is an abomination to the LORD:
+but the prayer of the upright is his delight.
+%%
+The shortage will be divided among the poor. -- Russian
+proverb
+%%
+The simple believeth every word: but the prudent man
+looketh well to his going.
+%%
+The simple inherit folly: but the prudent are crowned with
+knowledge.
+%%
+The slothful hideth his hand in his bosom; it grieveth him
+to bring it again to his mouth.
+%%
+The slothful man roasteth not that which he took in
+hunting: but the substance of a diligent man is precious.
+%%
+The slothful man saith, There is a lion in the way; a lion
+is in the streets.
+%%
+The slothful man saith, There is a lion without, I shall be
+slain in the streets.
+%%
+The slower you drive, the farther you get. -- Russian
+proverb
+%%
+The sluggard is wiser in his own conceit than seven men
+that can render a reason.
+%%
+The sluggard will not plow by reason of the cold; therefore
+shall he beg in harvest, and have nothing.
+%%
+The soul of the sluggard desireth, and hath nothing: but
+the soul of the diligent shall be made fat.
+%%
+The soul of the wicked desireth evil: his neighbour findeth
+no favour in his eyes.
+%%
+The soul would have no rainbow had the eyes no tears.
+%%
+The spirit of a man will sustain his infirmity; but a
+wounded spirit who can bear? The heart of the prudent getteth
+knowledge; and the ear of the wise seeketh knowledge.
+%%
+The spirit of man is the candle of the LORD, searching all
+the inward parts of the belly.
+%%
+The sun never sets on the British Empire because the
+British are scared of the dark.
+%%
+The thought of foolishness is sin: and the scorner is an
+abomination to men.
+%%
+The thoughts of the diligent tend only to plenteousness;
+but of every one that is hasty only to want.
+%%
+The thoughts of the righteous are right: but the counsels
+of the wicked are deceit.
+%%
+The thoughts of the wicked are an abomination to the LORD:
+but the words of the pure are pleasant words.
+%%
+The time is right to make new friends.
+%%
+The tongue of the just is as choice silver: the heart of
+the wicked is little worth.
+%%
+The tongue of the wise useth knowledge aright: but the
+mouth of fools poureth out foolishness.
+%%
+The universe is laughing behind your back.
+%%
+The way of a fool is right in his own eyes: but he that
+hearkeneth unto counsel is wise.
+%%
+The way of man is froward and strange: but as for the pure,
+his work is right.
+%%
+The way of the LORD is strength to the upright: but
+destruction shall be to the workers of iniquity.
+%%
+The way of the slothful man is as an hedge of thorns: but
+the way of the righteous is made plain.
+%%
+The way of the wicked is an abomination unto the LORD: but
+he loveth him that followeth after righteousness.
+%%
+The way of the wicked is as darkness: they know not at what
+they stumble.
+%%
+The wicked are overthrown, and are not: but the house of
+the righteous shall stand.
+%%
+The wicked desireth the net of evil men: but the root of
+the righteous yieldeth fruit.
+%%
+The wicked flee when no man pursueth: but the righteous are
+bold as a lion.
+%%
+The wicked is driven away in his wickedness: but the
+righteous hath hope in his death.
+%%
+The wicked is snared by the transgression of his lips: but
+the just shall come out of trouble.
+%%
+The wicked shall be a ransom for the righteous, and the
+transgressor for the upright.
+%%
+The wicked worketh a deceitful work: but to him that soweth
+righteousness shall be a sure reward.
+%%
+The wisdom of the prudent is to understand his way: but the
+folly of fools is deceit.
+%%
+The wise in heart shall be called prudent: and the
+sweetness of the lips increaseth learning.
+%%
+The wise in heart will receive commandments: but a prating
+fool shall fall.
+%%
+The wise shall inherit glory: but shame shall be the
+promotion of fools.
+%%
+The wise shepherd never trusts his flock to a smiling wolf.
+%%
+The words of Agur the son of Jakeh, even the prophecy: the
+man spake unto Ithiel, even unto Ithiel and Ucal, Surely I
+am more brutish than any man, and have not the
+understanding of a man.
+%%
+The words of a man's mouth are as deep waters, and the
+wellspring of wisdom as a flowing brook.
+%%
+The words of a talebearer are as wounds, and they go down
+into the innermost parts of the belly.
+%%
+The words of a talebearer are as wounds, and they go down
+into the innermost parts of the belly.
+%%
+The words of king Lemuel, the prophecy that his mother
+taught him.
+%%
+The words of the wicked are to lie in wait for blood: but
+the mouth of the upright shall deliver them.
+%%
+The world is coming to an end ... SAVE YOUR BUFFERS!!!
+%%
+The wrath of a king is as messengers of death: but a wise
+man will pacify it.
+%%
+Then I saw, and considered it well: I looked upon it, and
+received instruction.
+%%
+Then shall they call upon me, but I will not answer; they
+shall seek me early, but they shall not find me: For that
+they hated knowledge, and did not choose the fear of the
+LORD: They would none of my counsel: they despised all my reproof.
+%%
+Then shalt thou understand righteousness, and judgment, and
+equity; yea, every good path.
+%%
+Then shalt thou walk in thy way safely, and thy foot shall
+not stumble.
+%%
+There are many devices in a man's heart; nevertheless the
+counsel of the LORD, that shall stand.
+%%
+There are more old drunkards than old doctors.
+%%
+There are more things in heaven and earth than are dreamt
+of ... in either.
+%%
+There are people so addicted to exaggeration that they
+can't tell the truth without lying.
+%%
+There be four things which are little upon the earth, but
+they are exceeding wise: The ants are a people not strong,
+yet they prepare their meat in the summer; The conies are
+but a feeble folk, yet make they their houses in the rocks;
+The locusts have no king, yet go they forth all of them by
+bands; The spider taketh hold with her hands, and is in
+kings' palaces.
+%%
+There be three things which are too wonderful for me, yea,
+four which I know not: The way of an eagle in the air; the
+way of a serpent upon a rock; the way of a ship in the
+midst of the sea; and the way of a man with a maid.
+%%
+There be three things which go well, yea, four are comely
+in going: A lion which is strongest among beasts, and
+turneth not away for any; A greyhound; an he goat also; and a
+king, against whom there is no rising up.
+%%
+There is a generation that are pure in their own eyes, and
+yet is not washed from their filthiness.
+%%
+There is a generation that curseth their father, and doth
+not bless their mother.
+%%
+There is a generation, O how lofty are their eyes! and
+their eyelids are lifted up.
+%%
+There is a generation, whose teeth are as swords, and their
+jaw teeth as knives, to devour the poor from off the
+earth, and the needy from among men.
+%%
+There is a way that seemeth right unto a man, but the end
+thereof are the ways of death.
+%%
+There is a way which seemeth right unto a man, but the end
+thereof are the ways of death.
+%%
+There is gold, and a multitude of rubies: but the lips of
+knowledge are a precious jewel.
+%%
+There is no distinctly native American criminal class
+except Congress. -- Mark Twain
+%%
+There is no heavier burden than a great potential.
+%%
+There is no proverb that is not true. -- Cervantes
+%%
+There is no sadder sight than a young pessimist.
+%%
+There is no sin but ignorance. -- Christopher Marlowe
+%%
+There is no such thing as pure pleasure; some anxiety
+always goes with it.
+%%
+There is no time like the pleasant.
+%%
+There is no wisdom nor understanding nor counsel against
+the LORD.
+%%
+There is that maketh himself rich, yet hath nothing: there
+is that maketh himself poor, yet hath great riches.
+%%
+There is that scattereth, and yet increaseth; and there is
+that withholdeth more than is meet, but it tendeth to
+poverty.
+%%
+There is that speaketh like the piercings of a sword: but
+the tongue of the wise is health.
+%%
+There is treasure to be desired and oil in the dwelling of
+the wise; but a foolish man spendeth it up.
+%%
+There never was a good war or a bad peace.
+%%
+There shall no evil happen to the just: but the wicked
+shall be filled with mischief.
+%%
+There's got to be more to life than compile-and-go.
+%%
+There's never time to do the job right, so we must find
+time to do it again.
+%%
+There's no room in the drug world for amateurs.
+%%
+There's so much to say but your eyes keep interrupting me.
+%%
+Therefore came I forth to meet thee, diligently to seek thy
+face, and I have found thee.
+%%
+Therefore shall his calamity come suddenly; suddenly shall
+he be broken without remedy.
+%%
+Therefore shall they eat of the fruit of their own way, and
+be filled with their own devices.
+%%
+These are also proverbs of Solomon, which the men of
+Hezekiah king of Judah copied out.
+%%
+These six things doth the LORD hate: yea, seven are an
+abomination unto him: A proud look, a lying tongue, and hands
+that shed innocent blood, An heart that deviseth wicked
+imaginations, feet that be swift in running to mischief, A
+false witness that speaketh lies, and he that soweth discord
+among brethren.
+%%
+They are all plain to him that understandeth, and right to
+them that find knowledge.
+%%
+They have stricken me, shalt thou say, and I was not sick;
+they have beaten me, and I felt it not: when shall I awake?
+I will seek it yet again.
+%%
+They that are of a froward heart are abomination to the
+LORD: but such as are upright in their way are his delight.
+%%
+They that forsake the law praise the wicked: but such as
+keep the law contend with them.
+%%
+Thine eyes shall behold strange women, and thine heart
+shall utter perverse things.
+%%
+Thine own friend, and thy father's friend, forsake not;
+neither go into thy brother's house in the day of thy
+calamity: for better is a neighbour that is near than a brother far
+off.
+%%
+This fortune is inoperative. Please try another.
+%%
+This is a good time to punt work.
+%%
+This login session: $13.99
+%%
+This screen intentionally left blank.
+%%
+Thorns and snares are in the way of the froward: he that
+doth keep his soul shall be far from them.
+%%
+Those of you who think you know everything are very
+annoying to us who do.
+%%
+Those who can, do. Those who can't, program.
+%%
+Those who can, do. Those who can't, simulate.
+%%
+Those who can, do. Those who can't, teach. Those who
+can't teach, HACK!
+%%
+Those who in quarrels interpose must often wipe a bloody
+nose.
+%%
+Those who talk, don't know. Those who don't talk, know.
+%%
+Thou shalt beat him with the rod, and shalt deliver his
+soul from hell.
+%%
+Though hand join in hand, the wicked shall not be
+unpunished: but the seed of the righteous shall be delivered.
+%%
+Though this be madness, yet there is method in 't. --
+William Shakespeare
+%%
+Though thou shouldest bray a fool in a mortar among wheat
+with a pestle, yet will not his foolishness depart from him.
+%%
+Through desire a man, having separated himself, seeketh and
+intermeddleth with all wisdom.
+%%
+Through wisdom is an house builded; and by understanding it
+is established: And by knowledge shall the chambers be
+filled with all precious and pleasant riches.
+%%
+Thy father and thy mother shall be glad, and she that bare
+thee shall rejoice.
+%%
+Time and tide wait for no man.
+%%
+Time flies when you don't know what you're doing.
+%%
+Time for lunch!
+%%
+Time is but the stream I go a-fishing in.
+%%
+Time is nature's way of making sure that everything doesn't
+happen at once.
+%%
+To be great is to be misunderstood.
+%%
+To criticize the incompetent is easy; it is more difficult
+to criticize the competent.
+%%
+To do justice and judgment is more acceptable to the LORD
+than sacrifice.
+%%
+To each his own and to you so long.
+%%
+To have a sense of humor is to be a tragic figure.
+%%
+To have respect of persons is not good: for for a piece of
+bread that man will transgress.
+%%
+To iterate is human, to recurse, divine.
+%%
+To know thyself is the ultimate form of aggression.
+%%
+To laugh at men of sense is the privilege of fools.
+%%
+To teach is to learn.
+%%
+To understand a program you must become both the machine
+and the program.
+%%
+Today is a good day to bribe a high-ranking public
+official.
+%%
+Today is the last day of your life so far.
+%%
+Too clever is dumb. -- Ogden Nash
+%%
+Toto, I have a feeling we're not in Kansas any more!
+%%
+Train up a child in the way he should go: and when he is
+old, he will not depart from it.
+%%
+Treasures of wickedness profit nothing: but righteousness
+delivereth from death.
+%%
+Troubles are like babies; they only grow by nursing.
+%%
+Trust in Allah, but tie your camel anyway.
+%%
+Trust in the LORD with all thine heart; and lean not unto
+thine own understanding.
+%%
+Truthful: Dumb and illiterate.
+%%
+Try "stty 0" -- it works much better.
+%%
+Try the Moo Shu Pork. It is especially good today.
+%%
+Try to divide your time evenly to keep others happy.
+%%
+Trying to get an education here is like trying to take a
+drink from a fire hose.
+%%
+Turn not to the right hand nor to the left: remove thy foot
+from evil.
+%%
+Turn the other cheek. -- Jesus Christ
+%%
+Two men look out through the same bars; one sees mud, and
+one the stars.
+%%
+Two things have I required of thee; deny me them not before
+I die: Remove far from me vanity and lies: give me neither
+poverty nor riches; feed me with food convenient for me:
+Lest I be full, and deny thee, and say, Who is the LORD? or
+lest I be poor, and steal, and take the name of my God in vain.
+%%
+Understanding is a wellspring of life unto him that hath
+it: but the instruction of fools is folly.
+%%
+Unix soit qui mal y pense.
+%%
+Unquestionably, there is progress. The average American
+now pays out twice as much in taxes as he formerly got in
+wages.
+%%
+Unto you, O men, I call; and my voice is to the sons of
+man.
+%%
+Use GOTOs only to implement a fundamental structure.
+%%
+Use IF...ELSE IF...ELSE IF...ELSE... to implement
+multi-way branches.
+%%
+Use debugging compilers.
+%%
+Use free-form input where possible.
+%%
+Use library functions.
+%%
+Vests are to suits as seat-belts are to cars.
+%%
+Volcano -- a mountain with hiccups.
+%%
+Wag your tongue as much as you please, but don't wave your
+gun. -- Russian proverb
+%%
+Walk softly and carry a big stick. -- Theodore Roosevelt
+%%
+Wash a pig as much as you like, it'll go right back into
+the mud puddle. -- Russian proverb
+%%
+Waste not, get your budget cut next year.
+%%
+Watch out for off-by-one errors.
+%%
+We all know that no one understands anything that isn't
+funny.
+%%
+We always might win ... because the others might lose.
+%%
+We are all related: the same sun dries our rags. -- Russian
+proverb
+%%
+We are always the same age inside.
+%%
+We could do that, but it would be wrong, that's for sure.
+%%
+We give advice, but we cannot give the wisdom to profit by
+it.
+%%
+We learn from history that we do not learn anything from
+history.
+%%
+We must remember the First Amendment which protects any
+shrill jackass no matter how self-seeking.
+%%
+Wealth gotten by vanity shall be diminished: but he that
+gathereth by labour shall increase.
+%%
+Wealth maketh many friends; but the poor is separated from
+his neighbour.
+%%
+What garlic is to salad, insanity is to art.
+%%
+What good is honor on an empty stomach? -- Russian proverb
+%%
+What is wanted is not the will-to-believe, but the
+wish-to-find-out, which are exact opposites.
+%%
+What sin has not been committed in the name of efficiency?
+%%
+What this country needs is a good five cent microcomputer.
+%%
+What you don't know can't hurt you.
+%%
+What, my son? and what, the son of my womb? and what, the
+son of my vows? Give not thy strength unto women, nor thy
+ways to that which destroyeth kings.
+%%
+When a man assumes a public trust, he should consider
+himself as public property. -- Thomas Jefferson
+%%
+When a man's ways please the LORD, he maketh even his
+enemies to be at peace with him.
+%%
+When a wicked man dieth, his expectation shall perish: and
+the hope of unjust men perisheth.
+%%
+When choosing between two evils, always try the one you
+have never tried before.
+%%
+When he prepared the heavens, I was there: when he set a
+compass upon the face of the depth: When he established the
+clouds above: when he strengthened the fountains of the
+deep: When he gave to the sea his decree, that the waters
+should not pass his commandment: when he appointed the
+foundations of the earth: Then I was by him, as one brought up with
+him: and I was daily his delight, rejoicing always before
+him; Rejoicing in the habitable part of his earth; and my
+delights were with the sons of men.
+%%
+When in charge, ponder; when in doubt, mumble; when in
+trouble, delegate.
+%%
+When in doubt, lead trump.
+%%
+When it goeth well with the righteous, the city rejoiceth:
+and when the wicked perish, there is shouting.
+%%
+When pride cometh, then cometh shame: but with the lowly is
+wisdom.
+%%
+When righteous men do rejoice, there is great glory: but
+when the wicked rise, a man is hidden.
+%%
+When the righteous are in authority, the people rejoice:
+but when the wicked beareth rule, the people mourn.
+%%
+When the scorner is punished, the simple is made wise: and
+when the wise is instructed, he receiveth knowledge.
+%%
+When the sheath is broken, you can't hide the sword. --
+Russian proverb
+%%
+When the wicked are multiplied, transgression increaseth:
+but the righteous shall see their fall.
+%%
+When the wicked cometh, then cometh also contempt, and with
+ignominy reproach.
+%%
+When the wicked rise, men hide themselves: but when they
+perish, the righteous increase.
+%%
+When the wind is great, bow before it; when the wind is
+heavy, yield to it.
+%%
+When there were no depths, I was brought forth; when there
+were no fountains abounding with water.
+%%
+When thou goest, it shall lead thee; when thou sleepest, it
+shall keep thee; and when thou awakest, it shall talk with
+thee.
+%%
+When thou goest, thy steps shall not be straitened; and
+when thou runnest, thou shalt not stumble.
+%%
+When thou liest down, thou shalt not be afraid: yea, thou
+shalt lie down, and thy sleep shall be sweet.
+%%
+When thou sittest to eat with a ruler, consider diligently
+what is before thee: And put a knife to thy throat, if thou
+be a man given to appetite.
+%%
+When we write programs that "learn," it turns out that we
+do and they don't.
+%%
+When wisdom entereth into thine heart, and knowledge is
+pleasant unto thy soul; Discretion shall preserve thee,
+understanding shall keep thee: To deliver thee from the way of
+the evil man, from the man that speaketh froward things; Who
+leave the paths of uprightness, to walk in the ways of
+darkness; Who rejoice to do evil, and delight in the
+frowardness of the wicked; Whose ways are crooked, and they froward
+in their paths: To deliver thee from the strange woman, even
+from the stranger which flattereth with her words; Which
+forsaketh the guide of her youth, and forgetteth the
+covenant of her God.
+%%
+When you live close to the graveyard, you can't weep for
+every funeral. -- Russian proverb
+%%
+When your only tool is a hammer, you tend to treat
+everything you find like a nail.
+%%
+Where no counsel is, the people fall: but in the multitude
+of counsellors there is safety.
+%%
+Where no oxen are, the crib is clean: but much increase is
+by the strength of the ox.
+%%
+Where the system is concerned, you're not allowed to ask
+"Why?".
+%%
+Where there is no vision, the people perish: but he that
+keepeth the law, happy is he.
+%%
+Wherefore is there a price in the hand of a fool to get
+wisdom, seeing he hath no heart to it? A friend loveth at all
+times, and a brother is born for adversity.
+%%
+Who are you?
+%%
+Who can find a virtuous woman? for her price is far above
+rubies.
+%%
+Who can say, I have made my heart clean, I am pure from my
+sin? Divers weights, and divers measures, both of them are
+alike abomination to the LORD.
+%%
+Who hath ascended up into heaven, or descended? who hath
+gathered the wind in his fists? who hath bound the waters in
+a garment? who hath established all the ends of the earth?
+what is his name, and what is his son's name, if thou canst
+tell? Every word of God is pure: he is a shield unto them
+that put their trust in him.
+%%
+Who hath woe? who hath sorrow? who hath contentions? who
+hath babbling? who hath wounds without cause? who hath
+redness of eyes? They that tarry long at the wine; they that go
+to seek mixed wine.
+%%
+Whose hatred is covered by deceit, his wickedness shall be
+shewed before the whole congregation.
+%%
+Whoso boasteth himself of a false gift is like clouds and
+wind without rain.
+%%
+Whoso causeth the righteous to go astray in an evil way, he
+shall fall himself into his own pit: but the upright shall
+have good things in possession.
+%%
+Whoso curseth his father or his mother, his lamp shall be
+put out in obscure darkness.
+%%
+Whoso despiseth the word shall be destroyed: but he that
+feareth the commandment shall be rewarded.
+%%
+Whoso diggeth a pit shall fall therein: and he that rolleth
+a stone, it will return upon him.
+%%
+Whoso findeth a wife findeth a good thing, and obtaineth
+favour of the LORD.
+%%
+Whoso is partner with a thief hateth his own soul: he
+heareth cursing, and bewrayeth it not.
+%%
+Whoso keepeth his mouth and his tongue keepeth his soul
+from troubles.
+%%
+Whoso keepeth the fig tree shall eat the fruit thereof: so
+he that waiteth on his master shall be honoured.
+%%
+Whoso keepeth the law is a wise son: but he that is a
+companion of riotous men shameth his father.
+%%
+Whoso loveth instruction loveth knowledge: but he that
+hateth reproof is brutish.
+%%
+Whoso loveth wisdom rejoiceth his father: but he that
+keepeth company with harlots spendeth his substance.
+%%
+Whoso mocketh the poor reproacheth his Maker: and he that
+is glad at calamities shall not be unpunished.
+%%
+Whoso rewardeth evil for good, evil shall not depart from
+his house.
+%%
+Whoso robbeth his father or his mother, and saith, It is no
+transgression; the same is the companion of a destroyer.
+%%
+Whoso stoppeth his ears at the cry of the poor, he also
+shall cry himself, but shall not be heard.
+%%
+Whoso walketh uprightly shall be saved: but he that is
+perverse in his ways shall fall at once.
+%%
+Whosoever hideth her hideth the wind, and the ointment of
+his right hand, which bewrayeth itself.
+%%
+Wilt thou set thine eyes upon that which is not? for riches
+certainly make themselves wings; they fly away as an eagle
+toward heaven.
+%%
+Wine is a mocker, strong drink is raging: and whosoever is
+deceived thereby is not wise.
+%%
+Wisdom crieth without; she uttereth her voice in the
+streets: She crieth in the chief place of concourse, in the
+openings of the gates: in the city she uttereth her words,
+saying, How long, ye simple ones, will ye love simplicity? and
+the scorners delight in their scorning, and fools hate
+knowledge? Turn you at my reproof: behold, I will pour out my
+spirit unto you, I will make known my words unto you.
+%%
+Wisdom hath builded her house, she hath hewn out her seven
+pillars: She hath killed her beasts; she hath mingled her
+wine; she hath also furnished her table.
+%%
+Wisdom is before him that hath understanding; but the eyes
+of a fool are in the ends of the earth.
+%%
+Wisdom is the principal thing; therefore get wisdom: and
+with all thy getting get understanding.
+%%
+Wisdom is too high for a fool: he openeth not his mouth in
+the gate.
+%%
+Wisdom resteth in the heart of him that hath understanding:
+but that which is in the midst of fools is made known.
+%%
+Wise men lay up knowledge: but the mouth of the foolish is
+near destruction.
+%%
+With clothes the new are best, with friends the old are
+best.
+%%
+With her much fair speech she caused him to yield, with the
+flattering of her lips she forced him.
+%%
+Withdraw thy foot from thy neighbour's house; lest he be
+weary of thee, and so hate thee.
+%%
+Withhold not correction from the child: for if thou beatest
+him with the rod, he shall not die.
+%%
+Withhold not good from them to whom it is due, when it is
+in the power of thine hand to do it.
+%%
+Within a computer, natural language is unnatural.
+%%
+Without adventure, civilization is in full decay.
+%%
+Without counsel purposes are disappointed: but in the
+multitude of counsellors they are established.
+%%
+Words are the voice of the heart.
+%%
+Words must be weighed, not counted.
+%%
+Work is the curse of the drinking class.
+%%
+Wrath is cruel, and anger is outrageous; but who is able to
+stand before envy? Open rebuke is better than secret love.
+%%
+Writing free verse is like playing tennis with the net
+down.
+%%
+Yea, my reins shall rejoice, when thy lips speak right
+things.
+%%
+Yea, thou shalt be as he that lieth down in the midst of
+the sea, or as he that lieth upon the top of a mast.
+%%
+Yet a little sleep, a little slumber, a little folding of
+the hands to sleep: So shall thy poverty come as one that
+travelleth; and thy want as an armed man.
+%%
+You are being paged.
+%%
+You are being swapped.
+%%
+You are clever, but it comes slowly -- all the way from the
+back of your head. -- Russian proverb
+%%
+You are going to have a new love affair.
+%%
+You are in a maze of twisty little passages, all alike.
+%%
+You attempt things that you do not even plan because of
+your extreme stupidity.
+%%
+You can do more with a kind word and a gun than you can
+with only a kind word.
+%%
+You can't depend on the man who made the mess to clean it
+up. -- Richard Nixon [1952]
+%%
+You can't drive straight on a twisting road. -- Russian
+proverb
+%%
+You can't go home again, unless you set $HOME.
+%%
+You can't pick a mushroom without bowing. -- Russian
+proverb
+%%
+You cannot kill time without injuring eternity.
+%%
+You do not have mail.
+%%
+You don't have to rehearse to be yourself.
+%%
+You don't want to know what I know.
+%%
+You fill a much-needed gap.
+%%
+You have a deep interest in all that is artistic.
+%%
+You have a tendency to feel you are superior to most
+computers.
+%%
+You have an ambitious nature and may make a name for
+yourself.
+%%
+You have been selected for a secret mission.
+%%
+You have been swapped out.
+%%
+You have mail.
+%%
+You look tired.
+%%
+You never get a hangover from other people's vodka. --
+Russian proverb
+%%
+You now have Asian Flu.
+%%
+You should go home.
+%%
+You will attract cultured and artistic people to your home.
+%%
+You will be advanced socially, without any special effort
+on your part.
+%%
+You will be recognized and honored as a community leader.
+%%
+You will be surprised by a loud noise.
+%%
+You will feel hungry again in another hour.
+%%
+You will live a long, healthy, happy life and make bags of
+money.
+%%
+You will never know hunger.
+%%
+You will reach the highest possible point in your business
+or profession.
+%%
+You will step on the night soil of many countries.
+%%
+You'll be called to a post requiring high ability in
+handling groups of people.
+%%
+You'll be sent to Siberia to count the birches. -- Russian
+proverb
+%%
+Your business will go through a period of considerable
+expansion.
+%%
+Your code should be more efficient!
+%%
+Your computer account is overdrawn. Please reauthorize.
+%%
+Your education begins where what is called your education
+is over.
+%%
+Your empty file directory has been deleted.
+%%
+Your ignorance cramps my conversation.
+%%
+Your mind understands what you have been taught; your
+heart, what is true.
+%%
+Your salary will be increased.
+%%
+Your supervisor is thinking about you.
+%%
+Youth is the trustee of posterity.
--- /dev/null
+-bap -nbacc -bad -nbc -br -bs
+-c33 -cd33 -ncdb -ce
+-d0 -di12
+-neei
+-fc1
+-i8 -ip8
+-l79 -lp
+-npcs -psl
+-nsc -nsob
+-cli8 -cs -cp1
--- /dev/null
+# put this in your $OPENWINHOME/lib, usually $OPENWINHOME is /usr/openwin
+
+ "Screensaver" TITLE PIN
+ "Cellular-Automata" MENU
+ "Automata" TITLE
+ "Ant" exec xlock -nolock -mode ant -neighbors 4 +truchet
+ "Ant Truchet" exec xlock -nolock -mode ant -neighbors 4 -truchet
+ "Bee" exec xlock -nolock -mode ant -neighbors 6 +truchet
+ "Bee Truchet" exec xlock -nolock -mode ant -neighbors 6 -truchet
+ "Bug" exec xlock -nolock -mode bug
+ "Demon" exec xlock -nolock -mode demon
+ "Life" exec xlock -nolock -mode life
+ "Life1d" exec xlock -nolock -mode life1d
+ "Life3d" exec xlock -nolock -mode life3d
+ "Loop" exec xlock -nolock -mode loop
+ "Voters" exec xlock -nolock -mode voters
+ "Wator" exec xlock -nolock -mode wator
+ "Wire" exec xlock -nolock -mode wire
+ "Random Automata" DEFAULT exec xlock -nolock -mode random -modelist ant,bug,demon,life,life1d,life3d,loop,voters,wator,wire -fullrandom -neighbors 0
+ "Cellular-Automata" END
+ "Fractal" MENU
+ "Fractal" TITLE
+ "Drift" exec xlock -nolock -mode drift -fullrandom
+ "Flame" exec xlock -nolock -mode flame
+ "Forest" exec xlock -nolock -mode forest
+ "Fract" exec xlock -nolock -mode fract
+ "Julia" exec xlock -nolock -mode julia
+ "Hop" exec xlock -nolock -mode hop -fullrandom
+ "IFS" exec xlock -nolock -mode ifs
+ "Lightning" exec xlock -nolock -mode lightning
+ "Mountain" exec xlock -nolock -mode mountain
+ "Sierpinski" exec xlock -nolock -mode sierpinski
+ "Strange" exec xlock -nolock -mode strange
+ "Triangle" exec xlock -nolock -mode triangle
+ "Turtle" exec xlock -nolock -mode turtle
+ "Random Fractal" DEFAULT exec xlock -nolock -mode random -modelist drift,flame,forest,fract,hop,ifs,julia,lightning,mountain,sierpinski,strange,triangle,turtle -fullrandom
+ "Fractal" END
+ "Geometry" MENU
+ "Geometry" TITLE
+ "Braid" exec xlock -nolock -mode braid
+ "Geometry" exec xlock -nolock -mode geometry
+ "Helix" exec xlock -nolock -mode helix -fullrandom
+ "Hyper" exec xlock -nolock -mode hyper
+ "Ico" exec xlock -nolock -mode ico
+ "Kaleid" exec xlock -nolock -mode kaleid
+ "Laser" exec xlock -nolock -mode laser
+ "Lisa" exec xlock -nolock -mode lisa
+ "Lissie" exec xlock -nolock -mode lissie
+ "Penrose" exec xlock -nolock -mode penrose +ammann
+ "Penrose Ammann" exec xlock -nolock -mode penrose -ammann
+ "Petal" exec xlock -nolock -mode petal
+ "Qix" exec xlock -nolock -mode qix
+ "Shape" exec xlock -nolock -mode shape
+ "Sphere" exec xlock -nolock -mode sphere
+ "Spiral" exec xlock -nolock -mode spiral
+ "Spline" exec xlock -nolock -mode spline
+ "Random Geometry" DEFAULT exec xlock -nolock -mode random -modelist braid,geometry,helix,hyper,ico,kaleid,laser,lisa,lissie,penrose,petal,qix,shape,sphere,spiral,spline -fullrandom
+ "Geometry" END
+ "Space" MENU
+ "Space" TITLE
+ "Bouboule" exec xlock -nolock -mode bouboule +use3d
+ "Bouboule3d" exec xlock -nolock -mode bouboule -use3d
+ "Galaxy" exec xlock -nolock -mode galaxy
+ "Grav" exec xlock -nolock -mode grav +trail +decay
+ "Grav Trail" exec xlock -nolock -mode grav -trail
+ "Grav Decay" exec xlock -nolock -mode grav -decay
+ "Rock" exec xlock -nolock -mode star -rock +use3d -trek 0
+ "Star" exec xlock -nolock -mode star +rock +use3d -trek 0
+ "Star3d" exec xlock -nolock -mode star -use3d
+ "Star Trek" exec xlock -nolock -mode star -trek 100
+ "World" exec xlock -nolock -mode world
+ "Random Space" DEFAULT exec xlock -nolock -mode random -modelist bouboule,galaxy,grav,star,world -fullrandom
+ "Space" END
+ "Assorted" MENU
+ "Assorted" TITLE
+ "Ball" exec xlock -nolock -mode ball
+ "Bat" exec xlock -nolock -mode bat
+ "Blot" exec xlock -nolock -mode blot
+ "Bounce" exec xlock -nolock -mode bounce
+ "Cartoon" exec xlock -nolock -mode cartoon
+ "Clock" exec xlock -nolock -mode clock
+ "Crystal" exec xlock -nolock -mode crystal
+ "Daisy" exec xlock -nolock -mode daisy
+ "Dclock" exec xlock -nolock -mode dclock
+ "Eyes" exec xlock -nolock -mode eyes
+ "Flag" exec xlock -nolock -mode flag
+ "Image" exec xlock -nolock -mode image
+ "Marquee" exec xlock -nolock -mode marquee
+ "Maze" exec xlock -nolock -mode maze
+ "Nose" exec xlock -nolock -mode nose
+ "Pacman" exec xlock -nolock -mode pacman
+ "Puzzle" DEFAULT exec xlock -nolock -mode puzzle
+ "Pyro" exec xlock -nolock -mode pyro +use3d
+ "Pyro3d" exec xlock -nolock -mode pyro -use3d
+ "Roll" exec xlock -nolock -mode roll
+ "Rotor" exec xlock -nolock -mode rotor
+ "Slip" exec xlock -nolock -mode slip
+ "Swarm" exec xlock -nolock -mode swarm
+ "Swirl" exec xlock -nolock -mode swirl -install
+ "Tube" exec xlock -nolock -mode tube -install
+ "Worm" exec xlock -nolock -mode worm +use3d
+ "Worm3d" exec xlock -nolock -mode worm -use3d
+ "Assorted" END
+ "GL" DEFAULT MENU
+ "Escher" exec xlock -nolock -mode escher
+ "Gears" exec xlock -nolock -mode gears
+ "Morph3d" exec xlock -nolock -mode morph3d
+ "Pipes" exec xlock -nolock -mode pipes
+ "Sprongies" exec xlock -nolock -mode sproingies
+ "Superquadrics" exec xlock -nolock -mode superquadrics
+ "Random GL" DEFAULT exec xlock -nolock -mode random -modelist allgl -fullrandom
+ "GL" END
+ "Marquee Messages" MENU
+ "Marquee Messages" TITLE
+ "Brilliant" exec xlock -nolock -mode marquee -message "WOW! $LOGNAME, You are Brilliant! "
+ "Love You" exec xlock -nolock -mode marquee -message "You know, I Love You $LOGNAME."
+ "Available" exec xlock -nolock -mode marquee -message "Hey, I am available now! "
+ "Marquee Messages" END
+ "Nose Messages" MENU
+ "Nose Messages" TITLE
+ "Brilliant" exec xlock -nolock -mode nose -message "WOW! $LOGNAME, You are Brilliant! "
+ "Love You" exec xlock -nolock -mode nose -message "You know, I Love You $LOGNAME."
+ "Available" exec xlock -nolock -mode nose -message "Hey, I am available now! "
+ "Nose Messages" END
+ "Special" DEFAULT MENU
+ "Special" TITLE
+ "Blank" exec xlock -nolock -mode blank
+ "Bomb" exec xlock -nolock -mode bomb
+ "Random nice" DEFAULT exec xlock -nolock -mode random -modelist allnice -fullrandom -neighbors 0
+ "Random standard" exec xlock -nolock -mode random -modelist allstandard -fullrandom -neighbors 0
+ "Random stable" exec xlock -nolock -mode random -modelist allstable -fullrandom -neighbors 0
+ "Random all" exec xlock -nolock -mode random -modelist all -fullrandom -neighbors 0
+ "Special" END
--- /dev/null
+# put this in your $OPENWINHOME/lib, usually $OPENWINHOME is /usr/openwin
+
+ "Lock Screen" TITLE PIN
+ "Cellular Automata" MENU
+ "Automata" TITLE
+ "Ant" exec xlock -mode ant -neighbors 4 +truchet
+ "Ant Truchet" exec xlock -mode ant -neighbors 4 -truchet
+ "Bee" exec xlock -mode ant -neighbors 6 +truchet
+ "Bee Truchet" exec xlock -mode ant -neighbors 6 -truchet
+ "Bug" exec xlock -mode bug
+ "Demon" exec xlock -mode demon
+ "Life" exec xlock -mode life
+ "Life1d" exec xlock -mode life1d
+ "Life3d" exec xlock -mode life3d
+ "Loop" exec xlock -mode loop
+ "Voters" exec xlock -mode voters
+ "Wator" exec xlock -mode wator
+ "Wire" exec xlock -mode wire
+ "Random Automata" DEFAULT exec xlock -mode random -modelist ant,bug,demon,life,life1d,life3d,loop,voters,wator,wire -fullrandom -neighbors 0
+ "Cellular Automata" END
+ "Fractal" MENU
+ "Fractal" TITLE
+ "Drift" exec xlock -mode drift -fullrandom
+ "Flame" exec xlock -mode flame
+ "Forest" exec xlock -mode forest
+ "Fract" exec xlock -mode fract
+ "Hop" exec xlock -mode hop -fullrandom
+ "IFS" exec xlock -mode ifs
+ "Julia" exec xlock -mode julia
+ "Lightning" exec xlock -mode lightning
+ "Mountain" exec xlock -mode mountain
+ "Sierpinski" exec xlock -mode sierpinski
+ "Strange" exec xlock -mode strange
+ "Triangle" exec xlock -mode triangle
+ "Turtle" exec xlock -mode turtle
+ "Random Fractal" DEFAULT exec xlock -mode random -modelist drift,flame,forest,fract,hop,ifs,julia,lightning,mountain,sierpinski,strange,triangle,turtle -fullrandom
+ "Fractal" END
+ "Geometry" MENU
+ "Geometry" TITLE
+ "Braid" exec xlock -mode braid
+ "Geometry" exec xlock -mode geometry
+ "Helix" exec xlock -mode helix -fullrandom
+ "Hyper" exec xlock -mode hyper
+ "Ico" exec xlock -mode ico
+ "Kaleid" exec xlock -mode kaleid
+ "Laser" exec xlock -mode laser
+ "Lisa" exec xlock -mode lisa
+ "Lissie" exec xlock -mode lissie
+ "Penrose" exec xlock -mode penrose +ammann
+ "Penrose Ammann" exec xlock -mode penrose -ammann
+ "Petal" exec xlock -mode petal
+ "Qix" exec xlock -mode qix
+ "Shape" exec xlock -mode shape
+ "Sphere" exec xlock -mode sphere
+ "Spiral" exec xlock -mode spiral
+ "Spline" exec xlock -mode spline
+ "Random Geometry" DEFAULT exec xlock -mode random -modelist braid,geometry,helix,hyper,ico,kaleid,laser,lisa,lissie,penrose,petal,qix,shape,sphere,spiral,spline -fullrandom
+ "Geometry" END
+ "Space" MENU
+ "Space" TITLE
+ "Bouboule" exec xlock -mode bouboule +use3d
+ "Bouboule3d" exec xlock -mode bouboule -use3d
+ "Galaxy" exec xlock -mode galaxy
+ "Grav" exec xlock -mode grav +trail +grav
+ "Grav Trail" exec xlock -mode grav -trail
+ "Grav Decay" exec xlock -mode grav -grav
+ "Rock" exec xlock -mode star -rock
+ "Star" exec xlock -mode star +rock +use3d -trek 0
+ "Star3d" exec xlock -mode star -use3d
+ "Star Trek" exec xlock -mode star -trek 100
+ "World" exec xlock -mode world
+ "Random Space" DEFAULT exec xlock -mode random -modelist bouboule,galaxy,grav,star,world -fullrandom
+ "Space" END
+ "Assorted" MENU
+ "Assorted" TITLE
+ "Ball" exec xlock -mode ball
+ "Bat" exec xlock -mode bat
+ "Blot" exec xlock -mode blot
+ "Bounce" exec xlock -mode bounce
+ "Cartoon" exec xlock -mode cartoon
+ "Clock" exec xlock -mode clock
+ "Crystal" exec xlock -mode crystal
+ "Daisy" exec xlock -mode daisy
+ "Dclock" exec xlock -mode dclock
+ "Eyes" exec xlock -mode eyes
+ "Flag" exec xlock -mode flag
+ "Image" exec xlock -mode image
+ "Marquee" exec xlock -mode marquee
+ "Maze" exec xlock -mode maze
+ "Nose" exec xlock -mode nose
+ "Pacman" exec xlock -mode pacman
+ "Puzzle" DEFAULT exec xlock -mode puzzle
+ "Pyro" exec xlock -mode pyro +use3d
+ "Pyro3d" exec xlock -mode pyro -use3d
+ "Roll" exec xlock -mode roll
+ "Rotor" exec xlock -mode rotor
+ "Slip" exec xlock -mode slip
+ "Swarm" exec xlock -mode swarm
+ "Swirl" exec xlock -mode swirl -install
+ "Tube" exec xlock -mode tube -install
+ "Worm" exec xlock -mode worm +use3d
+ "Worm3d" exec xlock -mode worm -use3d
+ "Assorted" END
+ "GL" MENU
+ "GL" TITLE
+ "Escher" exec xlock -mode escher
+ "Gears" exec xlock -mode gears
+ "Morph3d" exec xlock -mode morph3d
+ "Pipes" exec xlock -mode pipes
+ "Sproingies" exec xlock -mode sproingies
+ "Superquadrics" exec xlock -mode superquadrics
+ "Random GL" DEFAULT exec xlock -mode random -modelist allgl -fullrandom
+ "GL" END
+ "Marquee Messages" MENU
+ "Marquee Messages" TITLE
+ "Back Soon" DEFAULT exec xlock -mode marquee -message "$LOGNAME will be back soon."
+ "Overnight" exec xlock -mode marquee -message "$LOGNAME will be back in the morning."
+ "Rude" exec xlock -mode marquee -message "$LOGNAME not here, please go away! "
+ "Marquee Messages" END
+ "Nose Messages" MENU
+ "Nose Messages" TITLE
+ "Back Soon" DEFAULT exec xlock -mode nose -message "$LOGNAME will be back soon."
+ "Overnight" exec xlock -mode nose -message "$LOGNAME will be back in the morning."
+ "Rude" exec xlock -mode nose -message "$LOGNAME not here, please go away! "
+ "Nose Messages" END
+ "Special" DEFAULT MENU
+ "Special" TITLE
+ "Blank" exec xlock -mode blank
+ "Bomb" exec xlock -mode bomb
+ "Random nice" DEFAULT exec xlock -mode random -modelist allnice -fullrandom -neighbors 0
+ "Random standard" exec xlock -mode random -modelist allstandard -fullrandom -neighbors 0
+ "Random stable" exec xlock -mode random -modelist allstable -fullrandom -neighbors 0
+ "Random all" exec xlock -mode random -modelist all -fullrandom -neighbors 0
+ "Special" END
--- /dev/null
+#!/bin/sh
+cat $1 > /dev/audio
--- /dev/null
+/usr/local/sounds/complete.au
+/usr/local/sounds/identify-please.au
+/usr/local/sounds/not-programmed.au
+/usr/local/sounds/thank-you.au
--- /dev/null
+# replace the appropriate stuff in your system.fvwmrc with this stuff
+# My system.fvwmrc is in /usr/lib/X11/fvwm
+# This is for fvwm <=1.24r
+# For -install to work right you must disable it before fvwm is compiled
+# see README
+
+Popup "Automata-Saver"
+ Title "Automata-Saver"
+ Exec "Ant" exec xlock -nolock -mode ant -neighbors 4 +truchet &
+ Exec "Ant Truchet" exec xlock -nolock -mode ant -neighbors 4 -truchet &
+ Exec "Bee" exec xlock -nolock -mode ant -neighbors 6 +truchet &
+ Exec "Bee Truchet" exec xlock -nolock -mode ant -neighbors 6 -truchet &
+ Exec "Bug" exec xlock -nolock -mode bug &
+ Exec "Demon" exec xlock -nolock -mode demon &
+ Exec "Life" exec xlock -nolock -mode life &
+ Exec "Life1d" exec xlock -nolock -mode life1d &
+ Exec "Life3d" exec xlock -nolock -mode life3d &
+ Exec "Loop" exec xlock -nolock -mode loop &
+ Exec "Voters" exec xlock -nolock -mode voters &
+ Exec "Wator" exec xlock -nolock -mode wator &
+ Exec "Wire" exec xlock -nolock -mode wire &
+ Exec "Random Automata" exec xlock -nolock -mode random -modelist ant,bug,demon,life,life1d,life3d,loop,voters,wator,wire -fullrandom -neighbors 0 &
+
+EndPopup
+
+Popup "Fractal-Saver"
+ Title "Fractal-Saver"
+ Exec "Drift" exec xlock -nolock -mode drift -fullrandom &
+ Exec "Flame" exec xlock -nolock -mode flame &
+ Exec "Forest" exec xlock -nolock -mode forest &
+ Exec "Fract" exec xlock -nolock -mode fract &
+ Exec "Hop" exec xlock -nolock -mode hop -fullrandom &
+ Exec "IFS" exec xlock -nolock -mode ifs &
+ Exec "Julia" exec xlock -nolock -mode julia &
+ Exec "Lightning" exec xlock -nolock -mode lightning &
+ Exec "Mountain" exec xlock -nolock -mode mountain &
+ Exec "Sierpinski" exec xlock -nolock -mode sierpinski &
+ Exec "Strange" exec xlock -nolock -mode strange &
+ Exec "Triangle" exec xlock -nolock -mode triangle &
+ Exec "Turtle" exec xlock -nolock -mode turtle &
+ Exec "Random Fractal" exec xlock -nolock -mode random -modelist flame,forest,forest,hop,ifs,julia,lightning,mountain,sierpinski,strange,triangle,turtle -fullrandom &
+EndPopup
+
+Popup "Geometry-Saver"
+ Title "Geometry-Saver"
+ Exec "Braid" exec xlock -nolock -mode braid &
+ Exec "Geometry" exec xlock -nolock -mode geometry &
+ Exec "Helix" exec xlock -nolock -mode helix -fullrandom &
+ Exec "Hyper" exec xlock -nolock -mode hyper &
+ Exec "Ico" exec xlock -nolock -mode ico &
+ Exec "Kaleid" exec xlock -nolock -mode kaleid &
+ Exec "Laser" exec xlock -nolock -mode laser &
+ Exec "Lisa" exec xlock -nolock -mode lisa &
+ Exec "Lissie" exec xlock -nolock -mode lissie &
+ Exec "Penrose" exec xlock -nolock -mode penrose +ammann &
+ Exec "Penrose Ammann" exec xlock -nolock -mode penrose -ammann &
+ Exec "Petal" exec xlock -nolock -mode petal &
+ Exec "Qix" exec xlock -nolock -mode qix &
+ Exec "Rotor" exec xlock -nolock -mode rotor &
+ Exec "Shape" exec xlock -nolock -mode shape &
+ Exec "Sphere" exec xlock -nolock -mode sphere &
+ Exec "Spiral" exec xlock -nolock -mode spiral &
+ Exec "Spline" exec xlock -nolock -mode spline &
+ Exec "Random Geometry" exec xlock -nolock -mode random -modelist braid,geometry,helix,hyper,ico,kaleid,laser,lisa,lissie,penrose,petal,qix,shape,sphere,spiral,spline -fullrandom &
+EndPopup
+
+Popup "Space-Saver"
+ Title "Space-Saver"
+ Exec "Bouboule" exec xlock -nolock -mode bouboule +use3d &
+ Exec "Bouboule3d" exec xlock -nolock -mode bouboule -use3d &
+ Exec "Galaxy" exec xlock -nolock -mode galaxy &
+ Exec "Grav" exec xlock -nolock -mode grav +trail +decay &
+ Exec "Grav Trail" exec xlock -nolock -mode grav -trail &
+ Exec "Grav Decay" exec xlock -nolock -mode grav -decay &
+ Exec "Rock" exec xlock -nolock -mode star -rock &
+ Exec "Star" exec xlock -nolock -mode star +rock +use3d +trek 0 &
+ Exec "Star3d" exec xlock -nolock -mode star -use3d &
+ Exec "Star Trek" exec xlock -nolock -mode star -trek 100 &
+ Exec "World" exec xlock -nolock -mode world &
+ Exec "Random Space" exec xlock -nolock -mode random -modelist bouboule,galaxy,grav,star,world -fullrandom &
+EndPopup
+
+Popup "Assorted-Saver"
+ Title "Assorted-Saver"
+ Exec "Ball" exec xlock -nolock -mode ball &
+ Exec "Bat" exec xlock -nolock -mode bat &
+ Exec "Blot" exec xlock -nolock -mode blot &
+ Exec "Bounce" exec xlock -nolock -mode bounce &
+ Exec "Cartoon" exec xlock -nolock -mode cartoon &
+ Exec "Clock" exec xlock -nolock -mode clock &
+ Exec "Crystal" exec xlock -nolock -mode crystal &
+ Exec "Daisy" exec xlock -nolock -mode daisy &
+ Exec "Dclock" exec xlock -nolock -mode dclock &
+ Exec "Eyes" exec xlock -nolock -mode eyes &
+ Exec "Flag" exec xlock -nolock -mode flag &
+ Exec "Image" exec xlock -nolock -mode image &
+ Exec "Marquee" exec xlock -nolock -mode marquee &
+ Exec "Maze" exec xlock -nolock -mode maze &
+ Exec "Nose" exec xlock -nolock -mode nose &
+ Exec "Pacman" exec xlock -nolock -mode pacman &
+ Exec "Puzzle" exec xlock -nolock -mode puzzle &
+ Exec "Pyro" exec xlock -nolock -mode pyro +use3d &
+ Exec "Pyro3d" exec xlock -nolock -mode pyro -use3d &
+ Exec "Roll" exec xlock -nolock -mode roll &
+ Exec "Slip" exec xlock -nolock -mode slip &
+ Exec "Swarm" exec xlock -nolock -mode swarm &
+ Exec "Swirl" exec xlock -nolock -mode swirl -install &
+ Exec "Tube" exec xlock -nolock -mode tube -install &
+ Exec "Worm" exec xlock -nolock -mode worm +use3d &
+ Exec "Worm3d" exec xlock -nolock -mode worm -use3d &
+EndPopup
+
+Popup "GL-Saver"
+ Exec "Escher" exec xlock -nolock -mode escher &
+ Exec "Gears" exec xlock -nolock -mode gears &
+ Exec "Morph3d" exec xlock -nolock -mode morph3d &
+ Exec "Pipes" exec xlock -nolock -mode pipes &
+ Exec "Sproingies" exec xlock -nolock -mode sproingies &
+ Exec "Superquadrics" exec xlock -nolock -mode superquadrics &
+ Exec "Random GL" exec xlock -nolock -mode random -modelist allgl -fullrandom &
+EndPopup
+
+Popup "Marquee-Message-Saver"
+ Title "Marquee-Message-Saver"
+ Exec "Brilliant" exec xlock -nolock -mode marquee -message "WOW! $LOGNAME, You are Brilliant! " &
+ Exec "Love You" exec xlock -mode marquee -message "You know, I Love You $LOGNAME." &
+ Exec "Available" exec xlock -mode marquee -message "Hey, I am available now! " &
+EndPopup
+
+Popup "Nose-Message-Saver"
+ Title "Nose-Message-Saver"
+ Exec "Brilliant!" exec xlock -mode nose -message "WOW! $LOGNAME, You are Briilliant! "
+ Exec "Love You" exec xlock -mode nose -message "You know, I Love You $LOGNAME." &
+ Exec "Available" exec xlock -mode nose -message "Hey, I am available now! " &
+EndPopup
+
+Popup "Special-Saver"
+ Title "Special-Saver"
+ Exec "Blank" exec xlock -nolock -mode blank &
+ Exec "Bomb" exec xlock -nolock -mode bomb &
+ Exec "Random nice" exec xlock -nolock -mode random -modelist allnice -fullrandom -neighbors 0 &
+ Exec "Random standard" exec xlock -nolock -mode random -modelist allstandard -fullrandom -neighbors 0 &
+ Exec "Random stable" exec xlock -nolock -mode random -modelist allstable -fullrandom -neighbors 0 &
+ Exec "Random all" exec xlock -nolock -mode random -modelist all -fullrandom -neighbors 0 &
+EndPopup
+
+Popup "Screensaver"
+ Title "Screensaver"
+ Popup "Cellular Automata" Automata-Saver
+ Nop ""
+ Popup "Fractal" Fractal-Saver
+ Nop ""
+ Popup "Geometry" Geometry-Saver
+ Nop ""
+ Popup "Space" Space-Saver
+ Nop ""
+ Popup "Assorted" Assorted-Saver
+ Nop ""
+ Popup "GL" GL-Saver
+ Nop ""
+ Popup "Marquee Message" Marquee-Message-Saver
+ Nop ""
+ Popup "Nose Message" Nose-Message-Saver
+ Nop ""
+ Popup "Special" Special-Saver
+EndPopup
+
+Popup "Automata-Lock"
+ Title "Automata-Lock"
+ Exec "Ant" exec xlock -mode ant -neighbors 4 +truchet &
+ Exec "Ant Truchet" exec xlock -mode ant -neighbors 4 -truchet & Exec "Bee" exec xlock -mode ant -neighbors 6 +truchet &
+ Exec "Bee Truchet" exec xlock -mode ant -neighbors 6 -truchet &
+ Exec "Bug" exec xlock -mode bug &
+ Exec "Demon" exec xlock -mode demon &
+ Exec "Life" exec xlock -mode life &
+ Exec "Life1d" exec xlock -mode life1d &
+ Exec "Life3d" exec xlock -mode life3d &
+ Exec "Loop" exec xlock -mode loop &
+ Exec "Voters" exec xlock -mode voters &
+ Exec "Wator" exec xlock -mode wator &
+ Exec "Wire" exec xlock -mode wire &
+ Exec "Random Automata" exec xlock -mode random -modelist ant,bug,demon,life,life1d,life3d,loop,voters,wator,wire -fullrandom -neighbors 0 &
+EndPopup
+
+Popup "Fractal-Lock"
+ Title "Fractal-Lock"
+ Exec "Drift" exec xlock -mode drift -fullrandom &
+ Exec "Flame" exec xlock -mode flame &
+ Exec "Forest" exec xlock -mode forest &
+ Exec "Fract" exec xlock -mode fract &
+ Exec "Hop" exec xlock -mode hop -fullrandom &
+ Exec "IFS" exec xlock -mode ifs &
+ Exec "Julia" exec xlock -mode julia &
+ Exec "Lightning" exec xlock -mode lightning &
+ Exec "Mountain" exec xlock -mode mountain &
+ Exec "Sierpinski" exec xlock -mode sierpinski &
+ Exec "Strange" exec xlock -mode strange &
+ Exec "Triangle" exec xlock -mode triangle &
+ Exec "Turtle" exec xlock -mode turtle &
+ Exec "Random Fractal" exec xlock -mode random -modelist drift,flame,forest,fract,hop,ifs,julia,lightning,mountain,sierpinski,strange,triangle,turtle -fullrandom &
+EndPopup
+
+Popup "Geometry-Lock"
+ Title "Geometry-Lock"
+ Exec "Braid" exec xlock -mode braid &
+ Exec "Geometry" exec xlock -mode geometry &
+ Exec "Helix" exec xlock -mode helix -fullrandom &
+ Exec "Hyper" exec xlock -mode hyper &
+ Exec "Ico" exec xlock -mode ico &
+ Exec "Kaleid" exec xlock -mode kaleid &
+ Exec "Laser" exec xlock -mode laser &
+ Exec "Lisa" exec xlock -mode lisa &
+ Exec "Lissie" exec xlock -mode lissie &
+ Exec "Penrose" exec xlock -mode penrose +ammann &
+ Exec "Penrose Ammann" exec xlock -mode penrose -ammann &
+ Exec "Petal" exec xlock -mode petal &
+ Exec "Qix" exec xlock -mode qix &
+ Exec "Rotor" exec xlock -mode rotor &
+ Exec "Shape" exec xlock -mode shape &
+ Exec "Sphere" exec xlock -mode sphere &
+ Exec "Spiral" exec xlock -mode spiral &
+ Exec "Spline" exec xlock -mode spline &
+ Exec "Random Geometry" exec xlock -mode random -modelist braid,geometry,helix,hyper,ico,kaleid,laser,lisa,lissie,penrose,petal,qix,shape,sphere,spiral,spline -fullrandom &
+EndPopup
+
+Popup "Space-Lock"
+ Title "Space-Lock"
+ Exec "Bouboule" exec xlock -mode bouboule +use3d &
+ Exec "Bouboule3d" exec xlock -mode bouboule -use3d &
+ Exec "Galaxy" exec xlock -mode galaxy &
+ Exec "Grav" exec xlock -mode grav +trail +decay &
+ Exec "Grav Trail" exec xlock -mode grav -trail &
+ Exec "Grav Decay" exec xlock -mode grav -decay &
+ Exec "Rock" exec xlock -mode star -rock &
+ Exec "Star" exec xlock -mode star +rock +use3d -trek 0 &
+ Exec "Star3d" exec xlock -mode star -use3d &
+ Exec "Star Trek" exec xlock -mode star -trek 100 &
+ Exec "World" exec xlock -mode world &
+ Exec "Random Space" exec xlock -mode random -modelist bouboule,galaxy,grav,star,world -fullrandom &
+EndPopup
+
+Popup "Assorted-Lock"
+ Title "Assorted-Lock"
+ Exec "Ball" exec xlock -mode ball &
+ Exec "Bat" exec xlock -mode bat &
+ Exec "Blot" exec xlock -mode blot &
+ Exec "Bounce" exec xlock -mode bounce &
+ Exec "Cartoon" exec xlock -mode cartoon &
+ Exec "Clock" exec xlock -mode clock &
+ Exec "Crystal" exec xlock -mode crystal &
+ Exec "Daisy" exec xlock -mode daisy &
+ Exec "Dclock" exec xlock -mode dclock &
+ Exec "Eyes" exec xlock -mode eyes &
+ Exec "Flag" exec xlock -mode flag &
+ Exec "Image" exec xlock -mode image &
+ Exec "Marquee" exec xlock -mode marquee &
+ Exec "Maze" exec xlock -mode maze &
+ Exec "Nose" exec xlock -mode nose &
+ Exec "Pacman" exec xlock -mode pacman &
+ Exec "Puzzle" exec xlock -mode puzzle &
+ Exec "Pyro" exec xlock -mode pyro +use3d &
+ Exec "Pyro3d" exec xlock -mode pyro -use3d &
+ Exec "Roll" exec xlock -mode roll &
+ Exec "Slip" exec xlock -mode slip &
+ Exec "Swarm" exec xlock -mode swarm &
+ Exec "Swirl" exec xlock -mode swirl -install &
+ Exec "Tube" exec xlock -mode tube -install &
+ Exec "Worm" exec xlock -mode worm +use3d &
+ Exec "Worm3d" exec xlock -mode worm -use3d &
+EndPopup
+
+Popup "GL-Lock"
+ Exec "Escher" exec xlock -mode escher &
+ Exec "Gears" exec xlock -mode gears &
+ Exec "Morph3d" exec xlock -mode morph3d &
+ Exec "Pipes" exec xlock -mode pipes &
+ Exec "Sproingies" exec xlock -mode sproingies &
+ Exec "Superquadrics" exec xlock -mode superquadrics &
+ Exec "Random GL" exec xlock -mode random -modelist allgl -fullrandom &
+EndPopup
+
+Popup "Marquee-Message-Lock"
+ Title "Marquee-Message-Lock"
+ Exec "Back Soon" exec xlock -mode marquee -message "$LOGNAME will be back soon." &
+ Exec "Overnight" exec xlock -mode marquee -message "$LOGNAME will be back in the morning." &
+ Exec "Rude" exec xlock -mode marquee -message "$LOGNAME not here, please go away! " &
+EndPopup
+
+Popup "Nose-Message-Lock"
+ Title "Nose-Message-Lock"
+ Exec "Back Soon" exec xlock -mode nose -message "$LOGNAME will be back soon."
+ Exec "Overnight" exec xlock -mode nose -message "$LOGNAME will be back in the morning." &
+ Exec "Rude" exec xlock -mode nose -message "$LOGNAME not here, please go away! " &
+EndPopup
+
+Popup "Special-Lock"
+ Title "Special-Lock"
+ Exec "Blank" exec xlock -mode blank &
+ Exec "Bomb" exec xlock -mode bomb &
+ Exec "Random nice" exec xlock -mode random -modelist allnice -fullrandom -neighbors 0 &
+ Exec "Random standard" exec xlock -mode random -modelist allstandard -fullrandom -neighbors 0 &
+ Exec "Random stable" exec xlock -mode random -modelist allstable -fullrandom -neighbors 0 &
+ Exec "Random all" exec xlock -mode random -modelist all -fullrandom -neighbors 0 &
+EndPopup
+
+Popup "Screenlock"
+ Title "Lock Screen"
+ Popup "Cellular Automata" Automata-Lock
+ Nop ""
+ Popup "Fractal" Fractal-Lock
+ Nop ""
+ Popup "Geometry" Geometry-Lock
+ Nop ""
+ Popup "Space" Space-Lock
+ Nop ""
+ Popup "Assorted" Assorted-Lock
+ Nop ""
+ Popup "GL" GL-Lock
+ Nop ""
+ Popup "Marquee Message" Marquee-Message-Lock
+ Nop ""
+ Popup "Nose Message" Nose-Message-Lock
+ Nop ""
+ Popup "Special" Special-Lock
+EndPopup
--- /dev/null
+##############################################################################
+# FVWM - F? Virtual Window Manager, Version 2.x (fvwm2) Configuration File
+# Section added April 1997 James G. Feeney <james@albion.glarp.com>
+#
+
+##############################################################################
+# Menu
+#
+AddToMenu "Automata-Lock"
++ "Automata-Lock" Title
++ "Ant" Exec xlock -mode ant -neighbors 4 +truchet
++ "Ant Truchet" Exec xlock -mode ant -neighbors 4 -truchet
++ "Bee" Exec xlock -mode ant -neighbors 6 +truchet
++ "Bee Truchet" Exec xlock -mode ant -neighbors 6 -truchet
++ "Bug" Exec xlock -mode bug
++ "Demon" Exec xlock -mode demon
++ "Life" Exec xlock -mode life
++ "Life1d" Exec xlock -mode life1d
++ "Life3d" Exec xlock -mode life3d
++ "Loop" Exec xlock -mode loop
++ "Voters" Exec xlock -mode voters
++ "Wator" Exec xlock -mode wator
++ "Wire" Exec xlock -mode wire
++ "Random" Exec xlock -mode random -modelist ant,bug,demon,life,life1d,life3d,loop,voters,wator,wire -fullrandom -neighbors 0
+
+##############################################################################
+# Menu
+#
+AddToMenu "Fractal-Lock"
++ "Fractal-Lock" Title
++ "Drift" Exec xlock -mode drift -fullrandom
++ "Flame" Exec xlock -mode flame
++ "Forest" Exec xlock -mode forest
++ "Fract" Exec xlock -mode fract
++ "Hop" Exec xlock -mode hop -fullrandom
++ "IFS" Exec xlock -mode ifs
++ "Julia" Exec xlock -mode julia
++ "Lightning" Exec xlock -mode lightning
++ "Mountain" Exec xlock -mode mountain
++ "Sierpinski" Exec xlock -mode sierpinski
++ "Strange" Exec xlock -mode strange
++ "Triangle" Exec xlock -mode triangle
++ "Turtle" Exec xlock -mode turtle
++ "Random" Exec xlock -mode random -modelist flame,forest,fract,hop,ifs,julia,lightning,mountain,sierpinski,strange,triangle,turtle -fullrandom
+
+##############################################################################
+# Menu
+#
+AddToMenu "Geometry-Lock"
++ "Geometry-Lock" Title
++ "Braid" Exec xlock -mode braid
+# "Gear" Exec xlock -mode gear
++ "Geometry" Exec xlock -mode geometry
++ "Helix" Exec xlock -mode helix -fullrandom
++ "Hyper" Exec xlock -mode hyper
++ "Ico" Exec xlock -mode ico
++ "Kaleid" Exec xlock -mode kaleid
++ "Laser" Exec xlock -mode laser
++ "Lisa" Exec xlock -mode lisa
++ "Lissie" Exec xlock -mode lissie
++ "Penrose" Exec xlock -mode penrose +ammann
++ "Penrose Ammann" Exec xlock -mode penrose -ammann
++ "Petal" Exec xlock -mode petal
++ "Qix" Exec xlock -mode qix
++ "Rotor" Exec xlock -mode rotor
++ "Shape" Exec xlock -mode shape
++ "Sphere" Exec xlock -mode sphere
++ "Spiral" Exec xlock -mode spiral
++ "Spline" Exec xlock -mode spline
++ "Random" Exec xlock -mode random -modelist braid,geometry,helix,hyper,ico,kaleid,laser,lisa,lissie,penrose,petal,qix,shape,sphere,spiral,spline -fullrandom
+
+##############################################################################
+# Menu
+#
+AddToMenu "Space-Lock"
++ "Space-Lock" Title
++ "Bouboule" Exec xlock -mode bouboule +use3d
++ "Bouboule3d" Exec xlock -mode bouboule -use3d
++ "Galaxy" Exec xlock -mode galaxy
++ "Grav" Exec xlock -mode grav +trail +decay
++ "Grav Trail" Exec xlock -mode grav -trail
++ "Grav Decay" Exec xlock -mode grav -decay
++ "Rock" Exec xlock -mode star -rock
++ "Star" Exec xlock -mode star +rock +use3d +trek 0
++ "Star3d" Exec xlock -mode star -use3d
++ "Star Trek" Exec xlock -mode star -trek 100
++ "World" Exec xlock -mode world
++ "Random Space" Exec xlock -mode random -modelist bouboule,galaxy,grav,star,world
+
+##############################################################################
+# Menu
+#
+AddToMenu "Assorted-Lock"
++ "Assorted-Lock" Title
++ "Ball" Exec xlock -mode ball
++ "Bat" Exec xlock -mode bat
++ "Blot" Exec xlock -mode blot
++ "Bounce" Exec xlock -mode bounce
++ "Cartoon" Exec xlock -mode cartoon
++ "Clock" Exec xlock -mode clock
++ "Crystal" Exec xlock -mode crystal
++ "Daisy" Exec xlock -mode daisy
++ "Dclock" Exec xlock -mode dclock
++ "Eyes" Exec xlock -mode eyes
++ "Flag" Exec xlock -mode flag
++ "Image" Exec xlock -mode image
++ "Marquee" Exec xlock -mode marquee
++ "Maze" Exec xlock -mode maze
++ "Nose" Exec xlock -mode nose
++ "Pacman" Exec xlock -mode pacman
++ "Puzzle" Exec xlock -mode puzzle
++ "Pyro" Exec xlock -mode pyro +use3d
++ "Pyro3d" Exec xlock -mode pyro -use3d
++ "Roll" Exec xlock -mode roll
++ "Slip" Exec xlock -mode slip
++ "Swarm" Exec xlock -mode swarm
++ "Swirl" Exec xlock -mode swirl -install
++ "Worm" Exec xlock -mode worm +use3d
++ "Worm3d" Exec xlock -mode worm -use3d
+
+##############################################################################
+# Menu
+#
+AddToMenu "GL-Lock"
++ "GL-Lock" Title
++ "Escher" Exec xlock -mode escher
++ "Gears" Exec xlock -mode gears
++ "Morph3d" Exec xlock -mode morph3d
++ "Pipes" Exec xlock -mode pipes
++ "Sproingies" Exec xlock -mode sproingies
++ "Superquadrics" Exec xlock -mode superquadrics
++ "Random" Exec xlock -mode random -modelist allgl -fullrandom
+
+##############################################################################
+# Menu
+#
+AddToMenu "Marquee-Message-Lock"
++ "Message-Lock" Title
++ "Back Soon" Exec xlock -mode marquee -message "$LOGNAME will be back soon."
++ "Overnight" Exec xlock -mode marquee -message "$LOGNAME will be back in the morning."
++ "Rude" Exec xlock -mode marquee -message "$LOGNAME not here, please go away!"
+
+##############################################################################
+# Menu
+#
+AddToMenu "Nose-Message-Lock"
++ "Nose-Message" Title
++ "Message-Lock" Title
++ "Back Soon" Exec xlock -mode nose -message "$LOGNAME will be back soon."
++ "Overnight" Exec xlock -mode nose -message "$LOGNAME will be back in the morning."
++ "Rude" Exec xlock -mode nose -message "$LOGNAME not here, please go away!"
+
+##############################################################################
+# Menu
+#
+AddToMenu "Special-Lock"
++ "Special-Lock" Title
++ "Blank" Exec xlock -mode blank
++ "Bomb" Exec xlock -mode bomb
++ "Random nice" Exec xlock -mode random -modelist allnice -fullrandom -neighbors 0
++ "Random standard" Exec xlock -mode random -modelist allstandard -fullrandom -neighbors 0
++ "Random stable" Exec xlock -mode random -modelist allstable -fullrandom -neighbors 0
++ "Random all" Exec xlock -mode random -modelist all -fullrandom -neighbors 0
+
+##############################################################################
+# Menu
+#
+AddToMenu "Automata-Saver"
++ "Automata-Saver" Title
++ "Ant" Exec xlock -nolock -mode ant -neighbors 4 +truchet
++ "Ant Truchet" Exec xlock -nolock -mode ant -neighbors 4 -truchet
++ "Bee" Exec xlock -nolock -mode ant -neighbors 6 +truchet
++ "Bee Truchet" Exec xlock -nolock -mode ant -neighbors 6 -truchet
++ "Bug" Exec xlock -nolock -mode bug
++ "Demon" Exec xlock -nolock -mode demon
++ "Life" Exec xlock -nolock -mode life
++ "Life1d" Exec xlock -nolock -mode life1d
++ "Life3d" Exec xlock -nolock -mode life3d
++ "Loop" Exec xlock -nolock -mode loop
++ "Voters" Exec xlock -nolock -mode voters
++ "Wator" Exec xlock -nolock -mode wator
++ "Wire" Exec xlock -nolock -mode wire
++ "Random" Exec xlock -nolock -mode random -modelist ant,bug,demon,life,life1d,life3d,loop,voters,wator,wire -fullrandom -neighbors 0
+
+##############################################################################
+# Menu
+#
+AddToMenu "Fractal-Saver"
++ "Fractal-Saver" Title
++ "Drift" Exec xlock -nolock -mode drift -fullrandom
++ "Flame" Exec xlock -nolock -mode flame
++ "Forest" Exec xlock -nolock -mode forest
++ "Fract" Exec xlock -nolock -mode fract
++ "Hop" Exec xlock -nolock -mode hop -fullrandom
++ "IFS" Exec xlock -nolock -mode ifs
++ "Julia" Exec xlock -nolock -mode julia
++ "Lightning" Exec xlock -nolock -mode lightning
++ "Mountain" Exec xlock -nolock -mode mountain
++ "Sierpinski" Exec xlock -nolock -mode sierpinski
++ "Strange" Exec xlock -nolock -mode strange
++ "Triangle" Exec xlock -nolock -mode triangle
++ "Turtle" Exec xlock -nolock -mode turtle
++ "Random" Exec xlock -nolock -mode random -modelist flame,forest,fract,hop,ifs,julia,lightning,mountain,sierpinski,strange,triangle,turtle -fullrandom
+
+##############################################################################
+# Menu
+#
+AddToMenu "Geometry-Saver"
++ "Geometry-Saver" Title
++ "Braid" Exec xlock -nolock -mode braid
+# "Gear" Exec xlock -nolock -mode gear
++ "Geometry" Exec xlock -nolock -mode geometry
++ "Helix" Exec xlock -nolock -mode helix -fullrandom
++ "Hyper" Exec xlock -nolock -mode hyper
++ "Ico" Exec xlock -nolock -mode ico
++ "Kaleid" Exec xlock -nolock -mode kaleid
++ "Laser" Exec xlock -nolock -mode laser
++ "Lisa" Exec xlock -nolock -mode lisa
++ "Lissie" Exec xlock -nolock -mode lissie
++ "Penrose" Exec xlock -nolock -mode penrose +ammann
++ "Penrose Ammann" Exec xlock -nolock -mode penrose -ammann
++ "Petal" Exec xlock -nolock -mode petal
++ "Qix" Exec xlock -nolock -mode qix
++ "Rotor" Exec xlock -nolock -mode rotor
++ "Shape" Exec xlock -nolock -mode shape
++ "Sphere" Exec xlock -nolock -mode sphere
++ "Spiral" Exec xlock -nolock -mode spiral
++ "Spline" Exec xlock -nolock -mode spline
++ "Random" Exec xlock -nolock -mode random -modelist braid,geometry,helix,hyper,kaleid,laser,lisa,lissie,penrose,petal,qix,shape,sphere,spiral,spline
+
+##############################################################################
+# Menu
+#
+AddToMenu "Space-Saver"
++ "Space-Saver" Title
++ "Bouboule" Exec xlock -nolock -mode bouboule +use3d
++ "Bouboule3d" Exec xlock -nolock -mode bouboule -use3d
++ "Galaxy" Exec xlock -nolock -mode galaxy
++ "Grav" Exec xlock -nolock -mode grav +trail +decay
++ "Grav Trail" Exec xlock -nolock -mode grav -trail
++ "Grav Decay" Exec xlock -nolock -mode grav -decay
++ "Rock" Exec xlock -nolock -mode star -rock
++ "Star" Exec xlock -nolock -mode star +rock +use3d +trek 0
++ "Star3d" Exec xlock -nolock -mode star -use3d
++ "Star Trek" Exec xlock -nolock -mode star -trek 100
++ "World" Exec xlock -nolock -mode world
++ "Random Space" Exec xlock -nolock -mode random -modelist bouboule,galaxy,grav,star,world
+
+##############################################################################
+# Menu
+#
+AddToMenu "Assorted-Saver"
++ "Assorted-Saver" Title
++ "Ball" Exec xlock -nolock -mode ball
++ "Bat" Exec xlock -nolock -mode bat
++ "Blot" Exec xlock -nolock -mode blot
++ "Bounce" Exec xlock -nolock -mode bounce
++ "Cartoon" Exec xlock -nolock -mode cartoon
++ "Clock" Exec xlock -nolock -mode clock
++ "Crystal" Exec xlock -nolock -mode crystal
++ "Daisy" Exec xlock -nolock -mode daisy
++ "Dclock" Exec xlock -nolock -mode dclock
++ "Eyes" Exec xlock -nolock -mode eyes
++ "Flag" Exec xlock -nolock -mode flag
++ "Image" Exec xlock -nolock -mode image
++ "Marquee" Exec xlock -nolock -mode marquee
++ "Maze" Exec xlock -nolock -mode maze
++ "Nose" Exec xlock -nolock -mode nose
++ "Pacman" Exec xlock -nolock -mode pacman
++ "Puzzle" Exec xlock -nolock -mode puzzle
++ "Pyro" Exec xlock -nolock -mode pyro +use3d
++ "Pyro3d" Exec xlock -nolock -mode pyro -use3d
++ "Roll" Exec xlock -nolock -mode roll
++ "Slip" Exec xlock -nolock -mode slip
++ "Swarm" Exec xlock -nolock -mode swarm
++ "Swirl" Exec xlock -nolock -mode swirl -install
++ "Worm" Exec xlock -nolock -mode worm +use3d
++ "Worm3d" Exec xlock -nolock -mode worm -use3d
+
+##############################################################################
+# Menu
+#
+AddToMenu "GL-Saver"
++ "GL-Saver" Title
++ "Escher" Exec xlock -nolock -mode escher
++ "Gears" Exec xlock -nolock -mode gears
++ "Morph3d" Exec xlock -nolock -mode morph3d
++ "Pipes" Exec xlock -nolock -mode pipes
++ "Sproingies" Exec xlock -nolock -mode sproingies
++ "Superquadrics" Exec xlock -nolock -mode superquadrics
++ "Random" Exec xlock -nolock -mode random -modelist allgl -fullrandom
+
+##############################################################################
+# Menu
+#
+AddToMenu "Marquee-Message-Saver"
++ "Marquee-Message" Title
++ "Brilliant!" Exec xlock -nolock -mode marquee -message "WOW! $LOGNAME, You're Brilliant!"
++ "Love You" Exec xlock -nolock -mode marquee -message "You know, I Love You $LOGNAME."
++ "Available" Exec xlock -nolock -mode marquee -message "Hey, I'm available now!"
+
+##############################################################################
+# Menu
+#
+AddToMenu "Nose-Message-Saver"
++ "Nose-Message" Title
++ "Brilliant!" Exec xlock -nolock -mode nose -message "WOW! $LOGNAME, You're Brilliant!"
++ "Love You" Exec xlock -nolock -mode nose -message "You know, I Love You $LOGNAME."
++ "Available" Exec xlock -nolock -mode nose -message "Hey, I'm available now!"
+
+##############################################################################
+# Menu
+#
+AddToMenu "Special-Saver"
++ "Special-Saver" Title
++ "Blank" Exec xlock -nolock -mode blank
++ "Bomb" Exec xlock -nolock -mode bomb
++ "Random nice" Exec xlock -nolock -mode random -modelist allnice -fullrandom -neighbors 0
++ "Random standard" Exec xlock -nolock -mode random -modelist allstandard -fullrandom -neighbors 0
++ "Random stable" Exec xlock -nolock -mode random -modelist allstable -fullrandom -neighbors 0
++ "Random all" Exec xlock -nolock -mode random -modelist all -fullrandom -neighbors 0
+
+##############################################################################
+# Menu
+#
+AddToMenu Screenlock
++ "Screen Lock" Title
++ "Cellular Automata" Menu Automata-Lock Close
++ "" Nop
++ "Fractal" Menu Fractal-Lock Close
++ "" Nop
++ "Geometry" Menu Geometry-Lock Close
++ "" Nop
++ "Space" Menu Space-Lock Close
++ "" Nop
++ "Assorted" Menu Assorted-Lock Close
++ "" Nop
++ "GL" Menu GL-Lock Close
++ "" Nop
++ "Marquee Message" Menu Marquee-Message-Lock Close
++ "" Nop
++ "Nose Message" Menu Nose-Message-Lock Close
++ "" Nop
++ "Special" Menu Special-Lock Close
+
+##############################################################################
+# Menu
+#
+AddToMenu Screensavers
++ "Screensavers" Title
++ "Cellular Automata" Menu Automata-Saver Close
++ "" Nop
++ "Fractal" Menu Fractal-Saver Close
++ "" Nop
++ "Geometry" Menu Geometry-Saver Close
++ "" Nop
++ "Space" Menu Space-Saver Close
++ "" Nop
++ "Assorted" Menu Assorted-Saver Close
++ "" Nop
++ "GL" Menu GL-Saver Close
++ "" Nop
++ "Marquee Message" Menu Marquee-Message-Saver Close
++ "" Nop
++ "Nose Message" Menu Nose-Message-Saver Close
++ "" Nop
++ "Special" Menu Special-Saver Close
--- /dev/null
+root
+wheel
+bagleyd
+david
--- /dev/null
+#!/usr/bin/wish -f
+
+#charles vidal 1997
+#All function of option like mkentry don't do any thing
+#on the xlock launch
+#The color don't do any thing on the xlock launch too.
+#but the font toggle make something if the change font is checked .
+
+#function find in demo: mkStyles.tcl
+# The procedure below inserts text into a given text widget and
+# applies one or more tags to that text. The arguments are:
+#
+# w Window in which to insert
+# text Text to insert (it's inserted at the "insert" mark)
+# args One or more tags to apply to text. If this is empty
+# then all tags are removed from the text.
+
+proc insertWithTags {w text args} {
+ set start [$w index insert]
+ $w insert insert $text
+ foreach tag [$w tag names $start] {
+ $w tag remove $tag $start insert
+ }
+ foreach i $args {
+ $w tag add $i $start insert
+ }
+}
+
+#no influence with xlock
+proc mkColor {} {
+ toplevel .color
+ wm title .color "Color"
+ frame .color.frame -borderwidth 10
+ frame .color.frame2 -borderwidth 10
+foreach i {/usr/local/lib/X11/rgb.txt /usr/lib/X11/rgb.txt
+ /X11/R5/lib/X11/rgb.txt /X11/R4/lib/rgb/rgb.txt} {
+ if ![file readable $i] {
+ continue;
+ }
+ set f [open $i]
+ listbox .color.frame.names -yscrollcommand ".color.frame.scroll set" \
+ -relief sunken -borderwidth 2 -exportselection false
+ bind .color.frame.names <Double-1> {
+ .color.test configure -bg [.color.frame.names get [.color.frame.names curselection]]
+ }
+ scrollbar .color.frame.scroll -orient vertical -command ".color.frame.names yview" \
+ -relief sunken -borderwidth 2
+ pack .color.frame.names -side left
+ pack .color.frame.scroll -side right -fill both
+ pack .color.frame -fill x
+ while {[gets $f line] >= 0} {
+ if {[llength $line] == 4} {
+ .color.frame.names insert end [lindex $line 3]
+ }
+ }
+ close $f
+ . configure -cursor top_left_arrow
+ label .color.test -height 5 -width 20
+ button .color.frame2.cancel -text Cancel -command "destroy .color"
+ button .color.frame2.ok -text OK -command "destroy .color"
+ pack .color.test
+ pack .color.frame2.ok .color.frame2.cancel -side left -fill x
+ pack .color.frame2 -fill both
+ break;
+}
+
+}
+# Help ...
+proc Helpxlock {} {
+ toplevel .help
+ wm title .help "Help About Xlock"
+scrollbar .help.s -orient vertical -command {.help.t yview}
+pack .help.s -side right -fill y
+text .help.t -yscrollcommand {.help.s set} -wrap word -width 60 -height 30 \
+ -setgrid 1
+pack .help.t -expand y -fill both
+.help.t tag configure big -font -Adobe-Courier-Bold-R-Normal-*-140-*
+.help.t tag configure verybig -font -Adobe-Courier-Bold-R-Normal-*-240-*
+.help.t tag configure color2 -foreground red
+.help.t tag configure underline -underline on
+insertWithTags .help.t "Xlockmore Help\n" verybig
+insertWithTags .help.t "\n"
+.help.t insert end { Locks the X server still the user enters their pass\
+word at the keyboard. While xlock is running, all new\
+server connections are refused. The screen saver is dis\
+abled. The mouse cursor is turned off. The screen is\
+blanked and a changing pattern is put on the screen. If a\
+key or a mouse button is pressed then the user is prompted\
+for the password of the user who started xlock.
+If the correct password is typed, then the screen is\
+unlocked and the X server is restored. When typing the\
+password Control-U and Control-H are active as kill and\
+erase respectively. To return to the locked screen, click\
+in the small icon version of the changing pattern.
+}
+.help.t insert end "\n"
+insertWithTags .help.t "OPTIONS\n" big
+insertWithTags .help.t "\n\n-display " underline
+insertWithTags .help.t {The option sets the X11 display to lock.\
+ xlock locks all available screens on a given server,\
+ and restricts you to locking only a local server such\
+ as unix::00,, localhost::00,, or ::00 unless you set the\
+ -remote option.}
+.help.t insert end "\n"
+insertWithTags .help.t "\n\n-name " underline
+insertWithTags .help.t { is used instead of XLock when looking\
+ for resources to configure xlock.}
+.help.t insert end "\n"
+insertWithTags .help.t "\n\n-mode " underline
+insertWithTags .help.t {As of this writing there are 48 display modes sup\
+ ported (plus one more for random selection of one of\
+ the 48).}
+insertWithTags .help.t "\n\n-delay " underline
+insertWithTags .help.t {It simply sets the number of microseconds to delay between batches of animations. In blank mode, it is important to set this to some small number of microseconds, because the keyboard and mouse are only checked after each delay, so you cannot set the delay too high, but a delay of zero would needlessly consume cpu checking for mouse and keyboard input in a tight loop, since blank mode has no work to do.}
+insertWithTags .help.t "\n\n-saturation" underline
+insertWithTags .help.t { This option sets saturation of the color
+ ramp . 0 is grayscale and 1 is very rich color. 0.4 is a nice pastel.}
+insertWithTags .help.t "\n\n-nice" underline
+insertWithTags .help.t { This option sets system nicelevel of the xlock .}
+insertWithTags .help.t "\n\n-timeout " underline
+insertWithTags .help.t { This option sets the number of second before the password screen will time out.}
+insertWithTags .help.t "\n\n-lockdelay " underline
+insertWithTags .help.t { This option sets the number of second before the screen needs a password to be unlocked. Good for use with an autolocking mechanism like xautolock(1).}
+insertWithTags .help.t "\n\n-font " underline
+insertWithTags .help.t { Ths option sets the font to be used on the prompt screen.}
+insertWithTags .help.t "\n\n-fg " underline
+insertWithTags .help.t { This option sets the color of the text on the password screen.}
+insertWithTags .help.t "\n\n-bg " underline
+insertWithTags .help.t { This option sets the color of the background on the password screen.}
+insertWithTags .help.t "\n\n-usename " underline
+insertWithTags .help.t { usename is shown in front of user name, defaults to "Name: ".}
+insertWithTags .help.t "\n\n-password " underline
+insertWithTags .help.t { the password prompt string, defaults to "Password: ".}
+insertWithTags .help.t "\n\n-info " underline
+insertWithTags .help.t { the informational message to tell the user what to do, defaults to "Enter password to
+ unlock; select icon to lock.".}
+insertWithTags .help.t "\n\n-validate " underline
+insertWithTags .help.t { the message shown while validating the password, defaults to "Validating login..."}
+insertWithTags .help.t "\n\n-invalid" underline
+insertWithTags .help.t {
+the message shown when password is invalid, defaults to "Invalid login."}
+insertWithTags .help.t "\n\n-geometry " underline
+insertWithTags .help.t { This option sets the size and offset of the lock window (normally the entire screen). The entire screen format is still used for entering the password. The purpose is to see the screen even though it is locked. This should be used with caution since many of the modes will fail if the windows are far from square or are too small (size must be greater than 0x0). This should also be used with esaver to protect screen from phosphor burn.}
+insertWithTags .help.t "\n\n-icongeometry " underline
+insertWithTags .help.t { this option sets the size of the iconic screen (normally 64x64) seen when entering the password. This should be used with caution since many of the modes will fail if the windows are far from square or are too small (size must be greater than 0x0). The greatest size is 256x256. There should be some limit so users could see who has locked the screen. Position information of icon is ignored.}
+insertWithTags .help.t "\n\n-forceLogout " underline
+insertWithTags .help.t { This option sets the auto-logout. This might not be enforced depending how your system is configured.}
+insertWithTags .help.t "\n\nOPTIONS BOOLEAN\n" big
+ insertWithTags .help.t "\n-/+mono " underline
+ insertWithTags .help.t " turn on/off monochrome override"
+ insertWithTags .help.t "\n-/+nolock" underline
+ insertWithTags .help.t " turn on/off no password required mode"
+ insertWithTags .help.t "\n-/+remote" underline
+insertWithTags .help.t " turn on/off remote host access"
+ insertWithTags .help.t "\n-/+allowroot" underline
+ insertWithTags .help.t " turn on/off allow root password mode (ignored)"
+ insertWithTags .help.t "\n-/+enablesaver" underline
+ insertWithTags .help.t " turn on/off enable X server screen saver"
+ insertWithTags .help.t "\n-/+allowaccess" underline
+ insertWithTags .help.t " turn on/off allow new clients to connect"
+ insertWithTags .help.t "\n-/+grabmouse " underline
+ insertWithTags .help.t " turn on/off grabbing of mouse and keyboard"
+ insertWithTags .help.t "\n-/+echokeys " underline
+ insertWithTags .help.t " turn on/off echo '?' for each password key"
+ insertWithTags .help.t "\n-/+usefirst" underline
+ insertWithTags .help.t " turn on/off using the first char typed in password"
+ insertWithTags .help.t "\n-/+v " underline
+ insertWithTags .help.t " turn on/off verbose mode"
+ insertWithTags .help.t "\n-/+inwindow" underline
+ insertWithTags .help.t " turn on/off making xlock run in a window"
+ insertWithTags .help.t "\n-/+mono " underline
+ insertWithTags .help.t " turn on/off monochrome override"
+ insertWithTags .help.t "\n-/+inroot" underline
+ insertWithTags .help.t " turn on/off making xlock run in the root window"
+ insertWithTags .help.t "\n-/+timeelapsed " underline
+ insertWithTags .help.t " turn on/off clock"
+ insertWithTags .help.t "\n-/+install " underline
+ insertWithTags .help.t " whether to use private colormap if needed (yes/no)"
+
+ button .help.ok -text OK -command "destroy .help"
+ pack .help.ok
+}
+# Create toplevel Author and Maintener.
+proc mkAuthor {} {
+ toplevel .author
+ wm title .author "Author and Maintener of xlock"
+ frame .author.frame -borderwidth 10
+ set w .author.frame
+
+ label $w.msg1 -text "Maintained by: David A. Bagley (bagleyd@bigfoot.com)"
+label $w.msg2 -text "Original Author: Patrick J. Naughton (naughton@eng.sun.com)"
+label $w.msg3 -text "Mailstop 21-14 Sun Microsystems Laboratories,"
+ label $w.msg4 -text "Inc. Mountain View, CA 94043 15//336-1080"
+label $w.msg5 -text "with many additional contributors"
+ pack $w.msg1 $w.msg2 $w.msg3 $w.msg4 $w.msg5 -side top
+
+ label $w.msg6 -text "xlock.tcl\n created by charles VIDAL\n (author of flag mode and xmlock launcher )"
+ pack $w.msg6 -side top
+
+ button .author.ok -text OK -command "destroy .author"
+ pack $w .author.ok
+}
+
+#no influence with xlock
+proc mkMessage {} {
+ toplevel .message
+ wm title .message "Message Options"
+ frame .message.frame -borderwidth 10
+ frame .message.frame2 -borderwidth 10
+ set w .message.frame
+
+ frame $w.messagename
+ label $w.messagename.l1 -text "password string"
+ entry $w.messagename.e1 -relief sunken
+ frame $w.specmessage
+ label $w.specmessage.l2 -text "info string"
+ entry $w.specmessage.e2 -relief sunken
+ pack $w.messagename $w.specmessage
+ pack $w.messagename.l1 -side left
+ pack $w.specmessage.l2 -side left
+ pack $w.messagename.e1 $w.specmessage.e2 -side top -pady 5 -fill x
+ button .message.frame.ok -text OK -command "toto "
+ button .message.frame.cancel -text Cancel -command "destroy .message"
+ pack $w .message.frame.ok .message.frame.cancel -side left -fill x
+ pack .message.frame2 -side bottom
+
+}
+#no influence with xlock
+proc mkGeometry {} {
+ toplevel .geometry
+ wm title .geometry "Geometry Options"
+ frame .geometry.frame -borderwidth 10
+ frame .geometry.frame2 -borderwidth 10
+ set w .geometry.frame
+
+ frame $w.geometryname
+ label $w.geometryname.l1 -text "geometry"
+ entry $w.geometryname.e1 -relief sunken
+ frame $w.specgeometry
+ label $w.specgeometry.l2 -text "icon geometry"
+ entry $w.specgeometry.e2 -relief sunken
+ pack $w.geometryname $w.specgeometry
+ pack $w.geometryname.l1 -side left
+ pack $w.specgeometry.l2 -side left
+ pack $w.geometryname.e1 $w.specgeometry.e2 -side top -pady 5 -fill x
+ button .geometry.frame2.ok -text OK -command "destroy .geometry"
+ button .geometry.frame2.cancel -text Cancel -command "destroy .geometry"
+ pack $w .geometry.frame2.ok .geometry.frame2.cancel -side left -fill x
+ pack .geometry.frame2 -side bottom
+}
+
+#no influence with xlock
+#this function should be erase in the newer version...
+proc mkFont {} {
+ toplevel .font
+ wm title .font "Font Options"
+ frame .font.frame -borderwidth 10
+ frame .font.frame2 -borderwidth 10
+ set w .font.frame
+
+ frame $w.fontname
+ label $w.fontname.l1 -text "font name"
+ entry $w.fontname.e1 -relief sunken
+ frame $w.specfont
+ label $w.specfont.l2 -text "specifique font name"
+ entry $w.specfont.e2 -relief sunken
+ pack $w.fontname $w.specfont
+ pack $w.fontname.l1 -side left
+ pack $w.specfont.l2 -side left
+ pack $w.fontname.e1 $w.specfont.e2 -side top -pady 5 -fill x
+ button .font.frame2.ok -text OK -command "destroy .font"
+ button .font.frame2.cancel -text Cancel -command "destroy .font"
+ pack $w .font.frame2.ok .font.frame2.cancel -side left -fill x
+ pack .font.frame2 -side bottom
+}
+
+#no influence with xlock
+proc mkEntry {} {
+ toplevel .option
+ wm title .option "Entry options"
+ frame .option.frame -borderwidth 10
+ frame .option.frame2 -borderwidth 10
+ set w .option.frame
+
+ frame $w.username
+ label $w.username.l1 -text "user name"
+ entry $w.username.e1 -relief sunken
+ frame $w.password
+ label $w.password.l2 -text "password"
+ entry $w.password.e2 -relief sunken
+ frame $w.info
+ label $w.info.l3 -text "program name"
+ entry $w.info.e3 -relief sunken
+ pack $w.username $w.password $w.info
+ pack $w.username.l1 -side left
+ pack $w.password.l2 -side left
+ pack $w.info.l3 -side left
+ pack $w.username.e1 $w.password.e2 $w.info.e3 -side top -pady 5 -fill x
+ button .option.frame2.ok -text OK -command "destroy .option"
+ button .option.frame2.cancel -text Cancel -command "destroy .option"
+ pack $w .option.frame2.ok .option.frame2.cancel -side left -fill x
+
+ pack .option.frame2 -side bottom
+}
+
+proc Affopts { device } {
+
+#options booleans
+global mono
+global nolock
+global remote
+global allowroot
+global enablesaver
+global allowaccess
+global grabmouse
+global echokeys
+global usefirst
+
+#fonts options
+global fstyle
+global pointSize
+global ftype
+global cfont
+
+set linecommand "xlock "
+
+if {$device == 1} {append linecommand "-inwindow "} elseif {$device == 2} {append linecommand "-inroot "}
+
+if { $mono == 1 } {append linecommand "-mono "}
+if { $nolock == 1 } {append linecommand "-nolock "}
+if { $remote == 1 } {append linecommand "-remote "}
+if { $allowroot == 1 } {append linecommand "-allowroot "}
+if { $enablesaver == 1 } {append linecommand "-enablesaver "}
+if { $allowaccess == 1 } {append linecommand "-allowaccess "}
+if { $grabmouse == 1 } {append linecommand "-grabmouse "}
+if { $echokeys == 1 } {append linecommand "-echokeys "}
+if { $usefirst == 1 } {append linecommand "-usefirst "}
+#this ShootDown my X SERVER why ???
+if { $cfont == 1 } {
+append linecommand "-font -*-$ftype-$fstyle-*-*-*-$pointSize-*-*-*-*-*-*-* "
+}
+append linecommand "-mode "
+append linecommand [.listscrol.list get [eval .listscrol.list curselection]]
+puts $linecommand
+eval exec $linecommand
+}
+
+# Creation of GUI
+
+wm title . "xlock launcher"
+. configure -cursor top_left_arrow
+frame .menu -relief raised -borderwidth 1
+menubutton .menu.button -text "switches" -menu .menu.button.check
+pack .menu -side top -fill x
+
+global mono
+global nolock
+global remote
+global allowroot
+global enablesaver
+global allowaccess
+global grabmouse
+global echokeys
+global usefirst
+
+global fstyle
+global pointSize
+global ftype
+global cfont
+
+# Creation of GUI
+
+#Creation of menu
+
+menu .menu.button.check
+set CHECK .menu.button.check
+
+#menu with les check buttons
+$CHECK add check -label "mono" -variable mono
+$CHECK add check -label "nolock" -variable nolock
+$CHECK add check -label "remote" -variable remote
+$CHECK add check -label "allowroot" -variable allowroot
+$CHECK add check -label "enablesaver" -variable enablesaver
+$CHECK add check -label "allowaccess" -variable allowaccess
+$CHECK add check -label "grabmouse" -variable grabmouse
+$CHECK add check -label "echokeys" -variable echokeys
+$CHECK add check -label "usefirst" -variable usefirst
+
+menubutton .menu.button2 -text "options" -menu .menu.button2.options
+menu .menu.button2.options
+set OPTIONS .menu.button2.options
+#les options
+$OPTIONS add command -label "generals options" -command "mkEntry"
+$OPTIONS add command -label "font options" -command "mkFont"
+$OPTIONS add cascade -label "Fonts" -menu $OPTIONS.radio
+
+#Creation of font menu
+
+set FONTMENU .menu.button2.options.radio
+menu $FONTMENU
+$FONTMENU add check -label "Change Font" -variable cfont
+$FONTMENU add sep
+$FONTMENU add radio -label "times" -variable ftype -value times
+$FONTMENU add radio -label "symbol" -variable ftype -value symbol
+$FONTMENU add radio -label "courier" -variable ftype -value courier
+$FONTMENU add sep
+$FONTMENU add radio -label "10 point" -variable pointSize -value 10
+$FONTMENU add radio -label "14 point" -variable pointSize -value 14
+$FONTMENU add radio -label "18 point" -variable pointSize -value 18
+$FONTMENU add radio -label "24 point" -variable pointSize -value 24
+$FONTMENU add radio -label "32 point" -variable pointSize -value 32
+$FONTMENU add sep
+$FONTMENU add radio -label "Bold" -variable fstyle -value bold
+$FONTMENU add radio -label "DemiBold" -variable fstyle -value demibold
+$FONTMENU add radio -label "Medium" -variable fstyle -value medium
+
+$OPTIONS add command -label "geometry options" -command "mkGeometry"
+$OPTIONS add command -label "message options" -command "mkMessage"
+
+#Color
+menubutton .menu.button4 -text "color" -menu .menu.button4.color
+menu .menu.button4.color
+set COLOR .menu.button4.color
+$COLOR add command -label "Foreground options" -command " . configure -cursor watch;mkColor"
+$COLOR add command -label "Background options" -command "mkColor"
+
+menubutton .menu.button3 -text "help" -menu .menu.button3.help
+menu .menu.button3.help
+set HELP .menu.button3.help
+$HELP add command -label "About xlock" -command "Helpxlock"
+$HELP add command -label "About author" -command "mkAuthor"
+
+pack .menu.button .menu.button2 .menu.button4 -side left
+pack .menu.button3 -side right
+
+#creation de la liste
+frame .listscrol -borderwidth 4 -relief ridge
+set LISTSCROL .listscrol
+scrollbar $LISTSCROL.scroll -relief sunken -command "$LISTSCROL.list yview"
+listbox $LISTSCROL.list -yscroll "$LISTSCROL.scroll set"
+pack $LISTSCROL.scroll -side right -fill y
+pack $LISTSCROL.list -side left -expand yes -fill both
+pack $LISTSCROL -fill both
+
+$LISTSCROL.list insert 0 \
+ant ball bat blot \
+bouboule bounce braid bug \
+clock crystal \
+daisy dclock demon drift eyes \
+flag flame forest fract \
+galaxy geometry grav \
+helix hop hyper \
+ico ifs image julia kaleid \
+laser life life1d life3d \
+lightning lisa lissie loop \
+marquee maze mountain nose \
+pacman penrose petal puzzle pyro \
+qix roll rotor \
+shape sierpinski slip \
+sphere spiral spline \
+star strange swarm swirl \
+triangle tube turtle voters \
+wator wire world worm \
+cartoon \
+escher gears morph3d superquadrics \
+pipes sproingies \
+blank bomb random \
+fadeplot
+
+frame .buttons -borderwidth 4 -relief ridge
+set BUTTON .buttons
+button $BUTTON.launch -text "Launch" -command "Affopts 0"
+button $BUTTON.launchinW -text "Launch in Window" -command "Affopts 1"
+button $BUTTON.launchinR -text "Launch in Root" -command "Affopts 2"
+button $BUTTON.quit -text Quit -command "exit"
+pack $BUTTON.launch $BUTTON.launchinW $BUTTON.launchinR -side left
+pack $BUTTON.quit -side right
+pack $BUTTON -fill x -side bottom
--- /dev/null
+#!/usr/bin/perl
+# This is used to add life to life
+# This is a QUICK hack to convert life files to xlock's life format.
+# Patterns MUST have < 64 pts at start for life.c to use the data generated
+# Below is an example of a life file without the initial #'s
+# Call the file piston.life and run it like xlocklife.pl < piston.life
+#piston.life
+##P -10 -3
+#..........*...........
+#..........****........
+#**.........****.......
+#**.........*..*.....**
+#...........****.....**
+#..........****........
+#..........*...........
+
+print "
+Drop these points in life.c, within the 'patterns' array.
+Note if the number of points >= 64, one must increase points NUMPTS;
+also to fit most screens and especially the iconified window,
+one should have the size < 32x32.\n\n";
+&search;
+print "\npoints = $PTS; size = ${X}x$Y\n";
+
+sub search {
+ local ($row, $col, $firstrow, $firstcol);
+ local ($i, $j, $found, $c, $tempx, $tempy);
+ local (@array);
+
+
+ $row = $col = 0;
+ $firstrow = -1;
+ $firstcol = 80;
+ $PTS = $X = $Y = 0;
+ while (<>) {
+ if (!($_ =~ /^#/))
+ {
+ @chars = split(//);
+ $col = 0;
+ foreach $c (@chars) {
+ $col++;
+ if ($c =~ /[\*0]/) {
+ if ($firstrow < 0) {
+ $row = $firstrow = 1;
+ }
+ if ($col < $firstcol) {
+ $firstcol = $col;
+ }
+ if ($row > $Y) {
+ $Y = $row;
+ }
+ if ($col > $X) {
+ $X = $col;
+ }
+ $array{$col, $row} = 1;
+ $PTS++;
+ }
+ }
+ $row++;
+ }
+ }
+ $col = $X - $firstcol + 1;
+ $row = $Y;
+ print " {\n ";
+ for ($j = 0; $j <= $Y; $j++) {
+ $found = 0;
+ for ($i = 0; $i <= $X; $i++) {
+ if ($array{$i, $j}) {
+ $found = 1;
+ $tempx = $i - int(($col + 2) / 2) - $firstcol + 1;
+ $tempy = $j - int(($row + 2) / 2);
+ printf "$tempx, $tempy, ";
+ }
+ }
+ if ($found) {
+ print "\n ";
+ }
+ }
+ print "127\n },\n";
+ $X = $col;
+}
--- /dev/null
+#!/usr/bin/perl
+# xarand
+ open(S,"/usr/games/fortune|wc|");
+ @numbers = split(" ",<S>);
+ print int $numbers[2]/3;
+
--- /dev/null
+#!/usr/bin/perl
+# This is used if the RANDIMAGEFILE switch does not work so instead of:
+# xlock -imagefile [ DIRECTORY | FILE ] [other xlock options]
+# try
+# randimagefile.pl [DIRECTORY | FILE] [other xlock options]
+# By the way the typical other xlock options that would be used here are
+# -mode [image | puzzle] -install
+
+$file = shift(@ARGV);
+if ($file eq "") {
+ print "\nUsage: $0 [DIRECTORY | FILE] [other xlock options]\n";
+ print "\tother xlock options typically are: -mode [image | puzzle] -install\n";
+ exit 1;
+}
+
+getrandfile();
+#printf "xlock -imagefile $file @ARGV\n";
+system "xlock -imagefile $file @ARGV";
+
+sub getrandfile {
+ if (-d $file) { # OK so its not really a file :)
+ opendir(DIR, $file) || die "Can not open $file";
+ local(@filenames) = grep(!/^\.\.?$/, readdir(DIR)); # ls but avoid . && ..
+ closedir(DIR);
+ srand(time); # use time|$$ if security involved
+ $file = splice(@filenames, rand @filenames, 1); # pick one
+ }
+}
--- /dev/null
+#!/usr/bin/perl
+# xlocksat
+
+$h = `/bin/date "+%H:"`;
+$sat = (12 - abs($h - 12)) / 12 ;
+printf("%.2f\n",$sat);
--- /dev/null
+#! /bin/sh
+
+# Guess values for system-dependent variables and create Makefiles.
+# Generated automatically using autoconf version 2.12
+# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+# Defaults:
+ac_help=
+ac_default_prefix=/usr/local
+# Any additions from configure.in:
+ac_help="$ac_help
+ --without-gcc use CC to compile"
+ac_help="$ac_help
+ --with-x use the X Window System"
+ac_help="$ac_help
+ --with-includes=DIR search include DIR for optional packages below"
+ac_help="$ac_help
+ --with-libraries=DIR search library DIR for optional packages below"
+ac_help="$ac_help
+ --without-xpm enable color pixmap XPM tests"
+ac_help="$ac_help
+ --without-motif disable Motif tests"
+ac_help="$ac_help
+ --without-editres do not include debugger for xmlock"
+ac_help="$ac_help
+ --without-gl disable 3D OpenGL (for GL modes)"
+ac_help="$ac_help
+ --without-mesagl disable 3D MesaGL (for GL modes)"
+ac_help="$ac_help
+ --without-dtsaver disable -dtsaver option"
+ac_help="$ac_help
+ --without-rplay disable RPLAY sounds"
+ac_help="$ac_help
+ --without-nas disable NAS sounds"
+ac_help="$ac_help
+ --enable-bitmapdir=DIR set directory for bitmaps, default is ./bitmaps"
+ac_help="$ac_help
+ --enable-bitmaptype=name
+ set name for bitmap type"
+ac_help="$ac_help
+ --enable-pixmapdir=DIR set directory for pixmaps, default is ./pixmaps"
+ac_help="$ac_help
+ --enable-pixmaptype=name
+ set name for pixmap type"
+ac_help="$ac_help
+ --enable-mapdir=DIR set directory for bitmaps and pixmaps"
+ac_help="$ac_help
+ --enable-maptype=name set name for bitmap and pixmap type"
+ac_help="$ac_help
+ --enable-def-play=program
+ set def-play to program that plays sounds"
+ac_help="$ac_help
+ --disable-vroot disables xlock from being able to run in root window
+ (some window managers have problems)"
+ac_help="$ac_help
+ --disable-allow-root allows users to turn off allowroot (default is to
+ always allow root to be able to unlock xlock)"
+ac_help="$ac_help
+ --enable-syslog enable syslog logging"
+ac_help="$ac_help
+ --enable-multiple-root enable multiple root users"
+ac_help="$ac_help
+ --enable-mouse-motion password screen displayed with mouse motion"
+ac_help="$ac_help
+ --enable-old-event-loop some machines may still need this
+ (fd_set errors may be a sign)"
+ac_help="$ac_help
+ --enable-xlockrc for unknown shadow passwd algorithm"
+ac_help="$ac_help
+ --enable-auto-logout=time
+ enable auto-logout code for lab use (time in minutes)"
+ac_help="$ac_help
+ --enable-default-auto-logout=time
+ set default-auto-logout (time in minutes)"
+ac_help="$ac_help
+ --enable-button-logout=time
+ enable button logout for lab use (time in minutes)"
+ac_help="$ac_help
+ --enable-default-button-logout=time
+ set default-button-logout (time in minutes)"
+ac_help="$ac_help
+ --disable-bomb disable automatic logout mode"
+ac_help="$ac_help
+ --enable-closedown-logout
+ define this one or next, with enable-auto-logout,"
+ac_help="$ac_help
+ --enable-session-logout enable-button-logout, and/or enable-bomb, for xdm"
+ac_help="$ac_help
+ --enable-staff-file=filename
+ set file of staff who are exempt from auto-logout"
+ac_help="$ac_help
+ --enable-staff-netgroup=netgroup
+ set netgroup of staff who are exempt from auto-logout"
+ac_help="$ac_help
+ --enable-hackers enable hackers modes (possibly making xlock unstable)"
+
+# Initialize some variables set by options.
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+build=NONE
+cache_file=./config.cache
+exec_prefix=NONE
+host=NONE
+no_create=
+nonopt=NONE
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+target=NONE
+verbose=
+x_includes=NONE
+x_libraries=NONE
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+# Initialize some other variables.
+subdirs=
+MFLAGS= MAKEFLAGS=
+# Maximum number of lines to put in a shell here document.
+ac_max_here_lines=12
+
+ac_prev=
+for ac_option
+do
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval "$ac_prev=\$ac_option"
+ ac_prev=
+ continue
+ fi
+
+ case "$ac_option" in
+ -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+ *) ac_optarg= ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case "$ac_option" in
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir="$ac_optarg" ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build="$ac_optarg" ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file="$ac_optarg" ;;
+
+ -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+ | --da=*)
+ datadir="$ac_optarg" ;;
+
+ -disable-* | --disable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ eval "enable_${ac_feature}=no" ;;
+
+ -enable-* | --enable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ case "$ac_option" in
+ *=*) ;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "enable_${ac_feature}='$ac_optarg'" ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix="$ac_optarg" ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he)
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat << EOF
+Usage: configure [options] [host]
+Options: [defaults in brackets after descriptions]
+Configuration:
+ --cache-file=FILE cache test results in FILE
+ --help print this message
+ --no-create do not create output files
+ --quiet, --silent do not print \`checking...' messages
+ --version print the version of autoconf that created configure
+Directory and file names:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [same as prefix]
+ --bindir=DIR user executables in DIR [EPREFIX/bin]
+ --sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
+ --libexecdir=DIR program executables in DIR [EPREFIX/libexec]
+ --datadir=DIR read-only architecture-independent data in DIR
+ [PREFIX/share]
+ --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data in DIR
+ [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
+ --libdir=DIR object code libraries in DIR [EPREFIX/lib]
+ --includedir=DIR C header files in DIR [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
+ --infodir=DIR info documentation in DIR [PREFIX/info]
+ --mandir=DIR man documentation in DIR [PREFIX/man]
+ --srcdir=DIR find the sources in DIR [configure dir or ..]
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM
+ run sed PROGRAM on installed program names
+EOF
+ cat << EOF
+Host type:
+ --build=BUILD configure for building on BUILD [BUILD=HOST]
+ --host=HOST configure for HOST [guessed]
+ --target=TARGET configure for TARGET [TARGET=HOST]
+Features and packages:
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --x-includes=DIR X include files are in DIR
+ --x-libraries=DIR X library files are in DIR
+EOF
+ if test -n "$ac_help"; then
+ echo "--enable and --with options recognized:$ac_help"
+ fi
+ exit 0 ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host="$ac_optarg" ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir="$ac_optarg" ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir="$ac_optarg" ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir="$ac_optarg" ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir="$ac_optarg" ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst \
+ | --locals | --local | --loca | --loc | --lo)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+ localstatedir="$ac_optarg" ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir="$ac_optarg" ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir="$ac_optarg" ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix="$ac_optarg" ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix="$ac_optarg" ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix="$ac_optarg" ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name="$ac_optarg" ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir="$ac_optarg" ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir="$ac_optarg" ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site="$ac_optarg" ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir="$ac_optarg" ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir="$ac_optarg" ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target="$ac_optarg" ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers)
+ echo "configure generated by autoconf version 2.12"
+ exit 0 ;;
+
+ -with-* | --with-*)
+ ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+ fi
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ case "$ac_option" in
+ *=*) ;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "with_${ac_package}='$ac_optarg'" ;;
+
+ -without-* | --without-*)
+ ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+ fi
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ eval "with_${ac_package}=no" ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes="$ac_optarg" ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries="$ac_optarg" ;;
+
+ -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+ ;;
+
+ *)
+ if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
+ echo "configure: warning: $ac_option: invalid host type" 1>&2
+ fi
+ if test "x$nonopt" != xNONE; then
+ { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
+ fi
+ nonopt="$ac_option"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
+fi
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+# File descriptor usage:
+# 0 standard input
+# 1 file creation
+# 2 errors and warnings
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 6 checking for... messages and results
+# 5 compiler messages saved in config.log
+if test "$silent" = yes; then
+ exec 6>/dev/null
+else
+ exec 6>&1
+fi
+exec 5>./config.log
+
+echo "\
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+" 1>&5
+
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell metacharacters.
+ac_configure_args=
+for ac_arg
+do
+ case "$ac_arg" in
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c) ;;
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
+ ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+ esac
+done
+
+# NLS nuisances.
+# Only set these to C if already set. These must not be set unconditionally
+# because not all systems understand e.g. LANG=C (notably SCO).
+# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
+# Non-C LC_CTYPE values break the ctype check.
+if test "${LANG+set}" = set; then LANG=C; export LANG; fi
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
+if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo > confdefs.h
+
+# A filename unique to this package, relative to the directory that
+# configure is in, which we can look for to find out if srcdir is correct.
+ac_unique_file=config.h.in
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then its parent.
+ ac_prog=$0
+ ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
+ test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+ srcdir=$ac_confdir
+ if test ! -r $srcdir/$ac_unique_file; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+ if test "$ac_srcdir_defaulted" = yes; then
+ { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+ else
+ { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+ fi
+fi
+srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+ if test "x$prefix" != xNONE; then
+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+ else
+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+ fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+ if test -r "$ac_site_file"; then
+ echo "loading site script $ac_site_file"
+ . "$ac_site_file"
+ fi
+done
+
+if test -r "$cache_file"; then
+ echo "loading cache $cache_file"
+ . $cache_file
+else
+ echo "creating cache $cache_file"
+ > $cache_file
+fi
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+ # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
+ if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+ ac_n= ac_c='
+' ac_t=' '
+ else
+ ac_n=-n ac_c= ac_t=
+ fi
+else
+ ac_n= ac_c='\c' ac_t=
+fi
+
+
+
+PACKAGE=xlockmore
+
+cat >> confdefs.h <<EOF
+#define PACKAGE "$PACKAGE"
+EOF
+
+VERSION=4.03
+
+cat >> confdefs.h <<EOF
+#define VERSION "$VERSION"
+EOF
+
+
+# Check whether --with-gcc or --without-gcc was given.
+if test "${with_gcc+set}" = set; then
+ withval="$with_gcc"
+ :
+fi
+
+
+test -n "$CC" && cc_specified=yes
+case ${with_gcc} in
+ yes ) CC=gcc ;;
+ no ) CC=cc ;;
+ * ) # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:635: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+ for ac_dir in $PATH; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_CC="gcc"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:664: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+ ac_prog_rejected=no
+ for ac_dir in $PATH; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# -gt 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ set dummy "$ac_dir/$ac_word" "$@"
+ shift
+ ac_cv_prog_CC="$@"
+ fi
+fi
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
+echo "configure:712: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+cat > conftest.$ac_ext <<EOF
+#line 722 "configure"
+#include "confdefs.h"
+main(){return(0);}
+EOF
+if { (eval echo configure:726: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ ac_cv_prog_cc_works=yes
+ # If we can't run a trivial program, we are probably using a cross compiler.
+ if (./conftest; exit) 2>/dev/null; then
+ ac_cv_prog_cc_cross=no
+ else
+ ac_cv_prog_cc_cross=yes
+ fi
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ ac_cv_prog_cc_works=no
+fi
+rm -fr conftest*
+
+echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
+if test $ac_cv_prog_cc_works = no; then
+ { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
+fi
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
+echo "configure:746: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
+echo "configure:751: checking whether we are using GNU C" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.c <<EOF
+#ifdef __GNUC__
+ yes;
+#endif
+EOF
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:760: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+ ac_cv_prog_gcc=yes
+else
+ ac_cv_prog_gcc=no
+fi
+fi
+
+echo "$ac_t""$ac_cv_prog_gcc" 1>&6
+
+if test $ac_cv_prog_gcc = yes; then
+ GCC=yes
+ ac_test_CFLAGS="${CFLAGS+set}"
+ ac_save_CFLAGS="$CFLAGS"
+ CFLAGS=
+ echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
+echo "configure:775: checking whether ${CC-cc} accepts -g" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ echo 'void f(){}' > conftest.c
+if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+ ac_cv_prog_cc_g=yes
+else
+ ac_cv_prog_cc_g=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
+ if test "$ac_test_CFLAGS" = set; then
+ CFLAGS="$ac_save_CFLAGS"
+ elif test $ac_cv_prog_cc_g = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-O2"
+ fi
+else
+ GCC=
+ test "${CFLAGS+set}" = set || CFLAGS="-g"
+fi
+;;
+esac
+
+
+if test "${CC}" = "gcc" ; then
+ CFLAGS="${CFLAGS} -Wall"
+fi
+
+echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
+echo "configure:810: checking whether ln -s works" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ rm -f conftestdata
+if ln -s X conftestdata 2>/dev/null
+then
+ rm -f conftestdata
+ ac_cv_prog_LN_S="ln -s"
+else
+ ac_cv_prog_LN_S=ln
+fi
+fi
+LN_S="$ac_cv_prog_LN_S"
+if test "$ac_cv_prog_LN_S" = "ln -s"; then
+ echo "$ac_t""yes" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
+echo "configure:831: checking how to run the C preprocessor" >&5
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ # This must be in double quotes, not single quotes, because CPP may get
+ # substituted into the Makefile and "${CC-cc}" will confuse make.
+ CPP="${CC-cc} -E"
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp.
+ cat > conftest.$ac_ext <<EOF
+#line 846 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:852: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out`
+if test -z "$ac_err"; then
+ :
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ CPP="${CC-cc} -E -traditional-cpp"
+ cat > conftest.$ac_ext <<EOF
+#line 863 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:869: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out`
+if test -z "$ac_err"; then
+ :
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ CPP=/lib/cpp
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+ ac_cv_prog_CPP="$CPP"
+fi
+ CPP="$ac_cv_prog_CPP"
+else
+ ac_cv_prog_CPP="$CPP"
+fi
+echo "$ac_t""$CPP" 1>&6
+
+echo $ac_n "checking for AIX""... $ac_c" 1>&6
+echo "configure:892: checking for AIX" >&5
+cat > conftest.$ac_ext <<EOF
+#line 894 "configure"
+#include "confdefs.h"
+#ifdef _AIX
+ yes
+#endif
+
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "yes" >/dev/null 2>&1; then
+ rm -rf conftest*
+ echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF
+#define _ALL_SOURCE 1
+EOF
+
+else
+ rm -rf conftest*
+ echo "$ac_t""no" 1>&6
+fi
+rm -f conftest*
+
+
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+ if test -f $ac_dir/install-sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f $ac_dir/install.sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
+fi
+ac_config_guess=$ac_aux_dir/config.guess
+ac_config_sub=$ac_aux_dir/config.sub
+ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+echo "configure:945: checking for a BSD compatible install" >&5
+if test -z "$INSTALL"; then
+if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS="${IFS}:"
+ for ac_dir in $PATH; do
+ # Account for people who put trailing slashes in PATH elements.
+ case "$ac_dir/" in
+ /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ for ac_prog in ginstall installbsd scoinst install; do
+ if test -f $ac_dir/$ac_prog; then
+ if test $ac_prog = install &&
+ grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ # OSF/1 installbsd also uses dspmsg, but is usable.
+ :
+ else
+ ac_cv_path_install="$ac_dir/$ac_prog -c"
+ break 2
+ fi
+ fi
+ done
+ ;;
+ esac
+ done
+ IFS="$ac_save_IFS"
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL="$ac_cv_path_install"
+ else
+ # As a last resort, use the slow shell script. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL="$ac_install_sh"
+ fi
+fi
+echo "$ac_t""$INSTALL" 1>&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+
+echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6
+echo "configure:996: checking for POSIXized ISC" >&5
+if test -d /etc/conf/kconfig.d &&
+ grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1
+then
+ echo "$ac_t""yes" 1>&6
+ ISC=yes # If later tests want to check for ISC.
+ cat >> confdefs.h <<\EOF
+#define _POSIX_SOURCE 1
+EOF
+
+ if test "$GCC" = yes; then
+ CC="$CC -posix"
+ else
+ CC="$CC -Xp"
+ fi
+else
+ echo "$ac_t""no" 1>&6
+ ISC=
+fi
+
+for ac_hdr in fcntl.h limits.h sys/select.h sys/time.h syslog.h unistd.h memory.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:1020: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1025 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1030: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
+
+
+echo $ac_n "checking for working const""... $ac_c" 1>&6
+echo "configure:1058: checking for working const" >&5
+if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1063 "configure"
+#include "confdefs.h"
+
+int main() {
+
+/* Ultrix mips cc rejects this. */
+typedef int charset[2]; const charset x;
+/* SunOS 4.1.1 cc rejects this. */
+char const *const *ccp;
+char **p;
+/* NEC SVR4.0.2 mips cc rejects this. */
+struct point {int x, y;};
+static struct point const zero = {0,0};
+/* AIX XL C 1.02.0.0 rejects this.
+ It does not let you subtract one const X* pointer from another in an arm
+ of an if-expression whose if-part is not a constant expression */
+const char *g = "string";
+ccp = &g + (g ? g-g : 0);
+/* HPUX 7.0 cc rejects these. */
+++ccp;
+p = (char**) ccp;
+ccp = (char const *const *) p;
+{ /* SCO 3.2v4 cc rejects this. */
+ char *t;
+ char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+ *t++ = 0;
+}
+{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
+ int x[] = {25, 17};
+ const int *foo = &x[0];
+ ++foo;
+}
+{ /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+ typedef const int *iptr;
+ iptr p = 0;
+ ++p;
+}
+{ /* AIX XL C 1.02.0.0 rejects this saying
+ "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+ struct s { int j; const int *ap[3]; };
+ struct s *b; b->j = 5;
+}
+{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+ const int foo = 10;
+}
+
+; return 0; }
+EOF
+if { (eval echo configure:1112: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_c_const=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_cv_c_const=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_c_const" 1>&6
+if test $ac_cv_c_const = no; then
+ cat >> confdefs.h <<\EOF
+#define const
+EOF
+
+fi
+
+echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6
+echo "configure:1133: checking for uid_t in sys/types.h" >&5
+if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1138 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "uid_t" >/dev/null 2>&1; then
+ rm -rf conftest*
+ ac_cv_type_uid_t=yes
+else
+ rm -rf conftest*
+ ac_cv_type_uid_t=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_type_uid_t" 1>&6
+if test $ac_cv_type_uid_t = no; then
+ cat >> confdefs.h <<\EOF
+#define uid_t int
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define gid_t int
+EOF
+
+fi
+
+echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
+echo "configure:1167: checking for ANSI C header files" >&5
+if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1172 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1180: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ ac_cv_header_stdc=yes
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+cat > conftest.$ac_ext <<EOF
+#line 1197 "configure"
+#include "confdefs.h"
+#include <string.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "memchr" >/dev/null 2>&1; then
+ :
+else
+ rm -rf conftest*
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+cat > conftest.$ac_ext <<EOF
+#line 1215 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "free" >/dev/null 2>&1; then
+ :
+else
+ rm -rf conftest*
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+if test "$cross_compiling" = yes; then
+ :
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1236 "configure"
+#include "confdefs.h"
+#include <ctype.h>
+#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int main () { int i; for (i = 0; i < 256; i++)
+if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
+exit (0); }
+
+EOF
+if { (eval echo configure:1247: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+then
+ :
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ ac_cv_header_stdc=no
+fi
+rm -fr conftest*
+fi
+
+fi
+fi
+
+echo "$ac_t""$ac_cv_header_stdc" 1>&6
+if test $ac_cv_header_stdc = yes; then
+ cat >> confdefs.h <<\EOF
+#define STDC_HEADERS 1
+EOF
+
+fi
+
+echo $ac_n "checking for pid_t""... $ac_c" 1>&6
+echo "configure:1271: checking for pid_t" >&5
+if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1276 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#if STDC_HEADERS
+#include <stdlib.h>
+#include <stddef.h>
+#endif
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "pid_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
+ rm -rf conftest*
+ ac_cv_type_pid_t=yes
+else
+ rm -rf conftest*
+ ac_cv_type_pid_t=no
+fi
+rm -f conftest*
+
+fi
+echo "$ac_t""$ac_cv_type_pid_t" 1>&6
+if test $ac_cv_type_pid_t = no; then
+ cat >> confdefs.h <<\EOF
+#define pid_t int
+EOF
+
+fi
+
+echo $ac_n "checking for size_t""... $ac_c" 1>&6
+echo "configure:1304: checking for size_t" >&5
+if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1309 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#if STDC_HEADERS
+#include <stdlib.h>
+#include <stddef.h>
+#endif
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
+ rm -rf conftest*
+ ac_cv_type_size_t=yes
+else
+ rm -rf conftest*
+ ac_cv_type_size_t=no
+fi
+rm -f conftest*
+
+fi
+echo "$ac_t""$ac_cv_type_size_t" 1>&6
+if test $ac_cv_type_size_t = no; then
+ cat >> confdefs.h <<\EOF
+#define size_t unsigned
+EOF
+
+fi
+
+echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
+echo "configure:1337: checking whether time.h and sys/time.h may both be included" >&5
+if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1342 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <sys/time.h>
+#include <time.h>
+int main() {
+struct tm *tp;
+; return 0; }
+EOF
+if { (eval echo configure:1351: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_header_time=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_cv_header_time=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_header_time" 1>&6
+if test $ac_cv_header_time = yes; then
+ cat >> confdefs.h <<\EOF
+#define TIME_WITH_SYS_TIME 1
+EOF
+
+fi
+
+echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6
+echo "configure:1372: checking whether struct tm is in sys/time.h or time.h" >&5
+if eval "test \"`echo '$''{'ac_cv_struct_tm'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1377 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <time.h>
+int main() {
+struct tm *tp; tp->tm_sec;
+; return 0; }
+EOF
+if { (eval echo configure:1385: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_struct_tm=time.h
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_cv_struct_tm=sys/time.h
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_struct_tm" 1>&6
+if test $ac_cv_struct_tm = sys/time.h; then
+ cat >> confdefs.h <<\EOF
+#define TM_IN_SYS_TIME 1
+EOF
+
+fi
+
+echo $ac_n "checking for inline""... $ac_c" 1>&6
+echo "configure:1406: checking for inline" >&5
+if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+ cat > conftest.$ac_ext <<EOF
+#line 1413 "configure"
+#include "confdefs.h"
+
+int main() {
+} $ac_kw foo() {
+; return 0; }
+EOF
+if { (eval echo configure:1420: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_c_inline=$ac_kw; break
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+fi
+rm -f conftest*
+done
+
+fi
+
+echo "$ac_t""$ac_cv_c_inline" 1>&6
+case "$ac_cv_c_inline" in
+ inline | yes) ;;
+ no) cat >> confdefs.h <<\EOF
+#define inline
+EOF
+ ;;
+ *) cat >> confdefs.h <<EOF
+#define inline $ac_cv_c_inline
+EOF
+ ;;
+esac
+
+
+for ac_func in gethostname gettimeofday select strdup
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:1449: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1454 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:1477: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
+
+echo $ac_n "checking for seteuid""... $ac_c" 1>&6
+echo "configure:1502: checking for seteuid" >&5
+if eval "test \"`echo '$''{'ac_cv_func_seteuid'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1507 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char seteuid(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char seteuid();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_seteuid) || defined (__stub___seteuid)
+choke me
+#else
+seteuid();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:1530: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ rm -rf conftest*
+ eval "ac_cv_func_seteuid=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_seteuid=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'seteuid`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ cat >> confdefs.h <<\EOF
+#define HAVE_SETEUID 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+echo $ac_n "checking for setreuid""... $ac_c" 1>&6
+echo "configure:1551: checking for setreuid" >&5
+if eval "test \"`echo '$''{'ac_cv_func_setreuid'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1556 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char setreuid(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char setreuid();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_setreuid) || defined (__stub___setreuid)
+choke me
+#else
+setreuid();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:1579: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ rm -rf conftest*
+ eval "ac_cv_func_setreuid=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_setreuid=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'setreuid`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ cat >> confdefs.h <<\EOF
+#define HAVE_SETREUID 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+fi
+
+
+# If we find X, set shell vars x_includes and x_libraries to the
+# paths, otherwise set no_x=yes.
+# Uses ac_ vars as temps to allow command line to override cache and checks.
+# --without-x overrides everything else, but does not touch the cache.
+echo $ac_n "checking for X""... $ac_c" 1>&6
+echo "configure:1609: checking for X" >&5
+
+# Check whether --with-x or --without-x was given.
+if test "${with_x+set}" = set; then
+ withval="$with_x"
+ :
+fi
+
+# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
+if test "x$with_x" = xno; then
+ # The user explicitly disabled X.
+ have_x=disabled
+else
+ if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then
+ # Both variables are already set.
+ have_x=yes
+ else
+if eval "test \"`echo '$''{'ac_cv_have_x'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ # One or both of the vars are not set, and there is no cached value.
+ac_x_includes=NO ac_x_libraries=NO
+rm -fr conftestdir
+if mkdir conftestdir; then
+ cd conftestdir
+ # Make sure to not put "make" in the Imakefile rules, since we grep it out.
+ cat > Imakefile <<'EOF'
+acfindx:
+ @echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"'
+EOF
+ if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
+ # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+ eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
+ # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
+ for ac_extension in a so sl; do
+ if test ! -f $ac_im_usrlibdir/libX11.$ac_extension &&
+ test -f $ac_im_libdir/libX11.$ac_extension; then
+ ac_im_usrlibdir=$ac_im_libdir; break
+ fi
+ done
+ # Screen out bogus values from the imake configuration. They are
+ # bogus both because they are the default anyway, and because
+ # using them would break gcc on systems where it needs fixed includes.
+ case "$ac_im_incroot" in
+ /usr/include) ;;
+ *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes="$ac_im_incroot" ;;
+ esac
+ case "$ac_im_usrlibdir" in
+ /usr/lib | /lib) ;;
+ *) test -d "$ac_im_usrlibdir" && ac_x_libraries="$ac_im_usrlibdir" ;;
+ esac
+ fi
+ cd ..
+ rm -fr conftestdir
+fi
+
+if test "$ac_x_includes" = NO; then
+ # Guess where to find include files, by looking for this one X11 .h file.
+ test -z "$x_direct_test_include" && x_direct_test_include=X11/Intrinsic.h
+
+ # First, try using that file with no special directory specified.
+cat > conftest.$ac_ext <<EOF
+#line 1671 "configure"
+#include "confdefs.h"
+#include <$x_direct_test_include>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1676: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ # We can compile using X headers with no special include directory.
+ac_x_includes=
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ # Look for the header file in a standard set of common directories.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+ for ac_dir in \
+ /usr/X11/include \
+ /usr/X11R6/include \
+ /usr/X11R5/include \
+ /usr/X11R4/include \
+ \
+ /usr/include/X11 \
+ /usr/include/X11R6 \
+ /usr/include/X11R5 \
+ /usr/include/X11R4 \
+ \
+ /usr/local/X11/include \
+ /usr/local/X11R6/include \
+ /usr/local/X11R5/include \
+ /usr/local/X11R4/include \
+ \
+ /usr/local/include/X11 \
+ /usr/local/include/X11R6 \
+ /usr/local/include/X11R5 \
+ /usr/local/include/X11R4 \
+ \
+ /usr/X386/include \
+ /usr/x386/include \
+ /usr/XFree86/include/X11 \
+ \
+ /usr/include \
+ /usr/local/include \
+ /usr/unsupported/include \
+ /usr/athena/include \
+ /usr/local/x11r5/include \
+ /usr/lpp/Xamples/include \
+ \
+ /usr/openwin/include \
+ /usr/openwin/share/include \
+ ; \
+ do
+ if test -r "$ac_dir/$x_direct_test_include"; then
+ ac_x_includes=$ac_dir
+ break
+ fi
+ done
+fi
+rm -f conftest*
+fi # $ac_x_includes = NO
+
+if test "$ac_x_libraries" = NO; then
+ # Check for the libraries.
+
+ test -z "$x_direct_test_library" && x_direct_test_library=Xt
+ test -z "$x_direct_test_function" && x_direct_test_function=XtMalloc
+
+ # See if we find them without any special options.
+ # Don't add to $LIBS permanently.
+ ac_save_LIBS="$LIBS"
+ LIBS="-l$x_direct_test_library $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1745 "configure"
+#include "confdefs.h"
+
+int main() {
+${x_direct_test_function}()
+; return 0; }
+EOF
+if { (eval echo configure:1752: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ rm -rf conftest*
+ LIBS="$ac_save_LIBS"
+# We can link X programs with no special library path.
+ac_x_libraries=
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ LIBS="$ac_save_LIBS"
+# First see if replacing the include by lib works.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+for ac_dir in `echo "$ac_x_includes" | sed s/include/lib/` \
+ /usr/X11/lib \
+ /usr/X11R6/lib \
+ /usr/X11R5/lib \
+ /usr/X11R4/lib \
+ \
+ /usr/lib/X11 \
+ /usr/lib/X11R6 \
+ /usr/lib/X11R5 \
+ /usr/lib/X11R4 \
+ \
+ /usr/local/X11/lib \
+ /usr/local/X11R6/lib \
+ /usr/local/X11R5/lib \
+ /usr/local/X11R4/lib \
+ \
+ /usr/local/lib/X11 \
+ /usr/local/lib/X11R6 \
+ /usr/local/lib/X11R5 \
+ /usr/local/lib/X11R4 \
+ \
+ /usr/X386/lib \
+ /usr/x386/lib \
+ /usr/XFree86/lib/X11 \
+ \
+ /usr/lib \
+ /usr/local/lib \
+ /usr/unsupported/lib \
+ /usr/athena/lib \
+ /usr/local/x11r5/lib \
+ /usr/lpp/Xamples/lib \
+ /lib/usr/lib/X11 \
+ \
+ /usr/openwin/lib \
+ /usr/openwin/share/lib \
+ ; \
+do
+ for ac_extension in a so sl; do
+ if test -r $ac_dir/lib${x_direct_test_library}.$ac_extension; then
+ ac_x_libraries=$ac_dir
+ break 2
+ fi
+ done
+done
+fi
+rm -f conftest*
+fi # $ac_x_libraries = NO
+
+if test "$ac_x_includes" = NO || test "$ac_x_libraries" = NO; then
+ # Didn't find X anywhere. Cache the known absence of X.
+ ac_cv_have_x="have_x=no"
+else
+ # Record where we found X for the cache.
+ ac_cv_have_x="have_x=yes \
+ ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries"
+fi
+fi
+ fi
+ eval "$ac_cv_have_x"
+fi # $with_x != no
+
+if test "$have_x" != yes; then
+ echo "$ac_t""$have_x" 1>&6
+ no_x=yes
+else
+ # If each of the values was on the command line, it overrides each guess.
+ test "x$x_includes" = xNONE && x_includes=$ac_x_includes
+ test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
+ # Update the cache value to reflect the command line values.
+ ac_cv_have_x="have_x=yes \
+ ac_x_includes=$x_includes ac_x_libraries=$x_libraries"
+ echo "$ac_t""libraries $x_libraries, headers $x_includes" 1>&6
+fi
+
+if test "$no_x" = yes; then
+ # Not all programs may use this symbol, but it does not hurt to define it.
+ cat >> confdefs.h <<\EOF
+#define X_DISPLAY_MISSING 1
+EOF
+
+ X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
+else
+ if test -n "$x_includes"; then
+ X_CFLAGS="$X_CFLAGS -I$x_includes"
+ fi
+
+ # It would also be nice to do this for all -L options, not just this one.
+ if test -n "$x_libraries"; then
+ X_LIBS="$X_LIBS -L$x_libraries"
+ # For Solaris; some versions of Sun CC require a space after -R and
+ # others require no space. Words are not sufficient . . . .
+ case "`(uname -sr) 2>/dev/null`" in
+ "SunOS 5"*)
+ echo $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6
+echo "configure:1858: checking whether -R must be followed by a space" >&5
+ ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries"
+ cat > conftest.$ac_ext <<EOF
+#line 1861 "configure"
+#include "confdefs.h"
+
+int main() {
+
+; return 0; }
+EOF
+if { (eval echo configure:1868: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ rm -rf conftest*
+ ac_R_nospace=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_R_nospace=no
+fi
+rm -f conftest*
+ if test $ac_R_nospace = yes; then
+ echo "$ac_t""no" 1>&6
+ X_LIBS="$X_LIBS -R$x_libraries"
+ else
+ LIBS="$ac_xsave_LIBS -R $x_libraries"
+ cat > conftest.$ac_ext <<EOF
+#line 1884 "configure"
+#include "confdefs.h"
+
+int main() {
+
+; return 0; }
+EOF
+if { (eval echo configure:1891: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ rm -rf conftest*
+ ac_R_space=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_R_space=no
+fi
+rm -f conftest*
+ if test $ac_R_space = yes; then
+ echo "$ac_t""yes" 1>&6
+ X_LIBS="$X_LIBS -R $x_libraries"
+ else
+ echo "$ac_t""neither works" 1>&6
+ fi
+ fi
+ LIBS="$ac_xsave_LIBS"
+ esac
+ fi
+
+ # Check for system-dependent libraries X programs must link with.
+ # Do this before checking for the system-independent R6 libraries
+ # (-lICE), since we may need -lsocket or whatever for X linking.
+
+ if test "$ISC" = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
+ else
+ # Martyn.Johnson@cl.cam.ac.uk says this is needed for Ultrix, if the X
+ # libraries were built with DECnet support. And karl@cs.umb.edu says
+ # the Alpha needs dnet_stub (dnet does not exist).
+ echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6
+echo "configure:1923: checking for dnet_ntoa in -ldnet" >&5
+ac_lib_var=`echo dnet'_'dnet_ntoa | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-ldnet $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1931 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dnet_ntoa();
+
+int main() {
+dnet_ntoa()
+; return 0; }
+EOF
+if { (eval echo configure:1942: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ if test $ac_cv_lib_dnet_dnet_ntoa = no; then
+ echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6
+echo "configure:1964: checking for dnet_ntoa in -ldnet_stub" >&5
+ac_lib_var=`echo dnet_stub'_'dnet_ntoa | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-ldnet_stub $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1972 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dnet_ntoa();
+
+int main() {
+dnet_ntoa()
+; return 0; }
+EOF
+if { (eval echo configure:1983: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ fi
+
+ # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
+ # to get the SysV transport functions.
+ # chad@anasazi.com says the Pyramis MIS-ES running DC/OSx (SVR4)
+ # needs -lnsl.
+ # The nsl library prevents programs from opening the X display
+ # on Irix 5.2, according to dickey@clark.net.
+ echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6
+echo "configure:2012: checking for gethostbyname" >&5
+if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 2017 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char gethostbyname(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char gethostbyname();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_gethostbyname) || defined (__stub___gethostbyname)
+choke me
+#else
+gethostbyname();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:2040: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ rm -rf conftest*
+ eval "ac_cv_func_gethostbyname=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_gethostbyname=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'gethostbyname`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ :
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ if test $ac_cv_func_gethostbyname = no; then
+ echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
+echo "configure:2061: checking for gethostbyname in -lnsl" >&5
+ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lnsl $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2069 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char gethostbyname();
+
+int main() {
+gethostbyname()
+; return 0; }
+EOF
+if { (eval echo configure:2080: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ fi
+
+ # lieder@skyler.mavd.honeywell.com says without -lsocket,
+ # socket/setsockopt and other routines are undefined under SCO ODT
+ # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary
+ # on later versions), says simon@lia.di.epfl.ch: it contains
+ # gethostby* variants that don't use the nameserver (or something).
+ # -lsocket must be given before -lnsl if both are needed.
+ # We assume that if connect needs -lnsl, so does gethostbyname.
+ echo $ac_n "checking for connect""... $ac_c" 1>&6
+echo "configure:2110: checking for connect" >&5
+if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 2115 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char connect(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char connect();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_connect) || defined (__stub___connect)
+choke me
+#else
+connect();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:2138: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ rm -rf conftest*
+ eval "ac_cv_func_connect=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_connect=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'connect`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ :
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ if test $ac_cv_func_connect = no; then
+ echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6
+echo "configure:2159: checking for connect in -lsocket" >&5
+ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2167 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char connect();
+
+int main() {
+connect()
+; return 0; }
+EOF
+if { (eval echo configure:2178: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ fi
+
+ # gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX.
+ echo $ac_n "checking for remove""... $ac_c" 1>&6
+echo "configure:2202: checking for remove" >&5
+if eval "test \"`echo '$''{'ac_cv_func_remove'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 2207 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char remove(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char remove();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_remove) || defined (__stub___remove)
+choke me
+#else
+remove();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:2230: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ rm -rf conftest*
+ eval "ac_cv_func_remove=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_remove=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'remove`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ :
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ if test $ac_cv_func_remove = no; then
+ echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6
+echo "configure:2251: checking for remove in -lposix" >&5
+ac_lib_var=`echo posix'_'remove | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lposix $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2259 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char remove();
+
+int main() {
+remove()
+; return 0; }
+EOF
+if { (eval echo configure:2270: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ fi
+
+ # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
+ echo $ac_n "checking for shmat""... $ac_c" 1>&6
+echo "configure:2294: checking for shmat" >&5
+if eval "test \"`echo '$''{'ac_cv_func_shmat'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 2299 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char shmat(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char shmat();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_shmat) || defined (__stub___shmat)
+choke me
+#else
+shmat();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:2322: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ rm -rf conftest*
+ eval "ac_cv_func_shmat=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_shmat=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'shmat`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ :
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ if test $ac_cv_func_shmat = no; then
+ echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6
+echo "configure:2343: checking for shmat in -lipc" >&5
+ac_lib_var=`echo ipc'_'shmat | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lipc $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2351 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char shmat();
+
+int main() {
+shmat()
+; return 0; }
+EOF
+if { (eval echo configure:2362: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ fi
+ fi
+
+ # Check for libraries that X11R6 Xt/Xaw programs need.
+ ac_save_LDFLAGS="$LDFLAGS"
+ test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries"
+ # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
+ # check for ICE first), but we must link in the order -lSM -lICE or
+ # we get undefined symbols. So assume we have SM if we have ICE.
+ # These have to be linked with before -lX11, unlike the other
+ # libraries we check for below, so use a different variable.
+ # --interran@uluru.Stanford.EDU, kb@cs.umb.edu.
+ echo $ac_n "checking for IceConnectionNumber in -lICE""... $ac_c" 1>&6
+echo "configure:2395: checking for IceConnectionNumber in -lICE" >&5
+ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lICE $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2403 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char IceConnectionNumber();
+
+int main() {
+IceConnectionNumber()
+; return 0; }
+EOF
+if { (eval echo configure:2414: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ LDFLAGS="$ac_save_LDFLAGS"
+
+fi
+
+if test "$no_x" = yes; then
+ XLIBS=NONE
+else
+ if test -n "${x_includes}"; then
+ XLOCKINC="-I${x_includes} ${XLOCKINC}"
+ XMLOCKINC="-I${x_includes} ${XMLOCKINC}"
+ fi
+ XLIBS="${x_libraries}"
+ if test -n "${x_libraries}"; then
+ XLOCKLDFLAGS="-R/usr/lib:${x_libraries}"
+ XLOCKLIBPATHS="-L${x_libraries} ${XLOCKLIBPATHS}"
+ XMLOCKLIBPATHS="-L${x_libraries} ${XMLOCKLIBPATHS}"
+ fi
+ XLOCKLIBS="${X_PRE_LIBS} ${X_EXTRA_LIBS} ${XLOCKLIBS}"
+ XMLOCKLIBS="-lXt ${XMLOCKLIBS}"
+fi
+
+# Check whether --with-includes or --without-includes was given.
+if test "${with_includes+set}" = set; then
+ withval="$with_includes"
+ :
+fi
+
+case "x$withval" in
+x/*|x.*)
+ extra_include=$withval
+ echo "$ac_t""adding $extra_include to include search path for following packages" 1>&6
+ if test ! -d $extra_include; then
+ echo "$ac_t""Warning: Directory $extra_include does not exist" 1>&6
+ fi
+ ;;
+*)
+ extra_include=""
+ ;;
+esac
+
+# Check whether --with-libraries or --without-libraries was given.
+if test "${with_libraries+set}" = set; then
+ withval="$with_libraries"
+ :
+fi
+
+case "x$withval" in
+x/*|x.*)
+ extra_lib=$withval
+ echo "$ac_t""adding $extra_lib to library search path for following packages" 1>&6
+ if test ! -d $extra_lib; then
+ echo "$ac_t""Warning: Directory $extra_lib does not exist" 1>&6
+ fi
+ ;;
+*)
+ extra_lib=""
+ ;;
+esac
+
+xpm=no
+
+
+
+
+
+xpm_includes=NONE
+xpm_libraries=NONE
+
+echo $ac_n "checking for XPM""... $ac_c" 1>&6
+echo "configure:2503: checking for XPM" >&5
+# Check whether --with-xpm or --without-xpm was given.
+if test "${with_xpm+set}" = set; then
+ withval="$with_xpm"
+ :
+fi
+
+if test "x$with_xpm" = xno; then
+ no_xpm=yes
+else
+ if test "x$xpm_includes" != xNONE && test "x$xpm_libraries" != xNONE; then
+ no_xpm=
+ else
+if eval "test \"`echo '$''{'ac_cv_path_xpm'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ # One or both of these vars are not set, and there is no cached value.
+no_xpm=yes
+test -z "$xpm_direct_test_library" && xpm_direct_test_library=Xpm
+test -z "$xpm_direct_test_function" && xpm_direct_test_function=XpmCreateImageFromData
+test -z "$xpm_direct_test_include" && xpm_direct_test_include=xpm.h
+ for ac_dir in \
+ /usr/X11R6/include/X11 \
+ /usr/X11R5/include/X11 \
+ /usr/X11R4/include/X11 \
+ /usr/X11/include/X11 \
+ \
+ /usr/include/X11/X11 \
+ /usr/include/X11R6/X11 \
+ /usr/include/X11R5/X11 \
+ /usr/include/X11R4/X11 \
+ \
+ /usr/local/X11/include/X11 \
+ /usr/local/X11R6/include/X11 \
+ /usr/local/X11R5/include/X11 \
+ /usr/local/X11R4/include/X11 \
+ \
+ /usr/local/include/X11/X11 \
+ /usr/local/include/X11R6/X11 \
+ /usr/local/include/X11R5/X11 \
+ /usr/local/include/X11R4/X11 \
+ \
+ /usr/X386/include/X11 \
+ /usr/x386/include/X11 \
+ /usr/XFree86/include/X11/X11 \
+ \
+ /usr/local/include/X11 \
+ /usr/include/X11 \
+ /usr/unsupported/include/X11 \
+ /usr/athena/include/X11 \
+ /usr/local/x11r5/include/X11 \
+ /usr/lpp/Xamples/include/X11 \
+ \
+ /usr/openwin/include/X11 \
+ /usr/openwin/share/include/X11 \
+ \
+ /usr/include/Vk \
+ $extra_include \
+ ; \
+ do
+ if test -r "$ac_dir/$xpm_direct_test_include"; then
+ no_xpm= ac_xpm_includes=$ac_dir
+ break
+ fi
+ done
+
+# Check for the libraries.
+# See if we find them without any special options.
+# Do not add to $LIBS permanently.
+ac_save_LIBS="$LIBS"
+LIBS="-l$xpm_direct_test_library $LIBS"
+# First see if replacing the include by lib works.
+for ac_dir in `echo "$ac_xpm_includes" | sed s%/X11$%% | sed s/include/lib/` \
+ \
+ /usr/X11/lib \
+ /usr/X11R6/lib \
+ /usr/X11R5/lib \
+ /usr/X11R4/lib \
+ \
+ /usr/lib/X11 \
+ /usr/lib/X11R6 \
+ /usr/lib/X11R5 \
+ /usr/lib/X11R4 \
+ \
+ /usr/local/X11/lib \
+ /usr/local/X11R6/lib \
+ /usr/local/X11R5/lib \
+ /usr/local/X11R4/lib \
+ \
+ /usr/local/lib/X11 \
+ /usr/local/lib/X11R6 \
+ /usr/local/lib/X11R5 \
+ /usr/local/lib/X11R4 \
+ \
+ /usr/X386/lib \
+ /usr/x386/lib \
+ /usr/XFree86/lib/X11 \
+ \
+ /usr/lib \
+ /usr/local/lib \
+ /usr/unsupported/lib \
+ /usr/athena/lib \
+ /usr/local/x11r5/lib \
+ /usr/lpp/Xamples/lib \
+ /lib/usr/lib/X11 \
+ \
+ /usr/openwin/lib \
+ /usr/openwin/share/lib \
+ $extra_lib \
+ ; \
+do
+ for ac_extension in a so sl; do
+ if test -r $ac_dir/lib${xpm_direct_test_library}.$ac_extension; then
+ no_xpm= ac_xpm_libraries=$ac_dir
+ break 2
+ fi
+ done
+done
+LIBS="$ac_save_LIBS"
+
+if test "$no_xpm" = yes; then
+ ac_cv_path_xpm="no_xpm=yes"
+else
+ ac_cv_path_xpm="no_xpm= ac_xpm_includes=$ac_xpm_includes ac_xpm_libraries=$ac_xpm_libraries"
+fi
+fi
+ fi
+ eval "$ac_cv_path_xpm"
+fi # with_xpm != no
+
+if test "$no_xpm" = yes; then
+ echo "$ac_t""no" 1>&6
+else
+ xpm=yes
+ cat >> confdefs.h <<\EOF
+#define USE_XPMINC 1
+EOF
+
+ XLOCKLIBS="${XLOCKLIBS} -lXpm"
+ test "x$xpm_includes" = xNONE && xpm_includes=$ac_xpm_includes
+ test "x$xpm_libraries" = xNONE && xpm_libraries=$ac_xpm_libraries
+ ac_cv_path_xpm="no_xpm= ac_xpm_includes=$xpm_includes ac_xpm_libraries=$xpm_libraries"
+ echo "$ac_t""libraries $xpm_libraries, headers $xpm_includes" 1>&6
+fi
+
+
+if test "x$xpm_libraries" != x && test "x$xpm_libraries" != xNONE ; then
+ XLOCKLDFLAGS="${XLOCKLDFLAGS}:$xpm_libraries"
+ XLOCKLIBPATHS="${XLOCKLIBPATHS} -L$xpm_libraries"
+fi
+if test "x$xpm_includes" != x && test "x$xpm_includes" != xNONE ; then
+ XLOCKINC="${XLOCKINC} -I$xpm_includes"
+fi
+
+
+
+
+
+
+motif_includes=NONE
+motif_libraries=NONE
+
+echo $ac_n "checking for Motif""... $ac_c" 1>&6
+echo "configure:2666: checking for Motif" >&5
+# Check whether --with-motif or --without-motif was given.
+if test "${with_motif+set}" = set; then
+ withval="$with_motif"
+ :
+fi
+
+if test "x$with_motif" = xno; then
+ no_motif=yes
+else
+ if test "x$motif_includes" != xNONE && test "x$motif_libraries" != xNONE; then
+ no_motif=
+ else
+if eval "test \"`echo '$''{'ac_cv_path_motif'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ # One or both of these vars are not set, and there is no cached value.
+no_motif=yes
+test -z "$motif_direct_test_library" && motif_direct_test_library=Xm
+test -z "$motif_direct_test_function" && motif_direct_test_function=XmCreatePushButton
+test -z "$motif_direct_test_include" && motif_direct_test_include=Xm/Xm.h
+ for ac_dir in \
+ /usr/include/Motif1.2 \
+ /usr/Motif1.2/include \
+ \
+ /usr/motif/include \
+ \
+ /usr/X11R6/include \
+ /usr/X11R5/include \
+ /usr/X11R4/include \
+ \
+ /usr/include/X11R6 \
+ /usr/include/X11R5 \
+ /usr/include/X11R4 \
+ \
+ /usr/local/X11R6/include \
+ /usr/local/X11R5/include \
+ /usr/local/X11R4/include \
+ \
+ /usr/local/include/X11R6 \
+ /usr/local/include/X11R5 \
+ /usr/local/include/X11R4 \
+ \
+ /usr/X11/include \
+ /usr/include/X11 \
+ /usr/local/X11/include \
+ /usr/local/include/X11 \
+ \
+ /usr/X386/include \
+ /usr/x386/include \
+ /usr/XFree86/include/X11 \
+ \
+ /usr/dt/include \
+ \
+ /usr/local/include \
+ /usr/include \
+ /usr/unsupported/include \
+ /usr/athena/include \
+ /usr/local/x11r5/include \
+ /usr/lpp/Xamples/include \
+ $extra_include \
+ ; \
+ do
+ if test -r "$ac_dir/$motif_direct_test_include"; then
+ no_motif= ac_motif_includes=$ac_dir
+ break
+ fi
+ done
+
+# Check for the libraries.
+# See if we find them without any special options.
+# Do not add to $LIBS permanently.
+ac_save_LIBS="$LIBS"
+LIBS="-l$motif_direct_test_library $LIBS"
+# First see if replacing the include by lib works.
+for ac_dir in `echo "$ac_motif_includes" | sed s/include/lib/` \
+ /usr/lib/Motif1.2 \
+ /usr/Motif1.2/lib \
+ \
+ /usr/motif/lib \
+ \
+ /usr/X11R6/lib \
+ /usr/X11R5/lib \
+ /usr/X11R4/lib \
+ \
+ /usr/lib/X11R6 \
+ /usr/lib/X11R5 \
+ /usr/lib/X11R4 \
+ \
+ /usr/local/X11R6/lib \
+ /usr/local/X11R5/lib \
+ /usr/local/X11R4/lib \
+ \
+ /usr/local/lib/X11R6 \
+ /usr/local/lib/X11R5 \
+ /usr/local/lib/X11R4 \
+ \
+ /usr/X11/lib \
+ /usr/lib/X11 \
+ /usr/local/X11/lib \
+ \
+ /usr/X386/lib \
+ /usr/x386/lib \
+ /usr/XFree86/lib/X11 \
+ \
+ /usr/lib \
+ /usr/local/lib \
+ /usr/unsupported/lib \
+ /usr/athena/lib \
+ /usr/local/x11r5/lib \
+ /usr/lpp/Xamples/lib \
+ $extra_lib \
+ ; \
+do
+ for ac_extension in a so sl; do
+ if test -r $ac_dir/lib${motif_direct_test_library}.$ac_extension; then
+ no_motif= ac_motif_libraries=$ac_dir
+ break 2
+ fi
+ done
+done
+LIBS="$ac_save_LIBS"
+
+if test "$no_motif" = yes; then
+ ac_cv_path_motif="no_motif=yes"
+else
+ ac_cv_path_motif="no_motif= ac_motif_includes=$ac_motif_includes ac_motif_libraries=$ac_motif_libraries"
+fi
+fi
+ fi
+ eval "$ac_cv_path_motif"
+fi # with_motif != no
+
+if test "$no_motif" = yes; then
+ echo "$ac_t""no" 1>&6
+ XMLOCK=""
+ INSTALL_XMLOCK=""
+ UNINSTALL_XMLOCK=""
+else
+ XMLOCKLIBS="-lXm ${XMLOCKLIBS}"
+ XMLOCK="xmlock"
+ INSTALL_XMLOCK="install_xmlock"
+ UNINSTALL_XMLOCK="uninstall_xmlock"
+ test "x$motif_includes" = xNONE && motif_includes=$ac_motif_includes
+ test "x$motif_libraries" = xNONE && motif_libraries=$ac_motif_libraries
+ ac_cv_path_motif="no_motif= ac_motif_includes=$motif_includes ac_motif_libraries=$motif_libraries"
+ echo "$ac_t""libraries $motif_libraries, headers $motif_includes" 1>&6
+fi
+
+
+if test "x$motif_libraries" != x && test "x$motif_libraries" != xNONE ; then
+ XMLOCKLIBPATHS="${XMLOCKLIBPATHS} -L$motif_libraries"
+fi
+if test "x$motif_includes" != x && test "x$motif_includes" != xNONE ; then
+ XMLOCKINC="${XMLOCKINC} -I$motif_includes"
+fi
+
+
+
+
+
+
+editres_includes=NONE
+editres_libraries=NONE
+
+echo $ac_n "checking for Editres""... $ac_c" 1>&6
+echo "configure:2832: checking for Editres" >&5
+# Check whether --with-editres or --without-editres was given.
+if test "${with_editres+set}" = set; then
+ withval="$with_editres"
+ :
+fi
+
+if test "x$with_editres" = xno; then
+ no_editres=yes
+else
+ if test "x$editres_includes" != xNONE && test "x$editres_libraries" != xNONE; then
+ no_editres=
+ else
+if eval "test \"`echo '$''{'ac_cv_path_editres'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ # One or both of these vars are not set, and there is no cached value.
+no_editres=yes
+test -z "$editres_direct_test_library" && editres_direct_test_library=Xmu
+test -z "$editres_direct_test_function" && editres_direct_test_function=_XEditResCheckMessages
+test -z "$editres_direct_test_include" && editres_direct_test_include=X11/Xmu/Editres.h
+ for ac_dir in \
+ /usr/X11R6/include \
+ /usr/X11R5/include \
+ /usr/X11R4/include \
+ /usr/X11/include \
+ \
+ /usr/include/X11 \
+ /usr/include/X11R6 \
+ /usr/include/X11R5 \
+ /usr/include/X11R4 \
+ \
+ /usr/local/X11/include \
+ /usr/local/X11R6/include \
+ /usr/local/X11R5/include \
+ /usr/local/X11R4/include \
+ \
+ /usr/local/include/X11 \
+ /usr/local/include/X11R6 \
+ /usr/local/include/X11R5 \
+ /usr/local/include/X11R4 \
+ \
+ /usr/X386/include \
+ /usr/x386/include \
+ /usr/XFree86/include \
+ \
+ /usr/local/include \
+ /usr/include \
+ /usr/unsupported/include \
+ /usr/athena/include \
+ /usr/local/x11r5/include \
+ /usr/lpp/Xamples/include \
+ \
+ /usr/openwin/include \
+ /usr/openwin/share/include \
+ $extra_include \
+ ; \
+ do
+ if test -r "$ac_dir/$editres_direct_test_include"; then
+ no_editres= ac_editres_includes=$ac_dir
+ break
+ fi
+ done
+
+# Check for the libraries.
+# See if we find them without any special options.
+# Do not add to $LIBS permanently.
+ac_save_LIBS="$LIBS"
+LIBS="-l$editres_direct_test_library $LIBS"
+# First see if replacing the include by lib works.
+for ac_dir in `echo "$ac_editres_includes" | sed s/include/lib/` \
+ \
+ /usr/X11/lib \
+ /usr/X11R6/lib \
+ /usr/X11R5/lib \
+ /usr/X11R4/lib \
+ \
+ /usr/lib/X11 \
+ /usr/lib/X11R6 \
+ /usr/lib/X11R5 \
+ /usr/lib/X11R4 \
+ \
+ /usr/local/X11/lib \
+ /usr/local/X11R6/lib \
+ /usr/local/X11R5/lib \
+ /usr/local/X11R4/lib \
+ \
+ /usr/local/lib/X11 \
+ /usr/local/lib/X11R6 \
+ /usr/local/lib/X11R5 \
+ /usr/local/lib/X11R4 \
+ \
+ /usr/X386/lib \
+ /usr/x386/lib \
+ /usr/XFree86/lib/X11 \
+ \
+ /usr/lib \
+ /usr/local/lib \
+ /usr/unsupported/lib \
+ /usr/athena/lib \
+ /usr/local/x11r5/lib \
+ /usr/lpp/Xamples/lib \
+ /lib/usr/lib/X11 \
+ \
+ /usr/openwin/lib \
+ /usr/openwin/share/lib \
+ $extra_lib \
+ ; \
+do
+ for ac_extension in a so sl; do
+ if test -r $ac_dir/lib${editres_direct_test_library}.$ac_extension; then
+ no_editres= ac_editres_libraries=$ac_dir
+ break 2
+ fi
+ done
+done
+LIBS="$ac_save_LIBS"
+
+if test "$no_editres" = yes; then
+ ac_cv_path_editres="no_editres=yes"
+else
+ ac_cv_path_editres="no_editres= ac_editres_includes=$ac_editres_includes ac_editres_libraries=$ac_editres_libraries"
+fi
+fi
+ fi
+ eval "$ac_cv_path_editres"
+fi # with_editres != no
+
+if test "$no_editres" = yes; then
+ echo "$ac_t""no" 1>&6
+else
+ cat >> confdefs.h <<\EOF
+#define USE_XMU 1
+EOF
+
+ XMLOCKLIBS="-lXmu ${XMLOCKLIBS}"
+ test "x$editres_includes" = xNONE && editres_includes=$ac_editres_includes
+ test "x$editres_libraries" = xNONE && editres_libraries=$ac_editres_libraries
+ ac_cv_path_editres="no_editres= ac_editres_includes=$editres_includes ac_editres_libraries=$editres_libraries"
+ echo "$ac_t""libraries $editres_libraries, headers $editres_includes" 1>&6
+fi
+
+
+if test "x$editres_libraries" != x && test "x$editres_libraries" != xNONE ; then
+ XMLOCKLIBPATHS="${XMLOCKLIBPATHS} -L$editres_libraries"
+fi
+if test "x$editres_includes" != x && test "x$editres_includes" != xNONE ; then
+ XMLOCKINC="${XMLOCKINC} -I$editres_includes"
+fi
+
+gl=no
+
+
+
+
+
+gl_includes=NONE
+gl_libraries=NONE
+
+echo $ac_n "checking for GL""... $ac_c" 1>&6
+echo "configure:2992: checking for GL" >&5
+# Check whether --with-gl or --without-gl was given.
+if test "${with_gl+set}" = set; then
+ withval="$with_gl"
+ :
+fi
+
+if test "x$with_gl" = xno; then
+ no_gl=yes
+else
+ if test "x$gl_includes" != xNONE && test "x$gl_libraries" != xNONE; then
+ no_gl=
+ else
+if eval "test \"`echo '$''{'ac_cv_path_gl'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ # One or both of these vars are not set, and there is no cached value.
+no_gl=yes
+test -z "$gl_direct_test_library" && gl_direct_test_library=GL
+test -z "$gl_direct_test_library" && gl_direct_test_library=GLU
+test -z "$gl_direct_test_library" && gl_direct_test_library=gl
+test -z "$gl_direct_test_function" && gl_direct_test_function=glXCreateContext
+test -z "$gl_direct_test_include" && gl_direct_test_include=GL/gl.h
+ for ac_dir in \
+ /usr/include \
+ $extra_include \
+ ; \
+ do
+# Make sure this is not MesaGL
+ if test -r "$ac_dir/$gl_direct_test_include" && test ! -r "$ac_dir/GL/xmesa.h"; then
+ no_gl= ac_gl_includes=$ac_dir
+ break
+ fi
+ done
+
+# Check for the libraries.
+# See if we find them without any special options.
+# Do not add to $LIBS permanently.
+ac_save_LIBS="$LIBS"
+LIBS="-l$gl_direct_test_library $LIBS"
+# First see if replacing the include by lib works.
+for ac_dir in `echo "$ac_gl_includes" | sed s/include/lib/` \
+ \
+ /usr/lib \
+ $extra_lib \
+ ; \
+do
+ for ac_extension in a so sl; do
+# Make sure its not a symbolic link to MesaGL library
+ if test -r $ac_dir/lib${gl_direct_test_library}.$ac_extension && test ! -h $ac_dir/lib${gl_direct_test_library}.$ac_extension && test ! -r $ac_dir/libMesa${gl_direct_test_library}.$ac_extension; then
+ no_gl= ac_gl_libraries=$ac_dir
+ break 2
+ fi
+ done
+done
+LIBS="$ac_save_LIBS"
+
+if test "$no_gl" = yes; then
+ ac_cv_path_gl="no_gl=yes"
+else
+ ac_cv_path_gl="no_gl= ac_gl_includes=$ac_gl_includes ac_gl_libraries=$ac_gl_libraries"
+fi
+fi
+ fi
+ eval "$ac_cv_path_gl"
+fi # with_gl != no
+
+if test "$no_gl" = yes; then
+ echo "$ac_t""no" 1>&6
+else
+ gl=yes
+ cat >> confdefs.h <<\EOF
+#define USE_GL 1
+EOF
+
+ XLOCKLIBS="${XLOCKLIBS} -lGL -lGLU -lgl"
+ test "x$gl_includes" = xNONE && gl_includes=$ac_gl_includes
+ test "x$gl_libraries" = xNONE && gl_libraries=$ac_gl_libraries
+ ac_cv_path_gl="no_gl= ac_gl_includes=$gl_includes ac_gl_libraries=$gl_libraries"
+ echo "$ac_t""libraries $gl_libraries, headers $gl_includes" 1>&6
+fi
+
+
+if test "x$gl_libraries" != x && test "x$gl_libraries" != xNONE ; then
+ XLOCKLDFLAGS="${XLOCKLDFLAGS}:$gl_libraries"
+ XLOCKLIBPATHS="${XLOCKLIBPATHS} -L$gl_libraries"
+fi
+if test "x$gl_includes" != x && test "x$gl_includes" != xNONE ; then
+ XLOCKINC="${XLOCKINC} -I$gl_includes"
+fi
+
+
+
+
+
+
+mesagl_includes=NONE
+mesagl_libraries=NONE
+
+echo $ac_n "checking for MesaGL""... $ac_c" 1>&6
+echo "configure:3092: checking for MesaGL" >&5
+# Check whether --with-mesagl or --without-mesagl was given.
+if test "${with_mesagl+set}" = set; then
+ withval="$with_mesagl"
+ :
+fi
+
+if test "x$with_mesagl" = xno; then
+ no_mesagl=yes
+else
+ if test "x$mesagl_includes" != xNONE && test "x$mesagl_libraries" != xNONE; then
+ no_mesagl=
+ else
+if eval "test \"`echo '$''{'ac_cv_path_mesagl'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ # One or both of these vars are not set, and there is no cached value.
+no_mesagl=yes
+test -z "$mesagl_direct_test_library" && mesagl_direct_test_library=MesaGL
+test -z "$mesagl_direct_test_library" && mesagl_direct_test_library=MesaGLU
+test -z "$mesagl_direct_test_function" && mesagl_direct_test_function=glXCreateContext
+test -z "$mesagl_direct_test_include" && mesagl_direct_test_include=GL/gl.h
+ for ac_dir in \
+ /usr/X11R6/include \
+ /usr/X11R5/include \
+ /usr/X11/include \
+ \
+ /usr/include/X11 \
+ /usr/include/X11R6 \
+ /usr/include/X11R5 \
+ \
+ /usr/local/X11/include \
+ /usr/local/X11R6/include \
+ /usr/local/X11R5/include \
+ \
+ /usr/local/include/X11 \
+ /usr/local/include/X11R6 \
+ /usr/local/include/X11R5 \
+ \
+ /usr/X386/include \
+ /usr/x386/include \
+ /usr/XFree86/include/X11 \
+ \
+ /usr/local/include \
+ /usr/include \
+ /usr/unsupported/include \
+ /usr/local/x11r5/include \
+ /usr/lpp/Xamples/include \
+ \
+ /usr/openwin/include \
+ /usr/openwin/share/include \
+ $extra_include \
+ ; \
+ do
+ if test -r "$ac_dir/$mesagl_direct_test_include"; then
+ no_mesagl= ac_mesagl_includes=$ac_dir
+ break
+ fi
+ done
+
+# Check for the libraries.
+# See if we find them without any special options.
+# Do not add to $LIBS permanently.
+ac_save_LIBS="$LIBS"
+LIBS="-l$mesagl_direct_test_library $LIBS"
+# First see if replacing the include by lib works.
+for ac_dir in `echo "$ac_mesagl_includes" | sed s/include/lib/` \
+ \
+ /usr/X11/lib \
+ /usr/X11R6/lib \
+ /usr/X11R5/lib \
+ \
+ /usr/lib/X11 \
+ /usr/lib/X11R6 \
+ /usr/lib/X11R5 \
+ \
+ /usr/local/X11/lib \
+ /usr/local/X11R6/lib \
+ /usr/local/X11R5/lib \
+ \
+ /usr/local/lib/X11 \
+ /usr/local/lib/X11R6 \
+ /usr/local/lib/X11R5 \
+ \
+ /usr/X386/lib \
+ /usr/x386/lib \
+ /usr/XFree86/lib/X11 \
+ \
+ /usr/lib \
+ /usr/local/lib \
+ /usr/unsupported/lib \
+ /usr/athena/lib \
+ /usr/local/x11r5/lib \
+ /usr/lpp/Xamples/lib \
+ /lib/usr/lib/X11 \
+ \
+ /usr/openwin/lib \
+ /usr/openwin/share/lib \
+ $extra_lib \
+ ; \
+do
+ for ac_extension in a so sl; do
+ if test -r $ac_dir/lib${mesagl_direct_test_library}.$ac_extension; then
+ no_mesagl= ac_mesagl_libraries=$ac_dir
+ break 2
+ fi
+ done
+done
+LIBS="$ac_save_LIBS"
+
+if test "$no_mesagl" = yes; then
+ ac_cv_path_mesagl="no_mesagl=yes"
+else
+ ac_cv_path_mesagl="no_mesagl= ac_mesagl_includes=$ac_mesagl_includes ac_mesagl_libraries=$ac_mesagl_libraries"
+fi
+fi
+ fi
+ eval "$ac_cv_path_mesagl"
+fi # with_mesagl != no
+
+if test "$no_mesagl" = yes; then
+ echo "$ac_t""no" 1>&6
+else
+ if test "$gl" = no; then
+ gl=yes
+ cat >> confdefs.h <<\EOF
+#define USE_GL 1
+EOF
+
+ XLOCKLIBS="${XLOCKLIBS} -lMesaGL -lMesaGLU"
+ test "x$mesagl_includes" = xNONE && mesagl_includes=$ac_mesagl_includes
+ test "x$mesagl_libraries" = xNONE && mesagl_libraries=$ac_mesagl_libraries
+ ac_cv_path_mesagl="no_mesagl= ac_mesagl_includes=$mesagl_includes ac_mesagl_libraries=$mesagl_libraries"
+ echo "$ac_t""libraries $mesagl_libraries, headers $mesagl_includes" 1>&6
+ fi
+fi
+
+
+if test "x$mesagl_libraries" != x && test "x$mesagl_libraries" != xNONE ; then
+ XLOCKLDFLAGS="${XLOCKLDFLAGS}:$mesagl_libraries"
+ XLOCKLIBPATHS="${XLOCKLIBPATHS} -L$mesagl_libraries"
+fi
+if test "x$mesagl_includes" != x && test "x$mesagl_includes" != xNONE ; then
+ XLOCKINC="${XLOCKINC} -I$mesagl_includes"
+fi
+
+
+
+
+
+
+dtsaver_includes=NONE
+dtsaver_libraries=NONE
+
+echo $ac_n "checking for DtSaver""... $ac_c" 1>&6
+echo "configure:3247: checking for DtSaver" >&5
+# Check whether --with-dtsaver or --without-dtsaver was given.
+if test "${with_dtsaver+set}" = set; then
+ withval="$with_dtsaver"
+ :
+fi
+
+if test "x$with_dtsaver" = xno; then
+ no_dtsaver=yes
+else
+ if test "x$dtsaver_includes" != xNONE && test "x$dtsaver_libraries" != xNONE; then
+ no_dtsaver=
+ else
+if eval "test \"`echo '$''{'ac_cv_path_dtsaver'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ # One or both of these vars are not set, and there is no cached value.
+no_dtsaver=yes
+test -z "$dtsaver_direct_test_library" && dtsaver_direct_test_library=DtSvc
+test -z "$dtsaver_direct_test_function" && dtsaver_direct_test_function=DtSaverGetWindows
+test -z "$dtsaver_direct_test_include" && dtsaver_direct_test_include=Dt/Saver.h
+ for ac_dir in \
+ /usr/dt/include \
+ $extra_include \
+ ; \
+ do
+ if test -r "$ac_dir/$dtsaver_direct_test_include"; then
+ no_dtsaver= ac_dtsaver_includes=$ac_dir
+ break
+ fi
+ done
+
+# Check for the libraries.
+# See if we find them without any special options.
+# Do not add to $LIBS permanently.
+ac_save_LIBS="$LIBS"
+LIBS="-l$dtsaver_direct_test_library $LIBS"
+# First see if replacing the include by lib works.
+for ac_dir in `echo "$ac_dtsaver_includes" | sed s/include/lib/` \
+ $extra_lib \
+ ; \
+do
+ for ac_extension in a so sl; do
+ if test -r $ac_dir/lib${dtsaver_direct_test_library}.$ac_extension; then
+ no_dtsaver= ac_dtsaver_libraries=$ac_dir
+ break 2
+ fi
+ done
+done
+LIBS="$ac_save_LIBS"
+
+if test "$no_dtsaver" = yes; then
+ ac_cv_path_dtsaver="no_dtsaver=yes"
+else
+ ac_cv_path_dtsaver="no_dtsaver= ac_dtsaver_includes=$ac_dtsaver_includes ac_dtsaver_libraries=$ac_dtsaver_libraries"
+fi
+fi
+ fi
+ eval "$ac_cv_path_dtsaver"
+fi # with_dtsaver != no
+
+if test "$no_dtsaver" = yes; then
+ echo "$ac_t""no" 1>&6
+else
+ cat >> confdefs.h <<\EOF
+#define USE_DTSAVER 1
+EOF
+
+ XLOCKLIBS="${XLOCKLIBS} -lDtSvc"
+ test "x$dtsaver_includes" = xNONE && dtsaver_includes=$ac_dtsaver_includes
+ test "x$dtsaver_libraries" = xNONE && dtsaver_libraries=$ac_dtsaver_libraries
+ ac_cv_path_dtsaver="no_dtsaver= ac_dtsaver_includes=$dtsaver_includes ac_dtsaver_libraries=$dtsaver_libraries"
+ echo "$ac_t""libraries $dtsaver_libraries, headers $dtsaver_includes" 1>&6
+fi
+
+
+if test "x$dtsaver_libraries" != x && test "x$dtsaver_libraries" != xNONE ; then
+ XLOCKLDFLAGS="${XLOCKLDFLAGS}:$dtsaver_libraries"
+ XLOCKLIBPATHS="${XLOCKLIBPATHS} -L$dtsaver_libraries"
+fi
+if test "x$dtsaver_includes" != x && test "x$dtsaver_includes" != xNONE ; then
+ XLOCKINC="${XLOCKINC} -I$dtsaver_includes"
+fi
+
+sound=no
+
+
+
+
+
+rplay_includes=NONE
+rplay_libraries=NONE
+
+echo $ac_n "checking for RPLAY""... $ac_c" 1>&6
+echo "configure:3341: checking for RPLAY" >&5
+# Check whether --with-rplay or --without-rplay was given.
+if test "${with_rplay+set}" = set; then
+ withval="$with_rplay"
+ :
+fi
+
+if test "x$with_rplay" = xno; then
+ no_rplay=yes
+else
+ if test "x$rplay_includes" != xNONE && test "x$rplay_libraries" != xNONE; then
+ no_rplay=
+ else
+if eval "test \"`echo '$''{'ac_cv_path_rplay'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ # One or both of these vars are not set, and there is no cached value.
+no_rplay=yes
+test -z "$rplay_direct_test_library" && rplay_direct_test_library=rplay
+test -z "$rplay_direct_test_function" && rplay_direct_test_function=rplay_open_default
+test -z "$rplay_direct_test_include" && rplay_direct_test_include=rplay.h
+ for ac_dir in \
+ /usr/X11R6/include \
+ /usr/X11R5/include \
+ /usr/X11/include \
+ /usr/local/include \
+ /usr/include \
+ $extra_include \
+ ; \
+ do
+ if test -r "$ac_dir/$rplay_direct_test_include"; then
+ no_rplay= ac_rplay_includes=$ac_dir
+ break
+ fi
+ done
+
+# Check for the libraries.
+# See if we find them without any special options.
+# Do not add to $LIBS permanently.
+ac_save_LIBS="$LIBS"
+LIBS="-l$play_direct_test_library $LIBS"
+# First see if replacing the include by lib works.
+for ac_dir in `echo "$ac_rplay_includes" | sed s/include/lib/` \
+ \
+ /usr/X11R6/lib \
+ /usr/X11R5/lib \
+ /usr/X11/lib \
+ /usr/lib \
+ /usr/local/lib \
+ $extra_lib \
+ ; \
+do
+ for ac_extension in a so sl; do
+ if test -r $ac_dir/lib${rplay_direct_test_library}.$ac_extension; then
+ no_rplay= ac_rplay_libraries=$ac_dir
+ break 2
+ fi
+ done
+done
+LIBS="$ac_save_LIBS"
+
+if test "$no_rplay" = yes; then
+ ac_cv_path_rplay="no_rplay=yes"
+else
+ ac_cv_path_rplay="no_rplay= ac_rplay_includes=$ac_rplay_includes ac_rplay_libraries=$ac_rplay_libraries"
+fi
+fi
+ fi
+ eval "$ac_cv_path_rplay"
+fi # with_rplay != no
+
+if test "$no_rplay" = yes; then
+ echo "$ac_t""no" 1>&6
+else
+ sound=yes
+ cat >> confdefs.h <<\EOF
+#define USE_RPLAY 1
+EOF
+
+ XLOCKLIBS="${XLOCKLIBS} -lrplay"
+ test "x$rplay_includes" = xNONE && rplay_includes=$ac_rplay_includes
+ test "x$rplay_libraries" = xNONE && rplay_libraries=$ac_rplay_libraries
+ ac_cv_path_rplay="no_rplay= ac_rplay_includes=$rplay_includes ac_rplay_libraries=$rplay_libraries"
+ echo "$ac_t""libraries $rplay_libraries, headers $rplay_includes" 1>&6
+fi
+
+
+if test "x$rplay_libraries" != x && test "x$rplay_libraries" != xNONE ; then
+ XLOCKLDFLAGS="${XLOCKLDFLAGS}:$rplay_libraries"
+ XLOCKLIBPATHS="${XLOCKLIBPATHS} -L$rplay_libraries"
+fi
+if test "x$rplay_includes" != x && test "x$rplay_includes" != xNONE ; then
+ XLOCKINC="${XLOCKINC} -I$rplay_includes"
+fi
+
+
+
+
+
+
+nas_includes=NONE
+nas_libraries=NONE
+
+echo $ac_n "checking for NAS""... $ac_c" 1>&6
+echo "configure:3445: checking for NAS" >&5
+# Check whether --with-nas or --without-nas was given.
+if test "${with_nas+set}" = set; then
+ withval="$with_nas"
+ :
+fi
+
+if test "x$with_nas" = xno; then
+ no_nas=yes
+else
+ if test "x$nas_includes" != xNONE && test "x$nas_libraries" != xNONE; then
+ no_nas=
+ else
+if eval "test \"`echo '$''{'ac_cv_path_nas'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ # One or both of these vars are not set, and there is no cached value.
+no_nas=yes
+test -z "$nas_direct_test_library" && nas_direct_test_library=audio
+test -z "$nas_direct_test_function" && nas_direct_test_function=AuOpenServer
+test -z "$nas_direct_test_include" && nas_direct_test_include=audio/audio.h
+ for ac_dir in \
+ /usr/X11R6/include \
+ /usr/X11R5/include \
+ /usr/X11/include \
+ /usr/local/include \
+ /usr/include \
+ $extra_include \
+ ; \
+ do
+ if test -r "$ac_dir/$nas_direct_test_include"; then
+ no_nas= ac_nas_includes=$ac_dir
+ break
+ fi
+ done
+
+# Check for the libraries.
+# See if we find them without any special options.
+# Do not add to $LIBS permanently.
+ac_save_LIBS="$LIBS"
+LIBS="-l$play_direct_test_library $LIBS"
+# First see if replacing the include by lib works.
+for ac_dir in `echo "$ac_nas_includes" | sed s/include/lib/` \
+ \
+ /usr/X11R6/lib \
+ /usr/X11R5/lib \
+ /usr/X11/lib \
+ /usr/lib \
+ /usr/local/lib \
+ $extra_lib \
+ ; \
+do
+ for ac_extension in a so sl; do
+ if test -r $ac_dir/lib${nas_direct_test_library}.$ac_extension; then
+ no_nas= ac_nas_libraries=$ac_dir
+ break 2
+ fi
+ done
+done
+LIBS="$ac_save_LIBS"
+
+if test "$no_nas" = yes; then
+ ac_cv_path_nas="no_nas=yes"
+else
+ ac_cv_path_nas="no_nas= ac_nas_includes=$ac_nas_includes ac_nas_libraries=$ac_nas_libraries"
+fi
+fi
+ fi
+ eval "$ac_cv_path_nas"
+fi # with_nas != no
+
+if test "$no_nas" = yes; then
+ echo "$ac_t""no" 1>&6
+else
+ if test "$sound" = no; then
+ sound=yes
+ cat >> confdefs.h <<\EOF
+#define USE_NAS 1
+EOF
+
+ XLOCKLIBS="${XLOCKLIBS} -lnas"
+ test "x$nas_includes" = xNONE && nas_includes=$ac_nas_includes
+ test "x$nas_libraries" = xNONE && nas_libraries=$ac_nas_libraries
+ ac_cv_path_nas="no_nas= ac_nas_includes=$nas_includes ac_nas_libraries=$nas_libraries"
+ echo "$ac_t""libraries $nas_libraries, headers $nas_includes" 1>&6
+ fi
+fi
+
+
+if test "x$nas_libraries" != x && test "x$nas_libraries" != xNONE ; then
+ XLOCKLDFLAGS="${XLOCKLDFLAGS}:$nas_libraries"
+ XLOCKLIBPATHS="${XLOCKLIBPATHS} -L$nas_libraries"
+fi
+if test "x$nas_includes" != x && test "x$nas_includes" != xNONE ; then
+ XLOCKINC="${XLOCKINC} -I$nas_includes"
+fi
+
+
+
+aixv3=no
+dirent=yes
+
+
+# Make sure we can run config.sub.
+if $ac_config_sub sun4 >/dev/null 2>&1; then :
+else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking host system type""... $ac_c" 1>&6
+echo "configure:3554: checking host system type" >&5
+
+host_alias=$host
+case "$host_alias" in
+NONE)
+ case $nonopt in
+ NONE)
+ if host_alias=`$ac_config_guess`; then :
+ else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
+ fi ;;
+ *) host_alias=$nonopt ;;
+ esac ;;
+esac
+
+host=`$ac_config_sub $host_alias`
+host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+echo "$ac_t""$host" 1>&6
+
+canonical=$host
+case "${canonical}" in
+
+ *-*-aix* )
+ BITMAPTYPE="x11"
+ PIXMAPTYPE="x11"
+ cat >> confdefs.h <<\EOF
+#define AIXV3 1
+EOF
+
+ aixv3=yes
+ case "${canonical}" in
+ *-*-aix2* | *-*-aix3.0* | *-*-aix3.1* )
+ cat >> confdefs.h <<\EOF
+#define LESS_THAN_AIX3_2 1
+EOF
+
+ ;;
+ esac
+ ;;
+
+ *-*-freebsd* )
+ BITMAPTYPE="bsd"
+ PIXMAPTYPE="bsd"
+ ;;
+
+ *-*-netbsd* | *-*-openbsd* )
+ BITMAPTYPE="bsd"
+ PIXMAPTYPE="bsd"
+ ;;
+
+ *-*-dgux5* )
+ BITMAPTYPE="x11"
+ PIXMAPTYPE="x11"
+ ;;
+
+ *-*-hpux* )
+ if test "${CC}" = "cc" ; then
+ CFLAGS="${CFLAGS} -O -Aa -z -D_HPUX_SOURCE"
+ GPROF_CFLAGS="${GPROF_CFLAGS} -Aa -z -D_HPUX_SOURCE"
+ fi
+ XLOCKLIBS="-lXhp11 ${XLOCKLIBS}"
+ cat >> confdefs.h <<\EOF
+#define SYSV 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define SVR4 1
+EOF
+
+ BITMAPTYPE="hp"
+ PIXMAPTYPE="hp"
+ ;;
+
+ *-*-irix5* | *-*-irix6* )
+ if test "${CC}" = "cc" ; then
+ CFLAGS="${CFLAGS} -fullwarn"
+ fi
+ BITMAPTYPE="sgi"
+ PIXMAPTYPE="sgi"
+ ;;
+
+ *-*-linux* )
+ ac_safe=`echo "elf.h" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for elf.h""... $ac_c" 1>&6
+echo "configure:3639: checking for elf.h" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 3644 "configure"
+#include "confdefs.h"
+#include <elf.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:3649: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ cat >> confdefs.h <<\EOF
+#define HAVE_SHADOW 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ cat >> confdefs.h <<\EOF
+#define linux 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define _POSIX_SOURCE 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define _BSD_SOURCE 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define _GNU_SOURCE 1
+EOF
+
+ BITMAPTYPE="linux"
+ PIXMAPTYPE="linux"
+ ;;
+
+ *-*-osf* )
+ BITMAPTYPE="x11"
+ PIXMAPTYPE="x11"
+ echo $ac_n "checking for Digital Unix Enhanced Security""... $ac_c" 1>&6
+echo "configure:3697: checking for Digital Unix Enhanced Security" >&5
+ if test -f /usr/sbin/rcmgr && test -f /etc/rc.config ; then
+ if test X`/usr/sbin/rcmgr get SECURITY` = XENHANCED ; then
+ echo "$ac_t""yes" 1>&6
+ cat >> confdefs.h <<\EOF
+#define OSF1_ENH_SEC 1
+EOF
+
+
+ XLOCKLIBS="${XLOCKLIBS} -lsecurity"
+ INSTPGMFLAGS="-g auth -m 2111"
+ else
+ echo "$ac_t""no" 1>&6
+ fi
+ fi
+ ;;
+
+ *-*-solaris2* )
+ cat >> confdefs.h <<\EOF
+#define SOLARIS2 1
+EOF
+
+
+
+ dirent=no
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_SHADOW 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define SYSV 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define SVR4 1
+EOF
+
+ BITMAPTYPE="sun"
+ PIXMAPTYPE="sol"
+ XLOCKLIBS="${XLOCKLIBS} -lposix4"
+ LIBS="${LIBS} -lsocket -lnsl -lposix4"
+ LDFLAGS="${XLOCKLDFLAGS}"
+ ;;
+
+ *-*-sunos4* )
+ cat >> confdefs.h <<\EOF
+#define SUNOS4 1
+EOF
+
+ BITMAPTYPE="sun"
+ PIXMAPTYPE="sun"
+ ;;
+
+ *-*-sysv5* )
+ BITMAPTYPE="x11"
+ PIXMAPTYPE="x11"
+ ;;
+
+ *)
+ BITMAPTYPE="x11"
+ PIXMAPTYPE="x11"
+ ;;
+esac
+
+
+if test "$dirent" = yes; then
+ ac_header_dirent=no
+for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6
+echo "configure:3769: checking for $ac_hdr that defines DIR" >&5
+if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 3774 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <$ac_hdr>
+int main() {
+DIR *dirp = 0;
+; return 0; }
+EOF
+if { (eval echo configure:3782: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ eval "ac_cv_header_dirent_$ac_safe=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_header_dirent_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_dirent_'$ac_safe`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+ ac_header_dirent=$ac_hdr; break
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
+# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
+if test $ac_header_dirent = dirent.h; then
+echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6
+echo "configure:3807: checking for opendir in -ldir" >&5
+ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-ldir $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 3815 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char opendir();
+
+int main() {
+opendir()
+; return 0; }
+EOF
+if { (eval echo configure:3826: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ LIBS="$LIBS -ldir"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+else
+echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
+echo "configure:3848: checking for opendir in -lx" >&5
+ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lx $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 3856 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char opendir();
+
+int main() {
+opendir()
+; return 0; }
+EOF
+if { (eval echo configure:3867: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ LIBS="$LIBS -lx"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+fi
+
+fi
+
+echo $ac_n "checking for nanosleep""... $ac_c" 1>&6
+echo "configure:3892: checking for nanosleep" >&5
+if eval "test \"`echo '$''{'ac_cv_func_nanosleep'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 3897 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char nanosleep(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char nanosleep();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_nanosleep) || defined (__stub___nanosleep)
+choke me
+#else
+nanosleep();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:3920: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ rm -rf conftest*
+ eval "ac_cv_func_nanosleep=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_nanosleep=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'nanosleep`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ cat >> confdefs.h <<\EOF
+#define HAVE_NANOSLEEP 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+echo $ac_n "checking for usleep""... $ac_c" 1>&6
+echo "configure:3941: checking for usleep" >&5
+if eval "test \"`echo '$''{'ac_cv_func_usleep'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 3946 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char usleep(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char usleep();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_usleep) || defined (__stub___usleep)
+choke me
+#else
+usleep();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:3969: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ rm -rf conftest*
+ eval "ac_cv_func_usleep=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_usleep=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'usleep`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ cat >> confdefs.h <<\EOF
+#define HAVE_USLEEP 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+fi
+
+
+srand=no
+echo $ac_n "checking for srand48""... $ac_c" 1>&6
+echo "configure:3996: checking for srand48" >&5
+if eval "test \"`echo '$''{'ac_cv_func_srand48'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 4001 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char srand48(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char srand48();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_srand48) || defined (__stub___srand48)
+choke me
+#else
+srand48();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:4024: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ rm -rf conftest*
+ eval "ac_cv_func_srand48=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_srand48=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'srand48`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ cat >> confdefs.h <<\EOF
+#define SRAND srand48
+EOF
+ cat >> confdefs.h <<\EOF
+#define LRAND lrand48
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define MAXRAND 2147483648.0
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+echo $ac_n "checking for srandom""... $ac_c" 1>&6
+echo "configure:4052: checking for srandom" >&5
+if eval "test \"`echo '$''{'ac_cv_func_srandom'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 4057 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char srandom(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char srandom();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_srandom) || defined (__stub___srandom)
+choke me
+#else
+srandom();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:4080: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ rm -rf conftest*
+ eval "ac_cv_func_srandom=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_srandom=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'srandom`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ cat >> confdefs.h <<\EOF
+#define SRAND srandom
+EOF
+ cat >> confdefs.h <<\EOF
+#define LRAND random
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define MAXRAND 2147483648.0
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+echo $ac_n "checking for srand""... $ac_c" 1>&6
+echo "configure:4108: checking for srand" >&5
+if eval "test \"`echo '$''{'ac_cv_func_srand'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 4113 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char srand(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char srand();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_srand) || defined (__stub___srand)
+choke me
+#else
+srand();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:4136: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ rm -rf conftest*
+ eval "ac_cv_func_srand=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_srand=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'srand`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ cat >> confdefs.h <<\EOF
+#define SRAND srand
+EOF
+ cat >> confdefs.h <<\EOF
+#define LRAND rand
+EOF
+ srand=yes
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+fi
+
+fi
+
+
+if test "$srand" = yes; then
+ if test "$aixv3" = yes; then
+ cat >> confdefs.h <<\EOF
+#define MAXRAND 2147483648.0
+EOF
+
+ else
+ cat >> confdefs.h <<\EOF
+#define MAXRAND 32768.0
+EOF
+
+ fi
+fi
+
+echo $ac_n "checking matherr support""... $ac_c" 1>&6
+echo "configure:4181: checking matherr support" >&5
+if eval "test \"`echo '$''{'ac_cv_c_matherr'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+cat > conftest.$ac_ext <<EOF
+#line 4187 "configure"
+#include "confdefs.h"
+#include <math.h>
+int main() {
+
+struct exception x;
+x.type = DOMAIN;
+x.type = SING;
+
+; return 0; }
+EOF
+if { (eval echo configure:4198: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_c_matherr=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_cv_c_matherr=no
+fi
+rm -f conftest*
+fi
+
+if test x"$ac_cv_c_matherr" = xyes; then
+ cat >> confdefs.h <<\EOF
+#define USE_MATHERR 1
+EOF
+
+ echo "$ac_t""yes" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+# Check whether --enable-bitmapdir or --disable-bitmapdir was given.
+if test "${enable_bitmapdir+set}" = set; then
+ enableval="$enable_bitmapdir"
+ bitmap_dir=$enableval
+else
+ bitmap_dir=no
+fi
+
+case "x$bitmap_dir" in
+x/*|x.*)
+ echo "$ac_t""setting BITMAPDIR = $enableval" 1>&6
+ BITMAPDIR=$enableval
+ if test ! -d $bitmap_dir; then
+ echo "$ac_t""Warning: Directory $enableval does not exist" 1>&6
+ fi
+ ;;
+*)
+ BITMAPDIR="${srcdir}/bitmaps"
+ bitmap_dir="$srcdir/bitmaps"
+ ;;
+esac
+
+# Check whether --enable-bitmaptype or --disable-bitmaptype was given.
+if test "${enable_bitmaptype+set}" = set; then
+ enableval="$enable_bitmaptype"
+ bitmap_type=$enableval
+else
+ bitmap_type=no
+fi
+
+case "x$bitmap_type" in
+xyes*|xno*)
+ ;;
+*)
+ echo "$ac_t""setting BITMAPTYPE = $enableval" 1>&6
+ BITMAPTYPE=$enableval
+ if test ! -f $bitmap_dir/l-$BITMAPTYPE.xbm; then
+ echo "$ac_t""Warning: Bitmap $BITMAPDIR/l-$BITMAPTYPE.xbm does not exist" 1>&6
+ fi
+ ;;
+esac
+
+# Check whether --enable-pixmapdir or --disable-pixmapdir was given.
+if test "${enable_pixmapdir+set}" = set; then
+ enableval="$enable_pixmapdir"
+ pixmap_dir=$enableval
+else
+ pixmap_dir=no
+fi
+
+case "x$pixmap_dir" in
+x/*|x.*)
+ echo "$ac_t""setting PIXMAPDIR = $enableval" 1>&6
+ PIXMAPDIR=$enableval
+ if test ! -d $pixmap_dir; then
+ echo "$ac_t""Warning: Directory $enableval does not exist" 1>&6
+ fi
+ ;;
+*)
+ PIXMAPDIR="${srcdir}/pixmaps"
+ pixmap_dir="$srcdir/pixmaps"
+ ;;
+esac
+
+# Check whether --enable-pixmaptype or --disable-pixmaptype was given.
+if test "${enable_pixmaptype+set}" = set; then
+ enableval="$enable_pixmaptype"
+ pixmap_type=$enableval
+else
+ pixmap_type=no
+fi
+
+case "x$pixmap_type" in
+xyes*|xno*)
+ ;;
+*)
+ echo "$ac_t""setting PIXMAPTYPE = $enableval" 1>&6
+ PIXMAPTYPE=$enableval
+ if test ! -f $pixmap_dir/m-$PIXMAPTYPE.xpm; then
+ echo "$ac_t""Warning: Pixmap $PIXMAPDIR/m-$PIXMAPTYPE.xpm does not exist" 1>&6
+ fi
+ ;;
+esac
+
+# Check whether --enable-mapdir or --disable-mapdir was given.
+if test "${enable_mapdir+set}" = set; then
+ enableval="$enable_mapdir"
+ map_dir=$enableval
+else
+ map_dir=no
+fi
+
+case "x$map_dir" in
+x/*|x.*)
+ echo "$ac_t""setting BITMAPDIR = $enableval" 1>&6
+ BITMAPDIR=$enableval
+ echo "$ac_t""setting PIXMAPDIR = $enableval" 1>&6
+ PIXMAPDIR=$enableval
+ if test ! -d $map_dir; then
+ echo "$ac_t""Warning: Directory $enableval does not exist" 1>&6
+ fi
+ ;;
+*)
+ BITMAPDIR="${srcdir}/bitmaps"
+ bitmap_dir="$srcdir/bitmaps"
+ PIXMAPDIR="${srcdir}/pixmaps"
+ pixmap_dir="$srcdir/pixmaps"
+ ;;
+esac
+
+# Check whether --enable-maptype or --disable-maptype was given.
+if test "${enable_maptype+set}" = set; then
+ enableval="$enable_maptype"
+ map_type=$enableval
+else
+ map_type=no
+fi
+
+case "x$map_type" in
+xyes*|xno*)
+ ;;
+*)
+ echo "$ac_t""setting BITMAPTYPE = $enableval" 1>&6
+ BITMAPTYPE=$enableval
+ if test ! -f $map_dir/l-$BITMAPTYPE.xbm; then
+ echo "$ac_t""Warning: Bitmap $BITMAPDIR/l-$BITMAPTYPE.xbm does not exist" 1>&6
+ fi
+ echo "$ac_t""setting PIXMAPTYPE = $enableval" 1>&6
+ PIXMAPTYPE=$enableval
+ if test ! -f $map_dir/m-$PIXMAPTYPE.xpm; then
+ echo "$ac_t""Warning: Pixmap $PIXMAPDIR/m-$PIXMAPTYPE.xpm does not exist" 1>&6
+ fi
+ ;;
+esac
+
+if test "$sound" = no; then
+ # Check whether --enable-def_play or --disable-def_play was given.
+if test "${enable_def_play+set}" = set; then
+ enableval="$enable_def_play"
+ def_play=$enableval
+else
+ def_play=no
+fi
+
+ if test "$def_play" != no; then
+ echo "$ac_t""defining option DEF_PLAY = "$enableval"" 1>&6
+ cat >> confdefs.h <<EOF
+#define DEF_PLAY "$enableval"
+EOF
+
+ fi
+fi
+
+# Check whether --enable-vroot or --disable-vroot was given.
+if test "${enable_vroot+set}" = set; then
+ enableval="$enable_vroot"
+ use_vroot=$enableval
+else
+ use_vroot=yes
+fi
+
+if test "$use_vroot" = yes; then
+ echo "$ac_t""defining option USE_VROOT" 1>&6
+ cat >> confdefs.h <<\EOF
+#define USE_VROOT 1
+EOF
+
+fi
+
+# Check whether --enable-allow-root or --disable-allow-root was given.
+if test "${enable_allow_root+set}" = set; then
+ enableval="$enable_allow_root"
+ allow_root=$enableval
+else
+ allow_root=yes
+fi
+
+if test "$allow_root" = yes; then
+ echo "$ac_t""defining option ALWAYS_ALLOW_ROOT" 1>&6
+ cat >> confdefs.h <<\EOF
+#define ALWAYS_ALLOW_ROOT 1
+EOF
+
+fi
+
+# Check whether --enable-syslog or --disable-syslog was given.
+if test "${enable_syslog+set}" = set; then
+ enableval="$enable_syslog"
+ use_syslog=$enableval
+else
+ use_syslog=no
+fi
+
+if test "$use_syslog" = yes; then
+ echo "$ac_t""defining option USE_SYSLOG" 1>&6
+ cat >> confdefs.h <<\EOF
+#define USE_SYSLOG 1
+EOF
+
+fi
+
+# Check whether --enable-multiple-root or --disable-multiple-root was given.
+if test "${enable_multiple_root+set}" = set; then
+ enableval="$enable_multiple_root"
+ use_multiple_root=$enableval
+else
+ use_multiple_root=no
+fi
+
+if test "$use_multiple_root" = yes; then
+ echo "$ac_t""defining option USE_MULTIPLE_ROOT" 1>&6
+ cat >> confdefs.h <<\EOF
+#define USE_MULTIPLE_ROOT 1
+EOF
+
+fi
+
+# Check whether --enable-mouse-motion or --disable-mouse-motion was given.
+if test "${enable_mouse_motion+set}" = set; then
+ enableval="$enable_mouse_motion"
+ use_mouse_motion=$enableval
+else
+ use_mouse_motion=no
+fi
+
+if test "$use_mouse_motion" = yes; then
+ echo "$ac_t""defining option USE_MOUSE_MOTION" 1>&6
+ cat >> confdefs.h <<\EOF
+#define USE_MOUSE_MOTION 1
+EOF
+
+fi
+
+# Check whether --enable-old-event-loop or --disable-old-event-loop was given.
+if test "${enable_old_event_loop+set}" = set; then
+ enableval="$enable_old_event_loop"
+ use_old_event_loop=$enableval
+else
+ use_old_event_loop=no
+fi
+
+if test "$use_old_event_loop" = yes; then
+ echo "$ac_t""defining option USE_OLD_EVENT_LOOP" 1>&6
+ cat >> confdefs.h <<\EOF
+#define USE_OLD_EVENT_LOOP 1
+EOF
+
+fi
+
+
+# Check whether --enable-xlockrc or --disable-xlockrc was given.
+if test "${enable_xlockrc+set}" = set; then
+ enableval="$enable_xlockrc"
+ use_xlockrc=$enableval
+else
+ use_xlockrc=no
+fi
+
+if test "$use_xlockrc" = yes; then
+ echo "$ac_t""defining option USE_XLOCKRC" 1>&6
+ cat >> confdefs.h <<\EOF
+#define USE_XLOCKRC 1
+EOF
+
+fi
+
+# Check whether --enable-auto-logout or --disable-auto-logout was given.
+if test "${enable_auto_logout+set}" = set; then
+ enableval="$enable_auto_logout"
+ use_auto_logout=$enableval
+else
+ use_auto_logout=no
+fi
+
+case "x$use_auto_logout" in
+x|xyes*)
+ echo "$ac_t""defining option USE_AUTO_LOGOUT = 240 minutes" 1>&6
+ cat >> confdefs.h <<\EOF
+#define USE_AUTO_LOGOUT 240
+EOF
+
+ ;;
+x[0-9]*)
+ echo "$ac_t""defining option USE_AUTO_LOGOUT = $enableval minutes" 1>&6
+ cat >> confdefs.h <<EOF
+#define USE_AUTO_LOGOUT $enableval
+EOF
+
+ ;;
+xno*)
+ ;;
+*)
+ echo "$ac_t""Warning: Illegal time value "$use_auto_logout" given" 1>&6
+ echo "$ac_t""defining option USE_AUTO_LOGOUT = 240 minutes" 1>&6
+ cat >> confdefs.h <<\EOF
+#define USE_AUTO_LOGOUT 240
+EOF
+
+ ;;
+esac
+
+# Check whether --enable-default-auto-logout or --disable-default-auto-logout was given.
+if test "${enable_default_auto_logout+set}" = set; then
+ enableval="$enable_default_auto_logout"
+ def_auto_logout=$enableval
+else
+ def_auto_logout=no
+fi
+
+case "x$def_auto_logout" in
+x|xyes*)
+ echo "$ac_t""defining option DEF_AUTO_LOGOUT = 120 minutes" 1>&6
+ cat >> confdefs.h <<\EOF
+#define DEF_AUTO_LOGOUT "120"
+EOF
+
+ ;;
+x[0-9]*)
+ echo "$ac_t""defining option DEF_AUTO_LOGOUT = $enableval minutes" 1>&6
+ cat >> confdefs.h <<EOF
+#define DEF_AUTO_LOGOUT "$enableval"
+EOF
+
+ ;;
+xno*)
+ ;;
+*)
+ echo "$ac_t""Warning: Illegal time value "$def_auto_logout" given" 1>&6
+ echo "$ac_t""defining option DEF_AUTO_LOGOUT = 120 minutes" 1>&6
+ cat >> confdefs.h <<\EOF
+#define DEF_AUTO_LOGOUT "120"
+EOF
+
+ ;;
+esac
+
+# Check whether --enable-button-logout or --disable-button-logout was given.
+if test "${enable_button_logout+set}" = set; then
+ enableval="$enable_button_logout"
+ use_button_logout=$enableval
+else
+ use_button_logout=no
+fi
+
+case "x$use_button_logout" in
+x|xyes*)
+ echo "$ac_t""defining option USE_BUTTON_LOGOUT = 10 minutes" 1>&6
+ cat >> confdefs.h <<\EOF
+#define USE_BUTTON_LOGOUT 10
+EOF
+
+ ;;
+x[0-9]*)
+ echo "$ac_t""defining option USE_BUTTON_LOGOUT = $enableval minutes" 1>&6
+ cat >> confdefs.h <<EOF
+#define USE_BUTTON_LOGOUT $enableval
+EOF
+
+ ;;
+xno*)
+ ;;
+*)
+ echo "$ac_t""Warning: Illegal time value "$use_button_logout" given" 1>&6
+ echo "$ac_t""defining option USE_BUTTON_LOGOUT = 10 minutes" 1>&6
+ cat >> confdefs.h <<\EOF
+#define USE_BUTTON_LOGOUT 10
+EOF
+
+ ;;
+esac
+
+# Check whether --enable-default-button-logout or --disable-default-button-logout was given.
+if test "${enable_default_button_logout+set}" = set; then
+ enableval="$enable_default_button_logout"
+ def_button_logout=$enableval
+else
+ def_button_logout=no
+fi
+
+case "x$def_button_logout" in
+x|xyes*)
+ echo "$ac_t""defining option DEF_BUTTON_LOGOUT = 5 minutes" 1>&6
+ cat >> confdefs.h <<\EOF
+#define DEF_BUTTON_LOGOUT "5"
+EOF
+
+ ;;
+x[0-9]*)
+ echo "$ac_t""defining option DEF_BUTTON_LOGOUT = $enableval minutes" 1>&6
+ cat >> confdefs.h <<EOF
+#define DEF_BUTTON_LOGOUT "$enableval"
+EOF
+
+ ;;
+xno*)
+ ;;
+*)
+ echo "$ac_t""Warning: Illegal time value "$def_button_logout" given" 1>&6
+ echo "$ac_t""defining option DEF_BUTTON_LOGOUT = 5 minutes" 1>&6
+ cat >> confdefs.h <<\EOF
+#define DEF_BUTTON_LOGOUT "5"
+EOF
+
+ ;;
+esac
+
+# Check whether --enable-bomb or --disable-bomb was given.
+if test "${enable_bomb+set}" = set; then
+ enableval="$enable_bomb"
+ use_bomb=$enableval
+else
+ use_bomb=yes
+fi
+
+if test "$use_bomb" = yes; then
+ echo "$ac_t""defining option USE_BOMB" 1>&6
+ cat >> confdefs.h <<\EOF
+#define USE_BOMB 1
+EOF
+
+fi
+
+# Check whether --enable-closedown-logout or --disable-closedown-logout was given.
+if test "${enable_closedown_logout+set}" = set; then
+ enableval="$enable_closedown_logout"
+ closedown_logout=$enableval
+else
+ closedown_logout=no
+fi
+
+if test "$closedown_logout" = yes; then
+ echo "$ac_t""defining option CLOSEDOWN_LOGOUT" 1>&6
+ cat >> confdefs.h <<\EOF
+#define CLOSEDOWN_LOGOUT 1
+EOF
+
+fi
+
+# Check whether --enable-session-logout or --disable-session-logout was given.
+if test "${enable_session_logout+set}" = set; then
+ enableval="$enable_session_logout"
+ session_logout=$enableval
+else
+ session_logout=no
+fi
+
+if test "$session_logout" = yes; then
+ echo "$ac_t""defining option SESSION_LOGOUT" 1>&6
+ cat >> confdefs.h <<\EOF
+#define SESSION_LOGOUT 1
+EOF
+
+fi
+
+# Check whether --enable-staff-file or --disable-staff-file was given.
+if test "${enable_staff_file+set}" = set; then
+ enableval="$enable_staff_file"
+ use_staff_file=$enableval
+else
+ use_staff_file=no
+fi
+
+case "x$use_staff_file" in
+x|xyes*)
+ echo "$ac_t""defining option STAFF_FILE = "/usr/remote/etc/xlock.staff"" 1>&6
+ cat >> confdefs.h <<EOF
+#define STAFF_FILE "/usr/remote/etc/xlock.staff"
+EOF
+
+ if test ! -f /usr/remote/etc/xlock.staff; then
+ echo "$ac_t""Warning: File /usr/remote/etc/xlock.staff does not exist" 1>&6
+ fi
+ ;;
+x/*)
+ echo "$ac_t""defining option STAFF_FILE = "$enableval"" 1>&6
+ cat >> confdefs.h <<EOF
+#define STAFF_FILE "$enableval"
+EOF
+
+ if test ! -f $use_staff_file; then
+ echo "$ac_t""Warning: File $enableval does not exist" 1>&6
+ fi
+ ;;
+esac
+
+# Check whether --enable-staff-netgroup or --disable-staff-netgroup was given.
+if test "${enable_staff_netgroup+set}" = set; then
+ enableval="$enable_staff_netgroup"
+ use_staff_netgroup=$enableval
+else
+ use_staff_netgroup=no
+fi
+
+if test "$use_staff_netgroup" != no; then
+ echo "$ac_t""defining option STAFF_NETGROUP = "$enableval"" 1>&6
+ cat >> confdefs.h <<EOF
+#define STAFF_NETGROUP "$enableval"
+EOF
+
+fi
+
+# Check whether --enable-hackers or --disable-hackers was given.
+if test "${enable_hackers+set}" = set; then
+ enableval="$enable_hackers"
+ hackers=$enableval
+else
+ hackers=no
+fi
+
+if test "$hackers" = yes; then
+ echo "$ac_t""enabling hackers modes" 1>&6
+ HACKERS=""
+else
+ HACKERS="#"
+fi
+
+
+XLOCKLIBS="${XLOCKLIBPATHS} ${XLOCKLIBS} -lX11 -lXext -lm"
+XMLOCKLIBS="${XMLOCKLIBPATHS} ${XMLOCKLIBS} -lX11"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+trap '' 1 2 15
+cat > confcache <<\EOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs. It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already. You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+EOF
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(set) 2>&1 |
+ case `(ac_space=' '; set) 2>&1` in
+ *ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote substitution
+ # turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ -e "s/'/'\\\\''/g" \
+ -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+ ;;
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+ ;;
+ esac >> confcache
+if cmp -s $cache_file confcache; then
+ :
+else
+ if test -w $cache_file; then
+ echo "updating cache $cache_file"
+ cat confcache > $cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ fi
+fi
+rm -f confcache
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Any assignment to VPATH causes Sun make to only execute
+# the first set of double-colon rules, so remove it if not needed.
+# If there is a colon in the path, we need to keep it.
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
+fi
+
+trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
+
+DEFS=-DHAVE_CONFIG_H
+
+# Without the "./", some shells look in PATH for config.status.
+: ${CONFIG_STATUS=./config.status}
+
+echo creating $CONFIG_STATUS
+rm -f $CONFIG_STATUS
+cat > $CONFIG_STATUS <<EOF
+#! /bin/sh
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# This directory was configured as follows,
+# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+#
+# $0 $ac_configure_args
+#
+# Compiler output produced by configure, useful for debugging
+# configure, is in ./config.log if it exists.
+
+ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
+for ac_option
+do
+ case "\$ac_option" in
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
+ exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
+ -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
+ echo "$CONFIG_STATUS generated by autoconf version 2.12"
+ exit 0 ;;
+ -help | --help | --hel | --he | --h)
+ echo "\$ac_cs_usage"; exit 0 ;;
+ *) echo "\$ac_cs_usage"; exit 1 ;;
+ esac
+done
+
+ac_given_srcdir=$srcdir
+ac_given_INSTALL="$INSTALL"
+
+trap 'rm -fr `echo "Makefile config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+# Protect against being on the right side of a sed subst in config.status.
+sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
+$ac_vpsub
+$extrasub
+s%@CFLAGS@%$CFLAGS%g
+s%@CPPFLAGS@%$CPPFLAGS%g
+s%@CXXFLAGS@%$CXXFLAGS%g
+s%@DEFS@%$DEFS%g
+s%@LDFLAGS@%$LDFLAGS%g
+s%@LIBS@%$LIBS%g
+s%@exec_prefix@%$exec_prefix%g
+s%@prefix@%$prefix%g
+s%@program_transform_name@%$program_transform_name%g
+s%@bindir@%$bindir%g
+s%@sbindir@%$sbindir%g
+s%@libexecdir@%$libexecdir%g
+s%@datadir@%$datadir%g
+s%@sysconfdir@%$sysconfdir%g
+s%@sharedstatedir@%$sharedstatedir%g
+s%@localstatedir@%$localstatedir%g
+s%@libdir@%$libdir%g
+s%@includedir@%$includedir%g
+s%@oldincludedir@%$oldincludedir%g
+s%@infodir@%$infodir%g
+s%@mandir@%$mandir%g
+s%@PACKAGE@%$PACKAGE%g
+s%@VERSION@%$VERSION%g
+s%@CC@%$CC%g
+s%@LN_S@%$LN_S%g
+s%@CPP@%$CPP%g
+s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
+s%@INSTALL_DATA@%$INSTALL_DATA%g
+s%@X_CFLAGS@%$X_CFLAGS%g
+s%@X_PRE_LIBS@%$X_PRE_LIBS%g
+s%@X_LIBS@%$X_LIBS%g
+s%@X_EXTRA_LIBS@%$X_EXTRA_LIBS%g
+s%@host@%$host%g
+s%@host_alias@%$host_alias%g
+s%@host_cpu@%$host_cpu%g
+s%@host_vendor@%$host_vendor%g
+s%@host_os@%$host_os%g
+s%@OSF1_ENH_SEC@%$OSF1_ENH_SEC%g
+s%@INSTPGMFLAGS@%$INSTPGMFLAGS%g
+s%@XLOCKINC@%$XLOCKINC%g
+s%@XMLOCKINC@%$XMLOCKINC%g
+s%@XLIBS@%$XLIBS%g
+s%@BITMAPTYPE@%$BITMAPTYPE%g
+s%@PIXMAPTYPE@%$PIXMAPTYPE%g
+s%@BITMAPDIR@%$BITMAPDIR%g
+s%@PIXMAPDIR@%$PIXMAPDIR%g
+s%@XLOCKLIBS@%$XLOCKLIBS%g
+s%@XMLOCKLIBS@%$XMLOCKLIBS%g
+s%@XMLOCK@%$XMLOCK%g
+s%@INSTALL_XMLOCK@%$INSTALL_XMLOCK%g
+s%@UNINSTALL_XMLOCK@%$UNINSTALL_XMLOCK%g
+s%@LINT@%$LINT%g
+s%@HACKERS@%$HACKERS%g
+
+CEOF
+EOF
+
+cat >> $CONFIG_STATUS <<\EOF
+
+# Split the substitutions into bite-sized pieces for seds with
+# small command number limits, like on Digital OSF/1 and HP-UX.
+ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
+ac_file=1 # Number of current file.
+ac_beg=1 # First line for current file.
+ac_end=$ac_max_sed_cmds # Line after last line for current file.
+ac_more_lines=:
+ac_sed_cmds=""
+while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
+ else
+ sed "${ac_end}q" conftest.subs > conftest.s$ac_file
+ fi
+ if test ! -s conftest.s$ac_file; then
+ ac_more_lines=false
+ rm -f conftest.s$ac_file
+ else
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f conftest.s$ac_file"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+ fi
+ ac_file=`expr $ac_file + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_cmds`
+ fi
+done
+if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+fi
+EOF
+
+cat >> $CONFIG_STATUS <<EOF
+
+CONFIG_FILES=\${CONFIG_FILES-"Makefile"}
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case "$ac_file" in
+ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ *) ac_file_in="${ac_file}.in" ;;
+ esac
+
+ # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
+
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ # The file is in a subdirectory.
+ test ! -d "$ac_dir" && mkdir "$ac_dir"
+ ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+ else
+ ac_dir_suffix= ac_dots=
+ fi
+
+ case "$ac_given_srcdir" in
+ .) srcdir=.
+ if test -z "$ac_dots"; then top_srcdir=.
+ else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
+ /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+ *) # Relative path.
+ srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
+ top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+
+ case "$ac_given_INSTALL" in
+ [/$]*) INSTALL="$ac_given_INSTALL" ;;
+ *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+ esac
+
+ echo creating "$ac_file"
+ rm -f "$ac_file"
+ configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
+ case "$ac_file" in
+ *Makefile*) ac_comsub="1i\\
+# $configure_input" ;;
+ *) ac_comsub= ;;
+ esac
+
+ ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+ sed -e "$ac_comsub
+s%@configure_input@%$configure_input%g
+s%@srcdir@%$srcdir%g
+s%@top_srcdir@%$top_srcdir%g
+s%@INSTALL@%$INSTALL%g
+" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
+fi; done
+rm -f conftest.s*
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)'
+ac_dB='\([ ][ ]*\)[^ ]*%\1#\2'
+ac_dC='\3'
+ac_dD='%g'
+# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
+ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_uB='\([ ]\)%\1#\2define\3'
+ac_uC=' '
+ac_uD='\4%g'
+# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_eB='$%\1#\2define\3'
+ac_eC=' '
+ac_eD='%g'
+
+if test "${CONFIG_HEADERS+set}" != set; then
+EOF
+cat >> $CONFIG_STATUS <<EOF
+ CONFIG_HEADERS="config.h"
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+fi
+for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case "$ac_file" in
+ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ *) ac_file_in="${ac_file}.in" ;;
+ esac
+
+ echo creating $ac_file
+
+ rm -f conftest.frag conftest.in conftest.out
+ ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+ cat $ac_file_inputs > conftest.in
+
+EOF
+
+# Transform confdefs.h into a sed script conftest.vals that substitutes
+# the proper values into config.h.in to produce config.h. And first:
+# Protect against being on the right side of a sed subst in config.status.
+# Protect against being in an unquoted here document in config.status.
+rm -f conftest.vals
+cat > conftest.hdr <<\EOF
+s/[\\&%]/\\&/g
+s%[\\$`]%\\&%g
+s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
+s%ac_d%ac_u%gp
+s%ac_u%ac_e%gp
+EOF
+sed -n -f conftest.hdr confdefs.h > conftest.vals
+rm -f conftest.hdr
+
+# This sed command replaces #undef with comments. This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >> conftest.vals <<\EOF
+s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
+EOF
+
+# Break up conftest.vals because some shells have a limit on
+# the size of here documents, and old seds have small limits too.
+
+rm -f conftest.tail
+while :
+do
+ ac_lines=`grep -c . conftest.vals`
+ # grep -c gives empty output for an empty file on some AIX systems.
+ if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
+ # Write a limited-size here document to conftest.frag.
+ echo ' cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
+ echo 'CEOF
+ sed -f conftest.frag conftest.in > conftest.out
+ rm -f conftest.in
+ mv conftest.out conftest.in
+' >> $CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
+ rm -f conftest.vals
+ mv conftest.tail conftest.vals
+done
+rm -f conftest.vals
+
+cat >> $CONFIG_STATUS <<\EOF
+ rm -f conftest.frag conftest.h
+ echo "/* $ac_file. Generated automatically by configure. */" > conftest.h
+ cat conftest.in >> conftest.h
+ rm -f conftest.in
+ if cmp -s $ac_file conftest.h 2>/dev/null; then
+ echo "$ac_file is unchanged"
+ rm -f conftest.h
+ else
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ # The file is in a subdirectory.
+ test ! -d "$ac_dir" && mkdir "$ac_dir"
+ fi
+ rm -f $ac_file
+ mv conftest.h $ac_file
+ fi
+fi; done
+
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+
+exit 0
+EOF
+chmod +x $CONFIG_STATUS
+rm -fr confdefs* $ac_clean_files
+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
--- /dev/null
+dnl Process this file with autoconf to produce a configure script.
+dnl configure.in for xlockmore.
+AC_INIT(config.h.in)
+
+PACKAGE=xlockmore
+AC_SUBST(PACKAGE)
+AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE")
+VERSION=4.03
+AC_SUBST(VERSION)
+AC_DEFINE_UNQUOTED(VERSION, "$VERSION")
+
+dnl Checks for programs.
+AC_ARG_WITH(gcc,
+[ --without-gcc use CC to compile])
+dnl AC_ARG_WITH(debug,
+dnl [ --without-debug use debug instead])
+
+test -n "$CC" && cc_specified=yes
+case ${with_gcc} in
+ yes ) CC=gcc ;;
+dnl yes ) CC=g++ ;;
+ no ) CC=cc ;;
+ * ) AC_PROG_CC;;
+dnl * ) AC_PROG_CXX ;;
+esac
+
+dnl case ${with_debug} in
+dnl yes ) CFLAGS="${CFLAGS} -g" ;;
+dnl no ) CFLAGS="${CFLAGS} -O" ;;
+dnl esac
+
+if test "${CC}" = "gcc" ; then
+ CFLAGS="${CFLAGS} -Wall"
+fi
+
+AC_PROG_LN_S
+AC_PROG_CPP
+AC_AIX
+AC_PROG_INSTALL
+dnl Optional features.
+dnl add copious amounts of debugging with gcc
+
+dnl Checks for header files.
+dnl AC_HEADER_STDC /* If its not ansi, its not going to go */
+AC_ISC_POSIX
+dnl AC_HEADER_SYS_WAIT
+dnl AC_CHECK_HEADERS(poll.h sys/poll.h)
+AC_CHECK_HEADERS(fcntl.h limits.h sys/select.h sys/time.h syslog.h unistd.h memory.h)
+
+dnl Checks for typedefs, structures, and compiler characteristics.
+AC_C_CONST
+dnl AC_HEADER_SYS_WAIT
+AC_TYPE_UID_T
+AC_TYPE_PID_T
+AC_TYPE_SIZE_T
+AC_HEADER_TIME
+AC_STRUCT_TM
+AC_C_INLINE
+
+dnl Checks for library functions.
+dnl AC_TYPE_GETGROUPS
+dnl AC_TYPE_SIGNAL
+dnl AC_CHECK_FUNCS(poll)
+dnl AC_CHECK_FUNCS(signal)
+AC_CHECK_FUNCS(gethostname gettimeofday select strdup)
+AC_CHECK_FUNC(seteuid, AC_DEFINE(HAVE_SETEUID),
+AC_CHECK_FUNC(setreuid, AC_DEFINE(HAVE_SETREUID)))
+
+dnl X Window System files.
+AC_PATH_XTRA
+if test "$no_x" = yes; then
+ XLIBS=NONE
+else
+ if test -n "${x_includes}"; then
+ XLOCKINC="-I${x_includes} ${XLOCKINC}"
+ XMLOCKINC="-I${x_includes} ${XMLOCKINC}"
+ fi
+ XLIBS="${x_libraries}"
+ if test -n "${x_libraries}"; then
+ XLOCKLDFLAGS="-R/usr/lib:${x_libraries}"
+ XLOCKLIBPATHS="-L${x_libraries} ${XLOCKLIBPATHS}"
+ XMLOCKLIBPATHS="-L${x_libraries} ${XMLOCKLIBPATHS}"
+ fi
+ XLOCKLIBS="${X_PRE_LIBS} ${X_EXTRA_LIBS} ${XLOCKLIBS}"
+ XMLOCKLIBS="-lXt ${XMLOCKLIBS}"
+dnl AC_DEFINE(X11) /* If there is no X, its not going to go */
+fi
+
+AC_ARG_WITH(includes, [ --with-includes=DIR search include DIR for optional packages below])
+case "x$withval" in
+x/*|x.*)
+ extra_include=$withval
+ AC_MSG_RESULT([adding $extra_include to include search path for following packages])
+ if test ! -d $extra_include; then
+ AC_MSG_RESULT([Warning: Directory $extra_include does not exist])
+ fi
+ ;;
+*)
+ extra_include=""
+ ;;
+esac
+
+AC_ARG_WITH(libraries, [ --with-libraries=DIR search library DIR for optional packages below])
+case "x$withval" in
+x/*|x.*)
+ extra_lib=$withval
+ AC_MSG_RESULT([adding $extra_lib to library search path for following packages])
+ if test ! -d $extra_lib; then
+ AC_MSG_RESULT([Warning: Directory $extra_lib does not exist])
+ fi
+ ;;
+*)
+ extra_lib=""
+ ;;
+esac
+
+xpm=no
+dnl Xpm XPM xpm
+
+AC_DEFUN(AC_PATH_XPM_DIRECT,
+[test -z "$xpm_direct_test_library" && xpm_direct_test_library=Xpm
+test -z "$xpm_direct_test_function" && xpm_direct_test_function=XpmCreateImageFromData
+test -z "$xpm_direct_test_include" && xpm_direct_test_include=xpm.h
+ for ac_dir in \
+ /usr/X11R6/include/X11 \
+ /usr/X11R5/include/X11 \
+ /usr/X11R4/include/X11 \
+ /usr/X11/include/X11 \
+ \
+ /usr/include/X11/X11 \
+ /usr/include/X11R6/X11 \
+ /usr/include/X11R5/X11 \
+ /usr/include/X11R4/X11 \
+ \
+ /usr/local/X11/include/X11 \
+ /usr/local/X11R6/include/X11 \
+ /usr/local/X11R5/include/X11 \
+ /usr/local/X11R4/include/X11 \
+ \
+ /usr/local/include/X11/X11 \
+ /usr/local/include/X11R6/X11 \
+ /usr/local/include/X11R5/X11 \
+ /usr/local/include/X11R4/X11 \
+ \
+ /usr/X386/include/X11 \
+ /usr/x386/include/X11 \
+ /usr/XFree86/include/X11/X11 \
+ \
+ /usr/local/include/X11 \
+ /usr/include/X11 \
+ /usr/unsupported/include/X11 \
+ /usr/athena/include/X11 \
+ /usr/local/x11r5/include/X11 \
+ /usr/lpp/Xamples/include/X11 \
+ \
+ /usr/openwin/include/X11 \
+ /usr/openwin/share/include/X11 \
+ \
+ /usr/include/Vk \
+ $extra_include \
+ ; \
+ do
+ if test -r "$ac_dir/$xpm_direct_test_include"; then
+ no_xpm= ac_xpm_includes=$ac_dir
+ break
+ fi
+ done
+
+# Check for the libraries.
+# See if we find them without any special options.
+# Do not add to $LIBS permanently.
+ac_save_LIBS="$LIBS"
+LIBS="-l$xpm_direct_test_library $LIBS"
+# First see if replacing the include by lib works.
+for ac_dir in `echo "$ac_xpm_includes" | sed s%/X11$%% | sed s/include/lib/` \
+ \
+ /usr/X11/lib \
+ /usr/X11R6/lib \
+ /usr/X11R5/lib \
+ /usr/X11R4/lib \
+ \
+ /usr/lib/X11 \
+ /usr/lib/X11R6 \
+ /usr/lib/X11R5 \
+ /usr/lib/X11R4 \
+ \
+ /usr/local/X11/lib \
+ /usr/local/X11R6/lib \
+ /usr/local/X11R5/lib \
+ /usr/local/X11R4/lib \
+ \
+ /usr/local/lib/X11 \
+ /usr/local/lib/X11R6 \
+ /usr/local/lib/X11R5 \
+ /usr/local/lib/X11R4 \
+ \
+ /usr/X386/lib \
+ /usr/x386/lib \
+ /usr/XFree86/lib/X11 \
+ \
+ /usr/lib \
+ /usr/local/lib \
+ /usr/unsupported/lib \
+ /usr/athena/lib \
+ /usr/local/x11r5/lib \
+ /usr/lpp/Xamples/lib \
+ /lib/usr/lib/X11 \
+ \
+ /usr/openwin/lib \
+ /usr/openwin/share/lib \
+ $extra_lib \
+ ; \
+do
+ for ac_extension in a so sl; do
+ if test -r $ac_dir/lib${xpm_direct_test_library}.$ac_extension; then
+ no_xpm= ac_xpm_libraries=$ac_dir
+ break 2
+ fi
+ done
+done
+LIBS="$ac_save_LIBS"])
+AC_DEFUN(AC_PATH_XPM,
+[AC_REQUIRE_CPP()dnl
+
+xpm_includes=NONE
+xpm_libraries=NONE
+
+AC_MSG_CHECKING(for XPM)
+AC_ARG_WITH(xpm, [ --without-xpm enable color pixmap XPM tests])
+if test "x$with_xpm" = xno; then
+ no_xpm=yes
+else
+ if test "x$xpm_includes" != xNONE && test "x$xpm_libraries" != xNONE; then
+ no_xpm=
+ else
+AC_CACHE_VAL(ac_cv_path_xpm,
+[# One or both of these vars are not set, and there is no cached value.
+no_xpm=yes
+AC_PATH_XPM_DIRECT
+
+if test "$no_xpm" = yes; then
+ ac_cv_path_xpm="no_xpm=yes"
+else
+ ac_cv_path_xpm="no_xpm= ac_xpm_includes=$ac_xpm_includes ac_xpm_libraries=$ac_xpm_libraries"
+fi])dnl
+ fi
+ eval "$ac_cv_path_xpm"
+fi # with_xpm != no
+
+if test "$no_xpm" = yes; then
+ AC_MSG_RESULT(no)
+else
+ xpm=yes
+ AC_DEFINE(USE_XPMINC)
+ XLOCKLIBS="${XLOCKLIBS} -lXpm"
+ test "x$xpm_includes" = xNONE && xpm_includes=$ac_xpm_includes
+ test "x$xpm_libraries" = xNONE && xpm_libraries=$ac_xpm_libraries
+ ac_cv_path_xpm="no_xpm= ac_xpm_includes=$xpm_includes ac_xpm_libraries=$xpm_libraries"
+ AC_MSG_RESULT([libraries $xpm_libraries, headers $xpm_includes])
+fi
+])
+
+AC_PATH_XPM
+
+if test "x$xpm_libraries" != x && test "x$xpm_libraries" != xNONE ; then
+ XLOCKLDFLAGS="${XLOCKLDFLAGS}:$xpm_libraries"
+ XLOCKLIBPATHS="${XLOCKLIBPATHS} -L$xpm_libraries"
+fi
+if test "x$xpm_includes" != x && test "x$xpm_includes" != xNONE ; then
+ XLOCKINC="${XLOCKINC} -I$xpm_includes"
+fi
+
+dnl Xm MOTIF Motif motif
+
+AC_DEFUN(AC_PATH_MOTIF_DIRECT,
+[test -z "$motif_direct_test_library" && motif_direct_test_library=Xm
+test -z "$motif_direct_test_function" && motif_direct_test_function=XmCreatePushButton
+test -z "$motif_direct_test_include" && motif_direct_test_include=Xm/Xm.h
+ for ac_dir in \
+ /usr/include/Motif1.2 \
+ /usr/Motif1.2/include \
+ \
+ /usr/motif/include \
+ \
+ /usr/X11R6/include \
+ /usr/X11R5/include \
+ /usr/X11R4/include \
+ \
+ /usr/include/X11R6 \
+ /usr/include/X11R5 \
+ /usr/include/X11R4 \
+ \
+ /usr/local/X11R6/include \
+ /usr/local/X11R5/include \
+ /usr/local/X11R4/include \
+ \
+ /usr/local/include/X11R6 \
+ /usr/local/include/X11R5 \
+ /usr/local/include/X11R4 \
+ \
+ /usr/X11/include \
+ /usr/include/X11 \
+ /usr/local/X11/include \
+ /usr/local/include/X11 \
+ \
+ /usr/X386/include \
+ /usr/x386/include \
+ /usr/XFree86/include/X11 \
+ \
+ /usr/dt/include \
+ \
+ /usr/local/include \
+ /usr/include \
+ /usr/unsupported/include \
+ /usr/athena/include \
+ /usr/local/x11r5/include \
+ /usr/lpp/Xamples/include \
+ $extra_include \
+ ; \
+ do
+ if test -r "$ac_dir/$motif_direct_test_include"; then
+ no_motif= ac_motif_includes=$ac_dir
+ break
+ fi
+ done
+
+# Check for the libraries.
+# See if we find them without any special options.
+# Do not add to $LIBS permanently.
+ac_save_LIBS="$LIBS"
+LIBS="-l$motif_direct_test_library $LIBS"
+# First see if replacing the include by lib works.
+for ac_dir in `echo "$ac_motif_includes" | sed s/include/lib/` \
+ /usr/lib/Motif1.2 \
+ /usr/Motif1.2/lib \
+ \
+ /usr/motif/lib \
+ \
+ /usr/X11R6/lib \
+ /usr/X11R5/lib \
+ /usr/X11R4/lib \
+ \
+ /usr/lib/X11R6 \
+ /usr/lib/X11R5 \
+ /usr/lib/X11R4 \
+ \
+ /usr/local/X11R6/lib \
+ /usr/local/X11R5/lib \
+ /usr/local/X11R4/lib \
+ \
+ /usr/local/lib/X11R6 \
+ /usr/local/lib/X11R5 \
+ /usr/local/lib/X11R4 \
+ \
+ /usr/X11/lib \
+ /usr/lib/X11 \
+ /usr/local/X11/lib \
+ \
+ /usr/X386/lib \
+ /usr/x386/lib \
+ /usr/XFree86/lib/X11 \
+ \
+ /usr/lib \
+ /usr/local/lib \
+ /usr/unsupported/lib \
+ /usr/athena/lib \
+ /usr/local/x11r5/lib \
+ /usr/lpp/Xamples/lib \
+ $extra_lib \
+ ; \
+do
+ for ac_extension in a so sl; do
+ if test -r $ac_dir/lib${motif_direct_test_library}.$ac_extension; then
+ no_motif= ac_motif_libraries=$ac_dir
+ break 2
+ fi
+ done
+done
+LIBS="$ac_save_LIBS"])
+AC_DEFUN(AC_PATH_MOTIF,
+[AC_REQUIRE_CPP()dnl
+
+motif_includes=NONE
+motif_libraries=NONE
+
+AC_MSG_CHECKING(for Motif)
+AC_ARG_WITH(motif, [ --without-motif disable Motif tests])
+if test "x$with_motif" = xno; then
+ no_motif=yes
+else
+ if test "x$motif_includes" != xNONE && test "x$motif_libraries" != xNONE; then
+ no_motif=
+ else
+AC_CACHE_VAL(ac_cv_path_motif,
+[# One or both of these vars are not set, and there is no cached value.
+no_motif=yes
+AC_PATH_MOTIF_DIRECT
+
+if test "$no_motif" = yes; then
+ ac_cv_path_motif="no_motif=yes"
+else
+ ac_cv_path_motif="no_motif= ac_motif_includes=$ac_motif_includes ac_motif_libraries=$ac_motif_libraries"
+fi])dnl
+ fi
+ eval "$ac_cv_path_motif"
+fi # with_motif != no
+
+if test "$no_motif" = yes; then
+ AC_MSG_RESULT(no)
+ XMLOCK=""
+ INSTALL_XMLOCK=""
+ UNINSTALL_XMLOCK=""
+else
+ XMLOCKLIBS="-lXm ${XMLOCKLIBS}"
+ XMLOCK="xmlock"
+ INSTALL_XMLOCK="install_xmlock"
+ UNINSTALL_XMLOCK="uninstall_xmlock"
+ test "x$motif_includes" = xNONE && motif_includes=$ac_motif_includes
+ test "x$motif_libraries" = xNONE && motif_libraries=$ac_motif_libraries
+ ac_cv_path_motif="no_motif= ac_motif_includes=$motif_includes ac_motif_libraries=$motif_libraries"
+ AC_MSG_RESULT([libraries $motif_libraries, headers $motif_includes])
+fi
+])
+
+AC_PATH_MOTIF
+
+if test "x$motif_libraries" != x && test "x$motif_libraries" != xNONE ; then
+ XMLOCKLIBPATHS="${XMLOCKLIBPATHS} -L$motif_libraries"
+fi
+if test "x$motif_includes" != x && test "x$motif_includes" != xNONE ; then
+ XMLOCKINC="${XMLOCKINC} -I$motif_includes"
+fi
+
+dnl Xmu EDITRES Editres editres
+
+AC_DEFUN(AC_PATH_EDITRES_DIRECT,
+[test -z "$editres_direct_test_library" && editres_direct_test_library=Xmu
+test -z "$editres_direct_test_function" && editres_direct_test_function=_XEditResCheckMessages
+test -z "$editres_direct_test_include" && editres_direct_test_include=X11/Xmu/Editres.h
+ for ac_dir in \
+ /usr/X11R6/include \
+ /usr/X11R5/include \
+ /usr/X11R4/include \
+ /usr/X11/include \
+ \
+ /usr/include/X11 \
+ /usr/include/X11R6 \
+ /usr/include/X11R5 \
+ /usr/include/X11R4 \
+ \
+ /usr/local/X11/include \
+ /usr/local/X11R6/include \
+ /usr/local/X11R5/include \
+ /usr/local/X11R4/include \
+ \
+ /usr/local/include/X11 \
+ /usr/local/include/X11R6 \
+ /usr/local/include/X11R5 \
+ /usr/local/include/X11R4 \
+ \
+ /usr/X386/include \
+ /usr/x386/include \
+ /usr/XFree86/include \
+ \
+ /usr/local/include \
+ /usr/include \
+ /usr/unsupported/include \
+ /usr/athena/include \
+ /usr/local/x11r5/include \
+ /usr/lpp/Xamples/include \
+ \
+ /usr/openwin/include \
+ /usr/openwin/share/include \
+ $extra_include \
+ ; \
+ do
+ if test -r "$ac_dir/$editres_direct_test_include"; then
+ no_editres= ac_editres_includes=$ac_dir
+ break
+ fi
+ done
+
+# Check for the libraries.
+# See if we find them without any special options.
+# Do not add to $LIBS permanently.
+ac_save_LIBS="$LIBS"
+LIBS="-l$editres_direct_test_library $LIBS"
+# First see if replacing the include by lib works.
+for ac_dir in `echo "$ac_editres_includes" | sed s/include/lib/` \
+ \
+ /usr/X11/lib \
+ /usr/X11R6/lib \
+ /usr/X11R5/lib \
+ /usr/X11R4/lib \
+ \
+ /usr/lib/X11 \
+ /usr/lib/X11R6 \
+ /usr/lib/X11R5 \
+ /usr/lib/X11R4 \
+ \
+ /usr/local/X11/lib \
+ /usr/local/X11R6/lib \
+ /usr/local/X11R5/lib \
+ /usr/local/X11R4/lib \
+ \
+ /usr/local/lib/X11 \
+ /usr/local/lib/X11R6 \
+ /usr/local/lib/X11R5 \
+ /usr/local/lib/X11R4 \
+ \
+ /usr/X386/lib \
+ /usr/x386/lib \
+ /usr/XFree86/lib/X11 \
+ \
+ /usr/lib \
+ /usr/local/lib \
+ /usr/unsupported/lib \
+ /usr/athena/lib \
+ /usr/local/x11r5/lib \
+ /usr/lpp/Xamples/lib \
+ /lib/usr/lib/X11 \
+ \
+ /usr/openwin/lib \
+ /usr/openwin/share/lib \
+ $extra_lib \
+ ; \
+do
+ for ac_extension in a so sl; do
+ if test -r $ac_dir/lib${editres_direct_test_library}.$ac_extension; then
+ no_editres= ac_editres_libraries=$ac_dir
+ break 2
+ fi
+ done
+done
+LIBS="$ac_save_LIBS"])
+AC_DEFUN(AC_PATH_EDITRES,
+[AC_REQUIRE_CPP()dnl
+
+editres_includes=NONE
+editres_libraries=NONE
+
+AC_MSG_CHECKING(for Editres)
+AC_ARG_WITH(editres, [ --without-editres do not include debugger for xmlock])
+if test "x$with_editres" = xno; then
+ no_editres=yes
+else
+ if test "x$editres_includes" != xNONE && test "x$editres_libraries" != xNONE; then
+ no_editres=
+ else
+AC_CACHE_VAL(ac_cv_path_editres,
+[# One or both of these vars are not set, and there is no cached value.
+no_editres=yes
+AC_PATH_EDITRES_DIRECT
+
+if test "$no_editres" = yes; then
+ ac_cv_path_editres="no_editres=yes"
+else
+ ac_cv_path_editres="no_editres= ac_editres_includes=$ac_editres_includes ac_editres_libraries=$ac_editres_libraries"
+fi])dnl
+ fi
+ eval "$ac_cv_path_editres"
+fi # with_editres != no
+
+if test "$no_editres" = yes; then
+ AC_MSG_RESULT(no)
+else
+ AC_DEFINE(USE_XMU)
+ XMLOCKLIBS="-lXmu ${XMLOCKLIBS}"
+ test "x$editres_includes" = xNONE && editres_includes=$ac_editres_includes
+ test "x$editres_libraries" = xNONE && editres_libraries=$ac_editres_libraries
+ ac_cv_path_editres="no_editres= ac_editres_includes=$editres_includes ac_editres_libraries=$editres_libraries"
+ AC_MSG_RESULT([libraries $editres_libraries, headers $editres_includes])
+fi
+])
+
+AC_PATH_EDITRES
+
+if test "x$editres_libraries" != x && test "x$editres_libraries" != xNONE ; then
+ XMLOCKLIBPATHS="${XMLOCKLIBPATHS} -L$editres_libraries"
+fi
+if test "x$editres_includes" != x && test "x$editres_includes" != xNONE ; then
+ XMLOCKINC="${XMLOCKINC} -I$editres_includes"
+fi
+
+gl=no
+dnl OpenGL gl
+
+dnl test -z "$gl_direct_test_library" && gl_direct_test_library=GLU
+AC_DEFUN(AC_PATH_GL_DIRECT,
+[test -z "$gl_direct_test_library" && gl_direct_test_library=GL
+test -z "$gl_direct_test_library" && gl_direct_test_library=GLU
+test -z "$gl_direct_test_library" && gl_direct_test_library=gl
+test -z "$gl_direct_test_function" && gl_direct_test_function=glXCreateContext
+test -z "$gl_direct_test_include" && gl_direct_test_include=GL/gl.h
+ for ac_dir in \
+ /usr/include \
+ $extra_include \
+ ; \
+ do
+# Make sure this is not MesaGL
+ if test -r "$ac_dir/$gl_direct_test_include" && test ! -r "$ac_dir/GL/xmesa.h"; then
+ no_gl= ac_gl_includes=$ac_dir
+ break
+ fi
+ done
+
+# Check for the libraries.
+# See if we find them without any special options.
+# Do not add to $LIBS permanently.
+ac_save_LIBS="$LIBS"
+LIBS="-l$gl_direct_test_library $LIBS"
+# First see if replacing the include by lib works.
+for ac_dir in `echo "$ac_gl_includes" | sed s/include/lib/` \
+ \
+ /usr/lib \
+ $extra_lib \
+ ; \
+do
+ for ac_extension in a so sl; do
+# Make sure its not a symbolic link to MesaGL library
+ if test -r $ac_dir/lib${gl_direct_test_library}.$ac_extension && test ! -h $ac_dir/lib${gl_direct_test_library}.$ac_extension && test ! -r $ac_dir/libMesa${gl_direct_test_library}.$ac_extension; then
+ no_gl= ac_gl_libraries=$ac_dir
+ break 2
+ fi
+ done
+done
+LIBS="$ac_save_LIBS"])
+AC_DEFUN(AC_PATH_GL,
+[AC_REQUIRE_CPP()dnl
+
+gl_includes=NONE
+gl_libraries=NONE
+
+AC_MSG_CHECKING(for GL)
+AC_ARG_WITH(gl, [ --without-gl disable 3D OpenGL (for GL modes)])
+if test "x$with_gl" = xno; then
+ no_gl=yes
+else
+ if test "x$gl_includes" != xNONE && test "x$gl_libraries" != xNONE; then
+ no_gl=
+ else
+AC_CACHE_VAL(ac_cv_path_gl,
+[# One or both of these vars are not set, and there is no cached value.
+no_gl=yes
+AC_PATH_GL_DIRECT
+
+if test "$no_gl" = yes; then
+ ac_cv_path_gl="no_gl=yes"
+else
+ ac_cv_path_gl="no_gl= ac_gl_includes=$ac_gl_includes ac_gl_libraries=$ac_gl_libraries"
+fi])dnl
+ fi
+ eval "$ac_cv_path_gl"
+fi # with_gl != no
+
+if test "$no_gl" = yes; then
+ AC_MSG_RESULT(no)
+else
+ gl=yes
+ AC_DEFINE(USE_GL)
+ XLOCKLIBS="${XLOCKLIBS} -lGL -lGLU -lgl"
+ test "x$gl_includes" = xNONE && gl_includes=$ac_gl_includes
+ test "x$gl_libraries" = xNONE && gl_libraries=$ac_gl_libraries
+ ac_cv_path_gl="no_gl= ac_gl_includes=$gl_includes ac_gl_libraries=$gl_libraries"
+ AC_MSG_RESULT([libraries $gl_libraries, headers $gl_includes])
+fi
+])
+
+AC_PATH_GL
+
+if test "x$gl_libraries" != x && test "x$gl_libraries" != xNONE ; then
+ XLOCKLDFLAGS="${XLOCKLDFLAGS}:$gl_libraries"
+ XLOCKLIBPATHS="${XLOCKLIBPATHS} -L$gl_libraries"
+fi
+if test "x$gl_includes" != x && test "x$gl_includes" != xNONE ; then
+ XLOCKINC="${XLOCKINC} -I$gl_includes"
+fi
+
+dnl MesaGL gl
+
+dnl test -z "$mesagl_direct_test_library" && mesagl_direct_test_library=MesaGLU
+AC_DEFUN(AC_PATH_MESAGL_DIRECT,
+[test -z "$mesagl_direct_test_library" && mesagl_direct_test_library=MesaGL
+test -z "$mesagl_direct_test_library" && mesagl_direct_test_library=MesaGLU
+test -z "$mesagl_direct_test_function" && mesagl_direct_test_function=glXCreateContext
+test -z "$mesagl_direct_test_include" && mesagl_direct_test_include=GL/gl.h
+ for ac_dir in \
+ /usr/X11R6/include \
+ /usr/X11R5/include \
+ /usr/X11/include \
+ \
+ /usr/include/X11 \
+ /usr/include/X11R6 \
+ /usr/include/X11R5 \
+ \
+ /usr/local/X11/include \
+ /usr/local/X11R6/include \
+ /usr/local/X11R5/include \
+ \
+ /usr/local/include/X11 \
+ /usr/local/include/X11R6 \
+ /usr/local/include/X11R5 \
+ \
+ /usr/X386/include \
+ /usr/x386/include \
+ /usr/XFree86/include/X11 \
+ \
+ /usr/local/include \
+ /usr/include \
+ /usr/unsupported/include \
+ /usr/local/x11r5/include \
+ /usr/lpp/Xamples/include \
+ \
+ /usr/openwin/include \
+ /usr/openwin/share/include \
+ $extra_include \
+ ; \
+ do
+ if test -r "$ac_dir/$mesagl_direct_test_include"; then
+ no_mesagl= ac_mesagl_includes=$ac_dir
+ break
+ fi
+ done
+
+# Check for the libraries.
+# See if we find them without any special options.
+# Do not add to $LIBS permanently.
+ac_save_LIBS="$LIBS"
+LIBS="-l$mesagl_direct_test_library $LIBS"
+# First see if replacing the include by lib works.
+for ac_dir in `echo "$ac_mesagl_includes" | sed s/include/lib/` \
+ \
+ /usr/X11/lib \
+ /usr/X11R6/lib \
+ /usr/X11R5/lib \
+ \
+ /usr/lib/X11 \
+ /usr/lib/X11R6 \
+ /usr/lib/X11R5 \
+ \
+ /usr/local/X11/lib \
+ /usr/local/X11R6/lib \
+ /usr/local/X11R5/lib \
+ \
+ /usr/local/lib/X11 \
+ /usr/local/lib/X11R6 \
+ /usr/local/lib/X11R5 \
+ \
+ /usr/X386/lib \
+ /usr/x386/lib \
+ /usr/XFree86/lib/X11 \
+ \
+ /usr/lib \
+ /usr/local/lib \
+ /usr/unsupported/lib \
+ /usr/athena/lib \
+ /usr/local/x11r5/lib \
+ /usr/lpp/Xamples/lib \
+ /lib/usr/lib/X11 \
+ \
+ /usr/openwin/lib \
+ /usr/openwin/share/lib \
+ $extra_lib \
+ ; \
+do
+ for ac_extension in a so sl; do
+ if test -r $ac_dir/lib${mesagl_direct_test_library}.$ac_extension; then
+ no_mesagl= ac_mesagl_libraries=$ac_dir
+ break 2
+ fi
+ done
+done
+LIBS="$ac_save_LIBS"])
+AC_DEFUN(AC_PATH_MESAGL,
+[AC_REQUIRE_CPP()dnl
+
+mesagl_includes=NONE
+mesagl_libraries=NONE
+
+AC_MSG_CHECKING(for MesaGL)
+AC_ARG_WITH(mesagl, [ --without-mesagl disable 3D MesaGL (for GL modes)])
+if test "x$with_mesagl" = xno; then
+ no_mesagl=yes
+else
+ if test "x$mesagl_includes" != xNONE && test "x$mesagl_libraries" != xNONE; then
+ no_mesagl=
+ else
+AC_CACHE_VAL(ac_cv_path_mesagl,
+[# One or both of these vars are not set, and there is no cached value.
+no_mesagl=yes
+AC_PATH_MESAGL_DIRECT
+
+if test "$no_mesagl" = yes; then
+ ac_cv_path_mesagl="no_mesagl=yes"
+else
+ ac_cv_path_mesagl="no_mesagl= ac_mesagl_includes=$ac_mesagl_includes ac_mesagl_libraries=$ac_mesagl_libraries"
+fi])dnl
+ fi
+ eval "$ac_cv_path_mesagl"
+fi # with_mesagl != no
+
+if test "$no_mesagl" = yes; then
+ AC_MSG_RESULT(no)
+else
+ if test "$gl" = no; then
+ gl=yes
+ AC_DEFINE(USE_GL)
+ XLOCKLIBS="${XLOCKLIBS} -lMesaGL -lMesaGLU"
+ test "x$mesagl_includes" = xNONE && mesagl_includes=$ac_mesagl_includes
+ test "x$mesagl_libraries" = xNONE && mesagl_libraries=$ac_mesagl_libraries
+ ac_cv_path_mesagl="no_mesagl= ac_mesagl_includes=$mesagl_includes ac_mesagl_libraries=$mesagl_libraries"
+ AC_MSG_RESULT([libraries $mesagl_libraries, headers $mesagl_includes])
+ fi
+fi
+])
+
+AC_PATH_MESAGL
+
+if test "x$mesagl_libraries" != x && test "x$mesagl_libraries" != xNONE ; then
+ XLOCKLDFLAGS="${XLOCKLDFLAGS}:$mesagl_libraries"
+ XLOCKLIBPATHS="${XLOCKLIBPATHS} -L$mesagl_libraries"
+fi
+if test "x$mesagl_includes" != x && test "x$mesagl_includes" != xNONE ; then
+ XLOCKINC="${XLOCKINC} -I$mesagl_includes"
+fi
+
+dnl DTSAVER DtSaver dtsaver DtSvc
+
+AC_DEFUN(AC_PATH_DTSAVER_DIRECT,
+[test -z "$dtsaver_direct_test_library" && dtsaver_direct_test_library=DtSvc
+test -z "$dtsaver_direct_test_function" && dtsaver_direct_test_function=DtSaverGetWindows
+test -z "$dtsaver_direct_test_include" && dtsaver_direct_test_include=Dt/Saver.h
+ for ac_dir in \
+ /usr/dt/include \
+ $extra_include \
+ ; \
+ do
+ if test -r "$ac_dir/$dtsaver_direct_test_include"; then
+ no_dtsaver= ac_dtsaver_includes=$ac_dir
+ break
+ fi
+ done
+
+# Check for the libraries.
+# See if we find them without any special options.
+# Do not add to $LIBS permanently.
+ac_save_LIBS="$LIBS"
+LIBS="-l$dtsaver_direct_test_library $LIBS"
+# First see if replacing the include by lib works.
+for ac_dir in `echo "$ac_dtsaver_includes" | sed s/include/lib/` \
+ $extra_lib \
+ ; \
+do
+ for ac_extension in a so sl; do
+ if test -r $ac_dir/lib${dtsaver_direct_test_library}.$ac_extension; then
+ no_dtsaver= ac_dtsaver_libraries=$ac_dir
+ break 2
+ fi
+ done
+done
+LIBS="$ac_save_LIBS"])
+AC_DEFUN(AC_PATH_DTSAVER,
+[AC_REQUIRE_CPP()dnl
+
+dtsaver_includes=NONE
+dtsaver_libraries=NONE
+
+AC_MSG_CHECKING(for DtSaver)
+AC_ARG_WITH(dtsaver, [ --without-dtsaver disable -dtsaver option])
+if test "x$with_dtsaver" = xno; then
+ no_dtsaver=yes
+else
+ if test "x$dtsaver_includes" != xNONE && test "x$dtsaver_libraries" != xNONE; then
+ no_dtsaver=
+ else
+AC_CACHE_VAL(ac_cv_path_dtsaver,
+[# One or both of these vars are not set, and there is no cached value.
+no_dtsaver=yes
+AC_PATH_DTSAVER_DIRECT
+
+if test "$no_dtsaver" = yes; then
+ ac_cv_path_dtsaver="no_dtsaver=yes"
+else
+ ac_cv_path_dtsaver="no_dtsaver= ac_dtsaver_includes=$ac_dtsaver_includes ac_dtsaver_libraries=$ac_dtsaver_libraries"
+fi])dnl
+ fi
+ eval "$ac_cv_path_dtsaver"
+fi # with_dtsaver != no
+
+if test "$no_dtsaver" = yes; then
+ AC_MSG_RESULT(no)
+else
+ AC_DEFINE(USE_DTSAVER)
+ XLOCKLIBS="${XLOCKLIBS} -lDtSvc"
+ test "x$dtsaver_includes" = xNONE && dtsaver_includes=$ac_dtsaver_includes
+ test "x$dtsaver_libraries" = xNONE && dtsaver_libraries=$ac_dtsaver_libraries
+ ac_cv_path_dtsaver="no_dtsaver= ac_dtsaver_includes=$dtsaver_includes ac_dtsaver_libraries=$dtsaver_libraries"
+ AC_MSG_RESULT([libraries $dtsaver_libraries, headers $dtsaver_includes])
+fi
+])
+
+AC_PATH_DTSAVER
+
+if test "x$dtsaver_libraries" != x && test "x$dtsaver_libraries" != xNONE ; then
+ XLOCKLDFLAGS="${XLOCKLDFLAGS}:$dtsaver_libraries"
+ XLOCKLIBPATHS="${XLOCKLIBPATHS} -L$dtsaver_libraries"
+fi
+if test "x$dtsaver_includes" != x && test "x$dtsaver_includes" != xNONE ; then
+ XLOCKINC="${XLOCKINC} -I$dtsaver_includes"
+fi
+
+sound=no
+dnl RPLAY RPlay rplay
+
+AC_DEFUN(AC_PATH_RPLAY_DIRECT,
+[test -z "$rplay_direct_test_library" && rplay_direct_test_library=rplay
+test -z "$rplay_direct_test_function" && rplay_direct_test_function=rplay_open_default
+test -z "$rplay_direct_test_include" && rplay_direct_test_include=rplay.h
+ for ac_dir in \
+ /usr/X11R6/include \
+ /usr/X11R5/include \
+ /usr/X11/include \
+ /usr/local/include \
+ /usr/include \
+ $extra_include \
+ ; \
+ do
+ if test -r "$ac_dir/$rplay_direct_test_include"; then
+ no_rplay= ac_rplay_includes=$ac_dir
+ break
+ fi
+ done
+
+# Check for the libraries.
+# See if we find them without any special options.
+# Do not add to $LIBS permanently.
+ac_save_LIBS="$LIBS"
+LIBS="-l$play_direct_test_library $LIBS"
+# First see if replacing the include by lib works.
+for ac_dir in `echo "$ac_rplay_includes" | sed s/include/lib/` \
+ \
+ /usr/X11R6/lib \
+ /usr/X11R5/lib \
+ /usr/X11/lib \
+ /usr/lib \
+ /usr/local/lib \
+ $extra_lib \
+ ; \
+do
+ for ac_extension in a so sl; do
+ if test -r $ac_dir/lib${rplay_direct_test_library}.$ac_extension; then
+ no_rplay= ac_rplay_libraries=$ac_dir
+ break 2
+ fi
+ done
+done
+LIBS="$ac_save_LIBS"])
+AC_DEFUN(AC_PATH_RPLAY,
+[AC_REQUIRE_CPP()dnl
+
+rplay_includes=NONE
+rplay_libraries=NONE
+
+AC_MSG_CHECKING(for RPLAY)
+AC_ARG_WITH(rplay, [ --without-rplay disable RPLAY sounds])
+if test "x$with_rplay" = xno; then
+ no_rplay=yes
+else
+ if test "x$rplay_includes" != xNONE && test "x$rplay_libraries" != xNONE; then
+ no_rplay=
+ else
+AC_CACHE_VAL(ac_cv_path_rplay,
+[# One or both of these vars are not set, and there is no cached value.
+no_rplay=yes
+AC_PATH_RPLAY_DIRECT
+
+if test "$no_rplay" = yes; then
+ ac_cv_path_rplay="no_rplay=yes"
+else
+ ac_cv_path_rplay="no_rplay= ac_rplay_includes=$ac_rplay_includes ac_rplay_libraries=$ac_rplay_libraries"
+fi])dnl
+ fi
+ eval "$ac_cv_path_rplay"
+fi # with_rplay != no
+
+if test "$no_rplay" = yes; then
+ AC_MSG_RESULT(no)
+else
+ sound=yes
+ AC_DEFINE(USE_RPLAY)
+ XLOCKLIBS="${XLOCKLIBS} -lrplay"
+ test "x$rplay_includes" = xNONE && rplay_includes=$ac_rplay_includes
+ test "x$rplay_libraries" = xNONE && rplay_libraries=$ac_rplay_libraries
+ ac_cv_path_rplay="no_rplay= ac_rplay_includes=$rplay_includes ac_rplay_libraries=$rplay_libraries"
+ AC_MSG_RESULT([libraries $rplay_libraries, headers $rplay_includes])
+fi
+])
+
+AC_PATH_RPLAY
+
+if test "x$rplay_libraries" != x && test "x$rplay_libraries" != xNONE ; then
+ XLOCKLDFLAGS="${XLOCKLDFLAGS}:$rplay_libraries"
+ XLOCKLIBPATHS="${XLOCKLIBPATHS} -L$rplay_libraries"
+fi
+if test "x$rplay_includes" != x && test "x$rplay_includes" != xNONE ; then
+ XLOCKINC="${XLOCKINC} -I$rplay_includes"
+fi
+
+dnl NAS audio
+
+AC_DEFUN(AC_PATH_NAS_DIRECT,
+[test -z "$nas_direct_test_library" && nas_direct_test_library=audio
+test -z "$nas_direct_test_function" && nas_direct_test_function=AuOpenServer
+test -z "$nas_direct_test_include" && nas_direct_test_include=audio/audio.h
+ for ac_dir in \
+ /usr/X11R6/include \
+ /usr/X11R5/include \
+ /usr/X11/include \
+ /usr/local/include \
+ /usr/include \
+ $extra_include \
+ ; \
+ do
+ if test -r "$ac_dir/$nas_direct_test_include"; then
+ no_nas= ac_nas_includes=$ac_dir
+ break
+ fi
+ done
+
+# Check for the libraries.
+# See if we find them without any special options.
+# Do not add to $LIBS permanently.
+ac_save_LIBS="$LIBS"
+LIBS="-l$play_direct_test_library $LIBS"
+# First see if replacing the include by lib works.
+for ac_dir in `echo "$ac_nas_includes" | sed s/include/lib/` \
+ \
+ /usr/X11R6/lib \
+ /usr/X11R5/lib \
+ /usr/X11/lib \
+ /usr/lib \
+ /usr/local/lib \
+ $extra_lib \
+ ; \
+do
+ for ac_extension in a so sl; do
+ if test -r $ac_dir/lib${nas_direct_test_library}.$ac_extension; then
+ no_nas= ac_nas_libraries=$ac_dir
+ break 2
+ fi
+ done
+done
+LIBS="$ac_save_LIBS"])
+AC_DEFUN(AC_PATH_NAS,
+[AC_REQUIRE_CPP()dnl
+
+nas_includes=NONE
+nas_libraries=NONE
+
+AC_MSG_CHECKING(for NAS)
+AC_ARG_WITH(nas, [ --without-nas disable NAS sounds])
+if test "x$with_nas" = xno; then
+ no_nas=yes
+else
+ if test "x$nas_includes" != xNONE && test "x$nas_libraries" != xNONE; then
+ no_nas=
+ else
+AC_CACHE_VAL(ac_cv_path_nas,
+[# One or both of these vars are not set, and there is no cached value.
+no_nas=yes
+AC_PATH_NAS_DIRECT
+
+if test "$no_nas" = yes; then
+ ac_cv_path_nas="no_nas=yes"
+else
+ ac_cv_path_nas="no_nas= ac_nas_includes=$ac_nas_includes ac_nas_libraries=$ac_nas_libraries"
+fi])dnl
+ fi
+ eval "$ac_cv_path_nas"
+fi # with_nas != no
+
+if test "$no_nas" = yes; then
+ AC_MSG_RESULT(no)
+else
+ if test "$sound" = no; then
+ sound=yes
+ AC_DEFINE(USE_NAS)
+ XLOCKLIBS="${XLOCKLIBS} -lnas"
+ test "x$nas_includes" = xNONE && nas_includes=$ac_nas_includes
+ test "x$nas_libraries" = xNONE && nas_libraries=$ac_nas_libraries
+ ac_cv_path_nas="no_nas= ac_nas_includes=$nas_includes ac_nas_libraries=$nas_libraries"
+ AC_MSG_RESULT([libraries $nas_libraries, headers $nas_includes])
+ fi
+fi
+])
+
+AC_PATH_NAS
+
+if test "x$nas_libraries" != x && test "x$nas_libraries" != xNONE ; then
+ XLOCKLDFLAGS="${XLOCKLDFLAGS}:$nas_libraries"
+ XLOCKLIBPATHS="${XLOCKLIBPATHS} -L$nas_libraries"
+fi
+if test "x$nas_includes" != x && test "x$nas_includes" != xNONE ; then
+ XLOCKINC="${XLOCKINC} -I$nas_includes"
+fi
+
+dnl Should have a tester for XHPUX Xhp
+
+dnl Now we handle the various system dependant problems
+dnl that are not addressed in the X header files, or things dealing
+dnl with utility quirks on some systems.
+
+aixv3=no
+dirent=yes
+
+AC_CANONICAL_HOST
+canonical=$host
+case "${canonical}" in
+
+ *-*-aix* )
+ BITMAPTYPE="x11"
+ PIXMAPTYPE="x11"
+ AC_DEFINE(AIXV3)
+ aixv3=yes
+ case "${canonical}" in
+ *-*-aix2* | *-*-aix3.0* | *-*-aix3.1* )
+ AC_DEFINE(LESS_THAN_AIX3_2)
+ ;;
+ esac
+dnl if your site is using AFS
+dnl AC_DEFINE(AFS)
+dnl XLOCKINC="${XLOCKINC} -I/usr/afsws/include"
+dnl XLOCKLIBS="${XLOCKLIBS} -L/usr/afsws/lib -L/usr/afsws/lib/afs -lkauth -lubik -lprot -lrxkad -lrx -llwp -lauth -lsys -ldes -lcmd -lcom_err /usr/afsws/lib/afs/util.a -laudit"
+ ;;
+
+ *-*-freebsd* )
+ BITMAPTYPE="bsd"
+ PIXMAPTYPE="bsd"
+ ;;
+
+ *-*-netbsd* | *-*-openbsd* )
+ BITMAPTYPE="bsd"
+ PIXMAPTYPE="bsd"
+ ;;
+
+ *-*-dgux5* )
+ BITMAPTYPE="x11"
+ PIXMAPTYPE="x11"
+ ;;
+
+ *-*-hpux* )
+ if test "${CC}" = "cc" ; then
+ CFLAGS="${CFLAGS} -O -Aa -z -D_HPUX_SOURCE"
+ GPROF_CFLAGS="${GPROF_CFLAGS} -Aa -z -D_HPUX_SOURCE"
+ fi
+dnl LDFLAGS=-Wl,-B,immediate
+ XLOCKLIBS="-lXhp11 ${XLOCKLIBS}"
+ AC_DEFINE(SYSV)
+ AC_DEFINE(SVR4)
+ BITMAPTYPE="hp"
+ PIXMAPTYPE="hp"
+ ;;
+
+ *-*-irix5* | *-*-irix6* )
+ if test "${CC}" = "cc" ; then
+ CFLAGS="${CFLAGS} -fullwarn"
+ fi
+ BITMAPTYPE="sgi"
+ PIXMAPTYPE="sgi"
+ ;;
+
+ *-*-linux* )
+ AC_CHECK_HEADER(elf.h, AC_DEFINE(HAVE_SHADOW))
+dnl CFLAGS="${CFLAGS} -ansi -pedantic"
+ AC_DEFINE(linux)
+dnl AC_DEFINE(__i386__)
+ AC_DEFINE(_POSIX_SOURCE)
+ AC_DEFINE(_BSD_SOURCE)
+ AC_DEFINE(_GNU_SOURCE)
+dnl AC_DEFINE(DX_LOCALE)
+dnl INSTPGMFLAGS="-m 2111"
+dnl INSTPGMFLAGS="-m 4111"
+ BITMAPTYPE="linux"
+ PIXMAPTYPE="linux"
+dnl if Shadow and not elf
+dnl XLOCKLIBS="${XLOCKLIBS} -lgdbm"
+ ;;
+
+ *-*-osf* )
+ BITMAPTYPE="x11"
+ PIXMAPTYPE="x11"
+ AC_MSG_CHECKING(for Digital Unix Enhanced Security)
+ if test -f /usr/sbin/rcmgr && test -f /etc/rc.config ; then
+ if test X`/usr/sbin/rcmgr get SECURITY` = XENHANCED ; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(OSF1_ENH_SEC)
+ AC_SUBST(OSF1_ENH_SEC)
+ XLOCKLIBS="${XLOCKLIBS} -lsecurity"
+ INSTPGMFLAGS="-g auth -m 2111"
+ else
+ AC_MSG_RESULT(no)
+ fi
+ fi
+ ;;
+
+ *-*-solaris2* )
+ AC_DEFINE(SOLARIS2)
+
+dnl DIRENT seems screwed up, check out utils.c and grep for Solaris2
+dnl dirent=yes
+dnl Then try xlock -debug -mode image -imagefile ./bitmaps/
+dnl or xlock -debug -mode image -imagefile ./bitmaps/dimple1.xbm
+
+dnl No random images by giving directory name
+ dirent=no
+
+dnl INSTPGMFLAGS="-m 4111"
+ AC_DEFINE(HAVE_SHADOW)
+ AC_DEFINE(SYSV)
+ AC_DEFINE(SVR4)
+ BITMAPTYPE="sun"
+ PIXMAPTYPE="sol"
+dnl XLOCKLIBS="${XLOCKLIBS} -lsocket -lnsl -lposix4"
+ XLOCKLIBS="${XLOCKLIBS} -lposix4"
+ LIBS="${LIBS} -lsocket -lnsl -lposix4"
+ LDFLAGS="${XLOCKLDFLAGS}"
+ ;;
+
+ *-*-sunos4* )
+ AC_DEFINE(SUNOS4)
+ BITMAPTYPE="sun"
+ PIXMAPTYPE="sun"
+ ;;
+
+ *-*-sysv5* )
+ BITMAPTYPE="x11"
+ PIXMAPTYPE="x11"
+ ;;
+
+ *)
+ BITMAPTYPE="x11"
+ PIXMAPTYPE="x11"
+ ;;
+esac
+
+
+if test "$dirent" = yes; then
+ AC_HEADER_DIRENT
+fi
+
+AC_CHECK_FUNC(nanosleep, AC_DEFINE(HAVE_NANOSLEEP),
+AC_CHECK_FUNC(usleep, AC_DEFINE(HAVE_USLEEP)))
+
+srand=no
+AC_CHECK_FUNC(srand48, AC_DEFINE(SRAND,srand48) AC_DEFINE(LRAND,lrand48)
+ AC_DEFINE(MAXRAND,2147483648.0),
+[AC_CHECK_FUNC(srandom, AC_DEFINE(SRAND,srandom) AC_DEFINE(LRAND,random)
+ AC_DEFINE(MAXRAND,2147483648.0),
+AC_CHECK_FUNC(srand, AC_DEFINE(SRAND,srand) AC_DEFINE(LRAND,rand) srand=yes))])
+
+if test "$srand" = yes; then
+ if test "$aixv3" = yes; then
+ AC_DEFINE(MAXRAND,2147483648.0)
+ else
+ AC_DEFINE(MAXRAND,32768.0)
+ fi
+fi
+
+AC_MSG_CHECKING([matherr support])
+AC_CACHE_VAL(ac_cv_c_matherr,[
+AC_TRY_COMPILE([#include <math.h>], [
+struct exception x;
+x.type = DOMAIN;
+x.type = SING;
+], ac_cv_c_matherr=yes, ac_cv_c_matherr=no)])
+if test x"$ac_cv_c_matherr" = xyes; then
+ AC_DEFINE(USE_MATHERR)
+ AC_MSG_RESULT(yes)
+else
+ AC_MSG_RESULT(no)
+fi
+
+AC_ARG_ENABLE(bitmapdir, [ --enable-bitmapdir=DIR set directory for bitmaps, default is ./bitmaps],bitmap_dir=$enableval,bitmap_dir=no)
+case "x$bitmap_dir" in
+x/*|x.*)
+ AC_MSG_RESULT([setting BITMAPDIR = $enableval])
+ BITMAPDIR=$enableval
+ if test ! -d $bitmap_dir; then
+ AC_MSG_RESULT([Warning: Directory $enableval does not exist])
+ fi
+ ;;
+*)
+ BITMAPDIR="${srcdir}/bitmaps"
+ bitmap_dir="$srcdir/bitmaps"
+ ;;
+esac
+
+AC_ARG_ENABLE(bitmaptype, [ --enable-bitmaptype=name
+ set name for bitmap type],bitmap_type=$enableval,bitmap_type=no)
+case "x$bitmap_type" in
+xyes*|xno*)
+ ;;
+*)
+ AC_MSG_RESULT([setting BITMAPTYPE = $enableval])
+ BITMAPTYPE=$enableval
+ if test ! -f $bitmap_dir/l-$BITMAPTYPE.xbm; then
+ AC_MSG_RESULT([Warning: Bitmap $BITMAPDIR/l-$BITMAPTYPE.xbm does not exist])
+ fi
+ ;;
+esac
+
+AC_ARG_ENABLE(pixmapdir, [ --enable-pixmapdir=DIR set directory for pixmaps, default is ./pixmaps],pixmap_dir=$enableval,pixmap_dir=no)
+case "x$pixmap_dir" in
+x/*|x.*)
+ AC_MSG_RESULT([setting PIXMAPDIR = $enableval])
+ PIXMAPDIR=$enableval
+ if test ! -d $pixmap_dir; then
+ AC_MSG_RESULT([Warning: Directory $enableval does not exist])
+ fi
+ ;;
+*)
+ PIXMAPDIR="${srcdir}/pixmaps"
+ pixmap_dir="$srcdir/pixmaps"
+ ;;
+esac
+
+AC_ARG_ENABLE(pixmaptype, [ --enable-pixmaptype=name
+ set name for pixmap type],pixmap_type=$enableval,pixmap_type=no)
+case "x$pixmap_type" in
+xyes*|xno*)
+ ;;
+*)
+ AC_MSG_RESULT([setting PIXMAPTYPE = $enableval])
+ PIXMAPTYPE=$enableval
+ if test ! -f $pixmap_dir/m-$PIXMAPTYPE.xpm; then
+ AC_MSG_RESULT([Warning: Pixmap $PIXMAPDIR/m-$PIXMAPTYPE.xpm does not exist])
+ fi
+ ;;
+esac
+
+AC_ARG_ENABLE(mapdir, [ --enable-mapdir=DIR set directory for bitmaps and pixmaps],map_dir=$enableval,map_dir=no)
+case "x$map_dir" in
+x/*|x.*)
+ AC_MSG_RESULT([setting BITMAPDIR = $enableval])
+ BITMAPDIR=$enableval
+ AC_MSG_RESULT([setting PIXMAPDIR = $enableval])
+ PIXMAPDIR=$enableval
+ if test ! -d $map_dir; then
+ AC_MSG_RESULT([Warning: Directory $enableval does not exist])
+ fi
+ ;;
+*)
+ BITMAPDIR="${srcdir}/bitmaps"
+ bitmap_dir="$srcdir/bitmaps"
+ PIXMAPDIR="${srcdir}/pixmaps"
+ pixmap_dir="$srcdir/pixmaps"
+ ;;
+esac
+
+AC_ARG_ENABLE(maptype, [ --enable-maptype=name set name for bitmap and pixmap type],map_type=$enableval,map_type=no)
+case "x$map_type" in
+xyes*|xno*)
+ ;;
+*)
+ AC_MSG_RESULT([setting BITMAPTYPE = $enableval])
+ BITMAPTYPE=$enableval
+ if test ! -f $map_dir/l-$BITMAPTYPE.xbm; then
+ AC_MSG_RESULT([Warning: Bitmap $BITMAPDIR/l-$BITMAPTYPE.xbm does not exist])
+ fi
+ AC_MSG_RESULT([setting PIXMAPTYPE = $enableval])
+ PIXMAPTYPE=$enableval
+ if test ! -f $map_dir/m-$PIXMAPTYPE.xpm; then
+ AC_MSG_RESULT([Warning: Pixmap $PIXMAPDIR/m-$PIXMAPTYPE.xpm does not exist])
+ fi
+ ;;
+esac
+
+if test "$sound" = no; then
+ AC_ARG_ENABLE(def_play, [ --enable-def-play=program
+ set def-play to program that plays sounds],def_play=$enableval,def_play=no)
+ if test "$def_play" != no; then
+ AC_MSG_RESULT([defining option DEF_PLAY = "$enableval"])
+ AC_DEFINE_UNQUOTED(DEF_PLAY,"$enableval")
+ fi
+fi
+
+AC_ARG_ENABLE(vroot, [ --disable-vroot disables xlock from being able to run in root window
+ (some window managers have problems)],use_vroot=$enableval,use_vroot=yes)
+if test "$use_vroot" = yes; then
+ AC_MSG_RESULT([defining option USE_VROOT])
+ AC_DEFINE(USE_VROOT)
+fi
+
+AC_ARG_ENABLE(allow-root, [ --disable-allow-root allows users to turn off allowroot (default is to
+ always allow root to be able to unlock xlock)],allow_root=$enableval,allow_root=yes)
+if test "$allow_root" = yes; then
+ AC_MSG_RESULT([defining option ALWAYS_ALLOW_ROOT])
+ AC_DEFINE(ALWAYS_ALLOW_ROOT)
+fi
+
+AC_ARG_ENABLE(syslog, [ --enable-syslog enable syslog logging],use_syslog=$enableval,use_syslog=no)
+if test "$use_syslog" = yes; then
+ AC_MSG_RESULT([defining option USE_SYSLOG])
+ AC_DEFINE(USE_SYSLOG)
+fi
+
+AC_ARG_ENABLE(multiple-root, [ --enable-multiple-root enable multiple root users],use_multiple_root=$enableval,use_multiple_root=no)
+if test "$use_multiple_root" = yes; then
+ AC_MSG_RESULT([defining option USE_MULTIPLE_ROOT])
+ AC_DEFINE(USE_MULTIPLE_ROOT)
+fi
+
+AC_ARG_ENABLE(mouse-motion, [ --enable-mouse-motion password screen displayed with mouse motion],use_mouse_motion=$enableval,use_mouse_motion=no)
+if test "$use_mouse_motion" = yes; then
+ AC_MSG_RESULT([defining option USE_MOUSE_MOTION])
+ AC_DEFINE(USE_MOUSE_MOTION)
+fi
+
+AC_ARG_ENABLE(old-event-loop, [ --enable-old-event-loop some machines may still need this
+ (fd_set errors may be a sign)],use_old_event_loop=$enableval,use_old_event_loop=no)
+if test "$use_old_event_loop" = yes; then
+ AC_MSG_RESULT([defining option USE_OLD_EVENT_LOOP])
+ AC_DEFINE(USE_OLD_EVENT_LOOP)
+fi
+
+dnl AC_ARG_ENABLE(vmsutils, [ --enable-vmsutils patches up old __VMS_VER < 70000000],use_vmsutils=$enableval,use_vmsutils=no)
+dnl if test "$use_vmsutils" = yes; then
+dnl AC_MSG_RESULT([defining option USE_VMSUTILS])
+dnl AC_DEFINE(USE_VMSUTILS)
+dnl fi
+
+AC_ARG_ENABLE(xlockrc, [ --enable-xlockrc for unknown shadow passwd algorithm],use_xlockrc=$enableval,use_xlockrc=no)
+if test "$use_xlockrc" = yes; then
+ AC_MSG_RESULT([defining option USE_XLOCKRC])
+ AC_DEFINE(USE_XLOCKRC)
+fi
+
+AC_ARG_ENABLE(auto-logout, [ --enable-auto-logout=time
+ enable auto-logout code for lab use (time in minutes)],use_auto_logout=$enableval,use_auto_logout=no)
+case "x$use_auto_logout" in
+x|xyes*)
+ AC_MSG_RESULT([defining option USE_AUTO_LOGOUT = 240 minutes])
+ AC_DEFINE(USE_AUTO_LOGOUT,240)
+ ;;
+x[[0-9]]*)
+ AC_MSG_RESULT([defining option USE_AUTO_LOGOUT = $enableval minutes])
+ AC_DEFINE_UNQUOTED(USE_AUTO_LOGOUT,$enableval)
+ ;;
+xno*)
+ ;;
+*)
+ AC_MSG_RESULT([Warning: Illegal time value "$use_auto_logout" given])
+ AC_MSG_RESULT([defining option USE_AUTO_LOGOUT = 240 minutes])
+ AC_DEFINE(USE_AUTO_LOGOUT,240)
+ ;;
+esac
+
+AC_ARG_ENABLE(default-auto-logout, [ --enable-default-auto-logout=time
+ set default-auto-logout (time in minutes)],def_auto_logout=$enableval,def_auto_logout=no)
+case "x$def_auto_logout" in
+x|xyes*)
+ AC_MSG_RESULT([defining option DEF_AUTO_LOGOUT = 120 minutes])
+ AC_DEFINE(DEF_AUTO_LOGOUT,"120")
+ ;;
+x[[0-9]]*)
+ AC_MSG_RESULT([defining option DEF_AUTO_LOGOUT = $enableval minutes])
+ AC_DEFINE_UNQUOTED(DEF_AUTO_LOGOUT,"$enableval")
+ ;;
+xno*)
+ ;;
+*)
+ AC_MSG_RESULT([Warning: Illegal time value "$def_auto_logout" given])
+ AC_MSG_RESULT([defining option DEF_AUTO_LOGOUT = 120 minutes])
+ AC_DEFINE(DEF_AUTO_LOGOUT,"120")
+ ;;
+esac
+
+AC_ARG_ENABLE(button-logout, [ --enable-button-logout=time
+ enable button logout for lab use (time in minutes)],use_button_logout=$enableval,use_button_logout=no)
+case "x$use_button_logout" in
+x|xyes*)
+ AC_MSG_RESULT([defining option USE_BUTTON_LOGOUT = 10 minutes])
+ AC_DEFINE(USE_BUTTON_LOGOUT,10)
+ ;;
+x[[0-9]]*)
+ AC_MSG_RESULT([defining option USE_BUTTON_LOGOUT = $enableval minutes])
+ AC_DEFINE_UNQUOTED(USE_BUTTON_LOGOUT,$enableval)
+ ;;
+xno*)
+ ;;
+*)
+ AC_MSG_RESULT([Warning: Illegal time value "$use_button_logout" given])
+ AC_MSG_RESULT([defining option USE_BUTTON_LOGOUT = 10 minutes])
+ AC_DEFINE(USE_BUTTON_LOGOUT,10)
+ ;;
+esac
+
+AC_ARG_ENABLE(default-button-logout, [ --enable-default-button-logout=time
+ set default-button-logout (time in minutes)],def_button_logout=$enableval,def_button_logout=no)
+case "x$def_button_logout" in
+x|xyes*)
+ AC_MSG_RESULT([defining option DEF_BUTTON_LOGOUT = 5 minutes])
+ AC_DEFINE(DEF_BUTTON_LOGOUT,"5")
+ ;;
+x[[0-9]]*)
+ AC_MSG_RESULT([defining option DEF_BUTTON_LOGOUT = $enableval minutes])
+ AC_DEFINE_UNQUOTED(DEF_BUTTON_LOGOUT,"$enableval")
+ ;;
+xno*)
+ ;;
+*)
+ AC_MSG_RESULT([Warning: Illegal time value "$def_button_logout" given])
+ AC_MSG_RESULT([defining option DEF_BUTTON_LOGOUT = 5 minutes])
+ AC_DEFINE(DEF_BUTTON_LOGOUT,"5")
+ ;;
+esac
+
+AC_ARG_ENABLE(bomb, [ --disable-bomb disable automatic logout mode],use_bomb=$enableval,use_bomb=yes)
+if test "$use_bomb" = yes; then
+ AC_MSG_RESULT([defining option USE_BOMB])
+ AC_DEFINE(USE_BOMB)
+fi
+
+AC_ARG_ENABLE(closedown-logout, [ --enable-closedown-logout
+ define this one or next, with enable-auto-logout,],closedown_logout=$enableval,closedown_logout=no)
+if test "$closedown_logout" = yes; then
+ AC_MSG_RESULT([defining option CLOSEDOWN_LOGOUT])
+ AC_DEFINE(CLOSEDOWN_LOGOUT)
+fi
+
+AC_ARG_ENABLE(session-logout, [ --enable-session-logout enable-button-logout, and/or enable-bomb, for xdm],session_logout=$enableval,session_logout=no)
+if test "$session_logout" = yes; then
+ AC_MSG_RESULT([defining option SESSION_LOGOUT])
+ AC_DEFINE(SESSION_LOGOUT)
+fi
+
+AC_ARG_ENABLE(staff-file, [ --enable-staff-file=filename
+ set file of staff who are exempt from auto-logout],use_staff_file=$enableval,use_staff_file=no)
+case "x$use_staff_file" in
+x|xyes*)
+ AC_MSG_RESULT([defining option STAFF_FILE = "/usr/remote/etc/xlock.staff"])
+ AC_DEFINE_UNQUOTED(STAFF_FILE,"/usr/remote/etc/xlock.staff")
+ if test ! -f /usr/remote/etc/xlock.staff; then
+ AC_MSG_RESULT([Warning: File /usr/remote/etc/xlock.staff does not exist])
+ fi
+ ;;
+x/*)
+ AC_MSG_RESULT([defining option STAFF_FILE = "$enableval"])
+ AC_DEFINE_UNQUOTED(STAFF_FILE,"$enableval")
+ if test ! -f $use_staff_file; then
+ AC_MSG_RESULT([Warning: File $enableval does not exist])
+ fi
+ ;;
+esac
+
+AC_ARG_ENABLE(staff-netgroup, [ --enable-staff-netgroup=netgroup
+ set netgroup of staff who are exempt from auto-logout],use_staff_netgroup=$enableval,use_staff_netgroup=no)
+if test "$use_staff_netgroup" != no; then
+ AC_MSG_RESULT([defining option STAFF_NETGROUP = "$enableval"])
+ AC_DEFINE_UNQUOTED(STAFF_NETGROUP,"$enableval")
+fi
+
+AC_ARG_ENABLE(hackers, [ --enable-hackers enable hackers modes (possibly making xlock unstable)],hackers=$enableval,hackers=no)
+if test "$hackers" = yes; then
+ AC_MSG_RESULT([enabling hackers modes])
+ HACKERS=""
+else
+ HACKERS="#"
+fi
+
+
+XLOCKLIBS="${XLOCKLIBPATHS} ${XLOCKLIBS} -lX11 -lXext -lm"
+XMLOCKLIBS="${XMLOCKLIBPATHS} ${XMLOCKLIBS} -lX11"
+AC_SUBST(LDFLAGS)
+AC_SUBST(INSTPGMFLAGS)
+AC_SUBST(XLOCKINC)
+AC_SUBST(XMLOCKINC)
+AC_SUBST(XLIBS)
+AC_SUBST(BITMAPTYPE)
+AC_SUBST(PIXMAPTYPE)
+AC_SUBST(BITMAPDIR)
+AC_SUBST(PIXMAPDIR)
+AC_SUBST(XLOCKLIBS)
+AC_SUBST(XMLOCKLIBS)
+AC_SUBST(XMLOCK)
+AC_SUBST(INSTALL_XMLOCK)
+AC_SUBST(UNINSTALL_XMLOCK)
+AC_SUBST(LINT)
+AC_SUBST(HACKERS)
+
+AC_CONFIG_HEADER(config.h)
+AC_OUTPUT(Makefile)
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)crystal.c 4.03 97/05/07 xlockmore";
+
+#endif
+
+/*
+ * crystal.c - Polygons moving according to plane group rules for xlock,
+ * the X Window System lockscreen.
+ *
+ * Copyright (c) 1997 by Jouk Jansen <joukj@crys.chem.uva.nl>
+ *
+ * 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.
+ *
+ * The author should like to be notified if changes have been made to the
+ * routine. Response will only be guaranteed when a VMS version of the
+ * program is available.
+ *
+ * Revision History:
+ * 12-Jun-97: Created
+ */
+
+/*-
+ * It is a moving polygon-mode. The polygons obbey 2D-planegroup symmetry.
+ * At the moment the hexagonal groups do not work (I have not coded
+ * non-orthogonal unit cells).
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Crystal"
+#define HACK_INIT init_crystal
+#define HACK_DRAW draw_crystal
+#define DEF_DELAY 60000
+#define DEF_BATCHCOUNT -40
+#define DEF_CYCLES 200
+#define DEF_SIZE -15
+#define DEF_NCOLORS 200
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt crystal_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+#define DEF_NUM_ATOM 10
+
+#define DEF_SIZ_ATOM 10
+
+#define PI_RAD (M_PI / 180.0)
+
+static Bool centro[17] =
+{
+ False,
+ True,
+ False,
+ False,
+ False,
+ True,
+ True,
+ True,
+ True,
+ True,
+ True,
+ True,
+ False,
+ False,
+ False,
+ True,
+ True
+};
+
+static Bool primitive[17] =
+{
+ True,
+ True,
+ True,
+ False,
+ True,
+ True,
+ True,
+ False,
+ True,
+ True,
+ True,
+ True,
+ True,
+ True,
+ True,
+ True,
+ True
+};
+
+static short numops[34] =
+{
+ 1, 0,
+ 1, 0,
+ 9, 7,
+ 2, 0,
+ 9, 7,
+ 9, 7,
+ 4, 2,
+ 5, 3,
+ 9, 7,
+ 8, 6,
+ 10, 6,
+ 8, 4,
+ 16, 13,
+ 19, 13,
+ 16, 10,
+ 19, 13,
+ 19, 13
+};
+
+static short operation[114] =
+{
+ 1, 0, 0, 1, 0, 0,
+ -1, 0, 0, 1, 0, 1,
+ -1, 0, 0, 1, 1, 0,
+ 1, 0, 0, 1, 0, 0,
+ -1, 0, 0, 1, 1, 1,
+ 1, 0, 0, 1, 1, 1,
+ 0, -1, 1, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0,
+ -1, 0, 0, 1, 0, 0,
+ 0, 1, 1, 0, 0, 0,
+ -1, 0, -1, 1, 0, 0,
+ -1, 1, 0, -1, 0, 0,
+ 0, 1, 1, 0, 0, 0,
+ 0, -1, 1, -1, 0, 0,
+ -1, 1, -1, 0, 0, 0,
+ 1, 0, 0, 1, 0, 0,
+ 0, -1, -1, 0, 0, 0,
+ -1, 1, 0, 1, 0, 0,
+ 1, 0, 1, -1, 0, 0
+};
+
+typedef struct {
+ unsigned long colour;
+ int x0, y0, velocity[2];
+ float angle, velocity_a;
+ int num_point, at_type, size_at;
+ XPoint xy[5];
+} crystalatom;
+
+typedef struct {
+ int win_width, win_height, num_atom;
+ int planegroup, a, b;
+ float gamma;
+ crystalatom *atom;
+
+} crystalstruct;
+
+static crystalstruct *crystals = NULL;
+
+void
+crystal_setupatom(crystalatom * atom0)
+{
+ switch (atom0->at_type) {
+ case 0: /* rectangles */
+ atom0->xy[0].x = atom0->x0 + 2 * atom0->size_at * cos(atom0->angle) +
+ atom0->size_at * sin(atom0->angle);
+ atom0->xy[0].y = atom0->y0 + atom0->size_at * cos(atom0->angle) - 2 *
+ atom0->size_at * sin(atom0->angle);
+ atom0->xy[1].x = atom0->x0 + 2 * atom0->size_at * cos(atom0->angle) -
+ atom0->size_at * sin(atom0->angle);
+ atom0->xy[1].y = atom0->y0 - atom0->size_at * cos(atom0->angle) - 2 *
+ atom0->size_at * sin(atom0->angle);
+ atom0->xy[2].x = atom0->x0 - 2 * atom0->size_at * cos(atom0->angle) -
+ atom0->size_at * sin(atom0->angle);
+ atom0->xy[2].y = atom0->y0 - atom0->size_at * cos(atom0->angle) + 2 *
+ atom0->size_at * sin(atom0->angle);
+ atom0->xy[3].x = atom0->x0 - 2 * atom0->size_at * cos(atom0->angle) +
+ atom0->size_at * sin(atom0->angle);
+ atom0->xy[3].y = atom0->y0 + atom0->size_at * cos(atom0->angle) + 2 *
+ atom0->size_at * sin(atom0->angle);
+ atom0->xy[4].x = atom0->xy[0].x;
+ atom0->xy[4].y = atom0->xy[0].y;
+ return;
+ case 1: /* squares */
+ atom0->xy[0].x = atom0->x0 + 1.5 * atom0->size_at * cos(atom0->angle) +
+ 1.5 * atom0->size_at * sin(atom0->angle);
+ atom0->xy[0].y = atom0->y0 + 1.5 * atom0->size_at * cos(atom0->angle) -
+ 1.5 * atom0->size_at * sin(atom0->angle);
+ atom0->xy[1].x = atom0->x0 + 1.5 * atom0->size_at * cos(atom0->angle) -
+ 1.5 * atom0->size_at * sin(atom0->angle);
+ atom0->xy[1].y = atom0->y0 - 1.5 * atom0->size_at * cos(atom0->angle) -
+ 1.5 * atom0->size_at * sin(atom0->angle);
+ atom0->xy[2].x = atom0->x0 - 1.5 * atom0->size_at * cos(atom0->angle) -
+ 1.5 * atom0->size_at * sin(atom0->angle);
+ atom0->xy[2].y = atom0->y0 - 1.5 * atom0->size_at * cos(atom0->angle) +
+ 1.5 * atom0->size_at * sin(atom0->angle);
+ atom0->xy[3].x = atom0->x0 - 1.5 * atom0->size_at * cos(atom0->angle) +
+ 1.5 * atom0->size_at * sin(atom0->angle);
+ atom0->xy[3].y = atom0->y0 + 1.5 * atom0->size_at * cos(atom0->angle) +
+ 1.5 * atom0->size_at * sin(atom0->angle);
+ atom0->xy[4].x = atom0->xy[0].x;
+ atom0->xy[4].y = atom0->xy[0].y;
+ return;
+ case 2: /* triangles */
+ atom0->xy[0].x = atom0->x0 + 1.5 * atom0->size_at * sin(atom0->angle);
+ atom0->xy[0].y = atom0->y0 + 1.5 * atom0->size_at * cos(atom0->angle);
+ atom0->xy[1].x = atom0->x0 + 1.5 * atom0->size_at * cos(atom0->angle) -
+ 1.5 * atom0->size_at * sin(atom0->angle);
+ atom0->xy[1].y = atom0->y0 - 1.5 * atom0->size_at * cos(atom0->angle) -
+ 1.5 * atom0->size_at * sin(atom0->angle);
+ atom0->xy[2].x = atom0->x0 - 1.5 * atom0->size_at * cos(atom0->angle) -
+ 1.5 * atom0->size_at * sin(atom0->angle);
+ atom0->xy[2].y = atom0->y0 - 1.5 * atom0->size_at * cos(atom0->angle) +
+ 1.5 * atom0->size_at * sin(atom0->angle);
+ atom0->xy[3].x = atom0->xy[0].x;
+ atom0->xy[3].y = atom0->xy[0].y;
+ return;
+ }
+}
+
+void
+crystal_drawatom(ModeInfo * mi, crystalatom * atom0)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ Window window = MI_WINDOW(mi);
+ crystalstruct *cryst;
+ int j, k;
+
+ cryst = &crystals[MI_SCREEN(mi)];
+ for (j = numops[2 * cryst->planegroup + 1];
+ j < numops[2 * cryst->planegroup]; j++) {
+ XPoint xy[5];
+ int xtrans, ytrans;
+
+ xtrans = operation[j * 6] * atom0->x0 + operation[j * 6 + 1] *
+ atom0->y0 + operation[j * 6 + 4] * cryst->a / 2.0;
+ if (xtrans < 0)
+ xtrans = cryst->a;
+ else if (xtrans >= cryst->a)
+ xtrans = -cryst->a;
+ else
+ xtrans = 0;
+ ytrans = operation[j * 6 + 2] * atom0->x0 + operation[j * 6 + 3] *
+ atom0->y0 + operation[j * 6 + 5] * cryst->b / 2.0;
+ if (ytrans < 0)
+ xtrans = cryst->b;
+ else if (ytrans >= cryst->b)
+ ytrans = -cryst->b;
+ else
+ ytrans = 0;
+ for (k = 0; k < atom0->num_point; k++) {
+ xy[k].x = operation[j * 6] * atom0->xy[k].x + operation[j * 6 +
+ 1] * atom0->xy[k].y + operation[j * 6 + 4] * cryst->a / 2.0 +
+ xtrans;
+ xy[k].y = operation[j * 6 + 2] * atom0->xy[k].x + operation[j *
+ 6 + 3] * atom0->xy[k].y + operation[j * 6 + 5] * cryst->b /
+ 2.0 + ytrans;
+ }
+ xy[atom0->num_point].x = xy[0].x;
+ xy[atom0->num_point].y = xy[0].y;
+ XFillPolygon(display, window, gc, xy, atom0->num_point, Convex,
+ CoordModeOrigin);
+ if (centro[cryst->planegroup] == True) {
+ for (k = 0; k <= atom0->num_point; k++) {
+ xy[k].x = cryst->a - xy[k].x;
+ xy[k].y = cryst->b - xy[k].y;
+ }
+ XFillPolygon(display, window, gc, xy, atom0->num_point, Convex,
+ CoordModeOrigin);
+ }
+ if (primitive[cryst->planegroup] == False) {
+ if (xy[atom0->num_point].x >= cryst->a / 2.0)
+ xtrans = -cryst->a / 2.0;
+ else
+ xtrans = cryst->a / 2.0;
+ if (xy[atom0->num_point].y >= cryst->b / 2.0)
+ ytrans = -cryst->b / 2.0;
+ else
+ ytrans = cryst->b / 2.0;
+ for (k = 0; k <= atom0->num_point; k++) {
+ xy[k].x = xy[k].x + xtrans;
+ xy[k].y = xy[k].y + ytrans;
+ }
+ XFillPolygon(display, window, gc, xy, atom0->num_point, Convex,
+ CoordModeOrigin);
+ if (centro[cryst->planegroup] == True) {
+ XPoint xy1[5];
+
+ for (k = 0; k <= atom0->num_point; k++) {
+ xy1[k].x = cryst->a - xy[k].x;
+ xy1[k].y = cryst->b - xy[k].y;
+ }
+ XFillPolygon(display, window, gc, xy1, atom0->num_point,
+ Convex, CoordModeOrigin);
+ }
+ }
+ }
+}
+
+void
+draw_crystal(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ crystalstruct *cryst;
+ int i;
+
+ XSetFunction(display, gc, GXxor);
+ cryst = &crystals[MI_SCREEN(mi)];
+ for (i = 0; i < cryst->num_atom; i++) {
+ crystalatom *atom0;
+
+ atom0 = &cryst->atom[i];
+ XSetForeground(display, gc, atom0->colour);
+ crystal_drawatom(mi, atom0);
+ atom0->velocity[0] += NRAND(3) - 1;
+ atom0->velocity[0] = MAX(-20, MIN(20, atom0->velocity[0]));
+ atom0->velocity[1] += NRAND(3) - 1;
+ atom0->velocity[1] = MAX(-20, MIN(20, atom0->velocity[1]));
+ atom0->x0 += atom0->velocity[0];
+ if (atom0->x0 < 0)
+ atom0->x0 += cryst->win_width;
+ else if (atom0->x0 >= cryst->win_width)
+ atom0->x0 -= cryst->win_width;
+ atom0->y0 += atom0->velocity[1];
+ if (atom0->y0 < 0)
+ atom0->y0 += cryst->win_height;
+ else if (atom0->y0 >= cryst->win_height)
+ atom0->y0 -= cryst->win_height;
+ atom0->velocity_a += ((float) NRAND(1001) - 500.0) / 2000.0;
+ atom0->angle += atom0->velocity_a;
+ crystal_setupatom(atom0);
+ crystal_drawatom(mi, atom0);
+ }
+ XSetFunction(display, gc, GXcopy);
+}
+
+void
+refresh_crystal(ModeInfo * mi)
+{
+}
+
+void
+release_crystal(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+
+ XClearWindow(display, MI_WINDOW(mi));
+
+ if (crystals != NULL) {
+ int i;
+
+ for (i = 0; i < MI_NUM_SCREENS(mi); i++) {
+ crystalstruct *cryst;
+
+ cryst = &crystals[i];
+ if (cryst->atom != NULL)
+ (void) free((void *) cryst->atom);
+ }
+ (void) free((void *) crystals);
+ crystals = NULL;
+ }
+ XSetFunction(display, gc, GXcopy);
+}
+
+void
+init_crystal(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ crystalstruct *cryst;
+ int i, max_atoms, size_atom;
+
+/* Clear Display */
+ XClearWindow(display, MI_WINDOW(mi));
+ XSetFunction(display, gc, GXxor);
+
+/* initialize */
+ if (crystals == NULL) {
+ if ((crystals = (crystalstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (crystalstruct))) == NULL)
+ return;
+ }
+ cryst = &crystals[MI_SCREEN(mi)];
+ cryst->win_width = MI_WIN_WIDTH(mi);
+ cryst->win_height = MI_WIN_HEIGHT(mi);
+ cryst->a = cryst->win_width;
+ cryst->b = cryst->win_height;
+ cryst->num_atom = MI_BATCHCOUNT(mi);
+ max_atoms = MI_BATCHCOUNT(mi);
+ size_atom = MI_SIZE(mi);
+ if (cryst->num_atom == 0) {
+ cryst->num_atom = DEF_NUM_ATOM;
+ max_atoms = DEF_NUM_ATOM;
+ } else if (cryst->num_atom < 0) {
+ max_atoms = -cryst->num_atom;
+ cryst->num_atom = NRAND(-cryst->num_atom) + 1;
+ }
+ if (cryst->atom == NULL)
+ cryst->atom = (crystalatom *) calloc(max_atoms, sizeof (
+ crystalatom));
+ cryst->planegroup = NRAND(12 /*17 hexagonal groups do not work yet */ );
+ if (MI_WIN_IS_VERBOSE(mi))
+ printf("Selected plane group no %d\n", cryst->planegroup + 1);
+ if (cryst->planegroup > 11)
+ cryst->gamma = 120.0;
+ else
+ cryst->gamma = 90.0;
+ for (i = 0; i < cryst->num_atom; i++) {
+ crystalatom *atom0;
+
+ atom0 = &cryst->atom[i];
+ if (MI_NPIXELS(mi) > 2)
+ atom0->colour = MI_PIXEL(mi, NRAND(MI_NPIXELS(mi)));
+ else
+ atom0->colour = 1; /* Xor'red so WHITE may not be appropriate */
+ XSetForeground(display, gc, atom0->colour);
+ atom0->x0 = NRAND(cryst->win_width);
+ atom0->y0 = NRAND(cryst->win_height);
+ atom0->velocity[0] = NRAND(7) - 3;
+ atom0->velocity[1] = NRAND(7) - 3;
+ atom0->velocity_a = (NRAND(7) - 3) * PI_RAD;
+ atom0->angle = NRAND(90) * PI_RAD;
+ atom0->at_type = NRAND(3);
+ if (size_atom == 0)
+ atom0->size_at = DEF_SIZ_ATOM;
+ else if (size_atom > 0)
+ atom0->size_at = size_atom;
+ else
+ atom0->size_at = NRAND(-size_atom) + 1;
+ if (atom0->at_type == 2)
+ atom0->num_point = 3;
+ else
+ atom0->num_point = 4;
+ crystal_setupatom(atom0);
+ crystal_drawatom(mi, atom0);
+ }
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)daisy.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * daisy.c - flowers for xlock, the X Window System lockscreen.
+ *
+ * Copyright (c) 1996 by David Bagley.
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 07-Aug-96: written. Initially copied forest.c and made continual
+ * refinements, pyro was helpful too. Based on a program
+ * I saw on a PC.
+ *
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Daisy"
+#define HACK_INIT init_daisy
+#define HACK_DRAW draw_daisy
+#define DEF_DELAY 100000
+#define DEF_BATCHCOUNT 300
+#define DEF_CYCLES 350
+#define DEF_NCOLORS 200
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt daisy_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+#define GREEN 21
+#define MINDAISIES 1
+
+#define DROOP 20 /* Percentage x with relation to y */
+#define MINHEIGHT 20 /* Daisy height range */
+#define MAXHEIGHT 40
+
+typedef struct {
+ int width;
+ int height;
+ int time; /* up time */
+ int ndaisies;
+ int meadow_y;
+ float step;
+} daisystruct;
+
+static daisystruct *daisies = NULL;
+
+/* always green, straight for now, parabolic later */
+static void
+drawstem(ModeInfo * mi, XPoint start, XPoint stop)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+
+ if (MI_NPIXELS(mi) > 2)
+ XSetForeground(display, gc, MI_PIXEL(mi, GREEN + 3));
+ else
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+#if 1
+ XDrawLine(display, window, gc, start.x, start.y, stop.x, stop.y);
+#else
+ XDrawArc(display, window, gc, stop.x, stop.y,
+ NRAND(50) + 30, start.y - stop.y + 1, 90 * 64, 170 * 64);
+#endif
+}
+
+/* not green */
+static unsigned long
+drawpetals(ModeInfo * mi, XPoint center,
+ int size, int circles, int delta, int offset, int petals)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ unsigned long colour = 0;
+ float start_angle, inc_angle;
+ XPoint newcenter;
+ int petal, inc;
+ float sine, cosine;
+
+ if (MI_NPIXELS(mi) > GREEN + 7) {
+ do {
+ colour = NRAND(MI_NPIXELS(mi));
+ } while (colour >= GREEN - 7 && colour <= GREEN + 7);
+ }
+ start_angle = NRAND(360) * M_PI / 180;
+ inc_angle = 2 * M_PI / petals;
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ if (size > 2)
+ XFillArc(display, window, gc,
+ center.x - size / 2, center.y - size / 2, size, size,
+ 0, 23040);
+ for (petal = 0; petal < petals; petal++) {
+ sine = SINF(start_angle + petal * inc_angle);
+ cosine = COSF(start_angle + petal * inc_angle);
+ if (size > 2)
+ if (MI_NPIXELS(mi) <= 2) {
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ for (inc = 0; inc < circles; inc++) {
+ newcenter.x = center.x + (int) (sine * (offset + delta * inc));
+ newcenter.y = center.y + (int) (cosine * (offset + delta * inc));
+ XDrawArc(display, window, gc,
+ newcenter.x - size / 2, newcenter.y - size / 2, size, size,
+ 0, 23040);
+ }
+ }
+ if (MI_NPIXELS(mi) > GREEN + 7)
+ XSetForeground(display, gc, MI_PIXEL(mi, colour));
+ else
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+ for (inc = 0; inc < circles; inc++) {
+ newcenter.x = center.x + (int) (sine * (offset + delta * inc));
+ newcenter.y = center.y + (int) (cosine * (offset + delta * inc));
+ if (size < 2)
+ XDrawPoint(display, window, gc, newcenter.x, newcenter.y);
+ else
+ XFillArc(display, window, gc,
+ newcenter.x - size / 2, newcenter.y - size / 2, size, size,
+ 0, 23040);
+ }
+ }
+ return colour;
+}
+
+/* not green */
+static void
+drawcenter(ModeInfo * mi, XPoint center, int size, unsigned long petalcolour)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ unsigned long colour;
+
+ if (MI_NPIXELS(mi) > GREEN + 7) {
+ do {
+ /* Insure good contrast */
+ colour = (NRAND(2 * MI_NPIXELS(mi) / 3) + petalcolour +
+ MI_NPIXELS(mi) / 6) % MI_NPIXELS(mi);
+ } while (colour >= GREEN - 7 && colour <= GREEN + 7);
+ XSetForeground(display, gc, MI_PIXEL(mi, colour));
+ } else
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ if (size < 2)
+ XDrawPoint(display, window, gc, center.x, center.y);
+ else
+ XFillArc(display, window, gc,
+ center.x - size / 2, center.y - size / 2, size, size, 0, 23040);
+}
+
+static void
+drawdaisy(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ daisystruct *dp = &daisies[MI_SCREEN(mi)];
+ XPoint stem_start, stem_stop;
+ int height, droop;
+ unsigned long colour;
+
+ /* Care more about the flower being on the screen rather than the stem */
+#ifdef LINEAR
+ stem_stop.y = dp->meadow_y + dp->time * dp->step;
+ height = (NRAND(MAXHEIGHT - MINHEIGHT + 1) + MINHEIGHT) * dp->height / 300 *
+ 2 * (dp->time + 20) / (dp->ndaisies + 20);
+#else
+ stem_stop.y = dp->meadow_y + (int) ((float) dp->time * dp->time *
+ dp->step / dp->ndaisies);
+ height = (NRAND(MAXHEIGHT - MINHEIGHT + 1) + MINHEIGHT) * dp->height / 300 *
+ 2 * (dp->time * dp->time + 1) / (dp->ndaisies * dp->ndaisies + 1);
+#endif
+ stem_start.y = stem_stop.y + height;
+#ifdef GARDEN
+ stem_stop.x = ((LRAND() & 1) ? 1 : -1) *
+ NRAND(dp->width / 4 * (dp->time + 1) / (dp->ndaisies + 20) +
+ dp->width / 4) + dp->width / 2;
+#else /* MEADOW */
+ stem_stop.x = NRAND(dp->width);
+#endif
+ /* Give about droop left or right with 25% randomness */
+ droop = ((LRAND() & 1) ? 1 : -1) * DROOP * (NRAND(50) + 75) / 100;
+ stem_start.x = stem_stop.x + droop * height / 100;
+ XSetLineAttributes(display, gc, height / 24 + 1,
+ LineSolid, CapNotLast, JoinRound);
+ drawstem(mi, stem_start, stem_stop);
+ XSetLineAttributes(display, gc, 1, LineSolid, CapNotLast, JoinRound);
+ colour = drawpetals(mi, stem_stop, height / 6, 5, height / 32 + 1,
+ height / 7, NRAND(6) + 6);
+ drawcenter(mi, stem_stop, height / 7, colour);
+}
+
+
+void
+init_daisy(ModeInfo * mi)
+{
+ daisystruct *dp;
+
+ if (daisies == NULL) {
+ if ((daisies = (daisystruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (daisystruct))) == NULL)
+ return;
+ }
+ dp = &daisies[MI_SCREEN(mi)];
+
+ dp->width = MI_WIN_WIDTH(mi);
+ dp->height = MI_WIN_HEIGHT(mi);
+ dp->time = 0;
+
+ dp->ndaisies = MI_BATCHCOUNT(mi);
+ if (dp->ndaisies < -MINDAISIES)
+ dp->ndaisies = NRAND(-dp->ndaisies - MINDAISIES + 1) + MINDAISIES;
+ else if (dp->ndaisies < MINDAISIES)
+ dp->ndaisies = MINDAISIES;
+ dp->meadow_y = dp->height / 5;
+ dp->step = (float) (dp->height - 2 * dp->meadow_y) / (dp->ndaisies + 1.0);
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+}
+
+void
+draw_daisy(ModeInfo * mi)
+{
+ daisystruct *dp = &daisies[MI_SCREEN(mi)];
+
+ if (dp->time < dp->ndaisies)
+ drawdaisy(mi);
+ if (++dp->time > MI_CYCLES(mi))
+ init_daisy(mi);
+}
+
+void
+release_daisy(ModeInfo * mi)
+{
+ if (daisies != NULL) {
+ (void) free((void *) daisies);
+ daisies = NULL;
+ }
+}
+
+void
+refresh_daisy(ModeInfo * mi)
+{
+ daisystruct *dp = &daisies[MI_SCREEN(mi)];
+
+ if (dp->time < dp->ndaisies)
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+ else
+ init_daisy(mi);
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)dclock.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * dclock.c - floating digital clock screen for xlock,
+ * the X Window System lockscreen.
+ *
+ * Copyright (C) 1995 by Michael Stembera <mrbig@fc.net>.
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 29-Aug-95: Written.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Dclock"
+#define HACK_INIT init_dclock
+#define HACK_DRAW draw_dclock
+#define DEF_DELAY 10000
+#define DEF_CYCLES 10000
+#define BRIGHT_COLORS
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt dclock_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+#include <time.h>
+
+#define font_height(f) (f->ascent + f->descent)
+
+extern XFontStruct *getFont(Display * display);
+
+typedef struct {
+ int color;
+ short height, width;
+ char *str, str1[20], str2[20], str1old[40], str2old[40];
+ char *str1pta, *str2pta, *str1ptb, *str2ptb;
+ time_t timenew, timeold;
+ short maxx, maxy, clockx, clocky;
+ short text_height, text_width, cent_offset;
+ short hour;
+ short dx, dy;
+ int done;
+ int pixw, pixh;
+ Pixmap pixmap;
+ GC fgGC, bgGC;
+} dclockstruct;
+
+static dclockstruct *dclocks = NULL;
+
+static XFontStruct *mode_font = None;
+
+static void
+drawDclock(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ dclockstruct *dp = &dclocks[MI_SCREEN(mi)];
+ short xold, yold;
+ char *tmppt;
+
+ xold = dp->clockx;
+ yold = dp->clocky;
+ dp->clockx += dp->dx;
+ dp->clocky += dp->dy;
+
+ if (dp->maxx < dp->cent_offset) {
+ if (dp->clockx < dp->maxx + dp->cent_offset ||
+ dp->clockx > dp->cent_offset) {
+ dp->dx = -dp->dx;
+ dp->clockx += dp->dx;
+ }
+ } else if (dp->maxx > dp->cent_offset) {
+ if (dp->clockx > dp->maxx + dp->cent_offset ||
+ dp->clockx < dp->cent_offset) {
+ dp->dx = -dp->dx;
+ dp->clockx += dp->dx;
+ }
+ }
+ if (dp->maxy < mode_font->ascent) {
+ if (dp->clocky > mode_font->ascent || dp->clocky < dp->maxy) {
+ dp->dy = -dp->dy;
+ dp->clocky += dp->dy;
+ }
+ } else if (dp->maxy > mode_font->ascent) {
+ if (dp->clocky > dp->maxy || dp->clocky < mode_font->ascent) {
+ dp->dy = -dp->dy;
+ dp->clocky += dp->dy;
+ }
+ }
+ if (dp->timeold != (dp->timenew = time((time_t *) NULL))) {
+ /* only parse if time has changed */
+ dp->timeold = dp->timenew;
+ dp->str = ctime(&dp->timeold);
+
+ /* keep last disp time so it can be cleared even if it changed */
+ tmppt = dp->str1ptb;
+ dp->str1ptb = dp->str1pta;
+ dp->str1pta = tmppt;
+ tmppt = dp->str2ptb;
+ dp->str2ptb = dp->str2pta;
+ dp->str2pta = tmppt;
+
+ /* copy the hours portion for 24 to 12 hr conversion */
+ (void) strncpy(dp->str1pta, (dp->str + 11), 8);
+ dp->hour = (short) (dp->str1pta[0] - 48) * 10 +
+ (short) (dp->str1pta[1] - 48);
+ if (dp->hour > 12) {
+ dp->hour -= 12;
+ (void) strcpy(dp->str1pta + 8, " PM");
+ } else {
+ if (dp->hour == 0)
+ dp->hour += 12;
+ (void) strcpy(dp->str1pta + 8, " AM");
+ }
+ dp->str1pta[0] = (dp->hour / 10) + 48;
+ dp->str1pta[1] = (dp->hour % 10) + 48;
+ if (dp->str1pta[0] == '0')
+ dp->str1pta[0] = ' ';
+
+ /* copy day month */
+ (void) strncpy(dp->str2pta, dp->str, 11);
+ /* copy year */
+ (void) strncpy(dp->str2pta + 11, (dp->str + 20), 4);
+ }
+ if (dp->pixw != dp->text_width || dp->pixh != 2 * dp->text_height) {
+ XGCValues gcv;
+
+ if (dp->fgGC)
+ XFreeGC(display, dp->fgGC);
+ if (dp->bgGC)
+ XFreeGC(display, dp->bgGC);
+ if (dp->pixmap) {
+ XFreePixmap(display, dp->pixmap);
+ XClearWindow(display, window);
+ }
+ dp->pixw = dp->text_width;
+ dp->pixh = 2 * dp->text_height;
+ dp->pixmap = XCreatePixmap(display, window, dp->pixw, dp->pixh, 1);
+ gcv.font = mode_font->fid;
+ gcv.background = 0;
+ gcv.foreground = 1;
+ dp->fgGC = XCreateGC(display, dp->pixmap,
+ GCForeground | GCBackground | GCFont, &gcv);
+ gcv.foreground = 0;
+ dp->bgGC = XCreateGC(display, dp->pixmap,
+ GCForeground | GCBackground | GCFont, &gcv);
+ }
+ XFillRectangle(display, dp->pixmap, dp->bgGC, 0, 0, dp->pixw, dp->pixh);
+
+ XDrawString(display, dp->pixmap, dp->fgGC,
+ dp->cent_offset, mode_font->ascent,
+ dp->str1pta, strlen(dp->str1pta));
+ XDrawString(display, dp->pixmap, dp->fgGC,
+ 0, mode_font->ascent + dp->text_height,
+ dp->str2pta, strlen(dp->str2pta));
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ /* This could leave screen dust on the screen if the width changes
+ But that only happens once a day...
+ ... this is solved by the ClearWindow above
+ */
+ ERASE_IMAGE(display, window, gc,
+ (dp->clockx - dp->cent_offset), (dp->clocky - mode_font->ascent),
+ (xold - dp->cent_offset), (yold - mode_font->ascent),
+ dp->pixw, dp->pixh);
+ if (MI_NPIXELS(mi) > 2)
+ XSetForeground(display, gc, MI_PIXEL(mi, dp->color));
+ else
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+ XCopyPlane(display, dp->pixmap, window, gc,
+ 0, 0, dp->text_width, 2 * dp->text_height,
+ dp->clockx - dp->cent_offset, dp->clocky - mode_font->ascent,
+ 1L);
+}
+
+void
+init_dclock(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ dclockstruct *dp;
+
+ if (dclocks == NULL) {
+ if ((dclocks = (dclockstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (dclockstruct))) == NULL)
+ return;
+ }
+ dp = &dclocks[MI_SCREEN(mi)];
+
+ dp->width = MI_WIN_WIDTH(mi);
+ dp->height = MI_WIN_HEIGHT(mi);
+
+ XClearWindow(display, MI_WINDOW(mi));
+
+ if (mode_font == None)
+ mode_font = getFont(display);
+ if (!dp->done) {
+ dp->done = 1;
+ if (mode_font != None)
+ XSetFont(display, MI_GC(mi), mode_font->fid);
+ }
+ /* (void)time(&dp->timenew); */
+ dp->timeold = dp->timenew = time((time_t *) NULL);
+ dp->str = ctime(&dp->timeold);
+ dp->dx = (LRAND() & 1) ? 1 : -1;
+ dp->dy = (LRAND() & 1) ? 1 : -1;
+
+ (void) strncpy(dp->str1, (dp->str + 11), 8);
+ dp->hour = (short) (dp->str1[0] - 48) * 10 + (short) (dp->str1[1] - 48);
+ if (dp->hour > 12) {
+ dp->hour -= 12;
+ (void) strcpy(dp->str1 + 8, " PM");
+ } else {
+ if (dp->hour == 0)
+ dp->hour += 12;
+ (void) strcpy(dp->str1 + 8, " AM");
+ }
+ dp->str1[0] = (dp->hour / 10) + 48;
+ dp->str1[1] = (dp->hour % 10) + 48;
+ if (dp->str1[0] == '0')
+ dp->str1[0] = ' ';
+ dp->str1[11] = 0; /* terminate dp->str1 */
+ dp->str1old[11] = 0; /* terminate dp->str1old */
+
+ (void) strncpy(dp->str2, dp->str, 11);
+ (void) strncpy(dp->str2 + 11, (dp->str + 20), 4);
+ dp->str2[15] = 0; /* terminate dp->str2 */
+ dp->str2old[15] = 0; /* terminate dp->str2old */
+
+ dp->text_height = font_height(mode_font);
+ dp->text_width = XTextWidth(mode_font, dp->str2, strlen(dp->str2));
+ dp->cent_offset = (dp->text_width -
+ XTextWidth(mode_font, dp->str1, strlen(dp->str1))) / 2;
+ dp->maxx = dp->width - dp->text_width;
+ dp->maxy = dp->height - dp->text_height - mode_font->descent;
+ if (dp->maxx == 0)
+ dp->clockx = dp->cent_offset;
+ else if (dp->maxx < 0)
+ dp->clockx = -NRAND(-dp->maxx) + dp->cent_offset;
+ else
+ dp->clockx = NRAND(dp->maxx) + dp->cent_offset;
+ if (dp->maxy - mode_font->ascent == 0)
+ dp->clocky = mode_font->ascent;
+ else if (dp->maxy - mode_font->ascent < 0)
+ dp->clocky = -NRAND(mode_font->ascent - dp->maxy) + mode_font->ascent;
+ else
+ dp->clocky = NRAND(dp->maxy - mode_font->ascent) + mode_font->ascent;
+
+ dp->str1pta = dp->str1;
+ dp->str2pta = dp->str2;
+ dp->str1ptb = dp->str1old;
+ dp->str2ptb = dp->str2old;
+
+ if (MI_NPIXELS(mi) > 2)
+ dp->color = NRAND(MI_NPIXELS(mi));
+}
+
+void
+draw_dclock(ModeInfo * mi)
+{
+ dclockstruct *dp = &dclocks[MI_SCREEN(mi)];
+
+ drawDclock(mi);
+ if (MI_NPIXELS(mi) > 2) {
+ if (++dp->color >= MI_NPIXELS(mi))
+ dp->color = 0;
+ }
+}
+
+void
+release_dclock(ModeInfo * mi)
+{
+ if (dclocks != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ dclockstruct *dp = &dclocks[screen];
+ Display *display = MI_DISPLAY(mi);
+
+ if (dp->fgGC)
+ XFreeGC(display, dp->fgGC);
+ if (dp->bgGC)
+ XFreeGC(display, dp->bgGC);
+ if (dp->pixmap)
+ XFreePixmap(display, dp->pixmap);
+
+ }
+ (void) free((void *) dclocks);
+ dclocks = NULL;
+ }
+ if (mode_font != None) {
+ XFreeFont(MI_DISPLAY(mi), mode_font);
+ mode_font = None;
+ }
+}
+
+void
+refresh_dclock(ModeInfo * mi)
+{
+ /* Do nothing, it will refresh by itself */
+}
--- /dev/null
+
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)demon.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * demon.c - David Griffeath's cellular automata for xlock,
+ * the X Window System lockscreen.
+ *
+ * Copyright (c) 1995 by David Bagley.
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 16-Apr-97: -neighbors 3, 9 (not sound mathematically), 12, and 8 added
+ * 30-May-96: Ron Hitchens <ron@idiom.com>
+ * Fixed memory management that caused leaks
+ * 14-Apr-96: -neighbors 6 runtime-time option added
+ * 21-Aug-95: Coded from A.K. Dewdney's "Computer Recreations", Scientific
+ * American Magazine" Aug 1989 pp 102-105.
+ * also used life.c as a guide.
+ */
+
+/*-
+ * A cellular universe of 4 phases debris, droplets, defects, and demons.
+ */
+
+/*-
+ Grid Number of Neigbors
+ ---- ------------------
+ Square 4 or 8
+ Hexagon 6
+ Triangle 3, 9, or 12
+*/
+
+#ifdef STANDALONE
+#define PROGCLASS "Demon"
+#define HACK_INIT init_demon
+#define HACK_DRAW draw_demon
+#define DEF_DELAY 50000
+#define DEF_BATCHCOUNT 0
+#define DEF_CYCLES 1000
+#define DEF_SIZE -7
+#define DEF_NCOLORS 200
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt demon_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+extern int neighbors;
+
+#define REDRAWSTEP 2000 /* How many cells to draw per cycle */
+#define MINSTATES 2
+#define MINGRIDSIZE 24
+#define MINSIZE 4
+#define NEIGHBORKINDS 6
+
+/* Singly linked list */
+typedef struct _DemonList {
+ XPoint pt;
+ struct _DemonList *next;
+} DemonList;
+
+typedef struct {
+ int generation;
+ int xs, ys;
+ int xb, yb;
+ int nrows, ncols;
+ int width, height;
+ int states;
+ int state;
+ int redrawing, redrawpos;
+ int *ncells;
+ DemonList **demonlist;
+ unsigned char *oldcell, *newcell;
+ int neighbors;
+ XPoint hexagonList[6];
+ XPoint triangleList[2][3];
+} demonstruct;
+
+static int initVal[2][NEIGHBORKINDS] =
+{
+ {3, 4, 6, 8, 9, 12}, /* Neighborhoods */
+ {12, 16, 18, 20, 22, 24} /* Number of states */
+};
+
+static demonstruct *demons = NULL;
+
+static void
+drawcell(ModeInfo * mi, int col, int row, unsigned char state)
+{
+ demonstruct *dp = &demons[MI_SCREEN(mi)];
+
+ if (!state)
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WIN_BLACK_PIXEL(mi));
+ else if (MI_NPIXELS(mi) > 2)
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi),
+ MI_PIXEL(mi, (((int) state - 1) * MI_NPIXELS(mi) /
+ (dp->states - 1)) % MI_NPIXELS(mi)));
+ else
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), (state % 2) ?
+ MI_WIN_WHITE_PIXEL(mi) : MI_WIN_BLACK_PIXEL(mi));
+ if (dp->neighbors == 6) {
+ int ccol = 2 * col + !(row & 1), crow = 2 * row;
+
+ dp->hexagonList[0].x = dp->xb + ccol * dp->xs;
+ dp->hexagonList[0].y = dp->yb + crow * dp->ys;
+ if (dp->xs == 1 && dp->ys == 1)
+ XFillRectangle(MI_DISPLAY(mi), MI_WINDOW(mi),
+ MI_GC(mi), dp->hexagonList[0].x, dp->hexagonList[0].y, 1, 1);
+ else
+ XFillPolygon(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ dp->hexagonList, 6, Convex, CoordModePrevious);
+ } else if (dp->neighbors == 4 || dp->neighbors == 8) {
+ XFillRectangle(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ dp->xb + dp->xs * col, dp->yb + dp->ys * row, dp->xs, dp->ys);
+ } else { /* TRI */
+ int orient = (col + row) % 2; /* O left 1 right */
+
+ dp->triangleList[orient][0].x = dp->xb + col * dp->xs;
+ dp->triangleList[orient][0].y = dp->yb + row * dp->ys;
+ if (dp->xs <= 3 || dp->ys <= 3)
+ XFillRectangle(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ ((orient) ? -1 : 1) + dp->triangleList[orient][0].x,
+ dp->triangleList[orient][0].y, 1, 1);
+ else {
+ if (orient)
+ dp->triangleList[orient][0].x += (dp->xs / 2 - 1);
+ else
+ dp->triangleList[orient][0].x -= (dp->xs / 2 - 1);
+ XFillPolygon(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ dp->triangleList[orient], 3, Convex, CoordModePrevious);
+
+ }
+ }
+}
+
+static void
+addtolist(ModeInfo * mi, int col, int row, unsigned char state)
+{
+ demonstruct *dp = &demons[MI_SCREEN(mi)];
+ DemonList *current;
+
+ current = dp->demonlist[state];
+ dp->demonlist[state] = (DemonList *) malloc(sizeof (DemonList));
+ dp->demonlist[state]->pt.x = col;
+ dp->demonlist[state]->pt.y = row;
+ dp->demonlist[state]->next = current;
+ dp->ncells[state]++;
+}
+
+#ifdef DEBUG
+static void
+print_state(ModeInfo * mi, int state)
+{
+ demonstruct *dp = &demons[MI_SCREEN(mi)];
+ DemonList *locallist;
+ int i = 0;
+
+ locallist = dp->demonlist[state];
+ (void) printf("state %d\n", state);
+ while (locallist) {
+ (void) printf("%d x %d, y %d\n", i,
+ locallist->pt.x, locallist->pt.y);
+ locallist = locallist->next;
+ i++;
+ }
+}
+
+#endif
+
+static void
+free_state(demonstruct * dp, int state)
+{
+ DemonList *current;
+
+ while (dp->demonlist[state]) {
+ current = dp->demonlist[state];
+ dp->demonlist[state] = dp->demonlist[state]->next;
+ (void) free((void *) current);
+ }
+ dp->demonlist[state] = NULL;
+ if (dp->ncells)
+ dp->ncells[state] = 0;
+}
+
+
+static void
+free_list(demonstruct * dp)
+{
+ int state;
+
+ for (state = 0; state < dp->states; state++)
+ free_state(dp, state);
+ (void) free((void *) dp->demonlist);
+ dp->demonlist = NULL;
+}
+
+static void
+free_struct(demonstruct * dp)
+{
+ if (dp->demonlist != NULL) {
+ free_list(dp);
+ }
+ if (dp->ncells != NULL) {
+ (void) free((void *) dp->ncells);
+ dp->ncells = NULL;
+ }
+ if (dp->oldcell != NULL) {
+ (void) free((void *) dp->oldcell);
+ dp->oldcell = NULL;
+ }
+ if (dp->newcell != NULL) {
+ (void) free((void *) dp->newcell);
+ dp->newcell = NULL;
+ }
+}
+
+static void
+draw_state(ModeInfo * mi, int state)
+{
+ demonstruct *dp = &demons[MI_SCREEN(mi)];
+ XRectangle *rects;
+ DemonList *current;
+
+ if (!state)
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WIN_BLACK_PIXEL(mi));
+ else if (MI_NPIXELS(mi) > 2)
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi),
+ MI_PIXEL(mi, (((int) state - 1) * MI_NPIXELS(mi) /
+ (dp->states - 1)) % MI_NPIXELS(mi)));
+ else
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), (state % 2) ?
+ MI_WIN_WHITE_PIXEL(mi) : MI_WIN_BLACK_PIXEL(mi));
+
+ if (dp->neighbors == 6) { /*Draw right away, slow */
+ current = dp->demonlist[state];
+ while (current) {
+ int col, row, ccol, crow;
+
+ col = current->pt.x;
+ row = current->pt.y;
+ ccol = 2 * col + !(row & 1), crow = 2 * row;
+ dp->hexagonList[0].x = dp->xb + ccol * dp->xs;
+ dp->hexagonList[0].y = dp->yb + crow * dp->ys;
+ if (dp->xs == 1 && dp->ys == 1)
+ XFillRectangle(MI_DISPLAY(mi), MI_WINDOW(mi),
+ MI_GC(mi), dp->hexagonList[0].x, dp->hexagonList[0].y, 1, 1);
+ else
+ XFillPolygon(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ dp->hexagonList, 6, Convex, CoordModePrevious);
+ current = current->next;
+ }
+ } else if (dp->neighbors == 4 || dp->neighbors == 8) {
+ /* Take advantage of XDrawRectangles */
+ int ncells;
+
+ /* Create Rectangle list from part of the demonlist */
+ rects = (XRectangle *) malloc(dp->ncells[state] * sizeof (XRectangle));
+ ncells = 0;
+ current = dp->demonlist[state];
+ while (current) {
+ rects[ncells].x = dp->xb + current->pt.x * dp->xs;
+ rects[ncells].y = dp->yb + current->pt.y * dp->ys;
+ rects[ncells].width = dp->xs;
+ rects[ncells].height = dp->ys;
+ current = current->next;
+ ncells++;
+ }
+ /* Finally get to draw */
+ XFillRectangles(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), rects, ncells);
+ /* Free up rects list and the appropriate part of the demonlist */
+ (void) free((void *) rects);
+ } else { /* TRI */
+ current = dp->demonlist[state];
+ while (current) {
+ int col, row, orient;
+
+ col = current->pt.x;
+ row = current->pt.y;
+ orient = (col + row) % 2; /* O left 1 right */
+ dp->triangleList[orient][0].x = dp->xb + col * dp->xs;
+ dp->triangleList[orient][0].y = dp->yb + row * dp->ys;
+ if (dp->xs <= 3 || dp->ys <= 3)
+ XFillRectangle(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ ((orient) ? -1 : 1) + dp->triangleList[orient][0].x,
+ dp->triangleList[orient][0].y, 1, 1);
+ else {
+ if (orient)
+ dp->triangleList[orient][0].x += (dp->xs / 2 - 1);
+ else
+ dp->triangleList[orient][0].x -= (dp->xs / 2 - 1);
+ XFillPolygon(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ dp->triangleList[orient], 3, Convex, CoordModePrevious);
+ }
+ current = current->next;
+ }
+ }
+ free_state(dp, state);
+ XFlush(MI_DISPLAY(mi));
+}
+
+static void
+RandomSoup(ModeInfo * mi)
+{
+ demonstruct *dp = &demons[MI_SCREEN(mi)];
+ int row, col, mrow = 0;
+
+ for (row = 0; row < dp->nrows; ++row) {
+ for (col = 0; col < dp->ncols; ++col) {
+ dp->oldcell[col + mrow] =
+ (unsigned char) LRAND() % ((unsigned char) dp->states);
+ addtolist(mi, col, row, dp->oldcell[col + mrow]);
+ }
+ mrow += dp->ncols;
+ }
+}
+
+void
+init_demon(ModeInfo * mi)
+{
+ int size = MI_SIZE(mi), nk;
+ demonstruct *dp;
+
+ if (demons == NULL) {
+ if ((demons = (demonstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (demonstruct))) == NULL)
+ return;
+ }
+ dp = &demons[MI_SCREEN(mi)];
+ dp->generation = 0;
+ dp->redrawing = 0;
+ free_struct(dp);
+
+ for (nk = 0; nk < NEIGHBORKINDS; nk++) {
+ if (neighbors == initVal[0][nk]) {
+ dp->neighbors = initVal[0][nk];
+ break;
+ }
+ if (nk == NEIGHBORKINDS - 1) {
+ nk = NRAND(NEIGHBORKINDS);
+ dp->neighbors = initVal[0][nk];
+ break;
+ }
+ }
+
+ dp->states = MI_BATCHCOUNT(mi);
+ if (dp->states < -MINSTATES)
+ dp->states = NRAND(-dp->states - MINSTATES + 1) + MINSTATES;
+ else if (dp->states < MINSTATES)
+ dp->states = initVal[1][nk];
+ if (dp->states > NUMCOLORS)
+ dp->states = NUMCOLORS;
+ dp->demonlist = (DemonList **) calloc(dp->states, sizeof (DemonList *));
+ dp->ncells = (int *) calloc(dp->states, sizeof (int));
+
+ dp->state = 0;
+
+ dp->width = MI_WIN_WIDTH(mi);
+ dp->height = MI_WIN_HEIGHT(mi);
+
+ if (dp->neighbors == 6) {
+ int nccols, ncrows, i;
+
+ if (dp->width < 2)
+ dp->width = 2;
+ if (dp->height < 4)
+ dp->height = 4;
+ if (size < -MINSIZE)
+ dp->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(dp->width, dp->height) /
+ MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE) {
+ if (!size)
+ dp->ys = MAX(MINSIZE, MIN(dp->width, dp->height) / MINGRIDSIZE);
+ else
+ dp->ys = MINSIZE;
+ } else
+ dp->ys = MIN(size, MAX(MINSIZE, MIN(dp->width, dp->height) /
+ MINGRIDSIZE));
+ dp->xs = dp->ys;
+ nccols = MAX(dp->width / dp->xs - 2, 2);
+ ncrows = MAX(dp->height / dp->ys - 1, 2);
+ dp->ncols = nccols / 2;
+ dp->nrows = 2 * (ncrows / 4);
+ dp->xb = (dp->width - dp->xs * nccols) / 2 + dp->xs / 2;
+ dp->yb = (dp->height - dp->ys * (ncrows / 2) * 2) / 2 + dp->ys;
+ for (i = 0; i < 6; i++) {
+ dp->hexagonList[i].x = (dp->xs - 1) * hexagonUnit[i].x;
+ dp->hexagonList[i].y = ((dp->ys - 1) * hexagonUnit[i].y / 2) * 4 / 3;
+ }
+ } else if (dp->neighbors == 4 || dp->neighbors == 8) {
+ if (size < -MINSIZE)
+ dp->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(dp->width, dp->height) /
+ MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE) {
+ if (!size)
+ dp->ys = MAX(MINSIZE, MIN(dp->width, dp->height) / MINGRIDSIZE);
+ else
+ dp->ys = MINSIZE;
+ } else
+ dp->ys = MIN(size, MAX(MINSIZE, MIN(dp->width, dp->height) /
+ MINGRIDSIZE));
+ dp->xs = dp->ys;
+ dp->ncols = MAX(dp->width / dp->xs, 2);
+ dp->nrows = MAX(dp->height / dp->ys, 2);
+ dp->xb = (dp->width - dp->xs * dp->ncols) / 2;
+ dp->yb = (dp->height - dp->ys * dp->nrows) / 2;
+ } else { /* TRI */
+ int orient, i;
+
+ if (dp->width < 2)
+ dp->width = 2;
+ if (dp->height < 2)
+ dp->height = 2;
+ if (size < -MINSIZE)
+ dp->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(dp->width, dp->height) /
+ MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE) {
+ if (!size)
+ dp->ys = MAX(MINSIZE, MIN(dp->width, dp->height) / MINGRIDSIZE);
+ else
+ dp->ys = MINSIZE;
+ } else
+ dp->ys = MIN(size, MAX(MINSIZE, MIN(dp->width, dp->height) /
+ MINGRIDSIZE));
+ dp->xs = (int) (1.52 * dp->ys);
+ dp->ncols = (MAX(dp->width / dp->xs - 1, 2) / 2) * 2;
+ dp->nrows = (MAX(dp->height / dp->ys - 1, 2) / 2) * 2;
+ dp->xb = (dp->width - dp->xs * dp->ncols) / 2 + dp->xs / 2;
+ dp->yb = (dp->height - dp->ys * dp->nrows) / 2 + dp->ys / 2;
+ for (orient = 0; orient < 2; orient++) {
+ for (i = 0; i < 3; i++) {
+ dp->triangleList[orient][i].x =
+ (dp->xs - 2) * triangleUnit[orient][i].x;
+ dp->triangleList[orient][i].y =
+ (dp->ys - 2) * triangleUnit[orient][i].y;
+ }
+ }
+ }
+
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+
+ dp->oldcell = (unsigned char *)
+ malloc(dp->ncols * dp->nrows * sizeof (unsigned char));
+
+ dp->newcell = (unsigned char *)
+ malloc(dp->ncols * dp->nrows * sizeof (unsigned char));
+
+ RandomSoup(mi);
+}
+
+void
+draw_demon(ModeInfo * mi)
+{
+ demonstruct *dp = &demons[MI_SCREEN(mi)];
+ int i, j, k, l, mj = 0, ml;
+
+ if (dp->state >= dp->states) {
+ (void) memcpy((char *) dp->newcell, (char *) dp->oldcell,
+ dp->ncols * dp->nrows * sizeof (unsigned char));
+
+ if (dp->neighbors == 6) {
+ for (j = 0; j < dp->nrows; j++) {
+ for (i = 0; i < dp->ncols; i++) {
+ /* NE */
+ if (!(j & 1))
+ k = (i + 1 == dp->ncols) ? 0 : i + 1;
+ else
+ k = i;
+ l = (!j) ? dp->nrows - 1 : j - 1;
+ ml = l * dp->ncols;
+ if (dp->oldcell[k + ml] ==
+ (int) (dp->oldcell[i + mj] + 1) % dp->states)
+ dp->newcell[i + mj] = dp->oldcell[k + ml];
+ /* E */
+ k = (i + 1 == dp->ncols) ? 0 : i + 1;
+ l = j;
+ ml = mj;
+ if (dp->oldcell[k + ml] ==
+ (int) (dp->oldcell[i + mj] + 1) % dp->states)
+ dp->newcell[i + mj] = dp->oldcell[k + ml];
+ /* SE */
+ if (!(j & 1))
+ k = (i + 1 == dp->ncols) ? 0 : i + 1;
+ else
+ k = i;
+ l = (j + 1 == dp->nrows) ? 0 : j + 1;
+ ml = l * dp->ncols;
+ if (dp->oldcell[k + ml] ==
+ (int) (dp->oldcell[i + mj] + 1) % dp->states)
+ dp->newcell[i + mj] = dp->oldcell[k + ml];
+ /* SW */
+ if (j & 1)
+ k = (!i) ? dp->ncols - 1 : i - 1;
+ else
+ k = i;
+ l = (j + 1 == dp->nrows) ? 0 : j + 1;
+ ml = l * dp->ncols;
+ if (dp->oldcell[k + ml] ==
+ (int) (dp->oldcell[i + mj] + 1) % dp->states)
+ dp->newcell[i + mj] = dp->oldcell[k + ml];
+ /* W */
+ k = (!i) ? dp->ncols - 1 : i - 1;
+ l = j;
+ ml = mj;
+ if (dp->oldcell[k + ml] ==
+ (int) (dp->oldcell[i + mj] + 1) % dp->states)
+ dp->newcell[i + mj] = dp->oldcell[k + ml];
+ /* NW */
+ if (j & 1)
+ k = (!i) ? dp->ncols - 1 : i - 1;
+ else
+ k = i;
+ l = (!j) ? dp->nrows - 1 : j - 1;
+ ml = l * dp->ncols;
+ if (dp->oldcell[k + ml] ==
+ (int) (dp->oldcell[i + mj] + 1) % dp->states)
+ dp->newcell[i + mj] = dp->oldcell[k + ml];
+ }
+ mj += dp->ncols;
+ }
+ } else if (dp->neighbors == 4 || dp->neighbors == 8) {
+ for (j = 0; j < dp->nrows; j++) {
+ for (i = 0; i < dp->ncols; i++) {
+ /* N */
+ k = i;
+ l = (!j) ? dp->nrows - 1 : j - 1;
+ ml = l * dp->ncols;
+ if (dp->oldcell[k + ml] ==
+ (int) (dp->oldcell[i + mj] + 1) % dp->states)
+ dp->newcell[i + mj] = dp->oldcell[k + ml];
+ /* E */
+ k = (i + 1 == dp->ncols) ? 0 : i + 1;
+ l = j;
+ ml = mj;
+ if (dp->oldcell[k + ml] ==
+ (int) (dp->oldcell[i + mj] + 1) % dp->states)
+ dp->newcell[i + mj] = dp->oldcell[k + ml];
+ /* S */
+ k = i;
+ l = (j + 1 == dp->nrows) ? 0 : j + 1;
+ ml = l * dp->ncols;
+ if (dp->oldcell[k + ml] ==
+ (int) (dp->oldcell[i + mj] + 1) % dp->states)
+ dp->newcell[i + mj] = dp->oldcell[k + ml];
+ /* W */
+ k = (!i) ? dp->ncols - 1 : i - 1;
+ l = j;
+ ml = mj;
+ if (dp->oldcell[k + ml] ==
+ (int) (dp->oldcell[i + mj] + 1) % dp->states)
+ dp->newcell[i + mj] = dp->oldcell[k + ml];
+ }
+ mj += dp->ncols;
+ }
+ if (dp->neighbors == 8) {
+ mj = 0;
+ for (j = 0; j < dp->nrows; j++) {
+ for (i = 0; i < dp->ncols; i++) {
+ /* NE */
+ k = (i + 1 == dp->ncols) ? 0 : i + 1;
+ l = (!j) ? dp->nrows - 1 : j - 1;
+ ml = l * dp->ncols;
+ if (dp->oldcell[k + ml] ==
+ (int) (dp->oldcell[i + mj] + 1) % dp->states)
+ dp->newcell[i + mj] = dp->oldcell[k + ml];
+ /* SE */
+ k = (i + 1 == dp->ncols) ? 0 : i + 1;
+ l = (j + 1 == dp->nrows) ? 0 : j + 1;
+ ml = l * dp->ncols;
+ if (dp->oldcell[k + ml] ==
+ (int) (dp->oldcell[i + mj] + 1) % dp->states)
+ dp->newcell[i + mj] = dp->oldcell[k + ml];
+ /* SW */
+ k = (!i) ? dp->ncols - 1 : i - 1;
+ l = (j + 1 == dp->nrows) ? 0 : j + 1;
+ ml = l * dp->ncols;
+ if (dp->oldcell[k + ml] ==
+ (int) (dp->oldcell[i + mj] + 1) % dp->states)
+ dp->newcell[i + mj] = dp->oldcell[k + ml];
+ /* NW */
+ k = (!i) ? dp->ncols - 1 : i - 1;
+ l = (!j) ? dp->nrows - 1 : j - 1;
+ ml = l * dp->ncols;
+ if (dp->oldcell[k + ml] ==
+ (int) (dp->oldcell[i + mj] + 1) % dp->states)
+ dp->newcell[i + mj] = dp->oldcell[k + ml];
+ }
+ mj += dp->ncols;
+ }
+ }
+ } else if (dp->neighbors == 3 || dp->neighbors == 9 ||
+ dp->neighbors == 12) {
+ for (j = 0; j < dp->nrows; j++) {
+ for (i = 0; i < dp->ncols; i++) {
+ if ((i + j) % 2) { /* right */
+ /* W */
+ k = (!i) ? dp->ncols - 1 : i - 1;
+ l = j;
+ ml = mj;
+ if (dp->oldcell[k + ml] ==
+ (int) (dp->oldcell[i + mj] + 1) % dp->states)
+ dp->newcell[i + mj] = dp->oldcell[k + ml];
+ } else { /* left */
+ /* E */
+ k = (i + 1 == dp->ncols) ? 0 : i + 1;
+ l = j;
+ ml = mj;
+ if (dp->oldcell[k + ml] ==
+ (int) (dp->oldcell[i + mj] + 1) % dp->states)
+ dp->newcell[i + mj] = dp->oldcell[k + ml];
+ }
+ /* N */
+ k = i;
+ l = (!j) ? dp->nrows - 1 : j - 1;
+ ml = l * dp->ncols;
+ if (dp->oldcell[k + ml] ==
+ (int) (dp->oldcell[i + mj] + 1) % dp->states)
+ dp->newcell[i + mj] = dp->oldcell[k + ml];
+ /* S */
+ k = i;
+ l = (j + 1 == dp->nrows) ? 0 : j + 1;
+ ml = l * dp->ncols;
+ if (dp->oldcell[k + ml] ==
+ (int) (dp->oldcell[i + mj] + 1) % dp->states)
+ dp->newcell[i + mj] = dp->oldcell[k + ml];
+ }
+ mj += dp->ncols;
+ }
+ if (dp->neighbors == 9 || dp->neighbors == 12) {
+ mj = 0;
+ for (j = 0; j < dp->nrows; j++) {
+ for (i = 0; i < dp->ncols; i++) {
+ /* NN */
+ k = i;
+ if (!j)
+ l = dp->nrows - 2;
+ else if (!(j - 1))
+ l = dp->nrows - 1;
+ else
+ l = j - 2;
+ ml = l * dp->ncols;
+ if (dp->oldcell[k + ml] ==
+ (int) (dp->oldcell[i + mj] + 1) % dp->states)
+ dp->newcell[i + mj] = dp->oldcell[k + ml];
+ /* SS */
+ k = i;
+ if (j + 1 == dp->nrows)
+ l = 1;
+ else if (j + 2 == dp->nrows)
+ l = 0;
+ else
+ l = j + 2;
+ ml = l * dp->ncols;
+ if (dp->oldcell[k + ml] ==
+ (int) (dp->oldcell[i + mj] + 1) % dp->states)
+ dp->newcell[i + mj] = dp->oldcell[k + ml];
+ /* NW */
+ k = (!i) ? dp->ncols - 1 : i - 1;
+ l = (!j) ? dp->nrows - 1 : j - 1;
+ ml = l * dp->ncols;
+ if (dp->oldcell[k + ml] ==
+ (int) (dp->oldcell[i + mj] + 1) % dp->states)
+ dp->newcell[i + mj] = dp->oldcell[k + ml];
+ /* NE */
+ k = (i + 1 == dp->ncols) ? 0 : i + 1;
+ l = (!j) ? dp->nrows - 1 : j - 1;
+ ml = l * dp->ncols;
+ if (dp->oldcell[k + ml] ==
+ (int) (dp->oldcell[i + mj] + 1) % dp->states)
+ dp->newcell[i + mj] = dp->oldcell[k + ml];
+ /* SW */
+ k = (!i) ? dp->ncols - 1 : i - 1;
+ l = (j + 1 == dp->nrows) ? 0 : j + 1;
+ ml = l * dp->ncols;
+ if (dp->oldcell[k + ml] ==
+ (int) (dp->oldcell[i + mj] + 1) % dp->states)
+ dp->newcell[i + mj] = dp->oldcell[k + ml];
+ /* SE */
+ k = (i + 1 == dp->ncols) ? 0 : i + 1;
+ l = (j + 1 == dp->nrows) ? 0 : j + 1;
+ ml = l * dp->ncols;
+ if (dp->oldcell[k + ml] ==
+ (int) (dp->oldcell[i + mj] + 1) % dp->states)
+ dp->newcell[i + mj] = dp->oldcell[k + ml];
+ }
+ mj += dp->ncols;
+ }
+ if (dp->neighbors == 12) {
+ mj = 0;
+ for (j = 0; j < dp->nrows; j++) {
+ for (i = 0; i < dp->ncols; i++) {
+ if ((i + j) % 2) { /* right */
+ /* NNW */
+ k = (!i) ? dp->ncols - 1 : i - 1;
+ if (!j)
+ l = dp->nrows - 2;
+ else if (!(j - 1))
+ l = dp->nrows - 1;
+ else
+ l = j - 2;
+ ml = l * dp->ncols;
+ if (dp->oldcell[k + ml] ==
+ (int) (dp->oldcell[i + mj] + 1) % dp->states)
+ dp->newcell[i + mj] = dp->oldcell[k + ml];
+ /* SSW */
+ k = (!i) ? dp->ncols - 1 : i - 1;
+ if (j + 1 == dp->nrows)
+ l = 1;
+ else if (j + 2 == dp->nrows)
+ l = 0;
+ else
+ l = j + 2;
+ ml = l * dp->ncols;
+ if (dp->oldcell[k + ml] ==
+ (int) (dp->oldcell[i + mj] + 1) % dp->states)
+ dp->newcell[i + mj] = dp->oldcell[k + ml];
+ /* EE */
+ k = (i + 1 == dp->ncols) ? 0 : i + 1;
+ l = j;
+ ml = mj;
+ if (dp->oldcell[k + ml] ==
+ (int) (dp->oldcell[i + mj] + 1) % dp->states)
+ dp->newcell[i + mj] = dp->oldcell[k + ml];
+ } else { /* left */
+ /* NNE */
+ k = (i + 1 == dp->ncols) ? 0 : i + 1;
+ if (!j)
+ l = dp->nrows - 2;
+ else if (!(j - 1))
+ l = dp->nrows - 1;
+ else
+ l = j - 2;
+ ml = l * dp->ncols;
+ if (dp->oldcell[k + ml] ==
+ (int) (dp->oldcell[i + mj] + 1) % dp->states)
+ dp->newcell[i + mj] = dp->oldcell[k + ml];
+ /* SSE */
+ k = (i + 1 == dp->ncols) ? 0 : i + 1;
+ if (j + 1 == dp->nrows)
+ l = 1;
+ else if (j + 2 == dp->nrows)
+ l = 0;
+ else
+ l = j + 2;
+ ml = l * dp->ncols;
+ if (dp->oldcell[k + ml] ==
+ (int) (dp->oldcell[i + mj] + 1) % dp->states)
+ dp->newcell[i + mj] = dp->oldcell[k + ml];
+ /* WW */
+ k = (!i) ? dp->ncols - 1 : i - 1;
+ l = j;
+ ml = mj;
+ if (dp->oldcell[k + ml] ==
+ (int) (dp->oldcell[i + mj] + 1) % dp->states)
+ dp->newcell[i + mj] = dp->oldcell[k + ml];
+ }
+ }
+ mj += dp->ncols;
+ }
+ }
+ }
+ }
+ mj = 0;
+ for (j = 0; j < dp->nrows; j++) {
+ for (i = 0; i < dp->ncols; i++)
+ if (dp->oldcell[i + mj] != dp->newcell[i + mj]) {
+ dp->oldcell[i + mj] = dp->newcell[i + mj];
+ addtolist(mi, i, j, dp->oldcell[i + mj]);
+ }
+ mj += dp->ncols;
+ }
+ if (++dp->generation > MI_CYCLES(mi))
+ init_demon(mi);
+ dp->state = 0;
+ } else {
+ if (dp->ncells[dp->state])
+ draw_state(mi, dp->state);
+ dp->state++;
+ }
+
+ if (dp->redrawing) {
+ for (i = 0; i < REDRAWSTEP; i++) {
+ if (dp->oldcell[dp->redrawpos]) {
+ drawcell(mi, dp->redrawpos % dp->ncols, dp->redrawpos / dp->ncols,
+ dp->oldcell[dp->redrawpos]);
+ }
+ if (++(dp->redrawpos) >= dp->ncols * dp->nrows) {
+ dp->redrawing = 0;
+ break;
+ }
+ }
+ }
+}
+void
+release_demon(ModeInfo * mi)
+{
+ if (demons != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++)
+ free_struct(&demons[screen]);
+ (void) free((void *) demons);
+ demons = NULL;
+ }
+} void
+
+refresh_demon(ModeInfo * mi)
+{
+ demonstruct *dp = &demons[MI_SCREEN(mi)];
+
+ dp->redrawing = 1;
+ dp->redrawpos = 0;
+}
--- /dev/null
+############################################################
+# Make file to makexlock.exe on a VMS system.
+#
+# Created By J.Jansen 12 February 1996
+#
+# Usage : type MMS in the directory containing the source
+#
+# It automatically detects the existance of the XPM-library and the XVMSUTILS
+# library to use the new (better) features of the program. It is assumed that
+# both libraries if exist are in the directory with logical symbol X11.
+#
+# This is no longer regularly tested so it may not work.
+#
+############################################################
+
+# default target
+
+C = .c
+#C++
+#C = .cc
+
+#VMS
+O = .obj
+S = ,
+E = .exe
+A = ;*
+
+all : macro xmlock$(E)
+ @ $(ECHO) ""
+
+macro :
+ @ xvms = f$search("X11:XVMSUTILS.OLB").nes.""
+ @ xpm = f$search("X11:LIBXPM.OLB").nes.""
+ @ axp = f$getsyi("HW_MODEL").ge.1024
+ @ macro = ""
+ @ if axp.or.xvms.or.xpm then macro = "/MACRO=("
+ @ if axp then macro = macro + "__ALPHA__=1,"
+ @ if xpm then macro = macro + "__XPM__=1,"
+ @ if xvms then macro = macro + "__XVMSUTILS__=1,"
+ @ if macro.nes."" then macro = f$extract(0,f$length(macro)-1,macro)+ ")"
+ $(MMS)$(MMSQUALIFIERS)'macro' xlock$(E)
+
+BITMAPDIR = [.bitmaps]
+PIXMAPDIR = [.pixmaps]
+CONFIGDIR = [.config]
+GLDIR = [.glx]
+HACKERDIR = [.hackers]
+
+#CC = gcc -g -Wall -ansi -pedantic
+#CC = gcc -g -Wall
+#CC = g++ -g -Wall
+CC = cc
+#CC = cxx
+
+BITMAPTYPE = x11
+PIXMAPTYPE = x11
+
+# Here is your chance to override the default icon:
+TINYBITMAP = $(BITMAPTYPE)
+TINYBITMAP = t-x11
+SMALLBITMAP = s-$(BITMAPTYPE)
+MEDIUMBITMAP = m-$(BITMAPTYPE)
+LARGEBITMAP = l-$(BITMAPTYPE)
+MEDIUMPIXMAP = m-$(PIXMAPTYPE)
+LARGEPIXMAP = l-$(PIXMAPTYPE)
+
+#EYESBITMAP = $(MEDIUMBITMAP)
+EYESBITMAP = m-grelb
+IMAGEBITMAP = $(MEDIUMBITMAP)
+#IMAGEBITMAP = m-xlock
+#LIFEBITMAP = $(SMALLBITMAP)
+LIFEBITMAP = s-grelb
+LIFE1DBITMAP = $(TINYBITMAP)
+MAZEBITMAP = $(LARGEBITMAP)
+#MAZEBITMAP = m-xlock
+#PACMANBITMAP = $(MEDIUMBITMAP)
+PACMANBITMAP = m-ghost
+#PUZZLEBITMAP = $(LARGEBITMAP)
+PUZZLEBITMAP = l-xlock
+IMAGEPIXMAP = $(MEDIUMPIXMAP)
+#IMAGEPIXMAP = m-xlock
+#PUZZLEPIXMAP = $(LARGEPIXMAP)
+PUZZLEPIXMAP = l-xlock
+
+RM = delete/noconfirm
+RM_S = set file/remove
+ECHO = write sys$output
+BLN_S = set file/enter=[]
+
+.IFDEF __ALPHA__
+#SYSTEMDEF = /standard=vaxc
+SOUNDOBJS = $(S)amd$(O)
+SOUNDSRCS = amd$(C)
+SOUNDDEF = ,VMS_PLAY
+.ENDIF
+.IFDEF __XPM__
+XPMDEF = ,HAVE_XPM
+.ENDIF
+.IFDEF __XVMSUTILS__
+XVMSUTILSDEF = ,HAVE_XVMSUTILS
+.ENDIF
+
+# Add hackers modes as you like. It may make your xlock unstable.
+# Please do not uncomment for precompiled distributions.
+#HACKERDEF = ,USE_HACKERS
+#XLOCKHACKEROBJS = $(S)fadeplot$(O)
+
+
+CFLAGS = /define = (VMS,USE_VROOT,USE_BOMB$(SOUNDDEF)$(XPMDEF)$(XVMSUTILSDEF)$(GLDEF)$(HACKERDEF))$(SYSTEMDEF)
+LDFLAGS =
+
+VER = xlockmore
+DISTVER = xlockmore-4.00
+
+
+####################################################################
+# List of object files
+
+
+XLOCKCOREOBJS = xlock$(O)$(S)passwd$(O)$(S)resource$(O)$(S)\
+utils$(O)$(S)logout$(O)$(S)mode$(O)$(S)ras$(O)$(S)xbm$(O)$(S)\
+color$(O)$(S)sound$(O)$(SOUNDOBJS)
+XLOCKMODEOBJS = ant$(O)$(S)ball$(O)$(S)bat$(O)$(S)blot$(O)$(S)\
+bouboule$(O)$(S)bounce$(O)$(S)braid$(O)$(S)bug$(O)$(S)\
+clock$(O)$(S)crystal$(O)$(S)\
+daisy$(O)$(S)dclock$(O)$(S)demon$(O)$(S)drift$(O)$(S)eyes$(O)$(S)\
+flag$(O)$(S)flame$(O)$(S)forest$(O)$(S)fract$(O)$(S)\
+galaxy$(O)$(S)geometry$(O)$(S)grav$(O)$(S)\
+helix$(O)$(S)hop$(O)$(S)hyper$(O)$(S)\
+ico$(O)$(S)ifs$(O)$(S)image$(O)$(S)julia$(O)$(S)kaleid$(O)$(S)\
+laser$(O)$(S)life$(O)$(S)life1d$(O)$(S)life3d$(O)$(S)\
+lightning$(O)$(S)lisa$(O)$(S)lissie$(O)$(S)loop$(O)$(S)\
+marquee$(O)$(S)maze$(O)$(S)mountain$(O)$(S)nose$(O)$(S)\
+pacman$(O)$(S)penrose$(O)$(S)petal$(O)$(S)puzzle$(O)$(S)pyro$(O)$(S)\
+qix$(O)$(S)roll$(O)$(S)rotor$(O)$(S)\
+shape$(O)$(S)sierpinski$(O)$(S)slip$(O)$(S)\
+sphere$(O)$(S)spiral$(O)$(S)spline$(O)$(S)\
+star$(O)$(S)strange$(O)$(S)swarm$(O)$(S)swirl$(O)$(S)\
+triangle$(O)$(S)tube$(O)$(S)turtle$(O)$(S)voters$(O)$(S)\
+wator$(O)$(S)wire$(O)$(S)world$(O)$(S)worm$(O)$(S)\
+cartoon$(O)
+XLOCKGLOBJS = escher$(O)$(S)gears$(O)$(S)morph3d$(O)$(S)superquadrics$(O)$(S)\
+buildlwo$(O)$(S)pipes$(O)$(S)pipeobjs$(O)$(S)\
+sproingies$(O)$(S)sproingiewrap$(O)$(S)s1_b$(O)$(S)\
+s1_1$(O)$(S)s1_2$(O)$(S)s1_3$(O)$(S)s1_4$(O)$(S)s1_5$(O)$(S)s1_6$(O)
+XLOCKCOREMODEOBJS = blank$(O)$(S)bomb$(O)$(S)random$(O)
+XLOCKOBJS = $(XLOCKCOREOBJS)$(S)$(XLOCKMODEOBJS)$(S)\
+$(XLOCKGLOBJS)$(XLOCKHACKEROBJS)$(S)$(XLOCKCOREMODEOBJS)
+XMLOCKOBJS = option$(O)$(S)xmlock$(O)
+
+####################################################################
+# List of source files
+# Used for lint, and some dependencies.
+
+BITMAPS = eyes.xbm ghost.xbm image.xbm life.xbm life1d.xbm \
+maze.xbm puzzle.xbm
+PIXMAPS = image.xpm puzzle.xpm
+XLOCKHDRS = xlock.h mode.h vroot.h ras.h version.h config.h
+XLOCKCORESRCS = xlock$(C) passwd$(C) resource$(C) \
+utils$(C) logout$(C) mode$(C) ras$(C) xbm$(C) \
+color$(C) sound$(C)$(SOUNDSRCS)
+XLOCKMODESRCS = ant$(C) ball$(C) bat$(C) blot$(C) \
+bouboule$(C) bounce$(C) braid$(C) bug$(C) \
+clock$(C) crystal$(C) \
+daisy$(C) dclock$(C) demon$(C) drift$(C) eyes$(C) \
+flag$(C) flame$(C) forest$(C) fract$(C) \
+galaxy$(C) geometry$(C) grav$(C) \
+helix$(C) hop$(C) hyper$(C) \
+ifs$(C) image$(C) julia$(C) kaleid$(C) \
+laser$(C) life$(C) life1d$(C) life3d$(C) \
+lightning$(C) lisa$(C) lissie$(C) loop$(C) \
+marquee$(C) maze$(C) mountain$(C) nose$(C) \
+pacman$(C) penrose$(C) petal$(C) puzzle$(C) pyro$(C) \
+qix$(C) roll$(C) rotor$(C) \
+shape$(C) sierpinski$(C) slip$(C) \
+sphere$(C) spiral$(C) spline$(C) \
+star$(C) strange$(C) swarm$(C) swirl$(C) \
+triangle$(C) tube$(C) turtle$(C) voters$(C)\
+wator$(C) wire$(C) world$(C) worm$(C) \
+cartoon$(C)
+XLOCKGLSRCS = escher$(C) gears$(C) morph3d$(C) superquadrics$(C) \
+buildlwo$(C) pipes$(C) pipeobjs$(C) \
+sproingies$(C) sproingiewrap$(C) buildlwo$(C) s1_b$(C) \
+s1_1$(C) s1_2$(C) s1_3$(C) s1_4$(C) s1_5$(C) s1_6$(C)
+XLOCKCOREMODESRCS = blank$(C) bomb$(C) random$(C)
+XLOCKHACKERSRCS = fadeplot$(C)
+XLOCKSRCS = $(XLOCKCORESRCS) $(XLOCKMODESRCS) $(XLOCKCOREMODESRCS) \
+$(XLOCKGLSRCS) $(XLOCKHACKERSRCS)
+XMLOCKSRCS = option$(C) xmlock$(C)
+
+
+#########################################################################
+
+xlock$(E) : $(XLOCKOBJS)$(S)xlock.opt
+ link/map $(XLOCKOBJS)$(S)xlock.opt/opt
+ @ $(ECHO) "$@ BUILD COMPLETE"
+ @ $(ECHO) ""
+
+xmlock$(E) : $(XMLOCKOBJS)$(S)xmlock.opt
+ link/map $(XMLOCKOBJS)$(S)xmlock.opt/opt
+ @ $(ECHO) "$@ BUILD COMPLETE"
+ @ $(ECHO) ""
+
+xlock.opt :
+ @ close/nolog optf
+ @ open/write optf xlock.opt
+# @ if .not. axp then write optf "sys$library:vaxcrtl/lib"
+ @ write optf "sys$library:vaxcrtl/lib"
+ @ if axp then write optf "sys$library:ucx$ipc_shr/share"
+ @ if axp then write optf "sys$share:decw$xextlibshr/share"
+ @ if axp then write optf "sys$share:decw$xtlibshrr5/share"
+ @ if .not. axp then write optf "sys$library:ucx$ipc/lib"
+# @ write optf "sys$share:decw$dxmlibshr/share"
+ @ write optf "sys$share:decw$xmlibshr12/share"
+ @ write optf "sys$share:decw$xlibshr/share"
+ @ close optf
+
+xmlock.opt :
+ @ close/nolog optf
+ @ open/write optf xmlock.opt
+# @ if .not. axp then write optf "sys$library:vaxcrtl/lib"
+ @ write optf "sys$library:vaxcrtl/lib"
+ @ if axp then write optf "sys$library:ucx$ipc_shr/share"
+ @ if axp then write optf "sys$share:decw$xextlibshr/share"
+ @ if axp then write optf "sys$share:decw$xtlibshrr5/share"
+ @ if .not. axp then write optf "sys$library:ucx$ipc/lib"
+# @ write optf "sys$share:decw$dxmlibshr/share"
+ @ write optf "sys$share:decw$xmlibshr12/share"
+ @ write optf "sys$share:decw$xlibshr/share"
+ @ close optf
+
+eyes$(O) : eyes$(C) eyes.xbm
+flag$(O) : flag$(C) flag.xbm
+life$(O) : life$(C) life.xbm
+life1d$(O) : life1d$(C) life1d.xbm
+maze$(O) : maze$(C) maze.xbm
+pacman$(O) : pacman$(C) ghost.xbm
+# Do not need xpm files if not using them but not worth figuring out
+image$(O) : image$(C) image.xbm image.xpm
+puzzle$(O) : puzzle$(C) puzzle.xbm puzzle.xpm
+
+eyes.xbm : $(BITMAPDIR)$(EYESBITMAP).xbm
+ $(BLN_S)eyes.xbm $(BITMAPDIR)$(EYESBITMAP).xbm
+
+flag.xbm : $(BITMAPDIR)$(FLAGBITMAP).xbm
+ $(BLN_S)flag.xbm $(FLAGDIR)$(FLAGBITMAP).xbm
+
+image.xbm : $(BITMAPDIR)$(IMAGEBITMAP).xbm
+ $(BLN_S)image.xbm $(BITMAPDIR)$(IMAGEBITMAP).xbm
+
+ghost.xbm : $(BITMAPDIR)$(PACMANBITMAP).xbm
+ $(BLN_S)ghost.xbm $(BITMAPDIR)$(PACMANBITMAP).xbm
+
+life.xbm : $(BITMAPDIR)$(LIFEBITMAP).xbm
+ $(BLN_S)life.xbm $(BITMAPDIR)$(LIFEBITMAP).xbm
+
+life1d.xbm : $(BITMAPDIR)$(LIFE1DBITMAP).xbm
+ $(BLN_S)life1d.xbm $(BITMAPDIR)$(LIFE1DBITMAP).xbm
+
+maze.xbm : $(BITMAPDIR)$(MAZEBITMAP).xbm
+ $(BLN_S)maze.xbm $(BITMAPDIR)$(MAZEBITMAP).xbm
+
+puzzle.xbm : $(BITMAPDIR)$(IMAGEBITMAP).xbm
+ $(BLN_S)puzzle.xbm $(BITMAPDIR)$(IMAGEBITMAP).xbm
+
+image.xpm : $(PIXMAPDIR)$(IMAGEPIXMAP).xpm
+ $(BLN_S)image.xpm $(PIXMAPDIR)$(IMAGEPIXMAP).xpm
+
+puzzle.xpm : $(PIXMAPDIR)$(PUZZLEPIXMAP).xpm
+ $(BLN_S)puzzle.xpm $(PIXMAPDIR)$(PUZZLEPIXMAP).xpm
+
+amd$(C) : $(CONFIGDIR)amd$(C)
+ $(BLN_S)amd$(C) $(CONFIGDIR)amd$(C)
+
+amd.h : $(CONFIGDIR)amd.h
+ $(BLN_S)amd.h $(CONFIGDIR)amd.h
+
+amd$(O) : amd$(C) amd.h
+
+escher$(C) : $(GLDIR)escher$(C)
+ $(BLN_S) escher$(C) $(GLDIR)escher$(C)
+
+gears$(C) : $(GLDIR)gears$(C)
+ $(BLN_S) gears$(C) $(GLDIR)gears$(C)
+
+morph3d$(C) : $(GLDIR)morph3d$(C)
+ $(BLN_S) morph3d$(C) $(GLDIR)morph3d$(C)
+
+superquadrics$(C) : $(GLDIR)superquadrics$(C)
+ $(BLN_S) superquadrics$(C) $(GLDIR)superquadrics$(C)
+
+buildlwo$(C) : $(GLDIR)buildlwo$(C)
+ $(BLN_S) buildlwo$(C) $(GLDIR)buildlwo$(C)
+
+pipes$(C) : $(GLDIR)pipes$(C)
+ $(BLN_S) pipes$(C) $(GLDIR)pipes$(C)
+
+pipeobjs$(C) : $(GLDIR)pipeobjs$(C)
+ $(BLN_S) pipeobjs$(C) $(GLDIR)pipeobjs$(C)
+
+sproingies$(C) : $(GLDIR)sproingies$(C)
+ $(BLN_S)sproingies$(C) $(GLDIR)sproingies$(C)
+
+sproingiewrap$(C) : $(GLDIR)sproingiewrap$(C)
+ $(BLN_S)sproingiewrap$(C) $(GLDIR)sproingiewrap$(C)
+
+s1_b$(C) : $(GLDIR)s1_b$(C)
+ $(BLN_S)s1_b$(C) $(GLDIR)s1_b$(C)
+
+s1_1$(C) : $(GLDIR)s1_1$(C)
+ $(BLN_S)s1_1$(C) $(GLDIR)s1_1$(C)
+
+s1_2$(C) : $(GLDIR)s1_2$(C)
+ $(BLN_S)s1_2$(C) $(GLDIR)s1_2$(C)
+
+s1_3$(C) : $(GLDIR)s1_3$(C)
+ $(BLN_S)s1_3$(C) $(GLDIR)s1_3$(C)
+
+s1_4$(C) : $(GLDIR)s1_4$(C)
+ $(BLN_S)s1_4$(C) $(GLDIR)s1_4$(C)
+
+s1_5$(C) : $(GLDIR)s1_5$(C)
+ $(BLN_S)s1_5$(C) $(GLDIR)s1_6$(C)
+
+s1_6$(C) : $(GLDIR)s1_6$(C)
+ $(BLN_S)s1_6$(C) $(GLDIR)s1_6$(C)
+
+fadeplot$(C) : $(HACKERDIR)fadeplot$(C)
+ $(BLN_S)fadeplot$(C) $(HACKERDIR)fadeplot$(C)
+
+################################################################
+
+install :
+
+uninstall :
+
+################################################################
+# Miscellaneous targets
+
+clean :
+ @ close/nolog optf
+ @ purge
+ @ $(RM) *.lis$(A)
+ @ $(RM) *.obj$(A)
+ @ $(RM) *.opt$(A)
+ @ $(RM) *.map$(A)
+ @ $(RM_S) eyes.xbm$(A)
+ @ $(RM_S) flag.xbm$(A)
+ @ $(RM_S) image.xbm$(A)
+ @ $(RM_S) ghost.xbm$(A)
+ @ $(RM_S) life.xbm$(A)
+ @ $(RM_S) life1d.xbm$(A)
+ @ $(RM_S) maze.xbm$(A)
+ @ $(RM_S) puzzle.xbm$(A)
+ @ $(RM_S) image.xpm$(A)
+ @ $(RM_S) puzzle.xpm$(A)
+ @ $(RM_S) amd.h$(A)
+ @ $(RM_S) amd.c$(A)
+
+distclean : clean
+ @ $(RM_S) fadeplot$(C)$(A)
+ @ $(RM) xlock$(E)$(A)
+ @ $(RM) xmlock$(E)$(A)
+
+read :
+ more README
--- /dev/null
+
+ Introduction to 3d modes
+ Henrik Theiling
+
+
+This is a short introduction to how you could try to see the 3d effects
+in xlock:
+
+- You will need glasses with one lens red and the other blue (or green).
+ The blue (or green) one needs to be in front of the left eye, the red one
+ in front of the right one. If you have got differently coloured lenses
+ (like green) you can try to adjust the colours by using the switches
+ -right3d <colour> and -left3d <colour> .
+
+ If you do not see any 3d effect, try to change the -delta3d value.
+
+- Adjust the colour of your screen (or use -right3d/-left3d instead). Most
+ likely if you use the green colours will be too bright so you can see them
+ through the red lens, too.
+
+- Let the program display in blue for the green lens. You should still be
+ able to see blue through your green lens, but less likely through your
+ red lens.
+
+- Try to zoom in from a completely dark screen.
+
+- Try different 3d modes. Some people see `rock' more easily, others `worm'.
+ It depends.
+
+I hope you enjoy it.
+
+Currently the following modes are implemented for 3d view:
+ rock, worm, bouboule, pyro.
+
+BUGS:
+ Some of the 3d modes are not implemented with real 3d. They try to
+ use a close approach.
+ Rock, pyro and bouboule use real 3d calculations.
+ In the worm mode, worms can not just creep to the bottom or the top. That
+ means they do not have a real 3d direction but one 2d direction (the same
+ as in 2d mode) and an additional 1d direction for the z-axis. This could
+ be fixed.
+
--- /dev/null
+
+
+ The xlock Hacker's Guide
+ Ron Hitchens
+
+
+INTRODUCTION
+
+ This document is meant to serve as a guide for those who wish to hack
+xlock; to make changes, add new modes, fix bugs, etc. The intent is to
+explain non-obvious things about how the various pieces of xlock
+are organized, to help the casual hacker avoid common coding mistakes
+and to stay away from "off limits" parts of xlock.
+
+
+What Is Xlock?
+
+ Xlock is an application for the X Window system which will cover up
+one or more X screens to prevent access. It may be run manually by a
+user to lock the display or, more commonly, xlock may be run automatically
+by a daemon utility after a period of inactivity.
+
+ Xlock creates a "blanket" window to cover the entire screen, and also
+grabs the X server to prevent access by external clients. When the
+user presses a key or clicks a mouse button, xlock will prompt for a
+password. When the proper password is provided, xlock releases the
+server and removes its blanket window.
+
+ While xlock has the display locked, it runs one or more "modes" which
+are code modules that draw various things on the xlock window. These
+modes act as screen savers. They attempt to provide amusing and/or
+entertaining displays, while avoiding static imagery which could lead
+to screen phosphor "burn-in".
+
+ The xlock application began life at Sun Microsystems many years
+ago. It was written by Patrick J. Naughton and was much simpler then.
+That original xlock is almost ubiquitous in the X Windows world. This
+distribution, known as xlockmore, is maintained by David Bagley and
+is not officially connected with the original xlock, (although it
+received Patrick's blessing). Major enhancements have been made to
+xlock - many, many new modes have been added and significant structural
+changes have been made. This document will attempt to inform you of
+how xlock is structured and how the pieces fit together.
+
+
+ORGANIZATION
+
+ Xlock is organized into two basic parts: the "mainline" code, which
+handles startup, window creation, passwords, etc, and the modes,
+which are self-contained modules that draw things on the window(s)
+provided by the mainline code.
+
+ The code which makes up an xlock mode is accessed through a few
+well-defined callback functions, or "hooks". The mode should not
+concern itself with anything not provided to it via these hooks.
+As of the xlockmore-3.8 release, these hooks have been restructured
+to provide all the environmental information a mode needs to do its
+task. Prior to this, it was necessary for the modes to access global
+variables. This is no longer condoned, it is now strongly suggested
+that modes only trust the passed-in information. These globals will
+probably go away once all the naive modes have been updated.
+
+
+MAINLINE CODE
+
+ The mainline xlock code is concerned with preventing unauthorized
+access to the X server and creating the environment in which the modes
+run. It also calls the hooks for the current mode in response to
+external events and timing intervals. The mainline code keeps track
+of the clock and determines when to make calls to a mode.
+
+ < unfinished >
+
+MODES
+
+ The primary focus of this document is writing and maintaining
+modes. The remainder will be concerned with how to write a mode,
+how a mode accesses the display, what a mode should not do, etc.
+
+
+HOOKS
+
+ Xlock modes are driven entirely through their externally visible
+hook functions. There are currently five hooks defined, with a sixth
+reserved for future expansion. The first two, init and callback, are
+the same as in older versions of xlock. The release, refresh and
+change hooks are new to xlockmore-3.8:
+
+ o init This hook will be called to prepare a mode for running.
+ The mode should allocate resources, establish its
+ initial state, etc. This hook may be called
+ multiple times, and the window and/or screen
+ values may be different each time.
+
+ o callback This is the main driver hook for a mode. It
+ is called repeatedly, at a time interval determined
+ by defaults or command line arguments. A mode sees
+ each call as one "tick", it may chose to do something
+ on every tick, or count the calls and only update
+ the screen periodically. A mode should not spend a
+ lot of time executing the callback function. If it
+ has a lot of screen updating to do, it should spread
+ the work across multiple calls. A mode can depend
+ on the init hook being called at least once before
+ the callback hook is called. But it should not depend
+ on the callback hook ever being called following an init.
+
+ o release This hook will be called when some other mode is
+ about to be initialized, or when xlock is shutting
+ down. This hook should free up any long-lived,
+ dynamically allocated resources the mode has acquired.
+ This would include memory and X resources, such as
+ Pixmaps and GCs.
+
+ o refresh This hook is called when the drawing window may have
+ been damaged. It should take steps to repaint the
+ window. No information about which part(s) of the
+ window have been damaged is provided. The mode should
+ repaint the entire window. If no refresh hook is
+ provided, the init hook will be called when a refresh
+ is needed.
+
+ o change This hook is called when the user requests a change.
+ In the current implementation, this is when the user
+ clicks the middle mouse button. This hook is currently
+ only used by the random mode, it means to move on to
+ the next mode (random mode runs other modes as slaves).
+ A mode is free to interpret a change request in any
+ way it likes. The logical thing is to start over,
+ change colors, etc.
+
+
+Calling Conventions
+
+ The prototype for a mode hook is defined in mode.h, and looks like
+this:
+
+ void mode_hook (ModeInfo *mode_info)
+
+ The argument, a pointer to a ModeInfo structure, contains
+all the context information a mode needs to run. Writers of new modes
+are strongly encouraged to acquire all information they need through
+this handle.
+
+ A ModeInfo handle is provided to every hook type. The information
+in this structure is current ONLY AT THE TIME THE HOOK IS CALLED. The
+structure it points to is volatile and the pointer should not be cached
+by the mode. It is also important to note that xlock may be locking
+several screens simultaneously. The window information may not be the
+same across subsequent calls to the same callback function. Use the
+information provided, do not look at globals, and do not stash the pointer.
+
+
+The Init Hook
+
+ A mode's init hook will be called whenever the mainline code wants
+to inform a mode it is about to run on a particular window. The mainline
+xlock code will only run one mode at a time, but it may be running that
+mode on several screens at once. It is therefore possible for the init
+hook to be called several times, each with a different window context,
+before its callback hook is run. An init hook should not assume the
+window provided is the window to be used by the next call to the
+callback hook. Depending on the nature of the mode, it may be
+necessary to maintain several sets of state information, one for each
+screen.
+
+ The number of active screens, and the maximum possible number of
+screens are provided in the ModeInfo struct. Modes are encouraged
+to look at this information and allocate data structures dynamically.
+The number of active screens will not change during an xlock run.
+A global symbol, MAXSCREENS, is defined in xlock.h but programmers
+are strongly urged not to use this or any other fixed value. If
+you use only the information passed to the hooks, your code will
+always be correct.
+
+ An init hook should also be prepared to be called at any time. The
+mainline xlock code changes window configuration in response to user
+input, and may call the init hook in place of a missing refresh hook.
+An init hook should therefore not expect to be balanced with a call
+to the release hook. The init hook should not allocate resources on
+each call, it should track its allocations to make sure they are only
+done once.
+
+ Neither should an init hook depend on the callback hook ever being
+called. It's possible a call to the init hook may be followed by another
+call to the init hook, or a call to the release hook without an intervening
+call to the callback hook.
+
+ An init hook may be called twice in a row, and will be if more than
+one screen is being locked. To avoid unexpected glitches on-screen,
+it is recommended that you do not draw anything to the screen during
+the init hook. Save the drawing for the callback hook, with appropriate
+status information if an initial screen paint is needed.
+
+ Be careful not to blindly do dynamic allocations in your init hook,
+keep track of your allocations and only do the necessary state reset
+each time. Track your allocations so they can be undone by the release
+hook at a later time.
+
+ The init hook will be called for each screen before the callback
+hook is called for any screen.
+
+
+The Callback Hook
+
+ The callback hook is the method by which a mode runs. The mainline
+code calls a mode's callback hook periodically, usually on a fixed time
+schedule, and checks for user input between each call.
+
+ The time interval between calls to the callback hook is set by a
+field in the LockStruct entry for the mode (see mode.h and mode.c).
+This value may also be set by the user on the command line, or via
+an X resource. The mainline code attempts to keep the time interval
+between the *beginning* of each call constant. The time spent executing
+the mode's callback hook is subtracted from the interval to keep the
+ticks as constant as possible. This is hardly perfect, but an effort
+is made to remain as accurate as is possible on a multi-tasking system.
+
+ A mode should therefore not spend a large amount of time executing
+in the callback hook. While in the callback, the mainline code cannot
+respond to external events from the user. It is preferable for a
+callback hook to do a little bit of the work on each call, rather than
+a complete update each time.
+
+ A callback should pay attention to the context information passed
+to it. On multi-headed displays, the callback may be called successively
+for each screen on the display. It may be necessary to maintain
+state information which is indexed by the given screen number, rather
+than simply using local static variables.
+
+ The screen number is provided by the ModeInfo argument and will
+range from 0 to n, where n is the number of active screens minus one.
+There will always be a screen 0. A mode wishing to paint the same
+imagery one each screen should do the same thing each time the callback
+is called, and advance its state when the screen number is 0. However,
+the window may not be the same size on every screen. Do not assume it is.
+
+ A call to the callback hook is not guaranteed following an init call
+for a given screen, but at least one init call is guaranteed before the
+first callback call. If the window size changes, as when the icon
+window is presented to prompt for the password, an init call
+will be made with the new window information. A mode should
+always use the window information passed to it rather than caching
+information passed to the init hook, but it can use the information
+passed to the init hook to setup its own data structures and rely
+on the information matching the next callback call, *for that screen*.
+
+
+The Release Hook
+
+ This hook is new to release 3.8. The release hook will be called by
+the mainline code when it is about to call the init hook of another mode,
+and your init hook has been called at least once since the last call
+to your release hook.
+
+ The release hook should undo any dynamic allocations done by the
+init hook, or anything else that needs to be done to make the mode
+inactive. Once the release hook returns, the mode is marked as not
+initialized. If your mode is never initialized again, no further
+calls to any of its hooks will be made. The release hook is where
+you must surrender any resources that only your mode knows about.
+
+ The release hook is called ONLY ONCE. It will not be called
+for each screen like most of the other hooks. A mode should not
+access any of the window information, other that the display handle
+and number of active screens.
+
+ Once the release hook has been called the mode is considered
+to be inactive, the same as if it had never been run at all.
+
+ < Final call at shutdown?? >
+
+
+The Refresh Hook
+
+ This hook is new to release 3.8. The refresh hook is called when
+the mainline suspects the window may have been damaged.
+
+ When running in "inwindow" mode (xlock runs in a plain window, not locking)
+this may happen when windows are shuffled by the user. It may also happen
+when in normal full-screen mode and some new window appears on the display.
+In this case, xlock immediately pushes itself to the top, to cover the
+new window. However, the temporary appearance of the new window may
+have left a "hole" on the display. The refresh hook should take steps
+to repaint the entire display whenever it is called.
+
+ It will also be called when the window is first mapped. However,
+a mode should not depend on a refresh call to do its initial screen
+paint. When running random mode, other modes will be stopped and started
+on the same window, with no intervening refresh call. A mode should
+usually do a full paint on the first callback following an init call.
+It is a good strategy to have the refresh hook simply set a status flag
+(or whatever) to cause the next callback call to do a full repaint. This
+would be similar to an init, but internal state would not be reset.
+
+ If no refresh hook is provided for your mode (configured in mode.c),
+then your init hook will be called in place of the refresh hook. The
+refresh hook is provided so your mode can repair window damage
+without losing the internal state of the mode.
+
+ As of this writing, there is a hack in place which will prevent a
+second call to the init hook (in place of a refresh) if the callback
+hook has not been called since the last init call for that screen.
+This causes undesirable behavior in some naive modes. It is expected
+this hack will be removed. Modes should be prepared for their init
+hooks to be called at any time, even repeatedly.
+
+
+The Change Hook
+
+ This hook is new to release 3.8. It is called when the user requests
+a change. This is currently in response to a click on the middle mouse
+button.
+
+ In the case of random mode, which runs other modes, it means to
+move on to the next mode without waiting for the time to expire. Other
+modes are free to interpret this call in way they choose. If no change
+hook is provided for a mode, no action will be taken when the middle mouse
+button is clicked.
+
+ This hook will be called once for each active screen when a change
+request is made.
+
+
+Hook Calling Sequence
+
+ A typical sequence of calls when running on two screens would be:
+
+ init [screen 0]
+ init [screen 1]
+ refresh [screen 0] (caused by first mapping the window)
+ refresh [screen 1]
+ callback [screen 0]
+ callback [screen 1]
+ callback [screen 0]
+ callback [screen 1]
+ ...
+ refresh [screen 0] (caused by window damage)
+ refresh [screen 1]
+ callback [screen 0]
+ callback [screen 1]
+ ...
+ init [screen 0] (switch to icon screen)
+ callback [screen 0]
+ callback [screen 1]
+ ...
+
+
+HANDS OFF THOSE GLOBALS
+
+ All the environmental information a mode needs is provided to the
+hook functions via the ModeInfo passed as an argument. But prior to
+the restructuring done in xlockmore-3.8, much of this information
+had to be accessed directly from global variables. Listed here are
+the globals which correspond to the information passed in ModeInfo.
+You should not access these variables directly (they will go away),
+nor should you use these names for local variables. The first column
+is the global name, the second column is the macro to use to get
+the same information from the ModeInfo argument (see mode.h):
+
+ These variables pertain to the X screen
+ dsp MI_DISPLAY handle to the X server display.
+ screen MI_SCREEN Current screen number
+ Scr MI_PERSCREEN perscreen struct ptr for curr screen
+ Scr[n].gc MI_GC gc handle for current screen
+ Scr[n].npixels MI_NPIXELS num available pixels for curr screen
+ Scr[n].cmap MI_CMAP colormap handle for current screen
+ Scr[n].pixels MI_PIXELS pixel array for current screen
+ Scr[n].pixels[i] MI_PIXEL a given pixel in the pixel array
+
+ These variables control execution, set by cmd line or resources
+ delay MI_DELAY time (microsecs) between callbacks
+ batchcount MI_BATCHCOUNT batchcount value
+ cycles MI_CYCLES cycles value
+ saturation MI_SATURATION colormap saturation value
+
+ These variables are booleans, usually set by cmd line:
+ mono MI_WIN_IS_MONO use only B&W (can be set for color)
+ inwindow MI_WIN_IS_INWINDOW running in regular window
+ inroot MI_WIN_IS_INROOT running in the root window
+
+ The MI_WIN_IS_MONO flag will be true if the global "mono" is set
+(which can be specified on the command line for color displays) or
+if the screen is a monochrome device. It IS possible to have both
+color and monochrome screens at the same time. Use the passed-in
+information on a screen-by-screen basis, do not assume they are all
+the same.
+
+ There are several other global booleans in resource.c. These will
+probably be eliminated in future releases. Do not access them directly.
+They should not be of interest to a mode anyway, but be careful not to
+use those names in your own code.
+
+
+PLUGGING A NEW MODE INTO XLOCK
+
+ The code making up a mode should be self-contained. A mode should
+hide all of its internal variables and functions. Only the hook functions
+and one configuration variable should be visible outside the module
+the mode is defined in. Because there are some many code modules
+compiled into xlock, written by many different people, the chance
+of naming conflicts is quite high. Keep all your local stuff local.
+
+ The nexus where the mainline xlock code connects to the individual
+modes is in the file mode.c. It contains an array of pre-initialized
+LockStruct structures named LockProcs. This struct is currently
+defined as:
+
+ typedef struct LockStruct_s {
+ char *cmdline_arg; /* mode name */
+ ModeHook *init_hook; /* func to init a mode */
+ ModeHook *callback_hook; /* func to run (tick) a mode */
+ ModeHook *release_hook; /* func to shutdown a mode */
+ ModeHook *refresh_hook; /* tells mode to repaint */
+ ModeHook *change_hook; /* user wants mode to change */
+ ModeHook *unused_hook; /* for future expansion */
+ ModeSpecOpt *msopt; /* this mode's def resources */
+ int def_delay; /* default delay for mode */
+ int def_batchcount;
+ int def_cycles;
+ float def_saturation;
+ char *desc; /* text description of mode */
+ int flags; /* state flags for this mode */
+ void *userdata; /* for use by the mode */
+ } LockStruct;
+
+ Of these fields, the hooks and msopt are defined in the mode itself.
+The hooks are names of functions which are called as previously described.
+Init and callback hooks are required, all others are optional.
+Any hooks not provided are specified as NULL. The field "msopt" is
+a pointer to a ModeSpecOpt struct (xlock.h). Every mode must define
+one of these structures and make it globally visible to mode.c. This
+structure provides a handle to X resource information that allows
+for parsing command line arguments unique to your mode and setting
+static variables private to your mode.
+ << unfinished, see random.c for an example >>
+
+ The remaining fields of the LockStruct struct are defined directly
+in the array in mode.c. The fields with the names def_* are the default
+values to be used when running this mode, if not overridden by command
+line arguments of resources.
+
+ The field def_delay controls how often the callback hook is called
+(specified in microseconds).
+
+ The floating point number def_saturation controls the saturation of
+the colormap to allocate. This controls how the color ramp is
+populated (<<unfinished: how?>>)
+
+ The other two default values, def_batchcount and def_cycles, are
+for use by the mode. They can be used to control how many thingys
+to draw at once, how often to restart, etc. These values can be
+specified at run time which allows the user to affect how a mode runs.
+
+ The text pointers cmdline_arg and desc are used when printing
+command line help. They provide the simple name and a more verbose
+short description.
+
+ The flags field should always be set to zero, it is used internally
+to keep track of state information.
+
+ The last field, userdata, is for use by the mode. The mode may use
+this generic pointer for any purpose it likes. The mainline code will
+never touch it and it will be available to all subsequent hook calls.
+This value will survive init - release - init cycles.
+
+
+GETTING INFORMATION FROM ModeInfo
+
+ The ModeInfo structure is defined in mode.h. It contains several
+types of information and is actually made up of several other structs.
+This structure is likely to undergo major revision in future releases,
+so macros are provided to access all the fields. Use the macros,
+things are guaranteed to change.
+
+ Of the fields available in ModeInfo, most are copies of the same
+information available in the globals described above. But some are new.
+Most notably, the window dimensions and black/white pixel values are
+now provided, so there is no need to make direct X library calls to
+get this information yourself.
+
+ There is also some provision for a future debugging facility to
+fake multiple screens by using multiple regular windows. This
+code is not yet implemented. When it is, the number returned by
+the MI_SCREEN macro may not correspond to a real X screen. As of
+this writing, MI_SCREEN and MI_REAL_SCREEN always contain the same
+value. Use MI_SCREEN as an index to track which window you are
+drawing to, use MI_REAL_SCREEN when calling X Windows functions
+which require actual screen numbers. The MI_SCREENPTR pointer
+will always be valid, but identical for all faked screens.
+
+ The ModeInfo structure also provides a pointer to the LockStruct
+record that corresponds to the mode. DO NOT MODIFY THIS STRUCTURE.
+This is provided so that you can see what your compiled in defaults
+where for delay, batchcount, cycles and saturation. You can also
+get your own name and description and access the userdata field (it's
+ok to modify userdata, do not change anything else, use the macros).
+
+ All fields should be considered read-only, except MI_USERDATA
+and MI_PAUSE. MI_USERDATA is not used by the mainline code, you
+can use any way you like and its value will be preserved. However,
+the MI_PAUSE field is special. MI_PAUSE is examined up upon return
+from your callback hook. If it is not zero (it will be set zero
+before the call) it is interpreted as a time, in microseconds, to
+delay before making the next callback.
+
+ The MI_PAUSE mechanism is somewhat of a hack, and it is expected
+to change in future revisions of xlock. Most probably it will be
+moved out of the ModeInfo struct and the callback return value will
+specify the delay value. This one-time pause mechanism is also
+broken for multiple screens. It is only noticed on the highest
+numbered screen. Future revisions of xlock will (hopefully) fix this,
+but for now you can see how it works by looking at the code for maze
+or triangle.
+
+
+EXAMPLE
+
+ <<unfinished>>
+
+ The eyes mode (eyes.c) was written by the same author that did
+the majority of the restructuring for the new mode interface. It
+should (hopefully) serve as a good example of a properly written
+mode. It makes use of the new refresh and release hooks. The
+random mode (random.c) will also illustrate the change hook and
+private resources. The triangle mode (triangle.c) has also been
+updated to use the new scheme. It uses the MI_PAUSE mechanism to
+sleep between scenes.
+
+------------------------
+
+ The official xlockmore maintainer is David Bagley. He can be
+reached at bagleyd@bigfoot.com. The current release of xlockmore
+is available by anonymous ftp at ftp.x.org in /contrib/applications.
+Alpha versions are available at
+ftp://wauug.erols.com/pub/X-Windows/xlockmore/index.html
+
+ The restructuring of the calling mechanism for mode hooks was
+done by Ron Hitchens <ron@idiom.com>.
+
+------------------------
+
+ This document written by Ron Hitchens <ron@idiom.com>
+It is still very rough and incomplete. What you see here is
+basically the first draft, brain-dump version. It needs to be
+polished to make it more readable, condensed to make it less
+redundant and organized to make it more cogent. But it's a start.
+Hopefully, this will eventually be converted to LaTeX. When
+I get some time...
+
+
+Last Update:
+Mon Mar 18 03:46:16 MST 1996
+
+
+OK now you got a working mode $file. What auxiliary files are there to change?
+$file.c, mode.c, mode.h you must have changed already
+Makefile.in, Imakefile, descrip.mms, make.com Makefiles
+XLock.ad Resource file
+xmlock.c Motif launcher file
+random.c If its a special mode or gl mode
+openwin-menu-screensave openwin-menu-xlock config/ openwin menus
+system.fvwmrc.xlock system.fvwmrc2.xlock config/ fvwm and fvwm2 menus
+xlock.man Man pages
+Revisions Give credit
--- /dev/null
+I translate a part of the HACKER.DOC in french
+first in text
+second in html
+bye
+--
+charles / \
+vidal / ..|\
+ (_\ |_)vidalc@univ-mlv.fr
+ / \@'
+ / \ http://fillmore.univ-mlv.fr/~vidalc
+ _ / ` |
+\\/ \ | _\
+ \ /_ || \\
+ \____)|_) \_)
+-----------------------------------------
+LA DOC DU BIDOUILLEUR
+
+INTRODUCTION
+________________________________________________________________________________
+
+Ce document est pour tous ceux qui veulent modifier xlock (more), ajouter de
+nouveaux modes, debugger , etc....
+
+xlock kesako ?
+
+xlock est une application pour X-windows qui emp\88che l'acc\8as d'un ou plusieurs
+\82crans. Il peut \88tre envoy\82 manuellement ou plus commun\82ment envoy\82
+automatiquement par un d\82mon apr\8as une p\82riodes d'inactivit\82.
+Xlock cr\82\82 une fen\88tre couvrant enti\8arement l'\82cran, et capte tous \82v\82nements
+pr\82venant ainsi l'acc\8as ext\82rieur.
+Quand une touche est press\82e alors xlock affiche un message mais aussi le mode
+dans une icone
+(MODE_ICONIQUE) et demande votre mot de passe.
+Lorsque l'\82cran est lock\82 ( ferm\82 ), des images, des dessins, ou des animations
+sont affich\82es servant de screen-saver \82vitant la d\82gradation du phosphore.
+Xlock fut d\82velopp\82 chez Sun Micro System par Pack J Naughton.David Bagley l'a
+repris et maintenu sous le nom de Xlockmore dans lequel d'innombrable mode ont
+\82t\82 ajout\82, ainsi que la possibilit\82 d'afficher un mode dans une fen\88tre et
+aussi sur la root window.
+
+________________________________________________________________________________
+ORGANISATION GENERALE
+
+xlock est organiser en deux partie.
+
+1. le traitement de la ligne de commande, la cr\82ation de fen\88tre, le mot de
+passe, etc ...
+
+2 les modes: ils peuvent \88tre coder de tel mani\8are qu'il n'y a pas besoin de
+faire appel \85 X pour la taille de la fen\88tre, les couleurs ...
+Une API est comprise dans xlock pour avoir tout les renseignements en ce qui
+concerne l'\82cran.
+C'est dans cette partie que vous allez pouvoir ajouter d'autres modes.
+
+L'architecture logiciel d'un mode est structur\82 en 4 sortes de fonctions:
+
+-init:
+celle-ci devra \88tre appelle pour pr\82parer le d\82roulement d'un mode. Le mode
+devra initialiser des tables de sinus
+par exemple, allouer des ressources, m\82moire entre autre, \82tablir l'\82tat initial
+par des variables etc. ...
+Cette fonction peut \88tre appel\82 plusieurs fois et la fen\88tre ou l'\82cran peuvent avoir des taille diff\82rentes.
+
+-callback:
+C'est la principale fonction, c'est la que est implement\82 le corps du mode.
+ Elle est appel\82 p\82riodiquement.
+ Cette fonction ne doit pas occuper beaucoup de temps a s'ex\82cuter.
+Cette fonction peut etre appele dans deux contextes diff\82rents:
+ plein \82cran ou en version icon. La fonction MI_WIN_IS_ICONIC vous dira dans
+quelle contexte on se trouve.
+
+-release:
+Ici, cette fonction sera appel\82 si un autre mode est appel\82 ( random , et bouton
+droit ), ou si xlock se termine.
+Dans cette fonction, il faut d\82sallouer la m\82moire, X ressource, Pixmaps et
+graphics context.
+
+-refresh:
+ Celle ci est appel\82 lorsque le dessin peut \88tre abim\82. Le mode doit repeindre
+l'ensemble de la fen\88tre.
+
+-change: ???? <A FINIR>
+
+
+
+________________________________________________________________________________
+CONVERSION:
+Le prototype de ces fonctions est d\82fini dans mode.h et ressemble \85:
+ void typefonction _mode( ModeInfo *mode_info)
+La structure mode_info est en lecture seule, et contient l'ensemble des
+informations sur l'\82cran.
+Ne regardez pas les variables globales, n'\82crasez pas ce pointeur.
+Au lieu de faire des requetes pour conna\8ctre le num\82ro de la couleur blanche
+etc... , il y a des fonctions propres a xlock: utilisez les.
+
+
+
+
+________________________________________________________________________________
+L'AJOUT D'UN NOUVEAU MODE:
+
+Ajoutons un nouveau mode appel\82 fadeplot:
+Pour ce faire il faut d'abords ajouter dans mode.h
+® extern ModeHook init_fadeplot;
+extern ModeHook draw_fadeplot;
+extern ModeHook release_fadeplot;
+extern ModeHook refresh_fadeplot; ¯
+les fonctions qui vont \88tre cr\82\82s.
+
+® extern ModeSpecOpt fadeplot_opts; ¯
+une structure qui ne m'a pas r\82v\82l\82 tous ces secrets.
+
+mais aussi dans mode.c \85 cot\82 des autres fonctions , dans ce que j'appelle la
+ tableau des modes:
+ {"fadeplot", init_fadeplot, draw_fadeplot, release_fadeplot,
+ refresh_fadeplot, init_fadeplot, NULL, &blank_opts, 17000, 1, 20, 1.0,
+ "fadeplot", 0, NULL},
+
+On passe ensuite \85 l'impl\82mentation des fonctions proprement dit dans un fichier
+que l'on appellera fadeplot.c.
+Il est \82vident qu'il faudra modifier le Makefile ( Pour cela je vous laisse
+faire :).
+
+Dans ces fonctions, \85 partir de la structure ModeInfo, on va obtenir des
+informations sur l'\82cran qui sont indispensables pour la suite
+
+MI_WIN_WIDTH(mi) et MI_WIN_HEIGHT(mi) vont nous donn\82 la taille de l'\82cran.
+Display *display = MI_DISPLAY(mi); d\82livre le display
+Window window = MI_WINDOW(mi); d\82livre l'identificateur de la fen\88tre
+GC gc = MI_GC(mi); donne le graphics context courant
+XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ Mettre la couleur du trac\82 en noir
+XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+ Mettre la couleur du trac\82 en blanc
+
+MI_WIN_IS_ICONIC(mi) permet de savoir si on est pass\82 en phase
+ password.
+NUMCOLORS Donne le nombre de couleur
+
+
+Oubliez pas apr\8as avoir dessin\82 l'ensemble de faire Xflush(display),
+ce qui permettra d'afficher r\82ellement votre graphisme sur l'\82cran.
+La cr\82ation d'un nouveau mode s'\82ffectue souvent en r\82cup\82rant le squelette
+d'un autre et de le modifier \85 sa volont\82.
+N'h\82sitez pas a \85 regarder le code des autres modes, c'est souvent tr\82s
+instructifs.
+Dernierement on peut utiliser la librairie mesa (la libraire GNU OpenGL de
+silicon Graphics) dans xlock.
+Voila j'espere que vous prendrez plaisir a ajouter des nouveaux modes \85 xlock,
+ un petit conseil le mainteneur de xlock est un fan de casse t\88te et compagnie.
+Bon Xlock.
+
+Charles VIDAL: vidalc@univ-mlv.fr
+mode flag, fadeplot, circle
+createur de xmxlock : GUI launcher de xlockmore.
+
+------------------------------------------------------
+
+<HTML>
+<HEAD>
+<TITLE>Xlock french hacker</TITLE>
+</HEAD>
+<BODY>
+<Center><H1>XLOCK FRENCH HACKER</H1></Center>
+<BR>
+<H2>INTRODUCTION</H2>
+<HR>
+Ce document est pour tous ceux qui veulent modifier xlock (more), ajouter de nouveaux modes, debugger , etc....
+
+<H2>xlock kesako ?</H2>
+
+xlock est une application pour X-windows qui empêche l\92accès d\92un ou plusieurs écrans. Il peut être envoyé manuellement ou plus communément envoyé automatiquement par un démon après une périodes d\92inactivité.
+ Xlock créé une fenêtre couvrant entièrement l\92écran, et capte tous événements prévenant ainsi l\92accès extérieur.
+Quand une touche est pressée alors xlock affiche un message mais aussi le mode dans une icone (MODE_ICONIQUE) et demande votre mot de passe.<p>
+Lorsque l\92écran est locké ( fermé ), des images, des dessins, ou des animations sont affichées servant de screen-saver évitant la dégradation du phosphore.
+Xlock fut développé chez Sun Micro System par Pack J Naughton.David Bagley l\92a repris et maintenu sous le nom de Xlockmore dans lequel d\92innombrable mode ont été ajouté, ainsi que la possibilité d\92afficher un mode dans une fenêtre et aussi sur la root window ou d\92afficher sequentiellement plusieur mode par l\92option random et par l\92appuis du bouton du millieu.<p>
+Il existe des terminaux X avec plusieur ecrans gere par un seul terminal, alors le même mode s\92affichera sur plusieur ecran. On peut toutefois faire des effets, comme une balle passant de lui a l\92autre.
+
+<HR>
+<H2>ORGANISATION GENERALE</H2>
+
+xlock est organiser en deux partie.<p>
+
+<OL>
+<LI> le traitement de la ligne de commande, la création de fenêtre(s), le mot de passe, etc ...
+<LI> les modes: ils peuvent être coder de tel manière qu\92il n\92y a pas besoin de faire appel à X pour la taille de la fenêtre, les couleurs ... Une API est comprise dans xlock pour avoir tout les renseignements en ce qui concerne l\92écran.C\92est dans cette
+</OL>
+<HR>
+<B>L\92architecture logiciel d\92un mode est structuré en 4 sortes de fonctions:</B>
+<UL>
+<LI><U><B>-init:</B></U>
+celle-ci devra être appelle pour préparer le déroulement d\92un mode. Le mode devra initialiser des tables de sinus par exemple, allouer des ressources, mémoire entre autre, établir l\92état initial par des variables etc. ...
+Cette fonction peut être appelé plusieurs fois et la fenêtre ou l\92écran peuvent avoir des taille différentes.<p>
+
+<LI><U><B>-callback:</B></U>
+C\92est la principale fonction, c\92est la que est implementé le corps du mode. Elle est appelé périodiquement. Cette fonction ne doit pas occuper beaucoup de temps a s\92exécuter surtout si elle a plusieur ecran s\92occuper.
+Cette fonction peut etre appele dans deux contextes différents:
+ plein écran ou en version icon. La fonction MI_WIN_IS_ICONIC vous dira dans quelle contexte on se trouve.
+la fonction init_mode est toujours appelle avant la fonction callback.
+On peut choisir de faire quelque chose a chaque appelle, ou de compter le nombre d\92appelle, et puis de modifier l\92ecran periodiquement.<p>
+
+<LI><U><B>-release: </B></U>
+Ici, cette fonction sera appelé si un autre mode est appelé ( random , et bouton droit ), ou si xlock se termine. Dans cette fonction, il faut désallouer la mémoire, X ressource, Pixmaps et graphics context.
+<p>
+<LI><U><B>-refresh:</B></U>
+ Celle ci est appelé lorsque le dessin peut être abimé. Le mode doit repeindre l\92ensemble de la fenêtre.
+Aucun information sur la partie de l\92ecran endomage n\92est delivre.
+<p>
+<LI><U><B>-change:</B></U> Dans la version courante, seule le mode random utilise cette fonctionnalite. Cet fonction est appele lorsque que l\92on change de mode par l\92appuie du boutton du millieu. Il est laisse a l\92imagination de chacun en ce qui conserne
+</UL>
+
+
+<HR>
+<H2>CONVENTION:</H2>
+Le prototype de ces fonctions est défini dans mode.h et ressemble à :<p>
+<Center> void typefonction _mode( ModeInfo *mode_info)</Center>
+La structure mode_info est en lecture seule, et contient l\92ensemble des informations sur l\92écran. Ne regardez pas les variables globales, n\92écrasez pas ce pointeur. Au lieu de faire des requetes pour connaître le numéro de la couleur blanche etc... , il y a des fonctions propres a xlock: utilisez les. Si vous utilisez les informations passe en parametre des fonctions du modes ( voir ci dessus ), votre code sera toujours correcte.
+Le temps entre chaque appelle de fonctions est en milliseconde.
+
+<HR>
+<H2>L\92AJOUT D\92UN NOUVEAU MODE:</H2>
+
+Ajoutons un nouveau mode appelé <A HREF="file:fadeplot.txt">fadeplot</A>:<p>
+Pour ce faire il faut d\92abords ajouter dans mode.h<p>
+« extern ModeHook init_fadeplot;<p>
+extern ModeHook draw_fadeplot;<p>
+extern ModeHook release_fadeplot;<p>
+extern ModeHook refresh_fadeplot; »<p>
+les fonctions qui vont être créés.
+<p>
+« extern ModeSpecOpt fadeplot_opts; »<p>
+une structure qui ne m\92a pas révélé tous ces secrets.<p>
+
+mais aussi dans mode.c à coté des autres fonctions , dans ce que j\92appelle le tableau des modes:<p>
+ {"fadeplot", init_fadeplot, draw_fadeplot, release_fadeplot,
+ refresh_fadeplot, init_fadeplot, NULL, &blank_opts, 17000, 1, 20, 1.0,
+ "fadeplot", 0, NULL},<p>
+
+On passe ensuite à l\92implémentation des fonctions proprement dit dans un fichier que l\92on appellera fadeplot.c.<p>
+Il est évident qu\92il faudra modifier le Makefile ( Pour cela je vous laisse faire :).<p>
+Dans ces fonctions, à partir de la structure ModeInfo ( mode.h ) , on va obtenir des informations sur l\92écran qui sont indispensables pour la suite.<p>
+
+<TABLE Border=1>
+<CAPTION><B>fonction</B></CAPTION>
+<TR><TD>MI_WIN_WIDTH(mi) et MI_WIN_HEIGHT(mi)</TD> <TD>vont nous donné la taille de l\92écran</TD></TR>.
+<TR><TD>Display *display = MI_DISPLAY(mi);</TD> <TD>délivre le display</TD></TR>
+<TR> <TD> MI_SCREEN </TD> <TD>délivre le screen</TD></TR>
+<TR><TD>Window window = MI_WINDOW(mi)</TD>; <TD>délivre l\92identificateur de la fenêtre</TD></TR>
+<TR><TD>GC gc = MI_GC(mi);</TD> <TD>donne le graphics context courant</TD></TR>
+<TR> <TD>MI_DELAY</TD> <TD> donne le delai (microsec.) entre callbacks</TD></TR>
+<TR> <TD>MI_CMAP</TD> <TD>donne la table des couleurs</TD></TR>
+<TR><TD>XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));</TD> <TD>Mettre la couleur du tracé en noir</TD></TR>
+<TR><TD>XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));</TD> <TD>Mettre la couleur du tracé en blanc</TD></TR>
+<TR><TD>MI_WIN_IS_ICONIC(mi) </TD> <TD>permet de savoir si on est passé en phase password. </TD></TR>
+</TABLE>
+
+<TABLE Border=1>
+<CAPTION><B>variable</B></CAPTION>
+<TR><TD>MI_WIN_IS_MONO </TD> <TD>l\92ecran est monochrome</TD></TR>
+<TR><TD>MI_WIN_IS_INWINDOW</TD> <TD>le mode s\92affiche dans un fenetre reguliere</TD></TR>
+<TR><TD>MI_WIN_IS_INROOT </TD> <TD>le mode s\92affiche sur la root windows</TD></TR>
+<TR><TD>NUMCOLORS</TD> <TD>Donne le nombre de couleur</TD></TR>
+</TABLE>
+
+
+Oubliez pas après avoir dessiné l\92ensemble de faire Xflush(display), ce qui permettra d\92afficher réellement votre graphisme sur l\92écran.
+La création d\92un nouveau mode s\92éffectue souvent en récupérant le squelette d\92un autre et de le modifier à sa volonté.
+N\92hésitez pas a à regarder le code des autres modes, c\92est souvent trés instructifs.
+<HR>
+<H2>Perspective:</H2>
+Dernierement on peut utiliser la librairie mesa (la libraire OpenGL de silicon GNU) dans xlock, quelqu\92un s\92est propose de faire le screen-saver tube de Win NT.
+Je pense qu\92il serait interressant de joindre a xlock un langage simple ( genre logo un peu plus evolue).
+<HR>
+<H2>Reference: </H2>
+HACKERS.GUIDE qui se trouve dans le repertoire docs ( j\92ai essaye de le traduire :)<p>
+ X_Window programmation avec les Xt-Intrinsics Douglas A YOUNG MASSON PARIS.<p>
+<HR>
+Voila j\92espere que vous prendrez plaisir a ajouter des nouveaux modes à xlock; c\92est une maniere de programmer facilement des graphismes sous X11. Un petit conseil le mainteneur de xlock est un fan de casse tête et compagnie.
+Bon Xlock.
+<p>
+Charles VIDAL: vidalc@univ-mlv.fr<p>
+mode flag, fadeplot, circle<p>
+createur de xmxlock : GUI launcher de xlockmore.<p>
+
+</BODY>
+</HTML>
--- /dev/null
+Old Purify Problems (problems are now marked in code with "PURIFY")
+
+---
+Summary of unresolved memory problems with xlockmore-4.03
+cartoon - Possible 29756 byte memory leak from XPutImage
+swirl - Possible 256 byte memory leak from XPutImage
+life - Possible 132 byte memory leak from XPutImage
+resource.c - 1 byte memory leak
+There are also some unitialized memory reads that appear to be internal to X11.
+---
+
+SOLVED since xlockmore-4.02
+memory leaks: galaxy.c, life3d.c
+
+MesaGL 2.3 fixes many cumulative leaks and unitialized memory reads that existed
+in MesaGL 2.2. This affected all GL modes. MesaGL 2.3 or newer is recommended
+since it fixes these memory leaks and runs faster. Cumulative means that the
+memory leaks occur each time the mode is run when in random mode, which is why
+after some time it may crash xlock since it runs out of available memory.
+
+
+
+-------------
+Purify log from TS for xlockmore-4.03 (BETA2)
+Purify4.0.1 SunOS4 with XPM, RPLAY, and HACKERS enabled.
+-------------
+**** Purify instrumented ./xlock (pid 20572 at Tue Jul 8 17:05:31 1997)
+ * Purify 4.0.1 SunOS 4.1, Copyright (C) 1992-1996 Pure Atria Corp. All rights reserved.
+ * For contact information type: "purify -help"
+ * For TTY output, use the option "-windows=no"
+ * Command-line: ./xlock
+ * Options settings: -chain-length=25 -purify \
+ -purify-home=/vol/pure/purify-4.0.1-sunos4
+ * Purify licensed to MICRON TECHNOLOGY INC
+ * Purify checking enabled.
+
+**** Purify instrumented ./xlock (pid 20572) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ GetDatabase [libX11.so.4.10]
+ XrmGetFileDatabase [libX11.so.4.10]
+ parsefilepath [resource.c:1006]
+ getResources [resource.c:1295]
+ main [xlock.c:1797]
+ start [crt0.o]
+ * Reading 4 bytes from 0x344ec4 in the heap.
+ * Address 0x344ec4 is 4 bytes into a malloc'd block at 0x344ec0 of 12 bytes.
+ * This block was allocated from:
+ malloc [rtlib.o]
+ NewDatabase [libX11.so.4.10]
+ XrmGetFileDatabase [libX11.so.4.10]
+ parsefilepath [resource.c:1006]
+ getResources [resource.c:1295]
+ main [xlock.c:1797]
+ start [crt0.o]
+
+**** Purify instrumented ./xlock (pid 20572) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ GetDatabase [libX11.so.4.10]
+ XrmGetFileDatabase [libX11.so.4.10]
+ parsefilepath [resource.c:1006]
+ getResources [resource.c:1295]
+ main [xlock.c:1797]
+ start [crt0.o]
+ * Reading 4 bytes from 0x344ec4 in the heap.
+ * Address 0x344ec4 is 4 bytes into a malloc'd block at 0x344ec0 of 12 bytes.
+ * This block was allocated from:
+ malloc [rtlib.o]
+ NewDatabase [libX11.so.4.10]
+ XrmGetFileDatabase [libX11.so.4.10]
+ parsefilepath [resource.c:1006]
+ getResources [resource.c:1295]
+ main [xlock.c:1797]
+ start [crt0.o]
+
+**** Purify instrumented ./xlock (pid 20572) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ GetDatabase [libX11.so.4.10]
+ XrmGetFileDatabase [libX11.so.4.10]
+ parsefilepath [resource.c:1006]
+ getResources [resource.c:1325]
+ main [xlock.c:1797]
+ start [crt0.o]
+ * Reading 4 bytes from 0x35ce44 in the heap.
+ * Address 0x35ce44 is 4 bytes into a malloc'd block at 0x35ce40 of 12 bytes.
+ * This block was allocated from:
+ malloc [rtlib.o]
+ NewDatabase [libX11.so.4.10]
+ XrmGetFileDatabase [libX11.so.4.10]
+ parsefilepath [resource.c:1006]
+ getResources [resource.c:1325]
+ main [xlock.c:1797]
+ start [crt0.o]
+
+**** Purify instrumented ./xlock (pid 20572) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ GetDatabase [libX11.so.4.10]
+ XrmGetFileDatabase [libX11.so.4.10]
+ parsefilepath [resource.c:1006]
+ getResources [resource.c:1325]
+ main [xlock.c:1797]
+ start [crt0.o]
+ * Reading 4 bytes from 0x35ce44 in the heap.
+ * Address 0x35ce44 is 4 bytes into a malloc'd block at 0x35ce40 of 12 bytes.
+ * This block was allocated from:
+ malloc [rtlib.o]
+ NewDatabase [libX11.so.4.10]
+ XrmGetFileDatabase [libX11.so.4.10]
+ parsefilepath [resource.c:1006]
+ getResources [resource.c:1325]
+ main [xlock.c:1797]
+ start [crt0.o]
+
+**** Purify instrumented ./xlock (pid 20572) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ GetDatabase [libX11.so.4.10]
+ XrmGetStringDatabase [libX11.so.4.10]
+ getResources [resource.c:1364]
+ main [xlock.c:1797]
+ start [crt0.o]
+ * Reading 4 bytes from 0x343b9c in the heap.
+ * Address 0x343b9c is 4 bytes into a malloc'd block at 0x343b98 of 12 bytes.
+ * This block was allocated from:
+ malloc [rtlib.o]
+ NewDatabase [libX11.so.4.10]
+ XrmGetStringDatabase [libX11.so.4.10]
+ getResources [resource.c:1364]
+ main [xlock.c:1797]
+ start [crt0.o]
+
+**** Purify instrumented ./xlock (pid 20572) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ GetDatabase [libX11.so.4.10]
+ XrmGetStringDatabase [libX11.so.4.10]
+ getResources [resource.c:1364]
+ main [xlock.c:1797]
+ start [crt0.o]
+ * Reading 4 bytes from 0x343b9c in the heap.
+ * Address 0x343b9c is 4 bytes into a malloc'd block at 0x343b98 of 12 bytes.
+ * This block was allocated from:
+ malloc [rtlib.o]
+ NewDatabase [libX11.so.4.10]
+ XrmGetStringDatabase [libX11.so.4.10]
+ getResources [resource.c:1364]
+ main [xlock.c:1797]
+ start [crt0.o]
+
+**** Purify instrumented ./xlock (pid 20572) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ XrmDestroyDatabase [libX11.so.4.10]
+ getResources [resource.c:1454]
+ main [xlock.c:1797]
+ start [crt0.o]
+ * Reading 4 bytes from 0x344ec4 in the heap.
+ * Address 0x344ec4 is 4 bytes into a malloc'd block at 0x344ec0 of 12 bytes.
+ * This block was allocated from:
+ malloc [rtlib.o]
+ NewDatabase [libX11.so.4.10]
+ XrmGetFileDatabase [libX11.so.4.10]
+ parsefilepath [resource.c:1006]
+ getResources [resource.c:1295]
+ main [xlock.c:1797]
+ start [crt0.o]
+
+**** Purify instrumented ./xlock (pid 20572) ****
+Current file descriptors in use: 7
+FIU: file descriptor 0: <stdin>
+FIU: file descriptor 1: <stdout>
+FIU: file descriptor 2: <stderr>
+FIU: file descriptor 4: "/usr/local/xlock.staff", O_RDONLY
+ * File info: -rw-r--r-- 1 root staff 15 Apr 18 11:59
+ * File position: 15
+ * This file descriptor was allocated from:
+ open [rtlib.o]
+ _endopen [libc.so.1.8]
+ fopen [libc.so.1.8]
+ my_fopen [utils.c:168]
+ fullLock [logout.c:478]
+ getResources [resource.c:1471]
+ main [xlock.c:1797]
+ start [crt0.o]
+FIU: file descriptor 5: <unnamed socket>, O_RDWR
+ * This file descriptor was allocated from:
+ socket [rtlib.o]
+ clntudp_bufcreate [libc.so.1.8]
+ load_dom_binding [libc.so.1.8]
+ _yp_dobind_soft [libc.so.1.8]
+ _yp_dobind [libc.so.1.8]
+ yp_match [libc.so.1.8]
+ getnamefromyellow [libc.so.1.8]
+ matchuid [libc.so.1.8]
+ getpwuid [libc.so.1.8]
+ fullLock [logout.c:469]
+ getResources [resource.c:1471]
+ main [xlock.c:1797]
+ start [crt0.o]
+FIU: file descriptor 26: <reserved for Purify internal use>
+FIU: file descriptor 27: <reserved for Purify internal use>
+
+**** Purify instrumented ./xlock (pid 20572) ****
+Purify: Searching for all memory leaks...
+
+Memory leaked: 1 bytes (2.83e-05%); potentially leaked: 29756 bytes (0.843%)
+
+MLK: 1 byte leaked at 0x35d280
+ * This memory was allocated from:
+ malloc [rtlib.o]
+ GetResource [resource.c:886]
+ getResources [resource.c:1336]
+ main [xlock.c:1797]
+ start [crt0.o]
+
+PLK: 29756 bytes potentially leaked at 0x4cd5f8
+ * This memory was allocated from:
+ malloc [rtlib.o]
+ _XAllocScratch [libX11.so.4.10]
+ SendZImage [libX11.so.4.10]
+ PutImageRequest [libX11.so.4.10]
+ PutSubImage [libX11.so.4.10]
+ XPutImage [libX11.so.4.10]
+ put_cartoon [cartoon.c:210]
+ draw_cartoon [cartoon.c:354]
+ call_callback_hook [mode.c:493]
+ draw_random [random.c:394]
+ call_callback_hook [mode.c:493]
+ runMainLoop [xlock.c:1037]
+ justDisplay [xlock.c:1448]
+ lockDisplay [xlock.c:1611]
+ main [xlock.c:2242]
+ start [crt0.o]
+
+Purify Heap Analysis (combining suppressed and unsuppressed blocks)
+ Blocks Bytes
+ Leaked 2 13
+ Potentially Leaked 1 29756
+ In-Use 152 3501445
+ ----------------------------------------
+ Total Allocated 155 3531214
+
+**** Purify instrumented ./xlock (pid 20572) ****
+ * Program exited with status code 0.
+ * 7 access errors, 7 total occurrences.
+ * 1 byte leaked.
+ * 29756 bytes potentially leaked.
+ * Basic memory usage (including Purify overhead):
+ 2888048 code
+ 495704 data/bss
+ 15470848 heap (peak use)
+ 2096 stack
+ * Shared library memory usage (including Purify overhead):
+ 688128 libX11_pure_p3_c0_401_413V.so.4.10 (shared code)
+ 49152 libX11_pure_p3_c0_401_413V.so.4.10 (private data)
+ 49152 libXext_pure_p3_c0_401_413V.so.4.10 (shared code)
+ 8192 libXext_pure_p3_c0_401_413V.so.4.10 (private data)
+ 688128 libc_pure_p3_c0_401_413V.so.1.8 (shared code)
+ 16384 libc_pure_p3_c0_401_413V.so.1.8 (private data)
+ 8192 libdl.so.1.0 (shared code)
+ 8192 libdl.so.1.0 (private data)
+ 8192 libinternal_stubs.so.1.0 (shared code)
+ 8192 libinternal_stubs.so.1.0 (private data)
+ * Memory mapped usage:
+ 4096 mmap'd at 0xef1ed000
+
+
+-------------
+Purify log from MGB for xlockmore-3.12 with known solved problems removed
+Purify3.2 Solaris2 with XPM and HACKERS enabled.
+-------------
+
+**** Purify instrumented xlock (pid 13982 at Sat Nov 16 23:06:18 1996)
+ * Purify 3.2 Solaris 2, Copyright (C) 1992-1996 Pure Software Inc. All rights reserved.
+ * For contact information type: "purify -help"
+ * For TTY output, use the option "-windows=no"
+ * Command-line: ./xlock -mode random +enablesaver
+ * Options settings: -purify \
+ -purify-home=/private/projects/purify/purify-3.2-solaris2
+PureLA: 7 simple licenses, 8 users. Please remedy.
+ * Purify licensed to Universitaet Passau or FORWISS
+ * Purify checking enabled.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ process_getpw [getpwnam_r.c]
+ getpwuid_r [libc.so.1]
+ fullLock [logout.c:443]
+ getResources [resource.c:1173]
+ main [xlock.c:1590]
+ _start [crt1.o]
+ * Reading 4 bytes from 0xefffd720 on the stack.
+ * Address 0xefffd720 is 992 bytes below frame pointer in function getpwuid_r.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ process_getpw [getpwnam_r.c]
+ getpwuid_r [libc.so.1]
+ fullLock [logout.c:443]
+ getResources [resource.c:1173]
+ main [xlock.c:1590]
+ _start [crt1.o]
+ * Reading 4 bytes from 0xefffd71c on the stack.
+ * Address 0xefffd71c is 996 bytes below frame pointer in function getpwuid_r.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ process_getpw [getpwnam_r.c]
+ getpwuid_r [libc.so.1]
+ fullLock [logout.c:443]
+ getResources [resource.c:1173]
+ main [xlock.c:1590]
+ _start [crt1.o]
+ * Reading 4 bytes from 0xefffd718 on the stack.
+ * Address 0xefffd718 is 1000 bytes below frame pointer in function getpwuid_r.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ process_getpw [getpwnam_r.c]
+ getpwuid_r [libc.so.1]
+ fullLock [logout.c:443]
+ getResources [resource.c:1173]
+ main [xlock.c:1590]
+ _start [crt1.o]
+ * Reading 4 bytes from 0xefffd714 on the stack.
+ * Address 0xefffd714 is 1004 bytes below frame pointer in function getpwuid_r.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ process_getpw [getpwnam_r.c]
+ getpwuid_r [libc.so.1]
+ fullLock [logout.c:443]
+ getResources [resource.c:1173]
+ main [xlock.c:1590]
+ _start [crt1.o]
+ * Reading 4 bytes from 0xefffd708 on the stack.
+ * Address 0xefffd708 is 1016 bytes below frame pointer in function getpwuid_r.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ process_getpw [getpwnam_r.c]
+ getpwuid_r [libc.so.1]
+ fullLock [logout.c:443]
+ getResources [resource.c:1173]
+ main [xlock.c:1590]
+ _start [crt1.o]
+ * Reading 4 bytes from 0xefffd704 on the stack.
+ * Address 0xefffd704 is 1020 bytes below frame pointer in function getpwuid_r.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ process_getpw [getpwnam_r.c]
+ getpwuid_r [libc.so.1]
+ fullLock [logout.c:443]
+ getResources [resource.c:1173]
+ main [xlock.c:1590]
+ _start [crt1.o]
+ * Reading 4 bytes from 0xefffd724 on the stack.
+ * Address 0xefffd724 is 988 bytes below frame pointer in function getpwuid_r.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ strcmp [rtlib.o]
+ fullLock [logout.c:460]
+ getResources [resource.c:1173]
+ main [xlock.c:1590]
+ _start [crt1.o]
+ * Reading 9 bytes from 0x1a9798 in the heap.
+ * Address 0x1a9798 is 48 bytes into a malloc'd block at 0x1a9768 of 1072 bytes.
+ * This block was allocated from:
+ malloc [rtlib.o]
+ _nss_XbyY_buf_alloc [libc.so.1]
+ getpwuid [libc.so.1]
+ fullLock [logout.c:443]
+ getResources [resource.c:1173]
+ main [xlock.c:1590]
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ _nsc_trydoorcall [libc.so.1]
+ getpwnam_r [libc.so.1]
+ my_passwd_entry [passwd.c:275]
+ getUserName [passwd.c:348]
+ initPasswd [passwd.c:1464]
+ main [xlock.c:1594]
+ * Reading 4 bytes from 0xefffe298 on the stack.
+ * Address 0xefffe298 is 24 bytes below frame pointer in function _nsc_trydoorcall.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ _nsc_trydoorcall [libc.so.1]
+ getpwnam_r [libc.so.1]
+ my_passwd_entry [passwd.c:275]
+ getUserName [passwd.c:348]
+ initPasswd [passwd.c:1464]
+ main [xlock.c:1594]
+ * Reading 8 bytes from 0xefffe290 on the stack.
+ * Address 0xefffe290 is 32 bytes below frame pointer in function _nsc_trydoorcall.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ _nsc_trydoorcall [libc.so.1]
+ getpwnam_r [libc.so.1]
+ my_passwd_entry [passwd.c:275]
+ getUserName [passwd.c:348]
+ initPasswd [passwd.c:1464]
+ main [xlock.c:1594]
+ * Reading 4 bytes from 0xefffe29c on the stack.
+ * Address 0xefffe29c is 20 bytes below frame pointer in function _nsc_trydoorcall.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ process_getpw [getpwnam_r.c]
+ getpwnam_r [libc.so.1]
+ my_passwd_entry [passwd.c:275]
+ getUserName [passwd.c:348]
+ initPasswd [passwd.c:1464]
+ main [xlock.c:1594]
+ * Reading 4 bytes from 0xefffe340 on the stack.
+ * Address 0xefffe340 is 992 bytes below frame pointer in function getpwnam_r.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ process_getpw [getpwnam_r.c]
+ getpwnam_r [libc.so.1]
+ my_passwd_entry [passwd.c:275]
+ getUserName [passwd.c:348]
+ initPasswd [passwd.c:1464]
+ main [xlock.c:1594]
+ * Reading 4 bytes from 0xefffe33c on the stack.
+ * Address 0xefffe33c is 996 bytes below frame pointer in function getpwnam_r.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ process_getpw [getpwnam_r.c]
+ getpwnam_r [libc.so.1]
+ my_passwd_entry [passwd.c:275]
+ getUserName [passwd.c:348]
+ initPasswd [passwd.c:1464]
+ main [xlock.c:1594]
+ * Reading 4 bytes from 0xefffe338 on the stack.
+ * Address 0xefffe338 is 1000 bytes below frame pointer in function getpwnam_r.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ process_getpw [getpwnam_r.c]
+ getpwnam_r [libc.so.1]
+ my_passwd_entry [passwd.c:275]
+ getUserName [passwd.c:348]
+ initPasswd [passwd.c:1464]
+ main [xlock.c:1594]
+ * Reading 4 bytes from 0xefffe334 on the stack.
+ * Address 0xefffe334 is 1004 bytes below frame pointer in function getpwnam_r.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ process_getpw [getpwnam_r.c]
+ getpwnam_r [libc.so.1]
+ my_passwd_entry [passwd.c:275]
+ getUserName [passwd.c:348]
+ initPasswd [passwd.c:1464]
+ main [xlock.c:1594]
+ * Reading 4 bytes from 0xefffe328 on the stack.
+ * Address 0xefffe328 is 1016 bytes below frame pointer in function getpwnam_r.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ process_getpw [getpwnam_r.c]
+ getpwnam_r [libc.so.1]
+ my_passwd_entry [passwd.c:275]
+ getUserName [passwd.c:348]
+ initPasswd [passwd.c:1464]
+ main [xlock.c:1594]
+ * Reading 4 bytes from 0xefffe324 on the stack (3 bytes at 0xefffe325 uninit).
+ * Address 0xefffe324 is 1020 bytes below frame pointer in function getpwnam_r.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ process_getpw [getpwnam_r.c]
+ getpwnam_r [libc.so.1]
+ my_passwd_entry [passwd.c:275]
+ getUserName [passwd.c:348]
+ initPasswd [passwd.c:1464]
+ main [xlock.c:1594]
+ * Reading 4 bytes from 0xefffe344 on the stack.
+ * Address 0xefffe344 is 988 bytes below frame pointer in function getpwnam_r.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ my_passwd_entry [passwd.c:276]
+ getUserName [passwd.c:348]
+ initPasswd [passwd.c:1464]
+ main [xlock.c:1594]
+ _start [crt1.o]
+ * Reading 4 bytes from 0x1a977c in the heap.
+ * Address 0x1a977c is 20 bytes into a malloc'd block at 0x1a9768 of 1072 bytes.
+ * This block was allocated from:
+ malloc [rtlib.o]
+ _nss_XbyY_buf_alloc [libc.so.1]
+ getpwuid [libc.so.1]
+ fullLock [logout.c:443]
+ getResources [resource.c:1173]
+ main [xlock.c:1590]
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ strcpy [rtlib.o]
+ getUserName [passwd.c:351]
+ initPasswd [passwd.c:1464]
+ main [xlock.c:1594]
+ _start [crt1.o]
+ * Reading 9 bytes from 0x1a9798 in the heap.
+ * Address 0x1a9798 is 48 bytes into a malloc'd block at 0x1a9768 of 1072 bytes.
+ * This block was allocated from:
+ malloc [rtlib.o]
+ _nss_XbyY_buf_alloc [libc.so.1]
+ getpwuid [libc.so.1]
+ fullLock [logout.c:443]
+ getResources [resource.c:1173]
+ main [xlock.c:1590]
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ _nsc_trydoorcall [libc.so.1]
+ getpwnam_r [libc.so.1]
+ my_passwd_entry [passwd.c:275]
+ getCryptedUserPasswd [passwd.c:456]
+ initPasswd [passwd.c:1477]
+ main [xlock.c:1594]
+ * Reading 4 bytes from 0xefffe298 on the stack.
+ * Address 0xefffe298 is 24 bytes below frame pointer in function _nsc_trydoorcall.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ _nsc_trydoorcall [libc.so.1]
+ getpwnam_r [libc.so.1]
+ my_passwd_entry [passwd.c:275]
+ getCryptedUserPasswd [passwd.c:456]
+ initPasswd [passwd.c:1477]
+ main [xlock.c:1594]
+ * Reading 8 bytes from 0xefffe290 on the stack.
+ * Address 0xefffe290 is 32 bytes below frame pointer in function _nsc_trydoorcall.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ _nsc_trydoorcall [libc.so.1]
+ getpwnam_r [libc.so.1]
+ my_passwd_entry [passwd.c:275]
+ getCryptedUserPasswd [passwd.c:456]
+ initPasswd [passwd.c:1477]
+ main [xlock.c:1594]
+ * Reading 4 bytes from 0xefffe29c on the stack.
+ * Address 0xefffe29c is 20 bytes below frame pointer in function _nsc_trydoorcall.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ process_getpw [getpwnam_r.c]
+ getpwnam_r [libc.so.1]
+ my_passwd_entry [passwd.c:275]
+ getCryptedUserPasswd [passwd.c:456]
+ initPasswd [passwd.c:1477]
+ main [xlock.c:1594]
+ * Reading 4 bytes from 0xefffe340 on the stack.
+ * Address 0xefffe340 is 992 bytes below frame pointer in function getpwnam_r.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ process_getpw [getpwnam_r.c]
+ getpwnam_r [libc.so.1]
+ my_passwd_entry [passwd.c:275]
+ getCryptedUserPasswd [passwd.c:456]
+ initPasswd [passwd.c:1477]
+ main [xlock.c:1594]
+ * Reading 4 bytes from 0xefffe33c on the stack.
+ * Address 0xefffe33c is 996 bytes below frame pointer in function getpwnam_r.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ process_getpw [getpwnam_r.c]
+ getpwnam_r [libc.so.1]
+ my_passwd_entry [passwd.c:275]
+ getCryptedUserPasswd [passwd.c:456]
+ initPasswd [passwd.c:1477]
+ main [xlock.c:1594]
+ * Reading 4 bytes from 0xefffe338 on the stack.
+ * Address 0xefffe338 is 1000 bytes below frame pointer in function getpwnam_r.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ process_getpw [getpwnam_r.c]
+ getpwnam_r [libc.so.1]
+ my_passwd_entry [passwd.c:275]
+ getCryptedUserPasswd [passwd.c:456]
+ initPasswd [passwd.c:1477]
+ main [xlock.c:1594]
+ * Reading 4 bytes from 0xefffe334 on the stack.
+ * Address 0xefffe334 is 1004 bytes below frame pointer in function getpwnam_r.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ process_getpw [getpwnam_r.c]
+ getpwnam_r [libc.so.1]
+ my_passwd_entry [passwd.c:275]
+ getCryptedUserPasswd [passwd.c:456]
+ initPasswd [passwd.c:1477]
+ main [xlock.c:1594]
+ * Reading 4 bytes from 0xefffe328 on the stack.
+ * Address 0xefffe328 is 1016 bytes below frame pointer in function getpwnam_r.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ process_getpw [getpwnam_r.c]
+ getpwnam_r [libc.so.1]
+ my_passwd_entry [passwd.c:275]
+ getCryptedUserPasswd [passwd.c:456]
+ initPasswd [passwd.c:1477]
+ main [xlock.c:1594]
+ * Reading 4 bytes from 0xefffe324 on the stack (3 bytes at 0xefffe325 uninit).
+ * Address 0xefffe324 is 1020 bytes below frame pointer in function getpwnam_r.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ process_getpw [getpwnam_r.c]
+ getpwnam_r [libc.so.1]
+ my_passwd_entry [passwd.c:275]
+ getCryptedUserPasswd [passwd.c:456]
+ initPasswd [passwd.c:1477]
+ main [xlock.c:1594]
+ * Reading 4 bytes from 0xefffe344 on the stack.
+ * Address 0xefffe344 is 988 bytes below frame pointer in function getpwnam_r.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ my_passwd_entry [passwd.c:276]
+ getCryptedUserPasswd [passwd.c:456]
+ initPasswd [passwd.c:1477]
+ main [xlock.c:1594]
+ _start [crt1.o]
+ * Reading 4 bytes from 0x1a977c in the heap.
+ * Address 0x1a977c is 20 bytes into a malloc'd block at 0x1a9768 of 1072 bytes.
+ * This block was allocated from:
+ malloc [rtlib.o]
+ _nss_XbyY_buf_alloc [libc.so.1]
+ getpwuid [libc.so.1]
+ fullLock [logout.c:443]
+ getResources [resource.c:1173]
+ main [xlock.c:1590]
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read (2 times):
+ * This is occurring while in:
+ strlen [rtlib.o]
+ _nss_nis_ypmatch [nss_nis.so.1]
+ _nss_nis_lookup [nss_nis.so.1]
+ getbyname [getspent.c]
+ nss_search [libc.so.1]
+ getspnam_r [libc.so.1]
+ * Reading 9 bytes from 0x1a9798 in the heap.
+ * Address 0x1a9798 is 48 bytes into a malloc'd block at 0x1a9768 of 1072 bytes.
+ * This block was allocated from:
+ malloc [rtlib.o]
+ _nss_XbyY_buf_alloc [libc.so.1]
+ getpwuid [libc.so.1]
+ fullLock [logout.c:443]
+ getResources [resource.c:1173]
+ main [xlock.c:1590]
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ _nsc_trydoorcall [libc.so.1]
+ getpwnam_r [libc.so.1]
+ getCryptedRootPasswd [passwd.c:557]
+ initPasswd [passwd.c:1480]
+ main [xlock.c:1594]
+ _start [crt1.o]
+ * Reading 4 bytes from 0xefffe308 on the stack.
+ * Address 0xefffe308 is 24 bytes below frame pointer in function _nsc_trydoorcall.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ _nsc_trydoorcall [libc.so.1]
+ getpwnam_r [libc.so.1]
+ getCryptedRootPasswd [passwd.c:557]
+ initPasswd [passwd.c:1480]
+ main [xlock.c:1594]
+ _start [crt1.o]
+ * Reading 8 bytes from 0xefffe300 on the stack.
+ * Address 0xefffe300 is 32 bytes below frame pointer in function _nsc_trydoorcall.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ _nsc_trydoorcall [libc.so.1]
+ getpwnam_r [libc.so.1]
+ getCryptedRootPasswd [passwd.c:557]
+ initPasswd [passwd.c:1480]
+ main [xlock.c:1594]
+ _start [crt1.o]
+ * Reading 4 bytes from 0xefffe30c on the stack.
+ * Address 0xefffe30c is 20 bytes below frame pointer in function _nsc_trydoorcall.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ process_getpw [getpwnam_r.c]
+ getpwnam_r [libc.so.1]
+ getCryptedRootPasswd [passwd.c:557]
+ initPasswd [passwd.c:1480]
+ main [xlock.c:1594]
+ _start [crt1.o]
+ * Reading 4 bytes from 0xefffe3b0 on the stack.
+ * Address 0xefffe3b0 is 992 bytes below frame pointer in function getpwnam_r.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ process_getpw [getpwnam_r.c]
+ getpwnam_r [libc.so.1]
+ getCryptedRootPasswd [passwd.c:557]
+ initPasswd [passwd.c:1480]
+ main [xlock.c:1594]
+ _start [crt1.o]
+ * Reading 4 bytes from 0xefffe3ac on the stack.
+ * Address 0xefffe3ac is 996 bytes below frame pointer in function getpwnam_r.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ process_getpw [getpwnam_r.c]
+ getpwnam_r [libc.so.1]
+ getCryptedRootPasswd [passwd.c:557]
+ initPasswd [passwd.c:1480]
+ main [xlock.c:1594]
+ _start [crt1.o]
+ * Reading 4 bytes from 0xefffe3a8 on the stack.
+ * Address 0xefffe3a8 is 1000 bytes below frame pointer in function getpwnam_r.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ process_getpw [getpwnam_r.c]
+ getpwnam_r [libc.so.1]
+ getCryptedRootPasswd [passwd.c:557]
+ initPasswd [passwd.c:1480]
+ main [xlock.c:1594]
+ _start [crt1.o]
+ * Reading 4 bytes from 0xefffe3a4 on the stack.
+ * Address 0xefffe3a4 is 1004 bytes below frame pointer in function getpwnam_r.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ process_getpw [getpwnam_r.c]
+ getpwnam_r [libc.so.1]
+ getCryptedRootPasswd [passwd.c:557]
+ initPasswd [passwd.c:1480]
+ main [xlock.c:1594]
+ _start [crt1.o]
+ * Reading 4 bytes from 0xefffe398 on the stack.
+ * Address 0xefffe398 is 1016 bytes below frame pointer in function getpwnam_r.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ process_getpw [getpwnam_r.c]
+ getpwnam_r [libc.so.1]
+ getCryptedRootPasswd [passwd.c:557]
+ initPasswd [passwd.c:1480]
+ main [xlock.c:1594]
+ _start [crt1.o]
+ * Reading 4 bytes from 0xefffe394 on the stack.
+ * Address 0xefffe394 is 1020 bytes below frame pointer in function getpwnam_r.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ process_getpw [getpwnam_r.c]
+ getpwnam_r [libc.so.1]
+ getCryptedRootPasswd [passwd.c:557]
+ initPasswd [passwd.c:1480]
+ main [xlock.c:1594]
+ _start [crt1.o]
+ * Reading 4 bytes from 0xefffe3b4 on the stack.
+ * Address 0xefffe3b4 is 988 bytes below frame pointer in function getpwnam_r.
+
+**** Purify instrumented xlock (pid 13982) ****
+UMR: Uninitialized memory read:
+ * This is occurring while in:
+ strcpy [rtlib.o]
+ getCryptedRootPasswd [passwd.c:567]
+ initPasswd [passwd.c:1480]
+ main [xlock.c:1594]
+ _start [crt1.o]
+ * Reading 2 bytes from 0x1a979d in the heap.
+ * Address 0x1a979d is 53 bytes into a malloc'd block at 0x1a9768 of 1072 bytes.
+ * This block was allocated from:
+ malloc [rtlib.o]
+ _nss_XbyY_buf_alloc [libc.so.1]
+ getpwuid [libc.so.1]
+ fullLock [logout.c:443]
+ getResources [resource.c:1173]
+ main [xlock.c:1590]
+
+**** Purify instrumented xlock (pid 13982) ****
+Process 14073 about to exec /bin/sh as "sh".
+
+**** Purify instrumented xlock (pid 13982) ****
+Process 14094 about to exec /bin/sh as "sh".
+
+**** Purify instrumented xlock (pid 13982) ****
+Process 14096 about to exec /bin/sh as "sh".
+.
+. repeats a lot (David Bagley)
+.
+**** Purify instrumented xlock (pid 13982) ****
+Process 15649 about to exec /bin/sh as "sh".
+
+**** Purify instrumented xlock (pid 13982) ****
+Process 15651 about to exec /bin/sh as "sh".
+
+**** Purify instrumented xlock (pid 13982) ****
+Current file descriptors in use: 11
+FIU: file descriptor 0: <stdin>
+FIU: file descriptor 1: <unnamed pipe[1]>, O_RDWR
+ * Duplication of file descriptor 10.
+ * File position: 355929
+ * This file descriptor was allocated from:
+ fcntl [libc.so.1]
+ popen [libc.so.1]
+ getWords [utils.c:215]
+ think [nose.c:258]
+ move [nose.c:133]
+ draw_nose [nose.c:466]
+FIU: file descriptor 2: <stderr>
+FIU: file descriptor 4: "/etc/.name_service_door", O_RDONLY
+ * File info: ?r--r--r-- 1 root root 0 Apr 1 1996
+ * This file descriptor was allocated from:
+ open [libc.so.1]
+ _nsc_trydoorcall [libc.so.1]
+ getpwuid_r [libc.so.1]
+ fullLock [logout.c:443]
+ getResources [resource.c:1173]
+ main [xlock.c:1590]
+FIU: file descriptor 5: <inherited from parent>
+FIU: file descriptor 6: <inherited from parent>
+FIU: file descriptor 7: "/common/staff/bmg/etc/xlock.staff", O_RDONLY
+ * File info: -rw-r--r-- 1 berberic public 9 Nov 16 20:17
+ * File position: 9
+ * This file descriptor was allocated from:
+ open [libc.so.1]
+ _endopen [fopen.c]
+ fopen [libc.so.1]
+ fullLock [logout.c:452]
+ getResources [resource.c:1173]
+ main [xlock.c:1590]
+FIU: file descriptor 8: "/dev/udp", O_RDWR
+ * File info: c--------- 0 root root 0 Nov 16 23:06
+ * File position: 0
+ * This file descriptor was allocated from:
+ open [libc.so.1]
+ t_open [t_open.c]
+ clnt_tli_create [clnt_generic.c]
+ load_dom_binding [yp_bind.c]
+ check_binding [yp_bind.c]
+ __yp_dobind [yp_bind.c]
+FIU: file descriptor 26: <reserved for Purify internal use>
+FIU: file descriptor 27: <reserved for Purify internal use>
+FIU: file descriptor 63: <inherited from parent>
+
+**** Purify instrumented xlock (pid 13982) ****
+Purify: Searching for all memory leaks...
+
+Memory leaked: 421896 bytes (70%); potentially leaked: 73149 bytes (12.1%)
+
+MLK: 83968 bytes leaked in 6 chunks
+ * This memory was allocated from:
+ malloc [rtlib.o]
+ startover [galaxy.c:141]
+ init_galaxy [galaxy.c:256]
+ call_init_hook [mode.c:403]
+ draw_random [random.c:301]
+ call_callback_hook [mode.c:432]
+ * Chunk of 18496 bytes at 0x244fe0
+ * Chunk of 18112 bytes at 0x28aed8
+ * Chunk of 15040 bytes at 0x234160
+ * Chunk of 11584 bytes at 0x217ba8
+ * Chunk of 11136 bytes at 0x1f1ec0
+ * Chunk of 9600 bytes at 0x1d3ae8
+
+MLK: 40070 bytes leaked in 1044 chunks
+ * This memory was allocated from:
+ malloc [rtlib.o]
+ XStringListToTextProperty [omXChar.c]
+ set_window_title [mode.c:335]
+ call_init_hook [mode.c:401]
+ draw_random [random.c:301]
+ call_callback_hook [mode.c:432]
+ * Chunk of 67 bytes (17 times); last chunk at 0x2a0958
+ * Chunk of 61 bytes (17 times); last chunk at 0x2a5830
+ * Chunk of 60 bytes (17 times); last chunk at 0x2bf2e0
+ * Chunk of 58 bytes (17 times); last chunk at 0x2bd900
+ * Chunk of 55 bytes (33 times); last chunk at 0x2bfd40
+ * Chunk of 52 bytes (17 times); last chunk at 0x2a5330
+ * Chunk of 51 bytes (17 times); last chunk at 0x287480
+ * Chunk of 49 bytes (34 times); last chunk at 0x2af4b8
+ * Chunk of 48 bytes (17 times); last chunk at 0x2bef30
+ * Chunk of 47 bytes (34 times); last chunk at 0x2bc690
+ * Chunk of 46 bytes (51 times); last chunk at 0x2bfdc0
+ * Chunk of 45 bytes (17 times); last chunk at 0x2bc710
+ * Chunk of 44 bytes (17 times); last chunk at 0x2bd578
+ * Chunk of 43 bytes (17 times); last chunk at 0x2bc7f8
+ * Chunk of 42 bytes (17 times); last chunk at 0x2bd4f8
+ * Chunk of 40 bytes (83 times); last chunk at 0x2bdcc8
+ * Chunk of 39 bytes (51 times); last chunk at 0x2d3d68
+ * Chunk of 38 bytes (83 times); last chunk at 0x2bf5a8
+ * Chunk of 37 bytes (17 times); last chunk at 0x2b02f0
+ * Chunk of 36 bytes (16 times); last chunk at 0x2bf168
+ * Chunk of 35 bytes (34 times); last chunk at 0x2bc788
+ * Chunk of 34 bytes (17 times); last chunk at 0x2a58b8
+ * Chunk of 33 bytes (67 times); last chunk at 0x2a5f50
+ * Chunk of 32 bytes (17 times); last chunk at 0x2d3ef8
+ * Chunk of 31 bytes (17 times); last chunk at 0x2bf418
+ * Chunk of 30 bytes (51 times); last chunk at 0x2d3f60
+ * Chunk of 29 bytes (84 times); last chunk at 0x2beda0
+ * Chunk of 27 bytes (68 times); last chunk at 0x2d3dd8
+ * Chunk of 25 bytes (50 times); last chunk at 0x2bc898
+ * Chunk of 24 bytes (34 times); last chunk at 0x2956a0
+ * Chunk of 22 bytes (16 times); last chunk at 0x2afc40
+
+MLK: 4288 bytes leaked in 67 chunks
+ * This memory was allocated from:
+ malloc [rtlib.o]
+ calloc [rtlib.o]
+ BaseOffset [life3d.c:1278]
+ SetMem [life3d.c:1301]
+ GetPattern [life3d.c:1503]
+ init_life3d [life3d.c:1994]
+ * Chunk of 64 bytes (67 times); last chunk at 0x2bf390
+
+MLK: 3072 bytes leaked in 48 chunks
+ * This memory was allocated from:
+ malloc [rtlib.o]
+ calloc [rtlib.o]
+ BaseOffset [life3d.c:1278]
+ ChangeMem [life3d.c:1313]
+ IncrementNbrs3D [life3d.c:1352]
+ RunLife3D [life3d.c:1382]
+ * Chunk of 64 bytes (48 times); last chunk at 0x2b07c0
+
+MLK: 1024 bytes leaked at 0x1cbb18
+ * This memory was allocated from:
+ malloc [rtlib.o]
+ _nss_files_XY_all [nss_files.so.1]
+ nss_search [libc.so.1]
+ getspnam_r [libc.so.1]
+ getCryptedUserPasswd [passwd.c:460]
+ initPasswd [passwd.c:1477]
+
+MLK: 1024 bytes leaked at 0x1cc620
+ * This memory was allocated from:
+ malloc [rtlib.o]
+ _nss_files_XY_all [nss_files.so.1]
+ nss_search [libc.so.1]
+ getspnam_r [libc.so.1]
+ getCryptedRootPasswd [passwd.c:562]
+ initPasswd [passwd.c:1480]
+
+MLK: 285 bytes leaked in 6 chunks
+ * This memory was allocated from:
+ malloc [rtlib.o]
+ XStringListToTextProperty [omXChar.c]
+ set_window_title [mode.c:335]
+ call_init_hook [mode.c:401]
+ init_random [random.c:271]
+ call_init_hook [mode.c:403]
+ * Chunk of 61 bytes (3 times); last chunk at 0x2bf6d0
+ * Chunk of 36 bytes at 0x1d14d0
+ * Chunk of 33 bytes (2 times); last chunk at 0x2682a8
+
+MLK: 189 bytes leaked in 3 chunks
+ * This memory was allocated from:
+ malloc [rtlib.o]
+ XStringListToTextProperty [omXChar.c]
+ set_window_title [mode.c:335]
+ call_init_hook [mode.c:401]
+ justDisplay [xlock.c:1309]
+ lockDisplay [xlock.c:1522]
+ * Chunk of 63 bytes (3 times); last chunk at 0x2913e8
+
+MLK: 189 bytes leaked in 3 chunks
+ * This memory was allocated from:
+ malloc [rtlib.o]
+ XStringListToTextProperty [omXChar.c]
+ set_window_title [mode.c:335]
+ call_init_hook [mode.c:401]
+ ReadXString [xlock.c:965]
+ getPassword [xlock.c:1218]
+ * Chunk of 63 bytes (3 times); last chunk at 0x2bde48
+
+MLK: 64 bytes leaked at 0x26c9b8
+ * This memory was allocated from:
+ malloc [rtlib.o]
+ calloc [rtlib.o]
+ BaseOffset [life3d.c:1278]
+ SetMem [life3d.c:1301]
+ shooter [life3d.c:1806]
+ draw_life3d [life3d.c:2018]
+
+MLK: 64 bytes leaked at 0x27d990
+ * This memory was allocated from:
+ malloc [rtlib.o]
+ calloc [rtlib.o]
+ BaseOffset [life3d.c:1278]
+ SetMem [life3d.c:1301]
+ shooter [life3d.c:1804]
+ draw_life3d [life3d.c:2018]
+
+MLK: 1 byte leaked at 0x1bdce0
+ * This memory was allocated from:
+ malloc [rtlib.o]
+ GetResource [resource.c:784]
+ getResources [resource.c:1062]
+ main [xlock.c:1590]
+ _start [crt1.o]
+
+PLK: 27968 bytes potentially leaked in 2 chunks
+ * This memory was allocated from:
+ malloc [rtlib.o]
+ startover [galaxy.c:141]
+ draw_galaxy [galaxy.c:365]
+ call_callback_hook [mode.c:432]
+ draw_random [random.c:303]
+ call_callback_hook [mode.c:432]
+ * Chunk of 16256 bytes at 0x2602e8
+ * Chunk of 11712 bytes at 0x237c68
+
+PLK: 27136 bytes potentially leaked in 2 chunks
+ * This memory was allocated from:
+ malloc [rtlib.o]
+ startover [galaxy.c:141]
+ init_galaxy [galaxy.c:256]
+ call_init_hook [mode.c:403]
+ draw_random [random.c:301]
+ call_callback_hook [mode.c:432]
+ * Chunk of 14400 bytes at 0x21f778
+ * Chunk of 12736 bytes at 0x20f5c8
+
+PLK: 133 bytes potentially leaked in 3 chunks
+ * This memory was allocated from:
+ malloc [rtlib.o]
+ XStringListToTextProperty [omXChar.c]
+ set_window_title [mode.c:335]
+ call_init_hook [mode.c:401]
+ draw_random [random.c:301]
+ call_callback_hook [mode.c:432]
+ * Chunk of 55 bytes at 0x1c0370
+ * Chunk of 40 bytes at 0x205fe8
+ * Chunk of 38 bytes at 0x1f07f8
+
+Purify Heap Analysis (combining suppressed and unsuppressed chunks)
+ Chunks Bytes
+ Leaked 2482 421896
+ Potentially Leaked 27 81349
+ In-Use 404 99180
+ ----------------------------------------
+ Total Allocated 2913 602425
+
+**** Purify instrumented xlock (pid 13982) ****
+ * Program exited with status code 0.
+ * 67 access errors, 63424 total occurrences.
+ * 421896 bytes leaked.
+ * 73149 bytes potentially leaked.
+ * Basic memory usage (including Purify overhead):
+ 1281336 code
+ 296700 data/bss
+ 7217156 heap (peak use)
+ 4544 stack
+ * Shared library memory usage (including Purify overhead):
+ 66392 libXext.so.6.0_pure_p1_c0_032_55.so.6.0 (shared code)
+ 1568 libXext.so.6.0_pure_p1_c0_032_55.so.6.0 (private data)
+ 53931 libSM.so.6.0_pure_p1_c0_032_55.so.6.0 (shared code)
+ 3520 libSM.so.6.0_pure_p1_c0_032_55.so.6.0 (private data)
+ 116342 libICE.so.6.0_pure_p1_c0_032_55.so.6.0 (shared code)
+ 11916 libICE.so.6.0_pure_p1_c0_032_55.so.6.0 (private data)
+ 1021050 libX11.so.6.0_pure_p1_c0_032_55.so.6.0 (shared code)
+ 34092 libX11.so.6.0_pure_p1_c0_032_55.so.6.0 (private data)
+ 80960 libXpm.so.4.3_pure_p1_c0_032_55.so.4.3 (shared code)
+ 2456 libXpm.so.4.3_pure_p1_c0_032_55.so.4.3 (private data)
+ 135785 libm.so.1_pure_p1_c0_032_55.so.1 (shared code)
+ 5872 libm.so.1_pure_p1_c0_032_55.so.1 (private data)
+ 75114 libsocket.so.1_pure_p1_c0_032_55.so.1 (shared code)
+ 4092 libsocket.so.1_pure_p1_c0_032_55.so.1 (private data)
+ 610638 libnsl.so.1_pure_p1_c0_032_55.so.1 (shared code)
+ 64760 libnsl.so.1_pure_p1_c0_032_55.so.1 (private data)
+ 802819 libc.so.1_pure_p1_c0_032_55.so.1 (shared code)
+ 33644 libc.so.1_pure_p1_c0_032_55.so.1 (private data)
+ 1204 libdl.so.1_pure_p1_c0_032_55.so.1 (shared code)
+ 0 libdl.so.1_pure_p1_c0_032_55.so.1 (private data)
+ 1889 libinternal_stubs.so.1 (shared code)
+ 208 libinternal_stubs.so.1 (private data)
+ 14073 libintl.so.1_pure_p1_c0_032_55.so.1 (shared code)
+ 3676 libintl.so.1_pure_p1_c0_032_55.so.1 (private data)
+ 16096 libmp.so.1_pure_p1_c0_032_55.so.1 (shared code)
+ 828 libmp.so.1_pure_p1_c0_032_55.so.1 (private data)
+ 37381 libw.so.1_pure_p1_c0_032_55.so.1 (shared code)
+ 1612 libw.so.1_pure_p1_c0_032_55.so.1 (private data)
+ 21322 nss_files.so.1_pure_p1_c0_032_55.so.1 (shared code)
+ 1224 nss_files.so.1_pure_p1_c0_032_55.so.1 (private data)
+ 21994 nss_nis.so.1_pure_p1_c0_032_55.so.1 (shared code)
+ 1536 nss_nis.so.1_pure_p1_c0_032_55.so.1 (private data)
--- /dev/null
+xlockmore-4.03 as of 10 July 1997, the maintained version of xlock
+Adapted from Patrick J. Naughton's original xlock
+Primary site: ftp.x.org in /contrib/applications
+Secondary site: sunsite.unc.edu in /pub/Linux/X11/xutils/screensavers
+Maintainer: David A. Bagley <bagleyd@bigfoot.com>
+ http://wauug.erols.com/~bagleyd
+Alpha group currently consists of Jouk Jansen (VMS), David Hansen (security),
+ Ed Mackey (GL), Tom Schmidt (Purify), Marcelo Vianna (GL),
+ Jamie Zawinski (xscreeensaver compatibility), and myself.
+ Other contributers are always welcome. :)
+Please send all bug reports to bagleyd@bigfoot.com .
+
+Make sure you use the new XLock.ad resource file (or at least remove the old
+one) otherwise several modes will not be set up nicely. This is usually put
+as a file in $HOME/XLock and/or $WHEREVER_X11_IS_LOADED/lib/app-defaults/XLock .
+
+BUGS to fix and other stuff to do
+ See "Some open problems" in the README.
+
+Stuff in the queue for 4.04:
+ neighbors option for wator and voters... sometimes circles are not drawn
+ in the correct spot
+ bounce to react to multiscreens, -wall mode option
+ -mode bounce -inroot may give BadWindow in X_GetWindowAttributes
+ if run for a while, but the screen is not locked :)
+ clean up fadeplot
+ squig and creature additions?
+ app-defaults and DEF_FILESEARCHPATH is not set up correctly
+ by configure using defaults. Imakefile makes a better guess.
+ more compatiblity with xscreensaver, SCO and DEC passwording
+
+4.03
+ Thanks to Jouk Jansen <joukj@crys.chem.uva.nl> for VMS GL patches and
+ new mode, crystal.
+ Thanks to Ed Mackey <emackey@early.com> for taking out some common code
+ to all GL modes and placed it in utils.c. Also found BIG leak in
+ gears.c, rewrote sproingies (now handles more sproingies and have
+ better explosions and not have 2 sproingies generated from the same
+ spot at the same time). Added many neat things to pipes.
+ Thanks to Tom Schmidt <tschmidt@micron.com> for his memory leak fixes
+ to xmlock.c and option.c. More unresolved leaks and uninitialized memory
+ reads are noted in the source. Handle matherr in utils.c.
+ Fixed uninitialized memory reads in pyro and worm for -use3d.
+ Thanks to Marcelo F. Vianna <vianna@cat.cbpf.br> for speed ups in all gl
+ modes. Removed conflict between pipes and superquadrics & sproingies.
+ Pipes to handle -inwindow better. Created the great new escher gl mode.
+ Thanks to Jamie Zawinski <jwz@netscape.com> for
+ VMS hlp capablitity make -f Makefile.in hlp
+ braid spin can go the other way, flag font and image capability,
+ ifs and strange less flashy, julia mouse option, sphere draws all 4 ways
+ swirl depugged on 24 bit sgi... it needs 32 bits
+ Thanks to Curtis Larsen <larsen@rtp3.med.utah.edu> for a new improved
+ bounce mode when run in -inroot.
+ Thanks to Jeff Epler <jepler@inetnebr.com> for less tight turns in pipes.
+ Thanks to Scott Carter <scarter@sdsc.edu> for check that only regular files
+ are read in the .xlockmessage, .plan, .signature. (Tom Schmidt did this
+ for all fopen calls except one :) ).
+ Tabs here are now interpreted.
+ Jason Larke <jlarke@psc.lsa.umich.edu> for his AFS patch so nonsence lines
+ in passwd or shadow do not cause the xlock to barf.
+ release code now called in finish originally written by Ron Hitchens
+ <ron@idiom.com>.
+ XSetScreensaver now only called if locking the screen. Also able to turn
+ it off now in blank mode.
+ starting to remove the dependencies on MAXSCREENS and NUMCOLORS
+ bigcrypt added for HP secure passwords.
+ `xlock -mode spline -cycles 1 -erase` fixed.
+ boubloule bug solve using -use3d. all3d modelist option added.
+ New mode added, voters.
+ life3d.c leak fix.
+ Lifeforms added P3 Question, P8 Asym, and P8 Smiley added from
+ http://www.halcyon.com/hkoenig/LifeInfo/LifeInfo.html
+ life.c can now handle -neighbors 3, 4, 6, 8, 9 and 12. New pointer
+ algorithm. Hexagons for life, demon, & ant now look better.
+ wator.c can now handle -neighbors 3, 4, 6, 8, 9 and 12.
+ hop fix for multiscreens. Most of xmartin2.2 algorithms stolen. xmartin
+ was written by Ed Kubaitis <ejk@ux2.cso.uiuc.edu>.
+ a swirl fix for multisceens... one screen if larger than the other would
+ not reach its maximum size.
+ xmlock string options are now all in quotes.
+ bitmaps, pixmap and flag links are now no longer destroyed with a make
+ clean.
+ stderr is used for the VERBOSE stuff unless its informational stuff about
+ the mode as in ant and life*.
+ tube nolonger changes fg and bg. Should nolonger bomb out on TrueColor.
+ Can now use Makefile to adjust SYSLOG stuff.
+ Found a bug in ant and galaxy fixed on the HP-UX 9.0.
+ Got rid of some flashing of the grelb on eyes.
+ Reinitialize qix lines on each init_qix call. This gets rid of old lines
+ reappearing.
+ Added -imagefile option for bitmaps in life, life1d, and maze. eyes and
+ pacman will require more thought. flag now can have a runtime message or
+ use bitmaps. Thanks to Jamie Zawinski.
+ Put random colors on the nose guy.
+ Added -grabserver option for unsecure SGI.
+ Bug in strcat_firstword fixed thanks to <Jeffrey_Doggett@caradon.com>
+ Fix for ":not found" text that appears after about 40 minutes.
+
+4.02
+ Logout patch for SUNOS4, galaxy and life3d leak fix thanks to Tom Schmidt.
+ inline and seteuid patches for configure and xlock.h.
+ flag-freebsd.h added.
+ First mode was not being released in random mode. Fixed.
+ new ellipse code from Dan Stromberg <strombrg@nis.acs.uci.edu> (formerly
+ named trig) added to helix (xlock -mode helix -ellipse).
+ -fullrandom option added to make xlock more random. Thanks to Jouk
+ Jansen <joukj@crys.chem.uva.nl>. So far only drift, helix, hop, &
+ spline are set up. Spline in -erase mode has cycles divided by 64
+ so it is compatible with +erase. New options added to hop (-jong
+ and -sine).
+ Got SunC++, GnuC++, DECC++ errors and warnings out of xlock.c, passwd.c,
+ utils.c, logout.c, cartoon.c, clock.c, galaxy.c, life1d.c, turtle.c,
+ worm.c, bomb.c, fract.c, tube.c . It still does not link.
+ GnuC++ was tested on Linux and Solaris. Thanks to Jouk Jansen
+ <joukj@crys.chem.uva.nl> for the DECC++ patches.
+ Thanks to Tom Schmidt <tschmidt@micron.com> for his memory leak fixes
+ to gears.c, mode.c, & resource.c. MesaGL 2.1 has some leaks that were
+ reported to the MesaGL maintainer and fixed in 2.2. Also fixed swirl,
+ and GL modes so they always default to the best visual. Also added
+ -visual (available with hackers code). gears and morph3d fixed to be
+ more random at start.
+ gears and morph3d multiscreen bug fixed by Brian Paul
+ <brianp@ra.avid.com> MesaGL creator.
+ Thanks to Massimino Pascal <Pascal.Massimon@ens.fr> for ifs and strange.
+ Thanks to Marcelo F. Vianna <vianna@cat.cbpf.br> for morph3d and pipes.
+ Thanks to Dan Stromberg <strombrg@nis.acs.uci.edu> for tube.
+ Thanks to Caleb Cullen <CCullen@hal-pc.org> for lisa.
+ On Solaris, initial random mode was not random. This was fixed by a
+ cast for SRAND. Also updated refrerences for seconds() from long or
+ int to unsigned long. time(NULL) will exceed maximum signed int in
+ 2038.
+ flag jumpiness and gears -mono fixed thanks to Ed Mackey
+ <emackey@early.com> http://www.early.com/~emackey/sproingies/.
+ Sproingies and superquadrics GL modes and -wireframe option added.
+ "configure --enable-sproingies" sproingies is not compiled in by
+ default since it may run VERY slow on some machines. Also the -size
+ option may help you here (thanks to Tom Schmidt for this option).
+ Thanks to Tracy Camp <campt@hurrah.com> for fract with improvements by
+ David Hansen <dhansen@metapath.com>.
+ "Minor" security hole noticed by David Hedley <hedley@cs.bris.ac.uk>.
+ Minor in that the array is in the heap and not the stack, so it would
+ be tricky to write an exploit. Patched up by David Hansen
+ <dhansen@metapath.com>.
+ Debian bug report fix Bug#8276: xlockmore: xlock -help should output
+ to stdout rather stderr, thanks to Heiko Schlittermann
+ <heiko@lotte.sax.de> for pointing it out. xlock -version fixed too.
+ Debian bug report fix Bug#8406: app file was not being read when configure
+ was used. Fixed. Thanks to Herbert Xu <herbert@greathan.apana.org.au>
+ and Dirk Eddelbuettel <edd@rosebud.sps.queensu.ca> for pointing it out.
+ added allnice, allstandard, allstable to modelist choices for the
+ random mode. Any mode that runs slower than star mode is considered
+ not nice. If gl modes are compiled in, these are considered
+ nonstandard modes. If hackers modes are compiled in, these are
+ considered unstable modes. To get only GL modes try:
+ xlock -mode random -modelist allstable-allstandard
+ allgl works too if you don'w ant to type that much. :)
+ X11 ico added added dodecahedron, tetrahedron, and the star octahedron.
+ -face and other options were removed to ease port.
+ -resources now prints out the resources for mode options.
+ button-logout and auto-logout rearranged. Also the logout button should
+ no longer overwrite your plan. See "configure --help". Note: 0 is a
+ special case and handled as infinity.
+ -icongeometry 1x1 fixes for bug, hop, and triangle .
+ fvwm2 menus thanks to James G. Feeney <james@albion.glarp.com>
+ Changed pause on multiscreens so that if pausing the second screen will
+ not override it. Its not exactly right but I am happy with it for now.
+ Thanks to Charles K. Hines <chuck_hines@vnet.ibm.com> for fixing grav.c
+ bug, casts to unsigned int.
+ LDFLAGS used if using cc on Solaris. There could be library problems if
+ setuid to root.
+ -neighbors 8 & 3 added to ant and 8, 3, 9, & 12 added for demon.
+ Fix on FreeBSD with xlock setuid and xdm for $HOME/.Xauthority thanks to
+ Thomas Gellekum <thomas@ghpc6.ihf.rwth-aachen.de>.
+ -sequential option for random. Since the random mode is the most easily
+ broken... its good to have repeatability.
+
+4.01
+ Fix in xlock.c if the HOME variable is not set. Fix in demon.c for
+ multiscreens thanks to David Hansen <dhansen@metapath.com>.
+ Security hole when xlock is setuid to root found by Richard Jones
+ <richard@a42.deep-thought.org> (this affects all previous releases).
+ Similar problem found by David Hansen <dhansen@metapath.com>.
+ Thanks to David Hansen for his solution of mallocing userfile,
+ appdefaults, modname, modeclassname, fullname, fullclassname, buf
+ variables. Also the memory leak on line 831 of GetResources variable
+ classname is believed solved (David Hansen again). In utils.c get_dir
+ "dir" and "filename" are forced to remain within the sizes of DIRBUF
+ and MAXNAMLEN respectively.
+ Thanks to Tom Schmidt <tschmidt@micron.com> for adding --enable-hackers
+ --with-includes and --with-libraries and patching up the handling of
+ Editres in configure.in . A gears and tube bug patched. Also
+ contributed new Purify report showing many problems with the GL modes
+ (gears and morph3d).
+ Thanks to Jouk Jansen <joukj@crys.chem.uva.nl> for the DECC patches.
+
+4.00
+ xlock.html thanks to vh-man2html .
+ Patch for SGI to kill the Xsgi process when using 4Dwm thanks to
+ Martin Ebert <hi17@iss.mach.uni-karlsruhe.de> and Phillip Moore
+ <phil@ERC.MsState.Edu>.
+ Fix for colormap stuff, swirl in random mode could crash xlock, error
+ made in ALPHA version.
+ Thanks to Alexander Jolk <jolk@ap-pc513b.physik.uni-karlsruhe.de> for a
+ update to lissie to handle -size .
+ Thanks to Sergio Gelato <gelato@spacenet.tn.cornell.edu> for a bug fix
+ for galaxy.
+ Fixed a "Bad Match" generated with random mode for multi-headed color
+ monitors using -install.
+ Thanks to Rick Ohnemus <rick@ecompcon.com> for patches to NAS sound
+ stuff. Typos were my fault.
+ I noticed a problem with Solaris2 and dirent.h .
+ xlock -mode image -imagefile ./bitmaps/
+ is supposed to pick a random file. This mechanism does not seem to
+ work too well and may corrupt the filename when you give it a specific
+ file name. Therefore for Solaris2, I compile without dirent.h.
+ Check out utils.c and grep on Solaris2 to see more...
+ One must give a specific filename on Solaris... here
+ config/xlockrandimage.pl may help you.
+ Thanks to Charles Vidal <vidalc@univ-mlv.fr> for starting another gui
+ interface to xlock, xlock.tcl, in config directory. Moved xmlock, the
+ Motif gui for xlock (also written by Charles Vidal), from hackers
+ directory.
+ Robert Duff <duffrd@aud.alcatel.com> patch to randomize the starting
+ color of marquee. Same patch applied to blot, bouboule, braid, dclock,
+ geometry, flag, helix, hop, kaleid, julia, qix, roll, rotor, spiral,
+ spline, swarm, worm. On bomb, life, triangle this was not done on
+ purpose and on others... flame and lissie it was done already.
+ Leaks fixed in gears.c and bomb.c. Purify was not used so there could be
+ others there.
+ dclock should work correctly in password window... i.e. it should not get
+ stuck, and randomized initial direction.
+ penrose.c run with -verbose and it will tell you when it hits some
+ weirdness (about once an hour) "Dislocation occured!"
+ If it says "Weirdness...." it would have terminated previously.
+ Updated make.com to use links instead of copies. Thanks to Jouk Jansen
+ <joukj@crys.chem.uva.nl>.
+ Thanks to Tom Schmidt <tschmidt@micron.com> for fixing the formatting
+ on the "hours elapsed since locked." message and logout patches.
+ Also for adding several options to configure.
+ Thanks to Tim Mooney <mooney@dogbert.cc.ndsu.NoDak.edu> for Digital Unix
+ (aka OSF1) for patches to the Imakefile.
+ Middle button fix and monochrome random mode fix for multiscreens.
+ Multiscreen patch for marquee and nose.
+ Updated xlock.h not to have a \ at the end a line with a #if. VAXC chokes.
+ Updated size and batchcount in ball and size in pyro.
+ Updated mode.c for maze. Incorrect if XLock.ad was not installed.
+ Updated turtle.c. Incorrect HARTER_HEIGHTWAY mode and float casts to int
+ to please the VMS god.
+ Updated ant.c to handle more kinds of ants. Thanks to J Austin David
+ <Austin.David@tlogic.com>. Check out http://havoc.gtf.gatech.edu/austin
+ Hackers modes moved to main directory. cartoon.c may be kind of flashy
+ with -install and without it you might not get any cartoons. Looks OK
+ on monochrome.
+ audio stuff for VMS is in config directory.
+ Updated grav compiletime options now runtime options-> -decay and -trail.
+ New "-version" option now pulls the version from version.h. Also added a
+ more verbose option "-verbose" for maximum verbosity. -v now gets
+ version instead.
+ New "-sound" option added. It is off by default. If on it will only work
+ if RPLAY, NAS, VMS_PLAY, or DEF_PLAY are used at compile-time.
+ "Feature" where truncated mode names were accepted, such as "-mode s" now
+ give an error. It did not work well anyway (above example ran shapes in
+ monochrome).
+ Thanks to Alexander Lehmann <lehmann@mathematik.th-darmstadt.de> for adding
+ backspace capabability Control-H for marquee (but not with -message).
+ configure is now used. At this stage the Imakefile is still probably
+ more reliable. The Makefile.[acc hp std sun] are no longer supported.
+ (But are in config for reference). The Imakefile and make.com are still
+ supported. imake has fallen out of favor with me. imake is sometimes
+ not configured well, its make depend is confusing (some systems it is not
+ required), and cumbersome (and ugly) "@@\"'s are used to do more
+ complicated things. And it is not installed on some HP's.
+ A few things have been added for configure, but NOT used with Imakefile
+ or make.com:
+ config.h.in -> config.h when "configure" is run.
+ This file is where the users options are stored. These may depend
+ more on the administrator/user than on the system, but some options
+ are not available on some machines. See "configure --help".
+ If this file is modified... a "make clean" should be done unless you
+ know what your doing.
+ Makefile.in -> Makefile when "configure" is run.
+ configure.in -> configure when "autoconf" is run. Note: autoconf is
+ a GNU product that may not be installed. This is need only if you
+ update configure.in .
+ Although there is some VMS support features in Makefile.in... full
+ support for MMS, MMK, or VMS-GNU-MAKE is not there yet.
+
+3.13
+ loop.c added, it is not exactly a screen saver, but it demonstrates
+ self-production.
+ turtle.c added. Recursive turtle graphics. The only one that works
+ at present is the Hilbert curve (which is may not exactly be
+ a turtle curve... but close enough).
+ Thanks to M G Berberich <berberic@forwiss.uni-passau.de> for .plan and
+ .signature stuff and purify log.
+ bomb and signature updates for VMS thanks to Jouk Jansen
+ <joukj@crys.chem.uva.nl>.
+ flag fix for negative size thanks to <Mark_Buglewicz@itd.sterling.com>.
+ MULTIPLE_ROOT & passwd in compat mode bug fix and NAS sound patch bug
+ fix thanks to Dave Smith <drs@aeolians.bt.co.uk>.
+ Thanks to Tom L. Schmidt <tschmidt@micron.com> for purify logs.
+ Many leaks patched thanks to Purify! grep on "PURIFY" to find
+ unresolved leaks. Purify file is in the docs directory.
+ 2 problems in the Imakefile cleaned up thanks to Simon Josefsson
+ <jas@pdc.kth.se>.
+ Patch to allow marquee to handle extended character set >=128
+ Alexander Lehmann <lehmann@mathematik.th-darmstadt.de>.
+ XPM files now work with -install (thanks to XPM maintainer Arnaud
+ Le Hors for pointing me in the right direction). Managed to reserve
+ black and white, but not fg and bg does not work. Sometimes in random
+ mode the colors are not mapped correctly.
+ -geometry should now work again without excessive refreshing.
+ Refresh update on image.c.
+ ball, julia, roll in the hackers directory are probably ready for
+ prime-time but have not been BETA tested.
+
+3.12
+ swirl will cause xlock to dump core or CRASH OS within 50 repetitions
+ when run in random mode, fixed.
+ xlock -mode tri -mono dies, fixed.
+ xlock -mode swirl +install with netscape (stealing colors) running
+ is even less reliable, fixed.
+ daisy and slip are sometimes in red when there are no colors left, fixed.
+ After the delay has expired the first button click only redraws the
+ current mode. It then takes a second click to activate the
+ password display. Fixed thanks to David Hansen <dhansen@metapath.com>.
+ Individual -size option added (like batchcount). -gridsize removed.
+ If 0 it will use the bitmap if available. If negative it will be
+ random from 1 to -size inclusive (like batchcount).
+ Combined star mode with rock mode. rock mode removed.
+ -trek, -rock, -straight options. Star Trek features by Heath Rice
+ <rice@asl.dl.nec.com>.
+ dclock updated offscreen so there is no annoying flashing. Originally
+ submitted by Michael Stembera <mrbig@fc.net>.
+ bomb mode back... but its essentials are NOT compiled in by default.
+ Patches for SUNOS_ADJUNCT_PASSWD thanks to Mark Buglewicz
+ <mark@itd.sterling.com>.
+ Many modes patched that did not initialize the redrawing variable.
+ Demon bug solved when alternating between iconified window and normal
+ window.
+ mountain patched so it would not be so slow.
+ life1d much improved. It now has a fade out if it is found repeating.
+ Now can break without it completing a whole screen. -totalistic
+ option added (+totalistic -> LCAU collection instead).
+ Updated clock to use batchcount (i.e. many clocks) .. if there are too
+ many collisions it will draw less clocks.
+ Thanks to Rene' Driessen <rdr@crys.chem.uva.nl>
+ xlock -mode puzzle -mono ( -inwindow | -debug )
+ will get a Bad Match if obscured (but still errors out if moved off
+ screen).
+ Updated modes to use size instead of batchcount... clock, flag,
+ maze, penrose.
+ Updated modes to use size instead of cycles... bouboule, star.
+ Updated modes to use size instead of worm's CIRCSIZE, and galaxy's STARSIZE.
+ Updated other modes to use size bat, bounce, ant, demon, life1d, life,
+ wator, wire.
+ galaxy bug on VAX now gone... not sure why... Disappeared when I added
+ temporary sin and cos calculations for efficiency.
+ Thanks to Dr. George D M Ross <gdmr@dcs.ed.ac.uk> for SYSLOG (xlock.c)
+ and NETGROUP patches (logout.c).
+ Thanks to Gabor Herr <herr@iti.informatik.th-darmstadt.de> for pointing
+ out that uid and gid privileges should be taken away unconditionally
+ after the encrypted password is grabbed. Otherwise, it may lead to a
+ major security hole depending on how it is installed.
+ xmlock.c added to hackers directory. Thanks to Charles Vidal
+ <vidalc@univ-mlv.fr> for starting a gui interface to xlock. Feel free
+ to improve upon it, but mail me your diffs.
+ -DUSE_HACKERS compiletime option added (cartoon.c took a step back,
+ nobody's fault but mine).
+ ant mode with -turchet memory leak found. Refreshing improved.
+
+3.11
+ Ron Hitchens <ron@idiom.com> Updated xlock so it would refresh more
+ reliably and handle window resizing and -inroot
+ -neighbors is now randomly 4 or 6 if not 4 or 6. This affects the ant and
+ demon mode. Thanks to Jouk Jansen <joukj@crys.chem.uva.nl>.
+ -help now displays help messages of each mode if there is one.
+ Changed _opts to include a separate counter for opts and vars & desc
+ since they do not have to be the same if there are boolean switches.
+ Added a -truchet option to ant, this leaves a trail of the ant.
+ One should probably change -gridsize to see it more clearly.
+ Added a -erase option to spline, if used one should make -cycles low,
+ say 20.
+ My long request for a penrose algorithm has been answered :) ,
+ penrose.c added thanks to Timo Korvola <tkorvola@dopey.hut.fi> .
+ -ammann will show ammann lines. These were useful for debugging
+ penrose.c . It is currently my favorite mode. Once I saw it do
+ a dislocation, I think.
+ tri.c added thanks to Desmond Daignault <tekdd@dtol.datatimes.com> .
+ I would like to see other fractals added to this like fern.
+ daisy.c added. I modeled it after some slow PC lockscreen in the office.
+ More 3d options besides rock: bouboule, pyro, & worms. Rock patched up.
+ Now includes overlap color if colormap is installed. Thanks to
+ Henrik Theiling <theiling@coli.uni-sb.de> .
+ There is a bug on some machines with rock mode. A border of red can
+ be seen around the magenta rock (which should be blue). This happens
+ on my Sun with the colormap installed but not on Linux.
+ Password code mallocs fixed up and BSD_AUTH code added thanks to
+ Paul Borman <prb@bsdi.com> .
+ 2 problems in Kerberos code and 2 in the Imakefile cleaned up thanks
+ to Simon Josefsson <jas@pdc.kth.se> .
+ Kerberos 5 added thanks to Dale Harris <rodmur@ecst.csuchico.edu> .
+ Multi user per uid patch thanks to der Mouse
+ <mouse@collatz.mcrcim.mcgill.edu> .
+ Now should compile under C++, but it complains about signaling, pclose,
+ crypt, and gethostname when linking.
+ All modes now have refresh hooks, but some just call the init_ hook.
+ lissie, bug, rotor, spline -erase and worm hooks thanks to Alexander
+ Jolk <jolk@ap-pc513b.physik.uni-karlsruhe.de> .
+ On slip, penrose, and puzzle, I made no attempt.
+ All modes now have change hooks. All except random call the init_ hook.
+ So when running a mode you can get it to restart by pressing the middle
+ button on your mouse. This does not work with the password window up
+ but probably should.
+ Added -debug runtime switch. Formerly accessed only by -DDEBUG. Some
+ debug switches are still only accessed in this way.
+ -rule for life and -rule3d for life3d runtime swtiches. Also a real
+ change hooks for these modes. For -rule3d if set to 0 all rules that
+ have known patterns will randomly selected. If set to 1 all rules that
+ have known gliders will be randomly selected.
+ "xlock -inwindow -lockdelay 10" now should work.
+ Sped up sphere by not drawing off screen.
+ Added a hackers directory for hackers.
+ Added hooks to Imakefile for MesaGL. No mode uses this yet see the
+ hackers directory.
+
+3.10
+ Reorganized bitmaps. All single bitmaps use "image_" inside the bitmap
+ file. They are now organized t-tiny, s-small, m-medium, and l-large.
+ That way one can, if one wished, one can use one bitmap file for eyes,
+ image, life, life1d, maze, and puzzle at compile-time.
+ Removed all references to Scr, screen, and dsp in the modes.
+ Release mode stuff added to all modes (except random). Rewrote image
+ initialization for bat, image, and puzzle to make it safe for
+ multiscreens (image and puzzle are still not correct for multiscreens).
+ Negative batchcounts now allowed, if negative it will be random from
+ the smallest allowed positive batchcount to ABS(batchcount), inclusive.
+ It is available on
+ ant, bat, bounce, bug, eyes, flag, galaxy, geometry, grav, image, laser,
+ lissie, maze, mountain, petal, puzzle, rock, spiral, spline, swarm,
+ world, worm.
+ More mallocing (and freeing) done for bat, bounce, bug, eyes, galaxy,
+ geometry, image, lissie, maze, puzzle, rock, rotor, spline, wator, world,
+ worm, so there are less predefined limits. In the case of eyes and rock,
+ some limits were imposed where a dynamic number of pixmaps were
+ dynamically declared, so that xlock would not easily slow down to a crawl
+ and run out of memory.
+ bug now uses gridsize. And to some degree life, life1d, and wator.
+ It would be neat if you could choose not to use the bitmaps for big
+ windows.
+ worm now uses cycles for length of worm and galaxy uses cycles now too.
+ rock uses cycles for max rock size.
+ One no longer has to hit return twice to unlock using lockdelay.
+ flag now uses batchcount for "point" size.
+ XClearWindow is used instead of filling screen with a big black rectangle.
+ Added -icongeometry option. It has a range of 1x1 to 256x256 . Position
+ information is ignored. Updated modes to handle weird geometry's bat,
+ bounce, braid, bug, eyes, kaleid, life, life1d, maze, nose, puzzle,
+ wator, world.
+ mountain changed to allow it to be interrupted quicker, (braid and slip
+ are harder :) ).
+ bounce changed to get rid of drawing errors. I could not figure out how
+ easily remove more without the balls flashing.
+ wire mode added based on code from Kevin Dahlhausen <ap096@po.cwru.edu>
+ and Stefan Strack <stst@vuse.vanderbilt.edu>.
+ lightning mode added thanks to Keith Romberg <kromberg@saxe.com>.
+ in xlock.c, in function runMainLoop, reads should be declared not as
+ struct fd_set. This causes compilation errors with Linux kernels 2.0
+ and higher. Thanks to Brian R. Doherty <doherty@rice.edu>.
+ "nice" patch for xlock to so that xlock is "not so nice" when a password
+ window is being presented. Thanks to Jouk Jansen
+ <joukj@crys.chem.uva.nl>.
+ lightning, eyes, maze, shape patched for multiscreens. XPM stuff patched
+ for multiscreens (thanks to XPM maintainer Arnaud Le Hors).
+ Tested on a machine where 0.0 is black/white, 0.1 is 8 bit color.
+ Also random mode does not use the correct initial values of modes on
+ multiscreens. Testing on multiscreen thanks to Mark Wedel
+ <mwedel@pyramid.com>.
+ Long standing bug fixed (>= before MAXBATCH) for flame.c thanks to Ron
+ Charlton <crc@ornl.gov>.
+ puzzle when in -inwindow or compiled with -DDEBUG and moved off screen
+ will not bomb out unless it is using an xbm image. This should be
+ completely fixed in 3.11.
+ New defaults: grelb substituted for life icon, -install for
+ installation of the colormap, some modes slowed down so they would look
+ correct on fast machines.
+
+3.9
+ All modes (except eyes.c) have been updated to use less global variables.
+ Also updated xlockmore to ANSI C by GNU's protoize.
+ demon.c updated to be faster. Although it is now significantly more
+ complicated.
+ ant.c and demon now have runtime options. -neighbors 6 or 4 (default = 4)
+ -gridsize (170 default) (In ant, when neighbors = 6 it is called bees.
+ Not much is known about these critters. They do not seem to exibit the
+ highway building activity found in normal ants, but otherwise they
+ behave pretty similar.)
+ flag mode thanks to Charles Vidal <vidalc@univ-mlv.fr>.
+ The Lissajous worm (lissie mode) thanks to Alexander Jolk
+ <ub9x@rz.uni-karlsruhe.de>.
+ Shape mode now has triangles. Also now looks better when minimized.
+ From an idea in REC (Recreational & Educational Computing).
+ Random mode now tells you which mode is running when run with -verbose
+ [formerly -v].
+ Added VERBOSE stuff to life, life3d, life1d, and ant.
+ Changed rock.c to use blue by default for the left eye. All 3D glasses
+ I have seen use blue.
+ Fixed swirl so it would not swirl "white". Even if it is not a bg or fg
+ color. This made the border around the little window change color.
+ From Ron Hitchens <ron@idiom.com>:
+ patch for middle button so that it will change locks even if duration
+ is 0 in random mode.
+ patch for window title noticeable when used with the -inwindow option.
+ fixed up demon.c
+ Random access to raster files by giving a directory thanks to Jouk
+ Jansen <joukj@alpha.chem.uva.nl>. If UNIX, give directory followed by
+ a "/", also it may try to put "." as an image file.
+ When xlock is compiled with shadow passwords it will still work on non
+ shadowed systems that use elf, thanks to Marek Michalkiewicz
+ <marekm@i17linuxb.ists.pwr.wroc.pl> Compilation with HAS_SHADOW is
+ forced on Linux with ELF (even if shadow passwording is not used).
+ This will facilitate a migration towards shadow passwording.
+ For the sake of completeness, xbm files can now be read in at run-time.
+ Courtesy of John Bradley's xv(xvbm.c), used by permission.
+ "xlock -nolock -lockdelay 1" should no longer crash
+
+3.8
+ system call for sounds using DEF_PLAY thanks to Milco Numan
+ <milcon@krim.chem.uva.nl>
+ Used GNU's indent to reformat all *.c and *.h files. It may have
+ screwed up some comments. I used:
+ -bap -nbacc -bad -nbc -br -bs -c33 -cd33 -ncdb -ce
+ -d0 -di12 -neei -fc1 -i8 -ip8 -l79 -lp -npcs -psl -nsc -nsob
+ -cli8 -cs -cp1
+ Multiple root accounts for allowroot. Thanks to Lewis Muhlenkamp
+ <lewism@tt.comm.mot.com>.
+ Better make.com file for for VMS thanks to Jouk Jansen and the
+ author of XVMSUTILS, Trevor Taylor <taylort@decus.com.au>.
+ -display fix for VAX thanks to Jouk Jansen.
+ eyes mode, revamp to eliminate need for global variables in modes,
+ new hooks (release and refresh), and middle button for "Next" in
+ random mode, thanks to Ron Hitchens <ron@idiom.com>.
+ This now allows for many things to be cleaned up. Due to the number
+ of modes, it will take a few releases. See HACKERS.GUIDE.
+ puzzle mode thanks to Heath Rice <hrice@netcom.com> & Jouk Jansen
+ <joukj@alpha.chem.uva.nl>.
+ Raster files (for puzzle.c and image.c) thanks to Tobias Gloth
+ <gloth@math.uni-muenster.de> & Jouk Jansen <joukj@alpha.chem.uva.nl>.
+ Background is now black when used with -install.
+ swirl for 16 bytes per pixel patch <davidm@azstarnet.com>
+ bouboule mode memory leaks fixed thanks to Jeremie Petit <jpetit@essi.fr>.
+ maze's dead ends are now filled in.
+ More syslog stuff for notifying failures in unlocking xlock Andrew Sammut
+ <sammut@dstc.qut.edu.au>.
+ blank now uses the power-down sleep mode if available, thanks to Ron
+ Hitchens <ron@idiom.com>.
+
+3.7
+ HP bug timing bug fixed thanks to Ron Hitchens <ron@idiom.com>.
+ 3D mode for rock thanks to <theiling@coli.uni-sb.de>.
+ Get out your 3D glasses, Red on right and Green on left.
+ added compile time option for spline, FOLLOW to erase old splines
+ like Qix thanks to Richard Duran <rduran@cs.utep.edu>
+ petal now works with -inroot .
+ CDE DT saver thanks to Trevor Bourget <trevor@thomsoft.com>
+ see Imakefile and README.
+ bouboule mode added, thanks to Jeremie Petit <jpetit@essi.fr>.
+ bouboule fixed for VMS and TrueColor.
+
+3.6
+ Many patches, thanks to Ron Hitchens <ron@idiom.com>.
+ xlock now appears over the screensaver, passwd.c reorganized,
+ new event loop in xlock.c, new icons in bitmaps, updated clock
+ and triangle, and resource parsing fixed for "xlock".
+ pedal renamed to petal.
+ Clock mode updated to change in size thanks to original author
+ Petit Jeremie <jpetit@essi.fr>.
+ More context handling stuff for DCE thanks to Terje Marthinussen
+ <terjem@cc.uit.no>.
+ slip mode added thanks to Scott Draves <spot@cs.cmu.edu>
+ with a patch from <joukj@alpha.chem.uva.nl>.
+ patch for -messagesfile code favored early quotes and new event loop
+ compatability thanks to <joukj@alpha.chem.uva.nl>.
+ XLock.ad and xlock.man updated to be more consistent.
+ ultrix fix for strdup thanks to Erik Bertelsen <erik@sockdev.uni-c.dk>.
+ invalid sound added thanks to <J.M.Box@dcs.warwick.ac.uk>
+ Thanks to <mccomb@interport.net> for helping to debug marquee and nose
+ on multiheaded machines.
+
+3.5
+ Fixed my goof on worm.c.
+ vms_play fixed for nonexisting sound files and -messagesfile code
+ updated thanks to <joukj@alpha.chem.uva.nl>.
+ marquee now more random and memmove no longer used.
+ marquee fixed for multiheaded machines thanks to Caleb Epstein
+ <epstein_caleb@jpmorgan.com>.
+ Random number generator fixed for 64 bit "long" thanks to Scott McCoy
+ <smccoy@dr3w.ess.harris.com>.
+
+3.4
+ rplay patch thanks to Simon Banks <sbanks@cellnet.co.uk>. xlock now
+ has sound where available. Edit your favorite makefile.
+ 2 new modes thanks to Tobias Gloth <gloth@math.uni-muenster.de>.
+ marquee (I changed a lot) shows text on the screen, similar to nose
+ triangle, (colormaping removed) similar to mountain
+ nose text functions removed to utils.c
+ image.c now with -imagefile option (only with XPM).
+ rect.c name changed to shape.c.
+ swirl.c and world.c fixed for multiscreens, thanks to Grant McDorman
+ <grant@isgtec.com>.
+ A better way of handling fortunes from a file, thanks to Jouk Jansen
+ <joukj@alpha.chem.uva.nl>. To try use -messagesfile fortune.dat.
+ Also contributed vms_play.c and a new make.com file.
+ KERBEROS patch thanks to Omar Siddique <omar@gl.umbc.edu> for sending
+ and testing it (patch author unknown).
+
+3.3
+ LIFE_5655 and LIFE_6767 compile time options for life3d.
+ ultrix passwd bug fix thanks to Erik Bertelsen <erik@sockdev.uni-c.dk>.
+ nose now has a font option and is fixed for multiscreens.
+ Stupid memory leak in ant fixed. Now random colors.
+ swirl now needs to be used with -install to look right,
+ thanks to Heath A. Kehoe <hakehoe@icaen.uiowa.edu>.
+ Patch for AIX thanks to Jouk Jansen <joukj@crys.chem.uva.nl>.
+ Color pixmaps for bat from <patol@info.isbiel.ch>.
+ image pixmaps now default to bitmaps if xpm fails, thanks to
+ <Markus.Zellner@anu.edu.au>.
+ flame crashed xlock when using random mode on Linux, fixed.
+ Numerous fixes for multiscreens incl: bat, bounce, rect, hyper, life1d,
+ forest, laser, mountain, and braid. Also xlock.c patched or second
+ screen would have a black and white display.
+ Purify found memory leaks in swirl, mountain, laser, hyper, maze.
+ Thanks to <mccomb@interport.net>.
+ New option -lockdelay #, for those who were bothered by xautolock
+ locking the screen when you you did not want it, now just hit
+ return (within a specified number of seconds) to get the screen back.
+ This option is intended to be used with xautolock.
+ worm now has no limit on the number of worms.
+ pyro bug fixed for large batchcount (500-2000), thanks to
+ Minoura Makoto <minoura@flab.fujitsu.co.jp>.
+
+3.2
+ Doug McLaren <dougmc@comco.com> noticed a big security hole in
+ nose.c when xlock is setuid to root. Now, after the password is
+ read, it gives up root, thanks to Heath A. Kehoe
+ <hakehoe@icaen.uiowa.edu>.
+ DCE Authentication patch added.
+ Thanks to Jouk Jansen <joukj@crys.chem.uva.nl> for clearing up
+ a timing problem using -DOLD_EVENT_LOOP .
+
+3.1
+ Multipatch by Heath A. Kehoe <hakehoe@icaen.uiowa.edu> it includes
+ speed up in helix, random mode now switches modes, input to mode
+ is now customizable (see random.c), and a DCE authentication patch
+ (based on work by Phil O'Connell <philo@icaen.uiowa.edu>). Also
+ usleep was dropped in favor of a new timing mechanism. It is still
+ available using -DOLD_EVENT_LOOP (VMS still uses it by default).
+ braid.c thanks to John Neil <neil@math.idbsu.edu>.
+ helix now looks even better. I found a bug in the translation from
+ xscreensaver.
+ nose.c may still need a little work (its a bit slow). Taken from 2
+ sources xnlock and xscreensaver's noseguy. It no longer leaves
+ dust on the screen as well (the bitmaps are shifted up by one pixel).
+ pedal.c taken from xscreensaver.
+ Patches for OSF1_ENH_SEC but it unfortunately seems to need more work.
+ Idea to have the mode.h defaults used thanks to Roland Bock
+ <exp120@physik.uni-kiel.d400.de>.
+ closedown patch for xdm use from Janet Carson's xclosedown
+ with modifications from Anthony Thyssen <anthony@cit.gu.edu.au>.
+ image.c updated to use xbm if using a monochrome monitor or using -mono.
+ life1d, bug.c, ant.c, and demon.c added from Scientific American's
+ Computer Recreations.
+ hop.c now has Peter de Jong's hop. Half the time its boring but
+ the other half of the time its great.
+ A better patch from Peter Schmitzberger <schmitz@coma.sbg.ac.at> for
+ spiral (a bug that I introduced).
+
+3.0
+ Patch from Peter Schmitzberger <schmitz@coma.sbg.ac.at> for maze and image.
+ Thanks to Shane Watts <shane@phobes.mlckew.edu.au> for helping me with
+ Linux shadowing.
+ world.c backward spinning jump fixed by Neale Pickett <zephyr@nmt.edu>.
+ laser.c bug (that I introduced) solved by Heath A. Kehoe
+ <hakehoe@icaen.uiowa.edu>.
+ Edited rect so that it does ellipses as well, like After Dark.
+ I should of renamed it right?
+ Got rid of "+=" in Imakefile because HP, AIX, and Ultrix have
+ trouble with it. Still used by some systems where there seems to
+ be no trouble.
+ passwd.c extracted from xlock.c and xlock.h . May have cured some
+ bugs (like a BIG network security bug) but most likely broke some
+ systems. Thanks for the many people who gave feedback during
+ the BETA test.
+
+2.10
+ xlockrc password for more user control of xlock. Author unknown.
+ It is a compile-time option, see Imakefile and README.
+ Moved usleep.c and hsbramp.c to utils.c and logout.c to opt.c .
+ Split out mode.h from resource.c .
+ Changes of Skip_Burrell@sterling.com were incorporated into image.c .
+ Not sure how to get pixmaps to randomize color and -mono does
+ not work for pixmaps. See Imakefile and README.
+ -allowroot now works on Solaris2.x.
+ Clock mode added, thanks to Jeremie Petit <petit@simula.unice.fr>.
+ laser and mountain modes added, similar to After Dark's version, and
+ also forest mode thanks to Pascal Pensa <pensa@aurora.unice.fr>.
+ Updated maze and helix after seeing mountain mode. Do not have to
+ wait a second to enter password. :)
+ Now provide random number generator. Thanks to Mike Arras
+ <arras@intertv.com>. I changed RAND to LRAND.
+ Due to overwhelming demand, the old flame is back... well OK its
+ slightly modified.
+ Patch for SUNOS_ADJUNCT_PASSWD, thanks to Dale A. Harris
+ <rodmur@ecst.csuchico.edu>.
+ Imakefile reorganized for AIX.
+
+2.9
+ "make install.man" should now work for imake users (if you would like
+ it to work for Makefile.hp ... mail me the patch).
+ Unbundled SunC warnings removed in bitmap files, maze, grav, life,
+ and swirl.
+ Swirl patched to work sensibly with TrueColor displays, thanks to
+ Steve Early <sde1000@cam.ac.uk>
+ Rock mode made much better by Jeremie Petit <petit@simula.unice.fr>.
+ Imakefile reorganized by <mjacob@feral.COM> for Solaris2.x .
+ Reorganized the README and the screens are now (mostly) alphabetical
+ throughout.
+ Updated life3d to include compile-time options LIFE_5766 and LIFE_4555.
+ 5766 is more like life, but 4555 (default) seems to be better.
+ I went through the lifep.zip (May 94) collection and pulled out some
+ small and interesting life forms.
+ I added another control to the screens. "-cycles num" influences the
+ time out (it applies to about a 1/3 of the screens, see man pages).
+ For consistency, the meaning of batchcount for qix, life, life3d,
+ and rect was changed. References to "seconds()" in the screens were
+ removed. The length of a "cycle" depends on "delay".
+ Multidisplay bug fix for maze, thanks to <epstein_caleb@jpmorgan.com>.
+ AIXV3 with AFS, thanks to <chuck_hines@VNET.IBM.COM>.
+
+2.8
+ No more bomb.c, if you think xlock needs it, let the maintainer know.
+ full_lock rewritten by Dale A. Harris <rodmur@ecst.csuchico.edu> to
+ handle non-login groups as well.
+ fixed a bug in wator, introduced in 2.7.
+ fixed nanosleep bug for delays of 1 second or more. Nanosleep is now
+ used by default on Solaris. The Imakefile will have to be modified
+ if using Solaris 2.0-2.2, since nanosleep is not available.
+ I do not know why, but the logout out feature now works on Solaris.
+ Various warnings and errors fixed in make.com, resource.c, logout.c,
+ and galaxy.c for VMS. Also fixed random generator for VMS not to
+ toggle the least significant bit. This made worm.c look funny.
+ xlock now works on VMS/AXP thanks to <JOUKJ@CRYS.CHEM.UVA.NL>. One
+ will have to uncomment sections in make.com . Also fixed some
+ AIX problems.
+ Modes spiral and geometry thanks to Darrick Brown <dbrown@cs.hope.edu>.
+ Batchcount in maze and spline were changed to behave similarly.
+ A patch from Heath Rice <hrice@netcom.com> for a better way to handle
+ batchcount, delay, and saturation.
+ I went through xlife3.0 huge collection and added "suitable" lifeforms.
+
+2.7
+ sgi patches and logos from Dave Truesdell <truesdel@nas.nasa.gov>.
+ flame bug fixed thanks to <spot@cs.cmu.edu> and
+ <M.R.Dobie@ecs.soton.ac.uk>.
+ MANY patches from Heath A. Kehoe <hakehoe@icaen.uiowa.edu> include:
+ The long awaited HP patch. It appears there was a bug in HP's XFlush
+ function. So XSync was substituted. HP_PASSWDETC patch.
+ maze, swarm, and worm -mono now look better.
+ Many changes to the Imakefile, new compile time features ...
+ including a logout button for labs (this appears to be better
+ implementation than the bomb mode (much of the bomb code has been
+ reused)) -install option to allow xlock to install its own colormap
+ if it runs out of colors.
+ Thanks to <slouken@virtbrew.water.ca.gov> for yet another option:
+ grabmouse for compatablilty with xscreensaver. So you would set
+ your apps-defaults file for xscreensaver like:
+
+*programs: xlock -nolock +grabmouse -mode random
+
+ Updated life3d to include shooting gliders.
+ BSD and Linux icons slightly modified. Also new ships for life.
+ Compile time options HAS_RAND, HAS_RANDOM, and HAS_RAND48, and
+ updated the sccsid so `what` will give you something meaningful.
+
+2.6
+ Created a HAS_USLEEP and a USE_VROOT switch.
+ There were numerous reports of the incompatibility with tvtwm,
+ (also problems with windows with StickyAbove set to true and
+ swirl), read the README section on that.
+ Thanks to Chris Ross <cross@va.pubnix.com>, maintainer of tvtwm, for
+ fixing various bugs; make depend for R5 and less, life3d should not
+ have malloc.h, and a time-elapsed patch.
+ A few new life forms for life.c. Anyone know what SMILEY is really
+ supposed to look like? :)
+ Revised -inroot does not lock screen, as this is done better with the
+ following patch, and as someone pointed out, its not intuitive.
+ Thanks to Tim Medley for sending the -geometry patch of Mike Peercy
+ <peercy@crhc.uiuc.edu>. Many of the modes will fail if the windows
+ are far from square or are too small. You can place Xlock off the
+ screen, for example,
+ xlock -enablesaver -mode blank -geometry +1152+0
+ puts the window off the visible screen on a Sun.
+ A new version of flame.c from the original author Scott Draves
+ <spot@cs.cmu.edu>.
+ Something really devilish for BSD (new icons) thanks to J Wunsch
+ <j@uriah.sax.de>, but they have been modified. I also created a
+ Linux icon.
+ A patch for Ultrix systems (at least DECstations) running enhanced
+ security thanks to Chris Fuhrman <cfuhrman@vt.edu> and friend.
+ Multidisplay bug fix for life3d and wator, thanks to
+ <epstein_caleb@jpmorgan.com>.
+ Life3d on a monochrome monitor looks a little better. -mono was
+ working right.
+
+2.5
+ A patch for swirl for fixed color maps (more colorful) and the
+ image now spirals outwards from the center with a fixed number of
+ points drawn every iteration, thanks to <M.R.Dobie@ecs.soton.ac.uk>.
+ A patch for blot on dual-headed machines and nanosleep, thanks to
+ Greg Onufer <Greg.Onufer@Eng.Sun.COM>. Use nanosleep on Solaris2.3
+ and greater, examine the Imakefile and/or README for details.
+ A long needed patch for X11R5+ for -delay, -batchcount, and
+ -saturation to work thanks to Patrick D Sullivan <pds@bss.com>.
+ bomb mode patch for more flexibility thanks to Dave Shield
+ <D.T.Shield@csc.liv.ac.uk>.
+ bomb mode patch for Sun10 thanks to Nicolas Pioch <pioch@Email.ENST.Fr>.
+ modes wator and life3d added.
+ life now has a random soup pattern stolen from life3d.
+ -inroot option added, thanks to Bill Woodward <wpwood@pencom.com>.
+ Now more compatible with xscreensaver if run as
+ "xlock -mode kaleid -inroot -nolock".
+
+2.4
+ hopalong now includes a sine hop (but less likely to come up).
+ life now has new organisms. They are now better centered. Some of
+ the nonperiodic forms were removed.
+ life's gliders now come from the edge of the screen, usually.
+ image now centers icons, for example, the hp icon is now centered.
+ blot now randomly has xsym, ysym, or both.
+ Solaris should now compile out of the box to handle shadow passwords.
+ Thanks to Alain Brossard <brossard@siisun.epfl.ch>.
+ rock, grav, rect, bat, world, bounce and swirl fix for 24 bit colors.
+ Patch for building under HP-UX with Secured Passwords, thanks to
+ Dale Harris <rodmur@ecst.csuchico.edu>.
+
+2.3
+ Now the X Logo displays if not Sun or HP.
+ "bat" mode disastrous bug fixed. Thanks to R.K.Lloyd@csc.liv.ac.uk
+ for pointing it out.
+ -DMOUSE_MOTION switch added for those who want the Password window to
+ come up if you just moved the mouse. (Not recommended).
+ "swirl" mode was modified to check background, foreground, and black
+ so as not to cycle these colors, special thanks to Mark Dobie
+ <mrd@ecs.soton.ac.uk>.
+ -DFORCEFIXEDCOLORS switch for those who are annoyed by swirl cycling
+ its colors.
+
+2.2
+ Made more consistent with the slackware release. XLock.ad changes
+ to rock, rotor, and foreground and background colors.
+ Fixed bug in life.c, evident in the Slackware release.
+ Minor patch for swirl on HP's due to R.K.Lloyd@csc.liv.ac.uk.
+ "bat" put back with minor changes.
+
+2.1
+ Large modifications to README.
+ Patch for building under QNX 4.2 w/ Metrolink X server, thanks to
+ Brian Campbell <brianc@qnx.com>.
+
+2.0
+ "swirl" mode was added, thanks to Mark Dobie <mrd@ecs.soton.ac.uk>.
+ WOW, but not-so-neat on monochrome monitors.
+ Patch for Solaris 2.3 for local, NIS, and NIS+ passwords, thanks to
+ <Christian.Iseli@di.epfl.ch>.
+ "image" mode was put back but random will not run it, too boring.
+ "bomb" mode was added, thanks to <D.T.Shield@compsci.liverpool.ac.uk>.
+ In order to use extra-long passwords with the Linux, changed
+ PASSLENGTH from 20 to 64. Thanks to <slouken@virtbrew.water.ca.gov>.
+
+1.14
+ Multidisplay bug fix for rect, thanks to <epstein_caleb@jpmorgan.com>.
+ Now works on IRIX on the SGI. Thanks to <reggers@julian.uwo.ca>.
+ Now works on NetBSD. Thanks to Greg Earle <earle@isolar.Tujunga.CA.US>.
+ Now works on a Alpha 3000/400 OSF/1 V2.0. Thanks to Udo Linauer
+ <ul@eacpc4.tuwien.ac.at>.
+ "galaxy" mode was added, thanks to Hubert Feyrer
+ <hubert.feyrer@rz.uni-regensburg.de>.
+ "kaleid" mode was added, taken from the Linux version of xkaleid.
+
+1.13
+ "timeelapsed" option was added. Allows you to find out how long a
+ machine is locked so you can complain to an administrator.
+ Now may work on IRIX on the SGI. Thanks to Thomas Runge
+ <runge@egd.igd.fhg.de>
+ "bat" mode was added, thanks to Lorenzo Patocchi <patol@info.isbiel.ch>.
+
+1.12
+ xlock now works on Linux with shadow passwords. Special thanks to
+ H. J. Dihu <macgyver@mcs.com>
+
+1.11
+ Shadow passwords and DES encryption are now detected by the Imakefile.
+ Victor Langeveld <vic@mbfys.kun.nl> reorganized the Imakefile for
+ shadow passwords and crypt. Now should compile "right out of the
+ box" (although there are still problems on Solaris 2.3).
+ Patch to fix sudden rotation changes in rock from Yoshiaki Kasahara
+ <kasahara@csce.kyushu-u.ac.jp>.
+
+1.10
+ R.K.Lloyd@csc.liv.ac.uk reorganized the Imakefile yet again.
+ Fixed a bug in rect.c thanks to <epstein_caleb@jpmorgan.com>.
+ Ditched bzero and bcopy since both are more generally available as
+ memset and memcpy. Also removed some lint warnings.
+
+1.9
+ "rect" mode was added from xscreensaver's greynetic.
+ "helix" bug fixed. It is now more interesting.
+ bounce.c divide by zero fixed and grav.c improvements. Thanks to Greg
+ Bowering <greg@cs.adelaide.edu.au>.
+ grav.c, rock.c, world.c fixed so no black objects.
+
+1.8
+ Imakefile did not work with R6. Also Solaris2.3 may use SVR4
+ instead of SYSV. Thanks to Chris P. Ross <cross@eng.umd.edu>
+ "grav" mode was added. Its a simplistic gravitational simulation,
+ with (currently a constant 16) solid spheres (non-renderd) of equal
+ size and mass orbiting a fixed central mass. The sphere's orbit in
+ 3 dimensions, their position and size being projected with simple
+ perspective. Thanks to Greg Bowering <greg@cs.adelaide.edu.au>.
+ "inwindow" option was added. Allows you to do what xlock already
+ did when DEBUG was defined. It no longer locks your screen, but
+ allows you to run xlock as a (somewhat distracting) decoration.
+ Thanks to Greg Bowering <greg@cs.adelaide.edu.au>.
+ "bounce" mode (football) is back.
+ "world" mode was added. Thanks to Matthew Moyle-Croft
+ <mmc@cs.adelaide.edu.au>
+ "image" mode was removed. It was very similar to world anyway.
+
+1.7
+ cuserid() is needed by Solaris2.3 with shadow passwords in xlock.c.
+ Thanks to Bill <benedett@gentire.com>.
+
+1.6
+ R.K.Lloyd@csc.liv.ac.uk pointed out again that gray_bits in maze.c needs
+ a type cast.
+ xlock.c defaults to "blank" to minimize cpu usage on a network.
+
+1.5
+ xlock works again on VMS (see README.VMS) thanks to Anthony Clarke
+ <Anthony.D.Clarke@Support.Hatfield.Raytheon.bae.eurokom.ie>.
+ memcpy and memset definitions for SYSV. Also there now is a switch
+ for shadow passwords thanks to <reggers@julian.uwo.ca>.
+
+1.4
+ Now works on BSD. Thanks to Victor Langeveld <vic@mbfys.kun.nl>
+ Both Victor and Alexandre Miguel <miguel@natacha.ens-cachan.fr>
+ suggested taking out the cuserid() call in xlock.c. For FreeBSD its
+ a necessity and the old way is is a security hole in SunOS.
+
+1.3
+ Linux port from Darren Senn's (sinster@scintilla.capitola.ca.us) xlock.
+ Fixed drand to random in helix.c
+ Fixed a memory leak in rock.c.
+
+1.2
+ SHIFT - CONTROL - BREAK on the HP is trapped. Thanks to
+ R.K.Lloyd@csc.liv.ac.uk who pointed out that this was done in xscreensaver.
+ AIXV3 and HP bugs fixed, again due to R. K. Lloyd.
+
+1.1 & 1.0
+ took out "rint" from "worm.c" since HP's have trouble with it
+ added spline, maze, sphere, hyper, helix, rock, & blot modes.
+ fixed "xlock.h" and "usleep" for the HP.
+ changed border so it varies with size of screen on "swarm" so the
+ wasp would not be stuck in a corner when the password is entered.
+
+-------------------------------------------------------------------------------
+
+Original author: Patrick J. Naughton
+Site: ftp.x.org in /R5contrib
+The changes in the original xlock
+
+Changes of xlock (sccs version 23.21) patchlevel = 2.3
+ o added worm mode.
+ o old -name and .name changed to -username and .username.
+ o lint cast.
+ o change color allocation to allow "#ffaabb" style color names.
+ o portability bug in flame mode fixed plus some other nits.
+ o white on black on monochrome screens fixed.
+Changes of xlock (sccs version 23.19) patchlevel = 2.2
+ o added -name to allow different resource files to be used.
+ o added -usefirst to allow first keystroke to be used in password.
+ o made changes to life mode to allow wrap around.
+ o made old life cells stay blue.
+ o added -resources to get default resource file.
+ o added random mode
+ o added pyro mode
+ o added flame mode.
+ o made passwords a little more secure.
+ o use effective uid to find current user.
+ o make main window managed by the wm in debug mode.
+ o some more SVR4 portability changes.
+ o resource code now looks at XUSERFILESEARCHPATH and XAPPLRESDIR.
+ o removed verbose copyright info from each file.
+
+-------------------------------------------------------------------------------
+
+ Copyright (c) 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.
+
+ 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.
+
+ ______________________________________________________________________
+ Patrick J. Naughton email: naughton@sun.com
+ Sun Microsystems Laboratories, Inc. voice: (415) 336 - 1080
+
+Maintainer: David A. Bagley <bagleyd@bigfoot.com>
--- /dev/null
+There are a few modes devoted to cellular automata.
+I also added a bunch of options. So I am providing a little explaination
+so it is not overwhelming. I also say a little something at the top of the
+C file of each. If your favorite little automaton is not here... let me know.
+
+The modes are ant, bug, demon, life, life1d, life3d, loop, wator, wire.
+use -install if netscape is stealing all your colors... :)
+"xlock -help" may be helpful too.
+
+ant: Turing Machines where the tape is the screen.
+ Special options:
+ -truchet: this shows the path (good to use with -size at
+ least 10) Truchet option turned off if its not Turk's ants.
+
+ Mode options:
+ -batchcount <int>: number of ants
+ -size <int>: size of ant in pixels
+ -delay <int>: controls the length of a cycle in microsec
+ -cycles <int>: how many cycles before a new ant
+
+ -neighbors <int>: 0 random, 4 ants, 6 bees
+ -verbose: verbose help identify ant (good to use with -inwindow or -debug)
+
+bug: Evolving bugs learn to walk straight (except in the garden)
+ Mode options:
+ -batchcount <int>: number of bugs
+ -size <int>: size of bug in pixels
+ -delay <int>: controls the length of a cycle in microsec
+ -cycles <int>: how many cycles before a new world
+
+demon:
+ Mode options:
+ -batchcount <int>: number of states
+ -size <int>: size of cell in pixels
+ -delay <int>: controls the length of a cycle in microsec
+ -cycles <int>: how many cycles before a new screen
+
+ -neighbors <int>: 0 random, 4 rectangular, 6 hexagonal
+
+life:
+ Special options:
+ -rule <int>: where the integer has 4 digits conforming to the parameters
+ <living_min><living_max><birth_min><birth_max>, so Conway's rule
+ is 2333. This unfortuantely makes the artificial constraint that
+ the parameters are contiguous between min and max.
+
+ Mode options:
+ -batchcount <int>: number of cycles before glider (if one exists)
+ -size <int>: size of cell in pixels
+ -delay <int>: controls the length of a cycle in microsec
+ -cycles <int>: how many cycles before a new lifeform
+
+ -verbose: verbose help identify life (to be referenced with the source code)
+ (good to use with -inwindow or -debug)
+
+life1d: 1 dimensional life
+ Special options:
+ -totalistic: (default) totalistic 1d life
+ +totalistic: LCAU collection These rules may not be symmetric and are
+ more general (totalistic is a subset).
+
+ Mode options:
+ -size <int>: size of cell in pixels
+ -delay <int>: controls the length of a cycle in microsec
+ -cycles <int>: how many pages before a new lifeform
+
+ -verbose: verbose help identify life (to be referenced with the source code)
+ (good to use with -inwindow or -debug)
+
+life3d: 3 dimensional life
+ Special options:
+ -rule3d <int>: where the integer has 4 digits conforming to the parameters
+ <living_min><living_max><birth_min><birth_max>. 2 rules with gliders
+ are 4555 & 5766, to other good rules are 5655 & 6767. This
+ unfortuantely makes the artificial constraint that the parameters are
+ contiguous between min and max.
+ Two exceptions:
+ -rule3d 0: Picks a random rule from all rules that have known patterns
+ -rule3d 1: Picks a random rule from all rules that have known gliders
+
+ Mode options:
+ -batchcount <int>: number of cycles before glider (if one exists)
+ -size <int>: size of cell in pixels
+ -delay <int>: controls the length of a cycle in microsec
+ -cycles <int>: how many cycles before a new lifeform
+
+ -verbose: verbose help identify life (to be referenced with the source code)
+ (good to use with -inwindow or -debug)
+
+loop: Chris Langton's loops, its always the same but oriented 4 ways
+ this is far as I know is the best example of a self-generating life form.
+ Caution: this may cause you to question G-d's existence. :)
+ Mode options:
+ -size <int>: size of cell in pixels
+ -delay <int>: controls the length of a cycle in microsec
+ -cycles <int>: how many cycles before it starts over
+
+wator: sharks and fish on a water torus planet
+ Mode options:
+ -batchcount <int>: breed time for the fish
+ -size <int>: size of cell in pixels (sharks and fish become squares
+ and circles)
+ -delay <int>: controls the length of a cycle in microsec
+ -cycles <int>: how many cycles before a new world starts
+
+wire: (this mode lacks a good circuit generator)
+ Mode options:
+ -batchcount <int>: length of random circuit
+ -size <int>: size of cell in pixels
+ -delay <int>: controls the length of a cycle in microsec
+ -cycles <int>: how many cycles before a circuit
--- /dev/null
+--LIST_OF_FILES: C
+--Internal Software Complexity Tool -> measure
+--below generated with ls -l *.c *.h
+ant.c
+ball.c
+bat.c
+blank.c
+blot.c
+bomb.c
+bouboule.c
+bounce.c
+braid.c
+bug.c
+cartoon.c
+clock.c
+color.c
+config.h
+daisy.c
+dclock.c
+demon.c
+drift.c
+eyes.c
+fadeplot.c
+flag.c
+flag.h
+flame.c
+forest.c
+galaxy.c
+gear.c
+geometry.c
+grav.c
+helix.c
+hop.c
+hyper.c
+image.c
+julia.c
+kaleid.c
+laser.c
+life.c
+life1d.c
+life3d.c
+lightning.c
+lissie.c
+logout.c
+loop.c
+marquee.c
+maze.c
+mode.c
+mode.h
+mountain.c
+nose.c
+option.c
+pacman.c
+passwd.c
+penrose.c
+petal.c
+puzzle.c
+pyro.c
+qix.c
+random.c
+ras.c
+ras.h
+resource.c
+roll.c
+rotor.c
+shape.c
+slip.c
+sound.c
+sphere.c
+spiral.c
+spline.c
+star.c
+swarm.c
+swirl.c
+tri.c
+triangle.c
+trig.c
+tube.c
+turtle.c
+utils.c
+version.h
+vroot.h
+wator.c
+wire.c
+world.c
+worm.c
+xbm.c
+xlock.c
+xlock.h
+xmlock.c
--- /dev/null
+ant.c
+ fillcell , procedure
+ truchetcell , procedure
+ drawcell , procedure
+ drawtruchet , procedure
+ draw_anant , procedure
+ RandomSoup , procedure
+ GetTable , procedure
+ GetTurk , procedure
+ init_ant , procedure
+ draw_ant , procedure
+ release_ant , procedure
+ refresh_ant , procedure
+ global/file , file level
+
+ball.c
+ collided , procedure
+ inwin , function
+ randomball , procedure
+ init_ball , procedure
+ draw_ball , procedure
+ release_ball , procedure
+ refresh_ball , procedure
+ global/file , file level
+
+bat.c
+ init_images , procedure
+ checkCollision , procedure
+ drawabat , procedure
+ movebat , procedure
+ flapbat , procedure
+ collide , function
+ init_bat , procedure
+ draw_bat , procedure
+ release_bat , procedure
+ refresh_bat , procedure
+ global/file , file level
+
+blank.c
+ init_blank , procedure
+ draw_blank , procedure
+ release_blank , procedure
+ refresh_blank , procedure
+ global/file , file level
+
+blot.c
+ init_blot , procedure
+ draw_blot , procedure
+ release_blot , procedure
+ refresh_blot , procedure
+ global/file , file level
+
+bomb.c
+ explode , procedure
+ rivet , procedure
+ detonator , procedure
+ init_bomb , procedure
+ draw_bomb , procedure
+ release_bomb , procedure
+ refresh_bomb , procedure
+ change_bomb , procedure
+ global/file , file level
+
+bouboule.c
+ sinvary , procedure
+ sininit , procedure
+ sinfree , procedure
+ init_bouboule , procedure
+ draw_bouboule , procedure
+ release_bouboule , procedure
+ refresh_bouboule , procedure
+ global/file , file level
+
+bounce.c
+ checkCollision , procedure
+ drawball , procedure
+ moveball , procedure
+ spinball , procedure
+ collide , function
+ init_bounce , procedure
+ draw_bounce , procedure
+ release_bounce , procedure
+ refresh_bounce , procedure
+ global/file , file level
+
+braid.c
+ applyword , function
+ applywordto , function
+ applywordbackto , function
+ init_braid , procedure
+ draw_braid , procedure
+ release_braid , procedure
+ refresh_braid , procedure
+ global/file , file level
+
+bug.c
+ cart2hex , procedure
+ hex2cart , procedure
+ hexcmove , function
+ neighbor , function
+ drawabacterium , procedure
+ drawabug , procedure
+ eraseabug , procedure
+ init_buglist , procedure
+ addto_buglist , procedure
+ removefrom_buglist , procedure
+ dupin_buglist , procedure
+ cutfrom_buglist , procedure
+ reattach_buglist , procedure
+ flush_buglist , procedure
+ dirbug , function
+ mutatebug , procedure
+ makebacteria , procedure
+ redrawbacteria , procedure
+ init_bug , procedure
+ draw_bug , procedure
+ release_bug , procedure
+ refresh_bug , procedure
+ global/file , file level
+
+cartoon.c
+ initimage , procedure
+ put_cartoon , procedure
+ select_cartoon , procedure
+ move_cartoon , procedure
+ erase_image , procedure
+ init_cartoon , procedure
+ draw_cartoon , procedure
+ release_cartoon , procedure
+ global/file , file level
+
+clock.c
+ myrand , function
+ HourToAngle , function
+ MinutesToAngle , function
+ SecondsToAngle , function
+ DrawDisk , procedure
+ DrawBorder , procedure
+ DrawJewel , procedure
+ DrawHand , procedure
+ real_draw_clock , procedure
+ collide , function
+ new_clock_state , function
+ update_clock , procedure
+ init_clock , procedure
+ draw_clock , procedure
+ release_clock , procedure
+ refresh_clock , procedure
+ global/file , file level
+
+color.c
+ hsb2rgb , procedure
+ hsbramp , procedure
+ allocPixel , function
+ fixColormap , procedure
+ setColormap , procedure
+ reserveColors , procedure
+ global/file , file level
+
+config.h
+ global/file , file level
+
+daisy.c
+ drawstem , procedure
+ drawpetals , function
+ drawcenter , procedure
+ drawdaisy , procedure
+ init_daisy , procedure
+ draw_daisy , procedure
+ release_daisy , procedure
+ refresh_daisy , procedure
+ global/file , file level
+
+dclock.c
+ drawDclock , procedure
+ init_dclock , procedure
+ draw_dclock , procedure
+ release_dclock , procedure
+ refresh_dclock , procedure
+ global/file , file level
+
+demon.c
+ drawcell , procedure
+ addtolist , procedure
+ print_state , procedure
+ free_state , procedure
+ free_list , procedure
+ free_struct , procedure
+ draw_state , procedure
+ RandomSoup , procedure
+ init_demon , procedure
+ draw_demon , procedure
+ release_demon , procedure
+ refresh_demon , procedure
+ global/file , file level
+
+drift.c
+ halfrandom , function
+ frandom , function
+ initmode , procedure
+ pick_df_coefs , procedure
+ initfractal , procedure
+ init_drift , procedure
+ iter , procedure
+ draw , procedure
+ draw_flush , procedure
+ draw_drift , procedure
+ release_drift , procedure
+ refresh_drift , procedure
+ global/file , file level
+
+eyes.c
+ TFillArc , procedure
+ SetTransform , procedure
+ join_rects , procedure
+ computePupil , function
+ make_eye , procedure
+ fly_touches , function
+ fly_touches_eye , function
+ eyes_overlap , function
+ init_fly , procedure
+ unpaint_fly , procedure
+ paint_fly , procedure
+ move_fly , procedure
+ create_eyes , procedure
+ paint_eyes , procedure
+ one_time_init , procedure
+ free_eyes , procedure
+ init_eyes , procedure
+ draw_eyes , procedure
+ release_eyes , procedure
+ refresh_eyes , procedure
+ global/file , file level
+
+fadeplot.c
+ init_fadeplot , procedure
+ draw_fadeplot , procedure
+ refresh_fadeplot , procedure
+ release_fadeplot , procedure
+ global/file , file level
+
+flag.c
+ random_num , function
+ initSintab , procedure
+ affiche , procedure
+ init_flag , procedure
+ draw_flag , procedure
+ release_flag , procedure
+ refresh_flag , procedure
+ global/file , file level
+
+flag.h
+ global/file , file level
+
+flame.c
+ halfrandom , function
+ recurse , function
+ init_flame , procedure
+ draw_flame , procedure
+ release_flame , procedure
+ refresh_flame , procedure
+ global/file , file level
+
+forest.c
+ draw_tree , procedure
+ init_forest , procedure
+ draw_forest , procedure
+ release_forest , procedure
+ refresh_forest , procedure
+ global/file , file level
+
+galaxy.c
+ free_galaxies , procedure
+ startover , procedure
+ init_galaxy , procedure
+ draw_galaxy , procedure
+ release_galaxy , procedure
+ refresh_galaxy , procedure
+ global/file , file level
+
+gear.c
+ gear , procedure
+ draw , procedure
+ key , function
+ reshape , procedure
+ pinit , procedure
+ init_gear , procedure
+ draw_gear , procedure
+ release_gear , procedure
+ global/file , file level
+
+geometry.c
+ eraselines , procedure
+ drawlines , procedure
+ init_geometry , procedure
+ draw_geometry , procedure
+ release_geometry , procedure
+ refresh_geometry , procedure
+ global/file , file level
+
+grav.c
+ init_planet , procedure
+ draw_planet , procedure
+ init_grav , procedure
+ draw_grav , procedure
+ release_grav , procedure
+ refresh_grav , procedure
+ global/file , file level
+
+helix.c
+ gcd , function
+ helix , procedure
+ random_helix , procedure
+ init_helix , procedure
+ draw_helix , procedure
+ release_helix , procedure
+ refresh_helix , procedure
+ global/file , file level
+
+hop.c
+ init_hop , procedure
+ draw_hop , procedure
+ release_hop , procedure
+ refresh_hop , procedure
+ global/file , file level
+
+hyper.c
+ move_line , procedure
+ init_hyper , procedure
+ draw_hyper , procedure
+ release_hyper , procedure
+ refresh_hyper , procedure
+ global/file , file level
+
+image.c
+ init_image , procedure
+ draw_image , procedure
+ release_image , procedure
+ refresh_image , procedure
+ global/file , file level
+
+julia.c
+ apply , procedure
+ incr , procedure
+ init_julia , procedure
+ draw_julia , procedure
+ release_julia , procedure
+ refresh_julia , procedure
+ global/file , file level
+
+kaleid.c
+ init_kaleid , procedure
+ draw_kaleid , procedure
+ release_kaleid , procedure
+ refresh_kaleid , procedure
+ global/file , file level
+
+laser.c
+ init_laser , procedure
+ draw_laser_once , procedure
+ draw_laser , procedure
+ release_laser , procedure
+ refresh_laser , procedure
+ global/file , file level
+
+life.c
+ drawcell , procedure
+ erasecell , procedure
+ spawn , procedure
+ ckill , procedure
+ setcell , procedure
+ alloccells , procedure
+ freecells , procedure
+ init_fates , procedure
+ RandomSoup , procedure
+ GetPattern , procedure
+ shooter , procedure
+ init_life , procedure
+ draw_life , procedure
+ release_life , procedure
+ refresh_life , procedure
+ change_life , procedure
+ global/file , file level
+
+life1d.c
+ drawcell , procedure
+ RandomSoup , procedure
+ power , function
+ GetRule , procedure
+ compare , function
+ init_life1d , procedure
+ draw_life1d , procedure
+ release_life1d , procedure
+ refresh_life1d , procedure
+ global/file , file level
+
+life3d.c
+ Rule2Array , function
+ Array2Rule , function
+ Init3D , procedure
+ NewCell , function
+ AddToList , procedure
+ AddToEraseList , procedure
+ DelFromList , procedure
+ DelFromEraseList , procedure
+ MemInit , procedure
+ BaseOffset , procedure
+ GetMem , function
+ SetMem , procedure
+ ChangeMem , procedure
+ ClearMem , procedure
+ IncrementNbrs3D , procedure
+ End3D , procedure
+ RunLife3D , procedure
+ CountCells3D , function
+ DisplayList , procedure
+ RandomSoup , procedure
+ GetPattern , procedure
+ NewViewpoint , procedure
+ NewPoint , procedure
+ SortList , procedure
+ DrawFace , procedure
+ DrawCube , function
+ DrawScreen , procedure
+ shooter , procedure
+ initrule , procedure
+ init_life3d , procedure
+ draw_life3d , procedure
+ release_life3d , procedure
+ refresh_life3d , procedure
+ change_life3d , procedure
+ global/file , file level
+
+lightning.c
+ setup_multi_strike , function
+ flashing_strike , function
+ flash_duration , procedure
+ random_storm , procedure
+ generate , procedure
+ create_fork , procedure
+ update_bolt , procedure
+ draw_bolt , procedure
+ first_strike , procedure
+ draw_line , procedure
+ level1_strike , procedure
+ distance , function
+ level2_strike , procedure
+ storm_active , function
+ wiggle_bolt , procedure
+ wiggle_line , procedure
+ init_lightning , procedure
+ draw_lightning , procedure
+ release_lightning , procedure
+ refresh_lightning , procedure
+ global/file , file level
+
+lissie.c
+ drawlissie , procedure
+ initlissie , procedure
+ init_lissie , procedure
+ draw_lissie , procedure
+ release_lissie , procedure
+ refresh_lissie , procedure
+ global/file , file level
+
+logout.c
+ err_handler , function
+ has_property , function
+ has_wm_state , function
+ has_wm_protocols , function
+ send_delete_message , procedure
+ handle_top_level , procedure
+ recurse_tree , procedure
+ kill_tree , procedure
+ closedownLogout , procedure
+ sessionLogout , procedure
+ uglyLogout , procedure
+ logoutUser , procedure
+ fullLock , function
+ global/file , file level
+
+loop.c
+ addtolist , procedure
+ print_state , procedure
+ free_state , procedure
+ drawcell , procedure
+ draw_state , procedure
+ init_table , procedure
+ init_adam , procedure
+ do_gen , procedure
+ free_list , procedure
+ init_loop , procedure
+ draw_loop , procedure
+ release_loop , procedure
+ refresh_loop , procedure
+ global/file , file level
+
+marquee.c
+ font_width , function
+ is_valid_char , function
+ is_char_back_char , function
+ char_back_char_width , function
+ fixup_back , function
+ text_font_width , function
+ text_height , function
+ add_blanks , function
+ add_letter , procedure
+ init_marquee , procedure
+ draw_marquee , procedure
+ release_marquee , procedure
+ refresh_marquee , procedure
+ global/file , file level
+
+maze.c
+ free_maze , procedure
+ set_maze_sizes , procedure
+ initialize_maze , procedure
+ choose_door , function
+ draw_maze_walls , procedure
+ backup , function
+ create_maze_walls , procedure
+ draw_maze_border , procedure
+ draw_wall , procedure
+ draw_solid_square , procedure
+ solve_maze , procedure
+ enter_square , procedure
+ init_maze , procedure
+ draw_maze , procedure
+ release_maze , procedure
+ refresh_maze , procedure
+ global/file , file level
+
+mode.c
+ set_default_mode , procedure
+ set_window_title , procedure
+ call_release_hook , procedure
+ release_last_mode , procedure
+ call_init_hook , procedure
+ call_callback_hook , procedure
+ call_refresh_hook , procedure
+ call_change_hook , procedure
+ global/file , file level
+
+mode.h
+ global/file , file level
+
+mountain.c
+ spread , procedure
+ drawamountain , procedure
+ init_mountain , procedure
+ draw_mountain , procedure
+ release_mountain , procedure
+ refresh_mountain , procedure
+ global/file , file level
+
+nose.c
+ move , procedure
+ walk , procedure
+ think , function
+ talk , procedure
+ look , function
+ init_nose , procedure
+ draw_nose , procedure
+ release_nose , procedure
+ refresh_nose , procedure
+ global/file , file level
+
+option.c
+ managePrompt , procedure
+ f_option , procedure
+ f_Dialog , procedure
+ Setup_Option , procedure
+ global/file , file level
+
+pacman.c
+ clearcorners , procedure
+ repopulate , procedure
+ movepac , procedure
+ init_pacman , procedure
+ draw_pacman , procedure
+ release_pacman , procedure
+ refresh_pacman , procedure
+ global/file , file level
+
+passwd.c
+ new_pwlnode , function
+ my_passwd_entry , function
+ getUserName , procedure
+ passwd_invalid , function
+ getCryptedUserPasswd , procedure
+ getCryptedRootPasswd , procedure
+ checkPasswd , function
+ initDCE , procedure
+ error_string , function
+ check_dce_net_passwd , function
+ krb_check_password , function
+ krb_check_password , function
+ get_multiple , procedure
+ set_multiple , procedure
+ gpass , procedure
+ initPasswd , procedure
+ global/file , file level
+
+penrose.c
+ vertex_dir , function
+ add_unit_vec , procedure
+ fived_to_loc , function
+ release_screen , procedure
+ init_penrose , procedure
+ match_rules , function
+ find_completions , function
+ draw_tile , procedure
+ check_vertex , procedure
+ delete_vertex , procedure
+ fills_vertex , function
+ fringe_changes , function
+ add_vtype , procedure
+ alloc_vertex , function
+ add_tile , function
+ add_forced_tile , function
+ legal_move , function
+ add_random_tile , procedure
+ draw_penrose , procedure
+ release_penrose , procedure
+ global/file , file level
+
+petal.c
+ gcd , function
+ numlines , function
+ compute_petal , function
+ random_petal , procedure
+ init_petal , procedure
+ draw_petal , procedure
+ release_petal , procedure
+ refresh_petal , procedure
+ global/file , file level
+
+puzzle.c
+ font_width , function
+ NumberScreen , procedure
+ setupmove , function
+ setupmovedelta , procedure
+ wrapupmove , procedure
+ wrapupmovedelta , procedure
+ moveboxdelta , function
+ init_puzzle , procedure
+ draw_puzzle , procedure
+ release_puzzle , procedure
+ global/file , file level
+
+pyro.c
+ ignite , procedure
+ animate , procedure
+ shootup , procedure
+ burst , procedure
+ init_pyro , procedure
+ draw_pyro , procedure
+ release_pyro , procedure
+ refresh_pyro , procedure
+ global/file , file level
+
+qix.c
+ init_qix , procedure
+ draw_qix , procedure
+ release_qix , procedure
+ refresh_qix , procedure
+ global/file , file level
+
+random.c
+ pickMode , function
+ strpmtok , function
+ parsemodelist , procedure
+ setMode , procedure
+ init_random , procedure
+ draw_random , procedure
+ refresh_random , procedure
+ change_random , procedure
+ global/file , file level
+
+ras.c
+ analyze_header , procedure
+ convert_colors , procedure
+ find_nearest , function
+ GetWhite , function
+ GetBlack , function
+ GetForeground , function
+ GetBackground , function
+ get_long , function
+ RasterFileToImage , function
+ SetImageColors , procedure
+ global/file , file level
+
+ras.h
+ global/file , file level
+
+resource.c
+ stripname , function
+ Syntax , procedure
+ Help , procedure
+ Version , procedure
+ DumpResources , procedure
+ LowerString , procedure
+ GetResource , procedure
+ parsefilepath , function
+ open_display , procedure
+ printvar , procedure
+ getResources , procedure
+ checkResources , procedure
+ get_info , function
+ descr , function
+ global/file , file level
+
+roll.c
+ createsphere , procedure
+ rotation3d , procedure
+ project , procedure
+ init_roll , procedure
+ draw_roll , procedure
+ release_roll , procedure
+ refresh_roll , procedure
+ global/file , file level
+
+rotor.c
+ init_rotor , procedure
+ draw_rotor , procedure
+ release_rotor , procedure
+ refresh_rotor , procedure
+ global/file , file level
+
+shape.c
+ init_shape , procedure
+ draw_shape , procedure
+ release_shape , procedure
+ refresh_shape , procedure
+ global/file , file level
+
+slip.c
+ halfrandom , function
+ erandom , function
+ prepare_screen , procedure
+ quantize , function
+ init_slip , procedure
+ draw_slip , procedure
+ release_slip , procedure
+ global/file , file level
+
+sound.c
+ play_sound , procedure
+ play_sound , procedure
+ play_sound , procedure
+ play_sound , procedure
+ global/file , file level
+
+sphere.c
+ init_sphere , procedure
+ draw_sphere , procedure
+ release_sphere , procedure
+ refresh_sphere , procedure
+ global/file , file level
+
+spiral.c
+ draw_dots , procedure
+ init_spiral , procedure
+ draw_spiral , procedure
+ release_spiral , procedure
+ refresh_spiral , procedure
+ global/file , file level
+
+spline.c
+ init_spline , procedure
+ draw_spline , procedure
+ XDrawSpline , procedure
+ release_spline , procedure
+ refresh_spline , procedure
+ global/file , file level
+
+star.c
+ star_reset , procedure
+ star_tick , procedure
+ star_compute , procedure
+ draw_trek , procedure
+ star_draw , procedure
+ init_pixmaps , procedure
+ tick_stars , procedure
+ compute_move , function
+ init_star , procedure
+ draw_star , procedure
+ release_star , procedure
+ refresh_star , procedure
+ global/file , file level
+
+swarm.c
+ init_swarm , procedure
+ draw_swarm , procedure
+ release_swarm , procedure
+ refresh_swarm , procedure
+ global/file , file level
+
+swirl.c
+ random_no , function
+ initialise_swirl , procedure
+ initialise_image , procedure
+ initialise_colours , procedure
+ set_black_and_white , procedure
+ set_colour , procedure
+ get_colour , procedure
+ interpolate , procedure
+ basic_map , procedure
+ pre_rotate , procedure
+ default_visual_info , function
+ create_colourmap , procedure
+ install_map , procedure
+ create_knots , procedure
+ do_point , function
+ draw_block , procedure
+ draw_point , procedure
+ next_point , procedure
+ init_swirl , procedure
+ draw_swirl , procedure
+ release_swirl , procedure
+ refresh_swirl , procedure
+ global/file , file level
+
+tri.c
+ startover , procedure
+ init_tri , procedure
+ draw_tri , procedure
+ release_tri , procedure
+ refresh_tri , procedure
+ global/file , file level
+
+triangle.c
+ draw_atriangle , procedure
+ calc_points1 , procedure
+ calc_points2 , procedure
+ draw_mesh , procedure
+ init_triangle , procedure
+ draw_triangle , procedure
+ release_triangle , procedure
+ refresh_triangle , procedure
+ global/file , file level
+
+trig.c
+ init_trig , procedure
+ draw_trig , procedure
+ release_trig , procedure
+ global/file , file level
+
+tub.c
+ init_tube , procedure
+ draw_tube , procedure
+ release_tube , procedure
+ global/file , file level
+
+tube.c
+ init_tube , procedure
+ draw_tube , procedure
+ release_tube , procedure
+ global/file , file level
+
+turtle.c
+ generate_hilbert , procedure
+ generate_cesarovar , procedure
+ generate_harter_heightway , procedure
+ init_turtle , procedure
+ draw_turtle , procedure
+ release_turtle , procedure
+ global/file , file level
+
+utils.c
+ usleep , function
+ seconds , function
+ readable , function
+ strdup , function
+ SetRNG , procedure
+ LongRNG , function
+ strcat_firstword , procedure
+ isRibbon , function
+ getWords , function
+ getFont , function
+ randomImage , procedure
+ index_dir , function
+ upcase , procedure
+ get_dir , procedure
+ sel_image , function
+ scan_dir , function
+ getImage , procedure
+ destroyImage , procedure
+ XEraseImage , procedure
+ global/file , file level
+
+version.h
+ global/file , file level
+
+vroot.h
+ VirtualRootWindowOfScreen , function
+ global/file , file level
+
+wator.c
+ drawcell , procedure
+ erasecell , procedure
+ init_kindlist , procedure
+ addto_kindlist , procedure
+ removefrom_kindlist , procedure
+ dupin_kindlist , procedure
+ cutfrom_kindlist , procedure
+ reattach_kindlist , procedure
+ flush_kindlist , procedure
+ init_wator , procedure
+ draw_wator , procedure
+ release_wator , procedure
+ refresh_wator , procedure
+ global/file , file level
+
+wire.c
+ addtolist , procedure
+ print_state , procedure
+ free_state , procedure
+ drawcell , procedure
+ draw_state , procedure
+ RandomSoup , procedure
+ create_path , procedure
+ do_gen , procedure
+ free_list , procedure
+ init_wire , procedure
+ draw_wire , procedure
+ release_wire , procedure
+ refresh_wire , procedure
+ global/file , file level
+
+world.c
+ init_world , procedure
+ draw_world , procedure
+ release_world , procedure
+ refresh_world , procedure
+ global/file , file level
+
+worm.c
+ worm_doit , procedure
+ free_worms , procedure
+ init_worm , procedure
+ draw_worm , procedure
+ release_worm , procedure
+ refresh_worm , procedure
+ global/file , file level
+
+xbm.c
+ XbmReadFileToImage , function
+ global/file , file level
+
+xlock.c
+ error , procedure
+ warning , procedure
+ XGrabHosts , procedure
+ XUngrabHosts , procedure
+ GrabKeyboardAndMouse , procedure
+ XChangeGrabbedCursor , procedure
+ window_size_changed , function
+ mode_info , function
+ finish , procedure
+ xio_error , function
+ putText , procedure
+ statusUpdate , procedure
+ checkLogout , procedure
+ sub_timers , procedure
+ runMainLoop , function
+ ReadXString , function
+ getPassword , function
+ event_screen , function
+ justDisplay , function
+ sigcatch , procedure
+ syslogStart , procedure
+ syslogStop , procedure
+ lockDisplay , procedure
+ read_message , procedure
+ main , function
+ global/file , file level
+
+xlock.h
+ global/file , file level
+
+xmlock.c
+ f_PushButtons , procedure
+ f_ScrolledListModes , procedure
+ Setup_Widget , procedure
+ main , function
+ global/file , file level
+
--- /dev/null
+
+ MEASURE Data Table for Files in: measure.lis
+
+FILE NAME EXT PDIR STMT NCNB BLK TEXT TOTAL BLK CMT
+ SUBPROGRAM CMP CMP LINES LOC LOC LOC CMTS LINES % % PBS
+
+ant.c
+ fillcell 6 7 0 10 20 2 0 22 9 0 yes
+ truchetcell 6 6 0 22 47 2 2 51 4 4 yes
+ drawcell 3 3 0 16 21 2 0 23 8 0 yes
+ drawtruchet 3 4 0 6 10 1 0 11 9 0 yes
+ draw_anant 8 9 2 23 40 3 3 43 6 6 yes
+ RandomSoup 3 3 0 8 11 1 0 12 8 0 yes
+ GetTable 3 3 0 14 18 1 0 19 5 0 yes
+ GetTurk 5 5 0 15 19 2 3 24 9 13 yes
+ init_ant 28 29 0 76 114 8 2 124 6 1 yes
+ draw_ant 42 48 0 73 108 4 5 115 3 4 yes
+ release_ant 9 9 0 14 23 2 0 25 8 0 yes
+ refresh_ant 1 1 0 4 5 1 0 6 16 0
+ global/file 3 3 33 38 151 34 68 233 18 31 yes
+ file-total: 120 130 35 319 587 63 83 708 9 12
+ball.c
+ collided 3 3 0 54 61 14 0 75 18 0 yes
+ inwin 7 10 0 15 24 1 0 25 4 0 yes
+ randomball 11 12 0 50 66 13 3 81 16 4 yes
+ init_ball 15 17 0 43 62 6 2 70 8 3 yes
+ draw_ball 21 25 0 64 98 6 0 104 5 0 yes
+ release_ball 6 6 0 11 17 3 0 20 15 0 yes
+ refresh_ball 1 1 0 2 3 0 0 3 0 0
+ global/file 1 1 14 21 52 19 15 86 26 22 yes
+ file-total: 65 75 14 260 383 62 20 464 13 4
+bat.c
+ init_images 17 18 4 40 62 6 3 68 8 4 yes
+ checkCollisio 7 8 0 34 44 1 0 45 2 0 yes
+ drawabat 5 5 0 16 26 1 0 27 3 0 yes
+ movebat 6 6 0 23 28 0 9 36 0 24 yes
+ flapbat 2 2 0 7 10 0 0 10 0 0 yes
+ collide 3 3 0 8 11 1 0 12 8 0 yes
+ init_bat 20 24 0 59 83 2 1 86 2 1 yes
+ draw_bat 5 5 0 9 14 1 1 15 6 6 yes
+ release_bat 8 8 2 13 22 4 1 26 15 4 yes
+ refresh_bat 1 1 0 1 2 0 1 3 0 33
+ global/file 6 6 37 31 105 30 29 175 22 21 yes
+ file-total: 80 86 43 241 407 46 45 503 10 9
+blank.c
+ init_blank 2 3 0 3 5 0 1 6 0 16
+ draw_blank 3 4 0 4 8 0 1 9 0 11
+ release_blank 2 3 0 4 6 0 1 7 0 14
+ refresh_blank 1 1 0 1 2 0 1 3 0 33
+ global/file 1 1 3 2 14 9 12 40 39 46 yes
+ file-total: 9 12 3 14 35 9 16 65 20 31
+blot.c
+ init_blot 9 10 0 25 35 4 1 40 10 2 yes
+ draw_blot 8 9 0 35 44 1 0 45 2 0 yes
+
+\f
+ MEASURE Data Table (continued)
+
+FILE NAME EXT PDIR STMT NCNB BLK TEXT TOTAL BLK CMT
+ SUBPROGRAM CMP CMP LINES LOC LOC LOC CMTS LINES % % PBS
+
+ release_blot 4 4 0 8 12 1 0 13 7 0 yes
+ refresh_blot 1 1 0 2 3 0 0 3 0 0
+ global/file 1 1 3 14 27 13 16 62 32 37 yes
+ file-total: 23 25 3 84 121 19 17 163 13 12
+bomb.c
+ explode 5 8 6 15 26 2 4 33 7 13 yes
+ rivet 2 2 0 9 14 1 0 15 6 0 yes
+ detonator 4 5 0 19 30 2 4 38 6 11 yes
+ init_bomb 12 13 5 39 55 5 13 69 8 19 yes
+ draw_bomb 8 8 6 31 51 3 5 56 5 8 yes
+ release_bomb 3 3 0 7 10 0 0 10 0 0 yes
+ refresh_bomb 1 1 0 2 3 0 0 3 0 0
+ change_bomb 2 2 0 10 12 1 1 13 7 7 yes
+ global/file 4 4 21 16 55 22 25 102 28 31 yes
+ file-total: 41 46 38 148 256 36 52 339 12 16
+bouboule.c
+ sinvary 4 4 0 8 14 3 0 17 17 0 yes
+ sininit 3 3 0 11 19 0 1 20 0 5 yes
+ sinfree 2 2 0 7 9 1 0 10 10 0 yes
+ init_bouboule 38 49 16 99 185 20 15 219 9 7 yes
+ draw_bouboule 35 41 17 122 205 19 24 247 8 10 yes
+ release_boubo 9 10 2 20 30 2 0 32 6 0 yes
+ refresh_boubo 1 1 0 1 2 0 1 3 0 33
+ global/file 8 9 44 37 104 28 116 240 21 52 yes
+ file-total: 100 119 79 305 568 73 157 788 11 21
+bounce.c
+ checkCollisio 7 8 0 34 44 1 0 45 2 0 yes
+ drawball 7 7 8 27 45 3 0 48 6 0 yes
+ moveball 7 7 0 28 33 0 6 39 0 15 yes
+ spinball 2 2 0 7 10 0 0 10 0 0 yes
+ collide 3 3 0 8 11 1 0 12 8 0 yes
+ init_bounce 22 26 0 69 96 3 1 100 3 1 yes
+ draw_bounce 5 5 0 9 14 1 1 15 6 6 yes
+ release_bounc 6 6 0 11 17 2 0 19 10 0 yes
+ refresh_bounc 1 1 0 1 2 0 1 3 0 33
+ global/file 3 3 25 23 69 22 37 142 24 34 yes
+ file-total: 63 68 33 217 341 33 46 433 8 11
+braid.c
+ applyword 7 7 0 10 17 1 0 18 5 0 yes
+ applywordto 4 4 0 9 12 1 0 13 7 0 yes
+ applywordback 4 4 0 9 12 1 0 13 7 0 yes
+ init_braid 24 26 0 51 80 11 2 93 12 2 yes
+ draw_braid 33 35 12 74 143 7 2 152 4 1 yes
+ release_braid 2 2 0 4 6 0 0 6 0 0 yes
+ refresh_braid 1 1 0 1 2 0 1 3 0 33
+ global/file 5 5 23 16 55 18 14 87 24 20 yes
+ file-total: 80 84 35 174 327 39 19 385 10 5
+bug.c
+
+\f
+ MEASURE Data Table (continued)
+
+FILE NAME EXT PDIR STMT NCNB BLK TEXT TOTAL BLK CMT
+ SUBPROGRAM CMP CMP LINES LOC LOC LOC CMTS LINES % % PBS
+
+ cart2hex 1 1 0 3 4 0 0 4 0 0
+ hex2cart 1 1 0 3 4 0 0 4 0 0
+ hexcmove 7 11 0 21 30 0 0 30 0 0 yes
+ neighbor 13 19 0 15 28 1 0 29 3 0 yes
+ drawabacteriu 2 2 0 7 12 1 0 13 7 0 yes
+ drawabug 2 2 0 7 12 1 0 13 7 0 yes
+ eraseabug 1 1 0 6 9 1 0 10 10 0 yes
+ init_buglist 1 1 0 13 14 1 2 17 6 12 yes
+ addto_buglist 1 1 0 7 8 0 0 8 0 0 yes
+ removefrom_bu 1 1 0 5 6 0 0 6 0 0 yes
+ dupin_buglist 1 1 0 9 10 1 0 11 9 0 yes
+ cutfrom_bugli 1 1 0 9 10 0 0 10 0 0 yes
+ reattach_bugl 1 1 0 8 9 0 0 9 0 0 yes
+ flush_buglist 3 3 0 11 14 1 2 17 6 12 yes
+ dirbug 3 3 0 8 11 1 1 12 8 8 yes
+ mutatebug 6 6 0 12 18 1 0 19 5 0 yes
+ makebacteria 3 5 0 12 15 1 1 17 6 6 yes
+ redrawbacteri 2 2 0 7 9 2 0 11 18 0 yes
+ init_bug 26 30 3 79 113 7 10 124 5 8 yes
+ draw_bug 15 18 0 63 81 2 6 84 2 6 yes
+ release_bug 5 5 0 14 19 2 0 21 9 0 yes
+ refresh_bug 1 1 0 4 5 1 0 6 16 0
+ global/file 2 2 26 30 105 37 28 170 26 21 yes
+ file-total: 99 118 29 353 546 61 50 645 10 8
+cartoon.c
+ initimage 10 11 2 30 43 4 1 47 8 2 yes
+ put_cartoon 2 2 0 5 13 1 2 15 7 13
+ select_cartoo 7 7 6 11 22 2 2 24 8 8 yes
+ move_cartoon 4 10 0 15 21 5 4 29 19 16 yes
+ erase_image 9 9 0 9 18 1 1 19 5 5 yes
+ init_cartoon 7 7 0 23 31 9 1 40 22 3 yes
+ draw_cartoon 2 2 0 6 8 1 1 9 11 11
+ release_carto 7 7 2 11 19 2 1 21 9 5 yes
+ global/file 7 7 36 18 79 24 41 156 23 34 yes
+ file-total: 55 62 46 128 254 49 54 360 16 17
+clock.c
+ myrand 1 1 0 2 3 0 0 3 0 0 yes
+ HourToAngle 1 1 0 2 5 0 0 5 0 0
+ MinutesToAngl 1 1 0 2 4 0 0 4 0 0
+ SecondsToAngl 1 1 0 2 3 0 0 3 0 0
+ DrawDisk 2 2 0 4 10 1 0 11 9 0 yes
+ DrawBorder 2 2 0 8 16 3 0 19 15 0 yes
+ DrawJewel 2 2 0 8 14 1 0 15 6 0 yes
+ DrawHand 2 2 0 14 22 1 1 24 4 4 yes
+ real_draw_clo 1 1 0 7 11 1 0 12 8 0 yes
+ collide 3 3 0 8 12 1 0 13 7 0 yes
+ new_clock_sta 7 7 0 31 50 6 5 61 10 9 yes
+ update_clock 1 1 0 10 19 1 0 20 5 0 yes
+
+\f
+ MEASURE Data Table (continued)
+
+FILE NAME EXT PDIR STMT NCNB BLK TEXT TOTAL BLK CMT
+ SUBPROGRAM CMP CMP LINES LOC LOC LOC CMTS LINES % % PBS
+
+ init_clock 13 13 0 32 47 7 2 56 12 4 yes
+ draw_clock 10 10 0 14 23 1 0 24 4 0 yes
+ release_clock 4 4 0 8 12 2 0 14 14 0 yes
+ refresh_clock 1 1 0 3 4 1 0 5 20 0
+ global/file 2 2 21 29 87 25 28 127 22 24 yes
+ file-total: 54 54 21 184 342 51 36 416 12 9
+color.c
+ hsb2rgb 7 7 0 37 45 1 2 46 2 4 yes
+ hsbramp 2 2 0 10 12 1 0 13 7 0 yes
+ allocPixel 2 2 0 8 11 1 0 12 8 0 yes
+ fixColormap 16 19 2 50 69 6 9 84 8 11 yes
+ setColormap 2 2 0 3 5 0 9 14 0 64
+ reserveColors 4 7 2 32 41 6 3 50 12 6 yes
+ global/file 2 2 5 1 22 16 19 68 42 46 yes
+ file-total: 35 41 9 141 205 31 42 287 13 17
+config.h
+ global/file 0 0 26 0 26 52 94 172 64 78
+ file-total: 0 0 26 0 26 52 94 172 64 78
+daisy.c
+ drawstem 3 3 3 8 15 1 0 16 6 0 yes
+ drawpetals 11 12 0 34 52 1 0 53 1 0 yes
+ drawcenter 4 5 0 13 19 1 1 21 5 5 yes
+ drawdaisy 5 5 6 21 35 1 3 38 2 7 yes
+ init_daisy 5 5 0 14 20 3 0 23 13 0 yes
+ draw_daisy 3 3 0 4 7 1 0 8 12 0 yes
+ release_daisy 2 2 0 4 6 0 0 6 0 0 yes
+ refresh_daisy 2 2 0 4 7 1 0 8 12 0 yes
+ global/file 1 1 8 10 37 18 13 71 32 26 yes
+ file-total: 36 38 17 112 198 27 17 244 12 7
+dclock.c
+ drawDclock 18 23 0 73 105 7 8 121 6 7 yes
+ init_dclock 15 15 0 50 67 9 5 77 11 6 yes
+ draw_dclock 3 3 0 5 8 1 0 9 11 0 yes
+ release_dcloc 7 7 0 14 21 3 0 24 12 0 yes
+ refresh_dcloc 1 1 0 1 2 0 1 3 0 33
+ global/file 1 1 5 20 38 14 7 61 26 15 yes
+ file-total: 45 50 5 163 241 34 21 295 12 8
+demon.c
+ drawcell 6 7 0 13 26 2 0 28 7 0 yes
+ addtolist 1 1 0 9 10 1 0 11 9 0 yes
+ print_state 2 2 0 10 13 1 0 14 7 0 yes
+ free_state 3 3 0 8 11 1 0 12 8 0 yes
+ free_list 2 2 0 3 5 1 0 6 16 0
+ free_struct 6 6 0 6 12 0 0 12 0 0 yes
+ draw_state 7 7 0 34 45 4 5 52 8 10 yes
+ RandomSoup 3 3 0 8 12 1 0 13 7 0 yes
+ init_demon 18 18 0 54 81 10 0 91 10 0 yes
+ draw_demon 44 44 0 75 121 3 10 134 2 7 yes
+
+\f
+ MEASURE Data Table (continued)
+
+FILE NAME EXT PDIR STMT NCNB BLK TEXT TOTAL BLK CMT
+ SUBPROGRAM CMP CMP LINES LOC LOC LOC CMTS LINES % % PBS
+
+ release_demon 3 3 0 6 9 1 0 10 10 0 yes
+ refresh_demon 1 1 0 4 5 1 0 6 16 0
+ global/file 2 2 9 22 66 26 18 119 28 21 yes
+ file-total: 98 99 9 252 416 52 33 508 11 7
+drift.c
+ halfrandom 2 2 0 11 13 1 0 14 7 0 yes
+ frandom 8 8 0 29 39 4 0 43 9 0 yes
+ initmode 5 7 1 24 31 5 0 37 13 0 yes
+ pick_df_coefs 6 6 0 11 17 2 0 19 10 0 yes
+ initfractal 11 12 1 21 37 4 0 42 9 0 yes
+ init_drift 3 3 0 10 14 3 0 17 17 0 yes
+ iter 20 27 2 72 110 17 15 140 13 12 yes
+ draw 8 11 0 32 41 6 0 47 12 0 yes
+ draw_flush 5 5 0 15 22 2 0 24 8 0 yes
+ draw_drift 11 12 0 21 33 4 0 37 10 0 yes
+ release_drift 2 2 0 4 6 0 0 6 0 0 yes
+ refresh_drift 1 1 0 2 3 0 0 3 0 0
+ global/file 1 1 13 30 83 32 35 139 27 29 yes
+ file-total: 83 97 17 282 449 80 50 568 15 10
+eyes.c
+ TFillArc 4 4 0 18 22 2 0 24 8 0 yes
+ SetTransform 1 1 0 5 6 0 0 6 0 0 yes
+ join_rects 5 5 0 12 13 1 5 18 7 27
+ computePupil 3 4 0 31 34 1 0 35 2 0 yes
+ make_eye 2 2 0 21 39 7 5 51 15 11
+ fly_touches 7 7 0 8 13 1 0 14 7 0 yes
+ fly_touches_e 2 3 0 4 6 0 0 6 0 0 yes
+ eyes_overlap 5 5 0 6 11 0 0 11 0 0 yes
+ init_fly 4 4 0 23 27 5 10 33 15 27 yes
+ unpaint_fly 2 2 0 11 15 1 0 16 6 0 yes
+ paint_fly 2 2 0 13 17 1 2 21 5 10
+ move_fly 13 13 0 37 46 4 14 56 8 23 yes
+ create_eyes 18 19 0 64 82 10 24 106 10 22 yes
+ paint_eyes 12 15 0 40 58 4 24 83 6 29 yes
+ one_time_init 4 4 0 6 11 0 1 11 0 8 yes
+ free_eyes 4 4 0 6 10 1 0 11 9 0 yes
+ init_eyes 14 14 0 36 55 7 8 66 11 12 yes
+ draw_eyes 3 3 0 9 15 3 1 19 16 6 yes
+ release_eyes 6 6 0 13 19 3 0 22 13 0 yes
+ refresh_eyes 3 3 0 8 11 2 2 14 15 15
+ global/file 2 4 46 39 131 78 77 329 37 37 yes
+ file-total: 116 124 46 410 641 131 173 952 16 21
+fadeplot.c
+ init_fadeplot 8 8 0 24 32 4 1 37 11 3 yes
+ draw_fadeplot 13 13 4 36 58 5 5 68 7 7 yes
+ refresh_fadep 1 1 0 1 2 1 0 3 33 0
+ release_fadep 1 1 0 1 2 0 1 3 0 33
+ global/file 1 1 6 10 89 15 20 131 14 18 yes
+
+\f
+ MEASURE Data Table (continued)
+
+FILE NAME EXT PDIR STMT NCNB BLK TEXT TOTAL BLK CMT
+ SUBPROGRAM CMP CMP LINES LOC LOC LOC CMTS LINES % % PBS
+
+ file-total: 24 24 10 72 183 25 27 242 12 12
+flag.c
+ random_num 1 1 0 2 3 0 0 3 0 0
+ initSintab 2 2 0 4 6 1 0 7 14 0 yes
+ affiche 8 8 3 13 29 1 0 30 3 0 yes
+ init_flag 9 12 0 37 50 6 3 57 10 5 yes
+ draw_flag 5 6 0 21 29 1 1 31 3 3 yes
+ release_flag 4 4 0 6 10 1 0 11 9 0 yes
+ refresh_flag 1 1 0 1 2 0 1 3 0 33
+ global/file 1 1 16 17 49 15 8 76 23 14 yes
+ file-total: 31 35 19 101 178 25 13 218 12 6
+flag.h
+ global/file 0 0 2 1 63 0 0 63 0 0 yes
+ file-total: 0 0 2 1 63 0 0 63 0 0
+flame.c
+ halfrandom 2 2 0 10 12 1 0 13 7 0 yes
+ recurse 30 39 2 82 127 8 15 136 5 10 yes
+ init_flame 4 4 0 17 22 6 0 28 21 0 yes
+ draw_flame 8 8 0 21 31 4 3 38 11 8 yes
+ release_flame 2 2 0 4 6 0 0 6 0 0 yes
+ refresh_flame 1 1 0 2 3 0 0 3 0 0
+ global/file 1 1 6 16 37 14 12 67 27 24 yes
+ file-total: 48 57 8 152 238 33 30 291 12 11
+forest.c
+ draw_tree 4 4 0 25 29 10 2 41 25 6 yes
+ init_forest 5 5 0 12 18 3 0 21 14 0 yes
+ draw_forest 4 4 0 23 27 6 0 33 18 0 yes
+ release_fores 2 2 0 4 6 0 0 6 0 0 yes
+ refresh_fores 2 2 0 4 7 1 0 8 12 0 yes
+ global/file 1 1 14 8 36 20 24 78 35 40 yes
+ file-total: 18 18 14 76 123 40 26 187 24 17
+galaxy.c
+ free_galaxies 4 4 0 8 12 2 0 14 14 0 yes
+ startover 10 10 2 69 91 16 7 110 14 7 yes
+ init_galaxy 5 5 0 19 26 4 0 30 13 0 yes
+ draw_galaxy 14 20 2 69 93 12 3 105 11 3 yes
+ release_galax 3 3 0 6 9 1 0 10 10 0 yes
+ refresh_galax 1 1 0 1 2 0 1 3 0 33
+ global/file 3 3 23 31 70 20 30 109 22 30 yes
+ file-total: 40 46 27 203 303 55 41 381 15 11
+gear.c
+ gear 7 7 0 79 86 21 6 113 19 6 yes
+ draw 2 2 0 26 28 8 1 37 22 3 yes
+ key 8 8 0 16 27 0 0 27 0 0 yes
+ reshape 1 1 0 10 11 2 0 13 15 0 yes
+ pinit 4 4 0 35 43 4 1 48 8 2 yes
+ init_gear 4 4 0 22 28 6 5 39 17 15 yes
+ draw_gear 2 2 0 9 10 4 1 15 28 9 yes
+
+\f
+ MEASURE Data Table (continued)
+
+FILE NAME EXT PDIR STMT NCNB BLK TEXT TOTAL BLK CMT
+ SUBPROGRAM CMP CMP LINES LOC LOC LOC CMTS LINES % % PBS
+
+ release_gear 7 7 0 11 18 2 0 20 10 0 yes
+ global/file 4 4 18 16 53 32 21 117 37 28 yes
+ file-total: 39 39 18 224 304 79 35 429 20 10
+geometry.c
+ eraselines 3 3 0 7 12 1 0 13 7 0 yes
+ drawlines 3 3 0 6 11 1 0 12 8 0 yes
+ init_geometry 9 9 0 38 49 6 3 57 10 5 yes
+ draw_geometry 6 6 0 28 37 5 2 42 11 5 yes
+ release_geome 4 4 0 8 12 2 0 14 14 0 yes
+ refresh_geome 1 1 0 1 2 0 1 3 0 33
+ global/file 1 1 7 16 38 15 10 69 28 20 yes
+ file-total: 27 27 7 104 161 30 16 210 15 9
+grav.c
+ init_planet 3 3 0 19 25 4 3 32 13 10 yes
+ draw_planet 8 8 0 37 47 5 6 57 9 11 yes
+ init_grav 8 8 0 23 35 7 2 43 16 5 yes
+ draw_grav 6 6 0 15 26 4 3 33 13 10 yes
+ release_grav 4 4 0 8 12 2 0 14 14 0 yes
+ refresh_grav 1 1 0 1 2 0 1 3 0 33
+ global/file 3 6 37 20 85 25 10 120 22 10 yes
+ file-total: 33 36 37 123 232 47 25 302 16 9
+helix.c
+ gcd 3 3 0 7 9 1 0 10 10 0 yes
+ helix 7 7 1 28 39 3 0 42 7 0 yes
+ random_helix 7 7 2 30 40 8 0 48 16 0 yes
+ init_helix 6 6 0 22 28 3 0 31 9 0 yes
+ draw_helix 3 3 0 6 10 1 0 11 9 0 yes
+ release_helix 2 2 0 4 6 0 0 6 0 0 yes
+ refresh_helix 1 1 0 3 4 1 0 5 20 0
+ global/file 1 1 4 12 34 16 15 70 32 30 yes
+ file-total: 30 30 7 112 170 33 15 223 16 8
+hop.c
+ init_hop 11 11 3 35 52 6 3 62 10 5 yes
+ draw_hop 9 9 0 33 45 1 0 46 2 0 yes
+ release_hop 3 3 0 7 10 0 0 10 0 0 yes
+ refresh_hop 1 1 0 2 3 0 0 3 0 0
+ global/file 1 1 7 18 35 13 25 76 27 41 yes
+ file-total: 25 25 10 95 145 20 28 197 12 16
+hyper.c
+ move_line 5 8 0 25 33 2 0 35 5 0 yes
+ init_hyper 12 12 0 37 51 5 0 56 8 0 yes
+ draw_hyper 7 8 0 52 74 10 0 84 11 0 yes
+ release_hyper 4 4 0 8 12 2 0 14 14 0 yes
+ refresh_hyper 1 1 0 4 5 1 0 6 16 0
+ global/file 2 2 14 22 51 17 14 88 25 21 yes
+ file-total: 31 35 14 148 226 37 14 283 14 5
+image.c
+ init_image 14 15 2 35 57 3 0 60 5 0 yes
+
+\f
+ MEASURE Data Table (continued)
+
+FILE NAME EXT PDIR STMT NCNB BLK TEXT TOTAL BLK CMT
+ SUBPROGRAM CMP CMP LINES LOC LOC LOC CMTS LINES % % PBS
+
+ draw_image 3 4 0 12 18 1 0 19 5 0 yes
+ release_image 6 6 0 12 18 2 0 20 10 0 yes
+ refresh_image 5 7 0 10 18 1 0 19 5 0 yes
+ global/file 3 4 14 19 48 18 12 84 27 20 yes
+ file-total: 31 36 16 88 159 25 12 202 13 7
+julia.c
+ apply 2 2 0 15 19 6 2 26 24 9 yes
+ incr 1 1 0 5 6 1 0 7 14 0 yes
+ init_julia 15 16 0 43 66 6 0 72 8 0 yes
+ draw_julia 11 11 0 58 75 13 7 94 14 8 yes
+ release_julia 8 8 0 14 22 2 0 24 8 0 yes
+ refresh_julia 1 1 0 4 5 1 0 6 16 0
+ global/file 1 1 5 20 39 12 17 72 23 30 yes
+ file-total: 39 40 5 159 232 41 26 301 15 10
+kaleid.c
+ init_kaleid 8 8 0 24 31 2 0 33 6 0 yes
+ draw_kaleid 9 9 0 81 90 2 0 92 2 0 yes
+ release_kalei 2 2 0 4 6 0 0 6 0 0 yes
+ refresh_kalei 1 1 0 2 3 0 0 3 0 0
+ global/file 1 1 4 15 30 13 9 58 30 23 yes
+ file-total: 21 21 4 126 160 17 9 192 9 5
+laser.c
+ init_laser 17 17 0 55 76 11 1 88 12 1 yes
+ draw_laser_on 21 21 0 65 91 7 0 98 7 0 yes
+ draw_laser 3 3 0 5 8 2 0 10 20 0 yes
+ release_laser 5 5 0 9 14 2 0 16 12 0 yes
+ refresh_laser 1 1 0 1 2 0 1 3 0 33
+ global/file 1 1 13 27 55 22 32 90 28 36 yes
+ file-total: 48 48 13 162 246 44 34 305 15 12
+life.c
+ drawcell 4 4 0 14 23 3 1 27 11 4 yes
+ erasecell 1 1 0 4 6 1 0 7 14 0 yes
+ spawn 5 5 0 42 48 2 0 50 4 0 yes
+ ckill 5 5 0 42 48 1 0 49 2 0 yes
+ setcell 1 1 0 6 7 1 0 8 12 0 yes
+ alloccells 1 1 0 5 8 1 0 9 11 0 yes
+ freecells 5 5 0 5 10 0 0 10 0 0 yes
+ init_fates 3 5 0 7 10 1 0 11 9 0 yes
+ RandomSoup 6 10 0 7 14 1 0 15 6 0 yes
+ GetPattern 4 7 0 11 15 1 0 16 6 0 yes
+ shooter 7 7 0 17 22 1 1 24 4 4 yes
+ init_life 13 16 0 49 70 5 4 81 6 5 yes
+ draw_life 11 12 0 31 45 5 6 57 10 11 yes
+ release_life 3 3 0 6 9 1 0 10 10 0 yes
+ refresh_life 1 1 0 1 2 0 1 3 0 33
+ change_life 4 4 0 13 19 2 0 21 9 0 yes
+ global/file 1 1 22 25 800 46 97 895 5 10 yes
+ file-total: 75 88 22 285 1156 72 110 1293 5 8
+life1d.c
+
+\f
+ MEASURE Data Table (continued)
+
+FILE NAME EXT PDIR STMT NCNB BLK TEXT TOTAL BLK CMT
+ SUBPROGRAM CMP CMP LINES LOC LOC LOC CMTS LINES % % PBS
+
+ drawcell 5 5 0 22 33 2 0 35 5 0 yes
+ RandomSoup 4 6 0 5 9 1 0 10 10 0 yes
+ power 2 2 0 5 7 1 1 8 12 12
+ GetRule 12 12 8 30 47 3 1 50 6 2 yes
+ compare 5 5 0 15 20 1 0 21 4 0 yes
+ init_life1d 24 27 0 69 106 9 0 115 7 0 yes
+ draw_life1d 17 17 0 47 74 7 0 81 8 0 yes
+ release_life1 10 10 0 16 26 2 0 28 7 0 yes
+ refresh_life1 3 3 0 6 9 1 0 10 10 0 yes
+ global/file 5 5 31 33 308 44 112 395 12 26 yes
+ file-total: 87 92 39 248 639 71 114 753 10 15
+life3d.c
+ Rule2Array 5 5 0 7 14 0 0 14 0 0 yes
+ Array2Rule 5 5 0 7 14 0 0 14 0 0 yes
+ Init3D 1 1 0 4 5 0 0 5 0 0
+ NewCell 1 1 0 2 3 0 0 3 0 0
+ AddToList 2 2 0 14 16 1 0 17 5 0 yes
+ AddToEraseLis 1 1 0 5 6 0 0 6 0 0 yes
+ DelFromList 5 5 0 10 17 2 0 19 10 0 yes
+ DelFromEraseL 1 1 0 4 5 0 0 5 0 0
+ MemInit 2 2 0 4 6 1 0 7 14 0 yes
+ BaseOffset 2 2 0 4 6 1 2 9 14 25 yes
+ GetMem 2 2 0 5 7 1 0 8 12 0 yes
+ SetMem 2 2 0 5 7 2 0 9 22 0 yes
+ ChangeMem 2 2 0 5 7 1 0 8 12 0 yes
+ ClearMem 6 7 0 7 13 1 0 14 7 0 yes
+ IncrementNbrs 5 7 0 6 12 1 0 13 7 0 yes
+ End3D 3 3 0 9 12 1 0 13 7 0 yes
+ RunLife3D 11 15 0 25 38 2 8 49 5 17 yes
+ CountCells3D 2 2 0 8 10 1 0 11 9 0 yes
+ DisplayList 2 2 0 9 11 1 0 12 8 0 yes
+ RandomSoup 7 7 0 7 14 1 0 15 6 0 yes
+ GetPattern 8 13 0 21 31 1 0 32 3 0 yes
+ NewViewpoint 1 1 0 11 12 1 0 13 7 0 yes
+ NewPoint 1 1 0 6 7 1 0 8 12 0 yes
+ SortList 20 25 0 71 96 14 4 114 12 4 yes
+ DrawFace 3 5 0 16 21 2 0 23 8 0 yes
+ DrawCube 13 16 0 28 43 3 2 47 6 4 yes
+ DrawScreen 5 5 2 20 31 5 5 40 13 13 yes
+ shooter 24 24 2 93 110 1 1 112 0 0 yes
+ initrule 2 2 0 7 9 1 0 10 10 0 yes
+ init_life3d 12 13 0 51 70 8 10 88 10 12 yes
+ draw_life3d 4 6 0 7 11 3 3 19 21 21
+ release_life3 3 3 0 8 11 2 1 13 15 8 yes
+ refresh_life3 1 1 0 1 2 0 1 3 0 33
+ change_life3d 8 8 0 26 35 5 1 41 12 2 yes
+ global/file 3 3 44 40 972 250 119 1272 20 10 yes
+ file-total: 175 200 48 553 1684 314 157 2086 15 8
+lightning.c
+
+\f
+ MEASURE Data Table (continued)
+
+FILE NAME EXT PDIR STMT NCNB BLK TEXT TOTAL BLK CMT
+ SUBPROGRAM CMP CMP LINES LOC LOC LOC CMTS LINES % % PBS
+
+ setup_multi_s 4 6 0 8 13 3 0 16 18 0 yes
+ flashing_stri 2 2 0 4 6 1 0 7 14 0 yes
+ flash_duratio 1 1 0 6 7 1 0 8 12 0 yes
+ random_storm 7 7 0 27 40 1 0 41 2 0 yes
+ generate 2 2 0 11 13 2 0 15 13 0 yes
+ create_fork 4 5 0 19 22 3 0 25 12 0 yes
+ update_bolt 9 13 0 12 25 2 0 27 7 0 yes
+ draw_bolt 4 4 0 5 10 0 0 10 0 0 yes
+ first_strike 2 2 0 10 16 2 0 18 11 0 yes
+ draw_line 4 4 0 7 18 1 0 19 5 0 yes
+ level1_strike 3 3 0 18 30 2 1 32 6 3 yes
+ distance 1 1 0 2 3 0 0 3 0 0 yes
+ level2_strike 3 3 0 18 30 3 4 37 9 11 yes
+ storm_active 3 3 0 4 7 2 0 9 22 0 yes
+ wiggle_bolt 3 3 0 11 16 3 0 19 15 0 yes
+ wiggle_line 2 2 0 5 7 1 0 8 12 0 yes
+ init_lightnin 3 3 0 10 14 3 0 17 17 0 yes
+ draw_lightnin 9 9 0 25 37 1 0 38 2 0 yes
+ release_light 2 2 0 4 6 0 0 6 0 0 yes
+ refresh_light 1 1 0 1 2 0 1 3 0 33
+ global/file 1 1 23 43 110 60 11 200 35 9 yes
+ file-total: 70 77 23 250 432 91 17 558 17 3
+lissie.c
+ drawlissie 12 12 0 33 45 7 6 58 13 11 yes
+ initlissie 6 6 0 24 37 4 2 43 9 5 yes
+ init_lissie 8 8 0 19 27 6 0 33 18 0 yes
+ draw_lissie 3 3 0 5 9 1 0 10 10 0 yes
+ release_lissi 4 4 0 10 14 2 0 16 12 0 yes
+ refresh_lissi 3 3 0 7 10 1 0 11 9 0 yes
+ global/file 3 6 24 17 53 21 7 85 28 11 yes
+ file-total: 39 42 24 115 195 42 15 256 17 7
+logout.c
+ err_handler 1 1 0 3 4 0 0 4 0 0
+ has_property 5 5 0 10 15 4 0 19 21 0 yes
+ has_wm_state 1 1 0 2 3 0 0 3 0 0
+ has_wm_protoc 1 1 0 2 3 0 0 3 0 0
+ send_delete_m 1 1 0 10 11 2 0 13 15 0 yes
+ handle_top_le 6 6 0 12 18 4 1 22 18 5 yes
+ recurse_tree 8 8 0 20 29 7 1 37 19 3 yes
+ kill_tree 6 6 0 15 22 4 1 27 15 4 yes
+ closedownLogo 3 3 0 13 16 12 8 35 42 33 yes
+ sessionLogout 2 2 0 6 8 1 0 9 11 0 yes
+ uglyLogout 5 7 10 15 28 5 0 33 15 0 yes
+ logoutUser 5 5 8 9 19 2 2 21 9 9 yes
+ fullLock 13 16 2 23 37 7 6 47 15 13 yes
+ global/file 9 10 35 8 69 41 74 211 37 51 yes
+ file-total: 66 72 55 148 282 89 93 484 23 24
+loop.c
+
+\f
+ MEASURE Data Table (continued)
+
+FILE NAME EXT PDIR STMT NCNB BLK TEXT TOTAL BLK CMT
+ SUBPROGRAM CMP CMP LINES LOC LOC LOC CMTS LINES % % PBS
+
+ addtolist 1 1 0 9 10 1 0 11 9 0 yes
+ print_state 2 2 0 10 13 1 0 14 7 0 yes
+ free_state 2 2 0 8 10 1 0 11 9 0 yes
+ drawcell 2 2 0 14 18 1 0 19 5 0 yes
+ draw_state 3 3 0 30 35 3 4 42 7 10 yes
+ init_table 7 7 2 21 32 3 2 37 8 5 yes
+ init_adam 7 7 0 33 43 1 0 44 2 0 yes
+ do_gen 3 3 0 13 16 1 0 17 5 0 yes
+ free_list 2 2 0 3 5 1 0 6 16 0
+ init_loop 11 12 0 47 64 7 7 72 9 9 yes
+ draw_loop 14 19 0 27 43 2 0 45 4 0 yes
+ release_loop 9 9 0 15 24 2 0 26 7 0 yes
+ refresh_loop 1 1 0 4 5 1 0 6 16 0
+ global/file 3 3 25 28 148 31 39 217 17 20 yes
+ file-total: 67 73 27 262 466 56 52 567 10 10
+marquee.c
+ font_width 1 1 0 5 6 1 0 7 14 0 yes
+ is_valid_char 1 1 0 2 3 0 0 3 0 0
+ is_char_back_ 1 1 0 2 4 0 0 4 0 0
+ char_back_cha 2 2 0 4 5 1 0 6 16 0
+ fixup_back 12 17 0 28 38 8 10 57 17 20 yes
+ text_font_wid 11 11 0 24 37 1 6 44 2 13 yes
+ text_height 3 5 0 6 9 1 0 10 10 0 yes
+ add_blanks 3 3 0 14 17 0 0 17 0 0 yes
+ add_letter 3 3 0 13 16 0 0 16 0 0 yes
+ init_marquee 14 15 0 42 60 4 2 66 6 3 yes
+ draw_marquee 25 25 0 61 99 2 1 102 1 1 yes
+ release_marqu 5 5 0 11 16 2 0 18 11 0 yes
+ refresh_marqu 1 1 0 1 2 0 1 3 0 33
+ global/file 1 1 4 27 59 27 14 107 31 19 yes
+ file-total: 83 91 4 240 371 47 34 460 11 8
+maze.c
+ free_maze 5 5 0 13 18 0 0 18 0 0 yes
+ set_maze_size 8 8 0 22 33 4 1 37 10 2 yes
+ initialize_ma 19 20 0 70 93 9 9 110 8 8 yes
+ choose_door 11 19 0 28 66 3 7 74 4 9 yes
+ draw_maze_wal 5 5 0 8 15 1 9 21 6 37 yes
+ backup 2 2 0 6 8 0 2 8 0 20
+ create_maze_w 10 10 0 26 39 6 8 48 13 17 yes
+ draw_maze_bor 8 8 0 20 46 2 2 48 4 4 yes
+ draw_wall 5 5 0 14 36 1 2 37 2 5 yes
+ draw_solid_sq 5 5 0 13 31 2 2 33 6 6 yes
+ solve_maze 5 7 0 20 39 4 6 47 9 13 yes
+ enter_square 5 5 0 17 24 4 2 28 14 7 yes
+ init_maze 8 8 0 24 32 3 4 39 8 11 yes
+ draw_maze 8 8 0 27 36 1 3 39 2 7 yes
+ release_maze 5 5 0 10 15 2 0 17 11 0 yes
+ refresh_maze 2 2 0 16 22 1 0 23 4 0 yes
+
+\f
+ MEASURE Data Table (continued)
+
+FILE NAME EXT PDIR STMT NCNB BLK TEXT TOTAL BLK CMT
+ SUBPROGRAM CMP CMP LINES LOC LOC LOC CMTS LINES % % PBS
+
+ global/file 1 1 25 24 91 39 43 181 30 32 yes
+ file-total: 112 123 25 358 644 82 100 808 11 13
+mode.c
+ set_default_m 1 1 0 2 3 0 0 3 0 0
+ set_window_ti 1 1 0 7 8 1 2 11 11 20
+ call_release_ 3 3 0 8 11 2 0 13 15 0 yes
+ release_last_ 2 2 0 5 7 1 0 8 12 0 yes
+ call_init_hoo 4 4 0 14 18 4 0 22 18 0 yes
+ call_callback 3 3 0 9 12 2 0 14 14 0 yes
+ call_refresh_ 5 6 0 13 18 1 12 33 5 40 yes
+ call_change_h 4 4 0 9 13 1 0 14 7 0 yes
+ global/file 6 6 16 5 315 31 27 400 8 7 yes
+ file-total: 29 30 16 72 405 43 41 518 9 9
+mode.h
+ global/file 9 9 87 400 491 105 57 634 17 10 yes
+ file-total: 9 9 87 400 491 105 57 634 17 10
+mountain.c
+ spread 4 7 0 4 8 1 0 9 11 0 yes
+ drawamountain 6 6 0 37 45 7 0 52 13 0 yes
+ init_mountain 14 14 0 29 47 7 0 54 12 0 yes
+ draw_mountain 4 4 0 10 15 1 1 17 6 6 yes
+ release_mount 3 3 0 8 11 2 0 13 15 0 yes
+ refresh_mount 1 1 0 4 5 1 0 6 16 0
+ global/file 1 1 6 14 34 15 12 63 30 26 yes
+ file-total: 33 36 6 106 165 34 13 214 17 7
+nose.c
+ move 22 28 0 37 65 2 2 68 2 2 yes
+ walk 17 20 0 32 50 1 4 52 1 7 yes
+ think 3 3 0 7 10 1 0 11 9 0 yes
+ talk 14 16 0 55 77 8 7 93 9 8 yes
+ look 8 8 0 15 26 1 0 27 3 0 yes
+ init_nose 8 8 0 43 59 3 0 62 4 0 yes
+ draw_nose 3 3 0 9 13 1 3 15 7 18
+ release_nose 6 6 0 12 18 3 0 21 14 0 yes
+ refresh_nose 1 1 0 1 2 0 1 3 0 33
+ global/file 1 1 32 30 97 28 22 150 22 18 yes
+ file-total: 83 94 32 241 417 48 39 502 10 8
+option.c
+ managePrompt 2 2 0 20 22 2 0 24 8 0 yes
+ f_option 5 5 0 28 36 3 0 39 7 0 yes
+ f_Dialog 2 2 0 6 9 1 0 10 10 0 yes
+ Setup_Option 3 3 0 22 29 4 0 33 12 0 yes
+ global/file 1 1 12 11 40 20 21 87 33 34 yes
+ file-total: 13 13 12 87 136 30 21 193 18 13
+pacman.c
+ clearcorners 5 9 0 18 35 1 0 36 2 0 yes
+ repopulate 7 8 2 18 30 5 0 35 14 0 yes
+ movepac 44 55 31 123 227 12 4 243 5 1 yes
+
+\f
+ MEASURE Data Table (continued)
+
+FILE NAME EXT PDIR STMT NCNB BLK TEXT TOTAL BLK CMT
+ SUBPROGRAM CMP CMP LINES LOC LOC LOC CMTS LINES % % PBS
+
+ init_pacman 27 32 2 79 125 11 1 137 8 0 yes
+ draw_pacman 24 32 0 61 101 14 0 115 12 0 yes
+ release_pacma 11 11 2 13 25 2 0 27 7 0 yes
+ refresh_pacma 1 1 0 1 2 0 1 3 0 33
+ global/file 3 3 25 22 64 20 11 102 23 14 yes
+ file-total: 122 151 62 335 609 65 17 698 9 2
+passwd.c
+ new_pwlnode 3 3 3 8 13 3 0 16 18 0 yes
+ my_passwd_ent 9 10 6 21 34 5 5 43 12 12
+ getUserName 12 13 11 26 45 15 17 74 25 27 yes
+ passwd_invali 1 2 0 3 4 1 0 5 20 0
+ getCryptedUse 13 13 11 47 67 17 12 92 20 15 yes
+ getCryptedRoo 16 17 15 54 79 20 14 107 20 15 yes
+ checkPasswd 31 44 26 57 118 17 22 153 12 15 yes
+ initDCE 12 14 0 38 63 4 4 71 5 5 yes
+ error_string 10 10 0 14 26 1 0 27 3 0 yes
+ check_dce_net 9 14 0 50 71 16 14 103 18 16 yes
+ krb_check_pas 3 3 0 10 16 4 5 25 20 23 yes
+ krb_check_pas 12 12 0 58 84 12 8 101 12 8 yes
+ get_multiple 7 7 3 16 25 0 4 30 0 13 yes
+ set_multiple 47 47 9 120 170 15 19 205 8 10 yes
+ gpass 13 16 4 41 62 4 4 72 6 6 yes
+ initPasswd 8 12 10 10 24 1 3 25 4 11 yes
+ global/file 40 47 125 53 214 70 78 364 24 26 yes
+ file-total: 246 284 223 626 1115 205 209 1513 15 15
+penrose.c
+ vertex_dir 7 7 0 13 22 1 0 23 4 0 yes
+ add_unit_vec 3 3 0 4 7 1 0 8 12 0 yes
+ fived_to_loc 4 4 0 17 24 1 0 25 4 0 yes
+ release_scree 4 4 0 16 19 1 0 20 5 0 yes
+ init_penrose 15 16 0 57 77 2 5 83 2 6 yes
+ match_rules 14 14 0 30 47 3 6 56 6 11 yes
+ find_completi 8 8 0 16 25 2 0 27 7 0 yes
+ draw_tile 11 14 0 39 61 5 2 68 7 3 yes
+ check_vertex 12 12 0 33 45 3 3 48 6 6 yes
+ delete_vertex 7 7 0 16 23 1 0 24 4 0 yes
+ fills_vertex 1 1 0 2 5 0 0 5 0 0 yes
+ fringe_change 18 24 0 33 52 2 1 54 3 1 yes
+ add_vtype 3 3 0 7 11 1 0 12 8 0 yes
+ alloc_vertex 5 11 0 21 28 1 0 29 3 0 yes
+ add_tile 25 30 0 59 96 7 9 112 6 8 yes
+ add_forced_ti 5 5 0 16 21 1 1 22 4 4 yes
+ legal_move 3 3 0 8 11 1 1 12 8 8 yes
+ add_random_ti 23 25 0 58 78 2 3 82 2 3 yes
+ draw_penrose 13 15 0 37 50 3 3 55 5 5 yes
+ release_penro 3 3 0 8 11 2 0 13 15 0 yes
+ global/file 1 1 35 47 169 78 168 465 31 49 yes
+ file-total: 185 210 35 537 882 118 202 1243 11 18
+petal.c
+
+\f
+ MEASURE Data Table (continued)
+
+FILE NAME EXT PDIR STMT NCNB BLK TEXT TOTAL BLK CMT
+ SUBPROGRAM CMP CMP LINES LOC LOC LOC CMTS LINES % % PBS
+
+ gcd 3 3 0 7 10 1 0 11 9 0 yes
+ numlines 2 4 3 3 8 0 0 8 0 0 yes
+ compute_petal 4 4 0 21 25 8 7 40 24 21
+ random_petal 2 2 0 5 10 2 0 12 16 0 yes
+ init_petal 8 8 0 21 29 5 0 34 14 0 yes
+ draw_petal 3 3 0 6 10 1 0 11 9 0 yes
+ release_petal 4 4 0 8 12 2 0 14 14 0 yes
+ refresh_petal 1 1 0 3 4 1 0 5 20 0
+ global/file 1 1 9 11 38 20 68 160 34 64
+ file-total: 28 30 12 85 146 40 75 295 21 33
+puzzle.c
+ font_width 1 1 0 5 6 1 0 7 14 0 yes
+ NumberScreen 8 9 0 43 59 4 0 63 6 0 yes
+ setupmove 13 21 0 39 58 3 0 61 4 0 yes
+ setupmovedelt 15 15 6 43 67 5 14 90 6 17 yes
+ wrapupmove 3 3 0 7 10 1 0 11 9 0 yes
+ wrapupmovedel 2 2 0 9 14 3 0 17 17 0 yes
+ moveboxdelta 4 5 0 12 21 1 0 22 4 0 yes
+ init_puzzle 25 28 5 80 133 12 0 145 8 0 yes
+ draw_puzzle 5 5 0 12 17 1 0 18 5 0 yes
+ release_puzzl 9 9 2 16 26 2 0 28 7 0 yes
+ global/file 5 6 21 34 81 24 14 126 22 14 yes
+ file-total: 90 104 34 300 492 57 28 588 10 5
+pyro.c
+ ignite 10 13 0 43 54 3 1 58 5 1 yes
+ animate 8 8 0 36 46 2 4 52 4 8 yes
+ shootup 7 8 0 31 45 2 0 47 4 0 yes
+ burst 21 22 0 72 96 5 2 102 4 2 yes
+ init_pyro 17 18 0 52 77 7 1 85 8 1 yes
+ draw_pyro 8 9 0 17 25 1 0 26 3 0 yes
+ release_pyro 4 4 0 9 13 2 0 15 13 0 yes
+ refresh_pyro 1 1 0 1 2 0 1 3 0 33
+ global/file 4 4 43 37 100 27 36 150 21 26 yes
+ file-total: 80 87 43 298 458 49 45 538 9 8
+qix.c
+ init_qix 6 6 0 26 33 3 1 36 8 2 yes
+ draw_qix 8 8 0 37 49 5 0 54 9 0 yes
+ release_qix 4 4 0 8 12 2 0 14 14 0 yes
+ refresh_qix 1 1 0 4 5 1 0 6 16 0
+ global/file 3 3 12 19 36 13 14 68 26 28 yes
+ file-total: 22 22 12 94 135 24 15 178 15 10
+random.c
+ pickMode 7 7 0 19 27 2 6 32 6 18 yes
+ strpmtok 20 20 0 34 57 3 0 60 5 0 yes
+ parsemodelist 13 13 2 19 35 4 1 39 10 2 yes
+ setMode 3 3 0 13 17 4 2 22 19 10 yes
+ init_random 5 5 0 15 23 2 0 25 8 0 yes
+ draw_random 6 9 0 21 28 3 0 31 9 0 yes
+
+\f
+ MEASURE Data Table (continued)
+
+FILE NAME EXT PDIR STMT NCNB BLK TEXT TOTAL BLK CMT
+ SUBPROGRAM CMP CMP LINES LOC LOC LOC CMTS LINES % % PBS
+
+ refresh_rando 1 1 0 2 3 0 0 3 0 0
+ change_random 2 2 0 3 5 1 1 6 16 16 yes
+ global/file 2 2 11 21 66 23 15 106 25 18 yes
+ file-total: 59 62 13 147 261 42 25 324 13 8
+ras.c
+ analyze_heade 1 1 0 6 7 0 0 7 0 0 yes
+ convert_color 7 7 2 22 33 2 0 35 5 0 yes
+ find_nearest 4 4 2 9 16 1 0 17 5 0 yes
+ GetWhite 1 1 0 2 3 0 0 3 0 0
+ GetBlack 1 1 0 2 3 0 0 3 0 0
+ GetForeground 1 1 0 5 8 1 0 9 11 0 yes
+ GetBackground 1 1 0 5 8 1 0 9 11 0 yes
+ get_long 1 1 0 2 7 0 0 7 0 0 yes
+ RasterFileToI 7 7 0 29 39 1 3 42 2 7 yes
+ SetImageColor 3 3 0 10 13 1 2 16 7 13
+ global/file 2 2 9 15 46 17 10 76 26 17 yes
+ file-total: 29 29 13 107 183 24 15 224 11 7
+ras.h
+ global/file 0 0 6 6 13 2 9 29 13 40 yes
+ file-total: 0 0 6 6 13 2 9 29 13 40
+resource.c
+ stripname 4 5 0 9 12 1 0 13 7 0 yes
+ Syntax 6 6 0 28 36 4 4 40 10 10
+ Help 4 4 0 14 22 4 0 26 15 0 yes
+ Version 1 1 0 3 4 0 0 4 0 0
+ DumpResources 3 3 0 11 20 3 0 23 13 0 yes
+ LowerString 3 3 0 4 7 1 0 8 12 0 yes
+ GetResource 9 12 0 36 49 3 2 54 5 3 yes
+ parsefilepath 13 13 3 41 55 1 1 56 1 1 yes
+ open_display 20 26 10 39 72 13 7 91 15 8 yes
+ printvar 6 6 0 10 21 0 0 21 0 0 yes
+ getResources 38 38 17 120 193 29 9 233 13 4 yes
+ checkResource 12 15 2 16 29 3 1 33 9 3 yes
+ get_info 3 3 0 17 23 4 0 27 14 0 yes
+ descr 2 2 0 13 16 3 0 19 15 0 yes
+ global/file 51 51 181 92 546 93 113 741 14 17 yes
+ file-total: 175 188 213 453 1105 162 137 1389 12 11
+roll.c
+ createsphere 3 3 0 8 11 1 0 12 8 0 yes
+ rotation3d 2 2 0 28 30 4 0 34 11 0 yes
+ project 2 2 0 5 7 1 0 8 12 0 yes
+ init_roll 12 12 0 41 60 2 1 63 3 1 yes
+ draw_roll 20 30 0 47 70 2 0 72 2 0 yes
+ release_roll 5 5 0 9 14 2 0 16 12 0 yes
+ refresh_roll 1 1 0 1 2 0 1 3 0 33
+ global/file 1 1 7 14 38 14 4 60 26 9 yes
+ file-total: 46 56 7 153 232 26 6 268 10 2
+rotor.c
+
+\f
+ MEASURE Data Table (continued)
+
+FILE NAME EXT PDIR STMT NCNB BLK TEXT TOTAL BLK CMT
+ SUBPROGRAM CMP CMP LINES LOC LOC LOC CMTS LINES % % PBS
+
+ init_rotor 13 14 0 45 60 13 8 83 17 11 yes
+ draw_rotor 17 17 0 92 114 13 0 127 10 0 yes
+ release_rotor 5 5 0 9 14 2 0 16 12 0 yes
+ refresh_rotor 1 1 0 4 5 1 0 6 16 0
+ global/file 1 1 5 30 46 16 13 80 25 22 yes
+ file-total: 37 38 5 180 239 45 21 312 15 8
+shape.c
+ init_shape 6 6 0 29 37 3 0 40 7 0 yes
+ draw_shape 6 6 0 26 39 4 0 43 9 0 yes
+ release_shape 5 5 0 10 15 3 0 18 16 0 yes
+ refresh_shape 1 1 0 1 2 0 1 3 0 33
+ global/file 1 1 19 13 42 14 19 81 25 31 yes
+ file-total: 19 19 19 79 135 24 20 185 15 12
+slip.c
+ halfrandom 2 2 0 10 12 1 0 13 7 0 yes
+ erandom 3 3 0 12 16 1 0 17 5 0 yes
+ prepare_scree 10 11 0 21 37 4 0 41 9 0 yes
+ quantize 2 2 0 5 7 1 0 8 12 0 yes
+ init_slip 3 3 0 13 17 4 1 22 19 5 yes
+ draw_slip 19 22 0 54 91 13 2 106 12 2 yes
+ release_slip 2 2 0 4 6 0 0 6 0 0 yes
+ global/file 1 1 3 9 28 13 4 49 31 12 yes
+ file-total: 42 46 3 128 214 37 7 262 14 3
+sound.c
+ play_sound 2 2 0 5 7 1 0 8 12 0 yes
+ play_sound 2 2 0 7 9 1 4 14 10 30
+ play_sound 4 4 0 16 20 2 7 24 9 25
+ play_sound 1 1 0 4 5 1 1 7 16 16
+ global/file 5 5 18 2 28 15 8 60 34 22 yes
+ file-total: 14 14 18 34 69 20 20 113 22 22
+sphere.c
+ init_sphere 4 4 0 13 18 4 0 22 18 0 yes
+ draw_sphere 10 10 0 28 43 2 0 45 4 0 yes
+ release_spher 4 4 0 10 14 2 0 16 12 0 yes
+ refresh_spher 1 1 0 4 5 1 0 6 16 0
+ global/file 1 1 8 12 30 13 30 85 30 50
+ file-total: 20 20 8 67 110 22 30 174 16 21
+spiral.c
+ draw_dots 2 2 0 9 14 3 0 17 17 0 yes
+ init_spiral 8 8 0 40 49 9 5 63 15 9 yes
+ draw_spiral 21 29 0 48 73 16 6 95 17 7 yes
+ release_spira 4 4 0 8 12 2 0 14 14 0 yes
+ refresh_spira 1 1 0 4 5 1 0 6 16 0
+ global/file 1 1 12 20 45 17 15 80 27 25 yes
+ file-total: 37 45 12 129 198 48 26 275 19 11
+spline.c
+ init_spline 19 21 0 39 59 5 2 66 7 3 yes
+ draw_spline 24 28 3 77 129 13 7 149 9 5 yes
+
+\f
+ MEASURE Data Table (continued)
+
+FILE NAME EXT PDIR STMT NCNB BLK TEXT TOTAL BLK CMT
+ SUBPROGRAM CMP CMP LINES LOC LOC LOC CMTS LINES % % PBS
+
+ XDrawSpline 3 3 0 16 21 3 0 24 12 0 yes
+ release_splin 8 8 0 12 20 2 0 22 9 0 yes
+ refresh_splin 2 2 0 6 8 1 0 9 11 0 yes
+ global/file 1 1 7 22 53 23 23 106 30 30 yes
+ file-total: 57 63 10 172 290 47 32 376 13 9
+star.c
+ star_reset 2 2 0 10 13 1 0 14 7 0 yes
+ star_tick 6 6 0 12 18 1 0 19 5 0 yes
+ star_compute 2 2 0 12 15 2 1 18 11 6 yes
+ draw_trek 11 14 2 51 75 4 2 79 5 2 yes
+ star_draw 22 28 0 43 80 1 4 86 1 4 yes
+ init_pixmaps 13 14 2 54 71 2 2 73 2 2 yes
+ tick_stars 3 3 0 7 10 1 0 11 9 0 yes
+ compute_move 12 13 0 25 42 5 7 48 10 14 yes
+ init_star 15 16 0 41 56 4 3 62 6 5 yes
+ draw_star 7 7 0 17 25 1 1 26 3 3 yes
+ release_star 8 8 0 15 23 2 0 25 8 0 yes
+ refresh_star 1 1 0 1 2 0 1 3 0 33
+ global/file 2 2 30 44 120 33 46 195 21 27 yes
+ file-total: 104 116 34 332 550 57 67 659 9 10
+swarm.c
+ init_swarm 13 13 0 52 66 7 7 79 9 9 yes
+ draw_swarm 15 17 0 61 78 12 14 103 13 15 yes
+ release_swarm 9 9 0 13 22 2 0 24 8 0 yes
+ refresh_swarm 1 1 0 1 2 0 1 3 0 33
+ global/file 1 1 11 19 40 13 17 62 24 29 yes
+ file-total: 39 41 11 146 208 34 39 271 14 15
+swirl.c
+ random_no 1 1 0 2 3 0 0 3 0 0
+ initialise_sw 1 1 0 33 34 5 17 43 12 33
+ initialise_im 2 2 0 8 12 4 5 21 25 29 yes
+ initialise_co 4 4 0 48 53 4 4 61 7 7 yes
+ set_black_and 1 1 0 16 17 3 3 23 15 15
+ set_colour 3 6 0 18 22 5 6 33 18 21
+ get_colour 3 6 0 15 19 4 6 29 17 24
+ interpolate 9 11 0 21 24 4 4 32 14 14
+ basic_map 7 9 0 35 53 14 12 79 20 18 yes
+ pre_rotate 3 3 0 18 21 11 11 43 34 34
+ default_visua 5 7 0 11 17 3 4 24 15 19 yes
+ create_colour 26 43 8 47 89 15 18 122 14 16 yes
+ install_map 2 2 0 4 10 1 2 13 9 16
+ create_knots 33 34 0 49 84 8 12 104 8 12 yes
+ do_point 15 20 0 42 71 15 16 102 17 18 yes
+ draw_block 3 3 0 4 7 1 0 8 12 0 yes
+ draw_point 3 6 0 16 20 6 6 32 23 23 yes
+ next_point 18 18 0 50 70 7 13 90 9 15 yes
+ init_swirl 7 7 3 36 46 15 18 78 24 28 yes
+ draw_swirl 7 8 0 28 34 10 19 63 22 35 yes
+
+\f
+ MEASURE Data Table (continued)
+
+FILE NAME EXT PDIR STMT NCNB BLK TEXT TOTAL BLK CMT
+ SUBPROGRAM CMP CMP LINES LOC LOC LOC CMTS LINES % % PBS
+
+ release_swirl 7 7 0 11 18 2 3 23 10 14
+ refresh_swirl 3 3 0 5 8 1 0 9 11 0 yes
+ global/file 1 1 11 47 116 70 169 415 37 59 yes
+ file-total: 164 203 22 564 848 208 348 1450 19 29
+tri.c
+ startover 3 3 0 14 19 1 0 20 5 0 yes
+ init_tri 6 6 0 13 21 3 0 24 12 0 yes
+ draw_tri 7 7 0 21 29 1 0 30 3 0 yes
+ release_tri 5 5 0 8 13 1 0 14 7 0 yes
+ refresh_tri 1 1 0 1 2 0 1 3 0 33
+ global/file 1 1 3 12 27 10 6 47 27 18 yes
+ file-total: 23 23 3 69 111 16 7 138 12 5
+triangle.c
+ draw_atriangl 4 4 2 24 30 4 2 35 11 6 yes
+ calc_points1 1 1 0 10 11 2 0 13 15 0 yes
+ calc_points2 1 1 0 10 11 2 0 13 15 0 yes
+ draw_mesh 9 12 0 17 26 2 0 28 7 0 yes
+ init_triangle 9 9 0 31 44 12 0 56 21 0 yes
+ draw_triangle 7 7 0 27 37 5 3 46 11 7 yes
+ release_trian 2 2 0 4 6 0 0 6 0 0 yes
+ refresh_trian 1 1 0 1 2 0 1 3 0 33
+ global/file 1 1 14 20 56 21 26 107 27 31 yes
+ file-total: 35 38 16 144 223 48 32 307 17 12
+trig.c
+ init_trig 4 4 0 16 21 2 2 25 8 8 yes
+ draw_trig 5 5 0 25 34 2 0 36 5 0 yes
+ release_trig 2 2 0 4 6 0 0 6 0 0 yes
+ global/file 1 1 5 9 22 11 3 41 33 12 yes
+ file-total: 12 12 5 54 83 15 5 108 15 5
+tub.c
+ init_tube 5 5 0 27 33 3 2 38 8 5 yes
+ draw_tube 14 15 0 63 89 4 7 100 4 7 yes
+ release_tube 5 5 0 9 14 2 0 16 12 0 yes
+ global/file 0 0 1 13 22 8 1 32 26 4 yes
+ file-total: 24 25 1 112 158 17 10 186 9 5
+tube.c
+ init_tube 5 5 0 26 32 3 2 37 8 5 yes
+ draw_tube 14 19 0 62 88 4 7 99 4 7 yes
+ release_tube 5 5 0 9 14 2 0 16 12 0 yes
+ global/file 1 1 3 14 25 8 4 41 24 13 yes
+ file-total: 25 30 3 111 159 17 13 193 9 7
+turtle.c
+ generate_hilb 5 5 0 26 34 9 0 43 20 0 yes
+ generate_cesa 3 3 0 34 42 3 0 45 6 0 yes
+ generate_hart 3 3 0 32 40 3 0 43 6 0 yes
+ init_turtle 16 16 0 84 103 3 0 106 2 0 yes
+ draw_turtle 11 11 0 28 44 3 0 47 6 0 yes
+ release_turtl 2 2 0 4 6 0 0 6 0 0 yes
+
+\f
+ MEASURE Data Table (continued)
+
+FILE NAME EXT PDIR STMT NCNB BLK TEXT TOTAL BLK CMT
+ SUBPROGRAM CMP CMP LINES LOC LOC LOC CMTS LINES % % PBS
+
+ global/file 4 4 13 17 48 17 11 78 26 18 yes
+ file-total: 44 44 13 225 317 38 11 368 10 3
+utils.c
+ usleep 5 6 9 18 30 4 5 34 11 14 yes
+ seconds 2 2 3 5 9 1 0 10 10 0 yes
+ readable 2 2 0 5 7 1 0 8 12 0 yes
+ strdup 1 1 0 5 6 1 0 7 14 0 yes
+ SetRNG 1 1 0 2 3 0 0 3 0 0
+ LongRNG 2 2 0 3 5 0 0 5 0 0
+ strcat_firstw 3 4 0 3 6 0 0 6 0 0 yes
+ isRibbon 1 1 0 2 3 0 0 3 0 0
+ getWords 42 45 2 105 170 7 5 181 3 2 yes
+ getFont 6 6 0 11 17 1 0 18 5 0 yes
+ randomImage 3 3 2 9 13 1 0 14 7 0 yes
+ index_dir 5 5 0 14 19 1 0 20 5 0 yes
+ upcase 3 4 0 7 10 1 0 11 9 0 yes
+ get_dir 7 7 8 20 32 1 1 33 3 3 yes
+ sel_image 5 5 0 22 27 2 0 29 6 0 yes
+ scan_dir 15 18 6 27 49 7 2 57 12 3 yes
+ getImage 28 33 12 48 92 7 1 99 7 1 yes
+ destroyImage 9 9 2 11 22 0 0 22 0 0 yes
+ XEraseImage 9 9 0 13 24 0 0 24 0 0 yes
+ global/file 15 16 48 8 108 37 47 195 25 30 yes
+ file-total: 164 179 92 338 652 72 61 779 9 8
+version.h
+ global/file 0 0 1 0 1 1 0 2 50 0
+ file-total: 0 0 1 0 1 1 0 2 50 0
+vroot.h
+ VirtualRootWi 6 7 0 23 34 4 1 39 10 2 yes
+ global/file 2 2 14 1 17 9 44 81 34 72 yes
+ file-total: 8 9 14 24 51 13 45 120 20 46
+wator.c
+ drawcell 4 6 0 9 19 1 0 20 5 0 yes
+ erasecell 1 1 0 4 6 1 0 7 14 0 yes
+ init_kindlist 1 1 0 7 8 0 2 10 0 20 yes
+ addto_kindlis 1 1 0 7 8 0 0 8 0 0 yes
+ removefrom_ki 1 1 0 5 6 0 0 6 0 0 yes
+ dupin_kindlis 1 1 0 9 10 1 0 11 9 0 yes
+ cutfrom_kindl 1 1 0 9 10 0 0 10 0 0 yes
+ reattach_kind 1 1 0 8 9 0 0 9 0 0 yes
+ flush_kindlis 2 2 0 6 8 0 1 9 0 11 yes
+ init_wator 21 24 0 72 102 7 5 112 6 4 yes
+ draw_wator 28 36 2 117 152 5 16 161 3 9 yes
+ release_wator 5 5 0 12 17 2 0 19 10 0 yes
+ refresh_wator 1 1 0 1 2 0 1 3 0 33
+ global/file 1 1 28 26 102 25 22 148 19 17 yes
+ file-total: 69 82 30 292 459 42 47 533 8 9
+wire.c
+
+\f
+ MEASURE Data Table (continued)
+
+FILE NAME EXT PDIR STMT NCNB BLK TEXT TOTAL BLK CMT
+ SUBPROGRAM CMP CMP LINES LOC LOC LOC CMTS LINES % % PBS
+
+ addtolist 1 1 0 9 10 1 0 11 9 0 yes
+ print_state 2 2 0 10 13 1 0 14 7 0 yes
+ free_state 2 2 0 8 10 1 0 11 9 0 yes
+ drawcell 2 2 0 14 18 1 0 19 5 0 yes
+ draw_state 3 3 0 30 35 3 4 42 7 10 yes
+ RandomSoup 6 6 0 4 9 1 0 10 10 0 yes
+ create_path 18 25 3 43 63 2 2 67 3 3 yes
+ do_gen 9 10 2 28 43 2 0 45 4 0 yes
+ free_list 2 2 0 3 5 1 0 6 16 0
+ init_wire 13 14 0 45 65 7 0 72 9 0 yes
+ draw_wire 10 10 0 22 34 2 2 37 5 5 yes
+ release_wire 8 8 0 12 20 2 0 22 9 0 yes
+ refresh_wire 1 1 0 4 5 1 0 6 16 0
+ global/file 3 3 21 25 81 30 38 152 27 31 yes
+ file-total: 80 89 26 257 411 55 46 514 11 10
+world.c
+ init_world 13 13 2 25 40 3 0 43 6 0 yes
+ draw_world 15 19 7 32 59 4 0 63 6 0 yes
+ release_world 4 4 0 6 10 1 0 11 9 0 yes
+ refresh_world 1 1 0 1 2 0 1 3 0 33
+ global/file 1 1 38 20 100 15 9 129 13 8 yes
+ file-total: 34 38 47 84 211 23 10 249 9 4
+worm.c
+ worm_doit 15 16 2 77 107 22 7 134 17 6 yes
+ free_worms 7 7 0 11 18 1 0 19 5 0 yes
+ init_worm 21 23 0 54 80 11 2 91 12 2 yes
+ draw_worm 9 9 0 28 37 6 0 43 13 0 yes
+ release_worm 3 3 0 6 9 1 0 10 10 0 yes
+ refresh_worm 4 4 0 8 12 1 3 16 7 20
+ global/file 2 2 12 24 51 19 16 92 27 23 yes
+ file-total: 61 64 14 208 314 61 28 405 16 8
+xbm.c
+ XbmReadFileTo 22 34 0 64 92 6 12 108 6 11 yes
+ global/file 1 1 3 1 7 3 6 20 30 46 yes
+ file-total: 23 35 3 65 99 9 18 128 8 15
+xlock.c
+ error 1 1 0 8 9 2 0 11 18 0 yes
+ warning 1 1 0 8 9 2 0 11 18 0 yes
+ XGrabHosts 2 2 0 4 6 0 0 6 0 0 yes
+ XUngrabHosts 3 3 0 5 8 0 0 8 0 0 yes
+ GrabKeyboardA 5 5 0 12 23 3 0 26 11 0 yes
+ XChangeGrabbe 2 5 0 2 5 0 0 5 0 0
+ window_size_c 3 4 0 12 16 2 1 18 11 5 yes
+ mode_info 3 6 0 41 46 14 7 62 23 13
+ finish 9 10 4 16 28 1 1 30 3 3 yes
+ xio_error 1 1 0 3 4 0 0 4 0 0 yes
+ putText 9 9 1 24 34 3 1 37 8 2 yes
+ statusUpdate 35 37 40 19 143 11 4 154 7 2 yes
+
+\f
+ MEASURE Data Table (continued)
+
+FILE NAME EXT PDIR STMT NCNB BLK TEXT TOTAL BLK CMT
+ SUBPROGRAM CMP CMP LINES LOC LOC LOC CMTS LINES % % PBS
+
+ checkLogout 3 5 0 6 9 1 0 10 10 0 yes
+ sub_timers 3 3 0 13 16 3 4 23 15 20
+ runMainLoop 13 20 3 60 80 13 6 98 13 6 yes
+ ReadXString 53 56 9 88 163 10 19 187 5 10 yes
+ getPassword 26 28 14 79 127 23 6 154 15 4 yes
+ event_screen 3 3 0 6 9 1 0 10 10 0 yes
+ justDisplay 28 32 10 50 90 11 7 108 10 7 yes
+ sigcatch 2 2 0 7 10 1 0 11 9 0 yes
+ syslogStart 1 1 0 7 9 2 1 12 18 10
+ syslogStop 1 1 0 11 14 3 0 17 17 0 yes
+ lockDisplay 12 14 16 32 56 6 1 63 9 1 yes
+ read_message 12 12 15 53 75 5 1 81 6 1 yes
+ main 69 76 31 200 314 42 27 381 11 7 yes
+ global/file 24 25 79 114 246 74 210 513 23 46 yes
+ file-total: 324 362 222 880 1549 233 296 2040 13 16
+xlock.h
+ global/file 57 60 229 35 273 31 63 340 10 18 yes
+ file-total: 57 60 229 35 273 31 63 340 10 18
+xmlock.c
+ f_PushButtons 11 11 5 36 51 5 2 58 8 3 yes
+ f_ScrolledLis 1 1 0 2 3 0 0 3 0 0
+ Setup_Widget 4 4 1 83 93 9 4 105 8 4 yes
+ main 3 3 5 15 25 1 2 28 3 7 yes
+ global/file 7 7 34 15 203 26 24 257 11 10 yes
+ file-total: 26 26 45 151 375 41 32 451 9 7
+
+ TOTALS: 5252 5829 2718 17119 30887 4711 4356 39872 13 12
+
+
+
+
+Some Additional Total Counts (not reported above):
+
+ Statement-Terminating Semicolons
+ Declarative : 2313
+
+ Noncomment, Nonblank (NCNB) Lines of Code
+ Declarative : 9053
+ Executable : 21834
+
+ Inline Comments
+ With Text : 1076
+ Without Text : 21
+
+ Full-Line Comment
+ With Text : 3280
+ Without Text : 994
+
+
+
+ A L L F I L E S C O M P L E X I T Y R E P O R T
+
+Average Cyclomatic Complexity 7
+Average Extended Complexity 8
+Average Executable Statements 20
+Total Cyclomatic Complexity 5252
+Total Extended Complexity 5829
+Total Executable Statements 14806
+Total Executable Modules 724
+Files Opened 88
+
+
+ A L L M O D U L E S R E P O R T
+
+Functions 124
+Void Functions 600
+"main" Programs 2
+
+
+ A L L F I L E S D E T A I L R E P O R T
+
+Defined Macros 427
+C Structs 143
+For Loops 559
+While loops 110
+Do...While loops 23
+Ifs 3309
+Cases 333
+Switches 71
+Returns 407
+Improper Returns 0
+Exits 28
+Aborts 0
+Asserts 0
+Continues 18
+Gotos 0
+
+
+NOTE: No Classes or Other C++ Features Found
+
+
+
+
+
+The following possible metric weaknesses were found:
+
+TEXT COMMENTS < 10% 0% in file ant.c for void function fillcell
+
+TEXT COMMENTS < 10% 4% in file ant.c for void function truchetcell
+BLANK LINES < 10% 4% in file ant.c for void function truchetcell
+LINES > 80 CHARS 6 in file ant.c for void function truchetcell
+
+TEXT COMMENTS < 10% 0% in file ant.c for void function drawcell
+BLANK LINES < 10% 8% in file ant.c for void function drawcell
+LINES > 80 CHARS 1 in file ant.c for void function drawcell
+
+TEXT COMMENTS < 10% 0% in file ant.c for void function drawtruchet
+LINES > 80 CHARS 3 in file ant.c for void function drawtruchet
+
+TEXT COMMENTS < 10% 6% in file ant.c for void function draw_anant
+BLANK LINES < 10% 6% in file ant.c for void function draw_anant
+LINES > 80 CHARS 10 in file ant.c for void function draw_anant
+
+TEXT COMMENTS < 10% 0% in file ant.c for void function RandomSoup
+LINES > 80 CHARS 1 in file ant.c for void function RandomSoup
+
+TEXT COMMENTS < 10% 0% in file ant.c for void function GetTable
+
+LINES > 80 CHARS 1 in file ant.c for void function GetTurk
+
+TEXT COMMENTS < 10% 1% in file ant.c for void function init_ant
+BLANK LINES < 10% 6% in file ant.c for void function init_ant
+COMPLEXITY > 10 28 in file ant.c for void function init_ant
+EXTD COMPLEXITY > 15 29 in file ant.c for void function init_ant
+EX STATEMENTS > 50 76 in file ant.c for void function init_ant
+LINES > 80 CHARS 7 in file ant.c for void function init_ant
+
+TEXT COMMENTS < 10% 4% in file ant.c for void function draw_ant
+BLANK LINES < 10% 3% in file ant.c for void function draw_ant
+COMPLEXITY > 10 42 in file ant.c for void function draw_ant
+EXTD COMPLEXITY > 15 48 in file ant.c for void function draw_ant
+EX STATEMENTS > 50 73 in file ant.c for void function draw_ant
+LINES > 80 CHARS 24 in file ant.c for void function draw_ant
+
+TEXT COMMENTS < 10% 0% in file ant.c for void function release_ant
+BLANK LINES < 10% 8% in file ant.c for void function release_ant
+LINES > 80 CHARS 1 in file ant.c for void function release_ant
+
+TEXT COMMENTS < 50% 31% in file ant.c for file level global/file
+LINES > 80 CHARS 4 in file ant.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file ball.c for void function collided
+EX STATEMENTS > 50 54 in file ball.c for void function collided
+
+TEXT COMMENTS < 10% 0% in file ball.c for function inwin
+BLANK LINES < 10% 4% in file ball.c for function inwin
+CONTINUES PRESENT 1 in file ball.c for function inwin
+EXIT ROUTES > 1 4 in file ball.c for function inwin
+
+TEXT COMMENTS < 10% 4% in file ball.c for void function randomball
+COMPLEXITY > 10 11 in file ball.c for void function randomball
+
+TEXT COMMENTS < 10% 3% in file ball.c for void function init_ball
+BLANK LINES < 10% 8% in file ball.c for void function init_ball
+COMPLEXITY > 10 15 in file ball.c for void function init_ball
+EXTD COMPLEXITY > 15 17 in file ball.c for void function init_ball
+LINES > 80 CHARS 5 in file ball.c for void function init_ball
+
+TEXT COMMENTS < 10% 0% in file ball.c for void function draw_ball
+BLANK LINES < 10% 5% in file ball.c for void function draw_ball
+COMPLEXITY > 10 21 in file ball.c for void function draw_ball
+EXTD COMPLEXITY > 15 25 in file ball.c for void function draw_ball
+EX STATEMENTS > 50 64 in file ball.c for void function draw_ball
+CONTINUES PRESENT 2 in file ball.c for void function draw_ball
+LINES > 80 CHARS 12 in file ball.c for void function draw_ball
+
+TEXT COMMENTS < 10% 0% in file ball.c for void function release_ball
+
+TEXT COMMENTS < 50% 22% in file ball.c for file level global/file
+
+TEXT COMMENTS < 10% 4% in file bat.c for void function init_images
+BLANK LINES < 10% 8% in file bat.c for void function init_images
+COMPLEXITY > 10 17 in file bat.c for void function init_images
+EXTD COMPLEXITY > 15 18 in file bat.c for void function init_images
+LINES > 80 CHARS 6 in file bat.c for void function init_images
+
+TEXT COMMENTS < 10% 0% in file bat.c for void function checkCollision
+BLANK LINES < 10% 2% in file bat.c for void function checkCollision
+LINES > 80 CHARS 12 in file bat.c for void function checkCollision
+
+TEXT COMMENTS < 10% 0% in file bat.c for void function drawabat
+BLANK LINES < 10% 3% in file bat.c for void function drawabat
+LINES > 80 CHARS 1 in file bat.c for void function drawabat
+
+BLANK LINES < 10% 0% in file bat.c for void function movebat
+
+TEXT COMMENTS < 10% 0% in file bat.c for void function flapbat
+LINES > 80 CHARS 1 in file bat.c for void function flapbat
+
+TEXT COMMENTS < 10% 0% in file bat.c for function collide
+EXIT ROUTES > 1 2 in file bat.c for function collide
+
+TEXT COMMENTS < 10% 1% in file bat.c for void function init_bat
+BLANK LINES < 10% 2% in file bat.c for void function init_bat
+COMPLEXITY > 10 20 in file bat.c for void function init_bat
+EXTD COMPLEXITY > 15 24 in file bat.c for void function init_bat
+EX STATEMENTS > 50 59 in file bat.c for void function init_bat
+LINES > 80 CHARS 7 in file bat.c for void function init_bat
+
+TEXT COMMENTS < 10% 6% in file bat.c for void function draw_bat
+
+TEXT COMMENTS < 10% 4% in file bat.c for void function release_bat
+LINES > 80 CHARS 1 in file bat.c for void function release_bat
+
+TEXT COMMENTS < 50% 21% in file bat.c for file level global/file
+
+TEXT COMMENTS < 50% 46% in file blank.c for file level global/file
+
+TEXT COMMENTS < 10% 2% in file blot.c for void function init_blot
+LINES > 80 CHARS 2 in file blot.c for void function init_blot
+
+TEXT COMMENTS < 10% 0% in file blot.c for void function draw_blot
+BLANK LINES < 10% 2% in file blot.c for void function draw_blot
+LINES > 80 CHARS 1 in file blot.c for void function draw_blot
+
+TEXT COMMENTS < 10% 0% in file blot.c for void function release_blot
+
+TEXT COMMENTS < 50% 37% in file blot.c for file level global/file
+
+BLANK LINES < 10% 7% in file bomb.c for void function explode
+
+TEXT COMMENTS < 10% 0% in file bomb.c for void function rivet
+
+BLANK LINES < 10% 6% in file bomb.c for void function detonator
+LINES > 80 CHARS 4 in file bomb.c for void function detonator
+
+BLANK LINES < 10% 8% in file bomb.c for void function init_bomb
+COMPLEXITY > 10 12 in file bomb.c for void function init_bomb
+LINES > 80 CHARS 2 in file bomb.c for void function init_bomb
+
+TEXT COMMENTS < 10% 8% in file bomb.c for void function draw_bomb
+BLANK LINES < 10% 5% in file bomb.c for void function draw_bomb
+LINES > 80 CHARS 3 in file bomb.c for void function draw_bomb
+
+TEXT COMMENTS < 10% 0% in file bomb.c for void function release_bomb
+
+TEXT COMMENTS < 10% 7% in file bomb.c for void function change_bomb
+
+TEXT COMMENTS < 50% 31% in file bomb.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file bouboule.c for void function sinvary
+
+TEXT COMMENTS < 10% 5% in file bouboule.c for void function sininit
+LINES > 80 CHARS 1 in file bouboule.c for void function sininit
+
+TEXT COMMENTS < 10% 0% in file bouboule.c for void function sinfree
+
+TEXT COMMENTS < 10% 7% in file bouboule.c for void function init_bouboule
+BLANK LINES < 10% 9% in file bouboule.c for void function init_bouboule
+COMPLEXITY > 10 38 in file bouboule.c for void function init_bouboule
+EXTD COMPLEXITY > 15 49 in file bouboule.c for void function init_bouboule
+EX STATEMENTS > 50 99 in file bouboule.c for void function init_bouboule
+LINES > 80 CHARS 3 in file bouboule.c for void function init_bouboule
+
+BLANK LINES < 10% 8% in file bouboule.c for void function draw_bouboule
+COMPLEXITY > 10 35 in file bouboule.c for void function draw_bouboule
+EXTD COMPLEXITY > 15 41 in file bouboule.c for void function draw_bouboule
+EX STATEMENTS > 50 122 in file bouboule.c for void function draw_bouboule
+LINES > 80 CHARS 6 in file bouboule.c for void function draw_bouboule
+
+TEXT COMMENTS < 10% 0% in file bouboule.c for void function release_bouboul
+ e
+BLANK LINES < 10% 6% in file bouboule.c for void function release_bouboul
+ e
+
+LINES > 80 CHARS 16 in file bouboule.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file bounce.c for void function checkCollision
+BLANK LINES < 10% 2% in file bounce.c for void function checkCollision
+LINES > 80 CHARS 12 in file bounce.c for void function checkCollision
+
+TEXT COMMENTS < 10% 0% in file bounce.c for void function drawball
+BLANK LINES < 10% 6% in file bounce.c for void function drawball
+LINES > 80 CHARS 7 in file bounce.c for void function drawball
+
+BLANK LINES < 10% 0% in file bounce.c for void function moveball
+
+TEXT COMMENTS < 10% 0% in file bounce.c for void function spinball
+LINES > 80 CHARS 1 in file bounce.c for void function spinball
+
+TEXT COMMENTS < 10% 0% in file bounce.c for function collide
+EXIT ROUTES > 1 2 in file bounce.c for function collide
+
+TEXT COMMENTS < 10% 1% in file bounce.c for void function init_bounce
+BLANK LINES < 10% 3% in file bounce.c for void function init_bounce
+COMPLEXITY > 10 22 in file bounce.c for void function init_bounce
+EXTD COMPLEXITY > 15 26 in file bounce.c for void function init_bounce
+EX STATEMENTS > 50 69 in file bounce.c for void function init_bounce
+EXIT ROUTES > 1 2 in file bounce.c for void function init_bounce
+LINES > 80 CHARS 7 in file bounce.c for void function init_bounce
+
+TEXT COMMENTS < 10% 6% in file bounce.c for void function draw_bounce
+
+TEXT COMMENTS < 10% 0% in file bounce.c for void function release_bounce
+
+TEXT COMMENTS < 50% 34% in file bounce.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file braid.c for function applyword
+
+TEXT COMMENTS < 10% 0% in file braid.c for function applywordto
+
+TEXT COMMENTS < 10% 0% in file braid.c for function applywordbackto
+
+TEXT COMMENTS < 10% 2% in file braid.c for void function init_braid
+COMPLEXITY > 10 24 in file braid.c for void function init_braid
+EXTD COMPLEXITY > 15 26 in file braid.c for void function init_braid
+EX STATEMENTS > 50 51 in file braid.c for void function init_braid
+LINES > 80 CHARS 9 in file braid.c for void function init_braid
+
+TEXT COMMENTS < 10% 1% in file braid.c for void function draw_braid
+BLANK LINES < 10% 4% in file braid.c for void function draw_braid
+COMPLEXITY > 10 33 in file braid.c for void function draw_braid
+EXTD COMPLEXITY > 15 35 in file braid.c for void function draw_braid
+EX STATEMENTS > 50 74 in file braid.c for void function draw_braid
+CONTINUES PRESENT 1 in file braid.c for void function draw_braid
+LINES > 80 CHARS 66 in file braid.c for void function draw_braid
+
+TEXT COMMENTS < 10% 0% in file braid.c for void function release_braid
+
+TEXT COMMENTS < 50% 20% in file braid.c for file level global/file
+LINES > 80 CHARS 1 in file braid.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file bug.c for function hexcmove
+BLANK LINES < 10% 0% in file bug.c for function hexcmove
+EXIT ROUTES > 1 7 in file bug.c for function hexcmove
+LINES > 80 CHARS 1 in file bug.c for function hexcmove
+
+TEXT COMMENTS < 10% 0% in file bug.c for function neighbor
+BLANK LINES < 10% 3% in file bug.c for function neighbor
+COMPLEXITY > 10 13 in file bug.c for function neighbor
+EXTD COMPLEXITY > 15 19 in file bug.c for function neighbor
+EXIT ROUTES > 1 9 in file bug.c for function neighbor
+LINES > 80 CHARS 2 in file bug.c for function neighbor
+
+TEXT COMMENTS < 10% 0% in file bug.c for void function drawabacterium
+LINES > 80 CHARS 2 in file bug.c for void function drawabacterium
+
+TEXT COMMENTS < 10% 0% in file bug.c for void function drawabug
+LINES > 80 CHARS 1 in file bug.c for void function drawabug
+
+TEXT COMMENTS < 10% 0% in file bug.c for void function eraseabug
+
+LINES > 80 CHARS 1 in file bug.c for void function init_buglist
+
+TEXT COMMENTS < 10% 0% in file bug.c for void function addto_buglist
+
+TEXT COMMENTS < 10% 0% in file bug.c for void function removefrom_buglist
+
+TEXT COMMENTS < 10% 0% in file bug.c for void function dupin_buglist
+
+TEXT COMMENTS < 10% 0% in file bug.c for void function cutfrom_buglist
+
+TEXT COMMENTS < 10% 0% in file bug.c for void function reattach_buglist
+
+LINES > 80 CHARS 2 in file bug.c for void function flush_buglist
+
+TEXT COMMENTS < 10% 8% in file bug.c for function dirbug
+EXIT ROUTES > 1 2 in file bug.c for function dirbug
+
+TEXT COMMENTS < 10% 0% in file bug.c for void function mutatebug
+EXIT ROUTES > 1 2 in file bug.c for void function mutatebug
+LINES > 80 CHARS 1 in file bug.c for void function mutatebug
+
+TEXT COMMENTS < 10% 6% in file bug.c for void function makebacteria
+
+TEXT COMMENTS < 10% 0% in file bug.c for void function redrawbacteria
+
+TEXT COMMENTS < 10% 8% in file bug.c for void function init_bug
+BLANK LINES < 10% 5% in file bug.c for void function init_bug
+COMPLEXITY > 10 26 in file bug.c for void function init_bug
+EXTD COMPLEXITY > 15 30 in file bug.c for void function init_bug
+EX STATEMENTS > 50 79 in file bug.c for void function init_bug
+LINES > 80 CHARS 10 in file bug.c for void function init_bug
+
+TEXT COMMENTS < 10% 6% in file bug.c for void function draw_bug
+BLANK LINES < 10% 2% in file bug.c for void function draw_bug
+COMPLEXITY > 10 15 in file bug.c for void function draw_bug
+EXTD COMPLEXITY > 15 18 in file bug.c for void function draw_bug
+EX STATEMENTS > 50 63 in file bug.c for void function draw_bug
+LINES > 80 CHARS 10 in file bug.c for void function draw_bug
+
+TEXT COMMENTS < 10% 0% in file bug.c for void function release_bug
+
+TEXT COMMENTS < 50% 21% in file bug.c for file level global/file
+LINES > 80 CHARS 1 in file bug.c for file level global/file
+
+TEXT COMMENTS < 10% 2% in file cartoon.c for void function initimage
+BLANK LINES < 10% 8% in file cartoon.c for void function initimage
+LINES > 80 CHARS 4 in file cartoon.c for void function initimage
+
+TEXT COMMENTS < 10% 8% in file cartoon.c for void function select_cartoon
+BLANK LINES < 10% 8% in file cartoon.c for void function select_cartoon
+
+LINES > 80 CHARS 1 in file cartoon.c for void function move_cartoon
+
+TEXT COMMENTS < 10% 5% in file cartoon.c for void function erase_image
+
+TEXT COMMENTS < 10% 3% in file cartoon.c for void function init_cartoon
+
+TEXT COMMENTS < 10% 5% in file cartoon.c for void function release_cartoon
+
+TEXT COMMENTS < 50% 34% in file cartoon.c for file level global/file
+LINES > 80 CHARS 1 in file cartoon.c for file level global/file
+
+LINES > 80 CHARS 1 in file clock.c for function myrand
+
+TEXT COMMENTS < 10% 0% in file clock.c for void function DrawDisk
+
+TEXT COMMENTS < 10% 0% in file clock.c for void function DrawBorder
+
+TEXT COMMENTS < 10% 0% in file clock.c for void function DrawJewel
+
+TEXT COMMENTS < 10% 4% in file clock.c for void function DrawHand
+BLANK LINES < 10% 4% in file clock.c for void function DrawHand
+LINES > 80 CHARS 1 in file clock.c for void function DrawHand
+
+TEXT COMMENTS < 10% 0% in file clock.c for void function real_draw_clock
+
+TEXT COMMENTS < 10% 0% in file clock.c for function collide
+EXIT ROUTES > 1 2 in file clock.c for function collide
+
+TEXT COMMENTS < 10% 9% in file clock.c for function new_clock_state
+EXIT ROUTES > 1 2 in file clock.c for function new_clock_state
+LINES > 80 CHARS 11 in file clock.c for function new_clock_state
+
+TEXT COMMENTS < 10% 0% in file clock.c for void function update_clock
+
+TEXT COMMENTS < 10% 4% in file clock.c for void function init_clock
+COMPLEXITY > 10 13 in file clock.c for void function init_clock
+
+TEXT COMMENTS < 10% 0% in file clock.c for void function draw_clock
+BLANK LINES < 10% 4% in file clock.c for void function draw_clock
+
+TEXT COMMENTS < 10% 0% in file clock.c for void function release_clock
+
+TEXT COMMENTS < 50% 24% in file clock.c for file level global/file
+LINES > 80 CHARS 5 in file clock.c for file level global/file
+
+TEXT COMMENTS < 10% 4% in file color.c for void function hsb2rgb
+BLANK LINES < 10% 2% in file color.c for void function hsb2rgb
+
+TEXT COMMENTS < 10% 0% in file color.c for void function hsbramp
+
+TEXT COMMENTS < 10% 0% in file color.c for function allocPixel
+LINES > 80 CHARS 1 in file color.c for function allocPixel
+
+BLANK LINES < 10% 8% in file color.c for void function fixColormap
+COMPLEXITY > 10 16 in file color.c for void function fixColormap
+EXTD COMPLEXITY > 15 19 in file color.c for void function fixColormap
+LINES > 80 CHARS 4 in file color.c for void function fixColormap
+
+TEXT COMMENTS < 10% 6% in file color.c for void function reserveColors
+
+TEXT COMMENTS < 50% 46% in file color.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file daisy.c for void function drawstem
+
+TEXT COMMENTS < 10% 0% in file daisy.c for function drawpetals
+BLANK LINES < 10% 1% in file daisy.c for function drawpetals
+COMPLEXITY > 10 11 in file daisy.c for function drawpetals
+LINES > 80 CHARS 8 in file daisy.c for function drawpetals
+
+TEXT COMMENTS < 10% 5% in file daisy.c for void function drawcenter
+LINES > 80 CHARS 1 in file daisy.c for void function drawcenter
+
+TEXT COMMENTS < 10% 7% in file daisy.c for void function drawdaisy
+BLANK LINES < 10% 2% in file daisy.c for void function drawdaisy
+LINES > 80 CHARS 4 in file daisy.c for void function drawdaisy
+
+TEXT COMMENTS < 10% 0% in file daisy.c for void function init_daisy
+LINES > 80 CHARS 2 in file daisy.c for void function init_daisy
+
+TEXT COMMENTS < 10% 0% in file daisy.c for void function draw_daisy
+
+TEXT COMMENTS < 10% 0% in file daisy.c for void function release_daisy
+
+TEXT COMMENTS < 10% 0% in file daisy.c for void function refresh_daisy
+
+TEXT COMMENTS < 50% 26% in file daisy.c for file level global/file
+
+TEXT COMMENTS < 10% 7% in file dclock.c for void function drawDclock
+BLANK LINES < 10% 6% in file dclock.c for void function drawDclock
+COMPLEXITY > 10 18 in file dclock.c for void function drawDclock
+EXTD COMPLEXITY > 15 23 in file dclock.c for void function drawDclock
+EX STATEMENTS > 50 73 in file dclock.c for void function drawDclock
+LINES > 80 CHARS 2 in file dclock.c for void function drawDclock
+
+TEXT COMMENTS < 10% 6% in file dclock.c for void function init_dclock
+COMPLEXITY > 10 15 in file dclock.c for void function init_dclock
+LINES > 80 CHARS 2 in file dclock.c for void function init_dclock
+
+TEXT COMMENTS < 10% 0% in file dclock.c for void function draw_dclock
+
+TEXT COMMENTS < 10% 0% in file dclock.c for void function release_dclock
+
+TEXT COMMENTS < 50% 15% in file dclock.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file demon.c for void function drawcell
+BLANK LINES < 10% 7% in file demon.c for void function drawcell
+LINES > 80 CHARS 2 in file demon.c for void function drawcell
+
+TEXT COMMENTS < 10% 0% in file demon.c for void function addtolist
+
+TEXT COMMENTS < 10% 0% in file demon.c for void function print_state
+
+TEXT COMMENTS < 10% 0% in file demon.c for void function free_state
+
+TEXT COMMENTS < 10% 0% in file demon.c for void function free_struct
+
+BLANK LINES < 10% 8% in file demon.c for void function draw_state
+LINES > 80 CHARS 4 in file demon.c for void function draw_state
+
+TEXT COMMENTS < 10% 0% in file demon.c for void function RandomSoup
+LINES > 80 CHARS 1 in file demon.c for void function RandomSoup
+
+TEXT COMMENTS < 10% 0% in file demon.c for void function init_demon
+COMPLEXITY > 10 18 in file demon.c for void function init_demon
+EXTD COMPLEXITY > 15 18 in file demon.c for void function init_demon
+EX STATEMENTS > 50 54 in file demon.c for void function init_demon
+LINES > 80 CHARS 7 in file demon.c for void function init_demon
+
+TEXT COMMENTS < 10% 7% in file demon.c for void function draw_demon
+BLANK LINES < 10% 2% in file demon.c for void function draw_demon
+COMPLEXITY > 10 44 in file demon.c for void function draw_demon
+EXTD COMPLEXITY > 15 44 in file demon.c for void function draw_demon
+EX STATEMENTS > 50 75 in file demon.c for void function draw_demon
+LINES > 80 CHARS 28 in file demon.c for void function draw_demon
+
+TEXT COMMENTS < 10% 0% in file demon.c for void function release_demon
+
+TEXT COMMENTS < 50% 21% in file demon.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file drift.c for function halfrandom
+
+TEXT COMMENTS < 10% 0% in file drift.c for function frandom
+BLANK LINES < 10% 9% in file drift.c for function frandom
+EXIT ROUTES > 1 8 in file drift.c for function frandom
+
+TEXT COMMENTS < 10% 0% in file drift.c for void function initmode
+
+TEXT COMMENTS < 10% 0% in file drift.c for void function pick_df_coefs
+LINES > 80 CHARS 1 in file drift.c for void function pick_df_coefs
+
+TEXT COMMENTS < 10% 0% in file drift.c for void function initfractal
+BLANK LINES < 10% 9% in file drift.c for void function initfractal
+COMPLEXITY > 10 11 in file drift.c for void function initfractal
+LINES > 80 CHARS 2 in file drift.c for void function initfractal
+
+TEXT COMMENTS < 10% 0% in file drift.c for void function init_drift
+
+COMPLEXITY > 10 20 in file drift.c for void function iter
+EXTD COMPLEXITY > 15 27 in file drift.c for void function iter
+EX STATEMENTS > 50 72 in file drift.c for void function iter
+LINES > 80 CHARS 4 in file drift.c for void function iter
+
+TEXT COMMENTS < 10% 0% in file drift.c for void function draw
+EXIT ROUTES > 1 2 in file drift.c for void function draw
+LINES > 80 CHARS 1 in file drift.c for void function draw
+
+TEXT COMMENTS < 10% 0% in file drift.c for void function draw_flush
+BLANK LINES < 10% 8% in file drift.c for void function draw_flush
+
+TEXT COMMENTS < 10% 0% in file drift.c for void function draw_drift
+COMPLEXITY > 10 11 in file drift.c for void function draw_drift
+LINES > 80 CHARS 2 in file drift.c for void function draw_drift
+
+TEXT COMMENTS < 10% 0% in file drift.c for void function release_drift
+
+TEXT COMMENTS < 50% 29% in file drift.c for file level global/file
+LINES > 80 CHARS 4 in file drift.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file eyes.c for void function TFillArc
+BLANK LINES < 10% 8% in file eyes.c for void function TFillArc
+
+TEXT COMMENTS < 10% 0% in file eyes.c for void function SetTransform
+
+TEXT COMMENTS < 10% 0% in file eyes.c for function computePupil
+BLANK LINES < 10% 2% in file eyes.c for function computePupil
+
+TEXT COMMENTS < 10% 0% in file eyes.c for function fly_touches
+EXIT ROUTES > 1 5 in file eyes.c for function fly_touches
+
+TEXT COMMENTS < 10% 0% in file eyes.c for function fly_touches_eye
+EXIT ROUTES > 1 2 in file eyes.c for function fly_touches_eye
+
+TEXT COMMENTS < 10% 0% in file eyes.c for function eyes_overlap
+EXIT ROUTES > 1 5 in file eyes.c for function eyes_overlap
+
+LINES > 80 CHARS 2 in file eyes.c for void function init_fly
+
+TEXT COMMENTS < 10% 0% in file eyes.c for void function unpaint_fly
+
+BLANK LINES < 10% 8% in file eyes.c for void function move_fly
+COMPLEXITY > 10 13 in file eyes.c for void function move_fly
+
+COMPLEXITY > 10 18 in file eyes.c for void function create_eyes
+EXTD COMPLEXITY > 15 19 in file eyes.c for void function create_eyes
+EX STATEMENTS > 50 64 in file eyes.c for void function create_eyes
+CONTINUES PRESENT 1 in file eyes.c for void function create_eyes
+LINES > 80 CHARS 3 in file eyes.c for void function create_eyes
+
+BLANK LINES < 10% 6% in file eyes.c for void function paint_eyes
+COMPLEXITY > 10 12 in file eyes.c for void function paint_eyes
+EXIT ROUTES > 1 2 in file eyes.c for void function paint_eyes
+
+TEXT COMMENTS < 10% 8% in file eyes.c for void function one_time_init
+EXIT ROUTES > 1 2 in file eyes.c for void function one_time_init
+
+TEXT COMMENTS < 10% 0% in file eyes.c for void function free_eyes
+
+COMPLEXITY > 10 14 in file eyes.c for void function init_eyes
+EXIT ROUTES > 1 4 in file eyes.c for void function init_eyes
+LINES > 80 CHARS 1 in file eyes.c for void function init_eyes
+
+TEXT COMMENTS < 10% 6% in file eyes.c for void function draw_eyes
+
+TEXT COMMENTS < 10% 0% in file eyes.c for void function release_eyes
+
+TEXT COMMENTS < 50% 37% in file eyes.c for file level global/file
+LINES > 80 CHARS 2 in file eyes.c for file level global/file
+
+TEXT COMMENTS < 10% 3% in file fadeplot.c for void function init_fadeplot
+
+TEXT COMMENTS < 10% 7% in file fadeplot.c for void function draw_fadeplot
+BLANK LINES < 10% 7% in file fadeplot.c for void function draw_fadeplot
+COMPLEXITY > 10 13 in file fadeplot.c for void function draw_fadeplot
+LINES > 80 CHARS 4 in file fadeplot.c for void function draw_fadeplot
+
+TEXT COMMENTS < 50% 18% in file fadeplot.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file flag.c for void function initSintab
+LINES > 80 CHARS 1 in file flag.c for void function initSintab
+
+TEXT COMMENTS < 10% 0% in file flag.c for void function affiche
+BLANK LINES < 10% 3% in file flag.c for void function affiche
+LINES > 80 CHARS 5 in file flag.c for void function affiche
+
+TEXT COMMENTS < 10% 5% in file flag.c for void function init_flag
+LINES > 80 CHARS 1 in file flag.c for void function init_flag
+
+TEXT COMMENTS < 10% 3% in file flag.c for void function draw_flag
+BLANK LINES < 10% 3% in file flag.c for void function draw_flag
+LINES > 80 CHARS 3 in file flag.c for void function draw_flag
+
+TEXT COMMENTS < 10% 0% in file flag.c for void function release_flag
+LINES > 80 CHARS 1 in file flag.c for void function release_flag
+
+TEXT COMMENTS < 50% 14% in file flag.c for file level global/file
+
+TEXT COMMENTS < 50% 0% in file flag.h for file level global/file
+BLANK LINES < 10% 0% in file flag.h for file level global/file
+
+TEXT COMMENTS < 10% 0% in file flame.c for function halfrandom
+
+BLANK LINES < 10% 5% in file flame.c for function recurse
+COMPLEXITY > 10 30 in file flame.c for function recurse
+EXTD COMPLEXITY > 15 39 in file flame.c for function recurse
+EX STATEMENTS > 50 82 in file flame.c for function recurse
+EXIT ROUTES > 1 3 in file flame.c for function recurse
+LINES > 80 CHARS 19 in file flame.c for function recurse
+
+TEXT COMMENTS < 10% 0% in file flame.c for void function init_flame
+
+TEXT COMMENTS < 10% 8% in file flame.c for void function draw_flame
+LINES > 80 CHARS 2 in file flame.c for void function draw_flame
+
+TEXT COMMENTS < 10% 0% in file flame.c for void function release_flame
+
+TEXT COMMENTS < 50% 24% in file flame.c for file level global/file
+
+TEXT COMMENTS < 10% 6% in file forest.c for void function draw_tree
+
+TEXT COMMENTS < 10% 0% in file forest.c for void function init_forest
+
+TEXT COMMENTS < 10% 0% in file forest.c for void function draw_forest
+LINES > 80 CHARS 1 in file forest.c for void function draw_forest
+
+TEXT COMMENTS < 10% 0% in file forest.c for void function release_forest
+
+TEXT COMMENTS < 10% 0% in file forest.c for void function refresh_forest
+
+TEXT COMMENTS < 50% 40% in file forest.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file galaxy.c for void function free_galaxies
+
+TEXT COMMENTS < 10% 7% in file galaxy.c for void function startover
+EX STATEMENTS > 50 69 in file galaxy.c for void function startover
+LINES > 80 CHARS 11 in file galaxy.c for void function startover
+
+TEXT COMMENTS < 10% 0% in file galaxy.c for void function init_galaxy
+
+TEXT COMMENTS < 10% 3% in file galaxy.c for void function draw_galaxy
+COMPLEXITY > 10 14 in file galaxy.c for void function draw_galaxy
+EXTD COMPLEXITY > 15 20 in file galaxy.c for void function draw_galaxy
+EX STATEMENTS > 50 69 in file galaxy.c for void function draw_galaxy
+LINES > 80 CHARS 7 in file galaxy.c for void function draw_galaxy
+
+TEXT COMMENTS < 10% 0% in file galaxy.c for void function release_galaxy
+
+TEXT COMMENTS < 50% 30% in file galaxy.c for file level global/file
+LINES > 80 CHARS 1 in file galaxy.c for file level global/file
+
+TEXT COMMENTS < 10% 6% in file gear.c for void function gear
+EX STATEMENTS > 50 79 in file gear.c for void function gear
+LINES > 80 CHARS 14 in file gear.c for void function gear
+
+TEXT COMMENTS < 10% 3% in file gear.c for void function draw
+
+TEXT COMMENTS < 10% 0% in file gear.c for function key
+BLANK LINES < 10% 0% in file gear.c for function key
+EXIT ROUTES > 1 7 in file gear.c for function key
+
+TEXT COMMENTS < 10% 0% in file gear.c for void function reshape
+
+TEXT COMMENTS < 10% 2% in file gear.c for void function pinit
+BLANK LINES < 10% 8% in file gear.c for void function pinit
+
+LINES > 80 CHARS 1 in file gear.c for void function init_gear
+
+TEXT COMMENTS < 10% 9% in file gear.c for void function draw_gear
+
+TEXT COMMENTS < 10% 0% in file gear.c for void function release_gear
+LINES > 80 CHARS 1 in file gear.c for void function release_gear
+
+TEXT COMMENTS < 50% 28% in file gear.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file geometry.c for void function eraselines
+
+TEXT COMMENTS < 10% 0% in file geometry.c for void function drawlines
+
+TEXT COMMENTS < 10% 5% in file geometry.c for void function init_geometry
+
+TEXT COMMENTS < 10% 5% in file geometry.c for void function draw_geometry
+LINES > 80 CHARS 4 in file geometry.c for void function draw_geometry
+
+TEXT COMMENTS < 10% 0% in file geometry.c for void function release_geometr
+ y
+
+TEXT COMMENTS < 50% 20% in file geometry.c for file level global/file
+
+LINES > 80 CHARS 2 in file grav.c for void function init_planet
+
+BLANK LINES < 10% 9% in file grav.c for void function draw_planet
+LINES > 80 CHARS 2 in file grav.c for void function draw_planet
+
+TEXT COMMENTS < 10% 5% in file grav.c for void function init_grav
+LINES > 80 CHARS 3 in file grav.c for void function init_grav
+
+LINES > 80 CHARS 2 in file grav.c for void function draw_grav
+
+TEXT COMMENTS < 10% 0% in file grav.c for void function release_grav
+
+TEXT COMMENTS < 50% 10% in file grav.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file helix.c for function gcd
+
+TEXT COMMENTS < 10% 0% in file helix.c for void function helix
+BLANK LINES < 10% 7% in file helix.c for void function helix
+
+TEXT COMMENTS < 10% 0% in file helix.c for void function random_helix
+
+TEXT COMMENTS < 10% 0% in file helix.c for void function init_helix
+BLANK LINES < 10% 9% in file helix.c for void function init_helix
+LINES > 80 CHARS 2 in file helix.c for void function init_helix
+
+TEXT COMMENTS < 10% 0% in file helix.c for void function draw_helix
+
+TEXT COMMENTS < 10% 0% in file helix.c for void function release_helix
+
+TEXT COMMENTS < 50% 30% in file helix.c for file level global/file
+
+TEXT COMMENTS < 10% 5% in file hop.c for void function init_hop
+COMPLEXITY > 10 11 in file hop.c for void function init_hop
+LINES > 80 CHARS 2 in file hop.c for void function init_hop
+
+TEXT COMMENTS < 10% 0% in file hop.c for void function draw_hop
+BLANK LINES < 10% 2% in file hop.c for void function draw_hop
+LINES > 80 CHARS 3 in file hop.c for void function draw_hop
+
+TEXT COMMENTS < 10% 0% in file hop.c for void function release_hop
+
+TEXT COMMENTS < 50% 41% in file hop.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file hyper.c for void function move_line
+BLANK LINES < 10% 5% in file hyper.c for void function move_line
+EXIT ROUTES > 1 2 in file hyper.c for void function move_line
+LINES > 80 CHARS 2 in file hyper.c for void function move_line
+
+TEXT COMMENTS < 10% 0% in file hyper.c for void function init_hyper
+BLANK LINES < 10% 8% in file hyper.c for void function init_hyper
+COMPLEXITY > 10 12 in file hyper.c for void function init_hyper
+LINES > 80 CHARS 2 in file hyper.c for void function init_hyper
+
+TEXT COMMENTS < 10% 0% in file hyper.c for void function draw_hyper
+EX STATEMENTS > 50 52 in file hyper.c for void function draw_hyper
+LINES > 80 CHARS 4 in file hyper.c for void function draw_hyper
+
+TEXT COMMENTS < 10% 0% in file hyper.c for void function release_hyper
+
+TEXT COMMENTS < 50% 21% in file hyper.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file image.c for void function init_image
+BLANK LINES < 10% 5% in file image.c for void function init_image
+COMPLEXITY > 10 14 in file image.c for void function init_image
+LINES > 80 CHARS 2 in file image.c for void function init_image
+
+TEXT COMMENTS < 10% 0% in file image.c for void function draw_image
+LINES > 80 CHARS 2 in file image.c for void function draw_image
+
+TEXT COMMENTS < 10% 0% in file image.c for void function release_image
+
+TEXT COMMENTS < 10% 0% in file image.c for void function refresh_image
+LINES > 80 CHARS 2 in file image.c for void function refresh_image
+
+TEXT COMMENTS < 50% 20% in file image.c for file level global/file
+
+TEXT COMMENTS < 10% 9% in file julia.c for void function apply
+
+TEXT COMMENTS < 10% 0% in file julia.c for void function incr
+LINES > 80 CHARS 2 in file julia.c for void function incr
+
+TEXT COMMENTS < 10% 0% in file julia.c for void function init_julia
+BLANK LINES < 10% 8% in file julia.c for void function init_julia
+COMPLEXITY > 10 15 in file julia.c for void function init_julia
+EXTD COMPLEXITY > 15 16 in file julia.c for void function init_julia
+EXIT ROUTES > 1 2 in file julia.c for void function init_julia
+LINES > 80 CHARS 3 in file julia.c for void function init_julia
+
+TEXT COMMENTS < 10% 8% in file julia.c for void function draw_julia
+COMPLEXITY > 10 11 in file julia.c for void function draw_julia
+EX STATEMENTS > 50 58 in file julia.c for void function draw_julia
+LINES > 80 CHARS 4 in file julia.c for void function draw_julia
+
+TEXT COMMENTS < 10% 0% in file julia.c for void function release_julia
+BLANK LINES < 10% 8% in file julia.c for void function release_julia
+LINES > 80 CHARS 2 in file julia.c for void function release_julia
+
+TEXT COMMENTS < 50% 30% in file julia.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file kaleid.c for void function init_kaleid
+BLANK LINES < 10% 6% in file kaleid.c for void function init_kaleid
+
+TEXT COMMENTS < 10% 0% in file kaleid.c for void function draw_kaleid
+BLANK LINES < 10% 2% in file kaleid.c for void function draw_kaleid
+EX STATEMENTS > 50 81 in file kaleid.c for void function draw_kaleid
+
+TEXT COMMENTS < 10% 0% in file kaleid.c for void function release_kaleid
+
+TEXT COMMENTS < 50% 23% in file kaleid.c for file level global/file
+
+TEXT COMMENTS < 10% 1% in file laser.c for void function init_laser
+COMPLEXITY > 10 17 in file laser.c for void function init_laser
+EXTD COMPLEXITY > 15 17 in file laser.c for void function init_laser
+EX STATEMENTS > 50 55 in file laser.c for void function init_laser
+LINES > 80 CHARS 2 in file laser.c for void function init_laser
+
+TEXT COMMENTS < 10% 0% in file laser.c for void function draw_laser_once
+BLANK LINES < 10% 7% in file laser.c for void function draw_laser_once
+COMPLEXITY > 10 21 in file laser.c for void function draw_laser_once
+EXTD COMPLEXITY > 15 21 in file laser.c for void function draw_laser_once
+EX STATEMENTS > 50 65 in file laser.c for void function draw_laser_once
+LINES > 80 CHARS 3 in file laser.c for void function draw_laser_once
+
+TEXT COMMENTS < 10% 0% in file laser.c for void function draw_laser
+
+TEXT COMMENTS < 10% 0% in file laser.c for void function release_laser
+
+TEXT COMMENTS < 50% 36% in file laser.c for file level global/file
+
+TEXT COMMENTS < 10% 4% in file life.c for void function drawcell
+LINES > 80 CHARS 1 in file life.c for void function drawcell
+
+TEXT COMMENTS < 10% 0% in file life.c for void function erasecell
+
+TEXT COMMENTS < 10% 0% in file life.c for void function spawn
+BLANK LINES < 10% 4% in file life.c for void function spawn
+
+TEXT COMMENTS < 10% 0% in file life.c for void function ckill
+BLANK LINES < 10% 2% in file life.c for void function ckill
+
+TEXT COMMENTS < 10% 0% in file life.c for void function setcell
+
+TEXT COMMENTS < 10% 0% in file life.c for void function alloccells
+LINES > 80 CHARS 3 in file life.c for void function alloccells
+
+TEXT COMMENTS < 10% 0% in file life.c for void function freecells
+
+TEXT COMMENTS < 10% 0% in file life.c for void function init_fates
+LINES > 80 CHARS 1 in file life.c for void function init_fates
+
+TEXT COMMENTS < 10% 0% in file life.c for void function RandomSoup
+
+TEXT COMMENTS < 10% 0% in file life.c for void function GetPattern
+
+TEXT COMMENTS < 10% 4% in file life.c for void function shooter
+BLANK LINES < 10% 4% in file life.c for void function shooter
+
+TEXT COMMENTS < 10% 5% in file life.c for void function init_life
+BLANK LINES < 10% 6% in file life.c for void function init_life
+COMPLEXITY > 10 13 in file life.c for void function init_life
+EXTD COMPLEXITY > 15 16 in file life.c for void function init_life
+LINES > 80 CHARS 6 in file life.c for void function init_life
+
+COMPLEXITY > 10 11 in file life.c for void function draw_life
+LINES > 80 CHARS 2 in file life.c for void function draw_life
+
+TEXT COMMENTS < 10% 0% in file life.c for void function release_life
+
+TEXT COMMENTS < 10% 0% in file life.c for void function change_life
+
+TEXT COMMENTS < 50% 10% in file life.c for file level global/file
+BLANK LINES < 10% 5% in file life.c for file level global/file
+LINES > 80 CHARS 1 in file life.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file life1d.c for void function drawcell
+BLANK LINES < 10% 5% in file life1d.c for void function drawcell
+LINES > 80 CHARS 4 in file life1d.c for void function drawcell
+
+TEXT COMMENTS < 10% 0% in file life1d.c for void function RandomSoup
+LINES > 80 CHARS 1 in file life1d.c for void function RandomSoup
+
+TEXT COMMENTS < 10% 2% in file life1d.c for void function GetRule
+BLANK LINES < 10% 6% in file life1d.c for void function GetRule
+COMPLEXITY > 10 12 in file life1d.c for void function GetRule
+LINES > 80 CHARS 5 in file life1d.c for void function GetRule
+
+TEXT COMMENTS < 10% 0% in file life1d.c for function compare
+EXIT ROUTES > 1 2 in file life1d.c for function compare
+
+TEXT COMMENTS < 10% 0% in file life1d.c for void function init_life1d
+BLANK LINES < 10% 7% in file life1d.c for void function init_life1d
+COMPLEXITY > 10 24 in file life1d.c for void function init_life1d
+EXTD COMPLEXITY > 15 27 in file life1d.c for void function init_life1d
+EX STATEMENTS > 50 69 in file life1d.c for void function init_life1d
+LINES > 80 CHARS 4 in file life1d.c for void function init_life1d
+
+TEXT COMMENTS < 10% 0% in file life1d.c for void function draw_life1d
+BLANK LINES < 10% 8% in file life1d.c for void function draw_life1d
+COMPLEXITY > 10 17 in file life1d.c for void function draw_life1d
+EXTD COMPLEXITY > 15 17 in file life1d.c for void function draw_life1d
+LINES > 80 CHARS 6 in file life1d.c for void function draw_life1d
+
+TEXT COMMENTS < 10% 0% in file life1d.c for void function release_life1d
+BLANK LINES < 10% 7% in file life1d.c for void function release_life1d
+LINES > 80 CHARS 1 in file life1d.c for void function release_life1d
+
+TEXT COMMENTS < 10% 0% in file life1d.c for void function refresh_life1d
+
+TEXT COMMENTS < 50% 26% in file life1d.c for file level global/file
+LINES > 80 CHARS 31 in file life1d.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file life3d.c for function Rule2Array
+EXIT ROUTES > 1 5 in file life3d.c for function Rule2Array
+
+TEXT COMMENTS < 10% 0% in file life3d.c for function Array2Rule
+EXIT ROUTES > 1 5 in file life3d.c for function Array2Rule
+
+TEXT COMMENTS < 10% 0% in file life3d.c for void function AddToList
+
+TEXT COMMENTS < 10% 0% in file life3d.c for void function AddToEraseList
+
+TEXT COMMENTS < 10% 0% in file life3d.c for void function DelFromList
+
+TEXT COMMENTS < 10% 0% in file life3d.c for void function MemInit
+
+LINES > 80 CHARS 1 in file life3d.c for void function BaseOffset
+
+TEXT COMMENTS < 10% 0% in file life3d.c for function GetMem
+
+TEXT COMMENTS < 10% 0% in file life3d.c for void function SetMem
+
+TEXT COMMENTS < 10% 0% in file life3d.c for void function ChangeMem
+
+TEXT COMMENTS < 10% 0% in file life3d.c for void function ClearMem
+
+TEXT COMMENTS < 10% 0% in file life3d.c for void function IncrementNbrs3D
+LINES > 80 CHARS 1 in file life3d.c for void function IncrementNbrs3D
+
+TEXT COMMENTS < 10% 0% in file life3d.c for void function End3D
+
+BLANK LINES < 10% 5% in file life3d.c for void function RunLife3D
+COMPLEXITY > 10 11 in file life3d.c for void function RunLife3D
+LINES > 80 CHARS 10 in file life3d.c for void function RunLife3D
+
+TEXT COMMENTS < 10% 0% in file life3d.c for function CountCells3D
+
+TEXT COMMENTS < 10% 0% in file life3d.c for void function DisplayList
+LINES > 80 CHARS 1 in file life3d.c for void function DisplayList
+
+TEXT COMMENTS < 10% 0% in file life3d.c for void function RandomSoup
+LINES > 80 CHARS 1 in file life3d.c for void function RandomSoup
+
+TEXT COMMENTS < 10% 0% in file life3d.c for void function GetPattern
+BLANK LINES < 10% 3% in file life3d.c for void function GetPattern
+
+TEXT COMMENTS < 10% 0% in file life3d.c for void function NewViewpoint
+
+TEXT COMMENTS < 10% 0% in file life3d.c for void function NewPoint
+LINES > 80 CHARS 2 in file life3d.c for void function NewPoint
+
+TEXT COMMENTS < 10% 4% in file life3d.c for void function SortList
+COMPLEXITY > 10 20 in file life3d.c for void function SortList
+EXTD COMPLEXITY > 15 25 in file life3d.c for void function SortList
+EX STATEMENTS > 50 71 in file life3d.c for void function SortList
+LINES > 80 CHARS 3 in file life3d.c for void function SortList
+
+TEXT COMMENTS < 10% 0% in file life3d.c for void function DrawFace
+BLANK LINES < 10% 8% in file life3d.c for void function DrawFace
+
+TEXT COMMENTS < 10% 4% in file life3d.c for function DrawCube
+BLANK LINES < 10% 6% in file life3d.c for function DrawCube
+COMPLEXITY > 10 13 in file life3d.c for function DrawCube
+EXTD COMPLEXITY > 15 16 in file life3d.c for function DrawCube
+EXIT ROUTES > 1 2 in file life3d.c for function DrawCube
+LINES > 80 CHARS 2 in file life3d.c for function DrawCube
+
+LINES > 80 CHARS 2 in file life3d.c for void function DrawScreen
+
+TEXT COMMENTS < 10% 0% in file life3d.c for void function shooter
+BLANK LINES < 10% 0% in file life3d.c for void function shooter
+COMPLEXITY > 10 24 in file life3d.c for void function shooter
+EXTD COMPLEXITY > 15 24 in file life3d.c for void function shooter
+EX STATEMENTS > 50 93 in file life3d.c for void function shooter
+LINES > 80 CHARS 60 in file life3d.c for void function shooter
+
+TEXT COMMENTS < 10% 0% in file life3d.c for void function initrule
+
+COMPLEXITY > 10 12 in file life3d.c for void function init_life3d
+EX STATEMENTS > 50 51 in file life3d.c for void function init_life3d
+LINES > 80 CHARS 6 in file life3d.c for void function init_life3d
+
+TEXT COMMENTS < 10% 8% in file life3d.c for void function release_life3d
+
+TEXT COMMENTS < 10% 2% in file life3d.c for void function change_life3d
+
+TEXT COMMENTS < 50% 10% in file life3d.c for file level global/file
+LINES > 80 CHARS 6 in file life3d.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file lightning.c for function setup_multi_strike
+
+TEXT COMMENTS < 10% 0% in file lightning.c for function flashing_strike
+EXIT ROUTES > 1 2 in file lightning.c for function flashing_strike
+
+TEXT COMMENTS < 10% 0% in file lightning.c for void function flash_duration
+
+TEXT COMMENTS < 10% 0% in file lightning.c for void function random_storm
+BLANK LINES < 10% 2% in file lightning.c for void function random_storm
+LINES > 80 CHARS 3 in file lightning.c for void function random_storm
+
+TEXT COMMENTS < 10% 0% in file lightning.c for void function generate
+LINES > 80 CHARS 1 in file lightning.c for void function generate
+
+TEXT COMMENTS < 10% 0% in file lightning.c for void function create_fork
+LINES > 80 CHARS 4 in file lightning.c for void function create_fork
+
+TEXT COMMENTS < 10% 0% in file lightning.c for void function update_bolt
+BLANK LINES < 10% 7% in file lightning.c for void function update_bolt
+
+TEXT COMMENTS < 10% 0% in file lightning.c for void function draw_bolt
+
+TEXT COMMENTS < 10% 0% in file lightning.c for void function first_strike
+LINES > 80 CHARS 1 in file lightning.c for void function first_strike
+
+TEXT COMMENTS < 10% 0% in file lightning.c for void function draw_line
+LINES > 80 CHARS 6 in file lightning.c for void function draw_line
+
+TEXT COMMENTS < 10% 3% in file lightning.c for void function level1_strike
+BLANK LINES < 10% 6% in file lightning.c for void function level1_strike
+LINES > 80 CHARS 2 in file lightning.c for void function level1_strike
+
+LINES > 80 CHARS 1 in file lightning.c for function distance
+
+BLANK LINES < 10% 9% in file lightning.c for void function level2_strike
+LINES > 80 CHARS 2 in file lightning.c for void function level2_strike
+
+TEXT COMMENTS < 10% 0% in file lightning.c for function storm_active
+
+TEXT COMMENTS < 10% 0% in file lightning.c for void function wiggle_bolt
+LINES > 80 CHARS 3 in file lightning.c for void function wiggle_bolt
+
+TEXT COMMENTS < 10% 0% in file lightning.c for void function wiggle_line
+
+TEXT COMMENTS < 10% 0% in file lightning.c for void function init_lightning
+
+TEXT COMMENTS < 10% 0% in file lightning.c for void function draw_lightning
+BLANK LINES < 10% 2% in file lightning.c for void function draw_lightning
+
+TEXT COMMENTS < 10% 0% in file lightning.c for void function release_lightn
+ ing
+
+TEXT COMMENTS < 50% 9% in file lightning.c for file level global/file
+LINES > 80 CHARS 1 in file lightning.c for file level global/file
+
+COMPLEXITY > 10 12 in file lissie.c for void function drawlissie
+LINES > 80 CHARS 2 in file lissie.c for void function drawlissie
+
+TEXT COMMENTS < 10% 5% in file lissie.c for void function initlissie
+BLANK LINES < 10% 9% in file lissie.c for void function initlissie
+LINES > 80 CHARS 2 in file lissie.c for void function initlissie
+
+TEXT COMMENTS < 10% 0% in file lissie.c for void function init_lissie
+LINES > 80 CHARS 2 in file lissie.c for void function init_lissie
+
+TEXT COMMENTS < 10% 0% in file lissie.c for void function draw_lissie
+
+TEXT COMMENTS < 10% 0% in file lissie.c for void function release_lissie
+
+TEXT COMMENTS < 10% 0% in file lissie.c for void function refresh_lissie
+
+TEXT COMMENTS < 50% 11% in file lissie.c for file level global/file
+LINES > 80 CHARS 1 in file lissie.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file logout.c for function has_property
+EXIT ROUTES > 1 2 in file logout.c for function has_property
+
+TEXT COMMENTS < 10% 0% in file logout.c for void function send_delete_messa
+ ge
+
+TEXT COMMENTS < 10% 5% in file logout.c for void function handle_top_level
+
+TEXT COMMENTS < 10% 3% in file logout.c for void function recurse_tree
+EXIT ROUTES > 1 2 in file logout.c for void function recurse_tree
+LINES > 80 CHARS 1 in file logout.c for void function recurse_tree
+
+TEXT COMMENTS < 10% 4% in file logout.c for void function kill_tree
+EXIT ROUTES > 1 2 in file logout.c for void function kill_tree
+LINES > 80 CHARS 1 in file logout.c for void function kill_tree
+
+LINES > 80 CHARS 1 in file logout.c for void function closedownLogout
+
+TEXT COMMENTS < 10% 0% in file logout.c for void function sessionLogout
+
+TEXT COMMENTS < 10% 0% in file logout.c for void function uglyLogout
+
+TEXT COMMENTS < 10% 9% in file logout.c for void function logoutUser
+
+COMPLEXITY > 10 13 in file logout.c for function fullLock
+EXTD COMPLEXITY > 15 16 in file logout.c for function fullLock
+EXIT ROUTES > 1 7 in file logout.c for function fullLock
+LINES > 80 CHARS 1 in file logout.c for function fullLock
+
+LINES > 80 CHARS 1 in file logout.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file loop.c for void function addtolist
+
+TEXT COMMENTS < 10% 0% in file loop.c for void function print_state
+
+TEXT COMMENTS < 10% 0% in file loop.c for void function free_state
+
+TEXT COMMENTS < 10% 0% in file loop.c for void function drawcell
+
+BLANK LINES < 10% 7% in file loop.c for void function draw_state
+LINES > 80 CHARS 3 in file loop.c for void function draw_state
+
+TEXT COMMENTS < 10% 5% in file loop.c for void function init_table
+BLANK LINES < 10% 8% in file loop.c for void function init_table
+LINES > 80 CHARS 3 in file loop.c for void function init_table
+
+TEXT COMMENTS < 10% 0% in file loop.c for void function init_adam
+BLANK LINES < 10% 2% in file loop.c for void function init_adam
+LINES > 80 CHARS 3 in file loop.c for void function init_adam
+
+TEXT COMMENTS < 10% 0% in file loop.c for void function do_gen
+
+TEXT COMMENTS < 10% 9% in file loop.c for void function init_loop
+BLANK LINES < 10% 9% in file loop.c for void function init_loop
+COMPLEXITY > 10 11 in file loop.c for void function init_loop
+LINES > 80 CHARS 2 in file loop.c for void function init_loop
+
+TEXT COMMENTS < 10% 0% in file loop.c for void function draw_loop
+BLANK LINES < 10% 4% in file loop.c for void function draw_loop
+COMPLEXITY > 10 14 in file loop.c for void function draw_loop
+EXTD COMPLEXITY > 15 19 in file loop.c for void function draw_loop
+LINES > 80 CHARS 2 in file loop.c for void function draw_loop
+
+TEXT COMMENTS < 10% 0% in file loop.c for void function release_loop
+BLANK LINES < 10% 7% in file loop.c for void function release_loop
+LINES > 80 CHARS 1 in file loop.c for void function release_loop
+
+TEXT COMMENTS < 50% 20% in file loop.c for file level global/file
+LINES > 80 CHARS 2 in file loop.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file marquee.c for function font_width
+
+COMPLEXITY > 10 12 in file marquee.c for function fixup_back
+EXTD COMPLEXITY > 15 17 in file marquee.c for function fixup_back
+EXIT ROUTES > 1 3 in file marquee.c for function fixup_back
+LINES > 80 CHARS 1 in file marquee.c for function fixup_back
+
+BLANK LINES < 10% 2% in file marquee.c for function text_font_width
+COMPLEXITY > 10 11 in file marquee.c for function text_font_width
+LINES > 80 CHARS 1 in file marquee.c for function text_font_width
+
+TEXT COMMENTS < 10% 0% in file marquee.c for function text_height
+
+TEXT COMMENTS < 10% 0% in file marquee.c for function add_blanks
+
+TEXT COMMENTS < 10% 0% in file marquee.c for void function add_letter
+
+TEXT COMMENTS < 10% 3% in file marquee.c for void function init_marquee
+BLANK LINES < 10% 6% in file marquee.c for void function init_marquee
+COMPLEXITY > 10 14 in file marquee.c for void function init_marquee
+LINES > 80 CHARS 3 in file marquee.c for void function init_marquee
+
+TEXT COMMENTS < 10% 1% in file marquee.c for void function draw_marquee
+BLANK LINES < 10% 1% in file marquee.c for void function draw_marquee
+COMPLEXITY > 10 25 in file marquee.c for void function draw_marquee
+EXTD COMPLEXITY > 15 25 in file marquee.c for void function draw_marquee
+EX STATEMENTS > 50 61 in file marquee.c for void function draw_marquee
+EXIT ROUTES > 1 2 in file marquee.c for void function draw_marquee
+LINES > 80 CHARS 11 in file marquee.c for void function draw_marquee
+
+TEXT COMMENTS < 10% 0% in file marquee.c for void function release_marquee
+
+TEXT COMMENTS < 50% 19% in file marquee.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file maze.c for void function free_maze
+
+TEXT COMMENTS < 10% 2% in file maze.c for void function set_maze_sizes
+LINES > 80 CHARS 3 in file maze.c for void function set_maze_sizes
+
+TEXT COMMENTS < 10% 8% in file maze.c for void function initialize_maze
+BLANK LINES < 10% 8% in file maze.c for void function initialize_maze
+COMPLEXITY > 10 19 in file maze.c for void function initialize_maze
+EXTD COMPLEXITY > 15 20 in file maze.c for void function initialize_maze
+EX STATEMENTS > 50 70 in file maze.c for void function initialize_maze
+LINES > 80 CHARS 1 in file maze.c for void function initialize_maze
+
+TEXT COMMENTS < 10% 9% in file maze.c for function choose_door
+BLANK LINES < 10% 4% in file maze.c for function choose_door
+COMPLEXITY > 10 11 in file maze.c for function choose_door
+EXTD COMPLEXITY > 15 19 in file maze.c for function choose_door
+EXIT ROUTES > 1 3 in file maze.c for function choose_door
+LINES > 80 CHARS 7 in file maze.c for function choose_door
+
+LINES > 80 CHARS 2 in file maze.c for void function draw_maze_walls
+
+LINES > 80 CHARS 2 in file maze.c for void function create_maze_walls
+
+TEXT COMMENTS < 10% 4% in file maze.c for void function draw_maze_border
+BLANK LINES < 10% 4% in file maze.c for void function draw_maze_border
+
+TEXT COMMENTS < 10% 5% in file maze.c for void function draw_wall
+BLANK LINES < 10% 2% in file maze.c for void function draw_wall
+
+TEXT COMMENTS < 10% 6% in file maze.c for void function draw_solid_square
+BLANK LINES < 10% 6% in file maze.c for void function draw_solid_square
+
+BLANK LINES < 10% 9% in file maze.c for void function solve_maze
+
+TEXT COMMENTS < 10% 7% in file maze.c for void function enter_square
+LINES > 80 CHARS 1 in file maze.c for void function enter_square
+
+BLANK LINES < 10% 8% in file maze.c for void function init_maze
+LINES > 80 CHARS 1 in file maze.c for void function init_maze
+
+TEXT COMMENTS < 10% 7% in file maze.c for void function draw_maze
+BLANK LINES < 10% 2% in file maze.c for void function draw_maze
+
+TEXT COMMENTS < 10% 0% in file maze.c for void function release_maze
+
+TEXT COMMENTS < 10% 0% in file maze.c for void function refresh_maze
+BLANK LINES < 10% 4% in file maze.c for void function refresh_maze
+
+TEXT COMMENTS < 50% 32% in file maze.c for file level global/file
+LINES > 80 CHARS 3 in file maze.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file mode.c for void function call_release_hook
+
+TEXT COMMENTS < 10% 0% in file mode.c for void function release_last_mode
+
+TEXT COMMENTS < 10% 0% in file mode.c for void function call_init_hook
+
+TEXT COMMENTS < 10% 0% in file mode.c for void function call_callback_hook
+
+EXIT ROUTES > 1 2 in file mode.c for void function call_refresh_hook
+
+TEXT COMMENTS < 10% 0% in file mode.c for void function call_change_hook
+
+TEXT COMMENTS < 50% 7% in file mode.c for file level global/file
+BLANK LINES < 10% 8% in file mode.c for file level global/file
+
+TEXT COMMENTS < 50% 10% in file mode.h for file level global/file
+
+TEXT COMMENTS < 10% 0% in file mountain.c for void function spread
+LINES > 80 CHARS 1 in file mountain.c for void function spread
+
+TEXT COMMENTS < 10% 0% in file mountain.c for void function drawamountain
+
+TEXT COMMENTS < 10% 0% in file mountain.c for void function init_mountain
+COMPLEXITY > 10 14 in file mountain.c for void function init_mountain
+LINES > 80 CHARS 1 in file mountain.c for void function init_mountain
+
+TEXT COMMENTS < 10% 6% in file mountain.c for void function draw_mountain
+
+TEXT COMMENTS < 10% 0% in file mountain.c for void function release_mountai
+ n
+
+TEXT COMMENTS < 50% 26% in file mountain.c for file level global/file
+
+TEXT COMMENTS < 10% 2% in file nose.c for void function move
+BLANK LINES < 10% 2% in file nose.c for void function move
+COMPLEXITY > 10 22 in file nose.c for void function move
+EXTD COMPLEXITY > 15 28 in file nose.c for void function move
+EXIT ROUTES > 1 2 in file nose.c for void function move
+LINES > 80 CHARS 7 in file nose.c for void function move
+
+TEXT COMMENTS < 10% 7% in file nose.c for void function walk
+BLANK LINES < 10% 1% in file nose.c for void function walk
+COMPLEXITY > 10 17 in file nose.c for void function walk
+EXTD COMPLEXITY > 15 20 in file nose.c for void function walk
+LINES > 80 CHARS 3 in file nose.c for void function walk
+
+TEXT COMMENTS < 10% 0% in file nose.c for function think
+EXIT ROUTES > 1 2 in file nose.c for function think
+
+TEXT COMMENTS < 10% 8% in file nose.c for void function talk
+BLANK LINES < 10% 9% in file nose.c for void function talk
+COMPLEXITY > 10 14 in file nose.c for void function talk
+EXTD COMPLEXITY > 15 16 in file nose.c for void function talk
+EX STATEMENTS > 50 55 in file nose.c for void function talk
+EXIT ROUTES > 1 2 in file nose.c for void function talk
+LINES > 80 CHARS 4 in file nose.c for void function talk
+
+TEXT COMMENTS < 10% 0% in file nose.c for function look
+BLANK LINES < 10% 3% in file nose.c for function look
+EXIT ROUTES > 1 5 in file nose.c for function look
+
+TEXT COMMENTS < 10% 0% in file nose.c for void function init_nose
+BLANK LINES < 10% 4% in file nose.c for void function init_nose
+LINES > 80 CHARS 4 in file nose.c for void function init_nose
+
+TEXT COMMENTS < 10% 0% in file nose.c for void function release_nose
+
+TEXT COMMENTS < 50% 18% in file nose.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file option.c for void function managePrompt
+BLANK LINES < 10% 8% in file option.c for void function managePrompt
+
+TEXT COMMENTS < 10% 0% in file option.c for void function f_option
+BLANK LINES < 10% 7% in file option.c for void function f_option
+LINES > 80 CHARS 8 in file option.c for void function f_option
+
+TEXT COMMENTS < 10% 0% in file option.c for void function f_Dialog
+
+TEXT COMMENTS < 10% 0% in file option.c for void function Setup_Option
+LINES > 80 CHARS 1 in file option.c for void function Setup_Option
+
+TEXT COMMENTS < 50% 34% in file option.c for file level global/file
+LINES > 80 CHARS 3 in file option.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file pacman.c for void function clearcorners
+BLANK LINES < 10% 2% in file pacman.c for void function clearcorners
+LINES > 80 CHARS 4 in file pacman.c for void function clearcorners
+
+TEXT COMMENTS < 10% 0% in file pacman.c for void function repopulate
+LINES > 80 CHARS 1 in file pacman.c for void function repopulate
+
+TEXT COMMENTS < 10% 1% in file pacman.c for void function movepac
+BLANK LINES < 10% 5% in file pacman.c for void function movepac
+COMPLEXITY > 10 44 in file pacman.c for void function movepac
+EXTD COMPLEXITY > 15 55 in file pacman.c for void function movepac
+EX STATEMENTS > 50 123 in file pacman.c for void function movepac
+LINES > 80 CHARS 31 in file pacman.c for void function movepac
+
+TEXT COMMENTS < 10% 0% in file pacman.c for void function init_pacman
+BLANK LINES < 10% 8% in file pacman.c for void function init_pacman
+COMPLEXITY > 10 27 in file pacman.c for void function init_pacman
+EXTD COMPLEXITY > 15 32 in file pacman.c for void function init_pacman
+EX STATEMENTS > 50 79 in file pacman.c for void function init_pacman
+EXIT ROUTES > 1 2 in file pacman.c for void function init_pacman
+LINES > 80 CHARS 11 in file pacman.c for void function init_pacman
+
+TEXT COMMENTS < 10% 0% in file pacman.c for void function draw_pacman
+COMPLEXITY > 10 24 in file pacman.c for void function draw_pacman
+EXTD COMPLEXITY > 15 32 in file pacman.c for void function draw_pacman
+EX STATEMENTS > 50 61 in file pacman.c for void function draw_pacman
+LINES > 80 CHARS 18 in file pacman.c for void function draw_pacman
+
+TEXT COMMENTS < 10% 0% in file pacman.c for void function release_pacman
+BLANK LINES < 10% 7% in file pacman.c for void function release_pacman
+COMPLEXITY > 10 11 in file pacman.c for void function release_pacman
+LINES > 80 CHARS 2 in file pacman.c for void function release_pacman
+
+TEXT COMMENTS < 50% 14% in file pacman.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file passwd.c for function new_pwlnode
+EXIT ROUTES > 1 2 in file passwd.c for function new_pwlnode
+
+COMPLEXITY > 10 12 in file passwd.c for void function getUserName
+
+COMPLEXITY > 10 13 in file passwd.c for void function getCryptedUserPas
+ swd
+LINES > 80 CHARS 1 in file passwd.c for void function getCryptedUserPas
+ swd
+
+COMPLEXITY > 10 16 in file passwd.c for void function getCryptedRootPas
+ swd
+EXTD COMPLEXITY > 15 17 in file passwd.c for void function getCryptedRootPas
+ swd
+EX STATEMENTS > 50 54 in file passwd.c for void function getCryptedRootPas
+ swd
+
+COMPLEXITY > 10 31 in file passwd.c for function checkPasswd
+EXTD COMPLEXITY > 15 44 in file passwd.c for function checkPasswd
+EX STATEMENTS > 50 57 in file passwd.c for function checkPasswd
+EXIT ROUTES > 1 3 in file passwd.c for function checkPasswd
+LINES > 80 CHARS 9 in file passwd.c for function checkPasswd
+
+TEXT COMMENTS < 10% 5% in file passwd.c for void function initDCE
+BLANK LINES < 10% 5% in file passwd.c for void function initDCE
+COMPLEXITY > 10 12 in file passwd.c for void function initDCE
+LINES > 80 CHARS 5 in file passwd.c for void function initDCE
+
+TEXT COMMENTS < 10% 0% in file passwd.c for function error_string
+BLANK LINES < 10% 3% in file passwd.c for function error_string
+EXIT ROUTES > 1 10 in file passwd.c for function error_string
+LINES > 80 CHARS 2 in file passwd.c for function error_string
+
+EXIT ROUTES > 1 2 in file passwd.c for function check_dce_net_passwd
+LINES > 80 CHARS 9 in file passwd.c for function check_dce_net_passwd
+
+EXIT ROUTES > 1 2 in file passwd.c for function krb_check_password
+
+TEXT COMMENTS < 10% 8% in file passwd.c for function krb_check_password
+COMPLEXITY > 10 12 in file passwd.c for function krb_check_password
+EX STATEMENTS > 50 58 in file passwd.c for function krb_check_password
+EXIT ROUTES > 1 10 in file passwd.c for function krb_check_password
+LINES > 80 CHARS 3 in file passwd.c for function krb_check_password
+
+BLANK LINES < 10% 0% in file passwd.c for void function get_multiple
+EXIT ROUTES > 1 4 in file passwd.c for void function get_multiple
+
+BLANK LINES < 10% 8% in file passwd.c for void function set_multiple
+COMPLEXITY > 10 47 in file passwd.c for void function set_multiple
+EXTD COMPLEXITY > 15 47 in file passwd.c for void function set_multiple
+EX STATEMENTS > 50 120 in file passwd.c for void function set_multiple
+CONTINUES PRESENT 2 in file passwd.c for void function set_multiple
+EXIT ROUTES > 1 7 in file passwd.c for void function set_multiple
+LINES > 80 CHARS 8 in file passwd.c for void function set_multiple
+
+TEXT COMMENTS < 10% 6% in file passwd.c for void function gpass
+BLANK LINES < 10% 6% in file passwd.c for void function gpass
+COMPLEXITY > 10 13 in file passwd.c for void function gpass
+EXTD COMPLEXITY > 15 16 in file passwd.c for void function gpass
+EXIT ROUTES > 1 3 in file passwd.c for void function gpass
+LINES > 80 CHARS 4 in file passwd.c for void function gpass
+
+BLANK LINES < 10% 4% in file passwd.c for void function initPasswd
+
+TEXT COMMENTS < 50% 26% in file passwd.c for file level global/file
+COMPLEXITY > 10 40 in file passwd.c for file level global/file
+EXTD COMPLEXITY > 15 47 in file passwd.c for file level global/file
+LINES > 80 CHARS 1 in file passwd.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file penrose.c for function vertex_dir
+BLANK LINES < 10% 4% in file penrose.c for function vertex_dir
+EXIT ROUTES > 1 3 in file penrose.c for function vertex_dir
+LINES > 80 CHARS 2 in file penrose.c for function vertex_dir
+
+TEXT COMMENTS < 10% 0% in file penrose.c for void function add_unit_vec
+
+TEXT COMMENTS < 10% 0% in file penrose.c for function fived_to_loc
+BLANK LINES < 10% 4% in file penrose.c for function fived_to_loc
+
+TEXT COMMENTS < 10% 0% in file penrose.c for void function release_screen
+
+TEXT COMMENTS < 10% 6% in file penrose.c for void function init_penrose
+BLANK LINES < 10% 2% in file penrose.c for void function init_penrose
+COMPLEXITY > 10 15 in file penrose.c for void function init_penrose
+EXTD COMPLEXITY > 15 16 in file penrose.c for void function init_penrose
+EX STATEMENTS > 50 57 in file penrose.c for void function init_penrose
+LINES > 80 CHARS 3 in file penrose.c for void function init_penrose
+
+BLANK LINES < 10% 6% in file penrose.c for function match_rules
+COMPLEXITY > 10 14 in file penrose.c for function match_rules
+EXIT ROUTES > 1 3 in file penrose.c for function match_rules
+LINES > 80 CHARS 4 in file penrose.c for function match_rules
+
+TEXT COMMENTS < 10% 0% in file penrose.c for function find_completions
+BLANK LINES < 10% 7% in file penrose.c for function find_completions
+EXIT ROUTES > 1 2 in file penrose.c for function find_completions
+
+TEXT COMMENTS < 10% 3% in file penrose.c for void function draw_tile
+BLANK LINES < 10% 7% in file penrose.c for void function draw_tile
+COMPLEXITY > 10 11 in file penrose.c for void function draw_tile
+LINES > 80 CHARS 12 in file penrose.c for void function draw_tile
+
+TEXT COMMENTS < 10% 6% in file penrose.c for void function check_vertex
+BLANK LINES < 10% 6% in file penrose.c for void function check_vertex
+COMPLEXITY > 10 12 in file penrose.c for void function check_vertex
+LINES > 80 CHARS 3 in file penrose.c for void function check_vertex
+
+TEXT COMMENTS < 10% 0% in file penrose.c for void function delete_vertex
+BLANK LINES < 10% 4% in file penrose.c for void function delete_vertex
+
+LINES > 80 CHARS 1 in file penrose.c for function fills_vertex
+
+TEXT COMMENTS < 10% 1% in file penrose.c for function fringe_changes
+BLANK LINES < 10% 3% in file penrose.c for function fringe_changes
+COMPLEXITY > 10 18 in file penrose.c for function fringe_changes
+EXTD COMPLEXITY > 15 24 in file penrose.c for function fringe_changes
+LINES > 80 CHARS 1 in file penrose.c for function fringe_changes
+
+TEXT COMMENTS < 10% 0% in file penrose.c for void function add_vtype
+
+TEXT COMMENTS < 10% 0% in file penrose.c for function alloc_vertex
+BLANK LINES < 10% 3% in file penrose.c for function alloc_vertex
+
+TEXT COMMENTS < 10% 8% in file penrose.c for function add_tile
+BLANK LINES < 10% 6% in file penrose.c for function add_tile
+COMPLEXITY > 10 25 in file penrose.c for function add_tile
+EXTD COMPLEXITY > 15 30 in file penrose.c for function add_tile
+EX STATEMENTS > 50 59 in file penrose.c for function add_tile
+EXIT ROUTES > 1 2 in file penrose.c for function add_tile
+LINES > 80 CHARS 9 in file penrose.c for function add_tile
+
+TEXT COMMENTS < 10% 4% in file penrose.c for function add_forced_tile
+BLANK LINES < 10% 4% in file penrose.c for function add_forced_tile
+
+TEXT COMMENTS < 10% 8% in file penrose.c for function legal_move
+EXIT ROUTES > 1 2 in file penrose.c for function legal_move
+LINES > 80 CHARS 1 in file penrose.c for function legal_move
+
+TEXT COMMENTS < 10% 3% in file penrose.c for void function add_random_tile
+BLANK LINES < 10% 2% in file penrose.c for void function add_random_tile
+COMPLEXITY > 10 23 in file penrose.c for void function add_random_tile
+EXTD COMPLEXITY > 15 25 in file penrose.c for void function add_random_tile
+EX STATEMENTS > 50 58 in file penrose.c for void function add_random_tile
+CONTINUES PRESENT 2 in file penrose.c for void function add_random_tile
+LINES > 80 CHARS 6 in file penrose.c for void function add_random_tile
+
+TEXT COMMENTS < 10% 5% in file penrose.c for void function draw_penrose
+BLANK LINES < 10% 5% in file penrose.c for void function draw_penrose
+COMPLEXITY > 10 13 in file penrose.c for void function draw_penrose
+EXIT ROUTES > 1 4 in file penrose.c for void function draw_penrose
+
+TEXT COMMENTS < 10% 0% in file penrose.c for void function release_penrose
+
+TEXT COMMENTS < 50% 49% in file penrose.c for file level global/file
+LINES > 80 CHARS 3 in file penrose.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file petal.c for function gcd
+
+TEXT COMMENTS < 10% 0% in file petal.c for function numlines
+
+TEXT COMMENTS < 10% 0% in file petal.c for void function random_petal
+
+TEXT COMMENTS < 10% 0% in file petal.c for void function init_petal
+
+TEXT COMMENTS < 10% 0% in file petal.c for void function draw_petal
+
+TEXT COMMENTS < 10% 0% in file petal.c for void function release_petal
+
+TEXT COMMENTS < 10% 0% in file puzzle.c for function font_width
+
+TEXT COMMENTS < 10% 0% in file puzzle.c for void function NumberScreen
+BLANK LINES < 10% 6% in file puzzle.c for void function NumberScreen
+LINES > 80 CHARS 6 in file puzzle.c for void function NumberScreen
+
+TEXT COMMENTS < 10% 0% in file puzzle.c for function setupmove
+BLANK LINES < 10% 4% in file puzzle.c for function setupmove
+COMPLEXITY > 10 13 in file puzzle.c for function setupmove
+EXTD COMPLEXITY > 15 21 in file puzzle.c for function setupmove
+EXIT ROUTES > 1 2 in file puzzle.c for function setupmove
+LINES > 80 CHARS 2 in file puzzle.c for function setupmove
+
+BLANK LINES < 10% 6% in file puzzle.c for void function setupmovedelta
+COMPLEXITY > 10 15 in file puzzle.c for void function setupmovedelta
+LINES > 80 CHARS 5 in file puzzle.c for void function setupmovedelta
+
+TEXT COMMENTS < 10% 0% in file puzzle.c for void function wrapupmove
+
+TEXT COMMENTS < 10% 0% in file puzzle.c for void function wrapupmovedelta
+LINES > 80 CHARS 1 in file puzzle.c for void function wrapupmovedelta
+
+TEXT COMMENTS < 10% 0% in file puzzle.c for function moveboxdelta
+BLANK LINES < 10% 4% in file puzzle.c for function moveboxdelta
+EXIT ROUTES > 1 2 in file puzzle.c for function moveboxdelta
+LINES > 80 CHARS 4 in file puzzle.c for function moveboxdelta
+
+TEXT COMMENTS < 10% 0% in file puzzle.c for void function init_puzzle
+BLANK LINES < 10% 8% in file puzzle.c for void function init_puzzle
+COMPLEXITY > 10 25 in file puzzle.c for void function init_puzzle
+EXTD COMPLEXITY > 15 28 in file puzzle.c for void function init_puzzle
+EX STATEMENTS > 50 80 in file puzzle.c for void function init_puzzle
+LINES > 80 CHARS 15 in file puzzle.c for void function init_puzzle
+
+TEXT COMMENTS < 10% 0% in file puzzle.c for void function draw_puzzle
+
+TEXT COMMENTS < 10% 0% in file puzzle.c for void function release_puzzle
+BLANK LINES < 10% 7% in file puzzle.c for void function release_puzzle
+
+TEXT COMMENTS < 50% 14% in file puzzle.c for file level global/file
+
+TEXT COMMENTS < 10% 1% in file pyro.c for void function ignite
+BLANK LINES < 10% 5% in file pyro.c for void function ignite
+LINES > 80 CHARS 1 in file pyro.c for void function ignite
+
+TEXT COMMENTS < 10% 8% in file pyro.c for void function animate
+BLANK LINES < 10% 4% in file pyro.c for void function animate
+LINES > 80 CHARS 14 in file pyro.c for void function animate
+
+TEXT COMMENTS < 10% 0% in file pyro.c for void function shootup
+BLANK LINES < 10% 4% in file pyro.c for void function shootup
+LINES > 80 CHARS 6 in file pyro.c for void function shootup
+
+TEXT COMMENTS < 10% 2% in file pyro.c for void function burst
+BLANK LINES < 10% 4% in file pyro.c for void function burst
+COMPLEXITY > 10 21 in file pyro.c for void function burst
+EXTD COMPLEXITY > 15 22 in file pyro.c for void function burst
+EX STATEMENTS > 50 72 in file pyro.c for void function burst
+EXIT ROUTES > 1 2 in file pyro.c for void function burst
+LINES > 80 CHARS 10 in file pyro.c for void function burst
+
+TEXT COMMENTS < 10% 1% in file pyro.c for void function init_pyro
+BLANK LINES < 10% 8% in file pyro.c for void function init_pyro
+COMPLEXITY > 10 17 in file pyro.c for void function init_pyro
+EXTD COMPLEXITY > 15 18 in file pyro.c for void function init_pyro
+EX STATEMENTS > 50 52 in file pyro.c for void function init_pyro
+LINES > 80 CHARS 8 in file pyro.c for void function init_pyro
+
+TEXT COMMENTS < 10% 0% in file pyro.c for void function draw_pyro
+BLANK LINES < 10% 3% in file pyro.c for void function draw_pyro
+LINES > 80 CHARS 1 in file pyro.c for void function draw_pyro
+
+TEXT COMMENTS < 10% 0% in file pyro.c for void function release_pyro
+
+TEXT COMMENTS < 50% 26% in file pyro.c for file level global/file
+LINES > 80 CHARS 2 in file pyro.c for file level global/file
+
+TEXT COMMENTS < 10% 2% in file qix.c for void function init_qix
+BLANK LINES < 10% 8% in file qix.c for void function init_qix
+
+TEXT COMMENTS < 10% 0% in file qix.c for void function draw_qix
+BLANK LINES < 10% 9% in file qix.c for void function draw_qix
+LINES > 80 CHARS 1 in file qix.c for void function draw_qix
+
+TEXT COMMENTS < 10% 0% in file qix.c for void function release_qix
+
+TEXT COMMENTS < 50% 28% in file qix.c for file level global/file
+
+BLANK LINES < 10% 6% in file random.c for function pickMode
+EXIT ROUTES > 1 3 in file random.c for function pickMode
+
+TEXT COMMENTS < 10% 0% in file random.c for function strpmtok
+BLANK LINES < 10% 5% in file random.c for function strpmtok
+COMPLEXITY > 10 20 in file random.c for function strpmtok
+EXTD COMPLEXITY > 15 20 in file random.c for function strpmtok
+CONTINUES PRESENT 4 in file random.c for function strpmtok
+EXIT ROUTES > 1 2 in file random.c for function strpmtok
+
+TEXT COMMENTS < 10% 2% in file random.c for void function parsemodelist
+COMPLEXITY > 10 13 in file random.c for void function parsemodelist
+LINES > 80 CHARS 1 in file random.c for void function parsemodelist
+
+LINES > 80 CHARS 1 in file random.c for void function setMode
+
+TEXT COMMENTS < 10% 0% in file random.c for void function init_random
+BLANK LINES < 10% 8% in file random.c for void function init_random
+LINES > 80 CHARS 1 in file random.c for void function init_random
+
+TEXT COMMENTS < 10% 0% in file random.c for void function draw_random
+BLANK LINES < 10% 9% in file random.c for void function draw_random
+LINES > 80 CHARS 1 in file random.c for void function draw_random
+
+LINES > 80 CHARS 1 in file random.c for void function change_random
+
+TEXT COMMENTS < 50% 18% in file random.c for file level global/file
+LINES > 80 CHARS 1 in file random.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file ras.c for void function analyze_header
+
+TEXT COMMENTS < 10% 0% in file ras.c for void function convert_colors
+BLANK LINES < 10% 5% in file ras.c for void function convert_colors
+LINES > 80 CHARS 2 in file ras.c for void function convert_colors
+
+TEXT COMMENTS < 10% 0% in file ras.c for function find_nearest
+LINES > 80 CHARS 2 in file ras.c for function find_nearest
+
+TEXT COMMENTS < 10% 0% in file ras.c for function GetForeground
+
+TEXT COMMENTS < 10% 0% in file ras.c for function GetBackground
+
+TEXT COMMENTS < 10% 0% in file ras.c for function get_long
+
+TEXT COMMENTS < 10% 7% in file ras.c for function RasterFileToImage
+BLANK LINES < 10% 2% in file ras.c for function RasterFileToImage
+EXIT ROUTES > 1 6 in file ras.c for function RasterFileToImage
+LINES > 80 CHARS 4 in file ras.c for function RasterFileToImage
+
+TEXT COMMENTS < 50% 17% in file ras.c for file level global/file
+LINES > 80 CHARS 2 in file ras.c for file level global/file
+
+TEXT COMMENTS < 50% 40% in file ras.h for file level global/file
+
+TEXT COMMENTS < 10% 0% in file resource.c for function stripname
+EXIT ROUTES > 1 2 in file resource.c for function stripname
+
+TEXT COMMENTS < 10% 0% in file resource.c for void function Help
+LINES > 80 CHARS 2 in file resource.c for void function Help
+
+TEXT COMMENTS < 10% 0% in file resource.c for void function DumpResources
+LINES > 80 CHARS 5 in file resource.c for void function DumpResources
+
+TEXT COMMENTS < 10% 0% in file resource.c for void function LowerString
+
+TEXT COMMENTS < 10% 3% in file resource.c for void function GetResource
+BLANK LINES < 10% 5% in file resource.c for void function GetResource
+LINES > 80 CHARS 1 in file resource.c for void function GetResource
+
+TEXT COMMENTS < 10% 1% in file resource.c for function parsefilepath
+BLANK LINES < 10% 1% in file resource.c for function parsefilepath
+COMPLEXITY > 10 13 in file resource.c for function parsefilepath
+LINES > 80 CHARS 1 in file resource.c for function parsefilepath
+
+TEXT COMMENTS < 10% 8% in file resource.c for void function open_display
+COMPLEXITY > 10 20 in file resource.c for void function open_display
+EXTD COMPLEXITY > 15 26 in file resource.c for void function open_display
+LINES > 80 CHARS 7 in file resource.c for void function open_display
+
+TEXT COMMENTS < 10% 0% in file resource.c for void function printvar
+BLANK LINES < 10% 0% in file resource.c for void function printvar
+
+TEXT COMMENTS < 10% 4% in file resource.c for void function getResources
+COMPLEXITY > 10 38 in file resource.c for void function getResources
+EXTD COMPLEXITY > 15 38 in file resource.c for void function getResources
+EX STATEMENTS > 50 120 in file resource.c for void function getResources
+CONTINUES PRESENT 2 in file resource.c for void function getResources
+LINES > 80 CHARS 10 in file resource.c for void function getResources
+
+TEXT COMMENTS < 10% 3% in file resource.c for void function checkResources
+BLANK LINES < 10% 9% in file resource.c for void function checkResources
+COMPLEXITY > 10 12 in file resource.c for void function checkResources
+
+TEXT COMMENTS < 10% 0% in file resource.c for function get_info
+EXIT ROUTES > 1 3 in file resource.c for function get_info
+
+TEXT COMMENTS < 10% 0% in file resource.c for function descr
+
+TEXT COMMENTS < 50% 17% in file resource.c for file level global/file
+COMPLEXITY > 10 51 in file resource.c for file level global/file
+EXTD COMPLEXITY > 15 51 in file resource.c for file level global/file
+LINES > 80 CHARS 12 in file resource.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file roll.c for void function createsphere
+
+TEXT COMMENTS < 10% 0% in file roll.c for void function rotation3d
+
+TEXT COMMENTS < 10% 0% in file roll.c for void function project
+
+TEXT COMMENTS < 10% 1% in file roll.c for void function init_roll
+BLANK LINES < 10% 3% in file roll.c for void function init_roll
+COMPLEXITY > 10 12 in file roll.c for void function init_roll
+
+TEXT COMMENTS < 10% 0% in file roll.c for void function draw_roll
+BLANK LINES < 10% 2% in file roll.c for void function draw_roll
+COMPLEXITY > 10 20 in file roll.c for void function draw_roll
+EXTD COMPLEXITY > 15 30 in file roll.c for void function draw_roll
+LINES > 80 CHARS 3 in file roll.c for void function draw_roll
+
+TEXT COMMENTS < 10% 0% in file roll.c for void function release_roll
+
+TEXT COMMENTS < 50% 9% in file roll.c for file level global/file
+
+COMPLEXITY > 10 13 in file rotor.c for void function init_rotor
+LINES > 80 CHARS 7 in file rotor.c for void function init_rotor
+
+TEXT COMMENTS < 10% 0% in file rotor.c for void function draw_rotor
+COMPLEXITY > 10 17 in file rotor.c for void function draw_rotor
+EXTD COMPLEXITY > 15 17 in file rotor.c for void function draw_rotor
+EX STATEMENTS > 50 92 in file rotor.c for void function draw_rotor
+LINES > 80 CHARS 4 in file rotor.c for void function draw_rotor
+
+TEXT COMMENTS < 10% 0% in file rotor.c for void function release_rotor
+
+TEXT COMMENTS < 50% 22% in file rotor.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file shape.c for void function init_shape
+BLANK LINES < 10% 7% in file shape.c for void function init_shape
+EXIT ROUTES > 1 2 in file shape.c for void function init_shape
+LINES > 80 CHARS 2 in file shape.c for void function init_shape
+
+TEXT COMMENTS < 10% 0% in file shape.c for void function draw_shape
+BLANK LINES < 10% 9% in file shape.c for void function draw_shape
+LINES > 80 CHARS 7 in file shape.c for void function draw_shape
+
+TEXT COMMENTS < 10% 0% in file shape.c for void function release_shape
+
+TEXT COMMENTS < 50% 31% in file shape.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file slip.c for function halfrandom
+
+TEXT COMMENTS < 10% 0% in file slip.c for function erandom
+EXIT ROUTES > 1 2 in file slip.c for function erandom
+
+TEXT COMMENTS < 10% 0% in file slip.c for void function prepare_screen
+BLANK LINES < 10% 9% in file slip.c for void function prepare_screen
+LINES > 80 CHARS 4 in file slip.c for void function prepare_screen
+
+TEXT COMMENTS < 10% 0% in file slip.c for function quantize
+
+TEXT COMMENTS < 10% 5% in file slip.c for void function init_slip
+
+TEXT COMMENTS < 10% 2% in file slip.c for void function draw_slip
+COMPLEXITY > 10 19 in file slip.c for void function draw_slip
+EXTD COMPLEXITY > 15 22 in file slip.c for void function draw_slip
+EX STATEMENTS > 50 54 in file slip.c for void function draw_slip
+CONTINUES PRESENT 1 in file slip.c for void function draw_slip
+LINES > 80 CHARS 5 in file slip.c for void function draw_slip
+
+TEXT COMMENTS < 10% 0% in file slip.c for void function release_slip
+
+TEXT COMMENTS < 50% 12% in file slip.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file sound.c for void function play_sound
+
+TEXT COMMENTS < 50% 22% in file sound.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file sphere.c for void function init_sphere
+
+TEXT COMMENTS < 10% 0% in file sphere.c for void function draw_sphere
+BLANK LINES < 10% 4% in file sphere.c for void function draw_sphere
+LINES > 80 CHARS 1 in file sphere.c for void function draw_sphere
+
+TEXT COMMENTS < 10% 0% in file sphere.c for void function release_sphere
+
+TEXT COMMENTS < 10% 0% in file spiral.c for void function draw_dots
+
+TEXT COMMENTS < 10% 9% in file spiral.c for void function init_spiral
+LINES > 80 CHARS 1 in file spiral.c for void function init_spiral
+
+TEXT COMMENTS < 10% 7% in file spiral.c for void function draw_spiral
+COMPLEXITY > 10 21 in file spiral.c for void function draw_spiral
+EXTD COMPLEXITY > 15 29 in file spiral.c for void function draw_spiral
+LINES > 80 CHARS 1 in file spiral.c for void function draw_spiral
+
+TEXT COMMENTS < 10% 0% in file spiral.c for void function release_spiral
+
+TEXT COMMENTS < 50% 25% in file spiral.c for file level global/file
+LINES > 80 CHARS 1 in file spiral.c for file level global/file
+
+TEXT COMMENTS < 10% 3% in file spline.c for void function init_spline
+BLANK LINES < 10% 7% in file spline.c for void function init_spline
+COMPLEXITY > 10 19 in file spline.c for void function init_spline
+EXTD COMPLEXITY > 15 21 in file spline.c for void function init_spline
+LINES > 80 CHARS 3 in file spline.c for void function init_spline
+
+TEXT COMMENTS < 10% 5% in file spline.c for void function draw_spline
+BLANK LINES < 10% 9% in file spline.c for void function draw_spline
+COMPLEXITY > 10 24 in file spline.c for void function draw_spline
+EXTD COMPLEXITY > 15 28 in file spline.c for void function draw_spline
+EX STATEMENTS > 50 77 in file spline.c for void function draw_spline
+LINES > 80 CHARS 2 in file spline.c for void function draw_spline
+
+TEXT COMMENTS < 10% 0% in file spline.c for void function XDrawSpline
+
+TEXT COMMENTS < 10% 0% in file spline.c for void function release_spline
+LINES > 80 CHARS 1 in file spline.c for void function release_spline
+
+TEXT COMMENTS < 10% 0% in file spline.c for void function refresh_spline
+
+TEXT COMMENTS < 50% 30% in file spline.c for file level global/file
+LINES > 80 CHARS 1 in file spline.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file star.c for void function star_reset
+
+TEXT COMMENTS < 10% 0% in file star.c for void function star_tick
+
+TEXT COMMENTS < 10% 6% in file star.c for void function star_compute
+LINES > 80 CHARS 3 in file star.c for void function star_compute
+
+TEXT COMMENTS < 10% 2% in file star.c for void function draw_trek
+BLANK LINES < 10% 5% in file star.c for void function draw_trek
+COMPLEXITY > 10 11 in file star.c for void function draw_trek
+EX STATEMENTS > 50 51 in file star.c for void function draw_trek
+LINES > 80 CHARS 11 in file star.c for void function draw_trek
+
+TEXT COMMENTS < 10% 4% in file star.c for void function star_draw
+BLANK LINES < 10% 1% in file star.c for void function star_draw
+COMPLEXITY > 10 22 in file star.c for void function star_draw
+EXTD COMPLEXITY > 15 28 in file star.c for void function star_draw
+LINES > 80 CHARS 16 in file star.c for void function star_draw
+
+TEXT COMMENTS < 10% 2% in file star.c for void function init_pixmaps
+BLANK LINES < 10% 2% in file star.c for void function init_pixmaps
+COMPLEXITY > 10 13 in file star.c for void function init_pixmaps
+EX STATEMENTS > 50 54 in file star.c for void function init_pixmaps
+LINES > 80 CHARS 3 in file star.c for void function init_pixmaps
+
+TEXT COMMENTS < 10% 0% in file star.c for void function tick_stars
+
+COMPLEXITY > 10 12 in file star.c for function compute_move
+LINES > 80 CHARS 3 in file star.c for function compute_move
+
+TEXT COMMENTS < 10% 5% in file star.c for void function init_star
+BLANK LINES < 10% 6% in file star.c for void function init_star
+COMPLEXITY > 10 15 in file star.c for void function init_star
+EXTD COMPLEXITY > 15 16 in file star.c for void function init_star
+LINES > 80 CHARS 4 in file star.c for void function init_star
+
+TEXT COMMENTS < 10% 3% in file star.c for void function draw_star
+BLANK LINES < 10% 3% in file star.c for void function draw_star
+
+TEXT COMMENTS < 10% 0% in file star.c for void function release_star
+BLANK LINES < 10% 8% in file star.c for void function release_star
+
+TEXT COMMENTS < 50% 27% in file star.c for file level global/file
+LINES > 80 CHARS 1 in file star.c for file level global/file
+
+TEXT COMMENTS < 10% 9% in file swarm.c for void function init_swarm
+BLANK LINES < 10% 9% in file swarm.c for void function init_swarm
+COMPLEXITY > 10 13 in file swarm.c for void function init_swarm
+EX STATEMENTS > 50 52 in file swarm.c for void function init_swarm
+LINES > 80 CHARS 3 in file swarm.c for void function init_swarm
+
+COMPLEXITY > 10 15 in file swarm.c for void function draw_swarm
+EXTD COMPLEXITY > 15 17 in file swarm.c for void function draw_swarm
+EX STATEMENTS > 50 61 in file swarm.c for void function draw_swarm
+LINES > 80 CHARS 2 in file swarm.c for void function draw_swarm
+
+TEXT COMMENTS < 10% 0% in file swarm.c for void function release_swarm
+BLANK LINES < 10% 8% in file swarm.c for void function release_swarm
+
+TEXT COMMENTS < 50% 29% in file swarm.c for file level global/file
+
+LINES > 80 CHARS 2 in file swirl.c for void function initialise_image
+
+TEXT COMMENTS < 10% 7% in file swirl.c for void function initialise_colours
+BLANK LINES < 10% 7% in file swirl.c for void function initialise_colours
+LINES > 80 CHARS 1 in file swirl.c for void function initialise_colours
+
+LINES > 80 CHARS 3 in file swirl.c for void function basic_map
+
+EXIT ROUTES > 1 2 in file swirl.c for function default_visual_info
+
+COMPLEXITY > 10 26 in file swirl.c for void function create_colourmap
+EXTD COMPLEXITY > 15 43 in file swirl.c for void function create_colourmap
+LINES > 80 CHARS 9 in file swirl.c for void function create_colourmap
+
+BLANK LINES < 10% 8% in file swirl.c for void function create_knots
+COMPLEXITY > 10 33 in file swirl.c for void function create_knots
+EXTD COMPLEXITY > 15 34 in file swirl.c for void function create_knots
+
+COMPLEXITY > 10 15 in file swirl.c for function do_point
+EXTD COMPLEXITY > 15 20 in file swirl.c for function do_point
+LINES > 80 CHARS 3 in file swirl.c for function do_point
+
+TEXT COMMENTS < 10% 0% in file swirl.c for void function draw_block
+
+LINES > 80 CHARS 4 in file swirl.c for void function draw_point
+
+BLANK LINES < 10% 9% in file swirl.c for void function next_point
+COMPLEXITY > 10 18 in file swirl.c for void function next_point
+EXTD COMPLEXITY > 15 18 in file swirl.c for void function next_point
+LINES > 80 CHARS 4 in file swirl.c for void function next_point
+
+LINES > 80 CHARS 1 in file swirl.c for void function init_swirl
+
+LINES > 80 CHARS 1 in file swirl.c for void function draw_swirl
+
+TEXT COMMENTS < 10% 0% in file swirl.c for void function refresh_swirl
+
+LINES > 80 CHARS 5 in file swirl.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file tri.c for void function startover
+
+TEXT COMMENTS < 10% 0% in file tri.c for void function init_tri
+LINES > 80 CHARS 1 in file tri.c for void function init_tri
+
+TEXT COMMENTS < 10% 0% in file tri.c for void function draw_tri
+BLANK LINES < 10% 3% in file tri.c for void function draw_tri
+LINES > 80 CHARS 2 in file tri.c for void function draw_tri
+
+TEXT COMMENTS < 10% 0% in file tri.c for void function release_tri
+LINES > 80 CHARS 1 in file tri.c for void function release_tri
+
+TEXT COMMENTS < 50% 18% in file tri.c for file level global/file
+
+TEXT COMMENTS < 10% 6% in file triangle.c for void function draw_atriangle
+LINES > 80 CHARS 3 in file triangle.c for void function draw_atriangle
+
+TEXT COMMENTS < 10% 0% in file triangle.c for void function calc_points1
+
+TEXT COMMENTS < 10% 0% in file triangle.c for void function calc_points2
+
+TEXT COMMENTS < 10% 0% in file triangle.c for void function draw_mesh
+BLANK LINES < 10% 7% in file triangle.c for void function draw_mesh
+
+TEXT COMMENTS < 10% 0% in file triangle.c for void function init_triangle
+
+TEXT COMMENTS < 10% 7% in file triangle.c for void function draw_triangle
+LINES > 80 CHARS 5 in file triangle.c for void function draw_triangle
+
+TEXT COMMENTS < 10% 0% in file triangle.c for void function release_triangl
+ e
+
+TEXT COMMENTS < 50% 31% in file triangle.c for file level global/file
+LINES > 80 CHARS 3 in file triangle.c for file level global/file
+
+TEXT COMMENTS < 10% 8% in file trig.c for void function init_trig
+BLANK LINES < 10% 8% in file trig.c for void function init_trig
+
+TEXT COMMENTS < 10% 0% in file trig.c for void function draw_trig
+BLANK LINES < 10% 5% in file trig.c for void function draw_trig
+LINES > 80 CHARS 2 in file trig.c for void function draw_trig
+
+TEXT COMMENTS < 10% 0% in file trig.c for void function release_trig
+
+TEXT COMMENTS < 50% 12% in file trig.c for file level global/file
+
+TEXT COMMENTS < 10% 5% in file tub.c for void function init_tube
+BLANK LINES < 10% 8% in file tub.c for void function init_tube
+
+TEXT COMMENTS < 10% 7% in file tub.c for void function draw_tube
+BLANK LINES < 10% 4% in file tub.c for void function draw_tube
+COMPLEXITY > 10 14 in file tub.c for void function draw_tube
+EX STATEMENTS > 50 63 in file tub.c for void function draw_tube
+LINES > 80 CHARS 7 in file tub.c for void function draw_tube
+
+TEXT COMMENTS < 10% 0% in file tub.c for void function release_tube
+LINES > 80 CHARS 2 in file tub.c for void function release_tube
+
+TEXT COMMENTS < 50% 4% in file tub.c for file level global/file
+
+TEXT COMMENTS < 10% 5% in file tube.c for void function init_tube
+BLANK LINES < 10% 8% in file tube.c for void function init_tube
+
+TEXT COMMENTS < 10% 7% in file tube.c for void function draw_tube
+BLANK LINES < 10% 4% in file tube.c for void function draw_tube
+COMPLEXITY > 10 14 in file tube.c for void function draw_tube
+EXTD COMPLEXITY > 15 19 in file tube.c for void function draw_tube
+EX STATEMENTS > 50 62 in file tube.c for void function draw_tube
+LINES > 80 CHARS 9 in file tube.c for void function draw_tube
+
+TEXT COMMENTS < 10% 0% in file tube.c for void function release_tube
+LINES > 80 CHARS 2 in file tube.c for void function release_tube
+
+TEXT COMMENTS < 50% 13% in file tube.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file turtle.c for void function generate_hilbert
+
+TEXT COMMENTS < 10% 0% in file turtle.c for void function generate_cesarova
+ r
+BLANK LINES < 10% 6% in file turtle.c for void function generate_cesarova
+ r
+LINES > 80 CHARS 5 in file turtle.c for void function generate_cesarova
+ r
+
+TEXT COMMENTS < 10% 0% in file turtle.c for void function generate_harter_h
+ eightway
+BLANK LINES < 10% 6% in file turtle.c for void function generate_harter_h
+ eightway
+LINES > 80 CHARS 5 in file turtle.c for void function generate_harter_h
+ eightway
+
+TEXT COMMENTS < 10% 0% in file turtle.c for void function init_turtle
+BLANK LINES < 10% 2% in file turtle.c for void function init_turtle
+COMPLEXITY > 10 16 in file turtle.c for void function init_turtle
+EXTD COMPLEXITY > 15 16 in file turtle.c for void function init_turtle
+EX STATEMENTS > 50 84 in file turtle.c for void function init_turtle
+LINES > 80 CHARS 1 in file turtle.c for void function init_turtle
+
+TEXT COMMENTS < 10% 0% in file turtle.c for void function draw_turtle
+BLANK LINES < 10% 6% in file turtle.c for void function draw_turtle
+COMPLEXITY > 10 11 in file turtle.c for void function draw_turtle
+LINES > 80 CHARS 10 in file turtle.c for void function draw_turtle
+
+TEXT COMMENTS < 10% 0% in file turtle.c for void function release_turtle
+
+TEXT COMMENTS < 50% 18% in file turtle.c for file level global/file
+
+EXIT ROUTES > 1 2 in file utils.c for function usleep
+
+TEXT COMMENTS < 10% 0% in file utils.c for function seconds
+EXIT ROUTES > 1 2 in file utils.c for function seconds
+
+TEXT COMMENTS < 10% 0% in file utils.c for function readable
+EXIT ROUTES > 1 2 in file utils.c for function readable
+
+TEXT COMMENTS < 10% 0% in file utils.c for function strdup
+
+TEXT COMMENTS < 10% 0% in file utils.c for void function strcat_firstword
+
+TEXT COMMENTS < 10% 2% in file utils.c for function getWords
+BLANK LINES < 10% 3% in file utils.c for function getWords
+COMPLEXITY > 10 42 in file utils.c for function getWords
+EXTD COMPLEXITY > 15 45 in file utils.c for function getWords
+EX STATEMENTS > 50 105 in file utils.c for function getWords
+LINES > 80 CHARS 47 in file utils.c for function getWords
+
+TEXT COMMENTS < 10% 0% in file utils.c for function getFont
+LINES > 80 CHARS 4 in file utils.c for function getFont
+
+TEXT COMMENTS < 10% 0% in file utils.c for void function randomImage
+
+TEXT COMMENTS < 10% 0% in file utils.c for function index_dir
+EXIT ROUTES > 1 2 in file utils.c for function index_dir
+
+TEXT COMMENTS < 10% 0% in file utils.c for void function upcase
+
+TEXT COMMENTS < 10% 3% in file utils.c for void function get_dir
+BLANK LINES < 10% 3% in file utils.c for void function get_dir
+
+TEXT COMMENTS < 10% 0% in file utils.c for function sel_image
+BLANK LINES < 10% 6% in file utils.c for function sel_image
+EXIT ROUTES > 1 2 in file utils.c for function sel_image
+
+TEXT COMMENTS < 10% 3% in file utils.c for function scan_dir
+COMPLEXITY > 10 15 in file utils.c for function scan_dir
+EXTD COMPLEXITY > 15 18 in file utils.c for function scan_dir
+CONTINUES PRESENT 2 in file utils.c for function scan_dir
+EXIT ROUTES > 1 4 in file utils.c for function scan_dir
+LINES > 80 CHARS 7 in file utils.c for function scan_dir
+
+TEXT COMMENTS < 10% 1% in file utils.c for void function getImage
+BLANK LINES < 10% 7% in file utils.c for void function getImage
+COMPLEXITY > 10 28 in file utils.c for void function getImage
+EXTD COMPLEXITY > 15 33 in file utils.c for void function getImage
+LINES > 80 CHARS 9 in file utils.c for void function getImage
+
+TEXT COMMENTS < 10% 0% in file utils.c for void function destroyImage
+BLANK LINES < 10% 0% in file utils.c for void function destroyImage
+
+TEXT COMMENTS < 10% 0% in file utils.c for void function XEraseImage
+BLANK LINES < 10% 0% in file utils.c for void function XEraseImage
+LINES > 80 CHARS 8 in file utils.c for void function XEraseImage
+
+TEXT COMMENTS < 50% 30% in file utils.c for file level global/file
+COMPLEXITY > 10 15 in file utils.c for file level global/file
+EXTD COMPLEXITY > 15 16 in file utils.c for file level global/file
+
+TEXT COMMENTS < 10% 2% in file vroot.h for function VirtualRootWindowOfScre
+ en
+LINES > 80 CHARS 1 in file vroot.h for function VirtualRootWindowOfScre
+ en
+
+LINES > 80 CHARS 3 in file vroot.h for file level global/file
+
+TEXT COMMENTS < 10% 0% in file wator.c for void function drawcell
+LINES > 80 CHARS 3 in file wator.c for void function drawcell
+
+TEXT COMMENTS < 10% 0% in file wator.c for void function erasecell
+
+LINES > 80 CHARS 1 in file wator.c for void function init_kindlist
+
+TEXT COMMENTS < 10% 0% in file wator.c for void function addto_kindlist
+
+TEXT COMMENTS < 10% 0% in file wator.c for void function removefrom_kindlis
+ t
+
+TEXT COMMENTS < 10% 0% in file wator.c for void function dupin_kindlist
+
+TEXT COMMENTS < 10% 0% in file wator.c for void function cutfrom_kindlist
+
+TEXT COMMENTS < 10% 0% in file wator.c for void function reattach_kindlist
+
+LINES > 80 CHARS 1 in file wator.c for void function flush_kindlist
+
+TEXT COMMENTS < 10% 4% in file wator.c for void function init_wator
+BLANK LINES < 10% 6% in file wator.c for void function init_wator
+COMPLEXITY > 10 21 in file wator.c for void function init_wator
+EXTD COMPLEXITY > 15 24 in file wator.c for void function init_wator
+EX STATEMENTS > 50 72 in file wator.c for void function init_wator
+LINES > 80 CHARS 5 in file wator.c for void function init_wator
+
+TEXT COMMENTS < 10% 9% in file wator.c for void function draw_wator
+BLANK LINES < 10% 3% in file wator.c for void function draw_wator
+COMPLEXITY > 10 28 in file wator.c for void function draw_wator
+EXTD COMPLEXITY > 15 36 in file wator.c for void function draw_wator
+EX STATEMENTS > 50 117 in file wator.c for void function draw_wator
+LINES > 80 CHARS 33 in file wator.c for void function draw_wator
+
+TEXT COMMENTS < 10% 0% in file wator.c for void function release_wator
+
+TEXT COMMENTS < 50% 17% in file wator.c for file level global/file
+LINES > 80 CHARS 2 in file wator.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file wire.c for void function addtolist
+
+TEXT COMMENTS < 10% 0% in file wire.c for void function print_state
+
+TEXT COMMENTS < 10% 0% in file wire.c for void function free_state
+
+TEXT COMMENTS < 10% 0% in file wire.c for void function drawcell
+LINES > 80 CHARS 1 in file wire.c for void function drawcell
+
+BLANK LINES < 10% 7% in file wire.c for void function draw_state
+LINES > 80 CHARS 4 in file wire.c for void function draw_state
+
+TEXT COMMENTS < 10% 0% in file wire.c for void function RandomSoup
+LINES > 80 CHARS 1 in file wire.c for void function RandomSoup
+
+TEXT COMMENTS < 10% 3% in file wire.c for void function create_path
+BLANK LINES < 10% 3% in file wire.c for void function create_path
+COMPLEXITY > 10 18 in file wire.c for void function create_path
+EXTD COMPLEXITY > 15 25 in file wire.c for void function create_path
+
+TEXT COMMENTS < 10% 0% in file wire.c for void function do_gen
+BLANK LINES < 10% 4% in file wire.c for void function do_gen
+LINES > 80 CHARS 1 in file wire.c for void function do_gen
+
+TEXT COMMENTS < 10% 0% in file wire.c for void function init_wire
+BLANK LINES < 10% 9% in file wire.c for void function init_wire
+COMPLEXITY > 10 13 in file wire.c for void function init_wire
+LINES > 80 CHARS 2 in file wire.c for void function init_wire
+
+TEXT COMMENTS < 10% 5% in file wire.c for void function draw_wire
+BLANK LINES < 10% 5% in file wire.c for void function draw_wire
+LINES > 80 CHARS 3 in file wire.c for void function draw_wire
+
+TEXT COMMENTS < 10% 0% in file wire.c for void function release_wire
+LINES > 80 CHARS 1 in file wire.c for void function release_wire
+
+TEXT COMMENTS < 50% 31% in file wire.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file world.c for void function init_world
+BLANK LINES < 10% 6% in file world.c for void function init_world
+COMPLEXITY > 10 13 in file world.c for void function init_world
+LINES > 80 CHARS 1 in file world.c for void function init_world
+
+TEXT COMMENTS < 10% 0% in file world.c for void function draw_world
+BLANK LINES < 10% 6% in file world.c for void function draw_world
+COMPLEXITY > 10 15 in file world.c for void function draw_world
+EXTD COMPLEXITY > 15 19 in file world.c for void function draw_world
+LINES > 80 CHARS 4 in file world.c for void function draw_world
+
+TEXT COMMENTS < 10% 0% in file world.c for void function release_world
+
+TEXT COMMENTS < 50% 8% in file world.c for file level global/file
+LINES > 80 CHARS 30 in file world.c for file level global/file
+
+TEXT COMMENTS < 10% 6% in file worm.c for void function worm_doit
+COMPLEXITY > 10 15 in file worm.c for void function worm_doit
+EXTD COMPLEXITY > 15 16 in file worm.c for void function worm_doit
+EX STATEMENTS > 50 77 in file worm.c for void function worm_doit
+LINES > 80 CHARS 6 in file worm.c for void function worm_doit
+
+TEXT COMMENTS < 10% 0% in file worm.c for void function free_worms
+
+TEXT COMMENTS < 10% 2% in file worm.c for void function init_worm
+COMPLEXITY > 10 21 in file worm.c for void function init_worm
+EXTD COMPLEXITY > 15 23 in file worm.c for void function init_worm
+EX STATEMENTS > 50 54 in file worm.c for void function init_worm
+LINES > 80 CHARS 3 in file worm.c for void function init_worm
+
+TEXT COMMENTS < 10% 0% in file worm.c for void function draw_worm
+LINES > 80 CHARS 1 in file worm.c for void function draw_worm
+
+TEXT COMMENTS < 10% 0% in file worm.c for void function release_worm
+
+TEXT COMMENTS < 50% 23% in file worm.c for file level global/file
+LINES > 80 CHARS 1 in file worm.c for file level global/file
+
+BLANK LINES < 10% 6% in file xbm.c for function XbmReadFileToImage
+COMPLEXITY > 10 22 in file xbm.c for function XbmReadFileToImage
+EXTD COMPLEXITY > 15 34 in file xbm.c for function XbmReadFileToImage
+EX STATEMENTS > 50 64 in file xbm.c for function XbmReadFileToImage
+EXIT ROUTES > 1 8 in file xbm.c for function XbmReadFileToImage
+LINES > 80 CHARS 5 in file xbm.c for function XbmReadFileToImage
+
+TEXT COMMENTS < 50% 46% in file xbm.c for file level global/file
+
+TEXT COMMENTS < 10% 0% in file xlock.c for void function error
+
+TEXT COMMENTS < 10% 0% in file xlock.c for void function warning
+
+TEXT COMMENTS < 10% 0% in file xlock.c for void function XGrabHosts
+
+TEXT COMMENTS < 10% 0% in file xlock.c for void function XUngrabHosts
+
+TEXT COMMENTS < 10% 0% in file xlock.c for void function GrabKeyboardAndMou
+ se
+
+TEXT COMMENTS < 10% 5% in file xlock.c for function window_size_changed
+EXIT ROUTES > 1 3 in file xlock.c for function window_size_changed
+
+TEXT COMMENTS < 10% 3% in file xlock.c for void function finish
+BLANK LINES < 10% 3% in file xlock.c for void function finish
+LINES > 80 CHARS 2 in file xlock.c for void function finish
+
+EXIT ROUTES > 1 2 in file xlock.c for function xio_error
+
+TEXT COMMENTS < 10% 2% in file xlock.c for void function putText
+BLANK LINES < 10% 8% in file xlock.c for void function putText
+
+TEXT COMMENTS < 10% 2% in file xlock.c for void function statusUpdate
+BLANK LINES < 10% 7% in file xlock.c for void function statusUpdate
+COMPLEXITY > 10 35 in file xlock.c for void function statusUpdate
+EXTD COMPLEXITY > 15 37 in file xlock.c for void function statusUpdate
+LINES > 80 CHARS 21 in file xlock.c for void function statusUpdate
+
+TEXT COMMENTS < 10% 0% in file xlock.c for void function checkLogout
+
+TEXT COMMENTS < 10% 6% in file xlock.c for function runMainLoop
+COMPLEXITY > 10 13 in file xlock.c for function runMainLoop
+EXTD COMPLEXITY > 15 20 in file xlock.c for function runMainLoop
+EX STATEMENTS > 50 60 in file xlock.c for function runMainLoop
+EXIT ROUTES > 1 3 in file xlock.c for function runMainLoop
+LINES > 80 CHARS 1 in file xlock.c for function runMainLoop
+
+BLANK LINES < 10% 5% in file xlock.c for function ReadXString
+COMPLEXITY > 10 53 in file xlock.c for function ReadXString
+EXTD COMPLEXITY > 15 56 in file xlock.c for function ReadXString
+EX STATEMENTS > 50 88 in file xlock.c for function ReadXString
+EXIT ROUTES > 1 5 in file xlock.c for function ReadXString
+LINES > 80 CHARS 24 in file xlock.c for function ReadXString
+
+TEXT COMMENTS < 10% 4% in file xlock.c for function getPassword
+COMPLEXITY > 10 26 in file xlock.c for function getPassword
+EXTD COMPLEXITY > 15 28 in file xlock.c for function getPassword
+EX STATEMENTS > 50 79 in file xlock.c for function getPassword
+EXIT ROUTES > 1 2 in file xlock.c for function getPassword
+LINES > 80 CHARS 3 in file xlock.c for function getPassword
+
+TEXT COMMENTS < 10% 0% in file xlock.c for function event_screen
+EXIT ROUTES > 1 2 in file xlock.c for function event_screen
+
+TEXT COMMENTS < 10% 7% in file xlock.c for function justDisplay
+COMPLEXITY > 10 28 in file xlock.c for function justDisplay
+EXTD COMPLEXITY > 15 32 in file xlock.c for function justDisplay
+LINES > 80 CHARS 11 in file xlock.c for function justDisplay
+
+TEXT COMMENTS < 10% 0% in file xlock.c for void function sigcatch
+LINES > 80 CHARS 1 in file xlock.c for void function sigcatch
+
+TEXT COMMENTS < 10% 0% in file xlock.c for void function syslogStop
+
+TEXT COMMENTS < 10% 1% in file xlock.c for void function lockDisplay
+BLANK LINES < 10% 9% in file xlock.c for void function lockDisplay
+COMPLEXITY > 10 12 in file xlock.c for void function lockDisplay
+
+TEXT COMMENTS < 10% 1% in file xlock.c for void function read_message
+BLANK LINES < 10% 6% in file xlock.c for void function read_message
+COMPLEXITY > 10 12 in file xlock.c for void function read_message
+EX STATEMENTS > 50 53 in file xlock.c for void function read_message
+
+TEXT COMMENTS < 10% 7% in file xlock.c for function main
+COMPLEXITY > 10 69 in file xlock.c for function main
+EXTD COMPLEXITY > 15 76 in file xlock.c for function main
+EX STATEMENTS > 50 200 in file xlock.c for function main
+EXIT ROUTES > 1 2 in file xlock.c for function main
+LINES > 80 CHARS 44 in file xlock.c for function main
+
+TEXT COMMENTS < 50% 46% in file xlock.c for file level global/file
+COMPLEXITY > 10 24 in file xlock.c for file level global/file
+EXTD COMPLEXITY > 15 25 in file xlock.c for file level global/file
+LINES > 80 CHARS 2 in file xlock.c for file level global/file
+
+TEXT COMMENTS < 50% 18% in file xlock.h for file level global/file
+COMPLEXITY > 10 57 in file xlock.h for file level global/file
+EXTD COMPLEXITY > 15 60 in file xlock.h for file level global/file
+LINES > 80 CHARS 3 in file xlock.h for file level global/file
+
+TEXT COMMENTS < 10% 3% in file xmlock.c for void function f_PushButtons
+BLANK LINES < 10% 8% in file xmlock.c for void function f_PushButtons
+COMPLEXITY > 10 11 in file xmlock.c for void function f_PushButtons
+
+TEXT COMMENTS < 10% 4% in file xmlock.c for void function Setup_Widget
+BLANK LINES < 10% 8% in file xmlock.c for void function Setup_Widget
+EX STATEMENTS > 50 83 in file xmlock.c for void function Setup_Widget
+LINES > 80 CHARS 5 in file xmlock.c for void function Setup_Widget
+
+TEXT COMMENTS < 10% 7% in file xmlock.c for function main
+BLANK LINES < 10% 3% in file xmlock.c for function main
+EXIT ROUTES > 1 2 in file xmlock.c for function main
+
+TEXT COMMENTS < 50% 10% in file xmlock.c for file level global/file
+
--- /dev/null
+
+
+
+Language assumed to be C
+Complexity threshold = 20
+
+
+
+ Threshold Data Table for Files in: measure.msr
+
+FILE NAME EXT PDIR STMT NCNB BLK TEXT TOTAL BLK CMT
+ SUBPROGRAM CMP CMP STMTS LOC LOC LOC CMTS LINES % %
+
+ant.c
+ init_ant 28 29 0 76 114 8 2 124 6 1
+ draw_ant 42 48 0 73 108 4 5 115 3 4
+ball.c
+ draw_ball 21 25 0 64 98 6 0 104 5 0
+bat.c
+ init_bat 20 24 0 59 83 2 1 86 2 1
+blank.c
+blot.c
+bomb.c
+bouboule.c
+ init_bouboule 38 49 16 99 185 20 15 219 9 7
+ draw_bouboule 35 41 17 122 205 19 24 247 8 10
+bounce.c
+ init_bounce 22 26 0 69 96 3 1 100 3 1
+braid.c
+ init_braid 24 26 0 51 80 11 2 93 12 2
+ draw_braid 33 35 12 74 143 7 2 152 4 1
+bug.c
+ init_bug 26 30 3 79 113 7 10 124 5 8
+cartoon.c
+clock.c
+color.c
+config.h
+daisy.c
+dclock.c
+demon.c
+ draw_demon 44 44 0 75 121 3 10 134 2 7
+drift.c
+ iter 20 27 2 72 110 17 15 140 13 12
+eyes.c
+fadeplot.c
+flag.c
+flag.h
+flame.c
+ recurse 30 39 2 82 127 8 15 136 5 10
+forest.c
+galaxy.c
+gear.c
+geometry.c
+grav.c
+helix.c
+hop.c
+hyper.c
+image.c
+julia.c
+kaleid.c
+laser.c
+ draw_laser_on 21 21 0 65 91 7 0 98 7 0
+life.c
+life1d.c
+ init_life1d 24 27 0 69 106 9 0 115 7 0
+life3d.c
+ SortList 20 25 0 71 96 14 4 114 12 4
+ shooter 24 24 2 93 110 1 1 112 0 0
+lightning.c
+lissie.c
+logout.c
+loop.c
+marquee.c
+ draw_marquee 25 25 0 61 99 2 1 102 1 1
+maze.c
+mode.c
+mode.h
+mountain.c
+nose.c
+ move 22 28 0 37 65 2 2 68 2 2
+option.c
+pacman.c
+ movepac 44 55 31 123 227 12 4 243 5 1
+ init_pacman 27 32 2 79 125 11 1 137 8 0
+ draw_pacman 24 32 0 61 101 14 0 115 12 0
+passwd.c
+ checkPasswd 31 44 26 57 118 17 22 153 12 15
+ set_multiple 47 47 9 120 170 15 19 205 8 10
+penrose.c
+ add_tile 25 30 0 59 96 7 9 112 6 8
+ add_random_ti 23 25 0 58 78 2 3 82 2 3
+petal.c
+puzzle.c
+ init_puzzle 25 28 5 80 133 12 0 145 8 0
+pyro.c
+ burst 21 22 0 72 96 5 2 102 4 2
+qix.c
+random.c
+ strpmtok 20 20 0 34 57 3 0 60 5 0
+ras.c
+ras.h
+resource.c
+ open_display 20 26 10 39 72 13 7 91 15 8
+ getResources 38 38 17 120 193 29 9 233 13 4
+roll.c
+ draw_roll 20 30 0 47 70 2 0 72 2 0
+rotor.c
+shape.c
+slip.c
+sound.c
+sphere.c
+spiral.c
+ draw_spiral 21 29 0 48 73 16 6 95 17 7
+spline.c
+ draw_spline 24 28 3 77 129 13 7 149 9 5
+star.c
+ star_draw 22 28 0 43 80 1 4 86 1 4
+swarm.c
+swirl.c
+ create_colour 26 43 8 47 89 15 18 122 14 16
+ create_knots 33 34 0 49 84 8 12 104 8 12
+tri.c
+triangle.c
+trig.c
+tub.c
+tube.c
+turtle.c
+utils.c
+ getWords 42 45 2 105 170 7 5 181 3 2
+ getImage 28 33 12 48 92 7 1 99 7 1
+version.h
+vroot.h
+wator.c
+ init_wator 21 24 0 72 102 7 5 112 6 4
+ draw_wator 28 36 2 117 152 5 16 161 3 9
+wire.c
+world.c
+worm.c
+ init_worm 21 23 0 54 80 11 2 91 12 2
+xbm.c
+ XbmReadFileTo 22 34 0 64 92 6 12 108 6 11
+xlock.c
+ statusUpdate 35 37 40 19 143 11 4 154 7 2
+ ReadXString 53 56 9 88 163 10 19 187 5 10
+ getPassword 26 28 14 79 127 23 6 154 15 4
+ justDisplay 28 32 10 50 90 11 7 108 10 7
+ main 69 76 31 200 314 42 27 381 11 7
+xlock.h
+xmlock.c
+
+
+
+ [ Those files above without numeric output have no ]
+ [ subroutines with complexities at or above the threshold. ]
+
+
+
+Complexity Profile: 724 Modules
+
+Complexity Range Count
+ 1 ... 5 441
+ 6 ... 10 144
+ 11 ... 15 73
+ 16 ... 20 24
+ 21 ... 25 19
+ 26 ... 30 9
+ 31 ... 35 5
+ 36 ... 40 2
+ 41 ... 45 4
+ 46 ... 50 1
+ 51 ... 100 2
+ 101 ....... 0
--- /dev/null
+Content-type: text/html
+
+<HTML><HEAD><TITLE>Manpage of XLOCK</TITLE>
+</HEAD><BODY>
+<H1>XLOCK</H1>
+Section: User Commands (1)<BR>Updated: 01 Jan 1997<BR><A HREF="#index">Index</A>
+<BR><A HREF="http:/cgi-bin/man2html">Return to Main Contents</A>
+<HR>
+
+<A NAME="lbAB"> </A>
+<H2>NAME</H2>
+
+xlock - Locks the local X display until a password is entered.
+<P>
+<A NAME="ixAAB"></A>
+<A NAME="lbAC"> </A>
+<H2>SYNOPSIS</H2>
+
+<B>xlock</B>
+
+[
+<B>-help</B>
+
+]
+[
+<B>-version</B>
+
+]
+[
+<B>-resources</B>
+
+]
+[
+<B>-display</B><I> displayname</I>
+
+]
+[
+<B>-name</B><I> resourcename</I>
+
+]
+[
+<B>-mode</B><I> modename</I>
+
+]
+[
+<B>-delay</B><I> usecs</I>
+
+]
+[
+<B>-batchcount</B><I> num</I>
+
+]
+[
+<B>-cycles</B><I> num</I>
+
+]
+[
+<B>-saturation</B><I> value</I>
+
+]
+[
+<B>-/+allowaccess</B>
+
+]
+[
+<B>-/+nolock</B>
+
+]
+[
+<B>-/+inwindow</B>
+
+]
+[
+<B>-/+inroot</B>
+
+]
+[
+<B>-/+remote</B>
+
+]
+[
+<B>-/+mono</B>
+
+]
+[
+<B>-/+allowroot</B>
+
+]
+[
+<B>-/+debug</B>
+
+]
+[
+<B>-/+echokeys</B>
+
+]
+[
+<B>-/+enablesaver</B>
+
+]
+[
+<B>-/+grabmouse</B>
+
+]
+[
+<B>-/+install</B>
+
+]
+[
+<B>-/+sound</B>
+
+]
+[
+<B>-/+timeelapsed</B>
+
+]
+[
+<B>-/+usefirst</B>
+
+]
+[
+<B>-/+verbose</B>
+
+]
+[
+<B>-nice</B><I> level</I>
+
+]
+[
+<B>-lockdelay</B><I> seconds</I>
+
+]
+[
+<B>-timeout</B><I> seconds</I>
+
+]
+[
+<B>-font</B><I> fontname</I>
+
+]
+[
+<B>-msgfont</B><I> message-fontname</I>
+
+]
+[
+<B>-bg</B><I> color</I>
+
+]
+[
+<B>-fg</B><I> color</I>
+
+]
+[
+<B>-background</B><I> color</I>
+
+]
+[
+<B>-foreground</B><I> color</I>
+
+]
+[
+<B>-username</B><I> string</I>
+
+]
+[
+<B>-password</B><I> string</I>
+
+]
+[
+<B>-info</B><I> string</I>
+
+]
+[
+<B>-validate</B><I> string</I>
+
+]
+[
+<B>-invalid</B><I> string</I>
+
+]
+[
+<B>-geometry</B><I> geom</I>
+
+]
+[
+<B>-icongeometry</B><I> geom</I>
+
+]
+[
+<B>-/+use3d</B>
+
+]
+[
+<B>-delta3d</B><I> value</I>
+
+]
+[
+<B>-none3d</B><I> color</I>
+
+]
+[
+<B>-right3d</B><I> color</I>
+
+]
+[
+<B>-left3d</B><I> color</I>
+
+]
+[
+<B>-both3d</B><I> color</I>
+
+]
+[
+<B>-program</B><I> programname</I>
+
+]
+[
+<B>-messagesfile</B><I> formatted-filename</I>
+
+]
+[
+<B>-messagefile</B><I> filename</I>
+
+]
+[
+<B>-message</B><I> string</I>
+
+]
+[
+<B>-mfont</B><I> mode-fontname</I>
+
+]
+[
+<B>-imagefile</B><I> filename</I>
+
+]
+[
+<B>-neighbors</B><I> num</I>
+
+]
+[
+<B>-cpasswd</B><I> crypted-password</I>
+
+]
+[
+<B>-forceLogout</B><I> minutes</I>
+
+]
+[
+<B>-logoutButtonLabel</B><I> textstring</I>
+
+]
+[
+<B>-logoutButtonHelp</B><I> textstring</I>
+
+]
+[
+<B>-logoutFailedString</B><I> textstring</I>
+
+]
+[
+<B>-/+dtsaver</B>
+
+]
+[
+<B>-locksound</B><I> string</I>
+
+]
+[
+<B>-infosound</B><I> string</I>
+
+]
+[
+<B>-validsound</B><I> string</I>
+
+]
+[
+<B>-invalidsound</B><I> string</I>
+
+]
+<P>
+<A NAME="lbAD"> </A>
+<H2>DESCRIPTION</H2>
+
+<B>xlock</B>
+
+locks the X server till the user enters their password at the keyboard.
+While
+<B>xlock</B>
+
+is running,
+all new server connections are refused.
+The screen saver is disabled.
+The mouse cursor is turned off.
+The screen is blanked and a changing pattern is put on the screen.
+If a key or a mouse button is pressed then the user is prompted for the
+password of the user who started
+<B>xlock</B>.
+
+<P>
+If the correct password is typed, then the screen is unlocked and the X
+server is restored. When typing the password Control-U and Control-H are
+active as kill and erase respectively. To return to the locked screen,
+click in the small icon version of the changing pattern.
+<P>
+In the lower part of the password screen a message is displayed. This
+message is taken from the first file of the following that exists:
+$HOME/.xlockmessage, $HOME/.plan, or $HOME/.signature.
+<P>
+On systems which support new BSD style authentication, the password
+may be prefixed by an authentication style followed by a colon
+(i.e. "style:password"). See the <A HREF="http:/cgi-bin/man2html?man5/login.conf.5">login.conf</A>(5) for more information
+on authentication styles.
+<P>
+<A NAME="lbAE"> </A>
+<H2>NOTE ON ETIQUETTE</H2>
+
+<I>Xlock</I>
+
+should not be used on public terminals when there is a high demand for them.
+<P>
+If you find a public terminal that has been locked by another user and
+there are no other terminals available, and the terminal appears to have
+been left idle for a while (normally more than 15 minutes), it is fair to
+try to reset the session in some manner.
+<P>
+<A NAME="lbAF"> </A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-help</B>
+
+<DD>
+Print options and a brief description.
+<DT><B>-version</B>
+
+<DD>
+Print version (if >= 4.00).
+<DT><B>-resources</B>
+
+<DD>
+Print default resource file to standard output.
+<DT><B>-display</B><I> displayname</I>
+
+<DD>
+The
+<I>display</I>
+
+option sets the X11 display to lock.
+<B>xlock</B>
+
+locks all available screens on a given server,
+and restricts you to locking only a local server such as
+<B>unix:0,</B>
+
+<B>localhost:0,</B>
+
+or
+<B>:0</B>
+
+unless you set the
+<B>-remote</B>
+
+option.
+<DT><B>-name</B><I> resourcename</I>
+
+<DD>
+<I>resourcename</I>
+
+is used instead of
+<B>XLock</B>
+
+when looking for resources to configure
+<B>xlock</B>.
+
+<DT><B>-mode</B><I> modename</I>
+
+<DD>
+As of this writing there are over 60 display modes supported
+(plus one more for random selection of one of these).
+<DT><B>ant</B>
+
+<DD>
+Shows Langton's and Turk's generalized ants.
+<DT><B>ball</B>
+
+<DD>
+Shows bouncing balls.
+<DT><B>bat</B>
+
+<DD>
+Shows bouncing flying bats.
+<DT><B>blot</B>
+
+<DD>
+Shows Rorschach's ink blot test.
+<DT><B>bouboule</B>
+
+<DD>
+Shows Mimi's bouboule of moving stars.
+<DT><B>bounce</B>
+
+<DD>
+Shows bouncing footballs.
+<DT><B>braid</B>
+
+<DD>
+Shows random braids and knots.
+<DT><B>bug</B>
+
+<DD>
+Shows Palmiter's bug evolution and a garden of Eden.
+<DT><B>cartoon</B>
+
+<DD>
+Shows bouncing cartoons. Not compiled in by default.
+<DT><B>clock</B>
+
+<DD>
+Shows Packard's oclock.
+<DT><B>daisy</B>
+
+<DD>
+Shows a meadow of daisies.
+<DT><B>dclock</B>
+
+<DD>
+Shows a floating digital clock.
+<DT><B>demon</B>
+
+<DD>
+Shows Griffeath's cellular automata.
+<DT><B>drift</B>
+
+<DD>
+Shows cosmic drifting flame fractals.
+<DT><B>eyes</B>
+
+<DD>
+Shows eyes following a bouncing grelb.
+<DT><B>flag</B>
+
+<DD>
+Shows a flying flag of your operating system.
+<DT><B>flame</B>
+
+<DD>
+Shows cosmic flame fractals.
+<DT><B>forest</B>
+
+<DD>
+Shows binary trees of a fractal forest.
+<DT><B>galaxy</B>
+
+<DD>
+Shows crashing spiral galaxies.
+<DT><B>gear</B>
+
+<DD>
+Shows GL's gears. May not be available depending on how it was configured.
+<DT><B>geometry</B>
+
+<DD>
+Shows morphing of a complete graph.
+<DT><B>grav</B>
+
+<DD>
+Shows orbiting planets.
+<DT><B>helix</B>
+
+<DD>
+Shows string art.
+<DT><B>hop</B>
+
+<DD>
+Shows real plane iterated fractals.
+<DT><B>hyper</B>
+
+<DD>
+Shows a spinning tesseract in 4D space.
+<DT><B>image</B>
+
+<DD>
+Shows randomly appearing logos.
+<DT><B>julia</B>
+
+<DD>
+Shows the Julia set.
+<DT><B>kaleid</B>
+
+<DD>
+Shows a kaleidoscope.
+<DT><B>laser</B>
+
+<DD>
+Shows spinning lasers.
+<DT><B>life</B>
+
+<DD>
+Shows Conway's game of life.
+<DT><B>life1d</B>
+
+<DD>
+Shows Wolfram's game of 1D life.
+<DT><B>life3d</B>
+
+<DD>
+Shows Bays' game of 3D life.
+<DT><B>lightning</B>
+
+<DD>
+Shows Keith's fractal lightning bolts.
+<DT><B>lissie</B>
+
+<DD>
+Shows lissajous worms.
+<DT><B>loop</B>
+
+<DD>
+Shows Langton's self-producing loops.
+<DT><B>marquee</B>
+
+<DD>
+Shows messages.
+<DT><B>maze</B>
+
+<DD>
+Shows a random maze and a depth first search solution.
+<DT><B>mountain</B>
+
+<DD>
+Shows Papo's mountain range.
+<DT><B>nose</B>
+
+<DD>
+Shows a man with a big nose runs around spewing out messages.
+<DT><B>pacman</B>
+
+<DD>
+Shows Pacman(tm).
+<DT><B>penrose</B>
+
+<DD>
+Shows Penrose's quasiperiodic tilings.
+<DT><B>petal</B>
+
+<DD>
+Shows various GCD Flowers.
+<DT><B>puzzle</B>
+
+<DD>
+Shows a puzzle being scrambled and then solved.
+<DT><B>pyro</B>
+
+<DD>
+Shows fireworks.
+<DT><B>qix</B>
+
+<DD>
+Shows spinning lines a la Qix(tm).
+<DT><B>roll</B>
+
+<DD>
+Shows a rolling ball.
+<DT><B>rotor</B>
+
+<DD>
+Shows Tom's Roto-Rooter.
+<DT><B>shape </B>
+
+<DD>
+Shows stippled rectangles, ellipses, and triangles.
+<DT><B>slip</B>
+
+<DD>
+Shows slipping blits.
+<DT><B>sphere</B>
+
+<DD>
+Shows a bunch of shaded spheres.
+<DT><B>spiral</B>
+
+<DD>
+Shows helixes of dots.
+<DT><B>spline</B>
+
+<DD>
+Shows colorful moving splines.
+<DT><B>star </B>
+
+<DD>
+Shows a star field with a twist.
+<DT><B>swarm</B>
+
+<DD>
+Shows a swarm of bees following a wasp.
+<DT><B>swirl</B>
+
+<DD>
+Shows animated swirling patterns.
+<DT><B>tri</B>
+
+<DD>
+Shows a Sierpinski's triangle.
+<DT><B>triangle</B>
+
+<DD>
+Shows a triangular mountain range.
+<DT><B>turtle</B>
+
+<DD>
+Shows turtle fractals.
+<DT><B>wator</B>
+
+<DD>
+Shows Dewdney's Water-Torus planet of fish and sharks.
+<DT><B>wire</B>
+
+<DD>
+Shows a random circuit with 2 electrons.
+<DT><B>world</B>
+
+<DD>
+Shows spinning Earths.
+<DT><B>worm</B>
+
+<DD>
+Shows wiggly worms.
+<DT><B>blank</B>
+
+<DD>
+Shows nothing but a black screen. Does not show up in random mode.
+<DT><B>bomb</B>
+
+<DD>
+Shows a bomb and will autologout after a time. Does not show up in random
+mode and may be available depending on how it was configured.
+<DT><B>random</B>
+
+<DD>
+Shows a random mode from above except blank (and bomb).
+<P>
+<DT><B>-delay</B><I> usecs</I>
+
+<DD>
+The
+<I>delay</I>
+
+option sets the speed at which a mode will operate. It simply sets the
+number of microseconds to delay between batches of animations. In
+blank mode, it is important to set this to some small number of seconds,
+because the keyboard and mouse are only checked after each delay, so you
+cannot set the delay too high, but a delay of zero would needlessly
+consume cpu checking for mouse and keyboard input in a tight loop, since
+blank mode has no work to do.
+<DT><B>-batchcount</B><I> num</I>
+
+<DD>
+The
+<I>batchcount</I>
+
+option sets number of
+<I>things</I>
+
+to do per batch to
+<I>num .</I>
+
+<P>
+In ant mode this refers the number of ants.
+<P>
+In ball mode it is the number of balls.
+<P>
+In bat mode it is the number of bats, could be less because of conflicts.
+<P>
+In blot mode this refers to the number of pixels rendered in the same color.
+<P>
+In bouboule mode it is the number of stars.
+<P>
+In bounce mode it is the number of balls, could be less because of conflicts.
+<P>
+In braid mode it is the upper bound number of strands.
+<P>
+In bug mode it is the number of bugs, could be less because of conflicts.
+<P>
+In cartoon mode it means nothing.
+<P>
+In clock mode it is the percentage of the screen, but less than 100%.
+<P>
+In daisy mode it is the number flowers that make a meadow.
+<P>
+In dclock mode it means nothing.
+<P>
+In demon mode this refers the number of colors.
+<P>
+In drift mode it is the number of levels to recurse (larger = more complex).
+<P>
+In eyes mode it is the number of eyes.
+<P>
+In flame mode it is the number of levels to recurse (larger = more complex).
+<P>
+In forest mode it is the number trees that make a forest.
+<P>
+In galaxy mode it means the number of galaxies.
+<P>
+In gear mode it is means nothing.
+<P>
+In geometry mode it is the number of vertices.
+<P>
+In grav mode it is the number of planets.
+<P>
+In helix mode it means nothing.
+<P>
+In hop mode this refers to the number of pixels rendered in the same color.
+<P>
+In hyper mode it means nothing.
+<P>
+In image mode it means it is the number of logos on screen at once.
+<P>
+In julia mode it is the depth of recursion.
+<P>
+In kaleid mode it means nothing.
+<P>
+In laser mode it is the number lasers.
+<P>
+In life mode it is the number of generations before a glider is introduced.
+<P>
+In life1d mode it means nothing.
+<P>
+In life3d mode it is the number of generations before a glider is introduced.
+<P>
+In lissie mode it is the number of worms.
+<P>
+In loop mode it means nothing.
+<P>
+In marquee mode it means nothing.
+<P>
+In maze mode it means nothing.
+<P>
+In mountain mode it is the number of mountains.
+<P>
+In nose mode it means nothing.
+<P>
+In qix mode it is the number of lines rendered in the same color.
+<P>
+In pacman mode it means the number of ghosts.
+<P>
+In penrose mode it means nothing.
+<P>
+In petal mode it the greatest random number of petals.
+<P>
+In puzzle mode it the number of moves.
+<P>
+In pyro mode it is the maximum number flying rockets at one time.
+<P>
+In rotor mode it is the number of points.
+<P>
+In rotor mode it is the number of rotor thingys which whirr...
+<P>
+In shape mode it means nothing.
+<P>
+In slip mode it means nothing.
+<P>
+In sphere mode it means nothing.
+<P>
+In spiral mode it is the number of spirals.
+<P>
+In spline mode it is the number of points "splined".
+<P>
+In star mode it is the number of stars on the screen at once.
+<P>
+In swirl mode it means the number of "knots".
+<P>
+In swarm mode it is the number of bees.
+<P>
+In tri mode it is the number of points.
+<P>
+In triangular mode it is the number of mountains.
+<P>
+In turtle mode it means nothing.
+<P>
+In wator mode it means the breed time for the fish.
+<P>
+In wire mode it means the length of the circuit.
+<P>
+In world mode it is the number of worlds.
+<P>
+In worm mode it is the number of worms.
+<P>
+In blank mode it means nothing.
+<P>
+In bomb mode it means the number of minutes to autologout.
+<P>
+A negative
+<I>batchcount</I>
+
+allows for randomness. The range from the minimum allowed nonnegative
+<I>batchcount</I>
+
+for a particular mode to the
+ABS(
+<I>batchcount</I>
+
+) (or maximum allowed
+<I>batchcount</I>
+
+, whichever is less).
+<DT><B>-cycles</B><I> num</I>
+
+<DD>
+The
+<I>cycles</I>
+
+option sets the number of cycles until time out for ant, blot, braid,
+bug, clock, daisy, demon, eyes, flag, forest, helix, hop, hyper, galaxy,
+kaleid, laser, life, life1d, life3d, lissie, loop, mountain, petal, shape,
+spline, tri, triangle, and wator, wire. For worm it is the length of the
+lines, for julia and spiral it is the length of the trail of dots, for qix
+it is the number of lines, for spline it means the number of splines. For
+others it means nothing.
+<DT><B>-size</B><I> num</I>
+
+<DD>
+The
+<I>size</I>
+
+option sets the size maximum size of a star in bouboule, pyro and star,
+size of ball in ball and bounce, size of bat in bat, size of clock in clock,
+size of lissie in lissie, size of dots of flag, width of maze hallway, size
+of side of penrose tile, radius of ball in roll, width of worm, size of
+cells in ant, bug, life, life1d, pacman, wator, and wire. A negative number
+allows for randomness, similar to
+<I>batchcount.</I>
+
+<DT><B>-saturation</B><I> value</I>
+
+<DD>
+The
+<I>saturation</I>
+
+option sets saturation of the color ramp used to
+<I>value .</I>
+
+0 is grayscale and 1 is very rich color. 0.4 is a nice pastel.
+<DT><B>+/-nolock</B>
+
+<DD>
+The
+<I>nolock</I>
+
+option causes
+<B>xlock</B>
+
+to only draw the patterns and not lock the display.
+A key press or a mouse click will terminate the screen saver.
+<DT><B>-/+inwindow</B>
+
+<DD>
+Runs
+<B>xlock</B>
+
+in a window, so that you can iconify, move, or resize it and
+still use your screen for other stuff. When running in a window,
+<B>xlock</B>
+
+no longer locks your screen, it just looks good.
+<DT><B>-/+inroot</B>
+
+<DD>
+Runs
+<B>xlock</B>
+
+in your root window. Like the
+<I>inwindow</I>
+
+option it no longer locks the screen, it just looks good.
+<DT><B>-/+remote</B>
+
+<DD>
+The
+<I>remote</I>
+
+option tells
+<B>xlock</B>
+
+to not stop you from locking remote X11 servers. This option should be
+used with care and is intended mainly to lock X11 terminals which cannot
+run
+<B>xlock</B>
+
+locally. If you lock someone else's workstation, they will have to know
+<B>your</B>
+
+password to unlock it. Using
+<I>+remote</I>
+
+overrides any resource derived values for
+<I>remote</I>
+
+and prevents
+<B>xlock</B>
+
+from being used to lock other X11 servers. (Use `+' instead of `-' to
+override resources for other options that can take the `+' modifier
+similarly.)
+<DT><B>-/+mono</B>
+
+<DD>
+The
+<I>mono</I>
+
+option causes
+<B>xlock</B>
+
+to display monochrome, (black and white) pixels rather than the default
+colored ones on color displays.
+<DT><B>-/+allowaccess</B>
+
+<DD>
+This option is required for servers which do not allow clients to modify
+the host access control list. It is also useful if you need to run x
+clients on a server which is locked for some reason... When
+<I>allowaccess</I>
+
+is true, the X11 server is left open for clients to attach and thus
+lowers the inherent security of this lock screen. A side effect of using
+this option is that if
+<B>xlock</B>
+
+is killed -KILL, the access control list is not lost.
+<DT><B>-/+allowroot</B>
+
+<DD>
+The
+<I>allowroot</I>
+
+option allows the root password to unlock the server as well as the user
+who started
+<B>xlock</B>.
+
+May not be able to turn this on and off depending on your system and how
+<B>xlock</B>
+
+was configured.
+<DT><B>-/+debug</B>
+
+<DD>
+Allows
+<B>xlock</B>
+
+to be debugged by doing all but locking the screen.
+<DT><B>-/+echokeys</B>
+
+<DD>
+The
+<I>echokeys</I>
+
+option causes
+<B>xlock</B>
+
+to echo '?' characters for each key typed into the password prompt.
+Some consider this a security risk, so the default is to not echo
+anything.
+<DT><B>-/+enablesaver</B>
+
+<DD>
+By default
+<B>xlock</B>
+
+will disable the normal X server's screen saver since
+it is in effect a replacement for it. Since it is possible to set delay
+parameters long enough to cause phosphor burn on some displays, this
+option will turn back on the default screen saver which is very careful
+to keep most of the screen black.
+<DT><B>-/+grabmouse</B>
+
+<DD>
+The
+<I>grabmouse</I>
+
+option causes
+<B>xlock</B>
+
+to grab the mouse and keyboard, this is the default.
+<B>xlock</B>
+
+can not lock the screen without this.
+<DT><B>-/+install</B>
+
+<DD>
+Allows
+<B>xlock</B>
+
+to install its own colormap if
+<B>xlock</B>
+
+runs out of colors.
+May not work on with some window managers (fvwm) and does not work with
+the -inroot option.
+<DT><B>-/+sound</B>
+
+<DD>
+Allows you to turn on and off sound if installed with the capability.
+<DT><B>-/+timeelapsed</B>
+
+<DD>
+Allows you to find out how long a machine is locked so you can complain
+to an administrator that someone is hogging a machine.
+<DT><B>-/+usefirst</B>
+
+<DD>
+The
+<I>usefirst</I>
+
+option causes
+<B>xlock</B>
+
+to use the keystroke which got you to the password screen as the first
+character in the password. The default is to ignore the first key
+pressed.
+<DT><B>-/+verbose</B>
+
+<DD>
+Verbose mode, tells what options it is going to use.
+<DT><B>-nice</B><I> nicelevel</I>
+
+<DD>
+The
+<I>nice</I>
+
+option sets system nicelevel of the
+<B>xlock</B>
+
+process to
+<I>nicelevel .</I>
+
+<DT><B>-lockdelay</B><I> seconds</I>
+
+<DD>
+The
+<I>lockdelay</I>
+
+option sets the number of
+<I>seconds</I>
+
+before the screen needs a password to be unlocked. Good for use with
+an autolocking mechanism like <A HREF="http:/cgi-bin/man2html?man1/xautolock.1">xautolock</A>(1).
+<DT><B>-timeout</B><I> seconds</I>
+
+<DD>
+The
+<I>timeout</I>
+
+option sets the number of
+<I>seconds</I>
+
+before the password screen will time out.
+<DT><B>-font</B><I> fontname</I>
+
+<DD>
+The
+<I>font</I>
+
+option sets the font to be used on the prompt screen.
+<DT><B>-msgfont</B><I> fontname</I>
+
+<DD>
+option sets the font to be used for the message that is displayed in
+the lower part of the password screen.
+<DT><B>-fg</B><I> color</I>
+
+<DD>
+The
+<I>fg</I>
+
+option sets the color of the text on the password screen to
+<I>color .</I>
+
+<DT><B>-bg</B><I> color</I>
+
+<DD>
+The
+<I>bg</I>
+
+option sets the color of the background on the password screen to
+<I>color .</I>
+
+<DT><B>-foreground</B><I> color</I>
+
+<DD>
+The
+<I>foreground</I>
+
+option sets the color of the text on the password screen to
+<I>color .</I>
+
+<DT><B>-background</B><I> color</I>
+
+<DD>
+The
+<I>background</I>
+
+option sets the color of the background on the password screen to
+<I>color .</I>
+
+<DT><B>-username</B><I> string</I>
+
+<DD>
+Text
+<I>string</I>
+
+is shown in front of user name, defaults to "Name: ".
+<DT><B>-password</B><I> string</I>
+
+<DD>
+Text
+<I>string</I>
+
+is the password prompt string, defaults to "Password: ".
+<DT><B>-info</B><I> string</I>
+
+<DD>
+Text
+<I>string</I>
+
+is an informational message to tell the user what to do, defaults to
+"Enter password to unlock; select icon to lock.".
+<DT><B>-validate</B><I> string</I>
+
+<DD>
+Text
+<I>string</I>
+
+is a message shown while validating the password, defaults to
+"Validating login..."
+<DT><B>-invalid</B><I> string</I>
+
+<DD>
+Text
+<I>string</I>
+
+is a message shown when password is invalid, defaults to
+"Invalid login."
+<DT><B>-geometry</B><I> geom</I>
+
+<DD>
+The
+<I>geometry</I>
+
+option sets
+<I>geom</I>
+
+the size and offset of the lock window (normally the entire screen).
+The entire screen format is still used for entering the password. The
+purpose is to see the screen even though it is locked. This should be
+used with caution since many of the modes will fail if the windows
+are far from square or are too small (size must be greater than 0x0).
+This should also be used with -enablesaver to protect screen from
+phosphor burn.
+<DT><B>-icongeometry</B><I> geom</I>
+
+<DD>
+The
+<I>icongeometry</I>
+
+option sets
+<I>geom</I>
+
+the size of the iconic screen (normally 64x64) seen when entering the
+password. This should be used with caution since many of the modes will
+fail if the windows are far from square or are too small (size must be
+greater than 0x0). The greatest size is 256x256. There should be some
+limit so users could see who has locked the screen. Position
+information of icon is ignored.
+<DT><B>-/+use3d</B>
+
+<DD>
+Turn on/off 3d view available on bouboule, pyro, star, and worm.
+<DT><B>-delta3d</B><I> value</I>
+
+<DD>
+Space between the center of your 2 eyes for 3d mode.
+<DT><B>-none3d</B><I> color</I>
+
+<DD>
+Color used for empty size in 3d mode.
+<DT><B>-right3d</B><I> color</I>
+
+<DD>
+Color used for right eye in 3d mode.
+<DT><B>-left3d</B><I> color</I>
+
+<DD>
+Color used for left eye in 3d mode.
+<DT><B>-both3d</B><I> color</I>
+
+<DD>
+Color used for overlapping images for left and right eye in 3d mode.
+<DT><B>-program</B><I> programname</I>
+
+<DD>
+The
+<I>program</I>
+
+option sets the program to be used as the fortune generator. Currently
+used only for marquee and nose modes.
+<DT><B>-messagesfile</B><I> formatted-filename</I>
+
+<DD>
+The
+<I>messagesfile</I>
+
+option sets the file to be used as the fortune generator. The first
+entry is the number of fortunes, the next line contains the first fortune.
+Fortunes begin with a "%%" on a line by itself. Currently used only for
+marquee and nose modes. If one exists, it takes precedence over the
+fortune program.
+<DT><B>-messagefile</B><I> filename</I>
+
+<DD>
+The
+<I>messagefile</I>
+
+option sets the file where the contents are the message. Currently
+used only for marquee and nose modes. If one exists, it takes
+precedence over the fortune program and messagesfile.
+<DT><B>-message</B><I> textstring</I>
+
+<DD>
+The
+<I>message</I>
+
+option sets the message. Currently used only for marquee and nose modes.
+If one exists, it takes precedence over the fortune program,
+messagesfile and messagefile.
+<DT><B>-mfont</B><I> mode-fontname</I>
+
+<DD>
+The
+<I>mfont</I>
+
+option sets the font to be used in the mode. Currently used only for
+marquee and nose modes.
+<DT><B>-imagefile</B><I> filename</I>
+
+<DD>
+The
+<I>imagefile</I>
+
+option sets the ras or xpm file to be displayed with image or puzzle mode.
+Raster files work with -install as well.
+<P>
+</DL>
+<A NAME="lbAG"> </A>
+<H2>MORE OPTIONS (these may not be available)</H2>
+
+<DL COMPACT>
+<DT><B>-cpasswd</B><I> crypted-password</I>
+
+<DD>
+The
+<I>cpasswd</I>
+
+option sets the key to be this text string to unlock
+<B>xlock</B>
+
+instead of password file.
+<DT><B>-forceLogout</B><I> minutes</I>
+
+<DD>
+The
+<I>forceLogout</I>
+
+option sets
+<I>minutes</I>
+
+to auto-logout.
+<DT><B>-logoutButtonLabel</B><I> string</I>
+
+<DD>
+Text
+<I>string</I>
+
+is a message shown inside logout button when logout button is displayed.
+Defaults to
+"Logout".
+<DT><B>-logoutButtonHelp</B><I> string</I>
+
+<DD>
+Text
+<I>string</I>
+
+is a message shown outside logout button when logout button is
+displayed. Defaults to
+"Click the \"Logout\" button to log out current\n
+user and make workstation available."
+<DT><B>-logoutFailedString</B><I> string</I>
+
+<DD>
+Text
+<I>string</I>
+
+is a message shown when a logout is attempted and fails.
+Defaults to
+"Logout attempt FAILED.\n
+Current user could not be automatically logged out."
+<DT><B>-/+dtsaver</B>
+
+<DD>
+Turn on/off CDE Saver Mode.
+<DT><B>-locksound</B><I> string</I>
+
+<DD>
+Text
+<I>string</I>
+
+references sound to use at lock time. Default sound, male voice:
+"Thank you, for your cooperation."
+<DT><B>-infosound</B><I> string</I>
+
+<DD>
+Text
+<I>string</I>
+
+references sound to use for information. Default sound, male voice:
+"Identify please."
+<DT><B>-validsound</B><I> string</I>
+
+<DD>
+Text
+<I>string</I>
+
+references sound to when a password is valid. Default sound, female voice:
+"Complete."
+<DT><B>-invalidsound</B><I> string</I>
+
+<DD>
+Text
+<I>string</I>
+
+references sound to when a password is invalid. Default sound, female
+voice: "I am not programmed to give you that information."
+<P>
+</DL>
+<A NAME="lbAH"> </A>
+<H2>SPECIAL MODE DEPENDENT OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-/+truchet</B>
+
+<DD>
+Turn on and off Truchet lines (trail) in
+<I>ant.</I>
+
+<DT><B>-/+grow</B>
+
+<DD>
+Turn on and off growing fractals (else they are animated) for
+<I>drift.</I>
+
+<DT><B>-/+liss</B>
+
+<DD>
+Turn on and off using lissojous figures to get points for
+<I>drift.</I>
+
+<DT><B>-/+decay</B>
+
+<DD>
+Turn on and off decaying orbits for
+<I>grav.</I>
+
+<DT><B>-/+trail</B>
+
+<DD>
+Turn on and off decaying trail of dots for
+<I>grav.</I>
+
+<DT><B>-rule</B><I> num</I>
+
+<DD>
+Allows one to set
+<I>life</I>
+
+parameters <living_min><living_max><birth_min><birth_max>. For example,
+Conway's rule is 2333. Unfortunately, this requires the rule to be
+contiguous.
+<DT><B>-/+totalistic</B>
+
+<DD>
+Turn on and off totalistic rules for
+<I>life1d.</I>
+
+If this is off then it follows rules of the LCAU collection. These
+rules may not be symmetric and are more general.
+<DT><B>-rule3d</B><I> num</I>
+
+<DD>
+Allows one to set
+<I>life3d</I>
+
+parameters <living_min><living_max><birth_min><birth_max>. For example,
+Bay's 4 rules are 4555, 5766, 5655, and 6767. Unfortunately, this requires
+the rule to be contiguous.
+<DT><B>-/+ammann</B>
+
+<DD>
+Turn on and off lines for
+<I>penrose.</I>
+
+<DT><B>-/+erase</B>
+
+<DD>
+Turn on and off erasing for
+<I>spline.</I>
+
+If this option is on,
+<I>cycles</I>
+
+should probably be set to around 10 or so else
+it should be much larger, around 2000.
+<B>-trek</B><I> num</I>
+
+If its a high number you will see the space ship all the time in
+<I>star.</I>
+
+<DT><B>-/+rock</B>
+
+<DD>
+Turn on and off rocks for
+<I>star.</I>
+
+If this is off, stars will be seen instead.
+<DT><B>-/+straight</B>
+
+<DD>
+Turn on if
+<I>star</I>
+
+gets you motion sick.
+<DT><B>-duration</B><I> seconds</I>
+
+<DD>
+Allows one to set a duration for a mode in
+<I>random.</I>
+
+Duration of 0 is defined as infinite.
+<DT><B>-modelist</B><I> textstring</I>
+
+<DD>
+Allows one to pass a list of files to randomly display to
+<I>random.</I>
+
+"all" will get all files but blank (and bomb if compiled in). "all,blank"
+will get all modes. "all,-image bounce,+blank" will get all modes but
+image and bounce. "bug wator" will get only bug and wator. "random" can
+not be referenced.
+<P>
+</DL>
+<A NAME="lbAI"> </A>
+<H2>**WARNING**</H2>
+
+<B>xlock</B>
+
+can appear to hang if it is competing with a high-priority process for
+the CPU. For example, if
+<B>xlock</B>
+
+is started after a process with 'nice -20'
+(high priority),
+<B>xlock</B>
+
+will take considerable amount of time to respond.
+<P>
+<A NAME="lbAJ"> </A>
+<H2>SHADOW PASSWORDS</H2>
+
+If the machine is using a shadow password system, then
+<B>xlock</B>
+
+may not be set up to get the real password and so must be given one
+of its own. This can be either on the command line, via the
+<B>-cpasswd</B>
+
+option,
+or in the file
+<B>$HOME/.xlockrc</B>,
+
+with the first taking precedence. In both cases an encrypted password
+is expected (see <A HREF="http:/cgi-bin/man2html?man8/makekey.8">makekey</A>(8)). If neither is given, then
+<B>xlock</B>
+
+will prompt for a password and will use that, also storing an
+encrypted version of it in
+<B>$HOME/.xlockrc</B>
+
+for future use.
+<P>
+<A NAME="lbAK"> </A>
+<H2>BUGS</H2>
+
+"kill -KILL
+<B>xlock</B>
+
+" causes the server that was locked to be unusable, since all hosts
+(including localhost) were removed from the access control list
+to lock out new X clients, and since
+<B>xlock</B>
+
+could not catch SIGKILL, it terminated before restoring the access
+control list. This will leave the X server in a state where
+<I>"you can no longer connect to that server,
+and this operation cannot be reversed unless you reset the server."</I>
+<TT> </TT><TT> </TT>-From the X11R4 Xlib Documentation, Chapter 7.<BR>
+<BR>
+
+NCD terminals do not allow xlock to remove all the hosts from the access
+control list. Therefore you will need to use the "-remote" and
+"-allowaccess" switches. If you happen to run without "-allowaccess" on an
+NCD terminal,
+<B>xlock</B>
+
+will not work and you will need to reboot the terminal, or simply go into
+the SETUP menus, under 'Network Parameters', and turn off TCP/IP access
+control.
+<BR>
+
+<A NAME="lbAL"> </A>
+<H2>SEE ALSO</H2>
+
+<A HREF="http:/cgi-bin/man2html?man1/X.1">X</A>(1), Xlib Documentation.
+<P>
+<A NAME="lbAM"> </A>
+<H2>AUTHOR</H2>
+
+Maintained by:
+<BR>
+
+<BR> David A. Bagley (<A HREF="mailto:bagleyd@bigfoot.com">bagleyd@bigfoot.com</A>)
+<BR>
+
+<BR> The latest version is currently at:
+<BR>
+
+<BR> <A HREF="ftp://ftp.x.org">ftp.x.org</A> in /contrib/applications/xlockmore-4.??.tar.gz
+<P>
+Original Author:
+<BR>
+
+<BR> Patrick J. Naughton<TT> </TT> (<A HREF="mailto:naughton@eng.sun.com">naughton@eng.sun.com</A>)<BR>
+<BR>
+
+<BR> Mailstop 21-14
+<BR>
+
+<BR> Sun Microsystems Laboratories, Inc.
+<BR>
+
+<BR> Mountain View, CA 94043
+<BR>
+
+<BR> 415/336-1080
+<P>
+with many additional contributors.
+<P>
+<A NAME="lbAN"> </A>
+<H2>COPYRIGHT</H2>
+
+Copyright (c) 1988-91 by Patrick J. Naughton
+<BR>
+
+Copyright (c) 1993-97 by David A. Bagley
+<P>
+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.
+<BR>
+
+The original BSD daemon is Copyright (c) 1988 Marshall Kirk McKusick.
+All Rights Reserved.
+<BR>
+
+Sun, HP, and SGI icons have their respective copyrights.
+
+<HR>
+<A NAME="index"> </A><H2>Index</H2>
+<DL>
+<DT><A HREF="#lbAB">NAME</A><DD>
+<DT><A HREF="#lbAC">SYNOPSIS</A><DD>
+<DT><A HREF="#lbAD">DESCRIPTION</A><DD>
+<DT><A HREF="#lbAE">NOTE ON ETIQUETTE</A><DD>
+<DT><A HREF="#lbAF">OPTIONS</A><DD>
+<DT><A HREF="#lbAG">MORE OPTIONS (these may not be available)</A><DD>
+<DT><A HREF="#lbAH">SPECIAL MODE DEPENDENT OPTIONS</A><DD>
+<DT><A HREF="#lbAI">**WARNING**</A><DD>
+<DT><A HREF="#lbAJ">SHADOW PASSWORDS</A><DD>
+<DT><A HREF="#lbAK">BUGS</A><DD>
+<DT><A HREF="#lbAL">SEE ALSO</A><DD>
+<DT><A HREF="#lbAM">AUTHOR</A><DD>
+<DT><A HREF="#lbAN">COPYRIGHT</A><DD>
+</DL>
+<HR>
+This document was created by
+<A HREF="http:/cgi-bin/man2html">man2html</A>,
+using the manual pages.<BR>
+Time: 02:20:05 GMT, February 07, 1997
+</BODY>
+</HTML>
--- /dev/null
+/* This is way old. Work is on going to integrate xlock with xscreensaver
+ * see julia.c and slip.c for an example. --David Bagley
+ */
+
+/*
+** Helpful definitions for porting xlock modes to xscreensaver.
+** by Charles Hannum, mycroft@ai.mit.edu
+**
+** for xlock 2.3 and xscreensaver 1.2, 28AUG92
+**
+**
+** Modified for xlockmore 3.0 by Anthony Thyssen <anthony@cit.gu.edu.au>
+** on August 1995. This includes the delay option and a random number
+** generator to use instead of rand() as given in xlockmore 3.0 :-)
+**
+**
+** 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 unsigned int cycles;
+static double saturation;
+
+#ifndef min
+#define min(a,b) ((a)<(b)?(a):(b))
+#endif
+
+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;
+ n = get_integer_resource ("cycles", "Integer");
+ if (n >= 0) cycles = 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)
+
+/*
+** Addition by Anthony Thyssen for xlockmore 3.0
+*/
+/*
+** RANDOM NUMBER GENERATOR
+*/
+#if 1
+/*
+Dr. Park's algorithm published in the Oct. '88 ACM
+"Random Number Generators: Good Ones Are Hard To Find"
+His version available at ftp://cs.wm.edu/pub/rngs.tar
+Present form by many authors.
+*/
+
+static long Seed = 1; /* This is required to be 32 bits long */
+
+/*
+ * Given an integer, this routine initializes the RNG seed.
+ */
+void SetRNG(s)
+long s;
+{
+ Seed = s;
+}
+
+/*
+ * Returns an integer between 0 and 2147483647, inclusive.
+ */
+long LongRNG()
+{
+ if ((Seed = Seed % 44488 * 48271 - Seed / 44488 * 3399) < 0)
+ Seed += 2147483647;
+ return Seed - 1;
+}
+
+#define SRAND(X) SetRNG((long) X)
+#define LRAND() LongRNG()
+
+#define NRAND(X) ((int)(LRAND()%(X)))
+#define MAXRAND (2147483648.0)
+
+#else
+
+/* Using rand() as setup in xscreenhacks.h :-( */
+#define SRAND(X) srand(unsigned) X)
+#define LRAND() rand()
+
+#define NRAND(X) ((int)(LRAND()%(X)))
+#define MAXRAND (32768.0)
+
+#endif
+
+char *defaults[] = {
+ "*background: black",
+ "*foreground: white",
+ "*ncolors: 64",
+ "*delay: -1",
+ "*count: -1",
+ "*cycles: -1",
+ 0
+};
+
+XrmOptionDescRec options[] = {
+ {"-ncolors", ".ncolors", XrmoptionSepArg, 0},
+ {"-delay", ".delay", XrmoptionSepArg, 0},
+ {"-count", ".count", XrmoptionSepArg, 0},
+ {"-cycles", ".cycles", XrmoptionSepArg, 0},
+};
+int options_size = (sizeof (options) / sizeof (options[0]));
+
+#define PROGRAM(Y,Z,D,B,C,S) \
+char *progclass = Y; \
+ \
+void screenhack (dpy, window) \
+ Display *dpy; \
+ Window window; \
+{ \
+ batchcount = B; \
+ delay = D; \
+ cycles = C; \
+ saturation = S; \
+ dsp = dpy; \
+ \
+ SetRNG((int) time ((time_t *) 0)); \
+ init##Z (window); \
+ for (;;) { \
+ draw##Z (window); \
+ XSync (dpy, True); \
+ if (delay) usleep (delay); \
+ } \
+}
+
+=======8<--------CUT HERE----------axes/crowbars permitted---------------
+
+You use this header as .xlock.h include then add something like the
+following to the end of the module itself -- life.c in this case.
+
+=======8<--------CUT HERE----------axes/crowbars permitted---------------
+/*
+ * Anthony's additions for Jamie Zawinski's <jwz@mcom.com> screensaver
+ */
+PROGRAM("XLockLife",life,750000,40,140,1.0)
+
+=======8<--------CUT HERE----------axes/crowbars permitted---------------
+
+Maybe you can add these to your modules anyway and add a empty
+PROGRAM() #define in the normal xlock.h file.
+
+The module is then linked to the other xscreensaver modules
+
+ screenhack.o visual.o resources.o usleep.o hsv.o
+
+Simple enough!
+
+
+ Anthony Thyssen ( System Programmer ) http://www.sct.gu.edu.au/~anthony/
+-------------------------------------------------------------------------------
+ "I wouldn't take a bribe even if you payed me!" - Anthony Thyssen
+-------------------------------------------------------------------------------
+ PGP Public Key available -- finger -l anthony@lyrch.cit.gu.edu.au
+
--- /dev/null
+
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)drift.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * drift.c - drifting recursive fractal cosmic flames 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.
+ *
+ * Revision History:
+ * 10-May-97: Jamie Zawinski <jwz@netscape.com> compatible with xscreensaver
+ * 01-Jan-97: Moved new flame to drift. Compile time options now run time.
+ * 01-Jun-95: Updated by Scott Draves.
+ * 27-Jun-91: vary number of functions used.
+ * 24-Jun-91: fixed portability problem with integer mod (%).
+ * 06-Jun-91: Written, received from Scott Draves <spot@cs.cmu.edu>
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Drift"
+#define HACK_INIT init_drift
+#define HACK_DRAW draw_drift
+#define DEF_DELAY 10000
+#define DEF_BATCHCOUNT 30
+#define DEF_NCOLORS 200
+#define SMOOTH_COLORS
+#include "xlockmore.h"
+#else /* STANDALONE */
+#include "xlock.h"
+
+#endif /* STANDALONE */
+
+#define DEF_GROW "False" /* Grow fractals instead of animating one at a time,
+ would then be like flame */
+#define DEF_LISS "False" /* if this is defined then instead of a point
+ bouncing around in a high dimensional sphere, we
+ use lissojous figures. Only makes sense if
+ grow is false. */
+
+static Bool grow;
+static Bool liss;
+
+#ifndef STANDALONE
+
+static XrmOptionDescRec opts[] =
+{
+ {"-grow", ".drift.grow", XrmoptionNoArg, (caddr_t) "on"},
+ {"+grow", ".drift.grow", XrmoptionNoArg, (caddr_t) "off"},
+ {"-liss", ".drift.trail", XrmoptionNoArg, (caddr_t) "on"},
+ {"+liss", ".drift.trail", XrmoptionNoArg, (caddr_t) "off"}
+};
+static argtype vars[] =
+{
+ {(caddr_t *) & grow, "grow", "Grow", DEF_GROW, t_Bool},
+ {(caddr_t *) & liss, "liss", "Liss", DEF_LISS, t_Bool}
+};
+static OptionStruct desc[] =
+{
+ {"-/+grow", "turn on/off growing fractals, else they are animated"},
+ {"-/+liss", "turn on/off using lissojous figures to get points"}
+};
+
+ModeSpecOpt drift_opts =
+{4, opts, 2, vars, desc};
+
+#endif /* !STANDALONE */
+
+#define MAXBATCH1 200 /* mono */
+#define MAXBATCH2 20 /* color */
+#define FUSE 10 /* discard this many initial iterations */
+#define NMAJORVARS 7
+#define MAXLEV 10
+
+typedef struct {
+ /* shape of current flame */
+ int nxforms;
+ double f[2][3][MAXLEV]; /* a bunch of non-homogeneous xforms */
+ int variation[10]; /* for each xform */
+
+ /* Animation */
+ double df[2][3][MAXLEV];
+
+ /* high-level control */
+ int mode; /* 0->slow/single 1->fast/many */
+ int nfractals; /* draw this many fractals */
+ int major_variation;
+ int fractal_len; /* pts/fractal */
+ int color;
+ int rainbow; /* more than one color per fractal
+ 1-> computed by adding dimension to fractal */
+
+ int width, height; /* of window */
+ int timer;
+
+ /* draw info about current flame */
+ int fuse; /* iterate this many before drawing */
+ int total_points; /* draw this many pts before fractal ends */
+ int npoints; /* how many we've computed but not drawn */
+ XPoint pts[MAXBATCH1]; /* here they are */
+ unsigned long pixcol;
+ /* when drawing in color, we have a buffer per color */
+ int *ncpoints;
+ XPoint *cpts;
+
+ double x, y, c;
+ int liss_time;
+ Bool grow, liss;
+} driftstruct;
+
+static driftstruct *drifts = NULL;
+
+static short
+halfrandom(int mv)
+{
+ static short lasthalf = 0;
+ unsigned long r;
+
+ if (lasthalf) {
+ r = lasthalf;
+ lasthalf = 0;
+ } else {
+ r = LRAND();
+ lasthalf = r >> 16;
+ }
+ r = r % mv;
+ return r;
+}
+
+static int
+frandom(int n)
+{
+ static long saved_random_bits = 0;
+ static int nbits = 0;
+ int result;
+
+ if (3 > nbits) {
+ saved_random_bits = LRAND();
+ nbits = 31;
+ }
+ switch (n) {
+ case 2:
+ result = saved_random_bits & 1;
+ saved_random_bits >>= 1;
+ nbits -= 1;
+ return result;
+
+ case 3:
+ result = saved_random_bits & 3;
+ saved_random_bits >>= 2;
+ nbits -= 2;
+ if (3 == result)
+ return frandom(3);
+ return result;
+
+ case 4:
+ result = saved_random_bits & 3;
+ saved_random_bits >>= 2;
+ nbits -= 2;
+ return result;
+
+ case 5:
+ result = saved_random_bits & 7;
+ saved_random_bits >>= 3;
+ nbits -= 3;
+ if (4 < result)
+ return frandom(5);
+ return result;
+ default:
+ (void) fprintf(stderr, "bad arg to frandom\n");
+ exit(1);
+ }
+ return 0;
+}
+
+#define DISTRIB_A (halfrandom(7000) + 9000)
+#define DISTRIB_B ((frandom(3) + 1) * (frandom(3) + 1) * 120000)
+#define LEN(x) (sizeof(x)/sizeof((x)[0]))
+
+static void
+initmode(ModeInfo * mi, int mode)
+{
+ driftstruct *dp = &drifts[MI_SCREEN(mi)];
+
+#define VARIATION_LEN 14
+
+ dp->mode = mode;
+
+ dp->major_variation = halfrandom(VARIATION_LEN);
+ /* 0, 0, 1, 1, 2, 2, 3, 4, 4, 5, 5, 6, 6, 6 */
+ dp->major_variation = ((dp->major_variation >= VARIATION_LEN >> 1) &&
+ (dp->major_variation < VARIATION_LEN - 1)) ?
+ (dp->major_variation + 1) >> 1 : dp->major_variation >> 1;
+
+ if (dp->grow) {
+ dp->rainbow = 0;
+ if (mode) {
+ if (!dp->color || halfrandom(8)) {
+ dp->nfractals = halfrandom(30) + 5;
+ dp->fractal_len = DISTRIB_A;
+ } else {
+ dp->nfractals = halfrandom(5) + 5;
+ dp->fractal_len = DISTRIB_B;
+ }
+ } else {
+ dp->rainbow = dp->color;
+ dp->nfractals = 1;
+ dp->fractal_len = DISTRIB_B;
+ }
+ } else {
+ dp->nfractals = 1;
+ dp->rainbow = dp->color;
+ dp->fractal_len = 2000000;
+ }
+ dp->fractal_len = (dp->fractal_len * MI_BATCHCOUNT(mi)) / 20;
+
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+}
+
+static void
+pick_df_coefs(ModeInfo * mi)
+{
+ driftstruct *dp = &drifts[MI_SCREEN(mi)];
+ int i, j, k;
+ double r;
+
+ for (i = 0; i < dp->nxforms; i++) {
+
+ r = 1e-6;
+ for (j = 0; j < 2; j++)
+ for (k = 0; k < 3; k++) {
+ dp->df[j][k][i] = ((double) halfrandom(1000) / 500.0 - 1.0);
+ r += dp->df[j][k][i] * dp->df[j][k][i];
+ }
+ r = (3 + halfrandom(5)) * 0.01 / sqrt(r);
+ for (j = 0; j < 2; j++)
+ for (k = 0; k < 3; k++)
+ dp->df[j][k][i] *= r;
+ }
+}
+
+static void
+initfractal(ModeInfo * mi)
+{
+ driftstruct *dp = &drifts[MI_SCREEN(mi)];
+ int i, j, k;
+
+#define XFORM_LEN 9
+
+ dp->fuse = FUSE;
+ dp->total_points = 0;
+
+ if (!dp->ncpoints)
+ dp->ncpoints = (int *) malloc(NUMCOLORS * sizeof(int));
+ if (!dp->cpts)
+ dp->cpts = (XPoint *) malloc(NUMCOLORS * MAXBATCH2 * sizeof(XPoint));
+ if (dp->rainbow)
+ for (i = 0; i < MI_NPIXELS(mi); i++)
+ dp->ncpoints[i] = 0;
+ else
+ dp->npoints = 0;
+ dp->nxforms = halfrandom(XFORM_LEN);
+ /* 2, 2, 2, 3, 3, 3, 4, 4, 5 */
+ dp->nxforms = (dp->nxforms >= XFORM_LEN - 1) + dp->nxforms / 3 + 2;
+
+ dp->c = dp->x = dp->y = 0.0;
+ if (dp->liss && !halfrandom(10)) {
+ dp->liss_time = 0;
+ }
+ if (!dp->grow)
+ pick_df_coefs(mi);
+ for (i = 0; i < dp->nxforms; i++) {
+ if (NMAJORVARS == dp->major_variation)
+ dp->variation[i] = halfrandom(NMAJORVARS);
+ else
+ dp->variation[i] = dp->major_variation;
+ for (j = 0; j < 2; j++)
+ for (k = 0; k < 3; k++) {
+ if (dp->liss)
+ dp->f[j][k][i] = sin(dp->liss_time * dp->df[j][k][i]);
+ else
+ dp->f[j][k][i] = ((double) halfrandom(1000) / 500.0 - 1.0);
+ }
+ }
+ if (dp->color)
+ dp->pixcol = MI_PIXEL(mi, halfrandom(MI_NPIXELS(mi)));
+ else
+ dp->pixcol = MI_WIN_WHITE_PIXEL(mi);
+
+}
+
+
+void
+init_drift(ModeInfo * mi)
+{
+ driftstruct *dp;
+
+ if (drifts == NULL) {
+ if ((drifts = (driftstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (driftstruct))) == NULL)
+ return;
+ }
+ dp = &drifts[MI_SCREEN(mi)];
+
+ dp->width = MI_WIN_WIDTH(mi);
+ dp->height = MI_WIN_HEIGHT(mi);
+ dp->color = MI_NPIXELS(mi) > 2;
+
+ if (MI_WIN_IS_FULLRANDOM(mi)) {
+ if (LRAND() & 1)
+ dp->grow = True;
+ else {
+ dp->grow = False;
+ dp->liss = (Bool) (LRAND() & 1);
+ }
+ } else {
+ dp->grow = grow;
+ if (dp->grow)
+ dp->liss = False;
+ else
+ dp->liss = liss;
+ }
+ initmode(mi, 1);
+ initfractal(mi);
+}
+
+static void
+iter(driftstruct * dp)
+{
+ int i = frandom(dp->nxforms);
+ double nx, ny, nc;
+
+
+ if (i)
+ nc = (dp->c + 1.0) / 2.0;
+ else
+ nc = dp->c / 2.0;
+
+ nx = dp->f[0][0][i] * dp->x + dp->f[0][1][i] * dp->y + dp->f[0][2][i];
+ ny = dp->f[1][0][i] * dp->x + dp->f[1][1][i] * dp->y + dp->f[1][2][i];
+
+
+ switch (dp->variation[i]) {
+ case 1:
+ /* sinusoidal */
+ nx = sin(nx);
+ ny = sin(ny);
+ break;
+ case 2:
+ {
+ /* complex */
+ double r2 = nx * nx + ny * ny + 1e-6;
+
+ nx = nx / r2;
+ ny = ny / r2;
+ break;
+ }
+ case 3:
+ /* bent */
+ if (nx < 0.0)
+ nx = nx * 2.0;
+ if (ny < 0.0)
+ ny = ny / 2.0;
+ break;
+ case 4:
+ {
+ /* swirl */
+
+ double r = (nx * nx + ny * ny); /* times k here is fun */
+ double c1 = sin(r);
+ double c2 = cos(r);
+ double t = nx;
+
+ if (nx > 1e4 || nx < -1e4 || ny > 1e4 || ny < -1e4)
+ ny = 1e4;
+ else
+ ny = c2 * t + c1 * ny;
+ nx = c1 * nx - c2 * ny;
+ break;
+ }
+ case 5:
+ {
+ /* horseshoe */
+ double r, c1, c2, t;
+
+ /* Avoid atan2: DOMAIN error message */
+ if (nx == 0.0 && ny == 0.0)
+ r = 0.0;
+ else
+ r = atan2(nx, ny); /* times k here is fun */
+ c1 = sin(r);
+ c2 = cos(r);
+ t = nx;
+
+ nx = c1 * nx - c2 * ny;
+ ny = c2 * t + c1 * ny;
+ break;
+ }
+ case 6:
+ {
+ /* drape */
+ double t;
+
+ /* Avoid atan2: DOMAIN error message */
+ if (nx == 0.0 && ny == 0.0)
+ t = 0.0;
+ else
+ t = atan2(nx, ny) / M_PI;
+
+ if (nx > 1e4 || nx < -1e4 || ny > 1e4 || ny < -1e4)
+ ny = 1e4;
+ else
+ ny = sqrt(nx * nx + ny * ny) - 1.0;
+ nx = t;
+ break;
+ }
+ }
+
+#if 0
+ /* here are some others */
+ {
+ /* broken */
+ if (nx > 1.0)
+ nx = nx - 1.0;
+ if (nx < -1.0)
+ nx = nx + 1.0;
+ if (ny > 1.0)
+ ny = ny - 1.0;
+ if (ny < -1.0)
+ ny = ny + 1.0;
+ break;
+ }
+ {
+ /* complex sine */
+ double u = nx, v = ny;
+ double ev = exp(v);
+ double emv = exp(-v);
+
+ nx = (ev + emv) * sin(u) / 2.0;
+ ny = (ev - emv) * cos(u) / 2.0;
+ }
+ {
+
+ /* polynomial */
+ if (nx < 0)
+ nx = -nx * nx;
+ else
+ nx = nx * nx;
+
+ if (ny < 0)
+ ny = -ny * ny;
+ else
+ ny = ny * ny;
+ }
+ {
+ /* spherical */
+ double r = 0.5 + sqrt(nx * nx + ny * ny + 1e-6);
+
+ nx = nx / r;
+ ny = ny / r;
+ }
+ {
+ nx = atan(nx) / M_PI_2
+ ny = atan(ny) / M_PI_2
+ }
+#endif
+
+ /* how to check nan too? some machines don't have finite().
+ don't need to check ny, it'll propogate */
+ if (nx > 1e4 || nx < -1e4) {
+ nx = halfrandom(1000) / 500.0 - 1.0;
+ ny = halfrandom(1000) / 500.0 - 1.0;
+ dp->fuse = FUSE;
+ }
+ dp->x = nx;
+ dp->y = ny;
+ dp->c = nc;
+
+}
+
+static void
+draw(ModeInfo * mi, driftstruct * dp, Drawable d)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ double x = dp->x;
+ double y = dp->y;
+ int fixed_x, fixed_y, npix, c, n;
+
+ if (dp->fuse) {
+ dp->fuse--;
+ return;
+ }
+ if (!(x > -1.0 && x < 1.0 && y > -1.0 && y < 1.0))
+ return;
+
+ fixed_x = (int) ((dp->width / 2) * (x + 1.0));
+ fixed_y = (int) ((dp->height / 2) * (y + 1.0));
+
+ if (!dp->rainbow) {
+
+ dp->pts[dp->npoints].x = fixed_x;
+ dp->pts[dp->npoints].y = fixed_y;
+ dp->npoints++;
+ if (dp->npoints == MAXBATCH1) {
+ XSetForeground(display, gc, dp->pixcol);
+ XDrawPoints(display, d, gc, dp->pts, dp->npoints, CoordModeOrigin);
+ dp->npoints = 0;
+ }
+ } else {
+
+ npix = MI_NPIXELS(mi);
+ c = (int) (dp->c * npix);
+
+ if (c < 0)
+ c = 0;
+ if (c >= npix)
+ c = npix - 1;
+ n = dp->ncpoints[c];
+ dp->cpts[c * MAXBATCH2 + n].x = fixed_x;
+ dp->cpts[c * MAXBATCH2 + n].y = fixed_y;
+ if (++dp->ncpoints[c] == MAXBATCH2) {
+ XSetForeground(display, gc, MI_PIXEL(mi, c));
+ XDrawPoints(display, d, gc, &(dp->cpts[c * MAXBATCH2]),
+ dp->ncpoints[c], CoordModeOrigin);
+ dp->ncpoints[c] = 0;
+ }
+ }
+}
+
+static void
+draw_flush(ModeInfo * mi, driftstruct * dp, Drawable d)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+
+ if (dp->rainbow) {
+ int npix = MI_NPIXELS(mi);
+ int i;
+
+ for (i = 0; i < npix; i++) {
+ if (dp->ncpoints[i]) {
+ XSetForeground(display, gc, MI_PIXEL(mi, i));
+ XDrawPoints(display, d, gc, &(dp->cpts[i * MAXBATCH2]),
+ dp->ncpoints[i], CoordModeOrigin);
+ dp->ncpoints[i] = 0;
+ }
+ }
+ } else {
+ if (dp->npoints)
+ XSetForeground(display, gc, dp->pixcol);
+ XDrawPoints(display, d, gc, dp->pts,
+ dp->npoints, CoordModeOrigin);
+ dp->npoints = 0;
+ }
+}
+
+
+void
+draw_drift(ModeInfo * mi)
+{
+ Window window = MI_WINDOW(mi);
+ driftstruct *dp = &drifts[MI_SCREEN(mi)];
+
+ dp->timer = 3000;
+
+ while (dp->timer) {
+ iter(dp);
+ draw(mi, dp, window);
+ if (dp->total_points++ > dp->fractal_len) {
+ draw_flush(mi, dp, window);
+ if (0 == --dp->nfractals)
+ initmode(mi, frandom(2));
+ initfractal(mi);
+ }
+ dp->timer--;
+ }
+ if (!dp->grow) {
+ int i, j, k;
+
+ draw_flush(mi, dp, window);
+ if (dp->liss)
+ dp->liss_time++;
+ for (i = 0; i < dp->nxforms; i++)
+ for (j = 0; j < 2; j++)
+ for (k = 0; k < 3; k++) {
+ if (dp->liss)
+ dp->f[j][k][i] = sin(dp->liss_time * dp->df[j][k][i]);
+ else {
+ double t = dp->f[j][k][i] += dp->df[j][k][i];
+
+ if (t < -1.0 || 1.0 < t)
+ dp->df[j][k][i] *= -1.0;
+ }
+ }
+ }
+}
+
+void
+release_drift(ModeInfo * mi)
+{
+ if (drifts != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ driftstruct *dp = &drifts[screen];
+
+ (void) free((void *) dp->ncpoints);
+ (void) free((void *) dp->cpts);
+ }
+ (void) free((void *) drifts);
+ drifts = NULL;
+ }
+}
+
+void
+refresh_drift(ModeInfo * mi)
+{
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)eyes.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * eyes.c - Follow the bouncing Grelb
+ *
+ * Copyright 1996 by Ron Hitchens <ron@idiom.com>
+ *
+ * Adapted from the ubiquitous xeyes demo supplied by MIT with the
+ * X Window System.
+ * That code is Copyright 1991 Massachusetts Institute of Technology.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and that
+ * both that copyright notice and this permission notice appear in
+ * supporting documentation.
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 18-Mar-96: Changes for new hook calling conventions. Keep per-screen
+ * state information. Remove global accesses.
+ * 21-Feb-96: Recoded to keep an off-screen image for each pair of eyes,
+ * and to only paint the changed parts to the screen.
+ * Allow the Grelb to enter from either side.
+ * 18-Feb-96: Got the code into mostly working condition.
+ * 15-Feb-96: Had a brainwave, started hacking the xeyes code.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Eyes"
+#define HACK_INIT init_eyes
+#define HACK_DRAW draw_eyes
+#define DEF_DELAY 20000
+#define DEF_BATCHCOUNT -8
+#define DEF_CYCLES 5
+#define DEF_NCOLORS 200
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt eyes_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+/* definitions for the xlock version of xeyes */
+#define MAX_EYES 200 /* limit or uses too much memory */
+#define MIN_EYE_SIZE 50 /* smallest size eyes can be */
+#define FLY_ICON_SIZE 5 /* the size of a fly when iconic */
+#define FLY_MAX_SPEED 10 /* max (slowest) delay between steps */
+#define FLY_SIDE_LEFT 0 /* enter and leave by left side */
+#define FLY_SIDE_RIGHT 1 /* enter and leave by right side */
+#define LIFE_MIN 5 /* shortest life, real-time seconds */
+#define LIFE_RANGE 60 /* range of possible lifetimes */
+#define MAX_CYCLES 10 /* max value of cycles */
+#define FRICTION 24 /* affects bounciness */
+
+/* definitions from the original MIT xeyes code */
+#define NUM_EYES 2
+#define EYE_X(n) ((n) * 2.0)
+#define EYE_Y(n) (0.0)
+#define EYE_OFFSET (0.1) /* padding between eyes */
+#define EYE_THICK (0.175) /* thickness of eye rim */
+#define BALL_WIDTH (0.3)
+#define BALL_PAD (0.05)
+#define EYE_WIDTH (2.0 - (EYE_THICK + EYE_OFFSET) * 2)
+#define EYE_HEIGHT EYE_WIDTH
+#define EYE_HWIDTH (EYE_WIDTH / 2.0)
+#define EYE_HHEIGHT (EYE_HEIGHT / 2.0)
+#define BALL_HEIGHT BALL_WIDTH
+#define BALL_DIST ((EYE_WIDTH - BALL_WIDTH) / 2.0 - BALL_PAD)
+#define W_MIN_X (-1.0 + EYE_OFFSET)
+#define W_MAX_X (3.0 - EYE_OFFSET)
+#define W_MIN_Y (-1.0 + EYE_OFFSET)
+#define W_MAX_Y (1.0 - EYE_OFFSET)
+
+/* ---------------------------------------------------------------------- */
+
+/* definitions of matrix math code used by xeyes */
+
+#define TPointEqual(a, b) ((a).x == (b).x && (a).y == (b).y)
+#define XPointEqual(a, b) ((a).x == (b).x && (a).y == (b).y)
+
+typedef struct _transform {
+ double mx, bx;
+ double my, by;
+} Transform;
+
+typedef struct _TPoint {
+ double x, y;
+} TPoint;
+
+#define Xx(x,y,t) ((int)((t)->mx * (x) + (t)->bx + 0.5))
+#define Xy(x,y,t) ((int)((t)->my * (y) + (t)->by + 0.5))
+#define Xwidth(w,h,t) ((int)((t)->mx * (w) + 0.5))
+#define Xheight(w,h,t) ((int)((t)->my * (h) + 0.5))
+#define Tx(x,y,t) ((((double) (x)) - (t)->bx) / (t)->mx)
+#define Ty(x,y,t) ((((double) (y)) - (t)->by) / (t)->my)
+#define Twidth(w,h,t) (((double) (w)) / (t)->mx)
+#define Theight(w,h,t) (((double) (h)) / (t)->my)
+
+/* ---------------------------------------------------------------------- */
+
+/* aliases for vars defined in the bitmap file */
+#define FLY_WIDTH image_width
+#define FLY_HEIGHT image_height
+#define FLY_BITS image_bits
+
+#include "eyes.xbm"
+
+typedef struct { /* info about a "fly" */
+ int x, y;
+ int oldx, oldy;
+ int width, height;
+ int vx, vy;
+ int side;
+ unsigned long pixel;
+ int zero_y;
+} Fly;
+
+typedef struct { /* info about a pair of eyes */
+ int x, y;
+ int width;
+ int height;
+ int xoff, yoff;
+ int rectw, recth;
+ int painted;
+ unsigned long time_to_die;
+ unsigned long eyelid_pixel, eyeball_pixel, pupil_pixel;
+ Pixmap pixmap;
+ XRectangle bbox;
+ Transform transform;
+ TPoint pupil[2];
+ TPoint last_pupil[2];
+} Eyes;
+
+typedef struct { /* per-screen info */
+ Pixmap flypix;
+ GC eyeGC;
+ GC flyGC;
+ int num_eyes;
+ Eyes *eyes;
+ Fly fly;
+} EyeScrInfo;
+
+/* ---------------------------------------------------------------------- */
+
+static EyeScrInfo *eye_info = NULL;
+
+static int stuff_alloced = False; /* is stuff here alloced */
+
+/* ---------------------------------------------------------------------- */
+
+/*-
+ * Fill an arc, using a tranformation matrix. Lifted from xeyes.
+ * The code to return the bounding box is a local addition.
+ */
+
+static void
+TFillArc(register Display * dpy, Drawable d, GC gc, Transform * t, double x, double y, double width, double height, int angle1, int angle2, XRectangle * rect)
+{
+ int xx, xy, xw, xh;
+
+ xx = Xx(x, y, t);
+ xy = Xy(x, y, t);
+ xw = Xwidth(width, height, t);
+ xh = Xheight(width, height, t);
+ if (xw < 0) {
+ xx += xw;
+ xw = -xw;
+ }
+ if (xh < 0) {
+ xy += xh;
+ xh = -xh;
+ }
+ XFillArc(dpy, d, gc, xx, xy, xw, xh, angle1, angle2);
+
+ if (rect != NULL) {
+ rect->x = xx;
+ rect->y = xy;
+ rect->width = xw;
+ rect->height = xh;
+ }
+}
+
+
+/*-
+ * Set a tranform matrix from the given arguments. Lifted from xeyes.
+ */
+
+static void
+SetTransform(Transform * t, int xx1, int xx2, int xy1, int xy2, double tx1, double tx2, double ty1, double ty2)
+{
+ t->mx = ((double) xx2 - xx1) / (tx2 - tx1);
+ t->bx = ((double) xx1) - t->mx * tx1;
+ t->my = ((double) xy2 - xy1) / (ty2 - ty1);
+ t->by = ((double) xy1) - t->my * ty1;
+}
+
+/* ---------------------------------------------------------------------- */
+
+/*-
+ * Given two rectangles, return the rectangle which encloses both.
+ * Used to clculate "damage" when the pupil moves, to minimize the
+ * number of pixels which must be copied out to the screen.
+ */
+
+static void
+join_rects(XRectangle * r1, XRectangle * r2, XRectangle * ret)
+{
+ XRectangle tmp;
+ int n1, n2;
+
+ /* find min x and min y */
+ tmp.x = (r1->x <= r2->x) ? r1->x : r2->x;
+ tmp.y = (r1->y <= r2->y) ? r1->y : r2->y;
+ /* find max x, plus one (just past the right side) */
+ n1 = r1->x + r1->width;
+ n2 = r2->x + r2->width;
+ /* compute width, relative to min x (left side) */
+ tmp.width = ((n1 > n2) ? n1 : n2) - tmp.x;
+ /* same for y */
+ n1 = r1->y + r1->height;
+ n2 = r2->y + r2->height;
+ tmp.height = ((n1 > n2) ? n1 : n2) - tmp.y;
+ *ret = tmp; /* copy out result rectangle */
+}
+
+/* ---------------------------------------------------------------------- */
+
+/*-
+ * Do the math to figure out where the pupil should be drawn.
+ * This code lifted intact from the xeyes widget.
+ */
+
+#if defined( SVR4 ) || defined( SYSV ) && defined( SYSV386 )
+extern double hypot(double, double);
+
+#endif
+
+static TPoint
+computePupil(int num, TPoint mouse)
+{
+ double cx, cy;
+ double dist;
+ double angle;
+ double x, y;
+ double h;
+ double dx, dy;
+ double cosa, sina;
+ TPoint ret;
+
+ dx = mouse.x - EYE_X(num);
+ dy = mouse.y - EYE_Y(num);
+ if (dx == 0 && dy == 0) {
+ cx = EYE_X(num);
+ cy = EYE_Y(num);
+ } else {
+ /* Avoid atan2: DOMAIN error message */
+ if (dx == 0.0 && dy == 0.0)
+ angle = 0.0;
+ else
+ angle = atan2((double) dy, (double) dx);
+ cosa = cos(angle);
+ sina = sin(angle);
+ h = hypot(EYE_HHEIGHT * cosa, EYE_HWIDTH * sina);
+ x = (EYE_HWIDTH * EYE_HHEIGHT) * cosa / h;
+ y = (EYE_HWIDTH * EYE_HHEIGHT) * sina / h;
+ dist = BALL_DIST * hypot(x, y);
+ if (dist > hypot((double) dx, (double) dy)) {
+ cx = dx + EYE_X(num);
+ cy = dy + EYE_Y(num);
+ } else {
+ cx = dist * cosa + EYE_X(num);
+ cy = dist * sina + EYE_Y(num);
+ }
+ }
+ ret.x = cx;
+ ret.y = cy;
+ return ret;
+}
+
+/* ---------------------------------------------------------------------- */
+
+/*-
+ * Create the eye image, using the data in the structure pointed
+ * to by "e", in the Drawable "d". The "full" flag indicates
+ * whether to create the full eye image, or to just paint the
+ * pupil in a new position.
+ */
+
+static void
+make_eye(ModeInfo * mi, Drawable d, Eyes * e, int n, int full)
+{
+ EyeScrInfo *ep = &eye_info[MI_SCREEN(mi)];
+ Display *display = MI_DISPLAY(mi);
+ GC gc = ep->eyeGC;
+ XRectangle *bbox = &e->bbox;
+ XRectangle tmp1, tmp2;
+
+ if (full) {
+ /* draw the outer (eyelid) oval */
+ XSetForeground(display, gc, e->eyelid_pixel);
+ TFillArc(display, d, gc, &e->transform,
+ EYE_X(n) - EYE_HWIDTH - EYE_THICK,
+ EYE_Y(n) - EYE_HHEIGHT - EYE_THICK,
+ EYE_WIDTH + EYE_THICK * 2.0,
+ EYE_HEIGHT + EYE_THICK * 2.0,
+ 90 * 64, 360 * 64, &tmp1);
+
+ /* draw the inner (eyeball) oval */
+ XSetForeground(display, gc, e->eyeball_pixel);
+ TFillArc(display, d, gc, &e->transform,
+ EYE_X(n) - EYE_HWIDTH, EYE_Y(n) - EYE_HHEIGHT,
+ EYE_WIDTH, EYE_HEIGHT, 90 * 64, 360 * 64, &tmp2);
+
+ join_rects(&tmp1, &tmp2, &tmp1);
+
+ /* draw the pupil on top of the eyeball oval */
+ XSetForeground(display, gc, e->pupil_pixel);
+ TFillArc(display, d, gc, &e->transform,
+ e->pupil[n].x - BALL_WIDTH / 2.0,
+ e->pupil[n].y - BALL_HEIGHT / 2.0,
+ BALL_WIDTH, BALL_HEIGHT, 90 * 64, 360 * 64, &tmp2);
+
+ join_rects(&tmp1, &tmp2, bbox);
+ } else {
+ /* undraw the pupil */
+ XSetForeground(display, gc, e->eyeball_pixel);
+ TFillArc(display, d, gc, &e->transform,
+ e->last_pupil[n].x - BALL_WIDTH / 2.0,
+ e->last_pupil[n].y - BALL_HEIGHT / 2.0,
+ BALL_WIDTH, BALL_HEIGHT, 90 * 64, 360 * 64, &tmp1);
+
+ /* draw the pupil on top of the eyeball oval */
+ XSetForeground(display, gc, e->pupil_pixel);
+ TFillArc(display, d, gc, &e->transform,
+ e->pupil[n].x - BALL_WIDTH / 2.0,
+ e->pupil[n].y - BALL_HEIGHT / 2.0,
+ BALL_WIDTH, BALL_HEIGHT, 90 * 64, 360 * 64, &tmp2);
+
+ join_rects(&tmp1, &tmp2, bbox);
+ }
+}
+
+/* ---------------------------------------------------------------------- */
+
+/*-
+ * Check to see if the flyer touches this pair of eyes.
+ */
+
+static Bool
+fly_touches(Fly * f, Eyes * e, int old)
+{
+ int x = (old) ? f->oldx : f->x;
+ int y = (old) ? f->oldy : f->y;
+
+ if ((x + f->width) <= e->x)
+ return (False);
+ if (x >= (e->x + e->width))
+ return (False);
+ if ((y + f->height) <= e->y)
+ return (False);
+ if (y >= (e->y + e->height))
+ return (False);
+ return (True);
+}
+
+static Bool
+fly_touches_eye(Fly * f, Eyes * e)
+{
+ if (fly_touches(f, e, True) || fly_touches(f, e, False)) {
+ return (True);
+ }
+ return (False);
+}
+
+/*-
+ * Check to see if two pairs of eyes overlap.
+ */
+
+static Bool
+eyes_overlap(Eyes * e1, Eyes * e2)
+{
+ if ((e1->x + e1->width) < e2->x)
+ return (False);
+ if (e1->x >= (e2->x + e2->width))
+ return (False);
+ if ((e1->y + e1->height) < e2->y)
+ return (False);
+ if (e1->y >= (e2->y + e2->height))
+ return (False);
+ return (True);
+}
+
+/* ---------------------------------------------------------------------- */
+
+/*-
+ * Initialize the flyer. Called when the window changes, and
+ * whenever she bounces off the screen.
+ * In the first version, the eyes followed a "fly", which was
+ * just a flickering spot that moved at random. That didn't
+ * work so well. It was replaced with a bouncing gelb, but the
+ * name "fly" has yet to be purged.
+ */
+
+static void
+init_fly(ModeInfo * mi, Fly * f)
+{
+ int win_width = MI_WIN_WIDTH(mi);
+ int win_height = MI_WIN_HEIGHT(mi);
+
+ (void) memset((char *) f, 0, sizeof (Fly)); /* clear everything to zero */
+
+ f->side = FLY_SIDE_LEFT;
+
+ if (MI_WIN_IS_ICONIC(mi)) {
+ /* image is just a dot when iconic */
+ f->width = f->height = FLY_ICON_SIZE;
+ f->vx = NRAND(4) + 1; /* slower when iconic */
+ } else {
+ f->width = FLY_WIDTH;
+ f->height = FLY_HEIGHT;
+ f->vx = NRAND(15) + 1; /* random horiz velocity */
+ }
+
+ f->y = NRAND(win_height);
+ if (f->y > (win_height / 2)) {
+ f->side = FLY_SIDE_RIGHT; /* change to right side */
+ f->y -= win_height / 2; /* start in top half */
+ f->x = win_width - f->width; /* move to right of screen */
+ f->vx = -(f->vx); /* flip direction */
+ }
+ f->oldx = -(f->width); /* prevent undraw 1st time */
+
+ if (MI_NPIXELS(mi) <= 2) {
+ f->pixel = MI_WIN_WHITE_PIXEL(mi); /* always white when mono */
+ } else {
+ f->pixel = MI_PIXEL(mi, NRAND(MI_NPIXELS(mi)));
+ }
+}
+
+/*-
+ * Unpaint the flyer by painting the image in black.
+ */
+
+static void
+unpaint_fly(ModeInfo * mi, Fly * f)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+
+ if (MI_WIN_IS_ICONIC(mi)) {
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XFillArc(display, window, gc, f->oldx, f->oldy,
+ f->width, f->height, 90 * 64, 360 * 64);
+ } else {
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+#ifdef FLASH
+ XFillRectangle(display, window, gc,
+ f->oldx, f->oldy, f->width, f->height);
+#else
+ ERASE_IMAGE(display, window, gc, f->x, f->y,
+ f->oldx, f->oldy, f->width, f->height);
+#endif
+ }
+}
+
+/*-
+ * Paint the bouncing grelb on the screen. If not in iconic
+ * mode, unpaint the previous image. When iconic, the fly
+ * doesn't need to be undrawn, because it will always be on top
+ * of the eyes, which are repainted before the fly is painted.
+ */
+
+static void
+paint_fly(ModeInfo * mi, Fly * f)
+{
+ EyeScrInfo *ep = &eye_info[MI_SCREEN(mi)];
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ int x = f->x, y = f->y;
+
+ if (MI_WIN_IS_ICONIC(mi)) {
+ /* don't need to unpaint when iconic
+ * ep->flyGC has stipple set, don't use when iconic
+ */
+ XSetForeground(display, MI_GC(mi), f->pixel);
+ XFillArc(display, window, MI_GC(mi), x, y,
+ f->width, f->height, 90 * 64, 360 * 64);
+ } else {
+ unpaint_fly(mi, f);
+ XSetForeground(display, ep->flyGC, f->pixel);
+ XSetTSOrigin(display, ep->flyGC, x, y);
+#ifdef FLASH
+ XSetFillStyle(display, ep->flyGC, FillStippled);
+#else
+ XSetFillStyle(display, ep->flyGC, FillOpaqueStippled);
+#endif
+ XFillRectangle(display, window, ep->flyGC,
+ x, y, f->width, f->height);
+ XFlush(display);
+ }
+}
+
+/*-
+ * Compute the new position of the fly. The bouncy-boinginess
+ * algorithm is borrowed from the "bounce" (soccer ball) mode.
+ */
+
+static void
+move_fly(ModeInfo * mi, Fly * f)
+{
+ int win_width = MI_WIN_WIDTH(mi);
+ int win_height = MI_WIN_HEIGHT(mi);
+ int left = (f->side == FLY_SIDE_LEFT) ? -(f->width) : 0;
+ int right = (f->side == FLY_SIDE_RIGHT) ? win_width :
+ win_width - f->width;
+
+ f->oldx = f->x; /* remember position before moving, */
+ f->oldy = f->y; /* for unpainting previous image */
+
+ f->x += f->vx; /* apply x velocity */
+
+ if (f->x > right) {
+ if (f->side == FLY_SIDE_RIGHT) {
+ unpaint_fly(mi, f); /* went off the edge, reset */
+ init_fly(mi, f);
+ } else {
+ /* Bounce off the right edge */
+ f->x = 2 * (win_width - f->width) - f->x;
+ f->vx = -f->vx + f->vx / FRICTION;
+ }
+ } else if (f->x < left) {
+ if (f->side == FLY_SIDE_LEFT) {
+ unpaint_fly(mi, f); /* went off the edge, reset */
+ init_fly(mi, f);
+ } else {
+ /* Bounce off the left edge */
+ f->x = -f->x;
+ f->vx = -f->vx + f->vx / FRICTION;
+ }
+ }
+ f->vy++; /* gravity, accelerate in y direction */
+ f->y += f->vy; /* apply y velocity */
+
+ if (f->y >= (win_height - f->height)) {
+ /* Bounce off the bottom edge */
+ f->y = (win_height - f->height);
+ f->vy = -f->vy + f->vy / FRICTION;
+ /* every once in a while, go apeshit to clean "high lurkers" */
+ if (NRAND(50) == 0) {
+ f->vy *= 4;
+ }
+ } else if (f->y < 0) {
+ /* Bounce off the top edge */
+ f->y = -f->y;
+ f->vy = -f->vy + f->vy / FRICTION;
+ }
+ /* if he settles to the bottom, move him off quick */
+ if (abs(f->vy) < 2) {
+ if ((f->zero_y++) > 10) {
+ f->vx += (f->side == FLY_SIDE_LEFT) ? -1 : 1;
+ }
+ } else {
+ f->zero_y = 0; /* still bouncing */
+ }
+}
+
+/* ---------------------------------------------------------------------- */
+
+/*-
+ * Initialize one pair of eyes
+ */
+
+static void
+create_eyes(ModeInfo * mi, Eyes * e, Eyes * eyes, int num_eyes)
+{
+ EyeScrInfo *ep = &eye_info[MI_SCREEN(mi)];
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ int win_width = MI_WIN_WIDTH(mi);
+ int win_height = MI_WIN_HEIGHT(mi);
+ int win_depth = MI_WIN_DEPTH(mi);
+ unsigned long black_pixel = MI_WIN_BLACK_PIXEL(mi);
+ unsigned long white_pixel = MI_WIN_WHITE_PIXEL(mi);
+ Bool iconic = MI_WIN_IS_ICONIC(mi);
+ Pixmap pix = e->pixmap; /* preserve pixmap handle */
+ int w = e->width; /* remember last w/h */
+ int h = e->height;
+ int npixels = MI_NPIXELS(mi); /* num colors in colormap */
+ int cycs = MI_CYCLES(mi); /* affects eye lifetime */
+ int maxw = win_width / 2; /* widest eyes can be */
+ int color, lid_color;
+ int i;
+
+ (void) memset((char *) e, 0, sizeof (Eyes)); /* wipe everything */
+ e->pixmap = pix; /* remember Pixmap handle */
+
+ /* sanity check the cycles value */
+ if (cycs < 1)
+ cycs = 1;
+ if (cycs > MAX_CYCLES)
+ cycs = MAX_CYCLES;
+ e->time_to_die = (unsigned long) LIFE_MIN + NRAND(LIFE_RANGE);
+ e->time_to_die *= (unsigned long) cycs; /* multiply life by cycles */
+ e->time_to_die += seconds(); /* add the time now */
+
+ e->pupil_pixel = black_pixel; /* pupil is always black */
+
+ if (MI_NPIXELS(mi) <= 2) {
+ /* TODO: stipple the eyelid? */
+ e->eyelid_pixel = black_pixel;
+ e->eyeball_pixel = white_pixel;
+ } else {
+ lid_color = color = NRAND(npixels);
+ e->eyelid_pixel = MI_PIXEL(mi, lid_color);
+
+ while ((color = NRAND(npixels + 5)) == lid_color) {
+ /* empty */
+ }
+ if (color >= npixels) {
+ /* give white a little better chance */
+ e->eyeball_pixel = white_pixel;
+ } else {
+ e->eyeball_pixel = MI_PIXEL(mi, color);
+ }
+ }
+
+ if (iconic) {
+ /* only one pair of eyes, fills entire window */
+ e->width = win_width;
+ e->height = win_height;
+ } else {
+ if (maxw - MIN_EYE_SIZE > MIN_EYE_SIZE)
+ e->width = NRAND(maxw - MIN_EYE_SIZE) + MIN_EYE_SIZE;
+ else
+ e->width = NRAND(MIN_EYE_SIZE) + MIN_EYE_SIZE;
+ e->x = (win_width - e->width > 0) ? NRAND(win_width - e->width) : 0;
+ e->height = NRAND(e->width * 3 / 4) + (e->width / 4);
+ e->y = (win_height - e->height > 0) ? NRAND(win_height - e->height) : 0;
+
+ /* check for overlap with other eyes */
+ for (i = 0; i < num_eyes; i++) {
+ if (&eyes[i] == e) { /* that's me */
+ continue;
+ }
+ if (eyes_overlap(e, &eyes[i])) {
+ /* collision, force retry on next cycle */
+ e->time_to_die = 0;
+ break;
+ }
+ }
+ }
+
+ /* If the Pixmap is smaller than the new size, make it bigger */
+ if ((e->width > w) || (e->height > h)) {
+ if (e->pixmap != None) {
+ XFreePixmap(display, e->pixmap);
+ }
+ e->pixmap = XCreatePixmap(display, window,
+ e->width, e->height, win_depth);
+ if (e->pixmap == None) {
+ e->width = e->height = 0;
+ return;
+ }
+ }
+ /* Set the transformation matrix for this set of eyes
+ * If iconic, make the eyes image one pixel shorter and
+ * skinnier, they seem to fit in the icon box better that way.
+ */
+ SetTransform(&e->transform, 0, (iconic) ? e->width - 1 : e->width,
+ (iconic) ? e->height - 1 : e->height, 0,
+ W_MIN_X, W_MAX_X, W_MIN_Y, W_MAX_Y);
+
+ /* clear the offscreen pixmap to background color */
+ XSetForeground(display, ep->eyeGC, black_pixel);
+ XFillRectangle(display, e->pixmap, ep->eyeGC, 0, 0, e->width, e->height);
+
+ /* make the full eye images in the offscreen Pixmap */
+ make_eye(mi, e->pixmap, e, 0, True);
+ make_eye(mi, e->pixmap, e, 1, True);
+}
+
+
+/*-
+ * Paint an eye pair onto the screen.
+ * This is normally only the change rectangles for each pupil,
+ * unless in iconic mode, which always repaints the full image.
+ */
+
+static void
+paint_eyes(ModeInfo * mi, Eyes * e, Fly * f, Eyes * eyes, int num_eyes)
+{
+ EyeScrInfo *ep = &eye_info[MI_SCREEN(mi)];
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = ep->eyeGC;
+ Bool iconic = MI_WIN_IS_ICONIC(mi);
+ unsigned long now = seconds();
+ int focusx = (f->x + (f->width / 2)) - e->x;
+ int focusy = (f->y + (f->height / 2)) - e->y;
+ Pixmap pix = e->pixmap;
+ TPoint point;
+ int i;
+
+ if (pix == None) {
+ e->time_to_die = 0; /* "should not happen" */
+ }
+ if (now >= e->time_to_die) {
+ /* Sorry Bud, your time is up */
+ if (e->painted) {
+ /* only unpaint it if previously painted */
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XClearArea(display, window, e->x, e->y,
+ e->width, e->height, False);
+ }
+ /* randomly place the eyes elsewhere */
+ create_eyes(mi, e, eyes, num_eyes);
+ pix = e->pixmap; /* pixmap may have changed */
+ }
+ /* If the bouncer would intersect this pair of eyes, force the
+ * eyes to move. This simplifies the code, because we do not
+ * have to deal with drawing the bouncer on top of the eyes.
+ * When trying to do so, there was too much annoying flashing
+ * and ghost images from the undraw. I decided to observe the
+ * KISS principle and keep it simple. I think the effect is
+ * better also.
+ * We must draw the flyer on the eyes when iconic, but that is
+ * easy because the eyes repaint the whole box each time.
+ */
+ if ((!iconic) && (fly_touches_eye(f, e))) {
+ e->time_to_die = 0;
+ }
+ if (e->time_to_die == 0) {
+ return; /* collides with something */
+ }
+ /* set the point to look at and compute the pupil position */
+ point.x = Tx(focusx, focusy, &e->transform);
+ point.y = Ty(focusx, focusy, &e->transform);
+ e->pupil[0] = computePupil(0, point);
+ e->pupil[1] = computePupil(1, point);
+
+ if (e->painted) {
+ /* if still looking at the same point, do nothing further */
+ if (TPointEqual(e->pupil[0], e->last_pupil[0]) &&
+ TPointEqual(e->pupil[1], e->last_pupil[1])) {
+ return;
+ }
+ }
+ for (i = 0; i < 2; i++) {
+ /* update the eye, calculates the changed rectangle */
+ make_eye(mi, pix, e, i, False);
+
+ /* Only blit the change if the full image has been painted */
+ if (e->painted) {
+ /* copy the changed rectangle out to the screen */
+ XCopyArea(display, pix, window, gc,
+ e->bbox.x, e->bbox.y,
+ (int) e->bbox.width, (int) e->bbox.height,
+ e->x + e->bbox.x, e->y + e->bbox.y);
+ }
+ /* remember where we're looking, for the next time around */
+ e->last_pupil[i] = e->pupil[i];
+ }
+
+ /* always do full paint when iconic, eliminates need to track fly */
+ if (iconic || (!e->painted)) {
+ XCopyArea(display, pix, window, gc, 0, 0,
+ e->width, e->height, e->x, e->y);
+ }
+ /* when iconic, pretend to never paint, causes full paint each time */
+ if (!iconic) {
+ e->painted++; /* note that a paint has been done */
+ }
+}
+
+/* ---------------------------------------------------------------------- */
+
+/*-
+ * Initialization that only needs to be done once. If the
+ * release hook is called, this stuff may be freed and this
+ * function will have to allocate it again next time the
+ * init hook is called.
+ */
+
+static void
+one_time_init(ModeInfo * mi)
+{
+ if (stuff_alloced) {
+ return; /* only once, dude */
+ }
+ if (eye_info == NULL) {
+ if ((eye_info = (EyeScrInfo *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (EyeScrInfo))) == NULL)
+ return;
+ }
+ stuff_alloced = True;
+}
+
+static void
+free_eyes(Display * display, EyeScrInfo * ep)
+{
+ int en;
+
+ if (ep->eyes) {
+ for (en = 0; en < ep->num_eyes; en++)
+ if (ep->eyes[en].pixmap != None)
+ XFreePixmap(display, ep->eyes[en].pixmap);
+ (void) free((void *) ep->eyes);
+ ep->eyes = NULL;
+ }
+}
+
+/*-
+ * Initialize them eyes. Called each time the window changes.
+ */
+
+void
+init_eyes(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ EyeScrInfo *ep;
+ int i;
+
+ one_time_init(mi);
+
+ if (!stuff_alloced) {
+ /* if an alloc failed in one_time_init(), quit */
+ return;
+ }
+ ep = &eye_info[MI_SCREEN(mi)];
+
+ if (ep->flypix == None) {
+ ep->flypix = XCreateBitmapFromData(display, window,
+ (char *) FLY_BITS, FLY_WIDTH, FLY_HEIGHT);
+ if (ep->flypix == None) {
+ return;
+ }
+ }
+ if (ep->flyGC == None) {
+ XGCValues gcv;
+
+ gcv.foreground = MI_WIN_BLACK_PIXEL(mi);
+ gcv.background = MI_WIN_BLACK_PIXEL(mi);
+ if ((ep->flyGC = XCreateGC(display, window,
+ GCForeground | GCBackground, &gcv)) == None)
+ return;
+ XSetStipple(display, ep->flyGC, ep->flypix);
+ XSetFillStyle(display, ep->flyGC, FillStippled);
+ }
+ if (ep->eyeGC == None) {
+ if ((ep->eyeGC = XCreateGC(display, window,
+ (unsigned long) 0, (XGCValues *) NULL)) == None) {
+ return;
+ }
+ }
+ /* don't want any exposure events from XCopyArea */
+ XSetGraphicsExposures(display, ep->eyeGC, False);
+
+ free_eyes(display, ep);
+ if (MI_WIN_IS_ICONIC(mi))
+ ep->num_eyes = 1;
+ else {
+ ep->num_eyes = MI_BATCHCOUNT(mi);
+ /* MAX_EYES is used or one may quickly run out of memory */
+ if (ep->num_eyes > MAX_EYES)
+ ep->num_eyes = MAX_EYES;
+ if (ep->num_eyes < 0) {
+ if (ep->num_eyes < -MAX_EYES)
+ ep->num_eyes = NRAND(MAX_EYES) + 1;
+ else
+ ep->num_eyes = NRAND(-ep->num_eyes) + 1; /* Add 1 so its not too boring */
+ }
+ }
+ if (!ep->eyes)
+ ep->eyes = (Eyes *) calloc(ep->num_eyes, sizeof (Eyes));
+
+ for (i = 0; i < ep->num_eyes; i++) { /* place each eye pair */
+ /* don't assume None == 0 */
+ ep->eyes[i].pixmap = None;
+ create_eyes(mi, &(ep->eyes[i]), ep->eyes, ep->num_eyes);
+ }
+
+ init_fly(mi, &(ep->fly)); /* init the bouncer */
+
+ XClearWindow(display, MI_WINDOW(mi)); /* clear the window */
+}
+
+/* ---------------------------------------------------------------------- */
+
+/*-
+ * Called by the mainline code periodically to update the display.
+ */
+
+void
+draw_eyes(ModeInfo * mi)
+{
+ int screen = MI_SCREEN(mi);
+ int i;
+
+ if (!stuff_alloced) {
+ /* if startup init didn't finish, do nothing */
+ return;
+ }
+ move_fly(mi, &eye_info[screen].fly);
+
+ for (i = 0; i < eye_info[screen].num_eyes; i++) {
+ paint_eyes(mi, &eye_info[screen].eyes[i],
+ &eye_info[screen].fly,
+ eye_info[screen].eyes,
+ eye_info[screen].num_eyes);
+ }
+
+ paint_fly(mi, &eye_info[screen].fly);
+}
+
+/* ---------------------------------------------------------------------- */
+
+/*-
+ * The display is being taken away from us. Free up malloc'ed
+ * memory and X resources that we've alloc'ed. Only called
+ * once, we must zap everything for every screen.
+ */
+
+void
+release_eyes(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+
+ if (eye_info != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ EyeScrInfo *ep = &eye_info[screen];
+
+ if (ep->flyGC != None)
+ XFreeGC(display, ep->flyGC);
+ if (ep->eyeGC != None)
+ XFreeGC(display, ep->eyeGC);
+ if (ep->flypix != None)
+ XFreePixmap(display, ep->flypix);
+ free_eyes(display, ep);
+ }
+ (void) free((void *) eye_info);
+ }
+ eye_info = NULL;
+ stuff_alloced = False;
+}
+
+/* ---------------------------------------------------------------------- */
+
+/*-
+ * Called when the mainline xlock code notices possible window
+ * damage. This hook should take steps to repaint the entire
+ * window (no specific damage area information is provided).
+ */
+
+void
+refresh_eyes(ModeInfo * mi)
+{
+ int screen = MI_SCREEN(mi);
+ int i;
+
+ if (!stuff_alloced) {
+ return; /* paranoia */
+ }
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+
+ /* simply flag all the eyes as not painted, will repaint next time */
+ for (i = 0; i < eye_info[screen].num_eyes; i++) {
+ eye_info[screen].eyes[i].painted = False;
+ }
+}
+
+/* ---------------------------------------------------------------------- */
+/* ---------------------------------------------------------------------- */
--- /dev/null
+./bitmaps/m-grelb.xbm
\ No newline at end of file
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)flag.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * flag.c - flag for xlock, the X Window System lockscreen.
+ *
+ * Copyright (c) 1996 by Charles Vidal <vidalc@univ-mlv.fr>
+ *
+ * Thanks to Bas van Gaalen, Holland, PD, for his Pascal source
+ *
+ * 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.
+ *
+ * Revision History:
+ * 13-May-97: jwz@netscape.com: turned into a standalone program.
+ * Made it able to animate arbitrary (runtime) text or bitmaps
+ * 15-May-96: written.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Flag"
+#define HACK_INIT init_flag
+#define HACK_DRAW draw_flag
+#define DEF_DELAY 50000
+#define DEF_CYCLES 1000
+#define DEF_SIZE -7
+#define DEF_NCOLORS 200
+#define BRIGHT_COLORS
+#define UNIFORM_COLORS
+#include <X11/Xutil.h>
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+
+#endif /* STANDALONE */
+
+#define DEF_INVERT "False"
+
+static Bool invert;
+
+#ifndef STANDALONE
+static XrmOptionDescRec opts[] =
+{
+ {"-invert", ".flag.invert", XrmoptionNoArg, (caddr_t) "on"},
+ {"+invert", ".flag.invert", XrmoptionNoArg, (caddr_t) "off"}
+};
+static argtype vars[] =
+{
+ {(caddr_t *) & invert, "invert", "Invert", DEF_INVERT, t_Bool}
+};
+static OptionStruct desc[] =
+{
+ {"-/+invert", "turn on/off inverting of flag"}
+};
+
+ModeSpecOpt flag_opts =
+{2, opts, 1, vars, desc};
+#endif /* !STANDALONE */
+
+
+
+#if !defined( VMS ) || ( __VMS_VER >= 70000000 )
+#include <sys/utsname.h>
+#else
+#if USE_XVMSUTILS
+#if 0
+#include "../xvmsutils/utsname.h"
+#else
+#include <X11/utsname.h>
+#endif
+#endif /* USE_XVMSUTILS */
+#endif
+#include "flag.xbm"
+
+/* aliases for vars defined in the bitmap file */
+#define FLAG_WIDTH image_width
+#define FLAG_HEIGHT image_height
+#define FLAG_BITS image_bits
+
+#define MINSIZE 1
+#define MAXSCALE 8
+#define MINSCALE 2
+#define MAXINITSIZE 6
+#define MININITSIZE 2
+#define MINAMP 5
+#define MAXAMP 20
+#define MAXW(fp) (MAXSCALE * (fp)->image->width + 2 * MAXAMP + (fp)->pointsize)
+#define MAXH(fp) (MAXSCALE * (fp)->image->height+ 2 * MAXAMP + (fp)->pointsize)
+#define MINW(fp) (MINSCALE * (fp)->image->width + 2 * MINAMP + (fp)->pointsize)
+#define MINH(fp) (MINSCALE * (fp)->image->height+ 2 * MINAMP + (fp)->pointsize)
+#define ANGLES 360
+
+typedef struct {
+ int samp;
+ int sofs;
+ int sidx;
+ int x_flag, y_flag;
+ int timer;
+ int initialized;
+ int stab[ANGLES];
+ Pixmap cache;
+ int width, height;
+ int pointsize;
+ float size;
+ float inctaille;
+ int startcolor;
+ int choice;
+ XImage *image;
+} flagstruct;
+
+static XImage *logo = NULL;
+static int graphics_format = -1;
+
+static XFontStruct *mode_font = None;
+
+static flagstruct *flags = NULL;
+
+extern XFontStruct *getFont(Display * display);
+
+static int
+random_num(int n)
+{
+ return ((int) (((float) LRAND() / MAXRAND) * (n + 1.0)));
+}
+
+static void
+initSintab(ModeInfo * mi)
+{
+ flagstruct *fp = &flags[MI_SCREEN(mi)];
+ int i;
+
+ for (i = 0; i < ANGLES; i++)
+ fp->stab[i] = (int) (SINF(i * 4 * M_PI / ANGLES) * fp->samp) + fp->sofs;
+}
+
+static void
+affiche(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ int x, y, xp, yp;
+ flagstruct *fp = &flags[MI_SCREEN(mi)];
+
+ for (x = 0; x < fp->image->width; x++)
+ for (y = fp->image->height - 1; y >= 0; y--) {
+ xp = (int) (fp->size * (float) x) +
+ fp->stab[(fp->sidx + x + y) % ANGLES];
+ yp = (int) (fp->size * (float) y) +
+ fp->stab[(fp->sidx + 4 * x + y + y) % ANGLES];
+ if (((int) !invert) ^ XGetPixel(fp->image, x, y))
+ XSetForeground(display, MI_GC(mi), MI_WIN_BLACK_PIXEL(mi));
+ else if (MI_NPIXELS(mi) <= 2)
+ XSetForeground(display, MI_GC(mi), MI_WIN_WHITE_PIXEL(mi));
+ else
+ XSetForeground(display, MI_GC(mi),
+ MI_PIXEL(mi, (y + x + fp->sidx + fp->startcolor) %
+ MI_NPIXELS(mi)));
+ if (fp->pointsize <= 1)
+ XDrawPoint(display, fp->cache, MI_GC(mi), xp, yp);
+ else
+#ifndef NOTHREED_EFFECT
+ XFillRectangle(display, fp->cache, MI_GC(mi), xp, yp,
+ fp->pointsize, fp->pointsize);
+#else
+ if (fp->pointsize < 6)
+ XFillRectangle(display, fp->cache, MI_GC(mi), xp, yp,
+ fp->pointsize, fp->pointsize);
+ else
+ XFillArc(display, fp->cache, MI_GC(mi), xp, yp,
+ fp->pointsize, fp->pointsize, 0, 360 * 64);
+#endif
+ }
+}
+
+extern char *message, *imagefile;
+
+static void
+getText(ModeInfo * mi, XImage ** image)
+{
+ Display *display = MI_DISPLAY(mi);
+ char *text1, *text2;
+ char *line, *token;
+ int width, height;
+ int lines;
+ int margin = 2;
+ XCharStruct overall;
+ XGCValues gcv;
+ GC gc;
+ Pixmap text_pixmap;
+
+
+ if (!message || !*message) {
+#if !defined( VMS ) || ( __VMS_VER >= 70000000 ) || defined( USE_XVMSUTILS )
+ struct utsname uts;
+
+ if (uname(&uts) < 0) {
+ text1 = strdup("uname() failed");
+ } else {
+ char *s;
+
+ if ((s = strchr(uts.nodename, '.')))
+ *s = 0;
+ text1 = (char *) malloc(strlen(uts.nodename) +
+ strlen(uts.sysname) +
+ strlen(uts.release) + 10);
+ (void) sprintf(text1, "%s\n%s %s",
+ uts.nodename, uts.sysname, uts.release);
+ }
+#else
+ text1 = strdup("OpenVMS"); /* It says release 0 in my utsname.h */
+#endif
+ } else {
+ text1 = strdup(message);
+ }
+ while (*text1 && (text1[strlen(text1) - 1] == '\r' ||
+ text1[strlen(text1) - 1] == '\n'))
+ text1[strlen(text1) - 1] = 0;
+ text2 = strdup(text1);
+
+
+ if (mode_font == None)
+ mode_font = getFont(display);
+
+ (void) memset(&overall, 0, sizeof (overall));
+ token = text1;
+ lines = 0;
+ while ((line = strtok(token, "\r\n"))) {
+ XCharStruct o2;
+ int ascent, descent, direction;
+
+ token = 0;
+ XTextExtents(mode_font, line, strlen(line),
+ &direction, &ascent, &descent, &o2);
+ overall.lbearing = MAX(overall.lbearing, o2.lbearing);
+ overall.rbearing = MAX(overall.rbearing, o2.rbearing);
+ lines++;
+ }
+
+ width = overall.lbearing + overall.rbearing + margin + margin + 1;
+ height = ((mode_font->ascent + mode_font->descent) * lines) +
+ margin + margin;
+
+ text_pixmap = XCreatePixmap(display, MI_WINDOW(mi), width, height, 1);
+
+ gcv.font = mode_font->fid;
+ gcv.foreground = 0;
+ gcv.background = 0;
+ gc = XCreateGC(display, text_pixmap,
+ GCFont | GCForeground | GCBackground, &gcv);
+ XFillRectangle(display, text_pixmap, gc, 0, 0, width, height);
+ XSetForeground(display, gc, 1);
+
+ token = text2;
+ lines = 0;
+ while ((line = strtok(token, "\r\n"))) {
+ XCharStruct o2;
+ int ascent, descent, direction, xoff;
+
+ token = 0;
+
+ XTextExtents(mode_font, line, strlen(line),
+ &direction, &ascent, &descent, &o2);
+ xoff = ((overall.lbearing + overall.rbearing) -
+ (o2.lbearing + o2.rbearing)) / 2;
+
+ XDrawString(display, text_pixmap, gc,
+ overall.lbearing + margin + xoff,
+ ((mode_font->ascent * (lines + 1)) +
+ (mode_font->descent * lines) + margin),
+ line, strlen(line));
+ lines++;
+ }
+ (void) free((void *) text1);
+ (void) free((void *) text2);
+ /*XUnloadFont(display, mode_font->fid); */
+ XFreeGC(display, gc);
+
+ *image = XGetImage(display, text_pixmap, 0, 0, width, height,
+ 1L, XYPixmap);
+ XFreePixmap(MI_DISPLAY(mi), text_pixmap);
+}
+
+void
+init_flag(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ int size = MI_SIZE(mi);
+ flagstruct *fp;
+
+ if (flags == NULL) {
+ if ((flags = (flagstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (flagstruct))) == NULL)
+ return;
+ }
+ fp = &flags[MI_SCREEN(mi)];
+
+ fp->width = MI_WIN_WIDTH(mi);
+ fp->height = MI_WIN_HEIGHT(mi);
+
+ if (!logo) {
+ getBitmap(&logo, FLAG_WIDTH, FLAG_HEIGHT, FLAG_BITS,
+ &graphics_format);
+ }
+ if (fp->image == NULL) {
+ if (MI_WIN_IS_FULLRANDOM(mi) ||
+ (imagefile && *imagefile && message && *message) ||
+ ((!imagefile || !*imagefile) && (!message || !*message)))
+ fp->choice = LRAND() & 1;
+ else if (imagefile && *imagefile)
+ fp->choice = 0;
+ else
+ fp->choice = 1;
+ if (fp->choice) {
+ getText(mi, &fp->image);
+ } else {
+ fp->image = XCreateImage(display, MI_VISUAL(mi), 1, XYBitmap, 0,
+ logo->data, logo->width, logo->height, 8, 0);
+ fp->image->byte_order = LSBFirst;
+ fp->image->bitmap_bit_order = LSBFirst;
+ }
+ }
+ fp->samp = MAXAMP; /* Amplitude */
+ fp->sofs = 20; /* ???????? */
+ fp->pointsize = size;
+ if (size < -MINSIZE)
+ fp->pointsize = NRAND(-size - MINSIZE + 1) + MINSIZE;
+ if (fp->pointsize < MINSIZE ||
+ fp->width <= MAXW(fp) || fp->height <= MAXH(fp))
+ fp->pointsize = MINSIZE;
+ fp->size = MAXINITSIZE; /* Initial distance between pts */
+ fp->inctaille = 0.05;
+ fp->timer = 0;
+ fp->sidx = fp->x_flag = fp->y_flag = 0;
+
+ if (!fp->initialized) {
+ fp->initialized = True;
+ if (!(fp->cache = XCreatePixmap(display, MI_WINDOW(mi),
+ MAXW(fp), MAXH(fp), MI_WIN_DEPTH(mi))))
+ return;
+ }
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XSetBackground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XFillRectangle(display, fp->cache, gc,
+ 0, 0, MAXW(fp), MAXH(fp));
+ /* don't want any exposure events from XCopyArea */
+ XSetGraphicsExposures(display, gc, False);
+ if (MI_NPIXELS(mi) > 2)
+ fp->startcolor = NRAND(MI_NPIXELS(mi));
+ if (fp->width <= MAXW(fp) || fp->height <= MAXH(fp)) {
+ fp->samp = MINAMP;
+ fp->sofs = 0;
+ fp->x_flag = random_num(fp->width - MINW(fp));
+ fp->y_flag = random_num(fp->height - MINH(fp));
+ } else {
+ fp->samp = MAXAMP;
+ fp->sofs = 20;
+ fp->x_flag = random_num(fp->width - MAXW(fp));
+ fp->y_flag = random_num(fp->height - MAXH(fp));
+ }
+
+ initSintab(mi);
+
+ XClearWindow(display, MI_WINDOW(mi));
+}
+
+void
+draw_flag(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ flagstruct *fp = &flags[MI_SCREEN(mi)];
+
+ if (fp->width <= MAXW(fp) || fp->height <= MAXH(fp)) {
+ fp->size = MININITSIZE;
+ /* fp->pointsize = MINPOINTSIZE; */
+ XCopyArea(display, fp->cache, window, gc,
+ 0, 0, MINW(fp), MINH(fp), fp->x_flag, fp->y_flag);
+ } else {
+ if ((fp->size + fp->inctaille) > MAXSCALE)
+ fp->inctaille = -fp->inctaille;
+ if ((fp->size + fp->inctaille) < MINSCALE)
+ fp->inctaille = -fp->inctaille;
+ fp->size += fp->inctaille;
+ XCopyArea(display, fp->cache, window, gc,
+ 0, 0, MAXW(fp), MAXH(fp), fp->x_flag, fp->y_flag);
+ }
+ XSetForeground(MI_DISPLAY(mi), gc, MI_WIN_BLACK_PIXEL(mi));
+ XFillRectangle(display, fp->cache, gc,
+ 0, 0, MAXW(fp), MAXH(fp));
+ XFlush(display);
+ affiche(mi);
+ fp->sidx += 2;
+ fp->sidx %= (ANGLES * MI_NPIXELS(mi));
+ XFlush(display);
+ fp->timer++;
+ if ((MI_CYCLES(mi) > 0) && (fp->timer >= MI_CYCLES(mi)))
+ init_flag(mi);
+}
+
+void
+release_flag(ModeInfo * mi)
+{
+ if (flags != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ flagstruct *fp = &flags[screen];
+
+ if (fp->cache)
+ XFreePixmap(MI_DISPLAY(mi), fp->cache);
+ if (fp->image) {
+ if (fp->choice)
+ XDestroyImage(fp->image);
+ else
+ XFree(fp->image); /* not XDestroyImage, still need the data */
+ }
+ }
+ (void) free((void *) flags);
+ flags = NULL;
+ }
+ if (mode_font != None) {
+ XFreeFont(MI_DISPLAY(mi), mode_font);
+ mode_font = None;
+ }
+ destroyBitmap(&logo, &graphics_format);
+}
+
+void
+refresh_flag(ModeInfo * mi)
+{
+ /* Do nothing, it will refresh by itself */
+}
--- /dev/null
+./bitmaps/m-x11.xbm
\ No newline at end of file
--- /dev/null
+
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)flame.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * flame.c - recursive fractal cosmic flames 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 11-Aug-95: Got rid of polyominal since it was crashing xlock on some
+ * machines.
+ * 01-Jun-95: This should look more like the original with some updates by
+ * Scott Draves.
+ * 27-Jun-91: vary number of functions used.
+ * 24-Jun-91: fixed portability problem with integer mod (%).
+ * 06-Jun-91: Written, received from Scott Draves <spot@cs.cmu.edu>
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Flame"
+#define HACK_INIT init_flame
+#define HACK_DRAW draw_flame
+#define DEF_DELAY 750000
+#define DEF_BATCHCOUNT 20
+#define DEF_CYCLES 10000
+#define DEF_NCOLORS 200
+#define SPREAD_COLORS
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt flame_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+#define MAXLEV 4
+#define MAXKINDS 9
+#define MAXBATCH 12
+
+typedef struct {
+ double f[2][3][MAXLEV]; /* three non-homogeneous transforms */
+ int variation;
+ int max_levels;
+ int cur_level;
+ int snum;
+ int anum;
+ int width, height;
+ int num_points;
+ int total_points;
+ int pixcol;
+ int cycles;
+ XPoint pts[MAXBATCH];
+} flamestruct;
+
+static flamestruct *flames = NULL;
+
+static short
+halfrandom(int mv)
+{
+ static short lasthalf = 0;
+ unsigned long r;
+
+ if (lasthalf) {
+ r = lasthalf;
+ lasthalf = 0;
+ } else {
+ r = LRAND();
+ lasthalf = r >> 16;
+ }
+ return r % mv;
+}
+
+static Bool
+recurse(ModeInfo * mi, flamestruct * fp,
+ register double x, register double y, register int l)
+{
+ int i;
+ double nx, ny;
+
+ if (l == fp->max_levels) {
+ fp->total_points++;
+ if (fp->total_points > fp->cycles) /* how long each fractal runs */
+ return False;
+
+ if (x > -1.0 && x < 1.0 && y > -1.0 && y < 1.0) {
+ fp->pts[fp->num_points].x = (int) ((fp->width / 2) * (x + 1.0));
+ fp->pts[fp->num_points].y = (int) ((fp->height / 2) * (y + 1.0));
+ fp->num_points++;
+ if (fp->num_points >= MAXBATCH) { /* point buffer size */
+ XDrawPoints(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), fp->pts,
+ fp->num_points, CoordModeOrigin);
+ fp->num_points = 0;
+ }
+ }
+ } else {
+ for (i = 0; i < fp->snum; i++) {
+ nx = fp->f[0][0][i] * x + fp->f[0][1][i] * y + fp->f[0][2][i];
+ ny = fp->f[1][0][i] * x + fp->f[1][1][i] * y + fp->f[1][2][i];
+ if (i < fp->anum) {
+ switch (fp->variation) {
+ case 0: /* sinusoidal */
+ nx = sin(nx);
+ ny = sin(ny);
+ break;
+ case 1: /* complex */
+ {
+ double r2 = nx * nx + ny * ny + 1e-6;
+
+ nx = nx / r2;
+ ny = ny / r2;
+ }
+ break;
+ case 2: /* bent */
+ if (nx < 0.0)
+ nx = nx * 2.0;
+ if (ny < 0.0)
+ ny = ny / 2.0;
+ break;
+ case 3: /* swirl */
+ {
+ double r = (nx * nx + ny * ny); /* times k here is fun */
+ double c1 = sin(r);
+ double c2 = cos(r);
+ double t = nx;
+
+ if (nx > 1e4 || nx < -1e4 || ny > 1e4 || ny < -1e4)
+ ny = 1e4;
+ else
+ ny = c2 * t + c1 * ny;
+ nx = c1 * nx - c2 * ny;
+ }
+ break;
+ case 4: /* horseshoe */
+ {
+ double r, c1,
+ c2,
+ t;
+
+ /* Avoid atan2: DOMAIN error message */
+ if (nx == 0.0 && ny == 0.0)
+ r = 0.0;
+ else
+ r = atan2(nx, ny); /* times k here is fun */
+ c1 = sin(r);
+ c2 = cos(r);
+ t = nx;
+
+ nx = c1 * nx - c2 * ny;
+ ny = c2 * t + c1 * ny;
+ }
+ break;
+ case 5: /* drape */
+ {
+ double t;
+
+ /* Avoid atan2: DOMAIN error message */
+ if (nx == 0.0 && ny == 0.0)
+ t = 0.0;
+ else
+ t = atan2(nx, ny) / M_PI;
+
+ if (nx > 1e4 || nx < -1e4 || ny > 1e4 || ny < -1e4)
+ ny = 1e4;
+ else
+ ny = sqrt(nx * nx + ny * ny) - 1.0;
+ nx = t;
+ }
+ break;
+ case 6: /* broken */
+ if (nx > 1.0)
+ nx = nx - 1.0;
+ if (nx < -1.0)
+ nx = nx + 1.0;
+ if (ny > 1.0)
+ ny = ny - 1.0;
+ if (ny < -1.0)
+ ny = ny + 1.0;
+ break;
+ case 7: /* spherical */
+ {
+ double r = 0.5 + sqrt(nx * nx + ny * ny + 1e-6);
+
+ nx = nx / r;
+ ny = ny / r;
+ }
+ break;
+ case 8: /* */
+ nx = atan(nx) / M_PI_2;
+ ny = atan(ny) / M_PI_2;
+ break;
+#if 0
+/* core dumps on some machines, why not all? */
+ case 9: /* complex sine */
+ {
+ double u = nx,
+ v = ny;
+ double ev = exp(v);
+ double emv = exp(-v);
+
+ nx = (ev + emv) * sin(u) / 2.0;
+ ny = (ev - emv) * cos(u) / 2.0;
+ }
+ break;
+ case 10: /* polynomial */
+ if (nx < 0)
+ nx = -nx * nx;
+ else
+ nx = nx * nx;
+ if (ny < 0)
+ ny = -ny * ny;
+ else
+ ny = ny * ny;
+ break;
+#endif
+ default:
+ nx = sin(nx);
+ ny = sin(ny);
+ }
+ }
+ if (!recurse(mi, fp, nx, ny, l + 1))
+ return False;
+ }
+ }
+ return True;
+}
+
+void
+init_flame(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ flamestruct *fp;
+
+ if (flames == NULL) {
+ if ((flames = (flamestruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (flamestruct))) == NULL)
+ return;
+ }
+ fp = &flames[MI_SCREEN(mi)];
+
+ fp->width = MI_WIN_WIDTH(mi);
+ fp->height = MI_WIN_HEIGHT(mi);
+
+ fp->max_levels = MI_BATCHCOUNT(mi);
+ fp->cycles = MI_CYCLES(mi);
+
+ XClearWindow(display, MI_WINDOW(mi));
+
+ if (MI_NPIXELS(mi) > 2) {
+ fp->pixcol = halfrandom(MI_NPIXELS(mi));
+ XSetForeground(display, gc, MI_PIXEL(mi, fp->pixcol));
+ } else
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+
+ fp->variation = NRAND(MAXKINDS);
+}
+
+void
+draw_flame(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ flamestruct *fp = &flames[MI_SCREEN(mi)];
+ int i, j, k;
+ static alt = 0;
+
+ if (!(fp->cur_level++ % fp->max_levels)) {
+ XClearWindow(display, MI_WINDOW(mi));
+ alt = !alt;
+ } else {
+ if (MI_NPIXELS(mi) > 2) {
+ XSetForeground(display, MI_GC(mi), MI_PIXEL(mi, fp->pixcol));
+ if (--fp->pixcol < 0)
+ fp->pixcol = MI_NPIXELS(mi) - 1;
+ }
+ }
+
+ /* number of functions */
+ fp->snum = 2 + (fp->cur_level % (MAXLEV - 1));
+
+ /* how many of them are of alternate form */
+ if (alt)
+ fp->anum = 0;
+ else
+ fp->anum = halfrandom(fp->snum) + 2;
+
+ /* 6 coefs per function */
+ for (k = 0; k < fp->snum; k++) {
+ for (i = 0; i < 2; i++)
+ for (j = 0; j < 3; j++)
+ fp->f[i][j][k] = ((double) (LRAND() & 1023) / 512.0 - 1.0);
+ }
+ fp->num_points = 0;
+ fp->total_points = 0;
+ (void) recurse(mi, fp, 0.0, 0.0, 0);
+ XDrawPoints(display, MI_WINDOW(mi), MI_GC(mi),
+ fp->pts, fp->num_points, CoordModeOrigin);
+}
+
+void
+release_flame(ModeInfo * mi)
+{
+ if (flames != NULL) {
+ (void) free((void *) flames);
+ flames = NULL;
+ }
+}
+
+void
+refresh_flame(ModeInfo * mi)
+{
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+}
--- /dev/null
+
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)forest.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * forest.c - forest for for xlock, the X Window System lockscreen.
+ *
+ * Copyright (c) 1995 Pascal Pensa <pensa@aurora.unice.fr>
+ *
+ * Original idea : Guillaume Ramey <ramey@aurora.unice.fr>
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ *
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Forest"
+#define HACK_INIT init_forest
+#define HACK_DRAW draw_forest
+#define DEF_DELAY 400000
+#define DEF_BATCHCOUNT 100
+#define DEF_CYCLES 200
+#define DEF_NCOLORS 100
+#define UNIFORM_COLORS
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt forest_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+#define MINTREES 1
+
+#define MINHEIGHT 20 /* Tree height range */
+#define MAXHEIGHT 40
+
+#define MINANGLE 15 /* (degree) angle between soon */
+#define MAXANGLE 35
+#define RANDANGLE 15 /* (degree) Max random angle from default */
+
+#define REDUCE 90 /* Height % from father */
+
+#define ITERLEVEL 10 /* Tree iteration */
+
+#define COLORSPEED 2 /* Color increment */
+
+/* degree to radian */
+#define DEGTORAD(x) (((float)(x)) * M_PI / 180.0)
+
+#define RANGE_RAND(min,max) ((min) + NRAND((max) - (min)))
+
+typedef struct {
+ int width;
+ int height;
+ int time; /* up time */
+ int ntrees;
+} foreststruct;
+
+static foreststruct *forests = NULL;
+
+static void
+draw_tree(ModeInfo * mi,
+ short int x, short int y, short int len,
+ float a, float as, short int c, short int level)
+ /* Father's end */
+ /* Length */
+ /* color */
+ /* Height level */
+ /* Father's angle */
+ /* Father's angle step */
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ short x_1, y_1, x_2, y_2;
+ float a1, a2;
+
+ /* left */
+
+ a1 = a + as + DEGTORAD(NRAND(2 * RANDANGLE) - RANDANGLE);
+
+ x_1 = x + (short) (COSF(a1) * ((float) len));
+ y_1 = y + (short) (SINF(a1) * ((float) len));
+
+ /* right */
+
+ a2 = a - as + DEGTORAD(NRAND(2 * RANDANGLE) - RANDANGLE);
+
+ x_2 = x + (short) (COSF(a2) * ((float) len));
+ y_2 = y + (short) (SINF(a2) * ((float) len));
+
+ if (MI_NPIXELS(mi) > 2) {
+ XSetForeground(display, gc, MI_PIXEL(mi, c));
+ c = (c + COLORSPEED) % MI_NPIXELS(mi);
+ } else
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+
+ XDrawLine(display, window, gc, x, y, x_1, y_1);
+ XDrawLine(display, window, gc, x, y, x_2, y_2);
+
+ if (level < 2) {
+ XDrawLine(display, window, gc, x + 1, y, x_1 + 1, y_1);
+ XDrawLine(display, window, gc, x + 1, y, x_2 + 1, y_2);
+ }
+ len = (len * REDUCE * 10) / 1000;
+
+ if (level < ITERLEVEL) {
+ draw_tree(mi, x_1, y_1, len, a1, as, c, level + 1);
+ draw_tree(mi, x_2, y_2, len, a2, as, c, level + 1);
+ }
+}
+
+void
+init_forest(ModeInfo * mi)
+{
+ foreststruct *fp;
+
+ if (forests == NULL) {
+ if ((forests = (foreststruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (foreststruct))) == NULL)
+ return;
+ }
+ fp = &forests[MI_SCREEN(mi)];
+
+ fp->width = MI_WIN_WIDTH(mi);
+ fp->height = MI_WIN_HEIGHT(mi);
+ fp->time = 0;
+
+ fp->ntrees = MI_BATCHCOUNT(mi);
+ if (fp->ntrees < -MINTREES)
+ fp->ntrees = NRAND(-fp->ntrees - MINTREES + 1) + MINTREES;
+ else if (fp->ntrees < MINTREES)
+ fp->ntrees = MINTREES;
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+}
+
+void
+draw_forest(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ foreststruct *fp = &forests[MI_SCREEN(mi)];
+ short x, y, x_2, y_2, len, c = 0;
+ float a, as;
+
+ if (fp->time < fp->ntrees) {
+
+ x = RANGE_RAND(0, fp->width);
+ y = RANGE_RAND(0, fp->height + MAXHEIGHT);
+ a = -M_PI / 2.0 + DEGTORAD(NRAND(2 * RANDANGLE) - RANDANGLE);
+ as = DEGTORAD(RANGE_RAND(MINANGLE, MAXANGLE));
+ len = ((RANGE_RAND(MINHEIGHT, MAXHEIGHT) * (fp->width / 20)) / 50) + 2;
+
+ if (MI_NPIXELS(mi) > 2) {
+ c = NRAND(MI_NPIXELS(mi));
+ XSetForeground(display, gc, MI_PIXEL(mi, c));
+ c = (c + COLORSPEED) % MI_NPIXELS(mi);
+ } else
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+
+ x_2 = x + (short) (COSF(a) * ((float) len));
+ y_2 = y + (short) (SINF(a) * ((float) len));
+
+ XDrawLine(display, MI_WINDOW(mi), gc, x, y, x_2, y_2);
+ XDrawLine(display, MI_WINDOW(mi), gc, x + 1, y, x_2 + 1, y_2);
+
+ draw_tree(mi, x_2, y_2, (len * REDUCE) / 100, a, as, c, 1);
+ }
+ if (++fp->time > MI_CYCLES(mi))
+ init_forest(mi);
+}
+
+void
+release_forest(ModeInfo * mi)
+{
+ if (forests != NULL) {
+ (void) free((void *) forests);
+ forests = NULL;
+ }
+}
+
+void
+refresh_forest(ModeInfo * mi)
+{
+ foreststruct *fp = &forests[MI_SCREEN(mi)];
+
+ if (fp->time < fp->ntrees)
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+ else
+ init_forest(mi);
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)fract.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * fract.c - vine fractals for xlock, the X Window System lockscreen.
+ *
+ * Copyright (c) 1997 by Tracy Camp <campt@hurrah.com>
+ *
+ * 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.
+ *
+ * If you make a modification I would of course appreciate a copy.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 21-Mar-97: David Hansen <dhansen@metapath.com>
+ * Updated mode to draw complete patterns on every
+ * iteration instead of growing the vine. Also made
+ * adjustments to randomization and changed variable
+ * names to make logic easier to follow.
+ */
+
+/*-
+ * This was modifed from a 'screen saver' that a friend and I
+ * wrote on our TI-8x calculators in high school physics one day
+ * Basically another geometric pattern generator, this ones claim
+ * to fame is a pseudo-fractal looking vine like pattern that creates
+ * nifty whorls and loops.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Fract"
+#define HACK_INIT init_fract
+#define HACK_DRAW draw_fract
+#define DEF_DELAY 200000
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt fract_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+typedef struct {
+ int a;
+ int x1;
+ int y1;
+ int x2;
+ int y2;
+ int length;
+ int iterations;
+ int constant;
+ int ang;
+ int centerx;
+ int centery;
+} fractstruct;
+
+static fractstruct *fracts = NULL;
+
+void
+refresh_fract(ModeInfo * mi)
+{
+}
+
+void
+init_fract(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ fractstruct *fp;
+
+ if (fracts == NULL) {
+ if ((fracts = (fractstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (fractstruct))) == NULL) {
+ return;
+ }
+ }
+ fp = &fracts[MI_SCREEN(mi)];
+
+ fp->iterations = 30 + NRAND(100);
+
+ XClearWindow(display, MI_WINDOW(mi));
+}
+
+void
+draw_fract(ModeInfo * mi)
+{
+ fractstruct *fp = &fracts[MI_SCREEN(mi)];
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ int i;
+
+ if (--(fp->iterations) == 0)
+ init_fract(mi);
+
+ fp->centerx = NRAND(MI_WIN_WIDTH(mi));
+ fp->centery = NRAND(MI_WIN_HEIGHT(mi));
+
+ fp->ang = 60 + NRAND(720);
+ fp->length = 100 + NRAND(3000);
+ fp->constant = fp->length * (10 + NRAND(10));
+
+ fp->a = 0;
+ fp->x1 = 0;
+ fp->y1 = 0;
+ fp->x2 = 1;
+ fp->y2 = 0;
+
+ if (MI_NPIXELS(mi) > 2)
+ XSetForeground(display, gc, MI_PIXEL(mi, NRAND(MI_NPIXELS(mi))));
+ else
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+
+
+ for (i = 0; i < fp->length; i++) {
+ XDrawLine(display, MI_WINDOW(mi), gc,
+ fp->centerx + (fp->x1 / fp->constant),
+ fp->centery - (fp->y1 / fp->constant),
+ fp->centerx + (fp->x2 / fp->constant),
+ fp->centery - (fp->y2 / fp->constant));
+
+ fp->a += (fp->ang * i);
+
+ fp->x1 = fp->x2;
+ fp->y1 = fp->y2;
+
+ fp->x2 += (int) (i * ((cos(fp->a) * 360) / (2 * M_PI)));
+ fp->y2 += (int) (i * ((sin(fp->a) * 360) / (2 * M_PI)));
+ }
+}
+
+void
+release_fract(ModeInfo * mi)
+{
+ if (fracts != NULL) {
+ (void) free((void *) fracts);
+ fracts = NULL;
+ }
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)galaxy.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * galaxy.c - Spinning galaxies for xlock, the X Window System
+ * lockscreen.
+ *
+ * Originally done by Uli Siegmund <uli@wombat.okapi.sub.org> on Amiga
+ * for EGS in Cluster
+ * Port from Cluster/EGS to C/Intuition by Harald Backert
+ * Port to X11 and incorporation into xlockmore by Hubert Feyrer
+ * <hubert.feyrer@rz.uni-regensburg.de>
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 18-Apr-97: Memory leak fixed by Tom Schmidt <tschmidt@micron.com>
+ * 07-Apr-97: Modified by Dave Mitchell <davem@magnet.com>
+ * 23-Oct-94: Modified by David Bagley <bagleyd@bigfoot.com>
+ * random star sizes
+ * colors change depending on velocity
+ * 10-Oct-94: Add colors by Hubert Feyer
+ * 30-Sep-94: Initial port by Hubert Feyer
+ * 09-Mar-94: VMS can generate a random number 0.0 which results in a
+ * division by zero, corrected by Jouk Jansen
+ * <joukj@crys.chem.uva.nl>
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Galaxy"
+#define HACK_INIT init_galaxy
+#define HACK_DRAW draw_galaxy
+#define DEF_DELAY 100
+#define DEF_BATCHCOUNT -5
+#define DEF_CYCLES 250
+#define DEF_SIZE -3
+#define UNIFORM_COLORS
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+
+#endif /* STANDALONE */
+
+#define FLOATRAND ((double) LRAND() / ((double) MAXRAND))
+
+#if 0
+#define WRAP 1 /* Warp around edges */
+#define BOUNCE 1 /* Bounce from borders */
+#endif
+
+#define MINSIZE 1
+#define MINGALAXIES 1
+#define MAX_STARS 300
+#define MAX_IDELTAT 50
+/* These come originally from the Cluster-version */
+#define DEFAULT_GALAXIES 2
+#define DEFAULT_STARS 1000
+#define DEFAULT_HITITERATIONS 7500
+#define DEFAULT_IDELTAT 200 /* 0.02 */
+#define EPSILON 0.0000001
+
+#define GALAXYRANGESIZE 0.1
+#define GALAXYMINSIZE 0.1
+#define QCONS 0.001
+
+#define COLORBASE 8
+ /* Colors for stars start here */
+#define COLORSTEP (NUMCOLORS/COLORBASE) /* 8 colors per galaxy */
+
+#define drawStar(x,y,size) if(size<=1) XDrawPoint(display,window,gc,x,y);\
+ else XFillArc(display,window,gc,x,y,size,size,0,23040)
+
+static Bool tracks;
+
+#define DEF_TRACKS "False"
+
+#ifndef STANDALONE
+static XrmOptionDescRec opts[] =
+{
+ {"-tracks", ".galaxy.tracks", XrmoptionNoArg, (caddr_t) "on"},
+ {"+tracks", ".galaxy.tracks", XrmoptionNoArg, (caddr_t) "off"}
+};
+
+static argtype vars[] =
+{
+ {(caddr_t *) & tracks, "tracks", "Tracks", DEF_TRACKS, t_Bool}
+};
+
+static OptionStruct desc[] =
+{
+ {"-/+tracks", "turn on/off star tracks"}
+};
+
+ModeSpecOpt galaxy_opts =
+{2, opts, 1, vars, desc};
+
+#endif /* STANDALONE */
+
+typedef struct {
+ double pos[3], vel[3];
+ int px, py;
+ int color;
+ int size;
+} Star;
+
+typedef struct {
+ int mass;
+ int nstars;
+ Star *stars;
+ double pos[3], vel[3];
+ int galcol;
+} Galaxy;
+
+typedef struct {
+ struct {
+ int left; /* x minimum */
+ int right; /* x maximum */
+ int top; /* y minimum */
+ int bottom; /* y maximum */
+ } clip;
+ double mat[3][3]; /* Movement of stars(?) */
+ double scale; /* Scale */
+ int midx; /* Middle of screen, x */
+ int midy; /* Middle of screen, y */
+ double size; /* */
+ double diff[3]; /* */
+ Galaxy *galaxies; /* the Whole Universe */
+ int ngalaxies; /* # galaxies */
+ double f_deltat; /* quality of calculation, calc'd by d_ideltat */
+ int f_hititerations; /* # iterations before restart */
+ int step; /* */
+} unistruct;
+
+static unistruct *universes = NULL;
+
+static void
+free_galaxies(unistruct * gp)
+{
+ if (gp->galaxies != NULL) {
+ int i;
+
+ for (i = 0; i < gp->ngalaxies; i++) {
+ Galaxy *gt = &gp->galaxies[i];
+
+ if (gt->stars != NULL)
+ (void) free((void *) gt->stars);
+ }
+ (void) free((void *) gp->galaxies);
+ gp->galaxies = NULL;
+ }
+}
+
+static void
+startover(ModeInfo * mi)
+{
+ unistruct *gp = &universes[MI_SCREEN(mi)];
+ int size = MI_SIZE(mi);
+ int i, j; /* more tmp */
+ double w1, w2; /* more tmp */
+ double d, v, w, h; /* yet more tmp */
+
+ gp->step = 0;
+
+ if (MI_BATCHCOUNT(mi) < -MINGALAXIES)
+ free_galaxies(gp);
+ gp->ngalaxies = MI_BATCHCOUNT(mi);
+ if (gp->ngalaxies < -MINGALAXIES)
+ gp->ngalaxies = NRAND(-gp->ngalaxies - MINGALAXIES + 1) + MINGALAXIES;
+ else if (gp->ngalaxies < MINGALAXIES)
+ gp->ngalaxies = MINGALAXIES;
+ if (gp->galaxies == NULL)
+ gp->galaxies = (Galaxy *) calloc(gp->ngalaxies, sizeof (Galaxy));
+
+ for (i = 0; i < gp->ngalaxies; ++i) {
+ Galaxy *gt = &gp->galaxies[i];
+ double sinw1, sinw2, cosw1, cosw2;
+
+ gt->galcol = NRAND(COLORBASE - 2);
+ if (gt->galcol > 1)
+ gt->galcol += 2; /* Mult 8; 16..31 no green stars */
+ /* Galaxies still may have some green stars but are not all green. */
+
+ if (gt->stars != NULL) {
+ (void) free((void *) gt->stars);
+ gt->stars = NULL;
+ }
+ gt->nstars = (NRAND(MAX_STARS / 2)) + MAX_STARS / 2;
+ gt->stars = (Star *) malloc(gt->nstars * sizeof (Star));
+ w1 = 2.0 * M_PI * FLOATRAND;
+ w2 = 2.0 * M_PI * FLOATRAND;
+ sinw1 = SINF(w1);
+ sinw2 = SINF(w2);
+ cosw1 = COSF(w1);
+ cosw2 = COSF(w2);
+
+ gp->mat[0][0] = cosw2;
+ gp->mat[0][1] = -sinw1 * sinw2;
+ gp->mat[0][2] = cosw1 * sinw2;
+ gp->mat[1][0] = 0.0;
+ gp->mat[1][1] = cosw1;
+ gp->mat[1][2] = sinw1;
+ gp->mat[2][0] = -sinw2;
+ gp->mat[2][1] = -sinw1 * cosw2;
+ gp->mat[2][2] = cosw1 * cosw2;
+
+ gt->vel[0] = FLOATRAND * 2.0 - 1.0;
+ gt->vel[1] = FLOATRAND * 2.0 - 1.0;
+ gt->vel[2] = FLOATRAND * 2.0 - 1.0;
+ gt->pos[0] = -gt->vel[0] * gp->f_deltat *
+ gp->f_hititerations + FLOATRAND - 0.5;
+ gt->pos[1] = -gt->vel[1] * gp->f_deltat *
+ gp->f_hititerations + FLOATRAND - 0.5;
+ gt->pos[2] = -gt->vel[2] * gp->f_deltat *
+ gp->f_hititerations + FLOATRAND - 0.5;
+
+ gt->mass = (int) (FLOATRAND * 1000.0) + 1;
+
+ gp->size = GALAXYRANGESIZE * FLOATRAND + GALAXYMINSIZE;
+
+ for (j = 0; j < gt->nstars; ++j) {
+ Star *st = >->stars[j];
+ double sinw, cosw;
+
+ w = 2.0 * M_PI * FLOATRAND;
+ sinw = SINF(w);
+ cosw = COSF(w);
+ d = FLOATRAND * gp->size;
+ h = FLOATRAND * exp(-2.0 * (d / gp->size)) / 5.0 * gp->size;
+ if (FLOATRAND < 0.5)
+ h = -h;
+ st->pos[0] = gp->mat[0][0] * d * cosw + gp->mat[1][0] * d * sinw +
+ gp->mat[2][0] * h + gt->pos[0];
+ st->pos[1] = gp->mat[0][1] * d * cosw + gp->mat[1][1] * d * sinw +
+ gp->mat[2][1] * h + gt->pos[1];
+ st->pos[2] = gp->mat[0][2] * d * cosw + gp->mat[1][2] * d * sinw +
+ gp->mat[2][2] * h + gt->pos[2];
+
+ v = sqrt(gt->mass * QCONS / sqrt(d * d + h * h));
+ st->vel[0] = -gp->mat[0][0] * v * sinw + gp->mat[1][0] * v * cosw +
+ gt->vel[0];
+ st->vel[1] = -gp->mat[0][1] * v * sinw + gp->mat[1][1] * v * cosw +
+ gt->vel[1];
+ st->vel[2] = -gp->mat[0][2] * v * sinw + gp->mat[1][2] * v * cosw +
+ gt->vel[2];
+
+ st->px = 0;
+ st->py = 0;
+
+ if (size < -MINSIZE)
+ st->size = NRAND(-size - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE)
+ st->size = MINSIZE;
+ else
+ st->size = size;
+ }
+ }
+
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+
+#if 0
+ (void) printf("ngalaxies=%d, f_hititerations=%d\n",
+ gp->ngalaxies, gp->f_hititerations);
+ (void) printf("f_deltat=%g\n", gp->f_deltat);
+ (void) printf("Screen: ");
+ (void) printf("%dx%d pixel (%d-%d, %d-%d)\n",
+ (gp->clip.right - gp->clip.left), (gp->clip.bottom - gp->clip.top),
+ gp->clip.left, gp->clip.right, gp->clip.top, gp->clip.bottom);
+#endif /*0 */
+}
+
+void
+init_galaxy(ModeInfo * mi)
+{
+ unistruct *gp;
+
+ if (universes == NULL) {
+ if ((universes = (unistruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (unistruct))) == NULL)
+ return;
+ }
+ gp = &universes[MI_SCREEN(mi)];
+
+ gp->f_hititerations = MI_CYCLES(mi);
+ gp->f_deltat = ((double) MAX_IDELTAT) / 10000.0;
+
+ gp->clip.left = 0;
+ gp->clip.top = 0;
+ gp->clip.right = MI_WIN_WIDTH(mi);
+ gp->clip.bottom = MI_WIN_HEIGHT(mi);
+
+ gp->scale = (double) (gp->clip.right + gp->clip.bottom) / 8.0;
+ gp->midx = gp->clip.right / 2;
+ gp->midy = gp->clip.bottom / 2;
+ startover(mi);
+}
+
+void
+draw_galaxy(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ unistruct *gp = &universes[MI_SCREEN(mi)];
+ double d; /* tmp */
+ int i, j, k; /* more tmp */
+
+ for (i = 0; i < gp->ngalaxies; ++i) {
+ Galaxy *gt = &gp->galaxies[i];
+
+ for (j = 0; j < gp->galaxies[i].nstars; ++j) {
+ Star *st = >->stars[j];
+
+ for (k = 0; k < gp->ngalaxies; ++k) {
+ Galaxy *gtk = &gp->galaxies[k];
+
+ gp->diff[0] = gtk->pos[0] - st->pos[0];
+ gp->diff[1] = gtk->pos[1] - st->pos[1];
+ gp->diff[2] = gtk->pos[2] - st->pos[2];
+ d = gp->diff[0] * gp->diff[0] + gp->diff[1] * gp->diff[1] +
+ gp->diff[2] * gp->diff[2];
+ if (d < EPSILON)
+ d = EPSILON;
+ d = gt->mass / (d * sqrt(d)) * gp->f_deltat * QCONS;
+ gp->diff[0] *= d;
+ gp->diff[1] *= d;
+ gp->diff[2] *= d;
+ st->vel[0] += gp->diff[0];
+ st->vel[1] += gp->diff[1];
+ st->vel[2] += gp->diff[2];
+ }
+
+ st->color = COLORSTEP * gt->galcol + ((int) ((st->vel[0] * st->vel[0] +
+ st->vel[1] * st->vel[1] + st->vel[2] * st->vel[2]) / 3.0)) % COLORSTEP;
+
+ st->pos[0] += st->vel[0] * gp->f_deltat;
+ st->pos[1] += st->vel[1] * gp->f_deltat;
+ st->pos[2] += st->vel[2] * gp->f_deltat;
+
+ if (st->px >= gp->clip.left &&
+ st->px <= gp->clip.right - st->size &&
+ st->py >= gp->clip.top &&
+ st->py <= gp->clip.bottom - st->size) {
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ drawStar(st->px, st->py, st->size);
+ }
+ st->px = (int) (st->pos[0] * gp->scale) + gp->midx;
+ st->py = (int) (st->pos[1] * gp->scale) + gp->midy;
+
+
+#ifdef WRAP
+ if (st->px < gp->clip.left) {
+ (void) printf("wrap l -> r\n");
+ st->px = gp->clip.right;
+ }
+ if (st->px > gp->clip.right) {
+ (void) printf("wrap r -> l\n");
+ st->px = gp->clip.left;
+ }
+ if (st->py > gp->clip.bottom) {
+ (void) printf("wrap b -> t\n");
+ st->py = gp->clip.top;
+ }
+ if (st->py < gp->clip.top) {
+ (void) printf("wrap t -> b\n");
+ st->py = gp->clip.bottom;
+ }
+#endif /*WRAP */
+
+
+ if (st->px >= gp->clip.left &&
+ st->px <= gp->clip.right - st->size &&
+ st->py >= gp->clip.top &&
+ st->py <= gp->clip.bottom - st->size) {
+ if (MI_NPIXELS(mi) > 2)
+ XSetForeground(display, gc, MI_PIXEL(mi, st->color));
+ else
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+ if (tracks)
+ drawStar(st->px + 1, st->py, st->size);
+ else
+ drawStar(st->px, st->py, st->size);
+ }
+ }
+
+ for (k = i + 1; k < gp->ngalaxies; ++k) {
+ Galaxy *gtk = &gp->galaxies[k];
+
+ gp->diff[0] = gtk->pos[0] - gt->pos[0];
+ gp->diff[1] = gtk->pos[1] - gt->pos[1];
+ gp->diff[2] = gtk->pos[2] - gt->pos[2];
+ d = gp->diff[0] * gp->diff[0] + gp->diff[1] * gp->diff[1] +
+ gp->diff[2] * gp->diff[2];
+ if (d < EPSILON)
+ d = EPSILON;
+ d = gt->mass * gt->mass / (d * sqrt(d)) * gp->f_deltat * QCONS;
+ gp->diff[0] *= d;
+ gp->diff[1] *= d;
+ gp->diff[2] *= d;
+ gt->vel[0] += gp->diff[0] / gt->mass;
+ gt->vel[1] += gp->diff[1] / gt->mass;
+ gt->vel[2] += gp->diff[2] / gt->mass;
+ gtk->vel[0] -= gp->diff[0] / gtk->mass;
+ gtk->vel[1] -= gp->diff[1] / gtk->mass;
+ gtk->vel[2] -= gp->diff[2] / gtk->mass;
+ }
+ gt->pos[0] += gt->vel[0] * gp->f_deltat;
+ gt->pos[1] += gt->vel[1] * gp->f_deltat;
+ gt->pos[2] += gt->vel[2] * gp->f_deltat;
+ }
+
+ gp->step++;
+ if (gp->step > gp->f_hititerations * 4)
+ startover(mi);
+}
+
+void
+release_galaxy(ModeInfo * mi)
+{
+ if (universes != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++)
+ free_galaxies(&universes[screen]);
+ (void) free((void *) universes);
+ universes = NULL;
+ }
+}
+
+void
+refresh_galaxy(ModeInfo * mi)
+{
+ /* Do nothing, it will refresh by itself */
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)geometry.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * geometry.c - low cpu screen design for xlock, the X Window System
+ * lockscreen.
+ *
+ * Copyright (c) 1994 by Darrick Brown.
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 06-Mar-95: Cleaned up code.
+ * 11-Jul-94: Written.
+ *
+ * This screen design has n (2 <= n <= MAXINT) number of points that
+ * randomly move around the screen. Each point is connected to every
+ * other point by a line. Gives the sensation of abstract 3D morphing.
+ *
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Geometry"
+#define HACK_INIT init_geometry
+#define HACK_DRAW draw_geometry
+#define DEF_DELAY 10000
+#define DEF_BATCHCOUNT -10
+#define DEF_NCOLORS 200
+#define SPREAD_COLORS
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt geometry_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+/* remember: the number of lines to be drawn is 1+2+3+...+PTS */
+#define MINPTS 2
+
+typedef struct {
+ float sx, sy;
+ float ex, ey;
+ float dx, dy;
+ float px, py;
+ float oldx, oldy;
+} geompoint;
+typedef struct {
+ geompoint *point;
+ float colors;
+ int width;
+ int height;
+ float top, bottom, left, right;
+ int num;
+} movepoint;
+
+static movepoint *pts = NULL;
+
+#define SQR(v) ((v) * (v))
+#define TFX(x) ((int) ((x / pt->right) * (float) pt->width))
+#define TFY(y) (pt->height - (int) ((y / pt->top) * (float) pt->height))
+
+static void
+eraselines(ModeInfo * mi)
+{
+ int i, j;
+ movepoint *pt = &pts[MI_SCREEN(mi)];
+
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WIN_BLACK_PIXEL(mi));
+ for (i = 0; i < pt->num - 1; i++) {
+ for (j = i + 1; j < pt->num; j++) {
+ XDrawLine(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ TFX(pt->point[i].oldx), TFY(pt->point[i].oldy),
+ TFX(pt->point[j].oldx), TFY(pt->point[j].oldy));
+ }
+ }
+}
+
+
+static void
+drawlines(ModeInfo * mi)
+{
+ int i, j;
+ movepoint *pt = &pts[MI_SCREEN(mi)];
+
+ for (i = 0; i < pt->num - 1; i++) {
+ for (j = i + 1; j < pt->num; j++) {
+ XDrawLine(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ TFX(pt->point[i].px), TFY(pt->point[i].py),
+ TFX(pt->point[j].px), TFY(pt->point[j].py));
+ }
+ }
+}
+
+void
+init_geometry(ModeInfo * mi)
+{
+ int i;
+ float dist, speed;
+ movepoint *pt;
+
+ if (pts == NULL) {
+ if ((pts = (movepoint *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (movepoint))) == NULL)
+ return;
+ }
+ pt = &pts[MI_SCREEN(mi)];
+
+ pt->width = MI_WIN_WIDTH(mi);
+ pt->height = MI_WIN_HEIGHT(mi);
+
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+
+ /* keep the window parameters proportional */
+ pt->top = 10000.0;
+ pt->bottom = 0;
+ pt->right = (float) (pt->width) / (float) (pt->height) * (10000.0);
+ pt->left = 0;
+
+ pt->num = MI_BATCHCOUNT(mi);
+ if (pt->num < -MINPTS) {
+ if (pt->point) {
+ (void) free((void *) pt->point);
+ pt->point = NULL;
+ }
+ pt->num = NRAND(-pt->num - MINPTS + 1) + MINPTS;
+ }
+ /* Absolute minimum */
+ if (pt->num < MINPTS)
+ pt->num = MINPTS;
+ if (!pt->point)
+ pt->point = (geompoint *) malloc(pt->num * sizeof (geompoint));
+
+ for (i = 0; i < pt->num; i++) {
+ pt->point[i].sx = (float) (NRAND((int) pt->right));
+ pt->point[i].sy = (float) (NRAND(10000));
+ pt->point[i].px = pt->point[i].sx;
+ pt->point[i].py = pt->point[i].sy;
+ pt->point[i].ex = (float) (NRAND((int) pt->right));
+ pt->point[i].ey = (float) (NRAND(10000));
+ pt->point[i].dx = pt->point[i].ex - pt->point[i].sx;
+ pt->point[i].dy = pt->point[i].ey - pt->point[i].sy;
+ dist = sqrt((pt->point[i].dx * pt->point[i].dx) +
+ (pt->point[i].dy * pt->point[i].dy));
+ pt->point[i].dx /= dist;
+ pt->point[i].dy /= dist;
+ speed = (float) (NRAND(15) + 21); /* a float 15.0-36.0 */
+ pt->point[i].dx *= speed;
+ pt->point[i].dy *= speed;
+ }
+ if (MI_NPIXELS(mi) > 2)
+ pt->colors = (float) NRAND(MI_NPIXELS(mi));
+}
+
+void
+draw_geometry(ModeInfo * mi)
+{
+ int i;
+ float dist, speed;
+ movepoint *pt = &pts[MI_SCREEN(mi)];
+
+ for (i = 0; i < pt->num; i++) {
+ pt->point[i].oldx = pt->point[i].px;
+ pt->point[i].oldy = pt->point[i].py;
+ pt->point[i].px += pt->point[i].dx;
+ pt->point[i].py += pt->point[i].dy;
+ }
+
+ eraselines(mi);
+
+ pt->colors += (float) MI_NPIXELS(mi) / 200.0;
+ if (pt->colors >= MI_NPIXELS(mi))
+ pt->colors = 0.0;
+ if (MI_NPIXELS(mi) > 2)
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_PIXEL(mi, (int) pt->colors));
+ else
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WIN_WHITE_PIXEL(mi));
+ drawlines(mi);
+
+ for (i = 0; i < pt->num; i++)
+ if (sqrt(SQR(pt->point[i].px - pt->point[i].ex) +
+ SQR(pt->point[i].py - pt->point[i].ey)) <= 50.0) {
+
+ pt->point[i].sx = pt->point[i].px; /* Set it to the current point */
+ pt->point[i].sy = pt->point[i].py;
+ pt->point[i].ex = (float) (NRAND((int) pt->right));
+ pt->point[i].ey = (float) (NRAND(10000));
+ pt->point[i].dx = pt->point[i].ex - pt->point[i].sx;
+ pt->point[i].dy = pt->point[i].ey - pt->point[i].sy;
+ dist = sqrt((pt->point[i].dx * pt->point[i].dx) +
+ (pt->point[i].dy * pt->point[i].dy));
+ pt->point[i].dx /= dist;
+ pt->point[i].dy /= dist;
+ speed = (float) (NRAND(15) + 36); /* a float 1.5-3.6 */
+ pt->point[i].dx *= speed;
+ pt->point[i].dy *= speed;
+ }
+}
+
+void
+release_geometry(ModeInfo * mi)
+{
+ if (pts != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ movepoint *pt = &pts[screen];
+
+ if (pt->point)
+ (void) free((void *) pt->point);
+ }
+ (void) free((void *) pts);
+ pts = NULL;
+ }
+}
+
+void
+refresh_geometry(ModeInfo * mi)
+{
+ /* Do nothing, it will refresh by itself */
+}
--- /dev/null
+./bitmaps/m-ghost.xbm
\ No newline at end of file
--- /dev/null
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)buildlwo.c 4.02 97/04/20 xlockmore";
+
+#endif
+
+/*-
+ * buildlwo.c: Lightwave Object Display List Builder for OpenGL
+ *
+ * This module can be called by any GL mode wishing to use
+ * objects created in NewTek's Lightwave 3D. The objects must
+ * first be converted to C source with my converter "lw2ogl".
+ * If other people are interested in this, I will put up a
+ * web page for it at http://www.early.com/~emackey/lw2ogl/
+ *
+ * by Ed Mackey, 4/19/97
+ *
+ */
+
+
+#include "xlock.h"
+
+#ifdef USE_GL
+
+#include <GL/gl.h>
+#include <GL/glu.h>
+#include "glx/buildlwo.h"
+
+GLuint
+BuildLWO(int wireframe, struct lwo *object)
+{
+ GLuint dl_num;
+ GLfloat *pnts, *normals, three[3], *grab;
+ unsigned short int *pols;
+ int p, num_pnts = 0;
+
+ dl_num = glGenLists(1);
+ if (!dl_num)
+ return (0);
+
+ pnts = object->pnts;
+ normals = object->normals;
+ pols = object->pols;
+
+ glNewList(dl_num, GL_COMPILE);
+
+ if (!pols) {
+ num_pnts = object->num_pnts;
+ glBegin(GL_POINTS);
+ for (p = 0; p < num_pnts; ++p) {
+ three[0] = *(pnts++);
+ three[1] = *(pnts++);
+ three[2] = *(pnts++);
+ glVertex3fv(three);
+ }
+ glEnd();
+ } else
+ for (;;) {
+ if (num_pnts <= 0) {
+ num_pnts = *pols + 2;
+ if (num_pnts < 3)
+ break;
+ if (num_pnts == 3) {
+ glBegin(GL_POINTS);
+ } else if (num_pnts == 4) {
+ glBegin(GL_LINES);
+ } else {
+ three[0] = *(normals++);
+ three[1] = *(normals++);
+ three[2] = *(normals++);
+ glNormal3fv(three);
+ if (wireframe)
+ glBegin(GL_LINE_LOOP);
+ else
+ glBegin(GL_POLYGON);
+ }
+ } else if (num_pnts == 1) {
+ glEnd();
+ } else {
+ grab = pnts + ((int) (*pols) * 3);
+ three[0] = *(grab++);
+ three[1] = *(grab++);
+ three[2] = *(grab++);
+ glVertex3fv(three);
+ }
+ --num_pnts;
+ ++pols;
+ }
+
+ glEndList();
+
+ return (dl_num);
+}
+
+#endif /* USE_GL */
+
+/* End of buildlwo.c */
--- /dev/null
+/* buildlwo.h: Header file for Lightwave Object Display List Builder for OpenGL
+ *
+ * by Ed Mackey, 4/19/97
+ *
+ */
+
+#ifndef __BUILD_LWO_H__
+#define __BUILD_LWO_H__
+
+struct lwo
+{
+ int num_pnts;
+ GLfloat *pnts;
+ GLfloat *normals;
+ unsigned short int *pols;
+ GLfloat *smoothnormals;
+};
+
+GLuint BuildLWO(int wireframe, struct lwo *object);
+
+#endif
+
+/* End of buildlwo.h */
--- /dev/null
+static unsigned char WoodTextureWidth=199;
+static unsigned char WoodTextureHeight=37;
+static unsigned char WoodTextureData[]={
+ 84, 30, 12, 84, 26, 12,108, 42, 28,100, 38, 28,108, 42, 28,
+108, 46, 28,100, 38, 28,108, 46, 28,108, 42, 28,108, 42, 20,
+108, 42, 28,108, 38, 20,108, 42, 20,108, 42, 28,116, 42, 28,
+108, 42, 20,108, 46, 28,100, 34, 12,108, 42, 20,108, 42, 20,
+108, 42, 20,108, 38, 20,100, 38, 20,100, 38, 20,108, 42, 20,
+108, 42, 20,108, 38, 20,100, 38, 20,108, 38, 20,100, 38, 20,
+108, 42, 20,108, 42, 20,108, 42, 28,108, 42, 20,108, 42, 20,
+100, 38, 20,100, 38, 20,100, 38, 20,108, 38, 20,116, 50, 28,
+108, 42, 28,108, 42, 20,100, 38, 20,108, 42, 20,108, 42, 20,
+108, 46, 28,108, 42, 20,108, 42, 20,108, 42, 20,100, 38, 20,
+108, 38, 20,100, 38, 20,108, 38, 20,100, 38, 20,100, 38, 20,
+108, 38, 20,100, 38, 20,108, 38, 20,100, 42, 20,108, 42, 20,
+108, 42, 28,108, 42, 20,100, 38, 20,108, 42, 20,100, 38, 20,
+100, 34, 12,100, 38, 20,108, 38, 20,100, 38, 20,108, 42, 20,
+108, 42, 20,108, 42, 20,100, 38, 20,108, 38, 20,100, 38, 20,
+100, 34, 12,100, 38, 20,108, 38, 20,100, 38, 20,108, 42, 20,
+100, 38, 20,100, 34, 12,100, 34, 12,100, 38, 20,108, 38, 20,
+100, 38, 20,108, 38, 20,108, 42, 20,100, 38, 20,108, 42, 20,
+108, 42, 28,108, 46, 20,108, 38, 20,108, 42, 20,108, 46, 28,
+108, 46, 28,108, 42, 20,108, 42, 20,108, 42, 20,100, 38, 20,
+108, 42, 20,100, 38, 20,108, 38, 20,100, 38, 20,108, 38, 20,
+108, 42, 20,108, 46, 28,116, 50, 28,116, 54, 36,116, 54, 36,
+116, 54, 28,108, 46, 28,108, 42, 20,108, 42, 28,108, 42, 20,
+108, 42, 20,108, 46, 28,116, 50, 28,116, 50, 28,116, 50, 28,
+116, 46, 28,108, 42, 28,116, 50, 36,116, 50, 36,100, 38, 20,
+108, 42, 28,108, 38, 20,100, 38, 20,108, 38, 20,108, 42, 28,
+108, 46, 28,116, 46, 28,108, 42, 28,108, 42, 28,108, 42, 20,
+108, 46, 28,116, 50, 28,116, 50, 28,116, 50, 28,116, 50, 28,
+108, 42, 28,108, 42, 20,100, 38, 20,116, 50, 28,108, 46, 28,
+108, 42, 20,108, 42, 20,108, 46, 28,116, 46, 28,108, 46, 28,
+108, 46, 28,108, 46, 20,108, 46, 28,116, 46, 28,108, 46, 28,
+116, 50, 28,108, 46, 28,108, 46, 28,108, 42, 20,116, 46, 28,
+108, 46, 28,108, 42, 20,108, 42, 28,108, 46, 28,116, 50, 28,
+116, 50, 28,116, 50, 36,124, 54, 36,116, 54, 36,116, 54, 28,
+116, 50, 28,116, 50, 28,108, 46, 28,116, 46, 28,108, 46, 28,
+116, 50, 28,116, 46, 28,116, 50, 28,116, 50, 28,116, 50, 28,
+116, 50, 28,108, 46, 28,108, 46, 20,124, 50, 36,116, 54, 28,
+124, 54, 28,116, 54, 28,116, 54, 28,116, 54, 28,124, 54, 36,
+124, 58, 36,124, 50, 36,116, 46, 28,116, 46, 28,116, 42, 28,
+116, 50, 36,124, 66, 44,108, 58, 36, 84, 30, 12,100, 42, 20,
+116, 54, 36,140, 82, 68,148, 86, 68,148, 86, 68,156, 90, 76,
+148, 86, 68,156, 86, 76,156, 86, 68,148, 86, 68,156, 86, 68,
+156, 86, 68,156, 86, 68,156, 86, 68,156, 90, 68,156, 86, 68,
+156, 90, 68,164, 94, 76,164, 98, 84,164,102, 84,164,102, 84,
+164, 98, 76,156, 94, 68,164, 94, 76,156, 94, 76,164, 98, 84,
+164, 98, 76,164, 98, 76,156, 94, 76,164, 98, 76,164, 98, 76,
+164,102, 84,164,102, 84,172,106, 84,172,106, 84,164, 98, 76,
+164, 94, 68,164, 94, 68,164, 98, 76,172,106, 84,164, 98, 76,
+164, 98, 76,164, 94, 68,164, 94, 76,164, 98, 76,164, 98, 76,
+164, 98, 76,164,102, 84,172,102, 84,172,106, 84,172,106, 84,
+172,106, 84,172,106, 76,164, 98, 76,164, 98, 76,164, 98, 76,
+164, 98, 76,164, 94, 68,164, 98, 76,164, 98, 76,164,102, 76,
+164, 94, 76,156, 94, 68,172,102, 84,172,106, 84,172,102, 84,
+164, 98, 76,164,102, 76,172,102, 84,172,106, 84,172,106, 84,
+172,106, 84,172,102, 84,164,102, 76,164, 98, 76,164, 98, 76,
+164, 98, 76,164, 98, 76,164, 98, 76,172,102, 76,164, 98, 76,
+164, 94, 76,156, 94, 68,164, 98, 76,164,102, 76,164, 98, 76,
+164, 98, 76,164, 94, 76,156, 94, 68,164, 94, 76,164,102, 76,
+172,106, 84,164, 98, 76,164, 98, 76,164, 98, 76,164, 98, 76,
+164, 98, 76,164, 98, 76,164, 98, 76,164,102, 76,172,102, 84,
+172,106, 84,172,110, 84,180,110, 92,172,110, 84,172,110, 84,
+180,114, 92,188,122,100,188,122,100,188,122,100,188,118, 92,
+180,110, 92,172,106, 84,172,106, 84,172,106, 84,180,114, 92,
+188,118,100,188,118,100,180,118,100,188,122,108,188,126,108,
+188,118,100,196,130,108,204,134,116,188,126,108,196,122,108,
+180,118,100,180,110, 92,180,114,100,180,118,100,188,118,100,
+188,122,108,188,118,100,188,118,100,180,118,100,188,118,100,
+180,118,100,180,118,100,180,118,100,180,114, 92,180,114, 92,
+172,110, 92,172,106, 84,180,114, 92,172,106, 92,172,102, 84,
+172,106, 84,172,110, 92,180,110, 84,172,110, 92,172,106, 84,
+172,102, 84,172,102, 84,172,106, 84,172,106, 84,172,106, 84,
+172,106, 84,172,106, 84,172,106, 84,172,106, 84,172,102, 84,
+164,102, 84,164,102, 76,172,106, 84,172,110, 92,180,110, 92,
+172,110, 84,172,114, 92,180,114, 92,180,110, 92,172,110, 92,
+172,106, 92,172,106, 84,172,106, 84,164,102, 84,180,114,100,
+180,114, 92,180,118,100,180,118,100,180,114, 92,172,110, 92,
+172,106, 84,172,106, 84,180,110, 92,180,114, 92,180,114, 92,
+172,110, 92,172,110, 84,172,110, 92,180,114, 92,180,118,100,
+196,126,100,196,122,108,196,126,108,196,130,116,196,134,116,
+204,142,124,164,106, 84,100, 42, 20, 84, 26, 4,132, 78, 68,
+188,122,108,188,122,108,188,126,116,196,134,116,188,122,108,
+188,126,108,188,126,108,188,122,108,196,126,108,196,130,108,
+188,126,108,188,122,100,196,126,108,196,126,108,188,126,108,
+196,130,108,196,130,108,196,134,116,196,130,108,196,130,108,
+188,126,108,196,126,108,188,126,108,196,130,108,188,126,108,
+188,126,108,196,126,108,188,126,108,196,130,108,196,130,108,
+196,134,116,204,142,116,204,134,116,196,130,108,196,130,108,
+188,126,108,196,126,100,196,134,108,196,130,108,188,126,100,
+188,122,100,188,126,108,196,126,100,188,126,108,196,126,100,
+188,126,100,196,130,108,204,134,108,196,134,116,196,134,108,
+196,130,108,196,126,108,196,130,108,196,130,108,196,130,108,
+188,126,108,196,126,108,196,134,108,196,130,108,196,130,108,
+188,122,100,196,130,108,196,130,108,196,134,108,196,130,108,
+188,126,100,196,130,108,196,134,108,204,134,116,204,138,116,
+204,138,116,204,134,116,196,130,108,196,130,108,196,134,108,
+204,134,116,196,134,116,196,134,108,196,130,108,196,130,108,
+204,134,116,204,138,116,204,138,116,196,130,108,196,130,108,
+188,122,100,180,118, 92,188,118,100,196,130,108,196,130,108,
+188,126,100,188,122,100,188,122,100,204,134,108,196,134,116,
+204,134,116,196,134,108,196,130,108,204,134,108,204,138,116,
+204,138,116,212,142,124,204,142,116,204,134,116,204,138,116,
+204,138,116,204,138,116,204,134,108,188,126,108,196,130,108,
+196,126,100,188,122,100,196,130,108,204,138,116,212,146,124,
+204,142,116,204,138,116,212,146,124,212,142,124,204,138,124,
+204,138,124,204,138,124,204,138,116,212,142,124,204,138,124,
+196,130,116,204,134,116,204,138,116,204,138,124,204,138,116,
+204,138,124,204,134,116,204,138,124,212,142,124,204,138,116,
+196,134,116,196,130,108,196,134,116,204,138,116,204,142,124,
+212,142,124,204,138,116,204,138,116,204,138,116,204,138,116,
+204,138,124,204,142,124,204,142,116,204,138,124,196,134,108,
+196,134,116,196,134,116,196,130,116,196,130,108,188,126,108,
+196,126,108,188,130,108,188,126,108,188,122,100,180,118,100,
+188,118,100,188,126,108,196,130,108,196,126,108,188,126,108,
+188,122,100,188,122,108,188,126,108,196,126,108,196,130,108,
+188,126,108,196,126,108,188,126,108,196,134,108,196,134,116,
+196,134,108,196,130,108,196,126,108,188,122,108,188,122,100,
+188,122,100,196,130,108,196,130,100,196,130,108,196,130,100,
+188,130,108,196,130,108,196,134,108,204,138,116,204,130,108,
+204,134,116,204,134,116,204,134,116,204,138,124,204,146,124,
+156,102, 84, 84, 26, 4, 84, 26, 4,116, 58, 36,164,106, 92,
+164,102, 84,164,106, 92,172,110, 92,156, 98, 84,172,102, 84,
+172,102, 84,180,110, 92,180,118,100,180,118,100,180,110, 92,
+180,110, 92,180,114, 92,180,114, 92,180,114, 92,172,106, 92,
+172,106, 84,172,106, 84,172,106, 92,172,110, 92,172,110, 92,
+172,106, 84,172,106, 84,164,102, 84,164,102, 84,172,102, 76,
+164,102, 84,172,106, 84,172,106, 84,172,110, 92,172,110, 84,
+180,110, 92,172,110, 84,180,110, 92,172,110, 84,172,106, 84,
+172,110, 84,180,110, 92,172,106, 84,172,102, 84,164,102, 84,
+172,102, 76,172,102, 84,172,102, 84,164,102, 76,164, 94, 76,
+172,102, 84,172,110, 92,172,110, 84,172,102, 84,164, 98, 76,
+172,102, 76,172,106, 84,172,110, 84,172,106, 84,172,106, 84,
+172,106, 84,180,114, 92,180,114, 92,172,110, 84,172,106, 84,
+172,102, 76,172,110, 84,172,110, 84,172,102, 84,172,102, 84,
+172,106, 84,180,110, 92,172,110, 84,180,118, 92,180,114, 92,
+180,110, 92,172,110, 84,180,110, 92,180,114, 92,180,118, 92,
+188,122,100,188,118,100,180,114, 92,180,118, 92,180,114, 92,
+180,118, 92,188,118,100,180,118, 92,180,114, 92,180,118, 92,
+180,110, 84,180,110, 92,180,118, 92,188,122,100,188,114,100,
+180,114, 92,180,114, 92,196,126,108,188,126,100,188,122,100,
+188,118,100,180,118,100,180,114, 92,188,118,100,188,122,100,
+180,110, 92,172,110, 84,180,110, 92,180,114, 92,188,122,100,
+188,126,100,188,118,100,180,114, 92,172,110, 84,172,110, 92,
+180,114, 92,180,114, 92,180,118, 92,188,118,100,188,122,100,
+188,122,100,180,106, 92,172,110, 92,172,102, 84,172,102, 84,
+164, 94, 76,164, 94, 76,164, 98, 76,164,102, 84,172,102, 84,
+172,106, 84,180,110, 92,180,110, 92,180,110, 92,172,106, 92,
+172,106, 84,172,106, 92,172,110, 84,164,102, 84,164, 98, 76,
+164, 94, 76,164, 98, 76,172,110, 92,180,114, 92,180,118,100,
+180,118,100,188,122,100,180,122,108,188,122,100,188,122,100,
+188,122,100,188,122,100,188,126,108,188,122,100,188,126,108,
+188,122,100,188,122,100,180,118,100,180,114, 92,180,114, 92,
+180,118,100,180,110, 92,172,110, 92,172,106, 84,180,110, 92,
+180,118, 92,180,118,100,180,114, 92,180,110, 92,172,110, 84,
+172,110, 92,180,114, 92,180,114, 92,180,118, 92,180,118, 92,
+180,114, 92,180,118, 92,180,110, 92,180,110, 92,180,114, 92,
+172,110, 92,172,106, 84,172,106, 84,172,106, 92,172,110, 84,
+180,110, 92,180,114, 92,180,118, 92,180,118, 92,180,118, 92,
+180,118, 92,188,118,100,188,122,100,180,114,100,180,110, 92,
+188,114,100,180,110, 92,172,110, 92,180,126,108,148, 98, 76,
+ 84, 26, 4, 84, 26, 12,108, 50, 36,164,102, 84,164, 98, 84,
+156, 94, 76,164, 98, 84,148, 86, 68,156, 90, 76,156, 94, 84,
+164, 90, 76,164, 98, 84,172,102, 84,164, 94, 76,156, 90, 68,
+164, 94, 76,164, 98, 84,164, 94, 76,164, 98, 76,164, 98, 84,
+164, 98, 76,172,102, 84,172,106, 84,172,106, 84,172,106, 84,
+164,102, 84,164, 94, 68,164, 94, 76,156, 98, 76,164, 98, 76,
+164, 98, 76,164, 98, 84,164,102, 84,172,102, 84,164, 98, 76,
+164, 98, 76,172,102, 84,172,106, 84,172,106, 84,180,106, 84,
+172,110, 84,172,106, 84,164,102, 76,164, 98, 76,164, 98, 76,
+164,102, 76,164,102, 76,164, 98, 76,164, 98, 76,172,106, 84,
+180,110, 84,172,106, 84,164, 98, 76,164, 98, 76,172,106, 84,
+180,114, 92,172,106, 84,164,102, 76,164, 98, 76,172,106, 84,
+180,110, 92,180,114, 92,180,110, 92,172,106, 84,172,106, 84,
+180,114, 92,188,118,100,180,114, 92,172,110, 84,180,114, 92,
+180,114, 92,180,114, 92,172,110, 92,172,106, 84,164,102, 76,
+172,102, 76,164,102, 84,180,110, 84,180,118, 92,188,118,100,
+188,122,100,180,118, 92,180,110, 92,180,110, 84,172,106, 92,
+180,114, 84,180,114,100,188,122,100,188,122,100,180,114, 92,
+172,110, 92,180,114, 92,188,118, 92,180,114, 92,180,114, 92,
+180,118, 92,164,102, 84,172,102, 84,172,106, 84,172,102, 76,
+164,102, 76,172,102, 84,172,110, 84,180,114, 92,172,110, 84,
+172,102, 84,172,106, 84,180,110, 84,180,118,100,188,118, 92,
+180,110, 92,172,106, 84,172,106, 84,180,110, 92,188,118, 92,
+180,118,100,180,114, 92,180,114, 92,180,114, 92,180,118,100,
+180,114, 92,188,122,100,188,126,108,188,118,100,172,110, 92,
+172,102, 84,172,106, 84,180,106, 92,164, 98, 76,172,102, 84,
+172,106, 92,172,106, 84,172,106, 84,172,102, 84,172,102, 84,
+172,102, 84,172,106, 84,164,102, 84,164, 98, 76,164, 98, 76,
+172,106, 84,172,110, 92,180,114, 92,180,114, 92,180,118,100,
+188,122,100,188,122,100,188,126,108,188,122,100,188,122,100,
+188,122,108,196,126,108,180,118, 92,188,118,100,180,118,100,
+180,118,100,180,114, 92,180,110, 92,180,114, 92,180,118,100,
+180,110, 92,172,110, 84,172,106, 92,172,110, 92,188,118,100,
+180,118,100,180,114, 92,172,106, 84,180,110, 92,180,114, 92,
+172,110, 92,180,114, 92,180,114,100,180,114, 92,172,110, 92,
+172,110, 92,180,114, 92,180,114, 92,180,114,100,180,110, 92,
+172,110, 92,172,110, 92,180,114, 92,180,118, 92,172,106, 84,
+180,110, 84,180,118, 92,188,122,100,180,118,100,180,118, 92,
+180,118, 92,180,114, 92,180,110, 92,180,110, 92,188,118,108,
+188,118,100,188,122,100,188,130,108,156,102, 84, 84, 26, 12,
+ 84, 30, 12,108, 46, 28,140, 82, 68,156, 90, 76,156, 94, 84,
+156, 94, 84,156, 94, 76,164, 94, 76,156, 90, 76,164, 94, 76,
+156, 94, 76,156, 90, 68,156, 90, 68,164, 90, 76,156, 90, 68,
+148, 82, 60,148, 78, 60,164, 98, 76,164, 94, 76,156, 90, 68,
+156, 90, 68,156, 94, 76,164, 98, 76,164, 98, 76,164, 98, 76,
+156, 90, 68,148, 86, 68,156, 90, 68,156, 90, 68,156, 90, 76,
+164, 94, 68,156, 94, 76,156, 94, 68,156, 90, 68,156, 90, 68,
+172,102, 76,180,114, 92,188,118, 92,172,106, 84,180,106, 84,
+172,106, 84,164, 98, 76,164, 94, 68,164, 98, 76,172,102, 84,
+172,106, 84,172,102, 76,164, 98, 76,172,106, 84,180,110, 92,
+172,110, 84,172, 98, 76,164, 98, 76,172,106, 84,180,118, 92,
+180,106, 84,180,106, 84,172,106, 84,172,110, 84,180,110, 92,
+180,110, 84,172,102, 76,164, 98, 76,164, 94, 68,172,106, 84,
+180,114, 92,172,106, 84,164, 98, 76,172, 98, 76,172,106, 84,
+172,106, 84,180,106, 84,180,110, 84,172,110, 84,180,110, 92,
+180,110, 84,180,110, 92,180,110, 84,172,106, 84,188,118, 92,
+188,114, 92,172,106, 84,172,102, 76,172,106, 84,188,118, 92,
+188,122,100,188,118,100,188,118, 92,180,110, 92,180,114, 84,
+180,114, 92,180,110, 92,172,106, 84,164, 98, 76,172,102, 76,
+180,106, 84,180,114, 84,172,102, 76,164, 94, 76,172,106, 84,
+180,110, 84,172,106, 84,172,106, 84,188,122,100,188,118, 92,
+180,118, 92,188,118,100,196,122,100,188,122,100,180,118, 92,
+180,110, 84,188,114, 92,172,110, 84,172,106, 84,180,114, 92,
+188,114, 92,180,114, 92,180,114, 84,180,114, 92,180,110, 92,
+180,110, 92,180,110, 92,172,106, 84,164, 98, 76,172,110, 92,
+188,118,100,180,118, 92,180,110, 92,180,114,100,180,118,100,
+172,106, 84,164, 94, 76,164, 98, 76,172,102, 76,164,102, 84,
+164,102, 84,172,102, 84,172,106, 84,172,106, 84,172,106, 84,
+172,106, 84,172,106, 84,172,106, 92,180,118, 92,180,118,100,
+180,114, 92,180,110, 92,180,114, 92,180,114,100,180,118, 92,
+180,118,100,188,122,108,188,122,100,188,118,100,180,114, 92,
+180,114, 92,172,110, 92,172,110, 92,172,106, 84,188,122,100,
+180,114,100,172,106, 84,172,110, 84,180,114, 92,180,114, 92,
+180,110, 92,172,110, 92,172,106, 84,172,110, 92,180,114, 92,
+180,118,100,180,114, 92,172,110, 92,172,110, 92,180,110, 92,
+164,106, 84,172,106, 84,172,110, 84,172,110, 92,172,110, 92,
+180,110, 84,172,110, 92,172,110, 84,180,110, 92,180,110, 92,
+180,114, 92,180,118, 92,180,118, 92,180,118,100,188,118, 92,
+188,118,100,180,110, 92,180,110, 92,188,118,100,188,118,100,
+180,118,100,180,122,108,148, 90, 68, 84, 30, 12, 92, 34, 12,
+116, 58, 44,156, 90, 76,156, 94, 76,156, 94, 76,156, 90, 76,
+148, 86, 68,156, 90, 76,148, 86, 68,156, 86, 68,156, 86, 68,
+156, 90, 68,156, 90, 76,156, 90, 68,156, 86, 68,148, 78, 60,
+140, 74, 52,148, 82, 68,148, 82, 60,148, 86, 68,156, 90, 68,
+156, 94, 76,164, 98, 76,164, 98, 84,164, 98, 76,148, 86, 68,
+156, 86, 68,156, 90, 68,156, 90, 76,156, 94, 68,156, 94, 76,
+164, 94, 76,164, 98, 76,172,102, 76,164, 98, 76,172,102, 76,
+172,106, 84,180,110, 92,172,106, 84,164, 98, 76,172,102, 76,
+172,102, 84,164, 94, 68,164, 94, 76,172,102, 76,180,110, 84,
+180,110, 92,164, 98, 76,172,102, 76,172,106, 84,172,102, 76,
+164, 98, 76,164, 98, 76,172,102, 76,180,110, 92,180,110, 92,
+172,110, 84,172,106, 84,180,106, 84,180,114, 84,180,110, 92,
+172,102, 84,164, 98, 76,156, 94, 68,172,106, 84,188,114, 92,
+180,110, 84,172,106, 84,172,102, 76,172,106, 84,180,110, 84,
+172,106, 84,172,106, 84,180,110, 84,180,110, 92,180,114, 84,
+172,110, 84,172,106, 84,172,106, 84,164, 98, 76,164, 98, 76,
+164, 98, 76,164, 90, 68,164, 98, 76,172,102, 84,172,106, 76,
+172,102, 76,172,106, 84,172,106, 84,180,110, 84,180,114, 92,
+188,114, 92,180,110, 84,180,110, 92,180,114, 92,172,106, 84,
+180,114, 92,172,106, 84,164, 94, 68,172,106, 84,180,114, 92,
+188,118, 92,196,126,100,188,122,100,188,122,100,188,118, 92,
+180,118, 92,188,118,100,188,118, 92,180,114, 92,172,106, 84,
+180,114, 92,180,106, 84,172,102, 76,172,102, 76,172,106, 84,
+172,102, 84,172,106, 84,180,110, 84,172,102, 84,164,102, 84,
+172,102, 84,164, 94, 76,156, 90, 68,164, 94, 76,180,106, 92,
+172,102, 84,164, 98, 84,180,110, 84,180,110, 92,164, 98, 84,
+164, 94, 76,164, 98, 76,164, 98, 84,172, 98, 76,164,102, 84,
+164,102, 84,172,102, 84,164,106, 84,172,106, 92,172,106, 92,
+172,110, 92,180,110, 84,180,118,100,188,118,100,180,118,100,
+180,114, 92,172,114, 92,180,110, 92,180,110, 92,180,114, 92,
+180,118,100,180,118, 92,180,114,100,180,114, 92,180,110, 92,
+172,110, 92,180,110, 92,172,114, 92,188,118,100,180,114, 92,
+172,110, 92,172,106, 84,172,110, 92,172,110, 92,172,110, 84,
+164,102, 84,172,102, 84,172,110, 92,180,114, 92,180,114, 92,
+180,114, 92,180,110, 92,172,106, 84,172,106, 84,172,110, 92,
+180,110, 92,180,114, 92,180,114, 92,180,118,100,180,114, 92,
+180,114,100,180,114, 92,180,114, 92,180,118, 92,188,118, 92,
+188,122, 92,180,122,100,188,122,100,180,122,100,188,118,100,
+196,122,100,188,118,100,196,122,108,180,114,100,180,114,100,
+180,126,108,148, 98, 76, 92, 34, 12, 84, 26, 12,116, 58, 36,
+148, 90, 76,148, 90, 76,140, 82, 68,148, 82, 68,140, 78, 60,
+156, 86, 68,148, 86, 68,156, 90, 68,156, 90, 76,164, 94, 76,
+156, 90, 76,156, 90, 68,148, 82, 68,148, 78, 60,140, 78, 60,
+156, 86, 68,148, 86, 68,156, 86, 68,156, 90, 68,156, 94, 76,
+164, 94, 76,156, 94, 76,148, 86, 68,148, 82, 60,148, 86, 68,
+156, 90, 68,156, 90, 76,156, 90, 68,156, 90, 68,156, 94, 76,
+164,102, 76,172,102, 84,172,102, 76,172,106, 84,180,110, 84,
+180,114, 84,180,110, 84,172,102, 76,180,106, 84,172,106, 76,
+172, 98, 76,164, 98, 68,172,106, 76,172,106, 84,180,110, 84,
+172, 98, 76,180,106, 84,180,110, 84,180,110, 84,172, 98, 76,
+172, 98, 76,180,106, 84,180,114, 84,188,114, 92,180,110, 84,
+180,110, 84,180,110, 84,180,114, 92,180,110, 84,172,106, 84,
+164, 98, 68,164, 94, 68,180,106, 84,188,118, 92,180,114, 92,
+180,110, 84,180,110, 84,180,110, 92,180,110, 84,172,106, 76,
+180,106, 84,180,110, 84,180,114, 92,188,114, 92,180,110, 84,
+180,106, 84,172,106, 76,180,106, 84,188,114, 92,180,114, 84,
+180,110, 84,180,114, 92,188,118, 92,188,118, 92,180,110, 84,
+180,106, 84,172,106, 76,180,106, 84,188,114, 92,188,118, 92,
+180,118, 92,188,118, 92,196,122,100,172,106, 84,188,114, 84,
+172,106, 84,164, 98, 68,172,102, 76,180,106, 84,180,110, 84,
+188,118, 92,188,122, 92,188,114, 92,180,110, 92,180,114, 84,
+188,118, 92,188,118, 92,180,110, 84,172,102, 84,188,122, 92,
+180,110, 84,164,102, 76,172,102, 76,172, 98, 76,172,102, 76,
+172,102, 76,180,106, 84,180,110, 92,180,106, 84,180,106, 84,
+172,102, 76,164, 90, 76,172, 98, 76,180,110, 92,172,102, 76,
+172,102, 84,180,106, 84,180,110, 84,172,102, 84,172, 98, 76,
+164, 94, 76,164, 98, 76,164, 98, 76,172, 98, 84,164, 98, 76,
+164,102, 84,172,106, 84,172,106, 84,172,110, 92,180,114, 92,
+180,114, 92,188,122,100,188,122,100,188,122,100,180,118,100,
+172,106, 92,172,106, 84,164,106, 84,172,106, 84,180,114, 92,
+180,110, 92,172,110, 84,172,110, 92,180,110, 92,172,110, 92,
+180,114, 92,180,114, 92,180,118, 92,172,110, 92,172,106, 84,
+172,106, 84,172,110, 92,172,106, 84,164,102, 84,164, 94, 76,
+164, 98, 76,172,110, 92,180,114, 92,172,106, 92,172,106, 92,
+172,110, 84,172,106, 92,164,102, 84,172,110, 92,180,110, 92,
+172,110, 92,180,114, 92,180,114, 92,180,118,100,180,114, 92,
+180,118, 92,180,114, 92,188,114, 92,180,118, 92,180,118,100,
+180,118, 92,180,118,100,188,118, 92,180,118, 92,180,110, 92,
+180,106, 92,180,110, 92,172,106, 92,172,106, 84,172,114, 92,
+140, 90, 68, 84, 26, 12, 84, 30, 12,116, 58, 44,156, 90, 76,
+156, 90, 76,148, 86, 68,148, 86, 76,148, 86, 68,156, 90, 76,
+156, 90, 76,164, 94, 84,164, 98, 76,164, 94, 76,156, 90, 68,
+156, 86, 68,156, 86, 60,156, 90, 68,156, 90, 76,164, 94, 76,
+156, 94, 68,156, 94, 76,164, 98, 76,164, 98, 76,164, 98, 76,
+156, 94, 76,156, 94, 68,148, 78, 60,148, 86, 68,156, 90, 68,
+156, 90, 68,148, 86, 68,156, 86, 68,156, 90, 68,164, 98, 76,
+164, 94, 68,172, 98, 76,180,106, 84,188,118, 92,188,118, 92,
+188,118,100,180,114, 92,180,114, 84,180,106, 84,172,102, 76,
+172, 98, 76,172,106, 84,180,106, 84,164, 98, 68,172,102, 76,
+180,114, 84,196,122,100,188,118, 92,172,106, 76,172,102, 76,
+180,110, 84,188,122, 92,188,118, 92,188,114, 92,180,110, 84,
+188,114, 84,188,114, 92,180,114, 84,180,106, 84,172,102, 76,
+164, 94, 68,180,110, 84,188,118, 92,188,118, 92,188,114, 92,
+180,114, 92,188,114, 84,180,114, 92,180,106, 84,180,110, 84,
+180,114, 84,188,114, 92,180,114, 84,180,110, 92,180,110, 84,
+180,106, 84,180,114, 84,188,114, 92,188,114, 92,180,114, 92,
+188,118, 92,196,122,100,188,122, 92,180,114, 92,188,114, 92,
+180,110, 84,180,114, 84,188,118, 92,188,122, 92,188,118, 92,
+188,118, 92,188,122, 92,188,118, 92,196,122,100,188,118, 92,
+188,114, 92,188,122,100,196,126,100,188,118, 92,188,114, 92,
+188,114, 92,180,114, 84,180,110, 84,180,110, 84,188,118, 92,
+188,118, 92,188,118, 92,180,114, 84,196,126,100,188,114, 92,
+180,106, 84,172,106, 76,172,102, 76,172,102, 76,172,106, 76,
+180,110, 84,188,118, 92,180,110, 92,180,114, 92,180,106, 92,
+164, 98, 76,180,106, 84,188,114,100,180,106, 84,180,110, 92,
+180,110, 92,188,114, 92,180,110, 92,172,106, 84,172, 98, 76,
+172, 98, 76,164, 98, 76,164,102, 76,164,102, 84,172,102, 84,
+172,106, 84,172,110, 92,180,118, 92,180,114,100,180,118,100,
+188,122,108,188,126,100,188,118,100,180,114, 92,172,106, 84,
+164,102, 84,172,102, 84,172,110, 92,172,110, 92,172,110, 84,
+172,106, 92,172,106, 84,172,110, 84,172,110, 92,180,110, 92,
+180,114, 92,180,110, 92,172,110, 92,172,110, 92,180,110, 92,
+172,110, 92,180,110, 84,164,102, 84,164, 98, 76,156, 94, 76,
+172,106, 84,180,114, 92,172,106, 84,164,102, 84,172,110, 84,
+172,106, 84,164, 98, 76,172,102, 84,164,106, 84,172,106, 84,
+172,106, 92,172,110, 92,180,110, 92,180,110, 92,172,110, 92,
+180,106, 84,172,110, 84,172,110, 84,180,110, 84,172,110, 84,
+172,110, 84,172,106, 84,172,106, 84,180,106, 92,180,106, 84,
+188,114,100,188,118,100,180,114,100,180,126,108,148, 90, 68,
+ 84, 30, 12, 92, 34, 12,124, 66, 44,156, 98, 84,164,102, 84,
+164, 98, 84,164, 98, 84,156, 94, 76,164, 98, 84,164, 98, 76,
+156, 90, 76,156, 94, 76,164, 94, 76,156, 90, 76,156, 90, 68,
+156, 86, 68,156, 86, 68,164, 94, 68,156, 90, 76,156, 94, 68,
+156, 90, 76,164, 98, 76,164,102, 84,172,106, 84,172,106, 84,
+172,102, 84,148, 82, 60,148, 86, 68,156, 90, 68,156, 90, 68,
+148, 86, 68,148, 82, 60,156, 86, 68,156, 94, 68,156, 86, 68,
+164, 98, 68,180,110, 84,188,118, 92,196,122, 92,196,122,100,
+188,118, 92,188,118, 92,180,110, 92,172,106, 76,172,106, 76,
+180,106, 84,180,106, 84,172,102, 76,180,110, 84,188,118, 92,
+196,126,100,188,118,100,180,110, 84,172,106, 84,188,114, 84,
+188,122,100,196,122,100,188,118, 92,180,114, 84,180,114, 92,
+188,118, 92,188,118, 92,180,110, 84,180,106, 84,172,102, 76,
+180,110, 84,196,122,100,188,122, 92,188,118, 92,188,118, 92,
+188,122, 92,188,114, 92,188,114, 84,180,114, 92,188,114, 84,
+180,110, 92,180,114, 84,188,114, 92,180,114, 84,188,114, 92,
+180,114, 92,188,114, 92,180,114, 84,180,110, 84,180,110, 84,
+188,118, 92,188,114, 92,180,114, 84,188,118, 92,180,114, 92,
+188,114, 92,188,122, 92,188,118,100,188,118, 92,188,118, 92,
+196,122,100,180,114, 92,188,118, 92,180,110, 84,180,110, 84,
+196,130,100,204,134,108,196,126,100,188,118,100,188,122, 92,
+188,114, 92,188,114, 92,188,114, 92,188,122,100,196,122,100,
+196,122,100,188,118, 92,188,118,100,188,118, 92,180,110, 84,
+180,110, 84,180,110, 84,172,102, 76,172,102, 76,180,110, 84,
+180,110, 92,172,106, 84,180,106, 84,172, 98, 76,164, 94, 68,
+172,106, 84,180,110, 92,172,106, 84,180,110, 84,180,110, 84,
+180,114, 92,180,110, 92,180,110, 92,172,106, 84,180,106, 84,
+172,106, 84,172,102, 84,172,102, 76,164,102, 84,172,110, 92,
+180,114, 92,188,118,100,188,122,100,188,118, 92,188,126,108,
+188,122,100,180,118,100,172,110, 92,164,106, 84,172,102, 84,
+172,106, 84,180,114, 92,180,110, 92,172,110, 92,172,106, 84,
+172,106, 84,172,102, 84,172,106, 84,172,106, 84,172,110, 92,
+172,110, 92,172,110, 92,172,110, 84,180,110, 92,172,114, 92,
+180,110, 92,172,106, 92,172,106, 84,156, 94, 68,172,106, 92,
+180,114, 92,172,102, 84,164,102, 84,180,110, 92,172,106, 92,
+164, 98, 76,164,102, 84,172,102, 84,164,102, 84,172,106, 84,
+172,106, 84,172,106, 84,172,106, 84,172,110, 84,172,102, 84,
+172,106, 84,172,106, 84,172,110, 84,172,106, 84,164,106, 84,
+172,106, 84,172,102, 84,172,102, 84,172,102, 84,180,114,100,
+188,118,100,180,118,100,188,126,100,148, 94, 76, 92, 34, 12,
+ 92, 34, 12,116, 62, 44,156, 94, 76,164, 94, 84,156, 94, 76,
+156, 94, 76,148, 86, 68,148, 86, 76,148, 82, 68,148, 78, 60,
+148, 82, 68,156, 90, 68,156, 94, 76,164, 90, 76,156, 90, 68,
+148, 82, 68,148, 82, 60,164, 94, 76,156, 94, 76,156, 94, 68,
+164, 94, 76,164,102, 84,164,102, 84,172,102, 84,164,102, 84,
+156, 90, 68,156, 90, 68,156, 94, 76,156, 90, 68,148, 86, 68,
+148, 86, 68,156, 90, 68,156, 90, 68,164, 98, 76,172,106, 84,
+180,110, 84,180,110, 84,180,114, 92,188,118, 92,180,110, 84,
+188,118, 92,188,118, 92,180,110, 84,180,106, 84,180,114, 84,
+180,114, 84,180,114, 92,188,114, 84,180,114, 92,188,114, 84,
+188,118, 92,188,114, 92,180,114, 92,188,114, 84,180,110, 84,
+196,122,100,188,118, 92,188,114, 92,188,114, 92,188,118, 92,
+188,118, 92,188,118, 92,180,110, 84,172,106, 84,188,114, 92,
+196,122,100,188,122,100,196,122, 92,196,122,100,188,122,100,
+188,118, 92,188,122,100,188,118, 92,188,118, 92,188,114, 92,
+188,118, 92,188,114, 92,188,118, 92,188,122, 92,196,122,100,
+188,126,100,188,118, 92,180,110, 84,188,114, 92,188,122,100,
+196,126,100,188,118,100,196,122, 92,188,114, 92,180,114, 92,
+196,122, 92,188,122,100,188,118, 92,196,122,100,196,126,100,
+188,118, 92,188,118, 92,172, 98, 76,164, 94, 68,180,110, 92,
+188,122, 92,188,114, 92,180,114, 84,204,130,108,196,126,100,
+188,118, 92,188,122, 92,196,122,100,188,122, 92,188,122, 92,
+188,114, 92,180,114, 84,180,110, 84,180,110, 84,180,114, 92,
+180,110, 84,172,102, 76,172,102, 76,180,106, 84,180,110, 92,
+180,106, 84,172,102, 76,172, 98, 76,164, 94, 76,180,106, 84,
+180,110, 92,180,106, 84,172,102, 76,172, 98, 84,172,102, 76,
+180,110, 84,180,110, 84,180,106, 84,180,110, 92,180,114, 92,
+172,110, 92,172,106, 92,172,106, 84,180,110, 92,180,118,100,
+188,122,100,180,122,100,188,118,100,188,126,108,188,118,100,
+180,114, 92,172,106, 84,172,106, 84,172,110, 92,180,114, 92,
+180,114, 92,172,114, 92,180,110, 92,172,106, 84,164,102, 84,
+164,102, 84,172,106, 84,172,106, 84,172,106, 92,180,110, 84,
+172,110, 92,180,110, 92,172,110, 92,180,110, 92,180,114, 92,
+172,114, 92,180,110, 92,164, 98, 76,172,110, 92,180,114, 92,
+172,106, 84,172,106, 84,172,110, 92,172,106, 84,164,102, 84,
+172,106, 84,172,110, 84,172,106, 92,172,106, 84,172,106, 84,
+172,110, 92,172,110, 92,180,110, 84,172,106, 84,172,106, 84,
+180,110, 84,172,110, 84,172,114, 92,172,110, 92,172,110, 84,
+172,110, 84,180,106, 92,172,102, 84,180,106, 92,172,106, 92,
+172,106, 92,180,122,100,148, 98, 76, 92, 34, 12,100, 42, 28,
+116, 54, 36,148, 86, 68,148, 90, 76,148, 86, 76,148, 86, 76,
+140, 78, 60,148, 78, 60,140, 78, 60,148, 78, 60,148, 78, 60,
+148, 82, 60,156, 86, 68,156, 90, 68,156, 90, 68,156, 90, 68,
+148, 86, 68,172,102, 84,164,102, 84,172,102, 84,164,102, 84,
+172,106, 84,172,106, 84,164,102, 84,164, 98, 76,156, 94, 76,
+164, 98, 76,156, 94, 76,164, 98, 76,164, 94, 76,164, 94, 76,
+156, 94, 76,164, 98, 76,180,110, 84,188,114, 84,188,114, 92,
+180,106, 84,188,114, 84,188,118, 92,188,114, 92,188,118, 92,
+188,118, 92,188,114, 92,180,110, 84,188,114, 92,188,118, 92,
+188,114, 92,188,118, 92,188,118, 92,188,114, 92,188,118, 92,
+188,118, 92,188,118, 92,188,114, 92,180,110, 84,196,122,100,
+188,118, 92,180,114, 84,188,114, 92,188,122, 92,196,122,100,
+188,118, 92,188,114, 92,180,110, 84,188,118, 92,196,122,100,
+196,122, 92,188,118, 92,188,118,100,196,122, 92,188,118, 92,
+196,122,100,196,122, 92,196,122,100,188,122, 92,196,122,100,
+188,122, 92,196,122,100,196,122,100,196,122,100,196,122, 92,
+188,114, 92,180,110, 84,188,114, 84,188,118, 92,196,122, 92,
+188,118, 92,188,122, 92,188,118, 92,188,114, 92,188,118, 92,
+196,122, 92,188,118, 92,188,118, 92,196,126,100,204,130,108,
+204,134,108,188,122, 92,180,106, 84,188,114, 92,188,118, 92,
+188,118, 92,196,122,100,204,134,108,196,130,100,196,122,100,
+188,122, 92,196,122,100,196,122,100,188,118, 92,188,114, 92,
+188,114, 84,180,110, 84,180,110, 84,188,114, 92,180,110, 84,
+180,106, 84,180,106, 84,188,114, 92,188,118, 92,188,114, 92,
+180,110, 92,180,106, 84,172,102, 84,180,110, 84,188,118, 92,
+180,106, 84,180,106, 84,172,106, 84,180,106, 84,180,106, 92,
+188,114, 92,180,110, 92,180,110, 84,188,114, 92,188,114,100,
+180,114, 92,172,110, 92,180,114, 92,188,122,100,188,122,108,
+188,122,100,180,118,100,188,122,100,180,118,100,180,114, 92,
+180,110, 92,180,114, 92,180,114, 92,180,114, 92,172,110, 92,
+180,110, 92,172,110, 84,172,106, 84,164,102, 84,172,102, 84,
+164,106, 84,172,106, 84,180,110, 92,172,114, 92,180,110, 92,
+172,110, 92,180,110, 92,172,110, 84,172,110, 92,172,110, 84,
+180,110, 92,164,102, 84,172,110, 92,180,114, 92,180,114, 92,
+180,110, 92,172,110, 84,172,110, 92,172,106, 84,180,114, 92,
+180,110, 92,180,110, 92,172,110, 92,172,110, 92,172,110, 84,
+172,110, 92,180,110, 92,172,110, 92,180,110, 84,180,114, 92,
+180,114, 92,180,114, 92,180,118, 92,180,114, 92,180,114, 92,
+188,118,100,188,114, 92,196,122,108,188,118,100,180,118,100,
+188,130,108,156,106, 84,100, 42, 28, 84, 30, 12,116, 54, 36,
+156, 90, 76,156, 90, 76,156, 90, 68,156, 94, 76,148, 86, 68,
+164, 94, 84,156, 94, 76,156, 90, 76,148, 86, 68,148, 78, 60,
+148, 78, 60,148, 86, 68,164, 94, 76,164, 94, 76,172, 98, 84,
+164, 98, 76,164,102, 76,172,106, 84,180,110, 92,180,118,100,
+180,118,100,180,110, 92,172,110, 92,164, 98, 76,164, 94, 76,
+164, 98, 76,164, 98, 84,164,102, 76,164,102, 84,172,102, 84,
+164,102, 76,188,118, 92,188,122,100,196,122,100,188,114, 92,
+180,114, 92,188,114, 92,196,122,100,196,122,100,188,118, 92,
+188,114, 92,188,118, 92,188,118, 92,188,118, 92,180,110, 84,
+196,122,100,196,122,100,188,122, 92,196,122,100,196,126,100,
+196,122,100,188,118, 92,188,118, 92,196,122,100,188,118, 92,
+188,114, 92,188,118, 92,196,122,100,196,126,100,196,122,100,
+188,118, 92,188,114, 84,188,122, 92,196,122,100,188,122, 92,
+188,118, 92,196,122,100,196,122, 92,188,118, 92,196,122,100,
+196,126,100,196,122,100,196,126,100,196,126,100,196,126,100,
+196,122,100,196,126,100,196,122,100,196,126,100,196,122,100,
+188,118, 92,188,118,100,196,126,100,196,126,100,196,122,100,
+196,126,100,196,122,100,188,118, 92,188,122,100,196,122, 92,
+188,114, 92,188,114, 92,188,122, 92,188,114, 92,204,130,108,
+196,126,100,188,118, 92,188,118, 92,188,118, 92,196,122,100,
+196,126,100,204,130,108,196,126,100,196,122,100,188,118, 92,
+196,122,100,196,126,100,196,122,100,188,118, 92,188,114, 92,
+188,114, 92,188,118, 92,188,118, 92,188,118, 92,180,114, 84,
+188,114, 92,196,126,100,196,122,100,188,114, 92,180,110, 84,
+180,106, 84,172, 98, 76,180,110, 92,188,114, 92,172,102, 84,
+196,126,100,188,114, 92,188,114, 92,188,114, 92,188,114, 92,
+180,110, 84,188,114, 92,188,114, 92,188,122,100,180,118,100,
+180,114, 92,180,118,100,188,122,100,188,126,108,188,122,100,
+180,118,100,188,122,100,180,118,100,180,110, 92,180,114,100,
+180,118,100,188,118,100,172,114, 92,172,106, 84,172,110, 92,
+172,106, 92,172,102, 84,164,102, 84,172,102, 76,172,106, 84,
+172,106, 92,180,114, 92,180,110, 92,180,114, 92,172,110, 92,
+172,110, 84,172,106, 84,172,106, 84,172,106, 92,172,110, 84,
+172,106, 84,180,110, 92,180,114, 92,180,118,100,180,118,100,
+180,110, 92,172,110, 92,180,110, 92,180,114, 92,172,114, 92,
+172,110, 92,172,106, 84,172,106, 84,172,106, 92,172,110, 84,
+172,106, 84,180,110, 84,172,110, 92,180,114, 92,180,114, 92,
+180,118, 92,180,118, 92,180,114, 92,180,118, 92,188,114,100,
+180,110, 92,188,122,108,188,122,100,180,118,108,188,126,108,
+148, 90, 76, 84, 30, 12, 92, 38, 28,140, 78, 60,156, 90, 68,
+156, 90, 76,156, 90, 68,156, 94, 76,164, 98, 76,156, 94, 76,
+164, 94, 76,156, 94, 68,156, 94, 76,156, 90, 68,156, 86, 68,
+148, 86, 68,156, 86, 68,156, 94, 76,164,102, 76,180,110, 92,
+172,102, 84,172, 98, 84,172,106, 84,180,114, 92,188,122,100,
+188,114, 92,172,110, 92,172,102, 84,164, 98, 76,156, 90, 68,
+156, 86, 68,164, 94, 76,172,102, 84,172,106, 84,180,110, 92,
+188,114, 92,196,126,100,196,126,100,188,118, 92,180,110, 92,
+188,118, 92,196,130,108,196,126,100,196,122,100,188,126,100,
+196,126,108,196,126,100,196,122,100,180,118, 92,188,114, 92,
+188,118, 92,196,122,100,188,122,100,188,122,100,188,118, 92,
+188,118, 92,188,118, 92,196,126,100,188,122,100,196,122,100,
+188,122,100,196,126,100,196,130,100,196,126,108,196,130,100,
+196,122,100,188,122,100,196,126,108,196,126,100,204,130,108,
+196,130,100,196,130,108,196,130,108,188,122,100,196,126,100,
+188,122,100,196,122,100,188,122,100,196,126,100,196,126,100,
+196,130,100,196,130,108,196,130,100,196,126,100,196,126,100,
+204,130,108,196,130,100,196,126,108,188,126,100,196,122,100,
+196,126,100,196,130,108,204,130,108,196,126,108,196,130,100,
+196,122,100,188,122,100,196,126,100,204,134,108,204,134,108,
+196,126,100,188,114, 92,188,118, 92,188,122,100,196,126,100,
+196,130,108,196,126,108,196,126,100,196,126,100,196,126,100,
+188,122, 92,188,122,100,188,122,100,196,122,100,188,122,100,
+196,122,100,188,122,100,196,122,100,188,122,100,188,118, 92,
+188,118,100,196,126,100,188,122,100,188,122,100,188,118,100,
+188,118, 92,188,118, 92,188,114, 92,188,118, 92,188,122,100,
+188,114, 92,180,114, 92,180,114, 84,172,102, 84,172,106, 84,
+188,118, 92,188,118,100,188,122,100,188,122,100,180,118,100,
+188,118,100,188,122,100,188,122,100,188,118,100,180,118,100,
+196,130,108,180,114, 92,172,106, 84,172,110, 92,180,114, 92,
+172,110, 92,172,106, 84,172,106, 84,180,110, 92,180,114, 92,
+180,114, 92,180,110, 92,164,102, 84,164, 98, 84,172,102, 84,
+172,106, 84,172,106, 92,172,106, 84,172,106, 84,180,106, 92,
+172,106, 92,180,110, 92,180,110, 92,172,110, 92,172,102, 84,
+172,110, 92,180,114, 92,180,114,100,180,114, 92,172,110, 92,
+180,114, 92,172,110, 92,180,114, 92,180,114, 92,180,110, 92,
+180,110, 92,172,110, 92,180,110, 84,172,110, 92,172,110, 92,
+180,110, 92,180,110, 92,180,114, 92,180,114, 92,180,118,100,
+180,118,100,180,114, 92,180,114, 92,172,102, 84,172,102, 84,
+180,106, 92,164, 94, 84,156, 94, 76,172,110,100,140, 82, 68,
+ 92, 38, 28, 92, 34, 20,124, 58, 44,140, 78, 60,148, 86, 68,
+156, 90, 68,156, 94, 76,164, 94, 76,148, 90, 68,156, 90, 68,
+164, 94, 76,156, 94, 76,156, 94, 76,156, 90, 68,148, 86, 60,
+148, 86, 68,156, 90, 68,164, 94, 76,164, 98, 76,156, 94, 76,
+156, 94, 76,172, 98, 84,180,110, 92,180,118,100,188,114,100,
+180,114, 92,172,102, 84,164, 98, 84,164, 94, 76,156, 94, 76,
+156, 90, 68,164, 94, 76,164, 94, 76,164, 94, 76,164, 98, 76,
+180,110, 92,196,126,100,196,126,108,204,130,100,196,126,108,
+196,130,108,196,126,100,188,122,100,196,122,100,196,126,100,
+196,126,100,188,122,100,188,118, 92,196,130,108,196,134,108,
+204,134,108,204,134,108,196,130,108,196,130,108,196,126,108,
+196,130,108,196,126,100,188,126,100,188,122,100,196,126,100,
+196,126,100,196,126,108,196,126,100,188,126,100,188,122,100,
+196,126,100,188,122,100,188,122,100,188,122,100,196,122,100,
+196,126,100,196,126,108,204,130,108,196,130,108,196,130,108,
+196,130,108,196,130,108,204,130,108,196,130,108,204,130,108,
+196,130,108,196,126,100,188,126,108,196,126,100,196,126,108,
+196,130,108,196,126,100,196,126,100,196,126,100,188,126,100,
+196,126,100,196,126,108,196,130,100,196,126,108,188,126,100,
+196,122,100,188,126,100,196,130,108,196,130,108,188,122,100,
+180,114, 92,188,118, 92,188,122,100,188,122,100,188,118, 92,
+188,122,100,188,118,100,188,122,100,188,118, 92,188,118,100,
+188,118, 92,188,122,100,188,118, 92,188,122, 92,188,118,100,
+188,118, 92,188,118, 92,188,118, 92,188,118,100,180,118, 92,
+188,122,100,188,122,100,188,118, 92,188,118, 92,180,114, 92,
+180,114, 92,180,114, 92,188,118, 92,196,126,100,188,118,100,
+188,122,100,188,118, 92,180,110, 84,180,114, 92,188,122,100,
+188,122,100,180,114, 92,180,114, 92,180,114, 92,180,114, 92,
+180,118,100,180,118,100,180,114, 92,172,110, 92,172,106, 84,
+164, 94, 76,164,102, 84,180,114, 92,180,118,100,172,106, 84,
+164, 98, 76,164, 98, 84,164, 98, 76,164, 98, 84,172,102, 84,
+172,102, 84,164, 98, 76,172,102, 84,172,106, 84,180,110, 92,
+180,110, 92,180,110, 92,180,110, 92,180,110, 92,180,110, 92,
+180,110, 92,172,110, 92,180,110, 92,172,106, 84,172,110, 92,
+180,118, 92,188,118,100,180,114, 92,180,114, 92,180,114, 92,
+180,114, 92,180,118,100,180,118,100,180,118,100,180,118,100,
+188,118, 92,180,118,100,180,118,100,188,118,100,180,110, 92,
+172,110,100,180,114,100,180,118,100,180,118,100,180,118,100,
+188,122,100,188,118,100,180,106, 84,172,102, 84,188,114,100,
+164, 98, 76,164, 98, 84,172,110,100,132, 78, 68, 92, 34, 20,
+ 92, 34, 20,132, 70, 52,156, 90, 68,164,102, 76,164, 98, 76,
+164, 98, 84,164, 98, 76,156, 90, 68,156, 94, 76,148, 82, 60,
+148, 86, 68,148, 82, 60,148, 82, 60,148, 82, 60,148, 78, 60,
+148, 82, 60,148, 86, 68,148, 82, 68,148, 82, 60,156, 82, 68,
+156, 90, 68,164, 98, 76,172,102, 84,172,106, 84,172,106, 84,
+164,102, 76,172, 98, 84,164, 98, 76,156, 90, 76,156, 82, 60,
+140, 78, 60,140, 70, 52,132, 70, 52,156, 82, 60,172, 98, 76,
+188,114, 92,196,122,100,196,126,100,196,126,108,196,130,108,
+196,130,108,196,126,100,188,126,100,196,126,100,188,126,100,
+196,126,100,188,122,100,196,130,108,204,130,108,196,130,108,
+196,130,108,196,122,100,188,122,100,196,122,100,188,126,100,
+196,126,100,196,122,100,188,122,100,188,122,100,196,122,100,
+188,126,100,188,122,100,188,122,100,196,122,100,188,122,100,
+196,126,100,188,122,100,188,118,100,188,118, 92,188,122,100,
+188,126,100,196,126,100,196,126,100,196,130,108,196,126,100,
+196,126,100,196,126,108,196,126,100,188,122,100,196,130,108,
+196,130,100,196,126,108,196,126,100,196,130,108,204,130,108,
+196,130,108,196,126,108,196,130,108,204,134,108,196,130,108,
+196,130,108,196,130,108,196,130,108,204,130,108,196,134,108,
+204,130,108,204,134,116,196,130,108,196,122,100,188,122,100,
+196,126,108,196,126,100,196,126,100,188,118,100,188,118, 92,
+188,118, 92,188,122, 92,188,118,100,188,122,100,188,122,100,
+188,122,100,188,122,100,188,118,100,188,122, 92,188,118,100,
+188,122,100,188,122,100,188,122,100,188,122,100,188,118, 92,
+188,122,100,188,122,100,188,118,100,188,118, 92,188,114, 92,
+188,122,100,188,122,100,188,122,100,188,118, 92,188,122,100,
+188,122,100,180,110, 92,180,114, 92,188,122,100,188,122,100,
+188,118,100,180,118,100,180,118,100,188,122,100,188,122,100,
+188,122,100,180,114, 92,180,110, 92,172,110, 92,164,102, 76,
+164,102, 84,188,118,100,180,118,100,172,106, 84,164,102, 84,
+172,110, 92,180,110, 92,180,110, 92,180,110, 92,180,110, 92,
+172,106, 84,180,110, 92,172,110, 92,180,110, 92,180,110, 92,
+180,114, 92,180,110, 92,180,114, 92,172,110, 92,180,110, 84,
+180,110, 92,180,110, 92,172,102, 84,172,106, 84,172,110, 92,
+180,110, 92,172,110, 92,172,110, 92,172,106, 92,172,110, 92,
+180,114, 92,180,114, 92,180,114, 92,180,114, 92,180,114,100,
+180,114, 92,180,114, 92,180,114, 92,180,110,100,180,114, 92,
+180,114, 92,180,114,100,180,118, 92,180,122,100,188,122,100,
+188,122,100,188,118,100,180,110, 92,188,114,100,172,102, 92,
+172,106, 92,180,118,100,132, 78, 68, 92, 34, 20, 92, 34, 20,
+132, 74, 60,156, 90, 68,164, 94, 76,148, 90, 68,156, 86, 68,
+156, 90, 68,156, 90, 68,164, 98, 84,156, 90, 68,156, 90, 68,
+156, 90, 76,156, 94, 76,164, 98, 76,164, 98, 84,164,102, 76,
+172,102, 84,172,102, 84,172,106, 84,172,106, 84,180,110, 92,
+180,110, 92,180,110, 92,180,114,100,180,114, 92,180,110, 92,
+180,114, 92,180,114, 92,180,110, 92,164, 98, 84,164, 94, 76,
+156, 90, 68,156, 90, 68,172,102, 84,180,110, 92,188,118, 92,
+196,122,100,196,122,100,188,122,100,188,122,100,188,118, 92,
+188,118,100,188,118,100,180,114, 92,188,114, 92,188,118,100,
+188,118, 92,196,126,100,188,126,100,196,122,100,188,122,100,
+180,118, 92,188,118, 92,188,122,100,196,122,100,196,126,108,
+188,126,100,188,122,100,196,122,100,188,126,100,196,122,100,
+188,122,100,188,118, 92,180,110, 92,180,114, 92,188,118, 92,
+180,114, 92,180,110, 84,172,110, 84,180,114, 92,188,114, 92,
+188,126,100,196,126,108,196,126,100,196,130,108,196,126,108,
+188,126,100,188,126,100,196,122,100,188,122,100,188,122,100,
+188,118, 92,188,122,100,188,122,100,188,126,100,188,122,100,
+188,118, 92,196,130,108,196,130,108,196,126,108,196,126,100,
+196,130,108,196,130,108,196,130,108,204,130,108,196,130,108,
+196,130,100,196,122,100,180,118, 92,188,118, 92,188,122,100,
+196,126,100,180,118,100,188,118, 92,180,118, 92,180,114, 92,
+188,118, 92,180,114, 92,188,118, 92,180,114, 92,188,114, 92,
+180,114, 92,180,114, 92,180,114, 92,180,114, 92,188,118, 92,
+180,114, 92,188,118, 92,188,118, 92,180,110, 92,188,114, 92,
+188,122, 92,180,118, 92,180,110, 92,180,110, 92,180,118, 92,
+196,122,100,188,118,100,180,114, 92,188,122,100,188,118, 92,
+180,110, 92,180,114, 84,188,118,100,180,118, 92,188,118,100,
+188,122,100,188,122,100,188,122,108,188,122,100,188,122,100,
+180,114, 92,172,106, 84,164, 98, 84,156, 94, 76,164, 94, 76,
+164,102, 76,172,102, 84,164, 98, 76,172,106, 84,188,122,100,
+188,118,100,188,118,100,180,114, 92,180,114, 92,180,110, 92,
+180,110, 92,180,110, 92,172,110, 92,180,110, 92,172,110, 92,
+180,110, 84,172,110, 92,180,110, 92,172,106, 92,172,110, 84,
+172,106, 92,172,102, 84,172,106, 84,172,110, 92,172,110, 84,
+172,106, 84,172,106, 84,172,106, 84,172,106, 84,172,102, 84,
+164,102, 84,172,106, 84,172,106, 84,172,106, 84,172,106, 92,
+172,106, 84,172,106, 92,180,110, 92,172,110, 92,180,106, 92,
+172,110, 92,172,110, 92,180,114, 92,180,118, 92,180,118, 92,
+188,118,100,188,114,100,188,118,100,180,110, 92,180,118,108,
+180,122,108,132, 78, 68, 92, 34, 20, 92, 34, 20,108, 50, 28,
+132, 66, 52,140, 74, 52,132, 70, 52,140, 74, 52,140, 78, 60,
+148, 86, 60,164, 94, 76,156, 94, 68,156, 94, 76,164, 98, 76,
+164,102, 84,172,106, 84,172,106, 84,172,110, 92,172,106, 84,
+180,110, 92,180,110, 92,180,114, 92,180,110, 92,180,110, 92,
+180,114, 92,180,110, 92,180,114, 92,172,106, 92,180,110, 92,
+180,114, 92,180,114, 92,180,110, 92,180,114, 92,188,114,100,
+188,122,100,180,110, 84,188,114, 92,180,114, 92,188,114, 92,
+180,110, 92,180,110, 92,180,110, 92,180,114, 92,180,114, 84,
+180,114, 92,180,110, 84,180,110, 92,172,110, 84,180,110, 92,
+180,114, 92,180,114, 92,180,114, 92,180,110, 92,180,110, 84,
+180,110, 92,188,118, 92,188,122,100,180,114, 84,180,110, 92,
+180,110, 84,180,110, 84,180,110, 92,180,114, 92,180,106, 84,
+172,106, 84,164,102, 76,172,102, 84,180,110, 84,180,110, 84,
+172,110, 92,180,106, 84,180,110, 84,180,110, 92,180,118, 92,
+188,118, 92,188,118,100,188,122,100,188,122, 92,188,118,100,
+188,118, 92,180,114, 92,188,118, 92,180,114, 92,180,110, 92,
+180,114, 92,180,114, 92,188,114, 92,180,114, 92,180,114, 92,
+188,114, 92,188,118, 92,188,122, 92,188,118,100,196,122, 92,
+188,122,100,188,118,100,188,122, 92,188,118,100,188,118, 92,
+180,114, 92,172,106, 84,180,110, 92,180,118, 92,188,114, 92,
+172,110, 84,180,110, 84,180,110, 92,180,110, 92,180,110, 84,
+172,110, 84,180,106, 84,172,106, 84,172,106, 84,172,102, 84,
+172,106, 76,172,106, 84,172,106, 84,172,106, 84,172,106, 84,
+180,110, 84,172,106, 84,172,102, 76,172,106, 84,180,110, 84,
+172,106, 84,172,102, 84,172,102, 76,180,106, 84,180,114, 92,
+188,118, 92,180,114, 92,188,118, 92,188,122,100,180,110, 84,
+180,110, 92,188,118, 92,180,114, 92,180,114, 92,172,114, 92,
+180,114, 92,180,114, 92,180,114, 92,172,110, 84,164, 98, 84,
+156, 94, 76,140, 74, 52,140, 78, 60,148, 86, 68,156, 90, 68,
+156, 94, 76,156, 98, 76,172,102, 84,172,110, 92,172,106, 92,
+172,106, 84,172,106, 84,172,102, 84,172,106, 84,172,106, 84,
+172,106, 84,180,106, 84,172,106, 84,172,102, 84,172,106, 84,
+172,102, 84,172,106, 84,180,106, 84,172,106, 84,172,106, 84,
+172,106, 84,172,110, 92,180,110, 92,180,110, 92,172,106, 92,
+172,106, 84,172,106, 84,172,110, 92,164,102, 84,172,102, 84,
+164,106, 84,172,106, 84,172,106, 92,172,106, 84,172,106, 84,
+172,106, 84,172,106, 92,172,106, 92,164,102, 84,172,102, 84,
+164,106, 84,164,102, 84,172,106, 84,172,106, 84,180,110, 92,
+180,106, 92,180,110, 92,172,102, 92,172,114,100,180,118,100,
+132, 74, 60, 92, 34, 20, 92, 34, 12,124, 58, 44,148, 78, 60,
+148, 90, 68,156, 86, 68,156, 94, 76,156, 94, 76,156, 90, 68,
+164, 98, 76,156, 94, 76,164, 94, 76,156, 94, 68,164, 94, 76,
+164, 98, 76,164, 98, 84,164, 98, 76,156, 98, 76,164, 94, 76,
+164, 98, 76,164, 98, 84,164, 98, 84,172,102, 76,164,102, 84,
+172,102, 84,172,102, 84,172,106, 84,172,106, 92,180,106, 84,
+172,106, 92,172,106, 84,180,110, 92,180,110, 92,180,114, 92,
+180,110, 92,180,106, 84,180,114, 92,188,118, 92,188,118, 92,
+188,114, 92,188,118, 92,188,118, 92,188,118,100,188,118, 92,
+188,122,100,188,122,100,188,118, 92,180,118, 92,188,118, 92,
+188,118,100,188,118, 92,180,118, 92,188,114, 92,180,118, 92,
+188,122,100,196,130,108,188,114, 92,180,114, 92,180,118, 92,
+188,118, 92,188,118,100,188,118, 92,180,114, 92,180,110, 84,
+180,110, 92,180,114, 84,180,114, 92,180,114, 92,188,118, 92,
+188,118,100,188,118, 92,188,118,100,188,118, 92,188,118,100,
+188,122, 92,188,122,100,188,122,100,188,122,100,188,122,100,
+196,122,100,188,126,100,188,122,100,188,122, 92,188,122,100,
+196,122,100,188,126,100,196,122,100,188,118, 92,180,118, 92,
+188,118,100,188,118, 92,188,122,100,188,122,100,188,122,100,
+188,122,100,188,122,100,188,118, 92,188,118,100,180,114, 92,
+180,110, 84,180,110, 92,188,118, 92,180,114, 92,180,110, 92,
+188,118, 92,180,118, 92,188,114, 92,180,114, 92,180,110, 92,
+180,110, 84,180,110, 84,180,110, 84,180,110, 84,180,110, 84,
+180,106, 84,180,110, 84,180,110, 92,180,110, 84,180,110, 92,
+180,110, 92,172,106, 84,180,110, 84,180,114, 92,180,110, 92,
+172,110, 84,172,110, 84,180,110, 92,188,118, 92,188,118, 92,
+180,114, 92,188,118,100,188,118, 92,180,110, 92,180,114, 84,
+188,118,100,180,114, 92,180,110, 92,172,110, 92,172,110, 92,
+172,110, 92,172,110, 92,172,102, 84,164, 98, 76,156, 94, 76,
+156, 94, 68,172,102, 76,172,110, 92,172,110, 84,172,106, 92,
+172,110, 84,172,106, 84,172,106, 84,172,106, 84,180,106, 92,
+172,106, 84,172,106, 92,172,102, 84,172,102, 84,172,106, 92,
+172,106, 84,172,102, 84,172,102, 84,172,102, 84,172,102, 84,
+172,106, 84,172,102, 84,172,106, 92,172,102, 84,164, 98, 76,
+164,102, 84,164,102, 84,164,102, 76,164, 98, 76,164, 98, 76,
+164, 98, 84,164, 98, 76,164, 98, 76,164, 98, 76,164,102, 84,
+172,102, 84,164,102, 84,164,102, 84,164,102, 84,164, 98, 76,
+172,102, 84,172,102, 84,172,102, 84,164, 98, 84,164,102, 76,
+164, 98, 76,164, 98, 76,164, 98, 76,172, 98, 84,172, 98, 76,
+172, 98, 84,164, 94, 84,172,110, 92,172,110,100,116, 62, 52,
+ 92, 34, 12, 92, 34, 20,148, 90, 68,172,106, 84,172,110, 92,
+172,106, 84,172,110, 84,180,110, 92,164,102, 84,172,106, 84,
+172,106, 84,172,106, 84,164,102, 84,172,106, 84,172,106, 84,
+172,110, 92,172,106, 84,172,106, 92,172,106, 84,172,102, 84,
+172,106, 84,172,106, 84,180,110, 92,180,110, 92,180,110, 92,
+180,110, 92,188,118,100,188,114,100,180,114, 92,180,110, 92,
+180,110, 92,172,110, 92,180,110, 92,172,106, 84,188,118,100,
+188,118, 92,196,122,100,196,126,108,204,130,108,188,122,100,
+188,118,100,180,118, 92,180,114, 92,188,122,100,196,122,100,
+188,122,100,188,118, 92,180,110, 92,196,122,100,188,126,100,
+196,126,100,188,122,100,188,122,100,196,126,100,196,126,108,
+196,130,108,196,130,108,196,126,100,196,126,108,196,130,108,
+196,134,108,204,134,108,196,130,108,188,126,108,188,118, 92,
+180,114, 92,180,106, 84,180,110, 84,180,114, 92,180,118, 92,
+188,118, 92,180,118, 92,188,126,100,188,122,100,196,126,100,
+196,126,100,196,126,100,196,130,108,204,130,108,196,130,108,
+196,122,100,188,122,100,188,118,100,188,118, 92,188,122,100,
+188,122,100,188,122,100,188,118,100,180,118,100,188,118, 92,
+180,114, 92,188,118, 92,188,118,100,188,122, 92,188,122,100,
+196,122,100,180,118, 92,188,118, 92,180,114, 92,172,110, 84,
+180,110, 84,180,114, 92,188,118, 92,180,114, 92,180,118, 92,
+188,114, 92,180,114, 92,180,114, 92,180,114, 92,180,114, 92,
+180,114, 92,180,110, 92,180,114, 92,180,110, 92,180,114, 92,
+180,110, 92,180,114, 84,180,110, 92,180,110, 84,180,114, 84,
+180,110, 92,180,114, 92,180,114, 92,180,110, 84,180,110, 92,
+180,114, 84,180,114, 92,180,118, 92,180,110, 92,172,106, 84,
+180,110, 84,180,110, 84,164,102, 76,172,102, 84,180,110, 84,
+172,110, 84,172,106, 84,172,106, 84,172,102, 84,172,106, 84,
+172,110, 84,172,106, 92,172,106, 84,164, 98, 76,180,118,100,
+188,122,100,188,118,100,188,118,100,180,114, 92,172,106, 92,
+172,106, 84,164,102, 84,180,106, 84,172,106, 92,180,110, 92,
+172,106, 84,172,102, 84,172,102, 84,172,102, 84,172,106, 92,
+172, 98, 84,164,102, 84,172,102, 84,172,102, 84,172,106, 92,
+180,106, 84,172,110, 92,180,106, 92,164, 98, 76,164, 98, 76,
+164, 98, 76,164, 98, 76,156, 94, 76,156, 94, 76,156, 94, 76,
+164, 98, 76,164, 98, 84,164, 98, 76,172,102, 84,164,102, 84,
+172,102, 84,164,102, 84,164, 98, 76,156, 94, 76,172,102, 84,
+172,102, 92,164,102, 84,172,102, 84,164,106, 84,164,106, 84,
+164,102, 76,172,102, 84,164, 98, 76,172,102, 84,172,102, 84,
+164, 94, 84,172,106, 92,164,106, 92,116, 62, 52, 92, 34, 20,
+100, 46, 28,148, 86, 76,164, 98, 76,164, 98, 76,156, 90, 76,
+164, 98, 76,164,102, 84,172,102, 84,172,106, 84,164,102, 84,
+164,102, 84,164, 98, 76,164, 98, 84,172,106, 84,172,110, 92,
+180,110, 92,172,110, 84,180,110, 92,180,106, 92,172,106, 84,
+180,110, 92,180,110, 92,180,114, 92,180,110, 92,172,110, 92,
+172,106, 84,172,102, 84,164,102, 84,172,106, 84,180,106, 92,
+180,110, 84,172,106, 84,172,102, 84,180,110, 92,172,102, 76,
+172, 98, 76,172,106, 84,180,106, 84,172, 98, 76,164, 98, 76,
+164, 94, 76,164, 98, 76,172,102, 76,172,110, 84,172,106, 84,
+172, 98, 76,156, 94, 68,164, 94, 68,164, 94, 76,164, 98, 76,
+164, 94, 68,164, 94, 68,156, 90, 68,164, 94, 68,164, 98, 76,
+164, 98, 76,164, 98, 76,164, 98, 76,172,102, 76,172,106, 84,
+172,106, 84,172,102, 76,164, 98, 76,172,106, 84,164, 98, 76,
+148, 86, 60,148, 82, 60,156, 90, 68,164, 94, 76,164, 98, 76,
+164, 94, 76,172, 98, 76,164, 98, 76,164, 98, 76,172,102, 84,
+172,102, 76,172,106, 84,172,106, 84,180,110, 84,172,106, 84,
+172,102, 76,172,102, 76,172,102, 76,172,106, 84,172,106, 84,
+172,102, 76,172,102, 76,172,106, 84,172,102, 84,172,102, 76,
+164,102, 84,172,102, 76,172,106, 84,180,110, 84,180,114, 92,
+172,102, 76,172,106, 84,172,102, 84,164, 94, 76,164, 98, 76,
+172,102, 76,172,102, 84,172,102, 76,164, 98, 76,172, 98, 76,
+164,102, 76,172,102, 76,164, 98, 76,172,102, 76,164,102, 76,
+172,102, 76,172,102, 76,164,102, 76,172,102, 76,164,102, 76,
+172, 98, 76,164, 98, 76,164,102, 76,164, 98, 76,172,102, 84,
+172,102, 76,172,102, 76,164, 98, 76,172,102, 76,172,102, 84,
+172,102, 76,172,102, 84,172,102, 76,164, 98, 76,164, 98, 76,
+164,102, 76,156, 90, 68,164, 94, 68,164, 98, 76,164, 98, 76,
+164, 94, 76,156, 94, 76,156, 94, 76,164, 94, 76,164, 98, 76,
+164,102, 84,164,102, 76,164, 98, 84,164, 94, 76,156, 90, 68,
+156, 90, 76,156, 94, 68,156, 94, 76,156, 90, 68,156, 90, 68,
+156, 94, 76,156, 86, 68,156, 90, 68,164, 98, 76,164, 94, 76,
+164, 94, 76,164, 98, 76,172,102, 84,180,114, 92,164,102, 76,
+172,102, 84,172,102, 84,172,106, 84,172,106, 84,180,110, 92,
+180,110, 92,180,114, 92,172,106, 92,180,110, 92,172,110, 92,
+180,110, 92,172,106, 84,172,106, 84,172,106, 84,172,110, 92,
+172,110, 84,172,110, 92,180,114, 92,180,114, 92,180,114, 92,
+172,110, 92,172,110, 84,172,106, 84,172,102, 92,172,106, 84,
+172,106, 92,172,110, 92,172,110, 92,172,110, 92,180,106, 84,
+172,106, 84,180,106, 92,180,110, 92,180,110,100,172,102, 84,
+180,114,100,172,110,100,124, 66, 52,100, 46, 28,100, 42, 28,
+148, 78, 68,156, 90, 68,156, 94, 76,164, 98, 76,164, 98, 76,
+164, 98, 76,156, 90, 68,148, 82, 60,148, 82, 68,148, 86, 60,
+148, 82, 68,148, 86, 60,148, 86, 68,156, 90, 68,148, 86, 68,
+156, 90, 68,156, 90, 68,164, 94, 76,164, 98, 84,164, 98, 76,
+156, 94, 76,164, 94, 76,164, 98, 76,164, 98, 76,172,102, 84,
+156, 90, 68,164, 94, 76,164, 98, 76,164, 94, 76,156, 86, 68,
+156, 94, 76,180,110, 92,172, 98, 76,172,102, 76,172,102, 84,
+164, 98, 76,172, 98, 76,180,110, 84,188,122,100,188,118, 92,
+180,114, 92,188,118,100,188,118, 92,188,122,100,180,114, 92,
+180,110, 92,172,102, 76,172,106, 84,188,118, 92,188,122,100,
+188,122,100,188,118, 92,188,118,100,188,118, 92,172,102, 76,
+172,102, 76,180,106, 84,180,110, 92,180,114, 92,188,118, 92,
+188,114, 92,180,114, 92,188,114, 92,188,118,100,188,118, 92,
+180,114, 92,172,102, 76,164, 98, 76,172,102, 76,172,106, 84,
+180,110, 84,172,110, 84,172,102, 84,172,102, 76,164, 98, 76,
+172,102, 76,172,106, 76,172,102, 84,172,102, 76,172,106, 84,
+180,110, 92,180,114, 92,180,110, 84,172,110, 84,180,106, 84,
+180,110, 92,172,106, 76,172,110, 84,180,110, 92,180,110, 84,
+180,106, 84,172,106, 84,180,106, 84,172,110, 84,180,110, 84,
+172,102, 84,172,102, 76,172,102, 76,164, 94, 68,164, 98, 76,
+172,102, 76,164, 94, 76,172,102, 76,164, 98, 76,164, 94, 76,
+164, 98, 76,172,102, 76,172,102, 84,172,102, 76,164, 98, 76,
+164,102, 84,172, 98, 76,164, 98, 76,172,102, 76,164, 98, 76,
+156, 90, 68,156, 90, 68,164, 94, 76,172,102, 76,172,106, 84,
+172,106, 84,164, 98, 76,164, 98, 76,172,102, 76,172,102, 76,
+164, 98, 76,164,102, 76,164, 98, 76,172,102, 76,172,102, 84,
+164, 94, 68,164, 94, 76,172,102, 76,164, 98, 76,164,102, 76,
+164, 94, 76,156, 90, 68,156, 94, 76,164, 98, 76,156, 94, 76,
+156, 90, 68,156, 94, 76,156, 90, 68,156, 94, 76,164, 98, 76,
+164, 98, 76,156, 94, 76,156, 86, 68,148, 86, 68,148, 82, 60,
+156, 86, 68,156, 86, 68,156, 86, 68,156, 86, 68,156, 82, 60,
+148, 86, 68,156, 86, 68,156, 90, 76,156, 90, 68,156, 86, 68,
+148, 78, 60,148, 82, 60,156, 86, 68,156, 90, 76,156, 90, 68,
+156, 86, 68,148, 86, 60,156, 86, 68,148, 86, 68,148, 86, 68,
+156, 90, 68,156, 90, 68,164, 94, 76,156, 94, 76,156, 86, 68,
+156, 90, 68,156, 90, 68,156, 90, 76,156, 90, 68,156, 90, 68,
+156, 86, 68,148, 86, 68,156, 86, 68,156, 86, 68,156, 90, 68,
+156, 90, 76,164, 98, 76,164,102, 76,164,102, 84,172,106, 84,
+172,102, 84,164, 90, 76,172,102, 84,172,102, 84,164,102, 92,
+164,102, 92,124, 70, 60,100, 42, 28, 84, 30, 12,132, 70, 52,
+140, 74, 60,148, 78, 60,140, 74, 52,140, 74, 60,140, 78, 60,
+140, 78, 60,140, 74, 52,148, 78, 60,148, 82, 60,148, 82, 60,
+148, 82, 68,156, 86, 60,156, 90, 68,156, 90, 68,156, 90, 76,
+148, 82, 68,156, 90, 68,156, 90, 68,164, 90, 68,156, 90, 68,
+156, 86, 68,156, 90, 68,164, 90, 76,172,102, 84,156, 94, 76,
+156, 90, 68,172, 98, 84,164,102, 84,164, 94, 76,164, 94, 76,
+172,102, 84,180,110, 84,180,110, 92,188,114, 92,180,110, 84,
+180,110, 92,188,114, 92,188,118, 92,188,118, 92,180,118, 92,
+188,114, 92,188,118, 92,180,118, 92,180,114, 92,180,110, 84,
+180,114, 92,180,118, 92,188,118,100,180,114, 92,180,114, 92,
+180,114, 92,188,118, 92,188,122,100,180,114, 92,180,114, 92,
+180,110, 84,180,114, 92,180,114, 92,180,114, 92,172,110, 84,
+172,102, 84,172,106, 76,180,110, 92,188,118, 92,188,118,100,
+188,118, 92,180,114, 92,180,110, 92,180,114, 92,180,110, 84,
+180,106, 84,180,110, 92,180,114, 92,180,114, 92,180,110, 92,
+180,110, 84,172,110, 84,172,102, 84,172,106, 84,180,110, 84,
+180,114, 92,180,110, 92,180,114, 92,180,110, 84,180,110, 92,
+172,106, 84,180,106, 84,180,110, 84,172,110, 84,172,106, 84,
+172,106, 84,180,106, 84,180,110, 92,180,110, 92,172,106, 76,
+172,106, 84,172,106, 84,164, 94, 76,164, 98, 76,172,106, 84,
+172,102, 76,172,102, 76,164,102, 76,172, 98, 76,164,102, 76,
+172,102, 84,172,106, 76,172,102, 84,172,102, 76,172,102, 76,
+164,102, 84,172,102, 76,172,102, 84,172,102, 76,164, 94, 68,
+164, 94, 76,172,102, 76,172,106, 84,180,106, 84,172,106, 84,
+172,102, 76,172,102, 76,172,106, 84,172,106, 84,172,102, 76,
+172,102, 76,164, 98, 76,172,102, 84,172,106, 76,164, 94, 76,
+164, 98, 76,172,102, 76,164, 98, 76,172,102, 84,164, 98, 76,
+156, 94, 76,164,102, 84,172,102, 84,164, 98, 76,164, 98, 76,
+164, 98, 76,156, 94, 76,164, 94, 76,164, 98, 76,164,102, 84,
+164, 98, 76,164, 98, 76,164, 98, 76,164,102, 84,164, 94, 76,
+156, 94, 76,164, 94, 76,156, 94, 76,156, 90, 68,156, 86, 68,
+156, 90, 68,164, 94, 76,164, 94, 76,156, 90, 68,156, 86, 68,
+156, 86, 68,156, 94, 76,164, 98, 76,164, 94, 76,156, 90, 76,
+156, 86, 68,148, 90, 68,156, 90, 68,156, 94, 68,156, 94, 76,
+156, 94, 76,156, 94, 76,156, 94, 68,156, 94, 76,156, 94, 76,
+164, 94, 76,156, 98, 76,164, 94, 76,156, 94, 76,156, 90, 68,
+156, 90, 68,164, 94, 84,156, 94, 76,164, 98, 84,164, 98, 76,
+164,102, 76,156, 98, 76,164, 98, 76,164, 94, 68,156, 82, 68,
+132, 66, 44,140, 70, 52,148, 78, 68,156, 90, 76,156,102, 84,
+124, 66, 52, 84, 30, 12, 92, 38, 28,132, 66, 52,140, 74, 52,
+132, 74, 60,132, 66, 44,124, 66, 44,140, 70, 52,140, 78, 60,
+148, 82, 60,148, 82, 68,148, 86, 60,148, 86, 68,156, 86, 68,
+148, 90, 68,156, 90, 76,156, 94, 68,156, 94, 76,164, 90, 68,
+164, 94, 76,164, 98, 76,164, 98, 84,172, 98, 84,164, 98, 84,
+172, 98, 76,164,102, 84,172,102, 84,172, 98, 84,164, 98, 76,
+172,102, 84,180,110, 84,180,110, 92,172,110, 92,172,102, 76,
+180,106, 92,180,110, 84,180,110, 84,180,110, 92,180,106, 84,
+172,102, 84,180,118, 92,188,114, 92,180,114, 92,180,114, 92,
+180,114, 92,188,114, 92,180,110, 92,172,110, 84,188,118,100,
+188,118, 92,188,114, 92,180,114, 92,180,110, 84,180,110, 92,
+180,114, 92,188,118, 92,188,114, 92,180,114, 92,180,114, 92,
+180,114, 92,180,114, 92,180,110, 84,172,102, 84,172,102, 76,
+172,102, 76,172,110, 84,188,118,100,188,122,100,188,118, 92,
+188,118,100,188,122, 92,188,122,100,172,110, 84,180,110, 92,
+180,114, 84,180,114, 92,188,114, 92,180,118, 92,188,114, 92,
+180,118, 92,180,106, 84,172,106, 84,180,106, 84,180,114, 84,
+180,114, 92,188,114, 92,180,114, 92,180,114, 84,172,106, 84,
+180,106, 84,172,110, 92,180,110, 84,180,106, 84,172,106, 84,
+172,106, 84,172,110, 84,180,110, 84,172,106, 84,172,106, 84,
+172,106, 84,164, 94, 68,164, 98, 76,180,106, 84,172,110, 84,
+172,102, 84,172,102, 84,164,102, 76,172,102, 76,172,106, 84,
+172,106, 84,172,106, 84,172,102, 84,172,102, 84,172,102, 76,
+172,106, 84,172,106, 84,172,102, 84,164, 98, 76,172,102, 76,
+172,106, 84,180,110, 84,180,114, 92,180,110, 84,172,106, 84,
+172,106, 84,180,110, 92,180,110, 84,172,110, 84,172,102, 84,
+172,102, 76,172,106, 84,180,110, 84,164, 98, 76,164, 98, 76,
+172,106, 84,164,102, 76,172,102, 84,164, 98, 84,164, 98, 76,
+172,106, 84,172,110, 84,172,102, 84,164,102, 84,164,102, 84,
+172,106, 84,164,102, 84,164,102, 84,172,102, 84,164,102, 84,
+156, 94, 76,164, 98, 76,172,106, 84,172,102, 76,164, 98, 84,
+172,102, 84,164, 98, 76,164, 94, 76,164, 94, 76,164, 98, 76,
+164, 98, 84,164, 98, 76,164, 94, 76,156, 94, 76,164, 94, 76,
+172,102, 84,172,102, 84,164, 98, 76,164, 94, 76,156, 86, 68,
+156, 90, 68,164, 94, 76,164, 98, 84,164, 98, 76,164, 98, 76,
+164, 94, 76,164, 94, 76,164, 98, 84,164,102, 76,164, 98, 76,
+164,102, 84,164, 98, 76,164, 98, 76,164, 98, 76,164, 94, 76,
+164, 98, 84,172,102, 84,172,102, 84,172,106, 92,164,102, 84,
+164, 98, 76,156, 94, 68,156, 90, 68,156, 86, 68,132, 62, 44,
+140, 66, 52,140, 74, 60,156, 94, 84,172,110,100,132, 74, 60,
+ 92, 38, 28,116, 58, 44,164,106, 84,180,114, 92,180,114, 92,
+172,106, 84,172,106, 84,172,110, 92,188,122,100,188,126,100,
+180,114, 92,180,114,100,180,114, 92,180,114, 92,180,114, 92,
+180,110, 92,172,110, 92,180,110, 92,164,102, 84,172,106, 84,
+180,106, 92,180,110, 92,180,114, 92,180,110, 92,180,114, 92,
+180,110, 92,172,110, 84,180,114, 92,180,114,100,180,114, 92,
+180,114,100,188,122,100,188,122,100,188,114, 92,180,114, 92,
+188,114, 92,188,114, 92,188,122,100,188,114, 92,180,110, 84,
+180,110, 92,180,110, 84,180,110, 92,180,114, 92,180,114, 92,
+180,110, 84,180,110, 92,180,110, 84,180,114, 92,180,114, 92,
+180,114, 92,180,114, 92,180,110, 84,180,110, 92,180,110, 84,
+180,110, 92,172,110, 84,172,106, 84,180,106, 84,180,110, 84,
+180,110, 84,180,110, 84,172,106, 84,172,102, 76,180,110, 92,
+180,114, 92,180,114, 92,180,114, 92,180,110, 84,180,114, 92,
+188,118, 92,188,122,100,188,114, 92,180,110, 84,172,106, 84,
+172,106, 84,172,106, 84,180,110, 84,180,114, 92,188,118, 92,
+180,110, 92,180,114, 84,180,110, 92,180,114, 92,180,114, 92,
+180,114, 92,180,110, 84,172,106, 84,172,102, 84,172,106, 76,
+172,106, 84,172,106, 84,172,102, 76,172,102, 76,172,106, 84,
+180,106, 84,172,110, 84,172,102, 84,180,110, 84,172,106, 84,
+164, 94, 68,164, 98, 76,172,106, 84,180,110, 84,172,106, 84,
+172,102, 76,172,102, 76,172,102, 84,172,106, 84,172,106, 84,
+172,106, 76,172,102, 76,172,102, 84,164,102, 76,172,102, 84,
+172,106, 84,172,106, 84,172,102, 76,172,102, 84,180,110, 84,
+180,110, 92,180,114, 84,180,110, 92,172,106, 84,180,106, 84,
+172,110, 84,180,106, 84,172,110, 92,180,106, 84,172,106, 84,
+180,110, 84,172,106, 84,164, 98, 76,172, 98, 76,180,110, 84,
+172,106, 84,172,102, 84,164, 98, 76,164,102, 84,172,106, 84,
+172,110, 92,172,106, 84,172,102, 84,164,102, 84,172,106, 84,
+164, 98, 76,164, 98, 76,164,102, 84,164, 98, 76,156, 90, 68,
+156, 90, 68,164, 98, 84,164, 98, 84,172,102, 76,172,102, 84,
+164,102, 84,164, 98, 76,164, 98, 84,172,102, 84,172,106, 84,
+172, 98, 84,164, 98, 76,164, 98, 76,172, 98, 84,172,106, 84,
+172,106, 84,164, 98, 84,164, 94, 76,156, 94, 76,164, 98, 76,
+164, 98, 76,164,102, 76,164,102, 84,164, 98, 76,164, 98, 76,
+156, 94, 76,164,102, 76,172,102, 84,164,102, 84,164,102, 76,
+164,102, 84,164, 98, 84,164, 98, 76,164, 98, 84,164, 98, 84,
+164, 98, 84,172,102, 84,164,102, 84,172,106, 84,164,102, 84,
+164, 98, 76,164, 98, 76,172,102, 84,164, 90, 68,164, 90, 76,
+164, 94, 76,164,102, 92,172,114,100,140, 82, 68,116, 58, 44,
+116, 62, 52,148, 86, 68,164, 98, 76,164,102, 84,164, 98, 76,
+156, 94, 76,164, 98, 76,164,102, 84,172,102, 84,164,102, 84,
+164,102, 76,164,102, 84,164, 98, 84,164, 98, 76,164,102, 84,
+164, 98, 76,164, 98, 76,172,102, 84,172,102, 84,172,106, 84,
+180,110, 84,172,110, 92,180,110, 84,172,106, 92,172,106, 84,
+164, 90, 76,172,106, 84,180,110, 92,172, 98, 84,164, 98, 76,
+172,106, 84,180,110, 92,180,114, 92,180,110, 92,180,110, 84,
+188,114, 92,188,118,100,188,114, 92,180,110, 84,172,106, 84,
+172,106, 84,172,106, 84,180,110, 84,180,110, 84,180,114, 92,
+180,110, 84,180,114, 92,180,106, 84,172,110, 84,180,106, 84,
+172,106, 84,180,110, 84,172,110, 84,180,110, 84,172,110, 84,
+172,102, 76,172,102, 76,172,102, 76,172,102, 84,172,110, 92,
+180,110, 84,172,106, 84,172,102, 84,172,110, 84,180,110, 84,
+180,110, 84,180,110, 84,172,106, 84,172,106, 84,180,110, 84,
+180,110, 92,180,114, 92,180,114, 92,172,106, 84,172,102, 84,
+172,102, 76,172,106, 84,180,106, 84,180,114, 92,180,114, 92,
+180,114, 92,180,110, 84,180,110, 84,180,110, 92,180,114, 84,
+172,106, 84,172,106, 84,172,102, 76,172,102, 76,172,102, 84,
+172,102, 76,164, 98, 76,164, 98, 76,172,102, 76,172,106, 84,
+172,102, 84,172,102, 76,172,106, 84,172,102, 76,156, 90, 68,
+164, 94, 68,172,106, 84,172,106, 84,172,102, 76,172, 98, 76,
+164, 98, 76,164, 98, 76,172,102, 76,172,102, 76,172,102, 84,
+164,102, 76,172,102, 76,164, 98, 76,172,102, 76,180,106, 84,
+172,106, 84,164,102, 76,172,102, 76,172,110, 92,180,110, 84,
+172,110, 84,172,106, 84,172,106, 84,172,106, 84,172,106, 84,
+172,106, 84,172,106, 84,180,114, 84,172,106, 84,180,106, 84,
+172,106, 84,164, 94, 68,164, 98, 76,180,110, 84,180,114, 92,
+164, 98, 84,156, 98, 76,164, 98, 76,172,106, 84,172,110, 92,
+172,106, 84,164,102, 76,164,102, 84,156, 90, 68,156, 90, 68,
+156, 94, 76,164,102, 76,164, 98, 76,156, 94, 76,164, 98, 76,
+164,102, 84,164, 98, 76,164, 98, 76,164, 98, 84,172, 98, 76,
+164, 98, 84,172, 98, 76,172,102, 84,172,106, 92,164, 98, 76,
+164, 94, 76,164, 98, 76,164, 98, 84,172,106, 84,172,102, 84,
+164, 98, 76,156, 90, 68,164, 98, 76,164, 98, 76,164, 98, 84,
+164, 98, 76,164, 98, 84,164,102, 76,164, 98, 84,164,102, 76,
+172,102, 84,164,102, 84,164, 98, 76,164, 98, 84,164, 98, 76,
+164, 98, 76,164,102, 76,164, 98, 76,164, 98, 84,172, 98, 84,
+164,102, 84,164,102, 84,164,102, 84,164,106, 84,172,102, 84,
+172,106, 84,172,102, 84,172,102, 84,172,102, 92,164, 98, 84,
+164,102, 92,156, 98, 84,132, 74, 60,116, 62, 52,116, 58, 44,
+148, 86, 68,164, 94, 76,164,102, 84,164,102, 76,164, 98, 76,
+164, 98, 76,164,102, 84,164, 98, 76,172,106, 84,172,106, 84,
+172,106, 92,172,110, 84,172,110, 92,180,110, 92,180,114, 92,
+180,114, 92,164,102, 84,172,102, 84,172,106, 84,172,106, 92,
+180,110, 92,180,110, 92,172,106, 84,172,102, 84,164, 98, 84,
+180,114, 92,188,122,100,180,114, 92,172,102, 84,180,106, 92,
+188,118,100,188,122,100,172,102, 84,172,106, 84,180,106, 84,
+180,110, 84,180,110, 84,180,106, 92,172,102, 76,172,102, 84,
+180,110, 84,180,110, 84,180,110, 92,180,110, 84,180,114, 92,
+180,114, 92,180,110, 84,172,106, 84,172,102, 76,164, 98, 76,
+172,102, 84,172,106, 84,180,110, 92,180,114, 92,172,102, 84,
+172,102, 84,172,106, 84,172,106, 84,180,106, 84,172,106, 84,
+172,102, 76,164, 98, 76,172,102, 76,172,102, 84,172,106, 84,
+180,110, 92,180,110, 84,180,110, 84,172,106, 84,172,106, 84,
+180,110, 84,180,114, 92,180,114, 92,188,114, 92,180,114, 92,
+180,110, 92,172,110, 84,172,106, 84,180,114, 92,180,110, 92,
+180,110, 84,172,110, 84,180,110, 84,172,106, 84,172,106, 84,
+172,102, 76,172,102, 84,172,102, 84,172,106, 76,164, 98, 76,
+164, 98, 76,172, 98, 76,172,102, 84,172,106, 84,172,106, 76,
+164, 98, 76,172,106, 84,172,102, 84,164, 94, 68,164, 94, 76,
+172,102, 76,172,102, 76,164,102, 84,172,102, 76,164, 98, 76,
+172,102, 76,172,102, 84,172,106, 84,172,102, 76,172,102, 84,
+164,102, 76,172, 98, 76,164,102, 76,172,106, 84,172,102, 76,
+172,102, 76,172,102, 84,180,110, 84,180,110, 84,172,102, 84,
+172,102, 76,172,106, 84,172,106, 76,172,102, 76,172,102, 84,
+172,106, 84,180,110, 84,172,106, 84,180,110, 84,172,102, 84,
+156, 90, 68,164, 94, 68,172,110, 84,180,114, 92,172,102, 76,
+164, 94, 76,164, 98, 76,164,102, 84,172,106, 84,164,102, 84,
+164, 98, 76,164, 98, 84,156, 94, 76,164, 98, 76,164, 98, 84,
+164,102, 84,164, 98, 76,164, 98, 84,164,102, 76,164,102, 84,
+164, 94, 76,164, 94, 76,164, 98, 76,164, 98, 84,164, 98, 76,
+164, 98, 76,172,102, 84,172,106, 84,164, 98, 76,164, 98, 76,
+164, 94, 76,164, 98, 76,172,102, 84,172,102, 84,164, 94, 76,
+156, 90, 68,164, 98, 84,164, 98, 76,164, 98, 76,164, 98, 76,
+164, 98, 76,164, 98, 84,164,102, 84,172,102, 84,164,102, 84,
+164, 98, 76,164, 98, 84,164, 98, 76,164, 98, 76,164, 98, 84,
+164, 98, 76,164, 98, 84,172,102, 84,164,102, 84,172,102, 84,
+164, 98, 84,164,102, 76,164, 98, 76,164,102, 76,164, 98, 76,
+172, 98, 84,164, 98, 76,172, 98, 84,164, 94, 76,164, 98, 84,
+156, 98, 84,124, 70, 60,116, 58, 44,116, 62, 44,164, 98, 76,
+164,102, 84,172,106, 84,164, 98, 84,164,102, 84,172,102, 84,
+172,106, 84,164,102, 84,164, 98, 84,164, 98, 76,164,102, 84,
+172,102, 84,172,106, 84,172,110, 84,172,110, 92,180,110, 92,
+172,110, 92,180,110, 92,180,110, 92,180,114, 92,180,114, 92,
+180,114, 92,180,106, 92,164,102, 84,180,106, 84,180,114,100,
+188,118,100,188,118,100,180,114, 92,180,110, 92,180,118,100,
+188,118,100,188,114, 92,188,118,100,188,118, 92,188,118,100,
+188,114, 92,188,122,100,172,106, 84,172,106, 84,180,110, 84,
+172,110, 92,180,110, 84,172,106, 84,172,110, 84,180,110, 84,
+180,114, 92,172,106, 84,172,102, 84,172,102, 76,172,106, 84,
+180,110, 84,180,114, 92,180,114, 92,180,110, 84,172,110, 84,
+172,106, 84,180,110, 84,180,114, 92,180,110, 84,172,106, 84,
+172,102, 76,172,106, 84,172,106, 84,180,110, 84,180,114, 92,
+180,114, 92,180,114, 92,180,106, 84,172,106, 84,172,106, 84,
+180,110, 84,180,114, 92,188,118, 92,188,118, 92,180,114, 92,
+180,110, 84,172,106, 84,180,106, 84,172,106, 84,180,106, 84,
+172,106, 84,172,106, 84,172,102, 84,172,102, 76,172,106, 84,
+172,106, 84,172,106, 84,172,106, 84,172,102, 76,172,102, 84,
+172,102, 76,172,106, 84,180,110, 84,180,106, 84,172,102, 76,
+172,106, 84,172,106, 84,164, 98, 76,164, 98, 76,172,102, 84,
+164, 98, 76,172,106, 76,172,102, 84,164, 98, 76,172,102, 76,
+172,106, 84,172,106, 84,172,106, 84,172,102, 76,172,102, 84,
+172,102, 76,172,102, 84,172,106, 84,172,106, 84,172, 98, 76,
+164,102, 84,180,110, 84,172,110, 84,172,102, 84,172,102, 76,
+172,106, 84,172,106, 84,172, 98, 76,172,102, 76,172,106, 84,
+172,106, 84,172,102, 84,180,110, 84,172,106, 84,156, 94, 68,
+164, 90, 68,172,106, 84,180,110, 84,164,102, 84,164, 98, 76,
+164, 98, 76,164,102, 84,172,106, 84,164, 98, 84,164, 98, 76,
+164, 98, 76,164, 98, 76,172,106, 84,172,106, 84,164, 98, 76,
+164, 94, 76,164, 98, 76,164, 98, 84,164, 98, 76,164, 98, 76,
+164, 98, 84,172,102, 84,172, 98, 76,164, 98, 76,164, 94, 76,
+164, 98, 76,172,102, 84,164, 98, 84,164, 94, 76,164, 94, 76,
+164, 94, 76,164, 98, 84,164, 98, 76,164, 94, 76,156, 86, 68,
+164, 94, 76,156, 94, 76,164, 98, 76,164, 98, 76,164,102, 84,
+172,102, 76,164,102, 84,164,102, 76,172,102, 84,164,102, 76,
+164,102, 84,164, 98, 76,164, 98, 76,164, 98, 76,164, 98, 84,
+164,102, 76,164,102, 84,172, 98, 84,164,102, 84,164, 98, 76,
+164,102, 84,156, 98, 76,164, 98, 76,164, 94, 76,164, 98, 76,
+172, 98, 84,172, 98, 84,164, 90, 76,172,106, 92,164,106, 92,
+132, 70, 60,116, 62, 44,116, 58, 44,164, 98, 84,164, 98, 76,
+164, 98, 76,156, 90, 68,156, 90, 68,164, 98, 76,164,102, 84,
+164, 98, 76,172,106, 84,172,102, 84,172,106, 84,172,106, 84,
+172,106, 92,172,106, 84,172,110, 92,172,106, 84,180,110, 92,
+172,106, 84,180,110, 92,180,110, 92,180,114,100,180,110, 92,
+172,106, 84,164, 98, 76,180,110, 92,180,110, 92,180,114, 92,
+188,118,100,188,118,100,180,114, 92,180,110, 92,180,110, 92,
+180,114, 92,188,118, 92,188,118,100,180,110, 84,180,110, 92,
+188,118, 92,172,106, 84,180,110, 84,180,114, 92,180,110, 92,
+180,110, 84,172,106, 84,172,106, 84,180,106, 84,180,110, 92,
+172,106, 84,180,110, 84,180,110, 92,180,114, 92,180,114, 92,
+180,110, 92,180,106, 84,172,110, 84,180,106, 84,180,110, 92,
+180,110, 84,180,118,100,188,114, 92,180,114, 92,180,110, 92,
+188,122,100,188,118, 92,180,114,100,180,114, 84,180,110, 92,
+180,110, 84,180,110, 92,180,110, 84,172,106, 84,172,110, 84,
+180,110, 84,180,110, 92,180,110, 84,180,110, 92,180,110, 84,
+180,110, 92,164, 98, 76,172,102, 76,172,106, 84,172,102, 76,
+172,102, 76,172,102, 76,172,106, 84,180,106, 84,180,110, 84,
+180,110, 84,180,110, 92,172,106, 84,172,106, 84,172,106, 84,
+172,110, 84,180,114, 92,180,110, 92,172,106, 84,180,106, 84,
+180,110, 84,172,102, 76,172,102, 76,172,102, 76,164, 94, 76,
+172,106, 84,172,102, 84,172,106, 84,172,102, 84,172,106, 84,
+180,110, 84,172,106, 84,172,106, 84,172,106, 84,172,106, 84,
+172,106, 84,180,110, 84,172,106, 84,172,102, 76,172,102, 84,
+180,110, 84,180,110, 92,172,106, 76,172,102, 84,172,106, 84,
+172,106, 84,172,102, 76,164,102, 76,180,106, 84,164, 98, 76,
+164,102, 76,180,110, 84,172,110, 84,164, 94, 76,156, 94, 68,
+172,102, 84,172,106, 84,172,106, 92,164,102, 84,164, 98, 76,
+164,102, 84,172,102, 84,164, 98, 76,164, 98, 84,164,102, 84,
+156, 90, 68,164,102, 84,164,102, 84,156, 86, 68,148, 86, 68,
+172,102, 84,172,110, 84,172,102, 84,172,102, 84,172,102, 84,
+172,102, 84,164, 98, 76,164, 94, 76,156, 94, 76,164, 94, 76,
+164, 98, 76,172, 98, 84,164, 98, 76,156, 90, 76,164, 94, 76,
+172, 98, 76,164, 98, 84,164, 94, 76,156, 90, 68,148, 90, 68,
+156, 94, 76,164, 94, 76,164,102, 84,164,102, 84,164,102, 84,
+164, 98, 76,164, 98, 84,172,106, 84,164,102, 84,172,102, 84,
+164, 98, 76,164, 98, 84,164, 98, 76,164,102, 76,164, 98, 84,
+164, 94, 76,164, 94, 76,164, 98, 84,164,102, 84,164,102, 84,
+164, 98, 76,164, 94, 76,156, 94, 76,164, 98, 76,164, 94, 84,
+164, 98, 84,156, 94, 76,164,106, 92,164,102, 92,124, 66, 52,
+116, 58, 44,116, 58, 36,164,106, 92,172,106, 84,164,106, 84,
+172,102, 84,164,102, 84,164,102, 84,164,102, 76,164, 98, 84,
+172,106, 84,172,106, 84,172,110, 92,172,110, 84,172,106, 92,
+172,106, 84,172,110, 92,180,114, 92,180,110, 92,180,110, 92,
+172,110, 92,180,110, 92,188,118, 92,188,118,100,180,114,100,
+180,114, 92,180,114, 92,180,114, 92,188,118,100,180,114,100,
+180,114, 92,180,114, 92,180,110, 92,172,106, 84,188,118,100,
+188,118, 92,188,118,100,188,118, 92,188,118, 92,180,114, 92,
+180,106, 92,180,114, 92,188,118,100,180,114,100,180,110, 92,
+172,106, 84,180,110, 92,180,114, 92,180,114, 92,180,110, 92,
+172,106, 84,172,106, 84,180,114, 92,188,122,100,188,118,100,
+180,118, 92,188,114,100,180,118, 92,188,118,100,188,118,100,
+188,118,100,180,114, 92,180,118, 92,188,118,100,188,122,100,
+188,118,100,180,114, 92,188,114, 92,180,114,100,180,114, 92,
+180,110, 92,172,106, 84,188,118, 92,180,114, 92,172,110, 84,
+172,110, 84,172,110, 84,172,110, 84,180,110, 84,172,106, 84,
+172,110, 84,172,106, 84,180,106, 84,172,106, 84,180,106, 84,
+172,102, 84,180,106, 84,172,106, 84,172,106, 84,172,106, 84,
+180,110, 84,180,114, 84,180,110, 92,180,110, 84,180,110, 92,
+180,110, 84,172,106, 84,172,106, 76,172,102, 84,164,102, 76,
+164,102, 76,172,102, 84,172,106, 84,172,106, 84,172,102, 76,
+172,102, 84,172,106, 84,180,110, 84,180,110, 92,172,106, 84,
+172,106, 84,172,102, 84,180,106, 84,172,106, 84,180,106, 92,
+172,106, 84,180,106, 92,172,106, 84,172,106, 84,172,106, 84,
+172,106, 84,172,110, 84,180,110, 84,172,110, 84,172, 98, 76,
+164,102, 76,172,110, 84,180,118, 92,172,106, 84,172,110, 84,
+172,102, 84,172,102, 76,164,102, 76,164, 98, 76,164, 98, 76,
+164, 98, 68,164,102, 84,164,102, 76,164, 98, 84,164, 98, 76,
+164, 98, 76,164, 98, 76,164,102, 76,164,102, 84,164, 98, 76,
+164, 98, 76,156, 98, 76,164, 94, 76,156, 94, 76,164, 98, 76,
+164, 98, 84,164,106, 84,164, 98, 76,164, 98, 76,156, 94, 76,
+156, 94, 76,164, 94, 76,164, 98, 76,172,102, 84,164,102, 84,
+164, 94, 76,156, 98, 76,164, 94, 76,164, 98, 76,164, 98, 76,
+164,102, 76,164, 94, 76,156, 94, 76,148, 86, 68,164, 94, 76,
+164,102, 84,164,102, 76,164, 94, 76,156, 94, 76,164, 98, 76,
+164, 98, 76,164, 98, 76,164, 98, 76,164, 98, 76,164, 98, 76,
+164, 98, 76,164, 98, 84,164, 98, 76,164, 98, 76,164, 98, 84,
+164, 94, 84,164, 90, 76,164, 94, 76,164, 98, 84,164, 98, 84,
+164, 94, 76,164, 94, 76,172,102, 84,164, 98, 76,172, 98, 84,
+164, 98, 84,172,110, 92,164,102, 84,124, 66, 52,116, 58, 36,
+108, 46, 28,180,110, 92,180,110, 92,172,110, 92,172,110, 84,
+172,106, 84,172,106, 84,172,106, 84,172,106, 84,172,110, 92,
+172,110, 92,180,110, 92,172,110, 92,172,110, 84,172,110, 92,
+180,114, 92,180,118,100,180,110, 92,172,106, 84,180,110, 92,
+180,110, 92,180,114,100,188,118,100,180,114, 92,180,114, 92,
+180,114,100,180,114, 92,180,114,100,180,114, 92,180,110, 92,
+180,110, 92,172,106, 92,180,106, 84,180,114, 92,180,110, 92,
+180,114, 92,180,114, 92,180,114, 92,180,114, 92,172,110, 92,
+180,110, 92,188,118,100,180,114, 92,180,110, 92,172,106, 84,
+180,106, 92,180,110, 92,180,114, 92,172,106, 92,172,106, 84,
+180,106, 92,180,114, 92,188,118,100,188,118,100,180,114, 92,
+180,110, 92,180,114,100,188,118,100,188,118,100,180,118,100,
+188,118,100,188,118,100,188,118,100,196,126,108,188,122,100,
+188,118,100,188,118,100,188,122,100,188,118,100,180,118,100,
+180,114, 92,188,118,100,180,118, 92,180,110, 84,180,110, 92,
+180,114, 84,180,114, 92,180,110, 92,180,110, 84,180,110, 92,
+180,110, 84,180,110, 92,180,110, 92,188,114, 84,180,110, 92,
+180,110, 84,188,114, 92,188,114, 92,180,118, 92,188,118,100,
+188,118, 92,188,122,100,188,118, 92,188,118,100,180,118, 92,
+180,106, 84,172,106, 84,172,102, 76,172,102, 76,172,102, 84,
+172,102, 76,172,106, 84,172,106, 84,172,102, 84,164,102, 84,
+172,102, 84,172,106, 84,172,106, 84,172,102, 84,172,102, 84,
+164, 98, 84,172,106, 84,172,110, 92,172,106, 84,180,110, 92,
+172,106, 84,172,110, 92,180,106, 92,172,110, 92,180,110, 84,
+172,114, 92,180,114, 92,172,110, 84,172,106, 84,172,106, 84,
+180,114, 84,180,118, 92,180,110, 84,172,110, 84,172,110, 84,
+172,106, 84,164,102, 76,172,102, 76,164,102, 76,164,102, 84,
+172,102, 76,164,102, 84,164, 98, 76,164, 98, 84,164, 98, 76,
+164,102, 84,164,102, 84,172, 98, 76,164, 98, 84,164, 98, 76,
+164, 94, 76,156, 94, 68,164, 94, 76,164, 98, 76,164, 98, 76,
+164,102, 84,172,102, 84,164,102, 84,164, 98, 76,164, 98, 76,
+156, 94, 76,164, 98, 76,164, 98, 76,164,102, 76,164, 98, 76,
+164, 98, 76,156, 94, 76,164, 98, 76,164,102, 84,164, 98, 84,
+164, 98, 76,164, 94, 76,156, 94, 68,164,102, 84,172,106, 84,
+172,110, 92,172,102, 84,164,102, 76,172,102, 84,164,106, 84,
+164, 98, 84,164, 98, 76,164, 98, 84,156, 98, 76,164, 98, 76,
+164, 98, 76,164, 98, 76,164, 98, 84,164, 98, 84,164, 94, 76,
+164, 94, 76,164, 94, 76,164, 98, 84,164, 98, 84,164, 98, 84,
+164, 94, 76,156, 94, 84,156, 94, 76,156, 94, 76,156, 90, 76,
+164, 98, 84,156, 90, 76,116, 54, 36,108, 46, 28,116, 54, 36,
+172,110, 92,172,110, 92,180,110, 92,172,110, 92,172,106, 84,
+172,106, 92,164,106, 84,172,106, 84,172,106, 84,172,106, 84,
+172,110, 84,172,106, 92,172,106, 84,172,106, 84,172,106, 84,
+180,110, 92,172,106, 84,172,106, 84,172,106, 84,180,110, 92,
+180,114, 92,180,114, 92,188,114,100,180,114, 92,180,110, 92,
+180,110, 92,180,110, 92,180,110, 92,172,106, 84,180,106, 92,
+172,110, 84,172,106, 92,180,110, 84,180,110, 92,180,110, 92,
+180,110, 84,180,110, 92,180,106, 84,180,106, 84,180,114, 92,
+180,114,100,180,114, 92,172,106, 92,172,106, 84,172,106, 84,
+172,106, 92,180,110, 92,172,106, 84,172,102, 84,172,106, 84,
+180,114, 92,180,114,100,180,114, 92,180,114, 92,180,110, 92,
+180,114, 92,188,122,100,188,118,100,188,118,100,180,114, 92,
+180,114, 92,180,114, 92,180,110, 92,172,106, 92,172,106, 84,
+172,106, 84,172,106, 92,172,106, 84,180,110, 92,172,110, 84,
+180,114, 92,180,114, 92,172,110, 84,172,110, 84,172,110, 84,
+180,110, 92,180,114, 84,172,110, 84,172,102, 84,172,106, 76,
+172,106, 84,180,106, 84,172,106, 84,180,106, 84,180,106, 84,
+172,106, 84,180,106, 84,180,110, 84,172,110, 92,180,110, 84,
+180,110, 92,172,110, 84,180,110, 84,172,106, 84,172,106, 84,
+172,106, 84,164,102, 84,172,102, 76,164,102, 76,172,102, 84,
+172,106, 76,172,106, 84,172,102, 84,172,102, 84,172,106, 84,
+180,106, 84,172,106, 92,172,106, 84,172,102, 84,172,102, 84,
+172,102, 84,172,106, 84,172,102, 84,172,106, 84,172,106, 92,
+180,106, 84,172,106, 92,172,110, 84,180,110, 92,180,110, 92,
+172,114, 92,180,110, 84,172,114, 92,180,110, 84,172,114, 92,
+180,110, 92,172,114, 92,180,110, 92,172,106, 84,172,106, 84,
+164,106, 84,172,106, 84,164,102, 84,172,106, 84,164, 98, 76,
+164, 98, 76,164, 98, 84,164,102, 76,164,102, 84,164, 98, 76,
+164, 98, 84,164, 98, 76,164, 98, 76,164, 98, 76,156, 94, 76,
+156, 90, 76,156, 94, 68,156, 94, 76,156, 94, 76,164, 98, 76,
+164,102, 84,164,102, 76,164, 98, 76,156, 94, 76,156, 94, 76,
+156, 94, 68,156, 90, 76,156, 94, 76,164, 98, 76,164, 98, 76,
+156, 94, 76,164, 98, 76,164, 98, 76,164, 98, 76,164, 98, 76,
+156, 94, 76,156, 86, 68,156, 94, 68,164, 98, 76,164, 98, 76,
+156, 94, 76,156, 90, 68,156, 94, 76,164, 94, 76,156, 98, 76,
+164, 94, 76,156, 98, 76,164, 94, 76,164, 98, 76,156, 94, 76,
+164, 98, 76,156, 94, 76,164, 94, 76,156, 90, 76,156, 90, 76,
+156, 90, 76,156, 94, 76,164, 94, 76,156, 90, 76,156, 94, 76,
+164, 98, 84,164, 94, 76,164, 98, 84,156, 94, 76,164,102, 84,
+156, 94, 76,116, 58, 36,116, 54, 36,116, 58, 36,180,114,100,
+180,118, 92,180,114, 92,180,114, 92,180,114, 92,180,114, 92,
+180,110, 92,172,110, 92,180,114, 92,180,114,100,180,114, 92,
+180,114, 92,172,110, 92,172,110, 92,180,114, 92,180,118,100,
+180,114, 92,180,114,100,188,118,100,188,118,100,188,122,100,
+196,126,108,188,122,108,196,126,100,188,122,108,188,122,100,
+188,118,100,180,118,100,188,114,100,180,118,100,188,118,100,
+188,118,100,196,126,108,188,126,100,196,126,108,188,122,100,
+180,114,100,180,114, 92,188,122,100,196,122,108,196,126,108,
+196,126,100,188,118,100,180,114,100,188,114, 92,180,118,100,
+188,122,100,188,118,100,188,114,100,188,118,100,188,122,100,
+196,122,108,188,126,108,188,122,100,196,126,108,196,130,108,
+196,130,116,196,130,108,196,126,108,188,118,100,180,114,100,
+180,110, 92,172,106, 84,172,106, 84,172,102, 84,172,102, 84,
+172,106, 84,180,106, 92,180,114, 92,180,114, 92,180,118, 92,
+180,118, 92,180,118, 92,180,118, 92,188,118, 92,180,118, 92,
+180,118, 92,188,118,100,180,114, 84,180,110, 92,188,114, 92,
+180,110, 92,188,114, 92,188,118, 92,188,118,100,188,118, 92,
+180,114, 92,180,114, 92,180,114, 92,180,114, 92,180,110, 84,
+180,110, 92,180,110, 84,180,110, 84,188,118, 92,180,114, 92,
+180,114, 92,180,110, 84,180,110, 92,180,114, 92,180,114, 92,
+188,118, 92,188,118,100,188,122,100,188,122,100,188,122,108,
+188,122,100,188,122,100,188,122,100,188,118,100,180,114, 92,
+180,114, 92,180,114,100,188,114, 92,180,118,100,188,118,100,
+188,118,100,188,118,100,188,122,100,180,122,100,188,118,100,
+188,122,100,188,122,100,188,126,108,188,122,100,180,118, 92,
+172,106, 84,172,110, 84,172,106, 84,164,102, 84,172,102, 76,
+164,102, 76,164,102, 84,172,102, 76,156, 94, 76,164, 98, 76,
+164, 98, 76,164,102, 84,164, 98, 76,164,102, 76,164, 98, 76,
+156, 98, 76,164, 98, 84,164, 98, 76,156, 94, 76,164, 94, 68,
+156, 94, 76,156, 94, 68,164, 94, 76,156, 94, 76,164, 98, 76,
+164, 98, 84,164, 98, 76,156, 94, 76,156, 90, 68,156, 94, 76,
+156, 90, 68,156, 94, 76,164, 94, 76,156, 94, 76,164, 94, 76,
+156, 98, 76,164, 98, 76,164, 98, 84,156, 98, 76,156, 94, 68,
+164, 94, 76,164, 98, 76,164,102, 84,164,102, 84,164, 98, 76,
+164, 98, 76,164, 98, 76,164, 98, 76,156, 94, 76,156, 94, 68,
+156, 94, 76,156, 94, 76,156, 94, 76,156, 94, 76,156, 94, 68,
+156, 94, 76,172, 98, 84,164, 98, 84,172, 98, 76,164, 94, 84,
+172, 98, 84,164, 98, 84,164, 98, 84,172, 98, 84,164, 98, 84,
+164, 98, 84,164,106, 84,164,102, 84,172,110, 92,164, 98, 84,
+124, 66, 44,116, 58, 36,116, 50, 36,172,106, 84,164,102, 84,
+172,102, 84,164,102, 84,172,102, 84,164,102, 84,164,102, 84,
+172,102, 84,164,102, 84,172,106, 84,164,106, 84,172,102, 84,
+164,102, 76,172,102, 84,164,102, 84,172,106, 84,172,102, 84,
+180,106, 84,172,110, 92,180,114, 92,180,110, 92,180,114, 92,
+180,114, 92,180,114,100,180,114, 92,180,110, 92,180,110, 92,
+172,106, 84,180,110, 84,172,106, 84,180,110, 92,180,110, 92,
+180,118, 92,180,114,100,180,110, 92,180,110, 92,180,106, 92,
+172,102, 84,180,114, 92,180,114, 92,180,114,100,180,114, 92,
+180,110, 92,180,106, 92,172,106, 84,172,106, 84,180,106, 92,
+172,110, 92,172,106, 84,180,110, 92,180,110, 92,180,114, 92,
+180,110, 92,180,110, 92,180,110, 92,188,114,100,188,122,100,
+188,118,100,180,110, 92,172,106, 84,172,102, 84,164, 98, 76,
+172,102, 84,172,102, 84,164,102, 84,172, 98, 76,164, 98, 84,
+172,106, 84,180,106, 92,180,110, 92,172,106, 92,172,110, 84,
+172,106, 84,172,110, 92,172,106, 84,172,110, 92,180,106, 84,
+172,110, 92,180,110, 84,172,110, 92,180,110, 84,180,110, 92,
+180,114, 92,180,114, 92,188,114, 92,188,114, 92,180,110, 92,
+180,110, 92,180,110, 92,180,110, 84,180,110, 92,172,110, 84,
+172,106, 84,172,106, 92,172,106, 84,180,106, 84,172,106, 84,
+172,102, 84,172,106, 84,172,106, 84,172,106, 84,172,106, 84,
+180,110, 92,180,110, 92,180,110, 92,180,114, 92,180,114,100,
+180,114, 92,180,110, 92,180,110, 92,172,102, 84,172,102, 84,
+172,106, 84,172,106, 84,172,106, 92,180,110, 84,172,110, 92,
+180,110, 92,172,106, 92,172,106, 84,172,106, 84,172,110, 92,
+180,114, 92,180,110, 92,172,110, 92,172,102, 84,172,106, 92,
+164,102, 84,172,102, 84,164,102, 84,164, 98, 84,164,102, 76,
+164, 98, 84,164,102, 84,164, 98, 76,164, 98, 76,164, 98, 84,
+172,102, 76,164,102, 84,164, 98, 84,164, 98, 84,164, 98, 76,
+172,102, 76,164,102, 84,164,102, 76,164, 98, 84,164, 98, 76,
+164, 98, 76,164, 98, 76,164, 98, 76,164, 98, 76,164, 98, 76,
+164, 98, 76,164, 94, 76,164, 98, 76,164, 94, 76,164, 98, 76,
+164, 98, 76,164, 98, 76,164, 98, 76,164, 98, 76,164, 98, 76,
+164,102, 84,164,102, 84,164, 98, 76,156, 94, 76,164, 98, 76,
+164, 98, 84,172,102, 84,164,102, 76,164, 98, 84,164, 98, 76,
+164, 98, 84,164, 98, 76,164, 94, 76,164, 94, 76,164, 94, 76,
+156, 94, 76,164, 94, 68,164, 94, 76,164, 94, 76,156, 94, 76,
+164, 94, 76,164, 90, 76,156, 94, 76,164, 94, 76,164, 94, 76,
+156, 94, 76,164, 94, 76,164, 94, 76,156, 94, 76,164, 94, 76,
+164,102, 84,164,102, 84,172,106, 92,156, 94, 76,124, 62, 44,
+116, 50, 36,108, 50, 28,156, 86, 68,156, 90, 68,148, 86, 68,
+156, 90, 68,148, 86, 68,156, 90, 68,156, 86, 68,148, 90, 68,
+156, 90, 68,156, 90, 76,156, 94, 76,156, 90, 68,148, 86, 68,
+156, 86, 68,156, 90, 68,156, 90, 76,148, 86, 68,156, 86, 68,
+156, 90, 68,164, 90, 76,156, 90, 68,156, 90, 76,164, 90, 68,
+156, 90, 76,164, 90, 68,156, 90, 76,156, 90, 68,156, 90, 68,
+156, 90, 76,156, 90, 68,156, 90, 68,156, 90, 68,156, 86, 76,
+156, 86, 68,156, 90, 76,156, 90, 68,156, 90, 76,156, 90, 68,
+164, 90, 76,164, 94, 76,164, 94, 76,156, 94, 76,156, 90, 68,
+156, 90, 68,156, 86, 68,156, 86, 68,156, 86, 68,156, 86, 68,
+156, 90, 68,156, 90, 68,156, 90, 76,164, 90, 68,156, 90, 76,
+156, 90, 68,148, 86, 68,156, 86, 68,164, 94, 76,164, 94, 76,
+156, 90, 68,156, 90, 68,156, 86, 68,156, 86, 68,156, 86, 68,
+156, 86, 68,156, 86, 68,156, 86, 68,156, 86, 68,156, 86, 68,
+156, 90, 68,164, 94, 76,156, 90, 68,156, 94, 76,164, 98, 76,
+164, 94, 76,156, 94, 68,156, 90, 68,156, 94, 68,164, 94, 68,
+156, 86, 68,156, 86, 68,156, 90, 68,156, 90, 68,164, 90, 68,
+164, 90, 76,164, 90, 68,164, 90, 76,164, 94, 76,156, 94, 68,
+164, 94, 68,156, 90, 68,156, 90, 68,164, 90, 68,164, 94, 76,
+156, 90, 68,156, 90, 68,156, 90, 68,156, 90, 68,164, 90, 68,
+156, 90, 68,156, 90, 68,164, 90, 68,156, 90, 68,156, 90, 76,
+156, 90, 68,156, 90, 76,164, 90, 68,156, 90, 68,156, 90, 76,
+156, 90, 68,156, 90, 76,156, 90, 68,156, 90, 76,156, 86, 68,
+164, 90, 76,156, 90, 68,164, 90, 76,156, 94, 68,164, 94, 76,
+156, 90, 68,156, 90, 76,156, 90, 68,156, 90, 76,156, 94, 76,
+156, 94, 76,156, 90, 76,148, 86, 68,164, 98, 84,164, 98, 76,
+164, 98, 76,156, 94, 76,164, 94, 76,156, 94, 76,164, 94, 76,
+156, 94, 76,164, 94, 76,156, 98, 76,164, 98, 76,164, 98, 76,
+164, 94, 76,164, 98, 76,156, 94, 76,156, 94, 76,164, 98, 76,
+164, 98, 76,164, 98, 76,164, 98, 76,164, 98, 76,164, 98, 76,
+164, 98, 76,156, 94, 76,156, 94, 76,156, 90, 68,156, 94, 76,
+156, 94, 76,164, 94, 76,156, 98, 76,164, 98, 76,164, 98, 84,
+156, 94, 76,156, 94, 76,156, 94, 76,164, 94, 76,164, 98, 76,
+164, 98, 76,164, 94, 76,156, 90, 76,156, 90, 68,156, 90, 68,
+156, 94, 76,156, 90, 68,156, 90, 68,156, 90, 68,148, 90, 68,
+156, 90, 68,156, 90, 76,156, 94, 68,156, 90, 68,156, 94, 76,
+156, 90, 68,156, 94, 76,156, 90, 68,156, 94, 68,156, 82, 68,
+156, 86, 76,156, 90, 76,156, 86, 76,148, 86, 68,156, 86, 68,
+156, 86, 76,156, 90, 68,156, 94, 76,164, 94, 84,164, 98, 84,
+156, 94, 76,156, 98, 76,148, 86, 68,116, 54, 36,108, 50, 28,
+108, 50, 36,140, 78, 60,140, 78, 60,148, 78, 60,140, 78, 60,
+140, 78, 60,140, 78, 60,140, 78, 60,140, 78, 60,148, 82, 60,
+148, 82, 60,148, 82, 60,148, 78, 60,140, 74, 52,140, 74, 52,
+140, 78, 60,148, 82, 60,140, 70, 52,140, 74, 52,148, 74, 60,
+140, 78, 60,148, 74, 60,140, 74, 52,140, 74, 52,140, 78, 60,
+140, 74, 52,148, 78, 60,140, 74, 60,148, 78, 60,148, 74, 60,
+148, 78, 60,148, 74, 60,148, 78, 60,140, 70, 52,140, 70, 52,
+148, 74, 60,140, 74, 60,148, 78, 60,148, 78, 68,140, 78, 60,
+148, 78, 60,140, 78, 60,148, 78, 60,148, 78, 60,148, 74, 60,
+140, 74, 52,140, 74, 52,140, 74, 52,140, 74, 52,140, 74, 52,
+148, 74, 60,148, 78, 60,140, 78, 60,148, 74, 60,140, 74, 52,
+140, 70, 52,140, 74, 52,140, 78, 60,148, 78, 60,148, 78, 60,
+148, 78, 60,148, 78, 60,148, 82, 60,140, 74, 52,140, 74, 52,
+140, 78, 60,140, 74, 52,140, 74, 52,140, 74, 52,140, 74, 52,
+140, 78, 60,140, 82, 60,148, 82, 60,148, 86, 68,148, 86, 60,
+140, 82, 60,148, 78, 60,140, 78, 60,140, 78, 60,140, 70, 52,
+140, 70, 52,140, 74, 52,140, 70, 52,140, 74, 52,140, 70, 52,
+140, 74, 52,140, 74, 52,140, 78, 60,148, 74, 60,140, 74, 52,
+140, 74, 60,140, 74, 52,140, 74, 60,140, 78, 60,148, 78, 60,
+156, 82, 60,148, 82, 68,156, 82, 60,148, 82, 68,148, 82, 60,
+156, 82, 68,148, 82, 60,148, 82, 68,148, 82, 60,148, 82, 60,
+148, 82, 60,148, 82, 68,148, 78, 60,156, 82, 60,148, 82, 68,
+148, 82, 60,156, 82, 60,148, 82, 60,156, 82, 68,148, 82, 60,
+156, 86, 68,148, 82, 60,156, 82, 68,148, 82, 60,148, 82, 68,
+148, 82, 68,148, 82, 68,148, 86, 68,148, 82, 68,156, 86, 68,
+148, 82, 68,148, 82, 60,148, 82, 68,140, 78, 60,148, 78, 68,
+140, 78, 60,148, 78, 60,140, 78, 60,148, 78, 60,140, 78, 60,
+148, 82, 60,148, 78, 60,140, 78, 60,140, 78, 60,140, 78, 60,
+140, 78, 60,148, 78, 60,148, 82, 60,140, 78, 60,148, 78, 60,
+140, 78, 60,148, 78, 60,140, 78, 60,140, 78, 60,148, 78, 60,
+148, 82, 60,140, 74, 52,140, 78, 60,148, 78, 60,140, 78, 60,
+148, 82, 60,148, 82, 60,148, 82, 60,148, 82, 60,148, 78, 60,
+148, 78, 60,140, 78, 60,140, 78, 60,148, 82, 60,148, 82, 60,
+148, 78, 60,140, 78, 60,148, 86, 60,148, 82, 68,148, 82, 60,
+148, 82, 60,140, 78, 60,148, 82, 60,148, 78, 60,148, 78, 60,
+140, 78, 60,140, 78, 60,140, 78, 60,140, 78, 60,140, 78, 60,
+140, 78, 60,148, 78, 60,140, 78, 60,148, 82, 68,148, 82, 68,
+148, 86, 68,156, 82, 68,148, 82, 68,148, 82, 68,148, 82, 68,
+148, 86, 68,148, 82, 68,148, 78, 60,140, 82, 60,140, 74, 60,
+140, 78, 60,140, 74, 60,116, 50, 36,108, 50, 36,108, 50, 28,
+108, 42, 28,108, 42, 20,108, 42, 20,108, 42, 20,116, 46, 28,
+108, 42, 20,116, 46, 28,108, 42, 20,108, 46, 28,108, 46, 28,
+116, 46, 28,108, 46, 20,108, 42, 20,100, 42, 20,108, 42, 20,
+108, 42, 28,108, 42, 20,116, 46, 28,116, 46, 28,116, 46, 28,
+108, 42, 20,108, 38, 20,108, 42, 28,116, 42, 28,108, 42, 20,
+116, 46, 28,116, 46, 28,116, 46, 28,116, 50, 28,108, 46, 28,
+116, 46, 28,108, 42, 20,108, 42, 28,116, 42, 28,108, 46, 28,
+116, 46, 28,116, 46, 28,108, 46, 28,116, 42, 28,108, 42, 20,
+116, 46, 28,108, 42, 20,116, 46, 28,108, 46, 28,108, 42, 20,
+116, 42, 28,108, 38, 20,108, 42, 28,116, 46, 28,108, 46, 28,
+116, 46, 28,108, 42, 20,108, 42, 20,116, 42, 28,116, 46, 28,
+116, 50, 28,116, 50, 28,116, 50, 28,116, 46, 28,116, 46, 28,
+116, 46, 28,116, 50, 28,116, 46, 28,116, 50, 36,124, 50, 36,
+116, 50, 28,116, 46, 28,116, 46, 28,116, 46, 28,116, 46, 28,
+108, 46, 20,108, 50, 28,116, 50, 28,116, 54, 28,108, 46, 28,
+108, 46, 20,108, 42, 20,108, 42, 20,116, 50, 28,116, 46, 28,
+116, 46, 28,116, 46, 28,116, 46, 28,108, 46, 28,116, 46, 28,
+116, 46, 28,116, 46, 28,116, 46, 28,116, 46, 28,116, 42, 28,
+116, 46, 28,116, 46, 28,116, 50, 28,124, 50, 36,124, 58, 36,
+124, 58, 36,124, 58, 36,124, 58, 36,124, 58, 44,124, 58, 36,
+124, 58, 36,124, 54, 36,132, 62, 44,124, 54, 36,124, 58, 36,
+124, 58, 36,124, 58, 36,124, 54, 44,124, 58, 36,132, 62, 44,
+124, 54, 36,124, 58, 36,124, 58, 36,124, 58, 36,124, 58, 36,
+124, 54, 36,124, 58, 36,124, 58, 36,124, 58, 44,124, 58, 36,
+124, 58, 44,124, 54, 36,124, 58, 44,124, 58, 36,124, 58, 44,
+124, 58, 44,132, 62, 44,124, 62, 44,132, 62, 44,124, 58, 44,
+124, 58, 44,124, 58, 44,132, 62, 44,124, 62, 44,132, 62, 44,
+124, 62, 44,124, 62, 44,124, 58, 36,124, 58, 36,124, 62, 44,
+124, 62, 44,132, 62, 44,116, 58, 36,124, 58, 36,124, 58, 44,
+124, 62, 44,124, 62, 44,124, 62, 44,124, 62, 44,124, 58, 36,
+124, 62, 44,124, 58, 36,124, 62, 44,132, 62, 44,124, 62, 44,
+132, 62, 44,124, 66, 44,132, 62, 44,124, 62, 44,124, 58, 36,
+124, 58, 36,124, 62, 44,132, 62, 44,124, 62, 44,124, 62, 44,
+124, 58, 36,124, 62, 44,124, 58, 36,124, 58, 36,124, 58, 44,
+124, 58, 36,124, 58, 36,116, 58, 36,124, 58, 36,124, 58, 36,
+124, 58, 36,124, 58, 36,124, 58, 36,124, 58, 36,124, 58, 36,
+124, 58, 36,124, 58, 36,124, 50, 36,124, 54, 36,124, 54, 36,
+124, 54, 36,116, 54, 36,116, 50, 36,124, 54, 36,124, 54, 44,
+124, 54, 36,116, 54, 36,116, 54, 36,108, 46, 28,124, 58, 44,
+124, 58, 44,100, 42, 20,108, 50, 28
+};
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)escher.c 4.03 97/04/01 xlockmore";
+
+#endif
+
+#undef DEBUG_LISTS
+
+/*-
+ * escher.c - Shows some Escher like scenes
+ *
+ * See xlock.c for copying information.
+ *
+ * The RotateAroundU() routine was adapted from the book
+ * "Computer Graphics Principles and Practice
+ * Foley - vanDam - Feiner - Hughes
+ * Second Edition" Pag. 227, exercise 5.15.
+ *
+ * This mode shows some interesting scenes that are impossible OR very
+ * wierd to build in the real universe. Much of the scenes are inspirated
+ * on Mauritz Cornelis Escher's works which derivated the mode's name.
+ * M.C. Escher (1898-1972) was a dutch artist and many people prefer to
+ * say he was a matematician.
+ *
+ * Thanks goes to Brian Paul for making it possible and inexpensive to use
+ * OpenGL at home.
+ *
+ * Since I'm not a native english speaker, my apologies for any gramatical
+ * mistake.
+ *
+ * My e-mail addresses are
+ * vianna@cat.cbpf.br
+ * and
+ * marcelo@venus.rdc.puc-rio.br
+ *
+ * Marcelo F. Vianna (Jun-01-1997)
+ *
+ * Revision History:
+ * 08-Jun-97: New scene implemented: "Impossible Cage" based in a M.C. Escher's
+ * painting with the same name (quite similar). The first GL mode
+ * to use texture mapping.
+ * The "Impossible Cage" scene doesn't use DEPTH BUFFER, the
+ * wood planks are drawn consistently using GL_CULL_FACE, and
+ * the painter's algorithm is used to sort the planks.
+ * Marcelo F. Vianna.
+ * 07-Jun-97: Speed ups in Moebius Strip using GL_CULL_FACE.
+ * Marcelo F. Vianna.
+ * 03-Jun-97: Initial Release (Only one scene: "Moebius Strip")
+ * The Moebious Strip scene was inspirated in a M.C. Escher's
+ * painting named Moebius Strip II in wich ants walk across a
+ * Moebius Strip path, sometimes meeting each other and sometimes
+ * being in "opposite faces" (note that the moebius strip has
+ * only one face and one edge).
+ * Marcelo F. Vianna.
+ *
+ */
+
+/*-
+ * Texture mapping is only available on RGBA contexts, Mono and color index
+ * visuals DO NOT support texture mapping in OpenGL.
+ *
+ * BUT Mesa do implements RGBA contexts in pseudo color visuals, so texture
+ * mapping shuld work on PseudoColor, DirectColor, TrueColor using Mesa. Mono
+ * is not officially supported for both OpenGL and Mesa, but seems to not crash
+ * Mesa.
+ *
+ * In real OpenGL, PseudoColor DO NOT support texture map (as far as I know).
+ * Perhaps this explains the strange behaviour when running Multiscreen.
+ */
+
+#include <X11/Intrinsic.h>
+
+#ifdef STANDALONE
+# define PROGCLASS "Escher"
+# define HACK_INIT init_escher
+# define HACK_DRAW draw_escher
+#define DEF_DELAY 1000
+#define DEF_BATCHCOUNT 0
+#define DEF_NCOLORS 200
+# include "xlockmore.h" /* from the xscreensaver distribution */
+#else /* !STANDALONE */
+# include "xlock.h" /* from the xlockmore distribution */
+
+#endif /* !STANDALONE */
+
+#ifdef USE_GL
+
+#include <GL/glu.h>
+#include "glx/e_textures.h"
+
+static int solidmoebius;
+static int noants;
+
+#ifndef STANDALONE
+static XrmOptionDescRec opts[] =
+{
+ {"-solidmoebius", ".escher.solidmoebius", XrmoptionNoArg, (caddr_t) "on"},
+ {"+solidmoebius", ".escher.solidmoebius", XrmoptionNoArg, (caddr_t) "off"},
+ {"-noants", ".escher.noants", XrmoptionNoArg, (caddr_t) "on"},
+ {"+noants", ".escher.noants", XrmoptionNoArg, (caddr_t) "off"}
+};
+static argtype vars[] =
+{
+ {(caddr_t *) & solidmoebius, "solidmoebius", "Solidmoebius", FALSE, t_Bool},
+ {(caddr_t *) & noants, "noants", "Noants", FALSE, t_Bool}
+};
+static OptionStruct desc[] =
+{
+ {"-/+solidmoebius", "select between a SOLID or a NET Moebius Strip"},
+ {"-/+noants", "turn on/off walking ants"}
+};
+
+ModeSpecOpt escher_opts =
+{4, opts, 2, vars, desc};
+#endif /* !STANDALONE */
+
+#define Scale4Window 0.3
+#define Scale4Iconic 0.4
+
+#define sqr(A) ((A)*(A))
+
+#ifndef Pi
+#define Pi M_PI
+#endif
+
+/*************************************************************************/
+
+typedef struct {
+ GLint WindH, WindW;
+ GLfloat step;
+ GLfloat ant_position;
+ int scene;
+ int AreObjectsDefined[3];
+ GLXContext glx_context;
+} escherstruct;
+
+static float front_shininess[] =
+{60.0};
+static float front_specular[] =
+{0.7, 0.7, 0.7, 1.0};
+static float ambient[] =
+{0.0, 0.0, 0.0, 1.0};
+static float diffuse[] =
+{1.0, 1.0, 1.0, 1.0};
+static float position0[] =
+{1.0, 1.0, 1.0, 0.0};
+static float position1[] =
+{-1.0, -1.0, 1.0, 0.0};
+static float lmodel_ambient[] =
+{0.5, 0.5, 0.5, 1.0};
+static float lmodel_twoside[] =
+{GL_TRUE};
+
+static float MaterialRed[] =
+{0.7, 0.0, 0.0, 1.0};
+static float MaterialGreen[] =
+{0.1, 0.5, 0.2, 1.0};
+static float MaterialBlue[] =
+{0.0, 0.0, 0.7, 1.0};
+static float MaterialCyan[] =
+{0.2, 0.5, 0.7, 1.0};
+static float MaterialYellow[] =
+{0.7, 0.7, 0.0, 1.0};
+static float MaterialMagenta[] =
+{0.6, 0.2, 0.5, 1.0};
+static float MaterialWhite[] =
+{0.7, 0.7, 0.7, 1.0};
+static float MaterialGray[] =
+{0.2, 0.2, 0.2, 1.0};
+/*static float MaterialLightGray[] =
+{0.4, 0.4, 0.4, 1.0};*/
+
+static escherstruct *escher = NULL;
+static GLuint objects;
+
+#define NUM_SCENES 2
+
+#define ObjMoebiusStrip 0
+#define ObjAntBody 1
+#define ObjWoodPlank 2
+
+#define PlankWidth 3.0
+#define PlankHeight 0.35
+#define PlankThickness 0.15
+
+static void
+mySphere(float radius)
+{
+ GLUquadricObj *quadObj;
+
+ quadObj = gluNewQuadric();
+ gluQuadricDrawStyle(quadObj, (GLenum) GLU_FILL);
+ gluSphere(quadObj, radius, 16, 16);
+ gluDeleteQuadric(quadObj);
+}
+static void
+
+myCone(float radius)
+{
+ GLUquadricObj *quadObj;
+
+ quadObj = gluNewQuadric();
+ gluQuadricDrawStyle(quadObj, (GLenum) GLU_FILL);
+ gluCylinder(quadObj, radius, 0, radius*3, 8, 1);
+ gluDeleteQuadric(quadObj);
+}
+
+static void
+draw_escher_ant(escherstruct *ep, float *Material)
+{
+ static float ant_step=0;
+ float cos1=cos(ant_step);
+ float cos2=cos(ant_step+2*Pi/3);
+ float cos3=cos(ant_step+4*Pi/3);
+ float sin1=sin(ant_step);
+ float sin2=sin(ant_step+2*Pi/3);
+ float sin3=sin(ant_step+4*Pi/3);
+
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, Material);
+ if (!ep->AreObjectsDefined[ObjAntBody]) {
+ glNewList(objects+ObjAntBody, GL_COMPILE_AND_EXECUTE);
+ glEnable(GL_CULL_FACE);
+ glPushMatrix();
+ glScalef(1,1.3,1);
+ mySphere(0.18);
+ glScalef(1,1/1.3,1);
+ glTranslatef( 0.00, 0.30, 0.00);
+ mySphere(0.2);
+
+ glTranslatef(-0.05, 0.17, 0.05);
+ glRotatef(-90,1,0,0);
+ glRotatef(-25,0,1,0);
+ myCone(0.05);
+ glTranslatef( 0.00, 0.10, 0.00);
+ myCone(0.05);
+ glRotatef( 25,0,1,0);
+ glRotatef( 90,1,0,0);
+
+ glScalef(1,1.3,1);
+ glTranslatef( 0.15,-0.65, 0.05);
+ mySphere(0.25);
+ glScalef(1,1/1.3,1);
+ glPopMatrix();
+ glDisable(GL_CULL_FACE);
+ glEndList();
+ ep->AreObjectsDefined[ObjAntBody]=1;
+#ifdef DEBUG_LISTS
+ (void) printf("Ant drawn SLOWLY\n");
+#endif
+ } else {
+ glCallList(objects+ObjAntBody);
+#ifdef DEBUG_LISTS
+ (void) printf("Ant drawn quickly\n");
+#endif
+ }
+
+ glDisable(GL_LIGHTING);
+ /* ANTENNAS */
+ glBegin(GL_LINES);
+ glColor3fv(Material);
+ glVertex3f( 0.00, 0.30, 0.00);
+ glColor3fv(MaterialGray);
+ glVertex3f( 0.40, 0.70, 0.40);
+ glColor3fv(Material);
+ glVertex3f( 0.00, 0.30, 0.00);
+ glColor3fv(MaterialGray);
+ glVertex3f( 0.40, 0.70,-0.40);
+ glEnd();
+ glBegin(GL_POINTS);
+ glColor3fv(MaterialRed);
+ glVertex3f( 0.40, 0.70, 0.40);
+ glVertex3f( 0.40, 0.70,-0.40);
+ glEnd();
+
+ /* LEFT-FRONT ARM */
+ glBegin(GL_LINE_STRIP);
+ glColor3fv(Material);
+ glVertex3f( 0.00, 0.05, 0.18);
+ glVertex3f( 0.35+0.05*cos1, 0.15, 0.25);
+ glColor3fv(MaterialGray);
+ glVertex3f(-0.20+0.05*cos1, 0.25+0.1*sin1, 0.45);
+ glEnd();
+
+ /* LEFT-CENTER ARM */
+ glBegin(GL_LINE_STRIP);
+ glColor3fv(Material);
+ glVertex3f( 0.00, 0.00, 0.18);
+ glVertex3f( 0.35+0.05*cos2, 0.00, 0.25);
+ glColor3fv(MaterialGray);
+ glVertex3f(-0.20+0.05*cos2, 0.00+0.1*sin2, 0.45);
+ glEnd();
+
+ /* LEFT-BACK ARM */
+ glBegin(GL_LINE_STRIP);
+ glColor3fv(Material);
+ glVertex3f( 0.00,-0.05, 0.18);
+ glVertex3f( 0.35+0.05*cos3,-0.15, 0.25);
+ glColor3fv(MaterialGray);
+ glVertex3f(-0.20+0.05*cos3,-0.25+0.1*sin3, 0.45);
+ glEnd();
+
+ /* RIGHT-FRONT ARM */
+ glBegin(GL_LINE_STRIP);
+ glColor3fv(Material);
+ glVertex3f( 0.00, 0.05,-0.18);
+ glVertex3f( 0.35-0.05*sin1, 0.15,-0.25);
+ glColor3fv(MaterialGray);
+ glVertex3f(-0.20-0.05*sin1, 0.25+0.1*cos1,-0.45);
+ glEnd();
+
+ /* RIGHT-CENTER ARM */
+ glBegin(GL_LINE_STRIP);
+ glColor3fv(Material);
+ glVertex3f( 0.00, 0.00,-0.18);
+ glVertex3f( 0.35-0.05*sin2, 0.00,-0.25);
+ glColor3fv(MaterialGray);
+ glVertex3f(-0.20-0.05*sin2, 0.00+0.1*cos2,-0.45);
+ glEnd();
+
+ /* RIGHT-BACK ARM */
+ glBegin(GL_LINE_STRIP);
+ glColor3fv(Material);
+ glVertex3f( 0.00,-0.05,-0.18);
+ glVertex3f( 0.35-0.05*sin3,-0.15,-0.25);
+ glColor3fv(MaterialGray);
+ glVertex3f(-0.20-0.05*sin3,-0.25+0.1*cos3,-0.45);
+ glEnd();
+
+ glBegin(GL_POINTS);
+ glColor3fv(MaterialMagenta);
+ glVertex3f(-0.20+0.05*cos1, 0.25+0.1*sin1, 0.45);
+ glVertex3f(-0.20+0.05*cos2, 0.00+0.1*sin2, 0.45);
+ glVertex3f(-0.20+0.05*cos3,-0.25+0.1*sin3, 0.45);
+ glVertex3f(-0.20-0.05*sin1, 0.25+0.1*cos1,-0.45);
+ glVertex3f(-0.20-0.05*sin2, 0.00+0.1*cos2,-0.45);
+ glVertex3f(-0.20-0.05*sin3,-0.25+0.1*cos3,-0.45);
+ glEnd();
+
+ glEnable(GL_LIGHTING);
+
+ ant_step+=0.3;
+}
+
+static void RotateAaroundU(float Ax, float Ay, float Az,
+ float Ux, float Uy, float Uz,
+ float *Cx, float *Cy, float *Cz,
+ float Theta)
+{
+ float cosO=cos(Theta); float sinO=sin(Theta);
+ float one_cosO=1-cosO;
+ float Ux2=sqr(Ux); float Uy2=sqr(Uy); float Uz2=sqr(Uz);
+ float UxUy=Ux*Uy; float UxUz=Ux*Uz; float UyUz=Uy*Uz;
+
+ *Cx=(Ux2+cosO*(1-Ux2))*Ax + (UxUy*one_cosO-Uz*sinO)*Ay + (UxUz*one_cosO+Uy*sinO)*Az;
+ *Cy=(UxUy*one_cosO+Uz*sinO)*Ax + (Uy2+cosO*(1-Uy2))*Ay + (UyUz*one_cosO-Ux*sinO)*Az;
+ *Cz=(UxUz*one_cosO-Uy*sinO)*Ax + (UyUz*one_cosO+Ux*sinO)*Ay + (Uz2+cosO*(1-Uz2))*Az;
+}
+
+#define MoebiusDivisions 40
+#define MoebiusTransversals 4
+static void
+draw_moebius(ModeInfo * mi)
+{
+ GLfloat Phi, Theta;
+ GLfloat cPhi, sPhi;
+ escherstruct *ep = &escher[MI_SCREEN(mi)];
+ int i,j;
+
+ float Cx,Cy,Cz;
+
+ if (!ep->AreObjectsDefined[ObjMoebiusStrip]) {
+ glNewList(objects+ObjMoebiusStrip, GL_COMPILE_AND_EXECUTE);
+
+ if (solidmoebius) {
+ glBegin(GL_QUAD_STRIP);
+ Phi=0; i=0;
+ while (i<(MoebiusDivisions*2+1)) {
+ Theta=Phi/2;
+ cPhi=cos(Phi); sPhi=sin(Phi);
+
+ i++;
+ if (i%2)
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialRed);
+ else
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialGray);
+
+ RotateAaroundU(cPhi,sPhi,0, -sPhi,cPhi,0, &Cx,&Cy,&Cz, Theta);
+ glNormal3f(Cx,Cy,Cz);
+ RotateAaroundU(0,0,1, -sPhi,cPhi,0, &Cx,&Cy,&Cz, Theta);
+ glVertex3f(cPhi*3+Cx, sPhi*3+Cy,+Cz);
+ glVertex3f(cPhi*3-Cx, sPhi*3-Cy,-Cz);
+
+ Phi+=Pi/MoebiusDivisions;
+ }
+ glEnd();
+ } else {
+ for (j=-MoebiusTransversals; j<MoebiusTransversals; j++) {
+ glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
+ glBegin(GL_QUAD_STRIP);
+ Phi=0; i=0;
+ while (i<(MoebiusDivisions*2+1)) {
+ Theta=Phi/2;
+ cPhi=cos(Phi); sPhi=sin(Phi);
+
+ RotateAaroundU(cPhi,sPhi,0, -sPhi,cPhi,0, &Cx,&Cy,&Cz, Theta);
+ glNormal3f(Cx,Cy,Cz);
+ RotateAaroundU(0,0,1, -sPhi,cPhi,0, &Cx,&Cy,&Cz, Theta);
+ j++;
+ if (j==MoebiusTransversals)
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialWhite);
+ else if (i%2)
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialRed);
+ else
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialGray);
+ glVertex3f(cPhi*3+Cx/MoebiusTransversals*j, sPhi*3+Cy/MoebiusTransversals*j,+Cz/MoebiusTransversals*j);
+ j--;
+ if (j==-MoebiusTransversals)
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialWhite);
+ else if (i%2)
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialRed);
+ else
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialGray);
+ glVertex3f(cPhi*3+Cx/MoebiusTransversals*j, sPhi*3+Cy/MoebiusTransversals*j,+Cz/MoebiusTransversals*j);
+
+ Phi+=Pi/MoebiusDivisions;
+ i++;
+ }
+ glEnd();
+ }
+ glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
+ }
+
+ glEndList();
+ ep->AreObjectsDefined[ObjMoebiusStrip]=1;
+#ifdef DEBUG_LISTS
+ (void) printf("Strip drawn SLOWLY\n");
+#endif
+ } else {
+ glCallList(objects+ObjMoebiusStrip);
+#ifdef DEBUG_LISTS
+ (void) printf("Strip drawn quickly\n");
+#endif
+ }
+
+ if (!noants) {
+ /* DRAW BLUE ANT */
+ glPushMatrix();
+ glRotatef(ep->ant_position+180,0,0,1);
+ glTranslatef(3,0,0);
+ glRotatef(ep->ant_position/2+90,0,1,0);
+ glTranslatef(0.28,0,-0.45);
+ draw_escher_ant(ep, MaterialYellow);
+ glPopMatrix();
+
+ /* DRAW YELLOW ANT */
+ glPushMatrix();
+ glRotatef(ep->ant_position,0,0,1);
+ glTranslatef(3,0,0);
+ glRotatef(ep->ant_position/2,0,1,0);
+ glTranslatef(0.28,0,-0.45);
+ draw_escher_ant(ep, MaterialBlue);
+ glPopMatrix();
+
+ /* DRAW GREEN ANT */
+ glPushMatrix();
+ glRotatef(-ep->ant_position,0,0,1);
+ glTranslatef(3,0,0);
+ glRotatef(-ep->ant_position/2,0,1,0);
+ glTranslatef(0.28,0, 0.45);
+ glRotatef(180,1,0,0);
+ draw_escher_ant(ep, MaterialGreen);
+ glPopMatrix();
+
+ /* DRAW CYAN ANT */
+ glPushMatrix();
+ glRotatef(-ep->ant_position+180,0,0,1);
+ glTranslatef(3,0,0);
+ glRotatef(-ep->ant_position/2+90,0,1,0);
+ glTranslatef(0.28,0, 0.45);
+ glRotatef(180,1,0,0);
+ draw_escher_ant(ep, MaterialCyan);
+ glPopMatrix();
+ }
+
+ ep->ant_position+=1;
+}
+#undef MoebiusDivisions
+#undef MoebiusTransversals
+
+static void
+draw_woodplank(escherstruct *ep)
+{
+ if (!ep->AreObjectsDefined[ObjWoodPlank]) {
+ glNewList(objects+ObjWoodPlank, GL_COMPILE_AND_EXECUTE);
+ glBegin(GL_QUADS);
+ glNormal3f( 0, 0, 1);
+ glTexCoord2f( 0, 0);
+ glVertex3f(-PlankWidth,-PlankHeight, PlankThickness);
+ glTexCoord2f( 1, 0);
+ glVertex3f( PlankWidth,-PlankHeight, PlankThickness);
+ glTexCoord2f( 1, 1);
+ glVertex3f( PlankWidth, PlankHeight, PlankThickness);
+ glTexCoord2f( 0, 1);
+ glVertex3f(-PlankWidth ,PlankHeight, PlankThickness);
+ glNormal3f( 0, 0,-1);
+ glTexCoord2f( 0, 0);
+ glVertex3f(-PlankWidth ,PlankHeight,-PlankThickness);
+ glTexCoord2f( 1, 0);
+ glVertex3f( PlankWidth, PlankHeight,-PlankThickness);
+ glTexCoord2f( 1, 1);
+ glVertex3f( PlankWidth,-PlankHeight,-PlankThickness);
+ glTexCoord2f( 0, 1);
+ glVertex3f(-PlankWidth,-PlankHeight,-PlankThickness);
+ glNormal3f( 0, 1, 0);
+ glTexCoord2f( 0, 0);
+ glVertex3f(-PlankWidth, PlankHeight, PlankThickness);
+ glTexCoord2f( 1, 0);
+ glVertex3f( PlankWidth, PlankHeight, PlankThickness);
+ glTexCoord2f( 1, 1);
+ glVertex3f( PlankWidth, PlankHeight,-PlankThickness);
+ glTexCoord2f( 0, 1);
+ glVertex3f(-PlankWidth, PlankHeight,-PlankThickness);
+ glNormal3f( 0,-1, 0);
+ glTexCoord2f( 0, 0);
+ glVertex3f(-PlankWidth,-PlankHeight,-PlankThickness);
+ glTexCoord2f( 1, 0);
+ glVertex3f( PlankWidth,-PlankHeight,-PlankThickness);
+ glTexCoord2f( 1, 1);
+ glVertex3f( PlankWidth,-PlankHeight, PlankThickness);
+ glTexCoord2f( 0, 1);
+ glVertex3f(-PlankWidth,-PlankHeight, PlankThickness);
+ glNormal3f( 1, 0, 0);
+ glTexCoord2f( 0, 0);
+ glVertex3f( PlankWidth,-PlankHeight, PlankThickness);
+ glTexCoord2f( 1, 0);
+ glVertex3f( PlankWidth,-PlankHeight,-PlankThickness);
+ glTexCoord2f( 1, 1);
+ glVertex3f( PlankWidth, PlankHeight,-PlankThickness);
+ glTexCoord2f( 0, 1);
+ glVertex3f( PlankWidth, PlankHeight, PlankThickness);
+ glNormal3f(-1, 0, 0);
+ glTexCoord2f( 0, 0);
+ glVertex3f(-PlankWidth, PlankHeight, PlankThickness);
+ glTexCoord2f( 1, 0);
+ glVertex3f(-PlankWidth, PlankHeight,-PlankThickness);
+ glTexCoord2f( 1, 1);
+ glVertex3f(-PlankWidth,-PlankHeight,-PlankThickness);
+ glTexCoord2f( 0, 1);
+ glVertex3f(-PlankWidth,-PlankHeight, PlankThickness);
+ glEnd();
+ glEndList();
+ ep->AreObjectsDefined[ObjWoodPlank]=1;
+#ifdef DEBUG_LISTS
+ (void) printf("WoodPlank drawn SLOWLY\n");
+#endif
+ } else {
+ glCallList(objects+ObjWoodPlank);
+#ifdef DEBUG_LISTS
+ (void) printf("WoodPlank drawn quickly\n");
+#endif
+ }
+}
+
+static void
+draw_impossiblecage(escherstruct *ep)
+{
+ glPushMatrix();
+ glRotatef(90,0,1,0);
+ glTranslatef( 0.0,PlankHeight-PlankWidth,-PlankThickness-PlankWidth);
+ draw_woodplank(ep);
+ glPopMatrix();
+ glPushMatrix();
+ glRotatef(90,0,0,1);
+ glTranslatef( 0.0,PlankHeight-PlankWidth, PlankWidth-PlankThickness);
+ draw_woodplank(ep);
+ glPopMatrix();
+ glPushMatrix();
+ glRotatef(90,0,1,0);
+ glTranslatef( 0.0, PlankWidth-PlankHeight,-PlankThickness-PlankWidth);
+ draw_woodplank(ep);
+ glPopMatrix();
+ glPushMatrix();
+ glTranslatef( 0.0, PlankWidth-PlankHeight,3*PlankThickness-PlankWidth);
+ draw_woodplank(ep);
+ glPopMatrix();
+ glPushMatrix();
+ glRotatef(90,0,0,1);
+ glTranslatef( 0.0, PlankWidth-PlankHeight, PlankWidth-PlankThickness);
+ draw_woodplank(ep);
+ glPopMatrix();
+ glPushMatrix();
+ glTranslatef( 0.0, PlankWidth-PlankHeight, PlankWidth-3*PlankThickness);
+ draw_woodplank(ep);
+ glPopMatrix();
+ glPushMatrix();
+ glTranslatef( 0.0,PlankHeight-PlankWidth,3*PlankThickness-PlankWidth);
+ draw_woodplank(ep);
+ glPopMatrix();
+ glPushMatrix();
+ glRotatef(90,0,0,1);
+ glTranslatef( 0.0,PlankHeight-PlankWidth,PlankThickness-PlankWidth);
+ draw_woodplank(ep);
+ glPopMatrix();
+ glPushMatrix();
+ glTranslatef( 0.0,PlankHeight-PlankWidth, PlankWidth-3*PlankThickness);
+ draw_woodplank(ep);
+ glPopMatrix();
+ glPushMatrix();
+ glRotatef(90,0,1,0);
+ glTranslatef( 0.0,PlankHeight-PlankWidth, PlankWidth+PlankThickness);
+ draw_woodplank(ep);
+ glPopMatrix();
+ glPushMatrix();
+ glRotatef(90,0,0,1);
+ glTranslatef( 0.0, PlankWidth-PlankHeight,PlankThickness-PlankWidth);
+ draw_woodplank(ep);
+ glPopMatrix();
+ glPushMatrix();
+ glRotatef(90,0,1,0);
+ glTranslatef( 0.0, PlankWidth-PlankHeight, PlankWidth+PlankThickness);
+ draw_woodplank(ep);
+ glPopMatrix();
+}
+
+void
+draw_escher(ModeInfo * mi)
+{
+ escherstruct *ep = &escher[MI_SCREEN(mi)];
+
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+
+ glXMakeCurrent(display, window, ep->glx_context);
+
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ glPushMatrix();
+
+ glTranslatef(0.0, 0.0, -10.0);
+
+ if (!MI_WIN_IS_ICONIC(mi)) {
+ glScalef(Scale4Window * ep->WindH / ep->WindW, Scale4Window, Scale4Window);
+ } else {
+ glScalef(Scale4Iconic * ep->WindH / ep->WindW, Scale4Iconic, Scale4Iconic);
+ }
+
+
+ switch (ep->scene) {
+ case 1:
+ glRotatef(ep->step * 100, 1, 0, 0);
+ glRotatef(ep->step * 95, 0, 1, 0);
+ glRotatef(ep->step * 90, 0, 0, 1);
+ draw_moebius(mi);
+ break;
+ case 2: /* 196 - 213 */
+ glRotatef(ep->step*100, 0, 0, 1);
+ glRotatef(25+cos(ep->step*5)*6, 1, 0, 0);
+ glRotatef(204.5-sin(ep->step*5)*8, 0, 1, 0);
+ draw_impossiblecage(ep);
+ break;
+ }
+
+ glPopMatrix();
+
+ glFlush();
+
+ glXSwapBuffers(display, window);
+
+ ep->step += 0.025;
+}
+
+static void
+reshape(ModeInfo * mi, int width, int height)
+{
+ escherstruct *ep = &escher[MI_SCREEN(mi)];
+
+ glViewport(0, 0, ep->WindW = (GLint) width, ep->WindH = (GLint) height);
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 15.0);
+ glMatrixMode(GL_MODELVIEW);
+ if (width>=1024) {
+ glLineWidth(3);
+ glPointSize(3);
+ } else if (width>=512) {
+ glLineWidth(2);
+ glPointSize(2);
+ } else {
+ glLineWidth(1);
+ glPointSize(1);
+ }
+ ep->AreObjectsDefined[ObjMoebiusStrip]=0;
+ ep->AreObjectsDefined[ObjAntBody]=0;
+ ep->AreObjectsDefined[ObjWoodPlank]=0;
+}
+
+static void
+pinit(ModeInfo * mi)
+{
+ escherstruct *ep = &escher[MI_SCREEN(mi)];
+
+ glClearDepth(1.0);
+ glClearColor(0.0, 0.0, 0.0, 1.0);
+
+ glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
+ glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
+ glLightfv(GL_LIGHT0, GL_POSITION, position0);
+ glLightfv(GL_LIGHT1, GL_AMBIENT, ambient);
+ glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse);
+ glLightfv(GL_LIGHT1, GL_POSITION, position1);
+ glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);
+ glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, lmodel_twoside);
+ glEnable(GL_LIGHTING);
+ glEnable(GL_LIGHT0);
+ glEnable(GL_LIGHT1);
+ glEnable(GL_NORMALIZE);
+ glFrontFace(GL_CCW);
+ glCullFace(GL_BACK);
+
+ switch (ep->scene) {
+ case 1:
+ glShadeModel(GL_SMOOTH);
+ glEnable(GL_DEPTH_TEST);
+ glDisable(GL_TEXTURE_2D);
+ glDisable(GL_CULL_FACE);
+ break;
+ case 2:
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialWhite);
+ glShadeModel(GL_FLAT);
+ glDisable(GL_DEPTH_TEST);
+ glEnable(GL_TEXTURE_2D);
+ glEnable(GL_CULL_FACE);
+ break;
+ }
+
+ glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+ gluBuild2DMipmaps(GL_TEXTURE_2D, 3, WoodTextureWidth, WoodTextureHeight,
+ GL_RGB, GL_UNSIGNED_BYTE, WoodTextureData);
+ glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+
+ glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, front_shininess);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, front_specular);
+}
+
+void
+init_escher(ModeInfo * mi)
+{
+ int screen = MI_SCREEN(mi);
+ escherstruct *ep;
+
+ if (escher == NULL) {
+ if ((escher = (escherstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (escherstruct))) == NULL)
+ return;
+ }
+ ep = &escher[screen];
+ ep->step = NRAND(90);
+ ep->ant_position = NRAND(90);
+
+ ep->glx_context = init_GL(mi);
+
+ reshape(mi, MI_WIN_WIDTH(mi), MI_WIN_HEIGHT(mi));
+ ep->scene = MI_BATCHCOUNT(mi);
+ if (ep->scene <= 0 || ep->scene > NUM_SCENES)
+ ep->scene = NRAND(NUM_SCENES) + 1;
+ glDrawBuffer(GL_BACK);
+ objects = glGenLists(3);
+ pinit(mi);
+
+}
+
+void
+change_escher(ModeInfo * mi)
+{
+ escherstruct *ep = &escher[MI_SCREEN(mi)];
+
+ ep->scene = (ep->scene) % NUM_SCENES + 1;
+ glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), ep->glx_context);
+ pinit(mi);
+}
+
+void
+release_escher(ModeInfo * mi)
+{
+ if (escher != NULL) {
+ (void) free((void *) escher);
+ escher = NULL;
+ }
+ glDeleteLists(objects,3);
+}
+
+#endif
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)gears.c 4.02 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * gears.c - 3D gear wheels for xlock, the X Window System lockscreen.
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 22-Mar-97: Added support for -mono mode, and monochrome X servers.
+ * Ed Mackey, emackey@early.com
+ * 13-Mar-97: Memory leak fix by Tom Schmidt <tschmidt@micron.com>
+ * 1996: "written" by Danny Sung <dannys@ucla.edu>
+ * Based on 3-D gear wheels by Brian Paul which is in the public domain.
+ */
+
+/*-
+ * PURIFY 3.0a on SunOS4 reports an unitialized memory read on each of
+ * the glCallList() functions below when using MesaGL 2.1. This has
+ * been fixed in MesaGL 2.2 and later releases.
+ */
+
+/*-
+ * due to a Bug/feature in VMS X11/Intrinsic.h has to be placed before xlock.
+ * otherwise caddr_t is not defined correctly
+ */
+#include <X11/Intrinsic.h>
+
+#ifdef STANDALONE
+# define PROGCLASS "Gears"
+# define HACK_INIT init_gears
+# define HACK_DRAW draw_gears
+#define DEF_DELAY 1000
+#define DEF_CYCLES 2
+#define DEF_NCOLORS 200
+#define DEF_WIREFRAME FALSE
+# include "xlockmore.h" /* from the xscreensaver distribution */
+#else /* !STANDALONE */
+# include "xlock.h" /* from the xlockmore distribution */
+ModeSpecOpt gears_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* !STANDALONE */
+
+#ifdef USE_GL
+typedef struct {
+ GLfloat view_rotx, view_roty, view_rotz;
+ GLuint gear1, gear2, gear3;
+ GLfloat angle;
+ int mono;
+ GLXContext glx_context;
+#if 0
+ Window win;
+#endif
+} gearsstruct;
+
+static gearsstruct *gears = NULL;
+
+/*-
+ * Draw a gear wheel. You'll probably want to call this function when
+ * building a display list since we do a lot of trig here.
+ *
+ * Input: inner_radius - radius of hole at center
+ * outer_radius - radius at center of teeth
+ * width - width of gear
+ * teeth - number of teeth
+ * tooth_depth - depth of tooth
+ * wire - true for wireframe mode
+ */
+static void
+gear(GLfloat inner_radius, GLfloat outer_radius, GLfloat width,
+ GLint teeth, GLfloat tooth_depth, Bool wire)
+{
+ GLint i;
+ GLfloat r0, r1, r2;
+ GLfloat angle, da;
+ GLfloat u, v, len;
+
+ r0 = inner_radius;
+ r1 = outer_radius - tooth_depth / 2.0;
+ r2 = outer_radius + tooth_depth / 2.0;
+
+ da = 2.0 * M_PI / teeth / 4.0;
+
+ glShadeModel(GL_FLAT);
+
+ /* This subroutine got kind of messy when I added all the checks
+ * for wireframe mode. A much cleaner solution that I sometimes
+ * use is to have a variable hold the value GL_LINE_LOOP when
+ * in wireframe mode, or hold the value GL_POLYGON otherwise.
+ * Then I just call glBegin(that_variable), give my polygon
+ * coordinates, and glEnd(). Pretty neat eh? Too bad I couldn't
+ * integrate that trick here.
+ * --Ed.
+ */
+
+ if (!wire)
+ glNormal3f(0.0, 0.0, 1.0);
+
+ /* draw front face */
+ if (!wire)
+ glBegin(GL_QUAD_STRIP);
+ for (i = 0; i <= teeth; i++) {
+ if (wire)
+ glBegin(GL_LINES);
+ angle = i * 2.0 * M_PI / teeth;
+ glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
+ glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
+ if (!wire) {
+ glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
+ glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5);
+ } else {
+ glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5);
+ glVertex3f(r1 * cos(angle + 4 * da), r1 * sin(angle + 4 * da), width * 0.5);
+ glEnd();
+ }
+ }
+ if (!wire)
+ glEnd();
+
+ /* draw front sides of teeth */
+ if (!wire)
+ glBegin(GL_QUADS);
+ da = 2.0 * M_PI / teeth / 4.0;
+ for (i = 0; i < teeth; i++) {
+ angle = i * 2.0 * M_PI / teeth;
+
+ if (wire)
+ glBegin(GL_LINE_LOOP);
+ glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
+ glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
+ glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), width * 0.5);
+ glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5);
+ if (wire)
+ glEnd();
+ }
+ if (!wire)
+ glEnd();
+
+
+ if (!wire)
+ glNormal3f(0.0, 0.0, -1.0);
+
+ /* draw back face */
+ if (!wire)
+ glBegin(GL_QUAD_STRIP);
+ for (i = 0; i <= teeth; i++) {
+ angle = i * 2.0 * M_PI / teeth;
+ if (wire)
+ glBegin(GL_LINES);
+ glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
+ glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
+ if (!wire) {
+ glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5);
+ glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
+ } else {
+ glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5);
+ glVertex3f(r1 * cos(angle + 4 * da), r1 * sin(angle + 4 * da), -width * 0.5);
+ glEnd();
+ }
+ }
+ if (!wire)
+ glEnd();
+
+ /* draw back sides of teeth */
+ if (!wire)
+ glBegin(GL_QUADS);
+ da = 2.0 * M_PI / teeth / 4.0;
+ for (i = 0; i < teeth; i++) {
+ angle = i * 2.0 * M_PI / teeth;
+
+ if (wire)
+ glBegin(GL_LINE_LOOP);
+ glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5);
+ glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), -width * 0.5);
+ glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5);
+ glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
+ if (wire)
+ glEnd();
+ }
+ if (!wire)
+ glEnd();
+
+
+ /* draw outward faces of teeth */
+ if (!wire)
+ glBegin(GL_QUAD_STRIP);
+ for (i = 0; i < teeth; i++) {
+ angle = i * 2.0 * M_PI / teeth;
+
+ if (wire)
+ glBegin(GL_LINES);
+ glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
+ glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
+ u = r2 * cos(angle + da) - r1 * cos(angle);
+ v = r2 * sin(angle + da) - r1 * sin(angle);
+ len = sqrt(u * u + v * v);
+ u /= len;
+ v /= len;
+ glNormal3f(v, -u, 0.0);
+ glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
+ glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5);
+ glNormal3f(cos(angle), sin(angle), 0.0);
+ glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), width * 0.5);
+ glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), -width * 0.5);
+ u = r1 * cos(angle + 3 * da) - r2 * cos(angle + 2 * da);
+ v = r1 * sin(angle + 3 * da) - r2 * sin(angle + 2 * da);
+ glNormal3f(v, -u, 0.0);
+ glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5);
+ glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5);
+ glNormal3f(cos(angle), sin(angle), 0.0);
+ if (wire)
+ glEnd();
+ }
+
+ if (!wire) {
+ glVertex3f(r1 * cos(0), r1 * sin(0), width * 0.5);
+ glVertex3f(r1 * cos(0), r1 * sin(0), -width * 0.5);
+ glEnd();
+ }
+ if (!wire)
+ glShadeModel(GL_SMOOTH);
+
+ /* draw inside radius cylinder */
+ if (!wire)
+ glBegin(GL_QUAD_STRIP);
+ for (i = 0; i <= teeth; i++) {
+ angle = i * 2.0 * M_PI / teeth;
+ if (wire)
+ glBegin(GL_LINES);
+ glNormal3f(-cos(angle), -sin(angle), 0.0);
+ glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
+ glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
+ if (wire) {
+ glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
+ glVertex3f(r0 * cos(angle + 4 * da), r0 * sin(angle + 4 * da), -width * 0.5);
+ glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
+ glVertex3f(r0 * cos(angle + 4 * da), r0 * sin(angle + 4 * da), width * 0.5);
+ glEnd();
+ }
+ }
+ if (!wire)
+ glEnd();
+
+}
+
+static void
+draw(ModeInfo * mi)
+{
+ gearsstruct *gp = &gears[MI_SCREEN(mi)];
+ int wire = MI_WIN_IS_WIREFRAME(mi) || gp->mono;
+
+ if (!wire) {
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+ } else {
+ glClear(GL_COLOR_BUFFER_BIT);
+ }
+
+ glPushMatrix();
+ glRotatef(gp->view_rotx, 1.0, 0.0, 0.0);
+ glRotatef(gp->view_roty, 0.0, 1.0, 0.0);
+ glRotatef(gp->view_rotz, 0.0, 0.0, 1.0);
+
+ glPushMatrix();
+ glTranslatef(-3.0, -2.0, 0.0);
+ glRotatef(gp->angle, 0.0, 0.0, 1.0);
+/* PURIFY 4.0.1 reports an unitialized memory read on the next line when using
+ * MesaGL 2.2 and -mono. This has been fixed in MesaGL 2.3 and later. */
+ glCallList(gp->gear1);
+ glPopMatrix();
+
+ glPushMatrix();
+ glTranslatef(3.1, -2.0, 0.0);
+ glRotatef(-2.0 * gp->angle - 9.0, 0.0, 0.0, 1.0);
+ glCallList(gp->gear2);
+ glPopMatrix();
+
+ glPushMatrix();
+ glTranslatef(-3.1, 4.2, 0.0);
+ glRotatef(-2.0 * gp->angle - 25.0, 0.0, 0.0, 1.0);
+ glCallList(gp->gear3);
+ glPopMatrix();
+
+ glPopMatrix();
+}
+
+
+
+/* new window size or exposure */
+static void
+reshape(int width, int height)
+{
+ GLfloat h = (GLfloat) height / (GLfloat) width;
+
+ glViewport(0, 0, (GLint) width, (GLint) height);
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ glFrustum(-1.0, 1.0, -h, h, 5.0, 60.0);
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+ glTranslatef(0.0, 0.0, -40.0);
+
+ /* The depth buffer will be cleared, if needed, before the
+ * next frame. Right now we just want to black the screen.
+ */
+ glClear(GL_COLOR_BUFFER_BIT);
+
+}
+
+
+static void
+pinit(ModeInfo * mi)
+{
+ gearsstruct *gp = &gears[MI_SCREEN(mi)];
+ static GLfloat pos[4] =
+ {5.0, 5.0, 10.0, 1.0};
+ static GLfloat red[4] =
+ {0.8, 0.1, 0.0, 1.0};
+ static GLfloat green[4] =
+ {0.0, 0.8, 0.2, 1.0};
+ static GLfloat blue[4] =
+ {0.2, 0.2, 1.0, 1.0};
+ int wire = MI_WIN_IS_WIREFRAME(mi) || gp->mono;
+
+ if (!wire) {
+ glLightfv(GL_LIGHT0, GL_POSITION, pos);
+ glEnable(GL_CULL_FACE);
+ glEnable(GL_LIGHTING);
+ glEnable(GL_LIGHT0);
+ glEnable(GL_DEPTH_TEST);
+ }
+#if 0
+/*-
+ * Messes up on multiscreen Pseudocolor:0 StaticGray(monochrome):1
+ * 2nd time mode is run it is Grayscale on PseudoColor.
+ * The code below forces monochrome on TrueColor.
+ */
+ if (MI_WIN_IS_MONO(mi)) {
+ red[0] = red[1] = red[2] = 1.0;
+ green[0] = green[1] = green[2] = 1.0;
+ blue[0] = blue[1] = blue[2] = 1.0;
+ }
+#endif
+
+ /* make the gears */
+ gp->gear1 = glGenLists(1);
+ glNewList(gp->gear1, GL_COMPILE);
+ if (!wire)
+ glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red);
+ else
+ glColor4fv(red);
+ gear(1.0, 4.0, 1.0, 20, 0.7, wire);
+ glEndList();
+
+ gp->gear2 = glGenLists(1);
+ glNewList(gp->gear2, GL_COMPILE);
+ if (!wire)
+ glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green);
+ else
+ glColor4fv(green);
+ gear(0.5, 2.0, 2.0, 10, 0.7, wire);
+ glEndList();
+
+ gp->gear3 = glGenLists(1);
+ glNewList(gp->gear3, GL_COMPILE);
+ if (!wire)
+ glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue);
+ else
+ glColor4fv(blue);
+ gear(1.3, 2.0, 0.5, 10, 0.7, wire);
+ glEndList();
+ if (!wire)
+ glEnable(GL_NORMALIZE);
+}
+
+void
+init_gears(ModeInfo * mi)
+{
+#if 0
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+
+#endif
+ int screen = MI_SCREEN(mi);
+
+ /*Colormap cmap; */
+ /* Boolean rgba, doublebuffer, cmap_installed; */
+ gearsstruct *gp;
+
+ if (gears == NULL) {
+ if ((gears = (gearsstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (gearsstruct))) == NULL)
+ return;
+ }
+ gp = &gears[screen];
+
+#if 0
+ gp->win = window;
+#endif
+ gp->view_rotx = NRAND(360);
+ gp->view_roty = NRAND(360);
+ gp->view_rotz = NRAND(360);
+ gp->angle = NRAND(360);
+ gp->mono = (MI_WIN_IS_MONO(mi) ? 1 : 0);
+
+ gp->glx_context = init_GL(mi);
+
+ reshape(MI_WIN_WIDTH(mi), MI_WIN_HEIGHT(mi));
+ pinit(mi);
+}
+
+void
+draw_gears(ModeInfo * mi)
+{
+ gearsstruct *gp = &gears[MI_SCREEN(mi)];
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ int angle_incr = MI_CYCLES(mi) ? MI_CYCLES(mi) : 2;
+ int rot_incr = MI_BATCHCOUNT(mi) ? MI_BATCHCOUNT(mi) : 1;
+
+ glDrawBuffer(GL_BACK);
+
+ glXMakeCurrent(display, window, gp->glx_context);
+ draw(mi);
+
+ /* let's do something so we don't get bored */
+ gp->angle = (int) (gp->angle + angle_incr) % 360;
+ gp->view_rotx = (int) (gp->view_rotx + rot_incr) % 360;
+ gp->view_roty = (int) (gp->view_roty + rot_incr) % 360;
+ gp->view_rotz = (int) (gp->view_rotz + rot_incr) % 360;
+
+ glFinish();
+ glXSwapBuffers(display, window);
+}
+
+void
+release_gears(ModeInfo * mi)
+{
+ if (gears != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ gearsstruct *gp = &gears[screen];
+
+ /* Display lists MUST be freed while their glXContext is current. */
+ glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), gp->glx_context);
+
+ if (glIsList(gp->gear1))
+ glDeleteLists(gp->gear1, 1);
+ if (glIsList(gp->gear2))
+ glDeleteLists(gp->gear2, 1);
+ if (glIsList(gp->gear3))
+ glDeleteLists(gp->gear3, 1);
+
+ /* Don't destroy the glXContext. init_GL does that. */
+
+ }
+ (void) free((void *) gears);
+ gears = NULL;
+ }
+}
+
+
+/*********************************************************/
+
+#endif
--- /dev/null
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)morph3d.c 4.02 97/04/01 xlockmore";
+
+#endif
+
+#undef DEBUG_CULL_FACE
+
+/*-
+ * morph3d.c - Shows 3D morphing objects (XLock Version)
+ *
+ * See xlock.c for copying information.
+ *
+ * The original code for this mode was written by Marcelo Fernandes Vianna
+ * (me...) and was inspired on a WindowsNT(R)'s screen saver. It was written
+ * from scratch and it was not based on any other source code.
+ *
+ * Porting it to xlock (the final objective of this code since the moment I
+ * decided to create it) was possible by comparing the original Mesa's gear
+ * demo with it's ported version to xlock, so thanks for Danny Sung (look at
+ * gear.c) for his indirect help.
+ *
+ * Thanks goes also to Brian Paul for making it possible and inexpensive
+ * to use OpenGL at home.
+ *
+ * If you are interested in the original version of this program (not a xlock
+ * mode, please refer to the Mesa package (ftp iris.ssec.wisc.edu on /pub/Mesa)
+ *
+ * Since I'm not a native english speaker, my apologies for any gramatical
+ * mistake.
+ *
+ * My e-mail addresses are
+ * vianna@cat.cbpf.br
+ * and
+ * marcelo@venus.rdc.puc-rio.br
+ *
+ * Marcelo F. Vianna (Feb-13-1997)
+ *
+ * Revision History:
+ * 08-May-97: Speed ups by Marcelo F. Vianna.
+ *
+ */
+
+/*-
+ * PURIFY 3.0a on SunOS4 reports an unitialized memory read on each of
+ * the glCallList() functions below when using MesaGL 2.1. This has
+ * been fixed in MesaGL 2.2 and later releases.
+ */
+
+/*-
+ * due to a Bug/feature in VMS X11/Intrinsic.h has to be placed before xlock.
+ * otherwise caddr_t is not defined correctly
+ */
+#include <X11/Intrinsic.h>
+#include "xlock.h"
+
+#ifdef USE_GL
+
+ModeSpecOpt morph3d_opts =
+{0, NULL, 0, NULL, NULL};
+
+#define Scale4Window 0.3
+#define Scale4Iconic 1.0
+
+#define VectMul(X1,Y1,Z1,X2,Y2,Z2) (Y1)*(Z2)-(Z1)*(Y2),(Z1)*(X2)-(X1)*(Z2),(X1)*(Y2)-(Y1)*(X2)
+#define sqr(A) ((A)*(A))
+
+/* Increasing this values produces better image quality, the price is speed. */
+#define tetradivisions 23
+#define cubedivisions 20
+#define octadivisions 21
+#define dodecadivisions 10
+#define icodivisions 15
+
+#define tetraangle 109.47122063449069174
+#define cubeangle 90.000000000000000000
+#define octaangle 109.47122063449069174
+#define dodecaangle 63.434948822922009981
+#define icoangle 41.810314895778596167
+
+#ifndef Pi
+#define Pi M_PI
+#endif
+#define SQRT2 1.4142135623730951455
+#define SQRT3 1.7320508075688771932
+#define SQRT5 2.2360679774997898051
+#define SQRT6 2.4494897427831778813
+#define SQRT15 3.8729833462074170214
+#define cossec36_2 0.8506508083520399322
+#define cos72 0.3090169943749474241
+#define sin72 0.9510565162951535721
+#define cos36 0.8090169943749474241
+#define sin36 0.5877852522924731292
+
+/*************************************************************************/
+
+typedef struct {
+ GLint WindH, WindW;
+ GLfloat step;
+ GLfloat seno;
+ int object;
+ int edgedivisions;
+ int VisibleSpikes;
+ void (*draw_object) (ModeInfo * mi);
+ float Magnitude;
+ float *MaterialColor[20];
+ GLXContext glx_context;
+} morph3dstruct;
+
+static float front_shininess[] =
+{60.0};
+static float front_specular[] =
+{0.7, 0.7, 0.7, 1.0};
+static float ambient[] =
+{0.0, 0.0, 0.0, 1.0};
+static float diffuse[] =
+{1.0, 1.0, 1.0, 1.0};
+static float position0[] =
+{1.0, 1.0, 1.0, 0.0};
+static float position1[] =
+{-1.0, -1.0, 1.0, 0.0};
+static float lmodel_ambient[] =
+{0.5, 0.5, 0.5, 1.0};
+static float lmodel_twoside[] =
+{GL_TRUE};
+
+static float MaterialRed[] =
+{0.7, 0.0, 0.0, 1.0};
+static float MaterialGreen[] =
+{0.1, 0.5, 0.2, 1.0};
+static float MaterialBlue[] =
+{0.0, 0.0, 0.7, 1.0};
+static float MaterialCyan[] =
+{0.2, 0.5, 0.7, 1.0};
+static float MaterialYellow[] =
+{0.7, 0.7, 0.0, 1.0};
+static float MaterialMagenta[] =
+{0.6, 0.2, 0.5, 1.0};
+static float MaterialWhite[] =
+{0.7, 0.7, 0.7, 1.0};
+static float MaterialGray[] =
+{0.2, 0.2, 0.2, 1.0};
+
+static morph3dstruct *morph3d = NULL;
+
+#define TRIANGLE(Edge, Amp, Divisions, Z, VS) \
+{ \
+ GLfloat Xf,Yf,Xa,Yb,Xf2,Yf2; \
+ GLfloat Factor=0.0,Factor1,Factor2; \
+ GLfloat VertX,VertY,VertZ,NeiAX,NeiAY,NeiAZ,NeiBX,NeiBY,NeiBZ; \
+ GLfloat Ax,Ay,Bx; \
+ int Ri,Ti; \
+ GLfloat Vr=(Edge)*SQRT3/3; \
+ GLfloat AmpVr2=(Amp)/sqr(Vr); \
+ GLfloat Zf=(Edge)*(Z); \
+ \
+ Ax=(Edge)*(+0.5/(Divisions)), Ay=(Edge)*(-SQRT3/(2*Divisions)); \
+ Bx=(Edge)*(-0.5/(Divisions)); \
+ \
+ for (Ri=1; Ri<=(Divisions); Ri++) { \
+ glBegin(GL_TRIANGLE_STRIP); \
+ for (Ti=0; Ti<Ri; Ti++) { \
+ Xf=(float)(Ri-Ti)*Ax + (float)Ti*Bx; \
+ Yf=Vr+(float)(Ri-Ti)*Ay + (float)Ti*Ay; \
+ Xa=Xf+0.001; Yb=Yf+0.001; \
+ Factor=1-(((Xf2=sqr(Xf))+(Yf2=sqr(Yf)))*AmpVr2); \
+ Factor1=1-((sqr(Xa)+Yf2)*AmpVr2); \
+ Factor2=1-((Xf2+sqr(Yb))*AmpVr2); \
+ VertX=Factor*Xf; VertY=Factor*Yf; VertZ=Factor*Zf; \
+ NeiAX=Factor1*Xa-VertX; NeiAY=Factor1*Yf-VertY; NeiAZ=Factor1*Zf-VertZ; \
+ NeiBX=Factor2*Xf-VertX; NeiBY=Factor2*Yb-VertY; NeiBZ=Factor2*Zf-VertZ; \
+ glNormal3f(VectMul(NeiAX, NeiAY, NeiAZ, NeiBX, NeiBY, NeiBZ)); \
+ glVertex3f(VertX, VertY, VertZ); \
+ \
+ Xf=(float)(Ri-Ti-1)*Ax + (float)Ti*Bx; \
+ Yf=Vr+(float)(Ri-Ti-1)*Ay + (float)Ti*Ay; \
+ Xa=Xf+0.001; Yb=Yf+0.001; \
+ Factor=1-(((Xf2=sqr(Xf))+(Yf2=sqr(Yf)))*AmpVr2); \
+ Factor1=1-((sqr(Xa)+Yf2)*AmpVr2); \
+ Factor2=1-((Xf2+sqr(Yb))*AmpVr2); \
+ VertX=Factor*Xf; VertY=Factor*Yf; VertZ=Factor*Zf; \
+ NeiAX=Factor1*Xa-VertX; NeiAY=Factor1*Yf-VertY; NeiAZ=Factor1*Zf-VertZ; \
+ NeiBX=Factor2*Xf-VertX; NeiBY=Factor2*Yb-VertY; NeiBZ=Factor2*Zf-VertZ; \
+ glNormal3f(VectMul(NeiAX, NeiAY, NeiAZ, NeiBX, NeiBY, NeiBZ)); \
+ glVertex3f(VertX, VertY, VertZ); \
+ \
+ } \
+ Xf=(float)Ri*Bx; \
+ Yf=Vr+(float)Ri*Ay; \
+ Xa=Xf+0.001; Yb=Yf+0.001; \
+ Factor=1-(((Xf2=sqr(Xf))+(Yf2=sqr(Yf)))*AmpVr2); \
+ Factor1=1-((sqr(Xa)+Yf2)*AmpVr2); \
+ Factor2=1-((Xf2+sqr(Yb))*AmpVr2); \
+ VertX=Factor*Xf; VertY=Factor*Yf; VertZ=Factor*Zf; \
+ NeiAX=Factor1*Xa-VertX; NeiAY=Factor1*Yf-VertY; NeiAZ=Factor1*Zf-VertZ; \
+ NeiBX=Factor2*Xf-VertX; NeiBY=Factor2*Yb-VertY; NeiBZ=Factor2*Zf-VertZ; \
+ glNormal3f(VectMul(NeiAX, NeiAY, NeiAZ, NeiBX, NeiBY, NeiBZ)); \
+ glVertex3f(VertX, VertY, VertZ); \
+ glEnd(); \
+ } \
+ VS=(Factor<0); \
+}
+
+#define SQUARE(Edge, Amp, Divisions, Z, VS) \
+{ \
+ int Xi,Yi; \
+ GLfloat Xf,Yf,Y,Xf2,Yf2,Y2,Xa,Yb; \
+ GLfloat Factor=0.0,Factor1,Factor2; \
+ GLfloat VertX,VertY,VertZ,NeiAX,NeiAY,NeiAZ,NeiBX,NeiBY,NeiBZ; \
+ GLfloat Zf=(Edge)*(Z); \
+ GLfloat AmpVr2=(Amp)/sqr((Edge)*SQRT2/2); \
+ \
+ for (Yi=0; Yi<(Divisions); Yi++) { \
+ Yf=-((Edge)/2.0) + ((float)Yi)/(Divisions)*(Edge); \
+ Yf2=sqr(Yf); \
+ Y=Yf+1.0/(Divisions)*(Edge); \
+ Y2=sqr(Y); \
+ glBegin(GL_QUAD_STRIP); \
+ for (Xi=0; Xi<=(Divisions); Xi++) { \
+ Xf=-((Edge)/2.0) + ((float)Xi)/(Divisions)*(Edge); \
+ Xf2=sqr(Xf); \
+ \
+ Xa=Xf+0.001; Yb=Y+0.001; \
+ Factor=1-((Xf2+Y2)*AmpVr2); \
+ Factor1=1-((sqr(Xa)+Y2)*AmpVr2); \
+ Factor2=1-((Xf2+sqr(Yb))*AmpVr2); \
+ VertX=Factor*Xf; VertY=Factor*Y; VertZ=Factor*Zf; \
+ NeiAX=Factor1*Xa-VertX; NeiAY=Factor1*Y-VertY; NeiAZ=Factor1*Zf-VertZ; \
+ NeiBX=Factor2*Xf-VertX; NeiBY=Factor2*Yb-VertY; NeiBZ=Factor2*Zf-VertZ; \
+ glNormal3f(VectMul(NeiAX, NeiAY, NeiAZ, NeiBX, NeiBY, NeiBZ)); \
+ glVertex3f(VertX, VertY, VertZ); \
+ \
+ Xa=Xf+0.001; Yb=Yf+0.001; \
+ Factor=1-((Xf2+Yf2)*AmpVr2); \
+ Factor1=1-((sqr(Xa)+Yf2)*AmpVr2); \
+ Factor2=1-((Xf2+sqr(Yb))*AmpVr2); \
+ VertX=Factor*Xf; VertY=Factor*Yf; VertZ=Factor*Zf; \
+ NeiAX=Factor1*Xa-VertX; NeiAY=Factor1*Yf-VertY; NeiAZ=Factor1*Zf-VertZ; \
+ NeiBX=Factor2*Xf-VertX; NeiBY=Factor2*Yb-VertY; NeiBZ=Factor2*Zf-VertZ; \
+ glNormal3f(VectMul(NeiAX, NeiAY, NeiAZ, NeiBX, NeiBY, NeiBZ)); \
+ glVertex3f(VertX, VertY, VertZ); \
+ } \
+ glEnd(); \
+ } \
+ VS=(Factor<0); \
+}
+
+#define PENTAGON(Edge, Amp, Divisions, Z, VS) \
+{ \
+ int Ri,Ti,Fi; \
+ GLfloat Xf,Yf,Xa,Yb,Xf2,Yf2; \
+ GLfloat x[6],y[6]; \
+ GLfloat Factor=0.0,Factor1,Factor2; \
+ GLfloat VertX,VertY,VertZ,NeiAX,NeiAY,NeiAZ,NeiBX,NeiBY,NeiBZ; \
+ GLfloat Zf=(Edge)*(Z); \
+ GLfloat AmpVr2=(Amp)/sqr((Edge)*cossec36_2); \
+ \
+ for(Fi=0;Fi<6;Fi++) { \
+ x[Fi]=-cos( Fi*2*Pi/5 + Pi/10 )/(Divisions)*cossec36_2*(Edge); \
+ y[Fi]=sin( Fi*2*Pi/5 + Pi/10 )/(Divisions)*cossec36_2*(Edge); \
+ } \
+ \
+ for (Ri=1; Ri<=(Divisions); Ri++) { \
+ for (Fi=0; Fi<5; Fi++) { \
+ glBegin(GL_TRIANGLE_STRIP); \
+ for (Ti=0; Ti<Ri; Ti++) { \
+ Xf=(float)(Ri-Ti)*x[Fi] + (float)Ti*x[Fi+1]; \
+ Yf=(float)(Ri-Ti)*y[Fi] + (float)Ti*y[Fi+1]; \
+ Xa=Xf+0.001; Yb=Yf+0.001; \
+ Factor=1-(((Xf2=sqr(Xf))+(Yf2=sqr(Yf)))*AmpVr2); \
+ Factor1=1-((sqr(Xa)+Yf2)*AmpVr2); \
+ Factor2=1-((Xf2+sqr(Yb))*AmpVr2); \
+ VertX=Factor*Xf; VertY=Factor*Yf; VertZ=Factor*Zf; \
+ NeiAX=Factor1*Xa-VertX; NeiAY=Factor1*Yf-VertY; NeiAZ=Factor1*Zf-VertZ; \
+ NeiBX=Factor2*Xf-VertX; NeiBY=Factor2*Yb-VertY; NeiBZ=Factor2*Zf-VertZ; \
+ glNormal3f(VectMul(NeiAX, NeiAY, NeiAZ, NeiBX, NeiBY, NeiBZ)); \
+ glVertex3f(VertX, VertY, VertZ); \
+ \
+ Xf=(float)(Ri-Ti-1)*x[Fi] + (float)Ti*x[Fi+1]; \
+ Yf=(float)(Ri-Ti-1)*y[Fi] + (float)Ti*y[Fi+1]; \
+ Xa=Xf+0.001; Yb=Yf+0.001; \
+ Factor=1-(((Xf2=sqr(Xf))+(Yf2=sqr(Yf)))*AmpVr2); \
+ Factor1=1-((sqr(Xa)+Yf2)*AmpVr2); \
+ Factor2=1-((Xf2+sqr(Yb))*AmpVr2); \
+ VertX=Factor*Xf; VertY=Factor*Yf; VertZ=Factor*Zf; \
+ NeiAX=Factor1*Xa-VertX; NeiAY=Factor1*Yf-VertY; NeiAZ=Factor1*Zf-VertZ; \
+ NeiBX=Factor2*Xf-VertX; NeiBY=Factor2*Yb-VertY; NeiBZ=Factor2*Zf-VertZ; \
+ glNormal3f(VectMul(NeiAX, NeiAY, NeiAZ, NeiBX, NeiBY, NeiBZ)); \
+ glVertex3f(VertX, VertY, VertZ); \
+ \
+ } \
+ Xf=(float)Ri*x[Fi+1]; \
+ Yf=(float)Ri*y[Fi+1]; \
+ Xa=Xf+0.001; Yb=Yf+0.001; \
+ Factor=1-(((Xf2=sqr(Xf))+(Yf2=sqr(Yf)))*AmpVr2); \
+ Factor1=1-((sqr(Xa)+Yf2)*AmpVr2); \
+ Factor2=1-((Xf2+sqr(Yb))*AmpVr2); \
+ VertX=Factor*Xf; VertY=Factor*Yf; VertZ=Factor*Zf; \
+ NeiAX=Factor1*Xa-VertX; NeiAY=Factor1*Yf-VertY; NeiAZ=Factor1*Zf-VertZ; \
+ NeiBX=Factor2*Xf-VertX; NeiBY=Factor2*Yb-VertY; NeiBZ=Factor2*Zf-VertZ; \
+ glNormal3f(VectMul(NeiAX, NeiAY, NeiAZ, NeiBX, NeiBY, NeiBZ)); \
+ glVertex3f(VertX, VertY, VertZ); \
+ glEnd(); \
+ } \
+ } \
+ VS=(Factor<0); \
+}
+
+static void
+draw_tetra(ModeInfo * mi)
+{
+ GLuint list;
+
+ morph3dstruct *mp = &morph3d[MI_SCREEN(mi)];
+
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[0]);
+
+ list = glGenLists(1);
+ glNewList(list, GL_COMPILE_AND_EXECUTE);
+ TRIANGLE(2, mp->seno, mp->edgedivisions, 0.5 / SQRT6, mp->VisibleSpikes);
+ glEndList();
+
+ glPushMatrix();
+ glRotatef(180, 0, 0, 1);
+ glRotatef(-tetraangle, 1, 0, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[1]);
+ glCallList(list);
+ glPopMatrix();
+ glPushMatrix();
+ glRotatef(180, 0, 1, 0);
+ glRotatef(-180 + tetraangle, 0.5, SQRT3 / 2, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[2]);
+ glCallList(list);
+ glPopMatrix();
+ glRotatef(180, 0, 1, 0);
+ glRotatef(-180 + tetraangle, 0.5, -SQRT3 / 2, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[3]);
+ glCallList(list);
+
+ glDeleteLists(list, 1);
+}
+
+static void
+draw_cube(ModeInfo * mi)
+{
+ GLuint list;
+
+ morph3dstruct *mp = &morph3d[MI_SCREEN(mi)];
+
+
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[0]);
+
+ list = glGenLists(1);
+ glNewList(list, GL_COMPILE_AND_EXECUTE);
+ SQUARE(2, mp->seno, mp->edgedivisions, 0.5, mp->VisibleSpikes)
+ glEndList();
+
+ glRotatef(cubeangle, 1, 0, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[1]);
+ glCallList(list);
+ glRotatef(cubeangle, 1, 0, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[2]);
+ glCallList(list);
+ glRotatef(cubeangle, 1, 0, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[3]);
+ glCallList(list);
+ glRotatef(cubeangle, 0, 1, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[4]);
+ glCallList(list);
+ glRotatef(2 * cubeangle, 0, 1, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[5]);
+ glCallList(list);
+
+ glDeleteLists(list, 1);
+}
+
+static void
+draw_octa(ModeInfo * mi)
+{
+ GLuint list;
+
+ morph3dstruct *mp = &morph3d[MI_SCREEN(mi)];
+
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[0]);
+
+ list = glGenLists(1);
+ glNewList(list, GL_COMPILE_AND_EXECUTE);
+ TRIANGLE(2, mp->seno, mp->edgedivisions, 1 / SQRT6, mp->VisibleSpikes);
+ glEndList();
+
+ glPushMatrix();
+ glRotatef(180, 0, 0, 1);
+ glRotatef(-180 + octaangle, 1, 0, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[1]);
+ glCallList(list);
+ glPopMatrix();
+ glPushMatrix();
+ glRotatef(180, 0, 1, 0);
+ glRotatef(-octaangle, 0.5, SQRT3 / 2, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[2]);
+ glCallList(list);
+ glPopMatrix();
+ glPushMatrix();
+ glRotatef(180, 0, 1, 0);
+ glRotatef(-octaangle, 0.5, -SQRT3 / 2, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[3]);
+ glCallList(list);
+ glPopMatrix();
+ glRotatef(180, 1, 0, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[4]);
+ glCallList(list);
+ glPushMatrix();
+ glRotatef(180, 0, 0, 1);
+ glRotatef(-180 + octaangle, 1, 0, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[5]);
+ glCallList(list);
+ glPopMatrix();
+ glPushMatrix();
+ glRotatef(180, 0, 1, 0);
+ glRotatef(-octaangle, 0.5, SQRT3 / 2, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[6]);
+ glCallList(list);
+ glPopMatrix();
+ glRotatef(180, 0, 1, 0);
+ glRotatef(-octaangle, 0.5, -SQRT3 / 2, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[7]);
+ glCallList(list);
+
+ glDeleteLists(list, 1);
+}
+
+static void
+draw_dodeca(ModeInfo * mi)
+{
+ GLuint list;
+
+ morph3dstruct *mp = &morph3d[MI_SCREEN(mi)];
+
+#define TAU ((SQRT5+1)/2)
+
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[0]);
+
+ list = glGenLists(1);
+ glNewList(list, GL_COMPILE_AND_EXECUTE);
+ PENTAGON(1, mp->seno, mp->edgedivisions, sqr(TAU) * sqrt((TAU + 2) / 5) / 2, mp->VisibleSpikes);
+ glEndList();
+
+ glPushMatrix();
+ glRotatef(180, 0, 0, 1);
+ glPushMatrix();
+ glRotatef(-dodecaangle, 1, 0, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[1]);
+ glCallList(list);
+ glPopMatrix();
+ glPushMatrix();
+ glRotatef(-dodecaangle, cos72, sin72, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[2]);
+ glCallList(list);
+ glPopMatrix();
+ glPushMatrix();
+ glRotatef(-dodecaangle, cos72, -sin72, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[3]);
+ glCallList(list);
+ glPopMatrix();
+ glPushMatrix();
+ glRotatef(dodecaangle, cos36, -sin36, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[4]);
+ glCallList(list);
+ glPopMatrix();
+ glRotatef(dodecaangle, cos36, sin36, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[5]);
+ glCallList(list);
+ glPopMatrix();
+ glRotatef(180, 1, 0, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[6]);
+ glCallList(list);
+ glRotatef(180, 0, 0, 1);
+ glPushMatrix();
+ glRotatef(-dodecaangle, 1, 0, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[7]);
+ glCallList(list);
+ glPopMatrix();
+ glPushMatrix();
+ glRotatef(-dodecaangle, cos72, sin72, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[8]);
+ glCallList(list);
+ glPopMatrix();
+ glPushMatrix();
+ glRotatef(-dodecaangle, cos72, -sin72, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[9]);
+ glCallList(list);
+ glPopMatrix();
+ glPushMatrix();
+ glRotatef(dodecaangle, cos36, -sin36, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[10]);
+ glCallList(list);
+ glPopMatrix();
+ glRotatef(dodecaangle, cos36, sin36, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[11]);
+ glCallList(list);
+
+ glDeleteLists(list, 1);
+}
+
+static void
+draw_icosa(ModeInfo * mi)
+{
+ GLuint list;
+
+ morph3dstruct *mp = &morph3d[MI_SCREEN(mi)];
+
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[0]);
+
+ list = glGenLists(1);
+ glNewList(list, GL_COMPILE_AND_EXECUTE);
+ TRIANGLE(1.5, mp->seno, mp->edgedivisions, (3 * SQRT3 + SQRT15) / 12,mp->VisibleSpikes);
+ glEndList();
+
+ glPushMatrix();
+
+ glPushMatrix();
+ glRotatef(180, 0, 0, 1);
+ glRotatef(-icoangle, 1, 0, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[1]);
+ glCallList(list);
+ glPushMatrix();
+ glRotatef(180, 0, 1, 0);
+ glRotatef(-180 + icoangle, 0.5, SQRT3 / 2, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[2]);
+ glCallList(list);
+ glPopMatrix();
+ glRotatef(180, 0, 1, 0);
+ glRotatef(-180 + icoangle, 0.5, -SQRT3 / 2, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[3]);
+ glCallList(list);
+ glPopMatrix();
+ glPushMatrix();
+ glRotatef(180, 0, 1, 0);
+ glRotatef(-180 + icoangle, 0.5, SQRT3 / 2, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[4]);
+ glCallList(list);
+ glPushMatrix();
+ glRotatef(180, 0, 1, 0);
+ glRotatef(-180 + icoangle, 0.5, SQRT3 / 2, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[5]);
+ glCallList(list);
+ glPopMatrix();
+ glRotatef(180, 0, 0, 1);
+ glRotatef(-icoangle, 1, 0, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[6]);
+ glCallList(list);
+ glPopMatrix();
+ glRotatef(180, 0, 1, 0);
+ glRotatef(-180 + icoangle, 0.5, -SQRT3 / 2, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[7]);
+ glCallList(list);
+ glPushMatrix();
+ glRotatef(180, 0, 1, 0);
+ glRotatef(-180 + icoangle, 0.5, -SQRT3 / 2, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[8]);
+ glCallList(list);
+ glPopMatrix();
+ glRotatef(180, 0, 0, 1);
+ glRotatef(-icoangle, 1, 0, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[9]);
+ glCallList(list);
+ glPopMatrix();
+ glRotatef(180, 1, 0, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[10]);
+ glCallList(list);
+ glPushMatrix();
+ glRotatef(180, 0, 0, 1);
+ glRotatef(-icoangle, 1, 0, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[11]);
+ glCallList(list);
+ glPushMatrix();
+ glRotatef(180, 0, 1, 0);
+ glRotatef(-180 + icoangle, 0.5, SQRT3 / 2, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[12]);
+ glCallList(list);
+ glPopMatrix();
+ glRotatef(180, 0, 1, 0);
+ glRotatef(-180 + icoangle, 0.5, -SQRT3 / 2, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[13]);
+ glCallList(list);
+ glPopMatrix();
+ glPushMatrix();
+ glRotatef(180, 0, 1, 0);
+ glRotatef(-180 + icoangle, 0.5, SQRT3 / 2, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[14]);
+ glCallList(list);
+ glPushMatrix();
+ glRotatef(180, 0, 1, 0);
+ glRotatef(-180 + icoangle, 0.5, SQRT3 / 2, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[15]);
+ glCallList(list);
+ glPopMatrix();
+ glRotatef(180, 0, 0, 1);
+ glRotatef(-icoangle, 1, 0, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[16]);
+ glCallList(list);
+ glPopMatrix();
+ glRotatef(180, 0, 1, 0);
+ glRotatef(-180 + icoangle, 0.5, -SQRT3 / 2, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[17]);
+ glCallList(list);
+ glPushMatrix();
+ glRotatef(180, 0, 1, 0);
+ glRotatef(-180 + icoangle, 0.5, -SQRT3 / 2, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[18]);
+ glCallList(list);
+ glPopMatrix();
+ glRotatef(180, 0, 0, 1);
+ glRotatef(-icoangle, 1, 0, 0);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[19]);
+ glCallList(list);
+
+ glDeleteLists(list, 1);
+}
+
+void
+draw_morph3d(ModeInfo * mi)
+{
+ morph3dstruct *mp = &morph3d[MI_SCREEN(mi)];
+
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+
+ glDrawBuffer(GL_BACK);
+ glXMakeCurrent(display, window, mp->glx_context);
+
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ glPushMatrix();
+
+ glTranslatef(0.0, 0.0, -10.0);
+
+ if (!MI_WIN_IS_ICONIC(mi)) {
+ glScalef(Scale4Window * mp->WindH / mp->WindW, Scale4Window, Scale4Window);
+ glTranslatef(2.5 * mp->WindW / mp->WindH * sin(mp->step * 1.11), 2.5 * cos(mp->step * 1.25 * 1.11), 0);
+ } else {
+ glScalef(Scale4Iconic * mp->WindH / mp->WindW, Scale4Iconic, Scale4Iconic);
+ }
+
+ glRotatef(mp->step * 100, 1, 0, 0);
+ glRotatef(mp->step * 95, 0, 1, 0);
+ glRotatef(mp->step * 90, 0, 0, 1);
+
+ mp->seno = (sin(mp->step) + 1.0 / 3.0) * (4.0 / 5.0) * mp->Magnitude;
+
+ if (mp->VisibleSpikes) {
+#ifdef DEBUG_CULL_FACE
+ int loop;
+ for (loop = 0; loop < 20; loop++) mp->MaterialColor[loop] = MaterialGray;
+#endif
+ glDisable(GL_CULL_FACE);
+ } else {
+#ifdef DEBUG_CULL_FACE
+ int loop;
+ for (loop = 0; loop < 20; loop++) mp->MaterialColor[loop] = MaterialWhite;
+#endif
+ glEnable(GL_CULL_FACE);
+ }
+
+ mp->draw_object(mi);
+
+ glPopMatrix();
+
+ glFlush();
+
+ glXSwapBuffers(display, window);
+
+ mp->step += 0.05;
+}
+
+static void
+reshape(ModeInfo * mi, int width, int height)
+{
+ morph3dstruct *mp = &morph3d[MI_SCREEN(mi)];
+
+ glViewport(0, 0, mp->WindW = (GLint) width, mp->WindH = (GLint) height);
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 15.0);
+ glMatrixMode(GL_MODELVIEW);
+}
+
+static void
+pinit(ModeInfo * mi)
+{
+ morph3dstruct *mp = &morph3d[MI_SCREEN(mi)];
+
+ glClearDepth(1.0);
+ glClearColor(0.0, 0.0, 0.0, 1.0);
+ glColor3f(1.0, 1.0, 1.0);
+
+ glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
+ glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
+ glLightfv(GL_LIGHT0, GL_POSITION, position0);
+ glLightfv(GL_LIGHT1, GL_AMBIENT, ambient);
+ glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse);
+ glLightfv(GL_LIGHT1, GL_POSITION, position1);
+ glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);
+ glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, lmodel_twoside);
+ glEnable(GL_LIGHTING);
+ glEnable(GL_LIGHT0);
+ glEnable(GL_LIGHT1);
+ glEnable(GL_DEPTH_TEST);
+ glEnable(GL_NORMALIZE);
+
+ glShadeModel(GL_SMOOTH);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, front_shininess);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, front_specular);
+
+ switch (mp->object) {
+ case 2:
+ mp->draw_object = draw_cube;
+ mp->MaterialColor[0] = MaterialRed;
+ mp->MaterialColor[1] = MaterialGreen;
+ mp->MaterialColor[2] = MaterialCyan;
+ mp->MaterialColor[3] = MaterialMagenta;
+ mp->MaterialColor[4] = MaterialYellow;
+ mp->MaterialColor[5] = MaterialBlue;
+ mp->edgedivisions = cubedivisions;
+ mp->Magnitude = 2.0;
+ break;
+ case 3:
+ mp->draw_object = draw_octa;
+ mp->MaterialColor[0] = MaterialRed;
+ mp->MaterialColor[1] = MaterialGreen;
+ mp->MaterialColor[2] = MaterialBlue;
+ mp->MaterialColor[3] = MaterialWhite;
+ mp->MaterialColor[4] = MaterialCyan;
+ mp->MaterialColor[5] = MaterialMagenta;
+ mp->MaterialColor[6] = MaterialGray;
+ mp->MaterialColor[7] = MaterialYellow;
+ mp->edgedivisions = octadivisions;
+ mp->Magnitude = 2.5;
+ break;
+ case 4:
+ mp->draw_object = draw_dodeca;
+ mp->MaterialColor[0] = MaterialRed;
+ mp->MaterialColor[1] = MaterialGreen;
+ mp->MaterialColor[2] = MaterialCyan;
+ mp->MaterialColor[3] = MaterialBlue;
+ mp->MaterialColor[4] = MaterialMagenta;
+ mp->MaterialColor[5] = MaterialYellow;
+ mp->MaterialColor[6] = MaterialGreen;
+ mp->MaterialColor[7] = MaterialCyan;
+ mp->MaterialColor[8] = MaterialRed;
+ mp->MaterialColor[9] = MaterialMagenta;
+ mp->MaterialColor[10] = MaterialBlue;
+ mp->MaterialColor[11] = MaterialYellow;
+ mp->edgedivisions = dodecadivisions;
+ mp->Magnitude = 2.0;
+ break;
+ case 5:
+ mp->draw_object = draw_icosa;
+ mp->MaterialColor[0] = MaterialRed;
+ mp->MaterialColor[1] = MaterialGreen;
+ mp->MaterialColor[2] = MaterialBlue;
+ mp->MaterialColor[3] = MaterialCyan;
+ mp->MaterialColor[4] = MaterialYellow;
+ mp->MaterialColor[5] = MaterialMagenta;
+ mp->MaterialColor[6] = MaterialRed;
+ mp->MaterialColor[7] = MaterialGreen;
+ mp->MaterialColor[8] = MaterialBlue;
+ mp->MaterialColor[9] = MaterialWhite;
+ mp->MaterialColor[10] = MaterialCyan;
+ mp->MaterialColor[11] = MaterialYellow;
+ mp->MaterialColor[12] = MaterialMagenta;
+ mp->MaterialColor[13] = MaterialRed;
+ mp->MaterialColor[14] = MaterialGreen;
+ mp->MaterialColor[15] = MaterialBlue;
+ mp->MaterialColor[16] = MaterialCyan;
+ mp->MaterialColor[17] = MaterialYellow;
+ mp->MaterialColor[18] = MaterialMagenta;
+ mp->MaterialColor[19] = MaterialGray;
+ mp->edgedivisions = icodivisions;
+ mp->Magnitude = 2.5;
+ break;
+ default:
+ mp->draw_object = draw_tetra;
+ mp->MaterialColor[0] = MaterialRed;
+ mp->MaterialColor[1] = MaterialGreen;
+ mp->MaterialColor[2] = MaterialBlue;
+ mp->MaterialColor[3] = MaterialWhite;
+ mp->edgedivisions = tetradivisions;
+ mp->Magnitude = 2.5;
+ break;
+ }
+ if (MI_WIN_IS_MONO(mi)) {
+ int loop;
+
+ for (loop = 0; loop < 20; loop++)
+ mp->MaterialColor[loop] = MaterialGray;
+ }
+}
+
+void
+init_morph3d(ModeInfo * mi)
+{
+ int screen = MI_SCREEN(mi);
+ morph3dstruct *mp;
+
+ if (morph3d == NULL) {
+ if ((morph3d = (morph3dstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (morph3dstruct))) == NULL)
+ return;
+ }
+ mp = &morph3d[screen];
+ mp->step = NRAND(90);
+ mp->VisibleSpikes=1;
+
+ mp->glx_context = init_GL(mi);
+
+ reshape(mi, MI_WIN_WIDTH(mi), MI_WIN_HEIGHT(mi));
+ mp->object = MI_BATCHCOUNT(mi);
+ if (mp->object <= 0 || mp->object > 5)
+ mp->object = NRAND(5) + 1;
+ pinit(mi);
+}
+
+void
+change_morph3d(ModeInfo * mi)
+{
+ morph3dstruct *mp = &morph3d[MI_SCREEN(mi)];
+
+ mp->object = (mp->object) % 5 + 1;
+ pinit(mi);
+}
+
+void
+release_morph3d(ModeInfo * mi)
+{
+ if (morph3d != NULL) {
+ (void) free((void *) morph3d);
+ morph3d = NULL;
+ }
+}
+
+#endif
--- /dev/null
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)pipeobjs.c 4.2 97/04/27 xlockmore";
+
+#endif
+
+/*-
+ * Points, polygons, and normal vectors to render objects for pipes.
+ *
+ * Generated by lw2ogl.
+ */
+
+#include "xlock.h"
+
+#if defined( USE_GL )
+
+#include <GL/gl.h>
+#include "glx/buildlwo.h"
+
+GLfloat BigValve_PNTS[] =
+{
+ (GLfloat) 0.756788, (GLfloat) 0.614672, (GLfloat) - 0.000000,
+ (GLfloat) 0.779498, (GLfloat) 0.599497, (GLfloat) - 0.000000,
+ (GLfloat) 0.794672, (GLfloat) 0.576788, (GLfloat) - 0.000000,
+ (GLfloat) 0.800000, (GLfloat) 0.550000, (GLfloat) - 0.000000,
+ (GLfloat) 0.794672, (GLfloat) 0.523212, (GLfloat) - 0.000000,
+ (GLfloat) 0.779498, (GLfloat) 0.500503, (GLfloat) - 0.000000,
+ (GLfloat) 0.756788, (GLfloat) 0.485328, (GLfloat) - 0.000000,
+ (GLfloat) 0.730000, (GLfloat) 0.480000, (GLfloat) - 0.000000,
+ (GLfloat) 0.703212, (GLfloat) 0.485328, (GLfloat) - 0.000000,
+ (GLfloat) 0.680503, (GLfloat) 0.500503, (GLfloat) - 0.000000,
+ (GLfloat) 0.665328, (GLfloat) 0.523212, (GLfloat) - 0.000000,
+ (GLfloat) 0.660000, (GLfloat) 0.550000, (GLfloat) - 0.000000,
+ (GLfloat) 0.665328, (GLfloat) 0.576788, (GLfloat) - 0.000000,
+ (GLfloat) 0.680503, (GLfloat) 0.599497, (GLfloat) - 0.000000,
+ (GLfloat) 0.703212, (GLfloat) 0.614672, (GLfloat) - 0.000000,
+ (GLfloat) 0.730000, (GLfloat) 0.620000, (GLfloat) - 0.000000,
+ (GLfloat) 0.756788, (GLfloat) 0.602861, (GLfloat) 0.119916,
+ (GLfloat) 0.779498, (GLfloat) 0.587978, (GLfloat) 0.116956,
+ (GLfloat) 0.794672, (GLfloat) 0.565705, (GLfloat) 0.112526,
+ (GLfloat) 0.800000, (GLfloat) 0.539432, (GLfloat) 0.107300,
+ (GLfloat) 0.794672, (GLfloat) 0.513159, (GLfloat) 0.102074,
+ (GLfloat) 0.779498, (GLfloat) 0.490886, (GLfloat) 0.097643,
+ (GLfloat) 0.756788, (GLfloat) 0.476003, (GLfloat) 0.094683,
+ (GLfloat) 0.730000, (GLfloat) 0.470777, (GLfloat) 0.093643,
+ (GLfloat) 0.703212, (GLfloat) 0.476003, (GLfloat) 0.094683,
+ (GLfloat) 0.680503, (GLfloat) 0.490886, (GLfloat) 0.097643,
+ (GLfloat) 0.665328, (GLfloat) 0.513159, (GLfloat) 0.102074,
+ (GLfloat) 0.660000, (GLfloat) 0.539432, (GLfloat) 0.107300,
+ (GLfloat) 0.665328, (GLfloat) 0.565705, (GLfloat) 0.112526,
+ (GLfloat) 0.680503, (GLfloat) 0.587978, (GLfloat) 0.116956,
+ (GLfloat) 0.703212, (GLfloat) 0.602861, (GLfloat) 0.119916,
+ (GLfloat) 0.730000, (GLfloat) 0.608087, (GLfloat) 0.120956,
+ (GLfloat) 0.756788, (GLfloat) 0.567882, (GLfloat) 0.235225,
+ (GLfloat) 0.779498, (GLfloat) 0.553863, (GLfloat) 0.229418,
+ (GLfloat) 0.794672, (GLfloat) 0.532882, (GLfloat) 0.220727,
+ (GLfloat) 0.800000, (GLfloat) 0.508134, (GLfloat) 0.210476,
+ (GLfloat) 0.794672, (GLfloat) 0.483385, (GLfloat) 0.200225,
+ (GLfloat) 0.779498, (GLfloat) 0.462404, (GLfloat) 0.191534,
+ (GLfloat) 0.756788, (GLfloat) 0.448385, (GLfloat) 0.185727,
+ (GLfloat) 0.730000, (GLfloat) 0.443462, (GLfloat) 0.183688,
+ (GLfloat) 0.703212, (GLfloat) 0.448385, (GLfloat) 0.185727,
+ (GLfloat) 0.680503, (GLfloat) 0.462404, (GLfloat) 0.191534,
+ (GLfloat) 0.665328, (GLfloat) 0.483385, (GLfloat) 0.200225,
+ (GLfloat) 0.660000, (GLfloat) 0.508134, (GLfloat) 0.210476,
+ (GLfloat) 0.665328, (GLfloat) 0.532882, (GLfloat) 0.220727,
+ (GLfloat) 0.680503, (GLfloat) 0.553863, (GLfloat) 0.229418,
+ (GLfloat) 0.703212, (GLfloat) 0.567882, (GLfloat) 0.235225,
+ (GLfloat) 0.730000, (GLfloat) 0.572805, (GLfloat) 0.237264,
+ (GLfloat) 0.756788, (GLfloat) 0.511081, (GLfloat) 0.341493,
+ (GLfloat) 0.779498, (GLfloat) 0.498464, (GLfloat) 0.333063,
+ (GLfloat) 0.794672, (GLfloat) 0.479582, (GLfloat) 0.320446,
+ (GLfloat) 0.800000, (GLfloat) 0.457308, (GLfloat) 0.305564,
+ (GLfloat) 0.794672, (GLfloat) 0.435035, (GLfloat) 0.290681,
+ (GLfloat) 0.779498, (GLfloat) 0.416153, (GLfloat) 0.278064,
+ (GLfloat) 0.756788, (GLfloat) 0.403536, (GLfloat) 0.269634,
+ (GLfloat) 0.730000, (GLfloat) 0.399105, (GLfloat) 0.266674,
+ (GLfloat) 0.703212, (GLfloat) 0.403536, (GLfloat) 0.269634,
+ (GLfloat) 0.680503, (GLfloat) 0.416153, (GLfloat) 0.278064,
+ (GLfloat) 0.665328, (GLfloat) 0.435035, (GLfloat) 0.290681,
+ (GLfloat) 0.660000, (GLfloat) 0.457308, (GLfloat) 0.305564,
+ (GLfloat) 0.665328, (GLfloat) 0.479582, (GLfloat) 0.320446,
+ (GLfloat) 0.680503, (GLfloat) 0.498464, (GLfloat) 0.333063,
+ (GLfloat) 0.703212, (GLfloat) 0.511081, (GLfloat) 0.341493,
+ (GLfloat) 0.730000, (GLfloat) 0.515511, (GLfloat) 0.344454,
+ (GLfloat) 0.756788, (GLfloat) 0.434638, (GLfloat) 0.434638,
+ (GLfloat) 0.779498, (GLfloat) 0.423909, (GLfloat) 0.423909,
+ (GLfloat) 0.794672, (GLfloat) 0.407851, (GLfloat) 0.407851,
+ (GLfloat) 0.800000, (GLfloat) 0.388909, (GLfloat) 0.388909,
+ (GLfloat) 0.794672, (GLfloat) 0.369967, (GLfloat) 0.369967,
+ (GLfloat) 0.779498, (GLfloat) 0.353909, (GLfloat) 0.353909,
+ (GLfloat) 0.756788, (GLfloat) 0.343179, (GLfloat) 0.343179,
+ (GLfloat) 0.730000, (GLfloat) 0.339411, (GLfloat) 0.339411,
+ (GLfloat) 0.703212, (GLfloat) 0.343179, (GLfloat) 0.343179,
+ (GLfloat) 0.680503, (GLfloat) 0.353909, (GLfloat) 0.353909,
+ (GLfloat) 0.665328, (GLfloat) 0.369967, (GLfloat) 0.369967,
+ (GLfloat) 0.660000, (GLfloat) 0.388909, (GLfloat) 0.388909,
+ (GLfloat) 0.665328, (GLfloat) 0.407851, (GLfloat) 0.407851,
+ (GLfloat) 0.680503, (GLfloat) 0.423909, (GLfloat) 0.423909,
+ (GLfloat) 0.703212, (GLfloat) 0.434638, (GLfloat) 0.434638,
+ (GLfloat) 0.730000, (GLfloat) 0.438406, (GLfloat) 0.438406,
+ (GLfloat) 0.756788, (GLfloat) 0.341493, (GLfloat) 0.511081,
+ (GLfloat) 0.779498, (GLfloat) 0.333063, (GLfloat) 0.498464,
+ (GLfloat) 0.794672, (GLfloat) 0.320446, (GLfloat) 0.479582,
+ (GLfloat) 0.800000, (GLfloat) 0.305564, (GLfloat) 0.457308,
+ (GLfloat) 0.794672, (GLfloat) 0.290681, (GLfloat) 0.435035,
+ (GLfloat) 0.779498, (GLfloat) 0.278064, (GLfloat) 0.416153,
+ (GLfloat) 0.756788, (GLfloat) 0.269634, (GLfloat) 0.403536,
+ (GLfloat) 0.730000, (GLfloat) 0.266674, (GLfloat) 0.399105,
+ (GLfloat) 0.703212, (GLfloat) 0.269634, (GLfloat) 0.403536,
+ (GLfloat) 0.680503, (GLfloat) 0.278064, (GLfloat) 0.416153,
+ (GLfloat) 0.665328, (GLfloat) 0.290681, (GLfloat) 0.435035,
+ (GLfloat) 0.660000, (GLfloat) 0.305564, (GLfloat) 0.457308,
+ (GLfloat) 0.665328, (GLfloat) 0.320446, (GLfloat) 0.479582,
+ (GLfloat) 0.680503, (GLfloat) 0.333063, (GLfloat) 0.498464,
+ (GLfloat) 0.703212, (GLfloat) 0.341493, (GLfloat) 0.511081,
+ (GLfloat) 0.730000, (GLfloat) 0.344454, (GLfloat) 0.515511,
+ (GLfloat) 0.756788, (GLfloat) 0.235225, (GLfloat) 0.567882,
+ (GLfloat) 0.779498, (GLfloat) 0.229418, (GLfloat) 0.553863,
+ (GLfloat) 0.794672, (GLfloat) 0.220727, (GLfloat) 0.532882,
+ (GLfloat) 0.800000, (GLfloat) 0.210476, (GLfloat) 0.508134,
+ (GLfloat) 0.794672, (GLfloat) 0.200225, (GLfloat) 0.483385,
+ (GLfloat) 0.779498, (GLfloat) 0.191534, (GLfloat) 0.462404,
+ (GLfloat) 0.756788, (GLfloat) 0.185727, (GLfloat) 0.448385,
+ (GLfloat) 0.730000, (GLfloat) 0.183688, (GLfloat) 0.443462,
+ (GLfloat) 0.703212, (GLfloat) 0.185727, (GLfloat) 0.448385,
+ (GLfloat) 0.680503, (GLfloat) 0.191534, (GLfloat) 0.462404,
+ (GLfloat) 0.665328, (GLfloat) 0.200225, (GLfloat) 0.483385,
+ (GLfloat) 0.660000, (GLfloat) 0.210476, (GLfloat) 0.508134,
+ (GLfloat) 0.665328, (GLfloat) 0.220727, (GLfloat) 0.532882,
+ (GLfloat) 0.680503, (GLfloat) 0.229418, (GLfloat) 0.553863,
+ (GLfloat) 0.703212, (GLfloat) 0.235225, (GLfloat) 0.567882,
+ (GLfloat) 0.730000, (GLfloat) 0.237264, (GLfloat) 0.572805,
+ (GLfloat) 0.756788, (GLfloat) 0.119916, (GLfloat) 0.602861,
+ (GLfloat) 0.779498, (GLfloat) 0.116956, (GLfloat) 0.587978,
+ (GLfloat) 0.794672, (GLfloat) 0.112526, (GLfloat) 0.565705,
+ (GLfloat) 0.800000, (GLfloat) 0.107300, (GLfloat) 0.539432,
+ (GLfloat) 0.794672, (GLfloat) 0.102074, (GLfloat) 0.513159,
+ (GLfloat) 0.779498, (GLfloat) 0.097643, (GLfloat) 0.490886,
+ (GLfloat) 0.756788, (GLfloat) 0.094683, (GLfloat) 0.476003,
+ (GLfloat) 0.730000, (GLfloat) 0.093643, (GLfloat) 0.470777,
+ (GLfloat) 0.703212, (GLfloat) 0.094683, (GLfloat) 0.476003,
+ (GLfloat) 0.680503, (GLfloat) 0.097643, (GLfloat) 0.490886,
+ (GLfloat) 0.665328, (GLfloat) 0.102074, (GLfloat) 0.513159,
+ (GLfloat) 0.660000, (GLfloat) 0.107300, (GLfloat) 0.539432,
+ (GLfloat) 0.665328, (GLfloat) 0.112526, (GLfloat) 0.565705,
+ (GLfloat) 0.680503, (GLfloat) 0.116956, (GLfloat) 0.587978,
+ (GLfloat) 0.703212, (GLfloat) 0.119916, (GLfloat) 0.602861,
+ (GLfloat) 0.730000, (GLfloat) 0.120956, (GLfloat) 0.608087,
+ (GLfloat) 0.756788, (GLfloat) 0.000000, (GLfloat) 0.614672,
+ (GLfloat) 0.779498, (GLfloat) 0.000000, (GLfloat) 0.599497,
+ (GLfloat) 0.794672, (GLfloat) 0.000000, (GLfloat) 0.576788,
+ (GLfloat) 0.800000, (GLfloat) 0.000000, (GLfloat) 0.550000,
+ (GLfloat) 0.794672, (GLfloat) 0.000000, (GLfloat) 0.523212,
+ (GLfloat) 0.779498, (GLfloat) 0.000000, (GLfloat) 0.500503,
+ (GLfloat) 0.756788, (GLfloat) 0.000000, (GLfloat) 0.485328,
+ (GLfloat) 0.730000, (GLfloat) 0.000000, (GLfloat) 0.480000,
+ (GLfloat) 0.703212, (GLfloat) 0.000000, (GLfloat) 0.485328,
+ (GLfloat) 0.680503, (GLfloat) 0.000000, (GLfloat) 0.500503,
+ (GLfloat) 0.665328, (GLfloat) 0.000000, (GLfloat) 0.523212,
+ (GLfloat) 0.660000, (GLfloat) 0.000000, (GLfloat) 0.550000,
+ (GLfloat) 0.665328, (GLfloat) 0.000000, (GLfloat) 0.576788,
+ (GLfloat) 0.680503, (GLfloat) 0.000000, (GLfloat) 0.599497,
+ (GLfloat) 0.703212, (GLfloat) 0.000000, (GLfloat) 0.614672,
+ (GLfloat) 0.730000, (GLfloat) 0.000000, (GLfloat) 0.620000,
+ (GLfloat) 0.756788, (GLfloat) - 0.119916, (GLfloat) 0.602861,
+ (GLfloat) 0.779498, (GLfloat) - 0.116956, (GLfloat) 0.587978,
+ (GLfloat) 0.794672, (GLfloat) - 0.112526, (GLfloat) 0.565705,
+ (GLfloat) 0.800000, (GLfloat) - 0.107300, (GLfloat) 0.539432,
+ (GLfloat) 0.794672, (GLfloat) - 0.102074, (GLfloat) 0.513159,
+ (GLfloat) 0.779498, (GLfloat) - 0.097643, (GLfloat) 0.490886,
+ (GLfloat) 0.756788, (GLfloat) - 0.094683, (GLfloat) 0.476003,
+ (GLfloat) 0.730000, (GLfloat) - 0.093643, (GLfloat) 0.470777,
+ (GLfloat) 0.703212, (GLfloat) - 0.094683, (GLfloat) 0.476003,
+ (GLfloat) 0.680503, (GLfloat) - 0.097643, (GLfloat) 0.490886,
+ (GLfloat) 0.665328, (GLfloat) - 0.102074, (GLfloat) 0.513159,
+ (GLfloat) 0.660000, (GLfloat) - 0.107300, (GLfloat) 0.539432,
+ (GLfloat) 0.665328, (GLfloat) - 0.112526, (GLfloat) 0.565705,
+ (GLfloat) 0.680503, (GLfloat) - 0.116956, (GLfloat) 0.587978,
+ (GLfloat) 0.703212, (GLfloat) - 0.119916, (GLfloat) 0.602861,
+ (GLfloat) 0.730000, (GLfloat) - 0.120956, (GLfloat) 0.608087,
+ (GLfloat) 0.756788, (GLfloat) - 0.235225, (GLfloat) 0.567882,
+ (GLfloat) 0.779498, (GLfloat) - 0.229418, (GLfloat) 0.553863,
+ (GLfloat) 0.794672, (GLfloat) - 0.220727, (GLfloat) 0.532882,
+ (GLfloat) 0.800000, (GLfloat) - 0.210476, (GLfloat) 0.508134,
+ (GLfloat) 0.794672, (GLfloat) - 0.200225, (GLfloat) 0.483385,
+ (GLfloat) 0.779498, (GLfloat) - 0.191534, (GLfloat) 0.462404,
+ (GLfloat) 0.756788, (GLfloat) - 0.185727, (GLfloat) 0.448385,
+ (GLfloat) 0.730000, (GLfloat) - 0.183688, (GLfloat) 0.443462,
+ (GLfloat) 0.703212, (GLfloat) - 0.185727, (GLfloat) 0.448385,
+ (GLfloat) 0.680503, (GLfloat) - 0.191534, (GLfloat) 0.462404,
+ (GLfloat) 0.665328, (GLfloat) - 0.200225, (GLfloat) 0.483385,
+ (GLfloat) 0.660000, (GLfloat) - 0.210476, (GLfloat) 0.508134,
+ (GLfloat) 0.665328, (GLfloat) - 0.220727, (GLfloat) 0.532882,
+ (GLfloat) 0.680503, (GLfloat) - 0.229418, (GLfloat) 0.553863,
+ (GLfloat) 0.703212, (GLfloat) - 0.235225, (GLfloat) 0.567882,
+ (GLfloat) 0.730000, (GLfloat) - 0.237264, (GLfloat) 0.572805,
+ (GLfloat) 0.756788, (GLfloat) - 0.341493, (GLfloat) 0.511081,
+ (GLfloat) 0.779498, (GLfloat) - 0.333063, (GLfloat) 0.498464,
+ (GLfloat) 0.794672, (GLfloat) - 0.320446, (GLfloat) 0.479582,
+ (GLfloat) 0.800000, (GLfloat) - 0.305564, (GLfloat) 0.457308,
+ (GLfloat) 0.794672, (GLfloat) - 0.290681, (GLfloat) 0.435035,
+ (GLfloat) 0.779498, (GLfloat) - 0.278064, (GLfloat) 0.416153,
+ (GLfloat) 0.756788, (GLfloat) - 0.269634, (GLfloat) 0.403536,
+ (GLfloat) 0.730000, (GLfloat) - 0.266674, (GLfloat) 0.399105,
+ (GLfloat) 0.703212, (GLfloat) - 0.269634, (GLfloat) 0.403536,
+ (GLfloat) 0.680503, (GLfloat) - 0.278064, (GLfloat) 0.416153,
+ (GLfloat) 0.665328, (GLfloat) - 0.290681, (GLfloat) 0.435035,
+ (GLfloat) 0.660000, (GLfloat) - 0.305564, (GLfloat) 0.457308,
+ (GLfloat) 0.665328, (GLfloat) - 0.320446, (GLfloat) 0.479582,
+ (GLfloat) 0.680503, (GLfloat) - 0.333063, (GLfloat) 0.498464,
+ (GLfloat) 0.703212, (GLfloat) - 0.341493, (GLfloat) 0.511081,
+ (GLfloat) 0.730000, (GLfloat) - 0.344454, (GLfloat) 0.515511,
+ (GLfloat) 0.756788, (GLfloat) - 0.434638, (GLfloat) 0.434638,
+ (GLfloat) 0.779498, (GLfloat) - 0.423909, (GLfloat) 0.423909,
+ (GLfloat) 0.794672, (GLfloat) - 0.407851, (GLfloat) 0.407851,
+ (GLfloat) 0.800000, (GLfloat) - 0.388909, (GLfloat) 0.388909,
+ (GLfloat) 0.794672, (GLfloat) - 0.369967, (GLfloat) 0.369967,
+ (GLfloat) 0.779498, (GLfloat) - 0.353909, (GLfloat) 0.353909,
+ (GLfloat) 0.756788, (GLfloat) - 0.343179, (GLfloat) 0.343179,
+ (GLfloat) 0.730000, (GLfloat) - 0.339411, (GLfloat) 0.339411,
+ (GLfloat) 0.703212, (GLfloat) - 0.343179, (GLfloat) 0.343179,
+ (GLfloat) 0.680503, (GLfloat) - 0.353909, (GLfloat) 0.353909,
+ (GLfloat) 0.665328, (GLfloat) - 0.369967, (GLfloat) 0.369967,
+ (GLfloat) 0.660000, (GLfloat) - 0.388909, (GLfloat) 0.388909,
+ (GLfloat) 0.665328, (GLfloat) - 0.407851, (GLfloat) 0.407851,
+ (GLfloat) 0.680503, (GLfloat) - 0.423909, (GLfloat) 0.423909,
+ (GLfloat) 0.703212, (GLfloat) - 0.434638, (GLfloat) 0.434638,
+ (GLfloat) 0.730000, (GLfloat) - 0.438406, (GLfloat) 0.438406,
+ (GLfloat) 0.756788, (GLfloat) - 0.511081, (GLfloat) 0.341493,
+ (GLfloat) 0.779498, (GLfloat) - 0.498464, (GLfloat) 0.333063,
+ (GLfloat) 0.794672, (GLfloat) - 0.479582, (GLfloat) 0.320446,
+ (GLfloat) 0.800000, (GLfloat) - 0.457308, (GLfloat) 0.305564,
+ (GLfloat) 0.794672, (GLfloat) - 0.435035, (GLfloat) 0.290681,
+ (GLfloat) 0.779498, (GLfloat) - 0.416153, (GLfloat) 0.278064,
+ (GLfloat) 0.756788, (GLfloat) - 0.403536, (GLfloat) 0.269634,
+ (GLfloat) 0.730000, (GLfloat) - 0.399105, (GLfloat) 0.266674,
+ (GLfloat) 0.703212, (GLfloat) - 0.403536, (GLfloat) 0.269634,
+ (GLfloat) 0.680503, (GLfloat) - 0.416153, (GLfloat) 0.278064,
+ (GLfloat) 0.665328, (GLfloat) - 0.435035, (GLfloat) 0.290681,
+ (GLfloat) 0.660000, (GLfloat) - 0.457308, (GLfloat) 0.305564,
+ (GLfloat) 0.665328, (GLfloat) - 0.479582, (GLfloat) 0.320446,
+ (GLfloat) 0.680503, (GLfloat) - 0.498464, (GLfloat) 0.333063,
+ (GLfloat) 0.703212, (GLfloat) - 0.511081, (GLfloat) 0.341493,
+ (GLfloat) 0.730000, (GLfloat) - 0.515511, (GLfloat) 0.344454,
+ (GLfloat) 0.756788, (GLfloat) - 0.567882, (GLfloat) 0.235225,
+ (GLfloat) 0.779498, (GLfloat) - 0.553863, (GLfloat) 0.229418,
+ (GLfloat) 0.794672, (GLfloat) - 0.532882, (GLfloat) 0.220727,
+ (GLfloat) 0.800000, (GLfloat) - 0.508134, (GLfloat) 0.210476,
+ (GLfloat) 0.794672, (GLfloat) - 0.483385, (GLfloat) 0.200225,
+ (GLfloat) 0.779498, (GLfloat) - 0.462404, (GLfloat) 0.191534,
+ (GLfloat) 0.756788, (GLfloat) - 0.448385, (GLfloat) 0.185727,
+ (GLfloat) 0.730000, (GLfloat) - 0.443462, (GLfloat) 0.183688,
+ (GLfloat) 0.703212, (GLfloat) - 0.448385, (GLfloat) 0.185727,
+ (GLfloat) 0.680503, (GLfloat) - 0.462404, (GLfloat) 0.191534,
+ (GLfloat) 0.665328, (GLfloat) - 0.483385, (GLfloat) 0.200225,
+ (GLfloat) 0.660000, (GLfloat) - 0.508134, (GLfloat) 0.210476,
+ (GLfloat) 0.665328, (GLfloat) - 0.532882, (GLfloat) 0.220727,
+ (GLfloat) 0.680503, (GLfloat) - 0.553863, (GLfloat) 0.229418,
+ (GLfloat) 0.703212, (GLfloat) - 0.567882, (GLfloat) 0.235225,
+ (GLfloat) 0.730000, (GLfloat) - 0.572805, (GLfloat) 0.237264,
+ (GLfloat) 0.756788, (GLfloat) - 0.602861, (GLfloat) 0.119916,
+ (GLfloat) 0.779498, (GLfloat) - 0.587978, (GLfloat) 0.116956,
+ (GLfloat) 0.794672, (GLfloat) - 0.565705, (GLfloat) 0.112526,
+ (GLfloat) 0.800000, (GLfloat) - 0.539432, (GLfloat) 0.107300,
+ (GLfloat) 0.794672, (GLfloat) - 0.513159, (GLfloat) 0.102074,
+ (GLfloat) 0.779498, (GLfloat) - 0.490886, (GLfloat) 0.097643,
+ (GLfloat) 0.756788, (GLfloat) - 0.476003, (GLfloat) 0.094683,
+ (GLfloat) 0.730000, (GLfloat) - 0.470777, (GLfloat) 0.093643,
+ (GLfloat) 0.703212, (GLfloat) - 0.476003, (GLfloat) 0.094683,
+ (GLfloat) 0.680503, (GLfloat) - 0.490886, (GLfloat) 0.097643,
+ (GLfloat) 0.665328, (GLfloat) - 0.513159, (GLfloat) 0.102074,
+ (GLfloat) 0.660000, (GLfloat) - 0.539432, (GLfloat) 0.107300,
+ (GLfloat) 0.665328, (GLfloat) - 0.565705, (GLfloat) 0.112526,
+ (GLfloat) 0.680503, (GLfloat) - 0.587978, (GLfloat) 0.116956,
+ (GLfloat) 0.703212, (GLfloat) - 0.602861, (GLfloat) 0.119916,
+ (GLfloat) 0.730000, (GLfloat) - 0.608087, (GLfloat) 0.120956,
+ (GLfloat) 0.756788, (GLfloat) - 0.614672, (GLfloat) 0.000000,
+ (GLfloat) 0.779498, (GLfloat) - 0.599497, (GLfloat) 0.000000,
+ (GLfloat) 0.794672, (GLfloat) - 0.576788, (GLfloat) 0.000000,
+ (GLfloat) 0.800000, (GLfloat) - 0.550000, (GLfloat) 0.000000,
+ (GLfloat) 0.794672, (GLfloat) - 0.523212, (GLfloat) 0.000000,
+ (GLfloat) 0.779498, (GLfloat) - 0.500503, (GLfloat) 0.000000,
+ (GLfloat) 0.756788, (GLfloat) - 0.485328, (GLfloat) 0.000000,
+ (GLfloat) 0.730000, (GLfloat) - 0.480000, (GLfloat) 0.000000,
+ (GLfloat) 0.703212, (GLfloat) - 0.485328, (GLfloat) 0.000000,
+ (GLfloat) 0.680503, (GLfloat) - 0.500503, (GLfloat) 0.000000,
+ (GLfloat) 0.665328, (GLfloat) - 0.523212, (GLfloat) 0.000000,
+ (GLfloat) 0.660000, (GLfloat) - 0.550000, (GLfloat) 0.000000,
+ (GLfloat) 0.665328, (GLfloat) - 0.576788, (GLfloat) 0.000000,
+ (GLfloat) 0.680503, (GLfloat) - 0.599497, (GLfloat) 0.000000,
+ (GLfloat) 0.703212, (GLfloat) - 0.614672, (GLfloat) 0.000000,
+ (GLfloat) 0.730000, (GLfloat) - 0.620000, (GLfloat) 0.000000,
+ (GLfloat) 0.756788, (GLfloat) - 0.602861, (GLfloat) - 0.119916,
+ (GLfloat) 0.779498, (GLfloat) - 0.587978, (GLfloat) - 0.116956,
+ (GLfloat) 0.794672, (GLfloat) - 0.565705, (GLfloat) - 0.112526,
+ (GLfloat) 0.800000, (GLfloat) - 0.539432, (GLfloat) - 0.107300,
+ (GLfloat) 0.794672, (GLfloat) - 0.513159, (GLfloat) - 0.102074,
+ (GLfloat) 0.779498, (GLfloat) - 0.490886, (GLfloat) - 0.097643,
+ (GLfloat) 0.756788, (GLfloat) - 0.476003, (GLfloat) - 0.094683,
+ (GLfloat) 0.730000, (GLfloat) - 0.470777, (GLfloat) - 0.093643,
+ (GLfloat) 0.703212, (GLfloat) - 0.476003, (GLfloat) - 0.094683,
+ (GLfloat) 0.680503, (GLfloat) - 0.490886, (GLfloat) - 0.097643,
+ (GLfloat) 0.665328, (GLfloat) - 0.513159, (GLfloat) - 0.102074,
+ (GLfloat) 0.660000, (GLfloat) - 0.539432, (GLfloat) - 0.107300,
+ (GLfloat) 0.665328, (GLfloat) - 0.565705, (GLfloat) - 0.112526,
+ (GLfloat) 0.680503, (GLfloat) - 0.587978, (GLfloat) - 0.116956,
+ (GLfloat) 0.703212, (GLfloat) - 0.602861, (GLfloat) - 0.119916,
+ (GLfloat) 0.730000, (GLfloat) - 0.608087, (GLfloat) - 0.120956,
+ (GLfloat) 0.756788, (GLfloat) - 0.567882, (GLfloat) - 0.235225,
+ (GLfloat) 0.779498, (GLfloat) - 0.553863, (GLfloat) - 0.229418,
+ (GLfloat) 0.794672, (GLfloat) - 0.532882, (GLfloat) - 0.220727,
+ (GLfloat) 0.800000, (GLfloat) - 0.508134, (GLfloat) - 0.210476,
+ (GLfloat) 0.794672, (GLfloat) - 0.483385, (GLfloat) - 0.200225,
+ (GLfloat) 0.779498, (GLfloat) - 0.462404, (GLfloat) - 0.191534,
+ (GLfloat) 0.756788, (GLfloat) - 0.448385, (GLfloat) - 0.185727,
+ (GLfloat) 0.730000, (GLfloat) - 0.443462, (GLfloat) - 0.183688,
+ (GLfloat) 0.703212, (GLfloat) - 0.448385, (GLfloat) - 0.185727,
+ (GLfloat) 0.680503, (GLfloat) - 0.462404, (GLfloat) - 0.191534,
+ (GLfloat) 0.665328, (GLfloat) - 0.483385, (GLfloat) - 0.200225,
+ (GLfloat) 0.660000, (GLfloat) - 0.508134, (GLfloat) - 0.210476,
+ (GLfloat) 0.665328, (GLfloat) - 0.532882, (GLfloat) - 0.220727,
+ (GLfloat) 0.680503, (GLfloat) - 0.553863, (GLfloat) - 0.229418,
+ (GLfloat) 0.703212, (GLfloat) - 0.567882, (GLfloat) - 0.235225,
+ (GLfloat) 0.730000, (GLfloat) - 0.572805, (GLfloat) - 0.237264,
+ (GLfloat) 0.756788, (GLfloat) - 0.511081, (GLfloat) - 0.341493,
+ (GLfloat) 0.779498, (GLfloat) - 0.498464, (GLfloat) - 0.333063,
+ (GLfloat) 0.794672, (GLfloat) - 0.479582, (GLfloat) - 0.320446,
+ (GLfloat) 0.800000, (GLfloat) - 0.457308, (GLfloat) - 0.305564,
+ (GLfloat) 0.794672, (GLfloat) - 0.435035, (GLfloat) - 0.290681,
+ (GLfloat) 0.779498, (GLfloat) - 0.416153, (GLfloat) - 0.278064,
+ (GLfloat) 0.756788, (GLfloat) - 0.403536, (GLfloat) - 0.269634,
+ (GLfloat) 0.730000, (GLfloat) - 0.399105, (GLfloat) - 0.266674,
+ (GLfloat) 0.703212, (GLfloat) - 0.403536, (GLfloat) - 0.269634,
+ (GLfloat) 0.680503, (GLfloat) - 0.416153, (GLfloat) - 0.278064,
+ (GLfloat) 0.665328, (GLfloat) - 0.435035, (GLfloat) - 0.290681,
+ (GLfloat) 0.660000, (GLfloat) - 0.457308, (GLfloat) - 0.305564,
+ (GLfloat) 0.665328, (GLfloat) - 0.479582, (GLfloat) - 0.320446,
+ (GLfloat) 0.680503, (GLfloat) - 0.498464, (GLfloat) - 0.333063,
+ (GLfloat) 0.703212, (GLfloat) - 0.511081, (GLfloat) - 0.341493,
+ (GLfloat) 0.730000, (GLfloat) - 0.515511, (GLfloat) - 0.344454,
+ (GLfloat) 0.756788, (GLfloat) - 0.434638, (GLfloat) - 0.434638,
+ (GLfloat) 0.779498, (GLfloat) - 0.423909, (GLfloat) - 0.423909,
+ (GLfloat) 0.794672, (GLfloat) - 0.407851, (GLfloat) - 0.407851,
+ (GLfloat) 0.800000, (GLfloat) - 0.388909, (GLfloat) - 0.388909,
+ (GLfloat) 0.794672, (GLfloat) - 0.369967, (GLfloat) - 0.369967,
+ (GLfloat) 0.779498, (GLfloat) - 0.353909, (GLfloat) - 0.353909,
+ (GLfloat) 0.756788, (GLfloat) - 0.343179, (GLfloat) - 0.343179,
+ (GLfloat) 0.730000, (GLfloat) - 0.339411, (GLfloat) - 0.339411,
+ (GLfloat) 0.703212, (GLfloat) - 0.343179, (GLfloat) - 0.343179,
+ (GLfloat) 0.680503, (GLfloat) - 0.353909, (GLfloat) - 0.353909,
+ (GLfloat) 0.665328, (GLfloat) - 0.369967, (GLfloat) - 0.369967,
+ (GLfloat) 0.660000, (GLfloat) - 0.388909, (GLfloat) - 0.388909,
+ (GLfloat) 0.665328, (GLfloat) - 0.407851, (GLfloat) - 0.407851,
+ (GLfloat) 0.680503, (GLfloat) - 0.423909, (GLfloat) - 0.423909,
+ (GLfloat) 0.703212, (GLfloat) - 0.434638, (GLfloat) - 0.434638,
+ (GLfloat) 0.730000, (GLfloat) - 0.438406, (GLfloat) - 0.438406,
+ (GLfloat) 0.756788, (GLfloat) - 0.341493, (GLfloat) - 0.511081,
+ (GLfloat) 0.779498, (GLfloat) - 0.333063, (GLfloat) - 0.498464,
+ (GLfloat) 0.794672, (GLfloat) - 0.320446, (GLfloat) - 0.479582,
+ (GLfloat) 0.800000, (GLfloat) - 0.305564, (GLfloat) - 0.457308,
+ (GLfloat) 0.794672, (GLfloat) - 0.290681, (GLfloat) - 0.435035,
+ (GLfloat) 0.779498, (GLfloat) - 0.278064, (GLfloat) - 0.416153,
+ (GLfloat) 0.756788, (GLfloat) - 0.269634, (GLfloat) - 0.403536,
+ (GLfloat) 0.730000, (GLfloat) - 0.266674, (GLfloat) - 0.399105,
+ (GLfloat) 0.703212, (GLfloat) - 0.269634, (GLfloat) - 0.403536,
+ (GLfloat) 0.680503, (GLfloat) - 0.278064, (GLfloat) - 0.416153,
+ (GLfloat) 0.665328, (GLfloat) - 0.290681, (GLfloat) - 0.435035,
+ (GLfloat) 0.660000, (GLfloat) - 0.305564, (GLfloat) - 0.457308,
+ (GLfloat) 0.665328, (GLfloat) - 0.320446, (GLfloat) - 0.479582,
+ (GLfloat) 0.680503, (GLfloat) - 0.333063, (GLfloat) - 0.498464,
+ (GLfloat) 0.703212, (GLfloat) - 0.341493, (GLfloat) - 0.511081,
+ (GLfloat) 0.730000, (GLfloat) - 0.344454, (GLfloat) - 0.515511,
+ (GLfloat) 0.756788, (GLfloat) - 0.235225, (GLfloat) - 0.567882,
+ (GLfloat) 0.779498, (GLfloat) - 0.229418, (GLfloat) - 0.553863,
+ (GLfloat) 0.794672, (GLfloat) - 0.220727, (GLfloat) - 0.532882,
+ (GLfloat) 0.800000, (GLfloat) - 0.210476, (GLfloat) - 0.508134,
+ (GLfloat) 0.794672, (GLfloat) - 0.200225, (GLfloat) - 0.483385,
+ (GLfloat) 0.779498, (GLfloat) - 0.191534, (GLfloat) - 0.462404,
+ (GLfloat) 0.756788, (GLfloat) - 0.185727, (GLfloat) - 0.448385,
+ (GLfloat) 0.730000, (GLfloat) - 0.183688, (GLfloat) - 0.443462,
+ (GLfloat) 0.703212, (GLfloat) - 0.185727, (GLfloat) - 0.448385,
+ (GLfloat) 0.680503, (GLfloat) - 0.191534, (GLfloat) - 0.462404,
+ (GLfloat) 0.665328, (GLfloat) - 0.200225, (GLfloat) - 0.483385,
+ (GLfloat) 0.660000, (GLfloat) - 0.210476, (GLfloat) - 0.508134,
+ (GLfloat) 0.665328, (GLfloat) - 0.220727, (GLfloat) - 0.532882,
+ (GLfloat) 0.680503, (GLfloat) - 0.229418, (GLfloat) - 0.553863,
+ (GLfloat) 0.703212, (GLfloat) - 0.235225, (GLfloat) - 0.567882,
+ (GLfloat) 0.730000, (GLfloat) - 0.237264, (GLfloat) - 0.572805,
+ (GLfloat) 0.756788, (GLfloat) - 0.119916, (GLfloat) - 0.602861,
+ (GLfloat) 0.779498, (GLfloat) - 0.116956, (GLfloat) - 0.587978,
+ (GLfloat) 0.794672, (GLfloat) - 0.112526, (GLfloat) - 0.565705,
+ (GLfloat) 0.800000, (GLfloat) - 0.107300, (GLfloat) - 0.539432,
+ (GLfloat) 0.794672, (GLfloat) - 0.102074, (GLfloat) - 0.513159,
+ (GLfloat) 0.779498, (GLfloat) - 0.097643, (GLfloat) - 0.490885,
+ (GLfloat) 0.756788, (GLfloat) - 0.094683, (GLfloat) - 0.476003,
+ (GLfloat) 0.730000, (GLfloat) - 0.093643, (GLfloat) - 0.470777,
+ (GLfloat) 0.703212, (GLfloat) - 0.094683, (GLfloat) - 0.476003,
+ (GLfloat) 0.680503, (GLfloat) - 0.097643, (GLfloat) - 0.490885,
+ (GLfloat) 0.665328, (GLfloat) - 0.102074, (GLfloat) - 0.513159,
+ (GLfloat) 0.660000, (GLfloat) - 0.107300, (GLfloat) - 0.539432,
+ (GLfloat) 0.665328, (GLfloat) - 0.112526, (GLfloat) - 0.565705,
+ (GLfloat) 0.680503, (GLfloat) - 0.116956, (GLfloat) - 0.587978,
+ (GLfloat) 0.703212, (GLfloat) - 0.119916, (GLfloat) - 0.602861,
+ (GLfloat) 0.730000, (GLfloat) - 0.120956, (GLfloat) - 0.608087,
+ (GLfloat) 0.756788, (GLfloat) - 0.000000, (GLfloat) - 0.614672,
+ (GLfloat) 0.779498, (GLfloat) - 0.000000, (GLfloat) - 0.599497,
+ (GLfloat) 0.794672, (GLfloat) - 0.000000, (GLfloat) - 0.576788,
+ (GLfloat) 0.800000, (GLfloat) - 0.000000, (GLfloat) - 0.550000,
+ (GLfloat) 0.794672, (GLfloat) - 0.000000, (GLfloat) - 0.523212,
+ (GLfloat) 0.779498, (GLfloat) - 0.000000, (GLfloat) - 0.500503,
+ (GLfloat) 0.756788, (GLfloat) - 0.000000, (GLfloat) - 0.485328,
+ (GLfloat) 0.730000, (GLfloat) - 0.000000, (GLfloat) - 0.480000,
+ (GLfloat) 0.703212, (GLfloat) - 0.000000, (GLfloat) - 0.485328,
+ (GLfloat) 0.680503, (GLfloat) - 0.000000, (GLfloat) - 0.500503,
+ (GLfloat) 0.665328, (GLfloat) - 0.000000, (GLfloat) - 0.523212,
+ (GLfloat) 0.660000, (GLfloat) - 0.000000, (GLfloat) - 0.550000,
+ (GLfloat) 0.665328, (GLfloat) - 0.000000, (GLfloat) - 0.576788,
+ (GLfloat) 0.680503, (GLfloat) - 0.000000, (GLfloat) - 0.599497,
+ (GLfloat) 0.703212, (GLfloat) - 0.000000, (GLfloat) - 0.614672,
+ (GLfloat) 0.730000, (GLfloat) - 0.000000, (GLfloat) - 0.620000,
+ (GLfloat) 0.756788, (GLfloat) 0.119916, (GLfloat) - 0.602861,
+ (GLfloat) 0.779498, (GLfloat) 0.116956, (GLfloat) - 0.587978,
+ (GLfloat) 0.794672, (GLfloat) 0.112526, (GLfloat) - 0.565705,
+ (GLfloat) 0.800000, (GLfloat) 0.107300, (GLfloat) - 0.539432,
+ (GLfloat) 0.794672, (GLfloat) 0.102074, (GLfloat) - 0.513159,
+ (GLfloat) 0.779498, (GLfloat) 0.097643, (GLfloat) - 0.490886,
+ (GLfloat) 0.756788, (GLfloat) 0.094683, (GLfloat) - 0.476003,
+ (GLfloat) 0.730000, (GLfloat) 0.093643, (GLfloat) - 0.470777,
+ (GLfloat) 0.703212, (GLfloat) 0.094683, (GLfloat) - 0.476003,
+ (GLfloat) 0.680503, (GLfloat) 0.097643, (GLfloat) - 0.490886,
+ (GLfloat) 0.665328, (GLfloat) 0.102074, (GLfloat) - 0.513159,
+ (GLfloat) 0.660000, (GLfloat) 0.107300, (GLfloat) - 0.539432,
+ (GLfloat) 0.665328, (GLfloat) 0.112526, (GLfloat) - 0.565705,
+ (GLfloat) 0.680503, (GLfloat) 0.116956, (GLfloat) - 0.587978,
+ (GLfloat) 0.703212, (GLfloat) 0.119916, (GLfloat) - 0.602861,
+ (GLfloat) 0.730000, (GLfloat) 0.120956, (GLfloat) - 0.608087,
+ (GLfloat) 0.756788, (GLfloat) 0.235225, (GLfloat) - 0.567882,
+ (GLfloat) 0.779498, (GLfloat) 0.229418, (GLfloat) - 0.553863,
+ (GLfloat) 0.794672, (GLfloat) 0.220727, (GLfloat) - 0.532882,
+ (GLfloat) 0.800000, (GLfloat) 0.210476, (GLfloat) - 0.508134,
+ (GLfloat) 0.794672, (GLfloat) 0.200225, (GLfloat) - 0.483385,
+ (GLfloat) 0.779498, (GLfloat) 0.191534, (GLfloat) - 0.462404,
+ (GLfloat) 0.756788, (GLfloat) 0.185727, (GLfloat) - 0.448385,
+ (GLfloat) 0.730000, (GLfloat) 0.183688, (GLfloat) - 0.443462,
+ (GLfloat) 0.703212, (GLfloat) 0.185727, (GLfloat) - 0.448385,
+ (GLfloat) 0.680503, (GLfloat) 0.191534, (GLfloat) - 0.462404,
+ (GLfloat) 0.665328, (GLfloat) 0.200225, (GLfloat) - 0.483385,
+ (GLfloat) 0.660000, (GLfloat) 0.210476, (GLfloat) - 0.508134,
+ (GLfloat) 0.665328, (GLfloat) 0.220727, (GLfloat) - 0.532882,
+ (GLfloat) 0.680503, (GLfloat) 0.229418, (GLfloat) - 0.553863,
+ (GLfloat) 0.703212, (GLfloat) 0.235225, (GLfloat) - 0.567882,
+ (GLfloat) 0.730000, (GLfloat) 0.237264, (GLfloat) - 0.572805,
+ (GLfloat) 0.756788, (GLfloat) 0.341493, (GLfloat) - 0.511081,
+ (GLfloat) 0.779498, (GLfloat) 0.333063, (GLfloat) - 0.498464,
+ (GLfloat) 0.794672, (GLfloat) 0.320446, (GLfloat) - 0.479582,
+ (GLfloat) 0.800000, (GLfloat) 0.305564, (GLfloat) - 0.457308,
+ (GLfloat) 0.794672, (GLfloat) 0.290681, (GLfloat) - 0.435035,
+ (GLfloat) 0.779498, (GLfloat) 0.278064, (GLfloat) - 0.416153,
+ (GLfloat) 0.756788, (GLfloat) 0.269634, (GLfloat) - 0.403536,
+ (GLfloat) 0.730000, (GLfloat) 0.266674, (GLfloat) - 0.399105,
+ (GLfloat) 0.703212, (GLfloat) 0.269634, (GLfloat) - 0.403536,
+ (GLfloat) 0.680503, (GLfloat) 0.278064, (GLfloat) - 0.416153,
+ (GLfloat) 0.665328, (GLfloat) 0.290681, (GLfloat) - 0.435035,
+ (GLfloat) 0.660000, (GLfloat) 0.305564, (GLfloat) - 0.457308,
+ (GLfloat) 0.665328, (GLfloat) 0.320446, (GLfloat) - 0.479582,
+ (GLfloat) 0.680503, (GLfloat) 0.333063, (GLfloat) - 0.498464,
+ (GLfloat) 0.703212, (GLfloat) 0.341493, (GLfloat) - 0.511081,
+ (GLfloat) 0.730000, (GLfloat) 0.344454, (GLfloat) - 0.515511,
+ (GLfloat) 0.756788, (GLfloat) 0.434638, (GLfloat) - 0.434638,
+ (GLfloat) 0.779498, (GLfloat) 0.423909, (GLfloat) - 0.423909,
+ (GLfloat) 0.794672, (GLfloat) 0.407851, (GLfloat) - 0.407851,
+ (GLfloat) 0.800000, (GLfloat) 0.388909, (GLfloat) - 0.388909,
+ (GLfloat) 0.794672, (GLfloat) 0.369967, (GLfloat) - 0.369967,
+ (GLfloat) 0.779498, (GLfloat) 0.353909, (GLfloat) - 0.353909,
+ (GLfloat) 0.756788, (GLfloat) 0.343179, (GLfloat) - 0.343179,
+ (GLfloat) 0.730000, (GLfloat) 0.339411, (GLfloat) - 0.339411,
+ (GLfloat) 0.703212, (GLfloat) 0.343179, (GLfloat) - 0.343179,
+ (GLfloat) 0.680503, (GLfloat) 0.353909, (GLfloat) - 0.353909,
+ (GLfloat) 0.665328, (GLfloat) 0.369967, (GLfloat) - 0.369967,
+ (GLfloat) 0.660000, (GLfloat) 0.388909, (GLfloat) - 0.388909,
+ (GLfloat) 0.665328, (GLfloat) 0.407851, (GLfloat) - 0.407851,
+ (GLfloat) 0.680503, (GLfloat) 0.423909, (GLfloat) - 0.423909,
+ (GLfloat) 0.703212, (GLfloat) 0.434638, (GLfloat) - 0.434638,
+ (GLfloat) 0.730000, (GLfloat) 0.438406, (GLfloat) - 0.438406,
+ (GLfloat) 0.756788, (GLfloat) 0.511081, (GLfloat) - 0.341493,
+ (GLfloat) 0.779498, (GLfloat) 0.498464, (GLfloat) - 0.333063,
+ (GLfloat) 0.794672, (GLfloat) 0.479582, (GLfloat) - 0.320446,
+ (GLfloat) 0.800000, (GLfloat) 0.457308, (GLfloat) - 0.305564,
+ (GLfloat) 0.794672, (GLfloat) 0.435035, (GLfloat) - 0.290681,
+ (GLfloat) 0.779498, (GLfloat) 0.416153, (GLfloat) - 0.278064,
+ (GLfloat) 0.756788, (GLfloat) 0.403536, (GLfloat) - 0.269634,
+ (GLfloat) 0.730000, (GLfloat) 0.399105, (GLfloat) - 0.266674,
+ (GLfloat) 0.703212, (GLfloat) 0.403536, (GLfloat) - 0.269634,
+ (GLfloat) 0.680503, (GLfloat) 0.416153, (GLfloat) - 0.278064,
+ (GLfloat) 0.665328, (GLfloat) 0.435035, (GLfloat) - 0.290681,
+ (GLfloat) 0.660000, (GLfloat) 0.457308, (GLfloat) - 0.305564,
+ (GLfloat) 0.665328, (GLfloat) 0.479582, (GLfloat) - 0.320446,
+ (GLfloat) 0.680503, (GLfloat) 0.498464, (GLfloat) - 0.333063,
+ (GLfloat) 0.703212, (GLfloat) 0.511081, (GLfloat) - 0.341493,
+ (GLfloat) 0.730000, (GLfloat) 0.515511, (GLfloat) - 0.344454,
+ (GLfloat) 0.756788, (GLfloat) 0.567882, (GLfloat) - 0.235225,
+ (GLfloat) 0.779498, (GLfloat) 0.553863, (GLfloat) - 0.229418,
+ (GLfloat) 0.794672, (GLfloat) 0.532882, (GLfloat) - 0.220727,
+ (GLfloat) 0.800000, (GLfloat) 0.508134, (GLfloat) - 0.210476,
+ (GLfloat) 0.794672, (GLfloat) 0.483385, (GLfloat) - 0.200225,
+ (GLfloat) 0.779498, (GLfloat) 0.462404, (GLfloat) - 0.191534,
+ (GLfloat) 0.756788, (GLfloat) 0.448385, (GLfloat) - 0.185727,
+ (GLfloat) 0.730000, (GLfloat) 0.443462, (GLfloat) - 0.183688,
+ (GLfloat) 0.703212, (GLfloat) 0.448385, (GLfloat) - 0.185727,
+ (GLfloat) 0.680503, (GLfloat) 0.462404, (GLfloat) - 0.191534,
+ (GLfloat) 0.665328, (GLfloat) 0.483385, (GLfloat) - 0.200225,
+ (GLfloat) 0.660000, (GLfloat) 0.508134, (GLfloat) - 0.210476,
+ (GLfloat) 0.665328, (GLfloat) 0.532882, (GLfloat) - 0.220727,
+ (GLfloat) 0.680503, (GLfloat) 0.553863, (GLfloat) - 0.229418,
+ (GLfloat) 0.703212, (GLfloat) 0.567882, (GLfloat) - 0.235225,
+ (GLfloat) 0.730000, (GLfloat) 0.572805, (GLfloat) - 0.237264,
+ (GLfloat) 0.756788, (GLfloat) 0.602861, (GLfloat) - 0.119916,
+ (GLfloat) 0.779498, (GLfloat) 0.587978, (GLfloat) - 0.116956,
+ (GLfloat) 0.794672, (GLfloat) 0.565705, (GLfloat) - 0.112526,
+ (GLfloat) 0.800000, (GLfloat) 0.539432, (GLfloat) - 0.107300,
+ (GLfloat) 0.794672, (GLfloat) 0.513159, (GLfloat) - 0.102074,
+ (GLfloat) 0.779498, (GLfloat) 0.490885, (GLfloat) - 0.097643,
+ (GLfloat) 0.756788, (GLfloat) 0.476003, (GLfloat) - 0.094683,
+ (GLfloat) 0.730000, (GLfloat) 0.470777, (GLfloat) - 0.093643,
+ (GLfloat) 0.703212, (GLfloat) 0.476003, (GLfloat) - 0.094683,
+ (GLfloat) 0.680503, (GLfloat) 0.490885, (GLfloat) - 0.097643,
+ (GLfloat) 0.665328, (GLfloat) 0.513159, (GLfloat) - 0.102074,
+ (GLfloat) 0.660000, (GLfloat) 0.539432, (GLfloat) - 0.107300,
+ (GLfloat) 0.665328, (GLfloat) 0.565705, (GLfloat) - 0.112526,
+ (GLfloat) 0.680503, (GLfloat) 0.587978, (GLfloat) - 0.116956,
+ (GLfloat) 0.703212, (GLfloat) 0.602861, (GLfloat) - 0.119916,
+ (GLfloat) 0.730000, (GLfloat) 0.608087, (GLfloat) - 0.120956,
+ (GLfloat) 0.420000, (GLfloat) - 0.000000, (GLfloat) - 0.200000,
+ (GLfloat) 0.420000, (GLfloat) 0.051764, (GLfloat) - 0.193185,
+ (GLfloat) 0.420000, (GLfloat) 0.100000, (GLfloat) - 0.173205,
+ (GLfloat) 0.420000, (GLfloat) 0.141421, (GLfloat) - 0.141421,
+ (GLfloat) 0.420000, (GLfloat) 0.173205, (GLfloat) - 0.100000,
+ (GLfloat) 0.420000, (GLfloat) 0.193185, (GLfloat) - 0.051764,
+ (GLfloat) 0.420000, (GLfloat) 0.200000, (GLfloat) - 0.000000,
+ (GLfloat) 0.420000, (GLfloat) 0.193185, (GLfloat) 0.051764,
+ (GLfloat) 0.420000, (GLfloat) 0.173205, (GLfloat) 0.100000,
+ (GLfloat) 0.420000, (GLfloat) 0.141421, (GLfloat) 0.141421,
+ (GLfloat) 0.420000, (GLfloat) 0.100000, (GLfloat) 0.173205,
+ (GLfloat) 0.420000, (GLfloat) 0.051764, (GLfloat) 0.193185,
+ (GLfloat) 0.420000, (GLfloat) 0.000000, (GLfloat) 0.200000,
+ (GLfloat) 0.420000, (GLfloat) - 0.051764, (GLfloat) 0.193185,
+ (GLfloat) 0.420000, (GLfloat) - 0.100000, (GLfloat) 0.173205,
+ (GLfloat) 0.420000, (GLfloat) - 0.141421, (GLfloat) 0.141421,
+ (GLfloat) 0.420000, (GLfloat) - 0.173205, (GLfloat) 0.100000,
+ (GLfloat) 0.420000, (GLfloat) - 0.193185, (GLfloat) 0.051764,
+ (GLfloat) 0.420000, (GLfloat) - 0.200000, (GLfloat) 0.000000,
+ (GLfloat) 0.420000, (GLfloat) - 0.193185, (GLfloat) - 0.051764,
+ (GLfloat) 0.420000, (GLfloat) - 0.173205, (GLfloat) - 0.100000,
+ (GLfloat) 0.420000, (GLfloat) - 0.141421, (GLfloat) - 0.141421,
+ (GLfloat) 0.420000, (GLfloat) - 0.100000, (GLfloat) - 0.173205,
+ (GLfloat) 0.420000, (GLfloat) - 0.051764, (GLfloat) - 0.193185,
+ (GLfloat) 0.540000, (GLfloat) - 0.000000, (GLfloat) - 0.200000,
+ (GLfloat) 0.540000, (GLfloat) 0.051764, (GLfloat) - 0.193185,
+ (GLfloat) 0.540000, (GLfloat) 0.100000, (GLfloat) - 0.173205,
+ (GLfloat) 0.540000, (GLfloat) 0.141421, (GLfloat) - 0.141421,
+ (GLfloat) 0.540000, (GLfloat) 0.173205, (GLfloat) - 0.100000,
+ (GLfloat) 0.540000, (GLfloat) 0.193185, (GLfloat) - 0.051764,
+ (GLfloat) 0.540000, (GLfloat) 0.200000, (GLfloat) - 0.000000,
+ (GLfloat) 0.540000, (GLfloat) 0.193185, (GLfloat) 0.051764,
+ (GLfloat) 0.540000, (GLfloat) 0.173205, (GLfloat) 0.100000,
+ (GLfloat) 0.540000, (GLfloat) 0.141421, (GLfloat) 0.141421,
+ (GLfloat) 0.540000, (GLfloat) 0.100000, (GLfloat) 0.173205,
+ (GLfloat) 0.540000, (GLfloat) 0.051764, (GLfloat) 0.193185,
+ (GLfloat) 0.540000, (GLfloat) 0.000000, (GLfloat) 0.200000,
+ (GLfloat) 0.540000, (GLfloat) - 0.051764, (GLfloat) 0.193185,
+ (GLfloat) 0.540000, (GLfloat) - 0.100000, (GLfloat) 0.173205,
+ (GLfloat) 0.540000, (GLfloat) - 0.141421, (GLfloat) 0.141421,
+ (GLfloat) 0.540000, (GLfloat) - 0.173205, (GLfloat) 0.100000,
+ (GLfloat) 0.540000, (GLfloat) - 0.193185, (GLfloat) 0.051764,
+ (GLfloat) 0.540000, (GLfloat) - 0.200000, (GLfloat) 0.000000,
+ (GLfloat) 0.540000, (GLfloat) - 0.193185, (GLfloat) - 0.051764,
+ (GLfloat) 0.540000, (GLfloat) - 0.173205, (GLfloat) - 0.100000,
+ (GLfloat) 0.540000, (GLfloat) - 0.141421, (GLfloat) - 0.141421,
+ (GLfloat) 0.540000, (GLfloat) - 0.100000, (GLfloat) - 0.173205,
+ (GLfloat) 0.540000, (GLfloat) - 0.051764, (GLfloat) - 0.193185,
+ (GLfloat) 0.790000, (GLfloat) 0.060000, (GLfloat) - 0.000000,
+ (GLfloat) 0.785433, (GLfloat) 0.060000, (GLfloat) - 0.022961,
+ (GLfloat) 0.772426, (GLfloat) 0.060000, (GLfloat) - 0.042426,
+ (GLfloat) 0.752961, (GLfloat) 0.060000, (GLfloat) - 0.055433,
+ (GLfloat) 0.730000, (GLfloat) 0.060000, (GLfloat) - 0.060000,
+ (GLfloat) 0.707039, (GLfloat) 0.060000, (GLfloat) - 0.055433,
+ (GLfloat) 0.687574, (GLfloat) 0.060000, (GLfloat) - 0.042426,
+ (GLfloat) 0.674567, (GLfloat) 0.060000, (GLfloat) - 0.022961,
+ (GLfloat) 0.670000, (GLfloat) 0.060000, (GLfloat) - 0.000000,
+ (GLfloat) 0.674567, (GLfloat) 0.060000, (GLfloat) 0.022961,
+ (GLfloat) 0.687574, (GLfloat) 0.060000, (GLfloat) 0.042426,
+ (GLfloat) 0.707039, (GLfloat) 0.060000, (GLfloat) 0.055433,
+ (GLfloat) 0.730000, (GLfloat) 0.060000, (GLfloat) 0.060000,
+ (GLfloat) 0.752961, (GLfloat) 0.060000, (GLfloat) 0.055433,
+ (GLfloat) 0.772426, (GLfloat) 0.060000, (GLfloat) 0.042426,
+ (GLfloat) 0.785433, (GLfloat) 0.060000, (GLfloat) 0.022961,
+ (GLfloat) 0.790000, (GLfloat) 0.550000, (GLfloat) - 0.000000,
+ (GLfloat) 0.785433, (GLfloat) 0.550000, (GLfloat) - 0.022961,
+ (GLfloat) 0.772426, (GLfloat) 0.550000, (GLfloat) - 0.042426,
+ (GLfloat) 0.752961, (GLfloat) 0.550000, (GLfloat) - 0.055433,
+ (GLfloat) 0.730000, (GLfloat) 0.550000, (GLfloat) - 0.060000,
+ (GLfloat) 0.707039, (GLfloat) 0.550000, (GLfloat) - 0.055433,
+ (GLfloat) 0.687574, (GLfloat) 0.550000, (GLfloat) - 0.042426,
+ (GLfloat) 0.674567, (GLfloat) 0.550000, (GLfloat) - 0.022961,
+ (GLfloat) 0.670000, (GLfloat) 0.550000, (GLfloat) - 0.000000,
+ (GLfloat) 0.674567, (GLfloat) 0.550000, (GLfloat) 0.022961,
+ (GLfloat) 0.687574, (GLfloat) 0.550000, (GLfloat) 0.042426,
+ (GLfloat) 0.707039, (GLfloat) 0.550000, (GLfloat) 0.055433,
+ (GLfloat) 0.730000, (GLfloat) 0.550000, (GLfloat) 0.060000,
+ (GLfloat) 0.752961, (GLfloat) 0.550000, (GLfloat) 0.055433,
+ (GLfloat) 0.772426, (GLfloat) 0.550000, (GLfloat) 0.042426,
+ (GLfloat) 0.785433, (GLfloat) 0.550000, (GLfloat) 0.022961,
+ (GLfloat) 0.790000, (GLfloat) 0.000000, (GLfloat) 0.060000,
+ (GLfloat) 0.785433, (GLfloat) 0.022961, (GLfloat) 0.060000,
+ (GLfloat) 0.772426, (GLfloat) 0.042426, (GLfloat) 0.060000,
+ (GLfloat) 0.752961, (GLfloat) 0.055433, (GLfloat) 0.060000,
+ (GLfloat) 0.707039, (GLfloat) 0.055433, (GLfloat) 0.060000,
+ (GLfloat) 0.687574, (GLfloat) 0.042426, (GLfloat) 0.060000,
+ (GLfloat) 0.674567, (GLfloat) 0.022961, (GLfloat) 0.060000,
+ (GLfloat) 0.670000, (GLfloat) 0.000000, (GLfloat) 0.060000,
+ (GLfloat) 0.674567, (GLfloat) - 0.022961, (GLfloat) 0.060000,
+ (GLfloat) 0.687574, (GLfloat) - 0.042426, (GLfloat) 0.060000,
+ (GLfloat) 0.707039, (GLfloat) - 0.055433, (GLfloat) 0.060000,
+ (GLfloat) 0.730000, (GLfloat) - 0.060000, (GLfloat) 0.060000,
+ (GLfloat) 0.752961, (GLfloat) - 0.055433, (GLfloat) 0.060000,
+ (GLfloat) 0.772426, (GLfloat) - 0.042426, (GLfloat) 0.060000,
+ (GLfloat) 0.785433, (GLfloat) - 0.022961, (GLfloat) 0.060000,
+ (GLfloat) 0.790000, (GLfloat) 0.000000, (GLfloat) 0.550000,
+ (GLfloat) 0.785433, (GLfloat) 0.022961, (GLfloat) 0.550000,
+ (GLfloat) 0.772426, (GLfloat) 0.042426, (GLfloat) 0.550000,
+ (GLfloat) 0.752961, (GLfloat) 0.055433, (GLfloat) 0.550000,
+ (GLfloat) 0.730000, (GLfloat) 0.060000, (GLfloat) 0.550000,
+ (GLfloat) 0.707039, (GLfloat) 0.055433, (GLfloat) 0.550000,
+ (GLfloat) 0.687574, (GLfloat) 0.042426, (GLfloat) 0.550000,
+ (GLfloat) 0.674567, (GLfloat) 0.022961, (GLfloat) 0.550000,
+ (GLfloat) 0.670000, (GLfloat) 0.000000, (GLfloat) 0.550000,
+ (GLfloat) 0.674567, (GLfloat) - 0.022961, (GLfloat) 0.550000,
+ (GLfloat) 0.687574, (GLfloat) - 0.042426, (GLfloat) 0.550000,
+ (GLfloat) 0.707039, (GLfloat) - 0.055433, (GLfloat) 0.550000,
+ (GLfloat) 0.730000, (GLfloat) - 0.060000, (GLfloat) 0.550000,
+ (GLfloat) 0.752961, (GLfloat) - 0.055433, (GLfloat) 0.550000,
+ (GLfloat) 0.772426, (GLfloat) - 0.042426, (GLfloat) 0.550000,
+ (GLfloat) 0.785433, (GLfloat) - 0.022961, (GLfloat) 0.550000,
+ (GLfloat) 0.790000, (GLfloat) - 0.060000, (GLfloat) 0.000000,
+ (GLfloat) 0.785433, (GLfloat) - 0.060000, (GLfloat) 0.022961,
+ (GLfloat) 0.772426, (GLfloat) - 0.060000, (GLfloat) 0.042426,
+ (GLfloat) 0.752961, (GLfloat) - 0.060000, (GLfloat) 0.055433,
+ (GLfloat) 0.707039, (GLfloat) - 0.060000, (GLfloat) 0.055433,
+ (GLfloat) 0.687574, (GLfloat) - 0.060000, (GLfloat) 0.042426,
+ (GLfloat) 0.674567, (GLfloat) - 0.060000, (GLfloat) 0.022961,
+ (GLfloat) 0.670000, (GLfloat) - 0.060000, (GLfloat) 0.000000,
+ (GLfloat) 0.674567, (GLfloat) - 0.060000, (GLfloat) - 0.022961,
+ (GLfloat) 0.687574, (GLfloat) - 0.060000, (GLfloat) - 0.042426,
+ (GLfloat) 0.707039, (GLfloat) - 0.060000, (GLfloat) - 0.055433,
+ (GLfloat) 0.730000, (GLfloat) - 0.060000, (GLfloat) - 0.060000,
+ (GLfloat) 0.752961, (GLfloat) - 0.060000, (GLfloat) - 0.055433,
+ (GLfloat) 0.772426, (GLfloat) - 0.060000, (GLfloat) - 0.042426,
+ (GLfloat) 0.785433, (GLfloat) - 0.060000, (GLfloat) - 0.022961,
+ (GLfloat) 0.790000, (GLfloat) - 0.550000, (GLfloat) 0.000000,
+ (GLfloat) 0.785433, (GLfloat) - 0.550000, (GLfloat) 0.022961,
+ (GLfloat) 0.772426, (GLfloat) - 0.550000, (GLfloat) 0.042426,
+ (GLfloat) 0.752961, (GLfloat) - 0.550000, (GLfloat) 0.055433,
+ (GLfloat) 0.730000, (GLfloat) - 0.550000, (GLfloat) 0.060000,
+ (GLfloat) 0.707039, (GLfloat) - 0.550000, (GLfloat) 0.055433,
+ (GLfloat) 0.687574, (GLfloat) - 0.550000, (GLfloat) 0.042426,
+ (GLfloat) 0.674567, (GLfloat) - 0.550000, (GLfloat) 0.022961,
+ (GLfloat) 0.670000, (GLfloat) - 0.550000, (GLfloat) 0.000000,
+ (GLfloat) 0.674567, (GLfloat) - 0.550000, (GLfloat) - 0.022961,
+ (GLfloat) 0.687574, (GLfloat) - 0.550000, (GLfloat) - 0.042426,
+ (GLfloat) 0.707039, (GLfloat) - 0.550000, (GLfloat) - 0.055433,
+ (GLfloat) 0.730000, (GLfloat) - 0.550000, (GLfloat) - 0.060000,
+ (GLfloat) 0.752961, (GLfloat) - 0.550000, (GLfloat) - 0.055433,
+ (GLfloat) 0.772426, (GLfloat) - 0.550000, (GLfloat) - 0.042426,
+ (GLfloat) 0.785433, (GLfloat) - 0.550000, (GLfloat) - 0.022961,
+ (GLfloat) 0.790000, (GLfloat) - 0.000000, (GLfloat) - 0.060000,
+ (GLfloat) 0.785433, (GLfloat) - 0.022961, (GLfloat) - 0.060000,
+ (GLfloat) 0.772426, (GLfloat) - 0.042426, (GLfloat) - 0.060000,
+ (GLfloat) 0.752961, (GLfloat) - 0.055433, (GLfloat) - 0.060000,
+ (GLfloat) 0.707039, (GLfloat) - 0.055433, (GLfloat) - 0.060000,
+ (GLfloat) 0.687574, (GLfloat) - 0.042426, (GLfloat) - 0.060000,
+ (GLfloat) 0.674567, (GLfloat) - 0.022961, (GLfloat) - 0.060000,
+ (GLfloat) 0.670000, (GLfloat) - 0.000000, (GLfloat) - 0.060000,
+ (GLfloat) 0.674567, (GLfloat) 0.022961, (GLfloat) - 0.060000,
+ (GLfloat) 0.687574, (GLfloat) 0.042426, (GLfloat) - 0.060000,
+ (GLfloat) 0.707039, (GLfloat) 0.055433, (GLfloat) - 0.060000,
+ (GLfloat) 0.752961, (GLfloat) 0.055433, (GLfloat) - 0.060000,
+ (GLfloat) 0.772426, (GLfloat) 0.042426, (GLfloat) - 0.060000,
+ (GLfloat) 0.785433, (GLfloat) 0.022961, (GLfloat) - 0.060000,
+ (GLfloat) 0.790000, (GLfloat) - 0.000000, (GLfloat) - 0.550000,
+ (GLfloat) 0.785433, (GLfloat) - 0.022961, (GLfloat) - 0.550000,
+ (GLfloat) 0.772426, (GLfloat) - 0.042426, (GLfloat) - 0.550000,
+ (GLfloat) 0.752961, (GLfloat) - 0.055433, (GLfloat) - 0.550000,
+ (GLfloat) 0.730000, (GLfloat) - 0.060000, (GLfloat) - 0.550000,
+ (GLfloat) 0.707039, (GLfloat) - 0.055433, (GLfloat) - 0.550000,
+ (GLfloat) 0.687574, (GLfloat) - 0.042426, (GLfloat) - 0.550000,
+ (GLfloat) 0.674567, (GLfloat) - 0.022961, (GLfloat) - 0.550000,
+ (GLfloat) 0.670000, (GLfloat) - 0.000000, (GLfloat) - 0.550000,
+ (GLfloat) 0.674567, (GLfloat) 0.022961, (GLfloat) - 0.550000,
+ (GLfloat) 0.687574, (GLfloat) 0.042426, (GLfloat) - 0.550000,
+ (GLfloat) 0.707039, (GLfloat) 0.055433, (GLfloat) - 0.550000,
+ (GLfloat) 0.730000, (GLfloat) 0.060000, (GLfloat) - 0.550000,
+ (GLfloat) 0.752961, (GLfloat) 0.055433, (GLfloat) - 0.550000,
+ (GLfloat) 0.772426, (GLfloat) 0.042426, (GLfloat) - 0.550000,
+ (GLfloat) 0.785433, (GLfloat) 0.022961, (GLfloat) - 0.550000,
+ (GLfloat) 0.540000, (GLfloat) 0.000000, (GLfloat) - 0.100000,
+ (GLfloat) 0.540000, (GLfloat) 0.038268, (GLfloat) - 0.092388,
+ (GLfloat) 0.540000, (GLfloat) 0.070711, (GLfloat) - 0.070711,
+ (GLfloat) 0.540000, (GLfloat) 0.092388, (GLfloat) - 0.038268,
+ (GLfloat) 0.540000, (GLfloat) 0.100000, (GLfloat) - 0.000000,
+ (GLfloat) 0.540000, (GLfloat) 0.092388, (GLfloat) 0.038268,
+ (GLfloat) 0.540000, (GLfloat) 0.070711, (GLfloat) 0.070711,
+ (GLfloat) 0.540000, (GLfloat) 0.038268, (GLfloat) 0.092388,
+ (GLfloat) 0.540000, (GLfloat) 0.000000, (GLfloat) 0.100000,
+ (GLfloat) 0.540000, (GLfloat) - 0.038268, (GLfloat) 0.092388,
+ (GLfloat) 0.540000, (GLfloat) - 0.070711, (GLfloat) 0.070711,
+ (GLfloat) 0.540000, (GLfloat) - 0.092388, (GLfloat) 0.038268,
+ (GLfloat) 0.540000, (GLfloat) - 0.100000, (GLfloat) 0.000000,
+ (GLfloat) 0.540000, (GLfloat) - 0.092388, (GLfloat) - 0.038268,
+ (GLfloat) 0.540000, (GLfloat) - 0.070711, (GLfloat) - 0.070711,
+ (GLfloat) 0.540000, (GLfloat) - 0.038268, (GLfloat) - 0.092388,
+ (GLfloat) 0.800000, (GLfloat) 0.000000, (GLfloat) - 0.100000,
+ (GLfloat) 0.800000, (GLfloat) 0.038268, (GLfloat) - 0.092388,
+ (GLfloat) 0.800000, (GLfloat) 0.070711, (GLfloat) - 0.070711,
+ (GLfloat) 0.800000, (GLfloat) 0.092388, (GLfloat) - 0.038268,
+ (GLfloat) 0.800000, (GLfloat) 0.100000, (GLfloat) - 0.000000,
+ (GLfloat) 0.800000, (GLfloat) 0.092388, (GLfloat) 0.038268,
+ (GLfloat) 0.800000, (GLfloat) 0.070711, (GLfloat) 0.070711,
+ (GLfloat) 0.800000, (GLfloat) 0.038268, (GLfloat) 0.092388,
+ (GLfloat) 0.800000, (GLfloat) 0.000000, (GLfloat) 0.100000,
+ (GLfloat) 0.800000, (GLfloat) - 0.038268, (GLfloat) 0.092388,
+ (GLfloat) 0.800000, (GLfloat) - 0.070711, (GLfloat) 0.070711,
+ (GLfloat) 0.800000, (GLfloat) - 0.092388, (GLfloat) 0.038268,
+ (GLfloat) 0.800000, (GLfloat) - 0.100000, (GLfloat) 0.000000,
+ (GLfloat) 0.800000, (GLfloat) - 0.092388, (GLfloat) - 0.038268,
+ (GLfloat) 0.800000, (GLfloat) - 0.070711, (GLfloat) - 0.070711,
+ (GLfloat) 0.800000, (GLfloat) - 0.038268, (GLfloat) - 0.092388,
+};
+
+GLfloat BigValve_normals[] =
+{
+ (GLfloat) - 1.000000, (GLfloat) 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.195090, (GLfloat) - 0.980785,
+ (GLfloat) - 0.000000, (GLfloat) 0.555570, (GLfloat) - 0.831470,
+ (GLfloat) - 0.000000, (GLfloat) 0.831470, (GLfloat) - 0.555570,
+ (GLfloat) - 0.000000, (GLfloat) 0.980785, (GLfloat) - 0.195090,
+ (GLfloat) - 0.000000, (GLfloat) 0.980785, (GLfloat) 0.195090,
+ (GLfloat) - 0.000000, (GLfloat) 0.831470, (GLfloat) 0.555570,
+ (GLfloat) - 0.000000, (GLfloat) 0.555570, (GLfloat) 0.831470,
+ (GLfloat) - 0.000000, (GLfloat) 0.195090, (GLfloat) 0.980785,
+ (GLfloat) - 0.000000, (GLfloat) - 0.195090, (GLfloat) 0.980785,
+ (GLfloat) - 0.000000, (GLfloat) - 0.555570, (GLfloat) 0.831470,
+ (GLfloat) - 0.000000, (GLfloat) - 0.831470, (GLfloat) 0.555570,
+ (GLfloat) - 0.000000, (GLfloat) - 0.980785, (GLfloat) 0.195090,
+ (GLfloat) 0.000000, (GLfloat) - 0.980785, (GLfloat) - 0.195090,
+ (GLfloat) 0.000000, (GLfloat) - 0.831470, (GLfloat) - 0.555570,
+ (GLfloat) 0.000000, (GLfloat) - 0.555570, (GLfloat) - 0.831470,
+ (GLfloat) 0.000000, (GLfloat) - 0.195090, (GLfloat) - 0.980785,
+ (GLfloat) 1.000000, (GLfloat) 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) 0.980785, (GLfloat) - 0.195092, (GLfloat) - 0.000000,
+ (GLfloat) 0.831470, (GLfloat) - 0.555569, (GLfloat) - 0.000000,
+ (GLfloat) 0.555569, (GLfloat) - 0.831470, (GLfloat) - 0.000000,
+ (GLfloat) 0.195091, (GLfloat) - 0.980785, (GLfloat) - 0.000000,
+ (GLfloat) - 0.195090, (GLfloat) - 0.980785, (GLfloat) - 0.000000,
+ (GLfloat) - 0.555570, (GLfloat) - 0.831469, (GLfloat) - 0.000000,
+ (GLfloat) - 0.831469, (GLfloat) - 0.555571, (GLfloat) - 0.000000,
+ (GLfloat) - 0.980785, (GLfloat) - 0.195089, (GLfloat) 0.000000,
+ (GLfloat) - 0.980785, (GLfloat) 0.195089, (GLfloat) - 0.000000,
+ (GLfloat) - 0.831469, (GLfloat) 0.555571, (GLfloat) - 0.000000,
+ (GLfloat) - 0.555570, (GLfloat) 0.831469, (GLfloat) - 0.000000,
+ (GLfloat) - 0.195090, (GLfloat) 0.980785, (GLfloat) - 0.000000,
+ (GLfloat) 0.195091, (GLfloat) 0.980785, (GLfloat) 0.000000,
+ (GLfloat) 0.555569, (GLfloat) 0.831470, (GLfloat) 0.000000,
+ (GLfloat) 0.831470, (GLfloat) 0.555569, (GLfloat) 0.000000,
+ (GLfloat) 0.980785, (GLfloat) 0.195092, (GLfloat) - 0.000000,
+ (GLfloat) 0.980785, (GLfloat) 0.000000, (GLfloat) 0.195092,
+ (GLfloat) 0.831470, (GLfloat) 0.000000, (GLfloat) 0.555569,
+ (GLfloat) 0.555569, (GLfloat) 0.000000, (GLfloat) 0.831470,
+ (GLfloat) 0.195091, (GLfloat) 0.000000, (GLfloat) 0.980785,
+ (GLfloat) - 0.195090, (GLfloat) 0.000000, (GLfloat) 0.980785,
+ (GLfloat) - 0.555570, (GLfloat) 0.000000, (GLfloat) 0.831469,
+ (GLfloat) - 0.831469, (GLfloat) 0.000000, (GLfloat) 0.555571,
+ (GLfloat) - 0.980785, (GLfloat) 0.000000, (GLfloat) 0.195089,
+ (GLfloat) - 0.980785, (GLfloat) - 0.000000, (GLfloat) - 0.195089,
+ (GLfloat) - 0.831469, (GLfloat) - 0.000000, (GLfloat) - 0.555571,
+ (GLfloat) - 0.555570, (GLfloat) - 0.000000, (GLfloat) - 0.831469,
+ (GLfloat) - 0.195090, (GLfloat) - 0.000000, (GLfloat) - 0.980785,
+ (GLfloat) 0.195091, (GLfloat) 0.000000, (GLfloat) - 0.980785,
+ (GLfloat) 0.555569, (GLfloat) 0.000000, (GLfloat) - 0.831470,
+ (GLfloat) 0.831470, (GLfloat) 0.000000, (GLfloat) - 0.555569,
+ (GLfloat) 0.980785, (GLfloat) - 0.000000, (GLfloat) - 0.195092,
+ (GLfloat) 0.980785, (GLfloat) 0.195092, (GLfloat) - 0.000000,
+ (GLfloat) 0.831470, (GLfloat) 0.555569, (GLfloat) - 0.000000,
+ (GLfloat) 0.555569, (GLfloat) 0.831470, (GLfloat) - 0.000000,
+ (GLfloat) 0.195091, (GLfloat) 0.980785, (GLfloat) - 0.000000,
+ (GLfloat) - 0.195090, (GLfloat) 0.980785, (GLfloat) - 0.000000,
+ (GLfloat) - 0.555570, (GLfloat) 0.831469, (GLfloat) - 0.000000,
+ (GLfloat) - 0.831469, (GLfloat) 0.555571, (GLfloat) - 0.000000,
+ (GLfloat) - 0.980785, (GLfloat) 0.195089, (GLfloat) - 0.000000,
+ (GLfloat) - 0.980785, (GLfloat) - 0.195089, (GLfloat) 0.000000,
+ (GLfloat) - 0.831469, (GLfloat) - 0.555571, (GLfloat) 0.000000,
+ (GLfloat) - 0.555570, (GLfloat) - 0.831469, (GLfloat) 0.000000,
+ (GLfloat) - 0.195090, (GLfloat) - 0.980785, (GLfloat) 0.000000,
+ (GLfloat) 0.195091, (GLfloat) - 0.980785, (GLfloat) - 0.000000,
+ (GLfloat) 0.555569, (GLfloat) - 0.831470, (GLfloat) - 0.000000,
+ (GLfloat) 0.831470, (GLfloat) - 0.555569, (GLfloat) - 0.000000,
+ (GLfloat) 0.980785, (GLfloat) - 0.195092, (GLfloat) 0.000000,
+ (GLfloat) 0.980785, (GLfloat) 0.000000, (GLfloat) - 0.195092,
+ (GLfloat) 0.831470, (GLfloat) 0.000000, (GLfloat) - 0.555569,
+ (GLfloat) 0.555569, (GLfloat) 0.000000, (GLfloat) - 0.831470,
+ (GLfloat) 0.195091, (GLfloat) 0.000000, (GLfloat) - 0.980785,
+ (GLfloat) - 0.195090, (GLfloat) 0.000000, (GLfloat) - 0.980785,
+ (GLfloat) - 0.555570, (GLfloat) 0.000000, (GLfloat) - 0.831469,
+ (GLfloat) - 0.831469, (GLfloat) 0.000000, (GLfloat) - 0.555571,
+ (GLfloat) - 0.980785, (GLfloat) 0.000000, (GLfloat) - 0.195089,
+ (GLfloat) - 0.980785, (GLfloat) 0.000000, (GLfloat) 0.195089,
+ (GLfloat) - 0.831469, (GLfloat) 0.000000, (GLfloat) 0.555571,
+ (GLfloat) - 0.555570, (GLfloat) 0.000000, (GLfloat) 0.831469,
+ (GLfloat) - 0.195090, (GLfloat) 0.000000, (GLfloat) 0.980785,
+ (GLfloat) 0.195091, (GLfloat) - 0.000000, (GLfloat) 0.980785,
+ (GLfloat) 0.555569, (GLfloat) - 0.000000, (GLfloat) 0.831470,
+ (GLfloat) 0.831470, (GLfloat) - 0.000000, (GLfloat) 0.555569,
+ (GLfloat) 0.980785, (GLfloat) - 0.000000, (GLfloat) 0.195092,
+ (GLfloat) - 1.000000, (GLfloat) 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.130526, (GLfloat) - 0.991445,
+ (GLfloat) - 0.000000, (GLfloat) 0.382684, (GLfloat) - 0.923880,
+ (GLfloat) - 0.000000, (GLfloat) 0.608761, (GLfloat) - 0.793353,
+ (GLfloat) - 0.000000, (GLfloat) 0.793353, (GLfloat) - 0.608761,
+ (GLfloat) - 0.000000, (GLfloat) 0.923880, (GLfloat) - 0.382684,
+ (GLfloat) - 0.000000, (GLfloat) 0.991445, (GLfloat) - 0.130526,
+ (GLfloat) - 0.000000, (GLfloat) 0.991445, (GLfloat) 0.130526,
+ (GLfloat) - 0.000000, (GLfloat) 0.923880, (GLfloat) 0.382684,
+ (GLfloat) - 0.000000, (GLfloat) 0.793353, (GLfloat) 0.608761,
+ (GLfloat) - 0.000000, (GLfloat) 0.608761, (GLfloat) 0.793353,
+ (GLfloat) - 0.000000, (GLfloat) 0.382684, (GLfloat) 0.923880,
+ (GLfloat) - 0.000000, (GLfloat) 0.130526, (GLfloat) 0.991445,
+ (GLfloat) - 0.000000, (GLfloat) - 0.130526, (GLfloat) 0.991445,
+ (GLfloat) - 0.000000, (GLfloat) - 0.382684, (GLfloat) 0.923880,
+ (GLfloat) - 0.000000, (GLfloat) - 0.608761, (GLfloat) 0.793353,
+ (GLfloat) - 0.000000, (GLfloat) - 0.793353, (GLfloat) 0.608761,
+ (GLfloat) - 0.000000, (GLfloat) - 0.923880, (GLfloat) 0.382684,
+ (GLfloat) - 0.000000, (GLfloat) - 0.991445, (GLfloat) 0.130526,
+ (GLfloat) 0.000000, (GLfloat) - 0.991445, (GLfloat) - 0.130526,
+ (GLfloat) 0.000000, (GLfloat) - 0.923880, (GLfloat) - 0.382684,
+ (GLfloat) 0.000000, (GLfloat) - 0.793353, (GLfloat) - 0.608761,
+ (GLfloat) 0.000000, (GLfloat) - 0.608761, (GLfloat) - 0.793353,
+ (GLfloat) 0.000000, (GLfloat) - 0.382684, (GLfloat) - 0.923880,
+ (GLfloat) 0.000000, (GLfloat) - 0.130526, (GLfloat) - 0.991445,
+ (GLfloat) 1.000000, (GLfloat) 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) 0.194185, (GLfloat) 0.976241, (GLfloat) 0.096151,
+ (GLfloat) - 0.194185, (GLfloat) 0.976241, (GLfloat) 0.096151,
+ (GLfloat) - 0.553718, (GLfloat) 0.828695, (GLfloat) 0.081619,
+ (GLfloat) - 0.830228, (GLfloat) 0.554740, (GLfloat) 0.054637,
+ (GLfloat) - 0.980604, (GLfloat) 0.195054, (GLfloat) 0.019211,
+ (GLfloat) - 0.980605, (GLfloat) - 0.195053, (GLfloat) - 0.019211,
+ (GLfloat) - 0.830227, (GLfloat) - 0.554741, (GLfloat) - 0.054637,
+ (GLfloat) - 0.553717, (GLfloat) - 0.828695, (GLfloat) - 0.081619,
+ (GLfloat) - 0.194187, (GLfloat) - 0.976241, (GLfloat) - 0.096151,
+ (GLfloat) 0.194188, (GLfloat) - 0.976241, (GLfloat) - 0.096151,
+ (GLfloat) 0.553716, (GLfloat) - 0.828696, (GLfloat) - 0.081619,
+ (GLfloat) 0.830227, (GLfloat) - 0.554741, (GLfloat) - 0.054637,
+ (GLfloat) 0.980604, (GLfloat) - 0.195053, (GLfloat) - 0.019211,
+ (GLfloat) 0.980604, (GLfloat) 0.195054, (GLfloat) 0.019211,
+ (GLfloat) 0.830228, (GLfloat) 0.554740, (GLfloat) 0.054637,
+ (GLfloat) 0.553717, (GLfloat) 0.828695, (GLfloat) 0.081619,
+ (GLfloat) 0.194186, (GLfloat) 0.938725, (GLfloat) 0.284759,
+ (GLfloat) - 0.194185, (GLfloat) 0.938725, (GLfloat) 0.284759,
+ (GLfloat) - 0.553717, (GLfloat) 0.796849, (GLfloat) 0.241721,
+ (GLfloat) - 0.830228, (GLfloat) 0.533421, (GLfloat) 0.161812,
+ (GLfloat) - 0.980604, (GLfloat) 0.187558, (GLfloat) 0.056895,
+ (GLfloat) - 0.980604, (GLfloat) - 0.187558, (GLfloat) - 0.056895,
+ (GLfloat) - 0.830227, (GLfloat) - 0.533422, (GLfloat) - 0.161812,
+ (GLfloat) - 0.553717, (GLfloat) - 0.796849, (GLfloat) - 0.241722,
+ (GLfloat) - 0.194186, (GLfloat) - 0.938725, (GLfloat) - 0.284759,
+ (GLfloat) 0.194187, (GLfloat) - 0.938724, (GLfloat) - 0.284759,
+ (GLfloat) 0.553716, (GLfloat) - 0.796849, (GLfloat) - 0.241722,
+ (GLfloat) 0.830227, (GLfloat) - 0.533422, (GLfloat) - 0.161812,
+ (GLfloat) 0.980604, (GLfloat) - 0.187558, (GLfloat) - 0.056895,
+ (GLfloat) 0.980604, (GLfloat) 0.187558, (GLfloat) 0.056895,
+ (GLfloat) 0.830228, (GLfloat) 0.533421, (GLfloat) 0.161811,
+ (GLfloat) 0.553716, (GLfloat) 0.796850, (GLfloat) 0.241722,
+ (GLfloat) 0.194186, (GLfloat) 0.865134, (GLfloat) 0.462423,
+ (GLfloat) - 0.194185, (GLfloat) 0.865134, (GLfloat) 0.462424,
+ (GLfloat) - 0.553717, (GLfloat) 0.734380, (GLfloat) 0.392534,
+ (GLfloat) - 0.830228, (GLfloat) 0.491604, (GLfloat) 0.262768,
+ (GLfloat) - 0.980604, (GLfloat) 0.172854, (GLfloat) 0.092393,
+ (GLfloat) - 0.980604, (GLfloat) - 0.172854, (GLfloat) - 0.092393,
+ (GLfloat) - 0.830227, (GLfloat) - 0.491605, (GLfloat) - 0.262768,
+ (GLfloat) - 0.553717, (GLfloat) - 0.734380, (GLfloat) - 0.392534,
+ (GLfloat) - 0.194187, (GLfloat) - 0.865134, (GLfloat) - 0.462424,
+ (GLfloat) 0.194187, (GLfloat) - 0.865134, (GLfloat) - 0.462423,
+ (GLfloat) 0.553716, (GLfloat) - 0.734381, (GLfloat) - 0.392534,
+ (GLfloat) 0.830227, (GLfloat) - 0.491605, (GLfloat) - 0.262768,
+ (GLfloat) 0.980604, (GLfloat) - 0.172854, (GLfloat) - 0.092393,
+ (GLfloat) 0.980604, (GLfloat) 0.172854, (GLfloat) 0.092393,
+ (GLfloat) 0.830228, (GLfloat) 0.491604, (GLfloat) 0.262768,
+ (GLfloat) 0.553716, (GLfloat) 0.734381, (GLfloat) 0.392535,
+ (GLfloat) 0.194186, (GLfloat) 0.758296, (GLfloat) 0.622317,
+ (GLfloat) - 0.194186, (GLfloat) 0.758296, (GLfloat) 0.622318,
+ (GLfloat) - 0.553717, (GLfloat) 0.643690, (GLfloat) 0.528263,
+ (GLfloat) - 0.830228, (GLfloat) 0.430895, (GLfloat) 0.353626,
+ (GLfloat) - 0.980604, (GLfloat) 0.151508, (GLfloat) 0.124340,
+ (GLfloat) - 0.980604, (GLfloat) - 0.151508, (GLfloat) - 0.124339,
+ (GLfloat) - 0.830227, (GLfloat) - 0.430895, (GLfloat) - 0.353627,
+ (GLfloat) - 0.553717, (GLfloat) - 0.643690, (GLfloat) - 0.528263,
+ (GLfloat) - 0.194186, (GLfloat) - 0.758296, (GLfloat) - 0.622317,
+ (GLfloat) 0.194186, (GLfloat) - 0.758296, (GLfloat) - 0.622318,
+ (GLfloat) 0.553716, (GLfloat) - 0.643690, (GLfloat) - 0.528263,
+ (GLfloat) 0.830227, (GLfloat) - 0.430895, (GLfloat) - 0.353627,
+ (GLfloat) 0.980604, (GLfloat) - 0.151508, (GLfloat) - 0.124339,
+ (GLfloat) 0.980604, (GLfloat) 0.151508, (GLfloat) 0.124340,
+ (GLfloat) 0.830228, (GLfloat) 0.430895, (GLfloat) 0.353626,
+ (GLfloat) 0.553716, (GLfloat) 0.643690, (GLfloat) 0.528263,
+ (GLfloat) 0.194186, (GLfloat) 0.622317, (GLfloat) 0.758296,
+ (GLfloat) - 0.194185, (GLfloat) 0.622318, (GLfloat) 0.758296,
+ (GLfloat) - 0.553717, (GLfloat) 0.528263, (GLfloat) 0.643690,
+ (GLfloat) - 0.830228, (GLfloat) 0.353626, (GLfloat) 0.430895,
+ (GLfloat) - 0.980604, (GLfloat) 0.124339, (GLfloat) 0.151508,
+ (GLfloat) - 0.980604, (GLfloat) - 0.124339, (GLfloat) - 0.151508,
+ (GLfloat) - 0.830227, (GLfloat) - 0.353627, (GLfloat) - 0.430895,
+ (GLfloat) - 0.553717, (GLfloat) - 0.528262, (GLfloat) - 0.643689,
+ (GLfloat) - 0.194187, (GLfloat) - 0.622317, (GLfloat) - 0.758296,
+ (GLfloat) 0.194187, (GLfloat) - 0.622317, (GLfloat) - 0.758296,
+ (GLfloat) 0.553716, (GLfloat) - 0.528263, (GLfloat) - 0.643690,
+ (GLfloat) 0.830227, (GLfloat) - 0.353627, (GLfloat) - 0.430895,
+ (GLfloat) 0.980604, (GLfloat) - 0.124339, (GLfloat) - 0.151508,
+ (GLfloat) 0.980604, (GLfloat) 0.124340, (GLfloat) 0.151508,
+ (GLfloat) 0.830228, (GLfloat) 0.353626, (GLfloat) 0.430895,
+ (GLfloat) 0.553716, (GLfloat) 0.528263, (GLfloat) 0.643690,
+ (GLfloat) 0.194186, (GLfloat) 0.462423, (GLfloat) 0.865134,
+ (GLfloat) - 0.194185, (GLfloat) 0.462424, (GLfloat) 0.865134,
+ (GLfloat) - 0.553717, (GLfloat) 0.392534, (GLfloat) 0.734380,
+ (GLfloat) - 0.830228, (GLfloat) 0.262768, (GLfloat) 0.491604,
+ (GLfloat) - 0.980604, (GLfloat) 0.092393, (GLfloat) 0.172855,
+ (GLfloat) - 0.980604, (GLfloat) - 0.092392, (GLfloat) - 0.172854,
+ (GLfloat) - 0.830227, (GLfloat) - 0.262768, (GLfloat) - 0.491605,
+ (GLfloat) - 0.553717, (GLfloat) - 0.392534, (GLfloat) - 0.734380,
+ (GLfloat) - 0.194186, (GLfloat) - 0.462424, (GLfloat) - 0.865134,
+ (GLfloat) 0.194187, (GLfloat) - 0.462423, (GLfloat) - 0.865134,
+ (GLfloat) 0.553716, (GLfloat) - 0.392535, (GLfloat) - 0.734381,
+ (GLfloat) 0.830227, (GLfloat) - 0.262768, (GLfloat) - 0.491605,
+ (GLfloat) 0.980604, (GLfloat) - 0.092392, (GLfloat) - 0.172854,
+ (GLfloat) 0.980604, (GLfloat) 0.092393, (GLfloat) 0.172855,
+ (GLfloat) 0.830228, (GLfloat) 0.262768, (GLfloat) 0.491604,
+ (GLfloat) 0.553716, (GLfloat) 0.392535, (GLfloat) 0.734381,
+ (GLfloat) 0.194185, (GLfloat) 0.284759, (GLfloat) 0.938725,
+ (GLfloat) - 0.194185, (GLfloat) 0.284759, (GLfloat) 0.938725,
+ (GLfloat) - 0.553718, (GLfloat) 0.241721, (GLfloat) 0.796848,
+ (GLfloat) - 0.830228, (GLfloat) 0.161812, (GLfloat) 0.533422,
+ (GLfloat) - 0.980604, (GLfloat) 0.056895, (GLfloat) 0.187558,
+ (GLfloat) - 0.980604, (GLfloat) - 0.056895, (GLfloat) - 0.187558,
+ (GLfloat) - 0.830227, (GLfloat) - 0.161812, (GLfloat) - 0.533423,
+ (GLfloat) - 0.553717, (GLfloat) - 0.241722, (GLfloat) - 0.796849,
+ (GLfloat) - 0.194187, (GLfloat) - 0.284759, (GLfloat) - 0.938725,
+ (GLfloat) 0.194188, (GLfloat) - 0.284759, (GLfloat) - 0.938724,
+ (GLfloat) 0.553716, (GLfloat) - 0.241722, (GLfloat) - 0.796849,
+ (GLfloat) 0.830227, (GLfloat) - 0.161812, (GLfloat) - 0.533423,
+ (GLfloat) 0.980604, (GLfloat) - 0.056895, (GLfloat) - 0.187557,
+ (GLfloat) 0.980604, (GLfloat) 0.056895, (GLfloat) 0.187558,
+ (GLfloat) 0.830228, (GLfloat) 0.161812, (GLfloat) 0.533422,
+ (GLfloat) 0.553717, (GLfloat) 0.241722, (GLfloat) 0.796849,
+ (GLfloat) 0.194186, (GLfloat) 0.096151, (GLfloat) 0.976241,
+ (GLfloat) - 0.194186, (GLfloat) 0.096151, (GLfloat) 0.976241,
+ (GLfloat) - 0.553717, (GLfloat) 0.081619, (GLfloat) 0.828695,
+ (GLfloat) - 0.830228, (GLfloat) 0.054637, (GLfloat) 0.554740,
+ (GLfloat) - 0.980604, (GLfloat) 0.019211, (GLfloat) 0.195054,
+ (GLfloat) - 0.980604, (GLfloat) - 0.019211, (GLfloat) - 0.195054,
+ (GLfloat) - 0.830227, (GLfloat) - 0.054637, (GLfloat) - 0.554741,
+ (GLfloat) - 0.553717, (GLfloat) - 0.081619, (GLfloat) - 0.828695,
+ (GLfloat) - 0.194187, (GLfloat) - 0.096151, (GLfloat) - 0.976241,
+ (GLfloat) 0.194187, (GLfloat) - 0.096151, (GLfloat) - 0.976241,
+ (GLfloat) 0.553716, (GLfloat) - 0.081619, (GLfloat) - 0.828696,
+ (GLfloat) 0.830227, (GLfloat) - 0.054637, (GLfloat) - 0.554741,
+ (GLfloat) 0.980604, (GLfloat) - 0.019211, (GLfloat) - 0.195054,
+ (GLfloat) 0.980604, (GLfloat) 0.019211, (GLfloat) 0.195054,
+ (GLfloat) 0.830228, (GLfloat) 0.054637, (GLfloat) 0.554740,
+ (GLfloat) 0.553716, (GLfloat) 0.081619, (GLfloat) 0.828696,
+ (GLfloat) 0.194185, (GLfloat) - 0.096151, (GLfloat) 0.976241,
+ (GLfloat) - 0.194185, (GLfloat) - 0.096151, (GLfloat) 0.976241,
+ (GLfloat) - 0.553718, (GLfloat) - 0.081619, (GLfloat) 0.828695,
+ (GLfloat) - 0.830228, (GLfloat) - 0.054637, (GLfloat) 0.554740,
+ (GLfloat) - 0.980604, (GLfloat) - 0.019211, (GLfloat) 0.195054,
+ (GLfloat) - 0.980605, (GLfloat) 0.019211, (GLfloat) - 0.195053,
+ (GLfloat) - 0.830227, (GLfloat) 0.054637, (GLfloat) - 0.554741,
+ (GLfloat) - 0.553717, (GLfloat) 0.081619, (GLfloat) - 0.828695,
+ (GLfloat) - 0.194187, (GLfloat) 0.096151, (GLfloat) - 0.976241,
+ (GLfloat) 0.194188, (GLfloat) 0.096151, (GLfloat) - 0.976241,
+ (GLfloat) 0.553716, (GLfloat) 0.081619, (GLfloat) - 0.828696,
+ (GLfloat) 0.830227, (GLfloat) 0.054637, (GLfloat) - 0.554741,
+ (GLfloat) 0.980604, (GLfloat) 0.019211, (GLfloat) - 0.195053,
+ (GLfloat) 0.980604, (GLfloat) - 0.019211, (GLfloat) 0.195054,
+ (GLfloat) 0.830228, (GLfloat) - 0.054637, (GLfloat) 0.554740,
+ (GLfloat) 0.553717, (GLfloat) - 0.081619, (GLfloat) 0.828695,
+ (GLfloat) 0.194186, (GLfloat) - 0.284759, (GLfloat) 0.938725,
+ (GLfloat) - 0.194185, (GLfloat) - 0.284759, (GLfloat) 0.938725,
+ (GLfloat) - 0.553717, (GLfloat) - 0.241721, (GLfloat) 0.796849,
+ (GLfloat) - 0.830228, (GLfloat) - 0.161812, (GLfloat) 0.533421,
+ (GLfloat) - 0.980604, (GLfloat) - 0.056895, (GLfloat) 0.187558,
+ (GLfloat) - 0.980604, (GLfloat) 0.056895, (GLfloat) - 0.187558,
+ (GLfloat) - 0.830227, (GLfloat) 0.161812, (GLfloat) - 0.533422,
+ (GLfloat) - 0.553717, (GLfloat) 0.241722, (GLfloat) - 0.796849,
+ (GLfloat) - 0.194186, (GLfloat) 0.284759, (GLfloat) - 0.938725,
+ (GLfloat) 0.194187, (GLfloat) 0.284759, (GLfloat) - 0.938724,
+ (GLfloat) 0.553716, (GLfloat) 0.241722, (GLfloat) - 0.796849,
+ (GLfloat) 0.830227, (GLfloat) 0.161812, (GLfloat) - 0.533422,
+ (GLfloat) 0.980604, (GLfloat) 0.056895, (GLfloat) - 0.187558,
+ (GLfloat) 0.980604, (GLfloat) - 0.056895, (GLfloat) 0.187558,
+ (GLfloat) 0.830228, (GLfloat) - 0.161811, (GLfloat) 0.533421,
+ (GLfloat) 0.553716, (GLfloat) - 0.241722, (GLfloat) 0.796850,
+ (GLfloat) 0.194186, (GLfloat) - 0.462423, (GLfloat) 0.865134,
+ (GLfloat) - 0.194185, (GLfloat) - 0.462424, (GLfloat) 0.865134,
+ (GLfloat) - 0.553717, (GLfloat) - 0.392534, (GLfloat) 0.734380,
+ (GLfloat) - 0.830228, (GLfloat) - 0.262768, (GLfloat) 0.491604,
+ (GLfloat) - 0.980604, (GLfloat) - 0.092393, (GLfloat) 0.172854,
+ (GLfloat) - 0.980604, (GLfloat) 0.092393, (GLfloat) - 0.172854,
+ (GLfloat) - 0.830227, (GLfloat) 0.262768, (GLfloat) - 0.491605,
+ (GLfloat) - 0.553717, (GLfloat) 0.392534, (GLfloat) - 0.734380,
+ (GLfloat) - 0.194187, (GLfloat) 0.462424, (GLfloat) - 0.865134,
+ (GLfloat) 0.194187, (GLfloat) 0.462423, (GLfloat) - 0.865134,
+ (GLfloat) 0.553716, (GLfloat) 0.392534, (GLfloat) - 0.734381,
+ (GLfloat) 0.830227, (GLfloat) 0.262768, (GLfloat) - 0.491605,
+ (GLfloat) 0.980604, (GLfloat) 0.092393, (GLfloat) - 0.172854,
+ (GLfloat) 0.980604, (GLfloat) - 0.092393, (GLfloat) 0.172854,
+ (GLfloat) 0.830228, (GLfloat) - 0.262768, (GLfloat) 0.491604,
+ (GLfloat) 0.553716, (GLfloat) - 0.392535, (GLfloat) 0.734381,
+ (GLfloat) 0.194186, (GLfloat) - 0.622317, (GLfloat) 0.758296,
+ (GLfloat) - 0.194186, (GLfloat) - 0.622318, (GLfloat) 0.758296,
+ (GLfloat) - 0.553717, (GLfloat) - 0.528263, (GLfloat) 0.643690,
+ (GLfloat) - 0.830228, (GLfloat) - 0.353626, (GLfloat) 0.430895,
+ (GLfloat) - 0.980604, (GLfloat) - 0.124340, (GLfloat) 0.151508,
+ (GLfloat) - 0.980604, (GLfloat) 0.124339, (GLfloat) - 0.151508,
+ (GLfloat) - 0.830227, (GLfloat) 0.353627, (GLfloat) - 0.430895,
+ (GLfloat) - 0.553717, (GLfloat) 0.528263, (GLfloat) - 0.643690,
+ (GLfloat) - 0.194186, (GLfloat) 0.622317, (GLfloat) - 0.758296,
+ (GLfloat) 0.194186, (GLfloat) 0.622318, (GLfloat) - 0.758296,
+ (GLfloat) 0.553716, (GLfloat) 0.528263, (GLfloat) - 0.643690,
+ (GLfloat) 0.830227, (GLfloat) 0.353627, (GLfloat) - 0.430895,
+ (GLfloat) 0.980604, (GLfloat) 0.124339, (GLfloat) - 0.151508,
+ (GLfloat) 0.980604, (GLfloat) - 0.124340, (GLfloat) 0.151508,
+ (GLfloat) 0.830228, (GLfloat) - 0.353626, (GLfloat) 0.430895,
+ (GLfloat) 0.553716, (GLfloat) - 0.528263, (GLfloat) 0.643690,
+ (GLfloat) 0.194186, (GLfloat) - 0.758296, (GLfloat) 0.622317,
+ (GLfloat) - 0.194185, (GLfloat) - 0.758296, (GLfloat) 0.622318,
+ (GLfloat) - 0.553717, (GLfloat) - 0.643690, (GLfloat) 0.528263,
+ (GLfloat) - 0.830228, (GLfloat) - 0.430895, (GLfloat) 0.353626,
+ (GLfloat) - 0.980604, (GLfloat) - 0.151508, (GLfloat) 0.124339,
+ (GLfloat) - 0.980604, (GLfloat) 0.151508, (GLfloat) - 0.124339,
+ (GLfloat) - 0.830227, (GLfloat) 0.430895, (GLfloat) - 0.353627,
+ (GLfloat) - 0.553717, (GLfloat) 0.643689, (GLfloat) - 0.528262,
+ (GLfloat) - 0.194187, (GLfloat) 0.758296, (GLfloat) - 0.622317,
+ (GLfloat) 0.194187, (GLfloat) 0.758296, (GLfloat) - 0.622317,
+ (GLfloat) 0.553716, (GLfloat) 0.643690, (GLfloat) - 0.528263,
+ (GLfloat) 0.830227, (GLfloat) 0.430895, (GLfloat) - 0.353627,
+ (GLfloat) 0.980604, (GLfloat) 0.151508, (GLfloat) - 0.124339,
+ (GLfloat) 0.980604, (GLfloat) - 0.151508, (GLfloat) 0.124340,
+ (GLfloat) 0.830228, (GLfloat) - 0.430895, (GLfloat) 0.353626,
+ (GLfloat) 0.553716, (GLfloat) - 0.643690, (GLfloat) 0.528263,
+ (GLfloat) 0.194186, (GLfloat) - 0.865134, (GLfloat) 0.462423,
+ (GLfloat) - 0.194185, (GLfloat) - 0.865134, (GLfloat) 0.462424,
+ (GLfloat) - 0.553717, (GLfloat) - 0.734380, (GLfloat) 0.392534,
+ (GLfloat) - 0.830228, (GLfloat) - 0.491604, (GLfloat) 0.262768,
+ (GLfloat) - 0.980604, (GLfloat) - 0.172855, (GLfloat) 0.092393,
+ (GLfloat) - 0.980604, (GLfloat) 0.172854, (GLfloat) - 0.092393,
+ (GLfloat) - 0.830227, (GLfloat) 0.491605, (GLfloat) - 0.262768,
+ (GLfloat) - 0.553717, (GLfloat) 0.734380, (GLfloat) - 0.392534,
+ (GLfloat) - 0.194186, (GLfloat) 0.865134, (GLfloat) - 0.462424,
+ (GLfloat) 0.194187, (GLfloat) 0.865134, (GLfloat) - 0.462423,
+ (GLfloat) 0.553716, (GLfloat) 0.734381, (GLfloat) - 0.392535,
+ (GLfloat) 0.830228, (GLfloat) 0.491605, (GLfloat) - 0.262768,
+ (GLfloat) 0.980604, (GLfloat) 0.172854, (GLfloat) - 0.092393,
+ (GLfloat) 0.980604, (GLfloat) - 0.172855, (GLfloat) 0.092393,
+ (GLfloat) 0.830228, (GLfloat) - 0.491604, (GLfloat) 0.262768,
+ (GLfloat) 0.553716, (GLfloat) - 0.734381, (GLfloat) 0.392535,
+ (GLfloat) 0.194185, (GLfloat) - 0.938725, (GLfloat) 0.284759,
+ (GLfloat) - 0.194185, (GLfloat) - 0.938725, (GLfloat) 0.284759,
+ (GLfloat) - 0.553718, (GLfloat) - 0.796848, (GLfloat) 0.241721,
+ (GLfloat) - 0.830228, (GLfloat) - 0.533422, (GLfloat) 0.161812,
+ (GLfloat) - 0.980604, (GLfloat) - 0.187558, (GLfloat) 0.056895,
+ (GLfloat) - 0.980605, (GLfloat) 0.187557, (GLfloat) - 0.056895,
+ (GLfloat) - 0.830227, (GLfloat) 0.533423, (GLfloat) - 0.161812,
+ (GLfloat) - 0.553717, (GLfloat) 0.796849, (GLfloat) - 0.241722,
+ (GLfloat) - 0.194187, (GLfloat) 0.938725, (GLfloat) - 0.284759,
+ (GLfloat) 0.194188, (GLfloat) 0.938724, (GLfloat) - 0.284759,
+ (GLfloat) 0.553716, (GLfloat) 0.796849, (GLfloat) - 0.241722,
+ (GLfloat) 0.830227, (GLfloat) 0.533423, (GLfloat) - 0.161812,
+ (GLfloat) 0.980604, (GLfloat) 0.187557, (GLfloat) - 0.056895,
+ (GLfloat) 0.980604, (GLfloat) - 0.187558, (GLfloat) 0.056895,
+ (GLfloat) 0.830228, (GLfloat) - 0.533422, (GLfloat) 0.161812,
+ (GLfloat) 0.553717, (GLfloat) - 0.796849, (GLfloat) 0.241722,
+ (GLfloat) 0.194186, (GLfloat) - 0.976241, (GLfloat) 0.096151,
+ (GLfloat) - 0.194186, (GLfloat) - 0.976241, (GLfloat) 0.096151,
+ (GLfloat) - 0.553717, (GLfloat) - 0.828695, (GLfloat) 0.081619,
+ (GLfloat) - 0.830228, (GLfloat) - 0.554740, (GLfloat) 0.054637,
+ (GLfloat) - 0.980604, (GLfloat) - 0.195054, (GLfloat) 0.019211,
+ (GLfloat) - 0.980604, (GLfloat) 0.195054, (GLfloat) - 0.019211,
+ (GLfloat) - 0.830227, (GLfloat) 0.554741, (GLfloat) - 0.054637,
+ (GLfloat) - 0.553717, (GLfloat) 0.828695, (GLfloat) - 0.081619,
+ (GLfloat) - 0.194187, (GLfloat) 0.976241, (GLfloat) - 0.096151,
+ (GLfloat) 0.194187, (GLfloat) 0.976241, (GLfloat) - 0.096151,
+ (GLfloat) 0.553716, (GLfloat) 0.828696, (GLfloat) - 0.081619,
+ (GLfloat) 0.830227, (GLfloat) 0.554741, (GLfloat) - 0.054637,
+ (GLfloat) 0.980604, (GLfloat) 0.195054, (GLfloat) - 0.019211,
+ (GLfloat) 0.980604, (GLfloat) - 0.195054, (GLfloat) 0.019211,
+ (GLfloat) 0.830228, (GLfloat) - 0.554740, (GLfloat) 0.054637,
+ (GLfloat) 0.553716, (GLfloat) - 0.828696, (GLfloat) 0.081619,
+ (GLfloat) 0.194185, (GLfloat) - 0.976241, (GLfloat) - 0.096151,
+ (GLfloat) - 0.194185, (GLfloat) - 0.976241, (GLfloat) - 0.096151,
+ (GLfloat) - 0.553718, (GLfloat) - 0.828695, (GLfloat) - 0.081619,
+ (GLfloat) - 0.830228, (GLfloat) - 0.554740, (GLfloat) - 0.054637,
+ (GLfloat) - 0.980604, (GLfloat) - 0.195054, (GLfloat) - 0.019211,
+ (GLfloat) - 0.980605, (GLfloat) 0.195053, (GLfloat) 0.019211,
+ (GLfloat) - 0.830227, (GLfloat) 0.554741, (GLfloat) 0.054637,
+ (GLfloat) - 0.553717, (GLfloat) 0.828695, (GLfloat) 0.081619,
+ (GLfloat) - 0.194187, (GLfloat) 0.976241, (GLfloat) 0.096151,
+ (GLfloat) 0.194188, (GLfloat) 0.976241, (GLfloat) 0.096151,
+ (GLfloat) 0.553716, (GLfloat) 0.828696, (GLfloat) 0.081619,
+ (GLfloat) 0.830227, (GLfloat) 0.554741, (GLfloat) 0.054637,
+ (GLfloat) 0.980604, (GLfloat) 0.195053, (GLfloat) 0.019211,
+ (GLfloat) 0.980604, (GLfloat) - 0.195054, (GLfloat) - 0.019211,
+ (GLfloat) 0.830228, (GLfloat) - 0.554740, (GLfloat) - 0.054637,
+ (GLfloat) 0.553717, (GLfloat) - 0.828695, (GLfloat) - 0.081619,
+ (GLfloat) 0.194186, (GLfloat) - 0.938725, (GLfloat) - 0.284759,
+ (GLfloat) - 0.194185, (GLfloat) - 0.938725, (GLfloat) - 0.284759,
+ (GLfloat) - 0.553717, (GLfloat) - 0.796849, (GLfloat) - 0.241721,
+ (GLfloat) - 0.830228, (GLfloat) - 0.533421, (GLfloat) - 0.161812,
+ (GLfloat) - 0.980604, (GLfloat) - 0.187558, (GLfloat) - 0.056895,
+ (GLfloat) - 0.980604, (GLfloat) 0.187558, (GLfloat) 0.056895,
+ (GLfloat) - 0.830227, (GLfloat) 0.533422, (GLfloat) 0.161812,
+ (GLfloat) - 0.553717, (GLfloat) 0.796849, (GLfloat) 0.241722,
+ (GLfloat) - 0.194186, (GLfloat) 0.938725, (GLfloat) 0.284759,
+ (GLfloat) 0.194187, (GLfloat) 0.938724, (GLfloat) 0.284759,
+ (GLfloat) 0.553716, (GLfloat) 0.796849, (GLfloat) 0.241722,
+ (GLfloat) 0.830227, (GLfloat) 0.533422, (GLfloat) 0.161812,
+ (GLfloat) 0.980604, (GLfloat) 0.187558, (GLfloat) 0.056895,
+ (GLfloat) 0.980604, (GLfloat) - 0.187558, (GLfloat) - 0.056895,
+ (GLfloat) 0.830228, (GLfloat) - 0.533421, (GLfloat) - 0.161811,
+ (GLfloat) 0.553716, (GLfloat) - 0.796850, (GLfloat) - 0.241722,
+ (GLfloat) 0.194186, (GLfloat) - 0.865134, (GLfloat) - 0.462423,
+ (GLfloat) - 0.194185, (GLfloat) - 0.865134, (GLfloat) - 0.462424,
+ (GLfloat) - 0.553717, (GLfloat) - 0.734380, (GLfloat) - 0.392534,
+ (GLfloat) - 0.830228, (GLfloat) - 0.491604, (GLfloat) - 0.262768,
+ (GLfloat) - 0.980604, (GLfloat) - 0.172854, (GLfloat) - 0.092393,
+ (GLfloat) - 0.980604, (GLfloat) 0.172854, (GLfloat) 0.092393,
+ (GLfloat) - 0.830227, (GLfloat) 0.491605, (GLfloat) 0.262768,
+ (GLfloat) - 0.553717, (GLfloat) 0.734380, (GLfloat) 0.392534,
+ (GLfloat) - 0.194187, (GLfloat) 0.865134, (GLfloat) 0.462424,
+ (GLfloat) 0.194187, (GLfloat) 0.865134, (GLfloat) 0.462423,
+ (GLfloat) 0.553716, (GLfloat) 0.734381, (GLfloat) 0.392534,
+ (GLfloat) 0.830227, (GLfloat) 0.491605, (GLfloat) 0.262768,
+ (GLfloat) 0.980604, (GLfloat) 0.172854, (GLfloat) 0.092393,
+ (GLfloat) 0.980604, (GLfloat) - 0.172854, (GLfloat) - 0.092393,
+ (GLfloat) 0.830228, (GLfloat) - 0.491604, (GLfloat) - 0.262768,
+ (GLfloat) 0.553716, (GLfloat) - 0.734381, (GLfloat) - 0.392535,
+ (GLfloat) 0.194186, (GLfloat) - 0.758296, (GLfloat) - 0.622317,
+ (GLfloat) - 0.194186, (GLfloat) - 0.758296, (GLfloat) - 0.622318,
+ (GLfloat) - 0.553717, (GLfloat) - 0.643690, (GLfloat) - 0.528263,
+ (GLfloat) - 0.830228, (GLfloat) - 0.430895, (GLfloat) - 0.353626,
+ (GLfloat) - 0.980604, (GLfloat) - 0.151508, (GLfloat) - 0.124340,
+ (GLfloat) - 0.980604, (GLfloat) 0.151508, (GLfloat) 0.124339,
+ (GLfloat) - 0.830227, (GLfloat) 0.430895, (GLfloat) 0.353627,
+ (GLfloat) - 0.553717, (GLfloat) 0.643690, (GLfloat) 0.528263,
+ (GLfloat) - 0.194186, (GLfloat) 0.758296, (GLfloat) 0.622317,
+ (GLfloat) 0.194186, (GLfloat) 0.758296, (GLfloat) 0.622318,
+ (GLfloat) 0.553716, (GLfloat) 0.643690, (GLfloat) 0.528263,
+ (GLfloat) 0.830227, (GLfloat) 0.430895, (GLfloat) 0.353627,
+ (GLfloat) 0.980604, (GLfloat) 0.151508, (GLfloat) 0.124339,
+ (GLfloat) 0.980604, (GLfloat) - 0.151508, (GLfloat) - 0.124340,
+ (GLfloat) 0.830228, (GLfloat) - 0.430895, (GLfloat) - 0.353626,
+ (GLfloat) 0.553716, (GLfloat) - 0.643690, (GLfloat) - 0.528263,
+ (GLfloat) 0.194186, (GLfloat) - 0.622317, (GLfloat) - 0.758296,
+ (GLfloat) - 0.194185, (GLfloat) - 0.622318, (GLfloat) - 0.758296,
+ (GLfloat) - 0.553717, (GLfloat) - 0.528263, (GLfloat) - 0.643690,
+ (GLfloat) - 0.830228, (GLfloat) - 0.353626, (GLfloat) - 0.430895,
+ (GLfloat) - 0.980604, (GLfloat) - 0.124339, (GLfloat) - 0.151508,
+ (GLfloat) - 0.980604, (GLfloat) 0.124339, (GLfloat) 0.151508,
+ (GLfloat) - 0.830227, (GLfloat) 0.353627, (GLfloat) 0.430895,
+ (GLfloat) - 0.553717, (GLfloat) 0.528262, (GLfloat) 0.643689,
+ (GLfloat) - 0.194187, (GLfloat) 0.622317, (GLfloat) 0.758296,
+ (GLfloat) 0.194187, (GLfloat) 0.622317, (GLfloat) 0.758296,
+ (GLfloat) 0.553716, (GLfloat) 0.528263, (GLfloat) 0.643690,
+ (GLfloat) 0.830227, (GLfloat) 0.353627, (GLfloat) 0.430895,
+ (GLfloat) 0.980604, (GLfloat) 0.124339, (GLfloat) 0.151508,
+ (GLfloat) 0.980604, (GLfloat) - 0.124340, (GLfloat) - 0.151508,
+ (GLfloat) 0.830228, (GLfloat) - 0.353626, (GLfloat) - 0.430895,
+ (GLfloat) 0.553716, (GLfloat) - 0.528263, (GLfloat) - 0.643690,
+ (GLfloat) 0.194186, (GLfloat) - 0.462423, (GLfloat) - 0.865134,
+ (GLfloat) - 0.194185, (GLfloat) - 0.462424, (GLfloat) - 0.865134,
+ (GLfloat) - 0.553717, (GLfloat) - 0.392534, (GLfloat) - 0.734380,
+ (GLfloat) - 0.830228, (GLfloat) - 0.262768, (GLfloat) - 0.491604,
+ (GLfloat) - 0.980604, (GLfloat) - 0.092393, (GLfloat) - 0.172855,
+ (GLfloat) - 0.980604, (GLfloat) 0.092393, (GLfloat) 0.172854,
+ (GLfloat) - 0.830227, (GLfloat) 0.262768, (GLfloat) 0.491605,
+ (GLfloat) - 0.553717, (GLfloat) 0.392534, (GLfloat) 0.734380,
+ (GLfloat) - 0.194186, (GLfloat) 0.462424, (GLfloat) 0.865134,
+ (GLfloat) 0.194187, (GLfloat) 0.462423, (GLfloat) 0.865134,
+ (GLfloat) 0.553716, (GLfloat) 0.392535, (GLfloat) 0.734381,
+ (GLfloat) 0.830228, (GLfloat) 0.262768, (GLfloat) 0.491605,
+ (GLfloat) 0.980604, (GLfloat) 0.092393, (GLfloat) 0.172854,
+ (GLfloat) 0.980604, (GLfloat) - 0.092393, (GLfloat) - 0.172855,
+ (GLfloat) 0.830228, (GLfloat) - 0.262768, (GLfloat) - 0.491604,
+ (GLfloat) 0.553716, (GLfloat) - 0.392535, (GLfloat) - 0.734381,
+ (GLfloat) 0.194185, (GLfloat) - 0.284759, (GLfloat) - 0.938725,
+ (GLfloat) - 0.194185, (GLfloat) - 0.284759, (GLfloat) - 0.938725,
+ (GLfloat) - 0.553718, (GLfloat) - 0.241721, (GLfloat) - 0.796848,
+ (GLfloat) - 0.830228, (GLfloat) - 0.161812, (GLfloat) - 0.533422,
+ (GLfloat) - 0.980604, (GLfloat) - 0.056895, (GLfloat) - 0.187558,
+ (GLfloat) - 0.980605, (GLfloat) 0.056895, (GLfloat) 0.187557,
+ (GLfloat) - 0.830227, (GLfloat) 0.161812, (GLfloat) 0.533422,
+ (GLfloat) - 0.553716, (GLfloat) 0.241722, (GLfloat) 0.796849,
+ (GLfloat) - 0.194187, (GLfloat) 0.284759, (GLfloat) 0.938725,
+ (GLfloat) 0.194188, (GLfloat) 0.284759, (GLfloat) 0.938724,
+ (GLfloat) 0.553716, (GLfloat) 0.241722, (GLfloat) 0.796850,
+ (GLfloat) 0.830227, (GLfloat) 0.161812, (GLfloat) 0.533423,
+ (GLfloat) 0.980604, (GLfloat) 0.056895, (GLfloat) 0.187557,
+ (GLfloat) 0.980604, (GLfloat) - 0.056895, (GLfloat) - 0.187558,
+ (GLfloat) 0.830228, (GLfloat) - 0.161812, (GLfloat) - 0.533422,
+ (GLfloat) 0.553717, (GLfloat) - 0.241722, (GLfloat) - 0.796849,
+ (GLfloat) 0.194186, (GLfloat) - 0.096151, (GLfloat) - 0.976241,
+ (GLfloat) - 0.194186, (GLfloat) - 0.096151, (GLfloat) - 0.976241,
+ (GLfloat) - 0.553717, (GLfloat) - 0.081619, (GLfloat) - 0.828695,
+ (GLfloat) - 0.830228, (GLfloat) - 0.054637, (GLfloat) - 0.554740,
+ (GLfloat) - 0.980604, (GLfloat) - 0.019211, (GLfloat) - 0.195054,
+ (GLfloat) - 0.980604, (GLfloat) 0.019211, (GLfloat) 0.195054,
+ (GLfloat) - 0.830227, (GLfloat) 0.054637, (GLfloat) 0.554741,
+ (GLfloat) - 0.553717, (GLfloat) 0.081619, (GLfloat) 0.828695,
+ (GLfloat) - 0.194187, (GLfloat) 0.096151, (GLfloat) 0.976241,
+ (GLfloat) 0.194187, (GLfloat) 0.096151, (GLfloat) 0.976241,
+ (GLfloat) 0.553716, (GLfloat) 0.081620, (GLfloat) 0.828696,
+ (GLfloat) 0.830227, (GLfloat) 0.054637, (GLfloat) 0.554741,
+ (GLfloat) 0.980604, (GLfloat) 0.019211, (GLfloat) 0.195054,
+ (GLfloat) 0.980604, (GLfloat) - 0.019211, (GLfloat) - 0.195054,
+ (GLfloat) 0.830228, (GLfloat) - 0.054637, (GLfloat) - 0.554740,
+ (GLfloat) 0.553716, (GLfloat) - 0.081619, (GLfloat) - 0.828696,
+ (GLfloat) 0.194185, (GLfloat) 0.096151, (GLfloat) - 0.976241,
+ (GLfloat) - 0.194185, (GLfloat) 0.096151, (GLfloat) - 0.976241,
+ (GLfloat) - 0.553718, (GLfloat) 0.081619, (GLfloat) - 0.828695,
+ (GLfloat) - 0.830228, (GLfloat) 0.054637, (GLfloat) - 0.554740,
+ (GLfloat) - 0.980604, (GLfloat) 0.019211, (GLfloat) - 0.195054,
+ (GLfloat) - 0.980605, (GLfloat) - 0.019211, (GLfloat) 0.195053,
+ (GLfloat) - 0.830227, (GLfloat) - 0.054637, (GLfloat) 0.554741,
+ (GLfloat) - 0.553717, (GLfloat) - 0.081619, (GLfloat) 0.828695,
+ (GLfloat) - 0.194187, (GLfloat) - 0.096151, (GLfloat) 0.976241,
+ (GLfloat) 0.194188, (GLfloat) - 0.096151, (GLfloat) 0.976241,
+ (GLfloat) 0.553716, (GLfloat) - 0.081619, (GLfloat) 0.828696,
+ (GLfloat) 0.830227, (GLfloat) - 0.054637, (GLfloat) 0.554741,
+ (GLfloat) 0.980604, (GLfloat) - 0.019211, (GLfloat) 0.195053,
+ (GLfloat) 0.980604, (GLfloat) 0.019211, (GLfloat) - 0.195054,
+ (GLfloat) 0.830228, (GLfloat) 0.054637, (GLfloat) - 0.554740,
+ (GLfloat) 0.553717, (GLfloat) 0.081619, (GLfloat) - 0.828695,
+ (GLfloat) 0.194186, (GLfloat) 0.284759, (GLfloat) - 0.938725,
+ (GLfloat) - 0.194185, (GLfloat) 0.284759, (GLfloat) - 0.938725,
+ (GLfloat) - 0.553717, (GLfloat) 0.241721, (GLfloat) - 0.796849,
+ (GLfloat) - 0.830228, (GLfloat) 0.161812, (GLfloat) - 0.533421,
+ (GLfloat) - 0.980604, (GLfloat) 0.056895, (GLfloat) - 0.187558,
+ (GLfloat) - 0.980604, (GLfloat) - 0.056895, (GLfloat) 0.187558,
+ (GLfloat) - 0.830227, (GLfloat) - 0.161812, (GLfloat) 0.533422,
+ (GLfloat) - 0.553717, (GLfloat) - 0.241722, (GLfloat) 0.796849,
+ (GLfloat) - 0.194186, (GLfloat) - 0.284759, (GLfloat) 0.938725,
+ (GLfloat) 0.194187, (GLfloat) - 0.284759, (GLfloat) 0.938724,
+ (GLfloat) 0.553716, (GLfloat) - 0.241722, (GLfloat) 0.796849,
+ (GLfloat) 0.830227, (GLfloat) - 0.161812, (GLfloat) 0.533422,
+ (GLfloat) 0.980604, (GLfloat) - 0.056895, (GLfloat) 0.187558,
+ (GLfloat) 0.980604, (GLfloat) 0.056895, (GLfloat) - 0.187558,
+ (GLfloat) 0.830228, (GLfloat) 0.161811, (GLfloat) - 0.533421,
+ (GLfloat) 0.553716, (GLfloat) 0.241722, (GLfloat) - 0.796850,
+ (GLfloat) 0.194186, (GLfloat) 0.462423, (GLfloat) - 0.865134,
+ (GLfloat) - 0.194185, (GLfloat) 0.462424, (GLfloat) - 0.865134,
+ (GLfloat) - 0.553717, (GLfloat) 0.392534, (GLfloat) - 0.734380,
+ (GLfloat) - 0.830228, (GLfloat) 0.262768, (GLfloat) - 0.491604,
+ (GLfloat) - 0.980604, (GLfloat) 0.092393, (GLfloat) - 0.172854,
+ (GLfloat) - 0.980604, (GLfloat) - 0.092393, (GLfloat) 0.172854,
+ (GLfloat) - 0.830227, (GLfloat) - 0.262768, (GLfloat) 0.491605,
+ (GLfloat) - 0.553717, (GLfloat) - 0.392534, (GLfloat) 0.734380,
+ (GLfloat) - 0.194187, (GLfloat) - 0.462424, (GLfloat) 0.865134,
+ (GLfloat) 0.194187, (GLfloat) - 0.462423, (GLfloat) 0.865134,
+ (GLfloat) 0.553716, (GLfloat) - 0.392534, (GLfloat) 0.734381,
+ (GLfloat) 0.830227, (GLfloat) - 0.262768, (GLfloat) 0.491605,
+ (GLfloat) 0.980604, (GLfloat) - 0.092393, (GLfloat) 0.172854,
+ (GLfloat) 0.980604, (GLfloat) 0.092393, (GLfloat) - 0.172854,
+ (GLfloat) 0.830228, (GLfloat) 0.262768, (GLfloat) - 0.491604,
+ (GLfloat) 0.553716, (GLfloat) 0.392535, (GLfloat) - 0.734381,
+ (GLfloat) 0.194186, (GLfloat) 0.622317, (GLfloat) - 0.758296,
+ (GLfloat) - 0.194186, (GLfloat) 0.622318, (GLfloat) - 0.758296,
+ (GLfloat) - 0.553717, (GLfloat) 0.528263, (GLfloat) - 0.643690,
+ (GLfloat) - 0.830228, (GLfloat) 0.353626, (GLfloat) - 0.430895,
+ (GLfloat) - 0.980604, (GLfloat) 0.124340, (GLfloat) - 0.151508,
+ (GLfloat) - 0.980604, (GLfloat) - 0.124339, (GLfloat) 0.151508,
+ (GLfloat) - 0.830227, (GLfloat) - 0.353627, (GLfloat) 0.430895,
+ (GLfloat) - 0.553717, (GLfloat) - 0.528263, (GLfloat) 0.643690,
+ (GLfloat) - 0.194186, (GLfloat) - 0.622317, (GLfloat) 0.758296,
+ (GLfloat) 0.194186, (GLfloat) - 0.622318, (GLfloat) 0.758296,
+ (GLfloat) 0.553716, (GLfloat) - 0.528263, (GLfloat) 0.643690,
+ (GLfloat) 0.830227, (GLfloat) - 0.353627, (GLfloat) 0.430895,
+ (GLfloat) 0.980604, (GLfloat) - 0.124339, (GLfloat) 0.151508,
+ (GLfloat) 0.980604, (GLfloat) 0.124340, (GLfloat) - 0.151508,
+ (GLfloat) 0.830228, (GLfloat) 0.353626, (GLfloat) - 0.430895,
+ (GLfloat) 0.553716, (GLfloat) 0.528263, (GLfloat) - 0.643690,
+ (GLfloat) 0.194186, (GLfloat) 0.758296, (GLfloat) - 0.622317,
+ (GLfloat) - 0.194185, (GLfloat) 0.758296, (GLfloat) - 0.622318,
+ (GLfloat) - 0.553717, (GLfloat) 0.643690, (GLfloat) - 0.528263,
+ (GLfloat) - 0.830228, (GLfloat) 0.430895, (GLfloat) - 0.353626,
+ (GLfloat) - 0.980604, (GLfloat) 0.151508, (GLfloat) - 0.124339,
+ (GLfloat) - 0.980604, (GLfloat) - 0.151508, (GLfloat) 0.124339,
+ (GLfloat) - 0.830227, (GLfloat) - 0.430895, (GLfloat) 0.353627,
+ (GLfloat) - 0.553717, (GLfloat) - 0.643689, (GLfloat) 0.528262,
+ (GLfloat) - 0.194187, (GLfloat) - 0.758296, (GLfloat) 0.622317,
+ (GLfloat) 0.194187, (GLfloat) - 0.758296, (GLfloat) 0.622317,
+ (GLfloat) 0.553716, (GLfloat) - 0.643690, (GLfloat) 0.528263,
+ (GLfloat) 0.830227, (GLfloat) - 0.430895, (GLfloat) 0.353627,
+ (GLfloat) 0.980604, (GLfloat) - 0.151508, (GLfloat) 0.124339,
+ (GLfloat) 0.980604, (GLfloat) 0.151508, (GLfloat) - 0.124340,
+ (GLfloat) 0.830228, (GLfloat) 0.430895, (GLfloat) - 0.353626,
+ (GLfloat) 0.553716, (GLfloat) 0.643690, (GLfloat) - 0.528263,
+ (GLfloat) 0.194186, (GLfloat) 0.865134, (GLfloat) - 0.462423,
+ (GLfloat) - 0.194185, (GLfloat) 0.865134, (GLfloat) - 0.462424,
+ (GLfloat) - 0.553717, (GLfloat) 0.734380, (GLfloat) - 0.392534,
+ (GLfloat) - 0.830228, (GLfloat) 0.491604, (GLfloat) - 0.262768,
+ (GLfloat) - 0.980604, (GLfloat) 0.172855, (GLfloat) - 0.092393,
+ (GLfloat) - 0.980604, (GLfloat) - 0.172854, (GLfloat) 0.092393,
+ (GLfloat) - 0.830227, (GLfloat) - 0.491605, (GLfloat) 0.262768,
+ (GLfloat) - 0.553717, (GLfloat) - 0.734380, (GLfloat) 0.392534,
+ (GLfloat) - 0.194186, (GLfloat) - 0.865134, (GLfloat) 0.462424,
+ (GLfloat) 0.194187, (GLfloat) - 0.865134, (GLfloat) 0.462423,
+ (GLfloat) 0.553716, (GLfloat) - 0.734381, (GLfloat) 0.392535,
+ (GLfloat) 0.830228, (GLfloat) - 0.491605, (GLfloat) 0.262768,
+ (GLfloat) 0.980604, (GLfloat) - 0.172854, (GLfloat) 0.092393,
+ (GLfloat) 0.980604, (GLfloat) 0.172855, (GLfloat) - 0.092393,
+ (GLfloat) 0.830228, (GLfloat) 0.491604, (GLfloat) - 0.262768,
+ (GLfloat) 0.553716, (GLfloat) 0.734381, (GLfloat) - 0.392535,
+ (GLfloat) 0.194185, (GLfloat) 0.938725, (GLfloat) - 0.284759,
+ (GLfloat) - 0.194185, (GLfloat) 0.938725, (GLfloat) - 0.284759,
+ (GLfloat) - 0.553718, (GLfloat) 0.796848, (GLfloat) - 0.241721,
+ (GLfloat) - 0.830228, (GLfloat) 0.533422, (GLfloat) - 0.161812,
+ (GLfloat) - 0.980604, (GLfloat) 0.187558, (GLfloat) - 0.056895,
+ (GLfloat) - 0.980605, (GLfloat) - 0.187557, (GLfloat) 0.056895,
+ (GLfloat) - 0.830227, (GLfloat) - 0.533422, (GLfloat) 0.161812,
+ (GLfloat) - 0.553716, (GLfloat) - 0.796849, (GLfloat) 0.241722,
+ (GLfloat) - 0.194187, (GLfloat) - 0.938725, (GLfloat) 0.284759,
+ (GLfloat) 0.194188, (GLfloat) - 0.938724, (GLfloat) 0.284759,
+ (GLfloat) 0.553716, (GLfloat) - 0.796850, (GLfloat) 0.241722,
+ (GLfloat) 0.830227, (GLfloat) - 0.533423, (GLfloat) 0.161812,
+ (GLfloat) 0.980604, (GLfloat) - 0.187557, (GLfloat) 0.056895,
+ (GLfloat) 0.980604, (GLfloat) 0.187558, (GLfloat) - 0.056895,
+ (GLfloat) 0.830228, (GLfloat) 0.533422, (GLfloat) - 0.161812,
+ (GLfloat) 0.553717, (GLfloat) 0.796849, (GLfloat) - 0.241722,
+ (GLfloat) 0.194186, (GLfloat) 0.976241, (GLfloat) - 0.096151,
+ (GLfloat) - 0.194186, (GLfloat) 0.976241, (GLfloat) - 0.096151,
+ (GLfloat) - 0.553717, (GLfloat) 0.828695, (GLfloat) - 0.081619,
+ (GLfloat) - 0.830228, (GLfloat) 0.554740, (GLfloat) - 0.054637,
+ (GLfloat) - 0.980604, (GLfloat) 0.195054, (GLfloat) - 0.019211,
+ (GLfloat) - 0.980604, (GLfloat) - 0.195054, (GLfloat) 0.019211,
+ (GLfloat) - 0.830227, (GLfloat) - 0.554741, (GLfloat) 0.054637,
+ (GLfloat) - 0.553717, (GLfloat) - 0.828695, (GLfloat) 0.081619,
+ (GLfloat) - 0.194187, (GLfloat) - 0.976241, (GLfloat) 0.096151,
+ (GLfloat) 0.194187, (GLfloat) - 0.976241, (GLfloat) 0.096151,
+ (GLfloat) 0.553716, (GLfloat) - 0.828696, (GLfloat) 0.081620,
+ (GLfloat) 0.830227, (GLfloat) - 0.554741, (GLfloat) 0.054637,
+ (GLfloat) 0.980604, (GLfloat) - 0.195054, (GLfloat) 0.019211,
+ (GLfloat) 0.980604, (GLfloat) 0.195054, (GLfloat) - 0.019211,
+ (GLfloat) 0.830228, (GLfloat) 0.554740, (GLfloat) - 0.054637,
+ (GLfloat) 0.553716, (GLfloat) 0.828696, (GLfloat) - 0.081619,
+};
+
+unsigned short int BigValve_POLS[] =
+{
+ 16, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 1, 4, 700,
+ 701, 685, 684, 1, 4, 701, 702, 686, 685, 1, 4, 702, 703, 687, 686, 1, 4, 703, 704, 688,
+ 687, 1, 4, 704, 705, 689, 688, 1, 4, 705, 706, 690, 689, 1, 4, 706, 707, 691, 690, 1,
+ 4, 707, 708, 692, 691, 1, 4, 708, 709, 693, 692, 1, 4, 709, 710, 694, 693, 1, 4, 710,
+ 711, 695, 694, 1, 4, 711, 712, 696, 695, 1, 4, 712, 713, 697, 696, 1, 4, 713, 714, 698,
+ 697, 1, 4, 714, 715, 699, 698, 1, 4, 715, 700, 684, 699, 1, 16, 700, 715, 714, 713, 712,
+ 711, 710, 709, 708, 707, 706, 705, 704, 703, 702, 701, 1, 4, 668, 669, 655, 654, 1, 4, 669,
+ 670, 656, 655, 1, 4, 670, 671, 657, 656, 1, 4, 671, 672, 634, 657, 1, 4, 672, 673, 658,
+ 634, 1, 4, 673, 674, 659, 658, 1, 4, 674, 675, 660, 659, 1, 4, 675, 676, 661, 660, 1,
+ 4, 676, 677, 662, 661, 1, 4, 677, 678, 663, 662, 1, 4, 678, 679, 664, 663, 1, 4, 679,
+ 680, 564, 664, 1, 4, 680, 681, 665, 564, 1, 4, 681, 682, 666, 665, 1, 4, 682, 683, 667,
+ 666, 1, 4, 683, 668, 654, 667, 1, 4, 638, 639, 624, 623, 1, 4, 639, 640, 625, 624, 1,
+ 4, 640, 641, 626, 625, 1, 4, 641, 642, 603, 626, 1, 4, 642, 643, 627, 603, 1, 4, 643,
+ 644, 628, 627, 1, 4, 644, 645, 629, 628, 1, 4, 645, 646, 630, 629, 1, 4, 646, 647, 631,
+ 630, 1, 4, 647, 648, 632, 631, 1, 4, 648, 649, 633, 632, 1, 4, 649, 650, 634, 633, 1,
+ 4, 650, 651, 635, 634, 1, 4, 651, 652, 636, 635, 1, 4, 652, 653, 637, 636, 1, 4, 653,
+ 638, 623, 637, 1, 4, 607, 608, 593, 592, 1, 4, 608, 609, 594, 593, 1, 4, 609, 610, 595,
+ 594, 1, 4, 610, 611, 572, 595, 1, 4, 611, 612, 596, 572, 1, 4, 612, 613, 597, 596, 1,
+ 4, 613, 614, 598, 597, 1, 4, 614, 615, 599, 598, 1, 4, 615, 616, 600, 599, 1, 4, 616,
+ 617, 601, 600, 1, 4, 617, 618, 602, 601, 1, 4, 618, 619, 603, 602, 1, 4, 619, 620, 604,
+ 603, 1, 4, 620, 621, 605, 604, 1, 4, 621, 622, 606, 605, 1, 4, 622, 607, 592, 606, 1,
+ 4, 576, 577, 561, 560, 1, 4, 577, 578, 562, 561, 1, 4, 578, 579, 563, 562, 1, 4, 579,
+ 580, 564, 563, 1, 4, 580, 581, 565, 564, 1, 4, 581, 582, 566, 565, 1, 4, 582, 583, 567,
+ 566, 1, 4, 583, 584, 568, 567, 1, 4, 584, 585, 569, 568, 1, 4, 585, 586, 570, 569, 1,
+ 4, 586, 587, 571, 570, 1, 4, 587, 588, 572, 571, 1, 4, 588, 589, 573, 572, 1, 4, 589,
+ 590, 574, 573, 1, 4, 590, 591, 575, 574, 1, 4, 591, 576, 560, 575, 1, 24, 512, 513, 514,
+ 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534,
+ 535, 1, 4, 536, 537, 513, 512, 1, 4, 537, 538, 514, 513, 1, 4, 538, 539, 515, 514, 1,
+ 4, 539, 540, 516, 515, 1, 4, 540, 541, 517, 516, 1, 4, 541, 542, 518, 517, 1, 4, 542,
+ 543, 519, 518, 1, 4, 543, 544, 520, 519, 1, 4, 544, 545, 521, 520, 1, 4, 545, 546, 522,
+ 521, 1, 4, 546, 547, 523, 522, 1, 4, 547, 548, 524, 523, 1, 4, 548, 549, 525, 524, 1,
+ 4, 549, 550, 526, 525, 1, 4, 550, 551, 527, 526, 1, 4, 551, 552, 528, 527, 1, 4, 552,
+ 553, 529, 528, 1, 4, 553, 554, 530, 529, 1, 4, 554, 555, 531, 530, 1, 4, 555, 556, 532,
+ 531, 1, 4, 556, 557, 533, 532, 1, 4, 557, 558, 534, 533, 1, 4, 558, 559, 535, 534, 1,
+ 4, 559, 536, 512, 535, 1, 24, 536, 559, 558, 557, 556, 555, 554, 553, 552, 551, 550, 549, 548,
+ 547, 546, 545, 544, 543, 542, 541, 540, 539, 538, 537, 1, 4, 16, 31, 15, 0, 1, 4, 31,
+ 30, 14, 15, 1, 4, 30, 29, 13, 14, 1, 4, 29, 28, 12, 13, 1, 4, 28, 27, 11,
+ 12, 1, 4, 27, 26, 10, 11, 1, 4, 26, 25, 9, 10, 1, 4, 25, 24, 8, 9, 1,
+ 4, 24, 23, 7, 8, 1, 4, 23, 22, 6, 7, 1, 4, 22, 21, 5, 6, 1, 4, 21,
+ 20, 4, 5, 1, 4, 20, 19, 3, 4, 1, 4, 19, 18, 2, 3, 1, 4, 18, 17, 1,
+ 2, 1, 4, 17, 16, 0, 1, 1, 4, 32, 47, 31, 16, 1, 4, 47, 46, 30, 31, 1,
+ 4, 46, 45, 29, 30, 1, 4, 45, 44, 28, 29, 1, 4, 44, 43, 27, 28, 1, 4, 43,
+ 42, 26, 27, 1, 4, 42, 41, 25, 26, 1, 4, 41, 40, 24, 25, 1, 4, 40, 39, 23,
+ 24, 1, 4, 39, 38, 22, 23, 1, 4, 38, 37, 21, 22, 1, 4, 37, 36, 20, 21, 1,
+ 4, 36, 35, 19, 20, 1, 4, 35, 34, 18, 19, 1, 4, 34, 33, 17, 18, 1, 4, 33,
+ 32, 16, 17, 1, 4, 48, 63, 47, 32, 1, 4, 63, 62, 46, 47, 1, 4, 62, 61, 45,
+ 46, 1, 4, 61, 60, 44, 45, 1, 4, 60, 59, 43, 44, 1, 4, 59, 58, 42, 43, 1,
+ 4, 58, 57, 41, 42, 1, 4, 57, 56, 40, 41, 1, 4, 56, 55, 39, 40, 1, 4, 55,
+ 54, 38, 39, 1, 4, 54, 53, 37, 38, 1, 4, 53, 52, 36, 37, 1, 4, 52, 51, 35,
+ 36, 1, 4, 51, 50, 34, 35, 1, 4, 50, 49, 33, 34, 1, 4, 49, 48, 32, 33, 1,
+ 4, 64, 79, 63, 48, 1, 4, 79, 78, 62, 63, 1, 4, 78, 77, 61, 62, 1, 4, 77,
+ 76, 60, 61, 1, 4, 76, 75, 59, 60, 1, 4, 75, 74, 58, 59, 1, 4, 74, 73, 57,
+ 58, 1, 4, 73, 72, 56, 57, 1, 4, 72, 71, 55, 56, 1, 4, 71, 70, 54, 55, 1,
+ 4, 70, 69, 53, 54, 1, 4, 69, 68, 52, 53, 1, 4, 68, 67, 51, 52, 1, 4, 67,
+ 66, 50, 51, 1, 4, 66, 65, 49, 50, 1, 4, 65, 64, 48, 49, 1, 4, 80, 95, 79,
+ 64, 1, 4, 95, 94, 78, 79, 1, 4, 94, 93, 77, 78, 1, 4, 93, 92, 76, 77, 1,
+ 4, 92, 91, 75, 76, 1, 4, 91, 90, 74, 75, 1, 4, 90, 89, 73, 74, 1, 4, 89,
+ 88, 72, 73, 1, 4, 88, 87, 71, 72, 1, 4, 87, 86, 70, 71, 1, 4, 86, 85, 69,
+ 70, 1, 4, 85, 84, 68, 69, 1, 4, 84, 83, 67, 68, 1, 4, 83, 82, 66, 67, 1,
+ 4, 82, 81, 65, 66, 1, 4, 81, 80, 64, 65, 1, 4, 96, 111, 95, 80, 1, 4, 111,
+ 110, 94, 95, 1, 4, 110, 109, 93, 94, 1, 4, 109, 108, 92, 93, 1, 4, 108, 107, 91,
+92, 1, 4, 107, 106, 90, 91, 1, 4, 106, 105, 89, 90, 1, 4, 105, 104, 88, 89, 1,
+ 4, 104, 103, 87, 88, 1, 4, 103, 102, 86, 87, 1, 4, 102, 101, 85, 86, 1, 4, 101,
+ 100, 84, 85, 1, 4, 100, 99, 83, 84, 1, 4, 99, 98, 82, 83, 1, 4, 98, 97, 81,
+ 82, 1, 4, 97, 96, 80, 81, 1, 4, 112, 127, 111, 96, 1, 4, 127, 126, 110, 111, 1,
+ 4, 126, 125, 109, 110, 1, 4, 125, 124, 108, 109, 1, 4, 124, 123, 107, 108, 1, 4, 123,
+ 122, 106, 107, 1, 4, 122, 121, 105, 106, 1, 4, 121, 120, 104, 105, 1, 4, 120, 119, 103,
+ 104, 1, 4, 119, 118, 102, 103, 1, 4, 118, 117, 101, 102, 1, 4, 117, 116, 100, 101, 1,
+ 4, 116, 115, 99, 100, 1, 4, 115, 114, 98, 99, 1, 4, 114, 113, 97, 98, 1, 4, 113,
+ 112, 96, 97, 1, 4, 128, 143, 127, 112, 1, 4, 143, 142, 126, 127, 1, 4, 142, 141, 125,
+ 126, 1, 4, 141, 140, 124, 125, 1, 4, 140, 139, 123, 124, 1, 4, 139, 138, 122, 123, 1,
+ 4, 138, 137, 121, 122, 1, 4, 137, 136, 120, 121, 1, 4, 136, 135, 119, 120, 1, 4, 135,
+ 134, 118, 119, 1, 4, 134, 133, 117, 118, 1, 4, 133, 132, 116, 117, 1, 4, 132, 131, 115,
+ 116, 1, 4, 131, 130, 114, 115, 1, 4, 130, 129, 113, 114, 1, 4, 129, 128, 112, 113, 1,
+ 4, 144, 159, 143, 128, 1, 4, 159, 158, 142, 143, 1, 4, 158, 157, 141, 142, 1, 4, 157,
+ 156, 140, 141, 1, 4, 156, 155, 139, 140, 1, 4, 155, 154, 138, 139, 1, 4, 154, 153, 137,
+ 138, 1, 4, 153, 152, 136, 137, 1, 4, 152, 151, 135, 136, 1, 4, 151, 150, 134, 135, 1,
+ 4, 150, 149, 133, 134, 1, 4, 149, 148, 132, 133, 1, 4, 148, 147, 131, 132, 1, 4, 147,
+ 146, 130, 131, 1, 4, 146, 145, 129, 130, 1, 4, 145, 144, 128, 129, 1, 4, 160, 175, 159,
+ 144, 1, 4, 175, 174, 158, 159, 1, 4, 174, 173, 157, 158, 1, 4, 173, 172, 156, 157, 1,
+ 4, 172, 171, 155, 156, 1, 4, 171, 170, 154, 155, 1, 4, 170, 169, 153, 154, 1, 4, 169,
+ 168, 152, 153, 1, 4, 168, 167, 151, 152, 1, 4, 167, 166, 150, 151, 1, 4, 166, 165, 149,
+ 150, 1, 4, 165, 164, 148, 149, 1, 4, 164, 163, 147, 148, 1, 4, 163, 162, 146, 147, 1,
+ 4, 162, 161, 145, 146, 1, 4, 161, 160, 144, 145, 1, 4, 176, 191, 175, 160, 1, 4, 191,
+ 190, 174, 175, 1, 4, 190, 189, 173, 174, 1, 4, 189, 188, 172, 173, 1, 4, 188, 187, 171,
+ 172, 1, 4, 187, 186, 170, 171, 1, 4, 186, 185, 169, 170, 1, 4, 185, 184, 168, 169, 1,
+ 4, 184, 183, 167, 168, 1, 4, 183, 182, 166, 167, 1, 4, 182, 181, 165, 166, 1, 4, 181,
+ 180, 164, 165, 1, 4, 180, 179, 163, 164, 1, 4, 179, 178, 162, 163, 1, 4, 178, 177, 161,
+ 162, 1, 4, 177, 176, 160, 161, 1, 4, 192, 207, 191, 176, 1, 4, 207, 206, 190, 191, 1,
+ 4, 206, 205, 189, 190, 1, 4, 205, 204, 188, 189, 1, 4, 204, 203, 187, 188, 1, 4, 203,
+ 202, 186, 187, 1, 4, 202, 201, 185, 186, 1, 4, 201, 200, 184, 185, 1, 4, 200, 199, 183,
+ 184, 1, 4, 199, 198, 182, 183, 1, 4, 198, 197, 181, 182, 1, 4, 197, 196, 180, 181, 1,
+ 4, 196, 195, 179, 180, 1, 4, 195, 194, 178, 179, 1, 4, 194, 193, 177, 178, 1, 4, 193,
+ 192, 176, 177, 1, 4, 208, 223, 207, 192, 1, 4, 223, 222, 206, 207, 1, 4, 222, 221, 205,
+ 206, 1, 4, 221, 220, 204, 205, 1, 4, 220, 219, 203, 204, 1, 4, 219, 218, 202, 203, 1,
+ 4, 218, 217, 201, 202, 1, 4, 217, 216, 200, 201, 1, 4, 216, 215, 199, 200, 1, 4, 215,
+ 214, 198, 199, 1, 4, 214, 213, 197, 198, 1, 4, 213, 212, 196, 197, 1, 4, 212, 211, 195,
+ 196, 1, 4, 211, 210, 194, 195, 1, 4, 210, 209, 193, 194, 1, 4, 209, 208, 192, 193, 1,
+ 4, 224, 239, 223, 208, 1, 4, 239, 238, 222, 223, 1, 4, 238, 237, 221, 222, 1, 4, 237,
+ 236, 220, 221, 1, 4, 236, 235, 219, 220, 1, 4, 235, 234, 218, 219, 1, 4, 234, 233, 217,
+ 218, 1, 4, 233, 232, 216, 217, 1, 4, 232, 231, 215, 216, 1, 4, 231, 230, 214, 215, 1,
+ 4, 230, 229, 213, 214, 1, 4, 229, 228, 212, 213, 1, 4, 228, 227, 211, 212, 1, 4, 227,
+ 226, 210, 211, 1, 4, 226, 225, 209, 210, 1, 4, 225, 224, 208, 209, 1, 4, 240, 255, 239,
+ 224, 1, 4, 255, 254, 238, 239, 1, 4, 254, 253, 237, 238, 1, 4, 253, 252, 236, 237, 1,
+ 4, 252, 251, 235, 236, 1, 4, 251, 250, 234, 235, 1, 4, 250, 249, 233, 234, 1, 4, 249,
+ 248, 232, 233, 1, 4, 248, 247, 231, 232, 1, 4, 247, 246, 230, 231, 1, 4, 246, 245, 229,
+ 230, 1, 4, 245, 244, 228, 229, 1, 4, 244, 243, 227, 228, 1, 4, 243, 242, 226, 227, 1,
+ 4, 242, 241, 225, 226, 1, 4, 241, 240, 224, 225, 1, 4, 256, 271, 255, 240, 1, 4, 271,
+ 270, 254, 255, 1, 4, 270, 269, 253, 254, 1, 4, 269, 268, 252, 253, 1, 4, 268, 267, 251,
+ 252, 1, 4, 267, 266, 250, 251, 1, 4, 266, 265, 249, 250, 1, 4, 265, 264, 248, 249, 1,
+ 4, 264, 263, 247, 248, 1, 4, 263, 262, 246, 247, 1, 4, 262, 261, 245, 246, 1, 4, 261,
+ 260, 244, 245, 1, 4, 260, 259, 243, 244, 1, 4, 259, 258, 242, 243, 1, 4, 258, 257, 241,
+ 242, 1, 4, 257, 256, 240, 241, 1, 4, 272, 287, 271, 256, 1, 4, 287, 286, 270, 271, 1,
+ 4, 286, 285, 269, 270, 1, 4, 285, 284, 268, 269, 1, 4, 284, 283, 267, 268, 1, 4, 283,
+ 282, 266, 267, 1, 4, 282, 281, 265, 266, 1, 4, 281, 280, 264, 265, 1, 4, 280, 279, 263,
+ 264, 1, 4, 279, 278, 262, 263, 1, 4, 278, 277, 261, 262, 1, 4, 277, 276, 260, 261, 1,
+ 4, 276, 275, 259, 260, 1, 4, 275, 274, 258, 259, 1, 4, 274, 273, 257, 258, 1, 4, 273,
+ 272, 256, 257, 1, 4, 288, 303, 287, 272, 1, 4, 303, 302, 286, 287, 1, 4, 302, 301, 285,
+ 286, 1, 4, 301, 300, 284, 285, 1, 4, 300, 299, 283, 284, 1, 4, 299, 298, 282, 283, 1,
+ 4, 298, 297, 281, 282, 1, 4, 297, 296, 280, 281, 1, 4, 296, 295, 279, 280, 1, 4, 295,
+ 294, 278, 279, 1, 4, 294, 293, 277, 278, 1, 4, 293, 292, 276, 277, 1, 4, 292, 291, 275,
+ 276, 1, 4, 291, 290, 274, 275, 1, 4, 290, 289, 273, 274, 1, 4, 289, 288, 272, 273, 1,
+ 4, 304, 319, 303, 288, 1, 4, 319, 318, 302, 303, 1, 4, 318, 317, 301, 302, 1, 4, 317,
+ 316, 300, 301, 1, 4, 316, 315, 299, 300, 1, 4, 315, 314, 298, 299, 1, 4, 314, 313, 297,
+ 298, 1, 4, 313, 312, 296, 297, 1, 4, 312, 311, 295, 296, 1, 4, 311, 310, 294, 295, 1,
+ 4, 310, 309, 293, 294, 1, 4, 309, 308, 292, 293, 1, 4, 308, 307, 291, 292, 1, 4, 307,
+ 306, 290, 291, 1, 4, 306, 305, 289, 290, 1, 4, 305, 304, 288, 289, 1, 4, 320, 335, 319,
+ 304, 1, 4, 335, 334, 318, 319, 1, 4, 334, 333, 317, 318, 1, 4, 333, 332, 316, 317, 1,
+ 4, 332, 331, 315, 316, 1, 4, 331, 330, 314, 315, 1, 4, 330, 329, 313, 314, 1, 4, 329,
+ 328, 312, 313, 1, 4, 328, 327, 311, 312, 1, 4, 327, 326, 310, 311, 1, 4, 326, 325, 309,
+ 310, 1, 4, 325, 324, 308, 309, 1, 4, 324, 323, 307, 308, 1, 4, 323, 322, 306, 307, 1,
+ 4, 322, 321, 305, 306, 1, 4, 321, 320, 304, 305, 1, 4, 336, 351, 335, 320, 1, 4, 351,
+ 350, 334, 335, 1, 4, 350, 349, 333, 334, 1, 4, 349, 348, 332, 333, 1, 4, 348, 347, 331,
+ 332, 1, 4, 347, 346, 330, 331, 1, 4, 346, 345, 329, 330, 1, 4, 345, 344, 328, 329, 1,
+ 4, 344, 343, 327, 328, 1, 4, 343, 342, 326, 327, 1, 4, 342, 341, 325, 326, 1, 4, 341,
+ 340, 324, 325, 1, 4, 340, 339, 323, 324, 1, 4, 339, 338, 322, 323, 1, 4, 338, 337, 321,
+ 322, 1, 4, 337, 336, 320, 321, 1, 4, 352, 367, 351, 336, 1, 4, 367, 366, 350, 351, 1,
+ 4, 366, 365, 349, 350, 1, 4, 365, 364, 348, 349, 1, 4, 364, 363, 347, 348, 1, 4, 363,
+ 362, 346, 347, 1, 4, 362, 361, 345, 346, 1, 4, 361, 360, 344, 345, 1, 4, 360, 359, 343,
+ 344, 1, 4, 359, 358, 342, 343, 1, 4, 358, 357, 341, 342, 1, 4, 357, 356, 340, 341, 1,
+ 4, 356, 355, 339, 340, 1, 4, 355, 354, 338, 339, 1, 4, 354, 353, 337, 338, 1, 4, 353,
+ 352, 336, 337, 1, 4, 368, 383, 367, 352, 1, 4, 383, 382, 366, 367, 1, 4, 382, 381, 365,
+ 366, 1, 4, 381, 380, 364, 365, 1, 4, 380, 379, 363, 364, 1, 4, 379, 378, 362, 363, 1,
+ 4, 378, 377, 361, 362, 1, 4, 377, 376, 360, 361, 1, 4, 376, 375, 359, 360, 1, 4, 375,
+ 374, 358, 359, 1, 4, 374, 373, 357, 358, 1, 4, 373, 372, 356, 357, 1, 4, 372, 371, 355,
+ 356, 1, 4, 371, 370, 354, 355, 1, 4, 370, 369, 353, 354, 1, 4, 369, 368, 352, 353, 1,
+ 4, 384, 399, 383, 368, 1, 4, 399, 398, 382, 383, 1, 4, 398, 397, 381, 382, 1, 4, 397,
+ 396, 380, 381, 1, 4, 396, 395, 379, 380, 1, 4, 395, 394, 378, 379, 1, 4, 394, 393, 377,
+ 378, 1, 4, 393, 392, 376, 377, 1, 4, 392, 391, 375, 376, 1, 4, 391, 390, 374, 375, 1,
+ 4, 390, 389, 373, 374, 1, 4, 389, 388, 372, 373, 1, 4, 388, 387, 371, 372, 1, 4, 387,
+ 386, 370, 371, 1, 4, 386, 385, 369, 370, 1, 4, 385, 384, 368, 369, 1, 4, 400, 415, 399,
+ 384, 1, 4, 415, 414, 398, 399, 1, 4, 414, 413, 397, 398, 1, 4, 413, 412, 396, 397, 1,
+ 4, 412, 411, 395, 396, 1, 4, 411, 410, 394, 395, 1, 4, 410, 409, 393, 394, 1, 4, 409,
+ 408, 392, 393, 1, 4, 408, 407, 391, 392, 1, 4, 407, 406, 390, 391, 1, 4, 406, 405, 389,
+ 390, 1, 4, 405, 404, 388, 389, 1, 4, 404, 403, 387, 388, 1, 4, 403, 402, 386, 387, 1,
+ 4, 402, 401, 385, 386, 1, 4, 401, 400, 384, 385, 1, 4, 416, 431, 415, 400, 1, 4, 431,
+ 430, 414, 415, 1, 4, 430, 429, 413, 414, 1, 4, 429, 428, 412, 413, 1, 4, 428, 427, 411,
+ 412, 1, 4, 427, 426, 410, 411, 1, 4, 426, 425, 409, 410, 1, 4, 425, 424, 408, 409, 1,
+ 4, 424, 423, 407, 408, 1, 4, 423, 422, 406, 407, 1, 4, 422, 421, 405, 406, 1, 4, 421,
+ 420, 404, 405, 1, 4, 420, 419, 403, 404, 1, 4, 419, 418, 402, 403, 1, 4, 418, 417, 401,
+ 402, 1, 4, 417, 416, 400, 401, 1, 4, 432, 447, 431, 416, 1, 4, 447, 446, 430, 431, 1,
+ 4, 446, 445, 429, 430, 1, 4, 445, 444, 428, 429, 1, 4, 444, 443, 427, 428, 1, 4, 443,
+ 442, 426, 427, 1, 4, 442, 441, 425, 426, 1, 4, 441, 440, 424, 425, 1, 4, 440, 439, 423,
+ 424, 1, 4, 439, 438, 422, 423, 1, 4, 438, 437, 421, 422, 1, 4, 437, 436, 420, 421, 1,
+ 4, 436, 435, 419, 420, 1, 4, 435, 434, 418, 419, 1, 4, 434, 433, 417, 418, 1, 4, 433,
+ 432, 416, 417, 1, 4, 448, 463, 447, 432, 1, 4, 463, 462, 446, 447, 1, 4, 462, 461, 445,
+ 446, 1, 4, 461, 460, 444, 445, 1, 4, 460, 459, 443, 444, 1, 4, 459, 458, 442, 443, 1,
+ 4, 458, 457, 441, 442, 1, 4, 457, 456, 440, 441, 1, 4, 456, 455, 439, 440, 1, 4, 455,
+ 454, 438, 439, 1, 4, 454, 453, 437, 438, 1, 4, 453, 452, 436, 437, 1, 4, 452, 451, 435,
+ 436, 1, 4, 451, 450, 434, 435, 1, 4, 450, 449, 433, 434, 1, 4, 449, 448, 432, 433, 1,
+ 4, 464, 479, 463, 448, 1, 4, 479, 478, 462, 463, 1, 4, 478, 477, 461, 462, 1, 4, 477,
+ 476, 460, 461, 1, 4, 476, 475, 459, 460, 1, 4, 475, 474, 458, 459, 1, 4, 474, 473, 457,
+ 458, 1, 4, 473, 472, 456, 457, 1, 4, 472, 471, 455, 456, 1, 4, 471, 470, 454, 455, 1,
+ 4, 470, 469, 453, 454, 1, 4, 469, 468, 452, 453, 1, 4, 468, 467, 451, 452, 1, 4, 467,
+ 466, 450, 451, 1, 4, 466, 465, 449, 450, 1, 4, 465, 464, 448, 449, 1, 4, 480, 495, 479,
+ 464, 1, 4, 495, 494, 478, 479, 1, 4, 494, 493, 477, 478, 1, 4, 493, 492, 476, 477, 1,
+ 4, 492, 491, 475, 476, 1, 4, 491, 490, 474, 475, 1, 4, 490, 489, 473, 474, 1, 4, 489,
+ 488, 472, 473, 1, 4, 488, 487, 471, 472, 1, 4, 487, 486, 470, 471, 1, 4, 486, 485, 469,
+ 470, 1, 4, 485, 484, 468, 469, 1, 4, 484, 483, 467, 468, 1, 4, 483, 482, 466, 467, 1,
+ 4, 482, 481, 465, 466, 1, 4, 481, 480, 464, 465, 1, 4, 496, 511, 495, 480, 1, 4, 511,
+ 510, 494, 495, 1, 4, 510, 509, 493, 494, 1, 4, 509, 508, 492, 493, 1, 4, 508, 507, 491,
+ 492, 1, 4, 507, 506, 490, 491, 1, 4, 506, 505, 489, 490, 1, 4, 505, 504, 488, 489, 1,
+ 4, 504, 503, 487, 488, 1, 4, 503, 502, 486, 487, 1, 4, 502, 501, 485, 486, 1, 4, 501,
+ 500, 484, 485, 1, 4, 500, 499, 483, 484, 1, 4, 499, 498, 482, 483, 1, 4, 498, 497, 481,
+ 482, 1, 4, 497, 496, 480, 481, 1, 4, 0, 15, 511, 496, 1, 4, 15, 14, 510, 511, 1,
+4, 14, 13, 509, 510, 1, 4, 13, 12, 508, 509, 1, 4, 12, 11, 507, 508, 1, 4, 11,
+ 10, 506, 507, 1, 4, 10, 9, 505, 506, 1, 4, 9, 8, 504, 505, 1, 4, 8, 7, 503,
+ 504, 1, 4, 7, 6, 502, 503, 1, 4, 6, 5, 501, 502, 1, 4, 5, 4, 500, 501, 1,
+ 4, 4, 3, 499, 500, 1, 4, 3, 2, 498, 499, 1, 4, 2, 1, 497, 498, 1, 4, 1,
+ 0, 496, 497, 1,
+ 0
+};
+
+struct lwo LWO_BigValve =
+{
+ 716, /* number of points */
+ BigValve_PNTS, BigValve_normals, BigValve_POLS, 0L
+};
+
+GLfloat Bolts3D_PNTS[] =
+{
+ (GLfloat) - 0.160704, (GLfloat) 0.399000, (GLfloat) 0.600000,
+ (GLfloat) - 0.160704, (GLfloat) 0.399000, (GLfloat) - 0.500000,
+ (GLfloat) - 0.400000, (GLfloat) 0.160257, (GLfloat) 0.600000,
+ (GLfloat) - 0.400000, (GLfloat) 0.160257, (GLfloat) - 0.500000,
+ (GLfloat) - 0.400000, (GLfloat) - 0.170369, (GLfloat) 0.600000,
+ (GLfloat) - 0.400000, (GLfloat) - 0.170369, (GLfloat) - 0.500000,
+ (GLfloat) - 0.153738, (GLfloat) - 0.400000, (GLfloat) 0.600000,
+ (GLfloat) - 0.153738, (GLfloat) - 0.400000, (GLfloat) - 0.500000,
+ (GLfloat) 0.176887, (GLfloat) - 0.400000, (GLfloat) 0.600000,
+ (GLfloat) 0.176887, (GLfloat) - 0.400000, (GLfloat) - 0.500000,
+ (GLfloat) 0.400000, (GLfloat) - 0.163403, (GLfloat) 0.600000,
+ (GLfloat) 0.400000, (GLfloat) - 0.163403, (GLfloat) - 0.500000,
+ (GLfloat) 0.400000, (GLfloat) 0.167223, (GLfloat) 0.600000,
+ (GLfloat) 0.400000, (GLfloat) 0.167223, (GLfloat) - 0.500000,
+ (GLfloat) 0.169922, (GLfloat) 0.399000, (GLfloat) 0.600000,
+ (GLfloat) 0.169922, (GLfloat) 0.399000, (GLfloat) - 0.500000,
+ (GLfloat) - 0.160704, (GLfloat) 0.399000, (GLfloat) 0.500000,
+ (GLfloat) - 0.160704, (GLfloat) 0.399000, (GLfloat) - 0.600000,
+ (GLfloat) - 0.400000, (GLfloat) 0.160257, (GLfloat) - 0.600000,
+ (GLfloat) - 0.400000, (GLfloat) 0.160257, (GLfloat) 0.500000,
+ (GLfloat) - 0.400000, (GLfloat) - 0.170369, (GLfloat) - 0.600000,
+ (GLfloat) - 0.400000, (GLfloat) - 0.170369, (GLfloat) 0.500000,
+ (GLfloat) - 0.153738, (GLfloat) - 0.400000, (GLfloat) - 0.600000,
+ (GLfloat) - 0.153738, (GLfloat) - 0.400000, (GLfloat) 0.500000,
+ (GLfloat) 0.176887, (GLfloat) - 0.400000, (GLfloat) 0.500000,
+ (GLfloat) 0.176887, (GLfloat) - 0.400000, (GLfloat) - 0.600000,
+ (GLfloat) 0.400000, (GLfloat) - 0.163403, (GLfloat) 0.500000,
+ (GLfloat) 0.400000, (GLfloat) - 0.163403, (GLfloat) - 0.600000,
+ (GLfloat) 0.400000, (GLfloat) 0.167223, (GLfloat) - 0.600000,
+ (GLfloat) 0.400000, (GLfloat) 0.167223, (GLfloat) 0.500000,
+ (GLfloat) 0.169922, (GLfloat) 0.399000, (GLfloat) - 0.600000,
+ (GLfloat) 0.169922, (GLfloat) 0.399000, (GLfloat) 0.500000,
+};
+
+GLfloat Bolts3D_normals[] =
+{
+ (GLfloat) 0.000000, (GLfloat) 1.000000, (GLfloat) 0.000000,
+ (GLfloat) 0.709703, (GLfloat) 0.704502, (GLfloat) 0.000000,
+ (GLfloat) 1.000000, (GLfloat) - 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) 0.727535, (GLfloat) - 0.686070, (GLfloat) - 0.000000,
+ (GLfloat) 0.000000, (GLfloat) - 1.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.681980, (GLfloat) - 0.731370, (GLfloat) - 0.000000,
+ (GLfloat) - 1.000000, (GLfloat) - 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.706289, (GLfloat) 0.707924, (GLfloat) - 0.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 0.000000, (GLfloat) 1.000000, (GLfloat) 0.000000,
+ (GLfloat) 0.709703, (GLfloat) 0.704502, (GLfloat) 0.000000,
+ (GLfloat) 1.000000, (GLfloat) - 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) 0.727535, (GLfloat) - 0.686070, (GLfloat) - 0.000000,
+ (GLfloat) 0.000000, (GLfloat) - 1.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.681980, (GLfloat) - 0.731370, (GLfloat) - 0.000000,
+ (GLfloat) - 1.000000, (GLfloat) - 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.706289, (GLfloat) 0.707924, (GLfloat) - 0.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) - 1.000000,
+};
+
+unsigned short int Bolts3D_POLS[] =
+{
+ 4, 16, 31, 14, 0, 1, 4, 31, 29, 12, 14, 1, 4, 29, 26, 10, 12, 1, 4, 26,
+ 24, 8, 10, 1, 4, 24, 23, 6, 8, 1, 4, 23, 21, 4, 6, 1, 4, 21, 19, 2,
+ 4, 1, 4, 19, 16, 0, 2, 1, 8, 14, 12, 10, 8, 6, 4, 2, 0, 1, 4, 17,
+ 30, 15, 1, 1, 4, 30, 28, 13, 15, 1, 4, 28, 27, 11, 13, 1, 4, 27, 25, 9,
+ 11, 1, 4, 25, 22, 7, 9, 1, 4, 22, 20, 5, 7, 1, 4, 20, 18, 3, 5, 1,
+ 4, 18, 17, 1, 3, 1, 8, 30, 17, 18, 20, 22, 25, 27, 28, 1,
+ 0
+};
+
+struct lwo LWO_Bolts3D =
+{
+ 32, /* number of points */
+ Bolts3D_PNTS, Bolts3D_normals, Bolts3D_POLS, 0L
+};
+
+GLfloat GuageConnector_PNTS[] =
+{
+ (GLfloat) 0.200000, (GLfloat) 0.400000, (GLfloat) - 0.000000,
+ (GLfloat) 0.200000, (GLfloat) 0.800000, (GLfloat) - 0.000000,
+ (GLfloat) 0.193185, (GLfloat) 0.400000, (GLfloat) - 0.051764,
+ (GLfloat) 0.193185, (GLfloat) 0.800000, (GLfloat) - 0.051764,
+ (GLfloat) 0.173205, (GLfloat) 0.400000, (GLfloat) - 0.100000,
+ (GLfloat) 0.173205, (GLfloat) 0.800000, (GLfloat) - 0.100000,
+ (GLfloat) 0.141421, (GLfloat) 0.800000, (GLfloat) - 0.141421,
+ (GLfloat) 0.141421, (GLfloat) 0.400000, (GLfloat) - 0.141421,
+ (GLfloat) 0.100000, (GLfloat) 0.400000, (GLfloat) - 0.173205,
+ (GLfloat) 0.100000, (GLfloat) 0.800000, (GLfloat) - 0.173205,
+ (GLfloat) 0.051764, (GLfloat) 0.800000, (GLfloat) - 0.193185,
+ (GLfloat) 0.051764, (GLfloat) 0.400000, (GLfloat) - 0.193185,
+ (GLfloat) 0.000000, (GLfloat) 0.800000, (GLfloat) - 0.200000,
+ (GLfloat) 0.000000, (GLfloat) 0.400000, (GLfloat) - 0.200000,
+ (GLfloat) - 0.051764, (GLfloat) 0.800000, (GLfloat) - 0.193185,
+ (GLfloat) - 0.051764, (GLfloat) 0.400000, (GLfloat) - 0.193185,
+ (GLfloat) - 0.100000, (GLfloat) 0.800000, (GLfloat) - 0.173205,
+ (GLfloat) - 0.100000, (GLfloat) 0.400000, (GLfloat) - 0.173205,
+ (GLfloat) - 0.141421, (GLfloat) 0.400000, (GLfloat) - 0.141421,
+ (GLfloat) - 0.141421, (GLfloat) 0.800000, (GLfloat) - 0.141421,
+ (GLfloat) - 0.173205, (GLfloat) 0.800000, (GLfloat) - 0.100000,
+ (GLfloat) - 0.173205, (GLfloat) 0.400000, (GLfloat) - 0.100000,
+ (GLfloat) - 0.193185, (GLfloat) 0.400000, (GLfloat) - 0.051764,
+ (GLfloat) - 0.193185, (GLfloat) 0.800000, (GLfloat) - 0.051764,
+ (GLfloat) - 0.200000, (GLfloat) 0.400000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.200000, (GLfloat) 0.800000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.193185, (GLfloat) 0.400000, (GLfloat) 0.051764,
+ (GLfloat) - 0.193185, (GLfloat) 0.800000, (GLfloat) 0.051764,
+ (GLfloat) - 0.173205, (GLfloat) 0.400000, (GLfloat) 0.100000,
+ (GLfloat) - 0.173205, (GLfloat) 0.800000, (GLfloat) 0.100000,
+ (GLfloat) - 0.141421, (GLfloat) 0.800000, (GLfloat) 0.141421,
+ (GLfloat) - 0.141421, (GLfloat) 0.400000, (GLfloat) 0.141421,
+ (GLfloat) - 0.100000, (GLfloat) 0.800000, (GLfloat) 0.173205,
+ (GLfloat) - 0.100000, (GLfloat) 0.400000, (GLfloat) 0.173205,
+ (GLfloat) - 0.051764, (GLfloat) 0.800000, (GLfloat) 0.193185,
+ (GLfloat) - 0.051764, (GLfloat) 0.400000, (GLfloat) 0.193185,
+ (GLfloat) - 0.000000, (GLfloat) 0.800000, (GLfloat) 0.200000,
+ (GLfloat) - 0.000000, (GLfloat) 0.400000, (GLfloat) 0.200000,
+ (GLfloat) 0.051764, (GLfloat) 0.800000, (GLfloat) 0.193185,
+ (GLfloat) 0.051764, (GLfloat) 0.400000, (GLfloat) 0.193185,
+ (GLfloat) 0.100000, (GLfloat) 0.400000, (GLfloat) 0.173205,
+ (GLfloat) 0.100000, (GLfloat) 0.800000, (GLfloat) 0.173205,
+ (GLfloat) 0.141421, (GLfloat) 0.400000, (GLfloat) 0.141421,
+ (GLfloat) 0.141421, (GLfloat) 0.800000, (GLfloat) 0.141421,
+ (GLfloat) 0.173205, (GLfloat) 0.800000, (GLfloat) 0.100000,
+ (GLfloat) 0.173205, (GLfloat) 0.400000, (GLfloat) 0.100000,
+ (GLfloat) 0.193185, (GLfloat) 0.400000, (GLfloat) 0.051764,
+ (GLfloat) 0.193185, (GLfloat) 0.800000, (GLfloat) 0.051764,
+ (GLfloat) 0.200000, (GLfloat) 0.550000, (GLfloat) - 0.000000,
+ (GLfloat) 0.193185, (GLfloat) 0.550000, (GLfloat) - 0.051764,
+ (GLfloat) 0.173205, (GLfloat) 0.550000, (GLfloat) - 0.100000,
+ (GLfloat) 0.141421, (GLfloat) 0.550000, (GLfloat) - 0.141421,
+ (GLfloat) 0.100000, (GLfloat) 0.550000, (GLfloat) - 0.173205,
+ (GLfloat) 0.051764, (GLfloat) 0.550000, (GLfloat) - 0.193185,
+ (GLfloat) 0.000000, (GLfloat) 0.550000, (GLfloat) - 0.200000,
+ (GLfloat) - 0.051764, (GLfloat) 0.550000, (GLfloat) - 0.193185,
+ (GLfloat) - 0.100000, (GLfloat) 0.550000, (GLfloat) - 0.173205,
+ (GLfloat) - 0.141421, (GLfloat) 0.550000, (GLfloat) - 0.141421,
+ (GLfloat) - 0.173205, (GLfloat) 0.550000, (GLfloat) - 0.100000,
+ (GLfloat) - 0.193185, (GLfloat) 0.550000, (GLfloat) - 0.051764,
+ (GLfloat) - 0.200000, (GLfloat) 0.550000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.193185, (GLfloat) 0.550000, (GLfloat) 0.051764,
+ (GLfloat) - 0.173205, (GLfloat) 0.550000, (GLfloat) 0.100000,
+ (GLfloat) - 0.141421, (GLfloat) 0.550000, (GLfloat) 0.141421,
+ (GLfloat) - 0.100000, (GLfloat) 0.550000, (GLfloat) 0.173205,
+ (GLfloat) - 0.051764, (GLfloat) 0.550000, (GLfloat) 0.193185,
+ (GLfloat) - 0.000000, (GLfloat) 0.550000, (GLfloat) 0.200000,
+ (GLfloat) 0.051764, (GLfloat) 0.550000, (GLfloat) 0.193185,
+ (GLfloat) 0.100000, (GLfloat) 0.550000, (GLfloat) 0.173205,
+ (GLfloat) 0.141421, (GLfloat) 0.550000, (GLfloat) 0.141421,
+ (GLfloat) 0.173205, (GLfloat) 0.550000, (GLfloat) 0.100000,
+ (GLfloat) 0.193185, (GLfloat) 0.550000, (GLfloat) 0.051764,
+ (GLfloat) 0.150000, (GLfloat) 0.550000, (GLfloat) - 0.000000,
+ (GLfloat) 0.144889, (GLfloat) 0.550000, (GLfloat) - 0.038823,
+ (GLfloat) 0.129904, (GLfloat) 0.550000, (GLfloat) - 0.075000,
+ (GLfloat) 0.106066, (GLfloat) 0.550000, (GLfloat) - 0.106066,
+ (GLfloat) 0.075000, (GLfloat) 0.550000, (GLfloat) - 0.129904,
+ (GLfloat) 0.038823, (GLfloat) 0.550000, (GLfloat) - 0.144889,
+ (GLfloat) 0.000000, (GLfloat) 0.550000, (GLfloat) - 0.150000,
+ (GLfloat) - 0.038823, (GLfloat) 0.550000, (GLfloat) - 0.144889,
+ (GLfloat) - 0.075000, (GLfloat) 0.550000, (GLfloat) - 0.129904,
+ (GLfloat) - 0.106066, (GLfloat) 0.550000, (GLfloat) - 0.106066,
+ (GLfloat) - 0.129904, (GLfloat) 0.550000, (GLfloat) - 0.075000,
+ (GLfloat) - 0.144889, (GLfloat) 0.550000, (GLfloat) - 0.038823,
+ (GLfloat) - 0.150000, (GLfloat) 0.550000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.144889, (GLfloat) 0.550000, (GLfloat) 0.038823,
+ (GLfloat) - 0.129904, (GLfloat) 0.550000, (GLfloat) 0.075000,
+ (GLfloat) - 0.106066, (GLfloat) 0.550000, (GLfloat) 0.106066,
+ (GLfloat) - 0.075000, (GLfloat) 0.550000, (GLfloat) 0.129904,
+ (GLfloat) - 0.038823, (GLfloat) 0.550000, (GLfloat) 0.144889,
+ (GLfloat) - 0.000000, (GLfloat) 0.550000, (GLfloat) 0.150000,
+ (GLfloat) 0.038823, (GLfloat) 0.550000, (GLfloat) 0.144889,
+ (GLfloat) 0.075000, (GLfloat) 0.550000, (GLfloat) 0.129904,
+ (GLfloat) 0.106066, (GLfloat) 0.550000, (GLfloat) 0.106066,
+ (GLfloat) 0.129904, (GLfloat) 0.550000, (GLfloat) 0.075000,
+ (GLfloat) 0.144889, (GLfloat) 0.550000, (GLfloat) 0.038823,
+ (GLfloat) 0.150000, (GLfloat) 0.800000, (GLfloat) - 0.000000,
+ (GLfloat) 0.144889, (GLfloat) 0.800000, (GLfloat) - 0.038823,
+ (GLfloat) 0.129904, (GLfloat) 0.800000, (GLfloat) - 0.075000,
+ (GLfloat) 0.106066, (GLfloat) 0.800000, (GLfloat) - 0.106066,
+ (GLfloat) 0.075000, (GLfloat) 0.800000, (GLfloat) - 0.129904,
+ (GLfloat) 0.038823, (GLfloat) 0.800000, (GLfloat) - 0.144889,
+ (GLfloat) 0.000000, (GLfloat) 0.800000, (GLfloat) - 0.150000,
+ (GLfloat) - 0.038823, (GLfloat) 0.800000, (GLfloat) - 0.144889,
+ (GLfloat) - 0.075000, (GLfloat) 0.800000, (GLfloat) - 0.129904,
+ (GLfloat) - 0.106066, (GLfloat) 0.800000, (GLfloat) - 0.106066,
+ (GLfloat) - 0.129904, (GLfloat) 0.800000, (GLfloat) - 0.075000,
+ (GLfloat) - 0.144889, (GLfloat) 0.800000, (GLfloat) - 0.038823,
+ (GLfloat) - 0.150000, (GLfloat) 0.800000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.144889, (GLfloat) 0.800000, (GLfloat) 0.038823,
+ (GLfloat) - 0.129904, (GLfloat) 0.800000, (GLfloat) 0.075000,
+ (GLfloat) - 0.106066, (GLfloat) 0.800000, (GLfloat) 0.106066,
+ (GLfloat) - 0.075000, (GLfloat) 0.800000, (GLfloat) 0.129904,
+ (GLfloat) - 0.038823, (GLfloat) 0.800000, (GLfloat) 0.144889,
+ (GLfloat) - 0.000000, (GLfloat) 0.800000, (GLfloat) 0.150000,
+ (GLfloat) 0.038823, (GLfloat) 0.800000, (GLfloat) 0.144889,
+ (GLfloat) 0.075000, (GLfloat) 0.800000, (GLfloat) 0.129904,
+ (GLfloat) 0.106066, (GLfloat) 0.800000, (GLfloat) 0.106066,
+ (GLfloat) 0.129904, (GLfloat) 0.800000, (GLfloat) 0.075000,
+ (GLfloat) 0.144889, (GLfloat) 0.800000, (GLfloat) 0.038823,
+ (GLfloat) 0.200000, (GLfloat) 0.875988, (GLfloat) - 0.000000,
+ (GLfloat) 0.193185, (GLfloat) 0.872346, (GLfloat) - 0.051764,
+ (GLfloat) 0.191342, (GLfloat) 0.871360, (GLfloat) - 0.056214,
+ (GLfloat) 0.173205, (GLfloat) 0.865859, (GLfloat) - 0.100000,
+ (GLfloat) 0.141421, (GLfloat) 0.856217, (GLfloat) - 0.141421,
+ (GLfloat) 0.100000, (GLfloat) 0.843652, (GLfloat) - 0.173205,
+ (GLfloat) 0.097545, (GLfloat) 0.842907, (GLfloat) - 0.174222,
+ (GLfloat) 0.051764, (GLfloat) 0.838398, (GLfloat) - 0.193185,
+ (GLfloat) 0.000000, (GLfloat) 0.833300, (GLfloat) - 0.200000,
+ (GLfloat) - 0.051764, (GLfloat) 0.838398, (GLfloat) - 0.193185,
+ (GLfloat) - 0.097545, (GLfloat) 0.842907, (GLfloat) - 0.174222,
+ (GLfloat) - 0.100000, (GLfloat) 0.843652, (GLfloat) - 0.173205,
+ (GLfloat) - 0.141421, (GLfloat) 0.856217, (GLfloat) - 0.141421,
+ (GLfloat) - 0.173205, (GLfloat) 0.865859, (GLfloat) - 0.100000,
+ (GLfloat) - 0.191342, (GLfloat) 0.871360, (GLfloat) - 0.056214,
+ (GLfloat) - 0.193185, (GLfloat) 0.872346, (GLfloat) - 0.051764,
+ (GLfloat) - 0.200000, (GLfloat) 0.875988, (GLfloat) - 0.000000,
+ (GLfloat) - 0.193185, (GLfloat) 0.872346, (GLfloat) 0.051764,
+ (GLfloat) - 0.173205, (GLfloat) 0.865859, (GLfloat) 0.100000,
+ (GLfloat) - 0.191342, (GLfloat) 0.871360, (GLfloat) 0.056214,
+ (GLfloat) - 0.141421, (GLfloat) 0.856217, (GLfloat) 0.141421,
+ (GLfloat) - 0.100000, (GLfloat) 0.843652, (GLfloat) 0.173205,
+ (GLfloat) - 0.051764, (GLfloat) 0.838398, (GLfloat) 0.193185,
+ (GLfloat) - 0.097545, (GLfloat) 0.842907, (GLfloat) 0.174222,
+ (GLfloat) - 0.000000, (GLfloat) 0.833300, (GLfloat) 0.200000,
+ (GLfloat) 0.051764, (GLfloat) 0.838398, (GLfloat) 0.193185,
+ (GLfloat) 0.100000, (GLfloat) 0.843652, (GLfloat) 0.173205,
+ (GLfloat) 0.097545, (GLfloat) 0.842907, (GLfloat) 0.174222,
+ (GLfloat) 0.141421, (GLfloat) 0.856217, (GLfloat) 0.141421,
+ (GLfloat) 0.173205, (GLfloat) 0.865859, (GLfloat) 0.100000,
+ (GLfloat) 0.193185, (GLfloat) 0.872346, (GLfloat) 0.051764,
+ (GLfloat) 0.191342, (GLfloat) 0.871360, (GLfloat) 0.056214,
+};
+
+GLfloat GuageConnector_normals[] =
+{
+ (GLfloat) 0.991445, (GLfloat) 0.000000, (GLfloat) - 0.130526,
+ (GLfloat) 0.923880, (GLfloat) 0.000000, (GLfloat) - 0.382683,
+ (GLfloat) 0.793353, (GLfloat) 0.000000, (GLfloat) - 0.608761,
+ (GLfloat) 0.608761, (GLfloat) 0.000000, (GLfloat) - 0.793353,
+ (GLfloat) 0.382683, (GLfloat) 0.000000, (GLfloat) - 0.923880,
+ (GLfloat) 0.130526, (GLfloat) 0.000000, (GLfloat) - 0.991445,
+ (GLfloat) - 0.130526, (GLfloat) - 0.000000, (GLfloat) - 0.991445,
+ (GLfloat) - 0.382683, (GLfloat) - 0.000000, (GLfloat) - 0.923880,
+ (GLfloat) - 0.608761, (GLfloat) - 0.000000, (GLfloat) - 0.793353,
+ (GLfloat) - 0.793353, (GLfloat) - 0.000000, (GLfloat) - 0.608761,
+ (GLfloat) - 0.923880, (GLfloat) - 0.000000, (GLfloat) - 0.382683,
+ (GLfloat) - 0.991445, (GLfloat) - 0.000000, (GLfloat) - 0.130526,
+ (GLfloat) - 0.991445, (GLfloat) 0.000000, (GLfloat) 0.130526,
+ (GLfloat) - 0.923880, (GLfloat) 0.000000, (GLfloat) 0.382683,
+ (GLfloat) - 0.793353, (GLfloat) 0.000000, (GLfloat) 0.608761,
+ (GLfloat) - 0.608761, (GLfloat) 0.000000, (GLfloat) 0.793353,
+ (GLfloat) - 0.382683, (GLfloat) 0.000000, (GLfloat) 0.923880,
+ (GLfloat) - 0.130526, (GLfloat) 0.000000, (GLfloat) 0.991445,
+ (GLfloat) 0.130526, (GLfloat) 0.000000, (GLfloat) 0.991445,
+ (GLfloat) 0.382683, (GLfloat) 0.000000, (GLfloat) 0.923880,
+ (GLfloat) 0.608761, (GLfloat) 0.000000, (GLfloat) 0.793353,
+ (GLfloat) 0.793353, (GLfloat) 0.000000, (GLfloat) 0.608761,
+ (GLfloat) 0.923880, (GLfloat) 0.000000, (GLfloat) 0.382683,
+ (GLfloat) 0.991445, (GLfloat) 0.000000, (GLfloat) 0.130526,
+ (GLfloat) 0.991445, (GLfloat) 0.000000, (GLfloat) - 0.130526,
+ (GLfloat) 0.923880, (GLfloat) 0.000000, (GLfloat) - 0.382684,
+ (GLfloat) 0.793353, (GLfloat) 0.000000, (GLfloat) - 0.608761,
+ (GLfloat) 0.608761, (GLfloat) 0.000000, (GLfloat) - 0.793353,
+ (GLfloat) 0.382684, (GLfloat) 0.000000, (GLfloat) - 0.923880,
+ (GLfloat) 0.130526, (GLfloat) 0.000000, (GLfloat) - 0.991445,
+ (GLfloat) - 0.130526, (GLfloat) 0.000000, (GLfloat) - 0.991445,
+ (GLfloat) - 0.382684, (GLfloat) 0.000000, (GLfloat) - 0.923880,
+ (GLfloat) - 0.608761, (GLfloat) 0.000000, (GLfloat) - 0.793353,
+ (GLfloat) - 0.793353, (GLfloat) 0.000000, (GLfloat) - 0.608761,
+ (GLfloat) - 0.923880, (GLfloat) 0.000000, (GLfloat) - 0.382684,
+ (GLfloat) - 0.991445, (GLfloat) 0.000000, (GLfloat) - 0.130526,
+ (GLfloat) - 0.991445, (GLfloat) 0.000000, (GLfloat) 0.130526,
+ (GLfloat) - 0.923880, (GLfloat) 0.000000, (GLfloat) 0.382684,
+ (GLfloat) - 0.793353, (GLfloat) 0.000000, (GLfloat) 0.608761,
+ (GLfloat) - 0.608761, (GLfloat) 0.000000, (GLfloat) 0.793353,
+ (GLfloat) - 0.382684, (GLfloat) 0.000000, (GLfloat) 0.923880,
+ (GLfloat) - 0.130526, (GLfloat) 0.000000, (GLfloat) 0.991445,
+ (GLfloat) 0.130526, (GLfloat) - 0.000000, (GLfloat) 0.991445,
+ (GLfloat) 0.382684, (GLfloat) - 0.000000, (GLfloat) 0.923880,
+ (GLfloat) 0.608761, (GLfloat) - 0.000000, (GLfloat) 0.793353,
+ (GLfloat) 0.793353, (GLfloat) - 0.000000, (GLfloat) 0.608761,
+ (GLfloat) 0.923880, (GLfloat) - 0.000000, (GLfloat) 0.382684,
+ (GLfloat) 0.991445, (GLfloat) - 0.000000, (GLfloat) 0.130526,
+ (GLfloat) - 0.000000, (GLfloat) - 1.000000, (GLfloat) - 0.000000,
+ (GLfloat) 0.991445, (GLfloat) 0.000000, (GLfloat) - 0.130526,
+ (GLfloat) 0.923880, (GLfloat) 0.000000, (GLfloat) - 0.382684,
+ (GLfloat) 0.793353, (GLfloat) 0.000000, (GLfloat) - 0.608761,
+ (GLfloat) 0.608761, (GLfloat) 0.000000, (GLfloat) - 0.793353,
+ (GLfloat) 0.382684, (GLfloat) 0.000000, (GLfloat) - 0.923880,
+ (GLfloat) 0.130526, (GLfloat) 0.000000, (GLfloat) - 0.991445,
+ (GLfloat) - 0.130526, (GLfloat) 0.000000, (GLfloat) - 0.991445,
+ (GLfloat) - 0.382684, (GLfloat) 0.000000, (GLfloat) - 0.923880,
+ (GLfloat) - 0.608761, (GLfloat) 0.000000, (GLfloat) - 0.793353,
+ (GLfloat) - 0.793353, (GLfloat) 0.000000, (GLfloat) - 0.608761,
+ (GLfloat) - 0.923880, (GLfloat) 0.000000, (GLfloat) - 0.382684,
+ (GLfloat) - 0.991445, (GLfloat) 0.000000, (GLfloat) - 0.130526,
+ (GLfloat) - 0.991445, (GLfloat) 0.000000, (GLfloat) 0.130526,
+ (GLfloat) - 0.923880, (GLfloat) 0.000000, (GLfloat) 0.382684,
+ (GLfloat) - 0.793353, (GLfloat) 0.000000, (GLfloat) 0.608761,
+ (GLfloat) - 0.608761, (GLfloat) 0.000000, (GLfloat) 0.793353,
+ (GLfloat) - 0.382684, (GLfloat) 0.000000, (GLfloat) 0.923880,
+ (GLfloat) - 0.130526, (GLfloat) 0.000000, (GLfloat) 0.991445,
+ (GLfloat) 0.130526, (GLfloat) - 0.000000, (GLfloat) 0.991445,
+ (GLfloat) 0.382684, (GLfloat) - 0.000000, (GLfloat) 0.923880,
+ (GLfloat) 0.608761, (GLfloat) - 0.000000, (GLfloat) 0.793353,
+ (GLfloat) 0.793353, (GLfloat) - 0.000000, (GLfloat) 0.608761,
+ (GLfloat) 0.923880, (GLfloat) - 0.000000, (GLfloat) 0.382684,
+ (GLfloat) 0.991445, (GLfloat) - 0.000000, (GLfloat) 0.130526,
+ (GLfloat) - 0.000000, (GLfloat) 1.000000, (GLfloat) - 0.000000,
+};
+
+unsigned short int GuageConnector_POLS[] =
+{
+ 4, 1, 120, 121, 3, 1, 5, 3, 121, 122, 123, 5, 1, 4, 5, 123, 124, 6, 1, 4,
+6, 124, 125, 9, 1, 5, 9, 125, 126, 127, 10, 1, 4, 10, 127, 128, 12, 1, 4, 14,
+ 12, 128, 129, 1, 5, 16, 14, 129, 130, 131, 1, 4, 19, 16, 131, 132, 1, 4, 20, 19,
+ 132, 133, 1, 5, 23, 20, 133, 134, 135, 1, 4, 25, 23, 135, 136, 1, 4, 25, 136, 137,
+ 27, 1, 5, 27, 137, 139, 138, 29, 1, 4, 29, 138, 140, 30, 1, 4, 30, 140, 141, 32,
+ 1, 5, 32, 141, 143, 142, 34, 1, 4, 34, 142, 144, 36, 1, 4, 38, 36, 144, 145, 1,
+ 5, 41, 38, 145, 147, 146, 1, 4, 43, 41, 146, 148, 1, 4, 44, 43, 148, 149, 1, 5,
+47, 44, 149, 151, 150, 1, 4, 1, 47, 150, 120, 1, 4, 96, 97, 73, 72, 1, 4, 97,
+ 98, 74, 73, 1, 4, 98, 99, 75, 74, 1, 4, 99, 100, 76, 75, 1, 4, 100, 101, 77,
+76, 1, 4, 101, 102, 78, 77, 1, 4, 102, 103, 79, 78, 1, 4, 103, 104, 80, 79, 1,
+ 4, 104, 105, 81, 80, 1, 4, 105, 106, 82, 81, 1, 4, 106, 107, 83, 82, 1, 4, 107,
+ 108, 84, 83, 1, 4, 108, 109, 85, 84, 1, 4, 109, 110, 86, 85, 1, 4, 110, 111, 87,
+86, 1, 4, 111, 112, 88, 87, 1, 4, 112, 113, 89, 88, 1, 4, 113, 114, 90, 89, 1,
+ 4, 114, 115, 91, 90, 1, 4, 115, 116, 92, 91, 1, 4, 116, 117, 93, 92, 1, 4, 117,
+ 118, 94, 93, 1, 4, 118, 119, 95, 94, 1, 4, 119, 96, 72, 95, 1, 24, 1, 3, 5,
+6, 9, 10, 12, 14, 16, 19, 20, 23, 25, 27, 29, 30, 32, 34, 36, 38, 41, 43, 44,
+ 47, 1, 4, 48, 49, 2, 0, 1, 4, 49, 50, 4, 2, 1, 4, 50, 51, 7, 4, 1,
+ 4, 51, 52, 8, 7, 1, 4, 52, 53, 11, 8, 1, 4, 53, 54, 13, 11, 1, 4, 54,
+ 55, 15, 13, 1, 4, 55, 56, 17, 15, 1, 4, 56, 57, 18, 17, 1, 4, 57, 58, 21,
+ 18, 1, 4, 58, 59, 22, 21, 1, 4, 59, 60, 24, 22, 1, 4, 60, 61, 26, 24, 1,
+ 4, 61, 62, 28, 26, 1, 4, 62, 63, 31, 28, 1, 4, 63, 64, 33, 31, 1, 4, 64,
+ 65, 35, 33, 1, 4, 65, 66, 37, 35, 1, 4, 66, 67, 39, 37, 1, 4, 67, 68, 40,
+ 39, 1, 4, 68, 69, 42, 40, 1, 4, 69, 70, 45, 42, 1, 4, 70, 71, 46, 45, 1,
+ 4, 71, 48, 0, 46, 1, 24, 48, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60,
+ 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 1,
+ 0
+};
+
+struct lwo LWO_GuageConnector =
+{
+ 152, /* number of points */
+ GuageConnector_PNTS, GuageConnector_normals, GuageConnector_POLS, 0L
+};
+
+GLfloat GuageDial_PNTS[] =
+{
+ (GLfloat) 0.000000, (GLfloat) 0.050000, (GLfloat) 0.300000,
+ (GLfloat) 0.019134, (GLfloat) 0.046194, (GLfloat) 0.300000,
+ (GLfloat) 0.035355, (GLfloat) 0.035355, (GLfloat) 0.300000,
+ (GLfloat) 0.046194, (GLfloat) 0.019134, (GLfloat) 0.300000,
+ (GLfloat) 0.050000, (GLfloat) - 0.000000, (GLfloat) 0.300000,
+ (GLfloat) 0.046194, (GLfloat) - 0.019134, (GLfloat) 0.300000,
+ (GLfloat) 0.035355, (GLfloat) - 0.035400, (GLfloat) 0.275000,
+ (GLfloat) 0.035355, (GLfloat) - 0.035400, (GLfloat) 0.300000,
+ (GLfloat) 0.019134, (GLfloat) - 0.046200, (GLfloat) 0.300000,
+ (GLfloat) 0.000000, (GLfloat) - 0.050000, (GLfloat) 0.300000,
+ (GLfloat) - 0.019134, (GLfloat) - 0.046200, (GLfloat) 0.300000,
+ (GLfloat) - 0.035355, (GLfloat) - 0.035400, (GLfloat) 0.275000,
+ (GLfloat) - 0.035355, (GLfloat) - 0.035400, (GLfloat) 0.300000,
+ (GLfloat) - 0.046194, (GLfloat) - 0.019134, (GLfloat) 0.300000,
+ (GLfloat) - 0.050000, (GLfloat) - 0.000000, (GLfloat) 0.300000,
+ (GLfloat) - 0.046194, (GLfloat) 0.019134, (GLfloat) 0.300000,
+ (GLfloat) - 0.035355, (GLfloat) 0.035355, (GLfloat) 0.300000,
+ (GLfloat) - 0.019134, (GLfloat) 0.046194, (GLfloat) 0.300000,
+ (GLfloat) 0.000000, (GLfloat) 0.050000, (GLfloat) 0.200000,
+ (GLfloat) 0.019134, (GLfloat) 0.046194, (GLfloat) 0.200000,
+ (GLfloat) 0.035355, (GLfloat) 0.035355, (GLfloat) 0.200000,
+ (GLfloat) 0.046194, (GLfloat) 0.019134, (GLfloat) 0.200000,
+ (GLfloat) 0.050000, (GLfloat) - 0.000000, (GLfloat) 0.200000,
+ (GLfloat) 0.046194, (GLfloat) - 0.019134, (GLfloat) 0.200000,
+ (GLfloat) 0.035355, (GLfloat) - 0.035355, (GLfloat) 0.200000,
+ (GLfloat) 0.019134, (GLfloat) - 0.046194, (GLfloat) 0.200000,
+ (GLfloat) 0.000000, (GLfloat) - 0.050000, (GLfloat) 0.200000,
+ (GLfloat) - 0.019134, (GLfloat) - 0.046194, (GLfloat) 0.200000,
+ (GLfloat) - 0.035355, (GLfloat) - 0.035355, (GLfloat) 0.200000,
+ (GLfloat) - 0.046194, (GLfloat) - 0.019134, (GLfloat) 0.200000,
+ (GLfloat) - 0.050000, (GLfloat) - 0.000000, (GLfloat) 0.200000,
+ (GLfloat) - 0.046194, (GLfloat) 0.019134, (GLfloat) 0.200000,
+ (GLfloat) - 0.035355, (GLfloat) 0.035355, (GLfloat) 0.200000,
+ (GLfloat) - 0.019134, (GLfloat) 0.046194, (GLfloat) 0.200000,
+ (GLfloat) 0.000000, (GLfloat) - 0.373300, (GLfloat) 0.275000,
+};
+
+GLfloat GuageDial_normals[] =
+{
+ (GLfloat) - 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 0.195089, (GLfloat) 0.980786, (GLfloat) 0.000000,
+ (GLfloat) 0.555570, (GLfloat) 0.831470, (GLfloat) 0.000000,
+ (GLfloat) 0.831470, (GLfloat) 0.555570, (GLfloat) 0.000000,
+ (GLfloat) 0.980785, (GLfloat) 0.195090, (GLfloat) 0.000000,
+ (GLfloat) 0.980785, (GLfloat) - 0.195090, (GLfloat) - 0.000000,
+ (GLfloat) 0.831470, (GLfloat) - 0.555570, (GLfloat) - 0.000248,
+ (GLfloat) 0.555570, (GLfloat) - 0.831470, (GLfloat) - 0.000051,
+ (GLfloat) 0.195089, (GLfloat) - 0.980786, (GLfloat) - 0.000000,
+ (GLfloat) - 0.195089, (GLfloat) - 0.980786, (GLfloat) - 0.000060,
+ (GLfloat) - 0.555570, (GLfloat) - 0.831470, (GLfloat) - 0.000371,
+ (GLfloat) - 0.831470, (GLfloat) - 0.555570, (GLfloat) - 0.000000,
+ (GLfloat) - 0.980785, (GLfloat) - 0.195090, (GLfloat) - 0.000000,
+ (GLfloat) - 0.980785, (GLfloat) 0.195090, (GLfloat) - 0.000000,
+ (GLfloat) - 0.831470, (GLfloat) 0.555570, (GLfloat) - 0.000000,
+ (GLfloat) - 0.555570, (GLfloat) 0.831470, (GLfloat) - 0.000000,
+ (GLfloat) - 0.195089, (GLfloat) 0.980786, (GLfloat) - 0.000000,
+};
+
+unsigned short int GuageDial_POLS[] =
+{
+ 3, 11, 6, 34, 1, 16, 0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 12, 13, 14, 15,
+ 16, 17, 1, 4, 18, 19, 1, 0, 1, 4, 19, 20, 2, 1, 1, 4, 20, 21, 3, 2,
+ 1, 4, 21, 22, 4, 3, 1, 4, 22, 23, 5, 4, 1, 4, 23, 24, 7, 5, 1, 4,
+ 24, 25, 8, 7, 1, 4, 25, 26, 9, 8, 1, 4, 26, 27, 10, 9, 1, 4, 27, 28,
+ 12, 10, 1, 4, 28, 29, 13, 12, 1, 4, 29, 30, 14, 13, 1, 4, 30, 31, 15, 14,
+ 1, 4, 31, 32, 16, 15, 1, 4, 32, 33, 17, 16, 1, 4, 33, 18, 0, 17, 1,
+ 0
+};
+
+struct lwo LWO_GuageDial =
+{
+ 35, /* number of points */
+ GuageDial_PNTS, GuageDial_normals, GuageDial_POLS, 0L
+};
+
+GLfloat GuageFace_PNTS[] =
+{
+ (GLfloat) 0.000000, (GLfloat) 1.783300, (GLfloat) 0.200000,
+ (GLfloat) - 0.087791, (GLfloat) 1.774653, (GLfloat) 0.200000,
+ (GLfloat) - 0.172208, (GLfloat) 1.749046, (GLfloat) 0.200000,
+ (GLfloat) - 0.250007, (GLfloat) 1.707461, (GLfloat) 0.200000,
+ (GLfloat) - 0.318198, (GLfloat) 1.651498, (GLfloat) 0.200000,
+ (GLfloat) - 0.374161, (GLfloat) 1.583307, (GLfloat) 0.200000,
+ (GLfloat) - 0.415746, (GLfloat) 1.505508, (GLfloat) 0.200000,
+ (GLfloat) - 0.441353, (GLfloat) 1.421091, (GLfloat) 0.200000,
+ (GLfloat) - 0.450000, (GLfloat) 1.333300, (GLfloat) 0.200000,
+ (GLfloat) - 0.441353, (GLfloat) 1.245509, (GLfloat) 0.200000,
+ (GLfloat) - 0.415746, (GLfloat) 1.161092, (GLfloat) 0.200000,
+ (GLfloat) - 0.374161, (GLfloat) 1.083293, (GLfloat) 0.200000,
+ (GLfloat) - 0.318198, (GLfloat) 1.015102, (GLfloat) 0.200000,
+ (GLfloat) - 0.250007, (GLfloat) 0.959139, (GLfloat) 0.200000,
+ (GLfloat) - 0.172208, (GLfloat) 0.917554, (GLfloat) 0.200000,
+ (GLfloat) - 0.087791, (GLfloat) 0.891947, (GLfloat) 0.200000,
+ (GLfloat) 0.000000, (GLfloat) 0.883300, (GLfloat) 0.200000,
+ (GLfloat) 0.087791, (GLfloat) 0.891947, (GLfloat) 0.200000,
+ (GLfloat) 0.172208, (GLfloat) 0.917554, (GLfloat) 0.200000,
+ (GLfloat) 0.250007, (GLfloat) 0.959139, (GLfloat) 0.200000,
+ (GLfloat) 0.318198, (GLfloat) 1.015102, (GLfloat) 0.200000,
+ (GLfloat) 0.374161, (GLfloat) 1.083293, (GLfloat) 0.200000,
+ (GLfloat) 0.415746, (GLfloat) 1.161092, (GLfloat) 0.200000,
+ (GLfloat) 0.441353, (GLfloat) 1.245509, (GLfloat) 0.200000,
+ (GLfloat) 0.450000, (GLfloat) 1.333300, (GLfloat) 0.200000,
+ (GLfloat) 0.441353, (GLfloat) 1.421091, (GLfloat) 0.200000,
+ (GLfloat) 0.415746, (GLfloat) 1.505508, (GLfloat) 0.200000,
+ (GLfloat) 0.374161, (GLfloat) 1.583307, (GLfloat) 0.200000,
+ (GLfloat) 0.318198, (GLfloat) 1.651498, (GLfloat) 0.200000,
+ (GLfloat) 0.250007, (GLfloat) 1.707461, (GLfloat) 0.200000,
+ (GLfloat) 0.172208, (GLfloat) 1.749046, (GLfloat) 0.200000,
+ (GLfloat) 0.087791, (GLfloat) 1.774653, (GLfloat) 0.200000,
+};
+
+GLfloat GuageFace_normals[] =
+{
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+};
+
+unsigned short int GuageFace_POLS[] =
+{
+32, 0, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14,
+ 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 1,
+ 0
+};
+
+struct lwo LWO_GuageFace =
+{
+ 32, /* number of points */
+ GuageFace_PNTS, GuageFace_normals, GuageFace_POLS, 0L
+};
+
+GLfloat GuageHead_PNTS[] =
+{
+ (GLfloat) 0.000000, (GLfloat) 1.833300, (GLfloat) 0.333330,
+ (GLfloat) 0.097545, (GLfloat) 1.823693, (GLfloat) 0.333330,
+ (GLfloat) 0.191342, (GLfloat) 1.795240, (GLfloat) 0.333330,
+ (GLfloat) 0.277785, (GLfloat) 1.749035, (GLfloat) 0.333330,
+ (GLfloat) 0.353553, (GLfloat) 1.686853, (GLfloat) 0.333330,
+ (GLfloat) 0.415735, (GLfloat) 1.611085, (GLfloat) 0.333330,
+ (GLfloat) 0.461940, (GLfloat) 1.524642, (GLfloat) 0.333330,
+ (GLfloat) 0.490393, (GLfloat) 1.430845, (GLfloat) 0.333330,
+ (GLfloat) 0.500000, (GLfloat) 1.333300, (GLfloat) 0.333330,
+ (GLfloat) 0.490393, (GLfloat) 1.235755, (GLfloat) 0.333330,
+ (GLfloat) 0.461940, (GLfloat) 1.141958, (GLfloat) 0.333330,
+ (GLfloat) 0.415735, (GLfloat) 1.055515, (GLfloat) 0.333330,
+ (GLfloat) 0.353553, (GLfloat) 0.979747, (GLfloat) 0.333330,
+ (GLfloat) 0.277785, (GLfloat) 0.917565, (GLfloat) 0.333330,
+ (GLfloat) 0.191342, (GLfloat) 0.871360, (GLfloat) 0.333330,
+ (GLfloat) 0.097545, (GLfloat) 0.842907, (GLfloat) 0.333330,
+ (GLfloat) 0.000000, (GLfloat) 0.833300, (GLfloat) 0.333330,
+ (GLfloat) - 0.097545, (GLfloat) 0.842907, (GLfloat) 0.333330,
+ (GLfloat) - 0.191342, (GLfloat) 0.871360, (GLfloat) 0.333330,
+ (GLfloat) - 0.277785, (GLfloat) 0.917565, (GLfloat) 0.333330,
+ (GLfloat) - 0.353553, (GLfloat) 0.979747, (GLfloat) 0.333330,
+ (GLfloat) - 0.415735, (GLfloat) 1.055515, (GLfloat) 0.333330,
+ (GLfloat) - 0.461940, (GLfloat) 1.141958, (GLfloat) 0.333330,
+ (GLfloat) - 0.490393, (GLfloat) 1.235755, (GLfloat) 0.333330,
+ (GLfloat) - 0.500000, (GLfloat) 1.333300, (GLfloat) 0.333330,
+ (GLfloat) - 0.490393, (GLfloat) 1.430845, (GLfloat) 0.333330,
+ (GLfloat) - 0.461940, (GLfloat) 1.524642, (GLfloat) 0.333330,
+ (GLfloat) - 0.415735, (GLfloat) 1.611085, (GLfloat) 0.333330,
+ (GLfloat) - 0.353553, (GLfloat) 1.686853, (GLfloat) 0.333330,
+ (GLfloat) - 0.277785, (GLfloat) 1.749035, (GLfloat) 0.333330,
+ (GLfloat) - 0.191342, (GLfloat) 1.795240, (GLfloat) 0.333330,
+ (GLfloat) - 0.097545, (GLfloat) 1.823693, (GLfloat) 0.333330,
+ (GLfloat) 0.000000, (GLfloat) 1.833300, (GLfloat) - 0.333330,
+ (GLfloat) 0.097545, (GLfloat) 1.823693, (GLfloat) - 0.333330,
+ (GLfloat) 0.191342, (GLfloat) 1.795240, (GLfloat) - 0.333330,
+ (GLfloat) 0.277785, (GLfloat) 1.749035, (GLfloat) - 0.333330,
+ (GLfloat) 0.353553, (GLfloat) 1.686853, (GLfloat) - 0.333330,
+ (GLfloat) 0.415735, (GLfloat) 1.611085, (GLfloat) - 0.333330,
+ (GLfloat) 0.461940, (GLfloat) 1.524642, (GLfloat) - 0.333330,
+ (GLfloat) 0.490393, (GLfloat) 1.430845, (GLfloat) - 0.333330,
+ (GLfloat) 0.500000, (GLfloat) 1.333300, (GLfloat) - 0.333330,
+ (GLfloat) 0.490393, (GLfloat) 1.235755, (GLfloat) - 0.333330,
+ (GLfloat) 0.461940, (GLfloat) 1.141958, (GLfloat) - 0.333330,
+ (GLfloat) 0.415735, (GLfloat) 1.055515, (GLfloat) - 0.333330,
+ (GLfloat) 0.353553, (GLfloat) 0.979747, (GLfloat) - 0.333330,
+ (GLfloat) 0.277785, (GLfloat) 0.917565, (GLfloat) - 0.333330,
+ (GLfloat) 0.191342, (GLfloat) 0.871360, (GLfloat) - 0.333330,
+ (GLfloat) 0.097545, (GLfloat) 0.842907, (GLfloat) - 0.333330,
+ (GLfloat) 0.000000, (GLfloat) 0.833300, (GLfloat) - 0.333330,
+ (GLfloat) - 0.097545, (GLfloat) 0.842907, (GLfloat) - 0.333330,
+ (GLfloat) - 0.191342, (GLfloat) 0.871360, (GLfloat) - 0.333330,
+ (GLfloat) - 0.277785, (GLfloat) 0.917565, (GLfloat) - 0.333330,
+ (GLfloat) - 0.353553, (GLfloat) 0.979747, (GLfloat) - 0.333330,
+ (GLfloat) - 0.415735, (GLfloat) 1.055515, (GLfloat) - 0.333330,
+ (GLfloat) - 0.461940, (GLfloat) 1.141958, (GLfloat) - 0.333330,
+ (GLfloat) - 0.490393, (GLfloat) 1.235755, (GLfloat) - 0.333330,
+ (GLfloat) - 0.500000, (GLfloat) 1.333300, (GLfloat) - 0.333330,
+ (GLfloat) - 0.490393, (GLfloat) 1.430845, (GLfloat) - 0.333330,
+ (GLfloat) - 0.461940, (GLfloat) 1.524642, (GLfloat) - 0.333330,
+ (GLfloat) - 0.415735, (GLfloat) 1.611085, (GLfloat) - 0.333330,
+ (GLfloat) - 0.353553, (GLfloat) 1.686853, (GLfloat) - 0.333330,
+ (GLfloat) - 0.277785, (GLfloat) 1.749035, (GLfloat) - 0.333330,
+ (GLfloat) - 0.191342, (GLfloat) 1.795240, (GLfloat) - 0.333330,
+ (GLfloat) - 0.097545, (GLfloat) 1.823693, (GLfloat) - 0.333330,
+ (GLfloat) 0.087791, (GLfloat) 1.774653, (GLfloat) 0.333330,
+ (GLfloat) 0.000000, (GLfloat) 1.783300, (GLfloat) 0.333330,
+ (GLfloat) 0.172208, (GLfloat) 1.749046, (GLfloat) 0.333330,
+ (GLfloat) 0.250007, (GLfloat) 1.707461, (GLfloat) 0.333330,
+ (GLfloat) 0.318198, (GLfloat) 1.651498, (GLfloat) 0.333330,
+ (GLfloat) 0.374161, (GLfloat) 1.583307, (GLfloat) 0.333330,
+ (GLfloat) 0.415746, (GLfloat) 1.505508, (GLfloat) 0.333330,
+ (GLfloat) 0.441353, (GLfloat) 1.421091, (GLfloat) 0.333330,
+ (GLfloat) 0.450000, (GLfloat) 1.333300, (GLfloat) 0.333330,
+ (GLfloat) 0.441353, (GLfloat) 1.245509, (GLfloat) 0.333330,
+ (GLfloat) 0.415746, (GLfloat) 1.161092, (GLfloat) 0.333330,
+ (GLfloat) 0.374161, (GLfloat) 1.083293, (GLfloat) 0.333330,
+ (GLfloat) 0.318198, (GLfloat) 1.015102, (GLfloat) 0.333330,
+ (GLfloat) 0.250007, (GLfloat) 0.959139, (GLfloat) 0.333330,
+ (GLfloat) 0.172208, (GLfloat) 0.917554, (GLfloat) 0.333330,
+ (GLfloat) 0.087791, (GLfloat) 0.891947, (GLfloat) 0.333330,
+ (GLfloat) 0.000000, (GLfloat) 0.883300, (GLfloat) 0.333330,
+ (GLfloat) - 0.087791, (GLfloat) 0.891947, (GLfloat) 0.333330,
+ (GLfloat) - 0.172208, (GLfloat) 0.917554, (GLfloat) 0.333330,
+ (GLfloat) - 0.250007, (GLfloat) 0.959139, (GLfloat) 0.333330,
+ (GLfloat) - 0.318198, (GLfloat) 1.015102, (GLfloat) 0.333330,
+ (GLfloat) - 0.374161, (GLfloat) 1.083293, (GLfloat) 0.333330,
+ (GLfloat) - 0.415746, (GLfloat) 1.161092, (GLfloat) 0.333330,
+ (GLfloat) - 0.441353, (GLfloat) 1.245509, (GLfloat) 0.333330,
+ (GLfloat) - 0.450000, (GLfloat) 1.333300, (GLfloat) 0.333330,
+ (GLfloat) - 0.441353, (GLfloat) 1.421091, (GLfloat) 0.333330,
+ (GLfloat) - 0.415746, (GLfloat) 1.505508, (GLfloat) 0.333330,
+ (GLfloat) - 0.374161, (GLfloat) 1.583307, (GLfloat) 0.333330,
+ (GLfloat) - 0.318198, (GLfloat) 1.651498, (GLfloat) 0.333330,
+ (GLfloat) - 0.250007, (GLfloat) 1.707461, (GLfloat) 0.333330,
+ (GLfloat) - 0.172208, (GLfloat) 1.749046, (GLfloat) 0.333330,
+ (GLfloat) - 0.087791, (GLfloat) 1.774653, (GLfloat) 0.333330,
+ (GLfloat) 0.000000, (GLfloat) 1.783300, (GLfloat) 0.200000,
+ (GLfloat) - 0.087791, (GLfloat) 1.774653, (GLfloat) 0.200000,
+ (GLfloat) - 0.172208, (GLfloat) 1.749046, (GLfloat) 0.200000,
+ (GLfloat) - 0.250007, (GLfloat) 1.707461, (GLfloat) 0.200000,
+ (GLfloat) - 0.318198, (GLfloat) 1.651498, (GLfloat) 0.200000,
+ (GLfloat) - 0.374161, (GLfloat) 1.583307, (GLfloat) 0.200000,
+ (GLfloat) - 0.415746, (GLfloat) 1.505508, (GLfloat) 0.200000,
+ (GLfloat) - 0.441353, (GLfloat) 1.421091, (GLfloat) 0.200000,
+ (GLfloat) - 0.450000, (GLfloat) 1.333300, (GLfloat) 0.200000,
+ (GLfloat) - 0.441353, (GLfloat) 1.245509, (GLfloat) 0.200000,
+ (GLfloat) - 0.415746, (GLfloat) 1.161092, (GLfloat) 0.200000,
+ (GLfloat) - 0.374161, (GLfloat) 1.083293, (GLfloat) 0.200000,
+ (GLfloat) - 0.318198, (GLfloat) 1.015102, (GLfloat) 0.200000,
+ (GLfloat) - 0.250007, (GLfloat) 0.959139, (GLfloat) 0.200000,
+ (GLfloat) - 0.172208, (GLfloat) 0.917554, (GLfloat) 0.200000,
+ (GLfloat) - 0.087791, (GLfloat) 0.891947, (GLfloat) 0.200000,
+ (GLfloat) 0.000000, (GLfloat) 0.883300, (GLfloat) 0.200000,
+ (GLfloat) 0.087791, (GLfloat) 0.891947, (GLfloat) 0.200000,
+ (GLfloat) 0.172208, (GLfloat) 0.917554, (GLfloat) 0.200000,
+ (GLfloat) 0.250007, (GLfloat) 0.959139, (GLfloat) 0.200000,
+ (GLfloat) 0.318198, (GLfloat) 1.015102, (GLfloat) 0.200000,
+ (GLfloat) 0.374161, (GLfloat) 1.083293, (GLfloat) 0.200000,
+ (GLfloat) 0.415746, (GLfloat) 1.161092, (GLfloat) 0.200000,
+ (GLfloat) 0.441353, (GLfloat) 1.245509, (GLfloat) 0.200000,
+ (GLfloat) 0.450000, (GLfloat) 1.333300, (GLfloat) 0.200000,
+ (GLfloat) 0.441353, (GLfloat) 1.421091, (GLfloat) 0.200000,
+ (GLfloat) 0.415746, (GLfloat) 1.505508, (GLfloat) 0.200000,
+ (GLfloat) 0.374161, (GLfloat) 1.583307, (GLfloat) 0.200000,
+ (GLfloat) 0.318198, (GLfloat) 1.651498, (GLfloat) 0.200000,
+ (GLfloat) 0.250007, (GLfloat) 1.707461, (GLfloat) 0.200000,
+ (GLfloat) 0.172208, (GLfloat) 1.749046, (GLfloat) 0.200000,
+ (GLfloat) 0.087791, (GLfloat) 1.774653, (GLfloat) 0.200000,
+};
+
+GLfloat GuageHead_normals[] =
+{
+ (GLfloat) 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 0.098017, (GLfloat) - 0.995185, (GLfloat) - 0.000000,
+ (GLfloat) 0.290285, (GLfloat) - 0.956940, (GLfloat) - 0.000000,
+ (GLfloat) 0.471397, (GLfloat) - 0.881921, (GLfloat) - 0.000000,
+ (GLfloat) 0.634393, (GLfloat) - 0.773010, (GLfloat) - 0.000000,
+ (GLfloat) 0.773011, (GLfloat) - 0.634393, (GLfloat) - 0.000000,
+ (GLfloat) 0.881921, (GLfloat) - 0.471397, (GLfloat) - 0.000000,
+ (GLfloat) 0.956940, (GLfloat) - 0.290284, (GLfloat) - 0.000000,
+ (GLfloat) 0.995185, (GLfloat) - 0.098017, (GLfloat) - 0.000000,
+ (GLfloat) 0.995185, (GLfloat) 0.098017, (GLfloat) 0.000000,
+ (GLfloat) 0.956940, (GLfloat) 0.290284, (GLfloat) 0.000000,
+ (GLfloat) 0.881921, (GLfloat) 0.471397, (GLfloat) 0.000000,
+ (GLfloat) 0.773011, (GLfloat) 0.634393, (GLfloat) 0.000000,
+ (GLfloat) 0.634393, (GLfloat) 0.773011, (GLfloat) 0.000000,
+ (GLfloat) 0.471397, (GLfloat) 0.881921, (GLfloat) 0.000000,
+ (GLfloat) 0.290285, (GLfloat) 0.956940, (GLfloat) 0.000000,
+ (GLfloat) 0.098017, (GLfloat) 0.995185, (GLfloat) 0.000000,
+ (GLfloat) - 0.098017, (GLfloat) 0.995185, (GLfloat) - 0.000000,
+ (GLfloat) - 0.290285, (GLfloat) 0.956940, (GLfloat) - 0.000000,
+ (GLfloat) - 0.471397, (GLfloat) 0.881921, (GLfloat) - 0.000000,
+ (GLfloat) - 0.634393, (GLfloat) 0.773011, (GLfloat) - 0.000000,
+ (GLfloat) - 0.773011, (GLfloat) 0.634393, (GLfloat) - 0.000000,
+ (GLfloat) - 0.881921, (GLfloat) 0.471397, (GLfloat) - 0.000000,
+ (GLfloat) - 0.956940, (GLfloat) 0.290284, (GLfloat) - 0.000000,
+ (GLfloat) - 0.995185, (GLfloat) 0.098017, (GLfloat) - 0.000000,
+ (GLfloat) - 0.995185, (GLfloat) - 0.098017, (GLfloat) - 0.000000,
+ (GLfloat) - 0.956940, (GLfloat) - 0.290284, (GLfloat) - 0.000000,
+ (GLfloat) - 0.881921, (GLfloat) - 0.471397, (GLfloat) - 0.000000,
+ (GLfloat) - 0.773011, (GLfloat) - 0.634393, (GLfloat) - 0.000000,
+ (GLfloat) - 0.634393, (GLfloat) - 0.773010, (GLfloat) - 0.000000,
+ (GLfloat) - 0.471397, (GLfloat) - 0.881921, (GLfloat) - 0.000000,
+ (GLfloat) - 0.290285, (GLfloat) - 0.956940, (GLfloat) - 0.000000,
+ (GLfloat) - 0.098017, (GLfloat) - 0.995185, (GLfloat) - 0.000000,
+ (GLfloat) 0.098017, (GLfloat) 0.995185, (GLfloat) 0.000000,
+ (GLfloat) 0.290285, (GLfloat) 0.956940, (GLfloat) 0.000000,
+ (GLfloat) 0.471397, (GLfloat) 0.881921, (GLfloat) 0.000000,
+ (GLfloat) 0.634393, (GLfloat) 0.773011, (GLfloat) 0.000000,
+ (GLfloat) 0.773011, (GLfloat) 0.634393, (GLfloat) 0.000000,
+ (GLfloat) 0.881921, (GLfloat) 0.471397, (GLfloat) 0.000000,
+ (GLfloat) 0.956940, (GLfloat) 0.290284, (GLfloat) 0.000000,
+ (GLfloat) 0.995185, (GLfloat) 0.098017, (GLfloat) 0.000000,
+ (GLfloat) 0.995185, (GLfloat) - 0.098017, (GLfloat) - 0.000000,
+ (GLfloat) 0.956940, (GLfloat) - 0.290284, (GLfloat) - 0.000000,
+ (GLfloat) 0.881921, (GLfloat) - 0.471397, (GLfloat) - 0.000000,
+ (GLfloat) 0.773011, (GLfloat) - 0.634393, (GLfloat) - 0.000000,
+ (GLfloat) 0.634393, (GLfloat) - 0.773010, (GLfloat) - 0.000000,
+ (GLfloat) 0.471396, (GLfloat) - 0.881921, (GLfloat) - 0.000000,
+ (GLfloat) 0.290285, (GLfloat) - 0.956940, (GLfloat) - 0.000000,
+ (GLfloat) 0.098017, (GLfloat) - 0.995185, (GLfloat) - 0.000000,
+ (GLfloat) - 0.098017, (GLfloat) - 0.995185, (GLfloat) - 0.000000,
+ (GLfloat) - 0.290285, (GLfloat) - 0.956940, (GLfloat) - 0.000000,
+ (GLfloat) - 0.471396, (GLfloat) - 0.881921, (GLfloat) - 0.000000,
+ (GLfloat) - 0.634393, (GLfloat) - 0.773010, (GLfloat) - 0.000000,
+ (GLfloat) - 0.773011, (GLfloat) - 0.634393, (GLfloat) - 0.000000,
+ (GLfloat) - 0.881921, (GLfloat) - 0.471397, (GLfloat) - 0.000000,
+ (GLfloat) - 0.956940, (GLfloat) - 0.290284, (GLfloat) - 0.000000,
+ (GLfloat) - 0.995185, (GLfloat) - 0.098017, (GLfloat) - 0.000000,
+ (GLfloat) - 0.995185, (GLfloat) 0.098017, (GLfloat) - 0.000000,
+ (GLfloat) - 0.956940, (GLfloat) 0.290284, (GLfloat) - 0.000000,
+ (GLfloat) - 0.881921, (GLfloat) 0.471397, (GLfloat) - 0.000000,
+ (GLfloat) - 0.773011, (GLfloat) 0.634393, (GLfloat) - 0.000000,
+ (GLfloat) - 0.634393, (GLfloat) 0.773011, (GLfloat) - 0.000000,
+ (GLfloat) - 0.471397, (GLfloat) 0.881921, (GLfloat) - 0.000000,
+ (GLfloat) - 0.290285, (GLfloat) 0.956940, (GLfloat) - 0.000000,
+ (GLfloat) - 0.098017, (GLfloat) 0.995185, (GLfloat) - 0.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) - 1.000000,
+};
+
+unsigned short int GuageHead_POLS[] =
+{
+ 3, 67, 3, 4, 1, 3, 68, 67, 4, 1, 3, 68, 4, 5, 1, 3, 69, 68, 5, 1,
+ 3, 70, 69, 5, 1, 3, 70, 5, 6, 1, 3, 70, 6, 7, 1, 3, 71, 70, 7, 1,
+ 3, 71, 7, 8, 1, 3, 72, 71, 8, 1, 3, 73, 72, 8, 1, 3, 73, 8, 9, 1,
+ 3, 74, 73, 9, 1, 3, 74, 9, 10, 1, 3, 74, 10, 11, 1, 3, 75, 74, 11, 1,
+ 3, 76, 75, 11, 1, 3, 76, 11, 12, 1, 3, 76, 12, 13, 1, 3, 77, 76, 13, 1,
+ 3, 78, 77, 13, 1, 3, 78, 13, 14, 1, 3, 78, 14, 15, 1, 3, 79, 78, 15, 1,
+ 3, 79, 15, 16, 1, 3, 80, 79, 16, 1, 3, 81, 80, 16, 1, 3, 81, 16, 17, 1,
+ 3, 82, 81, 17, 1, 3, 82, 17, 18, 1, 3, 82, 18, 19, 1, 3, 83, 82, 19, 1,
+ 3, 84, 83, 19, 1, 3, 84, 19, 20, 1, 3, 84, 20, 21, 1, 3, 85, 84, 21, 1,
+ 3, 86, 85, 21, 1, 3, 86, 21, 22, 1, 3, 86, 22, 23, 1, 3, 87, 86, 23, 1,
+ 3, 87, 23, 24, 1, 3, 88, 87, 24, 1, 3, 89, 88, 24, 1, 3, 89, 24, 25, 1,
+ 3, 90, 89, 25, 1, 3, 90, 25, 26, 1, 3, 90, 26, 27, 1, 3, 91, 90, 27, 1,
+ 3, 92, 91, 27, 1, 3, 92, 27, 28, 1, 3, 93, 92, 28, 1, 3, 93, 28, 29, 1,
+ 3, 2, 3, 67, 1, 3, 2, 67, 66, 1, 3, 1, 2, 66, 1, 3, 1, 66, 64, 1,
+ 3, 1, 64, 65, 1, 3, 0, 1, 65, 1, 3, 31, 0, 65, 1, 3, 31, 65, 95, 1,
+ 3, 31, 95, 94, 1, 3, 30, 31, 94, 1, 3, 30, 94, 93, 1, 3, 93, 29, 30, 1,
+ 4, 96, 97, 95, 65, 1, 4, 97, 98, 94, 95, 1, 4, 98, 99, 93, 94, 1, 4, 99,
+ 100, 92, 93, 1, 4, 100, 101, 91, 92, 1, 4, 101, 102, 90, 91, 1, 4, 102, 103, 89,
+90, 1, 4, 103, 104, 88, 89, 1, 4, 104, 105, 87, 88, 1, 4, 105, 106, 86, 87, 1,
+ 4, 106, 107, 85, 86, 1, 4, 107, 108, 84, 85, 1, 4, 108, 109, 83, 84, 1, 4, 109,
+ 110, 82, 83, 1, 4, 110, 111, 81, 82, 1, 4, 111, 112, 80, 81, 1, 4, 112, 113, 79,
+80, 1, 4, 113, 114, 78, 79, 1, 4, 114, 115, 77, 78, 1, 4, 115, 116, 76, 77, 1,
+ 4, 116, 117, 75, 76, 1, 4, 117, 118, 74, 75, 1, 4, 118, 119, 73, 74, 1, 4, 119,
+ 120, 72, 73, 1, 4, 120, 121, 71, 72, 1, 4, 121, 122, 70, 71, 1, 4, 122, 123, 69,
+70, 1, 4, 123, 124, 68, 69, 1, 4, 124, 125, 67, 68, 1, 4, 125, 126, 66, 67, 1,
+ 4, 126, 127, 64, 66, 1, 4, 127, 96, 65, 64, 1, 4, 32, 33, 1, 0, 1, 4, 33,
+ 34, 2, 1, 1, 4, 34, 35, 3, 2, 1, 4, 35, 36, 4, 3, 1, 4, 36, 37, 5,
+ 4, 1, 4, 37, 38, 6, 5, 1, 4, 38, 39, 7, 6, 1, 4, 39, 40, 8, 7, 1,
+ 4, 40, 41, 9, 8, 1, 4, 41, 42, 10, 9, 1, 4, 42, 43, 11, 10, 1, 4, 43,
+ 44, 12, 11, 1, 4, 44, 45, 13, 12, 1, 4, 45, 46, 14, 13, 1, 4, 46, 47, 15,
+ 14, 1, 4, 47, 48, 16, 15, 1, 4, 48, 49, 17, 16, 1, 4, 49, 50, 18, 17, 1,
+ 4, 50, 51, 19, 18, 1, 4, 51, 52, 20, 19, 1, 4, 52, 53, 21, 20, 1, 4, 53,
+ 54, 22, 21, 1, 4, 54, 55, 23, 22, 1, 4, 55, 56, 24, 23, 1, 4, 56, 57, 25,
+ 24, 1, 4, 57, 58, 26, 25, 1, 4, 58, 59, 27, 26, 1, 4, 59, 60, 28, 27, 1,
+ 4, 60, 61, 29, 28, 1, 4, 61, 62, 30, 29, 1, 4, 62, 63, 31, 30, 1, 4, 63,
+32, 0, 31, 1, 32, 32, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50,
+ 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 1,
+ 0
+};
+
+struct lwo LWO_GuageHead =
+{
+ 128, /* number of points */
+ GuageHead_PNTS, GuageHead_normals, GuageHead_POLS, 0L
+};
+
+GLfloat PipeBetweenBolts_PNTS[] =
+{
+ (GLfloat) 0.000000, (GLfloat) 0.500000, (GLfloat) 0.500000,
+ (GLfloat) 0.129410, (GLfloat) 0.482963, (GLfloat) 0.500000,
+ (GLfloat) 0.250000, (GLfloat) 0.433013, (GLfloat) 0.500000,
+ (GLfloat) 0.353553, (GLfloat) 0.353553, (GLfloat) 0.500000,
+ (GLfloat) 0.433013, (GLfloat) 0.250000, (GLfloat) 0.500000,
+ (GLfloat) 0.482963, (GLfloat) 0.129410, (GLfloat) 0.500000,
+ (GLfloat) 0.500000, (GLfloat) 0.000000, (GLfloat) 0.500000,
+ (GLfloat) 0.482963, (GLfloat) - 0.129410, (GLfloat) 0.500000,
+ (GLfloat) 0.433013, (GLfloat) - 0.250000, (GLfloat) 0.500000,
+ (GLfloat) 0.353553, (GLfloat) - 0.353553, (GLfloat) 0.500000,
+ (GLfloat) 0.250000, (GLfloat) - 0.433013, (GLfloat) 0.500000,
+ (GLfloat) 0.129410, (GLfloat) - 0.482963, (GLfloat) 0.500000,
+ (GLfloat) 0.000000, (GLfloat) - 0.500000, (GLfloat) 0.500000,
+ (GLfloat) - 0.129410, (GLfloat) - 0.482963, (GLfloat) 0.500000,
+ (GLfloat) - 0.250000, (GLfloat) - 0.433013, (GLfloat) 0.500000,
+ (GLfloat) - 0.353553, (GLfloat) - 0.353553, (GLfloat) 0.500000,
+ (GLfloat) - 0.433013, (GLfloat) - 0.250000, (GLfloat) 0.500000,
+ (GLfloat) - 0.482963, (GLfloat) - 0.129410, (GLfloat) 0.500000,
+ (GLfloat) - 0.500000, (GLfloat) - 0.000000, (GLfloat) 0.500000,
+ (GLfloat) - 0.482963, (GLfloat) 0.129410, (GLfloat) 0.500000,
+ (GLfloat) - 0.433013, (GLfloat) 0.250000, (GLfloat) 0.500000,
+ (GLfloat) - 0.353553, (GLfloat) 0.353553, (GLfloat) 0.500000,
+ (GLfloat) - 0.250000, (GLfloat) 0.433013, (GLfloat) 0.500000,
+ (GLfloat) - 0.129410, (GLfloat) 0.482963, (GLfloat) 0.500000,
+ (GLfloat) 0.000000, (GLfloat) 0.500000, (GLfloat) - 0.500000,
+ (GLfloat) 0.129410, (GLfloat) 0.482963, (GLfloat) - 0.500000,
+ (GLfloat) 0.250000, (GLfloat) 0.433013, (GLfloat) - 0.500000,
+ (GLfloat) 0.353553, (GLfloat) 0.353553, (GLfloat) - 0.500000,
+ (GLfloat) 0.433013, (GLfloat) 0.250000, (GLfloat) - 0.500000,
+ (GLfloat) 0.482963, (GLfloat) 0.129410, (GLfloat) - 0.500000,
+ (GLfloat) 0.500000, (GLfloat) 0.000000, (GLfloat) - 0.500000,
+ (GLfloat) 0.482963, (GLfloat) - 0.129410, (GLfloat) - 0.500000,
+ (GLfloat) 0.433013, (GLfloat) - 0.250000, (GLfloat) - 0.500000,
+ (GLfloat) 0.353553, (GLfloat) - 0.353553, (GLfloat) - 0.500000,
+ (GLfloat) 0.250000, (GLfloat) - 0.433013, (GLfloat) - 0.500000,
+ (GLfloat) 0.129410, (GLfloat) - 0.482963, (GLfloat) - 0.500000,
+ (GLfloat) 0.000000, (GLfloat) - 0.500000, (GLfloat) - 0.500000,
+ (GLfloat) - 0.129410, (GLfloat) - 0.482963, (GLfloat) - 0.500000,
+ (GLfloat) - 0.250000, (GLfloat) - 0.433013, (GLfloat) - 0.500000,
+ (GLfloat) - 0.353553, (GLfloat) - 0.353553, (GLfloat) - 0.500000,
+ (GLfloat) - 0.433013, (GLfloat) - 0.250000, (GLfloat) - 0.500000,
+ (GLfloat) - 0.482963, (GLfloat) - 0.129410, (GLfloat) - 0.500000,
+ (GLfloat) - 0.500000, (GLfloat) - 0.000000, (GLfloat) - 0.500000,
+ (GLfloat) - 0.482963, (GLfloat) 0.129410, (GLfloat) - 0.500000,
+ (GLfloat) - 0.433013, (GLfloat) 0.250000, (GLfloat) - 0.500000,
+ (GLfloat) - 0.353553, (GLfloat) 0.353553, (GLfloat) - 0.500000,
+ (GLfloat) - 0.250000, (GLfloat) 0.433013, (GLfloat) - 0.500000,
+ (GLfloat) - 0.129410, (GLfloat) 0.482963, (GLfloat) - 0.500000,
+};
+
+GLfloat PipeBetweenBolts_normals[] =
+{
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 0.130526, (GLfloat) 0.991445, (GLfloat) 0.000000,
+ (GLfloat) 0.382683, (GLfloat) 0.923880, (GLfloat) 0.000000,
+ (GLfloat) 0.608761, (GLfloat) 0.793353, (GLfloat) 0.000000,
+ (GLfloat) 0.793353, (GLfloat) 0.608761, (GLfloat) 0.000000,
+ (GLfloat) 0.923880, (GLfloat) 0.382683, (GLfloat) 0.000000,
+ (GLfloat) 0.991445, (GLfloat) 0.130526, (GLfloat) 0.000000,
+ (GLfloat) 0.991445, (GLfloat) - 0.130526, (GLfloat) - 0.000000,
+ (GLfloat) 0.923880, (GLfloat) - 0.382683, (GLfloat) - 0.000000,
+ (GLfloat) 0.793353, (GLfloat) - 0.608761, (GLfloat) - 0.000000,
+ (GLfloat) 0.608761, (GLfloat) - 0.793353, (GLfloat) - 0.000000,
+ (GLfloat) 0.382683, (GLfloat) - 0.923880, (GLfloat) - 0.000000,
+ (GLfloat) 0.130526, (GLfloat) - 0.991445, (GLfloat) - 0.000000,
+ (GLfloat) - 0.130526, (GLfloat) - 0.991445, (GLfloat) - 0.000000,
+ (GLfloat) - 0.382683, (GLfloat) - 0.923880, (GLfloat) - 0.000000,
+ (GLfloat) - 0.608761, (GLfloat) - 0.793353, (GLfloat) - 0.000000,
+ (GLfloat) - 0.793353, (GLfloat) - 0.608761, (GLfloat) - 0.000000,
+ (GLfloat) - 0.923880, (GLfloat) - 0.382683, (GLfloat) - 0.000000,
+ (GLfloat) - 0.991445, (GLfloat) - 0.130526, (GLfloat) - 0.000000,
+ (GLfloat) - 0.991445, (GLfloat) 0.130526, (GLfloat) - 0.000000,
+ (GLfloat) - 0.923880, (GLfloat) 0.382683, (GLfloat) - 0.000000,
+ (GLfloat) - 0.793353, (GLfloat) 0.608761, (GLfloat) - 0.000000,
+ (GLfloat) - 0.608761, (GLfloat) 0.793353, (GLfloat) - 0.000000,
+ (GLfloat) - 0.382683, (GLfloat) 0.923880, (GLfloat) - 0.000000,
+ (GLfloat) - 0.130526, (GLfloat) 0.991445, (GLfloat) - 0.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) - 1.000000,
+};
+
+unsigned short int PipeBetweenBolts_POLS[] =
+{
+ 24, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
+ 19, 20, 21, 22, 23, 1, 4, 24, 25, 1, 0, 1, 4, 25, 26, 2, 1, 1, 4, 26,
+ 27, 3, 2, 1, 4, 27, 28, 4, 3, 1, 4, 28, 29, 5, 4, 1, 4, 29, 30, 6,
+ 5, 1, 4, 30, 31, 7, 6, 1, 4, 31, 32, 8, 7, 1, 4, 32, 33, 9, 8, 1,
+ 4, 33, 34, 10, 9, 1, 4, 34, 35, 11, 10, 1, 4, 35, 36, 12, 11, 1, 4, 36,
+ 37, 13, 12, 1, 4, 37, 38, 14, 13, 1, 4, 38, 39, 15, 14, 1, 4, 39, 40, 16,
+ 15, 1, 4, 40, 41, 17, 16, 1, 4, 41, 42, 18, 17, 1, 4, 42, 43, 19, 18, 1,
+ 4, 43, 44, 20, 19, 1, 4, 44, 45, 21, 20, 1, 4, 45, 46, 22, 21, 1, 4, 46,
+ 47, 23, 22, 1, 4, 47, 24, 0, 23, 1, 24, 24, 47, 46, 45, 44, 43, 42, 41, 40,
+ 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 1,
+ 0
+};
+
+struct lwo LWO_PipeBetweenBolts =
+{
+ 48, /* number of points */
+ PipeBetweenBolts_PNTS, PipeBetweenBolts_normals, PipeBetweenBolts_POLS, 0L
+};
+
+GLfloat ElbowBolts_PNTS[] =
+{
+ (GLfloat) 0.273122, (GLfloat) - 0.600000, (GLfloat) - 0.403061,
+ (GLfloat) 0.273122, (GLfloat) 0.403061, (GLfloat) - 0.600000,
+ (GLfloat) 0.273122, (GLfloat) 0.333061, (GLfloat) - 0.600000,
+ (GLfloat) 0.273122, (GLfloat) - 0.600000, (GLfloat) - 0.333061,
+ (GLfloat) 0.212500, (GLfloat) 0.298061, (GLfloat) - 0.600000,
+ (GLfloat) 0.212500, (GLfloat) - 0.600000, (GLfloat) - 0.298061,
+ (GLfloat) 0.151878, (GLfloat) 0.333061, (GLfloat) - 0.600000,
+ (GLfloat) 0.151878, (GLfloat) - 0.600000, (GLfloat) - 0.333061,
+ (GLfloat) 0.151878, (GLfloat) 0.403061, (GLfloat) - 0.600000,
+ (GLfloat) 0.151878, (GLfloat) - 0.600000, (GLfloat) - 0.403061,
+ (GLfloat) 0.212500, (GLfloat) - 0.600000, (GLfloat) - 0.438061,
+ (GLfloat) 0.212500, (GLfloat) 0.438061, (GLfloat) - 0.600000,
+ (GLfloat) 0.273122, (GLfloat) - 0.660000, (GLfloat) - 0.403061,
+ (GLfloat) 0.273122, (GLfloat) 0.403061, (GLfloat) - 0.660000,
+ (GLfloat) 0.273122, (GLfloat) - 0.660000, (GLfloat) - 0.333061,
+ (GLfloat) 0.273122, (GLfloat) 0.333061, (GLfloat) - 0.660000,
+ (GLfloat) 0.212500, (GLfloat) 0.298061, (GLfloat) - 0.660000,
+ (GLfloat) 0.212500, (GLfloat) - 0.660000, (GLfloat) - 0.298061,
+ (GLfloat) 0.151878, (GLfloat) - 0.660000, (GLfloat) - 0.333061,
+ (GLfloat) 0.151878, (GLfloat) 0.333061, (GLfloat) - 0.660000,
+ (GLfloat) 0.151878, (GLfloat) 0.403061, (GLfloat) - 0.660000,
+ (GLfloat) 0.151878, (GLfloat) - 0.660000, (GLfloat) - 0.403061,
+ (GLfloat) 0.212500, (GLfloat) - 0.660000, (GLfloat) - 0.438061,
+ (GLfloat) 0.212500, (GLfloat) 0.438061, (GLfloat) - 0.660000,
+ (GLfloat) 0.273122, (GLfloat) 0.403061, (GLfloat) - 0.460000,
+ (GLfloat) 0.273122, (GLfloat) - 0.460000, (GLfloat) - 0.403061,
+ (GLfloat) 0.273122, (GLfloat) 0.333061, (GLfloat) - 0.460000,
+ (GLfloat) 0.273122, (GLfloat) - 0.460000, (GLfloat) - 0.333061,
+ (GLfloat) 0.212500, (GLfloat) 0.298061, (GLfloat) - 0.460000,
+ (GLfloat) 0.212500, (GLfloat) - 0.460000, (GLfloat) - 0.298061,
+ (GLfloat) 0.151878, (GLfloat) 0.333061, (GLfloat) - 0.460000,
+ (GLfloat) 0.151878, (GLfloat) - 0.460000, (GLfloat) - 0.333061,
+ (GLfloat) 0.151878, (GLfloat) 0.403061, (GLfloat) - 0.460000,
+ (GLfloat) 0.151878, (GLfloat) - 0.460000, (GLfloat) - 0.403061,
+ (GLfloat) 0.212500, (GLfloat) - 0.460000, (GLfloat) - 0.438061,
+ (GLfloat) 0.212500, (GLfloat) 0.438061, (GLfloat) - 0.460000,
+ (GLfloat) 0.273122, (GLfloat) 0.403061, (GLfloat) - 0.520000,
+ (GLfloat) 0.273122, (GLfloat) - 0.520000, (GLfloat) - 0.403061,
+ (GLfloat) 0.273122, (GLfloat) - 0.520000, (GLfloat) - 0.333061,
+ (GLfloat) 0.273122, (GLfloat) 0.333061, (GLfloat) - 0.520000,
+ (GLfloat) 0.212500, (GLfloat) 0.298061, (GLfloat) - 0.520000,
+ (GLfloat) 0.212500, (GLfloat) - 0.520000, (GLfloat) - 0.298061,
+ (GLfloat) 0.151878, (GLfloat) 0.333061, (GLfloat) - 0.520000,
+ (GLfloat) 0.151878, (GLfloat) - 0.520000, (GLfloat) - 0.333061,
+ (GLfloat) 0.151878, (GLfloat) 0.403061, (GLfloat) - 0.520000,
+ (GLfloat) 0.151878, (GLfloat) - 0.520000, (GLfloat) - 0.403061,
+ (GLfloat) 0.212500, (GLfloat) - 0.520000, (GLfloat) - 0.438061,
+ (GLfloat) 0.212500, (GLfloat) 0.438061, (GLfloat) - 0.520000,
+ (GLfloat) 0.485622, (GLfloat) - 0.035000, (GLfloat) - 0.460000,
+ (GLfloat) 0.485622, (GLfloat) - 0.460000, (GLfloat) 0.035000,
+ (GLfloat) 0.425000, (GLfloat) - 0.070000, (GLfloat) - 0.460000,
+ (GLfloat) 0.425000, (GLfloat) - 0.460000, (GLfloat) 0.070000,
+ (GLfloat) 0.364378, (GLfloat) - 0.460000, (GLfloat) 0.035000,
+ (GLfloat) 0.364378, (GLfloat) - 0.035000, (GLfloat) - 0.460000,
+ (GLfloat) 0.364378, (GLfloat) 0.035000, (GLfloat) - 0.460000,
+ (GLfloat) 0.364378, (GLfloat) - 0.460000, (GLfloat) - 0.035000,
+ (GLfloat) 0.425000, (GLfloat) 0.070000, (GLfloat) - 0.460000,
+ (GLfloat) 0.425000, (GLfloat) - 0.460000, (GLfloat) - 0.070000,
+ (GLfloat) 0.485622, (GLfloat) 0.035000, (GLfloat) - 0.460000,
+ (GLfloat) 0.485622, (GLfloat) - 0.460000, (GLfloat) - 0.035000,
+ (GLfloat) 0.485622, (GLfloat) - 0.520000, (GLfloat) 0.035000,
+ (GLfloat) 0.485622, (GLfloat) - 0.035000, (GLfloat) - 0.520000,
+ (GLfloat) 0.425000, (GLfloat) - 0.070000, (GLfloat) - 0.520000,
+ (GLfloat) 0.425000, (GLfloat) - 0.520000, (GLfloat) 0.070000,
+ (GLfloat) 0.364378, (GLfloat) - 0.035000, (GLfloat) - 0.520000,
+ (GLfloat) 0.364378, (GLfloat) - 0.520000, (GLfloat) 0.035000,
+ (GLfloat) 0.364378, (GLfloat) - 0.520000, (GLfloat) - 0.035000,
+ (GLfloat) 0.364378, (GLfloat) 0.035000, (GLfloat) - 0.520000,
+ (GLfloat) 0.425000, (GLfloat) 0.070000, (GLfloat) - 0.520000,
+ (GLfloat) 0.425000, (GLfloat) - 0.520000, (GLfloat) - 0.070000,
+ (GLfloat) 0.485622, (GLfloat) 0.035000, (GLfloat) - 0.520000,
+ (GLfloat) 0.485622, (GLfloat) - 0.520000, (GLfloat) - 0.035000,
+ (GLfloat) 0.485622, (GLfloat) - 0.035000, (GLfloat) - 0.600000,
+ (GLfloat) 0.485622, (GLfloat) - 0.600000, (GLfloat) 0.035000,
+ (GLfloat) 0.425000, (GLfloat) - 0.600000, (GLfloat) 0.070000,
+ (GLfloat) 0.425000, (GLfloat) - 0.070000, (GLfloat) - 0.600000,
+ (GLfloat) 0.364378, (GLfloat) - 0.600000, (GLfloat) 0.035000,
+ (GLfloat) 0.364378, (GLfloat) - 0.035000, (GLfloat) - 0.600000,
+ (GLfloat) 0.364378, (GLfloat) 0.035000, (GLfloat) - 0.600000,
+ (GLfloat) 0.364378, (GLfloat) - 0.600000, (GLfloat) - 0.035000,
+ (GLfloat) 0.425000, (GLfloat) 0.070000, (GLfloat) - 0.600000,
+ (GLfloat) 0.425000, (GLfloat) - 0.600000, (GLfloat) - 0.070000,
+ (GLfloat) 0.485622, (GLfloat) - 0.600000, (GLfloat) - 0.035000,
+ (GLfloat) 0.485622, (GLfloat) 0.035000, (GLfloat) - 0.600000,
+ (GLfloat) 0.485622, (GLfloat) - 0.660000, (GLfloat) 0.035000,
+ (GLfloat) 0.485622, (GLfloat) - 0.035000, (GLfloat) - 0.660000,
+ (GLfloat) 0.425000, (GLfloat) - 0.660000, (GLfloat) 0.070000,
+ (GLfloat) 0.425000, (GLfloat) - 0.070000, (GLfloat) - 0.660000,
+ (GLfloat) 0.364378, (GLfloat) - 0.035000, (GLfloat) - 0.660000,
+ (GLfloat) 0.364378, (GLfloat) - 0.660000, (GLfloat) 0.035000,
+ (GLfloat) 0.364378, (GLfloat) - 0.660000, (GLfloat) - 0.035000,
+ (GLfloat) 0.364378, (GLfloat) 0.035000, (GLfloat) - 0.660000,
+ (GLfloat) 0.425000, (GLfloat) 0.070000, (GLfloat) - 0.660000,
+ (GLfloat) 0.425000, (GLfloat) - 0.660000, (GLfloat) - 0.070000,
+ (GLfloat) 0.485622, (GLfloat) - 0.660000, (GLfloat) - 0.035000,
+ (GLfloat) 0.485622, (GLfloat) 0.035000, (GLfloat) - 0.660000,
+ (GLfloat) 0.212500, (GLfloat) - 0.438061, (GLfloat) - 0.460000,
+ (GLfloat) 0.212500, (GLfloat) - 0.460000, (GLfloat) 0.438061,
+ (GLfloat) 0.151878, (GLfloat) - 0.403061, (GLfloat) - 0.460000,
+ (GLfloat) 0.151878, (GLfloat) - 0.460000, (GLfloat) 0.403061,
+ (GLfloat) 0.151878, (GLfloat) - 0.460000, (GLfloat) 0.333061,
+ (GLfloat) 0.151878, (GLfloat) - 0.333061, (GLfloat) - 0.460000,
+ (GLfloat) 0.212500, (GLfloat) - 0.460000, (GLfloat) 0.298061,
+ (GLfloat) 0.212500, (GLfloat) - 0.298061, (GLfloat) - 0.460000,
+ (GLfloat) 0.273122, (GLfloat) - 0.460000, (GLfloat) 0.333061,
+ (GLfloat) 0.273122, (GLfloat) - 0.333061, (GLfloat) - 0.460000,
+ (GLfloat) 0.273122, (GLfloat) - 0.403061, (GLfloat) - 0.460000,
+ (GLfloat) 0.273122, (GLfloat) - 0.460000, (GLfloat) 0.403061,
+ (GLfloat) 0.212500, (GLfloat) - 0.520000, (GLfloat) 0.438061,
+ (GLfloat) 0.212500, (GLfloat) - 0.438061, (GLfloat) - 0.520000,
+ (GLfloat) 0.151878, (GLfloat) - 0.403061, (GLfloat) - 0.520000,
+ (GLfloat) 0.151878, (GLfloat) - 0.520000, (GLfloat) 0.403061,
+ (GLfloat) 0.151878, (GLfloat) - 0.333061, (GLfloat) - 0.520000,
+ (GLfloat) 0.151878, (GLfloat) - 0.520000, (GLfloat) 0.333061,
+ (GLfloat) 0.212500, (GLfloat) - 0.298061, (GLfloat) - 0.520000,
+ (GLfloat) 0.212500, (GLfloat) - 0.520000, (GLfloat) 0.298061,
+ (GLfloat) 0.273122, (GLfloat) - 0.333061, (GLfloat) - 0.520000,
+ (GLfloat) 0.273122, (GLfloat) - 0.520000, (GLfloat) 0.333061,
+ (GLfloat) 0.273122, (GLfloat) - 0.403061, (GLfloat) - 0.520000,
+ (GLfloat) 0.273122, (GLfloat) - 0.520000, (GLfloat) 0.403061,
+ (GLfloat) 0.212500, (GLfloat) - 0.438061, (GLfloat) - 0.600000,
+ (GLfloat) 0.212500, (GLfloat) - 0.600000, (GLfloat) 0.438061,
+ (GLfloat) 0.151878, (GLfloat) - 0.403061, (GLfloat) - 0.600000,
+ (GLfloat) 0.151878, (GLfloat) - 0.600000, (GLfloat) 0.403061,
+ (GLfloat) 0.151878, (GLfloat) - 0.600000, (GLfloat) 0.333061,
+ (GLfloat) 0.151878, (GLfloat) - 0.333061, (GLfloat) - 0.600000,
+ (GLfloat) 0.212500, (GLfloat) - 0.298061, (GLfloat) - 0.600000,
+ (GLfloat) 0.212500, (GLfloat) - 0.600000, (GLfloat) 0.298061,
+ (GLfloat) 0.273122, (GLfloat) - 0.333061, (GLfloat) - 0.600000,
+ (GLfloat) 0.273122, (GLfloat) - 0.600000, (GLfloat) 0.333061,
+ (GLfloat) 0.273122, (GLfloat) - 0.600000, (GLfloat) 0.403061,
+ (GLfloat) 0.273122, (GLfloat) - 0.403061, (GLfloat) - 0.600000,
+ (GLfloat) 0.212500, (GLfloat) - 0.660000, (GLfloat) 0.438061,
+ (GLfloat) 0.212500, (GLfloat) - 0.438061, (GLfloat) - 0.660000,
+ (GLfloat) 0.151878, (GLfloat) - 0.403061, (GLfloat) - 0.660000,
+ (GLfloat) 0.151878, (GLfloat) - 0.660000, (GLfloat) 0.403061,
+ (GLfloat) 0.151878, (GLfloat) - 0.333061, (GLfloat) - 0.660000,
+ (GLfloat) 0.151878, (GLfloat) - 0.660000, (GLfloat) 0.333061,
+ (GLfloat) 0.212500, (GLfloat) - 0.660000, (GLfloat) 0.298061,
+ (GLfloat) 0.212500, (GLfloat) - 0.298061, (GLfloat) - 0.660000,
+ (GLfloat) 0.273122, (GLfloat) - 0.660000, (GLfloat) 0.333061,
+ (GLfloat) 0.273122, (GLfloat) - 0.333061, (GLfloat) - 0.660000,
+ (GLfloat) 0.273122, (GLfloat) - 0.660000, (GLfloat) 0.403061,
+ (GLfloat) 0.273122, (GLfloat) - 0.403061, (GLfloat) - 0.660000,
+ (GLfloat) - 0.273122, (GLfloat) - 0.460000, (GLfloat) 0.403061,
+ (GLfloat) - 0.273122, (GLfloat) - 0.403061, (GLfloat) - 0.460000,
+ (GLfloat) - 0.273122, (GLfloat) - 0.460000, (GLfloat) 0.333061,
+ (GLfloat) - 0.273122, (GLfloat) - 0.333061, (GLfloat) - 0.460000,
+ (GLfloat) - 0.212500, (GLfloat) - 0.298061, (GLfloat) - 0.460000,
+ (GLfloat) - 0.212500, (GLfloat) - 0.460000, (GLfloat) 0.298061,
+ (GLfloat) - 0.151878, (GLfloat) - 0.333061, (GLfloat) - 0.460000,
+ (GLfloat) - 0.151878, (GLfloat) - 0.460000, (GLfloat) 0.333061,
+ (GLfloat) - 0.151878, (GLfloat) - 0.403061, (GLfloat) - 0.460000,
+ (GLfloat) - 0.151878, (GLfloat) - 0.460000, (GLfloat) 0.403061,
+ (GLfloat) - 0.212500, (GLfloat) - 0.460000, (GLfloat) 0.438061,
+ (GLfloat) - 0.212500, (GLfloat) - 0.438061, (GLfloat) - 0.460000,
+ (GLfloat) - 0.273122, (GLfloat) - 0.520000, (GLfloat) 0.403061,
+ (GLfloat) - 0.273122, (GLfloat) - 0.403061, (GLfloat) - 0.520000,
+ (GLfloat) - 0.273122, (GLfloat) - 0.333061, (GLfloat) - 0.520000,
+ (GLfloat) - 0.273122, (GLfloat) - 0.520000, (GLfloat) 0.333061,
+ (GLfloat) - 0.212500, (GLfloat) - 0.520000, (GLfloat) 0.298061,
+ (GLfloat) - 0.212500, (GLfloat) - 0.298061, (GLfloat) - 0.520000,
+ (GLfloat) - 0.151878, (GLfloat) - 0.333061, (GLfloat) - 0.520000,
+ (GLfloat) - 0.151878, (GLfloat) - 0.520000, (GLfloat) 0.333061,
+ (GLfloat) - 0.151878, (GLfloat) - 0.520000, (GLfloat) 0.403061,
+ (GLfloat) - 0.151878, (GLfloat) - 0.403061, (GLfloat) - 0.520000,
+ (GLfloat) - 0.212500, (GLfloat) - 0.520000, (GLfloat) 0.438061,
+ (GLfloat) - 0.212500, (GLfloat) - 0.438061, (GLfloat) - 0.520000,
+ (GLfloat) - 0.273122, (GLfloat) - 0.600000, (GLfloat) 0.403061,
+ (GLfloat) - 0.273122, (GLfloat) - 0.403061, (GLfloat) - 0.600000,
+ (GLfloat) - 0.273122, (GLfloat) - 0.600000, (GLfloat) 0.333061,
+ (GLfloat) - 0.273122, (GLfloat) - 0.333061, (GLfloat) - 0.600000,
+ (GLfloat) - 0.212500, (GLfloat) - 0.600000, (GLfloat) 0.298061,
+ (GLfloat) - 0.212500, (GLfloat) - 0.298061, (GLfloat) - 0.600000,
+ (GLfloat) - 0.151878, (GLfloat) - 0.333061, (GLfloat) - 0.600000,
+ (GLfloat) - 0.151878, (GLfloat) - 0.600000, (GLfloat) 0.333061,
+ (GLfloat) - 0.151878, (GLfloat) - 0.600000, (GLfloat) 0.403061,
+ (GLfloat) - 0.151878, (GLfloat) - 0.403061, (GLfloat) - 0.600000,
+ (GLfloat) - 0.212500, (GLfloat) - 0.438061, (GLfloat) - 0.600000,
+ (GLfloat) - 0.212500, (GLfloat) - 0.600000, (GLfloat) 0.438061,
+ (GLfloat) - 0.273122, (GLfloat) - 0.660000, (GLfloat) 0.403061,
+ (GLfloat) - 0.273122, (GLfloat) - 0.403061, (GLfloat) - 0.660000,
+ (GLfloat) - 0.273122, (GLfloat) - 0.333061, (GLfloat) - 0.660000,
+ (GLfloat) - 0.273122, (GLfloat) - 0.660000, (GLfloat) 0.333061,
+ (GLfloat) - 0.212500, (GLfloat) - 0.298061, (GLfloat) - 0.660000,
+ (GLfloat) - 0.212500, (GLfloat) - 0.660000, (GLfloat) 0.298061,
+ (GLfloat) - 0.151878, (GLfloat) - 0.660000, (GLfloat) 0.333061,
+ (GLfloat) - 0.151878, (GLfloat) - 0.333061, (GLfloat) - 0.660000,
+ (GLfloat) - 0.151878, (GLfloat) - 0.660000, (GLfloat) 0.403061,
+ (GLfloat) - 0.151878, (GLfloat) - 0.403061, (GLfloat) - 0.660000,
+ (GLfloat) - 0.212500, (GLfloat) - 0.438061, (GLfloat) - 0.660000,
+ (GLfloat) - 0.212500, (GLfloat) - 0.660000, (GLfloat) 0.438061,
+ (GLfloat) - 0.485622, (GLfloat) - 0.460000, (GLfloat) - 0.035000,
+ (GLfloat) - 0.485622, (GLfloat) 0.035000, (GLfloat) - 0.460000,
+ (GLfloat) - 0.425000, (GLfloat) 0.070000, (GLfloat) - 0.460000,
+ (GLfloat) - 0.425000, (GLfloat) - 0.460000, (GLfloat) - 0.070000,
+ (GLfloat) - 0.364378, (GLfloat) 0.035000, (GLfloat) - 0.460000,
+ (GLfloat) - 0.364378, (GLfloat) - 0.460000, (GLfloat) - 0.035000,
+ (GLfloat) - 0.364378, (GLfloat) - 0.460000, (GLfloat) 0.035000,
+ (GLfloat) - 0.364378, (GLfloat) - 0.035000, (GLfloat) - 0.460000,
+ (GLfloat) - 0.425000, (GLfloat) - 0.460000, (GLfloat) 0.070000,
+ (GLfloat) - 0.425000, (GLfloat) - 0.070000, (GLfloat) - 0.460000,
+ (GLfloat) - 0.485622, (GLfloat) - 0.035000, (GLfloat) - 0.460000,
+ (GLfloat) - 0.485622, (GLfloat) - 0.460000, (GLfloat) 0.035000,
+ (GLfloat) - 0.485622, (GLfloat) - 0.520000, (GLfloat) - 0.035000,
+ (GLfloat) - 0.485622, (GLfloat) 0.035000, (GLfloat) - 0.520000,
+ (GLfloat) - 0.425000, (GLfloat) 0.070000, (GLfloat) - 0.520000,
+ (GLfloat) - 0.425000, (GLfloat) - 0.520000, (GLfloat) - 0.070000,
+ (GLfloat) - 0.364378, (GLfloat) 0.035000, (GLfloat) - 0.520000,
+ (GLfloat) - 0.364378, (GLfloat) - 0.520000, (GLfloat) - 0.035000,
+ (GLfloat) - 0.364378, (GLfloat) - 0.035000, (GLfloat) - 0.520000,
+ (GLfloat) - 0.364378, (GLfloat) - 0.520000, (GLfloat) 0.035000,
+ (GLfloat) - 0.425000, (GLfloat) - 0.520000, (GLfloat) 0.070000,
+ (GLfloat) - 0.425000, (GLfloat) - 0.070000, (GLfloat) - 0.520000,
+ (GLfloat) - 0.485622, (GLfloat) - 0.035000, (GLfloat) - 0.520000,
+ (GLfloat) - 0.485622, (GLfloat) - 0.520000, (GLfloat) 0.035000,
+ (GLfloat) - 0.485622, (GLfloat) 0.035000, (GLfloat) - 0.600000,
+ (GLfloat) - 0.485622, (GLfloat) - 0.600000, (GLfloat) - 0.035000,
+ (GLfloat) - 0.425000, (GLfloat) - 0.600000, (GLfloat) - 0.070000,
+ (GLfloat) - 0.425000, (GLfloat) 0.070000, (GLfloat) - 0.600000,
+ (GLfloat) - 0.364378, (GLfloat) - 0.600000, (GLfloat) - 0.035000,
+ (GLfloat) - 0.364378, (GLfloat) 0.035000, (GLfloat) - 0.600000,
+ (GLfloat) - 0.364378, (GLfloat) - 0.600000, (GLfloat) 0.035000,
+ (GLfloat) - 0.364378, (GLfloat) - 0.035000, (GLfloat) - 0.600000,
+ (GLfloat) - 0.425000, (GLfloat) - 0.600000, (GLfloat) 0.070000,
+ (GLfloat) - 0.425000, (GLfloat) - 0.070000, (GLfloat) - 0.600000,
+ (GLfloat) - 0.485622, (GLfloat) - 0.600000, (GLfloat) 0.035000,
+ (GLfloat) - 0.485622, (GLfloat) - 0.035000, (GLfloat) - 0.600000,
+ (GLfloat) - 0.485622, (GLfloat) - 0.660000, (GLfloat) - 0.035000,
+ (GLfloat) - 0.485622, (GLfloat) 0.035000, (GLfloat) - 0.660000,
+ (GLfloat) - 0.425000, (GLfloat) - 0.660000, (GLfloat) - 0.070000,
+ (GLfloat) - 0.425000, (GLfloat) 0.070000, (GLfloat) - 0.660000,
+ (GLfloat) - 0.364378, (GLfloat) 0.035000, (GLfloat) - 0.660000,
+ (GLfloat) - 0.364378, (GLfloat) - 0.660000, (GLfloat) - 0.035000,
+ (GLfloat) - 0.364378, (GLfloat) - 0.660000, (GLfloat) 0.035000,
+ (GLfloat) - 0.364378, (GLfloat) - 0.035000, (GLfloat) - 0.660000,
+ (GLfloat) - 0.425000, (GLfloat) - 0.070000, (GLfloat) - 0.660000,
+ (GLfloat) - 0.425000, (GLfloat) - 0.660000, (GLfloat) 0.070000,
+ (GLfloat) - 0.485622, (GLfloat) - 0.660000, (GLfloat) 0.035000,
+ (GLfloat) - 0.485622, (GLfloat) - 0.035000, (GLfloat) - 0.660000,
+ (GLfloat) - 0.212500, (GLfloat) - 0.460000, (GLfloat) - 0.438061,
+ (GLfloat) - 0.212500, (GLfloat) 0.438061, (GLfloat) - 0.460000,
+ (GLfloat) - 0.151878, (GLfloat) 0.403061, (GLfloat) - 0.460000,
+ (GLfloat) - 0.151878, (GLfloat) - 0.460000, (GLfloat) - 0.403061,
+ (GLfloat) - 0.151878, (GLfloat) - 0.460000, (GLfloat) - 0.333061,
+ (GLfloat) - 0.151878, (GLfloat) 0.333061, (GLfloat) - 0.460000,
+ (GLfloat) - 0.212500, (GLfloat) 0.298061, (GLfloat) - 0.460000,
+ (GLfloat) - 0.212500, (GLfloat) - 0.460000, (GLfloat) - 0.298061,
+ (GLfloat) - 0.273122, (GLfloat) 0.333061, (GLfloat) - 0.460000,
+ (GLfloat) - 0.273122, (GLfloat) - 0.460000, (GLfloat) - 0.333061,
+ (GLfloat) - 0.273122, (GLfloat) - 0.460000, (GLfloat) - 0.403061,
+ (GLfloat) - 0.273122, (GLfloat) 0.403061, (GLfloat) - 0.460000,
+ (GLfloat) - 0.212500, (GLfloat) - 0.520000, (GLfloat) - 0.438061,
+ (GLfloat) - 0.212500, (GLfloat) 0.438061, (GLfloat) - 0.520000,
+ (GLfloat) - 0.151878, (GLfloat) 0.403061, (GLfloat) - 0.520000,
+ (GLfloat) - 0.151878, (GLfloat) - 0.520000, (GLfloat) - 0.403061,
+ (GLfloat) - 0.151878, (GLfloat) - 0.520000, (GLfloat) - 0.333061,
+ (GLfloat) - 0.151878, (GLfloat) 0.333061, (GLfloat) - 0.520000,
+ (GLfloat) - 0.212500, (GLfloat) 0.298061, (GLfloat) - 0.520000,
+ (GLfloat) - 0.212500, (GLfloat) - 0.520000, (GLfloat) - 0.298061,
+ (GLfloat) - 0.273122, (GLfloat) 0.333061, (GLfloat) - 0.520000,
+ (GLfloat) - 0.273122, (GLfloat) - 0.520000, (GLfloat) - 0.333061,
+ (GLfloat) - 0.273122, (GLfloat) 0.403061, (GLfloat) - 0.520000,
+ (GLfloat) - 0.273122, (GLfloat) - 0.520000, (GLfloat) - 0.403061,
+ (GLfloat) - 0.212500, (GLfloat) 0.438061, (GLfloat) - 0.600000,
+ (GLfloat) - 0.212500, (GLfloat) - 0.600000, (GLfloat) - 0.438061,
+ (GLfloat) - 0.151878, (GLfloat) - 0.600000, (GLfloat) - 0.403061,
+ (GLfloat) - 0.151878, (GLfloat) 0.403061, (GLfloat) - 0.600000,
+ (GLfloat) - 0.151878, (GLfloat) 0.333061, (GLfloat) - 0.600000,
+ (GLfloat) - 0.151878, (GLfloat) - 0.600000, (GLfloat) - 0.333061,
+ (GLfloat) - 0.212500, (GLfloat) - 0.600000, (GLfloat) - 0.298061,
+ (GLfloat) - 0.212500, (GLfloat) 0.298061, (GLfloat) - 0.600000,
+ (GLfloat) - 0.273122, (GLfloat) - 0.600000, (GLfloat) - 0.333061,
+ (GLfloat) - 0.273122, (GLfloat) 0.333061, (GLfloat) - 0.600000,
+ (GLfloat) - 0.273122, (GLfloat) - 0.600000, (GLfloat) - 0.403061,
+ (GLfloat) - 0.273122, (GLfloat) 0.403061, (GLfloat) - 0.600000,
+ (GLfloat) - 0.212500, (GLfloat) - 0.660000, (GLfloat) - 0.438061,
+ (GLfloat) - 0.212500, (GLfloat) 0.438061, (GLfloat) - 0.660000,
+ (GLfloat) - 0.151878, (GLfloat) - 0.660000, (GLfloat) - 0.403061,
+ (GLfloat) - 0.151878, (GLfloat) 0.403061, (GLfloat) - 0.660000,
+ (GLfloat) - 0.151878, (GLfloat) - 0.660000, (GLfloat) - 0.333061,
+ (GLfloat) - 0.151878, (GLfloat) 0.333061, (GLfloat) - 0.660000,
+ (GLfloat) - 0.212500, (GLfloat) - 0.660000, (GLfloat) - 0.298061,
+ (GLfloat) - 0.212500, (GLfloat) 0.298061, (GLfloat) - 0.660000,
+ (GLfloat) - 0.273122, (GLfloat) - 0.660000, (GLfloat) - 0.333061,
+ (GLfloat) - 0.273122, (GLfloat) 0.333061, (GLfloat) - 0.660000,
+ (GLfloat) - 0.273122, (GLfloat) 0.403061, (GLfloat) - 0.660000,
+ (GLfloat) - 0.273122, (GLfloat) - 0.660000, (GLfloat) - 0.403061,
+};
+
+GLfloat ElbowBolts_normals[] =
+{
+ (GLfloat) - 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 0.500000, (GLfloat) 0.866026, (GLfloat) 0.000000,
+ (GLfloat) 1.000000, (GLfloat) - 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) 0.500000, (GLfloat) - 0.866025, (GLfloat) - 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) - 0.866025, (GLfloat) - 0.000000,
+ (GLfloat) - 1.000000, (GLfloat) - 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) 0.866025, (GLfloat) - 0.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) - 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 0.499999, (GLfloat) 0.866026, (GLfloat) 0.000000,
+ (GLfloat) 1.000000, (GLfloat) - 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) 0.500000, (GLfloat) - 0.866025, (GLfloat) - 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) - 0.866025, (GLfloat) - 0.000000,
+ (GLfloat) - 1.000000, (GLfloat) - 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) 0.866025, (GLfloat) - 0.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) - 1.000000,
+ (GLfloat) 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.500000, (GLfloat) 0.866025, (GLfloat) - 0.000000,
+ (GLfloat) 0.500000, (GLfloat) 0.866025, (GLfloat) 0.000000,
+ (GLfloat) 1.000000, (GLfloat) - 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) 0.500000, (GLfloat) - 0.866025, (GLfloat) - 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) - 0.866025, (GLfloat) - 0.000000,
+ (GLfloat) - 1.000000, (GLfloat) - 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) - 1.000000,
+ (GLfloat) 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.500000, (GLfloat) 0.866025, (GLfloat) - 0.000000,
+ (GLfloat) 0.500000, (GLfloat) 0.866025, (GLfloat) 0.000000,
+ (GLfloat) 1.000000, (GLfloat) - 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) 0.500000, (GLfloat) - 0.866025, (GLfloat) - 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) - 0.866025, (GLfloat) - 0.000000,
+ (GLfloat) - 1.000000, (GLfloat) - 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) - 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 1.000000, (GLfloat) - 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) 0.866026, (GLfloat) - 0.000000,
+ (GLfloat) 0.500000, (GLfloat) 0.866025, (GLfloat) 0.000000,
+ (GLfloat) 1.000000, (GLfloat) - 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) 0.500000, (GLfloat) - 0.866026, (GLfloat) - 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) - 0.866025, (GLfloat) - 0.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) - 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 1.000000, (GLfloat) - 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) 0.866026, (GLfloat) - 0.000000,
+ (GLfloat) 0.500000, (GLfloat) 0.866025, (GLfloat) 0.000000,
+ (GLfloat) 1.000000, (GLfloat) - 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) 0.500000, (GLfloat) - 0.866025, (GLfloat) - 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) - 0.866025, (GLfloat) - 0.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) - 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.500000, (GLfloat) - 0.866026, (GLfloat) - 0.000000,
+ (GLfloat) - 1.000000, (GLfloat) 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) 0.866025, (GLfloat) - 0.000000,
+ (GLfloat) 0.500000, (GLfloat) 0.866025, (GLfloat) 0.000000,
+ (GLfloat) 1.000000, (GLfloat) - 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) 0.500000, (GLfloat) - 0.866025, (GLfloat) - 0.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 0.000000, (GLfloat) - 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) - 0.499999, (GLfloat) - 0.866026, (GLfloat) - 0.000000,
+ (GLfloat) - 1.000000, (GLfloat) 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) 0.866025, (GLfloat) - 0.000000,
+ (GLfloat) 0.500000, (GLfloat) 0.866025, (GLfloat) 0.000000,
+ (GLfloat) 1.000000, (GLfloat) - 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) 0.500000, (GLfloat) - 0.866025, (GLfloat) - 0.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 0.000000, (GLfloat) - 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 0.500000, (GLfloat) - 0.866025, (GLfloat) - 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) - 0.866025, (GLfloat) - 0.000000,
+ (GLfloat) - 1.000000, (GLfloat) - 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) 0.866025, (GLfloat) - 0.000000,
+ (GLfloat) 0.500000, (GLfloat) 0.866025, (GLfloat) 0.000000,
+ (GLfloat) 1.000000, (GLfloat) - 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) - 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 0.500000, (GLfloat) - 0.866025, (GLfloat) - 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) - 0.866025, (GLfloat) - 0.000000,
+ (GLfloat) - 1.000000, (GLfloat) - 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) 0.866025, (GLfloat) - 0.000000,
+ (GLfloat) 0.500000, (GLfloat) 0.866025, (GLfloat) 0.000000,
+ (GLfloat) 1.000000, (GLfloat) - 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) - 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 1.000000, (GLfloat) 0.000000, (GLfloat) 0.000000,
+ (GLfloat) 0.500000, (GLfloat) - 0.866026, (GLfloat) - 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) - 0.866025, (GLfloat) - 0.000000,
+ (GLfloat) - 1.000000, (GLfloat) - 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) 0.866026, (GLfloat) - 0.000000,
+ (GLfloat) 0.500000, (GLfloat) 0.866025, (GLfloat) 0.000000,
+ (GLfloat) 0.000000, (GLfloat) 0.000000, (GLfloat) - 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 1.000000, (GLfloat) 0.000000, (GLfloat) 0.000000,
+ (GLfloat) 0.500000, (GLfloat) - 0.866026, (GLfloat) - 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) - 0.866025, (GLfloat) - 0.000000,
+ (GLfloat) - 1.000000, (GLfloat) - 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) 0.866025, (GLfloat) - 0.000000,
+ (GLfloat) 0.500000, (GLfloat) 0.866025, (GLfloat) 0.000000,
+ (GLfloat) 0.000000, (GLfloat) 0.000000, (GLfloat) - 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) 1.000000, (GLfloat) 0.000000,
+ (GLfloat) 0.500000, (GLfloat) 0.000000, (GLfloat) - 0.866026,
+ (GLfloat) 1.000000, (GLfloat) 0.000000, (GLfloat) 0.000000,
+ (GLfloat) 0.500000, (GLfloat) 0.000000, (GLfloat) 0.866025,
+ (GLfloat) - 0.500000, (GLfloat) 0.000000, (GLfloat) 0.866025,
+ (GLfloat) - 1.000000, (GLfloat) 0.000000, (GLfloat) 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) - 0.000000, (GLfloat) - 0.866025,
+ (GLfloat) - 0.000000, (GLfloat) - 1.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.000000, (GLfloat) 1.000000, (GLfloat) 0.000000,
+ (GLfloat) 0.499999, (GLfloat) 0.000000, (GLfloat) - 0.866026,
+ (GLfloat) 1.000000, (GLfloat) 0.000000, (GLfloat) 0.000000,
+ (GLfloat) 0.500000, (GLfloat) 0.000000, (GLfloat) 0.866025,
+ (GLfloat) - 0.500000, (GLfloat) 0.000000, (GLfloat) 0.866025,
+ (GLfloat) - 1.000000, (GLfloat) 0.000000, (GLfloat) 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) - 0.000000, (GLfloat) - 0.866025,
+ (GLfloat) - 0.000000, (GLfloat) - 1.000000, (GLfloat) - 0.000000,
+ (GLfloat) 0.000000, (GLfloat) 1.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) - 0.000000, (GLfloat) - 0.866025,
+ (GLfloat) 0.500000, (GLfloat) 0.000000, (GLfloat) - 0.866025,
+ (GLfloat) 1.000000, (GLfloat) 0.000000, (GLfloat) 0.000000,
+ (GLfloat) 0.500000, (GLfloat) 0.000000, (GLfloat) 0.866025,
+ (GLfloat) - 0.500000, (GLfloat) 0.000000, (GLfloat) 0.866025,
+ (GLfloat) - 1.000000, (GLfloat) 0.000000, (GLfloat) 0.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 1.000000, (GLfloat) - 0.000000,
+ (GLfloat) 0.000000, (GLfloat) 1.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) - 0.000000, (GLfloat) - 0.866025,
+ (GLfloat) 0.500000, (GLfloat) 0.000000, (GLfloat) - 0.866025,
+ (GLfloat) 1.000000, (GLfloat) 0.000000, (GLfloat) 0.000000,
+ (GLfloat) 0.500000, (GLfloat) 0.000000, (GLfloat) 0.866025,
+ (GLfloat) - 0.500000, (GLfloat) 0.000000, (GLfloat) 0.866025,
+ (GLfloat) - 1.000000, (GLfloat) 0.000000, (GLfloat) 0.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 1.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.000000, (GLfloat) 1.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 1.000000, (GLfloat) 0.000000, (GLfloat) 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) - 0.000000, (GLfloat) - 0.866026,
+ (GLfloat) 0.500000, (GLfloat) 0.000000, (GLfloat) - 0.866025,
+ (GLfloat) 1.000000, (GLfloat) 0.000000, (GLfloat) 0.000000,
+ (GLfloat) 0.500000, (GLfloat) 0.000000, (GLfloat) 0.866026,
+ (GLfloat) - 0.500000, (GLfloat) 0.000000, (GLfloat) 0.866025,
+ (GLfloat) - 0.000000, (GLfloat) - 1.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.000000, (GLfloat) 1.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 1.000000, (GLfloat) 0.000000, (GLfloat) 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) - 0.000000, (GLfloat) - 0.866026,
+ (GLfloat) 0.500000, (GLfloat) 0.000000, (GLfloat) - 0.866025,
+ (GLfloat) 1.000000, (GLfloat) 0.000000, (GLfloat) 0.000000,
+ (GLfloat) 0.500000, (GLfloat) 0.000000, (GLfloat) 0.866025,
+ (GLfloat) - 0.500000, (GLfloat) 0.000000, (GLfloat) 0.866025,
+ (GLfloat) - 0.000000, (GLfloat) - 1.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.000000, (GLfloat) 1.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) 0.000000, (GLfloat) 0.866026,
+ (GLfloat) - 1.000000, (GLfloat) - 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) - 0.000000, (GLfloat) - 0.866025,
+ (GLfloat) 0.500000, (GLfloat) 0.000000, (GLfloat) - 0.866025,
+ (GLfloat) 1.000000, (GLfloat) 0.000000, (GLfloat) 0.000000,
+ (GLfloat) 0.500000, (GLfloat) 0.000000, (GLfloat) 0.866025,
+ (GLfloat) - 0.000000, (GLfloat) - 1.000000, (GLfloat) 0.000000,
+ (GLfloat) - 0.000000, (GLfloat) 1.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.499999, (GLfloat) 0.000000, (GLfloat) 0.866026,
+ (GLfloat) - 1.000000, (GLfloat) - 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) - 0.000000, (GLfloat) - 0.866025,
+ (GLfloat) 0.500000, (GLfloat) 0.000000, (GLfloat) - 0.866025,
+ (GLfloat) 1.000000, (GLfloat) 0.000000, (GLfloat) 0.000000,
+ (GLfloat) 0.500000, (GLfloat) 0.000000, (GLfloat) 0.866025,
+ (GLfloat) - 0.000000, (GLfloat) - 1.000000, (GLfloat) 0.000000,
+ (GLfloat) - 0.000000, (GLfloat) 1.000000, (GLfloat) - 0.000000,
+ (GLfloat) 0.500000, (GLfloat) 0.000000, (GLfloat) 0.866025,
+ (GLfloat) - 0.500000, (GLfloat) 0.000000, (GLfloat) 0.866025,
+ (GLfloat) - 1.000000, (GLfloat) 0.000000, (GLfloat) 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) - 0.000000, (GLfloat) - 0.866025,
+ (GLfloat) 0.500000, (GLfloat) 0.000000, (GLfloat) - 0.866025,
+ (GLfloat) 1.000000, (GLfloat) 0.000000, (GLfloat) 0.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 1.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.000000, (GLfloat) 1.000000, (GLfloat) - 0.000000,
+ (GLfloat) 0.500000, (GLfloat) 0.000000, (GLfloat) 0.866025,
+ (GLfloat) - 0.500000, (GLfloat) 0.000000, (GLfloat) 0.866025,
+ (GLfloat) - 1.000000, (GLfloat) 0.000000, (GLfloat) 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) - 0.000000, (GLfloat) - 0.866025,
+ (GLfloat) 0.500000, (GLfloat) 0.000000, (GLfloat) - 0.866025,
+ (GLfloat) 1.000000, (GLfloat) 0.000000, (GLfloat) 0.000000,
+ (GLfloat) - 0.000000, (GLfloat) - 1.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.000000, (GLfloat) 1.000000, (GLfloat) 0.000000,
+ (GLfloat) 1.000000, (GLfloat) 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) 0.500000, (GLfloat) 0.000000, (GLfloat) 0.866026,
+ (GLfloat) - 0.500000, (GLfloat) 0.000000, (GLfloat) 0.866025,
+ (GLfloat) - 1.000000, (GLfloat) 0.000000, (GLfloat) 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) - 0.000000, (GLfloat) - 0.866026,
+ (GLfloat) 0.500000, (GLfloat) 0.000000, (GLfloat) - 0.866025,
+ (GLfloat) 0.000000, (GLfloat) - 1.000000, (GLfloat) - 0.000000,
+ (GLfloat) - 0.000000, (GLfloat) 1.000000, (GLfloat) 0.000000,
+ (GLfloat) 1.000000, (GLfloat) 0.000000, (GLfloat) - 0.000000,
+ (GLfloat) 0.500000, (GLfloat) 0.000000, (GLfloat) 0.866026,
+ (GLfloat) - 0.500000, (GLfloat) 0.000000, (GLfloat) 0.866025,
+ (GLfloat) - 1.000000, (GLfloat) 0.000000, (GLfloat) 0.000000,
+ (GLfloat) - 0.500000, (GLfloat) - 0.000000, (GLfloat) - 0.866025,
+ (GLfloat) 0.500000, (GLfloat) 0.000000, (GLfloat) - 0.866025,
+ (GLfloat) 0.000000, (GLfloat) - 1.000000, (GLfloat) - 0.000000,
+};
+
+unsigned short int ElbowBolts_POLS[] =
+{
+ 6, 241, 242, 245, 246, 248, 251, 1, 4, 253, 254, 242, 241, 1, 4, 254, 257, 245, 242, 1,
+ 4, 257, 258, 246, 245, 1, 4, 258, 260, 248, 246, 1, 4, 260, 262, 251, 248, 1, 4, 262,
+ 253, 241, 251, 1, 6, 253, 262, 260, 258, 257, 254, 1, 6, 264, 267, 268, 271, 273, 275, 1,
+ 4, 277, 279, 267, 264, 1, 4, 279, 281, 268, 267, 1, 4, 281, 283, 271, 268, 1, 4, 283,
+ 285, 273, 271, 1, 4, 285, 286, 275, 273, 1, 4, 286, 277, 264, 275, 1, 6, 277, 286, 285,
+ 283, 281, 279, 1, 6, 193, 194, 196, 199, 201, 202, 1, 4, 205, 206, 194, 193, 1, 4, 206,
+ 208, 196, 194, 1, 4, 208, 210, 199, 196, 1, 4, 210, 213, 201, 199, 1, 4, 213, 214, 202,
+ 201, 1, 4, 214, 205, 193, 202, 1, 6, 205, 214, 213, 210, 208, 206, 1, 6, 216, 219, 221,
+ 223, 225, 227, 1, 4, 229, 231, 219, 216, 1, 4, 231, 232, 221, 219, 1, 4, 232, 235, 223,
+ 221, 1, 4, 235, 236, 225, 223, 1, 4, 236, 239, 227, 225, 1, 4, 239, 229, 216, 227, 1,
+ 6, 229, 239, 236, 235, 232, 231, 1, 6, 145, 147, 148, 150, 152, 155, 1, 4, 157, 158, 147,
+ 145, 1, 4, 158, 161, 148, 147, 1, 4, 161, 162, 150, 148, 1, 4, 162, 165, 152, 150, 1,
+ 4, 165, 167, 155, 152, 1, 4, 167, 157, 145, 155, 1, 6, 157, 167, 165, 162, 161, 158, 1,
+ 6, 169, 171, 173, 174, 177, 178, 1, 4, 181, 182, 171, 169, 1, 4, 182, 184, 173, 171, 1,
+ 4, 184, 187, 174, 173, 1, 4, 187, 189, 177, 174, 1, 4, 189, 190, 178, 177, 1, 4, 190,
+ 181, 169, 178, 1, 6, 181, 190, 189, 187, 184, 182, 1, 6, 96, 98, 101, 103, 105, 106, 1,
+ 4, 109, 110, 98, 96, 1, 4, 110, 112, 101, 98, 1, 4, 112, 114, 103, 101, 1, 4, 114,
+ 116, 105, 103, 1, 4, 116, 118, 106, 105, 1, 4, 118, 109, 96, 106, 1, 6, 109, 118, 116,
+ 114, 112, 110, 1, 6, 120, 122, 125, 126, 128, 131, 1, 4, 133, 134, 122, 120, 1, 4, 134,
+ 136, 125, 122, 1, 4, 136, 139, 126, 125, 1, 4, 139, 141, 128, 126, 1, 4, 141, 143, 131,
+ 128, 1, 4, 143, 133, 120, 131, 1, 6, 133, 143, 141, 139, 136, 134, 1, 6, 48, 50, 53,
+ 54, 56, 58, 1, 4, 61, 62, 50, 48, 1, 4, 62, 64, 53, 50, 1, 4, 64, 67, 54,
+ 53, 1, 4, 67, 68, 56, 54, 1, 4, 68, 70, 58, 56, 1, 4, 70, 61, 48, 58, 1,
+ 6, 61, 70, 68, 67, 64, 62, 1, 6, 72, 75, 77, 78, 80, 83, 1, 4, 85, 87, 75,
+ 72, 1, 4, 87, 88, 77, 75, 1, 4, 88, 91, 78, 77, 1, 4, 91, 92, 80, 78, 1,
+ 4, 92, 95, 83, 80, 1, 4, 95, 85, 72, 83, 1, 6, 85, 95, 92, 91, 88, 87, 1,
+ 6, 24, 26, 28, 30, 32, 35, 1, 4, 36, 39, 26, 24, 1, 4, 39, 40, 28, 26, 1,
+ 4, 40, 42, 30, 28, 1, 4, 42, 44, 32, 30, 1, 4, 44, 47, 35, 32, 1, 4, 47,
+ 36, 24, 35, 1, 6, 36, 47, 44, 42, 40, 39, 1, 6, 1, 2, 4, 6, 8, 11, 1,
+ 4, 13, 15, 2, 1, 1, 4, 15, 16, 4, 2, 1, 4, 16, 19, 6, 4, 1, 4, 19,
+ 20, 8, 6, 1, 4, 20, 23, 11, 8, 1, 4, 23, 13, 1, 11, 1, 6, 13, 23, 20,
+ 19, 16, 15, 1, 6, 240, 243, 244, 247, 249, 250, 1, 4, 252, 255, 243, 240, 1, 4, 255,
+ 256, 244, 243, 1, 4, 256, 259, 247, 244, 1, 4, 259, 261, 249, 247, 1, 4, 261, 263, 250,
+ 249, 1, 4, 263, 252, 240, 250, 1, 6, 252, 263, 261, 259, 256, 255, 1, 6, 265, 266, 269,
+ 270, 272, 274, 1, 4, 276, 278, 266, 265, 1, 4, 278, 280, 269, 266, 1, 4, 280, 282, 270,
+ 269, 1, 4, 282, 284, 272, 270, 1, 4, 284, 287, 274, 272, 1, 4, 287, 276, 265, 274, 1,
+ 6, 276, 287, 284, 282, 280, 278, 1, 6, 192, 195, 197, 198, 200, 203, 1, 4, 204, 207, 195,
+ 192, 1, 4, 207, 209, 197, 195, 1, 4, 209, 211, 198, 197, 1, 4, 211, 212, 200, 198, 1,
+ 4, 212, 215, 203, 200, 1, 4, 215, 204, 192, 203, 1, 6, 204, 215, 212, 211, 209, 207, 1,
+ 6, 217, 218, 220, 222, 224, 226, 1, 4, 228, 230, 218, 217, 1, 4, 230, 233, 220, 218, 1,
+ 4, 233, 234, 222, 220, 1, 4, 234, 237, 224, 222, 1, 4, 237, 238, 226, 224, 1, 4, 238,
+ 228, 217, 226, 1, 6, 228, 238, 237, 234, 233, 230, 1, 6, 144, 146, 149, 151, 153, 154, 1,
+ 4, 156, 159, 146, 144, 1, 4, 159, 160, 149, 146, 1, 4, 160, 163, 151, 149, 1, 4, 163,
+ 164, 153, 151, 1, 4, 164, 166, 154, 153, 1, 4, 166, 156, 144, 154, 1, 6, 156, 166, 164,
+ 163, 160, 159, 1, 6, 168, 170, 172, 175, 176, 179, 1, 4, 180, 183, 170, 168, 1, 4, 183,
+ 185, 172, 170, 1, 4, 185, 186, 175, 172, 1, 4, 186, 188, 176, 175, 1, 4, 188, 191, 179,
+ 176, 1, 4, 191, 180, 168, 179, 1, 6, 180, 191, 188, 186, 185, 183, 1, 6, 97, 99, 100,
+ 102, 104, 107, 1, 4, 108, 111, 99, 97, 1, 4, 111, 113, 100, 99, 1, 4, 113, 115, 102,
+ 100, 1, 4, 115, 117, 104, 102, 1, 4, 117, 119, 107, 104, 1, 4, 119, 108, 97, 107, 1,
+ 6, 108, 119, 117, 115, 113, 111, 1, 6, 121, 123, 124, 127, 129, 130, 1, 4, 132, 135, 123,
+ 121, 1, 4, 135, 137, 124, 123, 1, 4, 137, 138, 127, 124, 1, 4, 138, 140, 129, 127, 1,
+ 4, 140, 142, 130, 129, 1, 4, 142, 132, 121, 130, 1, 6, 132, 142, 140, 138, 137, 135, 1,
+ 6, 49, 51, 52, 55, 57, 59, 1, 4, 60, 63, 51, 49, 1, 4, 63, 65, 52, 51, 1,
+ 4, 65, 66, 55, 52, 1, 4, 66, 69, 57, 55, 1, 4, 69, 71, 59, 57, 1, 4, 71,
+ 60, 49, 59, 1, 6, 60, 71, 69, 66, 65, 63, 1, 6, 73, 74, 76, 79, 81, 82, 1,
+ 4, 84, 86, 74, 73, 1, 4, 86, 89, 76, 74, 1, 4, 89, 90, 79, 76, 1, 4, 90,
+ 93, 81, 79, 1, 4, 93, 94, 82, 81, 1, 4, 94, 84, 73, 82, 1, 6, 84, 94, 93,
+ 90, 89, 86, 1, 6, 25, 27, 29, 31, 33, 34, 1, 4, 37, 38, 27, 25, 1, 4, 38,
+ 41, 29, 27, 1, 4, 41, 43, 31, 29, 1, 4, 43, 45, 33, 31, 1, 4, 45, 46, 34,
+ 33, 1, 4, 46, 37, 25, 34, 1, 6, 37, 46, 45, 43, 41, 38, 1, 6, 0, 3, 5,
+ 7, 9, 10, 1, 4, 12, 14, 3, 0, 1, 4, 14, 17, 5, 3, 1, 4, 17, 18, 7,
+ 5, 1, 4, 18, 21, 9, 7, 1, 4, 21, 22, 10, 9, 1, 4, 22, 12, 0, 10, 1,
+ 6, 12, 22, 21, 18, 17, 14, 1,
+ 0
+};
+
+struct lwo LWO_ElbowBolts =
+{
+ 288, /* number of points */
+ ElbowBolts_PNTS, ElbowBolts_normals, ElbowBolts_POLS, 0L
+};
+
+GLfloat ElbowCoins_PNTS[] =
+{
+ (GLfloat) 0.000000, (GLfloat) - 0.520000, (GLfloat) - 0.500000,
+ (GLfloat) 0.097545, (GLfloat) - 0.520000, (GLfloat) - 0.490393,
+ (GLfloat) 0.191342, (GLfloat) - 0.520000, (GLfloat) - 0.461940,
+ (GLfloat) 0.277785, (GLfloat) - 0.520000, (GLfloat) - 0.415735,
+ (GLfloat) 0.353553, (GLfloat) - 0.520000, (GLfloat) - 0.353553,
+ (GLfloat) 0.415735, (GLfloat) - 0.520000, (GLfloat) - 0.277785,
+ (GLfloat) 0.461940, (GLfloat) - 0.520000, (GLfloat) - 0.191342,
+ (GLfloat) 0.490393, (GLfloat) - 0.520000, (GLfloat) - 0.097545,
+ (GLfloat) 0.500000, (GLfloat) - 0.520000, (GLfloat) - 0.000000,
+ (GLfloat) 0.490393, (GLfloat) - 0.520000, (GLfloat) 0.097545,
+ (GLfloat) 0.461940, (GLfloat) - 0.520000, (GLfloat) 0.191342,
+ (GLfloat) 0.415735, (GLfloat) - 0.520000, (GLfloat) 0.277785,
+ (GLfloat) 0.353553, (GLfloat) - 0.520000, (GLfloat) 0.353553,
+ (GLfloat) 0.277785, (GLfloat) - 0.520000, (GLfloat) 0.415735,
+ (GLfloat) 0.191342, (GLfloat) - 0.520000, (GLfloat) 0.461940,
+ (GLfloat) 0.097545, (GLfloat) - 0.520000, (GLfloat) 0.490393,
+ (GLfloat) 0.000000, (GLfloat) - 0.520000, (GLfloat) 0.500000,
+ (GLfloat) - 0.097545, (GLfloat) - 0.520000, (GLfloat) 0.490393,
+ (GLfloat) - 0.191342, (GLfloat) - 0.520000, (GLfloat) 0.461940,
+ (GLfloat) - 0.277785, (GLfloat) - 0.520000, (GLfloat) 0.415735,
+ (GLfloat) - 0.353553, (GLfloat) - 0.520000, (GLfloat) 0.353553,
+ (GLfloat) - 0.415735, (GLfloat) - 0.520000, (GLfloat) 0.277785,
+ (GLfloat) - 0.461940, (GLfloat) - 0.520000, (GLfloat) 0.191342,
+ (GLfloat) - 0.490393, (GLfloat) - 0.520000, (GLfloat) 0.097545,
+ (GLfloat) - 0.500000, (GLfloat) - 0.520000, (GLfloat) 0.000000,
+ (GLfloat) - 0.490393, (GLfloat) - 0.520000, (GLfloat) - 0.097545,
+ (GLfloat) - 0.461940, (GLfloat) - 0.520000, (GLfloat) - 0.191342,
+ (GLfloat) - 0.415735, (GLfloat) - 0.520000, (GLfloat) - 0.277785,
+ (GLfloat) - 0.353553, (GLfloat) - 0.520000, (GLfloat) - 0.353553,
+ (GLfloat) - 0.277785, (GLfloat) - 0.520000, (GLfloat) - 0.415735,
+ (GLfloat) - 0.191342, (GLfloat) - 0.520000, (GLfloat) - 0.461940,
+ (GLfloat) - 0.097545, (GLfloat) - 0.520000, (GLfloat) - 0.490393,
+ (GLfloat) 0.000000, (GLfloat) - 0.600000, (GLfloat) - 0.500000,
+ (GLfloat) 0.097545, (GLfloat) - 0.600000, (GLfloat) - 0.490393,
+ (GLfloat) 0.191342, (GLfloat) - 0.600000, (GLfloat) - 0.461940,
+ (GLfloat) 0.277785, (GLfloat) - 0.600000, (GLfloat) - 0.415735,
+ (GLfloat) 0.353553, (GLfloat) - 0.600000, (GLfloat) - 0.353553,
+ (GLfloat) 0.415735, (GLfloat) - 0.600000, (GLfloat) - 0.277785,
+ (GLfloat) 0.461940, (GLfloat) - 0.600000, (GLfloat) - 0.191342,
+ (GLfloat) 0.490393, (GLfloat) - 0.600000, (GLfloat) - 0.097545,
+ (GLfloat) 0.500000, (GLfloat) - 0.600000, (GLfloat) - 0.000000,
+ (GLfloat) 0.490393, (GLfloat) - 0.600000, (GLfloat) 0.097545,
+ (GLfloat) 0.461940, (GLfloat) - 0.600000, (GLfloat) 0.191342,
+ (GLfloat) 0.415735, (GLfloat) - 0.600000, (GLfloat) 0.277785,
+ (GLfloat) 0.353553, (GLfloat) - 0.600000, (GLfloat) 0.353553,
+ (GLfloat) 0.277785, (GLfloat) - 0.600000, (GLfloat) 0.415735,
+ (GLfloat) 0.191342, (GLfloat) - 0.600000, (GLfloat) 0.461940,
+ (GLfloat) 0.097545, (GLfloat) - 0.600000, (GLfloat) 0.490393,
+ (GLfloat) 0.000000, (GLfloat) - 0.600000, (GLfloat) 0.500000,
+ (GLfloat) - 0.097545, (GLfloat) - 0.600000, (GLfloat) 0.490393,
+ (GLfloat) - 0.191342, (GLfloat) - 0.600000, (GLfloat) 0.461940,
+ (GLfloat) - 0.277785, (GLfloat) - 0.600000, (GLfloat) 0.415735,
+ (GLfloat) - 0.353553, (GLfloat) - 0.600000, (GLfloat) 0.353553,
+ (GLfloat) - 0.415735, (GLfloat) - 0.600000, (GLfloat) 0.277785,
+ (GLfloat) - 0.461940, (GLfloat) - 0.600000, (GLfloat) 0.191342,
+ (GLfloat) - 0.490393, (GLfloat) - 0.600000, (GLfloat) 0.097545,
+ (GLfloat) - 0.500000, (GLfloat) - 0.600000, (GLfloat) 0.000000,
+ (GLfloat) - 0.490393, (GLfloat) - 0.600000, (GLfloat) - 0.097545,
+ (GLfloat) - 0.461940, (GLfloat) - 0.600000, (GLfloat) - 0.191342,
+ (GLfloat) - 0.415735, (GLfloat) - 0.600000, (GLfloat) - 0.277785,
+ (GLfloat) - 0.353553, (GLfloat) - 0.600000, (GLfloat) - 0.353553,
+ (GLfloat) - 0.277785, (GLfloat) - 0.600000, (GLfloat) - 0.415735,
+ (GLfloat) - 0.191342, (GLfloat) - 0.600000, (GLfloat) - 0.461940,
+ (GLfloat) - 0.097545, (GLfloat) - 0.600000, (GLfloat) - 0.490393,
+ (GLfloat) 0.000000, (GLfloat) 0.500000, (GLfloat) - 0.520000,
+ (GLfloat) 0.097545, (GLfloat) 0.490393, (GLfloat) - 0.520000,
+ (GLfloat) 0.191342, (GLfloat) 0.461940, (GLfloat) - 0.520000,
+ (GLfloat) 0.277785, (GLfloat) 0.415735, (GLfloat) - 0.520000,
+ (GLfloat) 0.353553, (GLfloat) 0.353553, (GLfloat) - 0.520000,
+ (GLfloat) 0.415735, (GLfloat) 0.277785, (GLfloat) - 0.520000,
+ (GLfloat) 0.461940, (GLfloat) 0.191342, (GLfloat) - 0.520000,
+ (GLfloat) 0.490393, (GLfloat) 0.097545, (GLfloat) - 0.520000,
+ (GLfloat) 0.500000, (GLfloat) 0.000000, (GLfloat) - 0.520000,
+ (GLfloat) 0.490393, (GLfloat) - 0.097545, (GLfloat) - 0.520000,
+ (GLfloat) 0.461940, (GLfloat) - 0.191342, (GLfloat) - 0.520000,
+ (GLfloat) 0.415735, (GLfloat) - 0.277785, (GLfloat) - 0.520000,
+ (GLfloat) 0.353553, (GLfloat) - 0.353553, (GLfloat) - 0.520000,
+ (GLfloat) 0.277785, (GLfloat) - 0.415735, (GLfloat) - 0.520000,
+ (GLfloat) 0.191342, (GLfloat) - 0.461940, (GLfloat) - 0.520000,
+ (GLfloat) 0.097545, (GLfloat) - 0.490393, (GLfloat) - 0.520000,
+ (GLfloat) 0.000000, (GLfloat) - 0.500000, (GLfloat) - 0.520000,
+ (GLfloat) - 0.097545, (GLfloat) - 0.490393, (GLfloat) - 0.520000,
+ (GLfloat) - 0.191342, (GLfloat) - 0.461940, (GLfloat) - 0.520000,
+ (GLfloat) - 0.277785, (GLfloat) - 0.415735, (GLfloat) - 0.520000,
+ (GLfloat) - 0.353553, (GLfloat) - 0.353553, (GLfloat) - 0.520000,
+ (GLfloat) - 0.415735, (GLfloat) - 0.277785, (GLfloat) - 0.520000,
+ (GLfloat) - 0.461940, (GLfloat) - 0.191342, (GLfloat) - 0.520000,
+ (GLfloat) - 0.490393, (GLfloat) - 0.097545, (GLfloat) - 0.520000,
+ (GLfloat) - 0.500000, (GLfloat) - 0.000000, (GLfloat) - 0.520000,
+ (GLfloat) - 0.490393, (GLfloat) 0.097545, (GLfloat) - 0.520000,
+ (GLfloat) - 0.461940, (GLfloat) 0.191342, (GLfloat) - 0.520000,
+ (GLfloat) - 0.415735, (GLfloat) 0.277785, (GLfloat) - 0.520000,
+ (GLfloat) - 0.353553, (GLfloat) 0.353553, (GLfloat) - 0.520000,
+ (GLfloat) - 0.277785, (GLfloat) 0.415735, (GLfloat) - 0.520000,
+ (GLfloat) - 0.191342, (GLfloat) 0.461940, (GLfloat) - 0.520000,
+ (GLfloat) - 0.097545, (GLfloat) 0.490393, (GLfloat) - 0.520000,
+ (GLfloat) 0.000000, (GLfloat) 0.500000, (GLfloat) - 0.600000,
+ (GLfloat) 0.097545, (GLfloat) 0.490393, (GLfloat) - 0.600000,
+ (GLfloat) 0.191342, (GLfloat) 0.461940, (GLfloat) - 0.600000,
+ (GLfloat) 0.277785, (GLfloat) 0.415735, (GLfloat) - 0.600000,
+ (GLfloat) 0.353553, (GLfloat) 0.353553, (GLfloat) - 0.600000,
+ (GLfloat) 0.415735, (GLfloat) 0.277785, (GLfloat) - 0.600000,
+ (GLfloat) 0.461940, (GLfloat) 0.191342, (GLfloat) - 0.600000,
+ (GLfloat) 0.490393, (GLfloat) 0.097545, (GLfloat) - 0.600000,
+ (GLfloat) 0.500000, (GLfloat) 0.000000, (GLfloat) - 0.600000,
+ (GLfloat) 0.490393, (GLfloat) - 0.097545, (GLfloat) - 0.600000,
+ (GLfloat) 0.461940, (GLfloat) - 0.191342, (GLfloat) - 0.600000,
+ (GLfloat) 0.415735, (GLfloat) - 0.277785, (GLfloat) - 0.600000,
+ (GLfloat) 0.353553, (GLfloat) - 0.353553, (GLfloat) - 0.600000,
+ (GLfloat) 0.277785, (GLfloat) - 0.415735, (GLfloat) - 0.600000,
+ (GLfloat) 0.191342, (GLfloat) - 0.461940, (GLfloat) - 0.600000,
+ (GLfloat) 0.097545, (GLfloat) - 0.490393, (GLfloat) - 0.600000,
+ (GLfloat) 0.000000, (GLfloat) - 0.500000, (GLfloat) - 0.600000,
+ (GLfloat) - 0.097545, (GLfloat) - 0.490393, (GLfloat) - 0.600000,
+ (GLfloat) - 0.191342, (GLfloat) - 0.461940, (GLfloat) - 0.600000,
+ (GLfloat) - 0.277785, (GLfloat) - 0.415735, (GLfloat) - 0.600000,
+ (GLfloat) - 0.353553, (GLfloat) - 0.353553, (GLfloat) - 0.600000,
+ (GLfloat) - 0.415735, (GLfloat) - 0.277785, (GLfloat) - 0.600000,
+ (GLfloat) - 0.461940, (GLfloat) - 0.191342, (GLfloat) - 0.600000,
+ (GLfloat) - 0.490393, (GLfloat) - 0.097545, (GLfloat) - 0.600000,
+ (GLfloat) - 0.500000, (GLfloat) - 0.000000, (GLfloat) - 0.600000,
+ (GLfloat) - 0.490393, (GLfloat) 0.097545, (GLfloat) - 0.600000,
+ (GLfloat) - 0.461940, (GLfloat) 0.191342, (GLfloat) - 0.600000,
+ (GLfloat) - 0.415735, (GLfloat) 0.277785, (GLfloat) - 0.600000,
+ (GLfloat) - 0.353553, (GLfloat) 0.353553, (GLfloat) - 0.600000,
+ (GLfloat) - 0.277785, (GLfloat) 0.415735, (GLfloat) - 0.600000,
+ (GLfloat) - 0.191342, (GLfloat) 0.461940, (GLfloat) - 0.600000,
+ (GLfloat) - 0.097545, (GLfloat) 0.490393, (GLfloat) - 0.600000,
+};
+
+GLfloat ElbowCoins_normals[] =
+{
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) 1.000000,
+ (GLfloat) 0.098017, (GLfloat) 0.995185, (GLfloat) 0.000000,
+ (GLfloat) 0.290285, (GLfloat) 0.956940, (GLfloat) 0.000000,
+ (GLfloat) 0.471397, (GLfloat) 0.881921, (GLfloat) 0.000000,
+ (GLfloat) 0.634393, (GLfloat) 0.773010, (GLfloat) 0.000000,
+ (GLfloat) 0.773010, (GLfloat) 0.634393, (GLfloat) 0.000000,
+ (GLfloat) 0.881921, (GLfloat) 0.471397, (GLfloat) 0.000000,
+ (GLfloat) 0.956940, (GLfloat) 0.290285, (GLfloat) 0.000000,
+ (GLfloat) 0.995185, (GLfloat) 0.098017, (GLfloat) 0.000000,
+ (GLfloat) 0.995185, (GLfloat) - 0.098017, (GLfloat) - 0.000000,
+ (GLfloat) 0.956940, (GLfloat) - 0.290285, (GLfloat) - 0.000000,
+ (GLfloat) 0.881921, (GLfloat) - 0.471397, (GLfloat) - 0.000000,
+ (GLfloat) 0.773010, (GLfloat) - 0.634393, (GLfloat) - 0.000000,
+ (GLfloat) 0.634393, (GLfloat) - 0.773010, (GLfloat) - 0.000000,
+ (GLfloat) 0.471397, (GLfloat) - 0.881921, (GLfloat) - 0.000000,
+ (GLfloat) 0.290285, (GLfloat) - 0.956940, (GLfloat) - 0.000000,
+ (GLfloat) 0.098017, (GLfloat) - 0.995185, (GLfloat) - 0.000000,
+ (GLfloat) - 0.098017, (GLfloat) - 0.995185, (GLfloat) - 0.000000,
+ (GLfloat) - 0.290285, (GLfloat) - 0.956940, (GLfloat) - 0.000000,
+ (GLfloat) - 0.471397, (GLfloat) - 0.881921, (GLfloat) - 0.000000,
+ (GLfloat) - 0.634393, (GLfloat) - 0.773010, (GLfloat) - 0.000000,
+ (GLfloat) - 0.773010, (GLfloat) - 0.634393, (GLfloat) - 0.000000,
+ (GLfloat) - 0.881921, (GLfloat) - 0.471397, (GLfloat) - 0.000000,
+ (GLfloat) - 0.956940, (GLfloat) - 0.290285, (GLfloat) - 0.000000,
+ (GLfloat) - 0.995185, (GLfloat) - 0.098017, (GLfloat) - 0.000000,
+ (GLfloat) - 0.995185, (GLfloat) 0.098017, (GLfloat) - 0.000000,
+ (GLfloat) - 0.956940, (GLfloat) 0.290285, (GLfloat) - 0.000000,
+ (GLfloat) - 0.881921, (GLfloat) 0.471397, (GLfloat) - 0.000000,
+ (GLfloat) - 0.773010, (GLfloat) 0.634393, (GLfloat) - 0.000000,
+ (GLfloat) - 0.634393, (GLfloat) 0.773010, (GLfloat) - 0.000000,
+ (GLfloat) - 0.471397, (GLfloat) 0.881921, (GLfloat) - 0.000000,
+ (GLfloat) - 0.290285, (GLfloat) 0.956940, (GLfloat) - 0.000000,
+ (GLfloat) - 0.098017, (GLfloat) 0.995185, (GLfloat) - 0.000000,
+ (GLfloat) - 0.000000, (GLfloat) 0.000000, (GLfloat) - 1.000000,
+ (GLfloat) - 0.000000, (GLfloat) 1.000000, (GLfloat) - 0.000000,
+ (GLfloat) 0.098017, (GLfloat) 0.000000, (GLfloat) - 0.995185,
+ (GLfloat) 0.290285, (GLfloat) 0.000000, (GLfloat) - 0.956940,
+ (GLfloat) 0.471397, (GLfloat) 0.000000, (GLfloat) - 0.881921,
+ (GLfloat) 0.634393, (GLfloat) 0.000000, (GLfloat) - 0.773010,
+ (GLfloat) 0.773010, (GLfloat) 0.000000, (GLfloat) - 0.634393,
+ (GLfloat) 0.881921, (GLfloat) 0.000000, (GLfloat) - 0.471397,
+ (GLfloat) 0.956940, (GLfloat) 0.000000, (GLfloat) - 0.290285,
+ (GLfloat) 0.995185, (GLfloat) 0.000000, (GLfloat) - 0.098017,
+ (GLfloat) 0.995185, (GLfloat) 0.000000, (GLfloat) 0.098017,
+ (GLfloat) 0.956940, (GLfloat) 0.000000, (GLfloat) 0.290285,
+ (GLfloat) 0.881921, (GLfloat) 0.000000, (GLfloat) 0.471397,
+ (GLfloat) 0.773010, (GLfloat) 0.000000, (GLfloat) 0.634393,
+ (GLfloat) 0.634393, (GLfloat) 0.000000, (GLfloat) 0.773010,
+ (GLfloat) 0.471397, (GLfloat) 0.000000, (GLfloat) 0.881921,
+ (GLfloat) 0.290285, (GLfloat) 0.000000, (GLfloat) 0.956940,
+ (GLfloat) 0.098017, (GLfloat) 0.000000, (GLfloat) 0.995185,
+ (GLfloat) - 0.098017, (GLfloat) 0.000000, (GLfloat) 0.995185,
+ (GLfloat) - 0.290285, (GLfloat) 0.000000, (GLfloat) 0.956940,
+ (GLfloat) - 0.471397, (GLfloat) 0.000000, (GLfloat) 0.881921,
+ (GLfloat) - 0.634393, (GLfloat) 0.000000, (GLfloat) 0.773010,
+ (GLfloat) - 0.773010, (GLfloat) 0.000000, (GLfloat) 0.634393,
+ (GLfloat) - 0.881921, (GLfloat) 0.000000, (GLfloat) 0.471397,
+ (GLfloat) - 0.956940, (GLfloat) 0.000000, (GLfloat) 0.290285,
+ (GLfloat) - 0.995185, (GLfloat) - 0.000000, (GLfloat) 0.098017,
+ (GLfloat) - 0.995185, (GLfloat) - 0.000000, (GLfloat) - 0.098017,
+ (GLfloat) - 0.956940, (GLfloat) - 0.000000, (GLfloat) - 0.290285,
+ (GLfloat) - 0.881921, (GLfloat) - 0.000000, (GLfloat) - 0.471397,
+ (GLfloat) - 0.773010, (GLfloat) - 0.000000, (GLfloat) - 0.634393,
+ (GLfloat) - 0.634393, (GLfloat) - 0.000000, (GLfloat) - 0.773010,
+ (GLfloat) - 0.471397, (GLfloat) - 0.000000, (GLfloat) - 0.881921,
+ (GLfloat) - 0.290285, (GLfloat) - 0.000000, (GLfloat) - 0.956940,
+ (GLfloat) - 0.098017, (GLfloat) - 0.000000, (GLfloat) - 0.995185,
+ (GLfloat) - 0.000000, (GLfloat) - 1.000000, (GLfloat) - 0.000000,
+};
+
+unsigned short int ElbowCoins_POLS[] =
+{
+ 32, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 1, 4, 96, 97, 65, 64, 1,
+ 4, 97, 98, 66, 65, 1, 4, 98, 99, 67, 66, 1, 4, 99, 100, 68, 67, 1, 4, 100,
+ 101, 69, 68, 1, 4, 101, 102, 70, 69, 1, 4, 102, 103, 71, 70, 1, 4, 103, 104, 72,
+71, 1, 4, 104, 105, 73, 72, 1, 4, 105, 106, 74, 73, 1, 4, 106, 107, 75, 74, 1,
+ 4, 107, 108, 76, 75, 1, 4, 108, 109, 77, 76, 1, 4, 109, 110, 78, 77, 1, 4, 110,
+ 111, 79, 78, 1, 4, 111, 112, 80, 79, 1, 4, 112, 113, 81, 80, 1, 4, 113, 114, 82,
+81, 1, 4, 114, 115, 83, 82, 1, 4, 115, 116, 84, 83, 1, 4, 116, 117, 85, 84, 1,
+ 4, 117, 118, 86, 85, 1, 4, 118, 119, 87, 86, 1, 4, 119, 120, 88, 87, 1, 4, 120,
+ 121, 89, 88, 1, 4, 121, 122, 90, 89, 1, 4, 122, 123, 91, 90, 1, 4, 123, 124, 92,
+91, 1, 4, 124, 125, 93, 92, 1, 4, 125, 126, 94, 93, 1, 4, 126, 127, 95, 94, 1,
+ 4, 127, 96, 64, 95, 1, 32, 96, 127, 126, 125, 124, 123, 122, 121, 120, 119, 118, 117, 116,
+ 115, 114, 113, 112, 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 97, 1,
+ 32, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
+ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1, 4, 32, 33, 1, 0, 1,
+ 4, 33, 34, 2, 1, 1, 4, 34, 35, 3, 2, 1, 4, 35, 36, 4, 3, 1, 4, 36,
+ 37, 5, 4, 1, 4, 37, 38, 6, 5, 1, 4, 38, 39, 7, 6, 1, 4, 39, 40, 8,
+ 7, 1, 4, 40, 41, 9, 8, 1, 4, 41, 42, 10, 9, 1, 4, 42, 43, 11, 10, 1,
+ 4, 43, 44, 12, 11, 1, 4, 44, 45, 13, 12, 1, 4, 45, 46, 14, 13, 1, 4, 46,
+ 47, 15, 14, 1, 4, 47, 48, 16, 15, 1, 4, 48, 49, 17, 16, 1, 4, 49, 50, 18,
+ 17, 1, 4, 50, 51, 19, 18, 1, 4, 51, 52, 20, 19, 1, 4, 52, 53, 21, 20, 1,
+ 4, 53, 54, 22, 21, 1, 4, 54, 55, 23, 22, 1, 4, 55, 56, 24, 23, 1, 4, 56,
+ 57, 25, 24, 1, 4, 57, 58, 26, 25, 1, 4, 58, 59, 27, 26, 1, 4, 59, 60, 28,
+ 27, 1, 4, 60, 61, 29, 28, 1, 4, 61, 62, 30, 29, 1, 4, 62, 63, 31, 30, 1,
+ 4, 63, 32, 0, 31, 1, 32, 32, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52,
+51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 1,
+ 0
+};
+
+struct lwo LWO_ElbowCoins =
+{
+ 128, /* number of points */
+ ElbowCoins_PNTS, ElbowCoins_normals, ElbowCoins_POLS, 0L
+};
+
+#endif /* USE_GL */
+
+/* End of pipeobjs.c */
--- /dev/null
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)pipes.c 4.02 97/04/29 xlockmore";
+
+#endif
+
+/*-
+ * pipes.c - Shows 3D selfbuiding pipe system (xlock Version)
+ *
+ * This program was inspired on a WindowsNT(R)'s screen saver. It was written
+ * from scratch and it was not based on any other source code.
+ *
+ * ==========================================================================
+ * The routine myElbow is derivated from the doughnut routine from the MesaGL
+ * library (more especifically the Mesaaux library) written by Brian Paul.
+ * ==========================================================================
+ *
+ * Thanks goes to Brian Paul for making it possible and inexpensive to use
+ * OpenGL at home.
+ *
+ * Since I'm not a native english speaker, my apologies for any gramatical
+ * mistake.
+ *
+ * My e-mail addresses are
+ *
+ * vianna@cat.cbpf.br
+ * and
+ * marcelo@venus.rdc.puc-rio.br
+ *
+ * Marcelo F. Vianna (Apr-09-1997)
+ *
+ * Revision History:
+ * 29-Apr-97: Factory equipment by Ed Mackey. Productive day today, eh?
+ * 29-Apr-97: Less tight turns Jeff Epler <jepler@inetnebr.com>
+ * 29-Apr-97: Efficiency speed-ups by Marcelo F. Vianna
+ */
+
+/*-
+ * due to a Bug/feature in VMS X11/Intrinsic.h has to be placed before xlock.
+ * otherwise caddr_t is not defined correctly
+ */
+#include <X11/Intrinsic.h>
+#include "xlock.h"
+
+#ifdef USE_GL
+
+#include <GL/glu.h>
+#include "glx/buildlwo.h"
+
+#define DEF_FACTORY "2"
+#define DEF_FISHEYE "True"
+#define DEF_TIGHTTURNS "False"
+#define DEF_ROTATEPIPES "True"
+#define NofSysTypes 3
+
+static int factory;
+static Bool fisheye, tightturns, rotatepipes;
+
+static XrmOptionDescRec opts[] =
+{
+ {"-factory", ".pipes.factory", XrmoptionSepArg, (caddr_t) NULL},
+ {"-fisheye", ".pipes.fisheye", XrmoptionNoArg, (caddr_t) "on"},
+ {"+fisheye", ".pipes.fisheye", XrmoptionNoArg, (caddr_t) "off"},
+ {"-tightturns", ".pipes.tightturns", XrmoptionNoArg, (caddr_t) "on"},
+ {"+tightturns", ".pipes.tightturns", XrmoptionNoArg, (caddr_t) "off"},
+ {"-rotatepipes", ".pipes.rotatepipes", XrmoptionNoArg, (caddr_t) "on"},
+ {"+rotatepipes", ".pipes.rotatepipes", XrmoptionNoArg, (caddr_t) "off"}
+};
+static argtype vars[] =
+{
+ {(caddr_t *) & factory, "factory", "Factory", DEF_FACTORY, t_Int},
+ {(caddr_t *) & fisheye, "fisheye", "Fisheye", DEF_FISHEYE, t_Bool},
+ {(caddr_t *) & tightturns, "tightturns", "Tightturns", DEF_TIGHTTURNS, t_Bool},
+ {(caddr_t *) & rotatepipes, "rotatepipes", "Rotatepipes", DEF_ROTATEPIPES, t_Bool}
+};
+static OptionStruct desc[] =
+{
+ {"-factory num", "how much extra equipment in pipes (0 for none)"},
+ {"-/+fisheye", "turn on/off zoomed-in view of pipes"},
+ {"-/+tightturns", "turn on/off tight turns"},
+ {"-/+rotatepipes", "turn on/off pipe system rotation per screenful"}
+};
+
+ModeSpecOpt pipes_opts =
+{7, opts, 4, vars, desc};
+
+#define Scale4Window 0.1
+#define Scale4Iconic 0.07
+
+#define one_third 0.3333333333333333333
+
+#define dirNone -1
+#define dirUP 0
+#define dirDOWN 1
+#define dirLEFT 2
+#define dirRIGHT 3
+#define dirNEAR 4
+#define dirFAR 5
+
+#define HCELLS 33
+#define VCELLS 25
+#define DEFINEDCOLORS 7
+#define elbowradius 0.5
+
+/*************************************************************************/
+
+typedef struct {
+#if defined( MESA ) && defined( SLOW )
+ int flip;
+#endif
+ GLint WindH, WindW;
+ int Cells[HCELLS][VCELLS][HCELLS];
+ int usedcolors[DEFINEDCOLORS];
+ int directions[6];
+ int ndirections;
+ int nowdir, olddir;
+ int system_number;
+ int counter;
+ int PX, PY, PZ;
+ int number_of_systems;
+ int system_type;
+ int system_length;
+ int turncounter;
+ float *system_color;
+ GLfloat initial_rotation;
+ GLuint valve, bolts, betweenbolts, elbowbolts, elbowcoins;
+ GLuint guagehead, guageface, guagedial, guageconnector;
+ GLXContext glx_context;
+} pipesstruct;
+
+extern struct lwo LWO_BigValve, LWO_PipeBetweenBolts, LWO_Bolts3D;
+extern struct lwo LWO_GuageHead, LWO_GuageFace, LWO_GuageDial, LWO_GuageConnector;
+extern struct lwo LWO_ElbowBolts, LWO_ElbowCoins;
+
+static float front_shininess[] =
+{60.0};
+static float front_specular[] =
+{0.7, 0.7, 0.7, 1.0};
+static float ambient0[] =
+{0.4, 0.4, 0.4, 1.0};
+static float diffuse0[] =
+{1.0, 1.0, 1.0, 1.0};
+static float ambient1[] =
+{0.2, 0.2, 0.2, 1.0};
+static float diffuse1[] =
+{0.5, 0.5, 0.5, 1.0};
+static float position0[] =
+{1.0, 1.0, 1.0, 0.0};
+static float position1[] =
+{-1.0, -1.0, 1.0, 0.0};
+static float lmodel_ambient[] =
+{0.5, 0.5, 0.5, 1.0};
+static float lmodel_twoside[] =
+{GL_TRUE};
+
+static float MaterialRed[] =
+{0.7, 0.0, 0.0, 1.0};
+static float MaterialGreen[] =
+{0.1, 0.5, 0.2, 1.0};
+static float MaterialBlue[] =
+{0.0, 0.0, 0.7, 1.0};
+static float MaterialCyan[] =
+{0.2, 0.5, 0.7, 1.0};
+static float MaterialYellow[] =
+{0.7, 0.7, 0.0, 1.0};
+static float MaterialMagenta[] =
+{0.6, 0.2, 0.5, 1.0};
+static float MaterialWhite[] =
+{0.7, 0.7, 0.7, 1.0};
+static float MaterialGray[] =
+{0.2, 0.2, 0.2, 1.0};
+
+static pipesstruct *pipes = NULL;
+
+
+static void
+MakeTube(int direction)
+{
+ float an;
+ float SINan_3, COSan_3;
+
+ /*dirUP = 00000000 */
+ /*dirDOWN = 00000001 */
+ /*dirLEFT = 00000010 */
+ /*dirRIGHT = 00000011 */
+ /*dirNEAR = 00000100 */
+ /*dirFAR = 00000101 */
+
+ glRotatef(90.0, (direction & 6) ? 0.0 : 1.0, (direction & 2) ? 1.0 : 0.0, 0.0);
+
+ glBegin(GL_QUAD_STRIP);
+ for (an = 0.0; an <= 2.0 * M_PI; an += M_PI / 12.0) {
+ glNormal3f((COSan_3 = cos(an) / 3.0), (SINan_3 = sin(an) / 3.0), 0.0);
+ glVertex3f(COSan_3, SINan_3, one_third);
+ glVertex3f(COSan_3, SINan_3, -one_third);
+ }
+ glEnd();
+}
+
+static void
+mySphere(float radius)
+{
+ GLUquadricObj *quadObj;
+
+ quadObj = gluNewQuadric();
+ gluQuadricDrawStyle(quadObj, (GLenum) GLU_FILL);
+ gluSphere(quadObj, radius, 16, 16);
+ gluDeleteQuadric(quadObj);
+}
+
+static void
+myElbow(ModeInfo * mi, int bolted)
+{
+#define nsides 25
+#define rings 25
+#define r one_third
+#define R one_third
+
+ pipesstruct *pp = &pipes[MI_SCREEN(mi)];
+
+ int i, j;
+ GLfloat p0[3], p1[3], p2[3], p3[3];
+ GLfloat n0[3], n1[3], n2[3], n3[3];
+ GLfloat COSphi, COSphi1, COStheta, COStheta1;
+ GLfloat _SINtheta, _SINtheta1;
+
+ for (i = 0; i <= rings / 4; i++) {
+ GLfloat theta, theta1;
+
+ theta = (GLfloat) i *2.0 * M_PI / rings;
+
+ theta1 = (GLfloat) (i + 1) * 2.0 * M_PI / rings;
+ for (j = 0; j < nsides; j++) {
+ GLfloat phi, phi1;
+
+ phi = (GLfloat) j *2.0 * M_PI / nsides;
+
+ phi1 = (GLfloat) (j + 1) * 2.0 * M_PI / nsides;
+
+ p0[0] = (COStheta = cos(theta)) * (R + r * (COSphi = cos(phi)));
+ p0[1] = (_SINtheta = -sin(theta)) * (R + r * COSphi);
+
+ p1[0] = (COStheta1 = cos(theta1)) * (R + r * COSphi);
+ p1[1] = (_SINtheta1 = -sin(theta1)) * (R + r * COSphi);
+
+ p2[0] = COStheta1 * (R + r * (COSphi1 = cos(phi1)));
+ p2[1] = _SINtheta1 * (R + r * COSphi1);
+
+ p3[0] = COStheta * (R + r * COSphi1);
+ p3[1] = _SINtheta * (R + r * COSphi1);
+
+ n0[0] = COStheta * COSphi;
+ n0[1] = _SINtheta * COSphi;
+
+ n1[0] = COStheta1 * COSphi;
+ n1[1] = _SINtheta1 * COSphi;
+
+ n2[0] = COStheta1 * COSphi1;
+ n2[1] = _SINtheta1 * COSphi1;
+
+ n3[0] = COStheta * COSphi1;
+ n3[1] = _SINtheta * COSphi1;
+
+ p0[2] = p1[2] = r * (n0[2] = n1[2] = sin(phi));
+ p2[2] = p3[2] = r * (n2[2] = n3[2] = sin(phi1));
+
+ glBegin(GL_QUADS);
+ glNormal3fv(n3);
+ glVertex3fv(p3);
+ glNormal3fv(n2);
+ glVertex3fv(p2);
+ glNormal3fv(n1);
+ glVertex3fv(p1);
+ glNormal3fv(n0);
+ glVertex3fv(p0);
+ glEnd();
+ }
+ }
+
+ if (factory > 0 && bolted) {
+ /* Bolt the elbow onto the pipe system */
+ glFrontFace(GL_CW);
+ glPushMatrix();
+ glRotatef(90.0, 0.0, 0.0, -1.0);
+ glRotatef(90.0, 0.0, 1.0, 0.0);
+ glTranslatef(0.0, one_third, one_third);
+ glCallList(pp->elbowcoins);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialGray);
+ glCallList(pp->elbowbolts);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, pp->system_color);
+ glPopMatrix();
+ glFrontFace(GL_CCW);
+ }
+#undef r
+#undef R
+#undef nsides
+#undef rings
+}
+
+static void
+FindNeighbors(ModeInfo * mi)
+{
+ pipesstruct *pp = &pipes[MI_SCREEN(mi)];
+
+ pp->ndirections = 0;
+ pp->directions[dirUP] = (!pp->Cells[pp->PX][pp->PY + 1][pp->PZ]) ? 1 : 0;
+ pp->ndirections += pp->directions[dirUP];
+ pp->directions[dirDOWN] = (!pp->Cells[pp->PX][pp->PY - 1][pp->PZ]) ? 1 : 0;
+ pp->ndirections += pp->directions[dirDOWN];
+ pp->directions[dirLEFT] = (!pp->Cells[pp->PX - 1][pp->PY][pp->PZ]) ? 1 : 0;
+ pp->ndirections += pp->directions[dirLEFT];
+ pp->directions[dirRIGHT] = (!pp->Cells[pp->PX + 1][pp->PY][pp->PZ]) ? 1 : 0;
+ pp->ndirections += pp->directions[dirRIGHT];
+ pp->directions[dirFAR] = (!pp->Cells[pp->PX][pp->PY][pp->PZ - 1]) ? 1 : 0;
+ pp->ndirections += pp->directions[dirFAR];
+ pp->directions[dirNEAR] = (!pp->Cells[pp->PX][pp->PY][pp->PZ + 1]) ? 1 : 0;
+ pp->ndirections += pp->directions[dirNEAR];
+}
+
+static int
+SelectNeighbor(ModeInfo * mi)
+{
+ pipesstruct *pp = &pipes[MI_SCREEN(mi)];
+ int dirlist[6];
+ int i, j;
+
+ for (i = 0, j = 0; i < 6; i++) {
+ if (pp->directions[i]) {
+ dirlist[j] = i;
+ j++;
+ }
+ }
+
+ return dirlist[NRAND(pp->ndirections)];
+}
+
+static void
+MakeValve(ModeInfo * mi, int newdir)
+{
+ pipesstruct *pp = &pipes[MI_SCREEN(mi)];
+
+ /* There is a glPopMatrix() right after this subroutine returns. */
+ switch (newdir) {
+ case dirUP:
+ case dirDOWN:
+ glRotatef(90.0, 1.0, 0.0, 0.0);
+ glRotatef(NRAND(3) * 90.0, 0.0, 0.0, 1.0);
+ break;
+ case dirLEFT:
+ case dirRIGHT:
+ glRotatef(90.0, 0.0, -1.0, 0.0);
+ glRotatef((NRAND(3) * 90.0) - 90.0, 0.0, 0.0, 1.0);
+ break;
+ case dirNEAR:
+ case dirFAR:
+ glRotatef(NRAND(4) * 90.0, 0.0, 0.0, 1.0);
+ break;
+ }
+ glFrontFace(GL_CW);
+ glCallList(pp->betweenbolts);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialGray);
+ glCallList(pp->bolts);
+ if (!MI_WIN_IS_MONO(mi)) {
+ if (pp->system_color == MaterialRed) {
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, NRAND(2) ? MaterialYellow : MaterialBlue);
+ } else if (pp->system_color == MaterialBlue) {
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, NRAND(2) ? MaterialRed : MaterialYellow);
+ } else if (pp->system_color == MaterialYellow) {
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, NRAND(2) ? MaterialBlue : MaterialRed);
+ } else {
+ switch ((NRAND(3))) {
+ case 0:
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialRed);
+ break;
+ case 1:
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialBlue);
+ break;
+ case 2:
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialYellow);
+ }
+ }
+ }
+ glRotatef((GLfloat) (NRAND(90)), 1.0, 0.0, 0.0);
+ glCallList(pp->valve);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, pp->system_color);
+ glFrontFace(GL_CCW);
+}
+
+static int
+MakeGuage(ModeInfo * mi, int newdir)
+{
+ pipesstruct *pp = &pipes[MI_SCREEN(mi)];
+
+ /* Can't have a guage on a vertical pipe. */
+ if ((newdir == dirUP) || (newdir == dirDOWN))
+ return (0);
+
+ /* Is there space above this pipe for a guage? */
+ if (!pp->directions[dirUP])
+ return (0);
+
+ /* Yes! Mark the space as used. */
+ pp->Cells[pp->PX][pp->PY + 1][pp->PZ] = 1;
+
+ glFrontFace(GL_CW);
+ glPushMatrix();
+ if ((newdir == dirLEFT) || (newdir == dirRIGHT))
+ glRotatef(90.0, 0.0, 1.0, 0.0);
+ glCallList(pp->betweenbolts);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialGray);
+ glCallList(pp->bolts);
+ glPopMatrix();
+
+ glCallList(pp->guageconnector);
+ glPushMatrix();
+ glTranslatef(0.0, 1.33333, 0.0);
+ /* Do not change the above to 1 + ONE_THIRD, because */
+ /* the object really is centered on 1.3333300000. */
+ glRotatef(NRAND(270) + 45.0, 0.0, 0.0, -1.0);
+ /* Random rotation for the dial. I love it. */
+ glCallList(pp->guagedial);
+ glPopMatrix();
+
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, pp->system_color);
+ glCallList(pp->guagehead);
+
+ /* GuageFace is drawn last, in case of low-res depth buffers. */
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialWhite);
+ glCallList(pp->guageface);
+
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, pp->system_color);
+ glFrontFace(GL_CCW);
+
+ return (1);
+}
+
+static void
+MakeShape(ModeInfo * mi, int newdir)
+{
+ switch (NRAND(2)) {
+ case 1:
+ if (!MakeGuage(mi, newdir))
+ MakeTube(newdir);
+ break;
+ default:
+ MakeValve(mi, newdir);
+ break;
+ }
+}
+
+static void pinit(ModeInfo * mi, int zera);
+
+void
+draw_pipes(ModeInfo * mi)
+{
+ pipesstruct *pp = &pipes[MI_SCREEN(mi)];
+
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+
+ int newdir;
+ int OPX, OPY, OPZ;
+
+ glXMakeCurrent(display, window, pp->glx_context);
+
+#if defined( MESA ) && defined( SLOW )
+ glDrawBuffer(GL_BACK);
+#else
+ glDrawBuffer(GL_FRONT);
+#endif
+ glPushMatrix();
+
+ glTranslatef(0.0, 0.0, fisheye ? -3.8 : -4.8);
+ if (rotatepipes)
+ glRotatef(pp->initial_rotation, 0.0, 1.0, 0.0);
+
+ if (!MI_WIN_IS_ICONIC(mi)) {
+ /* Width/height ratio handled by gluPerspective() now. */
+ glScalef(Scale4Window, Scale4Window, Scale4Window);
+ } else {
+ glScalef(Scale4Iconic, Scale4Iconic, Scale4Iconic);
+ }
+
+ FindNeighbors(mi);
+
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, pp->system_color);
+
+ /* If it's the begining of a system, draw a sphere */
+ if (pp->olddir == dirNone) {
+ glPushMatrix();
+ glTranslatef((pp->PX - 16) / 3.0 * 4.0, (pp->PY - 12) / 3.0 * 4.0, (pp->PZ - 16) / 3.0 * 4.0);
+ mySphere(0.6);
+ glPopMatrix();
+ }
+ /* Check for stop conditions */
+ if (pp->ndirections == 0 || pp->counter > pp->system_length) {
+ glPushMatrix();
+ glTranslatef((pp->PX - 16) / 3.0 * 4.0, (pp->PY - 12) / 3.0 * 4.0, (pp->PZ - 16) / 3.0 * 4.0);
+ /* Finish the system with another sphere */
+ mySphere(0.6);
+#if defined( MESA ) && defined( SLOW )
+ glXSwapBuffers(display, window);
+#endif
+ glPopMatrix();
+
+ /* If the maximum number of system was drawn, restart (clearing the screen), */
+ /* else start a new system. */
+ if (++pp->system_number > pp->number_of_systems) {
+ (void) sleep(1);
+ pinit(mi, 1);
+ } else {
+ pinit(mi, 0);
+ }
+
+ glPopMatrix();
+ return;
+ }
+ pp->counter++;
+ pp->turncounter++;
+
+ /* Do will the direction change? if so, determine the new one */
+ newdir = pp->nowdir;
+ if (!pp->directions[newdir]) { /* cannot proceed in the current direction */
+ newdir = SelectNeighbor(mi);
+ } else {
+ if (tightturns) {
+ /* random change (20% chance) */
+ if ((pp->counter > 1) && (NRAND(100) < 20)) {
+ newdir = SelectNeighbor(mi);
+ }
+ } else {
+ /* Chance to turn increases after each length of pipe drawn */
+ if ((pp->counter > 1) && NRAND(50) < NRAND(pp->turncounter + 1)) {
+ newdir = SelectNeighbor(mi);
+ pp->turncounter = 0;
+ }
+ }
+ }
+
+ /* Has the direction changed? */
+ if (newdir == pp->nowdir) {
+ /* If not, draw the cell's center pipe */
+ glPushMatrix();
+ glTranslatef((pp->PX - 16) / 3.0 * 4.0, (pp->PY - 12) / 3.0 * 4.0, (pp->PZ - 16) / 3.0 * 4.0);
+ /* Chance of factory shape here, if enabled. */
+ if ((pp->counter > 1) && (NRAND(100) < factory)) {
+ MakeShape(mi, newdir);
+ } else {
+ MakeTube(newdir);
+ }
+ glPopMatrix();
+ } else {
+ /* If so, draw the cell's center elbow/sphere */
+ int sysT = pp->system_type;
+
+ if (sysT == NofSysTypes + 1) {
+ sysT = ((pp->system_number - 1) % NofSysTypes) + 1;
+ }
+ glPushMatrix();
+
+ switch (sysT) {
+ case 1:
+ glTranslatef((pp->PX - 16) / 3.0 * 4.0, (pp->PY - 12) / 3.0 * 4.0, (pp->PZ - 16) / 3.0 * 4.0);
+ mySphere(elbowradius);
+ break;
+ case 2:
+ case 3:
+ switch (pp->nowdir) {
+ case dirUP:
+ switch (newdir) {
+ case dirLEFT:
+ glTranslatef((pp->PX - 16) / 3.0 * 4.0 - (one_third), (pp->PY - 12) / 3.0 * 4.0 - (one_third), (pp->PZ - 16) / 3.0 * 4.0);
+ glRotatef(180.0, 1.0, 0.0, 0.0);
+ break;
+ case dirRIGHT:
+ glTranslatef((pp->PX - 16) / 3.0 * 4.0 + (one_third), (pp->PY - 12) / 3.0 * 4.0 - (one_third), (pp->PZ - 16) / 3.0 * 4.0);
+ glRotatef(180.0, 1.0, 0.0, 0.0);
+ glRotatef(180.0, 0.0, 1.0, 0.0);
+ break;
+ case dirFAR:
+ glTranslatef((pp->PX - 16) / 3.0 * 4.0, (pp->PY - 12) / 3.0 * 4.0 - (one_third), (pp->PZ - 16) / 3.0 * 4.0 - (one_third));
+ glRotatef(90.0, 0.0, 1.0, 0.0);
+ glRotatef(180.0, 0.0, 0.0, 1.0);
+ break;
+ case dirNEAR:
+ glTranslatef((pp->PX - 16) / 3.0 * 4.0, (pp->PY - 12) / 3.0 * 4.0 - (one_third), (pp->PZ - 16) / 3.0 * 4.0 + (one_third));
+ glRotatef(90.0, 0.0, 1.0, 0.0);
+ glRotatef(180.0, 1.0, 0.0, 0.0);
+ break;
+ }
+ break;
+ case dirDOWN:
+ switch (newdir) {
+ case dirLEFT:
+ glTranslatef((pp->PX - 16) / 3.0 * 4.0 - (one_third), (pp->PY - 12) / 3.0 * 4.0 + (one_third), (pp->PZ - 16) / 3.0 * 4.0);
+ break;
+ case dirRIGHT:
+ glTranslatef((pp->PX - 16) / 3.0 * 4.0 + (one_third), (pp->PY - 12) / 3.0 * 4.0 + (one_third), (pp->PZ - 16) / 3.0 * 4.0);
+ glRotatef(180.0, 0.0, 1.0, 0.0);
+ break;
+ case dirFAR:
+ glTranslatef((pp->PX - 16) / 3.0 * 4.0, (pp->PY - 12) / 3.0 * 4.0 + (one_third), (pp->PZ - 16) / 3.0 * 4.0 - (one_third));
+ glRotatef(270.0, 0.0, 1.0, 0.0);
+ break;
+ case dirNEAR:
+ glTranslatef((pp->PX - 16) / 3.0 * 4.0, (pp->PY - 12) / 3.0 * 4.0 + (one_third), (pp->PZ - 16) / 3.0 * 4.0 + (one_third));
+ glRotatef(90.0, 0.0, 1.0, 0.0);
+ break;
+ }
+ break;
+ case dirLEFT:
+ switch (newdir) {
+ case dirUP:
+ glTranslatef((pp->PX - 16) / 3.0 * 4.0 + (one_third), (pp->PY - 12) / 3.0 * 4.0 + (one_third), (pp->PZ - 16) / 3.0 * 4.0);
+ glRotatef(180.0, 0.0, 1.0, 0.0);
+ break;
+ case dirDOWN:
+ glTranslatef((pp->PX - 16) / 3.0 * 4.0 + (one_third), (pp->PY - 12) / 3.0 * 4.0 - (one_third), (pp->PZ - 16) / 3.0 * 4.0);
+ glRotatef(180.0, 1.0, 0.0, 0.0);
+ glRotatef(180.0, 0.0, 1.0, 0.0);
+ break;
+ case dirFAR:
+ glTranslatef((pp->PX - 16) / 3.0 * 4.0 + (one_third), (pp->PY - 12) / 3.0 * 4.0, (pp->PZ - 16) / 3.0 * 4.0 - (one_third));
+ glRotatef(270.0, 1.0, 0.0, 0.0);
+ glRotatef(180.0, 0.0, 1.0, 0.0);
+ break;
+ case dirNEAR:
+ glTranslatef((pp->PX - 16) / 3.0 * 4.0 + (one_third), (pp->PY - 12) / 3.0 * 4.0, (pp->PZ - 16) / 3.0 * 4.0 + (one_third));
+ glRotatef(270.0, 1.0, 0.0, 0.0);
+ glRotatef(180.0, 0.0, 0.0, 1.0);
+ break;
+ }
+ break;
+ case dirRIGHT:
+ switch (newdir) {
+ case dirUP:
+ glTranslatef((pp->PX - 16) / 3.0 * 4.0 - (one_third), (pp->PY - 12) / 3.0 * 4.0 + (one_third), (pp->PZ - 16) / 3.0 * 4.0);
+ break;
+ case dirDOWN:
+ glTranslatef((pp->PX - 16) / 3.0 * 4.0 - (one_third), (pp->PY - 12) / 3.0 * 4.0 - (one_third), (pp->PZ - 16) / 3.0 * 4.0);
+ glRotatef(180.0, 1.0, 0.0, 0.0);
+ break;
+ case dirFAR:
+ glTranslatef((pp->PX - 16) / 3.0 * 4.0 - (one_third), (pp->PY - 12) / 3.0 * 4.0, (pp->PZ - 16) / 3.0 * 4.0 - (one_third));
+ glRotatef(270.0, 1.0, 0.0, 0.0);
+ break;
+ case dirNEAR:
+ glTranslatef((pp->PX - 16) / 3.0 * 4.0 - (one_third), (pp->PY - 12) / 3.0 * 4.0, (pp->PZ - 16) / 3.0 * 4.0 + (one_third));
+ glRotatef(90.0, 1.0, 0.0, 0.0);
+ break;
+ }
+ break;
+ case dirNEAR:
+ switch (newdir) {
+ case dirLEFT:
+ glTranslatef((pp->PX - 16) / 3.0 * 4.0 - (one_third), (pp->PY - 12) / 3.0 * 4.0, (pp->PZ - 16) / 3.0 * 4.0 - (one_third));
+ glRotatef(270.0, 1.0, 0.0, 0.0);
+ break;
+ case dirRIGHT:
+ glTranslatef((pp->PX - 16) / 3.0 * 4.0 + (one_third), (pp->PY - 12) / 3.0 * 4.0, (pp->PZ - 16) / 3.0 * 4.0 - (one_third));
+ glRotatef(270.0, 1.0, 0.0, 0.0);
+ glRotatef(180.0, 0.0, 1.0, 0.0);
+ break;
+ case dirUP:
+ glTranslatef((pp->PX - 16) / 3.0 * 4.0, (pp->PY - 12) / 3.0 * 4.0 + (one_third), (pp->PZ - 16) / 3.0 * 4.0 - (one_third));
+ glRotatef(270.0, 0.0, 1.0, 0.0);
+ break;
+ case dirDOWN:
+ glTranslatef((pp->PX - 16) / 3.0 * 4.0, (pp->PY - 12) / 3.0 * 4.0 - (one_third), (pp->PZ - 16) / 3.0 * 4.0 - (one_third));
+ glRotatef(90.0, 0.0, 1.0, 0.0);
+ glRotatef(180.0, 0.0, 0.0, 1.0);
+ break;
+ }
+ break;
+ case dirFAR:
+ switch (newdir) {
+ case dirUP:
+ glTranslatef((pp->PX - 16) / 3.0 * 4.0, (pp->PY - 12) / 3.0 * 4.0 + (one_third), (pp->PZ - 16) / 3.0 * 4.0 + (one_third));
+ glRotatef(90.0, 0.0, 1.0, 0.0);
+ break;
+ case dirDOWN:
+ glTranslatef((pp->PX - 16) / 3.0 * 4.0, (pp->PY - 12) / 3.0 * 4.0 - (one_third), (pp->PZ - 16) / 3.0 * 4.0 + (one_third));
+ glRotatef(90.0, 0.0, 1.0, 0.0);
+ glRotatef(180.0, 1.0, 0.0, 0.0);
+ break;
+ case dirLEFT:
+ glTranslatef((pp->PX - 16) / 3.0 * 4.0 - (one_third), (pp->PY - 12) / 3.0 * 4.0, (pp->PZ - 16) / 3.0 * 4.0 + (one_third));
+ glRotatef(90.0, 1.0, 0.0, 0.0);
+ break;
+ case dirRIGHT:
+ glTranslatef((pp->PX - 16) / 3.0 * 4.0 + (one_third), (pp->PY - 12) / 3.0 * 4.0, (pp->PZ - 16) / 3.0 * 4.0 + (one_third));
+ glRotatef(270.0, 1.0, 0.0, 0.0);
+ glRotatef(180.0, 0.0, 0.0, 1.0);
+ break;
+ }
+ break;
+ }
+ myElbow(mi, (sysT == 2));
+ break;
+ }
+ glPopMatrix();
+ }
+
+ OPX = pp->PX;
+ OPY = pp->PY;
+ OPZ = pp->PZ;
+ pp->olddir = pp->nowdir;
+ pp->nowdir = newdir;
+ switch (pp->nowdir) {
+ case dirUP:
+ pp->PY++;
+ break;
+ case dirDOWN:
+ pp->PY--;
+ break;
+ case dirLEFT:
+ pp->PX--;
+ break;
+ case dirRIGHT:
+ pp->PX++;
+ break;
+ case dirNEAR:
+ pp->PZ++;
+ break;
+ case dirFAR:
+ pp->PZ--;
+ break;
+ }
+ pp->Cells[pp->PX][pp->PY][pp->PZ] = 1;
+
+ /* Cells'face pipe */
+ glTranslatef(((pp->PX + OPX) / 2.0 - 16) / 3.0 * 4.0, ((pp->PY + OPY) / 2.0 - 12) / 3.0 * 4.0, ((pp->PZ + OPZ) / 2.0 - 16) / 3.0 * 4.0);
+ MakeTube(newdir);
+
+ glPopMatrix();
+
+ glFlush();
+
+#if defined( MESA ) && defined( SLOW )
+ pp->flip = !pp->flip;
+ if (pp->flip)
+ glXSwapBuffers(display, window);
+#endif
+}
+
+static void
+reshape(ModeInfo * mi, int width, int height)
+{
+ pipesstruct *pp = &pipes[MI_SCREEN(mi)];
+
+ glViewport(0, 0, pp->WindW = (GLint) width, pp->WindH = (GLint) height);
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ /*glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 15.0); */
+ gluPerspective(65.0, (GLfloat) width / (GLfloat) height, 0.1, 20.0);
+ glMatrixMode(GL_MODELVIEW);
+}
+
+static void
+pinit(ModeInfo * mi, int zera)
+{
+ pipesstruct *pp = &pipes[MI_SCREEN(mi)];
+ int X, Y, Z;
+
+ glClearDepth(1.0);
+ glClearColor(0.0, 0.0, 0.0, 1.0);
+ glColor3f(1.0, 1.0, 1.0);
+
+ glLightfv(GL_LIGHT0, GL_AMBIENT, ambient0);
+ glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse0);
+ glLightfv(GL_LIGHT0, GL_POSITION, position0);
+ glLightfv(GL_LIGHT1, GL_AMBIENT, ambient1);
+ glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse1);
+ glLightfv(GL_LIGHT1, GL_POSITION, position1);
+ glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);
+ glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, lmodel_twoside);
+ glEnable(GL_LIGHTING);
+ glEnable(GL_LIGHT0);
+ glEnable(GL_LIGHT1);
+ glEnable(GL_DEPTH_TEST);
+ glEnable(GL_NORMALIZE);
+ glEnable(GL_CULL_FACE);
+
+ glShadeModel(GL_SMOOTH);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, front_shininess);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, front_specular);
+
+ if (zera) {
+ pp->system_number = 1;
+ glDrawBuffer(GL_FRONT_AND_BACK);
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+ (void) memset(pp->Cells, 0, sizeof (pp->Cells));
+ for (X = 0; X < HCELLS; X++) {
+ for (Y = 0; Y < VCELLS; Y++) {
+ pp->Cells[X][Y][0] = 1;
+ pp->Cells[X][Y][HCELLS - 1] = 1;
+ pp->Cells[0][Y][X] = 1;
+ pp->Cells[HCELLS - 1][Y][X] = 1;
+ }
+ }
+ for (X = 0; X < HCELLS; X++) {
+ for (Z = 0; Z < HCELLS; Z++) {
+ pp->Cells[X][0][Z] = 1;
+ pp->Cells[X][VCELLS - 1][Z] = 1;
+ }
+ }
+ (void) memset(pp->usedcolors, 0, sizeof (pp->usedcolors));
+ if ((pp->initial_rotation += 10.0) > 45.0) {
+ pp->initial_rotation -= 90.0;
+ }
+ }
+ pp->counter = 0;
+ pp->turncounter = 0;
+
+ if (!MI_WIN_IS_MONO(mi)) {
+ int collist[DEFINEDCOLORS];
+ int i, j, lower = 1000;
+
+ /* Avoid repeating colors on the same screen unless necessary */
+ for (i = 0; i < DEFINEDCOLORS; i++) {
+ if (lower > pp->usedcolors[i])
+ lower = pp->usedcolors[i];
+ }
+ for (i = 0, j = 0; i < DEFINEDCOLORS; i++) {
+ if (pp->usedcolors[i] == lower) {
+ collist[j] = i;
+ j++;
+ }
+ }
+ i = collist[NRAND(j)];
+ pp->usedcolors[i]++;
+ switch (i) {
+ case 0:
+ pp->system_color = MaterialRed;
+ break;
+ case 1:
+ pp->system_color = MaterialGreen;
+ break;
+ case 2:
+ pp->system_color = MaterialBlue;
+ break;
+ case 3:
+ pp->system_color = MaterialCyan;
+ break;
+ case 4:
+ pp->system_color = MaterialYellow;
+ break;
+ case 5:
+ pp->system_color = MaterialMagenta;
+ break;
+ case 6:
+ pp->system_color = MaterialWhite;
+ break;
+ }
+ } else {
+ pp->system_color = MaterialGray;
+ }
+
+ do {
+ pp->PX = NRAND((HCELLS - 1)) + 1;
+ pp->PY = NRAND((VCELLS - 1)) + 1;
+ pp->PZ = NRAND((HCELLS - 1)) + 1;
+ } while (pp->Cells[pp->PX][pp->PY][pp->PZ] ||
+ (pp->Cells[pp->PX + 1][pp->PY][pp->PZ] && pp->Cells[pp->PX - 1][pp->PY][pp->PZ] &&
+ pp->Cells[pp->PX][pp->PY + 1][pp->PZ] && pp->Cells[pp->PX][pp->PY - 1][pp->PZ] &&
+ pp->Cells[pp->PX][pp->PY][pp->PZ + 1] && pp->Cells[pp->PX][pp->PY][pp->PZ - 1]));
+ pp->Cells[pp->PX][pp->PY][pp->PZ] = 1;
+ pp->olddir = dirNone;
+
+ FindNeighbors(mi);
+
+ pp->nowdir = SelectNeighbor(mi);
+}
+
+void
+init_pipes(ModeInfo * mi)
+{
+ int screen = MI_SCREEN(mi);
+ pipesstruct *pp;
+
+ if (pipes == NULL) {
+ if ((pipes = (pipesstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (pipesstruct))) == NULL)
+ return;
+ }
+ pp = &pipes[screen];
+
+ pp->glx_context = init_GL(mi);
+
+ reshape(mi, MI_WIN_WIDTH(mi), MI_WIN_HEIGHT(mi));
+ pp->initial_rotation = -10.0;
+ pinit(mi, 1);
+
+ if (factory > 0) {
+ pp->valve = BuildLWO(MI_WIN_IS_WIREFRAME(mi), &LWO_BigValve);
+ pp->bolts = BuildLWO(MI_WIN_IS_WIREFRAME(mi), &LWO_Bolts3D);
+ pp->betweenbolts = BuildLWO(MI_WIN_IS_WIREFRAME(mi), &LWO_PipeBetweenBolts);
+
+ pp->elbowbolts = BuildLWO(MI_WIN_IS_WIREFRAME(mi), &LWO_ElbowBolts);
+ pp->elbowcoins = BuildLWO(MI_WIN_IS_WIREFRAME(mi), &LWO_ElbowCoins);
+
+ pp->guagehead = BuildLWO(MI_WIN_IS_WIREFRAME(mi), &LWO_GuageHead);
+ pp->guageface = BuildLWO(MI_WIN_IS_WIREFRAME(mi), &LWO_GuageFace);
+ pp->guagedial = BuildLWO(MI_WIN_IS_WIREFRAME(mi), &LWO_GuageDial);
+ pp->guageconnector = BuildLWO(MI_WIN_IS_WIREFRAME(mi), &LWO_GuageConnector);
+ }
+ /* else they are all 0, thanks to calloc(). */
+
+ if (MI_BATCHCOUNT(mi) < 1 || MI_BATCHCOUNT(mi) > NofSysTypes + 1) {
+ pp->system_type = NRAND(NofSysTypes) + 1;
+ } else {
+ pp->system_type = MI_BATCHCOUNT(mi);
+ }
+
+ if (MI_CYCLES(mi) > 0 && MI_CYCLES(mi) < 11) {
+ pp->number_of_systems = MI_CYCLES(mi);
+ } else {
+ pp->number_of_systems = 5;
+ }
+
+ if (MI_SIZE(mi) < 10) {
+ pp->system_length = 10;
+ } else if (MI_SIZE(mi) > 1000) {
+ pp->system_length = 1000;
+ } else {
+ pp->system_length = MI_SIZE(mi);
+ }
+
+}
+
+void
+change_pipes(ModeInfo * mi)
+{
+ pipesstruct *pp = &pipes[MI_SCREEN(mi)];
+
+ glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), pp->glx_context);
+ pinit(mi, 1);
+}
+
+void
+release_pipes(ModeInfo * mi)
+{
+ if (pipes != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ pipesstruct *pp = &pipes[screen];
+
+ /* Display lists MUST be freed while their glXContext is current. */
+ glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), pp->glx_context);
+
+ if (pp->valve)
+ glDeleteLists(pp->valve, 1);
+ if (pp->bolts)
+ glDeleteLists(pp->bolts, 1);
+ if (pp->betweenbolts)
+ glDeleteLists(pp->betweenbolts, 1);
+
+ if (pp->elbowbolts)
+ glDeleteLists(pp->elbowbolts, 1);
+ if (pp->elbowcoins)
+ glDeleteLists(pp->elbowcoins, 1);
+
+ if (pp->guagehead)
+ glDeleteLists(pp->guagehead, 1);
+ if (pp->guageface)
+ glDeleteLists(pp->guageface, 1);
+ if (pp->guagedial)
+ glDeleteLists(pp->guagedial, 1);
+ if (pp->guageconnector)
+ glDeleteLists(pp->guageconnector, 1);
+ }
+
+ /* Don't destroy the glXContext. init_GL does that. */
+
+ (void) free((void *) pipes);
+ pipes = NULL;
+ }
+}
+
+#endif
--- /dev/null
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)s1_1.c 4.2 97/04/20 xlockmore";
+
+#endif
+
+/*-
+ * Points, polygons, and normal vectors to render "s1_1" in 3D.
+ *
+ * Generated by lw2ogl. Link this with your program but do
+ * not edit by hand.
+ */
+
+#include "xlock.h"
+
+#ifdef USE_GL
+
+#include <GL/gl.h>
+#include "glx/buildlwo.h"
+
+GLfloat s1_1_PNTS[] =
+{
+ (GLfloat) 0.332422, (GLfloat) 0.132531, (GLfloat) - 0.332422,
+ (GLfloat) 0.332422, (GLfloat) 0.132531, (GLfloat) - 0.667578,
+ (GLfloat) 0.667578, (GLfloat) 0.132531, (GLfloat) - 0.332422,
+ (GLfloat) 0.667578, (GLfloat) 0.132531, (GLfloat) - 0.667578,
+ (GLfloat) 0.638667, (GLfloat) 0.007537, (GLfloat) - 0.638667,
+ (GLfloat) 0.361333, (GLfloat) 0.007537, (GLfloat) - 0.638667,
+ (GLfloat) 0.361333, (GLfloat) 0.007537, (GLfloat) - 0.361333,
+ (GLfloat) 0.638667, (GLfloat) 0.007537, (GLfloat) - 0.361333,
+ (GLfloat) 0.653656, (GLfloat) 0.494688, (GLfloat) - 0.653656,
+ (GLfloat) 0.346344, (GLfloat) 0.494688, (GLfloat) - 0.653656,
+ (GLfloat) 0.346344, (GLfloat) 0.494688, (GLfloat) - 0.346344,
+ (GLfloat) 0.653656, (GLfloat) 0.494688, (GLfloat) - 0.346344,
+ (GLfloat) 0.667578, (GLfloat) 0.838781, (GLfloat) - 0.667578,
+ (GLfloat) 0.667578, (GLfloat) 0.838781, (GLfloat) - 0.332422,
+ (GLfloat) 0.638667, (GLfloat) 0.958463, (GLfloat) - 0.361333,
+ (GLfloat) 0.638667, (GLfloat) 0.958463, (GLfloat) - 0.638667,
+ (GLfloat) 0.332422, (GLfloat) 0.838781, (GLfloat) - 0.332422,
+ (GLfloat) 0.361333, (GLfloat) 0.958463, (GLfloat) - 0.361333,
+ (GLfloat) 0.332422, (GLfloat) 0.838781, (GLfloat) - 0.667578,
+ (GLfloat) 0.361333, (GLfloat) 0.958463, (GLfloat) - 0.638667,
+ (GLfloat) 0.738539, (GLfloat) 0.926712, (GLfloat) - 0.500000,
+ (GLfloat) 0.714805, (GLfloat) 0.686547, (GLfloat) - 0.500000,
+ (GLfloat) 0.728516, (GLfloat) 0.838781, (GLfloat) - 0.500000,
+ (GLfloat) 0.500000, (GLfloat) 0.926712, (GLfloat) - 0.261461,
+ (GLfloat) 0.674539, (GLfloat) 0.926104, (GLfloat) - 0.325461,
+ (GLfloat) 0.500000, (GLfloat) 0.976924, (GLfloat) - 0.500000,
+ (GLfloat) 0.677562, (GLfloat) 0.965162, (GLfloat) - 0.500000,
+ (GLfloat) 0.500000, (GLfloat) 0.926712, (GLfloat) - 0.738539,
+ (GLfloat) 0.674539, (GLfloat) 0.926104, (GLfloat) - 0.674539,
+ (GLfloat) 0.500000, (GLfloat) 0.686547, (GLfloat) - 0.285195,
+ (GLfloat) 0.500000, (GLfloat) 0.838781, (GLfloat) - 0.271484,
+ (GLfloat) 0.261461, (GLfloat) 0.926712, (GLfloat) - 0.500000,
+ (GLfloat) 0.325461, (GLfloat) 0.926104, (GLfloat) - 0.325461,
+ (GLfloat) 0.500000, (GLfloat) 0.965162, (GLfloat) - 0.322437,
+ (GLfloat) 0.285195, (GLfloat) 0.686547, (GLfloat) - 0.500000,
+ (GLfloat) 0.271484, (GLfloat) 0.838781, (GLfloat) - 0.500000,
+ (GLfloat) 0.325461, (GLfloat) 0.926104, (GLfloat) - 0.674539,
+ (GLfloat) 0.322437, (GLfloat) 0.965162, (GLfloat) - 0.500000,
+ (GLfloat) 0.500000, (GLfloat) 0.686547, (GLfloat) - 0.714805,
+ (GLfloat) 0.500000, (GLfloat) 0.838781, (GLfloat) - 0.728516,
+ (GLfloat) 0.500000, (GLfloat) 0.965162, (GLfloat) - 0.677562,
+ (GLfloat) 0.657523, (GLfloat) 0.686547, (GLfloat) - 0.657523,
+ (GLfloat) 0.714805, (GLfloat) 0.295922, (GLfloat) - 0.500000,
+ (GLfloat) 0.709531, (GLfloat) 0.494688, (GLfloat) - 0.500000,
+ (GLfloat) 0.657523, (GLfloat) 0.686547, (GLfloat) - 0.342477,
+ (GLfloat) 0.342477, (GLfloat) 0.686547, (GLfloat) - 0.657523,
+ (GLfloat) 0.500000, (GLfloat) 0.295922, (GLfloat) - 0.714805,
+ (GLfloat) 0.500000, (GLfloat) 0.494688, (GLfloat) - 0.709531,
+ (GLfloat) 0.500000, (GLfloat) 0.295922, (GLfloat) - 0.285195,
+ (GLfloat) 0.500000, (GLfloat) 0.494688, (GLfloat) - 0.290469,
+ (GLfloat) 0.342477, (GLfloat) 0.686547, (GLfloat) - 0.342477,
+ (GLfloat) 0.285195, (GLfloat) 0.295922, (GLfloat) - 0.500000,
+ (GLfloat) 0.290469, (GLfloat) 0.494688, (GLfloat) - 0.500000,
+ (GLfloat) 0.500000, (GLfloat) 0.039819, (GLfloat) - 0.738539,
+ (GLfloat) 0.500000, (GLfloat) 0.132531, (GLfloat) - 0.728516,
+ (GLfloat) 0.657523, (GLfloat) 0.295922, (GLfloat) - 0.657523,
+ (GLfloat) 0.342477, (GLfloat) 0.295922, (GLfloat) - 0.657523,
+ (GLfloat) 0.342477, (GLfloat) 0.295922, (GLfloat) - 0.342477,
+ (GLfloat) 0.261461, (GLfloat) 0.039819, (GLfloat) - 0.500000,
+ (GLfloat) 0.271484, (GLfloat) 0.132531, (GLfloat) - 0.500000,
+ (GLfloat) 0.657523, (GLfloat) 0.295922, (GLfloat) - 0.342477,
+ (GLfloat) 0.500000, (GLfloat) 0.039819, (GLfloat) - 0.261461,
+ (GLfloat) 0.500000, (GLfloat) 0.132531, (GLfloat) - 0.271484,
+ (GLfloat) 0.738539, (GLfloat) 0.039819, (GLfloat) - 0.500000,
+ (GLfloat) 0.728516, (GLfloat) 0.132531, (GLfloat) - 0.500000,
+ (GLfloat) 0.674539, (GLfloat) 0.040427, (GLfloat) - 0.674539,
+ (GLfloat) 0.500000, (GLfloat) - 0.010924, (GLfloat) - 0.500000,
+ (GLfloat) 0.677562, (GLfloat) 0.000839, (GLfloat) - 0.500000,
+ (GLfloat) 0.674539, (GLfloat) 0.040427, (GLfloat) - 0.325461,
+ (GLfloat) 0.325461, (GLfloat) 0.040427, (GLfloat) - 0.674539,
+ (GLfloat) 0.500000, (GLfloat) 0.000839, (GLfloat) - 0.677562,
+ (GLfloat) 0.325461, (GLfloat) 0.040427, (GLfloat) - 0.325461,
+ (GLfloat) 0.322437, (GLfloat) 0.000839, (GLfloat) - 0.500000,
+ (GLfloat) 0.500000, (GLfloat) 0.000839, (GLfloat) - 0.322437,
+ (GLfloat) 0.721812, (GLfloat) 0.890313, (GLfloat) - 0.595062,
+ (GLfloat) 0.706063, (GLfloat) 0.769563, (GLfloat) - 0.588313,
+ (GLfloat) 0.713281, (GLfloat) 0.838781, (GLfloat) - 0.591406,
+ (GLfloat) 0.721812, (GLfloat) 0.890313, (GLfloat) - 0.404938,
+ (GLfloat) 0.737656, (GLfloat) 0.890313, (GLfloat) - 0.500000,
+ (GLfloat) 0.706000, (GLfloat) 0.949319, (GLfloat) - 0.587500,
+ (GLfloat) 0.722453, (GLfloat) 0.926408, (GLfloat) - 0.595141,
+ (GLfloat) 0.595062, (GLfloat) 0.890313, (GLfloat) - 0.721812,
+ (GLfloat) 0.674281, (GLfloat) 0.890313, (GLfloat) - 0.674281,
+ (GLfloat) 0.595062, (GLfloat) 0.890313, (GLfloat) - 0.278187,
+ (GLfloat) 0.674281, (GLfloat) 0.890313, (GLfloat) - 0.325719,
+ (GLfloat) 0.706000, (GLfloat) 0.949319, (GLfloat) - 0.412500,
+ (GLfloat) 0.722453, (GLfloat) 0.926408, (GLfloat) - 0.404859,
+ (GLfloat) 0.706063, (GLfloat) 0.769563, (GLfloat) - 0.411687,
+ (GLfloat) 0.713281, (GLfloat) 0.838781, (GLfloat) - 0.408594,
+ (GLfloat) 0.590500, (GLfloat) 0.971195, (GLfloat) - 0.409500,
+ (GLfloat) 0.664625, (GLfloat) 0.962948, (GLfloat) - 0.417500,
+ (GLfloat) 0.721500, (GLfloat) 0.950535, (GLfloat) - 0.500000,
+ (GLfloat) 0.587500, (GLfloat) 0.949319, (GLfloat) - 0.294000,
+ (GLfloat) 0.660875, (GLfloat) 0.948104, (GLfloat) - 0.339125,
+ (GLfloat) 0.587500, (GLfloat) 0.949319, (GLfloat) - 0.706000,
+ (GLfloat) 0.660875, (GLfloat) 0.948104, (GLfloat) - 0.660875,
+ (GLfloat) 0.590500, (GLfloat) 0.971195, (GLfloat) - 0.590500,
+ (GLfloat) 0.664625, (GLfloat) 0.962948, (GLfloat) - 0.582500,
+ (GLfloat) 0.588313, (GLfloat) 0.769563, (GLfloat) - 0.293938,
+ (GLfloat) 0.591406, (GLfloat) 0.838781, (GLfloat) - 0.286719,
+ (GLfloat) 0.404938, (GLfloat) 0.890313, (GLfloat) - 0.278187,
+ (GLfloat) 0.500000, (GLfloat) 0.890313, (GLfloat) - 0.262344,
+ (GLfloat) 0.595141, (GLfloat) 0.926408, (GLfloat) - 0.277547,
+ (GLfloat) 0.278187, (GLfloat) 0.890313, (GLfloat) - 0.404938,
+ (GLfloat) 0.325719, (GLfloat) 0.890313, (GLfloat) - 0.325719,
+ (GLfloat) 0.412500, (GLfloat) 0.949319, (GLfloat) - 0.294000,
+ (GLfloat) 0.404859, (GLfloat) 0.926408, (GLfloat) - 0.277547,
+ (GLfloat) 0.411687, (GLfloat) 0.769563, (GLfloat) - 0.293938,
+ (GLfloat) 0.408594, (GLfloat) 0.838781, (GLfloat) - 0.286719,
+ (GLfloat) 0.409500, (GLfloat) 0.971195, (GLfloat) - 0.409500,
+ (GLfloat) 0.417500, (GLfloat) 0.962948, (GLfloat) - 0.335375,
+ (GLfloat) 0.500000, (GLfloat) 0.950535, (GLfloat) - 0.278500,
+ (GLfloat) 0.294000, (GLfloat) 0.949319, (GLfloat) - 0.412500,
+ (GLfloat) 0.339125, (GLfloat) 0.948104, (GLfloat) - 0.339125,
+ (GLfloat) 0.582500, (GLfloat) 0.962948, (GLfloat) - 0.335375,
+ (GLfloat) 0.293938, (GLfloat) 0.769563, (GLfloat) - 0.411687,
+ (GLfloat) 0.286719, (GLfloat) 0.838781, (GLfloat) - 0.408594,
+ (GLfloat) 0.278187, (GLfloat) 0.890313, (GLfloat) - 0.595062,
+ (GLfloat) 0.262344, (GLfloat) 0.890313, (GLfloat) - 0.500000,
+ (GLfloat) 0.277547, (GLfloat) 0.926408, (GLfloat) - 0.404859,
+ (GLfloat) 0.404938, (GLfloat) 0.890313, (GLfloat) - 0.721812,
+ (GLfloat) 0.325719, (GLfloat) 0.890313, (GLfloat) - 0.674281,
+ (GLfloat) 0.294000, (GLfloat) 0.949319, (GLfloat) - 0.587500,
+ (GLfloat) 0.277547, (GLfloat) 0.926408, (GLfloat) - 0.595141,
+ (GLfloat) 0.293938, (GLfloat) 0.769563, (GLfloat) - 0.588313,
+ (GLfloat) 0.286719, (GLfloat) 0.838781, (GLfloat) - 0.591406,
+ (GLfloat) 0.409500, (GLfloat) 0.971195, (GLfloat) - 0.590500,
+ (GLfloat) 0.335375, (GLfloat) 0.962948, (GLfloat) - 0.582500,
+ (GLfloat) 0.278500, (GLfloat) 0.950535, (GLfloat) - 0.500000,
+ (GLfloat) 0.412500, (GLfloat) 0.949319, (GLfloat) - 0.706000,
+ (GLfloat) 0.339125, (GLfloat) 0.948104, (GLfloat) - 0.660875,
+ (GLfloat) 0.335375, (GLfloat) 0.962948, (GLfloat) - 0.417500,
+ (GLfloat) 0.411687, (GLfloat) 0.769563, (GLfloat) - 0.706063,
+ (GLfloat) 0.408594, (GLfloat) 0.838781, (GLfloat) - 0.713281,
+ (GLfloat) 0.500000, (GLfloat) 0.890313, (GLfloat) - 0.737656,
+ (GLfloat) 0.404859, (GLfloat) 0.926408, (GLfloat) - 0.722453,
+ (GLfloat) 0.595141, (GLfloat) 0.926408, (GLfloat) - 0.722453,
+ (GLfloat) 0.588313, (GLfloat) 0.769563, (GLfloat) - 0.706063,
+ (GLfloat) 0.591406, (GLfloat) 0.838781, (GLfloat) - 0.713281,
+ (GLfloat) 0.582500, (GLfloat) 0.962948, (GLfloat) - 0.664625,
+ (GLfloat) 0.500000, (GLfloat) 0.950535, (GLfloat) - 0.721500,
+ (GLfloat) 0.417500, (GLfloat) 0.962948, (GLfloat) - 0.664625,
+ (GLfloat) 0.500000, (GLfloat) 0.973972, (GLfloat) - 0.402250,
+ (GLfloat) 0.597750, (GLfloat) 0.973972, (GLfloat) - 0.500000,
+ (GLfloat) 0.402250, (GLfloat) 0.973972, (GLfloat) - 0.500000,
+ (GLfloat) 0.500000, (GLfloat) 0.973972, (GLfloat) - 0.597750,
+ (GLfloat) 0.661906, (GLfloat) 0.769563, (GLfloat) - 0.661906,
+ (GLfloat) 0.696875, (GLfloat) 0.593625, (GLfloat) - 0.584375,
+ (GLfloat) 0.700484, (GLfloat) 0.686547, (GLfloat) - 0.585922,
+ (GLfloat) 0.720781, (GLfloat) 0.769563, (GLfloat) - 0.500000,
+ (GLfloat) 0.696875, (GLfloat) 0.393625, (GLfloat) - 0.584375,
+ (GLfloat) 0.695563, (GLfloat) 0.494688, (GLfloat) - 0.583813,
+ (GLfloat) 0.696875, (GLfloat) 0.593625, (GLfloat) - 0.415625,
+ (GLfloat) 0.710938, (GLfloat) 0.593625, (GLfloat) - 0.500000,
+ (GLfloat) 0.584375, (GLfloat) 0.593625, (GLfloat) - 0.696875,
+ (GLfloat) 0.654688, (GLfloat) 0.593625, (GLfloat) - 0.654688,
+ (GLfloat) 0.584375, (GLfloat) 0.593625, (GLfloat) - 0.303125,
+ (GLfloat) 0.654688, (GLfloat) 0.593625, (GLfloat) - 0.345313,
+ (GLfloat) 0.700484, (GLfloat) 0.686547, (GLfloat) - 0.414078,
+ (GLfloat) 0.696875, (GLfloat) 0.393625, (GLfloat) - 0.415625,
+ (GLfloat) 0.695563, (GLfloat) 0.494688, (GLfloat) - 0.416187,
+ (GLfloat) 0.661906, (GLfloat) 0.769563, (GLfloat) - 0.338094,
+ (GLfloat) 0.338094, (GLfloat) 0.769563, (GLfloat) - 0.661906,
+ (GLfloat) 0.415625, (GLfloat) 0.593625, (GLfloat) - 0.696875,
+ (GLfloat) 0.414078, (GLfloat) 0.686547, (GLfloat) - 0.700484,
+ (GLfloat) 0.500000, (GLfloat) 0.769563, (GLfloat) - 0.720781,
+ (GLfloat) 0.415625, (GLfloat) 0.393625, (GLfloat) - 0.696875,
+ (GLfloat) 0.416187, (GLfloat) 0.494688, (GLfloat) - 0.695563,
+ (GLfloat) 0.500000, (GLfloat) 0.593625, (GLfloat) - 0.710938,
+ (GLfloat) 0.303125, (GLfloat) 0.593625, (GLfloat) - 0.584375,
+ (GLfloat) 0.345313, (GLfloat) 0.593625, (GLfloat) - 0.654688,
+ (GLfloat) 0.585922, (GLfloat) 0.686547, (GLfloat) - 0.700484,
+ (GLfloat) 0.584375, (GLfloat) 0.393625, (GLfloat) - 0.696875,
+ (GLfloat) 0.583813, (GLfloat) 0.494688, (GLfloat) - 0.695563,
+ (GLfloat) 0.500000, (GLfloat) 0.769563, (GLfloat) - 0.279219,
+ (GLfloat) 0.415625, (GLfloat) 0.593625, (GLfloat) - 0.303125,
+ (GLfloat) 0.414078, (GLfloat) 0.686547, (GLfloat) - 0.299516,
+ (GLfloat) 0.338094, (GLfloat) 0.769563, (GLfloat) - 0.338094,
+ (GLfloat) 0.585922, (GLfloat) 0.686547, (GLfloat) - 0.299516,
+ (GLfloat) 0.584375, (GLfloat) 0.393625, (GLfloat) - 0.303125,
+ (GLfloat) 0.583813, (GLfloat) 0.494688, (GLfloat) - 0.304437,
+ (GLfloat) 0.500000, (GLfloat) 0.593625, (GLfloat) - 0.289063,
+ (GLfloat) 0.303125, (GLfloat) 0.593625, (GLfloat) - 0.415625,
+ (GLfloat) 0.345313, (GLfloat) 0.593625, (GLfloat) - 0.345313,
+ (GLfloat) 0.415625, (GLfloat) 0.393625, (GLfloat) - 0.303125,
+ (GLfloat) 0.416187, (GLfloat) 0.494688, (GLfloat) - 0.304437,
+ (GLfloat) 0.279219, (GLfloat) 0.769563, (GLfloat) - 0.500000,
+ (GLfloat) 0.299516, (GLfloat) 0.686547, (GLfloat) - 0.585922,
+ (GLfloat) 0.299516, (GLfloat) 0.686547, (GLfloat) - 0.414078,
+ (GLfloat) 0.303125, (GLfloat) 0.393625, (GLfloat) - 0.415625,
+ (GLfloat) 0.304437, (GLfloat) 0.494688, (GLfloat) - 0.416187,
+ (GLfloat) 0.289063, (GLfloat) 0.593625, (GLfloat) - 0.500000,
+ (GLfloat) 0.303125, (GLfloat) 0.393625, (GLfloat) - 0.584375,
+ (GLfloat) 0.304437, (GLfloat) 0.494688, (GLfloat) - 0.583813,
+ (GLfloat) 0.411687, (GLfloat) 0.207062, (GLfloat) - 0.706063,
+ (GLfloat) 0.404938, (GLfloat) 0.077813, (GLfloat) - 0.721812,
+ (GLfloat) 0.408594, (GLfloat) 0.132531, (GLfloat) - 0.713281,
+ (GLfloat) 0.588313, (GLfloat) 0.207062, (GLfloat) - 0.706063,
+ (GLfloat) 0.500000, (GLfloat) 0.207062, (GLfloat) - 0.720781,
+ (GLfloat) 0.414078, (GLfloat) 0.295922, (GLfloat) - 0.700484,
+ (GLfloat) 0.293938, (GLfloat) 0.207062, (GLfloat) - 0.588313,
+ (GLfloat) 0.338094, (GLfloat) 0.207062, (GLfloat) - 0.661906,
+ (GLfloat) 0.706063, (GLfloat) 0.207062, (GLfloat) - 0.588313,
+ (GLfloat) 0.661906, (GLfloat) 0.207062, (GLfloat) - 0.661906,
+ (GLfloat) 0.585922, (GLfloat) 0.295922, (GLfloat) - 0.700484,
+ (GLfloat) 0.595062, (GLfloat) 0.077813, (GLfloat) - 0.721812,
+ (GLfloat) 0.591406, (GLfloat) 0.132531, (GLfloat) - 0.713281,
+ (GLfloat) 0.500000, (GLfloat) 0.393625, (GLfloat) - 0.710938,
+ (GLfloat) 0.654688, (GLfloat) 0.393625, (GLfloat) - 0.654688,
+ (GLfloat) 0.345313, (GLfloat) 0.393625, (GLfloat) - 0.654688,
+ (GLfloat) 0.299516, (GLfloat) 0.295922, (GLfloat) - 0.585922,
+ (GLfloat) 0.293938, (GLfloat) 0.207062, (GLfloat) - 0.411687,
+ (GLfloat) 0.279219, (GLfloat) 0.207062, (GLfloat) - 0.500000,
+ (GLfloat) 0.278187, (GLfloat) 0.077813, (GLfloat) - 0.595062,
+ (GLfloat) 0.286719, (GLfloat) 0.132531, (GLfloat) - 0.591406,
+ (GLfloat) 0.289063, (GLfloat) 0.393625, (GLfloat) - 0.500000,
+ (GLfloat) 0.345313, (GLfloat) 0.393625, (GLfloat) - 0.345313,
+ (GLfloat) 0.299516, (GLfloat) 0.295922, (GLfloat) - 0.414078,
+ (GLfloat) 0.278187, (GLfloat) 0.077813, (GLfloat) - 0.404938,
+ (GLfloat) 0.286719, (GLfloat) 0.132531, (GLfloat) - 0.408594,
+ (GLfloat) 0.411687, (GLfloat) 0.207062, (GLfloat) - 0.293938,
+ (GLfloat) 0.338094, (GLfloat) 0.207062, (GLfloat) - 0.338094,
+ (GLfloat) 0.414078, (GLfloat) 0.295922, (GLfloat) - 0.299516,
+ (GLfloat) 0.588313, (GLfloat) 0.207062, (GLfloat) - 0.293938,
+ (GLfloat) 0.500000, (GLfloat) 0.207062, (GLfloat) - 0.279219,
+ (GLfloat) 0.404938, (GLfloat) 0.077813, (GLfloat) - 0.278187,
+ (GLfloat) 0.408594, (GLfloat) 0.132531, (GLfloat) - 0.286719,
+ (GLfloat) 0.500000, (GLfloat) 0.393625, (GLfloat) - 0.289063,
+ (GLfloat) 0.654688, (GLfloat) 0.393625, (GLfloat) - 0.345313,
+ (GLfloat) 0.585922, (GLfloat) 0.295922, (GLfloat) - 0.299516,
+ (GLfloat) 0.595062, (GLfloat) 0.077813, (GLfloat) - 0.278187,
+ (GLfloat) 0.591406, (GLfloat) 0.132531, (GLfloat) - 0.286719,
+ (GLfloat) 0.706063, (GLfloat) 0.207062, (GLfloat) - 0.411687,
+ (GLfloat) 0.661906, (GLfloat) 0.207062, (GLfloat) - 0.338094,
+ (GLfloat) 0.700484, (GLfloat) 0.295922, (GLfloat) - 0.414078,
+ (GLfloat) 0.720781, (GLfloat) 0.207062, (GLfloat) - 0.500000,
+ (GLfloat) 0.721812, (GLfloat) 0.077813, (GLfloat) - 0.404938,
+ (GLfloat) 0.713281, (GLfloat) 0.132531, (GLfloat) - 0.408594,
+ (GLfloat) 0.710938, (GLfloat) 0.393625, (GLfloat) - 0.500000,
+ (GLfloat) 0.700484, (GLfloat) 0.295922, (GLfloat) - 0.585922,
+ (GLfloat) 0.721812, (GLfloat) 0.077813, (GLfloat) - 0.595062,
+ (GLfloat) 0.713281, (GLfloat) 0.132531, (GLfloat) - 0.591406,
+ (GLfloat) 0.737656, (GLfloat) 0.077813, (GLfloat) - 0.500000,
+ (GLfloat) 0.706000, (GLfloat) 0.016681, (GLfloat) - 0.412500,
+ (GLfloat) 0.722453, (GLfloat) 0.040123, (GLfloat) - 0.404859,
+ (GLfloat) 0.674281, (GLfloat) 0.077813, (GLfloat) - 0.325719,
+ (GLfloat) 0.674281, (GLfloat) 0.077813, (GLfloat) - 0.674281,
+ (GLfloat) 0.706000, (GLfloat) 0.016681, (GLfloat) - 0.587500,
+ (GLfloat) 0.722453, (GLfloat) 0.040123, (GLfloat) - 0.595141,
+ (GLfloat) 0.590500, (GLfloat) - 0.005194, (GLfloat) - 0.590500,
+ (GLfloat) 0.664625, (GLfloat) 0.003052, (GLfloat) - 0.582500,
+ (GLfloat) 0.721500, (GLfloat) 0.015465, (GLfloat) - 0.500000,
+ (GLfloat) 0.587500, (GLfloat) 0.016681, (GLfloat) - 0.706000,
+ (GLfloat) 0.660875, (GLfloat) 0.017896, (GLfloat) - 0.660875,
+ (GLfloat) 0.587500, (GLfloat) 0.016681, (GLfloat) - 0.294000,
+ (GLfloat) 0.660875, (GLfloat) 0.017896, (GLfloat) - 0.339125,
+ (GLfloat) 0.590500, (GLfloat) - 0.005194, (GLfloat) - 0.409500,
+ (GLfloat) 0.664625, (GLfloat) 0.003052, (GLfloat) - 0.417500,
+ (GLfloat) 0.500000, (GLfloat) 0.077813, (GLfloat) - 0.737656,
+ (GLfloat) 0.595141, (GLfloat) 0.040123, (GLfloat) - 0.722453,
+ (GLfloat) 0.325719, (GLfloat) 0.077813, (GLfloat) - 0.674281,
+ (GLfloat) 0.412500, (GLfloat) 0.016681, (GLfloat) - 0.706000,
+ (GLfloat) 0.404859, (GLfloat) 0.040123, (GLfloat) - 0.722453,
+ (GLfloat) 0.409500, (GLfloat) - 0.005194, (GLfloat) - 0.590500,
+ (GLfloat) 0.417500, (GLfloat) 0.003052, (GLfloat) - 0.664625,
+ (GLfloat) 0.500000, (GLfloat) 0.015465, (GLfloat) - 0.721500,
+ (GLfloat) 0.294000, (GLfloat) 0.016681, (GLfloat) - 0.587500,
+ (GLfloat) 0.339125, (GLfloat) 0.017896, (GLfloat) - 0.660875,
+ (GLfloat) 0.582500, (GLfloat) 0.003052, (GLfloat) - 0.664625,
+ (GLfloat) 0.262344, (GLfloat) 0.077813, (GLfloat) - 0.500000,
+ (GLfloat) 0.277547, (GLfloat) 0.040123, (GLfloat) - 0.595141,
+ (GLfloat) 0.325719, (GLfloat) 0.077813, (GLfloat) - 0.325719,
+ (GLfloat) 0.294000, (GLfloat) 0.016681, (GLfloat) - 0.412500,
+ (GLfloat) 0.277547, (GLfloat) 0.040123, (GLfloat) - 0.404859,
+ (GLfloat) 0.409500, (GLfloat) - 0.005194, (GLfloat) - 0.409500,
+ (GLfloat) 0.335375, (GLfloat) 0.003052, (GLfloat) - 0.417500,
+ (GLfloat) 0.278500, (GLfloat) 0.015465, (GLfloat) - 0.500000,
+ (GLfloat) 0.412500, (GLfloat) 0.016681, (GLfloat) - 0.294000,
+ (GLfloat) 0.339125, (GLfloat) 0.017896, (GLfloat) - 0.339125,
+ (GLfloat) 0.335375, (GLfloat) 0.003052, (GLfloat) - 0.582500,
+ (GLfloat) 0.500000, (GLfloat) 0.077813, (GLfloat) - 0.262344,
+ (GLfloat) 0.404859, (GLfloat) 0.040123, (GLfloat) - 0.277547,
+ (GLfloat) 0.595141, (GLfloat) 0.040123, (GLfloat) - 0.277547,
+ (GLfloat) 0.582500, (GLfloat) 0.003052, (GLfloat) - 0.335375,
+ (GLfloat) 0.500000, (GLfloat) 0.015465, (GLfloat) - 0.278500,
+ (GLfloat) 0.417500, (GLfloat) 0.003052, (GLfloat) - 0.335375,
+ (GLfloat) 0.500000, (GLfloat) - 0.007972, (GLfloat) - 0.597750,
+ (GLfloat) 0.597750, (GLfloat) - 0.007972, (GLfloat) - 0.500000,
+ (GLfloat) 0.402250, (GLfloat) - 0.007972, (GLfloat) - 0.500000,
+ (GLfloat) 0.500000, (GLfloat) - 0.007972, (GLfloat) - 0.402250,
+};
+
+GLfloat s1_1_normals[] =
+{
+ (GLfloat) 0.844155, (GLfloat) - 0.175691, (GLfloat) - 0.506493,
+ (GLfloat) 0.844155, (GLfloat) - 0.175690, (GLfloat) - 0.506493,
+ (GLfloat) 0.971634, (GLfloat) - 0.172349, (GLfloat) - 0.161939,
+ (GLfloat) 0.971634, (GLfloat) - 0.172348, (GLfloat) - 0.161939,
+ (GLfloat) 0.985737, (GLfloat) - 0.023907, (GLfloat) - 0.166587,
+ (GLfloat) 0.986237, (GLfloat) - 0.017860, (GLfloat) - 0.164373,
+ (GLfloat) 0.856157, (GLfloat) - 0.009890, (GLfloat) - 0.516621,
+ (GLfloat) 0.857379, (GLfloat) - 0.016331, (GLfloat) - 0.514427,
+ (GLfloat) 0.844155, (GLfloat) - 0.175690, (GLfloat) 0.506493,
+ (GLfloat) 0.844155, (GLfloat) - 0.175690, (GLfloat) 0.506493,
+ (GLfloat) 0.856157, (GLfloat) - 0.009889, (GLfloat) 0.516621,
+ (GLfloat) 0.857379, (GLfloat) - 0.016331, (GLfloat) 0.514427,
+ (GLfloat) 0.985737, (GLfloat) - 0.023907, (GLfloat) 0.166587,
+ (GLfloat) 0.986237, (GLfloat) - 0.017860, (GLfloat) 0.164373,
+ (GLfloat) 0.971634, (GLfloat) - 0.172348, (GLfloat) 0.161939,
+ (GLfloat) 0.971634, (GLfloat) - 0.172348, (GLfloat) 0.161939,
+ (GLfloat) 0.283621, (GLfloat) 0.936578, (GLfloat) 0.205866,
+ (GLfloat) 0.264056, (GLfloat) 0.947923, (GLfloat) 0.178092,
+ (GLfloat) 0.315105, (GLfloat) 0.946548, (GLfloat) 0.068965,
+ (GLfloat) 0.304029, (GLfloat) 0.949849, (GLfloat) 0.073162,
+ (GLfloat) 0.783125, (GLfloat) 0.607180, (GLfloat) 0.134346,
+ (GLfloat) 0.804111, (GLfloat) 0.575131, (GLfloat) 0.150431,
+ (GLfloat) 0.650208, (GLfloat) 0.649088, (GLfloat) 0.394860,
+ (GLfloat) 0.665312, (GLfloat) 0.617634, (GLfloat) 0.419391,
+ (GLfloat) 0.264056, (GLfloat) 0.947923, (GLfloat) - 0.178092,
+ (GLfloat) 0.283621, (GLfloat) 0.936578, (GLfloat) - 0.205866,
+ (GLfloat) 0.650207, (GLfloat) 0.649089, (GLfloat) - 0.394860,
+ (GLfloat) 0.665311, (GLfloat) 0.617634, (GLfloat) - 0.419391,
+ (GLfloat) 0.804111, (GLfloat) 0.575131, (GLfloat) - 0.150431,
+ (GLfloat) 0.783125, (GLfloat) 0.607180, (GLfloat) - 0.134346,
+ (GLfloat) 0.304029, (GLfloat) 0.949849, (GLfloat) - 0.073162,
+ (GLfloat) 0.315105, (GLfloat) 0.946548, (GLfloat) - 0.068965,
+ (GLfloat) 0.506493, (GLfloat) - 0.175691, (GLfloat) 0.844155,
+ (GLfloat) 0.506493, (GLfloat) - 0.175691, (GLfloat) 0.844155,
+ (GLfloat) 0.161939, (GLfloat) - 0.172349, (GLfloat) 0.971633,
+ (GLfloat) 0.161939, (GLfloat) - 0.172349, (GLfloat) 0.971633,
+ (GLfloat) 0.166587, (GLfloat) - 0.023907, (GLfloat) 0.985737,
+ (GLfloat) 0.164373, (GLfloat) - 0.017860, (GLfloat) 0.986237,
+ (GLfloat) 0.516622, (GLfloat) - 0.009888, (GLfloat) 0.856157,
+ (GLfloat) 0.514427, (GLfloat) - 0.016331, (GLfloat) 0.857379,
+ (GLfloat) - 0.506493, (GLfloat) - 0.175691, (GLfloat) 0.844155,
+ (GLfloat) - 0.506493, (GLfloat) - 0.175691, (GLfloat) 0.844155,
+ (GLfloat) - 0.516622, (GLfloat) - 0.009887, (GLfloat) 0.856157,
+ (GLfloat) - 0.514427, (GLfloat) - 0.016331, (GLfloat) 0.857379,
+ (GLfloat) - 0.166587, (GLfloat) - 0.023907, (GLfloat) 0.985737,
+ (GLfloat) - 0.164373, (GLfloat) - 0.017860, (GLfloat) 0.986237,
+ (GLfloat) - 0.161939, (GLfloat) - 0.172349, (GLfloat) 0.971633,
+ (GLfloat) - 0.161939, (GLfloat) - 0.172349, (GLfloat) 0.971633,
+ (GLfloat) - 0.205866, (GLfloat) 0.936578, (GLfloat) 0.283621,
+ (GLfloat) - 0.178092, (GLfloat) 0.947923, (GLfloat) 0.264055,
+ (GLfloat) - 0.068965, (GLfloat) 0.946548, (GLfloat) 0.315105,
+ (GLfloat) - 0.073162, (GLfloat) 0.949849, (GLfloat) 0.304029,
+ (GLfloat) - 0.134346, (GLfloat) 0.607180, (GLfloat) 0.783125,
+ (GLfloat) - 0.150431, (GLfloat) 0.575131, (GLfloat) 0.804111,
+ (GLfloat) - 0.394861, (GLfloat) 0.649087, (GLfloat) 0.650209,
+ (GLfloat) - 0.419390, (GLfloat) 0.617634, (GLfloat) 0.665312,
+ (GLfloat) 0.178092, (GLfloat) 0.947923, (GLfloat) 0.264056,
+ (GLfloat) 0.205866, (GLfloat) 0.936578, (GLfloat) 0.283621,
+ (GLfloat) 0.394861, (GLfloat) 0.649087, (GLfloat) 0.650208,
+ (GLfloat) 0.419390, (GLfloat) 0.617634, (GLfloat) 0.665312,
+ (GLfloat) 0.150431, (GLfloat) 0.575131, (GLfloat) 0.804111,
+ (GLfloat) 0.134346, (GLfloat) 0.607180, (GLfloat) 0.783125,
+ (GLfloat) 0.073162, (GLfloat) 0.949849, (GLfloat) 0.304029,
+ (GLfloat) 0.068965, (GLfloat) 0.946548, (GLfloat) 0.315105,
+ (GLfloat) - 0.844155, (GLfloat) - 0.175691, (GLfloat) 0.506493,
+ (GLfloat) - 0.844155, (GLfloat) - 0.175691, (GLfloat) 0.506493,
+ (GLfloat) - 0.971633, (GLfloat) - 0.172349, (GLfloat) 0.161939,
+ (GLfloat) - 0.971633, (GLfloat) - 0.172349, (GLfloat) 0.161939,
+ (GLfloat) - 0.985737, (GLfloat) - 0.023907, (GLfloat) 0.166587,
+ (GLfloat) - 0.986237, (GLfloat) - 0.017860, (GLfloat) 0.164373,
+ (GLfloat) - 0.856157, (GLfloat) - 0.009887, (GLfloat) 0.516622,
+ (GLfloat) - 0.857379, (GLfloat) - 0.016331, (GLfloat) 0.514427,
+ (GLfloat) - 0.844155, (GLfloat) - 0.175691, (GLfloat) - 0.506493,
+ (GLfloat) - 0.844155, (GLfloat) - 0.175691, (GLfloat) - 0.506493,
+ (GLfloat) - 0.856157, (GLfloat) - 0.009888, (GLfloat) - 0.516622,
+ (GLfloat) - 0.857379, (GLfloat) - 0.016331, (GLfloat) - 0.514427,
+ (GLfloat) - 0.985737, (GLfloat) - 0.023907, (GLfloat) - 0.166587,
+ (GLfloat) - 0.986237, (GLfloat) - 0.017860, (GLfloat) - 0.164373,
+ (GLfloat) - 0.971633, (GLfloat) - 0.172349, (GLfloat) - 0.161939,
+ (GLfloat) - 0.971633, (GLfloat) - 0.172349, (GLfloat) - 0.161939,
+ (GLfloat) - 0.283621, (GLfloat) 0.936578, (GLfloat) - 0.205866,
+ (GLfloat) - 0.264056, (GLfloat) 0.947923, (GLfloat) - 0.178092,
+ (GLfloat) - 0.315105, (GLfloat) 0.946548, (GLfloat) - 0.068965,
+ (GLfloat) - 0.304029, (GLfloat) 0.949849, (GLfloat) - 0.073162,
+ (GLfloat) - 0.783125, (GLfloat) 0.607180, (GLfloat) - 0.134346,
+ (GLfloat) - 0.804111, (GLfloat) 0.575131, (GLfloat) - 0.150431,
+ (GLfloat) - 0.650208, (GLfloat) 0.649087, (GLfloat) - 0.394861,
+ (GLfloat) - 0.665312, (GLfloat) 0.617634, (GLfloat) - 0.419390,
+ (GLfloat) - 0.264055, (GLfloat) 0.947923, (GLfloat) 0.178092,
+ (GLfloat) - 0.283621, (GLfloat) 0.936578, (GLfloat) 0.205866,
+ (GLfloat) - 0.650209, (GLfloat) 0.649087, (GLfloat) 0.394861,
+ (GLfloat) - 0.665312, (GLfloat) 0.617634, (GLfloat) 0.419390,
+ (GLfloat) - 0.804111, (GLfloat) 0.575131, (GLfloat) 0.150431,
+ (GLfloat) - 0.783125, (GLfloat) 0.607180, (GLfloat) 0.134346,
+ (GLfloat) - 0.304029, (GLfloat) 0.949849, (GLfloat) 0.073162,
+ (GLfloat) - 0.315105, (GLfloat) 0.946548, (GLfloat) 0.068965,
+ (GLfloat) - 0.506493, (GLfloat) - 0.175690, (GLfloat) - 0.844155,
+ (GLfloat) - 0.506493, (GLfloat) - 0.175690, (GLfloat) - 0.844155,
+ (GLfloat) - 0.161939, (GLfloat) - 0.172348, (GLfloat) - 0.971634,
+ (GLfloat) - 0.161939, (GLfloat) - 0.172348, (GLfloat) - 0.971634,
+ (GLfloat) - 0.166587, (GLfloat) - 0.023907, (GLfloat) - 0.985737,
+ (GLfloat) - 0.164373, (GLfloat) - 0.017860, (GLfloat) - 0.986237,
+ (GLfloat) - 0.516621, (GLfloat) - 0.009889, (GLfloat) - 0.856157,
+ (GLfloat) - 0.514427, (GLfloat) - 0.016331, (GLfloat) - 0.857379,
+ (GLfloat) 0.506493, (GLfloat) - 0.175690, (GLfloat) - 0.844155,
+ (GLfloat) 0.506493, (GLfloat) - 0.175691, (GLfloat) - 0.844155,
+ (GLfloat) 0.516621, (GLfloat) - 0.009890, (GLfloat) - 0.856157,
+ (GLfloat) 0.514427, (GLfloat) - 0.016331, (GLfloat) - 0.857379,
+ (GLfloat) 0.166587, (GLfloat) - 0.023907, (GLfloat) - 0.985737,
+ (GLfloat) 0.164373, (GLfloat) - 0.017860, (GLfloat) - 0.986237,
+ (GLfloat) 0.161939, (GLfloat) - 0.172349, (GLfloat) - 0.971634,
+ (GLfloat) 0.161939, (GLfloat) - 0.172348, (GLfloat) - 0.971634,
+ (GLfloat) 0.205866, (GLfloat) 0.936578, (GLfloat) - 0.283621,
+ (GLfloat) 0.178092, (GLfloat) 0.947923, (GLfloat) - 0.264056,
+ (GLfloat) 0.068965, (GLfloat) 0.946548, (GLfloat) - 0.315105,
+ (GLfloat) 0.073162, (GLfloat) 0.949849, (GLfloat) - 0.304029,
+ (GLfloat) 0.134346, (GLfloat) 0.607180, (GLfloat) - 0.783125,
+ (GLfloat) 0.150431, (GLfloat) 0.575131, (GLfloat) - 0.804111,
+ (GLfloat) 0.394860, (GLfloat) 0.649089, (GLfloat) - 0.650207,
+ (GLfloat) 0.419391, (GLfloat) 0.617634, (GLfloat) - 0.665311,
+ (GLfloat) - 0.178092, (GLfloat) 0.947923, (GLfloat) - 0.264056,
+ (GLfloat) - 0.205866, (GLfloat) 0.936578, (GLfloat) - 0.283621,
+ (GLfloat) - 0.394860, (GLfloat) 0.649088, (GLfloat) - 0.650208,
+ (GLfloat) - 0.419391, (GLfloat) 0.617634, (GLfloat) - 0.665312,
+ (GLfloat) - 0.150431, (GLfloat) 0.575131, (GLfloat) - 0.804111,
+ (GLfloat) - 0.134346, (GLfloat) 0.607180, (GLfloat) - 0.783125,
+ (GLfloat) - 0.073162, (GLfloat) 0.949849, (GLfloat) - 0.304029,
+ (GLfloat) - 0.068965, (GLfloat) 0.946548, (GLfloat) - 0.315105,
+ (GLfloat) 0.135802, (GLfloat) 0.982944, (GLfloat) 0.124011,
+ (GLfloat) 0.124011, (GLfloat) 0.982944, (GLfloat) 0.135802,
+ (GLfloat) 0.043834, (GLfloat) 0.993006, (GLfloat) 0.109621,
+ (GLfloat) 0.039656, (GLfloat) 0.992607, (GLfloat) 0.114709,
+ (GLfloat) 0.030163, (GLfloat) 0.998998, (GLfloat) 0.033079,
+ (GLfloat) 0.033079, (GLfloat) 0.998998, (GLfloat) 0.030163,
+ (GLfloat) 0.109621, (GLfloat) 0.993006, (GLfloat) 0.043834,
+ (GLfloat) 0.114709, (GLfloat) 0.992607, (GLfloat) 0.039656,
+ (GLfloat) - 0.124011, (GLfloat) 0.982944, (GLfloat) 0.135803,
+ (GLfloat) - 0.135803, (GLfloat) 0.982944, (GLfloat) 0.124011,
+ (GLfloat) - 0.109621, (GLfloat) 0.993006, (GLfloat) 0.043834,
+ (GLfloat) - 0.114709, (GLfloat) 0.992607, (GLfloat) 0.039656,
+ (GLfloat) - 0.033079, (GLfloat) 0.998998, (GLfloat) 0.030163,
+ (GLfloat) - 0.030163, (GLfloat) 0.998998, (GLfloat) 0.033079,
+ (GLfloat) - 0.043834, (GLfloat) 0.993006, (GLfloat) 0.109621,
+ (GLfloat) - 0.039656, (GLfloat) 0.992607, (GLfloat) 0.114709,
+ (GLfloat) - 0.135802, (GLfloat) 0.982944, (GLfloat) - 0.124011,
+ (GLfloat) - 0.124011, (GLfloat) 0.982944, (GLfloat) - 0.135802,
+ (GLfloat) - 0.043834, (GLfloat) 0.993006, (GLfloat) - 0.109621,
+ (GLfloat) - 0.039656, (GLfloat) 0.992607, (GLfloat) - 0.114709,
+ (GLfloat) - 0.030163, (GLfloat) 0.998998, (GLfloat) - 0.033079,
+ (GLfloat) - 0.033079, (GLfloat) 0.998998, (GLfloat) - 0.030163,
+ (GLfloat) - 0.109621, (GLfloat) 0.993006, (GLfloat) - 0.043834,
+ (GLfloat) - 0.114709, (GLfloat) 0.992607, (GLfloat) - 0.039656,
+ (GLfloat) 0.124011, (GLfloat) 0.982944, (GLfloat) - 0.135802,
+ (GLfloat) 0.135802, (GLfloat) 0.982944, (GLfloat) - 0.124011,
+ (GLfloat) 0.109621, (GLfloat) 0.993006, (GLfloat) - 0.043834,
+ (GLfloat) 0.114709, (GLfloat) 0.992607, (GLfloat) - 0.039656,
+ (GLfloat) 0.033079, (GLfloat) 0.998998, (GLfloat) - 0.030163,
+ (GLfloat) 0.030163, (GLfloat) 0.998998, (GLfloat) - 0.033079,
+ (GLfloat) 0.043834, (GLfloat) 0.993006, (GLfloat) - 0.109621,
+ (GLfloat) 0.039656, (GLfloat) 0.992607, (GLfloat) - 0.114709,
+ (GLfloat) 0.852125, (GLfloat) - 0.111720, (GLfloat) - 0.511275,
+ (GLfloat) 0.852125, (GLfloat) - 0.111718, (GLfloat) - 0.511276,
+ (GLfloat) 0.855252, (GLfloat) - 0.072245, (GLfloat) - 0.513151,
+ (GLfloat) 0.855252, (GLfloat) - 0.072244, (GLfloat) - 0.513152,
+ (GLfloat) 0.983916, (GLfloat) - 0.070836, (GLfloat) - 0.163986,
+ (GLfloat) 0.983916, (GLfloat) - 0.070836, (GLfloat) - 0.163986,
+ (GLfloat) 0.980457, (GLfloat) - 0.109554, (GLfloat) - 0.163409,
+ (GLfloat) 0.980457, (GLfloat) - 0.109553, (GLfloat) - 0.163410,
+ (GLfloat) 0.857405, (GLfloat) - 0.014299, (GLfloat) - 0.514444,
+ (GLfloat) 0.857405, (GLfloat) - 0.014300, (GLfloat) - 0.514443,
+ (GLfloat) 0.986297, (GLfloat) - 0.014019, (GLfloat) - 0.164382,
+ (GLfloat) 0.986297, (GLfloat) - 0.014019, (GLfloat) - 0.164382,
+ (GLfloat) 0.985564, (GLfloat) - 0.041017, (GLfloat) - 0.164261,
+ (GLfloat) 0.985564, (GLfloat) - 0.041017, (GLfloat) - 0.164260,
+ (GLfloat) 0.856742, (GLfloat) - 0.041836, (GLfloat) - 0.514045,
+ (GLfloat) 0.856742, (GLfloat) - 0.041836, (GLfloat) - 0.514045,
+ (GLfloat) 0.857405, (GLfloat) - 0.014299, (GLfloat) 0.514443,
+ (GLfloat) 0.857405, (GLfloat) - 0.014299, (GLfloat) 0.514444,
+ (GLfloat) 0.856742, (GLfloat) - 0.041836, (GLfloat) 0.514045,
+ (GLfloat) 0.856742, (GLfloat) - 0.041836, (GLfloat) 0.514045,
+ (GLfloat) 0.985564, (GLfloat) - 0.041017, (GLfloat) 0.164260,
+ (GLfloat) 0.985564, (GLfloat) - 0.041017, (GLfloat) 0.164261,
+ (GLfloat) 0.986297, (GLfloat) - 0.014019, (GLfloat) 0.164382,
+ (GLfloat) 0.986297, (GLfloat) - 0.014019, (GLfloat) 0.164382,
+ (GLfloat) 0.852125, (GLfloat) - 0.111719, (GLfloat) 0.511275,
+ (GLfloat) 0.852125, (GLfloat) - 0.111718, (GLfloat) 0.511276,
+ (GLfloat) 0.980457, (GLfloat) - 0.109553, (GLfloat) 0.163410,
+ (GLfloat) 0.980457, (GLfloat) - 0.109554, (GLfloat) 0.163409,
+ (GLfloat) 0.983916, (GLfloat) - 0.070836, (GLfloat) 0.163986,
+ (GLfloat) 0.983916, (GLfloat) - 0.070836, (GLfloat) 0.163986,
+ (GLfloat) 0.855252, (GLfloat) - 0.072244, (GLfloat) 0.513152,
+ (GLfloat) 0.855252, (GLfloat) - 0.072245, (GLfloat) 0.513151,
+ (GLfloat) - 0.511275, (GLfloat) - 0.111719, (GLfloat) - 0.852125,
+ (GLfloat) - 0.511276, (GLfloat) - 0.111718, (GLfloat) - 0.852125,
+ (GLfloat) - 0.513151, (GLfloat) - 0.072245, (GLfloat) - 0.855252,
+ (GLfloat) - 0.513152, (GLfloat) - 0.072244, (GLfloat) - 0.855252,
+ (GLfloat) - 0.163986, (GLfloat) - 0.070836, (GLfloat) - 0.983916,
+ (GLfloat) - 0.163986, (GLfloat) - 0.070836, (GLfloat) - 0.983916,
+ (GLfloat) - 0.163409, (GLfloat) - 0.109554, (GLfloat) - 0.980457,
+ (GLfloat) - 0.163410, (GLfloat) - 0.109553, (GLfloat) - 0.980457,
+ (GLfloat) - 0.514444, (GLfloat) - 0.014299, (GLfloat) - 0.857405,
+ (GLfloat) - 0.514443, (GLfloat) - 0.014299, (GLfloat) - 0.857405,
+ (GLfloat) - 0.164382, (GLfloat) - 0.014019, (GLfloat) - 0.986297,
+ (GLfloat) - 0.164382, (GLfloat) - 0.014019, (GLfloat) - 0.986297,
+ (GLfloat) - 0.164261, (GLfloat) - 0.041017, (GLfloat) - 0.985564,
+ (GLfloat) - 0.164260, (GLfloat) - 0.041017, (GLfloat) - 0.985564,
+ (GLfloat) - 0.514045, (GLfloat) - 0.041836, (GLfloat) - 0.856742,
+ (GLfloat) - 0.514045, (GLfloat) - 0.041836, (GLfloat) - 0.856742,
+ (GLfloat) 0.514443, (GLfloat) - 0.014300, (GLfloat) - 0.857405,
+ (GLfloat) 0.514444, (GLfloat) - 0.014299, (GLfloat) - 0.857405,
+ (GLfloat) 0.514045, (GLfloat) - 0.041836, (GLfloat) - 0.856742,
+ (GLfloat) 0.514045, (GLfloat) - 0.041836, (GLfloat) - 0.856742,
+ (GLfloat) 0.164260, (GLfloat) - 0.041017, (GLfloat) - 0.985564,
+ (GLfloat) 0.164261, (GLfloat) - 0.041017, (GLfloat) - 0.985564,
+ (GLfloat) 0.164382, (GLfloat) - 0.014019, (GLfloat) - 0.986297,
+ (GLfloat) 0.164382, (GLfloat) - 0.014019, (GLfloat) - 0.986297,
+ (GLfloat) 0.511275, (GLfloat) - 0.111720, (GLfloat) - 0.852125,
+ (GLfloat) 0.511276, (GLfloat) - 0.111718, (GLfloat) - 0.852125,
+ (GLfloat) 0.163410, (GLfloat) - 0.109553, (GLfloat) - 0.980457,
+ (GLfloat) 0.163409, (GLfloat) - 0.109554, (GLfloat) - 0.980457,
+ (GLfloat) 0.163986, (GLfloat) - 0.070836, (GLfloat) - 0.983916,
+ (GLfloat) 0.163986, (GLfloat) - 0.070836, (GLfloat) - 0.983916,
+ (GLfloat) 0.513152, (GLfloat) - 0.072244, (GLfloat) - 0.855252,
+ (GLfloat) 0.513151, (GLfloat) - 0.072245, (GLfloat) - 0.855252,
+ (GLfloat) - 0.511275, (GLfloat) - 0.111719, (GLfloat) 0.852125,
+ (GLfloat) - 0.511275, (GLfloat) - 0.111719, (GLfloat) 0.852125,
+ (GLfloat) - 0.163410, (GLfloat) - 0.109554, (GLfloat) 0.980457,
+ (GLfloat) - 0.163409, (GLfloat) - 0.109555, (GLfloat) 0.980457,
+ (GLfloat) - 0.163986, (GLfloat) - 0.070835, (GLfloat) 0.983916,
+ (GLfloat) - 0.163986, (GLfloat) - 0.070835, (GLfloat) 0.983916,
+ (GLfloat) - 0.513151, (GLfloat) - 0.072244, (GLfloat) 0.855252,
+ (GLfloat) - 0.513151, (GLfloat) - 0.072245, (GLfloat) 0.855252,
+ (GLfloat) 0.511275, (GLfloat) - 0.111719, (GLfloat) 0.852125,
+ (GLfloat) 0.511275, (GLfloat) - 0.111719, (GLfloat) 0.852125,
+ (GLfloat) 0.513151, (GLfloat) - 0.072245, (GLfloat) 0.855252,
+ (GLfloat) 0.513151, (GLfloat) - 0.072244, (GLfloat) 0.855252,
+ (GLfloat) 0.163986, (GLfloat) - 0.070835, (GLfloat) 0.983916,
+ (GLfloat) 0.163986, (GLfloat) - 0.070835, (GLfloat) 0.983916,
+ (GLfloat) 0.163409, (GLfloat) - 0.109555, (GLfloat) 0.980457,
+ (GLfloat) 0.163410, (GLfloat) - 0.109554, (GLfloat) 0.980457,
+ (GLfloat) 0.514444, (GLfloat) - 0.014299, (GLfloat) 0.857405,
+ (GLfloat) 0.514443, (GLfloat) - 0.014299, (GLfloat) 0.857405,
+ (GLfloat) 0.164383, (GLfloat) - 0.014019, (GLfloat) 0.986297,
+ (GLfloat) 0.164383, (GLfloat) - 0.014019, (GLfloat) 0.986297,
+ (GLfloat) 0.164261, (GLfloat) - 0.041017, (GLfloat) 0.985564,
+ (GLfloat) 0.164261, (GLfloat) - 0.041017, (GLfloat) 0.985564,
+ (GLfloat) 0.514045, (GLfloat) - 0.041836, (GLfloat) 0.856742,
+ (GLfloat) 0.514045, (GLfloat) - 0.041836, (GLfloat) 0.856742,
+ (GLfloat) - 0.514443, (GLfloat) - 0.014299, (GLfloat) 0.857405,
+ (GLfloat) - 0.514443, (GLfloat) - 0.014299, (GLfloat) 0.857405,
+ (GLfloat) - 0.514045, (GLfloat) - 0.041836, (GLfloat) 0.856742,
+ (GLfloat) - 0.514045, (GLfloat) - 0.041836, (GLfloat) 0.856742,
+ (GLfloat) - 0.164261, (GLfloat) - 0.041017, (GLfloat) 0.985564,
+ (GLfloat) - 0.164261, (GLfloat) - 0.041017, (GLfloat) 0.985564,
+ (GLfloat) - 0.164383, (GLfloat) - 0.014019, (GLfloat) 0.986297,
+ (GLfloat) - 0.164383, (GLfloat) - 0.014019, (GLfloat) 0.986297,
+ (GLfloat) - 0.852125, (GLfloat) - 0.111719, (GLfloat) - 0.511275,
+ (GLfloat) - 0.852125, (GLfloat) - 0.111719, (GLfloat) - 0.511275,
+ (GLfloat) - 0.980457, (GLfloat) - 0.109554, (GLfloat) - 0.163410,
+ (GLfloat) - 0.980457, (GLfloat) - 0.109555, (GLfloat) - 0.163409,
+ (GLfloat) - 0.983916, (GLfloat) - 0.070835, (GLfloat) - 0.163986,
+ (GLfloat) - 0.983916, (GLfloat) - 0.070835, (GLfloat) - 0.163986,
+ (GLfloat) - 0.855252, (GLfloat) - 0.072244, (GLfloat) - 0.513151,
+ (GLfloat) - 0.855252, (GLfloat) - 0.072245, (GLfloat) - 0.513151,
+ (GLfloat) - 0.852125, (GLfloat) - 0.111719, (GLfloat) 0.511275,
+ (GLfloat) - 0.852125, (GLfloat) - 0.111719, (GLfloat) 0.511275,
+ (GLfloat) - 0.855252, (GLfloat) - 0.072245, (GLfloat) 0.513151,
+ (GLfloat) - 0.855252, (GLfloat) - 0.072244, (GLfloat) 0.513151,
+ (GLfloat) - 0.983916, (GLfloat) - 0.070835, (GLfloat) 0.163986,
+ (GLfloat) - 0.983916, (GLfloat) - 0.070835, (GLfloat) 0.163986,
+ (GLfloat) - 0.980457, (GLfloat) - 0.109555, (GLfloat) 0.163409,
+ (GLfloat) - 0.980457, (GLfloat) - 0.109554, (GLfloat) 0.163410,
+ (GLfloat) - 0.857405, (GLfloat) - 0.014299, (GLfloat) 0.514443,
+ (GLfloat) - 0.857405, (GLfloat) - 0.014299, (GLfloat) 0.514443,
+ (GLfloat) - 0.986297, (GLfloat) - 0.014019, (GLfloat) 0.164383,
+ (GLfloat) - 0.986297, (GLfloat) - 0.014019, (GLfloat) 0.164383,
+ (GLfloat) - 0.985564, (GLfloat) - 0.041017, (GLfloat) 0.164261,
+ (GLfloat) - 0.985564, (GLfloat) - 0.041017, (GLfloat) 0.164261,
+ (GLfloat) - 0.856742, (GLfloat) - 0.041836, (GLfloat) 0.514045,
+ (GLfloat) - 0.856742, (GLfloat) - 0.041836, (GLfloat) 0.514045,
+ (GLfloat) - 0.857405, (GLfloat) - 0.014299, (GLfloat) - 0.514443,
+ (GLfloat) - 0.857405, (GLfloat) - 0.014299, (GLfloat) - 0.514444,
+ (GLfloat) - 0.856742, (GLfloat) - 0.041836, (GLfloat) - 0.514045,
+ (GLfloat) - 0.856742, (GLfloat) - 0.041836, (GLfloat) - 0.514045,
+ (GLfloat) - 0.985564, (GLfloat) - 0.041017, (GLfloat) - 0.164261,
+ (GLfloat) - 0.985564, (GLfloat) - 0.041017, (GLfloat) - 0.164261,
+ (GLfloat) - 0.986297, (GLfloat) - 0.014019, (GLfloat) - 0.164383,
+ (GLfloat) - 0.986297, (GLfloat) - 0.014019, (GLfloat) - 0.164383,
+ (GLfloat) - 0.511714, (GLfloat) 0.103845, (GLfloat) - 0.852857,
+ (GLfloat) - 0.511715, (GLfloat) 0.103844, (GLfloat) - 0.852857,
+ (GLfloat) - 0.163545, (GLfloat) 0.101829, (GLfloat) - 0.981267,
+ (GLfloat) - 0.163544, (GLfloat) 0.101829, (GLfloat) - 0.981267,
+ (GLfloat) - 0.164038, (GLfloat) 0.066199, (GLfloat) - 0.984230,
+ (GLfloat) - 0.164039, (GLfloat) 0.066198, (GLfloat) - 0.984230,
+ (GLfloat) - 0.513322, (GLfloat) 0.067516, (GLfloat) - 0.855536,
+ (GLfloat) - 0.513322, (GLfloat) 0.067517, (GLfloat) - 0.855536,
+ (GLfloat) 0.511714, (GLfloat) 0.103845, (GLfloat) - 0.852857,
+ (GLfloat) 0.511715, (GLfloat) 0.103844, (GLfloat) - 0.852857,
+ (GLfloat) 0.513322, (GLfloat) 0.067517, (GLfloat) - 0.855536,
+ (GLfloat) 0.513322, (GLfloat) 0.067516, (GLfloat) - 0.855536,
+ (GLfloat) 0.164038, (GLfloat) 0.066199, (GLfloat) - 0.984230,
+ (GLfloat) 0.164039, (GLfloat) 0.066198, (GLfloat) - 0.984230,
+ (GLfloat) 0.163544, (GLfloat) 0.101829, (GLfloat) - 0.981267,
+ (GLfloat) 0.163545, (GLfloat) 0.101829, (GLfloat) - 0.981267,
+ (GLfloat) 0.514446, (GLfloat) 0.013998, (GLfloat) - 0.857409,
+ (GLfloat) 0.514445, (GLfloat) 0.013999, (GLfloat) - 0.857409,
+ (GLfloat) 0.164383, (GLfloat) 0.013724, (GLfloat) - 0.986301,
+ (GLfloat) 0.164383, (GLfloat) 0.013724, (GLfloat) - 0.986301,
+ (GLfloat) 0.164274, (GLfloat) 0.039013, (GLfloat) - 0.985643,
+ (GLfloat) 0.164273, (GLfloat) 0.039013, (GLfloat) - 0.985643,
+ (GLfloat) 0.514088, (GLfloat) 0.039792, (GLfloat) - 0.856814,
+ (GLfloat) 0.514088, (GLfloat) 0.039792, (GLfloat) - 0.856814,
+ (GLfloat) - 0.514445, (GLfloat) 0.013999, (GLfloat) - 0.857409,
+ (GLfloat) - 0.514446, (GLfloat) 0.013998, (GLfloat) - 0.857409,
+ (GLfloat) - 0.514088, (GLfloat) 0.039792, (GLfloat) - 0.856814,
+ (GLfloat) - 0.514088, (GLfloat) 0.039792, (GLfloat) - 0.856814,
+ (GLfloat) - 0.164273, (GLfloat) 0.039013, (GLfloat) - 0.985643,
+ (GLfloat) - 0.164274, (GLfloat) 0.039013, (GLfloat) - 0.985643,
+ (GLfloat) - 0.164383, (GLfloat) 0.013724, (GLfloat) - 0.986301,
+ (GLfloat) - 0.164383, (GLfloat) 0.013724, (GLfloat) - 0.986301,
+ (GLfloat) - 0.852857, (GLfloat) 0.103845, (GLfloat) - 0.511714,
+ (GLfloat) - 0.852857, (GLfloat) 0.103845, (GLfloat) - 0.511714,
+ (GLfloat) - 0.855536, (GLfloat) 0.067516, (GLfloat) - 0.513322,
+ (GLfloat) - 0.855536, (GLfloat) 0.067516, (GLfloat) - 0.513322,
+ (GLfloat) - 0.984230, (GLfloat) 0.066198, (GLfloat) - 0.164038,
+ (GLfloat) - 0.984230, (GLfloat) 0.066198, (GLfloat) - 0.164039,
+ (GLfloat) - 0.981266, (GLfloat) 0.101830, (GLfloat) - 0.163544,
+ (GLfloat) - 0.981266, (GLfloat) 0.101829, (GLfloat) - 0.163545,
+ (GLfloat) - 0.857409, (GLfloat) 0.013998, (GLfloat) - 0.514446,
+ (GLfloat) - 0.857409, (GLfloat) 0.013999, (GLfloat) - 0.514445,
+ (GLfloat) - 0.986301, (GLfloat) 0.013724, (GLfloat) - 0.164383,
+ (GLfloat) - 0.986301, (GLfloat) 0.013724, (GLfloat) - 0.164383,
+ (GLfloat) - 0.985643, (GLfloat) 0.039013, (GLfloat) - 0.164274,
+ (GLfloat) - 0.985643, (GLfloat) 0.039013, (GLfloat) - 0.164274,
+ (GLfloat) - 0.856814, (GLfloat) 0.039792, (GLfloat) - 0.514088,
+ (GLfloat) - 0.856814, (GLfloat) 0.039792, (GLfloat) - 0.514088,
+ (GLfloat) - 0.857409, (GLfloat) 0.013999, (GLfloat) 0.514445,
+ (GLfloat) - 0.857409, (GLfloat) 0.013998, (GLfloat) 0.514446,
+ (GLfloat) - 0.856814, (GLfloat) 0.039792, (GLfloat) 0.514088,
+ (GLfloat) - 0.856814, (GLfloat) 0.039792, (GLfloat) 0.514088,
+ (GLfloat) - 0.985643, (GLfloat) 0.039013, (GLfloat) 0.164274,
+ (GLfloat) - 0.985643, (GLfloat) 0.039013, (GLfloat) 0.164274,
+ (GLfloat) - 0.986301, (GLfloat) 0.013724, (GLfloat) 0.164383,
+ (GLfloat) - 0.986301, (GLfloat) 0.013724, (GLfloat) 0.164383,
+ (GLfloat) - 0.852857, (GLfloat) 0.103845, (GLfloat) 0.511714,
+ (GLfloat) - 0.852857, (GLfloat) 0.103845, (GLfloat) 0.511714,
+ (GLfloat) - 0.981266, (GLfloat) 0.101829, (GLfloat) 0.163545,
+ (GLfloat) - 0.981266, (GLfloat) 0.101830, (GLfloat) 0.163544,
+ (GLfloat) - 0.984230, (GLfloat) 0.066198, (GLfloat) 0.164038,
+ (GLfloat) - 0.984230, (GLfloat) 0.066198, (GLfloat) 0.164039,
+ (GLfloat) - 0.855536, (GLfloat) 0.067516, (GLfloat) 0.513322,
+ (GLfloat) - 0.855536, (GLfloat) 0.067516, (GLfloat) 0.513322,
+ (GLfloat) - 0.511714, (GLfloat) 0.103845, (GLfloat) 0.852857,
+ (GLfloat) - 0.511714, (GLfloat) 0.103845, (GLfloat) 0.852857,
+ (GLfloat) - 0.513322, (GLfloat) 0.067516, (GLfloat) 0.855536,
+ (GLfloat) - 0.513322, (GLfloat) 0.067516, (GLfloat) 0.855536,
+ (GLfloat) - 0.164038, (GLfloat) 0.066198, (GLfloat) 0.984230,
+ (GLfloat) - 0.164039, (GLfloat) 0.066198, (GLfloat) 0.984230,
+ (GLfloat) - 0.163544, (GLfloat) 0.101830, (GLfloat) 0.981266,
+ (GLfloat) - 0.163545, (GLfloat) 0.101829, (GLfloat) 0.981266,
+ (GLfloat) - 0.514446, (GLfloat) 0.013998, (GLfloat) 0.857409,
+ (GLfloat) - 0.514445, (GLfloat) 0.013999, (GLfloat) 0.857409,
+ (GLfloat) - 0.164383, (GLfloat) 0.013724, (GLfloat) 0.986301,
+ (GLfloat) - 0.164383, (GLfloat) 0.013724, (GLfloat) 0.986301,
+ (GLfloat) - 0.164274, (GLfloat) 0.039013, (GLfloat) 0.985643,
+ (GLfloat) - 0.164274, (GLfloat) 0.039013, (GLfloat) 0.985643,
+ (GLfloat) - 0.514088, (GLfloat) 0.039792, (GLfloat) 0.856814,
+ (GLfloat) - 0.514088, (GLfloat) 0.039792, (GLfloat) 0.856814,
+ (GLfloat) 0.514445, (GLfloat) 0.013999, (GLfloat) 0.857409,
+ (GLfloat) 0.514446, (GLfloat) 0.013998, (GLfloat) 0.857409,
+ (GLfloat) 0.514088, (GLfloat) 0.039792, (GLfloat) 0.856814,
+ (GLfloat) 0.514088, (GLfloat) 0.039792, (GLfloat) 0.856814,
+ (GLfloat) 0.164274, (GLfloat) 0.039013, (GLfloat) 0.985643,
+ (GLfloat) 0.164274, (GLfloat) 0.039013, (GLfloat) 0.985643,
+ (GLfloat) 0.164383, (GLfloat) 0.013724, (GLfloat) 0.986301,
+ (GLfloat) 0.164383, (GLfloat) 0.013724, (GLfloat) 0.986301,
+ (GLfloat) 0.511714, (GLfloat) 0.103845, (GLfloat) 0.852857,
+ (GLfloat) 0.511714, (GLfloat) 0.103845, (GLfloat) 0.852857,
+ (GLfloat) 0.163545, (GLfloat) 0.101829, (GLfloat) 0.981266,
+ (GLfloat) 0.163544, (GLfloat) 0.101830, (GLfloat) 0.981266,
+ (GLfloat) 0.164038, (GLfloat) 0.066198, (GLfloat) 0.984230,
+ (GLfloat) 0.164039, (GLfloat) 0.066198, (GLfloat) 0.984230,
+ (GLfloat) 0.513322, (GLfloat) 0.067516, (GLfloat) 0.855536,
+ (GLfloat) 0.513322, (GLfloat) 0.067516, (GLfloat) 0.855536,
+ (GLfloat) 0.852857, (GLfloat) 0.103845, (GLfloat) 0.511714,
+ (GLfloat) 0.852857, (GLfloat) 0.103844, (GLfloat) 0.511715,
+ (GLfloat) 0.855536, (GLfloat) 0.067517, (GLfloat) 0.513322,
+ (GLfloat) 0.855536, (GLfloat) 0.067516, (GLfloat) 0.513322,
+ (GLfloat) 0.984230, (GLfloat) 0.066199, (GLfloat) 0.164038,
+ (GLfloat) 0.984230, (GLfloat) 0.066198, (GLfloat) 0.164039,
+ (GLfloat) 0.981267, (GLfloat) 0.101829, (GLfloat) 0.163544,
+ (GLfloat) 0.981267, (GLfloat) 0.101829, (GLfloat) 0.163545,
+ (GLfloat) 0.857409, (GLfloat) 0.013998, (GLfloat) 0.514446,
+ (GLfloat) 0.857409, (GLfloat) 0.013999, (GLfloat) 0.514445,
+ (GLfloat) 0.986301, (GLfloat) 0.013724, (GLfloat) 0.164383,
+ (GLfloat) 0.986301, (GLfloat) 0.013724, (GLfloat) 0.164383,
+ (GLfloat) 0.985643, (GLfloat) 0.039013, (GLfloat) 0.164274,
+ (GLfloat) 0.985643, (GLfloat) 0.039013, (GLfloat) 0.164273,
+ (GLfloat) 0.856814, (GLfloat) 0.039792, (GLfloat) 0.514088,
+ (GLfloat) 0.856814, (GLfloat) 0.039792, (GLfloat) 0.514088,
+ (GLfloat) 0.857409, (GLfloat) 0.013999, (GLfloat) - 0.514445,
+ (GLfloat) 0.857409, (GLfloat) 0.013998, (GLfloat) - 0.514446,
+ (GLfloat) 0.856814, (GLfloat) 0.039792, (GLfloat) - 0.514088,
+ (GLfloat) 0.856814, (GLfloat) 0.039792, (GLfloat) - 0.514088,
+ (GLfloat) 0.985643, (GLfloat) 0.039013, (GLfloat) - 0.164273,
+ (GLfloat) 0.985643, (GLfloat) 0.039013, (GLfloat) - 0.164274,
+ (GLfloat) 0.986301, (GLfloat) 0.013724, (GLfloat) - 0.164383,
+ (GLfloat) 0.986301, (GLfloat) 0.013724, (GLfloat) - 0.164383,
+ (GLfloat) 0.852857, (GLfloat) 0.103845, (GLfloat) - 0.511714,
+ (GLfloat) 0.852857, (GLfloat) 0.103844, (GLfloat) - 0.511715,
+ (GLfloat) 0.981267, (GLfloat) 0.101829, (GLfloat) - 0.163545,
+ (GLfloat) 0.981267, (GLfloat) 0.101829, (GLfloat) - 0.163544,
+ (GLfloat) 0.984230, (GLfloat) 0.066199, (GLfloat) - 0.164038,
+ (GLfloat) 0.984230, (GLfloat) 0.066198, (GLfloat) - 0.164039,
+ (GLfloat) 0.855536, (GLfloat) 0.067516, (GLfloat) - 0.513322,
+ (GLfloat) 0.855536, (GLfloat) 0.067517, (GLfloat) - 0.513322,
+ (GLfloat) 0.845633, (GLfloat) 0.165745, (GLfloat) 0.507379,
+ (GLfloat) 0.845633, (GLfloat) 0.165745, (GLfloat) 0.507379,
+ (GLfloat) 0.973270, (GLfloat) 0.162582, (GLfloat) 0.162211,
+ (GLfloat) 0.973270, (GLfloat) 0.162582, (GLfloat) 0.162212,
+ (GLfloat) 0.985759, (GLfloat) 0.022905, (GLfloat) 0.166594,
+ (GLfloat) 0.986250, (GLfloat) 0.017105, (GLfloat) 0.164375,
+ (GLfloat) 0.856160, (GLfloat) 0.009467, (GLfloat) 0.516625,
+ (GLfloat) 0.857388, (GLfloat) 0.015640, (GLfloat) 0.514433,
+ (GLfloat) 0.845633, (GLfloat) 0.165745, (GLfloat) - 0.507380,
+ (GLfloat) 0.845633, (GLfloat) 0.165745, (GLfloat) - 0.507379,
+ (GLfloat) 0.856160, (GLfloat) 0.009468, (GLfloat) - 0.516624,
+ (GLfloat) 0.857388, (GLfloat) 0.015640, (GLfloat) - 0.514433,
+ (GLfloat) 0.985759, (GLfloat) 0.022905, (GLfloat) - 0.166594,
+ (GLfloat) 0.986250, (GLfloat) 0.017105, (GLfloat) - 0.164375,
+ (GLfloat) 0.973270, (GLfloat) 0.162582, (GLfloat) - 0.162211,
+ (GLfloat) 0.973270, (GLfloat) 0.162582, (GLfloat) - 0.162212,
+ (GLfloat) 0.283621, (GLfloat) - 0.936578, (GLfloat) - 0.205866,
+ (GLfloat) 0.264056, (GLfloat) - 0.947923, (GLfloat) - 0.178092,
+ (GLfloat) 0.315105, (GLfloat) - 0.946548, (GLfloat) - 0.068965,
+ (GLfloat) 0.304029, (GLfloat) - 0.949849, (GLfloat) - 0.073162,
+ (GLfloat) 0.789686, (GLfloat) - 0.598377, (GLfloat) - 0.135427,
+ (GLfloat) 0.809934, (GLfloat) - 0.566659, (GLfloat) - 0.151344,
+ (GLfloat) 0.656717, (GLfloat) - 0.640092, (GLfloat) - 0.398754,
+ (GLfloat) 0.671170, (GLfloat) - 0.608876, (GLfloat) - 0.422849,
+ (GLfloat) 0.264055, (GLfloat) - 0.947923, (GLfloat) 0.178092,
+ (GLfloat) 0.283621, (GLfloat) - 0.936578, (GLfloat) 0.205866,
+ (GLfloat) 0.656718, (GLfloat) - 0.640092, (GLfloat) 0.398754,
+ (GLfloat) 0.671170, (GLfloat) - 0.608876, (GLfloat) 0.422849,
+ (GLfloat) 0.809934, (GLfloat) - 0.566659, (GLfloat) 0.151344,
+ (GLfloat) 0.789686, (GLfloat) - 0.598377, (GLfloat) 0.135427,
+ (GLfloat) 0.304029, (GLfloat) - 0.949849, (GLfloat) 0.073162,
+ (GLfloat) 0.315105, (GLfloat) - 0.946548, (GLfloat) 0.068965,
+ (GLfloat) 0.507379, (GLfloat) 0.165745, (GLfloat) - 0.845633,
+ (GLfloat) 0.507380, (GLfloat) 0.165745, (GLfloat) - 0.845633,
+ (GLfloat) 0.162211, (GLfloat) 0.162582, (GLfloat) - 0.973270,
+ (GLfloat) 0.162212, (GLfloat) 0.162582, (GLfloat) - 0.973270,
+ (GLfloat) 0.166594, (GLfloat) 0.022905, (GLfloat) - 0.985759,
+ (GLfloat) 0.164375, (GLfloat) 0.017105, (GLfloat) - 0.986250,
+ (GLfloat) 0.516624, (GLfloat) 0.009468, (GLfloat) - 0.856160,
+ (GLfloat) 0.514433, (GLfloat) 0.015640, (GLfloat) - 0.857388,
+ (GLfloat) - 0.507379, (GLfloat) 0.165745, (GLfloat) - 0.845633,
+ (GLfloat) - 0.507379, (GLfloat) 0.165745, (GLfloat) - 0.845633,
+ (GLfloat) - 0.516625, (GLfloat) 0.009467, (GLfloat) - 0.856160,
+ (GLfloat) - 0.514433, (GLfloat) 0.015640, (GLfloat) - 0.857388,
+ (GLfloat) - 0.166594, (GLfloat) 0.022905, (GLfloat) - 0.985759,
+ (GLfloat) - 0.164375, (GLfloat) 0.017105, (GLfloat) - 0.986250,
+ (GLfloat) - 0.162211, (GLfloat) 0.162582, (GLfloat) - 0.973270,
+ (GLfloat) - 0.162212, (GLfloat) 0.162582, (GLfloat) - 0.973270,
+ (GLfloat) - 0.205866, (GLfloat) - 0.936578, (GLfloat) - 0.283621,
+ (GLfloat) - 0.178092, (GLfloat) - 0.947923, (GLfloat) - 0.264055,
+ (GLfloat) - 0.068965, (GLfloat) - 0.946548, (GLfloat) - 0.315105,
+ (GLfloat) - 0.073162, (GLfloat) - 0.949849, (GLfloat) - 0.304029,
+ (GLfloat) - 0.135427, (GLfloat) - 0.598377, (GLfloat) - 0.789686,
+ (GLfloat) - 0.151344, (GLfloat) - 0.566659, (GLfloat) - 0.809934,
+ (GLfloat) - 0.398754, (GLfloat) - 0.640092, (GLfloat) - 0.656718,
+ (GLfloat) - 0.422849, (GLfloat) - 0.608876, (GLfloat) - 0.671170,
+ (GLfloat) 0.178092, (GLfloat) - 0.947923, (GLfloat) - 0.264056,
+ (GLfloat) 0.205866, (GLfloat) - 0.936578, (GLfloat) - 0.283621,
+ (GLfloat) 0.398754, (GLfloat) - 0.640092, (GLfloat) - 0.656717,
+ (GLfloat) 0.422849, (GLfloat) - 0.608876, (GLfloat) - 0.671170,
+ (GLfloat) 0.151344, (GLfloat) - 0.566659, (GLfloat) - 0.809934,
+ (GLfloat) 0.135427, (GLfloat) - 0.598377, (GLfloat) - 0.789686,
+ (GLfloat) 0.073162, (GLfloat) - 0.949849, (GLfloat) - 0.304029,
+ (GLfloat) 0.068965, (GLfloat) - 0.946548, (GLfloat) - 0.315105,
+ (GLfloat) - 0.845633, (GLfloat) 0.165746, (GLfloat) - 0.507379,
+ (GLfloat) - 0.845632, (GLfloat) 0.165746, (GLfloat) - 0.507380,
+ (GLfloat) - 0.973270, (GLfloat) 0.162582, (GLfloat) - 0.162211,
+ (GLfloat) - 0.973270, (GLfloat) 0.162582, (GLfloat) - 0.162212,
+ (GLfloat) - 0.985759, (GLfloat) 0.022905, (GLfloat) - 0.166594,
+ (GLfloat) - 0.986250, (GLfloat) 0.017105, (GLfloat) - 0.164375,
+ (GLfloat) - 0.856160, (GLfloat) 0.009467, (GLfloat) - 0.516625,
+ (GLfloat) - 0.857388, (GLfloat) 0.015640, (GLfloat) - 0.514433,
+ (GLfloat) - 0.845633, (GLfloat) 0.165746, (GLfloat) 0.507379,
+ (GLfloat) - 0.845632, (GLfloat) 0.165746, (GLfloat) 0.507380,
+ (GLfloat) - 0.856159, (GLfloat) 0.009466, (GLfloat) 0.516625,
+ (GLfloat) - 0.857388, (GLfloat) 0.015640, (GLfloat) 0.514433,
+ (GLfloat) - 0.985759, (GLfloat) 0.022905, (GLfloat) 0.166594,
+ (GLfloat) - 0.986250, (GLfloat) 0.017105, (GLfloat) 0.164375,
+ (GLfloat) - 0.973270, (GLfloat) 0.162582, (GLfloat) 0.162211,
+ (GLfloat) - 0.973270, (GLfloat) 0.162582, (GLfloat) 0.162212,
+ (GLfloat) - 0.283620, (GLfloat) - 0.936578, (GLfloat) 0.205866,
+ (GLfloat) - 0.264055, (GLfloat) - 0.947923, (GLfloat) 0.178091,
+ (GLfloat) - 0.315105, (GLfloat) - 0.946548, (GLfloat) 0.068965,
+ (GLfloat) - 0.304029, (GLfloat) - 0.949849, (GLfloat) 0.073162,
+ (GLfloat) - 0.789686, (GLfloat) - 0.598377, (GLfloat) 0.135427,
+ (GLfloat) - 0.809934, (GLfloat) - 0.566659, (GLfloat) 0.151344,
+ (GLfloat) - 0.656718, (GLfloat) - 0.640090, (GLfloat) 0.398755,
+ (GLfloat) - 0.671170, (GLfloat) - 0.608876, (GLfloat) 0.422848,
+ (GLfloat) - 0.264055, (GLfloat) - 0.947923, (GLfloat) - 0.178092,
+ (GLfloat) - 0.283620, (GLfloat) - 0.936578, (GLfloat) - 0.205866,
+ (GLfloat) - 0.656718, (GLfloat) - 0.640091, (GLfloat) - 0.398755,
+ (GLfloat) - 0.671170, (GLfloat) - 0.608876, (GLfloat) - 0.422848,
+ (GLfloat) - 0.809934, (GLfloat) - 0.566659, (GLfloat) - 0.151344,
+ (GLfloat) - 0.789686, (GLfloat) - 0.598377, (GLfloat) - 0.135427,
+ (GLfloat) - 0.304029, (GLfloat) - 0.949849, (GLfloat) - 0.073163,
+ (GLfloat) - 0.315105, (GLfloat) - 0.946548, (GLfloat) - 0.068965,
+ (GLfloat) - 0.507380, (GLfloat) 0.165746, (GLfloat) 0.845632,
+ (GLfloat) - 0.507379, (GLfloat) 0.165746, (GLfloat) 0.845633,
+ (GLfloat) - 0.162211, (GLfloat) 0.162582, (GLfloat) 0.973270,
+ (GLfloat) - 0.162212, (GLfloat) 0.162582, (GLfloat) 0.973270,
+ (GLfloat) - 0.166594, (GLfloat) 0.022905, (GLfloat) 0.985759,
+ (GLfloat) - 0.164375, (GLfloat) 0.017105, (GLfloat) 0.986250,
+ (GLfloat) - 0.516625, (GLfloat) 0.009466, (GLfloat) 0.856159,
+ (GLfloat) - 0.514433, (GLfloat) 0.015640, (GLfloat) 0.857388,
+ (GLfloat) 0.507380, (GLfloat) 0.165746, (GLfloat) 0.845632,
+ (GLfloat) 0.507379, (GLfloat) 0.165746, (GLfloat) 0.845633,
+ (GLfloat) 0.516625, (GLfloat) 0.009467, (GLfloat) 0.856160,
+ (GLfloat) 0.514433, (GLfloat) 0.015640, (GLfloat) 0.857388,
+ (GLfloat) 0.166594, (GLfloat) 0.022905, (GLfloat) 0.985759,
+ (GLfloat) 0.164375, (GLfloat) 0.017105, (GLfloat) 0.986250,
+ (GLfloat) 0.162211, (GLfloat) 0.162582, (GLfloat) 0.973270,
+ (GLfloat) 0.162212, (GLfloat) 0.162582, (GLfloat) 0.973270,
+ (GLfloat) 0.205866, (GLfloat) - 0.936578, (GLfloat) 0.283620,
+ (GLfloat) 0.178092, (GLfloat) - 0.947923, (GLfloat) 0.264055,
+ (GLfloat) 0.068965, (GLfloat) - 0.946548, (GLfloat) 0.315105,
+ (GLfloat) 0.073163, (GLfloat) - 0.949849, (GLfloat) 0.304029,
+ (GLfloat) 0.135427, (GLfloat) - 0.598377, (GLfloat) 0.789686,
+ (GLfloat) 0.151344, (GLfloat) - 0.566659, (GLfloat) 0.809934,
+ (GLfloat) 0.398755, (GLfloat) - 0.640091, (GLfloat) 0.656718,
+ (GLfloat) 0.422848, (GLfloat) - 0.608876, (GLfloat) 0.671170,
+ (GLfloat) - 0.178091, (GLfloat) - 0.947923, (GLfloat) 0.264055,
+ (GLfloat) - 0.205866, (GLfloat) - 0.936578, (GLfloat) 0.283620,
+ (GLfloat) - 0.398755, (GLfloat) - 0.640090, (GLfloat) 0.656718,
+ (GLfloat) - 0.422848, (GLfloat) - 0.608876, (GLfloat) 0.671170,
+ (GLfloat) - 0.151344, (GLfloat) - 0.566659, (GLfloat) 0.809934,
+ (GLfloat) - 0.135427, (GLfloat) - 0.598377, (GLfloat) 0.789686,
+ (GLfloat) - 0.073162, (GLfloat) - 0.949849, (GLfloat) 0.304029,
+ (GLfloat) - 0.068965, (GLfloat) - 0.946548, (GLfloat) 0.315105,
+ (GLfloat) 0.135802, (GLfloat) - 0.982944, (GLfloat) - 0.124011,
+ (GLfloat) 0.124011, (GLfloat) - 0.982944, (GLfloat) - 0.135802,
+ (GLfloat) 0.043834, (GLfloat) - 0.993006, (GLfloat) - 0.109621,
+ (GLfloat) 0.039656, (GLfloat) - 0.992607, (GLfloat) - 0.114709,
+ (GLfloat) 0.030163, (GLfloat) - 0.998998, (GLfloat) - 0.033079,
+ (GLfloat) 0.033079, (GLfloat) - 0.998998, (GLfloat) - 0.030163,
+ (GLfloat) 0.109621, (GLfloat) - 0.993006, (GLfloat) - 0.043834,
+ (GLfloat) 0.114709, (GLfloat) - 0.992607, (GLfloat) - 0.039656,
+ (GLfloat) - 0.124011, (GLfloat) - 0.982944, (GLfloat) - 0.135802,
+ (GLfloat) - 0.135802, (GLfloat) - 0.982944, (GLfloat) - 0.124011,
+ (GLfloat) - 0.109621, (GLfloat) - 0.993006, (GLfloat) - 0.043834,
+ (GLfloat) - 0.114709, (GLfloat) - 0.992607, (GLfloat) - 0.039656,
+ (GLfloat) - 0.033079, (GLfloat) - 0.998998, (GLfloat) - 0.030163,
+ (GLfloat) - 0.030163, (GLfloat) - 0.998998, (GLfloat) - 0.033079,
+ (GLfloat) - 0.043834, (GLfloat) - 0.993006, (GLfloat) - 0.109621,
+ (GLfloat) - 0.039656, (GLfloat) - 0.992607, (GLfloat) - 0.114709,
+ (GLfloat) - 0.135802, (GLfloat) - 0.982944, (GLfloat) 0.124011,
+ (GLfloat) - 0.124011, (GLfloat) - 0.982944, (GLfloat) 0.135802,
+ (GLfloat) - 0.043834, (GLfloat) - 0.993006, (GLfloat) 0.109621,
+ (GLfloat) - 0.039656, (GLfloat) - 0.992607, (GLfloat) 0.114709,
+ (GLfloat) - 0.030163, (GLfloat) - 0.998998, (GLfloat) 0.033079,
+ (GLfloat) - 0.033079, (GLfloat) - 0.998998, (GLfloat) 0.030163,
+ (GLfloat) - 0.109621, (GLfloat) - 0.993006, (GLfloat) 0.043834,
+ (GLfloat) - 0.114709, (GLfloat) - 0.992607, (GLfloat) 0.039656,
+ (GLfloat) 0.124011, (GLfloat) - 0.982944, (GLfloat) 0.135802,
+ (GLfloat) 0.135802, (GLfloat) - 0.982944, (GLfloat) 0.124011,
+ (GLfloat) 0.109621, (GLfloat) - 0.993006, (GLfloat) 0.043834,
+ (GLfloat) 0.114709, (GLfloat) - 0.992607, (GLfloat) 0.039656,
+ (GLfloat) 0.033079, (GLfloat) - 0.998998, (GLfloat) 0.030163,
+ (GLfloat) 0.030163, (GLfloat) - 0.998998, (GLfloat) 0.033079,
+ (GLfloat) 0.043834, (GLfloat) - 0.993006, (GLfloat) 0.109621,
+ (GLfloat) 0.039656, (GLfloat) - 0.992607, (GLfloat) 0.114709,
+};
+
+unsigned short int s1_1_POLS[] =
+{
+ 3, 12, 76, 74, 1, 3, 12, 74, 82, 1, 3, 76, 22, 78, 1, 3, 78, 74, 76, 1,
+ 3, 78, 20, 80, 1, 3, 80, 74, 78, 1, 3, 80, 28, 82, 1, 3, 82, 74, 80, 1,
+ 3, 13, 84, 77, 1, 3, 13, 77, 88, 1, 3, 84, 24, 86, 1, 3, 86, 77, 84, 1,
+ 3, 86, 20, 78, 1, 3, 78, 77, 86, 1, 3, 78, 22, 88, 1, 3, 88, 77, 78, 1,
+ 3, 14, 90, 85, 1, 3, 14, 85, 93, 1, 3, 26, 91, 85, 1, 3, 26, 85, 90, 1,
+ 3, 20, 86, 85, 1, 3, 20, 85, 91, 1, 3, 86, 24, 93, 1, 3, 93, 85, 86, 1,
+ 3, 15, 95, 79, 1, 3, 15, 79, 97, 1, 3, 95, 28, 80, 1, 3, 80, 79, 95, 1,
+ 3, 20, 91, 79, 1, 3, 20, 79, 80, 1, 3, 26, 97, 79, 1, 3, 26, 79, 91, 1,
+ 3, 13, 99, 83, 1, 3, 13, 83, 84, 1, 3, 99, 30, 101, 1, 3, 101, 83, 99, 1,
+3, 101, 23, 102, 1, 3, 102, 83, 101, 1, 3, 102, 24, 84, 1, 3, 84, 83, 102, 1,
+ 3, 16, 104, 100, 1, 3, 16, 100, 108, 1, 3, 104, 32, 106, 1, 3, 106, 100, 104, 1,
+ 3, 106, 23, 101, 1, 3, 101, 100, 106, 1, 3, 101, 30, 108, 1, 3, 108, 100, 101, 1,
+ 3, 17, 110, 105, 1, 3, 17, 105, 113, 1, 3, 33, 111, 105, 1, 3, 33, 105, 110, 1,
+ 3, 23, 106, 105, 1, 3, 23, 105, 111, 1, 3, 106, 32, 113, 1, 3, 113, 105, 106, 1,
+ 3, 14, 93, 92, 1, 3, 14, 92, 114, 1, 3, 93, 24, 102, 1, 3, 102, 92, 93, 1,
+ 3, 23, 111, 92, 1, 3, 23, 92, 102, 1, 3, 33, 114, 92, 1, 3, 33, 92, 111, 1,
+ 3, 16, 116, 103, 1, 3, 16, 103, 104, 1, 3, 116, 35, 118, 1, 3, 118, 103, 116, 1,
+ 3, 118, 31, 119, 1, 3, 119, 103, 118, 1, 3, 119, 32, 104, 1, 3, 104, 103, 119, 1,
+ 3, 18, 121, 117, 1, 3, 18, 117, 125, 1, 3, 121, 36, 123, 1, 3, 123, 117, 121, 1,
+ 3, 123, 31, 118, 1, 3, 118, 117, 123, 1, 3, 118, 35, 125, 1, 3, 125, 117, 118, 1,
+ 3, 19, 127, 122, 1, 3, 19, 122, 130, 1, 3, 37, 128, 122, 1, 3, 37, 122, 127, 1,
+ 3, 31, 123, 122, 1, 3, 31, 122, 128, 1, 3, 123, 36, 130, 1, 3, 130, 122, 123, 1,
+ 3, 17, 113, 112, 1, 3, 17, 112, 131, 1, 3, 113, 32, 119, 1, 3, 119, 112, 113, 1,
+ 3, 31, 128, 112, 1, 3, 31, 112, 119, 1, 3, 37, 131, 112, 1, 3, 37, 112, 128, 1,
+ 3, 18, 133, 120, 1, 3, 18, 120, 121, 1, 3, 133, 39, 134, 1, 3, 134, 120, 133, 1,
+ 3, 134, 27, 135, 1, 3, 135, 120, 134, 1, 3, 135, 36, 121, 1, 3, 121, 120, 135, 1,
+ 3, 12, 82, 81, 1, 3, 12, 81, 138, 1, 3, 82, 28, 136, 1, 3, 136, 81, 82, 1,
+ 3, 136, 27, 134, 1, 3, 134, 81, 136, 1, 3, 134, 39, 138, 1, 3, 138, 81, 134, 1,
+ 3, 15, 139, 94, 1, 3, 15, 94, 95, 1, 3, 40, 140, 94, 1, 3, 40, 94, 139, 1,
+ 3, 27, 136, 94, 1, 3, 27, 94, 140, 1, 3, 136, 28, 95, 1, 3, 95, 94, 136, 1,
+ 3, 19, 130, 129, 1, 3, 19, 129, 141, 1, 3, 130, 36, 135, 1, 3, 135, 129, 130, 1,
+ 3, 27, 140, 129, 1, 3, 27, 129, 135, 1, 3, 40, 141, 129, 1, 3, 40, 129, 140, 1,
+ 3, 14, 114, 89, 1, 3, 14, 89, 90, 1, 3, 114, 33, 142, 1, 3, 142, 89, 114, 1,
+ 3, 25, 143, 89, 1, 3, 25, 89, 142, 1, 3, 143, 26, 90, 1, 3, 90, 89, 143, 1,
+ 3, 17, 131, 109, 1, 3, 17, 109, 110, 1, 3, 131, 37, 144, 1, 3, 144, 109, 131, 1,
+ 3, 25, 142, 109, 1, 3, 25, 109, 144, 1, 3, 142, 33, 110, 1, 3, 110, 109, 142, 1,
+ 3, 19, 141, 126, 1, 3, 19, 126, 127, 1, 3, 141, 40, 145, 1, 3, 145, 126, 141, 1,
+ 3, 25, 144, 126, 1, 3, 25, 126, 145, 1, 3, 144, 37, 127, 1, 3, 127, 126, 144, 1,
+ 3, 15, 97, 96, 1, 3, 15, 96, 139, 1, 3, 97, 26, 143, 1, 3, 143, 96, 97, 1,
+3, 25, 145, 96, 1, 3, 25, 96, 143, 1, 3, 145, 40, 139, 1, 3, 139, 96, 145, 1,
+ 3, 76, 12, 146, 1, 3, 146, 75, 76, 1, 3, 41, 148, 75, 1, 3, 41, 75, 146, 1,
+ 3, 148, 21, 149, 1, 3, 149, 75, 148, 1, 3, 22, 76, 75, 1, 3, 22, 75, 149, 1,
+3, 8, 151, 147, 1, 3, 8, 147, 155, 1, 3, 151, 43, 153, 1, 3, 153, 147, 151, 1,
+ 3, 21, 148, 147, 1, 3, 21, 147, 153, 1, 3, 148, 41, 155, 1, 3, 155, 147, 148, 1,
+ 3, 11, 157, 152, 1, 3, 11, 152, 160, 1, 3, 157, 44, 158, 1, 3, 158, 152, 157, 1,
+ 3, 21, 153, 152, 1, 3, 21, 152, 158, 1, 3, 153, 43, 160, 1, 3, 160, 152, 153, 1,
+ 3, 161, 13, 88, 1, 3, 88, 87, 161, 1, 3, 22, 149, 87, 1, 3, 22, 87, 88, 1,
+3, 149, 21, 158, 1, 3, 158, 87, 149, 1, 3, 44, 161, 87, 1, 3, 44, 87, 158, 1,
+ 3, 133, 18, 162, 1, 3, 162, 132, 133, 1, 3, 45, 164, 132, 1, 3, 45, 132, 162, 1,
+ 3, 164, 38, 165, 1, 3, 165, 132, 164, 1, 3, 39, 133, 132, 1, 3, 39, 132, 165, 1,
+3, 9, 167, 163, 1, 3, 9, 163, 170, 1, 3, 167, 47, 168, 1, 3, 168, 163, 167, 1,
+ 3, 38, 164, 163, 1, 3, 38, 163, 168, 1, 3, 164, 45, 170, 1, 3, 170, 163, 164, 1,
+3, 8, 155, 154, 1, 3, 8, 154, 173, 1, 3, 155, 41, 171, 1, 3, 171, 154, 155, 1,
+ 3, 38, 168, 154, 1, 3, 38, 154, 171, 1, 3, 168, 47, 173, 1, 3, 173, 154, 168, 1,
+ 3, 146, 12, 138, 1, 3, 138, 137, 146, 1, 3, 39, 165, 137, 1, 3, 39, 137, 138, 1,
+ 3, 165, 38, 171, 1, 3, 171, 137, 165, 1, 3, 41, 146, 137, 1, 3, 41, 137, 171, 1,
+ 3, 177, 16, 108, 1, 3, 108, 107, 177, 1, 3, 30, 174, 107, 1, 3, 30, 107, 108, 1,
+ 3, 174, 29, 176, 1, 3, 176, 107, 174, 1, 3, 50, 177, 107, 1, 3, 50, 107, 176, 1,
+ 3, 99, 13, 161, 1, 3, 161, 98, 99, 1, 3, 44, 178, 98, 1, 3, 44, 98, 161, 1,
+ 3, 178, 29, 174, 1, 3, 174, 98, 178, 1, 3, 30, 99, 98, 1, 3, 30, 98, 174, 1,
+ 3, 11, 180, 156, 1, 3, 11, 156, 157, 1, 3, 180, 49, 181, 1, 3, 181, 156, 180, 1,
+ 3, 29, 178, 156, 1, 3, 29, 156, 181, 1, 3, 178, 44, 157, 1, 3, 157, 156, 178, 1,
+ 3, 10, 183, 175, 1, 3, 10, 175, 185, 1, 3, 183, 50, 176, 1, 3, 176, 175, 183, 1,
+ 3, 29, 181, 175, 1, 3, 29, 175, 176, 1, 3, 181, 49, 185, 1, 3, 185, 175, 181, 1,
+ 3, 162, 18, 125, 1, 3, 125, 124, 162, 1, 3, 35, 186, 124, 1, 3, 35, 124, 125, 1,
+ 3, 186, 34, 187, 1, 3, 187, 124, 186, 1, 3, 45, 162, 124, 1, 3, 45, 124, 187, 1,
+ 3, 116, 16, 177, 1, 3, 177, 115, 116, 1, 3, 50, 188, 115, 1, 3, 50, 115, 177, 1,
+ 3, 188, 34, 186, 1, 3, 186, 115, 188, 1, 3, 35, 116, 115, 1, 3, 35, 115, 186, 1,
+ 3, 10, 190, 182, 1, 3, 10, 182, 183, 1, 3, 190, 52, 191, 1, 3, 191, 182, 190, 1,
+ 3, 34, 188, 182, 1, 3, 34, 182, 191, 1, 3, 188, 50, 183, 1, 3, 183, 182, 188, 1,
+3, 9, 170, 169, 1, 3, 9, 169, 193, 1, 3, 170, 45, 187, 1, 3, 187, 169, 170, 1,
+ 3, 34, 191, 169, 1, 3, 34, 169, 187, 1, 3, 191, 52, 193, 1, 3, 193, 169, 191, 1,
+ 3, 201, 1, 196, 1, 3, 196, 194, 201, 1, 3, 54, 198, 194, 1, 3, 54, 194, 196, 1,
+ 3, 198, 46, 199, 1, 3, 199, 194, 198, 1, 3, 56, 201, 194, 1, 3, 56, 194, 199, 1,
+ 3, 206, 3, 203, 1, 3, 203, 197, 206, 1, 3, 55, 204, 197, 1, 3, 55, 197, 203, 1,
+ 3, 204, 46, 198, 1, 3, 198, 197, 204, 1, 3, 54, 206, 197, 1, 3, 54, 197, 198, 1,
+3, 8, 173, 172, 1, 3, 8, 172, 208, 1, 3, 173, 47, 207, 1, 3, 207, 172, 173, 1,
+ 3, 46, 204, 172, 1, 3, 46, 172, 207, 1, 3, 204, 55, 208, 1, 3, 208, 172, 204, 1,
+3, 9, 209, 166, 1, 3, 9, 166, 167, 1, 3, 209, 56, 199, 1, 3, 199, 166, 209, 1,
+ 3, 46, 207, 166, 1, 3, 46, 166, 199, 1, 3, 207, 47, 167, 1, 3, 167, 166, 207, 1,
+ 3, 214, 1, 201, 1, 3, 201, 200, 214, 1, 3, 56, 210, 200, 1, 3, 56, 200, 201, 1,
+ 3, 210, 51, 212, 1, 3, 212, 200, 210, 1, 3, 59, 214, 200, 1, 3, 59, 200, 212, 1,
+3, 9, 193, 192, 1, 3, 9, 192, 209, 1, 3, 193, 52, 215, 1, 3, 215, 192, 193, 1,
+ 3, 51, 210, 192, 1, 3, 51, 192, 215, 1, 3, 210, 56, 209, 1, 3, 209, 192, 210, 1,
+ 3, 10, 216, 189, 1, 3, 10, 189, 190, 1, 3, 216, 57, 217, 1, 3, 217, 189, 216, 1,
+ 3, 51, 215, 189, 1, 3, 51, 189, 217, 1, 3, 215, 52, 190, 1, 3, 190, 189, 215, 1,
+ 3, 221, 0, 219, 1, 3, 219, 211, 221, 1, 3, 59, 212, 211, 1, 3, 59, 211, 219, 1,
+ 3, 212, 51, 217, 1, 3, 217, 211, 212, 1, 3, 57, 221, 211, 1, 3, 57, 211, 217, 1,
+ 3, 226, 0, 221, 1, 3, 221, 220, 226, 1, 3, 57, 222, 220, 1, 3, 57, 220, 221, 1,
+ 3, 222, 48, 224, 1, 3, 224, 220, 222, 1, 3, 62, 226, 220, 1, 3, 62, 220, 224, 1,
+ 3, 10, 185, 184, 1, 3, 10, 184, 216, 1, 3, 185, 49, 227, 1, 3, 227, 184, 185, 1,
+ 3, 48, 222, 184, 1, 3, 48, 184, 227, 1, 3, 222, 57, 216, 1, 3, 216, 184, 222, 1,
+ 3, 11, 228, 179, 1, 3, 11, 179, 180, 1, 3, 228, 60, 229, 1, 3, 229, 179, 228, 1,
+ 3, 48, 227, 179, 1, 3, 48, 179, 229, 1, 3, 227, 49, 180, 1, 3, 180, 179, 227, 1,
+ 3, 233, 2, 231, 1, 3, 231, 223, 233, 1, 3, 62, 224, 223, 1, 3, 62, 223, 231, 1,
+ 3, 224, 48, 229, 1, 3, 229, 223, 224, 1, 3, 60, 233, 223, 1, 3, 60, 223, 229, 1,
+ 3, 237, 2, 233, 1, 3, 233, 232, 237, 1, 3, 60, 234, 232, 1, 3, 60, 232, 233, 1,
+ 3, 234, 42, 235, 1, 3, 235, 232, 234, 1, 3, 64, 237, 232, 1, 3, 64, 232, 235, 1,
+ 3, 11, 160, 159, 1, 3, 11, 159, 228, 1, 3, 160, 43, 238, 1, 3, 238, 159, 160, 1,
+ 3, 42, 234, 159, 1, 3, 42, 159, 238, 1, 3, 234, 60, 228, 1, 3, 228, 159, 234, 1,
+3, 8, 208, 150, 1, 3, 8, 150, 151, 1, 3, 208, 55, 239, 1, 3, 239, 150, 208, 1,
+ 3, 42, 238, 150, 1, 3, 42, 150, 239, 1, 3, 238, 43, 151, 1, 3, 151, 150, 238, 1,
+ 3, 203, 3, 241, 1, 3, 241, 202, 203, 1, 3, 64, 235, 202, 1, 3, 64, 202, 241, 1,
+ 3, 235, 42, 239, 1, 3, 239, 202, 235, 1, 3, 55, 203, 202, 1, 3, 55, 202, 239, 1,
+3, 2, 237, 236, 1, 3, 2, 236, 245, 1, 3, 237, 64, 242, 1, 3, 242, 236, 237, 1,
+ 3, 242, 63, 244, 1, 3, 244, 236, 242, 1, 3, 244, 68, 245, 1, 3, 245, 236, 244, 1,
+3, 3, 246, 240, 1, 3, 3, 240, 241, 1, 3, 246, 65, 248, 1, 3, 248, 240, 246, 1,
+ 3, 248, 63, 242, 1, 3, 242, 240, 248, 1, 3, 242, 64, 241, 1, 3, 241, 240, 242, 1,
+3, 4, 250, 247, 1, 3, 4, 247, 253, 1, 3, 67, 251, 247, 1, 3, 67, 247, 250, 1,
+ 3, 63, 248, 247, 1, 3, 63, 247, 251, 1, 3, 248, 65, 253, 1, 3, 253, 247, 248, 1,
+3, 7, 255, 243, 1, 3, 7, 243, 257, 1, 3, 255, 68, 244, 1, 3, 244, 243, 255, 1,
+ 3, 63, 251, 243, 1, 3, 63, 243, 244, 1, 3, 67, 257, 243, 1, 3, 67, 243, 251, 1,
+3, 3, 206, 205, 1, 3, 3, 205, 246, 1, 3, 206, 54, 258, 1, 3, 258, 205, 206, 1,
+ 3, 258, 53, 259, 1, 3, 259, 205, 258, 1, 3, 259, 65, 246, 1, 3, 246, 205, 259, 1,
+3, 1, 260, 195, 1, 3, 1, 195, 196, 1, 3, 260, 69, 262, 1, 3, 262, 195, 260, 1,
+ 3, 262, 53, 258, 1, 3, 258, 195, 262, 1, 3, 258, 54, 196, 1, 3, 196, 195, 258, 1,
+3, 5, 264, 261, 1, 3, 5, 261, 267, 1, 3, 70, 265, 261, 1, 3, 70, 261, 264, 1,
+ 3, 53, 262, 261, 1, 3, 53, 261, 265, 1, 3, 262, 69, 267, 1, 3, 267, 261, 262, 1,
+3, 4, 253, 252, 1, 3, 4, 252, 268, 1, 3, 253, 65, 259, 1, 3, 259, 252, 253, 1,
+ 3, 53, 265, 252, 1, 3, 53, 252, 259, 1, 3, 70, 268, 252, 1, 3, 70, 252, 265, 1,
+3, 1, 214, 213, 1, 3, 1, 213, 260, 1, 3, 214, 59, 269, 1, 3, 269, 213, 214, 1,
+ 3, 269, 58, 270, 1, 3, 270, 213, 269, 1, 3, 270, 69, 260, 1, 3, 260, 213, 270, 1,
+3, 0, 271, 218, 1, 3, 0, 218, 219, 1, 3, 271, 71, 273, 1, 3, 273, 218, 271, 1,
+ 3, 273, 58, 269, 1, 3, 269, 218, 273, 1, 3, 269, 59, 219, 1, 3, 219, 218, 269, 1,
+3, 6, 275, 272, 1, 3, 6, 272, 278, 1, 3, 72, 276, 272, 1, 3, 72, 272, 275, 1,
+ 3, 58, 273, 272, 1, 3, 58, 272, 276, 1, 3, 273, 71, 278, 1, 3, 278, 272, 273, 1,
+3, 5, 267, 266, 1, 3, 5, 266, 279, 1, 3, 267, 69, 270, 1, 3, 270, 266, 267, 1,
+ 3, 58, 276, 266, 1, 3, 58, 266, 270, 1, 3, 72, 279, 266, 1, 3, 72, 266, 276, 1,
+3, 0, 226, 225, 1, 3, 0, 225, 271, 1, 3, 226, 62, 280, 1, 3, 280, 225, 226, 1,
+ 3, 280, 61, 281, 1, 3, 281, 225, 280, 1, 3, 281, 71, 271, 1, 3, 271, 225, 281, 1,
+3, 2, 245, 230, 1, 3, 2, 230, 231, 1, 3, 245, 68, 282, 1, 3, 282, 230, 245, 1,
+ 3, 282, 61, 280, 1, 3, 280, 230, 282, 1, 3, 280, 62, 231, 1, 3, 231, 230, 280, 1,
+3, 7, 283, 254, 1, 3, 7, 254, 255, 1, 3, 73, 284, 254, 1, 3, 73, 254, 283, 1,
+ 3, 61, 282, 254, 1, 3, 61, 254, 284, 1, 3, 282, 68, 255, 1, 3, 255, 254, 282, 1,
+3, 6, 278, 277, 1, 3, 6, 277, 285, 1, 3, 278, 71, 281, 1, 3, 281, 277, 278, 1,
+ 3, 61, 284, 277, 1, 3, 61, 277, 281, 1, 3, 73, 285, 277, 1, 3, 73, 277, 284, 1,
+3, 4, 268, 249, 1, 3, 4, 249, 250, 1, 3, 268, 70, 286, 1, 3, 286, 249, 268, 1,
+ 3, 66, 287, 249, 1, 3, 66, 249, 286, 1, 3, 287, 67, 250, 1, 3, 250, 249, 287, 1,
+3, 5, 279, 263, 1, 3, 5, 263, 264, 1, 3, 279, 72, 288, 1, 3, 288, 263, 279, 1,
+ 3, 66, 286, 263, 1, 3, 66, 263, 288, 1, 3, 286, 70, 264, 1, 3, 264, 263, 286, 1,
+3, 6, 285, 274, 1, 3, 6, 274, 275, 1, 3, 285, 73, 289, 1, 3, 289, 274, 285, 1,
+ 3, 66, 288, 274, 1, 3, 66, 274, 289, 1, 3, 288, 72, 275, 1, 3, 275, 274, 288, 1,
+3, 7, 257, 256, 1, 3, 7, 256, 283, 1, 3, 257, 67, 287, 1, 3, 287, 256, 257, 1,
+ 3, 66, 289, 256, 1, 3, 66, 256, 287, 1, 3, 289, 73, 283, 1, 3, 283, 256, 289, 1,
+
+ 0
+};
+
+struct lwo LWO_s1_1 =
+{
+ 290, /* number of points */
+ s1_1_PNTS, s1_1_normals, s1_1_POLS, 0L
+};
+
+#endif /* USE_GL */
+
+/* End of s1_1.c */
--- /dev/null
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)s1_2.c 4.2 97/04/20 xlockmore";
+
+#endif
+
+/*-
+ * Points, polygons, and normal vectors to render "s1_2" in 3D.
+ *
+ * Generated by lw2ogl. Link this with your program but do
+ * not edit by hand.
+ */
+
+#include "xlock.h"
+
+#ifdef USE_GL
+
+#include <GL/gl.h>
+#include "glx/buildlwo.h"
+
+GLfloat s1_2_PNTS[] =
+{
+ (GLfloat) 0.316229, (GLfloat) 0.114342, (GLfloat) - 0.309219,
+ (GLfloat) 0.316229, (GLfloat) 0.114342, (GLfloat) - 0.690781,
+ (GLfloat) 0.697100, (GLfloat) 0.103031, (GLfloat) - 0.309219,
+ (GLfloat) 0.697100, (GLfloat) 0.103031, (GLfloat) - 0.690781,
+ (GLfloat) 0.638667, (GLfloat) 0.007537, (GLfloat) - 0.638667,
+ (GLfloat) 0.361333, (GLfloat) 0.007537, (GLfloat) - 0.638667,
+ (GLfloat) 0.361333, (GLfloat) 0.007537, (GLfloat) - 0.361333,
+ (GLfloat) 0.638667, (GLfloat) 0.007537, (GLfloat) - 0.361333,
+ (GLfloat) 0.813840, (GLfloat) 0.310563, (GLfloat) - 0.755750,
+ (GLfloat) 0.308193, (GLfloat) 0.377118, (GLfloat) - 0.755750,
+ (GLfloat) 0.308193, (GLfloat) 0.377118, (GLfloat) - 0.244250,
+ (GLfloat) 0.813840, (GLfloat) 0.310563, (GLfloat) - 0.244250,
+ (GLfloat) 0.865458, (GLfloat) 0.513412, (GLfloat) - 0.690781,
+ (GLfloat) 0.865458, (GLfloat) 0.513412, (GLfloat) - 0.309219,
+ (GLfloat) 0.858509, (GLfloat) 0.615264, (GLfloat) - 0.361333,
+ (GLfloat) 0.858509, (GLfloat) 0.615264, (GLfloat) - 0.638667,
+ (GLfloat) 0.500319, (GLfloat) 0.618731, (GLfloat) - 0.309219,
+ (GLfloat) 0.596285, (GLfloat) 0.705555, (GLfloat) - 0.361333,
+ (GLfloat) 0.500319, (GLfloat) 0.618731, (GLfloat) - 0.690781,
+ (GLfloat) 0.596285, (GLfloat) 0.705555, (GLfloat) - 0.638667,
+ (GLfloat) 0.945338, (GLfloat) 0.554869, (GLfloat) - 0.500000,
+ (GLfloat) 0.927845, (GLfloat) 0.404808, (GLfloat) - 0.500000,
+ (GLfloat) 0.931847, (GLfloat) 0.494263, (GLfloat) - 0.500000,
+ (GLfloat) 0.716506, (GLfloat) 0.632271, (GLfloat) - 0.258297,
+ (GLfloat) 0.883750, (GLfloat) 0.575062, (GLfloat) - 0.323141,
+ (GLfloat) 0.733407, (GLfloat) 0.677865, (GLfloat) - 0.500000,
+ (GLfloat) 0.897467, (GLfloat) 0.608935, (GLfloat) - 0.500000,
+ (GLfloat) 0.716506, (GLfloat) 0.632271, (GLfloat) - 0.741703,
+ (GLfloat) 0.883750, (GLfloat) 0.575062, (GLfloat) - 0.676859,
+ (GLfloat) 0.622584, (GLfloat) 0.465571, (GLfloat) - 0.187109,
+ (GLfloat) 0.682889, (GLfloat) 0.566071, (GLfloat) - 0.239844,
+ (GLfloat) 0.487673, (GLfloat) 0.709673, (GLfloat) - 0.500000,
+ (GLfloat) 0.548866, (GLfloat) 0.688331, (GLfloat) - 0.323141,
+ (GLfloat) 0.729578, (GLfloat) 0.666743, (GLfloat) - 0.322437,
+ (GLfloat) 0.317323, (GLfloat) 0.526334, (GLfloat) - 0.500000,
+ (GLfloat) 0.433930, (GLfloat) 0.637880, (GLfloat) - 0.500000,
+ (GLfloat) 0.548866, (GLfloat) 0.688331, (GLfloat) - 0.676859,
+ (GLfloat) 0.561689, (GLfloat) 0.724552, (GLfloat) - 0.500000,
+ (GLfloat) 0.622584, (GLfloat) 0.465571, (GLfloat) - 0.812891,
+ (GLfloat) 0.682889, (GLfloat) 0.566071, (GLfloat) - 0.760156,
+ (GLfloat) 0.729578, (GLfloat) 0.666743, (GLfloat) - 0.677562,
+ (GLfloat) 0.846442, (GLfloat) 0.421012, (GLfloat) - 0.729453,
+ (GLfloat) 0.835067, (GLfloat) 0.192357, (GLfloat) - 0.500000,
+ (GLfloat) 0.905776, (GLfloat) 0.298462, (GLfloat) - 0.500000,
+ (GLfloat) 0.846442, (GLfloat) 0.421012, (GLfloat) - 0.270547,
+ (GLfloat) 0.398726, (GLfloat) 0.510130, (GLfloat) - 0.729453,
+ (GLfloat) 0.523830, (GLfloat) 0.217409, (GLfloat) - 0.812891,
+ (GLfloat) 0.561017, (GLfloat) 0.343841, (GLfloat) - 0.848750,
+ (GLfloat) 0.523830, (GLfloat) 0.217409, (GLfloat) - 0.187109,
+ (GLfloat) 0.561017, (GLfloat) 0.343841, (GLfloat) - 0.151250,
+ (GLfloat) 0.398726, (GLfloat) 0.510130, (GLfloat) - 0.270547,
+ (GLfloat) 0.212593, (GLfloat) 0.242461, (GLfloat) - 0.500000,
+ (GLfloat) 0.216258, (GLfloat) 0.389219, (GLfloat) - 0.500000,
+ (GLfloat) 0.500666, (GLfloat) 0.037435, (GLfloat) - 0.741703,
+ (GLfloat) 0.506665, (GLfloat) 0.108686, (GLfloat) - 0.760156,
+ (GLfloat) 0.752070, (GLfloat) 0.199038, (GLfloat) - 0.729453,
+ (GLfloat) 0.295589, (GLfloat) 0.235781, (GLfloat) - 0.729453,
+ (GLfloat) 0.295589, (GLfloat) 0.235781, (GLfloat) - 0.270547,
+ (GLfloat) 0.259010, (GLfloat) 0.038206, (GLfloat) - 0.500000,
+ (GLfloat) 0.246980, (GLfloat) 0.116398, (GLfloat) - 0.500000,
+ (GLfloat) 0.752070, (GLfloat) 0.199038, (GLfloat) - 0.270547,
+ (GLfloat) 0.500666, (GLfloat) 0.037435, (GLfloat) - 0.258297,
+ (GLfloat) 0.506665, (GLfloat) 0.108686, (GLfloat) - 0.239844,
+ (GLfloat) 0.742322, (GLfloat) 0.036664, (GLfloat) - 0.500000,
+ (GLfloat) 0.766349, (GLfloat) 0.100974, (GLfloat) - 0.500000,
+ (GLfloat) 0.677491, (GLfloat) 0.037477, (GLfloat) - 0.676859,
+ (GLfloat) 0.500000, (GLfloat) - 0.010924, (GLfloat) - 0.500000,
+ (GLfloat) 0.677562, (GLfloat) 0.000839, (GLfloat) - 0.500000,
+ (GLfloat) 0.677491, (GLfloat) 0.037477, (GLfloat) - 0.323141,
+ (GLfloat) 0.323842, (GLfloat) 0.038608, (GLfloat) - 0.676859,
+ (GLfloat) 0.500000, (GLfloat) 0.000839, (GLfloat) - 0.677562,
+ (GLfloat) 0.323842, (GLfloat) 0.038608, (GLfloat) - 0.323141,
+ (GLfloat) 0.322437, (GLfloat) 0.000839, (GLfloat) - 0.500000,
+ (GLfloat) 0.500000, (GLfloat) 0.000839, (GLfloat) - 0.322437,
+ (GLfloat) 0.925000, (GLfloat) 0.532253, (GLfloat) - 0.600125,
+ (GLfloat) 0.911045, (GLfloat) 0.457192, (GLfloat) - 0.613625,
+ (GLfloat) 0.915250, (GLfloat) 0.499050, (GLfloat) - 0.604062,
+ (GLfloat) 0.925000, (GLfloat) 0.532253, (GLfloat) - 0.399875,
+ (GLfloat) 0.940858, (GLfloat) 0.527164, (GLfloat) - 0.500000,
+ (GLfloat) 0.919197, (GLfloat) 0.584697, (GLfloat) - 0.587500,
+ (GLfloat) 0.929810, (GLfloat) 0.559801, (GLfloat) - 0.596406,
+ (GLfloat) 0.798138, (GLfloat) 0.572966, (GLfloat) - 0.733625,
+ (GLfloat) 0.877427, (GLfloat) 0.547520, (GLfloat) - 0.683563,
+ (GLfloat) 0.798138, (GLfloat) 0.572966, (GLfloat) - 0.266375,
+ (GLfloat) 0.877427, (GLfloat) 0.547520, (GLfloat) - 0.316437,
+ (GLfloat) 0.919197, (GLfloat) 0.584697, (GLfloat) - 0.412500,
+ (GLfloat) 0.929810, (GLfloat) 0.559801, (GLfloat) - 0.403594,
+ (GLfloat) 0.911045, (GLfloat) 0.457192, (GLfloat) - 0.386375,
+ (GLfloat) 0.915250, (GLfloat) 0.499050, (GLfloat) - 0.395938,
+ (GLfloat) 0.817112, (GLfloat) 0.642984, (GLfloat) - 0.409500,
+ (GLfloat) 0.884513, (GLfloat) 0.611054, (GLfloat) - 0.417500,
+ (GLfloat) 0.934249, (GLfloat) 0.580800, (GLfloat) - 0.500000,
+ (GLfloat) 0.807153, (GLfloat) 0.623277, (GLfloat) - 0.294000,
+ (GLfloat) 0.876135, (GLfloat) 0.598240, (GLfloat) - 0.339125,
+ (GLfloat) 0.807153, (GLfloat) 0.623277, (GLfloat) - 0.706000,
+ (GLfloat) 0.876135, (GLfloat) 0.598240, (GLfloat) - 0.660875,
+ (GLfloat) 0.817112, (GLfloat) 0.642984, (GLfloat) - 0.590500,
+ (GLfloat) 0.884513, (GLfloat) 0.611054, (GLfloat) - 0.582500,
+ (GLfloat) 0.764624, (GLfloat) 0.492766, (GLfloat) - 0.234875,
+ (GLfloat) 0.782472, (GLfloat) 0.537348, (GLfloat) - 0.257187,
+ (GLfloat) 0.607846, (GLfloat) 0.634036, (GLfloat) - 0.266375,
+ (GLfloat) 0.702992, (GLfloat) 0.603501, (GLfloat) - 0.249687,
+ (GLfloat) 0.807680, (GLfloat) 0.601112, (GLfloat) - 0.274594,
+ (GLfloat) 0.480984, (GLfloat) 0.674750, (GLfloat) - 0.399875,
+ (GLfloat) 0.528557, (GLfloat) 0.659482, (GLfloat) - 0.316437,
+ (GLfloat) 0.641688, (GLfloat) 0.680252, (GLfloat) - 0.294000,
+ (GLfloat) 0.625134, (GLfloat) 0.662855, (GLfloat) - 0.274594,
+ (GLfloat) 0.544994, (GLfloat) 0.546127, (GLfloat) - 0.234875,
+ (GLfloat) 0.583305, (GLfloat) 0.594795, (GLfloat) - 0.257187,
+ (GLfloat) 0.645973, (GLfloat) 0.701912, (GLfloat) - 0.409500,
+ (GLfloat) 0.650852, (GLfloat) 0.691510, (GLfloat) - 0.335375,
+ (GLfloat) 0.724816, (GLfloat) 0.652913, (GLfloat) - 0.278500,
+ (GLfloat) 0.529644, (GLfloat) 0.718831, (GLfloat) - 0.412500,
+ (GLfloat) 0.571915, (GLfloat) 0.702991, (GLfloat) - 0.339125,
+ (GLfloat) 0.806863, (GLfloat) 0.637791, (GLfloat) - 0.335375,
+ (GLfloat) 0.398573, (GLfloat) 0.581701, (GLfloat) - 0.386375,
+ (GLfloat) 0.450527, (GLfloat) 0.633092, (GLfloat) - 0.395938,
+ (GLfloat) 0.480984, (GLfloat) 0.674750, (GLfloat) - 0.600125,
+ (GLfloat) 0.465127, (GLfloat) 0.679839, (GLfloat) - 0.500000,
+ (GLfloat) 0.503003, (GLfloat) 0.704166, (GLfloat) - 0.403594,
+ (GLfloat) 0.607846, (GLfloat) 0.634036, (GLfloat) - 0.733625,
+ (GLfloat) 0.528557, (GLfloat) 0.659482, (GLfloat) - 0.683563,
+ (GLfloat) 0.529644, (GLfloat) 0.718831, (GLfloat) - 0.587500,
+ (GLfloat) 0.503003, (GLfloat) 0.704166, (GLfloat) - 0.596406,
+ (GLfloat) 0.398573, (GLfloat) 0.581701, (GLfloat) - 0.613625,
+ (GLfloat) 0.450527, (GLfloat) 0.633092, (GLfloat) - 0.604062,
+ (GLfloat) 0.645973, (GLfloat) 0.701912, (GLfloat) - 0.590500,
+ (GLfloat) 0.573201, (GLfloat) 0.718247, (GLfloat) - 0.582500,
+ (GLfloat) 0.515384, (GLfloat) 0.725027, (GLfloat) - 0.500000,
+ (GLfloat) 0.641688, (GLfloat) 0.680252, (GLfloat) - 0.706000,
+ (GLfloat) 0.571915, (GLfloat) 0.702991, (GLfloat) - 0.660875,
+ (GLfloat) 0.573201, (GLfloat) 0.718247, (GLfloat) - 0.417500,
+ (GLfloat) 0.544994, (GLfloat) 0.546127, (GLfloat) - 0.765125,
+ (GLfloat) 0.583305, (GLfloat) 0.594795, (GLfloat) - 0.742813,
+ (GLfloat) 0.702992, (GLfloat) 0.603501, (GLfloat) - 0.750313,
+ (GLfloat) 0.625134, (GLfloat) 0.662855, (GLfloat) - 0.725406,
+ (GLfloat) 0.807680, (GLfloat) 0.601112, (GLfloat) - 0.725406,
+ (GLfloat) 0.764624, (GLfloat) 0.492766, (GLfloat) - 0.765125,
+ (GLfloat) 0.782472, (GLfloat) 0.537348, (GLfloat) - 0.742813,
+ (GLfloat) 0.806863, (GLfloat) 0.637791, (GLfloat) - 0.664625,
+ (GLfloat) 0.724816, (GLfloat) 0.652913, (GLfloat) - 0.721500,
+ (GLfloat) 0.650852, (GLfloat) 0.691510, (GLfloat) - 0.664625,
+ (GLfloat) 0.732447, (GLfloat) 0.675074, (GLfloat) - 0.402250,
+ (GLfloat) 0.824871, (GLfloat) 0.643250, (GLfloat) - 0.500000,
+ (GLfloat) 0.640022, (GLfloat) 0.706898, (GLfloat) - 0.500000,
+ (GLfloat) 0.732447, (GLfloat) 0.675074, (GLfloat) - 0.597750,
+ (GLfloat) 0.856137, (GLfloat) 0.470533, (GLfloat) - 0.708313,
+ (GLfloat) 0.899707, (GLfloat) 0.356231, (GLfloat) - 0.635000,
+ (GLfloat) 0.907494, (GLfloat) 0.408859, (GLfloat) - 0.625156,
+ (GLfloat) 0.929348, (GLfloat) 0.452746, (GLfloat) - 0.500000,
+ (GLfloat) 0.851860, (GLfloat) 0.246808, (GLfloat) - 0.635000,
+ (GLfloat) 0.882792, (GLfloat) 0.301487, (GLfloat) - 0.639500,
+ (GLfloat) 0.899707, (GLfloat) 0.356231, (GLfloat) - 0.365000,
+ (GLfloat) 0.921826, (GLfloat) 0.352648, (GLfloat) - 0.500000,
+ (GLfloat) 0.722756, (GLfloat) 0.384892, (GLfloat) - 0.815000,
+ (GLfloat) 0.833350, (GLfloat) 0.366979, (GLfloat) - 0.747500,
+ (GLfloat) 0.722756, (GLfloat) 0.384892, (GLfloat) - 0.185000,
+ (GLfloat) 0.833350, (GLfloat) 0.366979, (GLfloat) - 0.252500,
+ (GLfloat) 0.907494, (GLfloat) 0.408859, (GLfloat) - 0.374844,
+ (GLfloat) 0.851860, (GLfloat) 0.246808, (GLfloat) - 0.365000,
+ (GLfloat) 0.882792, (GLfloat) 0.301487, (GLfloat) - 0.360500,
+ (GLfloat) 0.856137, (GLfloat) 0.470533, (GLfloat) - 0.291687,
+ (GLfloat) 0.453481, (GLfloat) 0.568361, (GLfloat) - 0.708313,
+ (GLfloat) 0.457330, (GLfloat) 0.427884, (GLfloat) - 0.815000,
+ (GLfloat) 0.500479, (GLfloat) 0.489876, (GLfloat) - 0.792031,
+ (GLfloat) 0.654809, (GLfloat) 0.519447, (GLfloat) - 0.784063,
+ (GLfloat) 0.405397, (GLfloat) 0.294044, (GLfloat) - 0.815000,
+ (GLfloat) 0.423113, (GLfloat) 0.361992, (GLfloat) - 0.825500,
+ (GLfloat) 0.590043, (GLfloat) 0.406388, (GLfloat) - 0.837500,
+ (GLfloat) 0.280379, (GLfloat) 0.456545, (GLfloat) - 0.635000,
+ (GLfloat) 0.346736, (GLfloat) 0.445797, (GLfloat) - 0.747500,
+ (GLfloat) 0.744688, (GLfloat) 0.441266, (GLfloat) - 0.792031,
+ (GLfloat) 0.673275, (GLfloat) 0.265703, (GLfloat) - 0.815000,
+ (GLfloat) 0.698920, (GLfloat) 0.325689, (GLfloat) - 0.825500,
+ (GLfloat) 0.654809, (GLfloat) 0.519447, (GLfloat) - 0.215937,
+ (GLfloat) 0.457330, (GLfloat) 0.427884, (GLfloat) - 0.185000,
+ (GLfloat) 0.500479, (GLfloat) 0.489876, (GLfloat) - 0.207969,
+ (GLfloat) 0.453481, (GLfloat) 0.568361, (GLfloat) - 0.291687,
+ (GLfloat) 0.744688, (GLfloat) 0.441266, (GLfloat) - 0.207969,
+ (GLfloat) 0.673275, (GLfloat) 0.265703, (GLfloat) - 0.185000,
+ (GLfloat) 0.698920, (GLfloat) 0.325689, (GLfloat) - 0.174500,
+ (GLfloat) 0.590043, (GLfloat) 0.406388, (GLfloat) - 0.162500,
+ (GLfloat) 0.280379, (GLfloat) 0.456545, (GLfloat) - 0.365000,
+ (GLfloat) 0.346736, (GLfloat) 0.445797, (GLfloat) - 0.252500,
+ (GLfloat) 0.405397, (GLfloat) 0.294044, (GLfloat) - 0.185000,
+ (GLfloat) 0.423113, (GLfloat) 0.361992, (GLfloat) - 0.174500,
+ (GLfloat) 0.380271, (GLfloat) 0.586148, (GLfloat) - 0.500000,
+ (GLfloat) 0.337674, (GLfloat) 0.522283, (GLfloat) - 0.625156,
+ (GLfloat) 0.337674, (GLfloat) 0.522283, (GLfloat) - 0.374844,
+ (GLfloat) 0.226812, (GLfloat) 0.312938, (GLfloat) - 0.365000,
+ (GLfloat) 0.239242, (GLfloat) 0.386194, (GLfloat) - 0.360500,
+ (GLfloat) 0.258260, (GLfloat) 0.460127, (GLfloat) - 0.500000,
+ (GLfloat) 0.226812, (GLfloat) 0.312938, (GLfloat) - 0.635000,
+ (GLfloat) 0.239242, (GLfloat) 0.386194, (GLfloat) - 0.639500,
+ (GLfloat) 0.400082, (GLfloat) 0.165542, (GLfloat) - 0.765125,
+ (GLfloat) 0.402616, (GLfloat) 0.069508, (GLfloat) - 0.733625,
+ (GLfloat) 0.402791, (GLfloat) 0.111771, (GLfloat) - 0.742813,
+ (GLfloat) 0.626577, (GLfloat) 0.153203, (GLfloat) - 0.765125,
+ (GLfloat) 0.513329, (GLfloat) 0.159372, (GLfloat) - 0.784063,
+ (GLfloat) 0.399335, (GLfloat) 0.227430, (GLfloat) - 0.792031,
+ (GLfloat) 0.249085, (GLfloat) 0.173768, (GLfloat) - 0.613625,
+ (GLfloat) 0.305709, (GLfloat) 0.170683, (GLfloat) - 0.708313,
+ (GLfloat) 0.777574, (GLfloat) 0.144976, (GLfloat) - 0.613625,
+ (GLfloat) 0.720950, (GLfloat) 0.148061, (GLfloat) - 0.708313,
+ (GLfloat) 0.648325, (GLfloat) 0.207388, (GLfloat) - 0.792031,
+ (GLfloat) 0.602715, (GLfloat) 0.067041, (GLfloat) - 0.733625,
+ (GLfloat) 0.610539, (GLfloat) 0.105601, (GLfloat) - 0.742813,
+ (GLfloat) 0.539336, (GLfloat) 0.279873, (GLfloat) - 0.837500,
+ (GLfloat) 0.784890, (GLfloat) 0.253894, (GLfloat) - 0.747500,
+ (GLfloat) 0.293781, (GLfloat) 0.305853, (GLfloat) - 0.747500,
+ (GLfloat) 0.233342, (GLfloat) 0.240791, (GLfloat) - 0.625156,
+ (GLfloat) 0.249085, (GLfloat) 0.173768, (GLfloat) - 0.386375,
+ (GLfloat) 0.230210, (GLfloat) 0.174796, (GLfloat) - 0.500000,
+ (GLfloat) 0.269217, (GLfloat) 0.071154, (GLfloat) - 0.600125,
+ (GLfloat) 0.264292, (GLfloat) 0.115884, (GLfloat) - 0.604062,
+ (GLfloat) 0.204489, (GLfloat) 0.315300, (GLfloat) - 0.500000,
+ (GLfloat) 0.293781, (GLfloat) 0.305853, (GLfloat) - 0.252500,
+ (GLfloat) 0.233342, (GLfloat) 0.240791, (GLfloat) - 0.374844,
+ (GLfloat) 0.269217, (GLfloat) 0.071154, (GLfloat) - 0.399875,
+ (GLfloat) 0.264292, (GLfloat) 0.115884, (GLfloat) - 0.395938,
+ (GLfloat) 0.400082, (GLfloat) 0.165542, (GLfloat) - 0.234875,
+ (GLfloat) 0.305709, (GLfloat) 0.170683, (GLfloat) - 0.291687,
+ (GLfloat) 0.399335, (GLfloat) 0.227430, (GLfloat) - 0.207969,
+ (GLfloat) 0.626577, (GLfloat) 0.153203, (GLfloat) - 0.234875,
+ (GLfloat) 0.513329, (GLfloat) 0.159372, (GLfloat) - 0.215937,
+ (GLfloat) 0.402616, (GLfloat) 0.069508, (GLfloat) - 0.266375,
+ (GLfloat) 0.402791, (GLfloat) 0.111771, (GLfloat) - 0.257187,
+ (GLfloat) 0.539336, (GLfloat) 0.279873, (GLfloat) - 0.162500,
+ (GLfloat) 0.784890, (GLfloat) 0.253894, (GLfloat) - 0.252500,
+ (GLfloat) 0.648325, (GLfloat) 0.207388, (GLfloat) - 0.207969,
+ (GLfloat) 0.602715, (GLfloat) 0.067041, (GLfloat) - 0.266375,
+ (GLfloat) 0.610539, (GLfloat) 0.105601, (GLfloat) - 0.257187,
+ (GLfloat) 0.777574, (GLfloat) 0.144976, (GLfloat) - 0.386375,
+ (GLfloat) 0.720950, (GLfloat) 0.148061, (GLfloat) - 0.291687,
+ (GLfloat) 0.814318, (GLfloat) 0.194027, (GLfloat) - 0.374844,
+ (GLfloat) 0.796449, (GLfloat) 0.143948, (GLfloat) - 0.500000,
+ (GLfloat) 0.736115, (GLfloat) 0.065395, (GLfloat) - 0.399875,
+ (GLfloat) 0.749037, (GLfloat) 0.101488, (GLfloat) - 0.395938,
+ (GLfloat) 0.874183, (GLfloat) 0.244447, (GLfloat) - 0.500000,
+ (GLfloat) 0.814318, (GLfloat) 0.194027, (GLfloat) - 0.625156,
+ (GLfloat) 0.736115, (GLfloat) 0.065395, (GLfloat) - 0.600125,
+ (GLfloat) 0.749037, (GLfloat) 0.101488, (GLfloat) - 0.604062,
+ (GLfloat) 0.752790, (GLfloat) 0.065190, (GLfloat) - 0.500000,
+ (GLfloat) 0.706000, (GLfloat) 0.016681, (GLfloat) - 0.412500,
+ (GLfloat) 0.726029, (GLfloat) 0.037019, (GLfloat) - 0.403594,
+ (GLfloat) 0.686090, (GLfloat) 0.066012, (GLfloat) - 0.316437,
+ (GLfloat) 0.686090, (GLfloat) 0.066012, (GLfloat) - 0.683563,
+ (GLfloat) 0.706000, (GLfloat) 0.016681, (GLfloat) - 0.587500,
+ (GLfloat) 0.726029, (GLfloat) 0.037019, (GLfloat) - 0.596406,
+ (GLfloat) 0.590500, (GLfloat) - 0.005194, (GLfloat) - 0.590500,
+ (GLfloat) 0.664625, (GLfloat) 0.003052, (GLfloat) - 0.582500,
+ (GLfloat) 0.721500, (GLfloat) 0.015465, (GLfloat) - 0.500000,
+ (GLfloat) 0.587500, (GLfloat) 0.016681, (GLfloat) - 0.706000,
+ (GLfloat) 0.660875, (GLfloat) 0.017896, (GLfloat) - 0.660875,
+ (GLfloat) 0.587500, (GLfloat) 0.016681, (GLfloat) - 0.294000,
+ (GLfloat) 0.660875, (GLfloat) 0.017896, (GLfloat) - 0.339125,
+ (GLfloat) 0.590500, (GLfloat) - 0.005194, (GLfloat) - 0.409500,
+ (GLfloat) 0.664625, (GLfloat) 0.003052, (GLfloat) - 0.417500,
+ (GLfloat) 0.502666, (GLfloat) 0.068274, (GLfloat) - 0.750313,
+ (GLfloat) 0.597054, (GLfloat) 0.037430, (GLfloat) - 0.725406,
+ (GLfloat) 0.319242, (GLfloat) 0.070537, (GLfloat) - 0.683563,
+ (GLfloat) 0.412500, (GLfloat) 0.016681, (GLfloat) - 0.706000,
+ (GLfloat) 0.404279, (GLfloat) 0.038047, (GLfloat) - 0.725406,
+ (GLfloat) 0.409500, (GLfloat) - 0.005194, (GLfloat) - 0.590500,
+ (GLfloat) 0.417500, (GLfloat) 0.003052, (GLfloat) - 0.664625,
+ (GLfloat) 0.500000, (GLfloat) 0.015465, (GLfloat) - 0.721500,
+ (GLfloat) 0.294000, (GLfloat) 0.016681, (GLfloat) - 0.587500,
+ (GLfloat) 0.339125, (GLfloat) 0.017896, (GLfloat) - 0.660875,
+ (GLfloat) 0.582500, (GLfloat) 0.003052, (GLfloat) - 0.664625,
+ (GLfloat) 0.252542, (GLfloat) 0.071359, (GLfloat) - 0.500000,
+ (GLfloat) 0.275304, (GLfloat) 0.038459, (GLfloat) - 0.596406,
+ (GLfloat) 0.319242, (GLfloat) 0.070537, (GLfloat) - 0.316437,
+ (GLfloat) 0.294000, (GLfloat) 0.016681, (GLfloat) - 0.412500,
+ (GLfloat) 0.275304, (GLfloat) 0.038459, (GLfloat) - 0.403594,
+ (GLfloat) 0.409500, (GLfloat) - 0.005194, (GLfloat) - 0.409500,
+ (GLfloat) 0.335375, (GLfloat) 0.003052, (GLfloat) - 0.417500,
+ (GLfloat) 0.278500, (GLfloat) 0.015465, (GLfloat) - 0.500000,
+ (GLfloat) 0.412500, (GLfloat) 0.016681, (GLfloat) - 0.294000,
+ (GLfloat) 0.339125, (GLfloat) 0.017896, (GLfloat) - 0.339125,
+ (GLfloat) 0.335375, (GLfloat) 0.003052, (GLfloat) - 0.582500,
+ (GLfloat) 0.502666, (GLfloat) 0.068274, (GLfloat) - 0.249687,
+ (GLfloat) 0.404279, (GLfloat) 0.038047, (GLfloat) - 0.274594,
+ (GLfloat) 0.597054, (GLfloat) 0.037430, (GLfloat) - 0.274594,
+ (GLfloat) 0.582500, (GLfloat) 0.003052, (GLfloat) - 0.335375,
+ (GLfloat) 0.500000, (GLfloat) 0.015465, (GLfloat) - 0.278500,
+ (GLfloat) 0.417500, (GLfloat) 0.003052, (GLfloat) - 0.335375,
+ (GLfloat) 0.500000, (GLfloat) - 0.007972, (GLfloat) - 0.597750,
+ (GLfloat) 0.597750, (GLfloat) - 0.007972, (GLfloat) - 0.500000,
+ (GLfloat) 0.402250, (GLfloat) - 0.007972, (GLfloat) - 0.500000,
+ (GLfloat) 0.500000, (GLfloat) - 0.007972, (GLfloat) - 0.402250,
+};
+
+GLfloat s1_2_normals[] =
+{
+ (GLfloat) 0.838584, (GLfloat) - 0.185505, (GLfloat) - 0.512216,
+ (GLfloat) 0.838560, (GLfloat) - 0.185860, (GLfloat) - 0.512127,
+ (GLfloat) 0.951437, (GLfloat) - 0.260566, (GLfloat) - 0.163932,
+ (GLfloat) 0.951618, (GLfloat) - 0.260024, (GLfloat) - 0.163738,
+ (GLfloat) 0.973663, (GLfloat) - 0.157463, (GLfloat) - 0.164880,
+ (GLfloat) 0.975548, (GLfloat) - 0.148474, (GLfloat) - 0.162053,
+ (GLfloat) 0.859322, (GLfloat) - 0.074133, (GLfloat) - 0.506033,
+ (GLfloat) 0.859277, (GLfloat) - 0.081888, (GLfloat) - 0.504914,
+ (GLfloat) 0.838560, (GLfloat) - 0.185860, (GLfloat) 0.512127,
+ (GLfloat) 0.838584, (GLfloat) - 0.185505, (GLfloat) 0.512216,
+ (GLfloat) 0.859322, (GLfloat) - 0.074133, (GLfloat) 0.506034,
+ (GLfloat) 0.859277, (GLfloat) - 0.081888, (GLfloat) 0.504914,
+ (GLfloat) 0.973663, (GLfloat) - 0.157463, (GLfloat) 0.164880,
+ (GLfloat) 0.975548, (GLfloat) - 0.148474, (GLfloat) 0.162053,
+ (GLfloat) 0.951618, (GLfloat) - 0.260024, (GLfloat) 0.163738,
+ (GLfloat) 0.951437, (GLfloat) - 0.260566, (GLfloat) 0.163932,
+ (GLfloat) 0.573088, (GLfloat) 0.793214, (GLfloat) 0.205867,
+ (GLfloat) 0.558283, (GLfloat) 0.810311, (GLfloat) 0.178092,
+ (GLfloat) 0.606103, (GLfloat) 0.792390, (GLfloat) 0.068965,
+ (GLfloat) 0.596705, (GLfloat) 0.799118, (GLfloat) 0.073163,
+ (GLfloat) 0.896389, (GLfloat) 0.425982, (GLfloat) 0.122582,
+ (GLfloat) 0.910488, (GLfloat) 0.389376, (GLfloat) 0.139274,
+ (GLfloat) 0.787435, (GLfloat) 0.503715, (GLfloat) 0.355272,
+ (GLfloat) 0.794681, (GLfloat) 0.474299, (GLfloat) 0.378844,
+ (GLfloat) 0.558283, (GLfloat) 0.810311, (GLfloat) - 0.178092,
+ (GLfloat) 0.573088, (GLfloat) 0.793214, (GLfloat) - 0.205866,
+ (GLfloat) 0.787434, (GLfloat) 0.503716, (GLfloat) - 0.355272,
+ (GLfloat) 0.794681, (GLfloat) 0.474299, (GLfloat) - 0.378844,
+ (GLfloat) 0.910488, (GLfloat) 0.389376, (GLfloat) - 0.139274,
+ (GLfloat) 0.896389, (GLfloat) 0.425982, (GLfloat) - 0.122583,
+ (GLfloat) 0.596705, (GLfloat) 0.799118, (GLfloat) - 0.073163,
+ (GLfloat) 0.606103, (GLfloat) 0.792390, (GLfloat) - 0.068965,
+ (GLfloat) 0.528377, (GLfloat) - 0.013430, (GLfloat) 0.848903,
+ (GLfloat) 0.532136, (GLfloat) - 0.007543, (GLfloat) 0.846625,
+ (GLfloat) 0.209439, (GLfloat) 0.141946, (GLfloat) 0.967464,
+ (GLfloat) 0.218070, (GLfloat) 0.152719, (GLfloat) 0.963910,
+ (GLfloat) 0.237428, (GLfloat) 0.197257, (GLfloat) 0.951166,
+ (GLfloat) 0.225804, (GLfloat) 0.180417, (GLfloat) 0.957320,
+ (GLfloat) 0.549711, (GLfloat) 0.076255, (GLfloat) 0.831867,
+ (GLfloat) 0.550775, (GLfloat) 0.056452, (GLfloat) 0.832742,
+ (GLfloat) - 0.393177, (GLfloat) 0.417558, (GLfloat) 0.819181,
+ (GLfloat) - 0.379656, (GLfloat) 0.429289, (GLfloat) 0.819495,
+ (GLfloat) - 0.366688, (GLfloat) 0.451901, (GLfloat) 0.813219,
+ (GLfloat) - 0.369492, (GLfloat) 0.449132, (GLfloat) 0.813484,
+ (GLfloat) - 0.064014, (GLfloat) 0.313584, (GLfloat) 0.947400,
+ (GLfloat) - 0.066684, (GLfloat) 0.310439, (GLfloat) 0.948252,
+ (GLfloat) - 0.086424, (GLfloat) 0.278029, (GLfloat) 0.956677,
+ (GLfloat) - 0.074037, (GLfloat) 0.290647, (GLfloat) 0.953962,
+ (GLfloat) 0.110270, (GLfloat) 0.952576, (GLfloat) 0.283620,
+ (GLfloat) 0.140226, (GLfloat) 0.954260, (GLfloat) 0.264054,
+ (GLfloat) 0.237331, (GLfloat) 0.918949, (GLfloat) 0.314972,
+ (GLfloat) 0.245773, (GLfloat) 0.920155, (GLfloat) 0.304813,
+ (GLfloat) 0.105329, (GLfloat) 0.694128, (GLfloat) 0.712104,
+ (GLfloat) 0.087202, (GLfloat) 0.678641, (GLfloat) 0.729275,
+ (GLfloat) - 0.104644, (GLfloat) 0.803491, (GLfloat) 0.586048,
+ (GLfloat) - 0.129358, (GLfloat) 0.790652, (GLfloat) 0.598444,
+ (GLfloat) 0.490179, (GLfloat) 0.834739, (GLfloat) 0.250869,
+ (GLfloat) 0.486736, (GLfloat) 0.825366, (GLfloat) 0.286109,
+ (GLfloat) 0.575458, (GLfloat) 0.546427, (GLfloat) 0.608494,
+ (GLfloat) 0.582377, (GLfloat) 0.582433, (GLfloat) 0.567105,
+ (GLfloat) 0.347588, (GLfloat) 0.580631, (GLfloat) 0.736241,
+ (GLfloat) 0.339131, (GLfloat) 0.624243, (GLfloat) 0.703783,
+ (GLfloat) 0.378417, (GLfloat) 0.874281, (GLfloat) 0.304028,
+ (GLfloat) 0.373374, (GLfloat) 0.872526, (GLfloat) 0.315104,
+ (GLfloat) - 0.678225, (GLfloat) 0.555239, (GLfloat) 0.481373,
+ (GLfloat) - 0.681792, (GLfloat) 0.544639, (GLfloat) 0.488393,
+ (GLfloat) - 0.792737, (GLfloat) 0.589393, (GLfloat) 0.155511,
+ (GLfloat) - 0.790738, (GLfloat) 0.592627, (GLfloat) 0.153380,
+ (GLfloat) - 0.787611, (GLfloat) 0.595240, (GLfloat) 0.159243,
+ (GLfloat) - 0.781477, (GLfloat) 0.604504, (GLfloat) 0.154495,
+ (GLfloat) - 0.659940, (GLfloat) 0.576523, (GLfloat) 0.481768,
+ (GLfloat) - 0.666748, (GLfloat) 0.561105, (GLfloat) 0.490519,
+ (GLfloat) - 0.678225, (GLfloat) 0.555239, (GLfloat) - 0.481374,
+ (GLfloat) - 0.681792, (GLfloat) 0.544639, (GLfloat) - 0.488393,
+ (GLfloat) - 0.666748, (GLfloat) 0.561105, (GLfloat) - 0.490519,
+ (GLfloat) - 0.659940, (GLfloat) 0.576523, (GLfloat) - 0.481768,
+ (GLfloat) - 0.787611, (GLfloat) 0.595240, (GLfloat) - 0.159243,
+ (GLfloat) - 0.781477, (GLfloat) 0.604504, (GLfloat) - 0.154495,
+ (GLfloat) - 0.790738, (GLfloat) 0.592627, (GLfloat) - 0.153380,
+ (GLfloat) - 0.792737, (GLfloat) 0.589393, (GLfloat) - 0.155511,
+ (GLfloat) 0.036752, (GLfloat) 0.977890, (GLfloat) - 0.205867,
+ (GLfloat) 0.058945, (GLfloat) 0.982247, (GLfloat) - 0.178091,
+ (GLfloat) 0.010229, (GLfloat) 0.997567, (GLfloat) - 0.068965,
+ (GLfloat) 0.021776, (GLfloat) 0.997082, (GLfloat) - 0.073162,
+ (GLfloat) - 0.480804, (GLfloat) 0.867725, (GLfloat) - 0.126022,
+ (GLfloat) - 0.442857, (GLfloat) 0.886381, (GLfloat) - 0.134932,
+ (GLfloat) - 0.305505, (GLfloat) 0.879128, (GLfloat) - 0.365788,
+ (GLfloat) - 0.350437, (GLfloat) 0.860755, (GLfloat) - 0.369182,
+ (GLfloat) 0.058946, (GLfloat) 0.982247, (GLfloat) 0.178091,
+ (GLfloat) 0.036752, (GLfloat) 0.977890, (GLfloat) 0.205867,
+ (GLfloat) - 0.350437, (GLfloat) 0.860755, (GLfloat) 0.369182,
+ (GLfloat) - 0.305505, (GLfloat) 0.879128, (GLfloat) 0.365788,
+ (GLfloat) - 0.480804, (GLfloat) 0.867725, (GLfloat) 0.126022,
+ (GLfloat) - 0.442857, (GLfloat) 0.886381, (GLfloat) 0.134932,
+ (GLfloat) 0.021776, (GLfloat) 0.997082, (GLfloat) 0.073162,
+ (GLfloat) 0.010229, (GLfloat) 0.997567, (GLfloat) 0.068965,
+ (GLfloat) - 0.393178, (GLfloat) 0.417557, (GLfloat) - 0.819181,
+ (GLfloat) - 0.379655, (GLfloat) 0.429290, (GLfloat) - 0.819495,
+ (GLfloat) - 0.074037, (GLfloat) 0.290648, (GLfloat) - 0.953961,
+ (GLfloat) - 0.086424, (GLfloat) 0.278030, (GLfloat) - 0.956677,
+ (GLfloat) - 0.064013, (GLfloat) 0.313585, (GLfloat) - 0.947400,
+ (GLfloat) - 0.066684, (GLfloat) 0.310439, (GLfloat) - 0.948252,
+ (GLfloat) - 0.369492, (GLfloat) 0.449132, (GLfloat) - 0.813484,
+ (GLfloat) - 0.366688, (GLfloat) 0.451901, (GLfloat) - 0.813219,
+ (GLfloat) 0.532135, (GLfloat) - 0.007544, (GLfloat) - 0.846626,
+ (GLfloat) 0.528378, (GLfloat) - 0.013430, (GLfloat) - 0.848903,
+ (GLfloat) 0.550775, (GLfloat) 0.056452, (GLfloat) - 0.832742,
+ (GLfloat) 0.549711, (GLfloat) 0.076255, (GLfloat) - 0.831867,
+ (GLfloat) 0.225804, (GLfloat) 0.180419, (GLfloat) - 0.957320,
+ (GLfloat) 0.237428, (GLfloat) 0.197257, (GLfloat) - 0.951166,
+ (GLfloat) 0.209439, (GLfloat) 0.141946, (GLfloat) - 0.967464,
+ (GLfloat) 0.218070, (GLfloat) 0.152720, (GLfloat) - 0.963910,
+ (GLfloat) 0.490179, (GLfloat) 0.834739, (GLfloat) - 0.250870,
+ (GLfloat) 0.486736, (GLfloat) 0.825366, (GLfloat) - 0.286109,
+ (GLfloat) 0.373374, (GLfloat) 0.872526, (GLfloat) - 0.315104,
+ (GLfloat) 0.378417, (GLfloat) 0.874281, (GLfloat) - 0.304029,
+ (GLfloat) 0.339131, (GLfloat) 0.624243, (GLfloat) - 0.703783,
+ (GLfloat) 0.347588, (GLfloat) 0.580630, (GLfloat) - 0.736241,
+ (GLfloat) 0.582377, (GLfloat) 0.582434, (GLfloat) - 0.567105,
+ (GLfloat) 0.575458, (GLfloat) 0.546427, (GLfloat) - 0.608494,
+ (GLfloat) 0.140225, (GLfloat) 0.954260, (GLfloat) - 0.264055,
+ (GLfloat) 0.110270, (GLfloat) 0.952576, (GLfloat) - 0.283620,
+ (GLfloat) - 0.104644, (GLfloat) 0.803491, (GLfloat) - 0.586047,
+ (GLfloat) - 0.129358, (GLfloat) 0.790652, (GLfloat) - 0.598444,
+ (GLfloat) 0.087202, (GLfloat) 0.678640, (GLfloat) - 0.729276,
+ (GLfloat) 0.105329, (GLfloat) 0.694128, (GLfloat) - 0.712104,
+ (GLfloat) 0.237332, (GLfloat) 0.918949, (GLfloat) - 0.314972,
+ (GLfloat) 0.245773, (GLfloat) 0.920155, (GLfloat) - 0.304813,
+ (GLfloat) 0.448419, (GLfloat) 0.885179, (GLfloat) 0.124011,
+ (GLfloat) 0.437269, (GLfloat) 0.889018, (GLfloat) 0.135803,
+ (GLfloat) 0.364737, (GLfloat) 0.924635, (GLfloat) 0.109622,
+ (GLfloat) 0.360657, (GLfloat) 0.925618, (GLfloat) 0.114709,
+ (GLfloat) 0.353761, (GLfloat) 0.934751, (GLfloat) 0.033079,
+ (GLfloat) 0.356519, (GLfloat) 0.933801, (GLfloat) 0.030163,
+ (GLfloat) 0.426940, (GLfloat) 0.903217, (GLfloat) 0.043834,
+ (GLfloat) 0.431621, (GLfloat) 0.901183, (GLfloat) 0.039656,
+ (GLfloat) 0.202761, (GLfloat) 0.969766, (GLfloat) 0.135803,
+ (GLfloat) 0.191612, (GLfloat) 0.973605, (GLfloat) 0.124011,
+ (GLfloat) 0.219643, (GLfloat) 0.974595, (GLfloat) 0.043834,
+ (GLfloat) 0.214702, (GLfloat) 0.975874, (GLfloat) 0.039656,
+ (GLfloat) 0.293965, (GLfloat) 0.955340, (GLfloat) 0.030163,
+ (GLfloat) 0.296722, (GLfloat) 0.954391, (GLfloat) 0.033079,
+ (GLfloat) 0.281846, (GLfloat) 0.953177, (GLfloat) 0.109622,
+ (GLfloat) 0.285665, (GLfloat) 0.951439, (GLfloat) 0.114709,
+ (GLfloat) 0.191612, (GLfloat) 0.973605, (GLfloat) - 0.124011,
+ (GLfloat) 0.202761, (GLfloat) 0.969766, (GLfloat) - 0.135803,
+ (GLfloat) 0.281846, (GLfloat) 0.953177, (GLfloat) - 0.109622,
+ (GLfloat) 0.285665, (GLfloat) 0.951439, (GLfloat) - 0.114709,
+ (GLfloat) 0.296722, (GLfloat) 0.954391, (GLfloat) - 0.033079,
+ (GLfloat) 0.293965, (GLfloat) 0.955340, (GLfloat) - 0.030163,
+ (GLfloat) 0.219643, (GLfloat) 0.974595, (GLfloat) - 0.043834,
+ (GLfloat) 0.214702, (GLfloat) 0.975874, (GLfloat) - 0.039656,
+ (GLfloat) 0.437270, (GLfloat) 0.889018, (GLfloat) - 0.135802,
+ (GLfloat) 0.448419, (GLfloat) 0.885179, (GLfloat) - 0.124011,
+ (GLfloat) 0.426940, (GLfloat) 0.903217, (GLfloat) - 0.043834,
+ (GLfloat) 0.431621, (GLfloat) 0.901183, (GLfloat) - 0.039656,
+ (GLfloat) 0.356519, (GLfloat) 0.933801, (GLfloat) - 0.030163,
+ (GLfloat) 0.353761, (GLfloat) 0.934751, (GLfloat) - 0.033079,
+ (GLfloat) 0.364737, (GLfloat) 0.924635, (GLfloat) - 0.109622,
+ (GLfloat) 0.360657, (GLfloat) 0.925618, (GLfloat) - 0.114709,
+ (GLfloat) 0.865947, (GLfloat) 0.016137, (GLfloat) - 0.499875,
+ (GLfloat) 0.868761, (GLfloat) 0.025708, (GLfloat) - 0.494564,
+ (GLfloat) 0.864411, (GLfloat) 0.044558, (GLfloat) - 0.500808,
+ (GLfloat) 0.867101, (GLfloat) 0.054429, (GLfloat) - 0.495149,
+ (GLfloat) 0.986611, (GLfloat) - 0.030929, (GLfloat) - 0.160132,
+ (GLfloat) 0.986294, (GLfloat) - 0.033936, (GLfloat) - 0.161472,
+ (GLfloat) 0.985351, (GLfloat) - 0.059326, (GLfloat) - 0.159886,
+ (GLfloat) 0.984981, (GLfloat) - 0.062150, (GLfloat) - 0.161092,
+ (GLfloat) 0.832885, (GLfloat) - 0.213353, (GLfloat) - 0.510669,
+ (GLfloat) 0.832050, (GLfloat) - 0.215053, (GLfloat) - 0.511318,
+ (GLfloat) 0.946090, (GLfloat) - 0.280224, (GLfloat) - 0.162447,
+ (GLfloat) 0.946491, (GLfloat) - 0.279128, (GLfloat) - 0.161996,
+ (GLfloat) 0.980117, (GLfloat) - 0.113104, (GLfloat) - 0.163030,
+ (GLfloat) 0.979875, (GLfloat) - 0.114395, (GLfloat) - 0.163582,
+ (GLfloat) 0.859139, (GLfloat) - 0.037704, (GLfloat) - 0.510352,
+ (GLfloat) 0.860908, (GLfloat) - 0.032422, (GLfloat) - 0.507727,
+ (GLfloat) 0.832885, (GLfloat) - 0.213353, (GLfloat) 0.510669,
+ (GLfloat) 0.832049, (GLfloat) - 0.215054, (GLfloat) 0.511318,
+ (GLfloat) 0.860908, (GLfloat) - 0.032422, (GLfloat) 0.507727,
+ (GLfloat) 0.859138, (GLfloat) - 0.037705, (GLfloat) 0.510352,
+ (GLfloat) 0.980117, (GLfloat) - 0.113104, (GLfloat) 0.163030,
+ (GLfloat) 0.979875, (GLfloat) - 0.114395, (GLfloat) 0.163582,
+ (GLfloat) 0.946491, (GLfloat) - 0.279128, (GLfloat) 0.161996,
+ (GLfloat) 0.946090, (GLfloat) - 0.280224, (GLfloat) 0.162447,
+ (GLfloat) 0.868761, (GLfloat) 0.025708, (GLfloat) 0.494563,
+ (GLfloat) 0.865947, (GLfloat) 0.016137, (GLfloat) 0.499875,
+ (GLfloat) 0.985351, (GLfloat) - 0.059326, (GLfloat) 0.159886,
+ (GLfloat) 0.984981, (GLfloat) - 0.062149, (GLfloat) 0.161092,
+ (GLfloat) 0.986294, (GLfloat) - 0.033936, (GLfloat) 0.161472,
+ (GLfloat) 0.986611, (GLfloat) - 0.030929, (GLfloat) 0.160132,
+ (GLfloat) 0.864411, (GLfloat) 0.044558, (GLfloat) 0.500808,
+ (GLfloat) 0.867101, (GLfloat) 0.054428, (GLfloat) 0.495149,
+ (GLfloat) - 0.329624, (GLfloat) 0.568782, (GLfloat) - 0.753548,
+ (GLfloat) - 0.303532, (GLfloat) 0.584080, (GLfloat) - 0.752808,
+ (GLfloat) - 0.337233, (GLfloat) 0.584915, (GLfloat) - 0.737664,
+ (GLfloat) - 0.311968, (GLfloat) 0.599454, (GLfloat) - 0.737110,
+ (GLfloat) - 0.032356, (GLfloat) 0.486520, (GLfloat) - 0.873070,
+ (GLfloat) - 0.057628, (GLfloat) 0.467531, (GLfloat) - 0.882096,
+ (GLfloat) - 0.019804, (GLfloat) 0.465587, (GLfloat) - 0.884780,
+ (GLfloat) - 0.045819, (GLfloat) 0.445898, (GLfloat) - 0.893910,
+ (GLfloat) - 0.451403, (GLfloat) 0.351833, (GLfloat) - 0.820029,
+ (GLfloat) - 0.442643, (GLfloat) 0.360683, (GLfloat) - 0.820960,
+ (GLfloat) - 0.125959, (GLfloat) 0.231940, (GLfloat) - 0.964540,
+ (GLfloat) - 0.133424, (GLfloat) 0.223158, (GLfloat) - 0.965608,
+ (GLfloat) - 0.071940, (GLfloat) 0.416419, (GLfloat) - 0.906322,
+ (GLfloat) - 0.089763, (GLfloat) 0.400364, (GLfloat) - 0.911949,
+ (GLfloat) - 0.381140, (GLfloat) 0.522054, (GLfloat) - 0.763015,
+ (GLfloat) - 0.362693, (GLfloat) 0.535129, (GLfloat) - 0.762949,
+ (GLfloat) 0.514033, (GLfloat) - 0.052564, (GLfloat) - 0.856158,
+ (GLfloat) 0.512829, (GLfloat) - 0.054517, (GLfloat) - 0.856758,
+ (GLfloat) 0.539192, (GLfloat) 0.146366, (GLfloat) - 0.829367,
+ (GLfloat) 0.531981, (GLfloat) 0.133703, (GLfloat) - 0.836133,
+ (GLfloat) 0.204167, (GLfloat) 0.278037, (GLfloat) - 0.938622,
+ (GLfloat) 0.217587, (GLfloat) 0.294489, (GLfloat) - 0.930555,
+ (GLfloat) 0.177512, (GLfloat) 0.093824, (GLfloat) - 0.979636,
+ (GLfloat) 0.182065, (GLfloat) 0.100184, (GLfloat) - 0.978170,
+ (GLfloat) 0.561737, (GLfloat) 0.205535, (GLfloat) - 0.801378,
+ (GLfloat) 0.550517, (GLfloat) 0.186829, (GLfloat) - 0.813650,
+ (GLfloat) 0.237090, (GLfloat) 0.326380, (GLfloat) - 0.915022,
+ (GLfloat) 0.257400, (GLfloat) 0.348104, (GLfloat) - 0.901426,
+ (GLfloat) 0.225204, (GLfloat) 0.351522, (GLfloat) - 0.908689,
+ (GLfloat) 0.244915, (GLfloat) 0.372788, (GLfloat) - 0.895012,
+ (GLfloat) 0.553162, (GLfloat) 0.233132, (GLfloat) - 0.799789,
+ (GLfloat) 0.542289, (GLfloat) 0.214487, (GLfloat) - 0.812354,
+ (GLfloat) - 0.303532, (GLfloat) 0.584080, (GLfloat) 0.752808,
+ (GLfloat) - 0.329624, (GLfloat) 0.568782, (GLfloat) 0.753548,
+ (GLfloat) - 0.019804, (GLfloat) 0.465588, (GLfloat) 0.884780,
+ (GLfloat) - 0.045820, (GLfloat) 0.445898, (GLfloat) 0.893910,
+ (GLfloat) - 0.057628, (GLfloat) 0.467531, (GLfloat) 0.882096,
+ (GLfloat) - 0.032356, (GLfloat) 0.486520, (GLfloat) 0.873070,
+ (GLfloat) - 0.337233, (GLfloat) 0.584915, (GLfloat) 0.737664,
+ (GLfloat) - 0.311968, (GLfloat) 0.599453, (GLfloat) 0.737110,
+ (GLfloat) 0.561737, (GLfloat) 0.205535, (GLfloat) 0.801378,
+ (GLfloat) 0.550517, (GLfloat) 0.186829, (GLfloat) 0.813650,
+ (GLfloat) 0.542289, (GLfloat) 0.214487, (GLfloat) 0.812354,
+ (GLfloat) 0.553162, (GLfloat) 0.233132, (GLfloat) 0.799789,
+ (GLfloat) 0.225204, (GLfloat) 0.351522, (GLfloat) 0.908689,
+ (GLfloat) 0.244915, (GLfloat) 0.372788, (GLfloat) 0.895012,
+ (GLfloat) 0.257400, (GLfloat) 0.348104, (GLfloat) 0.901426,
+ (GLfloat) 0.237091, (GLfloat) 0.326380, (GLfloat) 0.915021,
+ (GLfloat) 0.512829, (GLfloat) - 0.054517, (GLfloat) 0.856758,
+ (GLfloat) 0.514033, (GLfloat) - 0.052564, (GLfloat) 0.856158,
+ (GLfloat) 0.177512, (GLfloat) 0.093824, (GLfloat) 0.979636,
+ (GLfloat) 0.182065, (GLfloat) 0.100184, (GLfloat) 0.978170,
+ (GLfloat) 0.217587, (GLfloat) 0.294488, (GLfloat) 0.930555,
+ (GLfloat) 0.204167, (GLfloat) 0.278037, (GLfloat) 0.938622,
+ (GLfloat) 0.539192, (GLfloat) 0.146365, (GLfloat) 0.829367,
+ (GLfloat) 0.531981, (GLfloat) 0.133703, (GLfloat) 0.836133,
+ (GLfloat) - 0.451403, (GLfloat) 0.351833, (GLfloat) 0.820029,
+ (GLfloat) - 0.442643, (GLfloat) 0.360683, (GLfloat) 0.820960,
+ (GLfloat) - 0.362693, (GLfloat) 0.535129, (GLfloat) 0.762949,
+ (GLfloat) - 0.381140, (GLfloat) 0.522054, (GLfloat) 0.763015,
+ (GLfloat) - 0.071940, (GLfloat) 0.416419, (GLfloat) 0.906322,
+ (GLfloat) - 0.089763, (GLfloat) 0.400364, (GLfloat) 0.911949,
+ (GLfloat) - 0.133424, (GLfloat) 0.223158, (GLfloat) 0.965608,
+ (GLfloat) - 0.125959, (GLfloat) 0.231940, (GLfloat) 0.964540,
+ (GLfloat) - 0.574082, (GLfloat) 0.688221, (GLfloat) - 0.443601,
+ (GLfloat) - 0.590248, (GLfloat) 0.678175, (GLfloat) - 0.437821,
+ (GLfloat) - 0.687359, (GLfloat) 0.712967, (GLfloat) - 0.138621,
+ (GLfloat) - 0.682813, (GLfloat) 0.716686, (GLfloat) - 0.141874,
+ (GLfloat) - 0.682597, (GLfloat) 0.718360, (GLfloat) - 0.134243,
+ (GLfloat) - 0.678253, (GLfloat) 0.721849, (GLfloat) - 0.137502,
+ (GLfloat) - 0.574037, (GLfloat) 0.696240, (GLfloat) - 0.430966,
+ (GLfloat) - 0.589571, (GLfloat) 0.686777, (GLfloat) - 0.425139,
+ (GLfloat) - 0.574082, (GLfloat) 0.688221, (GLfloat) 0.443601,
+ (GLfloat) - 0.590248, (GLfloat) 0.678175, (GLfloat) 0.437821,
+ (GLfloat) - 0.589571, (GLfloat) 0.686777, (GLfloat) 0.425139,
+ (GLfloat) - 0.574037, (GLfloat) 0.696240, (GLfloat) 0.430966,
+ (GLfloat) - 0.682597, (GLfloat) 0.718360, (GLfloat) 0.134243,
+ (GLfloat) - 0.678253, (GLfloat) 0.721849, (GLfloat) 0.137502,
+ (GLfloat) - 0.682813, (GLfloat) 0.716686, (GLfloat) 0.141874,
+ (GLfloat) - 0.687359, (GLfloat) 0.712967, (GLfloat) 0.138621,
+ (GLfloat) - 0.741041, (GLfloat) 0.473108, (GLfloat) 0.476473,
+ (GLfloat) - 0.742406, (GLfloat) 0.464975, (GLfloat) 0.482319,
+ (GLfloat) - 0.850293, (GLfloat) 0.503676, (GLfloat) 0.152681,
+ (GLfloat) - 0.849127, (GLfloat) 0.506180, (GLfloat) 0.150879,
+ (GLfloat) - 0.738717, (GLfloat) 0.659007, (GLfloat) 0.141447,
+ (GLfloat) - 0.736283, (GLfloat) 0.662408, (GLfloat) 0.138214,
+ (GLfloat) - 0.631960, (GLfloat) 0.635245, (GLfloat) 0.443948,
+ (GLfloat) - 0.643540, (GLfloat) 0.626686, (GLfloat) 0.439455,
+ (GLfloat) - 0.741041, (GLfloat) 0.473108, (GLfloat) - 0.476473,
+ (GLfloat) - 0.742406, (GLfloat) 0.464975, (GLfloat) - 0.482319,
+ (GLfloat) - 0.631960, (GLfloat) 0.635245, (GLfloat) - 0.443948,
+ (GLfloat) - 0.643541, (GLfloat) 0.626686, (GLfloat) - 0.439455,
+ (GLfloat) - 0.738717, (GLfloat) 0.659007, (GLfloat) - 0.141447,
+ (GLfloat) - 0.736283, (GLfloat) 0.662408, (GLfloat) - 0.138214,
+ (GLfloat) - 0.849127, (GLfloat) 0.506180, (GLfloat) - 0.150879,
+ (GLfloat) - 0.850293, (GLfloat) 0.503676, (GLfloat) - 0.152681,
+ (GLfloat) - 0.489320, (GLfloat) - 0.355167, (GLfloat) - 0.796506,
+ (GLfloat) - 0.498398, (GLfloat) - 0.341072, (GLfloat) - 0.797038,
+ (GLfloat) - 0.172289, (GLfloat) - 0.401583, (GLfloat) - 0.899471,
+ (GLfloat) - 0.163102, (GLfloat) - 0.385135, (GLfloat) - 0.908333,
+ (GLfloat) - 0.182727, (GLfloat) - 0.410657, (GLfloat) - 0.893293,
+ (GLfloat) - 0.172422, (GLfloat) - 0.394484, (GLfloat) - 0.902581,
+ (GLfloat) - 0.506086, (GLfloat) - 0.336560, (GLfloat) - 0.794106,
+ (GLfloat) - 0.496896, (GLfloat) - 0.351037, (GLfloat) - 0.793642,
+ (GLfloat) 0.421643, (GLfloat) - 0.514114, (GLfloat) - 0.746930,
+ (GLfloat) 0.435781, (GLfloat) - 0.498195, (GLfloat) - 0.749598,
+ (GLfloat) 0.399104, (GLfloat) - 0.548391, (GLfloat) - 0.734836,
+ (GLfloat) 0.414969, (GLfloat) - 0.532774, (GLfloat) - 0.737532,
+ (GLfloat) 0.122126, (GLfloat) - 0.459168, (GLfloat) - 0.879915,
+ (GLfloat) 0.107835, (GLfloat) - 0.476533, (GLfloat) - 0.872518,
+ (GLfloat) 0.135473, (GLfloat) - 0.437168, (GLfloat) - 0.889118,
+ (GLfloat) 0.122726, (GLfloat) - 0.454818, (GLfloat) - 0.882088,
+ (GLfloat) 0.451859, (GLfloat) - 0.350279, (GLfloat) - 0.820444,
+ (GLfloat) 0.459996, (GLfloat) - 0.340221, (GLfloat) - 0.820154,
+ (GLfloat) 0.139327, (GLfloat) - 0.217141, (GLfloat) - 0.966146,
+ (GLfloat) 0.132987, (GLfloat) - 0.225779, (GLfloat) - 0.965059,
+ (GLfloat) 0.121571, (GLfloat) - 0.389814, (GLfloat) - 0.912834,
+ (GLfloat) 0.109716, (GLfloat) - 0.404550, (GLfloat) - 0.907910,
+ (GLfloat) 0.409974, (GLfloat) - 0.496912, (GLfloat) - 0.764852,
+ (GLfloat) 0.423414, (GLfloat) - 0.483036, (GLfloat) - 0.766418,
+ (GLfloat) - 0.517051, (GLfloat) 0.005478, (GLfloat) - 0.855937,
+ (GLfloat) - 0.518557, (GLfloat) 0.003075, (GLfloat) - 0.855038,
+ (GLfloat) - 0.515705, (GLfloat) - 0.236965, (GLfloat) - 0.823344,
+ (GLfloat) - 0.521517, (GLfloat) - 0.225403, (GLfloat) - 0.822930,
+ (GLfloat) - 0.189726, (GLfloat) - 0.318770, (GLfloat) - 0.928649,
+ (GLfloat) - 0.181223, (GLfloat) - 0.305795, (GLfloat) - 0.934691,
+ (GLfloat) - 0.179422, (GLfloat) - 0.111097, (GLfloat) - 0.977479,
+ (GLfloat) - 0.175584, (GLfloat) - 0.105473, (GLfloat) - 0.978798,
+ (GLfloat) - 0.822110, (GLfloat) - 0.303411, (GLfloat) - 0.481743,
+ (GLfloat) - 0.821692, (GLfloat) - 0.296307, (GLfloat) - 0.486851,
+ (GLfloat) - 0.829019, (GLfloat) - 0.285105, (GLfloat) - 0.481086,
+ (GLfloat) - 0.828324, (GLfloat) - 0.278227, (GLfloat) - 0.486280,
+ (GLfloat) - 0.955809, (GLfloat) - 0.248857, (GLfloat) - 0.156521,
+ (GLfloat) - 0.955462, (GLfloat) - 0.251102, (GLfloat) - 0.155051,
+ (GLfloat) - 0.949299, (GLfloat) - 0.272604, (GLfloat) - 0.156583,
+ (GLfloat) - 0.948870, (GLfloat) - 0.274919, (GLfloat) - 0.155132,
+ (GLfloat) - 0.850734, (GLfloat) 0.112614, (GLfloat) - 0.513391,
+ (GLfloat) - 0.850654, (GLfloat) 0.112793, (GLfloat) - 0.513484,
+ (GLfloat) - 0.974222, (GLfloat) 0.155109, (GLfloat) - 0.163808,
+ (GLfloat) - 0.974191, (GLfloat) 0.155230, (GLfloat) - 0.163874,
+ (GLfloat) - 0.980876, (GLfloat) - 0.109137, (GLfloat) - 0.161159,
+ (GLfloat) - 0.980855, (GLfloat) - 0.110647, (GLfloat) - 0.160255,
+ (GLfloat) - 0.853630, (GLfloat) - 0.150462, (GLfloat) - 0.498675,
+ (GLfloat) - 0.852599, (GLfloat) - 0.145646, (GLfloat) - 0.501859,
+ (GLfloat) - 0.850734, (GLfloat) 0.112614, (GLfloat) 0.513391,
+ (GLfloat) - 0.850654, (GLfloat) 0.112793, (GLfloat) 0.513484,
+ (GLfloat) - 0.852599, (GLfloat) - 0.145647, (GLfloat) 0.501859,
+ (GLfloat) - 0.853630, (GLfloat) - 0.150462, (GLfloat) 0.498676,
+ (GLfloat) - 0.980876, (GLfloat) - 0.109137, (GLfloat) 0.161159,
+ (GLfloat) - 0.980855, (GLfloat) - 0.110647, (GLfloat) 0.160255,
+ (GLfloat) - 0.974191, (GLfloat) 0.155230, (GLfloat) 0.163874,
+ (GLfloat) - 0.974222, (GLfloat) 0.155109, (GLfloat) 0.163808,
+ (GLfloat) - 0.821692, (GLfloat) - 0.296307, (GLfloat) 0.486851,
+ (GLfloat) - 0.822110, (GLfloat) - 0.303411, (GLfloat) 0.481743,
+ (GLfloat) - 0.949299, (GLfloat) - 0.272604, (GLfloat) 0.156583,
+ (GLfloat) - 0.948870, (GLfloat) - 0.274919, (GLfloat) 0.155132,
+ (GLfloat) - 0.955462, (GLfloat) - 0.251102, (GLfloat) 0.155051,
+ (GLfloat) - 0.955809, (GLfloat) - 0.248857, (GLfloat) 0.156520,
+ (GLfloat) - 0.829019, (GLfloat) - 0.285105, (GLfloat) 0.481086,
+ (GLfloat) - 0.828324, (GLfloat) - 0.278227, (GLfloat) 0.486280,
+ (GLfloat) - 0.498398, (GLfloat) - 0.341071, (GLfloat) 0.797038,
+ (GLfloat) - 0.489320, (GLfloat) - 0.355167, (GLfloat) 0.796507,
+ (GLfloat) - 0.506086, (GLfloat) - 0.336560, (GLfloat) 0.794106,
+ (GLfloat) - 0.496896, (GLfloat) - 0.351037, (GLfloat) 0.793642,
+ (GLfloat) - 0.182728, (GLfloat) - 0.410657, (GLfloat) 0.893293,
+ (GLfloat) - 0.172423, (GLfloat) - 0.394484, (GLfloat) 0.902581,
+ (GLfloat) - 0.163101, (GLfloat) - 0.385135, (GLfloat) 0.908333,
+ (GLfloat) - 0.172289, (GLfloat) - 0.401584, (GLfloat) 0.899470,
+ (GLfloat) - 0.518557, (GLfloat) 0.003076, (GLfloat) 0.855038,
+ (GLfloat) - 0.517051, (GLfloat) 0.005478, (GLfloat) 0.855937,
+ (GLfloat) - 0.179422, (GLfloat) - 0.111097, (GLfloat) 0.977479,
+ (GLfloat) - 0.175584, (GLfloat) - 0.105473, (GLfloat) 0.978798,
+ (GLfloat) - 0.181223, (GLfloat) - 0.305795, (GLfloat) 0.934691,
+ (GLfloat) - 0.189727, (GLfloat) - 0.318770, (GLfloat) 0.928649,
+ (GLfloat) - 0.521517, (GLfloat) - 0.225402, (GLfloat) 0.822930,
+ (GLfloat) - 0.515705, (GLfloat) - 0.236965, (GLfloat) 0.823344,
+ (GLfloat) 0.451859, (GLfloat) - 0.350279, (GLfloat) 0.820444,
+ (GLfloat) 0.459996, (GLfloat) - 0.340221, (GLfloat) 0.820154,
+ (GLfloat) 0.423414, (GLfloat) - 0.483036, (GLfloat) 0.766418,
+ (GLfloat) 0.409975, (GLfloat) - 0.496912, (GLfloat) 0.764853,
+ (GLfloat) 0.121571, (GLfloat) - 0.389814, (GLfloat) 0.912834,
+ (GLfloat) 0.109716, (GLfloat) - 0.404550, (GLfloat) 0.907911,
+ (GLfloat) 0.132987, (GLfloat) - 0.225779, (GLfloat) 0.965059,
+ (GLfloat) 0.139327, (GLfloat) - 0.217140, (GLfloat) 0.966146,
+ (GLfloat) 0.435780, (GLfloat) - 0.498195, (GLfloat) 0.749598,
+ (GLfloat) 0.421643, (GLfloat) - 0.514113, (GLfloat) 0.746930,
+ (GLfloat) 0.135473, (GLfloat) - 0.437169, (GLfloat) 0.889118,
+ (GLfloat) 0.122726, (GLfloat) - 0.454818, (GLfloat) 0.882088,
+ (GLfloat) 0.107835, (GLfloat) - 0.476534, (GLfloat) 0.872518,
+ (GLfloat) 0.122126, (GLfloat) - 0.459168, (GLfloat) 0.879915,
+ (GLfloat) 0.399104, (GLfloat) - 0.548391, (GLfloat) 0.734836,
+ (GLfloat) 0.414969, (GLfloat) - 0.532773, (GLfloat) 0.737532,
+ (GLfloat) 0.709825, (GLfloat) - 0.548164, (GLfloat) 0.442339,
+ (GLfloat) 0.706858, (GLfloat) - 0.559116, (GLfloat) 0.433291,
+ (GLfloat) 0.678133, (GLfloat) - 0.593660, (GLfloat) 0.433248,
+ (GLfloat) 0.674632, (GLfloat) - 0.604835, (GLfloat) 0.423140,
+ (GLfloat) 0.774649, (GLfloat) - 0.617973, (GLfloat) 0.134272,
+ (GLfloat) 0.777074, (GLfloat) - 0.614312, (GLfloat) 0.137026,
+ (GLfloat) 0.811265, (GLfloat) - 0.568214, (GLfloat) 0.137773,
+ (GLfloat) 0.813383, (GLfloat) - 0.564575, (GLfloat) 0.140223,
+ (GLfloat) 0.750611, (GLfloat) - 0.453426, (GLfloat) 0.480612,
+ (GLfloat) 0.748687, (GLfloat) - 0.462619, (GLfloat) 0.474817,
+ (GLfloat) 0.853444, (GLfloat) - 0.499176, (GLfloat) 0.149855,
+ (GLfloat) 0.854917, (GLfloat) - 0.496116, (GLfloat) 0.151614,
+ (GLfloat) 0.791852, (GLfloat) - 0.594634, (GLfloat) 0.139213,
+ (GLfloat) 0.794008, (GLfloat) - 0.591177, (GLfloat) 0.141637,
+ (GLfloat) 0.694144, (GLfloat) - 0.562907, (GLfloat) 0.448664,
+ (GLfloat) 0.690998, (GLfloat) - 0.573547, (GLfloat) 0.439961,
+ (GLfloat) 0.750611, (GLfloat) - 0.453426, (GLfloat) - 0.480612,
+ (GLfloat) 0.748687, (GLfloat) - 0.462620, (GLfloat) - 0.474817,
+ (GLfloat) 0.690999, (GLfloat) - 0.573546, (GLfloat) - 0.439961,
+ (GLfloat) 0.694144, (GLfloat) - 0.562907, (GLfloat) - 0.448664,
+ (GLfloat) 0.791852, (GLfloat) - 0.594634, (GLfloat) - 0.139213,
+ (GLfloat) 0.794008, (GLfloat) - 0.591177, (GLfloat) - 0.141637,
+ (GLfloat) 0.854917, (GLfloat) - 0.496116, (GLfloat) - 0.151614,
+ (GLfloat) 0.853444, (GLfloat) - 0.499176, (GLfloat) - 0.149855,
+ (GLfloat) 0.706858, (GLfloat) - 0.559116, (GLfloat) - 0.433291,
+ (GLfloat) 0.709825, (GLfloat) - 0.548164, (GLfloat) - 0.442339,
+ (GLfloat) 0.811265, (GLfloat) - 0.568214, (GLfloat) - 0.137773,
+ (GLfloat) 0.813383, (GLfloat) - 0.564575, (GLfloat) - 0.140223,
+ (GLfloat) 0.777074, (GLfloat) - 0.614312, (GLfloat) - 0.137026,
+ (GLfloat) 0.774649, (GLfloat) - 0.617973, (GLfloat) - 0.134272,
+ (GLfloat) 0.678133, (GLfloat) - 0.593660, (GLfloat) - 0.433248,
+ (GLfloat) 0.674631, (GLfloat) - 0.604835, (GLfloat) - 0.423139,
+ (GLfloat) 0.805725, (GLfloat) - 0.334902, (GLfloat) 0.488515,
+ (GLfloat) 0.805089, (GLfloat) - 0.341176, (GLfloat) 0.485212,
+ (GLfloat) 0.923877, (GLfloat) - 0.350079, (GLfloat) 0.154583,
+ (GLfloat) 0.924516, (GLfloat) - 0.347968, (GLfloat) 0.155526,
+ (GLfloat) 0.927012, (GLfloat) - 0.340158, (GLfloat) 0.157929,
+ (GLfloat) 0.924342, (GLfloat) - 0.348817, (GLfloat) 0.154657,
+ (GLfloat) 0.800744, (GLfloat) - 0.354688, (GLfloat) 0.482707,
+ (GLfloat) 0.801658, (GLfloat) - 0.348585, (GLfloat) 0.485626,
+ (GLfloat) 0.805725, (GLfloat) - 0.334902, (GLfloat) - 0.488516,
+ (GLfloat) 0.805089, (GLfloat) - 0.341176, (GLfloat) - 0.485212,
+ (GLfloat) 0.801658, (GLfloat) - 0.348585, (GLfloat) - 0.485626,
+ (GLfloat) 0.800744, (GLfloat) - 0.354688, (GLfloat) - 0.482707,
+ (GLfloat) 0.927012, (GLfloat) - 0.340158, (GLfloat) - 0.157929,
+ (GLfloat) 0.924342, (GLfloat) - 0.348818, (GLfloat) - 0.154657,
+ (GLfloat) 0.924516, (GLfloat) - 0.347968, (GLfloat) - 0.155526,
+ (GLfloat) 0.923877, (GLfloat) - 0.350079, (GLfloat) - 0.154583,
+ (GLfloat) 0.283621, (GLfloat) - 0.936578, (GLfloat) - 0.205866,
+ (GLfloat) 0.264056, (GLfloat) - 0.947923, (GLfloat) - 0.178092,
+ (GLfloat) 0.315105, (GLfloat) - 0.946548, (GLfloat) - 0.068965,
+ (GLfloat) 0.304029, (GLfloat) - 0.949849, (GLfloat) - 0.073162,
+ (GLfloat) 0.681274, (GLfloat) - 0.722487, (GLfloat) - 0.117805,
+ (GLfloat) 0.706887, (GLfloat) - 0.694350, (GLfloat) - 0.134864,
+ (GLfloat) 0.560017, (GLfloat) - 0.754527, (GLfloat) - 0.342154,
+ (GLfloat) 0.577334, (GLfloat) - 0.729313, (GLfloat) - 0.367135,
+ (GLfloat) 0.264055, (GLfloat) - 0.947923, (GLfloat) 0.178092,
+ (GLfloat) 0.283621, (GLfloat) - 0.936578, (GLfloat) 0.205866,
+ (GLfloat) 0.560017, (GLfloat) - 0.754527, (GLfloat) 0.342155,
+ (GLfloat) 0.577334, (GLfloat) - 0.729313, (GLfloat) 0.367135,
+ (GLfloat) 0.706888, (GLfloat) - 0.694350, (GLfloat) 0.134864,
+ (GLfloat) 0.681274, (GLfloat) - 0.722487, (GLfloat) 0.117805,
+ (GLfloat) 0.304029, (GLfloat) - 0.949849, (GLfloat) 0.073162,
+ (GLfloat) 0.315105, (GLfloat) - 0.946548, (GLfloat) 0.068965,
+ (GLfloat) 0.484153, (GLfloat) - 0.303994, (GLfloat) - 0.820478,
+ (GLfloat) 0.489225, (GLfloat) - 0.294821, (GLfloat) - 0.820816,
+ (GLfloat) 0.156385, (GLfloat) - 0.248336, (GLfloat) - 0.955967,
+ (GLfloat) 0.151648, (GLfloat) - 0.258100, (GLfloat) - 0.954142,
+ (GLfloat) 0.160268, (GLfloat) - 0.275037, (GLfloat) - 0.947981,
+ (GLfloat) 0.153877, (GLfloat) - 0.291476, (GLfloat) - 0.944120,
+ (GLfloat) 0.481923, (GLfloat) - 0.335378, (GLfloat) - 0.809489,
+ (GLfloat) 0.489881, (GLfloat) - 0.318876, (GLfloat) - 0.811378,
+ (GLfloat) - 0.511124, (GLfloat) - 0.173861, (GLfloat) - 0.841739,
+ (GLfloat) - 0.507919, (GLfloat) - 0.180984, (GLfloat) - 0.842177,
+ (GLfloat) - 0.502437, (GLfloat) - 0.243295, (GLfloat) - 0.829678,
+ (GLfloat) - 0.501146, (GLfloat) - 0.246358, (GLfloat) - 0.829554,
+ (GLfloat) - 0.162122, (GLfloat) - 0.255565, (GLfloat) - 0.953102,
+ (GLfloat) - 0.162682, (GLfloat) - 0.257426, (GLfloat) - 0.952505,
+ (GLfloat) - 0.167026, (GLfloat) - 0.217710, (GLfloat) - 0.961616,
+ (GLfloat) - 0.163395, (GLfloat) - 0.208930, (GLfloat) - 0.964184,
+ (GLfloat) - 0.205866, (GLfloat) - 0.936578, (GLfloat) - 0.283621,
+ (GLfloat) - 0.178092, (GLfloat) - 0.947923, (GLfloat) - 0.264055,
+ (GLfloat) - 0.068965, (GLfloat) - 0.946548, (GLfloat) - 0.315105,
+ (GLfloat) - 0.073162, (GLfloat) - 0.949849, (GLfloat) - 0.304029,
+ (GLfloat) - 0.124478, (GLfloat) - 0.692921, (GLfloat) - 0.710188,
+ (GLfloat) - 0.138779, (GLfloat) - 0.668059, (GLfloat) - 0.731052,
+ (GLfloat) - 0.361212, (GLfloat) - 0.721974, (GLfloat) - 0.590152,
+ (GLfloat) - 0.383785, (GLfloat) - 0.697396, (GLfloat) - 0.605267,
+ (GLfloat) 0.178092, (GLfloat) - 0.947923, (GLfloat) - 0.264056,
+ (GLfloat) 0.205866, (GLfloat) - 0.936578, (GLfloat) - 0.283621,
+ (GLfloat) 0.341480, (GLfloat) - 0.751054, (GLfloat) - 0.565075,
+ (GLfloat) 0.372366, (GLfloat) - 0.719604, (GLfloat) - 0.586101,
+ (GLfloat) 0.138114, (GLfloat) - 0.672674, (GLfloat) - 0.726935,
+ (GLfloat) 0.117913, (GLfloat) - 0.706722, (GLfloat) - 0.697597,
+ (GLfloat) 0.073162, (GLfloat) - 0.949849, (GLfloat) - 0.304029,
+ (GLfloat) 0.068965, (GLfloat) - 0.946548, (GLfloat) - 0.315105,
+ (GLfloat) - 0.850324, (GLfloat) - 0.141983, (GLfloat) - 0.506744,
+ (GLfloat) - 0.849870, (GLfloat) - 0.138328, (GLfloat) - 0.508515,
+ (GLfloat) - 0.979216, (GLfloat) - 0.120924, (GLfloat) - 0.162831,
+ (GLfloat) - 0.979161, (GLfloat) - 0.122085, (GLfloat) - 0.162295,
+ (GLfloat) - 0.968183, (GLfloat) - 0.188900, (GLfloat) - 0.164128,
+ (GLfloat) - 0.966893, (GLfloat) - 0.198288, (GLfloat) - 0.160620,
+ (GLfloat) - 0.836326, (GLfloat) - 0.225408, (GLfloat) - 0.499751,
+ (GLfloat) - 0.836389, (GLfloat) - 0.213159, (GLfloat) - 0.504991,
+ (GLfloat) - 0.850324, (GLfloat) - 0.141983, (GLfloat) 0.506744,
+ (GLfloat) - 0.849870, (GLfloat) - 0.138328, (GLfloat) 0.508515,
+ (GLfloat) - 0.836389, (GLfloat) - 0.213159, (GLfloat) 0.504991,
+ (GLfloat) - 0.836326, (GLfloat) - 0.225408, (GLfloat) 0.499751,
+ (GLfloat) - 0.968183, (GLfloat) - 0.188900, (GLfloat) 0.164128,
+ (GLfloat) - 0.966894, (GLfloat) - 0.198288, (GLfloat) 0.160620,
+ (GLfloat) - 0.979161, (GLfloat) - 0.122085, (GLfloat) 0.162295,
+ (GLfloat) - 0.979216, (GLfloat) - 0.120924, (GLfloat) 0.162831,
+ (GLfloat) - 0.283620, (GLfloat) - 0.936578, (GLfloat) 0.205866,
+ (GLfloat) - 0.264055, (GLfloat) - 0.947923, (GLfloat) 0.178091,
+ (GLfloat) - 0.315105, (GLfloat) - 0.946548, (GLfloat) 0.068965,
+ (GLfloat) - 0.304029, (GLfloat) - 0.949849, (GLfloat) 0.073162,
+ (GLfloat) - 0.727074, (GLfloat) - 0.675149, (GLfloat) 0.124651,
+ (GLfloat) - 0.751597, (GLfloat) - 0.644138, (GLfloat) 0.142086,
+ (GLfloat) - 0.595577, (GLfloat) - 0.717790, (GLfloat) 0.360647,
+ (GLfloat) - 0.614268, (GLfloat) - 0.686473, (GLfloat) 0.389139,
+ (GLfloat) - 0.264055, (GLfloat) - 0.947923, (GLfloat) - 0.178092,
+ (GLfloat) - 0.283620, (GLfloat) - 0.936578, (GLfloat) - 0.205866,
+ (GLfloat) - 0.595576, (GLfloat) - 0.717790, (GLfloat) - 0.360646,
+ (GLfloat) - 0.614268, (GLfloat) - 0.686473, (GLfloat) - 0.389139,
+ (GLfloat) - 0.751597, (GLfloat) - 0.644138, (GLfloat) - 0.142087,
+ (GLfloat) - 0.727074, (GLfloat) - 0.675149, (GLfloat) - 0.124651,
+ (GLfloat) - 0.304029, (GLfloat) - 0.949849, (GLfloat) - 0.073163,
+ (GLfloat) - 0.315105, (GLfloat) - 0.946548, (GLfloat) - 0.068965,
+ (GLfloat) - 0.511124, (GLfloat) - 0.173862, (GLfloat) 0.841739,
+ (GLfloat) - 0.507920, (GLfloat) - 0.180984, (GLfloat) 0.842177,
+ (GLfloat) - 0.167026, (GLfloat) - 0.217709, (GLfloat) 0.961616,
+ (GLfloat) - 0.163395, (GLfloat) - 0.208930, (GLfloat) 0.964184,
+ (GLfloat) - 0.162682, (GLfloat) - 0.257426, (GLfloat) 0.952505,
+ (GLfloat) - 0.162122, (GLfloat) - 0.255564, (GLfloat) 0.953102,
+ (GLfloat) - 0.501146, (GLfloat) - 0.246358, (GLfloat) 0.829554,
+ (GLfloat) - 0.502437, (GLfloat) - 0.243295, (GLfloat) 0.829677,
+ (GLfloat) 0.484153, (GLfloat) - 0.303994, (GLfloat) 0.820478,
+ (GLfloat) 0.489225, (GLfloat) - 0.294820, (GLfloat) 0.820816,
+ (GLfloat) 0.489881, (GLfloat) - 0.318876, (GLfloat) 0.811378,
+ (GLfloat) 0.481923, (GLfloat) - 0.335378, (GLfloat) 0.809489,
+ (GLfloat) 0.160269, (GLfloat) - 0.275036, (GLfloat) 0.947982,
+ (GLfloat) 0.153877, (GLfloat) - 0.291476, (GLfloat) 0.944120,
+ (GLfloat) 0.151647, (GLfloat) - 0.258100, (GLfloat) 0.954142,
+ (GLfloat) 0.156385, (GLfloat) - 0.248335, (GLfloat) 0.955967,
+ (GLfloat) 0.205866, (GLfloat) - 0.936578, (GLfloat) 0.283620,
+ (GLfloat) 0.178092, (GLfloat) - 0.947923, (GLfloat) 0.264055,
+ (GLfloat) 0.068965, (GLfloat) - 0.946548, (GLfloat) 0.315105,
+ (GLfloat) 0.073163, (GLfloat) - 0.949849, (GLfloat) 0.304029,
+ (GLfloat) 0.117913, (GLfloat) - 0.706722, (GLfloat) 0.697597,
+ (GLfloat) 0.138114, (GLfloat) - 0.672674, (GLfloat) 0.726935,
+ (GLfloat) 0.341480, (GLfloat) - 0.751053, (GLfloat) 0.565076,
+ (GLfloat) 0.372365, (GLfloat) - 0.719604, (GLfloat) 0.586101,
+ (GLfloat) - 0.178091, (GLfloat) - 0.947923, (GLfloat) 0.264055,
+ (GLfloat) - 0.205866, (GLfloat) - 0.936578, (GLfloat) 0.283620,
+ (GLfloat) - 0.361213, (GLfloat) - 0.721973, (GLfloat) 0.590152,
+ (GLfloat) - 0.383785, (GLfloat) - 0.697396, (GLfloat) 0.605267,
+ (GLfloat) - 0.138779, (GLfloat) - 0.668060, (GLfloat) 0.731052,
+ (GLfloat) - 0.124478, (GLfloat) - 0.692921, (GLfloat) 0.710188,
+ (GLfloat) - 0.073162, (GLfloat) - 0.949849, (GLfloat) 0.304029,
+ (GLfloat) - 0.068965, (GLfloat) - 0.946548, (GLfloat) 0.315105,
+ (GLfloat) 0.135802, (GLfloat) - 0.982944, (GLfloat) - 0.124011,
+ (GLfloat) 0.124011, (GLfloat) - 0.982944, (GLfloat) - 0.135802,
+ (GLfloat) 0.043834, (GLfloat) - 0.993006, (GLfloat) - 0.109621,
+ (GLfloat) 0.039656, (GLfloat) - 0.992607, (GLfloat) - 0.114709,
+ (GLfloat) 0.030163, (GLfloat) - 0.998998, (GLfloat) - 0.033079,
+ (GLfloat) 0.033079, (GLfloat) - 0.998998, (GLfloat) - 0.030163,
+ (GLfloat) 0.109621, (GLfloat) - 0.993006, (GLfloat) - 0.043834,
+ (GLfloat) 0.114709, (GLfloat) - 0.992607, (GLfloat) - 0.039656,
+ (GLfloat) - 0.124011, (GLfloat) - 0.982944, (GLfloat) - 0.135802,
+ (GLfloat) - 0.135802, (GLfloat) - 0.982944, (GLfloat) - 0.124011,
+ (GLfloat) - 0.109621, (GLfloat) - 0.993006, (GLfloat) - 0.043834,
+ (GLfloat) - 0.114709, (GLfloat) - 0.992607, (GLfloat) - 0.039656,
+ (GLfloat) - 0.033079, (GLfloat) - 0.998998, (GLfloat) - 0.030163,
+ (GLfloat) - 0.030163, (GLfloat) - 0.998998, (GLfloat) - 0.033079,
+ (GLfloat) - 0.043834, (GLfloat) - 0.993006, (GLfloat) - 0.109621,
+ (GLfloat) - 0.039656, (GLfloat) - 0.992607, (GLfloat) - 0.114709,
+ (GLfloat) - 0.135802, (GLfloat) - 0.982944, (GLfloat) 0.124011,
+ (GLfloat) - 0.124011, (GLfloat) - 0.982944, (GLfloat) 0.135802,
+ (GLfloat) - 0.043834, (GLfloat) - 0.993006, (GLfloat) 0.109621,
+ (GLfloat) - 0.039656, (GLfloat) - 0.992607, (GLfloat) 0.114709,
+ (GLfloat) - 0.030163, (GLfloat) - 0.998998, (GLfloat) 0.033079,
+ (GLfloat) - 0.033079, (GLfloat) - 0.998998, (GLfloat) 0.030163,
+ (GLfloat) - 0.109621, (GLfloat) - 0.993006, (GLfloat) 0.043834,
+ (GLfloat) - 0.114709, (GLfloat) - 0.992607, (GLfloat) 0.039656,
+ (GLfloat) 0.124011, (GLfloat) - 0.982944, (GLfloat) 0.135802,
+ (GLfloat) 0.135802, (GLfloat) - 0.982944, (GLfloat) 0.124011,
+ (GLfloat) 0.109621, (GLfloat) - 0.993006, (GLfloat) 0.043834,
+ (GLfloat) 0.114709, (GLfloat) - 0.992607, (GLfloat) 0.039656,
+ (GLfloat) 0.033079, (GLfloat) - 0.998998, (GLfloat) 0.030163,
+ (GLfloat) 0.030163, (GLfloat) - 0.998998, (GLfloat) 0.033079,
+ (GLfloat) 0.043834, (GLfloat) - 0.993006, (GLfloat) 0.109621,
+ (GLfloat) 0.039656, (GLfloat) - 0.992607, (GLfloat) 0.114709,
+};
+
+unsigned short int s1_2_POLS[] =
+{
+ 3, 12, 76, 74, 1, 3, 12, 74, 82, 1, 3, 22, 78, 74, 1, 3, 22, 74, 76, 1,
+ 3, 78, 20, 80, 1, 3, 80, 74, 78, 1, 3, 80, 28, 82, 1, 3, 82, 74, 80, 1,
+ 3, 13, 84, 77, 1, 3, 13, 77, 88, 1, 3, 84, 24, 86, 1, 3, 86, 77, 84, 1,
+ 3, 86, 20, 78, 1, 3, 78, 77, 86, 1, 3, 22, 88, 77, 1, 3, 22, 77, 78, 1,
+ 3, 14, 90, 85, 1, 3, 14, 85, 93, 1, 3, 26, 91, 85, 1, 3, 26, 85, 90, 1,
+ 3, 20, 86, 85, 1, 3, 20, 85, 91, 1, 3, 86, 24, 93, 1, 3, 93, 85, 86, 1,
+ 3, 15, 95, 79, 1, 3, 15, 79, 97, 1, 3, 95, 28, 80, 1, 3, 80, 79, 95, 1,
+ 3, 20, 91, 79, 1, 3, 20, 79, 80, 1, 3, 26, 97, 79, 1, 3, 26, 79, 91, 1,
+ 3, 13, 99, 83, 1, 3, 13, 83, 84, 1, 3, 99, 30, 101, 1, 3, 101, 83, 99, 1,
+ 3, 23, 102, 83, 1, 3, 23, 83, 101, 1, 3, 24, 84, 83, 1, 3, 24, 83, 102, 1,
+ 3, 108, 16, 104, 1, 3, 104, 100, 108, 1, 3, 32, 106, 100, 1, 3, 32, 100, 104, 1,
+ 3, 106, 23, 101, 1, 3, 101, 100, 106, 1, 3, 30, 108, 100, 1, 3, 30, 100, 101, 1,
+ 3, 17, 110, 105, 1, 3, 17, 105, 113, 1, 3, 110, 33, 111, 1, 3, 111, 105, 110, 1,
+ 3, 23, 106, 105, 1, 3, 23, 105, 111, 1, 3, 106, 32, 113, 1, 3, 113, 105, 106, 1,
+ 3, 114, 14, 93, 1, 3, 93, 92, 114, 1, 3, 24, 102, 92, 1, 3, 24, 92, 93, 1,
+ 3, 23, 111, 92, 1, 3, 23, 92, 102, 1, 3, 33, 114, 92, 1, 3, 33, 92, 111, 1,
+ 3, 104, 16, 116, 1, 3, 116, 103, 104, 1, 3, 35, 118, 103, 1, 3, 35, 103, 116, 1,
+ 3, 118, 31, 119, 1, 3, 119, 103, 118, 1, 3, 32, 104, 103, 1, 3, 32, 103, 119, 1,
+ 3, 125, 18, 121, 1, 3, 121, 117, 125, 1, 3, 36, 123, 117, 1, 3, 36, 117, 121, 1,
+ 3, 123, 31, 118, 1, 3, 118, 117, 123, 1, 3, 35, 125, 117, 1, 3, 35, 117, 118, 1,
+ 3, 19, 127, 122, 1, 3, 19, 122, 130, 1, 3, 37, 128, 122, 1, 3, 37, 122, 127, 1,
+ 3, 128, 31, 123, 1, 3, 123, 122, 128, 1, 3, 36, 130, 122, 1, 3, 36, 122, 123, 1,
+ 3, 17, 113, 112, 1, 3, 17, 112, 131, 1, 3, 32, 119, 112, 1, 3, 32, 112, 113, 1,
+ 3, 119, 31, 128, 1, 3, 128, 112, 119, 1, 3, 37, 131, 112, 1, 3, 37, 112, 128, 1,
+ 3, 121, 18, 133, 1, 3, 133, 120, 121, 1, 3, 39, 134, 120, 1, 3, 39, 120, 133, 1,
+ 3, 134, 27, 135, 1, 3, 135, 120, 134, 1, 3, 36, 121, 120, 1, 3, 36, 120, 135, 1,
+ 3, 12, 82, 81, 1, 3, 12, 81, 138, 1, 3, 28, 136, 81, 1, 3, 28, 81, 82, 1,
+3, 27, 134, 81, 1, 3, 27, 81, 136, 1, 3, 134, 39, 138, 1, 3, 138, 81, 134, 1,
+ 3, 95, 15, 139, 1, 3, 139, 94, 95, 1, 3, 40, 140, 94, 1, 3, 40, 94, 139, 1,
+ 3, 27, 136, 94, 1, 3, 27, 94, 140, 1, 3, 28, 95, 94, 1, 3, 28, 94, 136, 1,
+ 3, 19, 130, 129, 1, 3, 19, 129, 141, 1, 3, 130, 36, 135, 1, 3, 135, 129, 130, 1,
+ 3, 27, 140, 129, 1, 3, 27, 129, 135, 1, 3, 140, 40, 141, 1, 3, 141, 129, 140, 1,
+ 3, 14, 114, 89, 1, 3, 14, 89, 90, 1, 3, 114, 33, 142, 1, 3, 142, 89, 114, 1,
+ 3, 25, 143, 89, 1, 3, 25, 89, 142, 1, 3, 143, 26, 90, 1, 3, 90, 89, 143, 1,
+ 3, 17, 131, 109, 1, 3, 17, 109, 110, 1, 3, 131, 37, 144, 1, 3, 144, 109, 131, 1,
+ 3, 25, 142, 109, 1, 3, 25, 109, 144, 1, 3, 142, 33, 110, 1, 3, 110, 109, 142, 1,
+ 3, 19, 141, 126, 1, 3, 19, 126, 127, 1, 3, 141, 40, 145, 1, 3, 145, 126, 141, 1,
+ 3, 25, 144, 126, 1, 3, 25, 126, 145, 1, 3, 144, 37, 127, 1, 3, 127, 126, 144, 1,
+ 3, 15, 97, 96, 1, 3, 15, 96, 139, 1, 3, 97, 26, 143, 1, 3, 143, 96, 97, 1,
+3, 25, 145, 96, 1, 3, 25, 96, 143, 1, 3, 145, 40, 139, 1, 3, 139, 96, 145, 1,
+ 3, 12, 146, 75, 1, 3, 12, 75, 76, 1, 3, 146, 41, 148, 1, 3, 148, 75, 146, 1,
+ 3, 21, 149, 75, 1, 3, 21, 75, 148, 1, 3, 149, 22, 76, 1, 3, 76, 75, 149, 1,
+ 3, 155, 8, 151, 1, 3, 151, 147, 155, 1, 3, 43, 153, 147, 1, 3, 43, 147, 151, 1,
+ 3, 153, 21, 148, 1, 3, 148, 147, 153, 1, 3, 41, 155, 147, 1, 3, 41, 147, 148, 1,
+ 3, 160, 11, 157, 1, 3, 157, 152, 160, 1, 3, 44, 158, 152, 1, 3, 44, 152, 157, 1,
+ 3, 158, 21, 153, 1, 3, 153, 152, 158, 1, 3, 43, 160, 152, 1, 3, 43, 152, 153, 1,
+ 3, 13, 88, 87, 1, 3, 13, 87, 161, 1, 3, 88, 22, 149, 1, 3, 149, 87, 88, 1,
+3, 21, 158, 87, 1, 3, 21, 87, 149, 1, 3, 158, 44, 161, 1, 3, 161, 87, 158, 1,
+ 3, 18, 162, 132, 1, 3, 18, 132, 133, 1, 3, 162, 45, 164, 1, 3, 164, 132, 162, 1,
+ 3, 38, 165, 132, 1, 3, 38, 132, 164, 1, 3, 165, 39, 133, 1, 3, 133, 132, 165, 1,
+ 3, 170, 9, 167, 1, 3, 167, 163, 170, 1, 3, 47, 168, 163, 1, 3, 47, 163, 167, 1,
+ 3, 168, 38, 164, 1, 3, 164, 163, 168, 1, 3, 45, 170, 163, 1, 3, 45, 163, 164, 1,
+3, 8, 155, 154, 1, 3, 8, 154, 173, 1, 3, 155, 41, 171, 1, 3, 171, 154, 155, 1,
+ 3, 38, 168, 154, 1, 3, 38, 154, 171, 1, 3, 168, 47, 173, 1, 3, 173, 154, 168, 1,
+ 3, 146, 12, 138, 1, 3, 138, 137, 146, 1, 3, 39, 165, 137, 1, 3, 39, 137, 138, 1,
+ 3, 165, 38, 171, 1, 3, 171, 137, 165, 1, 3, 41, 146, 137, 1, 3, 41, 137, 171, 1,
+ 3, 16, 108, 107, 1, 3, 16, 107, 177, 1, 3, 108, 30, 174, 1, 3, 174, 107, 108, 1,
+ 3, 29, 176, 107, 1, 3, 29, 107, 174, 1, 3, 176, 50, 177, 1, 3, 177, 107, 176, 1,
+ 3, 99, 13, 161, 1, 3, 161, 98, 99, 1, 3, 44, 178, 98, 1, 3, 44, 98, 161, 1,
+ 3, 178, 29, 174, 1, 3, 174, 98, 178, 1, 3, 30, 99, 98, 1, 3, 30, 98, 174, 1,
+ 3, 11, 180, 156, 1, 3, 11, 156, 157, 1, 3, 180, 49, 181, 1, 3, 181, 156, 180, 1,
+ 3, 29, 178, 156, 1, 3, 29, 156, 181, 1, 3, 178, 44, 157, 1, 3, 157, 156, 178, 1,
+ 3, 185, 10, 183, 1, 3, 183, 175, 185, 1, 3, 50, 176, 175, 1, 3, 50, 175, 183, 1,
+ 3, 176, 29, 181, 1, 3, 181, 175, 176, 1, 3, 49, 185, 175, 1, 3, 49, 175, 181, 1,
+ 3, 162, 18, 125, 1, 3, 125, 124, 162, 1, 3, 35, 186, 124, 1, 3, 35, 124, 125, 1,
+ 3, 186, 34, 187, 1, 3, 187, 124, 186, 1, 3, 45, 162, 124, 1, 3, 45, 124, 187, 1,
+ 3, 116, 16, 177, 1, 3, 177, 115, 116, 1, 3, 50, 188, 115, 1, 3, 50, 115, 177, 1,
+ 3, 188, 34, 186, 1, 3, 186, 115, 188, 1, 3, 35, 116, 115, 1, 3, 35, 115, 186, 1,
+ 3, 183, 10, 190, 1, 3, 190, 182, 183, 1, 3, 52, 191, 182, 1, 3, 52, 182, 190, 1,
+ 3, 191, 34, 188, 1, 3, 188, 182, 191, 1, 3, 188, 50, 183, 1, 3, 183, 182, 188, 1,
+ 3, 193, 9, 170, 1, 3, 170, 169, 193, 1, 3, 170, 45, 187, 1, 3, 187, 169, 170, 1,
+ 3, 187, 34, 191, 1, 3, 191, 169, 187, 1, 3, 52, 193, 169, 1, 3, 52, 169, 191, 1,
+3, 1, 196, 194, 1, 3, 1, 194, 201, 1, 3, 54, 198, 194, 1, 3, 54, 194, 196, 1,
+ 3, 198, 46, 199, 1, 3, 199, 194, 198, 1, 3, 199, 56, 201, 1, 3, 201, 194, 199, 1,
+3, 3, 203, 197, 1, 3, 3, 197, 206, 1, 3, 203, 55, 204, 1, 3, 204, 197, 203, 1,
+ 3, 46, 198, 197, 1, 3, 46, 197, 204, 1, 3, 198, 54, 206, 1, 3, 206, 197, 198, 1,
+ 3, 208, 8, 173, 1, 3, 173, 172, 208, 1, 3, 47, 207, 172, 1, 3, 47, 172, 173, 1,
+ 3, 207, 46, 204, 1, 3, 204, 172, 207, 1, 3, 55, 208, 172, 1, 3, 55, 172, 204, 1,
+3, 9, 209, 166, 1, 3, 9, 166, 167, 1, 3, 56, 199, 166, 1, 3, 56, 166, 209, 1,
+ 3, 46, 207, 166, 1, 3, 46, 166, 199, 1, 3, 207, 47, 167, 1, 3, 167, 166, 207, 1,
+3, 1, 201, 200, 1, 3, 1, 200, 214, 1, 3, 201, 56, 210, 1, 3, 210, 200, 201, 1,
+ 3, 51, 212, 200, 1, 3, 51, 200, 210, 1, 3, 212, 59, 214, 1, 3, 214, 200, 212, 1,
+ 3, 209, 9, 193, 1, 3, 193, 192, 209, 1, 3, 52, 215, 192, 1, 3, 52, 192, 193, 1,
+ 3, 215, 51, 210, 1, 3, 210, 192, 215, 1, 3, 56, 209, 192, 1, 3, 56, 192, 210, 1,
+ 3, 190, 10, 216, 1, 3, 216, 189, 190, 1, 3, 57, 217, 189, 1, 3, 57, 189, 216, 1,
+ 3, 217, 51, 215, 1, 3, 215, 189, 217, 1, 3, 52, 190, 189, 1, 3, 52, 189, 215, 1,
+3, 0, 219, 211, 1, 3, 0, 211, 221, 1, 3, 219, 59, 212, 1, 3, 212, 211, 219, 1,
+ 3, 51, 217, 211, 1, 3, 51, 211, 212, 1, 3, 217, 57, 221, 1, 3, 221, 211, 217, 1,
+3, 0, 221, 220, 1, 3, 0, 220, 226, 1, 3, 221, 57, 222, 1, 3, 222, 220, 221, 1,
+ 3, 222, 48, 224, 1, 3, 224, 220, 222, 1, 3, 62, 226, 220, 1, 3, 62, 220, 224, 1,
+ 3, 10, 185, 184, 1, 3, 10, 184, 216, 1, 3, 185, 49, 227, 1, 3, 227, 184, 185, 1,
+ 3, 48, 222, 184, 1, 3, 48, 184, 227, 1, 3, 57, 216, 184, 1, 3, 57, 184, 222, 1,
+ 3, 180, 11, 228, 1, 3, 228, 179, 180, 1, 3, 60, 229, 179, 1, 3, 60, 179, 228, 1,
+ 3, 229, 48, 227, 1, 3, 227, 179, 229, 1, 3, 49, 180, 179, 1, 3, 49, 179, 227, 1,
+3, 2, 231, 223, 1, 3, 2, 223, 233, 1, 3, 231, 62, 224, 1, 3, 224, 223, 231, 1,
+ 3, 48, 229, 223, 1, 3, 48, 223, 224, 1, 3, 229, 60, 233, 1, 3, 233, 223, 229, 1,
+3, 2, 233, 232, 1, 3, 2, 232, 237, 1, 3, 233, 60, 234, 1, 3, 234, 232, 233, 1,
+ 3, 42, 235, 232, 1, 3, 42, 232, 234, 1, 3, 235, 64, 237, 1, 3, 237, 232, 235, 1,
+ 3, 228, 11, 160, 1, 3, 160, 159, 228, 1, 3, 43, 238, 159, 1, 3, 43, 159, 160, 1,
+ 3, 238, 42, 234, 1, 3, 234, 159, 238, 1, 3, 60, 228, 159, 1, 3, 60, 159, 234, 1,
+ 3, 151, 8, 208, 1, 3, 208, 150, 151, 1, 3, 55, 239, 150, 1, 3, 55, 150, 208, 1,
+ 3, 239, 42, 238, 1, 3, 238, 150, 239, 1, 3, 43, 151, 150, 1, 3, 43, 150, 238, 1,
+3, 3, 241, 202, 1, 3, 3, 202, 203, 1, 3, 241, 64, 235, 1, 3, 235, 202, 241, 1,
+ 3, 42, 239, 202, 1, 3, 42, 202, 235, 1, 3, 239, 55, 203, 1, 3, 203, 202, 239, 1,
+ 3, 245, 2, 237, 1, 3, 237, 236, 245, 1, 3, 64, 242, 236, 1, 3, 64, 236, 237, 1,
+ 3, 242, 63, 244, 1, 3, 244, 236, 242, 1, 3, 68, 245, 236, 1, 3, 68, 236, 244, 1,
+ 3, 241, 3, 246, 1, 3, 246, 240, 241, 1, 3, 65, 248, 240, 1, 3, 65, 240, 246, 1,
+ 3, 248, 63, 242, 1, 3, 242, 240, 248, 1, 3, 64, 241, 240, 1, 3, 64, 240, 242, 1,
+3, 4, 250, 247, 1, 3, 4, 247, 253, 1, 3, 67, 251, 247, 1, 3, 67, 247, 250, 1,
+ 3, 63, 248, 247, 1, 3, 63, 247, 251, 1, 3, 248, 65, 253, 1, 3, 253, 247, 248, 1,
+3, 7, 255, 243, 1, 3, 7, 243, 257, 1, 3, 255, 68, 244, 1, 3, 244, 243, 255, 1,
+ 3, 63, 251, 243, 1, 3, 63, 243, 244, 1, 3, 67, 257, 243, 1, 3, 67, 243, 251, 1,
+ 3, 246, 3, 206, 1, 3, 206, 205, 246, 1, 3, 54, 258, 205, 1, 3, 54, 205, 206, 1,
+ 3, 258, 53, 259, 1, 3, 259, 205, 258, 1, 3, 65, 246, 205, 1, 3, 65, 205, 259, 1,
+ 3, 196, 1, 260, 1, 3, 260, 195, 196, 1, 3, 69, 262, 195, 1, 3, 69, 195, 260, 1,
+ 3, 53, 258, 195, 1, 3, 53, 195, 262, 1, 3, 258, 54, 196, 1, 3, 196, 195, 258, 1,
+3, 5, 264, 261, 1, 3, 5, 261, 267, 1, 3, 70, 265, 261, 1, 3, 70, 261, 264, 1,
+ 3, 53, 262, 261, 1, 3, 53, 261, 265, 1, 3, 262, 69, 267, 1, 3, 267, 261, 262, 1,
+3, 4, 253, 252, 1, 3, 4, 252, 268, 1, 3, 253, 65, 259, 1, 3, 259, 252, 253, 1,
+ 3, 53, 265, 252, 1, 3, 53, 252, 259, 1, 3, 70, 268, 252, 1, 3, 70, 252, 265, 1,
+ 3, 260, 1, 214, 1, 3, 214, 213, 260, 1, 3, 59, 269, 213, 1, 3, 59, 213, 214, 1,
+ 3, 269, 58, 270, 1, 3, 270, 213, 269, 1, 3, 69, 260, 213, 1, 3, 69, 213, 270, 1,
+ 3, 219, 0, 271, 1, 3, 271, 218, 219, 1, 3, 71, 273, 218, 1, 3, 71, 218, 271, 1,
+ 3, 273, 58, 269, 1, 3, 269, 218, 273, 1, 3, 59, 219, 218, 1, 3, 59, 218, 269, 1,
+3, 6, 275, 272, 1, 3, 6, 272, 278, 1, 3, 72, 276, 272, 1, 3, 72, 272, 275, 1,
+ 3, 58, 273, 272, 1, 3, 58, 272, 276, 1, 3, 273, 71, 278, 1, 3, 278, 272, 273, 1,
+3, 5, 267, 266, 1, 3, 5, 266, 279, 1, 3, 267, 69, 270, 1, 3, 270, 266, 267, 1,
+ 3, 58, 276, 266, 1, 3, 58, 266, 270, 1, 3, 72, 279, 266, 1, 3, 72, 266, 276, 1,
+ 3, 271, 0, 226, 1, 3, 226, 225, 271, 1, 3, 226, 62, 280, 1, 3, 280, 225, 226, 1,
+ 3, 61, 281, 225, 1, 3, 61, 225, 280, 1, 3, 71, 271, 225, 1, 3, 71, 225, 281, 1,
+ 3, 231, 2, 245, 1, 3, 245, 230, 231, 1, 3, 68, 282, 230, 1, 3, 68, 230, 245, 1,
+ 3, 282, 61, 280, 1, 3, 280, 230, 282, 1, 3, 62, 231, 230, 1, 3, 62, 230, 280, 1,
+3, 7, 283, 254, 1, 3, 7, 254, 255, 1, 3, 73, 284, 254, 1, 3, 73, 254, 283, 1,
+ 3, 61, 282, 254, 1, 3, 61, 254, 284, 1, 3, 282, 68, 255, 1, 3, 255, 254, 282, 1,
+3, 6, 278, 277, 1, 3, 6, 277, 285, 1, 3, 278, 71, 281, 1, 3, 281, 277, 278, 1,
+ 3, 61, 284, 277, 1, 3, 61, 277, 281, 1, 3, 73, 285, 277, 1, 3, 73, 277, 284, 1,
+3, 4, 268, 249, 1, 3, 4, 249, 250, 1, 3, 268, 70, 286, 1, 3, 286, 249, 268, 1,
+ 3, 66, 287, 249, 1, 3, 66, 249, 286, 1, 3, 287, 67, 250, 1, 3, 250, 249, 287, 1,
+3, 5, 279, 263, 1, 3, 5, 263, 264, 1, 3, 279, 72, 288, 1, 3, 288, 263, 279, 1,
+ 3, 66, 286, 263, 1, 3, 66, 263, 288, 1, 3, 286, 70, 264, 1, 3, 264, 263, 286, 1,
+3, 6, 285, 274, 1, 3, 6, 274, 275, 1, 3, 285, 73, 289, 1, 3, 289, 274, 285, 1,
+ 3, 66, 288, 274, 1, 3, 66, 274, 289, 1, 3, 288, 72, 275, 1, 3, 275, 274, 288, 1,
+3, 7, 257, 256, 1, 3, 7, 256, 283, 1, 3, 257, 67, 287, 1, 3, 287, 256, 257, 1,
+ 3, 66, 289, 256, 1, 3, 66, 256, 287, 1, 3, 289, 73, 283, 1, 3, 283, 256, 289, 1,
+
+ 0
+};
+
+struct lwo LWO_s1_2 =
+{
+ 290, /* number of points */
+ s1_2_PNTS, s1_2_normals, s1_2_POLS, 0L
+};
+
+#endif /* USE_GL */
+
+/* End of s1_2.c */
--- /dev/null
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)s1_3.c 4.2 97/04/20 xlockmore";
+
+#endif
+
+/*-
+ * Points, polygons, and normal vectors to render "s1_3" in 3D.
+ *
+ * Generated by lw2ogl. Link this with your program but do
+ * not edit by hand.
+ */
+
+#include "xlock.h"
+
+#ifdef USE_GL
+
+#include <GL/gl.h>
+#include "glx/buildlwo.h"
+
+GLfloat s1_3_PNTS[] =
+{
+ (GLfloat) 0.386176, (GLfloat) 0.201223, (GLfloat) - 0.326853,
+ (GLfloat) 0.386176, (GLfloat) 0.201223, (GLfloat) - 0.673147,
+ (GLfloat) 0.704261, (GLfloat) 0.116939, (GLfloat) - 0.326853,
+ (GLfloat) 0.704261, (GLfloat) 0.116939, (GLfloat) - 0.673147,
+ (GLfloat) 0.642426, (GLfloat) 0.035438, (GLfloat) - 0.638667,
+ (GLfloat) 0.369306, (GLfloat) 0.083596, (GLfloat) - 0.638667,
+ (GLfloat) 0.369306, (GLfloat) 0.083596, (GLfloat) - 0.361333,
+ (GLfloat) 0.642426, (GLfloat) 0.035438, (GLfloat) - 0.361333,
+ (GLfloat) 0.845007, (GLfloat) 0.268518, (GLfloat) - 0.678159,
+ (GLfloat) 0.620074, (GLfloat) 0.472355, (GLfloat) - 0.678159,
+ (GLfloat) 0.620074, (GLfloat) 0.472355, (GLfloat) - 0.321841,
+ (GLfloat) 0.845007, (GLfloat) 0.268518, (GLfloat) - 0.321841,
+ (GLfloat) 1.115671, (GLfloat) 0.352342, (GLfloat) - 0.673147,
+ (GLfloat) 1.115671, (GLfloat) 0.352342, (GLfloat) - 0.326853,
+ (GLfloat) 1.204957, (GLfloat) 0.421449, (GLfloat) - 0.361333,
+ (GLfloat) 1.204957, (GLfloat) 0.421449, (GLfloat) - 0.638667,
+ (GLfloat) 0.937575, (GLfloat) 0.636550, (GLfloat) - 0.326853,
+ (GLfloat) 1.066291, (GLfloat) 0.661627, (GLfloat) - 0.361333,
+ (GLfloat) 0.937575, (GLfloat) 0.636550, (GLfloat) - 0.673147,
+ (GLfloat) 1.066291, (GLfloat) 0.661627, (GLfloat) - 0.638667,
+ (GLfloat) 1.227578, (GLfloat) 0.320768, (GLfloat) - 0.500000,
+ (GLfloat) 1.017091, (GLfloat) 0.274757, (GLfloat) - 0.500000,
+ (GLfloat) 1.148052, (GLfloat) 0.300668, (GLfloat) - 0.500000,
+ (GLfloat) 1.107591, (GLfloat) 0.526937, (GLfloat) - 0.260702,
+ (GLfloat) 1.194861, (GLfloat) 0.375780, (GLfloat) - 0.324904,
+ (GLfloat) 1.151611, (GLfloat) 0.550768, (GLfloat) - 0.500000,
+ (GLfloat) 1.230206, (GLfloat) 0.391113, (GLfloat) - 0.500000,
+ (GLfloat) 1.107591, (GLfloat) 0.526937, (GLfloat) - 0.739298,
+ (GLfloat) 1.194861, (GLfloat) 0.375780, (GLfloat) - 0.675096,
+ (GLfloat) 0.885754, (GLfloat) 0.445570, (GLfloat) - 0.261655,
+ (GLfloat) 1.026623, (GLfloat) 0.494446, (GLfloat) - 0.263891,
+ (GLfloat) 0.987605, (GLfloat) 0.733106, (GLfloat) - 0.500000,
+ (GLfloat) 1.019270, (GLfloat) 0.677486, (GLfloat) - 0.324904,
+ (GLfloat) 1.141425, (GLfloat) 0.544887, (GLfloat) - 0.322437,
+ (GLfloat) 0.754416, (GLfloat) 0.616383, (GLfloat) - 0.500000,
+ (GLfloat) 0.905194, (GLfloat) 0.688224, (GLfloat) - 0.500000,
+ (GLfloat) 1.019270, (GLfloat) 0.677486, (GLfloat) - 0.675096,
+ (GLfloat) 1.052644, (GLfloat) 0.698661, (GLfloat) - 0.500000,
+ (GLfloat) 0.885754, (GLfloat) 0.445570, (GLfloat) - 0.738345,
+ (GLfloat) 1.026623, (GLfloat) 0.494446, (GLfloat) - 0.736109,
+ (GLfloat) 1.141425, (GLfloat) 0.544887, (GLfloat) - 0.677562,
+ (GLfloat) 0.982068, (GLfloat) 0.320307, (GLfloat) - 0.674787,
+ (GLfloat) 0.801608, (GLfloat) 0.169177, (GLfloat) - 0.500000,
+ (GLfloat) 0.885904, (GLfloat) 0.231457, (GLfloat) - 0.500000,
+ (GLfloat) 0.982068, (GLfloat) 0.320307, (GLfloat) - 0.325213,
+ (GLfloat) 0.789439, (GLfloat) 0.570833, (GLfloat) - 0.674787,
+ (GLfloat) 0.617093, (GLfloat) 0.264045, (GLfloat) - 0.738345,
+ (GLfloat) 0.732540, (GLfloat) 0.370437, (GLfloat) - 0.742944,
+ (GLfloat) 0.617093, (GLfloat) 0.264045, (GLfloat) - 0.261655,
+ (GLfloat) 0.732540, (GLfloat) 0.370437, (GLfloat) - 0.257056,
+ (GLfloat) 0.789439, (GLfloat) 0.570833, (GLfloat) - 0.325213,
+ (GLfloat) 0.432577, (GLfloat) 0.358913, (GLfloat) - 0.500000,
+ (GLfloat) 0.579177, (GLfloat) 0.509417, (GLfloat) - 0.500000,
+ (GLfloat) 0.513237, (GLfloat) 0.088956, (GLfloat) - 0.739298,
+ (GLfloat) 0.545218, (GLfloat) 0.159081, (GLfloat) - 0.736109,
+ (GLfloat) 0.752404, (GLfloat) 0.194475, (GLfloat) - 0.674787,
+ (GLfloat) 0.481782, (GLfloat) 0.333615, (GLfloat) - 0.674787,
+ (GLfloat) 0.481782, (GLfloat) 0.333615, (GLfloat) - 0.325213,
+ (GLfloat) 0.279139, (GLfloat) 0.132156, (GLfloat) - 0.500000,
+ (GLfloat) 0.328343, (GLfloat) 0.216547, (GLfloat) - 0.500000,
+ (GLfloat) 0.752404, (GLfloat) 0.194475, (GLfloat) - 0.325213,
+ (GLfloat) 0.513237, (GLfloat) 0.088956, (GLfloat) - 0.260702,
+ (GLfloat) 0.545218, (GLfloat) 0.159081, (GLfloat) - 0.263891,
+ (GLfloat) 0.747335, (GLfloat) 0.045755, (GLfloat) - 0.500000,
+ (GLfloat) 0.762094, (GLfloat) 0.101615, (GLfloat) - 0.500000,
+ (GLfloat) 0.684631, (GLfloat) 0.057942, (GLfloat) - 0.675096,
+ (GLfloat) 0.502661, (GLfloat) 0.041337, (GLfloat) - 0.500000,
+ (GLfloat) 0.679568, (GLfloat) 0.022087, (GLfloat) - 0.500000,
+ (GLfloat) 0.684631, (GLfloat) 0.057942, (GLfloat) - 0.324904,
+ (GLfloat) 0.342054, (GLfloat) 0.121167, (GLfloat) - 0.675096,
+ (GLfloat) 0.504703, (GLfloat) 0.052920, (GLfloat) - 0.677562,
+ (GLfloat) 0.342054, (GLfloat) 0.121167, (GLfloat) - 0.324904,
+ (GLfloat) 0.329838, (GLfloat) 0.083754, (GLfloat) - 0.500000,
+ (GLfloat) 0.504703, (GLfloat) 0.052920, (GLfloat) - 0.322437,
+ (GLfloat) 1.188046, (GLfloat) 0.322006, (GLfloat) - 0.596277,
+ (GLfloat) 1.077742, (GLfloat) 0.301825, (GLfloat) - 0.594388,
+ (GLfloat) 1.139957, (GLfloat) 0.313586, (GLfloat) - 0.594444,
+ (GLfloat) 1.188046, (GLfloat) 0.322006, (GLfloat) - 0.403722,
+ (GLfloat) 1.196159, (GLfloat) 0.308395, (GLfloat) - 0.500000,
+ (GLfloat) 1.230706, (GLfloat) 0.358565, (GLfloat) - 0.587500,
+ (GLfloat) 1.219224, (GLfloat) 0.334520, (GLfloat) - 0.595444,
+ (GLfloat) 1.123141, (GLfloat) 0.430895, (GLfloat) - 0.724648,
+ (GLfloat) 1.163707, (GLfloat) 0.362839, (GLfloat) - 0.676509,
+ (GLfloat) 1.123141, (GLfloat) 0.430895, (GLfloat) - 0.275352,
+ (GLfloat) 1.163707, (GLfloat) 0.362839, (GLfloat) - 0.323491,
+ (GLfloat) 1.230706, (GLfloat) 0.358565, (GLfloat) - 0.412500,
+ (GLfloat) 1.219224, (GLfloat) 0.334520, (GLfloat) - 0.404556,
+ (GLfloat) 1.077742, (GLfloat) 0.301825, (GLfloat) - 0.405612,
+ (GLfloat) 1.139957, (GLfloat) 0.313586, (GLfloat) - 0.405556,
+ (GLfloat) 1.191900, (GLfloat) 0.469528, (GLfloat) - 0.409500,
+ (GLfloat) 1.221821, (GLfloat) 0.401211, (GLfloat) - 0.417500,
+ (GLfloat) 1.239508, (GLfloat) 0.345749, (GLfloat) - 0.500000,
+ (GLfloat) 1.171456, (GLfloat) 0.461189, (GLfloat) - 0.294000,
+ (GLfloat) 1.207091, (GLfloat) 0.397037, (GLfloat) - 0.339125,
+ (GLfloat) 1.171456, (GLfloat) 0.461189, (GLfloat) - 0.706000,
+ (GLfloat) 1.207091, (GLfloat) 0.397037, (GLfloat) - 0.660875,
+ (GLfloat) 1.191900, (GLfloat) 0.469528, (GLfloat) - 0.590500,
+ (GLfloat) 1.221821, (GLfloat) 0.401211, (GLfloat) - 0.582500,
+ (GLfloat) 1.011218, (GLfloat) 0.399402, (GLfloat) - 0.279763,
+ (GLfloat) 1.075195, (GLfloat) 0.416935, (GLfloat) - 0.279631,
+ (GLfloat) 1.025784, (GLfloat) 0.594229, (GLfloat) - 0.275352,
+ (GLfloat) 1.074463, (GLfloat) 0.512562, (GLfloat) - 0.259306,
+ (GLfloat) 1.155185, (GLfloat) 0.444556, (GLfloat) - 0.276838,
+ (GLfloat) 0.960879, (GLfloat) 0.703118, (GLfloat) - 0.403722,
+ (GLfloat) 0.985218, (GLfloat) 0.662285, (GLfloat) - 0.323491,
+ (GLfloat) 1.083956, (GLfloat) 0.612743, (GLfloat) - 0.294000,
+ (GLfloat) 1.059471, (GLfloat) 0.609015, (GLfloat) - 0.276838,
+ (GLfloat) 0.911431, (GLfloat) 0.545768, (GLfloat) - 0.279763,
+ (GLfloat) 0.978052, (GLfloat) 0.571957, (GLfloat) - 0.279631,
+ (GLfloat) 1.101400, (GLfloat) 0.626279, (GLfloat) - 0.409500,
+ (GLfloat) 1.098258, (GLfloat) 0.615227, (GLfloat) - 0.335375,
+ (GLfloat) 1.128758, (GLfloat) 0.537574, (GLfloat) - 0.278500,
+ (GLfloat) 1.024706, (GLfloat) 0.715367, (GLfloat) - 0.412500,
+ (GLfloat) 1.046216, (GLfloat) 0.675680, (GLfloat) - 0.339125,
+ (GLfloat) 1.180758, (GLfloat) 0.472333, (GLfloat) - 0.335375,
+ (GLfloat) 0.844907, (GLfloat) 0.643346, (GLfloat) - 0.405612,
+ (GLfloat) 0.913289, (GLfloat) 0.675305, (GLfloat) - 0.405556,
+ (GLfloat) 0.960879, (GLfloat) 0.703118, (GLfloat) - 0.596277,
+ (GLfloat) 0.952766, (GLfloat) 0.716730, (GLfloat) - 0.500000,
+ (GLfloat) 0.995432, (GLfloat) 0.719051, (GLfloat) - 0.404556,
+ (GLfloat) 1.025784, (GLfloat) 0.594229, (GLfloat) - 0.724648,
+ (GLfloat) 0.985218, (GLfloat) 0.662285, (GLfloat) - 0.676509,
+ (GLfloat) 1.024706, (GLfloat) 0.715367, (GLfloat) - 0.587500,
+ (GLfloat) 0.995432, (GLfloat) 0.719051, (GLfloat) - 0.595444,
+ (GLfloat) 0.844907, (GLfloat) 0.643346, (GLfloat) - 0.594388,
+ (GLfloat) 0.913289, (GLfloat) 0.675305, (GLfloat) - 0.594444,
+ (GLfloat) 1.101400, (GLfloat) 0.626279, (GLfloat) - 0.590500,
+ (GLfloat) 1.057196, (GLfloat) 0.686350, (GLfloat) - 0.582500,
+ (GLfloat) 1.018008, (GLfloat) 0.729398, (GLfloat) - 0.500000,
+ (GLfloat) 1.083956, (GLfloat) 0.612743, (GLfloat) - 0.706000,
+ (GLfloat) 1.046216, (GLfloat) 0.675680, (GLfloat) - 0.660875,
+ (GLfloat) 1.057196, (GLfloat) 0.686350, (GLfloat) - 0.417500,
+ (GLfloat) 0.911431, (GLfloat) 0.545768, (GLfloat) - 0.720237,
+ (GLfloat) 0.978052, (GLfloat) 0.571957, (GLfloat) - 0.720369,
+ (GLfloat) 1.074463, (GLfloat) 0.512562, (GLfloat) - 0.740694,
+ (GLfloat) 1.059471, (GLfloat) 0.609015, (GLfloat) - 0.723162,
+ (GLfloat) 1.155185, (GLfloat) 0.444556, (GLfloat) - 0.723162,
+ (GLfloat) 1.011218, (GLfloat) 0.399402, (GLfloat) - 0.720237,
+ (GLfloat) 1.075195, (GLfloat) 0.416935, (GLfloat) - 0.720369,
+ (GLfloat) 1.180758, (GLfloat) 0.472333, (GLfloat) - 0.664625,
+ (GLfloat) 1.128758, (GLfloat) 0.537574, (GLfloat) - 0.721500,
+ (GLfloat) 1.098258, (GLfloat) 0.615227, (GLfloat) - 0.664625,
+ (GLfloat) 1.149055, (GLfloat) 0.549292, (GLfloat) - 0.402250,
+ (GLfloat) 1.197930, (GLfloat) 0.464638, (GLfloat) - 0.500000,
+ (GLfloat) 1.100180, (GLfloat) 0.633946, (GLfloat) - 0.500000,
+ (GLfloat) 1.149055, (GLfloat) 0.549292, (GLfloat) - 0.597750,
+ (GLfloat) 1.052796, (GLfloat) 0.338416, (GLfloat) - 0.673044,
+ (GLfloat) 0.938670, (GLfloat) 0.265970, (GLfloat) - 0.596525,
+ (GLfloat) 1.008335, (GLfloat) 0.286145, (GLfloat) - 0.595338,
+ (GLfloat) 1.086058, (GLfloat) 0.289628, (GLfloat) - 0.500000,
+ (GLfloat) 0.826297, (GLfloat) 0.209826, (GLfloat) - 0.596525,
+ (GLfloat) 0.875679, (GLfloat) 0.240722, (GLfloat) - 0.597178,
+ (GLfloat) 0.938670, (GLfloat) 0.265970, (GLfloat) - 0.403475,
+ (GLfloat) 0.948068, (GLfloat) 0.255539, (GLfloat) - 0.500000,
+ (GLfloat) 0.863485, (GLfloat) 0.349410, (GLfloat) - 0.725225,
+ (GLfloat) 0.910476, (GLfloat) 0.297260, (GLfloat) - 0.676962,
+ (GLfloat) 0.863485, (GLfloat) 0.349410, (GLfloat) - 0.274775,
+ (GLfloat) 0.910476, (GLfloat) 0.297260, (GLfloat) - 0.323037,
+ (GLfloat) 1.008335, (GLfloat) 0.286145, (GLfloat) - 0.404662,
+ (GLfloat) 0.826297, (GLfloat) 0.209826, (GLfloat) - 0.403475,
+ (GLfloat) 0.875679, (GLfloat) 0.240722, (GLfloat) - 0.402822,
+ (GLfloat) 1.052796, (GLfloat) 0.338416, (GLfloat) - 0.326956,
+ (GLfloat) 0.869854, (GLfloat) 0.606754, (GLfloat) - 0.673044,
+ (GLfloat) 0.750708, (GLfloat) 0.474572, (GLfloat) - 0.725225,
+ (GLfloat) 0.833218, (GLfloat) 0.513896, (GLfloat) - 0.722456,
+ (GLfloat) 0.961325, (GLfloat) 0.472585, (GLfloat) - 0.735969,
+ (GLfloat) 0.601974, (GLfloat) 0.366500, (GLfloat) - 0.725225,
+ (GLfloat) 0.671195, (GLfloat) 0.426029, (GLfloat) - 0.726748,
+ (GLfloat) 0.807096, (GLfloat) 0.411991, (GLfloat) - 0.741313,
+ (GLfloat) 0.675523, (GLfloat) 0.558012, (GLfloat) - 0.596525,
+ (GLfloat) 0.703717, (GLfloat) 0.526722, (GLfloat) - 0.676962,
+ (GLfloat) 0.938289, (GLfloat) 0.377245, (GLfloat) - 0.722456,
+ (GLfloat) 0.736568, (GLfloat) 0.272496, (GLfloat) - 0.725225,
+ (GLfloat) 0.793886, (GLfloat) 0.314845, (GLfloat) - 0.726748,
+ (GLfloat) 0.961325, (GLfloat) 0.472585, (GLfloat) - 0.264031,
+ (GLfloat) 0.750708, (GLfloat) 0.474572, (GLfloat) - 0.274775,
+ (GLfloat) 0.833218, (GLfloat) 0.513896, (GLfloat) - 0.277544,
+ (GLfloat) 0.869854, (GLfloat) 0.606754, (GLfloat) - 0.326956,
+ (GLfloat) 0.938289, (GLfloat) 0.377245, (GLfloat) - 0.277544,
+ (GLfloat) 0.736568, (GLfloat) 0.272496, (GLfloat) - 0.274775,
+ (GLfloat) 0.793886, (GLfloat) 0.314845, (GLfloat) - 0.273252,
+ (GLfloat) 0.807096, (GLfloat) 0.411991, (GLfloat) - 0.258687,
+ (GLfloat) 0.675523, (GLfloat) 0.558012, (GLfloat) - 0.403475,
+ (GLfloat) 0.703717, (GLfloat) 0.526722, (GLfloat) - 0.323037,
+ (GLfloat) 0.601974, (GLfloat) 0.366500, (GLfloat) - 0.274775,
+ (GLfloat) 0.671195, (GLfloat) 0.426029, (GLfloat) - 0.273252,
+ (GLfloat) 0.836591, (GLfloat) 0.655543, (GLfloat) - 0.500000,
+ (GLfloat) 0.763171, (GLfloat) 0.604996, (GLfloat) - 0.595338,
+ (GLfloat) 0.763171, (GLfloat) 0.604996, (GLfloat) - 0.404662,
+ (GLfloat) 0.512245, (GLfloat) 0.429169, (GLfloat) - 0.403475,
+ (GLfloat) 0.589401, (GLfloat) 0.500151, (GLfloat) - 0.402822,
+ (GLfloat) 0.666125, (GLfloat) 0.568442, (GLfloat) - 0.500000,
+ (GLfloat) 0.512245, (GLfloat) 0.429169, (GLfloat) - 0.596525,
+ (GLfloat) 0.589401, (GLfloat) 0.500151, (GLfloat) - 0.597178,
+ (GLfloat) 0.495371, (GLfloat) 0.238512, (GLfloat) - 0.720237,
+ (GLfloat) 0.432817, (GLfloat) 0.138665, (GLfloat) - 0.724648,
+ (GLfloat) 0.458468, (GLfloat) 0.182068, (GLfloat) - 0.720369,
+ (GLfloat) 0.656244, (GLfloat) 0.179386, (GLfloat) - 0.720237,
+ (GLfloat) 0.575807, (GLfloat) 0.208949, (GLfloat) - 0.735969,
+ (GLfloat) 0.543287, (GLfloat) 0.301992, (GLfloat) - 0.722456,
+ (GLfloat) 0.388123, (GLfloat) 0.277930, (GLfloat) - 0.594388,
+ (GLfloat) 0.428341, (GLfloat) 0.263148, (GLfloat) - 0.673044,
+ (GLfloat) 0.763492, (GLfloat) 0.139968, (GLfloat) - 0.594388,
+ (GLfloat) 0.723274, (GLfloat) 0.154750, (GLfloat) - 0.673044,
+ (GLfloat) 0.690899, (GLfloat) 0.226098, (GLfloat) - 0.722456,
+ (GLfloat) 0.617440, (GLfloat) 0.099959, (GLfloat) - 0.724648,
+ (GLfloat) 0.631969, (GLfloat) 0.136095, (GLfloat) - 0.720369,
+ (GLfloat) 0.669271, (GLfloat) 0.319498, (GLfloat) - 0.741313,
+ (GLfloat) 0.792649, (GLfloat) 0.233327, (GLfloat) - 0.676962,
+ (GLfloat) 0.545894, (GLfloat) 0.405668, (GLfloat) - 0.676962,
+ (GLfloat) 0.444878, (GLfloat) 0.352588, (GLfloat) - 0.595338,
+ (GLfloat) 0.388123, (GLfloat) 0.277930, (GLfloat) - 0.405612,
+ (GLfloat) 0.374717, (GLfloat) 0.282857, (GLfloat) - 0.500000,
+ (GLfloat) 0.309735, (GLfloat) 0.164469, (GLfloat) - 0.596277,
+ (GLfloat) 0.342801, (GLfloat) 0.212716, (GLfloat) - 0.594444,
+ (GLfloat) 0.501029, (GLfloat) 0.437003, (GLfloat) - 0.500000,
+ (GLfloat) 0.545894, (GLfloat) 0.405668, (GLfloat) - 0.323037,
+ (GLfloat) 0.444878, (GLfloat) 0.352588, (GLfloat) - 0.404662,
+ (GLfloat) 0.309735, (GLfloat) 0.164469, (GLfloat) - 0.403722,
+ (GLfloat) 0.342801, (GLfloat) 0.212716, (GLfloat) - 0.405556,
+ (GLfloat) 0.495371, (GLfloat) 0.238512, (GLfloat) - 0.279763,
+ (GLfloat) 0.428341, (GLfloat) 0.263148, (GLfloat) - 0.326956,
+ (GLfloat) 0.543287, (GLfloat) 0.301992, (GLfloat) - 0.277544,
+ (GLfloat) 0.656244, (GLfloat) 0.179386, (GLfloat) - 0.279763,
+ (GLfloat) 0.575807, (GLfloat) 0.208949, (GLfloat) - 0.264031,
+ (GLfloat) 0.432817, (GLfloat) 0.138665, (GLfloat) - 0.275352,
+ (GLfloat) 0.458468, (GLfloat) 0.182068, (GLfloat) - 0.279631,
+ (GLfloat) 0.669271, (GLfloat) 0.319498, (GLfloat) - 0.258687,
+ (GLfloat) 0.792649, (GLfloat) 0.233327, (GLfloat) - 0.323037,
+ (GLfloat) 0.690899, (GLfloat) 0.226098, (GLfloat) - 0.277544,
+ (GLfloat) 0.617440, (GLfloat) 0.099959, (GLfloat) - 0.275352,
+ (GLfloat) 0.631969, (GLfloat) 0.136095, (GLfloat) - 0.279631,
+ (GLfloat) 0.763492, (GLfloat) 0.139968, (GLfloat) - 0.405612,
+ (GLfloat) 0.723274, (GLfloat) 0.154750, (GLfloat) - 0.326956,
+ (GLfloat) 0.789307, (GLfloat) 0.175501, (GLfloat) - 0.404662,
+ (GLfloat) 0.776898, (GLfloat) 0.135041, (GLfloat) - 0.500000,
+ (GLfloat) 0.740522, (GLfloat) 0.074155, (GLfloat) - 0.403722,
+ (GLfloat) 0.747636, (GLfloat) 0.105446, (GLfloat) - 0.405556,
+ (GLfloat) 0.837513, (GLfloat) 0.201992, (GLfloat) - 0.500000,
+ (GLfloat) 0.789307, (GLfloat) 0.175501, (GLfloat) - 0.595338,
+ (GLfloat) 0.740522, (GLfloat) 0.074155, (GLfloat) - 0.596277,
+ (GLfloat) 0.747636, (GLfloat) 0.105446, (GLfloat) - 0.594444,
+ (GLfloat) 0.755907, (GLfloat) 0.070930, (GLfloat) - 0.500000,
+ (GLfloat) 0.710325, (GLfloat) 0.032750, (GLfloat) - 0.412500,
+ (GLfloat) 0.731601, (GLfloat) 0.048967, (GLfloat) - 0.404556,
+ (GLfloat) 0.694366, (GLfloat) 0.083832, (GLfloat) - 0.323491,
+ (GLfloat) 0.694366, (GLfloat) 0.083832, (GLfloat) - 0.676509,
+ (GLfloat) 0.710325, (GLfloat) 0.032750, (GLfloat) - 0.587500,
+ (GLfloat) 0.731601, (GLfloat) 0.048967, (GLfloat) - 0.595444,
+ (GLfloat) 0.592781, (GLfloat) 0.031264, (GLfloat) - 0.590500,
+ (GLfloat) 0.667212, (GLfloat) 0.026513, (GLfloat) - 0.582500,
+ (GLfloat) 0.725378, (GLfloat) 0.028862, (GLfloat) - 0.500000,
+ (GLfloat) 0.593625, (GLfloat) 0.053327, (GLfloat) - 0.706000,
+ (GLfloat) 0.666096, (GLfloat) 0.041783, (GLfloat) - 0.660875,
+ (GLfloat) 0.593625, (GLfloat) 0.053327, (GLfloat) - 0.294000,
+ (GLfloat) 0.666096, (GLfloat) 0.041783, (GLfloat) - 0.339125,
+ (GLfloat) 0.592781, (GLfloat) 0.031264, (GLfloat) - 0.409500,
+ (GLfloat) 0.667212, (GLfloat) 0.026513, (GLfloat) - 0.417500,
+ (GLfloat) 0.525128, (GLfloat) 0.119312, (GLfloat) - 0.740694,
+ (GLfloat) 0.606658, (GLfloat) 0.072023, (GLfloat) - 0.723162,
+ (GLfloat) 0.355891, (GLfloat) 0.154793, (GLfloat) - 0.676509,
+ (GLfloat) 0.421284, (GLfloat) 0.083716, (GLfloat) - 0.706000,
+ (GLfloat) 0.419921, (GLfloat) 0.106487, (GLfloat) - 0.723162,
+ (GLfloat) 0.414531, (GLfloat) 0.062694, (GLfloat) - 0.590500,
+ (GLfloat) 0.423841, (GLfloat) 0.069426, (GLfloat) - 0.664625,
+ (GLfloat) 0.507243, (GLfloat) 0.067325, (GLfloat) - 0.721500,
+ (GLfloat) 0.304584, (GLfloat) 0.104293, (GLfloat) - 0.587500,
+ (GLfloat) 0.349234, (GLfloat) 0.097654, (GLfloat) - 0.660875,
+ (GLfloat) 0.586334, (GLfloat) 0.040774, (GLfloat) - 0.664625,
+ (GLfloat) 0.294350, (GLfloat) 0.167695, (GLfloat) - 0.500000,
+ (GLfloat) 0.294978, (GLfloat) 0.129544, (GLfloat) - 0.595444,
+ (GLfloat) 0.355891, (GLfloat) 0.154793, (GLfloat) - 0.323491,
+ (GLfloat) 0.304584, (GLfloat) 0.104293, (GLfloat) - 0.412500,
+ (GLfloat) 0.294978, (GLfloat) 0.129544, (GLfloat) - 0.404556,
+ (GLfloat) 0.414531, (GLfloat) 0.062694, (GLfloat) - 0.409500,
+ (GLfloat) 0.342964, (GLfloat) 0.083687, (GLfloat) - 0.417500,
+ (GLfloat) 0.289108, (GLfloat) 0.105788, (GLfloat) - 0.500000,
+ (GLfloat) 0.421284, (GLfloat) 0.083716, (GLfloat) - 0.294000,
+ (GLfloat) 0.349234, (GLfloat) 0.097654, (GLfloat) - 0.339125,
+ (GLfloat) 0.342964, (GLfloat) 0.083687, (GLfloat) - 0.582500,
+ (GLfloat) 0.525128, (GLfloat) 0.119312, (GLfloat) - 0.259306,
+ (GLfloat) 0.419921, (GLfloat) 0.106487, (GLfloat) - 0.276838,
+ (GLfloat) 0.606658, (GLfloat) 0.072023, (GLfloat) - 0.276838,
+ (GLfloat) 0.586334, (GLfloat) 0.040774, (GLfloat) - 0.335375,
+ (GLfloat) 0.507243, (GLfloat) 0.067325, (GLfloat) - 0.278500,
+ (GLfloat) 0.423841, (GLfloat) 0.069426, (GLfloat) - 0.335375,
+ (GLfloat) 0.503173, (GLfloat) 0.044243, (GLfloat) - 0.597750,
+ (GLfloat) 0.599438, (GLfloat) 0.027269, (GLfloat) - 0.500000,
+ (GLfloat) 0.406908, (GLfloat) 0.061217, (GLfloat) - 0.500000,
+ (GLfloat) 0.503173, (GLfloat) 0.044243, (GLfloat) - 0.402250,
+};
+
+GLfloat s1_3_normals[] =
+{
+ (GLfloat) 0.156072, (GLfloat) - 0.866199, (GLfloat) - 0.474700,
+ (GLfloat) 0.133323, (GLfloat) - 0.866325, (GLfloat) - 0.481359,
+ (GLfloat) 0.156764, (GLfloat) - 0.975995, (GLfloat) - 0.151191,
+ (GLfloat) 0.165110, (GLfloat) - 0.975177, (GLfloat) - 0.147543,
+ (GLfloat) 0.361485, (GLfloat) - 0.917862, (GLfloat) - 0.163883,
+ (GLfloat) 0.371348, (GLfloat) - 0.914502, (GLfloat) - 0.160580,
+ (GLfloat) 0.350149, (GLfloat) - 0.787582, (GLfloat) - 0.507060,
+ (GLfloat) 0.331724, (GLfloat) - 0.792390, (GLfloat) - 0.511934,
+ (GLfloat) 0.156072, (GLfloat) - 0.866199, (GLfloat) 0.474700,
+ (GLfloat) 0.133323, (GLfloat) - 0.866325, (GLfloat) 0.481359,
+ (GLfloat) 0.331724, (GLfloat) - 0.792390, (GLfloat) 0.511934,
+ (GLfloat) 0.350149, (GLfloat) - 0.787582, (GLfloat) 0.507061,
+ (GLfloat) 0.361485, (GLfloat) - 0.917862, (GLfloat) 0.163883,
+ (GLfloat) 0.371348, (GLfloat) - 0.914502, (GLfloat) 0.160580,
+ (GLfloat) 0.165110, (GLfloat) - 0.975177, (GLfloat) 0.147543,
+ (GLfloat) 0.156764, (GLfloat) - 0.975995, (GLfloat) 0.151191,
+ (GLfloat) 0.952910, (GLfloat) 0.222669, (GLfloat) 0.205865,
+ (GLfloat) 0.952953, (GLfloat) 0.245285, (GLfloat) 0.178091,
+ (GLfloat) 0.977287, (GLfloat) 0.200386, (GLfloat) 0.068964,
+ (GLfloat) 0.974607, (GLfloat) 0.211631, (GLfloat) 0.073163,
+ (GLfloat) 0.910741, (GLfloat) - 0.389976, (GLfloat) 0.135901,
+ (GLfloat) 0.891878, (GLfloat) - 0.425931, (GLfloat) 0.152106,
+ (GLfloat) 0.882467, (GLfloat) - 0.235214, (GLfloat) 0.407340,
+ (GLfloat) 0.868268, (GLfloat) - 0.279083, (GLfloat) 0.410151,
+ (GLfloat) 0.952953, (GLfloat) 0.245285, (GLfloat) - 0.178091,
+ (GLfloat) 0.952910, (GLfloat) 0.222669, (GLfloat) - 0.205865,
+ (GLfloat) 0.868268, (GLfloat) - 0.279083, (GLfloat) - 0.410151,
+ (GLfloat) 0.882468, (GLfloat) - 0.235213, (GLfloat) - 0.407340,
+ (GLfloat) 0.891878, (GLfloat) - 0.425931, (GLfloat) - 0.152106,
+ (GLfloat) 0.910741, (GLfloat) - 0.389976, (GLfloat) - 0.135901,
+ (GLfloat) 0.974607, (GLfloat) 0.211631, (GLfloat) - 0.073163,
+ (GLfloat) 0.977287, (GLfloat) 0.200386, (GLfloat) - 0.068964,
+ (GLfloat) 0.086707, (GLfloat) - 0.551974, (GLfloat) 0.829341,
+ (GLfloat) 0.062265, (GLfloat) - 0.551355, (GLfloat) 0.831944,
+ (GLfloat) - 0.014960, (GLfloat) - 0.207986, (GLfloat) 0.978017,
+ (GLfloat) - 0.026687, (GLfloat) - 0.208021, (GLfloat) 0.977760,
+ (GLfloat) 0.102710, (GLfloat) - 0.133733, (GLfloat) 0.985681,
+ (GLfloat) 0.099775, (GLfloat) - 0.134244, (GLfloat) 0.985913,
+ (GLfloat) 0.231521, (GLfloat) - 0.464011, (GLfloat) 0.855039,
+ (GLfloat) 0.236951, (GLfloat) - 0.462930, (GLfloat) 0.854137,
+ (GLfloat) - 0.295570, (GLfloat) 0.436154, (GLfloat) 0.849946,
+ (GLfloat) - 0.280583, (GLfloat) 0.437172, (GLfloat) 0.854490,
+ (GLfloat) - 0.178752, (GLfloat) 0.492834, (GLfloat) 0.851565,
+ (GLfloat) - 0.184330, (GLfloat) 0.491982, (GLfloat) 0.850868,
+ (GLfloat) - 0.033888, (GLfloat) 0.173633, (GLfloat) 0.984227,
+ (GLfloat) - 0.032872, (GLfloat) 0.173792, (GLfloat) 0.984234,
+ (GLfloat) - 0.140362, (GLfloat) 0.111822, (GLfloat) 0.983765,
+ (GLfloat) - 0.136701, (GLfloat) 0.111911, (GLfloat) 0.984271,
+ (GLfloat) 0.725871, (GLfloat) 0.640449, (GLfloat) 0.250870,
+ (GLfloat) 0.717328, (GLfloat) 0.635281, (GLfloat) 0.286109,
+ (GLfloat) 0.785252, (GLfloat) 0.532999, (GLfloat) 0.315105,
+ (GLfloat) 0.786013, (GLfloat) 0.538285, (GLfloat) 0.304028,
+ (GLfloat) 0.473766, (GLfloat) 0.428968, (GLfloat) 0.769111,
+ (GLfloat) 0.445991, (GLfloat) 0.427917, (GLfloat) 0.786117,
+ (GLfloat) 0.380921, (GLfloat) 0.670539, (GLfloat) 0.636613,
+ (GLfloat) 0.351469, (GLfloat) 0.675507, (GLfloat) 0.648198,
+ (GLfloat) 0.909972, (GLfloat) 0.319731, (GLfloat) 0.264053,
+ (GLfloat) 0.914034, (GLfloat) 0.290005, (GLfloat) 0.283618,
+ (GLfloat) 0.764793, (GLfloat) - 0.009035, (GLfloat) 0.644213,
+ (GLfloat) 0.748359, (GLfloat) - 0.049564, (GLfloat) 0.661439,
+ (GLfloat) 0.584615, (GLfloat) 0.165625, (GLfloat) 0.794225,
+ (GLfloat) 0.606922, (GLfloat) 0.199970, (GLfloat) 0.769193,
+ (GLfloat) 0.856780, (GLfloat) 0.408314, (GLfloat) 0.314973,
+ (GLfloat) 0.856353, (GLfloat) 0.416833, (GLfloat) 0.304811,
+ (GLfloat) - 0.450621, (GLfloat) 0.737913, (GLfloat) 0.502419,
+ (GLfloat) - 0.436449, (GLfloat) 0.741403, (GLfloat) 0.509739,
+ (GLfloat) - 0.507433, (GLfloat) 0.846833, (GLfloat) 0.159329,
+ (GLfloat) - 0.502539, (GLfloat) 0.849165, (GLfloat) 0.162398,
+ (GLfloat) - 0.409636, (GLfloat) 0.897074, (GLfloat) 0.165699,
+ (GLfloat) - 0.419809, (GLfloat) 0.893103, (GLfloat) 0.161638,
+ (GLfloat) - 0.332199, (GLfloat) 0.791771, (GLfloat) 0.512584,
+ (GLfloat) - 0.350779, (GLfloat) 0.787278, (GLfloat) 0.507097,
+ (GLfloat) - 0.436449, (GLfloat) 0.741403, (GLfloat) - 0.509738,
+ (GLfloat) - 0.450621, (GLfloat) 0.737913, (GLfloat) - 0.502419,
+ (GLfloat) - 0.332198, (GLfloat) 0.791771, (GLfloat) - 0.512584,
+ (GLfloat) - 0.350779, (GLfloat) 0.787278, (GLfloat) - 0.507097,
+ (GLfloat) - 0.419809, (GLfloat) 0.893103, (GLfloat) - 0.161638,
+ (GLfloat) - 0.409636, (GLfloat) 0.897074, (GLfloat) - 0.165699,
+ (GLfloat) - 0.507433, (GLfloat) 0.846833, (GLfloat) - 0.159329,
+ (GLfloat) - 0.502539, (GLfloat) 0.849165, (GLfloat) - 0.162398,
+ (GLfloat) 0.669290, (GLfloat) 0.713912, (GLfloat) - 0.205866,
+ (GLfloat) 0.688897, (GLfloat) 0.702641, (GLfloat) - 0.178093,
+ (GLfloat) 0.661903, (GLfloat) 0.745850, (GLfloat) - 0.074780,
+ (GLfloat) 0.670351, (GLfloat) 0.738996, (GLfloat) - 0.067190,
+ (GLfloat) 0.158706, (GLfloat) 0.978584, (GLfloat) - 0.131091,
+ (GLfloat) 0.119709, (GLfloat) 0.981678, (GLfloat) - 0.148253,
+ (GLfloat) 0.261869, (GLfloat) 0.885538, (GLfloat) - 0.383728,
+ (GLfloat) 0.223051, (GLfloat) 0.883291, (GLfloat) - 0.412366,
+ (GLfloat) 0.688897, (GLfloat) 0.702640, (GLfloat) 0.178092,
+ (GLfloat) 0.669290, (GLfloat) 0.713912, (GLfloat) 0.205867,
+ (GLfloat) 0.261868, (GLfloat) 0.885538, (GLfloat) 0.383728,
+ (GLfloat) 0.223050, (GLfloat) 0.883291, (GLfloat) 0.412366,
+ (GLfloat) 0.119709, (GLfloat) 0.981678, (GLfloat) 0.148253,
+ (GLfloat) 0.158706, (GLfloat) 0.978584, (GLfloat) 0.131091,
+ (GLfloat) 0.661903, (GLfloat) 0.745850, (GLfloat) 0.074780,
+ (GLfloat) 0.670351, (GLfloat) 0.738996, (GLfloat) 0.067190,
+ (GLfloat) - 0.295570, (GLfloat) 0.436154, (GLfloat) - 0.849946,
+ (GLfloat) - 0.280583, (GLfloat) 0.437172, (GLfloat) - 0.854490,
+ (GLfloat) - 0.136701, (GLfloat) 0.111911, (GLfloat) - 0.984271,
+ (GLfloat) - 0.140362, (GLfloat) 0.111822, (GLfloat) - 0.983765,
+ (GLfloat) - 0.033889, (GLfloat) 0.173633, (GLfloat) - 0.984227,
+ (GLfloat) - 0.032872, (GLfloat) 0.173792, (GLfloat) - 0.984234,
+ (GLfloat) - 0.184329, (GLfloat) 0.491983, (GLfloat) - 0.850868,
+ (GLfloat) - 0.178752, (GLfloat) 0.492834, (GLfloat) - 0.851565,
+ (GLfloat) 0.062265, (GLfloat) - 0.551355, (GLfloat) - 0.831944,
+ (GLfloat) 0.086707, (GLfloat) - 0.551973, (GLfloat) - 0.829342,
+ (GLfloat) 0.231522, (GLfloat) - 0.464010, (GLfloat) - 0.855039,
+ (GLfloat) 0.236951, (GLfloat) - 0.462929, (GLfloat) - 0.854137,
+ (GLfloat) 0.099774, (GLfloat) - 0.134244, (GLfloat) - 0.985913,
+ (GLfloat) 0.102710, (GLfloat) - 0.133733, (GLfloat) - 0.985681,
+ (GLfloat) - 0.014960, (GLfloat) - 0.207986, (GLfloat) - 0.978017,
+ (GLfloat) - 0.026687, (GLfloat) - 0.208021, (GLfloat) - 0.977760,
+ (GLfloat) 0.914034, (GLfloat) 0.290005, (GLfloat) - 0.283618,
+ (GLfloat) 0.909972, (GLfloat) 0.319730, (GLfloat) - 0.264054,
+ (GLfloat) 0.856780, (GLfloat) 0.408314, (GLfloat) - 0.314973,
+ (GLfloat) 0.856353, (GLfloat) 0.416833, (GLfloat) - 0.304811,
+ (GLfloat) 0.606923, (GLfloat) 0.199970, (GLfloat) - 0.769193,
+ (GLfloat) 0.584616, (GLfloat) 0.165625, (GLfloat) - 0.794224,
+ (GLfloat) 0.764793, (GLfloat) - 0.009035, (GLfloat) - 0.644213,
+ (GLfloat) 0.748360, (GLfloat) - 0.049564, (GLfloat) - 0.661439,
+ (GLfloat) 0.725871, (GLfloat) 0.640449, (GLfloat) - 0.250871,
+ (GLfloat) 0.717328, (GLfloat) 0.635281, (GLfloat) - 0.286109,
+ (GLfloat) 0.380922, (GLfloat) 0.670539, (GLfloat) - 0.636613,
+ (GLfloat) 0.351469, (GLfloat) 0.675507, (GLfloat) - 0.648197,
+ (GLfloat) 0.445992, (GLfloat) 0.427917, (GLfloat) - 0.786116,
+ (GLfloat) 0.473767, (GLfloat) 0.428968, (GLfloat) - 0.769111,
+ (GLfloat) 0.786013, (GLfloat) 0.538285, (GLfloat) - 0.304029,
+ (GLfloat) 0.785252, (GLfloat) 0.532999, (GLfloat) - 0.315105,
+ (GLfloat) 0.919156, (GLfloat) 0.373864, (GLfloat) 0.124010,
+ (GLfloat) 0.913260, (GLfloat) 0.384076, (GLfloat) 0.135802,
+ (GLfloat) 0.881886, (GLfloat) 0.458542, (GLfloat) 0.109621,
+ (GLfloat) 0.879452, (GLfloat) 0.461960, (GLfloat) 0.114709,
+ (GLfloat) 0.880239, (GLfloat) 0.473377, (GLfloat) 0.033080,
+ (GLfloat) 0.881697, (GLfloat) 0.470851, (GLfloat) 0.030163,
+ (GLfloat) 0.914779, (GLfloat) 0.401569, (GLfloat) 0.043834,
+ (GLfloat) 0.916978, (GLfloat) 0.396963, (GLfloat) 0.039657,
+ (GLfloat) 0.789250, (GLfloat) 0.598868, (GLfloat) 0.135802,
+ (GLfloat) 0.783354, (GLfloat) 0.609080, (GLfloat) 0.124010,
+ (GLfloat) 0.805159, (GLfloat) 0.591437, (GLfloat) 0.043834,
+ (GLfloat) 0.802269, (GLfloat) 0.595644, (GLfloat) 0.039656,
+ (GLfloat) 0.848617, (GLfloat) 0.528147, (GLfloat) 0.030163,
+ (GLfloat) 0.850075, (GLfloat) 0.525621, (GLfloat) 0.033079,
+ (GLfloat) 0.838052, (GLfloat) 0.534464, (GLfloat) 0.109621,
+ (GLfloat) 0.839795, (GLfloat) 0.530647, (GLfloat) 0.114709,
+ (GLfloat) 0.783354, (GLfloat) 0.609080, (GLfloat) - 0.124010,
+ (GLfloat) 0.789250, (GLfloat) 0.598868, (GLfloat) - 0.135802,
+ (GLfloat) 0.838052, (GLfloat) 0.534464, (GLfloat) - 0.109621,
+ (GLfloat) 0.839795, (GLfloat) 0.530647, (GLfloat) - 0.114709,
+ (GLfloat) 0.850075, (GLfloat) 0.525621, (GLfloat) - 0.033079,
+ (GLfloat) 0.848617, (GLfloat) 0.528147, (GLfloat) - 0.030163,
+ (GLfloat) 0.805159, (GLfloat) 0.591437, (GLfloat) - 0.043834,
+ (GLfloat) 0.802269, (GLfloat) 0.595644, (GLfloat) - 0.039656,
+ (GLfloat) 0.913260, (GLfloat) 0.384076, (GLfloat) - 0.135802,
+ (GLfloat) 0.919156, (GLfloat) 0.373864, (GLfloat) - 0.124010,
+ (GLfloat) 0.914779, (GLfloat) 0.401569, (GLfloat) - 0.043834,
+ (GLfloat) 0.916978, (GLfloat) 0.396963, (GLfloat) - 0.039657,
+ (GLfloat) 0.881697, (GLfloat) 0.470851, (GLfloat) - 0.030163,
+ (GLfloat) 0.880239, (GLfloat) 0.473377, (GLfloat) - 0.033080,
+ (GLfloat) 0.881886, (GLfloat) 0.458542, (GLfloat) - 0.109621,
+ (GLfloat) 0.879452, (GLfloat) 0.461960, (GLfloat) - 0.114709,
+ (GLfloat) 0.190919, (GLfloat) - 0.865460, (GLfloat) - 0.463172,
+ (GLfloat) 0.162958, (GLfloat) - 0.864281, (GLfloat) - 0.475881,
+ (GLfloat) 0.232098, (GLfloat) - 0.863386, (GLfloat) - 0.447991,
+ (GLfloat) 0.201152, (GLfloat) - 0.862208, (GLfloat) - 0.464904,
+ (GLfloat) 0.208595, (GLfloat) - 0.967433, (GLfloat) - 0.143393,
+ (GLfloat) 0.220092, (GLfloat) - 0.966009, (GLfloat) - 0.135597,
+ (GLfloat) 0.173391, (GLfloat) - 0.973662, (GLfloat) - 0.148045,
+ (GLfloat) 0.183752, (GLfloat) - 0.972679, (GLfloat) - 0.141883,
+ (GLfloat) 0.370543, (GLfloat) - 0.826392, (GLfloat) - 0.423998,
+ (GLfloat) 0.337718, (GLfloat) - 0.831172, (GLfloat) - 0.441702,
+ (GLfloat) 0.357949, (GLfloat) - 0.923976, (GLfloat) - 0.134692,
+ (GLfloat) 0.370172, (GLfloat) - 0.920284, (GLfloat) - 0.126690,
+ (GLfloat) 0.265644, (GLfloat) - 0.954091, (GLfloat) - 0.138357,
+ (GLfloat) 0.277857, (GLfloat) - 0.951799, (GLfloat) - 0.129901,
+ (GLfloat) 0.288098, (GLfloat) - 0.854015, (GLfloat) - 0.433195,
+ (GLfloat) 0.255240, (GLfloat) - 0.854757, (GLfloat) - 0.451932,
+ (GLfloat) 0.370543, (GLfloat) - 0.826392, (GLfloat) 0.423998,
+ (GLfloat) 0.337718, (GLfloat) - 0.831172, (GLfloat) 0.441701,
+ (GLfloat) 0.255240, (GLfloat) - 0.854757, (GLfloat) 0.451932,
+ (GLfloat) 0.288099, (GLfloat) - 0.854015, (GLfloat) 0.433195,
+ (GLfloat) 0.265644, (GLfloat) - 0.954091, (GLfloat) 0.138357,
+ (GLfloat) 0.277857, (GLfloat) - 0.951799, (GLfloat) 0.129901,
+ (GLfloat) 0.370172, (GLfloat) - 0.920284, (GLfloat) 0.126690,
+ (GLfloat) 0.357949, (GLfloat) - 0.923976, (GLfloat) 0.134692,
+ (GLfloat) 0.162958, (GLfloat) - 0.864281, (GLfloat) 0.475881,
+ (GLfloat) 0.190920, (GLfloat) - 0.865460, (GLfloat) 0.463172,
+ (GLfloat) 0.173391, (GLfloat) - 0.973662, (GLfloat) 0.148045,
+ (GLfloat) 0.183752, (GLfloat) - 0.972679, (GLfloat) 0.141883,
+ (GLfloat) 0.220093, (GLfloat) - 0.966009, (GLfloat) 0.135597,
+ (GLfloat) 0.208595, (GLfloat) - 0.967433, (GLfloat) 0.143394,
+ (GLfloat) 0.232098, (GLfloat) - 0.863386, (GLfloat) 0.447991,
+ (GLfloat) 0.201153, (GLfloat) - 0.862208, (GLfloat) 0.464904,
+ (GLfloat) - 0.220569, (GLfloat) 0.498423, (GLfloat) - 0.838406,
+ (GLfloat) - 0.196440, (GLfloat) 0.495475, (GLfloat) - 0.846118,
+ (GLfloat) - 0.216090, (GLfloat) 0.523731, (GLfloat) - 0.824021,
+ (GLfloat) - 0.187439, (GLfloat) 0.518039, (GLfloat) - 0.834567,
+ (GLfloat) - 0.035834, (GLfloat) 0.186611, (GLfloat) - 0.981780,
+ (GLfloat) - 0.049583, (GLfloat) 0.189912, (GLfloat) - 0.980548,
+ (GLfloat) - 0.057093, (GLfloat) 0.164206, (GLfloat) - 0.984772,
+ (GLfloat) - 0.067095, (GLfloat) 0.165750, (GLfloat) - 0.983883,
+ (GLfloat) - 0.313656, (GLfloat) 0.500321, (GLfloat) - 0.807031,
+ (GLfloat) - 0.288105, (GLfloat) 0.497578, (GLfloat) - 0.818176,
+ (GLfloat) - 0.079226, (GLfloat) 0.180632, (GLfloat) - 0.980355,
+ (GLfloat) - 0.092817, (GLfloat) 0.182734, (GLfloat) - 0.978771,
+ (GLfloat) - 0.045426, (GLfloat) 0.193014, (GLfloat) - 0.980144,
+ (GLfloat) - 0.060897, (GLfloat) 0.196689, (GLfloat) - 0.978573,
+ (GLfloat) - 0.250277, (GLfloat) 0.526446, (GLfloat) - 0.812537,
+ (GLfloat) - 0.220552, (GLfloat) 0.520843, (GLfloat) - 0.824669,
+ (GLfloat) 0.247012, (GLfloat) - 0.528860, (GLfloat) - 0.811968,
+ (GLfloat) 0.280618, (GLfloat) - 0.529785, (GLfloat) - 0.800363,
+ (GLfloat) 0.197390, (GLfloat) - 0.535630, (GLfloat) - 0.821059,
+ (GLfloat) 0.231067, (GLfloat) - 0.540483, (GLfloat) - 0.809003,
+ (GLfloat) 0.104568, (GLfloat) - 0.158183, (GLfloat) - 0.981857,
+ (GLfloat) 0.094460, (GLfloat) - 0.156029, (GLfloat) - 0.983225,
+ (GLfloat) 0.111854, (GLfloat) - 0.162201, (GLfloat) - 0.980398,
+ (GLfloat) 0.101426, (GLfloat) - 0.160983, (GLfloat) - 0.981732,
+ (GLfloat) 0.117566, (GLfloat) - 0.537019, (GLfloat) - 0.835338,
+ (GLfloat) 0.146549, (GLfloat) - 0.540970, (GLfloat) - 0.828175,
+ (GLfloat) 0.055888, (GLfloat) - 0.173264, (GLfloat) - 0.983288,
+ (GLfloat) 0.045018, (GLfloat) - 0.171643, (GLfloat) - 0.984130,
+ (GLfloat) 0.088354, (GLfloat) - 0.160681, (GLfloat) - 0.983044,
+ (GLfloat) 0.078052, (GLfloat) - 0.158368, (GLfloat) - 0.984290,
+ (GLfloat) 0.157434, (GLfloat) - 0.535002, (GLfloat) - 0.830053,
+ (GLfloat) 0.189212, (GLfloat) - 0.540730, (GLfloat) - 0.819640,
+ (GLfloat) - 0.196440, (GLfloat) 0.495475, (GLfloat) 0.846118,
+ (GLfloat) - 0.220568, (GLfloat) 0.498423, (GLfloat) 0.838406,
+ (GLfloat) - 0.057093, (GLfloat) 0.164206, (GLfloat) 0.984772,
+ (GLfloat) - 0.067095, (GLfloat) 0.165750, (GLfloat) 0.983883,
+ (GLfloat) - 0.049583, (GLfloat) 0.189912, (GLfloat) 0.980548,
+ (GLfloat) - 0.035834, (GLfloat) 0.186611, (GLfloat) 0.981780,
+ (GLfloat) - 0.216090, (GLfloat) 0.523731, (GLfloat) 0.824021,
+ (GLfloat) - 0.187439, (GLfloat) 0.518039, (GLfloat) 0.834567,
+ (GLfloat) 0.117567, (GLfloat) - 0.537019, (GLfloat) 0.835337,
+ (GLfloat) 0.146549, (GLfloat) - 0.540970, (GLfloat) 0.828176,
+ (GLfloat) 0.189212, (GLfloat) - 0.540730, (GLfloat) 0.819640,
+ (GLfloat) 0.157434, (GLfloat) - 0.535002, (GLfloat) 0.830053,
+ (GLfloat) 0.088354, (GLfloat) - 0.160681, (GLfloat) 0.983044,
+ (GLfloat) 0.078052, (GLfloat) - 0.158368, (GLfloat) 0.984290,
+ (GLfloat) 0.045018, (GLfloat) - 0.171643, (GLfloat) 0.984130,
+ (GLfloat) 0.055888, (GLfloat) - 0.173264, (GLfloat) 0.983288,
+ (GLfloat) 0.280617, (GLfloat) - 0.529785, (GLfloat) 0.800363,
+ (GLfloat) 0.247012, (GLfloat) - 0.528861, (GLfloat) 0.811968,
+ (GLfloat) 0.111853, (GLfloat) - 0.162201, (GLfloat) 0.980398,
+ (GLfloat) 0.101425, (GLfloat) - 0.160983, (GLfloat) 0.981732,
+ (GLfloat) 0.094460, (GLfloat) - 0.156028, (GLfloat) 0.983225,
+ (GLfloat) 0.104568, (GLfloat) - 0.158182, (GLfloat) 0.981857,
+ (GLfloat) 0.197390, (GLfloat) - 0.535630, (GLfloat) 0.821059,
+ (GLfloat) 0.231068, (GLfloat) - 0.540483, (GLfloat) 0.809003,
+ (GLfloat) - 0.313656, (GLfloat) 0.500320, (GLfloat) 0.807031,
+ (GLfloat) - 0.288106, (GLfloat) 0.497578, (GLfloat) 0.818175,
+ (GLfloat) - 0.220552, (GLfloat) 0.520843, (GLfloat) 0.824669,
+ (GLfloat) - 0.250276, (GLfloat) 0.526446, (GLfloat) 0.812537,
+ (GLfloat) - 0.045425, (GLfloat) 0.193015, (GLfloat) 0.980144,
+ (GLfloat) - 0.060896, (GLfloat) 0.196690, (GLfloat) 0.978573,
+ (GLfloat) - 0.092818, (GLfloat) 0.182733, (GLfloat) 0.978771,
+ (GLfloat) - 0.079226, (GLfloat) 0.180631, (GLfloat) 0.980355,
+ (GLfloat) - 0.349743, (GLfloat) 0.793198, (GLfloat) - 0.498515,
+ (GLfloat) - 0.370416, (GLfloat) 0.791707, (GLfloat) - 0.485790,
+ (GLfloat) - 0.425027, (GLfloat) 0.892201, (GLfloat) - 0.152739,
+ (GLfloat) - 0.418180, (GLfloat) 0.894483, (GLfloat) - 0.158197,
+ (GLfloat) - 0.425590, (GLfloat) 0.893099, (GLfloat) - 0.145761,
+ (GLfloat) - 0.418336, (GLfloat) 0.895388, (GLfloat) - 0.152561,
+ (GLfloat) - 0.348153, (GLfloat) 0.802874, (GLfloat) - 0.483924,
+ (GLfloat) - 0.370992, (GLfloat) 0.802293, (GLfloat) - 0.467643,
+ (GLfloat) - 0.349743, (GLfloat) 0.793198, (GLfloat) 0.498515,
+ (GLfloat) - 0.370416, (GLfloat) 0.791707, (GLfloat) 0.485790,
+ (GLfloat) - 0.370992, (GLfloat) 0.802293, (GLfloat) 0.467643,
+ (GLfloat) - 0.348153, (GLfloat) 0.802874, (GLfloat) 0.483924,
+ (GLfloat) - 0.425590, (GLfloat) 0.893099, (GLfloat) 0.145761,
+ (GLfloat) - 0.418336, (GLfloat) 0.895388, (GLfloat) 0.152561,
+ (GLfloat) - 0.418180, (GLfloat) 0.894483, (GLfloat) 0.158197,
+ (GLfloat) - 0.425027, (GLfloat) 0.892201, (GLfloat) 0.152739,
+ (GLfloat) - 0.497325, (GLfloat) 0.745242, (GLfloat) 0.444165,
+ (GLfloat) - 0.479548, (GLfloat) 0.747889, (GLfloat) 0.459017,
+ (GLfloat) - 0.556394, (GLfloat) 0.819599, (GLfloat) 0.136684,
+ (GLfloat) - 0.551239, (GLfloat) 0.822088, (GLfloat) 0.142503,
+ (GLfloat) - 0.465768, (GLfloat) 0.872611, (GLfloat) 0.147004,
+ (GLfloat) - 0.472480, (GLfloat) 0.870146, (GLfloat) 0.140027,
+ (GLfloat) - 0.394421, (GLfloat) 0.789665, (GLfloat) 0.469959,
+ (GLfloat) - 0.416499, (GLfloat) 0.788420, (GLfloat) 0.452684,
+ (GLfloat) - 0.479547, (GLfloat) 0.747889, (GLfloat) - 0.459017,
+ (GLfloat) - 0.497325, (GLfloat) 0.745242, (GLfloat) - 0.444165,
+ (GLfloat) - 0.394421, (GLfloat) 0.789665, (GLfloat) - 0.469959,
+ (GLfloat) - 0.416498, (GLfloat) 0.788420, (GLfloat) - 0.452684,
+ (GLfloat) - 0.472480, (GLfloat) 0.870146, (GLfloat) - 0.140027,
+ (GLfloat) - 0.465768, (GLfloat) 0.872611, (GLfloat) - 0.147004,
+ (GLfloat) - 0.556394, (GLfloat) 0.819599, (GLfloat) - 0.136684,
+ (GLfloat) - 0.551239, (GLfloat) 0.822088, (GLfloat) - 0.142503,
+ (GLfloat) - 0.459423, (GLfloat) 0.314205, (GLfloat) - 0.830786,
+ (GLfloat) - 0.469135, (GLfloat) 0.308642, (GLfloat) - 0.827438,
+ (GLfloat) - 0.156023, (GLfloat) 0.098476, (GLfloat) - 0.982832,
+ (GLfloat) - 0.151547, (GLfloat) 0.101367, (GLfloat) - 0.983239,
+ (GLfloat) - 0.168365, (GLfloat) 0.083796, (GLfloat) - 0.982157,
+ (GLfloat) - 0.160419, (GLfloat) 0.086730, (GLfloat) - 0.983231,
+ (GLfloat) - 0.460048, (GLfloat) 0.328491, (GLfloat) - 0.824894,
+ (GLfloat) - 0.469062, (GLfloat) 0.325364, (GLfloat) - 0.821048,
+ (GLfloat) 0.495554, (GLfloat) - 0.246920, (GLfloat) - 0.832741,
+ (GLfloat) 0.477125, (GLfloat) - 0.265003, (GLfloat) - 0.837929,
+ (GLfloat) 0.446738, (GLfloat) - 0.363453, (GLfloat) - 0.817512,
+ (GLfloat) 0.441753, (GLfloat) - 0.366614, (GLfloat) - 0.818809,
+ (GLfloat) 0.138045, (GLfloat) - 0.145699, (GLfloat) - 0.979651,
+ (GLfloat) 0.135385, (GLfloat) - 0.146968, (GLfloat) - 0.979832,
+ (GLfloat) 0.154178, (GLfloat) - 0.091800, (GLfloat) - 0.983769,
+ (GLfloat) 0.160344, (GLfloat) - 0.086930, (GLfloat) - 0.983226,
+ (GLfloat) 0.316237, (GLfloat) - 0.497953, (GLfloat) - 0.807488,
+ (GLfloat) 0.343267, (GLfloat) - 0.493329, (GLfloat) - 0.799246,
+ (GLfloat) 0.113533, (GLfloat) - 0.172349, (GLfloat) - 0.978471,
+ (GLfloat) 0.101829, (GLfloat) - 0.173041, (GLfloat) - 0.979636,
+ (GLfloat) 0.123751, (GLfloat) - 0.168767, (GLfloat) - 0.977856,
+ (GLfloat) 0.114456, (GLfloat) - 0.171068, (GLfloat) - 0.978589,
+ (GLfloat) 0.385418, (GLfloat) - 0.444520, (GLfloat) - 0.808613,
+ (GLfloat) 0.397936, (GLfloat) - 0.439743, (GLfloat) - 0.805154,
+ (GLfloat) - 0.398435, (GLfloat) 0.428657, (GLfloat) - 0.810865,
+ (GLfloat) - 0.386943, (GLfloat) 0.429063, (GLfloat) - 0.816198,
+ (GLfloat) - 0.443045, (GLfloat) 0.369548, (GLfloat) - 0.816790,
+ (GLfloat) - 0.444436, (GLfloat) 0.369300, (GLfloat) - 0.816146,
+ (GLfloat) - 0.163680, (GLfloat) 0.101509, (GLfloat) - 0.981277,
+ (GLfloat) - 0.158806, (GLfloat) 0.102320, (GLfloat) - 0.981994,
+ (GLfloat) - 0.135291, (GLfloat) 0.136613, (GLfloat) - 0.981343,
+ (GLfloat) - 0.139056, (GLfloat) 0.136609, (GLfloat) - 0.980817,
+ (GLfloat) - 0.727675, (GLfloat) 0.496263, (GLfloat) - 0.473510,
+ (GLfloat) - 0.726249, (GLfloat) 0.505128, (GLfloat) - 0.466270,
+ (GLfloat) - 0.710606, (GLfloat) 0.534378, (GLfloat) - 0.457688,
+ (GLfloat) - 0.711650, (GLfloat) 0.528248, (GLfloat) - 0.463150,
+ (GLfloat) - 0.787870, (GLfloat) 0.599385, (GLfloat) - 0.141417,
+ (GLfloat) - 0.788753, (GLfloat) 0.597790, (GLfloat) - 0.143234,
+ (GLfloat) - 0.812157, (GLfloat) 0.564556, (GLfloat) - 0.147234,
+ (GLfloat) - 0.810846, (GLfloat) 0.567072, (GLfloat) - 0.144768,
+ (GLfloat) - 0.599894, (GLfloat) 0.659162, (GLfloat) - 0.453468,
+ (GLfloat) - 0.607958, (GLfloat) 0.656733, (GLfloat) - 0.446194,
+ (GLfloat) - 0.673258, (GLfloat) 0.726567, (GLfloat) - 0.137198,
+ (GLfloat) - 0.671022, (GLfloat) 0.728096, (GLfloat) - 0.140020,
+ (GLfloat) - 0.744575, (GLfloat) 0.652826, (GLfloat) - 0.139376,
+ (GLfloat) - 0.744638, (GLfloat) 0.652728, (GLfloat) - 0.139500,
+ (GLfloat) - 0.673012, (GLfloat) 0.585174, (GLfloat) - 0.452357,
+ (GLfloat) - 0.673042, (GLfloat) 0.585047, (GLfloat) - 0.452476,
+ (GLfloat) - 0.599894, (GLfloat) 0.659162, (GLfloat) 0.453468,
+ (GLfloat) - 0.607958, (GLfloat) 0.656733, (GLfloat) 0.446194,
+ (GLfloat) - 0.673012, (GLfloat) 0.585174, (GLfloat) 0.452357,
+ (GLfloat) - 0.673042, (GLfloat) 0.585047, (GLfloat) 0.452476,
+ (GLfloat) - 0.744638, (GLfloat) 0.652728, (GLfloat) 0.139500,
+ (GLfloat) - 0.744575, (GLfloat) 0.652826, (GLfloat) 0.139376,
+ (GLfloat) - 0.671022, (GLfloat) 0.728096, (GLfloat) 0.140020,
+ (GLfloat) - 0.673258, (GLfloat) 0.726567, (GLfloat) 0.137198,
+ (GLfloat) - 0.727676, (GLfloat) 0.496263, (GLfloat) 0.473510,
+ (GLfloat) - 0.726250, (GLfloat) 0.505128, (GLfloat) 0.466269,
+ (GLfloat) - 0.810846, (GLfloat) 0.567072, (GLfloat) 0.144768,
+ (GLfloat) - 0.812157, (GLfloat) 0.564556, (GLfloat) 0.147234,
+ (GLfloat) - 0.787870, (GLfloat) 0.599385, (GLfloat) 0.141417,
+ (GLfloat) - 0.788753, (GLfloat) 0.597789, (GLfloat) 0.143234,
+ (GLfloat) - 0.711650, (GLfloat) 0.528248, (GLfloat) 0.463150,
+ (GLfloat) - 0.710607, (GLfloat) 0.534378, (GLfloat) 0.457688,
+ (GLfloat) - 0.459423, (GLfloat) 0.314205, (GLfloat) 0.830786,
+ (GLfloat) - 0.469134, (GLfloat) 0.308642, (GLfloat) 0.827438,
+ (GLfloat) - 0.469062, (GLfloat) 0.325364, (GLfloat) 0.821048,
+ (GLfloat) - 0.460048, (GLfloat) 0.328491, (GLfloat) 0.824894,
+ (GLfloat) - 0.168365, (GLfloat) 0.083796, (GLfloat) 0.982157,
+ (GLfloat) - 0.160419, (GLfloat) 0.086730, (GLfloat) 0.983231,
+ (GLfloat) - 0.151547, (GLfloat) 0.101367, (GLfloat) 0.983239,
+ (GLfloat) - 0.156023, (GLfloat) 0.098476, (GLfloat) 0.982832,
+ (GLfloat) - 0.386943, (GLfloat) 0.429064, (GLfloat) 0.816198,
+ (GLfloat) - 0.398435, (GLfloat) 0.428657, (GLfloat) 0.810865,
+ (GLfloat) - 0.135291, (GLfloat) 0.136613, (GLfloat) 0.981343,
+ (GLfloat) - 0.139055, (GLfloat) 0.136609, (GLfloat) 0.980817,
+ (GLfloat) - 0.158806, (GLfloat) 0.102320, (GLfloat) 0.981994,
+ (GLfloat) - 0.163680, (GLfloat) 0.101509, (GLfloat) 0.981277,
+ (GLfloat) - 0.443045, (GLfloat) 0.369548, (GLfloat) 0.816790,
+ (GLfloat) - 0.444437, (GLfloat) 0.369300, (GLfloat) 0.816145,
+ (GLfloat) 0.316237, (GLfloat) - 0.497952, (GLfloat) 0.807488,
+ (GLfloat) 0.343268, (GLfloat) - 0.493329, (GLfloat) 0.799246,
+ (GLfloat) 0.397936, (GLfloat) - 0.439744, (GLfloat) 0.805154,
+ (GLfloat) 0.385418, (GLfloat) - 0.444521, (GLfloat) 0.808613,
+ (GLfloat) 0.123751, (GLfloat) - 0.168768, (GLfloat) 0.977856,
+ (GLfloat) 0.114455, (GLfloat) - 0.171068, (GLfloat) 0.978589,
+ (GLfloat) 0.101830, (GLfloat) - 0.173040, (GLfloat) 0.979637,
+ (GLfloat) 0.113533, (GLfloat) - 0.172348, (GLfloat) 0.978471,
+ (GLfloat) 0.477126, (GLfloat) - 0.265003, (GLfloat) 0.837929,
+ (GLfloat) 0.495553, (GLfloat) - 0.246921, (GLfloat) 0.832741,
+ (GLfloat) 0.154178, (GLfloat) - 0.091800, (GLfloat) 0.983769,
+ (GLfloat) 0.160344, (GLfloat) - 0.086930, (GLfloat) 0.983226,
+ (GLfloat) 0.135385, (GLfloat) - 0.146968, (GLfloat) 0.979832,
+ (GLfloat) 0.138045, (GLfloat) - 0.145699, (GLfloat) 0.979651,
+ (GLfloat) 0.446739, (GLfloat) - 0.363453, (GLfloat) 0.817512,
+ (GLfloat) 0.441753, (GLfloat) - 0.366614, (GLfloat) 0.818809,
+ (GLfloat) 0.786198, (GLfloat) - 0.394047, (GLfloat) 0.476047,
+ (GLfloat) 0.792547, (GLfloat) - 0.363224, (GLfloat) 0.489834,
+ (GLfloat) 0.707476, (GLfloat) - 0.538845, (GLfloat) 0.457301,
+ (GLfloat) 0.711142, (GLfloat) - 0.529032, (GLfloat) 0.463037,
+ (GLfloat) 0.801588, (GLfloat) - 0.580242, (GLfloat) 0.144141,
+ (GLfloat) 0.799043, (GLfloat) - 0.584300, (GLfloat) 0.141857,
+ (GLfloat) 0.903357, (GLfloat) - 0.400085, (GLfloat) 0.154524,
+ (GLfloat) 0.898654, (GLfloat) - 0.412515, (GLfloat) 0.149172,
+ (GLfloat) 0.471890, (GLfloat) - 0.763546, (GLfloat) 0.440814,
+ (GLfloat) 0.497278, (GLfloat) - 0.754424, (GLfloat) 0.428437,
+ (GLfloat) 0.515315, (GLfloat) - 0.846316, (GLfloat) 0.134909,
+ (GLfloat) 0.524719, (GLfloat) - 0.841405, (GLfloat) 0.129258,
+ (GLfloat) 0.671646, (GLfloat) - 0.728471, (GLfloat) 0.134984,
+ (GLfloat) 0.668271, (GLfloat) - 0.731195, (GLfloat) 0.136994,
+ (GLfloat) 0.610971, (GLfloat) - 0.657561, (GLfloat) 0.440826,
+ (GLfloat) 0.601302, (GLfloat) - 0.663396, (GLfloat) 0.445356,
+ (GLfloat) 0.497278, (GLfloat) - 0.754424, (GLfloat) - 0.428437,
+ (GLfloat) 0.471890, (GLfloat) - 0.763546, (GLfloat) - 0.440814,
+ (GLfloat) 0.610971, (GLfloat) - 0.657561, (GLfloat) - 0.440826,
+ (GLfloat) 0.601301, (GLfloat) - 0.663396, (GLfloat) - 0.445356,
+ (GLfloat) 0.668271, (GLfloat) - 0.731195, (GLfloat) - 0.136994,
+ (GLfloat) 0.671646, (GLfloat) - 0.728471, (GLfloat) - 0.134984,
+ (GLfloat) 0.515315, (GLfloat) - 0.846316, (GLfloat) - 0.134909,
+ (GLfloat) 0.524719, (GLfloat) - 0.841405, (GLfloat) - 0.129258,
+ (GLfloat) 0.792547, (GLfloat) - 0.363225, (GLfloat) - 0.489834,
+ (GLfloat) 0.786198, (GLfloat) - 0.394046, (GLfloat) - 0.476047,
+ (GLfloat) 0.903357, (GLfloat) - 0.400085, (GLfloat) - 0.154524,
+ (GLfloat) 0.898654, (GLfloat) - 0.412515, (GLfloat) - 0.149172,
+ (GLfloat) 0.799043, (GLfloat) - 0.584299, (GLfloat) - 0.141858,
+ (GLfloat) 0.801588, (GLfloat) - 0.580242, (GLfloat) - 0.144141,
+ (GLfloat) 0.707476, (GLfloat) - 0.538845, (GLfloat) - 0.457301,
+ (GLfloat) 0.711142, (GLfloat) - 0.529031, (GLfloat) - 0.463037,
+ (GLfloat) 0.844921, (GLfloat) - 0.202233, (GLfloat) 0.495188,
+ (GLfloat) 0.846624, (GLfloat) - 0.162790, (GLfloat) 0.506682,
+ (GLfloat) 0.967461, (GLfloat) - 0.195075, (GLfloat) 0.161136,
+ (GLfloat) 0.965076, (GLfloat) - 0.210256, (GLfloat) 0.156272,
+ (GLfloat) 0.933716, (GLfloat) - 0.317920, (GLfloat) 0.164623,
+ (GLfloat) 0.928870, (GLfloat) - 0.334244, (GLfloat) 0.159632,
+ (GLfloat) 0.801028, (GLfloat) - 0.328506, (GLfloat) 0.500438,
+ (GLfloat) 0.805814, (GLfloat) - 0.302226, (GLfloat) 0.509238,
+ (GLfloat) 0.844921, (GLfloat) - 0.202233, (GLfloat) - 0.495188,
+ (GLfloat) 0.846624, (GLfloat) - 0.162790, (GLfloat) - 0.506682,
+ (GLfloat) 0.805814, (GLfloat) - 0.302226, (GLfloat) - 0.509238,
+ (GLfloat) 0.801028, (GLfloat) - 0.328507, (GLfloat) - 0.500438,
+ (GLfloat) 0.933716, (GLfloat) - 0.317920, (GLfloat) - 0.164623,
+ (GLfloat) 0.928870, (GLfloat) - 0.334244, (GLfloat) - 0.159632,
+ (GLfloat) 0.965076, (GLfloat) - 0.210256, (GLfloat) - 0.156272,
+ (GLfloat) 0.967461, (GLfloat) - 0.195075, (GLfloat) - 0.161136,
+ (GLfloat) 0.116677, (GLfloat) - 0.971600, (GLfloat) - 0.205866,
+ (GLfloat) 0.095439, (GLfloat) - 0.979375, (GLfloat) - 0.178092,
+ (GLfloat) 0.145951, (GLfloat) - 0.986885, (GLfloat) - 0.068965,
+ (GLfloat) 0.134470, (GLfloat) - 0.988213, (GLfloat) - 0.073162,
+ (GLfloat) 0.572548, (GLfloat) - 0.810794, (GLfloat) - 0.121664,
+ (GLfloat) 0.603894, (GLfloat) - 0.784891, (GLfloat) - 0.138773,
+ (GLfloat) 0.437036, (GLfloat) - 0.822210, (GLfloat) - 0.364650,
+ (GLfloat) 0.472429, (GLfloat) - 0.800503, (GLfloat) - 0.368789,
+ (GLfloat) 0.095438, (GLfloat) - 0.979375, (GLfloat) 0.178092,
+ (GLfloat) 0.116677, (GLfloat) - 0.971600, (GLfloat) 0.205866,
+ (GLfloat) 0.472430, (GLfloat) - 0.800503, (GLfloat) 0.368789,
+ (GLfloat) 0.437036, (GLfloat) - 0.822210, (GLfloat) 0.364650,
+ (GLfloat) 0.603894, (GLfloat) - 0.784891, (GLfloat) 0.138773,
+ (GLfloat) 0.572548, (GLfloat) - 0.810794, (GLfloat) 0.121664,
+ (GLfloat) 0.134470, (GLfloat) - 0.988213, (GLfloat) 0.073162,
+ (GLfloat) 0.145951, (GLfloat) - 0.986885, (GLfloat) 0.068965,
+ (GLfloat) 0.531733, (GLfloat) - 0.073239, (GLfloat) - 0.843739,
+ (GLfloat) 0.511681, (GLfloat) - 0.104754, (GLfloat) - 0.852766,
+ (GLfloat) 0.176179, (GLfloat) 0.024438, (GLfloat) - 0.984055,
+ (GLfloat) 0.188717, (GLfloat) 0.040307, (GLfloat) - 0.981204,
+ (GLfloat) 0.150895, (GLfloat) - 0.104293, (GLfloat) - 0.983033,
+ (GLfloat) 0.147932, (GLfloat) - 0.109363, (GLfloat) - 0.982932,
+ (GLfloat) 0.481880, (GLfloat) - 0.227373, (GLfloat) - 0.846223,
+ (GLfloat) 0.480166, (GLfloat) - 0.230321, (GLfloat) - 0.846400,
+ (GLfloat) - 0.443443, (GLfloat) 0.349023, (GLfloat) - 0.825555,
+ (GLfloat) - 0.447255, (GLfloat) 0.345654, (GLfloat) - 0.824916,
+ (GLfloat) - 0.494732, (GLfloat) 0.167751, (GLfloat) - 0.852701,
+ (GLfloat) - 0.499143, (GLfloat) 0.160727, (GLfloat) - 0.851483,
+ (GLfloat) - 0.167121, (GLfloat) 0.020158, (GLfloat) - 0.985730,
+ (GLfloat) - 0.166487, (GLfloat) 0.021208, (GLfloat) - 0.985815,
+ (GLfloat) - 0.129817, (GLfloat) 0.178023, (GLfloat) - 0.975426,
+ (GLfloat) - 0.132948, (GLfloat) 0.174752, (GLfloat) - 0.975595,
+ (GLfloat) - 0.353563, (GLfloat) - 0.901143, (GLfloat) - 0.250869,
+ (GLfloat) - 0.351628, (GLfloat) - 0.891347, (GLfloat) - 0.286110,
+ (GLfloat) - 0.232284, (GLfloat) - 0.920192, (GLfloat) - 0.315104,
+ (GLfloat) - 0.236990, (GLfloat) - 0.922714, (GLfloat) - 0.304029,
+ (GLfloat) - 0.244093, (GLfloat) - 0.592931, (GLfloat) - 0.767366,
+ (GLfloat) - 0.249996, (GLfloat) - 0.572960, (GLfloat) - 0.780525,
+ (GLfloat) - 0.510472, (GLfloat) - 0.553764, (GLfloat) - 0.657848,
+ (GLfloat) - 0.520671, (GLfloat) - 0.533495, (GLfloat) - 0.666547,
+ (GLfloat) 0.010781, (GLfloat) - 0.964447, (GLfloat) - 0.264055,
+ (GLfloat) 0.040104, (GLfloat) - 0.958098, (GLfloat) - 0.283621,
+ (GLfloat) 0.223629, (GLfloat) - 0.775786, (GLfloat) - 0.590040,
+ (GLfloat) 0.262682, (GLfloat) - 0.745474, (GLfloat) - 0.612590,
+ (GLfloat) 0.033849, (GLfloat) - 0.640593, (GLfloat) - 0.767134,
+ (GLfloat) 0.004138, (GLfloat) - 0.677809, (GLfloat) - 0.735226,
+ (GLfloat) - 0.092889, (GLfloat) - 0.948124, (GLfloat) - 0.304029,
+ (GLfloat) - 0.096449, (GLfloat) - 0.944143, (GLfloat) - 0.315104,
+ (GLfloat) - 0.719211, (GLfloat) 0.510808, (GLfloat) - 0.470968,
+ (GLfloat) - 0.720697, (GLfloat) 0.504519, (GLfloat) - 0.475454,
+ (GLfloat) - 0.811897, (GLfloat) 0.564936, (GLfloat) - 0.147209,
+ (GLfloat) - 0.813044, (GLfloat) 0.562871, (GLfloat) - 0.148783,
+ (GLfloat) - 0.910433, (GLfloat) 0.380820, (GLfloat) - 0.161519,
+ (GLfloat) - 0.907768, (GLfloat) 0.388545, (GLfloat) - 0.158079,
+ (GLfloat) - 0.804000, (GLfloat) 0.309508, (GLfloat) - 0.507729,
+ (GLfloat) - 0.801647, (GLfloat) 0.326768, (GLfloat) - 0.500584,
+ (GLfloat) - 0.720697, (GLfloat) 0.504519, (GLfloat) 0.475454,
+ (GLfloat) - 0.719210, (GLfloat) 0.510808, (GLfloat) 0.470968,
+ (GLfloat) - 0.804000, (GLfloat) 0.309509, (GLfloat) 0.507729,
+ (GLfloat) - 0.801647, (GLfloat) 0.326768, (GLfloat) 0.500585,
+ (GLfloat) - 0.907768, (GLfloat) 0.388545, (GLfloat) 0.158079,
+ (GLfloat) - 0.910433, (GLfloat) 0.380820, (GLfloat) 0.161519,
+ (GLfloat) - 0.811897, (GLfloat) 0.564936, (GLfloat) 0.147209,
+ (GLfloat) - 0.813044, (GLfloat) 0.562871, (GLfloat) 0.148783,
+ (GLfloat) - 0.441947, (GLfloat) - 0.873099, (GLfloat) 0.205867,
+ (GLfloat) - 0.424648, (GLfloat) - 0.887670, (GLfloat) 0.178091,
+ (GLfloat) - 0.474684, (GLfloat) - 0.877450, (GLfloat) 0.068965,
+ (GLfloat) - 0.464350, (GLfloat) - 0.882625, (GLfloat) 0.073162,
+ (GLfloat) - 0.909934, (GLfloat) - 0.390292, (GLfloat) 0.140328,
+ (GLfloat) - 0.923715, (GLfloat) - 0.349249, (GLfloat) 0.157405,
+ (GLfloat) - 0.775101, (GLfloat) - 0.483039, (GLfloat) 0.407299,
+ (GLfloat) - 0.785487, (GLfloat) - 0.436754, (GLfloat) 0.438470,
+ (GLfloat) - 0.424649, (GLfloat) - 0.887669, (GLfloat) - 0.178092,
+ (GLfloat) - 0.441947, (GLfloat) - 0.873099, (GLfloat) - 0.205866,
+ (GLfloat) - 0.775100, (GLfloat) - 0.483039, (GLfloat) - 0.407299,
+ (GLfloat) - 0.785487, (GLfloat) - 0.436754, (GLfloat) - 0.438470,
+ (GLfloat) - 0.923715, (GLfloat) - 0.349249, (GLfloat) - 0.157405,
+ (GLfloat) - 0.909934, (GLfloat) - 0.390292, (GLfloat) - 0.140328,
+ (GLfloat) - 0.464350, (GLfloat) - 0.882625, (GLfloat) - 0.073162,
+ (GLfloat) - 0.474684, (GLfloat) - 0.877450, (GLfloat) - 0.068965,
+ (GLfloat) - 0.447255, (GLfloat) 0.345654, (GLfloat) 0.824916,
+ (GLfloat) - 0.443443, (GLfloat) 0.349023, (GLfloat) 0.825555,
+ (GLfloat) - 0.129817, (GLfloat) 0.178023, (GLfloat) 0.975426,
+ (GLfloat) - 0.132949, (GLfloat) 0.174752, (GLfloat) 0.975595,
+ (GLfloat) - 0.166487, (GLfloat) 0.021208, (GLfloat) 0.985815,
+ (GLfloat) - 0.167121, (GLfloat) 0.020158, (GLfloat) 0.985730,
+ (GLfloat) - 0.494732, (GLfloat) 0.167753, (GLfloat) 0.852701,
+ (GLfloat) - 0.499144, (GLfloat) 0.160728, (GLfloat) 0.851482,
+ (GLfloat) 0.531733, (GLfloat) - 0.073239, (GLfloat) 0.843739,
+ (GLfloat) 0.511681, (GLfloat) - 0.104754, (GLfloat) 0.852765,
+ (GLfloat) 0.480166, (GLfloat) - 0.230321, (GLfloat) 0.846400,
+ (GLfloat) 0.481881, (GLfloat) - 0.227371, (GLfloat) 0.846223,
+ (GLfloat) 0.150895, (GLfloat) - 0.104294, (GLfloat) 0.983033,
+ (GLfloat) 0.147933, (GLfloat) - 0.109363, (GLfloat) 0.982932,
+ (GLfloat) 0.188717, (GLfloat) 0.040307, (GLfloat) 0.981204,
+ (GLfloat) 0.176179, (GLfloat) 0.024438, (GLfloat) 0.984055,
+ (GLfloat) 0.040104, (GLfloat) - 0.958098, (GLfloat) 0.283620,
+ (GLfloat) 0.010781, (GLfloat) - 0.964447, (GLfloat) 0.264055,
+ (GLfloat) - 0.096449, (GLfloat) - 0.944143, (GLfloat) 0.315104,
+ (GLfloat) - 0.092889, (GLfloat) - 0.948124, (GLfloat) 0.304029,
+ (GLfloat) 0.004138, (GLfloat) - 0.677808, (GLfloat) 0.735227,
+ (GLfloat) 0.033849, (GLfloat) - 0.640593, (GLfloat) 0.767135,
+ (GLfloat) 0.223629, (GLfloat) - 0.775785, (GLfloat) 0.590040,
+ (GLfloat) 0.262682, (GLfloat) - 0.745474, (GLfloat) 0.612591,
+ (GLfloat) - 0.353563, (GLfloat) - 0.901143, (GLfloat) 0.250868,
+ (GLfloat) - 0.351627, (GLfloat) - 0.891347, (GLfloat) 0.286109,
+ (GLfloat) - 0.510472, (GLfloat) - 0.553764, (GLfloat) 0.657848,
+ (GLfloat) - 0.520671, (GLfloat) - 0.533495, (GLfloat) 0.666547,
+ (GLfloat) - 0.249996, (GLfloat) - 0.572959, (GLfloat) 0.780525,
+ (GLfloat) - 0.244093, (GLfloat) - 0.592931, (GLfloat) 0.767367,
+ (GLfloat) - 0.236991, (GLfloat) - 0.922714, (GLfloat) 0.304029,
+ (GLfloat) - 0.232284, (GLfloat) - 0.920192, (GLfloat) 0.315104,
+ (GLfloat) - 0.036947, (GLfloat) - 0.991593, (GLfloat) - 0.124011,
+ (GLfloat) - 0.048560, (GLfloat) - 0.989545, (GLfloat) - 0.135802,
+ (GLfloat) - 0.129266, (GLfloat) - 0.985532, (GLfloat) - 0.109621,
+ (GLfloat) - 0.133311, (GLfloat) - 0.984414, (GLfloat) - 0.114709,
+ (GLfloat) - 0.143769, (GLfloat) - 0.989058, (GLfloat) - 0.033079,
+ (GLfloat) - 0.140897, (GLfloat) - 0.989565, (GLfloat) - 0.030163,
+ (GLfloat) - 0.064478, (GLfloat) - 0.996956, (GLfloat) - 0.043834,
+ (GLfloat) - 0.059398, (GLfloat) - 0.997446, (GLfloat) - 0.039656,
+ (GLfloat) - 0.292813, (GLfloat) - 0.946477, (GLfloat) - 0.135802,
+ (GLfloat) - 0.304426, (GLfloat) - 0.944429, (GLfloat) - 0.124011,
+ (GLfloat) - 0.280390, (GLfloat) - 0.958885, (GLfloat) - 0.043834,
+ (GLfloat) - 0.285331, (GLfloat) - 0.957608, (GLfloat) - 0.039656,
+ (GLfloat) - 0.206051, (GLfloat) - 0.978076, (GLfloat) - 0.030163,
+ (GLfloat) - 0.203179, (GLfloat) - 0.978583, (GLfloat) - 0.033079,
+ (GLfloat) - 0.215602, (GLfloat) - 0.970309, (GLfloat) - 0.109621,
+ (GLfloat) - 0.211418, (GLfloat) - 0.970641, (GLfloat) - 0.114709,
+ (GLfloat) - 0.304426, (GLfloat) - 0.944429, (GLfloat) 0.124011,
+ (GLfloat) - 0.292813, (GLfloat) - 0.946477, (GLfloat) 0.135803,
+ (GLfloat) - 0.215602, (GLfloat) - 0.970309, (GLfloat) 0.109621,
+ (GLfloat) - 0.211418, (GLfloat) - 0.970641, (GLfloat) 0.114709,
+ (GLfloat) - 0.203179, (GLfloat) - 0.978583, (GLfloat) 0.033079,
+ (GLfloat) - 0.206051, (GLfloat) - 0.978076, (GLfloat) 0.030163,
+ (GLfloat) - 0.280390, (GLfloat) - 0.958885, (GLfloat) 0.043834,
+ (GLfloat) - 0.285331, (GLfloat) - 0.957608, (GLfloat) 0.039656,
+ (GLfloat) - 0.048560, (GLfloat) - 0.989545, (GLfloat) 0.135802,
+ (GLfloat) - 0.036947, (GLfloat) - 0.991593, (GLfloat) 0.124011,
+ (GLfloat) - 0.064478, (GLfloat) - 0.996956, (GLfloat) 0.043834,
+ (GLfloat) - 0.059398, (GLfloat) - 0.997446, (GLfloat) 0.039656,
+ (GLfloat) - 0.140897, (GLfloat) - 0.989565, (GLfloat) 0.030163,
+ (GLfloat) - 0.143769, (GLfloat) - 0.989058, (GLfloat) 0.033079,
+ (GLfloat) - 0.129266, (GLfloat) - 0.985532, (GLfloat) 0.109621,
+ (GLfloat) - 0.133311, (GLfloat) - 0.984414, (GLfloat) 0.114709,
+};
+
+unsigned short int s1_3_POLS[] =
+{
+ 3, 82, 12, 76, 1, 3, 76, 74, 82, 1, 3, 22, 78, 74, 1, 3, 22, 74, 76, 1,
+ 3, 78, 20, 80, 1, 3, 80, 74, 78, 1, 3, 28, 82, 74, 1, 3, 28, 74, 80, 1,
+ 3, 88, 13, 84, 1, 3, 84, 77, 88, 1, 3, 24, 86, 77, 1, 3, 24, 77, 84, 1,
+ 3, 86, 20, 78, 1, 3, 78, 77, 86, 1, 3, 22, 88, 77, 1, 3, 22, 77, 78, 1,
+ 3, 14, 90, 85, 1, 3, 14, 85, 93, 1, 3, 26, 91, 85, 1, 3, 26, 85, 90, 1,
+ 3, 20, 86, 85, 1, 3, 20, 85, 91, 1, 3, 24, 93, 85, 1, 3, 24, 85, 86, 1,
+ 3, 15, 95, 79, 1, 3, 15, 79, 97, 1, 3, 28, 80, 79, 1, 3, 28, 79, 95, 1,
+ 3, 20, 91, 79, 1, 3, 20, 79, 80, 1, 3, 26, 97, 79, 1, 3, 26, 79, 91, 1,
+ 3, 13, 99, 83, 1, 3, 13, 83, 84, 1, 3, 99, 30, 101, 1, 3, 101, 83, 99, 1,
+ 3, 23, 102, 83, 1, 3, 23, 83, 101, 1, 3, 102, 24, 84, 1, 3, 84, 83, 102, 1,
+ 3, 108, 16, 104, 1, 3, 104, 100, 108, 1, 3, 32, 106, 100, 1, 3, 32, 100, 104, 1,
+ 3, 106, 23, 101, 1, 3, 101, 100, 106, 1, 3, 30, 108, 100, 1, 3, 30, 100, 101, 1,
+ 3, 113, 17, 110, 1, 3, 110, 105, 113, 1, 3, 33, 111, 105, 1, 3, 33, 105, 110, 1,
+ 3, 23, 106, 105, 1, 3, 23, 105, 111, 1, 3, 106, 32, 113, 1, 3, 113, 105, 106, 1,
+ 3, 14, 93, 92, 1, 3, 14, 92, 114, 1, 3, 93, 24, 102, 1, 3, 102, 92, 93, 1,
+3, 23, 111, 92, 1, 3, 23, 92, 102, 1, 3, 111, 33, 114, 1, 3, 114, 92, 111, 1,
+ 3, 16, 116, 103, 1, 3, 16, 103, 104, 1, 3, 116, 35, 118, 1, 3, 118, 103, 116, 1,
+ 3, 31, 119, 103, 1, 3, 31, 103, 118, 1, 3, 119, 32, 104, 1, 3, 104, 103, 119, 1,
+ 3, 18, 121, 117, 1, 3, 18, 117, 125, 1, 3, 121, 36, 123, 1, 3, 123, 117, 121, 1,
+ 3, 31, 118, 117, 1, 3, 31, 117, 123, 1, 3, 118, 35, 125, 1, 3, 125, 117, 118, 1,
+ 3, 19, 127, 122, 1, 3, 19, 122, 130, 1, 3, 127, 37, 128, 1, 3, 128, 122, 127, 1,
+ 3, 31, 123, 122, 1, 3, 31, 122, 128, 1, 3, 123, 36, 130, 1, 3, 130, 122, 123, 1,
+ 3, 17, 113, 112, 1, 3, 17, 112, 131, 1, 3, 113, 32, 119, 1, 3, 119, 112, 113, 1,
+ 3, 31, 128, 112, 1, 3, 31, 112, 119, 1, 3, 128, 37, 131, 1, 3, 131, 112, 128, 1,
+ 3, 121, 18, 133, 1, 3, 133, 120, 121, 1, 3, 39, 134, 120, 1, 3, 39, 120, 133, 1,
+ 3, 134, 27, 135, 1, 3, 135, 120, 134, 1, 3, 36, 121, 120, 1, 3, 36, 120, 135, 1,
+ 3, 12, 82, 81, 1, 3, 12, 81, 138, 1, 3, 82, 28, 136, 1, 3, 136, 81, 82, 1,
+3, 27, 134, 81, 1, 3, 27, 81, 136, 1, 3, 134, 39, 138, 1, 3, 138, 81, 134, 1,
+ 3, 15, 139, 94, 1, 3, 15, 94, 95, 1, 3, 139, 40, 140, 1, 3, 140, 94, 139, 1,
+ 3, 27, 136, 94, 1, 3, 27, 94, 140, 1, 3, 136, 28, 95, 1, 3, 95, 94, 136, 1,
+ 3, 141, 19, 130, 1, 3, 130, 129, 141, 1, 3, 130, 36, 135, 1, 3, 135, 129, 130, 1,
+ 3, 27, 140, 129, 1, 3, 27, 129, 135, 1, 3, 40, 141, 129, 1, 3, 40, 129, 140, 1,
+ 3, 14, 114, 89, 1, 3, 14, 89, 90, 1, 3, 114, 33, 142, 1, 3, 142, 89, 114, 1,
+ 3, 25, 143, 89, 1, 3, 25, 89, 142, 1, 3, 143, 26, 90, 1, 3, 90, 89, 143, 1,
+ 3, 17, 131, 109, 1, 3, 17, 109, 110, 1, 3, 131, 37, 144, 1, 3, 144, 109, 131, 1,
+ 3, 25, 142, 109, 1, 3, 25, 109, 144, 1, 3, 142, 33, 110, 1, 3, 110, 109, 142, 1,
+ 3, 19, 141, 126, 1, 3, 19, 126, 127, 1, 3, 141, 40, 145, 1, 3, 145, 126, 141, 1,
+ 3, 25, 144, 126, 1, 3, 25, 126, 145, 1, 3, 144, 37, 127, 1, 3, 127, 126, 144, 1,
+ 3, 15, 97, 96, 1, 3, 15, 96, 139, 1, 3, 97, 26, 143, 1, 3, 143, 96, 97, 1,
+3, 25, 145, 96, 1, 3, 25, 96, 143, 1, 3, 145, 40, 139, 1, 3, 139, 96, 145, 1,
+ 3, 12, 146, 75, 1, 3, 12, 75, 76, 1, 3, 146, 41, 148, 1, 3, 148, 75, 146, 1,
+ 3, 21, 149, 75, 1, 3, 21, 75, 148, 1, 3, 149, 22, 76, 1, 3, 76, 75, 149, 1,
+ 3, 155, 8, 151, 1, 3, 151, 147, 155, 1, 3, 43, 153, 147, 1, 3, 43, 147, 151, 1,
+ 3, 153, 21, 148, 1, 3, 148, 147, 153, 1, 3, 41, 155, 147, 1, 3, 41, 147, 148, 1,
+ 3, 160, 11, 157, 1, 3, 157, 152, 160, 1, 3, 44, 158, 152, 1, 3, 44, 152, 157, 1,
+ 3, 158, 21, 153, 1, 3, 153, 152, 158, 1, 3, 43, 160, 152, 1, 3, 43, 152, 153, 1,
+ 3, 13, 88, 87, 1, 3, 13, 87, 161, 1, 3, 88, 22, 149, 1, 3, 149, 87, 88, 1,
+3, 21, 158, 87, 1, 3, 21, 87, 149, 1, 3, 158, 44, 161, 1, 3, 161, 87, 158, 1,
+ 3, 18, 162, 132, 1, 3, 18, 132, 133, 1, 3, 162, 45, 164, 1, 3, 164, 132, 162, 1,
+ 3, 38, 165, 132, 1, 3, 38, 132, 164, 1, 3, 165, 39, 133, 1, 3, 133, 132, 165, 1,
+ 3, 170, 9, 167, 1, 3, 167, 163, 170, 1, 3, 47, 168, 163, 1, 3, 47, 163, 167, 1,
+ 3, 168, 38, 164, 1, 3, 164, 163, 168, 1, 3, 45, 170, 163, 1, 3, 45, 163, 164, 1,
+3, 8, 155, 154, 1, 3, 8, 154, 173, 1, 3, 155, 41, 171, 1, 3, 171, 154, 155, 1,
+ 3, 38, 168, 154, 1, 3, 38, 154, 171, 1, 3, 168, 47, 173, 1, 3, 173, 154, 168, 1,
+ 3, 146, 12, 138, 1, 3, 138, 137, 146, 1, 3, 39, 165, 137, 1, 3, 39, 137, 138, 1,
+ 3, 165, 38, 171, 1, 3, 171, 137, 165, 1, 3, 41, 146, 137, 1, 3, 41, 137, 171, 1,
+ 3, 16, 108, 107, 1, 3, 16, 107, 177, 1, 3, 108, 30, 174, 1, 3, 174, 107, 108, 1,
+ 3, 29, 176, 107, 1, 3, 29, 107, 174, 1, 3, 176, 50, 177, 1, 3, 177, 107, 176, 1,
+ 3, 99, 13, 161, 1, 3, 161, 98, 99, 1, 3, 44, 178, 98, 1, 3, 44, 98, 161, 1,
+ 3, 178, 29, 174, 1, 3, 174, 98, 178, 1, 3, 30, 99, 98, 1, 3, 30, 98, 174, 1,
+ 3, 11, 180, 156, 1, 3, 11, 156, 157, 1, 3, 180, 49, 181, 1, 3, 181, 156, 180, 1,
+ 3, 29, 178, 156, 1, 3, 29, 156, 181, 1, 3, 178, 44, 157, 1, 3, 157, 156, 178, 1,
+ 3, 185, 10, 183, 1, 3, 183, 175, 185, 1, 3, 50, 176, 175, 1, 3, 50, 175, 183, 1,
+ 3, 176, 29, 181, 1, 3, 181, 175, 176, 1, 3, 49, 185, 175, 1, 3, 49, 175, 181, 1,
+ 3, 162, 18, 125, 1, 3, 125, 124, 162, 1, 3, 35, 186, 124, 1, 3, 35, 124, 125, 1,
+ 3, 186, 34, 187, 1, 3, 187, 124, 186, 1, 3, 45, 162, 124, 1, 3, 45, 124, 187, 1,
+ 3, 116, 16, 177, 1, 3, 177, 115, 116, 1, 3, 50, 188, 115, 1, 3, 50, 115, 177, 1,
+ 3, 188, 34, 186, 1, 3, 186, 115, 188, 1, 3, 35, 116, 115, 1, 3, 35, 115, 186, 1,
+ 3, 10, 190, 182, 1, 3, 10, 182, 183, 1, 3, 190, 52, 191, 1, 3, 191, 182, 190, 1,
+ 3, 34, 188, 182, 1, 3, 34, 182, 191, 1, 3, 188, 50, 183, 1, 3, 183, 182, 188, 1,
+3, 9, 170, 169, 1, 3, 9, 169, 193, 1, 3, 170, 45, 187, 1, 3, 187, 169, 170, 1,
+ 3, 34, 191, 169, 1, 3, 34, 169, 187, 1, 3, 191, 52, 193, 1, 3, 193, 169, 191, 1,
+ 3, 201, 1, 196, 1, 3, 196, 194, 201, 1, 3, 54, 198, 194, 1, 3, 54, 194, 196, 1,
+ 3, 198, 46, 199, 1, 3, 199, 194, 198, 1, 3, 56, 201, 194, 1, 3, 56, 194, 199, 1,
+3, 3, 203, 197, 1, 3, 3, 197, 206, 1, 3, 203, 55, 204, 1, 3, 204, 197, 203, 1,
+ 3, 46, 198, 197, 1, 3, 46, 197, 204, 1, 3, 198, 54, 206, 1, 3, 206, 197, 198, 1,
+ 3, 208, 8, 173, 1, 3, 173, 172, 208, 1, 3, 47, 207, 172, 1, 3, 47, 172, 173, 1,
+ 3, 207, 46, 204, 1, 3, 204, 172, 207, 1, 3, 55, 208, 172, 1, 3, 55, 172, 204, 1,
+3, 9, 209, 166, 1, 3, 9, 166, 167, 1, 3, 209, 56, 199, 1, 3, 199, 166, 209, 1,
+ 3, 46, 207, 166, 1, 3, 46, 166, 199, 1, 3, 207, 47, 167, 1, 3, 167, 166, 207, 1,
+ 3, 214, 1, 201, 1, 3, 201, 200, 214, 1, 3, 56, 210, 200, 1, 3, 56, 200, 201, 1,
+ 3, 210, 51, 212, 1, 3, 212, 200, 210, 1, 3, 59, 214, 200, 1, 3, 59, 200, 212, 1,
+ 3, 209, 9, 193, 1, 3, 193, 192, 209, 1, 3, 52, 215, 192, 1, 3, 52, 192, 193, 1,
+ 3, 51, 210, 192, 1, 3, 51, 192, 215, 1, 3, 210, 56, 209, 1, 3, 209, 192, 210, 1,
+ 3, 190, 10, 216, 1, 3, 216, 189, 190, 1, 3, 216, 57, 217, 1, 3, 217, 189, 216, 1,
+ 3, 51, 215, 189, 1, 3, 51, 189, 217, 1, 3, 52, 190, 189, 1, 3, 52, 189, 215, 1,
+ 3, 221, 0, 219, 1, 3, 219, 211, 221, 1, 3, 59, 212, 211, 1, 3, 59, 211, 219, 1,
+ 3, 212, 51, 217, 1, 3, 217, 211, 212, 1, 3, 57, 221, 211, 1, 3, 57, 211, 217, 1,
+ 3, 226, 0, 221, 1, 3, 221, 220, 226, 1, 3, 57, 222, 220, 1, 3, 57, 220, 221, 1,
+ 3, 222, 48, 224, 1, 3, 224, 220, 222, 1, 3, 62, 226, 220, 1, 3, 62, 220, 224, 1,
+ 3, 10, 185, 184, 1, 3, 10, 184, 216, 1, 3, 185, 49, 227, 1, 3, 227, 184, 185, 1,
+ 3, 48, 222, 184, 1, 3, 48, 184, 227, 1, 3, 222, 57, 216, 1, 3, 216, 184, 222, 1,
+ 3, 180, 11, 228, 1, 3, 228, 179, 180, 1, 3, 60, 229, 179, 1, 3, 60, 179, 228, 1,
+ 3, 229, 48, 227, 1, 3, 227, 179, 229, 1, 3, 49, 180, 179, 1, 3, 49, 179, 227, 1,
+3, 2, 231, 223, 1, 3, 2, 223, 233, 1, 3, 231, 62, 224, 1, 3, 224, 223, 231, 1,
+ 3, 48, 229, 223, 1, 3, 48, 223, 224, 1, 3, 229, 60, 233, 1, 3, 233, 223, 229, 1,
+3, 2, 233, 232, 1, 3, 2, 232, 237, 1, 3, 233, 60, 234, 1, 3, 234, 232, 233, 1,
+ 3, 42, 235, 232, 1, 3, 42, 232, 234, 1, 3, 235, 64, 237, 1, 3, 237, 232, 235, 1,
+ 3, 11, 160, 159, 1, 3, 11, 159, 228, 1, 3, 160, 43, 238, 1, 3, 238, 159, 160, 1,
+ 3, 42, 234, 159, 1, 3, 42, 159, 238, 1, 3, 234, 60, 228, 1, 3, 228, 159, 234, 1,
+3, 8, 208, 150, 1, 3, 8, 150, 151, 1, 3, 208, 55, 239, 1, 3, 239, 150, 208, 1,
+ 3, 42, 238, 150, 1, 3, 42, 150, 239, 1, 3, 238, 43, 151, 1, 3, 151, 150, 238, 1,
+3, 3, 241, 202, 1, 3, 3, 202, 203, 1, 3, 241, 64, 235, 1, 3, 235, 202, 241, 1,
+ 3, 42, 239, 202, 1, 3, 42, 202, 235, 1, 3, 239, 55, 203, 1, 3, 203, 202, 239, 1,
+ 3, 245, 2, 237, 1, 3, 237, 236, 245, 1, 3, 64, 242, 236, 1, 3, 64, 236, 237, 1,
+ 3, 242, 63, 244, 1, 3, 244, 236, 242, 1, 3, 68, 245, 236, 1, 3, 68, 236, 244, 1,
+ 3, 241, 3, 246, 1, 3, 246, 240, 241, 1, 3, 65, 248, 240, 1, 3, 65, 240, 246, 1,
+ 3, 248, 63, 242, 1, 3, 242, 240, 248, 1, 3, 64, 241, 240, 1, 3, 64, 240, 242, 1,
+3, 4, 250, 247, 1, 3, 4, 247, 253, 1, 3, 67, 251, 247, 1, 3, 67, 247, 250, 1,
+ 3, 63, 248, 247, 1, 3, 63, 247, 251, 1, 3, 65, 253, 247, 1, 3, 65, 247, 248, 1,
+3, 7, 255, 243, 1, 3, 7, 243, 257, 1, 3, 68, 244, 243, 1, 3, 68, 243, 255, 1,
+ 3, 63, 251, 243, 1, 3, 63, 243, 244, 1, 3, 67, 257, 243, 1, 3, 67, 243, 251, 1,
+ 3, 246, 3, 206, 1, 3, 206, 205, 246, 1, 3, 54, 258, 205, 1, 3, 54, 205, 206, 1,
+ 3, 258, 53, 259, 1, 3, 259, 205, 258, 1, 3, 65, 246, 205, 1, 3, 65, 205, 259, 1,
+3, 1, 260, 195, 1, 3, 1, 195, 196, 1, 3, 260, 69, 262, 1, 3, 262, 195, 260, 1,
+ 3, 53, 258, 195, 1, 3, 53, 195, 262, 1, 3, 258, 54, 196, 1, 3, 196, 195, 258, 1,
+ 3, 267, 5, 264, 1, 3, 264, 261, 267, 1, 3, 70, 265, 261, 1, 3, 70, 261, 264, 1,
+ 3, 53, 262, 261, 1, 3, 53, 261, 265, 1, 3, 262, 69, 267, 1, 3, 267, 261, 262, 1,
+3, 4, 253, 252, 1, 3, 4, 252, 268, 1, 3, 253, 65, 259, 1, 3, 259, 252, 253, 1,
+ 3, 53, 265, 252, 1, 3, 53, 252, 259, 1, 3, 70, 268, 252, 1, 3, 70, 252, 265, 1,
+3, 1, 214, 213, 1, 3, 1, 213, 260, 1, 3, 214, 59, 269, 1, 3, 269, 213, 214, 1,
+ 3, 58, 270, 213, 1, 3, 58, 213, 269, 1, 3, 270, 69, 260, 1, 3, 260, 213, 270, 1,
+3, 0, 271, 218, 1, 3, 0, 218, 219, 1, 3, 271, 71, 273, 1, 3, 273, 218, 271, 1,
+ 3, 58, 269, 218, 1, 3, 58, 218, 273, 1, 3, 269, 59, 219, 1, 3, 219, 218, 269, 1,
+3, 6, 275, 272, 1, 3, 6, 272, 278, 1, 3, 72, 276, 272, 1, 3, 72, 272, 275, 1,
+ 3, 58, 273, 272, 1, 3, 58, 272, 276, 1, 3, 273, 71, 278, 1, 3, 278, 272, 273, 1,
+3, 5, 267, 266, 1, 3, 5, 266, 279, 1, 3, 267, 69, 270, 1, 3, 270, 266, 267, 1,
+ 3, 58, 276, 266, 1, 3, 58, 266, 270, 1, 3, 72, 279, 266, 1, 3, 72, 266, 276, 1,
+3, 0, 226, 225, 1, 3, 0, 225, 271, 1, 3, 226, 62, 280, 1, 3, 280, 225, 226, 1,
+ 3, 61, 281, 225, 1, 3, 61, 225, 280, 1, 3, 281, 71, 271, 1, 3, 271, 225, 281, 1,
+ 3, 231, 2, 245, 1, 3, 245, 230, 231, 1, 3, 68, 282, 230, 1, 3, 68, 230, 245, 1,
+ 3, 282, 61, 280, 1, 3, 280, 230, 282, 1, 3, 62, 231, 230, 1, 3, 62, 230, 280, 1,
+3, 7, 283, 254, 1, 3, 7, 254, 255, 1, 3, 73, 284, 254, 1, 3, 73, 254, 283, 1,
+ 3, 61, 282, 254, 1, 3, 61, 254, 284, 1, 3, 282, 68, 255, 1, 3, 255, 254, 282, 1,
+ 3, 285, 6, 278, 1, 3, 278, 277, 285, 1, 3, 278, 71, 281, 1, 3, 281, 277, 278, 1,
+ 3, 61, 284, 277, 1, 3, 61, 277, 281, 1, 3, 73, 285, 277, 1, 3, 73, 277, 284, 1,
+3, 4, 268, 249, 1, 3, 4, 249, 250, 1, 3, 268, 70, 286, 1, 3, 286, 249, 268, 1,
+ 3, 66, 287, 249, 1, 3, 66, 249, 286, 1, 3, 287, 67, 250, 1, 3, 250, 249, 287, 1,
+3, 5, 279, 263, 1, 3, 5, 263, 264, 1, 3, 279, 72, 288, 1, 3, 288, 263, 279, 1,
+ 3, 66, 286, 263, 1, 3, 66, 263, 288, 1, 3, 286, 70, 264, 1, 3, 264, 263, 286, 1,
+3, 6, 285, 274, 1, 3, 6, 274, 275, 1, 3, 285, 73, 289, 1, 3, 289, 274, 285, 1,
+ 3, 66, 288, 274, 1, 3, 66, 274, 289, 1, 3, 288, 72, 275, 1, 3, 275, 274, 288, 1,
+3, 7, 257, 256, 1, 3, 7, 256, 283, 1, 3, 257, 67, 287, 1, 3, 287, 256, 257, 1,
+ 3, 66, 289, 256, 1, 3, 66, 256, 287, 1, 3, 289, 73, 283, 1, 3, 283, 256, 289, 1,
+
+ 0
+};
+
+struct lwo LWO_s1_3 =
+{
+ 290, /* number of points */
+ s1_3_PNTS, s1_3_normals, s1_3_POLS, 0L
+};
+
+#endif /* USE_GL */
+
+/* End of s1_3.c */
--- /dev/null
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)s1_4.c 4.2 97/04/20 xlockmore";
+
+#endif
+
+/*-
+ * Points, polygons, and normal vectors to render "s1_4" in 3D.
+ *
+ * Generated by lw2ogl. Link this with your program but do
+ * not edit by hand.
+ */
+
+#include "xlock.h"
+
+#ifdef USE_GL
+
+#include <GL/gl.h>
+#include "glx/buildlwo.h"
+
+GLfloat s1_4_PNTS[] =
+{
+ (GLfloat) 0.691977, (GLfloat) 0.424648, (GLfloat) - 0.335934,
+ (GLfloat) 0.691977, (GLfloat) 0.424648, (GLfloat) - 0.664066,
+ (GLfloat) 0.910107, (GLfloat) 0.206343, (GLfloat) - 0.335934,
+ (GLfloat) 0.910107, (GLfloat) 0.206343, (GLfloat) - 0.664066,
+ (GLfloat) 0.820528, (GLfloat) 0.154011, (GLfloat) - 0.638667,
+ (GLfloat) 0.608078, (GLfloat) 0.332278, (GLfloat) - 0.638667,
+ (GLfloat) 0.608078, (GLfloat) 0.332278, (GLfloat) - 0.361333,
+ (GLfloat) 0.820528, (GLfloat) 0.154011, (GLfloat) - 0.361333,
+ (GLfloat) 1.065609, (GLfloat) 0.289676, (GLfloat) - 0.638205,
+ (GLfloat) 1.074101, (GLfloat) 0.505017, (GLfloat) - 0.638205,
+ (GLfloat) 1.074101, (GLfloat) 0.505017, (GLfloat) - 0.361795,
+ (GLfloat) 1.065609, (GLfloat) 0.289676, (GLfloat) - 0.361795,
+ (GLfloat) 1.235562, (GLfloat) 0.083949, (GLfloat) - 0.664066,
+ (GLfloat) 1.235562, (GLfloat) 0.083949, (GLfloat) - 0.335934,
+ (GLfloat) 1.331736, (GLfloat) 0.017726, (GLfloat) - 0.361333,
+ (GLfloat) 1.331736, (GLfloat) 0.017726, (GLfloat) - 0.638667,
+ (GLfloat) 1.431839, (GLfloat) 0.331232, (GLfloat) - 0.335934,
+ (GLfloat) 1.517309, (GLfloat) 0.223825, (GLfloat) - 0.361333,
+ (GLfloat) 1.431839, (GLfloat) 0.331232, (GLfloat) - 0.664066,
+ (GLfloat) 1.517309, (GLfloat) 0.223825, (GLfloat) - 0.638667,
+ (GLfloat) 1.243033, (GLfloat) - 0.034453, (GLfloat) - 0.500000,
+ (GLfloat) 1.136909, (GLfloat) 0.161755, (GLfloat) - 0.500000,
+ (GLfloat) 1.199875, (GLfloat) 0.038989, (GLfloat) - 0.500000,
+ (GLfloat) 1.400739, (GLfloat) 0.142695, (GLfloat) - 0.261940,
+ (GLfloat) 1.284897, (GLfloat) 0.013483, (GLfloat) - 0.325812,
+ (GLfloat) 1.438241, (GLfloat) 0.108423, (GLfloat) - 0.500000,
+ (GLfloat) 1.310688, (GLfloat) - 0.015661, (GLfloat) - 0.500000,
+ (GLfloat) 1.400739, (GLfloat) 0.142695, (GLfloat) - 0.738060,
+ (GLfloat) 1.284897, (GLfloat) 0.013483, (GLfloat) - 0.674188,
+ (GLfloat) 1.216443, (GLfloat) 0.317256, (GLfloat) - 0.300040,
+ (GLfloat) 1.333700, (GLfloat) 0.207591, (GLfloat) - 0.276273,
+ (GLfloat) 1.558444, (GLfloat) 0.319842, (GLfloat) - 0.500000,
+ (GLfloat) 1.515677, (GLfloat) 0.272720, (GLfloat) - 0.325812,
+ (GLfloat) 1.429500, (GLfloat) 0.116294, (GLfloat) - 0.322437,
+ (GLfloat) 1.295978, (GLfloat) 0.472757, (GLfloat) - 0.500000,
+ (GLfloat) 1.467526, (GLfloat) 0.376193, (GLfloat) - 0.500000,
+ (GLfloat) 1.515677, (GLfloat) 0.272720, (GLfloat) - 0.674188,
+ (GLfloat) 1.548313, (GLfloat) 0.248248, (GLfloat) - 0.500000,
+ (GLfloat) 1.216443, (GLfloat) 0.317256, (GLfloat) - 0.699960,
+ (GLfloat) 1.333700, (GLfloat) 0.207591, (GLfloat) - 0.723727,
+ (GLfloat) 1.429500, (GLfloat) 0.116294, (GLfloat) - 0.677562,
+ (GLfloat) 1.158118, (GLfloat) 0.203222, (GLfloat) - 0.646637,
+ (GLfloat) 0.998811, (GLfloat) 0.235426, (GLfloat) - 0.500000,
+ (GLfloat) 1.064065, (GLfloat) 0.250523, (GLfloat) - 0.500000,
+ (GLfloat) 1.158118, (GLfloat) 0.203222, (GLfloat) - 0.353363,
+ (GLfloat) 1.274769, (GLfloat) 0.431290, (GLfloat) - 0.646637,
+ (GLfloat) 0.920924, (GLfloat) 0.379919, (GLfloat) - 0.699960,
+ (GLfloat) 1.069855, (GLfloat) 0.397346, (GLfloat) - 0.688461,
+ (GLfloat) 0.920924, (GLfloat) 0.379919, (GLfloat) - 0.300040,
+ (GLfloat) 1.069855, (GLfloat) 0.397346, (GLfloat) - 0.311539,
+ (GLfloat) 1.274769, (GLfloat) 0.431290, (GLfloat) - 0.353363,
+ (GLfloat) 0.843038, (GLfloat) 0.524412, (GLfloat) - 0.500000,
+ (GLfloat) 1.075645, (GLfloat) 0.544169, (GLfloat) - 0.500000,
+ (GLfloat) 0.735693, (GLfloat) 0.265534, (GLfloat) - 0.738060,
+ (GLfloat) 0.801042, (GLfloat) 0.315496, (GLfloat) - 0.723727,
+ (GLfloat) 0.978041, (GLfloat) 0.273957, (GLfloat) - 0.646637,
+ (GLfloat) 0.863808, (GLfloat) 0.485881, (GLfloat) - 0.646637,
+ (GLfloat) 0.863808, (GLfloat) 0.485881, (GLfloat) - 0.353363,
+ (GLfloat) 0.555594, (GLfloat) 0.419060, (GLfloat) - 0.500000,
+ (GLfloat) 0.652318, (GLfloat) 0.464340, (GLfloat) - 0.500000,
+ (GLfloat) 0.978041, (GLfloat) 0.273957, (GLfloat) - 0.353363,
+ (GLfloat) 0.735693, (GLfloat) 0.265534, (GLfloat) - 0.261940,
+ (GLfloat) 0.801042, (GLfloat) 0.315496, (GLfloat) - 0.276273,
+ (GLfloat) 0.915792, (GLfloat) 0.112008, (GLfloat) - 0.500000,
+ (GLfloat) 0.949767, (GLfloat) 0.166652, (GLfloat) - 0.500000,
+ (GLfloat) 0.867858, (GLfloat) 0.153664, (GLfloat) - 0.674188,
+ (GLfloat) 0.702437, (GLfloat) 0.229003, (GLfloat) - 0.500000,
+ (GLfloat) 0.846018, (GLfloat) 0.123878, (GLfloat) - 0.500000,
+ (GLfloat) 0.867858, (GLfloat) 0.153664, (GLfloat) - 0.325812,
+ (GLfloat) 0.604310, (GLfloat) 0.378335, (GLfloat) - 0.674188,
+ (GLfloat) 0.709997, (GLfloat) 0.238013, (GLfloat) - 0.677562,
+ (GLfloat) 0.604310, (GLfloat) 0.378335, (GLfloat) - 0.325812,
+ (GLfloat) 0.573976, (GLfloat) 0.352148, (GLfloat) - 0.500000,
+ (GLfloat) 0.709997, (GLfloat) 0.238013, (GLfloat) - 0.322437,
+ (GLfloat) 1.231827, (GLfloat) 0.004686, (GLfloat) - 0.594296,
+ (GLfloat) 1.178115, (GLfloat) 0.109780, (GLfloat) - 0.584482,
+ (GLfloat) 1.208797, (GLfloat) 0.050229, (GLfloat) - 0.589491,
+ (GLfloat) 1.231827, (GLfloat) 0.004686, (GLfloat) - 0.405704,
+ (GLfloat) 1.221734, (GLfloat) - 0.007055, (GLfloat) - 0.500000,
+ (GLfloat) 1.279887, (GLfloat) - 0.026194, (GLfloat) - 0.587500,
+ (GLfloat) 1.253444, (GLfloat) - 0.022303, (GLfloat) - 0.594949,
+ (GLfloat) 1.312568, (GLfloat) 0.098620, (GLfloat) - 0.720025,
+ (GLfloat) 1.262105, (GLfloat) 0.039911, (GLfloat) - 0.672877,
+ (GLfloat) 1.312568, (GLfloat) 0.098620, (GLfloat) - 0.279975,
+ (GLfloat) 1.262105, (GLfloat) 0.039911, (GLfloat) - 0.327123,
+ (GLfloat) 1.279887, (GLfloat) - 0.026194, (GLfloat) - 0.412500,
+ (GLfloat) 1.253444, (GLfloat) - 0.022303, (GLfloat) - 0.405051,
+ (GLfloat) 1.178115, (GLfloat) 0.109780, (GLfloat) - 0.415518,
+ (GLfloat) 1.208797, (GLfloat) 0.050229, (GLfloat) - 0.410509,
+ (GLfloat) 1.373428, (GLfloat) 0.045002, (GLfloat) - 0.409500,
+ (GLfloat) 1.317700, (GLfloat) - 0.004566, (GLfloat) - 0.417500,
+ (GLfloat) 1.270418, (GLfloat) - 0.038526, (GLfloat) - 0.500000,
+ (GLfloat) 1.359179, (GLfloat) 0.061869, (GLfloat) - 0.294000,
+ (GLfloat) 1.309178, (GLfloat) 0.008154, (GLfloat) - 0.339125,
+ (GLfloat) 1.359179, (GLfloat) 0.061869, (GLfloat) - 0.706000,
+ (GLfloat) 1.309178, (GLfloat) 0.008154, (GLfloat) - 0.660875,
+ (GLfloat) 1.373428, (GLfloat) 0.045002, (GLfloat) - 0.590500,
+ (GLfloat) 1.317700, (GLfloat) - 0.004566, (GLfloat) - 0.582500,
+ (GLfloat) 1.236552, (GLfloat) 0.195985, (GLfloat) - 0.302876,
+ (GLfloat) 1.280170, (GLfloat) 0.140150, (GLfloat) - 0.291188,
+ (GLfloat) 1.433681, (GLfloat) 0.239521, (GLfloat) - 0.279975,
+ (GLfloat) 1.373124, (GLfloat) 0.169070, (GLfloat) - 0.264259,
+ (GLfloat) 1.337615, (GLfloat) 0.072243, (GLfloat) - 0.277994,
+ (GLfloat) 1.514422, (GLfloat) 0.333454, (GLfloat) - 0.405704,
+ (GLfloat) 1.484144, (GLfloat) 0.298229, (GLfloat) - 0.327123,
+ (GLfloat) 1.476277, (GLfloat) 0.191919, (GLfloat) - 0.294000,
+ (GLfloat) 1.463411, (GLfloat) 0.213552, (GLfloat) - 0.277994,
+ (GLfloat) 1.324207, (GLfloat) 0.325294, (GLfloat) - 0.302876,
+ (GLfloat) 1.387230, (GLfloat) 0.275032, (GLfloat) - 0.291188,
+ (GLfloat) 1.494540, (GLfloat) 0.179511, (GLfloat) - 0.409500,
+ (GLfloat) 1.483059, (GLfloat) 0.179084, (GLfloat) - 0.335375,
+ (GLfloat) 1.418631, (GLfloat) 0.126081, (GLfloat) - 0.278500,
+ (GLfloat) 1.555568, (GLfloat) 0.279982, (GLfloat) - 0.412500,
+ (GLfloat) 1.524471, (GLfloat) 0.247261, (GLfloat) - 0.339125,
+ (GLfloat) 1.372652, (GLfloat) 0.056465, (GLfloat) - 0.335375,
+ (GLfloat) 1.382643, (GLfloat) 0.411500, (GLfloat) - 0.415518,
+ (GLfloat) 1.458604, (GLfloat) 0.364953, (GLfloat) - 0.410509,
+ (GLfloat) 1.514422, (GLfloat) 0.333454, (GLfloat) - 0.594296,
+ (GLfloat) 1.524515, (GLfloat) 0.345196, (GLfloat) - 0.500000,
+ (GLfloat) 1.547582, (GLfloat) 0.308099, (GLfloat) - 0.405051,
+ (GLfloat) 1.433681, (GLfloat) 0.239521, (GLfloat) - 0.720025,
+ (GLfloat) 1.484144, (GLfloat) 0.298229, (GLfloat) - 0.672877,
+ (GLfloat) 1.555568, (GLfloat) 0.279982, (GLfloat) - 0.587500,
+ (GLfloat) 1.547582, (GLfloat) 0.308099, (GLfloat) - 0.594949,
+ (GLfloat) 1.382643, (GLfloat) 0.411500, (GLfloat) - 0.584482,
+ (GLfloat) 1.458604, (GLfloat) 0.364953, (GLfloat) - 0.589491,
+ (GLfloat) 1.494540, (GLfloat) 0.179511, (GLfloat) - 0.590500,
+ (GLfloat) 1.538011, (GLfloat) 0.240115, (GLfloat) - 0.582500,
+ (GLfloat) 1.566843, (GLfloat) 0.290687, (GLfloat) - 0.500000,
+ (GLfloat) 1.476277, (GLfloat) 0.191919, (GLfloat) - 0.706000,
+ (GLfloat) 1.524471, (GLfloat) 0.247261, (GLfloat) - 0.660875,
+ (GLfloat) 1.538011, (GLfloat) 0.240115, (GLfloat) - 0.417500,
+ (GLfloat) 1.324207, (GLfloat) 0.325294, (GLfloat) - 0.697124,
+ (GLfloat) 1.387230, (GLfloat) 0.275032, (GLfloat) - 0.708812,
+ (GLfloat) 1.373124, (GLfloat) 0.169070, (GLfloat) - 0.735741,
+ (GLfloat) 1.463411, (GLfloat) 0.213552, (GLfloat) - 0.722006,
+ (GLfloat) 1.337615, (GLfloat) 0.072243, (GLfloat) - 0.722006,
+ (GLfloat) 1.236552, (GLfloat) 0.195985, (GLfloat) - 0.697124,
+ (GLfloat) 1.280170, (GLfloat) 0.140150, (GLfloat) - 0.708812,
+ (GLfloat) 1.372652, (GLfloat) 0.056465, (GLfloat) - 0.664625,
+ (GLfloat) 1.418631, (GLfloat) 0.126081, (GLfloat) - 0.721500,
+ (GLfloat) 1.483059, (GLfloat) 0.179084, (GLfloat) - 0.664625,
+ (GLfloat) 1.436048, (GLfloat) 0.110398, (GLfloat) - 0.402250,
+ (GLfloat) 1.370641, (GLfloat) 0.037756, (GLfloat) - 0.500000,
+ (GLfloat) 1.501456, (GLfloat) 0.183040, (GLfloat) - 0.500000,
+ (GLfloat) 1.436048, (GLfloat) 0.110398, (GLfloat) - 0.597750,
+ (GLfloat) 1.200029, (GLfloat) 0.142107, (GLfloat) - 0.654883,
+ (GLfloat) 1.103513, (GLfloat) 0.226037, (GLfloat) - 0.576713,
+ (GLfloat) 1.142211, (GLfloat) 0.172121, (GLfloat) - 0.579984,
+ (GLfloat) 1.170811, (GLfloat) 0.099004, (GLfloat) - 0.500000,
+ (GLfloat) 1.027452, (GLfloat) 0.263727, (GLfloat) - 0.576713,
+ (GLfloat) 1.064451, (GLfloat) 0.260311, (GLfloat) - 0.575384,
+ (GLfloat) 1.103513, (GLfloat) 0.226037, (GLfloat) - 0.423287,
+ (GLfloat) 1.100538, (GLfloat) 0.216006, (GLfloat) - 0.500000,
+ (GLfloat) 1.127320, (GLfloat) 0.306289, (GLfloat) - 0.678998,
+ (GLfloat) 1.112441, (GLfloat) 0.256132, (GLfloat) - 0.640641,
+ (GLfloat) 1.127320, (GLfloat) 0.306289, (GLfloat) - 0.321002,
+ (GLfloat) 1.112441, (GLfloat) 0.256132, (GLfloat) - 0.359359,
+ (GLfloat) 1.142211, (GLfloat) 0.172121, (GLfloat) - 0.420016,
+ (GLfloat) 1.027452, (GLfloat) 0.263727, (GLfloat) - 0.423287,
+ (GLfloat) 1.064451, (GLfloat) 0.260311, (GLfloat) - 0.424615,
+ (GLfloat) 1.200029, (GLfloat) 0.142107, (GLfloat) - 0.345117,
+ (GLfloat) 1.360730, (GLfloat) 0.379173, (GLfloat) - 0.654883,
+ (GLfloat) 1.163029, (GLfloat) 0.426667, (GLfloat) - 0.678998,
+ (GLfloat) 1.248257, (GLfloat) 0.379456, (GLfloat) - 0.686629,
+ (GLfloat) 1.280379, (GLfloat) 0.260640, (GLfloat) - 0.711204,
+ (GLfloat) 0.979330, (GLfloat) 0.456830, (GLfloat) - 0.678998,
+ (GLfloat) 1.072171, (GLfloat) 0.456076, (GLfloat) - 0.675897,
+ (GLfloat) 1.145175, (GLfloat) 0.366478, (GLfloat) - 0.691783,
+ (GLfloat) 1.186836, (GLfloat) 0.506919, (GLfloat) - 0.576713,
+ (GLfloat) 1.177908, (GLfloat) 0.476825, (GLfloat) - 0.640641,
+ (GLfloat) 1.184630, (GLfloat) 0.255055, (GLfloat) - 0.686629,
+ (GLfloat) 1.008203, (GLfloat) 0.340968, (GLfloat) - 0.678998,
+ (GLfloat) 1.067539, (GLfloat) 0.338617, (GLfloat) - 0.675897,
+ (GLfloat) 1.280379, (GLfloat) 0.260640, (GLfloat) - 0.288796,
+ (GLfloat) 1.163029, (GLfloat) 0.426667, (GLfloat) - 0.321002,
+ (GLfloat) 1.248257, (GLfloat) 0.379456, (GLfloat) - 0.313371,
+ (GLfloat) 1.360730, (GLfloat) 0.379173, (GLfloat) - 0.345117,
+ (GLfloat) 1.184630, (GLfloat) 0.255055, (GLfloat) - 0.313371,
+ (GLfloat) 1.008203, (GLfloat) 0.340968, (GLfloat) - 0.321002,
+ (GLfloat) 1.067539, (GLfloat) 0.338617, (GLfloat) - 0.324103,
+ (GLfloat) 1.145175, (GLfloat) 0.366478, (GLfloat) - 0.308217,
+ (GLfloat) 1.186836, (GLfloat) 0.506919, (GLfloat) - 0.423287,
+ (GLfloat) 1.177908, (GLfloat) 0.476825, (GLfloat) - 0.359359,
+ (GLfloat) 0.979330, (GLfloat) 0.456830, (GLfloat) - 0.321002,
+ (GLfloat) 1.072171, (GLfloat) 0.456076, (GLfloat) - 0.324103,
+ (GLfloat) 1.389948, (GLfloat) 0.422275, (GLfloat) - 0.500000,
+ (GLfloat) 1.290676, (GLfloat) 0.462390, (GLfloat) - 0.579984,
+ (GLfloat) 1.290676, (GLfloat) 0.462390, (GLfloat) - 0.420016,
+ (GLfloat) 0.960081, (GLfloat) 0.534071, (GLfloat) - 0.423287,
+ (GLfloat) 1.075259, (GLfloat) 0.534381, (GLfloat) - 0.424615,
+ (GLfloat) 1.189812, (GLfloat) 0.516951, (GLfloat) - 0.500000,
+ (GLfloat) 0.960081, (GLfloat) 0.534071, (GLfloat) - 0.576713,
+ (GLfloat) 1.075259, (GLfloat) 0.534381, (GLfloat) - 0.575384,
+ (GLfloat) 0.808756, (GLfloat) 0.407522, (GLfloat) - 0.697124,
+ (GLfloat) 0.693423, (GLfloat) 0.349037, (GLfloat) - 0.720025,
+ (GLfloat) 0.741552, (GLfloat) 0.375033, (GLfloat) - 0.708812,
+ (GLfloat) 0.901933, (GLfloat) 0.290859, (GLfloat) - 0.697124,
+ (GLfloat) 0.855345, (GLfloat) 0.349190, (GLfloat) - 0.711204,
+ (GLfloat) 0.889770, (GLfloat) 0.437716, (GLfloat) - 0.686629,
+ (GLfloat) 0.746638, (GLfloat) 0.485298, (GLfloat) - 0.584482,
+ (GLfloat) 0.769932, (GLfloat) 0.456132, (GLfloat) - 0.654883,
+ (GLfloat) 0.964051, (GLfloat) 0.213083, (GLfloat) - 0.584482,
+ (GLfloat) 0.940757, (GLfloat) 0.242249, (GLfloat) - 0.654883,
+ (GLfloat) 0.952079, (GLfloat) 0.322122, (GLfloat) - 0.686629,
+ (GLfloat) 0.830643, (GLfloat) 0.226200, (GLfloat) - 0.720025,
+ (GLfloat) 0.860532, (GLfloat) 0.255958, (GLfloat) - 0.708812,
+ (GLfloat) 0.993766, (GLfloat) 0.398899, (GLfloat) - 0.691783,
+ (GLfloat) 1.020234, (GLfloat) 0.292692, (GLfloat) - 0.640641,
+ (GLfloat) 0.967299, (GLfloat) 0.505105, (GLfloat) - 0.640641,
+ (GLfloat) 0.848231, (GLfloat) 0.514780, (GLfloat) - 0.579984,
+ (GLfloat) 0.746638, (GLfloat) 0.485298, (GLfloat) - 0.415518,
+ (GLfloat) 0.738873, (GLfloat) 0.495020, (GLfloat) - 0.500000,
+ (GLfloat) 0.601944, (GLfloat) 0.430927, (GLfloat) - 0.594296,
+ (GLfloat) 0.662233, (GLfloat) 0.454417, (GLfloat) - 0.589491,
+ (GLfloat) 0.957675, (GLfloat) 0.543726, (GLfloat) - 0.500000,
+ (GLfloat) 0.967299, (GLfloat) 0.505105, (GLfloat) - 0.359359,
+ (GLfloat) 0.848231, (GLfloat) 0.514780, (GLfloat) - 0.420016,
+ (GLfloat) 0.601944, (GLfloat) 0.430927, (GLfloat) - 0.405704,
+ (GLfloat) 0.662233, (GLfloat) 0.454417, (GLfloat) - 0.410509,
+ (GLfloat) 0.808756, (GLfloat) 0.407522, (GLfloat) - 0.302876,
+ (GLfloat) 0.769932, (GLfloat) 0.456132, (GLfloat) - 0.345117,
+ (GLfloat) 0.889770, (GLfloat) 0.437716, (GLfloat) - 0.313371,
+ (GLfloat) 0.901933, (GLfloat) 0.290859, (GLfloat) - 0.302876,
+ (GLfloat) 0.855345, (GLfloat) 0.349190, (GLfloat) - 0.288796,
+ (GLfloat) 0.693423, (GLfloat) 0.349037, (GLfloat) - 0.279975,
+ (GLfloat) 0.741552, (GLfloat) 0.375033, (GLfloat) - 0.291188,
+ (GLfloat) 0.993766, (GLfloat) 0.398899, (GLfloat) - 0.308217,
+ (GLfloat) 1.020234, (GLfloat) 0.292692, (GLfloat) - 0.359359,
+ (GLfloat) 0.952079, (GLfloat) 0.322122, (GLfloat) - 0.313371,
+ (GLfloat) 0.830643, (GLfloat) 0.226200, (GLfloat) - 0.279975,
+ (GLfloat) 0.860532, (GLfloat) 0.255958, (GLfloat) - 0.291188,
+ (GLfloat) 0.964051, (GLfloat) 0.213083, (GLfloat) - 0.415518,
+ (GLfloat) 0.940757, (GLfloat) 0.242249, (GLfloat) - 0.345117,
+ (GLfloat) 0.993618, (GLfloat) 0.245059, (GLfloat) - 0.420016,
+ (GLfloat) 0.971816, (GLfloat) 0.203361, (GLfloat) - 0.500000,
+ (GLfloat) 0.922122, (GLfloat) 0.144310, (GLfloat) - 0.405704,
+ (GLfloat) 0.939852, (GLfloat) 0.176575, (GLfloat) - 0.410509,
+ (GLfloat) 1.029858, (GLfloat) 0.254072, (GLfloat) - 0.500000,
+ (GLfloat) 0.993618, (GLfloat) 0.245059, (GLfloat) - 0.579984,
+ (GLfloat) 0.922122, (GLfloat) 0.144310, (GLfloat) - 0.594296,
+ (GLfloat) 0.939852, (GLfloat) 0.176575, (GLfloat) - 0.589491,
+ (GLfloat) 0.933557, (GLfloat) 0.134073, (GLfloat) - 0.500000,
+ (GLfloat) 0.877985, (GLfloat) 0.117734, (GLfloat) - 0.412500,
+ (GLfloat) 0.903840, (GLfloat) 0.122594, (GLfloat) - 0.405051,
+ (GLfloat) 0.887817, (GLfloat) 0.175019, (GLfloat) - 0.327123,
+ (GLfloat) 0.887817, (GLfloat) 0.175019, (GLfloat) - 0.672877,
+ (GLfloat) 0.877985, (GLfloat) 0.117734, (GLfloat) - 0.587500,
+ (GLfloat) 0.903840, (GLfloat) 0.122594, (GLfloat) - 0.594949,
+ (GLfloat) 0.775446, (GLfloat) 0.175219, (GLfloat) - 0.590500,
+ (GLfloat) 0.837530, (GLfloat) 0.133890, (GLfloat) - 0.582500,
+ (GLfloat) 0.889078, (GLfloat) 0.106840, (GLfloat) - 0.500000,
+ (GLfloat) 0.787209, (GLfloat) 0.193905, (GLfloat) - 0.706000,
+ (GLfloat) 0.844199, (GLfloat) 0.147671, (GLfloat) - 0.660875,
+ (GLfloat) 0.787209, (GLfloat) 0.193905, (GLfloat) - 0.294000,
+ (GLfloat) 0.844199, (GLfloat) 0.147671, (GLfloat) - 0.339125,
+ (GLfloat) 0.775446, (GLfloat) 0.175219, (GLfloat) - 0.409500,
+ (GLfloat) 0.837530, (GLfloat) 0.133890, (GLfloat) - 0.417500,
+ (GLfloat) 0.762033, (GLfloat) 0.287619, (GLfloat) - 0.735741,
+ (GLfloat) 0.807717, (GLfloat) 0.204533, (GLfloat) - 0.722006,
+ (GLfloat) 0.636249, (GLfloat) 0.400218, (GLfloat) - 0.672877,
+ (GLfloat) 0.653151, (GLfloat) 0.306393, (GLfloat) - 0.706000,
+ (GLfloat) 0.664060, (GLfloat) 0.327000, (GLfloat) - 0.722006,
+ (GLfloat) 0.636792, (GLfloat) 0.291564, (GLfloat) - 0.590500,
+ (GLfloat) 0.648221, (GLfloat) 0.292739, (GLfloat) - 0.664625,
+ (GLfloat) 0.719399, (GLfloat) 0.249218, (GLfloat) - 0.721500,
+ (GLfloat) 0.562375, (GLfloat) 0.382563, (GLfloat) - 0.587500,
+ (GLfloat) 0.597724, (GLfloat) 0.354488, (GLfloat) - 0.660875,
+ (GLfloat) 0.774619, (GLfloat) 0.186679, (GLfloat) - 0.664625,
+ (GLfloat) 0.590509, (GLfloat) 0.441164, (GLfloat) - 0.500000,
+ (GLfloat) 0.567937, (GLfloat) 0.408940, (GLfloat) - 0.594949,
+ (GLfloat) 0.636249, (GLfloat) 0.400218, (GLfloat) - 0.327123,
+ (GLfloat) 0.562375, (GLfloat) 0.382563, (GLfloat) - 0.412500,
+ (GLfloat) 0.567937, (GLfloat) 0.408940, (GLfloat) - 0.405051,
+ (GLfloat) 0.636792, (GLfloat) 0.291564, (GLfloat) - 0.409500,
+ (GLfloat) 0.585310, (GLfloat) 0.345528, (GLfloat) - 0.417500,
+ (GLfloat) 0.549720, (GLfloat) 0.391595, (GLfloat) - 0.500000,
+ (GLfloat) 0.653151, (GLfloat) 0.306393, (GLfloat) - 0.294000,
+ (GLfloat) 0.597724, (GLfloat) 0.354488, (GLfloat) - 0.339125,
+ (GLfloat) 0.585310, (GLfloat) 0.345528, (GLfloat) - 0.582500,
+ (GLfloat) 0.762033, (GLfloat) 0.287619, (GLfloat) - 0.264259,
+ (GLfloat) 0.664060, (GLfloat) 0.327000, (GLfloat) - 0.277994,
+ (GLfloat) 0.807717, (GLfloat) 0.204533, (GLfloat) - 0.277994,
+ (GLfloat) 0.774619, (GLfloat) 0.186679, (GLfloat) - 0.335375,
+ (GLfloat) 0.719399, (GLfloat) 0.249218, (GLfloat) - 0.278500,
+ (GLfloat) 0.648221, (GLfloat) 0.292739, (GLfloat) - 0.335375,
+ (GLfloat) 0.704334, (GLfloat) 0.231264, (GLfloat) - 0.597750,
+ (GLfloat) 0.779215, (GLfloat) 0.168431, (GLfloat) - 0.500000,
+ (GLfloat) 0.629453, (GLfloat) 0.294096, (GLfloat) - 0.500000,
+ (GLfloat) 0.704334, (GLfloat) 0.231264, (GLfloat) - 0.402250,
+};
+
+GLfloat s1_4_normals[] =
+{
+ (GLfloat) - 0.797489, (GLfloat) - 0.388285, (GLfloat) - 0.461786,
+ (GLfloat) - 0.806184, (GLfloat) - 0.357959, (GLfloat) - 0.471096,
+ (GLfloat) - 0.893364, (GLfloat) - 0.424111, (GLfloat) - 0.148429,
+ (GLfloat) - 0.889195, (GLfloat) - 0.434532, (GLfloat) - 0.143226,
+ (GLfloat) - 0.778943, (GLfloat) - 0.605569, (GLfloat) - 0.162894,
+ (GLfloat) - 0.772426, (GLfloat) - 0.614820, (GLfloat) - 0.159231,
+ (GLfloat) - 0.666558, (GLfloat) - 0.549876, (GLfloat) - 0.503327,
+ (GLfloat) - 0.677911, (GLfloat) - 0.530666, (GLfloat) - 0.508753,
+ (GLfloat) - 0.797489, (GLfloat) - 0.388284, (GLfloat) 0.461786,
+ (GLfloat) - 0.806184, (GLfloat) - 0.357959, (GLfloat) 0.471097,
+ (GLfloat) - 0.677911, (GLfloat) - 0.530666, (GLfloat) 0.508753,
+ (GLfloat) - 0.666558, (GLfloat) - 0.549876, (GLfloat) 0.503327,
+ (GLfloat) - 0.778943, (GLfloat) - 0.605569, (GLfloat) 0.162893,
+ (GLfloat) - 0.772426, (GLfloat) - 0.614820, (GLfloat) 0.159231,
+ (GLfloat) - 0.889195, (GLfloat) - 0.434532, (GLfloat) 0.143226,
+ (GLfloat) - 0.893364, (GLfloat) - 0.424111, (GLfloat) 0.148429,
+ (GLfloat) 0.506235, (GLfloat) - 0.837464, (GLfloat) 0.205866,
+ (GLfloat) 0.527758, (GLfloat) - 0.830515, (GLfloat) 0.178091,
+ (GLfloat) 0.492576, (GLfloat) - 0.867532, (GLfloat) 0.068965,
+ (GLfloat) 0.502441, (GLfloat) - 0.861510, (GLfloat) 0.073162,
+ (GLfloat) - 0.106119, (GLfloat) - 0.984780, (GLfloat) 0.137644,
+ (GLfloat) - 0.145376, (GLfloat) - 0.977399, (GLfloat) 0.153482,
+ (GLfloat) 0.021131, (GLfloat) - 0.914284, (GLfloat) 0.404523,
+ (GLfloat) - 0.012401, (GLfloat) - 0.903702, (GLfloat) 0.427982,
+ (GLfloat) 0.527757, (GLfloat) - 0.830515, (GLfloat) - 0.178092,
+ (GLfloat) 0.506235, (GLfloat) - 0.837464, (GLfloat) - 0.205866,
+ (GLfloat) 0.021132, (GLfloat) - 0.914284, (GLfloat) - 0.404523,
+ (GLfloat) - 0.012401, (GLfloat) - 0.903702, (GLfloat) - 0.427983,
+ (GLfloat) - 0.145376, (GLfloat) - 0.977399, (GLfloat) - 0.153482,
+ (GLfloat) - 0.106119, (GLfloat) - 0.984780, (GLfloat) - 0.137645,
+ (GLfloat) 0.502441, (GLfloat) - 0.861510, (GLfloat) - 0.073162,
+ (GLfloat) 0.492576, (GLfloat) - 0.867532, (GLfloat) - 0.068965,
+ (GLfloat) - 0.548436, (GLfloat) - 0.209256, (GLfloat) 0.809586,
+ (GLfloat) - 0.557133, (GLfloat) - 0.173326, (GLfloat) 0.812134,
+ (GLfloat) - 0.281454, (GLfloat) 0.011196, (GLfloat) 0.959509,
+ (GLfloat) - 0.287811, (GLfloat) 0.033884, (GLfloat) 0.957087,
+ (GLfloat) - 0.161493, (GLfloat) - 0.079455, (GLfloat) 0.983670,
+ (GLfloat) - 0.160469, (GLfloat) - 0.081504, (GLfloat) 0.983670,
+ (GLfloat) - 0.417652, (GLfloat) - 0.317957, (GLfloat) 0.851158,
+ (GLfloat) - 0.412553, (GLfloat) - 0.327906, (GLfloat) 0.849869,
+ (GLfloat) 0.183686, (GLfloat) 0.514678, (GLfloat) 0.837476,
+ (GLfloat) 0.191133, (GLfloat) 0.514047, (GLfloat) 0.836196,
+ (GLfloat) 0.305019, (GLfloat) 0.420960, (GLfloat) 0.854258,
+ (GLfloat) 0.309443, (GLfloat) 0.419398, (GLfloat) 0.853434,
+ (GLfloat) 0.070662, (GLfloat) 0.160554, (GLfloat) 0.984494,
+ (GLfloat) 0.072116, (GLfloat) 0.157712, (GLfloat) 0.984848,
+ (GLfloat) - 0.043552, (GLfloat) 0.248570, (GLfloat) 0.967634,
+ (GLfloat) - 0.045553, (GLfloat) 0.254642, (GLfloat) 0.965962,
+ (GLfloat) 0.833765, (GLfloat) - 0.473703, (GLfloat) 0.283620,
+ (GLfloat) 0.823611, (GLfloat) - 0.501937, (GLfloat) 0.264054,
+ (GLfloat) 0.753164, (GLfloat) - 0.577527, (GLfloat) 0.314971,
+ (GLfloat) 0.750976, (GLfloat) - 0.585768, (GLfloat) 0.304813,
+ (GLfloat) 0.524744, (GLfloat) - 0.282162, (GLfloat) 0.803137,
+ (GLfloat) 0.515479, (GLfloat) - 0.259037, (GLfloat) 0.816812,
+ (GLfloat) 0.731077, (GLfloat) - 0.100383, (GLfloat) 0.674870,
+ (GLfloat) 0.725771, (GLfloat) - 0.074391, (GLfloat) 0.683903,
+ (GLfloat) 0.576854, (GLfloat) - 0.777370, (GLfloat) 0.250869,
+ (GLfloat) 0.569572, (GLfloat) - 0.770539, (GLfloat) 0.286108,
+ (GLfloat) 0.204307, (GLfloat) - 0.721596, (GLfloat) 0.661481,
+ (GLfloat) 0.158422, (GLfloat) - 0.717392, (GLfloat) 0.678418,
+ (GLfloat) 0.308874, (GLfloat) - 0.483661, (GLfloat) 0.818944,
+ (GLfloat) 0.351163, (GLfloat) - 0.495655, (GLfloat) 0.794362,
+ (GLfloat) 0.653090, (GLfloat) - 0.688670, (GLfloat) 0.314971,
+ (GLfloat) 0.661058, (GLfloat) - 0.685633, (GLfloat) 0.304812,
+ (GLfloat) 0.403257, (GLfloat) 0.770775, (GLfloat) 0.493244,
+ (GLfloat) 0.393266, (GLfloat) 0.772882, (GLfloat) 0.497991,
+ (GLfloat) 0.471763, (GLfloat) 0.867363, (GLfloat) 0.158497,
+ (GLfloat) 0.475196, (GLfloat) 0.865916, (GLfloat) 0.156134,
+ (GLfloat) 0.590364, (GLfloat) 0.790041, (GLfloat) 0.165246,
+ (GLfloat) 0.597402, (GLfloat) 0.785461, (GLfloat) 0.161746,
+ (GLfloat) 0.528711, (GLfloat) 0.679696, (GLfloat) 0.508407,
+ (GLfloat) 0.514728, (GLfloat) 0.686399, (GLfloat) 0.513723,
+ (GLfloat) 0.403257, (GLfloat) 0.770775, (GLfloat) - 0.493244,
+ (GLfloat) 0.393266, (GLfloat) 0.772882, (GLfloat) - 0.497991,
+ (GLfloat) 0.514728, (GLfloat) 0.686399, (GLfloat) - 0.513723,
+ (GLfloat) 0.528711, (GLfloat) 0.679696, (GLfloat) - 0.508407,
+ (GLfloat) 0.590364, (GLfloat) 0.790041, (GLfloat) - 0.165246,
+ (GLfloat) 0.597402, (GLfloat) 0.785461, (GLfloat) - 0.161746,
+ (GLfloat) 0.475196, (GLfloat) 0.865916, (GLfloat) - 0.156134,
+ (GLfloat) 0.471763, (GLfloat) 0.867363, (GLfloat) - 0.158497,
+ (GLfloat) 0.885792, (GLfloat) - 0.415923, (GLfloat) - 0.205866,
+ (GLfloat) 0.881131, (GLfloat) - 0.438054, (GLfloat) - 0.178091,
+ (GLfloat) 0.914268, (GLfloat) - 0.399196, (GLfloat) - 0.068966,
+ (GLfloat) 0.909310, (GLfloat) - 0.409637, (GLfloat) - 0.073163,
+ (GLfloat) 0.961663, (GLfloat) 0.236259, (GLfloat) - 0.139234,
+ (GLfloat) 0.949193, (GLfloat) 0.273441, (GLfloat) - 0.155762,
+ (GLfloat) 0.901801, (GLfloat) 0.090517, (GLfloat) - 0.422565,
+ (GLfloat) 0.894672, (GLfloat) 0.141897, (GLfloat) - 0.423589,
+ (GLfloat) 0.881131, (GLfloat) - 0.438054, (GLfloat) 0.178091,
+ (GLfloat) 0.885792, (GLfloat) - 0.415923, (GLfloat) 0.205866,
+ (GLfloat) 0.894672, (GLfloat) 0.141897, (GLfloat) 0.423589,
+ (GLfloat) 0.901801, (GLfloat) 0.090518, (GLfloat) 0.422565,
+ (GLfloat) 0.949193, (GLfloat) 0.273441, (GLfloat) 0.155762,
+ (GLfloat) 0.961663, (GLfloat) 0.236259, (GLfloat) 0.139234,
+ (GLfloat) 0.909310, (GLfloat) - 0.409637, (GLfloat) 0.073163,
+ (GLfloat) 0.914268, (GLfloat) - 0.399196, (GLfloat) 0.068966,
+ (GLfloat) 0.191133, (GLfloat) 0.514047, (GLfloat) - 0.836196,
+ (GLfloat) 0.183686, (GLfloat) 0.514678, (GLfloat) - 0.837476,
+ (GLfloat) - 0.045553, (GLfloat) 0.254642, (GLfloat) - 0.965962,
+ (GLfloat) - 0.043552, (GLfloat) 0.248570, (GLfloat) - 0.967634,
+ (GLfloat) 0.070662, (GLfloat) 0.160554, (GLfloat) - 0.984494,
+ (GLfloat) 0.072116, (GLfloat) 0.157712, (GLfloat) - 0.984848,
+ (GLfloat) 0.305019, (GLfloat) 0.420960, (GLfloat) - 0.854258,
+ (GLfloat) 0.309443, (GLfloat) 0.419398, (GLfloat) - 0.853434,
+ (GLfloat) - 0.557133, (GLfloat) - 0.173326, (GLfloat) - 0.812134,
+ (GLfloat) - 0.548436, (GLfloat) - 0.209256, (GLfloat) - 0.809586,
+ (GLfloat) - 0.417652, (GLfloat) - 0.317957, (GLfloat) - 0.851158,
+ (GLfloat) - 0.412553, (GLfloat) - 0.327906, (GLfloat) - 0.849869,
+ (GLfloat) - 0.160469, (GLfloat) - 0.081504, (GLfloat) - 0.983670,
+ (GLfloat) - 0.161493, (GLfloat) - 0.079455, (GLfloat) - 0.983670,
+ (GLfloat) - 0.281454, (GLfloat) 0.011196, (GLfloat) - 0.959509,
+ (GLfloat) - 0.287811, (GLfloat) 0.033884, (GLfloat) - 0.957088,
+ (GLfloat) 0.576854, (GLfloat) - 0.777370, (GLfloat) - 0.250869,
+ (GLfloat) 0.569572, (GLfloat) - 0.770539, (GLfloat) - 0.286108,
+ (GLfloat) 0.653090, (GLfloat) - 0.688670, (GLfloat) - 0.314971,
+ (GLfloat) 0.661058, (GLfloat) - 0.685633, (GLfloat) - 0.304812,
+ (GLfloat) 0.351164, (GLfloat) - 0.495655, (GLfloat) - 0.794362,
+ (GLfloat) 0.308874, (GLfloat) - 0.483661, (GLfloat) - 0.818944,
+ (GLfloat) 0.204308, (GLfloat) - 0.721597, (GLfloat) - 0.661480,
+ (GLfloat) 0.158422, (GLfloat) - 0.717393, (GLfloat) - 0.678418,
+ (GLfloat) 0.823611, (GLfloat) - 0.501936, (GLfloat) - 0.264055,
+ (GLfloat) 0.833765, (GLfloat) - 0.473703, (GLfloat) - 0.283621,
+ (GLfloat) 0.731077, (GLfloat) - 0.100384, (GLfloat) - 0.674869,
+ (GLfloat) 0.725771, (GLfloat) - 0.074392, (GLfloat) - 0.683902,
+ (GLfloat) 0.515479, (GLfloat) - 0.259037, (GLfloat) - 0.816812,
+ (GLfloat) 0.524744, (GLfloat) - 0.282163, (GLfloat) - 0.803136,
+ (GLfloat) 0.753164, (GLfloat) - 0.577527, (GLfloat) - 0.314971,
+ (GLfloat) 0.750976, (GLfloat) - 0.585768, (GLfloat) - 0.304813,
+ (GLfloat) 0.639601, (GLfloat) - 0.758638, (GLfloat) 0.124011,
+ (GLfloat) 0.647491, (GLfloat) - 0.749875, (GLfloat) 0.135802,
+ (GLfloat) 0.708617, (GLfloat) - 0.697026, (GLfloat) 0.109621,
+ (GLfloat) 0.711116, (GLfloat) - 0.693654, (GLfloat) 0.114709,
+ (GLfloat) 0.722217, (GLfloat) - 0.690875, (GLfloat) 0.033080,
+ (GLfloat) 0.720265, (GLfloat) - 0.693043, (GLfloat) 0.030163,
+ (GLfloat) 0.664597, (GLfloat) - 0.745915, (GLfloat) 0.043834,
+ (GLfloat) 0.660896, (GLfloat) - 0.749429, (GLfloat) 0.039656,
+ (GLfloat) 0.813450, (GLfloat) - 0.565559, (GLfloat) 0.135803,
+ (GLfloat) 0.821340, (GLfloat) - 0.556796, (GLfloat) 0.124011,
+ (GLfloat) 0.811298, (GLfloat) - 0.582987, (GLfloat) 0.043835,
+ (GLfloat) 0.814407, (GLfloat) - 0.578938, (GLfloat) 0.039656,
+ (GLfloat) 0.764534, (GLfloat) - 0.643877, (GLfloat) 0.030163,
+ (GLfloat) 0.762583, (GLfloat) - 0.646044, (GLfloat) 0.033079,
+ (GLfloat) 0.767278, (GLfloat) - 0.631876, (GLfloat) 0.109621,
+ (GLfloat) 0.764186, (GLfloat) - 0.634714, (GLfloat) 0.114709,
+ (GLfloat) 0.821340, (GLfloat) - 0.556796, (GLfloat) - 0.124011,
+ (GLfloat) 0.813450, (GLfloat) - 0.565559, (GLfloat) - 0.135803,
+ (GLfloat) 0.767278, (GLfloat) - 0.631876, (GLfloat) - 0.109621,
+ (GLfloat) 0.764186, (GLfloat) - 0.634714, (GLfloat) - 0.114709,
+ (GLfloat) 0.762583, (GLfloat) - 0.646044, (GLfloat) - 0.033079,
+ (GLfloat) 0.764534, (GLfloat) - 0.643877, (GLfloat) - 0.030163,
+ (GLfloat) 0.811298, (GLfloat) - 0.582987, (GLfloat) - 0.043835,
+ (GLfloat) 0.814407, (GLfloat) - 0.578938, (GLfloat) - 0.039656,
+ (GLfloat) 0.647491, (GLfloat) - 0.749875, (GLfloat) - 0.135802,
+ (GLfloat) 0.639601, (GLfloat) - 0.758638, (GLfloat) - 0.124011,
+ (GLfloat) 0.664597, (GLfloat) - 0.745915, (GLfloat) - 0.043834,
+ (GLfloat) 0.660896, (GLfloat) - 0.749429, (GLfloat) - 0.039656,
+ (GLfloat) 0.720265, (GLfloat) - 0.693043, (GLfloat) - 0.030163,
+ (GLfloat) 0.722217, (GLfloat) - 0.690875, (GLfloat) - 0.033080,
+ (GLfloat) 0.708617, (GLfloat) - 0.697026, (GLfloat) - 0.109621,
+ (GLfloat) 0.711116, (GLfloat) - 0.693654, (GLfloat) - 0.114709,
+ (GLfloat) - 0.795834, (GLfloat) - 0.416890, (GLfloat) - 0.439148,
+ (GLfloat) - 0.804928, (GLfloat) - 0.376107, (GLfloat) - 0.458949,
+ (GLfloat) - 0.777496, (GLfloat) - 0.478056, (GLfloat) - 0.408610,
+ (GLfloat) - 0.791178, (GLfloat) - 0.423850, (GLfloat) - 0.440894,
+ (GLfloat) - 0.871703, (GLfloat) - 0.470947, (GLfloat) - 0.135440,
+ (GLfloat) - 0.863971, (GLfloat) - 0.488878, (GLfloat) - 0.120637,
+ (GLfloat) - 0.890766, (GLfloat) - 0.431382, (GLfloat) - 0.142987,
+ (GLfloat) - 0.885536, (GLfloat) - 0.445027, (GLfloat) - 0.133330,
+ (GLfloat) - 0.626883, (GLfloat) - 0.701314, (GLfloat) - 0.339376,
+ (GLfloat) - 0.543140, (GLfloat) - 0.727904, (GLfloat) - 0.418515,
+ (GLfloat) - 0.684101, (GLfloat) - 0.722860, (GLfloat) - 0.097361,
+ (GLfloat) - 0.656897, (GLfloat) - 0.743919, (GLfloat) - 0.122761,
+ (GLfloat) - 0.823965, (GLfloat) - 0.552405, (GLfloat) - 0.126218,
+ (GLfloat) - 0.810821, (GLfloat) - 0.575485, (GLfloat) - 0.106707,
+ (GLfloat) - 0.722436, (GLfloat) - 0.581233, (GLfloat) - 0.374506,
+ (GLfloat) - 0.749781, (GLfloat) - 0.512777, (GLfloat) - 0.418197,
+ (GLfloat) - 0.543140, (GLfloat) - 0.727904, (GLfloat) 0.418515,
+ (GLfloat) - 0.626883, (GLfloat) - 0.701314, (GLfloat) 0.339376,
+ (GLfloat) - 0.749781, (GLfloat) - 0.512777, (GLfloat) 0.418197,
+ (GLfloat) - 0.722436, (GLfloat) - 0.581233, (GLfloat) 0.374506,
+ (GLfloat) - 0.823965, (GLfloat) - 0.552405, (GLfloat) 0.126218,
+ (GLfloat) - 0.810821, (GLfloat) - 0.575485, (GLfloat) 0.106707,
+ (GLfloat) - 0.684101, (GLfloat) - 0.722860, (GLfloat) 0.097361,
+ (GLfloat) - 0.656897, (GLfloat) - 0.743919, (GLfloat) 0.122761,
+ (GLfloat) - 0.804928, (GLfloat) - 0.376106, (GLfloat) 0.458949,
+ (GLfloat) - 0.795834, (GLfloat) - 0.416890, (GLfloat) 0.439148,
+ (GLfloat) - 0.890766, (GLfloat) - 0.431382, (GLfloat) 0.142986,
+ (GLfloat) - 0.885536, (GLfloat) - 0.445027, (GLfloat) 0.133330,
+ (GLfloat) - 0.863971, (GLfloat) - 0.488878, (GLfloat) 0.120637,
+ (GLfloat) - 0.871703, (GLfloat) - 0.470947, (GLfloat) 0.135440,
+ (GLfloat) - 0.777496, (GLfloat) - 0.478056, (GLfloat) 0.408610,
+ (GLfloat) - 0.791178, (GLfloat) - 0.423850, (GLfloat) 0.440894,
+ (GLfloat) 0.229002, (GLfloat) 0.499702, (GLfloat) - 0.835378,
+ (GLfloat) 0.231853, (GLfloat) 0.486589, (GLfloat) - 0.842304,
+ (GLfloat) 0.233876, (GLfloat) 0.516110, (GLfloat) - 0.823973,
+ (GLfloat) 0.237238, (GLfloat) 0.494666, (GLfloat) - 0.836076,
+ (GLfloat) 0.010383, (GLfloat) 0.206054, (GLfloat) - 0.978486,
+ (GLfloat) 0.010515, (GLfloat) 0.204402, (GLfloat) - 0.978831,
+ (GLfloat) - 0.008079, (GLfloat) 0.222043, (GLfloat) - 0.975003,
+ (GLfloat) - 0.007459, (GLfloat) 0.217610, (GLfloat) - 0.976007,
+ (GLfloat) 0.144536, (GLfloat) 0.600180, (GLfloat) - 0.786698,
+ (GLfloat) 0.157013, (GLfloat) 0.570113, (GLfloat) - 0.806423,
+ (GLfloat) 0.037521, (GLfloat) 0.196979, (GLfloat) - 0.979689,
+ (GLfloat) 0.033902, (GLfloat) 0.207800, (GLfloat) - 0.977584,
+ (GLfloat) 0.024105, (GLfloat) 0.197695, (GLfloat) - 0.979967,
+ (GLfloat) 0.023654, (GLfloat) 0.201010, (GLfloat) - 0.979303,
+ (GLfloat) 0.210423, (GLfloat) 0.553707, (GLfloat) - 0.805687,
+ (GLfloat) 0.216765, (GLfloat) 0.524423, (GLfloat) - 0.823404,
+ (GLfloat) - 0.387850, (GLfloat) - 0.484551, (GLfloat) - 0.784081,
+ (GLfloat) - 0.344102, (GLfloat) - 0.564354, (GLfloat) - 0.750399,
+ (GLfloat) - 0.507279, (GLfloat) - 0.348613, (GLfloat) - 0.788123,
+ (GLfloat) - 0.488679, (GLfloat) - 0.433878, (GLfloat) - 0.756930,
+ (GLfloat) - 0.209869, (GLfloat) - 0.143196, (GLfloat) - 0.967187,
+ (GLfloat) - 0.216489, (GLfloat) - 0.097461, (GLfloat) - 0.971408,
+ (GLfloat) - 0.125932, (GLfloat) - 0.202782, (GLfloat) - 0.971092,
+ (GLfloat) - 0.140256, (GLfloat) - 0.165750, (GLfloat) - 0.976143,
+ (GLfloat) - 0.549569, (GLfloat) - 0.208003, (GLfloat) - 0.809141,
+ (GLfloat) - 0.543770, (GLfloat) - 0.257592, (GLfloat) - 0.798724,
+ (GLfloat) - 0.260213, (GLfloat) - 0.033756, (GLfloat) - 0.964961,
+ (GLfloat) - 0.263665, (GLfloat) - 0.004051, (GLfloat) - 0.964606,
+ (GLfloat) - 0.243217, (GLfloat) - 0.082726, (GLfloat) - 0.966438,
+ (GLfloat) - 0.245939, (GLfloat) - 0.044154, (GLfloat) - 0.968279,
+ (GLfloat) - 0.539327, (GLfloat) - 0.261873, (GLfloat) - 0.800343,
+ (GLfloat) - 0.532344, (GLfloat) - 0.329385, (GLfloat) - 0.779818,
+ (GLfloat) 0.231853, (GLfloat) 0.486589, (GLfloat) 0.842304,
+ (GLfloat) 0.229002, (GLfloat) 0.499702, (GLfloat) 0.835378,
+ (GLfloat) - 0.008079, (GLfloat) 0.222044, (GLfloat) 0.975003,
+ (GLfloat) - 0.007460, (GLfloat) 0.217609, (GLfloat) 0.976008,
+ (GLfloat) 0.010515, (GLfloat) 0.204402, (GLfloat) 0.978830,
+ (GLfloat) 0.010383, (GLfloat) 0.206054, (GLfloat) 0.978486,
+ (GLfloat) 0.233876, (GLfloat) 0.516110, (GLfloat) 0.823973,
+ (GLfloat) 0.237238, (GLfloat) 0.494666, (GLfloat) 0.836076,
+ (GLfloat) - 0.549569, (GLfloat) - 0.208003, (GLfloat) 0.809141,
+ (GLfloat) - 0.543770, (GLfloat) - 0.257592, (GLfloat) 0.798724,
+ (GLfloat) - 0.532344, (GLfloat) - 0.329384, (GLfloat) 0.779818,
+ (GLfloat) - 0.539327, (GLfloat) - 0.261873, (GLfloat) 0.800343,
+ (GLfloat) - 0.243217, (GLfloat) - 0.082726, (GLfloat) 0.966438,
+ (GLfloat) - 0.245939, (GLfloat) - 0.044154, (GLfloat) 0.968279,
+ (GLfloat) - 0.263665, (GLfloat) - 0.004051, (GLfloat) 0.964606,
+ (GLfloat) - 0.260214, (GLfloat) - 0.033755, (GLfloat) 0.964961,
+ (GLfloat) - 0.344101, (GLfloat) - 0.564354, (GLfloat) 0.750399,
+ (GLfloat) - 0.387850, (GLfloat) - 0.484551, (GLfloat) 0.784081,
+ (GLfloat) - 0.125932, (GLfloat) - 0.202782, (GLfloat) 0.971093,
+ (GLfloat) - 0.140255, (GLfloat) - 0.165749, (GLfloat) 0.976143,
+ (GLfloat) - 0.216489, (GLfloat) - 0.097462, (GLfloat) 0.971408,
+ (GLfloat) - 0.209869, (GLfloat) - 0.143196, (GLfloat) 0.967187,
+ (GLfloat) - 0.507278, (GLfloat) - 0.348612, (GLfloat) 0.788123,
+ (GLfloat) - 0.488678, (GLfloat) - 0.433878, (GLfloat) 0.756930,
+ (GLfloat) 0.144536, (GLfloat) 0.600181, (GLfloat) 0.786697,
+ (GLfloat) 0.157013, (GLfloat) 0.570113, (GLfloat) 0.806423,
+ (GLfloat) 0.216765, (GLfloat) 0.524422, (GLfloat) 0.823404,
+ (GLfloat) 0.210423, (GLfloat) 0.553707, (GLfloat) 0.805687,
+ (GLfloat) 0.024105, (GLfloat) 0.197695, (GLfloat) 0.979967,
+ (GLfloat) 0.023654, (GLfloat) 0.201010, (GLfloat) 0.979304,
+ (GLfloat) 0.033902, (GLfloat) 0.207800, (GLfloat) 0.977584,
+ (GLfloat) 0.037522, (GLfloat) 0.196978, (GLfloat) 0.979690,
+ (GLfloat) 0.429831, (GLfloat) 0.754772, (GLfloat) - 0.495545,
+ (GLfloat) 0.445178, (GLfloat) 0.753116, (GLfloat) - 0.484389,
+ (GLfloat) 0.504382, (GLfloat) 0.849100, (GLfloat) - 0.156932,
+ (GLfloat) 0.509098, (GLfloat) 0.847167, (GLfloat) - 0.152075,
+ (GLfloat) 0.473721, (GLfloat) 0.868820, (GLfloat) - 0.144012,
+ (GLfloat) 0.467781, (GLfloat) 0.870761, (GLfloat) - 0.151512,
+ (GLfloat) 0.426275, (GLfloat) 0.776501, (GLfloat) - 0.464043,
+ (GLfloat) 0.405841, (GLfloat) 0.776082, (GLfloat) - 0.482690,
+ (GLfloat) 0.445178, (GLfloat) 0.753116, (GLfloat) 0.484389,
+ (GLfloat) 0.429830, (GLfloat) 0.754772, (GLfloat) 0.495545,
+ (GLfloat) 0.426275, (GLfloat) 0.776501, (GLfloat) 0.464043,
+ (GLfloat) 0.405841, (GLfloat) 0.776082, (GLfloat) 0.482690,
+ (GLfloat) 0.467781, (GLfloat) 0.870761, (GLfloat) 0.151512,
+ (GLfloat) 0.473721, (GLfloat) 0.868820, (GLfloat) 0.144012,
+ (GLfloat) 0.504382, (GLfloat) 0.849100, (GLfloat) 0.156932,
+ (GLfloat) 0.509098, (GLfloat) 0.847167, (GLfloat) 0.152075,
+ (GLfloat) 0.229278, (GLfloat) 0.880155, (GLfloat) 0.415643,
+ (GLfloat) 0.209637, (GLfloat) 0.873049, (GLfloat) 0.440270,
+ (GLfloat) 0.229791, (GLfloat) 0.963838, (GLfloat) 0.134951,
+ (GLfloat) 0.235661, (GLfloat) 0.963590, (GLfloat) 0.126323,
+ (GLfloat) 0.380317, (GLfloat) 0.913635, (GLfloat) 0.143628,
+ (GLfloat) 0.386968, (GLfloat) 0.912260, (GLfloat) 0.134303,
+ (GLfloat) 0.360099, (GLfloat) 0.823680, (GLfloat) 0.438041,
+ (GLfloat) 0.336980, (GLfloat) 0.819830, (GLfloat) 0.462950,
+ (GLfloat) 0.229278, (GLfloat) 0.880155, (GLfloat) - 0.415643,
+ (GLfloat) 0.209637, (GLfloat) 0.873049, (GLfloat) - 0.440270,
+ (GLfloat) 0.336980, (GLfloat) 0.819830, (GLfloat) - 0.462951,
+ (GLfloat) 0.360099, (GLfloat) 0.823680, (GLfloat) - 0.438041,
+ (GLfloat) 0.380318, (GLfloat) 0.913635, (GLfloat) - 0.143628,
+ (GLfloat) 0.386968, (GLfloat) 0.912260, (GLfloat) - 0.134303,
+ (GLfloat) 0.235661, (GLfloat) 0.963590, (GLfloat) - 0.126323,
+ (GLfloat) 0.229791, (GLfloat) 0.963838, (GLfloat) - 0.134951,
+ (GLfloat) - 0.140641, (GLfloat) 0.581880, (GLfloat) - 0.801022,
+ (GLfloat) - 0.142183, (GLfloat) 0.582121, (GLfloat) - 0.800574,
+ (GLfloat) 0.051917, (GLfloat) 0.273318, (GLfloat) - 0.960522,
+ (GLfloat) 0.034217, (GLfloat) 0.274901, (GLfloat) - 0.960864,
+ (GLfloat) 0.048940, (GLfloat) 0.249448, (GLfloat) - 0.967151,
+ (GLfloat) 0.029460, (GLfloat) 0.256714, (GLfloat) - 0.966038,
+ (GLfloat) - 0.118911, (GLfloat) 0.595461, (GLfloat) - 0.794536,
+ (GLfloat) - 0.119035, (GLfloat) 0.595511, (GLfloat) - 0.794479,
+ (GLfloat) 0.515773, (GLfloat) - 0.229138, (GLfloat) - 0.825515,
+ (GLfloat) 0.492630, (GLfloat) - 0.312368, (GLfloat) - 0.812245,
+ (GLfloat) 0.432249, (GLfloat) - 0.426645, (GLfloat) - 0.794440,
+ (GLfloat) 0.467347, (GLfloat) - 0.336981, (GLfloat) - 0.817332,
+ (GLfloat) 0.202207, (GLfloat) - 0.074217, (GLfloat) - 0.976526,
+ (GLfloat) 0.254570, (GLfloat) - 0.084963, (GLfloat) - 0.963315,
+ (GLfloat) 0.231800, (GLfloat) - 0.012060, (GLfloat) - 0.972689,
+ (GLfloat) 0.278802, (GLfloat) - 0.009127, (GLfloat) - 0.960305,
+ (GLfloat) 0.001969, (GLfloat) - 0.610219, (GLfloat) - 0.792230,
+ (GLfloat) 0.016464, (GLfloat) - 0.619478, (GLfloat) - 0.784841,
+ (GLfloat) 0.038477, (GLfloat) - 0.206205, (GLfloat) - 0.977752,
+ (GLfloat) 0.042684, (GLfloat) - 0.210618, (GLfloat) - 0.976636,
+ (GLfloat) 0.147830, (GLfloat) - 0.145929, (GLfloat) - 0.978188,
+ (GLfloat) 0.187657, (GLfloat) - 0.166867, (GLfloat) - 0.967957,
+ (GLfloat) 0.332157, (GLfloat) - 0.490109, (GLfloat) - 0.805894,
+ (GLfloat) 0.291047, (GLfloat) - 0.549638, (GLfloat) - 0.783064,
+ (GLfloat) 0.018324, (GLfloat) 0.624772, (GLfloat) - 0.780593,
+ (GLfloat) 0.031411, (GLfloat) 0.609093, (GLfloat) - 0.792477,
+ (GLfloat) - 0.068754, (GLfloat) 0.615108, (GLfloat) - 0.785439,
+ (GLfloat) - 0.063190, (GLfloat) 0.611137, (GLfloat) - 0.788999,
+ (GLfloat) 0.050001, (GLfloat) 0.227113, (GLfloat) - 0.972584,
+ (GLfloat) 0.031314, (GLfloat) 0.240630, (GLfloat) - 0.970112,
+ (GLfloat) 0.046887, (GLfloat) 0.207201, (GLfloat) - 0.977174,
+ (GLfloat) 0.034344, (GLfloat) 0.223544, (GLfloat) - 0.974089,
+ (GLfloat) - 0.289358, (GLfloat) 0.846699, (GLfloat) - 0.446512,
+ (GLfloat) - 0.282981, (GLfloat) 0.846581, (GLfloat) - 0.450803,
+ (GLfloat) - 0.237609, (GLfloat) 0.869708, (GLfloat) - 0.432607,
+ (GLfloat) - 0.232787, (GLfloat) 0.868834, (GLfloat) - 0.436964,
+ (GLfloat) - 0.269102, (GLfloat) 0.953677, (GLfloat) - 0.134480,
+ (GLfloat) - 0.270832, (GLfloat) 0.953476, (GLfloat) - 0.132414,
+ (GLfloat) - 0.330792, (GLfloat) 0.933242, (GLfloat) - 0.140129,
+ (GLfloat) - 0.333075, (GLfloat) 0.932754, (GLfloat) - 0.137953,
+ (GLfloat) 0.010415, (GLfloat) 0.905793, (GLfloat) - 0.423593,
+ (GLfloat) 0.002305, (GLfloat) 0.910958, (GLfloat) - 0.412492,
+ (GLfloat) - 0.003726, (GLfloat) 0.991671, (GLfloat) - 0.128743,
+ (GLfloat) - 0.001231, (GLfloat) 0.992167, (GLfloat) - 0.124913,
+ (GLfloat) - 0.164759, (GLfloat) 0.977931, (GLfloat) - 0.128473,
+ (GLfloat) - 0.164919, (GLfloat) 0.977933, (GLfloat) - 0.128255,
+ (GLfloat) - 0.141914, (GLfloat) 0.895522, (GLfloat) - 0.421783,
+ (GLfloat) - 0.142144, (GLfloat) 0.895607, (GLfloat) - 0.421525,
+ (GLfloat) 0.010415, (GLfloat) 0.905793, (GLfloat) 0.423593,
+ (GLfloat) 0.002305, (GLfloat) 0.910958, (GLfloat) 0.412492,
+ (GLfloat) - 0.142144, (GLfloat) 0.895607, (GLfloat) 0.421525,
+ (GLfloat) - 0.141914, (GLfloat) 0.895522, (GLfloat) 0.421783,
+ (GLfloat) - 0.164759, (GLfloat) 0.977931, (GLfloat) 0.128473,
+ (GLfloat) - 0.164919, (GLfloat) 0.977933, (GLfloat) 0.128255,
+ (GLfloat) - 0.003726, (GLfloat) 0.991671, (GLfloat) 0.128743,
+ (GLfloat) - 0.001231, (GLfloat) 0.992167, (GLfloat) 0.124913,
+ (GLfloat) - 0.282980, (GLfloat) 0.846581, (GLfloat) 0.450803,
+ (GLfloat) - 0.289358, (GLfloat) 0.846699, (GLfloat) 0.446512,
+ (GLfloat) - 0.330792, (GLfloat) 0.933242, (GLfloat) 0.140129,
+ (GLfloat) - 0.333075, (GLfloat) 0.932754, (GLfloat) 0.137953,
+ (GLfloat) - 0.270832, (GLfloat) 0.953476, (GLfloat) 0.132414,
+ (GLfloat) - 0.269102, (GLfloat) 0.953677, (GLfloat) 0.134480,
+ (GLfloat) - 0.237609, (GLfloat) 0.869708, (GLfloat) 0.432607,
+ (GLfloat) - 0.232787, (GLfloat) 0.868834, (GLfloat) 0.436964,
+ (GLfloat) - 0.140641, (GLfloat) 0.581880, (GLfloat) 0.801022,
+ (GLfloat) - 0.142183, (GLfloat) 0.582121, (GLfloat) 0.800574,
+ (GLfloat) - 0.119034, (GLfloat) 0.595511, (GLfloat) 0.794479,
+ (GLfloat) - 0.118911, (GLfloat) 0.595461, (GLfloat) 0.794536,
+ (GLfloat) 0.048939, (GLfloat) 0.249448, (GLfloat) 0.967151,
+ (GLfloat) 0.029461, (GLfloat) 0.256714, (GLfloat) 0.966038,
+ (GLfloat) 0.034217, (GLfloat) 0.274901, (GLfloat) 0.960863,
+ (GLfloat) 0.051918, (GLfloat) 0.273319, (GLfloat) 0.960521,
+ (GLfloat) 0.031411, (GLfloat) 0.609093, (GLfloat) 0.792477,
+ (GLfloat) 0.018324, (GLfloat) 0.624772, (GLfloat) 0.780593,
+ (GLfloat) 0.046887, (GLfloat) 0.207200, (GLfloat) 0.977174,
+ (GLfloat) 0.034344, (GLfloat) 0.223543, (GLfloat) 0.974089,
+ (GLfloat) 0.031314, (GLfloat) 0.240631, (GLfloat) 0.970111,
+ (GLfloat) 0.050002, (GLfloat) 0.227113, (GLfloat) 0.972584,
+ (GLfloat) - 0.068754, (GLfloat) 0.615108, (GLfloat) 0.785440,
+ (GLfloat) - 0.063191, (GLfloat) 0.611137, (GLfloat) 0.788999,
+ (GLfloat) 0.001969, (GLfloat) - 0.610219, (GLfloat) 0.792230,
+ (GLfloat) 0.016464, (GLfloat) - 0.619478, (GLfloat) 0.784841,
+ (GLfloat) 0.332157, (GLfloat) - 0.490109, (GLfloat) 0.805894,
+ (GLfloat) 0.291047, (GLfloat) - 0.549638, (GLfloat) 0.783064,
+ (GLfloat) 0.147831, (GLfloat) - 0.145929, (GLfloat) 0.978188,
+ (GLfloat) 0.187656, (GLfloat) - 0.166866, (GLfloat) 0.967957,
+ (GLfloat) 0.042684, (GLfloat) - 0.210618, (GLfloat) 0.976636,
+ (GLfloat) 0.038477, (GLfloat) - 0.206204, (GLfloat) 0.977752,
+ (GLfloat) 0.515773, (GLfloat) - 0.229138, (GLfloat) 0.825515,
+ (GLfloat) 0.492630, (GLfloat) - 0.312368, (GLfloat) 0.812245,
+ (GLfloat) 0.231801, (GLfloat) - 0.012059, (GLfloat) 0.972689,
+ (GLfloat) 0.278802, (GLfloat) - 0.009127, (GLfloat) 0.960305,
+ (GLfloat) 0.254571, (GLfloat) - 0.084963, (GLfloat) 0.963315,
+ (GLfloat) 0.202207, (GLfloat) - 0.074217, (GLfloat) 0.976527,
+ (GLfloat) 0.467347, (GLfloat) - 0.336981, (GLfloat) 0.817332,
+ (GLfloat) 0.432250, (GLfloat) - 0.426645, (GLfloat) 0.794440,
+ (GLfloat) 0.731946, (GLfloat) - 0.508941, (GLfloat) 0.453029,
+ (GLfloat) 0.760718, (GLfloat) - 0.438585, (GLfloat) 0.478489,
+ (GLfloat) 0.696013, (GLfloat) - 0.585025, (GLfloat) 0.416308,
+ (GLfloat) 0.630794, (GLfloat) - 0.620580, (GLfloat) 0.465810,
+ (GLfloat) 0.757142, (GLfloat) - 0.637420, (GLfloat) 0.142942,
+ (GLfloat) 0.737097, (GLfloat) - 0.663598, (GLfloat) 0.127771,
+ (GLfloat) 0.847507, (GLfloat) - 0.509047, (GLfloat) 0.150342,
+ (GLfloat) 0.834151, (GLfloat) - 0.533962, (GLfloat) 0.138115,
+ (GLfloat) - 0.068175, (GLfloat) - 0.903325, (GLfloat) 0.423504,
+ (GLfloat) - 0.038664, (GLfloat) - 0.911816, (GLfloat) 0.408775,
+ (GLfloat) - 0.102320, (GLfloat) - 0.986404, (GLfloat) 0.128602,
+ (GLfloat) - 0.086898, (GLfloat) - 0.988753, (GLfloat) 0.121719,
+ (GLfloat) 0.488656, (GLfloat) - 0.861887, (GLfloat) 0.135524,
+ (GLfloat) 0.510932, (GLfloat) - 0.850761, (GLfloat) 0.123102,
+ (GLfloat) 0.415769, (GLfloat) - 0.794938, (GLfloat) 0.441826,
+ (GLfloat) 0.471036, (GLfloat) - 0.782278, (GLfloat) 0.407634,
+ (GLfloat) - 0.038664, (GLfloat) - 0.911816, (GLfloat) - 0.408775,
+ (GLfloat) - 0.068174, (GLfloat) - 0.903325, (GLfloat) - 0.423504,
+ (GLfloat) 0.415769, (GLfloat) - 0.794938, (GLfloat) - 0.441826,
+ (GLfloat) 0.471037, (GLfloat) - 0.782278, (GLfloat) - 0.407634,
+ (GLfloat) 0.510932, (GLfloat) - 0.850761, (GLfloat) - 0.123102,
+ (GLfloat) 0.488656, (GLfloat) - 0.861887, (GLfloat) - 0.135524,
+ (GLfloat) - 0.102320, (GLfloat) - 0.986404, (GLfloat) - 0.128602,
+ (GLfloat) - 0.086898, (GLfloat) - 0.988753, (GLfloat) - 0.121719,
+ (GLfloat) 0.760718, (GLfloat) - 0.438585, (GLfloat) - 0.478489,
+ (GLfloat) 0.731946, (GLfloat) - 0.508941, (GLfloat) - 0.453029,
+ (GLfloat) 0.847507, (GLfloat) - 0.509047, (GLfloat) - 0.150343,
+ (GLfloat) 0.834151, (GLfloat) - 0.533962, (GLfloat) - 0.138115,
+ (GLfloat) 0.737097, (GLfloat) - 0.663599, (GLfloat) - 0.127771,
+ (GLfloat) 0.757142, (GLfloat) - 0.637420, (GLfloat) - 0.142942,
+ (GLfloat) 0.630794, (GLfloat) - 0.620580, (GLfloat) - 0.465810,
+ (GLfloat) 0.696012, (GLfloat) - 0.585025, (GLfloat) - 0.416309,
+ (GLfloat) 0.774435, (GLfloat) - 0.417338, (GLfloat) 0.475479,
+ (GLfloat) 0.793442, (GLfloat) - 0.363272, (GLfloat) 0.488348,
+ (GLfloat) 0.884471, (GLfloat) - 0.440088, (GLfloat) 0.155030,
+ (GLfloat) 0.875885, (GLfloat) - 0.459272, (GLfloat) 0.147967,
+ (GLfloat) 0.768156, (GLfloat) - 0.618465, (GLfloat) 0.165642,
+ (GLfloat) 0.757446, (GLfloat) - 0.632850, (GLfloat) 0.160551,
+ (GLfloat) 0.645602, (GLfloat) - 0.572394, (GLfloat) 0.505533,
+ (GLfloat) 0.663605, (GLfloat) - 0.543212, (GLfloat) 0.514343,
+ (GLfloat) 0.774435, (GLfloat) - 0.417338, (GLfloat) - 0.475479,
+ (GLfloat) 0.793442, (GLfloat) - 0.363271, (GLfloat) - 0.488348,
+ (GLfloat) 0.663604, (GLfloat) - 0.543213, (GLfloat) - 0.514343,
+ (GLfloat) 0.645602, (GLfloat) - 0.572394, (GLfloat) - 0.505533,
+ (GLfloat) 0.768156, (GLfloat) - 0.618465, (GLfloat) - 0.165643,
+ (GLfloat) 0.757446, (GLfloat) - 0.632850, (GLfloat) - 0.160551,
+ (GLfloat) 0.875885, (GLfloat) - 0.459272, (GLfloat) - 0.147967,
+ (GLfloat) 0.884471, (GLfloat) - 0.440088, (GLfloat) - 0.155030,
+ (GLfloat) - 0.384755, (GLfloat) - 0.899768, (GLfloat) - 0.205866,
+ (GLfloat) - 0.407035, (GLfloat) - 0.895883, (GLfloat) - 0.178092,
+ (GLfloat) - 0.367045, (GLfloat) - 0.927643, (GLfloat) - 0.068965,
+ (GLfloat) - 0.377652, (GLfloat) - 0.923053, (GLfloat) - 0.073163,
+ (GLfloat) 0.147492, (GLfloat) - 0.980758, (GLfloat) - 0.127908,
+ (GLfloat) 0.187942, (GLfloat) - 0.971451, (GLfloat) - 0.144776,
+ (GLfloat) 0.017404, (GLfloat) - 0.922933, (GLfloat) - 0.384567,
+ (GLfloat) 0.060977, (GLfloat) - 0.919535, (GLfloat) - 0.388250,
+ (GLfloat) - 0.407035, (GLfloat) - 0.895883, (GLfloat) 0.178092,
+ (GLfloat) - 0.384755, (GLfloat) - 0.899768, (GLfloat) 0.205866,
+ (GLfloat) 0.060977, (GLfloat) - 0.919535, (GLfloat) 0.388250,
+ (GLfloat) 0.017405, (GLfloat) - 0.922933, (GLfloat) 0.384568,
+ (GLfloat) 0.187942, (GLfloat) - 0.971451, (GLfloat) 0.144776,
+ (GLfloat) 0.147492, (GLfloat) - 0.980758, (GLfloat) 0.127908,
+ (GLfloat) - 0.377652, (GLfloat) - 0.923053, (GLfloat) 0.073163,
+ (GLfloat) - 0.367045, (GLfloat) - 0.927643, (GLfloat) 0.068965,
+ (GLfloat) 0.525096, (GLfloat) - 0.217383, (GLfloat) - 0.822811,
+ (GLfloat) 0.542855, (GLfloat) - 0.154089, (GLfloat) - 0.825569,
+ (GLfloat) 0.263018, (GLfloat) 0.047234, (GLfloat) - 0.963634,
+ (GLfloat) 0.298263, (GLfloat) 0.059374, (GLfloat) - 0.952635,
+ (GLfloat) 0.152826, (GLfloat) - 0.078814, (GLfloat) - 0.985105,
+ (GLfloat) 0.157225, (GLfloat) - 0.076313, (GLfloat) - 0.984610,
+ (GLfloat) 0.407888, (GLfloat) - 0.328946, (GLfloat) - 0.851717,
+ (GLfloat) 0.393565, (GLfloat) - 0.338248, (GLfloat) - 0.854807,
+ (GLfloat) - 0.131636, (GLfloat) 0.588079, (GLfloat) - 0.798019,
+ (GLfloat) - 0.131727, (GLfloat) 0.588071, (GLfloat) - 0.798011,
+ (GLfloat) - 0.280070, (GLfloat) 0.459269, (GLfloat) - 0.842990,
+ (GLfloat) - 0.285882, (GLfloat) 0.456692, (GLfloat) - 0.842439,
+ (GLfloat) - 0.064116, (GLfloat) 0.179568, (GLfloat) - 0.981654,
+ (GLfloat) - 0.067311, (GLfloat) 0.177967, (GLfloat) - 0.981732,
+ (GLfloat) 0.071348, (GLfloat) 0.308885, (GLfloat) - 0.948419,
+ (GLfloat) 0.056168, (GLfloat) 0.305937, (GLfloat) - 0.950393,
+ (GLfloat) - 0.756765, (GLfloat) - 0.603631, (GLfloat) - 0.250870,
+ (GLfloat) - 0.750192, (GLfloat) - 0.596115, (GLfloat) - 0.286110,
+ (GLfloat) - 0.661260, (GLfloat) - 0.680768, (GLfloat) - 0.315104,
+ (GLfloat) - 0.666597, (GLfloat) - 0.680599, (GLfloat) - 0.304029,
+ (GLfloat) - 0.487239, (GLfloat) - 0.360038, (GLfloat) - 0.795595,
+ (GLfloat) - 0.481713, (GLfloat) - 0.339088, (GLfloat) - 0.808067,
+ (GLfloat) - 0.706427, (GLfloat) - 0.186136, (GLfloat) - 0.682872,
+ (GLfloat) - 0.704353, (GLfloat) - 0.163662, (GLfloat) - 0.690726,
+ (GLfloat) - 0.472887, (GLfloat) - 0.840626, (GLfloat) - 0.264056,
+ (GLfloat) - 0.444319, (GLfloat) - 0.849789, (GLfloat) - 0.283620,
+ (GLfloat) - 0.155246, (GLfloat) - 0.767829, (GLfloat) - 0.621561,
+ (GLfloat) - 0.107581, (GLfloat) - 0.759164, (GLfloat) - 0.641947,
+ (GLfloat) - 0.262880, (GLfloat) - 0.545316, (GLfloat) - 0.795943,
+ (GLfloat) - 0.306478, (GLfloat) - 0.563718, (GLfloat) - 0.767002,
+ (GLfloat) - 0.550890, (GLfloat) - 0.772860, (GLfloat) - 0.314972,
+ (GLfloat) - 0.559203, (GLfloat) - 0.770962, (GLfloat) - 0.304813,
+ (GLfloat) - 0.296632, (GLfloat) 0.840312, (GLfloat) - 0.453745,
+ (GLfloat) - 0.291339, (GLfloat) 0.841021, (GLfloat) - 0.455856,
+ (GLfloat) - 0.347498, (GLfloat) 0.926752, (GLfloat) - 0.142743,
+ (GLfloat) - 0.349577, (GLfloat) 0.926172, (GLfloat) - 0.141427,
+ (GLfloat) - 0.528222, (GLfloat) 0.834354, (GLfloat) - 0.157592,
+ (GLfloat) - 0.534297, (GLfloat) 0.830965, (GLfloat) - 0.154997,
+ (GLfloat) - 0.477964, (GLfloat) 0.727109, (GLfloat) - 0.492812,
+ (GLfloat) - 0.464577, (GLfloat) 0.733270, (GLfloat) - 0.496471,
+ (GLfloat) - 0.296632, (GLfloat) 0.840312, (GLfloat) 0.453745,
+ (GLfloat) - 0.291339, (GLfloat) 0.841021, (GLfloat) 0.455856,
+ (GLfloat) - 0.464577, (GLfloat) 0.733270, (GLfloat) 0.496471,
+ (GLfloat) - 0.477964, (GLfloat) 0.727109, (GLfloat) 0.492812,
+ (GLfloat) - 0.528222, (GLfloat) 0.834354, (GLfloat) 0.157592,
+ (GLfloat) - 0.534297, (GLfloat) 0.830965, (GLfloat) 0.154997,
+ (GLfloat) - 0.349577, (GLfloat) 0.926172, (GLfloat) 0.141427,
+ (GLfloat) - 0.347498, (GLfloat) 0.926752, (GLfloat) 0.142743,
+ (GLfloat) - 0.819286, (GLfloat) - 0.535153, (GLfloat) 0.205866,
+ (GLfloat) - 0.811591, (GLfloat) - 0.556420, (GLfloat) 0.178092,
+ (GLfloat) - 0.849813, (GLfloat) - 0.522553, (GLfloat) 0.068965,
+ (GLfloat) - 0.843450, (GLfloat) - 0.532202, (GLfloat) 0.073162,
+ (GLfloat) - 0.975674, (GLfloat) 0.164943, (GLfloat) 0.144407,
+ (GLfloat) - 0.965143, (GLfloat) 0.206428, (GLfloat) 0.160894,
+ (GLfloat) - 0.906538, (GLfloat) 0.014845, (GLfloat) 0.421862,
+ (GLfloat) - 0.890094, (GLfloat) 0.060087, (GLfloat) 0.451800,
+ (GLfloat) - 0.811591, (GLfloat) - 0.556419, (GLfloat) - 0.178092,
+ (GLfloat) - 0.819286, (GLfloat) - 0.535153, (GLfloat) - 0.205865,
+ (GLfloat) - 0.906538, (GLfloat) 0.014844, (GLfloat) - 0.421862,
+ (GLfloat) - 0.890094, (GLfloat) 0.060087, (GLfloat) - 0.451800,
+ (GLfloat) - 0.965143, (GLfloat) 0.206428, (GLfloat) - 0.160894,
+ (GLfloat) - 0.975674, (GLfloat) 0.164943, (GLfloat) - 0.144407,
+ (GLfloat) - 0.843450, (GLfloat) - 0.532202, (GLfloat) - 0.073162,
+ (GLfloat) - 0.849813, (GLfloat) - 0.522553, (GLfloat) - 0.068965,
+ (GLfloat) - 0.131727, (GLfloat) 0.588071, (GLfloat) 0.798011,
+ (GLfloat) - 0.131636, (GLfloat) 0.588079, (GLfloat) 0.798019,
+ (GLfloat) 0.071348, (GLfloat) 0.308886, (GLfloat) 0.948419,
+ (GLfloat) 0.056168, (GLfloat) 0.305937, (GLfloat) 0.950393,
+ (GLfloat) - 0.067311, (GLfloat) 0.177967, (GLfloat) 0.981732,
+ (GLfloat) - 0.064116, (GLfloat) 0.179568, (GLfloat) 0.981654,
+ (GLfloat) - 0.280070, (GLfloat) 0.459269, (GLfloat) 0.842990,
+ (GLfloat) - 0.285882, (GLfloat) 0.456692, (GLfloat) 0.842439,
+ (GLfloat) 0.542855, (GLfloat) - 0.154089, (GLfloat) 0.825569,
+ (GLfloat) 0.525096, (GLfloat) - 0.217383, (GLfloat) 0.822811,
+ (GLfloat) 0.393565, (GLfloat) - 0.338248, (GLfloat) 0.854807,
+ (GLfloat) 0.407888, (GLfloat) - 0.328946, (GLfloat) 0.851717,
+ (GLfloat) 0.152826, (GLfloat) - 0.078814, (GLfloat) 0.985105,
+ (GLfloat) 0.157225, (GLfloat) - 0.076313, (GLfloat) 0.984610,
+ (GLfloat) 0.298263, (GLfloat) 0.059374, (GLfloat) 0.952635,
+ (GLfloat) 0.263018, (GLfloat) 0.047234, (GLfloat) 0.963634,
+ (GLfloat) - 0.444319, (GLfloat) - 0.849789, (GLfloat) 0.283620,
+ (GLfloat) - 0.472887, (GLfloat) - 0.840626, (GLfloat) 0.264055,
+ (GLfloat) - 0.550890, (GLfloat) - 0.772861, (GLfloat) 0.314972,
+ (GLfloat) - 0.559203, (GLfloat) - 0.770962, (GLfloat) 0.304813,
+ (GLfloat) - 0.306478, (GLfloat) - 0.563718, (GLfloat) 0.767003,
+ (GLfloat) - 0.262880, (GLfloat) - 0.545316, (GLfloat) 0.795943,
+ (GLfloat) - 0.155245, (GLfloat) - 0.767828, (GLfloat) 0.621562,
+ (GLfloat) - 0.107581, (GLfloat) - 0.759164, (GLfloat) 0.641947,
+ (GLfloat) - 0.756765, (GLfloat) - 0.603631, (GLfloat) 0.250869,
+ (GLfloat) - 0.750192, (GLfloat) - 0.596115, (GLfloat) 0.286110,
+ (GLfloat) - 0.706427, (GLfloat) - 0.186135, (GLfloat) 0.682873,
+ (GLfloat) - 0.704352, (GLfloat) - 0.163662, (GLfloat) 0.690726,
+ (GLfloat) - 0.481713, (GLfloat) - 0.339088, (GLfloat) 0.808067,
+ (GLfloat) - 0.487239, (GLfloat) - 0.360037, (GLfloat) 0.795595,
+ (GLfloat) - 0.666597, (GLfloat) - 0.680599, (GLfloat) 0.304029,
+ (GLfloat) - 0.661260, (GLfloat) - 0.680768, (GLfloat) 0.315104,
+ (GLfloat) - 0.527794, (GLfloat) - 0.840271, (GLfloat) - 0.124011,
+ (GLfloat) - 0.536826, (GLfloat) - 0.832691, (GLfloat) - 0.135802,
+ (GLfloat) - 0.604714, (GLfloat) - 0.788863, (GLfloat) - 0.109621,
+ (GLfloat) - 0.607657, (GLfloat) - 0.785872, (GLfloat) - 0.114709,
+ (GLfloat) - 0.619037, (GLfloat) - 0.784665, (GLfloat) - 0.033079,
+ (GLfloat) - 0.616803, (GLfloat) - 0.786539, (GLfloat) - 0.030163,
+ (GLfloat) - 0.554318, (GLfloat) - 0.831150, (GLfloat) - 0.043834,
+ (GLfloat) - 0.550163, (GLfloat) - 0.834115, (GLfloat) - 0.039656,
+ (GLfloat) - 0.726822, (GLfloat) - 0.673266, (GLfloat) - 0.135802,
+ (GLfloat) - 0.735855, (GLfloat) - 0.665687, (GLfloat) - 0.124011,
+ (GLfloat) - 0.722267, (GLfloat) - 0.690224, (GLfloat) - 0.043834,
+ (GLfloat) - 0.725908, (GLfloat) - 0.686648, (GLfloat) - 0.039656,
+ (GLfloat) - 0.667483, (GLfloat) - 0.744014, (GLfloat) - 0.030163,
+ (GLfloat) - 0.665249, (GLfloat) - 0.745888, (GLfloat) - 0.033079,
+ (GLfloat) - 0.671871, (GLfloat) - 0.732511, (GLfloat) - 0.109621,
+ (GLfloat) - 0.668414, (GLfloat) - 0.734891, (GLfloat) - 0.114709,
+ (GLfloat) - 0.735855, (GLfloat) - 0.665687, (GLfloat) 0.124011,
+ (GLfloat) - 0.726822, (GLfloat) - 0.673266, (GLfloat) 0.135802,
+ (GLfloat) - 0.671871, (GLfloat) - 0.732511, (GLfloat) 0.109621,
+ (GLfloat) - 0.668414, (GLfloat) - 0.734891, (GLfloat) 0.114709,
+ (GLfloat) - 0.665249, (GLfloat) - 0.745888, (GLfloat) 0.033079,
+ (GLfloat) - 0.667483, (GLfloat) - 0.744014, (GLfloat) 0.030163,
+ (GLfloat) - 0.722267, (GLfloat) - 0.690224, (GLfloat) 0.043834,
+ (GLfloat) - 0.725908, (GLfloat) - 0.686648, (GLfloat) 0.039656,
+ (GLfloat) - 0.536826, (GLfloat) - 0.832691, (GLfloat) 0.135802,
+ (GLfloat) - 0.527794, (GLfloat) - 0.840271, (GLfloat) 0.124011,
+ (GLfloat) - 0.554318, (GLfloat) - 0.831150, (GLfloat) 0.043834,
+ (GLfloat) - 0.550163, (GLfloat) - 0.834115, (GLfloat) 0.039656,
+ (GLfloat) - 0.616803, (GLfloat) - 0.786539, (GLfloat) 0.030163,
+ (GLfloat) - 0.619037, (GLfloat) - 0.784665, (GLfloat) 0.033079,
+ (GLfloat) - 0.604714, (GLfloat) - 0.788863, (GLfloat) 0.109621,
+ (GLfloat) - 0.607657, (GLfloat) - 0.785872, (GLfloat) 0.114709,
+};
+
+unsigned short int s1_4_POLS[] =
+{
+ 3, 82, 12, 76, 1, 3, 76, 74, 82, 1, 3, 22, 78, 74, 1, 3, 22, 74, 76, 1,
+ 3, 78, 20, 80, 1, 3, 80, 74, 78, 1, 3, 28, 82, 74, 1, 3, 28, 74, 80, 1,
+ 3, 88, 13, 84, 1, 3, 84, 77, 88, 1, 3, 24, 86, 77, 1, 3, 24, 77, 84, 1,
+ 3, 86, 20, 78, 1, 3, 78, 77, 86, 1, 3, 22, 88, 77, 1, 3, 22, 77, 78, 1,
+ 3, 14, 90, 85, 1, 3, 14, 85, 93, 1, 3, 26, 91, 85, 1, 3, 26, 85, 90, 1,
+ 3, 20, 86, 85, 1, 3, 20, 85, 91, 1, 3, 86, 24, 93, 1, 3, 93, 85, 86, 1,
+ 3, 15, 95, 79, 1, 3, 15, 79, 97, 1, 3, 95, 28, 80, 1, 3, 80, 79, 95, 1,
+ 3, 20, 91, 79, 1, 3, 20, 79, 80, 1, 3, 26, 97, 79, 1, 3, 26, 79, 91, 1,
+ 3, 13, 99, 83, 1, 3, 13, 83, 84, 1, 3, 99, 30, 101, 1, 3, 101, 83, 99, 1,
+ 3, 23, 102, 83, 1, 3, 23, 83, 101, 1, 3, 102, 24, 84, 1, 3, 84, 83, 102, 1,
+ 3, 16, 104, 100, 1, 3, 16, 100, 108, 1, 3, 104, 32, 106, 1, 3, 106, 100, 104, 1,
+ 3, 106, 23, 101, 1, 3, 101, 100, 106, 1, 3, 30, 108, 100, 1, 3, 30, 100, 101, 1,
+ 3, 17, 110, 105, 1, 3, 17, 105, 113, 1, 3, 110, 33, 111, 1, 3, 111, 105, 110, 1,
+ 3, 23, 106, 105, 1, 3, 23, 105, 111, 1, 3, 106, 32, 113, 1, 3, 113, 105, 106, 1,
+ 3, 114, 14, 93, 1, 3, 93, 92, 114, 1, 3, 93, 24, 102, 1, 3, 102, 92, 93, 1,
+3, 23, 111, 92, 1, 3, 23, 92, 102, 1, 3, 111, 33, 114, 1, 3, 114, 92, 111, 1,
+ 3, 104, 16, 116, 1, 3, 116, 103, 104, 1, 3, 35, 118, 103, 1, 3, 35, 103, 116, 1,
+ 3, 118, 31, 119, 1, 3, 119, 103, 118, 1, 3, 32, 104, 103, 1, 3, 32, 103, 119, 1,
+ 3, 125, 18, 121, 1, 3, 121, 117, 125, 1, 3, 36, 123, 117, 1, 3, 36, 117, 121, 1,
+ 3, 123, 31, 118, 1, 3, 118, 117, 123, 1, 3, 35, 125, 117, 1, 3, 35, 117, 118, 1,
+ 3, 19, 127, 122, 1, 3, 19, 122, 130, 1, 3, 37, 128, 122, 1, 3, 37, 122, 127, 1,
+ 3, 31, 123, 122, 1, 3, 31, 122, 128, 1, 3, 36, 130, 122, 1, 3, 36, 122, 123, 1,
+ 3, 17, 113, 112, 1, 3, 17, 112, 131, 1, 3, 32, 119, 112, 1, 3, 32, 112, 113, 1,
+ 3, 31, 128, 112, 1, 3, 31, 112, 119, 1, 3, 37, 131, 112, 1, 3, 37, 112, 128, 1,
+ 3, 18, 133, 120, 1, 3, 18, 120, 121, 1, 3, 39, 134, 120, 1, 3, 39, 120, 133, 1,
+ 3, 134, 27, 135, 1, 3, 135, 120, 134, 1, 3, 135, 36, 121, 1, 3, 121, 120, 135, 1,
+ 3, 12, 82, 81, 1, 3, 12, 81, 138, 1, 3, 82, 28, 136, 1, 3, 136, 81, 82, 1,
+3, 27, 134, 81, 1, 3, 27, 81, 136, 1, 3, 134, 39, 138, 1, 3, 138, 81, 134, 1,
+3, 95, 15, 139, 1, 3, 139, 94, 95, 1, 3, 139, 40, 140, 1, 3, 140, 94, 139, 1,
+ 3, 27, 136, 94, 1, 3, 27, 94, 140, 1, 3, 136, 28, 95, 1, 3, 95, 94, 136, 1,
+ 3, 19, 130, 129, 1, 3, 19, 129, 141, 1, 3, 130, 36, 135, 1, 3, 135, 129, 130, 1,
+ 3, 27, 140, 129, 1, 3, 27, 129, 135, 1, 3, 140, 40, 141, 1, 3, 141, 129, 140, 1,
+ 3, 14, 114, 89, 1, 3, 14, 89, 90, 1, 3, 114, 33, 142, 1, 3, 142, 89, 114, 1,
+ 3, 25, 143, 89, 1, 3, 25, 89, 142, 1, 3, 143, 26, 90, 1, 3, 90, 89, 143, 1,
+ 3, 17, 131, 109, 1, 3, 17, 109, 110, 1, 3, 131, 37, 144, 1, 3, 144, 109, 131, 1,
+ 3, 25, 142, 109, 1, 3, 25, 109, 144, 1, 3, 142, 33, 110, 1, 3, 110, 109, 142, 1,
+ 3, 19, 141, 126, 1, 3, 19, 126, 127, 1, 3, 141, 40, 145, 1, 3, 145, 126, 141, 1,
+ 3, 25, 144, 126, 1, 3, 25, 126, 145, 1, 3, 144, 37, 127, 1, 3, 127, 126, 144, 1,
+ 3, 15, 97, 96, 1, 3, 15, 96, 139, 1, 3, 97, 26, 143, 1, 3, 143, 96, 97, 1,
+3, 25, 145, 96, 1, 3, 25, 96, 143, 1, 3, 145, 40, 139, 1, 3, 139, 96, 145, 1,
+ 3, 12, 146, 75, 1, 3, 12, 75, 76, 1, 3, 146, 41, 148, 1, 3, 148, 75, 146, 1,
+ 3, 21, 149, 75, 1, 3, 21, 75, 148, 1, 3, 149, 22, 76, 1, 3, 76, 75, 149, 1,
+3, 8, 151, 147, 1, 3, 8, 147, 155, 1, 3, 151, 43, 153, 1, 3, 153, 147, 151, 1,
+ 3, 153, 21, 148, 1, 3, 148, 147, 153, 1, 3, 41, 155, 147, 1, 3, 41, 147, 148, 1,
+ 3, 11, 157, 152, 1, 3, 11, 152, 160, 1, 3, 44, 158, 152, 1, 3, 44, 152, 157, 1,
+ 3, 158, 21, 153, 1, 3, 153, 152, 158, 1, 3, 153, 43, 160, 1, 3, 160, 152, 153, 1,
+ 3, 13, 88, 87, 1, 3, 13, 87, 161, 1, 3, 88, 22, 149, 1, 3, 149, 87, 88, 1,
+3, 21, 158, 87, 1, 3, 21, 87, 149, 1, 3, 158, 44, 161, 1, 3, 161, 87, 158, 1,
+ 3, 18, 162, 132, 1, 3, 18, 132, 133, 1, 3, 162, 45, 164, 1, 3, 164, 132, 162, 1,
+ 3, 38, 165, 132, 1, 3, 38, 132, 164, 1, 3, 165, 39, 133, 1, 3, 133, 132, 165, 1,
+ 3, 170, 9, 167, 1, 3, 167, 163, 170, 1, 3, 47, 168, 163, 1, 3, 47, 163, 167, 1,
+ 3, 168, 38, 164, 1, 3, 164, 163, 168, 1, 3, 45, 170, 163, 1, 3, 45, 163, 164, 1,
+3, 8, 155, 154, 1, 3, 8, 154, 173, 1, 3, 155, 41, 171, 1, 3, 171, 154, 155, 1,
+ 3, 38, 168, 154, 1, 3, 38, 154, 171, 1, 3, 168, 47, 173, 1, 3, 173, 154, 168, 1,
+ 3, 146, 12, 138, 1, 3, 138, 137, 146, 1, 3, 39, 165, 137, 1, 3, 39, 137, 138, 1,
+ 3, 165, 38, 171, 1, 3, 171, 137, 165, 1, 3, 41, 146, 137, 1, 3, 41, 137, 171, 1,
+ 3, 16, 108, 107, 1, 3, 16, 107, 177, 1, 3, 108, 30, 174, 1, 3, 174, 107, 108, 1,
+ 3, 29, 176, 107, 1, 3, 29, 107, 174, 1, 3, 176, 50, 177, 1, 3, 177, 107, 176, 1,
+ 3, 99, 13, 161, 1, 3, 161, 98, 99, 1, 3, 44, 178, 98, 1, 3, 44, 98, 161, 1,
+ 3, 178, 29, 174, 1, 3, 174, 98, 178, 1, 3, 30, 99, 98, 1, 3, 30, 98, 174, 1,
+ 3, 11, 180, 156, 1, 3, 11, 156, 157, 1, 3, 180, 49, 181, 1, 3, 181, 156, 180, 1,
+ 3, 29, 178, 156, 1, 3, 29, 156, 181, 1, 3, 178, 44, 157, 1, 3, 157, 156, 178, 1,
+ 3, 185, 10, 183, 1, 3, 183, 175, 185, 1, 3, 50, 176, 175, 1, 3, 50, 175, 183, 1,
+ 3, 176, 29, 181, 1, 3, 181, 175, 176, 1, 3, 49, 185, 175, 1, 3, 49, 175, 181, 1,
+ 3, 18, 125, 124, 1, 3, 18, 124, 162, 1, 3, 125, 35, 186, 1, 3, 186, 124, 125, 1,
+ 3, 34, 187, 124, 1, 3, 34, 124, 186, 1, 3, 187, 45, 162, 1, 3, 162, 124, 187, 1,
+ 3, 16, 177, 115, 1, 3, 16, 115, 116, 1, 3, 177, 50, 188, 1, 3, 188, 115, 177, 1,
+ 3, 34, 186, 115, 1, 3, 34, 115, 188, 1, 3, 186, 35, 116, 1, 3, 116, 115, 186, 1,
+ 3, 183, 10, 190, 1, 3, 190, 182, 183, 1, 3, 52, 191, 182, 1, 3, 52, 182, 190, 1,
+ 3, 191, 34, 188, 1, 3, 188, 182, 191, 1, 3, 50, 183, 182, 1, 3, 50, 182, 188, 1,
+ 3, 193, 9, 170, 1, 3, 170, 169, 193, 1, 3, 45, 187, 169, 1, 3, 45, 169, 170, 1,
+ 3, 187, 34, 191, 1, 3, 191, 169, 187, 1, 3, 52, 193, 169, 1, 3, 52, 169, 191, 1,
+ 3, 201, 1, 196, 1, 3, 196, 194, 201, 1, 3, 54, 198, 194, 1, 3, 54, 194, 196, 1,
+ 3, 198, 46, 199, 1, 3, 199, 194, 198, 1, 3, 56, 201, 194, 1, 3, 56, 194, 199, 1,
+ 3, 206, 3, 203, 1, 3, 203, 197, 206, 1, 3, 55, 204, 197, 1, 3, 55, 197, 203, 1,
+ 3, 46, 198, 197, 1, 3, 46, 197, 204, 1, 3, 198, 54, 206, 1, 3, 206, 197, 198, 1,
+ 3, 208, 8, 173, 1, 3, 173, 172, 208, 1, 3, 47, 207, 172, 1, 3, 47, 172, 173, 1,
+ 3, 207, 46, 204, 1, 3, 204, 172, 207, 1, 3, 204, 55, 208, 1, 3, 208, 172, 204, 1,
+3, 9, 209, 166, 1, 3, 9, 166, 167, 1, 3, 209, 56, 199, 1, 3, 199, 166, 209, 1,
+ 3, 46, 207, 166, 1, 3, 46, 166, 199, 1, 3, 207, 47, 167, 1, 3, 167, 166, 207, 1,
+3, 1, 201, 200, 1, 3, 1, 200, 214, 1, 3, 201, 56, 210, 1, 3, 210, 200, 201, 1,
+ 3, 51, 212, 200, 1, 3, 51, 200, 210, 1, 3, 212, 59, 214, 1, 3, 214, 200, 212, 1,
+ 3, 209, 9, 193, 1, 3, 193, 192, 209, 1, 3, 193, 52, 215, 1, 3, 215, 192, 193, 1,
+ 3, 215, 51, 210, 1, 3, 210, 192, 215, 1, 3, 56, 209, 192, 1, 3, 56, 192, 210, 1,
+ 3, 190, 10, 216, 1, 3, 216, 189, 190, 1, 3, 57, 217, 189, 1, 3, 57, 189, 216, 1,
+ 3, 217, 51, 215, 1, 3, 215, 189, 217, 1, 3, 215, 52, 190, 1, 3, 190, 189, 215, 1,
+3, 0, 219, 211, 1, 3, 0, 211, 221, 1, 3, 219, 59, 212, 1, 3, 212, 211, 219, 1,
+ 3, 51, 217, 211, 1, 3, 51, 211, 212, 1, 3, 217, 57, 221, 1, 3, 221, 211, 217, 1,
+ 3, 226, 0, 221, 1, 3, 221, 220, 226, 1, 3, 57, 222, 220, 1, 3, 57, 220, 221, 1,
+ 3, 222, 48, 224, 1, 3, 224, 220, 222, 1, 3, 62, 226, 220, 1, 3, 62, 220, 224, 1,
+ 3, 10, 185, 184, 1, 3, 10, 184, 216, 1, 3, 185, 49, 227, 1, 3, 227, 184, 185, 1,
+ 3, 48, 222, 184, 1, 3, 48, 184, 227, 1, 3, 222, 57, 216, 1, 3, 216, 184, 222, 1,
+ 3, 180, 11, 228, 1, 3, 228, 179, 180, 1, 3, 228, 60, 229, 1, 3, 229, 179, 228, 1,
+ 3, 229, 48, 227, 1, 3, 227, 179, 229, 1, 3, 49, 180, 179, 1, 3, 49, 179, 227, 1,
+ 3, 233, 2, 231, 1, 3, 231, 223, 233, 1, 3, 231, 62, 224, 1, 3, 224, 223, 231, 1,
+ 3, 48, 229, 223, 1, 3, 48, 223, 224, 1, 3, 60, 233, 223, 1, 3, 60, 223, 229, 1,
+3, 2, 233, 232, 1, 3, 2, 232, 237, 1, 3, 60, 234, 232, 1, 3, 60, 232, 233, 1,
+ 3, 42, 235, 232, 1, 3, 42, 232, 234, 1, 3, 235, 64, 237, 1, 3, 237, 232, 235, 1,
+ 3, 11, 160, 159, 1, 3, 11, 159, 228, 1, 3, 160, 43, 238, 1, 3, 238, 159, 160, 1,
+ 3, 42, 234, 159, 1, 3, 42, 159, 238, 1, 3, 234, 60, 228, 1, 3, 228, 159, 234, 1,
+3, 8, 208, 150, 1, 3, 8, 150, 151, 1, 3, 208, 55, 239, 1, 3, 239, 150, 208, 1,
+ 3, 42, 238, 150, 1, 3, 42, 150, 239, 1, 3, 238, 43, 151, 1, 3, 151, 150, 238, 1,
+3, 3, 241, 202, 1, 3, 3, 202, 203, 1, 3, 241, 64, 235, 1, 3, 235, 202, 241, 1,
+ 3, 42, 239, 202, 1, 3, 42, 202, 235, 1, 3, 55, 203, 202, 1, 3, 55, 202, 239, 1,
+ 3, 245, 2, 237, 1, 3, 237, 236, 245, 1, 3, 64, 242, 236, 1, 3, 64, 236, 237, 1,
+ 3, 242, 63, 244, 1, 3, 244, 236, 242, 1, 3, 68, 245, 236, 1, 3, 68, 236, 244, 1,
+ 3, 241, 3, 246, 1, 3, 246, 240, 241, 1, 3, 65, 248, 240, 1, 3, 65, 240, 246, 1,
+ 3, 248, 63, 242, 1, 3, 242, 240, 248, 1, 3, 64, 241, 240, 1, 3, 64, 240, 242, 1,
+3, 4, 250, 247, 1, 3, 4, 247, 253, 1, 3, 67, 251, 247, 1, 3, 67, 247, 250, 1,
+ 3, 63, 248, 247, 1, 3, 63, 247, 251, 1, 3, 65, 253, 247, 1, 3, 65, 247, 248, 1,
+3, 7, 255, 243, 1, 3, 7, 243, 257, 1, 3, 68, 244, 243, 1, 3, 68, 243, 255, 1,
+ 3, 63, 251, 243, 1, 3, 63, 243, 244, 1, 3, 67, 257, 243, 1, 3, 67, 243, 251, 1,
+3, 3, 206, 205, 1, 3, 3, 205, 246, 1, 3, 54, 258, 205, 1, 3, 54, 205, 206, 1,
+ 3, 258, 53, 259, 1, 3, 259, 205, 258, 1, 3, 65, 246, 205, 1, 3, 65, 205, 259, 1,
+3, 1, 260, 195, 1, 3, 1, 195, 196, 1, 3, 260, 69, 262, 1, 3, 262, 195, 260, 1,
+ 3, 53, 258, 195, 1, 3, 53, 195, 262, 1, 3, 258, 54, 196, 1, 3, 196, 195, 258, 1,
+ 3, 267, 5, 264, 1, 3, 264, 261, 267, 1, 3, 70, 265, 261, 1, 3, 70, 261, 264, 1,
+ 3, 53, 262, 261, 1, 3, 53, 261, 265, 1, 3, 262, 69, 267, 1, 3, 267, 261, 262, 1,
+3, 4, 253, 252, 1, 3, 4, 252, 268, 1, 3, 253, 65, 259, 1, 3, 259, 252, 253, 1,
+ 3, 53, 265, 252, 1, 3, 53, 252, 259, 1, 3, 265, 70, 268, 1, 3, 268, 252, 265, 1,
+ 3, 260, 1, 214, 1, 3, 214, 213, 260, 1, 3, 59, 269, 213, 1, 3, 59, 213, 214, 1,
+ 3, 269, 58, 270, 1, 3, 270, 213, 269, 1, 3, 69, 260, 213, 1, 3, 69, 213, 270, 1,
+ 3, 219, 0, 271, 1, 3, 271, 218, 219, 1, 3, 71, 273, 218, 1, 3, 71, 218, 271, 1,
+ 3, 273, 58, 269, 1, 3, 269, 218, 273, 1, 3, 59, 219, 218, 1, 3, 59, 218, 269, 1,
+3, 6, 275, 272, 1, 3, 6, 272, 278, 1, 3, 72, 276, 272, 1, 3, 72, 272, 275, 1,
+ 3, 58, 273, 272, 1, 3, 58, 272, 276, 1, 3, 273, 71, 278, 1, 3, 278, 272, 273, 1,
+3, 5, 267, 266, 1, 3, 5, 266, 279, 1, 3, 267, 69, 270, 1, 3, 270, 266, 267, 1,
+ 3, 58, 276, 266, 1, 3, 58, 266, 270, 1, 3, 72, 279, 266, 1, 3, 72, 266, 276, 1,
+3, 0, 226, 225, 1, 3, 0, 225, 271, 1, 3, 226, 62, 280, 1, 3, 280, 225, 226, 1,
+ 3, 61, 281, 225, 1, 3, 61, 225, 280, 1, 3, 281, 71, 271, 1, 3, 271, 225, 281, 1,
+3, 2, 245, 230, 1, 3, 2, 230, 231, 1, 3, 68, 282, 230, 1, 3, 68, 230, 245, 1,
+ 3, 282, 61, 280, 1, 3, 280, 230, 282, 1, 3, 62, 231, 230, 1, 3, 62, 230, 280, 1,
+3, 7, 283, 254, 1, 3, 7, 254, 255, 1, 3, 283, 73, 284, 1, 3, 284, 254, 283, 1,
+ 3, 61, 282, 254, 1, 3, 61, 254, 284, 1, 3, 282, 68, 255, 1, 3, 255, 254, 282, 1,
+ 3, 285, 6, 278, 1, 3, 278, 277, 285, 1, 3, 278, 71, 281, 1, 3, 281, 277, 278, 1,
+ 3, 61, 284, 277, 1, 3, 61, 277, 281, 1, 3, 73, 285, 277, 1, 3, 73, 277, 284, 1,
+3, 4, 268, 249, 1, 3, 4, 249, 250, 1, 3, 268, 70, 286, 1, 3, 286, 249, 268, 1,
+ 3, 66, 287, 249, 1, 3, 66, 249, 286, 1, 3, 287, 67, 250, 1, 3, 250, 249, 287, 1,
+3, 5, 279, 263, 1, 3, 5, 263, 264, 1, 3, 279, 72, 288, 1, 3, 288, 263, 279, 1,
+ 3, 66, 286, 263, 1, 3, 66, 263, 288, 1, 3, 286, 70, 264, 1, 3, 264, 263, 286, 1,
+3, 6, 285, 274, 1, 3, 6, 274, 275, 1, 3, 285, 73, 289, 1, 3, 289, 274, 285, 1,
+ 3, 66, 288, 274, 1, 3, 66, 274, 289, 1, 3, 288, 72, 275, 1, 3, 275, 274, 288, 1,
+3, 7, 257, 256, 1, 3, 7, 256, 283, 1, 3, 257, 67, 287, 1, 3, 287, 256, 257, 1,
+ 3, 66, 289, 256, 1, 3, 66, 256, 287, 1, 3, 289, 73, 283, 1, 3, 283, 256, 289, 1,
+
+ 0
+};
+
+struct lwo LWO_s1_4 =
+{
+ 290, /* number of points */
+ s1_4_PNTS, s1_4_normals, s1_4_POLS, 0L
+};
+
+#endif /* USE_GL */
+
+/* End of s1_4.c */
--- /dev/null
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)s1_5.c 4.2 97/04/20 xlockmore";
+
+#endif
+
+/*-
+ * Points, polygons, and normal vectors to render "s1_5" in 3D.
+ *
+ * Generated by lw2ogl. Link this with your program but do
+ * not edit by hand.
+ */
+
+#include "xlock.h"
+
+#ifdef USE_GL
+
+#include <GL/gl.h>
+#include "glx/buildlwo.h"
+
+GLfloat s1_5_PNTS[] =
+{
+ (GLfloat) 1.333479, (GLfloat) - 0.188456, (GLfloat) - 0.340079,
+ (GLfloat) 1.333479, (GLfloat) - 0.188456, (GLfloat) - 0.659921,
+ (GLfloat) 1.633195, (GLfloat) - 0.090616, (GLfloat) - 0.340079,
+ (GLfloat) 1.633195, (GLfloat) - 0.090616, (GLfloat) - 0.659921,
+ (GLfloat) 1.670754, (GLfloat) - 0.221475, (GLfloat) - 0.638667,
+ (GLfloat) 1.402870, (GLfloat) - 0.293254, (GLfloat) - 0.638667,
+ (GLfloat) 1.402870, (GLfloat) - 0.293254, (GLfloat) - 0.361333,
+ (GLfloat) 1.670754, (GLfloat) - 0.221475, (GLfloat) - 0.361333,
+ (GLfloat) 1.332183, (GLfloat) 0.266938, (GLfloat) - 0.619965,
+ (GLfloat) 1.190836, (GLfloat) 0.100363, (GLfloat) - 0.619965,
+ (GLfloat) 1.190836, (GLfloat) 0.100363, (GLfloat) - 0.380035,
+ (GLfloat) 1.332183, (GLfloat) 0.266938, (GLfloat) - 0.380035,
+ (GLfloat) 0.995497, (GLfloat) 0.593044, (GLfloat) - 0.659921,
+ (GLfloat) 0.995497, (GLfloat) 0.593044, (GLfloat) - 0.340079,
+ (GLfloat) 0.874620, (GLfloat) 0.619745, (GLfloat) - 0.361333,
+ (GLfloat) 0.874620, (GLfloat) 0.619745, (GLfloat) - 0.638667,
+ (GLfloat) 0.974692, (GLfloat) 0.281188, (GLfloat) - 0.340079,
+ (GLfloat) 0.874620, (GLfloat) 0.342412, (GLfloat) - 0.361333,
+ (GLfloat) 0.974692, (GLfloat) 0.281188, (GLfloat) - 0.659921,
+ (GLfloat) 0.874620, (GLfloat) 0.342412, (GLfloat) - 0.638667,
+ (GLfloat) 0.906869, (GLfloat) 0.713633, (GLfloat) - 0.500000,
+ (GLfloat) 1.161726, (GLfloat) 0.497346, (GLfloat) - 0.500000,
+ (GLfloat) 0.999280, (GLfloat) 0.649745, (GLfloat) - 0.500000,
+ (GLfloat) 0.905451, (GLfloat) 0.476683, (GLfloat) - 0.262505,
+ (GLfloat) 0.907098, (GLfloat) 0.650057, (GLfloat) - 0.326227,
+ (GLfloat) 0.856159, (GLfloat) 0.481079, (GLfloat) - 0.500000,
+ (GLfloat) 0.867922, (GLfloat) 0.658641, (GLfloat) - 0.500000,
+ (GLfloat) 0.905451, (GLfloat) 0.476683, (GLfloat) - 0.737495,
+ (GLfloat) 0.907098, (GLfloat) 0.650057, (GLfloat) - 0.673773,
+ (GLfloat) 1.114357, (GLfloat) 0.334395, (GLfloat) - 0.317564,
+ (GLfloat) 0.985095, (GLfloat) 0.437116, (GLfloat) - 0.281926,
+ (GLfloat) 0.904032, (GLfloat) 0.239732, (GLfloat) - 0.500000,
+ (GLfloat) 0.905018, (GLfloat) 0.303308, (GLfloat) - 0.326227,
+ (GLfloat) 0.867922, (GLfloat) 0.481079, (GLfloat) - 0.322437,
+ (GLfloat) 1.066987, (GLfloat) 0.171444, (GLfloat) - 0.500000,
+ (GLfloat) 0.970910, (GLfloat) 0.224487, (GLfloat) - 0.500000,
+ (GLfloat) 0.905018, (GLfloat) 0.303308, (GLfloat) - 0.673773,
+ (GLfloat) 0.867922, (GLfloat) 0.303516, (GLfloat) - 0.500000,
+ (GLfloat) 1.114357, (GLfloat) 0.334395, (GLfloat) - 0.682436,
+ (GLfloat) 0.985095, (GLfloat) 0.437116, (GLfloat) - 0.718074,
+ (GLfloat) 0.867922, (GLfloat) 0.481079, (GLfloat) - 0.677562,
+ (GLfloat) 1.149095, (GLfloat) 0.453892, (GLfloat) - 0.633787,
+ (GLfloat) 1.544380, (GLfloat) 0.092162, (GLfloat) - 0.500000,
+ (GLfloat) 1.357882, (GLfloat) 0.297224, (GLfloat) - 0.500000,
+ (GLfloat) 1.149095, (GLfloat) 0.453892, (GLfloat) - 0.366213,
+ (GLfloat) 1.079619, (GLfloat) 0.214898, (GLfloat) - 0.633787,
+ (GLfloat) 1.391060, (GLfloat) 0.010509, (GLfloat) - 0.682436,
+ (GLfloat) 1.261509, (GLfloat) 0.183650, (GLfloat) - 0.663589,
+ (GLfloat) 1.391060, (GLfloat) 0.010509, (GLfloat) - 0.317564,
+ (GLfloat) 1.261509, (GLfloat) 0.183650, (GLfloat) - 0.336411,
+ (GLfloat) 1.079619, (GLfloat) 0.214898, (GLfloat) - 0.366213,
+ (GLfloat) 1.237741, (GLfloat) - 0.071143, (GLfloat) - 0.500000,
+ (GLfloat) 1.165137, (GLfloat) 0.070077, (GLfloat) - 0.500000,
+ (GLfloat) 1.526344, (GLfloat) - 0.226473, (GLfloat) - 0.737495,
+ (GLfloat) 1.483337, (GLfloat) - 0.139536, (GLfloat) - 0.718074,
+ (GLfloat) 1.503495, (GLfloat) 0.070388, (GLfloat) - 0.633787,
+ (GLfloat) 1.278626, (GLfloat) - 0.049369, (GLfloat) - 0.633787,
+ (GLfloat) 1.278626, (GLfloat) - 0.049369, (GLfloat) - 0.366213,
+ (GLfloat) 1.297571, (GLfloat) - 0.288968, (GLfloat) - 0.500000,
+ (GLfloat) 1.278985, (GLfloat) - 0.206245, (GLfloat) - 0.500000,
+ (GLfloat) 1.503495, (GLfloat) 0.070388, (GLfloat) - 0.366213,
+ (GLfloat) 1.526344, (GLfloat) - 0.226473, (GLfloat) - 0.262505,
+ (GLfloat) 1.483337, (GLfloat) - 0.139536, (GLfloat) - 0.281926,
+ (GLfloat) 1.755118, (GLfloat) - 0.163978, (GLfloat) - 0.500000,
+ (GLfloat) 1.687689, (GLfloat) - 0.072827, (GLfloat) - 0.500000,
+ (GLfloat) 1.693578, (GLfloat) - 0.180157, (GLfloat) - 0.673773,
+ (GLfloat) 1.541590, (GLfloat) - 0.275196, (GLfloat) - 0.500000,
+ (GLfloat) 1.710058, (GLfloat) - 0.217878, (GLfloat) - 0.500000,
+ (GLfloat) 1.693578, (GLfloat) - 0.180157, (GLfloat) - 0.326227,
+ (GLfloat) 1.358796, (GLfloat) - 0.271614, (GLfloat) - 0.673773,
+ (GLfloat) 1.538546, (GLfloat) - 0.263835, (GLfloat) - 0.677562,
+ (GLfloat) 1.358796, (GLfloat) - 0.271614, (GLfloat) - 0.326227,
+ (GLfloat) 1.367033, (GLfloat) - 0.309791, (GLfloat) - 0.500000,
+ (GLfloat) 1.538546, (GLfloat) - 0.263835, (GLfloat) - 0.322437,
+ (GLfloat) 0.944384, (GLfloat) 0.679375, (GLfloat) - 0.593392,
+ (GLfloat) 1.071585, (GLfloat) 0.569561, (GLfloat) - 0.579959,
+ (GLfloat) 0.998334, (GLfloat) 0.635570, (GLfloat) - 0.587230,
+ (GLfloat) 0.944384, (GLfloat) 0.679375, (GLfloat) - 0.406608,
+ (GLfloat) 0.944762, (GLfloat) 0.694795, (GLfloat) - 0.500000,
+ (GLfloat) 0.883764, (GLfloat) 0.687079, (GLfloat) - 0.587500,
+ (GLfloat) 0.907078, (GLfloat) 0.697653, (GLfloat) - 0.594723,
+ (GLfloat) 0.941357, (GLfloat) 0.556014, (GLfloat) - 0.717914,
+ (GLfloat) 0.943249, (GLfloat) 0.633115, (GLfloat) - 0.671218,
+ (GLfloat) 0.941357, (GLfloat) 0.556014, (GLfloat) - 0.282086,
+ (GLfloat) 0.943249, (GLfloat) 0.633115, (GLfloat) - 0.328782,
+ (GLfloat) 0.883764, (GLfloat) 0.687079, (GLfloat) - 0.412500,
+ (GLfloat) 0.907078, (GLfloat) 0.697653, (GLfloat) - 0.405277,
+ (GLfloat) 1.071585, (GLfloat) 0.569561, (GLfloat) - 0.420041,
+ (GLfloat) 0.998334, (GLfloat) 0.635570, (GLfloat) - 0.412770,
+ (GLfloat) 0.861889, (GLfloat) 0.571579, (GLfloat) - 0.409500,
+ (GLfloat) 0.870135, (GLfloat) 0.645704, (GLfloat) - 0.417500,
+ (GLfloat) 0.882548, (GLfloat) 0.702579, (GLfloat) - 0.500000,
+ (GLfloat) 0.883764, (GLfloat) 0.568579, (GLfloat) - 0.294000,
+ (GLfloat) 0.884979, (GLfloat) 0.641954, (GLfloat) - 0.339125,
+ (GLfloat) 0.883764, (GLfloat) 0.568579, (GLfloat) - 0.706000,
+ (GLfloat) 0.884979, (GLfloat) 0.641954, (GLfloat) - 0.660875,
+ (GLfloat) 0.861889, (GLfloat) 0.571579, (GLfloat) - 0.590500,
+ (GLfloat) 0.870135, (GLfloat) 0.645704, (GLfloat) - 0.582500,
+ (GLfloat) 1.056455, (GLfloat) 0.468757, (GLfloat) - 0.313428,
+ (GLfloat) 0.990769, (GLfloat) 0.522168, (GLfloat) - 0.296464,
+ (GLfloat) 0.936818, (GLfloat) 0.370973, (GLfloat) - 0.282086,
+ (GLfloat) 0.939088, (GLfloat) 0.463494, (GLfloat) - 0.266520,
+ (GLfloat) 0.906322, (GLfloat) 0.571188, (GLfloat) - 0.278521,
+ (GLfloat) 0.933792, (GLfloat) 0.247612, (GLfloat) - 0.406608,
+ (GLfloat) 0.934927, (GLfloat) 0.293873, (GLfloat) - 0.328782,
+ (GLfloat) 0.883764, (GLfloat) 0.393579, (GLfloat) - 0.294000,
+ (GLfloat) 0.905187, (GLfloat) 0.382177, (GLfloat) - 0.278521,
+ (GLfloat) 1.033759, (GLfloat) 0.317550, (GLfloat) - 0.313428,
+ (GLfloat) 0.979421, (GLfloat) 0.352064, (GLfloat) - 0.296464,
+ (GLfloat) 0.861889, (GLfloat) 0.390579, (GLfloat) - 0.409500,
+ (GLfloat) 0.870135, (GLfloat) 0.398579, (GLfloat) - 0.335375,
+ (GLfloat) 0.882548, (GLfloat) 0.481079, (GLfloat) - 0.278500,
+ (GLfloat) 0.883764, (GLfloat) 0.275079, (GLfloat) - 0.412500,
+ (GLfloat) 0.884979, (GLfloat) 0.320204, (GLfloat) - 0.339125,
+ (GLfloat) 0.870135, (GLfloat) 0.563579, (GLfloat) - 0.335375,
+ (GLfloat) 1.018628, (GLfloat) 0.216746, (GLfloat) - 0.420041,
+ (GLfloat) 0.971855, (GLfloat) 0.238662, (GLfloat) - 0.412770,
+ (GLfloat) 0.933792, (GLfloat) 0.247612, (GLfloat) - 0.593392,
+ (GLfloat) 0.933414, (GLfloat) 0.232192, (GLfloat) - 0.500000,
+ (GLfloat) 0.904430, (GLfloat) 0.255712, (GLfloat) - 0.405277,
+ (GLfloat) 0.936818, (GLfloat) 0.370973, (GLfloat) - 0.717914,
+ (GLfloat) 0.934927, (GLfloat) 0.293873, (GLfloat) - 0.671218,
+ (GLfloat) 0.883764, (GLfloat) 0.275079, (GLfloat) - 0.587500,
+ (GLfloat) 0.904430, (GLfloat) 0.255712, (GLfloat) - 0.594723,
+ (GLfloat) 1.018628, (GLfloat) 0.216746, (GLfloat) - 0.579959,
+ (GLfloat) 0.971855, (GLfloat) 0.238662, (GLfloat) - 0.587230,
+ (GLfloat) 0.861889, (GLfloat) 0.390579, (GLfloat) - 0.590500,
+ (GLfloat) 0.870135, (GLfloat) 0.316454, (GLfloat) - 0.582500,
+ (GLfloat) 0.882548, (GLfloat) 0.259579, (GLfloat) - 0.500000,
+ (GLfloat) 0.883764, (GLfloat) 0.393579, (GLfloat) - 0.706000,
+ (GLfloat) 0.884979, (GLfloat) 0.320204, (GLfloat) - 0.660875,
+ (GLfloat) 0.870135, (GLfloat) 0.316454, (GLfloat) - 0.417500,
+ (GLfloat) 1.033759, (GLfloat) 0.317550, (GLfloat) - 0.686572,
+ (GLfloat) 0.979421, (GLfloat) 0.352064, (GLfloat) - 0.703536,
+ (GLfloat) 0.939088, (GLfloat) 0.463494, (GLfloat) - 0.733480,
+ (GLfloat) 0.905187, (GLfloat) 0.382177, (GLfloat) - 0.721479,
+ (GLfloat) 0.906322, (GLfloat) 0.571188, (GLfloat) - 0.721479,
+ (GLfloat) 1.056455, (GLfloat) 0.468757, (GLfloat) - 0.686572,
+ (GLfloat) 0.990769, (GLfloat) 0.522168, (GLfloat) - 0.703536,
+ (GLfloat) 0.870135, (GLfloat) 0.563579, (GLfloat) - 0.664625,
+ (GLfloat) 0.882548, (GLfloat) 0.481079, (GLfloat) - 0.721500,
+ (GLfloat) 0.870135, (GLfloat) 0.398579, (GLfloat) - 0.664625,
+ (GLfloat) 0.859111, (GLfloat) 0.481079, (GLfloat) - 0.402250,
+ (GLfloat) 0.859111, (GLfloat) 0.578829, (GLfloat) - 0.500000,
+ (GLfloat) 0.859111, (GLfloat) 0.383329, (GLfloat) - 0.500000,
+ (GLfloat) 0.859111, (GLfloat) 0.481079, (GLfloat) - 0.597750,
+ (GLfloat) 1.065911, (GLfloat) 0.531759, (GLfloat) - 0.646592,
+ (GLfloat) 1.253715, (GLfloat) 0.391468, (GLfloat) - 0.567669,
+ (GLfloat) 1.158568, (GLfloat) 0.486483, (GLfloat) - 0.572975,
+ (GLfloat) 1.073477, (GLfloat) 0.582162, (GLfloat) - 0.500000,
+ (GLfloat) 1.446226, (GLfloat) 0.186168, (GLfloat) - 0.567669,
+ (GLfloat) 1.351457, (GLfloat) 0.289652, (GLfloat) - 0.565436,
+ (GLfloat) 1.253715, (GLfloat) 0.391468, (GLfloat) - 0.432331,
+ (GLfloat) 1.258403, (GLfloat) 0.400600, (GLfloat) - 0.500000,
+ (GLfloat) 1.216209, (GLfloat) 0.318418, (GLfloat) - 0.657894,
+ (GLfloat) 1.239650, (GLfloat) 0.364075, (GLfloat) - 0.624059,
+ (GLfloat) 1.216209, (GLfloat) 0.318418, (GLfloat) - 0.342106,
+ (GLfloat) 1.239650, (GLfloat) 0.364075, (GLfloat) - 0.375941,
+ (GLfloat) 1.158568, (GLfloat) 0.486483, (GLfloat) - 0.427025,
+ (GLfloat) 1.446226, (GLfloat) 0.186168, (GLfloat) - 0.432331,
+ (GLfloat) 1.351457, (GLfloat) 0.289652, (GLfloat) - 0.434564,
+ (GLfloat) 1.065911, (GLfloat) 0.531759, (GLfloat) - 0.353408,
+ (GLfloat) 1.024302, (GLfloat) 0.254547, (GLfloat) - 0.646592,
+ (GLfloat) 1.159950, (GLfloat) 0.208844, (GLfloat) - 0.657894,
+ (GLfloat) 1.095409, (GLfloat) 0.269215, (GLfloat) - 0.670274,
+ (GLfloat) 1.045107, (GLfloat) 0.393153, (GLfloat) - 0.699898,
+ (GLfloat) 1.280017, (GLfloat) 0.059132, (GLfloat) - 0.657894,
+ (GLfloat) 1.222960, (GLfloat) 0.138221, (GLfloat) - 0.652683,
+ (GLfloat) 1.188080, (GLfloat) 0.263631, (GLfloat) - 0.669172,
+ (GLfloat) 1.122445, (GLfloat) 0.135794, (GLfloat) - 0.567669,
+ (GLfloat) 1.136509, (GLfloat) 0.163187, (GLfloat) - 0.624059,
+ (GLfloat) 1.133305, (GLfloat) 0.399575, (GLfloat) - 0.670274,
+ (GLfloat) 1.379742, (GLfloat) 0.135354, (GLfloat) - 0.657894,
+ (GLfloat) 1.300058, (GLfloat) 0.229080, (GLfloat) - 0.652683,
+ (GLfloat) 1.045107, (GLfloat) 0.393153, (GLfloat) - 0.300102,
+ (GLfloat) 1.159950, (GLfloat) 0.208844, (GLfloat) - 0.342106,
+ (GLfloat) 1.095409, (GLfloat) 0.269215, (GLfloat) - 0.329726,
+ (GLfloat) 1.024302, (GLfloat) 0.254547, (GLfloat) - 0.353408,
+ (GLfloat) 1.133305, (GLfloat) 0.399575, (GLfloat) - 0.329726,
+ (GLfloat) 1.379742, (GLfloat) 0.135354, (GLfloat) - 0.342106,
+ (GLfloat) 1.300058, (GLfloat) 0.229080, (GLfloat) - 0.347317,
+ (GLfloat) 1.188080, (GLfloat) 0.263631, (GLfloat) - 0.330828,
+ (GLfloat) 1.122445, (GLfloat) 0.135794, (GLfloat) - 0.432331,
+ (GLfloat) 1.136509, (GLfloat) 0.163187, (GLfloat) - 0.375941,
+ (GLfloat) 1.280017, (GLfloat) 0.059132, (GLfloat) - 0.342106,
+ (GLfloat) 1.222960, (GLfloat) 0.138221, (GLfloat) - 0.347317,
+ (GLfloat) 1.016736, (GLfloat) 0.204145, (GLfloat) - 0.500000,
+ (GLfloat) 1.070145, (GLfloat) 0.182308, (GLfloat) - 0.572975,
+ (GLfloat) 1.070145, (GLfloat) 0.182308, (GLfloat) - 0.427025,
+ (GLfloat) 1.213533, (GLfloat) 0.008318, (GLfloat) - 0.432331,
+ (GLfloat) 1.171562, (GLfloat) 0.077649, (GLfloat) - 0.434564,
+ (GLfloat) 1.117756, (GLfloat) 0.126662, (GLfloat) - 0.500000,
+ (GLfloat) 1.213533, (GLfloat) 0.008318, (GLfloat) - 0.567669,
+ (GLfloat) 1.171562, (GLfloat) 0.077649, (GLfloat) - 0.565436,
+ (GLfloat) 1.370721, (GLfloat) - 0.099359, (GLfloat) - 0.686572,
+ (GLfloat) 1.420971, (GLfloat) - 0.216460, (GLfloat) - 0.717914,
+ (GLfloat) 1.401596, (GLfloat) - 0.166219, (GLfloat) - 0.703536,
+ (GLfloat) 1.515124, (GLfloat) - 0.041541, (GLfloat) - 0.686572,
+ (GLfloat) 1.442923, (GLfloat) - 0.070450, (GLfloat) - 0.699898,
+ (GLfloat) 1.329732, (GLfloat) - 0.022152, (GLfloat) - 0.670274,
+ (GLfloat) 1.274453, (GLfloat) - 0.137904, (GLfloat) - 0.579959,
+ (GLfloat) 1.310553, (GLfloat) - 0.123450, (GLfloat) - 0.646592,
+ (GLfloat) 1.611392, (GLfloat) - 0.002996, (GLfloat) - 0.579959,
+ (GLfloat) 1.575292, (GLfloat) - 0.017451, (GLfloat) - 0.646592,
+ (GLfloat) 1.452388, (GLfloat) 0.043170, (GLfloat) - 0.670274,
+ (GLfloat) 1.599377, (GLfloat) - 0.164832, (GLfloat) - 0.717914,
+ (GLfloat) 1.565078, (GLfloat) - 0.112852, (GLfloat) - 0.703536,
+ (GLfloat) 1.329879, (GLfloat) 0.097243, (GLfloat) - 0.669172,
+ (GLfloat) 1.421294, (GLfloat) 0.167113, (GLfloat) - 0.624059,
+ (GLfloat) 1.238464, (GLfloat) 0.027373, (GLfloat) - 0.624059,
+ (GLfloat) 1.247962, (GLfloat) - 0.065700, (GLfloat) - 0.572975,
+ (GLfloat) 1.274453, (GLfloat) - 0.137904, (GLfloat) - 0.420041,
+ (GLfloat) 1.262419, (GLfloat) - 0.142723, (GLfloat) - 0.500000,
+ (GLfloat) 1.302034, (GLfloat) - 0.250880, (GLfloat) - 0.593392,
+ (GLfloat) 1.292609, (GLfloat) - 0.201797, (GLfloat) - 0.587230,
+ (GLfloat) 1.205222, (GLfloat) 0.001966, (GLfloat) - 0.500000,
+ (GLfloat) 1.238464, (GLfloat) 0.027373, (GLfloat) - 0.375941,
+ (GLfloat) 1.247962, (GLfloat) - 0.065700, (GLfloat) - 0.427025,
+ (GLfloat) 1.302034, (GLfloat) - 0.250880, (GLfloat) - 0.406608,
+ (GLfloat) 1.292609, (GLfloat) - 0.201797, (GLfloat) - 0.412770,
+ (GLfloat) 1.370721, (GLfloat) - 0.099359, (GLfloat) - 0.313428,
+ (GLfloat) 1.310553, (GLfloat) - 0.123450, (GLfloat) - 0.353408,
+ (GLfloat) 1.329732, (GLfloat) - 0.022152, (GLfloat) - 0.329726,
+ (GLfloat) 1.515124, (GLfloat) - 0.041541, (GLfloat) - 0.313428,
+ (GLfloat) 1.442923, (GLfloat) - 0.070450, (GLfloat) - 0.300102,
+ (GLfloat) 1.420971, (GLfloat) - 0.216460, (GLfloat) - 0.282086,
+ (GLfloat) 1.401596, (GLfloat) - 0.166219, (GLfloat) - 0.296464,
+ (GLfloat) 1.329879, (GLfloat) 0.097243, (GLfloat) - 0.330828,
+ (GLfloat) 1.421294, (GLfloat) 0.167113, (GLfloat) - 0.375941,
+ (GLfloat) 1.452388, (GLfloat) 0.043170, (GLfloat) - 0.329726,
+ (GLfloat) 1.599377, (GLfloat) - 0.164832, (GLfloat) - 0.282086,
+ (GLfloat) 1.565078, (GLfloat) - 0.112852, (GLfloat) - 0.296464,
+ (GLfloat) 1.611392, (GLfloat) - 0.002996, (GLfloat) - 0.420041,
+ (GLfloat) 1.575292, (GLfloat) - 0.017451, (GLfloat) - 0.353408,
+ (GLfloat) 1.534158, (GLfloat) 0.086718, (GLfloat) - 0.427025,
+ (GLfloat) 1.623426, (GLfloat) 0.001822, (GLfloat) - 0.500000,
+ (GLfloat) 1.718314, (GLfloat) - 0.130413, (GLfloat) - 0.406608,
+ (GLfloat) 1.674065, (GLfloat) - 0.077274, (GLfloat) - 0.412770,
+ (GLfloat) 1.454536, (GLfloat) 0.192520, (GLfloat) - 0.500000,
+ (GLfloat) 1.534158, (GLfloat) 0.086718, (GLfloat) - 0.572975,
+ (GLfloat) 1.718314, (GLfloat) - 0.130413, (GLfloat) - 0.593392,
+ (GLfloat) 1.674065, (GLfloat) - 0.077274, (GLfloat) - 0.587230,
+ (GLfloat) 1.733181, (GLfloat) - 0.126110, (GLfloat) - 0.500000,
+ (GLfloat) 1.733426, (GLfloat) - 0.195216, (GLfloat) - 0.412500,
+ (GLfloat) 1.739610, (GLfloat) - 0.167898, (GLfloat) - 0.405277,
+ (GLfloat) 1.673712, (GLfloat) - 0.143320, (GLfloat) - 0.328782,
+ (GLfloat) 1.673712, (GLfloat) - 0.143320, (GLfloat) - 0.671218,
+ (GLfloat) 1.733426, (GLfloat) - 0.195216, (GLfloat) - 0.587500,
+ (GLfloat) 1.739610, (GLfloat) - 0.167898, (GLfloat) - 0.594723,
+ (GLfloat) 1.627523, (GLfloat) - 0.246239, (GLfloat) - 0.590500,
+ (GLfloat) 1.696988, (GLfloat) - 0.219088, (GLfloat) - 0.582500,
+ (GLfloat) 1.748713, (GLfloat) - 0.192378, (GLfloat) - 0.500000,
+ (GLfloat) 1.618964, (GLfloat) - 0.225886, (GLfloat) - 0.706000,
+ (GLfloat) 1.689524, (GLfloat) - 0.205721, (GLfloat) - 0.660875,
+ (GLfloat) 1.618964, (GLfloat) - 0.225886, (GLfloat) - 0.294000,
+ (GLfloat) 1.689524, (GLfloat) - 0.205721, (GLfloat) - 0.339125,
+ (GLfloat) 1.627523, (GLfloat) - 0.246239, (GLfloat) - 0.409500,
+ (GLfloat) 1.696988, (GLfloat) - 0.219088, (GLfloat) - 0.417500,
+ (GLfloat) 1.510174, (GLfloat) - 0.190646, (GLfloat) - 0.733480,
+ (GLfloat) 1.617509, (GLfloat) - 0.201252, (GLfloat) - 0.721479,
+ (GLfloat) 1.346635, (GLfloat) - 0.237972, (GLfloat) - 0.671218,
+ (GLfloat) 1.449927, (GLfloat) - 0.271179, (GLfloat) - 0.706000,
+ (GLfloat) 1.435022, (GLfloat) - 0.251106, (GLfloat) - 0.721479,
+ (GLfloat) 1.452691, (GLfloat) - 0.293085, (GLfloat) - 0.590500,
+ (GLfloat) 1.458284, (GLfloat) - 0.283049, (GLfloat) - 0.664625,
+ (GLfloat) 1.534760, (GLfloat) - 0.249706, (GLfloat) - 0.721500,
+ (GLfloat) 1.335465, (GLfloat) - 0.301849, (GLfloat) - 0.587500,
+ (GLfloat) 1.378738, (GLfloat) - 0.288996, (GLfloat) - 0.660875,
+ (GLfloat) 1.617662, (GLfloat) - 0.240344, (GLfloat) - 0.664625,
+ (GLfloat) 1.287166, (GLfloat) - 0.255182, (GLfloat) - 0.500000,
+ (GLfloat) 1.312921, (GLfloat) - 0.284460, (GLfloat) - 0.594723,
+ (GLfloat) 1.346635, (GLfloat) - 0.237972, (GLfloat) - 0.328782,
+ (GLfloat) 1.335465, (GLfloat) - 0.301849, (GLfloat) - 0.412500,
+ (GLfloat) 1.312921, (GLfloat) - 0.284460, (GLfloat) - 0.405277,
+ (GLfloat) 1.452691, (GLfloat) - 0.293085, (GLfloat) - 0.409500,
+ (GLfloat) 1.378957, (GLfloat) - 0.304305, (GLfloat) - 0.417500,
+ (GLfloat) 1.320807, (GLfloat) - 0.307035, (GLfloat) - 0.500000,
+ (GLfloat) 1.449927, (GLfloat) - 0.271179, (GLfloat) - 0.294000,
+ (GLfloat) 1.378738, (GLfloat) - 0.288996, (GLfloat) - 0.339125,
+ (GLfloat) 1.378957, (GLfloat) - 0.304305, (GLfloat) - 0.582500,
+ (GLfloat) 1.510174, (GLfloat) - 0.190646, (GLfloat) - 0.266520,
+ (GLfloat) 1.435022, (GLfloat) - 0.251106, (GLfloat) - 0.278521,
+ (GLfloat) 1.617509, (GLfloat) - 0.201252, (GLfloat) - 0.278521,
+ (GLfloat) 1.617662, (GLfloat) - 0.240344, (GLfloat) - 0.335375,
+ (GLfloat) 1.534760, (GLfloat) - 0.249706, (GLfloat) - 0.278500,
+ (GLfloat) 1.458284, (GLfloat) - 0.283049, (GLfloat) - 0.335375,
+ (GLfloat) 1.540826, (GLfloat) - 0.272345, (GLfloat) - 0.597750,
+ (GLfloat) 1.635245, (GLfloat) - 0.247046, (GLfloat) - 0.500000,
+ (GLfloat) 1.446407, (GLfloat) - 0.297645, (GLfloat) - 0.500000,
+ (GLfloat) 1.540826, (GLfloat) - 0.272345, (GLfloat) - 0.402250,
+};
+
+GLfloat s1_5_normals[] =
+{
+ (GLfloat) 0.600201, (GLfloat) 0.679955, (GLfloat) - 0.421211,
+ (GLfloat) 0.608958, (GLfloat) 0.677912, (GLfloat) - 0.411832,
+ (GLfloat) 0.631502, (GLfloat) 0.764222, (GLfloat) - 0.131036,
+ (GLfloat) 0.633915, (GLfloat) 0.762655, (GLfloat) - 0.128491,
+ (GLfloat) 0.439368, (GLfloat) 0.885949, (GLfloat) - 0.148491,
+ (GLfloat) 0.440253, (GLfloat) 0.885591, (GLfloat) - 0.148004,
+ (GLfloat) 0.401172, (GLfloat) 0.784782, (GLfloat) - 0.472417,
+ (GLfloat) 0.401344, (GLfloat) 0.784757, (GLfloat) - 0.472314,
+ (GLfloat) 0.608958, (GLfloat) 0.677912, (GLfloat) 0.411832,
+ (GLfloat) 0.600202, (GLfloat) 0.679955, (GLfloat) 0.421211,
+ (GLfloat) 0.401173, (GLfloat) 0.784782, (GLfloat) 0.472416,
+ (GLfloat) 0.401344, (GLfloat) 0.784757, (GLfloat) 0.472314,
+ (GLfloat) 0.440253, (GLfloat) 0.885591, (GLfloat) 0.148004,
+ (GLfloat) 0.439368, (GLfloat) 0.885949, (GLfloat) 0.148491,
+ (GLfloat) 0.631502, (GLfloat) 0.764222, (GLfloat) 0.131036,
+ (GLfloat) 0.633915, (GLfloat) 0.762655, (GLfloat) 0.128491,
+ (GLfloat) - 0.936578, (GLfloat) 0.283620, (GLfloat) 0.205866,
+ (GLfloat) - 0.947923, (GLfloat) 0.264055, (GLfloat) 0.178092,
+ (GLfloat) - 0.946548, (GLfloat) 0.315105, (GLfloat) 0.068965,
+ (GLfloat) - 0.949849, (GLfloat) 0.304029, (GLfloat) 0.073162,
+ (GLfloat) - 0.446501, (GLfloat) 0.882153, (GLfloat) 0.149808,
+ (GLfloat) - 0.408128, (GLfloat) 0.897939, (GLfloat) 0.164731,
+ (GLfloat) - 0.523643, (GLfloat) 0.729794, (GLfloat) 0.439543,
+ (GLfloat) - 0.481115, (GLfloat) 0.743166, (GLfloat) 0.465009,
+ (GLfloat) - 0.947923, (GLfloat) 0.264056, (GLfloat) - 0.178092,
+ (GLfloat) - 0.936578, (GLfloat) 0.283620, (GLfloat) - 0.205866,
+ (GLfloat) - 0.523644, (GLfloat) 0.729794, (GLfloat) - 0.439543,
+ (GLfloat) - 0.481115, (GLfloat) 0.743165, (GLfloat) - 0.465009,
+ (GLfloat) - 0.408128, (GLfloat) 0.897939, (GLfloat) - 0.164732,
+ (GLfloat) - 0.446501, (GLfloat) 0.882153, (GLfloat) - 0.149808,
+ (GLfloat) - 0.949849, (GLfloat) 0.304029, (GLfloat) - 0.073162,
+ (GLfloat) - 0.946548, (GLfloat) 0.315105, (GLfloat) - 0.068965,
+ (GLfloat) 0.509419, (GLfloat) 0.426080, (GLfloat) 0.747629,
+ (GLfloat) 0.498886, (GLfloat) 0.439986, (GLfloat) 0.746676,
+ (GLfloat) 0.381490, (GLfloat) 0.130964, (GLfloat) 0.915048,
+ (GLfloat) 0.367056, (GLfloat) 0.145561, (GLfloat) 0.918739,
+ (GLfloat) 0.169535, (GLfloat) 0.163155, (GLfloat) 0.971925,
+ (GLfloat) 0.178255, (GLfloat) 0.158993, (GLfloat) 0.971054,
+ (GLfloat) 0.289187, (GLfloat) 0.493355, (GLfloat) 0.820349,
+ (GLfloat) 0.295492, (GLfloat) 0.489598, (GLfloat) 0.820352,
+ (GLfloat) 0.072844, (GLfloat) - 0.526213, (GLfloat) 0.847227,
+ (GLfloat) 0.057982, (GLfloat) - 0.518213, (GLfloat) 0.853284,
+ (GLfloat) - 0.086528, (GLfloat) - 0.515478, (GLfloat) 0.852523,
+ (GLfloat) - 0.089419, (GLfloat) - 0.514364, (GLfloat) 0.852898,
+ (GLfloat) 0.052047, (GLfloat) - 0.167008, (GLfloat) 0.984581,
+ (GLfloat) 0.051822, (GLfloat) - 0.166918, (GLfloat) 0.984608,
+ (GLfloat) 0.242298, (GLfloat) - 0.179154, (GLfloat) 0.953517,
+ (GLfloat) 0.225634, (GLfloat) - 0.167006, (GLfloat) 0.959791,
+ (GLfloat) - 0.936578, (GLfloat) - 0.205866, (GLfloat) 0.283621,
+ (GLfloat) - 0.947923, (GLfloat) - 0.178092, (GLfloat) 0.264055,
+ (GLfloat) - 0.946548, (GLfloat) - 0.068965, (GLfloat) 0.315105,
+ (GLfloat) - 0.949849, (GLfloat) - 0.073162, (GLfloat) 0.304029,
+ (GLfloat) - 0.624880, (GLfloat) - 0.128758, (GLfloat) 0.770030,
+ (GLfloat) - 0.585268, (GLfloat) - 0.149307, (GLfloat) 0.796975,
+ (GLfloat) - 0.702251, (GLfloat) - 0.367360, (GLfloat) 0.609828,
+ (GLfloat) - 0.666949, (GLfloat) - 0.398310, (GLfloat) 0.629705,
+ (GLfloat) - 0.947923, (GLfloat) 0.178092, (GLfloat) 0.264055,
+ (GLfloat) - 0.936578, (GLfloat) 0.205866, (GLfloat) 0.283621,
+ (GLfloat) - 0.567140, (GLfloat) 0.430351, (GLfloat) 0.702247,
+ (GLfloat) - 0.540648, (GLfloat) 0.447171, (GLfloat) 0.712557,
+ (GLfloat) - 0.547735, (GLfloat) 0.144705, (GLfloat) 0.824043,
+ (GLfloat) - 0.571109, (GLfloat) 0.150867, (GLfloat) 0.806892,
+ (GLfloat) - 0.949849, (GLfloat) 0.073162, (GLfloat) 0.304029,
+ (GLfloat) - 0.946548, (GLfloat) 0.068965, (GLfloat) 0.315105,
+ (GLfloat) - 0.119299, (GLfloat) - 0.854945, (GLfloat) 0.504814,
+ (GLfloat) - 0.127336, (GLfloat) - 0.851794, (GLfloat) 0.508166,
+ (GLfloat) - 0.198715, (GLfloat) - 0.967024, (GLfloat) 0.159301,
+ (GLfloat) - 0.201251, (GLfloat) - 0.966323, (GLfloat) 0.160367,
+ (GLfloat) - 0.255603, (GLfloat) - 0.953134, (GLfloat) 0.161871,
+ (GLfloat) - 0.245412, (GLfloat) - 0.956309, (GLfloat) 0.158892,
+ (GLfloat) - 0.220327, (GLfloat) - 0.834921, (GLfloat) 0.504344,
+ (GLfloat) - 0.208789, (GLfloat) - 0.839323, (GLfloat) 0.501940,
+ (GLfloat) - 0.127336, (GLfloat) - 0.851794, (GLfloat) - 0.508166,
+ (GLfloat) - 0.119299, (GLfloat) - 0.854945, (GLfloat) - 0.504814,
+ (GLfloat) - 0.220327, (GLfloat) - 0.834921, (GLfloat) - 0.504344,
+ (GLfloat) - 0.208789, (GLfloat) - 0.839323, (GLfloat) - 0.501940,
+ (GLfloat) - 0.245412, (GLfloat) - 0.956309, (GLfloat) - 0.158892,
+ (GLfloat) - 0.255603, (GLfloat) - 0.953134, (GLfloat) - 0.161871,
+ (GLfloat) - 0.198715, (GLfloat) - 0.967024, (GLfloat) - 0.159301,
+ (GLfloat) - 0.201251, (GLfloat) - 0.966323, (GLfloat) - 0.160367,
+ (GLfloat) - 0.936578, (GLfloat) - 0.283621, (GLfloat) - 0.205866,
+ (GLfloat) - 0.947923, (GLfloat) - 0.264056, (GLfloat) - 0.178092,
+ (GLfloat) - 0.946548, (GLfloat) - 0.315105, (GLfloat) - 0.068965,
+ (GLfloat) - 0.949849, (GLfloat) - 0.304029, (GLfloat) - 0.073162,
+ (GLfloat) - 0.700995, (GLfloat) - 0.702740, (GLfloat) - 0.121503,
+ (GLfloat) - 0.672056, (GLfloat) - 0.727490, (GLfloat) - 0.138204,
+ (GLfloat) - 0.726368, (GLfloat) - 0.580019, (GLfloat) - 0.368737,
+ (GLfloat) - 0.700623, (GLfloat) - 0.608968, (GLfloat) - 0.371867,
+ (GLfloat) - 0.947923, (GLfloat) - 0.264056, (GLfloat) 0.178092,
+ (GLfloat) - 0.936578, (GLfloat) - 0.283621, (GLfloat) 0.205866,
+ (GLfloat) - 0.700623, (GLfloat) - 0.608968, (GLfloat) 0.371867,
+ (GLfloat) - 0.726368, (GLfloat) - 0.580019, (GLfloat) 0.368738,
+ (GLfloat) - 0.672055, (GLfloat) - 0.727490, (GLfloat) 0.138204,
+ (GLfloat) - 0.700994, (GLfloat) - 0.702740, (GLfloat) 0.121503,
+ (GLfloat) - 0.949849, (GLfloat) - 0.304029, (GLfloat) 0.073162,
+ (GLfloat) - 0.946548, (GLfloat) - 0.315105, (GLfloat) 0.068965,
+ (GLfloat) 0.072844, (GLfloat) - 0.526213, (GLfloat) - 0.847227,
+ (GLfloat) 0.057982, (GLfloat) - 0.518214, (GLfloat) - 0.853284,
+ (GLfloat) 0.225635, (GLfloat) - 0.167007, (GLfloat) - 0.959790,
+ (GLfloat) 0.242298, (GLfloat) - 0.179154, (GLfloat) - 0.953517,
+ (GLfloat) 0.052045, (GLfloat) - 0.167008, (GLfloat) - 0.984581,
+ (GLfloat) 0.051820, (GLfloat) - 0.166918, (GLfloat) - 0.984608,
+ (GLfloat) - 0.089420, (GLfloat) - 0.514364, (GLfloat) - 0.852897,
+ (GLfloat) - 0.086529, (GLfloat) - 0.515478, (GLfloat) - 0.852523,
+ (GLfloat) 0.498887, (GLfloat) 0.439986, (GLfloat) - 0.746675,
+ (GLfloat) 0.509419, (GLfloat) 0.426080, (GLfloat) - 0.747628,
+ (GLfloat) 0.289186, (GLfloat) 0.493355, (GLfloat) - 0.820349,
+ (GLfloat) 0.295491, (GLfloat) 0.489598, (GLfloat) - 0.820353,
+ (GLfloat) 0.178253, (GLfloat) 0.158994, (GLfloat) - 0.971054,
+ (GLfloat) 0.169534, (GLfloat) 0.163155, (GLfloat) - 0.971925,
+ (GLfloat) 0.381491, (GLfloat) 0.130963, (GLfloat) - 0.915048,
+ (GLfloat) 0.367056, (GLfloat) 0.145561, (GLfloat) - 0.918739,
+ (GLfloat) - 0.936578, (GLfloat) 0.205866, (GLfloat) - 0.283621,
+ (GLfloat) - 0.947923, (GLfloat) 0.178092, (GLfloat) - 0.264056,
+ (GLfloat) - 0.946548, (GLfloat) 0.068965, (GLfloat) - 0.315105,
+ (GLfloat) - 0.949849, (GLfloat) 0.073162, (GLfloat) - 0.304029,
+ (GLfloat) - 0.547736, (GLfloat) 0.144705, (GLfloat) - 0.824043,
+ (GLfloat) - 0.571109, (GLfloat) 0.150867, (GLfloat) - 0.806892,
+ (GLfloat) - 0.567141, (GLfloat) 0.430351, (GLfloat) - 0.702246,
+ (GLfloat) - 0.540648, (GLfloat) 0.447171, (GLfloat) - 0.712557,
+ (GLfloat) - 0.947923, (GLfloat) - 0.178092, (GLfloat) - 0.264056,
+ (GLfloat) - 0.936578, (GLfloat) - 0.205866, (GLfloat) - 0.283621,
+ (GLfloat) - 0.702251, (GLfloat) - 0.367360, (GLfloat) - 0.609828,
+ (GLfloat) - 0.666949, (GLfloat) - 0.398310, (GLfloat) - 0.629705,
+ (GLfloat) - 0.585269, (GLfloat) - 0.149307, (GLfloat) - 0.796974,
+ (GLfloat) - 0.624880, (GLfloat) - 0.128758, (GLfloat) - 0.770030,
+ (GLfloat) - 0.949849, (GLfloat) - 0.073162, (GLfloat) - 0.304029,
+ (GLfloat) - 0.946548, (GLfloat) - 0.068965, (GLfloat) - 0.315105,
+ (GLfloat) - 0.982944, (GLfloat) 0.135802, (GLfloat) 0.124011,
+ (GLfloat) - 0.982944, (GLfloat) 0.124011, (GLfloat) 0.135802,
+ (GLfloat) - 0.993006, (GLfloat) 0.043834, (GLfloat) 0.109621,
+ (GLfloat) - 0.992607, (GLfloat) 0.039656, (GLfloat) 0.114709,
+ (GLfloat) - 0.998998, (GLfloat) 0.030163, (GLfloat) 0.033079,
+ (GLfloat) - 0.998998, (GLfloat) 0.033079, (GLfloat) 0.030163,
+ (GLfloat) - 0.993006, (GLfloat) 0.109621, (GLfloat) 0.043834,
+ (GLfloat) - 0.992607, (GLfloat) 0.114709, (GLfloat) 0.039656,
+ (GLfloat) - 0.982944, (GLfloat) - 0.124011, (GLfloat) 0.135803,
+ (GLfloat) - 0.982944, (GLfloat) - 0.135802, (GLfloat) 0.124011,
+ (GLfloat) - 0.993006, (GLfloat) - 0.109621, (GLfloat) 0.043834,
+ (GLfloat) - 0.992607, (GLfloat) - 0.114709, (GLfloat) 0.039656,
+ (GLfloat) - 0.998998, (GLfloat) - 0.033079, (GLfloat) 0.030163,
+ (GLfloat) - 0.998998, (GLfloat) - 0.030163, (GLfloat) 0.033079,
+ (GLfloat) - 0.993006, (GLfloat) - 0.043834, (GLfloat) 0.109621,
+ (GLfloat) - 0.992607, (GLfloat) - 0.039656, (GLfloat) 0.114709,
+ (GLfloat) - 0.982944, (GLfloat) - 0.135802, (GLfloat) - 0.124011,
+ (GLfloat) - 0.982944, (GLfloat) - 0.124011, (GLfloat) - 0.135802,
+ (GLfloat) - 0.993006, (GLfloat) - 0.043834, (GLfloat) - 0.109621,
+ (GLfloat) - 0.992607, (GLfloat) - 0.039656, (GLfloat) - 0.114709,
+ (GLfloat) - 0.998998, (GLfloat) - 0.030163, (GLfloat) - 0.033079,
+ (GLfloat) - 0.998998, (GLfloat) - 0.033079, (GLfloat) - 0.030163,
+ (GLfloat) - 0.993006, (GLfloat) - 0.109621, (GLfloat) - 0.043834,
+ (GLfloat) - 0.992607, (GLfloat) - 0.114709, (GLfloat) - 0.039656,
+ (GLfloat) - 0.982944, (GLfloat) 0.124011, (GLfloat) - 0.135802,
+ (GLfloat) - 0.982944, (GLfloat) 0.135802, (GLfloat) - 0.124011,
+ (GLfloat) - 0.993006, (GLfloat) 0.109621, (GLfloat) - 0.043834,
+ (GLfloat) - 0.992607, (GLfloat) 0.114709, (GLfloat) - 0.039656,
+ (GLfloat) - 0.998998, (GLfloat) 0.033079, (GLfloat) - 0.030163,
+ (GLfloat) - 0.998998, (GLfloat) 0.030163, (GLfloat) - 0.033079,
+ (GLfloat) - 0.993006, (GLfloat) 0.043834, (GLfloat) - 0.109621,
+ (GLfloat) - 0.992607, (GLfloat) 0.039656, (GLfloat) - 0.114709,
+ (GLfloat) 0.642600, (GLfloat) 0.650149, (GLfloat) - 0.405429,
+ (GLfloat) 0.629315, (GLfloat) 0.651735, (GLfloat) - 0.423326,
+ (GLfloat) 0.650102, (GLfloat) 0.622930, (GLfloat) - 0.435116,
+ (GLfloat) 0.644794, (GLfloat) 0.639958, (GLfloat) - 0.417963,
+ (GLfloat) 0.686498, (GLfloat) 0.714292, (GLfloat) - 0.136042,
+ (GLfloat) 0.690339, (GLfloat) 0.711978, (GLfloat) - 0.128528,
+ (GLfloat) 0.670965, (GLfloat) 0.730702, (GLfloat) - 0.126017,
+ (GLfloat) 0.667564, (GLfloat) 0.732887, (GLfloat) - 0.131284,
+ (GLfloat) 0.646461, (GLfloat) 0.595725, (GLfloat) - 0.476656,
+ (GLfloat) 0.646365, (GLfloat) 0.610461, (GLfloat) - 0.457766,
+ (GLfloat) 0.713253, (GLfloat) 0.686364, (GLfloat) - 0.142034,
+ (GLfloat) 0.714947, (GLfloat) 0.683066, (GLfloat) - 0.149235,
+ (GLfloat) 0.700923, (GLfloat) 0.700421, (GLfloat) - 0.134601,
+ (GLfloat) 0.703355, (GLfloat) 0.696368, (GLfloat) - 0.142698,
+ (GLfloat) 0.650658, (GLfloat) 0.606520, (GLfloat) - 0.456922,
+ (GLfloat) 0.648063, (GLfloat) 0.624636, (GLfloat) - 0.435712,
+ (GLfloat) 0.646461, (GLfloat) 0.595725, (GLfloat) 0.476655,
+ (GLfloat) 0.646365, (GLfloat) 0.610461, (GLfloat) 0.457766,
+ (GLfloat) 0.648063, (GLfloat) 0.624636, (GLfloat) 0.435712,
+ (GLfloat) 0.650658, (GLfloat) 0.606520, (GLfloat) 0.456922,
+ (GLfloat) 0.700923, (GLfloat) 0.700421, (GLfloat) 0.134601,
+ (GLfloat) 0.703355, (GLfloat) 0.696368, (GLfloat) 0.142698,
+ (GLfloat) 0.714947, (GLfloat) 0.683066, (GLfloat) 0.149235,
+ (GLfloat) 0.713253, (GLfloat) 0.686364, (GLfloat) 0.142034,
+ (GLfloat) 0.642600, (GLfloat) 0.650149, (GLfloat) 0.405428,
+ (GLfloat) 0.629314, (GLfloat) 0.651735, (GLfloat) 0.423326,
+ (GLfloat) 0.667564, (GLfloat) 0.732887, (GLfloat) 0.131284,
+ (GLfloat) 0.670965, (GLfloat) 0.730702, (GLfloat) 0.126017,
+ (GLfloat) 0.686498, (GLfloat) 0.714292, (GLfloat) 0.136042,
+ (GLfloat) 0.690339, (GLfloat) 0.711978, (GLfloat) 0.128528,
+ (GLfloat) 0.650102, (GLfloat) 0.622930, (GLfloat) 0.435116,
+ (GLfloat) 0.644795, (GLfloat) 0.639958, (GLfloat) 0.417963,
+ (GLfloat) - 0.056496, (GLfloat) - 0.528883, (GLfloat) - 0.846813,
+ (GLfloat) - 0.064290, (GLfloat) - 0.519887, (GLfloat) - 0.851812,
+ (GLfloat) - 0.173805, (GLfloat) - 0.513816, (GLfloat) - 0.840110,
+ (GLfloat) - 0.175837, (GLfloat) - 0.508498, (GLfloat) - 0.842918,
+ (GLfloat) 0.089052, (GLfloat) - 0.185853, (GLfloat) - 0.978534,
+ (GLfloat) 0.093599, (GLfloat) - 0.208853, (GLfloat) - 0.973458,
+ (GLfloat) 0.164361, (GLfloat) - 0.176843, (GLfloat) - 0.970418,
+ (GLfloat) 0.176320, (GLfloat) - 0.196482, (GLfloat) - 0.964524,
+ (GLfloat) - 0.389065, (GLfloat) - 0.390805, (GLfloat) - 0.834206,
+ (GLfloat) - 0.391186, (GLfloat) - 0.409817, (GLfloat) - 0.824029,
+ (GLfloat) - 0.093477, (GLfloat) - 0.154476, (GLfloat) - 0.983565,
+ (GLfloat) - 0.093921, (GLfloat) - 0.156341, (GLfloat) - 0.983228,
+ (GLfloat) 0.000626, (GLfloat) - 0.183607, (GLfloat) - 0.983000,
+ (GLfloat) - 0.000487, (GLfloat) - 0.201385, (GLfloat) - 0.979512,
+ (GLfloat) - 0.285892, (GLfloat) - 0.471460, (GLfloat) - 0.834261,
+ (GLfloat) - 0.285514, (GLfloat) - 0.475831, (GLfloat) - 0.831905,
+ (GLfloat) 0.435732, (GLfloat) 0.380700, (GLfloat) - 0.815601,
+ (GLfloat) 0.428982, (GLfloat) 0.354155, (GLfloat) - 0.830993,
+ (GLfloat) 0.473609, (GLfloat) 0.392091, (GLfloat) - 0.788643,
+ (GLfloat) 0.469979, (GLfloat) 0.356952, (GLfloat) - 0.807283,
+ (GLfloat) 0.244505, (GLfloat) 0.073495, (GLfloat) - 0.966859,
+ (GLfloat) 0.248781, (GLfloat) 0.107298, (GLfloat) - 0.962598,
+ (GLfloat) 0.172068, (GLfloat) 0.089497, (GLfloat) - 0.981011,
+ (GLfloat) 0.177919, (GLfloat) 0.109952, (GLfloat) - 0.977883,
+ (GLfloat) 0.511512, (GLfloat) 0.425325, (GLfloat) - 0.746629,
+ (GLfloat) 0.520411, (GLfloat) 0.400470, (GLfloat) - 0.754185,
+ (GLfloat) 0.360534, (GLfloat) 0.109169, (GLfloat) - 0.926336,
+ (GLfloat) 0.349374, (GLfloat) 0.135180, (GLfloat) - 0.927181,
+ (GLfloat) 0.311593, (GLfloat) 0.086000, (GLfloat) - 0.946316,
+ (GLfloat) 0.308233, (GLfloat) 0.120081, (GLfloat) - 0.943702,
+ (GLfloat) 0.500412, (GLfloat) 0.409092, (GLfloat) - 0.763041,
+ (GLfloat) 0.503536, (GLfloat) 0.376115, (GLfloat) - 0.777811,
+ (GLfloat) - 0.064290, (GLfloat) - 0.519886, (GLfloat) 0.851813,
+ (GLfloat) - 0.056496, (GLfloat) - 0.528883, (GLfloat) 0.846813,
+ (GLfloat) 0.164361, (GLfloat) - 0.176843, (GLfloat) 0.970418,
+ (GLfloat) 0.176319, (GLfloat) - 0.196482, (GLfloat) 0.964524,
+ (GLfloat) 0.093599, (GLfloat) - 0.208853, (GLfloat) 0.973458,
+ (GLfloat) 0.089052, (GLfloat) - 0.185852, (GLfloat) 0.978534,
+ (GLfloat) - 0.173805, (GLfloat) - 0.513817, (GLfloat) 0.840110,
+ (GLfloat) - 0.175837, (GLfloat) - 0.508498, (GLfloat) 0.842918,
+ (GLfloat) 0.511512, (GLfloat) 0.425325, (GLfloat) 0.746629,
+ (GLfloat) 0.520411, (GLfloat) 0.400470, (GLfloat) 0.754186,
+ (GLfloat) 0.503536, (GLfloat) 0.376115, (GLfloat) 0.777810,
+ (GLfloat) 0.500412, (GLfloat) 0.409092, (GLfloat) 0.763041,
+ (GLfloat) 0.311592, (GLfloat) 0.086000, (GLfloat) 0.946316,
+ (GLfloat) 0.308233, (GLfloat) 0.120080, (GLfloat) 0.943702,
+ (GLfloat) 0.349373, (GLfloat) 0.135180, (GLfloat) 0.927181,
+ (GLfloat) 0.360533, (GLfloat) 0.109169, (GLfloat) 0.926336,
+ (GLfloat) 0.428982, (GLfloat) 0.354155, (GLfloat) 0.830993,
+ (GLfloat) 0.435731, (GLfloat) 0.380700, (GLfloat) 0.815602,
+ (GLfloat) 0.172068, (GLfloat) 0.089497, (GLfloat) 0.981011,
+ (GLfloat) 0.177918, (GLfloat) 0.109951, (GLfloat) 0.977883,
+ (GLfloat) 0.248781, (GLfloat) 0.107298, (GLfloat) 0.962598,
+ (GLfloat) 0.244505, (GLfloat) 0.073494, (GLfloat) 0.966859,
+ (GLfloat) 0.473609, (GLfloat) 0.392091, (GLfloat) 0.788643,
+ (GLfloat) 0.469979, (GLfloat) 0.356951, (GLfloat) 0.807283,
+ (GLfloat) - 0.389065, (GLfloat) - 0.390805, (GLfloat) 0.834206,
+ (GLfloat) - 0.391186, (GLfloat) - 0.409816, (GLfloat) 0.824029,
+ (GLfloat) - 0.285514, (GLfloat) - 0.475832, (GLfloat) 0.831905,
+ (GLfloat) - 0.285892, (GLfloat) - 0.471460, (GLfloat) 0.834261,
+ (GLfloat) 0.000626, (GLfloat) - 0.183607, (GLfloat) 0.983000,
+ (GLfloat) - 0.000486, (GLfloat) - 0.201385, (GLfloat) 0.979512,
+ (GLfloat) - 0.093921, (GLfloat) - 0.156340, (GLfloat) 0.983228,
+ (GLfloat) - 0.093477, (GLfloat) - 0.154476, (GLfloat) 0.983565,
+ (GLfloat) - 0.306817, (GLfloat) - 0.816247, (GLfloat) - 0.489494,
+ (GLfloat) - 0.306526, (GLfloat) - 0.816474, (GLfloat) - 0.489298,
+ (GLfloat) - 0.401007, (GLfloat) - 0.903402, (GLfloat) - 0.151850,
+ (GLfloat) - 0.400054, (GLfloat) - 0.903928, (GLfloat) - 0.151230,
+ (GLfloat) - 0.539523, (GLfloat) - 0.829080, (GLfloat) - 0.146769,
+ (GLfloat) - 0.536423, (GLfloat) - 0.831619, (GLfloat) - 0.143741,
+ (GLfloat) - 0.439125, (GLfloat) - 0.764873, (GLfloat) - 0.471315,
+ (GLfloat) - 0.443186, (GLfloat) - 0.759550, (GLfloat) - 0.476099,
+ (GLfloat) - 0.306817, (GLfloat) - 0.816247, (GLfloat) 0.489494,
+ (GLfloat) - 0.306526, (GLfloat) - 0.816474, (GLfloat) 0.489298,
+ (GLfloat) - 0.443186, (GLfloat) - 0.759550, (GLfloat) 0.476099,
+ (GLfloat) - 0.439125, (GLfloat) - 0.764873, (GLfloat) 0.471315,
+ (GLfloat) - 0.539523, (GLfloat) - 0.829080, (GLfloat) 0.146769,
+ (GLfloat) - 0.536423, (GLfloat) - 0.831619, (GLfloat) 0.143741,
+ (GLfloat) - 0.400054, (GLfloat) - 0.903928, (GLfloat) 0.151230,
+ (GLfloat) - 0.401007, (GLfloat) - 0.903402, (GLfloat) 0.151850,
+ (GLfloat) - 0.663042, (GLfloat) - 0.578347, (GLfloat) 0.475278,
+ (GLfloat) - 0.658558, (GLfloat) - 0.599157, (GLfloat) 0.455315,
+ (GLfloat) - 0.758279, (GLfloat) - 0.634927, (GLfloat) 0.147920,
+ (GLfloat) - 0.753882, (GLfloat) - 0.642163, (GLfloat) 0.138885,
+ (GLfloat) - 0.655091, (GLfloat) - 0.742671, (GLfloat) 0.138907,
+ (GLfloat) - 0.649182, (GLfloat) - 0.746545, (GLfloat) 0.145716,
+ (GLfloat) - 0.547340, (GLfloat) - 0.690985, (GLfloat) 0.472185,
+ (GLfloat) - 0.565022, (GLfloat) - 0.687356, (GLfloat) 0.456390,
+ (GLfloat) - 0.658558, (GLfloat) - 0.599157, (GLfloat) - 0.455315,
+ (GLfloat) - 0.663042, (GLfloat) - 0.578347, (GLfloat) - 0.475278,
+ (GLfloat) - 0.565022, (GLfloat) - 0.687356, (GLfloat) - 0.456390,
+ (GLfloat) - 0.547340, (GLfloat) - 0.690985, (GLfloat) - 0.472185,
+ (GLfloat) - 0.655091, (GLfloat) - 0.742671, (GLfloat) - 0.138907,
+ (GLfloat) - 0.649182, (GLfloat) - 0.746545, (GLfloat) - 0.145716,
+ (GLfloat) - 0.758279, (GLfloat) - 0.634927, (GLfloat) - 0.147920,
+ (GLfloat) - 0.753882, (GLfloat) - 0.642163, (GLfloat) - 0.138885,
+ (GLfloat) - 0.531808, (GLfloat) - 0.030854, (GLfloat) - 0.846303,
+ (GLfloat) - 0.547325, (GLfloat) - 0.021478, (GLfloat) - 0.836644,
+ (GLfloat) - 0.214400, (GLfloat) 0.129290, (GLfloat) - 0.968151,
+ (GLfloat) - 0.232550, (GLfloat) 0.136923, (GLfloat) - 0.962898,
+ (GLfloat) - 0.234685, (GLfloat) 0.079911, (GLfloat) - 0.968781,
+ (GLfloat) - 0.210181, (GLfloat) 0.075599, (GLfloat) - 0.974735,
+ (GLfloat) - 0.528653, (GLfloat) - 0.081793, (GLfloat) - 0.844888,
+ (GLfloat) - 0.538319, (GLfloat) - 0.109397, (GLfloat) - 0.835610,
+ (GLfloat) 0.375279, (GLfloat) 0.445115, (GLfloat) - 0.813043,
+ (GLfloat) 0.363044, (GLfloat) 0.448595, (GLfloat) - 0.816677,
+ (GLfloat) 0.362957, (GLfloat) 0.428038, (GLfloat) - 0.827675,
+ (GLfloat) 0.375627, (GLfloat) 0.426947, (GLfloat) - 0.822570,
+ (GLfloat) 0.060176, (GLfloat) 0.247143, (GLfloat) - 0.967109,
+ (GLfloat) 0.080139, (GLfloat) 0.245230, (GLfloat) - 0.966147,
+ (GLfloat) 0.077981, (GLfloat) 0.282100, (GLfloat) - 0.956211,
+ (GLfloat) 0.061364, (GLfloat) 0.287374, (GLfloat) - 0.955851,
+ (GLfloat) 0.394264, (GLfloat) 0.386154, (GLfloat) - 0.833931,
+ (GLfloat) 0.391969, (GLfloat) 0.379827, (GLfloat) - 0.837909,
+ (GLfloat) 0.108284, (GLfloat) 0.149184, (GLfloat) - 0.982863,
+ (GLfloat) 0.106809, (GLfloat) 0.145488, (GLfloat) - 0.983578,
+ (GLfloat) 0.087165, (GLfloat) 0.199761, (GLfloat) - 0.975960,
+ (GLfloat) 0.069423, (GLfloat) 0.198484, (GLfloat) - 0.977642,
+ (GLfloat) 0.378360, (GLfloat) 0.405238, (GLfloat) - 0.832242,
+ (GLfloat) 0.371158, (GLfloat) 0.404730, (GLfloat) - 0.835725,
+ (GLfloat) - 0.478648, (GLfloat) - 0.265386, (GLfloat) - 0.836939,
+ (GLfloat) - 0.486707, (GLfloat) - 0.296995, (GLfloat) - 0.821529,
+ (GLfloat) - 0.514523, (GLfloat) - 0.162550, (GLfloat) - 0.841929,
+ (GLfloat) - 0.525278, (GLfloat) - 0.195128, (GLfloat) - 0.828256,
+ (GLfloat) - 0.217558, (GLfloat) - 0.004195, (GLfloat) - 0.976038,
+ (GLfloat) - 0.206190, (GLfloat) 0.022881, (GLfloat) - 0.978244,
+ (GLfloat) - 0.182077, (GLfloat) - 0.080752, (GLfloat) - 0.979963,
+ (GLfloat) - 0.175153, (GLfloat) - 0.061621, (GLfloat) - 0.982611,
+ (GLfloat) - 0.843975, (GLfloat) - 0.195207, (GLfloat) - 0.499600,
+ (GLfloat) - 0.842535, (GLfloat) - 0.181717, (GLfloat) - 0.507064,
+ (GLfloat) - 0.827895, (GLfloat) - 0.272019, (GLfloat) - 0.490506,
+ (GLfloat) - 0.826118, (GLfloat) - 0.254451, (GLfloat) - 0.502777,
+ (GLfloat) - 0.933235, (GLfloat) - 0.321752, (GLfloat) - 0.159836,
+ (GLfloat) - 0.932223, (GLfloat) - 0.327025, (GLfloat) - 0.154968,
+ (GLfloat) - 0.954881, (GLfloat) - 0.249025, (GLfloat) - 0.161829,
+ (GLfloat) - 0.954307, (GLfloat) - 0.253099, (GLfloat) - 0.158871,
+ (GLfloat) - 0.754729, (GLfloat) - 0.466616, (GLfloat) - 0.461144,
+ (GLfloat) - 0.755670, (GLfloat) - 0.441894, (GLfloat) - 0.483419,
+ (GLfloat) - 0.851851, (GLfloat) - 0.501342, (GLfloat) - 0.151677,
+ (GLfloat) - 0.848780, (GLfloat) - 0.509248, (GLfloat) - 0.142264,
+ (GLfloat) - 0.902458, (GLfloat) - 0.401405, (GLfloat) - 0.156347,
+ (GLfloat) - 0.900638, (GLfloat) - 0.408254, (GLfloat) - 0.148931,
+ (GLfloat) - 0.801108, (GLfloat) - 0.337187, (GLfloat) - 0.494500,
+ (GLfloat) - 0.802422, (GLfloat) - 0.359565, (GLfloat) - 0.476269,
+ (GLfloat) - 0.754729, (GLfloat) - 0.466616, (GLfloat) 0.461144,
+ (GLfloat) - 0.755670, (GLfloat) - 0.441893, (GLfloat) 0.483419,
+ (GLfloat) - 0.802422, (GLfloat) - 0.359565, (GLfloat) 0.476269,
+ (GLfloat) - 0.801108, (GLfloat) - 0.337187, (GLfloat) 0.494500,
+ (GLfloat) - 0.902457, (GLfloat) - 0.401405, (GLfloat) 0.156348,
+ (GLfloat) - 0.900638, (GLfloat) - 0.408254, (GLfloat) 0.148931,
+ (GLfloat) - 0.848780, (GLfloat) - 0.509248, (GLfloat) 0.142264,
+ (GLfloat) - 0.851851, (GLfloat) - 0.501342, (GLfloat) 0.151677,
+ (GLfloat) - 0.842535, (GLfloat) - 0.181718, (GLfloat) 0.507064,
+ (GLfloat) - 0.843975, (GLfloat) - 0.195207, (GLfloat) 0.499600,
+ (GLfloat) - 0.954881, (GLfloat) - 0.249025, (GLfloat) 0.161829,
+ (GLfloat) - 0.954306, (GLfloat) - 0.253099, (GLfloat) 0.158871,
+ (GLfloat) - 0.932223, (GLfloat) - 0.327025, (GLfloat) 0.154968,
+ (GLfloat) - 0.933235, (GLfloat) - 0.321752, (GLfloat) 0.159836,
+ (GLfloat) - 0.827895, (GLfloat) - 0.272019, (GLfloat) 0.490506,
+ (GLfloat) - 0.826118, (GLfloat) - 0.254451, (GLfloat) 0.502777,
+ (GLfloat) - 0.547325, (GLfloat) - 0.021478, (GLfloat) 0.836644,
+ (GLfloat) - 0.531808, (GLfloat) - 0.030854, (GLfloat) 0.846303,
+ (GLfloat) - 0.538320, (GLfloat) - 0.109397, (GLfloat) 0.835610,
+ (GLfloat) - 0.528653, (GLfloat) - 0.081793, (GLfloat) 0.844888,
+ (GLfloat) - 0.210181, (GLfloat) 0.075599, (GLfloat) 0.974735,
+ (GLfloat) - 0.234685, (GLfloat) 0.079911, (GLfloat) 0.968781,
+ (GLfloat) - 0.214400, (GLfloat) 0.129290, (GLfloat) 0.968151,
+ (GLfloat) - 0.232550, (GLfloat) 0.136923, (GLfloat) 0.962898,
+ (GLfloat) - 0.486707, (GLfloat) - 0.296995, (GLfloat) 0.821529,
+ (GLfloat) - 0.478647, (GLfloat) - 0.265386, (GLfloat) 0.836939,
+ (GLfloat) - 0.182076, (GLfloat) - 0.080752, (GLfloat) 0.979963,
+ (GLfloat) - 0.175152, (GLfloat) - 0.061621, (GLfloat) 0.982611,
+ (GLfloat) - 0.206190, (GLfloat) 0.022882, (GLfloat) 0.978244,
+ (GLfloat) - 0.217558, (GLfloat) - 0.004194, (GLfloat) 0.976038,
+ (GLfloat) - 0.514523, (GLfloat) - 0.162550, (GLfloat) 0.841928,
+ (GLfloat) - 0.525277, (GLfloat) - 0.195127, (GLfloat) 0.828257,
+ (GLfloat) 0.394264, (GLfloat) 0.386154, (GLfloat) 0.833931,
+ (GLfloat) 0.391969, (GLfloat) 0.379827, (GLfloat) 0.837909,
+ (GLfloat) 0.378360, (GLfloat) 0.405238, (GLfloat) 0.832241,
+ (GLfloat) 0.371157, (GLfloat) 0.404730, (GLfloat) 0.835725,
+ (GLfloat) 0.069422, (GLfloat) 0.198484, (GLfloat) 0.977642,
+ (GLfloat) 0.087165, (GLfloat) 0.199761, (GLfloat) 0.975960,
+ (GLfloat) 0.106809, (GLfloat) 0.145488, (GLfloat) 0.983578,
+ (GLfloat) 0.108284, (GLfloat) 0.149183, (GLfloat) 0.982863,
+ (GLfloat) 0.375279, (GLfloat) 0.445115, (GLfloat) 0.813043,
+ (GLfloat) 0.363044, (GLfloat) 0.448594, (GLfloat) 0.816678,
+ (GLfloat) 0.061364, (GLfloat) 0.287374, (GLfloat) 0.955851,
+ (GLfloat) 0.077981, (GLfloat) 0.282099, (GLfloat) 0.956211,
+ (GLfloat) 0.060176, (GLfloat) 0.247143, (GLfloat) 0.967109,
+ (GLfloat) 0.080138, (GLfloat) 0.245229, (GLfloat) 0.966147,
+ (GLfloat) 0.375627, (GLfloat) 0.426947, (GLfloat) 0.822570,
+ (GLfloat) 0.362957, (GLfloat) 0.428038, (GLfloat) 0.827675,
+ (GLfloat) 0.646717, (GLfloat) 0.598054, (GLfloat) 0.473381,
+ (GLfloat) 0.647128, (GLfloat) 0.592930, (GLfloat) 0.479227,
+ (GLfloat) 0.644233, (GLfloat) 0.592287, (GLfloat) 0.483900,
+ (GLfloat) 0.644394, (GLfloat) 0.596473, (GLfloat) 0.478515,
+ (GLfloat) 0.743754, (GLfloat) 0.650774, (GLfloat) 0.152720,
+ (GLfloat) 0.743300, (GLfloat) 0.651663, (GLfloat) 0.151130,
+ (GLfloat) 0.748383, (GLfloat) 0.646124, (GLfloat) 0.149823,
+ (GLfloat) 0.749100, (GLfloat) 0.644879, (GLfloat) 0.151594,
+ (GLfloat) 0.643063, (GLfloat) 0.599196, (GLfloat) 0.476900,
+ (GLfloat) 0.642570, (GLfloat) 0.593487, (GLfloat) 0.484641,
+ (GLfloat) 0.726590, (GLfloat) 0.670731, (GLfloat) 0.148951,
+ (GLfloat) 0.727257, (GLfloat) 0.669291, (GLfloat) 0.152139,
+ (GLfloat) 0.736367, (GLfloat) 0.659214, (GLfloat) 0.152315,
+ (GLfloat) 0.736367, (GLfloat) 0.659216, (GLfloat) 0.152312,
+ (GLfloat) 0.642386, (GLfloat) 0.594552, (GLfloat) 0.483578,
+ (GLfloat) 0.642311, (GLfloat) 0.593780, (GLfloat) 0.484626,
+ (GLfloat) 0.642570, (GLfloat) 0.593487, (GLfloat) - 0.484641,
+ (GLfloat) 0.643063, (GLfloat) 0.599196, (GLfloat) - 0.476900,
+ (GLfloat) 0.642386, (GLfloat) 0.594552, (GLfloat) - 0.483577,
+ (GLfloat) 0.642311, (GLfloat) 0.593780, (GLfloat) - 0.484626,
+ (GLfloat) 0.736367, (GLfloat) 0.659216, (GLfloat) - 0.152312,
+ (GLfloat) 0.736367, (GLfloat) 0.659214, (GLfloat) - 0.152315,
+ (GLfloat) 0.726590, (GLfloat) 0.670731, (GLfloat) - 0.148951,
+ (GLfloat) 0.727257, (GLfloat) 0.669291, (GLfloat) - 0.152139,
+ (GLfloat) 0.646717, (GLfloat) 0.598054, (GLfloat) - 0.473381,
+ (GLfloat) 0.647128, (GLfloat) 0.592931, (GLfloat) - 0.479227,
+ (GLfloat) 0.749100, (GLfloat) 0.644879, (GLfloat) - 0.151594,
+ (GLfloat) 0.748383, (GLfloat) 0.646124, (GLfloat) - 0.149823,
+ (GLfloat) 0.743754, (GLfloat) 0.650774, (GLfloat) - 0.152720,
+ (GLfloat) 0.743300, (GLfloat) 0.651663, (GLfloat) - 0.151130,
+ (GLfloat) 0.644394, (GLfloat) 0.596473, (GLfloat) - 0.478515,
+ (GLfloat) 0.644234, (GLfloat) 0.592287, (GLfloat) - 0.483900,
+ (GLfloat) 0.648818, (GLfloat) 0.595244, (GLfloat) 0.474046,
+ (GLfloat) 0.647885, (GLfloat) 0.598960, (GLfloat) 0.470630,
+ (GLfloat) 0.751896, (GLfloat) 0.641953, (GLfloat) 0.150159,
+ (GLfloat) 0.751280, (GLfloat) 0.642895, (GLfloat) 0.149213,
+ (GLfloat) 0.855755, (GLfloat) 0.491872, (GLfloat) 0.160454,
+ (GLfloat) 0.854316, (GLfloat) 0.494902, (GLfloat) 0.158798,
+ (GLfloat) 0.746074, (GLfloat) 0.437172, (GLfloat) 0.502249,
+ (GLfloat) 0.745147, (GLfloat) 0.441097, (GLfloat) 0.500189,
+ (GLfloat) 0.647885, (GLfloat) 0.598960, (GLfloat) - 0.470630,
+ (GLfloat) 0.648818, (GLfloat) 0.595244, (GLfloat) - 0.474046,
+ (GLfloat) 0.746074, (GLfloat) 0.437172, (GLfloat) - 0.502249,
+ (GLfloat) 0.745147, (GLfloat) 0.441097, (GLfloat) - 0.500189,
+ (GLfloat) 0.854316, (GLfloat) 0.494902, (GLfloat) - 0.158798,
+ (GLfloat) 0.855755, (GLfloat) 0.491872, (GLfloat) - 0.160454,
+ (GLfloat) 0.751896, (GLfloat) 0.641953, (GLfloat) - 0.150159,
+ (GLfloat) 0.751280, (GLfloat) 0.642895, (GLfloat) - 0.149213,
+ (GLfloat) 0.516361, (GLfloat) - 0.831259, (GLfloat) - 0.205866,
+ (GLfloat) 0.500398, (GLfloat) - 0.847281, (GLfloat) - 0.178091,
+ (GLfloat) 0.549353, (GLfloat) - 0.832739, (GLfloat) - 0.068965,
+ (GLfloat) 0.539508, (GLfloat) - 0.838796, (GLfloat) - 0.073163,
+ (GLfloat) 0.955872, (GLfloat) - 0.254974, (GLfloat) - 0.145934,
+ (GLfloat) 0.962750, (GLfloat) - 0.217125, (GLfloat) - 0.161151,
+ (GLfloat) 0.832302, (GLfloat) - 0.349186, (GLfloat) - 0.430515,
+ (GLfloat) 0.834893, (GLfloat) - 0.309370, (GLfloat) - 0.455242,
+ (GLfloat) 0.500398, (GLfloat) - 0.847281, (GLfloat) 0.178091,
+ (GLfloat) 0.516361, (GLfloat) - 0.831259, (GLfloat) 0.205867,
+ (GLfloat) 0.832302, (GLfloat) - 0.349186, (GLfloat) 0.430515,
+ (GLfloat) 0.834893, (GLfloat) - 0.309369, (GLfloat) 0.455242,
+ (GLfloat) 0.962750, (GLfloat) - 0.217125, (GLfloat) 0.161151,
+ (GLfloat) 0.955872, (GLfloat) - 0.254973, (GLfloat) 0.145934,
+ (GLfloat) 0.539508, (GLfloat) - 0.838796, (GLfloat) 0.073163,
+ (GLfloat) 0.549353, (GLfloat) - 0.832739, (GLfloat) 0.068965,
+ (GLfloat) 0.365166, (GLfloat) 0.464177, (GLfloat) - 0.806966,
+ (GLfloat) 0.373210, (GLfloat) 0.459657, (GLfloat) - 0.805872,
+ (GLfloat) 0.064151, (GLfloat) 0.318725, (GLfloat) - 0.945674,
+ (GLfloat) 0.075117, (GLfloat) 0.311589, (GLfloat) - 0.947243,
+ (GLfloat) 0.127864, (GLfloat) 0.159455, (GLfloat) - 0.978890,
+ (GLfloat) 0.122956, (GLfloat) 0.165169, (GLfloat) - 0.978571,
+ (GLfloat) 0.446081, (GLfloat) 0.299065, (GLfloat) - 0.843547,
+ (GLfloat) 0.442539, (GLfloat) 0.302925, (GLfloat) - 0.844035,
+ (GLfloat) - 0.541197, (GLfloat) 0.047754, (GLfloat) - 0.839539,
+ (GLfloat) - 0.545743, (GLfloat) 0.029212, (GLfloat) - 0.837443,
+ (GLfloat) - 0.504199, (GLfloat) - 0.116458, (GLfloat) - 0.855699,
+ (GLfloat) - 0.503751, (GLfloat) - 0.117103, (GLfloat) - 0.855875,
+ (GLfloat) - 0.180218, (GLfloat) 0.028848, (GLfloat) - 0.983203,
+ (GLfloat) - 0.179757, (GLfloat) 0.028254, (GLfloat) - 0.983305,
+ (GLfloat) - 0.230218, (GLfloat) 0.184662, (GLfloat) - 0.955458,
+ (GLfloat) - 0.218138, (GLfloat) 0.174858, (GLfloat) - 0.960125,
+ (GLfloat) 0.043553, (GLfloat) - 0.957947, (GLfloat) - 0.283621,
+ (GLfloat) 0.073317, (GLfloat) - 0.961717, (GLfloat) - 0.264055,
+ (GLfloat) 0.178370, (GLfloat) - 0.932145, (GLfloat) - 0.315104,
+ (GLfloat) 0.175170, (GLfloat) - 0.936420, (GLfloat) - 0.304029,
+ (GLfloat) 0.021724, (GLfloat) - 0.600335, (GLfloat) - 0.799453,
+ (GLfloat) - 0.006371, (GLfloat) - 0.568607, (GLfloat) - 0.822585,
+ (GLfloat) - 0.212402, (GLfloat) - 0.727671, (GLfloat) - 0.652212,
+ (GLfloat) - 0.248701, (GLfloat) - 0.700487, (GLfloat) - 0.668929,
+ (GLfloat) 0.430757, (GLfloat) - 0.866899, (GLfloat) - 0.250869,
+ (GLfloat) 0.427975, (GLfloat) - 0.857309, (GLfloat) - 0.286110,
+ (GLfloat) 0.561354, (GLfloat) - 0.442015, (GLfloat) - 0.699646,
+ (GLfloat) 0.571558, (GLfloat) - 0.412112, (GLfloat) - 0.709567,
+ (GLfloat) 0.286734, (GLfloat) - 0.470609, (GLfloat) - 0.834453,
+ (GLfloat) 0.281923, (GLfloat) - 0.498471, (GLfloat) - 0.819784,
+ (GLfloat) 0.316508, (GLfloat) - 0.898548, (GLfloat) - 0.304029,
+ (GLfloat) 0.311600, (GLfloat) - 0.896446, (GLfloat) - 0.315104,
+ (GLfloat) - 0.857077, (GLfloat) - 0.113037, (GLfloat) - 0.502635,
+ (GLfloat) - 0.855920, (GLfloat) - 0.100677, (GLfloat) - 0.507214,
+ (GLfloat) - 0.973550, (GLfloat) - 0.162756, (GLfloat) - 0.160346,
+ (GLfloat) - 0.972585, (GLfloat) - 0.166359, (GLfloat) - 0.162491,
+ (GLfloat) - 0.942363, (GLfloat) - 0.290210, (GLfloat) - 0.166522,
+ (GLfloat) - 0.940343, (GLfloat) - 0.298398, (GLfloat) - 0.163441,
+ (GLfloat) - 0.819387, (GLfloat) - 0.257298, (GLfloat) - 0.512252,
+ (GLfloat) - 0.820563, (GLfloat) - 0.245585, (GLfloat) - 0.516105,
+ (GLfloat) - 0.857077, (GLfloat) - 0.113037, (GLfloat) 0.502635,
+ (GLfloat) - 0.855920, (GLfloat) - 0.100677, (GLfloat) 0.507214,
+ (GLfloat) - 0.820564, (GLfloat) - 0.245585, (GLfloat) 0.516104,
+ (GLfloat) - 0.819387, (GLfloat) - 0.257297, (GLfloat) 0.512252,
+ (GLfloat) - 0.942363, (GLfloat) - 0.290210, (GLfloat) 0.166522,
+ (GLfloat) - 0.940343, (GLfloat) - 0.298398, (GLfloat) 0.163441,
+ (GLfloat) - 0.973550, (GLfloat) - 0.162756, (GLfloat) 0.160346,
+ (GLfloat) - 0.972585, (GLfloat) - 0.166359, (GLfloat) 0.162491,
+ (GLfloat) - 0.031552, (GLfloat) - 0.978072, (GLfloat) 0.205866,
+ (GLfloat) - 0.009717, (GLfloat) - 0.983966, (GLfloat) 0.178091,
+ (GLfloat) - 0.059383, (GLfloat) - 0.995850, (GLfloat) 0.068965,
+ (GLfloat) - 0.047830, (GLfloat) - 0.996172, (GLfloat) 0.073163,
+ (GLfloat) - 0.608137, (GLfloat) - 0.782136, (GLfloat) 0.135767,
+ (GLfloat) - 0.575039, (GLfloat) - 0.805344, (GLfloat) 0.144053,
+ (GLfloat) - 0.440882, (GLfloat) - 0.803158, (GLfloat) 0.400699,
+ (GLfloat) - 0.474682, (GLfloat) - 0.782654, (GLfloat) 0.402654,
+ (GLfloat) - 0.009717, (GLfloat) - 0.983966, (GLfloat) - 0.178092,
+ (GLfloat) - 0.031552, (GLfloat) - 0.978072, (GLfloat) - 0.205866,
+ (GLfloat) - 0.474681, (GLfloat) - 0.782654, (GLfloat) - 0.402654,
+ (GLfloat) - 0.440881, (GLfloat) - 0.803159, (GLfloat) - 0.400699,
+ (GLfloat) - 0.608137, (GLfloat) - 0.782136, (GLfloat) - 0.135767,
+ (GLfloat) - 0.575039, (GLfloat) - 0.805344, (GLfloat) - 0.144053,
+ (GLfloat) - 0.047830, (GLfloat) - 0.996172, (GLfloat) - 0.073163,
+ (GLfloat) - 0.059383, (GLfloat) - 0.995850, (GLfloat) - 0.068965,
+ (GLfloat) - 0.545743, (GLfloat) 0.029212, (GLfloat) 0.837443,
+ (GLfloat) - 0.541197, (GLfloat) 0.047754, (GLfloat) 0.839539,
+ (GLfloat) - 0.218137, (GLfloat) 0.174858, (GLfloat) 0.960125,
+ (GLfloat) - 0.230218, (GLfloat) 0.184662, (GLfloat) 0.955458,
+ (GLfloat) - 0.180219, (GLfloat) 0.028850, (GLfloat) 0.983203,
+ (GLfloat) - 0.179757, (GLfloat) 0.028256, (GLfloat) 0.983305,
+ (GLfloat) - 0.503751, (GLfloat) - 0.117102, (GLfloat) 0.855875,
+ (GLfloat) - 0.504199, (GLfloat) - 0.116456, (GLfloat) 0.855699,
+ (GLfloat) 0.373209, (GLfloat) 0.459657, (GLfloat) 0.805872,
+ (GLfloat) 0.365166, (GLfloat) 0.464177, (GLfloat) 0.806966,
+ (GLfloat) 0.446081, (GLfloat) 0.299065, (GLfloat) 0.843547,
+ (GLfloat) 0.442539, (GLfloat) 0.302926, (GLfloat) 0.844035,
+ (GLfloat) 0.122955, (GLfloat) 0.165170, (GLfloat) 0.978571,
+ (GLfloat) 0.127864, (GLfloat) 0.159456, (GLfloat) 0.978889,
+ (GLfloat) 0.064151, (GLfloat) 0.318724, (GLfloat) 0.945674,
+ (GLfloat) 0.075117, (GLfloat) 0.311589, (GLfloat) 0.947243,
+ (GLfloat) 0.430757, (GLfloat) - 0.866899, (GLfloat) 0.250868,
+ (GLfloat) 0.427975, (GLfloat) - 0.857309, (GLfloat) 0.286110,
+ (GLfloat) 0.311600, (GLfloat) - 0.896446, (GLfloat) 0.315104,
+ (GLfloat) 0.316508, (GLfloat) - 0.898548, (GLfloat) 0.304029,
+ (GLfloat) 0.281923, (GLfloat) - 0.498471, (GLfloat) 0.819784,
+ (GLfloat) 0.286734, (GLfloat) - 0.470608, (GLfloat) 0.834453,
+ (GLfloat) 0.561354, (GLfloat) - 0.442014, (GLfloat) 0.699647,
+ (GLfloat) 0.571558, (GLfloat) - 0.412112, (GLfloat) 0.709567,
+ (GLfloat) 0.073318, (GLfloat) - 0.961717, (GLfloat) 0.264055,
+ (GLfloat) 0.043553, (GLfloat) - 0.957947, (GLfloat) 0.283620,
+ (GLfloat) - 0.212402, (GLfloat) - 0.727670, (GLfloat) 0.652213,
+ (GLfloat) - 0.248701, (GLfloat) - 0.700487, (GLfloat) 0.668929,
+ (GLfloat) - 0.006371, (GLfloat) - 0.568606, (GLfloat) 0.822585,
+ (GLfloat) 0.021725, (GLfloat) - 0.600335, (GLfloat) 0.799453,
+ (GLfloat) 0.175170, (GLfloat) - 0.936420, (GLfloat) 0.304028,
+ (GLfloat) 0.178370, (GLfloat) - 0.932145, (GLfloat) 0.315104,
+ (GLfloat) 0.385580, (GLfloat) - 0.914303, (GLfloat) - 0.124011,
+ (GLfloat) 0.374190, (GLfloat) - 0.917355, (GLfloat) - 0.135802,
+ (GLfloat) 0.299349, (GLfloat) - 0.947826, (GLfloat) - 0.109621,
+ (GLfloat) 0.295210, (GLfloat) - 0.948521, (GLfloat) - 0.114709,
+ (GLfloat) 0.287695, (GLfloat) - 0.957151, (GLfloat) - 0.033079,
+ (GLfloat) 0.290512, (GLfloat) - 0.956396, (GLfloat) - 0.030163,
+ (GLfloat) 0.362895, (GLfloat) - 0.930799, (GLfloat) - 0.043834,
+ (GLfloat) 0.367706, (GLfloat) - 0.929096, (GLfloat) - 0.039656,
+ (GLfloat) 0.134619, (GLfloat) - 0.981547, (GLfloat) - 0.135802,
+ (GLfloat) 0.123230, (GLfloat) - 0.984599, (GLfloat) - 0.124011,
+ (GLfloat) 0.151123, (GLfloat) - 0.987543, (GLfloat) - 0.043834,
+ (GLfloat) 0.146105, (GLfloat) - 0.988474, (GLfloat) - 0.039656,
+ (GLfloat) 0.226607, (GLfloat) - 0.973519, (GLfloat) - 0.030163,
+ (GLfloat) 0.229424, (GLfloat) - 0.972764, (GLfloat) - 0.033079,
+ (GLfloat) 0.214669, (GLfloat) - 0.970516, (GLfloat) - 0.109621,
+ (GLfloat) 0.218601, (GLfloat) - 0.969049, (GLfloat) - 0.114709,
+ (GLfloat) 0.123230, (GLfloat) - 0.984599, (GLfloat) 0.124011,
+ (GLfloat) 0.134619, (GLfloat) - 0.981547, (GLfloat) 0.135802,
+ (GLfloat) 0.214669, (GLfloat) - 0.970516, (GLfloat) 0.109621,
+ (GLfloat) 0.218601, (GLfloat) - 0.969049, (GLfloat) 0.114709,
+ (GLfloat) 0.229424, (GLfloat) - 0.972764, (GLfloat) 0.033079,
+ (GLfloat) 0.226607, (GLfloat) - 0.973519, (GLfloat) 0.030163,
+ (GLfloat) 0.151123, (GLfloat) - 0.987543, (GLfloat) 0.043834,
+ (GLfloat) 0.146105, (GLfloat) - 0.988474, (GLfloat) 0.039656,
+ (GLfloat) 0.374190, (GLfloat) - 0.917355, (GLfloat) 0.135803,
+ (GLfloat) 0.385580, (GLfloat) - 0.914303, (GLfloat) 0.124011,
+ (GLfloat) 0.362895, (GLfloat) - 0.930799, (GLfloat) 0.043834,
+ (GLfloat) 0.367706, (GLfloat) - 0.929096, (GLfloat) 0.039656,
+ (GLfloat) 0.290512, (GLfloat) - 0.956396, (GLfloat) 0.030163,
+ (GLfloat) 0.287695, (GLfloat) - 0.957151, (GLfloat) 0.033079,
+ (GLfloat) 0.299349, (GLfloat) - 0.947826, (GLfloat) 0.109621,
+ (GLfloat) 0.295210, (GLfloat) - 0.948521, (GLfloat) 0.114709,
+};
+
+unsigned short int s1_5_POLS[] =
+{
+ 3, 12, 76, 74, 1, 3, 12, 74, 82, 1, 3, 76, 22, 78, 1, 3, 78, 74, 76, 1,
+ 3, 20, 80, 74, 1, 3, 20, 74, 78, 1, 3, 80, 28, 82, 1, 3, 82, 74, 80, 1,
+ 3, 13, 84, 77, 1, 3, 13, 77, 88, 1, 3, 84, 24, 86, 1, 3, 86, 77, 84, 1,
+ 3, 20, 78, 77, 1, 3, 20, 77, 86, 1, 3, 78, 22, 88, 1, 3, 88, 77, 78, 1,
+ 3, 14, 90, 85, 1, 3, 14, 85, 93, 1, 3, 26, 91, 85, 1, 3, 26, 85, 90, 1,
+ 3, 20, 86, 85, 1, 3, 20, 85, 91, 1, 3, 86, 24, 93, 1, 3, 93, 85, 86, 1,
+ 3, 15, 95, 79, 1, 3, 15, 79, 97, 1, 3, 95, 28, 80, 1, 3, 80, 79, 95, 1,
+ 3, 20, 91, 79, 1, 3, 20, 79, 80, 1, 3, 26, 97, 79, 1, 3, 26, 79, 91, 1,
+ 3, 13, 99, 83, 1, 3, 13, 83, 84, 1, 3, 99, 30, 101, 1, 3, 101, 83, 99, 1,
+ 3, 23, 102, 83, 1, 3, 23, 83, 101, 1, 3, 102, 24, 84, 1, 3, 84, 83, 102, 1,
+ 3, 108, 16, 104, 1, 3, 104, 100, 108, 1, 3, 32, 106, 100, 1, 3, 32, 100, 104, 1,
+ 3, 106, 23, 101, 1, 3, 101, 100, 106, 1, 3, 30, 108, 100, 1, 3, 30, 100, 101, 1,
+ 3, 17, 110, 105, 1, 3, 17, 105, 113, 1, 3, 33, 111, 105, 1, 3, 33, 105, 110, 1,
+ 3, 23, 106, 105, 1, 3, 23, 105, 111, 1, 3, 106, 32, 113, 1, 3, 113, 105, 106, 1,
+ 3, 14, 93, 92, 1, 3, 14, 92, 114, 1, 3, 93, 24, 102, 1, 3, 102, 92, 93, 1,
+3, 102, 23, 111, 1, 3, 111, 92, 102, 1, 3, 33, 114, 92, 1, 3, 33, 92, 111, 1,
+ 3, 16, 116, 103, 1, 3, 16, 103, 104, 1, 3, 116, 35, 118, 1, 3, 118, 103, 116, 1,
+ 3, 31, 119, 103, 1, 3, 31, 103, 118, 1, 3, 119, 32, 104, 1, 3, 104, 103, 119, 1,
+ 3, 18, 121, 117, 1, 3, 18, 117, 125, 1, 3, 121, 36, 123, 1, 3, 123, 117, 121, 1,
+ 3, 31, 118, 117, 1, 3, 31, 117, 123, 1, 3, 118, 35, 125, 1, 3, 125, 117, 118, 1,
+ 3, 19, 127, 122, 1, 3, 19, 122, 130, 1, 3, 37, 128, 122, 1, 3, 37, 122, 127, 1,
+ 3, 31, 123, 122, 1, 3, 31, 122, 128, 1, 3, 36, 130, 122, 1, 3, 36, 122, 123, 1,
+ 3, 17, 113, 112, 1, 3, 17, 112, 131, 1, 3, 32, 119, 112, 1, 3, 32, 112, 113, 1,
+ 3, 31, 128, 112, 1, 3, 31, 112, 119, 1, 3, 37, 131, 112, 1, 3, 37, 112, 128, 1,
+ 3, 121, 18, 133, 1, 3, 133, 120, 121, 1, 3, 39, 134, 120, 1, 3, 39, 120, 133, 1,
+ 3, 134, 27, 135, 1, 3, 135, 120, 134, 1, 3, 36, 121, 120, 1, 3, 36, 120, 135, 1,
+ 3, 12, 82, 81, 1, 3, 12, 81, 138, 1, 3, 82, 28, 136, 1, 3, 136, 81, 82, 1,
+3, 27, 134, 81, 1, 3, 27, 81, 136, 1, 3, 134, 39, 138, 1, 3, 138, 81, 134, 1,
+ 3, 15, 139, 94, 1, 3, 15, 94, 95, 1, 3, 40, 140, 94, 1, 3, 40, 94, 139, 1,
+3, 140, 27, 136, 1, 3, 136, 94, 140, 1, 3, 136, 28, 95, 1, 3, 95, 94, 136, 1,
+ 3, 19, 130, 129, 1, 3, 19, 129, 141, 1, 3, 130, 36, 135, 1, 3, 135, 129, 130, 1,
+ 3, 27, 140, 129, 1, 3, 27, 129, 135, 1, 3, 40, 141, 129, 1, 3, 40, 129, 140, 1,
+ 3, 14, 114, 89, 1, 3, 14, 89, 90, 1, 3, 114, 33, 142, 1, 3, 142, 89, 114, 1,
+ 3, 25, 143, 89, 1, 3, 25, 89, 142, 1, 3, 143, 26, 90, 1, 3, 90, 89, 143, 1,
+ 3, 17, 131, 109, 1, 3, 17, 109, 110, 1, 3, 131, 37, 144, 1, 3, 144, 109, 131, 1,
+ 3, 25, 142, 109, 1, 3, 25, 109, 144, 1, 3, 142, 33, 110, 1, 3, 110, 109, 142, 1,
+ 3, 19, 141, 126, 1, 3, 19, 126, 127, 1, 3, 141, 40, 145, 1, 3, 145, 126, 141, 1,
+ 3, 25, 144, 126, 1, 3, 25, 126, 145, 1, 3, 144, 37, 127, 1, 3, 127, 126, 144, 1,
+ 3, 15, 97, 96, 1, 3, 15, 96, 139, 1, 3, 97, 26, 143, 1, 3, 143, 96, 97, 1,
+3, 25, 145, 96, 1, 3, 25, 96, 143, 1, 3, 145, 40, 139, 1, 3, 139, 96, 145, 1,
+3, 76, 12, 146, 1, 3, 146, 75, 76, 1, 3, 146, 41, 148, 1, 3, 148, 75, 146, 1,
+ 3, 148, 21, 149, 1, 3, 149, 75, 148, 1, 3, 22, 76, 75, 1, 3, 22, 75, 149, 1,
+ 3, 155, 8, 151, 1, 3, 151, 147, 155, 1, 3, 43, 153, 147, 1, 3, 43, 147, 151, 1,
+ 3, 153, 21, 148, 1, 3, 148, 147, 153, 1, 3, 41, 155, 147, 1, 3, 41, 147, 148, 1,
+ 3, 160, 11, 157, 1, 3, 157, 152, 160, 1, 3, 44, 158, 152, 1, 3, 44, 152, 157, 1,
+ 3, 158, 21, 153, 1, 3, 153, 152, 158, 1, 3, 43, 160, 152, 1, 3, 43, 152, 153, 1,
+ 3, 161, 13, 88, 1, 3, 88, 87, 161, 1, 3, 22, 149, 87, 1, 3, 22, 87, 88, 1,
+ 3, 149, 21, 158, 1, 3, 158, 87, 149, 1, 3, 158, 44, 161, 1, 3, 161, 87, 158, 1,
+ 3, 18, 162, 132, 1, 3, 18, 132, 133, 1, 3, 162, 45, 164, 1, 3, 164, 132, 162, 1,
+ 3, 38, 165, 132, 1, 3, 38, 132, 164, 1, 3, 165, 39, 133, 1, 3, 133, 132, 165, 1,
+ 3, 170, 9, 167, 1, 3, 167, 163, 170, 1, 3, 47, 168, 163, 1, 3, 47, 163, 167, 1,
+ 3, 168, 38, 164, 1, 3, 164, 163, 168, 1, 3, 45, 170, 163, 1, 3, 45, 163, 164, 1,
+3, 8, 155, 154, 1, 3, 8, 154, 173, 1, 3, 155, 41, 171, 1, 3, 171, 154, 155, 1,
+ 3, 38, 168, 154, 1, 3, 38, 154, 171, 1, 3, 168, 47, 173, 1, 3, 173, 154, 168, 1,
+ 3, 146, 12, 138, 1, 3, 138, 137, 146, 1, 3, 39, 165, 137, 1, 3, 39, 137, 138, 1,
+ 3, 165, 38, 171, 1, 3, 171, 137, 165, 1, 3, 41, 146, 137, 1, 3, 41, 137, 171, 1,
+ 3, 16, 108, 107, 1, 3, 16, 107, 177, 1, 3, 108, 30, 174, 1, 3, 174, 107, 108, 1,
+ 3, 29, 176, 107, 1, 3, 29, 107, 174, 1, 3, 176, 50, 177, 1, 3, 177, 107, 176, 1,
+ 3, 99, 13, 161, 1, 3, 161, 98, 99, 1, 3, 44, 178, 98, 1, 3, 44, 98, 161, 1,
+ 3, 178, 29, 174, 1, 3, 174, 98, 178, 1, 3, 30, 99, 98, 1, 3, 30, 98, 174, 1,
+ 3, 11, 180, 156, 1, 3, 11, 156, 157, 1, 3, 180, 49, 181, 1, 3, 181, 156, 180, 1,
+ 3, 29, 178, 156, 1, 3, 29, 156, 181, 1, 3, 178, 44, 157, 1, 3, 157, 156, 178, 1,
+ 3, 185, 10, 183, 1, 3, 183, 175, 185, 1, 3, 50, 176, 175, 1, 3, 50, 175, 183, 1,
+ 3, 176, 29, 181, 1, 3, 181, 175, 176, 1, 3, 49, 185, 175, 1, 3, 49, 175, 181, 1,
+ 3, 162, 18, 125, 1, 3, 125, 124, 162, 1, 3, 35, 186, 124, 1, 3, 35, 124, 125, 1,
+ 3, 186, 34, 187, 1, 3, 187, 124, 186, 1, 3, 45, 162, 124, 1, 3, 45, 124, 187, 1,
+ 3, 116, 16, 177, 1, 3, 177, 115, 116, 1, 3, 50, 188, 115, 1, 3, 50, 115, 177, 1,
+ 3, 188, 34, 186, 1, 3, 186, 115, 188, 1, 3, 35, 116, 115, 1, 3, 35, 115, 186, 1,
+ 3, 10, 190, 182, 1, 3, 10, 182, 183, 1, 3, 190, 52, 191, 1, 3, 191, 182, 190, 1,
+ 3, 191, 34, 188, 1, 3, 188, 182, 191, 1, 3, 50, 183, 182, 1, 3, 50, 182, 188, 1,
+3, 9, 170, 169, 1, 3, 9, 169, 193, 1, 3, 45, 187, 169, 1, 3, 45, 169, 170, 1,
+ 3, 187, 34, 191, 1, 3, 191, 169, 187, 1, 3, 191, 52, 193, 1, 3, 193, 169, 191, 1,
+3, 1, 196, 194, 1, 3, 1, 194, 201, 1, 3, 196, 54, 198, 1, 3, 198, 194, 196, 1,
+ 3, 46, 199, 194, 1, 3, 46, 194, 198, 1, 3, 56, 201, 194, 1, 3, 56, 194, 199, 1,
+ 3, 206, 3, 203, 1, 3, 203, 197, 206, 1, 3, 55, 204, 197, 1, 3, 55, 197, 203, 1,
+ 3, 204, 46, 198, 1, 3, 198, 197, 204, 1, 3, 54, 206, 197, 1, 3, 54, 197, 198, 1,
+ 3, 208, 8, 173, 1, 3, 173, 172, 208, 1, 3, 47, 207, 172, 1, 3, 47, 172, 173, 1,
+ 3, 46, 204, 172, 1, 3, 46, 172, 207, 1, 3, 204, 55, 208, 1, 3, 208, 172, 204, 1,
+3, 9, 209, 166, 1, 3, 9, 166, 167, 1, 3, 209, 56, 199, 1, 3, 199, 166, 209, 1,
+ 3, 46, 207, 166, 1, 3, 46, 166, 199, 1, 3, 207, 47, 167, 1, 3, 167, 166, 207, 1,
+3, 1, 201, 200, 1, 3, 1, 200, 214, 1, 3, 201, 56, 210, 1, 3, 210, 200, 201, 1,
+ 3, 51, 212, 200, 1, 3, 51, 200, 210, 1, 3, 212, 59, 214, 1, 3, 214, 200, 212, 1,
+ 3, 209, 9, 193, 1, 3, 193, 192, 209, 1, 3, 52, 215, 192, 1, 3, 52, 192, 193, 1,
+ 3, 215, 51, 210, 1, 3, 210, 192, 215, 1, 3, 192, 210, 56, 1, 3, 56, 209, 192, 1,
+ 3, 190, 10, 216, 1, 3, 216, 189, 190, 1, 3, 189, 216, 57, 1, 3, 57, 217, 189, 1,
+ 3, 217, 51, 215, 1, 3, 215, 189, 217, 1, 3, 52, 190, 189, 1, 3, 52, 189, 215, 1,
+3, 0, 219, 211, 1, 3, 0, 211, 221, 1, 3, 219, 59, 212, 1, 3, 212, 211, 219, 1,
+ 3, 51, 217, 211, 1, 3, 51, 211, 212, 1, 3, 217, 57, 221, 1, 3, 221, 211, 217, 1,
+3, 0, 221, 220, 1, 3, 0, 220, 226, 1, 3, 57, 222, 220, 1, 3, 57, 220, 221, 1,
+ 3, 48, 224, 220, 1, 3, 48, 220, 222, 1, 3, 224, 62, 226, 1, 3, 226, 220, 224, 1,
+ 3, 10, 185, 184, 1, 3, 10, 184, 216, 1, 3, 185, 49, 227, 1, 3, 227, 184, 185, 1,
+ 3, 48, 222, 184, 1, 3, 48, 184, 227, 1, 3, 222, 57, 216, 1, 3, 216, 184, 222, 1,
+ 3, 180, 11, 228, 1, 3, 228, 179, 180, 1, 3, 228, 60, 229, 1, 3, 229, 179, 228, 1,
+ 3, 48, 227, 179, 1, 3, 48, 179, 229, 1, 3, 49, 180, 179, 1, 3, 49, 179, 227, 1,
+ 3, 233, 2, 231, 1, 3, 231, 223, 233, 1, 3, 62, 224, 223, 1, 3, 62, 223, 231, 1,
+ 3, 224, 48, 229, 1, 3, 229, 223, 224, 1, 3, 60, 233, 223, 1, 3, 60, 223, 229, 1,
+ 3, 237, 2, 233, 1, 3, 233, 232, 237, 1, 3, 60, 234, 232, 1, 3, 60, 232, 233, 1,
+ 3, 234, 42, 235, 1, 3, 235, 232, 234, 1, 3, 64, 237, 232, 1, 3, 64, 232, 235, 1,
+ 3, 11, 160, 159, 1, 3, 11, 159, 228, 1, 3, 160, 43, 238, 1, 3, 238, 159, 160, 1,
+ 3, 42, 234, 159, 1, 3, 42, 159, 238, 1, 3, 234, 60, 228, 1, 3, 228, 159, 234, 1,
+3, 8, 208, 150, 1, 3, 8, 150, 151, 1, 3, 208, 55, 239, 1, 3, 239, 150, 208, 1,
+ 3, 42, 238, 150, 1, 3, 42, 150, 239, 1, 3, 238, 43, 151, 1, 3, 151, 150, 238, 1,
+ 3, 203, 3, 241, 1, 3, 241, 202, 203, 1, 3, 64, 235, 202, 1, 3, 64, 202, 241, 1,
+ 3, 235, 42, 239, 1, 3, 239, 202, 235, 1, 3, 55, 203, 202, 1, 3, 55, 202, 239, 1,
+3, 2, 237, 236, 1, 3, 2, 236, 245, 1, 3, 237, 64, 242, 1, 3, 242, 236, 237, 1,
+ 3, 63, 244, 236, 1, 3, 63, 236, 242, 1, 3, 244, 68, 245, 1, 3, 245, 236, 244, 1,
+3, 3, 246, 240, 1, 3, 3, 240, 241, 1, 3, 246, 65, 248, 1, 3, 248, 240, 246, 1,
+ 3, 63, 242, 240, 1, 3, 63, 240, 248, 1, 3, 242, 64, 241, 1, 3, 241, 240, 242, 1,
+3, 4, 250, 247, 1, 3, 4, 247, 253, 1, 3, 67, 251, 247, 1, 3, 67, 247, 250, 1,
+ 3, 63, 248, 247, 1, 3, 63, 247, 251, 1, 3, 248, 65, 253, 1, 3, 253, 247, 248, 1,
+3, 7, 255, 243, 1, 3, 7, 243, 257, 1, 3, 255, 68, 244, 1, 3, 244, 243, 255, 1,
+ 3, 63, 251, 243, 1, 3, 63, 243, 244, 1, 3, 67, 257, 243, 1, 3, 67, 243, 251, 1,
+3, 3, 206, 205, 1, 3, 3, 205, 246, 1, 3, 206, 54, 258, 1, 3, 258, 205, 206, 1,
+ 3, 53, 259, 205, 1, 3, 53, 205, 258, 1, 3, 259, 65, 246, 1, 3, 246, 205, 259, 1,
+3, 1, 260, 195, 1, 3, 1, 195, 196, 1, 3, 69, 262, 195, 1, 3, 69, 195, 260, 1,
+ 3, 262, 53, 258, 1, 3, 258, 195, 262, 1, 3, 54, 196, 195, 1, 3, 54, 195, 258, 1,
+3, 5, 264, 261, 1, 3, 5, 261, 267, 1, 3, 70, 265, 261, 1, 3, 70, 261, 264, 1,
+ 3, 53, 262, 261, 1, 3, 53, 261, 265, 1, 3, 262, 69, 267, 1, 3, 267, 261, 262, 1,
+ 3, 268, 4, 253, 1, 3, 253, 252, 268, 1, 3, 253, 65, 259, 1, 3, 259, 252, 253, 1,
+ 3, 53, 265, 252, 1, 3, 53, 252, 259, 1, 3, 70, 268, 252, 1, 3, 70, 252, 265, 1,
+ 3, 260, 1, 214, 1, 3, 214, 213, 260, 1, 3, 214, 59, 269, 1, 3, 269, 213, 214, 1,
+ 3, 269, 58, 270, 1, 3, 270, 213, 269, 1, 3, 69, 260, 213, 1, 3, 69, 213, 270, 1,
+ 3, 219, 0, 271, 1, 3, 271, 218, 219, 1, 3, 71, 273, 218, 1, 3, 71, 218, 271, 1,
+ 3, 273, 58, 269, 1, 3, 269, 218, 273, 1, 3, 269, 59, 219, 1, 3, 219, 218, 269, 1,
+3, 6, 275, 272, 1, 3, 6, 272, 278, 1, 3, 72, 276, 272, 1, 3, 72, 272, 275, 1,
+ 3, 276, 58, 273, 1, 3, 273, 272, 276, 1, 3, 71, 278, 272, 1, 3, 71, 272, 273, 1,
+3, 5, 267, 266, 1, 3, 5, 266, 279, 1, 3, 69, 270, 266, 1, 3, 69, 266, 267, 1,
+ 3, 270, 58, 276, 1, 3, 276, 266, 270, 1, 3, 72, 279, 266, 1, 3, 72, 266, 276, 1,
+3, 0, 226, 225, 1, 3, 0, 225, 271, 1, 3, 62, 280, 225, 1, 3, 62, 225, 226, 1,
+ 3, 280, 61, 281, 1, 3, 281, 225, 280, 1, 3, 71, 271, 225, 1, 3, 71, 225, 281, 1,
+3, 2, 245, 230, 1, 3, 2, 230, 231, 1, 3, 245, 68, 282, 1, 3, 282, 230, 245, 1,
+ 3, 61, 280, 230, 1, 3, 61, 230, 282, 1, 3, 280, 62, 231, 1, 3, 231, 230, 280, 1,
+ 3, 255, 7, 283, 1, 3, 283, 254, 255, 1, 3, 73, 284, 254, 1, 3, 73, 254, 283, 1,
+ 3, 61, 282, 254, 1, 3, 61, 254, 284, 1, 3, 282, 68, 255, 1, 3, 255, 254, 282, 1,
+3, 6, 278, 277, 1, 3, 6, 277, 285, 1, 3, 278, 71, 281, 1, 3, 281, 277, 278, 1,
+ 3, 61, 284, 277, 1, 3, 61, 277, 281, 1, 3, 73, 285, 277, 1, 3, 73, 277, 284, 1,
+3, 4, 268, 249, 1, 3, 4, 249, 250, 1, 3, 268, 70, 286, 1, 3, 286, 249, 268, 1,
+ 3, 66, 287, 249, 1, 3, 66, 249, 286, 1, 3, 287, 67, 250, 1, 3, 250, 249, 287, 1,
+3, 5, 279, 263, 1, 3, 5, 263, 264, 1, 3, 279, 72, 288, 1, 3, 288, 263, 279, 1,
+ 3, 66, 286, 263, 1, 3, 66, 263, 288, 1, 3, 286, 70, 264, 1, 3, 264, 263, 286, 1,
+3, 6, 285, 274, 1, 3, 6, 274, 275, 1, 3, 285, 73, 289, 1, 3, 289, 274, 285, 1,
+ 3, 66, 288, 274, 1, 3, 66, 274, 289, 1, 3, 288, 72, 275, 1, 3, 275, 274, 288, 1,
+3, 7, 257, 256, 1, 3, 7, 256, 283, 1, 3, 257, 67, 287, 1, 3, 287, 256, 257, 1,
+ 3, 66, 289, 256, 1, 3, 66, 256, 287, 1, 3, 289, 73, 283, 1, 3, 283, 256, 289, 1,
+
+ 0
+};
+
+struct lwo LWO_s1_5 =
+{
+ 290, /* number of points */
+ s1_5_PNTS, s1_5_normals, s1_5_POLS, 0L
+};
+
+#endif /* USE_GL */
+
+/* End of s1_5.c */
--- /dev/null
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)s1_6.c 4.2 97/04/20 xlockmore";
+
+#endif
+
+/*-
+ * Points, polygons, and normal vectors to render "s1_6" in 3D.
+ *
+ * Generated by lw2ogl. Link this with your program but do
+ * not edit by hand.
+ */
+
+#include "xlock.h"
+
+#ifdef USE_GL
+
+#include <GL/gl.h>
+#include "glx/buildlwo.h"
+
+GLfloat s1_6_PNTS[] =
+{
+ (GLfloat) 1.339151, (GLfloat) - 0.510672, (GLfloat) - 0.339151,
+ (GLfloat) 1.339151, (GLfloat) - 0.510672, (GLfloat) - 0.660849,
+ (GLfloat) 1.660849, (GLfloat) - 0.510672, (GLfloat) - 0.339151,
+ (GLfloat) 1.660849, (GLfloat) - 0.510672, (GLfloat) - 0.660849,
+ (GLfloat) 1.638667, (GLfloat) - 0.642463, (GLfloat) - 0.638667,
+ (GLfloat) 1.361333, (GLfloat) - 0.642463, (GLfloat) - 0.638667,
+ (GLfloat) 1.361333, (GLfloat) - 0.642463, (GLfloat) - 0.361333,
+ (GLfloat) 1.638667, (GLfloat) - 0.642463, (GLfloat) - 0.361333,
+ (GLfloat) 1.589301, (GLfloat) - 0.085107, (GLfloat) - 0.624049,
+ (GLfloat) 1.356947, (GLfloat) - 0.122198, (GLfloat) - 0.624049,
+ (GLfloat) 1.356947, (GLfloat) - 0.122198, (GLfloat) - 0.375951,
+ (GLfloat) 1.589301, (GLfloat) - 0.085107, (GLfloat) - 0.375951,
+ (GLfloat) 1.460394, (GLfloat) 0.412133, (GLfloat) - 0.660849,
+ (GLfloat) 1.460394, (GLfloat) 0.412133, (GLfloat) - 0.339151,
+ (GLfloat) 1.370035, (GLfloat) 0.524394, (GLfloat) - 0.361333,
+ (GLfloat) 1.370035, (GLfloat) 0.524394, (GLfloat) - 0.638667,
+ (GLfloat) 1.226863, (GLfloat) 0.204423, (GLfloat) - 0.339151,
+ (GLfloat) 1.177383, (GLfloat) 0.324897, (GLfloat) - 0.361333,
+ (GLfloat) 1.226863, (GLfloat) 0.204423, (GLfloat) - 0.660849,
+ (GLfloat) 1.177383, (GLfloat) 0.324897, (GLfloat) - 0.638667,
+ (GLfloat) 1.460683, (GLfloat) 0.568581, (GLfloat) - 0.500000,
+ (GLfloat) 1.564666, (GLfloat) 0.208184, (GLfloat) - 0.500000,
+ (GLfloat) 1.502855, (GLfloat) 0.449898, (GLfloat) - 0.500000,
+ (GLfloat) 1.294932, (GLfloat) 0.399266, (GLfloat) - 0.262379,
+ (GLfloat) 1.416649, (GLfloat) 0.522728, (GLfloat) - 0.326134,
+ (GLfloat) 1.260429, (GLfloat) 0.437469, (GLfloat) - 0.500000,
+ (GLfloat) 1.392236, (GLfloat) 0.557026, (GLfloat) - 0.500000,
+ (GLfloat) 1.294932, (GLfloat) 0.399266, (GLfloat) - 0.737621,
+ (GLfloat) 1.416649, (GLfloat) 0.522728, (GLfloat) - 0.673866,
+ (GLfloat) 1.412872, (GLfloat) 0.126752, (GLfloat) - 0.313640,
+ (GLfloat) 1.343629, (GLfloat) 0.308278, (GLfloat) - 0.280660,
+ (GLfloat) 1.129180, (GLfloat) 0.229952, (GLfloat) - 0.500000,
+ (GLfloat) 1.174088, (GLfloat) 0.274960, (GLfloat) - 0.326134,
+ (GLfloat) 1.268890, (GLfloat) 0.429299, (GLfloat) - 0.322437,
+ (GLfloat) 1.261078, (GLfloat) 0.045321, (GLfloat) - 0.500000,
+ (GLfloat) 1.184403, (GLfloat) 0.166658, (GLfloat) - 0.500000,
+ (GLfloat) 1.174088, (GLfloat) 0.274960, (GLfloat) - 0.673866,
+ (GLfloat) 1.145545, (GLfloat) 0.301571, (GLfloat) - 0.500000,
+ (GLfloat) 1.412872, (GLfloat) 0.126752, (GLfloat) - 0.686360,
+ (GLfloat) 1.343629, (GLfloat) 0.308278, (GLfloat) - 0.719340,
+ (GLfloat) 1.268890, (GLfloat) 0.429299, (GLfloat) - 0.677562,
+ (GLfloat) 1.524188, (GLfloat) 0.186469, (GLfloat) - 0.636664,
+ (GLfloat) 1.682599, (GLfloat) - 0.328303, (GLfloat) - 0.500000,
+ (GLfloat) 1.631547, (GLfloat) - 0.078363, (GLfloat) - 0.500000,
+ (GLfloat) 1.524188, (GLfloat) 0.186469, (GLfloat) - 0.363336,
+ (GLfloat) 1.301556, (GLfloat) 0.067036, (GLfloat) - 0.636664,
+ (GLfloat) 1.497312, (GLfloat) - 0.330832, (GLfloat) - 0.686360,
+ (GLfloat) 1.473124, (GLfloat) - 0.103652, (GLfloat) - 0.669158,
+ (GLfloat) 1.497312, (GLfloat) - 0.330832, (GLfloat) - 0.313640,
+ (GLfloat) 1.473124, (GLfloat) - 0.103652, (GLfloat) - 0.330842,
+ (GLfloat) 1.301556, (GLfloat) 0.067036, (GLfloat) - 0.363336,
+ (GLfloat) 1.312026, (GLfloat) - 0.333361, (GLfloat) - 0.500000,
+ (GLfloat) 1.314701, (GLfloat) - 0.128942, (GLfloat) - 0.500000,
+ (GLfloat) 1.500000, (GLfloat) - 0.609501, (GLfloat) - 0.737621,
+ (GLfloat) 1.500000, (GLfloat) - 0.510672, (GLfloat) - 0.719340,
+ (GLfloat) 1.633189, (GLfloat) - 0.328978, (GLfloat) - 0.636664,
+ (GLfloat) 1.361436, (GLfloat) - 0.332687, (GLfloat) - 0.636664,
+ (GLfloat) 1.361436, (GLfloat) - 0.332687, (GLfloat) - 0.363336,
+ (GLfloat) 1.262379, (GLfloat) - 0.609501, (GLfloat) - 0.500000,
+ (GLfloat) 1.280660, (GLfloat) - 0.510672, (GLfloat) - 0.500000,
+ (GLfloat) 1.633189, (GLfloat) - 0.328978, (GLfloat) - 0.363336,
+ (GLfloat) 1.500000, (GLfloat) - 0.609501, (GLfloat) - 0.262379,
+ (GLfloat) 1.500000, (GLfloat) - 0.510672, (GLfloat) - 0.280660,
+ (GLfloat) 1.737621, (GLfloat) - 0.609501, (GLfloat) - 0.500000,
+ (GLfloat) 1.719340, (GLfloat) - 0.510672, (GLfloat) - 0.500000,
+ (GLfloat) 1.673866, (GLfloat) - 0.608893, (GLfloat) - 0.673866,
+ (GLfloat) 1.500000, (GLfloat) - 0.660924, (GLfloat) - 0.500000,
+ (GLfloat) 1.677562, (GLfloat) - 0.649161, (GLfloat) - 0.500000,
+ (GLfloat) 1.673866, (GLfloat) - 0.608893, (GLfloat) - 0.326134,
+ (GLfloat) 1.326134, (GLfloat) - 0.608893, (GLfloat) - 0.673866,
+ (GLfloat) 1.500000, (GLfloat) - 0.649161, (GLfloat) - 0.677562,
+ (GLfloat) 1.326134, (GLfloat) - 0.608893, (GLfloat) - 0.326134,
+ (GLfloat) 1.322438, (GLfloat) - 0.649161, (GLfloat) - 0.500000,
+ (GLfloat) 1.500000, (GLfloat) - 0.649161, (GLfloat) - 0.322437,
+ (GLfloat) 1.470529, (GLfloat) 0.515074, (GLfloat) - 0.593594,
+ (GLfloat) 1.521298, (GLfloat) 0.332708, (GLfloat) - 0.580972,
+ (GLfloat) 1.492239, (GLfloat) 0.440457, (GLfloat) - 0.587736,
+ (GLfloat) 1.470529, (GLfloat) 0.515074, (GLfloat) - 0.406406,
+ (GLfloat) 1.481548, (GLfloat) 0.525864, (GLfloat) - 0.500000,
+ (GLfloat) 1.423386, (GLfloat) 0.566478, (GLfloat) - 0.587500,
+ (GLfloat) 1.449724, (GLfloat) 0.556950, (GLfloat) - 0.594774,
+ (GLfloat) 1.382377, (GLfloat) 0.428753, (GLfloat) - 0.718387,
+ (GLfloat) 1.437472, (GLfloat) 0.482703, (GLfloat) - 0.671590,
+ (GLfloat) 1.382377, (GLfloat) 0.428753, (GLfloat) - 0.281613,
+ (GLfloat) 1.437472, (GLfloat) 0.482703, (GLfloat) - 0.328410,
+ (GLfloat) 1.423386, (GLfloat) 0.566478, (GLfloat) - 0.412500,
+ (GLfloat) 1.449724, (GLfloat) 0.556950, (GLfloat) - 0.405226,
+ (GLfloat) 1.521298, (GLfloat) 0.332708, (GLfloat) - 0.419028,
+ (GLfloat) 1.492239, (GLfloat) 0.440457, (GLfloat) - 0.412264,
+ (GLfloat) 1.327417, (GLfloat) 0.498590, (GLfloat) - 0.409500,
+ (GLfloat) 1.384841, (GLfloat) 0.546182, (GLfloat) - 0.417500,
+ (GLfloat) 1.433279, (GLfloat) 0.578472, (GLfloat) - 0.500000,
+ (GLfloat) 1.341069, (GLfloat) 0.481236, (GLfloat) - 0.294000,
+ (GLfloat) 1.392914, (GLfloat) 0.533174, (GLfloat) - 0.339125,
+ (GLfloat) 1.341069, (GLfloat) 0.481236, (GLfloat) - 0.706000,
+ (GLfloat) 1.392914, (GLfloat) 0.533174, (GLfloat) - 0.660875,
+ (GLfloat) 1.327417, (GLfloat) 0.498590, (GLfloat) - 0.590500,
+ (GLfloat) 1.384841, (GLfloat) 0.546182, (GLfloat) - 0.582500,
+ (GLfloat) 1.438984, (GLfloat) 0.272283, (GLfloat) - 0.311066,
+ (GLfloat) 1.407319, (GLfloat) 0.364926, (GLfloat) - 0.295283,
+ (GLfloat) 1.250150, (GLfloat) 0.299272, (GLfloat) - 0.281613,
+ (GLfloat) 1.316263, (GLfloat) 0.364012, (GLfloat) - 0.266014,
+ (GLfloat) 1.361260, (GLfloat) 0.466583, (GLfloat) - 0.278403,
+ (GLfloat) 1.161998, (GLfloat) 0.212951, (GLfloat) - 0.406406,
+ (GLfloat) 1.195055, (GLfloat) 0.245321, (GLfloat) - 0.328410,
+ (GLfloat) 1.219504, (GLfloat) 0.355352, (GLfloat) - 0.294000,
+ (GLfloat) 1.229040, (GLfloat) 0.331527, (GLfloat) - 0.278403,
+ (GLfloat) 1.315513, (GLfloat) 0.181646, (GLfloat) - 0.311066,
+ (GLfloat) 1.279939, (GLfloat) 0.251630, (GLfloat) - 0.295283,
+ (GLfloat) 1.201684, (GLfloat) 0.368389, (GLfloat) - 0.409500,
+ (GLfloat) 1.213173, (GLfloat) 0.368416, (GLfloat) - 0.335375,
+ (GLfloat) 1.279412, (GLfloat) 0.419138, (GLfloat) - 0.278500,
+ (GLfloat) 1.137187, (GLfloat) 0.270110, (GLfloat) - 0.412500,
+ (GLfloat) 1.169407, (GLfloat) 0.301726, (GLfloat) - 0.339125,
+ (GLfloat) 1.327792, (GLfloat) 0.487107, (GLfloat) - 0.335375,
+ (GLfloat) 1.233200, (GLfloat) 0.121222, (GLfloat) - 0.419028,
+ (GLfloat) 1.195018, (GLfloat) 0.176099, (GLfloat) - 0.412264,
+ (GLfloat) 1.161998, (GLfloat) 0.212951, (GLfloat) - 0.593594,
+ (GLfloat) 1.150979, (GLfloat) 0.202161, (GLfloat) - 0.500000,
+ (GLfloat) 1.140576, (GLfloat) 0.241160, (GLfloat) - 0.405226,
+ (GLfloat) 1.250150, (GLfloat) 0.299272, (GLfloat) - 0.718387,
+ (GLfloat) 1.195055, (GLfloat) 0.245321, (GLfloat) - 0.671590,
+ (GLfloat) 1.137187, (GLfloat) 0.270110, (GLfloat) - 0.587500,
+ (GLfloat) 1.140576, (GLfloat) 0.241160, (GLfloat) - 0.594774,
+ (GLfloat) 1.233200, (GLfloat) 0.121222, (GLfloat) - 0.580972,
+ (GLfloat) 1.195018, (GLfloat) 0.176099, (GLfloat) - 0.587736,
+ (GLfloat) 1.201684, (GLfloat) 0.368389, (GLfloat) - 0.590500,
+ (GLfloat) 1.156124, (GLfloat) 0.309340, (GLfloat) - 0.582500,
+ (GLfloat) 1.125545, (GLfloat) 0.259804, (GLfloat) - 0.500000,
+ (GLfloat) 1.219504, (GLfloat) 0.355352, (GLfloat) - 0.706000,
+ (GLfloat) 1.169407, (GLfloat) 0.301726, (GLfloat) - 0.660875,
+ (GLfloat) 1.156124, (GLfloat) 0.309340, (GLfloat) - 0.417500,
+ (GLfloat) 1.315513, (GLfloat) 0.181646, (GLfloat) - 0.688934,
+ (GLfloat) 1.279939, (GLfloat) 0.251630, (GLfloat) - 0.704717,
+ (GLfloat) 1.316263, (GLfloat) 0.364012, (GLfloat) - 0.733986,
+ (GLfloat) 1.229040, (GLfloat) 0.331527, (GLfloat) - 0.721597,
+ (GLfloat) 1.361260, (GLfloat) 0.466583, (GLfloat) - 0.721597,
+ (GLfloat) 1.438984, (GLfloat) 0.272283, (GLfloat) - 0.688934,
+ (GLfloat) 1.407319, (GLfloat) 0.364926, (GLfloat) - 0.704717,
+ (GLfloat) 1.327792, (GLfloat) 0.487107, (GLfloat) - 0.664625,
+ (GLfloat) 1.279412, (GLfloat) 0.419138, (GLfloat) - 0.721500,
+ (GLfloat) 1.213173, (GLfloat) 0.368416, (GLfloat) - 0.664625,
+ (GLfloat) 1.262552, (GLfloat) 0.435419, (GLfloat) - 0.402250,
+ (GLfloat) 1.330455, (GLfloat) 0.505735, (GLfloat) - 0.500000,
+ (GLfloat) 1.194650, (GLfloat) 0.365104, (GLfloat) - 0.500000,
+ (GLfloat) 1.262552, (GLfloat) 0.435419, (GLfloat) - 0.597750,
+ (GLfloat) 1.490430, (GLfloat) 0.310049, (GLfloat) - 0.648448,
+ (GLfloat) 1.588828, (GLfloat) 0.061527, (GLfloat) - 0.569694,
+ (GLfloat) 1.554547, (GLfloat) 0.202755, (GLfloat) - 0.574544,
+ (GLfloat) 1.531587, (GLfloat) 0.340261, (GLfloat) - 0.500000,
+ (GLfloat) 1.647861, (GLfloat) - 0.211045, (GLfloat) - 0.569694,
+ (GLfloat) 1.620986, (GLfloat) - 0.080049, (GLfloat) - 0.567663,
+ (GLfloat) 1.588828, (GLfloat) 0.061527, (GLfloat) - 0.430306,
+ (GLfloat) 1.599013, (GLfloat) 0.064899, (GLfloat) - 0.500000,
+ (GLfloat) 1.507354, (GLfloat) 0.034552, (GLfloat) - 0.662619,
+ (GLfloat) 1.558275, (GLfloat) 0.051411, (GLfloat) - 0.627772,
+ (GLfloat) 1.507354, (GLfloat) 0.034552, (GLfloat) - 0.337381,
+ (GLfloat) 1.558275, (GLfloat) 0.051411, (GLfloat) - 0.372228,
+ (GLfloat) 1.554547, (GLfloat) 0.202755, (GLfloat) - 0.425456,
+ (GLfloat) 1.647861, (GLfloat) - 0.211045, (GLfloat) - 0.430306,
+ (GLfloat) 1.620986, (GLfloat) - 0.080049, (GLfloat) - 0.432337,
+ (GLfloat) 1.490430, (GLfloat) 0.310049, (GLfloat) - 0.351552,
+ (GLfloat) 1.264067, (GLfloat) 0.143881, (GLfloat) - 0.648448,
+ (GLfloat) 1.385142, (GLfloat) - 0.005911, (GLfloat) - 0.662619,
+ (GLfloat) 1.352154, (GLfloat) 0.094180, (GLfloat) - 0.673936,
+ (GLfloat) 1.377249, (GLfloat) 0.226965, (GLfloat) - 0.702430,
+ (GLfloat) 1.421273, (GLfloat) - 0.224532, (GLfloat) - 0.662619,
+ (GLfloat) 1.409755, (GLfloat) - 0.113768, (GLfloat) - 0.657881,
+ (GLfloat) 1.446248, (GLfloat) 0.014320, (GLfloat) - 0.674234,
+ (GLfloat) 1.303667, (GLfloat) - 0.032887, (GLfloat) - 0.569694,
+ (GLfloat) 1.334220, (GLfloat) - 0.022771, (GLfloat) - 0.627772,
+ (GLfloat) 1.473590, (GLfloat) 0.159325, (GLfloat) - 0.673936,
+ (GLfloat) 1.557226, (GLfloat) - 0.216440, (GLfloat) - 0.662619,
+ (GLfloat) 1.536493, (GLfloat) - 0.093537, (GLfloat) - 0.657881,
+ (GLfloat) 1.377249, (GLfloat) 0.226965, (GLfloat) - 0.297570,
+ (GLfloat) 1.385142, (GLfloat) - 0.005911, (GLfloat) - 0.337381,
+ (GLfloat) 1.352154, (GLfloat) 0.094180, (GLfloat) - 0.326064,
+ (GLfloat) 1.264067, (GLfloat) 0.143881, (GLfloat) - 0.351552,
+ (GLfloat) 1.473590, (GLfloat) 0.159325, (GLfloat) - 0.326064,
+ (GLfloat) 1.557226, (GLfloat) - 0.216440, (GLfloat) - 0.337381,
+ (GLfloat) 1.536493, (GLfloat) - 0.093537, (GLfloat) - 0.342119,
+ (GLfloat) 1.446248, (GLfloat) 0.014320, (GLfloat) - 0.325766,
+ (GLfloat) 1.303667, (GLfloat) - 0.032887, (GLfloat) - 0.430306,
+ (GLfloat) 1.334220, (GLfloat) - 0.022771, (GLfloat) - 0.372228,
+ (GLfloat) 1.421273, (GLfloat) - 0.224532, (GLfloat) - 0.337381,
+ (GLfloat) 1.409755, (GLfloat) - 0.113768, (GLfloat) - 0.342119,
+ (GLfloat) 1.222911, (GLfloat) 0.113669, (GLfloat) - 0.500000,
+ (GLfloat) 1.271198, (GLfloat) 0.050750, (GLfloat) - 0.574544,
+ (GLfloat) 1.271198, (GLfloat) 0.050750, (GLfloat) - 0.425456,
+ (GLfloat) 1.330638, (GLfloat) - 0.229927, (GLfloat) - 0.430306,
+ (GLfloat) 1.325262, (GLfloat) - 0.127256, (GLfloat) - 0.432337,
+ (GLfloat) 1.293483, (GLfloat) - 0.036258, (GLfloat) - 0.500000,
+ (GLfloat) 1.330638, (GLfloat) - 0.229927, (GLfloat) - 0.569694,
+ (GLfloat) 1.325262, (GLfloat) - 0.127256, (GLfloat) - 0.567663,
+ (GLfloat) 1.419028, (GLfloat) - 0.429344, (GLfloat) - 0.688934,
+ (GLfloat) 1.406406, (GLfloat) - 0.569469, (GLfloat) - 0.718387,
+ (GLfloat) 1.412264, (GLfloat) - 0.510672, (GLfloat) - 0.704717,
+ (GLfloat) 1.580972, (GLfloat) - 0.429344, (GLfloat) - 0.688934,
+ (GLfloat) 1.500000, (GLfloat) - 0.429344, (GLfloat) - 0.702430,
+ (GLfloat) 1.423198, (GLfloat) - 0.331844, (GLfloat) - 0.673936,
+ (GLfloat) 1.311066, (GLfloat) - 0.429344, (GLfloat) - 0.580972,
+ (GLfloat) 1.351552, (GLfloat) - 0.429344, (GLfloat) - 0.648448,
+ (GLfloat) 1.688934, (GLfloat) - 0.429344, (GLfloat) - 0.580972,
+ (GLfloat) 1.648448, (GLfloat) - 0.429344, (GLfloat) - 0.648448,
+ (GLfloat) 1.571427, (GLfloat) - 0.329821, (GLfloat) - 0.673936,
+ (GLfloat) 1.593594, (GLfloat) - 0.569469, (GLfloat) - 0.718387,
+ (GLfloat) 1.587736, (GLfloat) - 0.510672, (GLfloat) - 0.704717,
+ (GLfloat) 1.489249, (GLfloat) - 0.220486, (GLfloat) - 0.674234,
+ (GLfloat) 1.613873, (GLfloat) - 0.213068, (GLfloat) - 0.627772,
+ (GLfloat) 1.364627, (GLfloat) - 0.227904, (GLfloat) - 0.627772,
+ (GLfloat) 1.324378, (GLfloat) - 0.333193, (GLfloat) - 0.574544,
+ (GLfloat) 1.311066, (GLfloat) - 0.429344, (GLfloat) - 0.419028,
+ (GLfloat) 1.297570, (GLfloat) - 0.429344, (GLfloat) - 0.500000,
+ (GLfloat) 1.281613, (GLfloat) - 0.569469, (GLfloat) - 0.593594,
+ (GLfloat) 1.295283, (GLfloat) - 0.510672, (GLfloat) - 0.587736,
+ (GLfloat) 1.319309, (GLfloat) - 0.230602, (GLfloat) - 0.500000,
+ (GLfloat) 1.364627, (GLfloat) - 0.227904, (GLfloat) - 0.372228,
+ (GLfloat) 1.324378, (GLfloat) - 0.333193, (GLfloat) - 0.425456,
+ (GLfloat) 1.281613, (GLfloat) - 0.569469, (GLfloat) - 0.406406,
+ (GLfloat) 1.295283, (GLfloat) - 0.510672, (GLfloat) - 0.412264,
+ (GLfloat) 1.419028, (GLfloat) - 0.429344, (GLfloat) - 0.311066,
+ (GLfloat) 1.351552, (GLfloat) - 0.429344, (GLfloat) - 0.351552,
+ (GLfloat) 1.423198, (GLfloat) - 0.331844, (GLfloat) - 0.326064,
+ (GLfloat) 1.580972, (GLfloat) - 0.429344, (GLfloat) - 0.311066,
+ (GLfloat) 1.500000, (GLfloat) - 0.429344, (GLfloat) - 0.297570,
+ (GLfloat) 1.406406, (GLfloat) - 0.569469, (GLfloat) - 0.281613,
+ (GLfloat) 1.412264, (GLfloat) - 0.510672, (GLfloat) - 0.295283,
+ (GLfloat) 1.489249, (GLfloat) - 0.220486, (GLfloat) - 0.325766,
+ (GLfloat) 1.613873, (GLfloat) - 0.213068, (GLfloat) - 0.372228,
+ (GLfloat) 1.571427, (GLfloat) - 0.329821, (GLfloat) - 0.326064,
+ (GLfloat) 1.593594, (GLfloat) - 0.569469, (GLfloat) - 0.281613,
+ (GLfloat) 1.587736, (GLfloat) - 0.510672, (GLfloat) - 0.295283,
+ (GLfloat) 1.688934, (GLfloat) - 0.429344, (GLfloat) - 0.419028,
+ (GLfloat) 1.648448, (GLfloat) - 0.429344, (GLfloat) - 0.351552,
+ (GLfloat) 1.670246, (GLfloat) - 0.328472, (GLfloat) - 0.425456,
+ (GLfloat) 1.702430, (GLfloat) - 0.429344, (GLfloat) - 0.500000,
+ (GLfloat) 1.718387, (GLfloat) - 0.569469, (GLfloat) - 0.406406,
+ (GLfloat) 1.704717, (GLfloat) - 0.510672, (GLfloat) - 0.412264,
+ (GLfloat) 1.659190, (GLfloat) - 0.210370, (GLfloat) - 0.500000,
+ (GLfloat) 1.670246, (GLfloat) - 0.328472, (GLfloat) - 0.574544,
+ (GLfloat) 1.718387, (GLfloat) - 0.569469, (GLfloat) - 0.593594,
+ (GLfloat) 1.704717, (GLfloat) - 0.510672, (GLfloat) - 0.587736,
+ (GLfloat) 1.733986, (GLfloat) - 0.569469, (GLfloat) - 0.500000,
+ (GLfloat) 1.706000, (GLfloat) - 0.633319, (GLfloat) - 0.412500,
+ (GLfloat) 1.721597, (GLfloat) - 0.609197, (GLfloat) - 0.405226,
+ (GLfloat) 1.671590, (GLfloat) - 0.569469, (GLfloat) - 0.328410,
+ (GLfloat) 1.671590, (GLfloat) - 0.569469, (GLfloat) - 0.671590,
+ (GLfloat) 1.706000, (GLfloat) - 0.633319, (GLfloat) - 0.587500,
+ (GLfloat) 1.721597, (GLfloat) - 0.609197, (GLfloat) - 0.594774,
+ (GLfloat) 1.590500, (GLfloat) - 0.655194, (GLfloat) - 0.590500,
+ (GLfloat) 1.664625, (GLfloat) - 0.646948, (GLfloat) - 0.582500,
+ (GLfloat) 1.721500, (GLfloat) - 0.634535, (GLfloat) - 0.500000,
+ (GLfloat) 1.587500, (GLfloat) - 0.633319, (GLfloat) - 0.706000,
+ (GLfloat) 1.660875, (GLfloat) - 0.632104, (GLfloat) - 0.660875,
+ (GLfloat) 1.587500, (GLfloat) - 0.633319, (GLfloat) - 0.294000,
+ (GLfloat) 1.660875, (GLfloat) - 0.632104, (GLfloat) - 0.339125,
+ (GLfloat) 1.590500, (GLfloat) - 0.655194, (GLfloat) - 0.409500,
+ (GLfloat) 1.664625, (GLfloat) - 0.646948, (GLfloat) - 0.417500,
+ (GLfloat) 1.500000, (GLfloat) - 0.569469, (GLfloat) - 0.733986,
+ (GLfloat) 1.594774, (GLfloat) - 0.609197, (GLfloat) - 0.721597,
+ (GLfloat) 1.328410, (GLfloat) - 0.569469, (GLfloat) - 0.671590,
+ (GLfloat) 1.412500, (GLfloat) - 0.633319, (GLfloat) - 0.706000,
+ (GLfloat) 1.405226, (GLfloat) - 0.609197, (GLfloat) - 0.721597,
+ (GLfloat) 1.409500, (GLfloat) - 0.655194, (GLfloat) - 0.590500,
+ (GLfloat) 1.417500, (GLfloat) - 0.646948, (GLfloat) - 0.664625,
+ (GLfloat) 1.500000, (GLfloat) - 0.634535, (GLfloat) - 0.721500,
+ (GLfloat) 1.294000, (GLfloat) - 0.633319, (GLfloat) - 0.587500,
+ (GLfloat) 1.339125, (GLfloat) - 0.632104, (GLfloat) - 0.660875,
+ (GLfloat) 1.582500, (GLfloat) - 0.646948, (GLfloat) - 0.664625,
+ (GLfloat) 1.266014, (GLfloat) - 0.569469, (GLfloat) - 0.500000,
+ (GLfloat) 1.278403, (GLfloat) - 0.609197, (GLfloat) - 0.594774,
+ (GLfloat) 1.328410, (GLfloat) - 0.569469, (GLfloat) - 0.328410,
+ (GLfloat) 1.294000, (GLfloat) - 0.633319, (GLfloat) - 0.412500,
+ (GLfloat) 1.278403, (GLfloat) - 0.609197, (GLfloat) - 0.405226,
+ (GLfloat) 1.409500, (GLfloat) - 0.655194, (GLfloat) - 0.409500,
+ (GLfloat) 1.335375, (GLfloat) - 0.646948, (GLfloat) - 0.417500,
+ (GLfloat) 1.278500, (GLfloat) - 0.634535, (GLfloat) - 0.500000,
+ (GLfloat) 1.412500, (GLfloat) - 0.633319, (GLfloat) - 0.294000,
+ (GLfloat) 1.339125, (GLfloat) - 0.632104, (GLfloat) - 0.339125,
+ (GLfloat) 1.335375, (GLfloat) - 0.646948, (GLfloat) - 0.582500,
+ (GLfloat) 1.500000, (GLfloat) - 0.569469, (GLfloat) - 0.266014,
+ (GLfloat) 1.405226, (GLfloat) - 0.609197, (GLfloat) - 0.278403,
+ (GLfloat) 1.594774, (GLfloat) - 0.609197, (GLfloat) - 0.278403,
+ (GLfloat) 1.582500, (GLfloat) - 0.646948, (GLfloat) - 0.335375,
+ (GLfloat) 1.500000, (GLfloat) - 0.634535, (GLfloat) - 0.278500,
+ (GLfloat) 1.417500, (GLfloat) - 0.646948, (GLfloat) - 0.335375,
+ (GLfloat) 1.500000, (GLfloat) - 0.657972, (GLfloat) - 0.597750,
+ (GLfloat) 1.597750, (GLfloat) - 0.657972, (GLfloat) - 0.500000,
+ (GLfloat) 1.402250, (GLfloat) - 0.657972, (GLfloat) - 0.500000,
+ (GLfloat) 1.500000, (GLfloat) - 0.657972, (GLfloat) - 0.402250,
+};
+
+GLfloat s1_6_normals[] =
+{
+ (GLfloat) 0.863661, (GLfloat) 0.210849, (GLfloat) - 0.457857,
+ (GLfloat) 0.863729, (GLfloat) 0.215548, (GLfloat) - 0.455534,
+ (GLfloat) 0.952947, (GLfloat) 0.267284, (GLfloat) - 0.143006,
+ (GLfloat) 0.953156, (GLfloat) 0.266032, (GLfloat) - 0.143950,
+ (GLfloat) 0.887569, (GLfloat) 0.433517, (GLfloat) - 0.155833,
+ (GLfloat) 0.886526, (GLfloat) 0.436070, (GLfloat) - 0.154645,
+ (GLfloat) 0.784332, (GLfloat) 0.380163, (GLfloat) - 0.490203,
+ (GLfloat) 0.785458, (GLfloat) 0.376379, (GLfloat) - 0.491319,
+ (GLfloat) 0.863661, (GLfloat) 0.210849, (GLfloat) 0.457857,
+ (GLfloat) 0.863729, (GLfloat) 0.215548, (GLfloat) 0.455534,
+ (GLfloat) 0.785458, (GLfloat) 0.376379, (GLfloat) 0.491319,
+ (GLfloat) 0.784333, (GLfloat) 0.380162, (GLfloat) 0.490203,
+ (GLfloat) 0.887569, (GLfloat) 0.433517, (GLfloat) 0.155833,
+ (GLfloat) 0.886526, (GLfloat) 0.436070, (GLfloat) 0.154645,
+ (GLfloat) 0.953156, (GLfloat) 0.266032, (GLfloat) 0.143950,
+ (GLfloat) 0.952947, (GLfloat) 0.267284, (GLfloat) 0.143006,
+ (GLfloat) - 0.476698, (GLfloat) 0.854621, (GLfloat) 0.205866,
+ (GLfloat) - 0.498450, (GLfloat) 0.848428, (GLfloat) 0.178092,
+ (GLfloat) - 0.462000, (GLfloat) 0.884194, (GLfloat) 0.068965,
+ (GLfloat) - 0.472068, (GLfloat) 0.878521, (GLfloat) 0.073162,
+ (GLfloat) 0.299348, (GLfloat) 0.942240, (GLfloat) 0.150245,
+ (GLfloat) 0.334834, (GLfloat) 0.927714, (GLfloat) 0.165022,
+ (GLfloat) 0.146237, (GLfloat) 0.884155, (GLfloat) 0.443716,
+ (GLfloat) 0.183286, (GLfloat) 0.864289, (GLfloat) 0.468413,
+ (GLfloat) - 0.498450, (GLfloat) 0.848429, (GLfloat) - 0.178092,
+ (GLfloat) - 0.476698, (GLfloat) 0.854621, (GLfloat) - 0.205865,
+ (GLfloat) 0.146237, (GLfloat) 0.884155, (GLfloat) - 0.443716,
+ (GLfloat) 0.183286, (GLfloat) 0.864289, (GLfloat) - 0.468413,
+ (GLfloat) 0.334834, (GLfloat) 0.927714, (GLfloat) - 0.165022,
+ (GLfloat) 0.299348, (GLfloat) 0.942240, (GLfloat) - 0.150245,
+ (GLfloat) - 0.472068, (GLfloat) 0.878521, (GLfloat) - 0.073162,
+ (GLfloat) - 0.462000, (GLfloat) 0.884194, (GLfloat) - 0.068965,
+ (GLfloat) 0.601151, (GLfloat) 0.064321, (GLfloat) 0.796542,
+ (GLfloat) 0.602133, (GLfloat) 0.074603, (GLfloat) 0.794903,
+ (GLfloat) 0.305416, (GLfloat) - 0.098916, (GLfloat) 0.947067,
+ (GLfloat) 0.305705, (GLfloat) - 0.083664, (GLfloat) 0.948443,
+ (GLfloat) 0.204663, (GLfloat) 0.031235, (GLfloat) 0.978334,
+ (GLfloat) 0.206924, (GLfloat) 0.024347, (GLfloat) 0.978054,
+ (GLfloat) 0.503723, (GLfloat) 0.214462, (GLfloat) 0.836821,
+ (GLfloat) 0.504738, (GLfloat) 0.210719, (GLfloat) 0.837160,
+ (GLfloat) - 0.295242, (GLfloat) - 0.450841, (GLfloat) 0.842363,
+ (GLfloat) - 0.299933, (GLfloat) - 0.431633, (GLfloat) 0.850725,
+ (GLfloat) - 0.391261, (GLfloat) - 0.341115, (GLfloat) 0.854725,
+ (GLfloat) - 0.390827, (GLfloat) - 0.342109, (GLfloat) 0.854527,
+ (GLfloat) - 0.083295, (GLfloat) - 0.151964, (GLfloat) 0.984870,
+ (GLfloat) - 0.083124, (GLfloat) - 0.152402, (GLfloat) 0.984817,
+ (GLfloat) 0.015860, (GLfloat) - 0.266588, (GLfloat) 0.963680,
+ (GLfloat) 0.013989, (GLfloat) - 0.247700, (GLfloat) 0.968736,
+ (GLfloat) - 0.816724, (GLfloat) 0.502516, (GLfloat) 0.283619,
+ (GLfloat) - 0.805591, (GLfloat) 0.530375, (GLfloat) 0.264055,
+ (GLfloat) - 0.732550, (GLfloat) 0.603459, (GLfloat) 0.314971,
+ (GLfloat) - 0.730076, (GLfloat) 0.611620, (GLfloat) 0.304811,
+ (GLfloat) - 0.516849, (GLfloat) 0.314381, (GLfloat) 0.796261,
+ (GLfloat) - 0.502724, (GLfloat) 0.272837, (GLfloat) 0.820261,
+ (GLfloat) - 0.744687, (GLfloat) 0.181500, (GLfloat) 0.642261,
+ (GLfloat) - 0.739362, (GLfloat) 0.135764, (GLfloat) 0.659478,
+ (GLfloat) - 0.549371, (GLfloat) 0.797029, (GLfloat) 0.250869,
+ (GLfloat) - 0.542332, (GLfloat) 0.789948, (GLfloat) 0.286109,
+ (GLfloat) - 0.086395, (GLfloat) 0.693389, (GLfloat) 0.715365,
+ (GLfloat) - 0.059539, (GLfloat) 0.687907, (GLfloat) 0.723353,
+ (GLfloat) - 0.265868, (GLfloat) 0.473566, (GLfloat) 0.839672,
+ (GLfloat) - 0.289224, (GLfloat) 0.481874, (GLfloat) 0.827131,
+ (GLfloat) - 0.628658, (GLfloat) 0.711043, (GLfloat) 0.314972,
+ (GLfloat) - 0.636726, (GLfloat) 0.708286, (GLfloat) 0.304813,
+ (GLfloat) - 0.602622, (GLfloat) - 0.619862, (GLfloat) 0.502612,
+ (GLfloat) - 0.608832, (GLfloat) - 0.607495, (GLfloat) 0.510170,
+ (GLfloat) - 0.718752, (GLfloat) - 0.676658, (GLfloat) 0.159776,
+ (GLfloat) - 0.721882, (GLfloat) - 0.672658, (GLfloat) 0.162535,
+ (GLfloat) - 0.782122, (GLfloat) - 0.600854, (GLfloat) 0.165107,
+ (GLfloat) - 0.776469, (GLfloat) - 0.609074, (GLfloat) 0.161631,
+ (GLfloat) - 0.682182, (GLfloat) - 0.521915, (GLfloat) 0.512086,
+ (GLfloat) - 0.675579, (GLfloat) - 0.534280, (GLfloat) 0.508073,
+ (GLfloat) - 0.608832, (GLfloat) - 0.607495, (GLfloat) - 0.510170,
+ (GLfloat) - 0.602622, (GLfloat) - 0.619862, (GLfloat) - 0.502612,
+ (GLfloat) - 0.682182, (GLfloat) - 0.521915, (GLfloat) - 0.512086,
+ (GLfloat) - 0.675579, (GLfloat) - 0.534280, (GLfloat) - 0.508073,
+ (GLfloat) - 0.776469, (GLfloat) - 0.609074, (GLfloat) - 0.161631,
+ (GLfloat) - 0.782122, (GLfloat) - 0.600854, (GLfloat) - 0.165107,
+ (GLfloat) - 0.718752, (GLfloat) - 0.676658, (GLfloat) - 0.159776,
+ (GLfloat) - 0.721882, (GLfloat) - 0.672658, (GLfloat) - 0.162535,
+ (GLfloat) - 0.870738, (GLfloat) 0.446582, (GLfloat) - 0.205866,
+ (GLfloat) - 0.865307, (GLfloat) 0.468537, (GLfloat) - 0.178091,
+ (GLfloat) - 0.899779, (GLfloat) 0.430861, (GLfloat) - 0.068965,
+ (GLfloat) - 0.894461, (GLfloat) 0.441120, (GLfloat) - 0.073162,
+ (GLfloat) - 0.988176, (GLfloat) - 0.083362, (GLfloat) - 0.128682,
+ (GLfloat) - 0.982213, (GLfloat) - 0.119589, (GLfloat) - 0.144763,
+ (GLfloat) - 0.919779, (GLfloat) 0.029098, (GLfloat) - 0.391357,
+ (GLfloat) - 0.919364, (GLfloat) - 0.008818, (GLfloat) - 0.393310,
+ (GLfloat) - 0.865307, (GLfloat) 0.468537, (GLfloat) 0.178091,
+ (GLfloat) - 0.870738, (GLfloat) 0.446582, (GLfloat) 0.205866,
+ (GLfloat) - 0.919364, (GLfloat) - 0.008818, (GLfloat) 0.393310,
+ (GLfloat) - 0.919779, (GLfloat) 0.029098, (GLfloat) 0.391357,
+ (GLfloat) - 0.982213, (GLfloat) - 0.119589, (GLfloat) 0.144763,
+ (GLfloat) - 0.988176, (GLfloat) - 0.083362, (GLfloat) 0.128682,
+ (GLfloat) - 0.894461, (GLfloat) 0.441120, (GLfloat) 0.073162,
+ (GLfloat) - 0.899779, (GLfloat) 0.430861, (GLfloat) 0.068965,
+ (GLfloat) - 0.295242, (GLfloat) - 0.450841, (GLfloat) - 0.842362,
+ (GLfloat) - 0.299933, (GLfloat) - 0.431632, (GLfloat) - 0.850725,
+ (GLfloat) 0.013989, (GLfloat) - 0.247700, (GLfloat) - 0.968736,
+ (GLfloat) 0.015860, (GLfloat) - 0.266588, (GLfloat) - 0.963680,
+ (GLfloat) - 0.083295, (GLfloat) - 0.151964, (GLfloat) - 0.984870,
+ (GLfloat) - 0.083124, (GLfloat) - 0.152402, (GLfloat) - 0.984817,
+ (GLfloat) - 0.390828, (GLfloat) - 0.342108, (GLfloat) - 0.854527,
+ (GLfloat) - 0.391261, (GLfloat) - 0.341115, (GLfloat) - 0.854725,
+ (GLfloat) 0.602133, (GLfloat) 0.074603, (GLfloat) - 0.794903,
+ (GLfloat) 0.601151, (GLfloat) 0.064322, (GLfloat) - 0.796542,
+ (GLfloat) 0.503722, (GLfloat) 0.214463, (GLfloat) - 0.836821,
+ (GLfloat) 0.504737, (GLfloat) 0.210719, (GLfloat) - 0.837161,
+ (GLfloat) 0.206924, (GLfloat) 0.024347, (GLfloat) - 0.978054,
+ (GLfloat) 0.204663, (GLfloat) 0.031235, (GLfloat) - 0.978334,
+ (GLfloat) 0.305416, (GLfloat) - 0.098916, (GLfloat) - 0.947067,
+ (GLfloat) 0.305705, (GLfloat) - 0.083664, (GLfloat) - 0.948443,
+ (GLfloat) - 0.549371, (GLfloat) 0.797029, (GLfloat) - 0.250870,
+ (GLfloat) - 0.542332, (GLfloat) 0.789948, (GLfloat) - 0.286110,
+ (GLfloat) - 0.628658, (GLfloat) 0.711043, (GLfloat) - 0.314972,
+ (GLfloat) - 0.636726, (GLfloat) 0.708286, (GLfloat) - 0.304813,
+ (GLfloat) - 0.289225, (GLfloat) 0.481875, (GLfloat) - 0.827131,
+ (GLfloat) - 0.265869, (GLfloat) 0.473567, (GLfloat) - 0.839672,
+ (GLfloat) - 0.086396, (GLfloat) 0.693390, (GLfloat) - 0.715365,
+ (GLfloat) - 0.059540, (GLfloat) 0.687907, (GLfloat) - 0.723352,
+ (GLfloat) - 0.805592, (GLfloat) 0.530374, (GLfloat) - 0.264056,
+ (GLfloat) - 0.816724, (GLfloat) 0.502516, (GLfloat) - 0.283619,
+ (GLfloat) - 0.744687, (GLfloat) 0.181500, (GLfloat) - 0.642260,
+ (GLfloat) - 0.739363, (GLfloat) 0.135764, (GLfloat) - 0.659478,
+ (GLfloat) - 0.502724, (GLfloat) 0.272838, (GLfloat) - 0.820261,
+ (GLfloat) - 0.516850, (GLfloat) 0.314382, (GLfloat) - 0.796260,
+ (GLfloat) - 0.732550, (GLfloat) 0.603460, (GLfloat) - 0.314971,
+ (GLfloat) - 0.730076, (GLfloat) 0.611620, (GLfloat) - 0.304812,
+ (GLfloat) - 0.612735, (GLfloat) 0.780498, (GLfloat) 0.124010,
+ (GLfloat) - 0.620926, (GLfloat) 0.772016, (GLfloat) 0.135801,
+ (GLfloat) - 0.683860, (GLfloat) 0.721331, (GLfloat) 0.109621,
+ (GLfloat) - 0.686475, (GLfloat) 0.718049, (GLfloat) 0.114708,
+ (GLfloat) - 0.697666, (GLfloat) 0.715659, (GLfloat) 0.033080,
+ (GLfloat) - 0.695640, (GLfloat) 0.717757, (GLfloat) 0.030164,
+ (GLfloat) - 0.638159, (GLfloat) 0.768656, (GLfloat) 0.043833,
+ (GLfloat) - 0.634338, (GLfloat) 0.772038, (GLfloat) 0.039657,
+ (GLfloat) - 0.793216, (GLfloat) 0.593605, (GLfloat) 0.135802,
+ (GLfloat) - 0.801406, (GLfloat) 0.585123, (GLfloat) 0.124011,
+ (GLfloat) - 0.790459, (GLfloat) 0.610945, (GLfloat) 0.043833,
+ (GLfloat) - 0.793705, (GLfloat) 0.607008, (GLfloat) 0.039656,
+ (GLfloat) - 0.741597, (GLfloat) 0.670167, (GLfloat) 0.030164,
+ (GLfloat) - 0.739572, (GLfloat) 0.672265, (GLfloat) 0.033079,
+ (GLfloat) - 0.744759, (GLfloat) 0.658269, (GLfloat) 0.109621,
+ (GLfloat) - 0.741569, (GLfloat) 0.660997, (GLfloat) 0.114710,
+ (GLfloat) - 0.801406, (GLfloat) 0.585123, (GLfloat) - 0.124011,
+ (GLfloat) - 0.793216, (GLfloat) 0.593605, (GLfloat) - 0.135802,
+ (GLfloat) - 0.744759, (GLfloat) 0.658269, (GLfloat) - 0.109621,
+ (GLfloat) - 0.741569, (GLfloat) 0.660997, (GLfloat) - 0.114710,
+ (GLfloat) - 0.739572, (GLfloat) 0.672265, (GLfloat) - 0.033079,
+ (GLfloat) - 0.741597, (GLfloat) 0.670167, (GLfloat) - 0.030164,
+ (GLfloat) - 0.790459, (GLfloat) 0.610945, (GLfloat) - 0.043833,
+ (GLfloat) - 0.793705, (GLfloat) 0.607008, (GLfloat) - 0.039656,
+ (GLfloat) - 0.620926, (GLfloat) 0.772016, (GLfloat) - 0.135801,
+ (GLfloat) - 0.612735, (GLfloat) 0.780498, (GLfloat) - 0.124010,
+ (GLfloat) - 0.638159, (GLfloat) 0.768656, (GLfloat) - 0.043833,
+ (GLfloat) - 0.634338, (GLfloat) 0.772038, (GLfloat) - 0.039657,
+ (GLfloat) - 0.695640, (GLfloat) 0.717757, (GLfloat) - 0.030164,
+ (GLfloat) - 0.697666, (GLfloat) 0.715659, (GLfloat) - 0.033080,
+ (GLfloat) - 0.683860, (GLfloat) 0.721331, (GLfloat) - 0.109621,
+ (GLfloat) - 0.686475, (GLfloat) 0.718049, (GLfloat) - 0.114708,
+ (GLfloat) 0.864441, (GLfloat) 0.198220, (GLfloat) - 0.462008,
+ (GLfloat) 0.865832, (GLfloat) 0.204848, (GLfloat) - 0.456478,
+ (GLfloat) 0.861398, (GLfloat) 0.190399, (GLfloat) - 0.470894,
+ (GLfloat) 0.864411, (GLfloat) 0.198309, (GLfloat) - 0.462024,
+ (GLfloat) 0.959873, (GLfloat) 0.240404, (GLfloat) - 0.144397,
+ (GLfloat) 0.959903, (GLfloat) 0.238290, (GLfloat) - 0.147664,
+ (GLfloat) 0.957414, (GLfloat) 0.250909, (GLfloat) - 0.142837,
+ (GLfloat) 0.957562, (GLfloat) 0.249145, (GLfloat) - 0.144919,
+ (GLfloat) 0.850599, (GLfloat) 0.179835, (GLfloat) - 0.494106,
+ (GLfloat) 0.855506, (GLfloat) 0.187394, (GLfloat) - 0.482693,
+ (GLfloat) 0.963921, (GLfloat) 0.218904, (GLfloat) - 0.151448,
+ (GLfloat) 0.963730, (GLfloat) 0.216664, (GLfloat) - 0.155826,
+ (GLfloat) 0.961835, (GLfloat) 0.230558, (GLfloat) - 0.147363,
+ (GLfloat) 0.961732, (GLfloat) 0.228244, (GLfloat) - 0.151580,
+ (GLfloat) 0.856249, (GLfloat) 0.184340, (GLfloat) - 0.482552,
+ (GLfloat) 0.860720, (GLfloat) 0.192749, (GLfloat) - 0.471178,
+ (GLfloat) 0.850599, (GLfloat) 0.179835, (GLfloat) 0.494106,
+ (GLfloat) 0.855506, (GLfloat) 0.187394, (GLfloat) 0.482693,
+ (GLfloat) 0.860720, (GLfloat) 0.192749, (GLfloat) 0.471179,
+ (GLfloat) 0.856249, (GLfloat) 0.184340, (GLfloat) 0.482552,
+ (GLfloat) 0.961835, (GLfloat) 0.230558, (GLfloat) 0.147363,
+ (GLfloat) 0.961732, (GLfloat) 0.228244, (GLfloat) 0.151580,
+ (GLfloat) 0.963730, (GLfloat) 0.216664, (GLfloat) 0.155826,
+ (GLfloat) 0.963921, (GLfloat) 0.218904, (GLfloat) 0.151448,
+ (GLfloat) 0.865832, (GLfloat) 0.204848, (GLfloat) 0.456478,
+ (GLfloat) 0.864441, (GLfloat) 0.198220, (GLfloat) 0.462008,
+ (GLfloat) 0.957414, (GLfloat) 0.250909, (GLfloat) 0.142837,
+ (GLfloat) 0.957562, (GLfloat) 0.249144, (GLfloat) 0.144919,
+ (GLfloat) 0.959903, (GLfloat) 0.238290, (GLfloat) 0.147664,
+ (GLfloat) 0.959873, (GLfloat) 0.240404, (GLfloat) 0.144397,
+ (GLfloat) 0.861398, (GLfloat) 0.190399, (GLfloat) 0.470894,
+ (GLfloat) 0.864411, (GLfloat) 0.198309, (GLfloat) 0.462024,
+ (GLfloat) - 0.368470, (GLfloat) - 0.398468, (GLfloat) - 0.839912,
+ (GLfloat) - 0.366469, (GLfloat) - 0.378022, (GLfloat) - 0.850177,
+ (GLfloat) - 0.433076, (GLfloat) - 0.339336, (GLfloat) - 0.835043,
+ (GLfloat) - 0.426924, (GLfloat) - 0.323639, (GLfloat) - 0.844390,
+ (GLfloat) - 0.078376, (GLfloat) - 0.184951, (GLfloat) - 0.979617,
+ (GLfloat) - 0.089636, (GLfloat) - 0.204692, (GLfloat) - 0.974714,
+ (GLfloat) - 0.031836, (GLfloat) - 0.216104, (GLfloat) - 0.975851,
+ (GLfloat) - 0.037496, (GLfloat) - 0.237942, (GLfloat) - 0.970555,
+ (GLfloat) - 0.516334, (GLfloat) - 0.149595, (GLfloat) - 0.843220,
+ (GLfloat) - 0.522141, (GLfloat) - 0.155987, (GLfloat) - 0.838473,
+ (GLfloat) - 0.160863, (GLfloat) - 0.078983, (GLfloat) - 0.983811,
+ (GLfloat) - 0.162216, (GLfloat) - 0.080222, (GLfloat) - 0.983489,
+ (GLfloat) - 0.124313, (GLfloat) - 0.142798, (GLfloat) - 0.981914,
+ (GLfloat) - 0.134702, (GLfloat) - 0.155051, (GLfloat) - 0.978680,
+ (GLfloat) - 0.485511, (GLfloat) - 0.259251, (GLfloat) - 0.834906,
+ (GLfloat) - 0.481803, (GLfloat) - 0.253626, (GLfloat) - 0.838773,
+ (GLfloat) 0.539229, (GLfloat) 0.099743, (GLfloat) - 0.836232,
+ (GLfloat) 0.527244, (GLfloat) 0.088685, (GLfloat) - 0.845073,
+ (GLfloat) 0.560111, (GLfloat) 0.087128, (GLfloat) - 0.823823,
+ (GLfloat) 0.546849, (GLfloat) 0.072324, (GLfloat) - 0.834101,
+ (GLfloat) 0.201167, (GLfloat) - 0.045810, (GLfloat) - 0.978485,
+ (GLfloat) 0.215853, (GLfloat) - 0.030110, (GLfloat) - 0.975962,
+ (GLfloat) 0.175573, (GLfloat) - 0.002365, (GLfloat) - 0.984464,
+ (GLfloat) 0.184916, (GLfloat) 0.005715, (GLfloat) - 0.982738,
+ (GLfloat) 0.593439, (GLfloat) 0.077285, (GLfloat) - 0.801160,
+ (GLfloat) 0.587937, (GLfloat) 0.063575, (GLfloat) - 0.806405,
+ (GLfloat) 0.272897, (GLfloat) - 0.086428, (GLfloat) - 0.958153,
+ (GLfloat) 0.279890, (GLfloat) - 0.067483, (GLfloat) - 0.957657,
+ (GLfloat) 0.236530, (GLfloat) - 0.071307, (GLfloat) - 0.969004,
+ (GLfloat) 0.249518, (GLfloat) - 0.051953, (GLfloat) - 0.966975,
+ (GLfloat) 0.579087, (GLfloat) 0.080825, (GLfloat) - 0.811250,
+ (GLfloat) 0.568834, (GLfloat) 0.065408, (GLfloat) - 0.819847,
+ (GLfloat) - 0.366469, (GLfloat) - 0.378021, (GLfloat) 0.850177,
+ (GLfloat) - 0.368470, (GLfloat) - 0.398468, (GLfloat) 0.839912,
+ (GLfloat) - 0.031836, (GLfloat) - 0.216104, (GLfloat) 0.975851,
+ (GLfloat) - 0.037496, (GLfloat) - 0.237942, (GLfloat) 0.970555,
+ (GLfloat) - 0.089636, (GLfloat) - 0.204692, (GLfloat) 0.974714,
+ (GLfloat) - 0.078376, (GLfloat) - 0.184951, (GLfloat) 0.979617,
+ (GLfloat) - 0.433076, (GLfloat) - 0.339336, (GLfloat) 0.835043,
+ (GLfloat) - 0.426924, (GLfloat) - 0.323639, (GLfloat) 0.844389,
+ (GLfloat) 0.593439, (GLfloat) 0.077284, (GLfloat) 0.801160,
+ (GLfloat) 0.587937, (GLfloat) 0.063575, (GLfloat) 0.806405,
+ (GLfloat) 0.568834, (GLfloat) 0.065408, (GLfloat) 0.819847,
+ (GLfloat) 0.579087, (GLfloat) 0.080825, (GLfloat) 0.811249,
+ (GLfloat) 0.236530, (GLfloat) - 0.071307, (GLfloat) 0.969004,
+ (GLfloat) 0.249518, (GLfloat) - 0.051953, (GLfloat) 0.966975,
+ (GLfloat) 0.279890, (GLfloat) - 0.067483, (GLfloat) 0.957657,
+ (GLfloat) 0.272897, (GLfloat) - 0.086428, (GLfloat) 0.958153,
+ (GLfloat) 0.527244, (GLfloat) 0.088685, (GLfloat) 0.845073,
+ (GLfloat) 0.539229, (GLfloat) 0.099743, (GLfloat) 0.836232,
+ (GLfloat) 0.175573, (GLfloat) - 0.002365, (GLfloat) 0.984464,
+ (GLfloat) 0.184916, (GLfloat) 0.005715, (GLfloat) 0.982738,
+ (GLfloat) 0.215853, (GLfloat) - 0.030110, (GLfloat) 0.975962,
+ (GLfloat) 0.201167, (GLfloat) - 0.045810, (GLfloat) 0.978485,
+ (GLfloat) 0.560111, (GLfloat) 0.087128, (GLfloat) 0.823823,
+ (GLfloat) 0.546849, (GLfloat) 0.072324, (GLfloat) 0.834101,
+ (GLfloat) - 0.516334, (GLfloat) - 0.149595, (GLfloat) 0.843220,
+ (GLfloat) - 0.522141, (GLfloat) - 0.155986, (GLfloat) 0.838473,
+ (GLfloat) - 0.481803, (GLfloat) - 0.253626, (GLfloat) 0.838773,
+ (GLfloat) - 0.485511, (GLfloat) - 0.259250, (GLfloat) 0.834906,
+ (GLfloat) - 0.124313, (GLfloat) - 0.142798, (GLfloat) 0.981914,
+ (GLfloat) - 0.134702, (GLfloat) - 0.155051, (GLfloat) 0.978680,
+ (GLfloat) - 0.162216, (GLfloat) - 0.080222, (GLfloat) 0.983489,
+ (GLfloat) - 0.160863, (GLfloat) - 0.078982, (GLfloat) 0.983811,
+ (GLfloat) - 0.686861, (GLfloat) - 0.525025, (GLfloat) - 0.502564,
+ (GLfloat) - 0.684324, (GLfloat) - 0.536936, (GLfloat) - 0.493357,
+ (GLfloat) - 0.799089, (GLfloat) - 0.580700, (GLfloat) - 0.155709,
+ (GLfloat) - 0.801122, (GLfloat) - 0.576989, (GLfloat) - 0.159016,
+ (GLfloat) - 0.862913, (GLfloat) - 0.481876, (GLfloat) - 0.152238,
+ (GLfloat) - 0.863678, (GLfloat) - 0.479780, (GLfloat) - 0.154502,
+ (GLfloat) - 0.750556, (GLfloat) - 0.441554, (GLfloat) - 0.491625,
+ (GLfloat) - 0.750719, (GLfloat) - 0.448983, (GLfloat) - 0.484598,
+ (GLfloat) - 0.686861, (GLfloat) - 0.525025, (GLfloat) 0.502564,
+ (GLfloat) - 0.684324, (GLfloat) - 0.536936, (GLfloat) 0.493357,
+ (GLfloat) - 0.750719, (GLfloat) - 0.448983, (GLfloat) 0.484598,
+ (GLfloat) - 0.750556, (GLfloat) - 0.441554, (GLfloat) 0.491625,
+ (GLfloat) - 0.862913, (GLfloat) - 0.481876, (GLfloat) 0.152238,
+ (GLfloat) - 0.863678, (GLfloat) - 0.479780, (GLfloat) 0.154503,
+ (GLfloat) - 0.801122, (GLfloat) - 0.576990, (GLfloat) 0.159016,
+ (GLfloat) - 0.799089, (GLfloat) - 0.580700, (GLfloat) 0.155709,
+ (GLfloat) - 0.845506, (GLfloat) - 0.204102, (GLfloat) 0.493419,
+ (GLfloat) - 0.849139, (GLfloat) - 0.212205, (GLfloat) 0.483666,
+ (GLfloat) - 0.962881, (GLfloat) - 0.220433, (GLfloat) 0.155789,
+ (GLfloat) - 0.962834, (GLfloat) - 0.223594, (GLfloat) 0.151516,
+ (GLfloat) - 0.918492, (GLfloat) - 0.365350, (GLfloat) 0.151297,
+ (GLfloat) - 0.918584, (GLfloat) - 0.364876, (GLfloat) 0.151885,
+ (GLfloat) - 0.806201, (GLfloat) - 0.341087, (GLfloat) 0.483425,
+ (GLfloat) - 0.806184, (GLfloat) - 0.341015, (GLfloat) 0.483504,
+ (GLfloat) - 0.849139, (GLfloat) - 0.212204, (GLfloat) - 0.483666,
+ (GLfloat) - 0.845506, (GLfloat) - 0.204102, (GLfloat) - 0.493419,
+ (GLfloat) - 0.806201, (GLfloat) - 0.341087, (GLfloat) - 0.483425,
+ (GLfloat) - 0.806184, (GLfloat) - 0.341015, (GLfloat) - 0.483504,
+ (GLfloat) - 0.918584, (GLfloat) - 0.364876, (GLfloat) - 0.151885,
+ (GLfloat) - 0.918492, (GLfloat) - 0.365350, (GLfloat) - 0.151297,
+ (GLfloat) - 0.962881, (GLfloat) - 0.220433, (GLfloat) - 0.155789,
+ (GLfloat) - 0.962834, (GLfloat) - 0.223594, (GLfloat) - 0.151516,
+ (GLfloat) - 0.503594, (GLfloat) 0.204765, (GLfloat) - 0.839324,
+ (GLfloat) - 0.503594, (GLfloat) 0.204765, (GLfloat) - 0.839324,
+ (GLfloat) - 0.161047, (GLfloat) 0.200914, (GLfloat) - 0.966280,
+ (GLfloat) - 0.161047, (GLfloat) 0.200914, (GLfloat) - 0.966280,
+ (GLfloat) - 0.165393, (GLfloat) 0.154386, (GLfloat) - 0.974069,
+ (GLfloat) - 0.162365, (GLfloat) 0.156806, (GLfloat) - 0.974192,
+ (GLfloat) - 0.508257, (GLfloat) 0.155255, (GLfloat) - 0.847095,
+ (GLfloat) - 0.512203, (GLfloat) 0.151943, (GLfloat) - 0.845318,
+ (GLfloat) 0.503594, (GLfloat) 0.204765, (GLfloat) - 0.839324,
+ (GLfloat) 0.503594, (GLfloat) 0.204765, (GLfloat) - 0.839324,
+ (GLfloat) 0.506875, (GLfloat) 0.175794, (GLfloat) - 0.843904,
+ (GLfloat) 0.506455, (GLfloat) 0.176110, (GLfloat) - 0.844091,
+ (GLfloat) 0.160943, (GLfloat) 0.163176, (GLfloat) - 0.973381,
+ (GLfloat) 0.162221, (GLfloat) 0.162243, (GLfloat) - 0.973325,
+ (GLfloat) 0.161047, (GLfloat) 0.200914, (GLfloat) - 0.966280,
+ (GLfloat) 0.161047, (GLfloat) 0.200914, (GLfloat) - 0.966280,
+ (GLfloat) 0.521791, (GLfloat) 0.120579, (GLfloat) - 0.844509,
+ (GLfloat) 0.514604, (GLfloat) 0.123502, (GLfloat) - 0.848487,
+ (GLfloat) 0.164688, (GLfloat) 0.065494, (GLfloat) - 0.984169,
+ (GLfloat) 0.164274, (GLfloat) 0.065656, (GLfloat) - 0.984227,
+ (GLfloat) 0.162599, (GLfloat) 0.118143, (GLfloat) - 0.979594,
+ (GLfloat) 0.160323, (GLfloat) 0.119382, (GLfloat) - 0.979819,
+ (GLfloat) 0.509344, (GLfloat) 0.149891, (GLfloat) - 0.847409,
+ (GLfloat) 0.511715, (GLfloat) 0.148557, (GLfloat) - 0.846214,
+ (GLfloat) - 0.523595, (GLfloat) - 0.008036, (GLfloat) - 0.851929,
+ (GLfloat) - 0.537099, (GLfloat) - 0.019782, (GLfloat) - 0.843287,
+ (GLfloat) - 0.515557, (GLfloat) 0.088028, (GLfloat) - 0.852322,
+ (GLfloat) - 0.525730, (GLfloat) 0.079884, (GLfloat) - 0.846892,
+ (GLfloat) - 0.173169, (GLfloat) 0.095066, (GLfloat) - 0.980293,
+ (GLfloat) - 0.165823, (GLfloat) 0.100484, (GLfloat) - 0.981023,
+ (GLfloat) - 0.177991, (GLfloat) 0.018184, (GLfloat) - 0.983864,
+ (GLfloat) - 0.169802, (GLfloat) 0.024484, (GLfloat) - 0.985174,
+ (GLfloat) - 0.839324, (GLfloat) 0.204765, (GLfloat) - 0.503594,
+ (GLfloat) - 0.839323, (GLfloat) 0.204765, (GLfloat) - 0.503595,
+ (GLfloat) - 0.849441, (GLfloat) 0.151406, (GLfloat) - 0.505496,
+ (GLfloat) - 0.847954, (GLfloat) 0.148744, (GLfloat) - 0.508773,
+ (GLfloat) - 0.975887, (GLfloat) 0.146977, (GLfloat) - 0.161379,
+ (GLfloat) - 0.975827, (GLfloat) 0.145984, (GLfloat) - 0.162638,
+ (GLfloat) - 0.966280, (GLfloat) 0.200913, (GLfloat) - 0.161047,
+ (GLfloat) - 0.966280, (GLfloat) 0.200913, (GLfloat) - 0.161047,
+ (GLfloat) - 0.869115, (GLfloat) - 0.045798, (GLfloat) - 0.492485,
+ (GLfloat) - 0.862005, (GLfloat) - 0.035136, (GLfloat) - 0.505681,
+ (GLfloat) - 0.985988, (GLfloat) - 0.044696, (GLfloat) - 0.160715,
+ (GLfloat) - 0.986683, (GLfloat) - 0.048596, (GLfloat) - 0.155223,
+ (GLfloat) - 0.984333, (GLfloat) 0.067324, (GLfloat) - 0.162959,
+ (GLfloat) - 0.984743, (GLfloat) 0.069793, (GLfloat) - 0.159404,
+ (GLfloat) - 0.856976, (GLfloat) 0.069431, (GLfloat) - 0.510658,
+ (GLfloat) - 0.861737, (GLfloat) 0.075800, (GLfloat) - 0.501660,
+ (GLfloat) - 0.869115, (GLfloat) - 0.045798, (GLfloat) 0.492485,
+ (GLfloat) - 0.862005, (GLfloat) - 0.035136, (GLfloat) 0.505681,
+ (GLfloat) - 0.856976, (GLfloat) 0.069431, (GLfloat) 0.510659,
+ (GLfloat) - 0.861738, (GLfloat) 0.075800, (GLfloat) 0.501660,
+ (GLfloat) - 0.984743, (GLfloat) 0.069793, (GLfloat) 0.159404,
+ (GLfloat) - 0.984333, (GLfloat) 0.067324, (GLfloat) 0.162959,
+ (GLfloat) - 0.986683, (GLfloat) - 0.048596, (GLfloat) 0.155223,
+ (GLfloat) - 0.985988, (GLfloat) - 0.044696, (GLfloat) 0.160715,
+ (GLfloat) - 0.839324, (GLfloat) 0.204766, (GLfloat) 0.503594,
+ (GLfloat) - 0.839323, (GLfloat) 0.204765, (GLfloat) 0.503595,
+ (GLfloat) - 0.966280, (GLfloat) 0.200913, (GLfloat) 0.161047,
+ (GLfloat) - 0.966280, (GLfloat) 0.200913, (GLfloat) 0.161047,
+ (GLfloat) - 0.975887, (GLfloat) 0.146977, (GLfloat) 0.161379,
+ (GLfloat) - 0.975827, (GLfloat) 0.145984, (GLfloat) 0.162638,
+ (GLfloat) - 0.847954, (GLfloat) 0.148744, (GLfloat) 0.508773,
+ (GLfloat) - 0.849441, (GLfloat) 0.151406, (GLfloat) 0.505496,
+ (GLfloat) - 0.503594, (GLfloat) 0.204766, (GLfloat) 0.839324,
+ (GLfloat) - 0.503595, (GLfloat) 0.204765, (GLfloat) 0.839323,
+ (GLfloat) - 0.512203, (GLfloat) 0.151943, (GLfloat) 0.845318,
+ (GLfloat) - 0.508258, (GLfloat) 0.155255, (GLfloat) 0.847095,
+ (GLfloat) - 0.165393, (GLfloat) 0.154386, (GLfloat) 0.974069,
+ (GLfloat) - 0.162365, (GLfloat) 0.156806, (GLfloat) 0.974192,
+ (GLfloat) - 0.161047, (GLfloat) 0.200914, (GLfloat) 0.966280,
+ (GLfloat) - 0.161047, (GLfloat) 0.200914, (GLfloat) 0.966280,
+ (GLfloat) - 0.537099, (GLfloat) - 0.019782, (GLfloat) 0.843287,
+ (GLfloat) - 0.523595, (GLfloat) - 0.008036, (GLfloat) 0.851930,
+ (GLfloat) - 0.177991, (GLfloat) 0.018183, (GLfloat) 0.983864,
+ (GLfloat) - 0.169802, (GLfloat) 0.024484, (GLfloat) 0.985174,
+ (GLfloat) - 0.165823, (GLfloat) 0.100484, (GLfloat) 0.981023,
+ (GLfloat) - 0.173169, (GLfloat) 0.095066, (GLfloat) 0.980293,
+ (GLfloat) - 0.515557, (GLfloat) 0.088028, (GLfloat) 0.852322,
+ (GLfloat) - 0.525730, (GLfloat) 0.079884, (GLfloat) 0.846892,
+ (GLfloat) 0.514604, (GLfloat) 0.123503, (GLfloat) 0.848487,
+ (GLfloat) 0.521791, (GLfloat) 0.120579, (GLfloat) 0.844509,
+ (GLfloat) 0.509344, (GLfloat) 0.149891, (GLfloat) 0.847409,
+ (GLfloat) 0.511715, (GLfloat) 0.148557, (GLfloat) 0.846214,
+ (GLfloat) 0.160323, (GLfloat) 0.119382, (GLfloat) 0.979819,
+ (GLfloat) 0.162599, (GLfloat) 0.118143, (GLfloat) 0.979594,
+ (GLfloat) 0.164688, (GLfloat) 0.065494, (GLfloat) 0.984169,
+ (GLfloat) 0.164275, (GLfloat) 0.065655, (GLfloat) 0.984227,
+ (GLfloat) 0.503594, (GLfloat) 0.204766, (GLfloat) 0.839324,
+ (GLfloat) 0.503595, (GLfloat) 0.204765, (GLfloat) 0.839323,
+ (GLfloat) 0.161047, (GLfloat) 0.200914, (GLfloat) 0.966280,
+ (GLfloat) 0.161047, (GLfloat) 0.200914, (GLfloat) 0.966280,
+ (GLfloat) 0.160943, (GLfloat) 0.163176, (GLfloat) 0.973381,
+ (GLfloat) 0.162221, (GLfloat) 0.162243, (GLfloat) 0.973325,
+ (GLfloat) 0.506455, (GLfloat) 0.176110, (GLfloat) 0.844090,
+ (GLfloat) 0.506875, (GLfloat) 0.175794, (GLfloat) 0.843904,
+ (GLfloat) 0.839324, (GLfloat) 0.204766, (GLfloat) 0.503594,
+ (GLfloat) 0.839323, (GLfloat) 0.204765, (GLfloat) 0.503595,
+ (GLfloat) 0.842767, (GLfloat) 0.188271, (GLfloat) 0.504280,
+ (GLfloat) 0.842301, (GLfloat) 0.187401, (GLfloat) 0.505381,
+ (GLfloat) 0.968491, (GLfloat) 0.190085, (GLfloat) 0.160914,
+ (GLfloat) 0.968481, (GLfloat) 0.189712, (GLfloat) 0.161414,
+ (GLfloat) 0.966280, (GLfloat) 0.200913, (GLfloat) 0.161047,
+ (GLfloat) 0.966280, (GLfloat) 0.200913, (GLfloat) 0.161047,
+ (GLfloat) 0.850151, (GLfloat) 0.182077, (GLfloat) 0.494055,
+ (GLfloat) 0.846712, (GLfloat) 0.177186, (GLfloat) 0.501681,
+ (GLfloat) 0.966795, (GLfloat) 0.202453, (GLfloat) 0.155950,
+ (GLfloat) 0.966634, (GLfloat) 0.200782, (GLfloat) 0.159079,
+ (GLfloat) 0.968271, (GLfloat) 0.191230, (GLfloat) 0.160881,
+ (GLfloat) 0.968343, (GLfloat) 0.192206, (GLfloat) 0.159274,
+ (GLfloat) 0.844217, (GLfloat) 0.179436, (GLfloat) 0.505074,
+ (GLfloat) 0.845886, (GLfloat) 0.181962, (GLfloat) 0.501364,
+ (GLfloat) 0.846712, (GLfloat) 0.177186, (GLfloat) - 0.501682,
+ (GLfloat) 0.850151, (GLfloat) 0.182077, (GLfloat) - 0.494055,
+ (GLfloat) 0.844217, (GLfloat) 0.179436, (GLfloat) - 0.505074,
+ (GLfloat) 0.845886, (GLfloat) 0.181962, (GLfloat) - 0.501365,
+ (GLfloat) 0.968343, (GLfloat) 0.192206, (GLfloat) - 0.159274,
+ (GLfloat) 0.968271, (GLfloat) 0.191230, (GLfloat) - 0.160881,
+ (GLfloat) 0.966795, (GLfloat) 0.202453, (GLfloat) - 0.155950,
+ (GLfloat) 0.966634, (GLfloat) 0.200782, (GLfloat) - 0.159079,
+ (GLfloat) 0.839324, (GLfloat) 0.204765, (GLfloat) - 0.503594,
+ (GLfloat) 0.839323, (GLfloat) 0.204765, (GLfloat) - 0.503595,
+ (GLfloat) 0.966280, (GLfloat) 0.200913, (GLfloat) - 0.161047,
+ (GLfloat) 0.966280, (GLfloat) 0.200913, (GLfloat) - 0.161047,
+ (GLfloat) 0.968491, (GLfloat) 0.190085, (GLfloat) - 0.160914,
+ (GLfloat) 0.968481, (GLfloat) 0.189713, (GLfloat) - 0.161414,
+ (GLfloat) 0.842301, (GLfloat) 0.187401, (GLfloat) - 0.505381,
+ (GLfloat) 0.842767, (GLfloat) 0.188271, (GLfloat) - 0.504280,
+ (GLfloat) 0.831768, (GLfloat) 0.243104, (GLfloat) 0.499061,
+ (GLfloat) 0.831768, (GLfloat) 0.243103, (GLfloat) 0.499062,
+ (GLfloat) 0.957902, (GLfloat) 0.238609, (GLfloat) 0.159651,
+ (GLfloat) 0.957902, (GLfloat) 0.238611, (GLfloat) 0.159650,
+ (GLfloat) 0.982539, (GLfloat) 0.084307, (GLfloat) 0.165861,
+ (GLfloat) 0.982460, (GLfloat) 0.089222, (GLfloat) 0.163743,
+ (GLfloat) 0.853634, (GLfloat) 0.079021, (GLfloat) 0.514845,
+ (GLfloat) 0.854444, (GLfloat) 0.084251, (GLfloat) 0.512667,
+ (GLfloat) 0.831768, (GLfloat) 0.243103, (GLfloat) - 0.499062,
+ (GLfloat) 0.831768, (GLfloat) 0.243104, (GLfloat) - 0.499061,
+ (GLfloat) 0.853634, (GLfloat) 0.079020, (GLfloat) - 0.514845,
+ (GLfloat) 0.854444, (GLfloat) 0.084251, (GLfloat) - 0.512667,
+ (GLfloat) 0.982460, (GLfloat) 0.089222, (GLfloat) - 0.163743,
+ (GLfloat) 0.982539, (GLfloat) 0.084307, (GLfloat) - 0.165861,
+ (GLfloat) 0.957902, (GLfloat) 0.238609, (GLfloat) - 0.159651,
+ (GLfloat) 0.957902, (GLfloat) 0.238611, (GLfloat) - 0.159650,
+ (GLfloat) 0.283620, (GLfloat) - 0.936578, (GLfloat) - 0.205866,
+ (GLfloat) 0.264056, (GLfloat) - 0.947923, (GLfloat) - 0.178092,
+ (GLfloat) 0.315105, (GLfloat) - 0.946548, (GLfloat) - 0.068965,
+ (GLfloat) 0.304029, (GLfloat) - 0.949849, (GLfloat) - 0.073163,
+ (GLfloat) 0.811943, (GLfloat) - 0.566920, (GLfloat) - 0.139104,
+ (GLfloat) 0.830641, (GLfloat) - 0.534923, (GLfloat) - 0.154571,
+ (GLfloat) 0.677706, (GLfloat) - 0.609532, (GLfloat) - 0.411322,
+ (GLfloat) 0.690948, (GLfloat) - 0.577758, (GLfloat) - 0.434496,
+ (GLfloat) 0.264055, (GLfloat) - 0.947923, (GLfloat) 0.178092,
+ (GLfloat) 0.283620, (GLfloat) - 0.936578, (GLfloat) 0.205866,
+ (GLfloat) 0.677707, (GLfloat) - 0.609531, (GLfloat) 0.411322,
+ (GLfloat) 0.690948, (GLfloat) - 0.577758, (GLfloat) 0.434496,
+ (GLfloat) 0.830641, (GLfloat) - 0.534923, (GLfloat) 0.154571,
+ (GLfloat) 0.811943, (GLfloat) - 0.566920, (GLfloat) 0.139104,
+ (GLfloat) 0.304029, (GLfloat) - 0.949849, (GLfloat) 0.073163,
+ (GLfloat) 0.315105, (GLfloat) - 0.946548, (GLfloat) 0.068965,
+ (GLfloat) 0.499061, (GLfloat) 0.243103, (GLfloat) - 0.831768,
+ (GLfloat) 0.499061, (GLfloat) 0.243104, (GLfloat) - 0.831768,
+ (GLfloat) 0.159650, (GLfloat) 0.238610, (GLfloat) - 0.957902,
+ (GLfloat) 0.159651, (GLfloat) 0.238610, (GLfloat) - 0.957902,
+ (GLfloat) 0.165862, (GLfloat) 0.084307, (GLfloat) - 0.982539,
+ (GLfloat) 0.163744, (GLfloat) 0.089222, (GLfloat) - 0.982460,
+ (GLfloat) 0.514845, (GLfloat) 0.079019, (GLfloat) - 0.853634,
+ (GLfloat) 0.512666, (GLfloat) 0.084251, (GLfloat) - 0.854444,
+ (GLfloat) - 0.499061, (GLfloat) 0.243104, (GLfloat) - 0.831768,
+ (GLfloat) - 0.499061, (GLfloat) 0.243103, (GLfloat) - 0.831768,
+ (GLfloat) - 0.514845, (GLfloat) 0.079019, (GLfloat) - 0.853634,
+ (GLfloat) - 0.512666, (GLfloat) 0.084251, (GLfloat) - 0.854444,
+ (GLfloat) - 0.163744, (GLfloat) 0.089222, (GLfloat) - 0.982460,
+ (GLfloat) - 0.165862, (GLfloat) 0.084307, (GLfloat) - 0.982539,
+ (GLfloat) - 0.159650, (GLfloat) 0.238610, (GLfloat) - 0.957902,
+ (GLfloat) - 0.159651, (GLfloat) 0.238610, (GLfloat) - 0.957902,
+ (GLfloat) - 0.205866, (GLfloat) - 0.936578, (GLfloat) - 0.283621,
+ (GLfloat) - 0.178092, (GLfloat) - 0.947923, (GLfloat) - 0.264056,
+ (GLfloat) - 0.068965, (GLfloat) - 0.946548, (GLfloat) - 0.315105,
+ (GLfloat) - 0.073162, (GLfloat) - 0.949849, (GLfloat) - 0.304029,
+ (GLfloat) - 0.139105, (GLfloat) - 0.566920, (GLfloat) - 0.811943,
+ (GLfloat) - 0.154572, (GLfloat) - 0.534923, (GLfloat) - 0.830641,
+ (GLfloat) - 0.411321, (GLfloat) - 0.609532, (GLfloat) - 0.677706,
+ (GLfloat) - 0.434496, (GLfloat) - 0.577758, (GLfloat) - 0.690948,
+ (GLfloat) 0.178092, (GLfloat) - 0.947923, (GLfloat) - 0.264056,
+ (GLfloat) 0.205866, (GLfloat) - 0.936578, (GLfloat) - 0.283621,
+ (GLfloat) 0.411321, (GLfloat) - 0.609532, (GLfloat) - 0.677706,
+ (GLfloat) 0.434496, (GLfloat) - 0.577758, (GLfloat) - 0.690948,
+ (GLfloat) 0.154572, (GLfloat) - 0.534923, (GLfloat) - 0.830641,
+ (GLfloat) 0.139105, (GLfloat) - 0.566920, (GLfloat) - 0.811943,
+ (GLfloat) 0.073162, (GLfloat) - 0.949849, (GLfloat) - 0.304029,
+ (GLfloat) 0.068965, (GLfloat) - 0.946548, (GLfloat) - 0.315105,
+ (GLfloat) - 0.831768, (GLfloat) 0.243104, (GLfloat) - 0.499061,
+ (GLfloat) - 0.831768, (GLfloat) 0.243103, (GLfloat) - 0.499062,
+ (GLfloat) - 0.957902, (GLfloat) 0.238609, (GLfloat) - 0.159651,
+ (GLfloat) - 0.957902, (GLfloat) 0.238611, (GLfloat) - 0.159650,
+ (GLfloat) - 0.982539, (GLfloat) 0.084307, (GLfloat) - 0.165861,
+ (GLfloat) - 0.982460, (GLfloat) 0.089222, (GLfloat) - 0.163743,
+ (GLfloat) - 0.853634, (GLfloat) 0.079020, (GLfloat) - 0.514845,
+ (GLfloat) - 0.854444, (GLfloat) 0.084251, (GLfloat) - 0.512667,
+ (GLfloat) - 0.831768, (GLfloat) 0.243103, (GLfloat) 0.499062,
+ (GLfloat) - 0.831768, (GLfloat) 0.243104, (GLfloat) 0.499061,
+ (GLfloat) - 0.853634, (GLfloat) 0.079021, (GLfloat) 0.514845,
+ (GLfloat) - 0.854444, (GLfloat) 0.084251, (GLfloat) 0.512667,
+ (GLfloat) - 0.982460, (GLfloat) 0.089222, (GLfloat) 0.163743,
+ (GLfloat) - 0.982539, (GLfloat) 0.084307, (GLfloat) 0.165861,
+ (GLfloat) - 0.957902, (GLfloat) 0.238609, (GLfloat) 0.159651,
+ (GLfloat) - 0.957902, (GLfloat) 0.238611, (GLfloat) 0.159650,
+ (GLfloat) - 0.283620, (GLfloat) - 0.936578, (GLfloat) 0.205866,
+ (GLfloat) - 0.264055, (GLfloat) - 0.947923, (GLfloat) 0.178092,
+ (GLfloat) - 0.315105, (GLfloat) - 0.946548, (GLfloat) 0.068965,
+ (GLfloat) - 0.304029, (GLfloat) - 0.949849, (GLfloat) 0.073163,
+ (GLfloat) - 0.811943, (GLfloat) - 0.566920, (GLfloat) 0.139104,
+ (GLfloat) - 0.830641, (GLfloat) - 0.534923, (GLfloat) 0.154571,
+ (GLfloat) - 0.677707, (GLfloat) - 0.609531, (GLfloat) 0.411322,
+ (GLfloat) - 0.690948, (GLfloat) - 0.577758, (GLfloat) 0.434496,
+ (GLfloat) - 0.264056, (GLfloat) - 0.947923, (GLfloat) - 0.178092,
+ (GLfloat) - 0.283620, (GLfloat) - 0.936578, (GLfloat) - 0.205866,
+ (GLfloat) - 0.677706, (GLfloat) - 0.609532, (GLfloat) - 0.411322,
+ (GLfloat) - 0.690948, (GLfloat) - 0.577758, (GLfloat) - 0.434496,
+ (GLfloat) - 0.830641, (GLfloat) - 0.534923, (GLfloat) - 0.154571,
+ (GLfloat) - 0.811943, (GLfloat) - 0.566920, (GLfloat) - 0.139104,
+ (GLfloat) - 0.304029, (GLfloat) - 0.949849, (GLfloat) - 0.073163,
+ (GLfloat) - 0.315105, (GLfloat) - 0.946548, (GLfloat) - 0.068965,
+ (GLfloat) - 0.499061, (GLfloat) 0.243104, (GLfloat) 0.831769,
+ (GLfloat) - 0.499061, (GLfloat) 0.243103, (GLfloat) 0.831768,
+ (GLfloat) - 0.159650, (GLfloat) 0.238610, (GLfloat) 0.957902,
+ (GLfloat) - 0.159651, (GLfloat) 0.238610, (GLfloat) 0.957902,
+ (GLfloat) - 0.165862, (GLfloat) 0.084307, (GLfloat) 0.982539,
+ (GLfloat) - 0.163744, (GLfloat) 0.089222, (GLfloat) 0.982460,
+ (GLfloat) - 0.514844, (GLfloat) 0.079021, (GLfloat) 0.853634,
+ (GLfloat) - 0.512667, (GLfloat) 0.084251, (GLfloat) 0.854444,
+ (GLfloat) 0.499061, (GLfloat) 0.243103, (GLfloat) 0.831768,
+ (GLfloat) 0.499061, (GLfloat) 0.243104, (GLfloat) 0.831769,
+ (GLfloat) 0.514844, (GLfloat) 0.079021, (GLfloat) 0.853634,
+ (GLfloat) 0.512667, (GLfloat) 0.084251, (GLfloat) 0.854444,
+ (GLfloat) 0.163744, (GLfloat) 0.089222, (GLfloat) 0.982460,
+ (GLfloat) 0.165862, (GLfloat) 0.084307, (GLfloat) 0.982539,
+ (GLfloat) 0.159650, (GLfloat) 0.238610, (GLfloat) 0.957902,
+ (GLfloat) 0.159651, (GLfloat) 0.238610, (GLfloat) 0.957902,
+ (GLfloat) 0.205866, (GLfloat) - 0.936578, (GLfloat) 0.283621,
+ (GLfloat) 0.178092, (GLfloat) - 0.947923, (GLfloat) 0.264055,
+ (GLfloat) 0.068965, (GLfloat) - 0.946548, (GLfloat) 0.315105,
+ (GLfloat) 0.073162, (GLfloat) - 0.949849, (GLfloat) 0.304029,
+ (GLfloat) 0.139105, (GLfloat) - 0.566920, (GLfloat) 0.811943,
+ (GLfloat) 0.154572, (GLfloat) - 0.534923, (GLfloat) 0.830641,
+ (GLfloat) 0.411321, (GLfloat) - 0.609531, (GLfloat) 0.677707,
+ (GLfloat) 0.434496, (GLfloat) - 0.577757, (GLfloat) 0.690948,
+ (GLfloat) - 0.178092, (GLfloat) - 0.947923, (GLfloat) 0.264055,
+ (GLfloat) - 0.205866, (GLfloat) - 0.936578, (GLfloat) 0.283621,
+ (GLfloat) - 0.411321, (GLfloat) - 0.609531, (GLfloat) 0.677707,
+ (GLfloat) - 0.434496, (GLfloat) - 0.577757, (GLfloat) 0.690948,
+ (GLfloat) - 0.154572, (GLfloat) - 0.534923, (GLfloat) 0.830641,
+ (GLfloat) - 0.139105, (GLfloat) - 0.566920, (GLfloat) 0.811943,
+ (GLfloat) - 0.073162, (GLfloat) - 0.949849, (GLfloat) 0.304029,
+ (GLfloat) - 0.068965, (GLfloat) - 0.946548, (GLfloat) 0.315105,
+ (GLfloat) 0.135802, (GLfloat) - 0.982944, (GLfloat) - 0.124011,
+ (GLfloat) 0.124011, (GLfloat) - 0.982944, (GLfloat) - 0.135802,
+ (GLfloat) 0.043834, (GLfloat) - 0.993006, (GLfloat) - 0.109621,
+ (GLfloat) 0.039656, (GLfloat) - 0.992607, (GLfloat) - 0.114709,
+ (GLfloat) 0.030163, (GLfloat) - 0.998998, (GLfloat) - 0.033079,
+ (GLfloat) 0.033079, (GLfloat) - 0.998998, (GLfloat) - 0.030163,
+ (GLfloat) 0.109621, (GLfloat) - 0.993006, (GLfloat) - 0.043834,
+ (GLfloat) 0.114709, (GLfloat) - 0.992607, (GLfloat) - 0.039656,
+ (GLfloat) - 0.124011, (GLfloat) - 0.982944, (GLfloat) - 0.135802,
+ (GLfloat) - 0.135802, (GLfloat) - 0.982944, (GLfloat) - 0.124011,
+ (GLfloat) - 0.109621, (GLfloat) - 0.993006, (GLfloat) - 0.043834,
+ (GLfloat) - 0.114709, (GLfloat) - 0.992607, (GLfloat) - 0.039656,
+ (GLfloat) - 0.033079, (GLfloat) - 0.998998, (GLfloat) - 0.030163,
+ (GLfloat) - 0.030163, (GLfloat) - 0.998998, (GLfloat) - 0.033079,
+ (GLfloat) - 0.043834, (GLfloat) - 0.993006, (GLfloat) - 0.109621,
+ (GLfloat) - 0.039656, (GLfloat) - 0.992607, (GLfloat) - 0.114709,
+ (GLfloat) - 0.135803, (GLfloat) - 0.982944, (GLfloat) 0.124011,
+ (GLfloat) - 0.124011, (GLfloat) - 0.982944, (GLfloat) 0.135802,
+ (GLfloat) - 0.043834, (GLfloat) - 0.993006, (GLfloat) 0.109621,
+ (GLfloat) - 0.039656, (GLfloat) - 0.992607, (GLfloat) 0.114709,
+ (GLfloat) - 0.030163, (GLfloat) - 0.998998, (GLfloat) 0.033079,
+ (GLfloat) - 0.033079, (GLfloat) - 0.998998, (GLfloat) 0.030163,
+ (GLfloat) - 0.109621, (GLfloat) - 0.993006, (GLfloat) 0.043834,
+ (GLfloat) - 0.114709, (GLfloat) - 0.992607, (GLfloat) 0.039656,
+ (GLfloat) 0.124011, (GLfloat) - 0.982944, (GLfloat) 0.135802,
+ (GLfloat) 0.135803, (GLfloat) - 0.982944, (GLfloat) 0.124011,
+ (GLfloat) 0.109621, (GLfloat) - 0.993006, (GLfloat) 0.043834,
+ (GLfloat) 0.114709, (GLfloat) - 0.992607, (GLfloat) 0.039656,
+ (GLfloat) 0.033079, (GLfloat) - 0.998998, (GLfloat) 0.030163,
+ (GLfloat) 0.030163, (GLfloat) - 0.998998, (GLfloat) 0.033079,
+ (GLfloat) 0.043834, (GLfloat) - 0.993006, (GLfloat) 0.109621,
+ (GLfloat) 0.039656, (GLfloat) - 0.992607, (GLfloat) 0.114709,
+};
+
+unsigned short int s1_6_POLS[] =
+{
+ 3, 82, 12, 76, 1, 3, 76, 74, 82, 1, 3, 22, 78, 74, 1, 3, 22, 74, 76, 1,
+ 3, 78, 20, 80, 1, 3, 80, 74, 78, 1, 3, 28, 82, 74, 1, 3, 28, 74, 80, 1,
+ 3, 88, 13, 84, 1, 3, 84, 77, 88, 1, 3, 24, 86, 77, 1, 3, 24, 77, 84, 1,
+ 3, 86, 20, 78, 1, 3, 78, 77, 86, 1, 3, 22, 88, 77, 1, 3, 22, 77, 78, 1,
+ 3, 14, 90, 85, 1, 3, 14, 85, 93, 1, 3, 26, 91, 85, 1, 3, 26, 85, 90, 1,
+ 3, 20, 86, 85, 1, 3, 20, 85, 91, 1, 3, 86, 24, 93, 1, 3, 93, 85, 86, 1,
+ 3, 15, 95, 79, 1, 3, 15, 79, 97, 1, 3, 95, 28, 80, 1, 3, 80, 79, 95, 1,
+ 3, 20, 91, 79, 1, 3, 20, 79, 80, 1, 3, 26, 97, 79, 1, 3, 26, 79, 91, 1,
+ 3, 13, 99, 83, 1, 3, 13, 83, 84, 1, 3, 99, 30, 101, 1, 3, 101, 83, 99, 1,
+ 3, 23, 102, 83, 1, 3, 23, 83, 101, 1, 3, 102, 24, 84, 1, 3, 84, 83, 102, 1,
+ 3, 108, 16, 104, 1, 3, 104, 100, 108, 1, 3, 32, 106, 100, 1, 3, 32, 100, 104, 1,
+ 3, 106, 23, 101, 1, 3, 101, 100, 106, 1, 3, 30, 108, 100, 1, 3, 30, 100, 101, 1,
+ 3, 17, 110, 105, 1, 3, 17, 105, 113, 1, 3, 110, 33, 111, 1, 3, 111, 105, 110, 1,
+ 3, 23, 106, 105, 1, 3, 23, 105, 111, 1, 3, 106, 32, 113, 1, 3, 113, 105, 106, 1,
+ 3, 114, 14, 93, 1, 3, 93, 92, 114, 1, 3, 93, 24, 102, 1, 3, 102, 92, 93, 1,
+3, 23, 111, 92, 1, 3, 23, 92, 102, 1, 3, 111, 33, 114, 1, 3, 114, 92, 111, 1,
+ 3, 16, 116, 103, 1, 3, 16, 103, 104, 1, 3, 116, 35, 118, 1, 3, 118, 103, 116, 1,
+ 3, 31, 119, 103, 1, 3, 31, 103, 118, 1, 3, 119, 32, 104, 1, 3, 104, 103, 119, 1,
+ 3, 18, 121, 117, 1, 3, 18, 117, 125, 1, 3, 121, 36, 123, 1, 3, 123, 117, 121, 1,
+ 3, 31, 118, 117, 1, 3, 31, 117, 123, 1, 3, 118, 35, 125, 1, 3, 125, 117, 118, 1,
+ 3, 19, 127, 122, 1, 3, 19, 122, 130, 1, 3, 37, 128, 122, 1, 3, 37, 122, 127, 1,
+ 3, 31, 123, 122, 1, 3, 31, 122, 128, 1, 3, 36, 130, 122, 1, 3, 36, 122, 123, 1,
+ 3, 17, 113, 112, 1, 3, 17, 112, 131, 1, 3, 32, 119, 112, 1, 3, 32, 112, 113, 1,
+ 3, 31, 128, 112, 1, 3, 31, 112, 119, 1, 3, 37, 131, 112, 1, 3, 37, 112, 128, 1,
+ 3, 121, 18, 133, 1, 3, 133, 120, 121, 1, 3, 39, 134, 120, 1, 3, 39, 120, 133, 1,
+ 3, 134, 27, 135, 1, 3, 135, 120, 134, 1, 3, 36, 121, 120, 1, 3, 36, 120, 135, 1,
+ 3, 12, 82, 81, 1, 3, 12, 81, 138, 1, 3, 82, 28, 136, 1, 3, 136, 81, 82, 1,
+3, 27, 134, 81, 1, 3, 27, 81, 136, 1, 3, 134, 39, 138, 1, 3, 138, 81, 134, 1,
+3, 95, 15, 139, 1, 3, 139, 94, 95, 1, 3, 139, 40, 140, 1, 3, 140, 94, 139, 1,
+ 3, 27, 136, 94, 1, 3, 27, 94, 140, 1, 3, 136, 28, 95, 1, 3, 95, 94, 136, 1,
+ 3, 19, 130, 129, 1, 3, 19, 129, 141, 1, 3, 130, 36, 135, 1, 3, 135, 129, 130, 1,
+ 3, 27, 140, 129, 1, 3, 27, 129, 135, 1, 3, 140, 40, 141, 1, 3, 141, 129, 140, 1,
+ 3, 14, 114, 89, 1, 3, 14, 89, 90, 1, 3, 114, 33, 142, 1, 3, 142, 89, 114, 1,
+ 3, 25, 143, 89, 1, 3, 25, 89, 142, 1, 3, 143, 26, 90, 1, 3, 90, 89, 143, 1,
+ 3, 17, 131, 109, 1, 3, 17, 109, 110, 1, 3, 131, 37, 144, 1, 3, 144, 109, 131, 1,
+ 3, 25, 142, 109, 1, 3, 25, 109, 144, 1, 3, 142, 33, 110, 1, 3, 110, 109, 142, 1,
+ 3, 19, 141, 126, 1, 3, 19, 126, 127, 1, 3, 141, 40, 145, 1, 3, 145, 126, 141, 1,
+ 3, 25, 144, 126, 1, 3, 25, 126, 145, 1, 3, 144, 37, 127, 1, 3, 127, 126, 144, 1,
+ 3, 15, 97, 96, 1, 3, 15, 96, 139, 1, 3, 97, 26, 143, 1, 3, 143, 96, 97, 1,
+3, 25, 145, 96, 1, 3, 25, 96, 143, 1, 3, 145, 40, 139, 1, 3, 139, 96, 145, 1,
+ 3, 12, 146, 75, 1, 3, 12, 75, 76, 1, 3, 146, 41, 148, 1, 3, 148, 75, 146, 1,
+ 3, 21, 149, 75, 1, 3, 21, 75, 148, 1, 3, 149, 22, 76, 1, 3, 76, 75, 149, 1,
+ 3, 155, 8, 151, 1, 3, 151, 147, 155, 1, 3, 43, 153, 147, 1, 3, 43, 147, 151, 1,
+ 3, 153, 21, 148, 1, 3, 148, 147, 153, 1, 3, 41, 155, 147, 1, 3, 41, 147, 148, 1,
+ 3, 160, 11, 157, 1, 3, 157, 152, 160, 1, 3, 44, 158, 152, 1, 3, 44, 152, 157, 1,
+ 3, 158, 21, 153, 1, 3, 153, 152, 158, 1, 3, 43, 160, 152, 1, 3, 43, 152, 153, 1,
+ 3, 13, 88, 87, 1, 3, 13, 87, 161, 1, 3, 88, 22, 149, 1, 3, 149, 87, 88, 1,
+3, 21, 158, 87, 1, 3, 21, 87, 149, 1, 3, 158, 44, 161, 1, 3, 161, 87, 158, 1,
+ 3, 18, 162, 132, 1, 3, 18, 132, 133, 1, 3, 162, 45, 164, 1, 3, 164, 132, 162, 1,
+ 3, 38, 165, 132, 1, 3, 38, 132, 164, 1, 3, 165, 39, 133, 1, 3, 133, 132, 165, 1,
+ 3, 170, 9, 167, 1, 3, 167, 163, 170, 1, 3, 47, 168, 163, 1, 3, 47, 163, 167, 1,
+ 3, 168, 38, 164, 1, 3, 164, 163, 168, 1, 3, 45, 170, 163, 1, 3, 45, 163, 164, 1,
+3, 8, 155, 154, 1, 3, 8, 154, 173, 1, 3, 155, 41, 171, 1, 3, 171, 154, 155, 1,
+ 3, 38, 168, 154, 1, 3, 38, 154, 171, 1, 3, 168, 47, 173, 1, 3, 173, 154, 168, 1,
+ 3, 146, 12, 138, 1, 3, 138, 137, 146, 1, 3, 39, 165, 137, 1, 3, 39, 137, 138, 1,
+ 3, 165, 38, 171, 1, 3, 171, 137, 165, 1, 3, 41, 146, 137, 1, 3, 41, 137, 171, 1,
+ 3, 16, 108, 107, 1, 3, 16, 107, 177, 1, 3, 108, 30, 174, 1, 3, 174, 107, 108, 1,
+ 3, 29, 176, 107, 1, 3, 29, 107, 174, 1, 3, 176, 50, 177, 1, 3, 177, 107, 176, 1,
+ 3, 99, 13, 161, 1, 3, 161, 98, 99, 1, 3, 44, 178, 98, 1, 3, 44, 98, 161, 1,
+ 3, 178, 29, 174, 1, 3, 174, 98, 178, 1, 3, 30, 99, 98, 1, 3, 30, 98, 174, 1,
+ 3, 11, 180, 156, 1, 3, 11, 156, 157, 1, 3, 180, 49, 181, 1, 3, 181, 156, 180, 1,
+ 3, 29, 178, 156, 1, 3, 29, 156, 181, 1, 3, 178, 44, 157, 1, 3, 157, 156, 178, 1,
+ 3, 185, 10, 183, 1, 3, 183, 175, 185, 1, 3, 50, 176, 175, 1, 3, 50, 175, 183, 1,
+ 3, 176, 29, 181, 1, 3, 181, 175, 176, 1, 3, 49, 185, 175, 1, 3, 49, 175, 181, 1,
+ 3, 162, 18, 125, 1, 3, 125, 124, 162, 1, 3, 35, 186, 124, 1, 3, 35, 124, 125, 1,
+ 3, 186, 34, 187, 1, 3, 187, 124, 186, 1, 3, 45, 162, 124, 1, 3, 45, 124, 187, 1,
+ 3, 116, 16, 177, 1, 3, 177, 115, 116, 1, 3, 50, 188, 115, 1, 3, 50, 115, 177, 1,
+ 3, 188, 34, 186, 1, 3, 186, 115, 188, 1, 3, 35, 116, 115, 1, 3, 35, 115, 186, 1,
+ 3, 10, 190, 182, 1, 3, 10, 182, 183, 1, 3, 190, 52, 191, 1, 3, 191, 182, 190, 1,
+ 3, 34, 188, 182, 1, 3, 34, 182, 191, 1, 3, 188, 50, 183, 1, 3, 183, 182, 188, 1,
+3, 9, 170, 169, 1, 3, 9, 169, 193, 1, 3, 170, 45, 187, 1, 3, 187, 169, 170, 1,
+ 3, 34, 191, 169, 1, 3, 34, 169, 187, 1, 3, 191, 52, 193, 1, 3, 193, 169, 191, 1,
+ 3, 201, 1, 196, 1, 3, 196, 194, 201, 1, 3, 54, 198, 194, 1, 3, 54, 194, 196, 1,
+ 3, 198, 46, 199, 1, 3, 199, 194, 198, 1, 3, 56, 201, 194, 1, 3, 56, 194, 199, 1,
+ 3, 206, 3, 203, 1, 3, 203, 197, 206, 1, 3, 55, 204, 197, 1, 3, 55, 197, 203, 1,
+ 3, 204, 46, 198, 1, 3, 198, 197, 204, 1, 3, 54, 206, 197, 1, 3, 54, 197, 198, 1,
+3, 8, 173, 172, 1, 3, 8, 172, 208, 1, 3, 173, 47, 207, 1, 3, 207, 172, 173, 1,
+ 3, 46, 204, 172, 1, 3, 46, 172, 207, 1, 3, 204, 55, 208, 1, 3, 208, 172, 204, 1,
+3, 9, 209, 166, 1, 3, 9, 166, 167, 1, 3, 209, 56, 199, 1, 3, 199, 166, 209, 1,
+ 3, 46, 207, 166, 1, 3, 46, 166, 199, 1, 3, 207, 47, 167, 1, 3, 167, 166, 207, 1,
+ 3, 214, 1, 201, 1, 3, 201, 200, 214, 1, 3, 56, 210, 200, 1, 3, 56, 200, 201, 1,
+ 3, 210, 51, 212, 1, 3, 212, 200, 210, 1, 3, 59, 214, 200, 1, 3, 59, 200, 212, 1,
+ 3, 209, 9, 193, 1, 3, 193, 192, 209, 1, 3, 52, 215, 192, 1, 3, 52, 192, 193, 1,
+ 3, 51, 210, 192, 1, 3, 51, 192, 215, 1, 3, 210, 56, 209, 1, 3, 209, 192, 210, 1,
+ 3, 190, 10, 216, 1, 3, 216, 189, 190, 1, 3, 216, 57, 217, 1, 3, 217, 189, 216, 1,
+ 3, 51, 215, 189, 1, 3, 51, 189, 217, 1, 3, 52, 190, 189, 1, 3, 52, 189, 215, 1,
+ 3, 221, 0, 219, 1, 3, 219, 211, 221, 1, 3, 59, 212, 211, 1, 3, 59, 211, 219, 1,
+ 3, 212, 51, 217, 1, 3, 217, 211, 212, 1, 3, 57, 221, 211, 1, 3, 57, 211, 217, 1,
+ 3, 226, 0, 221, 1, 3, 221, 220, 226, 1, 3, 57, 222, 220, 1, 3, 57, 220, 221, 1,
+ 3, 222, 48, 224, 1, 3, 224, 220, 222, 1, 3, 62, 226, 220, 1, 3, 62, 220, 224, 1,
+ 3, 10, 185, 184, 1, 3, 10, 184, 216, 1, 3, 185, 49, 227, 1, 3, 227, 184, 185, 1,
+ 3, 48, 222, 184, 1, 3, 48, 184, 227, 1, 3, 222, 57, 216, 1, 3, 216, 184, 222, 1,
+ 3, 11, 228, 179, 1, 3, 11, 179, 180, 1, 3, 228, 60, 229, 1, 3, 229, 179, 228, 1,
+ 3, 48, 227, 179, 1, 3, 48, 179, 229, 1, 3, 227, 49, 180, 1, 3, 180, 179, 227, 1,
+ 3, 233, 2, 231, 1, 3, 231, 223, 233, 1, 3, 62, 224, 223, 1, 3, 62, 223, 231, 1,
+ 3, 224, 48, 229, 1, 3, 229, 223, 224, 1, 3, 60, 233, 223, 1, 3, 60, 223, 229, 1,
+ 3, 237, 2, 233, 1, 3, 233, 232, 237, 1, 3, 60, 234, 232, 1, 3, 60, 232, 233, 1,
+ 3, 234, 42, 235, 1, 3, 235, 232, 234, 1, 3, 64, 237, 232, 1, 3, 64, 232, 235, 1,
+ 3, 11, 160, 159, 1, 3, 11, 159, 228, 1, 3, 160, 43, 238, 1, 3, 238, 159, 160, 1,
+ 3, 42, 234, 159, 1, 3, 42, 159, 238, 1, 3, 234, 60, 228, 1, 3, 228, 159, 234, 1,
+3, 8, 208, 150, 1, 3, 8, 150, 151, 1, 3, 208, 55, 239, 1, 3, 239, 150, 208, 1,
+ 3, 42, 238, 150, 1, 3, 42, 150, 239, 1, 3, 238, 43, 151, 1, 3, 151, 150, 238, 1,
+ 3, 203, 3, 241, 1, 3, 241, 202, 203, 1, 3, 64, 235, 202, 1, 3, 64, 202, 241, 1,
+ 3, 235, 42, 239, 1, 3, 239, 202, 235, 1, 3, 55, 203, 202, 1, 3, 55, 202, 239, 1,
+3, 2, 237, 236, 1, 3, 2, 236, 245, 1, 3, 237, 64, 242, 1, 3, 242, 236, 237, 1,
+ 3, 63, 244, 236, 1, 3, 63, 236, 242, 1, 3, 244, 68, 245, 1, 3, 245, 236, 244, 1,
+3, 3, 246, 240, 1, 3, 3, 240, 241, 1, 3, 246, 65, 248, 1, 3, 248, 240, 246, 1,
+ 3, 63, 242, 240, 1, 3, 63, 240, 248, 1, 3, 242, 64, 241, 1, 3, 241, 240, 242, 1,
+3, 4, 250, 247, 1, 3, 4, 247, 253, 1, 3, 67, 251, 247, 1, 3, 67, 247, 250, 1,
+ 3, 63, 248, 247, 1, 3, 63, 247, 251, 1, 3, 248, 65, 253, 1, 3, 253, 247, 248, 1,
+3, 7, 255, 243, 1, 3, 7, 243, 257, 1, 3, 255, 68, 244, 1, 3, 244, 243, 255, 1,
+ 3, 63, 251, 243, 1, 3, 63, 243, 244, 1, 3, 67, 257, 243, 1, 3, 67, 243, 251, 1,
+3, 3, 206, 205, 1, 3, 3, 205, 246, 1, 3, 206, 54, 258, 1, 3, 258, 205, 206, 1,
+ 3, 53, 259, 205, 1, 3, 53, 205, 258, 1, 3, 259, 65, 246, 1, 3, 246, 205, 259, 1,
+3, 1, 260, 195, 1, 3, 1, 195, 196, 1, 3, 260, 69, 262, 1, 3, 262, 195, 260, 1,
+ 3, 53, 258, 195, 1, 3, 53, 195, 262, 1, 3, 258, 54, 196, 1, 3, 196, 195, 258, 1,
+3, 5, 264, 261, 1, 3, 5, 261, 267, 1, 3, 70, 265, 261, 1, 3, 70, 261, 264, 1,
+ 3, 53, 262, 261, 1, 3, 53, 261, 265, 1, 3, 262, 69, 267, 1, 3, 267, 261, 262, 1,
+3, 4, 253, 252, 1, 3, 4, 252, 268, 1, 3, 253, 65, 259, 1, 3, 259, 252, 253, 1,
+ 3, 53, 265, 252, 1, 3, 53, 252, 259, 1, 3, 70, 268, 252, 1, 3, 70, 252, 265, 1,
+3, 1, 214, 213, 1, 3, 1, 213, 260, 1, 3, 214, 59, 269, 1, 3, 269, 213, 214, 1,
+ 3, 58, 270, 213, 1, 3, 58, 213, 269, 1, 3, 270, 69, 260, 1, 3, 260, 213, 270, 1,
+3, 0, 271, 218, 1, 3, 0, 218, 219, 1, 3, 271, 71, 273, 1, 3, 273, 218, 271, 1,
+ 3, 58, 269, 218, 1, 3, 58, 218, 273, 1, 3, 269, 59, 219, 1, 3, 219, 218, 269, 1,
+3, 6, 275, 272, 1, 3, 6, 272, 278, 1, 3, 72, 276, 272, 1, 3, 72, 272, 275, 1,
+ 3, 58, 273, 272, 1, 3, 58, 272, 276, 1, 3, 273, 71, 278, 1, 3, 278, 272, 273, 1,
+3, 5, 267, 266, 1, 3, 5, 266, 279, 1, 3, 267, 69, 270, 1, 3, 270, 266, 267, 1,
+ 3, 58, 276, 266, 1, 3, 58, 266, 270, 1, 3, 72, 279, 266, 1, 3, 72, 266, 276, 1,
+3, 0, 226, 225, 1, 3, 0, 225, 271, 1, 3, 226, 62, 280, 1, 3, 280, 225, 226, 1,
+ 3, 61, 281, 225, 1, 3, 61, 225, 280, 1, 3, 281, 71, 271, 1, 3, 271, 225, 281, 1,
+3, 2, 245, 230, 1, 3, 2, 230, 231, 1, 3, 245, 68, 282, 1, 3, 282, 230, 245, 1,
+ 3, 61, 280, 230, 1, 3, 61, 230, 282, 1, 3, 280, 62, 231, 1, 3, 231, 230, 280, 1,
+3, 7, 283, 254, 1, 3, 7, 254, 255, 1, 3, 73, 284, 254, 1, 3, 73, 254, 283, 1,
+ 3, 61, 282, 254, 1, 3, 61, 254, 284, 1, 3, 282, 68, 255, 1, 3, 255, 254, 282, 1,
+3, 6, 278, 277, 1, 3, 6, 277, 285, 1, 3, 278, 71, 281, 1, 3, 281, 277, 278, 1,
+ 3, 61, 284, 277, 1, 3, 61, 277, 281, 1, 3, 73, 285, 277, 1, 3, 73, 277, 284, 1,
+3, 4, 268, 249, 1, 3, 4, 249, 250, 1, 3, 268, 70, 286, 1, 3, 286, 249, 268, 1,
+ 3, 66, 287, 249, 1, 3, 66, 249, 286, 1, 3, 287, 67, 250, 1, 3, 250, 249, 287, 1,
+3, 5, 279, 263, 1, 3, 5, 263, 264, 1, 3, 279, 72, 288, 1, 3, 288, 263, 279, 1,
+ 3, 66, 286, 263, 1, 3, 66, 263, 288, 1, 3, 286, 70, 264, 1, 3, 264, 263, 286, 1,
+3, 6, 285, 274, 1, 3, 6, 274, 275, 1, 3, 285, 73, 289, 1, 3, 289, 274, 285, 1,
+ 3, 66, 288, 274, 1, 3, 66, 274, 289, 1, 3, 288, 72, 275, 1, 3, 275, 274, 288, 1,
+3, 7, 257, 256, 1, 3, 7, 256, 283, 1, 3, 257, 67, 287, 1, 3, 287, 256, 257, 1,
+ 3, 66, 289, 256, 1, 3, 66, 256, 287, 1, 3, 289, 73, 283, 1, 3, 283, 256, 289, 1,
+
+ 0
+};
+
+struct lwo LWO_s1_6 =
+{
+ 290, /* number of points */
+ s1_6_PNTS, s1_6_normals, s1_6_POLS, 0L
+};
+
+#endif /* USE_GL */
+
+/* End of s1_6.c */
--- /dev/null
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)s1_b.c 4.2 97/04/20 xlockmore";
+
+#endif
+
+/*-
+ * Points to render "s1_b" in 3D.
+ *
+ * Generated by lw2ogl. Link this with your program but do
+ * not edit by hand.
+ */
+
+#include "xlock.h"
+
+#ifdef USE_GL
+
+#include <GL/gl.h>
+#include "glx/buildlwo.h"
+
+GLfloat s1_b_PNTS[] =
+{
+ (GLfloat) - 0.137893, (GLfloat) 0.043508, (GLfloat) - 0.125711,
+ (GLfloat) - 0.095845, (GLfloat) - 0.165656, (GLfloat) 0.072892,
+ (GLfloat) - 0.093165, (GLfloat) 0.152051, (GLfloat) 0.327744,
+ (GLfloat) - 0.003795, (GLfloat) 0.001470, (GLfloat) - 0.102225,
+ (GLfloat) 0.152845, (GLfloat) - 0.430757, (GLfloat) - 0.031907,
+ (GLfloat) - 0.118828, (GLfloat) 0.399389, (GLfloat) 0.091047,
+ (GLfloat) - 0.169137, (GLfloat) - 0.181241, (GLfloat) - 0.288763,
+ (GLfloat) 0.048660, (GLfloat) 0.018262, (GLfloat) - 0.035049,
+ (GLfloat) 0.008859, (GLfloat) 0.208004, (GLfloat) - 0.059048,
+ (GLfloat) - 0.009212, (GLfloat) - 0.042229, (GLfloat) - 0.000692,
+ (GLfloat) - 0.040025, (GLfloat) 0.115695, (GLfloat) 0.178962,
+ (GLfloat) - 0.198525, (GLfloat) 0.018630, (GLfloat) 0.257202,
+ (GLfloat) 0.205081, (GLfloat) - 0.244569, (GLfloat) 0.136314,
+ (GLfloat) - 0.214336, (GLfloat) - 0.149946, (GLfloat) - 0.006872,
+ (GLfloat) 0.245675, (GLfloat) - 0.227316, (GLfloat) - 0.184201,
+ (GLfloat) - 0.001494, (GLfloat) 0.259139, (GLfloat) - 0.260652,
+ (GLfloat) 0.070243, (GLfloat) 0.038750, (GLfloat) 0.069425,
+ (GLfloat) - 0.033229, (GLfloat) - 0.259151, (GLfloat) 0.298856,
+ (GLfloat) 0.088773, (GLfloat) - 0.065324, (GLfloat) 0.260294,
+ (GLfloat) 0.009195, (GLfloat) 0.078651, (GLfloat) 0.055543,
+ (GLfloat) - 0.090795, (GLfloat) 0.025672, (GLfloat) 0.056988,
+ (GLfloat) - 0.163707, (GLfloat) - 0.011627, (GLfloat) - 0.096395,
+ (GLfloat) 0.068886, (GLfloat) 0.257031, (GLfloat) - 0.264175,
+ (GLfloat) - 0.018086, (GLfloat) - 0.285526, (GLfloat) 0.152989,
+ (GLfloat) - 0.017489, (GLfloat) 0.031671, (GLfloat) 0.000107,
+ (GLfloat) - 0.075583, (GLfloat) - 0.097617, (GLfloat) 0.030074,
+ (GLfloat) 0.129221, (GLfloat) - 0.087628, (GLfloat) 0.171748,
+ (GLfloat) - 0.007530, (GLfloat) - 0.084194, (GLfloat) 0.186045,
+ (GLfloat) 0.474638, (GLfloat) 0.004818, (GLfloat) 0.200460,
+ (GLfloat) 0.016796, (GLfloat) 0.096614, (GLfloat) - 0.221351,
+ (GLfloat) 0.187032, (GLfloat) 0.031017, (GLfloat) 0.039986,
+ (GLfloat) - 0.142119, (GLfloat) - 0.105297, (GLfloat) - 0.100849,
+ (GLfloat) 0.142768, (GLfloat) - 0.313960, (GLfloat) - 0.349716,
+ (GLfloat) - 0.146805, (GLfloat) 0.140482, (GLfloat) 0.035653,
+ (GLfloat) 0.039939, (GLfloat) - 0.051822, (GLfloat) - 0.017672,
+ (GLfloat) 0.057111, (GLfloat) - 0.075686, (GLfloat) - 0.103478,
+ (GLfloat) 0.049696, (GLfloat) - 0.135070, (GLfloat) 0.055097,
+ (GLfloat) 0.030271, (GLfloat) 0.075412, (GLfloat) - 0.103571,
+ (GLfloat) 0.100158, (GLfloat) - 0.022917, (GLfloat) 0.073895,
+ (GLfloat) 0.085544, (GLfloat) - 0.273613, (GLfloat) 0.092456,
+ (GLfloat) 0.077489, (GLfloat) - 0.309836, (GLfloat) - 0.003664,
+ (GLfloat) - 0.017590, (GLfloat) - 0.127869, (GLfloat) 0.153118,
+ (GLfloat) - 0.157014, (GLfloat) - 0.242184, (GLfloat) 0.070478,
+ (GLfloat) - 0.018167, (GLfloat) - 0.133639, (GLfloat) - 0.174937,
+ (GLfloat) - 0.106973, (GLfloat) - 0.189783, (GLfloat) 0.038622,
+ (GLfloat) - 0.000096, (GLfloat) 0.104429, (GLfloat) - 0.032589,
+ (GLfloat) - 0.032036, (GLfloat) - 0.021493, (GLfloat) 0.279829,
+ (GLfloat) - 0.093181, (GLfloat) - 0.058024, (GLfloat) 0.182239,
+ (GLfloat) 0.012941, (GLfloat) - 0.010409, (GLfloat) 0.088080,
+ (GLfloat) 0.256718, (GLfloat) - 0.118137, (GLfloat) - 0.078847,
+ (GLfloat) - 0.113382, (GLfloat) 0.135060, (GLfloat) 0.269946,
+ (GLfloat) 0.175810, (GLfloat) - 0.026321, (GLfloat) 0.013860,
+ (GLfloat) - 0.110606, (GLfloat) - 0.023553, (GLfloat) - 0.255525,
+ (GLfloat) 0.007163, (GLfloat) 0.068674, (GLfloat) 0.010214,
+ (GLfloat) 0.031631, (GLfloat) - 0.170381, (GLfloat) - 0.174604,
+ (GLfloat) 0.117242, (GLfloat) 0.014353, (GLfloat) - 0.021215,
+ (GLfloat) 0.090315, (GLfloat) 0.161755, (GLfloat) 0.074427,
+ (GLfloat) 0.285616, (GLfloat) 0.335824, (GLfloat) - 0.083891,
+ (GLfloat) - 0.145763, (GLfloat) 0.109292, (GLfloat) 0.121340,
+ (GLfloat) - 0.147459, (GLfloat) - 0.041936, (GLfloat) 0.010427,
+ (GLfloat) - 0.082626, (GLfloat) 0.151300, (GLfloat) - 0.030875,
+ (GLfloat) 0.217154, (GLfloat) - 0.288504, (GLfloat) - 0.202483,
+ (GLfloat) 0.026532, (GLfloat) - 0.106796, (GLfloat) 0.121041,
+ (GLfloat) 0.046695, (GLfloat) - 0.033673, (GLfloat) - 0.043721,
+ (GLfloat) 0.135596, (GLfloat) 0.217426, (GLfloat) - 0.219631,
+ (GLfloat) 0.137627, (GLfloat) 0.026335, (GLfloat) - 0.082390,
+ (GLfloat) - 0.031665, (GLfloat) - 0.115897, (GLfloat) 0.077834,
+ (GLfloat) - 0.214922, (GLfloat) - 0.162169, (GLfloat) 0.073035,
+ (GLfloat) - 0.076108, (GLfloat) 0.200481, (GLfloat) 0.036119,
+ (GLfloat) 0.012715, (GLfloat) - 0.161921, (GLfloat) 0.179804,
+ (GLfloat) 0.140409, (GLfloat) - 0.165899, (GLfloat) - 0.005149,
+ (GLfloat) - 0.054606, (GLfloat) 0.011149, (GLfloat) 0.045768,
+ (GLfloat) 0.116640, (GLfloat) - 0.180314, (GLfloat) 0.045320,
+ (GLfloat) 0.342166, (GLfloat) 0.295895, (GLfloat) - 0.049250,
+ (GLfloat) - 0.133242, (GLfloat) 0.129064, (GLfloat) 0.136969,
+ (GLfloat) 0.137520, (GLfloat) - 0.387145, (GLfloat) 0.132137,
+ (GLfloat) 0.023302, (GLfloat) 0.194298, (GLfloat) - 0.066187,
+ (GLfloat) 0.089302, (GLfloat) 0.128683, (GLfloat) - 0.072530,
+ (GLfloat) - 0.141374, (GLfloat) 0.035924, (GLfloat) - 0.079354,
+ (GLfloat) - 0.209233, (GLfloat) 0.018987, (GLfloat) - 0.004193,
+ (GLfloat) 0.156295, (GLfloat) - 0.034087, (GLfloat) 0.344315,
+ (GLfloat) - 0.005946, (GLfloat) 0.039791, (GLfloat) 0.071862,
+ (GLfloat) 0.076043, (GLfloat) - 0.094430, (GLfloat) 0.090122,
+ (GLfloat) 0.127394, (GLfloat) 0.031466, (GLfloat) - 0.028015,
+ (GLfloat) - 0.061000, (GLfloat) 0.169741, (GLfloat) - 0.127635,
+ (GLfloat) - 0.015117, (GLfloat) - 0.160883, (GLfloat) - 0.095443,
+ (GLfloat) - 0.185998, (GLfloat) - 0.182942, (GLfloat) 0.056857,
+ (GLfloat) 0.016499, (GLfloat) - 0.308118, (GLfloat) - 0.075513,
+ (GLfloat) 0.024971, (GLfloat) - 0.301226, (GLfloat) - 0.027251,
+ (GLfloat) - 0.035944, (GLfloat) 0.061566, (GLfloat) 0.013883,
+ (GLfloat) 0.007215, (GLfloat) 0.046198, (GLfloat) - 0.227891,
+ (GLfloat) 0.189165, (GLfloat) 0.079471, (GLfloat) - 0.067849,
+ (GLfloat) 0.026963, (GLfloat) 0.027982, (GLfloat) - 0.050419,
+ (GLfloat) - 0.050896, (GLfloat) 0.069604, (GLfloat) - 0.196938,
+ (GLfloat) 0.064274, (GLfloat) - 0.205263, (GLfloat) 0.297868,
+ (GLfloat) - 0.047543, (GLfloat) 0.147822, (GLfloat) 0.166593,
+ (GLfloat) 0.010318, (GLfloat) - 0.002148, (GLfloat) 0.029434,
+ (GLfloat) 0.036107, (GLfloat) - 0.523568, (GLfloat) - 0.118442,
+ (GLfloat) - 0.199410, (GLfloat) 0.233526, (GLfloat) - 0.161289,
+ (GLfloat) - 0.047441, (GLfloat) - 0.013973, (GLfloat) 0.112998,
+ (GLfloat) - 0.043494, (GLfloat) - 0.181796, (GLfloat) 0.065864,
+ (GLfloat) - 0.074984, (GLfloat) 0.177758, (GLfloat) - 0.156470,
+ (GLfloat) 0.225216, (GLfloat) 0.081058, (GLfloat) - 0.169876,
+ (GLfloat) - 0.041510, (GLfloat) 0.025763, (GLfloat) - 0.231350,
+ (GLfloat) 0.259015, (GLfloat) 0.274641, (GLfloat) 0.018290,
+ (GLfloat) 0.039196, (GLfloat) 0.010028, (GLfloat) 0.072771,
+ (GLfloat) 0.031646, (GLfloat) 0.075290, (GLfloat) 0.039258,
+ (GLfloat) 0.052930, (GLfloat) - 0.034809, (GLfloat) 0.165429,
+ (GLfloat) - 0.072511, (GLfloat) 0.095786, (GLfloat) - 0.222144,
+ (GLfloat) 0.038706, (GLfloat) 0.032296, (GLfloat) - 0.002495,
+ (GLfloat) 0.011675, (GLfloat) - 0.061944, (GLfloat) 0.082555,
+ (GLfloat) - 0.168400, (GLfloat) 0.074113, (GLfloat) 0.049321,
+ (GLfloat) 0.001263, (GLfloat) - 0.207436, (GLfloat) 0.013949,
+ (GLfloat) - 0.027045, (GLfloat) 0.015697, (GLfloat) - 0.047831,
+ (GLfloat) 0.121989, (GLfloat) - 0.043014, (GLfloat) - 0.004426,
+ (GLfloat) 0.238374, (GLfloat) - 0.320060, (GLfloat) - 0.111754,
+ (GLfloat) 0.095077, (GLfloat) 0.014640, (GLfloat) 0.070665,
+ (GLfloat) - 0.084367, (GLfloat) 0.016444, (GLfloat) 0.000788,
+ (GLfloat) - 0.117804, (GLfloat) 0.113550, (GLfloat) 0.087029,
+ (GLfloat) - 0.109080, (GLfloat) - 0.155795, (GLfloat) 0.040085,
+ (GLfloat) - 0.020370, (GLfloat) 0.118787, (GLfloat) 0.101787,
+ (GLfloat) 0.140877, (GLfloat) - 0.144829, (GLfloat) 0.107720,
+ (GLfloat) - 0.247002, (GLfloat) - 0.454632, (GLfloat) 0.070535,
+ (GLfloat) - 0.016278, (GLfloat) - 0.111440, (GLfloat) 0.270110,
+ (GLfloat) - 0.017624, (GLfloat) - 0.146232, (GLfloat) 0.154626,
+ (GLfloat) 0.214030, (GLfloat) 0.041025, (GLfloat) - 0.170250,
+ (GLfloat) 0.010009, (GLfloat) - 0.159290, (GLfloat) - 0.076895,
+ (GLfloat) 0.116168, (GLfloat) 0.156775, (GLfloat) - 0.077935,
+ (GLfloat) 0.199355, (GLfloat) 0.081120, (GLfloat) 0.003352,
+ (GLfloat) 0.054178, (GLfloat) - 0.036863, (GLfloat) - 0.004573,
+ (GLfloat) - 0.015149, (GLfloat) 0.057005, (GLfloat) - 0.008878,
+ (GLfloat) 0.374758, (GLfloat) - 0.007823, (GLfloat) - 0.078051,
+ (GLfloat) - 0.034977, (GLfloat) 0.026837, (GLfloat) 0.035441,
+ (GLfloat) 0.101867, (GLfloat) 0.121954, (GLfloat) 0.040450,
+ (GLfloat) - 0.136911, (GLfloat) 0.010061, (GLfloat) 0.082698,
+ (GLfloat) 0.121665, (GLfloat) - 0.589852, (GLfloat) 0.106401,
+ (GLfloat) - 0.064574, (GLfloat) 0.098679, (GLfloat) 0.059336,
+ (GLfloat) 0.103037, (GLfloat) - 0.075263, (GLfloat) 0.172586,
+ (GLfloat) - 0.217492, (GLfloat) - 0.170584, (GLfloat) - 0.025846,
+ (GLfloat) 0.260366, (GLfloat) 0.002117, (GLfloat) 0.041535,
+ (GLfloat) - 0.024112, (GLfloat) - 0.023437, (GLfloat) - 0.088146,
+ (GLfloat) - 0.007767, (GLfloat) 0.061738, (GLfloat) 0.116208,
+ (GLfloat) 0.253471, (GLfloat) 0.113278, (GLfloat) 0.231012,
+ (GLfloat) - 0.011399, (GLfloat) 0.116962, (GLfloat) - 0.037465,
+ (GLfloat) 0.233898, (GLfloat) 0.226108, (GLfloat) 0.077176,
+ (GLfloat) - 0.004640, (GLfloat) 0.209191, (GLfloat) - 0.091738,
+ (GLfloat) 0.093995, (GLfloat) 0.328937, (GLfloat) 0.245098,
+ (GLfloat) 0.155739, (GLfloat) - 0.327971, (GLfloat) - 0.115265,
+ (GLfloat) 0.125306, (GLfloat) 0.174931, (GLfloat) 0.130030,
+ (GLfloat) 0.005005, (GLfloat) - 0.022310, (GLfloat) 0.120651,
+ (GLfloat) 0.046982, (GLfloat) - 0.058839, (GLfloat) - 0.097958,
+ (GLfloat) - 0.059618, (GLfloat) - 0.068114, (GLfloat) 0.070137,
+ (GLfloat) 0.053184, (GLfloat) - 0.081163, (GLfloat) 0.000020,
+ (GLfloat) 0.188066, (GLfloat) - 0.082942, (GLfloat) - 0.013689,
+ (GLfloat) - 0.161390, (GLfloat) - 0.335891, (GLfloat) - 0.060737,
+ (GLfloat) 0.131189, (GLfloat) 0.036733, (GLfloat) - 0.093511,
+ (GLfloat) - 0.002496, (GLfloat) - 0.059035, (GLfloat) - 0.084055,
+ (GLfloat) 0.109820, (GLfloat) - 0.235531, (GLfloat) 0.130865,
+ (GLfloat) 0.018909, (GLfloat) 0.062351, (GLfloat) 0.111532,
+ (GLfloat) 0.123548, (GLfloat) 0.094008, (GLfloat) 0.056761,
+ (GLfloat) 0.106710, (GLfloat) - 0.049834, (GLfloat) - 0.147748,
+ (GLfloat) 0.102940, (GLfloat) - 0.113169, (GLfloat) 0.191710,
+ (GLfloat) - 0.028647, (GLfloat) 0.128038, (GLfloat) - 0.104189,
+ (GLfloat) 0.107226, (GLfloat) - 0.220633, (GLfloat) - 0.147310,
+ (GLfloat) - 0.205747, (GLfloat) 0.063433, (GLfloat) - 0.026135,
+ (GLfloat) - 0.064614, (GLfloat) 0.096963, (GLfloat) - 0.080108,
+ (GLfloat) - 0.083255, (GLfloat) 0.113008, (GLfloat) - 0.089852,
+ (GLfloat) 0.180961, (GLfloat) - 0.269100, (GLfloat) 0.115523,
+ (GLfloat) 0.044722, (GLfloat) - 0.023285, (GLfloat) 0.024813,
+ (GLfloat) 0.078986, (GLfloat) 0.037242, (GLfloat) 0.005124,
+ (GLfloat) 0.115141, (GLfloat) 0.124478, (GLfloat) - 0.034603,
+ (GLfloat) 0.022454, (GLfloat) 0.155937, (GLfloat) - 0.096183,
+ (GLfloat) 0.175318, (GLfloat) 0.007233, (GLfloat) - 0.138507,
+ (GLfloat) 0.019182, (GLfloat) - 0.037869, (GLfloat) 0.074242,
+ (GLfloat) 0.058218, (GLfloat) 0.212269, (GLfloat) - 0.003886,
+ (GLfloat) - 0.188525, (GLfloat) - 0.075703, (GLfloat) 0.075643,
+ (GLfloat) - 0.029085, (GLfloat) - 0.076746, (GLfloat) - 0.273473,
+ (GLfloat) - 0.105590, (GLfloat) - 0.238524, (GLfloat) - 0.087465,
+ (GLfloat) 0.086122, (GLfloat) - 0.340807, (GLfloat) - 0.192851,
+ (GLfloat) - 0.247936, (GLfloat) - 0.003160, (GLfloat) 0.082106,
+ (GLfloat) 0.137988, (GLfloat) - 0.041876, (GLfloat) - 0.012086,
+ (GLfloat) - 0.140714, (GLfloat) - 0.138827, (GLfloat) - 0.064179,
+ (GLfloat) - 0.059380, (GLfloat) 0.015642, (GLfloat) 0.113841,
+ (GLfloat) - 0.031501, (GLfloat) 0.007130, (GLfloat) - 0.125767,
+ (GLfloat) 0.021294, (GLfloat) - 0.021957, (GLfloat) - 0.069365,
+ (GLfloat) - 0.012419, (GLfloat) 0.019780, (GLfloat) - 0.077459,
+ (GLfloat) 0.085524, (GLfloat) 0.087513, (GLfloat) - 0.107484,
+ (GLfloat) - 0.303263, (GLfloat) 0.263672, (GLfloat) - 0.220649,
+ (GLfloat) - 0.090267, (GLfloat) - 0.376337, (GLfloat) - 0.127634,
+ (GLfloat) 0.087681, (GLfloat) 0.015985, (GLfloat) - 0.029860,
+ (GLfloat) 0.119257, (GLfloat) 0.140347, (GLfloat) 0.194003,
+ (GLfloat) 0.066270, (GLfloat) 0.127178, (GLfloat) - 0.003765,
+ (GLfloat) 0.037563, (GLfloat) - 0.110829, (GLfloat) 0.000382,
+ (GLfloat) 0.034295, (GLfloat) - 0.045737, (GLfloat) 0.045204,
+ (GLfloat) 0.017365, (GLfloat) - 0.072708, (GLfloat) 0.056698,
+ (GLfloat) 0.045238, (GLfloat) 0.187956, (GLfloat) - 0.055878,
+ (GLfloat) - 0.132755, (GLfloat) 0.017969, (GLfloat) - 0.041205,
+ (GLfloat) 0.189702, (GLfloat) - 0.020780, (GLfloat) - 0.077422,
+ (GLfloat) 0.210419, (GLfloat) 0.178041, (GLfloat) - 0.005855,
+ (GLfloat) 0.104527, (GLfloat) - 0.304323, (GLfloat) 0.002581,
+ (GLfloat) 0.043359, (GLfloat) - 0.060695, (GLfloat) - 0.011878,
+ (GLfloat) - 0.000267, (GLfloat) 0.020510, (GLfloat) - 0.046383,
+ (GLfloat) 0.252891, (GLfloat) 0.074246, (GLfloat) - 0.047689,
+ (GLfloat) - 0.069874, (GLfloat) 0.118962, (GLfloat) - 0.052781,
+ (GLfloat) 0.086188, (GLfloat) 0.068354, (GLfloat) - 0.213621,
+ (GLfloat) 0.086637, (GLfloat) - 0.171519, (GLfloat) 0.006447,
+ (GLfloat) 0.196785, (GLfloat) - 0.086044, (GLfloat) - 0.068059,
+ (GLfloat) 0.100401, (GLfloat) 0.243886, (GLfloat) - 0.142258,
+ (GLfloat) 0.173010, (GLfloat) 0.303375, (GLfloat) - 0.060085,
+ (GLfloat) - 0.041181, (GLfloat) - 0.097467, (GLfloat) 0.073776,
+ (GLfloat) - 0.013471, (GLfloat) - 0.133299, (GLfloat) - 0.143570,
+ (GLfloat) - 0.302092, (GLfloat) - 0.158342, (GLfloat) 0.230719,
+ (GLfloat) 0.074434, (GLfloat) - 0.143530, (GLfloat) 0.294895,
+ (GLfloat) - 0.165626, (GLfloat) 0.200869, (GLfloat) - 0.130737,
+ (GLfloat) 0.102444, (GLfloat) 0.277067, (GLfloat) 0.078210,
+ (GLfloat) - 0.183696, (GLfloat) - 0.010502, (GLfloat) - 0.150481,
+ (GLfloat) - 0.070029, (GLfloat) - 0.019635, (GLfloat) - 0.059141,
+ (GLfloat) - 0.005930, (GLfloat) 0.069199, (GLfloat) - 0.013126,
+ (GLfloat) - 0.119333, (GLfloat) - 0.007972, (GLfloat) 0.119489,
+ (GLfloat) 0.033072, (GLfloat) 0.081756, (GLfloat) - 0.034481,
+ (GLfloat) - 0.108282, (GLfloat) - 0.065310, (GLfloat) 0.146009,
+ (GLfloat) 0.080950, (GLfloat) 0.111320, (GLfloat) 0.004291,
+ (GLfloat) 0.071208, (GLfloat) - 0.112941, (GLfloat) 0.028135,
+ (GLfloat) - 0.024632, (GLfloat) 0.190525, (GLfloat) - 0.285626,
+ (GLfloat) - 0.105040, (GLfloat) 0.044008, (GLfloat) 0.020236,
+ (GLfloat) - 0.017815, (GLfloat) - 0.076684, (GLfloat) - 0.065840,
+ (GLfloat) 0.083563, (GLfloat) 0.100873, (GLfloat) - 0.141154,
+ (GLfloat) - 0.062066, (GLfloat) - 0.010894, (GLfloat) 0.066110,
+ (GLfloat) - 0.056763, (GLfloat) 0.024777, (GLfloat) - 0.176209,
+ (GLfloat) - 0.014442, (GLfloat) 0.052861, (GLfloat) 0.013010,
+ (GLfloat) - 0.157546, (GLfloat) - 0.118279, (GLfloat) - 0.237648,
+ (GLfloat) - 0.234497, (GLfloat) - 0.158049, (GLfloat) 0.102635,
+ (GLfloat) 0.061685, (GLfloat) - 0.052695, (GLfloat) - 0.042243,
+ (GLfloat) 0.093961, (GLfloat) - 0.025060, (GLfloat) 0.046602,
+ (GLfloat) 0.004395, (GLfloat) 0.150912, (GLfloat) 0.191784,
+ (GLfloat) 0.067299, (GLfloat) - 0.059575, (GLfloat) 0.161018,
+ (GLfloat) - 0.233155, (GLfloat) - 0.109721, (GLfloat) 0.194653,
+ (GLfloat) 0.217444, (GLfloat) 0.221231, (GLfloat) - 0.201241,
+ (GLfloat) - 0.033689, (GLfloat) - 0.341937, (GLfloat) - 0.099231,
+ (GLfloat) 0.042771, (GLfloat) - 0.028862, (GLfloat) 0.067736,
+ (GLfloat) 0.110240, (GLfloat) 0.274029, (GLfloat) - 0.157689,
+ (GLfloat) - 0.055994, (GLfloat) 0.144729, (GLfloat) 0.090901,
+ (GLfloat) 0.211192, (GLfloat) 0.058165, (GLfloat) - 0.149872,
+ (GLfloat) 0.102735, (GLfloat) - 0.044061, (GLfloat) - 0.044795,
+ (GLfloat) - 0.042153, (GLfloat) - 0.010955, (GLfloat) 0.014341,
+ (GLfloat) - 0.011649, (GLfloat) 0.099072, (GLfloat) - 0.086419,
+ (GLfloat) - 0.018920, (GLfloat) 0.000640, (GLfloat) - 0.031729,
+ (GLfloat) - 0.216886, (GLfloat) - 0.057512, (GLfloat) 0.071195,
+ (GLfloat) - 0.188150, (GLfloat) 0.049292, (GLfloat) 0.258489,
+ (GLfloat) - 0.023494, (GLfloat) 0.021489, (GLfloat) 0.199785,
+ (GLfloat) - 0.045818, (GLfloat) 0.066753, (GLfloat) - 0.035593,
+ (GLfloat) 0.010986, (GLfloat) 0.166767, (GLfloat) 0.275085,
+ (GLfloat) - 0.177039, (GLfloat) 0.010372, (GLfloat) 0.167936,
+ (GLfloat) - 0.423239, (GLfloat) 0.027466, (GLfloat) - 0.126114,
+ (GLfloat) - 0.102035, (GLfloat) 0.282640, (GLfloat) 0.022622,
+ (GLfloat) - 0.023997, (GLfloat) 0.176943, (GLfloat) 0.093272,
+ (GLfloat) - 0.090009, (GLfloat) 0.015338, (GLfloat) 0.250857,
+ (GLfloat) 0.011095, (GLfloat) 0.006703, (GLfloat) 0.057076,
+ (GLfloat) 0.133423, (GLfloat) 0.234639, (GLfloat) - 0.070260,
+ (GLfloat) - 0.295994, (GLfloat) 0.185615, (GLfloat) 0.117148,
+ (GLfloat) 0.235480, (GLfloat) 0.066195, (GLfloat) 0.078641,
+ (GLfloat) - 0.026545, (GLfloat) 0.093931, (GLfloat) 0.008019,
+ (GLfloat) 0.181656, (GLfloat) - 0.088719, (GLfloat) 0.045959,
+ (GLfloat) - 0.076308, (GLfloat) - 0.164584, (GLfloat) 0.018271,
+ (GLfloat) 0.092026, (GLfloat) 0.201866, (GLfloat) - 0.106051,
+ (GLfloat) 0.019876, (GLfloat) 0.050967, (GLfloat) 0.176081,
+ (GLfloat) - 0.018546, (GLfloat) 0.138749, (GLfloat) - 0.008255,
+ (GLfloat) - 0.026049, (GLfloat) - 0.068465, (GLfloat) - 0.055467,
+ (GLfloat) - 0.260245, (GLfloat) 0.221833, (GLfloat) - 0.048541,
+ (GLfloat) - 0.169783, (GLfloat) 0.354992, (GLfloat) - 0.017943,
+ (GLfloat) - 0.306063, (GLfloat) 0.074787, (GLfloat) 0.101971,
+ (GLfloat) 0.215973, (GLfloat) 0.107558, (GLfloat) - 0.008808,
+ (GLfloat) 0.390235, (GLfloat) - 0.275652, (GLfloat) - 0.117085,
+ (GLfloat) 0.033898, (GLfloat) 0.046047, (GLfloat) - 0.108977,
+ (GLfloat) - 0.263507, (GLfloat) - 0.091765, (GLfloat) - 0.250234,
+ (GLfloat) - 0.044613, (GLfloat) 0.149563, (GLfloat) 0.027937,
+ (GLfloat) - 0.015397, (GLfloat) - 0.040254, (GLfloat) 0.065692,
+ (GLfloat) - 0.017531, (GLfloat) - 0.013504, (GLfloat) 0.004021,
+ (GLfloat) 0.054665, (GLfloat) - 0.018996, (GLfloat) - 0.006954,
+ (GLfloat) 0.033068, (GLfloat) 0.219349, (GLfloat) - 0.194079,
+ (GLfloat) - 0.057780, (GLfloat) 0.011881, (GLfloat) 0.084904,
+ (GLfloat) 0.139243, (GLfloat) - 0.109890, (GLfloat) 0.039145,
+ (GLfloat) 0.223272, (GLfloat) 0.208110, (GLfloat) 0.165882,
+ (GLfloat) - 0.008046, (GLfloat) 0.103847, (GLfloat) 0.278718,
+ (GLfloat) - 0.035499, (GLfloat) 0.112662, (GLfloat) - 0.088418,
+ (GLfloat) - 0.053118, (GLfloat) 0.053871, (GLfloat) - 0.054706,
+ (GLfloat) 0.118632, (GLfloat) 0.086431, (GLfloat) - 0.022494,
+ (GLfloat) 0.014943, (GLfloat) 0.039622, (GLfloat) 0.047307,
+ (GLfloat) 0.006570, (GLfloat) 0.093461, (GLfloat) 0.058982,
+ (GLfloat) 0.031448, (GLfloat) 0.325716, (GLfloat) - 0.047305,
+ (GLfloat) - 0.193710, (GLfloat) 0.087226, (GLfloat) 0.051790,
+ (GLfloat) 0.116154, (GLfloat) - 0.080023, (GLfloat) - 0.106643,
+ (GLfloat) 0.156514, (GLfloat) - 0.222710, (GLfloat) 0.275425,
+ (GLfloat) - 0.084294, (GLfloat) - 0.101851, (GLfloat) 0.425222,
+ (GLfloat) 0.030344, (GLfloat) - 0.141370, (GLfloat) - 0.282460,
+ (GLfloat) 0.003022, (GLfloat) 0.108996, (GLfloat) - 0.229152,
+ (GLfloat) - 0.133040, (GLfloat) 0.061025, (GLfloat) - 0.128942,
+ (GLfloat) - 0.077348, (GLfloat) 0.013363, (GLfloat) - 0.072511,
+ (GLfloat) - 0.050317, (GLfloat) 0.452190, (GLfloat) 0.094114,
+ (GLfloat) 0.053309, (GLfloat) - 0.143722, (GLfloat) 0.249884,
+ (GLfloat) - 0.257016, (GLfloat) 0.100544, (GLfloat) 0.012236,
+ (GLfloat) - 0.022056, (GLfloat) - 0.212133, (GLfloat) 0.023533,
+ (GLfloat) 0.153299, (GLfloat) 0.031763, (GLfloat) 0.034577,
+ (GLfloat) 0.161729, (GLfloat) 0.084914, (GLfloat) 0.050770,
+ (GLfloat) 0.320438, (GLfloat) 0.112175, (GLfloat) 0.135015,
+ (GLfloat) - 0.040717, (GLfloat) 0.073400, (GLfloat) 0.080543,
+ (GLfloat) - 0.226004, (GLfloat) 0.143154, (GLfloat) 0.170139,
+ (GLfloat) 0.009756, (GLfloat) 0.068337, (GLfloat) 0.132111,
+ (GLfloat) 0.380191, (GLfloat) 0.233715, (GLfloat) 0.026664,
+ (GLfloat) - 0.018016, (GLfloat) 0.265426, (GLfloat) - 0.110691,
+ (GLfloat) 0.041281, (GLfloat) 0.056674, (GLfloat) - 0.119834,
+ (GLfloat) 0.170794, (GLfloat) - 0.112611, (GLfloat) 0.094839,
+ (GLfloat) 0.216318, (GLfloat) 0.002081, (GLfloat) 0.154653,
+ (GLfloat) - 0.036815, (GLfloat) 0.024332, (GLfloat) 0.172587,
+ (GLfloat) - 0.064554, (GLfloat) 0.160699, (GLfloat) 0.101229,
+ (GLfloat) 0.114451, (GLfloat) 0.016039, (GLfloat) 0.293489,
+ (GLfloat) 0.023010, (GLfloat) - 0.028932, (GLfloat) 0.014800,
+ (GLfloat) - 0.290527, (GLfloat) 0.172553, (GLfloat) 0.129526,
+ (GLfloat) - 0.048159, (GLfloat) - 0.181222, (GLfloat) 0.305871,
+ (GLfloat) 0.065351, (GLfloat) - 0.399962, (GLfloat) - 0.030479,
+ (GLfloat) 0.334123, (GLfloat) - 0.120149, (GLfloat) 0.241310,
+ (GLfloat) - 0.203728, (GLfloat) - 0.155627, (GLfloat) 0.140805,
+ (GLfloat) 0.061022, (GLfloat) - 0.016097, (GLfloat) 0.131688,
+ (GLfloat) 0.045050, (GLfloat) - 0.313782, (GLfloat) - 0.279077,
+ (GLfloat) 0.034252, (GLfloat) - 0.135512, (GLfloat) - 0.087765,
+ (GLfloat) 0.276236, (GLfloat) 0.036449, (GLfloat) 0.418332,
+ (GLfloat) - 0.122146, (GLfloat) 0.050998, (GLfloat) 0.131453,
+ (GLfloat) - 0.087629, (GLfloat) 0.330142, (GLfloat) 0.061353,
+ (GLfloat) 0.228676, (GLfloat) 0.093309, (GLfloat) - 0.009307,
+ (GLfloat) 0.435264, (GLfloat) 0.186185, (GLfloat) - 0.127484,
+ (GLfloat) 0.156565, (GLfloat) 0.013842, (GLfloat) - 0.103874,
+ (GLfloat) - 0.274053, (GLfloat) - 0.084119, (GLfloat) 0.096687,
+ (GLfloat) - 0.027947, (GLfloat) - 0.051152, (GLfloat) - 0.078997,
+ (GLfloat) 0.013399, (GLfloat) 0.194440, (GLfloat) 0.072030,
+ (GLfloat) 0.000082, (GLfloat) 0.130666, (GLfloat) 0.052218,
+ (GLfloat) 0.064984, (GLfloat) - 0.136859, (GLfloat) 0.092204,
+ (GLfloat) 0.109060, (GLfloat) 0.424779, (GLfloat) - 0.111867,
+ (GLfloat) 0.061748, (GLfloat) 0.160827, (GLfloat) - 0.068538,
+ (GLfloat) 0.062960, (GLfloat) 0.059638, (GLfloat) - 0.181514,
+ (GLfloat) 0.018961, (GLfloat) 0.072298, (GLfloat) 0.003517,
+ (GLfloat) - 0.099508, (GLfloat) - 0.225455, (GLfloat) - 0.021791,
+ (GLfloat) 0.001955, (GLfloat) - 0.320555, (GLfloat) 0.159506,
+ (GLfloat) - 0.057735, (GLfloat) - 0.054327, (GLfloat) - 0.095525,
+ (GLfloat) 0.319748, (GLfloat) - 0.146158, (GLfloat) - 0.198384,
+ (GLfloat) - 0.158741, (GLfloat) - 0.265443, (GLfloat) 0.036635,
+ (GLfloat) - 0.093089, (GLfloat) - 0.358379, (GLfloat) - 0.110549,
+ (GLfloat) - 0.049805, (GLfloat) 0.022246, (GLfloat) - 0.036724,
+ (GLfloat) 0.223000, (GLfloat) 0.247522, (GLfloat) - 0.232652,
+ (GLfloat) - 0.249441, (GLfloat) - 0.248325, (GLfloat) - 0.071169,
+ (GLfloat) 0.000369, (GLfloat) 0.094598, (GLfloat) - 0.162153,
+ (GLfloat) - 0.133873, (GLfloat) - 0.188473, (GLfloat) 0.272734,
+ (GLfloat) 0.046594, (GLfloat) 0.069766, (GLfloat) 0.015561,
+ (GLfloat) 0.111582, (GLfloat) - 0.239786, (GLfloat) 0.034658,
+ (GLfloat) 0.093232, (GLfloat) 0.183507, (GLfloat) - 0.011298,
+ (GLfloat) - 0.226805, (GLfloat) 0.514871, (GLfloat) - 0.064144,
+ (GLfloat) 0.085949, (GLfloat) 0.031412, (GLfloat) 0.042790,
+ (GLfloat) - 0.043755, (GLfloat) - 0.290797, (GLfloat) - 0.159142,
+ (GLfloat) 0.056671, (GLfloat) 0.167837, (GLfloat) 0.016536,
+ (GLfloat) - 0.034538, (GLfloat) 0.072185, (GLfloat) 0.066973,
+ (GLfloat) - 0.021211, (GLfloat) 0.064120, (GLfloat) - 0.174756,
+ (GLfloat) 0.090627, (GLfloat) - 0.055253, (GLfloat) 0.109457,
+ (GLfloat) 0.019686, (GLfloat) 0.004469, (GLfloat) - 0.096316,
+ (GLfloat) - 0.038864, (GLfloat) - 0.135083, (GLfloat) 0.244529,
+ (GLfloat) 0.034613, (GLfloat) - 0.069587, (GLfloat) 0.144533,
+ (GLfloat) - 0.100009, (GLfloat) - 0.057516, (GLfloat) - 0.079338,
+ (GLfloat) - 0.178026, (GLfloat) 0.085994, (GLfloat) 0.061804,
+ (GLfloat) - 0.189256, (GLfloat) 0.342739, (GLfloat) 0.043372,
+ (GLfloat) - 0.046206, (GLfloat) 0.168946, (GLfloat) - 0.133904,
+ (GLfloat) 0.015314, (GLfloat) - 0.090127, (GLfloat) - 0.058530,
+ (GLfloat) 0.169657, (GLfloat) - 0.097086, (GLfloat) 0.013746,
+ (GLfloat) 0.185131, (GLfloat) - 0.089445, (GLfloat) 0.347806,
+ (GLfloat) - 0.264432, (GLfloat) - 0.170170, (GLfloat) - 0.335858,
+ (GLfloat) - 0.086511, (GLfloat) 0.248252, (GLfloat) - 0.169698,
+ (GLfloat) 0.002287, (GLfloat) - 0.028338, (GLfloat) - 0.266432,
+ (GLfloat) - 0.085060, (GLfloat) 0.001974, (GLfloat) - 0.032789,
+ (GLfloat) 0.192750, (GLfloat) - 0.007081, (GLfloat) 0.098197,
+ (GLfloat) 0.012577, (GLfloat) 0.034983, (GLfloat) - 0.003058,
+ (GLfloat) - 0.039249, (GLfloat) 0.038498, (GLfloat) 0.067306,
+ (GLfloat) 0.021988, (GLfloat) 0.379705, (GLfloat) - 0.054619,
+ (GLfloat) - 0.151707, (GLfloat) 0.051034, (GLfloat) - 0.016003,
+ (GLfloat) - 0.057048, (GLfloat) 0.075729, (GLfloat) - 0.213397,
+ (GLfloat) - 0.137847, (GLfloat) 0.130600, (GLfloat) 0.046198,
+ (GLfloat) 0.024786, (GLfloat) 0.049556, (GLfloat) - 0.045772,
+ (GLfloat) - 0.082533, (GLfloat) 0.155397, (GLfloat) - 0.096145,
+ (GLfloat) 0.049152, (GLfloat) 0.270979, (GLfloat) - 0.147022,
+ (GLfloat) 0.061153, (GLfloat) - 0.104531, (GLfloat) - 0.103623,
+ (GLfloat) - 0.142997, (GLfloat) - 0.232885, (GLfloat) 0.040538,
+ (GLfloat) 0.048806, (GLfloat) - 0.013095, (GLfloat) - 0.003505,
+ (GLfloat) - 0.095063, (GLfloat) 0.241414, (GLfloat) - 0.202255,
+ (GLfloat) 0.108558, (GLfloat) - 0.147584, (GLfloat) 0.162682,
+ (GLfloat) 0.217105, (GLfloat) 0.252340, (GLfloat) - 0.114830,
+ (GLfloat) - 0.188028, (GLfloat) 0.417252, (GLfloat) - 0.077456,
+ (GLfloat) - 0.112855, (GLfloat) 0.105192, (GLfloat) 0.073968,
+ (GLfloat) - 0.186972, (GLfloat) 0.164022, (GLfloat) - 0.073415,
+ (GLfloat) - 0.074349, (GLfloat) - 0.324874, (GLfloat) - 0.056645,
+ (GLfloat) 0.327855, (GLfloat) - 0.271424, (GLfloat) - 0.141142,
+ (GLfloat) 0.151049, (GLfloat) 0.155239, (GLfloat) - 0.083116,
+ (GLfloat) 0.035395, (GLfloat) - 0.133176, (GLfloat) - 0.095112,
+ (GLfloat) 0.127283, (GLfloat) - 0.011837, (GLfloat) 0.199750,
+ (GLfloat) - 0.120775, (GLfloat) 0.103698, (GLfloat) 0.063302,
+ (GLfloat) 0.014222, (GLfloat) 0.198468, (GLfloat) 0.137537,
+ (GLfloat) - 0.269656, (GLfloat) 0.120644, (GLfloat) - 0.153958,
+ (GLfloat) - 0.136743, (GLfloat) - 0.119817, (GLfloat) - 0.073747,
+ (GLfloat) - 0.068156, (GLfloat) - 0.138484, (GLfloat) 0.033507,
+ (GLfloat) - 0.106835, (GLfloat) 0.114964, (GLfloat) 0.023924,
+ (GLfloat) - 0.222525, (GLfloat) 0.330321, (GLfloat) - 0.007431,
+ (GLfloat) - 0.011739, (GLfloat) 0.095156, (GLfloat) 0.139086,
+ (GLfloat) 0.146766, (GLfloat) 0.037685, (GLfloat) 0.136122,
+ (GLfloat) - 0.086532, (GLfloat) - 0.081295, (GLfloat) 0.009434,
+ (GLfloat) 0.189439, (GLfloat) 0.290592, (GLfloat) - 0.048317,
+ (GLfloat) 0.139152, (GLfloat) 0.224931, (GLfloat) 0.355509,
+ (GLfloat) 0.017162, (GLfloat) - 0.016825, (GLfloat) 0.094198,
+ (GLfloat) - 0.237595, (GLfloat) 0.205475, (GLfloat) - 0.041412,
+ (GLfloat) 0.050511, (GLfloat) 0.094900, (GLfloat) 0.252891,
+ (GLfloat) - 0.012538, (GLfloat) - 0.014082, (GLfloat) 0.064629,
+ (GLfloat) - 0.059810, (GLfloat) 0.020665, (GLfloat) - 0.260979,
+ (GLfloat) 0.073490, (GLfloat) - 0.242270, (GLfloat) 0.085847,
+ (GLfloat) 0.049499, (GLfloat) - 0.045617, (GLfloat) - 0.015894,
+ (GLfloat) - 0.121040, (GLfloat) 0.004350, (GLfloat) 0.381603,
+ (GLfloat) - 0.062798, (GLfloat) 0.055006, (GLfloat) 0.077472,
+ (GLfloat) - 0.156846, (GLfloat) - 0.033342, (GLfloat) 0.035284,
+ (GLfloat) 0.105383, (GLfloat) 0.002776, (GLfloat) - 0.046394,
+ (GLfloat) 0.247612, (GLfloat) 0.310528, (GLfloat) 0.046188,
+ (GLfloat) - 0.144567, (GLfloat) - 0.197996, (GLfloat) 0.083309,
+ (GLfloat) - 0.317845, (GLfloat) - 0.014793, (GLfloat) - 0.041608,
+ (GLfloat) - 0.169858, (GLfloat) 0.102631, (GLfloat) 0.283962,
+ (GLfloat) - 0.168757, (GLfloat) 0.093105, (GLfloat) 0.050325,
+ (GLfloat) - 0.013639, (GLfloat) 0.285100, (GLfloat) 0.047089,
+ (GLfloat) 0.216644, (GLfloat) 0.102018, (GLfloat) 0.031983,
+ (GLfloat) 0.046988, (GLfloat) 0.081482, (GLfloat) 0.021865,
+ (GLfloat) 0.124995, (GLfloat) - 0.193086, (GLfloat) 0.127870,
+ (GLfloat) 0.009153, (GLfloat) 0.178713, (GLfloat) - 0.077949,
+ (GLfloat) - 0.235371, (GLfloat) - 0.046817, (GLfloat) - 0.125764,
+ (GLfloat) - 0.089381, (GLfloat) 0.289172, (GLfloat) - 0.129356,
+ (GLfloat) 0.312993, (GLfloat) 0.120426, (GLfloat) 0.296957,
+ (GLfloat) - 0.106431, (GLfloat) 0.117096, (GLfloat) 0.156971,
+ (GLfloat) 0.030001, (GLfloat) 0.244577, (GLfloat) 0.085119,
+ (GLfloat) 0.002958, (GLfloat) - 0.035469, (GLfloat) - 0.084615,
+ (GLfloat) - 0.052248, (GLfloat) - 0.004298, (GLfloat) - 0.129170,
+ (GLfloat) - 0.158458, (GLfloat) 0.059061, (GLfloat) - 0.041780,
+ (GLfloat) - 0.007117, (GLfloat) - 0.174211, (GLfloat) 0.098819,
+ (GLfloat) - 0.158387, (GLfloat) 0.060840, (GLfloat) - 0.064818,
+ (GLfloat) 0.117241, (GLfloat) - 0.050754, (GLfloat) - 0.027945,
+ (GLfloat) - 0.014301, (GLfloat) 0.146402, (GLfloat) - 0.118414,
+ (GLfloat) 0.186611, (GLfloat) - 0.162182, (GLfloat) - 0.150909,
+ (GLfloat) - 0.106992, (GLfloat) 0.286109, (GLfloat) - 0.055512,
+ (GLfloat) 0.109689, (GLfloat) - 0.346409, (GLfloat) 0.072611,
+ (GLfloat) - 0.009694, (GLfloat) - 0.038102, (GLfloat) 0.098565,
+ (GLfloat) - 0.034598, (GLfloat) 0.323300, (GLfloat) 0.020962,
+ (GLfloat) - 0.149219, (GLfloat) 0.040596, (GLfloat) - 0.114206,
+ (GLfloat) 0.164744, (GLfloat) 0.048081, (GLfloat) 0.105464,
+ (GLfloat) 0.036214, (GLfloat) 0.099523, (GLfloat) 0.038595,
+ (GLfloat) 0.056537, (GLfloat) 0.036271, (GLfloat) 0.003042,
+ (GLfloat) - 0.157110, (GLfloat) 0.001614, (GLfloat) - 0.133994,
+ (GLfloat) - 0.104357, (GLfloat) - 0.032004, (GLfloat) 0.262334,
+ (GLfloat) 0.041215, (GLfloat) - 0.010418, (GLfloat) - 0.037968,
+ (GLfloat) 0.223491, (GLfloat) - 0.387946, (GLfloat) 0.117291,
+ (GLfloat) - 0.344434, (GLfloat) 0.110318, (GLfloat) - 0.031448,
+ (GLfloat) 0.123562, (GLfloat) - 0.315729, (GLfloat) 0.164533,
+ (GLfloat) 0.008207, (GLfloat) 0.042004, (GLfloat) 0.050014,
+ (GLfloat) - 0.191339, (GLfloat) - 0.069291, (GLfloat) - 0.220065,
+ (GLfloat) 0.023845, (GLfloat) 0.009474, (GLfloat) 0.035598,
+ (GLfloat) - 0.173295, (GLfloat) - 0.036604, (GLfloat) - 0.193323,
+ (GLfloat) - 0.040347, (GLfloat) - 0.106063, (GLfloat) - 0.055559,
+ (GLfloat) - 0.071543, (GLfloat) 0.136487, (GLfloat) 0.105697,
+ (GLfloat) - 0.179027, (GLfloat) - 0.071852, (GLfloat) 0.117512,
+ (GLfloat) 0.064769, (GLfloat) - 0.345895, (GLfloat) 0.012833,
+ (GLfloat) 0.044800, (GLfloat) - 0.032357, (GLfloat) - 0.042161,
+ (GLfloat) 0.243586, (GLfloat) 0.392499, (GLfloat) - 0.180641,
+ (GLfloat) - 0.148924, (GLfloat) - 0.181446, (GLfloat) 0.146644,
+ (GLfloat) - 0.042773, (GLfloat) 0.045843, (GLfloat) - 0.176893,
+ (GLfloat) 0.025938, (GLfloat) 0.058109, (GLfloat) 0.242063,
+ (GLfloat) - 0.028489, (GLfloat) - 0.024828, (GLfloat) 0.161289,
+ (GLfloat) 0.073899, (GLfloat) - 0.081205, (GLfloat) - 0.023751,
+ (GLfloat) 0.026149, (GLfloat) 0.051399, (GLfloat) - 0.072348,
+ (GLfloat) 0.024308, (GLfloat) - 0.041819, (GLfloat) - 0.030578,
+ (GLfloat) - 0.077778, (GLfloat) 0.010272, (GLfloat) 0.066967,
+ (GLfloat) - 0.139184, (GLfloat) - 0.018983, (GLfloat) 0.035150,
+ (GLfloat) - 0.061359, (GLfloat) - 0.152358, (GLfloat) - 0.072849,
+ (GLfloat) 0.043101, (GLfloat) 0.028278, (GLfloat) 0.077387,
+ (GLfloat) 0.065599, (GLfloat) - 0.049676, (GLfloat) 0.043708,
+ (GLfloat) - 0.255767, (GLfloat) 0.023510, (GLfloat) - 0.076982,
+ (GLfloat) 0.020468, (GLfloat) - 0.040630, (GLfloat) 0.208424,
+ (GLfloat) 0.044922, (GLfloat) 0.025184, (GLfloat) 0.004764,
+ (GLfloat) 0.107432, (GLfloat) - 0.009356, (GLfloat) 0.239863,
+ (GLfloat) - 0.005475, (GLfloat) 0.158400, (GLfloat) 0.089743,
+ (GLfloat) 0.018352, (GLfloat) 0.134559, (GLfloat) 0.221650,
+ (GLfloat) 0.094423, (GLfloat) 0.129390, (GLfloat) - 0.031274,
+ (GLfloat) 0.048541, (GLfloat) 0.100595, (GLfloat) - 0.155938,
+ (GLfloat) - 0.016298, (GLfloat) - 0.036518, (GLfloat) - 0.149178,
+ (GLfloat) - 0.329953, (GLfloat) - 0.327602, (GLfloat) - 0.150086,
+ (GLfloat) 0.148403, (GLfloat) - 0.363334, (GLfloat) 0.028237,
+ (GLfloat) - 0.305790, (GLfloat) - 0.009844, (GLfloat) - 0.075571,
+ (GLfloat) - 0.045131, (GLfloat) 0.152595, (GLfloat) 0.228720,
+ (GLfloat) 0.039725, (GLfloat) - 0.127469, (GLfloat) 0.066522,
+ (GLfloat) - 0.078576, (GLfloat) - 0.349749, (GLfloat) - 0.146881,
+ (GLfloat) 0.013160, (GLfloat) - 0.040312, (GLfloat) 0.129980,
+ (GLfloat) 0.221142, (GLfloat) - 0.106068, (GLfloat) 0.254967,
+ (GLfloat) 0.180912, (GLfloat) - 0.207357, (GLfloat) - 0.196999,
+ (GLfloat) 0.098219, (GLfloat) 0.085231, (GLfloat) 0.121963,
+};
+
+struct lwo LWO_s1_b =
+{
+ 500, /* number of points */
+ s1_b_PNTS, 0L, 0L, 0L
+};
+
+#endif /* USE_GL */
+
+/* End of s1_b.c */
--- /dev/null
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)sproingies.c 4.2 97/04/26 xlockmore";
+
+#endif
+
+/*-
+ * sproingies.c, copyright 1996 by Ed Mackey, 12/7/96
+ * freely distributable.
+ */
+
+#include "xlock.h"
+
+#ifdef USE_GL
+
+#include <GL/gl.h>
+#include <GL/glu.h>
+#include "glx/buildlwo.h"
+
+#define MAXSPROING 100
+#define T_COUNT 40;
+#define BOOM_FRAME 50
+
+struct sPosColor {
+ int x, y, z, frame, life;
+ GLfloat r, g, b;
+};
+
+typedef struct {
+ int rotx, roty, dist, wireframe, flatshade, groundlevel,
+ maxsproingies, mono;
+ int sframe, target_rx, target_ry, target_dist, target_count;
+ GLuint sproingies[6], TopsSides, SproingieBoom;
+ struct sPosColor *positions;
+} sp_instance;
+
+static sp_instance *si_list = NULL;
+static int active_screens = 0;
+
+void SproingieSwap(void);
+
+extern struct lwo LWO_s1_1, LWO_s1_2, LWO_s1_3, LWO_s1_4;
+extern struct lwo LWO_s1_5, LWO_s1_6, LWO_s1_b;
+
+static int
+myrand(int range)
+{
+ return ((int) (((float) range) * LRAND() / (MAXRAND)));
+}
+
+static GLuint
+build_TopsSides(int wireframe)
+{
+ GLuint dl_num;
+ GLfloat mat_color[4] =
+ {0.0, 0.0, 0.0, 1.0};
+
+ dl_num = glGenLists(2);
+ if (!dl_num)
+ return (0); /* 0 means out of display lists. */
+
+ /* Surface: Tops */
+ glNewList(dl_num, GL_COMPILE);
+ mat_color[0] = 0.392157;
+ mat_color[1] = 0.784314;
+ mat_color[2] = 0.941176;
+ if (wireframe)
+ glColor3fv(mat_color);
+ else {
+ glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat_color);
+ }
+ glEndList();
+
+ /* Surface: Sides */
+ glNewList(dl_num + 1, GL_COMPILE);
+ mat_color[0] = 0.156863;
+ mat_color[1] = 0.156863;
+ mat_color[2] = 0.392157;
+ if (wireframe)
+ glColor3fv(mat_color);
+ else {
+ glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat_color);
+ }
+ glEndList();
+ return (dl_num);
+}
+
+static void
+LayGround(int sx, int sy, int sz, int width, int height, sp_instance * si)
+{
+ int x, y, z, w, h;
+ GLenum begin_polygon;
+
+ if (si->wireframe)
+ begin_polygon = GL_LINE_LOOP;
+ else
+ begin_polygon = GL_POLYGON;
+
+ if (!si->wireframe) {
+ if (!si->mono)
+ glCallList(si->TopsSides); /* Render the tops */
+ glNormal3f(0.0, 1.0, 0.0);
+
+ for (h = 0; h < height; ++h) {
+ x = sx + h;
+ y = sy - (h << 1);
+ z = sz + h;
+ for (w = 0; w < width; ++w) {
+ glBegin(begin_polygon);
+ glVertex3i(x, y, z);
+ glVertex3i(x, y, z - 1);
+ glVertex3i(x + 1, y, z - 1);
+ glVertex3i(x + 1, y, z);
+ glEnd();
+ glBegin(begin_polygon);
+ glVertex3i(x + 1, y - 1, z);
+ glVertex3i(x + 1, y - 1, z - 1);
+ glVertex3i(x + 2, y - 1, z - 1);
+ glVertex3i(x + 2, y - 1, z);
+ glEnd();
+ ++x;
+ --z;
+ }
+ }
+ }
+ if (!si->mono)
+ glCallList(si->TopsSides + 1); /* Render the sides */
+ if (!si->wireframe)
+ glNormal3f(0.0, 0.0, 1.0);
+
+ for (h = 0; h < height; ++h) {
+ x = sx + h;
+ y = sy - (h << 1);
+ z = sz + h;
+ for (w = 0; w < width; ++w) {
+ glBegin(begin_polygon);
+ glVertex3i(x, y, z);
+ glVertex3i(x + 1, y, z);
+ glVertex3i(x + 1, y - 1, z);
+ glVertex3i(x, y - 1, z);
+ glEnd();
+ glBegin(begin_polygon);
+ glVertex3i(x + 1, y - 1, z);
+ glVertex3i(x + 2, y - 1, z);
+ glVertex3i(x + 2, y - 2, z);
+ glVertex3i(x + 1, y - 2, z);
+/* PURIFY 4.0.1 reports an unitialized memory read on the next line when using
+ * MesaGL 2.2 and -mono. This has been fixed in MesaGL 2.3 and later. */
+ glEnd();
+ ++x;
+ --z;
+ }
+ }
+
+ /* Render the other sides */
+ if (!si->wireframe)
+ glNormal3f(1.0, 0.0, 0.0);
+
+ for (h = 0; h < height; ++h) {
+ x = sx + h;
+ y = sy - (h << 1);
+ z = sz + h;
+ for (w = 0; w < width; ++w) {
+ glBegin(begin_polygon);
+ glVertex3i(x + 1, y, z);
+ glVertex3i(x + 1, y, z - 1);
+ glVertex3i(x + 1, y - 1, z - 1);
+ glVertex3i(x + 1, y - 1, z);
+ glEnd();
+ glBegin(begin_polygon);
+ glVertex3i(x + 2, y - 1, z);
+ glVertex3i(x + 2, y - 1, z - 1);
+ glVertex3i(x + 2, y - 2, z - 1);
+ glVertex3i(x + 2, y - 2, z);
+ glEnd();
+ ++x;
+ --z;
+ }
+ }
+
+ if (si->wireframe) {
+ if (!si->mono)
+ glCallList(si->TopsSides); /* Render the tops */
+
+ for (h = 0; h < height; ++h) {
+ x = sx + h;
+ y = sy - (h << 1);
+ z = sz + h;
+ for (w = 0; w < width; ++w) {
+ glBegin(begin_polygon);
+ glVertex3i(x, y, z);
+ glVertex3i(x, y, z - 1);
+ glVertex3i(x + 1, y, z - 1);
+ glVertex3i(x + 1, y, z);
+ glEnd();
+ glBegin(begin_polygon);
+ glVertex3i(x + 1, y - 1, z);
+ glVertex3i(x + 1, y - 1, z - 1);
+ glVertex3i(x + 2, y - 1, z - 1);
+ glVertex3i(x + 2, y - 1, z);
+ glEnd();
+ ++x;
+ --z;
+ }
+ }
+ }
+}
+
+#define RESET_SPROINGIE (-30 + myrand(28))
+
+static void
+AdvanceSproingie(int t, sp_instance * si)
+{
+ int g_higher, g_back, t2;
+ struct sPosColor *thisSproingie = &(si->positions[t]);
+ struct sPosColor *S2 = &(si->positions[0]);
+
+ if (thisSproingie->life > 0) {
+ if ((++(thisSproingie->frame)) > 11) {
+ if (thisSproingie->frame >= BOOM_FRAME) {
+ if ((thisSproingie->r -= 0.08) < 0.0)
+ thisSproingie->r = 0.0;
+ if ((thisSproingie->g -= 0.08) < 0.0)
+ thisSproingie->g = 0.0;
+ if ((thisSproingie->b -= 0.08) < 0.0)
+ thisSproingie->b = 0.0;
+ if ((--(thisSproingie->life)) < 1) {
+ thisSproingie->life = RESET_SPROINGIE;
+ }
+ return;
+ }
+ thisSproingie->x += 1;
+ thisSproingie->y -= 2;
+ thisSproingie->z += 1;
+ thisSproingie->frame = 0;
+
+ for (t2 = 0; t2 < si->maxsproingies; ++t2) {
+ if ((t2 != t) && (thisSproingie->x == S2->x) && (thisSproingie->y == S2->y) &&
+ (thisSproingie->z == S2->z) && (S2->life > 10) && (S2->frame < 6)) {
+#if 0
+ if (thisSproingie->life > S2->life) {
+ S2->life = 10;
+ } else {
+#endif
+ if (thisSproingie->life > 10) {
+ thisSproingie->life = 10;
+ thisSproingie->frame = BOOM_FRAME;
+ if ((thisSproingie->r += 0.5) > 1.0)
+ thisSproingie->r = 1.0;
+ if ((thisSproingie->g += 0.5) > 1.0)
+ thisSproingie->g = 1.0;
+ if ((thisSproingie->b += 0.5) > 1.0)
+ thisSproingie->b = 1.0;
+ }
+#if 0
+ }
+#endif
+ }
+ ++S2;
+ }
+ }
+ if ((thisSproingie->life == 10) && (thisSproingie->frame > 0) && (thisSproingie->frame < BOOM_FRAME)) {
+ /* wait here for frame 0 to come about. */
+ } else if ((--(thisSproingie->life)) < 1) {
+ thisSproingie->life = RESET_SPROINGIE;
+ } else if (thisSproingie->life < 9) {
+ thisSproingie->frame -= 2;
+ }
+ } else if (++(thisSproingie->life) >= 0) {
+ if (t > 1) {
+ g_higher = -3 + myrand(5);
+ g_back = -2 + myrand(5);
+ } else if (t == 1) {
+ g_higher = -2 + myrand(3);
+ g_back = -1 + myrand(3);
+ } else {
+ g_higher = -1;
+ g_back = 0;
+ }
+
+ thisSproingie->x = (-g_higher - g_back);
+ thisSproingie->y = (g_higher << 1);
+ thisSproingie->z = (g_back - g_higher);
+ thisSproingie->life = 40 + myrand(200);
+ thisSproingie->frame = -10;
+ thisSproingie->r = (GLfloat) (40 + myrand(200)) / 255.0;
+ thisSproingie->g = (GLfloat) (40 + myrand(200)) / 255.0;
+ thisSproingie->b = (GLfloat) (40 + myrand(200)) / 255.0;
+
+ for (t2 = 0; t2 < si->maxsproingies; ++t2) {
+ if ((t2 != t) && (thisSproingie->x == S2->x) && (thisSproingie->y == S2->y) &&
+ (thisSproingie->z == S2->z) && (S2->life > 10) && (S2->frame < 0)) {
+ /* If one is already being born, just wait. */
+ thisSproingie->life = -1;
+ }
+ ++S2;
+ }
+ }
+}
+
+void
+NextSproingie(int screen)
+{
+ sp_instance *si = &si_list[screen];
+ int ddx, t;
+ struct sPosColor *thisSproingie = &(si->positions[0]);
+
+ if (++si->sframe > 11) {
+ si->sframe = 0;
+ for (t = 0; t < si->maxsproingies; ++t) {
+ thisSproingie->x -= 1;
+ thisSproingie->y += 2;
+ thisSproingie->z -= 1;
+ ++thisSproingie;
+ }
+ }
+ for (t = 0; t < si->maxsproingies; ++t) {
+ AdvanceSproingie(t, si);
+ }
+
+ if (si->target_count < 0) { /* track to current target */
+ if (si->target_rx < si->rotx)
+ --si->rotx;
+ else if (si->target_rx > si->rotx)
+ ++si->rotx;
+
+ if (si->target_ry < si->roty)
+ --si->roty;
+ else if (si->target_ry > si->roty)
+ ++si->roty;
+
+ ddx = (si->target_dist - si->dist) / 8;
+ if (ddx)
+ si->dist += ddx;
+ else if (si->target_dist < si->dist)
+ --si->dist;
+ else if (si->target_dist > si->dist)
+ ++si->dist;
+
+ if ((si->target_rx == si->rotx) && (si->target_ry == si->roty) && (si->target_dist == si->dist)) {
+ si->target_count = T_COUNT;
+ if (si->target_dist <= 32)
+ si->target_count >>= 2;
+ }
+ } else if (--si->target_count < 0) { /* make up new target */
+ si->target_rx = myrand(100) - 35;
+ si->target_ry = -myrand(90);
+ si->target_dist = 32 << myrand(2); /* could be 32, 64, or 128, (previously or 256) */
+
+ if (si->target_dist >= si->dist) /* no duplicate distances */
+ si->target_dist <<= 1;
+ }
+ /* Otherwise just hang loose for a while here */
+}
+
+#ifdef __AUXFUNCS__
+void
+PrintEm(void)
+{
+ int t, count = 0;
+
+ for (t = 0; t < maxsproingies; ++t) {
+ if (positions[t].life > 0)
+ ++count;
+ }
+ (void) printf("RotX: %d, RotY: %d, Dist: %d. Targets: X %d, Y %d, D %d. Visible: %d\n",
+ rotx, roty, dist, target_rx, target_ry, target_dist, count);
+}
+
+void
+ResetEm(void)
+{
+ int t;
+
+ for (t = 0; t < maxsproingies; ++t) {
+ positions[t].x = 0;
+ positions[t].y = 0;
+ positions[t].z = 0;
+ positions[t].life = -2;
+ positions[t].frame = 0;
+ }
+}
+
+void
+distAdd(void)
+{
+ if (dist < (1 << 16 << 4))
+ dist <<= 1;
+}
+
+void
+distSubtract(void)
+{
+ if (dist > 1)
+ dist >>= 1;
+}
+
+void
+rotxAdd(void)
+{
+ rotx = (rotx + 5) % 360;
+}
+
+void
+rotxSubtract(void)
+{
+ rotx = (rotx - 5) % 360;
+}
+
+void
+rotyAdd(void)
+{
+ roty = (roty + 5) % 360;
+}
+
+void
+rotySubtract(void)
+{
+ roty = (roty - 5) % 360;
+}
+
+void
+rotxBAdd(void)
+{
+ rotx = (rotx + 45) % 360;
+}
+
+void
+rotxBSubtract(void)
+{
+ rotx = (rotx - 45) % 360;
+}
+
+void
+rotyBAdd(void)
+{
+ roty = (roty + 45) % 360;
+}
+
+void
+rotyBSubtract(void)
+{
+ roty = (roty - 45) % 360;
+}
+
+#endif
+
+static void
+RenderSproingie(int t, sp_instance * si)
+{
+ GLfloat scale, pointsize, mat_color[4] =
+ {0.0, 0.0, 0.0, 1.0};
+ GLdouble clipplane[4] =
+ {0.0, 1.0, 0.0, 0.0};
+ struct sPosColor *thisSproingie = &(si->positions[t]);
+
+ if (thisSproingie->life < 1)
+ return;
+
+ glPushMatrix();
+
+ if (!si->mono) {
+ mat_color[0] = thisSproingie->r;
+ mat_color[1] = thisSproingie->g;
+ mat_color[2] = thisSproingie->b;
+ if (si->wireframe)
+ glColor3fv(mat_color);
+ else {
+ glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat_color);
+ }
+ }
+ if (thisSproingie->frame < 0) {
+ glEnable(GL_CLIP_PLANE0);
+ glTranslatef((GLfloat) (thisSproingie->x),
+ (GLfloat) (thisSproingie->y) + ((GLfloat) (thisSproingie->frame) / 9.0),
+ (GLfloat) (thisSproingie->z));
+ clipplane[3] = ((GLdouble) (thisSproingie->frame) / 9.0) +
+ (si->wireframe ? 0.0 : 0.1);
+ glClipPlane(GL_CLIP_PLANE0, clipplane);
+ glCallList(si->sproingies[0]);
+ glDisable(GL_CLIP_PLANE0);
+ } else if (thisSproingie->frame >= BOOM_FRAME) {
+ glTranslatef((GLfloat) (thisSproingie->x) + 0.5, (GLfloat) (thisSproingie->y) + 0.5, (GLfloat) (thisSproingie->z) - 0.5);
+ scale = (GLfloat) (1 << (thisSproingie->frame - BOOM_FRAME));
+ glScalef(scale, scale, scale);
+ if (!si->wireframe) {
+ if (!si->mono)
+ glColor3fv(mat_color);
+ glDisable(GL_LIGHTING);
+ }
+ pointsize = (GLfloat) ((BOOM_FRAME + 8) - thisSproingie->frame) - (si->dist / 64.0);
+ glPointSize((pointsize < 1.0) ? 1.0 : pointsize);
+/* PURIFY 4.0.1 reports an unitialized memory read on the next line when using
+ * MesaGL 2.2. This has been tracked to MesaGL 2.2 src/points.c line 313. */
+ glCallList(si->SproingieBoom);
+ glPointSize(1.0);
+ if (!si->wireframe) {
+ glEnable(GL_LIGHTING);
+ }
+ } else if (thisSproingie->frame > 5) {
+ glTranslatef((GLfloat) (thisSproingie->x + 1), (GLfloat) (thisSproingie->y - 1), (GLfloat) (thisSproingie->z - 1));
+ glRotatef((GLfloat) - 90.0, 0.0, 1.0, 0.0);
+ glCallList(si->sproingies[thisSproingie->frame - 6]);
+ } else {
+ glTranslatef((GLfloat) (thisSproingie->x), (GLfloat) (thisSproingie->y), (GLfloat) (thisSproingie->z));
+ glCallList(si->sproingies[thisSproingie->frame]);
+ }
+
+ glPopMatrix();
+
+}
+
+static void
+ComputeGround(sp_instance * si)
+{
+ int g_higher, g_back, g_width, g_height;
+
+ /* higher: x-1, y+2, z-1 */
+ /* back: x-1, y, z+1 */
+
+ if (si->groundlevel == 0) {
+ g_back = 2;
+ g_width = 5;
+ } else if (si->groundlevel == 1) {
+ g_back = 4;
+ g_width = 8;
+ } else {
+ g_back = 8;
+ g_width = 16;
+ }
+
+ if ((g_higher = si->dist >> 3) < 4)
+ g_higher = 4;
+ if (g_higher > 16)
+ g_higher = 16;
+ g_height = g_higher << 1;
+
+ if (si->rotx < -10)
+ g_higher += (g_higher >> 2);
+ else if (si->rotx > 10)
+ g_higher -= (g_higher >> 2);
+
+#if 0
+ if (si->dist > 128) {
+ ++g_higher;
+ ++g_back;
+ g_back <<= 1;
+ } else if (si->dist > 64) {
+ ++g_higher;
+ ++g_back;
+ } else if (si->dist > 32) {
+ /* nothing special */
+ } else {
+ if (g_higher > 2) {
+ g_higher = g_back = 4;
+ }
+ }
+#endif
+
+ /* startx, starty, startz, width, height */
+ LayGround((-g_higher - g_back), (g_higher << 1), (g_back - g_higher),
+ (g_width), (g_height), si);
+}
+
+void
+DisplaySproingies(int screen)
+{
+ sp_instance *si = &si_list[screen];
+ int t;
+ GLfloat position[] =
+ {8.0, 5.0, -2.0, 0.1};
+
+ if (si->wireframe)
+ glClear(GL_COLOR_BUFFER_BIT);
+ else
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ glPushMatrix();
+ glTranslatef(0.0, 0.0, -(GLfloat) (si->dist) / 16.0); /* viewing transform */
+ glRotatef((GLfloat) si->rotx, 1.0, 0.0, 0.0);
+ glRotatef((GLfloat) si->roty, 0.0, 1.0, 0.0);
+
+ if (!si->wireframe)
+ glLightfv(GL_LIGHT0, GL_POSITION, position);
+
+#if 0 /* Show light pos */
+ glPushMatrix();
+ glTranslatef(position[0], position[1], position[2]);
+ glColor3f(1.0, 1.0, 1.0);
+ if (!si->wireframe) {
+ glDisable(GL_LIGHTING);
+ }
+ glCallList(si->SproingieBoom);
+ if (!si->wireframe) {
+ glEnable(GL_LIGHTING);
+ }
+ glPopMatrix();
+#endif
+
+ glTranslatef((GLfloat) si->sframe * (-1.0 / 12.0) - 0.75, (GLfloat) si->sframe * (2.0 / 12.0) - 0.5,
+ (GLfloat) si->sframe * (-1.0 / 12.0) + 0.75);
+
+ if (si->wireframe)
+ ComputeGround(si);
+
+ for (t = 0; t < si->maxsproingies; ++t) {
+ RenderSproingie(t, si);
+ }
+
+ if (!si->wireframe)
+ ComputeGround(si);
+
+ glPopMatrix();
+ glFlush();
+
+ SproingieSwap();
+}
+
+void
+NextSproingieDisplay(int screen)
+{
+ NextSproingie(screen);
+ DisplaySproingies(screen);
+}
+
+void
+ReshapeSproingies(int w, int h)
+{
+ glViewport(0, 0, w, h);
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ gluPerspective(65.0, (GLfloat) w / (GLfloat) h, 0.1, 2000.0); /* was 200000.0 */
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+}
+
+void
+CleanupSproingies(int screen)
+{
+ sp_instance *si = &si_list[screen];
+ int t;
+
+ if (si->SproingieBoom) {
+ for (t = 0; t < 6; ++t)
+ glDeleteLists(si->sproingies[t], 1);
+
+ glDeleteLists(si->TopsSides, 2);
+ glDeleteLists(si->SproingieBoom, 1);
+
+ --active_screens;
+ si->SproingieBoom = 0;
+ }
+ if (si->positions) {
+ (void) free((void *) (si->positions));
+ si->positions = NULL;
+ }
+ if ((active_screens == 0) && si_list) {
+ (void) free((void *) (si_list));
+ si_list = NULL;
+ }
+}
+
+void
+InitSproingies(int wfmode, int grnd, int mspr, int screen, int numscreens, int mono)
+{
+ GLfloat ambient[] =
+ {0.2, 0.2, 0.2, 1.0};
+ GLfloat position[] =
+ {10.0, 1.0, 1.0, 10.0};
+ GLfloat mat_diffuse[] =
+ {0.6, 0.6, 0.6, 1.0};
+ GLfloat mat_specular[] =
+ {0.8, 0.8, 0.8, 1.0};
+ GLfloat mat_shininess[] =
+ {50.0};
+
+ sp_instance *si;
+ int t;
+
+ if (si_list == NULL) {
+ if ((si_list = (sp_instance *) calloc(numscreens,
+ sizeof (sp_instance))) == NULL)
+ return;
+ }
+ si = &si_list[screen];
+
+ active_screens++;
+ CleanupSproingies(screen);
+
+ if (mspr < 0)
+ mspr = 0;
+ if (mspr >= MAXSPROING)
+ mspr = MAXSPROING - 1;
+
+ si->rotx = 0;
+ si->roty = -45;
+ si->dist = (16 << 2);
+ si->sframe = 0;
+ si->target_count = 0;
+ si->mono = mono;
+
+ si->wireframe = si->flatshade = 0;
+
+ if (wfmode == 2)
+ si->flatshade = 1;
+ else if (wfmode)
+ si->wireframe = 1;
+
+ si->groundlevel = grnd;
+ si->maxsproingies = mspr;
+
+ if (si->maxsproingies) {
+ si->positions = (struct sPosColor *) calloc(si->maxsproingies, sizeof (struct sPosColor));
+
+ if (!(si->positions))
+ si->maxsproingies = 0;
+ }
+ for (t = 0; t < si->maxsproingies; ++t) {
+ si->positions[t].x = 0;
+ si->positions[t].y = 0;
+ si->positions[t].z = 0;
+ si->positions[t].life = (-t * ((si->maxsproingies > 19) ? 1 : 4)) - 2;
+ si->positions[t].frame = 0;
+ }
+
+#if 0 /* Test boom */
+ si->positions[0].x = 0;
+ si->positions[0].y = 0;
+ si->positions[0].z = 0;
+ si->positions[0].life = 10;
+ si->positions[0].frame = BOOM_FRAME;
+ si->positions[0].r = 0.656863;
+ si->positions[0].g = 1.0;
+ si->positions[0].b = 0.656863;
+#endif
+
+ if (!(si->TopsSides = build_TopsSides(si->wireframe)))
+ exit(1);
+
+ if (!(si->sproingies[0] = BuildLWO(si->wireframe, &LWO_s1_1)))
+ exit(1);
+ if (!(si->sproingies[1] = BuildLWO(si->wireframe, &LWO_s1_2)))
+ exit(1);
+ if (!(si->sproingies[2] = BuildLWO(si->wireframe, &LWO_s1_3)))
+ exit(1);
+ if (!(si->sproingies[3] = BuildLWO(si->wireframe, &LWO_s1_4)))
+ exit(1);
+ if (!(si->sproingies[4] = BuildLWO(si->wireframe, &LWO_s1_5)))
+ exit(1);
+ if (!(si->sproingies[5] = BuildLWO(si->wireframe, &LWO_s1_6)))
+ exit(1);
+
+ if (!(si->SproingieBoom = BuildLWO(si->wireframe, &LWO_s1_b)))
+ exit(1);
+
+ if (si->wireframe) {
+ glShadeModel(GL_FLAT);
+ glDisable(GL_LIGHTING);
+ } else {
+ if (si->flatshade) {
+ glShadeModel(GL_FLAT);
+ position[0] = 1.0;
+ position[3] = 0.0;
+ }
+ glEnable(GL_LIGHTING);
+ glEnable(GL_LIGHT0);
+ glDepthFunc(GL_LEQUAL);
+ glEnable(GL_DEPTH_TEST);
+
+ glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
+ glLightfv(GL_LIGHT0, GL_POSITION, position);
+
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mat_diffuse);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat_specular);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, mat_shininess);
+
+ /* glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE); */
+ glCullFace(GL_BACK);
+ glEnable(GL_CULL_FACE);
+
+ glFrontFace(GL_CW);
+ /* glEnable(GL_NORMALIZE); */
+ }
+}
+
+#endif
+
+/* End of sproingies.c */
--- /dev/null
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)sproingiewrap.c 4.2 97/04/26 xlockmore";
+
+#endif
+
+/*-
+ * sproingiewrap.c - Copyright 1996 Sproingie Technologies Incorporated.
+ * Source and binary freely distributable under the
+ * terms in xlock.c
+ *
+ * Programming: Ed Mackey, http://www.early.com/~emackey/
+ * Sproingie 3D objects modeled by: Al Mackey, al@iam.com
+ * (using MetaNURBS in NewTek's Lightwave 3D v5).
+ *
+ * Revision History:
+ * 26-Apr-97: Added glPointSize() calls around explosions, plus other fixes.
+ * 28-Mar-97: Added size support.
+ * 22-Mar-97: Updated to use glX interface instead of xmesa one.
+ * Also, support for multiscreens added.
+ * 20-Mar-97: Updated for xlockmore v4.02alpha7 and higher, using
+ * xlockmore's built-in Mesa/OpenGL support instead of
+ * my own. Submitted for inclusion in xlockmore.
+ * 09-Dec-96: Written.
+ *
+ * Ed Mackey
+ */
+
+/*-
+The sproingies have six "real"
+frames, (s1_1 to s1_6) that show a sproingie jumping off a block, headed
+down and to the right. But the program thinks of sproingies as having
+twelve "virtual" frames, with the latter six being copies of the first,
+only lowered and rotated by 90 degrees (jumping to the left). So after
+going through 12 frames, a sproingie has gone down two rows but not moved
+horizontally.
+
+To have the sproingies randomly choose left/right jumps at each block, the
+program should go back to thinking of only 6 frames, and jumping down
+only one row when it is done. Then it can pick a direction for the next
+row.
+
+ (Falling off the end might not be so bad either. :) )
+*/
+
+
+#include "xlock.h"
+
+#ifdef USE_GL
+
+#define MINSIZE 32
+
+#include <GL/glu.h>
+#include <time.h>
+
+ModeSpecOpt sproingies_opts =
+{0, NULL, 0, NULL, NULL};
+
+void NextSproingie(int screen);
+void NextSproingieDisplay(int screen);
+void DisplaySproingies(int screen);
+void ReshapeSproingies(int w, int h);
+void CleanupSproingies(int screen);
+void InitSproingies(int wfmode, int grnd, int mspr, int screen, int numscreens, int mono);
+
+typedef struct {
+ GLfloat view_rotx, view_roty, view_rotz;
+ GLint gear1, gear2, gear3;
+ GLfloat angle;
+ GLuint limit;
+ GLuint count;
+ GLXContext glx_context;
+ int mono;
+} sproingiesstruct;
+
+static sproingiesstruct *sproingies = NULL;
+
+static Display *swap_display;
+static Window swap_window;
+
+void
+SproingieSwap(void)
+{
+ glFinish();
+ glXSwapBuffers(swap_display, swap_window);
+}
+
+
+/* ARGSUSED */
+void
+draw_sproingies(ModeInfo * mi)
+{
+ sproingiesstruct *sp = &sproingies[MI_SCREEN(mi)];
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+
+ glDrawBuffer(GL_BACK);
+ glXMakeCurrent(display, window, sp->glx_context);
+
+ swap_display = display;
+ swap_window = window;
+
+ NextSproingieDisplay(MI_SCREEN(mi)); /* It will swap. */
+}
+
+void
+refresh_sproingies(ModeInfo * mi)
+{
+ /* No need to do anything here... The whole screen is updated
+ * every frame anyway. Otherwise this would be just like
+ * draw_sproingies, above, but replace NextSproingieDisplay(...)
+ * with DisplaySproingies(...).
+ */
+}
+
+void
+release_sproingies(ModeInfo * mi)
+{
+ if (sproingies != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ sproingiesstruct *sp = &sproingies[screen];
+
+ glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), sp->glx_context);
+ CleanupSproingies(MI_SCREEN(mi));
+ }
+
+ /* Don't destroy the glXContext. init_GL does that. */
+
+ (void) free((void *) sproingies);
+ sproingies = NULL;
+ }
+}
+
+void
+init_sproingies(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ int screen = MI_SCREEN(mi);
+
+ int cycles = MI_CYCLES(mi);
+ int batchcount = MI_BATCHCOUNT(mi);
+ int size = MI_SIZE(mi);
+
+ sproingiesstruct *sp;
+ int wfmode = 0, grnd, mspr, w, h;
+
+ if (sproingies == NULL) {
+ if ((sproingies = (sproingiesstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (sproingiesstruct))) == NULL)
+ return;
+ }
+ sp = &sproingies[screen];
+
+ sp->mono = (MI_WIN_IS_MONO(mi) ? 1 : 0);
+
+ sp->glx_context = init_GL(mi);
+
+ if ((cycles & 1) || MI_WIN_IS_WIREFRAME(mi) || sp->mono)
+ wfmode = 1;
+ grnd = (cycles >> 1);
+ if (grnd > 2)
+ grnd = 2;
+
+ mspr = batchcount;
+ if (mspr > 100)
+ mspr = 100;
+
+ /* wireframe, ground, maxsproingies */
+ InitSproingies(wfmode, grnd, mspr, MI_SCREEN(mi), MI_NUM_SCREENS(mi), sp->mono);
+
+ /* Viewport is specified size if size >= MINSIZE && size < screensize */
+ if (size == 0) {
+ w = MI_WIN_WIDTH(mi);
+ h = MI_WIN_HEIGHT(mi);
+ } else if (size < MINSIZE) {
+ w = MINSIZE;
+ h = MINSIZE;
+ } else {
+ w = (size > MI_WIN_WIDTH(mi)) ? MI_WIN_WIDTH(mi) : size;
+ h = (size > MI_WIN_HEIGHT(mi)) ? MI_WIN_HEIGHT(mi) : size;
+ }
+
+ glViewport((MI_WIN_WIDTH(mi) - w) / 2, (MI_WIN_HEIGHT(mi) - h) / 2, w, h);
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ gluPerspective(65.0, (GLfloat) w / (GLfloat) h, 0.1, 2000.0); /* was 200000.0 */
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+
+ swap_display = display;
+ swap_window = window;
+ DisplaySproingies(MI_SCREEN(mi));
+}
+
+#endif
+
+/* End of sproingiewrap.c */
--- /dev/null
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)superquadrics.c 4.0 97/03/30 xlockmore";
+
+#endif
+
+/*-
+ * Superquadrics were invented by Dr. Alan Barr of Caltech University.
+ * They were first published in "Computer Graphics and Applications",
+ * volume 1, number 1, 1981, in the article "Superquadrics and Angle-
+ * Preserving Transformations." Dr. Barr based the Superquadrics on
+ * Piet Hein's "super ellipses." Super ellipses are like 2D ellipses,
+ * except that the formula includes an exponent, raising its X and Y
+ * values to a (fractional) power, and allowing them to gradually
+ * change from round to square edges. Superquadrics extend this
+ * idea into 3 dimensions, using two exponents to modify a
+ * quadric surface in a similar fashion.
+ */
+
+/*-
+ * superquadrics.c - 3D mathematical shapes
+ *
+ * See xlock.c for copying information.
+ *
+ * Revision History:
+ * 30-Mar-97: Turned into a module for xlockmore 4.02 alpha. The code
+ * is almost unrecognizable now from the first revision, except for
+ * a few remaining two-letter variable names. I still don't have
+ * the normal vectors working right (I wrote the buggy normal vector
+ * code myself, can you tell?)
+ * 07-Jan-97: A legend reborn; Superquadrics make an appearance as a
+ * real OpenGL program written in C. I can even render them with
+ * proper lighting and specular highlights. Gee, they look almost
+ * as good now as the original color plates of them that my uncle
+ * showed me as a child in 1981. I don't know what computer hardware
+ * he was using at the time, but it's taken a couple decades for the
+ * PC clone hardware to catch up to it.
+ * 05-Jan-97: After almost a decade, Superquadrics had almost faded away
+ * into the myths and folklore of all the things my brother and I played
+ * with on computers when we were kids with too much time on our hands.
+ * I had since gotten involved in Unix, OpenGL, and other things.
+ * A sudden flash of inspiration caused me to dig out the old Pascal
+ * source code, run it through p2c, and start ripping away the old
+ * wireframe rendering code, to be replaced by OpenGL.
+ * Late 1989 or early 1990: Around this time I did the Turbo Pascal
+ * port of the Superquadrics. Unfortunately, many of the original variable
+ * names remained the same from the C= 64 original. This was unfortunate
+ * because BASIC on the c64 only allowed 2-letter, global variable names.
+ * But the speed improvement over BASIC was very impressive at the time.
+ * Thanksgiving, 1987: Written. My uncle Al, who invented Superquadrics some
+ * years earlier, came to visit us. I was a high school kid at the time,
+ * with nothing more than a Commodore 64. Somehow we wrote this program,
+ * (he did the math obviously, I just coded it into BASIC for the c64).
+ * Yeah, 320x200 resolution, colorless white wireframe, and half an hour
+ * rendering time per superquadric. PLOT x,y. THOSE were the days.
+ * In the following years I would port Superquadrics to AppleBASIC,
+ * AmigaBASIC, and then Turbo Pascal for IBM clones. 5 minutes on a 286!
+ * Talk about fast rendering! But these days, when my Pentium 166 runs
+ * the same program, the superquadric will already be waiting on the
+ * screen before my monitor can change frequency from text to graphics
+ * mode. Can't time the number of minutes that way! Darn ;)
+ *
+ * Ed Mackey
+ */
+
+/*-
+ * due to a Bug/feature in VMS X11/Intrinsic.h has to be placed before xlock.
+ * otherwise caddr_t is not defined correctly
+ */
+#include <X11/Intrinsic.h>
+#include "xlock.h"
+
+#ifdef USE_GL
+#include <GL/glu.h>
+
+/*-
+ * Note for low-CPU-speed machines: If your frame rate is so low that
+ * attempts at animation appear futile, try using "-cycles 1", which puts
+ * Superquadrics into kind of a slide-show mode. It will still use up
+ * all of your CPU power, but it may look nicer.
+ */
+
+#define DEF_SPINSPEED "5.0"
+
+static float spinspeed;
+
+static XrmOptionDescRec opts[] =
+{
+ {"-spinspeed", ".superquadrics.spinspeed", XrmoptionSepArg, (caddr_t) NULL}
+};
+static argtype vars[] =
+{
+ {(caddr_t *) & spinspeed, "spinspeed", "Spinspeed", DEF_SPINSPEED, t_Float}
+};
+static OptionStruct desc[] =
+{
+ {"-spinspeed num", "speed of rotation, in degrees per frame"}
+};
+
+ModeSpecOpt superquadrics_opts =
+{1, opts, 1, vars, desc};
+
+
+#define MaxRes 50
+#define MinRes 5
+
+typedef double dimi[MaxRes + 1];
+
+typedef struct {
+ double xExponent, yExponent;
+ GLfloat r[4], g[4], b[4];
+ long Mode;
+ int rotx, rotz;
+} state;
+
+typedef struct {
+ GLXContext glx_context;
+ int dist, wireframe, flatshade, shownorms, maxcount, maxwait;
+ int counter, viewcount, viewwait, mono;
+ GLfloat curmat[4][4], rotx, roty, rotz, spinspeed;
+ /* In dimi: the first letter stands for cosine/sine, the second
+ * stands for North, South, East, or West. I think.
+ */
+ dimi cs, se, sw, sn, ss, ce, cw, cn, Prevxx, Prevyy, Prevzz,
+ Prevxn, Prevyn, Prevzn;
+ double xExponent, yExponent, Mode;
+ int resolution;
+ state now, later;
+} superquadricsstruct;
+
+static superquadricsstruct *superquadrics = NULL;
+
+#define CLIP_NORMALS 10000.0
+
+void ReshapeSuperquadrics(int w, int h);
+
+static int
+myrand(int range)
+{
+ return ((int) (((float) range) * LRAND() / (MAXRAND)));
+}
+
+static float
+myrandreal(void)
+{
+ return (LRAND() / (MAXRAND));
+}
+
+/* Some old, old, OLD code follows. Ahh this takes me back..... */
+
+/* Output from p2c, the Pascal-to-C translator */
+/* From input file "squad.pas" */
+
+static double
+XtoY(double x, double y)
+{
+ double z, a;
+
+ /* This is NOT your typical raise-X-to-the-Y-power function. Do not attempt
+ * to replace this with a standard exponent function. If you must, just
+ * replace the "a = exp(y * log(z));" line with something faster.
+ */
+
+ z = fabs(x);
+ if (z < 1e-20) {
+ a = 0.0;
+ return a;
+ }
+ a = exp(y * log(z));
+ if (a > CLIP_NORMALS)
+ a = CLIP_NORMALS;
+ if (x < 0)
+ a = -a;
+ return a;
+}
+
+
+static double
+Sine(double x, double e)
+{
+ /* This is just the sine wave raised to the exponent. BUT, you can't
+ * raise negative numbers to fractional exponents. So we have a special
+ * XtoY routune which handles it in a way useful to superquadrics.
+ */
+
+ return (XtoY(sin(x), e));
+}
+
+
+static double
+Cosine(double x, double e)
+{
+ return (XtoY(cos(x), e));
+}
+
+
+static void
+MakeUpStuff(int allstuff, superquadricsstruct * sp)
+{
+ static int pats[4][4] =
+ {
+ {0, 0, 0, 0},
+ {0, 1, 0, 1},
+ {0, 0, 1, 1},
+ {0, 1, 1, 0}
+ };
+
+ int dostuff;
+ int t, pat;
+ GLfloat r, g, b, r2, g2, b2;
+
+ /* randomize it. */
+
+ if (sp->maxcount < 2)
+ allstuff = 1;
+ dostuff = allstuff * 15;
+ if (!dostuff) {
+ dostuff = myrand(3) + 1;
+ if (myrand(2) || (dostuff & 1))
+ dostuff |= 4;
+ if (myrand(2))
+ dostuff |= 8;
+ }
+ if (dostuff & 1) {
+ sp->later.xExponent = (((long) floor(myrandreal() * 250 + 0.5)) / 100.0) + 0.1;
+ sp->later.yExponent = (((long) floor(myrandreal() * 250 + 0.5)) / 100.0) + 0.1;
+
+ /* Increase the 2.0 .. 2.5 range to 2.0 .. 3.0 */
+ if (sp->later.xExponent > 2.0)
+ sp->later.xExponent = (sp->later.xExponent * 2.0) - 2.0;
+ if (sp->later.yExponent > 2.0)
+ sp->later.yExponent = (sp->later.yExponent * 2.0) - 2.0;
+ }
+ if (dostuff & 2) {
+ do {
+ sp->later.Mode = myrand(3L) + 1;
+ } while (!allstuff && (sp->later.Mode == sp->now.Mode));
+ /* On init: make sure it can stay in mode 1 if it feels like it. */
+ }
+ if (dostuff & 4) {
+ if (sp->mono) {
+ b = g = r = (GLfloat) (140 + myrand(100)) / 255.0;
+ b2 = g2 = r2 = ((r > 0.69) ? (1.0 - r) : r);
+ } else {
+ r = (GLfloat) (40 + myrand(200)) / 255.0;
+ g = (GLfloat) (40 + myrand(200)) / 255.0;
+ b = (GLfloat) (40 + myrand(200)) / 255.0;
+
+ r2 = ((myrand(4) && ((r < 0.31) || (r > 0.69))) ? (1.0 - r) : r);
+ g2 = ((myrand(4) && ((g < 0.31) || (g > 0.69))) ? (1.0 - g) : g);
+ b2 = ((myrand(4) && ((b < 0.31) || (b > 0.69))) ? (1.0 - b) : b);
+ }
+
+ pat = myrand(4);
+ for (t = 0; t < 4; ++t) {
+ sp->later.r[t] = pats[pat][t] ? r : r2;
+ sp->later.g[t] = pats[pat][t] ? g : g2;
+ sp->later.b[t] = pats[pat][t] ? b : b2;
+ }
+ }
+ if (dostuff & 8) {
+ sp->later.rotx = myrand(360) - 180;
+ sp->later.rotz = myrand(160) - 80;
+ }
+}
+
+static void
+inputs(superquadricsstruct * sp)
+{
+ int iv;
+ double u, v, mode3, cn3, inverter2, flatu, flatv;
+
+ if (sp->Mode < 1.000001) {
+ mode3 = 1.0;
+ cn3 = 0.0;
+ inverter2 = 1.0;
+ } else if (sp->Mode < 2.000001) {
+ mode3 = 1.0;
+ cn3 = (sp->Mode - 1.0) * 1.5;
+ inverter2 = (sp->Mode - 1.0) * -2.0 + 1.0;
+ } else {
+ mode3 = (sp->Mode - 1.0);
+ cn3 = (sp->Mode - 2.0) / 2.0 + 1.5;
+ inverter2 = -1.0;
+ }
+
+ if (sp->flatshade) {
+ flatu = M_PI / (sp->resolution - 1);
+ flatv = mode3 * M_PI / ((sp->resolution - 1) * 2);
+ } else {
+ flatu = flatv = 0.0;
+ }
+
+ /* (void) printf("Calculating....\n"); */
+ for (iv = 1; iv <= sp->resolution; iv++) {
+
+ /* u ranges from PI down to -PI */
+ u = (1 - iv) * 2 * M_PI / (sp->resolution - 1) + M_PI;
+
+ /* v ranges from PI/2 down to -PI/2 */
+ v = (1 - iv) * mode3 * M_PI / (sp->resolution - 1) + M_PI * (mode3 / 2.0);
+
+ /* Use of xExponent */
+ sp->se[iv] = Sine(u, sp->xExponent);
+ sp->ce[iv] = Cosine(u, sp->xExponent);
+ sp->sn[iv] = Sine(v, sp->yExponent);
+ sp->cn[iv] = Cosine(v, sp->yExponent) * inverter2 + cn3;
+
+ /* Normal vector computations only */
+ sp->sw[iv] = Sine(u + flatu, 2 - sp->xExponent);
+ sp->cw[iv] = Cosine(u + flatu, 2 - sp->xExponent);
+ sp->ss[iv] = Sine(v + flatv, 2 - sp->yExponent) * inverter2;
+ sp->cs[iv] = Cosine(v + flatv, 2 - sp->yExponent);
+ } /* next */
+
+ /* Now fix up the endpoints */
+ sp->se[sp->resolution] = sp->se[1];
+ sp->ce[sp->resolution] = sp->ce[1];
+
+ if (sp->Mode > 2.999999) {
+ sp->sn[sp->resolution] = sp->sn[1];
+ sp->cn[sp->resolution] = sp->cn[1];
+ }
+}
+
+
+static void
+DoneScale(superquadricsstruct * sp)
+{
+ double xx, yy, zz, xp = 0, yp = 0, zp = 0, xn, yn, zn, xnp = 0,
+ ynp = 0, znp = 0;
+ int ih, iv;
+
+ /* Hey don't knock my 2-letter variable names. Simon's BASIC rules, man! ;-> */
+ /* Just kidding..... */
+ int toggle = 0;
+
+ for (ih = 1; ih <= sp->resolution; ih++) {
+ toggle ^= 2;
+ for (iv = 1; iv <= sp->resolution; iv++) {
+ toggle ^= 1;
+ if (sp->wireframe)
+ glColor3f(sp->curmat[toggle][0], sp->curmat[toggle][1], sp->curmat[toggle][2]);
+ else
+ glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, sp->curmat[toggle]);
+
+ xx = sp->cn[iv] * sp->ce[ih];
+ zz = sp->cn[iv] * sp->se[ih];
+ yy = sp->sn[iv];
+
+ if (sp->wireframe) {
+ if ((ih > 1) || (iv > 1)) {
+ glBegin(GL_LINES);
+ if (ih > 1) {
+ glVertex3f(xx, yy, zz);
+ glVertex3f(sp->Prevxx[iv], sp->Prevyy[iv], sp->Prevzz[iv]);
+ }
+ if (iv > 1) {
+ glVertex3f(xx, yy, zz);
+ glVertex3f(sp->Prevxx[iv - 1], sp->Prevyy[iv - 1], sp->Prevzz[iv - 1]);
+ }
+/* PURIFY 4.0.1 reports an unitialized memory read on the next line when using
+ * MesaGL 2.2 and -mono. This has been fixed in MesaGL 2.3 and later. */
+ glEnd();
+ }
+ } else {
+ if ((sp->cs[iv] > 1e+10) || (sp->cs[iv] < -1e+10)) {
+ xn = sp->cs[iv];
+ zn = sp->cs[iv];
+ yn = sp->ss[iv];
+ } else {
+ xn = sp->cs[iv] * sp->cw[ih];
+ zn = sp->cs[iv] * sp->sw[ih];
+ yn = sp->ss[iv];
+ }
+ if ((ih > 1) && (iv > 1)) {
+ glNormal3f(xn, yn, zn);
+ glBegin(GL_POLYGON);
+ glVertex3f(xx, yy, zz);
+ if (!sp->flatshade)
+ glNormal3f(sp->Prevxn[iv], sp->Prevyn[iv], sp->Prevzn[iv]);
+ glVertex3f(sp->Prevxx[iv], sp->Prevyy[iv], sp->Prevzz[iv]);
+ if (!sp->flatshade)
+ glNormal3f(xnp, ynp, znp);
+ glVertex3f(xp, yp, zp);
+ if (!sp->flatshade)
+ glNormal3f(sp->Prevxn[iv - 1], sp->Prevyn[iv - 1], sp->Prevzn[iv - 1]);
+ glVertex3f(sp->Prevxx[iv - 1], sp->Prevyy[iv - 1], sp->Prevzz[iv - 1]);
+ glEnd();
+ }
+ if (sp->shownorms) {
+ if (!sp->flatshade)
+ glShadeModel(GL_FLAT);
+ glDisable(GL_LIGHTING);
+ glBegin(GL_LINES);
+ glVertex3f(xx, yy, zz);
+ glVertex3f(xx + xn, yy + yn, zz + zn);
+ glEnd();
+ if (!sp->flatshade)
+ glShadeModel(GL_SMOOTH);
+ glEnable(GL_LIGHTING);
+ }
+ xnp = sp->Prevxn[iv];
+ ynp = sp->Prevyn[iv];
+ znp = sp->Prevzn[iv];
+ sp->Prevxn[iv] = xn;
+ sp->Prevyn[iv] = yn;
+ sp->Prevzn[iv] = zn;
+ }
+
+ xp = sp->Prevxx[iv];
+ yp = sp->Prevyy[iv];
+ zp = sp->Prevzz[iv];
+ sp->Prevxx[iv] = xx;
+ sp->Prevyy[iv] = yy;
+ sp->Prevzz[iv] = zz;
+
+ } /* next */
+ } /* next */
+}
+
+/**** End of really old code ****/
+
+void
+SetCull(int init, superquadricsstruct * sp)
+{
+ static int cullmode;
+
+ if (init) {
+ cullmode = 0;
+ return;
+ }
+ if (sp->Mode < 1.0001) {
+ if (cullmode != 1) {
+ glEnable(GL_CULL_FACE);
+ glCullFace(GL_BACK);
+ cullmode = 1;
+ }
+ } else if (sp->Mode > 2.9999) {
+ if (cullmode != 2) {
+ glEnable(GL_CULL_FACE);
+ glCullFace(GL_FRONT);
+ cullmode = 2;
+ }
+ } else {
+ if (cullmode) {
+ glDisable(GL_CULL_FACE);
+ cullmode = 0;
+ }
+ }
+}
+
+void
+SetCurrentShape(superquadricsstruct * sp)
+{
+ int t;
+
+ sp->xExponent = sp->now.xExponent = sp->later.xExponent;
+ sp->yExponent = sp->now.yExponent = sp->later.yExponent;
+
+ for (t = 0; t < 4; ++t) {
+ sp->curmat[t][0] = sp->now.r[t] = sp->later.r[t];
+ sp->curmat[t][1] = sp->now.g[t] = sp->later.g[t];
+ sp->curmat[t][2] = sp->now.b[t] = sp->later.b[t];
+ }
+
+ sp->Mode = (double) (sp->now.Mode = sp->later.Mode);
+ sp->rotx = sp->now.rotx = sp->later.rotx;
+ sp->rotz = sp->now.rotz = sp->later.rotz;
+
+ sp->counter = -sp->maxwait;
+
+ inputs(sp);
+}
+
+void
+NextSuperquadric(superquadricsstruct * sp)
+{
+ double fnow, flater;
+ int t;
+
+ sp->roty -= sp->spinspeed;
+ while (sp->roty >= 360.0)
+ sp->roty -= 360.0;
+ while (sp->roty < 0.0)
+ sp->roty += 360.0;
+
+ --sp->viewcount;
+
+ if (sp->counter > 0) {
+ if (--sp->counter == 0) {
+ SetCurrentShape(sp);
+ if (sp->counter == 0) { /* Happens if sp->maxwait == 0 */
+ MakeUpStuff(0, sp);
+ sp->counter = sp->maxcount;
+ }
+ } else {
+ fnow = (double) sp->counter / (double) sp->maxcount;
+ flater = (double) (sp->maxcount - sp->counter) / (double) sp->maxcount;
+ sp->xExponent = sp->now.xExponent * fnow + sp->later.xExponent * flater;
+ sp->yExponent = sp->now.yExponent * fnow + sp->later.yExponent * flater;
+
+ for (t = 0; t < 4; ++t) {
+ sp->curmat[t][0] = sp->now.r[t] * fnow + sp->later.r[t] * flater;
+ sp->curmat[t][1] = sp->now.g[t] * fnow + sp->later.g[t] * flater;
+ sp->curmat[t][2] = sp->now.b[t] * fnow + sp->later.b[t] * flater;
+ }
+
+ sp->Mode = (double) sp->now.Mode * fnow + (double) sp->later.Mode * flater;
+ sp->rotx = (double) sp->now.rotx * fnow + (double) sp->later.rotx * flater;
+ sp->rotz = (double) sp->now.rotz * fnow + (double) sp->later.rotz * flater;
+
+ inputs(sp);
+ }
+ } else {
+ if (++sp->counter >= 0) {
+ MakeUpStuff(0, sp);
+ sp->counter = sp->maxcount;
+ }
+ }
+}
+
+void
+DisplaySuperquadrics(superquadricsstruct * sp)
+{
+ glDrawBuffer(GL_BACK);
+ if (sp->wireframe)
+ glClear(GL_COLOR_BUFFER_BIT);
+ else
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ if (sp->viewcount < 1) {
+ sp->viewcount = sp->viewwait;
+ ReshapeSuperquadrics(-1, -1);
+ }
+ glPushMatrix();
+ glTranslatef(0.0, 0.0, -((GLfloat) (sp->dist) / 16.0) - (sp->Mode * 3.0 - 1.0)); /* viewing transform */
+ glRotatef(sp->rotx, 1.0, 0.0, 0.0); /* pitch */
+ glRotatef(sp->rotz, 0.0, 0.0, 1.0); /* bank */
+ glRotatef(sp->roty, 0.0, 1.0, 0.0); /* "spin", like heading but comes after P & B */
+
+ SetCull(0, sp);
+
+ DoneScale(sp);
+
+ glPopMatrix();
+
+ /* Remember to flush & swap the buffers after calling this function! */
+}
+
+void
+NextSuperquadricDisplay(superquadricsstruct * sp)
+{
+ NextSuperquadric(sp);
+ DisplaySuperquadrics(sp);
+}
+
+#define MINSIZE 200
+void
+ReshapeSuperquadrics(int w, int h)
+{
+ static int last_w = 0, last_h = 0;
+ int maxsize, cursize;
+
+ if (w < 0) {
+ w = last_w;
+ h = last_h;
+ } else {
+ last_w = w;
+ last_h = h;
+ }
+ maxsize = (w < h) ? w : h;
+ if (maxsize <= MINSIZE) {
+ cursize = maxsize;
+ } else {
+ cursize = myrand(maxsize - MINSIZE) + MINSIZE;
+ }
+ if ((w > cursize) && (h > cursize)) {
+ glViewport(myrand(w - cursize), myrand(h - cursize), cursize, cursize);
+ w = h = cursize;
+ } else {
+ glViewport(0, 0, w, h);
+ }
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ gluPerspective(30.0, (GLfloat) w / (GLfloat) h, 0.1, 200.0);
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+}
+
+void
+InitSuperquadrics(int wfmode, int snorm, int res, int count, float speed, superquadricsstruct * sp)
+{
+ GLfloat ambient[] =
+ {0.4, 0.4, 0.4, 1.0};
+ GLfloat position[] =
+ {10.0, 1.0, 1.0, 10.0};
+ GLfloat mat_diffuse[] =
+ {1.0, 0.5, 0.5, 1.0};
+ GLfloat mat_specular[] =
+ {0.8, 0.8, 0.8, 1.0};
+ GLfloat mat_shininess[] =
+ {50.0};
+
+ int t;
+
+ for (t = 0; t < 4; ++t)
+ sp->curmat[t][3] = 1.0;
+
+ sp->rotx = 35.0;
+ sp->roty = 0.0;
+ sp->rotz = 0.0;
+ sp->dist = (16 << 3);
+ sp->wireframe = sp->flatshade = sp->shownorms = 0;
+ sp->maxcount = count;
+ if (sp->maxcount < 1)
+ sp->maxcount = 1;
+ sp->maxwait = sp->maxcount >> 1;
+ SetCull(1, sp);
+
+ sp->spinspeed = speed;
+ sp->viewcount = sp->viewwait = (sp->maxcount < 2) ? 1 : (sp->maxcount << 3);
+
+ if (res < MinRes)
+ res = MinRes;
+ if (res > MaxRes)
+ res = MaxRes;
+ sp->resolution = res;
+
+ if (wfmode == 2)
+ sp->flatshade = 1;
+ else if (wfmode)
+ sp->wireframe = 1;
+
+ if (snorm)
+ sp->shownorms = 1;
+
+ if (sp->wireframe) {
+ glShadeModel(GL_FLAT);
+ glDisable(GL_LIGHTING);
+ glColor3f(mat_diffuse[0], mat_diffuse[1], mat_diffuse[2]);
+ } else {
+ if (sp->flatshade) {
+ glShadeModel(GL_FLAT);
+ position[0] = 1.0;
+ position[3] = 0.0;
+ }
+ glEnable(GL_LIGHTING);
+ glEnable(GL_LIGHT0);
+ glDepthFunc(GL_LEQUAL);
+ glEnable(GL_DEPTH_TEST);
+
+ glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
+ glLightfv(GL_LIGHT0, GL_POSITION, position);
+
+ /*glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, mat_diffuse); */
+ glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat_specular);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, mat_shininess);
+
+ glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
+
+ glFrontFace(GL_CW);
+ glEnable(GL_NORMALIZE);
+ }
+
+ MakeUpStuff(1, sp);
+ SetCurrentShape(sp);
+ MakeUpStuff(1, sp); /* Initialize it */
+ sp->counter = sp->maxcount;
+}
+
+/* End of superquadrics main functions */
+
+void
+init_superquadrics(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ int screen = MI_SCREEN(mi);
+
+ superquadricsstruct *sp;
+
+ if (superquadrics == NULL) {
+ if ((superquadrics = (superquadricsstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (superquadricsstruct))) == NULL)
+ return;
+ }
+ sp = &superquadrics[screen];
+ sp->mono = (MI_WIN_IS_MONO(mi) ? 1 : 0);
+
+ sp->glx_context = init_GL(mi);
+
+ InitSuperquadrics(MI_WIN_IS_WIREFRAME(mi) || sp->mono, 0,
+ MI_BATCHCOUNT(mi), MI_CYCLES(mi), spinspeed, sp);
+ ReshapeSuperquadrics(MI_WIN_WIDTH(mi), MI_WIN_HEIGHT(mi));
+
+ DisplaySuperquadrics(sp);
+ glFinish();
+ glXSwapBuffers(display, window);
+}
+
+void
+refresh_superquadrics(ModeInfo * mi)
+{
+ /* Nothing happens here */
+}
+
+void
+draw_superquadrics(ModeInfo * mi)
+{
+ superquadricsstruct *sp = &superquadrics[MI_SCREEN(mi)];
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+
+ glXMakeCurrent(display, window, sp->glx_context);
+
+ NextSuperquadricDisplay(sp);
+
+ glFinish();
+ glXSwapBuffers(display, window);
+}
+
+void
+release_superquadrics(ModeInfo * mi)
+{
+ if (superquadrics != NULL) {
+
+ /* Don't destroy the glXContext. init_GL does that. */
+
+ (void) free((void *) superquadrics);
+ superquadrics = NULL;
+ }
+}
+
+
+#endif
+
+/* End of superquadrics.c */
--- /dev/null
+
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)grav.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * grav.c - planets spinning around a pulsar for xlock, the X Window
+ * System lockscreen.
+ *
+ * Copyright (c) 1993 by Greg Boewring
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 11-Jul-94: color version
+ * 06-Oct-93: Written by Greg Bowering <greg@smug.student.adelaide.edu.au>
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Grav"
+#define HACK_INIT init_grav
+#define HACK_DRAW draw_grav
+#define DEF_DELAY 10000
+#define DEF_BATCHCOUNT -12
+#define BRIGHT_COLORS
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+
+#endif /* STANDALONE */
+
+#define DEF_DECAY "False" /* Damping for decaying orbits */
+#define DEF_TRAIL "False" /* For trails (works good in mono only) */
+
+static Bool decay;
+static Bool trail;
+
+#ifndef STANDALONE
+static XrmOptionDescRec opts[] =
+{
+ {"-decay", ".grav.decay", XrmoptionNoArg, (caddr_t) "on"},
+ {"+decay", ".grav.decay", XrmoptionNoArg, (caddr_t) "off"},
+ {"-trail", ".grav.trail", XrmoptionNoArg, (caddr_t) "on"},
+ {"+trail", ".grav.trail", XrmoptionNoArg, (caddr_t) "off"}
+};
+static argtype vars[] =
+{
+ {(caddr_t *) & decay, "decay", "Decay", DEF_DECAY, t_Bool},
+ {(caddr_t *) & trail, "trail", "Trail", DEF_TRAIL, t_Bool}
+};
+static OptionStruct desc[] =
+{
+ {"-/+decay", "turn on/off decaying orbits"},
+ {"-/+trail", "turn on/off trail dots"}
+};
+
+ModeSpecOpt grav_opts =
+{4, opts, 2, vars, desc};
+
+#endif
+
+#define GRAV -0.02 /* Gravitational constant */
+#define DIST 16.0
+#define COLLIDE 0.0001
+#define ALMOST 15.99
+#define HALF 0.5
+/* #define INTRINSIC_RADIUS 200.0 */
+#define INTRINSIC_RADIUS ((float) (gp->height/5))
+#define STARRADIUS (unsigned int)(gp->height/(2*DIST))
+#define AVG_RADIUS (INTRINSIC_RADIUS/DIST)
+#define RADIUS (unsigned int)(INTRINSIC_RADIUS/(POS(Z)+DIST))
+
+#define XR HALF*ALMOST
+#define YR HALF*ALMOST
+#define ZR HALF*ALMOST
+
+#define VR 0.04
+
+#define DIMENSIONS 3
+#define X 0
+#define Y 1
+#define Z 2
+
+#define DAMP 0.999999
+#define MaxA 0.1 /* Maximum acceleration (w/ damping) */
+
+#define POS(c) planet->P[c]
+#define VEL(c) planet->V[c]
+#define ACC(c) planet->A[c]
+
+#define Planet(x,y)\
+ if ((x) >= 0 && (y) >= 0 && (x) <= gp->width && (y) <= gp->height) {\
+ if (planet->ri < 2)\
+ XDrawPoint(display, window, gc, (x), (y));\
+ else\
+ XFillArc(display, window, gc,\
+ (x) - planet->ri / 2, (y) - planet->ri / 2, planet->ri, planet->ri,\
+ 0, 23040);\
+ }
+
+#define FLOATRAND(min,max) ((min)+(LRAND()/MAXRAND)*((max)-(min)))
+
+typedef struct {
+ double P[DIMENSIONS], V[DIMENSIONS], A[DIMENSIONS];
+ int xi, yi, ri;
+ unsigned long colors;
+} planetstruct;
+
+typedef struct {
+ int width, height;
+ int x, y, sr, nplanets;
+ unsigned long starcolor;
+ planetstruct *planets;
+} gravstruct;
+
+static gravstruct *gravs = NULL;
+
+static void
+init_planet(ModeInfo * mi, planetstruct * planet)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ gravstruct *gp = &gravs[MI_SCREEN(mi)];
+
+ if (MI_NPIXELS(mi) > 2)
+ planet->colors = MI_PIXEL(mi, NRAND(MI_NPIXELS(mi)));
+ else
+ planet->colors = MI_WIN_WHITE_PIXEL(mi);
+ /* Initialize positions */
+ POS(X) = FLOATRAND(-XR, XR);
+ POS(Y) = FLOATRAND(-YR, YR);
+ POS(Z) = FLOATRAND(-ZR, ZR);
+
+ if (POS(Z) > -ALMOST) {
+ planet->xi = (int)
+ ((double) gp->width * (HALF + POS(X) / (POS(Z) + DIST)));
+ planet->yi = (int)
+ ((double) gp->height * (HALF + POS(Y) / (POS(Z) + DIST)));
+ } else
+ planet->xi = planet->yi = -1;
+ planet->ri = RADIUS;
+
+ /* Initialize velocities */
+ VEL(X) = FLOATRAND(-VR, VR);
+ VEL(Y) = FLOATRAND(-VR, VR);
+ VEL(Z) = FLOATRAND(-VR, VR);
+
+ /* Draw planets */
+ Planet(planet->xi, planet->yi);
+}
+
+static void
+draw_planet(ModeInfo * mi, planetstruct * planet)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ gravstruct *gp = &gravs[MI_SCREEN(mi)];
+ double D; /* A distance variable to work with */
+ register unsigned char cmpt;
+
+ D = POS(X) * POS(X) + POS(Y) * POS(Y) + POS(Z) * POS(Z);
+ if (D < COLLIDE)
+ D = COLLIDE;
+ D = sqrt(D);
+ D = D * D * D;
+ for (cmpt = X; cmpt < DIMENSIONS; cmpt++) {
+ ACC(cmpt) = POS(cmpt) * GRAV / D;
+ if (decay) {
+ if (ACC(cmpt) > MaxA)
+ ACC(cmpt) = MaxA;
+ else if (ACC(cmpt) < -MaxA)
+ ACC(cmpt) = -MaxA;
+ VEL(cmpt) = VEL(cmpt) + ACC(cmpt);
+ VEL(cmpt) *= DAMP;
+ } else {
+ /* update velocity */
+ VEL(cmpt) = VEL(cmpt) + ACC(cmpt);
+ }
+ /* update position */
+ POS(cmpt) = POS(cmpt) + VEL(cmpt);
+ }
+
+ gp->x = planet->xi;
+ gp->y = planet->yi;
+
+ if (POS(Z) > -ALMOST) {
+ planet->xi = (int)
+ ((double) gp->width * (HALF + POS(X) / (POS(Z) + DIST)));
+ planet->yi = (int)
+ ((double) gp->height * (HALF + POS(Y) / (POS(Z) + DIST)));
+ } else
+ planet->xi = planet->yi = -1;
+
+ /* Mask */
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ Planet(gp->x, gp->y);
+ if (trail) {
+ XSetForeground(display, gc, planet->colors);
+ XDrawPoint(display, MI_WINDOW(mi), gc, gp->x, gp->y);
+ }
+ /* Move */
+ gp->x = planet->xi;
+ gp->y = planet->yi;
+ planet->ri = RADIUS;
+
+ /* Redraw */
+ XSetForeground(display, gc, planet->colors);
+ Planet(gp->x, gp->y);
+}
+
+void
+init_grav(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ gravstruct *gp;
+ unsigned char ball;
+
+ if (gravs == NULL) {
+ if ((gravs = (gravstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (gravstruct))) == NULL)
+ return;
+ }
+ gp = &gravs[MI_SCREEN(mi)];
+
+ gp->width = MI_WIN_WIDTH(mi);
+ gp->height = MI_WIN_HEIGHT(mi);
+
+ gp->sr = STARRADIUS;
+
+ gp->nplanets = MI_BATCHCOUNT(mi);
+ if (gp->nplanets < 0) {
+ if (gp->planets) {
+ (void) free((void *) gp->planets);
+ gp->planets = NULL;
+ }
+ gp->nplanets = NRAND(-gp->nplanets) + 1; /* Add 1 so its not too boring */
+ }
+ if (!gp->planets)
+ gp->planets = (planetstruct *) calloc(gp->nplanets, sizeof (planetstruct));
+
+ XClearWindow(display, MI_WINDOW(mi));
+
+ if (MI_NPIXELS(mi) > 2)
+ gp->starcolor = MI_PIXEL(mi, NRAND(MI_NPIXELS(mi)));
+ else
+ gp->starcolor = MI_WIN_WHITE_PIXEL(mi);
+ for (ball = 0; ball < (unsigned char) gp->nplanets; ball++)
+ init_planet(mi, &gp->planets[ball]);
+
+ /* Draw centrepoint */
+ XDrawArc(display, MI_WINDOW(mi), gc,
+ gp->width / 2 - gp->sr / 2, gp->height / 2 - gp->sr / 2, gp->sr, gp->sr,
+ 0, 23040);
+}
+
+void
+draw_grav(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ gravstruct *gp = &gravs[MI_SCREEN(mi)];
+ register unsigned char ball;
+
+ /* Mask centrepoint */
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XDrawArc(display, window, gc,
+ gp->width / 2 - gp->sr / 2, gp->height / 2 - gp->sr / 2, gp->sr, gp->sr,
+ 0, 23040);
+
+ /* Resize centrepoint */
+ switch (NRAND(4)) {
+ case 0:
+ if (gp->sr < (int) STARRADIUS)
+ gp->sr++;
+ break;
+ case 1:
+ if (gp->sr > 2)
+ gp->sr--;
+ }
+
+ /* Draw centrepoint */
+ XSetForeground(display, gc, gp->starcolor);
+ XDrawArc(display, window, gc,
+ gp->width / 2 - gp->sr / 2, gp->height / 2 - gp->sr / 2, gp->sr, gp->sr,
+ 0, 23040);
+
+ for (ball = 0; ball < (unsigned char) gp->nplanets; ball++)
+ draw_planet(mi, &gp->planets[ball]);
+}
+
+void
+release_grav(ModeInfo * mi)
+{
+ if (gravs != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ gravstruct *gp = &gravs[screen];
+
+ if (gp->planets)
+ (void) free((void *) gp->planets);
+ }
+ (void) free((void *) gravs);
+ gravs = NULL;
+ }
+}
+
+void
+refresh_grav(ModeInfo * mi)
+{
+ /* Do nothing, it will refresh by itself */
+}
--- /dev/null
+These modes are for hackers only. They are not polished for general release
+or have not been adequately tested. If you fix them up, mail them back to
+your friendly xlockmore maintainer. :)
+
+fadeplot needs to be less flashy, more variablility
+
+To make using configure, its too easy...
+ configure --enable-hackers ; make
+To make using Imakefile... edit Imakefile (find the spot) then do a
+ xmkmf ; make depend ; make
+To make using make.com... edit make.com (find the spot) then do a
+ @make
+
+This will also enable -visual option. So far this only works on swirl,
+tube, and the GL modes.
--- /dev/null
+
+/*-
+ 1) Mode has some problems i.e. the little window
+ 2) It would be nice if then number of "levels" changed in both x and y.
+ 3) Not random enough, i.e. always same starting position.
+ */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)fadeplot.c 4.00 97/01/17 xlockmore";
+
+#endif
+
+/*-
+ * fadeplot.c - fadeplot for xlock, the X Window System lockscreen.
+ *
+ * Some easy plotting stuff, by Bas van Gaalen, Holland, PD
+ *
+ * Converted for xlock by Charles Vidal
+ * See xlock.c for copying information.
+ */
+
+/*-
+<add to mode.h>
+extern ModeHook init_fadeplot;
+extern ModeHook draw_fadeplot;
+extern ModeHook release_fadeplot;
+extern ModeHook refresh_fadeplot;
+extern ModeSpecOpt fadeplot_opts;
+
+<add to mode.c>
+{"fadeplot", init_fadeplot, draw_fadeplot,
+release_fadeplot, refresh_fadeplot, init_fadeplot,
+NULL, &fadeplot_opts,
+17000, 1500, 1, 1, 1.0, "fadeplot", 0, NULL},
+ */
+
+#include "xlock.h"
+
+#define MINPTS 1
+
+/* frequency */
+#define PERIOD 500
+
+ModeSpecOpt fadeplot_opts =
+{0, NULL, 0, NULL, NULL};
+
+typedef struct {
+ XPoint speed, step, factor, st;
+ int temps, maxpts;
+ int width, height;
+ int pix;
+ XPoint *pts;
+} fadeplotstruct;
+
+static fadeplotstruct *fadeplots = NULL;
+
+static unsigned char SinTab[1001] = /* 16 - 184 Avg 100 */
+{
+ 100, 100, 100, 100, 100, 100, 99, 99, 99, 99, 98, 98, 98, 97, 97, 96, 96,
+ 95, 95, 94, 94, 93, 92, 92, 91, 90, 89, 88, 88, 87, 86, 85, 84, 83, 82, 81,
+ 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 69, 68, 67, 66, 65, 64, 63, 61, 60,
+ 59, 58, 57, 55, 54, 53, 52, 51, 50, 48, 47, 46, 45, 44, 43, 42, 41, 39, 38,
+ 37, 36, 35, 34, 33, 32, 32, 31, 30, 29, 28, 27, 26, 26, 25, 24, 23, 23, 22,
+ 22, 21, 20, 20, 19, 19, 19, 18, 18, 17, 17, 17, 17, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 19, 19, 20, 20, 21, 21,
+ 22, 22, 23, 24, 24, 25, 26, 27, 27, 28, 29, 30, 31, 32, 33, 33, 34, 35, 36,
+ 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 57,
+ 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+ 77, 78, 79, 80, 81, 81, 82, 83, 84, 85, 85, 86, 87, 88, 88, 89, 90, 90, 91,
+ 91, 92, 92, 93, 93, 94, 94, 95, 95, 95, 96, 96, 97, 97, 97, 97, 98, 98, 98,
+ 98, 99, 99, 99, 99, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100,
+ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
+ 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101,
+ 101, 102, 102, 102, 102, 103, 103, 103, 103, 104, 104, 105, 105, 105, 106,
+ 106, 107, 107, 108, 108, 109, 109, 110, 110, 111, 112, 112, 113, 114, 115,
+ 115, 116, 117, 118, 119, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
+ 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
+ 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 157, 158, 159, 160,
+ 161, 162, 163, 164, 165, 166, 167, 167, 168, 169, 170, 171, 172, 173, 173,
+ 174, 175, 176, 176, 177, 178, 178, 179, 179, 180, 180, 181, 181, 182, 182,
+ 182, 183, 183, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
+ 184, 184, 183, 183, 183, 183, 182, 182, 181, 181, 181, 180, 180, 179, 178,
+ 178, 177, 177, 176, 175, 174, 174, 173, 172, 171, 170, 169, 168, 168, 167,
+ 166, 165, 164, 163, 162, 161, 159, 158, 157, 156, 155, 154, 153, 152, 150,
+ 149, 148, 147, 146, 145, 143, 142, 141, 140, 139, 137, 136, 135, 134, 133,
+ 132, 131, 129, 128, 127, 126, 125, 124, 123, 122, 121, 120, 119, 118, 117,
+ 116, 115, 114, 113, 112, 112, 111, 110, 109, 108, 108, 107, 106, 106, 105,
+ 105, 104, 104, 103, 103, 102, 102, 102, 101, 101, 101, 101, 100, 100, 100,
+ 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 102, 102, 102,
+ 103, 103, 104, 104, 105, 105, 106, 106, 107, 108, 108, 109, 110, 111, 112,
+ 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
+ 127, 128, 129, 131, 132, 133, 134, 135, 136, 137, 139, 140, 141, 142, 143,
+ 145, 146, 147, 148, 149, 150, 152, 153, 154, 155, 156, 157, 158, 159, 161,
+ 162, 163, 164, 165, 166, 167, 168, 168, 169, 170, 171, 172, 173, 174, 174,
+ 175, 176, 177, 177, 178, 178, 179, 180, 180, 181, 181, 181, 182, 182, 183,
+ 183, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
+ 183, 183, 183, 183, 182, 182, 182, 181, 181, 180, 180, 179, 179, 178, 178,
+ 177, 176, 176, 175, 174, 173, 173, 172, 171, 170, 169, 168, 167, 167, 166,
+ 165, 164, 163, 162, 161, 160, 159, 158, 157, 155, 154, 153, 152, 151, 150,
+ 149, 148, 147, 146, 145, 143, 142, 141, 140, 139, 138, 137, 136, 135, 134,
+ 133, 132, 131, 130, 129, 128, 127, 126, 125, 124, 123, 122, 121, 120, 119,
+ 119, 118, 117, 116, 115, 115, 114, 113, 112, 112, 111, 110, 110, 109, 109,
+ 108, 108, 107, 107, 106, 106, 105, 105, 105, 104, 104, 103, 103, 103, 103,
+ 102, 102, 102, 102, 101, 101, 101, 101, 101, 101, 101, 100, 100, 100, 100,
+ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
+ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 99,
+ 99, 99, 99, 99, 99, 99, 98, 98, 98, 98, 97, 97, 97, 97, 96, 96, 95, 95, 95,
+ 94, 94, 93, 93, 92, 92, 91, 91, 90, 90, 89, 88, 88, 87, 86, 85, 85, 84, 83,
+ 82, 81, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65,
+ 64, 63, 62, 61, 60, 59, 58, 57, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45,
+ 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 33, 32, 31, 30, 29, 28, 27, 27,
+ 26, 25, 24, 24, 23, 22, 22, 21, 21, 20, 20, 19, 19, 18, 18, 18, 17, 17, 17,
+ 17, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18,
+ 19, 19, 19, 20, 20, 21, 22, 22, 23, 23, 24, 25, 26, 26, 27, 28, 29, 30, 31,
+ 32, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 50, 51,
+ 52, 53, 54, 55, 57, 58, 59, 60, 61, 63, 64, 65, 66, 67, 68, 69, 71, 72, 73,
+ 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 88, 89, 90, 91,
+ 92, 92, 93, 94, 94, 95, 95, 96, 96, 97, 97, 98, 98, 98, 99, 99, 99, 99, 100,
+ 100, 100, 100, 100, 100
+};
+
+void
+init_fadeplot(ModeInfo * mi)
+{
+ fadeplotstruct *fp;
+
+ if (fadeplots == NULL) {
+ if ((fadeplots = (fadeplotstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (fadeplotstruct))) == NULL)
+ return;
+ }
+ fp = &fadeplots[MI_SCREEN(mi)];
+
+ fp->width = MI_WIN_WIDTH(mi);
+ fp->height = MI_WIN_HEIGHT(mi);
+
+ fp->speed.x = 8;
+ fp->speed.y = 10;
+ fp->step.x = 2;
+ fp->step.y = 1;
+ fp->temps = 0;
+ fp->factor.x = MI_WIN_WIDTH(mi) / 320 + 1;
+ fp->factor.y = MI_WIN_HEIGHT(mi) / 200 + 1;
+
+ fp->maxpts = MI_BATCHCOUNT(mi);
+ if (fp->maxpts < -MINPTS) {
+ /* if fp->maxpts is random ... the size can change */
+ if (fp->pts != NULL) {
+ (void) free((void *) fp->pts);
+ fp->pts = NULL;
+ }
+ fp->maxpts = NRAND(-fp->maxpts - MINPTS + 1) + MINPTS;
+ } else if (fp->maxpts < MINPTS)
+ fp->maxpts = MINPTS;
+ if (fp->pts == NULL)
+ fp->pts = (XPoint *) calloc(fp->maxpts, sizeof (XPoint));
+ if (MI_NPIXELS(mi) > 2)
+ fp->pix = NRAND(MI_NPIXELS(mi));
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+}
+
+void
+draw_fadeplot(ModeInfo * mi)
+{
+ fadeplotstruct *fp = &fadeplots[MI_SCREEN(mi)];
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ int i, j;
+ long temp;
+
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XDrawPoints(display, window, gc, fp->pts, fp->maxpts, CoordModeOrigin);
+
+ if (MI_NPIXELS(mi) > 2) {
+ XSetForeground(display, gc, MI_PIXEL(mi, fp->pix));
+ if (++fp->pix >= MI_NPIXELS(mi))
+ fp->pix = 0;
+ } else
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+
+#define NBSTEP 10
+ if (MI_WIN_IS_ICONIC(mi)) {
+
+ for (temp = NBSTEP - 1; temp >= 0; temp--) {
+ j = temp;
+ for (i = 0; i < fp->maxpts / NBSTEP; i++) {
+ fp->pts[i].x = SinTab[(fp->st.x + fp->speed.x * j + i) % 1000] / 2;
+ fp->pts[i].y =
+ SinTab[(fp->st.y + fp->speed.y * j + i * fp->step.y) % 1000] / 2;
+/* I don't know what is the size of the icon window ?? */
+/* divide by 2 is not a real solution but it works ! */
+/* dot is integer type and I can't scale Sintab(integer type) by float */
+ }
+ }
+ } else
+ for (temp = NBSTEP - 1; temp >= 0; temp--) {
+ j = temp;
+ for (i = 0; i < fp->maxpts / NBSTEP; i++) {
+ fp->pts[temp * i + i].x =
+#if 0
+ SinTab[(fp->st.x + fp->speed.x * j + i * fp->step.x) % 1000] *
+#else
+ SinTab[(fp->st.x + fp->speed.x * j + i) % 1000] *
+#endif
+ fp->factor.x + 50;
+/* here you can scale by factor? bye the size of the screen is greater */
+/* than 320,200 , may be it can be a problem ?? */
+
+ fp->pts[temp * i + i].y =
+ SinTab[(fp->st.y + fp->speed.y * j + i * fp->step.y) % 1000] *
+ fp->factor.y;
+ }
+ }
+ XDrawPoints(display, window, gc, fp->pts, fp->maxpts, CoordModeOrigin);
+ XFlush(display);
+ fp->st.x = (fp->st.x + fp->speed.x) % 1000;
+ fp->st.y = (fp->st.y + fp->speed.y) % 1000;
+ fp->temps++;
+ if ((fp->temps % PERIOD) == 0) {
+ fp->temps = fp->temps % PERIOD * 10;
+ if ((fp->temps % PERIOD * 2) == 0)
+ fp->speed.y = (fp->speed.y++) % 30 + 1;
+ if ((fp->temps % PERIOD * 4) == 0)
+ fp->speed.x = (fp->speed.x) % 20;
+ if ((fp->temps % PERIOD * 6) == 0)
+ fp->step.y = (fp->step.y++) % 2 + 1;
+ fp->step.x = (fp->step.x++) % 4;
+ XClearWindow(display, window);
+ }
+}
+void
+refresh_fadeplot(ModeInfo * mi)
+{
+
+}
+
+void
+release_fadeplot(ModeInfo * mi)
+{
+ /* Do nothing, it will refresh by itself */
+}
--- /dev/null
+
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)helix.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * helix.c - string art for xlock, the X Window System lockscreen.
+ *
+ * Copyright (c) 1992 by Jamie Zawinski
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 06-Apr-97: new ellipse code from Dan Stromberg <strombrg@nis.acs.uci.edu>
+ * 11-Aug-95: found some typos, looks more interesting now
+ * 08-Aug-95: speed up thanks to Heath A. Kehoe <hakehoe@icaen.uiowa.edu>
+ * 17-Jun-95: removed sleep statements
+ * 2-Sep-93: xlock version David Bagley <bagleyd@bigfoot.com>
+ * 1992: xscreensaver version Jamie Zawinski <jwz@netscape.com>
+ */
+
+/*-
+ * original copyright
+ * Copyright (c) 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.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Helix"
+#define HACK_INIT init_helix
+#define HACK_DRAW draw_helix
+#define DEF_DELAY 25000
+#define DEF_CYCLES 100
+#define DEF_NCOLORS 200
+#define SPREAD_COLORS
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+
+#endif /* STANDALONE */
+
+#define ANGLES 360
+#define DEF_ELLIPSE "False"
+
+static Bool ellipse;
+
+#ifndef STANDALONE
+static XrmOptionDescRec opts[] =
+{
+ {"-ellipse", ".helix.ellipse", XrmoptionNoArg, (caddr_t) "on"},
+ {"+ellipse", ".helix.ellipse", XrmoptionNoArg, (caddr_t) "off"}
+};
+static argtype vars[] =
+{
+ {(caddr_t *) & ellipse, "ellipse", "Ellipse", DEF_ELLIPSE, t_Bool}
+};
+static OptionStruct desc[] =
+{
+ {"-/+ellipse", "turn on/off ellipse format"}
+};
+
+ModeSpecOpt helix_opts =
+{2, opts, 1, vars, desc};
+
+#endif /* STANDALONE */
+
+static double cos_array[ANGLES], sin_array[ANGLES];
+typedef struct {
+ int width;
+ int height;
+ int xmid, ymid;
+ int color;
+ int time;
+ int radius1, radius2, d_angle, factor1, factor2, factor3,
+ factor4;
+ int redraw;
+
+ Bool ellipse;
+ int d_angle_offset, dir;
+ int offset;
+ int density;
+ int count;
+} helixstruct;
+
+static helixstruct *helixes = NULL;
+
+static int
+gcd(int a, int b)
+{
+ while (b > 0) {
+ int tmp;
+
+ tmp = a % b;
+ a = b;
+ b = tmp;
+ }
+ return (a < 0 ? -a : a);
+}
+
+static void
+helix(ModeInfo * mi, int radius1, int radius2, int d_angle,
+ int factor1, int factor2, int factor3, int factor4)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ helixstruct *hp = &helixes[MI_SCREEN(mi)];
+ int x_1, y_1, x_2, y_2, angle, limit;
+ int i;
+
+ x_1 = hp->xmid;
+ y_1 = hp->ymid + radius2;
+ x_2 = hp->xmid;
+ y_2 = hp->ymid + radius1;
+ angle = 0;
+ limit = 1 + (ANGLES / gcd(ANGLES, d_angle));
+
+ for (i = 0; i < limit; i++) {
+ int tmp;
+
+#define pmod(x,y) (tmp=((x)%(y)),(tmp>=0?tmp:tmp+y))
+ x_1 = hp->xmid + (int) (((double) radius1) *
+ sin_array[pmod((angle * factor1), ANGLES)]);
+ y_1 = hp->ymid + (int) (((double) radius2) *
+ cos_array[pmod((angle * factor2), ANGLES)]);
+ if (MI_NPIXELS(mi) > 2) {
+ XSetForeground(display, gc, MI_PIXEL(mi, hp->color));
+ if (++hp->color >= MI_NPIXELS(mi))
+ hp->color = 0;
+ }
+ XDrawLine(display, window, gc, x_1, y_1, x_2, y_2);
+ x_2 = hp->xmid + (int) (((double) radius2) *
+ sin_array[pmod((angle * factor3), ANGLES)]);
+ y_2 = hp->ymid + (int) (((double) radius1) *
+ cos_array[pmod((angle * factor4), ANGLES)]);
+ if (MI_NPIXELS(mi) > 2) {
+ XSetForeground(display, gc, MI_PIXEL(mi, hp->color));
+ if (++hp->color >= MI_NPIXELS(mi))
+ hp->color = 0;
+ }
+ XDrawLine(display, window, gc, x_1, y_1, x_2, y_2);
+ angle += d_angle;
+ }
+}
+
+static void
+trig(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ helixstruct *hp = &helixes[MI_SCREEN(mi)];
+ int x1, y1, x2, y2;
+ int tmp, angle;
+
+
+#define pmod(x,y) (tmp=((x)%(y)),(tmp>=0?tmp:tmp+y))
+
+ while (ABS(hp->d_angle) <= ANGLES) {
+ angle = hp->d_angle + hp->d_angle_offset;
+ x1 = (int) (sin_array[pmod(angle * hp->factor1, ANGLES)] * hp->xmid) +
+ hp->xmid;
+ y1 = (int) (cos_array[pmod(angle * hp->factor1, ANGLES)] * hp->ymid) +
+ hp->ymid;
+ x2 = (int) (sin_array[pmod(angle * hp->factor2 + hp->offset, ANGLES)] *
+ hp->xmid) + hp->xmid;
+ y2 = (int) (cos_array[pmod(angle * hp->factor2 + hp->offset, ANGLES)] *
+ hp->ymid) + hp->ymid;
+ XDrawLine(display, MI_WINDOW(mi), gc, x1, y1, x2, y2);
+ if (MI_NPIXELS(mi) > 2) {
+ XSetForeground(display, gc, MI_PIXEL(mi, hp->color));
+ if (++hp->color >= MI_NPIXELS(mi))
+ hp->color = 0;
+ }
+ tmp = (int) ANGLES / (2 * hp->density * hp->factor1 * hp->factor2);
+ if (tmp == 0) /* Do not want it getting stuck... */
+ tmp = 1; /* Would not need if floating point */
+ hp->d_angle += hp->dir * tmp;
+ }
+}
+
+static void
+random_helix(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ helixstruct *hp = &helixes[MI_SCREEN(mi)];
+ int radius;
+ double divisor;
+
+ radius = MIN(hp->xmid, hp->ymid);
+
+ hp->d_angle = 0;
+ hp->factor1 = 2;
+ hp->factor2 = 2;
+ hp->factor3 = 2;
+ hp->factor4 = 2;
+
+ divisor = ((LRAND() / MAXRAND * 3.0 + 1) * (((LRAND() & 1) * 2) - 1));
+
+ if ((LRAND() & 1) == 0) {
+ hp->radius1 = radius;
+ hp->radius2 = (int) ((double) radius / divisor);
+ } else {
+ hp->radius2 = radius;
+ hp->radius1 = (int) ((double) radius / divisor);
+ }
+
+ while (gcd(ANGLES, hp->d_angle) >= 2)
+ hp->d_angle = NRAND(ANGLES);
+
+#define random_factor() \
+ (((NRAND(7)) ? ((LRAND() & 1) + 1) : 3) * (((LRAND() & 1) * 2) - 1))
+
+ while (gcd(gcd(gcd(hp->factor1, hp->factor2), hp->factor3), hp->factor4)
+ != 1) {
+ hp->factor1 = random_factor();
+ hp->factor2 = random_factor();
+ hp->factor3 = random_factor();
+ hp->factor4 = random_factor();
+ }
+ if (MI_NPIXELS(mi) > 2) {
+ XSetForeground(display, gc, MI_PIXEL(mi, hp->color));
+ if (++hp->color >= MI_NPIXELS(mi))
+ hp->color = 0;
+ } else
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+
+ helix(mi, hp->radius1, hp->radius2, hp->d_angle,
+ hp->factor1, hp->factor2, hp->factor3, hp->factor4);
+}
+
+static void
+random_trig(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ helixstruct *hp = &helixes[MI_SCREEN(mi)];
+
+ hp->d_angle = 0;
+ hp->factor1 = NRAND(8) + 1;
+ do
+ hp->factor2 = NRAND(8) + 1;
+ while (hp->factor1 == hp->factor2);
+ hp->dir = (LRAND() & 1) ? 1 : -1;
+ hp->d_angle_offset = NRAND(ANGLES);
+ hp->offset = (NRAND(ANGLES / 4 - 1) + 1) / 4;
+ hp->density = 1 << (NRAND(4) + 4); /* Higher density, higher ANGLES */
+ if (MI_NPIXELS(mi) > 2) {
+ XSetForeground(display, gc, MI_PIXEL(mi, hp->color));
+ if (++hp->color >= MI_NPIXELS(mi))
+ hp->color = 0;
+ } else
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+ trig(mi);
+}
+
+void
+init_helix(ModeInfo * mi)
+{
+ helixstruct *hp;
+ int i;
+ static int first = 1;
+
+ if (helixes == NULL) {
+ if ((helixes = (helixstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (helixstruct))) == NULL)
+ return;
+ }
+ hp = &helixes[MI_SCREEN(mi)];
+
+ if (first) {
+ first = 0;
+ for (i = 0; i < ANGLES; i++) {
+ cos_array[i] = cos((((double) i) / (double) (ANGLES / 2)) * M_PI);
+ sin_array[i] = sin((((double) i) / (double) (ANGLES / 2)) * M_PI);;
+ }
+ }
+ hp->ellipse = ellipse;
+ if (MI_WIN_IS_FULLRANDOM(mi))
+ hp->ellipse = (Bool) (!NRAND(5)); /* 1:5 chance of running ellipse stuff */
+
+ hp->width = MI_WIN_WIDTH(mi);
+ hp->height = MI_WIN_HEIGHT(mi);
+ hp->xmid = hp->width / 2;
+ hp->ymid = hp->height / 2;
+ hp->redraw = 0;
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+
+ if (MI_NPIXELS(mi) > 2)
+ hp->color = NRAND(MI_NPIXELS(mi));
+ hp->time = 0;
+
+ if (hp->ellipse) {
+ random_trig(mi);
+ } else
+ random_helix(mi);
+}
+
+void
+draw_helix(ModeInfo * mi)
+{
+ helixstruct *hp = &helixes[MI_SCREEN(mi)];
+
+ if (++hp->time > MI_CYCLES(mi))
+ init_helix(mi);
+ if (hp->redraw) {
+ if (hp->ellipse) {
+ trig(mi);
+ } else {
+ helix(mi, hp->radius1, hp->radius2, hp->d_angle,
+ hp->factor1, hp->factor2, hp->factor3, hp->factor4);
+ }
+ hp->redraw = 0;
+ }
+}
+
+void
+release_helix(ModeInfo * mi)
+{
+ if (helixes != NULL) {
+ (void) free((void *) helixes);
+ helixes = NULL;
+ }
+}
+
+void
+refresh_helix(ModeInfo * mi)
+{
+ helixstruct *hp = &helixes[MI_SCREEN(mi)];
+
+ hp->redraw = 1;
+}
--- /dev/null
+
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)hop.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * hop.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.
+ *
+ * Revision History:
+ * Changes in xlockmore distribution
+ * 24-Jun-97: EJK and RR functions stolen from xmartin2.2
+ * Ed Kubaitis <ejk@ux2.cso.uiuc.edu> ejk functions and xmartin
+ * Renaldo Recuerdo rr function, generalized exponent version
+ * of the Barry Martin's square root function
+ * 10-May-97: Compatible with xscreensaver
+ * 27-Jul-95: added Peter de Jong's hop from Scientific American
+ * July 87 p. 111. Sometimes they are amazing but there are a
+ * few duds (I did not see a pattern in the parameters).
+ * 29-Mar-95: changed name from hopalong to hop
+ * 09-Dec-94: added Barry Martin's sine hop
+ * Changes in original xlock
+ * 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 init_hop();
+ * 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.
+ * Hopalong was attributed to Barry Martin of Aston University
+ * (Birmingham, England)
+ */
+
+
+#ifdef STANDALONE
+#define PROGCLASS "Hop"
+#define HACK_INIT init_hop
+#define HACK_DRAW draw_hop
+#define DEF_DELAY 10000
+#define DEF_BATCHCOUNT 1000
+#define DEF_CYCLES 2500
+#define DEF_NCOLORS 200
+#define SMOOTH_COLORS
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+
+#endif /* STANDALONE */
+
+#define DEF_MARTIN "False"
+#define DEF_EJK1 "False"
+#define DEF_EJK2 "False"
+#define DEF_EJK3 "False"
+#define DEF_EJK4 "False"
+#define DEF_EJK5 "False"
+#define DEF_EJK6 "False"
+#define DEF_RR "False"
+#define DEF_JONG "False"
+#define DEF_SINE "False"
+
+static Bool martin;
+static Bool ejk1;
+static Bool ejk2;
+static Bool ejk3;
+static Bool ejk4;
+static Bool ejk5;
+static Bool ejk6;
+static Bool rr;
+static Bool jong;
+static Bool sine;
+
+#ifndef STANDALONE
+static XrmOptionDescRec opts[] =
+{
+ {"-martin", ".hop.martin", XrmoptionNoArg, (caddr_t) "on"},
+ {"+martin", ".hop.martin", XrmoptionNoArg, (caddr_t) "off"},
+ {"-ejk1", ".hop.ejk1", XrmoptionNoArg, (caddr_t) "on"},
+ {"+ejk1", ".hop.ejk1", XrmoptionNoArg, (caddr_t) "off"},
+ {"-ejk2", ".hop.ejk2", XrmoptionNoArg, (caddr_t) "on"},
+ {"+ejk2", ".hop.ejk2", XrmoptionNoArg, (caddr_t) "off"},
+ {"-ejk3", ".hop.ejk3", XrmoptionNoArg, (caddr_t) "on"},
+ {"+ejk3", ".hop.ejk3", XrmoptionNoArg, (caddr_t) "off"},
+ {"-ejk4", ".hop.ejk4", XrmoptionNoArg, (caddr_t) "on"},
+ {"+ejk4", ".hop.ejk4", XrmoptionNoArg, (caddr_t) "off"},
+ {"-ejk5", ".hop.ejk5", XrmoptionNoArg, (caddr_t) "on"},
+ {"+ejk5", ".hop.ejk5", XrmoptionNoArg, (caddr_t) "off"},
+ {"-ejk6", ".hop.ejk6", XrmoptionNoArg, (caddr_t) "on"},
+ {"+ejk6", ".hop.ejk6", XrmoptionNoArg, (caddr_t) "off"},
+ {"-rr", ".hop.rr", XrmoptionNoArg, (caddr_t) "on"},
+ {"+rr", ".hop.rr", XrmoptionNoArg, (caddr_t) "off"},
+ {"-jong", ".hop.jong", XrmoptionNoArg, (caddr_t) "on"},
+ {"+jong", ".hop.jong", XrmoptionNoArg, (caddr_t) "off"},
+ {"-sine", ".hop.sine", XrmoptionNoArg, (caddr_t) "on"},
+ {"+sine", ".hop.sine", XrmoptionNoArg, (caddr_t) "off"}
+};
+static argtype vars[] =
+{
+ {(caddr_t *) & martin, "martin", "Martin", DEF_MARTIN, t_Bool},
+ {(caddr_t *) & ejk1, "ejk1", "EJK1", DEF_EJK1, t_Bool},
+ {(caddr_t *) & ejk2, "ejk2", "EJK2", DEF_EJK2, t_Bool},
+ {(caddr_t *) & ejk3, "ejk3", "EJK3", DEF_EJK3, t_Bool},
+ {(caddr_t *) & ejk4, "ejk4", "EJK4", DEF_EJK4, t_Bool},
+ {(caddr_t *) & ejk5, "ejk5", "EJK5", DEF_EJK5, t_Bool},
+ {(caddr_t *) & ejk6, "ejk6", "EJK6", DEF_EJK6, t_Bool},
+ {(caddr_t *) & rr, "rr", "RR", DEF_RR, t_Bool},
+ {(caddr_t *) & jong, "jong", "Jong", DEF_JONG, t_Bool},
+ {(caddr_t *) & sine, "sine", "Sine", DEF_SINE, t_Bool}
+};
+static OptionStruct desc[] =
+{
+ {"-/+martin", "turn on/off sqrt format"},
+ {"-/+ejk1", "turn on/off ejk1 format"},
+ {"-/+ejk2", "turn on/off ejk2 format"},
+ {"-/+ejk3", "turn on/off ejk3 format"},
+ {"-/+ejk4", "turn on/off ejk4 format"},
+ {"-/+ejk5", "turn on/off ejk5 format"},
+ {"-/+ejk6", "turn on/off ejk6 format"},
+ {"-/+rr", "turn on/off rr format"},
+ {"-/+jong", "turn on/off jong format"},
+ {"-/+sine", "turn on/off sine format"}
+};
+
+ModeSpecOpt hop_opts =
+{20, opts, 10, vars, desc};
+
+#endif /* !STANDALONE */
+
+#define MARTIN 0
+#define EJK1 1
+#define EJK2 2
+#define EJK3 3
+#define EJK4 4
+#define EJK5 5
+#define EJK6 6
+#define RR 7
+#define CP1 8
+#define JONG 9
+#define SINE 10
+#ifdef OFFENDING
+#define OPS SINE /* Sine might be too close to a Swastika for some... */
+#else
+#define OPS (SINE+1)
+#endif
+
+typedef struct {
+ int centerx;
+ int centery; /* center of the screen */
+ double a;
+ double b;
+ double c;
+ double d;
+ double i;
+ double j; /* hopalong parameters */
+ int inc;
+ int pix;
+ int op;
+ int count;
+ int bufsize;
+ XPoint *pointBuffer; /* pointer for XDrawPoints */
+} hopstruct;
+
+static hopstruct *hops = NULL;
+
+void
+init_hop(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ hopstruct *hp;
+ double range;
+
+ if (hops == NULL) {
+ if ((hops = (hopstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (hopstruct))) == NULL)
+ return;
+ }
+ hp = &hops[MI_SCREEN(mi)];
+
+ hp->centerx = MI_WIN_WIDTH(mi) / 2;
+ hp->centery = MI_WIN_HEIGHT(mi) / 2;
+ /* Make the other operations less common since they are less interesting */
+ if (MI_WIN_IS_FULLRANDOM(mi)) {
+ hp->op = NRAND(OPS);
+ } else {
+ if (martin)
+ hp->op = MARTIN;
+ else if (ejk1)
+ hp->op = EJK1;
+ else if (ejk2)
+ hp->op = EJK2;
+ else if (ejk3)
+ hp->op = EJK3;
+ else if (ejk4)
+ hp->op = EJK4;
+ else if (ejk5)
+ hp->op = EJK5;
+ else if (ejk6)
+ hp->op = EJK6;
+ else if (rr)
+ hp->op = RR;
+ else if (jong)
+ hp->op = JONG;
+ else if (sine)
+ hp->op = SINE;
+ else
+ hp->op = NRAND(OPS);
+ }
+
+ switch (hp->op) {
+ case MARTIN:
+ range = sqrt((double) hp->centerx * hp->centerx +
+ (double) hp->centery * hp->centery) / (10.0 + NRAND(10));
+
+ hp->a = (LRAND() / MAXRAND) * range - range / 2.0;
+ hp->b = (LRAND() / MAXRAND) * range - range / 2.0;
+ hp->c = (LRAND() / MAXRAND) * range - range / 2.0;
+ if (LRAND() & 1)
+ hp->c = 0.0;
+ /* hp->a = (LRAND() / MAXRAND) * 1500.0 + 40.0;
+ hp->b = (LRAND() / MAXRAND) * 17.0 + 3.0;
+ hp->c = (LRAND() / MAXRAND) * 3000.0 + 100.0; */
+ if (MI_WIN_IS_VERBOSE(mi))
+ (void) fprintf(stdout, "sqrt a=%g, b=%g, c=%g\n", hp->a, hp->b, hp->c);
+ break;
+ case EJK1:
+ hp->a = (LRAND() / MAXRAND) * 500.0;
+ hp->b = (LRAND() / MAXRAND) * 0.4;
+ hp->c = (LRAND() / MAXRAND) * 100.0 + 10.0;
+ if (MI_WIN_IS_VERBOSE(mi))
+ (void) fprintf(stdout, "ejk1 a=%g, b=%g, c=%g\n", hp->a, hp->b, hp->c);
+ break;
+ case EJK2:
+ hp->a = (LRAND() / MAXRAND) * 500.0;
+ hp->b = pow(10.0, 6.0 + (LRAND() / MAXRAND) * 24.0);
+ if (LRAND() & 1)
+ hp->b = hp->b;
+ hp->c = pow(10.0, (LRAND() / MAXRAND) * 9.0);
+ if (LRAND() & 1)
+ hp->c = hp->c;
+ if (MI_WIN_IS_VERBOSE(mi))
+ (void) fprintf(stdout, "ejk2 a=%g, b=%g, c=%g\n", hp->a, hp->b, hp->c);
+ case EJK3:
+ hp->a = (LRAND() / MAXRAND) * 500.0;
+ hp->b = (LRAND() / MAXRAND) * 0.35 + 0.5;
+ hp->c = (LRAND() / MAXRAND) * 80.0 + 30.0;
+ if (MI_WIN_IS_VERBOSE(mi))
+ (void) fprintf(stdout, "ejk3 a=%g, b=%g, c=%g\n", hp->a, hp->b, hp->c);
+ break;
+ case EJK4:
+ hp->a = (LRAND() / MAXRAND) * 1000.0;
+ hp->b = (LRAND() / MAXRAND) * 9.0 + 1.0;
+ hp->c = (LRAND() / MAXRAND) * 40.0 + 30.0;
+ if (MI_WIN_IS_VERBOSE(mi))
+ (void) fprintf(stdout, "ejk4 a=%g, b=%g, c=%g\n", hp->a, hp->b, hp->c);
+ break;
+ case EJK5:
+ hp->a = (LRAND() / MAXRAND) * 600.0;
+ hp->b = (LRAND() / MAXRAND) * 0.3 + 0.1;
+ hp->c = (LRAND() / MAXRAND) * 90.0 + 20.0;
+ if (MI_WIN_IS_VERBOSE(mi))
+ (void) fprintf(stdout, "ejk5 a=%g, b=%g, c=%g\n", hp->a, hp->b, hp->c);
+ break;
+ case EJK6:
+ hp->a = (LRAND() / MAXRAND) * 100.0 + 550.0;
+ hp->b = (LRAND() / MAXRAND) + 0.5;
+ if (MI_WIN_IS_VERBOSE(mi))
+ (void) fprintf(stdout, "ejk6 a=%g, b=%g\n", hp->a, hp->b);
+ break;
+ case RR:
+ hp->a = (LRAND() / MAXRAND) * 100.0;
+ hp->b = (LRAND() / MAXRAND) * 20.0;
+ hp->c = (LRAND() / MAXRAND) * 200.0;
+ hp->d = (LRAND() / MAXRAND) * 0.9;
+ if (MI_WIN_IS_VERBOSE(mi))
+ (void) fprintf(stdout, "rr a=%g, b=%g, c=%g, d=%g\n",
+ hp->a, hp->b, hp->c, hp->d);
+ break;
+ case JONG:
+ hp->a = (LRAND() / MAXRAND) * 2.0 * M_PI - M_PI;
+ hp->b = (LRAND() / MAXRAND) * 2.0 * M_PI - M_PI;
+ hp->c = (LRAND() / MAXRAND) * 2.0 * M_PI - M_PI;
+ hp->d = (LRAND() / MAXRAND) * 2.0 * M_PI - M_PI;
+ if (MI_WIN_IS_VERBOSE(mi))
+ (void) fprintf(stdout, "jong a=%g, b=%g, c=%g, d=%g\n",
+ hp->a, hp->b, hp->c, hp->d);
+ break;
+ case SINE: /* MARTIN2 */
+ hp->a = M_PI + ((LRAND() / MAXRAND) * 2.0 - 1.0) * 0.7;
+ /* hp->a = (LRAND() / MAXRAND) * 0.14 + MI_PI - .07; */
+ if (MI_WIN_IS_VERBOSE(mi))
+ (void) fprintf(stdout, "sine a=%g\n", hp->a);
+ break;
+ }
+ if (MI_NPIXELS(mi) > 2)
+ hp->pix = NRAND(MI_NPIXELS(mi));
+ hp->i = hp->j = 0.0;
+ hp->inc = (int) ((LRAND() / MAXRAND) * 200) - 100;
+ hp->bufsize = MI_BATCHCOUNT(mi);
+
+ if (!hp->pointBuffer)
+ hp->pointBuffer = (XPoint *) malloc(hp->bufsize * sizeof (XPoint));
+
+ XClearWindow(display, MI_WINDOW(mi));
+
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+ hp->count = 0;
+}
+
+
+void
+draw_hop(ModeInfo * mi)
+{
+ hopstruct *hp = &hops[MI_SCREEN(mi)];
+ double oldj, oldi;
+ XPoint *xp = hp->pointBuffer;
+ int k = hp->bufsize;
+
+ hp->inc++;
+ if (MI_NPIXELS(mi) > 2) {
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_PIXEL(mi, hp->pix));
+ if (++hp->pix >= MI_NPIXELS(mi))
+ hp->pix = 0;
+ }
+ while (k--) {
+ oldj = hp->j;
+ switch (hp->op) {
+ case MARTIN: /* SQRT, MARTIN1 */
+ oldi = hp->i + hp->inc;
+ hp->j = hp->a - hp->i;
+ hp->i = oldj + ((hp->i < 0)
+ ? sqrt(fabs(hp->b * oldi - hp->c))
+ : -sqrt(fabs(hp->b * oldi - hp->c)));
+ xp->x = hp->centerx + (int) (hp->i + hp->j);
+ xp->y = hp->centery - (int) (hp->i - hp->j);
+ break;
+ case EJK1:
+ oldi = hp->i + hp->inc;
+ hp->j = hp->a - hp->i;
+ hp->i = oldj - ((hp->i > 0) ? (hp->b * oldi - hp->c) :
+ -(hp->b * oldi - hp->c));
+ xp->x = hp->centerx + (int) (hp->i + hp->j);
+ xp->y = hp->centery - (int) (hp->i - hp->j);
+ break;
+ case EJK2:
+ oldi = hp->i + hp->inc;
+ hp->j = hp->a - hp->i;
+ hp->i = oldj - ((hp->i < 0) ? log(fabs(hp->b * oldi- hp->c)) :
+ -log(fabs(hp->b * oldi- hp->c)));
+ xp->x = hp->centerx + (int) (hp->i + hp->j);
+ xp->y = hp->centery - (int) (hp->i - hp->j);
+ break;
+ case EJK3:
+ oldi = hp->i + hp->inc;
+ hp->j = hp->a - hp->i;
+ hp->i = oldj - ((hp->i > 0) ? sin(hp->b * oldi)- hp->c :
+ -sin(hp->b * oldi) - hp->c);
+ xp->x = hp->centerx + (int) (hp->i + hp->j);
+ xp->y = hp->centery - (int) (hp->i - hp->j);
+ break;
+ case EJK4:
+ oldi = hp->i + hp->inc;
+ hp->j = hp->a - hp->i;
+ hp->i = oldj - ((hp->i > 0) ? sin(hp->b * oldi)- hp->c :
+ -sqrt(fabs(hp->b*oldi-hp->c)) );
+ xp->x = hp->centerx + (int) (hp->i + hp->j);
+ xp->y = hp->centery - (int) (hp->i - hp->j);
+ break;
+ case EJK5:
+ oldi = hp->i + hp->inc;
+ hp->j = hp->a - hp->i;
+ hp->i = oldj - ((hp->i > 0) ? sin(hp->b * oldi)- hp->c :
+ -(hp->b*oldi-hp->c) );
+ xp->x = hp->centerx + (int) (hp->i + hp->j);
+ xp->y = hp->centery - (int) (hp->i - hp->j);
+ break;
+ case EJK6:
+ oldi = hp->i + hp->inc;
+ hp->j = hp->a - hp->i;
+ hp->i = oldj - asin((hp->b * oldi) - (long) (hp->b * oldi));
+ xp->x = (int) (hp->i);
+ xp->y = (int) (hp->j);
+ break;
+ case RR: /* RR1 */
+ oldi = hp->i + hp->inc;
+ hp->j = hp->a - hp->i;
+ hp->i = oldj - ((hp->i < 0) ? -pow(fabs(hp->b * oldi- hp->c), hp->d) :
+ pow(fabs(hp->b*oldi-hp->c), hp->d));
+ xp->x = hp->centerx + (int) (hp->i + hp->j);
+ xp->y = hp->centery - (int) (hp->i - hp->j);
+ break;
+ case JONG:
+ if (hp->centerx > 0)
+ oldi = hp->i + 4 * hp->inc / hp->centerx;
+ else
+ oldi = hp->i;
+ hp->j = sin(hp->c * hp->i) - cos(hp->d * hp->j);
+ hp->i = sin(hp->a * oldj) - cos(hp->b * oldi);
+ xp->x = hp->centerx + (int) (hp->centerx * (hp->i + hp->j) / 4.0);
+ xp->y = hp->centery - (int) (hp->centery * (hp->i - hp->j) / 4.0);
+ break;
+ case SINE: /* MARTIN2 */
+ oldi = hp->i + hp->inc;
+ hp->j = hp->a - hp->i;
+ hp->i = oldj - sin(oldi);
+ xp->x = hp->centerx + (int) (hp->i + hp->j);
+ xp->y = hp->centery - (int) (hp->i - hp->j);
+ break;
+ }
+ xp++;
+ }
+ XDrawPoints(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ hp->pointBuffer, hp->bufsize, CoordModeOrigin);
+ if (++hp->count > MI_CYCLES(mi))
+ init_hop(mi);
+}
+
+void
+release_hop(ModeInfo * mi)
+{
+ if (hops != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ hopstruct *hp = &hops[screen];
+
+ if (hp->pointBuffer)
+ (void) free((void *) hp->pointBuffer);
+ }
+
+ (void) free((void *) hops);
+ hops = NULL;
+ }
+}
+
+void
+refresh_hop(ModeInfo * mi)
+{
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+}
--- /dev/null
+
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)hyper.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * hyper.c - spinning tesseract for xlock, the X Window System lockscreen.
+ *
+ * This code derived from TI Explorer Lisp code by Joe Keane, Fritz Mueller,
+ * and Jamie Zawinski.
+ *
+ * Copyright (c) 1992 by Jamie Zawinski
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 2-Sep-93: xlock version (David Bagley <bagleyd@bigfoot.com>)
+ * 1992: xscreensaver version (Jamie Zawinski <jwz@netscape.com>)
+ */
+
+/*-
+ * original copyright
+ * Copyright (c) 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.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Hyper"
+#define HACK_INIT init_hyper
+#define HACK_DRAW draw_hyper
+#define DEF_DELAY 10000
+#define DEF_CYCLES 300
+#define DEF_NCOLORS 200
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt hyper_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+#define COMBOS 6
+#define XY 0
+#define XZ 1
+#define YZ 2
+#define XW 3
+#define YW 4
+#define ZW 5
+#define DIMS 4
+#define POINTS (DIMS*DIMS)
+#define COLORS 8
+#define NOTSIGN(i) (((i)==0)?(-1):(1))
+
+static int left_part[COMBOS] =
+{0, 0, 1, 0, 1, 2};
+static int right_part[COMBOS] =
+{1, 2, 2, 3, 3, 3};
+
+typedef struct {
+ int old_x, old_y;
+ int new_x, new_y;
+ int same_p;
+} state;
+
+typedef struct {
+ int width;
+ int height;
+ int observer_z;
+ int x_offset, y_offset;
+ int unit_pixels;
+ double vars[DIMS][DIMS];
+ state points[POINTS];
+ int colors[COLORS];
+ GC xorGC;
+ int count;
+ Bool redrawing;
+} hyperstruct;
+
+static double cos_array[COMBOS], sin_array[COMBOS];
+static hyperstruct *hypers = NULL;
+
+static void
+move_line(ModeInfo * mi, state state0, state state1, int color)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ hyperstruct *hp = &hypers[MI_SCREEN(mi)];
+
+ if (MI_NPIXELS(mi) <= 2) {
+ if (state0.same_p && state1.same_p)
+ return;
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XDrawLine(display, window, gc,
+ state0.old_x, state0.old_y, state1.old_x, state1.old_y);
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+ XDrawLine(display, window, gc,
+ state0.new_x, state0.new_y, state1.new_x, state1.new_y);
+ } else {
+ XSegment segments[2];
+
+ if (!hp->redrawing && state0.same_p && state1.same_p)
+ return;
+ XSetForeground(display, hp->xorGC, MI_PIXEL(mi, hp->colors[color]));
+ 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;
+ if (hp->redrawing)
+ XDrawSegments(display, window, hp->xorGC, &segments[1], 1);
+ else
+ XDrawSegments(display, window, hp->xorGC, segments, 2);
+ }
+}
+
+void
+init_hyper(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ hyperstruct *hp;
+ XGCValues gcv;
+ int i, j;
+ double combos[COMBOS];
+ static int first = 1;
+
+ if (hypers == NULL) {
+ if ((hypers = (hyperstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (hyperstruct))) == NULL)
+ return;
+ }
+ hp = &hypers[MI_SCREEN(mi)];
+
+ hp->redrawing = False;
+ hp->width = MI_WIN_WIDTH(mi);
+ hp->height = MI_WIN_HEIGHT(mi);
+ hp->unit_pixels = hp->width < hp->height ? hp->width : hp->height;
+ hp->x_offset = hp->width / 2;
+ hp->y_offset = hp->height / 2;
+
+ XClearWindow(display, MI_WINDOW(mi));
+
+ if (first) {
+ combos[0] = 0.0;
+ combos[1] = 0.01;
+ combos[2] = 0.005;
+ combos[3] = 0.01;
+ combos[4] = 0.0;
+ combos[5] = 0.0;
+ for (i = 0; i < COMBOS; i++) {
+ cos_array[i] = cos(combos[i]);
+ sin_array[i] = sin(combos[i]);
+ }
+ }
+ for (i = 0; i < DIMS; i++)
+ for (j = 0; j < DIMS; j++)
+ if (i == j)
+ hp->vars[i][j] = 1.0;
+ else
+ hp->vars[i][j] = 0.0;
+ (void) memset((char *) hp->points, 0, sizeof (hp->points));
+ hp->observer_z = 5;
+
+ if (!hp->xorGC) {
+ gcv.function = GXxor;
+ gcv.foreground = MI_WIN_WHITE_PIXEL(mi) ^ MI_WIN_BLACK_PIXEL(mi);
+ hp->xorGC = XCreateGC(display, MI_WINDOW(mi), GCForeground | GCFunction,
+ &gcv);
+ }
+ if (MI_NPIXELS(mi) > 2)
+ for (i = 0; i < COLORS; i++)
+ hp->colors[i] = NRAND(MI_NPIXELS(mi));
+ hp->count = 0;
+}
+
+void
+draw_hyper(ModeInfo * mi)
+{
+ hyperstruct *hp = &hypers[MI_SCREEN(mi)];
+ double temp_mult, tmp0, tmp1;
+ int i, j;
+ int sign[DIMS];
+
+ for (i = 0; i < POINTS; i++) {
+ for (j = 0; j < DIMS; j++)
+ sign[j] = NOTSIGN(i & (1 << (DIMS - 1 - j)));
+ temp_mult = (hp->unit_pixels /
+ (((sign[0] * hp->vars[0][2]) + (sign[1] * hp->vars[1][2]) +
+ (sign[2] * hp->vars[2][2]) + (sign[3] * hp->vars[3][2]) +
+ (sign[0] * hp->vars[0][3]) + (sign[1] * hp->vars[1][3]) +
+ (sign[2] * hp->vars[2][3]) + (sign[3] * hp->vars[3][3])) -
+ hp->observer_z));
+ hp->points[i].old_x = hp->points[i].new_x;
+ hp->points[i].old_y = hp->points[i].new_y;
+ hp->points[i].new_x = (int)
+ ((((sign[0] * hp->vars[0][0]) + (sign[1] * hp->vars[1][0]) +
+ (sign[2] * hp->vars[2][0]) + (sign[3] * hp->vars[3][0])) *
+ temp_mult) + hp->x_offset);
+ hp->points[i].new_y = (int)
+ ((((sign[0] * hp->vars[0][1]) + (sign[1] * hp->vars[1][1]) +
+ (sign[2] * hp->vars[2][1]) + (sign[3] * hp->vars[3][1])) *
+ temp_mult) + hp->y_offset);
+ hp->points[i].same_p =
+ (hp->points[i].old_x == hp->points[i].new_x &&
+ hp->points[i].old_y == hp->points[i].new_y);
+ }
+
+ move_line(mi, hp->points[0], hp->points[1], 0);
+ move_line(mi, hp->points[0], hp->points[2], 0);
+ move_line(mi, hp->points[2], hp->points[3], 0);
+ move_line(mi, hp->points[1], hp->points[3], 0);
+
+ move_line(mi, hp->points[8], hp->points[9], 1);
+ move_line(mi, hp->points[8], hp->points[10], 1);
+ move_line(mi, hp->points[10], hp->points[11], 1);
+ move_line(mi, hp->points[9], hp->points[11], 1);
+
+ move_line(mi, hp->points[4], hp->points[5], 2);
+ move_line(mi, hp->points[4], hp->points[6], 2);
+ move_line(mi, hp->points[6], hp->points[7], 2);
+ move_line(mi, hp->points[5], hp->points[7], 2);
+
+ move_line(mi, hp->points[3], hp->points[7], 3);
+ move_line(mi, hp->points[3], hp->points[11], 3);
+ move_line(mi, hp->points[11], hp->points[15], 3);
+ move_line(mi, hp->points[7], hp->points[15], 3);
+
+ move_line(mi, hp->points[0], hp->points[4], 4);
+ move_line(mi, hp->points[0], hp->points[8], 4);
+ move_line(mi, hp->points[4], hp->points[12], 4);
+ move_line(mi, hp->points[8], hp->points[12], 4);
+
+ move_line(mi, hp->points[1], hp->points[5], 5);
+ move_line(mi, hp->points[1], hp->points[9], 5);
+ move_line(mi, hp->points[9], hp->points[13], 5);
+ move_line(mi, hp->points[5], hp->points[13], 5);
+
+ move_line(mi, hp->points[2], hp->points[6], 6);
+ move_line(mi, hp->points[2], hp->points[10], 6);
+ move_line(mi, hp->points[10], hp->points[14], 6);
+ move_line(mi, hp->points[6], hp->points[14], 6);
+
+ move_line(mi, hp->points[12], hp->points[13], 7);
+ move_line(mi, hp->points[12], hp->points[14], 7);
+ move_line(mi, hp->points[14], hp->points[15], 7);
+ move_line(mi, hp->points[13], hp->points[15], 7);
+
+ hp->redrawing = False;
+ for (i = 0; i < COMBOS; i++)
+ if (sin_array[i] != 0)
+ for (j = 0; j < DIMS; j++) {
+ tmp0 = ((hp->vars[j][left_part[i]] * cos_array[i]) +
+ (hp->vars[j][right_part[i]] * sin_array[i]));
+ tmp1 = ((hp->vars[j][right_part[i]] * cos_array[i]) -
+ (hp->vars[j][left_part[i]] * sin_array[i]));
+ hp->vars[j][left_part[i]] = tmp0;
+ hp->vars[j][right_part[i]] = tmp1;
+ }
+ if (++hp->count > MI_CYCLES(mi))
+ init_hyper(mi);
+}
+
+void
+release_hyper(ModeInfo * mi)
+{
+ if (hypers != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ hyperstruct *hp = &hypers[screen];
+
+ if (hp->xorGC != NULL)
+ XFreeGC(MI_DISPLAY(mi), hp->xorGC);
+ }
+ (void) free((void *) hypers);
+ hypers = NULL;
+ }
+}
+
+void
+refresh_hyper(ModeInfo * mi)
+{
+ hyperstruct *hp = &hypers[MI_SCREEN(mi)];
+
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+ hp->redrawing = True;
+}
--- /dev/null
+
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)ico.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+
+/*-
+ * ico.c - bouncing polyhedra for xlock, the X Window System lockscreen.
+ *
+ * Copyright (c) 1987 X Consortium
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 25-Mar-97: David Bagley <bagleyd@bigfoot.com>
+ * Took ico from the X11R6 distribution. Stripped out
+ * anything complicated... to be added back in later.
+ * added dodecahedron, tetrahedron, and star octahedron.
+ * $XConsortium: ico.c,v 1.47 94/04/17 20:45:15 gildea Exp $
+ */
+
+/*-
+original copyright
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of the X Consortium shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from the X Consortium.
+
+
+Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
+
+ 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 name of Digital not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+DIGITAL 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.
+
+******************************************************************/
+/******************************************************************************
+ * Description
+ * Display a wire-frame rotating icosahedron, with hidden lines removed
+ *****************************************************************************/
+/*-
+ * Additions by jimmc@sci:
+ * faces and colors
+ * double buffering on the display
+ * additional polyhedra
+ *
+ * multi-thread version by Stephen Gildea, January 1992
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Ico"
+#define HACK_INIT init_ico
+#define HACK_DRAW draw_ico
+#define DEF_DELAY 100000
+#define DEF_BATCHCOUNT 0
+#define DEF_CYCLES 300
+#define DEF_NCOLORS 200
+#define SPREAD_COLORS
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+
+#endif /* STANDALONE */
+
+#define MINSIZE 5
+#define DEFAULT_DELTAX 13
+#define DEFAULT_DELTAY 9
+
+#define DEF_FACES "FALSE"
+#define DEF_EDGES "TRUE" /* Wire frame edges, set true if faces false. */
+
+static Bool faces;
+static Bool edges;
+
+#ifndef STANDALONE
+static XrmOptionDescRec opts[] =
+{
+ {"-faces", ".ico.faces", XrmoptionNoArg, (caddr_t) "on"},
+ {"+faces", ".ico.faces", XrmoptionNoArg, (caddr_t) "off"},
+ {"-edges", ".ico.trail", XrmoptionNoArg, (caddr_t) "on"},
+ {"+edges", ".ico.trail", XrmoptionNoArg, (caddr_t) "off"}
+};
+static argtype vars[] =
+{
+ {(caddr_t *) & faces, "faces", "Faces", DEF_FACES, t_Bool},
+ {(caddr_t *) & edges, "edges", "Edges", DEF_EDGES, t_Bool}
+};
+static OptionStruct desc[] =
+{
+ {"-/+faces", "turn on/off drawing of faces"},
+ {"-/+edges", "turn on/off drawing of wireframe"}
+};
+
+ModeSpecOpt ico_opts =
+{4, opts, 2, vars, desc};
+
+#endif /* STANDALONE */
+
+/*-
+ * This is the description of one polyhedron file
+ */
+
+#define MAXVERTS 120
+ /* great rhombicosidodecahedron has 120 vertices */
+#define MAXNV MAXVERTS
+#define MAXFACES 30
+ /* (hexakis icosahedron has 120 faces) */
+#define MAXEDGES 180
+ /* great rhombicosidodecahedron has 180 edges */
+#define MAXEDGESPERPOLY 20
+
+typedef struct {
+ double x, y, z;
+} Point3D;
+
+/* structure of the include files which define the polyhedra */
+typedef struct {
+#ifdef DEFUNCT
+ char *longname; /* long name of object */
+ char *shortname; /* short name of object */
+ char *dual; /* long name of dual */
+#endif
+ int numverts; /* number of vertices */
+ int numedges; /* number of edges */
+ int numfaces; /* number of faces */
+ Point3D v[MAXVERTS]; /* the vertices */
+ int f[MAXEDGES * 2 + MAXFACES]; /* the faces */
+} Polyinfo;
+
+/*-
+ * faces/edges/vert Vertex Config Wythoff Symbol
+ * tetrahedron 4/6/4 {3,3,3} 3|2 3
+ * cube 6/12/8 {4,4,4} 3|2 4
+ * octahedron 8/12/6 {3,3,3,3} 4|2 3
+ * dodecahedron 12/30/12 {5,5,5} 3|2 5
+ * icosahedron 20/30/12 {3,3,3,3,3} 5|2 3
+ *Nice additions would be the Kepler-Poinsot Solids:
+ * small stellated dodecahedron 12/30/12 {5/2,5/2,5/2,5/2,5/2} 5|2 5/2
+ * great stellated dodecahedron 12/30/20 {5/2,5/2,5/2} 3|2 5/2
+ * great dodecahedron 12/30/12 {5,5,5,5,5}/2 5/2|2 5
+ * great icosahedron 20/30/12 {3,3,3,3,3}/2 5/2|2 3
+ */
+
+static Polyinfo polygons[] =
+{
+
+/* objtetra - structure values for tetrahedron */
+ {
+#ifdef DEFUNCT
+ "tetrahedron", "tetra", /* long and short names */
+ "tetrahedron", /* long name of dual */
+#endif
+ 4, 6, 4, /* number of vertices, edges, and faces */
+ { /* vertices (x,y,z) */
+ /* all points must be within radius 1 of the origin */
+#define T 0.57735
+ {T, T, T},
+ {T, -T, -T},
+ {-T, T, -T},
+ {-T, -T, T},
+#undef T
+ },
+ { /* faces (numfaces + indexes into vertices) */
+ /* faces must be specified clockwise from the outside */
+ 3, 2, 1, 0,
+ 3, 1, 3, 0,
+ 3, 3, 2, 0,
+ 3, 2, 3, 1,
+ }
+ },
+
+/* objcube - structure values for cube */
+
+ {
+#ifdef DEFUNCT
+ "hexahedron", "cube", /* long and short names */
+ "octahedron", /* long name of dual */
+#endif
+ 8, 12, 6, /* number of vertices, edges, and faces */
+ { /* vertices (x,y,z) */
+ /* all points must be within radius 1 of the origin */
+#define T 0.57735
+ {T, T, T},
+ {T, T, -T},
+ {T, -T, -T},
+ {T, -T, T},
+ {-T, T, T},
+ {-T, T, -T},
+ {-T, -T, -T},
+ {-T, -T, T},
+#undef T
+ },
+ { /* faces (numfaces + indexes into vertices) */
+ /* faces must be specified clockwise from the outside */
+ 4, 0, 1, 2, 3,
+ 4, 7, 6, 5, 4,
+ 4, 1, 0, 4, 5,
+ 4, 3, 2, 6, 7,
+ 4, 2, 1, 5, 6,
+ 4, 0, 3, 7, 4,
+ }
+ },
+
+/* objocta - structure values for octahedron */
+
+ {
+#ifdef DEFUNCT
+ "octahedron", "octa", /* long and short names */
+ "hexahedron", /* long name of dual */
+#endif
+ 6, 12, 8, /* number of vertices, edges, and faces */
+ { /* vertices (x,y,z) */
+ /* all points must be within radius 1 of the origin */
+#define T 1.0
+ {T, 0, 0},
+ {-T, 0, 0},
+ {0, T, 0},
+ {0, -T, 0},
+ {0, 0, T},
+ {0, 0, -T},
+#undef T
+ },
+ { /* faces (numfaces + indexes into vertices) */
+ /* faces must be specified clockwise from the outside */
+ 3, 0, 4, 2,
+ 3, 0, 2, 5,
+ 3, 0, 5, 3,
+ 3, 0, 3, 4,
+ 3, 1, 2, 4,
+ 3, 1, 5, 2,
+ 3, 1, 3, 5,
+ 3, 1, 4, 3,
+ }
+ },
+
+/* objdodec - structure values for dodecahedron */
+
+ {
+#ifdef DEFUNCT
+ "dodecahedron", "dodeca", /* long and short names */
+ "icosahedron", /* long name of dual */
+#endif
+ 20, 30, 12, /* number of vertices, edges, and faces */
+ { /* vertices (x,y,z) */
+ /* all points must be within radius 1 of the origin */
+ {0.000000, 0.309017, 0.809015},
+ {0.000000, -0.309017, 0.809015},
+ {0.000000, -0.309017, -0.809015},
+ {0.000000, 0.309017, -0.809015},
+ {0.809015, 0.000000, 0.309017},
+ {-0.809015, 0.000000, 0.309017},
+ {-0.809015, 0.000000, -0.309017},
+ {0.809015, 0.000000, -0.309017},
+ {0.309017, 0.809015, 0.000000},
+ {-0.309017, 0.809015, 0.000000},
+ {-0.309017, -0.809015, 0.000000},
+ {0.309017, -0.809015, 0.000000},
+ {0.500000, 0.500000, 0.500000},
+ {-0.500000, 0.500000, 0.500000},
+ {-0.500000, -0.500000, 0.500000},
+ {0.500000, -0.500000, 0.500000},
+ {0.500000, -0.500000, -0.500000},
+ {0.500000, 0.500000, -0.500000},
+ {-0.500000, 0.500000, -0.500000},
+ {-0.500000, -0.500000, -0.500000},
+ },
+ { /* faces (numfaces + indexes into vertices) */
+ /* faces must be specified clockwise from the outside */
+ 5, 12, 8, 17, 7, 4,
+ 5, 5, 6, 18, 9, 13,
+ 5, 14, 10, 19, 6, 5,
+ 5, 12, 4, 15, 1, 0,
+ 5, 13, 9, 8, 12, 0,
+ 5, 1, 14, 5, 13, 0,
+ 5, 16, 7, 17, 3, 2,
+ 5, 19, 10, 11, 16, 2,
+ 5, 3, 18, 6, 19, 2,
+ 5, 15, 11, 10, 14, 1,
+ 5, 3, 17, 8, 9, 18,
+ 5, 4, 7, 16, 11, 15,
+ }
+ },
+
+/* objicosa - structure values for icosahedron */
+
+ {
+#ifdef DEFUNCT
+ "icosahedron", "icosa", /* long and short names */
+ "dodecahedron", /* long name of dual */
+#endif
+ 12, 30, 20, /* number of vertices, edges, and faces */
+ { /* vertices (x,y,z) */
+ /* all points must be within radius 1 of the origin */
+ {0.00000000, 0.00000000, -0.95105650},
+ {0.00000000, 0.85065080, -0.42532537},
+ {0.80901698, 0.26286556, -0.42532537},
+ {0.50000000, -0.68819095, -0.42532537},
+ {-0.50000000, -0.68819095, -0.42532537},
+ {-0.80901698, 0.26286556, -0.42532537},
+ {0.50000000, 0.68819095, 0.42532537},
+ {0.80901698, -0.26286556, 0.42532537},
+ {0.00000000, -0.85065080, 0.42532537},
+ {-0.80901698, -0.26286556, 0.42532537},
+ {-0.50000000, 0.68819095, 0.42532537},
+ {0.00000000, 0.00000000, 0.95105650}
+ },
+ { /* faces (numfaces + indexes into vertices) */
+ /* faces must be specified clockwise from the outside */
+ 3, 0, 2, 1,
+ 3, 0, 3, 2,
+ 3, 0, 4, 3,
+ 3, 0, 5, 4,
+ 3, 0, 1, 5,
+ 3, 1, 6, 10,
+ 3, 1, 2, 6,
+ 3, 2, 7, 6,
+ 3, 2, 3, 7,
+ 3, 3, 8, 7,
+ 3, 3, 4, 8,
+ 3, 4, 9, 8,
+ 3, 4, 5, 9,
+ 3, 5, 10, 9,
+ 3, 5, 1, 10,
+ 3, 10, 6, 11,
+ 3, 6, 7, 11,
+ 3, 7, 8, 11,
+ 3, 8, 9, 11,
+ 3, 9, 10, 11
+ }
+ },
+
+/* objplane - structure values for plane */
+
+ {
+#ifdef DEFUNCT
+ "plane", "plane", /* long and short names */
+ "plane", /* long name of dual?? */
+#endif
+ 4, 4, 1, /* number of vertices, edges, and faces */
+ { /* vertices (x,y,z) */
+ /* all points must be within radius 1 of the origin */
+#define T 1.0
+ {T, 0, 0},
+ {-T, 0, 0},
+ {0, T, 0},
+ {0, -T, 0},
+#undef T
+ },
+ { /* faces (numfaces + indexes into vertices) */
+ /* faces must be specified clockwise from the outside */
+ 4, 0, 2, 1, 3,
+ }
+ },
+
+/* objpyr - structure values for pyramid */
+
+ {
+#ifdef DEFUNCT
+ "pyramid", "pyramid", /* long and short names */
+ "pyramid", /* long name of dual */
+#endif
+ 5, 8, 5, /* number of vertices, edges, and faces */
+ { /* vertices (x,y,z) */
+ /* all points must be within radius 1 of the origin */
+#define T 1.0
+ {T, 0, 0},
+ {-T, 0, 0},
+ {0, T, 0},
+ {0, -T, 0},
+ {0, 0, T},
+ /* { 0, 0, -T }, */
+#undef T
+ },
+ { /* faces (numfaces + indexes into vertices) */
+ /* faces must be specified clockwise from the outside */
+ 3, 0, 4, 2,
+ /* 3, 0, 2, 5, */
+ /* 3, 0, 5, 3, */
+ 3, 0, 3, 4,
+ 3, 1, 2, 4,
+ /* 3, 1, 5, 2, */
+ /* 3, 1, 3, 5, */
+ 3, 1, 4, 3,
+ 4, 0, 2, 1, 3,
+ }
+ },
+
+#if 0
+ /* ico does not draw non-convex polyhedra well. */
+/* objstar - structure values for octahedron star (stellated octahedron?) */
+ {
+#ifdef DEFUNCT
+ "star", "star", /* long and short names */
+ "star", /* long name of dual */
+#endif
+ 8, 12, 8, /* number of vertices, edges, and faces */
+ { /* vertices (x,y,z) */
+ /* all points must be within radius 1 of the origin */
+#define T 0.577
+ {T, T, T},
+ {T, -T, -T},
+ {-T, T, -T},
+ {-T, -T, T},
+ {-T, -T, -T},
+ {-T, T, T},
+ {T, -T, T},
+ {T, T, -T},
+#undef T
+ },
+ { /* faces (numfaces + indexes into vertices) */
+ /* faces must be specified clockwise from the outside */
+ 3, 2, 1, 0,
+ 3, 1, 3, 0,
+ 3, 3, 2, 0,
+ 3, 2, 3, 1,
+ 3, 6, 5, 4,
+ 3, 5, 7, 4,
+ 3, 7, 6, 4,
+ 3, 6, 7, 5,
+ }
+ },
+ /* Needed 4 other 3-D stars */
+#endif
+
+};
+
+static int polysize = sizeof (polygons) / sizeof (polygons[0]);
+
+
+typedef double Transform3D[4][4];
+
+/* variables that need to be per-thread */
+
+typedef struct {
+ int loopcount;
+ int object;
+ int width, height;
+ int color;
+ Polyinfo *poly;
+ int polyW, polyH;
+ int currX, currY;
+ int prevX, prevY;
+ int polyDeltaX, polyDeltaY;
+ int polydeltax2, polydeltay2;
+ Bool faces, edges;
+ char drawn[MAXNV][MAXNV];
+ int xv_buffer;
+ Transform3D xform;
+ Point3D xv[2][MAXNV];
+ double wo2, ho2;
+} icostruct;
+
+static icostruct *icos = NULL;
+
+/*-
+ * variables that are not set except maybe in initialization before
+ * any additional threads are created
+ */
+
+
+static void
+icoClearArea(ModeInfo * mi, int x, int y, int w, int h)
+{
+ Display *display = MI_DISPLAY(mi);
+
+
+ XClearArea(display, MI_WINDOW(mi), x, y, w, h, 0);
+
+}
+
+/******************************************************************************
+ * Description
+ * Format a 4x4 identity matrix.
+ *
+ * Output
+ * *m Formatted identity matrix
+ *****************************************************************************/
+static void
+IdentMat(register Transform3D m)
+{
+ register int i;
+ register int j;
+
+ for (i = 3; i >= 0; --i) {
+ for (j = 3; j >= 0; --j)
+ m[i][j] = 0.0;
+ m[i][i] = 1.0;
+ }
+}
+
+
+
+/******************************************************************************
+ * Description
+ * Format a matrix that will perform a rotation transformation
+ * about the specified axis. The rotation angle is measured
+ * counterclockwise about the specified axis when looking
+ * at the origin from the positive axis.
+ *
+ * Input
+ * axis Axis ('x', 'y', 'z') about which to perform rotation
+ * angle Angle (in radians) of rotation
+ * A Pointer to rotation matrix
+ *
+ * Output
+ * *m Formatted rotation matrix
+ *****************************************************************************/
+
+static void
+FormatRotateMat(char axis, double angle, register Transform3D m)
+{
+ double s, c;
+
+ IdentMat(m);
+
+ s = sin(angle);
+ c = cos(angle);
+
+ switch (axis) {
+ case 'x':
+ m[1][1] = m[2][2] = c;
+ m[1][2] = s;
+ m[2][1] = -s;
+ break;
+ case 'y':
+ m[0][0] = m[2][2] = c;
+ m[2][0] = s;
+ m[0][2] = -s;
+ break;
+ case 'z':
+ m[0][0] = m[1][1] = c;
+ m[0][1] = s;
+ m[1][0] = -s;
+ break;
+ }
+}
+
+
+/******************************************************************************
+ * Description
+ * Concatenate two 4-by-4 transformation matrices.
+ *
+ * Input
+ * l multiplicand (left operand)
+ * r multiplier (right operand)
+ *
+ * Output
+ * *m Result matrix
+ *****************************************************************************/
+
+static void
+ConcatMat(register Transform3D l, register Transform3D r,
+ register Transform3D m)
+{
+ register int i;
+ register int j;
+
+ for (i = 0; i < 4; ++i)
+ for (j = 0; j < 4; ++j)
+ m[i][j] = l[i][0] * r[0][j]
+ + l[i][1] * r[1][j]
+ + l[i][2] * r[2][j]
+ + l[i][3] * r[3][j];
+}
+
+/* Set up points, transforms, etc. */
+
+static void
+initPoly(ModeInfo * mi, Polyinfo * poly, int icoW, int icoH)
+{
+ icostruct *ip = &icos[MI_SCREEN(mi)];
+ Point3D *vertices = poly->v;
+ int NV = poly->numverts;
+ Transform3D r1;
+ Transform3D r2;
+
+ FormatRotateMat('x', 5 * M_PI / 180.0, r1);
+ FormatRotateMat('y', 5 * M_PI / 180.0, r2);
+ ConcatMat(r1, r2, ip->xform);
+
+ (void) memcpy((char *) ip->xv[0], (char *) vertices, NV * sizeof (Point3D));
+ ip->xv_buffer = 0;
+ ip->wo2 = icoW / 2.0;
+ ip->ho2 = icoH / 2.0;
+}
+
+/******************************************************************************
+ * Description
+ * Perform a partial transform on non-homogeneous points.
+ * Given an array of non-homogeneous (3-coordinate) input points,
+ * this routine multiplies them by the 3-by-3 upper left submatrix
+ * of a standard 4-by-4 transform matrix. The resulting non-homogeneous
+ * points are returned.
+ *
+ * Input
+ * n number of points to transform
+ * m 4-by-4 transform matrix
+ * in array of non-homogeneous input points
+ *
+ * Output
+ * *out array of transformed non-homogeneous output points
+ *****************************************************************************/
+
+static void
+PartialNonHomTransform(int n, register Transform3D m,
+ register Point3D * in, register Point3D * out)
+{
+ for (; n > 0; --n, ++in, ++out) {
+ out->x = in->x * m[0][0] + in->y * m[1][0] + in->z * m[2][0];
+ out->y = in->x * m[0][1] + in->y * m[1][1] + in->z * m[2][1];
+ out->z = in->x * m[0][2] + in->y * m[1][2] + in->z * m[2][2];
+ }
+}
+
+
+/******************************************************************************
+ * Description
+ * Undraw previous polyhedron (by erasing its bounding box).
+ * Rotate and draw the new polyhedron.
+ *
+ * Input
+ * poly the polyhedron to draw
+ * gc X11 graphics context to be used for drawing
+ * icoX, icoY position of upper left of bounding-box
+ * icoW, icoH size of bounding-box
+ * prevX, prevY position of previous bounding-box
+ *****************************************************************************/
+
+static void
+drawPoly(ModeInfo * mi, Polyinfo * poly, GC gc,
+ int icoX, int icoY, int icoW, int icoH, int prevX, int prevY)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ icostruct *ip = &icos[MI_SCREEN(mi)];
+ int *f = poly->f;
+ int NV = poly->numverts;
+ int NF = poly->numfaces;
+
+ register int p0;
+ register int p1;
+ register XPoint *pv2;
+ XSegment *pe;
+ register Point3D *pxv;
+ XPoint v2[MAXNV];
+ XSegment edge_segs[MAXEDGES];
+ register int i;
+ int j, k;
+ register int *pf;
+ int facecolor;
+
+ int pcount;
+ double pxvz;
+ XPoint ppts[MAXEDGESPERPOLY];
+
+ /* Switch double-buffer and rotate vertices */
+
+ ip->xv_buffer = !ip->xv_buffer;
+ PartialNonHomTransform(NV, ip->xform,
+ ip->xv[!ip->xv_buffer], ip->xv[ip->xv_buffer]);
+
+
+ /* Convert 3D coordinates to 2D window coordinates: */
+
+ pxv = ip->xv[ip->xv_buffer];
+ pv2 = v2;
+ for (i = NV - 1; i >= 0; --i) {
+ pv2->x = (int) ((pxv->x + 1.0) * ip->wo2) + icoX;
+ pv2->y = (int) ((pxv->y + 1.0) * ip->ho2) + icoY;
+ ++pxv;
+ ++pv2;
+ }
+
+
+ /* Accumulate edges to be drawn, eliminating duplicates for speed: */
+
+ pxv = ip->xv[ip->xv_buffer];
+ pv2 = v2;
+ pf = f;
+ pe = edge_segs;
+ (void) memset(ip->drawn, 0, sizeof (ip->drawn));
+
+ /* for faces, need to clear before FillPoly */
+ if (ip->faces) { /* multibuf uses update background */
+ icoClearArea(mi, prevX, prevY, icoW + 1, icoH + 1);
+ }
+ for (i = NF - 1; i >= 0; --i, pf += pcount) {
+
+ pcount = *pf++; /* number of edges for this face */
+ pxvz = 0.0;
+ for (j = 0; j < pcount; j++) {
+ p0 = pf[j];
+ pxvz += pxv[p0].z;
+ }
+
+ /* If facet faces away from viewer, don't consider it: */
+ if (pxvz < 0.0)
+ continue;
+
+ if (ip->faces) {
+ if (MI_NPIXELS(mi) > 2)
+ facecolor = i % (MI_NPIXELS(mi)) + 1;
+ else
+ facecolor = 1;
+
+ for (j = 0; j < pcount; j++) {
+ p0 = pf[j];
+ ppts[j].x = pv2[p0].x;
+ ppts[j].y = pv2[p0].y;
+ }
+ if (MI_NPIXELS(mi) <= 2)
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+ else
+ XSetForeground(display, gc, MI_PIXEL(mi, facecolor));
+ XFillPolygon(display, window, gc, ppts, pcount,
+ Convex, CoordModeOrigin);
+ }
+ if (ip->edges) {
+ for (j = 0; j < pcount; j++) {
+ if (j < pcount - 1)
+ k = j + 1;
+ else
+ k = 0;
+ p0 = pf[j];
+ p1 = pf[k];
+ if (!ip->drawn[p0][p1]) {
+ ip->drawn[p0][p1] = 1;
+ ip->drawn[p1][p0] = 1;
+ pe->x1 = pv2[p0].x;
+ pe->y1 = pv2[p0].y;
+ pe->x2 = pv2[p1].x;
+ pe->y2 = pv2[p1].y;
+ ++pe;
+ }
+ }
+ }
+ }
+
+ /* Erase previous, draw current icosahedrons; sync for smoothness. */
+
+ if (ip->edges) {
+ if (MI_NPIXELS(mi) <= 2)
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+ else {
+ ip->color = (ip->color + 1) % MI_NPIXELS(mi);
+ XSetForeground(display, gc, MI_PIXEL(mi, ip->color));
+ }
+ icoClearArea(mi, prevX, prevY, icoW + 1, icoH + 1);
+ XDrawSegments(display, window, gc, edge_segs, pe - edge_segs);
+ }
+}
+
+void
+init_ico(ModeInfo * mi)
+{
+ icostruct *ip;
+ int size = MI_SIZE(mi);
+
+ if (icos == NULL) {
+ if ((icos = (icostruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (icostruct))) == NULL)
+ return;
+ }
+ ip = &icos[MI_SCREEN(mi)];
+
+ ip->width = MI_WIN_WIDTH(mi);
+ ip->height = MI_WIN_HEIGHT(mi);
+
+ ip->edges = edges;
+#ifdef USE_HACKERS
+ ip->faces = faces;
+#else
+ ip->faces = faces = 0;
+#endif
+ /*ip->linewidth
+ if (!ip->faces && !ip->edges) icoFatal("nothing to draw"); */
+
+ if (size < -MINSIZE)
+ ip->polyW = NRAND(MIN(-size, MAX(MINSIZE,
+ MIN(ip->width, ip->height) / 4)) - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE) {
+ if (!size)
+ ip->polyW = MAX(MINSIZE, MIN(ip->width, ip->height) / 4);
+ else
+ ip->polyW = MINSIZE;
+ } else
+ ip->polyW = MIN(size, MAX(MINSIZE,
+ MIN(ip->width, ip->height) / 4));
+
+ ip->polyH = ip->polyW;
+ ip->polyDeltaX = ip->polyW / DEFAULT_DELTAY + 1;
+ ip->polyDeltaY = ip->polyH / DEFAULT_DELTAX + 1;
+ ip->currX = NRAND(ip->width - ip->polyW);
+ ip->currY = NRAND(ip->height - ip->polyH);
+
+ /* Bounce the box in the window */
+
+ ip->polydeltax2 = ip->polyDeltaX * 2;
+ ip->polydeltay2 = ip->polyDeltaY * 2;
+
+ ip->loopcount = 0;
+
+ ip->object = MI_BATCHCOUNT(mi) - 1;
+ if (ip->object < 0 || ip->object >= polysize)
+ ip->object = NRAND(polysize);
+ ip->poly = polygons + ip->object;
+ if (MI_NPIXELS(mi) > 2)
+ ip->color = NRAND(MI_NPIXELS(mi));
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+ initPoly(mi, ip->poly, ip->polyW, ip->polyH);
+}
+
+void
+draw_ico(ModeInfo * mi)
+{
+ icostruct *ip = &icos[MI_SCREEN(mi)];
+
+ if (++ip->loopcount > MI_CYCLES(mi))
+ init_ico(mi);
+
+ ip->prevX = ip->currX;
+ ip->prevY = ip->currY;
+
+ ip->currX += ip->polyDeltaX;
+ if (ip->currX < 0 || ip->currX + ip->polyW > ip->width) {
+
+ ip->currX -= ip->polydeltax2;
+ ip->polyDeltaX = -ip->polyDeltaX;
+ ip->polydeltax2 = ip->polyDeltaX * 2;
+ }
+ ip->currY += ip->polyDeltaY;
+ if (ip->currY < 0 || ip->currY + ip->polyH > ip->height) {
+ ip->currY -= ip->polydeltay2;
+ ip->polyDeltaY = -ip->polyDeltaY;
+ ip->polydeltay2 = ip->polyDeltaY * 2;
+ }
+ drawPoly(mi, ip->poly, MI_GC(mi),
+ ip->currX, ip->currY, ip->polyW, ip->polyH, ip->prevX, ip->prevY);
+}
+void
+refresh_ico(ModeInfo * mi)
+{
+ /* Do nothing, it will refresh by itself */
+}
+
+void
+release_ico(ModeInfo * mi)
+{
+ if (icos != NULL) {
+ (void) free((void *) icos);
+ icos = NULL;
+ }
+}
+
+void
+change_ico(ModeInfo * mi)
+{
+ icostruct *ip = &icos[MI_SCREEN(mi)];
+
+ ip->object = (ip->object + 1) % polysize;
+ ip->poly = polygons + ip->object;
+ ip->loopcount = 0;
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+ initPoly(mi, ip->poly, ip->polyW, ip->polyH);
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)ifs.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * ifs.c - Modified iterated functions system for xlock, the X Window
+ * System lockscreen
+ *
+ * Copyright (c) 1997 by Massimino Pascal <Pascal.Massimon@ens.fr>
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: jwz@netscape.com: turned into a standalone program.
+ * Made it render into an offscreen bitmap and then copy
+ * that onto the screen, to reduce flicker.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "IFS"
+#define HACK_INIT init_ifs
+#define HACK_DRAW draw_ifs
+#define DEF_DELAY 1000
+#define DEF_NCOLORS 100
+#define SMOOTH_COLORS
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt ifs_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+/*****************************************************/
+
+typedef float DBL;
+typedef short int F_PT;
+
+/* typedef float F_PT; */
+
+/*****************************************************/
+
+#define FIX 12
+#define UNIT ( 1<<FIX )
+#define MAX_SIMI 6
+
+ /* settings for a PC 120Mhz... */
+#define MAX_DEPTH_2 10
+#define MAX_DEPTH_3 6
+#define MAX_DEPTH_4 4
+#define MAX_DEPTH_5 3
+
+#define DBL_To_F_PT(x) (F_PT)( (DBL)(UNIT)*(x) )
+
+/*****************************************************/
+
+static int Max_Colors;
+static ModeInfo *The_MI;
+static F_PT Lx, Ly;
+static int D;
+static Display *display;
+static GC gc;
+static Window window;
+
+/*****************************************************/
+
+typedef struct Similitude_Struct SIMI;
+typedef struct Fractal_Struct FRACTAL;
+
+struct Similitude_Struct {
+
+ DBL c_x, c_y;
+ DBL r, r2, A, A2;
+ F_PT Ct, St, Ct2, St2;
+ F_PT Cx, Cy;
+ F_PT R, R2;
+};
+
+struct Fractal_Struct {
+
+ int Nb_Simi;
+ SIMI Components[5 * MAX_SIMI];
+ int Depth, Col;
+ int Count, Speed;
+ int Width, Height, Lx, Ly;
+ DBL r_mean, dr_mean, dr2_mean;
+ int Cur_Pt, Max_Pt;
+ XPoint *Buffer1, *Buffer2;
+ Pixmap dbuf;
+ GC dbuf_gc;
+};
+
+static FRACTAL *Root = NULL, *Cur_F;
+static XPoint *Buf;
+static int Cur_Pt;
+
+
+/*****************************************************/
+/*****************************************************/
+
+static DBL
+Gauss_Rand(DBL c, DBL A, DBL S)
+{
+ DBL y;
+
+ y = (DBL) LRAND() / MAXRAND;
+ y = A * (1.0 - exp(-y * y * S)) / (1.0 - exp(-S));
+ if (NRAND(2))
+ return (c + y);
+ return (c - y);
+}
+
+static DBL
+Half_Gauss_Rand(DBL c, DBL A, DBL S)
+{
+ DBL y;
+
+ y = (DBL) LRAND() / MAXRAND;
+ y = A * (1.0 - exp(-y * y * S)) / (1.0 - exp(-S));
+ return (c + y);
+}
+
+static void
+Random_Simis(FRACTAL * F, SIMI * Cur, int i)
+{
+ while (i--) {
+ Cur->c_x = Gauss_Rand(0.0, .8, 4.0);
+ Cur->c_y = Gauss_Rand(0.0, .8, 4.0);
+ Cur->r = Gauss_Rand(F->r_mean, F->dr_mean, 3.0);
+ Cur->r2 = Half_Gauss_Rand(0.0, F->dr2_mean, 2.0);
+ Cur->A = Gauss_Rand(0.0, 360.0, 4.0) * (M_PI / 180.0);
+ Cur->A2 = Gauss_Rand(0.0, 360.0, 4.0) * (M_PI / 180.0);
+ Cur++;
+ }
+}
+
+/***************************************************************/
+
+void
+init_ifs(ModeInfo * mi)
+{
+ int i;
+ FRACTAL *Fractal;
+
+ if (Root == NULL) {
+ Root = (FRACTAL *) calloc(
+ MI_NUM_SCREENS(mi), sizeof (FRACTAL));
+ if (Root == NULL)
+ return;
+ }
+ Fractal = &Root[MI_SCREEN(mi)];
+
+ if (Fractal->Max_Pt) {
+ free(Fractal->Buffer1);
+ free(Fractal->Buffer2);
+ }
+ i = (NRAND(4)) + 2; /* Number of centers */
+ switch (i) {
+ case 3:
+ Fractal->Depth = MAX_DEPTH_3;
+ Fractal->r_mean = .6;
+ Fractal->dr_mean = .4;
+ Fractal->dr2_mean = .3;
+ break;
+
+ case 4:
+ Fractal->Depth = MAX_DEPTH_4;
+ Fractal->r_mean = .5;
+ Fractal->dr_mean = .4;
+ Fractal->dr2_mean = .3;
+ break;
+
+ case 5:
+ Fractal->Depth = MAX_DEPTH_5;
+ Fractal->r_mean = .5;
+ Fractal->dr_mean = .4;
+ Fractal->dr2_mean = .3;
+ break;
+
+ default:
+ case 2:
+ Fractal->Depth = MAX_DEPTH_2;
+ Fractal->r_mean = .7;
+ Fractal->dr_mean = .3;
+ Fractal->dr2_mean = .4;
+ break;
+ }
+ /* (void) fprintf( stderr, "N=%d\n", i ); */
+ Fractal->Nb_Simi = i;
+ Fractal->Max_Pt = Fractal->Nb_Simi - 1;
+ for (i = 0; i <= Fractal->Depth + 2; ++i)
+ Fractal->Max_Pt *= Fractal->Nb_Simi;
+
+ Fractal->Buffer1 = (XPoint *) calloc(Fractal->Max_Pt, sizeof (XPoint));
+ if (Fractal->Buffer1 == NULL)
+ goto Abort;
+ Fractal->Buffer2 = (XPoint *) calloc(Fractal->Max_Pt, sizeof (XPoint));
+ if (Fractal->Buffer2 == NULL)
+ goto Abort;
+
+ Fractal->Speed = 6;
+ Fractal->Width = MI_WIN_WIDTH(mi);
+ Fractal->Height = MI_WIN_HEIGHT(mi);
+ Fractal->Cur_Pt = 0;
+ Fractal->Count = 0;
+ Fractal->Lx = (Fractal->Width - 1) / 2;
+ Fractal->Ly = (Fractal->Height - 1) / 2;
+ Fractal->Col = NRAND(MI_NPIXELS(mi) - 1) + 1;
+
+ Random_Simis(Fractal, Fractal->Components, 5 * MAX_SIMI);
+
+
+ Fractal->dbuf = XCreatePixmap(MI_DISPLAY(mi), MI_WINDOW(mi),
+ Fractal->Width, Fractal->Height, 1);
+ if (Fractal->dbuf) {
+ XGCValues gcv;
+
+ gcv.foreground = 0;
+ gcv.background = 0;
+ gcv.function = GXcopy;
+ Fractal->dbuf_gc = XCreateGC(MI_DISPLAY(mi), Fractal->dbuf,
+ GCForeground | GCBackground | GCFunction,
+ &gcv);
+ XFillRectangle(MI_DISPLAY(mi), Fractal->dbuf,
+ Fractal->dbuf_gc, 0, 0, Fractal->Width, Fractal->Height);
+ XSetBackground(MI_DISPLAY(mi), MI_GC(mi), MI_WIN_BLACK_PIXEL(mi));
+ XSetFunction(MI_DISPLAY(mi), MI_GC(mi), GXcopy);
+ }
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+ return;
+
+ Abort:
+ if (Fractal->Buffer1 != NULL)
+ free(Fractal->Buffer1);
+ if (Fractal->Buffer2 != NULL)
+ free(Fractal->Buffer2);
+ Fractal->Buffer1 = NULL;
+ Fractal->Buffer2 = NULL;
+ Fractal->Max_Pt = 0;
+ return;
+}
+
+
+/***************************************************************/
+
+static inline void
+Transform(SIMI * Simi, F_PT xo, F_PT yo, F_PT * x, F_PT * y)
+{
+ F_PT xx, yy;
+
+ xo = xo - Simi->Cx;
+ xo = (xo * Simi->R) / UNIT;
+ yo = yo - Simi->Cy;
+ yo = (yo * Simi->R) / UNIT;
+
+ xx = xo - Simi->Cx;
+ xx = (xx * Simi->R2) / UNIT;
+ yy = -yo - Simi->Cy;
+ yy = (yy * Simi->R2) / UNIT;
+
+ *x = ((xo * Simi->Ct - yo * Simi->St + xx * Simi->Ct2 - yy * Simi->St2) / UNIT) + Simi->Cx;
+ *y = ((xo * Simi->St + yo * Simi->Ct + xx * Simi->St2 + yy * Simi->Ct2) / UNIT) + Simi->Cy;
+}
+
+/***************************************************************/
+
+static void
+Trace(F_PT xo, F_PT yo)
+{
+ F_PT x, y, i;
+ SIMI *Cur;
+
+ Cur = Cur_F->Components;
+ for (i = Cur_F->Nb_Simi; i; --i, Cur++) {
+ Transform(Cur, xo, yo, &x, &y);
+ Buf->x = Lx + (x * Lx / (UNIT * 2));
+ Buf->y = Ly - (y * Ly / (UNIT * 2));
+ Buf++;
+ Cur_Pt++;
+
+ if (D && ((x - xo) >> 4) && ((y - yo) >> 4)) {
+ D--;
+ Trace(x, y);
+ D++;
+ }
+ }
+}
+
+static void
+Draw_Fractal(FRACTAL * F)
+{
+ int i, j;
+ F_PT x, y, xo, yo;
+ SIMI *Cur, *Simi;
+
+ for (Cur = F->Components, i = F->Nb_Simi; i; --i, Cur++) {
+ Cur->Cx = DBL_To_F_PT(Cur->c_x);
+ Cur->Cy = DBL_To_F_PT(Cur->c_y);
+
+ Cur->Ct = DBL_To_F_PT(cos(Cur->A));
+ Cur->St = DBL_To_F_PT(sin(Cur->A));
+ Cur->Ct2 = DBL_To_F_PT(cos(Cur->A2));
+ Cur->St2 = DBL_To_F_PT(sin(Cur->A2));
+
+ Cur->R = DBL_To_F_PT(Cur->r);
+ Cur->R2 = DBL_To_F_PT(Cur->r2);
+ }
+
+
+ Cur_Pt = 0;
+ Cur_F = F;
+ Buf = F->Buffer2;
+ Lx = F->Lx;
+ Ly = F->Ly;
+ D = F->Depth;
+ for (Cur = F->Components, i = F->Nb_Simi; i; --i, Cur++) {
+ xo = Cur->Cx;
+ yo = Cur->Cy;
+ for (Simi = F->Components, j = F->Nb_Simi; j; --j, Simi++) {
+ if (Simi == Cur)
+ continue;
+ Transform(Simi, xo, yo, &x, &y);
+ Trace(x, y);
+ }
+ }
+
+ /* Erase previous */
+
+ if (F->Cur_Pt) {
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(The_MI));
+ if (F->dbuf) {
+ XSetForeground(display, F->dbuf_gc, 0);
+/* XDrawPoints(display, F->dbuf, F->dbuf_gc, F->Buffer1, F->Cur_Pt,
+ CoordModeOrigin); */
+ XFillRectangle(display, F->dbuf, F->dbuf_gc, 0, 0,
+ F->Width, F->Height);
+ } else
+ XDrawPoints(display, window, gc, F->Buffer1, F->Cur_Pt, CoordModeOrigin);
+ }
+ if (Max_Colors < 2)
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(The_MI));
+ else
+ XSetForeground(display, gc, MI_PIXEL(The_MI, F->Col % Max_Colors));
+ if (Cur_Pt) {
+ if (F->dbuf) {
+ XSetForeground(display, F->dbuf_gc, 1);
+ XDrawPoints(display, F->dbuf, F->dbuf_gc, F->Buffer2, Cur_Pt,
+ CoordModeOrigin);
+ } else
+ XDrawPoints(display, window, gc, F->Buffer2, Cur_Pt, CoordModeOrigin);
+ }
+ if (F->dbuf)
+ XCopyPlane(display, F->dbuf, window, gc, 0, 0, F->Width, F->Height, 0, 0, 1);
+
+ F->Cur_Pt = Cur_Pt;
+ Buf = F->Buffer1;
+ F->Buffer1 = F->Buffer2;
+ F->Buffer2 = Buf;
+}
+
+
+void
+draw_ifs(ModeInfo * mi)
+{
+ int i;
+ FRACTAL *F;
+ DBL u, uu, v, vv, u0, u1, u2, u3;
+ SIMI *S, *S1, *S2, *S3, *S4;
+
+ The_MI = mi;
+ display = MI_DISPLAY(mi);
+ window = MI_WINDOW(mi);
+ gc = MI_GC(mi);
+ Max_Colors = MI_NPIXELS(mi);
+
+ F = &Root[MI_SCREEN(mi)];
+
+ u = (DBL) (F->Count) * (DBL) (F->Speed) / 1000.0;
+ uu = u * u;
+ v = 1.0 - u;
+ vv = v * v;
+ u0 = vv * v;
+ u1 = 3.0 * vv * u;
+ u2 = 3.0 * v * uu;
+ u3 = u * uu;
+
+ S = F->Components;
+ S1 = S + F->Nb_Simi;
+ S2 = S1 + F->Nb_Simi;
+ S3 = S2 + F->Nb_Simi;
+ S4 = S3 + F->Nb_Simi;
+
+ for (i = F->Nb_Simi; i; --i, S++, S1++, S2++, S3++, S4++) {
+ S->c_x = u0 * S1->c_x + u1 * S2->c_x + u2 * S3->c_x + u3 * S4->c_x;
+ S->c_y = u0 * S1->c_y + u1 * S2->c_y + u2 * S3->c_y + u3 * S4->c_y;
+ S->r = u0 * S1->r + u1 * S2->r + u2 * S3->r + u3 * S4->r;
+ S->r2 = u0 * S1->r2 + u1 * S2->r2 + u2 * S3->r2 + u3 * S4->r2;
+ S->A = u0 * S1->A + u1 * S2->A + u2 * S3->A + u3 * S4->A;
+ S->A2 = u0 * S1->A2 + u1 * S2->A2 + u2 * S3->A2 + u3 * S4->A2;
+ }
+
+ Draw_Fractal(F);
+
+ if (F->Count >= 1000 / F->Speed) {
+ S = F->Components;
+ S1 = S + F->Nb_Simi;
+ S2 = S1 + F->Nb_Simi;
+ S3 = S2 + F->Nb_Simi;
+ S4 = S3 + F->Nb_Simi;
+
+ for (i = F->Nb_Simi; i; --i, S++, S1++, S2++, S3++, S4++) {
+ S2->c_x = 2.0 * S4->c_x - S3->c_x;
+ S2->c_y = 2.0 * S4->c_y - S3->c_y;
+ S2->r = 2.0 * S4->r - S3->r;
+ S2->r2 = 2.0 * S4->r2 - S3->r2;
+ S2->A = 2.0 * S4->A - S3->A;
+ S2->A2 = 2.0 * S4->A2 - S3->A2;
+
+ *S1 = *S4;
+ }
+ Random_Simis(F, F->Components + 3 * F->Nb_Simi, F->Nb_Simi);
+
+ Random_Simis(F, F->Components + 4 * F->Nb_Simi, F->Nb_Simi);
+
+ F->Count = 0;
+ } else
+ F->Count++;
+
+ F->Col++;
+}
+
+
+/***************************************************************/
+
+void
+release_ifs(ModeInfo * mi)
+{
+ int screen;
+
+ if (Root != NULL) {
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ FRACTAL *Fractal = &Root[screen];
+
+ if (Fractal->Buffer1 != NULL)
+ free(Fractal->Buffer1);
+ if (Fractal->Buffer2 != NULL)
+ free(Fractal->Buffer2);
+ if (Fractal->dbuf)
+ XFreePixmap(MI_DISPLAY(mi), Fractal->dbuf);
+ if (Fractal->dbuf_gc)
+ XFreeGC(MI_DISPLAY(mi), Fractal->dbuf_gc);
+
+ }
+ (void) free((void *) Root);
+ Root = NULL;
+ }
+}
--- /dev/null
+
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)image.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * image.c - image bouncer 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 03-Nov-95: Patched to add an arbitrary xpm file.
+ * 21-Sep-95: Patch if xpm fails to load <Markus.Zellner@anu.edu.au>.
+ * 17-Jun-95: Pixmap stuff of Skip_Burrell@sterling.com added.
+ * 07-Dec-94: Icons are now better centered if do not exactly fill an area.
+ * 29-Jul-90: Written.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Image"
+#define HACK_INIT init_image
+#define HACK_DRAW draw_image
+#define DEF_DELAY 2000000
+#define DEF_BATCHCOUNT -10
+#define DEF_NCOLORS 200
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt image_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+/* aliases for vars defined in the bitmap file */
+#define IMAGE_WIDTH image_width
+#define IMAGE_HEIGHT image_height
+#define IMAGE_BITS image_bits
+
+#include "image.xbm"
+
+#if defined( USE_XPM ) || defined( USE_XPMINC )
+#define IMAGE_NAME image_name
+#include "image.xpm"
+#endif
+
+#define MINICONS 1
+
+extern void getImage(ModeInfo * mi, XImage ** logo,
+ int width, int height, unsigned char *bits,
+#if defined( USE_XPM ) || defined( USE_XPMINC )
+ char **name,
+#endif
+ int *graphics_format, Colormap * newcolormap,
+ unsigned long *blackpix, unsigned long *whitepix);
+extern void destroyImage(XImage ** logo, int *graphics_format);
+
+typedef struct {
+ int x, y;
+ int color;
+} imagetype;
+
+typedef struct {
+ int width, height;
+ int nrows, ncols;
+ XPoint image_offset;
+ int iconcount;
+ imagetype *icons;
+ int graphics_format;
+ GC backGC;
+ XImage *logo;
+ Colormap cm;
+ unsigned long black, white;
+} imagestruct;
+
+static imagestruct *ims = NULL;
+
+void
+init_image(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ imagestruct *ip;
+ int i;
+
+ if (ims == NULL) {
+ if ((ims = (imagestruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (imagestruct))) == NULL)
+ return;
+ }
+ ip = &ims[MI_SCREEN(mi)];
+
+ if (!ip->logo)
+ getImage(mi, &ip->logo, IMAGE_WIDTH, IMAGE_HEIGHT, IMAGE_BITS,
+#if defined( USE_XPM ) || defined( USE_XPMINC )
+ IMAGE_NAME,
+#endif
+ &ip->graphics_format, &ip->cm,
+ &ip->black, &ip->white);
+ if (ip->cm != None) {
+ if (ip->backGC == None) {
+ XGCValues xgcv;
+
+ setColormap(display, window, ip->cm, MI_WIN_IS_INWINDOW(mi));
+ xgcv.background = ip->black;
+ ip->backGC = XCreateGC(display, window, GCBackground, &xgcv);
+ }
+ } else {
+ ip->black = MI_WIN_BLACK_PIXEL(mi);
+ ip->backGC = MI_GC(mi);
+ }
+ ip->width = MI_WIN_WIDTH(mi);
+ ip->height = MI_WIN_HEIGHT(mi);
+ if (ip->width > ip->logo->width)
+ ip->ncols = ip->width / ip->logo->width;
+ else
+ ip->ncols = 1;
+ if (ip->height > ip->logo->height)
+ ip->nrows = ip->height / ip->logo->height;
+ else
+ ip->nrows = 1;
+ ip->image_offset.x = (ip->width - ip->ncols * ip->logo->width) / 2;
+ ip->image_offset.y = (ip->height - ip->nrows * ip->logo->height) / 2;
+ ip->iconcount = MI_BATCHCOUNT(mi);
+ if (ip->iconcount < -MINICONS)
+ ip->iconcount = NRAND(-ip->iconcount - MINICONS + 1) + MINICONS;
+ else if (ip->iconcount < MINICONS)
+ ip->iconcount = MINICONS;
+ if (ip->iconcount > ip->ncols * ip->nrows)
+ ip->iconcount = ip->ncols * ip->nrows;
+ if (ip->icons != NULL)
+ (void) free((void *) ip->icons);
+ ip->icons = (imagetype *) malloc(ip->iconcount * sizeof (imagetype));
+ for (i = 0; i < ip->iconcount; i++)
+ ip->icons[i].x = -1;
+ XSetForeground(display, ip->backGC, ip->black);
+ XFillRectangle(display, window, ip->backGC,
+ 0, 0, ip->width, ip->height);
+}
+
+void
+draw_image(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ imagestruct *ip = &ims[MI_SCREEN(mi)];
+ int i;
+
+ XSetForeground(display, ip->backGC, ip->black);
+ for (i = 0; i < ip->iconcount; i++) {
+ if ((ip->ncols * ip->nrows > ip->iconcount) && ip->icons[i].x >= 0)
+ XFillRectangle(display, window, ip->backGC,
+ ip->logo->width * ip->icons[i].x + ip->image_offset.x,
+ ip->logo->height * ip->icons[i].y + ip->image_offset.y,
+ ip->logo->width, ip->logo->height);
+ ip->icons[i].x = NRAND(ip->ncols);
+ ip->icons[i].y = NRAND(ip->nrows);
+ ip->icons[i].color = NRAND(MI_NPIXELS(mi));
+ }
+ refresh_image(mi);
+}
+
+void
+release_image(ModeInfo * mi)
+{
+ if (ims != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ imagestruct *ip = &ims[screen];
+
+ if (ip->icons != NULL)
+ (void) free((void *) ip->icons);
+ if (ip->cm != None) {
+ if (ip->backGC != None)
+ XFreeGC(MI_DISPLAY(mi), ip->backGC);
+ XFreeColormap(MI_DISPLAY(mi), ip->cm);
+ }
+ destroyImage(&ip->logo, &ip->graphics_format);
+ }
+ (void) free((void *) ims);
+ ims = NULL;
+ }
+}
+
+void
+refresh_image(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ imagestruct *ip = &ims[MI_SCREEN(mi)];
+ int i;
+
+ if (MI_NPIXELS(mi) <= 2)
+ XSetForeground(display, ip->backGC, MI_WIN_WHITE_PIXEL(mi));
+ for (i = 0; i < ip->iconcount; i++) {
+ if (ip->logo != NULL && ip->icons[i].x >= 0) {
+ if (MI_NPIXELS(mi) > 2 && ip->graphics_format < IS_XPM)
+ XSetForeground(display, ip->backGC, MI_PIXEL(mi, ip->icons[i].color));
+ XPutImage(display, window, ip->backGC, ip->logo, 0, 0,
+ ip->logo->width * ip->icons[i].x + ip->image_offset.x,
+ ip->logo->height * ip->icons[i].y + ip->image_offset.y,
+ ip->logo->width, ip->logo->height);
+ }
+ }
+}
--- /dev/null
+./bitmaps/m-x11.xbm
\ No newline at end of file
--- /dev/null
+./pixmaps/m-x11.xpm
\ No newline at end of file
--- /dev/null
+#! /bin/sh
+#
+# install - install a program, script, or datafile
+# This comes from X11R5 (mit/util/scripts/install.sh).
+#
+# Copyright 1991 by the Massachusetts Institute of Technology
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of M.I.T. not be used in advertising or
+# publicity pertaining to distribution of the software without specific,
+# written prior permission. M.I.T. makes no representations about the
+# suitability of this software for any purpose. It is provided "as is"
+# without express or implied warranty.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch. It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+transformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+ case $1 in
+ -c) instcmd="$cpprog"
+ shift
+ continue;;
+
+ -d) dir_arg=true
+ shift
+ continue;;
+
+ -m) chmodcmd="$chmodprog $2"
+ shift
+ shift
+ continue;;
+
+ -o) chowncmd="$chownprog $2"
+ shift
+ shift
+ continue;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift
+ shift
+ continue;;
+
+ -s) stripcmd="$stripprog"
+ shift
+ continue;;
+
+ -t=*) transformarg=`echo $1 | sed 's/-t=//'`
+ shift
+ continue;;
+
+ -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+ shift
+ continue;;
+
+ *) if [ x"$src" = x ]
+ then
+ src=$1
+ else
+ # this colon is to work around a 386BSD /bin/sh bug
+ :
+ dst=$1
+ fi
+ shift
+ continue;;
+ esac
+done
+
+if [ x"$src" = x ]
+then
+ echo "install: no input file specified"
+ exit 1
+else
+ true
+fi
+
+if [ x"$dir_arg" != x ]; then
+ dst=$src
+ src=""
+
+ if [ -d $dst ]; then
+ instcmd=:
+ else
+ instcmd=mkdir
+ fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad
+# if $src (and thus $dsttmp) contains '*'.
+
+ if [ -f $src -o -d $src ]
+ then
+ true
+ else
+ echo "install: $src does not exist"
+ exit 1
+ fi
+
+ if [ x"$dst" = x ]
+ then
+ echo "install: no destination specified"
+ exit 1
+ else
+ true
+ fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+ if [ -d $dst ]
+ then
+ dst="$dst"/`basename $src`
+ else
+ true
+ fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+# this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='
+'
+IFS="${IFS-${defaultIFS}}"
+
+oIFS="${IFS}"
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS="${oIFS}"
+
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+ pathcomp="${pathcomp}${1}"
+ shift
+
+ if [ ! -d "${pathcomp}" ] ;
+ then
+ $mkdirprog "${pathcomp}"
+ else
+ true
+ fi
+
+ pathcomp="${pathcomp}/"
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+ $doit $instcmd $dst &&
+
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+ if [ x"$transformarg" = x ]
+ then
+ dstfile=`basename $dst`
+ else
+ dstfile=`basename $dst $transformbasename |
+ sed $transformarg`$transformbasename
+ fi
+
+# don't allow the sed command to completely eliminate the filename
+
+ if [ x"$dstfile" = x ]
+ then
+ dstfile=`basename $dst`
+ else
+ true
+ fi
+
+# Make a temp file name in the proper directory.
+
+ dsttmp=$dstdir/#inst.$$#
+
+# Move or copy the file name to the temp name
+
+ $doit $instcmd $src $dsttmp &&
+
+ trap "rm -f ${dsttmp}" 0 &&
+
+# and set any options; do chmod last to preserve setuid bits
+
+# If any of these fail, we abort the whole thing. If we want to
+# ignore errors from any of these, just make sure not to ignore
+# errors from the above "$doit $instcmd $src $dsttmp" command.
+
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
+
+# Now rename the file to the real destination.
+
+ $doit $rmcmd -f $dstdir/$dstfile &&
+ $doit $mvcmd $dsttmp $dstdir/$dstfile
+
+fi &&
+
+
+exit 0
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)julia.c 4.03 97/04/10 xlockmore";
+
+#endif
+
+/*-
+ * julia.c - continuously varying Julia set for xlock, the X Window
+ * System lockscreen.
+ *
+ * Copyright (c) 1995 Sean McCullough <bankshot@mailhost.nmt.edu>.
+ *
+ * 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.
+ *
+ * Revision History:
+ * 28-May-97: jwz@netscape.com: added interactive frobbing with the mouse.
+ * 10-May-97: jwz@netscape.com: turned into a standalone program.
+ * 02-Dec-95: snagged boilerplate from hop.c
+ * used ifs {w0 = sqrt(x-c), w1 = -sqrt(x-c)} with random iteration
+ * to plot the julia set, and sinusoidially varied parameter for set
+ * and plotted parameter with a circle.
+ */
+
+/*-
+ * One thing to note is that batchcount is the *depth* of the search tree,
+ * so the number of points computed is 2^batchcount - 1. I use 8 or 9
+ * on a dx266 and it looks okay. The sinusoidal variation of the parameter
+ * might not be as interesting as it could, but it still gives an idea of
+ * the effect of the parameter.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Julia"
+#define HACK_INIT init_julia
+#define HACK_DRAW draw_julia
+#define DEF_DELAY 10000
+#define DEF_BATCHCOUNT 1000
+#define DEF_CYCLES 20
+#define DEF_NCOLORS 200
+#define UNIFORM_COLORS
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+
+#endif /* STANDALONE */
+
+#define DEF_MOUSE "False"
+
+static Bool mouse;
+
+#ifndef STANDALONE
+static XrmOptionDescRec opts[] =
+{
+ {"-mouse", ".julia.mouse", XrmoptionNoArg, (caddr_t) "on"},
+ {"+mouse", ".julia.mouse", XrmoptionNoArg, (caddr_t) "off"}
+};
+static argtype vars[] =
+{
+ {(caddr_t *) & mouse, "mouse", "Mouse", DEF_MOUSE, t_Bool}
+};
+static OptionStruct desc[] =
+{
+ {"-/+mouse", "turn on/off the grabbing the mouse"}
+};
+
+ModeSpecOpt julia_opts =
+{2, opts, 1, vars, desc};
+
+#endif /* !STANDALONE */
+
+#define numpoints ((0x2<<jp->depth)-1)
+
+typedef struct {
+ int centerx;
+ int centery; /* center of the screen */
+ double cr;
+ double ci; /* julia params */
+ int depth;
+ int inc;
+ int circsize;
+ int erase;
+ int pix;
+ long itree;
+ int buffer;
+ int nbuffers;
+ int redrawing, redrawpos;
+ Pixmap pixmap;
+ GC stippledGC;
+ XPoint **pointBuffer; /* pointer for XDrawPoints */
+ Cursor cursor;
+} juliastruct;
+
+static juliastruct *julias = NULL;
+
+/* How many segments to draw per cycle when redrawing */
+#define REDRAWSTEP 3
+
+static void
+apply(juliastruct * jp, register double xr, register double xi, int d)
+{
+ double theta, r;
+
+ jp->pointBuffer[jp->buffer][jp->itree].x =
+ (int) (0.5 * xr * jp->centerx + jp->centerx);
+ jp->pointBuffer[jp->buffer][jp->itree].y =
+ (int) (0.5 * xi * jp->centery + jp->centery);
+ jp->itree++;
+
+ if (d > 0) {
+ xi -= jp->ci;
+ xr -= jp->cr;
+
+/* Avoid atan2: DOMAIN error message */
+ if (xi == 0.0 && xr == 0.0)
+ theta = 0.0;
+ else
+ theta = atan2(xi, xr) / 2.0;
+
+ /*r = pow(xi * xi + xr * xr, 0.25); */
+ r = sqrt(sqrt(xi * xi + xr * xr)); /* 3 times faster */
+
+ xr = r * cos(theta);
+ xi = r * sin(theta);
+
+ d--;
+ apply(jp, xr, xi, d);
+ apply(jp, -xr, -xi, d);
+ }
+}
+
+static void
+incr(ModeInfo * mi, juliastruct * jp)
+{
+ Bool track_p = mouse;
+ int cx, cy;
+
+ if (track_p) {
+ Window r, c;
+ int rx, ry;
+ unsigned int m;
+
+ XQueryPointer(MI_DISPLAY(mi), MI_WINDOW(mi),
+ &r, &c, &rx, &ry, &cx, &cy, &m);
+ if (cx <= 0 || cy <= 0 ||
+ cx >= MI_WIN_WIDTH(mi) || cy >= MI_WIN_HEIGHT(mi))
+ track_p = False;
+ }
+ if (track_p) {
+ jp->cr = ((double) (cx + 2 - jp->centerx)) * 2 / jp->centerx;
+ jp->ci = ((double) (cy + 2 - jp->centery)) * 2 / jp->centery;
+ } else {
+ jp->cr = 1.5 * (sin(M_PI * (jp->inc / 300.0)) *
+ sin(jp->inc * M_PI / 200.0));
+ jp->ci = 1.5 * (cos(M_PI * (jp->inc / 300.0)) *
+ cos(jp->inc * M_PI / 200.0));
+
+ jp->cr += 0.5 * cos(M_PI * jp->inc / 400.0);
+ jp->ci += 0.5 * sin(M_PI * jp->inc / 400.0);
+ }
+}
+
+void
+init_julia(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ juliastruct *jp;
+ XGCValues gcv;
+ int i;
+
+ if (julias == NULL) {
+ if ((julias = (juliastruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (juliastruct))) == NULL)
+ return;
+ }
+ jp = &julias[MI_SCREEN(mi)];
+
+#ifdef STANDALONE
+ mouse = get_boolean_resource("mouse", "Boolean");
+#endif /* !STANDALONE */
+
+ jp->centerx = MI_WIN_WIDTH(mi) / 2;
+ jp->centery = MI_WIN_HEIGHT(mi) / 2;
+
+ jp->depth = MI_BATCHCOUNT(mi);
+ if (jp->depth > 10)
+ jp->depth = 10;
+
+ if (mouse && !jp->cursor) {
+ Pixmap bit;
+ XColor black;
+
+ black.red = black.green = black.blue = 0;
+ black.flags = DoRed | DoGreen | DoBlue;
+ bit = XCreatePixmapFromBitmapData(display, window, "\000", 1, 1,
+ MI_WIN_BLACK_PIXEL(mi),
+ MI_WIN_BLACK_PIXEL(mi), 1);
+ jp->cursor = XCreatePixmapCursor(display, bit, bit, &black, &black,
+ 0, 0);
+ XFreePixmap(display, bit);
+ }
+ if (jp->pixmap != None &&
+ jp->circsize != (MIN(jp->centerx, jp->centery) / 60) * 2 + 1) {
+ XFreePixmap(display, jp->pixmap);
+ jp->pixmap = None;
+ }
+ if (jp->pixmap == None) {
+ GC fg_gc = None, bg_gc = None;
+
+ jp->circsize = (MIN(jp->centerx, jp->centery) / 96) * 2 + 1;
+ jp->pixmap = XCreatePixmap(display, window, jp->circsize, jp->circsize, 1);
+ gcv.foreground = 1;
+ fg_gc = XCreateGC(display, jp->pixmap, GCForeground, &gcv);
+ gcv.foreground = 0;
+ bg_gc = XCreateGC(display, jp->pixmap, GCForeground, &gcv);
+ XFillRectangle(display, jp->pixmap, bg_gc,
+ 0, 0, jp->circsize, jp->circsize);
+ if (jp->circsize < 2)
+ XDrawPoint(display, jp->pixmap, fg_gc, 0, 0);
+ else
+ XFillArc(display, jp->pixmap, fg_gc,
+ 0, 0, jp->circsize, jp->circsize, 0, 23040);
+ if (fg_gc != None)
+ XFreeGC(display, fg_gc);
+ if (bg_gc != None)
+ XFreeGC(display, bg_gc);
+ }
+ if (jp->circsize > 0)
+ XDefineCursor(display, window, jp->cursor);
+ else
+ XUndefineCursor(display, window);
+
+ if (!jp->stippledGC) {
+ gcv.foreground = MI_WIN_BLACK_PIXEL(mi);
+ gcv.background = MI_WIN_BLACK_PIXEL(mi);
+ if ((jp->stippledGC = XCreateGC(display, window,
+ GCForeground | GCBackground, &gcv)) == None)
+ return;
+ }
+ if (MI_NPIXELS(mi) > 2)
+ jp->pix = NRAND(MI_NPIXELS(mi));
+ jp->inc = ((LRAND() & 1) * 2 - 1) * NRAND(200);
+ jp->nbuffers = (MI_CYCLES(mi) + 1);
+ if (!jp->pointBuffer)
+ jp->pointBuffer = (XPoint **) calloc(jp->nbuffers, sizeof (XPoint *));
+ for (i = 0; i < jp->nbuffers; ++i)
+ if (jp->pointBuffer[i])
+ (void) memset((char *) jp->pointBuffer[i], 0,
+ numpoints * sizeof (XPoint));
+ else
+ jp->pointBuffer[i] = (XPoint *) calloc(numpoints, sizeof (XPoint));
+ jp->buffer = 0;
+ jp->redrawing = 0;
+ jp->erase = 0;
+ XClearWindow(display, window);
+}
+
+void
+draw_julia(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ juliastruct *jp = &julias[MI_SCREEN(mi)];
+ double r, theta;
+ register double xr = 0.0, xi = 0.0;
+ int k = 64, rnd = 0, i, j;
+ XPoint *xp = jp->pointBuffer[jp->buffer], old_circle, new_circle;
+
+ old_circle.x = (int) (jp->centerx * jp->cr / 2) + jp->centerx - 2;
+ old_circle.y = (int) (jp->centery * jp->ci / 2) + jp->centery - 2;
+ incr(mi, jp);
+ new_circle.x = (int) (jp->centerx * jp->cr / 2) + jp->centerx - 2;
+ new_circle.y = (int) (jp->centery * jp->ci / 2) + jp->centery - 2;
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ ERASE_IMAGE(display, window, gc, new_circle.x, new_circle.y,
+ old_circle.x, old_circle.y, jp->circsize, jp->circsize);
+ /* draw a circle at the c-parameter so you can see it's effect on the
+ structure of the julia set */
+ XSetTSOrigin(display, jp->stippledGC, new_circle.x, new_circle.y);
+ XSetForeground(display, jp->stippledGC, MI_WIN_WHITE_PIXEL(mi));
+ XSetStipple(display, jp->stippledGC, jp->pixmap);
+ XSetFillStyle(display, jp->stippledGC, FillOpaqueStippled);
+ XFillRectangle(display, window, jp->stippledGC, new_circle.x, new_circle.y,
+ jp->circsize, jp->circsize);
+ XFlush(display);
+ if (jp->erase == 1) {
+ XDrawPoints(display, window, gc,
+ jp->pointBuffer[jp->buffer], numpoints, CoordModeOrigin);
+ }
+ jp->inc++;
+ if (MI_NPIXELS(mi) > 2) {
+ XSetForeground(display, gc, MI_PIXEL(mi, jp->pix));
+ if (++jp->pix >= MI_NPIXELS(mi))
+ jp->pix = 0;
+ } else
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+ while (k--) {
+
+ /* save calls to LRAND by using bit shifts over and over on the same
+ int for 32 iterations, then get a new random int */
+ if (!(k % 32))
+ rnd = LRAND();
+
+ /* complex sqrt: x^0.5 = radius^0.5*(cos(theta/2) + i*sin(theta/2)) */
+
+ xi -= jp->ci;
+ xr -= jp->cr;
+
+ /* Avoid atan2: DOMAIN error message */
+ if (xi == 0.0 && xr == 0.0)
+ theta = 0.0;
+ else
+ theta = atan2(xi, xr) / 2.0;
+
+ /*r = pow(xi * xi + xr * xr, 0.25); */
+ r = sqrt(sqrt(xi * xi + xr * xr)); /* 3 times faster */
+
+ xr = r * cos(theta);
+ xi = r * sin(theta);
+
+ if ((rnd >> (k % 32)) & 0x1) {
+ xi = -xi;
+ xr = -xr;
+ }
+ xp->x = jp->centerx + (int) ((jp->centerx >> 1) * xr);
+ xp->y = jp->centery + (int) ((jp->centery >> 1) * xi);
+ xp++;
+ }
+
+ jp->itree = 0;
+ apply(jp, xr, xi, jp->depth);
+
+ XDrawPoints(display, window, gc,
+ jp->pointBuffer[jp->buffer], numpoints, CoordModeOrigin);
+
+ jp->buffer++;
+ if (jp->buffer > jp->nbuffers - 1) {
+ jp->buffer -= jp->nbuffers;
+ jp->erase = 1;
+ }
+ if (jp->redrawing) {
+ for (i = 0; i < REDRAWSTEP; i++) {
+ j = (jp->buffer - jp->redrawpos + jp->nbuffers) % jp->nbuffers;
+ XDrawPoints(display, window, gc,
+ jp->pointBuffer[j], numpoints, CoordModeOrigin);
+
+ if (++(jp->redrawpos) >= jp->nbuffers) {
+ jp->redrawing = 0;
+ break;
+ }
+ }
+ }
+}
+
+void
+release_julia(ModeInfo * mi)
+{
+ if (julias != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ Display *display = MI_DISPLAY(mi);
+ juliastruct *jp = &julias[screen];
+ int buffer;
+
+ if (jp->pointBuffer) {
+ for (buffer = 0; buffer < jp->nbuffers; buffer++)
+ if (jp->pointBuffer[buffer])
+ (void) free((void *) jp->pointBuffer[buffer]);
+ (void) free((void *) jp->pointBuffer);
+ }
+ if (jp->stippledGC != None)
+ XFreeGC(display, jp->stippledGC);
+ if (jp->pixmap != None)
+ XFreePixmap(display, jp->pixmap);
+ if (jp->cursor)
+ XFreeCursor(display, jp->cursor);
+ }
+ (void) free((void *) julias);
+ julias = NULL;
+ }
+}
+
+void
+refresh_julia(ModeInfo * mi)
+{
+ juliastruct *jp = &julias[MI_SCREEN(mi)];
+
+ jp->redrawing = 1;
+ jp->redrawpos = 0;
+}
--- /dev/null
+
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)kaleid.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * kaleid.c - kaleidoscope for xlock, the X Window System lockscreen.
+ *
+ * Based on a kaleidoscope algorithm from a PC-based program by:
+ * Judson D. McClendon (Compuserve: [74415,1003])
+ *
+ * KALEIDOSCOPE (X11 Version)
+ * By Nathan Meyers, nathanm@hp-pcd.hp.com.
+ *
+ * Modified by Laurent JULLIARD, laurentj@hpgnse2.grenoble.hp.com
+ * for LINUX 0.96 and X11 v1.0 shared library
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 23-Oct-94: Ported to xlock by David Bagley <bagleyd@bigfoot.com>
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Kaleid"
+#define HACK_INIT init_kaleid
+#define HACK_DRAW draw_kaleid
+#define DEF_DELAY 20000
+#define DEF_CYCLES 700
+#define DEF_NCOLORS 200
+#define SPREAD_COLORS
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt kaleid_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+#define INTRAND(min,max) (NRAND(((max+1)-(min)))+(min))
+
+typedef struct {
+ int x;
+ int y;
+} point;
+
+typedef struct {
+ int pix;
+ int cx, cy, m;
+ int ox, oy;
+ int x1, y1, x2, y2, xv1, yv1, xv2, yv2;
+ int xa, ya, xb, yb, xc, yc, xd, yd;
+ int width;
+ int height;
+ int itercount;
+} kaleidstruct;
+
+static kaleidstruct *kaleids = NULL;
+
+void
+init_kaleid(ModeInfo * mi)
+{
+ kaleidstruct *kp = &kaleids[MI_SCREEN(mi)];
+
+ if (kaleids == NULL) {
+ if ((kaleids = (kaleidstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (kaleidstruct))) == NULL)
+ return;
+ }
+ kp = &kaleids[MI_SCREEN(mi)];
+
+ kp->width = MI_WIN_WIDTH(mi);
+ kp->height = MI_WIN_HEIGHT(mi);
+ if (kp->width < 2)
+ kp->width = 2;
+ if (kp->height < 2)
+ kp->height = 2;
+ if (MI_NPIXELS(mi) > 2)
+ kp->pix = NRAND(MI_NPIXELS(mi));
+ kp->cx = kp->width / 2;
+ kp->cy = kp->height / 2;
+ kp->m = (kp->cx > kp->cy) ? kp->cx : kp->cy;
+ kp->m = kp->m ? kp->m : 1;
+ kp->x1 = NRAND(kp->m) + 1;
+ kp->x2 = NRAND(kp->m) + 1;
+ kp->y1 = NRAND(kp->x1) + 1;
+ kp->y2 = NRAND(kp->x2) + 1;
+ kp->xv1 = NRAND(7) - 3;
+ kp->xv2 = NRAND(7) - 3;
+ kp->yv1 = NRAND(7) - 3;
+ kp->yv2 = NRAND(7) - 3;
+ kp->itercount = 0;
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+}
+
+void
+draw_kaleid(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ kaleidstruct *kp = &kaleids[MI_SCREEN(mi)];
+ XSegment segs[8];
+
+ if (!(NRAND(50))) {
+ kp->x1 = NRAND(kp->m) + 1;
+ kp->x2 = NRAND(kp->m) + 1;
+ kp->y1 = NRAND(kp->x1);
+ kp->y2 = NRAND(kp->x2);
+ }
+ if (!(NRAND(10))) {
+ kp->xv1 = NRAND(7) - 3;
+ kp->xv2 = NRAND(7) - 3;
+ kp->yv1 = NRAND(7) - 3;
+ kp->yv2 = NRAND(7) - 3;
+ if (MI_NPIXELS(mi) > 2) {
+ XSetForeground(display, gc, MI_PIXEL(mi, kp->pix));
+ if (++kp->pix >= MI_NPIXELS(mi))
+ kp->pix = 0;
+ }
+ }
+ if (kp->cx < kp->cy) {
+ kp->xa = kp->x1 * kp->cx / kp->cy;
+ kp->ya = kp->y1 * kp->cx / kp->cy;
+ kp->xb = kp->x1;
+ kp->yb = kp->y1;
+ kp->xc = kp->x2 * kp->cx / kp->cy;
+ kp->yc = kp->y2 * kp->cx / kp->cy;
+ kp->xd = kp->x2;
+ kp->yd = kp->y2;
+ } else {
+ kp->xa = kp->x1;
+ kp->ya = kp->y1;
+ kp->xb = kp->x1 * kp->cy / kp->cx;
+ kp->yb = kp->y1 * kp->cy / kp->cx;
+ kp->xc = kp->x2;
+ kp->yc = kp->y2;
+ kp->xd = kp->x2 * kp->cy / kp->cx;
+ kp->yd = kp->y2 * kp->cy / kp->cx;
+ }
+ segs[0].x1 = kp->cx + kp->xa + kp->ox;
+ segs[0].y1 = kp->cy - kp->yb + kp->oy;
+ segs[0].x2 = kp->cx + kp->xc + kp->ox;
+ segs[0].y2 = kp->cy - kp->yd + kp->oy;
+ segs[1].x1 = kp->cx - kp->ya + kp->ox;
+ segs[1].y1 = kp->cy + kp->xb + kp->oy;
+ segs[1].x2 = kp->cx - kp->yc + kp->ox;
+ segs[1].y2 = kp->cy + kp->xd + kp->oy;
+ segs[2].x1 = kp->cx - kp->xa + kp->ox;
+ segs[2].y1 = kp->cy - kp->yb + kp->oy;
+ segs[2].x2 = kp->cx - kp->xc + kp->ox;
+ segs[2].y2 = kp->cy - kp->yd + kp->oy;
+ segs[3].x1 = kp->cx - kp->ya + kp->ox;
+ segs[3].y1 = kp->cy - kp->xb + kp->oy;
+ segs[3].x2 = kp->cx - kp->yc + kp->ox;
+ segs[3].y2 = kp->cy - kp->xd + kp->oy;
+ segs[4].x1 = kp->cx - kp->xa + kp->ox;
+ segs[4].y1 = kp->cy + kp->yb + kp->oy;
+ segs[4].x2 = kp->cx - kp->xc + kp->ox;
+ segs[4].y2 = kp->cy + kp->yd + kp->oy;
+ segs[5].x1 = kp->cx + kp->ya + kp->ox;
+ segs[5].y1 = kp->cy - kp->xb + kp->oy;
+ segs[5].x2 = kp->cx + kp->yc + kp->ox;
+ segs[5].y2 = kp->cy - kp->xd + kp->oy;
+ segs[6].x1 = kp->cx + kp->xa + kp->ox;
+ segs[6].y1 = kp->cy + kp->yb + kp->oy;
+ segs[6].x2 = kp->cx + kp->xc + kp->ox;
+ segs[6].y2 = kp->cy + kp->yd + kp->oy;
+ segs[7].x1 = kp->cx + kp->ya + kp->ox;
+ segs[7].y1 = kp->cy + kp->xb + kp->oy;
+ segs[7].x2 = kp->cx + kp->yc + kp->ox;
+ segs[7].y2 = kp->cy + kp->xd + kp->oy;
+ XDrawSegments(display, MI_WINDOW(mi), gc, segs, 8);
+ kp->x1 = (kp->x1 + kp->xv1) % kp->m;
+ kp->y1 = (kp->y1 + kp->yv1) % kp->m;
+ kp->x2 = (kp->x2 + kp->xv2) % kp->m;
+ kp->y2 = (kp->y2 + kp->yv2) % kp->m;
+ kp->itercount++;
+
+ if (kp->itercount > MI_CYCLES(mi)) {
+ XClearWindow(display, MI_WINDOW(mi));
+ kp->itercount = 0;
+ }
+ if (MI_NPIXELS(mi) > 2) {
+ XSetForeground(display, gc, MI_PIXEL(mi, kp->pix));
+ if (++kp->pix >= MI_NPIXELS(mi))
+ kp->pix = 0;
+ } else
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+}
+
+void
+release_kaleid(ModeInfo * mi)
+{
+ if (kaleids != NULL) {
+ (void) free((void *) kaleids);
+ kaleids = NULL;
+ }
+}
+
+void
+refresh_kaleid(ModeInfo * mi)
+{
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+}
--- /dev/null
+
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)laser.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * laser.c - laser for xlockmore
+ *
+ * Copyright (c) 1995 Pascal Pensa <pensa@aurora.unice.fr>
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Laser"
+#define HACK_INIT init_laser
+#define HACK_DRAW draw_laser
+#define DEF_DELAY 20000
+#define DEF_BATCHCOUNT -10
+#define DEF_CYCLES 200
+#define SMOOTH_COLORS
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt laser_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+#define MINREDRAW 3 /* Number of redrawn on each frame */
+#define MAXREDRAW 8
+
+#define MINLASER 1 /* Laser number */
+
+#define MINWIDTH 2 /* Laser ray width range */
+#define MAXWIDTH 40
+
+#define MINSPEED 2 /* Speed range */
+#define MAXSPEED 17
+
+#define MINDIST 10 /* Minimal distance from edges */
+
+#define COLORSTEP 2 /* Laser color step */
+
+#define RANGE_RAND(min,max) ((min) + LRAND() % ((max) - (min)))
+
+typedef enum {
+ TOP, RIGHT, BOTTOM, LEFT
+} border;
+
+typedef struct {
+ int bx; /* border x */
+ int by; /* border y */
+ border bn; /* active border */
+ int dir; /* direction */
+ int speed; /* laser velocity from MINSPEED to MAXSPEED */
+ int sx[MAXWIDTH]; /* x stack */
+ int sy[MAXWIDTH]; /* x stack */
+ XGCValues gcv; /* for color */
+} laserstruct;
+
+typedef struct {
+ int width;
+ int height;
+ int cx; /* center x */
+ int cy; /* center y */
+ int lw; /* laser width */
+ int ln; /* laser number */
+ int lr; /* laser redraw */
+ int sw; /* stack width */
+ int so; /* stack offset */
+ int time; /* up time */
+ GC stippledGC;
+ XGCValues gcv_black; /* for black color */
+ laserstruct *laser;
+} lasersstruct;
+
+static lasersstruct *lasers = NULL;
+
+
+void
+init_laser(ModeInfo * mi)
+{
+ int i, c = 0;
+ lasersstruct *lp;
+
+ if (lasers == NULL) {
+ if ((lasers = (lasersstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (lasersstruct))) == NULL)
+ return;
+ }
+ lp = &lasers[MI_SCREEN(mi)];
+
+ lp->width = MI_WIN_WIDTH(mi);
+ lp->height = MI_WIN_HEIGHT(mi);
+ lp->time = 0;
+
+ lp->ln = MI_BATCHCOUNT(mi);
+ if (lp->ln < -MINLASER) {
+ /* if lp->ln is random ... the size can change */
+ if (lp->laser != NULL) {
+ (void) free((void *) lp->laser);
+ lp->laser = NULL;
+ }
+ lp->ln = NRAND(-lp->ln - MINLASER + 1) + MINLASER;
+ } else if (lp->ln < MINLASER)
+ lp->ln = MINLASER;
+
+ if (!lp->laser) {
+ lp->laser = (laserstruct *) malloc(lp->ln * sizeof (laserstruct));
+ }
+ if (lp->stippledGC == NULL) {
+ XGCValues gcv;
+
+ gcv.foreground = MI_WIN_WHITE_PIXEL(mi);
+ gcv.background = MI_WIN_BLACK_PIXEL(mi);
+ lp->gcv_black.foreground = MI_WIN_BLACK_PIXEL(mi);
+ lp->stippledGC = XCreateGC(MI_DISPLAY(mi), MI_WINDOW(mi),
+ GCForeground | GCBackground, &gcv);
+ }
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+
+ if (MINDIST < lp->width - MINDIST)
+ lp->cx = RANGE_RAND(MINDIST, lp->width - MINDIST);
+ else
+ lp->cx = RANGE_RAND(0, lp->width);
+ if (MINDIST < lp->height - MINDIST)
+ lp->cy = RANGE_RAND(MINDIST, lp->height - MINDIST);
+ else
+ lp->cy = RANGE_RAND(0, lp->height);
+ lp->lw = RANGE_RAND(MINWIDTH, MAXWIDTH);
+ lp->lr = RANGE_RAND(MINREDRAW, MAXREDRAW);
+ lp->sw = 0;
+ lp->so = 0;
+
+ if (MI_NPIXELS(mi) > 2)
+ c = NRAND(MI_NPIXELS(mi));
+
+ for (i = 0; i < lp->ln; i++) {
+ laserstruct *l = &lp->laser[i];
+
+ l->bn = (border) NRAND(4);
+
+ switch (l->bn) {
+ case TOP:
+ l->bx = NRAND(lp->width);
+ l->by = 0;
+ break;
+ case RIGHT:
+ l->bx = lp->width;
+ l->by = NRAND(lp->height);
+ break;
+ case BOTTOM:
+ l->bx = NRAND(lp->width);
+ l->by = lp->height;
+ break;
+ case LEFT:
+ l->bx = 0;
+ l->by = NRAND(lp->height);
+ }
+
+ l->dir = LRAND() & 1;
+ l->speed = ((RANGE_RAND(MINSPEED, MAXSPEED) * lp->width) / 1000) + 1;
+ if (MI_NPIXELS(mi) > 2) {
+ l->gcv.foreground = MI_PIXEL(mi, c);
+ c = (c + COLORSTEP) % MI_NPIXELS(mi);
+ } else
+ l->gcv.foreground = MI_WIN_WHITE_PIXEL(mi);
+ }
+}
+
+static void
+draw_laser_once(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ lasersstruct *lp = &lasers[MI_SCREEN(mi)];
+ int i;
+
+ for (i = 0; i < lp->ln; i++) {
+ laserstruct *l = &lp->laser[i];
+
+ if (lp->sw >= lp->lw) {
+ XChangeGC(display, lp->stippledGC, GCForeground, &(lp->gcv_black));
+ XDrawLine(display, MI_WINDOW(mi), lp->stippledGC,
+ lp->cx, lp->cy,
+ l->sx[lp->so], l->sy[lp->so]);
+ }
+ if (l->dir) {
+ switch (l->bn) {
+ case TOP:
+ l->bx -= l->speed;
+ if (l->bx < 0) {
+ l->by = -l->bx;
+ l->bx = 0;
+ l->bn = LEFT;
+ }
+ break;
+ case RIGHT:
+ l->by -= l->speed;
+ if (l->by < 0) {
+ l->bx = lp->width + l->by;
+ l->by = 0;
+ l->bn = TOP;
+ }
+ break;
+ case BOTTOM:
+ l->bx += l->speed;
+ if (l->bx >= lp->width) {
+ l->by = lp->height - l->bx % lp->width;
+ l->bx = lp->width;
+ l->bn = RIGHT;
+ }
+ break;
+ case LEFT:
+ l->by += l->speed;
+ if (l->by >= lp->height) {
+ l->bx = l->by % lp->height;
+ l->by = lp->height;
+ l->bn = BOTTOM;
+ }
+ }
+ } else {
+ switch (l->bn) {
+ case TOP:
+ l->bx += l->speed;
+ if (l->bx >= lp->width) {
+ l->by = l->bx % lp->width;
+ l->bx = lp->width;
+ l->bn = RIGHT;
+ }
+ break;
+ case RIGHT:
+ l->by += l->speed;
+ if (l->by >= lp->height) {
+ l->bx = lp->width - l->by % lp->height;
+ l->by = lp->height;
+ l->bn = BOTTOM;
+ }
+ break;
+ case BOTTOM:
+ l->bx -= l->speed;
+ if (l->bx < 0) {
+ l->by = lp->height + l->bx;
+ l->bx = 0;
+ l->bn = LEFT;
+ }
+ break;
+ case LEFT:
+ l->by -= l->speed;
+ if (l->by < 0) {
+ l->bx = -l->bx;
+ l->by = 0;
+ l->bn = TOP;
+ }
+ }
+ }
+
+ XChangeGC(display, lp->stippledGC, GCForeground, &l->gcv);
+ XDrawLine(display, MI_WINDOW(mi), lp->stippledGC,
+ lp->cx, lp->cy, l->bx, l->by);
+
+ l->sx[lp->so] = l->bx;
+ l->sy[lp->so] = l->by;
+
+ }
+
+ if (lp->sw < lp->lw)
+ ++lp->sw;
+
+ lp->so = (lp->so + 1) % lp->lw;
+}
+
+void
+draw_laser(ModeInfo * mi)
+{
+ lasersstruct *lp = &lasers[MI_SCREEN(mi)];
+ int i;
+
+ for (i = 0; i < lp->lr; i++)
+ draw_laser_once(mi);
+
+ if (++lp->time > MI_CYCLES(mi))
+ init_laser(mi);
+}
+
+void
+release_laser(ModeInfo * mi)
+{
+ if (lasers != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ lasersstruct *lp = &lasers[screen];
+
+ if (lp->laser != NULL)
+ (void) free((void *) lp->laser);
+ if (lp->stippledGC != NULL)
+ XFreeGC(MI_DISPLAY(mi), lp->stippledGC);
+ }
+ (void) free((void *) lasers);
+ lasers = NULL;
+ }
+}
+
+void
+refresh_laser(ModeInfo * mi)
+{
+ /* Do nothing, it will refresh by itself */
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)life.c 4.03 97/06/10 xlockmore";
+
+#endif
+
+/*-
+ * life.c - Conway's game of Life for xlock, the X Window System lockscreen.
+ * the X Window System lockscreen.
+ *
+ * Copyright (c) 1991 by Patrick J. Naughton.
+ * Copyright (c) 1997 by David Bagley.
+ *
+ * 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.
+ *
+ * Revision History:
+ * 04-Jun-97: Removed old algorithm, now use wator's. I could not
+ * understand and had trouble adding more features.
+ * New algorithm is more efficient iff there lots of blank areas
+ * 10-May-97: Compatible with xscreensaver
+ * 07-May-97: life neighbor option. Still have to fix -neighbor 3
+ * 07-Jan-95: life now has a random soup pattern.
+ * 07-Dec-94: life now has new organisms. They are now better centered.
+ * Some of the nonperiodic forms were removed. New life forms
+ * were taken from xlife (an AMAZING collection of life forms).
+ * life's gliders now come from the edge of the screen except
+ * when generated by a life form.
+ * 23-Nov-94: Bug fix for different iconified window sizes
+ * 21-Jul-94: Took out bzero & bcopy since memset & memcpy is more portable
+ * 10-Jun-94: Changed name of function 'kill', which is a libc function on
+ * many systems from Victor Langeveld <vic@mbfys.kun.nl>
+ * Changes in original xlock
+ * 24-May-91: Added wraparound code from johnson@bugs.comm.mot.com.
+ * Made old cells stay blue.
+ * Made batchcount control the number of generations until restart.
+ * 29-Jul-90: support for multiple screens.
+ * 07-Feb-90: remove bogus semi-colon after #include line.
+ * 15-Dec-89: Fix for proper skipping of {White,Black}Pixel() in colors.
+ * 08-Oct-89: Moved seconds() to an extern.
+ * 20-Sep-89: Written, life algorithm courtesy of Jim Graham <flar@sun.com>
+ */
+
+/*-
+ Grid Number of Neigbors
+ ---- ------------------
+ Square 4 or 8
+ Hexagon 6
+ Triangle 3, 9, or 12
+
+ Conway's Life: -neighbors 8 -rule 2333
+ Other things to try:
+ -neighbors 4 -rule 2422
+ -neighbors 6 -rule 2333 -size 16
+ -neighbors 3 -rule 1223 -size 16
+*/
+
+#ifdef STANDALONE
+#define PROGCLASS "Life"
+#define HACK_INIT init_life
+#define HACK_DRAW draw_life
+#define DEF_DELAY 750000
+#define DEF_BATCHCOUNT 40
+#define DEF_CYCLES 140
+#define DEF_SIZE 0
+#define DEF_NCOLORS 200
+#define SPREAD_COLORS
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+
+#endif /* STANDALONE */
+
+/* aliases for vars defined in the bitmap file */
+#define CELL_WIDTH image_width
+#define CELL_HEIGHT image_height
+#define CELL_BITS image_bits
+
+#include "life.xbm"
+
+#define DEF_RULE "2333"
+
+extern int neighbors;
+static int local_neighbors = 0;
+static int rule;
+
+#ifndef STANDALONE
+static XrmOptionDescRec opts[] =
+{
+ {"-rule", ".life.rule", XrmoptionSepArg, (caddr_t) NULL},
+};
+static argtype vars[] =
+{
+ {(caddr_t *) & rule, "rule", "Rule", DEF_RULE, t_Int}
+};
+static OptionStruct desc[] =
+{
+ {"-rule num", "<living_min><living_max><birth_min><birth_max> parameters"}
+};
+
+ModeSpecOpt life_opts =
+{1, opts, 1, vars, desc};
+
+#endif /* STANDALONE */
+
+
+#define REDRAWSTEP 2000 /* How many cells to draw per cycle */
+#define MINGRIDSIZE 20
+#define MINSIZE 4
+#define NEIGHBORKINDS 6
+#define DEAD 0
+#define LIVE 1
+#define STATES 2
+
+typedef struct {
+ long position;
+ unsigned short age;
+ unsigned char state;
+ unsigned char toggle;
+} cellstruct;
+
+/* Singly linked list */
+typedef struct _CellList {
+ cellstruct info;
+ struct _CellList *previous, *next;
+} CellList;
+
+typedef struct {
+ int pattern;
+ int pixelmode;
+ int generation;
+ int xs, ys, xb, yb; /* cell size, grid border */
+ int nrows, ncols, npositions;
+ int width, height;
+ int state;
+ int redrawing, redrawpos;
+ int ncells[STATES];
+ CellList *last[STATES], *first[STATES];
+ CellList **arr;
+ XPoint hexagonList[6];
+ XPoint triangleList[2][3];
+} lifestruct;
+
+static int initVal[NEIGHBORKINDS] =
+{
+ 3, 4, 6, 8, 9, 12 /* Neighborhoods */
+};
+
+static XImage *logo = NULL;
+static int graphics_format = -1;
+
+static unsigned char living_min, living_max, birth_min, birth_max;
+
+static lifestruct *lifes = NULL;
+
+#define NUMPTS 63
+
+/*-
+ * Patterns have < NUMPTS pts (and should have a size of <= 32x32,
+ * the Glider Gun is an exception)
+ */
+static char patterns_2333[][2 * NUMPTS + 1] =
+{
+ { /* GLIDER GUN */
+ 6, -4,
+ 5, -3, 6, -3,
+ -6, -2, -5, -2, 8, -2, 9, -2, 16, -2,
+ -7, -1, 8, -1, 9, -1, 10, -1, 16, -1, 17, -1,
+ -18, 0, -17, 0, -8, 0, 8, 0, 9, 1,
+ -17, 1, -8, 1, 5, 1, 6, 1,
+ -8, 2, 6, 2,
+ -7, 3,
+ -6, 4, -5, 4,
+ 127
+ },
+ { /* SHOWER TUB (PART OF OSCILATORS) */
+ -3, -6, -2, -6, 2, -6, 3, -6,
+ -4, -5, -2, -5, 2, -5, 4, -5,
+ -4, -4, 4, -4,
+ -7, -3, -6, -3, -4, -3, -3, -3, 3, -3, 4, -3, 6, -3, 7, -3,
+ -7, -2, -6, -2, -4, -2, 0, -2, 4, -2, 6, -2, 7, -2,
+ -4, -1, -2, -1, 2, -1, 4, -1,
+ -4, 0, -2, 0, 2, 0, 4, 0,
+ -5, 1, -4, 1, -2, 1, 2, 1, 4, 1, 5, 1,
+ -4, 2, -1, 2, 0, 2, 1, 2, 4, 2,
+ -4, 3, 4, 3, 6, 3,
+ -3, 4, -2, 4, -1, 4, 5, 4, 6, 4,
+ -1, 5,
+ 127
+ },
+ { /* P4 LARGE TOASTER */
+ -5, -3, -4, -3, -2, -3, 2, -3, 4, -3, 5, -3,
+ -5, -2, 5, -2,
+ -4, -1, -3, -1, 3, -1, 4, -1,
+ -7, 0, -6, 0, -5, 0, -2, 0, -1, 0, 0, 0, 1, 0, 2, 0, 5, 0, 6, 0, 7, 0,
+ -7, 1, -4, 1, 4, 1, 7, 1,
+ -6, 2, -5, 2, 5, 2, 6, 2,
+ 127
+ },
+ { /* STARGATE REPEATER P3 */
+ 0, -6,
+ -1, -5, 1, -5,
+ -2, -4, 0, -4, 2, -4,
+ -2, -3, 2, -3,
+ -4, -2, -3, -2, 0, -2, 3, -2, 4, -2,
+ -5, -1, 0, -1, 5, -1,
+ -6, 0, -4, 0, -2, 0, -1, 0, 1, 0, 2, 0, 4, 0, 6, 0,
+ -5, 1, 0, 1, 5, 1,
+ -4, 2, -3, 2, 0, 2, 3, 2, 4, 2,
+ -2, 3, 2, 3,
+ -2, 4, 0, 4, 2, 4,
+ -1, 5, 1, 5,
+ 0, 6,
+ 127
+ },
+ { /* OSCILLATOR 7 (P8) */
+ -4, -2, -3, -2, -2, -2, -1, -2, 4, -2, 5, -2, 6, -2, 7, -2,
+ -9, -1, -8, -1, 0, -1, 8, -1,
+ -9, 0, -8, 0, -5, 0, -4, 0, 0, 0, 3, 0, 4, 0, 8, 0,
+ -5, 1, -4, 1, -1, 1, 3, 1, 4, 1, 7, 1,
+ 127
+ },
+ { /* P144 */
+ -14, -9, -13, -9, 12, -9, 13, -9,
+ -14, -8, -13, -8, 12, -8, 13, -8,
+ 4, -7, 5, -7,
+ 3, -6, 6, -6,
+ 4, -5, 5, -5,
+ -1, -3, 0, -3, 1, -3,
+ -1, -2, 1, -2,
+ -1, -1, 0, -1, 1, -1,
+ -1, 0, 0, 0,
+ -2, 1, -1, 1, 0, 1,
+ -2, 2, 0, 2,
+ -2, 3, -1, 3, 0, 3,
+ -6, 5, -5, 5,
+ -7, 6, -4, 6,
+ -6, 7, -5, 7,
+ -14, 8, -13, 8, 12, 8, 13, 8,
+ -14, 9, -13, 9, 12, 9, 13, 9,
+ 127
+ },
+ { /* FIGURE EIGHT */
+ -3, -3, -2, -3, -1, -3,
+ -3, -2, -2, -2, -1, -2,
+ -3, -1, -2, -1, -1, -1,
+ 0, 0, 1, 0, 2, 0,
+ 0, 1, 1, 1, 2, 1,
+ 0, 2, 1, 2, 2, 2,
+ 127
+ },
+ { /* PULSAR 18-22-20 */
+ 0, -4, 1, -4, 2, -4,
+ -1, -2, 4, -2,
+ -2, -1, 0, -1, 4, -1,
+ -4, 0, -3, 0, -2, 0, 1, 0, 4, 0,
+ 2, 1,
+ 0, 2, 1, 2,
+ 0, 3,
+ 0, 4,
+ 127
+ },
+ { /* PULSAR 48-56-72 */
+ -2, -1, -1, -1, 0, -1, 1, -1, 2, -1,
+ -2, 0, 2, 0,
+ 127
+ },
+ { /* BARBER POLE P2 */
+ -6, -6, -5, -6,
+ -6, -5, -4, -5,
+ -4, -3, -2, -3,
+ -2, -1, 0, -1,
+ 0, 1, 2, 1,
+ 2, 3, 4, 3,
+ 5, 4,
+ 4, 5, 5, 5,
+ 127
+ },
+ { /* ACHIM P5 */
+ -6, -6, -5, -6,
+ -6, -5,
+ -4, -4,
+ -4, -3, -2, -3,
+ -2, -1, 0, -1,
+ 0, 1, 2, 1,
+ 2, 3, 3, 3,
+ 5, 4,
+ 4, 5, 5, 5,
+ 127
+ },
+ { /* HERTZ P4 */
+ -2, -5, -1, -5,
+ -2, -4, -1, -4,
+ -7, -2, -6, -2, -2, -2, -1, -2, 0, -2, 1, -2, 5, -2, 6, -2,
+ -7, -1, -5, -1, -3, -1, 2, -1, 4, -1, 6, -1,
+ -5, 0, -3, 0, -2, 0, 2, 0, 4, 0,
+ -6, 1, -5, 1, -3, 1, 2, 1, 4, 1, 5, 1,
+ -2, 2, -1, 2, 0, 2, 1, 2,
+ -2, 4, -1, 4,
+ -2, 5, -1, 5,
+ 127
+ },
+ { /* PUMP (TUMBLER, P14) */
+ -2, -3, -1, -3, 1, -3, 2, -3,
+ -2, -2, -1, -2, 1, -2, 2, -2,
+ -1, -1, 1, -1,
+ -3, 0, -1, 0, 1, 0, 3, 0,
+ -3, 1, -1, 1, 1, 1, 3, 1,
+ -3, 2, -2, 2, 2, 2, 3, 2,
+ 127
+ },
+ { /* SMILEY (P8) */
+ -3, -3, -2, -3, -1, -3, 1, -3, 2, -3, 3, -3,
+ -2, -2, 0, -2, 2, -2,
+ -2, 0, 2, 0,
+ -3, 2, -1, 2, 1, 2, 3, 2,
+ -1, 3, 1, 3,
+ 127
+ },
+ { /* PULSE1 P4 */
+ 0, -3, 1, -3,
+ -2, -2, 0, -2,
+ -3, -1, 3, -1,
+ -2, 0, 2, 0, 3, 0,
+ 0, 2, 2, 2,
+ 1, 3,
+ 127
+ },
+ { /* SHINING FLOWER P5 */
+ -1, -4, 0, -4,
+ -2, -3, 1, -3,
+ -3, -2, 2, -2,
+ -4, -1, 3, -1,
+ -4, 0, 3, 0,
+ -3, 1, 2, 1,
+ -2, 2, 1, 2,
+ -1, 3, 0, 3,
+ 127
+ },
+ { /* PULSE2 P6 */
+ 0, -4, 1, -4,
+ -4, -3, -3, -3, -1, -3,
+ -4, -2, -3, -2, 0, -2, 3, -2,
+ 1, -1, 3, -1,
+ 2, 0,
+ 1, 2, 2, 2,
+ 1, 3, 2, 3,
+ 127
+ },
+ { /* PINWHEEL P4 */
+ -2, -6, -1, -6,
+ -2, -5, -1, -5,
+ -2, -3, -1, -3, 0, -3, 1, -3,
+ -3, -2, -1, -2, 2, -2, 4, -2, 5, -2,
+ -3, -1, 1, -1, 2, -1, 4, -1, 5, -1,
+ -6, 0, -5, 0, -3, 0, 0, 0, 2, 0,
+ -6, 1, -5, 1, -3, 1, 2, 1,
+ -2, 2, -1, 2, 0, 2, 1, 2,
+ 0, 4, 1, 4,
+ 0, 5, 1, 5,
+ 127
+ },
+ { /* CLOCK P4 */
+ -2, -6, -1, -6,
+ -2, -5, -1, -5,
+ -2, -3, -1, -3, 0, -3, 1, -3,
+ -6, -2, -5, -2, -3, -2, 0, -2, 2, -2,
+ -6, -1, -5, -1, -3, -1, -1, -1, 2, -1,
+ -3, 0, -1, 0, 2, 0, 4, 0, 5, 0,
+ -3, 1, 2, 1, 4, 1, 5, 1,
+ -2, 2, -1, 2, 0, 2, 1, 2,
+ 0, 4, 1, 4,
+ 0, 5, 1, 5,
+ 127
+ },
+ { /* CROSS P3 */
+ -2, -4, -1, -4, 0, -4, 1, -4,
+ -2, -3, 1, -3,
+ -4, -2, -3, -2, -2, -2, 1, -2, 2, -2, 3, -2,
+ -4, -1, 3, -1,
+ -4, 0, 3, 0,
+ -4, 1, -3, 1, -2, 1, 1, 1, 2, 1, 3, 1,
+ -2, 2, 1, 2,
+ -2, 3, -1, 3, 0, 3, 1, 3,
+ 127
+ },
+ { /* BIG CROSS P3 */
+ 0, -5,
+ -1, -4, 0, -4, 1, -4,
+ -3, -3, -2, -3, -1, -3, 1, -3, 2, -3, 3, -3,
+ -3, -2, 3, -2,
+ -4, -1, -3, -1, 3, -1, 4, -1,
+ -5, 0, -4, 0, 4, 0, 5, 0,
+ -4, 1, -3, 1, 3, 1, 4, 1,
+ -3, 2, 3, 2,
+ -3, 3, -2, 3, -1, 3, 1, 3, 2, 3, 3, 3,
+ -1, 4, 0, 4, 1, 4,
+ 0, 5,
+ 127
+ },
+ { /* P4 DIAG SYM */
+ -2, -4, 0, -4,
+ -2, -3, 0, -3, 2, -3, 3, -3,
+ -4, -2, -3, -2, 2, -2,
+ 0, -1, 1, -1, 2, -1,
+ -4, 0, -3, 0, -1, 0, 2, 0,
+ -1, 1, 2, 1,
+ -3, 2, -2, 2, -1, 2, 0, 2, 1, 2,
+ -3, 3,
+ 127
+ },
+ { /* P4 ASYM */
+ -4, -4, -2, -4,
+ -4, -3, -1, -3,
+ -1, -2,
+ -2, -1, -1, -1, 0, -1, 3, -1, 4, -1, 5, -1,
+ -5, 0, -4, 0, -3, 0, 0, 0, 1, 0, 2, 0,
+ 1, 1,
+ 1, 2, 4, 2,
+ 2, 3, 4, 3,
+ 127
+ },
+ { /* P4 ASYM 2 */
+ -3, -3, -1, -3, 2, -3, 4, -3, 5, -3, 6, -3,
+ -4, -2, -1, -2, 1, -2, 3, -2, 5, -2,
+ -4, -1,
+ 3, 0,
+ -6, 1, -4, 1, -2, 1, 0, 1, 3, 1,
+ -7, 2, -6, 2, -5, 2, -3, 2, 0, 2, 2, 2,
+ 127
+ },
+ { /* P8 ASYM */
+ -3, -4, -2, -4,
+ -4, -3,
+ -3, -2, 1, -2,
+ -3, -1, 1, -1, 2, -1,
+ -1, 0, 1, 0,
+ -2, 1, -1, 1, 3, 1,
+ -1, 2, 3, 2,
+ 4, 3,
+ 2, 4, 3, 4,
+ 127
+ },
+ { /* P4 SYM */
+ -6, -2, -5, -2, 4, -2, 5, -2,
+ -6, -1, -5, -1, -3, -1, -2, -1, 1, -1, 2, -1, 4, -1, 5, -1,
+ -5, 0, -2, 0, 1, 0, 4, 0,
+ -5, 1, -4, 1, -2, 1, -1, 1, 0, 1, 1, 1, 3, 1, 4, 1,
+ 127
+ },
+ { /* QUESTION P3 NOSYM */
+ -2, -4, -1, -4, 0, -4,
+ 2, -3,
+ -3, -2, 2, -2,
+ 1, -1,
+ -2, 0, -1, 0,
+ -2, 1,
+ -2, 2,
+ -2, 3,
+ 127
+ },
+ { /* WHIRLY THING P12 */
+ -5, -6,
+ -5, -5, -4, -5, -3, -5, 5, -5, 6, -5,
+ -2, -4, 5, -4,
+ -3, -3, -2, -3, 3, -3, 5, -3,
+ 3, -2, 4, -2,
+ 0, -1, 1, -1,
+ 0, 0, 1, 0,
+ 0, 1, 1, 1,
+ -4, 2, -3, 2,
+ -5, 3, -3, 3, 2, 3, 3, 3,
+ -5, 4, 2, 4,
+ -6, 5, -5, 5, 3, 5, 4, 5, 5, 5,
+ 5, 6,
+ 127
+ },
+ { /* PENTADECATHOLON P15 */
+ -5, 0, -4, 0, -3, 0, -2, 0, -1, 0, 0, 0, 1, 0, 2, 0, 3, 0, 4, 0,
+ 127
+ },
+ { /* BALLOON P5 */
+ -1, -3, 0, -3,
+ -3, -2, 2, -2,
+ -3, -1, 2, -1,
+ -3, 0, 2, 0,
+ -2, 1, 1, 1,
+ -4, 2, -2, 2, 1, 2, 3, 2,
+ -4, 3, -3, 3, 2, 3, 3, 3,
+ 127
+ },
+ { /* FENCEPOST P12 */
+ -11, -3, -9, -3, -7, -3,
+ -11, -2, -9, -2, -7, -2, 5, -2, 6, -2, 7, -2, 9, -2, 10, -2, 11, -2,
+ -11, -1, -7, -1, -3, -1, 1, -1, 8, -1,
+ -10, 0, -8, 0, -3, 0, -2, 0, -1, 0, 1, 0, 5, 0, 6, 0, 10, 0, 11, 0,
+ -11, 1, -7, 1, -3, 1, 1, 1, 8, 1,
+ -11, 2, -9, 2, -7, 2, 5, 2, 6, 2, 7, 2, 9, 2, 10, 2, 11, 2,
+ -11, 3, -9, 3, -7, 3,
+ 127
+ },
+ { /* PISTON (SHUTTLE) P30 */
+ 1, -3, 2, -3,
+ 0, -2,
+ -10, -1, -1, -1,
+ -11, 0, -10, 0, -1, 0, 9, 0, 10, 0,
+ -1, 1, 9, 1,
+ 0, 2,
+ 1, 3, 2, 3,
+ 127
+ },
+ { /* P30 */
+ -8, -5, 7, -5,
+ -9, -4, -7, -4, 1, -4, 2, -4, 6, -4, 8, -4,
+ -8, -3, 0, -3, 1, -3, 2, -3, 7, -3,
+ 1, -2, 2, -2,
+ 1, 2, 2, 2,
+ -8, 3, 0, 3, 1, 3, 2, 3, 7, 3,
+ -9, 4, -7, 4, 1, 4, 2, 4, 6, 4, 8, 4,
+ -8, 5, 7, 5,
+ 127
+ },
+ { /* PISTON2 P46 */
+ -3, -5,
+ -14, -4, -13, -4, -4, -4, -3, -4, 13, -4, 14, -4,
+ -14, -3, -13, -3, -5, -3, -4, -3, 13, -3, 14, -3,
+ -4, -2, -3, -2, 0, -2, 1, -2,
+ -4, 2, -3, 2, 0, 2, 1, 2,
+ -14, 3, -13, 3, -5, 3, -4, 3, 13, 3, 14, 3,
+ -14, 4, -13, 4, -4, 4, -3, 4, 13, 4, 14, 4,
+ -3, 5,
+ 127
+ },
+ { /* GEARS (gear, flywheel, blinker) P2 */
+ -1, -4,
+ -1, -3, 1, -3,
+ -3, -2,
+ 2, -1, 3, -1,
+ -4, 0, -3, 0,
+ 2, 1,
+ -2, 2, 0, 2,
+ 0, 3,
+
+ 5, 3,
+ 3, 4, 4, 4,
+ 5, 5, 6, 5,
+ 4, 6,
+
+ 8, 0,
+ 8, 1,
+ 8, 2,
+ 127
+ },
+ { /* TURBINE8, KOK'S GALAXY */
+ -4, -4, -3, -4, -2, -4, -1, -4, 0, -4, 1, -4, 3, -4, 4, -4,
+ -4, -3, -3, -3, -2, -3, -1, -3, 0, -3, 1, -3, 3, -3, 4, -3,
+ 3, -2, 4, -2,
+ -4, -1, -3, -1, 3, -1, 4, -1,
+ -4, 0, -3, 0, 3, 0, 4, 0,
+ -4, 1, -3, 1, 3, 1, 4, 1,
+ -4, 2, -3, 2,
+ -4, 3, -3, 3, -1, 3, 0, 3, 1, 3, 2, 3, 3, 3, 4, 3,
+ -4, 4, -3, 4, -1, 4, 0, 4, 1, 4, 2, 4, 3, 4, 4, 4,
+ 127
+ },
+ { /* P16 */
+ -3, -6, 1, -6, 2, -6,
+ -3, -5, 0, -5, 3, -5,
+ 3, -4,
+ -5, -3, -4, -3, 1, -3, 2, -3, 5, -3, 6, -3,
+ -6, -2, -3, -2,
+ -6, -1, -3, -1,
+ -5, 0, 5, 0,
+ 3, 1, 6, 1,
+ 3, 2, 6, 2,
+ -6, 3, -5, 3, -2, 3, -1, 3, 4, 3, 5, 3,
+ -3, 4,
+ -3, 5, 0, 5, 3, 5,
+ -2, 6, -1, 6, 3, 6,
+ 127
+ },
+ { /* P28 (FLUTTER) */
+ -9, -7, -7, -7, 7, -7, 9, -7,
+ -6, -6, 6, -6,
+ -10, -5, -7, -5, 7, -5, 10, -5,
+ -11, -4, -9, -4, -7, -4, 7, -4, 9, -4, 11, -4,
+ -11, -3, -8, -3, 8, -3, 11, -3,
+ -10, -2, -9, -2, -4, -2, -3, -2, -2, -2,
+ 2, -2, 3, -2, 4, -2, 9, -2, 10, -2,
+ -3, -1, 3, -1,
+ -10, 1, -9, 1, 9, 1, 10, 1,
+ -11, 2, -8, 2, 8, 2, 11, 2,
+ -11, 3, -9, 3, -6, 3, 6, 3, 9, 3, 11, 3,
+ -10, 4, 10, 4,
+ -9, 5, -8, 5, -6, 5, 6, 5, 8, 5, 9, 5,
+ -7, 6, 7, 6,
+ 127
+ },
+ { /* P54 (PISTON3) */
+ -14, -8, -13, -8, 13, -8, 14, -8,
+ -13, -7, 13, -7,
+ -13, -6, -11, -6, 11, -6, 13, -6,
+ -12, -5, -11, -5, -1, -5, 11, -5, 12, -5,
+ 0, -4,
+ -6, -3, -5, -3, 1, -3,
+ -6, -2, -5, -2, -2, -2, 0, -2,
+ -1, -1,
+ -1, 1,
+ -6, 2, -5, 2, -2, 2, 0, 2,
+ -6, 3, -5, 3, 1, 3,
+ 0, 4,
+ -12, 5, -11, 5, -1, 5, 11, 5, 12, 5,
+ -13, 6, -11, 6, 11, 6, 13, 6,
+ -13, 7, 13, 7,
+ -14, 8, -13, 8, 13, 8, 14, 8,
+ 127
+ },
+ { /* SWITCH ENGINE */
+ -12, -3, -10, -3,
+ -13, -2,
+ -12, -1, -9, -1,
+ -10, 0, -9, 0, -8, 0,
+ 13, 2, 14, 2,
+ 13, 3,
+ 127
+ },
+ { /* PUFFER TRAIN */
+ 1, -9,
+ 2, -8,
+ -2, -7, 2, -7,
+ -1, -6, 0, -6, 1, -6, 2, -6,
+ -2, -2,
+ -1, -1, 0, -1,
+ 0, 0,
+ 0, 1,
+ -1, 2,
+ 1, 5,
+ 2, 6,
+ -2, 7, 2, 7,
+ -1, 8, 0, 8, 1, 8, 2, 8,
+ 127
+ },
+ { /* SCHOOL OF FISH (ESCORT) */
+ 3, -8,
+ 4, -7,
+ -2, -6, 4, -6,
+ -1, -5, 0, -5, 1, -5, 2, -5, 3, -5, 4, -5,
+ -5, -1, -4, -1, -3, -1, -2, -1, -1, -1, 0, -1,
+ 1, -1, 2, -1, 3, -1, 4, -1, 5, -1, 6, -1,
+ -6, 0, 6, 0,
+ 6, 1,
+ 5, 2,
+ 3, 4,
+ 4, 5,
+ -2, 6, 4, 6,
+ -1, 7, 0, 7, 1, 7, 2, 7, 3, 7, 4, 7,
+
+ 127
+ },
+ { /* DART SPEED 1/3 */
+ 3, -7,
+ 2, -6, 4, -6,
+ 1, -5, 2, -5,
+ 4, -4,
+ 0, -3, 4, -3,
+ -3, -2, 0, -2,
+ -4, -1, -2, -1, 1, -1, 2, -1, 3, -1, 4, -1,
+ -5, 0, -2, 0,
+ -4, 1, -2, 1, 1, 1, 2, 1, 3, 1, 4, 1,
+ -3, 2, 0, 2,
+ 0, 3, 4, 3,
+ 4, 4,
+ 1, 5, 2, 5,
+ 2, 6, 4, 6,
+ 3, 7,
+ 127
+ },
+ { /* PERIOD 4 SPEED 1/2 */
+ -3, -5,
+ -4, -4, -3, -4, -2, -4, -1, -4, 0, -4,
+ -5, -3, -4, -3, 0, -3, 1, -3, 3, -3,
+ -4, -2, 4, -2,
+ -3, -1, -2, -1, 1, -1, 3, -1,
+ -3, 1, -2, 1, 1, 1, 3, 1,
+ -4, 2, 4, 2,
+ -5, 3, -4, 3, 0, 3, 1, 3, 3, 3,
+ -4, 4, -3, 4, -2, 4, -1, 4, 0, 4,
+ -3, 5,
+ 127
+ },
+ { /* ANOTHER PERIOD 4 SPEED 1/2 */
+ -4, -7, -3, -7, -1, -7, 0, -7, 1, -7, 2, -7, 3, -7, 4, -7,
+ -5, -6, -4, -6, -3, -6, -2, -6, 5, -6,
+ -6, -5, -5, -5,
+ -5, -4, 5, -4,
+ -4, -3, -3, -3, -2, -3, 0, -3,
+ -2, -2,
+ -2, -1,
+ -1, 0,
+ -2, 1,
+ -2, 2,
+ -4, 3, -3, 3, -2, 3, 0, 3,
+ -5, 4, 5, 4,
+ -6, 5, -5, 5,
+ -5, 6, -4, 6, -3, 6, -2, 6, 5, 6,
+ -4, 7, -3, 7, -1, 7, 0, 7, 1, 7, 2, 7, 3, 7, 4, 7,
+ 127
+ },
+ { /* SMALLEST KNOWN PERIOD 3 SPACESHIP SPEED 1/3 */
+ 0, -8,
+ -1, -7, 1, -7,
+ -1, -6, 1, -6,
+ -1, -5,
+ -2, -3, -1, -3,
+ -1, -2, 1, -2,
+ -2, -1, 0, -1,
+ -2, 0, -1, 0, 0, 0,
+ -1, 2, 1, 2,
+ -1, 3, 0, 3,
+ 0, 4,
+ 0, 5, 2, 5,
+ 0, 6, 2, 6,
+ 1, 7,
+ 127
+ },
+ { /* TURTLE SPEED 1/3 */
+ -4, -5, -3, -5, -2, -5, 6, -5,
+ -4, -4, -3, -4, 0, -4, 2, -4, 3, -4, 5, -4, 6, -4,
+ -2, -3, -1, -3, 0, -3, 5, -3,
+ -4, -2, -1, -2, 1, -2, 5, -2,
+ -5, -1, 0, -1, 5, -1,
+ -5, 0, 0, 0, 5, 0,
+ -4, 1, -1, 1, 1, 1, 5, 1,
+ -2, 2, -1, 2, 0, 2, 5, 2,
+ -4, 3, -3, 3, 0, 3, 2, 3, 3, 3, 5, 3, 6, 3,
+ -4, 4, -3, 4, -2, 4, 6, 4,
+ 127
+ },
+ { /* SMALLEST KNOWN PERIOD 5 SPEED 2/5 */
+ 1, -7, 3, -7,
+ -2, -6, 3, -6,
+ -3, -5, -2, -5, -1, -5, 4, -5,
+ -4, -4, -2, -4,
+ -5, -3, -4, -3, -1, -3, 0, -3, 5, -3,
+ -4, -2, -3, -2, 0, -2, 1, -2, 2, -2, 3, -2, 4, -2,
+ -4, 2, -3, 2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2,
+ -5, 3, -4, 3, -1, 3, 0, 3, 5, 3,
+ -4, 4, -2, 4,
+ -3, 5, -2, 5, -1, 5, 4, 5,
+ -2, 6, 3, 6,
+ 1, 7, 3, 7,
+ 127
+ },
+ { /* SYM PUFFER */
+ 1, -4, 2, -4, 3, -4, 4, -4,
+ 0, -3, 4, -3,
+ 4, -2,
+ -4, -1, -3, -1, 0, -1, 3, -1,
+ -4, 0, -3, 0, -2, 0,
+ -4, 1, -3, 1, 0, 1, 3, 1,
+ 4, 2,
+ 0, 3, 4, 3,
+ 1, 4, 2, 4, 3, 4, 4, 4,
+ 127
+ },
+ { /* RAKE P20 BACKWARDS */
+ 0, -10, 1, -10, 10, -10,
+ -1, -9, 0, -9, 1, -9, 2, -9, 11, -9,
+ -1, -8, 0, -8, 2, -8, 3, -8, 7, -8, 11, -8,
+ 1, -7, 2, -7, 8, -7, 9, -7, 10, -7, 11, -7,
+ 6, -3, 7, -3,
+ 5, -2, 6, -2, 8, -2, 9, -2,
+ 6, -1, 9, -1,
+ 6, 0, 9, 0,
+ 7, 1, 8, 1,
+ 10, 4,
+ 11, 5,
+ -8, 6, 7, 6, 11, 6,
+ -7, 7, 8, 7, 9, 7, 10, 7, 11, 7,
+ -11, 8, -7, 8,
+ -10, 9, -9, 9, -8, 9, -7, 9,
+ 127
+ },
+ { /* RAKE P20 FORWARDS */
+ 0, -10, 1, -10, 10, -10,
+ -1, -9, 0, -9, 1, -9, 2, -9, 11, -9,
+ -1, -8, 0, -8, 2, -8, 3, -8, 7, -8, 11, -8,
+ 1, -7, 2, -7, 8, -7, 9, -7, 10, -7, 11, -7,
+ 6, -3, 7, -3,
+ 5, -2, 6, -2, 8, -2, 9, -2,
+ 6, -1, 9, -1,
+ 6, 0, 9, 0,
+ 7, 1, 8, 1,
+ 10, 4,
+ 11, 5,
+ 7, 6, 11, 6,
+ -9, 7, -8, 7, -7, 7, -6, 7, 8, 7, 9, 7, 10, 7, 11, 7,
+ -10, 8, -6, 8,
+ -6, 9,
+ -7, 10,
+ 127
+ },
+ { /* RAKE P24 BACKWARDS */
+ -5, -10,
+ -4, -9,
+ -10, -8, -4, -8,
+ -9, -7, -8, -7, -7, -7, -6, -7, -5, -7, -4, -7,
+ 6, -6, 7, -6,
+ 5, -5, 6, -5, 7, -5, 8, -5,
+ 5, -4, 6, -4, 8, -4, 9, -4,
+ 7, -3, 8, -3,
+ 0, -2, 2, -2,
+ -1, -1, 2, -1, 3, -1,
+ 0, 0, 2, 0,
+ 7, 1, 8, 1,
+ 5, 2, 6, 2, 8, 2, 9, 2,
+ 5, 3, 6, 3, 7, 3, 8, 3,
+ 6, 4, 7, 4,
+ -5, 6, -4, 6,
+ -9, 7, -8, 7, -7, 7, -6, 7, -4, 7, -3, 7,
+ -9, 8, -8, 8, -7, 8, -6, 8, -5, 8, -4, 8,
+ -8, 9, -7, 9, -6, 9, -5, 9,
+ 127
+ },
+ { /* BIG GLIDER 1 */
+ -4, -7, -3, -7,
+ -4, -6, -2, -6,
+ -4, -5,
+ -7, -4, -6, -4, -4, -4,
+ -7, -3, -2, -3,
+ -7, -2, -5, -2, -4, -2, 3, -2, 4, -2, 5, -2,
+ -2, -1, -1, -1, 0, -1, 5, -1, 6, -1,
+ -1, 0, 0, 0, 1, 0, 3, 0, 5, 0,
+ 6, 1,
+ -1, 2, 1, 2,
+ -2, 3, -1, 3, 1, 3,
+ -1, 4,
+ -3, 5, -2, 5, 0, 5,
+ 0, 6,
+ -2, 7, -1, 7,
+ 127
+ },
+ { /* BIG GLIDER 2 */
+ 0, -9, 1, -9,
+ 0, -8, 2, -8,
+ 0, -7,
+ 1, -6, 2, -6, 3, -6,
+ 1, -5, 3, -5, 4, -5, 5, -5,
+ 1, -4, 4, -4, 5, -4,
+ 3, -3, 5, -3, 7, -3, 8, -3,
+ 2, -2, 3, -2, 5, -2, 7, -2,
+ 1, -1, 2, -1, 7, -1,
+ -9, 0, -8, 0, -7, 0,
+ -9, 1, -6, 1, -5, 1, -4, 1, -1, 1, 3, 1, 4, 1,
+ -8, 2, -6, 2, -2, 2, -1, 2,
+ -6, 3, -5, 3, -3, 3, -2, 3, 1, 3,
+ -5, 4, -4, 4, 1, 4,
+ -5, 5, -4, 5, -3, 5, -2, 5,
+ -3, 7, -2, 7, -1, 7,
+ -3, 8,
+ 127
+ },
+ { /* BIG GLIDER 3 */
+ -1, -8,
+ -2, -7, -1, -7,
+ -2, -6, 0, -6,
+ 0, -4, 2, -4,
+ -2, -3, 0, -3, 2, -3,
+ -7, -2, -3, -2, -2, -2, 0, -2, 2, -2, 3, -2,
+ -8, -1, -7, -1, -6, -1, -5, -1, -2, -1, 4, -1,
+ -8, 0, -5, 0, -4, 0, -2, 0, -1, 0, 3, 0, 4, 0,
+ -6, 1, -5, 1, 0, 1,
+ -4, 2, -3, 2, 1, 2,
+ -3, 3, -2, 3, -1, 3, 2, 3, 4, 3, 5, 3, 6, 3, 7, 3,
+ -3, 4, 0, 4, 3, 4, 4, 4, 5, 4,
+ -1, 5, 0, 5, 1, 5,
+ 1, 6, 2, 6, 3, 6,
+ 2, 7, 3, 7,
+ 127
+ },
+ { /* PI HEPTOMINO (], NEAR SHIP) */
+ -2, -1, -1, -1, 0, -1,
+ 1, 0,
+ -2, 1, -1, 1, 0, 1,
+ 127
+ },
+ { /* R PENTOMINO */
+ 0, -1, 1, -1,
+ -1, 0, 0, 0,
+ 0, 1,
+ 127
+ },
+ { /* BUNNIES */
+ -4, -2, 2, -2,
+ -2, -1, 2, -1,
+ -2, 0, 1, 0, 3, 0,
+ -3, 1, -1, 1,
+ 127
+ }
+};
+
+#define NPATS_2333 (sizeof patterns_2333 / sizeof patterns_2333[0])
+
+static int
+position_of_neighbor(lifestruct * lp, int n, int col, int row)
+{
+ int dir = n * 360 / local_neighbors;
+
+ if (local_neighbors == 6) {
+ switch (dir) {
+ case 0:
+ col = (col + 1 == lp->ncols) ? 0 : col + 1;
+ break;
+ case 60:
+ if (!(row & 1))
+ col = (col + 1 == lp->ncols) ? 0 : col + 1;
+ row = (!row) ? lp->nrows - 1 : row - 1;
+ break;
+ case 120:
+ if (row & 1)
+ col = (!col) ? lp->ncols - 1 : col - 1;
+ row = (!row) ? lp->nrows - 1 : row - 1;
+ break;
+ case 180:
+ col = (!col) ? lp->ncols - 1 : col - 1;
+ break;
+ case 240:
+ if (row & 1)
+ col = (!col) ? lp->ncols - 1 : col - 1;
+ row = (row + 1 == lp->nrows) ? 0 : row + 1;
+ break;
+ case 300:
+ if (!(row & 1))
+ col = (col + 1 == lp->ncols) ? 0 : col + 1;
+ row = (row + 1 == lp->nrows) ? 0 : row + 1;
+ break;
+ default:
+ (void) fprintf(stderr, "wrong direction %d\n", dir);
+ }
+ } else if (local_neighbors == 4 || local_neighbors == 8) {
+ switch (dir) {
+ case 0:
+ col = (col + 1 == lp->ncols) ? 0 : col + 1;
+ break;
+ case 45:
+ col = (col + 1 == lp->ncols) ? 0 : col + 1;
+ row = (!row) ? lp->nrows - 1 : row - 1;
+ break;
+ case 90:
+ row = (!row) ? lp->nrows - 1 : row - 1;
+ break;
+ case 135:
+ col = (!col) ? lp->ncols - 1 : col - 1;
+ row = (!row) ? lp->nrows - 1 : row - 1;
+ break;
+ case 180:
+ col = (!col) ? lp->ncols - 1 : col - 1;
+ break;
+ case 225:
+ col = (!col) ? lp->ncols - 1 : col - 1;
+ row = (row + 1 == lp->nrows) ? 0 : row + 1;
+ break;
+ case 270:
+ row = (row + 1 == lp->nrows) ? 0 : row + 1;
+ break;
+ case 315:
+ col = (col + 1 == lp->ncols) ? 0 : col + 1;
+ row = (row + 1 == lp->nrows) ? 0 : row + 1;
+ break;
+ default:
+ (void) fprintf(stderr, "wrong direction %d\n", dir);
+ }
+ } else { /* TRI */
+ if ((col + row) % 2) { /* right */
+ switch (dir) {
+ case 0:
+ col = (!col) ? lp->ncols - 1 : col - 1;
+ break;
+ case 30:
+ case 40:
+ col = (!col) ? lp->ncols - 1 : col - 1;
+ row = (row + 1 == lp->nrows) ? 0 : row + 1;
+ break;
+ case 60:
+ col = (!col) ? lp->ncols - 1 : col - 1;
+ if (row + 1 == lp->nrows)
+ row = 1;
+ else if (row + 2 == lp->nrows)
+ row = 0;
+ else
+ row = row + 2;
+ break;
+ case 80:
+ case 90:
+ if (row + 1 == lp->nrows)
+ row = 1;
+ else if (row + 2 == lp->nrows)
+ row = 0;
+ else
+ row = row + 2;
+ break;
+ case 120:
+ row = (row + 1 == lp->nrows) ? 0 : row + 1;
+ break;
+ case 150:
+ case 160:
+ col = (col + 1 == lp->ncols) ? 0 : col + 1;
+ row = (row + 1 == lp->nrows) ? 0 : row + 1;
+ break;
+ case 180:
+ col = (col + 1 == lp->ncols) ? 0 : col + 1;
+ break;
+ case 200:
+ case 210:
+ col = (col + 1 == lp->ncols) ? 0 : col + 1;
+ row = (!row) ? lp->nrows - 1 : row - 1;
+ break;
+ case 240:
+ row = (!row) ? lp->nrows - 1 : row - 1;
+ break;
+ case 270:
+ case 280:
+ if (!row)
+ row = lp->nrows - 2;
+ else if (!(row - 1))
+ row = lp->nrows - 1;
+ else
+ row = row - 2;
+ break;
+ case 300:
+ col = (!col) ? lp->ncols - 1 : col - 1;
+ if (!row)
+ row = lp->nrows - 2;
+ else if (!(row - 1))
+ row = lp->nrows - 1;
+ else
+ row = row - 2;
+ break;
+ case 320:
+ case 330:
+ col = (!col) ? lp->ncols - 1 : col - 1;
+ row = (!row) ? lp->nrows - 1 : row - 1;
+ break;
+ default:
+ (void) fprintf(stderr, "wrong direction %d\n", dir);
+ }
+ } else { /* left */
+ switch (dir) {
+ case 0:
+ col = (col + 1 == lp->ncols) ? 0 : col + 1;
+ break;
+ case 30:
+ case 40:
+ col = (col + 1 == lp->ncols) ? 0 : col + 1;
+ row = (!row) ? lp->nrows - 1 : row - 1;
+ break;
+ case 60:
+ col = (col + 1 == lp->ncols) ? 0 : col + 1;
+ if (!row)
+ row = lp->nrows - 2;
+ else if (row == 1)
+ row = lp->nrows - 1;
+ else
+ row = row - 2;
+ break;
+ case 80:
+ case 90:
+ if (!row)
+ row = lp->nrows - 2;
+ else if (row == 1)
+ row = lp->nrows - 1;
+ else
+ row = row - 2;
+ break;
+ case 120:
+ row = (!row) ? lp->nrows - 1 : row - 1;
+ break;
+ case 150:
+ case 160:
+ col = (!col) ? lp->ncols - 1 : col - 1;
+ row = (!row) ? lp->nrows - 1 : row - 1;
+ break;
+ case 180:
+ col = (!col) ? lp->ncols - 1 : col - 1;
+ break;
+ case 200:
+ case 210:
+ col = (!col) ? lp->ncols - 1 : col - 1;
+ row = (row + 1 == lp->nrows) ? 0 : row + 1;
+ break;
+ case 240:
+ row = (row + 1 == lp->nrows) ? 0 : row + 1;
+ break;
+ case 270:
+ case 280:
+ if (row + 1 == lp->nrows)
+ row = 1;
+ else if (row + 2 == lp->nrows)
+ row = 0;
+ else
+ row = row + 2;
+ break;
+ case 300:
+ col = (col + 1 == lp->ncols) ? 0 : col + 1;
+ if (row + 1 == lp->nrows)
+ row = 1;
+ else if (row + 2 == lp->nrows)
+ row = 0;
+ else
+ row = row + 2;
+ break;
+ case 320:
+ case 330:
+ col = (col + 1 == lp->ncols) ? 0 : col + 1;
+ row = (row + 1 == lp->nrows) ? 0 : row + 1;
+ break;
+ default:
+ (void) fprintf(stderr, "wrong direction %d\n", dir);
+ }
+ }
+ }
+
+ return (row * lp->ncols + col);
+}
+
+static void
+init_list(lifestruct * lp, int state)
+{
+ /* Waste some space at the beginning and end of list
+ so we do not have to complicated checks against falling off the ends. */
+ lp->last[state] = (CellList *) malloc(sizeof (CellList));
+ lp->first[state] = (CellList *) malloc(sizeof (CellList));
+ lp->first[state]->previous = lp->last[state]->next = NULL;
+ lp->first[state]->next = lp->last[state]->previous = NULL;
+ lp->first[state]->next = lp->last[state];
+ lp->last[state]->previous = lp->first[state];
+}
+
+static void
+addto_list(lifestruct * lp, int state, cellstruct info)
+{
+ CellList *curr;
+
+ curr = (CellList *) malloc(sizeof (CellList));
+ lp->last[state]->previous->next = curr;
+ curr->previous = lp->last[state]->previous;
+ curr->next = lp->last[state];
+ lp->last[state]->previous = curr;
+ curr->info = info;
+ if (info.position >= 0) {
+ lp->arr[info.position] = curr;
+ lp->ncells[state]++;
+ }
+}
+
+static void
+removefrom_list(lifestruct * lp, int state, CellList * curr)
+{
+ curr->previous->next = curr->next;
+ curr->next->previous = curr->previous;
+ if (curr->info.position >= 0) {
+ lp->arr[curr->info.position] = NULL;
+ lp->ncells[state]--;
+ }
+ (void) free((void *) curr);
+}
+
+#ifdef DEBUG
+static void
+print_state(ModeInfo * mi, int state)
+{
+ lifestruct *lp = &lifes[MI_SCREEN(mi)];
+ CellList *curr;
+ int i = 0;
+
+ curr = lp->first[state]->next;
+ (void) printf("state %d\n", state);
+ while (curr != lp->last[state]) {
+ (void) printf("%d: position %d age %d, state %d toggle %d\n",
+ i, curr->info.position, curr->info.age,
+ curr->info.state, curr->info.toggle);
+ curr = curr->next;
+ i++;
+ }
+}
+
+#endif
+
+static void
+flush_list(lifestruct * lp, int state)
+{
+ while (lp->last[state]->previous != lp->first[state]) {
+ CellList *curr = lp->last[state]->previous;
+
+ curr->previous->next = lp->last[state];
+ lp->last[state]->previous = curr->previous;
+ (void) free((void *) curr);
+ }
+ lp->ncells[state] = 0;
+}
+
+
+static void
+draw_cell(ModeInfo * mi, cellstruct info)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ lifestruct *lp = &lifes[MI_SCREEN(mi)];
+ int col, row;
+
+ col = info.position % lp->ncols;
+ row = info.position / lp->ncols;
+ if (info.state == LIVE) {
+ if (MI_NPIXELS(mi) > 2)
+ XSetForeground(display, gc, MI_PIXEL(mi, info.age));
+ else
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+ } else
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+
+ if (local_neighbors == 6) {
+ int ccol = 2 * col + !(row & 1), crow = 2 * row;
+
+ lp->hexagonList[0].x = lp->xb + ccol * lp->xs;
+ lp->hexagonList[0].y = lp->yb + crow * lp->ys;
+ if (lp->xs == 1 && lp->ys == 1)
+ XFillRectangle(MI_DISPLAY(mi), MI_WINDOW(mi),
+ MI_GC(mi), lp->hexagonList[0].x, lp->hexagonList[0].y, 1, 1);
+ else
+ XFillPolygon(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ lp->hexagonList, 6, Convex, CoordModePrevious);
+ } else if (local_neighbors == 4 || local_neighbors == 8) {
+ if (lp->pixelmode || info.state == DEAD)
+ XFillRectangle(display, MI_WINDOW(mi), gc,
+ lp->xb + lp->xs * col, lp->yb + lp->ys * row, lp->xs, lp->ys);
+ else
+/*-
+ * PURIFY 4.0.1 on SunOS4 and on Solaris 2 reports a 132 byte memory leak on
+ * the next line */
+ XPutImage(display, MI_WINDOW(mi), gc, logo,
+ 0, 0, lp->xb + lp->xs * col, lp->yb + lp->ys * row,
+ logo->width, logo->height);
+ } else { /* TRI */
+ int orient = (col + row) % 2; /* O left 1 right */
+
+ lp->triangleList[orient][0].x = lp->xb + col * lp->xs;
+ lp->triangleList[orient][0].y = lp->yb + row * lp->ys;
+ if (lp->xs <= 3 || lp->ys <= 3)
+ XFillRectangle(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ ((orient) ? -1 : 1) + lp->triangleList[orient][0].x,
+ lp->triangleList[orient][0].y, 1, 1);
+ else {
+ if (orient)
+ lp->triangleList[orient][0].x += (lp->xs / 2 - 1);
+ else
+ lp->triangleList[orient][0].x -= (lp->xs / 2 - 1);
+ XFillPolygon(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ lp->triangleList[orient], 3, Convex, CoordModePrevious);
+
+ }
+ }
+}
+
+static void
+setcelltoggles(ModeInfo * mi, int col, int row)
+{
+ lifestruct *lp = &lifes[MI_SCREEN(mi)];
+ int position;
+ CellList *curr;
+
+ position = row * lp->ncols + col;
+ curr = lp->arr[position];
+ if (!curr) {
+ (void) fprintf(stderr, "state toggling but not on list\n");
+ return;
+ }
+ curr->info.toggle = True;
+}
+
+static void
+setcellfromtoggle(ModeInfo * mi, int col, int row)
+{
+ lifestruct *lp = &lifes[MI_SCREEN(mi)];
+ int neighbor, n, position;
+ cellstruct info;
+ CellList *curr, *currn;
+
+ position = row * lp->ncols + col;
+ curr = lp->arr[position];
+ if ((curr && curr->info.state == DEAD && curr->info.toggle) ||
+ (curr && curr->info.state == LIVE && !curr->info.toggle)) {
+ for (n = 0; n < local_neighbors; n++) {
+ neighbor = position_of_neighbor(lp, n, col, row);
+ currn = lp->arr[neighbor];
+ if (!currn) {
+ info.position = neighbor;
+ info.age = 0;
+ info.state = DEAD;
+ info.toggle = False;
+ addto_list(lp, DEAD, info);
+ }
+ }
+ }
+ if (curr && curr->info.state == DEAD && curr->info.toggle) {
+ removefrom_list(lp, DEAD, curr);
+ info.age = 0;
+ info.position = position;
+ info.toggle = False;
+ info.state = LIVE;
+ addto_list(lp, LIVE, info);
+ draw_cell(mi, info);
+ } else if (curr && curr->info.state == LIVE && !curr->info.toggle) {
+ info = curr->info;
+ /* if we aren't up to blue yet, then keep aging the cell. */
+ if ((MI_NPIXELS(mi) > 2) &&
+ (info.age < (unsigned short) (MI_NPIXELS(mi) * 0.7))) {
+ ++(info.age);
+ curr->info.age = info.age;
+ draw_cell(mi, info);
+ }
+ }
+}
+
+static void
+setcell(ModeInfo * mi, int col, int row, int state)
+{
+ lifestruct *lp = &lifes[MI_SCREEN(mi)];
+ int neighbor, n, position;
+ cellstruct info;
+ CellList *curr, *currn;
+
+ position = row * lp->ncols + col;
+ curr = lp->arr[position];
+ if (state == LIVE) {
+ if (curr && curr->info.state == DEAD) {
+ removefrom_list(lp, DEAD, curr);
+ curr = NULL;
+ }
+ if (!curr) {
+ for (n = 0; n < local_neighbors; n++) {
+ neighbor = position_of_neighbor(lp, n, col, row);
+ currn = lp->arr[neighbor];
+ if (!currn) {
+ info.age = 0;
+ info.position = neighbor;
+ info.state = DEAD;
+ info.toggle = False;
+ addto_list(lp, DEAD, info);
+ }
+ }
+ info.age = 0;
+ info.position = position;
+ info.state = LIVE;
+ info.toggle = False;
+ addto_list(lp, LIVE, info);
+ draw_cell(mi, info);
+ } else {
+ info = curr->info;
+ info.age = 0;
+ draw_cell(mi, info);
+ }
+ } else if (curr && curr->info.state == LIVE) {
+ info.age = 0;
+ info.position = position;
+ info.state = DEAD;
+ info.toggle = False;
+ removefrom_list(lp, LIVE, curr);
+ addto_list(lp, DEAD, info); /* Just in case... */
+ draw_cell(mi, info);
+ }
+}
+
+static void
+alloc_cells(lifestruct * lp)
+{
+ lp->arr = (CellList **) calloc(lp->npositions, sizeof (CellList *));
+}
+
+static void
+free_cells(lifestruct * lp)
+{
+ if (lp->arr != NULL)
+ (void) free((void *) lp->arr);
+ lp->arr = NULL;
+}
+
+static int
+n_neighbors(lifestruct * lp, CellList * curr)
+{
+ int col, row, n, p, count = 0;;
+
+ col = curr->info.position % lp->ncols;
+ row = curr->info.position / lp->ncols;
+ for (n = 0; n < local_neighbors; n++) {
+ p = position_of_neighbor(lp, n, col, row);
+ if (lp->arr[p] && lp->arr[p]->info.state == LIVE)
+ count++;
+ }
+ return count;
+}
+
+static void
+RandomSoup(ModeInfo * mi, int n, int v)
+{
+ lifestruct *lp = &lifes[MI_SCREEN(mi)];
+ int row, col;
+
+ v /= 2;
+ if (v < 1)
+ v = 1;
+ for (row = lp->nrows / 2 - v; row < lp->nrows / 2 + v; ++row)
+ for (col = lp->ncols / 2 - v; col < lp->ncols / 2 + v; ++col)
+ if (NRAND(100) < n && col > 1 && row > 1 &&
+ col < lp->ncols && row < lp->nrows)
+ setcell(mi, col, row, LIVE);
+ if (MI_WIN_IS_VERBOSE(mi))
+ (void) fprintf(stdout, "random pattern\n");
+}
+
+static void
+GetPattern(ModeInfo * mi, int i)
+{
+ lifestruct *lp = &lifes[MI_SCREEN(mi)];
+ int row, col;
+ char *patptr;
+
+ patptr = &patterns_2333[i][0];
+ while ((col = *patptr++) != 127) {
+ row = *patptr++;
+ col += lp->ncols / 2;
+ row += lp->nrows / 2;
+ if (col >= 0 && row >= 0 && col < lp->ncols && row < lp->nrows)
+ setcell(mi, col, row, LIVE);
+ }
+ if (MI_WIN_IS_VERBOSE(mi))
+ (void) fprintf(stdout, "table number %d\n", i);
+}
+
+static void
+shooter(ModeInfo * mi)
+{
+ lifestruct *lp = &lifes[MI_SCREEN(mi)];
+ int hsp, vsp, hoff = 1, voff = 1;
+
+ /* Generate the glider at the edge of the screen */
+ if (LRAND() & 1) {
+ hsp = (LRAND() & 1) ? 0 : lp->ncols - 1;
+ vsp = NRAND(lp->nrows);
+ } else {
+ vsp = (LRAND() & 1) ? 0 : lp->nrows - 1;
+ hsp = NRAND(lp->ncols);
+ }
+ if (vsp > lp->nrows / 2)
+ voff = -1;
+ if (hsp > lp->ncols / 2)
+ hoff = -1;
+ if (local_neighbors == 8 && rule == 2333) {
+ setcell(mi, hsp + 2 * hoff, vsp + 0 * voff, LIVE);
+ setcell(mi, hsp + 2 * hoff, vsp + 1 * voff, LIVE);
+ setcell(mi, hsp + 2 * hoff, vsp + 2 * voff, LIVE);
+ setcell(mi, hsp + 1 * hoff, vsp + 2 * voff, LIVE);
+ setcell(mi, hsp + 0 * hoff, vsp + 1 * voff, LIVE);
+ }
+}
+void
+init_life(ModeInfo * mi)
+{
+ lifestruct *lp;
+ int size = MI_SIZE(mi), npats, i;
+
+ if (lifes == NULL) {
+ if ((lifes = (lifestruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (lifestruct))) == NULL)
+ return;
+ }
+ lp = &lifes[MI_SCREEN(mi)];
+ lp->generation = 0;
+ lp->redrawing = 0;
+
+ if (!local_neighbors) {
+ for (i = 0; i < NEIGHBORKINDS; i++) {
+ if (neighbors == initVal[i]) {
+ local_neighbors = neighbors;
+ break;
+ }
+ if (i == NEIGHBORKINDS - 1) {
+#if 0
+ local_neighbors = initVal[NRAND(NEIGHBORKINDS)];
+ local_neighbors = (LRAND() & 1) ? 4 : 8;
+#else
+ local_neighbors = 8;
+#endif
+ break;
+ }
+ }
+ /*
+ * Rules should not have to be contiguous ... that is, it should be
+ * possible to have rules where cells will live if there are 2 or 4
+ * (not 3) cells around them. These rules are not general enough
+ * to allow for that.
+ */
+ if (rule < 0)
+ rule = -rule;
+ living_min = rule / 1000;
+ living_max = (rule / 100) % 10;
+ birth_min = (rule / 10) % 10;
+ birth_max = rule % 10;
+ if (MI_WIN_IS_VERBOSE(mi))
+ (void) fprintf(stdout, "neighbors %d, rule %d\n", local_neighbors, rule);
+ }
+ lp->width = MI_WIN_WIDTH(mi);
+ lp->height = MI_WIN_HEIGHT(mi);
+
+ if (lp->first[0])
+ for (i = 0; i < STATES; i++)
+ flush_list(lp, i);
+ else
+ for (i = 0; i < STATES; i++)
+ init_list(lp, i);
+ free_cells(lp);
+
+ if (local_neighbors == 6) {
+ int nccols, ncrows, i;
+
+ if (lp->width < 2)
+ lp->width = 2;
+ if (lp->height < 4)
+ lp->height = 4;
+ if (size < -MINSIZE)
+ lp->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(lp->width, lp->height) /
+ MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE) {
+ if (!size)
+ lp->ys = MAX(MINSIZE, MIN(lp->width, lp->height) / MINGRIDSIZE);
+ else
+ lp->ys = MINSIZE;
+ } else
+ lp->ys = MIN(size, MAX(MINSIZE, MIN(lp->width, lp->height) /
+ MINGRIDSIZE));
+ lp->xs = lp->ys;
+ nccols = MAX(lp->width / lp->xs - 2, 2);
+ ncrows = MAX(lp->height / lp->ys - 1, 2);
+ lp->ncols = nccols / 2;
+ lp->nrows = 2 * (ncrows / 4);
+ lp->xb = (lp->width - lp->xs * nccols) / 2 + lp->xs / 2;
+ lp->yb = (lp->height - lp->ys * (ncrows / 2) * 2) / 2 + lp->ys;
+ for (i = 0; i < 6; i++) {
+ lp->hexagonList[i].x = (lp->xs - 1) * hexagonUnit[i].x;
+ lp->hexagonList[i].y = ((lp->ys - 1) * hexagonUnit[i].y / 2) * 4 / 3;
+ }
+ } else if (local_neighbors == 4 || local_neighbors == 8) {
+ if (!logo) {
+ getBitmap(&logo, CELL_WIDTH, CELL_HEIGHT, CELL_BITS,
+ &graphics_format);
+ }
+ if (lp->width < 2)
+ lp->width = 2;
+ if (lp->height < 2)
+ lp->height = 2;
+ if (size == 0 ||
+ MINGRIDSIZE * size > lp->width || MINGRIDSIZE * size > lp->height) {
+ if (lp->width > MINGRIDSIZE * logo->width &&
+ lp->height > MINGRIDSIZE * logo->height) {
+ lp->pixelmode = False;
+ lp->xs = logo->width;
+ lp->ys = logo->height;
+ } else {
+ lp->pixelmode = True;
+ lp->xs = lp->ys = MAX(MINSIZE, MIN(lp->width, lp->height) /
+ MINGRIDSIZE);
+ }
+ } else {
+ lp->pixelmode = True;
+ if (size < -MINSIZE)
+ lp->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(lp->width, lp->height) /
+ MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE)
+ lp->ys = MINSIZE;
+ else
+ lp->ys = MIN(size, MAX(MINSIZE, MIN(lp->width, lp->height) /
+ MINGRIDSIZE));
+ lp->xs = lp->ys;
+ }
+ lp->ncols = MAX(lp->width / lp->xs, 4);
+ lp->nrows = MAX(lp->height / lp->ys, 4);
+ lp->xb = (lp->width - lp->xs * lp->ncols) / 2;
+ lp->yb = (lp->height - lp->ys * lp->nrows) / 2;
+ } else { /* TRI */
+ int orient, i;
+
+ if (lp->width < 2)
+ lp->width = 2;
+ if (lp->height < 2)
+ lp->height = 2;
+ if (size < -MINSIZE)
+ lp->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(lp->width, lp->height) /
+ MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE) {
+ if (!size)
+ lp->ys = MAX(MINSIZE, MIN(lp->width, lp->height) / MINGRIDSIZE);
+ else
+ lp->ys = MINSIZE;
+ } else
+ lp->ys = MIN(size, MAX(MINSIZE, MIN(lp->width, lp->height) /
+ MINGRIDSIZE));
+ lp->xs = (int) (1.52 * lp->ys);
+ lp->ncols = (MAX(lp->width / lp->xs - 1, 2) / 2) * 2;
+ lp->nrows = (MAX(lp->height / lp->ys - 1, 2) / 2) * 2;
+ lp->xb = (lp->width - lp->xs * lp->ncols) / 2 + lp->xs / 2;
+ lp->yb = (lp->height - lp->ys * lp->nrows) / 2 + lp->ys / 2;
+ for (orient = 0; orient < 2; orient++) {
+ for (i = 0; i < 3; i++) {
+ lp->triangleList[orient][i].x =
+ (lp->xs - 2) * triangleUnit[orient][i].x;
+ lp->triangleList[orient][i].y =
+ (lp->ys - 2) * triangleUnit[orient][i].y;
+ }
+ }
+ }
+ lp->npositions = lp->nrows * lp->ncols;
+
+
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+
+
+ alloc_cells(lp);
+
+ if (local_neighbors == 8 && rule == 2333)
+ npats = NPATS_2333;
+ else
+ npats = 0;
+ lp->pattern = NRAND(npats + 2);
+ if (lp->pattern >= npats)
+ RandomSoup(mi, 30, MAX(2 * MIN(lp->nrows, lp->ncols) / 3, 15));
+ else
+ GetPattern(mi, lp->pattern);
+}
+
+void
+draw_life(ModeInfo * mi)
+{
+ lifestruct *lp = &lifes[MI_SCREEN(mi)];
+ CellList *middle[STATES]; /* To distinguish between old and new stuff */
+ CellList *curr;
+ cellstruct info;
+ int i, count;
+
+/*-
+ * LIVE list are the on cells
+ * DEAD list are the cells that may go on in the next iteration.
+ * Init plan:
+ Create live list and dead list which border all live cells
+ (no good for rules like 0000 :) )
+ * Big loop plan:
+ Setup toggles, toggle state next iteration?
+ Remove all from dead list except toggled and remove all from live list
+ that are dead (but in this case draw background square)
+ Toggle toggled states, age existing ones, create a new dead list, draw
+ */
+
+ /* Go through dead list to see if anything spawns (generate new lists),
+ then delete the used dead list */
+
+ /* Setup toggles */
+ curr = lp->first[DEAD]->next;
+ while (curr != lp->last[DEAD]) {
+ count = n_neighbors(lp, curr);
+ if (count >= birth_min && count <= birth_max) {
+ setcelltoggles(mi, curr->info.position % lp->ncols,
+ curr->info.position / lp->ncols);
+ }
+ curr = curr->next;
+ }
+ curr = lp->first[LIVE]->next;
+ while (curr != lp->last[LIVE]) {
+ count = n_neighbors(lp, curr);
+ if (!(count >= living_min && count <= living_max)) {
+ setcelltoggles(mi, curr->info.position % lp->ncols,
+ curr->info.position / lp->ncols);
+ }
+ curr = curr->next;
+ }
+
+ /* Bring out your dead! */
+ curr = lp->first[DEAD]->next;
+ while (curr != lp->last[DEAD]) {
+ curr = curr->next;
+ if (!curr->previous->info.toggle)
+ removefrom_list(lp, DEAD, curr->previous);
+ }
+ curr = lp->first[LIVE]->next;
+ while (curr != lp->last[LIVE]) {
+ if (curr->info.toggle) {
+ curr->info.state = DEAD;
+ draw_cell(mi, curr->info);
+ curr = curr->next;
+ removefrom_list(lp, LIVE, curr->previous);
+ } else
+ curr = curr->next;
+ }
+
+ /* Fence off the babies */
+ info.position = -1; /* dummy value */
+ info.age = 0; /* dummy value */
+ addto_list(lp, DEAD, info);
+ addto_list(lp, LIVE, info);
+ middle[DEAD] = lp->last[DEAD]->previous;
+ middle[LIVE] = lp->last[LIVE]->previous;
+
+ /* Toggle toggled states, age existing ones, create a new dead list */
+ while (lp->first[DEAD]->next != middle[DEAD]) {
+ curr = lp->first[DEAD]->next;
+ setcellfromtoggle(mi, curr->info.position % lp->ncols,
+ curr->info.position / lp->ncols);
+ }
+ curr = lp->first[LIVE]->next;
+ while (curr != middle[LIVE]) {
+ setcellfromtoggle(mi, curr->info.position % lp->ncols,
+ curr->info.position / lp->ncols);
+ curr = curr->next;
+ }
+ removefrom_list(lp, DEAD, middle[DEAD]);
+ removefrom_list(lp, LIVE, middle[LIVE]);
+
+ if (lp->redrawing) {
+ for (i = 0; i < REDRAWSTEP; i++) {
+ CellList *curr = lp->arr[lp->redrawpos];
+
+ /* TODO: More efficient to use list rather than array. */
+ if (curr && curr->info.state == LIVE) {
+ draw_cell(mi, curr->info);
+ }
+ if (++(lp->redrawpos) >= lp->npositions) {
+ lp->redrawing = 0;
+ break;
+ }
+ }
+ }
+ if (++lp->generation > MI_CYCLES(mi))
+ init_life(mi);
+
+ /*
+ * generate a randomized shooter aimed roughly toward the center of the
+ * screen after batchcount.
+ */
+
+ if (lp->generation && lp->generation %
+ ((MI_BATCHCOUNT(mi) < 0) ? 1 : MI_BATCHCOUNT(mi)) == 0)
+ shooter(mi);
+
+}
+
+void
+release_life(ModeInfo * mi)
+{
+ if (lifes != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ lifestruct *lp = &lifes[screen];
+ int state;
+
+ for (state = 0; state < STATES; state++) {
+ flush_list(lp, state);
+ (void) free((void *) lp->last[state]);
+ (void) free((void *) lp->first[state]);
+ }
+ free_cells(lp);
+ }
+ (void) free((void *) lifes);
+ lifes = NULL;
+ }
+ destroyBitmap(&logo, &graphics_format);
+}
+
+void
+refresh_life(ModeInfo * mi)
+{
+ lifestruct *lp = &lifes[MI_SCREEN(mi)];
+
+ lp->redrawing = 1;
+ lp->redrawpos = 0;
+}
+
+void
+change_life(ModeInfo * mi)
+{
+ lifestruct *lp = &lifes[MI_SCREEN(mi)];
+ int npats, i;
+
+ lp->generation = 0;
+ if (lp->first[0])
+ for (i = 0; i < STATES; i++)
+ flush_list(lp, i);
+ else
+ for (i = 0; i < STATES; i++)
+ init_list(lp, i);
+ free_cells(lp);
+ alloc_cells(lp);
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+
+ lp->pattern = lp->pattern + 1;
+ if (local_neighbors == 8 && rule == 2333)
+ npats = NPATS_2333;
+ else
+ npats = 0;
+ if (lp->pattern >= npats + 2)
+ lp->pattern = 0;
+ if (lp->pattern >= npats)
+ RandomSoup(mi, 30, MAX(2 * MIN(lp->nrows, lp->ncols) / 3, 15));
+ else
+ GetPattern(mi, lp->pattern);
+}
--- /dev/null
+./bitmaps/s-grelb.xbm
\ No newline at end of file
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)life1d.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * life1d.c - Stephen Wolfram's 1d game of Life for xlock, the X Window
+ * System lockscreen.
+ *
+ * Copyright (c) 1995 by David Bagley.
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 27-Jul-95: written, used life.c as a basis, using totalistic rules
+ * (default). Special thanks to Harold V. McIntosh
+ * <mcintosh@servidor.unam.mx> for providing me with the
+ * LCAU collection and references.
+ *
+ * References:
+ * Dewdney, A.K., "The Armchair Universe, Computer Recreations from the
+ * Pages of Scientific American Magazine", W.H. Freedman and Company,
+ * New York, 1988 (May 1985).
+ * Perry, Kenneth E., "Abstract Mathematical Art", BYTE, December, 1986
+ * pp. 181-192
+ * Hayes, Brian, "Computer Recreations", Scientific American, March 1984,
+ * p. 12
+ * Wolfram, Stephen, "Cellular automata as models of complexity", Nature,
+ * 4 October 1984, pp. 419-424
+ * Wolfram, Stephen, "Computer Software in Science and Mathematics",
+ * Scientific American, September 1984, pp. 188-203
+ *
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Life1D"
+#define HACK_INIT init_life1d
+#define HACK_DRAW draw_life1d
+#define DEF_DELAY 10000
+#define DEF_CYCLES 10
+#define DEF_SIZE 0
+#define DEF_NCOLORS 200
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+
+#endif /* STANDALONE */
+
+#define LIFE1DBITS(n,w,h)\
+ lp->pixmaps[lp->init_bits++]=\
+ XCreatePixmapFromBitmapData(display,window,(char *)n,w,h,1,0,1)
+
+/* aliases for vars defined in the bitmap file */
+#define CELL_WIDTH image_width
+#define CELL_HEIGHT image_height
+#define CELL_BITS image_bits
+
+#include "life1d.xbm"
+
+#define DEF_TOTALISTIC "True" /* FALSE is LCAU */
+
+static Bool totalistic;
+static int maxstates;
+static int maxradius;
+static int maxsum_size;
+
+#ifndef STANDALONE
+static XrmOptionDescRec opts[] =
+{
+ {"-totalistic", ".life1d.totalistic", XrmoptionNoArg, (caddr_t) "on"},
+ {"+totalistic", ".life1d.totalistic", XrmoptionNoArg, (caddr_t) "off"}
+};
+static argtype vars[] =
+{
+{(caddr_t *) & totalistic, "totalistic", "Totalistic", DEF_TOTALISTIC, t_Bool}
+};
+static OptionStruct desc[] =
+{
+ {"-/+totalistic", "turn on/off totalistic rules (else LCAU rules)"}
+};
+
+ModeSpecOpt life1d_opts =
+{2, opts, 1, vars, desc};
+
+#endif /* STANDALONE */
+
+#define MINGRIDSIZE 10
+#define MINSIZE 2 /* 3 may be better here */
+#define REPEAT 24
+#define PATTERNSIZE 8
+#define MAXSTATES 5
+
+static unsigned char patterns[MAXSTATES][PATTERNSIZE] =
+{
+ {0xee, 0xdd, 0xbb, 0x77, 0xee, 0xdd, 0xbb, 0x76}, /* dark \ stripe */
+ {0xff, 0x99, 0x99, 0xff, 0xff, 0x99, 0x99, 0xff}, /* spots */
+ {0xaa, 0xff, 0xff, 0x55, 0xaa, 0xff, 0xff, 0x55}, /* black+grey - stripe */
+ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, /* black */
+
+ {0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa} /* 50% grey */
+};
+
+typedef struct {
+ int init_bits;
+ int pixelmode;
+ int xs, ys, xb, yb; /* cell size, grid border */
+ int screen_generation, row;
+ int nrows, ncols, border;
+ int width, height;
+ int k, r;
+ long code;
+ int repeating;
+ char *nextstate;
+ int colors[MAXSTATES];
+ Pixmap pixmaps[MAXSTATES];
+ GC stippledGC;
+ unsigned char *newcells;
+ unsigned char *oldcells;
+ unsigned char *buffer;
+} life1dstruct;
+
+static XImage *logo = NULL;
+static int graphics_format = -1;
+
+static life1dstruct *life1ds = NULL;
+
+static int totalistic_rules[][3] =
+{
+
+ /* Well behaved rules */
+ /* Scientific American (Dewdney) */
+ {2, 2, 20},
+ {2, 2, 52}, /* A bit too prolific but I like it anyway */
+ {2, 3, 88}, /* James K. Park's 1D Gun (1111111111011) */
+ {2, 4, 368},
+
+ /* Nature */
+ {3, 1, 792},
+
+ /* BYTE (Translated to Wolfram's notation) */
+ {4, 1, 39744},
+ {4, 1, 81036},
+ {4, 1, 126092},
+ {4, 1, 147824},
+ {4, 1, 156272},
+ {4, 1, 189468},
+ {4, 1, 176412},
+ {4, 1, 214840},
+ {4, 1, 245028},
+ {4, 1, 267320},
+ {4, 1, 257808},
+ {4, 1, 258596},
+ {4, 1, 260224},
+ {4, 1, 267408},
+ {4, 1, 290960},
+ {4, 1, 330056},
+ {4, 1, 330436},
+ {4, 1, 400192},
+ {4, 1, 433296},
+ {4, 1, 434492},
+ {4, 1, 447368},
+ {4, 1, 453768},
+ {4, 1, 454416},
+ {4, 1, 485488},
+ {4, 1, 505904},
+ {4, 1, 618960},
+ {4, 1, 642948},
+ {4, 1, 680528},
+ {4, 1, 708484},
+ {4, 1, 741004},
+ {4, 1, 749708},
+ {4, 1, 756420},
+ {4, 1, 761356},
+ {4, 1, 769088},
+ {4, 1, 778568},
+ {4, 1, 779792},
+ {4, 1, 797456},
+ {4, 1, 803728},
+ {4, 1, 844092},
+ {4, 1, 874524},
+ {4, 1, 881440},
+ {4, 1, 921476},
+ {4, 1, 936832},
+ {4, 1, 937792},
+ {4, 1, 1004600},
+
+ /* Nature */
+ {5, 1, 580020},
+ {5, 1, 5694390},
+ {5, 1, 59123000},
+
+#if 0 /* OK but annoying */
+
+ /* BYTE */
+ {4, 1, 10552},
+ {4, 1, 14708},
+ {4, 1, 25284},
+ {4, 1, 42848},
+ {4, 1, 44328},
+ {4, 1, 51788},
+ {4, 1, 107364},
+ {4, 1, 111448},
+ {4, 1, 155848},
+ {4, 1, 173024},
+ {4, 1, 224148},
+ {4, 1, 238372},
+ {4, 1, 241656},
+ {4, 1, 243764},
+ {4, 1, 255856},
+ {4, 1, 259222},
+ {4, 1, 310148},
+ {4, 1, 324148},
+ {4, 1, 346696},
+ {4, 1, 364424},
+ {4, 1, 403652},
+ {4, 1, 436072},
+ {4, 1, 456708},
+ {4, 1, 461912},
+ {4, 1, 534812},
+ {4, 1, 546700},
+ {4, 1, 552708},
+ {4, 1, 569092},
+ {4, 1, 616736},
+ {4, 1, 658564},
+ {4, 1, 717956},
+ {4, 1, 748432},
+ {4, 1, 800964},
+ {4, 1, 800972},
+ {4, 1, 801144},
+ {4, 1, 821116},
+ {4, 1, 840172},
+ {4, 1, 858312},
+ {4, 1, 865394},
+ {4, 1, 914952},
+ {4, 1, 919244},
+ {4, 1, 984296},
+ {4, 1, 997964},
+ {4, 1, 1018488},
+ {4, 1, 1018808},
+ {4, 1, 1023864},
+ {4, 1, 1024472},
+ {4, 1, 1033776},
+ {4, 1, 1033784},
+ {4, 1, 1034552},
+
+ /* Nature */
+ {5, 1, 583330},
+ {5, 1, 672900},
+#endif
+
+#if 0 /* rejects */
+ /* Nature */
+ {2, 1, 4},
+ {2, 3, 18},
+ {2, 3, 22},
+ {2, 3, 90},
+ {2, 3, 94},
+ {2, 3, 126},
+ {2, 3, 128},
+
+ /* Scientific American (Dewdney) */
+ {2, 3, 54},
+ {3, 2, 66}, /* RIPPLE, Dewdney's personal 1d rule */
+ {3, 1, 257},
+
+ /* BYTE */
+ {4, 1, 16},
+ {4, 1, 56},
+ {4, 1, 4408},
+ {4, 1, 101988},
+ {4, 1, 113688},
+ {4, 1, 227892},
+ {4, 1, 254636},
+ {4, 1, 258598},
+ {4, 1, 294146},
+ {4, 1, 377576},
+ {4, 1, 472095},
+ {4, 1, 538992},
+ {4, 1, 615028},
+ {4, 1, 901544},
+ {4, 1, 911876},
+
+ /* Nature */
+ {5, 1, 10175},
+ {5, 1, 566780},
+ {5, 1, 570090},
+#endif
+};
+
+#define TOTALISTICRULES (sizeof totalistic_rules / sizeof totalistic_rules[0])
+
+#if 0
+static char lcau21_rules[][9] =
+{
+ "00010010", /* 18 Hollow enlarging triangles */
+ "00110110", /* 54 Hollow triangles */
+ "01101110", /* 110 Hollow right triangles */
+ "01111100", /* 124 Hollow left triangles */
+ "10010011", /* 147 Solid triangles */
+ "10001001", /* 137 Solid right triangles */
+ "11000001", /* 193 Solid left triangles */
+};
+
+#define LCAU2RULES (sizeof lcau21_rules / sizeof lcau21_rules[0])
+#endif
+
+static char lcau31_rules[][28] =
+{
+ "000222111000111222222111000", /* equal thirds */
+ "002220210110110211110002200", /* threads on triangles */
+ "001121102222110110111002100", /* interfaces of 2 vel */
+ "020201010201010102010102020", /* class iv, sparse */
+ "020201011201011112011112120", /* blue bground class iv */
+ "021211110211110101110101020", /* diagonal black gaps */
+ "022221211221211012222111120", /* macrocell w/ 012 membrane */
+ "100002021002021210021210100", /* totalistic rule 792 (iv) */
+ "100002200112201200020121200", /* binary counter */
+ "101021220111100222112102020", /* two patterns compete #1 */
+ "110001000112221222112221000", /* reversible rule */
+ "111012101002110122121102120", /* small blue triangles */
+ "111021210012110202120212122", /* 2 glider on 1 background */
+ "111111101010202020202010101", /* motes and triangles */
+ "111220012222012120001221020", /* black triangles */
+ "112110201012001210101200010", /* dendrites */
+ "112122000000122112112122000", /* reversible rule's reverse */
+ "200211020111110002001101210", /* crocodile skin */
+ "202000200112001200120211100", /* two slow gliders collide */
+ "202211000201021001100200200", /* Red Queen's binary counter */
+ "210101012101012120012120200", /* blue on red background */
+ "212021022100200221201101020", /* two patterns compete #2 */
+ "220222010220211111000211010", /* Fisch's cyclic eater */
+ "222022001222211202022120012", /* macrocell w/ 0122 membrane */
+};
+
+#define LCAU3RULES (sizeof lcau31_rules / sizeof lcau31_rules[0])
+
+static char lcau41_rules[][65] =
+{
+ "0000000313131323232312121213232323231313131101010202020202010101", /* skewed triangle */
+ "0000020202000000020232220203300000000101020030000100322121003020", /* slow glider - copies bar */
+ "0000213323132331123303003213323113233123002033211332313233120001", /* slightly chaotic symmetri */
+ "0000332030033323010020122303001002120210000000100110020220000010", /* shuttle squeeze */
+ "0100030000030323200323120202001003000203000220001310220100200010", /* coo gldrs */
+ "0121200113213320110223311213201013131010111011101120012132103210", /* mixture of types */
+ "0212301103023320313223121332310023203323333231301020023120303020", /* slo gl w/ many f gl */
+ "0320032100113332112321213211003321233210121032320000321000010200", /* crosshatching */
+ "0323323323313310323323313310310223313310310210213310310210210210", /* Perry's 245028 */
+ "0323330023210000121122232322122113310131032101002110122321102120", /* */
+ "0332200131100112230221012111210202022013210332120210222311212100", /* cycles on dgl bgrnd */
+ "0332200131100112230221012111210202022013210332120210222311212300", /* cycles on dgl bgrnd */
+ "1230320301231030321132211021112010202330101010112312220310311000", /* very complex glider */
+ "1230320301321030321132211021112010212121232212112312220310311000", /* nice cross hatching */
+ "2031122112031101123123233000321210301112010303203232213000311000", /* gliders among stills */
+ "2202003300010200010011010011020003033000032302002203110033010200", /* bin ctr */
+ "2313032202112320111221023212120203132000233322021310311101010030", /* diagonal growth on mesh */
+ "2332102112210200233210120311023110322213112123233132331213211212", /* gliderettes & latice */
+ "3000213323132331123302003213323113233123001033211332313233120000", /* symmetric rule */
+ "3003003203213211003203213211211303213211211311323211211311321320", /* Perry's blue background */
+ "3010213223113300321221011010123112301033010221203333211323110100", /* v. bars w/entanglement */
+ "3111213323132331123313113213323113233123220133211332313233121110", /* not purely symmetric */
+ "3112001202313030102330122003321023102122030102001210223122203020", /* slow & fast gliders */
+ "3130123232333201012202313210121032302200211020313130002001103210", /* crocodile skin */
+ "3230120202031130033311232111223012311113322032103210123012303210", /* y/o on b/g */
+ "3330333312110010333032222222001033303222121111110000322212110010", /* Fisch's rule */
+ "3332032303133100221122122213220022000212021022100200221203103020", /* slow glider */
+ "3333101022220101323201012323101033331010222201013232010123231010", /* reverse of rvble #22 */
+ "3333111122000022333311112200002233111133002222003311113300222200", /* reversible Rule 22 */
+};
+
+#define LCAU4RULES (sizeof lcau41_rules / sizeof lcau41_rules[0])
+
+#ifdef LCAU2RULES
+#define LCAURULES (LCAU2RULES + LCAU3RULES + LCAU4RULES)
+#else
+#define LCAURULES (LCAU3RULES + LCAU4RULES)
+#endif
+
+static void
+drawcell(ModeInfo * mi, int col, int row, unsigned int state)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ life1dstruct *lp = &life1ds[MI_SCREEN(mi)];
+
+ if (!state) {
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XFillRectangle(display, window, gc,
+ lp->xb + lp->xs * col, lp->yb + lp->ys * row, lp->xs, lp->ys);
+ return;
+ }
+ if (MI_NPIXELS(mi) > 2)
+ XSetForeground(display, gc, MI_PIXEL(mi, lp->colors[state - 1]));
+ if (lp->pixelmode | (MI_NPIXELS(mi) <= 2)) {
+ if (MI_NPIXELS(mi) <= 2) {
+ XGCValues gcv;
+
+ gcv.stipple = lp->pixmaps[state - 1];
+ gcv.foreground = MI_WIN_WHITE_PIXEL(mi);
+ gcv.background = MI_WIN_BLACK_PIXEL(mi);
+ gcv.fill_style = FillOpaqueStippled;
+ XChangeGC(display, lp->stippledGC,
+ GCStipple | GCFillStyle | GCForeground | GCBackground, &gcv);
+ XFillRectangle(display, window, lp->stippledGC,
+ lp->xb + lp->xs * col, lp->yb + lp->ys * row, lp->xs, lp->ys);
+ } else
+ XFillRectangle(display, window, gc,
+ lp->xb + lp->xs * col, lp->yb + lp->ys * row, lp->xs, lp->ys);
+ } else {
+ XPutImage(display, window, gc,
+ logo, 0, 0, lp->xb + lp->xs * col, lp->yb + lp->ys * row,
+ logo->width, logo->height);
+ }
+}
+
+static void
+RandomSoup(life1dstruct * lp, int n, int v)
+{
+ int col;
+
+ v /= 2;
+ if (v < 1)
+ v = 1;
+ for (col = lp->ncols / 2 - v; col < lp->ncols / 2 + v; ++col)
+ if (NRAND(100) < n && col >= 0 && col < lp->ncols)
+ lp->newcells[col + lp->border] = (unsigned char) NRAND(lp->k - 1) + 1;
+}
+
+static long
+power(int x, int n)
+{ /* raise x to the nth power n >= 0 */
+ int i;
+ long p = 1;
+
+ for (i = 1; i <= n; ++i)
+ p = p * x;
+ return p;
+}
+
+static void
+GetRule(life1dstruct * lp, int i)
+{
+ long sum_size, j;
+
+ if (totalistic) {
+ long code, pow;
+
+ lp->k = totalistic_rules[i][0];
+ lp->r = totalistic_rules[i][1];
+ sum_size = (lp->k - 1) * (lp->r * 2 + 1) + 1;
+ code = lp->code = totalistic_rules[i][2];
+
+ pow = power(lp->k, sum_size - 1); /* Should be less than max long */
+ for (j = 0; j < sum_size; j++) {
+ lp->nextstate[sum_size - 1 - j] = (char) (code / pow);
+ code -= ((long) lp->nextstate[sum_size - 1 - j]) * pow;
+ pow /= (long) lp->k;
+ }
+ } else {
+ lp->r = 1;
+#ifdef LCAU2RULES
+ if (i < (int) LCAU2RULES) {
+ lp->k = 2;
+ sum_size = power(lp->k, 2 * lp->r + 1);
+ for (j = 0; j < sum_size; j++)
+ lp->nextstate[sum_size - 1 - j] = lcau21_rules[i][j] - '0';
+ } else if (i < LCAU2RULES + LCAU3RULES)
+#else
+ if (i < (int) LCAU3RULES)
+#endif
+ {
+ lp->k = 3;
+ sum_size = power(lp->k, 2 * lp->r + 1);
+#ifdef LCAU2RULES
+ i -= LCAU2RULES;
+#endif
+ for (j = 0; j < sum_size; j++)
+ lp->nextstate[sum_size - 1 - j] = lcau31_rules[i][j] - '0';
+ } else {
+ lp->k = 4;
+ sum_size = power(lp->k, 2 * lp->r + 1);
+#ifdef LCAU2RULES
+ i -= (LCAU2RULES + LCAU3RULES);
+#else
+ i -= LCAU3RULES;
+#endif
+ for (j = 0; j < sum_size; j++)
+ lp->nextstate[sum_size - 1 - j] = lcau41_rules[i][j] - '0';
+ }
+ }
+}
+
+/* The following sometimes does not detect when there are multiple periodic
+ life forms side by side. */
+static int
+compare(ModeInfo * mi)
+{
+ life1dstruct *lp = &life1ds[MI_SCREEN(mi)];
+ int row, col, tryagain = False;
+ unsigned char *initl, *cmpr;
+
+ initl = lp->buffer + lp->row * lp->ncols;
+ for (row = lp->row - 1; row >= 0; row--) {
+ cmpr = lp->buffer + row * lp->ncols;
+ for (col = 0; col < lp->ncols; col++) {
+ tryagain = False;
+ if (*(initl + col) != *cmpr) {
+ tryagain = True;
+ break;
+ }
+ cmpr++;
+ }
+ if (!tryagain)
+ return True;
+ }
+ return False;
+}
+
+void
+init_life1d(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ int size = MI_SIZE(mi);
+ life1dstruct *lp;
+ int i;
+
+ if (life1ds == NULL) {
+ if ((life1ds = (life1dstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (life1dstruct))) == NULL)
+ return;
+ }
+ lp = &life1ds[MI_SCREEN(mi)];
+
+ lp->screen_generation = 0;
+ lp->row = 0;
+
+ if (totalistic) {
+ maxstates = MAXSTATES;
+ maxradius = 4;
+ maxsum_size = (maxstates - 1) * (maxradius * 2 + 1) + 1;
+ } else {
+ maxstates = MAXSTATES - 1;
+ maxradius = 1;
+ maxsum_size = power(maxstates, (2 * maxradius + 1));
+ }
+ if (lp->nextstate == NULL)
+ lp->nextstate = (char *) malloc(maxsum_size * sizeof (char));
+
+ if (!logo) {
+ getBitmap(&logo, CELL_WIDTH, CELL_HEIGHT, CELL_BITS,
+ &graphics_format);
+ }
+ if (lp->init_bits == 0) {
+ XGCValues gcv;
+
+ gcv.fill_style = FillOpaqueStippled;
+ lp->stippledGC = XCreateGC(display, window, GCFillStyle, &gcv);
+ for (i = 0; i < MAXSTATES; i++)
+ LIFE1DBITS(patterns[i], PATTERNSIZE, PATTERNSIZE);
+ }
+ if (lp->newcells != NULL)
+ (void) free((void *) lp->newcells);
+ if (lp->oldcells != NULL)
+ (void) free((void *) lp->oldcells);
+ if (lp->buffer != NULL)
+ (void) free((void *) lp->buffer);
+ lp->width = MI_WIN_WIDTH(mi);
+ lp->height = MI_WIN_HEIGHT(mi);
+ if (lp->width < 2)
+ lp->width = 2;
+ if (lp->height < 2)
+ lp->height = 2;
+ if (size == 0 ||
+ MINGRIDSIZE * size > lp->width || MINGRIDSIZE * size > lp->height) {
+ if (lp->width > MINGRIDSIZE * logo->width &&
+ lp->height > MINGRIDSIZE * logo->height) {
+ lp->pixelmode = False;
+ lp->xs = logo->width;
+ lp->ys = logo->height;
+ } else {
+ lp->pixelmode = True;
+ lp->xs = lp->ys = MAX(MINSIZE, MIN(lp->width, lp->height) / MINGRIDSIZE);
+ }
+ } else {
+ lp->pixelmode = True;
+ if (size < -MINSIZE)
+ lp->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(lp->width, lp->height) /
+ MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE)
+ lp->ys = MINSIZE;
+ else
+ lp->ys = MIN(size, MAX(MINSIZE, MIN(lp->width, lp->height) /
+ MINGRIDSIZE));
+ lp->xs = lp->ys;
+ }
+ lp->ncols = MAX(lp->width / lp->xs, 2);
+ lp->nrows = MAX(lp->height / lp->ys, 2);
+ lp->border = (lp->nrows / 2 + 1) * MI_CYCLES(mi);
+ lp->newcells = (unsigned char *) calloc(lp->ncols + 2 * lp->border,
+ sizeof (unsigned char));
+
+ lp->oldcells = (unsigned char *) calloc(lp->ncols +
+ 2 * (maxradius + lp->border), sizeof (unsigned char));
+
+ lp->buffer = (unsigned char *) calloc(lp->ncols * lp->nrows,
+ sizeof (unsigned char));
+
+ lp->xb = (lp->width - lp->xs * lp->ncols) / 2;
+ lp->yb = (lp->height - lp->ys * lp->nrows) / 2;
+
+ GetRule(lp, (int) NRAND((totalistic) ? TOTALISTICRULES : LCAURULES));
+ if (MI_WIN_IS_VERBOSE(mi)) {
+ (void) printf("colors %d, radius %d, code %ld, rule ",
+ lp->k, lp->r, lp->code);
+ if (totalistic)
+ for (i = (lp->k - 1) * (lp->r * 2 + 1); i >= 0; i--)
+ (void) printf("%d", (int) lp->nextstate[i]);
+ else
+ for (i = power(lp->k, (lp->r * 2 + 1)); i >= 0; i--)
+ (void) printf("%d", (int) lp->nextstate[i]);
+ (void) printf("\n");
+ }
+ if (MI_NPIXELS(mi) > 2)
+ for (i = 0; i < lp->k - 1; i++)
+ lp->colors[i] = (NRAND(MI_NPIXELS(mi)) + i * MI_NPIXELS(mi)) /
+ (lp->k - 1);
+ RandomSoup(lp, 40, 25);
+ (void) memcpy((char *) (lp->oldcells + maxradius + lp->border),
+ (char *) (lp->newcells + lp->border), lp->ncols);
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+}
+
+void
+draw_life1d(ModeInfo * mi)
+{
+ life1dstruct *lp = &life1ds[MI_SCREEN(mi)];
+ Display *display = MI_DISPLAY(mi);
+ int col;
+
+ if (lp->row == 0) {
+ lp->repeating = 0;
+ if (lp->screen_generation > MI_CYCLES(mi))
+ init_life1d(mi);
+
+ for (col = 0; col < lp->ncols; col++)
+ if (lp->buffer[col] != lp->newcells[col + lp->border])
+ drawcell(mi, col, 0, lp->newcells[col + lp->border]);
+ (void) memcpy((char *) lp->buffer, (char *) (lp->newcells + lp->border),
+ lp->ncols);
+ } else {
+ for (col = 0; col < lp->ncols + 2 * lp->border; col++) {
+ int sum = 0, m;
+
+ if (totalistic) {
+ for (m = col - lp->r; m <= col + lp->r; m++)
+ sum += lp->oldcells[m + maxradius];
+ } else {
+ int pow = 1;
+
+ for (m = col + lp->r; m >= col - lp->r; m--) {
+ sum += lp->oldcells[m + maxradius] * pow;
+ pow *= lp->k;
+ }
+ }
+ lp->newcells[col] = (unsigned char) lp->nextstate[sum];
+ }
+ (void) memcpy((char *) (lp->oldcells + maxradius),
+ (char *) lp->newcells, lp->ncols + 2 * lp->border);
+
+ for (col = 0; col < lp->ncols; col++) {
+ if (lp->buffer[col + lp->row * lp->ncols] !=
+ lp->newcells[col + lp->border])
+ drawcell(mi, col, lp->row, lp->newcells[col + lp->border]);
+ }
+ (void) memcpy((char *) (lp->buffer + lp->row * lp->ncols),
+ (char *) (lp->newcells + lp->border), lp->ncols);
+ {
+ int temp = compare(mi);
+
+ if (temp)
+ lp->repeating += temp;
+ else
+ lp->repeating = 0;
+ }
+ lp->repeating += (lp->row == lp->nrows - 1) ? REPEAT * compare(mi) : 0;
+ }
+ if (lp->repeating >= 1) {
+ XGCValues gcv;
+
+ gcv.stipple = lp->pixmaps[MAXSTATES - 1];
+ gcv.fill_style = FillStippled;
+ gcv.foreground = MI_WIN_BLACK_PIXEL(mi);
+ XChangeGC(MI_DISPLAY(mi), lp->stippledGC,
+ GCStipple | GCFillStyle | GCForeground, &gcv);
+ XFillRectangle(display, MI_WINDOW(mi), lp->stippledGC,
+ 0, lp->yb + lp->ys * lp->row,
+ lp->width, lp->ys);
+ }
+ lp->row++;
+ if (lp->repeating >= REPEAT) {
+ if (lp->row < lp->nrows) {
+ XSetForeground(display, MI_GC(mi), MI_WIN_BLACK_PIXEL(mi));
+ XFillRectangle(display, MI_WINDOW(mi), MI_GC(mi),
+ 0, lp->yb + lp->ys * lp->row,
+ lp->width, lp->height - lp->ys * lp->row - lp->yb);
+ }
+ lp->screen_generation = MI_CYCLES(mi);
+ lp->row = lp->nrows;
+ }
+ if (lp->row >= lp->nrows) {
+ lp->screen_generation++;
+ MI_PAUSE(mi) = 2000000;
+ lp->row = 0;
+ }
+}
+
+void
+release_life1d(ModeInfo * mi)
+{
+ if (life1ds != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ life1dstruct *lp = &life1ds[screen];
+ int shade;
+
+ if (lp->stippledGC != NULL) {
+ XFreeGC(MI_DISPLAY(mi), lp->stippledGC);
+ }
+ if (lp->init_bits != 0) {
+ for (shade = 0; shade < MAXSTATES; shade++)
+ XFreePixmap(MI_DISPLAY(mi), lp->pixmaps[shade]);
+ }
+ if (lp->newcells != NULL)
+ (void) free((void *) lp->newcells);
+ if (lp->oldcells != NULL)
+ (void) free((void *) lp->oldcells);
+ if (lp->buffer != NULL)
+ (void) free((void *) lp->buffer);
+ if (lp->nextstate != NULL)
+ (void) free((void *) lp->nextstate);
+ }
+ (void) free((void *) life1ds);
+ life1ds = NULL;
+ }
+ destroyBitmap(&logo, &graphics_format);
+}
+
+void
+refresh_life1d(ModeInfo * mi)
+{
+ life1dstruct *lp = &life1ds[MI_SCREEN(mi)];
+ int row, col, nrow;
+
+ for (row = 0; row < lp->nrows; row++) {
+ nrow = row * lp->ncols;
+ for (col = 0; col < lp->ncols; col++)
+ drawcell(mi, col, row, lp->buffer[col + nrow]);
+ }
+}
--- /dev/null
+./bitmaps/t-x11.xbm
\ No newline at end of file
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)life3d.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * life3d.c - Extension to Conway's game of Life, Carter Bays' 4555 3d life,
+ * for xlock, the X Window System lockscreen.
+ *
+ * Copyright (c) 1994 by David Bagley.
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 18-Apr-97: Memory leak fixed by Tom Schmidt <tschmidt@micron.com>
+ * 12-Mar-95: added LIFE_5766 compile-time option
+ * 12-Feb-95: shooting gliders added
+ * 07-Dec-94: used life.c and a DOS version of 3dlife
+ * Copyright 1993 Anthony Wesley awesley@canb.auug.org.au found at
+ * life.anu.edu.au /pub/complex_systems/alife/3DLIFE.ZIP
+ * There is some flashing that was not in the original. This is because
+ * the direct video memory access garbage collection was not portable.
+ *
+ *
+ * References:
+ * Dewdney, A.K., "The Armchair Universe, Computer Recreations from the
+ * Pages of Scientific American Magazine", W.H. Freedman and Company,
+ * New York, 1988 (February 1987 p 16)
+ * Bays, Carter, "The Game of Three Dimensional Life", 86/11/20
+ * with (latest?) update from 87/2/1
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Life3D"
+#define HACK_INIT init_life3d
+#define HACK_DRAW draw_life3d
+#define DEF_DELAY 1000000
+#define DEF_BATCHCOUNT 35
+#define DEF_CYCLES 85
+#define DEF_NCOLORS 200
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+
+#endif /* STANDALONE */
+
+#define ON 0x40
+#define OFF 0
+
+/* Don't change these numbers without changing the offset() macro below! */
+#define MAXSTACKS 64
+#define MAXROWS 128
+#define MAXCOLUMNS 128
+#define BASESIZE ((MAXCOLUMNS*MAXROWS*MAXSTACKS)>>6)
+
+#define RT_ANGLE 90
+#define HALFRT_ANGLE 45
+/* Store state of cell in top bit. Reserve low bits for count of living nbrs */
+#define Set3D(x,y,z) SetMem(lp,(unsigned int)x,(unsigned int)y,(unsigned int)z,ON)
+#define Reset3D(x,y,z) SetMem(lp,(unsigned int)x,(unsigned int)y,(unsigned int)z,OFF)
+
+#define SetList3D(x,y,z) SetMem(lp,(unsigned int)x,(unsigned int)y,(unsigned int)z,ON), AddToList(lp,(unsigned int)x,(unsigned int)y,(unsigned int)z)
+
+#define CellState3D(c) ((c)&ON)
+#define CellNbrs3D(c) ((c)&0x1f) /* 26 <= 31 */
+
+#define EyeToScreen 72.0 /* distance from eye to screen */
+#define HalfScreenD 14.0 /* 1/2 the diameter of screen */
+#define BUCKETSIZE 10
+#define NBUCKETS ((MAXCOLUMNS+MAXROWS+MAXSTACKS)*BUCKETSIZE)
+#define Distance(x1,y1,z1,x2,y2,z2) sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(z1-z2)*(z1-z2))
+
+#define IP 0.0174533
+
+#define COLORBASE 3
+#define COLORS (COLORBASE + 2)
+#define COLORSTEP (NUMCOLORS/COLORBASE) /* 21 different colors per side */
+
+#define BLACK 0
+#define RED 1
+#define GREEN 2
+#define BLUE 3
+#define WHITE 4
+#define NUMPTS 42
+
+/* #define DEF_RULE3D "0" */
+#define DEF_RULE3D "1"
+/* #define DEF_RULE3D "4555" */
+/* #define DEF_RULE3D "5766" */
+
+static int rule3d;
+
+#ifndef STANDALONE
+static XrmOptionDescRec opts[] =
+{
+ {"-rule3d", ".life3d.rule3d", XrmoptionSepArg, (caddr_t) NULL},
+};
+static argtype vars[] =
+{
+ {(caddr_t *) & rule3d, "rule3d", "Rule3D", DEF_RULE3D, t_Int}
+};
+static OptionStruct desc[] =
+{
+ {"-rule3d num", "<living_min><living_max><birth_min><birth_max> parameters"}
+};
+
+ModeSpecOpt life3d_opts =
+{1, opts, 1, vars, desc};
+
+#endif /* STANDALONE */
+
+typedef struct _CellList {
+ unsigned char x, y, z; /* Location in world coordinates */
+ char visible; /* 1 if the cube is to be displayed */
+ short dist; /* dist from cell to eye */
+ struct _CellList *next; /* pointer to next entry on linked list */
+ struct _CellList *prev;
+ struct _CellList *priority;
+} CellList;
+
+typedef struct {
+ int living_min, living_max, birth_min, birth_max;
+ int pattern, patterned_rule;
+ int rule3d;
+ int initialized;
+ int wireframe; /* FALSE */
+ int ox, oy, oz; /* origin */
+ double vx, vy, vz; /* viewpoint */
+ int generation;
+ int nstacks, nrows, ncolumns;
+ int memstart;
+ char visible;
+ unsigned char *base[BASESIZE];
+ double A, B, C, F;
+ int width, height;
+ unsigned long color[COLORS];
+ int alt, azm;
+ double dist;
+ CellList *ptrhead, *ptrend, eraserhead, eraserend;
+ CellList *buckethead[NBUCKETS], *bucketend[NBUCKETS]; /* comfortable upper b */
+} life3dstruct;
+
+
+static life3dstruct *life3ds = NULL;
+
+static int DrawCube(ModeInfo * mi, CellList * cell);
+
+/* 4555 life is probably the best */
+/* 5766 life has gliders like 2d 2333 life */
+/* There are no known gliders for 5655 or 6767 so the others may be better */
+#define LIFE_4555 0
+#define LIFE_5766 1
+#define LIFE_GLIDERS 2
+#define LIFE_5655 2
+#define LIFE_6767 3
+#define LIFE_RULES 4
+
+static char patterns_4555[][3 * NUMPTS + 1] =
+{
+#if 0
+/* Still life */
+ { /* V */
+ -1, -1, -1, 0, -1, -1,
+ -1, 0, -1, 0, 0, -1,
+
+ -1, -1, 0, 0, -1, 0,
+ 127
+ },
+ { /* CROSS */
+ 0, 0, -1,
+
+ 0, -1, 0,
+ -1, 0, 0, 1, 0, 0,
+ 0, 1, 0,
+
+ 0, 0, 1,
+ 127
+ },
+ { /* PILLAR */
+ 0, -1, -1,
+ -1, 0, -1, 1, 0, -1,
+ 0, 1, -1,
+
+ 0, -1, 0,
+ -1, 0, 0, 1, 0, 0,
+ 0, 1, 0,
+ 127
+ },
+#endif
+ { /* BLINKER P2 */
+ 0, 0, -1,
+
+ 0, -1, 0,
+ -1, 0, 0, 1, 0, 0,
+ 0, 1, 0,
+
+ -1, 0, 1, 1, 0, 1,
+ 127
+ },
+ { /* DOUBLE BLINKER P2 */
+ 0, -1, -1,
+ 0, 1, -1,
+
+ 0, -1, 0,
+ -1, 0, 0, 1, 0, 0,
+ 0, 1, 0,
+
+ -1, 0, 1, 1, 0, 1,
+ 127
+ },
+ { /* TRIPLE BLINKER 1 P2 */
+ -1, -1, -2,
+ -1, 0, -2,
+
+ -2, -1, -1,
+ 1, 0, -1,
+ -1, 1, -1, 0, 1, -1,
+
+ -1, -2, 0, 0, -2, 0,
+ -2, -1, 0, 1, 0, 0,
+
+ 0, -1, 1,
+ 0, 0, 1,
+ 127
+ },
+ { /* TRIPLE BLINKER 2 P2 */
+ -1, -1, -2, 0, -1, -2,
+
+ 0, -2, -1,
+ 1, -1, -1,
+ 1, 0, -1,
+ -1, 1, -1,
+
+ 0, -2, 0,
+ -2, -1, 0,
+ -2, 0, 0,
+ -1, 1, 0,
+
+ -1, 0, 1, 0, 0, 1,
+ 127
+ },
+ { /* THREE HALFS BLINKER P2 */
+ 0, -1, -1,
+ -1, 0, -1, 1, 0, -1,
+
+ -1, -1, 0,
+ 1, 0, 0,
+ -1, 1, 0, 0, 1, 0,
+
+ 0, -1, 1,
+ 0, 0, 1,
+ 127
+ },
+ { /* PUFFER P4 */
+ 0, -1, -1,
+ 0, 0, -1,
+
+ 0, -2, 0,
+ -1, -1, 0, 1, -1, 0,
+ -1, 0, 0, 1, 0, 0,
+ 0, 1, 0,
+ 127
+ },
+ { /* PINWHEEL P4 */
+ -1, 1, -1, 0, 1, -1,
+
+ -1, -1, 0, 0, -1, 0,
+ -2, 0, 0, 1, 0, 0,
+
+ -1, 0, 1, 0, 0, 1,
+ -1, 1, 1, 0, 1, 1,
+ 127
+ },
+ { /* HEART P4 */
+ -1, -1, -1,
+ -1, 0, -1, 0, 0, -1,
+
+ 0, -1, 0,
+ -2, 0, 0, 1, 0, 0,
+
+ -1, -1, 1,
+ -1, 1, 1, 0, 1, 1,
+ 127
+ },
+ { /* ARROW P4 */
+ 0, -1, -1,
+ 0, 0, -1,
+
+ 0, -2, 0,
+ 1, -1, 0,
+ 1, 0, 0,
+ 0, 1, 0,
+
+ -1, -1, 1,
+ -1, 0, 1,
+ 127
+ },
+ { /* ROTOR P2 */
+ 0, -1, -1,
+ 0, 0, -1,
+
+ 0, -2, 0,
+ -1, -1, 0, 1, -1, 0,
+ -1, 0, 0, 1, 0, 0,
+ 0, 1, 0,
+
+ 0, -1, 1,
+ 0, 0, 1,
+ 127
+ },
+ { /* BRONCO P4 */
+ 0, -1, -1,
+ 0, 0, -1,
+
+ 0, -2, 0,
+ -1, -1, 0, 1, -1, 0,
+ -1, 0, 0, 1, 0, 0,
+ 0, 1, 0,
+
+ -1, -1, 1,
+ -1, 0, 1,
+ 127
+ },
+ { /* TRIPUMP P2 */
+ 0, -2, -2,
+ -2, -1, -2, -1, -1, -2, 0, -1, -2,
+
+ 0, -2, -1,
+ -2, 0, -1,
+ -2, 1, -1, -1, 1, -1,
+
+ 1, -2, 0,
+ 1, -1, 0,
+ 1, 0, 0,
+ -1, 1, 0,
+
+ 0, 0, 1, 1, 0, 1,
+ -1, 1, 1,
+ 127
+ },
+ { /* WINDSHIELDWIPER (HELICOPTER) P2 */
+ -2, -1, -2, -1, -1, -2,
+ 0, 0, -2,
+
+ -1, -2, -1,
+ -2, -1, -1,
+ 1, 0, -1,
+ -1, 1, -1, 0, 1, -1, 1, 1, -1,
+
+ 0, -2, 0,
+ -2, -1, 0, 1, -1, 0,
+
+ 0, -2, 1,
+ 0, -1, 1,
+ 0, 0, 1,
+ 127
+ },
+ { /* WALTZER P6 */
+ -2, -1, -1, -1, -1, -1, 0, -1, -1,
+ -2, 0, -1,
+ -1, 1, -1, 0, 1, -1,
+
+ -2, -1, 0,
+ -2, 0, 0, 1, 0, 0,
+ 1, 1, 0,
+
+ -1, 0, 1, 0, 0, 1,
+ 0, 1, 1,
+ 127
+ },
+ { /* BIG WALTZER P6 */
+ 0, -1, -1, 1, -1, -1,
+ -1, 0, -1, 0, 0, -1,
+ -1, 1, -1,
+
+ 0, -2, 0, 1, -2, 0,
+ -2, 0, 0,
+ -2, 1, 0,
+
+ 0, -1, 1, 1, -1, 1,
+ -1, 0, 1, 0, 0, 1,
+ -1, 1, 1,
+ 127
+ },
+ { /* SEESAW P2 */
+ 0, 0, -2,
+
+ -2, -1, -1, -1, -1, -1,
+ -2, 0, -1,
+ 0, 1, -1,
+
+ -1, -1, 0,
+ 1, 0, 0,
+ 0, 1, 0, 1, 1, 0,
+
+ -1, 0, 1,
+ 127
+ },
+ { /* COLLISION -> REDIRECTION */
+ -3, 5, -7, 0, 5, -7,
+ -3, 4, -7, 0, 4, -7,
+ -2, 3, -7, -1, 3, -7,
+
+ -2, 5, -6, -1, 5, -6,
+ -2, 4, -6, -1, 4, -6,
+
+ 1, -2, 1,
+
+ 1, -3, 2,
+ 0, -2, 2, 2, -2, 2,
+ 1, -1, 2,
+
+ 0, -2, 3, 2, -2, 3,
+ 127
+ },
+ { /* COLLISION -> SEESAW P2 */
+ -4, -6, -7, -1, -6, -7,
+ -4, -5, -7, -1, -5, -7,
+ -3, -4, -7, -2, -4, -7,
+
+ -3, -6, -6, -2, -6, -6,
+ -3, -5, -6, -2, -5, -6,
+
+ 1, 4, 6, 2, 4, 6,
+ 0, 5, 6, 3, 5, 6,
+ 0, 6, 6, 3, 6, 6,
+
+ 1, 5, 5, 2, 5, 5,
+ 1, 6, 5, 2, 6, 5,
+ 127
+ }
+};
+
+static char patterns_5766[][3 * NUMPTS + 1] =
+{
+ { /* KNIFE-SWITCH BLINKER */
+ 0, -1, -1,
+ -1, 0, -1, 0, 0, -1, 1, 0, -1,
+
+ 0, -1, 0,
+ -1, 0, 0, 1, 0, 0,
+ 0, 0, 1,
+ 127,
+ },
+ { /* CLOCK */
+ 0, -1, -2,
+ 0, 0, -2,
+
+ -2, -1, -1, 0, -1, -1,
+ -2, 0, -1, 0, 0, -1,
+
+ -1, -1, 0, 1, -1, 0,
+ -1, 0, 0, 1, 0, 0,
+
+ -1, -1, 1,
+ -1, 0, 1,
+ 127,
+ },
+ { /* HALF BLINKERS */
+ 0, -1, -2,
+ 0, 0, -2,
+
+ -1, -1, -1, 1, -1, -1,
+ -1, 0, -1, 1, 0, -1,
+ 0, 1, -1,
+
+ -1, -2, 0, 0, -2, 0, 1, -2, 0,
+ -2, -1, 0, 2, -1, 0,
+ -2, 0, 0, 2, 0, 0,
+ 0, 1, 0,
+
+ -1, -1, 1, 1, -1, 1,
+ -1, 0, 1, 1, 0, 1,
+ 0, 1, 1,
+
+ 0, -1, 2,
+ 0, 0, 2,
+ 127,
+ },
+ { /* MUTANT HALF BLINKERS */
+ 0, -1, -2,
+ 0, 0, -2,
+
+ 0, -2, -1,
+ -1, -1, -1, 1, -1, -1,
+ -1, 0, -1, 1, 0, -1,
+ 0, 1, -1,
+
+ -1, -2, 0, 1, -2, 0,
+ -2, -1, 0, 2, -1, 0,
+ -2, 0, 0, 2, 0, 0,
+ 0, 1, 0,
+
+ 0, -2, 1, 1, -2, 1,
+ -1, -1, 1, 2, -1, 1,
+ -1, 0, 1, 2, 0, 1,
+ 0, 1, 1,
+
+ 0, -1, 2, 1, -1, 2,
+ 0, 0, 2,
+ 127,
+ },
+ { /* FUSE */
+ 0, 0, 4,
+
+ 0, 0, 3,
+
+ 0, -2, 2,
+ -1, -1, 2, 1, -1, 2,
+ -2, 0, 2, 2, 0, 2,
+ -1, 1, 2, 1, 1, 2,
+ 0, 2, 2,
+
+ 0, -2, 1,
+ -1, -1, 1, 1, -1, 1,
+ -2, 0, 1, 2, 0, 1,
+ -1, 1, 1, 1, 1, 1,
+ 0, 2, 1,
+
+ 0, 0, 0,
+
+ 0, 0, -1,
+
+ 0, -2, -2,
+ -1, -1, -2, 1, -1, -2,
+ -2, 0, -2, 2, 0, -2,
+ -1, 1, -2, 1, 1, -2,
+ 0, 2, -2,
+
+ 0, -2, -3,
+ -1, -1, -3, 1, -1, -3,
+ -2, 0, -3, 2, 0, -3,
+ -1, 1, -3, 1, 1, -3,
+ 0, 2, -3,
+
+ -1, 0, -4, 0, 0, -4, 1, 0, -4,
+ 127,
+ },
+ { /* 2 PTS OF STAR OF DAVID */
+ 1, 0, -3, 2, 0, -3,
+
+ 1, -1, -2, 2, -1, -2,
+ 0, 0, -2,
+ 1, 1, -2, 2, 1, -2,
+
+ 1, 0, -1, 2, 0, -1,
+
+ -2, 0, 0, 0, 0, 0,
+
+ -2, -1, 1,
+ -3, 0, 1, -1, 0, 1,
+ -2, 1, 1,
+
+ -2, -1, 2,
+ -3, 0, 2, -1, 0, 2,
+ -2, 1, 2,
+ 127,
+ },
+ { /* TRIPLE BLINKER 1 */
+ 0, -1, -2,
+ 0, 0, -2,
+
+ -1, -1, -1, 1, -1, -1,
+ -2, 0, -1,
+ -1, 1, -1, 0, 1, -1,
+
+ -1, -2, 0, 0, -2, 0,
+ 1, -1, 0,
+ -2, 0, 0, 0, 0, 0,
+
+ -1, -1, 1,
+ -1, 0, 1,
+ 127,
+ },
+ { /* TRIPLE BLINKER 2 */
+ -1, -1, -2, 0, -1, -2,
+
+ -1, -2, -1,
+ -2, -1, -1, -1, -1, -1,
+ -2, 0, -1,
+ 0, 1, -1,
+
+ -1, -2, 0,
+ 1, -1, 0,
+ 0, 0, 0, 1, 0, 0,
+ 0, 1, 0,
+
+ -1, 0, 1, 0, 0, 1,
+ 127,
+ },
+ { /* TRIKNOT */
+ 0, 0, -1, 1, 0, -1,
+
+ -1, -1, 0, 0, -1, 0,
+ -1, 0, 0, 1, 0, 0,
+ 0, 1, 0,
+
+ 0, 0, 1,
+ 0, 1, 1,
+ 127,
+ },
+ { /* SEARCHLIGHT */
+ -1, -1, -2, 0, -1, -2,
+ -1, 0, -2, 0, 0, -2,
+
+ -1, -2, -1, 0, -2, -1,
+ -2, -1, -1, 1, -1, -1,
+ -2, 0, -1, 1, 0, -1,
+ 0, 1, -1,
+
+ -1, -2, 0, 0, -2, 0,
+ 1, -1, 0,
+ -1, 0, 0, 1, 0, 0,
+ 0, 1, 0,
+
+ -1, -1, 1, 0, -1, 1,
+ 127,
+ },
+ { /* POLE DRIVER */
+ -1, -1, -1, 0, -1, -1,
+ -1, 0, -1, 1, 0, -1,
+ 0, 1, -1, 1, 1, -1,
+
+ 0, -1, 0,
+ -1, 0, 0, 1, 0, 0,
+ 0, 1, 0,
+
+ 0, 0, 1,
+ 127,
+ },
+ { /* LITTLE STAR */
+ 0, -1, -1,
+ -1, 0, -1, 1, 0, -1,
+ -1, 1, -1, 0, 1, -1, 1, 1, -1,
+
+ -1, -1, 0, 1, -1, 0,
+ -1, 1, 0, 1, 1, 0,
+
+ -1, -1, 1, 0, -1, 1, 1, -1, 1,
+ -1, 0, 1, 1, 0, 1,
+ 0, 1, 1,
+ 127,
+ },
+ { /* JAWS */
+ 0, -1, -2,
+ -1, 0, -2, 1, 0, -2,
+ 0, 1, -2,
+
+ 0, -2, -1,
+ -1, -1, -1, 1, -1, -1,
+ -1, 0, -1, 2, 0, -1,
+ 0, 1, -1, 1, 1, -1,
+
+ -1, -2, 0, 1, -2, 0,
+ -1, -1, 0, 2, -1, 0,
+ 1, 1, 0, 2, 1, 0,
+
+ 0, -2, 1,
+ 0, -1, 1, 1, -1, 1,
+ 1, 0, 1, 2, 0, 1,
+
+ -2, 1, 1,
+ -2, 2, 1, -1, 2, 1,
+
+ -2, 1, 2, -1, 1, 2,
+ -2, 2, 2, -1, 2, 2,
+ 127,
+ },
+ { /* NEAR SHIP */
+ -2, -1, -2, -1, -1, -2,
+ -2, 0, -2, -1, 0, -2,
+
+ -2, -1, -1, -1, -1, -1,
+ -2, 0, -1, -1, 0, -1,
+
+ 0, -1, 0,
+ 0, 0, 0,
+
+ -2, -1, 1, -1, -1, 1,
+ -2, 0, 1, -1, 0, 1,
+
+ -2, -1, 2, -1, -1, 2,
+ -2, 0, 2, -1, 0, 2,
+ 127
+ }
+};
+
+/* Many names of 5655 & 6767 are made up by bagleyd They are listed in order
+ given by Carter Bays all p2 except "H" */
+static char patterns_5655[][3 * NUMPTS + 1] =
+{
+ { /* SEESAW */
+ 0, -1, -1,
+ -1, 0, -1, 0, 0, -1,
+
+ 0, 0, 0, 1, 0, 0,
+ 0, 1, 0,
+ 127
+ },
+ { /* PROP */
+ -1, 0, -1, 0, 0, -1, 1, 0, -1,
+
+ 0, -1, 0,
+ 0, 0, 0,
+ 0, 1, 0,
+ 127
+ },
+ { /* */
+ -1, 0, -1, 0, 0, -1,
+
+ 0, -1, 0,
+ 0, 0, 0, 1, 0, 0,
+ 0, 1, 0,
+ 127
+ },
+ { /* COLUMN */
+ 0, 0, -6,
+
+ 0, 0, -5,
+
+ 0, -1, -4,
+ -1, 0, -4, 0, 0, -4, 1, 0, -4,
+ 0, 1, -4,
+
+ 0, -1, -1,
+ -1, 0, -1, 0, 0, -1, 1, 0, -1,
+ 0, 1, -1,
+
+ 0, 0, 0,
+
+ 0, 0, 1,
+
+ 0, 0, 2,
+
+ 0, 0, 3,
+
+ 0, -1, 4,
+ -1, 0, 4, 0, 0, 4, 1, 0, 4,
+ 0, 1, 4,
+ 127
+ },
+ { /* FLIPPING C */
+ -1, 0, -1, 1, 0, -1,
+
+ -1, 0, 0, 0, 0, 0, 1, 0, 0,
+ 127
+ },
+ { /* SLIDING BLOCKS */
+ -1, 0, -1, 0, 0, -1,
+ -1, 1, -1, 0, 1, -1,
+
+ -1, -1, 0, 0, -1, 0,
+ 0, 0, 0,
+ 127
+ },
+ { /* */
+ -1, -1, -1,
+ -1, 1, -1,
+
+ -1, 0, 0, 0, 0, 0, 1, 0, 0,
+
+ -1, -1, 1,
+ -1, 1, 1,
+ 127
+ },
+ { /* Y */
+ 1, -1, -1,
+ -1, 0, -1,
+ 0, 1, -1,
+
+ 1, -1, 0,
+ -1, 0, 0, 0, 0, 0,
+ 0, 1, 0,
+ 127
+ },
+ { /* PUMP */
+ 0, -1, -1,
+ -1, 0, -1, 1, 0, -1,
+ 0, 1, -1,
+
+ -1, -1, 0, 0, -1, 0,
+ -1, 0, 0, 1, 0, 0,
+ 0, 1, 0, 1, 1, 0,
+ 127
+ },
+ { /* WALKER */
+ -1, -1, -1, 0, -1, -1,
+ 1, 0, -1,
+
+ 0, -1, 0, 1, -1, 0,
+ -1, 0, 0, 0, 0, 0,
+ 127
+ },
+ { /* SWITCH */
+ 2, -1, -2,
+ 1, 0, -2, 2, 0, -2,
+
+ 1, -1, -1, 2, -1, -1,
+ 1, 0, -1,
+
+ 1, 0, 0,
+
+ -1, -1, 1,
+ -2, 0, 1, -1, 0, 1, 0, 0, 1,
+
+ -2, -1, 2, -1, -1, 2,
+ -2, 0, 2,
+ 127
+ },
+ { /* HOPPER */
+ -1, -1, -1, 0, -1, -1, 1, -1, -1,
+
+ 0, -1, 0,
+ -1, 0, 0, 0, 0, 0, 1, 0, 0,
+ 127
+ },
+ { /* PUSHUPS */
+ -1, -2, -2,
+
+ -1, -2, -1, 0, -2, -1,
+ -1, -1, -1, 0, -1, -1,
+
+ -1, 0, 0, 0, 0, 0,
+
+ -1, 0, 1, 0, 0, 1,
+ -1, 1, 1,
+ 127
+ },
+ { /* PUSHER */
+ 0, -2, -2,
+ 0, -1, -2,
+
+ -1, -2, -1,
+ -1, -1, -1, 0, -1, -1,
+
+ -1, 0, 0, 0, 0, 0,
+ 0, 1, 0,
+
+ -1, 0, 1,
+ 0, 1, 1,
+ 127
+ },
+ { /* CAPACITOR */
+ 0, -1, -2,
+ -1, 0, -2, 0, 0, -2,
+
+ 0, 0, -1, 1, 0, -1,
+ 0, 1, -1, 1, 1, -1,
+
+ 0, 0, 1, 1, 0, 1,
+ 0, 1, 1, 1, 1, 1,
+
+ 0, -1, 2,
+ -1, 0, 2, 0, 0, 2,
+ 127
+ },
+ { /* CORNER 1 */
+ -1, -3, -3,
+ -1, -2, -3, 0, -2, -3,
+ 1, -1, -3,
+ 1, 0, -3, 2, 0, -3,
+
+ -1, -3, -2,
+ 0, -2, -2,
+ 1, -1, -2,
+ 2, 0, -2,
+
+ -3, -3, -1, -2, -3, -1,
+ -3, -2, -1,
+ 2, 1, -1,
+ 1, 2, -1, 2, 2, -1,
+
+ -3, -2, 0, -2, -2, 0,
+ 1, 1, 0,
+ 1, 2, 0,
+
+ -3, -1, 1, -2, -1, 1,
+ -3, 0, 1,
+ 0, 1, 1,
+ -1, 2, 1, 0, 2, 1,
+
+ -3, 0, 2, -2, 0, 2,
+ -1, 1, 2,
+ -1, 2, 2,
+ 127
+ },
+ { /* CORNER 2 */
+ -2, -2, -3, -1, -2, -3,
+ -2, -1, -3,
+ 2, 1, -3,
+ 1, 2, -3, 2, 2, -3,
+
+ -3, -2, -2, -1, -2, -2,
+ -3, -1, -2, 0, -1, -2,
+ 1, 0, -2,
+ 2, 1, -2,
+ 1, 3, -2, 2, 3, -2,
+
+ -3, -2, -1, -2, -2, -1,
+ 0, -1, -1,
+ 1, 0, -1,
+ 2, 2, -1,
+ 2, 3, -1,
+
+ -2, -1, 0, -1, -1, 0,
+ 1, 1, 0,
+ 1, 2, 0,
+
+ -2, 0, 1, -1, 0, 1,
+ 0, 1, 1,
+ -3, 2, 1, 0, 2, 1,
+ -2, 3, 1,
+
+ -3, 1, 2, -2, 1, 2,
+ -3, 2, 2, -1, 2, 2,
+ -2, 3, 2, -1, 3, 2,
+ 127
+ },
+ { /* RUNNER */
+ -1, -2, -1, 0, -2, -1,
+ 0, -1, -1,
+
+ -1, -1, 0, 0, -1, 0,
+
+ -1, 0, 1, 0, 0, 1,
+ 0, 1, 1,
+
+ -1, 1, 2, 0, 1, 2,
+ 127
+ },
+ { /* BACKWARDS RUNNER */
+ -1, -2, -1, 0, -2, -1,
+ 0, -1, -1,
+
+ -1, -1, 0, 0, -1, 0,
+
+ -1, 0, 1, 0, 0, 1,
+ -1, 1, 1,
+
+ -1, 0, 2, 0, 0, 2,
+ 127
+ },
+ { /* FLIPPING H */
+ -1, 0, -1, 1, 0, -1,
+
+ -1, 0, 0, 0, 0, 0, 1, 0, 0,
+
+ -1, 0, 1, 1, 0, 1,
+ 127
+ },
+ { /* EAGLE */
+ 0, -2, -1, 1, -2, -1,
+ 0, -1, -1, 1, -1, -1,
+ 0, 1, -1, 1, 1, -1,
+ 0, 2, -1, 1, 2, -1,
+
+ 0, -1, 0,
+ -1, 0, 0,
+ 0, 1, 0,
+ 127
+ },
+ { /* VARIANT 1 */
+ 1, -1, -2,
+ 0, 0, -2,
+
+ 0, -1, -1,
+ 0, 0, -1, 1, 0, -1,
+
+ -1, -1, 0,
+
+ 0, -1, 1,
+ 0, 0, 1, 1, 0, 1,
+
+ 1, -1, 2,
+ 0, 0, 2,
+ 127
+ },
+ { /* VARIANT 2 */
+ 0, -1, -2,
+ 1, 0, -2,
+
+ 0, -1, -1, 1, -1, -1,
+ 0, 0, -1,
+
+ -1, 0, 0,
+
+ 0, -1, 1,
+ 0, 0, 1, 1, 0, 1,
+
+ 1, -1, 2,
+ 0, 0, 2,
+ 127
+ },
+ { /* VARIANT 3 */
+ 1, -1, -2,
+ 0, 0, -2,
+
+ 0, -1, -1, 1, -1, -1,
+ 0, 0, -1,
+
+ -1, -1, 0,
+
+ 0, -1, 1,
+ 0, 0, 1, 1, 0, 1,
+
+ 1, -1, 2,
+ 0, 0, 2,
+ 127
+ },
+ { /* VARIANT 4 */
+ 1, -1, -2,
+ 0, 0, -2,
+
+ 0, -1, -1, 1, -1, -1,
+ 0, 0, -1,
+
+ -1, 0, 0,
+
+ 0, -1, 1,
+ 0, 0, 1, 1, 0, 1,
+
+ 1, -1, 2,
+ 0, 0, 2,
+ 127
+ },
+ { /* SQUID */
+ -2, -1, -2, -1, -1, -2,
+ 1, 1, -2,
+ 1, 2, -2,
+
+ -2, -1, -1, -1, -1, -1, 0, -1, -1,
+ 1, 0, -1,
+ 1, 1, -1,
+ 1, 2, -1,
+
+ -1, -1, 0,
+ 1, 1, 0,
+
+ -1, 0, 1,
+ -2, 1, 1, -1, 1, 1, 0, 1, 1,
+ -2, 2, 1, -1, 2, 1,
+ 127
+ },
+ { /* ROWER */
+ 0, 1, -2,
+
+ -1, -1, -1, 1, -1, -1,
+ -2, 0, -1, -1, 0, -1, 1, 0, -1, 2, 0, -1,
+
+ -1, 0, 0, 1, 0, 0,
+ -1, 1, 0, 1, 1, 0,
+
+ 0, -1, 1,
+ 127
+ },
+ { /* FLIP */
+ -1, -2, -2,
+ 0, -1, -2,
+ 0, 0, -2,
+
+ -1, -2, -1,
+ -2, -1, -1, 1, -1, -1,
+ 1, 0, -1,
+ 1, 1, -1,
+
+ -1, -2, 0,
+ -2, -1, 0,
+ -1, 1, 0, 0, 1, 0,
+
+ -2, 0, 1, -1, 0, 1, 0, 0, 1,
+ 127
+ }
+};
+static char patterns_6767[][3 * NUMPTS + 1] =
+{
+ { /* WALKING BOX */
+ -1, -1, -2,
+ 0, 0, -2,
+
+ -1, -2, -1, 0, -2, -1,
+ -2, -1, -1, 1, -1, -1,
+ -2, 0, -1, 1, 0, -1,
+ -1, 1, -1, 0, 1, -1,
+
+ -1, -2, 0, 0, -2, 0,
+ -2, -1, 0, 1, -1, 0,
+ -2, 0, 0, 1, 0, 0,
+ -1, 1, 0, 0, 1, 0,
+
+ -1, -1, 1,
+ 0, 0, 1,
+ 127
+ },
+ { /* WALKER */
+ 0, -1, -1,
+ -1, 0, -1,
+
+ -1, -1, 0, 0, -1, 0,
+ -1, 0, 0, 0, 0, 0,
+
+ 0, -1, 1,
+ -1, 0, 1,
+ 127
+ },
+ { /* S */
+ -1, -1, -1, 0, -1, -1,
+ -1, 0, -1, 0, 0, -1,
+
+ -1, 0, 0, 0, 0, 0,
+ -1, 1, 0, 0, 1, 0,
+ 127
+ },
+ { /* BACKWARDS ARROW */
+ -1, 0, -1, 0, 0, -1,
+
+ -1, 0, 0, 0, 0, 0,
+ -1, 1, 0, 0, 1, 0,
+
+ -1, -1, 1, 0, -1, 1,
+ 127
+ },
+ { /* SPINING BOX */
+ -1, -1, -2, 0, -1, -2,
+ -1, 0, -2, 0, 0, -2,
+
+ 0, -2, -1,
+ -2, -1, -1, 1, -1, -1,
+ -2, 0, -1,
+ -1, 1, -1, 0, 1, -1,
+
+ -1, -2, 0, 0, -2, 0,
+ -2, -1, 0, 1, -1, 0,
+ -2, 0, 0, 1, 0, 0,
+ -1, 1, 0, 0, 1, 0,
+
+ -1, -1, 1, 0, -1, 1,
+ 0, 0, 1,
+ 127
+ },
+ { /* FLIPPING T */
+ 0, 0, -1,
+
+ 0, 0, 0,
+
+ 0, -1, 1,
+ -1, 0, 1, 0, 0, 1, 1, 0, 1,
+ -1, 1, 1, 0, 1, 1,
+ 127
+ }
+};
+
+static int npatterns[] =
+{
+ (sizeof patterns_4555 / sizeof patterns_4555[0]),
+ (sizeof patterns_5766 / sizeof patterns_5766[0]),
+ (sizeof patterns_5655 / sizeof patterns_5655[0]),
+ (sizeof patterns_6767 / sizeof patterns_6767[0]),
+};
+
+static int
+Rule2Array(int rule)
+{
+ switch (rule) {
+ case 4555:
+ return LIFE_4555;
+ case 5766:
+ return LIFE_5766;
+ case 5655:
+ return LIFE_5655;
+ case 6767:
+ return LIFE_6767;
+ default:
+ return LIFE_RULES;
+ }
+}
+
+static int
+Array2Rule(int array)
+{
+ switch (array) {
+ case LIFE_4555:
+ return 4555;
+ case LIFE_5766:
+ return 5766;
+ case LIFE_5655:
+ return 5655;
+ case LIFE_6767:
+ return 6767;
+ default:
+ return 0;
+ }
+}
+
+/*--- list ---*/
+/* initialise the state of all cells to OFF */
+static void
+Init3D(life3dstruct * lp)
+{
+ lp->ptrhead = lp->ptrend = NULL;
+ lp->eraserhead.next = &lp->eraserend;
+ lp->eraserend.prev = &lp->eraserhead;
+}
+
+static CellList *
+NewCell(void)
+{
+ return ((CellList *) malloc(sizeof (CellList)));
+}
+
+/*-
+ * Function that adds the cell (assumed live) at (x,y,z) onto the search
+ * list so that it is scanned in future generations
+ */
+static void
+AddToList(life3dstruct * lp, unsigned int x, unsigned int y, unsigned int z)
+{
+ CellList *tmp;
+
+ tmp = NewCell();
+ tmp->x = x;
+ tmp->y = y;
+ tmp->z = z;
+ if (lp->ptrhead == NULL) {
+ lp->ptrhead = lp->ptrend = tmp;
+ tmp->prev = NULL;
+ } else {
+ lp->ptrend->next = tmp;
+ tmp->prev = lp->ptrend;
+ lp->ptrend = tmp;
+ }
+ lp->ptrend->next = NULL;
+}
+
+static void
+AddToEraseList(life3dstruct * lp, CellList * cell)
+{
+ cell->next = &lp->eraserend;
+ cell->prev = lp->eraserend.prev;
+ lp->eraserend.prev->next = cell;
+ lp->eraserend.prev = cell;
+}
+
+static void
+DelFromList(life3dstruct * lp, CellList * cell)
+{
+ if (cell != lp->ptrhead)
+ cell->prev->next = cell->next;
+ else {
+ lp->ptrhead = cell->next;
+ if (lp->ptrhead != NULL)
+ lp->ptrhead->prev = NULL;
+ }
+
+ if (cell != lp->ptrend)
+ cell->next->prev = cell->prev;
+ else {
+ lp->ptrend = cell->prev;
+ if (lp->ptrend != NULL)
+ lp->ptrend->next = NULL;
+ }
+
+ AddToEraseList(lp, cell);
+}
+
+static void
+DelFromEraseList(CellList * cell)
+{
+ cell->next->prev = cell->prev;
+ cell->prev->next = cell->next;
+ (void) free((void *) cell);
+}
+
+/*--- memory ---*/
+/*-
+ * Simulate a large array by dynamically allocating 4x4x4 size cells when
+ * needed.
+ */
+static void
+MemInit(life3dstruct * lp)
+{
+ int i;
+
+ for (i = 0; i < BASESIZE; ++i) {
+ if (lp->base[i] != NULL) {
+ (void) free((void *) lp->base[i]);
+ lp->base[i] = NULL;
+ }
+ }
+ lp->memstart = 0;
+}
+
+static void
+BaseOffset(life3dstruct * lp,
+ unsigned int x, unsigned int y, unsigned int z, int *b, int *o)
+{
+ *b = ((x & 0x7c) << 7) + ((y & 0x7c) << 2) + ((z & 0x7c) >> 2);
+ *o = (x & 3) + ((y & 3) << 2) + ((z & 3) << 4);
+
+ if (!lp->base[*b])
+ lp->base[*b] = (unsigned char *) calloc(64, sizeof (unsigned char));
+}
+
+static int
+GetMem(life3dstruct * lp, unsigned int x, unsigned int y, unsigned int z)
+{
+ int b, o;
+
+ if (lp->memstart)
+ MemInit(lp);
+ BaseOffset(lp, x, y, z, &b, &o);
+ return lp->base[b][o];
+}
+
+static void
+SetMem(life3dstruct * lp,
+ unsigned int x, unsigned int y, unsigned int z, unsigned int val)
+{
+ int b, o;
+
+ if (lp->memstart)
+ MemInit(lp);
+
+ BaseOffset(lp, x, y, z, &b, &o);
+ lp->base[b][o] = val;
+}
+
+static void
+ChangeMem(life3dstruct * lp,
+ unsigned int x, unsigned int y, unsigned int z, unsigned int val)
+{
+ int b, o;
+
+ if (lp->memstart)
+ MemInit(lp);
+ BaseOffset(lp, x, y, z, &b, &o);
+ lp->base[b][o] += val;
+}
+
+static void
+ClearMem(life3dstruct * lp)
+{
+ int i, j, count;
+
+ for (i = 0; i < BASESIZE; ++i)
+ if (lp->base[i] != NULL) {
+ for (count = j = 0; j < 64 && count == 0; ++j)
+ if (CellState3D(lp->base[i][j]))
+ ++count;
+ if (!count) {
+ (void) free((void *) lp->base[i]);
+ lp->base[i] = NULL;
+ }
+ }
+}
+
+
+/*-
+ * This routine increments the values stored in the 27 cells centred on
+ * (x,y,z) Note that the offset() macro implements wrapping - the world is a
+ * torus.
+ */
+static void
+IncrementNbrs3D(life3dstruct * lp, CellList * cell)
+{
+ int xc, yc, zc, x, y, z;
+
+ xc = cell->x;
+ yc = cell->y;
+ zc = cell->z;
+ for (z = zc - 1; z != zc + 2; ++z)
+ for (y = yc - 1; y != yc + 2; ++y)
+ for (x = xc - 1; x != xc + 2; ++x)
+ if (x != xc || y != yc || z != zc)
+ ChangeMem(lp,
+ (unsigned int) x, (unsigned int) y, (unsigned int) z, 1);
+}
+
+static void
+End3D(life3dstruct * lp)
+{
+ CellList *ptr;
+
+ while (lp->ptrhead != NULL) {
+ SetMem(lp, lp->ptrhead->x, lp->ptrhead->y, lp->ptrhead->z, OFF);
+ DelFromList(lp, lp->ptrhead);
+ }
+ ptr = lp->eraserhead.next;
+ while (ptr != &lp->eraserend) {
+ DelFromEraseList(ptr);
+ ptr = lp->eraserhead.next;
+ }
+ MemInit(lp);
+}
+
+static void
+RunLife3D(life3dstruct * lp)
+{
+ unsigned int x, y, z, xc, yc, zc;
+ int c;
+ CellList *ptr, *ptrnextcell;
+
+ /* Step 1 - Add 1 to all neighbours of living cells. */
+ ptr = lp->ptrhead;
+ while (ptr != NULL) {
+ IncrementNbrs3D(lp, ptr);
+ ptr = ptr->next;
+ }
+
+ /* Step 2 - Scan world and implement Survival rules. We have a list of live
+ * cells, so do the following:
+ * Start at the END of the list and work backwards (so we don't have to worry
+ * about scanning newly created cells since they are appended to the end) and
+ * for every entry, scan its neighbours for new live cells. If found, add them
+ * to the end of the list. If the centre cell is dead, unlink it.
+ * Make sure we do not append multiple copies of cells.
+ */
+ ptr = lp->ptrend;
+ while (ptr != NULL) {
+ ptrnextcell = ptr->prev;
+ xc = ptr->x;
+ yc = ptr->y;
+ zc = ptr->z;
+ for (z = zc - 1; z != zc + 2; ++z)
+ for (y = yc - 1; y != yc + 2; ++y)
+ for (x = xc - 1; x != xc + 2; ++x)
+ if (x != xc || y != yc || z != zc)
+ if ((c = GetMem(lp, x, y, z))) {
+ if (CellState3D(c) == OFF) {
+ if (CellNbrs3D(c) >= lp->birth_min &&
+ CellNbrs3D(c) <= lp->birth_max)
+ SetList3D(x, y, z);
+ else
+ Reset3D(x, y, z);
+ }
+ }
+ c = GetMem(lp, xc, yc, zc);
+ if (CellNbrs3D(c) < lp->living_min || CellNbrs3D(c) > lp->living_max) {
+ SetMem(lp, ptr->x, ptr->y, ptr->z, OFF);
+ DelFromList(lp, ptr);
+ } else
+ Set3D(xc, yc, zc);
+ ptr = ptrnextcell;
+ }
+ ClearMem(lp);
+}
+
+#if 0
+static int
+CountCells3D(life3dstruct * lp)
+{
+ CellList *ptr;
+ int count = 0;
+
+ ptr = lp->ptrhead;
+ while (ptr != NULL) {
+ ++count;
+ ptr = ptr->next;
+ }
+ return count;
+}
+
+void
+DisplayList(life3dstruct * lp)
+{
+ CellList *ptr;
+ int count = 0;
+
+ ptr = lp->ptrhead;
+ while (ptr != NULL) {
+ (void) printf("(%x)=[%d,%d,%d] ", (int) ptr, ptr->x, ptr->y, ptr->z);
+ ptr = ptr->next;
+ ++count;
+ }
+ (void) printf("Living cells = %d\n", count);
+}
+
+#endif
+
+static void
+RandomSoup(ModeInfo * mi, int n, int v)
+{
+ life3dstruct *lp = &life3ds[MI_SCREEN(mi)];
+ int x, y, z;
+
+ v /= 2;
+ if (v < 1)
+ v = 1;
+ for (z = lp->nstacks / 2 - v; z < lp->nstacks / 2 + v; ++z)
+ for (y = lp->nrows / 2 - v; y < lp->nrows / 2 + v; ++y)
+ for (x = lp->ncolumns / 2 - v; x < lp->ncolumns / 2 + v; ++x)
+ if (NRAND(100) < n)
+ SetList3D(x, y, z);
+ if (MI_WIN_IS_VERBOSE(mi))
+ (void) fprintf(stdout, "random pattern\n");
+}
+
+static void
+GetPattern(ModeInfo * mi, int pattern_rule, int pattern)
+{
+ life3dstruct *lp = &life3ds[MI_SCREEN(mi)];
+ int x, y, z;
+ char *patptr = NULL;
+
+ switch (pattern_rule) {
+ case LIFE_4555:
+ patptr = &patterns_4555[pattern][0];
+ break;
+ case LIFE_5766:
+ patptr = &patterns_5766[pattern][0];
+ break;
+ case LIFE_5655:
+ patptr = &patterns_5655[pattern][0];
+ break;
+ case LIFE_6767:
+ patptr = &patterns_6767[pattern][0];
+ break;
+ }
+ while ((x = *patptr++) != 127) {
+ y = *patptr++;
+ z = *patptr++;
+ x += lp->ncolumns / 2;
+ y += lp->nrows / 2;
+ z += lp->nstacks / 2;
+ if (x >= 0 && y >= 0 && z >= 0 &&
+ x < lp->ncolumns && y < lp->nrows && z < lp->nstacks)
+ SetList3D(x, y, z);
+ }
+ if (MI_WIN_IS_VERBOSE(mi))
+ (void) fprintf(stdout, "table number %d\n", pattern);
+}
+
+static void
+NewViewpoint(life3dstruct * lp, double x, double y, double z)
+{
+ double k, l, d1, d2;
+
+ k = x * x + y * y;
+ l = sqrt(k + z * z);
+ k = sqrt(k);
+ d1 = (EyeToScreen / HalfScreenD);
+ d2 = EyeToScreen / (HalfScreenD * lp->height / lp->width);
+ lp->A = d1 * l * (lp->width / 2) / k;
+ lp->B = l * l;
+ lp->C = d2 * (lp->height / 2) / k;
+ lp->F = k * k;
+}
+
+static void
+NewPoint(life3dstruct * lp, double x, double y, double z,
+ register XPoint * cubepts)
+{
+ double p1, E;
+
+ p1 = x * lp->vx + y * lp->vy;
+ E = lp->B - p1 - z * lp->vz;
+ cubepts->x = (int) (lp->width / 2 - lp->A * (lp->vx * y - lp->vy * x) / E);
+ cubepts->y = (int) (lp->height / 2 - lp->C * (z * lp->F - lp->vz * p1) / E);
+}
+
+
+/* Chain together all cells that are at the same distance. These * cannot
+ mutually overlap. */
+static void
+SortList(life3dstruct * lp)
+{
+ short dist;
+ double d, x, y, z, rsize;
+ int i, r;
+ XPoint point;
+ CellList *ptr;
+
+ for (i = 0; i < NBUCKETS; ++i)
+ lp->buckethead[i] = lp->bucketend[i] = NULL;
+
+ /* Calculate distances and re-arrange pointers to chain off buckets */
+ ptr = lp->ptrhead;
+ while (ptr != NULL) {
+
+ x = (double) ptr->x - lp->ox;
+ y = (double) ptr->y - lp->oy;
+ z = (double) ptr->z - lp->oz;
+ d = Distance(lp->vx, lp->vy, lp->vz, x, y, z);
+ if (lp->vx * (lp->vx - x) + lp->vy * (lp->vy - y) +
+ lp->vz * (lp->vz - z) > 0 && d > 1.5)
+ ptr->visible = 1;
+ else
+ ptr->visible = 0;
+
+ ptr->dist = (short) d;
+ dist = (short) (d * BUCKETSIZE);
+ if (dist > NBUCKETS - 1)
+ dist = NBUCKETS - 1;
+
+ if (lp->buckethead[dist] == NULL) {
+ lp->buckethead[dist] = lp->bucketend[dist] = ptr;
+ ptr->priority = NULL;
+ } else {
+ lp->bucketend[dist]->priority = ptr;
+ lp->bucketend[dist] = ptr;
+ lp->bucketend[dist]->priority = NULL;
+ }
+ ptr = ptr->next;
+ }
+
+ /* Check for invisibility */
+ rsize = 0.47 * lp->width / ((double) HalfScreenD * 2);
+ i = lp->azm;
+ if (i < 0)
+ i = -i;
+ i = i % RT_ANGLE;
+ if (i > HALFRT_ANGLE)
+ i = RT_ANGLE - i;
+ rsize /= cos(i * IP);
+
+ lp->visible = 0;
+ for (i = 0; i < NBUCKETS; ++i)
+ lp->buckethead[i] = lp->bucketend[i] = NULL;
+
+ /* Calculate distances and re-arrange pointers to chain off buckets */
+ ptr = lp->ptrhead;
+ while (ptr != NULL) {
+
+ x = (double) ptr->x - lp->ox;
+ y = (double) ptr->y - lp->oy;
+ z = (double) ptr->z - lp->oz;
+ d = Distance(lp->vx, lp->vy, lp->vz, x, y, z);
+ if (lp->vx * (lp->vx - x) + lp->vy * (lp->vy - y) +
+ lp->vz * (lp->vz - z) > 0 && d > 1.5)
+ ptr->visible = 1;
+ else
+ ptr->visible = 0;
+
+ ptr->dist = (short) d;
+ dist = (short) (d * BUCKETSIZE);
+ if (dist > NBUCKETS - 1)
+ dist = NBUCKETS - 1;
+
+ if (lp->buckethead[dist] == NULL) {
+ lp->buckethead[dist] = lp->bucketend[dist] = ptr;
+ ptr->priority = NULL;
+ } else {
+ lp->bucketend[dist]->priority = ptr;
+ lp->bucketend[dist] = ptr;
+ lp->bucketend[dist]->priority = NULL;
+ }
+ ptr = ptr->next;
+ }
+
+ /* Check for invisibility */
+ rsize = 0.47 * lp->width / ((double) HalfScreenD * 2);
+ i = lp->azm;
+ if (i < 0)
+ i = -i;
+ i = i % RT_ANGLE;
+ if (i > HALFRT_ANGLE)
+ i = RT_ANGLE - i;
+ rsize /= cos(i * IP);
+
+ lp->visible = 0;
+ for (i = 0; i < NBUCKETS; ++i)
+ if (lp->buckethead[i] != NULL) {
+ ptr = lp->buckethead[i];
+ while (ptr != NULL) {
+ if (ptr->visible) {
+ x = (double) ptr->x - lp->ox;
+ y = (double) ptr->y - lp->oy;
+ z = (double) ptr->z - lp->oz;
+ NewPoint(lp, x, y, z, &point);
+
+ r = (int) (rsize * (double) EyeToScreen / (double) ptr->dist);
+ if (point.x + r >= 0 && point.y + r >= 0 &&
+ point.x - r < lp->width && point.y - r < lp->height)
+ lp->visible = 1;
+ }
+ ptr = ptr->priority;
+ }
+ }
+}
+
+static void
+DrawFace(ModeInfo * mi, int color, XPoint * cubepts,
+ int p1, int p2, int p3, int p4)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ life3dstruct *lp = &life3ds[MI_SCREEN(mi)];
+ XPoint facepts[5];
+
+ facepts[0] = cubepts[p1];
+ facepts[1] = cubepts[p2];
+ facepts[2] = cubepts[p3];
+ facepts[3] = cubepts[p4];
+ facepts[4] = cubepts[p1];
+
+ if (!lp->wireframe) {
+ XSetForeground(display, gc, lp->color[color]);
+ XFillPolygon(display, MI_WINDOW(mi), gc, facepts, 4,
+ Convex, CoordModeOrigin);
+ }
+ if (color == BLACK || (MI_NPIXELS(mi) <= 2 && !lp->wireframe))
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ else
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+ XDrawLines(display, MI_WINDOW(mi), gc, facepts, 5, CoordModeOrigin);
+}
+
+#define LEN 0.45
+#define LEN2 0.9
+
+static int
+DrawCube(ModeInfo * mi, CellList * cell)
+{
+ life3dstruct *lp = &life3ds[MI_SCREEN(mi)];
+ XPoint cubepts[8]; /* screen coords for point */
+ int i = 0, out;
+ unsigned int mask;
+ double x, y, z;
+ double dx, dy, dz;
+
+ x = (double) cell->x - lp->ox;
+ y = (double) cell->y - lp->oy;
+ z = (double) cell->z - lp->oz;
+ out = 0;
+ for (dz = z - LEN; dz <= z + LEN2; dz += LEN2)
+ for (dy = y - LEN; dy <= y + LEN2; dy += LEN2)
+ for (dx = x - LEN; dx <= x + LEN2; dx += LEN2) {
+ NewPoint(lp, dx, dy, dz, &cubepts[i]);
+ if (cubepts[i].x < 0 || cubepts[i].x >= lp->width ||
+ cubepts[i].y < 0 || cubepts[i].y >= lp->height)
+ ++out;
+ ++i;
+ }
+ if (out == 8)
+ return (0);
+
+ if (cell->visible)
+ mask = 0xFFFF;
+ else
+ mask = 0x0;
+
+ /* Only draw those faces that are visible */
+ dx = lp->vx - x;
+ dy = lp->vy - y;
+ dz = lp->vz - z;
+ if (dz > LEN)
+ DrawFace(mi, (int) (BLUE & mask), cubepts, 4, 5, 7, 6);
+ else if (dz < -LEN)
+ DrawFace(mi, (int) (BLUE & mask), cubepts, 0, 1, 3, 2);
+ if (dx > LEN)
+ DrawFace(mi, (int) (GREEN & mask), cubepts, 1, 3, 7, 5);
+ else if (dx < -LEN)
+ DrawFace(mi, (int) (GREEN & mask), cubepts, 0, 2, 6, 4);
+ if (dy > LEN)
+ DrawFace(mi, (int) (RED & mask), cubepts, 2, 3, 7, 6);
+ else if (dy < -LEN)
+ DrawFace(mi, (int) (RED & mask), cubepts, 0, 1, 5, 4);
+ return (1);
+}
+
+static void
+DrawScreen(ModeInfo * mi)
+{
+ life3dstruct *lp = &life3ds[MI_SCREEN(mi)];
+ CellList *ptr;
+ CellList *eraserptr;
+ int i;
+
+ SortList(lp);
+
+ /* Erase dead cubes */
+ eraserptr = lp->eraserhead.next;
+ while (eraserptr != &lp->eraserend) {
+ eraserptr->visible = 0;
+ (void) DrawCube(mi, eraserptr);
+ DelFromEraseList(eraserptr);
+ eraserptr = lp->eraserhead.next;
+ }
+
+ /* draw furthest cubes first */
+ for (i = NBUCKETS - 1; i >= 0; --i) {
+ ptr = lp->buckethead[i];
+ while (ptr != NULL) {
+ /*if (ptr->visible) */
+ /* v += */ (void) DrawCube(mi, ptr);
+ ptr = ptr->priority;
+ /* ++count; */
+ }
+ }
+#if 0
+ {
+ int count = 0, v = 0;
+
+
+ (void) printf("Pop=%-4d Viewpoint (%3d,%3d,%3d) Origin (%3d,%3d,%3d) Mode %dx%d\
+(%d,%d) %d\n",
+ count, (int) (lp->vx + lp->ox), (int) (lp->vy + lp->oy),
+ (int) (lp->vz + lp->oz), (int) lp->ox, (int) lp->oy, (int) lp->oz,
+ lp->width, lp->height, lp->alt, lp->azm, v);
+ }
+#endif
+}
+
+static void
+shooter(life3dstruct * lp)
+{
+ int hsp, vsp, asp, hoff = 1, voff = 1, aoff = 1, r, c2,
+ r2, s2;
+
+ /* Generate the glider at the edge of the screen */
+#define V 10
+#define V2 (V/2)
+ c2 = lp->ncolumns / 2;
+ r2 = lp->nrows / 2;
+ s2 = lp->nstacks / 2;
+ r = NRAND(3);
+ if (!r) {
+ hsp = NRAND(V2) + c2 - V2 / 2;
+ vsp = (LRAND() & 1) ? r2 - V : r2 + V;
+ asp = (LRAND() & 1) ? s2 - V : s2 + V;
+ if (asp > s2)
+ aoff = -1;
+ if (vsp > r2)
+ voff = -1;
+ if (hsp > c2)
+ hoff = -1;
+ if (lp->rule3d == 4555) {
+ SetList3D(hsp + 0 * hoff, vsp + 0 * voff, asp + 0 * aoff);
+ SetList3D(hsp + 0 * hoff, vsp + 1 * voff, asp + 0 * aoff);
+ SetList3D(hsp + 1 * hoff, vsp + 2 * voff, asp + 0 * aoff);
+ SetList3D(hsp + 2 * hoff, vsp + 2 * voff, asp + 0 * aoff);
+ SetList3D(hsp + 3 * hoff, vsp + 0 * voff, asp + 0 * aoff);
+ SetList3D(hsp + 3 * hoff, vsp + 1 * voff, asp + 0 * aoff);
+ SetList3D(hsp + 1 * hoff, vsp + 0 * voff, asp + 1 * aoff);
+ SetList3D(hsp + 1 * hoff, vsp + 1 * voff, asp + 1 * aoff);
+ SetList3D(hsp + 2 * hoff, vsp + 0 * voff, asp + 1 * aoff);
+ SetList3D(hsp + 2 * hoff, vsp + 1 * voff, asp + 1 * aoff);
+ } else if (lp->rule3d == 5766) {
+ SetList3D(hsp + 0 * hoff, vsp + 1 * voff, asp + 0 * aoff);
+ SetList3D(hsp + 1 * hoff, vsp + 1 * voff, asp + 0 * aoff);
+ SetList3D(hsp + 0 * hoff, vsp + 2 * voff, asp + 1 * aoff);
+ SetList3D(hsp + 1 * hoff, vsp + 2 * voff, asp + 1 * aoff);
+ SetList3D(hsp + 0 * hoff, vsp + 0 * voff, asp + 2 * aoff);
+ SetList3D(hsp + 1 * hoff, vsp + 0 * voff, asp + 2 * aoff);
+ SetList3D(hsp + 0 * hoff, vsp + 1 * voff, asp + 2 * aoff);
+ SetList3D(hsp + 1 * hoff, vsp + 1 * voff, asp + 2 * aoff);
+ SetList3D(hsp + 0 * hoff, vsp + 2 * voff, asp + 2 * aoff);
+ SetList3D(hsp + 1 * hoff, vsp + 2 * voff, asp + 2 * aoff);
+ }
+ } else if (r == 1) {
+ hsp = (LRAND() & 1) ? c2 - V : c2 + V;
+ vsp = (LRAND() & 1) ? r2 - V : r2 + V;
+ asp = NRAND(V2) + s2 - V2 / 2;
+ if (asp > s2)
+ aoff = -1;
+ if (vsp > r2)
+ voff = -1;
+ if (hsp > c2)
+ hoff = -1;
+ if (lp->rule3d == 4555) {
+ SetList3D(hsp + 0 * hoff, vsp + 0 * voff, asp + 0 * aoff);
+ SetList3D(hsp + 1 * hoff, vsp + 0 * voff, asp + 0 * aoff);
+ SetList3D(hsp + 2 * hoff, vsp + 0 * voff, asp + 1 * aoff);
+ SetList3D(hsp + 2 * hoff, vsp + 0 * voff, asp + 2 * aoff);
+ SetList3D(hsp + 0 * hoff, vsp + 0 * voff, asp + 3 * aoff);
+ SetList3D(hsp + 1 * hoff, vsp + 0 * voff, asp + 3 * aoff);
+ SetList3D(hsp + 0 * hoff, vsp + 1 * voff, asp + 1 * aoff);
+ SetList3D(hsp + 1 * hoff, vsp + 1 * voff, asp + 1 * aoff);
+ SetList3D(hsp + 0 * hoff, vsp + 1 * voff, asp + 2 * aoff);
+ SetList3D(hsp + 1 * hoff, vsp + 1 * voff, asp + 2 * aoff);
+ } else if (lp->rule3d == 5766) {
+ SetList3D(hsp + 1 * hoff, vsp + 0 * voff, asp + 0 * aoff);
+ SetList3D(hsp + 1 * hoff, vsp + 0 * voff, asp + 1 * aoff);
+ SetList3D(hsp + 2 * hoff, vsp + 1 * voff, asp + 0 * aoff);
+ SetList3D(hsp + 2 * hoff, vsp + 1 * voff, asp + 1 * aoff);
+ SetList3D(hsp + 0 * hoff, vsp + 2 * voff, asp + 0 * aoff);
+ SetList3D(hsp + 0 * hoff, vsp + 2 * voff, asp + 1 * aoff);
+ SetList3D(hsp + 1 * hoff, vsp + 2 * voff, asp + 0 * aoff);
+ SetList3D(hsp + 1 * hoff, vsp + 2 * voff, asp + 1 * aoff);
+ SetList3D(hsp + 2 * hoff, vsp + 2 * voff, asp + 0 * aoff);
+ SetList3D(hsp + 2 * hoff, vsp + 2 * voff, asp + 1 * aoff);
+ }
+ } else {
+ hsp = (LRAND() & 1) ? c2 - V : c2 + V;
+ vsp = NRAND(V2) + r2 - V2 / 2;
+ asp = (LRAND() & 1) ? s2 - V : s2 + V;
+ if (asp > s2)
+ aoff = -1;
+ if (vsp > r2)
+ voff = -1;
+ if (hsp > c2)
+ hoff = -1;
+ if (lp->rule3d == 4555) {
+ SetList3D(hsp + 0 * hoff, vsp + 0 * voff, asp + 0 * aoff);
+ SetList3D(hsp + 0 * hoff, vsp + 0 * voff, asp + 1 * aoff);
+ SetList3D(hsp + 0 * hoff, vsp + 1 * voff, asp + 2 * aoff);
+ SetList3D(hsp + 0 * hoff, vsp + 2 * voff, asp + 2 * aoff);
+ SetList3D(hsp + 0 * hoff, vsp + 3 * voff, asp + 0 * aoff);
+ SetList3D(hsp + 0 * hoff, vsp + 3 * voff, asp + 1 * aoff);
+ SetList3D(hsp + 1 * hoff, vsp + 1 * voff, asp + 0 * aoff);
+ SetList3D(hsp + 1 * hoff, vsp + 1 * voff, asp + 1 * aoff);
+ SetList3D(hsp + 1 * hoff, vsp + 2 * voff, asp + 0 * aoff);
+ SetList3D(hsp + 1 * hoff, vsp + 2 * voff, asp + 1 * aoff);
+ } else if (lp->rule3d == 5766) {
+ SetList3D(hsp + 0 * hoff, vsp + 0 * voff, asp + 1 * aoff);
+ SetList3D(hsp + 0 * hoff, vsp + 1 * voff, asp + 1 * aoff);
+ SetList3D(hsp + 1 * hoff, vsp + 0 * voff, asp + 2 * aoff);
+ SetList3D(hsp + 1 * hoff, vsp + 1 * voff, asp + 2 * aoff);
+ SetList3D(hsp + 2 * hoff, vsp + 0 * voff, asp + 0 * aoff);
+ SetList3D(hsp + 2 * hoff, vsp + 1 * voff, asp + 0 * aoff);
+ SetList3D(hsp + 2 * hoff, vsp + 0 * voff, asp + 1 * aoff);
+ SetList3D(hsp + 2 * hoff, vsp + 1 * voff, asp + 1 * aoff);
+ SetList3D(hsp + 2 * hoff, vsp + 0 * voff, asp + 2 * aoff);
+ SetList3D(hsp + 2 * hoff, vsp + 1 * voff, asp + 2 * aoff);
+ }
+ }
+}
+
+static void
+initrule(ModeInfo * mi)
+{
+ life3dstruct *lp = &life3ds[MI_SCREEN(mi)];
+
+ if (MI_WIN_IS_VERBOSE(mi))
+ (void) fprintf(stdout, "rule3d %d\n", lp->rule3d);
+ lp->living_min = lp->rule3d / 1000;
+ lp->living_max = (lp->rule3d / 100) % 10;
+ lp->birth_min = (lp->rule3d / 10) % 10;
+ lp->birth_max = lp->rule3d % 10;
+}
+
+void
+init_life3d(ModeInfo * mi)
+{
+ life3dstruct *lp;
+ int i, pattern_rule, npats;
+
+ if (life3ds == NULL) {
+ if ((life3ds = (life3dstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (life3dstruct))) == NULL)
+ return;
+ }
+ lp = &life3ds[MI_SCREEN(mi)];
+
+ lp->generation = 0;
+
+ lp->rule3d = rule3d;
+ if (rule3d == 0) /* All rules with patterns */
+ lp->rule3d = Array2Rule(NRAND(LIFE_RULES));
+ else if (rule3d == 1) /* All rules with known gliders */
+ lp->rule3d = Array2Rule(NRAND(LIFE_GLIDERS));
+ if (lp->rule3d != rule3d || !lp->initialized) {
+ /*
+ * This stuff is not good for rules above 9 cubes but it is unlikely that
+ * these modes would be much good anyway....
+ * Rules should not have to be contiguous ... that is, it should be
+ * possible to have rules where cells will live if there are 5 or 7
+ * (not 6) cells around them. These rules are not general enough
+ * to allow for that.
+ */
+ initrule(mi);
+ }
+ if (!lp->initialized) {
+ lp->dist = 50.0 /*30.0 */ ;
+ lp->alt = 20 /*30 */ ;
+ lp->azm = 10 /*30 */ ;
+ lp->ncolumns = MAXCOLUMNS;
+ lp->nrows = MAXROWS;
+ lp->nstacks = MAXSTACKS;
+ lp->ox = lp->ncolumns / 2;
+ lp->oy = lp->nrows / 2;
+ lp->oz = lp->nstacks / 2;
+ lp->wireframe = 0;
+ lp->initialized = 1;
+ Init3D(lp);
+ } else
+ End3D(lp);
+ lp->color[0] = MI_WIN_BLACK_PIXEL(mi);
+ if (MI_NPIXELS(mi) > 2) {
+ i = NRAND(3);
+
+ lp->color[i + 1] = MI_PIXEL(mi, NRAND(MI_NPIXELS(mi) / COLORBASE));
+ lp->color[(i + 1) % 3 + 1] = MI_PIXEL(mi,
+ NRAND(MI_NPIXELS(mi) / COLORBASE) +
+ MI_NPIXELS(mi) / COLORBASE);
+ lp->color[(i + 2) % 3 + 1] = MI_PIXEL(mi,
+ NRAND(MI_NPIXELS(mi) / COLORBASE) +
+ 2 * MI_NPIXELS(mi) / COLORBASE);
+ } else
+ lp->color[1] = lp->color[2] = lp->color[3] = MI_WIN_WHITE_PIXEL(mi);
+ lp->color[4] = MI_WIN_WHITE_PIXEL(mi);
+ lp->width = MI_WIN_WIDTH(mi);
+ lp->height = MI_WIN_HEIGHT(mi);
+ lp->memstart = 1;
+ /*lp->tablesMade = 0; */
+
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+
+ if (lp->alt > 89)
+ lp->alt = 89;
+ else if (lp->alt < -89)
+ lp->alt = -89;
+ /* Calculate viewpoint */
+ lp->vx = (sin(lp->azm * IP) * cos(lp->alt * IP) * lp->dist);
+ lp->vy = (cos(lp->azm * IP) * cos(lp->alt * IP) * lp->dist);
+ lp->vz = (sin(lp->alt * IP) * lp->dist);
+ NewViewpoint(lp, lp->vx, lp->vy, lp->vz);
+
+ pattern_rule = Rule2Array(lp->rule3d);
+ if (pattern_rule < LIFE_RULES)
+ npats = npatterns[pattern_rule];
+ else
+ npats = 0;
+ lp->pattern = NRAND(npats + 2);
+ if (lp->pattern >= npats)
+ RandomSoup(mi, 30, 10);
+ else
+ GetPattern(mi, pattern_rule, lp->pattern);
+
+ DrawScreen(mi);
+}
+
+void
+draw_life3d(ModeInfo * mi)
+{
+ life3dstruct *lp = &life3ds[MI_SCREEN(mi)];
+
+ RunLife3D(lp);
+ DrawScreen(mi);
+
+ if (++lp->generation > MI_CYCLES(mi) || !lp->visible) {
+ /*CountCells3D(lp) == 0) */
+ init_life3d(mi);
+ }
+ /*
+ * generate a randomized shooter aimed roughly toward the center of the
+ * screen after batchcount.
+ */
+
+ if (lp->generation && lp->generation %
+ ((MI_BATCHCOUNT(mi) < 0) ? 1 : MI_BATCHCOUNT(mi)) == 0)
+ shooter(lp);
+}
+
+void
+release_life3d(ModeInfo * mi)
+{
+ if (life3ds != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ life3dstruct *lp = &life3ds[screen];
+
+ End3D(lp);
+ }
+ (void) free((void *) life3ds);
+ life3ds = NULL;
+ }
+}
+
+void
+refresh_life3d(ModeInfo * mi)
+{
+ /* Do nothing, it will refresh by itself */
+}
+
+void
+change_life3d(ModeInfo * mi)
+{
+ life3dstruct *lp = &life3ds[MI_SCREEN(mi)];
+ int npats, pattern_rule;
+
+ lp->generation = 0;
+
+ End3D(lp);
+ /*lp->tablesMade = 0; */
+
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+
+ lp->pattern = lp->pattern + 1;
+ pattern_rule = Rule2Array(lp->rule3d);
+ if (pattern_rule < LIFE_RULES)
+ npats = npatterns[pattern_rule];
+ else
+ npats = 0;
+ if (lp->pattern >= npats + 2) {
+ lp->pattern = 0;
+ if (rule3d == 0) {
+ pattern_rule++;
+ if (pattern_rule >= LIFE_RULES)
+ pattern_rule = 0;
+ lp->rule3d = Array2Rule(pattern_rule);
+ initrule(mi);
+ } else if (rule3d == 1) {
+ pattern_rule++;
+ if (pattern_rule >= LIFE_GLIDERS)
+ pattern_rule = 0;
+ lp->rule3d = Array2Rule(pattern_rule);
+ initrule(mi);
+ }
+ }
+ if (lp->pattern >= npats)
+ RandomSoup(mi, 30, 10);
+ else
+ GetPattern(mi, pattern_rule, lp->pattern);
+
+ DrawScreen(mi);
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)lightning.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * lightning.c - fractal lightning bolds for xlock, the X Window System
+ * lockscreen.
+ *
+ * Copyright (c) 1996 by Keith Romberg <kromberg@saxe.com>
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 14-Jul-96: Cleaned up code.
+ * 27-Jun-96: Written and submitted by Keith Romberg <kromberg@saxe.com>.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Lightning"
+#define HACK_INIT init_lightning
+#define HACK_DRAW draw_lightning
+#define DEF_DELAY 10000
+#define BRIGHT_COLORS
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt lightning_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+
+/*---------------------------- defines -------------------------------*/
+
+#define BOLT_NUMBER 4
+#define BOLT_ITERATION 4
+#define LONG_FORK_ITERATION 3
+#define MEDIUM_FORK_ITERATION 2
+#define SMALL_FORK_ITERATION 1
+
+#define WIDTH_VARIATION 30
+#define HEIGHT_VARIATION 15
+
+#define DELAY_TIME_AMOUNT 15
+#define MULTI_DELAY_TIME_BASE 5
+
+#define MAX_WIGGLES 16
+#define WIGGLE_BASE 8
+#define WIGGLE_AMOUNT 14
+
+#define RANDOM_FORK_PROBILITY 4
+
+#define FIRST_LEVEL_STRIKE 0
+#define LEVEL_ONE_STRIKE 1
+#define LEVEL_TWO_STRIKE 2
+
+#define BOLT_VERTICIES ((1<<BOLT_ITERATION)-1)
+ /* BOLT_ITERATION = 4. 2^(BOLT_ITERATION) - 1 = 15 */
+
+#define NUMBER_FORK_VERTICIES 9
+
+#define FLASH_PROBILITY 20
+#define MAX_FLASH_AMOUNT 2 /* half the total duration of the bolt */
+
+typedef struct {
+ XPoint ForkVerticies[NUMBER_FORK_VERTICIES];
+ int num_used;
+} Fork;
+
+typedef struct {
+ XPoint end1, end2;
+ XPoint middle[BOLT_VERTICIES];
+ int fork_number;
+ int forks_start[2];
+ Fork branch[2];
+ int wiggle_number;
+ int wiggle_amount;
+ int delay_time;
+ int flash;
+ int flash_begin, flash_stop;
+ int visible;
+ int strike_level;
+} Lightning;
+
+typedef struct {
+ Lightning bolts[BOLT_NUMBER];
+ int scr_width, scr_height;
+ int multi_strike;
+ int give_it_hell;
+ int draw_time;
+ int stage;
+ unsigned long color;
+} Storm;
+
+static Storm *Helga = NULL;
+
+/*------------------- function prototypes ----------------------------*/
+
+static int distance(XPoint a, XPoint b);
+
+static int setup_multi_strike(void);
+static int flashing_strike(void);
+static void flash_duration(int *start, int *end, int total_duration);
+static void random_storm(Storm * st);
+static void generate(XPoint A, XPoint B, int iter, XPoint * verts, int *index);
+static void create_fork(Fork * f, XPoint start, XPoint end, int level);
+
+static void first_strike(Lightning bolt, ModeInfo * mi);
+static void draw_bolt(Lightning * bolt, ModeInfo * mi);
+static void draw_line(ModeInfo * mi, XPoint * p, int number, GC use, int x_offset);
+static void level1_strike(Lightning bolt, ModeInfo * mi);
+static void level2_strike(Lightning bolt, ModeInfo * mi);
+
+static int storm_active(Storm * st);
+static void update_bolt(Lightning * bolt, int time);
+static void wiggle_bolt(Lightning * bolt);
+static void wiggle_line(XPoint * p, int number, int wiggle_amount);
+
+/*------------------------- functions ---------------------------------*/
+
+static int
+setup_multi_strike(void)
+{
+ int result, multi_prob;
+
+ multi_prob = NRAND(100);
+
+ if (multi_prob < 50)
+ result = 1;
+ else if ((multi_prob >= 51) && (multi_prob < 75))
+ result = 2;
+ else if ((multi_prob >= 76) && (multi_prob < 92))
+ result = 3;
+ else
+ result = BOLT_NUMBER; /* 4 */
+
+ return (result);
+}
+
+/*-------------------------------------------------------------------------*/
+
+static int
+flashing_strike(void)
+{
+ int tmp = NRAND(FLASH_PROBILITY);
+
+ if (tmp <= FLASH_PROBILITY)
+ return (1);
+ return (0);
+}
+
+/*-------------------------------------------------------------------------*/
+
+static void
+flash_duration(int *start, int *end, int total_duration)
+{
+ int mid, d;
+
+ mid = total_duration / MAX_FLASH_AMOUNT;
+ d = NRAND(total_duration / MAX_FLASH_AMOUNT) / 2;
+ *start = mid - d;
+ *end = mid + d;
+}
+
+/*-------------------------------------------------------------------------*/
+
+static void
+random_storm(Storm * st)
+{
+ int i, j, tmp;
+ XPoint p;
+
+ for (i = 0; i < st->multi_strike; i++) {
+ st->bolts[i].end1.x = NRAND(st->scr_width);
+ st->bolts[i].end1.y = 0;
+ st->bolts[i].end2.x = NRAND(st->scr_width);
+ st->bolts[i].end2.y = st->scr_height;
+ st->bolts[i].wiggle_number = WIGGLE_BASE + NRAND(MAX_WIGGLES);
+ if ((st->bolts[i].flash = flashing_strike()))
+ flash_duration(&(st->bolts[i].flash_begin), &(st->bolts[i].flash_stop),
+ st->bolts[i].wiggle_number);
+ else
+ st->bolts[i].flash_begin = st->bolts[i].flash_stop = 0;
+ st->bolts[i].wiggle_amount = WIGGLE_AMOUNT;
+ if (i == 0)
+ st->bolts[i].delay_time = NRAND(DELAY_TIME_AMOUNT);
+ else
+ st->bolts[i].delay_time = NRAND(DELAY_TIME_AMOUNT) +
+ (MULTI_DELAY_TIME_BASE * i);
+ st->bolts[i].strike_level = FIRST_LEVEL_STRIKE;
+ tmp = 0;
+ generate(st->bolts[i].end1, st->bolts[i].end2, BOLT_ITERATION,
+ st->bolts[i].middle, &tmp);
+ st->bolts[i].fork_number = 0;
+ st->bolts[i].visible = 0;
+ for (j = 0; j < BOLT_VERTICIES; j++) {
+ if (st->bolts[i].fork_number >= 2)
+ break;
+ if (NRAND(100) < RANDOM_FORK_PROBILITY) {
+ p.x = NRAND(st->scr_width);
+ p.y = st->scr_height;
+ st->bolts[i].forks_start[st->bolts[i].fork_number] = j;
+ create_fork(&(st->bolts[i].branch[st->bolts[i].fork_number]),
+ st->bolts[i].middle[j], p, j);
+ st->bolts[i].fork_number++;
+ }
+ }
+ }
+}
+
+static void
+generate(XPoint A, XPoint B, int iter, XPoint * verts, int *index)
+{
+ XPoint mid;
+
+ mid.x = (A.x + B.x) / 2 + NRAND(WIDTH_VARIATION) - WIDTH_VARIATION / 2;
+ mid.y = (A.y + B.y) / 2 + NRAND(HEIGHT_VARIATION) - HEIGHT_VARIATION / 2;
+
+ if (!iter) {
+ verts[*index].x = mid.x;
+ verts[*index].y = mid.y;
+ (*index)++;
+ return;
+ }
+ generate(A, mid, iter - 1, verts, index);
+ generate(mid, B, iter - 1, verts, index);
+}
+
+/*------------------------------------------------------------------------*/
+
+static void
+create_fork(Fork * f, XPoint start, XPoint end, int level)
+{
+ int tmp = 1;
+
+ f->ForkVerticies[0].x = start.x;
+ f->ForkVerticies[0].y = start.y;
+
+ if (level <= 6) {
+ generate(start, end, LONG_FORK_ITERATION, f->ForkVerticies, &tmp);
+ f->num_used = 9;
+ } else if ((level > 6) && (level <= 11)) {
+ generate(start, end, MEDIUM_FORK_ITERATION, f->ForkVerticies, &tmp);
+ f->num_used = 5;
+ } else {
+ if (distance(start, end) > 100) {
+ generate(start, end, MEDIUM_FORK_ITERATION, f->ForkVerticies, &tmp);
+ f->num_used = 5;
+ } else {
+ generate(start, end, SMALL_FORK_ITERATION, f->ForkVerticies, &tmp);
+ f->num_used = 3;
+ }
+ }
+
+ f->ForkVerticies[f->num_used - 1].x = end.x;
+ f->ForkVerticies[f->num_used - 1].y = end.y;
+}
+
+/*------------------------------------------------------------------------*/
+
+static void
+update_bolt(Lightning * bolt, int time)
+{
+ wiggle_bolt(bolt);
+ if ((bolt->wiggle_amount == 0) && (bolt->wiggle_number > 2))
+ bolt->wiggle_number = 0;
+ if (((time % 3) == 0))
+ bolt->wiggle_amount++;
+
+ if (((time >= bolt->delay_time) && (time < bolt->flash_begin)) ||
+ (time > bolt->flash_stop))
+ bolt->visible = 1;
+ else
+ bolt->visible = 0;
+
+ if (time == bolt->delay_time)
+ bolt->strike_level = FIRST_LEVEL_STRIKE;
+ else if (time == (bolt->delay_time + 1))
+ bolt->strike_level = LEVEL_ONE_STRIKE;
+ else if ((time > (bolt->delay_time + 1)) &&
+ (time <= (bolt->delay_time + bolt->flash_begin - 2)))
+ bolt->strike_level = LEVEL_TWO_STRIKE;
+ else if (time == (bolt->delay_time + bolt->flash_begin - 1))
+ bolt->strike_level = LEVEL_ONE_STRIKE;
+ else if (time == (bolt->delay_time + bolt->flash_stop + 1))
+ bolt->strike_level = LEVEL_ONE_STRIKE;
+ else
+ bolt->strike_level = LEVEL_TWO_STRIKE;
+}
+
+/*------------------------------------------------------------------------*/
+
+static void
+draw_bolt(Lightning * bolt, ModeInfo * mi)
+{
+ if (bolt->visible) {
+ if (bolt->strike_level == FIRST_LEVEL_STRIKE)
+ first_strike(*bolt, mi);
+ else if (bolt->strike_level == LEVEL_ONE_STRIKE)
+ level1_strike(*bolt, mi);
+ else
+ level2_strike(*bolt, mi);
+ }
+}
+
+/*------------------------------------------------------------------------*/
+
+static void
+first_strike(Lightning bolt, ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ int i;
+
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+ XDrawLine(display, window, gc,
+ bolt.end1.x, bolt.end1.y, bolt.middle[0].x, bolt.middle[0].y);
+ draw_line(mi, bolt.middle, BOLT_VERTICIES, gc, 0);
+ XDrawLine(display, window, gc,
+ bolt.middle[BOLT_VERTICIES - 1].x, bolt.middle[BOLT_VERTICIES - 1].y,
+ bolt.end2.x, bolt.end2.y);
+
+ for (i = 0; i < bolt.fork_number; i++)
+ draw_line(mi, bolt.branch[i].ForkVerticies, bolt.branch[i].num_used,
+ gc, 0);
+}
+
+/*------------------------------------------------------------------------*/
+
+static void
+draw_line(ModeInfo * mi, XPoint * points, int number, GC to_use, int offset)
+{
+ int i;
+
+ for (i = 0; i < number - 1; i++) {
+ if (points[i].y <= points[i + 1].y)
+ XDrawLine(MI_DISPLAY(mi), MI_WINDOW(mi), to_use, points[i].x + offset,
+ points[i].y, points[i + 1].x + offset, points[i + 1].y);
+ else {
+ if (points[i].x < points[i + 1].x)
+ XDrawLine(MI_DISPLAY(mi), MI_WINDOW(mi), to_use, points[i].x +
+ offset, points[i].y + offset, points[i + 1].x + offset,
+ points[i + 1].y + offset);
+ else
+ XDrawLine(MI_DISPLAY(mi), MI_WINDOW(mi), to_use, points[i].x -
+ offset, points[i].y + offset, points[i + 1].x - offset,
+ points[i + 1].y + offset);
+ }
+ }
+}
+
+/*------------------------------------------------------------------------*/
+
+static void
+level1_strike(Lightning bolt, ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ Storm *st = &Helga[MI_SCREEN(mi)];
+ GC gc = MI_GC(mi);
+ int i;
+
+ if (MI_NPIXELS(mi) > 2) /* color */
+ XSetForeground(display, gc, MI_PIXEL(mi, st->color));
+ else
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+ XDrawLine(display, window, gc,
+ bolt.end1.x - 1, bolt.end1.y, bolt.middle[0].x - 1, bolt.middle[0].y);
+ draw_line(mi, bolt.middle, BOLT_VERTICIES, gc, -1);
+ XDrawLine(display, window, gc,
+ bolt.middle[BOLT_VERTICIES - 1].x - 1,
+ bolt.middle[BOLT_VERTICIES - 1].y, bolt.end2.x - 1, bolt.end2.y);
+ XDrawLine(display, window, gc,
+ bolt.end1.x + 1, bolt.end1.y, bolt.middle[0].x + 1, bolt.middle[0].y);
+ draw_line(mi, bolt.middle, BOLT_VERTICIES, gc, 1);
+ XDrawLine(display, window, gc,
+ bolt.middle[BOLT_VERTICIES - 1].x + 1,
+ bolt.middle[BOLT_VERTICIES - 1].y, bolt.end2.x + 1, bolt.end2.y);
+
+ for (i = 0; i < bolt.fork_number; i++) {
+ draw_line(mi, bolt.branch[i].ForkVerticies, bolt.branch[i].num_used,
+ gc, -1);
+ draw_line(mi, bolt.branch[i].ForkVerticies, bolt.branch[i].num_used,
+ gc, 1);
+ }
+ first_strike(bolt, mi);
+}
+
+/*------------------------------------------------------------------------*/
+
+static int
+distance(XPoint a, XPoint b)
+{
+ return ((int) sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y)));
+}
+
+/*------------------------------------------------------------------------*/
+
+static void
+level2_strike(Lightning bolt, ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ Storm *st = &Helga[MI_SCREEN(mi)];
+ GC gc = MI_GC(mi);
+ int i;
+
+ /* This was originally designed to be a little darker then the
+ level1 strike. This was changed to get it to work on
+ multiscreens and to add more color variety. I tried
+ stippling but it did not look good. */
+ if (MI_NPIXELS(mi) > 2)
+ XSetForeground(display, gc, MI_PIXEL(mi, st->color));
+ else
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+ XDrawLine(display, window, gc,
+ bolt.end1.x - 2, bolt.end1.y, bolt.middle[0].x - 2, bolt.middle[0].y);
+ draw_line(mi, bolt.middle, BOLT_VERTICIES, gc, -2);
+ XDrawLine(display, window, gc,
+ bolt.middle[BOLT_VERTICIES - 1].x - 2,
+ bolt.middle[BOLT_VERTICIES - 1].y, bolt.end2.x - 2, bolt.end2.y);
+
+ XDrawLine(display, window, gc,
+ bolt.end1.x + 2, bolt.end1.y, bolt.middle[0].x + 2, bolt.middle[0].y);
+ draw_line(mi, bolt.middle, BOLT_VERTICIES, gc, 2);
+ XDrawLine(display, window, gc,
+ bolt.middle[BOLT_VERTICIES - 1].x + 2,
+ bolt.middle[BOLT_VERTICIES - 1].y, bolt.end2.x + 2, bolt.end2.y);
+
+ for (i = 0; i < bolt.fork_number; i++) {
+ draw_line(mi, bolt.branch[i].ForkVerticies, bolt.branch[i].num_used,
+ gc, -2);
+ draw_line(mi, bolt.branch[i].ForkVerticies, bolt.branch[i].num_used,
+ gc, 2);
+ }
+ level1_strike(bolt, mi);
+}
+
+/*------------------------------------------------------------------------*/
+
+static int
+storm_active(Storm * st)
+{
+ int i, atleast_1 = 0;
+
+ for (i = 0; i < st->multi_strike; i++)
+ if (st->bolts[i].wiggle_number > 0)
+ atleast_1++;
+
+ return (atleast_1);
+}
+
+/*------------------------------------------------------------------------*/
+
+static void
+wiggle_bolt(Lightning * bolt)
+{
+ int i;
+
+ wiggle_line(bolt->middle, BOLT_VERTICIES, bolt->wiggle_amount);
+ bolt->end2.x += NRAND(bolt->wiggle_amount) - bolt->wiggle_amount / 2;
+ bolt->end2.y += NRAND(bolt->wiggle_amount) - bolt->wiggle_amount / 2;
+
+ for (i = 0; i < bolt->fork_number; i++) {
+ wiggle_line(bolt->branch[i].ForkVerticies, bolt->branch[i].num_used,
+ bolt->wiggle_amount);
+ bolt->branch[i].ForkVerticies[0].x = bolt->middle[bolt->forks_start[i]].x;
+ bolt->branch[i].ForkVerticies[0].y = bolt->middle[bolt->forks_start[i]].y;
+ }
+
+ if (bolt->wiggle_amount > 1)
+ bolt->wiggle_amount -= 1;
+ else
+ bolt->wiggle_amount = 0;
+}
+
+/*------------------------------------------------------------------------*/
+
+static void
+wiggle_line(XPoint * p, int number, int amount)
+{
+ int i;
+
+ for (i = 0; i < number; i++) {
+ p[i].x += NRAND(amount) - amount / 2;
+ p[i].y += NRAND(amount) - amount / 2;
+ }
+}
+
+/*------------------------------------------------------------------------*/
+
+void
+init_lightning(ModeInfo * mi)
+{
+ Storm *st;
+
+ if (Helga == NULL) {
+ if ((Helga = (Storm *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (Storm))) == NULL)
+ return;
+ }
+ st = &Helga[MI_SCREEN(mi)];
+
+ st->scr_width = MI_WIN_WIDTH(mi);
+ st->scr_height = MI_WIN_HEIGHT(mi);
+
+ st->multi_strike = setup_multi_strike();
+ random_storm(st);
+ st->stage = 0;
+}
+
+/*------------------------------------------------------------------------*/
+
+void
+draw_lightning(ModeInfo * mi)
+{
+ Storm *st = &Helga[MI_SCREEN(mi)];
+ int i;
+
+ switch (st->stage) {
+ case 0:
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+ st->color = NRAND(MI_NPIXELS(mi));
+ st->draw_time = 0;
+ if (storm_active(st))
+ st->stage++;
+ else
+ st->stage = 3;
+ break;
+ case 1:
+ for (i = 0; i < st->multi_strike; i++) {
+ if (st->bolts[i].visible)
+ draw_bolt(&(st->bolts[i]), mi);
+ update_bolt(&(st->bolts[i]), st->draw_time);
+ }
+ st->draw_time++;
+ XFlush(MI_DISPLAY(mi));
+ MI_PAUSE(mi) = 60000;
+ st->stage++;
+ break;
+ case 2:
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+ if (storm_active(st))
+ st->stage = 1;
+ else
+ st->stage++;
+ break;
+ case 3:
+ MI_PAUSE(mi) = 1000000;
+ init_lightning(mi);
+ break;
+ }
+}
+
+void
+release_lightning(ModeInfo * mi)
+{
+ if (Helga != NULL) {
+ (void) free((void *) Helga);
+ Helga = NULL;
+ }
+}
+
+void
+refresh_lightning(ModeInfo * mi)
+{
+ /* Do nothing, it will refresh by itself */
+}
--- /dev/null
+
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)lisa.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * lisa.c - Animated full-loop lisajous figures for xlock, the X
+ * Window System lockscreen.
+ *
+ * Copyright (c) 1997 by Caleb Cullen.
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ *
+ * The inspiration for this program, Lasp, was written by Adam B. Roach
+ * in 1990, assisted by me, Caleb Cullen. It was written first in C, then
+ * in assembly, and used pre-calculated data tables to graph lisajous
+ * figures on 386 machines and lower. This version bears only superficial
+ * resemblances to the original Lasp.
+ *
+ * The `lissie' module's source code was studied as an example of how
+ * to incorporate a new module into xlock. Resemblances to it are
+ * expected, but not intended to be plaigiaristic.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Lisa"
+#define HACK_INIT init_lisa
+#define HACK_DRAW draw_lisa
+#define DEF_DELAY 25000
+#define DEF_BATCHCOUNT 1
+#define DEF_CYCLES 256
+#define DEF_SIZE -1
+#define DEF_NCOLORS 200
+#define UNIFORM_COLORS
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+
+#endif /* STANDALONE */
+
+#define DEF_ADDITIVE "True"
+
+static Bool additive;
+
+#ifndef STANDALONE
+static XrmOptionDescRec lisa_xrm_opts[] =
+{
+ {"-additive", ".lisa.additive", XrmoptionNoArg, (caddr_t) "True"},
+ {"+additive", ".lisa.additive", XrmoptionNoArg, (caddr_t) "False"}
+};
+
+static argtype lisa_vars[] =
+{
+ {(caddr_t *) & additive, "additive", "Additive", DEF_ADDITIVE, t_Bool}
+};
+
+static OptionStruct lisa_vars_desc[] =
+{
+ {"-/+additive", "turn on/off additive functions mode"}
+};
+
+ModeSpecOpt lisa_opts =
+{2, lisa_xrm_opts, 1, lisa_vars, lisa_vars_desc};
+
+#else
+void refresh_lisa(ModeInfo * mi);
+void change_lisa(ModeInfo * mi);
+
+#endif /* STANDALONE */
+
+
+#define DRAWLINES 1
+#define TWOLOOPS 1
+#define XVMAX 10 /* Maximum velocities */
+#define YVMAX 10
+#define LISAMAXFUNCS 2
+#define NUMSTDFUNCS 10
+#define MAXCYCLES 3
+#define MINLISAS 1
+#define lisasetcolor() \
+if (MI_NPIXELS(mi) > 2) { \
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_PIXEL(mi, loop->color)); \
+ if (++(loop->color) >= MI_NPIXELS(mi)) { loop->color=0; } \
+ } else { XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WIN_WHITE_PIXEL(mi)); }
+#define getRadius(context) \
+ ((context->width > context->height)?context->height:context->width) * 3 / 8
+#define checkRadius(loop, context) \
+ if ((context->height / 2 > MI_SIZE(mi)) && (context->width / 2 > MI_SIZE(mi))) \
+ loop->radius = MI_SIZE(mi); \
+ if ((loop->radius < 0) || \
+ (loop->radius > loop->center.x) || \
+ (loop->radius > loop->center.y)) loop->radius = getRadius(context)
+
+
+typedef struct lisafunc_struct {
+ double xcoeff[2], ycoeff[2];
+ int nx, ny;
+ int index;
+} lisafuncs;
+
+typedef struct lisa_struct {
+ int radius, color, dx, dy, nsteps, nfuncs, melting;
+ double pistep, phi, theta;
+ XPoint center, *lastpoint;
+ lisafuncs *function[LISAMAXFUNCS];
+} lisas;
+
+typedef struct lisacontext_struct {
+ lisas *lisajous;
+ int width, height, nlisajous, loopcount;
+ int maxcycles;
+} lisacons;
+
+static lisacons *Lisa = NULL;
+
+static lisafuncs Function[NUMSTDFUNCS] =
+{
+ {
+ {1.0, 2.0},
+ {1.0, 2.0}, 2, 2, 0},
+ {
+ {1.0, 2.0},
+ {1.0, 1.0}, 2, 2, 1},
+ {
+ {1.0, 3.0},
+ {1.0, 2.0}, 2, 2, 2},
+ {
+ {1.0, 3.0},
+ {1.0, 3.0}, 2, 2, 3},
+ {
+ {2.0, 4.0},
+ {1.0, 2.0}, 2, 2, 4},
+ {
+ {1.0, 4.0},
+ {1.0, 3.0}, 2, 2, 5},
+ {
+ {1.0, 4.0},
+ {1.0, 4.0}, 2, 2, 6},
+ {
+ {1.0, 5.0},
+ {1.0, 5.0}, 2, 2, 7},
+ {
+ {2.0, 5.0},
+ {2.0, 5.0}, 2, 2, 8},
+ {
+ {1.0, 0.0},
+ {1.0, 0.0}, 1, 1, 9}
+};
+
+static void
+drawlisa(ModeInfo * mi, lisas * loop)
+{
+ XPoint *np;
+ XPoint *lp = loop->lastpoint;
+ lisacons *lc = &Lisa[MI_SCREEN(mi)];
+ lisafuncs **lf = loop->function;
+ int phase = lc->loopcount % loop->nsteps;
+ int pctr, fctr, xctr, yctr;
+ double xprod, yprod, xsum, ysum;
+
+ /* Allocate the np array */
+ np = (XPoint *) calloc(loop->nsteps, sizeof (XPoint));
+
+ /* Update the center */
+ loop->center.x += loop->dx;
+ loop->center.y += loop->dy;
+ checkRadius(loop, lc);
+ if ((loop->center.x - loop->radius) <= 0) {
+ loop->center.x = loop->radius;
+ loop->dx = NRAND(XVMAX);
+ } else if ((loop->center.x + loop->radius) >= lc->width) {
+ loop->center.x = lc->width - loop->radius;
+ loop->dx = -NRAND(XVMAX);
+ };
+ if ((loop->center.y - loop->radius) <= 0) {
+ loop->center.y = loop->radius;
+ loop->dy = NRAND(YVMAX);
+ } else if ((loop->center.y + loop->radius) >= lc->height) {
+ loop->center.y = lc->height - loop->radius;
+ loop->dy = -NRAND(YVMAX);
+ };
+
+ /* Now draw the points, and erase the ones from the last cycle */
+
+ for (pctr = 0; pctr < loop->nsteps; pctr++) {
+ fctr = loop->nfuncs;
+ loop->phi = (double) (pctr - phase) * loop->pistep;
+ loop->theta = (double) (pctr + phase) * loop->pistep;
+ xsum = ysum = 0;
+ while (fctr--) {
+ xctr = lf[fctr]->nx;
+ yctr = lf[fctr]->ny;
+ if (additive) {
+ xprod = yprod = 0.0;
+ while (xctr--)
+ xprod += sin(lf[fctr]->xcoeff[xctr] * loop->theta);
+ while (yctr--)
+ yprod += sin(lf[fctr]->ycoeff[yctr] * loop->phi);
+ if (loop->melting) {
+ if (fctr) {
+ xsum += xprod \
+ *(double) (loop->nsteps - loop->melting) \
+ /(double) loop->nsteps;
+ ysum += yprod \
+ *(double) (loop->nsteps - loop->melting) \
+ /(double) loop->nsteps;
+ } else {
+ xsum += xprod \
+ *(double) loop->melting \
+ /(double) loop->nsteps;
+ ysum += yprod \
+ *(double) loop->melting \
+ /(double) loop->nsteps;
+ }
+ } else {
+ xsum = xprod;
+ ysum = yprod;
+ }
+ if (!fctr) {
+ xsum = xsum \
+ *(double) loop->radius \
+ /(double) lf[fctr]->nx;
+ ysum = ysum \
+ *(double) loop->radius \
+ /(double) lf[fctr]->ny;
+ }
+ } else {
+ if (loop->melting) {
+ if (fctr) {
+ yprod = xprod = (double) loop->radius \
+ *(double) (loop->nsteps - loop->melting) \
+ /(double) (loop->nsteps);
+ } else {
+ yprod = xprod = (double) loop->radius \
+ *(double) (loop->melting) \
+ /(double) (loop->nsteps);
+ }
+ } else {
+ xprod = yprod = (double) loop->radius;
+ }
+ while (xctr--)
+ xprod *= sin(lf[fctr]->xcoeff[xctr] * loop->theta);
+ while (yctr--)
+ yprod *= sin(lf[fctr]->ycoeff[yctr] * loop->phi);
+ xsum += xprod;
+ ysum += yprod;
+ }
+ }
+ if ((loop->nfuncs > 1) && (!loop->melting)) {
+ xsum /= (double) loop->nfuncs;
+ ysum /= (double) loop->nfuncs;
+ }
+ xsum += (double) loop->center.x;
+ ysum += (double) loop->center.y;
+
+ np[pctr].x = (int) ceil(xsum);
+ np[pctr].y = (int) ceil(ysum);
+ }
+ if (loop->melting) {
+ if (!--loop->melting) {
+ loop->nfuncs = 1;
+ loop->function[0] = loop->function[1];
+ }
+ }
+ for (pctr = 0; pctr < loop->nsteps; pctr++) {
+
+#if defined DRAWLINES
+ /* erase the last cycle's point */
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WIN_BLACK_PIXEL(mi));
+ XDrawLine(MI_DISPLAY(mi), MI_WINDOW(mi), \
+ MI_GC(mi), lp[pctr].x, lp[pctr].y, \
+ lp[(pctr + 1) % loop->nsteps].x, \
+ lp[(pctr + 1) % loop->nsteps].y);
+
+ /* Set the new color */
+ lisasetcolor();
+
+ /* plot this cycle's point */
+ XDrawLine(MI_DISPLAY(mi), MI_WINDOW(mi), \
+ MI_GC(mi), np[pctr].x, np[pctr].y, \
+ np[(pctr + 1) % loop->nsteps].x, \
+ np[(pctr + 1) % loop->nsteps].y);
+#else
+ /* erase the last cycle's point */
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WIN_BLACK_PIXEL(mi));
+ XDrawPoint(MI_DISPLAY(mi), MI_WINDOW(mi), \
+ MI_GC(mi), lp[pctr].x, lp[pctr].y);
+
+ /* Set the new color */
+ lisasetcolor();
+
+ /* plot this cycle's point */
+ XDrawPoint(MI_DISPLAY(mi), MI_WINDOW(mi), \
+ MI_GC(mi), np[pctr].x, np[pctr].y);
+#endif
+ }
+ (void) free((void *) lp);
+ loop->lastpoint = np;
+}
+
+static void
+initlisa(ModeInfo * mi, lisas * loop)
+{
+ lisacons *lc = &Lisa[MI_SCREEN(mi)];
+ lisafuncs **lf = loop->function;
+ XPoint *lp;
+ int phase, pctr, fctr, xctr, yctr;
+ double xprod, yprod, xsum, ysum;
+
+ if (MI_NPIXELS(mi) > 2) {
+ loop->color = 0;
+ } else
+ loop->color = MI_WIN_WHITE_PIXEL(mi);
+ loop->nsteps = MI_CYCLES(mi);
+ if (loop->nsteps == 0)
+ loop->nsteps = 1;
+ lc->maxcycles = (MAXCYCLES * loop->nsteps) - 1;
+ loop->melting = 0;
+ loop->nfuncs = 1;
+ loop->pistep = 2.0 * M_PI / (double) loop->nsteps;
+ loop->center.x = lc->width / 2;
+ loop->center.y = lc->height / 2;
+ loop->radius = MI_SIZE(mi);
+ checkRadius(loop, lc);
+ loop->dx = NRAND(XVMAX);
+ loop->dy = NRAND(YVMAX);
+ loop->dx++;
+ loop->dy++;
+ lf[0] = &Function[lc->loopcount % NUMSTDFUNCS];
+ if ((lp = loop->lastpoint = (XPoint *)
+ calloc(loop->nsteps, sizeof (XPoint))) == NULL)
+ return;
+ phase = lc->loopcount % loop->nsteps;
+
+ for (pctr = 0; pctr < loop->nsteps; pctr++) {
+ loop->phi = (double) (pctr - phase) * loop->pistep;
+ loop->theta = (double) (pctr + phase) * loop->pistep;
+ fctr = loop->nfuncs;
+ xsum = ysum = 0.0;
+ while (fctr--) {
+ xprod = yprod = (double) loop->radius;
+ xctr = lf[fctr]->nx;
+ yctr = lf[fctr]->ny;
+ while (xctr--)
+ xprod *= sin(lf[fctr]->xcoeff[xctr] * loop->theta);
+ while (yctr--)
+ yprod *= sin(lf[fctr]->ycoeff[yctr] * loop->phi);
+ xsum += xprod;
+ ysum += yprod;
+ }
+ if (loop->nfuncs > 1) {
+ xsum /= 2.0;
+ ysum /= 2.0;
+ }
+ xsum += (double) loop->center.x;
+ ysum += (double) loop->center.y;
+
+ lp[pctr].x = (int) ceil(xsum);
+ lp[pctr].y = (int) ceil(ysum);
+ }
+ for (pctr = 0; pctr < loop->nsteps; pctr++) {
+ /* Set the color */
+ lisasetcolor();
+#if defined DRAWLINES
+ XDrawLine(MI_DISPLAY(mi), MI_WINDOW(mi), \
+ MI_GC(mi), lp[pctr].x, lp[pctr].y, \
+ lp[(pctr + 1) % loop->nsteps].x, \
+ lp[(pctr + 1) % loop->nsteps].y);
+#else
+ XDrawPoint(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), \
+ lp[pctr].x, lp[pctr].y);
+#endif
+ }
+}
+
+void
+init_lisa(ModeInfo * mi)
+{
+ lisacons *lc;
+ int lctr;
+
+ if (Lisa == NULL) {
+ if ((Lisa = (lisacons *) calloc(MI_NUM_SCREENS(mi), sizeof (lisacons))) \
+ == NULL)
+ return;
+ }
+ lc = &Lisa[MI_SCREEN(mi)];
+ lc->width = MI_WIN_WIDTH(mi);
+ lc->height = MI_WIN_HEIGHT(mi);
+ lc->loopcount = 0;
+ lc->nlisajous = MI_BATCHCOUNT(mi);
+ if (lc->nlisajous <= 0)
+ lc->nlisajous = 1;
+
+ if (lc->lisajous == NULL) {
+ if ((lc->lisajous = (lisas *) calloc(lc->nlisajous, sizeof (lisas))) \
+ == NULL)
+ return;
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+ for (lctr = 0; lctr < lc->nlisajous; lctr++) {
+ initlisa(mi, &lc->lisajous[lctr]);
+ lc->loopcount++;
+ }
+ } else {
+ refresh_lisa(mi);
+ }
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+}
+
+void
+draw_lisa(ModeInfo * mi)
+{
+ lisacons *lc = &Lisa[MI_SCREEN(mi)];
+
+ if (++lc->loopcount > lc->maxcycles) {
+ change_lisa(mi);
+ }
+ refresh_lisa(mi);
+}
+
+void
+refresh_lisa(ModeInfo * mi)
+{
+ lisacons *lc = &Lisa[MI_SCREEN(mi)];
+ int lctr;
+
+ for (lctr = 0; lctr < lc->nlisajous; lctr++) {
+ drawlisa(mi, &lc->lisajous[lctr]);
+ }
+}
+
+void
+release_lisa(ModeInfo * mi)
+{
+ lisacons *lc;
+ int lctr, sctr;
+
+ if (Lisa) {
+ for (sctr = 0; sctr < MI_NUM_SCREENS(mi); sctr++) {
+ lc = &Lisa[sctr];
+ while (lc->lisajous) {
+ for (lctr = 0; lctr < lc->nlisajous; lctr++) {
+ (void) free(lc->lisajous[lctr].lastpoint);
+ }
+ (void) free(lc->lisajous);
+ lc->lisajous = NULL;
+ }
+ }
+ (void) free(Lisa);
+ Lisa = NULL;
+ }
+}
+
+void
+change_lisa(ModeInfo * mi)
+{
+ lisacons *lc = &Lisa[MI_SCREEN(mi)];
+ lisas *loop;
+ int lctr;
+
+ lc->loopcount = 0;
+ for (lctr = 0; lctr < lc->nlisajous; lctr++) {
+ loop = &lc->lisajous[lctr];
+ loop->function[1] = &Function[(loop->function[0]->index + 1) %
+ NUMSTDFUNCS];
+ loop->melting = loop->nsteps - 1;
+ loop->nfuncs = 2;
+ }
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)lissie.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * lissie.c - The Lissajous worm for xlock, the X Window System
+ * lockscreen.
+ *
+ * Copyright (c) 1996 by Alexander Jolk <ub9x@rz.uni-karlsruhe.de>
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 18-Aug-96: added refresh-hook.
+ * 01-May-96: written.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Lissie"
+#define HACK_INIT init_lissie
+#define HACK_DRAW draw_lissie
+#define DEF_DELAY 10000
+#define DEF_BATCHCOUNT -2
+#define DEF_CYCLES 2000
+#define DEF_SIZE -200
+#define DEF_NCOLORS 200
+#define BRIGHT_COLORS
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt lissie_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+#define MINSIZE 1
+
+#define Lissie(n)\
+ if (lissie->loc[(n)].x > 0 && lissie->loc[(n)].y > 0 &&\
+ lissie->loc[(n)].x <= lp->width && lissie->loc[(n)].y <= lp->height) {\
+ if (lissie->ri < 2)\
+ XDrawPoint(display, MI_WINDOW(mi),\
+ gc, lissie->loc[(n)].x, lissie->loc[(n)].y);\
+ else\
+ XDrawArc(display, MI_WINDOW(mi), gc,\
+ lissie->loc[(n)].x - lissie->ri / 2,\
+ lissie->loc[(n)].y - lissie->ri / 2,\
+ lissie->ri, lissie->ri, 0, 23040);\
+ }
+
+#define FLOATRAND(min,max) ((min)+(LRAND()/MAXRAND)*((max)-(min)))
+#define INTRAND(min,max) ((min)+NRAND((max)-(min)+1))
+
+#define MINDT 0.01
+#define MAXDT 0.15
+
+#define MAXLISSIELEN 100
+#define MINLISSIELEN 10
+#define MINLISSIES 1
+
+/* How many segments to draw per cycle when redrawing */
+#define REDRAWSTEP 3
+
+typedef struct {
+ double tx, ty, dtx, dty;
+ int xi, yi, ri, rx, ry, len, pos;
+ int redrawing, redrawpos;
+ XPoint loc[MAXLISSIELEN];
+ int color;
+} lissiestruct;
+
+typedef struct {
+ int width, height;
+ int nlissies;
+ lissiestruct *lissie;
+ int loopcount;
+} lissstruct;
+
+static lissstruct *lisses = NULL;
+
+
+static void
+drawlissie(ModeInfo * mi, lissiestruct * lissie)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ lissstruct *lp = &lisses[MI_SCREEN(mi)];
+ int p = (++lissie->pos) % MAXLISSIELEN;
+ int oldp = (lissie->pos - lissie->len + MAXLISSIELEN) % MAXLISSIELEN;
+
+ /* Let time go by ... */
+ lissie->tx += lissie->dtx;
+ lissie->ty += lissie->dty;
+ if (lissie->tx > 2 * M_PI)
+ lissie->tx -= 2 * M_PI;
+ if (lissie->ty > 2 * M_PI)
+ lissie->ty -= 2 * M_PI;
+
+ /* vary both (x/y) speeds by max. 1% */
+ lissie->dtx *= FLOATRAND(0.99, 1.01);
+ lissie->dty *= FLOATRAND(0.99, 1.01);
+ if (lissie->dtx < MINDT)
+ lissie->dtx = MINDT;
+ else if (lissie->dtx > MAXDT)
+ lissie->dtx = MAXDT;
+ if (lissie->dty < MINDT)
+ lissie->dty = MINDT;
+ else if (lissie->dty > MAXDT)
+ lissie->dty = MAXDT;
+
+ lissie->loc[p].x = lissie->xi + (int) (sin(lissie->tx) * lissie->rx);
+ lissie->loc[p].y = lissie->yi + (int) (sin(lissie->ty) * lissie->ry);
+
+ /* Mask */
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ Lissie(oldp);
+
+ /* Redraw */
+ if (MI_NPIXELS(mi) > 2) {
+ XSetForeground(display, gc, MI_PIXEL(mi, lissie->color));
+ if (++lissie->color >= MI_NPIXELS(mi))
+ lissie->color = 0;
+ } else
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+ Lissie(p);
+ if (lissie->redrawing) {
+ int i;
+
+ lissie->redrawpos++;
+ /* This compensates for the changed p
+ since the last callback. */
+
+ for (i = 0; i < REDRAWSTEP; i++) {
+ Lissie((p - lissie->redrawpos + MAXLISSIELEN) % MAXLISSIELEN);
+ if (++(lissie->redrawpos) >= lissie->len) {
+ lissie->redrawing = 0;
+ break;
+ }
+ }
+ }
+}
+
+static void
+initlissie(ModeInfo * mi, lissiestruct * lissie)
+{
+ lissstruct *lp = &lisses[MI_SCREEN(mi)];
+ int size = MI_SIZE(mi);
+ int i;
+
+ if (MI_NPIXELS(mi) > 2)
+ lissie->color = NRAND(MI_NPIXELS(mi));
+ else
+ lissie->color = MI_WIN_WHITE_PIXEL(mi);
+ /* Initialize parameters */
+ if (size < -MINSIZE)
+ lissie->ri = NRAND(MIN(-size, MAX(MINSIZE,
+ MIN(lp->width, lp->height) / 4)) - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE) {
+ if (!size)
+ lissie->ri = MAX(MINSIZE, MIN(lp->width, lp->height) / 4);
+ else
+ lissie->ri = MINSIZE;
+ } else
+ lissie->ri = MIN(size, MAX(MINSIZE, MIN(lp->width, lp->height) / 4));
+ lissie->xi = INTRAND(lp->width / 4 + lissie->ri,
+ lp->width * 3 / 4 - lissie->ri);
+ lissie->yi = INTRAND(lp->height / 4 + lissie->ri,
+ lp->height * 3 / 4 - lissie->ri);
+ lissie->rx = INTRAND(lp->width / 4,
+ MIN(lp->width - lissie->xi, lissie->xi)) - 2 * lissie->ri;
+ lissie->ry = INTRAND(lp->height / 4,
+ MIN(lp->height - lissie->yi, lissie->yi)) - 2 * lissie->ri;
+ lissie->len = INTRAND(MINLISSIELEN, MAXLISSIELEN - 1);
+ lissie->pos = 0;
+
+ lissie->redrawing = 0;
+
+ lissie->tx = FLOATRAND(0, 2 * M_PI);
+ lissie->ty = FLOATRAND(0, 2 * M_PI);
+ lissie->dtx = FLOATRAND(MINDT, MAXDT);
+ lissie->dty = FLOATRAND(MINDT, MAXDT);
+
+ for (i = 0; i < MAXLISSIELEN; i++)
+ lissie->loc[i].x = lissie->loc[i].y = 0;
+ /* Draw lissie */
+ drawlissie(mi, lissie);
+}
+
+void
+init_lissie(ModeInfo * mi)
+{
+ lissstruct *lp;
+ unsigned char ball;
+
+ if (lisses == NULL) {
+ if ((lisses = (lissstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (lissstruct))) == NULL)
+ return;
+ }
+ lp = &lisses[MI_SCREEN(mi)];
+
+ lp->width = MI_WIN_WIDTH(mi);
+ lp->height = MI_WIN_HEIGHT(mi);
+
+ lp->nlissies = MI_BATCHCOUNT(mi);
+ if (lp->nlissies < -MINLISSIES) {
+ if (lp->lissie) {
+ (void) free((void *) lp->lissie);
+ lp->lissie = NULL;
+ }
+ lp->nlissies = NRAND(-lp->nlissies - MINLISSIES + 1) + MINLISSIES;
+ } else if (lp->nlissies < MINLISSIES)
+ lp->nlissies = MINLISSIES;
+
+ lp->loopcount = 0;
+
+ if (!lp->lissie)
+ lp->lissie = (lissiestruct *) calloc(lp->nlissies, sizeof (lissiestruct));
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+ for (ball = 0; ball < (unsigned char) lp->nlissies; ball++)
+ initlissie(mi, &lp->lissie[ball]);
+
+}
+
+void
+draw_lissie(ModeInfo * mi)
+{
+ lissstruct *lp = &lisses[MI_SCREEN(mi)];
+ register unsigned char ball;
+
+ if (++lp->loopcount > MI_CYCLES(mi))
+ init_lissie(mi);
+ else
+ for (ball = 0; ball < (unsigned char) lp->nlissies; ball++)
+ drawlissie(mi, &lp->lissie[ball]);
+}
+
+void
+release_lissie(ModeInfo * mi)
+{
+ if (lisses != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ lissstruct *lp = &lisses[screen];
+
+ if (lp->lissie) {
+ (void) free((void *) lp->lissie);
+ lp->lissie = NULL;
+ }
+ }
+ (void) free((void *) lisses);
+ lisses = NULL;
+ }
+}
+
+void
+refresh_lissie(ModeInfo * mi)
+{
+ if (lisses != NULL) {
+ lissstruct *lp = &lisses[MI_SCREEN(mi)];
+ int i;
+
+ for (i = 0; i < lp->nlissies; i++) {
+ lp->lissie[i].redrawing = 1;
+ lp->lissie[i].redrawpos = 0;
+ }
+ }
+}
--- /dev/null
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)logout.c 4.02 97/04/01 xlockmore";
+
+#endif
+
+/*-
+ * logout.c: handle compile-time optional logout
+ *
+ * See xlock.c for copying information.
+ *
+ * xclosedown code
+ * Copyright 1990 by Janet Carson
+ * Permission to use, copy, modify, and distribute 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. The author makes no representations about the
+ * suitability of this software for any purpose. It is provided "as is"
+ * without express or implied warranty.
+ *
+ * Revision History:
+ * 27-Jul-95: put back in logout.c (oops).
+ * Window shutdown program by Janet L. Carson,
+ * Baylor College of Medicine.
+ * Main procedure modified for use w/ xlock by
+ * Anthony Thyssen <anthony@cit.gu.edu.au>.
+ * 24-Feb-95: fullLock rewritten to handle non-default group names from
+ * Dale A. Harris <rodmur@ecst.csuchico.edu>
+ * 13-Feb-95: Heath A. Kehoe <hakehoe@icaen.uiowa.edu>.
+ * Mostly taken from bomb.c
+ * 1994: bomb.c written. Copyright (c) 1994 Dave Shield
+ * Liverpool Computer Science
+ */
+
+#include "xlock.h"
+
+#if defined( USE_AUTO_LOGOUT ) || defined( USE_BUTTON_LOGOUT ) || defined( USE_BOMB )
+
+#if ( HAVE_SYSLOG_H && defined( USE_SYSLOG ))
+#include <syslog.h>
+#endif
+#include <sys/signal.h>
+
+extern Bool inroot, inwindow, nolock, debug;
+extern char *ProgramName;
+
+/*-
+ * This file contains a function called logoutUser() that, when called,
+ * will (try) to log out the user.
+ *
+ * A portable way to do this is to simply kill all of the user's processes,
+ * but this is a really ugly way to do it (it kills background jobs that
+ * users may want to remain running after they log out).
+ *
+ * If your system provides for a cleaner/easier way to log out a user,
+ * you may implement it here.
+ *
+ * For example, on some systems, one may define for the users an environment
+ * variable named XSESSION that contains the pid of the X session leader
+ * process. So, to log the user out, we just need to kill that process,
+ * and the X session will end. Of course, a user can defeat that by
+ * changing the value of XSESSION; so we can fall back on the ugly_logout()
+ * method.
+ *
+ * If you can't log the user out (and you don't want to use the brute
+ * force method) simply return from logoutUser(), and xlock will continue
+ * on it's merry way (only applies if USE_AUTO_LOGOUT or USE_BUTTON_LOGOUT
+ * is defined.)
+ */
+
+#define NAP_TIME 5 /* Sleep between shutdown attempts */
+
+
+#ifdef CLOSEDOWN_LOGOUT
+
+/* Logout the user by contacting the display and closeing all windows */
+
+
+/*-
+ * Window shutdown program by Janet L. Carson, Baylor College of Medicine.
+ * Version 1.0, placed in /contrib on 2/12/90.
+ *
+ * Please send comments or fixes to jcarson@bcm.tmc.edu
+ */
+
+static Display *d;
+static Atom wm_delete_window;
+static Atom wm_protocols;
+static Atom wm_state;
+static int err_occurred = False;
+
+/*-
+ * I'm probably going to get some BadWindow errors as I kill clients
+ * which have multiple windows open and then try to kill them again
+ * on another of their windows. I'm just going to plow right through!
+ * The flag is set back to false in recurse_tree and kill_tree...
+ */
+
+static int
+err_handler(Display * display, XErrorEvent * err)
+{
+ err_occurred = True;
+ return 0;
+}
+
+/*-
+ * Looking for properties...
+ */
+
+static int
+has_property(Window w, Atom prop)
+{
+ int nprops, j, retval = 0;
+ Atom *list = XListProperties(d, w, &nprops);
+
+ if (err_occurred)
+ return 0;
+
+ for (j = 0; j < nprops; j++) {
+ if (list[j] == prop) {
+ retval = 1;
+ break;
+ }
+ }
+
+ if (nprops)
+ XFree((caddr_t) list);
+
+ return retval;
+}
+
+static int
+has_wm_state(Window w)
+{
+ return has_property(w, wm_state);
+}
+
+static int
+has_wm_protocols(Window w)
+{
+ return has_property(w, wm_protocols);
+}
+
+/*-
+ * Send a WM_PROTOCOLS WM_DELETE_WINDOW message to a window
+ */
+
+static void
+send_delete_message(Window w)
+{
+ XClientMessageEvent xclient;
+
+ xclient.type = ClientMessage;
+ xclient.send_event = True;
+ xclient.display = d;
+ xclient.window = w;
+ xclient.message_type = wm_protocols;
+ xclient.format = 32;
+ xclient.data.l[0] = wm_delete_window;
+
+ XSendEvent(d, w, False, 0, (XEvent *) & xclient);
+}
+
+/*-
+ * To shutdown a top level window: if the window participates
+ * in WM_DELETE_WINDOW, let the client shut itself off. Otherwise,
+ * do an XKillClient on it.
+ */
+
+static void
+handle_top_level(Window w)
+{
+ Atom *prots;
+ int nprots, j;
+
+ if (has_wm_protocols(w)) {
+ XGetWMProtocols(d, w, &prots, &nprots);
+
+ if (err_occurred)
+ return;
+
+ for (j = 0; j < nprots; j++)
+ if (prots[j] == wm_delete_window) {
+ send_delete_message(w);
+ break;
+ }
+ if (j == nprots) /* delete window not found */
+ XKillClient(d, w);
+
+ XFree((caddr_t) prots);
+ } else
+ XKillClient(d, w);
+}
+
+/*-
+ * recurse_tree: look for top level windows to kill all the way down
+ * the window tree. This pass is "nice"--I'll use delete_window protocol
+ * if the window supports it. If I get an error in the middle, I'll start
+ * over again at the same level, because reparenting window managers throw
+ * windows back up to the root...
+ */
+
+static void
+recurse_tree(Window w)
+{
+ Window root, parent, *kids;
+ unsigned int nkids;
+ int j;
+ int wm_state;
+
+ for (;;) {
+ XQueryTree(d, w, &root, &parent, &kids, &nkids);
+ if (err_occurred) {
+ err_occurred = False;
+ return;
+ }
+ for (j = 0; j < nkids; j++) {
+ wm_state = has_wm_state(kids[j]);
+
+ if (err_occurred)
+ break;
+
+ if (wm_state) {
+ handle_top_level(kids[j]);
+ if (err_occurred)
+ break;
+ } else
+ recurse_tree(kids[j]);
+ }
+
+ XFree((caddr_t) kids);
+
+ /* when I get all the way through a level without an error, I'm done */
+
+ if (err_occurred)
+ err_occurred = False;
+ else
+ return;
+
+ }
+}
+
+/*-
+ * This is the second pass--anything left gets an XKillClient!
+ */
+
+static void
+kill_tree(Window w)
+{
+ Window root, parent, *kids;
+ unsigned int nkids;
+ int j;
+
+ for (;;) {
+ XQueryTree(d, w, &root, &parent, &kids, &nkids);
+ if (err_occurred) {
+ err_occurred = False;
+ return;
+ }
+ for (j = 0; j < nkids; j++) {
+ XKillClient(d, kids[j]);
+ if (err_occurred)
+ break;
+ }
+
+ XFree((caddr_t) kids);
+
+ /* when I get all the way through a level without an error, I'm done */
+
+ if (err_occurred)
+ err_occurred = False;
+ else
+ return;
+ }
+}
+
+/*-
+ * Main program
+ */
+
+static void
+closedownLogout(void)
+{
+ int j;
+ extern Display *dsp;
+
+ /* init global variables */
+
+ d = dsp; /* hack to allow a display from another module */
+ wm_state = XInternAtom(d, "WM_STATE", False);
+ wm_protocols = XInternAtom(d, "WM_PROTOCOLS", False);
+ wm_delete_window = XInternAtom(d, "WM_DELETE_WINDOW", False);
+
+ /* synchronize -- so I'm aware of errors immediately */
+
+ XSynchronize(d, True);
+
+ /* use my error handler from here on out */
+
+ (void) XSetErrorHandler(err_handler);
+
+ /* start looking for windows to kill -- be nice on pass 1 */
+
+ for (j = 0; j < ScreenCount(d); j++)
+ recurse_tree(RootWindow(d, j));
+
+ /* wait for things to clean themselves up */
+
+ (void) sleep(NAP_TIME);
+
+ /* this will forcibly kill anything that's still around --
+ this second pass may or may not be needed... */
+
+ for (j = 0; j < ScreenCount(d); j++)
+ kill_tree(RootWindow(d, j));
+ (void) sleep(NAP_TIME);
+}
+
+#endif /* CLOSEDOWN_LOGOUT */
+
+#ifdef SESSION_LOGOUT
+static void
+sessionLogout(void)
+{
+ char *pidstr;
+
+ pidstr = getenv("XSESSION");
+ if (pidstr) {
+ kill(atoi(pidstr), SIGTERM);
+ (void) sleep(NAP_TIME);
+ }
+}
+
+#endif /* SESSION_LOGOUT */
+
+static void
+uglyLogout(void)
+{
+#if defined(__cplusplus) || defined(c_plusplus)
+ extern int signal(int, void *);
+ extern int kill(int, int);
+
+#endif
+
+#ifndef VMS
+#ifndef KILL_ALL_OTHERS
+#define KILL_ALL_OTHERS -1
+ (void) signal(SIGHUP, SIG_IGN);
+ (void) signal(SIGTERM, SIG_IGN);
+#endif
+
+ (void) kill(KILL_ALL_OTHERS, SIGHUP);
+ (void) sleep(NAP_TIME);
+ (void) kill(KILL_ALL_OTHERS, SIGTERM);
+ (void) sleep(NAP_TIME);
+
+#if ( HAVE_SYSLOG_H && defined( USE_SYSLOG ))
+ syslog(SYSLOG_NOTICE, "%s: failed to exit - sending kill (uid %d)\n",
+ ProgramName, getuid());
+#endif
+
+ (void) kill(KILL_ALL_OTHERS, SIGKILL);
+ (void) sleep(NAP_TIME);
+
+#if ( HAVE_SYSLOG_H && defined( USE_SYSLOG ))
+ syslog(SYSLOG_WARNING, "%s: still won't exit - suicide (uid %d)\n",
+ ProgramName, getuid());
+#endif
+
+ (void) kill(getpid(), SIGKILL);
+#endif /* !VMS */
+ exit(-1);
+}
+
+void
+logoutUser(void)
+{
+#if ( HAVE_SYSLOG_H && defined( USE_SYSLOG ))
+ extern syslogStop(void);
+
+ syslog(SYSLOG_INFO, "%s: expired. closing down (uid %d) on %s\n",
+ ProgramName, getuid(), getenv("DISPLAY"));
+ syslogStop();
+#endif
+
+ (void) finish();
+#ifdef VMS
+ (void) system("mcr decw$endsession -noprompt");
+#else
+#ifdef __sgi
+ (void) system("/usr/bin/X11/tellwm end_session >/dev/null 2>&1");
+ (void) sleep(10); /* Give the above a chance to run */
+#endif
+#endif
+
+#ifdef CLOSEDOWN_LOGOUT
+ closedownLogout();
+#endif
+#ifdef SESSION_LOGOUT
+ sessionLogout();
+#endif
+ uglyLogout();
+ exit(-1);
+}
+
+
+#if defined( USE_AUTO_LOGOUT ) || defined( USE_BUTTON_LOGOUT )
+ /*
+ * Determine whether to "fully" lock the terminal, or
+ * whether the time-limited version should be imposed.
+ *
+ * Policy:
+ * Members of staff can fully lock
+ * (hard-wired user/group names + file read at run time)
+ * Students (i.e. everyone else)
+ * are forced to use the time-limit version.
+ *
+ * An alternative policy could be based on display location
+ */
+#define FULL_LOCK 1
+#define TEMP_LOCK 0
+
+/* assuming only staff file is needed */
+#ifndef STAFF_FILE
+#define STAFF_FILE "/usr/remote/etc/xlock.staff"
+#endif
+
+#undef passwd
+#undef pw_name
+#undef getpwnam
+#undef getpwuid
+#include <pwd.h>
+#include <grp.h>
+#include <sys/param.h>
+#include <errno.h>
+#ifndef NGROUPS
+#if HAVE_LIMITS_H
+#include <limits.h>
+#endif
+#define NGROUPS NGROUPS_MAX
+#endif
+
+int
+fullLock(void)
+{
+ uid_t uid;
+ int ngroups = NGROUPS;
+
+#ifdef SUNOS4
+ gid_t mygidset[NGROUPS * sizeof (gid_t)];
+
+#else
+ gid_t mygidset[NGROUPS];
+
+#endif
+ int ngrps, i;
+ struct passwd *pwp;
+ struct group *gp;
+ FILE *fp;
+ char buf[BUFSIZ];
+
+ uid = getuid();
+ /* Do not try to logout root! */
+ if (!uid)
+ return (FULL_LOCK); /* root */
+ if (inwindow || inroot || nolock || debug)
+ return (FULL_LOCK); /* (mostly) harmless user */
+
+ pwp = getpwuid(uid);
+ if ((ngrps = getgroups(ngroups, mygidset)) == -1)
+ perror(ProgramName);
+
+#ifdef STAFF_NETGROUP
+ if (innetgr(STAFF_NETGROUP, NULL, pwp->pw_name, NULL))
+ return (FULL_LOCK);
+#endif
+
+ if ((fp = my_fopen(STAFF_FILE, "r")) == NULL)
+ return (TEMP_LOCK);
+
+ while ((fgets(buf, BUFSIZ, fp)) != NULL) {
+ char *cp;
+
+ if ((cp = (char *) strchr(buf, '\n')) != NULL)
+ *cp = '\0';
+ if (!strcmp(buf, pwp->pw_name))
+ return (FULL_LOCK);
+ if ((gp = getgrnam(buf)) != NULL) {
+ /* check all of user's groups */
+#ifdef SUNOS4
+ for (i = 1; i < ngrps * sizeof (gid_t); i += 2)
+#else
+ for (i = 0; i < ngrps; ++i)
+#endif
+ if (gp->gr_gid == mygidset[i])
+ return (FULL_LOCK);
+ }
+ }
+ (void) fclose(fp);
+
+ return (TEMP_LOCK);
+}
+#endif /* USE_AUTO_LOGOUT || USE_BUTTON_LOGOUT */
+
+#endif /* USE_AUTO_LOGOUT || USE_BUTTON_LOGOUT || USE_BOMB */
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)loop.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * loop.c - Chris Langton's self-producing loops for xlock, the
+ * X Window System lockscreen.
+ *
+ * Copyright (c) 1996 by David Bagley.
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 15-Nov-95: Coded from Chris Langton's Self-Reproduction in Cellular
+ * Automata Physica 10D 135-144 1984
+ * also used wire.c as a guide.
+ */
+
+/*-
+ * From Steven Levy's Artificial Life
+ * Chris Langton's cellular automata "loops" reproduce in the spirit of life.
+ * Beginning from a single organism, the loops from a colony. As the loops
+ * on the outer fringes reproduce, the inner loops -- blocked by their
+ * daughters -- can no longer produce offspring. These dead progenitors
+ * provide a base for future generations' expansion, much like the formation
+ * of a coral reef. This self-organizing behavior emerges spontaneously,
+ * from the bottom up -- a key characteristic of artificial life.
+ */
+
+/*-
+ Don't Panic -- When the artificial life tries to leave its petri
+ dish (ie. the screen) it will (usually) die...
+ The loops are short of "real" life because a general purpose Turing
+ machine is not contained in the loop. This is a simplification of
+ von Neumann and Codd's self-producing Turing machine.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "loop"
+#define HACK_INIT init_loop
+#define HACK_DRAW draw_loop
+#define DEF_DELAY 100000
+#define DEF_CYCLES 1600
+#define DEF_SIZE -12
+#define DEF_NCOLORS 64
+#define SPREAD_COLORS
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt loop_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+#define LOOPBITS(n,w,h)\
+ lp->pixmaps[lp->init_bits++]=\
+ XCreatePixmapFromBitmapData(display,window,(char *)n,w,h,1,0,1)
+
+#define COLORS 8
+#define MINLOOPS 1
+#define PATTERNSIZE 8
+#define REDRAWSTEP 2000 /* How many cells to draw per cycle */
+#define ADAM_LOOPX 16
+#define ADAM_LOOPY 10
+#define MINGRIDSIZE (3*ADAM_LOOPX)
+#define MINSIZE 1
+
+static unsigned char patterns[COLORS][PATTERNSIZE] =
+{
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* white */
+ {0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00}, /* spots */
+ {0x89, 0x44, 0x22, 0x11, 0x88, 0x44, 0x22, 0x11}, /* lt. / stripe */
+ {0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66}, /* | bars */
+ {0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00}, /* - bars */
+ {0xee, 0xdd, 0xbb, 0x77, 0xee, 0xdd, 0xbb, 0x76}, /* dark \ stripe */
+ {0xff, 0x99, 0x99, 0xff, 0xff, 0x99, 0x99, 0xff}, /* spots */
+ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, /* black */
+};
+
+/* Singly linked list */
+typedef struct _RectList {
+ XPoint pt;
+ struct _RectList *next;
+} RectList;
+
+typedef struct {
+ int init_bits;
+ int generation;
+ int xs, ys;
+ int xb, yb;
+ int nrows, ncols;
+ int bnrows, bncols;
+ int mincol, minrow, maxcol, maxrow;
+ int width, height;
+ int redrawing, redrawpos;
+ unsigned char *newcells, *oldcells;
+ unsigned int colors[COLORS];
+ int nrects[COLORS];
+ RectList *rectlist[COLORS];
+ GC stippledGC;
+ Pixmap pixmaps[COLORS];
+} loopstruct;
+
+static loopstruct *loops = NULL;
+
+#define TRANSITION(TT,V) V=TT&7;TT>>=3
+#define TABLE(T,R,B,L) (table[((T)<<9)|((R)<<6)|((B)<<3)|(L)])
+#ifdef RAND_RULES /* Hack, see below */
+#define TABLE_IN(C,T,R,B,L,I) (TABLE(T,R,B,L)&=~(7<<((C)*3)));\
+(TABLE(T,R,B,L)|=((I)<<((C)*3)))
+#else
+#define TABLE_IN(C,T,R,B,L,I) (TABLE(T,R,B,L)|=((I)<<((C)*3)))
+#endif
+#define TABLE_OUT(C,T,R,B,L) ((TABLE(T,R,B,L)>>((C)*3))&7)
+static unsigned int *table = NULL; /* 8*8*8*8 = 2^12 = 2^3^4 = 4K */
+
+static unsigned int transition_table[] =
+{ /* Octal */
+/* CTRBL->I CTRBL->I CTRBL->I CTRBL->I CTRBL->I */
+ 0000000, 0025271, 0113221, 0202422, 0301021,
+ 0000012, 0100011, 0122244, 0202452, 0301220,
+ 0000020, 0100061, 0122277, 0202520, 0302511,
+ 0000030, 0100077, 0122434, 0202552, 0401120,
+ 0000050, 0100111, 0122547, 0202622, 0401220,
+ 0000063, 0100121, 0123244, 0202722, 0401250,
+ 0000071, 0100211, 0123277, 0203122, 0402120,
+ 0000112, 0100244, 0124255, 0203216, 0402221,
+ 0000122, 0100277, 0124267, 0203226, 0402326,
+ 0000132, 0100511, 0125275, 0203422, 0402520,
+ 0000212, 0101011, 0200012, 0204222, 0403221,
+ 0000220, 0101111, 0200022, 0205122, 0500022,
+ 0000230, 0101244, 0200042, 0205212, 0500215,
+ 0000262, 0101277, 0200071, 0205222, 0500225,
+ 0000272, 0102026, 0200122, 0205521, 0500232,
+ 0000320, 0102121, 0200152, 0205725, 0500272,
+ 0000525, 0102211, 0200212, 0206222, 0500520,
+ 0000622, 0102244, 0200222, 0206722, 0502022,
+ 0000722, 0102263, 0200232, 0207122, 0502122,
+ 0001022, 0102277, 0200242, 0207222, 0502152,
+ 0001120, 0102327, 0200250, 0207422, 0502220,
+ 0002020, 0102424, 0200262, 0207722, 0502244,
+ 0002030, 0102626, 0200272, 0211222, 0502722,
+ 0002050, 0102644, 0200326, 0211261, 0512122,
+ 0002125, 0102677, 0200423, 0212222, 0512220,
+ 0002220, 0102710, 0200517, 0212242, 0512422,
+ 0002322, 0102727, 0200522, 0212262, 0512722,
+ 0005222, 0105427, 0200575, 0212272, 0600011,
+ 0012321, 0111121, 0200722, 0214222, 0600021,
+ 0012421, 0111221, 0201022, 0215222, 0602120,
+ 0012525, 0111244, 0201122, 0216222, 0612125,
+ 0012621, 0111251, 0201222, 0217222, 0612131,
+ 0012721, 0111261, 0201422, 0222272, 0612225,
+ 0012751, 0111277, 0201722, 0222442, 0700077,
+ 0014221, 0111522, 0202022, 0222462, 0701120,
+ 0014321, 0112121, 0202032, 0222762, 0701220,
+ 0014421, 0112221, 0202052, 0222772, 0701250,
+ 0014721, 0112244, 0202073, 0300013, 0702120,
+ 0016251, 0112251, 0202122, 0300022, 0702221,
+ 0017221, 0112277, 0202152, 0300041, 0702251,
+ 0017255, 0112321, 0202212, 0300076, 0702321,
+ 0017521, 0112424, 0202222, 0300123, 0702525,
+ 0017621, 0112621, 0202272, 0300421, 0702720,
+ 0017721, 0112727, 0202321, 0300622
+};
+
+
+/*-
+Neighborhoods are read as follows (rotations are not listed):
+ T
+ L C R ==> I
+ B
+ */
+
+static unsigned char self_reproducing_loop[ADAM_LOOPY][ADAM_LOOPX] =
+{
+ {0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0},
+ {2, 1, 7, 0, 1, 4, 0, 1, 4, 2, 0, 0, 0, 0, 0},
+ {2, 0, 2, 2, 2, 2, 2, 2, 0, 2, 0, 0, 0, 0, 0},
+ {2, 7, 2, 0, 0, 0, 0, 2, 1, 2, 0, 0, 0, 0, 0},
+ {2, 1, 2, 0, 0, 0, 0, 2, 1, 2, 0, 0, 0, 0, 0},
+ {2, 0, 2, 0, 0, 0, 0, 2, 1, 2, 0, 0, 0, 0, 0},
+ {2, 7, 2, 0, 0, 0, 0, 2, 1, 2, 0, 0, 0, 0, 0},
+ {2, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 0},
+ {2, 0, 7, 1, 0, 7, 1, 0, 7, 1, 1, 1, 1, 1, 2},
+ {0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0}
+};
+
+static void
+addtolist(ModeInfo * mi, int col, int row, unsigned char state)
+{
+ loopstruct *lp = &loops[MI_SCREEN(mi)];
+ RectList *current;
+
+ current = lp->rectlist[state];
+ lp->rectlist[state] = (RectList *) malloc(sizeof (RectList));
+ lp->rectlist[state]->pt.x = col;
+ lp->rectlist[state]->pt.y = row;
+ lp->rectlist[state]->next = current;
+ lp->nrects[state]++;
+}
+
+#ifdef DEBUG
+static void
+print_state(ModeInfo * mi, int state)
+{
+ loopstruct *lp = &loops[MI_SCREEN(mi)];
+ RectList *locallist;
+ int i = 0;
+
+ locallist = lp->rectlist[state];
+ (void) printf("state %d\n", state);
+ while (locallist) {
+ (void) printf("%d x %d, y %d\n", i,
+ locallist->pt.x, locallist->pt.y);
+ locallist = locallist->next;
+ i++;
+ }
+}
+
+#endif
+
+static void
+free_state(loopstruct * lp, int state)
+{
+ RectList *current;
+
+ while (lp->rectlist[state]) {
+ current = lp->rectlist[state];
+ lp->rectlist[state] = lp->rectlist[state]->next;
+ (void) free((void *) current);
+ }
+ lp->rectlist[state] = NULL;
+ lp->nrects[state] = 0;
+}
+
+static void
+drawcell(ModeInfo * mi, int col, int row, int state)
+{
+ loopstruct *lp = &loops[MI_SCREEN(mi)];
+ XGCValues gcv;
+ GC gc;
+
+ if (MI_NPIXELS(mi) > 2) {
+ gc = MI_GC(mi);
+ XSetForeground(MI_DISPLAY(mi), gc, lp->colors[state]);
+ } else {
+ gcv.stipple = lp->pixmaps[state];
+ gcv.foreground = MI_WIN_WHITE_PIXEL(mi);
+ gcv.background = MI_WIN_BLACK_PIXEL(mi);
+ XChangeGC(MI_DISPLAY(mi), lp->stippledGC,
+ GCStipple | GCForeground | GCBackground, &gcv);
+ gc = lp->stippledGC;
+ }
+ XFillRectangle(MI_DISPLAY(mi), MI_WINDOW(mi), gc,
+ lp->xb + lp->xs * col, lp->yb + lp->ys * row, lp->xs, lp->ys);
+}
+
+static void
+draw_state(ModeInfo * mi, int state)
+{
+ loopstruct *lp = &loops[MI_SCREEN(mi)];
+ GC gc;
+ XRectangle *rects;
+ XGCValues gcv;
+ RectList *current;
+
+ if (MI_NPIXELS(mi) > 2) {
+ gc = MI_GC(mi);
+ XSetForeground(MI_DISPLAY(mi), gc, lp->colors[state]);
+ } else {
+ gcv.stipple = lp->pixmaps[state];
+ gcv.foreground = MI_WIN_WHITE_PIXEL(mi);
+ gcv.background = MI_WIN_BLACK_PIXEL(mi);
+ XChangeGC(MI_DISPLAY(mi), lp->stippledGC,
+ GCStipple | GCForeground | GCBackground, &gcv);
+ gc = lp->stippledGC;
+ }
+
+ {
+ /* Take advantage of XFillRectangles */
+ int nrects = 0;
+
+ /* Create Rectangle list from part of the rectlist */
+ rects = (XRectangle *) malloc(lp->nrects[state] * sizeof (XRectangle));
+ current = lp->rectlist[state];
+ while (current) {
+ rects[nrects].x = lp->xb + current->pt.x * lp->xs;
+ rects[nrects].y = lp->yb + current->pt.y * lp->ys;
+ rects[nrects].width = lp->xs;
+ rects[nrects].height = lp->ys;
+ current = current->next;
+ nrects++;
+ }
+ /* Finally get to draw */
+ XFillRectangles(MI_DISPLAY(mi), MI_WINDOW(mi), gc, rects, nrects);
+ /* Free up rects list and the appropriate part of the rectlist */
+ (void) free((void *) rects);
+ }
+ free_state(lp, state);
+ XFlush(MI_DISPLAY(mi));
+}
+
+static void
+init_table(void)
+{
+ if (table == NULL) {
+ unsigned int tt, c, t, r, b, l, i;
+ int j, size_transition_table = sizeof (transition_table) /
+ sizeof (unsigned int);
+
+ if ((table = (unsigned int *) calloc(8 * 8 * 8 * 8,
+ sizeof (unsigned int))) == NULL)
+ return;
+
+#ifdef RAND_RULES
+ /* Here I was interested to see what happens when it hits a wall....
+ Rules not normally used take over... */
+ {
+ int k;
+
+ for (j = 0; j < 8 * 8 * 8 * 8; j++) {
+ for (k = 0; k < 8; k++)
+ table[j] |= (unsigned int) ((unsigned int) (NRAND(8)) << (k * 3));
+ }
+ }
+#endif
+ for (j = 0; j < size_transition_table; j++) {
+ tt = transition_table[j];
+ TRANSITION(tt, i);
+ TRANSITION(tt, l);
+ TRANSITION(tt, b);
+ TRANSITION(tt, r);
+ TRANSITION(tt, t);
+ TRANSITION(tt, c);
+ TABLE_IN(c, t, r, b, l, i);
+ TABLE_IN(c, r, b, l, t, i);
+ TABLE_IN(c, b, l, t, r, i);
+ TABLE_IN(c, l, t, r, b, i);
+ }
+ }
+}
+
+static void
+init_adam(loopstruct * lp)
+{
+ XPoint start, dirx, diry;
+ int i, j;
+
+ switch (NRAND(4)) {
+ case 0:
+ start.x = (lp->bncols - ADAM_LOOPX) / 2;
+ start.y = (lp->bnrows - ADAM_LOOPY) / 2;
+ dirx.x = 1, dirx.y = 0;
+ diry.x = 0, diry.y = 1;
+ lp->mincol = start.x, lp->minrow = start.y;
+ lp->maxcol = start.x + ADAM_LOOPX, lp->maxrow = start.y + ADAM_LOOPY;
+ break;
+ case 1:
+ start.x = (lp->bncols + ADAM_LOOPY) / 2;
+ start.y = (lp->bnrows - ADAM_LOOPX) / 2;
+ dirx.x = 0, dirx.y = 1;
+ diry.x = -1, diry.y = 0;
+ lp->mincol = start.x - ADAM_LOOPY, lp->minrow = start.y;
+ lp->maxcol = start.x, lp->maxrow = start.y + ADAM_LOOPX;
+ break;
+ case 2:
+ start.x = (lp->bncols + ADAM_LOOPX) / 2;
+ start.y = (lp->bnrows + ADAM_LOOPY) / 2;
+ dirx.x = -1, dirx.y = 0;
+ diry.x = 0, diry.y = -1;
+ lp->mincol = start.x - ADAM_LOOPX, lp->minrow = start.y - ADAM_LOOPY;
+ lp->maxcol = start.x, lp->maxrow = start.y;
+ break;
+ case 3:
+ start.x = (lp->bncols - ADAM_LOOPY) / 2;
+ start.y = (lp->bnrows + ADAM_LOOPX) / 2;
+ dirx.x = 0, dirx.y = -1;
+ diry.x = 1, diry.y = 0;
+ lp->mincol = start.x, lp->minrow = start.y - ADAM_LOOPX;
+ lp->maxcol = start.x + ADAM_LOOPY, lp->maxrow = start.y;
+ break;
+ }
+ for (j = 0; j < ADAM_LOOPY; j++)
+ for (i = 0; i < ADAM_LOOPX; i++)
+ lp->newcells[(start.y + dirx.y * i + diry.y * j) * lp->bncols +
+ start.x + dirx.x * i + diry.x * j] =
+ self_reproducing_loop[j][i];
+}
+
+static void
+do_gen(loopstruct * lp)
+{
+ int i, j;
+ unsigned char *z;
+ unsigned int c, t, r, b, l;
+
+ for (j = lp->minrow; j <= lp->maxrow; j++) {
+ for (i = lp->mincol; i <= lp->maxcol; i++) {
+ z = lp->newcells + i + j * lp->bncols;
+ c = *(lp->oldcells + i + j * lp->bncols);
+ t = *(lp->oldcells + i + (j - 1) * lp->bncols);
+ r = *(lp->oldcells + i + 1 + j * lp->bncols);
+ b = *(lp->oldcells + i + (j + 1) * lp->bncols);
+ l = *(lp->oldcells + i - 1 + j * lp->bncols);
+ *z = TABLE_OUT(c, t, r, b, l);
+ }
+ }
+}
+
+static void
+free_list(loopstruct * lp)
+{
+ int state;
+
+ for (state = 0; state < COLORS; state++)
+ free_state(lp, state);
+}
+
+void
+init_loop(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ int size = MI_SIZE(mi);
+ loopstruct *lp;
+ XGCValues gcv;
+ int i;
+
+ if (loops == NULL) {
+ if ((loops = (loopstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (loopstruct))) == NULL)
+ return;
+ }
+ lp = &loops[MI_SCREEN(mi)];
+ lp->redrawing = 0;
+ if (MI_NPIXELS(mi) <= 2) {
+ if (lp->stippledGC == None) {
+ gcv.fill_style = FillOpaqueStippled;
+ lp->stippledGC = XCreateGC(display, window, GCFillStyle, &gcv);
+ }
+ if (lp->init_bits == 0) {
+ for (i = 0; i < COLORS; i++)
+ LOOPBITS(patterns[i], PATTERNSIZE, PATTERNSIZE);
+ }
+ }
+ if (MI_NPIXELS(mi) > 2) {
+ /* Maybe these colors should be randomized */
+ lp->colors[0] = MI_WIN_BLACK_PIXEL(mi);
+ lp->colors[1] = MI_PIXEL(mi, 0); /* RED */
+ lp->colors[2] = MI_PIXEL(mi, 45); /* BLUE */
+ lp->colors[3] = MI_PIXEL(mi, 53); /* MAGENTA */
+ lp->colors[4] = MI_PIXEL(mi, 21); /* GREEN */
+ lp->colors[5] = MI_PIXEL(mi, 8); /* YELLOW */
+ lp->colors[6] = MI_PIXEL(mi, 32); /* CYAN */
+ lp->colors[7] = MI_WIN_WHITE_PIXEL(mi);
+ }
+ free_list(lp);
+ lp->generation = 0;
+
+ lp->width = MI_WIN_WIDTH(mi);
+ lp->height = MI_WIN_HEIGHT(mi);
+
+ if (size < -MINSIZE)
+ lp->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(lp->width, lp->height) /
+ MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE) {
+ if (!size)
+ lp->ys = MAX(MINSIZE, MIN(lp->width, lp->height) / MINGRIDSIZE);
+ else
+ lp->ys = MINSIZE;
+ } else
+ lp->ys = MIN(size, MAX(MINSIZE, MIN(lp->width, lp->height) /
+ MINGRIDSIZE));
+ lp->xs = lp->ys;
+ lp->ncols = MAX(lp->width / lp->xs, ADAM_LOOPX + 1);
+ lp->nrows = MAX(lp->height / lp->ys, ADAM_LOOPX + 1);
+ lp->xb = (lp->width - lp->xs * lp->ncols) / 2;
+ lp->yb = (lp->height - lp->ys * lp->nrows) / 2;
+
+ lp->bncols = lp->ncols + 2;
+ lp->bnrows = lp->nrows + 2;
+ XClearWindow(display, MI_WINDOW(mi));
+
+ if (lp->oldcells != NULL)
+ (void) free((void *) lp->oldcells);
+ lp->oldcells = (unsigned char *)
+ calloc(lp->bncols * lp->bnrows, sizeof (unsigned char));
+
+ if (lp->newcells != NULL)
+ (void) free((void *) lp->newcells);
+ lp->newcells = (unsigned char *)
+ calloc(lp->bncols * lp->bnrows, sizeof (unsigned char));
+
+ init_table();
+ init_adam(lp);
+}
+
+void
+draw_loop(ModeInfo * mi)
+{
+ loopstruct *lp = &loops[MI_SCREEN(mi)];
+ int offset, i, j, life = 0;
+ unsigned char *z, *znew;
+
+ for (j = lp->minrow; j <= lp->maxrow; j++) {
+ for (i = lp->mincol; i <= lp->maxcol; i++) {
+ offset = j * lp->bncols + i;
+ z = lp->oldcells + offset;
+ znew = lp->newcells + offset;
+ if (*z != *znew) {
+ *z = *znew;
+ addtolist(mi, i - 1, j - 1, *znew);
+ life = 1;
+ if (i == lp->mincol && i > 1)
+ lp->mincol--;
+ if (j == lp->minrow && j > 1)
+ lp->minrow--;
+ if (i == lp->maxcol && i < lp->bncols - 2)
+ lp->maxcol++;
+ if (j == lp->maxrow && j < lp->bnrows - 2)
+ lp->maxrow++;
+ }
+ }
+ }
+ for (i = 0; i < COLORS; i++)
+ draw_state(mi, i);
+ if (++lp->generation > MI_CYCLES(mi) || !life)
+ init_loop(mi);
+ else
+ do_gen(lp);
+
+ if (lp->redrawing) {
+ for (i = 0; i < REDRAWSTEP; i++) {
+ if ((*(lp->oldcells + lp->redrawpos))) {
+ drawcell(mi, lp->redrawpos % lp->bncols - 1,
+ lp->redrawpos / lp->bncols - 1, *(lp->oldcells + lp->redrawpos));
+ }
+ if (++(lp->redrawpos) >= lp->bncols * (lp->bnrows - 1)) {
+ lp->redrawing = 0;
+ break;
+ }
+ }
+ }
+}
+
+void
+release_loop(ModeInfo * mi)
+{
+ if (loops != NULL) {
+ int screen, shade;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ loopstruct *lp = &loops[screen];
+
+ free_list(lp);
+ for (shade = 0; shade < lp->init_bits; shade++)
+ XFreePixmap(MI_DISPLAY(mi), lp->pixmaps[shade]);
+ if (lp->stippledGC != None)
+ XFreeGC(MI_DISPLAY(mi), lp->stippledGC);
+ if (lp->oldcells != NULL)
+ (void) free((void *) lp->oldcells);
+ if (lp->newcells != NULL)
+ (void) free((void *) lp->newcells);
+ }
+ (void) free((void *) loops);
+ loops = NULL;
+ }
+ if (table != NULL) {
+ (void) free((void *) table);
+ table = NULL;
+ }
+}
+
+void
+refresh_loop(ModeInfo * mi)
+{
+ loopstruct *lp = &loops[MI_SCREEN(mi)];
+
+ lp->redrawing = 1;
+ lp->redrawpos = lp->bncols + 1;
+}
--- /dev/null
+$ save_verify='f$verify(0)
+$! set ver
+$!
+$! Compile and link for xlockmore
+$!
+$! USAGE:
+$! @make [debug clobber clean]
+$! debug : compile with degugger switch
+$! clean : clean all except executable
+$! clobber : clean all
+$!
+$! If you have
+$! XPM library
+$! XVMSUTILS library (VMS6.2 or lower)
+$! Mesa GL library
+$! insert the correct directory instead of X11 or GL:
+$ xvmsutilsf="X11:XVMSUTILS.OLB"
+$ xpmf="X11:LIBXPM.OLB"
+$ glf="GL:LIBMESAGL.OLB"
+$ gluf="GL:LIBMESAGLU.OLB"
+$!
+$! Assume C.
+$ deccxx=0
+$! Assume C++ (but may not link on VMS6.2 or lower)
+$! deccxx=1
+$! test on C++.
+$! deccxx=f$search("SYS$SYSTEM:CXX$COMPILER.EXE") .nes. ""
+$!
+$! Already assumes DEC C on Alpha.
+$! Assume VAX C on VAX.
+$! decc=0
+$! Assume DEC C on VAX.
+$! decc=1
+$! test on DEC C.
+$ decc=f$search("SYS$SYSTEM:DECC$COMPILER.EXE") .nes. ""
+$!
+$! if vroot<>0 the use of the root window is enabled
+$ vroot=1
+$! vroot=0
+$!
+$! if bomb<>0 the use bomb mode is included (does not come up in random mode)
+$ bomb=1
+$! bomb=0
+$!
+$! if sound<>0 sound capability is included (only available on Alpha)
+$! amd.c and amd.h are linked in from the config directory
+$ sound=1
+$! sound=0
+$!
+$! Hackers locks. Experimental!
+$ hacker=0
+$! hacker=1
+$!
+$!
+$! NOTHING SHOULD BE MODIFIED BELOW
+$!
+$ if p1 .eqs. "CLEAN" then goto Clean
+$ if p1 .eqs. "CLOBBER" then goto Clobber
+$!
+$ defs=="VMS"
+$ dtsaver=f$search("SYS$LIBRARY:CDE$LIBDTSVC.EXE") .nes. ""
+$ xpm=f$search("''xpmf'") .nes. ""
+$ gl=f$search("''glf'") .nes. ""
+$ glu=f$search("''gluf'") .nes. ""
+$ axp=f$getsyi("HW_MODEL") .ge. 1024
+$ sys_ver=f$edit(f$getsyi("version"),"compress")
+$ if f$extract(0,1,sys_ver) .nes. "V"
+$ then
+$ type sys$input
+This script will assume that the operating system version is at least V7.0.
+$!
+$ sys_ver="V7.0"
+$ endif
+$ sys_maj=0+f$extract(1,1,sys_ver)
+$ if sys_maj .lt. 7
+$ then
+$ xvmsutils=f$search("''xvmsutilsf'") .nes. ""
+$ endif
+$!
+$! Create .opt file
+$ close/nolog optf
+$ open/write optf xlock.opt
+$!
+$ if xpm then defs=="''defs',USE_XPM"
+$ if gl then defs=="''defs',USE_GL"
+$ if dtsaver then defs=="''defs',USE_DTSAVER"
+$ if axp .and. sound then defs=="''defs',USE_VMSPLAY"
+$ if sys_maj .lt. 7
+$ then
+$ if xvmsutils then defs=="''defs',USE_XVMSUTILS"
+$ endif
+$ if vroot then defs=="''defs',USE_VROOT"
+$ if bomb then defs=="''defs',USE_BOMB"
+$ if hacker then defs=="''defs',USE_HACKERS"
+$! The next must be the last one.
+$ if sys_maj .ge. 7
+$ then
+$ defs=="''defs',SRAND=""""srand48"""",LRAND=""""lrand48"""",MAXRAND=2147483648.0"
+$ endif
+$!
+$! Establish the Compiling Environment
+$!
+$! Set compiler command
+$! Put in /include=[] for local include file like a pwd.h ...
+$! not normally required.
+$ if deccxx
+$ then
+$ cc=="cxx/define=(''defs')"
+$ else
+$ if axp
+$ then
+$! cc=="cc/standard=vaxc/define=(''defs')"
+$ cc=="cc/define=(''defs')"
+$ else
+$ if decc
+$ then
+$! cc=="cc/decc/standard=vaxc/define=(''defs')"
+$ cc=="cc/decc/define=(''defs')"
+$ else ! VAX C
+$ cc=="cc/define=(''defs')"
+$ endif
+$ endif
+$ endif
+$ if p1 .eqs. "DEBUG" .or. p2 .eqs. "DEBUG" .or. p3 .eqs. "DEBUG"
+$ then
+$ if deccxx
+$ then
+$ cc=="cxx/deb/noopt/define=(''defs')/list"
+$ else
+$ if axp
+$ then
+$! cc=="cc/deb/noopt/standard=vaxc/define=(''defs')/list"
+$ cc=="cc/deb/noopt/define=(''defs')/list"
+$ else
+$ if decc
+$ then
+$! cc=="cc/deb/noopt/decc/standard=vaxc/define=(''defs')/list"
+$ cc=="cc/deb/noopt/decc/define=(''defs')/list"
+$ else ! VAX C
+$ cc=="cc/deb/noopt/define=(''defs')/list"
+$ endif
+$ endif
+$ endif
+$ link=="link/deb"
+$ endif
+$!
+$ if axp .or. .not. decc
+$ then
+$ define/nolog sys sys$library
+$ endif
+$!
+$ write sys$output "Linking Include Files"
+$! call make eyes.xbm "set file/enter=[]eyes.xbm [.bitmaps]m-x11.xbm" [.bitmaps]m-x11.xbm
+$ call make eyes.xbm "set file/enter=[]eyes.xbm [.bitmaps]m-grelb.xbm" [.bitmaps]m-grelb.xbm
+$ call make flag.xbm "set file/enter=[]flag.xbm [.bitmaps]m-x11.xbm" [.bitmaps]m-x11.xbm
+$! call make ghost.xbm "set file/enter=[]ghost.xbm [.bitmaps]m-x11.xbm" [.bitmaps]m-x11.xbm
+$ call make ghost.xbm "set file/enter=[]ghost.xbm [.bitmaps]m-ghost.xbm" [.bitmaps]m-ghost.xbm
+$ call make image.xbm "set file/enter=[]image.xbm [.bitmaps]m-x11.xbm" [.bitmaps]m-x11.xbm
+$ call make life.xbm "set file/enter=[]life.xbm [.bitmaps]s-grelb.xbm" [.bitmaps]s-grelb.xbm
+$! call make life.xbm "set file/enter=[]life.xbm [.bitmaps]s-x11.xbm" [.bitmaps]s-x11.xbm
+$ call make life1d.xbm "set file/enter=[]life1d.xbm [.bitmaps]t-x11.xbm" [.bitmaps]t-x11.xbm
+$ call make maze.xbm "set file/enter=[]maze.xbm [.bitmaps]l-x11.xbm" [.bitmaps]l-x11.xbm
+$ call make puzzle.xbm "set file/enter=[]puzzle.xbm [.bitmaps]l-xlock.xbm" [.bitmaps]l-xlock.xbm
+$ if xpm
+$ then
+$ call make image.xpm "set file/enter=[]image.xpm [.pixmaps]m-x11.xpm" [.pixmaps]m-x11.xpm
+$ call make puzzle.xpm "set file/enter=[]puzzle.xpm [.pixmaps]l-xlock.xpm" [.pixmaps]l-xlock.xpm
+$ endif
+$ if axp .and. sound
+$ then
+$ call make amd.h "set file/enter=[]amd.h [.config]amd.h" [.config]amd.h
+$ call make amd.c "set file/enter=[]amd.c [.config]amd.c" [.config]amd.c
+$ endif
+$ call make escher.c "set file/enter=[]escher.c [.glx]escher.c" [.glx]escher.c
+$ call make gears.c "set file/enter=[]gears.c [.glx]gears.c" [.glx]gears.c
+$ call make morph3d.c "set file/enter=[]morph3d.c [.glx]morph3d.c" [.glx]morph3d.c
+$ call make superquadrics.c "set file/enter=[]superquadrics.c [.glx]superquadrics.c" [.glx]superquadrics.c
+$ call make buildlwo.c "set file/enter=[]buildlwo.c [.glx]buildlwo.c" [.glx]buildlwo.c
+$ call make pipes.c "set file/enter=[]pipes.c [.glx]pipes.c" [.glx]pipes.c
+$ call make pipeobjs.c "set file/enter=[]pipeobjs.c [.glx]pipeobjs.c" [.glx]pipeobjs.c
+$ call make sproingies.c "set file/enter=[]sproingies.c [.glx]sproingies.c" [.glx]sproingies.c
+$ call make sproingiewrap.c "set file/enter=[]sproingiewrap.c [.glx]sproingiewrap.c" [.glx]sproingiewrap.c
+$ call make s1_b.c "set file/enter=[]s1_b.c [.glx]s1_b.c" [.glx]s1_b.c
+$ call make s1_1.c "set file/enter=[]s1_1.c [.glx]s1_1.c" [.glx]s1_1.c
+$ call make s1_2.c "set file/enter=[]s1_2.c [.glx]s1_2.c" [.glx]s1_2.c
+$ call make s1_3.c "set file/enter=[]s1_3.c [.glx]s1_3.c" [.glx]s1_3.c
+$ call make s1_4.c "set file/enter=[]s1_4.c [.glx]s1_4.c" [.glx]s1_4.c
+$ call make s1_5.c "set file/enter=[]s1_5.c [.glx]s1_5.c" [.glx]s1_5.c
+$ call make s1_6.c "set file/enter=[]s1_6.c [.glx]s1_6.c" [.glx]s1_6.c
+$ if hacker
+$ then
+$ call make fadeplot.c "set file/enter=[]fadeplot.c [.hackers]fadeplot.c" [.hackers]fadeplot.c
+$ endif
+$!
+$ write sys$output "Compiling XLock where cc = ''cc'"
+$ call make xlock.obj "cc xlock.c" xlock.c xlock.h mode.h vroot.h
+$ call make passwd.obj "cc passwd.c" passwd.c xlock.h
+$ call make resource.obj "cc resource.c" resource.c xlock.h mode.h
+$ call make utils.obj "cc utils.c" utils.c xlock.h
+$ call make logout.obj "cc logout.c" logout.c xlock.h
+$ call make mode.obj "cc mode.c" mode.c xlock.h mode.h
+$ call make ras.obj "cc ras.c" ras.c xlock.h
+$ call make xbm.obj "cc xbm.c" xbm.c xlock.h
+$ call make color.obj "cc color.c" color.c xlock.h
+$ if axp .and. sound
+$ then
+$ call make sound.obj "cc sound.c" sound.c xlock.h amd.h
+$ else
+$ call make sound.obj "cc sound.c" sound.c xlock.h
+$ endif
+$ call make ant.obj "cc ant.c" ant.c xlock.h mode.h
+$ call make ball.obj "cc ball.c" ball.c xlock.h mode.h
+$ call make bat.obj "cc bat.c" bat.c xlock.h mode.h
+$ call make blot.obj "cc blot.c" blot.c xlock.h mode.h
+$ call make bouboule.obj "cc bouboule.c" bouboule.c xlock.h mode.h
+$ call make bounce.obj "cc bounce.c" bounce.c xlock.h mode.h
+$ call make braid.obj "cc braid.c" braid.c xlock.h mode.h
+$ call make bug.obj "cc bug.c" bug.c xlock.h mode.h
+$ call make clock.obj "cc clock.c" clock.c xlock.h mode.h
+$ call make crystal.obj "cc crystal.c" crystal.c xlock.h mode.h
+$ call make daisy.obj "cc daisy.c" daisy.c xlock.h mode.h
+$ call make dclock.obj "cc dclock.c" dclock.c xlock.h mode.h
+$ call make demon.obj "cc demon.c" demon.c xlock.h mode.h
+$ call make drift.obj "cc drift.c" drift.c xlock.h mode.h
+$ call make eyes.obj "cc eyes.c" eyes.c xlock.h mode.h
+$ call make flag.obj "cc flag.c" flag.c xlock.h mode.h
+$ call make flame.obj "cc flame.c" flame.c xlock.h mode.h
+$ call make forest.obj "cc forest.c" forest.c xlock.h mode.h
+$ call make fract.obj "cc fract.c" fract.c xlock.h mode.h
+$ call make galaxy.obj "cc galaxy.c" galaxy.c xlock.h mode.h
+$ call make geometry.obj "cc geometry.c" geometry.c xlock.h mode.h
+$ call make grav.obj "cc grav.c" grav.c xlock.h mode.h
+$ call make helix.obj "cc helix.c" helix.c xlock.h mode.h
+$ call make hop.obj "cc hop.c" hop.c xlock.h mode.h
+$ call make hyper.obj "cc hyper.c" hyper.c xlock.h mode.h
+$ call make ico.obj "cc ico.c" ico.c xlock.h mode.h
+$ call make ifs.obj "cc ifs.c" ifs.c xlock.h mode.h
+$ call make image.obj "cc image.c" image.c xlock.h mode.h ras.h
+$ call make julia.obj "cc julia.c" julia.c xlock.h mode.h
+$ call make kaleid.obj "cc kaleid.c" kaleid.c xlock.h mode.h
+$ call make laser.obj "cc laser.c" laser.c xlock.h mode.h
+$ call make life.obj "cc life.c" life.c xlock.h mode.h
+$ call make life1d.obj "cc life1d.c" life1d.c xlock.h mode.h
+$ call make life3d.obj "cc life3d.c" life3d.c xlock.h mode.h
+$ call make lightning.obj "cc lightning.c" lightning.c xlock.h mode.h
+$ call make lisa.obj "cc lisa.c" lisa.c xlock.h mode.h
+$ call make lissie.obj "cc lissie.c" lissie.c xlock.h mode.h
+$ call make loop.obj "cc loop.c" loop.c xlock.h mode.h
+$ call make marquee.obj "cc marquee.c" marquee.c xlock.h mode.h
+$ call make maze.obj "cc maze.c" maze.c xlock.h mode.h
+$ call make mountain.obj "cc mountain.c" mountain.c xlock.h mode.h
+$ call make nose.obj "cc nose.c" nose.c xlock.h mode.h
+$ call make qix.obj "cc qix.c" qix.c xlock.h mode.h
+$ call make pacman.obj "cc pacman.c" pacman.c xlock.h mode.h
+$ call make penrose.obj "cc penrose.c" penrose.c xlock.h mode.h
+$ call make petal.obj "cc petal.c" petal.c xlock.h mode.h
+$ call make puzzle.obj "cc puzzle.c" puzzle.c xlock.h mode.h ras.h
+$ call make pyro.obj "cc pyro.c" pyro.c xlock.h mode.h
+$ call make roll.obj "cc roll.c" roll.c xlock.h mode.h
+$ call make rotor.obj "cc rotor.c" rotor.c xlock.h mode.h
+$ call make shape.obj "cc shape.c" shape.c xlock.h mode.h
+$ call make sierpinski.obj "cc sierpinski.c" sierpinski.c xlock.h mode.h
+$ call make slip.obj "cc slip.c" slip.c xlock.h mode.h
+$ call make sphere.obj "cc sphere.c" sphere.c xlock.h mode.h
+$ call make spiral.obj "cc spiral.c" spiral.c xlock.h mode.h
+$ call make spline.obj "cc spline.c" spline.c xlock.h mode.h
+$ call make star.obj "cc star.c" star.c xlock.h mode.h
+$ call make strange.obj "cc strange.c" strange.c xlock.h mode.h
+$ call make swarm.obj "cc swarm.c" swarm.c xlock.h mode.h
+$ call make swirl.obj "cc swirl.c" swirl.c xlock.h mode.h
+$ call make triangle.obj "cc triangle.c" triangle.c xlock.h mode.h
+$ call make tube.obj "cc tube.c" tube.c xlock.h mode.h
+$ call make turtle.obj "cc turtle.c" turtle.c xlock.h mode.h
+$ call make voters.obj "cc voters.c" voters.c xlock.h mode.h
+$ call make wator.obj "cc wator.c" wator.c xlock.h mode.h
+$ call make wire.obj "cc wire.c" wire.c xlock.h mode.h
+$ call make world.obj "cc world.c" world.c xlock.h mode.h
+$ call make worm.obj "cc worm.c" worm.c xlock.h mode.h
+$ call make cartoon.obj "cc cartoon.c" cartoon.c xlock.h mode.h
+$ call make escher.obj "cc escher.c" escher.c xlock.h mode.h
+$ call make gears.obj "cc gears.c" gears.c xlock.h mode.h
+$ call make morph3d.obj "cc morph3d.c" morph3d.c xlock.h mode.h
+$ call make superquadrics.obj "cc superquadrics.c" superquadrics.c xlock.h mode.h
+$ call make buildlwo.obj "cc buildlwo.c" buildlwo.c xlock.h mode.h
+$ call make pipes.obj "cc pipes.c" pipes.c xlock.h mode.h
+$ call make pipeobjs.obj "cc pipeobjs.c" pipeobjs.c xlock.h mode.h
+$ call make sproingies.obj "cc sproingies.c" sproingies.c xlock.h mode.h
+$ call make sproingiewrap.obj "cc sproingiewrap.c" sproingiewrap.c xlock.h mode.h
+$ call make s1_b.obj "cc s1_b.c" s1_b.c xlock.h mode.h
+$ call make s1_1.obj "cc s1_1.c" s1_1.c xlock.h mode.h
+$ call make s1_2.obj "cc s1_2.c" s1_2.c xlock.h mode.h
+$ call make s1_3.obj "cc s1_3.c" s1_3.c xlock.h mode.h
+$ call make s1_4.obj "cc s1_4.c" s1_4.c xlock.h mode.h
+$ call make s1_5.obj "cc s1_5.c" s1_5.c xlock.h mode.h
+$ call make s1_6.obj "cc s1_6.c" s1_6.c xlock.h mode.h
+$ call make blank.obj "cc blank.c" blank.c xlock.h mode.h
+$ call make bomb.obj "cc bomb.c" bomb.c xlock.h mode.h
+$ call make random.obj "cc random.c" random.c xlock.h mode.h
+$! AMD and USE_VMSPLAY for SOUND
+$ if axp .and. sound
+$ then
+$ call make amd.obj "cc amd.c" amd.c amd.h
+$ endif
+$ if hacker
+$ then
+$ write sys$output "Compiling XLock Hackers modes, Caution: Experimental!"
+$ call make fadeplot.obj "cc fadeplot.c" fadeplot.c xlock.h mode.h
+$ endif
+$!
+$! Get libraries
+$ if xpm then write optf "''xpmf'/lib"
+$ if gl then write optf "''glf'/lib"
+$ if glu then write optf "''gluf'/lib"
+$ if sys_maj .lt. 7
+$ then
+$ if xvmsutils then write optf "''xvmsutilsf'/lib"
+$ endif
+$! if .not. axp then write optf "sys$library:vaxcrtl/lib"
+$ write optf "sys$library:vaxcrtl/lib"
+$ if dtsaver then write optf "sys$library:cde$libdtsvc.exe/share"
+$ if axp then write optf "sys$library:ucx$ipc_shr/share"
+$ if axp then write optf "sys$share:decw$xextlibshr/share"
+$ if axp then write optf "sys$share:decw$xtlibshrr5/share"
+$ if .not. axp then write optf "sys$library:ucx$ipc/lib"
+$ write optf "sys$share:decw$dxmlibshr/share"
+$ write optf "sys$share:decw$xlibshr/share"
+$ close optf
+$!
+$! LINK
+$ write sys$output "Linking XLock"
+$ link/map xlock/opt
+$!
+$! Create .opt file
+$ open/write optf xmlock.opt
+$ write sys$output "Compiling XmLock where cc = ''cc'"
+$ call make option.obj "cc option.c" option.c
+$ call make xmlock.obj "cc xmlock.c" xmlock.c
+$! Get libraries
+$! if .not. axp then write optf "sys$library:vaxcrtl/lib"
+$ write optf "sys$library:vaxcrtl/lib"
+$ if axp then write optf "sys$library:ucx$ipc_shr/share"
+$ if axp then write optf "sys$share:decw$xextlibshr/share"
+$ if axp then write optf "sys$share:decw$xtlibshrr5/share"
+$ if .not. axp then write optf "sys$library:ucx$ipc/lib"
+$! write optf "sys$share:decw$dxmlibshr/share"
+$ write optf "sys$share:decw$xmlibshr12/share"
+$ write optf "sys$share:decw$xlibshr/share"
+$ close optf
+$!
+$! LINK
+$ write sys$output "Linking XmLock"
+$ link/map xmlock/opt
+$!
+$ set noverify
+$ exit
+$!
+$Clobber: ! Delete executables, Purge directory and clean up object files
+$! and listings
+$ delete/noconfirm xlock.exe;*
+$ delete/noconfirm xmlock.exe;*
+$ set file/remove fadeplot.c;*
+$!
+$Clean: ! Purge directory, clean up object files and listings
+$ close/nolog optf
+$ purge
+$ delete/noconfirm *.lis;*
+$ delete/noconfirm *.obj;*
+$ delete/noconfirm *.opt;*
+$ delete/noconfirm *.map;*
+$ set file/remove eyes.xbm;*
+$ set file/remove flag.xbm;*
+$ set file/remove image.xbm;*
+$ set file/remove ghost.xbm;*
+$ set file/remove life.xbm;*
+$ set file/remove life1d.xbm;*
+$ set file/remove maze.xbm;*
+$ set file/remove puzzle.xbm;*
+$ set file/remove image.xpm;*
+$ set file/remove puzzle.xpm;*
+$ set file/remove amd.h;*
+$ set file/remove amd.c;*
+$!
+$ exit
+$!
+! SUBROUTINE TO CHECK DEPENDENCIES
+$ make: subroutine
+$ v='f$verify(0)
+$! p1 What we are trying to make
+$! p2 Command to make it
+$! p3 - p8 What it depends on
+$
+$ if (f$extract(0,3,p2) .eqs. "cc ") then write optf "''p1'"
+$ if (f$extract(0,3,p2) .eqs. "CC ") then write optf "''p1'"
+$
+$ if f$search(p1) .eqs. "" then goto MakeIt
+$ time=f$cvtime(f$file(p1,"RDT"))
+$ arg=3
+$Loop:
+$ argument=p'arg
+$ if argument .eqs. "" then goto Exit
+$ el=0
+$Loop2:
+$ file=f$element(el," ",argument)
+$ if file .eqs. " " then goto Endl
+$ afile=""
+$Loop3:
+$ ofile=afile
+$ afile=f$search(file)
+$ if afile .eqs. "" .or. afile .eqs. ofile then goto NextEl
+$ if f$cvtime(f$file(afile,"RDT")) .gts. time then goto MakeIt
+$ goto Loop3
+$NextEL:
+$ el=el+1
+$ goto Loop2
+$EndL:
+$ arg=arg+1
+$ if arg .le. 8 then goto Loop
+$ goto Exit
+$
+$MakeIt:
+$ set verify
+$ 'p2
+$ vv='f$verify(0)
+$Exit:
+$ if v then set verify
+$ endsubroutine
--- /dev/null
+
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)marquee.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * marquee.c - types a text-file for xlock the X Window System
+ * lockscreen.
+ *
+ * Copyright (c) 1995 by Tobias Gloth and David Bagley
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 03-Nov-95 Many changes (hopefully good ones) by David Bagley
+ * 01-Oct-95 Written by Tobias Gloth
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "marquee"
+#define HACK_INIT init_marquee
+#define HACK_DRAW draw_marquee
+#define DEF_DELAY 100000
+#define DEF_NCOLORS 64
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt marquee_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+#define font_height(f) ((f==None)?8:f->ascent + f->descent)
+
+extern XFontStruct *getFont(Display * display);
+extern char *getWords(int screen);
+extern int isRibbon(void);
+
+typedef struct {
+ int ascent;
+ int height;
+ int win_height;
+ int win_width;
+ int x;
+ int y;
+ int t;
+ int startx;
+ int nonblanks;
+ int color;
+ int time;
+ GC gc;
+ char *words;
+ char modwords[256];
+} marqueestruct;
+
+static marqueestruct *marquees = NULL;
+
+static XFontStruct *mode_font = None;
+static int char_width[256];
+
+static int
+font_width(XFontStruct * font, char ch)
+{
+ int dummy;
+ XCharStruct xcs;
+
+ XTextExtents(font, &ch, 1, &dummy, &dummy, &dummy, &xcs);
+ return xcs.width;
+}
+
+/* returns 1 if c is a printable char, the test should work for most 8 * bit
+ charsets (e.g. latin1), if we would use isprint, we would * depend of
+ locale settings that are probably incorrect. */
+
+static int
+is_valid_char(char c)
+{
+ return (unsigned char) c >= ' ';
+}
+
+static int
+is_char_back_char(char *s)
+{
+ return is_valid_char(*s) && *(s + 1) == '\b' &&
+ *(s + 2) && is_valid_char(*(s + 2));
+}
+
+static int
+char_back_char_width(char *s)
+{
+ int w1 = char_width[(int) (unsigned char) *s];
+ int w2 = char_width[(int) (unsigned char) *(s + 2)];
+
+ return w2 < w1 ? w1 : w2;
+}
+
+
+/*-
+ * fix strings of the form abc^H^H^H123 to a^H1b^H2c^H3, since we only
+ * handle backspace for char, back, char correctly. We do this without
+ * duplicating the string, but I'm not sure if there are conditions
+ * when the string is actually const. (when it is def_message, no ^Hs
+ * are present, I'm not sure about resource strings)
+ */
+
+static char *
+fixup_back(char *s)
+{
+ char *p, *p1, *p2;
+ char tmp[1000];
+ char *t;
+ char *w;
+
+ /* first of all, check if we have to do anything */
+
+ if (!*s)
+ return s;
+
+ for (p = s + 1; *p; p++)
+ if (*p == '\b' && *(p + 1) == '\b')
+ break;
+ if (!*p)
+ return s;
+
+ /* now search for runs of the form char*n, back*n, char. */
+
+ for (p = s; *p; p++) {
+ for (p1 = p; *p1 && is_valid_char(*p1); p1++);
+ if (*p1 == '\b') {
+ for (p2 = p1; *p2 && *p2 == '\b'; p2++);
+
+ /* do we have `enough' chars for the backspaces? */
+
+ if (p2 - p1 > 1 && p1 - p >= p2 - p1) {
+ if (p1 - p > p2 - p1) {
+ p = p1 - (p2 - p1);
+ }
+ /* the situation is as follows:
+ p points to the first char,
+ p1 to the first backspace (end first char run),
+ p2 to the first char in the 2nd run
+
+ Question: how to do that without tmp storage?
+ */
+ (void) strncpy(tmp, p, p1 - p);
+ t = tmp;
+ w = p;
+ while (t - tmp < p1 - p && *p2) {
+ *w++ = *t++;
+ *w++ = '\b';
+ *w++ = *p2++;
+ }
+ p = p2;
+ } else {
+ p = p2;
+ }
+ } else {
+ /* we hit some other control char, just continue at this
+ position */
+ p = p1;
+ }
+ }
+ return s;
+}
+
+static int
+text_font_width(char *string)
+{
+ int n = 0, x = 0, t = 0;
+
+ /* The following does not handle a tab or other weird junk */
+ while (*string != '\0') {
+ if (x > n)
+ n = x;
+ switch (*string) {
+ case '\v':
+ case '\f':
+ case '\n':
+ x = 0;
+ t = 0;
+ break;
+ case '\b':
+ /* we handle only char, ^H, char smartly, if
+ * we have something different, we use the
+ * (probably wrong) assumption that we have
+ * a monospaced font. */
+ if (t) {
+ t--;
+ x -= char_width[' '];
+ }
+ break;
+ case '\t':
+ x += char_width[' '] * (8 - (t % 8));
+ t = ((t + 8) / 8) * 8;
+ break;
+ case '\r':
+ break;
+ default:
+ t++;
+ /* handle char, ^H, char */
+ if (is_char_back_char(string)) {
+ x += char_back_char_width(string);
+ string += 2;
+ } else {
+ x += char_width[(int) (unsigned char) *string];
+ }
+ }
+ string++;
+ }
+ return n;
+}
+
+static int
+text_height(char *string)
+{
+ int n = 0;
+
+ while (*string != '\0') {
+ if ((*string == '\n') || (*string == '\f') || (*string == '\v'))
+ n++;
+ string++;
+ }
+ return n;
+}
+
+static int
+add_blanks(marqueestruct * mp)
+{
+ if (mp->t < 251) {
+ mp->modwords[mp->t] = ' ';
+ mp->t++;
+ mp->modwords[mp->t] = ' ';
+ mp->t++;
+ mp->modwords[mp->t] = '\0';
+ (void) strcat(mp->modwords, " ");
+ }
+ mp->x -= 2 * char_width[' '];
+ if (mp->x <= -char_width[(int) (unsigned char) mp->modwords[0]]) {
+ mp->x += char_width[(int) (unsigned char) mp->modwords[0]];
+ (void) memcpy(mp->modwords, &(mp->modwords[1]), mp->nonblanks);
+ mp->nonblanks--;
+ }
+ return (mp->nonblanks < 0);
+}
+
+static void
+add_letter(marqueestruct * mp, char letter)
+{
+ if (mp->t < 252) {
+ mp->modwords[mp->t] = letter;
+ mp->t++;
+ mp->modwords[mp->t] = '\0';
+ (void) strcat(mp->modwords, " ");
+ }
+ mp->x -= char_width[(int) letter];
+ if (mp->x <= -char_width[(int) (unsigned char) mp->modwords[0]]) {
+ mp->x += char_width[(int) (unsigned char) mp->modwords[0]];
+ (void) memcpy(mp->modwords, &(mp->modwords[1]), mp->t);
+ mp->modwords[mp->t] = ' ';
+ mp->t--;
+ } else
+ mp->nonblanks = mp->t;
+}
+
+void
+init_marquee(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ marqueestruct *mp;
+ XGCValues gcv;
+ int i;
+
+ if (marquees == NULL) {
+ if ((marquees = (marqueestruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (marqueestruct))) == NULL)
+ return;
+ }
+ mp = &marquees[MI_SCREEN(mi)];
+
+ mp->win_width = MI_WIN_WIDTH(mi);
+ mp->win_height = MI_WIN_HEIGHT(mi);
+ if (MI_NPIXELS(mi) > 2)
+ mp->color = NRAND(MI_NPIXELS(mi));
+ mp->time = 0;
+ mp->t = 0;
+ mp->nonblanks = 0;
+ mp->x = 0;
+ XClearWindow(display, MI_WINDOW(mi));
+ if (mode_font == None)
+ mode_font = getFont(display);
+ if (mp->gc == NULL && mode_font != None) {
+ gcv.font = mode_font->fid;
+ XSetFont(display, MI_GC(mi), mode_font->fid);
+ gcv.graphics_exposures = False;
+ gcv.foreground = MI_WIN_WHITE_PIXEL(mi);
+ gcv.background = MI_WIN_BLACK_PIXEL(mi);
+ mp->gc = XCreateGC(display, MI_WINDOW(mi),
+ GCForeground | GCBackground | GCGraphicsExposures | GCFont, &gcv);
+ mp->ascent = mode_font->ascent;
+ mp->height = font_height(mode_font);
+ for (i = 0; i < 256; i++)
+ if ((i >= (int) mode_font->min_char_or_byte2) &&
+ (i <= (int) mode_font->max_char_or_byte2))
+ char_width[i] = font_width(mode_font, (char) i);
+ else
+ char_width[i] = font_width(mode_font, (char) mode_font->default_char);
+ } else if (mode_font == None) {
+ for (i = 0; i < 256; i++)
+ char_width[i] = 8;
+ }
+ mp->words = fixup_back(getWords(MI_SCREEN(mi)));
+ mp->y = 0;
+
+ if (isRibbon()) {
+ mp->x = mp->win_width;
+ if (mp->win_height > font_height(mode_font))
+ mp->y += NRAND(mp->win_height - font_height(mode_font));
+ else if (mp->win_height < font_height(mode_font))
+ mp->y -= NRAND(font_height(mode_font) - mp->win_height);
+ } else {
+ int text_ht = text_height(mp->words);
+ int text_font_wid = text_font_width(mp->words);
+
+ if (mp->win_height > text_ht * font_height(mode_font))
+ mp->y = NRAND(mp->win_height - text_ht * font_height(mode_font));
+ if (mp->y < 0)
+ mp->y = 0;
+ mp->x = 0;
+ if (mp->win_width > text_font_wid)
+ mp->x += NRAND(mp->win_width - text_font_wid);
+ /* else if (mp->win_width < text_font_wid)
+ mp->x -= NRAND(text_font_wid - mp->win_width); */
+ mp->startx = mp->x;
+ }
+}
+
+void
+draw_marquee(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ marqueestruct *mp = &marquees[MI_SCREEN(mi)];
+ char *space = " ";
+ char *ch;
+
+ ch = mp->words;
+ if (isRibbon()) {
+ ch = mp->words;
+ switch (*ch) {
+ case '\0':
+ if (add_blanks(mp)) {
+ init_marquee(mi);
+ return;
+ }
+ break;
+ case '\b':
+ case '\r':
+ case '\n':
+ case '\t':
+ case '\v':
+ case '\f':
+ add_letter(mp, ' ');
+ mp->words++;
+ break;
+ default:
+ add_letter(mp, *ch);
+ mp->words++;
+ }
+ if (MI_NPIXELS(mi) > 2) {
+ XSetForeground(display, mp->gc, MI_PIXEL(mi, mp->color));
+ if (++mp->color == MI_NPIXELS(mi))
+ mp->color = 0;
+ } else
+ XSetForeground(display, mp->gc, MI_WIN_WHITE_PIXEL(mi));
+ XDrawImageString(display, MI_WINDOW(mi), mp->gc,
+ mp->x, mp->y + mp->ascent, mp->modwords, mp->t + 2);
+ } else {
+ switch (*ch) {
+ case '\0':
+ if (++mp->time > 16)
+ init_marquee(mi);
+ return;
+ case '\b':
+ if (mp->t) {
+ /* see note in text_font_width */
+ mp->t--;
+ mp->x -= char_width[' '];
+ }
+ break;
+ case '\v':
+ case '\f':
+ case '\n':
+ mp->x = mp->startx;
+ mp->t = 0;
+ mp->y += mp->height;
+ if (mp->y + mp->height > mp->win_height) {
+ XCopyArea(display, window, window, mp->gc,
+ 0, mp->height, mp->win_width, mp->y - mp->height, 0, 0);
+ XSetForeground(display, mp->gc, MI_WIN_BLACK_PIXEL(mi));
+ mp->y -= mp->height;
+ XFillRectangle(display, window, mp->gc,
+ 0, mp->y, mp->win_width, mp->height);
+ }
+ break;
+ case '\t':
+ XDrawString(display, window, mp->gc, mp->x, mp->y + mp->ascent,
+ space, 8 - (mp->t % 8));
+ mp->x += char_width[' '] * (8 - (mp->t % 8));
+ mp->t = ((mp->t + 8) / 8) * 8;
+ break;
+ case '\r':
+ break;
+ default:
+ if (MI_NPIXELS(mi) > 2) {
+ XSetForeground(display, mp->gc, MI_PIXEL(mi, mp->color));
+ if (++mp->color == MI_NPIXELS(mi))
+ mp->color = 0;
+ } else
+ XSetForeground(display, mp->gc, MI_WIN_WHITE_PIXEL(mi));
+ if (is_char_back_char(ch)) {
+ int xmid = mp->x + (char_back_char_width(ch) + 1) / 2;
+
+ XDrawString(display, window, mp->gc,
+ xmid - char_width[(int) (unsigned char) *ch] / 2,
+ mp->y + mp->ascent, ch, 1);
+ XDrawString(display, window, mp->gc,
+ xmid - char_width[(int) (unsigned char) *(ch + 2)] / 2,
+ mp->y + mp->ascent, ch + 2, 1);
+ mp->x += char_back_char_width(ch);
+ mp->words += 2;
+ } else {
+ XDrawString(display, window, mp->gc,
+ mp->x, mp->y + mp->ascent, ch, 1);
+ mp->x += char_width[(int) (unsigned char) *ch];
+ }
+ mp->t++;
+ }
+ mp->words++;
+ }
+}
+
+void
+release_marquee(ModeInfo * mi)
+{
+ if (marquees != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ marqueestruct *mp = &marquees[screen];
+
+ if (mp->gc != NULL)
+ XFreeGC(MI_DISPLAY(mi), mp->gc);
+ }
+ (void) free((void *) marquees);
+ marquees = NULL;
+ }
+ if (mode_font != None) {
+ XFreeFont(MI_DISPLAY(mi), mode_font);
+ mode_font = None;
+ }
+}
+
+void
+refresh_marquee(ModeInfo * mi)
+{
+ /* Do nothing, it will refresh by itself */
+}
--- /dev/null
+
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)maze.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * maze.c - A maze for xlock, the X Window System lockscreen.
+ *
+ * Copyright (c) 1988 by Sun Microsystems
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 27-Feb-96: Add ModeInfo args to init and callback hooks, use new
+ * ModeInfo handle to specify long pauses (eliminate onepause).
+ * Ron Hitchens <ron@idiom.com>
+ * 20-Jul-95: minimum size fix Peter Schmitzberger <schmitz@coma.sbg.ac.at>
+ * 17-Jun-95: removed sleep statements
+ * 22-Mar-95: multidisplay fix Caleb Epstein <epstein_caleb@jpmorgan.com>
+ * 9-Mar-95: changed how batchcount is used
+ * 27-Feb-95: patch for VMS
+ * 4-Feb-95: patch to slow down maze Heath Kehoe <hakehoe@icaen.uiowa.edu>
+ * 17-Jun-94: HP ANSI C compiler needs a type cast for gray_bits
+ * Richard Lloyd <R.K.Lloyd@csc.liv.ac.uk>
+ * 2-Sep-93: xlock version David Bagley <bagleyd@bigfoot.com>
+ * 7-Mar-93: Good ideas from xscreensaver Jamie Zawinski <jwz@netscape.com>
+ * 6-Jun-85: Martin Weiss Sun Microsystems
+ */
+
+/*-
+ * original copyright
+ * **************************************************************************
+ * 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.
+ * ***************************************************************************
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "maze"
+#define HACK_INIT init_maze
+#define HACK_DRAW draw_maze
+#define DEF_DELAY 1000
+#define DEF_CYCLES 300
+#define DEF_SIZE -40
+#define DEF_NCOLORS 64
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt maze_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+#include "bitmaps/gray1.xbm"
+
+/* aliases for vars defined in the bitmap file */
+#define ICON_WIDTH image_width
+#define ICON_HEIGHT image_height
+#define ICON_BITS image_bits
+
+#include "maze.xbm"
+
+#define MINGRIDSIZE 3
+#define MINSIZE 8
+
+#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
+
+static XImage *logo = NULL;
+static int graphics_format = -1;
+
+typedef struct {
+ unsigned char x;
+ unsigned char y;
+ char dir;
+} paths;
+
+typedef struct {
+ int ncols, nrows, maze_size, xb, yb;
+ int sqnum, cur_sq_x, cur_sq_y, path_length;
+ int start_x, start_y, start_dir, end_x, end_y, end_dir;
+ int logo_x, logo_y;
+ int width, height;
+ int xs, ys, logo_size_x, logo_size_y;
+ int solving, current_path, stage;
+ /*int cycles; */
+ unsigned short *maze;
+ paths *move_list;
+ paths *save_path, *path;
+ GC grayGC;
+ Pixmap graypix;
+} mazestruct;
+
+static mazestruct *mazes = NULL;
+
+static void draw_wall(ModeInfo * mi, int i, int j, int dir);
+static void draw_solid_square(ModeInfo * mi, GC gc, register int i, register int j, register int dir);
+static void enter_square(ModeInfo * mi, int n);
+
+static void
+free_maze(mazestruct * mp)
+{
+ if (mp->maze) {
+ (void) free((void *) mp->maze);
+ mp->maze = NULL;
+ }
+ if (mp->move_list) {
+ (void) free((void *) mp->move_list);
+ mp->move_list = NULL;
+ }
+ if (mp->save_path) {
+ (void) free((void *) mp->save_path);
+ mp->save_path = NULL;
+ }
+ if (mp->path) {
+ (void) free((void *) mp->path);
+ mp->path = NULL;
+ }
+}
+
+static void
+set_maze_sizes(ModeInfo * mi)
+{
+ mazestruct *mp = &mazes[MI_SCREEN(mi)];
+ int size = MI_SIZE(mi);
+
+ if (size < -MINSIZE) {
+ free_maze(mp);
+ mp->ys = NRAND(MIN(-size, MAX(MINSIZE, (MIN(mp->width, mp->height) - 1) /
+ MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE;
+ } else if (size < MINSIZE) {
+ if (!size)
+ mp->ys = MAX(MINSIZE, (MIN(mp->width, mp->height) - 1) / MINGRIDSIZE);
+ else
+ mp->ys = MINSIZE;
+ } else
+ mp->ys = MIN(size, MAX(MINSIZE, (MIN(mp->width, mp->height) - 1) /
+ MINGRIDSIZE));
+ mp->xs = mp->ys;
+ mp->logo_size_x = logo->width / mp->xs + 1;
+ mp->logo_size_y = logo->height / mp->ys + 1;
+
+ mp->ncols = MAX((mp->width - 1) / mp->xs, MINGRIDSIZE);
+ mp->nrows = MAX((mp->height - 1) / mp->ys, MINGRIDSIZE);
+
+ mp->xb = (mp->width - mp->ncols * mp->xs) / 2;
+ mp->yb = (mp->height - mp->nrows * mp->ys) / 2;
+ mp->maze_size = mp->ncols * mp->nrows;
+ if (!mp->maze)
+ mp->maze = (unsigned short *)
+ calloc(mp->maze_size, sizeof (unsigned short));
+
+ if (!mp->move_list)
+ mp->move_list = (paths *) calloc(mp->maze_size, sizeof (paths));
+ if (!mp->save_path)
+ mp->save_path = (paths *) calloc(mp->maze_size, sizeof (paths));
+ if (!mp->path)
+ mp->path = (paths *) calloc(mp->maze_size, sizeof (paths));
+} /* end of set_maze_sizes */
+
+
+static void
+initialize_maze(ModeInfo * mi)
+{ /* draw the surrounding wall and start/end squares */
+ Display *display = MI_DISPLAY(mi);
+ mazestruct *mp = &mazes[MI_SCREEN(mi)];
+ register int i, j, wall;
+
+ if (MI_NPIXELS(mi) <= 2) {
+ XSetForeground(display, MI_GC(mi), MI_WIN_WHITE_PIXEL(mi));
+ XSetForeground(display, mp->grayGC, MI_WIN_WHITE_PIXEL(mi));
+ } else {
+ i = NRAND(MI_NPIXELS(mi));
+ XSetForeground(display, MI_GC(mi), MI_PIXEL(mi, i));
+ XSetForeground(display, mp->grayGC, MI_PIXEL(mi, i));
+ }
+ /* initialize all squares */
+ for (i = 0; i < mp->ncols; i++) {
+ for (j = 0; j < mp->nrows; j++) {
+ mp->maze[i * mp->nrows + j] = 0;
+ }
+ }
+
+ /* top wall */
+ for (i = 0; i < mp->ncols; i++) {
+ mp->maze[i * mp->nrows] |= WALL_TOP;
+ }
+
+ /* right wall */
+ for (j = 0; j < mp->nrows; j++) {
+ mp->maze[(mp->ncols - 1) * mp->nrows + j] |= WALL_RIGHT;
+ }
+
+ /* bottom wall */
+ for (i = 0; i < mp->ncols; i++) {
+ mp->maze[i * mp->nrows + mp->nrows - 1] |= WALL_BOTTOM;
+ }
+
+ /* left wall */
+ for (j = 0; j < mp->nrows; j++) {
+ mp->maze[j] |= WALL_LEFT;
+ }
+
+ /* set start square */
+ wall = NRAND(4);
+ switch (wall) {
+ case 0:
+ i = NRAND(mp->ncols);
+ j = 0;
+ break;
+ case 1:
+ i = mp->ncols - 1;
+ j = NRAND(mp->nrows);
+ break;
+ case 2:
+ i = NRAND(mp->ncols);
+ j = mp->nrows - 1;
+ break;
+ case 3:
+ i = 0;
+ j = NRAND(mp->nrows);
+ break;
+ }
+ mp->maze[i * mp->nrows + j] |= START_SQUARE;
+ mp->maze[i * mp->nrows + j] |= (DOOR_IN_TOP >> wall);
+ mp->maze[i * mp->nrows + j] &= ~(WALL_TOP >> wall);
+ mp->cur_sq_x = i;
+ mp->cur_sq_y = j;
+ mp->start_x = i;
+ mp->start_y = j;
+ mp->start_dir = wall;
+ mp->sqnum = 0;
+
+ /* set end square */
+ wall = (wall + 2) % 4;
+ switch (wall) {
+ case 0:
+ i = NRAND(mp->ncols);
+ j = 0;
+ break;
+ case 1:
+ i = mp->ncols - 1;
+ j = NRAND(mp->nrows);
+ break;
+ case 2:
+ i = NRAND(mp->ncols);
+ j = mp->nrows - 1;
+ break;
+ case 3:
+ i = 0;
+ j = NRAND(mp->nrows);
+ break;
+ }
+ mp->maze[i * mp->nrows + j] |= END_SQUARE;
+ mp->maze[i * mp->nrows + j] |= (DOOR_OUT_TOP >> wall);
+ mp->maze[i * mp->nrows + j] &= ~(WALL_TOP >> wall);
+ mp->end_x = i;
+ mp->end_y = j;
+ mp->end_dir = wall;
+
+ /* set logo */
+ if ((mp->ncols > mp->logo_size_x + 6) &&
+ (mp->nrows > mp->logo_size_y + 6)) {
+ mp->logo_x = NRAND(mp->ncols - mp->logo_size_x - 6) + 3;
+ mp->logo_y = NRAND(mp->nrows - mp->logo_size_y - 6) + 3;
+
+ for (i = 0; i < mp->logo_size_x; i++)
+ for (j = 0; j < mp->logo_size_y; j++)
+ mp->maze[(mp->logo_x + i) * mp->nrows + mp->logo_y + j] |=
+ DOOR_IN_TOP;
+ } else
+ mp->logo_y = mp->logo_x = -1;
+}
+
+static int
+choose_door(ModeInfo * mi)
+{ /* pick a new path */
+ mazestruct *mp = &mazes[MI_SCREEN(mi)];
+ int candidates[3];
+ register int num_candidates;
+
+ num_candidates = 0;
+
+ /* top wall */
+ if ((!(mp->maze[mp->cur_sq_x * mp->nrows + mp->cur_sq_y] &
+ DOOR_IN_TOP)) &&
+ (!(mp->maze[mp->cur_sq_x * mp->nrows + mp->cur_sq_y] &
+ DOOR_OUT_TOP)) &&
+ (!(mp->maze[mp->cur_sq_x * mp->nrows + mp->cur_sq_y] &
+ WALL_TOP))) {
+ if (mp->maze[mp->cur_sq_x * mp->nrows + mp->cur_sq_y - 1] &
+ DOOR_IN_ANY) {
+ mp->maze[mp->cur_sq_x * mp->nrows + mp->cur_sq_y] |= WALL_TOP;
+ mp->maze[mp->cur_sq_x * mp->nrows + mp->cur_sq_y - 1] |=
+ WALL_BOTTOM;
+ } else
+ candidates[num_candidates++] = 0;
+ }
+ /* right wall */
+ if ((!(mp->maze[mp->cur_sq_x * mp->nrows + mp->cur_sq_y] &
+ DOOR_IN_RIGHT)) &&
+ (!(mp->maze[mp->cur_sq_x * mp->nrows + mp->cur_sq_y] &
+ DOOR_OUT_RIGHT)) &&
+ (!(mp->maze[mp->cur_sq_x * mp->nrows + mp->cur_sq_y] &
+ WALL_RIGHT))) {
+ if (mp->maze[(mp->cur_sq_x + 1) * mp->nrows + mp->cur_sq_y] &
+ DOOR_IN_ANY) {
+ mp->maze[mp->cur_sq_x * mp->nrows + mp->cur_sq_y] |= WALL_RIGHT;
+ mp->maze[(mp->cur_sq_x + 1) * mp->nrows + mp->cur_sq_y] |=
+ WALL_LEFT;
+ } else
+ candidates[num_candidates++] = 1;
+ }
+ /* bottom wall */
+ if ((!(mp->maze[mp->cur_sq_x * mp->nrows + mp->cur_sq_y] &
+ DOOR_IN_BOTTOM)) &&
+ (!(mp->maze[mp->cur_sq_x * mp->nrows + mp->cur_sq_y] &
+ DOOR_OUT_BOTTOM)) &&
+ (!(mp->maze[mp->cur_sq_x * mp->nrows + mp->cur_sq_y] &
+ WALL_BOTTOM))) {
+ if (mp->maze[mp->cur_sq_x * mp->nrows + mp->cur_sq_y + 1] &
+ DOOR_IN_ANY) {
+ mp->maze[mp->cur_sq_x * mp->nrows + mp->cur_sq_y] |= WALL_BOTTOM;
+ mp->maze[mp->cur_sq_x * mp->nrows + mp->cur_sq_y + 1] |= WALL_TOP;
+ } else
+ candidates[num_candidates++] = 2;
+ }
+ /* left wall */
+ if ((!(mp->maze[mp->cur_sq_x * mp->nrows + mp->cur_sq_y] &
+ DOOR_IN_LEFT)) &&
+ (!(mp->maze[mp->cur_sq_x * mp->nrows + mp->cur_sq_y] &
+ DOOR_OUT_LEFT)) &&
+ (!(mp->maze[mp->cur_sq_x * mp->nrows + mp->cur_sq_y] &
+ WALL_LEFT))) {
+ if (mp->maze[(mp->cur_sq_x - 1) * mp->nrows + mp->cur_sq_y] &
+ DOOR_IN_ANY) {
+ mp->maze[mp->cur_sq_x * mp->nrows + mp->cur_sq_y] |= WALL_LEFT;
+ mp->maze[(mp->cur_sq_x - 1) * mp->nrows + mp->cur_sq_y] |=
+ WALL_RIGHT;
+ } else
+ candidates[num_candidates++] = 3;
+ }
+ /* done wall */
+ if (num_candidates == 0)
+ return (-1);
+ if (num_candidates == 1)
+ return (candidates[0]);
+ return (candidates[NRAND(num_candidates)]);
+
+} /* end of choose_door() */
+
+static void
+draw_maze_walls(ModeInfo * mi)
+{ /* pick a new path */
+ mazestruct *mp = &mazes[MI_SCREEN(mi)];
+ int i, j, isize;
+
+ for (i = 0; i < mp->ncols; i++) {
+ isize = i * mp->nrows;
+ for (j = 0; j < mp->nrows; j++) {
+ /* Only need to draw half the walls... since they are shared */
+ /* top wall */
+ if ( /*(!(mp->maze[isize + j] & DOOR_IN_TOP)) &&
+ (!(mp->maze[isize + j] & DOOR_OUT_TOP)) && */
+ (mp->maze[isize + j] & WALL_TOP))
+ draw_wall(mi, i, j, 0);
+ /* left wall */
+ if ( /*(!(mp->maze[isize + j] & DOOR_IN_RIGHT)) &&
+ (!(mp->maze[isize + j] & DOOR_OUT_RIGHT)) && */
+ (mp->maze[isize + j] & WALL_RIGHT))
+ draw_wall(mi, i, j, 1);
+ }
+ }
+} /* end of draw_maze_walls() */
+
+static int
+backup(mazestruct * mp)
+{ /* back up a move */
+ mp->sqnum--;
+ if (mp->sqnum >= 0) {
+ mp->cur_sq_x = mp->move_list[mp->sqnum].x;
+ mp->cur_sq_y = mp->move_list[mp->sqnum].y;
+ }
+ return (mp->sqnum);
+} /* end of backup() */
+
+static void
+create_maze_walls(ModeInfo * mi)
+{ /* create a maze layout given the intiialized maze */
+ mazestruct *mp = &mazes[MI_SCREEN(mi)];
+ register int i, newdoor;
+
+ for (;;) {
+ mp->move_list[mp->sqnum].x = mp->cur_sq_x;
+ mp->move_list[mp->sqnum].y = mp->cur_sq_y;
+ mp->move_list[mp->sqnum].dir = -1;
+ while ((newdoor = choose_door(mi)) == -1) /* pick a door */
+ if (backup(mp) == -1) /* no more doors ... backup */
+ return; /* done ... return */
+
+ /* mark the out door */
+ mp->maze[mp->cur_sq_x * mp->nrows + mp->cur_sq_y] |=
+ (DOOR_OUT_TOP >> newdoor);
+
+ switch (newdoor) {
+ case 0:
+ mp->cur_sq_y--;
+ break;
+ case 1:
+ mp->cur_sq_x++;
+ break;
+ case 2:
+ mp->cur_sq_y++;
+ break;
+ case 3:
+ mp->cur_sq_x--;
+ break;
+ }
+ mp->sqnum++;
+
+ /* mark the in door */
+ mp->maze[mp->cur_sq_x * mp->nrows + mp->cur_sq_y] |=
+ (DOOR_IN_TOP >> ((newdoor + 2) % 4));
+
+ /* if end square set path length and save path */
+ if (mp->maze[mp->cur_sq_x * mp->nrows + mp->cur_sq_y] & END_SQUARE) {
+ mp->path_length = mp->sqnum;
+ for (i = 0; i < mp->path_length; i++) {
+ mp->save_path[i].x = mp->move_list[i].x;
+ mp->save_path[i].y = mp->move_list[i].y;
+ mp->save_path[i].dir = mp->move_list[i].dir;
+ }
+ }
+ }
+
+} /* end of create_maze_walls() */
+
+static void
+draw_maze_border(ModeInfo * mi)
+{ /* draw the maze outline */
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ mazestruct *mp = &mazes[MI_SCREEN(mi)];
+ register int i, j;
+
+ for (i = 0; i < mp->ncols; i++) {
+ if (mp->maze[i * mp->nrows] & WALL_TOP) {
+ XDrawLine(display, window, gc,
+ mp->xb + mp->xs * i, mp->yb,
+ mp->xb + mp->xs * (i + 1), mp->yb);
+ }
+ if ((mp->maze[i * mp->nrows + mp->nrows - 1] & WALL_BOTTOM)) {
+ XDrawLine(display, window, gc,
+ mp->xb + mp->xs * i,
+ mp->yb + mp->ys * (mp->nrows),
+ mp->xb + mp->xs * (i + 1),
+ mp->yb + mp->ys * (mp->nrows));
+ }
+ }
+ for (j = 0; j < mp->nrows; j++) {
+ if (mp->maze[(mp->ncols - 1) * mp->nrows + j] & WALL_RIGHT) {
+ XDrawLine(display, window, gc,
+ mp->xb + mp->xs * mp->ncols,
+ mp->yb + mp->ys * j,
+ mp->xb + mp->xs * mp->ncols,
+ mp->yb + mp->ys * (j + 1));
+ }
+ if (mp->maze[j] & WALL_LEFT) {
+ XDrawLine(display, window, gc,
+ mp->xb, mp->yb + mp->ys * j,
+ mp->xb, mp->yb + mp->ys * (j + 1));
+ }
+ }
+
+ if (mp->logo_x != -1) {
+ XPutImage(display, window, gc, logo,
+ 0, 0,
+ mp->xb + mp->xs * mp->logo_x +
+ (mp->xs * mp->logo_size_x - logo->width + 1) / 2,
+ mp->yb + mp->ys * mp->logo_y +
+ (mp->ys * mp->logo_size_y - logo->height + 1) / 2,
+ logo->width, logo->height);
+ }
+ draw_solid_square(mi, gc, mp->start_x, mp->start_y, mp->start_dir);
+ draw_solid_square(mi, gc, mp->end_x, mp->end_y, mp->end_dir);
+} /* end of draw_maze() */
+
+
+static void
+draw_wall(ModeInfo * mi, int i, int j, int dir)
+{ /* draw a single wall */
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ mazestruct *mp = &mazes[MI_SCREEN(mi)];
+
+ switch (dir) {
+ case 0:
+ XDrawLine(display, window, gc,
+ mp->xb + mp->xs * i,
+ mp->yb + mp->ys * j,
+ mp->xb + mp->xs * (i + 1),
+ mp->yb + mp->ys * j);
+ break;
+ case 1:
+ XDrawLine(display, window, gc,
+ mp->xb + mp->xs * (i + 1),
+ mp->yb + mp->ys * j,
+ mp->xb + mp->xs * (i + 1),
+ mp->yb + mp->ys * (j + 1));
+ break;
+ case 2:
+ XDrawLine(display, window, gc,
+ mp->xb + mp->xs * i,
+ mp->yb + mp->ys * (j + 1),
+ mp->xb + mp->xs * (i + 1),
+ mp->yb + mp->ys * (j + 1));
+ break;
+ case 3:
+ XDrawLine(display, window, gc,
+ mp->xb + mp->xs * i,
+ mp->yb + mp->ys * j,
+ mp->xb + mp->xs * i,
+ mp->yb + mp->ys * (j + 1));
+ break;
+ }
+} /* end of draw_wall */
+
+
+static void
+draw_solid_square(ModeInfo * mi, GC gc,
+ register int i, register int j, register int dir)
+{ /* draw a solid square in a square */
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ mazestruct *mp = &mazes[MI_SCREEN(mi)];
+
+ switch (dir) {
+ case 0:
+ XFillRectangle(display, window, gc,
+ mp->xb + 3 + mp->xs * i,
+ mp->yb - 3 + mp->ys * j,
+ mp->xs - 6, mp->ys);
+ break;
+ case 1:
+ XFillRectangle(display, window, gc,
+ mp->xb + 3 + mp->xs * i,
+ mp->yb + 3 + mp->ys * j,
+ mp->xs, mp->ys - 6);
+ break;
+ case 2:
+ XFillRectangle(display, window, gc,
+ mp->xb + 3 + mp->xs * i,
+ mp->yb + 3 + mp->ys * j,
+ mp->xs - 6, mp->ys);
+ break;
+ case 3:
+ XFillRectangle(display, window, gc,
+ mp->xb - 3 + mp->xs * i,
+ mp->yb + 3 + mp->ys * j,
+ mp->xs, mp->ys - 6);
+ break;
+ }
+
+} /* end of draw_solid_square() */
+
+
+static void
+solve_maze(ModeInfo * mi)
+{ /* solve it with graphical feedback */
+ mazestruct *mp = &mazes[MI_SCREEN(mi)];
+
+ if (!mp->solving) {
+ /* plug up the surrounding wall */
+ mp->maze[mp->start_x * mp->nrows + mp->start_y] |=
+ (WALL_TOP >> mp->start_dir);
+ mp->maze[mp->end_x * mp->nrows + mp->end_y] |=
+ (WALL_TOP >> mp->end_dir);
+
+ /* initialize search path */
+ mp->current_path = 0;
+ mp->path[mp->current_path].x = mp->end_x;
+ mp->path[mp->current_path].y = mp->end_y;
+ mp->path[mp->current_path].dir = -1;
+
+ mp->solving = 1;
+ }
+ if (++mp->path[mp->current_path].dir >= 4) {
+ /* This draw is to fill in the dead ends,
+ it ends up drawing more gray boxes then it needs to. */
+ draw_solid_square(mi, mp->grayGC,
+ (int) (mp->path[mp->current_path].x),
+ (int) (mp->path[mp->current_path].y),
+ (int) (mp->path[mp->current_path - 1].dir + 2) % 4);
+
+ mp->current_path--;
+ draw_solid_square(mi, mp->grayGC,
+ (int) (mp->path[mp->current_path].x),
+ (int) (mp->path[mp->current_path].y),
+ (int) (mp->path[mp->current_path].dir));
+ } else if (!(mp->maze[mp->path[mp->current_path].x * mp->nrows +
+ mp->path[mp->current_path].y] &
+ (WALL_TOP >> mp->path[mp->current_path].dir)) &&
+ ((mp->current_path == 0) ||
+ ((mp->path[mp->current_path].dir !=
+ (unsigned char) (mp->path[mp->current_path - 1].dir +
+ 2) % 4)))) {
+ enter_square(mi, mp->current_path);
+ mp->current_path++;
+ if (mp->maze[mp->path[mp->current_path].x * mp->nrows +
+ mp->path[mp->current_path].y] & START_SQUARE) {
+ mp->solving = 0;
+ return;
+ }
+ }
+} /* end of solve_maze() */
+
+
+static void
+enter_square(ModeInfo * mi, int n)
+{ /* move into a neighboring square */
+ mazestruct *mp = &mazes[MI_SCREEN(mi)];
+
+ draw_solid_square(mi, MI_GC(mi), (int) mp->path[n].x, (int) mp->path[n].y,
+ (int) mp->path[n].dir);
+
+ mp->path[n + 1].dir = -1;
+ switch (mp->path[n].dir) {
+ case 0:
+ mp->path[n + 1].x = mp->path[n].x;
+ mp->path[n + 1].y = mp->path[n].y - 1;
+ break;
+ case 1:
+ mp->path[n + 1].x = mp->path[n].x + 1;
+ mp->path[n + 1].y = mp->path[n].y;
+ break;
+ case 2:
+ mp->path[n + 1].x = mp->path[n].x;
+ mp->path[n + 1].y = mp->path[n].y + 1;
+ break;
+ case 3:
+ mp->path[n + 1].x = mp->path[n].x - 1;
+ mp->path[n + 1].y = mp->path[n].y;
+ break;
+ }
+
+
+} /* end of enter_square() */
+
+void
+init_maze(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ mazestruct *mp;
+
+ if (mazes == NULL) {
+ if ((mazes = (mazestruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (mazestruct))) == NULL)
+ return;
+ }
+ mp = &mazes[MI_SCREEN(mi)];
+
+ mp->width = MI_WIN_WIDTH(mi);
+ mp->height = MI_WIN_HEIGHT(mi);
+ mp->width = (mp->width >= 32) ? mp->width : 32;
+ mp->height = (mp->height >= 32) ? mp->height : 32;
+
+ if (!logo) {
+ getBitmap(&logo, ICON_WIDTH, ICON_HEIGHT, ICON_BITS,
+ &graphics_format);
+ }
+ if (!mp->graypix) {
+ mp->graypix = XCreateBitmapFromData(display, MI_WINDOW(mi),
+ (char *) gray1_bits, gray1_width, gray1_height);
+ }
+ if (!mp->grayGC) {
+ mp->grayGC = XCreateGC(display, MI_WINDOW(mi), 0L, (XGCValues *) 0);
+ XSetBackground(display, mp->grayGC, MI_WIN_BLACK_PIXEL(mi));
+ XSetFillStyle(display, mp->grayGC, FillOpaqueStippled);
+ XSetStipple(display, mp->grayGC, mp->graypix);
+ }
+ mp->solving = 0;
+ mp->stage = 0;
+ /*mp->time = 0;
+ mp->cycles = MI_CYCLES(mi);
+ if (mp->cycles < 4)
+ mp->cycles = 4; */
+}
+
+void
+draw_maze(ModeInfo * mi)
+{
+ mazestruct *mp = &mazes[MI_SCREEN(mi)];
+
+ if (mp->solving) {
+ solve_maze(mi);
+ return;
+ }
+ switch (mp->stage) {
+ case 0:
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+ set_maze_sizes(mi);
+ initialize_maze(mi);
+ create_maze_walls(mi);
+ mp->stage++;
+ break;
+ case 1:
+ draw_maze_border(mi);
+ mp->stage++;
+ break;
+ case 2:
+ draw_maze_walls(mi);
+ mp->stage++;
+ break;
+ case 3:
+ MI_PAUSE(mi) = 1000000;
+ /*if (++mp->time > mp->cycles / 4) */
+ mp->stage++;
+ break;
+ case 4:
+ solve_maze(mi);
+ mp->stage++;
+ break;
+ case 5:
+ MI_PAUSE(mi) = 2000000;
+ /*if (++mp->time > mp->cycles) */
+ init_maze(mi);
+ break;
+ }
+} /* end of draw_maze() */
+
+void
+release_maze(ModeInfo * mi)
+{
+ if (mazes != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ mazestruct *mp = &mazes[screen];
+
+ free_maze(mp);
+ if (mp->grayGC != NULL)
+ XFreeGC(MI_DISPLAY(mi), mp->grayGC);
+ if (mp->graypix != None)
+ XFreePixmap(MI_DISPLAY(mi), mp->graypix);
+ }
+ (void) free((void *) mazes);
+ mazes = NULL;
+ }
+ destroyBitmap(&logo, &graphics_format);
+}
+
+void
+refresh_maze(ModeInfo * mi)
+{
+ mazestruct *mp = &mazes[MI_SCREEN(mi)];
+
+ if (mp->stage > 1) {
+ mp->stage = 3;
+ mp->sqnum = 0;
+ mp->cur_sq_x = mp->start_x;
+ mp->cur_sq_y = mp->start_y;
+ mp->maze[mp->start_x * mp->nrows + mp->start_y] |= START_SQUARE;
+ mp->maze[mp->start_x * mp->nrows + mp->start_y] |=
+ (DOOR_IN_TOP >> mp->start_dir);
+ mp->maze[mp->start_x * mp->nrows + mp->start_y] &=
+ ~(WALL_TOP >> mp->start_dir);
+ mp->maze[mp->end_x * mp->nrows + mp->end_y] |= END_SQUARE;
+ mp->maze[mp->end_x * mp->nrows + mp->end_y] |=
+ (DOOR_OUT_TOP >> mp->end_dir);
+ mp->maze[mp->end_x * mp->nrows + mp->end_y] &=
+ ~(WALL_TOP >> mp->end_dir);
+ draw_maze_border(mi);
+ draw_maze_walls(mi);
+ }
+ mp->solving = 0;
+}
--- /dev/null
+./bitmaps/l-x11.xbm
\ No newline at end of file
--- /dev/null
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+# Author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain
+
+errstatus=0
+
+for file
+do
+ set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+ shift
+
+ pathcomp=
+ for d in ${1+"$@"} ; do
+ pathcomp="$pathcomp$d"
+ case "$pathcomp" in
+ -* ) pathcomp=./$pathcomp ;;
+ esac
+
+ if test ! -d "$pathcomp"; then
+ echo "mkdir $pathcomp" 1>&2
+ mkdir "$pathcomp" || errstatus=$?
+ fi
+
+ pathcomp="$pathcomp/"
+ done
+done
+
+exit $errstatus
--- /dev/null
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)mode.c 4.02 97/04/01 xlockmore";
+
+#endif
+/*-
+ * mode.c - Modes for xlock.
+ *
+ * See xlock.c for copying information.
+ *
+ * Revision History:
+ * 01-Apr-97: Fixed memory leak in XStringListToTextProperty.
+ * 23-Feb-96: Extensive revision to implement new mode hooks and stuff
+ * Ron Hitchens <ron@idiom.com>
+ * 04-Sep-95: Moved over from mode.h (previously resource.h) with new
+ * "&*_opts" by Heath A. Kehoe <hakehoe@icaen.uiowa.edu>.
+ *
+ */
+
+#include "xlock.h"
+#include <ctype.h>
+
+/* -------------------------------------------------------------------- */
+
+/*-
+ * Mode options: If batchcount, cycles, or size options are set to 1 ...
+ * they are probably not used by the mode.
+ */
+
+LockStruct LockProcs[] =
+{
+ {"blot", init_blot, draw_blot, release_blot,
+ refresh_blot, init_blot, NULL, &blot_opts,
+ 200000, 6, 30, 1, 0.4,
+ "Shows Rorschach's ink blot test", 0, NULL},
+ {"bouboule", init_bouboule, draw_bouboule, release_bouboule,
+ refresh_bouboule, init_bouboule, NULL, &bouboule_opts,
+ 5000, 100, 1, 15, 1.0,
+ "Shows Mimi's bouboule of moving stars", 0, NULL},
+ {"bug", init_bug, draw_bug, release_bug,
+ refresh_bug, init_bug, NULL, &bug_opts,
+ 75000, 10, 32767, -4, 1.0,
+ "Shows Palmiter's bug evolution and garden of Eden", 0, NULL},
+ {"clock", init_clock, draw_clock, release_clock,
+ refresh_clock, init_clock, NULL, &clock_opts,
+ 100000, -16, 200, -200, 1.0,
+ "Shows Packard's clock", 0, NULL},
+ {"crystal", init_crystal, draw_crystal, release_crystal,
+ refresh_crystal, init_crystal, NULL, &crystal_opts,
+ 60000, -40, 200, -15, 1.0,
+ "Shows polygons in 2D plane groups", 0, NULL},
+ {"daisy", init_daisy, draw_daisy, release_daisy,
+ refresh_daisy, init_daisy, NULL, &daisy_opts,
+ 100000, 300, 350, 1, 1.0,
+ "Shows a meadow of daisies", 0, NULL},
+ {"dclock", init_dclock, draw_dclock, release_dclock,
+ refresh_dclock, init_dclock, NULL, &dclock_opts,
+ 10000, 1, 10000, 1, 0.2,
+ "Shows a floating digital clock", 0, NULL},
+ {"demon", init_demon, draw_demon, release_demon,
+ refresh_demon, init_demon, NULL, &demon_opts,
+ 50000, 0, 1000, -7, 1.0,
+ "Shows Griffeath's cellular automata", 0, NULL},
+ {"eyes", init_eyes, draw_eyes, release_eyes,
+ refresh_eyes, init_eyes, NULL, &eyes_opts,
+ 20000, -8, 5, 1, 1.0,
+ "Shows eyes following a bouncing grelb", 0, NULL},
+ {"flag", init_flag, draw_flag, release_flag,
+ refresh_flag, init_flag, NULL, &flag_opts,
+ 50000, 1, 1000, -7, 1.0,
+ "Shows a flying flag of your operating system", 0, NULL},
+ {"flame", init_flame, draw_flame, release_flame,
+ refresh_flame, init_flame, NULL, &flame_opts,
+ 750000, 20, 10000, 1, 1.0,
+ "Shows cosmic flame fractals", 0, NULL},
+ {"fract", init_fract, draw_fract, release_fract,
+ refresh_fract, init_fract, NULL, &fract_opts,
+ 200000, 1, 1, 1, 1.0,
+ "Shows fractals", 0, NULL},
+ {"geometry", init_geometry, draw_geometry, release_geometry,
+ refresh_geometry, init_geometry, NULL, &geometry_opts,
+ 10000, -10, 1, 1, 1.0,
+ "Shows morphing of a complete graph", 0, NULL},
+ {"grav", init_grav, draw_grav, release_grav,
+ refresh_grav, init_grav, NULL, &grav_opts,
+ 10000, -12, 1, 1, 1.0,
+ "Shows orbiting planets", 0, NULL},
+ {"helix", init_helix, draw_helix, release_helix,
+ refresh_helix, init_helix, NULL, &helix_opts,
+ 25000, 1, 100, 1, 1.0,
+ "Shows string art", 0, NULL},
+ {"hyper", init_hyper, draw_hyper, release_hyper,
+ refresh_hyper, init_hyper, NULL, &hyper_opts,
+ 10000, 1, 300, 1, 1.0,
+ "Shows a spinning tesseract in 4D space", 0, NULL},
+ {"ico", init_ico, draw_ico, release_ico,
+ refresh_ico, change_ico, NULL, &ico_opts,
+ 100000, 0, 400, 0, 1.0,
+ "Shows a bouncing polyhedra", 0, NULL},
+ {"image", init_image, draw_image, release_image,
+ refresh_image, init_image, NULL, &image_opts,
+ 2000000, -10, 1, 1, 1.0,
+ "Shows randomly appearing logos", 0, NULL},
+ {"kaleid", init_kaleid, draw_kaleid, release_kaleid,
+ refresh_kaleid, init_kaleid, NULL, &kaleid_opts,
+ 20000, 1, 700, 1, 1.0,
+ "Shows a kaleidoscope", 0, NULL},
+ {"laser", init_laser, draw_laser, release_laser,
+ refresh_laser, init_laser, NULL, &laser_opts,
+ 20000, -10, 200, 1, 1.0,
+ "Shows spinning lasers", 0, NULL},
+ {"life", init_life, draw_life, release_life,
+ refresh_life, change_life, NULL, &life_opts,
+ 750000, 40, 140, 0, 1.0,
+ "Shows Conway's game of Life", 0, NULL},
+ {"life1d", init_life1d, draw_life1d, release_life1d,
+ refresh_life1d, init_life1d, NULL, &life1d_opts,
+ 10000, 1, 10, 0, 1.0,
+ "Shows Wolfram's game of 1D Life", 0, NULL},
+ {"life3d", init_life3d, draw_life3d, release_life3d,
+ refresh_life3d, change_life3d, NULL, &life3d_opts,
+ 1000000, 35, 85, 1, 1.0,
+ "Shows Bays' game of 3D Life", 0, NULL},
+ {"lightning", init_lightning, draw_lightning, release_lightning,
+ refresh_lightning, init_lightning, NULL, &lightning_opts,
+ 10000, 1, 1, 1, 0.6,
+ "Shows Keith's fractal lightning bolts", 0, NULL},
+ {"lisa", init_lisa, draw_lisa, release_lisa, refresh_lisa,
+ change_lisa, NULL, &lisa_opts,
+ 25000, 1, 256, -1, 1.0,
+ "Shows animated lisajous loops", 0, NULL},
+ {"lissie", init_lissie, draw_lissie, release_lissie,
+ refresh_lissie, init_lissie, NULL, &lissie_opts,
+ 10000, -2, 2000, -200, 0.6,
+ "Shows lissajous worms", 0, NULL},
+ {"loop", init_loop, draw_loop, release_loop,
+ refresh_loop, init_loop, NULL, &loop_opts,
+ 100000, 1, 1600, -12, 1.0,
+ "Shows Langton's self-producing loops", 0, NULL},
+ {"marquee", init_marquee, draw_marquee, release_marquee,
+ refresh_marquee, init_marquee, NULL, &marquee_opts,
+ 100000, 1, 1, 1, 1.0,
+ "Shows messages", 0, NULL},
+ {"nose", init_nose, draw_nose, release_nose,
+ refresh_nose, init_nose, NULL, &nose_opts,
+ 100000, 1, 1, 1, 1.0,
+ "Shows a man with a big nose runs around spewing out messages", 0, NULL},
+ {"penrose", init_penrose, draw_penrose, release_penrose,
+ init_penrose, init_penrose, NULL, &penrose_opts,
+ 10000, 1, 1, -40, 1.0,
+ "Shows Penrose's quasiperiodic tilings", 0, NULL},
+ {"petal", init_petal, draw_petal, release_petal,
+ refresh_petal, init_petal, NULL, &petal_opts,
+ 10000, -500, 400, 1, 1.0,
+ "Shows various GCD Flowers", 0, NULL},
+ {"puzzle", init_puzzle, draw_puzzle, release_puzzle,
+ init_puzzle, init_puzzle, NULL, &puzzle_opts,
+ 10000, 250, 1, 1, 1.0,
+ "Shows a puzzle being scrambled and then solved", 0, NULL},
+ {"pyro", init_pyro, draw_pyro, release_pyro,
+ refresh_pyro, init_pyro, NULL, &pyro_opts,
+ 15000, 100, 1, -3, 1.0,
+ "Shows fireworks", 0, NULL},
+ {"qix", init_qix, draw_qix, release_qix,
+ refresh_qix, init_qix, NULL, &qix_opts,
+ 30000, 1, 64, 1, 1.0,
+ "Shows spinning lines a la Qix(tm)", 0, NULL},
+ {"roll", init_roll, draw_roll, release_roll,
+ refresh_roll, init_roll, NULL, &roll_opts,
+ 100000, 25, 1, -64, 1.0,
+ "Shows a rolling ball", 0, NULL},
+ {"rotor", init_rotor, draw_rotor, release_rotor,
+ refresh_rotor, init_rotor, NULL, &rotor_opts,
+ 10000, 4, 20, 1, 0.4,
+ "Shows Tom's Roto-Rooter", 0, NULL},
+ {"shape", init_shape, draw_shape, release_shape,
+ refresh_shape, init_shape, NULL, &shape_opts,
+ 10000, 100, 256, 1, 1.0,
+ "Shows stippled rectangles, ellipses, and triangles", 0, NULL},
+ {"sierpinski", init_sierpinski, draw_sierpinski, release_sierpinski,
+ refresh_sierpinski, init_sierpinski, NULL, &sierpinski_opts,
+ 400000, 2000, 100, 1, 1.0,
+ "Shows Sierpinski's triangle", 0, NULL},
+ {"spline", init_spline, draw_spline, release_spline,
+ refresh_spline, init_spline, NULL, &spline_opts,
+ 30000, -6, 2048, 1, 0.4,
+ "Shows colorful moving splines", 0, NULL},
+ {"star", init_star, draw_star, release_star,
+ refresh_star, init_star, NULL, &star_opts,
+ 40000, 100, 1, 100, 0.2,
+ "Shows a star field with a twist", 0, NULL},
+ {"swarm", init_swarm, draw_swarm, release_swarm,
+ refresh_swarm, init_swarm, NULL, &swarm_opts,
+ 10000, 100, 1, 1, 1.0,
+ "Shows a swarm of bees following a wasp", 0, NULL},
+ {"triangle", init_triangle, draw_triangle, release_triangle,
+ refresh_triangle, init_triangle, NULL, &triangle_opts,
+ 10000, 1, 1, 1, 1.0,
+ "Shows a triangle mountain range", 0, NULL},
+ {"tube", init_tube, draw_tube, release_tube,
+ NULL, init_tube, NULL, &tube_opts,
+ 25000, 1, 20000, -200, 1.0,
+ "Shows an animated tube", 0, NULL},
+ {"turtle", init_turtle, draw_turtle, release_turtle,
+ init_turtle, init_turtle, NULL, &turtle_opts,
+ 1000000, 1, 20, 1, 1.0,
+ "Shows turtle fractals", 0, NULL},
+ {"wire", init_wire, draw_wire, release_wire,
+ refresh_wire, init_wire, NULL, &wire_opts,
+ 500000, 1000, 150, -8, 1.0,
+ "Shows a random circuit with 2 electrons", 0, NULL},
+ {"world", init_world, draw_world, release_world,
+ refresh_world, init_world, NULL, &world_opts,
+ 100000, -16, 1, 1, 0.3,
+ "Shows spinning Earths", 0, NULL},
+ {"worm", init_worm, draw_worm, release_worm,
+ refresh_worm, init_worm, NULL, &worm_opts,
+ 17000, -20, 10, -3, 1.0,
+ "Shows wiggly worms", 0, NULL},
+/* NORMALLY HIGH CPU USAGE MODES (kind of subjective) */
+ {"ant", init_ant, draw_ant, release_ant,
+ refresh_ant, init_ant, NULL, &ant_opts,
+ 1000, -3, 40000, -7, 1.0,
+ "Shows Langton's and Turk's generalized ants", 0, NULL},
+ {"ball", init_ball, draw_ball, release_ball,
+ refresh_ball, init_ball, NULL, &ball_opts,
+ 10000, 10, 20, -100, 1.0,
+ "Shows bouncing balls", 0, NULL},
+ {"bat", init_bat, draw_bat, release_bat,
+ refresh_bat, init_bat, NULL, &bat_opts,
+ 100000, -8, 1, 0, 1.0,
+ "Shows bouncing flying bats", 0, NULL},
+ {"bounce", init_bounce, draw_bounce, release_bounce,
+ refresh_bounce, init_bounce, NULL, &bounce_opts,
+ 10000, -10, 1, 0, 1.0,
+ "Shows bouncing footballs", 0, NULL},
+ {"braid", init_braid, draw_braid, release_braid,
+ refresh_braid, init_braid, NULL, &braid_opts,
+ 1000, 15, 100, 1, 1.0,
+ "Shows random braids and knots", 0, NULL},
+ {"drift", init_drift, draw_drift, release_drift,
+ refresh_drift, init_drift, NULL, &drift_opts,
+ 10000, 30, 1, 1, 1.0,
+ "Shows cosmic drifting flame fractals", 0, NULL},
+ {"forest", init_forest, draw_forest, release_forest,
+ refresh_forest, init_forest, NULL, &forest_opts,
+ 400000, 100, 200, 1, 1.0,
+ "Shows binary trees of a fractal forest", 0, NULL},
+ {"galaxy", init_galaxy, draw_galaxy, release_galaxy,
+ refresh_galaxy, init_galaxy, NULL, &galaxy_opts,
+ 100, -5, 250, -3, 1.0,
+ "Shows crashing spiral galaxies", 0, NULL},
+ {"hop", init_hop, draw_hop, release_hop,
+ refresh_hop, init_hop, NULL, &hop_opts,
+ 10000, 1000, 2500, 1, 1.0,
+ "Shows real plane iterated fractals", 0, NULL},
+ {"ifs", init_ifs, draw_ifs, release_ifs,
+ draw_ifs, init_ifs, NULL, &ifs_opts,
+ 1000, 1, 1, 1, 1.0,
+ "Shows a modified iterated function system", 0, NULL},
+ {"julia", init_julia, draw_julia, release_julia,
+ refresh_julia, init_julia, NULL, &julia_opts,
+ 10000, 1000, 20, 1, 1.0,
+ "Shows the Julia set", 0, NULL},
+ {"maze", init_maze, draw_maze, release_maze,
+ refresh_maze, init_maze, NULL, &maze_opts,
+ 1000, 1, 300, -40, 1.0,
+ "Shows a random maze and a depth first search solution", 0, NULL},
+ {"mountain", init_mountain, draw_mountain, release_mountain,
+ refresh_mountain, init_mountain, NULL, &mountain_opts,
+ 1000, 30, 100, 1, 1.0,
+ "Shows Papo's mountain range", 0, NULL},
+ {"pacman", init_pacman, draw_pacman, release_pacman,
+ refresh_pacman, init_pacman, NULL, &pacman_opts,
+ 100000, 10, 1, 0, 1.0,
+ "Shows Pacman(tm)", 0, NULL},
+ {"slip", init_slip, draw_slip, release_slip,
+ init_slip, init_slip, NULL, &slip_opts,
+ 50000, 35, 50, 1, 1.0,
+ "Shows slipping blits", 0, NULL},
+ {"sphere", init_sphere, draw_sphere, release_sphere,
+ refresh_sphere, init_sphere, NULL, &sphere_opts,
+ 10000, 1, 20, 0, 1.0,
+ "Shows a bunch of shaded spheres", 0, NULL},
+ {"spiral", init_spiral, draw_spiral, release_spiral,
+ refresh_spiral, init_spiral, NULL, &spiral_opts,
+ 5000, -40, 350, 1, 1.0,
+ "Shows helixes of dots", 0, NULL},
+ {"strange", init_strange, draw_strange, release_strange,
+ draw_strange, init_strange, NULL, &strange_opts,
+ 1000, 1, 1, 1, 1.0,
+ "Shows strange attractors", 0, NULL},
+ {"swirl", init_swirl, draw_swirl, release_swirl,
+ refresh_swirl, init_swirl, NULL, &swirl_opts,
+ 5000, 5, 1, 1, 1.0,
+ "Shows animated swirling patterns", 0, NULL},
+ {"voters", init_voters, draw_voters, release_voters,
+ refresh_voters, init_voters, NULL, &voters_opts,
+ 1000, 0, 327670, 0, 1.0,
+ "Shows Dewdney's Voters", 0, NULL},
+ {"wator", init_wator, draw_wator, release_wator,
+ refresh_wator, init_wator, NULL, &wator_opts,
+ 750000, 1, 32767, 0, 1.0,
+ "Shows Dewdney's Water-Torus planet of fish and sharks", 0, NULL},
+#if defined( USE_XPM ) || defined( USE_XPMINC )
+ {"cartoon", init_cartoon, draw_cartoon, release_cartoon,
+ NULL, init_cartoon, NULL, &cartoon_opts,
+ 10000, 1, 1, 1, 1.0,
+ "Shows bouncing cartoons", 0, NULL},
+#endif
+#ifdef USE_GL
+ {"escher", init_escher, draw_escher, release_escher,
+ draw_escher, change_escher, NULL, &escher_opts,
+ 1000, 0, 1, 1, 1.0,
+ "Shows some Escher like scenes", 0, NULL},
+ {"gears", init_gears, draw_gears, release_gears,
+ draw_gears, init_gears, NULL, &gears_opts,
+ 1000, 1, 2, 1, 1.0,
+ "Shows GL's gears", 0, NULL},
+ {"morph3d", init_morph3d, draw_morph3d, release_morph3d,
+ draw_morph3d, change_morph3d, NULL, &morph3d_opts,
+ 1000, 0, 1, 1, 1.0,
+ "Shows GL morphing polyhedra", 0, NULL},
+ {"pipes", init_pipes, draw_pipes, release_pipes,
+#if defined( MESA ) && defined( SLOW )
+ draw_pipes,
+#else
+ change_pipes,
+#endif
+ change_pipes, NULL, &pipes_opts,
+ 1000, 2, 5, 500, 1.0,
+ "Shows a selfbuilding pipe system", 0, NULL},
+ {"sproingies", init_sproingies, draw_sproingies, release_sproingies,
+ refresh_sproingies, init_sproingies, NULL, &sproingies_opts,
+ 1000, 5, 0, 400, 1.0,
+ "Shows Sproingies! Nontoxic. Safe for pets and small children", 0, NULL},
+ {"superquadrics", init_superquadrics, draw_superquadrics, release_superquadrics,
+ refresh_superquadrics, init_superquadrics, NULL, &superquadrics_opts,
+ 1000, 25, 40, 1, 1.0,
+ "Shows 3D mathematical shapes", 0, NULL},
+#endif
+/* NEW POSSIBLY, BUGGY MODES */
+#ifdef USE_HACKERS
+ {"fadeplot", init_fadeplot, draw_fadeplot, release_fadeplot,
+ refresh_fadeplot, init_fadeplot, NULL, &fadeplot_opts,
+ 30000, 1500, 1, 1, 1.0,
+ "Shows fadeplot", 0, NULL},
+#endif
+/* SPECIAL MODES */
+ {"blank", init_blank, draw_blank, release_blank,
+ refresh_blank, init_blank, NULL, &blank_opts,
+ 3000000, 1, 1, 1, 1.0,
+ "Shows nothing but a black screen", 0, NULL},
+#ifdef USE_BOMB
+ {"bomb", init_bomb, draw_bomb, release_bomb,
+ refresh_bomb, change_bomb, NULL, &bomb_opts,
+ 100000, 10, 20, 1, 1.0,
+ "Shows a bomb and will autologout after a time", 0, NULL},
+ {"random", init_random, draw_random, release_random,
+ refresh_random, change_random, NULL, &random_opts,
+ 1, 1, 1, 1, 1.0,
+ "Shows a random mode from above except blank and bomb", 0, NULL},
+#else
+ {"random", init_random, draw_random, release_random,
+ refresh_random, change_random, NULL, &random_opts,
+ 1, 1, 1, 1, 1.0,
+ "Shows a random mode from above except blank", 0, NULL},
+#endif
+};
+
+int numprocs = sizeof (LockProcs) / sizeof (LockProcs[0]);
+
+/* -------------------------------------------------------------------- */
+
+static LockStruct *last_initted_mode = NULL;
+static LockStruct *default_mode = NULL;
+
+/* -------------------------------------------------------------------- */
+
+void
+set_default_mode(LockStruct * ls)
+{
+ default_mode = ls;
+}
+
+/* -------------------------------------------------------------------- */
+
+static void
+set_window_title(ModeInfo * mi)
+{
+ XTextProperty prop;
+ char buf[512];
+ char *ptr = buf;
+ unsigned int status;
+
+ (void) sprintf(buf, "%s: %s", MI_NAME(mi), MI_DESC(mi));
+ status = XStringListToTextProperty(&ptr, 1, &prop);
+ if (status != 0) {
+ XSetWMName(MI_DISPLAY(mi), MI_WINDOW(mi), &prop);
+ XFree((void *) prop.value);
+ }
+}
+
+/* -------------------------------------------------------------------- */
+
+/*-
+ * This hook is called prior to calling the init hook of a
+ * different mode. It is to inform the mode that it is losing
+ * control, and should therefore release any dynamically created
+ * resources.
+ */
+
+void
+call_release_hook(LockStruct * ls, ModeInfo * mi)
+{
+ if (ls == NULL) {
+ return;
+ }
+ MI_LOCKSTRUCT(mi) = ls;
+ if (ls->release_hook != NULL) {
+ ls->release_hook(mi);
+ }
+ ls->flags &= ~(LS_FLAG_INITED);
+
+ last_initted_mode = NULL;
+}
+
+void
+release_last_mode(ModeInfo * mi)
+{
+ if (last_initted_mode == NULL) {
+ return;
+ }
+ call_release_hook(last_initted_mode, mi);
+
+ last_initted_mode = NULL;
+}
+
+/* -------------------------------------------------------------------- */
+
+/*-
+ * Call the init hook for a mode. If this mode is not the same
+ * as the last one, call the release proc for the previous mode
+ * so that it will surrender its dynamic resources.
+ * A mode's init hook may be called multiple times, without
+ * intervening release calls.
+ */
+
+void
+call_init_hook(LockStruct * ls, ModeInfo * mi)
+{
+ if (ls == NULL) {
+ if (default_mode == NULL) {
+ return;
+ } else {
+ ls = default_mode;
+ }
+ }
+ if (ls != last_initted_mode) {
+ call_release_hook(last_initted_mode, mi);
+ }
+ MI_LOCKSTRUCT(mi) = ls;
+ set_window_title(mi);
+
+ ls->init_hook(mi);
+
+ ls->flags |= LS_FLAG_INITED;
+ MI_WIN_SET_FLAG_STATE(mi, WI_FLAG_JUST_INITTED, True);
+
+ last_initted_mode = ls;
+}
+
+/* -------------------------------------------------------------------- */
+
+/*-
+ * Call the callback hook for a mode. This hook is called repeatedly,
+ * at (approximately) constant time intervals. The time between calls
+ * is controlled by the -delay command line option, which is mapped
+ * to the variable named delay.
+ */
+
+void
+call_callback_hook(LockStruct * ls, ModeInfo * mi)
+{
+ if (ls == NULL) {
+ if (default_mode == NULL) {
+ return;
+ } else {
+ ls = default_mode;
+ }
+ }
+ MI_LOCKSTRUCT(mi) = ls;
+
+ ls->callback_hook(mi);
+
+ MI_WIN_SET_FLAG_STATE(mi, WI_FLAG_JUST_INITTED, False);
+}
+
+/* -------------------------------------------------------------------- */
+
+/*-
+ * Window damage has occurred. If the mode has been initted and
+ * supplied a refresh proc, call that. Otherwise call its init
+ * hook again.
+ */
+
+#define JUST_INITTED(mi) (MI_WIN_FLAG_IS_SET(mi, WI_FLAG_JUST_INITTED))
+
+void
+call_refresh_hook(LockStruct * ls, ModeInfo * mi)
+{
+ if (ls == NULL) {
+ if (default_mode == NULL) {
+ return;
+ } else {
+ ls = default_mode;
+ }
+ }
+ MI_LOCKSTRUCT(mi) = ls;
+
+ if (ls->refresh_hook == NULL) {
+ /*
+ * No refresh hook supplied. If the mode has been
+ * initialized, and the callback has been called at least
+ * once, then call the init hook to do the refresh.
+ * Note that two flags are examined here. The first
+ * indicates if the mode has ever had its init hook called,
+ * the second is a per-screen flag which indicates
+ * if the draw (callback) hook has been called since the
+ * init hook was called for that screen.
+ * This second test is a hack. A mode should gracefully
+ * deal with its init hook being called twice in a row.
+ * Once all the modes have been updated, this hack should
+ * be removed.
+ */
+ if (MODE_NOT_INITED(ls) || JUST_INITTED(mi)) {
+ return;
+ }
+ call_init_hook(ls, mi);
+ } else {
+ ls->refresh_hook(mi);
+ }
+}
+
+/* -------------------------------------------------------------------- */
+
+/*-
+ * The user has requested a change, by pressing the middle mouse
+ * button. Let the mode know about it.
+ */
+
+void
+call_change_hook(LockStruct * ls, ModeInfo * mi)
+{
+ if (ls == NULL) {
+ if (default_mode == NULL) {
+ return;
+ } else {
+ ls = default_mode;
+ }
+ }
+ MI_LOCKSTRUCT(mi) = ls;
+
+ if (ls->change_hook != NULL) {
+ ls->change_hook(mi);
+ }
+}
+
+/* -------------------------------------------------------------------- */
--- /dev/null
+
+#ifndef __XLOCK_MODE_H__
+#define __XLOCK_MODE_H__
+
+/*-
+ * @(#)mode.h 4.00 97/01/01 xlockmore
+ *
+ * mode.h - mode management for xlock, the X Window System lockscreen.
+ *
+ * Copyright (c) 1991 by Patrick J. Naughton.
+ *
+ * See xlock.c for copying information.
+ *
+ * Revision History:
+ *
+ * Changes maintained by David Bagley <bagleyd@bigfoot.com>
+ * 18-Mar-96: Ron Hitchens <ron@idiom.com>
+ * Extensive revision to define new data types for
+ * the new mode calling scheme.
+ * 02-Jun-95: Extracted out of resource.c.
+ *
+ */
+
+/*-
+ * Declare external interface routines for supported screen savers.
+ */
+
+/* -------------------------------------------------------------------- */
+
+struct LockStruct_s;
+struct ModeInfo_s;
+
+typedef void (ModeHook) (struct ModeInfo_s *);
+typedef void (HookProc) (struct LockStruct_s *, struct ModeInfo_s *);
+
+typedef struct LockStruct_s {
+ char *cmdline_arg; /* mode name */
+ ModeHook *init_hook; /* func to init a mode */
+ ModeHook *callback_hook; /* func to run (tick) a mode */
+ ModeHook *release_hook; /* func to shutdown a mode */
+ ModeHook *refresh_hook; /* tells mode to repaint */
+ ModeHook *change_hook; /* user wants mode to change */
+ ModeHook *unused_hook; /* for future expansion */
+ ModeSpecOpt *msopt; /* this mode's def resources */
+ int def_delay; /* default delay for mode */
+ int def_batchcount;
+ int def_cycles;
+ int def_size;
+ float def_saturation;
+ char *desc; /* text description of mode */
+ unsigned int flags; /* state flags for this mode */
+ void *userdata; /* for use by the mode */
+} LockStruct;
+
+#define LS_FLAG_INITED 1
+
+typedef struct {
+ Display *display; /* handle to X display */
+ Screen *screenptr; /* ptr to screen info */
+ int screen; /* number of current screen */
+ int real_screen; /* for debugging */
+ int num_screens; /* number screens locked */
+ int max_screens; /* max # active screens */
+ Window window; /* handle to current window */
+ int win_width; /* width of current window */
+ int win_height; /* height of current window */
+ int win_depth; /* depth of current window */
+ Visual *visual; /* visual of current window */
+ Colormap colormap; /* default colormap of current window */
+ unsigned long black_pixel; /* pixel value for black */
+ unsigned long white_pixel; /* pixel value for white */
+ unsigned int flags; /* xlock window flags */
+ float delta3d;
+} WindowInfo;
+
+#define WI_FLAG_INFO_INITTED 0x001 /* private state flag */
+#define WI_FLAG_ICONIC 0x002
+#define WI_FLAG_MONO 0x004
+#define WI_FLAG_INWINDOW 0x008
+#define WI_FLAG_INROOT 0x010
+#define WI_FLAG_NOLOCK 0x020
+#define WI_FLAG_INSTALL 0x040
+#define WI_FLAG_DEBUG 0x080
+#define WI_FLAG_USE3D 0x100
+#define WI_FLAG_VERBOSE 0x200
+#define WI_FLAG_FULLRANDOM 0x400
+#define WI_FLAG_WIREFRAME 0x800
+#define WI_FLAG_JUST_INITTED 0x1000 /* private state flag */
+
+typedef struct {
+ long pause; /* output, set by mode */
+ long delay; /* inputs, current settings */
+ long batchcount;
+ long cycles;
+ long size;
+ float saturation;
+} RunInfo;
+
+typedef struct ModeInfo_s {
+ WindowInfo windowinfo;
+ perscreen *screeninfo;
+ RunInfo runinfo;
+ struct LockStruct_s *lockstruct;
+} ModeInfo;
+
+/* -------------------------------------------------------------------- */
+
+/*-
+ * These are the public interfaces that a mode should use to obtain
+ * information about the display and other environmental parameters.
+ * Everything hangs off a ModeInfo pointer. A mode should NOT cache
+ * a ModeInfo pointer, the struct it points to is volatile. The mode
+ * can safely make a copy of the data it points to, however. But it
+ * is recommended the mode make use of the passed-in pointer and pass
+ * it along to functions it calls.
+ * Use these macros, don't look at the fields directly. The insides
+ * of the ModeInfo struct are certain to change in the future.
+ */
+
+#define MODE_IS_INITED(ls) ((ls)->flags & LS_FLAG_INITED)
+#define MODE_NOT_INITED(ls) ( ! MODE_IS_INITED(ls))
+
+#define MI_DISPLAY(mi) ((mi)->windowinfo.display)
+#define MI_SCREEN(mi) ((mi)->windowinfo.screen)
+#define MI_SCREENPTR(mi) ((mi)->windowinfo.screenptr)
+#define MI_REAL_SCREEN(mi) ((mi)->windowinfo.real_screen)
+#define MI_NUM_SCREENS(mi) ((mi)->windowinfo.num_screens)
+#define MI_MAX_SCREENS(mi) ((mi)->windowinfo.max_screens)
+#define MI_WINDOW(mi) ((mi)->windowinfo.window)
+#define MI_WIN_WIDTH(mi) ((mi)->windowinfo.win_width)
+#define MI_WIN_HEIGHT(mi) ((mi)->windowinfo.win_height)
+#define MI_WIN_DEPTH(mi) ((mi)->windowinfo.win_depth)
+#define MI_VISUAL(mi) ((mi)->windowinfo.visual)
+#define MI_WIN_COLORMAP(mi) ((mi)->windowinfo.colormap)
+#define MI_WIN_BLACK_PIXEL(mi) ((mi)->windowinfo.black_pixel)
+#define MI_WIN_WHITE_PIXEL(mi) ((mi)->windowinfo.white_pixel)
+#define MI_DELTA3D(mi) ((mi)->windowinfo.delta3d)
+#define MI_WIN_FLAGS(mi) ((mi)->windowinfo.flags)
+#define MI_WIN_SET_FLAG_STATE(mi,f,bool) ((mi)->windowinfo.flags = \
+ (bool) ? (mi)->windowinfo.flags | f \
+ : (mi)->windowinfo.flags & ~(f))
+#define MI_WIN_FLAG_IS_SET(mi,f) ((mi)->windowinfo.flags & f)
+#define MI_WIN_FLAG_NOT_SET(mi,f) ( ! MI_WIN_FLAG_IS_SET(mi,f))
+#define MI_WIN_IS_ICONIC(mi) (MI_WIN_FLAG_IS_SET (mi, WI_FLAG_ICONIC))
+#define MI_WIN_IS_MONO(mi) (MI_WIN_FLAG_IS_SET (mi, WI_FLAG_MONO))
+#define MI_WIN_IS_INWINDOW(mi) (MI_WIN_FLAG_IS_SET (mi, WI_FLAG_INWINDOW))
+#define MI_WIN_IS_INROOT(mi) (MI_WIN_FLAG_IS_SET (mi, WI_FLAG_INROOT))
+#define MI_WIN_IS_NOLOCK(mi) (MI_WIN_FLAG_IS_SET (mi, WI_FLAG_NOLOCK))
+#define MI_WIN_IS_INSTALL(mi) (MI_WIN_FLAG_IS_SET (mi, WI_FLAG_INSTALL))
+#define MI_WIN_IS_DEBUG(mi) (MI_WIN_FLAG_IS_SET (mi, WI_FLAG_DEBUG))
+#define MI_WIN_IS_USE3D(mi) (MI_WIN_FLAG_IS_SET (mi, WI_FLAG_USE3D))
+#define MI_WIN_IS_VERBOSE(mi) (MI_WIN_FLAG_IS_SET (mi, WI_FLAG_VERBOSE))
+#define MI_WIN_IS_FULLRANDOM(mi) (MI_WIN_FLAG_IS_SET (mi, WI_FLAG_FULLRANDOM))
+#define MI_WIN_IS_WIREFRAME(mi) (MI_WIN_FLAG_IS_SET (mi, WI_FLAG_WIREFRAME))
+
+#define MI_PERSCREEN(mi) ((mi)->screeninfo)
+#define MI_GC(mi) ((mi)->screeninfo->gc)
+#define MI_NPIXELS(mi) ((mi)->screeninfo->npixels)
+#define MI_CMAP(mi) ((mi)->screeninfo->cmap)
+#define MI_PIXELS(mi) ((mi)->screeninfo->pixels)
+#define MI_PIXEL(mi,n) ((mi)->screeninfo->pixels[n])
+
+/* are these of interest to modes? */
+#define MI_BG_COLOR(mi) ((mi)->screeninfo->bgcol)
+#define MI_FG_COLOR(mi) ((mi)->screeninfo->fgcol)
+#define MI_NONE_COLOR(mi) ((mi)->screeninfo->nonecol) /* -install */
+#define MI_RIGHT_COLOR(mi) ((mi)->screeninfo->rightcol)
+#define MI_LEFT_COLOR(mi) ((mi)->screeninfo->leftcol)
+
+#define MI_PAUSE(mi) ((mi)->runinfo.pause)
+#define MI_DELAY(mi) ((mi)->runinfo.delay)
+#define MI_BATCHCOUNT(mi) ((mi)->runinfo.batchcount)
+#define MI_CYCLES(mi) ((mi)->runinfo.cycles)
+#define MI_SIZE(mi) ((mi)->runinfo.size)
+#define MI_SATURATION(mi) ((mi)->runinfo.saturation)
+
+#define MI_LOCKSTRUCT(mi) ((mi)->lockstruct)
+#define MI_DEFDELAY(mi) ((mi)->lockstruct->def_delay)
+#define MI_DEFBATCHCOUNT(mi) ((mi)->lockstruct->def_batchcount)
+#define MI_DEFCYCLES(mi) ((mi)->lockstruct->def_cycles)
+#define MI_DEFSIZE(mi) ((mi)->lockstruct->def_size)
+#define MI_DEFSATURATION(mi) ((mi)->lockstruct->def_saturation)
+
+#define MI_NAME(mi) ((mi)->lockstruct->cmdline_arg)
+#define MI_DESC(mi) ((mi)->lockstruct->desc)
+#define MI_USERDATA(mi) ((mi)->lockstruct->userdata)
+
+/* -------------------------------------------------------------------- */
+
+extern HookProc call_init_hook;
+extern HookProc call_callback_hook;
+extern HookProc call_release_hook;
+extern HookProc call_refresh_hook;
+extern HookProc call_change_hook;
+
+extern void set_default_mode(LockStruct *);
+extern void release_last_mode(ModeInfo *);
+
+/* -------------------------------------------------------------------- */
+
+extern ModeHook init_ant;
+extern ModeHook draw_ant;
+extern ModeHook release_ant;
+extern ModeHook refresh_ant;
+extern ModeSpecOpt ant_opts;
+
+extern ModeHook init_ball;
+extern ModeHook draw_ball;
+extern ModeHook release_ball;
+extern ModeHook refresh_ball;
+extern ModeSpecOpt ball_opts;
+
+extern ModeHook init_bat;
+extern ModeHook draw_bat;
+extern ModeHook release_bat;
+extern ModeHook refresh_bat;
+extern ModeSpecOpt bat_opts;
+
+extern ModeHook init_blot;
+extern ModeHook draw_blot;
+extern ModeHook release_blot;
+extern ModeHook refresh_blot;
+extern ModeSpecOpt blot_opts;
+
+extern ModeHook init_bouboule;
+extern ModeHook draw_bouboule;
+extern ModeHook release_bouboule;
+extern ModeHook refresh_bouboule;
+extern ModeSpecOpt bouboule_opts;
+
+extern ModeHook init_bounce;
+extern ModeHook draw_bounce;
+extern ModeHook release_bounce;
+extern ModeHook refresh_bounce;
+extern ModeSpecOpt bounce_opts;
+
+extern ModeHook init_braid;
+extern ModeHook draw_braid;
+extern ModeHook release_braid;
+extern ModeHook refresh_braid;
+extern ModeSpecOpt braid_opts;
+
+extern ModeHook init_bug;
+extern ModeHook draw_bug;
+extern ModeHook release_bug;
+extern ModeHook refresh_bug;
+extern ModeSpecOpt bug_opts;
+
+extern ModeHook init_crystal;
+extern ModeHook draw_crystal;
+extern ModeHook release_crystal;
+extern ModeHook refresh_crystal;
+extern ModeSpecOpt crystal_opts;
+
+extern ModeHook init_clock;
+extern ModeHook draw_clock;
+extern ModeHook release_clock;
+extern ModeHook refresh_clock;
+extern ModeSpecOpt clock_opts;
+
+extern ModeHook init_daisy;
+extern ModeHook draw_daisy;
+extern ModeHook release_daisy;
+extern ModeHook refresh_daisy;
+extern ModeSpecOpt daisy_opts;
+
+extern ModeHook init_dclock;
+extern ModeHook draw_dclock;
+extern ModeHook release_dclock;
+extern ModeHook refresh_dclock;
+extern ModeSpecOpt dclock_opts;
+
+extern ModeHook init_demon;
+extern ModeHook draw_demon;
+extern ModeHook release_demon;
+extern ModeHook refresh_demon;
+extern ModeSpecOpt demon_opts;
+
+extern ModeHook init_drift;
+extern ModeHook draw_drift;
+extern ModeHook release_drift;
+extern ModeHook refresh_drift;
+extern ModeSpecOpt drift_opts;
+
+extern ModeHook init_eyes;
+extern ModeHook draw_eyes;
+extern ModeHook release_eyes;
+extern ModeHook refresh_eyes;
+extern ModeSpecOpt eyes_opts;
+
+extern ModeHook init_flag;
+extern ModeHook draw_flag;
+extern ModeHook release_flag;
+extern ModeHook refresh_flag;
+extern ModeSpecOpt flag_opts;
+
+extern ModeHook init_flame;
+extern ModeHook draw_flame;
+extern ModeHook release_flame;
+extern ModeHook refresh_flame;
+extern ModeSpecOpt flame_opts;
+
+extern ModeHook init_forest;
+extern ModeHook draw_forest;
+extern ModeHook release_forest;
+extern ModeHook refresh_forest;
+extern ModeHook refresh_forest;
+extern ModeSpecOpt forest_opts;
+
+extern ModeHook init_fract;
+extern ModeHook draw_fract;
+extern ModeHook release_fract;
+extern ModeHook refresh_fract;
+extern ModeSpecOpt fract_opts;
+
+extern ModeHook init_galaxy;
+extern ModeHook draw_galaxy;
+extern ModeHook release_galaxy;
+extern ModeHook refresh_galaxy;
+extern ModeSpecOpt galaxy_opts;
+
+extern ModeHook init_geometry;
+extern ModeHook draw_geometry;
+extern ModeHook release_geometry;
+extern ModeHook refresh_geometry;
+extern ModeSpecOpt geometry_opts;
+
+extern ModeHook init_grav;
+extern ModeHook draw_grav;
+extern ModeHook release_grav;
+extern ModeHook refresh_grav;
+extern ModeSpecOpt grav_opts;
+
+extern ModeHook init_helix;
+extern ModeHook draw_helix;
+extern ModeHook release_helix;
+extern ModeHook refresh_helix;
+extern ModeSpecOpt helix_opts;
+
+extern ModeHook init_hop;
+extern ModeHook draw_hop;
+extern ModeHook release_hop;
+extern ModeHook refresh_hop;
+extern ModeSpecOpt hop_opts;
+
+extern ModeHook init_hyper;
+extern ModeHook draw_hyper;
+extern ModeHook release_hyper;
+extern ModeHook refresh_hyper;
+extern ModeSpecOpt hyper_opts;
+
+extern ModeHook init_ico;
+extern ModeHook draw_ico;
+extern ModeHook release_ico;
+extern ModeHook refresh_ico;
+extern ModeHook change_ico;
+extern ModeSpecOpt ico_opts;
+
+extern ModeHook init_ifs;
+extern ModeHook draw_ifs;
+extern ModeHook release_ifs;
+extern ModeSpecOpt ifs_opts;
+
+extern ModeHook init_image;
+extern ModeHook draw_image;
+extern ModeHook release_image;
+extern ModeHook refresh_image;
+extern ModeSpecOpt image_opts;
+
+extern ModeHook init_julia;
+extern ModeHook draw_julia;
+extern ModeHook release_julia;
+extern ModeHook refresh_julia;
+extern ModeSpecOpt julia_opts;
+
+extern ModeHook init_kaleid;
+extern ModeHook draw_kaleid;
+extern ModeHook release_kaleid;
+extern ModeHook refresh_kaleid;
+extern ModeSpecOpt kaleid_opts;
+
+extern ModeHook init_laser;
+extern ModeHook draw_laser;
+extern ModeHook release_laser;
+extern ModeHook refresh_laser;
+extern ModeSpecOpt laser_opts;
+
+extern ModeHook init_life;
+extern ModeHook draw_life;
+extern ModeHook release_life;
+extern ModeHook refresh_life;
+extern ModeHook change_life;
+extern ModeSpecOpt life_opts;
+
+extern ModeHook init_life1d;
+extern ModeHook draw_life1d;
+extern ModeHook release_life1d;
+extern ModeHook refresh_life1d;
+extern ModeSpecOpt life1d_opts;
+
+extern ModeHook init_life3d;
+extern ModeHook draw_life3d;
+extern ModeHook release_life3d;
+extern ModeHook refresh_life3d;
+extern ModeHook change_life3d;
+extern ModeSpecOpt life3d_opts;
+
+extern ModeHook init_lightning;
+extern ModeHook draw_lightning;
+extern ModeHook release_lightning;
+extern ModeHook refresh_lightning;
+extern ModeSpecOpt lightning_opts;
+
+extern ModeHook init_lisa;
+extern ModeHook draw_lisa;
+extern ModeHook release_lisa;
+extern ModeHook refresh_lisa;
+extern ModeHook change_lisa;
+extern ModeSpecOpt lisa_opts;
+
+extern ModeHook init_lissie;
+extern ModeHook draw_lissie;
+extern ModeHook release_lissie;
+extern ModeHook refresh_lissie;
+extern ModeSpecOpt lissie_opts;
+
+extern ModeHook init_loop;
+extern ModeHook draw_loop;
+extern ModeHook release_loop;
+extern ModeHook refresh_loop;
+extern ModeSpecOpt loop_opts;
+
+extern ModeHook init_marquee;
+extern ModeHook draw_marquee;
+extern ModeHook release_marquee;
+extern ModeHook refresh_marquee;
+extern ModeSpecOpt marquee_opts;
+
+extern ModeHook init_maze;
+extern ModeHook draw_maze;
+extern ModeHook release_maze;
+extern ModeHook refresh_maze;
+extern ModeSpecOpt maze_opts;
+
+extern ModeHook init_mountain;
+extern ModeHook draw_mountain;
+extern ModeHook release_mountain;
+extern ModeHook refresh_mountain;
+extern ModeSpecOpt mountain_opts;
+
+extern ModeHook init_nose;
+extern ModeHook draw_nose;
+extern ModeHook release_nose;
+extern ModeHook refresh_nose;
+extern ModeSpecOpt nose_opts;
+
+extern ModeHook init_pacman;
+extern ModeHook draw_pacman;
+extern ModeHook release_pacman;
+extern ModeHook refresh_pacman;
+extern ModeSpecOpt pacman_opts;
+
+extern ModeHook init_penrose;
+extern ModeHook draw_penrose;
+extern ModeHook release_penrose;
+
+#if 0
+extern ModeHook refresh_penrose; /* Needed */
+
+#endif
+extern ModeSpecOpt penrose_opts;
+
+extern ModeHook init_petal;
+extern ModeHook draw_petal;
+extern ModeHook release_petal;
+extern ModeHook refresh_petal;
+extern ModeSpecOpt petal_opts;
+
+extern ModeHook init_puzzle;
+extern ModeHook draw_puzzle;
+extern ModeHook release_puzzle;
+
+#if 0
+extern ModeHook refresh_puzzle; /* Needed */
+
+#endif
+extern ModeSpecOpt puzzle_opts;
+
+extern ModeHook init_pyro;
+extern ModeHook draw_pyro;
+extern ModeHook release_pyro;
+extern ModeHook refresh_pyro;
+extern ModeSpecOpt pyro_opts;
+
+extern ModeHook init_qix;
+extern ModeHook draw_qix;
+extern ModeHook release_qix;
+extern ModeHook refresh_qix;
+extern ModeSpecOpt qix_opts;
+
+extern ModeHook init_roll;
+extern ModeHook draw_roll;
+extern ModeHook release_roll;
+extern ModeHook refresh_roll;
+extern ModeSpecOpt roll_opts;
+
+extern ModeHook init_rotor;
+extern ModeHook draw_rotor;
+extern ModeHook release_rotor;
+extern ModeHook refresh_rotor;
+extern ModeSpecOpt rotor_opts;
+
+extern ModeHook init_shape;
+extern ModeHook draw_shape;
+extern ModeHook release_shape;
+extern ModeHook refresh_shape;
+extern ModeSpecOpt shape_opts;
+
+extern ModeHook init_sierpinski;
+extern ModeHook draw_sierpinski;
+extern ModeHook release_sierpinski;
+extern ModeHook refresh_sierpinski;
+extern ModeSpecOpt sierpinski_opts;
+
+extern ModeHook init_slip;
+extern ModeHook draw_slip;
+extern ModeHook release_slip;
+
+#if 0
+extern ModeHook refresh_slip; /* Probably not practical */
+
+#endif
+extern ModeSpecOpt slip_opts;
+
+extern ModeHook init_sphere;
+extern ModeHook draw_sphere;
+extern ModeHook release_sphere;
+extern ModeHook refresh_sphere;
+extern ModeSpecOpt sphere_opts;
+
+extern ModeHook init_spiral;
+extern ModeHook draw_spiral;
+extern ModeHook release_spiral;
+extern ModeHook refresh_spiral;
+extern ModeSpecOpt spiral_opts;
+
+extern ModeHook init_spline;
+extern ModeHook draw_spline;
+extern ModeHook release_spline;
+extern ModeHook refresh_spline;
+extern ModeSpecOpt spline_opts;
+
+extern ModeHook init_star;
+extern ModeHook draw_star;
+extern ModeHook release_star;
+extern ModeHook refresh_star;
+extern ModeSpecOpt star_opts;
+
+extern ModeHook init_strange;
+extern ModeHook draw_strange;
+extern ModeHook release_strange;
+extern ModeSpecOpt strange_opts;
+
+extern ModeHook init_swarm;
+extern ModeHook draw_swarm;
+extern ModeHook release_swarm;
+extern ModeHook refresh_swarm;
+extern ModeSpecOpt swarm_opts;
+
+extern ModeHook init_swirl;
+extern ModeHook draw_swirl;
+extern ModeHook release_swirl;
+extern ModeHook refresh_swirl;
+extern ModeSpecOpt swirl_opts;
+
+extern ModeHook init_triangle;
+extern ModeHook draw_triangle;
+extern ModeHook release_triangle;
+extern ModeHook refresh_triangle;
+extern ModeSpecOpt triangle_opts;
+
+extern ModeHook init_tube;
+extern ModeHook draw_tube;
+extern ModeHook release_tube;
+extern ModeHook refresh_tube;
+extern ModeSpecOpt tube_opts;
+
+extern ModeHook init_turtle;
+extern ModeHook draw_turtle;
+extern ModeHook release_turtle;
+extern ModeHook refresh_turtle;
+extern ModeSpecOpt turtle_opts;
+
+extern ModeHook init_voters;
+extern ModeHook draw_voters;
+extern ModeHook release_voters;
+extern ModeHook refresh_voters;
+extern ModeSpecOpt voters_opts;
+
+extern ModeHook init_wator;
+extern ModeHook draw_wator;
+extern ModeHook release_wator;
+extern ModeHook refresh_wator;
+extern ModeSpecOpt wator_opts;
+
+extern ModeHook init_wire;
+extern ModeHook draw_wire;
+extern ModeHook release_wire;
+extern ModeHook refresh_wire;
+extern ModeSpecOpt wire_opts;
+
+extern ModeHook init_world;
+extern ModeHook draw_world;
+extern ModeHook release_world;
+extern ModeHook refresh_world;
+extern ModeSpecOpt world_opts;
+
+extern ModeHook init_worm;
+extern ModeHook draw_worm;
+extern ModeHook release_worm;
+extern ModeHook refresh_worm;
+extern ModeSpecOpt worm_opts;
+
+#if defined( USE_XPM ) || defined( USE_XPMINC )
+extern ModeHook init_cartoon;
+extern ModeHook draw_cartoon;
+extern ModeHook release_cartoon;
+extern ModeSpecOpt cartoon_opts;
+
+#endif
+
+#ifdef USE_GL
+extern ModeHook init_escher;
+extern ModeHook draw_escher;
+extern ModeHook release_escher;
+extern ModeHook change_escher;
+extern ModeSpecOpt escher_opts;
+
+extern ModeHook init_gears;
+extern ModeHook draw_gears;
+extern ModeHook release_gears;
+extern ModeSpecOpt gears_opts;
+
+extern ModeHook init_morph3d;
+extern ModeHook draw_morph3d;
+extern ModeHook release_morph3d;
+extern ModeHook change_morph3d;
+extern ModeSpecOpt morph3d_opts;
+
+extern ModeHook init_pipes;
+extern ModeHook draw_pipes;
+extern ModeHook release_pipes;
+extern ModeHook refresh_pipes;
+extern ModeHook change_pipes;
+extern ModeSpecOpt pipes_opts;
+
+extern ModeHook init_sproingies;
+extern ModeHook draw_sproingies;
+extern ModeHook release_sproingies;
+extern ModeHook refresh_sproingies;
+extern ModeSpecOpt sproingies_opts;
+
+extern ModeHook init_superquadrics;
+extern ModeHook draw_superquadrics;
+extern ModeHook release_superquadrics;
+extern ModeHook refresh_superquadrics;
+extern ModeSpecOpt superquadrics_opts;
+
+#endif
+
+#ifdef USE_HACKERS
+extern ModeHook init_fadeplot;
+extern ModeHook draw_fadeplot;
+extern ModeHook release_fadeplot;
+extern ModeHook refresh_fadeplot;
+extern ModeSpecOpt fadeplot_opts;
+
+#endif
+
+extern ModeHook init_blank;
+extern ModeHook draw_blank;
+extern ModeHook release_blank;
+extern ModeHook refresh_blank;
+extern ModeSpecOpt blank_opts;
+
+#ifdef USE_BOMB
+extern ModeHook init_bomb;
+extern ModeHook draw_bomb;
+extern ModeHook release_bomb;
+extern ModeHook refresh_bomb;
+extern ModeHook change_bomb;
+extern ModeSpecOpt bomb_opts;
+
+#endif
+
+extern ModeHook init_random;
+extern ModeHook draw_random;
+extern ModeHook release_random;
+extern ModeHook refresh_random;
+extern ModeHook change_random;
+extern ModeSpecOpt random_opts;
+
+extern LockStruct LockProcs[];
+extern int numprocs;
+
+/* -------------------------------------------------------------------- */
+
+#endif /* __XLOCK_MODE_H__ */
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)mountain.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * mountain.c - mountain for xlock, the X Window System lockscreen.
+ *
+ * Copyright (c) 1995 Pascal Pensa <pensa@aurora.unice.fr>
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Mountain"
+#define HACK_INIT init_mountain
+#define HACK_DRAW draw_mountain
+#define DEF_DELAY 1000
+#define DEF_BATCHCOUNT 30
+#define DEF_CYCLES 100
+#define DEF_NCOLORS 64
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt mountain_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+/* ~ 5000 Max mountain height (1000 - 10000) */
+#define MAXHEIGHT (3 * (mp->width + mp->height))
+
+#define WORLDWIDTH 50 /* World size x * y */
+
+#define RANGE_RAND(min,max) ((min) + NRAND((max) - (min)))
+
+typedef struct {
+ int pixelmode;
+ int width;
+ int height;
+ int x, y;
+ int offset;
+ int stage;
+ int h[WORLDWIDTH][WORLDWIDTH];
+ int time; /* up time */
+ int first;
+ GC stippled_GC;
+} mountainstruct;
+
+static mountainstruct *mountains = NULL;
+
+static void
+spread(int (*m)[50], int x, int y)
+{
+ int x2, y2;
+ int h = m[x][y];
+
+ for (y2 = y - 1; y2 <= y + 1; y2++)
+ for (x2 = x - 1; x2 <= x + 1; x2++)
+ if (x2 >= 0 && y2 >= 0 && x2 < WORLDWIDTH && y2 < WORLDWIDTH)
+ m[x2][y2] = (m[x2][y2] + h) / 2;
+}
+
+static void
+drawamountain(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ mountainstruct *mp = &mountains[MI_SCREEN(mi)];
+ int x2, y2, x3, y3, y4, y5, c = 0;
+ XPoint p[5];
+
+ if (MI_NPIXELS(mi) > 2) {
+ c = (mp->h[mp->x][mp->y] + mp->h[mp->x + 1][mp->y] +
+ mp->h[mp->x][mp->y + 1] + mp->h[mp->x + 1][mp->y + 1]) / 4;
+ c = (c / 10 + mp->offset) % MI_NPIXELS(mi);
+ }
+ x2 = mp->x * (2 * mp->width) / (3 * WORLDWIDTH);
+ y2 = mp->y * (2 * mp->height) / (3 * WORLDWIDTH);
+ p[0].x = (x2 - y2 / 2) + (mp->width / 4);
+ p[0].y = (y2 - mp->h[mp->x][mp->y]) + mp->height / 4;
+
+ x3 = (mp->x + 1) * (2 * mp->width) / (3 * WORLDWIDTH);
+ y3 = mp->y * (2 * mp->height) / (3 * WORLDWIDTH);
+ p[1].x = (x3 - y3 / 2) + (mp->width / 4);
+ p[1].y = (y3 - mp->h[mp->x + 1][mp->y]) + mp->height / 4;
+
+ y4 = (mp->y + 1) * (2 * mp->height) / (3 * WORLDWIDTH);
+ p[2].x = (x3 - y4 / 2) + (mp->width / 4);
+ p[2].y = (y4 - mp->h[mp->x + 1][mp->y + 1]) + mp->height / 4;
+
+ y5 = (mp->y + 1) * (2 * mp->height) / (3 * WORLDWIDTH);
+ p[3].x = (x2 - y5 / 2) + (mp->width / 4);
+ p[3].y = (y5 - mp->h[mp->x][mp->y + 1]) + mp->height / 4;
+
+ p[4].x = p[0].x;
+ p[4].y = p[0].y;
+
+ if (MI_NPIXELS(mi) > 2)
+ XSetForeground(display, gc, MI_PIXEL(mi, c));
+ else
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+ XFillPolygon(display, window, gc, p, 4, Complex, CoordModeOrigin);
+
+ if (!mp->pixelmode) {
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XDrawLines(display, window, gc, p, 5, CoordModeOrigin);
+ }
+ mp->x++;
+ if (mp->x == WORLDWIDTH - 1) {
+ mp->y++;
+ mp->x = 0;
+ }
+ if (mp->y == WORLDWIDTH - 1)
+ mp->stage++;
+}
+
+void
+init_mountain(ModeInfo * mi)
+{
+ mountainstruct *mp;
+ int i, j, x, y;
+ XGCValues gcv;
+
+ if (mountains == NULL) {
+ if ((mountains = (mountainstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (mountainstruct))) == NULL)
+ return;
+ }
+ mp = &mountains[MI_SCREEN(mi)];
+ mp->width = MI_WIN_WIDTH(mi);
+ mp->height = MI_WIN_HEIGHT(mi);
+ mp->pixelmode = (mp->width + mp->height < 200);
+ mp->stage = 0;
+ mp->time = 0;
+ mp->x = mp->y = 0;
+ if (!mp->first) {
+ mp->first = 1;
+ gcv.foreground = MI_WIN_WHITE_PIXEL(mi);
+ gcv.background = MI_WIN_BLACK_PIXEL(mi);
+
+ mp->stippled_GC = XCreateGC(MI_DISPLAY(mi), MI_WINDOW(mi),
+ GCForeground | GCBackground, &gcv);
+ }
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+
+ for (y = 0; y < WORLDWIDTH; y++)
+ for (x = 0; x < WORLDWIDTH; x++)
+ mp->h[x][y] = 0;
+
+ j = MI_BATCHCOUNT(mi);
+ if (j < 0)
+ j = NRAND(-j) + 1;
+ for (i = 0; i < j; i++)
+ mp->h[RANGE_RAND(1, WORLDWIDTH - 1)][RANGE_RAND(1, WORLDWIDTH - 1)] =
+ NRAND(MAXHEIGHT);
+
+ for (y = 0; y < WORLDWIDTH; y++)
+ for (x = 0; x < WORLDWIDTH; x++)
+ spread(mp->h, x, y);
+
+ for (y = 0; y < WORLDWIDTH; y++)
+ for (x = 0; x < WORLDWIDTH; x++) {
+ mp->h[x][y] = mp->h[x][y] + NRAND(10) - 5;
+ if (mp->h[x][y] < 10)
+ mp->h[x][y] = 0;
+ }
+
+ if (MI_NPIXELS(mi) > 2)
+ mp->offset = NRAND(MI_NPIXELS(mi));
+ else
+ mp->offset = 0;
+}
+
+void
+draw_mountain(ModeInfo * mi)
+{
+ mountainstruct *mp = &mountains[MI_SCREEN(mi)];
+
+ switch (mp->stage) {
+ case 0:
+ drawamountain(mi);
+ break;
+ case 1:
+ MI_PAUSE(mi) = 2000000;
+ /*if (++mp->time > MI_CYCLES(mi)); */
+ mp->stage++;
+ break;
+ case 2:
+ init_mountain(mi);
+ break;
+ }
+}
+
+void
+release_mountain(ModeInfo * mi)
+{
+ if (mountains != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ mountainstruct *mp = &mountains[screen];
+
+ XFreeGC(MI_DISPLAY(mi), mp->stippled_GC);
+ }
+ (void) free((void *) mountains);
+ mountains = NULL;
+ }
+}
+
+void
+refresh_mountain(ModeInfo * mi)
+{
+ mountainstruct *mp = &mountains[MI_SCREEN(mi)];
+
+ mp->x = 0;
+ mp->y = 0;
+}
--- /dev/null
+
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)nose.c 4.03 97/06/04 xlockmore";
+
+#endif
+
+/*-
+ * nose.c - a little guy with a big nose and a hat wander around the screen,
+ * spewing out messages for xlock the X Window System lockscreen.
+ *
+ * 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.
+ *
+ * Revision History:
+ * 06-Jun-97: Compatible with xscreensaver and now colorized (idea from
+ * xscreensaver but colors are random).
+ * 27-Feb-96: Added new ModeInfo arg to init and callback hooks. Removed
+ * references to onepause, now uses MI_PAUSE(mi) interface.
+ * Ron Hitchens <ron@idiom.com>
+ * 10-Oct-95: A better way of handling fortunes from a file, thanks to
+ * Jouk Jansen <joukj@crys.chem.uva.nl>.
+ * 21-Sep-95: font option added, debugged for multiscreens
+ * 12-Aug-95: xlock version
+ * 1992: xscreensaver version, noseguy (Jamie Zawinski <jwz@netscape.com>)
+ * 1990: X11 version, xnlock (Dan Heller <argv@sun.com>)
+ */
+
+/*-
+ * xscreensaver, Copyright (c) 1992 Jamie Zawinski <jwz@mcom.com>
+ *
+ * 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 STANDALONE
+#define PROGCLASS "nose"
+#define HACK_INIT init_nose
+#define HACK_DRAW draw_nose
+#define DEF_DELAY 100000
+#define DEF_NCOLORS 64
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt nose_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+#include "bitmaps/nose-hat.xbm"
+#include "bitmaps/nose-hatd.xbm"
+#include "bitmaps/nose-facef.xbm"
+#include "bitmaps/nose-faced.xbm"
+#include "bitmaps/nose-facel.xbm"
+#include "bitmaps/nose-facer.xbm"
+#include "bitmaps/nose-shoef.xbm"
+#include "bitmaps/nose-shoel.xbm"
+#include "bitmaps/nose-shoer.xbm"
+#include "bitmaps/nose-stepl.xbm"
+#include "bitmaps/nose-stepr.xbm"
+
+#define font_height(f) ((f == None) ? 8 : f->ascent + f->descent)
+
+#define L 0
+#define R 1
+#define LSTEP 2
+#define RSTEP 3
+#define LF 4
+#define RF 5
+#define F 6
+#define D 7
+#define PIXMAPS 8
+#define PIXMAP_SIZE 64
+#define MOVE 0
+#define TALK 1
+#define FREEZE 2
+
+extern XFontStruct *getFont(Display * display);
+extern char *getWords(int screen);
+extern int isRibbon(void);
+
+typedef struct {
+ int xs, ys;
+ int width, height;
+ GC text_fg_gc, text_bg_gc, noseGC[PIXMAPS];
+ char *words;
+ int x, y;
+ int tinymode; /* walking or getting passwd */
+ int length, dir, lastdir;
+ int up;
+ int frame;
+ long nose_pause;
+ int state;
+ Pixmap position[PIXMAPS];
+} nosestruct;
+
+static nosestruct *noses = NULL;
+
+static void walk(ModeInfo * mi, register int dir);
+static void talk(ModeInfo * mi, int force_erase);
+static int think(ModeInfo * mi);
+static unsigned long look(ModeInfo * mi);
+static XFontStruct *mode_font = None;
+
+#define LEFT 001
+#define RIGHT 002
+#define DOWN 004
+#define UP 010
+#define FRONT 020
+#define X_INCR 3
+#define Y_INCR 2
+
+#define COPY(d,g,c,p,np,x,y,w,h) XSetForeground(d,g,c);\
+XSetStipple(d,g,p); XSetTSOrigin(d,g,x,y);\
+XFillRectangle(d,np,g,x,y,w,h)
+
+static void
+pickClothes(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ nosestruct *np = &noses[MI_SCREEN(mi)];
+ XGCValues gcv;
+ Pixmap face_pix, hat_pix, shoe_pix, shoel_pix, shoer_pix;
+ unsigned long hat_color = (MI_NPIXELS(mi) <= 2) ?
+ MI_WIN_WHITE_PIXEL(mi) : MI_PIXEL(mi, NRAND(MI_NPIXELS(mi)));
+ unsigned long face_color = (MI_NPIXELS(mi) <= 2) ?
+ MI_WIN_WHITE_PIXEL(mi) : MI_PIXEL(mi, (NUMCOLORS / 5 + 1));
+ unsigned long shoe_color = (MI_NPIXELS(mi) <= 2) ?
+ MI_WIN_WHITE_PIXEL(mi) : MI_PIXEL(mi, NRAND(MI_NPIXELS(mi)));
+ int i;
+
+ for (i = 0; i < PIXMAPS; i++) {
+ np->position[i] = XCreatePixmap(display, window, PIXMAP_SIZE, PIXMAP_SIZE,
+ MI_WIN_DEPTH(mi));
+ gcv.foreground = MI_WIN_BLACK_PIXEL(mi);
+ gcv.background = MI_WIN_BLACK_PIXEL(mi);
+ np->noseGC[i] = XCreateGC(display, np->position[i],
+ GCForeground | GCBackground, &gcv);
+ XFillRectangle(display, np->position[i], np->noseGC[i],
+ 0, 0, PIXMAP_SIZE, PIXMAP_SIZE);
+ }
+ XSetBackground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XSetFillStyle(display, gc, FillStippled);
+ /* DOWN NOSE GUY */
+ hat_pix = XCreateBitmapFromData(display, window,
+ (char *) nose_hat_down_bits,
+ nose_hat_down_width, nose_hat_down_height);
+ face_pix = XCreateBitmapFromData(display, window,
+ (char *) nose_face_down_bits,
+ nose_face_down_width, nose_face_down_height);
+ shoe_pix = XCreateBitmapFromData(display, window,
+ (char *) nose_shoe_front_bits,
+ nose_shoe_front_width, nose_shoe_front_height);
+ COPY(display, gc, shoe_color, shoe_pix, np->position[D],
+ (PIXMAP_SIZE - nose_shoe_front_width) / 2,
+ nose_hat_height + nose_face_front_height + 3,
+ nose_shoe_front_width, nose_shoe_front_height);
+ COPY(display, gc, face_color, face_pix, np->position[D],
+ (PIXMAP_SIZE - nose_face_down_width) / 2, nose_hat_down_height + 7,
+ nose_face_down_width, nose_face_down_height);
+ COPY(display, gc, hat_color, hat_pix, np->position[D],
+ (PIXMAP_SIZE - nose_hat_down_width) / 2, 7,
+ nose_hat_down_width, nose_hat_down_height);
+ if (MI_NPIXELS(mi) <= 2) {
+ XSetFillStyle(display, gc, FillSolid);
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XFillRectangle(display, np->position[D], gc,
+ 0, nose_hat_down_height + 6, PIXMAP_SIZE, 1);
+ XSetFillStyle(display, gc, FillStippled);
+ }
+ XFreePixmap(display, face_pix);
+ XFreePixmap(display, hat_pix);
+ /* FRONT NOSE GUY */
+ hat_pix = XCreateBitmapFromData(display, window,
+ (char *) nose_hat_bits,
+ nose_hat_width, nose_hat_height);
+ face_pix = XCreateBitmapFromData(display, window,
+ (char *) nose_face_front_bits,
+ nose_face_front_width, nose_face_front_height);
+ COPY(display, gc, shoe_color, shoe_pix, np->position[F],
+ (PIXMAP_SIZE - nose_shoe_front_width) / 2,
+ nose_hat_height + nose_face_front_height + 3,
+ nose_shoe_front_width, nose_shoe_front_height);
+ COPY(display, gc, hat_color, hat_pix, np->position[F],
+ (PIXMAP_SIZE - nose_hat_width) / 2, 4,
+ nose_hat_width, nose_hat_height);
+ if (MI_NPIXELS(mi) <= 2) {
+ XSetFillStyle(display, gc, FillSolid);
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XFillRectangle(display, np->position[F], gc,
+ 0, nose_hat_height + 3, PIXMAP_SIZE, 1);
+ XSetFillStyle(display, gc, FillStippled);
+ }
+ COPY(display, gc, face_color, face_pix, np->position[F],
+ (PIXMAP_SIZE - nose_face_front_width) / 2, nose_hat_height + 1,
+ nose_face_front_width, nose_face_front_height);
+ XFreePixmap(display, shoe_pix);
+ /* FRONT LEFT NOSE GUY */
+ shoel_pix = XCreateBitmapFromData(display, window,
+ (char *) nose_shoe_left_bits,
+ nose_shoe_left_width, nose_shoe_left_height);
+ COPY(display, gc, shoe_color, shoel_pix, np->position[LF],
+ (PIXMAP_SIZE - nose_shoe_left_width) / 2 - 4,
+ nose_hat_height + nose_face_front_height + 3,
+ nose_shoe_left_width, nose_shoe_left_height);
+ COPY(display, gc, hat_color, hat_pix, np->position[LF],
+ (PIXMAP_SIZE - nose_hat_width) / 2, 4,
+ nose_hat_width, nose_hat_height);
+ if (MI_NPIXELS(mi) <= 2) {
+ XSetFillStyle(display, gc, FillSolid);
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XFillRectangle(display, np->position[LF], gc,
+ 0, nose_hat_height + 3, PIXMAP_SIZE, 1);
+ XSetFillStyle(display, gc, FillStippled);
+ }
+ COPY(display, gc, face_color, face_pix, np->position[LF],
+ (PIXMAP_SIZE - nose_face_front_width) / 2, nose_hat_height + 1,
+ nose_face_front_width, nose_face_front_height);
+ /* FRONT RIGHT NOSE GUY */
+ shoer_pix = XCreateBitmapFromData(display, window,
+ (char *) nose_shoe_right_bits,
+ nose_shoe_right_width, nose_shoe_right_height);
+ COPY(display, gc, shoe_color, shoer_pix, np->position[RF],
+ (PIXMAP_SIZE - nose_shoe_right_width) / 2 + 4,
+ nose_hat_height + nose_face_front_height + 3,
+ nose_shoe_right_width, nose_shoe_right_height);
+ COPY(display, gc, hat_color, hat_pix, np->position[RF],
+ (PIXMAP_SIZE - nose_hat_width) / 2, 4,
+ nose_hat_width, nose_hat_height);
+ if (MI_NPIXELS(mi) <= 2) {
+ XSetFillStyle(display, gc, FillSolid);
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XFillRectangle(display, np->position[RF], gc,
+ 0, nose_hat_height + 3, PIXMAP_SIZE, 1);
+ XSetFillStyle(display, gc, FillStippled);
+ }
+ COPY(display, gc, face_color, face_pix, np->position[RF],
+ (PIXMAP_SIZE - nose_face_front_width) / 2, nose_hat_height + 1,
+ nose_face_front_width, nose_face_front_height);
+ XFreePixmap(display, face_pix);
+ /* LEFT NOSE GUY */
+ face_pix = XCreateBitmapFromData(display, window,
+ (char *) nose_face_left_bits,
+ nose_face_left_width, nose_face_left_height);
+ COPY(display, gc, shoe_color, shoel_pix, np->position[L],
+ (PIXMAP_SIZE - nose_shoe_left_width) / 2 - 4,
+ nose_hat_height + nose_face_front_height + 3,
+ nose_shoe_left_width, nose_shoe_left_height);
+ COPY(display, gc, hat_color, hat_pix, np->position[L],
+ (PIXMAP_SIZE - nose_hat_width) / 2, 4,
+ nose_hat_width, nose_hat_height);
+ if (MI_NPIXELS(mi) <= 2) {
+ XSetFillStyle(display, gc, FillSolid);
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XFillRectangle(display, np->position[L], gc,
+ 0, nose_hat_height + 3, PIXMAP_SIZE, 1);
+ XSetFillStyle(display, gc, FillStippled);
+ }
+ COPY(display, gc, face_color, face_pix, np->position[L],
+ (PIXMAP_SIZE - nose_face_left_width) / 2 - 4, nose_hat_height + 4,
+ nose_face_left_width, nose_face_left_height);
+ XFreePixmap(display, shoel_pix);
+ /* LEFT NOSE GUY STEPPING */
+ shoel_pix = XCreateBitmapFromData(display, window,
+ (char *) nose_step_left_bits,
+ nose_step_left_width, nose_step_left_height);
+ COPY(display, gc, shoe_color, shoel_pix, np->position[LSTEP],
+ (PIXMAP_SIZE - nose_step_left_width) / 2,
+ nose_hat_height + nose_face_front_height - 1,
+ nose_step_left_width, nose_step_left_height);
+ COPY(display, gc, hat_color, hat_pix, np->position[LSTEP],
+ (PIXMAP_SIZE - nose_hat_width) / 2, 4,
+ nose_hat_width, nose_hat_height);
+ if (MI_NPIXELS(mi) <= 2) {
+ XSetFillStyle(display, gc, FillSolid);
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XFillRectangle(display, np->position[LSTEP], gc,
+ 0, nose_hat_height + 3, PIXMAP_SIZE, 1);
+ XSetFillStyle(display, gc, FillStippled);
+ }
+ COPY(display, gc, face_color, face_pix, np->position[LSTEP],
+ (PIXMAP_SIZE - nose_face_left_width) / 2 - 4, nose_hat_height + 4,
+ nose_face_left_width, nose_face_left_height);
+ XFreePixmap(display, face_pix);
+ XFreePixmap(display, shoel_pix);
+ /* RIGHT NOSE GUY */
+ face_pix = XCreateBitmapFromData(display, window,
+ (char *) nose_face_right_bits,
+ nose_face_right_width, nose_face_right_height);
+ COPY(display, gc, shoe_color, shoer_pix, np->position[R],
+ (PIXMAP_SIZE - nose_shoe_right_width) / 2 + 4,
+ nose_hat_height + nose_face_front_height + 3,
+ nose_shoe_right_width, nose_shoe_right_height);
+ COPY(display, gc, hat_color, hat_pix, np->position[R],
+ (PIXMAP_SIZE - nose_hat_width) / 2, 4,
+ nose_hat_width, nose_hat_height);
+ if (MI_NPIXELS(mi) <= 2) {
+ XSetFillStyle(display, gc, FillSolid);
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XFillRectangle(display, np->position[R], gc,
+ 0, nose_hat_height + 3, PIXMAP_SIZE, 1);
+ XSetFillStyle(display, gc, FillStippled);
+ }
+ COPY(display, gc, face_color, face_pix, np->position[R],
+ (PIXMAP_SIZE - nose_face_right_width) / 2 + 4, nose_hat_height + 4,
+ nose_face_right_width, nose_face_right_height);
+ XFreePixmap(display, shoer_pix);
+ /* RIGHT NOSE GUY STEPPING */
+ shoer_pix = XCreateBitmapFromData(display, window,
+ (char *) nose_step_right_bits,
+ nose_step_right_width, nose_step_right_height);
+ COPY(display, gc, shoe_color, shoer_pix, np->position[RSTEP],
+ (PIXMAP_SIZE - nose_step_right_width) / 2,
+ nose_hat_height + nose_face_front_height - 1,
+ nose_step_right_width, nose_step_right_height);
+ COPY(display, gc, hat_color, hat_pix, np->position[RSTEP],
+ (PIXMAP_SIZE - nose_hat_width) / 2, 4,
+ nose_hat_width, nose_hat_height);
+ if (MI_NPIXELS(mi) <= 2) {
+ XSetFillStyle(display, gc, FillSolid);
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XFillRectangle(display, np->position[RSTEP], gc,
+ 0, nose_hat_height + 3, PIXMAP_SIZE, 1);
+ XSetFillStyle(display, gc, FillStippled);
+ }
+ COPY(display, gc, face_color, face_pix, np->position[RSTEP],
+ (PIXMAP_SIZE - nose_face_right_width) / 2 + 4, nose_hat_height + 4,
+ nose_face_right_width, nose_face_right_height);
+ XFreePixmap(display, face_pix);
+ XFreePixmap(display, shoer_pix);
+ XFreePixmap(display, hat_pix);
+ XSetFillStyle(display, gc, FillSolid);
+}
+
+static void
+move(ModeInfo * mi)
+{
+ nosestruct *np = &noses[MI_SCREEN(mi)];
+
+ if (!np->length) {
+ register int tries = 0;
+
+ np->dir = 0;
+ if ((LRAND() & 1) && think(mi)) {
+ talk(mi, 0); /* sets timeout to itself */
+ return;
+ }
+ if (!NRAND(3) && (np->nose_pause = look(mi))) {
+ np->state = MOVE;
+ return;
+ }
+ np->nose_pause = 2000 + 10 * NRAND(100);
+ do {
+ if (!tries)
+ np->length = np->width / 100 + NRAND(90), tries = 8;
+ else
+ tries--;
+ switch (NRAND(8)) {
+ case 0:
+ if (np->x - X_INCR * np->length >= 5)
+ np->dir = LEFT;
+ break;
+ case 1:
+ if (np->x + X_INCR * np->length <= np->width - np->xs - 6)
+ np->dir = RIGHT;
+ break;
+ case 2:
+ if (np->y - (Y_INCR * np->length) >= 5)
+ np->dir = UP;
+ break;
+ case 3:
+ if (np->y + Y_INCR * np->length <= np->height - np->ys - 6)
+ np->dir = DOWN;
+ break;
+ case 4:
+ if (np->x - X_INCR * np->length >= 5 &&
+ np->y - (Y_INCR * np->length) >= 5)
+ np->dir = (LEFT | UP);
+ break;
+ case 5:
+ if (np->x + X_INCR * np->length <= np->width - np->xs - 6 &&
+ np->y - Y_INCR * np->length >= 5)
+ np->dir = (RIGHT | UP);
+ break;
+ case 6:
+ if (np->x - X_INCR * np->length >= 5 &&
+ np->y + Y_INCR * np->length <= np->height - np->ys - 6)
+ np->dir = (LEFT | DOWN);
+ break;
+ case 7:
+ if (np->x + X_INCR * np->length <= np->width - np->xs - 6 &&
+ np->y + Y_INCR * np->length <= np->height - np->ys - 6)
+ np->dir = (RIGHT | DOWN);
+ break;
+ default:
+ /* No Defaults */
+ break;
+ }
+ } while (!np->dir);
+ }
+ walk(mi, np->dir);
+ --np->length;
+ np->state = MOVE;
+}
+
+static void
+walk(ModeInfo * mi, register int dir)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ nosestruct *np = &noses[MI_SCREEN(mi)];
+ register int incr = 0;
+
+ if (dir & (LEFT | RIGHT)) { /* left/right movement (mabye up/down too) */
+ np->up = -np->up; /* bouncing effect (even if hit a wall) */
+ if (dir & LEFT) {
+ incr = X_INCR;
+ np->frame = (np->up < 0) ? L : LSTEP;
+ } else {
+ incr = -X_INCR;
+ np->frame = (np->up < 0) ? R : RSTEP;
+ }
+ /* note that maybe neither UP nor DOWN is set! */
+ if (dir & UP && np->y > Y_INCR)
+ np->y -= Y_INCR;
+ else if (dir & DOWN && np->y < np->height - np->ys)
+ np->y += Y_INCR;
+ } else if (dir == UP) { /* Explicit up/down movement only (no left/right) */
+ np->y -= Y_INCR;
+ XCopyArea(display, np->position[F], window, np->noseGC[F],
+ 0, 0, PIXMAP_SIZE, PIXMAP_SIZE, np->x, np->y);
+ } else if (dir == DOWN) {
+ np->y += Y_INCR;
+ XCopyArea(display, np->position[D], window, np->noseGC[D],
+ 0, 0, PIXMAP_SIZE, PIXMAP_SIZE, np->x, np->y);
+ } else if (dir == FRONT && np->frame != F) {
+ if (np->up > 0)
+ np->up = -np->up;
+ if (np->lastdir & LEFT)
+ np->frame = LF;
+ else if (np->lastdir & RIGHT)
+ np->frame = RF;
+ else
+ np->frame = F;
+ XCopyArea(display, np->position[np->frame], window, np->noseGC[np->frame],
+ 0, 0, PIXMAP_SIZE, PIXMAP_SIZE, np->x, np->y);
+ }
+ if (dir & LEFT)
+ while (--incr >= 0) {
+ --np->x;
+ XCopyArea(display, np->position[np->frame], window, np->noseGC[np->frame],
+ 0, 0, PIXMAP_SIZE, PIXMAP_SIZE, np->x, np->y + np->up);
+ XFlush(display);
+ } else if (dir & RIGHT)
+ while (++incr <= 0) {
+ ++np->x;
+ XCopyArea(display, np->position[np->frame], window, np->noseGC[np->frame],
+ 0, 0, PIXMAP_SIZE, PIXMAP_SIZE, np->x, np->y + np->up);
+ XFlush(display);
+ }
+ np->lastdir = dir;
+}
+
+static int
+think(ModeInfo * mi)
+{
+ nosestruct *np = &noses[MI_SCREEN(mi)];
+
+ if (LRAND() & 1)
+ walk(mi, FRONT);
+ if (LRAND() & 1) {
+ np->words = getWords(MI_SCREEN(mi));
+ return 1;
+ }
+ return 0;
+}
+
+#define MAXLINES 40
+
+static void
+talk(ModeInfo * mi, int force_erase)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ nosestruct *np = &noses[MI_SCREEN(mi)];
+ 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(display, window, np->text_bg_gc, s_rect.x - 5, s_rect.y - 5,
+ s_rect.width + 10, s_rect.height + 10);
+ talking = 0;
+ if (!force_erase)
+ np->state = MOVE;
+ return;
+ }
+ talking = 1;
+ walk(mi, FRONT);
+ p = strcpy(buf, np->words);
+
+ if (!(p2 = (char *) strchr(p, '\n')) || !p2[1]) {
+ total = strlen(np->words);
+ (void) strcpy(args[0], np->words);
+ if (mode_font == None)
+ width = 8;
+ else
+ width = XTextWidth(mode_font, np->words, total);
+ height = 0;
+ } else
+ /* p2 now points to the first '\n' */
+ for (height = 0; p; height++) {
+ int w;
+
+ *p2 = 0;
+ if (mode_font != None && (w = XTextWidth(mode_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) {
+ (void) puts("Message too long!");
+ break;
+ }
+ p = p2 + 1;
+ if (!(p2 = (char *) strchr(p, '\n')))
+ break;
+ }
+ height++;
+
+ /*
+ * Figure out the height and width in imagepixels (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(mode_font) + 30;
+ if (np->x - s_rect.width - 10 < 5)
+ s_rect.x = 5;
+ else if ((s_rect.x = np->x + 32 - (s_rect.width + 15) / 2)
+ + s_rect.width + 15 > np->width - 5)
+ s_rect.x = np->width - 15 - s_rect.width;
+ if (np->y - s_rect.height - 10 < 5)
+ s_rect.y = np->y + np->ys + 5;
+ else
+ s_rect.y = np->y - 5 - s_rect.height;
+
+ XFillRectangle(display, window, np->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(display, np->text_fg_gc, 5, 0, 0, 0);
+ XDrawRectangle(display, window, np->text_fg_gc,
+ s_rect.x, s_rect.y, s_rect.width - 1, s_rect.height - 1);
+ XSetLineAttributes(display, np->text_fg_gc, 0, 0, 0, 0);
+ XDrawRectangle(display, window, np->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(mode_font);
+
+ /* now print each string in reverse order (start at bottom of box) */
+ for (Z = 0; Z < height; Z++) {
+ XDrawString(display, window, np->text_fg_gc, s_rect.x + X, s_rect.y + Y,
+ args[Z], strlen(args[Z]));
+ Y += font_height(mode_font);
+ }
+ np->nose_pause = (total / 15) * 1000000;
+ if (np->nose_pause < 3000000)
+ np->nose_pause = 3000000;
+ np->state = TALK;
+}
+
+static unsigned long
+look(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+
+ /*GC gc = MI_GC(mi); */
+ nosestruct *np = &noses[MI_SCREEN(mi)];
+ int i;
+
+ if (NRAND(3)) {
+ i = (LRAND() & 1) ? D : F;
+ XCopyArea(display, np->position[i], window, np->noseGC[i],
+ 0, 0, PIXMAP_SIZE, PIXMAP_SIZE, np->x, np->y);
+ return 100000L;
+ }
+ if (!NRAND(5))
+ return 0;
+ if (NRAND(3)) {
+ i = (LRAND() & 1) ? LF : RF;
+ XCopyArea(display, np->position[i], window, np->noseGC[i],
+ 0, 0, PIXMAP_SIZE, PIXMAP_SIZE, np->x, np->y);
+ return 100000L;
+ }
+ if (!NRAND(5))
+ return 0;
+ i = (LRAND() & 1) ? L : R;
+ XCopyArea(display, np->position[i], window, np->noseGC[i],
+ 0, 0, PIXMAP_SIZE, PIXMAP_SIZE, np->x, np->y);
+ return 100000L;
+}
+
+void
+init_nose(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ nosestruct *np;
+ XGCValues gcv;
+ int i = 0;
+
+ if (noses == NULL) {
+ if ((noses = (nosestruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (nosestruct))) == NULL)
+ return;
+ }
+ np = &noses[MI_SCREEN(mi)];
+
+ np->width = MI_WIN_WIDTH(mi) + 2;
+ np->height = MI_WIN_HEIGHT(mi) + 2;
+ np->tinymode = (np->width + np->height < 4 * PIXMAP_SIZE);
+ np->xs = PIXMAP_SIZE;
+ np->ys = PIXMAP_SIZE;
+
+ XClearWindow(display, window);
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+ if (mode_font == None)
+ mode_font = getFont(display);
+ if (np->noseGC[0] == NULL)
+ pickClothes(mi);
+ np->words = getWords(MI_SCREEN(mi));
+ if (np->text_fg_gc == NULL && mode_font != None) {
+ gcv.font = mode_font->fid;
+ XSetFont(display, gc, mode_font->fid);
+ gcv.graphics_exposures = False;
+ gcv.foreground = MI_WIN_WHITE_PIXEL(mi);
+ gcv.background = MI_WIN_BLACK_PIXEL(mi);
+ np->text_fg_gc = XCreateGC(display, window,
+ GCForeground | GCBackground | GCGraphicsExposures | GCFont, &gcv);
+ gcv.foreground = MI_WIN_BLACK_PIXEL(mi);
+ gcv.background = MI_WIN_WHITE_PIXEL(mi);
+ np->text_bg_gc = XCreateGC(display, window,
+ GCForeground | GCBackground | GCGraphicsExposures | GCFont, &gcv);
+ }
+ np->up = 1;
+ if (np->tinymode) {
+ np->x = 0;
+ np->y = 0;
+ i = (NRAND(PIXMAPS));
+ XCopyArea(display, np->position[i], window, np->noseGC[i],
+ 0, 0, PIXMAP_SIZE, PIXMAP_SIZE,
+ (np->width - PIXMAP_SIZE) / 2,
+ (np->height - PIXMAP_SIZE) / 2);
+ np->state = FREEZE;
+ } else {
+ np->x = np->width / 2;
+ np->y = np->height / 2;
+ np->state = MOVE;
+ }
+ XFlush(display);
+}
+
+void
+draw_nose(ModeInfo * mi)
+{
+ nosestruct *np = &noses[MI_SCREEN(mi)];
+
+ np->nose_pause = 0; /* use default if not changed here */
+ switch (np->state) {
+ case MOVE:
+ move(mi);
+ break;
+ case TALK:
+ talk(mi, 0);
+ break;
+ }
+ /* TODO: This is wrong for multi-screens *** */
+ MI_PAUSE(mi) = np->nose_pause; /* pass back desired pause time */
+}
+
+void
+release_nose(ModeInfo * mi)
+{
+ if (noses != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ Display *display = MI_DISPLAY(mi);
+ nosestruct *np = &noses[screen];
+ int i;
+
+ if (np->text_fg_gc != NULL)
+ XFreeGC(display, np->text_fg_gc);
+ if (np->text_bg_gc != NULL)
+ XFreeGC(display, np->text_bg_gc);
+ for (i = 0; i < PIXMAPS; i++) {
+ if (np->position[i])
+ XFreePixmap(display, np->position[i]);
+ if (np->noseGC[i] != NULL)
+ XFreeGC(display, np->noseGC[i]);
+ }
+ }
+ (void) free((void *) noses);
+ noses = NULL;
+ }
+ if (mode_font != None) {
+ XFreeFont(MI_DISPLAY(mi), mode_font);
+ mode_font = None;
+ }
+}
+
+void
+refresh_nose(ModeInfo * mi)
+{
+ /* Do nothing, it will refresh by itself */
+}
--- /dev/null
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)option.c 4.00 97/01/01 xlockmore";
+
+#endif
+
+/*-
+ * option.c - option stuff for xmlock, the gui interface to xlock.
+ *
+ * Copyright (c) 1996 by Charles Vidal
+ *
+ * See xlock.c for copying information.
+ *
+ * Revision History:
+ * Nov-96: written.
+ *
+ */
+
+/*-
+ * if you want add some options ,so it's not really difficult
+ * 1: Learn Motif ... but only if you want to :)
+ * 2: add a name of widget after geometry,font,program
+ * 3: add a string ( char * ) after *inval=NULL,*geo=NULL
+ * 4: add a callback like f_username with your new string
+ * 5: copy and paste after
+ geometry=XtVaCreateManagedWidget("geometry",xmPushButtonGadgetClass,options,NULL);
+ XtAddCallback(geometry,XmNactivateCallback,f_geometry,NULL);
+ * change geometry by your name of widget, and f_geometry by the name
+ * of your new callback
+ * 6: go to the church , call god for a miracle :)
+ * GOOD LUCK
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef VMS
+#include <descrip.h>
+#include <lib$routines.h>
+#endif
+
+#include <X11/cursorfont.h>
+/* #include <Xm/XmAll.h> Does not work on my version of Lesstif */
+#include <Xm/RowColumn.h>
+#include <Xm/SelectioB.h>
+#include <Xm/CascadeB.h>
+#include <Xm/PushBG.h>
+#include <Xm/List.h>
+#include <Xm/MessageB.h>
+
+#define OPTIONS 8
+#define REGULAR_OPTIONS (OPTIONS-2)
+#define NBPROGNAME 3
+#define MAXNAMES 10000
+Widget Menuoption;
+static Widget Options[OPTIONS];
+
+/* extern variables */
+extern Widget toplevel;
+
+/* Widget */
+static Widget PromptDialog, FontSelectionDialog, ProgramSelectionDialog;
+
+/* strings */
+char *c_Options[OPTIONS];
+extern char *r_Options[OPTIONS];
+
+static char *prompts[REGULAR_OPTIONS] =
+{
+ "Enter the user name.",
+ "Enter the password message.",
+ "Enter the info message.",
+ "Enter the valid message.",
+ "Enter the invalid message.",
+ "Enter the geometry mxn."
+};
+
+static char *prognames[NBPROGNAME] =
+{
+ "fortune",
+ "finger",
+ "echo hello world"
+};
+static int loadfont = 0;
+
+/* string temp */
+static char **whichone;
+
+
+static void
+managePrompt(char *s)
+{
+ int ac;
+ Arg args[3];
+ XmString label_str1, label_str2;
+
+ ac = 0;
+ label_str1 = XmStringCreateSimple(s);
+ XtSetArg(args[ac], XmNselectionLabelString, label_str1);
+ ac++;
+ if (*whichone != NULL) {
+ label_str2 = XmStringCreateSimple(*whichone);
+ XtSetArg(args[ac], XmNtextString, label_str2);
+ ac++;
+ } else {
+ label_str2 = XmStringCreateSimple("");
+ XtSetArg(args[ac], XmNtextString, label_str2);
+ ac++;
+ }
+
+ XtSetValues(PromptDialog, args, ac);
+/* PURIFY 4.0.1 on Solaris 2 reports a 71 byte memory leak on the next line. */
+ XtManageChild(PromptDialog);
+ XmStringFree(label_str1);
+ XmStringFree(label_str2);
+}
+
+/* CallBack */
+static void
+f_option(Widget w, XtPointer client_data, XtPointer call_data)
+{
+ switch ((int) client_data) {
+ case REGULAR_OPTIONS: /* font */
+ {
+ int numdirnames, i;
+ char **dirnames;
+ XmString label_str;
+ Widget listtmp;
+ Cursor tmp;
+
+ whichone = &c_Options[REGULAR_OPTIONS];
+ if (!loadfont) {
+ tmp = XCreateFontCursor(XtDisplay(toplevel), XC_watch);
+ XDefineCursor(XtDisplay(toplevel), XtWindow(toplevel), tmp);
+ dirnames = XListFonts(XtDisplay(toplevel), "*", MAXNAMES, &numdirnames);
+ listtmp = XmSelectionBoxGetChild(FontSelectionDialog, XmDIALOG_LIST);
+ for (i = 0; i < numdirnames; i++) {
+ label_str = XmStringCreateSimple(dirnames[i]);
+ XmListAddItemUnselected(listtmp, label_str, 0);
+ XmStringFree(label_str);
+ }
+ tmp = XCreateFontCursor(XtDisplay(toplevel), XC_left_ptr);
+ XDefineCursor(XtDisplay(toplevel), XtWindow(toplevel), tmp);
+ loadfont = 1;
+ XFreeFontNames(dirnames);
+ }
+ XtManageChild(FontSelectionDialog);
+ }
+ break;
+
+ case (REGULAR_OPTIONS + 1): /* program */
+ whichone = &c_Options[REGULAR_OPTIONS + 1];
+/* PURIFY 4.0.1 on Solaris 2 reports a 71 byte memory leak on the next line. */
+ XtManageChild(ProgramSelectionDialog);
+ break;
+
+ default:
+ whichone = &c_Options[(int) client_data];
+ managePrompt(prompts[(int) client_data]);
+ }
+}
+
+static void
+f_Dialog(Widget w, XtPointer client_data, XtPointer call_data)
+{
+ static char *quoted_text = NULL;
+ char *nonquoted_text = NULL;
+ XmSelectionBoxCallbackStruct *scb =
+ (XmSelectionBoxCallbackStruct *) call_data;
+
+ if (whichone != NULL)
+ XtFree(*whichone);
+ XmStringGetLtoR(scb->value, XmSTRING_DEFAULT_CHARSET, &nonquoted_text);
+ quoted_text = (char *) malloc(strlen(nonquoted_text) + 3);
+ (void) sprintf(quoted_text, "\"%s\"", nonquoted_text);
+ (void) free((void *) nonquoted_text);
+ *whichone = quoted_text;
+}
+
+/* Setup Widget */
+void
+Setup_Option(Widget MenuBar)
+{
+ Arg args[15];
+ int i, ac = 0;
+ XmString label_str;
+ Widget listtmp, pulldownmenu;
+
+ pulldownmenu = XmCreatePulldownMenu(MenuBar, "PopupOptions", NULL, 0);
+ label_str = XmStringCreateSimple("Options");
+ XtVaCreateManagedWidget("Options", xmCascadeButtonWidgetClass, MenuBar,
+ XmNlabelString, label_str, XmNsubMenuId, pulldownmenu, NULL);
+ XmStringFree(label_str);
+
+ for (i = 0; i < OPTIONS; i++) {
+ Options[i] = XtVaCreateManagedWidget(r_Options[i],
+ xmPushButtonGadgetClass, pulldownmenu, NULL);
+ XtAddCallback(Options[i], XmNactivateCallback, f_option, (XtPointer) i);
+ }
+/* PURIFY 4.0.1 on Solaris 2 reports a 12 byte memory leak on the next line. */
+ PromptDialog = XmCreatePromptDialog(toplevel, "PromptDialog", args, ac);
+ XtAddCallback(PromptDialog, XmNokCallback, f_Dialog, NULL);
+
+/* PURIFY 4.0.1 on Solaris 2 reports a 28 byte and a 12 byte memory leak on
+ the next line. */
+ FontSelectionDialog = XmCreateSelectionDialog(toplevel,
+ "FontSelectionDialog", NULL, 0);
+ XtAddCallback(FontSelectionDialog, XmNokCallback, f_Dialog, NULL);
+
+/* PURIFY 4.0.1 on Solaris 2 reports a 38 byte memory leak on the next line. */
+ ProgramSelectionDialog = XmCreateSelectionDialog(toplevel,
+ "ProgramSelectionDialog", NULL, 0);
+ XtAddCallback(ProgramSelectionDialog, XmNokCallback, f_Dialog, NULL);
+ listtmp = XmSelectionBoxGetChild(ProgramSelectionDialog, XmDIALOG_LIST);
+ for (i = 0; i < NBPROGNAME; i++) {
+ label_str = XmStringCreateSimple(prognames[i]);
+ XmListAddItemUnselected(listtmp, label_str, 0);
+ XmStringFree(label_str);
+ }
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)pacman.c 4.03 97/06/04 xlockmore";
+
+#endif
+
+/*-
+ * pacman.c - pacman for xlock, the X Window System lockscreen.
+ *
+ * Copyright (c) 1995 by Heath Rice <rice@asl.dl.nec.com>.
+ *
+ * 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.
+ *
+ * Revision History:
+ * 04-Jun-97: Compatible with xscreensaver
+ *
+ */
+
+/*-
+ * [Pacman eats screen. Ghosts put screen back.]
+ * Pacman eats ghosts when he encounters them.
+ * After all ghosts are eaten, pacman continues
+ * eating the screen until all of it is gone. Then
+ * it starts over.
+ * Food dots should be added. Restart when done eating.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Pacman"
+#define HACK_INIT init_pacman
+#define HACK_DRAW draw_pacman
+#define DEF_DELAY 100000
+#define DEF_BATCHCOUNT 10
+#define DEF_SIZE 0
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt pacman_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+/* aliases for vars defined in the bitmap file */
+#define CELL_WIDTH image_width
+#define CELL_HEIGHT image_height
+#define CELL_BITS image_bits
+
+#include "ghost.xbm"
+
+#define MINGHOSTS 1
+#define MAXMOUTH 11
+#define MINGRIDSIZE 4
+#define MINSIZE 1
+#define NOWHERE 255
+
+#define NONE 0x0000
+#define LT 0x1000
+#define RT 0x0001
+#define RB 0x0010
+#define LB 0x0100
+#define ALL 0x1111
+
+#define YELLOW 9
+#define GREEN 23
+#define BLUE 45
+
+typedef struct {
+ int col, row;
+ int nextbox, lastbox, nextcol, nextrow;
+ int dead;
+ int mouthstage, mouthdirection;
+ /*int color; */
+} beingstruct;
+
+typedef struct {
+ int pixelmode;
+ int width, height;
+ int nrows, ncols;
+ int xs, ys, xb, yb;
+ int inc;
+ GC stippledGC;
+ Pixmap ghostPixmap;
+ beingstruct pacman;
+ beingstruct *ghosts;
+ int nghosts;
+#ifdef DEFUNCT
+ unsigned int *eaten;
+#endif
+ Pixmap pacmanPixmap[4][MAXMOUTH];
+} pacmangamestruct;
+
+static pacmangamestruct *pacmangames = NULL;
+static int icon_width, icon_height;
+
+#if DEFUNCT
+static void
+clearcorners(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ Window window = MI_WINDOW(mi);
+ pacmangamestruct *pp = &pacmangames[MI_SCREEN(mi)];
+
+ XSetForeground(display, gc, MI_PIXEL(mi, GREEN));
+ if ((pp->pacman.nextrow == 0) && (pp->pacman.nextcol == 0)) {
+ XFillRectangle(display, window, gc, 0, 0,
+ ((pp->width / pp->ncols) / 2), ((pp->width / pp->ncols) / 2));
+ pp->eaten[(pp->pacman.nextcol * pp->nrows) + pp->pacman.nextrow] |=
+ RT | LT | RB | LB;
+ } else if ((pp->pacman.nextrow == pp->nrows - 1) &&
+ (pp->pacman.nextcol == 0)) {
+ XFillRectangle(display, window, gc,
+ 0, (pp->nrows * pp->ys) - ((pp->width / pp->ncols) / 2),
+ ((pp->width / pp->ncols) / 2), ((pp->width / pp->ncols) / 2));
+ pp->eaten[(pp->pacman.nextcol * pp->nrows) + pp->pacman.nextrow] |=
+ RT | LT | RB | LB;
+ } else if ((pp->pacman.nextrow == 0) &&
+ (pp->pacman.nextcol == pp->ncols - 1)) {
+ XFillRectangle(display, window, gc,
+ (pp->ncols * pp->xs) - ((pp->width / pp->ncols) / 2), 0,
+ ((pp->width / pp->ncols) / 2), ((pp->width / pp->ncols) / 2));
+ pp->eaten[(pp->pacman.nextcol * pp->nrows) + pp->pacman.nextrow] |=
+ RT | LT | RB | LB;
+ } else if ((pp->pacman.nextrow == pp->nrows - 1) &&
+ (pp->pacman.nextcol == pp->ncols - 1)) {
+ XFillRectangle(display, window, gc,
+ (pp->ncols * pp->xs) - ((pp->width / pp->ncols) / 2),
+ (pp->nrows * pp->ys) - ((pp->width / pp->ncols) / 2),
+ ((pp->width / pp->ncols) / 2), ((pp->width / pp->ncols) / 2));
+ pp->eaten[(pp->pacman.nextcol * pp->nrows) + pp->pacman.nextrow] |=
+ RT | LT | RB | LB;
+ }
+}
+#endif
+static void
+repopulate(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ pacmangamestruct *pp = &pacmangames[MI_SCREEN(mi)];
+ int ghost;
+
+#if DEFUNCT
+ if (pp->eaten)
+ (void) free((void *) pp->eaten);
+ pp->eaten = (unsigned int *) calloc((pp->nrows * pp->ncols),
+ sizeof (unsigned int));
+
+#endif
+
+ XClearWindow(display, window);
+
+ for (ghost = 0; ghost < pp->nghosts; ghost++) {
+ do {
+ pp->ghosts[ghost].col = NRAND(pp->ncols);
+ pp->ghosts[ghost].row = NRAND(pp->nrows);
+ if ((pp->ghosts[ghost].row + pp->ghosts[ghost].col) % 2 !=
+ (pp->pacman.row + pp->pacman.col) % 2) {
+ if (pp->ghosts[ghost].col != 0)
+ pp->ghosts[ghost].col--;
+ else
+ pp->ghosts[ghost].col++;
+ }
+ }
+ while ((pp->ghosts[ghost].col == pp->pacman.col) &&
+ (pp->ghosts[ghost].row == pp->pacman.row));
+ pp->ghosts[ghost].dead = 0;
+ pp->ghosts[ghost].lastbox = -1;
+
+ }
+}
+
+static void
+movepac(ModeInfo * mi)
+{
+ typedef struct {
+ int cfactor, rfactor;
+ int cf, rf;
+ int oldcf, oldrf;
+ } being;
+ being *g, p;
+
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ pacmangamestruct *pp = &pacmangames[MI_SCREEN(mi)];
+ int ghost, alldead, dir;
+ XPoint delta;
+
+ if (pp->pacman.nextcol > pp->pacman.col) {
+ p.cfactor = 1;
+#if DEFUNCT
+ if (pp->eaten) {
+ pp->eaten[(pp->pacman.col * pp->nrows) + pp->pacman.row] |=
+ RT | RB;
+ pp->eaten[((pp->pacman.col + 1) * pp->nrows) + pp->pacman.row] |=
+ LT | LB;
+ }
+#endif
+ } else if (pp->pacman.col > pp->pacman.nextcol) {
+ p.cfactor = -1;
+#if DEFUNCT
+ if (pp->eaten) {
+ pp->eaten[(pp->pacman.col * pp->nrows) + pp->pacman.row] |=
+ LT | LB;
+ pp->eaten[((pp->pacman.col - 1) * pp->nrows) + pp->pacman.row] |=
+ RT | RB;
+ }
+#endif
+ } else {
+ p.cfactor = 0;
+ }
+
+ if (pp->pacman.nextrow > pp->pacman.row) {
+ p.rfactor = 1;
+#if DEFUNCT
+ if (pp->eaten) {
+ pp->eaten[(pp->pacman.col * pp->nrows) + pp->pacman.row] |=
+ RB | LB;
+ pp->eaten[(pp->pacman.col * pp->nrows) + (pp->pacman.row + 1)] |=
+ RT | LT;
+ }
+#endif
+ } else if (pp->pacman.row > pp->pacman.nextrow) {
+ p.rfactor = -1;
+#if DEFUNCT
+ if (pp->eaten) {
+ pp->eaten[(pp->pacman.col * pp->nrows) + pp->pacman.row] |=
+ RT | LT;
+ pp->eaten[(pp->pacman.col * pp->nrows) + (pp->pacman.row - 1)] |=
+ RB | LB;
+ }
+#endif
+ } else {
+ p.rfactor = 0;
+ }
+
+ p.oldcf = pp->pacman.col * pp->xs + pp->xb;
+ p.oldrf = pp->pacman.row * pp->ys + pp->yb;
+ g = (being *) malloc(pp->nghosts * sizeof (being));
+
+ for (ghost = 0; ghost < pp->nghosts; ghost++) {
+ if (pp->ghosts[ghost].dead == 0) {
+#if DEFUNCT
+ pp->eaten[(pp->ghosts[ghost].col * pp->nrows) +
+ pp->ghosts[ghost].row] = NONE;
+#endif
+ if (pp->ghosts[ghost].nextcol > pp->ghosts[ghost].col) {
+ g[ghost].cfactor = 1;
+ } else if (pp->ghosts[ghost].col > pp->ghosts[ghost].nextcol) {
+ g[ghost].cfactor = -1;
+ } else {
+ g[ghost].cfactor = 0;
+ }
+ if (pp->ghosts[ghost].nextrow > pp->ghosts[ghost].row) {
+ g[ghost].rfactor = 1;
+ } else if (pp->ghosts[ghost].row > pp->ghosts[ghost].nextrow) {
+ g[ghost].rfactor = -1;
+ } else {
+ g[ghost].rfactor = 0;
+ }
+
+ g[ghost].oldcf = pp->ghosts[ghost].col * pp->xs +
+ pp->xb;
+ g[ghost].oldrf = pp->ghosts[ghost].row * pp->ys +
+ pp->yb;
+ }
+ }
+ for (delta.x = pp->inc, delta.y = pp->inc;
+ delta.x <= pp->xs + pp->inc - 1 &&
+ delta.y <= pp->ys + pp->inc - 1;
+ delta.x += pp->inc, delta.y += pp->inc) {
+ if (delta.x > pp->xs)
+ delta.x = pp->xs;
+ if (delta.y > pp->ys)
+ delta.y = pp->ys;
+ p.cf = pp->pacman.col * pp->xs + delta.x * p.cfactor +
+ pp->xb;
+ p.rf = pp->pacman.row * pp->ys + delta.y * p.rfactor +
+ pp->yb;
+
+ dir = (ABS(p.cfactor) * (2 - p.cfactor) +
+ ABS(p.rfactor) * (1 + p.rfactor)) % 4;
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+#ifdef FLASH
+ XFillRectangle(display, window, gc,
+ p.oldcf, p.oldrf,
+ pp->xs, pp->ys);
+#else
+ ERASE_IMAGE(display, window, gc, p.cf, p.rf,
+ p.oldcf, p.oldrf, pp->xs, pp->ys);
+#endif
+ XSetTSOrigin(display, pp->stippledGC, p.cf, p.rf);
+ XSetForeground(display, pp->stippledGC, MI_PIXEL(mi, YELLOW));
+ XSetStipple(display, pp->stippledGC,
+ pp->pacmanPixmap[dir][pp->pacman.mouthstage]);
+#ifdef FLASH
+ XSetFillStyle(display, pp->stippledGC, FillStippled);
+#else
+ XSetFillStyle(display, pp->stippledGC, FillOpaqueStippled);
+#endif
+ XFillRectangle(display, window, pp->stippledGC,
+ p.cf, p.rf, pp->xs, pp->ys);
+ pp->pacman.mouthstage += pp->pacman.mouthdirection;
+ if ((pp->pacman.mouthstage >= MAXMOUTH) ||
+ (pp->pacman.mouthstage < 0)) {
+ pp->pacman.mouthdirection *= -1;
+ pp->pacman.mouthstage += pp->pacman.mouthdirection * 2;
+ }
+ p.oldcf = p.cf;
+ p.oldrf = p.rf;
+
+ for (ghost = 0; ghost < pp->nghosts; ghost++) {
+ if (!pp->ghosts[ghost].dead) {
+ g[ghost].cf = pp->ghosts[ghost].col * pp->xs +
+ delta.x * g[ghost].cfactor + pp->xb;
+ g[ghost].rf = pp->ghosts[ghost].row * pp->ys +
+ delta.y * g[ghost].rfactor + pp->yb;
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ if (pp->pixelmode) {
+ XFillRectangle(display, window, gc,
+ g[ghost].oldcf, g[ghost].oldrf,
+ pp->xs, pp->ys);
+ XSetForeground(display, gc, MI_PIXEL(mi, BLUE));
+ XFillRectangle(display, window, gc,
+ g[ghost].cf, g[ghost].rf, pp->xs, pp->ys);
+ XFlush(display);
+ } else {
+#ifdef FLASH
+ XFillRectangle(display, window, gc,
+ g[ghost].oldcf, g[ghost].oldrf,
+ pp->xs, pp->ys);
+#else
+ ERASE_IMAGE(display, window, gc, g[ghost].cf, g[ghost].rf,
+ g[ghost].oldcf, g[ghost].oldrf, pp->xs, pp->ys);
+#endif
+ XSetTSOrigin(display, pp->stippledGC, g[ghost].cf, g[ghost].rf);
+ XSetForeground(display, pp->stippledGC, MI_PIXEL(mi, BLUE));
+ XSetStipple(display, pp->stippledGC, pp->ghostPixmap);
+#ifdef FLASH
+ XSetFillStyle(display, pp->stippledGC, FillStippled);
+#else
+ XSetFillStyle(display, pp->stippledGC, FillOpaqueStippled);
+#endif
+ XFillRectangle(display, window, pp->stippledGC,
+ g[ghost].cf, g[ghost].rf, pp->xs, pp->ys);
+ XFlush(display);
+ }
+ g[ghost].oldcf = g[ghost].cf;
+ g[ghost].oldrf = g[ghost].rf;
+ }
+ }
+ XFlush(display);
+ }
+#if 0
+ clearcorners(mi);
+#endif
+ (void) free((void *) g);
+
+ alldead = 1;
+ for (ghost = 0; ghost < pp->nghosts; ghost++) {
+ if (pp->ghosts[ghost].dead == 0) {
+#if 0
+ if ((pp->ghosts[ghost].nextrow >= pp->pacman.nextrow - 1) &&
+ (pp->ghosts[ghost].nextrow <= pp->pacman.nextrow + 1) &&
+ (pp->ghosts[ghost].nextcol >= pp->pacman.nextcol - 1) &&
+ (pp->ghosts[ghost].nextcol <= pp->pacman.nextcol + 1)) {
+ (void) printf("%d %d\n", pp->ghosts[ghost].nextrow,
+ pp->ghosts[ghost].nextcol);
+ }
+#endif
+ if (((pp->ghosts[ghost].nextrow == pp->pacman.nextrow) &&
+ (pp->ghosts[ghost].nextcol == pp->pacman.nextcol)) ||
+ ((pp->ghosts[ghost].nextrow == pp->pacman.row) &&
+ (pp->ghosts[ghost].nextcol == pp->pacman.col) &&
+ (pp->ghosts[ghost].row == pp->pacman.nextrow) &&
+ (pp->ghosts[ghost].col == pp->pacman.nextcol))) {
+ pp->ghosts[ghost].dead = 1;
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ /*XFillRectangle(display, window, gc,
+ pp->ghosts[ghost].col * pp->xs + pp->xb,
+ pp->ghosts[ghost].row * pp->ys + pp->yb,
+ pp->xs, pp->ys); */
+ XFillRectangle(display, window, gc,
+ pp->ghosts[ghost].nextcol * pp->xs + pp->xb,
+ pp->ghosts[ghost].nextrow * pp->ys + pp->yb,
+ pp->xs, pp->ys);
+ } else {
+ pp->ghosts[ghost].row = pp->ghosts[ghost].nextrow;
+ pp->ghosts[ghost].col = pp->ghosts[ghost].nextcol;
+ alldead = 0;
+ }
+ }
+ }
+ pp->pacman.row = pp->pacman.nextrow;
+ pp->pacman.col = pp->pacman.nextcol;
+
+#if DEFUNCT
+ if (alldead && pp->eaten) {
+ for (ghost = 0; ghost < (pp->nrows * pp->ncols); ghost++)
+ if (pp->eaten[ghost] != ALL)
+ break;
+ if (ghost == pp->nrows * pp->ncols)
+ repopulate(mi);
+ }
+#else
+ if (alldead) {
+ repopulate(mi);
+ }
+#endif
+}
+
+void
+init_pacman(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ int size = MI_SIZE(mi);
+ pacmangamestruct *pp;
+ XGCValues gcv;
+ int ghost, dir, mouth;
+ GC fg_gc, bg_gc;
+
+ if (pacmangames == NULL) {
+ if ((pacmangames = (pacmangamestruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (pacmangamestruct))) == NULL)
+ return;
+ icon_width = CELL_WIDTH;
+ icon_height = CELL_HEIGHT;
+ }
+ pp = &pacmangames[MI_SCREEN(mi)];
+ if (pp->stippledGC == None) {
+ gcv.foreground = MI_WIN_BLACK_PIXEL(mi);
+ gcv.background = MI_WIN_BLACK_PIXEL(mi);
+ if ((pp->stippledGC = XCreateGC(display, window,
+ GCForeground | GCBackground, &gcv)) == None)
+ return;
+ }
+ pp->width = MI_WIN_WIDTH(mi);
+ pp->height = MI_WIN_HEIGHT(mi);
+ if (size == 0 ||
+ MINGRIDSIZE * size > pp->width || MINGRIDSIZE * size > pp->height) {
+ if (pp->width > MINGRIDSIZE * icon_width &&
+ pp->height > MINGRIDSIZE * icon_height) {
+ pp->xs = icon_width;
+ pp->ys = icon_height;
+ pp->pixelmode = 0;
+ if (pp->ghostPixmap == None) {
+ pp->ghostPixmap = XCreateBitmapFromData(display, window,
+ (char *) CELL_BITS, CELL_WIDTH, CELL_HEIGHT);
+ }
+ pp->inc = pp->xs / 10 + 1;
+ } else {
+ pp->pixelmode = 1;
+ pp->xs = pp->ys = MAX(MINSIZE, MIN(pp->width, pp->height) / MINGRIDSIZE);
+ pp->inc = pp->xs / 10 + 1;
+ }
+ } else {
+ pp->pixelmode = 1;
+ if (size < -MINSIZE)
+ pp->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(pp->width, pp->height) /
+ MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE)
+ pp->ys = MINSIZE;
+ else
+ pp->ys = MIN(size, MAX(MINSIZE, MIN(pp->width, pp->height) /
+ MINGRIDSIZE));
+ pp->xs = pp->ys;
+ pp->inc = pp->xs / 10 + 1;
+ }
+ pp->ncols = MAX(pp->width / pp->xs, 2);
+ pp->nrows = MAX(pp->height / pp->ys, 2);
+ pp->xb = pp->width - pp->ncols * pp->xs;
+ pp->yb = pp->height - pp->nrows * pp->ys;
+
+ if (pp->pacmanPixmap[0][0] != None)
+ for (dir = 0; dir < 4; dir++)
+ for (mouth = 0; mouth < MAXMOUTH; mouth++)
+ XFreePixmap(display, pp->pacmanPixmap[dir][mouth]);
+
+
+ for (dir = 0; dir < 4; dir++)
+ for (mouth = 0; mouth < MAXMOUTH; mouth++) {
+ pp->pacmanPixmap[dir][mouth] = XCreatePixmap(display, MI_WINDOW(mi),
+ pp->xs, pp->ys, 1);
+ gcv.foreground = 1;
+ fg_gc = XCreateGC(display, pp->pacmanPixmap[dir][mouth],
+ GCForeground, &gcv);
+ gcv.foreground = 0;
+ bg_gc = XCreateGC(display, pp->pacmanPixmap[dir][mouth],
+ GCForeground, &gcv);
+ XFillRectangle(display, pp->pacmanPixmap[dir][mouth], bg_gc,
+ 0, 0, pp->xs, pp->ys);
+ if (pp->xs == 1 && pp->ys == 1)
+ XFillRectangle(display, pp->pacmanPixmap[dir][mouth], fg_gc,
+ 0, 0, pp->xs, pp->ys);
+ else
+ XFillArc(display, pp->pacmanPixmap[dir][mouth], fg_gc,
+ 0, 0, pp->xs, pp->ys,
+ ((90 - dir * 90) + mouth * 5) * 64,
+ (360 + (-2 * mouth * 5)) * 64);
+ XFreeGC(display, fg_gc);
+ XFreeGC(display, bg_gc);
+ }
+ pp->pacman.lastbox = -1;
+ pp->pacman.mouthdirection = 1;
+
+ pp->nghosts = MI_BATCHCOUNT(mi);
+ if (pp->nghosts < -MINGHOSTS) {
+ /* if pp->nghosts is random ... the size can change */
+ if (pp->ghosts != NULL) {
+ (void) free((void *) pp->ghosts);
+ pp->ghosts = NULL;
+ }
+ pp->nghosts = NRAND(-pp->nghosts - MINGHOSTS + 1) + MINGHOSTS;
+ } else if (pp->nghosts < MINGHOSTS)
+ pp->nghosts = MINGHOSTS;
+
+ if (!pp->ghosts)
+ pp->ghosts = (beingstruct *) calloc(pp->nghosts, sizeof (beingstruct));
+ for (ghost = 0; ghost < pp->nghosts; ghost++)
+ pp->ghosts[ghost].nextbox = NOWHERE;
+
+ pp->pacman.row = NRAND(pp->nrows);
+ pp->pacman.col = NRAND(pp->ncols);
+
+ XClearWindow(display, window);
+
+ pp->pacman.mouthstage = MAXMOUTH - 1;
+ for (ghost = 0; ghost < pp->nghosts; ghost++) {
+ do {
+ pp->ghosts[ghost].col = NRAND(pp->ncols);
+ pp->ghosts[ghost].row = NRAND(pp->nrows);
+ }
+ while ((pp->ghosts[ghost].col == pp->pacman.col) &&
+ (pp->ghosts[ghost].row == pp->pacman.row));
+ pp->ghosts[ghost].dead = 0;
+ pp->ghosts[ghost].lastbox = -1;
+
+ }
+#if DEFUNCT
+ if (pp->eaten)
+ (void) free((void *) pp->eaten);
+ pp->eaten = (unsigned int *) malloc((pp->nrows * pp->ncols) *
+ sizeof (unsigned int));
+
+ if (pp->eaten)
+ for (ghost = 0; ghost < (pp->nrows * pp->ncols); ghost++)
+ pp->eaten[ghost] = NONE;
+#endif
+}
+
+void
+draw_pacman(ModeInfo * mi)
+{
+ pacmangamestruct *pp = &pacmangames[MI_SCREEN(mi)];
+ int g;
+
+ do {
+ if (NRAND(3) == 2)
+ pp->pacman.nextbox = NRAND(5);
+
+ switch (pp->pacman.nextbox) {
+ case 0:
+ if ((pp->pacman.row == 0) || (pp->pacman.lastbox == 2))
+ pp->pacman.nextbox = NOWHERE;
+ else {
+ pp->pacman.nextrow = pp->pacman.row - 1;
+ pp->pacman.nextcol = pp->pacman.col;
+ }
+ break;
+
+ case 1:
+ if ((pp->pacman.col == pp->ncols - 1) ||
+ (pp->pacman.lastbox == 3))
+ pp->pacman.nextbox = NOWHERE;
+ else {
+ pp->pacman.nextrow = pp->pacman.row;
+ pp->pacman.nextcol = pp->pacman.col + 1;
+ }
+ break;
+
+ case 2:
+ if ((pp->pacman.row == pp->nrows - 1) ||
+ (pp->pacman.lastbox == 0))
+ pp->pacman.nextbox = NOWHERE;
+ else {
+ pp->pacman.nextrow = pp->pacman.row + 1;
+ pp->pacman.nextcol = pp->pacman.col;
+ }
+ break;
+
+ case 3:
+ if ((pp->pacman.col == 0) || (pp->pacman.lastbox == 1))
+ pp->pacman.nextbox = NOWHERE;
+ else {
+ pp->pacman.nextrow = pp->pacman.row;
+ pp->pacman.nextcol = pp->pacman.col - 1;
+ }
+ break;
+
+ default:
+ pp->pacman.nextbox = NOWHERE;
+ break;
+ }
+ }
+ while (pp->pacman.nextbox == NOWHERE);
+
+
+ for (g = 0; g < pp->nghosts; g++) {
+ if (pp->ghosts[g].dead == 0) {
+ do {
+ if (NRAND(3) == 2)
+ pp->ghosts[g].nextbox = NRAND(5);
+
+ switch (pp->ghosts[g].nextbox) {
+ case 0:
+ if ((pp->ghosts[g].row == 0) || (pp->ghosts[g].lastbox == 2))
+ pp->ghosts[g].nextbox = NOWHERE;
+ else {
+ pp->ghosts[g].nextrow = pp->ghosts[g].row - 1;
+ pp->ghosts[g].nextcol = pp->ghosts[g].col;
+ }
+ break;
+
+ case 1:
+ if ((pp->ghosts[g].col == pp->ncols - 1) ||
+ (pp->ghosts[g].lastbox == 3))
+ pp->ghosts[g].nextbox = NOWHERE;
+ else {
+ pp->ghosts[g].nextrow = pp->ghosts[g].row;
+ pp->ghosts[g].nextcol = pp->ghosts[g].col + 1;
+ }
+ break;
+
+ case 2:
+ if ((pp->ghosts[g].row == pp->nrows - 1) ||
+ (pp->ghosts[g].lastbox == 0))
+ pp->ghosts[g].nextbox = NOWHERE;
+ else {
+ pp->ghosts[g].nextrow = pp->ghosts[g].row + 1;
+ pp->ghosts[g].nextcol = pp->ghosts[g].col;
+ }
+ break;
+
+ case 3:
+ if ((pp->ghosts[g].col == 0) || (pp->ghosts[g].lastbox == 1))
+ pp->ghosts[g].nextbox = NOWHERE;
+ else {
+ pp->ghosts[g].nextrow = pp->ghosts[g].row;
+ pp->ghosts[g].nextcol = pp->ghosts[g].col - 1;
+ }
+ break;
+
+ default:
+ pp->ghosts[g].nextbox = NOWHERE;
+ break;
+ }
+ }
+ while (pp->ghosts[g].nextbox == NOWHERE);
+ pp->ghosts[g].lastbox = pp->ghosts[g].nextbox;
+ }
+ }
+ if (pp->pacman.lastbox != pp->pacman.nextbox)
+ pp->pacman.mouthstage = 0;
+ pp->pacman.lastbox = pp->pacman.nextbox;
+ movepac(mi);
+
+}
+
+void
+release_pacman(ModeInfo * mi)
+{
+ if (pacmangames != NULL) {
+ int screen, dir, mouth;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ pacmangamestruct *pp = &pacmangames[screen];
+ Display *display = MI_DISPLAY(mi);
+
+ if (pp->ghosts != NULL)
+ (void) free((void *) pp->ghosts);
+#ifdef DEFUNCT
+ if (pp->eaten != NULL)
+ (void) free((void *) pp->eaten);
+#endif
+ if (pp->stippledGC != None)
+ XFreeGC(display, pp->stippledGC);
+ if (pp->ghostPixmap != None)
+ XFreePixmap(display, pp->ghostPixmap);
+ if (pp->pacmanPixmap[0][0] != None)
+ for (dir = 0; dir < 4; dir++)
+ for (mouth = 0; mouth < MAXMOUTH; mouth++)
+ XFreePixmap(display, pp->pacmanPixmap[dir][mouth]);
+ }
+ (void) free((void *) pacmangames);
+ pacmangames = NULL;
+ }
+}
+
+void
+refresh_pacman(ModeInfo * mi)
+{
+ /* Redraw dots */
+}
--- /dev/null
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)passwd.c 4.02 97/04/01 xlockmore";
+
+#endif
+
+/*-
+ * passwd.c - passwd stuff.
+ *
+ * Copyright (c) 1988-91 by Patrick J. Naughton.
+ *
+ * Revision History:
+ *
+ * Changes maintained by David Bagley <bagleyd@bigfoot.com>
+ * 25-May-96: When xlock is compiled with shadow passwords it will still
+ * work on non shadowed systems. Marek Michalkiewicz
+ * <marekm@i17linuxb.ists.pwr.wroc.pl>
+ * 25-Feb-96: Lewis Muhlenkamp
+ * Added in ability for any of the root accounts to unlock
+ * screen. Message now gets sent to syslog if root does the
+ * unlocking.
+ * 23-Dec-95: Ron Hitchens <ron@idiom.com> reorganized.
+ * 10-Dec-95: More context handling stuff for DCE thanks to
+ * Terje Marthinussen <terjem@cc.uit.no>.
+ * 01-Sep-95: DCE code added thanks to Heath A. Kehoe
+ * <hakehoe@icaen.uiowa.edu>.
+ * 24-Jun-95: Extracted from xlock.c, encrypted passwords are now fetched
+ * on start-up to ensure correct operation (except Ultrix).
+ */
+
+#include "xlock.h"
+
+#ifdef VMS
+#include <str$routines.h>
+#include <starlet.h>
+#define ROOT "SYSTEM"
+#else
+#define ROOT "root"
+#endif
+
+extern char *ProgramName;
+extern Bool allowroot;
+extern Bool inroot;
+extern Bool inwindow;
+extern Bool grabmouse;
+extern Bool nolock;
+
+#if !defined( VMS ) && !defined( SUNOS_ADJUNCT_PASSWD )
+#include <pwd.h>
+#endif
+
+#ifdef __bsdi__
+#include <sys/param.h>
+#if _BSDI_VERSION >= 199608
+#define BSD_AUTH
+#endif
+#endif
+
+#ifdef BSD_AUTH
+#include <login_cap.h>
+static login_cap_t *lc = NULL;
+static login_cap_t *rlc = NULL;
+
+#endif
+
+#if ( HAVE_SYSLOG_H && defined( USE_SYSLOG ))
+#include <syslog.h>
+#endif
+
+#if ( HAVE_FCNTL_H && defined( USE_MULTIPLE_ROOT ))
+#include <fcntl.h>
+#include <errno.h>
+extern int errno;
+
+void get_multiple(struct passwd *);
+void set_multiple();
+
+#define BUFMAX 1024 /* Maximum size of pipe buffer */
+
+/* Linked list to keep track of everyone that's authorized * to unlock the
+ screen. */
+struct pwln {
+ char *pw_name;
+#ifdef BSD_AUTH
+ login_cap_t *pw_lc;
+#else
+ char *pw_passwd;
+#endif
+ struct pwln *next;
+};
+typedef struct pwln pwlnode;
+typedef struct pwln *pwlptr;
+
+pwlptr pwll, pwllh = (pwlptr) NULL;
+extern pwlptr pwllh;
+
+/* Function that creates and initializes a new node that * will be added to
+ the linked list. */
+pwlptr
+new_pwlnode(void)
+{
+ pwlptr pwl;
+
+ if ((pwl = (pwlptr) malloc(sizeof (pwlnode))) == 0)
+ return ((pwlptr) ENOMEM);
+
+ pwl->pw_name = (char *) NULL;
+#ifdef BSD_AUTH
+ pwl->pw_lc = NULL;
+#else
+ pwl->pw_passwd = (char *) NULL;
+#endif
+ pwl->next = (pwlptr) NULL;
+
+ return (pwl);
+}
+#endif
+
+#ifdef ultrix
+#include <auth.h>
+
+#if defined( HAVE_SETEUID ) || defined(HAVE_SETREUID )
+gid_t rgid, egid;
+
+#endif
+#endif
+
+#ifdef OSF1_ENH_SEC
+#include <sys/security.h>
+#include <prot.h>
+#endif
+
+#if defined( __linux__ ) && defined( __ELF__ ) && !defined( HAVE_SHADOW )
+/* Linux may or may not have shadow passwords, so it is best to make the same
+ binary work with both shadow and non-shadow passwords. It's easy with the
+ ELF libc since it has getspnam() and there is no need for any additional
+ libraries like libshadow.a. This is a quick hack; it probably should be
+ done properly in the Imakefile. */
+#define HAVE_SHADOW
+#endif
+
+#if defined( __linux__ ) && defined( HAVE_SHADOW ) && defined( HAVE_PW_ENCRYPT )
+/* Deprecated - long passwords have known weaknesses. Also, pw_encrypt is
+ non-standard (requires libshadow.a) while everything else you need to
+ support shadow passwords is in the standard (ELF) libc. */
+#define crypt pw_encrypt
+#endif
+
+#ifdef HAVE_SHADOW
+#ifndef __hpux
+#include <shadow.h>
+#endif
+#endif
+
+#ifdef SUNOS_ADJUNCT_PASSWD
+#include <sys/label.h>
+#include <sys/audit.h>
+#include <pwdadj.h>
+#define passwd passwd_adjunct
+#define pw_passwd pwa_passwd
+#define getpwnam(_s) getpwanam(_s)
+#define pw_name pwa_name
+#define getpwuid(_s) (((_s)==0)?getpwanam(ROOT):getpwanam(cuserid(NULL)))
+#endif /* SUNOS_ADJUNCT_PASSWD */
+
+/* System V Release 4 redefinitions of BSD functions and structures */
+#if !defined( SHADOW ) && (defined( SYSV ) || defined( SVR4 ))
+
+#ifdef LESS_THAN_AIX3_2
+struct passwd {
+ char *pw_name;
+ char *pw_passwd;
+ uid_t pw_uid;
+ gid_t pw_gid;
+ char *pw_gecos;
+ char *pw_dir;
+ char *pw_shell;
+};
+
+#endif /* LESS_THAN_AIX3_2 */
+
+#ifdef HPUX_SECURE_PASSWD
+#include <hpsecurity.h>
+#include <prot.h>
+#define crypt bigcrypt
+
+/* #define seteuid(_eu) setresuid(-1, _eu, -1) */
+#define passwd s_passwd
+#define getpwnam(_s) getspwnam(_s)
+#define getpwuid(_u) getspwuid(_u)
+#endif /* HPUX_SECURE_PASSWD */
+
+#endif /* defined( SYSV ) || defined( SVR4 ) */
+
+#ifdef VMS
+#include <uaidef.h>
+#define VMS_PASSLENGTH 9
+static short uai_salt, root_salt;
+static char hash_password[VMS_PASSLENGTH], hash_system[VMS_PASSLENGTH];
+static char root_password[VMS_PASSLENGTH], root_system[VMS_PASSLENGTH];
+static char uai_encrypt, root_encrypt;
+
+struct ascid {
+ short len;
+ char dtype;
+ char c_class;
+ char *addr;
+};
+
+static struct ascid username, rootuser;
+
+struct itmlst {
+ short buflen;
+ short code;
+ long addr;
+ long retadr;
+};
+
+#endif /* VMS */
+
+#ifdef HP_PASSWDETC /* HAVE_SYS_WAIT_H */
+#include <sys/wait.h>
+#endif /* HP_PASSWDETC */
+
+#ifdef AFS
+#include <afs/kauth.h>
+#include <afs/kautils.h>
+#endif /* AFS */
+
+char user[PASSLENGTH];
+
+#ifndef ultrix
+static char userpass[PASSLENGTH];
+static char rootpass[PASSLENGTH];
+
+#ifdef VMS
+static char root[] = ROOT;
+
+#endif
+#endif /* !ultrix */
+
+#ifdef DCE_PASSWD
+static int usernet, rootnet;
+static int check_dce_net_passwd(char *, char *);
+
+#endif
+
+#if defined( HAVE_KRB4 ) || defined( HAVE_KRB5 )
+#ifdef HAVE_KRB4
+#include <krb.h>
+#else /* HAVE_KRB5 */
+#include <krb5.h>
+#endif
+#include <sys/param.h>
+static int krb_check_password(struct passwd *, char *);
+
+#endif
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern char *crypt(char *, char *);
+
+/* extern char *crypt(const char *, const char *); */
+#endif
+
+#if (defined( USE_XLOCKRC ) || (!defined( OSF1_ENH_SEC ) && !defined( HP_PASSWDETC ) && !defined( VMS )))
+static struct passwd *
+my_passwd_entry(void)
+{
+ int uid;
+ struct passwd *pw;
+
+#ifdef HAVE_SHADOW
+ struct spwd *spw;
+
+#endif
+
+ uid = getuid();
+#ifndef SUNOS_ADJUNCT_PASSWD
+ {
+ char *user = NULL;
+
+ pw = 0;
+ user = getenv("LOGNAME");
+ if (!user)
+ user = getenv("USER");
+ if (user) {
+ pw = getpwnam(user);
+ if (pw && (pw->pw_uid != uid))
+ pw = 0;
+ }
+ }
+ if (!pw)
+#endif
+ pw = getpwuid(uid);
+#ifdef HAVE_SHADOW
+ if ((spw = getspnam(pw->pw_name)) != NULL) {
+ char *tmp; /* swap */
+
+ tmp = pw->pw_passwd;
+ pw->pw_passwd = spw->sp_pwdp;
+ spw->sp_pwdp = tmp;
+ }
+ endspent();
+#endif
+ return (pw);
+}
+#endif
+
+static void
+getUserName(void)
+{
+
+#ifdef VMS
+ (void) strcpy(user, cuserid(NULL));
+#else /* !VMS */
+#ifdef HP_PASSWDETC
+
+/*-
+ * The PasswdEtc libraries have replacement passwd functions that make
+ * queries to DomainOS registries. Unfortunately, these functions do
+ * wierd things to the process (at minimum, signal handlers get changed,
+ * there are probably other things as well) that cause xlock to become
+ * unstable.
+ *
+ * As a (really, really sick) workaround, we'll fork() and do the getpw*()
+ * calls in the child, and pass the information back through a pipe.
+ */
+ struct passwd *pw;
+ int pipefd[2], n, total = 0, stat_loc;
+ pid_t pid;
+ char *buf;
+
+ pipe(pipefd);
+
+ if ((pid = fork()) == 0) {
+ close(pipefd[0]);
+ pw = getpwuid(getuid());
+ write(pipefd[1], pw->pw_name, strlen(pw->pw_name));
+ close(pipefd[1]);
+ _exit(0);
+ }
+ if (pid < 0) {
+ buf = (char *) malloc(strlen(ProgramName) + 80);
+ (void) sprintf(buf,
+ "%s: could not get user password (fork failed)\n", ProgramName);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+ close(pipefd[1]);
+
+ while ((n = read(pipefd[0], &(user[total]), 50)) > 0)
+ total += n;
+
+ wait(&stat_loc);
+
+ if (n < 0) {
+ buf = (char *) malloc(strlen(ProgramName) + 80);
+ (void) sprintf(buf,
+ "%s: could not get user name (read failed)\n", ProgramName);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+ user[total] = 0;
+
+ if (total < 1) {
+ buf = (char *) malloc(strlen(ProgramName) + 80);
+ (void) sprintf(buf,
+ "%s: could not get user name (lookups failed)\n", ProgramName);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+#else /* !HP_PASSWDETC */
+#ifdef OSF1_ENH_SEC
+ struct pr_passwd *pw;
+ char *buf;
+
+ /*if ((pw = getprpwuid(getuid())) == NULL) */
+ if ((pw = getprpwuid(starting_ruid())) == NULL) {
+ buf = (char *) malloc(strlen(ProgramName) + 80);
+ (void) sprintf(buf,
+ "%s: could not get user name.\n", ProgramName);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+ (void) strcpy(user, pw->ufld.fd_name);
+
+#else /* !OSF1_ENH_SEC */
+
+ struct passwd *pw;
+ char *buf;
+
+ if (!(pw = my_passwd_entry())) {
+ /*if ((pw = (struct passwd *) getpwuid(getuid())) == NULL) */
+ buf = (char *) malloc(strlen(ProgramName) + 80);
+ (void) sprintf(buf,
+ "%s: could not get user name.\n", ProgramName);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+ (void) strcpy(user, pw->pw_name);
+
+#if ( HAVE_FCNTL_H && defined( USE_MULTIPLE_ROOT ))
+ get_multiple(pw);
+#endif
+
+#endif /* !OSF1_ENH_SEC */
+#endif /* !HP_PASSWDETC */
+#endif /* !VMS */
+}
+
+#if defined( HAVE_SHADOW ) && !defined( USE_XLOCKRC )
+static int
+passwd_invalid(char *passwd)
+{
+ int i = strlen(passwd);
+
+ return (i == 1 || i == 2);
+}
+#endif
+
+#if !defined( ultrix ) && !defined( DCE_PASSWD ) && !defined( BSD_AUTH )
+#ifndef USE_XLOCKRC
+/* This routine is not needed if HAVE_FCNTL_H and USE_MULTIPLE_ROOT */
+static void
+getCryptedUserPasswd(void)
+{
+
+#ifdef VMS
+ struct itmlst il[4];
+
+ il[0].buflen = 2;
+ il[0].code = UAI$_SALT;
+ il[0].addr = (long) &uai_salt;
+ il[0].retadr = 0;
+ il[1].buflen = 8;
+ il[1].code = UAI$_PWD;
+ il[1].addr = (long) &hash_password;
+ il[1].retadr = 0;
+ il[2].buflen = 1;
+ il[2].code = UAI$_ENCRYPT;
+ il[2].addr = (long) &uai_encrypt;
+ il[2].retadr = 0;
+ il[3].buflen = 0;
+ il[3].code = 0;
+ il[3].addr = 0;
+ il[3].retadr = 0;
+
+ username.len = strlen(user);
+ username.dtype = 0;
+ username.c_class = 0;
+ username.addr = user;
+
+ sys$getuai(0, 0, &username, &il, 0, 0, 0);
+#else /* !VMS */
+#ifdef HP_PASSWDETC
+
+/*-
+ * still very sick, see above
+ */
+ struct passwd *pw;
+ int pipefd[2], n, total = 0, stat_loc;
+ pid_t pid;
+ char *buf;
+
+ pipe(pipefd);
+
+ if ((pid = fork()) == 0) {
+ close(pipefd[0]);
+ pw = getpwuid(getuid());
+ write(pipefd[1], pw->pw_passwd, strlen(pw->pw_passwd));
+ close(pipefd[1]);
+ _exit(0);
+ }
+ if (pid < 0) {
+ buf = (char *) malloc(strlen(ProgramName) + 80);
+ (void) sprintf(buf,
+ "%s: could not get user password (fork failed)\n", ProgramName);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+ close(pipefd[1]);
+
+ while ((n = read(pipefd[0], &(userpass[total]), 50)) > 0)
+ total += n;
+
+ wait(&stat_loc);
+
+ if (n < 0) {
+ buf = (char *) malloc(strlen(ProgramName) + 80);
+ (void) sprintf(buf,
+ "%s: could not get user password (read failed)\n", ProgramName);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+ user[total] = 0;
+
+ if (total < 1) {
+ buf = (char *) malloc(strlen(ProgramName) + 80);
+ (void) sprintf(buf,
+ "%s: could not get user password (lookups failed)\n", ProgramName);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+#else /* !HP_PASSWDETC */
+#ifdef OSF1_ENH_SEC
+ struct pr_passwd *pw;
+ char *buf;
+
+ /*if ((pw = getprpwuid(getuid())) == NULL) */
+ if ((pw = getprpwuid(starting_ruid())) == NULL) {
+ buf = (char *) malloc(strlen(ProgramName) + 80);
+ (void) sprintf(buf,
+ "%s: could not get encrypted user password.\n", ProgramName);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+ (void) strcpy(userpass, pw->ufld.fd_encrypt);
+
+#else /* !OSF1_ENH_SEC */
+
+ struct passwd *pw;
+ char *buf;
+
+ if (!(pw = my_passwd_entry())) {
+ buf = (char *) malloc(strlen(ProgramName) + 80);
+ (void) sprintf(buf,
+ "%s: could not get encrypted user password.\n", ProgramName);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+ /*if ((pw = (struct passwd *) getpwuid(getuid())) == NULL) */
+ /* Check if there is any chance of unlocking the display later... */
+ /* Program probably needs to be setuid to root. */
+ /* If this is not possible, compile with -DUSE_XLOCKRC */
+#ifdef HAVE_SHADOW
+#ifndef AFS
+ if (passwd_invalid(pw->pw_passwd)) {
+ buf = (char *) malloc(strlen(ProgramName) + 80);
+ (void) sprintf(buf,
+ "%s: it looks like you have shadow passwording.\nContact your administrator.\n",
+ ProgramName);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+#endif /* AFS */
+#endif /* HAVE_SHADOW */
+ (void) strcpy(userpass, pw->pw_passwd);
+
+#endif /* !OSF1_ENH_SEC */
+#endif /* !HP_PASSWDETC */
+#endif /* !VMS */
+}
+
+#endif /* !USE_XLOCKRC */
+
+static void
+getCryptedRootPasswd(void)
+{
+
+#ifdef VMS
+ struct itmlst il[4];
+
+ il[0].buflen = 2;
+ il[0].code = UAI$_SALT;
+ il[0].addr = (long) &root_salt;
+ il[0].retadr = 0;
+ il[1].buflen = 8;
+ il[1].code = UAI$_PWD;
+ il[1].addr = (long) &root_password;
+ il[1].retadr = 0;
+ il[2].buflen = 1;
+ il[2].code = UAI$_ENCRYPT;
+ il[2].addr = (long) &root_encrypt;
+ il[2].retadr = 0;
+ il[3].buflen = 0;
+ il[3].code = 0;
+ il[3].addr = 0;
+ il[3].retadr = 0;
+
+ rootuser.len = strlen(root);
+ rootuser.dtype = 0;
+ rootuser.c_class = 0;
+ rootuser.addr = root;
+
+ sys$getuai(0, 0, &rootuser, &il, 0, 0, 0);
+#else /* !VMS */
+#ifdef HP_PASSWDETC
+
+/*-
+ * Still really, really sick. See above.
+ */
+ struct passwd *pw;
+ int pipefd[2], n, total = 0, stat_loc;
+ pid_t pid;
+ char *buf;
+
+ pipe(pipefd);
+
+ if ((pid = fork()) == 0) {
+ close(pipefd[0]);
+ pw = getpwnam(ROOT);
+ write(pipefd[1], pw->pw_passwd, strlen(pw->pw_passwd));
+ close(pipefd[1]);
+ _exit(0);
+ }
+ if (pid < 0) {
+ buf = (char *) malloc(strlen(ProgramName) + 80);
+ (void) sprintf(buf,
+ "%s: could not get root password (fork failed)\n", ProgramName);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+ close(pipefd[1]);
+
+ while ((n = read(pipefd[0], &(rootpass[total]), 50)) > 0)
+ total += n;
+
+ wait(&stat_loc);
+
+ if (n < 0) {
+ buf = (char *) malloc(strlen(ProgramName) + 80);
+ (void) sprintf(buf,
+ "%s: could not get root password (read failed)\n", ProgramName);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+ rootpass[total] = 0;
+
+ if (total < 1) {
+ buf = (char *) malloc(strlen(ProgramName) + 80);
+ (void) sprintf(buf,
+ "%s: could not get root password (lookups failed)\n", ProgramName);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+#else /* !HP_PASSWDETC */
+#ifdef OSF1_ENH_SEC
+ struct pr_passwd *pw;
+ char *buf;
+
+ if ((pw = getprpwnam(ROOT)) == NULL) {
+ buf = (char *) malloc(strlen(ProgramName) + 80);
+ (void) sprintf(buf,
+ "%s: could not get encrypted root password.\n", ProgramName);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+ (void) strcpy(rootpass, pw->ufld.fd_encrypt);
+
+#else /* !OSF1_ENH_SEC */
+ struct passwd *pw;
+ char *buf;
+
+#ifdef HAVE_SHADOW
+ struct spwd *spw;
+
+#endif
+
+ if (!(pw = getpwnam(ROOT)))
+ if (!(pw = getpwuid(0))) {
+ /*if ((pw = (struct passwd *) getpwuid(0)) == NULL) */
+ buf = (char *) malloc(strlen(ProgramName) + 80);
+ (void) sprintf(buf,
+ "%s: could not get encrypted root password.\n", ProgramName);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+#ifdef HAVE_SHADOW
+ if ((spw = getspnam(pw->pw_name)) != NULL) {
+ char *tmp; /* swap */
+
+ tmp = pw->pw_passwd;
+ pw->pw_passwd = spw->sp_pwdp;
+ spw->sp_pwdp = tmp;
+ }
+ endspent();
+#endif
+ (void) strcpy(rootpass, pw->pw_passwd);
+
+#if ( HAVE_FCNTL_H && defined( USE_MULTIPLE_ROOT ))
+ set_multiple();
+#endif /* HAVE_FCNTL_H && MULTIPLE_ROOT */
+
+#endif /* !OSF1_ENH_SEC */
+#endif /* !HP_PASSWDETC */
+#endif /* !VMS */
+}
+
+#endif /* !ultrix && !DCE_PASSWD && !BSD_AUTH */
+
+
+/*-
+ * we don't allow for root to have no password, but we handle the case
+ * where the user has no password correctly; they have to hit return
+ * only
+ */
+int
+checkPasswd(char *buffer)
+{
+ int done;
+
+#ifdef VMS
+ struct ascid password;
+
+ password.len = strlen(buffer);
+ password.dtype = 0;
+ password.c_class = 0;
+ password.addr = buffer;
+
+ str$upcase(&password, &password);
+
+ sys$hash_password(&password, uai_encrypt, uai_salt,
+ &username, &hash_system);
+
+ hash_password[VMS_PASSLENGTH - 1] = 0;
+ hash_system[VMS_PASSLENGTH - 1] = 0;
+
+ done = !strcmp(hash_password, hash_system);
+ if (!done && allowroot) {
+ sys$hash_password(&password, root_encrypt, root_salt,
+ &rootuser, &root_system);
+ root_password[VMS_PASSLENGTH - 1] = 0;
+ root_system[VMS_PASSLENGTH - 1] = 0;
+ done = !strcmp(root_password, root_system);
+ }
+#else /* !VMS */
+
+#ifdef DCE_PASSWD
+ if (usernet)
+ done = check_dce_net_passwd(user, buffer);
+ else
+ done = !strcmp(userpass, crypt(buffer, userpass));
+
+ if (done)
+ return 1;
+ if (!allowroot)
+ return 0;
+
+ if (rootnet)
+ done = check_dce_net_passwd(ROOT, buffer);
+ else
+ done = !strcmp(rootpass, crypt(buffer, rootpass));
+#else /* !DCE_PASSWD */
+
+#ifdef ultrix
+
+#ifdef HAVE_SETEUID
+ (void) setegid(egid);
+#else
+#ifdef HAVE_SETREUID
+ (void) setregid(rgid, egid);
+#endif
+#endif
+ done = ((authenticate_user((struct passwd *) getpwnam(user),
+ buffer, NULL) >= 0) || (allowroot &&
+ (authenticate_user((struct passwd *) getpwnam(ROOT),
+ buffer, NULL) >= 0)));
+#ifdef HAVE_SETEUID
+ (void) setegid(rgid);
+#else
+#ifdef HAVE_SETREUID
+ (void) setregid(egid, rgid);
+#endif
+#endif
+
+#else /* !ultrix */
+
+#ifdef BSD_AUTH
+ char *pass;
+ char *style;
+ char *name;
+
+ done = 0;
+#if ( HAVE_FCNTL_H && defined( USE_MULTIPLE_ROOT ))
+ /* Scan through the linked list until you match a password. Print
+ * message to log if password match doesn't equal the user.
+ *
+ * This should be changed to allow the user name to be typed in also
+ * to make this more secure.
+ */
+ for (pwll = pwllh; done == 0 && pwll->next; pwll = pwll->next) {
+ name = pwll->pw_name;
+ lc = pwll->pw_lc;
+#else
+ name = user;
+#endif
+ if ((pass = strchr(buffer, ':')) != NULL) {
+ *pass++ = '\0';
+ style = login_getstyle(lc, buffer, "auth-xlock");
+ if (auth_response(name, lc->lc_class, style,
+ "response", NULL, "", pass) > 0)
+ done = 1;
+ else if (rlc != NULL) {
+ style = login_getstyle(rlc, buffer, "auth-xlock");
+ if (auth_response(ROOT, rlc->lc_class, style,
+ "response", NULL, "", pass) > 0)
+ done = 1;
+ }
+ pass[-1] = ':';
+ }
+ if (done == 0) {
+ style = login_getstyle(lc, NULL, "auth-xlock");
+ if (auth_response(name, lc->lc_class, style,
+ "response", NULL, "", buffer) > 0)
+ done = 1;
+ else if (rlc != NULL) {
+ style = login_getstyle(rlc, NULL, "auth-xlock");
+ if (auth_response(ROOT, rlc->lc_class, style,
+ "response", NULL, "", buffer) > 0)
+ done = 1;
+ }
+ }
+#if ( HAVE_FCNTL_H && defined( USE_MULTIPLE_ROOT ))
+}
+#endif
+
+#else /* !BSD_AUTH */
+
+#ifdef AFS
+ char *reason;
+
+ /* check afs passwd first, then local, then root */
+ done = !ka_UserAuthenticate(user, "", 0, buffer, 0, &reason);
+ if (!done)
+#endif /* !AFS */
+#if defined(HAVE_KRB4) || defined(HAVE_KRB5)
+ if (!strcmp(userpass, "*"))
+ done = (krb_check_password((struct passwd *) getpwuid(getuid()), buffer) ||
+ (allowroot && !strcmp((char *) crypt(buffer, rootpass), rootpass)));
+ else
+#endif /* !HAVE_KRB4 && !HAVE_KRB5 */
+#if ( HAVE_FCNTL_H && defined( USE_MULTIPLE_ROOT ))
+ /* Scan through the linked list until you match a password. Print
+ * message to log if password match doesn't equal the user.
+ *
+ * This should be changed to allow the user name to be typed in also
+ * to make this more secure.
+ */
+ done = 0;
+ for (pwll = pwllh; pwll->next; pwll = pwll->next)
+ if (!strcmp((char *) crypt(buffer, pwll->pw_passwd), pwll->pw_passwd)) {
+#if ( HAVE_SYSLOG_H && defined( USE_SYSLOG ))
+ if (strcmp(user, pwll->pw_name) != 0)
+ syslog(SYSLOG_NOTICE, "%s: %s unlocked screen",
+ ProgramName, pwll->pw_name);
+#endif
+ done = 1;
+ break;
+ }
+#else
+ done = (!strcmp((char *) crypt(buffer, userpass), userpass));
+ if (!done) {
+ done = (allowroot &&
+ !strcmp((char *) crypt(buffer, rootpass), rootpass));
+#if ( HAVE_SYSLOG_H && defined( USE_SYSLOG ))
+ if (done)
+ syslog(SYSLOG_NOTICE, "%s: %s unlocked screen", ProgramName, ROOT);
+#endif
+ }
+#endif
+ /* userpass is used */
+ if (!*userpass && *buffer)
+ /*
+ * the user has no password, but something was typed anyway.
+ * sounds fishy: don't let him in...
+ */
+ done = False;
+
+#endif /* !BSD_AUTH */
+#endif /* !ultrix */
+#endif /* !DCE_PASSWD */
+#endif /* !VMS */
+
+ return done;
+}
+
+/*-
+ * Functions for DCE authentication
+ *
+ * Revision History:
+ * 21-Aug-95: Added fallback to static password file [HAK]
+ * 06-Jul-95: Mods by Heath A. Kehoe <hakehoe@icaen.uiowa.edu> for
+ * inclusion into xlockmore
+ * May-95: Created by Phil O'Connell <philo@icaen.uiowa.edu>
+ */
+
+#ifdef DCE_PASSWD
+#include <pthread.h>
+#include <dce/sec_login.h>
+
+static void
+initDCE(void)
+{
+ sec_login_handle_t login_context;
+ error_status_t error_status;
+ boolean32 valid;
+ struct passwd *pwd;
+ char *buf;
+
+ /* test to see if this user exists on the network registry */
+ valid = sec_login_setup_identity((unsigned_char_p_t) user,
+ sec_login_no_flags, &login_context, &error_status);
+ if (!valid) {
+ switch (error_status) {
+ case sec_rgy_object_not_found:
+ break;
+ case sec_rgy_server_unavailable:
+ (void) fprintf(stderr, "%s: the network registry is not available.\n",
+ ProgramName);
+ break;
+ case sec_login_s_no_memory:
+ buf = (char *) malloc(strlen(ProgramName) + 80);
+ (void) sprintf(buf,
+ "%s: out of memory\n", ProgramName);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ default:
+ (void) fprintf(stderr,
+ "%s: sec_login_setup_identity() returned status %d\n",
+ ProgramName, (int) error_status);
+ break;
+ }
+
+ pwd = getpwnam(user);
+ if (!pwd || strlen(pwd->pw_passwd) < 10) {
+ buf = (char *) malloc(strlen(ProgramName) + 80);
+ (void) sprintf(buf,
+ "%s: could not get user password\n", ProgramName);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+ usernet = 0;
+ (void) strcpy(userpass, pwd->pw_passwd);
+ } else
+ usernet = 1;
+
+ if (allowroot) {
+ valid = sec_login_setup_identity((unsigned_char_p_t) ROOT,
+ sec_login_no_flags, &login_context, &error_status);
+ if (!valid) {
+ switch (error_status) {
+ case sec_rgy_object_not_found:
+ break;
+ case sec_rgy_server_unavailable:
+ (void) fprintf(stderr, "%s: the network registry is not available.\n",
+ ProgramName);
+ break;
+ case sec_login_s_no_memory:
+ buf = (char *) malloc(strlen(ProgramName) + 80);
+ (void) sprintf(buf,
+ "%s: out of memory\n", ProgramName);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ default:
+ (void) fprintf(stderr,
+ "%s: sec_login_setup_identity() returned status %d\n",
+ ProgramName, (int) error_status);
+ break;
+ }
+
+ pwd = getpwuid(0);
+ if (!pwd || strlen(pwd->pw_passwd) < 10) {
+ (void) fprintf(stderr,
+ "%s: could not get root password\n", ProgramName);
+ allowroot = 0;
+ }
+ rootnet = 0;
+ (void) strcpy(rootpass, pwd->pw_passwd);
+ } else
+ rootnet = 1;
+ }
+ pthread_lock_global_np();
+}
+
+static char *
+error_string(error_status_t error_status)
+{
+ static char buf[60];
+
+ switch (error_status) {
+ case error_status_ok:
+ return "no error";
+ case sec_rgy_object_not_found:
+ return "The principal does not exist";
+ case sec_rgy_server_unavailable:
+ return "The network registry is not available";
+ case sec_login_s_no_memory:
+ return "Not enough memory is available to complete the operation";
+ case sec_login_s_already_valid:
+ return "The login context has already been validated";
+ case sec_login_s_default_use:
+ return "Can't validate the default context";
+ case sec_login_s_acct_invalid:
+ return "The account is invalid or has expired";
+ case sec_login_s_unsupp_passwd_type:
+ return "The password type is not supported";
+ case sec_login_s_context_invalid:
+ return "The login context itself is not valid";
+ default:
+ (void) sprintf(buf, "error status #%d", (int) error_status);
+ return buf;
+ }
+}
+
+
+/*-
+ *----------------------------------------------------------------------
+ * Function Created 5/95 to be used with xlock to validate DCE
+ * passwords. Routine simply returns a (1) if the the variable
+ * PASS is the USER's PASSWORD, else it returns a (0).
+ * Functions used:
+ *
+ * sec_login_setup_identity
+ * sec_login_validate_identity
+ * sec_login_certify_identity
+ *
+ * where setup_identity obtains the login context for the USER.
+ * This identity is then validated with validate_identity. Finally,
+ * cerfify_identity is called to make sure that the Security
+ * Server used to set up and validate a login context is legitimate.
+ *
+ * Created by Phil O'Connell
+ * philo@icaen.uiowa.edu
+ * Student Programmer
+ *
+ *-----------------------------------------------------------------------
+ */
+
+static int
+check_dce_net_passwd(char *usr, char *pass)
+{
+ sec_login_handle_t login_context;
+ error_status_t error_status;
+ sec_passwd_rec_t password;
+ boolean32 reset_password;
+ sec_login_auth_src_t auth_src;
+ unsigned_char_p_t principal_name;
+ boolean32 valid = 0;
+ char *passcpy;
+ boolean32 current_context;
+
+
+ pthread_unlock_global_np();
+ /* -------------------- SETUP IDENTITY--------------------------------- */
+
+ principal_name = (unsigned_char_p_t) usr;
+
+ /*
+ * We would rather like to refresh and existing login context instead of
+ * making a new one.
+ */
+
+ sec_login_get_current_context(&login_context, &error_status);
+ if (error_status != error_status_ok) {
+ current_context = 0;
+ (void) fprintf(stderr,
+ "get_current_context failed! Setting up a new one\n");
+
+ valid = sec_login_setup_identity(principal_name, sec_login_no_flags,
+ &login_context, &error_status);
+
+ if (!valid) {
+ (void) fprintf(stderr, "sec_login_setup_identity() failed: %s\n",
+ error_string(error_status));
+ pthread_lock_global_np();
+ return 0;
+ }
+ } else
+ current_context = 1;
+
+/*--------------- VALIDATE IDENTITY ---------------------------------*/
+
+ /* make a copy of pass, because sec_login_validate_identity() will
+ clobber the plaintext password passed to it */
+ passcpy = strdup(pass);
+
+ password.key.key_type = sec_passwd_plain;
+ password.key.tagged_union.plain = (unsigned char *) passcpy;
+ password.pepper = NULL;
+ password.version_number = sec_passwd_c_version_none;
+
+ valid = sec_login_validate_identity(login_context, &password, &reset_password, &auth_src, &error_status);
+
+ /* report unusual error conditions */
+ if (error_status != error_status_ok &&
+ error_status != sec_rgy_passwd_invalid &&
+ error_status != sec_login_s_already_valid &&
+ error_status != sec_login_s_null_password) {
+ (void) fprintf(stderr, "sec_login_validate_identity failed: %s\n",
+ error_string(error_status));
+ }
+ /* done with the copy of the password */
+ (void) free((void *) passcpy);
+
+ /* Refresh the context if we already have one */
+ if (current_context) {
+ if (!sec_login_refresh_identity(login_context, &error_status)) {
+ (void) fprintf(stderr, "sec_login_refresh_identity failed: %s\n",
+ error_string(error_status));
+ } else {
+ passcpy = strdup(pass);
+
+ password.key.key_type = sec_passwd_plain;
+ password.key.tagged_union.plain = (unsigned char *) passcpy;
+ password.pepper = NULL;
+ password.version_number = sec_passwd_c_version_none;
+
+ /* Have to validate the refreshed context */
+ valid = sec_login_validate_identity(login_context,
+ &password, &reset_password, &auth_src, &error_status);
+
+ /* report unusual error conditions */
+ if (error_status != error_status_ok &&
+ error_status != sec_rgy_passwd_invalid &&
+ error_status != sec_login_s_null_password) {
+ (void) fprintf(stderr, "sec_login_validate_identity failed: %s\n",
+ error_string(error_status));
+ }
+ }
+ /* done with the copy of the password */
+ (void) free((void *) passcpy);
+ }
+ /* make sure that the authentication service is not an imposter */
+ if (valid) {
+ if (!sec_login_certify_identity(login_context, &error_status)) {
+ (void) fprintf(stderr, "Authentication service is an imposter!\n");
+ /* logoutUser(); */
+ valid = 0;
+ }
+ }
+ pthread_lock_global_np();
+ return valid;
+}
+
+#endif /* DCE_PASSWD */
+
+#ifdef HAVE_KRB4
+int
+krb_check_password(struct passwd *pwd, char *pass)
+{
+ char realm[REALM_SZ];
+ char tkfile[MAXPATHLEN];
+
+ /* find local realm */
+ if (krb_get_lrealm(realm, 1) != KSUCCESS)
+ /*(void) strncpy(realm, KRB_REALM, sizeof (realm)); */
+ (void) strncpy(realm, krb_get_default_realm(), sizeof (realm));
+
+ /* Construct a ticket file */
+ (void) sprintf(tkfile, "/tmp/xlock_tkt_%d", getpid());
+
+ /* Now, let's make the ticket file named above the _active_ tkt file */
+ krb_set_tkt_string(tkfile);
+
+ /* ask the kerberos server for a ticket! */
+ if (krb_get_pw_in_tkt(pwd->pw_name, "", realm,
+ "krbtgt", realm,
+ DEFAULT_TKT_LIFE,
+ pass) == INTK_OK) {
+ unlink(tkfile);
+ return 1;
+ }
+ return 0;
+}
+#endif /* HAVE_KERB4 */
+
+#ifdef HAVE_KRB5
+/*-
+ * Pretty much all of this was snatched out of the kinit from the Kerberos5b6
+ * distribution. The reason why I felt it was necessary to use kinit was
+ * that if someone is locked for a long time, their credentials could expire,
+ * so xlock must be able to get a new ticket. -- dah <rodmur@ecst.csuchico.edu>
+ */
+#define KRB5_DEFAULT_OPTIONS 0
+#define KRB5_DEFAULT_LIFE 60*60*10 /* 10 hours */
+static int
+krb_check_password(struct passwd *pwd, char *pass)
+{
+ krb5_context kcontext;
+ krb5_timestamp now;
+ krb5_ccache ccache = NULL;
+ krb5_principal me;
+ krb5_principal server;
+ int options = KRB5_DEFAULT_OPTIONS;
+ krb5_deltat lifetime = KRB5_DEFAULT_LIFE;
+ krb5_error_code code;
+ krb5_creds my_creds;
+ char *client_name;
+ krb5_address **addrs = (krb5_address **) 0;
+ krb5_preauthtype *preauth = NULL;
+
+ krb5_data tgtname =
+ {
+ 0,
+ KRB5_TGS_NAME_SIZE,
+ KRB5_TGS_NAME
+ };
+
+ krb5_init_context(&kcontext);
+ krb5_init_ets(kcontext);
+
+ if ((code = krb5_timeofday(kcontext, &now))) {
+ com_err(ProgramName, code, "while getting time of day");
+ return 0; /* seems better to deny access, than just exit, which
+ was what happened in kinit */
+ }
+ if ((code = krb5_cc_default(kcontext, &ccache))) {
+ com_err(ProgramName, code, "while getting default ccache");
+ return 0;
+ }
+ code = krb5_cc_get_principal(kcontext, ccache, &me);
+ if (code) {
+ if ((code = krb5_parse_name(kcontext, pwd->pw_name, &me))) {
+ com_err(ProgramName, code, "when parsing name %s", pwd->pw_name);
+ return 0;
+ }
+ }
+ if ((code = krb5_unparse_name(kcontext, me, &client_name))) {
+ com_err(ProgramName, code, "when unparsing name");
+ return 0;
+ }
+ (void) memset((char *) &my_creds, 0, sizeof (my_creds));
+
+ my_creds.client = me;
+
+ if ((code = krb5_build_principal_ext(kcontext, &server,
+ krb5_princ_realm(kcontext, me)->length,
+ krb5_princ_realm(kcontext, me)->data,
+ tgtname.length, tgtname.data,
+ krb5_princ_realm(kcontext, me)->length,
+ krb5_princ_realm(kcontext, me)->data,
+ 0))) {
+ com_err(ProgramName, code, "while building server name");
+ return 0;
+ }
+ my_creds.server = server;
+
+ my_creds.times.starttime = 0;
+ my_creds.times.endtime = now + lifetime;
+ my_creds.times.renew_till = 0;
+
+ if (strlen(pass) == 0)
+ strcpy(pass, "*");
+ /* if pass is NULL, krb5_get_in_tkt_with_password will prompt with
+ krb5_default_pwd_prompt1 for password, you don't want that in
+ this application, most likely the user won't have '*' for a
+ password -- dah <rodmur@ecst.csuchico.edu> */
+
+ code = krb5_get_in_tkt_with_password(kcontext, options, addrs,
+ NULL, preauth, pass, 0,
+ &my_creds, 0);
+
+ (void) memset(pass, 0, sizeof (pass));
+
+ if (code) {
+ if (code == KRB5KRB_AP_ERR_BAD_INTEGRITY)
+ return 0; /* bad password entered */
+ else {
+ com_err(ProgramName, code, "while getting initial credentials");
+ return 0;
+ }
+ }
+ code = krb5_cc_initialize(kcontext, ccache, me);
+ if (code != 0) {
+ com_err(ProgramName, code, "when initializing cache");
+ return 0;
+ }
+ code = krb5_cc_store_cred(kcontext, ccache, &my_creds);
+ if (code) {
+ com_err(ProgramName, code, "while storing credentials");
+ return 0;
+ }
+ krb5_free_principal(kcontext, server);
+
+ krb5_free_context(kcontext);
+
+ return 1; /* success */
+}
+#endif /* HAVE_KRB5 */
+
+#ifndef VMS
+#undef passwd
+#undef pw_name
+#undef pw_passwd
+#ifndef SUNOS_ADJUNCT_PASSWD
+#include <pwd.h>
+#endif
+#endif
+
+#if ( HAVE_FCNTL_H && defined( USE_MULTIPLE_ROOT ))
+
+void
+get_multiple(struct passwd *pw)
+{
+ /* This should be the first element on the linked list.
+ * If not, then there could be problems.
+ * Also all memory allocations tend to force an exit of
+ * the program. This should probably be changed somehow.
+ */
+ if (pwllh == (pwlptr) NULL) {
+ if ((pwll = new_pwlnode()) == (pwlptr) ENOMEM) {
+ perror("new");
+ exit(1);
+ }
+ pwllh = pwll;
+ }
+ if ((pwll->pw_name = strdup(pw->pw_name)) == NULL) {
+ perror("new");
+ exit(1);
+ }
+#ifdef BSD_AUTH
+ pwll->pw_lc = login_getclass(pw->pw_class);
+#else
+ if ((pwll->pw_passwd = strdup(pw->pw_passwd)) == NULL) {
+ perror("new");
+ exit(1);
+ }
+#endif
+ if ((pwll->next = new_pwlnode()) == (pwlptr) ENOMEM) {
+ perror("new");
+ exit(1);
+ }
+}
+
+void
+set_multiple(void)
+{
+#ifdef BSD_AUTH
+ struct passwd *pw;
+ pwlptr pwll;
+
+ if (pwllh == (pwlptr) NULL) {
+ if ((pwll = new_pwlnode()) == (pwlptr) ENOMEM) {
+ perror("new");
+ exit(1);
+ }
+ pwllh = pwll;
+ }
+ for (pwll = pwllh; pwll->next; pwll = pwll->next);
+
+ while ((pw = getpwent()) != (struct passwd *) NULL) {
+ if (pw->pw_uid)
+ continue;
+ if ((pwll->pw_name = strdup(pw->pw_name)) == NULL) {
+ perror("new");
+ exit(1);
+ }
+ pwll->pw_lc = login_getclass(pw->pw_class);
+
+ if ((pwll->next = new_pwlnode()) == (pwlptr) ENOMEM) {
+ perror("new");
+ exit(1);
+ }
+ }
+
+ if (pwll->next = new_pwlnode())
+ pwll = pwll->next;
+#else /* !BSD_AUTH */
+ /* If you thought the above was sick, then you'll think this is
+ * downright horrific. This is set up so that a child process
+ * is created to read in the password entries using getpwent(3C).
+ * In the man pages on the HPs, getpwent(3C) has in it the fact
+ * that once getpwent(3C) has opened the password file, it keeps
+ * it open until the process is finished. Thus, the child
+ * process exits immediately after reading the entire password
+ * file. Otherwise, the password file remains open the entire
+ * time this program is running.
+ *
+ * I went with getpwent(3C) because it will actually read in
+ * the password entries from the NIS maps as well.
+ */
+ struct passwd *pw;
+ int pipefd[2];
+ char buf[BUFMAX], xlen;
+ pid_t cid;
+
+#ifdef HAVE_SHADOW
+ struct spwd *spw;
+
+#endif
+
+ if (pipe(pipefd) < 0) {
+ perror("Pipe Generation");
+ exit(1);
+ }
+ if ((cid = fork()) < 0) {
+ perror("fork");
+ exit(1);
+ } else if (cid == 0) {
+ /* child process. Used to read in password file. Also checks to
+ * see if the uid is zero. If so, then writes that to the pipe.
+ */
+ register int sbuf = 0;
+ char *cbuf, *pbuf;
+
+ close(pipefd[0]);
+ while ((pw = getpwent()) != (struct passwd *) NULL) {
+ if (pw->pw_uid != 0)
+ continue;
+#ifdef HAVE_SHADOW
+ if ((spw = getspnam(pw->pw_name)) != NULL) {
+ char *tmp; /* swap */
+
+ tmp = pw->pw_passwd;
+ pw->pw_passwd = spw->sp_pwdp;
+ spw->sp_pwdp = tmp;
+ }
+#endif
+ if (pw->pw_passwd[0] != '*') {
+ xlen = strlen(pw->pw_name);
+ if ((sbuf + xlen) >= BUFMAX) {
+ if (write(pipefd[1], buf, sbuf) != sbuf)
+ perror("write");
+ sbuf = 0;
+ }
+ cbuf = &buf[sbuf];
+ *cbuf++ = xlen;
+ for (pbuf = pw->pw_name; *pbuf;)
+ *cbuf++ = *pbuf++;
+ sbuf += xlen + 1;
+
+ xlen = strlen(pw->pw_passwd);
+ if ((sbuf + xlen) >= BUFMAX) {
+ if (write(pipefd[1], buf, sbuf) != sbuf)
+ perror("write");
+ sbuf = 0;
+ }
+ cbuf = &buf[sbuf];
+ *cbuf++ = xlen;
+ for (pbuf = pw->pw_passwd; *pbuf;)
+ *cbuf++ = *pbuf++;
+ sbuf += xlen + 1;
+ }
+ }
+#ifdef HAVE_SHADOW
+ endspent();
+#endif
+ cbuf = &buf[sbuf];
+ *cbuf = -1;
+ sbuf++;
+ if (write(pipefd[1], buf, sbuf) != sbuf)
+ perror("write");
+
+ close(pipefd[1]);
+ exit(0);
+ } else {
+ /* parent process. Does the actual creation of the linked list.
+ * It assumes that everything coming through the pipe are password
+ * entries that are authorized to unlock the screen.
+ */
+ register int bufsize = BUFMAX, done = 0, sbuf = BUFMAX,
+ i;
+ char *cbuf, *pbuf;
+ pwlptr pwll;
+
+ close(pipefd[1]);
+
+ if (pwllh == (pwlptr) NULL) {
+ if ((pwll = new_pwlnode()) == (pwlptr) ENOMEM) {
+ perror("new");
+ exit(1);
+ }
+ pwllh = pwll;
+ }
+ for (pwll = pwllh; pwll->next; pwll = pwll->next);
+ while (!done) {
+ if (sbuf >= bufsize) {
+ if ((bufsize = read(pipefd[0], buf, BUFMAX)) <= 0)
+ perror("read");
+ sbuf = 0;
+ }
+ cbuf = &buf[sbuf];
+ xlen = *cbuf++;
+ if (xlen < 0) {
+ done = 1;
+ break;
+ }
+ sbuf++;
+ if (sbuf >= bufsize) {
+ if ((bufsize = read(pipefd[0], buf, BUFMAX)) <= 0)
+ perror("read");
+ sbuf = 0;
+ }
+ if ((pwll->pw_name = (char *) malloc(xlen + 1)) == NULL)
+ break;
+ pbuf = pwll->pw_name;
+ cbuf = &buf[sbuf];
+ for (i = 0; i < xlen; i++) {
+ *pbuf++ = *cbuf++;
+ sbuf++;
+ if (sbuf >= bufsize) {
+ if ((bufsize = read(pipefd[0], buf, BUFMAX)) <= 0)
+ perror("read");
+ sbuf = 0;
+ cbuf = buf;
+ }
+ }
+ *pbuf = (char) NULL;
+
+ cbuf = &buf[sbuf];
+ xlen = *cbuf++;
+ sbuf++;
+ if (sbuf >= bufsize) {
+ if ((bufsize = read(pipefd[0], buf, BUFMAX)) <= 0)
+ perror("read");
+ sbuf = 0;
+ }
+ if ((pwll->pw_passwd = (char *) malloc(xlen + 1)) == NULL)
+ break;
+ pbuf = pwll->pw_passwd;
+ cbuf = &buf[sbuf];
+ for (i = 0; i < xlen; i++) {
+ *pbuf++ = *cbuf++;
+ sbuf++;
+ if (sbuf >= bufsize) {
+ if ((bufsize = read(pipefd[0], buf, BUFMAX)) <= 0)
+ perror("read");
+ sbuf = 0;
+ cbuf = buf;
+ }
+ }
+ *pbuf = (char) NULL;
+
+ if ((pwll->next = new_pwlnode()) == (pwlptr) ENOMEM)
+ break;
+ pwll = pwll->next;
+ }
+ close(pipefd[0]);
+ }
+#endif /* !BSD_AUTH */
+}
+#endif
+
+#ifdef USE_XLOCKRC
+
+static void
+gpass(void)
+{
+#include <sys/param.h>
+#include <sys/stat.h>
+#define CPASSLENGTH 14
+#define CPASSCHARS 64
+ extern char *cpasswd;
+ static char saltchars[CPASSCHARS + 1] =
+ "abcdefghijklmnopwrstuvwxyzABCDEFGHIJKLMNOPWRSTUVWXYZ1234567890./";
+ char xlockrc[MAXPATHLEN], *home, *getpass();
+ FILE *fp;
+
+ if (cpasswd[0] == '\0') {
+ /*
+ * No password given on command line or from database, get from
+ * $HOME/.xlockrc instead.
+ */
+ if ((home = getenv("HOME")) == 0) {
+ /* struct passwd *p = getpwuid(getuid()); */
+ struct passwd *p = my_passwd_entry();
+
+ if (p == 0) {
+ char *buf = (char *) malloc(strlen(ProgramName) + 80);
+
+ (void) sprintf(buf,
+ "%s: Who are you?\n", ProgramName);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+ home = p->pw_dir;
+ }
+ (void) strncpy(xlockrc, home, MAXPATHLEN);
+ (void) strncat(xlockrc, "/.xlockrc", MAXPATHLEN);
+ if ((fp = my_fopen(xlockrc, "r")) == NULL) {
+ char pw[9], salt[2], *pw2;
+
+ if ((fp = my_fopen(xlockrc, "w")) != NULL)
+ (void) fchmod(fileno(fp), 0600);
+ while (1) {
+ (void) strncpy(pw, getpass("Key: "), sizeof pw);
+ pw2 = getpass("Again:");
+ if (strcmp(pw, pw2) != 0) {
+ (void) fprintf(stderr, "%s: Mismatch, try again\n", ProgramName);
+ exit(1);
+ } else
+ break;
+ }
+ /* grab a random printable character that isn't a colon */
+ salt[0] = saltchars[LRAND() & (CPASSCHARS - 1)];
+ salt[1] = saltchars[LRAND() & (CPASSCHARS - 1)];
+ (void) strncpy(userpass, (char *) crypt(pw, salt), CPASSLENGTH);
+ if (fp)
+ (void) fprintf(fp, "%s\n", userpass);
+ } else {
+ char buf[BUFSIZ];
+
+ (void) fchmod(fileno(fp), 0600);
+ buf[0] = '\0';
+ if ((fgets(buf, sizeof buf, fp) == NULL) ||
+ (!(strlen(buf) == CPASSLENGTH - 1 ||
+ (strlen(buf) == CPASSLENGTH && buf[CPASSLENGTH - 1] == '\n')))) {
+ (void) fprintf(stderr, "%s: %s crypted password %s\n", xlockrc,
+ buf[0] == '\0' ? "null" : "bad", buf);
+ exit(1);
+ }
+ buf[CPASSLENGTH - 1] = '\0';
+ (void) strncpy(userpass, buf, CPASSLENGTH);
+ }
+ if (fp)
+ (void) fclose(fp);
+ } else {
+
+ if (strlen(cpasswd) != CPASSLENGTH - 1) {
+ (void) fprintf(stderr, "%s: bad crypted password %s\n",
+ ProgramName, cpasswd);
+ exit(1);
+ } else
+ (void) strncpy(userpass, cpasswd, CPASSLENGTH);
+ }
+}
+
+#endif /* USE_XLOCKRC */
+
+void
+initPasswd(void)
+{
+ getUserName();
+#if !defined( ultrix ) && !defined( DCE_PASSWD )
+ if (!nolock && !inroot && !inwindow && grabmouse) {
+#ifdef BSD_AUTH
+ struct passwd *pwd = getpwnam(user);
+
+ lc = login_getclass(pwd->pw_class);
+ if (allowroot && (pwd = getpwnam(ROOT)) != NULL)
+ rlc = login_getclass(pwd->pw_class);
+#else /* !BSD_AUTH */
+#ifdef USE_XLOCKRC
+ gpass();
+#else
+ getCryptedUserPasswd();
+#endif
+ if (allowroot)
+ getCryptedRootPasswd();
+#endif /* !BSD_AUTH */
+ }
+#endif /* !ultrix && !DCE_PASSWD */
+#ifdef DCE_PASSWD
+ initDCE();
+#endif
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)penrose.c 4.03 97/06/04 xlockmore";
+
+#endif
+
+/*-
+ * penrose.c - Quasiperiodic tilings for xlock, the X Window System
+ * lockscreen.
+ *
+ * Copyright (c) 1996 by Timo Korvola <tkorvola@dopey.hut.fi>
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Jamie Zawinski <jwz@netscape.com> compatible with xscreensaver
+ * 09-Sep-96: Written.
+ */
+
+/*-
+Be careful, this probably still has a few bugs (many of which may only
+appear with a very low probability). These are seen with -verbose .
+If one of these are hit penrose will reinitialize.
+*/
+
+/*-
+ * See Onoda, Steinhardt, DiVincenzo and Socolar in
+ * Phys. Rev. Lett. 60, #25, 1988 or
+ * Strandburg in Computers in Physics, Sep/Oct 1991.
+ *
+ * This implementation uses the simpler version of the growth
+ * algorithm, i.e., if there are no forced vertices, a randomly chosen
+ * tile is added to a randomly chosen vertex (no preference for those
+ * 108 degree angles).
+ *
+ * There are two essential differences to the algorithm presented in
+ * the literature: First, we do not allow the tiling to enclose an
+ * untiled area. Whenever this is in danger of happening, we just
+ * do not add the tile, hoping for a better random choice the next
+ * time. Second, when choosing a vertex randomly, we will take
+ * one that lies withing the viewport if available. If this seems to
+ * cause enclosures in the forced rule case, we will allow invisible
+ * vertices to be chosen.
+ *
+ * Tiling is restarted whenever one of the following happens: there
+ * are no incomplete vertices within the viewport or the tiling has
+ * extended a window's length beyond the edge of the window
+ * horizontally or vertically or forced rule choice has failed 100
+ * times due to areas about to become enclosed.
+ *
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Penrose"
+#define HACK_INIT init_penrose
+#define HACK_DRAW draw_penrose
+#define DEF_DELAY 10000
+#define DEF_SIZE -40
+#include "xlockmore.h" /* from the xscreensaver distribution */
+#else /* !STANDALONE */
+#include "xlock.h" /* from the xlockmore distribution */
+#endif /* !STANDALONE */
+
+#define DEF_AMMANN "False"
+
+static Bool ammann;
+
+#ifndef STANDALONE
+
+static XrmOptionDescRec opts[] =
+{
+ {"-ammann", ".penrose.ammann", XrmoptionNoArg, (caddr_t) "on"},
+ {"+ammann", ".penrose.ammann", XrmoptionNoArg, (caddr_t) "off"}
+};
+static argtype vars[] =
+{
+ {(caddr_t *) & ammann, "ammann", "Ammann", DEF_AMMANN, t_Bool}
+};
+static OptionStruct desc[] =
+{
+ {"-/+ammann", "turn on/off Ammann lines"}
+};
+
+ModeSpecOpt penrose_opts =
+{2, opts, 1, vars, desc};
+
+#endif /* !STANDALONE */
+
+/*-
+ * Annoyingly the ANSI C library people have reserved all identifiers
+ * ending with _t for future use. Hence we use _c as a suffix for
+ * typedefs (c for class, although this is not C++).
+ */
+
+#define MINSIZE 5
+
+/*-
+ * In theory one could fit 10 tiles to a single vertex. However, the
+ * vertex rules only allow at most seven tiles to meet at a vertex.
+ */
+
+#define CELEBRATE 31415927 /* This causes a pause, an error occurred. */
+#define COMPLETION 3141593 /* This causes a pause, tiles filled up screen. */
+
+#define MAX_TILES_PER_VERTEX 7
+#define N_VERTEX_RULES 8
+#define ALLOC_NODE( type) ((type *)malloc( sizeof( type)))
+
+/*-
+ * These are used to specify directions. They can also be used in bit
+ * masks to specify a combination of directions.
+ */
+#define S_LEFT 1
+#define S_RIGHT 2
+
+
+/*-
+ * We do not actually maintain objects corresponding to the tiles since
+ * we do not really need them and they would only consume memory and
+ * cause additional bookkeeping. Instead we only have vertices, and
+ * each vertex lists the type of each adjacent tile as well as the
+ * position of the vertex on the tile (hereafter refered to as
+ * "corner"). These positions are numbered in counterclockwise order
+ * so that 0 is where two double arrows meet (see one of the
+ * articles). The tile type and vertex number are stored in a single
+ * integer (we use char, and even most of it remains unused).
+ *
+ * The primary use of tile objects would be draw traversal, but we do
+ * not currently do redraws at all (we just start over).
+ */
+#define VT_CORNER_MASK 0x3
+#define VT_TYPE_MASK 0x4
+#define VT_THIN 0
+#define VT_THICK 0x4
+#define VT_BITS 3
+#define VT_TOTAL_MASK 0x7
+
+typedef unsigned char vertex_type_c;
+
+/*-
+ * These allow one to compute the types of the other corners of the tile. If
+ * you are standing at a vertex of type vt looking towards the middle of the
+ * tile, VT_LEFT( vt) is the vertex on your left etc.
+ */
+#define VT_LEFT( vt) ((((vt) - 1) & VT_CORNER_MASK) | (((vt) & VT_TYPE_MASK)))
+#define VT_RIGHT( vt) ((((vt) + 1) & VT_CORNER_MASK) | (((vt) & VT_TYPE_MASK)))
+#define VT_FAR( vt) ((vt) ^ 2)
+
+
+/*-
+ * Since we do not do redraws, we only store the vertices we need. These are
+ * the ones with still some empty space around them for the growth algorithm
+ * to fill.
+ *
+ * Here we use a doubly chained ring-like structure as vertices often need
+ * to be removed or inserted (they are kept in geometrical order
+ * circling the tiled area counterclockwise). The ring is refered to by
+ * a pointer to one more or less random node. When deleting nodes one
+ * must make sure that this pointer continues to refer to a valid
+ * node. A vertex count is maintained to make it easier to pick
+ * vertices randomly.
+ */
+typedef struct forced_node forced_node_c;
+
+typedef struct fringe_node {
+ struct fringe_node *prev;
+ struct fringe_node *next;
+ /* These are numbered counterclockwise. The gap, if any, lies
+ between the last and first tiles. */
+ vertex_type_c tiles[MAX_TILES_PER_VERTEX];
+ int n_tiles;
+ /* A bit mask used to indicate vertex rules that are still applicable for
+ completing this vertex. Initialize this to (1 << N_VERTEX_RULES) - 1,
+ i.e., all ones, and the rule matching functions will automatically mask
+ out rules that no longer match. */
+ unsigned char rule_mask;
+ /* If the vertex is on the forced vertex list, this points to the
+ pointer to the appropriate node in the list. To remove the
+ vertex from the list just set *list_ptr to the next node,
+ deallocate and decrement node count. */
+ struct forced_node **list_ptr;
+ /* Screen coordinates. */
+ XPoint loc;
+ /* We also keep track of 5D coordinates to avoid rounding errors.
+ These are in units of edge length. */
+ int fived[5];
+ /* This is used to quickly check if a vertex is visible. */
+ unsigned char off_screen;
+} fringe_node_c;
+
+typedef struct {
+ fringe_node_c *nodes;
+ /* This does not count off-screen nodes. */
+ int n_nodes;
+} fringe_c;
+
+
+/*-
+ * The forced vertex pool contains vertices where at least one
+ * side of the tiled region can only be extended in one way. Note
+ * that this does not necessarily mean that there would only be one
+ * applicable rule. forced_sides are specified using S_LEFT and
+ * S_RIGHT as if looking at the untiled region from the vertex.
+ */
+struct forced_node {
+ fringe_node_c *vertex;
+ unsigned forced_sides;
+ struct forced_node *next;
+};
+
+typedef struct {
+ forced_node_c *first;
+ int n_nodes, n_visible;
+} forced_pool_c;
+
+
+/* This is the data related to the tiling of one screen. */
+typedef struct {
+ int width, height;
+ XPoint origin;
+ int edge_length;
+ fringe_c fringe;
+ forced_pool_c forced;
+ int done, failures;
+ int thick_color, thin_color;
+} tiling_c;
+
+static tiling_c *tilings; /* = {0} */
+
+
+/* The tiles are listed in counterclockwise order. */
+typedef struct {
+ vertex_type_c tiles[MAX_TILES_PER_VERTEX];
+ int n_tiles;
+} vertex_rule_c;
+
+static vertex_rule_c vertex_rules[N_VERTEX_RULES] =
+{
+ {
+ {VT_THICK | 2, VT_THICK | 2, VT_THICK | 2, VT_THICK | 2, VT_THICK | 2}, 5},
+ {
+ {VT_THICK | 0, VT_THICK | 0, VT_THICK | 0, VT_THICK | 0, VT_THICK | 0}, 5},
+ {
+ {VT_THICK | 0, VT_THICK | 0, VT_THICK | 0, VT_THIN | 0}, 4},
+ {
+ {VT_THICK | 2, VT_THICK | 2, VT_THIN | 1, VT_THIN | 3, VT_THICK | 2,
+ VT_THIN | 1, VT_THIN | 3}, 7},
+ {
+ {VT_THICK | 2, VT_THICK | 2, VT_THICK | 2, VT_THICK | 2,
+ VT_THIN | 1, VT_THIN | 3}, 6},
+ {
+ {VT_THICK | 1, VT_THICK | 3, VT_THIN | 2}, 3},
+ {
+ {VT_THICK | 0, VT_THIN | 0, VT_THIN | 0}, 3},
+ {
+ {VT_THICK | 2, VT_THIN | 1, VT_THICK | 3, VT_THICK | 1, VT_THIN | 3}, 5}
+};
+
+
+/* Match information returned by match_rules. */
+typedef struct {
+ int rule;
+ int pos;
+} rule_match_c;
+
+
+/* Occasionally floating point coordinates are needed. */
+typedef struct {
+ float x, y;
+} fcoord_c;
+
+
+/* All angles are measured in multiples of 36 degrees. */
+typedef int angle_c;
+
+static angle_c vtype_angles[] =
+{4, 1, 4, 1, 2, 3, 2, 3};
+
+#define vtype_angle( v) (vtype_angles[ v])
+
+
+/* Direction angle of an edge. */
+static angle_c
+vertex_dir(ModeInfo * mi, fringe_node_c * vertex, unsigned side)
+{
+ tiling_c *tp = &tilings[MI_SCREEN(mi)];
+ fringe_node_c *v2 =
+ (side == S_LEFT ? vertex->next : vertex->prev);
+ register int i;
+
+ for (i = 0; i < 5; i++)
+ switch (v2->fived[i] - vertex->fived[i]) {
+ case 1:
+ return 2 * i;
+ case -1:
+ return (2 * i + 5) % 10;
+ }
+ tp->done = True;
+ if (MI_WIN_IS_VERBOSE(mi)) {
+ (void) fprintf(stderr,
+ "Weirdness in vertex_dir (this has been reported)\n");
+ for (i = 0; i < 5; i++)
+ (void) fprintf(stderr, "v2->fived[%d]=%d, vertex->fived[%d]=%d\n",
+ i, v2->fived[i], i, vertex->fived[i]);
+ }
+ MI_PAUSE(mi) = CELEBRATE;
+ return 0;
+}
+
+
+/* Move one step to a given direction. */
+static void
+add_unit_vec(angle_c dir, int *fived)
+{
+ static int dir2i[] =
+ {0, 3, 1, 4, 2};
+
+ while (dir < 0)
+ dir += 10;
+ fived[dir2i[dir % 5]] += (dir % 2 ? -1 : 1);
+}
+
+
+/* For comparing coordinates. */
+#define fived_equal( f1, f2) (!memcmp( (f1), (f2), 5 * sizeof( int)))
+
+
+/*-
+ * This computes screen coordinates from 5D representation. Note that X
+ * uses left-handed coordinates (y increases downwards).
+ */
+static XPoint
+fived_to_loc(int fived[], tiling_c * tp)
+{
+ static fcoord_c fived_table[5] =
+ {
+ {.0, .0}};
+ float fifth = 8 * atan(1.) / 5;
+ register int i;
+ register float r;
+ register fcoord_c offset =
+ {.0, .0};
+ XPoint pt = tp->origin;
+
+ if (fived_table[0].x == .0)
+ for (i = 0; i < 5; i++) {
+ fived_table[i].x = cos(fifth * i);
+ fived_table[i].y = sin(fifth * i);
+ }
+ for (i = 0; i < 5; i++) {
+ r = fived[i] * tp->edge_length;
+ offset.x += r * fived_table[i].x;
+ offset.y -= r * fived_table[i].y;
+ }
+ pt.x += (int) (offset.x + .5);
+ pt.y += (int) (offset.y + .5);
+ return pt;
+}
+
+
+/* Mop up dynamic data for one screen. */
+static void
+release_screen(tiling_c * tp)
+{
+ register fringe_node_c *fp1, *fp2;
+ register forced_node_c *lp1, *lp2;
+
+ if (tp->fringe.nodes == 0)
+ return;
+ fp1 = tp->fringe.nodes;
+ do {
+ fp2 = fp1;
+ fp1 = fp1->next;
+ (void) free((void *) fp2);
+ } while (fp1 != tp->fringe.nodes);
+ tp->fringe.nodes = 0;
+ for (lp1 = tp->forced.first; lp1 != 0;) {
+ lp2 = lp1;
+ lp1 = lp1->next;
+ (void) free((void *) lp2);
+ }
+ tp->forced.first = 0;
+}
+
+
+/* Called to init the mode. */
+void
+init_penrose(ModeInfo * mi)
+{
+ tiling_c *tp;
+ fringe_node_c *fp;
+ int i, size;
+
+ if (tilings == NULL) {
+ if ((tilings = (tiling_c *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (tiling_c))) == NULL)
+ return;
+ }
+ tp = &tilings[MI_SCREEN(mi)];
+ tp->done = False;
+ tp->failures = 0;
+ tp->width = MI_WIN_WIDTH(mi);
+ tp->height = MI_WIN_HEIGHT(mi);
+ if (MI_NPIXELS(mi) > 2) {
+ tp->thick_color = NRAND(MI_NPIXELS(mi));
+ /* Insure good contrast */
+ tp->thin_color = (NRAND(2 * MI_NPIXELS(mi) / 3) + tp->thick_color +
+ MI_NPIXELS(mi) / 6) % MI_NPIXELS(mi);
+ }
+ size = MI_SIZE(mi);
+ if (size < -MINSIZE)
+ tp->edge_length = NRAND(MIN(-size, MAX(MINSIZE,
+ MIN(tp->width, tp->height) / 2)) - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE) {
+ if (!size)
+ tp->edge_length = MAX(MINSIZE, MIN(tp->width, tp->height) / 2);
+ else
+ tp->edge_length = MINSIZE;
+ } else
+ tp->edge_length = MIN(size, MAX(MINSIZE,
+ MIN(tp->width, tp->height) / 2));
+ tp->origin.x = (tp->width / 2 + NRAND(tp->width)) / 2;
+ tp->origin.y = (tp->height / 2 + NRAND(tp->height)) / 2;
+ tp->fringe.n_nodes = 2;
+ if (tp->fringe.nodes != 0)
+ release_screen(tp);
+ if (tp->fringe.nodes != 0 || tp->forced.first != 0) {
+ if (MI_WIN_IS_VERBOSE(mi)) {
+ (void) fprintf(stderr, "Weirdness in init_penrose()\n");
+ (void) fprintf(stderr, "tp->fringe.nodes = 0 && tp->forced.first = 0\n");
+ }
+ release_screen(tp); /* Try again */
+ tp->done = True;
+ }
+ tp->forced.n_nodes = tp->forced.n_visible = 0;
+ fp = tp->fringe.nodes = ALLOC_NODE(fringe_node_c);
+ if (fp == 0) {
+ if (MI_WIN_IS_VERBOSE(mi)) {
+ (void) fprintf(stderr, "Weirdness in init_penrose()\n");
+ (void) fprintf(stderr, "fp = 0\n");
+ }
+ fp = tp->fringe.nodes = ALLOC_NODE(fringe_node_c);
+ tp->done = True;
+ }
+ /* First vertex. */
+ fp->rule_mask = (1 << N_VERTEX_RULES) - 1;
+ fp->list_ptr = 0;
+ fp->prev = fp->next = ALLOC_NODE(fringe_node_c);
+ if (fp->next == 0) {
+ if (MI_WIN_IS_VERBOSE(mi)) {
+ (void) fprintf(stderr, "Weirdness in init_penrose()\n");
+ (void) fprintf(stderr, "fp->next = 0\n");
+ }
+ fp->prev = fp->next = ALLOC_NODE(fringe_node_c);
+ tp->done = True;
+ }
+ fp->n_tiles = 0;
+ fp->loc = tp->origin;
+ fp->off_screen = False;
+ for (i = 0; i < 5; i++)
+ fp->fived[i] = 0;
+
+ /* Second vertex. */
+ *(fp->next) = *fp;
+ fp->next->prev = fp->next->next = fp;
+ fp = fp->next;
+ i = NRAND(5);
+ fp->fived[i] = 2 * NRAND(2) - 1;
+ fp->loc = fived_to_loc(fp->fived, tp);
+ /* That's it! We have created our first edge. */
+}
+
+/*-
+ * This attempts to match the configuration of vertex with the vertex
+ * rules. The return value is a total match count. If matches is
+ * non-null, it will be used to store information about the matches
+ * and must be large enough to contain it. To play it absolutely
+ * safe, allocate room for MAX_TILES_PER_VERTEX * N_VERTEX_RULES
+ * entries when searching all matches. The rule mask of vertex will
+ * be applied and rules masked out will not be searched. Only strict
+ * subsequences match. If first_only is true, the search stops when
+ * the first match is found. Otherwise all matches will be found and
+ * the rule_mask of vertex will be updated, which also happens in
+ * single-match mode if no match is found.
+ */
+static int
+match_rules(fringe_node_c * vertex, rule_match_c * matches, int first_only)
+{
+ /* I will assume that I can fit all the relevant bits in vertex->tiles
+ into one unsigned long. With 3 bits per element and at most 7
+ elements this means 21 bits, which should leave plenty of room.
+ After packing the bits the rest is just integer comparisons and
+ some bit shuffling. This is essentially Rabin-Karp without
+ congruence arithmetic. */
+ register int i, j;
+ int hits = 0, good_rules[N_VERTEX_RULES], n_good = 0;
+ unsigned long
+ vertex_hash = 0, lower_bits_mask = ~(VT_TOTAL_MASK << VT_BITS * (vertex->n_tiles - 1));
+ unsigned new_rule_mask = 0;
+
+ for (i = 0; i < N_VERTEX_RULES; i++)
+ if (vertex->n_tiles >= vertex_rules[i].n_tiles)
+ vertex->rule_mask &= ~(1 << i);
+ else if (vertex->rule_mask & 1 << i)
+ good_rules[n_good++] = i;
+ for (i = 0; i < vertex->n_tiles; i++)
+ vertex_hash |= (unsigned long) vertex->tiles[i] << (VT_BITS * i);
+
+ for (j = 0; j < n_good; j++) {
+ unsigned long rule_hash = 0;
+ vertex_rule_c *vr = vertex_rules + good_rules[j];
+
+ for (i = 0; i < vertex->n_tiles; i++)
+ rule_hash |= (unsigned long) vr->tiles[i] << (VT_BITS * i);
+ if (rule_hash == vertex_hash) {
+ if (matches != 0) {
+ matches[hits].rule = good_rules[j];
+ matches[hits].pos = 0;
+ }
+ hits++;
+ if (first_only)
+ return hits;
+ else
+ new_rule_mask |= 1 << good_rules[j];
+ }
+ for (i = vr->n_tiles - 1; i > 0; i--) {
+ rule_hash = vr->tiles[i] | (rule_hash & lower_bits_mask) << VT_BITS;
+ if (vertex_hash == rule_hash) {
+ if (matches != 0) {
+ matches[hits].rule = good_rules[j];
+ matches[hits].pos = i;
+ }
+ hits++;
+ if (first_only)
+ return hits;
+ else
+ new_rule_mask |= 1 << good_rules[j];
+ }
+ }
+ }
+ vertex->rule_mask = new_rule_mask;
+ return hits;
+}
+
+
+/*-
+ * find_completions finds the possible ways to add a tile to a vertex.
+ * The return values is the number of such possibilities. You must
+ * first call match_rules to produce matches and n_matches. sides
+ * specifies which side of the vertex to extend and can be S_LEFT or
+ * S_RIGHT. If results is non-null, it should point to an array large
+ * enough to contain the results, which will be stored there.
+ * MAX_COMPL elements will always suffice. If first_only is true we
+ * stop as soon as we find one possibility (NOT USED).
+ */
+#define MAX_COMPL 2
+
+static int
+find_completions(fringe_node_c * vertex, rule_match_c * matches, int n_matches,
+ unsigned side, vertex_type_c * results /*, int first_only */ )
+{
+ int n_res = 0, cont;
+ register int i, j;
+ vertex_type_c buf[MAX_COMPL];
+
+ if (results == 0)
+ results = buf;
+ if (n_matches <= 0)
+ return 0;
+ for (i = 0; i < n_matches; i++) {
+ vertex_rule_c *rule = vertex_rules + matches[i].rule;
+ int pos = (matches[i].pos
+ + (side == S_RIGHT ? vertex->n_tiles : rule->n_tiles - 1))
+ % rule->n_tiles;
+ vertex_type_c vtype = rule->tiles[pos];
+
+ cont = 1;
+ for (j = 0; j < n_res; j++)
+ if (vtype == results[j]) {
+ cont = 0;
+ break;
+ }
+ if (cont)
+ results[n_res++] = vtype;
+ }
+ return n_res;
+}
+
+
+/*-
+ * Draw a tile on the display. Vertices must be given in a
+ * counterclockwise order. vtype is the vertex type of v1 (and thus
+ * also gives the tile type).
+ */
+static void
+draw_tile(fringe_node_c * v1, fringe_node_c * v2,
+ fringe_node_c * v3, fringe_node_c * v4,
+ vertex_type_c vtype, ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ tiling_c *tp = &tilings[MI_SCREEN(mi)];
+ XPoint pts[5];
+ vertex_type_c corner = vtype & VT_CORNER_MASK;
+
+ if (v1->off_screen && v2->off_screen && v3->off_screen && v4->off_screen)
+ return;
+ pts[corner] = v1->loc;
+ pts[VT_RIGHT(corner)] = v2->loc;
+ pts[VT_FAR(corner)] = v3->loc;
+ pts[VT_LEFT(corner)] = v4->loc;
+ pts[4] = pts[0];
+ if (MI_NPIXELS(mi) > 2) {
+ if ((vtype & VT_TYPE_MASK) == VT_THICK)
+ XSetForeground(display, gc, MI_PIXEL(mi, tp->thick_color));
+ else
+ XSetForeground(display, gc, MI_PIXEL(mi, tp->thin_color));
+ } else
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+ XFillPolygon(display, window, gc, pts, 4, Convex, CoordModeOrigin);
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XDrawLines(display, window, gc, pts, 5, CoordModeOrigin);
+
+ if (ammann) {
+ /* Draw some Ammann lines for debugging purposes. This will probably
+ fail miserably on a b&w display. */
+
+ if ((vtype & VT_TYPE_MASK) == VT_THICK) {
+ static float r = .0;
+
+ if (r == .0) {
+ float pi10 = 2 * atan(1.) / 5;
+
+ r = 1 - sin(pi10) / (2 * sin(3 * pi10));
+ }
+ if (MI_NPIXELS(mi) > 2)
+ XSetForeground(display, gc, MI_PIXEL(mi, tp->thin_color));
+ else {
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+ XSetLineAttributes(display, gc, 1, LineOnOffDash, CapNotLast, JoinMiter);
+ }
+ XDrawLine(display, window, gc,
+ (int) (r * pts[3].x + (1 - r) * pts[0].x + .5),
+ (int) (r * pts[3].y + (1 - r) * pts[0].y + .5),
+ (int) (r * pts[1].x + (1 - r) * pts[0].x + .5),
+ (int) (r * pts[1].y + (1 - r) * pts[0].y + .5));
+ if (MI_NPIXELS(mi) <= 2)
+ XSetLineAttributes(display, gc, 1, LineSolid, CapNotLast, JoinMiter);
+ } else {
+ if (MI_NPIXELS(mi) > 2)
+ XSetForeground(display, gc, MI_PIXEL(mi, tp->thick_color));
+ else {
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+ XSetLineAttributes(display, gc, 1, LineOnOffDash, CapNotLast, JoinMiter);
+ }
+ XDrawLine(display, window, gc,
+ (int) ((pts[3].x + pts[2].x) / 2 + .5),
+ (int) ((pts[3].y + pts[2].y) / 2 + .5),
+ (int) ((pts[1].x + pts[2].x) / 2 + .5),
+ (int) ((pts[1].y + pts[2].y) / 2 + .5));
+ if (MI_NPIXELS(mi) <= 2)
+ XSetLineAttributes(display, gc, 1, LineSolid, CapNotLast, JoinMiter);
+ }
+ }
+}
+
+/*-
+ * Update the status of this vertex on the forced vertex queue. If
+ * the vertex has become untileable set tp->done. This is supposed
+ * to detect dislocations -- never call this routine with a completely
+ * tiled vertex.
+ *
+ * Check for untileable vertices in check_vertex and stop tiling as
+ * soon as one finds one. I don't know if it is possible to run out
+ * of forced vertices while untileable vertices exist (or will
+ * cavities inevitably appear). If this can happen, add_random_tile
+ * might get called with an untileable vertex, causing ( n <= 1).
+ * (This is what the tp->done checks for).
+ *
+ * A MI_PAUSE celebrates the dislocation.
+ */
+static void
+check_vertex(ModeInfo * mi, fringe_node_c * vertex, tiling_c * tp)
+{
+ rule_match_c hits[MAX_TILES_PER_VERTEX * N_VERTEX_RULES];
+ int n_hits = match_rules(vertex, hits, False);
+ unsigned forced_sides = 0;
+
+ if (vertex->rule_mask == 0) {
+ tp->done = True;
+ if (MI_WIN_IS_VERBOSE(mi)) {
+ (void) fprintf(stderr, "Dislocation occured!\n");
+ }
+ MI_PAUSE(mi) = CELEBRATE; /* Should be able to recover */
+ }
+ if (1 == find_completions(vertex, hits, n_hits, S_LEFT, 0 /*, False */ ))
+ forced_sides |= S_LEFT;
+ if (1 == find_completions(vertex, hits, n_hits, S_RIGHT, 0 /*, False */ ))
+ forced_sides |= S_RIGHT;
+ if (forced_sides == 0) {
+ if (vertex->list_ptr != 0) {
+ forced_node_c *node = *vertex->list_ptr;
+
+ *vertex->list_ptr = node->next;
+ if (node->next != 0)
+ node->next->vertex->list_ptr = vertex->list_ptr;
+ (void) free((void *) node);
+ tp->forced.n_nodes--;
+ if (!vertex->off_screen)
+ tp->forced.n_visible--;
+ vertex->list_ptr = 0;
+ }
+ } else {
+ forced_node_c *node;
+
+ if (vertex->list_ptr == 0) {
+ node = ALLOC_NODE(forced_node_c);
+ node->vertex = vertex;
+ node->next = tp->forced.first;
+ if (tp->forced.first != 0)
+ tp->forced.first->vertex->list_ptr = &(node->next);
+ tp->forced.first = node;
+ vertex->list_ptr = &(tp->forced.first);
+ tp->forced.n_nodes++;
+ if (!vertex->off_screen)
+ tp->forced.n_visible++;
+ } else
+ node = *vertex->list_ptr;
+ node->forced_sides = forced_sides;
+ }
+}
+
+
+/*-
+ * Delete this vertex. If the vertex is a member of the forced vertex queue,
+ * also remove that entry. We assume that the vertex is no longer
+ * connected to the fringe. Note that tp->fringe.nodes must not point to
+ * the vertex being deleted.
+ */
+static void
+delete_vertex(ModeInfo * mi, fringe_node_c * vertex, tiling_c * tp)
+{
+ if (tp->fringe.nodes == vertex) {
+ tp->done = True;
+ if (MI_WIN_IS_VERBOSE(mi)) {
+ (void) fprintf(stderr, "Weirdness in delete_penrose()\n");
+ (void) fprintf(stderr, "tp->fringe.nodes == vertex\n");
+ }
+ MI_PAUSE(mi) = CELEBRATE;
+ }
+ if (vertex->list_ptr != 0) {
+ forced_node_c *node = *vertex->list_ptr;
+
+ *vertex->list_ptr = node->next;
+ if (node->next != 0)
+ node->next->vertex->list_ptr = vertex->list_ptr;
+ (void) free((void *) node);
+ tp->forced.n_nodes--;
+ if (!vertex->off_screen)
+ tp->forced.n_visible--;
+ }
+ if (!vertex->off_screen)
+ tp->fringe.n_nodes--;
+ (void) free((void *) vertex);
+}
+
+
+/*-
+ * Check whether the addition of a tile of type vtype would completely fill
+ * the space available at vertex.
+ */
+static int
+fills_vertex(ModeInfo * mi, vertex_type_c vtype, fringe_node_c * vertex)
+{
+ return
+ (vertex_dir(mi, vertex, S_LEFT) - vertex_dir(mi, vertex, S_RIGHT)
+ - vtype_angle(vtype)) % 10 == 0;
+}
+
+
+/*-
+ * If you were to add a tile of type vtype to a specified side of
+ * vertex, fringe_changes tells you which other vertices it would
+ * attach to. The addresses of these vertices will be stored in the
+ * last three arguments. Null is stored if the corresponding vertex
+ * would need to be allocated.
+ *
+ * The function also analyzes which vertices would be swallowed by the tiling
+ * and thus cut off from the fringe. The result is returned as a bit pattern.
+ */
+#define FC_BAG 1 /* Total enclosure. Should never occur. */
+#define FC_NEW_RIGHT 2
+#define FC_NEW_FAR 4
+#define FC_NEW_LEFT 8
+#define FC_NEW_MASK 0xe
+#define FC_CUT_THIS 0x10
+#define FC_CUT_RIGHT 0x20
+#define FC_CUT_FAR 0x40
+#define FC_CUT_LEFT 0x80
+#define FC_CUT_MASK 0xf0
+#define FC_TOTAL_MASK 0xff
+
+static unsigned
+fringe_changes(ModeInfo * mi, fringe_node_c * vertex,
+ unsigned side, vertex_type_c vtype,
+ fringe_node_c ** right, fringe_node_c ** far,
+ fringe_node_c ** left)
+{
+ fringe_node_c *v, *f = NULL;
+ unsigned result = FC_NEW_FAR; /* We clear this later if necessary. */
+
+ if (far)
+ *far = 0;
+ if (fills_vertex(mi, vtype, vertex)) {
+ result |= FC_CUT_THIS;
+ } else if (side == S_LEFT) {
+ result |= FC_NEW_RIGHT;
+ if (right)
+ *right = 0;
+ } else {
+ result |= FC_NEW_LEFT;
+ if (left)
+ *left = 0;
+ }
+
+ if (!(result & FC_NEW_LEFT)) {
+ v = vertex->next;
+ if (left)
+ *left = v;
+ if (fills_vertex(mi, VT_LEFT(vtype), v)) {
+ result = (result & ~FC_NEW_FAR) | FC_CUT_LEFT;
+ f = v->next;
+ if (far)
+ *far = f;
+ }
+ }
+ if (!(result & FC_NEW_RIGHT)) {
+ v = vertex->prev;
+ if (right)
+ *right = v;
+ if (fills_vertex(mi, VT_RIGHT(vtype), v)) {
+ result = (result & ~FC_NEW_FAR) | FC_CUT_RIGHT;
+ f = v->prev;
+ if (far)
+ *far = f;
+ }
+ }
+ if (!(result & FC_NEW_FAR)
+ && fills_vertex(mi, VT_FAR(vtype), f)) {
+ result |= FC_CUT_FAR;
+ result &= (~FC_NEW_LEFT & ~FC_NEW_RIGHT);
+ if (right && (result & FC_CUT_LEFT))
+ *right = f->next;
+ if (left && (result & FC_CUT_RIGHT))
+ *left = f->prev;
+ }
+ if (((result & FC_CUT_LEFT) && (result & FC_CUT_RIGHT))
+ || ((result & FC_CUT_THIS) && (result & FC_CUT_FAR)))
+ result |= FC_BAG;
+ return result;
+}
+
+
+/* A couple of lesser helper functions for add_tile. */
+static void
+add_vtype(fringe_node_c * vertex, unsigned side, vertex_type_c vtype)
+{
+ if (side == S_RIGHT)
+ vertex->tiles[vertex->n_tiles++] = vtype;
+ else {
+ register int i;
+
+ for (i = vertex->n_tiles; i > 0; i--)
+ vertex->tiles[i] = vertex->tiles[i - 1];
+ vertex->tiles[0] = vtype;
+ vertex->n_tiles++;
+ }
+}
+
+static fringe_node_c *
+alloc_vertex(ModeInfo * mi, angle_c dir, fringe_node_c * from, tiling_c * tp)
+{
+ fringe_node_c *v = ALLOC_NODE(fringe_node_c);
+
+ if (v == 0) {
+ tp->done = True;
+ if (MI_WIN_IS_VERBOSE(mi)) {
+ (void) fprintf(stderr, "Weirdness in alloc_vertex()\n");
+ (void) fprintf(stderr, "v = 0\n");
+ }
+ MI_PAUSE(mi) = CELEBRATE;
+ }
+ *v = *from;
+ add_unit_vec(dir, v->fived);
+ v->loc = fived_to_loc(v->fived, tp);
+ if (v->loc.x < 0 || v->loc.y < 0
+ || v->loc.x >= tp->width || v->loc.y >= tp->height) {
+ v->off_screen = True;
+ if (v->loc.x < -tp->width || v->loc.y < -tp->height
+ || v->loc.x >= 2 * tp->width || v->loc.y >= 2 * tp->height)
+ tp->done = True;
+ } else {
+ v->off_screen = False;
+ tp->fringe.n_nodes++;
+ }
+ v->n_tiles = 0;
+ v->rule_mask = (1 << N_VERTEX_RULES) - 1;
+ v->list_ptr = 0;
+ return v;
+}
+
+/*-
+ * Add a tile described by vtype to the side of vertex. This must be
+ * allowed by the rules -- we do not check it here. New vertices are
+ * allocated as necessary. The fringe and the forced vertex pool are updated.
+ * The new tile is drawn on the display.
+ *
+ * One thing we do check here is whether the new tile causes an untiled
+ * area to become enclosed by the tiling. If this would happen, the tile
+ * is not added. The return value is true iff a tile was added.
+ */
+static int
+add_tile(ModeInfo * mi,
+ fringe_node_c * vertex, unsigned side, vertex_type_c vtype)
+{
+ tiling_c *tp = &tilings[MI_SCREEN(mi)];
+
+ fringe_node_c
+ * left = 0,
+ *right = 0,
+ *far = 0,
+ *node;
+ unsigned fc = fringe_changes(mi, vertex, side, vtype, &right, &far, &left);
+
+ vertex_type_c
+ ltype = VT_LEFT(vtype),
+ rtype = VT_RIGHT(vtype),
+ ftype = VT_FAR(vtype);
+
+ /* By our conventions vertex->next lies to the left of vertex and
+ vertex->prev to the right. */
+
+ /* This should never occur. */
+ if (fc & FC_BAG) {
+ tp->done = True;
+ if (MI_WIN_IS_VERBOSE(mi)) {
+ (void) fprintf(stderr, "Weirdness in add_tile()\n");
+ (void) fprintf(stderr, "fc = %d, FC_BAG = %d\n", fc, FC_BAG);
+ }
+ }
+ if (side == S_LEFT) {
+ if (right == 0)
+ right = alloc_vertex(mi,
+ vertex_dir(mi, vertex, S_LEFT) - vtype_angle(vtype), vertex, tp);
+ if (far == 0)
+ far = alloc_vertex(mi,
+ vertex_dir(mi, left, S_RIGHT) + vtype_angle(ltype), left, tp);
+ } else {
+ if (left == 0)
+ left = alloc_vertex(mi,
+ vertex_dir(mi, vertex, S_RIGHT) + vtype_angle(vtype), vertex, tp);
+ if (far == 0)
+ far = alloc_vertex(mi,
+ vertex_dir(mi, right, S_LEFT) - vtype_angle(rtype), right, tp);
+ }
+
+ /* Having allocated the new vertices, but before joining them with
+ the rest of the fringe, check if vertices with same coordinates
+ already exist. If any such are found, give up. */
+ node = tp->fringe.nodes;
+ do {
+ if (((fc & FC_NEW_LEFT) && fived_equal(node->fived, left->fived))
+ || ((fc & FC_NEW_RIGHT) && fived_equal(node->fived, right->fived))
+ || ((fc & FC_NEW_FAR) && fived_equal(node->fived, far->fived))) {
+ /* Better luck next time. */
+ if (fc & FC_NEW_LEFT)
+ delete_vertex(mi, left, tp);
+ if (fc & FC_NEW_RIGHT)
+ delete_vertex(mi, right, tp);
+ if (fc & FC_NEW_FAR)
+ delete_vertex(mi, far, tp);
+ return False;
+ }
+ node = node->next;
+ } while (node != tp->fringe.nodes);
+
+ /* Rechain. */
+ if (!(fc & FC_CUT_THIS))
+ if (side == S_LEFT) {
+ vertex->next = right;
+ right->prev = vertex;
+ } else {
+ vertex->prev = left;
+ left->next = vertex;
+ }
+ if (!(fc & FC_CUT_FAR)) {
+ if (!(fc & FC_CUT_LEFT)) {
+ far->next = left;
+ left->prev = far;
+ }
+ if (!(fc & FC_CUT_RIGHT)) {
+ far->prev = right;
+ right->next = far;
+ }
+ }
+ draw_tile(vertex, right, far, left, vtype, mi);
+
+ /* Delete vertices that are no longer on the fringe. Check the others. */
+ if (fc & FC_CUT_THIS) {
+ tp->fringe.nodes = far;
+ delete_vertex(mi, vertex, tp);
+ } else {
+ add_vtype(vertex, side, vtype);
+ check_vertex(mi, vertex, tp);
+ tp->fringe.nodes = vertex;
+ }
+ if (fc & FC_CUT_FAR)
+ delete_vertex(mi, far, tp);
+ else {
+ add_vtype(far, fc & FC_CUT_RIGHT ? S_LEFT : S_RIGHT, ftype);
+ check_vertex(mi, far, tp);
+ }
+ if (fc & FC_CUT_LEFT)
+ delete_vertex(mi, left, tp);
+ else {
+ add_vtype(left, fc & FC_CUT_FAR ? S_LEFT : S_RIGHT, ltype);
+ check_vertex(mi, left, tp);
+ }
+ if (fc & FC_CUT_RIGHT)
+ delete_vertex(mi, right, tp);
+ else {
+ add_vtype(right, fc & FC_CUT_FAR ? S_RIGHT : S_LEFT, rtype);
+ check_vertex(mi, right, tp);
+ }
+ return True;
+}
+
+
+/*-
+ * Add a forced tile to a given forced vertex. Basically an easy job,
+ * since we know what to add. But it might fail if adding the tile
+ * would cause some untiled area to become enclosed. There is also another
+ * more exotic culprit: we might have a dislocation. Fortunately, they
+ * are very rare (the PRL article reported that perfect tilings of over
+ * 2^50 tiles had been generated). There is a version of the algorithm
+ * that doesn't produce dislocations, but it's a lot hairier than the
+ * simpler version I used.
+ */
+static int
+add_forced_tile(ModeInfo * mi, forced_node_c * node)
+{
+ tiling_c *tp = &tilings[MI_SCREEN(mi)];
+ unsigned side;
+ vertex_type_c vtype;
+ rule_match_c hits[MAX_TILES_PER_VERTEX * N_VERTEX_RULES];
+ int n;
+
+ if (node->forced_sides == (S_LEFT | S_RIGHT))
+ side = NRAND(2) ? S_LEFT : S_RIGHT;
+ else
+ side = node->forced_sides;
+ n = match_rules(node->vertex, hits, True);
+ n = find_completions(node->vertex, hits, n, side, &vtype /*, True */ );
+ if (n <= 0) {
+ tp->done = True;
+ if (MI_WIN_IS_VERBOSE(mi)) {
+ (void) fprintf(stderr, "Weirdness in add_forced_tile()\n");
+ (void) fprintf(stderr, "n = %d\n", n);
+ }
+ }
+ return add_tile(mi, node->vertex, side, vtype);
+}
+
+
+/*-
+ * Whether the addition of a tile of vtype on the given side of vertex
+ * would conform to the rules. The efficient way to do this would be
+ * to add the new tile and then use the same type of search as in
+ * match_rules. However, this function is not a performance
+ * bottleneck (only needed for random tile additions, which are
+ * relatively infrequent), so I will settle for a simpler implementation.
+ */
+static int
+legal_move(fringe_node_c * vertex, unsigned side, vertex_type_c vtype)
+{
+ rule_match_c hits[MAX_TILES_PER_VERTEX * N_VERTEX_RULES];
+ vertex_type_c legal_vt[MAX_COMPL];
+ int n_hits, n_legal, i;
+
+ n_hits = match_rules(vertex, hits, False);
+ n_legal = find_completions(vertex, hits, n_hits, side, legal_vt /*, False */ );
+ for (i = 0; i < n_legal; i++)
+ if (legal_vt[i] == vtype)
+ return True;
+ return False;
+}
+
+
+/*-
+ * Add a randomly chosen tile to a given vertex. This requires more checking
+ * as we must make sure the new tile conforms to the vertex rules at every
+ * vertex it touches. */
+static void
+add_random_tile(fringe_node_c * vertex, ModeInfo * mi)
+{
+ fringe_node_c *right, *left, *far;
+ int i, j, n, n_hits, n_good;
+ unsigned side, fc, no_good, s;
+ vertex_type_c vtypes[MAX_COMPL];
+ rule_match_c hits[MAX_TILES_PER_VERTEX * N_VERTEX_RULES];
+ tiling_c *tp = &tilings[MI_SCREEN(mi)];
+
+ if (MI_NPIXELS(mi) > 2) {
+ tp->thick_color = NRAND(MI_NPIXELS(mi));
+ /* Insure good contrast */
+ tp->thin_color = (NRAND(2 * MI_NPIXELS(mi) / 3) + tp->thick_color +
+ MI_NPIXELS(mi) / 6) % MI_NPIXELS(mi);
+ } else
+ tp->thick_color = tp->thin_color = MI_WIN_WHITE_PIXEL(mi);
+ n_hits = match_rules(vertex, hits, False);
+ side = NRAND(2) ? S_LEFT : S_RIGHT;
+ n = find_completions(vertex, hits, n_hits, side, vtypes /*, False */ );
+ /* One answer would mean a forced tile. */
+ if (n <= 0) {
+ tp->done = True;
+ if (MI_WIN_IS_VERBOSE(mi)) {
+ (void) fprintf(stderr, "Weirdness in add_random_tile()\n");
+ (void) fprintf(stderr, "n = %d\n", n);
+ }
+ }
+ no_good = 0;
+ n_good = n;
+ for (i = 0; i < n; i++) {
+ fc = fringe_changes(mi, vertex, side, vtypes[i], &right, &far, &left);
+ if (fc & FC_BAG) {
+ tp->done = True;
+ if (MI_WIN_IS_VERBOSE(mi)) {
+ (void) fprintf(stderr, "Weirdness in add_random_tile()\n");
+ (void) fprintf(stderr, "fc = %d, FC_BAG = %d\n", fc, FC_BAG);
+ }
+ }
+ if (right) {
+ s = (((fc & FC_CUT_FAR) && (fc & FC_CUT_LEFT)) ? S_RIGHT : S_LEFT);
+ if (!legal_move(right, s, VT_RIGHT(vtypes[i]))) {
+ no_good |= (1 << i);
+ n_good--;
+ continue;
+ }
+ }
+ if (left) {
+ s = (((fc & FC_CUT_FAR) && (fc & FC_CUT_RIGHT)) ? S_LEFT : S_RIGHT);
+ if (!legal_move(left, s, VT_LEFT(vtypes[i]))) {
+ no_good |= (1 << i);
+ n_good--;
+ continue;
+ }
+ }
+ if (far) {
+ s = ((fc & FC_CUT_LEFT) ? S_RIGHT : S_LEFT);
+ if (!legal_move(far, s, VT_FAR(vtypes[i]))) {
+ no_good |= (1 << i);
+ n_good--;
+ }
+ }
+ }
+ if (n_good <= 0) {
+ tp->done = True;
+ if (MI_WIN_IS_VERBOSE(mi)) {
+ (void) fprintf(stderr, "Weirdness in add_random_tile()\n");
+ (void) fprintf(stderr, "n_good = %d\n", n_good);
+ }
+ }
+ n = NRAND(n_good);
+ for (i = j = 0; i <= n; i++, j++)
+ while (no_good & (1 << j))
+ j++;
+
+ i = add_tile(mi, vertex, side, vtypes[j - 1]);
+ if (!i) {
+ tp->done = True;
+ if (MI_WIN_IS_VERBOSE(mi)) {
+ (void) fprintf(stderr, "Weirdness in add_random_tile()\n");
+ (void) fprintf(stderr, "i = %d\n", i);
+ }
+ }
+}
+
+/* One step of the growth algorithm. */
+void
+draw_penrose(ModeInfo * mi)
+{
+ tiling_c *tp = &tilings[MI_SCREEN(mi)];
+ int i = 0, n;
+ forced_node_c *p = tp->forced.first;
+
+ if (tp->done || tp->failures >= 100) {
+ init_penrose(mi);
+ return;
+ }
+ /* Check for the initial "2-gon". */
+ if (tp->fringe.nodes->prev == tp->fringe.nodes->next) {
+ vertex_type_c vtype = VT_TOTAL_MASK & LRAND();
+
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+ (void) add_tile(mi, tp->fringe.nodes, S_LEFT, vtype);
+ return;
+ }
+ /* No visible nodes left. */
+ if (tp->fringe.n_nodes == 0) {
+ tp->done = True;
+ MI_PAUSE(mi) = COMPLETION; /* Just finished drawing */
+ return;
+ }
+ if (tp->forced.n_visible > 0 && tp->failures < 10) {
+ n = NRAND(tp->forced.n_visible);
+ for (;;) {
+ while (p->vertex->off_screen)
+ p = p->next;
+ if (i++ < n)
+ p = p->next;
+ else
+ break;
+ }
+ } else if (tp->forced.n_nodes > 0) {
+ n = NRAND(tp->forced.n_nodes);
+ while (i++ < n)
+ p = p->next;
+ } else {
+ fringe_node_c *p = tp->fringe.nodes;
+
+ n = NRAND(tp->fringe.n_nodes);
+ i = 0;
+ for (; i <= n; i++)
+ do {
+ p = p->next;
+ } while (p->off_screen);
+ add_random_tile(p, mi);
+ tp->failures = 0;
+ return;
+ }
+ if (add_forced_tile(mi, p))
+ tp->failures = 0;
+ else
+ tp->failures++;
+}
+
+
+/* Total clean-up. */
+void
+release_penrose(ModeInfo * mi)
+{
+ if (tilings != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ tiling_c *tp = &tilings[screen];
+
+ release_screen(tp);
+ }
+ (void) free((void *) tilings);
+ tilings = NULL;
+ }
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)petal.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * petal.c - mathematical flowers for xlock, the X Window System lockscreen.
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 12-Aug-95: xlock version
+ * Jan-95: xscreensaver version (Jamie Zawinski <jwz@netscape.com>)
+ * 24-Jun-94: X11 version (Dale Moore <Dale.Moore@cs.cmu.edu>)
+ * Based on a program for some old PDP-11 Graphics
+ * Display Processors at CMU.
+ */
+
+/*-
+ * original copyright
+ * Copyright \(co 1994, by Carnegie Mellon University. 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 implied
+ * warranty.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "petal"
+#define HACK_INIT init_petal
+#define HACK_DRAW draw_petal
+#define DEF_DELAY 10000
+#define DEF_BATCHCOUNT -500
+#define DEF_CYCLES 400
+#define DEF_NCOLORS 64
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt petal_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+#define TWOPI (2.0*M_PI)
+
+/*-
+ * If MAXLINES is too big, we might not be able to get it
+ * to the X server in the 2byte length field.
+ * Must be less * than 16k
+ */
+#define MAXLINES (16*1024)
+
+/*-
+ * If the petal has only this many lines, it must be ugly and we dont
+ * want to see it.
+ */
+#define MINLINES 5
+
+typedef struct {
+ int width;
+ int height;
+ int lines;
+ int time;
+ int redraw;
+ int npoints;
+ XPoint *points;
+} petalstruct;
+
+static petalstruct *petals = NULL;
+
+/*-
+ * Macro:
+ * sine
+ * cosine
+ * Description:
+ * Assume that degrees is .. oh 360... meaning that
+ * there are 360 degress in a circle. Then this function
+ * would return the sin of the angle in degrees. But lets
+ * say that they are really big degrees, with 4 big degrees
+ * the same as one regular degree. Then this routine
+ * would be called mysin(t, 90) and would return sin(t degrees * 4)
+ */
+#define sine(t, degrees) sin(t * TWOPI / (degrees))
+#define cosine(t, degrees) cos(t * TWOPI / (degrees))
+
+/*-
+ * Macro:
+ * rand_range
+ * Description:
+ * Return a random number between a inclusive and b exclusive.
+ * rand (3, 6) returns 3 or 4 or 5, but not 6.
+ */
+#define rand_range(a, b) (a + NRAND(b - a))
+
+static int
+gcd(int m, int n)
+/*-
+ * Greatest Common Divisor (also Greatest common factor).
+ */
+{
+ int r;
+
+ for (;;) {
+ r = m % n;
+ if (r == 0)
+ return (n);
+ m = n;
+ n = r;
+ }
+}
+
+static int
+numlines(int a, int b, int d)
+/*-
+ * Description:
+ *
+ * Given parameters a and b, how many lines will we have to draw?
+ *
+ * Algorithm:
+ *
+ * This algorithm assumes that r = sin (theta * a), where we
+ * evaluate theta on multiples of b.
+ *
+ * LCM (i, j) = i * j / GCD (i, j);
+ *
+ * So, at LCM (b, 360) we start over again. But since we
+ * got to LCM (b, 360) by steps of b, the number of lines is
+ * LCM (b, 360) / b.
+ *
+ * If a is odd, then at 180 we cross over and start the
+ * negative. Someone should write up an elegant way of proving
+ * this. Why? Because I'm not convinced of it myself.
+ *
+ */
+{
+#define odd(x) (x & 1)
+#define even(x) (!odd(x))
+ if (odd(a) && odd(b) && even(d))
+ d /= 2;
+ return (d / gcd(d, b));
+#undef odd
+}
+
+static int
+compute_petal(XPoint * points, int lines, int sizex, int sizey)
+/*-
+ * Description:
+ *
+ * Basically, it's combination spirograph and string art.
+ * Instead of doing lines, we just use a complex polygon,
+ * and use an even/odd rule for filling in between.
+ *
+ * The spirograph, in mathematical terms is a polar
+ * plot of the form r = sin (theta * c);
+ * The string art of this is that we evaluate that
+ * function only on certain multiples of theta. That is
+ * we let theta advance in some random increment. And then
+ * we draw a straight line between those two adjacent points.
+ *
+ * Eventually, the lines will start repeating themselves
+ * if we've evaluated theta on some rational portion of the
+ * whole.
+ *
+ * The number of lines generated is limited to the
+ * ratio of the increment we put on theta to the whole.
+ * If we say that there are 360 degrees in a circle, then we
+ * will never have more than 360 lines.
+ *
+ * Return:
+ *
+ * The number of points.
+ *
+ */
+{
+ int a, b, d; /* These describe a unique petal */
+
+ double r;
+ int theta = 0;
+ XPoint *p = points;
+ int count;
+ int npoints;
+
+ for (;;) {
+ d = lines;
+
+ a = rand_range(1, d);
+ b = rand_range(1, d);
+ npoints = numlines(a, b, d);
+ if (npoints >= MINLINES)
+ break;
+ }
+
+ /* it might be nice to try to move as much sin and cos computing
+ * (or at least the argument computing) out of the loop.
+ */
+ for (count = npoints; count--;) {
+ r = sine(theta * a, d);
+
+ /* Convert from polar to cartesian coordinates */
+ /* We could round the results, but coercing seems just fine */
+ p->x = (int) (sine(theta, d) * r * sizex + sizex);
+ p->y = (int) (cosine(theta, d) * r * sizey + sizey);
+
+ /* Advance index into array */
+ p++;
+
+ /* Advance theta */
+ theta += b;
+ theta %= d;
+ }
+
+ return (npoints);
+}
+
+static void
+random_petal(ModeInfo * mi)
+{
+ petalstruct *pp = &petals[MI_SCREEN(mi)];
+
+ pp->npoints = compute_petal(pp->points, pp->lines,
+ pp->width / 2, pp->height / 2);
+
+ if (MI_NPIXELS(mi) > 2)
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi),
+ MI_PIXEL(mi, NRAND(MI_NPIXELS(mi))));
+ XFillPolygon(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ pp->points, pp->npoints, Complex, CoordModeOrigin);
+}
+
+void
+init_petal(ModeInfo * mi)
+{
+ petalstruct *pp;
+
+ if (petals == NULL) {
+ if ((petals = (petalstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (petalstruct))) == NULL)
+ return;
+ }
+ pp = &petals[MI_SCREEN(mi)];
+
+ pp->lines = MI_BATCHCOUNT(mi);
+ if (pp->lines > MAXLINES)
+ pp->lines = MAXLINES;
+ else if (pp->lines < -MINLINES) {
+ if (pp->points) {
+ (void) free((void *) pp->points);
+ pp->points = NULL;
+ }
+ pp->lines = NRAND(-pp->lines - MINLINES + 1) + MINLINES;
+ } else if (pp->lines < MINLINES)
+ pp->lines = MINLINES;
+ if (!pp->points)
+ pp->points = (XPoint *) malloc(pp->lines * sizeof (XPoint));
+ pp->width = MI_WIN_WIDTH(mi);
+ pp->height = MI_WIN_HEIGHT(mi);
+
+ pp->redraw = 0;
+ pp->time = 0;
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WIN_WHITE_PIXEL(mi));
+
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+
+ random_petal(mi);
+}
+
+void
+draw_petal(ModeInfo * mi)
+{
+ petalstruct *pp = &petals[MI_SCREEN(mi)];
+
+ if (++pp->time > MI_CYCLES(mi))
+ init_petal(mi);
+ if (pp->redraw) {
+ XFillPolygon(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ pp->points, pp->npoints, Complex, CoordModeOrigin);
+ pp->redraw = 0;
+ }
+}
+
+void
+release_petal(ModeInfo * mi)
+{
+ if (petals != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ petalstruct *pp = &petals[screen];
+
+ if (pp->points)
+ (void) free((void *) pp->points);
+ }
+ (void) free((void *) petals);
+ petals = NULL;
+ }
+}
+
+void
+refresh_petal(ModeInfo * mi)
+{
+ petalstruct *pp = &petals[MI_SCREEN(mi)];
+
+ pp->redraw = 1;
+}
--- /dev/null
+/* XPM */
+static char * bat0[] = {
+"147 108 67 1",
+" c #000000000000",
+". c #090909090909",
+"X c #969696969696",
+"o c #9C9C9C9C9C9C",
+"O c #1E1E1E1E1E1E",
+"+ c #F0F0F0F0F0F0",
+"@ c #FFFFFFFFFFFF",
+"# c #C6C6C6C6C6C6",
+"$ c #474747474747",
+"% c #212121212121",
+"& c #E2E2E2E2E2E2",
+"* c #414141414141",
+"= c #0C0C0C0C0C0C",
+"- c #272727272727",
+"; c #AAAAAAAAAAAA",
+": c #808080808080",
+"> c #B4B4B4B4B4B4",
+", c #1A1A1A1A1A1A",
+"< c #DDDDDDDDDDDD",
+"1 c #EDEDEDEDEDED",
+"2 c #2A2A2A2A2A2A",
+"3 c #D7D7D7D7D7D7",
+"4 c #2C2C2C2C2C2C",
+"5 c #999999999999",
+"6 c #FBFBFBFBFBFB",
+"7 c #4A4A4A4A4A4A",
+"8 c #BDBDBDBDBDBD",
+"9 c #B2B2B2B2B2B2",
+"0 c #585858585858",
+"q c #C8C8C8C8C8C8",
+"w c #101010101010",
+"e c #151515151515",
+"r c #6C6C6C6C6C6C",
+"t c #C0C0C0C0C0C0",
+"y c #7F7F7F7F7F7F",
+"u c #3F3F3F3F3F3F",
+"i c #6B6B6B6B6B6B",
+"p c #868686868686",
+"a c #353535353535",
+"s c #F4F4F4F4F4F4",
+"d c #4D4D4D4D4D4D",
+"f c #5D5D5D5D5D5D",
+"g c #050505050505",
+"h c #EBEBEBEBEBEB",
+"j c #606060606060",
+"k c #A2A2A2A2A2A2",
+"l c #FFFF00000000",
+"L c #FFFF77777777",
+"z c #656565656565",
+"x c #7A7A7A7A7A7A",
+"c c #919191919191",
+"v c #6E6E70707070",
+"b c #A5A5A5A5A5A5",
+"n c #CECECECECECE",
+"m c #727272727272",
+"M c #515151515151",
+"N c #E6E6E6E6E6E6",
+"B c #D0D0D0D0D0D0",
+"V c #3B3B3B3B3B3B",
+"C c #BABABABABABA",
+"Z c #555555555555",
+"A c #888888888888",
+"S c #313131313131",
+"D c #ACACACACACAC",
+"F c #757575757575",
+"G c #8C8C8C8C8C8C",
+"H c #DADADADADADA",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" .Xo ",
+" O+@#$ ",
+" %&@@* %= ",
+" -&@; .:@> ",
+" ,<1 23@@2 ",
+" 4@2 5@@67 ",
+" 89 0&@@@q ",
+" w=eee r@t@@@@>% ",
+" %y9@@@@@@<u ipua=%@@@@@s df ",
+" gy@@h5ffffjki<@@@@@3@@@3l@zx@t= ",
+" =9@c%=vvvvvve<+llll9@@@bllln.m@t, ",
+" a+@Mvvvvvvvvv.N3lLLll@@BlLLl@t u+@2 ",
+" f@<avvvvvvvvO% m@lLLlq@1hlLLl>@, ,t@V ",
+" M@Cevvvvvv=Z#6@t061lll@ZA@llll;@, 3+2 ",
+" O+nvvvvvvvz@@@5c@@@3@@64 Z@&lll1&V; #& ",
+" ,s&,vvvvvvz@N0g S% t@@z D@@@1N@iF@7 .-sG ",
+" 5@4vvvvvvv3s- t@@q h@@@++5g=@n %$j@% ",
+" f@Zvvvvvvvw@> :@sZ @@&= j@y 0=B# ",
+" ghCvvvvvvvvv6> r@; O+3; b6 -02@f ",
+" i@2vvvvvvMxm&B x@k 7N<m 2@uvm bs ",
+" skvvvvvvx@@@@@M t@b X#qV &5v*aO@z ",
+" G@%vvvvvw1h2e<@F #@G >X#4 Dovvr Dhg ",
+" .1bvvvvvv7@i 4*g t@0 hj<4 D8vvFg-@u ",
+" u@OvvvvvvX@ t@7g@V3 CNgv7M &C ",
+" ;&vvvvvvvnN =&@4%@u& .1>vvwf rs, ",
+" ,@5vvvvvvvsD O+@ 7#f9 %@0vvvrge@0 ",
+" Ss-vvvvvvw@o a@@ AxDX ;@vvvva% #t ",
+" D<vvvvvvvvsZ Z@n q$#j io;@ivvvve$ :@ ",
+" B5vvvvvvvv6Z x@# Be@S ,6@@C.vvvvv- 4@S ",
+" 6ivvvvvvvvs0 D@:eBO+. D@N=vvvvvv-g=+j ",
+" w@2vvvvvvvvsk #@j,ny<g w1Hvvvvvvvvvv#5 ",
+" 7@%vvvvvvvvh> @@2%n>k o@*vvvvvvvuv>H ",
+" 01vvvvvvvvvo@ @1 jtNd a@yvvvvvvv-vm1 ",
+" bNvvvvv=.vv:@g 4@& f1@$ HXvvvvvvvdv2@% ",
+" bNgv,vvOgvv*@V m@; 0@@g q3vvvvvvv2w @j ",
+" ;#vvgvuvvvv.hD jH- r@H qHvvvvvvv.d 39 ",
+" DkvvvOgvvvvvD@, g 5@p 3kvvvvvvvvi ;q ",
+" Dbvvvz.0r0ev*@j =0. @mvvvvvvvvf=yn ",
+" Dkvvm@@@@@@o-Nt a@%vvvvvvvv-%i6, ",
+" Dkv.@@;2e7C@+h@V chvvvvvvvvv,*21e ",
+" Dkvy@x *<@@k #8vvvvvvvvv%c-@2 ",
+" DovsH .b@@2 e@MvvvvvvvvvgF=@Z ",
+" DD-@d B@t j@vvvvvvvvvvvk @M ",
+" ;Ha@% -N@S C6vvvvvvvvvvvA sf ",
+" x3:@ A@3. ,@DvvvvvvvvvvvX 6c ",
+" dHi@ a@q. f@Zvvvvvvvvvvvx #D ",
+" d&4@ u, DhgvvvvvvvvvvvXS59 ",
+" 71a@e @pvvvvvvvvvvvvZek9 ",
+" .@X@V F@evvvvvvvvvvvv0,o9 ",
+" @C@iOX %@Bvvvvvvvvvvvvvm4oC ",
+" @B@5S@ o@fvvvvvvvvvvvvv5wA@ ",
+" #tG3S@ ,+1vvvvvvvvvvvvvvm*Z@ ",
+" :Hu@7@ -n@8udM*gvvvvvvvvvi7$@ ",
+" a@m@i@ m= gH@@@@@@@@+nk*vvvvvXpa@- ",
+" -@N@t@ @- o@+:aO,fFG36@sAOvvr8S@a ",
+" .&@@@@ @O =ja ,d9@6uvCyOsa ",
+" y@@@@ 46 S3@VbzZNV ",
+" .9@@6 Xk -@<krfNa ",
+" ,@@@ w@* $@@D5@a ",
+" o@@;tH d@@1@S ",
+" a@@@hS k@H@0 ",
+" u@6AO ge -@@@k ",
+" +: cC f. t@@q ",
+" r@a $N* gH0 7C@@@p ",
+" F@x,=0>1* x<dMC@18@@4 ",
+" *n+sn: D6hqf i@; ",
+" gg . 8@M ",
+" ,@@4 ",
+" %+@q ",
+" f- 8#3y ",
+" ,@$%8+46Z ",
+" d@@@9 c+ ",
+" ZiO 47 "};
--- /dev/null
+/* XPM */
+static char * bat1[] = {
+"147 108 67 1",
+" c #000000000000",
+". c #1A1A1A1A1A1A",
+"X c #1C1C1C1C1C1C",
+"o c #A9A9A9A9A9A9",
+"O c #FFFFFFFFFFFF",
+"+ c #A1A1A1A1A1A1",
+"@ c #F9F9F9F9F9F9",
+"# c #3E3E3E3E3E3E",
+"$ c #AEAEAEAEAEAE",
+"% c #A7A7A7A7A7A7",
+"& c #3B3B3B3B3B3B",
+"* c #B9B9B9B9B9B9",
+"= c #E7E7E7E7E7E7",
+"- c #E8E8E8E8E8E8",
+"; c #2E2E2E2E2E2E",
+": c #7F7F7F7F7F7F",
+"> c #797979797979",
+", c #B7B7B7B7B7B7",
+"< c #656565656565",
+"1 c #262626262626",
+"2 c #BFBFBFBFBFBF",
+"3 c #B3B3B3B3B3B3",
+"4 c #515151515151",
+"5 c #0B0B0B0B0B0B",
+"6 c #171717171717",
+"7 c #D9D9D9D9D9D9",
+"8 c #4F4F4F4F4F4F",
+"9 c #050505050505",
+"0 c #EDEDEDEDEDED",
+"q c #373737373737",
+"w c #4A4A4A4A4A4A",
+"e c #C6C6C6C6C6C6",
+"r c #131313131313",
+"t c #8F8F8F8F8F8F",
+"y c #E1E1E1E1E1E1",
+"u c #636363636363",
+"i c #6B6B6B6B6B6B",
+"p c #585858585858",
+"a c #2B2B2B2B2B2B",
+"s c #737373737373",
+"d c #808080808080",
+"f c #8B8B8B8B8B8B",
+"g c #464646464646",
+"h c #9E9E9E9E9E9E",
+"j c #575757575757",
+"k c #202020202020",
+"l c #757575757575",
+"z c #CCCCCCCCCCCC",
+"x c #CBCBCBCBCBCB",
+"c c #F0F0F0F0F0F0",
+"v c #D6D6D6D6D6D6",
+"b c #999999999999",
+"n c #858585858585",
+"m c #404040404040",
+"M c #FFFF00000000",
+"L c #FFFF77777777",
+"N c #0E0E0E0E0E0E",
+"B c #DFDFDFDFDFDF",
+"V c #C1C1C1C1C1C1",
+"C c #959595959595",
+"Z c #878784848181",
+"A c #919191919191",
+"S c #5F5F5F5F5F5F",
+"D c #313131313131",
+"F c #6C6C6C6C6C6C",
+"G c #F6F6F6F6F6F6",
+"H c #D1D1D1D1D1D1",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" .X ",
+" oO+ ",
+" X@# ",
+" $% ",
+" &*=-; $: ",
+" >,<1+2 34 ",
+" 5; 5O678 9 ",
+" 0q=w qe2 ",
+" *$O rtOyu9 ",
+" i@O p0OOa ",
+" sO= u7OOOOd ",
+" r..66w$-,3fg hO, j=OOO@-o. ",
+" 9kql>2zxxx0c00cOO2+h0O:3O7,OOOOx1r ",
+" 6wf%v-3bnm#&#&qqaeOMM NBOOOVOOOOOO+ ",
+" rquh%xCsuX9ZZZZZZZZZZZ9O+MMMMMi%OOOOO+sOOO& ",
+" 9kd,h+swkNZZZZZZZZZZZZZZZZrOMMLLMM .OOOha tcOO& ",
+" 1j+3tirZZZZZZZZZZZZZZZ.Z.94AZZzMNLLMMM;OOOMMM SOp.g4X ",
+" NqSCC>w.ZZZZZZZZZZZZZZZZZZZZZmv@,j .OcsMMMM*OyMMLLMMDO89#>*7%8X ",
+" .F%ft#k9ZZZZZZZZZZZZZZZZZZZZZZZmOVa mVOOOGOcGcuMLLMrxONZZZZ;SheoS5 ",
+" ;h$ds6ZZZZZZZZZZZZZZZZZZZZZZZZZZZFOl 9a<Fkf0OOMMM,O-ZZZZZZZZZZX>zha ",
+" a<*Aw9ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ&OF 9+ eOA$Oe-2S9 ZZZZZZZZZZZZsH%k ",
+" Ng+3p6ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ5xi jh BO;eV N ZZZZZZZZZZZZZZi2n6 ",
+" 9>0%&ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ2A $8 1OO =< ZZZZZZZZZZZZZZZZlyt ",
+"514#9 Nt2>NZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZf* Vr f0%1-. 5D2OOhXZZZZZZZZZZZZZZZ9s$i ",
+"8h,=Hq gA>NZZZZN#ZZZ5rZZZZZZZZZZZZZZZZZZZZZZZZZ6=; m, oVj%: X*3l48%co9ZZZZZZZZZZZZZZZkdzp ",
+" lO. #V2 .ZZZZZZrZZZZ9ZZZZZZZZZZZZZZZZZZZZZZZZZ7+ Cu 4lvDOX fm X2@pZZZZZZZZZZZZZZZZqV*; ",
+" Fv u>mjCht8m6ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ#OX Br5vj*l+ 8c39ZZZZZZZZZZZZZZZZ#*o1 ",
+" GA+OBcOOGGOOGV8NZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ+o .7 uobnyX ;7xXZZZZZZZZZZZZZZZZZ>7F ",
+" oOOO%1 5<bBO=A1ZZZZZZZZZZZZZZZZZZZZZZZZZ1O; 4f VDvA$ %OwZZZZZZZZZZZZZZZZZ1zx1 ",
+" kOOOi rivO%&ZZZZZZZZZZZ6rNZZZZZZZZZ>G hXpH;B=D +-NZZZZZZZZZZZZZZZZZZgHfN ",
+" ;=OOO# #,@VmZZZZZZrsvcGc2n.ZZ4ZZZvC 6e znCH2 .@*ZZZZZZZZZZZZZZZZZZZ6+=j ",
+" k=x9$G rCOywZZZZ,O7tfn*OO+Z+rZkOp gd;Oavv4 nO5ZZZZZZZZZZZZZZZZZZZZ&H%5 ",
+" 7f Nvd 6COt9ZlOo 9>Ozu;ZpOD AD%$.B%6 aOXZZZZZZZZZZZZZZZZZZZZZZj2S ",
+" FB acor 4Oeacy5 jOFNZsO. $&OX<O% wO.ZZZZZZZZZZZZZZZZZZZZZZZ;e35 ",
+" 9V5 f@+g.5 8OyOl H*ZZ:B &Ctv vOa d=ZZZZZZZZZZZZZZZZZZZZZZZZZZi=g ",
+" ;n X>2=i COOD sONZee CuBSaO= .@:ZZZZZZZZZZZZZZZZZZZZZZZZZZZ1e+ ",
+" lg 69 wOOD 6OmZv: $p= sOo lOZZZZZZZZZZZZZZZZZZZZZZZZZZZZZNo3r ",
+" tN &O0r =+Z=s .zeA VOw .-tZZZZZZNZZZZ95ZZZZZZZZZZZZZZZZZZty; ",
+" %. N7o +vZOF wOOD O@. HOaZZZ.X5&5ZZ9a;5ZZZ9qZZ1ZZZZZZZZZZuyg ",
+" N r9 j0XO& FOv <O7 ap 96FzOdNZZZZZZZZZZZZZZZZZZ9ZZ6ZZZZZZ99ZZZlOk ",
+" 1@hO. ,O< eOF NyO0xOOOo.ZZZZZZZZZZZZZZZZZZZZZZZ5ZZZZZZZZZXZZhH6 ",
+" 9cOOX 9BO1 @@X X@OOOcaZZZZZZZZZZZZZZZZZZZZZZZ1ZZk.wA+x@G0+#ZZ#Oe ",
+" yOOX kOB kOV 8hjh@z4ZZZZZZZZZZZZZZZZZZZZZZ5ZsHc=**lpp%OOBd;wGs ",
+" zOOk XOd lOj 9AOerZZZZZZZZZZZZZZZZZZZ#b@e8N rm+OBVO1 ",
+" AO05 SXrc- ;2Ot9ZZZZZZZZZZZZZZZD2=fX XhOO$ ",
+" sOV NhS sO%ZZZZZZZZkXZZZ1oc:N jO@k 9 ",
+" #O; sOAZZZZZN9.ZZZlOf yO=OOH ",
+" 91 FO<ZZZZk9ZZ1v7q 9 5r;dOO%$Oi ",
+" $c.ZN5ZZZ#0,N 4z-0OOOO; *2 ",
+" rce9ZZZZ;@u 61 bO6 ,x ",
+" gO:ZZZkHS CO B: ",
+" N0oZZN=h 9-H #ON ",
+" FO5ZB% mOyX hh ",
+" 6Oq:79 8lr .N ",
+" 9Ov0. ",
+" zOl ",
+" zB9 ",
+" =z ",
+" DO* ",
+" hOl ",
+" vOq ",
+" qOb ",
+" fOm ",
+" 8OF ",
+" wOa ",
+" %n ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+static char * bat2[] = {
+"147 108 67 1",
+" c #000000000000",
+". c #060606060606",
+"X c #B4B4B4B4B4B4",
+"o c #929292929292",
+"O c #BABABABABABA",
+"+ c #FFFFFFFFFFFF",
+"@ c #D6D6D6D6D6D6",
+"# c #131313131313",
+"$ c #222222222222",
+"% c #DFDFDFDFDFDF",
+"& c #BFBFBFBFBFBF",
+"* c #565656565656",
+"= c #A1A1A1A1A1A1",
+"- c #9D9D9D9D9D9D",
+"; c #616161616161",
+": c #A5A5A5A5A5A5",
+"> c #C9C9C9C9C9C9",
+", c #E6E6E6E6E6E6",
+"< c #E3E3E3E3E3E3",
+"1 c #848484848484",
+"2 c #EFEFEFEFEFEF",
+"3 c #F0F0F0F0F0F0",
+"4 c #3F3F3F3F3F3F",
+"5 c #1B1B1B1B1B1B",
+"6 c #8B8B8B8B8B8B",
+"7 c #696969696969",
+"8 c #4B4B4B4B4B4B",
+"9 c #F5F5F5F5F5F5",
+"0 c #151515151515",
+"q c #8D8D8D8D8D8D",
+"w c #D9D9D9D9D9D9",
+"e c #949494949494",
+"r c #343434343434",
+"t c #3A3A3A3A3A3A",
+"y c #CECECECECECE",
+"u c #454545454545",
+"i c #0A0A0A0A0A0A",
+"p c #747474747474",
+"a c #595959595959",
+"s c #C7C7C7C7C7C7",
+"d c #515151515151",
+"f c #5D5D5D5D5D5D",
+"g c #C3C3C3C3C3C3",
+"h c #F8F8F8F8F8F8",
+"j c #E8E8E8E8E8E8",
+"k c #838383838383",
+"l c #0E0E0E0E0E0E",
+"z c #B2B2B2B2B2B2",
+"x c #414141414141",
+"c c #737373737373",
+"v c #D2D2D2D2D2D2",
+"b c #878784848181",
+"n c #A8A8A8A8A8A8",
+"m c #646464646464",
+"M c #6D6D6D6D6D6D",
+"N c #303030303030",
+"B c #292929292929",
+"V c #262626262626",
+"C c #7A7A7A7A7A7A",
+"Z c #7F7F7F7F7F7F",
+"A c #4C4C4C4C4C4C",
+"S c #1E1E1E1E1E1E",
+"D c #AEAEAEAEAEAE",
+"F c #FFFF00000000",
+"L c #FFFF77777777",
+"G c #989898989898",
+"H c #2D2D2D2D2D2D",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" .Xo. ",
+" O+@# ",
+" $%& ",
+" *=-#;+ ",
+" :+>,+<+* ",
+" 12$ .>++3; ",
+" 4,5 *,+++++6 ",
+" &7 8+6o++++90 ",
+" .q. we rty+9%u ",
+" i +$ 8+p3+a ",
+" .0 2# wsd<+d ",
+" +* f+oog+* ",
+" df #hjklq+o ",
+" u++O k+oi ",
+" z++8 *+%t ",
+" x++20 d<+c ",
+" X+vXibb7+6 ",
+" 4+1oybbb4ys$ ",
+" &X gnbbb.z+a il ",
+" 8+ibzmbbbbf3-. $++M ",
+" l+Nb41#$bbb8+@B chMjB V7V ",
+" 9CbbmfxVbbbNwhM 8h Zz 2++A ",
+" ewbb.a5Blbbb.e+yB a 5+i e+dn+N ",
+" A90bbbflbbbbbbt@+nS sa l+1 yg ",
+" i,rbbbl5bbbbbbbbm2+oi *g 5d. M+$ 53t ",
+" sqbbbbbbbbbSbbbbbZh+ai 49i .0az++N Dw 00 dhV ",
+" 12bbbbbbbbbbbbbbbbB:+2-dl if&e$V+xlZ@2++wx i#umayh&3hwX&5 ",
+" x+.bbbbbbbbbbbbbbbbbro@++,Dpxn+++++&+++++++hB NNM1Zsww+++++++++q1&hk ",
+" i9Abbbbbbbbbbbbbbbbbbbb.x19+++&FVSX+++++jy++@7f8AAAA40000i 00000000000000000048cn2++++++2O:ao+++32+3 u+r ",
+" @Gbbbbbbbbbbbbbbbi0ibbbbbl,+FFLLFB++++6F$+9+++++++++93hh2yg@@h3hhhh92h9hh9h999h+++9DCaCz@m $>3@cuS$f+8 y6 ",
+" z=bbbbbbbbbbbbbbbbb#b#bbbb2%FFLLFo+-h%FFFF#%%NHNS5rxxuk1kO&GD-A1111;Hmakk1=k&ekxN0 #V5#$l iz+=H .h.sX k, ",
+" q@bbbbbbbbbbbbbbbbbbbib#SO++FFFF%+@l9,FLLFS+= l #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#$S V. C3@t M+8Ds 8+5",
+" a3.bbbbbbbbbbbbbbbbbbbbbc+o++vgh+<r.j+FLLFG++GA S.bbbbb5.bb5V5bbbbbbbbbbbbbbbbb00ibbV4 #&+;. z+rXo #2d",
+" S3bbbbbbbbbbbbbbbbbbbbbbO+ 4e,+,%l s++FF<+ww++s4bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.bbbb#ix+O5 #S gC M:",
+" #+Vbbbbbbbbbbbbbbbbbbbbbgw A2-z vh+j,X; 0M9+Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#o+c .<t ",
+" V+Bbbbbbbbbbbbbbbbbbbbbbgj Awoo S9w%Si #o+-lbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.bx3@8 Bhl ",
+" +HbbbbbbbbbbbbbbbbbbHubz+0 ;<-a $j>,. m+@Vbbbbbbbbbbbbbbbbbbbbbbbbbbbb.c+Z Zs ",
+" B+lbbbbbbbbbbbbbbbbVZ@+D<+G. f<-f $,k<. x3+*bbbbbbbbbbbbbbbbbbbbbbbbbixO34 Zk ",
+" 83.bbbbbbbbbbbbbbbNh+h+++++@Hd@-f $%Dz N2+cbbbbbbbbbbbbbbbbbbbbbbb.Aj%N ",
+" a,bb#.bbbbbbbbbbb03+7 l*+++%mq-f 4w>f l3+rbbbbbbbbbbbbbbbbbbbbbbBXh ",
+" D:bbNbbbbbbbbbbbb8+c =++h=oga t++H d+Obbbbbbbbbbbbbbbbbbbbb0424 ",
+" wmbbp$l.bbbbbbbbbd+. lG,fpaw* f++ 9sbbbbbbbbbbbbbbbbbbbb#0g= ",
+" 5+Hbc++++gm#bbbbbb=3 Ct<H f++ 9nbbbbbbbbbbbbbbbbbbbbbS+$ ",
+" N+ C+3O&&v++nNbbbb:D Z83. f++ N+:bbbbbbbbbbbbbbbbbbbbbD- ",
+" t+Z+>S V6h+vdlbgD &M+ f+> p+abbbbbbbbbbbbbbbbbbbb5+5 ",
+" Z++z 7,+%bw: OGy :+g j%.bbbbbbbbbbbbbbbbb#Vbcj ",
+" 1+9B C+X3& -nq O+g 6+7.###bbbbbbbbbbbbbbx.bv* ",
+" >+e ;++3 G@Z X+6 iuD++23333%OC8.bbbbbbbbblbA2. ",
+" B++5 7+3 23d O+m $2+++hvD68t*eD<++<oNbbbbbbbb&g ",
+" k++ v+4 ++B X+7 S9++pi lAZ@+jcbbbbbV+a ",
+" g+9 4+6 #+2. O+M 7Dr H=+=bbbbq,. ",
+" fwk >3 r+v X+N 7+Mbbbwk ",
+" C+B m+o ,+V O+*b#+$ ",
+" 0+D q+f +90 $9%ba3 ",
+" g+4 6+$ t+@ M+Npv ",
+" d+yi g%. e++$ .,:&q ",
+" t++C S+D 8+si C++7 ",
+" =<* 4# N++B ",
+" ++B ",
+" ++V ",
+" ++f ",
+" v+; ",
+" ix ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+static char * bat3[] = {
+"147 108 54 1",
+" c #010101010101",
+". c #1C1C1C1C1C1C",
+"X c #A7A7A7A7A7A7",
+"o c #FFFFFFFFFFFF",
+"O c #9A9A9A9A9A9A",
+"+ c #DDDDDDDDDDDD",
+"@ c #D3D3D3D3D3D3",
+"# c #3F3F3F3F3F3F",
+"$ c #F5F5F5F5F5F5",
+"% c #BABABABABABA",
+"& c #9E9E9E9E9E9E",
+"* c #EDEDEDEDEDED",
+"= c #121212121212",
+"- c #4E4E4E4E4E4E",
+"; c #919191919191",
+": c #5D5D5D5D5D5D",
+"> c #F2F2F2F2F2F2",
+", c #797979797979",
+"< c #C4C4C4C4C4C4",
+"1 c #767676767676",
+"2 c #0E0E0E0E0E0E",
+"3 c #2A2A2A2A2A2A",
+"4 c #888888888888",
+"5 c #2E2E2E2E2E2E",
+"6 c #434343434343",
+"7 c #969696969696",
+"8 c #B2B2B2B2B2B2",
+"9 c #050505050505",
+"0 c #ACACACACACAC",
+"q c #272727272727",
+"w c #D9D9D9D9D9D9",
+"e c #6B6B6B6B6B6B",
+"r c #474747474747",
+"t c #090909090909",
+"y c #8F8F8F8F8F8F",
+"u c #373737373737",
+"i c #646464646464",
+"p c #BEBEBEBEBEBE",
+"a c #575757575757",
+"s c #CECECECECECE",
+"d c #323232323232",
+"f c #181818181818",
+"g c #7E7E7E7E7E7E",
+"h c #818181818181",
+"j c #CACACACACACA",
+"k c #E1E1E1E1E1E1",
+"l c #5A5A5A5A5A5A",
+"z c #494949494949",
+"x c #A3A3A3A3A3A3",
+"c c #3A3A3A3A3A3A",
+"v c #878784848181",
+"b c #707070707070",
+"n c #FFFF00000000",
+"L c #FFFF77777777",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" .XoO ",
+" .+@#. ",
+" $% ",
+" &*= ",
+" -o; ",
+" ;o$. ",
+" .:+o># .,<12 ",
+" 3oO 4*o5 6$@7o4 ",
+" 8<3 4o,9*0 .q ",
+" 9wo*3 &ooo3 ",
+" Ooe 1ooq ret ",
+" qooy uooq oo< ",
+" tiwop1asooq deoq ",
+" i0***ood toa ",
+" .oo1 foa 3 ",
+" 9+o7 q<o*og ao9 h< ",
+" <o< f*jq=eo3<0 9h*q ",
+" Ookt ,$= @wo:ek*5 ",
+" -o$q 4j 8ooooh ",
+" qo$q 5l iooo+3 ",
+" oo1 Ooooa ",
+" >op .o@k .= ",
+" <oo &&;*.oj ",
+" <ooz r+ a$=x: ",
+" <$<j @cr#oq ",
+" 8o,oq 1x x=>i ",
+" 8oaox 3*= 8vs0 ",
+" 1wrOoc 2s-v97v,> ",
+" %O1v%@ &Ovvf1vuo= ",
+" @Xxv3oX ,%vvvu4vv>g ",
+" wh8vvao89 i@2vvvi;vvhk9 ",
+" o-&vvvbop2 akfvvvv74vvqod ",
+" ofc#vvvuoj. 5*zvvvvv%1vvvk4 ",
+" .>9t-vvvv3+$a t d*#vvvvvcOOvvve>9 ",
+" a<vv#9vvvvtjo4 f%= u+zvvvvvv&-ecvvq>b ",
+" &;vva2v9vvv94opq 9u %c 3*-vvvvvvv*z.yvvv4ot ",
+" k6tda2vf9vvvvi>o7f .+$s4, -*6vvvvvvvc>qv;3vv=kx ",
+" .ovvvu.vvvvvvvvq%o*i td=7$< b*6vvvvvvvv4;tv-yvvvao: ",
+" bwvvvu3vvvvvvvvvvu+o%q Oo hkcvvvvvvvv9Xevvv8qvvv;oq ",
+" wiv=tuuvv=qvvvvvvv9,$o&. to- .xf =08=vvvvvvvvv#11vvv.gvvvv<+ ",
+" rk9vvv.lvvvv9vvvvvvvvf@o$19 X0 f:jo# .sgvvvvvvvvvvvbdavvvv;avvvqoX ",
+" j4vvvv9cvvv9uvvvvvvvvvvz@o+c 4*9 5<ooo; ro:vvvvvvvvvvvf;cevvvvv4.vvvqoy ",
+" o=vvvvv-vvvv.fvvvvvvvvvvvz<o#tcq go3eooo$b 4w3vvvvvvvvvvvvaru3vvvvv30vvvv1ox ",
+" 4%vvq.vv:tvvvvu9vvvvvvvvvvvv.lwo*7josooook2 =%%.vvvvvvvvvvvvv7tl.vvvvvvb1vvvvgol ",
+" t>qvva2vvc2vvvv=.vvvvvvvvvvvvco@8ooooooon4o0 .&o,vvvvvvvvvvvvvv-; 7vvvvvvvvu;fvvv1o0 ",
+" 1%vvtcvvvqqvvvvvv.vvv.lxXXi6qwknnnf%ooonn &o,01=vvvvvvvvvvvvvvvO. ;vvvvvvvvv:%avvvc$sf ",
+" =@qvtivvvvf6vvvvvvz.v2*oooooo*oonLLn,nLLnn 8*2vvvvvvvvvvvvvvvvvfOv=bvvvvvvvvvv.<ivvv6o*r ",
+" 8;vv:uvvvvvqvvvvvvvqvho- 56>$nLLn%nLLnn w<vvvvvvvvvvvvvvvvvvezvqivvvvvvvvvvvvgytvv9+o4 ",
+" .$fv.#vvvvvv6vvvvvvvv.ox zo$nnnnonnnnnozvvvvvvvvvvvvvvvvvf%vvu#vvvvvvvvvvvvvzp6vvv4o@6 ",
+" pbvv-vvvvvvv:vvvvvvvv=oi ,oooo@*o*ooo4ul=vvvvvvvvvvvvvvv-evvarvvvvvvvvvvvvvvfg4tvvd*o4 ",
+" a$vvifvvvvvvv-vvvvvvvv9o: ro%oj:w*so1f0ooooXqvvvvvvvvvvvt02vvidvvvvvvvvvvvvvvvvqgh#2v1o<d ",
+" f*-v=3vvvvvvvv3tvv9dh+;6o; q*io6 <X<0 u62-7oozvvvvvvvvvv46vvvl.vvvvvvvvvvvvvvvvvvqq2vv5woi ",
+" <0 .lvvvvvvvvv.vvvpoooooo+t aoaoq og@h q*$qvvvvvvvv=xvvvv-=vvvvvvvvvvvvvvvvvvvvv2ttq&o4 ",
+" x% =rvvvvvvvvvva=vpo:u%4>ooa :$#*t ol+z 3o@vvvvvvvv0qvvvv;9vvvvvvvvvvvvvvvv=zO<*ooooooo4 ",
+" 0*6h%ok%uvvvvvvv-9aol ioo@ :*q*t o5*r iozvvvvvvz,vvvvvivvvvvvvvvvvvvv9r<o*<hb5f=ae<ool ",
+" 2:0oooop08$o;tvvvvv- %@ rad :*5< o5*9 +w9vvvvv0.vvvv.4vvvvvvvvvvvvvlwo;r2 d1k9 ",
+" qooox5 io+vvvvvz.o: i@6p o5> :o-vvvv,,vvvvvdlvvvvvvvvvvvb**hf zq ",
+" 1+d qk+uvvv6-*2 e;48 *3o to,vvv=X9vvvvv:avvvvvvvvv6+o7 ",
+" . fj>dvv#O@ 1yyi *5+ w<vvv;cvvvvvv4uvvvvvvv=0o7q ",
+" %ovvqkx %;<z 6kb< swvvdXvvvvvvv&qvvvvvvuokq ",
+" 9%@t @1 %Ok9 6+&g y+vveuvvvvvvv,9vvvvv1o&t ",
+" fo; wl %%o9 6*+1 0>v.1vvvvvvv9Ovvvvvbog ",
+" rou*. 8s@ #*+c @<vgcvvvvvvv3ivvvvboi ",
+" &ko- 0oj #oo3 ohv6vvvvvvvvl:vvvbou ",
+" .*o1 so0 ao>f dor63vt2vvvvvg.vveor ",
+" goe oob 7o@ Oo*ooooo;vvvvb9v3o, ",
+" to& ooc 7o7 :*y...q;o<vvva 9*4 ",
+" &k 5oof @oe 9 goevv1t4>9 ",
+" col co+ wod &o.v9coc ",
+" tow uoj wo3 =ohvv@& ",
+" +o. #o; +*9 X>tdoq ",
+" 4oh @O +*t qo5x% ",
+" #o* <O 9**2 >x>c ",
+" q$oq zq a6 0o* ",
+" %oi &o0 ",
+" -o8 &o- ",
+" kk9 xo. ",
+" bo; js ",
+" .oo6 oX ",
+" *8 qob ",
+" *4 aor ",
+" 0ou #oz ",
+" Xou doz ",
+" 5b .oi ",
+" g4 ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+static char * bat4[] = {
+"147 108 54 1",
+" c #010101010101",
+". c #AEAEAEAEAEAE",
+"X c #292929292929",
+"o c #7A7A7A7A7A7A",
+"O c #FFFFFFFFFFFF",
+"+ c #0C0C0C0C0C0C",
+"@ c #646464646464",
+"# c #737373737373",
+"$ c #C8C8C8C8C8C8",
+"% c #C4C4C4C4C4C4",
+"& c #101010101010",
+"* c #9D9D9D9D9D9D",
+"= c #E4E4E4E4E4E4",
+"- c #F2F2F2F2F2F2",
+"; c #A3A3A3A3A3A3",
+": c #909090909090",
+"> c #D7D7D7D7D7D7",
+", c #DADADADADADA",
+"< c #171717171717",
+"1 c #3D3D3D3D3D3D",
+"2 c #989898989898",
+"3 c #8B8B8B8B8B8B",
+"4 c #A9A9A9A9A9A9",
+"5 c #202020202020",
+"6 c #A6A6A6A6A6A6",
+"7 c #5F5F5F5F5F5F",
+"8 c #868686868686",
+"9 c #E9E9E9E9E9E9",
+"0 c #DFDFDFDFDFDF",
+"q c #CFCFCFCFCFCF",
+"w c #060606060606",
+"e c #D2D2D2D2D2D2",
+"r c #575757575757",
+"t c #252525252525",
+"y c #B1B1B1B1B1B1",
+"u c #4C4C4C4C4C4C",
+"i c #484848484848",
+"p c #B5B5B5B5B5B5",
+"a c #434343434343",
+"s c #1B1B1B1B1B1B",
+"d c #6E6E6E6E6E6E",
+"f c #878784848181",
+"g c #2D2D2D2D2D2D",
+"h c #BCBCBCBCBCBC",
+"j c #7E7E7E7E7E7E",
+"k c #5B5B5B5B5B5B",
+"l c #313131313131",
+"z c #6B6B6B6B6B6B",
+"x c #525252525252",
+"c c #F0F0F0F0F0F0",
+"v c #FFFF00000000",
+"L c #FFFF77777777",
+"b c #F8F8F8F8F8F8",
+"n c #383838383838",
+" .X ",
+" oO+ ",
+" @O#@$%@& ",
+" *O=-;:>,X ",
+" <1o234OO5 #6 ",
+" +7>OOOOOOOO ",
+" 890.OOO=$qOO*w ",
+" 1eOrt,Oyu 1;Oi ",
+" X,Op tO=1 & q3 ",
+" 8O4Xa&>=& se>5 e8 ",
+" dO@fXaq=< 1-q q8 ",
+" 5O:ffuoOg O1 9o ",
+" e;ffi:Oo oqhO# O1 ",
+" rO&ffj9q pOOOOp9s ",
+" 5Ouffi6-X w2OOOOOOO91 ",
+" h>ffwu9: uO31-OOOOO-a ",
+" oO1ffk:OX 2- 1O75k-OOOo ",
+" +O@ffl@qy p* @- &99:O2w ",
+" 8=ff&t1O1 #4 d$ X=q6O%& ",
+" aO1ffs<q9 @- #2 X-98O-X ",
+" +93ffg gO1 5-&7p &%=u--a ",
+" *,&fsu ;> .o5= 598w,Ok ",
+" 1O5fw1 &Od lOw=l iO <6Oy< ",
+" 5-kff&& h=+ 1 d8 +-aff1-O4X ",
+" q;ffs&fsOo wt :hfffsjOO.X ",
+" yqwffXwfoOl 5O<ffff&8-O21 ",
+" #=+ffffff$9 e*fffffffr0O=@s ",
+" dO1ffs+ff1Oy zOufffffffwi6OOhzt5 ",
+" 1Oxff5XfffoO@ &O.ffffffffff<d>-OO9>2ag ",
+" tOoff+5ffffoOs oOffff&+ffffffff&rk2qOOOeyz5& ",
+" g98ffwiwffff:O sOafffwffffffffffffff5a#*0OOOe3g ",
+" t-:fffa5fffffhq %.ffffffffffffffffffffffffi8$-O9;i& ",
+" X-7fff+sffffffO; :9fffffffff<ffffffffffffffffffrpOOOh@a1 ",
+" @9ufffffffffff&O; x9fffffffff+ffffffffffffffw180--OOOOOO0+ ",
+" &$=gfff+ffffffff1O: r9ffffffffffffffffffffff1;OOO$jooo#2,O2 ",
+" 19.&ffftgffffffffXOu x-fffffffffffffffffff&z9O9:1 5 ",
+" r9jfffwl&ffffffffffO3 uO5fffffffffffffffffXeO.a+ ",
+" w69gfffa1ffffffffffff.4 @OtffffffffffffffffkO9l ",
+" &qpfff<71fffffffffffff4. yqfffffffffffffff+2O6w ",
+" g=:ffws&&ffffffffffffffd9 qoXffffffffffffff2Oj ",
+" @OiffffwffffffffffffffffuO <O1ufffffffffffffuO# ",
+" h01ffffffffffffffffffffffxO+ 1OfaffffffffffffXO2 ",
+" &h0sffffffffffffffffffffffftOl o,f1ffffffffffffye ",
+" a>6fffl111<fffffffffffffffff+-o 9of@wffffffffffrOg ",
+" tx6O=2$OOOOcOO-:x&ffffffffffffff.e @Ogfk+ffffffffff9h ",
+" 9OOOOOe@u5s&tu2eO91fffffffffffffiOw >pffaffffffffffuO1 ",
+" qO$d1+ 16O2ffffffffffff+O1 1s 5Ouf&uffffffffff:-w ",
+" & xO.ffffffffffff$y jOOa 2O+f&xffffffffff,* ",
+" #Oxfffffffffff89w pko, 1Okff57fffffffff&O@ ",
+" :O&ffffffffff1Ou &O& *d $$fff1lfffffffff&O5 ",
+" 98fffffffffffq, $# 5$O2@OXfffutffffffwwfkO& ",
+" o9fffffff5fffaOx @h o-O-uO:ffffr&ffffff+tf@O& ",
+" 5O1ffffffsffff2Oa 51 l9 5,OO4l,=+ffff8&fffffffwf@O& ",
+" ,2ffffffsfffffpOX aOO98O;OOOq&%OsfffffjffffffffffxOs ",
+" @-ffffffwffffff9>+t9=@=OOOOOO9=O7ffffff7ffldyh;@5fiOx ",
+" sO@ffffffffffffiO-99v&&=OOOqOOOg x:e*ok:&:OOO90OOhiO8 ",
+" ;,fffffffffffffs8OvvvvjOOvvadO%>O=h-OOOOOh1 a2OOO,w ",
+" 1O&fffflwfffffff1-vLLv;OvLLv O-:l +l,OO8 1,OO1 ",
+" 9@ffff5ffffffff1-vLLvOvvLLvdOx :O=w +yO2 ",
+" :effff&wfw@%Opf -vvvvhvvvvvO; w:i >Ou ",
+" 7O<fffw 1,O-*8w kObOO**O99O* 1O-s ",
+" 5Olffffs-O1 +p8-ujO0Oz w,Oy ",
+" 0:ffff2O@ 240 kO4O& 3O8 ",
+" 6hffff2Og 200 kO@9w 5 ",
+" oOffffaOx uO0 59r-w ",
+" nOgp-O-O. 1O0 59r-+ ",
+" &-OO0;,OOX lO0 59k-w ",
+" qOk dO,& O. t9i-+ ",
+" h$ +OO1 O0 5-1-w ",
+" &-4 ;4 O= s-5-+ ",
+" tOp q= +=<-+ ",
+" aO8 h9 ,<-+ ",
+" aO8 q9 es-+ ",
+" 7O8 p9 e<9+ ",
+" aO8 h9 >89+ ",
+" aO8 pO5 ey9w ",
+" aO8 #Ot 4O0+ ",
+" 1O3 kO1 oO=+ ",
+" @O-& 7Od #O9& ",
+" dO- gOd XOO< ",
+" 1u 7O: &Ob& ",
+" X,@ w0-+ ",
+" 1# ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+static char * cal_hob[] = {
+"390 102 54 1",
+" c #000000000000",
+". c #FFFFCCCCCCCC",
+"X c #CCCCCCCC6666",
+"o c #A7A764640202",
+"O c #666666660000",
+"+ c #808080800000",
+"@ c #CCCC99996666",
+"# c #999999996767",
+"$ c #2A2A66660101",
+"% c #666673735959",
+"& c #1B1B82825858",
+"* c #2F2F99996B6B",
+"= c #666633330000",
+"- c #CCCCCCCC9999",
+"; c #FFFFFFFF9999",
+": c #000055550000",
+"> c #3A3AAFAF8989",
+", c #99999999CCCC",
+"< c #9999CCCCFFFF",
+"1 c #666699996666",
+"2 c #5F5F66665F5F",
+"3 c #AAAAAAAAAAAA",
+"4 c #CCCC9999CCCC",
+"5 c #CCCCCCCCCCCC",
+"6 c #808086868C8C",
+"7 c #C0C0C0C0C0C0",
+"8 c #FFFFCCCC9999",
+"9 c #555555555555",
+"0 c #333333330000",
+"q c #8787CCCC9999",
+"w c #999999999999",
+"e c #FFFFCCCCFFFF",
+"r c #FFFFFFFF6666",
+"t c #FFFFCCCC0000",
+"y c #FFFFCCCC6666",
+"u c #CCCCFFFF6262",
+"i c #333333333333",
+"p c #9999CCCCCCCC",
+"a c #CCCCCCCC0000",
+"s c #CCCCCCCCFFFF",
+"d c #CDCD8B8B1D1D",
+"f c #999999990000",
+"g c #CCCCFFFF9999",
+"h c #FFFFCCCC3333",
+"j c #080826260000",
+"k c #595900000000",
+"l c #CCCCCCCC3333",
+"z c #9E9E73735555",
+"x c #B7B71E1E0C0C",
+"c c #FFFFFFFF2222",
+"v c #7474B0B03333",
+"b c #CCCC9999FFFF",
+"n c #9999CCCC4949",
+"m c #CCCCFFFFCCCC",
+" . . ",
+" XoOO+ ",
+" @X@#@ Xo$%&*%=- ",
+" ;O:O:O- o$>*>>,&:. ",
+" @O><,$@ O><>1>>2OX ",
+" XO&>>O3 O,><><>&O4 ",
+" 5:6><O7 O&>>>>>%= ",
+" 8O&<&97 o0>>q>1:we rtyuyyX ",
+" 5&ip>%@ w20O&O:1e aat; +$:=::O8 ",
+" 8O*<>:5 -%=i96s aOO:d +O>>2$Op ",
+" s%:<,O@ es3s 3%>O- O:<>>9:8 ;afadafaagh ;; ;;Xafff ",
+" OO>>05 ;j>Ow O2>>p:%s ;;; X=$$$O$:Ok:O0:O$0O:O$OX ",
+" %:<>O5 3$>OX O&>><OO l+O++; ; yla; 3$><>><>>>>&>2*&>>><>iX ",
+" O9>6:s 8:,$6 OO<,>0Oe rr;;;;r aO&*:O a:$OO+ X:,>>>><p>>,>>>>>>>>>&z ",
+" . 8y; e$2>>%- pO>$d O0>>>OO aO0:Ojj; O&<>Od -O%>>$f 790:O>>,::=:$=:O&%&6>O- ",
+" . .tf+=OOxoX ;rru; +$<&Oe clX; 8:>&6 o&>p>02 fO:>&%:w ;k>>,:3 ;:>>,:z @39&<>>O26666z9Oi2:Oiw ",
+" yf:=O::O:Of X+O:=$y $&>6: ; ; a$O$+X qO>$@ $=><>Oo O0>,>>= vO><*$. 7O2>>OX ,=>>>k3 ses,&8 ",
+" 8dOjO9>>,<>>OO. ruh; +::O0:+ O&<$O ;a++fffl ldXXt fO&*:+ a$>2w +:,>>04 O0><,:Oe a0>p&:s Oi<>$O #9<>6ib . ",
+" .z=O&&<><>>><:O ;XfOk::$:0&>>&Oo 5O&>2$ X:O:O:OO ;oo0OOOO O:>pOf #:<2f O9>>1O 50O<>>OO O&p>%O O&><9O 5:>>>$@ ",
+" d:O&><>>>><>p>%:5 a+O$::=:O0$*<>60% 8:*>&9 raaX fO:2&$:% oOj&&0:Os ;0&<>:O ;rl lO>&6 OO>>&Os +:<>>:% o&>p:2 OO>>&O -=><>:, ",
+" d:O$>>>>>,>*>$9:=- aO::>>>>,>>i>><>=O 7:1>OO -aO:O+ O&>><,0@ O:>q<>=O 5$2>>O+ aOO+ ;r; 60>&d Oi>>2$. O*>>>O@ ;;lac OO>>:d 6i><6:8 s:>>>O@ ",
+" t=:*>>>>>$$:=0ii99s aO&>>>>,>><>p<>>>O=5 -O*>O= a+:&>>:+ +>>>>:9, ;=O>,>,:O O&<3:O- ; ;r;; f:$O f:+a ;rXvi>1& +9<>$O7 ;j&<>>:3 XO::0:+aX O&>,$6 X:><&O6 8$><>:, ",
+" @0*1>p>&%ii66w3573 X$*p>>&9%:i$&*p>>3:2. -$>>%$ O$>p>p$+ X$p1<*i# %0p>>>0% 0*>>,i+ Xf+O+f ;#Ovi&:+X O*,&OX- $910qXO+&9&%$>*O +ip>$=5 7$*,p*07 #v%***6&&%O$fX O2>p:4 5O3>>:z O>>*Oz ;#nz++vvzffX ",
+" e$&<>>>9i%%e e f01>>&O9=67s69i>>><OO 9&p&O8 #00>>>>Of +$<>*&: 69>>>>%O @+>>>>>O+ +&>,:O X+:p<*>>6Ol O&>>&$:Oa XO>&07$6&:0:&><1O O$,>i:8 p=><>&0 X>><>p>>><>>>:Oku e:&>>O5 5j>><%+ eO&>,:3 Xf0+&>>&9&>&$0;",
+" iX9>>>>&$9w +$<>>O0,e e 5O>><>:O5 8:6<>0s +O0<>>:O X&>,>=9s fO>p>,:3 m=>>>>>$Of f>>>OOe +:>>1*2>>:O Oi>O:6>:O+O:,$6vi>:=9i9&>>Oe +:<>6:3 XO*<>2: O,>><>>6>>>><>&$=X O:<>O7 O&<>&O O&<>O6 ;+O:*><<>>>>,>*:v",
+" sO%>>>>iOw e X$>>>9:4 *>>>>2j8 s%&>>%- s9Oj>>>OX O>>>6$z 6=&>>>:@ @O>>>,>>0OX $>3>O# 5$6>6i%:>>2OX 2&,&ii$,i:9:>0s%*$Ob s9=>>O O:><&=X -:>,>&O. m$<><>>6$:%:<,><&0O; %9>,O- O&><>Ov; :i<>Oo O:>>p><><6>>>>6:.",
+" nO&>,>:9,e +$>>1:, $<<>>&$s :>>>: 5O=><>:O +,<>$9s d$*><$9s -O>>w:&>&:O- O><>$s a:>6:ssO9<>=6 fO>O9ii&>&i9&9sO&O6 e7:*6$ OO>p&:3 d:6>>29 d&>>>1$$9Oj9:>>><$:= :2<&Os OO><>j%0+f- O&<>j2 8 8 8 88adfff +$>>>><>>&>O>%&$O3",
+" +9p>>&O#s -O><,&Os %>>>>&:. 5O&>6:8 w:&&<6:8 O>>>=O 3iO>>%$. w$>p,:i>>20O -:<*&= :O>:Oe 6$><:+ 70>&0sw9:>>>22 :90O 5%&>O- 8XO0>>>=+Xy; ;; ; ; 1O>><$O -:1>,$%2 sbw9O&1<><O:a 5O&>>$. 2j>><&99::++; XlO0&><&=O$=$O$=O:$$$O:y nO>>><>2:O:OiO&i=O-",
+" #$>>>>O6 a$>>>2Os O><><*Os 8:,>>O3 zO*>>O$ r:>,&&4 l:*<>:O7 X%>>>Oi9><$0O- 8:>p$&e r=&606 3:6>i9s3O>&2 5%=>>$3 z:>OO5-+06>=w +:009<>>0i:$O++OOO+++fo+O00>>>O9 fO>6:4 e sOO&>>>>OO 8:*<$O +O>>><>>>6::0f O0&>><>&&&>>>>>>>>><p&O1 +&<>>>&i3bss s es5 ",
+" 12&p>%:e +2>p>&O %>>><&=- 5O>,>i@ s9:><$0 +&>>2O w92>>O:. +&>>>09:,><>:O; q&>>:v @:&>i+w5w2i>6:.7:>6Os e,=&9w 59&>iO$:6&&Of O*>>>>>>*>*>>&>>>&&&&$&$:0:><>&o -O:3&2 s9:>>><$:8 pO&>&O# O0>><><>>>>>$Of 0O>><>>>><><><>>>>>>>1:. -O>><>&Ose ",
+"-O>>>1:3 f$<>p:6e $>>>>>O7 XO&>6i5 di*>>$O v6>v:< XO*p>9%< v2<>62sOO>>>1:O- l&<>2, 0:,>0O:O&>>:%7#O&>Os 54%s %O9**>>>=:0O- $<,<>>,>>><>>,>>><><>><><>>>>p0w a0>>Os 3O&<>>603 lk>>&0%0f OO>>>,:6*>>>>$Of 0:O&><>p>&6&6:>2$&O$ijO1 a0><>>$4 ",
+"3O>,>&=7 . +&><>=v %>>,>6:d $*><2- s92&<Oo 1*>2:. 7:&*<&$. O>>,*6 e9:>p>60O #>*,O z9:>>*>*<>990#7090= s ,9&i$909=9kX &6>><><>>p>,&>>>p>6$26&6*&<,>>:@ O$>3$. s9i><>>O+ 6$>>>>*$O0Or 60>>>>Oj$%>>>>0OX O9=:&>>O:90O:i%i9%92w,O- O&>>>OO ",
+"+:,>p$9s oO<>>$w +>><>6:, 8O>>>:5 X09>>:- ;=>,$9s X=&p>2:5 O><>O, wOi><>&O: d&>*Oe OO=&>>>$$:i9w5z22we s3z26ss%6se o$O:$<>p&:O:O0:Oj:00:iOj0O&>>p=, ;=i<&6 8$*><>>:% +O><><>>>$:=f d:>>>29b2$&,<>&=w 54p=*>>:=<s7sse se e ;j><,*:4 ",
+"%O>>,OO 6:>>>9+ 9>>><>0d s&2>p*@ e2&>>Oo 7O>>O+ 99>>&:8 O&>>& e2i1>>>&O+8 1*6*O s6i9jO0i96435 e e %i09i><6:909i9i9222,w36,90>><$:. w:*>*z sO&<>><O: %:>><><>>>>$:y p=&<>>2 6O&>>>$$ e92>>9z #O>>>&=- ",
+"1:><>j2e .#%>>>=9e v><>>>O9 O&<>:3 -O&>2O XO>>:3 8$i>>1O, ;0,>>9s s+:6>>,&0:@ f><1: 22i96s e 55,O&>>$9,ssessse e 69><>&O7 lO>>&, -O*<>>>i9 O2><>6>>>>>>%: @$>>>>%e 6:>>>6:7 :&<>=6 -O>>,$i2 ",
+"2%,>>9+ 7&O>>O: 9,>,>>9O. O&>>&@ O:>>=f 3:<2id s9:p<&0- 5O>>,&. s20>>><&O$+ O>>6O esse e =:>>2=7 3:>p>&O3 #=>>v@ w0>>p><2O O&<>6$$:>>><>Od sO>,>>O sO&>>>0# 9&>,$o 7:>><>9:f ",
+"v$><>O6 -O9><:O7 +&O>>p$9s O%>>21 @O&>:Oef2>*9, +O>>6:3 ;0>><% -O=&<>>>:OO0,<*9 :9>,&O4 @O>>>6js fO>>i%e +2>>>p>$Oe 7O*><:09=:O>>>:Oe 8:&>6>$s O9>>>O% O&>>:2e XO>>>>*2i# ",
+"O:<>,07 e9:>>2:+. &&i>>>&$. 2:p>># s&=>6:56$>OO 2i>>>=- 7:><>% s6=:&<><9jO>>6O %:,>&Ow si>><*O- +:6>>O$8 -$<6>>>>9: O&>>925<60O>>&OX O2>>>O5 4O&<>>Oe 9:<>9O 7O>,<><>&O+8 ",
+"O%><*%s +O*<>=&w 8nO9>>><O:5 o%>>26 @:*>O3+*,:4 +Op>>O6 y:>>># e1O:&><>&0*<&% O9>>6:5 XO>>>103 oO&<>:O:fX8 ;d:><>>p>>:b -O>>>0, w:O>,$2 oi<>>=5 O&><>2 +9><O% O:>><><>O:+X ",
+"OO>>1O- 59$>>*O:+v@do:=*>>><>&=X 2:><>1 s99>=1O>>Ow zj>>,:d 12>>6# s901>><6i>&o 6O><>O@ s:>>>>%@ 79:>>>*iO=:+O=:6>><>><$z :6>>=7 e6i$>iO 3&&<>$@ 9i>>>$ 6:<>:o 6iO>><>3>9::t ",
+"O:>>6is .$:,<>*$:O::O&>>>>>>,>O3 O2<>>z +O>>=i<1Os f=$::=9 l&<>&6 ev0O>><>>1w +0>>,:, lO><>>03 .$O>p><>>&2&&>>>,<>><$2s XO>>&O4 7:9>>O3 fO>>>O6 5O*>>>% #9><%9 .$:O>>>><>9O: ",
+"%$,>&$. 69$&<><,>>>>><q&2>><,0@ 2$>>>% &%>&9>&=- s2w343 O&><%# e3O:>>><*o 2:6>>O@ 70>>>>%o 60:>>>>>>>><,>>>>><OO7 3j><6j s9=>>:@ 3=>>,:+ 7:>>><i 6:>>>$. s6i0O&>>><:OX ",
+"+O>>%:s 5OO:>>><><>>>>&O&><>&9, O9<>># OO>&>>&%s +&<>$w 7=:,>>627 f=>>pj6 X=>>><:%e O=&*>,><>>>>>><>>%&9 f9>>O9s +:>>$2 @$>>>O9 +O><>&% #9><$%s s699&>>>>0O. ",
+"1=&>*03 3=9:%&**2>&1&99i>>>309 %:p>>O 5$&*>1&O3 e 0&>p03 e3z0*p>i$# vi*p6*Oe -90&%&9:5 s609***>p>,q6*&299w #i>p09 #0&p10 30*p>9O55#:>>>pq% 5=>>w0- s79:,>p1$O ",
+"5:&&,0+ . . . s29i=:Oii0&i66i$O&&00a 1%>>>% wi1>>2:@ -O&>>9- 39:>&OO. w$,>>9i 2&9290O@ ,99:jO:O::$i=26e 6O>>OO wi2>>=- 5$6>>6jOO$>>><*>1 70>>,:# ;yh 7i2>>>&Od ",
+".:O>>9&s e#&i909i99ss@$ii9:996 f2>6<$e @$p><$9s 8:*>>$3 e$O&92s d:><>&Os e ess56s w9990909996,s fi<>:6 +O>>>$s .:&>p>=i&>>>,>>03 O&,>OOzfodOo=O0$$ wO&>>>i2 ",
+" z:&>&O+. eXd. s4629263e 7%96262we 6$&<>%5 s9*>>&O@ qO>>>O- 4&0we 6O>>>2:. s5s4,w e 6%>,%o O:>>,:. $=><>&>>>>><>&i3 O&>>iii:O$%&&%&>=m 9O>><&O8 ",
+" 7O&>>:O%5 8X+=$3 e es e dO>>>$s O2>>Ois XOO&2:4 #3 lj>>>>O7 +&>>96 .+0*<>>Os O:,<<>>>>6>:&O9 O9>>>*>>><<>>>>3&@ e19>>>2:7 ",
+" 2%*<60O:+d88 8 88y@oO==:Of 5i>>>= 2$9::%@ 7:90O: 6:6><>=- O&<>OO 8#+:$<>>*z 6i>>>>><6&9:92e 6&><><><p>>>>>><$X 3:><>&:8 ",
+" wO*>>>i9:::OkOkO:=O:O&>,06 d2>>pis -66226 e5w6s X=*>>>O4 .:>>,:OO+:O&>>>>1:s fO>>>O&$:O02, +O>&6:&$:=$O0O:O$O +2>>>OOs ",
+" e2$<>><>6i0O:=::=::9>>>>:o 5$&,>$y e #:>><>O- O6><&i&&&><>>>,&z p=>>>$$=%w,e %9ii:=9:9i99i9=:io ;; O*p>>2O ",
+" 5O:>>>>>>>>,&&6>>>>><3>=& d$O:992 5O&<>>O6 8:><>>>><>>><>>&2s 8:O>6$96s +962626,4s34s7,363 rO=od- ;+:>>>>:w ",
+" 6O&9>>>p>>>>>>>>>>>>><&Oe $9i9ii= 3=>>>>Oo 7:,>>>,>>6>>>>OO5 s9j=&i=7 e e e fO:O$:oOOi&><<:O. ",
+" 5O:9&>>>>6>>>>>>>,>>>>$$ v2w3w16e 8::6>>:O. lO><>O$:=&%O$96s o9664pe -O&>$O:O9<>>>1Os ",
+" esz9:O>>>>>>,>><,>>>><9O e pO=:00O=- w:>>6i23626#se e #:,>>>>>>>>>$=5 ",
+" s@Oj:O&&>><>>>>>>>*:O0s #4,4,,3e dO>>&9e -O&>>,>6>$O02s ",
+" s69ijO:$$&i$$$=:0O9@ 6iO=:% sOO:=:Oj0265 ",
+" s@909=:9i909i2ws 36696 w62226,e ",
+" es4w66w747sse e e e ",
+" ",
+" . ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ;l ",
+" X+8 ",
+" XOp ",
+" nO- u; ;;; ; ; ",
+" -O7 ; r djf+++++++fofoofoOodyay ;rr ",
+" 7=-58 -O -f ;f 8OOO::=O:O$0O0O$=::=::O:o; f00f ",
+" 0OO:f#O #+- ;0 -$OO=:O0O00:=:0=:=O0:22O:o oOO:Ov r; ",
+" :=:OOOOs#:8 X= Owi9=0i=i==jO=:=OkO=s 3OO +O#s7O+ :a ",
+" =:6sO:O v=, .:v5 5O32i9,6i66690,4,s70Oe #O d$3e e#OO5 r ++ ",
+" sOOs s=OszOX OOOf O6O907sOw#32Os 6O sO -:+e s0Oa ++ +f ",
+" +=s v07+03 =OO3 OO00967=6w,6Oe #Oe O7vOs 7O0O7 OO@ fO ",
+" OO 6Ow2O3 :=:z 9ii2iz O6w66O5 3O O7Oz 5O2OO7O:+ wo ",
+" fOe +:O60w OO=2 O=&,O2sO233wO -=s +#O, l0s7O+=OO 3O5 ",
+" w:- 9=90Of %iiO 99:42O7=6367O7 5:. O:=7 #+se%%:0:@ 5$. ",
+" fOs X:990i6 OOiis O09s#:3O63670 -O X=O04 +O wO=906e On ",
+" #O3X:6e,iO# %09=Xs90O 4%20%76w=O#ffX7O5 O369$++v O% i&=:O $d ",
+" f=O0, 60w .v0692 O=&5p=:=93O:9=%O2w5O75+6 ep62%oO#O6 ev=9iO3 O2 ",
+" 30zs 39% +0sw=7%i=9%999=3%7$7s 00%7e s#O06 Oi9,01ew+ ",
+" e 0O ,O5 %O2i$e s90O3O5O3 =+jOf 20O :2$e6$@7= ",
+" 5O9e -=s #OOi2 O=i395Op .Oi9:OO d #=:4 vO02 5O:#O# ",
+" OO $. s909$e w99w270@ 2%s99:+$@ 5i9Ov$=9Os 9%:=- ",
+" OO .$ O9=9 5=O69706-X@-nO6e 6Oi%2 fO09O069O5 5=9:w ",
+" %: O7 599:. 9i%Ow9O00O:=O% 499$d 2k2992s6=o 6i=d ",
+" +O Ow e#O6 +96969029&22i, 6Oi%wXO:6ses +92e %i2 ",
+" 30- Ov s 66Osess e 7e s69O0Owe s92 sOO ",
+" #Os 73s s 364 e #O ",
+" : e 7O ",
+" -O ",
+" 5o ",
+" -% ",
+" 5O ",
+" -O ",
+" 5O- ",
+" X03 ",
+" 7%3 ",
+" s "};
--- /dev/null
+/* XPM */
+static char * calvin[] = {
+"127 208 176 2",
+" c #000000000000",
+". c #F6F6F2F2EEEE",
+"X c #F2F2F2F2EEEE",
+"o c #F2F2F2F2EAEA",
+"O c #E6E6E6E6DEDE",
+"+ c #C2C2CECEBABA",
+"@ c #8989B6B6B2B2",
+"# c #A5A5B6B6AAAA",
+"$ c #E6E6E6E6E2E2",
+"% c #EAEAEEEEE6E6",
+"& c #F6F6F6F6F2F2",
+"* c #4C4C75756969",
+"= c #48485D5D6161",
+"- c #40405D5D5959",
+"; c #61618D8D9191",
+": c #75758D8D7D7D",
+"> c #7D7DA1A19595",
+", c #BEBEDADACACA",
+"< c #F2F2EEEEEAEA",
+"1 c #595959594C4C",
+"2 c #959555554C4C",
+"3 c #B6B659594848",
+"4 c #7D7D44443C3C",
+"5 c #484848484848",
+"6 c #4C4C55555050",
+"7 c #717165655959",
+"8 c #C2C279795555",
+"9 c #EAEABABA6565",
+"0 c #FAFADADA7D7D",
+"q c #DEDEA5A56565",
+"w c #717150504444",
+"e c #4C4C69696161",
+"r c #D6D6E2E2CECE",
+"t c #D2D2D6D6C2C2",
+"y c #F2F2BEBE6969",
+"u c #F6F6F2F2F2F2",
+"i c #F2F2EEEEE2E2",
+"p c #9999A1A18585",
+"a c #484855555050",
+"s c #C2C289895050",
+"d c #F2F2DEDEC6C6",
+"f c #F6F6DADAB6B6",
+"g c #505048484444",
+"h c #BEBEBEBEB6B6",
+"j c #CACABABA7171",
+"k c #F6F6E6E6BEBE",
+"l c #E6E6DADAD2D2",
+"z c #F6F6EEEEDEDE",
+"x c #E2E2BEBEB6B6",
+"c c #616175756969",
+"v c #E2E2CECEC6C6",
+"b c #595965655959",
+"n c #E2E2CECE9191",
+"m c #4C4C50504444",
+"M c #FAFAE6E69191",
+"N c #818175755D5D",
+"B c #5D5D50504848",
+"V c #F2F2E6E6D2D2",
+"C c #F2F2DADAB2B2",
+"Z c #C2C2A5A57171",
+"A c #F2F2E6E6E2E2",
+"S c #959565655555",
+"D c #99998D8D6565",
+"F c #A1A179794C4C",
+"G c #F2F2EAEAEAEA",
+"H c #F6F6CECE7171",
+"J c #F2F2CECEAEAE",
+"K c #717159594848",
+"L c #CECE95955959",
+"P c #FAFAF2F2CECE",
+"I c #EAEADADAAEAE",
+"U c #595985856969",
+"Y c #F6F6E6E6D2D2",
+"T c #BABA69694444",
+"R c #DADA85854848",
+"E c #EAEAA5A54C4C",
+"W c #484844444040",
+"Q c #BEBE59593434",
+"! c #DADA61614444",
+"~ c #F6F6F2F2DEDE",
+"^ c #404050504C4C",
+"/ c #656548484040",
+"( c #484850504444",
+") c #D6D659594848",
+"_ c #AEAE44444040",
+"` c #404048484444",
+"' c #F6F6EEEEEAEA",
+"] c #FAFAF2F2EAEA",
+"[ c #40404C4C4848",
+"{ c #E2E285853838",
+"} c #EAEAEAEAEAEA",
+"| c #F6F6F2F2EAEA",
+" . c #F6F6B2B23C3C",
+".. c #F6F6BEBE3C3C",
+"X. c #E6E6E2E2CECE",
+"o. c #DADA6D6D3838",
+"O. c #484848484040",
+"+. c #4C4C5D5D4C4C",
+"@. c #F6F6AAAA3434",
+"#. c #959544443C3C",
+"$. c #F6F6F6F6EEEE",
+"%. c #3C3C3C3C3C3C",
+"&. c #DEDE75752C2C",
+"*. c #3C3C44443C3C",
+"=. c #3C3C44444848",
+"-. c #E6E6A1A13838",
+";. c #444448483C3C",
+":. c #484840403C3C",
+">. c #5050A5A5B6B6",
+",. c #EEEEA1A13838",
+"<. c #404040403C3C",
+"1. c #F2F2A1A13434",
+"2. c #EAEA79792C2C",
+"3. c #757565654444",
+"4. c #959555553C3C",
+"5. c #F2F299993030",
+"6. c #D6D685853434",
+"7. c #E2E291913434",
+"8. c #C2C234342424",
+"9. c #959569694040",
+"0. c #F2F2A1A13030",
+"q. c #F2F291912C2C",
+"w. c #EAEA89892C2C",
+"e. c #F6F6AAAA4444",
+"r. c #F6F6A5A53838",
+"t. c #EAEA81813030",
+"y. c #C2C279793838",
+"u. c #F2F2A1A13C3C",
+"i. c #40403C3C3C3C",
+"p. c #3C3C40403C3C",
+"a. c #616140403C3C",
+"s. c #505040404040",
+"d. c #48483C3C3C3C",
+"f. c #EAEA95954040",
+"g. c #404048483C3C",
+"h. c #DADA79794040",
+"j. c #3C3C40404848",
+"k. c #404038385050",
+"l. c #3C3C40404040",
+"z. c #444440404848",
+"x. c #3C3C38383838",
+"c. c #383834343434",
+"v. c #303030303030",
+"b. c #38383C3C3838",
+"n. c #2C2C2C2C2C2C",
+"m. c #38383C3C3434",
+"M. c #343434343838",
+"N. c #343430303030",
+"B. c #656538383838",
+"V. c #343438383434",
+"C. c #34343C3C3C3C",
+"Z. c #3C3C34344444",
+"A. c #F2F291913838",
+"S. c #F2F299993C3C",
+"D. c #EEEE91913434",
+"F. c #3C3C4C4C4848",
+"G. c #999938384040",
+"H. c #F2F299993838",
+"J. c #2C2C2C2C3434",
+"K. c #4C4C38383C3C",
+"L. c #818138383C3C",
+"P. c #404044443838",
+"I. c #C6C644443C3C",
+"U. c #AEAE38384040",
+"Y. c #C2C230302020",
+"T. c #C6C62C2C1C1C",
+"R. c #FAFAF2F2EEEE",
+"E. c #FAFAF6F6EEEE",
+"W. c #FFFFF2F2EEEE",
+"Q. c #FFFFF6F6EEEE",
+"!. c #FFFFFAFAF2F2",
+"~. c #FFFFF6F6F2F2",
+"^. c #FAFAF6F6F2F2",
+"/. c #FAFAFAFAF2F2",
+"(. c #FFFFFAFAEEEE",
+"). c #8D8DCECEDADA",
+" . X o O + @ # # $ . % % % o X & ",
+" X O # * = - = = ; $ O # : * * : > , < X ",
+" X % : = 1 2 3 4 5 6 @ < < : 7 3 2 2 1 6 * @ % . ",
+" < O : 6 8 9 0 0 q w 6 e r X X o t 7 9 0 0 y q 2 6 e > u ",
+" i p a s 0 d d f d 8 g 6 h X t e j k l d z z x g 6 c X ",
+" v b 6 n d d d f d x m 6 # < % > 6 M d d k z < v g 5 N < ",
+" v 1 B t V k k d f d 6 6 j < t 6 6 C f d d V O > g 6 Z < ",
+" l 2 6 # V k k k f f B 5 h A > a S f d f f V + = 1 D M ",
+" o x 2 e + f f d d C 6 5 h t = 6 q f f C C # * 6 F M ",
+" G x w ; d f f C f B 6 + : 6 S H f J J j a 6 K 0 ",
+" G 8 = h J M J f 2 5 n b g L J J J C e 6 S y ",
+" x K c n n C k 8 w p a B H J J C n 6 2 0 P ",
+" Z K n M C f J 8 2 2 q M f C J p 1 j z < r + , $ o ",
+" 2 p I C f f f n H M k k J n b D k A A , @ U = e = = * @ r ",
+" Z 1 n J J f f d k d f f J n K Z t h > = a B 2 2 2 K 6 e ; ",
+" x 6 j J f C f f Y f f f f f 8 6 = b K T L 9 0 0 0 9 2 6 6 r ",
+" o + m e + f C f f Y f M C C f v R R E E 0 M f d f f J q 1 6 # ",
+" O @ ; : * = a W K n J C C f k f C J J J J n n M J J J J f f f J n 6 5 p i ",
+" O c 7 S 3 2 3 Q ! y 0 J C k C C C J J J J J J J J J J J C f J J J Z 5 5 0 ~ ",
+" t U S L y 0 y H J J M J J J C f C C M J M C J f J J J J J f f f k k c 5 S P . ",
+" O : 7 H M d f J J J f C J J C f f f f C J J f f f f C J n n n I + p p 5 5 Z < & ",
+" X p = L C d f f C f C k f f f C f C f f J C J J J f f C n a e * e = ^ 6 / w n . ",
+" o c 7 M C M C J f f f k k f J C f J C f C M J J J C f J D ( 1 2 2 3 R E E y M ",
+" 6 Z f f f f C k k k k f f f J J J J J J J J C J f d I 6 W L M M f P z z ~ ",
+" 1 : v C C C n n h j p p # h n J M J M J M J f f f I c 5 7 C ",
+" X t * a X S 6 p I n p 7 a a a 5 5 a a N # J C M J C J C I I p a 5 j ",
+" < Z 6 ( . x B a e - 5 5 K 3 3 ) _ 4 5 5 D C k f C Z c * = = 6 / 2 ",
+" X h a 5 b O 8 B 6 / w 3 H M k k J L W ( H f f C J K 6 K 8 8 q 9 H ",
+" % c ( W ( t c 6 7 9 y M z < v m ( n f J J I K 1 j k Y P ",
+" A 7 ( 5 ` a X X D a 5 D k v B ( # f J J I K 7 C ' X ",
+" < Z ( 5 5 5 , X % X h 6 5 j z l 2 g j J J C n g D P . ",
+" p ` 5 K g ; $ r , X l K 5 j i A 3 g Z f J J n g Z z ",
+" Z ( 6 L 4 6 + o h ; O z D 5 > < x m s J J C j 5 n ] ",
+" Z m [ j { m ; } . o p c H M D 5 Z i x m Z C C C Z m I | ",
+" % % x 1 m s ./ a @ % : 1 9 ..s 5 j z v m Z f d f Z ( X.< ",
+" O c U @ + m 1 E E o.g - @ l b N H ..F O.+ v 1 Z d d d Z 5 d X ",
+" < : a [ a # x a +.j y @.#.5 * $. h 6 F ....T g + x m j d d V Z ( X.< ",
+" u l b ` %.` - @ v m m E ...&./ ( h . p 6 D ....{ B + X < x 1 j d f d D 5 + $ ",
+" A S 5 *.=.*.a > ( ( L . ...Q B * , < c ( F ....-.B h X x 1 n f k f D ` c l ",
+" < p ( ;.` 4 :.a >.< ( 5 L .. ...,._ 6 ; $ < 6 m s ......w p v +.n d f C D 5 F ",
+" X h [ *.<.D 3 g a + } v m 5 F .. .1. .2.B 6 @ X 6 5 3.......4.b O 1 n d f I N ` Z ",
+" l ( ` *.e x Q g e , } v 6 ;.s ....@.5.@.Q g b , < a m b 9 ....6.1 r l 1 n k C p 6 B H A . ",
+" w ` W m j 7.8.5 * h < X l 6 5 9. . .0.@.@.5.Q g * , < a 5 1 j ..H -.m + < l 1 n d p 6 5 s k P P . ",
+" ;.W :.F .5.4.m e r < l B 5 3... . .@.0. .q.Q a * + < l ( 5 m E ......5 p < l 7 0 I 6 B 8 y 0 0 0 ~ ",
+" / ` W 3.-.q.q.Q g * , % O K ;.1 ..@.0.@.1. ...5.4 6 e h < t 5 ( g E ......B e $ O q n c 6 s ....H 0 0 ",
+" A 8 / ;.m 7.5.q.w.Q g = ; r S ;.m s @.@. . . .....&.4.B = , < | # ;.5 B E ......Q 6 , < j b m K ..e. ...0 0 ",
+" . l 8 ;.O.F 5.q.5.0.Q / ^ > % Z ;.;.s ..0.@.5.q.@.@.@.q.Q w * # O < : 5 5 F ......H 7.B p < O a 5 B E .. .....0 ",
+" O , G x O.:.F ,.q.q.q.q.&.4 6 ; , h ` O.N ..0.r.5.q.5.0.@.@...t.w 6 * , A D 5 m L ..........4.b O o O : a B R ..........H % X ",
+" t : = @ < O B ;.m 6.@.q.q.q.q.&._ a e h < | . v ` W m .0.0.@.5.@.0.r. . . .w.4.5 = @ r 6 5 1 ..........H y.6 h O : a B R ........e...H t : h ",
+" : ^ 5 * r 3 O.;.F 0.@.q.q.5.q.w.4.W a + < X l ;.;.;.6.5.@.@.5.0.0.@.0.@.0.@.2.Q g a @ $ < h ( O.1 ............-./ c : a a L ........H ..q D b S ",
+" A 8 T ;.` ; } Z O.5 1 5.0.q.w.2.w.5.2.#.g e @ O O g 5 ` 9.1.r.@.@.@. .@.0.5.q.0.0.y o.#.a ; O p 5 g 9...............4.;. p a 5 w ..........H Z +.K 8 ",
+" X Y H 4 W [ h % 2 ;.*.6.q.q.2.2.2.q.0.0.Q 5 a * + / g g 1 -.@.@.@. . . .5.5.5.0.0.u.E &.w a U e 5 g y...............7./ @ % r a ` g R .... .....N a B q ",
+" k H 5._ :.- > $ 8 ;.<.3.w.w.q.w.w.w.q.2.u.8.B 5 = B m m m N .@.0.@. . .@.@.@.@.@. . . .o.T w 6 g B L ................Q - # c 5 g y.........L +.;.` K C ",
+" 0 .... .Q ` a > $ B *.;.6.q.0.q.2.2.w.2.w.w.Q 4 m g g O./ K 7.q.@.@.@.0.0.0.@.@. ... .@.w.0.Q m m m L @............... .W =.=.i.w .H .. .L ( ;.p.;.Z ",
+" ........4.:.a > < 2 ;.i.3.7.2.2.q.2.q.2.2.q.@.&.#.g O.4.&.{ .........0 H ....H ......@.0.0.2.o._ #.6.5.r. .1. .........a.=.*.s.L ..H H L 1 ` / a.` : ",
+" ......q.#.d.a # 8 *.i.:.y.w.q.q.w.q.2.2.2.5.@.q.Q Q y C k k k f C C f f C k f f k 0 y e. .0.1.q.q.w.5.r. .u. .........4 ` :.1 9 ..H 9 1 ;./ E 2 5 b V ",
+" ........Q g = # x g i.<.3.w.w.w.w.5.q.5.0.....0 0 H k f k f d f C J n 0 0 f k k k k f C M H .. .q.q.q.0.r.5.u.0.......&.4./ B j ..H 3.( g 9 M Z 5 +.t ",
+" 0 ........Q g a h } < l 2 ;.i.;.3.&.2.@.H 0 M f J C f C J C J n n 0 0 0 H H H y n C k k k k C C f M H e.t.w.5.u.1.1.@. .......E f.{ ..H j ( <.T 0 f s ;.5 # t h + t $ r r r $ ",
+" P H ........Q s.= r % A Z g.%.i.m L ..0 Y d v f f C M J n H 0 n 0 0 y y 9 Z Z N D Z p # + I C C f C 0 H 9 5.w. . .r.r.5. .......H ....j m 5 S 9 I I s 5 %.a = - = e @ : e = = * @ t < ",
+" P ........0.Q 4 * + % x g s./ o.H Y d f J J C f f C J H H H n j Z 7 b 6 =.*.=.` 5 =.[ =.= c # k C M 0 0 y ..r..... .1.1. ...........K O.m F c b b [ %.i.=.5 5 5 1 1 c O : a 7 R R h.2 b = # ",
+" M ............&.a.e , l o.o.-.M f d J M M C C f f C J n y D 6 a [ j.5 W s.B 1 1 1 b b ` ` ` c I J M M M 0 0 y ........5. .........s B g O.k.l.5 ` 5 W :.g 3 y.{ f.f.R k + a ( Z d k d n T 6 = r ",
+" ..................0.o.#.: M k f M f J J C C f k C f C J j D b ^ z.=.5 1 b 7 U N U U b U U 1 %.%.( : D n M M M 0 M H H H .. . ... ..... .Q / 5 ` W g B K 4./ 7 ......H H 0 j > : @ # [ 6 j Y Y V G v w 6 > ",
+" ..........................E 9 ..M z k f C n 0 J f f C J n n D [ ` ` g m b c b +.( ( ( ( +.U U b b ;.x.%.=.5 Z 0 M 0 0 M M M 0 k H ..........0 y w.Q _ Q o.&.u.r.Q R ..........6 a =.[ ^ ^ = p r < # 5 5 # Y Y d z V S 5 c ",
+" H ..............................0 f Y k f J J n 0 M J C C I j c *.l.j.+.b ^ g.*.%.%.c.%.c.v.%.( *.a b *.%.%.%.W b n M J M C M M 0 M J 9 ................e.q.@... . ...........L 1 5 / 2 3 3 w ` a c r h 5 5 ; d d Y V V N ( 1 ",
+" % r j j N b +.N N F F s s s -.....-...M k k f J J C J n M J J I : ` =.p.W =.*.b.%.c.n.%.%.x.x.c.x.i.<.<.+.*.%.%.%.%.%.<.p n n M M M M M 0 J 9 ...... .........,.5. .................1 ;.R 9 0 J C y 4.5 =.> Z g 5 N d d d Y V S ` ",
+" r : a a ` ;.g <.*.*.;.;.;.;.( ( +.1 1 j k k k C J J J J n M n n D =.p.m.c.c.M.M.M.%.M.M.M.M.x.%.c.M.%.x.%.1 z.%.%.a.s.%.%.=.U n n C C C M M n E ...... .....H .... . .@... . .....9 F ;.K C d d f Y A x l.` e x B 5 +.d d d V d b 5 ",
+" R 6.6.h.{ 7.&.o.Q Q Q _ _ Q y.&.&.7.M P k f C J J J J n J I 7 *.%.%.c.N.N.M.x.M.M.x.c.%.%.x.c.c.x.%.x.` U B %.%.D R 8.B.i.*.: n J C C C J n E ............H H H .. .......L s N a 5 %.m v f f f k Y d g W a l 7 5 6 d d Y r p g 5 ",
+" k k P z Y k k k k C 0 ......0 C V k k I H n n J J n C Z p.V.%.c.c.N.c.c.M.M.M.c.N.x.%.c.c.N.c.%.%.g.U b <.%.c V f q #.i.*.b n M C f C n E ..... .....H H ........H ..+.5 5 5 l.%.` x J f k P Y d 3 W 5 l S 5 5 V d d p a g ",
+" < < | o < ' M ....H n + p : U c 1 b b N p j I K C.V.i.%.N.N.N.c.N.%.M.Z.N.M.c.x.%.c.%.x.c.*.b U ;.%.a v x v q _ a.` b Z J C f J E u.e. .s 3.D H H H ......0 D 5 g / 4 #.4 :.c h J k Y Y f x w *., # 5 5 v d d 6 6 q ",
+" X X X o M ..L b ^ =.[ [ ` [ =.g z.` =.^ e W %.c.+.*.c.v.N.M.M.c.M.%.N.%.%.x.c.c.N.c.%.p.U b +.%.;.x y y d x ! 4 5 a D I C J H 5.u. .u.o.4.D H H H ....M y Q o.A.e...e.Q 5 = : I C f f f 8 s.> p 5 g I k k a F M ",
+" X . < t p +.` %.p.=.*.*.p.%.<.g / #.a.` p.%.c.%.( %.c.N.N.M.v.M.z.=.v.%.%.c.%.c.%.x.%.%.b U b i.;.n H y n v l q / *.^ p I C C ..r.e. ...S.Q 9 H ..H ..H H ..H ........D./ ` a h C f f C J 2 - a 5 5 v k d a Z ",
+" X o O # a =.p.p.%.%.%.v.N.c.v.c.c.m.( ( ( 5 C.%.%.g p.M.c.v.N.c.=.e +.Z.M.%.c.b.M.x.%.c.%.+.U b d.l.n n n n J V A 8 4 W [ c h k y .. .D s ..e.......H ....................o.#.g e j J J J f y g z.W 5 t d d ( p ",
+" < < + c =.=.p.C.m.N.c.c.c.N.c.C.M.c.c.x.%.g.+.%.c.c.B %.v.N.N.%.%.e e +.%.M.C.x.c.c.%.b.x.%.+.U b <.<.j J J J J k i l L #.` ` e # 0 ....o.4.9.L .. .........................0 q Q 5 b x J C f C ! 4 / B I d I 5 N ",
+" o i h ^ =.*.%.x.N.x.x.x.x.x.N.x.c.c.c.N.M.c.v.F.;.c.N.m %.c.N.M.%.^ b e e <.%.c.c.x.%.%.c.M.c.b U U %.%.p J J f f J d A A n G.:.` a Z ......,.o.F s u...............E ....E ..C O v / 5 p f f f J f 9 R h.f d C 5 D % $ % < ",
+" o X.: F.=.%.%.c.N.N.%.c.Z.c.c.c.c.N.v.v.N.c.c.c.%.( %.%.( %.N.v.c.c.*.e e e +.c.M.c.c.x.%.x.x.c.+.U N s.%.D J J J J J J A G G x 3 / <.a N 9 e.r...u.Q L ...........N 3.b +.1 3.# h v S 5 N I f f J J f d J k d d 5 Z O p ; c : h $ o ",
+" z I b ` *.%.` %.N.v.N.N.c.M.N.N.c.M.M.N.v.N.c.c.N.c.+.O.c.^ ;.c.M.c.x.%.U e e +.%.M.x.c.c.N.N.N.x.+.U 3.%.%.D C C f J f J J f l A V q _ g *.+.Z u.....r.H...........3.;.;.*.g.4 #.B a = 6 W ` D J J C J J J J k d d K D > a K L T c > , . ",
+" H H 1 *.%.%.a +.x.c.v.N.N.M.c.x.J.c.M.N.M.v.c.v.N.N.N.( 5 x.*.5 N.v.Z.v.C.e b e +.M.%.c.%.%.N.N.c.%.+.U ( %.%.D f f f f f f J J J d V A v ) 4 O.6 N -............. ...;.W %.l./ 9 n q ! 4.4 w 4 2 Z J f C C J C d d d 8 b # t # * a K 9 k k T a ; % ",
+" ....@.;.<.%./ +.*.b.v.v.N.N.N.N.N.M.N.c.M.x.N.c.M.c.N.c.%.a <.%.+.c.N.M.v.M.b b * U i.%.x.%.%.c.%.x.%.+.b ;.%.%.s C f f f f f f f f J J d A V n Q 5 [ 1 s ...... . .r.6.:.W <.T 9 C d d C J E E y y H J C J J J J f d f J 3 a = 6 1 2 9 M z z # a a r ",
+" ........s.m.%.s +.p.c.v.v.N.c.v.c.c.v.v.M.%.M.v.c.N.v.N.v.C.[ d.C.+.d.c.v.v.N.U U e U O.%.x.c.%.%.%.x.` U U *.%.i.Z d d d d f f d d d J J J J l V v 3 s.;.( F .. . .@. .y.:.` K M d d k f f J J J v J J J J M 0 n J C f k d x 3 s h.L y J k Y z D 5 5 d ",
+" ......-.E B.x.p.N ( *.N.v.v.N.x.N.%.x.x.N.c.N.c.v.N.N.v.N.v.M.[ s.p.e 1 V.c.N.M.U U U U 1 b.%.%.%.c.M.M.a U 3.%.i./ H d f J f f f f f f C f f f J J d J 8 w *.;.1 s .. ...7.g 5 D V Y k k f J J J J J J J n J M M n J M J f J J n H J J f k Y Y Y b 5 B P ",
+" ....D 1 ;.*.%.v.M.%.%.p.v.v.v.c.c.K.d.a B c.c.M.N.N.v.M.N.v.N.M.F.*.p.+.b :.W d.%.b b U U b V.M.N.c.N.M.5 b U ;.%.:.L C d f J f d f f f f f f d f J n n V V q #.<.;.m L .... .w g N v l O X.f I J J n J J J J M J M J J J J J J n n J k f Y V Y V V a g L ",
+"M j +.*.*.*.%.%.M.Z.%.x.%.c.v.N.N.M.B 9.+.+.c.v.N.M.N.N.N.x.c.N.l.( %.[ e U b b b b U U U b ( %.M.c.%.%.+.b U m %.i.T H f d f f d d f f f f f f f f J J J n f V x L.:.;.1 F E .&.4 m : p h h Z j n n n n n J J n J M J J J J M J J J C I h # h + v v 5 F ",
+"c [ P.*.%.d.B.B.L.L.L.c.<.B.N.v.v.x.%.c +.+.*.v.v.M.v.v.N.c.c.N.( *.b.M.*.( +.e U b U U U U ( 5 W z.g 1 U +.( ;.W T y I d f f d d d f f J C f k f f C J f J J J l x _ a.<.;.3.L ..&._ g ^ ^ a a 6 a 7 D j Z n J C C C C C J J J J J J I e a 6 = = = e B H ",
+"a 5 s.L.Q 6.-.e...H q %.` 7 v.v.N.x.x.F.+.+.( ` c.M.c.v.N.N.v.N.%.%.x.c.M.V.C.*.+.+.U e e e e b U b b b b g.<.l.s H J C d d d d d d f d f C J f f k d f J f C J J V v ! W p.*.1 L ..q.o.4.*.*.4 2 4 g [ a b Z n J f C J C J J J J C C j ^ 5 8 h.3 3 3 8 d ",
+"! o.-.H M k P z z A l s.*.- x.c.v.x.v.C.*.+.+.+.g M.v.M.N.v.v.c.%.%.x.N.M.c.v.%.*.( +.3.9.3.1 1 b +.b ( g.%.i.w H d f f d d d f d d d d f f f f f d f f f k k f k J l V 8 B.%.%.m 9.6.9 B %.;.y 0 H h.4.5 l.1 h J J C C J J n n C f n b 5 B ",
+" < < < % w p.*.%.c.v.%.M.c.*.+.+.e U <.N.c.v.%.M.i.L._ Q B.%.c.c.%.B.s.%.%.O.B m g s.*.;.:.%.4 y.9 J d f k f k k d d d k d f f d f d f f f f d d k d f J d V q #.:.p.p.( 9.%.%.i.# t A X.D l.l.L n J J J J J J J n I t c a O.N ",
+" < A 8 *.*.%.x.c.N.b.c.b.F.- e U m %.c.c.K.4 Q E 9 y R _ B.i.g 9 R L.B.K.d.i.i.i.K.s.L.T 9 0 f f f f k f d f d d d d d f f f f d d f f f f f k k d f J d V x 4.%.%.%.%.%.%.%.=.= # p =.%.B J x J J M n D D N U e e 5 ` / 9 ",
+" . X x 4 %.` %.c.N.c.x.Z.^ +.+.+.+.*.c.%.7 q y J J J J J R Q 7.0 f n q { o.h.o.o.h.E y M J J f f f k d f f f d d d f f f J J f f d f d k f k k d k f f C I : a %.%.<.%.i.B.B.l.l.^ [ <.g L x J n J n 7 5 w #.2 2 2 3 _ 9 ",
+" . X A 8 <.[ <.x.c.c.c.M.*.+.- +.+.m.x.i.s n J C J J f v f n M k f f v d f J J C J d f f J f f f d f f f f f f f f f f f f f f f d f d f k k d d k d f J J K 5 <.s.4 #.T R L #.z.p.=.W s 0 J J J n b 5 4 ",
+" . . X l 2 *.;.i.i.c.%.%.p.+.+.+.+.m.m.B 9 n J f C C k k d k k f k J f f f J J J f C C J J C f f f f f k k k f f d f f f f J f f f f f f f k V d f k f J J 8 _ / L y y n J J x 4.*.:.3 y J J J n * 5 T ",
+" X G % Z *.` 1 B i.i.%.%.+.+.e b m.%.3.n n J C f f d d d d k f f k C f f J f J d f f J J d k f f k f f f d f f f f f f d C f J f J f J J I v v I d d f J C n E 0 d J f d d x 6 z.K H n C J I p 6 F ",
+" . < x *.%.( +.B g z.z.+.b U e ;.%.7 J J J J J k d d d d d d k f d f J f f f d k k f f d f d f k d k f d f J J d f f d n j p : p : N c : p # x f f f f C f f C d k d d d e 5 5 E n J J n Z 6 K ",
+" < A l *.x.p.%.( ( [ +.b b +.b m %.;.# x n J J f k d Y d k d k f C f J J J f k f k f f f d f f f J f J J J J J x Z D c = a 5 =.=.=.*.` 5 =.- c X.d f k k f d d d Y d d + a g N H J J J j 6 g ",
+" . A A / %.i.#.K.*.<.*.F.( B ( *.c.%.5 D y J J C d Y d f d k d k f C f J J J f J J f f f f f f f f J I I p D b 6 5 5 =.l.*.%.%.%.p.p.%.g :.=.1 I f k d Y d Y Y Y V V + = 5 / q f C f C b 1 8 ",
+" . < < S g.*.S Q _ B.K.%.p.%.%.x.K.x.%.a Z J J f C d J Z v f d d d f f J f f J J C f f f f J J n p c b b *.=.l.p.%.%.%.%.%.M.%.i.%.i.%.*.%.W s M C d k d k d k k d h e a B L 0 C C d # 6 D ",
+" | V Z / ;.6 h H q Q _ L.#._ Q &.B.x.%.` c N : c c b ^ + J f k d f f J C f J J C d I n h p N a =.*.l.%.b.%.%.%.N.v.M.%.x.x.c.%.x.%.%.i.%.4 H J f d d d k Y d d I c a 5 L 0 f f f h = B H ",
+" o l d #.;.5 h J J d 0 y H H 0 J 8 B.%.%.l.*.=.=.=.*.` n J J f f J J J C C J n # p e a ^ =.l.%.%.b.C.%.i.%.%.%.v.M.M.M.b.x.%.%.Z.x.%.i.w 9 f d d V d k k d Y V : a ` 2 M C f d n b a j ",
+" < A Z w <.# J J d d v f f f f v 8 #.i.%.<.%.b.%.K.#.H J J J J J J n Z D c a =.=.%.p.%.*.%.%.%.c.M.x.x.Z.i.i.x.x.x.x.c.x.i.i.%.%.%.W q C k d Y Y Y k d k Y t a 5 g 9 f f d I c a 1 ",
+" X l O 8 s.b x J d k f f f k k d V x Q L.K.K.B.G.R 9 J J J n n p c a =.=.p.p.%.C.C.%.c.M.c.Z.%.c.%.%.%.x.c.z.%.x.%.i.m.%.%.%.%.%.<.F M d V V z Y Y d k d + c 5 5 L M f f d : 6 1 ",
+" A x x / 5 # C d k k f k Y d d d d C q &.&. .9 0 J n j Z b a =.` l.%.%.%.M.%.c.N.c.c.z.%.x.x.x.c.c.%.c.Z.%.c.%.M.d.%.i.i.%.%.%.B 9 Y Y Y V P P Y Y Y t b ^ 5 F H C f f I a g Z ",
+" G v x 5 p.c v k k k k k d Y d d f f f C M H x n Z 7 a *.l.%.%.%.M.v.v.v.M.%.c.c.%.M.%.b.%.M.x.x.x.%.M.%.%.%.%.%.i.x.i.%.%.%.x.F M Y z V z z Y Y ~ V : a ` K H f k k k : ( S ",
+" X G x 6 %.1 C Y d k k d d Y d d d C J I n D c a =.=.*.%.%.%.c.M.M.M.c.M.M.M.M.v.c.M.c.c.x.x.K.a.K.a.B.i.%.x.x.%.%.%.i.%.%.%.%.L Y Y V z Y z Y Y Y t a 6 g L k V k z + a m ",
+" X X % x g i.s J f d d k d d d d v n n N b a C.%.%.C.C.M.M.M.x.N.M.N.x.%.x.x.%.N.M.%.M.%.i.K.a.I.o.Q ! o.I.8.B.i.%.i.c.x.x.x.%.B J k V Y Y d Y Y Y V D [ 5 F 0 k Y Y I b a 8 ",
+" < A # U e *.;.Z f d d d k f I x p c a =.=.l.%.C.C.V.N.v.N.c.Z.%.N.Z.N.M.x.c.x.i.c.x.%.%.x.<.#.o.! ! ) ! ) ) ) ) G.d.%.%.%.x.c.%.s d V Y V Y Y d d X.# a 5 S H Y d Y V c 5 K M ",
+" A h F.` l.%.` L J d d d d j : a l.%.%.%.%.%.x.M.M.N.N.c.c.N.M.N.c.x.v.%.c.x.%.i.M.x.i.i.K.4 ! ) ) ) ) ) ) ) I.) ) 4 i.%.x.%.i.5 H d d d v d d d I : a 5 2 9 f k d d n 6 g q ",
+" X.1 *.3 _ %.5 j n f f I D =.%.%.C.%.x.m.C.x.N.c.v.c.c.c.x.N.N.c.N.c.v.%.c.%.i.B.a.B.%.i.Q o.! ) 8 ) ) ) ) ) ) ) ) L.x.c.c.i.:.T J f n p * c p h p 5 ` g H f d k Y + b g Z ",
+" p ` 1 0 L :.g j n I : a =.%.C.c.x.c.N.c.%.c.N.N.c.x.c.v.M.x.v.v.M.v.N.c.x.B.Q o.! w d.#.) ) ) ) ) ) ) 8 ) ) ) ) I.s.x.c.c.i.3 H f p a =.` ` =.^ =.` W L f f f k t c 6 L ",
+" v 8 *.7 d x g m 9 n N ` p.C.%.N.x.c.M.M.c.M.x.N.v.N.N.N.v.M.M.c.M.c.c.M.Z.i.o.! ) ) a.4 ! ) ) ) ) ) ! ! ) ) I.) ) U.l.M.%.c.d.H d p =.l.l./ <.l.*.=.i.S 0 f f f f : a g M ",
+" A Z ;.1 d x g +.n q ` %.C.v.M.N.b.c.v.N.v.%.c.N.v.M.c.c.N.x.c.v.%.N.J.x.%.4 ) ) ) ) ) o.R ) ) ) ) ) ) ) ) ) ) I.) 3 %.%.%.x.S j : =.%.K.L.8.s.%.%.%.2 y J k k k p a ` S ",
+" A x B ( + d 4 ;.# J g %.%.M.%.N.c.N.M.v.v.M.v.v.M.N.c.c.c.Z.c.x.M.N.c.%.%.4.) ) ) ! ! ) ) ) ) ) ) ) ) ) ! ) ) ) ) _ Z.c.x.B.F 6 =.%.c.G.Y.8.L.i.%.%.Z k d k k d a 5 z.j ",
+" l S W # l S *.D l 3 s.%.x.c.c.c.c.%.M.c.Z.v.%.N.c.c.c.Z.M.x.%.x.c.c.%.d.3 ) ) ) ) ) ) ) ) ) ) ) ) ) ) ! ) ) ) ) #.%.x.W / 5 j.5 4 c.L.T.T.Y.%.%.z.D l d P k n a ` z.h ",
+" Z *.e + Z <.c v J Q a.%.M.M.x.x.%.N.N.c.N.c.M.c.x.%.N.Z.%.x.x.%.%.%.:.3 ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) w x.%.%.%.%.W L.8.K.i.Y.8.Y.K.%.i.c l d Y d : B 5 5 ",
+" v 4 *.= p a.` > f J ) a.%.%.%.N.c.M.c.M.c.v.M.M.N.N.c.c.M.x.%.c.%.i.z.8 ) ) ) ) ) ) ) ) ) ) 8 ) ) ) ) ) ) ) ) d.M.i.%.%.i.8.T.Y.L.i.G.T.T.a.%.%.m x k k p ^ 3.5 6 ",
+" q #.:.^ a.*.a f d f h.a.x.%.c.M.M.c.%.c.n.N.c.v.x.M.c.c.%.M.c.x.x.<.3 ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) z.%.i.c.K.L.Y.T.8.Y.a.a.8.8.B.%.%.W + z p a ` a ` 1 ",
+" J ! / %.i.` v d f J q Q B.%.%.x.N.M.M.N.x.c.N.M.x.M.Z.%.M.c.c.x.%.2 ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 2 i.x.i.K.K.G.Y.T.T.Y.G.%.4 Y.L.p.%.%.> O 6 5 %.l.l.1 ",
+" d q #.a.W @ f J f J J R B.%.%.c.M.N.c.x.N.c.%.M.N.%.%.%.x.x.%.i./ ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 3 z.%.i.G.L.c.K.T.8.8.T.8.a.s.Y.8.a.i.%.c # =.:.i.=.` b ",
+" ] J ! 4 = h f f f J d y Q B.%.c.v.c.c.M.m.b.c.M.M.%.%.%.%.%.%.i.3 ) ) ) ) ! 8 ) ) ) ) 8 ) ) ! ) 2 5 %.K.G.Y.Y.B.c.Y.8.T.8.Y.G.x.T.Y.G.%.%.1 6 <.g s.%.<.7 ",
+" Y 8 g 6 # f f f J Y f R _ %.%.N.%.M.N.x.M.x.M.%.x.x.%.M.%.x.S ) ) ) ! 8 8 ! ) ) ! ) ) ) ) K l.%.d.U.8.8.Y.Y.x.B.T.Y.Y.Y.U.B.G.Y.8.%.x.l.g a.g s.%.l.D ",
+" z 3 g = # f f f f Y Y J I.s.%.c.v.%.%.M.M.%.%.%.%.i.x.%.%.z.S ) ) 8 8 8 ) ) ) ) ) ) ) w %.x.x.G.U.8.8.Y.8.L.i.G.8.T.Y.8.G.a.Y.8.d.x.%.#.4 :.%.l.` p ",
+" v 3 g 6 x f f f f f J x ! #.i.c.i.%.x.x.%.%.%.x.x.x.c.%.%.z.8 8 8 ) ) ) ) ) ) ) ) 3 %.%.d.Z.L.Y.Y.8.8.8.Y.c.a.T.Y.Y.Y.8.K.4 Y.4 %.c.B.#.:.i.l.5 c ",
+" x 3 5 : x d f f f J J n q Q B.d.%.i.c.x.%.M.%.%.c.x.%.<.%.5 S 8 ) ) ) ) ) ) ) 8 z.%.%.B.L.x.Y.T.Y.T.Y.8.B.%.#.8.8.Y.Y.L.d.Y.G.%.x.i.#.:.<.=.` N ",
+" _ ( : # f f k k f f J J E Q G.s.i.%.M.x.%.%.%.%.%.%.%.%.%.B 2 3 ) ) ! 8 3 g x.i.a.G.G.i.d.Y.Y.8.8.Y.8.K.K.T.T.T.Y.Y.K.L.Y.a.M.%.#.B.i.%.*. ",
+" J _ / a : x f k P P d C f f H ! _ 4 x.%.i.c.c.%.%.c.x.M.%.%.%.l.B 3 ) 8 g i.x.B.#.8.T.L.i.B.T.8.Y.T.Y.L.x.U.Y.Y.T.T.L.d.T.U.i.%.a.L.i.%.i. ",
+" J R 4.a * # k Y P Y k J f d f n E I.4 d.%.M.%.c.%.%.M.x.%.%.%.%.` B K %.%.B.Y.Y.8.Y.8.B.x.Y.8.Y.T.8.8.a.B.8.Y.T.T.Y.B.#.T.a.%.i.#.K.%.` b I ",
+" n _ g a U v d Y P Y k f d d d J R ! G.a.i.%.%.%.Z.M.c.N.%.c.%.%.%.%.K.#.8.Y.T.T.T.8.K.a.Y.Y.T.Y.Y.Y.%.L.Y.T.T.T.#.a.Y.G.%.%.#.a./ g m + ",
+" ) w m e : h X.Y d d Y Y k d d k J f.Q _ 4 K.i.x.x.x.i.x.c.M.%.%.x.B.Y.T.T.T.T.8.U.%.B.Y.Y.8.Y.8.a.i.U.T.T.T.8.s.4 T.B.i./ B.g 5 B # ",
+" q o.4 g a c p h X.Y Y d k k Y Y d f n y h.Q U.B.i.x.c.x.i.i.G.B.x.T.T.T.T.Y.8.Y.B.<.L.Y.Y.Y.8.U.K.B.8.T.Y.8.G.<.U.8.c.d.d.<.5 5 p ",
+" o._ g 5 a ; h v k k d Y Y d d k d f f M f.o./ x.i.Z.a.I.8.B.K.T.T.T.Y.Y.Y.8.K.i.Y.Y.8.8.8.#.i.L.T.Y.8.8.B.d.#.c.%.W %.%.=.: ",
+" ! _ B [ ^ = : # x d d d d P d f f d d I m %.i.K.L.Y.Y.Y.i.L.Y.T.8.Y.Y.T.Y.K.K.Y.8.8.8.8.B.K.Y.Y.T.8.Y.a.g i.%.W %.l.` N ",
+" _ g 5 5 a = e c n n + h h h h n N %.x.d.L.8.T.8.Y.4 i.L.Y.8.8.8.8.8.G.<.8.8.8.8.Y.8.B.L.T.Y.8.U.a.g i.d.:.%.i.l.b ",
+" I.#.s.z.` ` a a a 5 [ ^ a a ` %.x.%.L.Y.T.T.T.Y.B.K.Y.Y.Y.8.Y.Y.Y.L.B.Y.Y.Y.8.Y.Y.d.U.Y.8.B.i.i.s._ 4 %.%.` 6 ",
+" y ! I.#.4 / g :.g ` 5 *.p.%.i.i.%.d.G.T.T.T.8.Y.K.K.Y.8.Y.Y.T.T.T.K.B.8.T.8.8.T.K.K.#.d.d.%.a._ I.#.l.l.l.( ",
+" E f. I.B.%.%.i.4 a.x.s.T.T.T.Y.Y.T.K.B.Y.Y.T.T.T.T.L.i.#.Y.Y.Y.8.G.d.x.%.%.4 8.8.4 i.%.%.i.l. ",
+" I 3.m.d.s.8.T.B.x.L.T.Y.Y.Y.Y.U.x.G.Y.T.Y.Y.8.8.4 d.Y.Y.Y.8.#.d.%.i.B.G.#.d.i.4 d.%.z.W @ ",
+" h ` %.<.a.8.Y.T.B.d.G.Y.Y.Y.8.8.B.K.#.Y.Y.T.Y.Y.T.L.B.Y.8.G.i.%.i.B.B.K.%.B.G.8.a.%.i.z.* O ",
+" p =.x.x.i.Y.T.T.T.K.<.L.T.T.T.8.T.B.d.Y.Y.Y.8.8.Y.T.i.L.8.d.x.%.x.%.%.s.L.8.8.T.w W d.*.5 h ",
+" 7 ` d.%.%.L.T.Y.T.Y.<.c.8.T.Y.Y.T.T.4 B.Y.Y.Y.Y.Y.Y.G.x.i.x.%.%.x.B.G.8.8.Y.Y.#.a.i.5 g 5 ; ",
+" a *.L.B.%.x.G.Y.Y.T.Y.K.B.Y.8.Y.T.T.T.K.K.U.8.T.Y.Y.Y.i.x.x.i.a.L.8.Y.Y.8.8.B.d.%.i.B 4 ` a h < ",
+" p ` %.L.U.B.%.i.#.8.T.T.T.<.K.8.Y.T.T.T.Y.a.B.Y.8.Y.T.K.c.i.B.8.8.T.T.8.8.L.<.%.c.%.i.w 8.s.W - r ",
+" S *.%.G.T.T.K.c.K.G.T.T.T.G.K.d.L.T.T.T.Y.Y.B.K.Y.Y.B.c.c.B.T.T.T.T.Y.L.s.i.a.#.a.G.s.L.8.a.W 5 * O % ",
+" N *.%.L.T.Y.U.B.%.K.Y.Y.8.T.Y.K.x.Y.T.T.Y.Y.Y.B.K.K.m.x.K.Y.T.T.T.Y.B.%.d.G.8.T.8.T.a.L.8.4 W W ^ c @ ",
+" D g *.d.T.Y.Y.8.B.%.B.Y.Y.8.Y.Y.K.K.Y.T.Y.Y.Y.Y.<.%.c.K.U.T.T.T.8.K.s.4 U.8.8.8.8.8.4 4 8.L./ :.l.=.: ",
+" Z K z.x.G.8.T.Y.Y.B.x.B.T.8.8.Y.Y.i.d.L.T.Y.T.8.i.%.%.#.T.T.T.L.d.K.8.T.8.8.8.Y.8.T.#./ 8.4 %.%.` W a # X ",
+" w %.a.Y.Y.Y.T.Y.L.K.a.8.Y.Y.T.8.K.i.#.Y.Y.B.%.%.K.T.T.T.B.K.#.T.T.T.T.T.T.8.8.T.U.K.a.i.%.B.#.g g e O ",
+" :.i.a.Y.Y.Y.Y.Y.G.B.B.Y.T.T.8.Y.a.i.4 G.K.%.d.#.T.L.K.a.T.T.T.T.8.T.T.T.Y.8.#.B.i.K.U.a.L.8.U.s.` ; O ",
+" <.i.B.Y.T.T.T.Y.Y.K.B.Y.T.Y.Y.8.s.c.i.i.K.G.8.a.d.L.T.T.T.T.T.T.8.T.T.8.4 i.K.:.8.8.L.L.I.8.#.g a ; ",
+" s.%.s.B.Y.Y.T.T.T.Y.B.K.G.T.8.Y.#.d.i.B.8.#.K.L.Y.T.T.T.T.T.T.8.8.8.4 i.d.U.8.s.U.Y.#.#.8.T.8.#.5 [ - 1 ",
+" 8 s.x.<.a.#.T.T.T.T.T.L.d.L.8.Y.U.U.G.8.4 d.L.T.T.T.T.T.T.T.T.T.U.a.d.L.8.T.8.a.Y.T.8.U.T.Y.L.s.%.i.=.N H ",
+" i.x.x.s.8.T.T.T.T.T.Y.i.x.c.B.T.8.B.K.U.T.T.T.8.T.T.T.T.U.a.i.d.Y.T.T.T.T.a.U.T.8.G.B.i.%.K.G.4 W 1 @ ",
+" d.x.%.:.B.Y.T.T.T.T.8.B.d.L.8.d.d.8.8.T.T.T.T.8.T.Y.#.i.i.B.8.T.T.T.T.T.4 4 Y.L.i.%.s.L.8.I._ 4 g b , ",
+" K.%.%.%.x.B.Y.T.T.8.8.Y.#.d.d.G.T.T.T.T.T.T.T.8.a.c.B.8.T.T.T.8.T.T.T.L.K.x.c.Z.#.8.Q 8.T.U.#.:.B ; O ",
+" ) / %.i.%.<.4 T.T.Y.T.8.x.x.#.T.T.T.T.T.Y.T.8.d.x.B.T.T.T.T.T.T.T.8.L.K.x.i.L.U.T.8.I.T.8.8.I./ g ^ @ ",
+" 8 a.%.%.i.d.Y.T.T.Y.K.B.G.T.T.T.T.T.T.T.L.:.a.U.T.T.8.T.T.T.T.Y.K.c.M.K.8.T.T.T.T.T.T.Y.8.8.L.a.g e } ",
+" ! 4 <.%.%.K.#.8.K.s.8.8.T.T.T.T.T.#.K.<.a.T.T.T.T.T.T.T.8.B.x.%.K.a.B.8.8.T.T.T.8.8.T.T.T.U.s.g 5 , ",
+" q #.p.%.x.<.i.s.Y.Y.T.T.T.T.T.#.i.K.G.Y.T.T.Y.T.T.8.L.<.i.a.G.Y.4 U.Y.T.8.T.T.T.T.8.#._ T.8.a.g : $ ",
+" a.%.%.%.K.8.Y.Y.Y.T.T.8.B.<.L.Y.T.T.T.T.T.Y.L.i.%.B.U.T.8.T.Y.T.T.T.T.T.Y.U.L.K.B.U.T.T.#.a.6 # ",
+" L 4 i.%.i.L.Y.8.8.T.8.K.i.#.T.Y.T.T.T.T.8.s.<.B.#.8.8.8.8.Y.T.T.8.T.U.a.i.K.B.8.8.T.8.8.8.g 5 p < ",
+" 4 i.<.i.4 Y.Y.G.d.K.8.T.8.8.T.Y.8.4 <.a.L.8.Y.8.T.8.8.Y.8.U.B.K.%.B.G.8.8.8.8.U.L.B.4 :.` D h ",
+" Z / %.i.s.U.L.i.s.8.T.Y.8.8.Y.G.K.i.s.U.T.T.T.Y.8.8.8.#.s.x.i.s.L.8.8.#./ W i.<.%.%.%.i.=.5 e O ",
+" Z *.l.%.d.%.B.Y.T.T.T.8.8.4 d.a.G.Y.T.T.Y.T.T.Y.L.x.i.W L.8.8.T B W g / 3 Q Q a.i.%.l.g 3 L P ",
+" : O.*.%.i.L.8.Y.T.Y.T.#.a.i.a.T.8.Y.T.T.T.T.G.K.i.4 U.8.T.#.W z.G.T h.h.y y 0 #.W <.g L 0 P ",
+" =.l.%.%.i.8.Y.T.T.8.8.i.i.L.8.T.T.T.T.T.Y.a.a.G.U.Y.U.4 a.<.s.4.E 0 y n J J 0 q m *.7 M ",
+" - ^ [ ` =.*.*.` i.%.M.%.L.Y.T.T.#.d.s.U.8.8.T.T.T.Y.B.K.L.T.T.8.B.i.z.a.#.! ..H 0 n 0 M M M n w ` 7 ",
+" a g g W :.g w _ Q o.Q #.i.K.Y.T.a.i.K.8.Y.T.T.T.8.#.a.#.Y.T.8.#.K.i.a.2 { e.q y y H H 0 0 M 0 M 2 ` 7 ",
+" e ( g s E h.o.R 9 0 f k k q i.%.s.d.i.4 8.T.T.T.T.8.B.B.8.T.U.L.g z.W 4 h.E y 0 H H H H n n J C 0 M B W N ",
+" c a K f.0 t t Z : : : # A z l g %.<.s.#.8.T.T.T.Y.#.a.#.Y.8.B.W :.4 Q Q y y y y 0 H H H 0 j D n J J n B *.Z ",
+" a K 9 f I e = =.B w B - ; O t 5 x.x.#.T.T.T.T.#.K.L.8.8.L.d.i.s.3 S.y H 0 M n 0 H 0 0 0 0 8 a D C J n B ` Z ",
+" = 6 y k X.: 5 m T ..y L 4 a # c l.%.x.a.T.T.T.B.:.4 L.4 K.i.:.#.h.H 0 0 0 M M 0 0 H 0 0 0 0 F 5 q M 0 H g 5 j ",
+" : 6 s P X.c a g L 0 P z z Z *.a 5 ` %.x.i.T.8.B./ L./ d.i.:.s.8 y H M M M M J J 0 H M 0 M J J b K 0 J n Z 5 g D ",
+" a 7 0 z # a ` Z M z ] R.' x s.*.%.x.%.%.i.T.4 g #.s.W i.w h.f.H 0 M M M M M M 0 0 H M M 0 0 n 3 E 0 0 0 F 5 w c ",
+" h 1 j k + a ( 5 n z R.E.R.o h W l.i.%.%.<.x.U.#./ i.<.` s.E H 0 J M 0 0 M M f J 0 0 0 M C M M M y H J J H 6 *.=.a ",
+" p N C z c a ` 5 k | R.E.< + a %.%.%.x.%.%.c./ a.i.%.W 4 h.0 M M M J M M J n 0 0 0 J M M J n 0 0 0 n H n D ` i.` a ",
+" l c j P < 6 m 4 g + < o O # = =.x.%.%.M.%.i.%.%.` <.W w E H 0 0 M C J M M M 0 0 H 0 0 J M M 0 H H y y D c ` l.` ` 5 z ",
+" h a n z O a B 3 4 a > p c a 5 W %.%.%.i.<.x.x.%.*.i.2 E 0 J 0 M f f f f C M M 0 0 0 0 0 M 0 0 y q D b ` =.` %.<.%.*.# ",
+" p a I | l 5 K 3 _ / 5 5 5 B S w %.x.%.%.<.%.c.%.%.%.N j j n n M J f J C J M M 0 H 0 0 0 j n j N b ` l.*.%.%.%.i.*.*.e ",
+" V c 6 I ' h g 4._ _ _ _ 4.#.4.F g i.%.%.M.m.x.%.C.%.%.l.l.a b U c : Z j Z j Z Z Z D D N 7 +.+.` %.p.%.%.%.c.%.%.%.%.%.- ",
+" b 6 k < D 4 3 G._ 4 B g ` l.l.Z.m.C.M.%.%.x.x.M.%.%.%.p.*.p.*.=.` =.=.F.a ^ ^ 5 a [ ` =.C.*.%.%.%.%.%.%.b.%.M.%.%.%.5 ",
+" 6 6 k X.b 4.2 4 B z.i.d./ #.4.B.x.x.M.%.%.%.x.x.x.x.c.C.%.%.%.%.%.%.*.C.%.l.%.%.%.p.%.%.v.%.M.c.x.M.M.%.%.x.%.%.%.l.z.: ",
+" a 6 V v a w a.l.z.K.4 _ Q T S s.x.%.N.%.%.b.x.%.%.x.%.%.M.M.M.v.C.M.%.x.%.%.%.M.%.%.M.%.%.Z.%.x.%.%.x.%.%.%.%.%.%.%.l.b ",
+" Z 5 7 V x 6 a.a.s./ 2 _ 3 3 3 3 / *.c.%.%.%.%.N.%.*.%.c.%.M.b.c.x.x.M.%.c.%.x.x.%.%.M.Z.x.M.%.%.%.%.%.c.%.%.%.%.%.%.%.*.7 ",
+" Z 5 b A h B 4 4._ _ _ 2 #.w w 7 B %.%.%.%.%.x.%.%.l.<.%.x.%.c.c.C.c.%.%.M.%.v.M.%.%.C.%.%.M.%.%.c.%.%.%.M.%.%.%.C.l.%.l.N ",
+" Z g b A h 6 3 2 _ #.a.d.<.z.s.s.s.d.%.%.%.i.%.%.%.%.%.%.%.%.%.%.%.%.i.b.%.%.v.%.x.M.b.%.c.%.%.%.c.C.%.%.M.%.%.%.%.%.=.W D ",
+" h 5 1 z x 6 3 G.w 5 W i.B.#.3 Q 3 4 d.i.%.%.%.%.%.*.i.%.%.%.%.%.x.m.%.M.M.%.c.%.x.M.%.x.%.%.%.%.%.%.%.%.c.%.C.d.%.%.l.` Z ",
+" Z 5 b G x B B g 5 z./ #.2 3 ) 3 2 _ K.%.%.%.%.%.%.%.%.%.%.%.%.M.%.x.%.%.%.%.%.%.%.M.%.%.%.N.%.%.%.b.M.C.M.%.C.;.%.%.l.g j ",
+" p 6 6 A v S %.i.z./ 2 _ _ 3 3 3 2 2 s.i.%.%.%.%.%.p.%.%.i.%.%.%.%.%.%.%.M.%.%.%.%.%.%.%.%.%.M.%.%.x.%.%.%.%.%.%.%.<.W S M ",
+" D 6 7 z G Z ` g 4 _ #.2 #./ B 5 5 j.z.%.%.%.%.%.%.%.i.%.%.%.%.%.l.%.*.%.%.%.%.%.M.%.%.%.%.%.%.%.x.%.x.%.%.%.%.%.W 5 1 H P ",
+" N 5 N < ' x W w L./ d.l.z.W s.B.L._ 3 a.%.%.%.p.b.%.%.%.%.%.%.%.C.x.%.%.%.%.c.%.%.%.%.%.x.%.%.i.%.%.l.i.%.%.l.i.` K L ",
+" S 5 b } . V B B z.l.s.4 Q R f.y H M C 8 W <.%.%.%.%.<.%.%.x.M.C.%.c.%.%.%.M.%.%.%.K.s.z.z.x.%.%.%.l.i.l.` W W 4 _ L M ",
+" D 6 m z . t 5 ` s.4 R y 0 P P z z < < x B *.5 %.%.%.%.l.%.%.%.%.x.%.%.b.%.%.%.z.a.3 ) #.w w a.%.<.g _ 4 G.I.h.y H ",
+" Z 6 6 V A Z 2 3 R 9 k z ] W.W.R.< < | < 8 g ` *.b.%.%.%.%.%.%.%.%.x.%.%.%.%.%.g / S T T 2 2 w i.W s H H ",
+" v 1 6 t ' l H 0 k Y ' R.Q.!.~.E.. X $.. O 8 g W W %.i.%.%.` %.%.%.%.%.` %.x.W <.z.j.k.5 B w w W g j ",
+" l 7 ( # . R.~ ] ] | . ^.!.E.^.E.X X E.E.< l 8 w *.%.%.%.%.W l.%.p.%.*.W 4 3 ! T ) _ #./ s.g B 5 K ",
+" ( : i R.E.E.E.X X E.^.!.^.E.. . E.E.R.< d q W l.<.l.%.%.%.z.%.W w T y M k k k M 9 R ! 8 2 ` Z ",
+" 6 b X.R.~./.^.X . ^.^.!.~.^.$.^./.~.^.. ' z ` ` B _ 4 <.W 3 T h.9 M P W.W.W.W.W.] z k j 6 ` ",
+" B 6 + . !.!.^./.E.!.!.!.~.^./.~./.~.~.E.. < [ z.Z M L 5 ( M C Y ~ W.Q.(.!.!.Q.Q.Q.Q.] p 5 5 ",
+" K 5 : < !.!.!.^.!./.!.!.!.!.!.!.!.!.~.^.R.l 5 1 H ] v 2 5 + ' R.Q.~.!.(.!.!.~.!.!.!.o - 5 F ",
+" 5 6 r E.!.!.!.!.!.(.(.!.(.(.!.(.E.!.^.| # 5 N k W.] x w U r o Q.~.E.!.Q.Q.~.!.Q.o # 5 6 ",
+" B m : . !.~.E.!.!.!.!.!.Q.!.!.!.E.E.E.t = 5 Z P W.R.A 8 1 * + E.~.~.(.~.Q.~.E.| # a 5 ",
+" m a , E.E.!.!.!.!.!.!.!.!.!.E.~.E.O c ^ 5 Z v K 6 e , % . Q.!.Q.Q.| + = [ 5 ",
+" a ; O E.^.!./.!.!.!.!.!.!.!.~.l U a ` 6 j q K 6 e c > + O % O @ e ^ 5 B ",
+" 6 ; r X E.!.!.!.!.!.!.~.E.E.# a 5 ( 1 n z q 2 5 a = = * ; * = a 5 W L ",
+" 6 6 * ).% E.^.!.!.!.!.!./.o c a ` W 7 n ] J 3 w 5 5 a a a 5 5 5 B ",
+" B 6 = ; h O | E.!.E.$.i + a [ W ` L k 3 4 B 6 a 5 g ",
+" 4 a a = * > h , r # : a 5 ` 5 2 M d y h.) ) T R ",
+" w a a ^ = = = = ^ [ 5 5 B Z P ",
+" R ! 3 g 5 ^ a a ^ 5 g 3 E M Q. ",
+" Q _ #.w / w E 0 P ] ",
+" k C J y E y k ] W. "};
--- /dev/null
+/* XPM */
+static char * calvin2[] = {
+"154 150 65 1",
+" c #000000000000",
+". c #FFFFFFFFCCCC",
+"X c #FFFFFFFF9999",
+"o c #000055550000",
+"O c #CCCCCCCC0000",
+"+ c #FFFFFFFFFFFF",
+"@ c #666666660000",
+"# c #666633330000",
+"$ c #EEEEEEEEEEEE",
+"% c #666699993434",
+"& c #7F7F7F7F0202",
+"* c #FFFFFFFF6565",
+"= c #CCCCCCCC6666",
+"- c #999999990000",
+"; c #CCCC99991010",
+": c #CCCCCCCCFFFF",
+"> c #666666666666",
+", c #CCCCCCCCCCCC",
+"< c #C0C0C0C0C0C0",
+"1 c #2E2E66662E2E",
+"2 c #333333330000",
+"3 c #CCCCCCCC9999",
+"4 c #9999CCCCC6C6",
+"5 c #888888888A8A",
+"6 c #666699999999",
+"7 c #CCCCFFFFFFFF",
+"8 c #999999999999",
+"9 c #666666663333",
+"0 c #999999993333",
+"q c #CCCCFFFF6565",
+"w c #DDDDDDDDDDDD",
+"e c #99999999CCCC",
+"r c #9090CCCCC7C7",
+"t c #FFFFCCCCCCCC",
+"y c #AAAAAAAAAAAA",
+"u c #CCCCFFFFCCCC",
+"i c #999999996666",
+"p c #121220200000",
+"a c #333333333333",
+"s c #81815D5D6D6D",
+"d c #555555555555",
+"f c #767689899C9C",
+"g c #CCCC99996666",
+"h c #333366669C9C",
+"j c #333399999999",
+"k c #8989CCCC7272",
+"l c #CCCCCCCC3333",
+"z c #CCCC99999999",
+"x c #CDCD9999CDCD",
+"c c #FFFFCCCCFFFF",
+"v c #FFFFCCCC9999",
+"b c #A5A560602424",
+"n c #FFFFCCCC6666",
+"m c #C9C9FFFF9C9C",
+"M c #333333336666",
+"N c #FFFFCCCC3333",
+"B c #1B1B9999C8C8",
+"V c #000099999999",
+"C c #000080805A5A",
+"Z c #FFFFCCCC0000",
+"A c #FFFF99993C3C",
+"S c #B0B066663030",
+"D c #FFFF99999999",
+"F c #A2A217172A2A",
+"G c #666600003333",
+" .. ",
+" .XoO+ +.+ ",
+" +o@#. $.+.$XX$++ ",
+" X@%@&+$*O=..O-$+$$ ",
+" ;@:@>,-&:<&123$..$. ",
+" ..$.$O#45@@6:7&%891@&0=. ",
+" +=q.+w@@:eo1:7<6:7::44 ",
+" $0&64@o::%e7,:7,:7<:7 ",
+" :r%8:5,7,7:474:7447t ",
+" y::74:7<::7,474474&-0$ ",
+" 847:,74:77,:74:747::,; ",
+" +.&%r74:7,:u:7474:7iy@yw ",
+" +3<4864y7,7747474:7<7::w0 ",
+" X--o4::&%4:47,:7<74:7&r7w$ ",
+" w+:52&&1@4:74:7<7,74y46&% ",
+" =0<i@p>@a:7<7w4::74y@o964 ",
+" ,<issyy#%:y%&47,7y7:6@@28 ",
+" +t7$y>4,<119:4di:i&11d29i ",
+" .o9@o##a6i%w::reee6592#w ",
+" 3@o2#od>5f6>@4r:r<::r:::>@o ",
+" .g@2he::::y6::4r:7<4:444:&@p ",
+" :%1s4:44,44::44:4y:4:rw:,:>@# ",
+" .&@o4:<:4:,:44:w4:,4:4,:4:,%o@#@&&&&-&-&, ",
+" &@o5:,:,:,:,:,444w4:4,:,w44:5@2@oo#@o@o@@o= ",
+" X@2>:<:4:u44:,:w:44:4w44:w,:4::y4e44eey5>@@20 ",
+" i@o5:4r:44:4,:444w:444::<,:,:4,:,:,:,:4::ef@o@ ",
+" -@oe:,r4:44744,:44w:w4,4::r7<4:,:4:<:,:<4::89o ",
+" o#444:,u4:44w:4w:4:4,u:44:<4:,44:44444:,4,:e@0 ",
+" 2d6:,<:<:4:44:44w:44:<w4<7<:,:4,4:4,:,44:44:89 ",
+" doyr:r:44:44:rw:44u:,:r7wy:,4,4:444r<%<44,4<:%t ",
+" -@26:r:u<:<:wr,r,:,44:44<ri%%%&@@@@@@poo@@d%5%dy ",
+" yaa@y<w<:,4u4:rw:4:4:488j@19d5f5@o6fy6e@6ee65@1@@;= ",
+" ;o@df:4r:<4:<:4,4y8kio@1198a::4::@d6:4:456:4:4>>4ey&@kt ",
+" o@5e:r::<4:444y%@o@2o@6e5e:6>44,4eo@y:<:6@<:y:e14::4>#o&, ",
+" 1@o6::<4<r:w4,%ooo@d6e@oe:<r4y9:,:<4@a:y44,>44:<49:y4:<@@@, ",
+" @@1e:444:4:44%%o#@5e:,:>#6440,:55444:d@i:44:854<442<4:y:522$ ",
+" .1oe:<:44<4%%@o2df>::,:<6o>:<5:<85:4445a6,4:<49:4:y9:<4:<y1@: ",
+" @254,48k>11>>8eypr<@y44,<soy4:8,496:,:<9>:<4:<18:4w>rw4:4w92w ",
+" 0@24y%@o#d59:r,:e@yr65y:<:6a@4,44:f%:4<:56r4:r,oy44:i<r:r4r5@3 ",
+" -@22@2#f:4:>e:4<:o5:<1:<r<49f:44:<49r:4<66:44,:@6:4yf4,r4:r@28 ",
+" +8oad2f9:<:<<%4:44@6<:d&r<:re>y:,<4:1:44:45r4444o>4<:5:44:44d1@ ",
+" .l@@af:4e@:,::%8:44@a:<8o5:<44>r<<:<,64:4<r9:,4e4#f44yy44,4y@a>o4 ",
+" -@od>e:,:%%:<44%4,:>1yr:d1yr4:e9r4yr6>%%5%5d@o@9#da2@919y4y:a@6@&$ ",
+" Ooo>:56<:<y@y:<:i6:<5@6:<>@64:<:&5>@@o9@99>@>5z8x<syx8>s5@2>562d29w ",
+" 3@o#54:&444:5o4:<:@<:eadyr:a@6,rio@1ss,,twtwtct$$wt$twc,,tw:y4xada#3 ",
+" *oo56f:yy>:,44@%r:44%44@ae:<5o99@o5sy$ttt$t$t$Xttt.vw.v.vtwtt$tw@o5>:$ ",
+" o@54:94::&64::e1<4<:><:>d946>9o>g,ct,tt.$tv.v.tv..t3.vwtw.t.t.t,o@58t$ ",
+" -@>:,4564459:,4:i6::<4@451d@@>8tc$t.tt.tt..tv$v$.vv$tt.vw.,.vwv$vi@>@1&3t+ ",
+" &1>44:40:,:>&4:4r9:444:9>dob<t$t$v$v..v.utv.t.$v.t$v..vw.vtt<.t.t,@:$:,b&-. ",
+" ;1d:4,:84:4y1e4,:sr:44io95wtt$t$Xt.tt.tt.v$Xt.Xtt.v$vw.vt$X$.vwv$3@ ",
+" 5o&5:4:6,4:8o<:4,%y4@@xt$tt..t.v..t.tt.v..v.v$v..v.t.v$v.<Xtt.t.t@ ",
+" t1o96:4<::4:&>4w4i%28c$tt$.vt.t$v..v.u;wtt.t.t$n&,t$n$v$vvw.3t.3t& ",
+" 8d@1<:4:4:,:6@:59&wt.tt..v$t.$v.tv.i#@@k.v.t.X$&@uv.t.3k%&@=33t$& ",
+" $&a6:444<4:,:&@d<ctwt.vt.t..v.t.t.-&o@@#i$t.vt.-it$v,-@@88@o@&tt& ",
+" :do4,4:6y4:io#3t-kv.v.$v..v$v.v$i#2@,x>@-,v$twb&t=%&o@:$$,@og.w& ",
+" &@>:46:&i%o9d<&@w.vwt.tt.t.t.t.vis2e+$wg&@@o&@o@@o@#@:$$0#dwt3& ",
+" d162@oeoda#d&&,tv.t.v..v.v$v..t$y@i$+c+$:&@o#y:,5d>s$$b@5<vwt@ ",
+" @@d#o@addd<xc3-@w$t.v.t.t.t.v$tt@@y$+$+$,@#a5i95>5:3&5:$tt.=# ",
+" :x>9d2diyttt=iytvtXttttwvt.v$v.$twizgy08ii5$<zyygi9@5ttwtmcg@ ",
+" :5a@ii=wvwtv$v$v.Xwv..ttXttvw.t.$v$$ttt.ttwtt.c<@.<.v.t&@ ",
+" $ 3&do@@2z$v$tw.v$.,.vwv..vw.t.vwt.ttt$vuv.vtutt.t@<ttwv,@d ",
+" k@@ddd#d@3.3.t.v$<v.vt.t.<t.t.vwt.tvutX$vwv.$v.wvwi3.$v$31i ",
+" .#o5tcwzcwtv+n$t.t..v$.v$v..v.,$..v..v$t.t.tt.tt.wt0wv.wv3@5 ",
+" 39&$t.t$.v.$v..$v.$v$v.t.t.v$v.v.vw.v$t.vun.$v.$v.$0t$tX+t<ov ",
+" &9ct$v.vt+vv.t.v$v..v+v.v.t.t$vt.t.v+v.v-@@g<$n.tv=9$v$tXtt&% ",
+" 1<t..$v$.v..t.t.t..v$v..$t.tX.t+v$t.X$v$wb@o&@&&&o@0.t..t.$w@= ",
+" @3$vv..v$.t.v..t.v.t..vt..v.tt.v$..vt..t.t<i&@@29>8cv$v..v.v#i ",
+" &3v.$v.t.v.vwtv.v$v..tt..v$v.uv$v.v..$v.v+t$$tcwt$tw$t..tt.co& ",
+" t&,t.tv$v.v...t..n$vt..vt.t.v....v.vt..v$X.vt+v.tt.t..vt..v.#9 ",
+" @@=.v..t.w.tv.tv$v..tv..t.v$tvtv$tt..tt.v.t.v.t.tXv.v.t.v$c@0 ",
+" @@&,vt.vv33t.t.v$v..tt..v+X.w.t...vt..v$v$..v$..v$.t.tv$.v&5 ",
+" o@&kg3&@#kv.t.X$tv..tvt.tvtv.v.v$t.v$v..tv$v.v$tv$v...vw@g ",
+" 3@@#1@o#o@<t.v$X.tt..t.v.t.t.t.t..v$Xt.v$.v+v$.X+v$v.v$O@: ",
+" : ,e@2@;.t.tt.t.v$=0@o@gn.v.v.t.t$v+v.t.t.tt.tX+v$t@z ",
+" c$@@2oz$v..v$v$v;@@sz%@&<t.v$v.Xt.t.n-3v.t.tt.tn&@ ",
+" $&@dM@@Ot.t$v..$t$t$wtt<-&&iN.vv.v,;o#@@=tv..t3@@ ",
+" 0o2hBho#it.t.t.v$t$v.t$t$t3i@#&@@@@b5<tztX$n=&@%: ",
+" o#VBjBao#&n.t.v$v.v.t$v.v$t$t,v,3<tt+tt.$t=&@&yc ",
+" $9dBBjhB1a1#o@i9g=vv.v.t.t.vt.tt$v$tXt3w=0&995< ",
+" .;@BjjhBjhBVhd22o#@o9gwtv.t$.v..vv$=l&2&p#os: ",
+" +%ojjBBjVBVBhBhhddp2@o1=$v..vwv330@@p2o#oo#w ",
+" $&1hBjVBjhjVBjjjBhhdp2o93ttvwX;@o@1djhBVfod8 ",
+" t@VhjV6VjBhBfVhBhjBVhd#o@&Outi@@dBjBhBjhV##, ",
+" .2oBhBV6VjjVVVhVjVjhBhBjao2#1#ofyVhBjVfBod8c ",
+" go@VBhjddaa2#da22aaa1hVBBhho1o2VhjBjBfBo98c+$ ",
+" l22hV>o2hhhBhhBhhBVddodhjBVhBh>oBdjhjB1f6+$wl-;-;;lv ",
+" 51ad>oadBVBVBVjBB>BhBhd1hhV6VVhd2dodadjV<:8@9868@@@o@ ",
+" =@phpadhjhBjVhjjVB6BVBhCdjhjdaaadadad22hV-@6::4:448@o@= ",
+" &pdaadhjVBjjjBjBhVd1BjjhdV>oaadf6:e:f>da21e:<4:4:4::5@& ",
+" @o2dahBhjVhBVhBjBVo2dhjjo#pa>6:4:4:4:46oad:<,<444:4,:@@ ",
+" ,oahdaBhVBhBjjBjhVfa#VBhdaa>e4:<:444,:4:ed@1y:44w:,44:5o@ ",
+" &1hohVBjjBVhBdddad2adVB2d6:::<:4:4:4,:,:ydo>4:44:4:4,6@o8+ ",
+" iaVdVjjBhVhd2ododpdada#18:,4<:4:4:4,:,4,:e@d,r:44:4,:5o@,;OO-&&&-OX ",
+" %#MhBVjBjjhhBhhVhhho2d>:,:,:,44:4,4,:4,44#64<4,4,:44@#o@558@o@22@&l ",
+" eojBjfBVBhjBVhjBVBa2d2>484rw44:w44:44:4:yod1@@%y4y:%pd#y$$<2@p@2o#& ",
+" =@hjhB6jVBfjBjVhhoa>afy,@>:44,4:w44:4,6@@2d2a1po>4&#da6c$w@@p@22#o#& ",
+" ioVjBBVBfjjBjhV6Voffd45:>oy,4:444,:4<:@od>adaad#o#25e@i+$0o2d2ddo#o# ",
+" &@BhBjVVBjhjhBBV@a65f:,,6@d:<4:44:,4:k#28>aaadoad2d:-2:$t@@aad#dad#o ",
+" 5ohBjjVBjVBVBjVBd#656<44:d1@444:4,4:49a>>daad2#d22@5@@w$w1aad#d2d22@# ",
+" 991jVhjjBjjjVfjVha>81:,:4,5aCiy4,4r,%2dda2da#daadaa9a9w+k#dadaadaad#og ",
+" =oMhjBVBjhBhBVhBdo>:@dr:,r42@ao9684f22a#daaad#daa>adaa:$3#od2adad2ad#e ",
+" wd9VBV6jVBjBhjBjhdp&:>><4:6a#65a2opo2d2daaaaaaada#ada#3$wad2#daddada#= ",
+" &pdVBVB6VjjBVVB6aaa64%1f%@2d222hdd#dad2adadaad#daaada8c<@odad#aadada5 ",
+" >aadhjhjBh6BhjhBdao9>a2#pda22hjhhaofaadadaadaaaaad2o@,w@d2d#dadd#do; ",
+" ioaadaVfjVhjjhVdaa#pMBahda5dhVhj22ae@aad2aadada>aadad<,o#dpaa9aad#d5 ",
+" >ddapd2o22o2aa222VhfVVBh68:5jha2pd#,dadaaadaadaaadaa2%c9daadaaddda@& ",
+" 0aBddaaaadaadahhhjhBjjVh:i+i@odddad:#d2daaadd2dadahdae$i2dadadd#ddadz ",
+" %hhjBhBhhhhhVBhVBhjVBhhV6&7codVhda#$a2d#dada2d2>aadd@:$8d2d2da#d2da@o; ",
+" %VBhjBjjVBBhBjjhjjhBVBVo21ww6Vddpad:@o#d#aaadaaaaahhoi$<#aadaad#d#a>x1&t ",
+" idjBVjBhB6VBVjhBhVBVdo2dddz$4ad2dp@:sadpda>aaada#ddh@o<cdddadd#daa#5 &&O$ ",
+" 5dBjBVjBVhBVhBjVBhjdhhhBhV%c:&dhhao,<#2d#aaaaaada2aoa#87<#od#aadadd5 ck@-t. ",
+" idVfVjBhjBjVBVBhjBVBjBhoo#@7wBVBBa@i:adaaddadadaadaa2@y$:@d2dadadd2@ $c-o&*.. ",
+" 5ohB6hVjBVBfjfVBV6B6VVjhhByw$%jdVo#>$@d2aaadaaadaadaa2x$=#ad2aad2ad> g&2&O=$ ",
+" i#jBhjBhV6VBVBVjBh6VB6hjBV8,$:oda#p@:82dddaaaadaaa2da#7ciad#daddad2@ c<5@&-X.. ",
+" 3odVBVVBjhBVjVhhjBhBjVBjVfdi$wj1ad22b,2#aadaadaadad#d5c7@@2dadaa>ad> c3@o-...+ ",
+" ,dohjVBfVBVjBhBVBhVjVBjBfVo@y$6adaaoi:dadaaadaaaada22,$$@adaa#ad#d2b 8@p-=X.. ",
+" to@dhjjBhjBV6BVhVjhBfVhVV2#29:3@od#aob1d2d#aadadaaddd:$t1@adaddadad: $i@@@&OO. ",
+" $5a2VhBVjBVBhVfjBhBjBjBhd2da@-$5a#da#>da#aadaad2da#2@3$:9ad2daad2d1t cw<y&@@@X...X*=Zq=NX$ ",
+" +3@pdBVBfV6hVhBjVjVfVhj12d2ad@,:@2#dae:#oadaaaadaada#:$.@o#d2aaad#f: 3333v3=3=gkk&ii,:3&p&-@po&@&-&&O. ",
+" +$+89a2aadCMCM>MC>adCaha2adaM2#oyx99ap>,@a9aaadaaada#a5=i#aaadad#M2@21#22@#2@#o2@@2@aa@a2#9%2@9@@0glg=A%2@20 ",
+" .$+.$.XXXXX.lO-&&gwc5doBhdBhVVhhhVBhhVBhdada2da#@i:ad2@>edaaaadaaadaa2#d2daadaa2d#i8ggggggiggzgg3zz5d2d#>@igyggyig;gi&2@@o2#- ",
+" +..X.OOO-&1o@@p2@#@@@1:$w@#VBBBBBBBBBVjBBBVBV#2daadp2@,5#a2d:@#adaaaaaadad22d2aaadda2d#@@z3=3A===n=Ag&@#d95zzzgo@@o@o@o@2#ay5y>>s ",
+" $....X=qXOOO&&&-b--&;;l;;;ggib2&@9>ao1jVVjVBVVBBVBBBBVadaadaa#2@:>da@ixddaaadada#daadaaa>aaa2dap#o&n=A=g=AiS1@o#dgg3g=vgi22#5,xy5do9x ",
+" .XqO&&oo@#@b-;=lg=3ng3=ng3==;&222#o@2aaa2o@o1ddddVVVjjjV2adaadad22i:#22d:9ada>2da>aadd#d5sss5ss>9d>sz=g3;0@@@o@#s<=ngn=A=g@2d @p8 ",
+" ..=&#@&&b-;;=0n3=Z3A=;n=ngnlngi2d2a@d#ddda#a2a2p@oo22@p#o2da2da2da#2@y5d2@iyd#daa#9g3g<zzvg3g3v33zgzgii@&@o@#99sgg3;n;3gA=,i>5 a@5 ",
+" ..&@@o&iii0ii;0i;====;3;=g3lA==g3gzzg3z3gzg5S>#aaaaad#p#aad2daadaadaa2>:bdo@92d2ada8Dg3n==gv;3;0S@@@o@#2@bbsiz33v=gngg=Aii&&@: &2% ",
+" .&o&&;30&@@#@2@p@@@#@&@i&0-&%0&00b&0i&g-giigys5sddad2daaadaaaadaaaosz8i,:>#dadaad#>gig&%&;i&&&@@@#@isgigzz33D=;ng;3;=0&1i8z @d5 ",
+" $O@@g3=A3=gz3;zgi&b@&@@#@@#2@2#o##o##o@p#o@2o@2od#2d#adaad#ddaaadad#a@#2@:,@2aaad2do@oo@#@2@2>iggz3g3vg3=n=;g=;g&-&&@225 t=O @@2 ",
+" +i@o@0;i;gn3;v=3A33D3zg3zgigigzg8zgz8iigiisbgbisgiz8zz3z3g,g3zzygzig8si5gkc,%s>52da#2p@#@izg8vg3s@&@&&&@&@@@@2#o22d@>8 t -o@#@s ",
+" @22oo@2o&i&ggk;==;3;g==g33==v==3n=vg3gn3=g3ng3g3n==g3;=;ggg=;igg3;gig4g%ci@##dd>>siz3zn=3n;3;01d@2d@#d@d555e<x: 3=0g&&&o@@s: - ",
+" s85s8592@@o#@#2@#@@@@@@#@&@@&&@&@@@0&&&9&@@@@@@@#@#@2#oo122@@@p@o#o#2@&w9@3zz3g3D=gn=gn;3A3>b i@@o@2@oo@@88 0& ",
+" $wo#p222#2#2@#d@999@2o2@po2o@2 &9d@2oa 2#o#dd9d#>>@#ao@biz=n=A3==A3g=n0g&@@@ && @98 #a5 v1, ",
+" +:6a2d#pd# #2 :ada dda# xd## 2da@ $ad9g3n3A=A==A;=;g&#@o@o2#ak &@@@@12@2@@>i58 8d@@ &9$ ",
+" t&@a2ada d# @@sd @#># 1#d @2sp g1@8z=l;3g3n;3;&1o@a9#2ad2a#1@o@>s5@9aex $ %@#&$ ;1i$ ",
+" w%@29ad 2@ @a99 dda# oa# dd# 1dpgn=g3;n=0&@#@@i edd#d#d @% 2@2= @@i+t.v ",
+" +$. +=&@#9af @p ooaa: @#do &@#as @#d2 -@@29ig=--@#@2d8 dadd @ @2@@ &o#,;0@@ ",
+" O +nO +=@o@da9 #o &29a#@ 52d2 @o2sg yaa# @eya@@@2## a#& <@@ < 5d22$v0o1s5y59&z ",
+" v= +l&.+$vv+$.;o@#aad p# @22dy@@@1@&e@2# @2#>F: ,8@o# @@ >@s6 92@ -&@@>9< voi ;@od9@o#9y,33y <: ",
+" iO 3# . +$+io@2d# <d29@#p#9g::sp@oa9a22i<@oaa#o#@#o@o@aaab o9> 3< 45@22yb#@&@@& da25#@op@:<& %@@ i>a#da#1b33&@#o& X ",
+" ;% $,&g+$.-@#2d2a t3=333i022222adzx-y,so#2aaaa#@p#aaa#o#@22@22add 2o@#2@2#2p@2o@p2ad@@ <2#a8>#@2ob<o: &@ao# @@o9d2d5,t=;@o>,vuNt ",
+" + &:+.3w&a2 9as$ i 1o2#2 12aaa aa2ds2@pdaa9aaaaa2aaaaad2a2d2a aaaa922#aaao#ad2dad2aaaad2ao#a12#@>2aa9id2a92@9&=39p9@a2@&@&i3zsiiv3N3X3 3*=n *v",
+"+ =qv=o Fs % <59o&zs @sfa2d#dss a aaaaaa aaaaaadadaa>aa#daa#zaa2aaaada d pdd2aaa9adaada2d##>#aaa>d#i5d y99@==3 v,3,33333wv X= vlX=nmZ*y*n ",
+". 3 & #@l0@2d z @o2@ @d,3&8,,@#daaadaa9aaa ads> #dssssgsFs Fs Fs #aasGdadaaadpa ada d#a addsssF aa53 ib,= 3 33n3vm=v=v= =v=X= =XO3 Ovq X ",
+" u 3 3< , 5F g sF@p < @- &=3x sF d aaad aa#a pa a a aadaad#d>a psF5F F5 ss55FsssF sssFgsadaa93 v33v3 v v 3Nm=v = @@@&nOml = vlnq 3 Xl ",
+". n p s s # 33;@= @v3.-@ zFsa a aa dada dpa aaa sa dada #ad dsdssssds>F>#dada aa yn3mn qn=mN= mln=m && 2@k =v 3 =3=nmn ",
+". n q 385 dds9 ss@-=3= lXO g8z, z9> i8zii zyi5sdddda aaa d ad# >G aad 2 p aa #aaa d #ddbnm=n= n=XOX=X=v Xl 9@@&3 3nml O lX3= n ",
+" g== qN3v,3 3 , v & 3 X OnX vu 3v3 v 3v,v3 , ,v, 33z >s d#d2a dp# pa #d aaadaadadaa ada w nX=n mnlv X X=X q=3 tmn n 3n O X= m ",
+" q nqv X m X v v nm= 3Om3 l =X=X=qn Zmn q =nm 3 ,8 8y8 8g i,z i 5 > add 9>9i n3 = m3 v =v n =v mN3Zm Nl = ",
+" = l *l = OmN=X nm =n n X= m v n =v On=X nm mN nm=N 3n X v3t3v vmn,n < = v<, z , , vmn nX=nX =m =X Z mZ XO 3 q n ",
+" X 3 Xn XZ * X nXZXZ nmn X= X n n XOXnXl n n* = X= n* = = n3Nmn X=vnlX m NXn NX=X= n X N Nv Z. n m nX n "};
--- /dev/null
+/* XPM */
+static char * calvin3[] = {
+"116 167 127 2",
+" c #000000000000",
+". c #FFFFCCCC9999",
+"X c #FFFFFFFFFFFF",
+"o c #EEEEEEEEEEEE",
+"O c #999999993333",
+"+ c #666666660000",
+"@ c #666699990000",
+"# c #666666663333",
+"$ c #CCCCCCCC9999",
+"% c #FFFFFFFFCCCC",
+"& c #FFFF99990000",
+"* c #333366660000",
+"= c #000055550000",
+"- c #333366663333",
+"; c #CCCC99996666",
+": c #CCCC66660000",
+"> c #000066660000",
+", c #555555555555",
+"< c #333333333333",
+"1 c #66669999CCCC",
+"2 c #CCCCCCCC3333",
+"3 c #333333330000",
+"4 c #808080808080",
+"5 c #999966663333",
+"6 c #C0C0C0C0C0C0",
+"7 c #FFFFFFFF9999",
+"8 c #DDDDDDDDDDDD",
+"9 c #FFFFCCCCCCCC",
+"0 c #FFFFCCCC6666",
+"q c #CCCCCCCC6666",
+"w c #999966666666",
+"e c #333333336666",
+"r c #AAAAAAAAAAAA",
+"t c #CCCC99993333",
+"y c #999933330000",
+"u c #CCCCCCCC0000",
+"i c #9999CCCC6666",
+"p c #FFFFCCCC0000",
+"a c #666666669999",
+"s c #CCCCCCCCFFFF",
+"d c #000080800000",
+"f c #FFFFCCCC3333",
+"g c #666633330000",
+"h c #666666666666",
+"j c #999966660000",
+"k c #999999990000",
+"l c #666699993333",
+"z c #999999996666",
+"x c #000033330000",
+"c c #333366666666",
+"v c #FFFFFFFF6666",
+"b c #FFFF99993333",
+"n c #808080800000",
+"m c #CCCC66663333",
+"M c #CCCCCCCCCCCC",
+"N c #9999CCCC0000",
+"B c #FFFFFFFF3333",
+"V c #9999CCCCCCCC",
+"C c #CCCC99990000",
+"Z c #000088880000",
+"A c #666699996666",
+"S c #9999CCCC9999",
+"D c #FFFFFFFF0000",
+"F c #FFFF99996666",
+"G c #999999999999",
+"H c #333399993333",
+"J c #CCCC9999CCCC",
+"K c #9999CCCCFFFF",
+"L c #CCCC9999FFFF",
+"P c #9999CCCC3333",
+"I c #666633333333",
+"U c #66666666CCCC",
+"Y c #888888888888",
+"T c #FFFF99999999",
+"R c #6666CCCC9999",
+"E c #999966669999",
+"W c #CCCCFFFF9999",
+"Q c #CCCCFFFF6666",
+"! c #CCCC99999999",
+"~ c #99999999CCCC",
+"^ c #CCCCFFFFCCCC",
+"/ c #666699999999",
+"( c #CCCC66666666",
+") c #333399990000",
+"_ c #FFFFCCCCFFFF",
+"` c #9999FFFF9999",
+"' c #333300000000",
+"] c #000000005555",
+"[ c #555500000000",
+"{ c #6666CCCCCCCC",
+"} c #666633336666",
+"| c #FFFF9999CCCC",
+" . c #000000003333",
+".. c #CCCC6666CCCC",
+"X. c #333366669999",
+"o. c #00009999CCCC",
+"O. c #EEEE00000000",
+"+. c #CCCC33330000",
+"@. c #000080808080",
+"#. c #DDDD00000000",
+"$. c #333399996666",
+"%. c #333399999999",
+"&. c #FFFF66660000",
+"*. c #CCCC00000000",
+"=. c #BBBB00000000",
+"-. c #FFFF66663333",
+";. c #FFFF33330000",
+":. c #CCCC33333333",
+">. c #000099996666",
+",. c #808000000000",
+"<. c #333300003333",
+"1. c #FFFF00000000",
+"2. c #888800000000",
+"3. c #6666CCCC3333",
+"4. c #999933333333",
+"5. c #CCCCFFFFFFFF",
+"6. c #AAAA00000000",
+"7. c #666600000000",
+"8. c #99999999FFFF",
+"9. c #999900000000",
+"0. c #CCCC66669999",
+"q. c #FFFF66666666",
+"w. c #99996666CCCC",
+"e. c #999933336666",
+"r. c #33336666CCCC",
+"t. c #66669999FFFF",
+"y. c #33339999FFFF",
+" . . . X ",
+" o . O + @ # $ ",
+" % % & + * = - * ; ",
+" . : > > + , < , 1 ",
+" o 2 3 - 4 5 = - , 6 X % % % . 7 8 % ",
+" 9 0 * + ; q w 3 e r % o 9 0 t y + + O 9 % ",
+" % . u * # i 0 p + = a s % o o % . 0 @ d * * = # - r ",
+" % . O * # O 0 f 2 g - h X o % 9 7 O j k + l 5 z # x c , ",
+" % 9 O * t q f p v b * < r % % 0 t n + - z q . 0 0 ; > < c ",
+" % o . u + O . 0 f p p u + < 0 m * = + , M 7 p f p p N x h , ",
+" % 9 9 t l + O 0 f p B p f k = a . O O 3 * h O $ . f p f B b u g h V ",
+" % 0 % 9 n * @ 0 0 p f B p B 0 j g V % C + * x + i 0 0 p p p v p f u + - M ",
+" . b M . C Z l ; 0 f B p p f p p + + 1 0 + + * = h r p f f p p B p f u + = A ",
+" X . d z o % $ d + z p v p p B f p p u n = M l + = * A t f 0 f p v p f p v f + < ",
+" % O + V o . + * ; 0 f p p f p f f f j 3 - M S + * = * 5 z f 0 f B p B p p B f C + - V ",
+" % 0 j c s % & + - z 0 0 p p f p p p D C + 3 = = 3 + x w ; . 0 f v p p p f v p f u + - s ",
+" o 9 F * + 9 . + x l q f p B p v p v p p C = - 3 g = = + q 0 0 p B p p v p B 0 . $ n * ",
+" % 2 n - G 9 0 * = @ ; f p f p f p p p B t + 3 x < x # ; q f B p p p 0 p p B 0 % 8 + H J ",
+" 9 C = , K % p x + # G f f v p p p B p p p p + < 3 , h ; 0 f f p f B p p B v & 7 + + H L o ",
+" X + > c 9 0 3 + x + u f p p p v p p p v p f j < 3 + O 2 p B p v p f p B p p . ; * > r o ",
+" 9 + * h M o O - 3 - O f f B f p p D f p p f f t j - O 0 f p f p p f p p p B p f + * * G i P z A 2 O z q q $ . 9 o 9 % % o ",
+" o % n x A $ 0 n = < , . f f p p B p p p f p p B 0 0 b f f f B p f p p D f p p f u + x 3 * 3 = > + x * = + = # = n + k C F 0 . 9 ",
+" o o o o % 9 = + O f p % o 9 - < - n p f p p B p B p p B p B p v p 0 f f p p v f p p f f p f 0 C * < < I = h * = c 3 4 < < - = = * + + > > + @ . ",
+" % . % 9 X . 9 o % 3 * + 2 v 0 7 0 ; z 5 0 f B p f p f p f p p f p p p B f p B f p p D f p f D p p B C 5 * < , + ; ; 0 ; 0 q F q t ; t O w A # - - 3 * O ",
+" % . : n ; o 7 k V o % g 3 n C p B f p B p 0 f v p p f p u B p B p f p f p p p p p B B p f p p D f p p p 0 0 0 0 0 0 f f v p f p p f 0 p p 0 p 0 t j = , c U ",
+" ; + * l . . 9 . C - 6 % o ; w n 0 p p p f p p p f p p B u p f p p p p p v p p p p p B p p p B p p p f p p v p f 0 f f f 0 p p p p p p v p p f p v 0 q < < - G ",
+" o ; G - * * + * 3 Y o 9 o 7 9 0 p f f p f f f B p p f p p f p f D p f u p p B f p 0 p 0 p f p f f p f p f p B p B p f B p p f B p f p B p B f f f C * - 4 r ",
+" 9 T h + = x , R 8 M 9 % v f p f p p p p p C B p p p p p p f p p f p p f p p B p 0 v f p B p v p p p B p p B p p f p v p p B B p p p f p p u N + < ",
+" 8 8 E c x * = @ i 7 0 f f 0 p p v p B f p B f p p f f p f f p p p f f v f 7 0 7 0 v p p p f f p p p p f p p B p p f f p p p v f p v p O g + A ",
+" o % J l < 3 < < > # l 2 2 f p f p p p p f f p p f B p f p p p p p 0 f f B 0 . 7 0 0 0 v f p u B p p f p p p f p f p p D f p f p B f f k + - 4 ",
+" % p . 7 + * 3 = < x , = g = O q 0 p p f f p p p p p p p p p p v p 0 0 p v . 0 0 0 7 0 W 0 0 Q p p p p f p v B p p 0 p 0 p f p p D B p C @ > 4 s o ",
+" . j + O n + x , < < , < I > g = n v f f 0 B 0 0 f p 0 p p f f p p v 0 v 0 0 7 0 v 0 7 . 0 7 7 0 f f p f f p p f 0 0 v 0 v 0 p f p p p u * = * ",
+" o n < * * - - H = 3 < - 4 z ; $ ! t 5 + 3 k 0 f B f 0 f 0 f 0 0 f 0 0 f 7 f 0 p . 0 v . 0 v f 7 0 . 0 v . 0 B 0 B 0 v . 7 . 0 Q f f p f f C + * - 4 s ",
+" % 9 t < < < - 3 g < ~ 9 9 . 0 0 0 0 . + g n 2 0 F f v p 0 W f 0 0 f 0 0 f . v . f . 0 7 0 7 0 . 7 0 B % 0 0 . v 0 0 o v 0 % 7 0 v p f u f n + 3 r o o ",
+" 9 r , c < < = c z ^ 0 0 0 0 f 0 0 k = = p 0 f 0 p p v p 0 0 v . 0 0 f v 0 0 0 v 7 0 . f 7 . f % 0 0 . v 0 7 0 7 0 0 7 p 0 % 0 f B f p + = - r 9 o o ",
+" ; 4 - < # $ 0 0 0 f v f f f C g * # 2 2 0 0 0 f 0 0 f 0 0 0 f . 0 0 v 0 0 0 O O l @ @ z P q 2 7 0 7 0 . . v . f . v . v 0 f p b + 3 x - H 5 i $ o 9 ",
+" 9 O x < / q 0 0 f 0 f q 0 0 0 : 3 - * ; 0 0 0 0 0 7 f 0 Q 0 0 0 0 0 0 0 0 + + * = + 3 + x + + @ $ . . v 0 % v 0 0 0 0 7 0 v 0 0 : = h x 3 - 3 * d $ 9 o ",
+" S A - = n 0 0 0 B 0 0 f v 0 0 $ < 3 * z q 0 0 0 . f 0 0 0 B . 0 . u 7 . 0 t k ( 5 n h , + = * + t 7 0 . 7 f f % . v 0 0 . 0 f 7 F : j # , h x 3 + > n . 9 o ",
+" o 0 k * = + 3 - 4 2 0 f 0 0 C * n i . q + < + A 0 0 f 0 B f . 0 0 0 v 0 f 0 . 0 7 0 . 0 7 . . $ 9 ! ; r . f v . v 9 v 0 0 . v 0 v . 0 0 f f F 0 t 0 ; z I - * * z 7 9 % ",
+" o t + * , # x , , / . 0 0 0 0 C + 3 + ) + 3 - G . . v p 0 0 . B 0 0 . 0 7 0 0 0 7 f 7 0 . 0 % . . 0 7 7 f v % 0 . 0 7 0 7 0 7 0 0 . 7 7 v v p p p f p f f f g < , = + @ ! 9 o ",
+" % t - h r 8 ; h - + ; f 0 0 0 0 0 ( + + x # ! . 0 0 f 0 f 7 0 0 . p v 0 0 0 v 7 0 0 0 0 7 7 0 7 7 7 f 0 . 0 0 . v 7 0 . 0 0 0 0 % 0 % 0 0 f p p f f p 0 f 0 5 , 4 h x = * n 0 9 % ",
+" % 2 # - V 8 . . 2 ! . 0 0 . 0 0 0 0 . t 5 3 h M 0 . v 0 7 0 0 0 7 0 0 . 0 v 0 . 0 7 0 7 . 0 7 . . 7 0 9 0 7 0 v 0 7 0 . . v 0 0 7 0 v . 2 l P 2 u p D f f p p f O 3 1 8 r G h - = z q 9 ",
+" 9 0 = , V W . . F 0 0 0 0 q 0 B f 0 7 f ; + # M . p 0 . 7 0 v 0 0 . f . 7 0 0 7 0 f % 0 Q . % 0 % 7 0 7 7 p . 9 0 0 7 0 7 0 7 0 . Q 0 v C 3 * x n @ 2 p f f v p C + 4 ! # * - G X ",
+" o X z # * n 0 0 7 0 0 0 0 0 0 0 0 0 f 0 . . 5 = C W . 0 0 0 . 0 0 7 0 W 0 0 7 0 v 0 % f 7 0 7 0 % 0 . % 0 . 0 7 v . 7 0 7 0 . p o v 0 7 0 : 3 3 + 3 * n u p f p p b g > J , * A . ",
+" o 9 j - g c q . f v 0 v 2 0 p 7 0 . q 0 0 $ 5 x # q 0 0 v 0 7 0 . 0 v 0 0 0 7 0 v . % . 7 . 0 7 v . 7 . v . 0 . v . f . B . v . 0 7 0 v . 0 F O 3 * 3 * = n N p 2 t j - 6 G h 8 ",
+" % 0 n > x = h 6 . . f 0 0 0 0 0 f 0 7 p . 2 C 3 3 = r % . 9 0 . 7 0 7 0 % 0 % 0 % 0 7 7 7 0 % 7 . % 0 0 7 0 7 7 p . % 7 v . 7 7 . . . 7 0 v 0 7 . 0 j # g g = + x k C j * 6 o _ % ",
+" o k = = , + $ . 0 v . f 0 0 0 0 . 0 p . 0 C + = < g @ k 7 7 % 7 v % 0 . 7 . 7 o 0 % 7 0 7 . 7 0 7 0 % v 0 o . 0 % 0 Q 0 . % 0 . 7 7 7 7 . 0 . p 7 7 9 9 ! w + 3 + = + + x ; % ",
+" p g , r G M . . 0 f 0 v p 0 q 0 0 0 0 0 0 0 : w Y + 3 + A M . 7 . 0 % % % % . % 7 0 . % . 7 $ % . 7 0 . % f 7 7 0 7 0 % 7 0 o 7 . 7 . f 7 0 7 0 . f 7 . % 9 . ; ; j - 3 < / 9 o ",
+" n h 8 9 % . 0 v 0 0 v 0 0 0 f 0 0 0 f 7 0 . 7 . 9 ; # < = + l l O i q $ W . 7 0 % . v 9 0 . 7 . 7 . 7 . 7 . . v . . . 7 . v 7 7 7 . v . 7 . 0 7 v . 7 . . 7 . 7 . . ; # # * - O $ ",
+"+ > z . W . 0 7 $ f 7 f 0 f v 0 0 0 v . 0 7 . f . % . ! j + - = 3 = + x * + + P $ u W @ n @ ) @ i P 2 ^ 7 0 7 v 0 % 0 7 7 . % 7 9 7 7 . % f v % 0 . % 0 % 7 . Q 0 % 0 . ! < < h * * + i . ",
+"+ = r % 0 7 % 0 0 7 p 0 . f p 0 0 7 f 0 . 0 . % 0 0 % 9 . n I , = * = + x = 3 + + + x = 3 * = 3 * n @ i q q 9 % 0 % . . % 0 % 7 . % . W . 0 0 % 7 7 7 0 7 % . 7 7 0 7 u g a o ! * * 3 l $ 9 ",
+"# * V . % . % . v . 0 . f . 0 f W f . 7 f 0 7 . 7 . 7 . 7 9 z # , < < g < = 3 = x x * 3 - - 3 3 x 3 = * 3 = * l z $ % . % 7 % . % . % 7 . . 7 7 7 . 0 7 . 7 0 7 . . 7 . ; * G o o 9 r w * * + M o ",
+"5 = l . % 7 7 0 0 7 0 0 f v 0 . b . v 0 . . 7 f 0 ^ 0 . 7 % . 9 M ; c < x I , < 3 , < < G Y = < 3 < , x - < + = = @ @ ^ % 8 . % . ^ 0 . 7 % . 7 0 7 % . 7 . W % 7 0 7 . q x Y o ! , = ) . 9 ",
+" + - M 7 9 p % . p . 7 0 0 0 0 . 7 0 7 . . . % 7 p % 7 0 . 7 % . 9 ; z < < x < < x 3 < A 3 3 < c 3 < , a Y x < = = * + i 7 7 . 7 % 7 7 0 % 7 7 % . 0 % 0 7 7 0 v 0 7 0 C + 1 A g < d $ o ",
+" ! * > n i 0 q 0 $ v q . 7 0 v f . 0 0 ^ 2 ; $ 0 % f . 7 7 . v 0 7 9 . 9 r # < = < < x 3 x < < < x , 3 - Y s M G 4 # = 3 * l o 0 . % . 7 % . 7 7 7 . 0 7 0 0 7 0 v . v t = G _ 6 # - - G ",
+" G 3 + = # n @ n + + l q 0 . 0 % . . C + > + ` 0 % v 7 . . . 9 v 0 . v 9 9 $ w h < < < < < < < < < < < = l o X o J G h * + @ 2 % 0 . 7 $ v % 0 . % W 7 7 . p 0 . p $ O 3 i G h r ",
+" A ' * x > + x 3 3 A 8 . v 0 0 Q 0 d 3 3 > 5 $ q $ 0 7 7 7 0 0 7 0 0 % . 9 8 ! ; x < ] < < < < c x < a ~ o 9 X X 9 $ 5 + / 0 $ ) x @ * i . W . % . 7 7 0 7 0 7 & + = K ",
+" O < < < x - < 3 z $ 7 0 . 0 q n x 3 3 3 - > * n z 2 $ B . . v 0 0 f v . 7 9 . - < = < < = < < < - / 6 A z O S o . $ + x * l * * 3 = * 3 d + i q 8 7 9 7 0 . . q 3 # r ",
+" 8 # , h < < < - O . p 7 . q n x + 4 w h < 3 + x + = H k q q p 7 0 0 7 0 7 . M - < < < < < < , - 6 n > 3 > + @ M $ [ c 3 , = < < = < > , 3 3 d n S % 7 v 7 0 ; , = ",
+" O x x , h + x r . 7 u @ n x 3 c M . . ; + 3 - 3 = g * d r . q 7 f 0 . 0 % k = < < < < < < < c ~ @ x + = = x * { r = g x 3 < ~ Y = * } = = = g = - z $ 0 0 % @ = a ",
+" 5 = , h $ 5 3 * O * 3 3 3 # h 6 . . 0 . 0 | ! r w # 3 x * * q . 0 v . v q j 3 < < < < < < = ~ r 3 x x < 3 < - c r x 3 < < - M i 3 < 3 < < < < < 3 * * * O @ - + ~ ",
+" Y < + A $ F w g 3 3 * = , S . % . f 7 . 0 % v . % ! = 3 3 * l q . 0 . . z = < < < < < < = 1 r d 3 x , < < < = / H 3 < .< + M + x < < < < < - c , < 3 * x g x + ",
+" q x Y . . q j 3 , 4 ..8 9 . 0 7 7 0 7 0 . 0 7 p * 3 < 4 h 6 9 0 7 0 q n 3 = < < < < c , r = 3 = < < < < X./ + x < < < o.; x = < < < < < o.Y < , < 3 x < < , ",
+" g < * q q 0 $ ; ; G 8 % 7 9 v 0 . 0 $ . 7 9 2 j * 3 , = 6 . 7 0 W 0 O * a G < < < < < x - x < < < e < = < G h 3 < < 3 X.A z x < < < < < < / ! H , 1 h < , < = ",
+" , 3 * O k t q n * @ M 9 0 % . p 7 0 % 0 7 q + x , < < d k $ % 0 $ O = = M 4 < < < < < < < < < < < < < c G < < < < < = V - < x < < < = c A + x 3 c G , < = < > o % X ",
+" < = = + + + x 3 = R W % f 7 % p 7 p % 0 C = < < , 3 3 - $ . % 0 j + x / G > x < < < < < < < < < < < c l 3 < < x < X./ # < < < < = < c h > 3 = = h x < < , , % o % % . . 9 . . . o ",
+" - , < < = , 3 x * 9 0 . . 7 . . v . . k * < w y g < 3 l 6 o 8 r 4 * - V + < < < < < < < < < < < < c - x < < < < - X.* < e < < < e Y = x e 3 < - < < < , a % 0 ; n + + @ # * * k ",
+" ! 4 h h 4 G , 3 + i 7 % v 0 7 . % 0 $ + 3 5 m O.+.< < * * $ O A 8 G 3 = @.< < < < < < < < < < < < < x < < < < < x g x < x < < < - = x < < < < x < < - % C * * Y r 6 9 M G < * ; ",
+" s _ s 9 - 3 < G 0 . . % 0 7 f % k 3 = ( #.( : +.< 3 = h $.1 _ $ 3 = g < < < < < < = < = < < < x < c < < < < < < < < < < < < x 3 < < < < < ] < c c o % : + 3 s 9 % % 0 . . O = %. ",
+" % o 5 < + A $ . v 0 7 0 q O # x , +.&.+.O.#.+.I < 3 * 4 8 o ; , < < < - < < < < < < < < < - 4 r $ G Y G h , < < < < < < < < < < < < < < < < G % O * - V . v 0 0 . 0 . q g # ",
+" o A , < 3 @ % 0 0 o . F + x g h m +.&.#.+.*.=.g < x 3 d k 8 o M , < < < < < < x < < x h . 0 . 0 7 0 % 9 h < < = < < < < < x < < < < < = S 9 % 9 . * + G . 7 . 0 7 . B . . 5 3 ",
+" n x , - h 6 % . v 8 u + 3 < 5 +.-.+.+.O.#.+.*.I < 3 3 > z M 9 r = < < < < < < < < < X.r 7 0 0 f 0 . 0 % 0 = x < < x < < < < < < < < < c I ) n k q 0 9 C 3 , s 7 p . . 0 0 . 7 C j c s ",
+" ; 3 < < - 8 . % 9 v O * < < 3 ( +.;.:.O.+.#.#.+.y < < * = * P 6 6 4 A x < < < < < >.G . 0 0 7 0 . v 9 0 0 O < < < < < < < < < < < < < x = - x * 3 > * + n l + + * h $ 0 . v q f q q t z 3 c r 9 o ",
+" h < g > P o % 0 q n = < < < g =.: ;.+.O.#.+.O.*.#.w g I 3 x + S 8 M G @.< < < < Y f . 0 % f 7 0 . p % 0 6 x < < x < < < < < x < < < < , # G w h # h + 4 # # c # z 0 0 7 0 k * = * + = < 3 + A 0 ",
+" + < + 1 o 7 . n x g w 5 ,.<., y :.#.m #.O.+.O.#.#.( # 3 3 3 l z M 9 $ Y 4 h 4 M . 7 0 f . 0 0 v . 0 . & = x < < < < < < < < < c < ~ M 9 9 9 $ . ! M 0 . ; ! ! . . . & . n = + x > g = , = * * : . 9 ",
+" j = 3 - r q i * x , 5 ( ( y - <.I m +.: #.+.#.+.O.+.-.m 5 I * = * # q M . 9 $ 0 7 0 . v 0 0 . 0 v . v z x < < < x < < = < < , r 8 . . . 7 0 . v . B . 0 . 0 0 0 f 0 f 7 F $ ! ! ! r z r G r 4 * = A ",
+" , = 3 > 3 = 3 3 + ( -.m : #.,.3 < g :.m 1.+.O.O.+.: +.;.+.2.g g = x 3.. f n P q $ 7 0 0 7 . q 0 0 ; + > < < < < < < < - V 7 . v . v 7 0 7 f 0 . . 0 0 0 f 0 0 0 v . 0 f . 0 7 % 0 % . 9 % 9 w , - ",
+" + 3 3 3 3 3 = < w m : &.;.m #.y < < I m +.+.O.+.;.-.#.: ;.#.m ,.x + # ^ & 3 3 l q q T Q p 0 0 q 0 ) x 3 X.c = < < < < 1 9 % f 0 7 . p . f . 0 0 v 0 0 7 f 0 0 7 f . 7 0 7 0 0 0 % p 0 % 0 % ; + - K ",
+" 3 = < < 3 < < I m +.;.*.m +.+.:.=.4.< 3 4.+.:.#.*.+.+.;.*.:.:.5 3 < # 0 $ t 3 3 3 + @ + l n + * * 3 3 - G 8 r 4 - < c S 8 0 i ; @ O n O l P O q f 0 0 f 0 0 0 f 0 . 7 0 . 2 O z @ l i q 9 i z 3 < 8 ",
+" I < < x , < < ' < +.*.C #.;.m O.-.+.=.I < < ,.m O.O.: *.O.: =.3 < x # 0 0 0 ( + = = x g = x 3 > < 3 = 4 0 0 7 M < = = + n = = = > 3 = = 3 3 = + i 0 v . 0 0 0 f 0 7 p 7 0 = * x + 3 = + * * 3 3 - 9 ",
+" * < h < x < , g < I m *.+.: ;.: +.-.*.+.I 3 < ,.y +.O.+.;.=.g 3 < , 4 M v . 0 t 5 3 3 x 3 < < , = , h M . % 0 f + x 3 3 x = 3 + g - # 3 * x + < z . 2 q 2 q 0 . 7 0 . . u j 3 = x = < > = 3 < c / 5.",
+" w < x < < < I m < < ' 5 m O.: O.m +.O.+.=.I 3 < < +.+.O.=.y 3 I = w $ 0 . 0 . . ! # , < < < < + h ; $ 0 . f 7 q < < x x + , # G 6 M < 3 < 3 # q $ f C d 0 . $ 0 7 0 7 . 9 h < 3 , 4 4 h c h c Y ",
+" A x < < I I : -.6.g < [ 4.: +.+.1.+.+.O.#.+.4.7.< < g 4.y 3 < < 4 . . f 7 0 7 0 . $ F ! ; z ; $ . . 0 0 0 . 0 t x 3 < < - / 8 9 9 9 . > < , z 9 0 0 t * g ) O q z 2 0 0 . 7 . ! - - 6 ",
+" n < x < w : :.=.O.+.6.I < I 4.#.+.O.-.m O.: O.( O.4.< < 3 < c h 9 . 0 . 0 7 0 7 f . 0 0 0 . v T 0 0 7 f 7 f . O = g X.Y s 2 3 - ~ $ 0 0 f k 3 = 3 = = = * + $ 7 p . 0 q + ~ ",
+" - = < # : O.:.1.m O.+.+.[ g < 5 #.: +.;.: ;.*.O.m +.g < < } 5 8 f 7 . 7 7 0 7 0 0 p 7 0 0 0 . 0 0 . f f . . $ O 3 c Y s ; = 3 $ % 0 0 . l x g - 4 h # 3 > q p 0 v % 9 ; A ",
+" * 3 3 < :.:.+.&.*.O.#.+.*.+.4.7.g I 4.+.m ;.=.;.+.O.=.I < < O $ . . q v 0 0 . . v . 0 f 0 v f 0 0 7 0 0 0 0 P + 3 + 8.o $ 3 - 8 7 . 7 C 3 < x ~ # < O 0 0 . 0 9 $ , 8 ",
+" 3 = < < j O.: #.&.+.:.O.O.+.+.#.4.g ' 4.m #.O.+.O.O.y < < < 3 * l 2 $ $ W 0 7 p . q 7 f . q . 0 0 f 0 $ 0 k x = * 1 o p 3 , S 6 v $ n 3 < c V : = A 0 . 0 % . $ - K ",
+" = = 3 < < <.( O.+.*.O.+.O.#.O.O.( #.*.g < I +.+.*.O.=.I < 4.5 , 3 * + k n k i k + @ 2 q . 0 . p 0 0 W 0 . @ + = , - _ # x n i $ q = x , + M M + # $ 0 f 0 . % * $ ",
+" # x I < 5 g I 3 I +.*.+.O.+.-.*.O.+.+.;.:.7.g < 4.;.+.=.g w ( T ! z O - - + 3 3 * + - 5 % 0 0 0 7 . 2 0 P * = 3 h ~ # < 3 > 3 3 - - a o 9 z * O $ . v . 2 3 / ",
+" x < < w : +.4.3 < < 4.+.#.O.+.O.: 1.:.O.O.m y I I < I < , ( T 9 . . 9 9 q r ; ! 6 $ 9 . 0 % W q C N + ' x 3 + c K + = , < , e U s 9 j * G W 0 u + - a ",
+" - < 3 5 *.&.#.4.2.< g 9.+.+.*.+.O.O.+.&.: ;.m =.3 < < g w ; . Q 0 % 0 0 . . . % . 9 0 8 q u O + + x x x * < < Y / G x n n k + = I 6 ",
+" j x < I I 5 *.:.O.+.6.g < I y +.#.m O.:.;.:.;.:.+.y g < , # ; t $ 2 t q q q O z k O A O * * 3 x 3 x 3 3 3 - ~ 6 h - - - # 1 o ",
+" 3 , w +.g [ g +.#.O.:.1.6.< < 3 5 *.: &.=.&.:.O.g <.< h 0.h = > 3 = + - * g x > 3 3 = 3 3 = 3 3 < < < < , a 8 M 6 M ",
+" j = + : ( =.< < 4.+.O.+.#.*.+.,.< I y m *.q.O.: +.< < < c r | w + = 3 x 3 3 = 3 3 = 3 3 3 3 3 x 3 , = < < x ",
+" < * 4.:.: ;.6.y < 4.j *.O.#.*.+.+.I < I 5 +.m ;.m 2.- 3 3 - $.# 3 3 < # # 2.+ < < h x < 3 < - x < < < - X. ",
+" = < w O.O.+.m #.9. < I m O.:.m ;.+.y I <.h : m : 9.< , g 3 3 3 < , , j &.( +.g h , < < < - < , < < a w. ",
+" < g j #.: #.O.O.+.< < < 7.y #.O.+.#.( 6.g g < y m < I ( 4.g < < < ' j ( *.&.( I 3 , < < < < a a / J 6 ",
+" z * 3 4.#.+.;.:.*.+.,.' < < g 4.+.+.:.;.+.m 4.g < < < # -.m m 4.4.4.m +.#.&.: +.g < < < < < c _ ",
+" n x < 5 O.#.:.#.: 2.- < <.< < ' < 5 :.-.: O.( O.y < < } 5 &.m : m O.m : #.:.;.y < 3 < < c x ~ ",
+" G < < ( -.: 9.y 7.I I I I I =.g < ' y : +.m *.-.:.' , m #.m O.: : ( +.y y y 5 y g < < < x < Y ",
+" 5 3 I j 4.g I I :.*.*.+.*.+.:.:.#.y I < I g +.+.,.< # g I g 3 [ < 3 < < < < 3 < < < < < < , 6 ",
+" = x < [ 4 6.+.O.#.m 1.+.m O.;.m O.:.+.I < I 5 g < < < < < < h ,.h I g I < < < < < < < c r ",
+" < < I w =.-.O.*.O.O.: :.O.O.#.;.( *.( y < < [ <.< I 4.4.< 3 I , g < < < < < < x < < < g ; ",
+" x I 5 ( ;.+.:.O.:.O.+.;.*.&.+.;.+.: g [ < I ,.y :.:.+.< 3 < <.< < < < < I g < < < < < < < z ",
+" = 3 w m -.+.;.+.+.O.O.+.: +.: #.&.2.I 4.+.+.+.O.m +.g 7.] 3 g 4.4.y :.m y =.< 4.+.g < < < Y ",
+" h < # &.: ;.: #.;.O.: 4.2.y +.-.+.+.#.m #.+.O.5 [ 3 I < < 4.=.m O.+.+.*.O.4.< y +.I < < x l 9 ",
+" O < I : :.:.+.+.y I ,.y 4.:.;.+.*.O.#.O.:.y I g ,.I y :.;.+.+.O.+.O.:.:.:.g - 4.,.3 I < < < z ",
+" j = I 5 +.+.O.# [ 4.+.:.*.O.+.O.: +.#.: 7.h m :.m O.:.O.+.-.*.+.5 y g 3 x < < < 3 < < - c V ",
+" 5 g < # O.m I [ 4.#.#.#.O.: O.#.O.m =.2.4.O.m :.1.#.;.+.+.6.g 3 ' < 3 3 I h I ' < < < < < x = / ",
+" # 3 < < 5 =.+.4.=.O.:.+.#.O.+.6.:.9.:.4.;.+.O.+.+.+.y I ' 3 I < < < < I < [ < < x < < < < < 3 = h ",
+" j = 3 < h #.#.m O.*.O.O.*.+.=.5 6.#.*.O.*.:.#.:.y 7.< < < < 3 ' < < 3 < < < < < < < < < < < < 3 = = ",
+" Y g , < [ m #.O.#.O.#.*.#.O.y +.+.#.O.+.;.O.+.y < < I 4.4.g < < < < < < < I < < < < < I < < < 3 g l $ ",
+" = x < < :.O.+.+.O.#.O.m +.:.+.O.+.+.O.*.+.y I [ } y m ' < .< I I < , g < < < < 4.9.( m :.g < < < < r ",
+" < < < < 4.+.+.O.#.*.+.y y +.#.#.#.O.#.y 7.< y 4.:.2. < 3 I 4.j 4.3 <.< g 4.y *.+.y g I g < < < 3 , G ",
+" x < 3 I +.+.1.+.y y I =.m *.#.O.+.+.g I ,.m *.+.2.< < g w g < < <.I y =.+.=.*.+.6.< < < < ] < < < - V ",
+" + < , y I 5 y I 4.=.+.O.;.+.+.y [ } e.*.m ;.+.< < h 4.g ' < I 4.+.:.4.I I =.*.4.I < < < x < < < , / ",
+" k < - [ , < ' 4.*.:.+.O.:.#.y 4.,.4.m : ;.:.*.9.< < I < I 4.=.y y =.y y y 4.g <.[ g 4.2.9.4.,.< < x 3 + O $ 8 ",
+" ! - < < g < I 5 #.O.O.+.O.=.g 4.:.#.O.+.( ;.+.:.g < ' g ( +.=.I I +.+.*.< ' I y :.*.*.#.O.#.+.6.I < < , = * ; 9 ",
+" 3 < < ] 3 h O.: O.+.O.+.y 4.:.#.m O.+.;.+.:.g ' < 4.( =.+.# 7.4.#.y < [ } 6.*.#.#.#.#.+.O.#.:.( 6.I x g < - ",
+" * 3 < < , +.+.;.+.*.+.4.4.*.O.+.O.:.;.*.: 7.3 I 4.m #.:.g I 4.y < ' 4.y O.+.#.#.#.#.#.#.+.O.:.*.+.5 <.< < - ",
+" < < , =.w 4.+.m y [ w +.O.m O.: O.+.5 < < I m ;.O.m y < < < [ 4.#.*.O.#.#.#.#.#.#.#.*.+.=.2.y 9.g < x - c 9 ",
+" = < 3 # 7.' < 2.4.4.*.&.O.O.+.O.m =.' < h m O.m +.9.3 <.< < 4.#.+.#.#.+.#.#.#.*.=.y g < 3 3 < 3 < < < < c K ",
+" 5 = < , ' < 4.+.:.#.+.#.+.;.:.=.y 3 , y ;.: +.;.y g <.- ,.y #.O.#.#.#.#.*.*.y g <.< < < < < < < < < x * O z z O ; t ; $ . $ _ ",
+" 6 g e I < g m O.#.O.: O.m #.y 3 < # O.( :.+.:.=.[ ' h *.+.O.#.#.#.#.#.*.y < < < < < < <.< < x < < x < > 3 x = 3 x = + 3 = + n ; 9 ",
+" + < , ' < O.m #.#.O.+.O.+.7.< < :.: ;.:.-.+.y < < 6.:.O.*.#.#.+.#.*.y [ <.< 3 < ] < ] < < < < < < < < < < < , = < < = - - * + z 6 ",
+" ; < x < 4.#.O.#.#.#.O.+.y I [ m :.+.: ;.+.y I I :.+.O.#.+.O.:.#.6.g <.< 3 .< < < < < < - .< < < < < < < 3 < < = < < x - < 3 3 = n ! ",
+" o # 3 , :.: *.+.O.O.+.g < 3 ( *.#.O.:.:.y < 4.: *.O.#.#.O.#.=.y < < < .< x < < < < < < < < < < < < < < < < < < ] < < < < < , < * = A ",
+" # < , 5 O.-.O.#.+.=.< 7., *.O.O.+.*.y g 4.+.*.O.*.#.#.*.+.g ' <.< < < < < < < < < < < < < < ] < < < < < ] < < < < < < < < < < < = = ",
+" ; < 3 w #.+.#.:.+.g < I =.#.+.#.+.+.g I :.#.+.#.O.*.+.=.7.< < 3 < < < < < < < < x < x < < < x < < < < < = < < < < < < < < < < < 3 < A ",
+" w < # -.m O.O.y ' < 4.#.*.O.+.=.g ,.:.O.+.O.O.*.*.g ' < < < < < < < < < < < < < <.< < < ] < < < < < < < < < < < < < < < < < < < x 9 ",
+" = I 5 O.m +.g e 4.+.#.#.*.#.[ } 4.O.#.#.*.#.+.g < < < < < < < < < < < < < < < < < < < < x < .< < 3 < < < < < < < < < < < V ",
+" n 3 < h m g < I +.:.+.:.+.g 4.y O.*.#.*.#.y [ < < <.< < < < < < <.x < < < < < < < < < < < < < x < < < < < < < < < < < < < < < < < - < 6 ",
+" h < 3 I I < :.m O.+.y [ I +.*.#.O.#.+.g < ' < < < < < < < x < < < < < < < < < < < < c a < < < < < < < < < < < < < < < < # ",
+" O x < x < 4.-.#.( =.I < 2.*.O.#.#.+.9.[ ] < < < < < ] < < < < < ] x x < . ] x < < c c V M c < < < < < < < < x < < < < < < c ",
+" 8 5 , < < 5 5 +.:.y 3 e.+.*.#.*.+.4.3 < I g < < < x < < x < < < < < <. .< - < < < < < < x - G V s / < - < < < < < < < < < < , a ",
+" s 9 , 3 < I h j I I =.=.O.#.#.y <.I 9.5 < < < .< < < < < < < < x < < < < < < < < < x = n S _ 8 < < < < < < < ] < < x x ",
+" 9 $ * < < ' 3 < w O.#.*.#.+.< < I :.y ' < < < < < < < < < < < < x < < < < 3 < < < x < x > r ^ C = x < < < < < < < < , r. ",
+" P - 3 , < , < < # ! +.#.O.+.,.< 3 e.q.I x < < < < x < < < < <.< < < < < < < < .< < < < 3 < 3 - + x x < < < < < < < < < X. ",
+" < = < # G ! , < < # m +.*.:.g ' h ; r x < < < < < < < < < < x x < <. < < < < < < < < < < .x < 3 3 = < < < < < < < < < x ",
+" x g = Y F b 5 , 3 3 3 I +.=.< < w w + ' x x < < < < < < < < < < < < < < < x < < .< < < < < < < < < < < < x < < < c c 6 ",
+" = x , 5 2 b t j I < 3 I 2.< < .! 5 3 x < < < < < < < < <.< < < < < < < < < x 3 .< < < < < < x < < < < < < , X.V ",
+" 3 3 3 ; t C F ( x < < x < 3 = 1 4 < < < < < < .< < < < < < < < x < < < < < < < < < < < x < < < < < < < < x = A S 9 ",
+" + > - O & & C : 3 < < < < < < 3 / # x < < < < < 3 < < < < < < x < < < x < < < < < < < x < < < < < < < < < ] < x = * n n n M ",
+" * < j t & C m < < < < .< < 3 - c < < < < < < < .< < < x < < < < .< <.< < <.< < < < < < .< < < < < < < < < < e 3 < x * x # ",
+" # 3 h j C & : 5 < < x < x < < < 3 < < < < < < < < x < < < < < x < x < < < < < < < < < .< ] e < < < x = c 4 h < < < h g $ ",
+" C * = z &.: b j ' x < < < c # g < < < < < < < < < < < < < < x < .< < < < < < < <.< < - c @.= < < < / ; F F C m } < = < V ",
+" 3 g + t & t -.g < < < x 4 ; ; w = < < x < ] x < < .< < < < < < < < x < < < < < < < < e < x <.< = A 2 b C & & 0 F h , < n $ ",
+" 4 x * 5 C &.C w # < < < 3 O b t ( h x < < x < < < x < <.< < 3 .< < < < < < < < ' x < = e - < x - # t t & & & C & C b t m < - ",
+" + A t C &.&.: * < x 3 < j t n = x x < c c @.- c x < < < < < < < < < < < ] < , X.@.x < < w t & C & C & & & & C b 0 j g - ",
+" # 3 * j C b t m I < < < 3 * * 3 3 = } - z z 0 ; A < < .< < x ] < < ] <.< < < < < X.K = < = h O & : & & & & C & C & C & 5 x = q ",
+" ! < < # O C & t b I x < x < 3 3 3 h ; b b b j O 3 x < 3 < < < x < < = .< < < = o.t.8 8 * x # m b : C &.C : & : & : & & 2 m * 3 h q ; t O O n n 4 i 9 ",
+" % C < 3 = ; & & : t =.< < < < x < A t 0 & k + x x < < @.A > c c - c = = < < < @.$.o % g g w ; : : & : : & j & C &.C & & n 3 x 3 = 3 = 3 = 3 < - 3 / ",
+" _ # = g + F C C &.; , < x < x 3 3 n C n + x g # 5 ; t & ; t ; ; ; ; @.c < < < x > $ . F j ; & & C : & & : &.: : & & & t 5 x < 3 3 = 3 < 3 x h x - ; ",
+" M 4.= 3 n O b & : C 4.< 3 .< 3 3 3 x 3 x # 5 O j : & : & & b C b & ; O # < x 3 H 2 2 b & : & : t & : & C & & C &.t C 3 < e , < < , < , , a 4 o ",
+" o 9 5 = = + O C & t C : I 3 < < 3 3 x < x x g 3 j t & C C & & C & : f t m 3 3 x # t f &.C &.C &.& C &.C & & C C : + 3 < c G 6 a L ! J s _ X X ",
+" o h 3 * t b b b F F 5 < < < < < < 3 ' 3 3 O & & &.& & : &.C & : & q =.h 3 x z C & &.C & & C & C & b b & m + x x < , s _ ",
+" 9 % o 9 7 8 6 5 < 3 3 # l C C b t b t j I , g < I , < # 4.j b C : C &.C : C : &.& & b m - 3 3 t C b & t & t b C b t C z + 3 < < h G ",
+" f 0 n = + * + = = 3 < x 3 = # C b p C & t b b ; m : ( -.; : C &.C & &.C : &.: & C & C & 0 [ x 3 n t t ; q C C n n = + = g 3 , < , y. ",
+" f + = x > = 3 > 3 x < < < 3 3 * O C b & & & & C & F F b C & b &.& C : C : &.C : : C &.& t b * < 3 3 = + = g + x 3 x 3 x 3 x x < = h ",
+" + + < x 3 = I x < = 3 < < < < < < 3 3 # k 2 b t & C & & C C & &.& C : & : &.& : & : & : & C b q g < , , - 3 3 x 3 3 3 3 < < 3 < , e G ",
+" 3 3 = 3 x - 3 < < < < x e < < < < < < < x 3 3 3 * z t F 0 & t b & b C & &.& : : C & & +.& : C & C j + 3 < Y 9 . ; Y ( h # e , h 4 ",
+" = = c < 3 , < < x < < < < < < < < < < x < < < < < 3 + + k C C & & f C & & C C &.& & &.: & & & & C y = , - w M 9 . $ ",
+" h - < - < 3 - e x , < < < < < < < < < < < < < < < < , e - < x 3 3 * # n C t b C b &.& C & m b t C t O + * 3 h r ",
+" J ~ E 4 h c c X. # = < 3 3 = ' = + l z t ; q F t ; C O g x 3 3 < e ",
+" , , < < = g x 3 3 + + + * + + = + 3 = 3 , , ",
+" r G h h e < 3 < < x 3 3 x 3 3 x < ' - ",
+" r # , h , , , < c "};
--- /dev/null
+/* XPM */
+static char * calvin4[] = {
+"76 116 59 1",
+" c #000000000000",
+". c #FFFFCCCCCCCC",
+"X c #999999990000",
+"o c #FFFFCCCC6666",
+"O c #CCCC99990000",
+"+ c #808080800000",
+"@ c #666666660000",
+"# c #000055550000",
+"$ c #CCCCCCCCCCCC",
+"% c #999999997C7C",
+"& c #CCCC99999999",
+"* c #999966660000",
+"= c #FFFFCCCCFFFF",
+"- c #EEEEEEEEEEEE",
+"; c #999999999999",
+": c #CCCCCCCC9999",
+"> c #BFBFBFBFC0C0",
+", c #666699996666",
+"< c #BABAFFFFD7D7",
+"1 c #DDDDDDDDDDDD",
+"2 c #FFFFCCCC9999",
+"3 c #AAAAAAAAAAAA",
+"4 c #9595A6A62C2C",
+"5 c #666666663333",
+"6 c #25256A6A0606",
+"7 c #CCCCCCCC6666",
+"8 c #91917B7B7979",
+"9 c #FFFFFFFFCCCC",
+"0 c #555555555555",
+"q c #666633330000",
+"w c #999966665252",
+"e c #CCCC99996666",
+"r c #66669D9D3C3C",
+"t c #333333330000",
+"y c #666666666666",
+"u c #CCCC99995E5E",
+"i c #CCCCCCCC0000",
+"p c #D2D266660A0A",
+"a c #CCCCCCCCFFFF",
+"s c #FFFFCCCC3333",
+"d c #FCFCFFFF6464",
+"f c #FFFFCCCC0000",
+"g c #FFFFFFFF9797",
+"h c #CCCC66666666",
+"j c #9999CCCCB7B7",
+"k c #CCCCCCCC3333",
+"l c #333333333333",
+"z c #14141D1D0000",
+"x c #666600000000",
+"c c #FFFFFFFFFFFF",
+"v c #141475757575",
+"b c #666699999999",
+"n c #FFFF9999A2A2",
+"m c #CCCCFFFFFFFF",
+"M c #99996666CCCC",
+"N c #666666669A9A",
+"B c #CCCC9999FFFF",
+"V c #FFFF99996666",
+"C c #FFFF99993333",
+" .Xo ",
+" O+@#$ ",
+" $+%&@O ",
+" *%=-*; ",
+" :@> .%,.<. ",
+" X+121X@3@+@@ ",
+" -@41.-5562-.@% ",
+" 7@8192%;1..:+8- ",
+" ++@@081.9219:%+@#q#@3 @@+ ",
+" >we&;e:.9:.-r@@#00q@@@$ X+O@4 ",
+" X -.-.92-92:w55t0y u@@ iO p@ ",
+" %+.71212.929-a.80@@72o@@ @7s2OX ",
+" @#@@#19$2-2921%@ty2doo@@ i+2dso+: ",
+" $>&;*7$29.:+@@@t@@7fgoo*@ #OdfdgO@ ",
+" >33$X3-29u@3>ah6@ooogfo+ i@:foosgp+ ",
+" >+6@#@@+$$.> = a@@7odfogoq ++osgfgs2* ",
+" X#@5h@@q+4j .#@Xgfdsod++ .+XgssdfddfX ",
+" 3@#r222u@@@@Xj a@#@fdssdoo@+ $@Xfdgosdo2+$ ",
+" 6@@joo22kp+@@@+q@#:sgfsdoo@@ X@e2fsdosddO+ ",
+" a;@t@d7sdo2o2e@@l@@Xofodsg2o@+3,@Xdodosddoo+O g ",
+" .@5t+2dfogio227*@qr2gsodsgfo@@@t:sdfdsssgso#: 4 ",
+" a#@#Xkfgffgodo.eu7fdsdsdfd22e@+oofdssddfd2u@9 X ",
+" u#@@+:fgffdfgf2goofdfdodfogso7gskOogfsdfdop+ 9g+ ",
+" 8@t@@XOdofdfodfdsdfdsdsfdso7u+@@@+ioofdso2X@9o@ ",
+" .r@q@q@kgfodsogfgfoodfkX+6@@@q#@t@+odosgdsoX+g+; ",
+" 9odsg.h@#q@sfgofddfdfdods+@6q@#z@#@qt@tXofgsfogoOfeO ",
+" gsfgfdfogooeo2osdosdsodfdO+#@t#qq0tl0l0t@tkdfdodfgso7+ ",
+" do7gkos777o2ogsdsdsgfodfiq@#@zq5l0lq00lq0t@@Odffdofdoo+. 9 ",
+" :kdiOX+@++Ogsdfdfgfdfdss+t#@qq0ll0000t00l0tt@@ogffdssddo7299ggd ",
+" 7++t@@@*OOkofdoofdfofdo7+#q@tt80000t0t0q000w@t@7fsgsodsf2O6#@+X: ",
+" :3&3&$22goodfodooodsdfoX#@#q00-1x000t0l0l08=&@@@7dfodfdgf2kOu2 ",
+" godssdsodssdkOik74#@q0l0t-=8l0q00l00q:1.$@#+Odsdoffodsgog. ",
+" 2gsdf7dfodfdi@@#@q@@w8>hy@qac+5lvq00q0;..9..@t+Ogfododfgfoo ",
+" .gsf7O7ofgfiX@@tt@ql1..-2-g2-e@1$@@tl08a..92.921e@@q+sof@@t6+u ",
+" 7X+#Xfgof7+x@t@0q#4$.91292-.=@#@@lye$...9:.<2-..1w#q+72*#w@@#@i ",
+"7++t@*:osdi@q#qlt0l08-2.912-g<2qww8>=1.19..9.9:9.-2$*@q+o+y-a&;3= ",
+"@@@w$ ksgO@@t@l0l0l@4..979.<...61=.-:929o9-292-o<29.=w#@7+;=-c- ",
+" >= a.2dO@qt#l0yq00ty192-2929$9@-.-2-2-2-2912$21ij7$92w@+#; :e37 ",
+" . 7:Ot@z0q@a=8l00q7212-2929$$.:929.9291:e++@#@qt72-=8#q@q@6@q+.9 ",
+" . 2@X@tt0t0ya-$@ql0qb-92-2-299.9212<7:++#@##@qt@5=9292005&$.;@@; ",
+" a5@z@0t0t@>-->00#@+29.9.g-2.129$>*@t@q@#lqq#t@>.29.1wye-.-.;t+. ",
+" . @#5z0ll0t5a:,@y>&1..92-2991g%++#@q#q#q00l0l05=9.$92.-..1.1:@qa ",
+" j+t0l0t00lq#@#q*1.-..92-29..7t@#t@#lq00l0q0t0q*<2.9o--2$92<..@#. ",
+" :4@#@q0l0q0t0qt@8=.9o192-992<Ot#q#qtl00t00t0l00l3.192-g9292-o1.3@a ",
+" %6@wtyw3wvt00lw>..92-2<.92.3@6@@0q0l00t0lt0l0q0@;..o9.2212-2129:@ ",
+" ew$awa..1n3&3$.=9..929212j+@@ttl0l00ql0l00t000l0$9.1.9..9.929..4% ",
+" m= 3:.-.--..-.929<29.$:+@@#t0lvq0lt00l0ll0t0l0@.792<291o92-79-%@. ",
+" .m. % 2129192-2-2.-:7+#@t@qt0ll0l00q00000l0000y=..92-2g$.92-2:+y ",
+" m=@:.9-29..g-2917+@#@t0ll0l00t00qv8n>>000q0te<.<.29$..92921%@& ",
+" +,-29.2992-9O+@#q@t0q00t0ql0l000a..>.@l0t0$2.9.129<7.12$+@> ",
+" %+71.$912-:4@@t0lt0t0t0l00l880qy.>..>=w0@@$.92929..*++#6*$ ",
+" @+$<2$9.X@#t0@t0l00t0l0ltM=eq0yn1n1.$n6qy.-o12-29:6@5;$ ",
+" = @+212.%@t@00lq00ll0l0l0z.>n>;&an1n$n1&5%1..g-29.%@@ = ",
+" m:@@1.<X+#0ttt0l0l00l0q00y>.1n.$2$.$n1&;51.9..9929@@a ",
+" $$@@:1&@#0t0l0lvq0q0l0l0qy.1n.1n..>...>@8292<9.29.@@ ",
+" .+@ty$2#@ql0l0l0qvl0q000l0N=na..$...$.$e51..-292-2:@a ",
+" j#@0@X1&500l0q0l0l0l0l0l0l@&1..>..$=n$.w%.-.g-299-%* ",
+" +$.@t;1.$*5000q0l0qvt0l00008.$...>..1n351.9929..2$+3 ",
+" 7@..%@y1.<2.-.%w0qvxvx0l00t0#53$n.$e%@#0>-.9929927@5 ",
+" $r<.$0@:1o91.1.=>;w0q000q0lt0q@588q@q@0@..29..9. 4@> ",
+" .#2<o#@$.$29$9.<.-.1$hy50t00l0lq@t0t0l81.-92-929O@a ",
+" %;:;5t*<.-:92129..-.1=.>8wlyl00l0l0q,...912:21:4= ",
+" .@#@q0#&-2-.99$.9929.9$.=.&hy5l000t0>-9:7+@@6+@3m ",
+" >>&a0@@7.929.291212929.g---.$.$&;w%.$++q@6q@#q#+2 ",
+" &@#@;.9:-92929$.921.99.-.-.-.-.,@@t5l8y05l@q6$ ",
+" 8@t+67. 29.129.9.9.7292929.$%6q@83jaaaaaaNl@@9 ",
+" =%@#@#%:1.9.129:-2-.9:.1:X++y3aaamam1m$1am3#@= ",
+" =&5@t@@,O<:9$29.9.:.14+%a$mam$mjm$m$1m$maa52 ",
+" =>w@@x6q++X%++++%+63aamjam:m$m>m>mjam$mjjb ",
+" =>3w@@#@#q#t#@8;m$mj1m$m$m>m$m>mm>mjma+2 ",
+" =%@t0#q05aamjmjma<a1ajm$am$j1m>m>a+5 ",
+" >y0l@,aamja>m>ma$m$majm$a1m$a>mjarp ",
+" $r#50Namm$m1m>m>m<>mjm1jm$m>mjm$ma3@: ",
+" >r6@508+m$$m$mja$m$1mjajjm>m$a>m>mamar@. ",
+" i@#lyaam$mm$m$mjm>m$amjm1jm$m$m>mjm1m%@; ",
+" >8t50#;mjm$1m>m$m$mj$mjm1jm>m>m>m$ajm$a+@ ",
+" 7@@+$&w5@baamm$m$a1ajmm>ajam>m>m>m>m1m1am%@; ",
+" %@X:-.-=8l@4m$1ma$m1<m1j1m$m>m>m>m>m1a>jmja5+ ",
+" :X+3.-..$X+w;@#8a1amm:a$am1m>m>m>m>m>m$m$mm$mj;@ ",
+" %*e-.-.%++ea =y@,j<m$1m1m>m>m$ajjra$a1a>m>>mjaa@1 ",
+" 2Xe--2 X++> =+#ma$ma$m$m>mjj+@,jam$m$m>am>m$j+3 ",
+" .X+o- 2-4+w a@3jm$<m$m>m;565%a$m>m:m>mj$aj1m;@ ",
+" 2+@&-.. X@3 :5ama1jmj3@65;aaamjajm>m>mm1mj1j@3 ",
+" O@1.- 2.2@@a . .t,b@+@t8Baam:m>m$ajm$m>mmjmj1mq# ",
+" :@$..9..9-.3+4 -@6q@#qb>m1m1a>m>mjm$m$m$jm>maa8@ ",
+" O%- 1297.9..#, @#0t0yaa1m:am1jm>m>a1m>ma$m>m$jt@ ",
+" +1.+X91u,79-*@> ;#0@N8v,1m$a1mjm>m$a<a>m>1m>m>mj@8 ",
+" @-7@%..1*@3$4@y 7@qbaaj@j$m$m:m>m>m$a<j1am:a1a$$63 ",
+" .%1eq#.-.;@@@@@$ =@6%amaa@j>mjmaa>mjjm$maj$a1m$ma@, ",
+" .&-4@@j9.7@y>>= 4@0m$m$a>m>ajmjm>m$jm$m1m$m>mj$@3 ",
+" >$.5q#+:.$tr= 80@+a>m$m$mjm>mjmjam$jmj$m$1mab@, ",
+" :,+#y3q+jX@y +@#@,a$m>m>m>m>mjm1amajmm1mj1mq@; ",
+" 5@5,==;@@wa X@#33@@bja$m>m$m>majm$<m1<a$ma+@@r ",
+" *yy=m = 9g@@55#3a%@@bj$a1m$mjma<aa<ajmj>+@bq@+@ ",
+" = Ot@jaB8#q,aj855,b>ajm$<a1m1mmj3#@javq#@* ",
+" o@#8jam1a$8@#8jaaj3;baam$m$1a<%+@3aaj@l0#@u ",
+" 7#@jaam1jmama38@@,%jja$m$m$mjj55;jamja5y8wqts ",
+" O@@3am$jma<ajmama$;b%r+,rajm>;;jamam>mj+#a2#@* ",
+" :@#b$m>mm$m$<m$ma1mamaajmaam$mamamjm$a$j@@X1&t+ ",
+" :@@yaa$m$$m$m$amjm11m>mam>m$m$1m$m$mjm1a$6q3.1*@e ",
+" e#@,a1mjmm$maam11mjm>m$m>m>m1am$mjmjm$<ajl@7..$@@ ",
+" 4@vamjam$am$m<$m1jm1mjm>m>m$m1jm$m1a1a1<%508-2.+@V ",
+" ;5@a:mma11m1m$m$m$7mja3m>m$ma$majmjmjmja3b5%291e*7 ",
+" u6yma1<mjm$m$mjm3+@q+#r>aam:mm$mm:a<a<a<raw3..97*O ",
+" y@,1ma$m$m1m$m$maa;y@@@,j$m1$m1$mm$m>mjaab7$92.%@+++u",
+" :@@a1m1ja1mjm$j,+@@;=a@q,a1m$am1a$mjm>mjm;%9219e@#@@@",
+" 86+j>ma$m$mjb+@e: = 8@@ja$m$m$mmjm>m>ma>62$92.@;&q#",
+" *@,a$mmj3+@63=. . .#@am1am>m$jm>m>m$1r@$..19*$.4@",
+" *@5#t0q08=$92 243 .@#amjm$mj$mmj1a$m@;1.9:92$4@@",
+" a8w000#%:9.:9 +> m$@b>mjmjmm1$mamj%@X9$9.2$+@*u",
+" a=3w5>.197O@a @qj$amaa$m1jm$+#@y.9219O@@2 ",
+" a5+r%X@6% $@@,j>m1amjma3#@yq7.:9.;6C ",
+" *@5@8a= q@@,%am:m74#ya;@t%1::+@o ",
+" a = a;6@#@+y@t@@3j8q5#@@@@> ",
+" =%w@t5@885@ql3=a%w8a ",
+" m=aa = awy> "};
--- /dev/null
+/* XPM */
+static char * calvinf[] = {
+"148 103 50 1",
+" c #000000000000",
+". c #999999996767",
+"X c #CCCCCCCC0000",
+"o c #666666660000",
+"O c #000055550000",
+"+ c #7474B0B03333",
+"@ c #8787CCCC9999",
+"# c #808080800000",
+"$ c #999999990000",
+"% c #333333330000",
+"& c #A7A764640202",
+"* c #666633330000",
+"= c #2A2A66660101",
+"- c #CCCCCCCC9999",
+"; c #999999999999",
+": c #CCCC99996666",
+"? c #CCCCCCCC3333",
+"> c #FFFFCCCC9999",
+", c #CDCD8B8B1D1D",
+"< c #FFFFFFFF6666",
+"1 c #FFFFCCCC6666",
+"2 c #FFFFCCCC3333",
+"3 c #CCCCCCCC6666",
+"4 c #CCCCFFFFCCCC",
+"5 c #FFFFFFFF2222",
+"6 c #CCCCCCCCCCCC",
+"7 c #FFFFCCCC0000",
+"8 c #9999CCCC4949",
+"9 c #FFFFCCCCCCCC",
+"0 c #5F5F66665F5F",
+"q c #080826260000",
+"w c #9999CCCCCCCC",
+"e c #FFFF99996666",
+"r c #C0C0C0C0C0C0",
+"t c #666699996666",
+"y c #666673735959",
+"u c #9E9E73735555",
+"i c #EFEF99994747",
+"p c #555555555555",
+"a c #808086868C8C",
+"s c #AAAAAAAAAAAA",
+"d c #CCCC9999CCCC",
+"f c #595900000000",
+"g c #CCCCCCCCFFFF",
+"h c #333333333333",
+"j c #B7B71E1E0C0C",
+"k c #1B1B82825858",
+"l c #99999999CCCC",
+"z c #FFFFCCCCFFFF",
+"x c #9999CCCCFFFF",
+" ",
+" ",
+" ",
+" ",
+" . ",
+" XoO+ ",
+" @Oo# X+ ",
+" $# @o%o &O* $ ",
+" =o# oo*X O*o - @$ ",
+" o ## #%;:#- #oo- $o ",
+" & oX? #*->,#,< -*O-1 #oo21 $, 1 ",
+" # Xo- oo> 2,##3 ,1#o+@ooo:< >4$o <# ",
+" # >1$,5 oo61113#oo,13*oO*o,7114#=,1,o ",
+" 8 >11o3 #o9<7111X,1113&oo:>12 &oo>1#% ",
+" & 11X$X oO172<7<>17<11>,117<1#oo323% ",
+" o3111$ 3 oo9<72<72<271<211117+oo112oO ",
+" #$7<11& 76o.77<177<217<71211?#oo111:Oo ",
+" .o>712X&X?o>11711171<771<7111?,>111$o0 8# ",
+" 8#OOo o317<11&#O,7<117<7<7111717<21>17<>#o+-+o$ ",
+" 3oqo*==o$3 *#>2211 #&-27<72712<7XX2217<72<771?%oo=.1 ",
+" woO%oe:oo#$3- #o,<17<7>111177<17<71?#11$?7227<121.o#,1- ",
+" roo%-11$oo#-- - 8*#1127<212121?7<7212X&1O$111<77<7111>1 ",
+" wo%,111>,Oo$$3-4-Oo&<17717<2?111717<1&##o12127<77111111- ",
+" 9+*t1<7111#=oo##o*Oo71222271<77211171$%o11X7<1721271<X$$#%$ ",
+" 6y%$2112123e.,u#=u,11222<12721<27211X.i?1227<71<2122i+u#u ",
+" 6po#?717<111111>>11171<1172127<17<7<117<2<277<72711173,$$ ",
+" -.Oo&?1221<7<2<711<1717271<7377127<77177171117221<7$Ooooa #o ",
+" so%%o#17<7171717<71171<11722177<17212<12127<212171$oor +ooOo+ ",
+" oo%%oO,1112<71<727<127<71<7<727<71<271<1<771<7<7?&%o #os9o%0 ",
+" w%%oqo#117<711721277127<17171<277<722172127<11731O%o .o.9soO& ",
+" 3 -o%%*O:1<771<71<71715<77<721171117221<7122171<7,,oO* #od98fog---- ",
+" -6aphoo2<71127<27<17<271777<7<127<212<717<527<2,#y%*# o#$ O*-9&o08##o#X ",
+" 3 3+8+###=oOos>1171<7127127<771721117171<771<72121721171Xqohhp +:u#*y9--*o*.r-%o ",
+" #oooOo%oooo&$,:11117<717<17<17212<17<7<7<27<11X<17<1717<1>+oph%o##8 3O:996sr>9>>--99.o. ",
+" -.-,-:>31>11111111171<77127<71<27<7712<7227<71<717712<77<&&Oy%%o%*. w#%.$o996>99>3:$o X3$###$#@ ",
+" 1111111112111?7<27<7117<277<722717<17717<71172177<17711uoh%*o:oO&4 wooO&-19>-9-ooo@ @#o%oOoOoOoo$3 ",
+" - 711<71<72<7211171272<71711172211<77211<771<711211727172=ou%p>3&o#..##.hys99--9>>-.os $o%p;rsss;.oooo:r ",
+" ?121712711727<2?7<121775127<212<27177<2711277<?122122713Ou0p%2>0%*Oo*Ooo:69-.o&3>-9ao#1 $Oop6----->-6s0Oo$ ",
+" >1<7112115211171<772<71271<771<72<71117<72<72171<7125#$2&o:#qy:,o%O*j&jjhu>3Oo=ou9>>oOow @#odh61---1--3-:oOo: ",
+" 177 17<2X?1X<1171217221177<11X<177<7<271177<17172112+o1#Oyq*%o=%%%p*f*u*OoOoar0=.>;Oo% +*.hh6-----3>->-ao=o? ",
+" 3 X1177?X&$&##,721213211<72<772<7712177712<72171171<7X1,o:o*O*hh%*hp%qhhh*h*qosg ;#Oo*ps oOghg--1-3---3---.*=# ",
+" 11?$#o%ooO=o:?<17<212272271217217<121751722127<127221#o#O%phhh*ph*hhhhhh%%p%#8 6 6sr6 wooph-r--3>--3-->-ra%o8 ",
+" 13#ooO*Ooaruo9>11372<712112112111<72121721<771277121$?ofo*h%p%ujjjju*h*h*hh*ho*o-6 - 6 8*o%po:-3---33>3-3>soO# ",
+" o%oOy.r .o, 9-1217217<77<717<27217<17<1727<27<123#,%ph%ph*jjjjjujh*jjj&hqpqoOOoOooo#o##8 6rOo ho0 33->----3>36s%o8 ",
+" ; g %r:99113112171171<77171577227<711727722Xoo%*%hjj,ju&jufhjjj,jufh*j%*O%oOO%%%*OOo@ -oO9h@& r>-3-3-3333,.oq.6 ",
+" ou9>-9+##$1<7212222222121122171722127?uo*&uhjjj,&jju***j,jp*jf&j,j*%%j*%*j&***%%=.-3-666o=#g6oy$#y##o#o#0okyu=%3 ",
+" Oo-9>>>311171127<27127<1X<1751771171+%&&jpj,jujjju*jj,jjp**ju,jjfhfujj,jj,j**%*%%o%qo$-@=*Oo.O%ou.-r;a.p=*o#p*O, ",
+" oo4::34e>?1<7<72712<217717717711<72?&,&jj*jj,j&j**jjj,j**jujjju*hjjj,jjujhp*j*hh*%p0%oO*%O*O*ppl6-##oO*y0au.upoa ",
+" o*3:99193,271712X$X,7512321217<2711o,&,jyjj,jjj**j,juj**j,jj,j**juj,jju*h*jj0hh*ppyga%*Oph%pOdlyy*oo0:;-6-9-6r%$ ",
+" #o;9>-98o#11<7$ooo%o.7712122217127O&&jjyf&jj,j0*juj,j*hjjjujjp*jjj,j,*f*j,jjfhhp0h;6&O*h*phag 6*=ar-6--3---3--#* ",
+" ;*&-9>>>-911Xo#$r>6:o117<7<175121#ojj&*fujj,j**jujjj*hj,j&j,*jjuj,jufpjjujjh*hh%;p;+hfk%p%og gaor>-01---1----aO#- ",
+" *o4::3>>931$os999>9.$1172722712#o%&j**,j,,ju*j,j&jh*jjjuj&fhj,j,jyf*jujjhhhhhp%*hr*Opfpqhos 3.goar-s-----3>-33%o6 ",
+" ;*o->:99193o$>:9919.o,<21221XXoo%%j&*jjjjj0fjujjj**,juj&jh*u&j,j**juh%h**0hph%hp%ooh%phhh*tzto.so-1----3---3>;oO$ ",
+" o*s99>-993%;99>-9>:O:7122?$*%O%&j%f*jujjyfjjj,,f*jj,j,jp*jj,,ju*jh*0urs6-ssa0*qhh%phhhp%ha 9oog#06>333>--3---ooy ",
+" oO#6-9>>9#O:>-9>>4-*+2223o%o%ojjj*q,jj&uf,jj,jf*uj,j,jh*j,jjj**jhous9--3----rshpphphhp*pho9 wo#go3-->--3>---ro%# ",
+" #o*:4::3>>:6:4::31.%:11Xo%oq*jj&j,fhjjj*jjejjjpjj,j,jhjjjjuj**jp%a6--1--:->3--sohp%phhk*hkg z=o; %---3---3>?3%pO ",
+" oq#6>4::9919>-96>uo,11o%%%*%j,j,jj*hjjj,jj,jhjjjjjj*hj,j,j,*ju%*s3>3--1---3-3-rphh%ph*hqo# o%#g;#-->--3---so%# ",
+" .oq>6199>-9-9>>>6#o>3$o%*ju*hjjj,jjp*jjjujjy*jj,j,jhjuj,j,j*j*ha66-----3>--3>3&%phhhphhh%o.6Oo*#g+.-->33-318fOy ",
+" ro#>6>-9>>4::39-=,3#*%j,jjjj**ujjuj**j,j,**jjujjjhj,j,jjjhjj**6g--1-3---3>--:hyphphhhphhqo=**%O&rs$3-1----.o*t ",
+" o% 1>4>-->9>+$opro*O**j,jjij0fyjj,jj&j,j*jjjj,ufujj,j,j*j,j0* -r--3>--3-----3s*hhphhhhphh*hhpyOo.ry$@3>-3o%pa ",
+" s*o>>4:9>>4::6.o.o**jj%*jj,j,jjf,jjjuj,jf,j,j,jhjjj,jjj**jjj**$o:-3---33-33--;&;;0hhp%phhp%kyrgl*o*.s###.ooh%# ",
+" #O*1619>4::4::9-.%jjj,jp*ujj,jjufjj,jjjhuj,j,j**jjuju&j*j,ji*h;o0h33->--3-13#$r--:pp%p*phhpl 66yOo.rr.o%%p0; ",
+" oo01>6>619919999ojjjujjjhfjijj,jjh,jj&**jji,jjhjj,j&jj*j,juj*Ous*rr>-3-3--to:ru3-r6pp%phho. 9 grhofo*Ohho ",
+" O*%o>4:>6>-6>--$*jj&j,ij,***j,jjujf,j,%j,jue&jjujj,juojjj,ju**k6oa6--->-:#o;.#.-->3rop%ppl a0Op*0sg ",
+" o=oO619>149149$o*pjj&jjjjj**ujj,jjj*jfj,jj,,jh,jj,j,j*jjuju*hh*saos->-s#o.;.o:--3---rphO. 6w ",
+" o=*0>6>-,to+o#*&jj**jjj,jju&j**j,ju**pjjj,jjfpj,jj,jpj&j,j*hphhp@uoss$y0#uy.6-3-3--3-sy*=. ",
+" ro09>149o*%%h%*j&jjj**jjj,jj:j**jjjjj*uj?j,jhjjj,j,fjj,jj&hhhp%p*g;oOoy0a-9-3>>-->-----o%=. ",
+" .o?363u*0apphhf,jujj**j,jjijjjjjjuhhpj,j,jhjjj,j,jhjijujfh*phhO%oga*p&-6-a6--1--:3-3--rpOo ",
+" #*oooo%ay%*ujhujj,j,j**j,jjuj,*h*hh%h*jj,hjjuj&jpjjj,j,phhhph*hO&;0pd61-s3>3--1-->->--#*O ",
+" ;;a0p%%p*jjuf,jj.jjujpjj,j,jhhhhhpph*0h*j,j,juf,j,j,jhhhph*p0aO.g;o36166-----3>-33--;Oo ",
+" -0pp%%*jj&jjjj,j&>j**jj**hhalsppp%fhpjj,j&fjjjj,jhhphhhhp*go%;gro;6g--1-3---3>--3:Oo ",
+" gahhjujjh*j&j&jjjujh*hhor g6 l0hh*0j,j*,j,,j*hh*phph*O%a%o#6g##9r--3>--3--3>-tof ",
+" -#ohpfjjjjhjjj,jjju*hhpg #a;h**ju*j,jju%hhhhhhph*O*hOoosg#o6-3---33-3--3o%o ",
+" 6+osshh*ujjjhhujjjufphao gahh*hjjj,*h*pphph%php%p%*%o#6ao.33->--3---.o%# ",
+" -$=s99aohfuj,j**pj*hh*l 9aohh*ujjhhhh*hhhhhp%p%hphOo%asoo+883,$#$oO%p ",
+" #os>9-9;ppf,jj,j**ph%o 8 6ahp%***hhphhphphhphhph%p*%%otd;ooooyyayo%o ",
+" #os99-9$o*0hf*ujjph*hpho .ofkfkhhhhhhhphp*khhhp%k*h%*=l6zgg zs=%ps ",
+" +o-9>>9+oo6g;pp%hhhhhyaut - lpfpfa;phphp*phhh*hphhfk%ppO*o#.-#o=%o.6 ",
+" $#$# 8os9>>1$o0g ap*hhhpg - r0Oplgohhp%k*phhphhpphhp%l tooO*OOohag ",
+" #oooo* o.9>>9uo+ glpp*t 6.6 lhp*phh%pphhphhp*O* - wsssr;r ",
+" Ou >.ooou 9916=og roqhhphp%hphp*p%pp66 ",
+" o.>69;*#69>-9## pppphphhp%p%php066 ",
+" oo9>93od>>9>>oa - r#%hhh0hhphppag ",
+" %*8>>-:9916ooor- xpppphhp%oar ",
+" oO&99>9>-9#oq0 wo*ppppawg ",
+" oo=*y-9>-9>>.%%*=$ 6 66 6 66 ",
+" oohus-9-94::39s00oo# ",
+" o*s69>X4::3>-99 9 #o ",
+" *o9>3=*3>9>$o8->>9uo ",
+" o,>+OoO:9>3*O*. >-o# ",
+" *,$O,&o,>>sos0o&.#o. ",
+" Oh&:,o>19-=6 .+oOyg ",
+" e1:o21>,or ; ",
+" ?#o6 ",
+" >##+o%3 ",
+" #o%y ",
+" u& ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+static char * dragon[] = {
+"170 232 213 2",
+" c #000000000000",
+". c #F8F868684848",
+"X c #F8F880805050",
+"o c #F8F860605858",
+"O c #C8C82C2C2C2C",
+"+ c #8C8C28282C2C",
+"@ c #DCDC48484444",
+"# c #B0B044444444",
+"$ c #6C6C1C1C2C2C",
+"% c #48481C1C3434",
+"& c #484814142424",
+"* c #343420201010",
+"= c #282818180C0C",
+"- c #6C6C44442C2C",
+"; c #1C1C2C2C2424",
+": c #343448481010",
+"> c #444438380C0C",
+", c #F8F830302C2C",
+"< c #D8D848485858",
+"1 c #F8F860605050",
+"2 c #48483C3C2424",
+"3 c #202020203434",
+"4 c #8C8C58582C2C",
+"5 c #50502C2C2424",
+"6 c #1C1C50502424",
+"7 c #484858583434",
+"8 c #3C3C2C2C2424",
+"9 c #C8C8A4A44C4C",
+"0 c #343410100C0C",
+"q c #F8F888886060",
+"w c #A0A038380C0C",
+"e c #303014142424",
+"r c #282844441010",
+"t c #242458584444",
+"y c #F8F878786868",
+"u c #A4A47C7C4848",
+"i c #6C6C5C5C2C2C",
+"p c #C8C884844848",
+"a c #707078781818",
+"s c #E4E484844848",
+"d c #F8F880804848",
+"f c #D8D8C0C02C2C",
+"g c #F8F8A0A05050",
+"h c #6C6C34342C2C",
+"j c #F8F87C7C2828",
+"k c #202018180C0C",
+"l c #484858582424",
+"z c #A4A488882020",
+"x c #F8F8B4B48080",
+"c c #F8F870705050",
+"v c #F8F894946464",
+"b c #F8F890907878",
+"n c #D8D884842020",
+"m c #F8F888884848",
+"M c #F8F878784848",
+"N c #A4A498984848",
+"B c #F8F8BCBC6464",
+"V c #F8F898984848",
+"C c #F8F878785050",
+"Z c #A4A4ACAC5050",
+"A c #F8F898988888",
+"S c #7C7C2C2C4444",
+"D c #F8F888885050",
+"F c #A8A898988888",
+"G c #181818180C0C",
+"H c #F8F878785858",
+"J c #F8F868685050",
+"K c #181844440C0C",
+"L c #F8F890905050",
+"P c #28280C0C0C0C",
+"I c #F8F894943030",
+"U c #F8F8A0A04848",
+"Y c #C8C85C5C2C2C",
+"T c #101008080808",
+"R c #1C1C50503434",
+"E c #F8F890907070",
+"W c #101010101414",
+"Q c #D0D044445050",
+"! c #181814142424",
+"~ c #F8F848485C5C",
+"^ c #707078784444",
+"/ c #080840400C0C",
+"( c #48483C3C3434",
+") c #383888883030",
+"_ c #787890903434",
+"` c #2C2C78781C1C",
+"' c #F8F898985050",
+"] c #181810100404",
+"[ c #F8F8A8A83030",
+"{ c #606088886C6C",
+"} c #D8D8ACAC4C4C",
+"| c #F8F870704848",
+" . c #343478786C6C",
+".. c #F8F8ACAC6464",
+"X. c #5454C4C46C6C",
+"o. c #3838C4C43030",
+"O. c #303078784848",
+"+. c #181804040000",
+"@. c #F8F8A0A06060",
+"#. c #4C4C58584444",
+"$. c #848440405050",
+"%. c #A4A4DCDC5050",
+"&. c #ECECE4E47474",
+"*. c #F8F8F8F89090",
+"=. c #F8F8F8F8B4B4",
+"-. c #F8F8F8F8D0D0",
+";. c #F8F8F8F8ECEC",
+":. c #D4D4ECEC7474",
+">. c #7878CCCC3434",
+",. c #F8F8C8C86060",
+"<. c #7C7C58584444",
+"1. c #F8F880805858",
+"2. c #F8F8E0E03030",
+"3. c #F8F8F8F88888",
+"4. c #F8F8F8F8F8F8",
+"5. c #DCDCECECA8A8",
+"6. c #F8F8F8F8A0A0",
+"7. c #F8F8D4D4E0E0",
+"8. c #80804848B0B0",
+"9. c #F8F898987474",
+"0. c #8C8C44445858",
+"q. c #DCDC80806464",
+"w. c #A4A4ACAC2C2C",
+"e. c #ECECECECE8E8",
+"r. c #E4E4ECEC5050",
+"t. c #F8F8F8F89898",
+"y. c #DCDCA4A48888",
+"u. c #303040405050",
+"i. c #F8F868685858",
+"p. c #DCDCA4A4C8C8",
+"a. c #F8F8ACACD8D8",
+"s. c #A8A8C0C06C6C",
+"d. c #343424244444",
+"f. c #F8F8A8A85050",
+"g. c #ECECF4F47474",
+"h. c #383840405858",
+"j. c #D4D4ECECE8E8",
+"k. c #A4A4B8B83838",
+"l. c #F8F8F0F08484",
+"z. c #F8F8B0B05050",
+"x. c #A8A8E0E0D8D8",
+"c. c #F8F8F8F88080",
+"v. c #F8F8D0D0A4A4",
+"b. c #F8F890904848",
+"n. c #F8F888885858",
+"m. c #DCDC98987474",
+"M. c #F8F89898A8A8",
+"N. c #CCCC4C4CB0B0",
+"B. c #F8F868689090",
+"V. c #707078786C6C",
+"C. c #181810101818",
+"Z. c #A4A4DCDC2C2C",
+"A. c #F8F87070C8C8",
+"S. c #E8E8ACAC4C4C",
+"D. c #A8A8E0E09898",
+"F. c #C8C8D0D05050",
+"G. c #D8D8E0E02828",
+"H. c #F8F8F8F85858",
+"J. c #F8F8F8F86060",
+"K. c #F8F8F8F86868",
+"L. c #D0D0E8E86464",
+"P. c #BCBCE0E06C6C",
+"I. c #DCDCD0D07474",
+"U. c #A8A89898C8C8",
+"Y. c #F8F8F8F87070",
+"T. c #CCCCCCCC6464",
+"R. c #F8F8D4D4BCBC",
+"E. c #C8C8E8E85050",
+"W. c #585884848080",
+"Q. c #C8C8C4C45050",
+"!. c #A8A884846C6C",
+"~. c #30303838ACAC",
+"^. c #F8F868682C2C",
+"/. c #181810101010",
+"(. c #F8F8C8C85050",
+"). c #F8F8E4E45858",
+"_. c #F8F8A8A84848",
+"`. c #F8F8D8D85858",
+"'. c #A8A844446060",
+"]. c #F8F8F8F87878",
+"[. c #F8F8F0F06868",
+"{. c #F8F8E8E85050",
+"}. c #F8F8B0B04848",
+"|. c #D8D8ACAC2828",
+" X c #F8F8C0C05050",
+".X c #F8F8C0C03434",
+"XX c #E8E8F0F06464",
+"oX c #F8F8D0D05050",
+"OX c #F8F878786060",
+"+X c #202008081414",
+"@X c #A0A0E0E06C6C",
+"#X c #E4E4D8D85050",
+"$X c #E4E4D0D05050",
+"%X c #E4E4C4C45050",
+"&X c #F8F8E8E86464",
+"*X c #F8F8B8B85050",
+"=X c #080808080000",
+"-X c #F8F880806060",
+";X c #040410101010",
+":X c #F8F8C0C05858",
+">X c #101010100808",
+",X c #F8F8D4D46464",
+"<X c #A8A8ACAC6C6C",
+"1X c #6464CCCC8888",
+"2X c #E8E8E0E06464",
+"3X c #C8C8B4B44C4C",
+"4X c #F8F8F0F07070",
+"5X c #F8F86C6C8888",
+"6X c #50508484C0C0",
+"7X c #DCDCACAC6464",
+"8X c #F8F870705858",
+"9X c #F8F8B8B85858",
+"0X c #F8F8D0D05858",
+" . ",
+" X o O + + + @ ",
+" @ # $ % & * = - ",
+" @ $ = * ; : = > O , < ",
+" 1 2 * 3 : : : & 4 & = 4 ",
+" o 5 ; : 6 7 8 > 9 0 * = 4 q ",
+" w e : r t : 8 w y e ; 8 * u ",
+" $ $ : : t 2 8 ; u - % * 8 ; i p ",
+" 1 % ; 6 2 6 8 = a s d 1 5 & ; * - f g ",
+" h ; ; : 7 6 * - j @ + = k ; l z x ",
+" , * ; : t l 8 * 4 j c O e ; ; * i v b ",
+" O k ; 6 : : 8 h n m M 1 % * 6 : = N B ",
+" + * 6 : r 8 3 4 V C 1 + ; ; : 2 ; Z A ",
+" S 0 ; : 6 7 e k 4 D M @ & ; r 3 = : F ",
+" # % * : t : : 8 G 4 H m J $ G K : k * z L ",
+" M - P ; r : r 8 3 ; u D c + e K 6 * = - u L ",
+" # 5 G ; ; : 8 3 ; 4 z . + e ; 6 8 e > 4 C ",
+" 4 = k K 8 r r k r n C , * G 6 6 k ; I U ",
+" + = k ; r ; ; k 2 Y o O T ; 6 r k R E ",
+" 1 $ k ; ; ; ; * * z j d + & k K : 8 W R C ",
+" C Y > : r * ; * = 5 j Q $ 0 ; : : ! ; 4 d ",
+" O 1 ~ C 1 Y 4 8 8 * k ; k 5 j % = ; : t 2 G l n ",
+" + + $ 5 8 8 e 5 % h - ^ 7 R ; k ; : r - j 4 & G / r r * ; Y j ",
+" # ( 2 2 - i l : ; * = 2 ) _ ` t : 6 ` l a ' + ] G r : ; G 4 [ ",
+" p 4 z Y ^ _ _ _ a ; * r { ) _ ) ) ) _ ) Z } s s | | $ G ; r r e ; I ",
+" m | C u 7 { ) _ { ` e * ) _ { _ ) _ { _ { ^ .a ^ ^ * G * R 3 G K .. ",
+" D M | z N ) _ _ X._ .> * ) _ ) { _ ) o._ ) a O.^ .a 6 K ; ; ; +.; @. ",
+" M ~ w ( #.- ( ^ _ ) _ ) > 6 { ) _ ) _ { _ ) #.#.( 2 2 7 ` ` : 6 ; G ; X ",
+" 1 4 $ 5 8 8 8 * r #.{ a { ) ) o._ { ) { ) ) i 8 e ; * 3 ; ^ ) ) ) a l a g c O ",
+" o Q $.h 2 l : a Z _ a K ; : 7 ` i _ _ _ { ) X._ _ #.7 6 : K ; * G t ) { ) _ _ N .. S e e 4 ",
+" C + $ : z %.&.*.=.-.;.;.=.:.Z : 8 7 O.) _ { >._ _ ) X.) _ ) _ { ) ` k r a ) _ { ) { | ,.<.3 P * #. ",
+" 1.# % * _ 2.3.4.4.4.4.4.4.4.;.5.( 8 ` ) ) X.o.Z { >._ _ _ { _ { o._ t = r { ) ^ ) _ ) # B Y e k = 7 ",
+" ' | 5 ; ) 6.-.4.4.4.4.7.4.4.4.4.4.8.; l #._ _ _ { ) _ { ) { o._ ) _ { l ; 6 _ ) { ) { _ _ 9.0.8 ; G ",
+" q.# # * w.5.;.4.4.4.4.4.e.4.4.4.4.-.p k t ) { { { o.^ 7 O.{ _ ) _ { ) a r ; ) ) { ) _ { ) X.U 1 Y 2 r 8 : ",
+" q.+ 5 l r.-.4.4.4.4.4.4.4.4.4.4.4.4.x ; : _ ) _ l 7 8 8 ; 2 7 a O._ ) #.; ; ) _ ) _ { o._ ^ N u 1.# & ; 6 8 ; ",
+" 4 > { t.;.4.4.4.4.4.4.4.4.4.4.4.4.;.y.8 r t l : r : 8 ; 8 K : u.l 7 ) 7 6 ) ) _ { ) _ #.7 ) { a Y i.m @ + % = K ` i G ` ",
+" # - _ 5.4.4.4.4.4.4.4.4.7.p.a.4.4.4.e.v ; : 7 7 _ Z s.s.s.w._ #.8 ; t ` ^ ) _ { o._ { ) ; 3 5 5 d.h + + $ ; : ) a i 5 ; [ ",
+" f.4 * ` 5.4.4.4.4.4.4.4.e.8.$ 5 s.;.4.;.A 8 ` _ %.g.=.4.4.4.-.-.*.^ = ; l ._ ) X._ X.) _ 6 ; G G ; = ; * K ` _ _ _ h.8 a ",
+" B 4 0 t 5.4.4.4.4.4.4.4.j.8.= u.X.=.4.7.8.* k.:.3.-.;.4.4.4.4.4.4.l.r ; : l ) _ { >._ _ X._ ` ` ` : ` : ) ) _ _ { - e 6 ",
+" L X f.m z.# > { x.;.4.4.4.4.4.4.x.5 8 _ 5.;.4.8.S a c.t.;.4.4.4.4.4.4.4.;.v.l r 6 ) _ { >._ { o._ ) _ ) _ ) _ ) _ _ { 7 % * ; ) ",
+" L b.D n.m H n.C L X 1 d o + + + + + $ + + L @.L D 4 > 8 F 4.4.4.4.4.4.4.4.x.z c.;.;.8.5 R m.M.N.7.4.4.7.4.4.4.4.4.-.{ 8 r #.{ ) { X._ _ X._ X._ { o.i #.2 2 e e = ; l I ",
+" D D J . Y @ Y # w Q # # # w # @ + # + h - 2 5 2 > 8 ; * * 5 * % 5 + + # @ C u 5 G 3 7.4.4.4.4.4.4.4.4.*.-.7.B.8 ; { ^ S d.F 4.4.4.4.4.4.4.4.;.V.3 : ) _ ) _ o._ X._ X._ ) _ { R 8 C.! k ; i a n ",
+" . @ + + @ + h 2 % 5 8 * 5 8 * 2 > 2 l l l i ) z w.k.z Z.>.k.z ) ) ) l * * * * 5 % 5 i 2 ; d.S A.a.4.4.4.4.4.4.a.N.S % 3 Z S.h.3 3 D.4.4.4.4.4.4.4.4.-.h.; ` ` { _ { _ X._ _ _ { o.{ ) ` ; ; G k > Z U ",
+" | 1 @ + * * 8 l _ k.F.Z.F.f G.Z.G.G.r.r.r.H.H.H.H.H.H.H.H.H.H.H.H.J.H.H.H.H.2.Z.o.>.) : = * i l 2 3 * 8 % S % 8.N.S S 3 R 8 G t K.{ : 6 D.4.4.7.4.4.4.4.e.M.d.6 a { ) ) _ X._ _ { ) 7 - ) _ _ ) _ 6 ; = 4 c ",
+" D @ + + - - a w._ >.f H.H.H.H.H.H.J.K.J.H.H.H.J.J.J.J.H.H.H.H.H.H.J.J.J.K.J.H.H.H.J.H.H.H.2.>.a l a a a 6 : : 3 3 8 % 8 d.; 6 ` : k N 5.L.P.I.j.4.4.4.4.4.4.4.U.0.r ) ) ) _ { ) _ 7 2 : d.8 8 ) { ) _ ) a 6 = - Q ",
+" m 1 # 5 8 2 a a %.H.2.K.J.J.K.J.J.J.K.J.J.J.H.J.K.K.K.Y.J.J.J.H.H.H.H.H.J.H.K.K.J.J.K.H.H.H.H.H.H.%._ w._ { ) ) 7 ; : * ; 6 6 ) ` 7 t ; * T.4.;.;.4.4.4.4.4.4.4.4.R.h.t a { _ ) ) X.a ( % k e W 6 ) _ ) _ { ) i * & h ",
+" | Y w - l a k.E.H.H.J.K.K.K.J.K.J.K.J.K.K.K.K.H.J.J.K.K.K.K.J.J.J.H.H.H.J.H.H.H.J.H.J.J.H.H.H.H.H.H.G.%.%.k.o._ _ ) ` ` ) ` ) ) _ ) ) l ; 8 W.4.4.4.4.4.4.4.4.4.e.e.F #.l ) _ { ) >._ { l > G G ; ` _ _ { ) ) _ t ; > 5 ",
+" j - 5 7 f 2.H.H.J.J.J.J.K.K.K.J.K.Y.Y.K.J.K.K.J.J.H.J.J.K.K.K.K.J.J.H.J.J.H.H.H.H.H.J.J.H.H.H.H.H.H.r.Q.Z.%.F.k.>.{ >.>._ { >.X.>.X.k._ ) l ; t 4.4.4.4.4.4.4.-.e.M.!.~.l ) _ ) ) _ _ X.) ) l 7 G ; _ ) { ) _ ) ) l l * % ^. ",
+" f.M # w i _ 2.J.H.H.H.K.J.K.K.K.Y.Y.Y.Y.Y.K.K.K.Y.K.K.K.J.J.J.K.K.K.Y.K.K.J.J.J.H.H.H.J.H.J.J.J.J.H.H.H.r.E.%.%.k.%.%.%.%.%.%.%.%.>.w.>.k.o._ ) l 6 3 0.j.;.4.4.4.a.v.N.0.( : ) _ ) { ) _ { ) _ _ _ O.; ; O._ ) _ ) _ ) ) 7 = /._ ",
+" Y h - ` (.H.H.J.K.Y.J.)._.`.K.K.Y.Y.Y.Y.Y.K.Y.Y.Y.K.K.K.K.K.K.J.J.K.K.Y.Y.Y.K.J.J.J.H.H.J.H.J.H.H.H.H.H.H.E.G.E.%.%.%.%.Z.F.%.>.k.X.Z >.Z X._ { ` : 8 e S u 8.q.8.'.0.- ( r O.) { ) _ ) _ o._ { ) _ l G / ) _ X.) _ { _ 7 : 8 ; n ",
+" < h - w.E.J.J.J.K.K.K.`.Y h 4 H.K.Y.K.Y.Y.Y.Y.Y.Y.].Y.K.K.K.J.J.J.J.J.J.K.K.Y.J.K.J.K.K.J.J.H.J.H.H.H.H.H.H.r.E.%.%.Z.%.Z.%.k.>.s.>.>.Z >.>.k.>._ ) t r 3 ; % d.d.8 3 d.; R ` ) _ ) _ { ) _ ) _ { >.a R G 6 { ) _ { ) _ ) ) ( 0 l [ ",
+" + * i 2.H.H.J.J.J.[.{.f.Y l : h n Y.Y.Y.Y.Y.K.K.K.K.Y.K.H.K.J.K.K.J.J.K.J.J.K.J.J.K.J.J.J.H.J.J.J.H.H.H.H.H.H.r.r.E.%.%.%.%.%.%.>.>.Z X.>.s.k.>.s.>.) ) l ` K K 6 K K 6 ` ` ) _ { ) _ { ) _ X.) _ ) ) 2 k / ) _ _ { ) ) ) ) ( ! 4 }. ",
+" # 5 l k.H.H.K.J.J.H.V M p w.k._ > u H.].].Y.K.K.J.H.J.Y.K.H.H.J.K.H.J.J.J.J.J.K.K.H.J.H.J.H.H.H.H.H.H.H.H.H.H.H.r.r.r.%.%.%.%.E.%.Z >.k.>.N X.>.Z >.Z >.) ) ) ` t t 6 ` ` 7 ) { _ ) _ ) o._ ) _ ) { _ .5 ] 6 _ ) { o._ ) ^ #.r C.4 V ",
+" O + l Z.H.J.H.J.J.H.}.5 a 2.H.H.2.4 n H.Y.Y.K.J.H.}.o ^.' H.H.H.J.H.K.J.J.J.J.K.J.K.J.J.H.H.H.H.H.H.H.H.{.H.G.H.r.E.E.r.E.E.%.Z.%.%.k.s.%.X.w.>.Z X.w.X.k._ { _ ) ) ) ) ) ) _ ) ) o._ X._ _ ) _ ) _ X.) > & G 6 ) _ ) _ { ) ` : ! ; z ",
+" 5 - k.H.J.K.J.J.J.H.n 8 k.2.H.H.{.Y n J.Y.Y.J.).Y + * & h z J.J.H.H.H.H.J.J.J.J.H.J.H.H.H.H.H.2.H.H.2.H.G.E.r.E.E.G.E.G.%.Z.%.%.>.k.>.Z _ >.>.k.X._ >.Z X._ >.) _ o._ ) _ { o._ { _ ) _ ) _ X._ { ) ) l e k 6 ) ) _ ) ) ) a h.e * a ",
+" S 8 4 r.H.J.J.K.K.J.H.a > G.H.K.J.} + z K.].Y.J.^.8 ; r ; * ) E.H.J.J.H.J.H.H.J.H.J.H.H.H.H.2.H.2.r.H.2.r.E.E.E.G.%.%.%.Z.k.%.k.%.k.X._ >.>.Z X.w.k._ >.k.o._ _ X._ _ >._ ) >._ { o._ ) { ) _ ) ) _ ) a 3 k / a _ ) ) _ ) { : 3 = i ",
+" * : %.H.J.J.J.J.J.J.H.u 5 |.H.J.H.Y > z J.Y.K. Xh : Z.G.a l z H.H.H.J.J.J.H.H.J.J.J.J.H.H.H.2.H.H.2.E.r.H.G.E.E.%.%.k.k.%.%.>.%.%.>.>.>.Z { >.w.X.>._ >._ >._ X._ _ o._ _ X._ { o._ _ { ) >.{ _ { ) - e ; K O.) ) _ { { l ; * C.l ",
+" * l %.H.J.H.J.H.J.J.H.|.k i .Xr.H.Z & n H.K.J.p * f H..X2 4 G.H.H.J.J.H.J.H.H.H.J.J.J.H.H.H.H.2.H.H.2.r.2.P.Z.P.Z.Z.%.%.k.%.%.>.s.%.k.>.>.>.>.Z _ X.>.X.Z _ _ _ ) k._ { ) _ ) o._ ) { ) >.) _ ) _ 7 8 k G ` ) _ { ) ) ` 2 = G ; ",
+" = _ G.H.Y.J.J.K.J.K.K.H..X* Z.G.XXg.G.G.2.J.H.H.2 t H.oXI : z H.H.H.H.K.J.J.J.H.H.H.J.H.H.H.2.H.r.2.H.r.r.H.2.E.G.r.E.Z.%.%.k.%.%.>.%.k.X.Z k.{ >.>.k._ >.>.X._ >._ X.) >._ X._ _ _ _ ) >._ { o._ t * G K ` ) _ ) ) a #.% e G ; a ",
+" = ) G.H.K.J.K.H.J.J.J.J.H.Z.2.H.K.K.K.H.J.J.OXH.i 8 {.H.Y ; 4 H.H.J.H.B K.J.H.J.J.J.J.H.H.H.H.H.oXH.2.H.2.H.r.H.r.E.E.%.F.u F.%.%.k.>.s.k.>.k.%.Z X._ %.>.k.X._ o._ _ _ { o._ ) X.) { o.Z X.) _ - * G / ) ) ^ O.{ 7 8 +XC.G i z ",
+" * G.2.K.K.H.J.J.J.J.J.J.H.H.J.K.K.K.K.J.J.K.H.H.l ` {.H.|.l z H.H.H.J.J.J.H.J.H.J.J.J.J.H.H.H.H.H.H.H.r.H.r.H.H.H.r.r.E.Z.%.k.%.%.%.>.k.>.>.Z { >.>.X.Z.>.>.w.X._ { >._ o._ ) _ _ _ o._ _ o.Y 2 8 ; ; 6 ) _ ) ` 7 5 ! C.G 6 n ",
+" h : {.J.K.J.K.K.Y.K.J.K.J.H.J.J.K.K.K.J.K.K.K.J.J.H.H.J.H.{.2.2.H.J.J.J.J.J.J.J.J.H.J.J.H.H.H.H.H.H.H.H.H.H.H.H.2.r.r.G.E.%.Z.%.%.>.k.%.k.>.Z >.>._ >.Z k.>.s.X.w._ >._ X._ _ { ) ) _ { _ #.- k K ; 6 l _ { ) #.& * G 6 a |.U ",
+" e i {.H.K.K.K.K.K.J.K.J.K.J.K.K.Y.K.K.J.K.K.K.Y.K.K.K.J.J.J.J.J.J.J.J.K.K.J.J.J.K.J.K.Y.J.H.H.H.H.H.H.H.H.H.H.H.H.H.H.r.E.%.%.Z.E.F.%.>.s.%.X.w.>.>.>.k.>.@X>.w.>._ _ X._ ) ) o._ ) O.l 7 5 * ; 6 l ) ) _ ` 7 8 = G ; a V ",
+" 8 z H.J.K.K.Y.K.K.K.J.K.K.J.K.K.K.K.K.K.Y.K.J.Y.Y.K.J.K.K.J.J.K.J.J.H.K.J.J.J.K.K.K.K.K.K.J.H.H.H.H.H.H.H.H.H.H.2.r.H.r.r.#XG.%.%.F.Z.k.>.k.>.s.>.Z s.>.s.>.s.Z Z X._ _ o.Z _ _ O.- 5 * ; ; 6 ` a ` _ i 2 5 e C.G ; l ",
+" k Y H.J.Y.].K.K.K.J.K.K.J.J.J.J.K.J.K.K.K.Y.K.Y.Y.K.K.K.J.Y.Y.J.J.K.J.H.K.J.K.K.K.K.K.K.J.J.H.H.H.H.J.H.H.H.H.H.r.H.H.2.E.E.#XE.Z.$X%.%.k.%.Z.k.>.k.>.k.>.Z X.) _ _ _ ) ^ i 7 - 8 ; K 6 ` a ) ) 7 7 r r t k G r ` [ .X ",
+" G z J.K.Y.Y.Y.K.K.Y.K.K.Y.J.J.J.K.Y.K.K.Y.K.].].Y.K.].].K.J.J.].Y.J.J.Y.K.Y.Y.K.K.K.K.K.J.H.J.H.H.J.H.J.H.H.H.H.H.H.H.r.r.E.Z.E.#X%.%.r.>.s.Z.Z s.%.k.%.Z _ >.k.>.) _ a #.5 e 8 ; r ` ) _ ) _ ) 7 : 8 t _ : ; z |. ",
+" k } H.J.K.K.K.Y.K.J.J.J.K.J.J.K.Y.K.K.Y.Y.K.Y.].].Y.Y.Y.Y.K.K.K.J.K.J.J.Y.Y.Y.K.J.J.J.J.J.J.J.J.J.J.J.J.H.H.H.H.H.H.r.r.G.F.E.%.E.k.E.E.Z Z.s.k.Z.X.w._ >.>._ _ ^ i ( 5 3 * ; 6 ` ) _ ) _ { ) ) ( 3 ; a %.z n ",
+" ; .XH.K.K.K.Y.J.K.K.J.J.J.J.J.K.K.K.K.K.].K.Y.].].Y.K.K.K.K.Y.K.K.K.K.K.K.Y.K.Y.K.K.K.K.K.H.H.J.H.J.J.J.J.J.H.H.H.H.H.r.E.Z.%.F.G.%.F.Z.%.k.%.>.Z w.>._ _ _ _ - 2 2 ; r ; 6 l ) _ _ ) _ ) >._ ` 8 ; r 2 w.(. ",
+" e }.H.K.K.K.J.K.J.J.K.J.J.J.K.K.K.K.J.K.Y.].3.].].Y.K.J.K.J.J.K.K.K.J.H.Y.K.J.J.K.K.K.Y.J.J.J.J.H.H.H.H.J.H.H.H.H.H.2.r.E.E.G.k.%.Z.%.#X%.Z.k.k._ i i ^ ^ - $ 3 6 ` l ) _ _ ) ) _ ) _ X._ ) { ` 6 6 ; * w.f. | 1 ~ Y < @ Q O @ V ",
+" 2 = Y H.K.J.K.Y.K.K.J.J.J.K.K.J.K.K.K.Y.Y.].c.Y.3.3.c.].K.K.K.K.J.Y.J.J.H.K.K.K.J.K.K.K.K.K.H.J.H.H.J.J.J.H.K.J.H.H.H.H.r.G.E.E.E.E.E.E.F.z u <.- 2 8 3 * ; 8 ; ` a _ _ Z._ ) _ o._ X.) _ ) _ ) l ` l * l Z.U 1 w & & & * e e = k > !. ",
+" U 4 e 5 p {.K.K.K.K.K.J.K.K.J.K.K.K.K.Y.K.Y.c.].Y.c.c.c.Y.Y.Y.Y.K.K.K.K.J.J.K.J.K.J.J.K.K.K.K.J.J.J.H.K.K.J.J.J.J.J.H.H.H.H.r.E.H.G.|.u u 4 5 5 : ( l l ) a _ ) ) _ _ o._ _ o._ _ _ ) _ _ ) _ { ) 7 7 t * a g Y w + # 5 $ e k ; ; ; ; * ; * i m. ",
+" L c * = - n K.K.Y.K.K.K.J.K.J.J.K.K.K.K.].].].c.c.c.c.c.c.Y.Y.Y.Y.].Y.Y.J.J.K.K.K.J.K.Y.Y.K.K.J.J.J.H.J.K.K.K.K.K.H.H.H.H.H..XY Y u - 5 * * r a _ _ k.Z.G.%.G.r.G.>._ k.{ >.w.>.>.>.>._ ) X.) _ ) l ) l * * 5 % 3 e = k k ; K ; : K : ; k a [ ",
+" }.4 * * 4 Q.K.K.K.J.J.K.J.J.K.Y.K.Y.].K.c.].Y.c.c.].].].].Y.Y.K.Y.Y.K.J.Y.K.].Y.K.Y.Y.Y.K.K.J.K.J.J.J.K.K.K.J.H.H.H.H..XY - 8 8 l 2 l ) G.>.%.P.Z.E.E.%.E.E.%.Z X.>.>._ >.Z X.w.>._ _ _ _ ) o._ ` l 6 * G 3 = ; ; ; ; ; : K : K 6 6 * 2 |. ",
+" j ; > > 4 H.K.Y.K.K.K.K.K.J.K.Y.Y.Y.Y.K.3.].].Y.].].].].Y.K.K.K.J.K.Y.K.K.K.K.K.Y.Y.J.K.Y.J.J.J.J.J.K.K.J.H.).}.j | Y - * * l z Z.G.2.2.E.r.r.r.r.r.E.H.H.2.Z.k.Z >._ X.w._ >.Z X._ ) ) Z _ _ ) ) ( * G ; ; K K ; G K r r ; 6 l l ; a ",
+" b._ 5 * 5 + n [.J.J.J.K.J.K.K.].].K.Y.Y.Y.Y.].c.].Y.Y.Y.Y.Y.J.K.Y.J.J.J.K.K.K.K.K.K.K.K.K.J.J.H.J.H.H.H.oXY 5 5 : l l _ z |.f `.{.H.H.H.r.r.H.H.r.E.E.r.H.r.H.>.>.%.Z.>._ _ >.Z _ ) >._ ) _ 7 7 i t * ; G G r ; ; ; G ; K r R l r 2 ",
+" z - > 0 5 4 s S.%X{.&XH.J.K.K.K.Y.K.Y.].Y.K.K.Y.K.K.K.K.K.J.K.J.J.J.Y.K.K.K.K.K.K.K.H.).*X_.U 9 p 4 # > 2 a Q.} [ 9 u 4 a u z N .X).H.H.H.H.H.2.H.r.H.H.r.E.%.%.E.E.%.%.Z.X.o._ _ X._ X.2 * l : ` K G G ; ; K ; K K r r R 8 8 l ",
+" 9 4 l * > 5 h h @ # | M }.*X).{.J.K.Y.K.K.K.J.K.K.J.J.K.J.J.J.H.J.H.{.H.).`.`.}. X1 @ + 5 - - 7 2 l 4 |.}.s u 0.- l i l a #.i a z %X{.2.{.H.H.H.H.2.H.H.H.r.E.r.H.H.r.G.%.w._ _ _ _ _ l K r t ` l ; G G * G K K K R r ; G ; w. ",
+" .X.Xf z i l > > * * 5 5 $ $ + # M . | m (.).{.J.{.(.oX(.(.b.1 Y # + + + h h $ * > ; l a i N n b.I I 4 Y 7 7 ) ) ) ) _ ) ) ) i a a ^ ^ z N f r.r.H.H.H.2.H.E.E.r.G.E.H.E.Z ) 7 7 >._ _ K ; : ` t : ; =XG ; ; r R r 8 ; l z }. ",
+" .X|.|.i l ; : > > * ; > 5 & 5 5 + # w # # + + + + h * 5 * ; * * * > l 4 z z n n U b.| n p _ _ ) ) ) _ ) _ _ ) _ _ ) ) { ) a a 7 _ _ Z r.H.2.H.r.H.G.H.2.L.E.r.E.w._ 2 t >.>._ r 3 6 7 ) l r G G ; ; ; r R r : I *X ",
+" j 4 n z _ a l r * * * * * * 8 * = * * * * l l a l z z [ 2. XV }.-X1 Y 4 _ _ ^ ) _ _ ) _ ) >._ ) _ ) o._ o.) { ) ) a ^ _ |.#Xr.E.r.H.H.r.H.r.r.E.r.Z ) 5 : Z s._ r ; r ) ) 7 ` K G ;XG ; ; l ( 7 `. ",
+" 4 4 4 4 4 - 2 2 - l l [ .XI V XL d m Y 4 _ ^ _ ) _ ) _ o._ _ ) _ ) _ ) >._ _ _ _ ) _ ) { ) _ _ k.E.H.2.H.H.H.H.H.r.H.r.w._ ( O.w.Z _ r ; 6 ) ) ) 7 ` ; G G k ; ; ; _ ,. ",
+" n q D m j M ^.. a _ _ ) _ ) _ >._ _ _ { o._ X._ ) >._ { ) o._ o._ o._ ) _ ) N k.{.H.H.H.H.H.H.2.r.#X%._ a t N _ ) r ; l ) a { ) 7 r k W G ; * ` r. ",
+" . ^.u Y _ _ _ _ _ _ _ _ _ { _ { ) o._ _ _ ) >._ _ o.w._ _ >._ X._ _ ) _ _ ) _ o.{.2.H.H.H.H.r.F._ %.%.2 7 a _ a 8 ; K ) ) ) ) ) 7 * G G ; K .X H ~ < < @ S. ",
+" g i. # w # h i a _ ) ) _ ) _ _ { o._ o._ o._ _ o._ _ _ _ o._ X._ ) X._ >._ o._ o._ o._ ) _ N N |.{.H.2.r.k.Z.E.E.w.l i >._ ` ; : ) ) a { ) 7 : ; =XG - _. m ' | # + w h & = 5 N ",
+" L c Y h > : l 2 2 l ) a ) _ ) _ _ _ _ ) _ _ _ ) o._ >._ _ ) o._ ) _ k.w._ ) >._ _ _ _ _ _ { >.) _ _ _ ) _ k.#X{.F.%.%.r.r.N - i Z ) 7 r 6 ) { _ ) ) ) l / =XG h Y X o w + & & 0 e e * /.G ; N ",
+" ' @ # # 2 7 _ w.9 f f E.k.k._ ) _ ) a ) { ) _ ) ) ) _ _ _ X._ ) >._ ) _ { ) >.X.w._ >.{ o.o._ o._ o._ X.) X._ _ _ _ N k.E.r.E.k._ a _ _ _ 8 6 l ) _ ) { ) ) l ` G ;XP 4 . Q O '.$ e ! k 3 ; = K r ; k > n ",
+" g n.o 5 * - i Z.G.H. X{.H.H.H.E.E.E.Z.o.>._ _ _ _ _ ) _ _ ) _ ) >._ _ X._ ) >._ _ _ o._ _ o._ _ _ _ _ X._ _ _ _ ) _ ) { i k.r.G.%.E.N 4 N >.a 8 K : { ) _ ) _ ) ) 7 t k G * + % & 5 * G ; ; * K ; r ; * * a 9 ",
+" :X`.Y 0.- l a Z.H.J.K.Y.J.H.H.J.H.H.H.H.H.J.J.H.r.r.E.Z.%._ ) _ ) _ _ _ ) _ o._ ) ) >._ _ X._ _ _ ) _ { o._ _ o._ _ ) _ ) a ) w.%.%.E.Z._ - k.%._ ; 6 ) ) ) _ { ) _ ) _ ) r /.] = k ; ; 6 ; K K K 6 K 8 k ; Y [ ",
+" d ' Y #.i >.G.H.H.J.Y.K.Y.K.H.Y.Y.Y.J.J.J.J.J.J.H.H.H.H.H.H.%.%.>._ _ ) _ _ _ _ o._ X._ _ o._ ) _ { ) >._ _ _ ) _ ) _ { ) _ >.>.%.%.Q.%.N i a Z w.a K l ) ) a ) _ { ) _ O.7 t k ;XG ; ; r r K 6 r R r 8 G : a U ",
+" m @ h 2 i w.H.H.K.J.K.K.K.Y.K.K.K.K.Y.Y.K.J.K.K.J.J.H.J.J.H.H.H.H.H.H.%.>._ ) ) ) _ _ _ _ ) _ _ X._ o._ o._ ) ) o._ _ ) _ ) ) E.E.%.r.E.Z.k.Z #.2 4 k._ R ) _ ) { _ ) ) _ ) ) ) ) r G ;X* ; 6 r ; 6 t l ; * ; z U ",
+" oXs h 2 a Z.P.H.J.K.K.K.Y.].K.Y.K.K.K.K.Y.Y.K.K.J.J.J.H.H.J.H.J.J.J.H.H.H.H.H.%.o.%.>.) _ { ) >.) >._ _ _ ) _ _ _ _ _ ) _ { >.Z.E.G.E.Z.E.k.k.%.%.>.- * <._ 2 ` ^ ) ) ) _ { o.^ ) a 7 ) ; G T ; : r r : r ; = K n ",
+" # # u - l k.r.H.J.Y.Y.Y.K.K.Y.K.K.Y.Y.K.K.Y.K.K.K.J.J.J.J.J.H.H.H.H.H.J.H.J.H.H.H.H.H.H.E.>._ ) _ _ _ o._ o._ >.{ ) o._ { ) ) >.k.{.G.E.%.G.%.E.%.Z.Z k.4 * ) i ; a ) ) ^ { ) ) _ ) { ) t ) : G =Xk ; r ; ; 8 = ; a ",
+" @.1 h 8 * 5 i ) H.H.J.K.J.K.Y.K.K.K.K.Y.Y.Y.J.K.K.K.K.J.J.J.J.H.J.J.J.J.H.J.H.J.H.H.H.H.H.H.H.H.E.>._ ) ) _ _ _ _ X._ _ _ ) _ ) ) o.Z.`.r.%.%X%.k.F.$XF.k.>.k.z * a - r ` a ) _ ) _ ) ^ _ ) 7 ) 7 ` 8 ;XG ; K r 3 k ; ) ",
+" g 1 4 2 l _ k.2.H.J.Y.K.K.K.K.Y.K.K.K.Y.Y.K.Y.K.K.Y.K.K.J.J.J.H.J.H.J.H.H.J.H.H.H.H.H.H.H.H.H.H.H.H.r.>._ _ ) _ { ) _ ) o._ ) _ _ Z.E.G.E.F.k.G.%.%.k.Z.k.k.k.k.4 * l : r ) { ) ) ) ) _ ) { ) ) ` .7 : W G ; ; ; ; a z ",
+" X J 0.h 2 w.2.2.H.H.J.K.K.J.K.J.K.Y.Y.J.K.K.Y.K.J.J.J.Y.K.J.J.H.H.J.J.J.J.H.H.H.H.H.J.J.H.H.H.H.H.H.H.H.H.r.Z.X._ ) _ _ _ _ _ ) _ ) w.%.E.H.2.Z.Z Z k.Z.%.%.k.%.>.s.4 * l 2 : a ) a { _ ) { ) _ ) _ ) ) ) l ; =XG k k r Z f. ",
+" 1 + $ > > ` z } {.H.H.J.J.J.K.K.K.K.Y.K.K.J.K.J.K.K.J.K.J.Y.K.Y.J.J.J.J.H.J.H.H.H.H.H.H.J.J.J.J.H.H.H.H.H.H.H.H.r.G._ ) l ) l ) ) _ ) >.%.r.G.E.E.F.>.>.k.%.F.k.k.k.Z _ & l 4 l : ` ^ { ) _ ) _ ) _ { ) _ { ) ` K ; =XG > p S. ",
+" v < h * : l _ |.).{.J.K.K.J.J.K.K.K.J.K.K.K.K.K.J.K.J.K.K.J.J.Y.].Y.K.K.K.J.J.H.H.J.H.H.J.J.J.J.H.H.H.H.H.H.H.H.H.H.H.H.G.o.Z._ ) a ) _ %.r.r.r.r.G.L.Z.s.k.k.k.%.Z.k.>._ _ & > l l : ) ` ) ^ ) _ { ) 7 ) _ X.) _ 7 ` r G >Xl I ",
+" 1 + 5 : a N Z.%XH.J.Y.Y.J.K.J.K.K.K.K.K.K.K.K.J.K.K.K.Y.K.J.H.J.Y.K.K.K.J.K.J.J.H.H.H.H.H.K.J.J.J.J.J.H.H.H.H.H.H.H.2.H.H.H.J.H.f _ o.%.%.r.H.2.r.G.E.E.F.k.k.>.Z k.>.Z >.Z a & * l l : ) ^ ` { ) _ ` 5 ( r #.a ) ) ^ t t * T l .X ",
+" + h 8 l w.|.N E.H.J.K.K.K.J.K.K.K.K.K.Y.J.J.K.J.J.K.K.K.H.H.J.H.J.J.Y.K.J.J.J.H.H.J.H.J.H.H.H.J.J.J.J.J.H.H.H.H.H.2.H.H.H.H.H.H.H.{.>.|.E.H.H.r.E.%.%.H.Z.G.%.k.>.>.%.>.k.Z Z _ a ] * > 8 7 ) i ) ) #.: 3 ; ; ; t ^ 7 ) l t K P & Y ",
+" + % * ) Z.[ u z L.J.K.K.K.K.J.K.K.J.K.K.J.Y.K.K.J.J.H.J.K.H.J.J.J.J.Y.J.J.H.H.H.J.J.J.H.H.H.J.H.J.J.J.J.J.H.H.H.H.H.H.H.H.H.H.H.H.H.%XZ.E.r.H.2.H.2.E.G.#X%.#XZ.>.F.G.%.F.%.w.>._ a G ; : ; a .a ) _ O.8 ; K ; ; ; t a O.` l 6 k 0 5 p ",
+" | 5 8 : k.2.(.I %XH.H.J.{.,X).{.&XH.H.H.H.H.J.H.J.J.J.J.J.J.H.J.K.J.H.H.K.K.K.J.J.J.H.H.H.H.H.J.H.H.J.J.H.J.H.J.H.H.H.H.H.H.2.H.H.H.{.G.Z {.r.r.H.r.r.E.Z.k.k.%.k.k.%.Q.s.k.k.k.Z X.k.4 * K * K ` ` 7 ) a t r K ; ; * ; ` ` 7 ` 7 t k =X= h O S + + $ $ & & & & % ",
+" M w 8 _ Z.r.H.%X|.S.Q.9 9 N u Y N u N 9 } 9 V S.%XoX`.oXS.*X(.(.%X*XS. X`.).).{.{.H.H.J.H.H.J.H.H.H.H.J.H.J.H.H.H.H.H.H.H.H.H.H.H.H.2.E.f E.H.2.r.r.G.E.Z.E.%.k.%.k.k.Q.Z.G.k.%.k.w._ w.a G : r r 7 7 ) 7 ) : ; ; K 6 / ; l ) 7 ) l ` k =X] e 8 5 8 ; * ; * ; * K ; = e e & 4 ",
+" C + % 4 2.H.H._.u z _ _ _ a _ _ ) _ _ _ _ _ _ _ a { _ N z ^ a ^ _ a #.a a <.z <.z u p |._.`.).H.H.H.H.H.J.H.H.J.H.H.H.H.H.H.H.H.H.{.{.oXE.F.H.H.H.H.H.E.Z.E.k.F.Z.k.k.>.Z w.k.>.Z >.k.X._ > k : > 8 ` 7 ) 7 .: ; K K ; ; ; ` ) ) ) a R ; G =X; r 6 t : 6 6 6 : 6 6 : t : * ; a ",
+" ~ > e ) H.H.H.9 a _ _ _ _ _ _ X._ _ { ) o._ _ o._ { ) _ _ ) ) { ) ) ) _ { ) ) ) a O.) i a 7 a u w.U .X).H.H.H.H.H.H.H.H.H.H.H.H.H.2.f w.N 2.r.H.2.H.H.2.r.E.F.Z.k.k.>.Q.w.>.>.Z X.w._ _ w._ 5 G : 8 ; l ` ` ) l t * ; ; ; K 6 a { a .l ` : 6 G k R : ` t 6 l 6 t ` : t l ; G K |. ",
+" # $ * ) G.J.H.9 z _ X.o.k.{ o._ _ X.>.>.>._ _ { >.o._ >.) { ) _ ) _ X._ o.) _ _ ) _ _ ) _ ) ) _ ) i a a z S.).{.H.H.H.H.H.H.H.H.H.H.Q.w.>.r.r.H.H.H.r.r.r.G.E.Z.%.%.k.k.w.>.Z >.Z _ >.X._ o._ 5 G 6 : K t l O.i ) ` 6 K K K ` ) ` ` a ) ` 7 t : ; ] 3 6 t l : 6 : : 6 t : = * ; z ",
+" S * r z 2.J.J.(.^ a _ w._ >._ _ X._ _ >._ _ >._ o._ X._ _ ) o._ o._ _ ) _ ) _ o._ o._ X._ ) _ ) ) _ ) ) _ ) z ^ n } H.H.H.H.H.H.H.H..Xf F.H.H.E.H.H.H.2.H.r.%.%.k.Z k.w._ >._ >._ X.) w._ w._ a 5 G r * 6 ` l ) ` ) ) ) ` ` ) ) a .) ) ) O.` : ; G G G r : 6 6 t 6 t : 8 ; k a n ",
+" + * : o.{.H.J.*Xu ^ _ X.>.X._ >.X._ >._ >.{ X._ { o._ w._ _ ) _ _ _ _ ) >.) _ o._ ) _ ) ) _ o._ _ _ ) _ ) _ ) { ) i i n H.H.H.H.H.2.r.%.r.r.r.2.r.H.2.G.P.G.E.E.k.k.>.>.>.s.>._ Z _ Z.k.>._ _ ) _ > G K * 3 l ) i ) a ) a ) ` a O.) a ) ^ a #.7 ( ; ; =XW ; 6 6 : ` t ` r = G l Z. ",
+" < h a k.r.H.J.)._ _ ) _ >.Z _ X._ w._ >._ X.) >._ >._ _ ) >._ ) _ ) _ ) _ ) _ o._ _ X._ ) _ _ _ ) ) _ ) _ ) _ _ ) a ) a _ 9 .X{.2.H.r.f r.H.2.H.H.r.H.H.H.2.E.E.G.%.w.Z %.Z k.k.>.w.) k._ _ _ o._ { l ] : ; G l ` 7 ) a .a ) ^ O.) ) ^ ) 7 t l r r ; ; G =XG K t 6 : t : 8 G r z ",
+" < h l n H.H.H.J.*X^ _ >.X._ >.X.w.) o.>._ ) >.w._ >.) o.Z X._ o._ o._ { o._ ) ) _ _ _ ) _ o._ O.o._ ) o._ _ _ ) _ ) _ ) ) _ _ a N {.{.|.F.r.H.H.H.H.2.H.2.E.H.r.Z.k.%.>.>.>.>.k.>.X.w.>.>._ >._ _ _ a > ] 6 > ; ` ` ) 7 ) ` O.a { ) _ ) ) _ l ; ; 6 K K ; G =X;XK t ` : : 8 ! i [ ",
+" # - : %.H.H.J.H.F.9 _ o.N _ X._ w._ >.Z X.>.w._ X._ ) >._ ) _ _ ) >._ ) _ ) _ >._ { o._ X._ ) X._ _ ) _ _ ) ) _ ) ) _ ) ) _ ) _ { _ |.k.F.2.H.2.H.2.r.r.E.E.r.E.#X%.%.Z.%.k.X.k.>.k.w.>.Z Z >._ X._ ) a 5 G : 2 G ` #.) a ) a .` ) a ) ) a 7 : ; K r 6 K ; G G =X; ` : 8 ! G l ",
+" *X+ a Z.XXJ.J.J.J.Z _ _ _ X.w._ ) >._ X._ _ _ >._ _ _ X._ >.>.{ >._ _ { ) ) _ ) _ ) >._ o._ _ _ _ o._ X.) _ X._ ) _ ) _ ) _ _ ) ) _ _ >.w.E.H.r.r.r.r.r.r.G.E.Z.%.Z.F.Z.%.k.>.%.Z.%.>.Z >.w._ >._ >._ ) l 0 G l : ; ` ^ ) ) 7 ) 7 a ) ) { l 7 R ; 6 6 r ; K ; G =X/ 6 : 3 ! K a ",
+" Q $ z H.K.Y.K.J.%X_ _ { >._ ) Z.X.w._ _ o.>._ { >.o._ o.Z _ X._ ) ) o._ ) _ _ ) ) X.) o._ _ ) o._ _ ) _ _ ) ) _ >._ ) ) _ o._ ) _ ) o.k.E.H.r.E.r.2.r.H.G.%.E.G.E.%.%.%.k.>.k.k.k.Z w.X.w.X._ Z _ _ _ _ ) > G l l G r l l a O.) ) 7 ) a ) a R 3 K r r ; R r K G ;X=X; ! k K Y ",
+" 0.$ _ 2.J.K.].H.{.N _ _ >._ >.>._ _ o._ o._ _ X._ _ _ X._ _ ) _ o._ >._ _ ) ) _ ) _ _ _ _ _ ) _ _ ) o._ ) o._ >.) _ o._ _ o._ _ o._ _ >.2.H.2.r.r.r.2.r.G.r.E.E.%.Q.Z.k.k.%.k.k.%.k.X.k._ >.w.>._ >._ ) _ l > K ` l =X6 l ) t ` 7 ) ) ) .7 t r K K R 6 K ; ; K G G ;X; ; a z ",
+" - 5 4 H.H.J.Y.K.H._ ) >.k.X.w.>._ _ _ { >._ X._ _ o._ >._ X.) _ _ ) _ { o._ ) _ ) ) o._ o.o._ X._ X._ ) _ _ ) _ ) _ { ) _ _ { ) _ ) o.oXH.H.H.2.H.r.r.r.E.r.r.#Xk.%.F.%.k.%.Z o._ X.z >.>.k.>.k.w.X._ _ ) ^ * K ) i G : 6 ` l ) a ) { ` _ ` l ; K ; 6 ; : r r R G =X=X=Xl .X ",
+" p d.* Z.H.Y.K.Y.J.oX_ _ { >._ >._ >.{ o.>._ X._ >._ _ X._ ) w._ o._ ) ) _ _ o._ ) ) _ _ o._ _ _ ) _ ) _ o._ ) X._ o._ _ ) >.) >.o._ _ >.H.H.H.H.H.G.r.G.P.E.E.G.%.k.%.%.k.k.>.Z Z _ _ >.w._ >.Z w._ _ _ _ o.7 > 2 a l ; K l l ) a O.) a ) ) #.6 r K r r r ; ; K ; ; =X>XG z ",
+" h 5 l P.J.Y.K.K.H.} _ >.>._ k._ X.w.>._ >.k._ o._ ) o._ _ o.X._ _ ) _ _ ) _ _ o._ _ ) _ _ _ X.a ) _ ) >.k.X._ ) _ _ ) >._ ) >._ _ _ X.Z.H.H.H.2.r.r.E.G.%.E.E.Z.%.Z.%.k.>.k.>.>._ >._ _ _ X._ k.X.w.) _ ) _ 7 * ; ) i G ; ` l ` 7 ) ) ) ^ .l 6 r ; ; ; ; 6 ; ; ; K G >XG }. ",
+" e 2 Z.H.Y.K.J.K.H.w._ _ Z >.X._ >._ ) X._ X._ _ >._ X._ ) >._ _ o._ o._ ) ) _ ) { ) o.) { o._ ) _ { o._ _ _ o._ o._ ) _ o._ _ ) ) _ Z.r.H.H.2.H.H.r.H.r.r.2.E.E.k.>.k.%.w.>.Z k.>._ o._ _ _ _ >._ _ _ ) _ ) i 5 * _ ) G G K t l ) ^ _ { _ ` t 8 K ; K r ; r r ; ; K r G ; X ",
+" 1 ; 4 G.Y.Y.J.J.H.S._ _ >.X._ _ >._ _ X._ _ _ >.o.w._ >.o.k._ o._ ) _ _ o._ _ ) _ ) _ _ >.) _ ) _ ` ) o._ { o._ o._ ) _ _ { ) _ _ { Z.r.H.H.H.H.r.r.2.r.G.E.%.Z.E.%.k.>.Z >.Z k.X._ k._ _ ) o.w._ _ ) o._ ) _ ` * G ) _ 6 ; ; 6 ) a ` ) ) ) a r ; ; ; r ; 6 ; K ; ; K ; k ; }. ",
+" 4 * G.r.K.K.Y.H.Q.a _ X._ w.o.w.X._ o._ >.o._ _ >._ { _ _ X.w._ o._ _ _ _ { ) o._ _ ) >._ _ ) _ o.X._ _ ) _ >._ _ X._ ) ) _ _ ) ) o.r.H.H.H.2.H.r.E.E.G.%.E.%.E.G.E.%.%.k.>.>.Z ) w.X._ ) X._ _ _ _ _ _ _ _ _ .> = _ _ ) ; G * t l ) { a { ) ; ; ; ; K 6 r ; ; * / ; ; /.3 }. ",
+" M $ : G.J.Y.K.J.H.F._ Z >.X._ X.k.o.w.>._ _ _ >.X._ >._ _ _ _ >._ _ { o.) o._ o._ ) _ _ { ) ) _ X._ _ o._ >.) >.X._ >._ _ o._ ) _ _ ) H.H.H.H.H.r.2.E.Z.r.E.%.Z.).F.Z.>.k.k.k.Z k.>._ _ >._ _ a ) ) _ ) _ ) { ) - & * ) { ) : ;Xk = : ) a O.) O.l ; K K ; K r ; K K ; ; ; ] G @ M ",
+" @ 5 4 2.K.Y.Y.J.H.Q.k.>.Z w._ >._ Z._ >.X.) >._ >._ >._ o._ >.{ >.X._ ) >.X.) w.) _ ) o.) ) ) _ _ o._ X._ o._ _ o.w._ ) _ _ _ ) ) X.) H.H.H.H.2.H.r.r.r.E.E.E.r.k.k.%.k.k.k.>.k.>.k.o._ _ ) ) _ _ ) ) _ ) _ ) l * * K ) o.w.R ; G G 3 7 O.^ ) a R ; ; / ; K ; 6 K ; ; * G G =X5 + Y U _. ",
+" h * .XH.K.Y.Y.J.r.k.Z.k._ >.X._ >.k.X.w.>.k._ o._ X._ >._ X.w.>._ >.o.w._ k._ o._ ) _ _ o._ >.) _ _ o._ _ _ _ _ _ { o._ X.) _ _ ) Z.E.H.H.H.H.H.H.2.r.r.2.Z.%.k.>.>.Z >.Z k.X.w._ >._ X._ ) _ ) _ _ ) ) _ 8 * k G ; : _ ^ { _ t G G G 3 l ) ) O.6 ; ; K r 6 K ; K ; / ; G =XT +.+.+Xe e e P & & $ w @ ",
+" p 5 r J.Y.K.Y.K.J.r.Q.E.k._ Z.Z.>.>.k._ _ X.w._ w._ _ _ _ _ _ >.X._ _ _ X._ ) >._ _ ) _ { o._ _ _ { ) _ _ { ) >.{ o._ _ ) ) _ ) _ { >.r.H.H.H.2.H.H.r.r.G.E.Q.G.k.%.k.k._ >._ _ _ _ _ _ _ _ ) _ ) _ ) _ _ R * G ; : 6 ) ) ) _ _ ` t G =XG 6 ) ) a t K ; K K r r ; ; K ; * / G =X; =XG G G G G G ] = e 5 + ",
+" u * R J.K.Y.].Y.K.#X#XH.H.F.{.H.H.L.P.%.Z.>._ { o._ >.o.o._ ) k.w._ _ _ _ _ o._ { ) { ) _ _ _ ) ) _ o._ ) o.o.w._ _ ) ) >._ o._ ) _ Z.H.H.H.H.H.H.H.2.E.E.Z.s.Z.k.>.>.X.k._ _ ) _ _ X._ >._ ) _ ) _ _ ) 7 ; ; r : : 2 - _ { ) { ( : K G G * l ) ) ) l ; ; ; r ; K ; ; ; G ; G =X; ; ; K ; K K ; ; G k ] ; I ",
+" }.- * O.K.].Y.K.Y.J.H.2.J.H.H.H.K.K.J.J.K.K.XXZ.Z.%.@Xr.H.H.r.H.%.%.o.X.o.>.) _ ) _ _ ) l ` ) a ) _ ` a ) ^ _ a { o._ _ _ _ _ _ ) k.>.E.H.H.H.H.H.H.2.E.E.#XG.%.Z.s.k.k.Z _ X._ ) ) _ ) _ ) ) _ a t ) i 8 * ; : * ; * = ; l 2 ( 7 ( e 3 K ; G ; 2 #.) ` 6 K ; G 3 ; ; * ; G G G =X; G K ; K K ; r ; * ; k 6 (. ",
+" - * ) Y.].].].Y.J.H.H.H.J.J.Y.K.K.Y.Y.K.K.K.K.:.H.H.H.H.J.J.J.J.J.J.H.2.E.P.%.E.%.%.Z.%.Z.%.%.%.>._ ) #.l 7 l a ` _ { ) _ { ) _ _ s.H.H.H.H.H.2.H.H.r.E.%.k.w.>.k.k.>.w._ _ o._ _ ) _ ) _ ) _ ) l l * ; ; * * ; r ; = ; l e e l ` * G G ; ] ] ! r #.) ) : 6 ; K K K / K ; G G =X; ; ; / ; r ; ; k G k r z (. ",
+" 2 * ) Y.Y.K.K.J.K.H.{.H.J.H.J.K.Y.Y.].K.Y.K.Y.J.J.J.K.K.J.K.K.K.Y.K.K.K.Y.H.J.J.J.J.H.H.K.K.H.H.H.r.%.>.) o.) o.#.) _ _ ) a ) ) _ >.2.H.H.H.H.H.E.r.E.G.F.%.>.X.f X.k._ o._ _ _ ) >._ _ ) _ ) _ ` 3 * ; k k K 6 a 6 * * l P G 7 ) ; G ;X] >X>X+X8 ) a ) ) t ` ` ` ` 6 6 K K ;X;XG K ; : K ; k ] G ; K z ",
+" > * >.].Y.Y.Y.].J.H.H.K.J.H.J.Y.].K.K.K.K.Y.Y.J.K.K.K.J.K.K.K.Y.Y.K.K.Y.K.Y.Y.Y.K.J.J.J.J.J.K.J.J.H.r.E.E.Z.E.Z.Z._ o._ ` a ) _ _ %.H.H.H.2.H.H.E.2.E.E.F.k.k.k._ >.k._ _ X._ ) _ _ ) ) ) _ ) _ l k G G ; K ` a ) 2 = ; 2 k ;X8 l : ;XG ; G =X;X; ) { ) ) ` ) ) 7 ) ` ` : ; G G ; G K ; ; k ] k : ",
+" * * >.].Y.K.K.Y.J.H.J.Y.K.K.J.Y.Y.K.J.J.K.Y.Y.K.J.K.K.K.K.Y.].Y.Y.Y.K.K.Y.K.Y.Y.K.K.K.K.K.K.K.J.J.J.H.H.H.H.H.H.J.r.%.%.>.o.^ ) %.E.H.H.H.H.H.2.H.r.r.F.%.Z.>.>.Z _ >.k.o._ _ >.o._ o._ _ ) a ) l ; ; G : l ` 7 ` 8 C.* 3 G G G r R ; G 6 : / * 6 ) a ) a { a ) ) i ` 7 6 ; G G K K ; G ] G ; 4 ",
+" 8 : E.J.J.Y.Y.K.J.H.K.Y.K.J.J.J.Y.K.K.K.K.K.J.J.J.K.J.K.J.K.J.K.K.Y.K.Y.Y.K.K.Y.K.K.K.K.K.K.K.J.J.J.J.H.H.H.H.H.H.H.H.H.H.E.Z.X.G.H.H.H.H.H.H.H.H.H.Z.Z.%.%.k.%.w._ X.w._ >._ ) Z _ _ ) ) a ) ) _ ` ` ` ` l ) a .r P >XG 6 K G G ; ; G K t ` ` l ) a O.) ) ) a ) ` ` 7 6 * G =X; k G G r ) n ",
+" G l 2.K.K.K.K.K.K.J.K.J.K.J.J.J.K.J.K.K.J.J.K.K.J.J.J.K.J.J.K.K.Y.Y.Y.K.Y.Y.Y.K.K.J.J.J.J.K.J.J.K.H.H.H.J.J.H.J.H.H.H.H.H.H.H.r.H.H.H.H.2.H.2.H.2.r.E.k.E.%.Z.s._ >._ _ _ _ >._ o._ ) _ ) ) ^ ) ) a ` i ` ` 7 ` l 7 * ;XK ` ` K ; k ; k ; l t a ` ` .a ) a .) a { ` 7 6 * G G G G K z ",
+" k ) H.H.J.Y.Y.K.J.H.J.K.J.H.H.K.J.J.J.K.K.K.J.J.J.J.J.J.K.K.K.K.Y.K.K.Y.K.H.].Y.Y.K.J.H.J.J.H.J.H.H.H.J.H.H.H.H.H.H.H.H.H.H.2.H.H.H.2.H.H.H.H.E.r.H.G.k.Q.f k.Z.X._ _ ) _ _ { _ ) ) ) ) a ) a ) ^ ) .a ` 7 ` 7 ) : * =X: 7 ) l 6 k G ] r t ` ` .i ` 7 O.) a ` { l ` t * =X=X; : z ",
+" P - 2.K.K.Y.K.Y.K.H.H.Y.K.H.J.J.K.K.K.K.K.K.K.J.H.J.K.K.J.J.K.K.K.K.K.K.c.J.Y.Y.K.J.J.J.H.J.K.H.J.J.H.H.H.H.H.H.H.H.H.H.H.H.{.H.H.H.H.H.H.H.2.I |.} 9 k.k.Z _ _ _ _ ) i : : : 8 5 l i ) ^ ` O.a 7 a ` t ` ^ ) 7 7 : > G ; ` 7 ` 7 K ; G 6 ` : t l ) ` ) ^ ) .a ) ` #.: G >XG ` [ ",
+" = > G.Y.K.Y.Y.K.K.H.J.Y.K.H.K.K.J.J.K.J.K.J.K.K.H.K.J.J.J.K.K.K.J.K.Y.K.Y.K.Y.Y.Y.K.J.J.H.J.H.J.J.J.J.H.J.J.H.H.H.H.H.H.H.2.H.2.H.J.J.H.H.{.[ 4 4 + 4 4 u _ _ _ _ _ a 6 ` 2 ; * * ; 2 i ) i 7 ` 7 O.l ) 7 ) 7 ) t ` r ; K ` 7 7 ` 6 6 K ` t l ` ) a 7 ) ) i ) ) a O.` ( ] ;XG _ ",
+" G i k.J.J.J.Y.K.J.H.{.H.H.J.H.K.K.J.J.K.J.J.J.J.J.H.J.K.K.Y.Y.K.K.K.K.Y.].J.K.J.K.J.J.J.H.H.J.H.J.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.{.{.- i l 8 * e 8 8 2 l 7 ) ) ; r a 6 l ; * ; ; 8 8 6 7 ` ` a O.l ` ` a ` 7 ` l ` ` l ` 7 ` l ` l 6 l ` l ` O.` ^ ` ) ^ ` #.` #.r G G n I ",
+" * * _ K.J.Y.K.Y.J.H.H.H.H.H.J.J.H.J.J.J.J.H.K.H.J.J.H.J.K.K.Y.Y.K.Y.Y.J.K.K.J.J.J.K.J.J.J.J.J.J.J.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.2.w.4 7 _ a t ` ; * ; k * ; - 2 6 _ w._ _ _ ) l * G ; : 7 O.7 l 7 l ) #.` 7 ) 7 ` a ) 7 ` t l t : r ; 8 8 r 7 ` .a O.l ) ) #.` t * G : ",
+" * * a Y.K.Y.J.].Y.H.oXoX{.H.J.J.J.J.J.H.J.J.H.J.H.J.J.K.K.K.Y.Y.Y.K.K.Y.K.J.J.J.K.K.J.J.J.H.J.J.H.H.H.H.J.H.H.H.H.H.H.H.H.H.2.H.H.2.#X# a Z >.>._ Z w.o.z ` ; G G * a _ _ k.>.Z w.Z._ ` > ; r ` 7 ` t l ` O.a O.` ` 7 ` 7 ) ` 7 l ` r 8 ; ; ; G ; r 7 ) ` a O.a t l t > ] ; ",
+" 8 k R {.H.K.J.J.J.r.w._ _ %X).H.J.J.J.H.H.H.J.J.J.J.J.K.J.K.K.J.K.K.K.J.J.K.J.J.J.K.Y.K.J.J.J.H.J.H.H.H.H.H.H.H.J.H.H.H.2.r.H.H.H.H._ ) `.k.Z Z _ { >.k.%.w.) l : ; i _ s.T.Z _ _ s.k._ l 8 ! l ` 7 ` l l 7 ` 7 7 ) a O.) a 7 ) t : ; ; ; G ; / r R ` a O.) #.O.t l r ! l 4 ",
+" 2 = e V H.H.Y.J.H.F._ >.>.Z k.F.#XE.$X#XL.r.r.H.H.H.J.K.J.K.K.K.K.K.K.J.K.J.K.K.K.K.K.J.J.J.H.J.J.H.H.H.H.J.H.H.H.J.H.H.r.H.H.H.H.2.Z 5 4 N ^ N { { Z Z >.s.>.N > = = ( _ s.s.>.X.>.<X{ i 2 G K 7 ` 7 ` ` 7 ` 7 ` 7 ` 7 ) 7 ` 7 ` r ; G ; / G ; ; * 6 ) O.a ` 7 : t 6 = 4 |. ",
+" * G h I H.J.J.J.Z._ >.Z _ _ >.Z _ k._ w.k.s.k.{.H.H.H.J.K.Y.].J.J.J.K.J.K.K.K.K.K.K.K.J.J.H.J.H.H.H.H.H.H.H.H.H.H.H.H.{..XoX.X(.oXw.5 * i ) { ) { X.s.@Xs.Z Z 7 ; G 3 <.Z s.s.s.1X@XX.a ( ;X; t l r ( : ( 8 R l t ` 7 ) ` .l t : ; ; ; ; K / ; G 6 ) i O.t ` t : r = z ",
+" i = 0 4 Z.K.K.K.r.w._ w.>.>.X.w.>.>.>.X._ >.w._ N }. X`.H.J.K.J.J.J.J.J.J.J.J.J.J.J.H.J.J.H.J.H.H.J.H.H.H.H.H.H.H.H.{.| 4 + + h + 4 - G 7 ^ { ) { Z %.s.@Xs.@Xk.` * G e a 1XD.s.F s.s.<X#.G G ; 8 3 C.3 G ! * r l ` 7 7 l ) i ` * ; G / / K K K K t l ) 7 l l t : ; ; Z ",
+" Y > P h f J.J.H.E._ _ _ >.k.>.>.k.k.%.Z._ X.w._ _ Z Z } H.H.J.K.J.J.J.J.J.J.J.J.J.J.J.J.J.J.H.H.H.H.H.H.H.H.H.H.H.H.S.- 5 5 5 0 & % h k l ) ^ .^ { D.<XD.<Xs.s._ 6 k 3 - F <X1XF 1Xs.1X_ G G * ; k ; ; =X/.k r O.t l ` t l l t ; G / K ; ; ; ; ; ` l ) ` 7 t : r ! l w. ",
+" oX# k 0 5 Y &XH.r.%.>._ { Z.X.Z X.w.>.>.%.Z.>.>.>._ _ _ k.Q.S.2XoXoX{.).{.{.{.{.&XH.H.H.J.J.J.H.H.H.H.H.2.H.H.H.{.Z - 5 * * : ; * G = G * 2 .i ) W.W.F F F F Z <X<.* ; 0 ( .V.W.<Xs.D.u K G ; K ` ` ` 6 G G ! r ` ` 7 ` l ` 6 * G K ; G ; K ; 6 ` ` O.7 ) t r * 2 n _. ",
+" n * * = 5 # H.H.E.%._ >.k.w.>.w.>.k.Z k._ Z _ _ { >.>.X.w._ k.Z _ Z w.N N N N N 9 N 3XoXoX$X{.H.H.H.H.H.H.H.{.I 7 2 ` l : a o.) ) : G G ; #.) { #. .<.( S % % h d.* ; = 8 #.#.#.8.<.V.u t G G : _ _ ) o.l ; ] k ; 7 ` 7 ` 7 ` : ; ; ; / ; G 6 ` ` #.) l : 8 3 k l n *X ",
+" l * k = 5 z J.H.H.Z.N X.w.>.%.%.>.>.X.k.X._ >._ >._ w.X.>._ >._ _ _ _ X._ ) _ ) _ _ _ z _ Z .X{.{.H.H.2.H.I - - _ Z.) _ _ Z.G.Z.o.: G ; #. .i #.#.( h.u.( d.3 C.6 ) ; G d.d.e 3 % d.- 8 G K ) _ >.Z _ ) * =XC.; : #.` 7 ) ` 6 K / ; K K 6 ` ) t l ` 7 3 k /.= 5 + Y C ",
+" k.4 * = 5 P.H.H.oX_ w.>.X.w.X.w._ w.) Z._ _ X._ X.Z._ k.>._ X.) _ ) _ o._ ) >._ ) _ ) _ _ _ _ N z w.9 |.( 5 z F.F.%.%.k.s.%.P.#Xl >XG 5 d.8 u.#.{ _ @X%.%.t ; t Z u.W G ; K 6 7 ` #.; 3 ; _ <X>.F _ Z 7 ; G G ; t ` .l ` 7 ` 6 6 ` 6 ) ` l ` t l 8 >XG ; G * ; 0 e + ",
+" .X- = * 4 S.H.{._ _ >.w.>.Z >._ X.w._ X.) w.>._ >._ X._ >._ ) >._ X._ >._ _ _ o._ { o._ ) _ ) _ _ ) - 8 ` k.%.k.%.T.s.@X@X@XF.` 3 ;X; 3 K O. .{ { D.D.:.Z _ _ D. .k ; O.#.{ _ _ %.t k R ^ #.<.5 % #.#.: G ;Xk t ) a ) 7 ` 7 ` l 6 l ` 7 ` 7 t : k G ; K 6 : 6 ; * G = # ",
+" .X4 * ] * 4 p .XX._ _ k.>.>.Z >.>._ _ _ _ ) Z._ >.X.z >._ >.X.Z o._ _ X._ o._ _ X.) _ >.) _ ) ) _ ) 8 ; ) 2.2X$XI.I.s.I.4X@XT.{ ; G * 8 ` .^ { _ s.5.7.@X%.D.D.{ 3 ; #.{ { X.@XD.#.k ; % d.3 3 k e 3 8 3 >XG : ) ) a ) .l ` ` ` ` ` 7 t l t * C.G K t ` t ) l : G >X& Y ",
+" k.l k 0 & 5 4 z _ _ Z >.s.>.Z k._ _ X.>.>._ { >._ >._ >._ _ _ _ _ ) w._ _ _ _ _ ) >.X._ _ >.) _ 7 ; : _ E.%.s.D.D.s.s.y.F 0.7 8 >XC.* 7 { .{ { <XD.5.D.D.5.:.W.- r .{ ) <X1X:.{ ; e : t t l ` 6 : : 3 G >XK a .` #.) l ` 7 ` #.7 ` t : ; G ; 6 6 ` l t l ` ` ; = = Y ",
+" k.l * k = * h _ _ _ _ w.^ i i - - a _ >.X.) k.>.k.{ >._ X.o._ _ o._ { o._ ) >._ _ _ ) _ ) X._ l G : i s.F.%.s.I.U.0.% S 8 8 3 G G G 3 #.{ { { { 1X5.5.5.D.5.<X( 5 V.#. .V.<X<X{ r 3 i #.i _ s.s.k._ : G >XG 6 a ) 7 ) 7 ` 7 ) 7 ` t l t k ; / ` : t ` l ) l l 6 r G ; ",
+" 2.z r * G = i .Xi - ( 5 2 ` a ` ) ) >.w.>._ >.{ >._ _ _ _ o._ _ _ o._ >.X._ >.o._ o._ _ _ ) l ] ; l _ s.5.s.V.S ( #.7 ) %._ ) / G G t { ) W._ 1XT.D.s.j.D.~.% 8 u.8 ( 8 #.$.h.( 3 #.^ O.V.<XD.D.s.F > k G r #.` #.l ) 7 ` .l l t 6 l K K 6 ` l ` 7 ` l 6 l r r K = - ",
+" z z : = > w 2 i a _ z E.Z.w._ Z.k.{ _ >.>.>.k.o._ o._ _ { o._ _ _ a 7 a { a _ _ { ) o._ 2 =X; : ^ !.y.!.<.#.Z P.:.:.D.D.X.l ; G 8 h.#.#.V.V.F V.8.4 8.#.d.; 7 t 7 t ) _ #.7 e : .#. ._ D.D.<X<X4 ; ;X; ` .` ` 7 ) l ` 7 l ` 6 6 ` 6 t t l ` 7 ` t 8 ; r ; r ! 8 ",
+" .XY k * l _ 2.2.2.H.2.r.%.>._ X.>._ >.Z _ _ _ X._ _ X._ _ ^ ` i d.8 : ( ( 7 _ ) _ a ) l G ; r i <.- #.V.<XD.D.5.j.D.s.<XO.R ;X3 5 3 d.% d.S h.( #.( 3 = 8 #.^ O._ <X%.P.: d.d. .#.{ s.5.D.D.<X4 ; G K #.` a O.` #.` #.t : t : t l 6 ` l t l ` 7 r ; ; 8 r : 3 ; ",
+" I O * ` G.H.H.H.H.H.H.H.r.E.w._ k.) k.X.>.>.>.o.w.{ _ l 2 2 7 7 ` R ) t : ) l ) ) _ X.) ; G 3 2 8 u.X.k.D.5.D.v.D.D.5.D.{ u.e 6 ` r R r #.#.#.X._ >.7 8 3 t #.{ X.1Xs.I.V.3 t i #.{ <XD.5.D.s.<X6 ;X; 7 ` .7 7 ` 7 7 t l : 6 : ` l t ` : ` t 7 : 8 ; ; ; 6 * ; j ",
+" , h * Z.2.H.H.H.H.H.J.H.H.|.N _ _ >.>.>.k.>._ >._ _ l 5 5 8 t >.o.o.o.o.o.) ) _ o.o.Z.o.: =X/.8 e ` s.P.D.D.I.D.D.I.x.I.W.d.3 t ) .) ) { ) ) E.E.%.u.3 8 t #.{ @X%.1XD.d.d.#.#.#.{ @XD.s.x.<X4 r C.; ` #.7 l ` #.` t : : r R t : ` t l t ) l 6 ; ; ; K K 6 k K b. ",
+" | # $ 5 ` G.2.H.H.H.H.H.(.1 Y + 4 - 7 ^ _ _ Z _ Z X.w.i 2 8 ; : ` Z.H.2.H.2.H.2.r.Z.Z.r.H.r.2.` ; =X= ; l s.D.y.F 8.!.O 8.v.<X .d.G t V.{ { X.X.%.@XD.D.D.~.5 ; ._ X.T.D.D.U.% d.#.#.t V.s.5.I.<XD.N t W G t l ` t 7 t l : r R 6 t : t l ` ` ` l ` 8 ; ; ; G ; ; ; ! I ",
+" + a _ Z.Z.H.H.H.H.| Y # + 2 5 % % l l _ _ _ { _ _ _ - - ` ) o.Z.H.H.H.H.H.H.H.2.2.Q.|.N p p z l G ; ; > #.V.!.V.^ V.h ~.<.0.'.h.d.; .#.{ X.<XD.x.D.5.D.y.~.G O.{ { D.D.D.5X5 3 3 3 d.d. .!.p.D.s.s.4 > W ; l ` 7 t l 6 t t 6 t l ` 6 ` ` t l ` #.r ; ; ; G K r ; = 6 _. ",
+" S 5 _ 2.H.H.H.H.H.(.Y S 5 2 _ i * * * 8 2 i { o.o.>.a h l Z.Z.Z.H.2.H.H.H.H.H.H.$X9 Y 4 - - - - l * G G ; ( $.#.V.@XP.%._ u.5 d.h.3 W u.O.{ { 1XD.5.j.j.j.F ~.* t #.{ @X5.v.F d.; r ; 8 e % S $.8.D.D.N O./.;Xt 7 t ` : : l 6 l 6 6 ` ` 7 7 ) ` 7 ) ` ; * / K K K ; * G ^. ",
+" $ - >.E.H.H.H.H.{._.h 2 l l * * e 8 2 Y 9 # 7 ) Z.E.H.H.H.H.H.H.{..XI Y + 2 7 i 7 a ) l ` ; G k ; : { s.P.5.D.5.D.%.t 5 3 3 ! t #.{ { D.5.D.5.p.u % d.3 O.{ { s.p.'.S : O.7 t ) ) 6 : d.{ !.<X# : ! ; ` t l : R R r r R t ` t l ` ` 7 l 7 7 7 r ; / r K ; K k ; n ",
+" ( 0 a G.H.H.H.H.H.b.@ > ) ) l ) : 6 2 h + h ) Z.E.H.H.H.H.H.H.2.s Y h 5 ( l l ) ) ) _ ) 7 : ; G ; l 1X%.D.D.5.D.s.<X{ 7 3 3 G t { { 1XD.D.5.x.F h.% ! ; t { { D.~.S d.t #.{ t _ ) 1X_ { >.<X{ + 8 ;X; t ` : R : R R t : ` t l ` 7 t ` t ` 7 : K ; K ; r ; 3 G R u s ",
+" ( 0 i G.H.H.H.H.oXY $ 2 a _ ) l * * - z Z.r.{.2.H.H.H.2.p 4 $ 8 5 ` ` ) _ a ) ` #.) ` ; k ; ` X.:.5.D.5.x.F <XV. .* G G d. .X.D.D.x.x.s.U.<.e C.! h.^ W.<X<.% 8 ) #.#.t { _ 1Xx.@X<Xs.U._ 8 G / l 6 t t : t : ` t l ` t t ) t l t l ) O.; ; ; ; ; ; ; ; ] $ p ",
+" $ e ) H.H.J.H.).Y h 5 _ l * * ) 2.G.r.E.H.H.H.oXU ^ h 2 : : ` a ) ` O.i #.) l l * G ; l N s.v.D.5.<X6XF #.( 3 3 K R ( V.F x.F y.U.~.$.3 G k d.5 { 6XS 3 u. .#. .#.) <X1X<Xs.U.1XF <.3 G 6 t l : 6 6 ` 6 : ` 6 : l ` l ` l ` 7 ` t r * ; ; * K ; K G 4 n ",
+" e l G.H.H.&X(.^.5 2 t <.= 6 ) Z.H.H.H.H.{.j Y S - 7 l 7 7 ` #.) #.i 2 ( l ` 7 e k G k 8 S 8.<.s.x.<X{ #.d.d.3 ` 6 #.#.#.<.8.- 8.#.d.5 R 6 r 3 d.V.$ 3 r t #.#.{ { X.Z x.D.s.X.F V.5 k K 6 ` t 6 ` ` ` t : R t ` ` t ` t l ` t l ` 6 ; ; G K ; K k ; [ ",
+" d.e a E.H.J.H.X + 8 l ( V.% 3 ) G.H.H.H.2.H.s O 5 5 7 7 l l ) l l l l 7 : : t 7 : 3 K 6 r 6 R 5 d.s.s.6X{ #.3 8 r t ` { Z @XZ { #.5 d.d.t ) ) { ) ` 2 % 3 ! d.#.#.{ X.<Xs.s.D.x.F { { 5 C.; 6 t ` l t l l ` ` 7 t l ` ` 7 ` 7 t ` 7 ` t ` 6 6 ` 6 6 * 6 ",
+" 3 e _ H.J.H.S.+ 5 : ^ S d.l Z.2.H.H.H.H.|.# h 8 6 l l t l ` l l ` 7 6 8 R 2 8 e ; t ` ) ) %.) 7 W.1XV.8.e e 3 R 7 ._ s.<XW.V.h.d.d.2 7 { { ) { ( 5 8 ; * 3 d.#.#.<X1Xs.s.D.F X.{ #.& G / ` : ` t l t ` 7 ` t : ` 7 7 ` ` ) l ) a ` l ` ` ` 6 ` 6 * o. ",
+" 3 ; Z.H.J.2X4 h ( . !.#.3 d.Z.H.H.H.H.H.f + 5 5 8 r l : ` ` l t ) ` 7 : r 8 k e G ; ` a { >.D.Z 7 W.V.h.% ! ! 3 #.#._ 1XD.U.8.d.% % 8 t O. .{ W.#.d.8 R t : ; 8 d.u.y.F F U.D.y.F { #.0 G K t l t l ` l t ` 7 ` t t l ` #.7 ` ) a O.7 ) ` ` ` ` ` : ; >. ",
+" +X; %.Y.J.Z 5 8 7 <X<.% 3 ) H.H.H.H.H.{.w % 8 ; r : R l a 7 ) l 2 2 : d.` r ; ; G k t %.%.D.s.F V.#.h.% ! r ; k 8 #.{ F ~.S 3 8 8 ! 8 t #.#.#.d.% 3 r #.{ ) { 6 r u.<.$.( S S V.V.#.5 k G 6 ` : l 6 : t l ` 7 ` ) ` ) 7 ) ` #.) .l ) l ` ` l ) 7 ; * ",
+" /.: @XJ.H.u e r ) y.V.+ 3 r o.H.H.H.H.H.U + k 6 * K ; l 7 7 O.l l 8 8 r 7 .l ` 6 ; G O.P.@XD.<XV.#.#.h.; ; r r 3 3 5 - % h.5 8 R = k 3 5 h.% % 3 d.* t . .{ { o.) #.#.d.h.d.d. . .#.8 C.; r r R l 6 t l t l ` 7 7 ) a ` ) 7 ) ) a ` l ` ^ 7 ) ) t * K ",
+" ! G l P.H.[.4 k 6 { 8.h : ! ) 2.J.J.J.H.n h * ; r : r r ; 8 R 7 7 6 ; r #. .#.#.#._ ) : ) D.y.!.~.V.#.t #.7 t #.#.) ; * 3 % 3 8 t #.O.2 ; C.! e ; R ; ; ` #.V.O.{ s.5.P.P.s._ a t 7 #.8 ! ; ; * ! * ; * : t l ` l ` 7 ) .` 7 ) 7 ` 7 7 ` #.) ` #.` 2 G a ",
+" ^ 3 k l %.H.*X$ k r 7 V.t e 3 l 2.H.H.J.H.9 5 0 r K ; 8 ; ; ; ; : #.: 7 R #.#.{ .^ O.{ s.X.F W.V.h.#.h.t #.#.u.( ) { >.^ ; ; r t 7 { { { a 6 = G ; : t t * 7 { { { X.v.D.p.<XU.F { { 7 % * ; G k G W G /.k ; : t : t t ` ) l ) a ) a t ` 7 ) 7 ) ) a 7 5 ; n ",
+" _ k G * %.H.u 0 k 3 8 #.8 3 ; k.H.H.H.J.).4 = ; r t r ; R ( r 3 3 u.t #.#.#. .l #.) { { { V.W.#.h.h.t ( ( #.O.7 3 #.<X<X .( 7 ) { ) { . .#.u.r 6 6 : .i ; r W.X.X.D.p.U.W.W.{ W.{ #.% k ; ; * ; K ; ] /.G ; t l : 6 l t i ) 7 ` #.) 7 ` ` ) ) ) ^ O.7 k i .X ",
+" _ ; k = N J.u * ] G 6 3 ; ! * ` H.H.H.H.(.# $ * : 8 3 ( 7 t t 2 G G 8 8 u.u.: 8 t #.h.#.W.{ { { { { ) ^ ) { { 1X^ 3 8 5 V.h.; 7 { { { #.#.#.#.; 7 .` { { O.r k .<Xy.p.V.W.{ X.F s.~.( ; a a a a I *XI r K 6 : ; : 6 : 6 t : t l O.) ` 7 ) #.^ a #.) ) 2 G a b. ",
+" X._ ; ; z J.H.- =X; 6 >X! G 6 o.H.H.H.H.Y % * ; ; C.C.; 8 d.t ( ! ;X! ; ; 8 3 t u.: t #. .#.V.#.#.#.#. . ._ { { F t 3 G u.7 ; : h. .{ #. .{ 7 3 7 _ { { { { ) 8 5 $.~.<.V.W.F W.V.~.5 * a 3XB V w.|.i * ; 6 6 : 6 l 6 ) a ) a ` O.a O.) ) a 7 8 ; [ ",
+" { X.H.>.) G.K.J.4 G G 6 #. =X] G l %.H.H.H.[ 5 k ; k k G G /.! 3 8 ( ; =XG 8 r R R 2 u.( u.( 8 u.u.d.; d.t .{ { X.X.{ { ) 6 R .l 8 8 ( { { { .7 3 #.W.W.{ { { <X) h.8 3 3 h.#.W.W.% d.> a s f.z ; * 6 : 6 l 6 l t 7 ` .a ) 7 ) a O.7 : ! K g ",
+" { Z H.H.H.H.J.J.z G G K O. ; =Xk ) E.H.H.{.h k G k ; ` ` ; G G G G ; k >X;X3 d.t #.; ; u.r d.R r t #.t ( t ^ ^ { Z { X.F { _ ^ _ W.) : #.{ { #.{ 7 ; 8 h.#.V. .6X{ V.h.* 8 ; & ( #.d.3 r z U 3Xa G ; : 6 : 6 : t ) a ` #.) a O.) ` : ! G ) ",
+" { X.{.`.H.H.J.K._ G =X3 2 #. K G * ) G.H.H..X* k k ; l z _ l : K ; * K r G W k 3 t t d.r ; u.R r h.t #.7 8 t #.#.V.{ F W. .V.V. .V.{ { { { .V. .{ O.2 3 d.d.- #.V.#.V.d.3 r r 3 8 8 d.; a Z S.a * * R : t : 6 t ) ) a ) a O.7 ^ #.8 G ; w. ",
+" 8.h V.1XF W.^ Y z Y 7XH.H.Z.* G G 3 : 7 #.k l Z.H.H.).Y G ) ) n 2.(.w + |.[ I n .Xr.i G W /.= d.8 u.R 8 u.t ( t ( R r : h.( r #. .#.d.h.h.d.#.#. .#. .( h.#.{ #.O.8 G 3 ! e 3 d.t 8 W 6 7 e 3 * : n [ }. (.N 5 k k R l 6 l ) a ) ^ ) ) { ) ) l * G l [ ",
+" W.d.e d.~.W.W.{ - 5 - h + S.H.E._ * G G K t 7 * l G.H.H.}.h > |.2. } h G G G ! k 3 e ; r h.R 2 t t ( t t 2 u.h.#.t #.( t 7 t h.#.h.#.u.t 7 #.#.d.R r ; ; ; ; ( h.P G R 5 ; r i p 2 = k r r : t ) _ ) ) _ _ ) _ ) ( k r |. ",
+" V.8 ! ; 8 h.{ V.5 3 $ & 0 4 H.H.Z.l : G ; ` { o.^ = > E.H.H.p = 4 [ |.t r ] W ] G /.C.! : u.8 u.t #.( #.t 8 t 7 #.7 7 7 t ( R ( u.t ( 7 t u.u.: t #.: 8 : d.e e G ; ` l i |. 3X7 * G ; r R ) _ ) _ ) _ ) ) a #.* > _ X ",
+" W.d.e ; * ! ( { 9 : ; * k * Y r.r.r.Z.: k 8 5 { - * 4 2.H.H._ 0 4 oX|.i r * G G W W e R 8 8 8 u.t #.( R 7 #.#.t u.#.#.7 7 t 7 ( t h.( u.7 u.5 d.d.3 +XC.G ; l a N u I z.u * ; K ` i ) _ ) _ ) ^ _ { ) 2 = a ,. ",
+" X.d.e 8 * ! 3 - Y >.: k = * - Z H.H.2.) k W ! #. { h.* z H.H.H.z e # g N z : ; ] T >Xk ( R r u.2 7 d.u.7 #. .#.#.t 2 h.#.h.( #.u.( 8 8 8 d.d.d.3 ! C.+XG r l z V ..p * k : O._ ) a ) ^ ) ) a ) a ; 3 N ",
+" W.#.e ! 3 * ; * 8 h 5 = k G k h |.H.H.Z.l ; G t _ X._ d.* w.H.H.H.u * 4 f. X|.a * G ] ;Xe e e e ! e e = e e e 8 e 3 e ! e 3 e e e ! ! ! k C.C.C./.; ` l >.[ [ V s 4 5 : ) ) _ { ) _ ) _ O.^ 7 ; * a <X ",
+" ~.d.3 k G k 8 * * l ; l = ; : > 4 }.*X{.G.w.; ; a { _ #.* z H.H.H.4 * n (.%X_ l k k C.P C.C.k /.k ! k C.G C.! P C./.k /.k C.G k k G G G ; : ` z G.[ _._. XS.- 0 : _ ) _ _ ) ^ ) ^ ) a : 8 r z (. ",
+" #.3 k = ; * P e : z G.Z.4 ) z i 5 h - Y ).[ * : t _ u 5 2 z oX{.2.l R }. I n : ; ; ; ; : r r : r * ; k G ; ; : K : ; ; : : l a a z _ n f .X Xz. g u 5 : l ) _ O.) ) ^ ) a 7 8 3 ` z `. ,. ",
+" #.8 * ; = k k G ! - .XH.2.2.H.Z.l * * * 5 w ; : z k.S.4 0 & - >.H.4 ; I p - % : ) _ ) _ ^ _ ) { l 8 3 ; z ,X H # o .. L OX8X,X ",
+" { 7 2 w.N l : ; = 2 |.XXH.H.H.H.G.Z.a r = * > _ I XoXz 5 * : X.H.z 8 # X f.# 2 ; l { a ) { ) _ ) a ( G * z ,.O % - L # + 5 $ N :X ",
+" s.u $ Y {.H.H.z ) _ .XH.H.H.H.H.H.H.H.>.: k 5 w + + Y ,Xz ` ) Z.{.N 5 - [ 1 @ + ; ` ) ) ) _ ) _ ) ) 2 8 r z `. # 5 ; 4 z.1.S * * * * ^ f. ",
+" 1.Y 5 5 5 + . oX2.H.r.r.H.H.H.H.2.H.%X2.G.l = * = e * w.r.2.2.oXk.f - > *X Y 5 8 r ` a _ ) _ ) _ ) ^ ^ l e 4 n - 3 & n z.1 % 2 l ) ` 5 $ Y z. ",
+" p 5 * 0 8 $ 4 U ).{.2.H.H.H.2.r.H.G.H.H.f ` ; ; * r _ H.r.Z.k.>.%Xi > *X _.- 8 = : ) ) _ ) _ ) _ { ) ) 5 G Y |. ..- * > 4 g O * l l _ O.r 0 h } ",
+" .Xk.z l * * * & 5 $ 9 .X{.r.H.2.r.{.H.2.r.f G.G.G.2.#Xf Z Z.Z f - 5 [ @ = r ` _ ) _ _ _ { _ { ) a 5 k 6 I D <.8 * 5 4 U f.M % : ` .) ^ ) 2 = - ",
+" .Xz - > * k * 5 + 4 Y |.$XF.2.H.H.G.E.f r.H.F.Z.Z >.w.>.Z - * .X . + ; l ) ) _ ) { ) _ ) ) a : ! ; 4 - w p ' 2 * ; * 4 _. 9X4 e r i ) a ) { a * l ",
+" _.[ ^.- * * k * * = 5 2 4 n oXr.H.r.E.r.2.F.Z.k.Z Z >.|.- * }. }.5 ; l ) i ) _ _ _ ) ) a ) 8 3 ; 4 4 0 8 5 # 9X = ; ; l 4 [ :X+ ; 2 ) .) ^ 7 7 i w.).",
+" n.V @ w * > ) l l ) l ] k = e 5 h I |.|.E.Q.Z.Z w.w.>.%.Z 5 > |. # * ; ) _ ) _ { _ { _ _ ) ^ 8 k z n % = ; k * # ,X W G k l 4 X4 e ; l a O.7 ) l = z (.",
+" X 1 # w % & : a _ _ z Z.) a : : r G = 5 $ h + 4 Y w.Z k.%.G.N > > oX j - ; K ) a { ) ) _ ) o.a 7 8 ; t .X^ 5 * ; ; k 4 h ] k ; n 5 3 = ` t a .l ; > z ",
+" C O $ % * : 6 a w._ o._ _ w._ ) _ ) a * * = * = & > + 4 ^.p N |.h i H. , & * 6 _ ) _ _ ) _ _ { ) $ * l ) ).4 4 =Xk * * 4 * k G ` (. * k 7 ` 7 7 ) & l u ",
+" X w % * : : l a _ ) Z _ _ >._ w.a _ G.Z.w.a l > * k = 8 & 5 5 4 4 h # {. I * G 6 ) _ ) _ ) _ { ) _ ` * G ; ] ; G * m.* k k 6 .X 5 ] 6 7 ) ) ) i * l ",
+" -XO % r : ) _ _ ) _ ) ) >.>._ a 7 i ` X l l * * * * = & = 5 I I * k 6 _ ) a { _ ) o._ _ a ; ; ; G k G * 4 `.*Xb.* k ; 6 &X h ] 6 ` #.a ) 7 * z ",
+" (.' + % k : ) _ a ) _ ) >.w._ _ _ - 7 _ G. 2.2.f z 4 : * ; i .X ^.* G 6 ) _ ) ) _ _ _ ) { l ] 4 l * G G * > 0.@ 5 & W = 8 1. h k t a ` #.#.> l .X ",
+" 9XY 0.$ * 6 l _ ) _ _ >._ >._ X._ 2 8 _ 2. H.2.f Z.z 2. Y * * ` a ^ _ ^ ) ) _ _ a 5 G : Z i k G k /.e * e k W G G & + p ,X f.h ] : ) .) l 5 z oX ",
+",.Y % % r l a l l _ >._ >.X.w._ k.l * a %. , * / ` ) ) ) ) _ _ X.) #.* G 6 z * k G ; : _ l ` * ` * G P & N ' $ ; ` ) a 7 7 & z (. ",
+"D % e * * & * 0 8 t _ _ _ w._ ) _ : 2 G.H. O G * l a ^ #._ ) _ ^ { a * ] l B + k * Z.2.r.2.2.2.2.2.o.K k 4 b.5 * ) ^ ) ) 7 > p oX ",
+"d e = = * k = C.= : _ o._ _ _ >._ 2 4 .X Y 0 G r { ) ) ) ^ { ) ) a * ] ; g + * l Z.H.H.H.H.H.H.H.Z._ G 4 ,. ~ & r a O.a #.5 5 |. ",
+"[ : 2 ; l a > 0 ; ` ) w._ a 5 i X.4 z Y l ] ; _ ) _ _ _ ) _ _ ) 2 ] ] h # - l Y n {.H.H.H.H.H.H.H.k.= & Y h k t a .a ; e 4 }. ",
+" |.|..Xn h * l ) Z.i 7 & ; l & 4 [ l 0 K a ) ) { ) _ _ { ) l * G ! + Y u # - 5 + 4 + G.H.H.H.J.H.H.H.Z > = 4 0XY + ; K ) ) 7 : R : w. ",
+" 4 & ` _ a 4 % = ; l : & a (. * G O.^ _ ) _ ) ) _ _ ) ) * G = e % 5 e 0 * * > k.K.J.H.H.J.H.H.#X4 0 $ # + * K 6 ^ _ 7 8 z w.$X ",
+" 4 : ) _ i > * k ; > * 0 w.9X : k 7 ) a { _ _ _ { ) _ _ ) : G +X/.k k k * l 4 z J.H.H.J.K.J.H.J.Q.> 0 * = ; K ` ) ) - r n `. ",
+" - * _ l h * i w.* * * = h g i ! > #.) _ ) _ ) _ ) ) ) _ ) 6 K ; * ; : i n G.f J.J.J.J.J.H.H.J.} & 0 ; 6 ` 6 l 7 ( 5 4 2. ",
+" h * 7 5 e ; |.{.a ; 0 P & # z. Y ; * l a ) ^ ) _ _ ) _ _ _ ) _ ` ` 6 ` l 4 n H.H.H.H.J.J.K.J.H.H.} > +.; ` l ) l * * r (. ",
+" Y 5 : & l l 2 k k 8 4 z. z h = 2 7 .a ) _ { _ ) ) _ ) _ _ ) a ) a l z .XH.{.J.J.H.J.H.J.H.r.& = * : l : * * i _ ",
+" N 5 * * l Z. 2.k._ a z Y = * * r #._ ) ) ) _ _ ) _ ) _ _ ) _ l l 4 + z 7XH.H.J.H.J.J.J.H.4 * G k /./.; : f ",
+" 3Xi * l [ : k k 8 * r 7 _ ) _ ) _ ) _ { ) a t 2 * = * z H.H.H.H.H.J.H.H.H.z * G ; * 6 ) .XH. ",
+" ).Q.3Xr. w.- * * ; * : 7 7 i .a ) i ` l 7 5 * ; l z r.H.H.H.J.J.H.J.H.H.z * : ) Z.E. ",
+" a ; k = e 8 e * 5 8 8 e e k k ; z n 2.H.H.H.H.J.J.H.H.`.*X+ * z ",
+" a ; * ; k k G k ! ; ; * ; z |.2.H.H.H.J.J.J.H.j h $ $ * 4 n ",
+" l : ; ; : 6 l ) l l 4 .XH.H.J.J.J.H.H.`.@ * 0 = * 4 [ ",
+" .XG.w.& 4 G.H.J.H.H.J.H.z.Y - * ; * 0 & + @ 1 ",
+" _.N l & k.H.H.K.H.H.H._ l : 6 : G * * * & 5 w Y ",
+" d - & > w ,.H.J.H.H.H.%.l 6 2 : 6 K K ; * = e d.< ",
+" h 5 ; * 0 w L oX{.H.H.oX- * ; * = ; ; ; ; * k = & - ",
+" ^.5 * ; * * k * 5 - # Y _.n 2 l a : ; * * * * * ; ; * : _ ",
+" M 5 * ; r ; * r : > * * * $ 5 * z }.I G.) a l ) l ) z G.z oX ",
+" g + e ; K * * : - * k P k i I b. ",
+" 1 & k ; ; * ; ) - = k ] * 4 I ",
+" p 8 ; r = * i z 2. 4 k ; ; > [ ",
+" N C.; * r ) 2.J. w k ; r 0 w. ",
+" u = ] = z `. 4 * * * G ) ",
+" i ; ] * |.&X w.; * K k l ",
+" N : ; i $X %.i G K * l ",
+" |.w.2. :.a * ; * a ",
+" :.N * ; k i ",
+" |.5 G = z ",
+" _ ` r "};
--- /dev/null
+/* XPM */
+static char * garfield[] = {
+/* width height num_colors chars_per_pixel */
+"169 173 6 1",
+/* colors */
+" c #000000",
+"# c #83bfa8",
+"a c #000055",
+"b c #ffaa00",
+"c c #ffffff",
+"d c #aa5500",
+/* pixels */
+" # # #a a a ",
+" # # # # a a a # ",
+" # # # # # #aaaaaa # # ",
+" # # a # #bbbbb a a a# # # ",
+" # # #abbbbbbbb a a a # # # ",
+" # # #bbbbbbbb a a a# # # ",
+" # # bbbbbbbb a a a # # # # # # # #a ",
+" # # #bbbbbbbbb a a aa # # # # # # # # # ",
+" # # # bbbbbbbbb bb bbb bba a # # bbbbbbbbb # # ",
+" # # # #bbbbbbbba bb bbb bba a# # #bbbbbbbbb# # # # ",
+" # # # # # #bbbbbbbbb bbbbbbbbbbbbbbbb b# # bbbb# # # # # # # ",
+" # # # # # bbbbbbbbb bbbbbbbbbbbbbbbb b # #bbbb # # # # # # ",
+" # # # bbbbbbbbb bbbbbbbbbbbbbbbbbbbb# #bb # # # # # # # # ",
+" # # # # #bbbbbbbb # # #a# # # # abbbbbbb# # # # #b# # # # # # ",
+" # # # # #bbbbbbbbb# # # a aaa # #a bbbb# # # #bbb# #b# # # # ",
+" # # # # # # # # # # # # bbbbbbbbbb# # ccccccccccc # bbb # bbbbbb bbb# # # # # ",
+" # # # # # # # # # bbbbbbbbbb# #ccccccccccccccc ab # #bbbbbbbbb# # # # # ",
+" # # # # # # # # # bbbbbbbbbb# #ccccccccccccccccc#a# # # # bbbb bb # # # ",
+" # # # # # # # # bbbbbbbb# #cccccccccccccccccc a #cc # # #bbbb b # # ",
+" # # # # # # # # bbbbbbbb# #ccccccccccccccccccccc#cccccc # # bbb # # ",
+" # # # # # # # bbbbbbbbb #cccccccccccccccccccccc #ccccccc# # bbbb# ",
+" # # # # # #b# bbbbbbb #ccccccccccccccccccccccc# ccccccccc # b # ",
+" # # # bb# #bb bbbbbbb #ccccccccccccccccccccccccc# ccccccccc # # ",
+" # #b# bb# bbbbbbbbbbbb# ccccccccccccccccccccccccc #ccccccccc# # ",
+" # #bbbbbb # # # #bbbbb# cccccccccccccccccccccccccc# cccccccccc# # ",
+" # #bbbbb# # # # # # bbb #cccccccccccccccccccccccccc #ccccccccccc# # ",
+" # # bbbb# #bbbbbbbb # # #ccccccccccccccccccccccccccc# ccccccccccc # # ",
+" # # #bbb# bbbbb bbbbbb# # ccccccccccccccccccccccccccc #cccccccccccc # ",
+" # #bbb# bbbbbbbbbbbbbb# #ccccccccccccccccccccccccccc# cccccccccccc# # ",
+" # # bbb bbb bbbbbbbbbbb #cccccccccccccccccccccccccccc #cccccccccccc #b# ",
+" # # bbbb#bbbbbbbbbbbbbbb# cccccccccccccccccccccccccccc# cccccccccccc# bb# ",
+" # # # bb#bbbbbbbbbbbbbbbb #cccccccccccccccccccccccccccc #cccccccccccc #bb # ",
+" # # #bb bbbb bbbbbbbbbbb# cccccccccccccccccccccccccccc# cccccccccccc# bbb # ",
+" # # # bb#bbbb bbbb#bbbbbb #cccccccccccccccccccccccccccc #cccccccccccc #bb # # ",
+" # # # #b# bbbbbbbb# bbbbbbb ccccccccccccccc cccccccccc# cccccccccccc# bb# # ",
+" # # # # #bbbbbbbb # bbbbbb#ccccccccccccccc ccccccccc# ccccccccccccc #bb # # ",
+" # # # b bbbbbbbbbbb #bbbbbb cccccccccccccc ccccccccc #ccccccccccccc# # #bb # ",
+" # # # #bbbbb bbbbbbb#bbbbbbb# ccccccccccccc cccccccc #ccccccccccccc# # # # # # # ",
+" # # bbbbbbb bbbbbbb bbbbbbbb#ccccccccccccc ccccccca# cc cccccccc #bbbbb# # ",
+" # # bbbbbbbb bbbbbb#bbbbbbbb #ccccccccccccc ccccccc a ccc ccccccc #bbbbbbb# # ",
+" # # #bbbbbbbbbbbbbbbb bbbbbbbbb cccccccccccccccccccccc#accc ccccccc# bbbbbbbb# ",
+" # #bbbbbbbbbbbbbbbbb# bbbbbbbb# cccccccccccccccccccc# cccc cccccc# #bbbb bbbb# ",
+" # #bbbbbbbbbbbbbbbbbb #bbbbbbbbb# ccccccccccccccccc # ccccc cccccc #bbbbbbbbbbb# ",
+" # bbbbbbbbbbbbbbbbbb# #bbbbbbbbb# #cccccccccccccc a #cccccc cccccc # bbbbbbbbbbb # ",
+" # # bbbbbbbbbbbbbbbbb # #bbbbbbbbbb # ccccccccc # #a# # ccccccccccc # bbbbbbbbb bbb ",
+" # #bbbbbbbbbbbbbbbbb# # bbbbbbbbbbb # # #cccc # #d dd # ccccccccc # bbb b bbbbbbbb# ",
+" # # b bbbbbbbbbbbbbbb # # bbbbbbbbbbbbb # # # # ddd dddd# ccccccc # bbbb bbbbbbbb ",
+" # # # b bbbbbbbbbbbb# c # bbbbbbbbbbbbbbbbbb# #dddd ddd #ccccc# # bbbb bbbbbbbbbbb# ",
+" # # # #b# #bbbbbbbbbb #cc # #bbbbbbbbbbbbbbbbb# #ddd#ddd# # a # #bbbbbb bbbbbbbbbb# ",
+" # # # # # #bbbbbbbbb# cccc# # bbbbbbbbbbbbbbbb# # d ddda# #a#bbbbbbbbb bbbbbbbbbb ",
+" # # # # # b bbbbbbbbbb#ccccc# # #bbbbbbbbbbbbbbb# # #a# abbbbbbbbbbbbb#bbbbbbbbbb # ",
+" # # # # # bbbbbbbbbbb #cccc c # # bbbbbbbbbbbb# # # a bbbbbbbbbbbbbb# bbbbbbbbb # ",
+" # # # # # bbbbbbbbbbbbb ccc cccc# # # # # # # # #c# cc#bbbbbbbbbbbbb# bbbbbbb # # # ",
+" # # # # bbbbbbbbbbbbbb# cc#ccccccc# # # # # # ccc ccc #bbbbbbbbbbb# bbbbbbbbbbbb# ",
+" # # b #bbbbbbbbbbbbbbb# # ccccccccc ccccccccccc ccccc #bbbbbbbb # #bbbbbbbbbbbb ",
+" # # # bbbbbbbbbbbbbbbbbbb #ccccccccc#ccccccccccc#cccccc #bbbbbb # #bbbbbbbbbbbbb# ",
+" # # #bbbbbbbbbbbbbbbbbbbb # #ccccc#cccccccccccc cccccccc# # # # # bbbbbbbbbbb # ",
+" # # bbbbbbbbbbbbbbbbbbbbbb# # #cc ccccccccccc #cccccccccc ccccc bbbbbbbbbbb # ",
+" # #bbbbbbb# bbbbbbbbbbbbbbb # # #ccccccccccc#cccccccccc cccccc#bbbbbbb# # # # ",
+" # # # #bbbb # #bbbbbbbbbbbbbbbbbb # # #ccccccc# cccccccccc ccccc bbbbbbbb # # # ",
+" # # # # # # # # # # bbbbbbbbbbbbbbbbbbbbb # # # ccc ccccccccccc cccc bbbbbbbbbb # # ",
+" # # # # # # # # # # #bbbbbbbbbbbbbbbbbbbbbbbb # # # # ccccccccc cccc bbbbbbbbb # # # ",
+" # #bbbbbbbbb# # # # # #bbbb bbbbbbbbbbbbbbbbbbbbb# # # # # # # # # #bbbbbbbbbbbb # # ",
+" # #bbbbbbbbbbb# # # # # #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# # # # # # bbbbbbbbbbbbbb# # # # # ",
+" # bbbbbbbbbbbbbbb # # # # #b# # #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# # # # # # ",
+" # # bbbbbbbbbbbbbbbbb # # # # # # # #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# # #bbbbbb # ",
+" #bbbbbbbbbbbbbbbbbbbb #bbbb # # # # bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb bbbb#bbb# # # bbbbbbbbb # ",
+" #bbbbbbbbbbbbbbbbbbbbbb #bbbbbbbbb# # # bbbbbbbbb # # # # # bbbbbbbbbbbbbbb # #b# bb# # #bbbbbbbbbb # ",
+" # bbbbbbbbbbbbbbbbbbbbbb# bbbbbbbbbbbb#bbbbbbb# # # # # # # # # bbbb# bbbbbbb # # bb# # #bbbbbbbbbbbb ",
+" # bbbbbbbbbbbbbbbbbbbbbbbb# bbbbbbbbbbbbbbbb# # # #bbbbbbbbbbb# # # # bbbbbbb # # b # # bbbbbbbbbbbb# ",
+" # bbbbbbbbbbbbbbbbbbbbbbbbbb# bbbbbbbbbbbb# # # #bbbbbbbbbbbbbbbbb# # bbbbbbbb# # # # # #bbbbbbbbbbb# ",
+" #bbbbbbbbbbbbbbbbbbbbbbbbbb # #bbbbbbb# # # #bbbbbbbbbbbbbbbbbbbbb# #bb bb# # # # # bbbbbbbbbbb # ",
+" # bbbbbbbbbbbbbbbbbbbbbbbbbbb # # # # # # #bbbbbbbbbbbbbbbbbbbbbbbbb# # # # # # # # # #bbbbbbbbbbb# ",
+" #bbbbbbbbbbbbbbbbbbbbbbbbbbbbb# # # # bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# # # # # # # # #bbbbbbbbbbb# # ",
+" #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # # # # # # #bbbbbbbbbbb# # ",
+" # #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # # # # bbbbbbbbbbbb# # ",
+" # bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# # # # bbbbbbbbbbbbb # ",
+" # # bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # # # #bbbbbbbbbbbb # ",
+" # #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# # # # # # #bbbbbbbbbbbbb# # ",
+" # #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # # bbbbbbbbbbbbbb# # #bbb# # # # # #bbbbbbbbbbbbbb # ",
+" # #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# # #bbbbbbbbbbb# # # bbbbbb# # # # # # # bbbbbbbbbbbbbbb # # # # # # # ",
+" # # bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # # #bbbbbb # # b # bbbbbbbbb # # # # bbbbbbbbbbbbbbbbb # # # # # # # ",
+" # # # #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # # # # # # # bbb #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # # bbbb# # ",
+" # # # # # # # # #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb bb# # # # #bbbbb# bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # ",
+" # # # # # # # # # # bbbbbbbbbbbbbbbbbbbbbbb bbbbbbbb#bbbbbbbbbbbbbbbb #bbbbbbbbbbbbbbbbbbbbbbb bbbbbbbbbbbbbbbbbbbbbb # ",
+" # # # bbbbbbbbbbb #bbbbbbbbbbbbbbbbbbbbbbbb bbbbbbb bbbbbbbbbbbbbbbbb bbbbbbbbbbbbbbbbbbbbbb bbb bbbbbbbbbbbb# # # # # # ",
+" # # b bbbbbbbbbbbb# bbbbbbbbbbbb#bbbbbbbbbbb#bbbbbbb#bbbbbbbbbbbbbbbbb# bbbbbbbbbbbbbbbbbbbbbbbbbbbb bbbbbb # # # # # # # # ",
+" # # # #bbbbbbbbbbbbb# bbbbbbbbbb# bbbbbbbbbbb bbbbbb# bbbbbbbbbbbbbbbbb #bbbbbbbbbbbbbbbbbbbbbbbbbbbbb bbbbbbbbbbbbbbbbb# # # ",
+" # # # b #bbbbbbbbbb #bbbbbbbbb# bbbbbbbbbbbb# bbbbb #bbbbbbbbbbbbbbbbb# bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb bbbbbbbbbbbbbbbbbb # ",
+" # # # #b# bbbbbbbbbbb #bbbbbbb# #bbbbbbbbbbbb #bbbbb# bbbbbbbbbbbbbbbbbb# bbbbbbbbbbbbbbbbbbbbbbbbbbbbb bbbbb # #bbbbbbbbbb # ",
+" # # # # # #b bbbbbbbbb# # bbb # #bbbbbbbbbbbbb# bbbb# bbbbbbbbbbbbbbbbbbb # # # bbbbbbbbbbbbbbbbbbbbbbbb bbb# # # # bbbbbbbbb #",
+" # # # # # b bbbbbbbbbbb # # # #bbbbbbbbbbbbbb bbbb# #bbbbbbbbbbbbbbbbbbb# # # # # bbbbbbbbbbbbbbbbbbbbb bb# #bbbbb# #bbbbbbb# ",
+" # # # # # bb bb bbbbbbbbbb# # # bbbbbbbbbbbbb #bb # #bbbbbbbbbbbbbbbbbbbb # # # # #bbbbbbbbbbbbbbbbb bb bbbbbbbbb #bbbbbb #",
+" # # # # #bb bb bbbbbbbbbbbbbbb#bbbbbbbbbbbbb# b # # bbbbbbbbbbbbbbbbbbbb# # # # #bbbbbbbbbbbbbb b #bbbbbbbbbb #bbbbb# ",
+" # # # # # bb bb bbbbbbbbbbbbbbb bbbbbbbbbbbb# # # #bbbbbbbbbbbbbbbbbbbbbbb# # # # bbbbbbbbbbbbbb#bbbbbbbbbbbb #bbbb #",
+" # # # # # #bb bbbbbbbbbbbbbbbbbb# bbbbbbbbbbb # # bbbbbbbbbbbbbbbbbbbbbbbbb # # # bbbbbbbbbbbbbbbbbbbbbbbbbbb bbb # ",
+" # # # # b bbbbbbbbbbbbbbbbbbbbb #bbbbbbbbbb # bbbbbbbbbbbbbbbbbbbbbbbbbbbb# # #bbbbbbbbbbbbbbbbbbbbbbbbbbb#bbb# ",
+" # # #bb bbbbbbbbbbbbbbbbbbbbbbbbb #bbbbbbbb # bbbbbbbbbbbbbbbbbbbbbbbbbbbbb # # #bbbbbbbbbbbbbbbbbbbbbbbbbb bb# # ",
+" # # bbbbbbbbbbbbbbbbbbbbbbbbbbbb# # bbb # # bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# # #bbbbbbbbbbbbbbbbbbbbbbbb # # # ",
+" # # #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # # # #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # # bbbbbbbbbbbbbbbbbbbbbbbb# # # ",
+" # #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# # # #bbbbbbbbbbbbbbbbbbbbb# # ",
+" # bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # # #bbbbbbbbbbbbbbbbbbb# # ",
+" # #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# # # #bbbbbbbbbbbbbbbbbb # ",
+" # bb#b#bbbbb#b# bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # # # bbbbbbbbbbbbbb# # ",
+" # # b # #bb # # bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# # # # #bbbbbbbbbbb# # ",
+" # #b# # # # # bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# # # # # # #b# # # # ",
+" # # # # # # bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # # # # # # # # ",
+" # # # # # # bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# # # # # ",
+" # # # # # # bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # ",
+" # # # # # bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # ",
+" # # # # #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# ",
+" # # # # bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# # ",
+" # # # #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # ",
+" # # # # # # #bb bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # ",
+" # # # # # # # # # # # # # # #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # ",
+" # # # # # # # # # # # # # # # # # # # # #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # # ",
+" # # # # # # # # b # # # # # # # # b # # # # bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # # ",
+" # # # # # # # bbbbbb# # # # # # #bbbb # # # bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # # ",
+" # # # # # # # #bbbbbb # # # # # #bbbbb# # # #bbbbbbbbbbb#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# # # ",
+" # # # # b # #bbbbbbbbbbb# # # # bbbbbbbb# # # bbbbbbbbbbb bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # # # ",
+" # # # bbb # # # bbbbbbbbbb# # # #bbbbbbbb # # bbbbbbbbbbb # #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# # # # ",
+" # # # #bbbbbb # bbbbbbbbbbb # # #bbbbbbbbbb # #bbbbbbbbbbb# # bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # # # # ",
+" # # # #bbbbbbb#bbbbbbbbbbbbbb # #bbbbbbbbbbb# #bbbbbbbbbbb# # #bbbbbbbbbbbbbbbbbbbbbbbbbbb# # # # # # ",
+" # # # # bbbbbbbbb bbbbbbbbbbbbbbbbbbbbbbbbbb # bbbbbbbbbbb # # # #bbbbbbbbbbbbbbbbbbb# # # # # # # # ",
+" # # # # # bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# #bbbbbbbbbbb# # # # # # # # # # # # # # # # # # # # # # ",
+" # # # # #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb #bbbbbbbbbbb# # # # # # # # # # # # # # # # # # # # # # # ",
+" # # # # #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # bbbbbbbbbbb # # # # # # # # # # # # # # # # # # #bbb# # ",
+" # # # #b# #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# #bbbbbbbbbbb# # # # # # # # # # # # # # # # # bbbb# # ",
+" # # # # b b bbbbbbbbbbbbbbbbbbbbbbbbb # # # # # # bbbbbbbbbbb # # # # # # bbbbb # ",
+" # # # # bbbbbbbbbbbbbbbbbbbbbbbbb # # # # # # # # #bbbbbbbbbbb# # # # # bbbbbbb # ",
+" # # # bbbbbbbbbbbbbbbbbbbbbbbb# # # #bbbbbbbbbbbb # # # # #bbbbbbbb # ",
+" # # # bbbbbbbbbbbbbbbbbbbbbbb # # # bbbbbbbbbbbb# # # #bbbbbbbbb# # ",
+"# # # #bbbbbbbbbbbbbbbbbbbbbb # # #bbbbbbbbbbbb # # # bbbbbbbbbb# ",
+" # # #b#bbbbbbbbbbbbbbbbbbbb # # # bbbbbbbbbbbb# # bbbbbbbbbbb # ",
+"# # # # bb#bbb bbbbbbbbbbbb # #bbbbbbbbbbbb # #bbbbbbbbbbbb # ",
+" # # # #b# bbb bbbbbbbbbbbb# # # #bbbbbbbbbbb# # bbbbbbbbbbbb# ",
+"# # # # b bbb bbbb bbbbbbb# # # bbbbbbbbbbbb# #bbbbbbbbbbbb # ",
+" # # # #b#bbb#bbb#bbbbbbbb # #bbbbbbbbbbbb # #bbbbbbbbbbb# # ",
+"# # # #b# bb# bbb bbb bb# # # bbbbbbbbbbbb# # # bbbbbbbbbbbb# ",
+" # # # b #bb #bb #bbb#bb # # #bbbbbbbbbbbbb# #bbbbbbbbbbbb # ",
+" # # # # b #bbb# bb# b # # # #bbbbbbbbbbbb # # bbbbbbbbbbbb# ",
+" # # # # #b# bb# bbb #b# # # bbbbbbbbbbbbb # #bbbbbbbbbbbb # ",
+" # # # #bb #b# #bb #b# # # #bbbbbbbbbbbbbb # # bbbbbbbbbbbb# ",
+" # # # # b # # # b #bb # # bbbbbbbbbbbbbbb # #bbbbbbbbbbbb # ",
+" # # # #b# # # b # b # # # # # # # # #bbbbbbbbbbb# # # bbbbbbbbbbbb# ",
+" # # # # # # # # # # # # # # # # # # # # # # # bbbbbbbbbbbb# # # #bbbbbbbbbbbb # # # # # # # ",
+" # # # # # # # # # # # # # # # # # # # # # # # # #bbbbbbbbbbbbbbbbb# # # bbbbbbbbbbbb# # # # # # # # # # # ",
+" # # # # # # # # # # # # # # #bbbbbbbbbbbb # # # bbbbbbbbbbbbbbbbbb# # # #bbbbbbbbbbbb # # # # # bb# # # # # # # ",
+" # # # # # # # # # # # # bbbbbbbbbbbbbbbbbbbbb # #bbbbbbbbbbbbbbbbb# # # #bbbbbbbbbbbbb# # # # # # bbbbbbbbbbbbbbb # # # ",
+" # # # # # # # # # # #bbbbbbbbbbbbbbbbbbbbbbbbbb #bbbbbbbbbbbbbbbbb# # # # bbbbbbbbbb# # # # # # #bbbbbbbbbbbbbbbbbbbbbb # # ",
+" # # # # # # # # # #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# # # # #bbbbbbbbbbbbbbbb # #bbbbbbbbbbbbbbbbbbbbbbbbbbb# # ",
+" # # # # # # # # bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# # # # #bbbbbbbbbbbbbbb# # bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# # ",
+" # # # # # #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# # # # bbbbbbbbbbbbbbbb# # bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# # ",
+" # #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# # # # bbbbbbbbbbbbbbbb# #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# # ",
+" #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # # #bbbbbbbbbbbbbbbbb bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb bbbbb # ",
+" # bbbbbb bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # # #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb bbbbbb # ",
+" # bbbbbb#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # # #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb bbbbb# # ",
+" #bbbbbb bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# # # #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb bbbbbbbbbb#bbbb # ",
+" #bbbbbbb#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# # #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb bbbbbbbbb #bbbb # ",
+" # bbbbbb# bbbbbbbbbb#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# # #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# bbbbbbbbb bbbb# ",
+" #bbbbbb #bbbbbbbbbb bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # # #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#bbbbbbbbb#bbb# # ",
+" # bbbbbb# bbbbbbbbb #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# # #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb bbbbbbbbb bbb # ",
+" #bbbbbb #bbbbbbbbb# bbbbbbbbbbbbbbbb# bbbbbbbbbbbbbbbbbbbbbbbb# #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#bbbbbbbbb#bbb# # ",
+" #bbbbb# bbbbbbbbb #bbbbbbbbbbbbbbbb #bbbbbbbbbbbbbbbbbbbbbbbb # bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb# bbbbbbbbb bbb # ",
+" # bbbbb #bbbbbbbbb# bbbbbbbbbbbbbbbb# bbbbbbbbbbbbbbbbbbbbbbbb# #bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb #bbbbbbbb #bb # ",
+" # bbbb# bbbbbbbbbb# bbbbbbbbbbbbbb# #bbbbbbbbb# bbbbbbbbbbbbb # bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb bbbbbbbbbbbbb # bbbbbbbb# bb# # ",
+" # bbbb# bbbbbbbbb #bbbbbbbbbbbbbb # bbbbbbbb# bbbbbbbbbbbbb # # bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # bbbbbbbbbbb # bbbbbbbb# #b# # ",
+" # bbb # bbbbbbbbb #bbbbbbbbbbbb # # bbbb# # #bbbbbbbbbbbbb# # # bbbbbbbbbbbbbbbbbbb #bbbbbbbbbb # # #bbbbbbb# # bbbbbbbb# #b# # ",
+" # #b# # #bbbbbbb# # bbbbbbbb# # # # # # # #bbbbbbbbbbbbb# # # # bbbbbbbbbbbbbbbbb # # #bbbb # # # # # # # # # # # # # # # # # # ",
+" # # # # # # bb# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ",
+" # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ",
+" # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ",
+" # # # # # # # "
+};
--- /dev/null
+/* XPM */
+static char * gravity[] = {
+"118 191 60 1",
+" c #000000000000",
+". c #DDDDDDDDDDDD",
+"X c #CCCCCCCC6666",
+"o c #808080800000",
+"O c #666666660000",
+"+ c #999999996767",
+"@ c #7474B0B03333",
+"# c #AAAAAAAAAAAA",
+"$ c #CCCCCCCC9999",
+"% c #CCCCCCCCCCCC",
+"& c #000055550000",
+"* c #C0C0C0C0C0C0",
+"= c #EEEEEEEEEEEE",
+"- c #666633330000",
+"; c #555555555555",
+": c #080826260000",
+"> c #666673735959",
+", c #2A2A66660101",
+"< c #333333330000",
+"1 c #808086868C8C",
+"2 c #5F5F66665F5F",
+"3 c #999999990000",
+"4 c #CCCC99996666",
+"5 c #FFFFCCCCCCCC",
+"6 c #CDCD8B8B1D1D",
+"7 c #99999999CCCC",
+"8 c #CCCCCCCCFFFF",
+"9 c #9999CCCCFFFF",
+"0 c #9999CCCCCCCC",
+"q c #CCCC9999CCCC",
+"w c #999999999999",
+"e c #CCCCFFFFFFFF",
+"r c #1B1B82825858",
+"t c #FFFFFFFFFFFF",
+"y c #FFFFFFFFCCCC",
+"u c #666699996666",
+"i c #A7A764640202",
+"p c #CCCCFFFFCCCC",
+"a c #9E9E73735555",
+"s c #FFFFCCCC3333",
+"d c #FFFFFFFF9999",
+"f c #9999CCCC4949",
+"g c #8787CCCC9999",
+"h c #FFFFCCCC6666",
+"j c #CCCCCCCC3333",
+"k c #333333333333",
+"l c #9999FFFFFFFF",
+"z c #CCCC9999FFFF",
+"x c #595900000000",
+"c c #FFFFCCCCFFFF",
+"v c #FFFFFFFF6666",
+"b c #CCCCCCCC0000",
+"n c #FFFFCCCC0000",
+"m c #EFEF99994747",
+"M c #FFFFCCCC9999",
+"N c #FFFFFFFF2222",
+"B c #FFFF99996666",
+"V c #B7B71E1E0C0C",
+"C c #CCCCFFFF6262",
+"Z c #CCCCFFFF9999",
+" .XoooOOOO +++@+#$#$%%% O &O+%*= ",
+" %oO-O&OOOO;OO&:OOOO>,OOOOO,OO&O,O<O<O,O;1;;O2&-OOOOOOooo@ooooooOOoo++3+4$4$X=55== ",
+" =6o&O&1777889880q9%07889*707#w21w770798988e88888809w#112O;221r22;1122;>OOO&O&OOO&Oo34%==t ",
+" t%+O&2+988e88e.eee8e%e8e8ee8e8e88e8e8e8e8%e%e8%ee%ee8.8e8e888e88e8e8e8e8e89887#7#72w;OO&Ooo6yy ",
+" y3o,188e.ee.e=%e%.ee*e*e%e.%e%e.ee.e%e%e%e=%e*ee*e..e.8e%e*e8e%ee%e8e=e%e%e=ee8e=e8e8e88=u2>,-oX ",
+" t*OO1#e8%e8=*e.eee8e.*e.e.e%ee*e.e..e%e%e%e*ee*e%.e*ee.e.%e*e%e*e8*e%e=8=e%e8e..e=e8e=e==ee=8e97O,iy ",
+" XO1e8e8ee.e.e.e..e%e.e.e.e.e%e=e.e.8p8%e%e..e8e.=e8e.=8p8e%e.8e=%ep8=e.ee.e.e.=e.e=8p8=8e.e8=e.e8*a-u y ",
+" 6O8e.e.e*e%e.e%ee.8e.e.8e.e.e.8.ee%e.e.e%e.8e*e%.e.ee%e.ep%e%e8e.e%e%e.e=e.e.%ee=e.e=e=e.e=e.e.=e.e8%o&4 ",
+" OOe.e.e.e.e.e.e.%ee.e9.e.e.e.e.ee..e8*e%e%ee.e%ee8%e%e.e.e8*e%e*e*e%e.e=e.e%e8ee=.e=e%e%e=e=e=ee.e.ee82,s ",
+" Xo18e.e%e.e.e%e%ee..e%e.%e.e%e.e%%ee%ee.e*e%e%=e%e.e%e.e.e..e%e.e%e%e%e%e=e.e.e.=e=e.e==e.e.e.e.e8=e.8e.O&= ",
+" *,*e.e.e8=e.e8e8..ee.e%ee%e=8e.e.e8*ee.e.e%e..e.e%e%e.e.e%ee%e.e.e.e.e.e=.=e=e.ee.e.e.e.e=e=e=e.=e..ee.e8Oid ",
+" .3>8e=e=e=e.e.e=e8e%=e.e.8e.e=.e.e.e...e*e.e.e.8e%e.e.e%e=e..8ee*e.e.e.8e.e.e.e...e%e=e.e.e.e.e.e.eee.=e.e.<i ",
+" =O@8=e.e.e.e.e=e.e.e0*.e.e%e.%e.e.ee.ee%e.e*e*ee.e%e.8.e.e*ee.e*e.+*e8.e.e.e.=e.ee.e.e.e=e.e.e.e.e=e==ee=e8#O6 ",
+" XO7e8e=e=ee.e=e.e*$Oo,O*e%f&ooo1.e..uO8..0.e%e3*e30.e.%*gw8%30.e%@u8e.e.e.e8ee$o8.e6oO+#e.e.e.e=e=.eee%=e.ee+O6 ",
+" +@8%e.e.e.=e.e.e%=,a1w;0.eOO;;OO&f8eOO$e*Ow%e*Ou.uo9%0&O&O,OuOu.8>Oe.=e.e.e=e8*o*eo,22O,o8.e=e=e.ee...ee.=e=8OOy ",
+" &1e=e.e=e.e=e%e.%&we8ee8e.1O9880OOe%O&u8eo&8.gO78f&%ew11O&1w8O,egO9%ee%e.e.e=e.,#$O78e8*>e8=e.e.e.e.e=.ee.=ee+Oi ",
+" .O+e8.e.e.e.e.e.80O%e=8.e=e9,4ee8+O88>;Oe.0O@9%&1e*O1.8e82288e921+O#e=.e.e=e=e.e+10Oie.e8e.ee.e.e=e%e=e=e=e8e=8w&h ",
+" $O08e=e=e=e.e..ee3O8.eX%.8e$O78eeOOe$&w;8e.oO0%O78%,1e.8eo>8e%e@O&;88ee%e.e.e.e.#u8O,Ou3*%e.e=e=e.e==e.e.e=e=ee.OO ",
+" %O*e=e.e.e=e%e.e8*O.8O,,Of*eOOe%+O1ewO81o%e8&o8&+e8u,%%e.0O0.e88<>&*e=.e.e.=e..e9oe91;-O&O3e.e.e.=e.e.e.e.e=e%=e2O5 ",
+" j&8=e%e.e.e.e.e.egO0=+1>,-#8+&-OO788o2ew&08ei&uO7=eO>9e%e#O08.eeak;18e=.e.e..*%%.r8e8880w;OO8e=e8e=e%ee=e=.e%ee%%&o ",
+" uO%e.e.e=e.e.e..e8u+8ee88>&e*-O&O#e.&O&,OO%882O-oe8wO0%e.8OOel..e7Ooee.e%e.ee8p8eOe.=ee8e81Oo.e.e.e.e..e.ee.ee8=e7O ",
+"y-2e.e.e.e.e.e%ee%e*>e%8e.uO0#,11;O;*&;11;Oue8%&;w8e#&#e%e8&18.e8e%O18=e.e.e.e..e%@zee.e=e8eOO8ee.e.e.ee.e.=e.=ee%=, ",
+" X%e.e.e.e.e8.e%eu-g%%01&%8O#e81O&O8e881O+e81<Oe.8>o.e8e+O%.e.e8;O.e.e.e.e.ee.e>%e%$%%$e*a&*e5e=e.e=e.e=ee=e=%e8Oi ",
+" O7=ee.e.e=e.e.e.e8e%@&O,OO78eO98e8*O18e=e.Owee*>28e.u18e=ewole.e.e@O9.e.e.e.e.e.8#8e$&O&O-,;7e.e.e.e=e.e=.e.e%ee.%,O ",
+" O@ee=e.e=e.e=e.e.e%e8807#88ee8=e.ee8ee8pe809..880e.ee8e.e.e*..e=e80O*e.e.e=e.e..e.e.e8*07#7*e8e.e.e=e8=e.e.ee=e.eeuO.",
+" O18=e=e=8ee=e=e.e.e..e.e8ee..e.8e..e.8e8.e8e%ee.e.e.=e=e.e8e.e.e.e888e.8e.e.e.e..e%e.e8ee8e8e=ee.e.e.e.=e.e.=e.e..uO.",
+" >,%e.e.=ee.e.e=e.e=ee%+8.e.%X>O@ouw%=++u+g%%e.e%8e.%.%.0..p.g*%e%e.e.=%Xe.e.eX+uu#e%e.e=8p$*e.e=+Ou8e=.e.ee=e=e8.8wO*",
+" &.=e%ee=.ee=e.e=e%=eoO,8%e8,20712O@8uOk&-OO%e8ou%o,O,,OO&#o,O,,%*e%=euOOe8e%o&1>&o%Of.e.8O@%e.e#&O%e.e.e=e%e=e%ee8O@",
+" -0e.e==ee5ee.e.e=ee.O&O0e%%&788e81O8#&%8*OOu8eo>8+1,O21129O27>O&%8e.eoO&*e%%,788uO7OOwe.fO7e=e.+Oke.ee=e=.e=e.e.e$O;",
+" ,1.e.ee==ee.e.=e.e88O1&o*e8Ooe8.e8&.9Ow8e8&o8%+&8e87O7e8e80+8e9OO0%e%O:OO=8e2>=e*&o9>,38u&%.ee80-1.e=%e=.e=e.e.e.e&+",
+" O;8=e=.e=e.e.e.e8==gO8w&we.@O%e8.g2e%Ou.g+O7e.+Oe%e*e%e*>e%8#,0e%%,w;>0e.@2e88O188o&oO;8e.=eX&88ee=.ee=e.e.e%e%O7",
+" 1Owe==e.e.e%e.e.=eewOe82O$e7O1$.uO%.e7,&O&,%.88&*e88>o8.e%8a8.euO%.e0O09ko%ew&...O2=e81k-2e=.ee888e.=.ee=e.e=e.e.8O*",
+" ,u8e=e=e..e.e.e%eeo>8e*O>8.:O&OO788.0<1;>-r0e$O08e.uO9e*e.OgoOO98e.+;8*@<#*1O,@O;8e.e8ok18ee5ee=e=ep=e.e.e=.e.e.gO8",
+" OO%=e.e.ee.e.e.e..O>w+1-&0%><>&&@e%e8ue887OO082oe%e*&*%e%e><&O1e.e82&O,-;&O0k-O,u0*e.e8>-e=.e=.e.e.8e=e.=e.e.e%eo@=",
+" &ue=e.e=e.=e=e=e%&O,>,;-28O;91>-u8*eO8e8e+O0eo18e.*O1e.e.>r2<;O#%%O;1#71-1%&972-Ou*e.eOO%ee.e.f.8e=.e.e8=e.e.e4,qt",
+" OO.e==e=.ee.e.e=eO#88881&02O8881-o0*Ow.%*>O880Oe=8e2O%e.eu8881O&@@O988e81O7O*e891OO*e8*&*8.e8oO@e.ee.e.ee.e.e81O. ",
+" 6&08ee.e==e=e=8e$O9ee=e*O10&%e8e+&18,O&&Ok7e8.O8ee.#>8e8e+1e8e8o&Ok8ee=e#O9O#8e%e%7e=e#O1=e=eO&9=e..e.=.e.e..0o1= ",
+" OOe==e.ee.e.ee.0&*=.e.e*882%.ee88.e9071#8e..e8e%e8e%e==.#u.e.e887#e=.e8e0881..=e8=e.e81*eee.8%.e.ee.e8e.e.ee3O8 ",
+" -+8e=e.=e.e.=e$18e=e8=eee8e=..e.e..8e=e88ee%e%e.e.e.ee=e8e=e.e.e8e.e.==ee.9ee.8e=8e=e8e..eee8e=e..e.e=e.e.wO7 ",
+" &%.e==e.e==ee88e.e.ee.e.=e.eee.e88=8e.e.e%e.e.e=e.e.e=.e8.e.e8=e.=e8ee=.ee..e=e%ee.=e8=e...e.e.ee.e.e.e=8@O= ",
+" &.8ee.e.e%e5pe.e.e..e.e.ee%..e*ep.e.e%e.e.e.e%e.e.e.ee%ee5e%e.ee..e=.ee..ee%e%e..e.e=e.ee.e..e..e.e.e%e3O8 ",
+" f.%e.e.e%e8.e.e..e...e...ee.e%8e%e.e.e.e%e.e%e.e%e%.e=%e%e.e.e.ee=ee.=e..e%ee%e.e%e..e.e%ee.ee.e.e.eoO* ",
+" o0%e.8.e%ee.8e.e%e8e%e8e..e%ep.e.e.e%e.e%e.e.e.e%e...e.e.e.e.e.=e.=ee=ee%e..e.ee=.ee.e.e=8e..e.e=83o7 ",
+" Oow%ee.e..ee.e.e.e.e=e.ee.e%.e.e.e.e.e=e.e8=e8=e.e.eee8e.e=.e=e.e=e=e..e=%ee=e.eee.e.e=ee=ee.ee*eO* ",
+" OOOu*8e.ee.ee.e8e.e=e=e.ee.ee%e=e.e=e.e=e=ee.e=e=.e=.ee=e.ee.e=e=e.e=ee%ee.e.=e.==e=e=e.ee.=e5e%o1 ",
+" 7O&Oo@e==e=.e=e=e=e.e=e==e..e=e.e=e.e.e.e=.e=e.ee=ee5e.e=e=e=e.e=e5e.=e%=e.ee==ee=ee.e=e5ee.0@oO ",
+" OOO0e=e=ee.e=e=e.e=e.=ee%e=e=e=e=e=e.e==e.e.ee.ee=e.e.e5e=e.e=e.ee=e.=e=.ee.=e..e.e.e$3oO,w= ",
+" Oo@u+#$%..e.=e=..e=8=e.e.e.e=e.e=.ee.e.e==e.e.e..e%=.p8.=%...0.%%p8.%e%.*p$+g++u+++##. ",
+" 7w2OO&O&O@++f$0%%$%*Xe%...$e%e.e=%e..$g.@ooOOoOOO,,<O,&O,O&OOOO&OO,O,&O-O#+%8= ",
+" %#+o,O ,O,,,OxO&OOOOoOooooOO,&O%O1+111w+122O>O221##1####wwww ",
+" #*qw11 21a22>ww##OOg1 ",
+" cO7+8 ",
+" eO#@t ",
+" h&7at ",
+" *>+1t ",
+" XO&*= ",
+" w&-. ",
+" 6>2 ",
+" 1-+ ",
+" 3O ",
+" O+ ",
+" i8 ",
+" . ",
+" v tt ",
+" bOO& y5 ",
+" bOxOO-by nOO4y ",
+" o-&-6-i6dy h&<O,n ",
+" +O<-4m3OO4dy =3,O4O-X ",
+" 5&&O@hhn3OOhd yiO4hM&3= ",
+" .&-<OhshhiOOvd &-Xhh6Od hb ",
+" =3&-;hhvnh6&On OO#Mhh,b b&O: ",
+" 1-;<bhnhhs6O,v OxXnvMi6d O&-O-v ",
+" $O<kihhvnhs6iOjyyM,O4hsha&b bOO6OOOy ",
+" iO&&O3bdyy 2;<O6vnshhhhOOoh%&-3hnvmOx =OO6Mo-iy ",
+" yh66iO&OO3Xdy 6&k-onhvnvshh6O&OO:+hhnvi,i=yh,OMh6O&h ",
+" ynvhhhh6i<O,Oond 82O-&oXnhnnvhhmoO<-3nvhsMiOn=+O+hhMOxv ",
+" dvnvnnshMno-&O&ijM=yyi,kO&3hhvnnhhhhXiO4MnvsvnOoho-whvnoOO yd ",
+" dvnhnshnvhhhh6-O&O,bdsh;;<-&nhshnvnvhhhMnvhnsnhh,OOO@hsh6-id b33 ",
+" dvNnsvnhhnvnnhhh6iO-<O6MBiaa+hhvnhnhnvnhhvnhvshssOO:&4MvshoOb nO,O3 ",
+" =yvvnnvnhnvsnshhhhhM4iOOObhMhMhhsnvsnvhnnvhnnvnsvhhMO&-onnvM6OVvttO&<O3t ",
+" vvnnhhsvnhnhsvnsshvnhhXioidnhhvnhsnvnnhvnnvnsnvsnvns6OOOMsnvn<Onyh&O<-O. ",
+" =6-OO36nnnvsnvnhnvsnhshhhhhshnvnhsvhnhnvnhhnhhhnNhnshM#a6nvhnhiO&MuO<O<<d ",
+" @O-OO6XnshnsvnnhvnhvnhhvsvnnsvnnhvnhnhvnhNnhssvnhvnhMhhnvnhj-Oo&-k2O<3 ",
+" 2O-O3bssnvhsnvhnnvhnsnshhnshhnnvhsnssnnvnsnhhnhshnvhnhhh+<<O<O$&-X ",
+" *@OOOO36shvnnshhnvnshvnshvnvnhnvnhvnhhnhsnsvnvnvnnhvnhhsOO:;ahO<O ",
+" c%-&OOObnsnvnvsnnvsbnjsnsnshnnvhnnvhnvsnvnhnhnhnhnnvhhMa;O6MaOid ",
+" =@O24aO-O6hshhdhMhynOoOOo33jsnnhhvnnhnshnhvnhsvsvnhnhhhMh4Mh6-&M ",
+" XO;$555$M#MMdMMM5MyM55$#M44+>o63+nXnsvsnshsnNhnhnhsssNshvnssho-jyXjCh ",
+" OO*Myhd5yMMMhyMZM5MMyM5MyMy5555*$OOOObshnvnhhnnvsnvnvnshnhsNhhObhiO-O ",
+" XO155Myh5MyM55Myh5MyhMMyMMyh5yM5M55$6o-Xhhnhvnhsnvnnsnhvshvnhvnhnho&Oa ",
+" toO*Md5hMy5syMhyMhyMh$fX6y5MhyM5MyMd55546MdhvnhnvhnhhhnvnnvnhhnhhhMiOxj ",
+" yOO55MyMyh$$oOoX5yhyoiiOO$5yMMyMyhMMMyM55MMynMvnnhsvnvnnhvnsvsvnhvnX-OO ",
+" 6Ow5Myh.MM3OO+O35M5+O55*-X5hy5hyM5My5MMyMy5MMyMMsvsnvnhhhnshnshnvnhMi<Oobv ",
+" 3O85ysMyMX<Ow55O5yh3*M5M,4yMMyMMyMys5yMMMh=h5hyM5shnnvnvnhvnhsvnnhvnhiO-O< ",
+" OuMMhy5M54O&M55+MM5aM555i*MMyM55hyMMyhMyMyhMy5hyMdhvhnhnhsnhnsnvhhnvhMBX6h ",
+" M,#5yMMyh5%4.MMyMyhM5dhyX655yh5yh5MdMM5ys5h5ys5yh5MdnsvnhNnhvnssnvns633Xhhd ",
+" $O*5hy5hyMy5MMyh5h5M5hyM55hyMMyMMMyMMy5hMdyMMMyh5hyhhsnvhnnvnhsvsnvh3OOOObny ",
+" $O555MyhMyh5yhMyMyhyhchyMyMM5yhyMyh5yhM55Mh5dMMyMyhMvnnnhvnnhvsnhnnhh6OO-:O ",
+" +2MyMyM5yMhyh5MM5syMyhyM5hyMyM5M5MMyh5Mys=M5hy5hyMhynvhnvnhnvnNhnvhnvhM64+o ",
+" $1.hyhyMMyMM5yMyh5MdMyh5yMMyhyMyMyMhyMyh5MMyMh5yh55hhnbhnhvnnhhnhnvnnhhhd ",
+" +4y5M5MhyM5MysyhyMyh5MMyhMyM5hyM5hy5hyMMdhyMMyMMhyhyhsio6vnhnvsnvhnh6bbhy ",
+" f*MyMyM5Myhyh5M5hyh5d5MMyMMyM5Myh5hyhMyMMyMyMMyh5hysMhh6OObshnsvnsssOOOo% ",
+" O$5M5syMdM5MMyMhyMMyMhy5sy5hyMyhyMyh55sy5hyMMyM5MyM5nvhsXiO6svsssh6&O&-&6 ",
+" 355yh5Myh5yM5hyMM5dh5MMyMMdMMyh5hyh5dM5MdMhyMMyMyh5yhnb6hh6ohsvnhbo&->-O1 ",
+" OM5hyMyhMyMhy5hyMdMMdMyMhyM5yMMy5hyMhyMyM55hy5hyM5MsyM6oOohhhnshho<Orc7 ",
+" o.5ys5MyMMyMMdMM5MMyMyhyMhyMMy5MyMMyMMyh5v=hMyMh5d5ynhhX6O6hvnsvoO<O7 ",
+" OhyMMy5hy5hy5hyMyMyM5hyMMyMMyM5Mhy5sy5MMyMsy5MMy5hyhMdhhhhhhnhh6O<Ow ",
+" O.h55MdMMyMXji35Myh5MX6%5MyMMyhyMMyMhyMyh5yhdM5MyhM5ynvnhhvnhvsiO-1 ",
+" O5M5dM5dMM5+-O<+M5MvM<,i@MMy5hyM55sy5hyM5MdMM5dhMyM5dMhhsvssNsbO;* ",
+" O$55MMyMM5MaOqOOM5h5$O2aO4d5sy5hyM55hy5hydhyMyMMysy5hyhMyhvshn+O. ",
+" o*MyM5hyMyM+O+O-.dMy$-O2Ow5M5MM5MyMyMMyMMM5Myh5yh5MyMMyMh$63OO,+c ",
+" >45MMd5hyMM%&>kOMM5h5;<;<oMyMy5d5hyhy5hy5Md5MhyMMd5hy5h$oOO&,<<-o ",
+" +1=M55dMMyMMO;;w5yM5M#>O<a5MyhM5dMM5MyMMy5MyM5h5yhM5MyM6OO<O#%4&OO ",
+" +Ohyhyh55My5qO>iXhMyM=5wa$MyM5MyhyMMyMMyhMyhMyhyMMyhyhy5*4+55M*;-& ",
+" 2ch5MyhyX63O<;OO%MMdM55=M5MyMys5MyMMyMMpMh5yh5MyMMyh5h55555yM5O&- ",
+" O3.hyM54OO&>k;k-6y5MyMyMMd5hdM5MyMMyhMyhMMyh5hyM55hyMhyMyMyMM.OO- ",
+" OO4=h5bOO<;2*q545My5h5MyMMyMMyh5MyMM5yh5yyhyM5hyhyMMyMM5Mys5yhO-1 ",
+" <O+MMy4&&a$555MMy5hMMy5sy5sy5MMy5hyMyhy5MM5hyhyMMM55sy5MyMMyM5O-$ ",
+" O;%55MXO>c5yhyM5MyMy5hyMMyMMyM5hyhM5M5hyMyh5hys5yMyh5hyhM5MMy$O,% ",
+" X,45hy5$OOXyM5MMy5hyMy5hy5MMyM5MyhMyMyMyMMM5hyM55hyMMy5syMyMyM5O-= ",
+" +>cMyhMMO>5h5dMyhMys5syMhyM5Myhyh55hysyh5d5yMMyhyhMyMhyhM5Myh54O1 ",
+" @4d5Mhy5#&6%MhyMMyhMd5sy5hdMdM5MMyMyh5MhyhyhMyh5hy5h5MXM5Myh5M3&5 ",
+" i.h5yMMM5@&4.MM5MMM5X$5MyhMyh5yh5Myh5dM5h=s5MM5dMh5yh&Oo+%M5$b<28 ",
+" ;M55h.MyM5OO6$5Xyhy5+XMyh55MMyMMy5hMyMM5MM5hyMdM5Myh54O&O34fo-,# ",
+" o5MyMM%MM%$OOO$M$5XjO55MyhM%MMyXM55dX5yX5$Myn%MMM.h*ho-O&O&-O:1 ",
+" >d5h$y5hyM5#OO&O33OOa$M*h$yhy5X5Md*MMMby5M5XMd5MpM5MuOk;1;;;2 ",
+" aM$55hy$h5M.5+O-&OO<w5Myh5h.hyMM.h5yM55h$MpM5MMynM$jO<;8 ",
+" r5MyMyMM5My5M55*11a#Md%h5hyM5MMyMMyX5Md5M=ny5hyh%5X&-& ",
+" a$MhM5MMdMM.MMM=M5M5M5vM5MhyM$5MdM5dMMyMMM5hyMMM$3,-1 ",
+" -+%5MpMy$h5dMMyhMyhM5dMh5%MM5yn5M$yhM5XyMMyhMMyjO-18 ",
+" uOOX5M5MM5MM$5hM%M5$yh5$dMyMyh55MyM55MyM5yhyM5MOO1 ",
+" <O&+5ZM5yMyMM5dh5dMM5yhMMMys5$dMM%dMys5dM5MyX6O; ",
+" <OOO6Xyh5X5hpMhy$M$y$5hy5X4@6XM%MM5h%MM$d5M$O& ",
+" <&OOO@.h5$5h55hMooiX$X3oO,OOa.MdXM5dM5MMMyOO; ",
+" ;k<OOX$hy%hZ5M.1O-O<O&Oa>O+M$MMy5h$d5M5XO- ",
+" ><O:o@6$MM%yh5$4aw#*5%5#55yM5hyh5MMyji<; ",
+" OO&<O&4XXhM55555M5M5MyMMhy5XM5Md4OOO ",
+" O-,-O&>$$5dM5$yM%h.M.syM5$yXiO<; ",
+" 7w1;OOOoO@@636X$h%MMMMd5MM4%%* ",
+" #aO&O<,OOo$5yh%MdXa5y5t ",
+" =#VVi-O44*MM$MXXOOinnvdy ",
+" .ViV-V-&OO,ooOO<OiiiVi3h ",
+" =uOiViV-;-<<-OOOVOi-VViiO,6 ",
+" yOO<VV6VV-;<;2>-k--VViVVVO&i ",
+" %O<kV6VVVVVV---2-VaViViVixO- ",
+" $O<k;V6VaVV6V-V--k-kk;-OV--&i ",
+" w:;-k--;VVaVV;kk-2xaVVVViV&-x ",
+" OO<-VVaVV---;-k-VVVV66ViVi-&O ",
+" O<;VV6VVaVVVVkk-aVV6VV6VVV<-O ",
+" #-kk-aVVViVViV-;<-;-V--V-V;--> ",
+" +O<---;k--ux--;--VVV;6V6V6VV;O ",
+" ukkVaVVxaVxaV--kVaVV6VmV6V6V<o ",
+" O;-VVaV6VVVVVa<k-VaVVVV6VmV6xO ",
+" Ok-aVV6V6V6V6Vk-kk<2k-aVaV6V<O6 ",
+" h,kk-VVV6V6V6VV;<VaVVaV-V--VV;-$ ",
+" @kkVVV-2k-k---k<-aVV6VmVV6V6V-:n ",
+" hO-;V6VVVVVVaVV2kk-aVV6V6VV6V6--+ ",
+" O>kx6V6VV6V6VVa--kk--;V;VVaV6V-Oi ",
+" O--rx-VaVVaViVVk;kkk--kx;---Va--O ",
+" O2;x-;k-k;---VaV<;-k-Va6VaVV;--<O ",
+" x-<aVVVVaVVaVVV6-<k;VVVVVV6VV6V;O ",
+" ;;VViVaVV6VVaVV-k;kk-VVa6VV6Va-O ",
+" +<V6V6V6iViVVaVaxkk;k-kxkk2x2xkO ",
+" wkk-VV6VV6VViV6VaV;x2-11-;xk-<;< ",
+" O--k-;--2x2---V-Vax;#cM5*O-k;17w ",
+" >;V6VVVVV6VVVa---xO-$h*5M;2;-%tc ",
+" M&VVV6VVVV6VaVVVVaVV;M55M$O22O*%t ",
+" wO-V6VVaV6V6VV6V6ViVOM$MM=a<O:-oj= ",
+" o&--k-VV2VVVaVVaVVVV2$5d5M%4wO2-O. ",
+" $OaVVi-axV-iV-;V-a--V-$M5hMyMM+a<;$ ",
+" r-2iVVaVVVaVV6VaVVVVV,4hM$5M4O>:;-$ ",
+" XO&xa6VV6VVVaVBVV6VaV2-#5X35Mw+-;:;8 ",
+" ==2;kxVV6V6V6V6VV6V6VVV&6$4OuM55*;;O ",
+" yM*wO;<;kx;-axaV6VVa-2-k-,$$-O$5M5+O< ",
+" ydXX =4O,,O;k;x;k-;<-kkk<;-kx;k<Oi5O&O$55#-O ",
+" jOOoo&OOiioO<>ww1-k;k;kkkkk2xrxkk;x;k<2$O-&ooXOO; ",
+" 3@#%=8%*>OOO&O1c=8z;;k;kk;k;-k-;k;kk<;k-+-<O<O<O-w ",
+" =f%8t=t==c=8.+O<O1==.+<;kk;kkkr-k;;<k;kk;<-&k-;<;18 ",
+" y+=t=t=t====cec82OOOO<kk<2kkk;kk;<kk;kk;<;-k;;kk-.= ",
+" ow=t==t=t=======.<<&-;;k;k;k;kk;<;kkkk;kkk;;<k;k;1. ",
+" ,4=ytt==y======.O<O>*888q#12kk;kkk;kk;kk;kkkk;<;O<Ob5 ",
+" ,1t5ty=t=t=====oO&2c=tt==c=88*a;;k-aak-;<;k;z1O<k;<<o$=5M ",
+" +O=t===y======$O&-#=t===t===tt=c7k;aaVax;V;k2><r-a--&-OoOo6My ",
+" d $%+O+e==t=tyt==yo,Ok7===t==t=t=tt==%-<;aaaaaa2--;Vaaa-<<O<&O&O6= ",
+" O&O-OOO<O3$===y=====>kk-+==t==t=t====ttc1r-aaaaaaaVwVaaaa;k-<<OxO-Oo6. ",
+" 3,,O<&&k;OO@$..==y=$O,;kO%====yty=t=t.t=.O<x;k-k<--k;k-;--aq;<k2kk2*O* ",
+" +O-&k-2;11OO&,Oob+f.2;<;<,+5y=t=====yt=t=82r-;k<;k;k;-;-1qz=1;>8q1q= ",
+" 2OO&<OO&O<;<;-&+t===t=t==t==t=c%8w#7w#7q88c8ctt.O-7 ",
+" 8qw12>;;<;k&-OX==ty===ty=t=t=tc======t=tt=t=tc# ",
+" c2;;:,O%=yt=yt=t=yt=tt======t===y==t=t ",
+" q7>;OOOO,oooo+++u++++1+++w##4$== "};
--- /dev/null
+/* XPM */
+static char * hobbes[] = {
+"108 214 62 1",
+" c #000000000000",
+". c #FFFFCCCC6666",
+"X c #FFFFCCCC9999",
+"o c #FFFFFFFFCCCC",
+"O c #CCCC99990000",
+"+ c #999966660000",
+"@ c #666666660000",
+"# c #666666666666",
+"$ c #999999999999",
+"% c #000055550000",
+"& c #CCCC99999999",
+"* c #FFFFCCCCCCCC",
+"= c #FFFFFFFFFFFF",
+"- c #EEEEEEEEEEEE",
+"; c #BFBFBFBFC0C0",
+": c #333333330000",
+"> c #999966665252",
+", c #AAAAAAAAAAAA",
+"< c #CCCCCCCCCCCC",
+"1 c #CCCCCCCCFFFF",
+"2 c #555555555555",
+"3 c #666633330000",
+"4 c #25256A6A0606",
+"5 c #FFFFCCCCFFFF",
+"6 c #91917B7B7979",
+"7 c #808080800000",
+"8 c #DDDDDDDDDDDD",
+"9 c #FFFFCCCC0000",
+"0 c #14141D1D0000",
+"q c #333333333333",
+"w c #CCCCCCCC0000",
+"e c #666666663333",
+"r c #666699996666",
+"t c #CCCC99995E5E",
+"y c #FFFFFFFF9797",
+"u c #CCCCCCCC9999",
+"i c #CCCCCCCC3333",
+"p c #999999990000",
+"a c #666600000000",
+"s c #9999CCCCB7B7",
+"d c #CCCCCCCC6666",
+"f c #9595A6A62C2C",
+"g c #999999997C7C",
+"h c #FCFCFFFF6464",
+"j c #666666669A9A",
+"k c #CCCC99996666",
+"l c #666699999999",
+"z c #66669D9D3C3C",
+"x c #BABAFFFFD7D7",
+"c c #D2D266660A0A",
+"v c #FFFF99990000",
+"b c #FFFF99993333",
+"n c #FFFF99996666",
+"m c #FFFFCCCC3333",
+"M c #FFFF9999A2A2",
+"N c #CCCC66666666",
+"B c #CCCCFFFFFFFF",
+"V c #141475757575",
+"C c #FFFF66660000",
+"Z c #CCCC9999FFFF",
+"A c #C5C51D1D0B0B",
+"S c #99996666CCCC",
+" .X ",
+" oO+@@@Oo ",
+" o.+#$@%@@& ",
+" *@@ =-;:@@X ",
+" o@>--==->%@, ",
+" ..*+@<===-=12%O ",
+" o.O+34%@@:5---=-o3@6= ",
+" O7@@;$@%:@8=====;:@+= o ",
+" o9%@;--=$@@:;=o-=-=@@@= ",
+" *0@;--=--1q@7*-=o==13@- o oo o ",
+" w%,-=-=-=->qer=-=o-=$@t==o=ooyywwuoo ",
+" %75--=-=-=16%@.---=--@@=o=-oip7@%a@oo ",
+" @6--=-=--==-$e6===-=*7@8=ow3>---;7@@i o ",
+" 8@@8=----=------=*o=--s0O8d@71---=-1f@i ",
+" +@g---o-o---=---=--=--@%@3@1=--=*==877 ",
+" o 1@%7*-----=--=-=-=o=-=1,@2>=--=-=--=g7 ",
+" oyyppw 8g3@7u*--=-=o-=o=-=o=-=51---=--==---p@ ",
+" oyhhoo=o oyp%3@@w $2%03%7*o-----=o=-=-=*==-=--=--o=-8@@ ",
+" oy@%@po==o=oy%7$<$>%8 O@@:32%@%78=-=-=-=o=-=o=8=----o=o--o7:; ",
+" o7,8$@7oo==o4+<=-=-gw u4@61j266;<--=o---=-=-o=--o=--o=<8-<@@; ",
+" op8=-=8@7=o-p@1=-=--<@ X@@;---5-=--=-=----o=o---=--o---o77f761 ",
+" p8-=-=--f@u7>-=--=o-*@ od@31==-=--=-=---o---o=o----=-=-o-7e- ",
+" t-=-=-==1e:@;=-==-=-up ;:@<--------o----=o=---=-=---o=-8@> ",
+" ;=-=-=-==k4e5==--=--7< @%f8------Xud---o=o-=------=---u%, ",
+" O-=-----=1e,==----=dp l@37*-o-8d7%3+io---=--=o=o=o=--z+ ",
+" xpd o4-=-----==-==-=---of@u 8@%@zgkp7:@#e%@k=-----o=-=o-*d7#1 ",
+" <@3:d17X=o=--=o-=-==o--=8=1Oo 1j::@%@%+1 ;@%o--o=o=-----z4+8 ",
+" x7@6@%urg==o=--=--=o==o=oO7;$ ,,,,11 5 ,@&=-=o-----=u7%1 ",
+" f71=$@3@0.o=-------=-o=-=1<z@wwh 5 * * 6@o-=---=o=--@+ ",
+" @;=--,e@:#==--------==o=-=-5<@@:@7wiyhoyoo <#5=o-=-o=o-u@, ",
+"<@<--5=1#3@=o------=o=o=---=--;-1g@0@::%@7777p7pOwiidX ;@x-*=o-=--=$3< ",
+"x@<=---=1,8-=ooo----=o==o=--=-5-o@@:@OcOcO+@@:@%@3@@@4@@ 7a3@zu-o*=o<76 5 ",
+"8:u---=-==--dpcp9oo--==-=o=o--=-@@:3OvvvvvO@:@:+bkbkbkk, <@@%%@@3@77@7:< ",
+"x@>==------p37e@@+ =--o==---=-o@%:@cn.viv733:+tbdv.vt.O@g @%e33%3%3%:@%> ",
+" e@u----==k@<-=-5$o---=---=-o-@@%3c.vObv@@%3@bnOvmvObvbk@+ d@@MkN>ee@3#:3; ",
+" d@6----oo4,-=-===-=-----=o=-=%:3@nv.vd+@0@3kbtbbO.vdvbt3e8 yt4@cv.nnknkkn46 ",
+" 1@@f-o==f75--==-=-=o=--=o=--=@:@+vdvn+@0@agvtv.O.vtvOttq+ t@%@:@mv.v.v.nt@1 ",
+" ,@38--876===------=o=--=o--o0@0NnvOp3:%3>nb.OvvOtO@3%32l 7@:::@+Ovdvmvv@6 ",
+" ,e@7d,@f-=--=---=o==o-XX---20@ttbt3%q0@tvdvbO.t7:3%3%%c 1@2q20:@%cObvd@< ",
+" 1@@%@:#--=o=o=o==omw74@u<p:3qkbO%:3q23ntvtOO@@3@2+N>2$ X%32322:3%@@7+@5 ",
+" 1,$2@@ -o=-=o=-ok70@@%@@@qqqc+@:2q:@cdnt@%033+tnnnn@& X%37nkk32:%3%:@> ",
+" 5 #@r-=-o=-.w3@,11;,666622%@:::q2>nOO@:3%+knbt.v.3< 73@nt.vknkc>@3q ",
+" 12@+dy O@%@85 5B51,#22:ktk+:::@+nbO.vvdb:k @%+vmv..tv.nkq> ",
+" u@@33@%@@;1 51,@3@:%3q2cMtb.Obvvd36 i3@+nb.vvmbO.@21 ",
+" 16#%@@#< B8 16@q3q:tnOmbvv.tO@@@ @@0@Oiv..bO.c@$ ",
+" 5181 u%:2%qenb.vObO+@:3:2< O@023@tOOvO.c@#5 ",
+" 5$@3n.v.OO+%30q2321 X73@kn>%23%.vp@,5 ",
+" 12@tvdvc+%3:2ck@%X g@%tntM3203@O@71 ",
+" k@kvv7%:3q>knn+@; *w@3cn.vdc:2:3%e1 ",
+" =1@+k@%32:+kvdO>3k Xc73@+kmO.vk2:2233u ",
+" :@:@:::2:3%3@@:6 O43%:@kbmOvt@3q02q> ",
+" 8@@0@:q:2:qq:3:03+ 1@%3:3@OOvkbkq232#< ",
+" +%02:2:q:2:2:qqq225 O:::::3@tnmOk@:j15 ",
+" 1@2:2:q2qq:2:2:3:@ u@:22:2q:%Oc.n>3 ",
+" g3q:2q3232e#3##33 X@3%cn>@:2:%7ct7$ ",
+" 5V3e>>>ckkbknnn>4* g@%+b.nk>3:33%@:g ",
+" o 7%Nnn.tnvkbbdbO:8 od3:>nkv.v.t>@:3026 ",
+" y o g@k+.Onbv.vmCbk%k u@:@c.v.vbvnb&>qe, ",
+" y+o=o o9 d@@@cb.O.vOvmvb@@kp@3%+nOmvvmvbbbf2Z ",
+" k@+o=o *7 g:3vdvt++Op+tk>:%@::33dbvvivvdvk3g ",
+" O%@&==od6 *@%+nc4@@3:3@%@0320q2:33ptbv.vvd@>5 ",
+" e@67*--,k-87%3kO@%:3%:%:3::q:qq:q:%:+OOvv.c3< ",
+" o@#5r;=*z,u73@@nt3:2032:::2:2qq232:3:%@ckvO@6 ",
+" <@6--fdB@;;e>,@k@%23:2qqq:>#q:+k&>2q23:%7O+%5 ",
+" o oX7%;--1p@@15---@3#;622:2q2q:q22knbnk+2:q3:%@# ",
+" o o 1<5=-=-;;*===-5<1=1$:#ckNq2q3kbO.tvXn>22q3@& ",
+" o ooyooh++p<=-=-=-=-==-----=--<@;*.b7q:2Nn.vObbO.nnf%2Z ",
+" oyyiwpp773e#6@@do=---=--o=-=------=-.f@q3@kvO.vmv.Ov.>3$ ",
+" yw@%@%@%@:@1--1<g<=-=--==-o---=-=o--y@:::2:kbvO.vvvmv+@65 ",
+" yp@%@@$6>:@:u--=-=-=--o=-o-=--=o------;%32::@+dbviv.vk@@8 ",
+" 7%@611*18,3@#--=-----o-o-----o----=--od3q:qq:%Akvv.Ovp@, ",
+" ha@;1<u;&<<8<@3$--o--.%%@#=-=o--o-----oc4%Nnk@30:%34tt+%1 ",
+" 33;8<f3@%@k&8$:+--=-=<#e3;o=---------=k%@+ndnn6323:%3@%e* ",
+" 7%#1<+:@0@:%6;,@25--=o--5r<5=o------o-.4@+ndvObbk+e32:321 ",
+" u%3,*g%@:2qq3@$,:%*------B;@*o-----o=*d43@knv.bmkbkn&c#q> ",
+" 7361;@3qq232q:@:2@1---=--o+@B*=-----.7a@:+nivOmvv.vObk@#1 ",
+" 8@%65g23220Vq:V:234*=o=o-=8@,-=-o=o-=g:@:%:@vtmbv.vO.n73< ",
+" u%@;8@:2:2202qq2:2j------o*;------=oX@%:33q%@kbivvt.v7@65 ",
+" ,33g1%2:2q32qq2qq3<---o=--gk---=-=*k@%@c#qq:3@iC.O.vO@3@ ",
+" d::6<3@qq2qq2q322#1==---ocr1=--o-op@%+knt>@::3AtvbOb7::e8 ",
+" ;q3@$2qq2qq232q2:<-*o=--u@;=*o=*=*r:+kbOnnNe2q:%7Ont%3e%k ",
+" 8@q23:22:2:22:2q,---*=-=-k--=--=X7@:+bnmvtnk+@q@:@7@3e>3#8 ",
+" =$q2:2q:2:2qqq#s5=--=o--------=<74:3%nObvv.bnN23%q3:q0@:@%m ",
+" 88@:2:2qq2q2#,5-=-=-uXiX8-=---X7:@::2+.vtmvt.vk+e3q2:20::@% ",
+" x u71j32q2232>1--==--->%@8----=*7:@0eq:@cv.vOmvnbnn>q@k>#2:37* ",
+" -u@711;,>jZ1=-==-----8@;=----X7%@0>n%3%@kvb.OO.t.v72$*.On>%3; ",
+" -#@p=5=--==--o=-----7g----=*7%3:+knkq:37tbOv.v.vk@38y.+kn>:@. * ",
+" ;@@;=-=----=-----oo>--=--X7@:%+Nbbt@3%3@kbbOmObt@;-8.77On@:@cO+c ",
+" $:@o=--=-=-=-=o==$5-=---z@::+c.v.n>23:%cdvmbvd+@1---u@ttkq3%:@c ",
+" @%>--=o=o----=o-u1=---.@%@3knv.Ovk@03:@c.vtvO@,----yc@++qq2%3, ",
+" 1>%7d*-o=-=o=o8p@-=--=g%@:ebvdvvin>q:2:@c.vnt0*=-=---<l66j62@& ",
+" ge#7fk-=-=oO7%e=---.43:2@kbv.vvOn@2:3%@OnO@31=-o----5-B51g@1 ",
+" $;<---o=-86g5=--=r@q2::cdvv.tvnk3q%3:@tk3@=o--=---=---=60Xo *X. ",
+" p@1=-=--=-=--o--.%3qq2:%Akvv.Omvk@3q::%@0;----o-------*s@#kO+73+ ",
+" 1@7*=o=o=----*o=r@3%22q3%+O.ObvtnN22q%203g--o=*o=*o-8oB5,#6$;@@& ",
+" w3@;=--=o=---=-*70:23:2:3%@c.vt.v.c@q2::265=*--*-----8----5-,@,5 ",
+" 1;18X-o=--o---u@3:2:q2:2:::@+O.O.vbkc>q5-=--o------=-8---=-87@gkbkX ",
+" u@%p*-=o=--=<32:>>23qq:2:3%@cOvbv.kn>-------o=o---8=-o=8-=1;#66;+v ",
+" d3@@e8=-=o==od::2knk%32q32:304@ptbv.O1=--o----o8=o--8--o--8=--= ;,5 ",
+" <3@%>;--o*-o=5<2q3Onbk#:2q2q:2030@@7++7p*o=----8-88o----------=-,@< ",
+" e26 =o7@---=u@@:kbbnn>@::2::20%3%30@%e<----o-----8-----=-=o--*z1 ",
+" $1 $@7*----#03v.tmvnk>2:2q:q3q302:3%p--o---8o-o=8oo=-oo=*-=-&- o * ",
+" u7@2-=o--p@:kvvbivbnk+e3q2q202:qj3%8--------88---o--=oB-*=--d+Od* ",
+" ;@,7--@X-13%cO.vvv.v.nnkkN>>>>c&6@3----o--8o---------------=5-e@* ",
+" pe 18<,-=*%3%cO.vbvmvvbnOn.vnndv@j65=--------=o-----------=-=-z< ",
+" g$ 7-=--<23%OvvdvvO.bivmvnO.c@e<k=-o---o-=----=---------o=--1e* o ",
+" 5 u7 <@@:+nv.vmvvvtvtO+@@3Sg1-=--o--=o--=o-----o=o------d7r ",
+" <@ 1#:@7OOmvO.nO7@%@::3&r*-o-----o=-----=o=o=-----o=-6%@X ",
+" ; <@:3@Ob.O+73:@3032Nu>==----=----o=-o-=o-o-=--=8-=-,@%u ",
+" ;2%3@@@3@:%q:q3ec.n&----o=o--o=-o---o----o=-o=----1@3. ",
+" ;@:3@::03:2:2>k.vk;=-=o-o-----=--=o----=-o-----=--<@@X ",
+" 1j2qq:2:q@+kb.vnf<*o-----=-----------=---=--o---=*8>+X ",
+" 1g22:2Nknbbvdvc1p5=-=--o=-o=--o=-=o----o-=--o-y9v.$5 ",
+" 5,63%cO.O.vnfd*=o---o=--=o--=--o=--=o----o=--9.bnX ",
+" 5<f:@+O+@@3@1=----=o--==o=o-=-----=-=o----o.9v..M ",
+" 1#3@:@%@+*o-=o----=-o=---=-o=o=-=---=-=-yvivv;.. ",
+" 57:@02>M*-=o=----o=---=-o-=-=o---=oo---ymvmvt%+5 ",
+" 16q:3kbX-----o=o=---=o--=----------=-oo..tbk@@O ",
+" f2:k.8-=--=-o=-----=--o=--=o=o=-=o--ohv9vk@3e5 ",
+" ,3@cX=o-=o-----------=--=o=o=o---=--y.vkteq0. ",
+" g@&5-=-o-=-------o=o---o--*=------oh9O@33q2%5 ",
+" k>nX=-=o--=-=o=---=o=--o--=o---o=o-*hvnf@qq2e ",
+" @dn--o---o=o=------o--o=-o=-------oyvd>322:@b ",
+" 7cfu------o---o=o------o-*--o=o*=*-..v7@kN@:l5 ",
+" uu@@#@v-----*=--=o---------=-o=-*=o=-om.t7nMe@@* ",
+" *g11 @#=---==o=o-=o----o------o-=---oymvt+k.O3%$ ",
+" :;*=--o--o=-o=-----=-=o==*=-----o..ntpvk3@+* ",
+" @8=--=*=--==-o=----o=--o-=------ohO9+@7+2:%k* ",
+" <+ -=-o=o-=----=o=o-=--=-=-------omO:@:32:0@%O* ",
+" Xr =----=-------=o=-----=o=o=---ood%3%3%:q20q2 ",
+" 1+8Xoo=--------=o=-------=o=--=o=5-,#32q32q:#+ ",
+" ,f@+-=-------o==o=o=-----=o=o==o=--*gkkkkNe:65 ",
+" @+=o-----=o=---o==o==o=o=-=o----*opv.nv.N@+ ",
+" @6-==--=o==o=o---o=-o=---o---=o--93tv.Ovk%@5 ",
+" ek=-=o=o==o=--=-=--o=-o----=-o-=oi@Omv.nt@@* ",
+" @<---=o=o==o=o---=---=-----o----o90Ovtvmb@%; ",
+" 5g&--=o===o------=o--=o------=--ooX%Ov.bO.+@O ",
+" d7=-o=-o==------o=-=o=--o=o---=*om@+.vmbbk:@ ",
+" 87*-=---=o-----=-o-o=---=o=---o=8o@+O.tv.t@+ ",
+" u@-=o-=--=-----o=--=o-=o-=------dp@@cOttbk@3 ",
+" 4*--=o---=o---=--=--=o=-o=o=o=8@@::%:@@7@:@* ",
+" @,=--=---o=---o=o--=o--=--=o-o8p@:23%3::@::1 ",
+" @p-------=----=o=--o-=---o=---o*k#3#qq:2::@* ",
+" o@+-=-----o=o=--=o=o--o-=-=o-=-o99@knk>@:q3% ",
+" >@=o-----=o=-----o=-=--o---=-oo.b7CdbnkNe%3 ",
+" 7#5=------=o=o=-=---o-=-=-----99vt.vvdb.c@3 ",
+" d@,=------o=-=o---o--=o--=o=o*p+7++.vOmvbvf@5 ",
+" 73<o=o=o=o==o=*=o=---o-=-----=@@%3@Om.Ov.k+@ ",
+" .4%1=o=-=o=o=--=---=o------=o--*@@03+Ob.mOm+@ ",
+" ,%@*o=-=o=-=o----=---o=-=o=o==--*@3%:cdvv.vp3 ",
+" @@6----o=o=-=o=o=o=o=---o=-=o--o94>e3%OnivbO: ",
+" <@3<-=-==o==-o=o=--o=----=o=o=--op7M>:@Advv.+@* ",
+" O%@5=o---=o-=----=----=---=o-=o-h@O.t+:@+ndv+% ",
+" @@#---=--o=-----=o----o-----=o-=O@bvnk20@pvn+%* ",
+" @3<-=-o-=-----o=o-=o=o=----=o=-y+Obiv.+@0@t.@3< ",
+" *%@5----=o=--=o=---o=--=o-=o=-o=i+O.v.OM3%:+O@3< ",
+" d@,=----o=o=o=-o--=o*=--=-o=o=-.+Obv.v.Ok3q%33%5 ",
+" @g=-=-o-=*=o=o------=---=o==--=7Ov.Omvv.k#q23%3 ",
+" d@5-=o----=o------o-=o=o-o=o-=-X+t.v.vivvbO::23% ",
+" p$==--o=-o=---=-o=--o---o=-=--Xf@+cO9vv.v.n#q0@3 ",
+" X>-=-=o-o---=-oo------=o----ooc@@:%@@@kmvdvm+@0q@ ",
+" 7 =-=------=o=----=o--------=*@@::3::3+OvvmOMq2:+ o",
+" 9 --=o-=--=o----=o-o-=o--=----*7:@:q::q%@kvv.O>@qj ",
+" *p7-==---o=-o--=o------o----o=o=g@k#q2q2:@:+O.vbk2qN ",
+" .7@;=---=-----=o------=o--=o--o-9+vbk@32:20q@tt.vp32, ",
+" * *O@@r*--=o--o=o----o=o--o---o--=*m@Okv.N2qq:q@:%bv.>:@& ",
+" Xd77%4$r>5B=o-=o----o-=--o-=o*=-=o--*w0@Ob.vk+@qq2023ktt@2q ",
+" <d7@%4:@k17;==--o--=-o---o----o-=--o---83@a+ivv.k>:2::3%@k>:@> ",
+" up@3%@:3%36k#-----=o--=-o----------=----o7++@3ckmvbk+:q203%@3q21 ",
+" 8p@@:3@03%303%g--oo=o-=-o------o-----o---ov+.n>:%bOvmnk22qq23::2e* ",
+" d73@3>kk+:q:20@6-=--o----=o--o----o---=ooXv%vO.t3%@n.Ovn+%3202:2q; ",
+" 8i70@+knvivnbt>2::qqg=---o-----o----------*.@@Onmvtbt0%7.v.Onf32qqq21 ",
+" 8f@0@:3+ptvbvdbn>2q23@u-=o=-=o-------o=o-*XO@+OnOOv.bk2:3vivv.n>232e; ",
+" d7%3%03033@tkmvbdv>@:2:>=-=o--=o=o----=o*Xp@:@+bdv.mviv03%kvmvO.@:221 ",
+" u@3@+e202:%::OOvivbM>20@4X-o-=o--=*o=o-o*X+@3@03@OvvO.vk2:%vbO.t:@:@8 ",
+" @%+nknk>32:3%:+nvivib@qq2$----=o--=*oo.97@+tb@3%3+ndvv.O3%3k.O+@32,5 ",
+" * *X X :@nO.bbnk#qq3::Odvtvnk2:37----o--oXXvc+@+Omnbt630@Ovv.vt@3:@+@%36< ",
+" uw7:%@@@cO* o o *@c.vObdvnnf3%::@On.Ovb+qq%*ov.kvO@@%@+OOvvbmObO@30@t.Ovt:2:@:3#Z ",
+" <+@%3%3%3@@%7+d*t* u@kvkvivbmOnk22:3@tvvdb&e%3@34:@%%3%@@+@cOO.tbbnk23%.vv.g3:2q3$1 ",
+" 7@43%:@:3kvtc@@34@g X%+nOmvvtmOb.OkAqq@@tnvdvc@0f+@@::@0::::30@@c.Obtn+@3ObvO+:::j15 ",
+" @@%@>eq3:%cvO.bnc@:@@%334OcOO.vbbOvnk>2::OO.vOM233:303q0:2qq3:%3:@+vdvm&3%nvdc@:245 ",
+" 7@:+cnk+023#nbObiv@3:::%:30@@3@tt.vtbnk@3%3kO.vicq%30:qqq2:2:2:q:2:@+vtv.+3t.+%32j1 ",
+" g@0@+nkbk23:@Ov.bvk@%q3%32:%:0%:@@+pbvibk#3:@Ov.vk2qq:23+gc>c>e2:2:303@.tvk2+@:3:@8* ",
+" @%@0@7bkb7:3@tnviv+3:2e>::q32:3:03%@%@ctbk+@:+tvbt%:2>N&nndvknnkcee::%3+niv+@02:2:%@pu ",
+" <%30@::@Onk2q:cmtvk@qq3>n2qe202q:3%3:3@%3@Otk>+btk@3>tknv.Ovv.vO.knkN#3:@7vnnq32$,,,6%@@d* ",
+" d3%3q:30@@+:qq@3+73@:2enk+q>kNc6@:q::::3%:33+knf7:%3nnmOvO.vOvdvvvdvnk>@0@kOO3q,5=---17@:g ",
+" ,@+6:2q:::36,#6q@:@q:@c.nk2:tbknnkN>>232q:::%++@@@37tmOv.vvtvdvvO.ObtvM>@@Ot@2q@$-=-==56%@to ",
+" op+MOk>@qq21 5B;63q2ekOO+:q>dvt.vdvknkk+32:3%@3+:3k.vbiv.OvdCp7+%+7pOtk+>+3c>%36--=--=<@%> ",
+" rttbnn#32e5 5 1$qa@3@:2:@3Otvtvv.tbtnk>q2q03::@vv.tvOcO73%:@03:::@+::3@tn$2:%*----=-637 ",
+" o7cndvO+:S1 5$e:q:#>e:@0@7ckOObdvtkk&g>q2qqNntv.@@%3:3%30:q%3::q@:2Nnic%321==o=o-k4e5 ",
+" o7+Oc@@:@$ 1#:@cnk>:3::%0@3%3%:+p-585;:@kvnp%@:3::%30:23:2q2qq:@tmvg3%3--o=--=1@@ o ",
+" 87@%@332:e1 8>@3n.b7023q@0@:3:@:,---8d@:kd7330@0q2:q#>eq2:q:2:q3kv.+:2#5=--=--*%$ ",
+" @03:02qq3f <>tvke:@,,j22##$$15---=$03@+::%q:q@>>nknknk>>2:234bkb3:@g=o-=o--B@<o ",
+" u@3q2q2q2:3, .OO32,--5-15B5B----8-p@03:@:3qq>NXvtbtntnntn@:2en.O:2S--=--=--oN- ",
+" B2Vq:2:2:@%@ 6:6-5==-=-*B*o---=-6:q:0:::>NO.vtv.vmbvink+2%Adv7238==-=o=o=-== ",
+" t4q2qq2:qq2% 8 8*@e1-=--=-=---8=-o8d%@q2:q2Nk.vvb.OvtvdvvvO::eMOO33Z----o=-=o-=- ",
+" ,232q22q2:2#5 8u@#-=8-=---=8----=--6@q23knb.vvdvvdvvvO.OO:3>nt7325-----=-=o=.s= ",
+" 3V322q2:2:@< <%@-*=u=-o=8o=-------223@vm.vOmvvdvvvdbvt3:@ktf%:@-=-=o=o---=7* ",
+" ;:2:2q2q32%, u@:1-ig=-=o=8=o=--=-8>%23kOv.vv.vvibivtO@03etc@321---o=-=o--w7 ",
+" 1122q2qq2:@@ 1%@7-;+o-=---o=---o-g6,20:++OOmOviv.vkc@03q3eq:288-=o=----=u@& ",
+" 8;3q222:2:@; 8 g@%,;z5=o-=d*=-o=d@< 51;:%@3@3+pcp++7%:3Vqj;1<1---o=-----X7> ",
+" 1#2q:2q3%; 1%:@@@u---o-7-o=u7g5 1,62::@:%3:@:3ej$1---8=--o=-=o=o=7@B5 ",
+" 8 <,j2q2S 8>@0@07-=--*g<d7%e o $@::23l,,111---5---*-==o--=o*771 * ",
+" 5 11< 8uuuu;$:2q3%7dX<8$@@%+1 e:@;115-=*--------=-=o--=o=*7@; 8 ",
+" u8udup%@@%%@@:2:q23%%4@4%@:@lu;8uou<88;@q,5--B--=---------=o-o---i7:%<u*udddXXXX ",
+" 8ufpf7ftd7@@@@@:@:0@@::q::2qq23@%:@:q:30@@@0@@%4@3%kB-pd-------o----oB*---k@%%33@%%@:3@%4%4@+wd. ",
+" up74%@@@2#6e#@:%3%@:@2#j#222:qq20q:3q:2:qq@0:@%:%%3%:3q;u@;-=--=o<d------=oi@@%33%%3%3:%30@:%3%3@3%p ",
+" 6#g$s;1 11;<8111 5 51,,22:2qq22:2qq2:03%03:33%:qq@@%45-----8-@8-o----@@%@##22j##26#6j666#6$$,e+ ",
+" 5 $32:2qqq2:2qq2qqq22q:qq2qqq:@:1 o --87;--owp7@3#; 51 5 5 5 ",
+" ,##6j6jj6$,,;<18111,6j#61,j3%ppudouu8g7f7%:@0>1 ",
+" 5 5 5 1 5s+%@:@0@@%%34@:#$1 5 ",
+" 1<1,,,$$6$2%e;5 ",
+" 1;ee1 ",
+" 5 "};
--- /dev/null
+/* XPM */
+static char * image_name [] = {
+/* width height num_colors chars_per_pixel */
+" 64 75 250 2",
+/* colors */
+"bZ c #000000",
+"b3 c #f8f8f8",
+".. c #a87010",
+".# c #f0c814",
+".a c #a88004",
+".b c #100404",
+".c c #503800",
+".d c #eccc38",
+".e c #101004",
+".f c #f0d014",
+".g c #684800",
+".h c #b08804",
+".i c #f0d820",
+".j c #503000",
+".k c #a87800",
+".l c #684808",
+".m c #d09010",
+".n c #503008",
+".o c #e0a410",
+".p c #805800",
+".q c #f8d830",
+".r c #f8c838",
+".s c #a08004",
+".t c #d0b404",
+".u c #f0d810",
+".v c #281804",
+".w c #d8a410",
+".x c #f0cc20",
+".y c #d8a800",
+".z c #686868",
+".A c #a87c1c",
+".B c #b88804",
+".C c #c08810",
+".D c #a08c74",
+".E c #805808",
+".F c #483000",
+".G c #e4cc20",
+".H c #a4803c",
+".I c #483008",
+".J c #604c04",
+".K c #f4d850",
+".L c #e8b010",
+".M c #606060",
+".N c #a48804",
+".O c #684000",
+".P c #606058",
+".Q c #c08010",
+".R c #201804",
+".S c #745804",
+".T c #a8a8a8",
+".U c #e0b800",
+".V c #805000",
+".W c #685030",
+".X c #f0d818",
+".Y c #a8a8a0",
+".Z c #805008",
+".0 c #201004",
+".1 c #a0a0a0",
+".2 c #f4d448",
+".3 c #403004",
+".4 c #583800",
+".5 c #604000",
+".6 c #785000",
+".7 c #585858",
+".8 c #f0d838",
+".9 c #707070",
+"#. c #a07000",
+"## c #e0b808",
+"#a c #b0aca4",
+"#b c #b87800",
+"#c c #885800",
+"#d c #e8c808",
+"#e c #b48410",
+"#f c #503c2c",
+"#g c #f8b808",
+"#h c #e0c808",
+"#i c #986000",
+"#j c #888888",
+"#k c #784804",
+"#l c #484848",
+"#m c #a07008",
+"#n c #887870",
+"#o c #f8cc14",
+"#p c #181404",
+"#q c #c0881c",
+"#r c #e8a810",
+"#s c #e8cc14",
+"#t c #986800",
+"#u c #503808",
+"#v c #909090",
+"#w c #606068",
+"#x c #704800",
+"#y c #b0b0b0",
+"#z c #f4d028",
+"#A c #906804",
+"#B c #f0b008",
+"#C c #707078",
+"#D c #583808",
+"#E c #404040",
+"#F c #604008",
+"#G c #704808",
+"#H c #906000",
+"#I c #704004",
+"#J c #e8b808",
+"#K c #240004",
+"#L c #c08000",
+"#M c #c08008",
+"#N c #886000",
+"#O c #e0b008",
+"#P c #986808",
+"#Q c #886008",
+"#R c #383838",
+"#S c #e8a800",
+"#T c #e8a808",
+"#U c #505050",
+"#V c #785008",
+"#W c #f8d820",
+"#X c #583004",
+"#Y c #989898",
+"#Z c #303030",
+"#0 c #808080",
+"#1 c #a8a8b0",
+"#2 c #a06800",
+"#3 c #585864",
+"#4 c #d8b404",
+"#5 c #c88800",
+"#6 c #684008",
+"#7 c #e0a000",
+"#8 c #c88c10",
+"#9 c #d09810",
+"a. c #382420",
+"a# c #282828",
+"aa c #603804",
+"ab c #888890",
+"ac c #484840",
+"ad c #906008",
+"ae c #885808",
+"af c #483804",
+"ag c #a87000",
+"ah c #b88000",
+"ai c #c89000",
+"aj c #181818",
+"ak c #f8d814",
+"al c #c08800",
+"am c #e0d08c",
+"an c #e8e8e8",
+"ao c #a06808",
+"ap c #d09000",
+"aq c #d8d8d8",
+"ar c #a87008",
+"as c #d08808",
+"at c #f0c808",
+"au c #a06008",
+"av c #c09004",
+"aw c #a86804",
+"ax c #f0d008",
+"ay c #705004",
+"az c #d89810",
+"aA c #806404",
+"aB c #787878",
+"aC c #b08004",
+"aD c #c89008",
+"aE c #e0e0d8",
+"aF c #e0e0e0",
+"aG c #f0d808",
+"aH c #101010",
+"aI c #d89010",
+"aJ c #402800",
+"aK c #402808",
+"aL c #a0a0ac",
+"aM c #8c6030",
+"aN c #d09800",
+"aO c #b88008",
+"aP c #e4bc10",
+"aQ c #986008",
+"aR c #404038",
+"aS c #d09808",
+"aT c #d89800",
+"aU c #080800",
+"aV c #905804",
+"aW c #202020",
+"aX c #d89008",
+"aY c #b07800",
+"aZ c #080004",
+"a0 c #b07004",
+"a1 c #c08808",
+"a2 c #d0d0d0",
+"a3 c #685004",
+"a4 c #f0f0e8",
+"a5 c #f0e8ec",
+"a6 c #b07808",
+"a7 c #f8d83c",
+"a8 c #080808",
+"a9 c #c4a474",
+"b. c #d8a000",
+"b# c #403824",
+"ba c #482804",
+"bb c #e0a800",
+"bc c #382804",
+"bd c #d8a008",
+"be c #382004",
+"bf c #c0c0c0",
+"bg c #f8cc08",
+"bh c #d09008",
+"bi c #242418",
+"bj c #886804",
+"bk c #e8b000",
+"bl c #e8d008",
+"bm c #bc8c3c",
+"bn c #c88808",
+"bo c #e0a008",
+"bp c #e8e8f0",
+"bq c #a87808",
+"br c #e8b008",
+"bs c #c88008",
+"bt c #e0a808",
+"bu c #201c10",
+"bv c #d89808",
+"bw c #e0c004",
+"bx c #80809c",
+"by c #f0b010",
+"bz c #a07804",
+"bA c #f0e8d8",
+"bB c #2c2404",
+"bC c #885004",
+"bD c #f8d808",
+"bE c #b49804",
+"bF c #484850",
+"bG c #b8b8b8",
+"bH c #f0b808",
+"bI c #d8d8e8",
+"bJ c #f0c008",
+"bK c #f8b008",
+"bL c #d8a808",
+"bM c #282840",
+"bN c #544404",
+"bO c #b87808",
+"bP c #c4b4a4",
+"bQ c #d0a404",
+"bR c #e8c008",
+"bS c #c8c8c8",
+"bT c #d8ac34",
+"bU c #947404",
+"bV c #f8a808",
+"bW c #f0b810",
+"bX c #f8b810",
+"bY c #c0c0e0",
+"b0 c #f8c008",
+"b1 c #f0f0f0",
+"b2 c #0000f8",
+/* pixels */
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZbZbZb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZbZbZbZbZbZbZbZbZbZb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZbZbZbZbZbZbZbZbZbZbZbZbZb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZbZbZbZbZbZbZbZbZbZaHbMaWbZbZbZb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZbZbZbZbZbZbZbZbZbZbZaj.M#w#Za8bZbZb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZbZbZbZbZbZbZbZbZbZbZbZaj.9.9#Ea#bZbZb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZbZbZbZbZbZbZbZbZbZbZbZaW#l#ZajaHbZbZ.bb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZbZbZbZbZbZbZbZbZbZbZbZaHaHbZbZbZbZbZbZb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZbZbZbZbZbZbZbZbZbZbZbZbZa8bZbZbZbZbZbZbZbZb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZbZaHa8aWaWbZbZbZbZa8bZbZbZbZ.9bZbZbZbZbZbZb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZbZaH#v#0aHajbZbZa8bZab#v.1.TbZ.zbZbZbZbZbZb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZa8aLbS#y#0ajbZbZbZ#j.TbGbSaq.1bZaHbZbZbZbZb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZ.zbfb3b3b3bZbZbZbZaqb3b3b3b3bG#jbZbZbZbZbZbZb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZ#YaHa8a#b3.9bZaHbZa4b3bZ#Ya8b3b3bZbZbZbZbZbZb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZa2bZbZ#jb3.9aW.7bZb3bZbZbZ#Eb3b3bZbZbZbZbZbZb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbSajbZ#Yan.7.bbZa8bSbZbZbZbZbfb3bZbZbZbZbZbZb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZb3bZbZbyb0#J#4.ubL#pbZbZbZb3b3bZbZbZbZbZbZb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZb3bZa6bWb0.##haP.G#oaD.Wb3b3bZbZbZbZbZbZbZb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZ.bbn#rb0.xblak.d.d.d#h#haxbL#pbZbZbZbZbZbZb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbc.AbobHbWbJat#h.d.d.G.G#h#h.G#obZbZbZbZbZbZb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZa6bnbobJbJ.f.f.G.d.G#h#h#hbEaS.LbZbZbZbZbZbZb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZayaDbtb0b0bg.Gam#h#h.G.saS#7bdbTbZbZbZbZbZbZbZb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZ.p.ab0.#.8.d#h.G.h#xaSbtbt.Q.0bZbZ#0#wbZbZbZb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbibSad.cbzbU.I.4albvbvbv#8a9#1bfbZbZbZ#0#0bZaZbZb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZbGbGaQ..bdazbvbv.Q.Q.1bSbfa2bfbSbZbZ#0#0bZbZbZb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZbfbfaLad#QaQaQaQa6bGbSbfb3b3b3a2bZbZbZbZbZbZbZaHb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZbZb1a2bfbGaLaLbSbGbfbYa2b1b3b3b3b3.7bZbZbZbZbZbZbZb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2ajaHbZaLb3b3bGbGbGbGbGbSbSaFb3b3b3b3b3b3b3bZbZbZbZbZbZbZaHb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZa8bZb3b3b3b3bGbGbSbfa2b3b3b3b3b3b3b3b3b3#jbZbZbZbZbZbZbZbZb2b2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZbZb3b3b3b3b3b3aqaqb1b3b3b3b3b3b3b3b3b3b3b3bZbZbZbZbZbZbZbZb2b2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZbZbfb3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3aWbZbZbZbZbZbZbZbZb2b2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZbZbZb1b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3#0bZbZbZbZbZbZbZbZbZb2b2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZbZ#Cb1b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b1b3b1bZbZbZbZbZbZbZbZbZbZb2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZbZbZ.1bfb1b3b3b3b3ananaFb1b3b3b3b3b1b1anaFaqa2aqb3bZbZbZbZbZbZbZbZbZbZb2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZbZbZbZ.1.Ya2aFb3b3b3b3aFb3b3b3b3b3b3b1aqbSbfbfbfbfa2b3bZbZaHbZbZbZbZbZbZbZb2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZbZbZaB#yanb3b3b3b3b3b3b1b3b3b3b3b3b3b3b3b3b3aFa2bSbSb3bZbZbZ#ZaHbZbZbZbZbZbZb2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZbZbMbZ#yb1b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b1a2bfb3bZbZbZ#la8bZbZbZbZbZb2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZ#lbZbZb1b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a2aqbZbZbZbZ#RbZbZbZbZbZbZb2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZbZbZb3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3bSb3bZaH#RaHa#bZbZbZbZbZb2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZ#UbZbZb3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3aHaW#Ua#bMbZbZbZbZbZb2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2bZbZbZbZb3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3#Eajaja8bZ#lbZbZbZbZbZb2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2bZbZ#RbZbZb3b3b3b3b3b3b3b3b3b3b1b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3bZbZbZbZ#UbZbZbZbZbZb2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2bZaZbZbZb1b3b3b3b3b3b3b3b3b3b1b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3bZbZbZbZbZbZbZbZbZbZb2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2bZa8bZbZb3b3b3b3b3b3b3b3b3b3anb3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3bZbZbZbZbZbZbZbZbZbZbZb2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2bZbZ#RbZbZb3b3b3b3b3b3b3b3b3b3aFb3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3bZbZbZbZaWbZbZbZbZbZbZb2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2bZbZ#UbZ#Eb3b3b3b3b3b3b3b3b3b3aqb3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3bZbZbZbZ#lbZbZbZbZbZbZb2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2bZbZbZ#0bZbfb3b3b3b3b3b3b3b3b3b3aqb3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3bZbZbZbZ#3bZbZbZbZbZbZb2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2bZbZbZbZ.PbZbfb3b3b3b3b3b3b3b3b3b3aqb3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3bZbZbZbZaWbZbZbZbZbZbZb2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2bZbZbZa##UbZbfb3b3b3b3b3b3b3b3b3b3aqb3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3bZbZbZaHbZbZbZbZbZbZbZb2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2bZbZbZbZaHbZbSb3b3b3b3b3b3b3b3b3b3aqb3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3bZbZbZ#RbZbZbZbZbZbZbZb2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2bZbZbXbZbZ.zbSb3b3b3b3b3b3b3b3b3b3aqb3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3bZa#bZbZbZa8#Z#ZbZbZbZb2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2bXb0bXb0bZ.Tb3b3b3b3b3b3b3b3b3b3aqb3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3aWbZbZbZbZbZbZbZ.MbZbZb2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2azb0.#b0.#bJbZ#lb3b3b3b3b3b3b3b3b3aqb3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3#h.G#o.JbZbZbZbZbZbZbZa#bZb2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2.maz.x#o.#b0.x.LbZa#b3b3b3b3b3b3b3b3aFb3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3azb0#h#h.HbZbZbZbZbZbZajaH.G#h#ob2b2b2b2b2",
+"b2b2b2b2b2b2b2b2asbobybXb0bXbXb0btbZaHbfb3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3bm.#bXat.JbZbZbZbZbZbZbZ.B#h#h.Gb2b2b2b2b2",
+"b2b2b2b2b2b2a6bnaz.L.#.#bobXb0b0b0bZbZbZa2b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3aFbmbobJazarbZbZbZbZbZbZbU.LbJb0bVb2b2b2b2b2",
+"b2b2b2b2.Aa6#8bd#rbWbX#o.#.#.#bob0aPbZbZbZaFb3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3aqbSbmbobHbvaOarbebZbZbBaraibrbHb0bXb2b2b2b2b2",
+"b2au#rby#r.L.L.LbWb0bob0.#bX.xb0b0bRa8bZbZbZ#Rb3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a2bfa9bo#Jbobh#MbOa6a6aCaD#ObWbXbX.#b2b2b2b2b2",
+"b2azaPbybWbWbXbXbWb0b0bX#z.x.#bX.xbJbtbZbZbZbZbZb3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a2bSbmbdbrbtb.aSbhaDaDaSbtb0bobob0.#.xb2b2b2b2",
+"b2btb0b0b0bo.x.##z#z.#.#.#.#.xb0.xbWax.wbZbZbZbZ#Eb3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3anbS.Ha1#Tbb#SbtbdbdbobtbH.xbX.x.#bobX.xb2b2b2",
+"b2bTbWbob0.#bo.#b0#zbXbo#zbobobo.xbXb0#JbZbZbZbZbZb3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3bSaM.Bbd#T#Jbr.LbrbrbWbHb0b0b0b0bXb0b0b0b2b2",
+"b2#9.Lb0bo.#bobobo.#bobo.#.xbobob0b0b0.##rbZbZbZ.Mb3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3bSada1b.bHbHbXbHbHb0bJb0b0.#bob0b0bX.#b0#ob2",
+"b2.m#rb0b0bobX.x#z.#.x.#.xbo.xbo.#bXb0bJ.uaza#anb3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a8bZ#QaibobHb0b0.#bo.x.xb0.xb0b0bo.x.x.#.xbobX",
+"b2#8.obX.#bXbo.#bX#o.#.x.xb0b0.#.#bobobWbR#Oaub3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3bZbZbZaeaibtbWb0.#b0.#b0b0.##obXbXbXbX#zbob0#o.x",
+"b2aIbobXbob0b0.xb0#obo.xbo.xbob0b0bXb0bW#J#daDb3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3bZbZbZbZadaSbtbWb0.x#z.xbX#z.#.x#z.x.#.xbX#o.xbXaI",
+"b2aIbtb0bobo.x.r.#b0b0.#.#.#bob0.#b0.#b0#JaPaS#Gb3b3b3b3b3b3b3b3b3b3b3b3b3bZbZbZbZbZ#p#tbhbtbH.#.#b0bXbXbob0b0bXb0bX#zbXbXbXazb2",
+"b2azbtbWbX.#bXb0#o.xb0b0bo.#bXbXb0.xb0bJbH#O#9#m.3b1b3b3b3b3b3b3b3b3#jbZbZbZbZbZbZbZ.v#maSbtbW.#b0b0bXb0bo.x.xbX.#b0bX.#boazb2b2",
+"azbvazbtbrbr.LbWbXbXb0b0b0.#.#.xbXbobobXb0.L#9aOaJbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZ.FagaSbtb0.#bX.#bX.#.#bobob0bX.razazb2b2b2b2",
+"b2bh.mbhaz#9bdbtbt#Tbr#JbXb0bXbo.##z.#bXbXbtaDar#6bZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZ.cawaDb.#JbXb0.xb0bXbXbWby#raI.Ab2b2b2b2b2b2",
+"b2adaQ.AbOa1bnaDbhbhaSbdbobtbW.#.##zbXby#TaSbOao#GbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZ.F#H#MaNbtbrbWbWbr#Tbtbd.m.Qb2b2b2b2b2b2b2b2",
+"b2b2b2b2b2#Qaoa6a6a6bOaOa1bnaSbtbt#ObtbdaDaOao.V.nbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbebCa6#MaDbvbdbdbdaSala6#Qb2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2#Gad#Paoaoa6aOa1aDa1aOa6ao.p.ObBbZb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2.3#xaoa0aOa1aD#5ala6#maKb2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2#uaV#Paoar#maoad.Z.OaKb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2.n.V#2ara6aYa6aoae#fb2b2b2b2b2b2b2b2b2b2b2",
+"b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2.3#u#G#V.6#x#F.3b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2.3.F.O.Zadae.V#FaKb2b2b2b2b2b2b2b2b2b2b2b2"
+};
--- /dev/null
+/* XPM */
+static char *image_name[] = {
+/* width height num_colors chars_per_pixel */
+" 102 56 4 1",
+/* colors */
+". c #000000",
+"* c #ffffff",
+"# c #f81440",
+"a c #4682b4",
+/* pixels */
+"......................................................................................................",
+"......................................................................................................",
+"......................................................................................................",
+"......................................................................................................",
+"..###################..................................#####..........................................",
+"...###################................................#####...........................................",
+"....###################..............................#####............................................",
+".....###################............................#####.............................................",
+"......###################..........................#####..............................................",
+".......###################........................#####...............................................",
+"........###################......................#####........................aaaaaaaaaa..............",
+".........###################....................#####.......................aaaaaaaaaaaaaa............",
+"..........###################..................#####......................aaaaaaaaaaaaaaaaaa..........",
+"...........###################................#####.......................aaaaaaaaaaaaaaaaaa..........",
+"............###################..............#####.......................aaaaaaaaaaaaaaaaaaaa.........",
+".............###################............#####........................aaaaaaaaaaaaaaaaaaaa.........",
+"..............###################..........#####........................aaaaaaaaa....aaaaaaaaa........",
+"...............###################........#####.........................aaaaaaaa......aaaaaaaa........",
+"................###################......#####..........................aaaaaaa........aaaaaaa........",
+".................###################....#####...........................aaaaaa..........aaaaaa........",
+"..................##################...#####............................aaaaaa..........aaaaaa........",
+"...................################...#####.............................aaaaaa..........aaaaaa........",
+"....................##############...#####..............................aaaaaa..........aaaaaa........",
+".....................############...#####...............................aaaaaa..........aaaaaa........",
+"......................##########...######...............................aaaaaa..........aaaaaa........",
+".......................########...########..............................................aaaaaa........",
+"........................######...##########.........................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....",
+"........................#####...############........................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....",
+".......................#####...##############.......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....",
+"......................#####...################......................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....",
+".....................#####...##################.....................aaaaaaaaaa..aaaaaa..aaaaaaaaaa....",
+"....................#####....###################....................aaaaaaaaaa..aaaaaa..aaaaaaaaaa....",
+"...................#####......###################...................aaaa..aaaa..........aaaa..aaaa....",
+"..................#####........###################..................aaaa..aaaa..........aaaa..aaaa....",
+".................#####..........###################.................aaaa..aaaa..aaaaaa..aaaa..aaaa....",
+"................#####............###################................aaaa..aaaa..aaaaaa..aaaa..aaaa....",
+"...............#####..............###################...............aaaa..aaaa..........aaaa..aaaa....",
+"..............#####................###################..............aaaa..aaaa..........aaaa..aaaa....",
+".............#####..................###################.............aaaa..aaaa..aaaaaa..aaaa..aaaa....",
+"............#####....................###################............aaaa..aaaa..aaaaaa..aaaa..aaaa....",
+"...........#####......................###################...........aaaa..aaaa..........aaaa..aaaa....",
+"..........#####........................###################..........aaaa..aaaa..........aaaa..aaaa....",
+".........#####..........................###################.........aaaa..aaaa..aaaaaa..aaaa..aaaa....",
+"........#####............................###################........aaaa..aaaa..aaaaaa..aaaa..aaaa....",
+".......#####..............................###################.......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....",
+"......#####................................###################......aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....",
+".....#####..................................###################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....",
+"....#####....................................###################....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....",
+"......................................................................................................",
+"......................................................................................................",
+"......................................................................................................",
+"......................................................................................................",
+"......................................................................................................",
+"......................................................................................................",
+"......................................................................................................",
+"......................................................................................................"
+};
--- /dev/null
+/* XPM */
+/*****************************************************************************/
+/** This pixmap is kindly offered by Ion Cionca - 1992 - **/
+/** Swiss Federal Institute of Technology **/
+/** Central Computing Service **/
+/*****************************************************************************/
+static char * image_name [] = {
+/**/
+"64 38 8 1",
+/**/
+" s mask c black",
+". c gray70",
+"X c gray85",
+"o c gray50",
+"O c #bb0000",
+"+ c darkolivegreen",
+"@ c white",
+"# c black",
+" ",
+" ",
+" ........................... ",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXX. ",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXoo ",
+" OO OOOOOO OOOOOOOOO+++++++++++++++++++++++XXXXoo ",
+" OO OO OO OOOO OOOO OOOOOO+++++++++++++++++++++++XXXooo ",
+" OOO OOO OOOOOOO OO.XOO+@@+@++@+@@@@++@+++++++XXXooo ",
+" OOO OOO OOOOO OO.XOO+++++++++++++++++++++++XXXoooo ",
+" OOO OO OOO OOOOOO+@@@@+@@+@@@+++++++++++XXXoooo ",
+" OOO OO OOOOO OOOOO++++++++++++++++++++++++XXXooooo ",
+" OOO OOO OOOOOOO OO.XX++@@@@@@@@@@+@@@@@++++++XXXooooo ",
+" OO OO OO OOOO OOOO OO.XX++++++++++++++++++++++++XXXooooo ",
+" OOO O OOOO OOOOOO.XX++@@@+@@@@+@@++@@@++++++XXXooooo ",
+" OOOOOO .XX++++++++++++++++++++++++XXXooooo ",
+" OOO .XX++@+++++++++++++++++++++XXXooooo ",
+" .XX++++++++++++++++++++++++XXXooooo ",
+" .XX++@@@@+@+@@@+@++++++++++XXXooooo ",
+" .XX++++++++++++++++++++++++XXXooooo ",
+" .XX++@+@@@@++++++++++++++++XXXooooo ",
+" .XXX++++++++++++++++++++++XXXXoooo ",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXooo ",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXooo ",
+" ooooooooooooooooooooooooo...oo ",
+" ..........................ooo ",
+" oooooooooooooooooooooooooooooo ",
+" oXXXXXXXXXXXXXXXXXXXXXXXXXXXoooo.. .. ",
+" oXXXXXXXXXXXXXXXXXX#######XXoooo . .",
+" oooooooooooooooooooooooooooXXXooo . ",
+" oXXXXXXXXXXXXXXXXXXXXXXXXXXooooo . ",
+" oXXXXXXXXXXXXXXXXXXXXXXXXXXoo oooooo ",
+" oXX@@@@@@@@@@@@@@@@@@@XXXXXoo ooooo...o ",
+" oXXXXXXXXXXXXXXXXXXXXXXXXXXoo ooXXXoo..o ",
+" oXX@@@@@@@@@@@@@@@@@@@@XXXXoo oXXXXX..o ",
+" oXXXXXXXXXXXXXXXXXXXXXXXXXXoo o.....oo ",
+" oooooooooooooooooooooooooooo ooooooo ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+/*****************************************************************************/
+/** This pixmap is kindly offered by Ion Cionca - 1992 - **/
+/** Swiss Federal Institute of Technology **/
+/** Central Computing Service **/
+/*****************************************************************************/
+static char * image_name [] = {
+/**/
+"64 38 8 1",
+/**/
+" s mask c black",
+". c gray70",
+"X c gray85",
+"o c gray50",
+"O c red",
+"+ c darkolivegreen",
+"@ c white",
+"# c black",
+" ",
+" ",
+" ........................... ",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXX. ",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXoo ",
+" .XX+++++++++++++++++++++++XXXXoo ",
+" .XX++++++++++++++++++++++++XXXooo ",
+" .XX++@@+@++@+@@@@++@+++++++XXXooo ",
+" .XX++++++++++++++++++++++++XXXoooo ",
+" .XX++@@@@+@@+@@@+++++++++++XXXoooo ",
+" .XX++++++++++++++++++++++++XXXooooo ",
+" .XX++@@@@@@@@@@+@@@@@++++++XXXooooo ",
+" .XX++++++++++++++++++++++++XXXooooo ",
+" .XX++@@@+@@@@+@@++@@@++++++XXXooooo ",
+" .XX++++++++++++++++++++++++XXXooooo ",
+" .XX++@+++++++++++++++++++++XXXooooo ",
+" .XX++++++++++++++++++++++++XXXooooo ",
+" .XX++@@@@+@+@@@+@++++++++++XXXooooo ",
+" .XX++++++++++++++++++++++++XXXooooo ",
+" .XX++@+@@@@++++++++++++++++XXXooooo ",
+" .XXX++++++++++++++++++++++XXXXoooo ",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXooo ",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXooo ",
+" ooooooooooooooooooooooooo...oo ",
+" ..........................ooo ",
+" oooooooooooooooooooooooooooooo ",
+" oXXXXXXXXXXXXXXXXXXXXXXXXXXXoooo.. .. ",
+" oXXXXXXXXXXXXXXXXXX#######XXoooo . .",
+" oooooooooooooooooooooooooooXXXooo . ",
+" oXXXXXXXXXXXXXXXXXXXXXXXXXXooooo . ",
+" oXXXXXXXXXXXXXXXXXXXXXXXXXXoo oooooo ",
+" oXX@@@@@@@@@@@@@@@@@@@XXXXXoo ooooo...o ",
+" oXXXXXXXXXXXXXXXXXXXXXXXXXXoo ooXXXoo..o ",
+" oXX@@@@@@@@@@@@@@@@@@@@XXXXoo oXXXXX..o ",
+" oXXXXXXXXXXXXXXXXXXXXXXXXXXoo o.....oo ",
+" oooooooooooooooooooooooooooo ooooooo ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+/*
+ * BSD daemon
+ * The original BSD daemon is Copyright (c) 1988 Marshall Kirk McKusick.
+ * All Rights Reserved. Reproduced with permission.
+ */
+/*****************************************************************************/
+/** This pixmap is kindly offered by Ion Cionca - 1992 - **/
+/** Swiss Federal Institute of Technology **/
+/** Central Computing Service **/
+/*****************************************************************************/
+static char * image_name [] = {
+/**/
+"64 38 9 1",
+/**/
+" s mask c black",
+". c gray70",
+"X c gray85",
+"o c gray50",
+"- c gray10",
+"O c red",
+"+ c darkolivegreen",
+"@ c white",
+"# c black",
+" ",
+" OO ",
+" OO ........................... ",
+" O OOO.XXXXXXXXXXXXXXXXXXXXXXXXXXX. ",
+" OO OOOOOO OOXXXXXXXXXXXXXXXXXXXXXXXXXXXXXoo ",
+" OO OOOOOOOO OXX+++++++++++++++++++++++XXXXoo ",
+" OOO OOOOOOOO OO.XX++++++++++++++++++++++++XXXooo ",
+" OOOO OOOO OO O O.XX++@@+@++@+@@@@++@+++++++XXXooo ",
+" OOOOOOO O OO O.XX++++++++++++++++++++++++XXXoooo ",
+" OOOOOOO OO OOXX++@@@@+@@+@@@+++++++++++XXXoooo ",
+" OOOOO OOOOOOXX++++++++++++++++++++++++XXXooooo ",
+" OOOOOOOO OOOOX++@@@@@@@@@@+@@@@@++++++XXXooooo ",
+" OOOOOOO OOOOX++++++++++++++++++++++++XXXooooo ",
+" OOOOOOOOOO OOX+-@@@+@@@@+@@++@@@++++++XXXooooo ",
+" OOOOO OOO OOXX--+--+++++++++++++++++++XXXooooo ",
+" OOOOO OOOXX----++++++++++++++++++++XXXooooo ",
+" OOOOOOOO .XX---++-++++++++++++++++++XXXooooo ",
+" OOOOOO .XX------+@+@@@+@++++++++++XXXooooo ",
+" O O OO OO-++++++++++++++++++++++++XXXooooo ",
+" OOOOOO OOOO++@+@@@@++++++++++++++++XXXooooo ",
+" OOOOO O-OOOX++++++++++++++++++++++XXXXoooo ",
+" OOO O- OOXXXXXXXXXXXXXXXXXXXXXXXXXXXXooo ",
+" OOOOO-O .XXXXXXXXXXXXXXXXXXXXXXXXXXXooo ",
+" OOOO-OO ooooooooooooooooooooooooo...oo ",
+" OOOOOO O ..........................ooo ",
+" OO OO oooooooooooooooooooooooooooooo ",
+" OOOO OOOOO oXXXXXXXXXXXXXXXXXXXXXXXXXXXoooo.. .. ",
+" OOOOO OOOOO oXXXXXXXXXXXXXXXXXX#######XXoooo . .",
+" OOOOOOOOOOOOOOO oooooooooooooooooooooooooooXXXooo . ",
+" OOOOOO OOOOO OOOOXXXXXXXXXXXXXXXXXXXXXXXXXooooo . ",
+" OOO OOOOO OOOOOOXXXXXXXXXXXXXXXXXXXXXXoo oooooo ",
+" OO OOOOOO OOOOOOO@@@@@@@@@@@@@@@XXXXXoo ooooo...o ",
+" O OO OOOOOOO OOOOOXXXXXXXXXXXXXXXXXXXXoo ooXXXoo..o ",
+" OOOO OOOOOOO OOO@@@@@@@@@@@@@@@@XXXXoo oXXXXX..o ",
+" OOOXXXXXXXXXXXXXXXXXXXXXXXXXoo o.....oo ",
+" oooooooooooooooooooooooooooo ooooooo ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+/*****************************************************************************/
+/** This pixmap is kindly offered by Ion Cionca - 1992 - **/
+/** Swiss Federal Institute of Technology **/
+/** Central Computing Service **/
+/*****************************************************************************/
+static char * image_name [] = {
+/**/
+"64 38 9 1",
+/**/
+" s mask c black",
+". c gray70",
+"X c gray85",
+"o c gray50",
+"- c #a00000",
+"O c white",
+"+ c darkolivegreen",
+"@ c white",
+"# c black",
+" ",
+" ",
+" ........................... ",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXX. ",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXoo ",
+" .XX+++++++++++++++++++++++XXXXoo ",
+" .XX++++++++++++++++++++++++XXXooo ",
+"-----------------------------------@+@@@@++@+++++++XXXooo ",
+"----OO-OO--------OO---O---------OO-++++++++++++++++XXXoooo ",
+"----OO-OO--------OO--OO---------OO-@+@@@+++++++++++XXXoooo ",
+"----OO---------------OO---------OO-++++++++++++++++XXXooooo ",
+"-OOOOO-OO--OOO-O-OO-OOOO-XOOO-O-OO-@@@@+@@@@@++++++XXXooooo ",
+"OOOOOO-OO-OOOOOO-OO-OOOO-OOOOOO-OO-++++++++++++++++XXXooooo ",
+"OO--OO-OO-OO--OO-OO--OO--OO--OO-OO-@@+@@++@@@++++++XXXooooo ",
+"OO--OO-OO-OO--OO-OO--OO--OO--OO-OO-++++++++++++++++XXXooooo ",
+"OO--OO-OO-OO--OO-OO--OO--OO--OO-OO-++++++++++++++++XXXooooo ",
+"OO--OO-OO-OOOOOO-OO--OOO-OOOOOO-OO-++++++++++++++++XXXooooo ",
+"-OOOOO-OO--OOOOO-OO---OO-XOOOOO-OO-+@@@+@++++++++++XXXooooo ",
+"--------------OO-------------------++++++++++++++++XXXooooo ",
+"----------OOOOOO-------------------++++++++++++++++XXXooooo ",
+"-----------OOOO--------------------+++++++++++++++XXXXoooo ",
+"-----------------------------------XXXXXXXXXXXXXXXXXXXooo ",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXooo ",
+" ooooooooooooooooooooooooo...oo ",
+" ..........................ooo ",
+" oooooooooooooooooooooooooooooo ",
+" oXXXXXXXXXXXXXXXXXXXXXXXXXXXoooo.. .. ",
+" oXXXXXXXXXXXXXXXXXX#######XXoooo . .",
+" oooooooooooooooooooooooooooXXXooo . ",
+" oXXXXXXXXXXXXXXXXXXXXXXXXXXooooo . ",
+" oXXXXXXXXXXXXXXXXXXXXXXXXXXoo oooooo ",
+" oXX@@@@@@@@@@@@@@@@@@@XXXXXoo ooooo...o ",
+" oXXXXXXXXXXXXXXXXXXXXXXXXXXoo ooXXXoo..o ",
+" oXX@@@@@@@@@@@@@@@@@@@@XXXXoo oXXXXX..o ",
+" oXXXXXXXXXXXXXXXXXXXXXXXXXXoo o.....oo ",
+" oooooooooooooooooooooooooooo ooooooo ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+/*****************************************************************************/
+/** This pixmap is kindly offered by Ion Cionca - 1992 - **/
+/** Swiss Federal Institute of Technology **/
+/** Central Computing Service **/
+/*****************************************************************************/
+static char * image_name [] = {
+/**/
+"64 38 8 1",
+/**/
+" s mask c black",
+". c gray70",
+"X c gray85",
+"o c gray50",
+"O c red",
+"+ c darkolivegreen",
+"@ c white",
+"# c black",
+" ",
+" ",
+" ........................... ",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXX. ",
+" OOOOO O OOOOOOOXXXXXXXXXXXXXXXXXXXXXXXXXXXXoo ",
+" OOOOO O OOOOOOX+++++++++++++++++++++++XXXXoo ",
+" OOOOOO O OOOOOO++++++++++++++++++++++++XXXooo ",
+" OOOOO O OOOOO++@@+@++@+@@@@++@+++++++XXXooo ",
+" OOOO OO OOOO++++++++++++++++++++++++XXXoooo ",
+" OOOO O OOOO++@@@@+@@+@@@+++++++++++XXXoooo ",
+" OOOO O OOOO++++++++++++++++++++++++XXXooooo ",
+" OOOO OO OO OOOO++@@@@@@@@@@+@@@@@++++++XXXooooo ",
+" OOO OOO OOO OOO++++++++++++++++++++++++XXXooooo ",
+" OOO OOO O O OOO++@@@+@@@@+@@++@@@++++++XXXooooo ",
+" OOO O O O O OOO++++++++++++++++++++++++XXXooooo ",
+" OOO O O O O OOO++@+++++++++++++++++++++XXXooooo ",
+" OOO O O O O OOO++++++++++++++++++++++++XXXooooo ",
+" OOOO O O OOO OOOO++@@@@+@+@@@+@++++++++++XXXooooo ",
+" OOOO OO OOOO++++++++++++++++++++++++XXXooooo ",
+" OOOO O OOOO++@+@@@@++++++++++++++++XXXooooo ",
+" OOOO O OOOOX++++++++++++++++++++++XXXXoooo ",
+" OOOOO OO OOOOOXXXXXXXXXXXXXXXXXXXXXXXXXXXooo ",
+" OOOOOO O OOOOOOXXXXXXXXXXXXXXXXXXXXXXXXXXooo ",
+" OOOOOO O OOOOOO ooooooooooooooooooooooooo...oo ",
+" OOOOOO O OOOOOO ..........................ooo ",
+" oooooooooooooooooooooooooooooo ",
+" oXXXXXXXXXXXXXXXXXXXXXXXXXXXoooo.. .. ",
+" oXXXXXXXXXXXXXXXXXX#######XXoooo . .",
+" oooooooooooooooooooooooooooXXXooo . ",
+" oXXXXXXXXXXXXXXXXXXXXXXXXXXooooo . ",
+" oXXXXXXXXXXXXXXXXXXXXXXXXXXoo oooooo ",
+" oXX@@@@@@@@@@@@@@@@@@@XXXXXoo ooooo...o ",
+" oXXXXXXXXXXXXXXXXXXXXXXXXXXoo ooXXXoo..o ",
+" oXX@@@@@@@@@@@@@@@@@@@@XXXXoo oXXXXX..o ",
+" oXXXXXXXXXXXXXXXXXXXXXXXXXXoo o.....oo ",
+" oooooooooooooooooooooooooooo ooooooo ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+/* Linux Penguin from logo.gif and logo.txt /usr/src/linux/Documentation
+This is the full-colour version of the currenly unofficial Linux logo
+("currently unofficial" just means that there has been no paperwork and
+that I haven't really announced it yet). It was created by Larry Ewing,
+and is freely usable as long as you acknowledge Larry as the original
+artist.
+
+Note that there are black-and-white versions of this available that
+scale down to smaller sizes and are better for letterheads or whatever
+you want to use it for: for the full range of logos take a look at
+Larry's web-page:
+
+ http://www.isc.tamu.edu/~lewing/linux/
+ */
+/*****************************************************************************/
+/** This pixmap is kindly offered by Ion Cionca - 1992 - **/
+/** Swiss Federal Institute of Technology **/
+/** Central Computing Service **/
+/*****************************************************************************/
+static char *image_name[] = {
+/* width height num_colors chars_per_pixel */
+" 64 38 117 2",
+/* colors */
+".. c #000000",
+"#X c #f0f0f0",
+".# c #b3b3b3",
+".a c #d9d9d9",
+".b c #7f7f7f",
+".c c #556b2f",
+".d c #ffffff",
+".e c #000000",
+".f c #f8f8f8",
+".g c #f0c814",
+".h c #503800",
+".i c #eccc38",
+".j c #d09010",
+".k c #805800",
+".l c #f8c838",
+".m c #f0cc20",
+".n c #a87c1c",
+".o c #e4cc20",
+".p c #a4803c",
+".q c #e8b010",
+".r c #606060",
+".s c #c08010",
+".t c #a8a8a8",
+".u c #685030",
+".v c #a0a0a0",
+".w c #583800",
+".x c #585858",
+".y c #707070",
+".z c #e0c808",
+".A c #888888",
+".B c #484848",
+".C c #a07008",
+".D c #f8cc14",
+".E c #e8a810",
+".F c #986800",
+".G c #606068",
+".H c #704800",
+".I c #b0b0b0",
+".J c #f4d028",
+".K c #707078",
+".L c #404040",
+".M c #704808",
+".N c #906000",
+".O c #e8b808",
+".P c #c08008",
+".Q c #e0b008",
+".R c #986808",
+".S c #383838",
+".T c #e8a800",
+".U c #e8a808",
+".V c #505050",
+".W c #989898",
+".X c #303030",
+".Y c #808080",
+".Z c #a8a8b0",
+".0 c #c88c10",
+".1 c #d09810",
+".2 c #282828",
+".3 c #906008",
+".4 c #885808",
+".5 c #a87000",
+".6 c #181818",
+".7 c #c08800",
+".8 c #e0d08c",
+".9 c #e8e8e8",
+"#. c #a06808",
+"## c #d8d8d8",
+"#a c #a87008",
+"#b c #a06008",
+"#c c #f0d008",
+"#d c #d89810",
+"#e c #b08004",
+"#f c #c89008",
+"#g c #e0e0e0",
+"#h c #101010",
+"#i c #d89010",
+"#j c #402800",
+"#k c #a0a0ac",
+"#l c #d09800",
+"#m c #b88008",
+"#n c #986008",
+"#o c #d09808",
+"#p c #202020",
+"#q c #080004",
+"#r c #b07004",
+"#s c #c08808",
+"#t c #d0d0d0",
+"#u c #f0f0e8",
+"#v c #b07808",
+"#w c #080808",
+"#x c #c4a474",
+"#y c #d8a000",
+"#z c #d8a008",
+"#A c #c0c0c0",
+"#B c #f8cc08",
+"#C c #d09008",
+"#D c #bc8c3c",
+"#E c #c88808",
+"#F c #e0a008",
+"#G c #e8b008",
+"#H c #e0a808",
+"#I c #d89808",
+"#J c #f0b010",
+"#K c #2c2404",
+"#L c #b8b8b8",
+"#M c #f0b808",
+"#N c #f0c008",
+"#O c #b87808",
+"#P c #e8c008",
+"#Q c #c8c8c8",
+"#R c #947404",
+"#S c #f8a808",
+"#T c #f0b810",
+"#U c #f8b810",
+"#V c #c0c0e0",
+"#W c #f8c008",
+"#Y c #404040",
+/* pixels */
+"............................#Y#Y#Y#Y#Y#Y#Y#Y....................................................................................",
+"..........................#Y..............#Y....................................................................................",
+"........................#Y.............6.G#w..#Y.....#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#......................",
+"......................#Y..............#p.X#h..#Y...#.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.#....................",
+"......................#Y........................#Y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.b.b................",
+"......................#Y..#h#p....#w.....y......#Y.a.a.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.a.a.a.a.b.b................",
+"......................#Y..#k.I.6...A.t#Q.v#h....#Y.a.a.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.a.a.a.b.b.b..............",
+"......................#Y..#h.2.y#h#u.f.W.f......#Y.a.a.c.c.d.d.c.d.c.c.d.c.d.d.d.d.c.c.d.c.c.c.c.c.c.c.a.a.a.b.b.b..............",
+"......................#Y...6.W.x..#Q....#A......#Y.a.a.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.a.a.a.b.b.b.b............",
+"......................#Y...f#v#W.z.o.D.u.f......#Y.a.a.c.c.d.d.d.d.c.d.d.c.d.d.d.c.c.c.c.c.c.c.c.c.c.c.a.a.a.b.b.b.b............",
+"......................#Y...n#M#N.z.i.o.z.o......#Y.a.a.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.a.a.a.b.b.b.b.b..........",
+"......................#Y..#f#W#B.8.z.o#o#z........#Y.a.c.c.d.d.d.d.d.d.d.d.d.d.c.d.d.d.d.d.c.c.c.c.c.c.a.a.a.b.b.b.b.b..........",
+"......................#Y..#Q.h#R.w#I#I.0.Z.....Y#q#Y.a.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.a.a.a.b.b.b.b.b..........",
+"......................#Y..#L#n#z#I.s.s#Q#t#Q...Y..#Y.a.c.c.d.d.d.c.d.d.d.d.c.d.d.c.c.d.d.d.c.c.c.c.c.c.a.a.a.b.b.b.b.b..........",
+"......................#Y..#X#A#k#Q#A#V#X.f.f........#Y.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.a.a.a.b.b.b.b.b..........",
+"....................#Y.....f.f#L#A.f.f.f.f.f.A........#Y.c.d.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.a.a.a.b.b.b.b.b..........",
+"..................#Y.....f.f.f.f.f.f.f.f.f.f.f..........#Y.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.a.a.a.b.b.b.b.b..........",
+"..................#Y...K.f.f.f.f.f.f.f.f.f.f.f............#Y.d.d.d.c.d.c.d.d.d.c.d.c.c.c.c.c.c.c.c.c.c.a.a.a.b.b.b.b.b..........",
+"..............#Y.......v#t.f.f#g.f.f.f#X#Q#A#A.f..........#Y.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.a.a.a.b.b.b.b.b..........",
+"..............#Y......#X.f.f.f.f.f.f.f.f.f.f#X#A.....B......#Y.d.d.d.d.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.a.a.a.b.b.b.b.b..........",
+"..............#Y.....f.f.f.f.f.f.f.f.f.f.f.f.f.f.f#h.S.2....#Y.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.a.a.a.a.b.b.b.b............",
+"............#Y.......f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.6.6........#Y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.b.b.b..............",
+"............#Y#q..#X.f.f.f.f#X.f.f.f.f.f.f.f.f.f.f............#Y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.b.b.b................",
+"..........#Y...S...f.f.f.f.f#g.f.f.f.f.f.f.f.f.f.f............#Y.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.#.#.#.b.b............",
+"..........#Y...Y#A.f.f.f.f.f##.f.f.f.f.f.f.f.f.f.f............#Y.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.b.b.b............",
+"........#Y.....V#A.f.f.f.f.f##.f.f.f.f.f.f.f.f.f.f....#h......#Y.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b............",
+"........#Y....#h#Q.f.f.f.f.f##.f.f.f.f.f.f.f.f.f.f.....S......#Y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.b.b.b.b.#.#...#.#..",
+"..........#Y#W#W.t.f.f.f.f.f##.f.f.f.f.f.f.f.f.f.f#p..........#Y.a.a.a.a.a.a.a.a.a.a.a.a.a.e.e.e.e.e.e.e.a.a.b.b.b.b.....#.....#",
+"........#Y#d.D#W.q...f.f.f.f#g.f.f.f.f.f.f.f.f#d.z.p.......6.o.D#Y.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.a.a.a.b.b.b...........#..",
+"......#Y#E.q.g#U#W#W..#t.f.f.f.f.f.f.f.f.f.f.f#D#N#a......#R#N#S#Y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.b.b.b.b.b.............#....",
+"#Y#b#J.q.q#W#W#U#W#W#w...S.f.f.f.f.f.f.f.f.f#t#x.O#C.P#v#e.Q#U.g#Y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.b.b.............b.b.b.b.b.b..",
+"#Y#H#W#F.g.J.g.g#W.m#c.....L.f.f.f.f.f.f.f.f.9.p.U.T#H#z#H.m.m#F.m#Y.d.d.d.d.d.d.d.d.d.d.a.a.a.a.a.b.b.......b.b.b.b.b.#.#.#.b..",
+"#Y.1#W.g#F.g#F.m#F#W#W.E...r.f.f.f.f.f.f.f.f.f.3#y#M#U#M#N#W#F#W.g.D.a.a.a.a.a.a.a.a.a.a.a.a.a.a.b.b.......b.b.a.a.a.b.b.#.#.b..",
+"#Y.0#U#U.g.D.m#W.g.g#F#P#b.f.f.f.f.f.f.f.f.f...4#H#W.g.g#W.D#U#U#F.D.d.d.d.d.d.d.d.d.d.a.a.a.a.b.b.........b.a.a.a.a.a.#.#.b....",
+"#Y#i#W#F.l#W.g.g#W.g.g.O#o.f.f.f.f.f.f.f.......F#H.g.g#U#F#W#W.J#U#d.a.a.a.a.a.a.a.a.a.a.a.a.b.b...........b.#.#.#.#.#.b.b......",
+"#d#I#H#G#T#U#W.g.m#U#F#W.1#j...................5#H.g#U#U.g#F#U#d#Y.b.b.b.b.b.b.b.b.b.b.b.b.b.b.............b.b.b.b.b.b.b........",
+"#Y.3.n#s#f#C#z#H.g.g#U.U#O.M...................N#l#G#T#G#H.j#Y..................................................................",
+"........#Y.M.R#.#m#s#s#v.k#K#Y#Y#Y#Y#Y#Y#Y#Y#Y.H#r#s#f.7.C#Y...................................................................."
+};
--- /dev/null
+/* XPM */
+/*****************************************************************************/
+/** This pixmap is kindly offered by Ion Cionca - 1992 - **/
+/** Swiss Federal Institute of Technology **/
+/** Central Computing Service **/
+/*****************************************************************************/
+static char * image_name [] = {
+/**/
+"64 38 10 1",
+/**/
+" s mask c black",
+". c gray70",
+"X c gray85",
+"o c gray50",
+"O c gray40",
+"H c red",
+"I c blue",
+"+ c darkolivegreen",
+"@ c white",
+"# c black",
+" ",
+" ",
+"OOOOOOOOOOOOOOOOOOOOOOOOOOOOO........................ ",
+"OO OOXXXXXXXXXXXXXXXXXXXXXXXX. ",
+" O O O O OXXXXXXXXXXXXXXXXXXXXXXXXXXoo ",
+" OOOOOOOO O O O O OO++++++++++++++++++++++XXXXoo ",
+" OHHHHHO O O O O O++++++++++++++++++++++++XXXooo ",
+" OOOHHOOO O O O O O O O OO++@@+@++@+@@@@++@+++++++XXXooo ",
+" OOHHOOOOOOOOOOOOOOOOOOOOO+++++++++++++++++++++++XXXoooo ",
+" OOHHOHHHOHOOHOHOOHOHOOOHO+@@@@+@@+@@@+++++++++++XXXoooo ",
+" OHHOOHOOHHOHOHOOHOHHOHHO+++++++++++++++++++++++XXXooooo ",
+" OHHOOHOOHHOHOHOOHOOHHHOO+@@@@@@@@@@+@@@@@++++++XXXooooo ",
+" OHHOOHOOHHHHOHOOHOOHHHO++++++++++++++++++++++++XXXooooo ",
+" OHHOOHOOHOHHOHOOHOOHHHOO+@@@+@@@@+@@++@@@++++++XXXooooo ",
+" OHHOOHOOHOHHOHHHHOHHOHHO+++++++++++++++++++++++XXXooooo ",
+" OHHOHHHOHOOHOHHHHOHOOOHO+@+++++++++++++++++++++XXXooooo ",
+"IIIIIHHIIIIIIIIIIIIIIIIIIIIII++++++++++++++++++++++XXXooooo ",
+"IIIIIHHIIIIIHIIIIIIIIIIIIIIII@@@@+@+@@@+@++++++++++XXXooooo ",
+" OOHHOOOOOHOOOOOOOOO .XX++++++++++++++++++++++++XXXooooo ",
+" OHHHHHHHHHOOOOOOOO .XX++@+@@@@++++++++++++++++XXXooooo ",
+" OOOOOOOOOOOOOOOOO .XXX++++++++++++++++++++++XXXXoooo ",
+" OOOOOOOOOOO .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXooo ",
+" OOOOOOOOO .XXXXXXXXXXXXXXXXXXXXXXXXXXXooo ",
+" OOOOOOOOO ooooooooooooooooooooooooo...oo ",
+" OOOOOOO ..........................ooo ",
+" OOOOOOO oooooooooooooooooooooooooooooo ",
+" OOOOO oXXXXXXXXXXXXXXXXXXXXXXXXXXXoooo.. .. ",
+" OOOOO oXXXXXXXXXXXXXXXXXX#######XXoooo . .",
+" OOO oooooooooooooooooooooooooooXXXooo . ",
+" OOO oXXXXXXXXXXXXXXXXXXXXXXXXXXooooo . ",
+" O oXXXXXXXXXXXXXXXXXXXXXXXXXXoo oooooo ",
+" O oXX@@@@@@@@@@@@@@@@@@@XXXXXoo ooooo...o ",
+" oXXXXXXXXXXXXXXXXXXXXXXXXXXoo ooXXXoo..o ",
+" oXX@@@@@@@@@@@@@@@@@@@@XXXXoo oXXXXX..o ",
+" oXXXXXXXXXXXXXXXXXXXXXXXXXXoo o.....oo ",
+" oooooooooooooooooooooooooooo ooooooo ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+/*****************************************************************************/
+/** This pixmap is kindly offered by Ion Cionca - 1992 - **/
+/** Swiss Federal Institute of Technology **/
+/** Central Computing Service **/
+/*****************************************************************************/
+static char * image_name [] = {
+/**/
+"64 38 8 1",
+/**/
+" s mask c black",
+". c gray70",
+"X c #71717171C6C6",
+"o c gray85",
+"O c gray50",
+"+ c darkolivegreen",
+"@ c white",
+"# c black",
+" ",
+" ",
+" ........................... ",
+" XX XX .ooooooooooooooooooooooooooo. ",
+" XXX XXX.oooooooooooooooooooooooooooooOO ",
+" XX X X XXoo+++++++++++++++++++++++ooooOO ",
+" XX X X XXo++++++++++++++++++++++++oooOOO ",
+" XX X X XXo++@@+@++@+@@@@++@+++++++oooOOO ",
+" XX XX X X XXoXX+++++++++++++++++++++++oooOOOO ",
+" XXXX XXX XXX.XXXX@@@@+@@+@@@+++++++++++oooOOOO ",
+" XX XX XXXXX XXoXX++++++++++++++++++++++oooOOOOO ",
+" XX XXXXXXXXXooXX@@@@@@@@@@+@@@@@++++++oooOOOOO ",
+" XX XXXXXXXXXooXX++++++++++++++++++++++oooOOOOO ",
+" XX XX XXXXX XXoXX@@@+@@@@+@@++@@@++++++oooOOOOO ",
+" XXXX XXX XXX.XXXX++++++++++++++++++++++oooOOOOO ",
+" XX XX X X XXoXX+@+++++++++++++++++++++oooOOOOO ",
+" XX X X XXo++++++++++++++++++++++++oooOOOOO ",
+" XX X X XXo++@@@@+@+@@@+@++++++++++oooOOOOO ",
+" XX X X XXoo++++++++++++++++++++++++oooOOOOO ",
+" XXX XXX.oo++@+@@@@++++++++++++++++oooOOOOO ",
+" XX XX .ooo++++++++++++++++++++++ooooOOOO ",
+" .oooooooooooooooooooooooooooooOOO ",
+" .oooooooooooooooooooooooooooOOO ",
+" OOOOOOOOOOOOOOOOOOOOOOOOO...OO ",
+" ..........................OOO ",
+" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
+" OoooooooooooooooooooooooooooOOOO.. .. ",
+" Ooooooooooooooooooo#######ooOOOO . .",
+" OOOOOOOOOOOOOOOOOOOOOOOOOOOoooOOO . ",
+" OooooooooooooooooooooooooooOOOOO . ",
+" OooooooooooooooooooooooooooOO OOOOOO ",
+" Ooo@@@@@@@@@@@@@@@@@@@oooooOO OOOOO...O ",
+" OooooooooooooooooooooooooooOO OOoooOO..O ",
+" Ooo@@@@@@@@@@@@@@@@@@@@ooooOO Oooooo..O ",
+" OooooooooooooooooooooooooooOO O.....OO ",
+" OOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOO ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+/*****************************************************************************/
+/** This pixmap is kindly offered by Ion Cionca - 1992 - **/
+/** Swiss Federal Institute of Technology **/
+/** Central Computing Service **/
+/*****************************************************************************/
+static char * image_name [] = {
+/**/
+"64 38 8 1",
+/**/
+" s mask c black",
+". c gray70",
+"X c white",
+"o c red",
+"O c black",
+"+ c gray85",
+"@ c gray50",
+"# c darkolivegreen",
+" ",
+" . ",
+" XXXXoOO.OOO.. ........................... ",
+" oXXXXXoOO.OOO.O .+++++++++++++++++++++++++++. ",
+" XXoXXXXXOO.OOO.OOO+++++++++++++++++++++++++++++@@ ",
+" XXXXXXXXXO...O...O.O+#######################++++@@ ",
+" XXXXXXXXXX.......O..O+#.######################+++@@@ ",
+" XXXXXXXXXXX.........O.O.#XX#X##X#XXXX##X#######+++@@@ ",
+" XoXXXXXXXXXXooooooooo...O#######################+++@@@@ ",
+" XXoXXXXXXX..XXooooooo..OO#XXXX#XX#XXX###########+++@@@@ ",
+" XXXXXXXX.....XXXXXoooo...OO######################+++@@@@@ ",
+" XXXXXXX......XXXXXXooo.....XXXXXXXXXX#XXXXX######+++@@@@@ ",
+" XXXXXX.......XXXXXXXoo...OO######################+++@@@@@ ",
+" XXXXXX.......XXXXXXXoo..OOO..X#XXXX#XX##XXX######+++@@@@@ ",
+" ooXXXX.......XXXXXXXoo.....######################+++@@@@@ ",
+" XXXXXXX.......XXXXXXXoo.....X#####################+++@@@@@ ",
+" XXXXXX.......XXXXXXXoo...OO######################+++@@@@@ ",
+" XXXXXX.......XXXXXXXoo..OOOXXXX#X#XXX#X##########+++@@@@@ ",
+" XXXXXX.......XXXXXXXoo....O######################+++@@@@@ ",
+" XXXXXXX......XXXXXXooo.....X#XXXX################+++@@@@@ ",
+" XXOXXXXX.....XXXXXoooo....O#####################++++@@@@ ",
+" OXXXXXXXXX..XXooooooo.O.O++++++++++++++++++++++++++@@@ ",
+" XXXXXXXXXXXXooooooooo..OO+++++++++++++++++++++++++@@@ ",
+" XXXXXXXXXXX...........O @@@@@@@@@@@@@@@@@@@@@@@@@...@@ ",
+" XXXOXXXXXX........................................@@@ ",
+" XOXXXXXXX....O...O.O @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ",
+" XXXXXXXX...OOO..OO @+++++++++++++++++++++++++++@@@@.. .. ",
+" XXXOXXXO.OOOO.. @++++++++++++++++++OOOOOOO++@@@@ . .",
+" XOXXXO.OOO . @@@@@@@@@@@@@@@@@@@@@@@@@@@+++@@@ . ",
+" .++++++++++++++++++++++++++@@@@@ . ",
+" @++++++++++++++++++++++++++@@ @@@@@@ ",
+" @++XXXXXXXXXXXXXXXXXXX+++++@@ @@@@@...@ ",
+" @++++++++++++++++++++++++++@@ @@+++@@..@ ",
+" @++XXXXXXXXXXXXXXXXXXXX++++@@ @+++++..@ ",
+" @++++++++++++++++++++++++++@@ @.....@@ ",
+" @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@ ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+/*****************************************************************************/
+/** This pixmap is kindly offered by Ion Cionca - 1992 - **/
+/** Swiss Federal Institute of Technology **/
+/** Central Computing Service **/
+/*****************************************************************************/
+static char * image_name [] = {
+/**/
+"64 38 8 1",
+/**/
+" s mask c black",
+". c gray70",
+"X c gray85",
+"o c gray50",
+"O c #4000bf",
+"+ c darkolivegreen",
+"@ c white",
+"# c black",
+" ",
+" OOO ",
+" OOOOO ........................... ",
+" OO OOO .XXXXXXXXXXXXXXXXXXXXXXXXXXX. ",
+" O OOO OOO .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXoo ",
+" OOO OOO OOO .XX+++++++++++++++++++++++XXXXoo ",
+" O OOO OOO OOO .XX++++++++++++++++++++++++XXXooo ",
+" OOO OOO OOO OOO.XX++@@+@++@+@@@@++@+++++++XXXooo ",
+" O OOO OOO OOO O OXX++++++++++++++++++++++++XXXoooo ",
+" OOO OOO OOO OOO OOOX++@@@@+@@+@@@+++++++++++XXXoooo ",
+" OOO O OOO OOO O OOOXO++++++++++++++++++++++++XXXooooo ",
+" OOO OOO OOO OO OOO.OOO+@@@@@@@@@@+@@@@@++++++XXXooooo ",
+" OOO OOO OOOOO OOO OOO++++++++++++++++++++++++XXXooooo ",
+" OOO OOO OOO OOO OOO OOOXOOO@@+@@@@+@@++@@@++++++XXXooooo ",
+" OOO OOO OOOOO OOO OOOXOOOOO++++++++++++++++++++XXXooooo ",
+" OO OOO OOO OO OO OOO.OOO+OO++++++++++++++++++++XXXooooo ",
+" OOOOO OOO OOO OOOOO OOO+OOO++++++++++++++++++++XXXooooo ",
+" OOO OOO OOO OOO OOO OOOXOOO@@@+@+@@@+@++++++++++XXXooooo ",
+" OOO OOO OOOOO OOOXOOO++++++++++++++++++++++XXXooooo ",
+" OOO OOO OO OOO OOO.OOO+@+@@@@++++++++++++++++XXXooooo ",
+" O OOO O OOO OOO O OOOX++++++++++++++++++++++XXXXoooo ",
+" OOO OOO OOO OOO OOOXXXXXXXXXXXXXXXXXXXXXXXXXXXXooo ",
+" O O OOO OOO OOO O.XXXXXXXXXXXXXXXXXXXXXXXXXXXooo ",
+" OOO OOO OOO OOO ooooooooooooooooooooooooo...oo ",
+" OOO OOO OOO O ..........................ooo ",
+" OOO OOO OOO oooooooooooooooooooooooooooooo ",
+" OOO OOO O oXXXXXXXXXXXXXXXXXXXXXXXXXXXoooo.. .. ",
+" OOO OO oXXXXXXXXXXXXXXXXXX#######XXoooo . .",
+" OOOOO oooooooooooooooooooooooooooXXXooo . ",
+" OOO oXXXXXXXXXXXXXXXXXXXXXXXXXXooooo . ",
+" oXXXXXXXXXXXXXXXXXXXXXXXXXXoo oooooo ",
+" oXX@@@@@@@@@@@@@@@@@@@XXXXXoo ooooo...o ",
+" oXXXXXXXXXXXXXXXXXXXXXXXXXXoo ooXXXoo..o ",
+" oXX@@@@@@@@@@@@@@@@@@@@XXXXoo oXXXXX..o ",
+" oXXXXXXXXXXXXXXXXXXXXXXXXXXoo o.....oo ",
+" oooooooooooooooooooooooooooo ooooooo ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+/*****************************************************************************/
+/** This pixmap is kindly offered by Ion Cionca - 1992 - **/
+/** Swiss Federal Institute of Technology **/
+/** Central Computing Service **/
+/*****************************************************************************/
+static char * image_name [] = {
+/**/
+"64 38 8 1",
+/**/
+" s mask c black",
+". c gray70",
+"X c gray85",
+"o c gray50",
+"O c red",
+"+ c darkolivegreen",
+"@ c white",
+"# c black",
+" ",
+" ",
+" ........................... ",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXX. ",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXoo ",
+" OOOOOOOOOO .XXOOO++++++++++++++++++++XXXXoo ",
+" OOOOOOOOOO .XOOO++++++++++++++++++++++XXXooo ",
+" OOOOOOOOOO .OOO+@@+@++@+@@@@++@+++++++XXXooo ",
+" OOOOOOOOOO OOO++++++++++++++++++++++++XXXoooo ",
+" OOOOOOOOOO OOOX++@@@@+@@+@@@+++++++++++XXXoooo ",
+" OOOOOOOOOO OOOXX++++++++++++++++++++++++XXXooooo ",
+" OOOOOOOOOO OOO.XX++@@@@@@@@@@+@@@@@++++++XXXooooo ",
+" OOOOOOOOOO OOO .XX++++++++++++++++++++++++XXXooooo ",
+" OOOOOOOOO OOO .XX++@@@+@@@@+@@++@@@++++++XXXooooo ",
+" OOOOOOO OOO .XX++++++++++++++++++++++++XXXooooo ",
+" OOOOO OOOO .XX++@+++++++++++++++++++++XXXooooo ",
+" OOO OOOOOO .XX++++++++++++++++++++++++XXXooooo ",
+" OOO OOOOOOOO .XX++@@@@+@+@@@+@++++++++++XXXooooo ",
+" OOO OOOOOOOOOO.XX++++++++++++++++++++++++XXXooooo ",
+" OOO OOOOOOOOOOXX++@+@@@@++++++++++++++++XXXooooo ",
+" OOO OOOOOOOOOOXX++++++++++++++++++++++XXXXoooo ",
+" OOO OOOOOOOOOOXXXXXXXXXXXXXXXXXXXXXXXXXXXooo ",
+" OOO OOOOOOOOOOXXXXXXXXXXXXXXXXXXXXXXXXXooo ",
+" OOO OOOOOOOOOOoooooooooooooooooooooooo...oo ",
+" OOO OOOOOOOOOO.........................ooo ",
+" OOO OOOOOOOOOOooooooooooooooooooooooooooo ",
+" OOO OOOOOOOOOOXXXXXXXXXXXXXXXXXXXXXXoooo.. .. ",
+" OOO oXXXXXXXXXXXXXXXXXX#######XXoooo . .",
+" oooooooooooooooooooooooooooXXXooo . ",
+" oXXXXXXXXXXXXXXXXXXXXXXXXXXooooo . ",
+" oXXXXXXXXXXXXXXXXXXXXXXXXXXoo oooooo ",
+" oXX@@@@@@@@@@@@@@@@@@@XXXXXoo ooooo...o ",
+" oXXXXXXXXXXXXXXXXXXXXXXXXXXoo ooXXXoo..o ",
+" oXX@@@@@@@@@@@@@@@@@@@@XXXXoo oXXXXX..o ",
+" oXXXXXXXXXXXXXXXXXXXXXXXXXXoo o.....oo ",
+" oooooooooooooooooooooooooooo ooooooo ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+static char * image_name[] = {
+/* width height num_colors chars_per_pixel */
+" 51 28 4 1",
+/* colors */
+". c Black",
+"* c White",
+"# c Red",
+"a c SteelBlue",
+/* pixels */
+"...................................................",
+"...................................................",
+".##########................###.....................",
+"..##########..............###......................",
+"...##########............###.......................",
+"....##########..........###............aaaaa.......",
+".....##########........###...........aaaaaaaaa.....",
+"......##########......###............aaaaaaaaa.....",
+".......##########....###............aaaa...aaaa....",
+"........##########..###.............aaa.....aaa....",
+".........#########.###..............aaa.....aaa....",
+"..........#######.###...............aaa.....aaa....",
+"...........#####.####.......................aaa....",
+"............###.######............aaaaaaaaaaaaaaa..",
+"...........###.########...........aaaaaaaaaaaaaaa..",
+"..........###.##########..........aaaaa.aaa.aaaaa..",
+".........###...##########.........aa.aa.....aa.aa..",
+"........###.....##########........aa.aa.aaa.aa.aa..",
+".......###.......##########.......aa.aa.....aa.aa..",
+"......###.........##########......aa.aa.aaa.aa.aa..",
+".....###...........##########.....aa.aa.....aa.aa..",
+"....###.............##########....aa.aa.aaa.aa.aa..",
+"...###...............##########...aaaaaaaaaaaaaaa..",
+"..###.................##########..aaaaaaaaaaaaaaa..",
+"...................................................",
+"...................................................",
+"...................................................",
+"..................................................."};
--- /dev/null
+/* XPM */
+static char * marino2[] = {
+"152 157 167 2",
+" c #000000000000",
+". c #28281C1C1D1D",
+"X c #2E2E29292D2D",
+"o c #707040403838",
+"O c #383814142828",
+"+ c #1E1E39392828",
+"@ c #444448482E2E",
+"# c #545434344C4C",
+"$ c #38382E2E2C2C",
+"% c #2A2A2B2B2020",
+"& c #101014142828",
+"* c #1D1D1C1C1C1C",
+"= c #1C1C0C0C1D1D",
+"- c #0E0E1A1A0D0D",
+"; c #19191B1B0F0F",
+": c #1D1D2A2A1C1C",
+"> c #C0C0E0E07070",
+", c #6C6C70707474",
+"< c #444440402E2E",
+"1 c #3C3C28280C0C",
+"2 c #35354E4E2929",
+"3 c #606074744C4C",
+"4 c #64645C5C3030",
+"5 c #58585C5C3838",
+"6 c #58582C2C3838",
+"7 c #444430302E2E",
+"8 c #181840401010",
+"9 c #68687C7C3838",
+"0 c #8F8F69691E1E",
+"q c #78785C5C3030",
+"w c #A0A03C3C3838",
+"e c #282814143030",
+"r c #90907C7C3838",
+"t c #C0C0A8A8B0B0",
+"y c #ECECF0F0B0B0",
+"u c #C4C478787474",
+"i c #DCDCC8C8D4D4",
+"p c #C0C0A8A87070",
+"a c #1A1A2C2C2828",
+"s c #54545C5C3030",
+"d c #7C7C88882020",
+"f c #7878D0D05858",
+"g c #F5F587874F4F",
+"h c #C4C47C7CC4C4",
+"j c #B4B465652C2C",
+"k c #6C6C30307474",
+"l c #282830303838",
+"z c #2A2A3B3B2D2D",
+"x c #3C3C48481414",
+"c c #0C0C38381010",
+"v c #9494D0D0A0A0",
+"b c #DCDCA4A4E0E0",
+"n c #B4B4E4E4E0E0",
+"m c #38383D3D2C2C",
+"M c #54545C5C1818",
+"N c #2C2CA8A82828",
+"B c #ECECB8B8A0A0",
+"V c #C4C438387474",
+"C c #2C2C50503030",
+"Z c #B4B48F8F3C3C",
+"A c #D0D050502020",
+"S c #ECECD0D04C4C",
+"D c #ECECF0F07C7C",
+"F c #C0C0E0E0B0B0",
+"G c #F8F8F8F8DCDC",
+"H c #F8F8E8E8F8F8",
+"J c #A4A464642C2C",
+"K c #787898985858",
+"L c #888874744C4C",
+"P c #6868D0D0A0A0",
+"I c #F8F8F8F8F8F8",
+"U c #DCDCC8C8F0F0",
+"Y c #F8F8B4B4E0E0",
+"T c #A0A020201C1C",
+"R c #0C0C1C1C1B1B",
+"E c #28282B2B0C0C",
+"W c #19190B0B0808",
+"Q c #0C0C28280808",
+"! c #7878D4D4E0E0",
+"~ c #F8F8E8E8DCDC",
+"^ c #D4D4E8E8F4F4",
+"/ c #282830309C9C",
+"( c #282810102020",
+") c #2C2C50501010",
+"_ c #7C7C34344C4C",
+"` c #3C3C14142020",
+"' c #B4B4C4C4E0E0",
+"] c #78789898A0A0",
+"[ c #7C7CC4C41C1C",
+"{ c #6C6C3C3CC4C4",
+"} c #ECECB8B86C6C",
+"| c #B4B4A4A4E0E0",
+" . c #202038381414",
+".. c #707018181818",
+"X. c #6C6C7C7C9898",
+"o. c #C0C0C8C83C3C",
+"O. c #DCDCE8E8D8D8",
+"+. c #E8E890904C4C",
+"@. c #303048483838",
+"#. c #ECEC9F9F4C4C",
+"$. c #ECECE8E8F4F4",
+"%. c #90904C4C1C1C",
+"&. c #202048482E2E",
+"*. c #CCCC38384C4C",
+"=. c #0F0F2E2E1C1C",
+"-. c #C4C484844C4C",
+";. c #58583C3C1C1C",
+":. c #141430300808",
+">. c #6C6C78781C1C",
+",. c #CFCF8C8C3B3B",
+"<. c #B8B888882020",
+"1. c #78789C9CE0E0",
+"2. c #CCCC70704C4C",
+"3. c #242498983838",
+"4. c #C4C43C3CC4C4",
+"5. c #B8B874743838",
+"6. c #6C6C7C7CD0D0",
+"7. c #2C2C48489C9C",
+"8. c #CCCC76763030",
+"9. c #E0E070703838",
+"0. c #181848481414",
+"q. c #646470701C1C",
+"w. c #E0E0C8C81C1C",
+"e. c #D8D884843838",
+"r. c #2F2F3F3F2020",
+"t. c #F0F078783838",
+"y. c #242410109898",
+"u. c #282838381010",
+"i. c #B8B8C4C42020",
+"p. c #A4A47C7C3838",
+"a. c #2828A8A81010",
+"s. c #E0E03C3C3838",
+"d. c #282810100808",
+"f. c #D4D464642020",
+"g. c #F4F474743030",
+"h. c #3C3C28282020",
+"j. c #3C3C40400C0C",
+"k. c #A8A86A6A1C1C",
+"l. c #64645C5C1818",
+"z. c #F0F050501C1C",
+"x. c #404038382020",
+"c. c #545418181818",
+"v. c #ACAC4C4C1C1C",
+"b. c #EBEB79793030",
+"n. c #ECEC64641C1C",
+"m. c #F8F880803838",
+"M. c #08080A0A1B1B",
+"N. c #ECECC8C83838",
+"B. c #ACAC78783030",
+"V. c #2828A8A89C9C",
+"C. c #E0E090902020",
+"Z. c #F7F78C8C3939",
+"A. c #D4D478783838",
+"S. c #303040403838",
+"D. c #D0D088882020",
+"F. c #DCDC24241C1C",
+"G. c #EDED8D8D3838",
+"H. c #3C3C10100808",
+"J. c #70703C3C1C1C",
+"K. c #C4C464642020",
+"L. c #DDDD79793030",
+"P. c #B4B478781818",
+"I. c #989878782020",
+"U. c #B8B880803030",
+"Y. c #ECEC77771C1C",
+"T. c #78785C5C1818",
+"R. c #C0C0C0C0C0C0",
+" . ",
+" X o O + @ X @ # $ X % & * = - * ; : + > , < ",
+" 1 2 3 4 @ 5 , 6 7 X * : 8 9 9 0 9 0 q w < @ 6 e 7 ",
+" r t y u u i p o a e : . : 2 s d f g u h j k k X X l , < z x c * ",
+" @ 3 v b r n i k m M . 8 N > y B V k X a a C N Z Z A S D D D D j % ; ",
+" $ $ 5 t F G H p > y J 3 B b u k * C 3 K D y y G L C P I I U Y b u T O R ; E % = ",
+" W Q : . * - C ! Y y H ~ I H p # X e C f D j , ^ ^ I I ~ > > h V / e e e & & W : f D J ( ",
+" E s J 6 ( ) K > i D H I I I H Z o l s D b O z v I I U h _ k e l 5 4 4 s 3 4 $ * 3 i i _ ` ",
+" X : * s 9 Z B D ~ h L ' I I I I H J l ] i p [ > b { k 2 9 p } i > t | ] ' t t 5 e X , t 6 ",
+" m O .% [ G D y S y b ..# t I I I I I J a X.^ h V e C N o.y i ' ' U ! O.n ^ O.I Y K 7 * z ",
+" X . @ K o.B G y y i y B +.# @.] I I I I H _ + k @ @.9 > F b ' n n n I I I I I H H U i V # + ",
+" * 4 J Z #.B $.~ y G y D B y B %.# ] G I I I b $ &.N t v n ' n n ^ I I I I I I I I U | $.h X ",
+" * 1 _ *.#.i B B y G G G ~ b g Y B T C v I I I H _ 7 K n n n ^ I I I I I I I I I I I Y t U b 6 ",
+" 1 = = = =.% s X X _ L B } y y B w 6 X # 3 -.;.3 n I I I ~ q C ! I $.I I I I I I I n I I I H i v U { O ",
+" . ( ; :.>.& L u } X . 7 J S D y ~ ,.K <.. 1 K J X f I I I I u # K ^ I I I I I I I I I I I ^ b 1.n X.e * ",
+" O ( M [ D B B H I B } _ # p y y y y G y 2.$ X u # C n I I I Y # z n I I I I I H I I I I I U p v n t L # * ",
+" a 3.o.I H U I I I I G V l -.D G G G G G ~ _ . K 2.# N I I I I b 6 K G I I I I n O.I I I Y | n O.^ $.| O ",
+" 2 > I $.4.w ' I I I U k X 5.B ~ ~ ~ G G ~ *.. d B ..s F I I I I u z P I I I I ^ I I I H t v ^ I $.h 6./ ",
+" . X . 9 y I h 6 7.o.I I I b . 2 8.9.g u g B B y V 2 > #.2.6 ] I I I I b 6 C n I I I I I I $.Y ' O.I I U 6.X.# ",
+" . = R 0.q.q.;.1 E ; ; E 0.w I I I y w i I I H v e 6 w w w T _ w 2.} 2.f D b #._ 7 v I I I I _ C v I I I I I Y h v n $.^ ^ U X., # ",
+" * :.>.w.D S S S S e.1 . a e 2 D I I I I I I I I h 6 X r.r.2 s 3 M . 7 u #.D y y B t.6 v I I I I u # K I I I H Y | ] v b ^ ' | 1.X.6.y.% ",
+" u.q.i.> D D y y y D y +.p.o 1 * % 2 t I I I I I I U h { 7.d o.y y y G y B J @ u B B Y B u _ 5 ^ I I I h $ C I H b t 1.v U n ' n 1.1.] , k = ",
+" % a.> D D D y y y D y y D D y s.% d.1 . f.O.I I U b h V e ) f D Y h I I I I I b 7 s.g.B p } g *.C > I I I H k z t t ] v F ^ n ^ n n b 1.t 7.e = ",
+" = :.3.[ D y y D y D y y y D y y y D J $ d.: . . h.h.e # @ h u V , # l e K } U h X f I I I I Y 7 5 +.} B B B *.z P I I I $.V $ K ] v n ^ ^ I ^ U | 1.] 6.k = ",
+" ( ) T D D D y D y y y y D G y D y D y D } 2.j.1 * ; . = & . $ e $ O _ T m Z $.$.5.> y I I I I Y 7 q 9.g h B g s.2 @.F I b , { X 3.n U ^ H $.^ Y 6.X.1.X.k = R ",
+" =.d S y D D y D D y y D D D y D y D D D G D S S <.9 d k.l.A z.A z.g.z.*.x.v I I I I I I I I I h 7 A g #.B B #.B c.@.v b p t v 6 @.! U O.U Y 1.{ X.X.k / e & ",
+" 0.[ b B D D y D y y y y y y y y y y y y D y y G y D B g v.b.u 9.n.4.V V E Z I I I I I I I I H V m j m.} Y g u g T e s v b t ' k z ] F $.b | X.L X., / e M. ",
+" 2 N.p S S y D D D y D D y D y D D y D D y D y D D D D } ] #.-.g.t., B.w 6 @ ~ I I I I I I I 4.# o 2.#.S p g u g _ X 3 B O.t | k z 9 1.b | , { 9 X.y.( - ",
+" M o.b } } S y y y D G y y y y y y y y y y y D y y y y y h S B B 9.{ V u s.6 , | I I I H U h O 6 A g } y h t.g u T X C v n ' X.k & 3., 6., X.7., y.* - ",
+" = a 3 6.#.} } S D y D y D y D y y D y D y D y D y D D D B b D B B u V g V 9.*...5 ] X.h V k c.6 A 9.#.S B V u ..5 , @ 3.F U ' 1.6 & C 7.X.V.7.# & - ",
+" O W E q.#.#.#.B } } D D y D y y D D y D D D D y ~ D B D y B y D D B B } g g 9.z.w c.` O : E A z.9.g.B y B b.T @.f y S K 1.1.i | { ; C X.7./ e M. ",
+" - # Z } g #.} } #.B } } B D B B S B D B } } } } } } h b } Y D Y b i b #.4.h 2.*.v.v.A t.n.9.9.#.} N.g { w X K I U b | ] | ] k & 0.@.& = ",
+" . &.r #.#.#.#.#.g p } #.} } #.} #.} } #.} } } } N.B h #.B i y B B y D B { u j 9.b.g b.g } #.D D y B 6._ @ m k k 7 5 ] h { e M.M.R : ",
+" W ; 4 } #.} } #.#.#.#.g #.#.#.} #.} } S S D D N.9.*.j #.D D D D D B } #.+.g +.} +.#.} B D D D y g T 5 > D q d.$ q ] X.k & M.Q * ; E ",
+" Z #.} } } } } #.#.#.#.N.} S S D } N.g v._ # / E p h B b B i D B h u b } } D B S D y y G B 9.7.N G I V 2 $ @.X.1.6.# R * ) Z 0 . ",
+" - :. L g u s.+.} D S D D S } S b._ O e = * % %.[ S D y y y y D y y } } D B D y D B D y D B 2._ f y $.# 9 K $ @., , y. ( 0.[ D B 6 ",
+" u.Z %.= O y.% . 6 %.j 5.u v._ _ O ( ( ; u.x $ # v B b b $.~ ~ D i U i i D D D D y D D y D B *.# 9 Y h 5 f G J 6 l 7.$ * 3.N.D h O z ",
+" ) Z b.( W - - ; & M. @ L p p 4 D _ y._ b B i D G H y y D y y D y D D y B #._ e 2 s @ a C h b k : 5 O E $ >.o.S -.@ s $ ",
+" 0.C.Z.d. ;.0 _ t y D T < # 6 7 o.y D y D y D D D y D D y D B g _ N D G u 4 @ =.= * R z ( ) ..N N.#.A.K _ X z m ",
+" 0.i.A W X X z K b B , ..7 X e K G i b B ~ y y y y y G y y B g 4 w I Y k v G p c.$ # e C % 0.M 6 q.#.N.e._ 2 R O * . * ",
+" ( ) K ..= . O R O _ u b ~ B +.L L p D y B y y D y y y y D y y } s.o p U H w v H b k e a e : ) @ 2 6 M w.#.J 9 q M >.d 6 d. ",
+" Q d N...E . ; : u.l / y.{ { h t.B G G I I I G G G G D G y y B g _ e y.X / X 3 U h # @.@ e $ - q.q M 6 N g 6 K B D D D h T X ",
+" = ) N.#.T e .K o.p 5 4 7 # # y., t D ~ B y y D y D D D y D D +._ 9 2 Z %.$ $ # l e S., O l 2 u.3.9.D.g.Z.T x k.g.z.2.j k X @ ",
+" = :.>.#.F. X ( ) w.y y y D y D S #.6 6 q u B y y y D y y D y D B } _ f I I Y _ K #.o e + # X X % K ;.9 Z.Z.Z.T $ M b.z...e = M.- R ",
+" W - ) d N.f. e =.N D y y b i B b b V +.o x.# , ] i D y D y y y y #.g 6 f I I 4.4 F H u # @ # a * 3 @ 9 g.G.z.7 2 ,.9.g v.` . 1 1 ",
+" a * 0.q.Z C.w.S #.w = 2 > y y y i ~ y B y $.~ y D } 6 6 , L B y y y y G B g.# > I h k 6 , h k 5 X.# z + 3 9 #.A O q.v.T 6 c.h.( = : ",
+" : M C.N.w.S t.F.s q : M > D y G I y I I H I G G y I D ,.@ e z > G y y y g s.5 > b 6 ( * % a l &.X.# C l K f #.6 0.Z x.u.) H.; ; Q ",
+" ) d S w.G.f.T O = =.L = ) f D y D y B ~ y H ~ i y y y y i > p +.6 @ p D y B } F.5 y n ~ j 4 > j # + 5 / + &.o.p %.M [ N.#.#.A ;.;. ",
+" ) w.N.Z.s.c.= = ; W 0.5 X K S y I y y y y G G y D G y G y y y G G B c.@.> y B g w 3 F I H 4., n b { @ 7.# a C > B ,.w.D #.Z.g.$ m ",
+" c K #.A c. ` 0.5 l % 2 w.D D B D B Y B y $.~ b y B y y b y B D D 2.O @ > B #.V 4 y I I V C F h V @.3 , l : ] D D Z.f.v.v. m # ",
+" 0.d C.J.d. O + 3 . z K S y y } D B i y i i y i y y y y i ~ ~ D G B e.6 X q +.s.@ v I H k 5 O.h o @.7.e & ) > y V % - - : 2 # e - M.a = * @.",
+" * d w.v.O :. e r.@ . ) o.B } S y D y $.~ D I y U h 4.9.4.b b y D D B B t.c.$ u g w v I b k 7 F ~ L # # & a : O 3.u V u $ u. $ e &.O M.- c a.#.6 $ . ",
+" ( =.Z #...X ` C 6 $ * ) } #.S y S D B Y y g b u { k X $ 6 y.k u B B } } B +.-.g 9.# K I $.p 4 v $.h e e 8 3.6 * * ) L 2 a X 2 # l X # % E x.X ; 3.C.#.' 6 X % ",
+" ; ) 9.T = O 2 @ _ * C > D S B D B #.B } < e @ 4 p i y ~ u _ m 9 #.} S } #.g u #.} y ~ Y b h _ O e a 2 K v u & a X 3.L X 8 7 ; 8 1 l.0 6 ;.0 #.S _ . % @ ",
+" c l.V ` e &.@ @ a ) d ,.B h s.s._ 7.6.6.+.F.#.t.I G I I $.] 6 + K S } } D } -.b u h n e e = & ) K o.P t ^ b = : ) @ e * ) o 2 Z w 4 } w %.K.g B 6 1 O m ",
+" 0.,._ O O C q # # 7 5 _ 6 ..c.e * = X M.a i I I I I I I I I ~ _ $ d B g g u g T O O e y.R a C p o.F | t | 1.h X 0.9 X < =.N p.L z.6 @ f.%.4 b.g V R s X $ ",
+" * a.S V M. e 0.# # # e & = R ; : =.=.0.q.;.C [ 6 , I I h ^ I I I I I u e l e & e X & & =.a 8 ) 3.>.> O.' U h , 6.! k a # e 3.k # $ N u V *...o v.9 r 9.*.C K _ # z ",
+" * 9 -.y. X + X 7 # X 6 X e e a 0.) q.9 d K f t v v v F v K > , l b i 6.] U ' I I I 1.c.$ 2 s s 9 5 K K K F Z ' t | { k , , 7.# O e & & * 6 ( * * + _ . e C , q q n.G.v.s.%.o T K q k . l m ",
+" = : d n.1 ( C o $ X X : : a a : + s 3.d f O.n ! n ! n ! ! ! n ! | n ! | 7.2 Z t X 5 t X.' I $.h # X ] O.| i ' i U b 6.X.5 7.@ C C 7.5 / = & + z l X ;.0 g e.%.E 1 . a e x X 5 +.*.T 6 E M d Z } o ;.; ; % ",
+" 7 ( R d V X O 2 L % s a R a Q ) X N ,.K f o.o.v n F n n ! ! n ! ! ' ' ' ! n n | ! ' > 7.3 Z i _ l X.| v I Y b V X C ! b 1.{ 1.] { @.7., 7., 7.7., P { . E 3 o X 6 < O = % _ z.Z.Z.n.$ = =. @.o l * C d K c.e * [ L.Z.N.g ..w g.D F.= ",
+" X * & M.W Q # = X 2 p _ e C v ;.= R a * C 5 q.K P > v B ' v ' ' ! | ! n ! ! n ! ! ! n ! ! n n ! n ! ! ' ! 1.$ 9 i U l @.v | O.$.| ' 6.6 3 ] , 6., 7.X., 7.3 7.@.7.6., 7.1., O M.a , o 6 ` W d.d.= : q ,.Z.8...- @ # 7 X z 2 4 o.G j 5 0 Z Z.T 6 L.g.%.X , > > w ",
+" e M.=.3.K K 9 z = : % @.@.X X X C 6 z X X X * a ) [ y , e 9 > t P ' 1.! 1.! ' ' ! ! ! ! 1.! ! ! ' ! ! n ' ! ' ' | 1.{ 1.1.| { 1.{ # X > I U 6 @.v n i | v | k @.X.] 1., 6., 7.7., , 7.6.7.1.6.] 1.1., e E x.6 e 1 c.F.s.....- u.<.N.T E M _ @ X $ 8 9 K J _ X X.V L D D S #.f.= % q N.2.O e y.e ",
+" R W q.Z e.B F q : * W - = c X X e e X e - W =.0.) [ o.D I I , X 3.i P 1.1.P | ! 1.! F | ! ' ! n | | 1.! b 1.| | 1.{ { k y.a e y.l / X C 7.E B I n 7.@ p b ' ] i n 6 C ] ] | 6.6.] X.6.1.K t 1.P | 1.1.] | { O C O M.m q z.%.z.T F.F.0.E r v.d.; . $ a.[ #.t.{ 6 X : x.z : @ p D N.#.P.* ) X / = = e & ",
+" * @ v ~ H I I H B y J . 3.Z J 7 * X 7 O = Q :.) d f > D y I I I I I , e C ] 1.1.! 1.! 1.! ' n ! ' | ' 1.1.| { , k / # / k # a & R - M.R % : X 7 X K ~ I k @ X.' t ' i ^ , O C ] ! O.' n b ] 1.n n n n 1.] 6., 1.1.k a e * . 0 n.g n.s.T A s...; M Z.v.1 x 4 j V # X X X $ ; E M o.#.2.c.. W X ",
+"X - * @.1.! | $.I I I Y 5 d v H V 7 = R Q ) [ v D y I I I I I I I ^ I h R 3.P ! 1.n 1.| 1.| 1.P { { 7.y./ # k & M.M.; R 0.C ) f i.i.I.$ M 9.w 7 C w } b P 7.9 K i ] y G ~ k @ 3.1.! ^ i ^ $.^ n n F n ' b ] 6.7.X.' / d.; J.A z.z.Z.g.z.s.z.z.F.d.) #.Z.g.T O a a 7 d.W ",
+"# = M.M.& e &.P G I I I O.h p b k K p f f D G G I I I I I I I I I I $.k : C 1.6.{ 6.{ 7.X.{ , X.l a X $ = R =.8 M l.s o.D D G y I O.i _ X a C f } y $.{ z 5 X.v U I O.H h # C X.! O.I $.^ ^ n ^ ^ n | { 6.1.1.] 1.{ 6 * ;.A s.s.z.g.b.U.2.z.s.F.d.x C.#.T * a 2 ",
+"5 # W 0.f F y G I I I I U k K t 7 N I I I I I I I I I I I I I I H I U # * &.# l z : : .: X + &.&.< X C K f D t i V 3 n I I I I I I Y t p u B B h k y.C 3 K 6.n n ^ U 4./ C ] X.P n ^ ^ ^ ^ | | ] | | ] , ] h 6.k * s <.G.#.Y.z.z.z.g.Z.2.s.s.F.F.; q.C.T R : ",
+"X a = [ y O.^ I I ^ I I U @ f H _ N I I I I I I I I I I I I I I H Y k &. # e : N > I Y X ] V C F I I I I I I b ] h e y.e 7.7.@ o 4 ] ] n H n { # 0.9 ] 1.F I $.n $.I i t | F t ] h 1.h y.1 @ D.#.N.#.N.g.z.z.F.z.V 9.z.z.z.c.9 #.K.( ",
+"e C L y I ^ I I I I I I b 6 3 F k K i H I I I I I I I I I I H O.O.h e $ z N y I I b 7 K h @ y H I I I I I Y i h # X 0.&.@ X.] | B F n | { # a 3.t ] 1.O.$.$.H $.$.Y n U ' | 1.1.{ O . x 9 C.N.N.N.N.#.Y.z.z.z.Z.9.z.F.F.` d N.T d. ",
+"R 9 B I I I I I I I I I 4.# C , 6 a k k 1.Y I H I I I I H O.O.^ ' k X N D I I I U K K I 6 F $.I I I I I ^ ^ | y.s ] 3 q p > D n n Y k l a &.X.P 1.v H H $.$.Y $.U H Y O.1.u 6.O * M D.#.N.N.N.w.N.N.} g.s.z.4.z.s.F.F.1 d g... ",
+"* s O.U 4., n I I I I h , K L O X X X & & X , X.| $.^ H $.^ ' F u O X e 3.D I I I I I s.5 P 6 P I ^ I $.I I U ' { 6 a 5 h Z 6.U ^ | k k e &.&.] X.1.! $.H $.U $.$.$.U Y 1.1., { y.$ q.d #.N.N.N.S S w.N.Z.z.z.g.9.z.z.F.F.1 l...: ",
+"M.R _ # 0.[ F I I H { ` = & e $ W ; * ( - & e X 7., t V e a e &.N D I I I I I I | # C L 5 G I I ' ' U $.' b X.4 @ e 7.& & e e &.+ C 9 1.X.6.v O.^ ^ U ^ ^ ^ n ^ 6.] X.{ 7 ) Z N.N.N.N.S S S S S N.Z.z.z.g.+.9.z.F...W - ",
+" y.R a.> I I I 4.O e : O C #.7 E R - M.W - & e X &.f z.I I I I I I I ! / &., e , I I Y ] 1.i Y b | 1.| , c.5 @.& @., V.6.1.7.X.P ^ $.^ U ^ U ^ n U n H 1.f $ s #.N.S N.N.N.S S D w.S N.N v.s.z.V z.*...W ",
+" R 5 F I I n 6.X X O s u # N > H I I I I I I H U L e 3 q z v I I t b i b i t t | ] | 1.' 6.X.7.] 7.X.X.v ^ ^ $.I ^ $.^ U $.U U Y k # s C.S N.D w.S S S D w.S w.N.Z.n.z.s.s.z.T d. ",
+" R c , 6., O 6 $ = * ) , $ C f y I I I I I I I H U h # @ t o < ] I I i i ^ | | 1.' 1.P 1.] 3.] { X.X.! y ^ $.O.$.U $.Y U Y U b { { 7 2 o.S S w.S S S S S w.D w.N.G.g.z.s.Z.s.c.a ",
+" W W M.= X 9 %.. X C q @ C [ > I I I I I I I I I $.b , # 7.^ q l ] I I t n b ! n | F f P o 7.7.X.V.n I I $.H $.I H U U U b | | k X 9 T S N.[ S S S S S S w.w.N.v.Z.g.z.F.z.{ ",
+" 1 W c [ o.2.` 6 C 5 # + [ v y I I I I I I I I I $.| ! k @.] > w @.] I O.| ' n O.n n F v t v t P O.I H U U U U U U U U | | | k e q.#.o.S S D S D w.D w.w.N.S C.B Z.Z.T c.. ",
+" e c 9 o.8.d. 6 C 5 e 3.D G I I I I I I I I I I I ' | 1.7 @.1.I p @ v I i 1.' n I G t y H I H I H $.U U ^ U ^ U | ' | 1.] , e 2 o.w.h D S S S S S w.N.N.N.N.#.{ Z.F.= E ",
+" ( = ) > f.( X C , 3.f y I I I I I I I I I I I I ^ ' | , 7 5 ! H L X ] I ~ t 1.' I I H $.$.$.' U | n U ' | ' | ' { X., h w q.i.S D Z.S S S S S w.S N.N.C.N.N.9.A = ; . ",
+" % W 0.d #.c. O s # 3.f y I I I I I I I I I I I I I I I t b , 6 m ] H p 4 X.' I O.F ! n ^ n n ' ^ ' ! n ' ^ | ' | { X @ r } N.S S S S B S S S S S w.w.N.G.#.C.Z.k O x . ",
+" = c i.#.... e 0.o X E f y I I I I I I I I I I I I I I I I U ' | X.e X ] I Y 1 z u U H t n ' ' b ! H ' $.| ^ Y 6.t h X 5 #.N.N.S S S S S h D S S w.w.N.#.#.C.G.Z...y.@.5 7 ",
+" - @ #.b.J.1 ; * * $ ` $ X = 0.X % C f I I I I I I I I I I I I I I I I I $.| ' t ] # @.L | B r 5 l 7.t v t ' ' ^ b ' U Y b 4.X.X.y.7 Z N.N.S S S S S S D S D w.S S N.#.C.N.G.T X C C @ e ",
+" . ; @ Z N.N.C.j 0 J.E d.W ) # C N G I I I I I I I I I I I I I I I I I I ' ] 1.1.' ] # X , b H y 2.o L , { X.| b | | b X., 6./ ;.d S D S S S D w.S S B N.w.S w.N.C.N.#.n.T E 2 s X.7.@. ",
+" h.W - 8 <.g N.N.#.N.G.T ; 0.6 o X ) v I I I I I I I I I I I I I I I I I I I I | ] 1.| 1.h 5 * l 7.4.| { z M @ # # / / { 6.{ / # e C p w.S S S S S S S w.A N.S w.#.Z.#.w.z.` =.) X., { 7.X ",
+" w %.8.Z.e.T E . z . N F I ^ I I I I I I I I I I I I I I I I I I I O.| ' | 1.| ] q q X l ] w | t k @ 0 0 x a m ) s $ 2 i.S S S S S w.S S S B N.N.#.C.#.Y.T ` u.s 5 , X.7.5 l M. ",
+" W ; ) C.#.Y.c.- E X e f F I I I I I I I I I I I I I I I I I I I I I I H i b t ! Y 1.b L 7 e y.7.k , , h B B z.g u #.6 @.i.N.S D w.D w.S S S 4.N.#.N.N.n.T = 2 B.L , 7.] 7.3.# = ",
+" W ; M C.Z.c.W : O l f I I I I I I I I I I I I I I I I I I I I I I I G H | ' | 1.n ' 6.! X.3 @ z e & & e y.X e e 7.6 @ f N.S S w.S S w.w.w.B #.#.C.n.c.: l s 5 7.7.5 C X.X./ . ; ",
+" u.( W u.p...; : X * f O.I I I I I I I I I I I I I I I I I I I I I I I I ' v ' ! 1.! 1.| ' ' | 1.t ] ] , , 3 , , 3 # $ d S S D w.D w.N.N.#.u Z.Z.8.c.* C @ @.7., 7.X.X.X.7.@.W % ",
+" . e = - M T - 0. R e N y I I Y I I I I I I I I I I I I ^ I ^ I I ^ I I I I ' $.I Y U ^ | ' | ' U i 6.| | ] ] 1.' 1.X $ 4 #.w.w.w.Z.N.Z.#.Z.w w c.$ 6 q + 7.7., 7.6.V.6.6.7.+ - W : ",
+" O W W Q ) * E X . N y i 4.@.! I I I I I I I I I I I I I I I I I I I I I I I U $.H ~ U U U | | | 1. ! n n n ' 1., # * M <.L.G.C.G.D.L.%.y...- E C @.7., 7.X.6.X.7.P 3 e a @ O : ",
+" . = W c E * a e K n L X 2 o.I I I I I I I I I I I I I I I I I I I I I I U ' H U H $.U $.| ! ! | ! ' n | 1.! | X.X.# a 4 U.n.9.g.A J.c.y.: ) C , 7.X.6.] ] 6.1.X.K 7.R * a # 7 z ",
+" = W W - e e 3.F b o C P I I I I I I I I I I I I U I I I I I I I I I $.| U ^ ^ U ^ n n n ^ ' ! n n ! ' ' ! X.{ 5 X a h.$ c.c.$ d.; + 2 s &.6.7.X.P 6.X.X.6.7.< & a < * : X e + ",
+" Q = R = ) P F H y y I I I I I I I I I I U b | i I I I I I I I I U ' n ^ ^ ^ ^ U U ^ U n b n U U n U b | , { , # s 4 4 @ ;.< 4 # 3 7./ @.] | 6.X.{ 7.7.@.@.a C 5 , 7 m W ; * ",
+" e = - W C v b V t I I I I I I I I I I I { e a 3.^ I I I I I I I U t n U n U ' U U U $.U $.$.U H $.$.U ! 6.] 6., 7.q.5 s 3 5 , X., 7.< ) 3., , X.7.P 7.# e z @., 1.h { 0 e ",
+" @ C E : X 2 6.' ] t ' $.I I I I I I I I V a z 3.O.I I I I I I I U F $.$.U Y h h ^ U U H U U ^ U ' ' ' Y { ] 6.] X.@ X.X., 7.X.3.1.v F y g , X.6.7.7.k e &.@.{ 7.] ] ] , 6 M.; ",
+" @.K > Z o.L $ X @.X.| ] ] | ' ^ H I I I I $.F o.F G I I I I I I I $.| U H U k e a ] ' ' n ' ' ' ! ' | | 7.C 3 X., { V.7., { X.1.p i Y h h 7.7.{ 7.l e e C C 9 X.V.X.] ] 1., e * X ",
+" * N D G I I I y J 7 * 3 | v F ] X.1.b I I I I I I I I I I I I I I I H t ' U ^ L # $ 3 n U ! b ! ' ! ' | 6.z 3 K X., 7.X.7.X.6.' t | h 6.6.7., X.7.O a 0.C , 7.X.] ] 6., X.1.6.` * ",
+" a N D G G I I I I I B q a l { ] u 1.] ] 6.t U H $.H I I I I I I I I I H t ] n n n t p f F n ' ^ n U b ' ^ 4.m z 5 1.6.1.] 6.| B ] X.| X., , { 7.# e z @.3 7.7.K ] X.6.] ] ] | { X ",
+" 0.N > I I I I I I I I I I p o E * K , b | h ] 1.X.b | | U H Y b I I I $.I U ] ! H ^ $.n $.^ ^ U n U U ' b Y | , L p u | | u t ] { ] X.1.! h 6.y.a R C @.7.7., X.] ] 6.1.7.6.1., y.W ",
+" e * 3.f D I I I I I I I I I I I ~ B q @.a X.1.1.| ' ] ] 6.] ] | 1.] X.n | | | h X.| | h 1.Y | b | 1.| h 1.h 6., 6.X.u 6.X.X.X.1.X.1.] h 6.X.k y.X * z 3 f , , 7.] v p ] X.] ] X.1.# M. ",
+" = 0.[ G I I I I I I I I I I I I I I I 9 , . X l # 7., X.6.1.1.u 6.| 1.' | t ] ] , 7.7., X.X.6.X.6.] 6.X.6.6.6.1.6.] 1.X.6., 7.k / X l , X.3.# C 5 3 , ] ] 1.' n F b 1.] 1.] 1.] , & R ",
+" :.N D I I I I I I I I I I I I I I I ^ I H S #.s ) % & & X y.y.e & y./ / k k 4.b { k X.6.1.1.] 6.6.6.6.6.1., 7.k { 1.h 6.k O e a + Z f u X.X.X.] ] ] 1.' i 1.O.H Y 1.| ] ] | ] { e * ",
+" c K O.I I I I I I I I I I I I I I I I I I I I G y t Z 3 9 >.q.>.3 M M x m + . X X . =.a X k e e y.X l / @.e e R R C e X X s 3 o o @ X.h t ] 1.! | n n F n n ' U | 1.p ! h , y.a ",
+" a K I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I O.I G y y y y > F B K L 5 3 K 0 L T.L K K o.B B u y u i u u , k e z @., P ' ' ! n n ' | | 1.! 1.| v ' 6., & ",
+" a X.^ I I I I I I I I I I I I I I I I I I I I I I ^ ^ n I ^ ^ I n I I I U | U ^ U U U i y $.i U i R.$.i H $.^ U i h k y.k w 6 = l 7.# &.! n i ! U n ' | ! | | | | 6.k = ",
+" . R l ] ' I I I I I I I I I I I I I I I I I I I I I ^ I ^ I I I I I I I b n U ^ $.n H H H $.U U U U U $.U i ' U | k a < w z.s.T ( X @., , ! U i n U b ' h t 1.1.X., = & ",
+" . = * a h H I I I I H I I I I I I I I I I I I I I I I I I I I I I I Y n i ~ U Y $.U ^ b ! n ' n ' n ' 1.{ O 7 %.z.z.z.z...d.C 7.5 6.! | | ' ' 1.| ! b k O e M. ",
+" 1 = - X ] ] O.H I I I I I I I I I I I I I I I I I I I I I I I I H Y ' U O.$.^ $.$.$.$.^ ^ ^ ^ ^ n ^ ^ n U | O l _ s.z.z.s.z.s...S.X.7.K ^ i ' ' ' ' | 1.k e & ",
+" d.E z ] U I H I I I I I I I I I I I I I I I I I I I I I U n ^ ^ n n U ^ U n $.U ^ ^ U U U I $.U U X.# _ A 9.z.g.z.z.z.T $ s @.V.| ! ' | { { 7.6 y.X ",
+" = * @.h U I H Y $.Y H I I I I I I I I I I I I I H ^ | n ^ ^ ' $.n $.n $.U $.H $.H H H H U U Y k e 6 z.z.g.s.g.s.n.*.d.= e l k { k e e R M.M.E ",
+" * & 7.@.{ ' b | n | | ' I I I I I I I I I I I I U ' n ^ ^ $.^ U H U U H U $.U H H $.$.U ^ h k e o z.g.z.g.z.z.z.s.c.& O J.6 @ e * . J.c.d. ",
+" = & * 6 e 6.U ^ B X.X.n I I I I I I I I I $.Y ^ Y U U $.U U $.$.$.U H $.$.H $.U n I $.| e $ v.n.z.z.9.s.9.s.z.T c %.n.z.%.w s.z.F.c.W ",
+" - & R R 3 # k _ # @ X.1.' H H I H I I H Y U U $.H U U $.U U $.U $.U ^ $.^ $.^ ^ ' h X e w n.s.9.z.z.z.*.T A w z.z.z.s.z.z.C...* ",
+" - - $ c.7 1 . * * z 6 _ k , 4.h h h h , 1.h 1.b b ^ Y U U U U ' U U b | h { X.{ k e 7 v.z.g.s.g.z.s.c.* A k z.z.z.V z.T = d.` ",
+" = * %.s.z.z.T O W - c.X c.7 7 _ # o , , 6.X.X.X., 4.6.1.| h { h 7.7.5 , 7.o # # e X w z.z.z.g.s.T = ;.z.s.z.z.z.s.T = d.- : ",
+" W y.6 T s.z.z.T c.1 ( E d.* e O e X # 7.k , { , 7.X., , 6.7.5 k { 7.# e e & & e W E A z.z.z.F.e J.v.z.{ z.s.s.y.O . ",
+" W W - ` ..T o A z.z.z.z.F.T J.6 c.c.. e = =.& a e l O y.O & & * = ( 6 T z.s.J.v.A z.z.*.T O 6 A z.s.k T c.` ( ",
+" Q - W - * ..w f.s.z.n.z.z.z.z.z.z.z.F.T 1 O ( O X 1 1 v.J.c.v.z.z.z.z.z.z.z.z.z.F.c.= = ` c.T c.e ( = E ",
+" W * ; 1 c.T w z.z.z.z.s.z.z.g.z.z.z.z.z.z.z.z.z.z.z.z.z.z.s.z.z.z.s.z.s.F...= ( W W M.W = W Q ",
+" ( M.- - M.c.6 F.w z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.s.s.s.c. ( - c.T T H.W 8 ",
+" - W W - - ( 6 s.s.z.z.z.z.s.z.z.z.z.s.s.z.s.z.s.z.s.z.F.{ c.O R ` E J.F.T = . ",
+" ( - W - c...w s.s.s.z.2.s.s.s.s.z.s.s.F.T ....c.O . * ` d.;.s.F.M.; ",
+" 1 W W - W W = . ..T F.T ` d.( c.( = R R R = * ;.w F.e d. ",
+" m ( ; 1 T T H.W - ; - % ; : O E J.s.F.e d. ",
+" ( d.$ A F...% O . 1 s.s.e = - ",
+" O ( J.F.A _ c. - c.w s.T c.d. ",
+" ; ;.s.s.T = W E T s.y.d.W % ",
+" ( 6 z.s.T * u. 4 = ; 6 A F.c.= . ",
+" d.1 z.s.s.` * 6 a $ s - W ;.F.k T = ( ",
+" . . A s.z...( ( a s o 7 O - 1 F.k F.( W ",
+" E s.z.s.T ( 6 * ) # 6 M.- _ 4.s.` = a ",
+" * w s.z.T ( o = :.9 * # * 1 s./ s.F.M.Q ",
+" = ;.s.s.T e ( - 8 K e E 6 A s.s.A ..E ",
+" W * w z.F.` M.0.p O * u.1 ..k z.s.k W ",
+" . d.J.s.F.... Q ) v w X x.. k s.s...= 7 ",
+" % T A g.T * Q 3.F k = - * J.O / F.s.V ` a < ",
+" E 6 s.s.T X X # $ 2 ;.W : o . X _ z.w e ( ( X ",
+" %.s.s.T e M.- 9 F B _ ( W : 7 4 # x.` W 1 w *.6 M.c >.o ",
+" 6 s.s.+.O = - a 9 k * u.= W - ( C x x . = 1 T k y.- K J # ",
+" J.z.s.F.O d. =.+ * 3.f J ;.h.= R 2 # = 2 D B 0 * * * z l.D.%.X ",
+" * ;.F.s.s.c. * W - . @ ] y D J ( * M.& & =., I i Z.#.N.S u y.X C ",
+" q.5 = 1 _ s.s.c. * W W Q m t B _ 5 Z q - E - a ] V 6.v y i , e C [ ",
+" $ f V W E A s.F.O ( - u.e @.B G D p } l.x 3.K , f y ~ ~ b D G y u < : ",
+" = p X 7. . 1 w s.s... d.R & - X.b Y b ~ o.D D D g.G H ^ O.^ O.I I G S _ ",
+" : @ y 6 e a X 7 w s.z.T . j.* e a X 6.] i i O.F ^ I ^ I G G G I I H u k ",
+" q.] 6 R R W a 6 6 z.s.s.T ( * . X z . e e R l l , n G ~ U y I H $.i i h # e ",
+" 7 C ` ,.O & W R c.;.F.z.s.s.T ( - Q ) 5 M.O R M.R C I { { t U ^ ",
+" N } 4.x ; l.c.W * . x x.6 w *.s.T O u.q.J J 3 @ ` ",
+" > b k N F.I V ` - W & X K J ( W = = = ) [ o # 7.5 ",
+" O K H h k M K r x.= - W R * * = . $ @ ..: s O.p 0 >.d o.f y O a % . ",
+" : k e % f I I { M K K [ p Z q m * * :.- ; C n I G I I I u @ s q.M x % ",
+" & M.- a ] 1.# N D I I I I O.D N > #.>.l.N o.n I I n I O.F > > y p X ",
+" ; * e e z , h ' I H H $.O.O.n F o.K p n b ^ ^ ' n O.n O.O.h % ",
+" : * M.R a X.{ F n $.n v D n y v f ] ] v v O.^ I I ~ k % ",
+" * @.< # C K ] ] v O.O.O.y y F y G $.n U 6.y.c.M. ",
+" m 5 X.X.t h , ] t h t 4.7 ( M.W ",
+" % &.@ X # c E * "};
--- /dev/null
+basedir=ask
--- /dev/null
+PKG="xlock"
+NAME="Xlock"
+DESC="Screen Locker"
+VERSION="Version 4.03"
+VENDOR="SCO"
+HOTLINE="1-800-SCO-UNIX"
+EMAIL="rr@sco.com"
+CATEGORY="application"
+CLASSES="xlock"
+ARCH="i386"
+BASEDIR=/
--- /dev/null
+i admin=admin
+i pkginfo=pkginfo
+
+d xlock usr 0755 root sys
+d xlock usr/local 0755 root sys
+d xlock usr/local/bin 0755 root sys
+f xlock usr/local/bin/xlock 4755 root sys
+f xlock usr/local/bin/xmlock 0755 root sys
+d xlock usr/local/man 0755 root sys
+d xlock usr/local/man/man1 0755 root sys
+f xlock usr/local/man/man1/xlock.1 0644 root sys
+d xlock usr/local/man/cat1 0755 root sys
+f xlock usr/local/man/cat1/xlock.1 0644 root sys
+d xlock usr/local/lib 0755 root sys
+d xlock usr/local/lib/X11 0755 root sys
+d xlock usr/local/lib/X11/app-defaults 0755 root sys
+f xlock usr/local/lib/X11/app-defaults/XLock 0644 root sys
+f xlock usr/local/lib/X11/app-defaults/XmLock 0644 root sys
--- /dev/null
+!!!!
+! XLock: Class resource for xlock (xlockmore-4.03)
+!!!!
+XLock.mode: random
+!XLock.mode: blank
+!XLock.mode: life
+XLock.font: -b&h-lucida-medium-r-normal-sans-24-*-*-*-*-*-iso8859-1
+!XLock.font: -*-times-*-*-*-*-18-*-*-*-*-*-*-*
+!XLock.background: White
+!XLock.foreground: Black
+XLock.background: Black
+XLock.foreground: White
+!XLock.foreground: AntiqueWhite
+XLock.username: Name:
+XLock.password: Password:
+XLock.info: Enter password to unlock; select icon to lock.
+XLock.validate: Validating login...
+XLock.invalid: Invalid login.
+XLock.nolock: off
+XLock.inwindow: off
+XLock.inroot: off
+XLock.remote: off
+XLock.mono: off
+XLock.allowaccess: off
+XLock.allowroot: off
+XLock.echokeys: off
+XLock.enablesaver: on
+XLock.grabmouse: on
+XLock.install: on
+XLock.sound: off
+XLock.timeelapsed: off
+XLock.usefirst: off
+XLock.verbose: off
+XLock.nice: 10
+XLock.lockdelay: 0
+XLock.timeout: 30
+!XLock.geometry: 64x64
+!XLock.icongeometry: 4x4
+XLock.icongeometry: 64x64
+!XLock.icongeometry: 256x256
+
+! For bouboule, pyro, star, & worm modes
+XLock.use3d: off
+XLock.delta3d: 1.5
+XLock.right3d: Red
+XLock.left3d: Blue
+XLock.both3d: Magenta
+
+! For marquee & nose modes
+!XLock.program: fortune -o
+XLock.program: fortune -s
+!XLock.program: fortune
+!XLock.program: finger
+!XLock.messagesfile: fortune.dat
+!XLock.messagefile: /etc/hosts
+!XLock.message: "Go away, no one is here"
+XLock.mfont: -b&h-lucida-medium-r-normal-sans-24-*-*-*-*-*-iso8859-1
+!XLock.mfont: -*-times-*-*-*-*-18-*-*-*-*-*-*-*
+
+! For image & puzzle modes
+!XLock.imagefile: raster/scream.ras
+!XLock.imagefile: pixmaps/image-xlock.xpm
+
+! For ant & demon modes
+!XLock.neighbors: 6
+!XLock.neighbors: 4
+XLock.neighbors: 0
+
+XLock.logoutAuto: 0 ! 0 defaults to maximum defined value
+XLock.logoutButton: 0 ! 0 defaults to maximum defined value
+XLock.logoutButtonLabel: Click here to logout
+XLock.logoutButtonHelp: \
+You may log out this session if no terminals are available.
+XLock.logoutFailedString: \
+Logout attempt FAILED.\n\
+Current user could not be automatically logged out.
+
+! Mode options: If batchcount, cycles, or size options are set to 1 ...
+! they are probably not used by the mode.
+XLock.ant.delay: 1000
+XLock.ant.batchcount: -3
+XLock.ant.cycles: 40000
+XLock.ant.size: -7
+XLock.ant.truchet: on
+XLock.ant.saturation: 1.0
+XLock.ball.delay: 10000
+XLock.ball.batchcount: 10
+XLock.ball.cycles: 20
+XLock.ball.size: -100
+XLock.ball.saturation: 1.0
+XLock.bat.delay: 100000
+XLock.bat.batchcount: -8
+!XLock.bat.cycles: 1
+XLock.bat.size: 0
+XLock.bat.saturation: 1.0
+XLock.blot.delay: 200000
+XLock.blot.batchcount: 6
+XLock.blot.cycles: 30
+!XLock.blot.size: 1
+XLock.blot.saturation: 0.4
+XLock.bouboule.delay: 5000
+XLock.bouboule.batchcount: 100
+!XLock.bouboule.cycles: 1
+XLock.bouboule.size: 15
+XLock.bouboule.saturation: 1.0
+XLock.bounce.delay: 5000
+XLock.bounce.batchcount: -10
+!XLock.bounce.cycles: 1
+XLock.bounce.size: 0
+XLock.bounce.saturation: 1.0
+XLock.braid.delay: 1000
+XLock.braid.batchcount: 15
+XLock.braid.cycles: 100
+!XLock.braid.size: 1
+XLock.braid.saturation: 1.0
+XLock.bug.delay: 75000
+XLock.bug.batchcount: 10
+XLock.bug.cycles: 32767
+XLock.bug.size: -4
+XLock.bug.saturation: 1.0
+XLock.cartoon.delay: 10000
+!XLock.cartoon.batchcount: 1
+!XLock.cartoon.cycles: 1
+!XLock.cartoon.size: 1
+XLock.cartoon.saturation: 1.0
+XLock.clock.delay: 100000
+XLock.clock.batchcount: -16
+XLock.clock.cycles: 200
+XLock.clock.size: -200
+XLock.clock.saturation: 1.0
+XLock.crystal.delay: 60000
+XLock.crystal.batchcount: -40
+XLock.crystal.cycles: 200
+XLock.crystal.size: -15
+XLock.crystal.saturation: 1.0
+XLock.daisy.delay: 100000
+XLock.daisy.batchcount: 300
+XLock.daisy.cycles: 350
+!XLock.daisy.size: 1
+XLock.daisy.saturation: 1.0
+XLock.dclock.delay: 10000
+!XLock.dclock.batchcount: 1
+XLock.dclock.cycles: 10000
+!XLock.dclock.size: 1
+XLock.dclock.saturation: 0.2
+XLock.demon.delay: 50000
+XLock.demon.batchcount: 0
+XLock.demon.cycles: 1000
+XLock.demon.size: -7
+XLock.demon.saturation: 1.0
+XLock.drift.delay: 10000
+XLock.drift.batchcount: 30
+!XLock.drift.cycles: 1
+!XLock.drift.size: 1
+XLock.drift.saturation: 1.0
+XLock.drift.grow: off
+XLock.drift.liss: off
+XLock.eyes.delay: 20000
+XLock.eyes.batchcount: -8
+XLock.eyes.cycles: 5
+!XLock.eyes.size: 1
+XLock.eyes.saturation: 1.0
+XLock.flag.delay: 50000
+!XLock.flag.batchcount: 1
+XLock.flag.cycles: 1000
+XLock.flag.size: -7
+XLock.flag.saturation: 1.0
+XLock.flame.delay: 750000
+XLock.flame.batchcount: 20
+XLock.flame.cycles: 10000
+!XLock.flame.size: 1
+XLock.flame.saturation: 1.0
+XLock.forest.delay: 400000
+XLock.forest.batchcount: 100
+XLock.forest.cycles: 200
+!XLock.forest.size: 1
+XLock.forest.saturation: 1.0
+XLock.fract.delay: 200000
+!XLock.fract.batchcount: 1
+!XLock.fract.cycles: 1
+!XLock.fract.size: 1
+XLock.fract.saturation: 1.0
+XLock.galaxy.delay: 100
+XLock.galaxy.batchcount: -5
+XLock.galaxy.cycles: 250
+XLock.galaxy.size: -3
+XLock.galaxy.saturation: 1.0
+XLock.galaxy.tracks: off
+XLock.geometry.delay: 10000
+XLock.geometry.batchcount: -10
+!XLock.geometry.cycles: 1
+!XLock.geometry.size: 1
+XLock.geometry.saturation: 1.0
+XLock.grav.delay: 10000
+XLock.grav.batchcount: -12
+!XLock.grav.cycles: 1
+!XLock.grav.size: 1
+XLock.grav.saturation: 1.0
+XLock.grav.decay: off
+XLock.grav.trail: off
+XLock.helix.delay: 25000
+!XLock.helix.batchcount: 1
+XLock.helix.cycles: 100
+!XLock.helix.size: 1
+XLock.helix.saturation: 1.0
+XLock.helix.ellipse: off
+XLock.hop.delay: 10000
+XLock.hop.batchcount: 1000
+XLock.hop.cycles: 2500
+!XLock.hop.size: 1
+XLock.hop.saturation: 1.0
+XLock.hyper.delay: 20000
+!XLock.hyper.batchcount: 1
+XLock.hyper.cycles: 5000
+!XLock.hyper.size: 1
+XLock.hyper.saturation: 1.0
+XLock.ico.delay: 100000
+XLock.ico.batchcount: 0
+XLock.ico.cycles: 400
+XLock.ico.size: 0
+XLock.ico.saturation: 1.0
+XLock.ifs.delay: 1000
+!XLock.ifs.batchcount: 1
+!XLock.ifs.cycles: 1
+!XLock.ifs.size: 1
+XLock.ifs.saturation: 1.0
+XLock.image.delay: 2000000
+XLock.image.batchcount: -10
+!XLock.image.cycles: 1
+!XLock.image.size: 1
+XLock.image.saturation: 0.3
+XLock.julia.delay: 10000
+XLock.julia.batchcount: 1000
+XLock.julia.cycles: 20
+!XLock.julia.size: 1
+XLock.julia.saturation: 0.3
+XLock.julia.mouse: off
+XLock.kaleid.delay: 20000
+!XLock.kaleid.batchcount: 1
+XLock.kaleid.cycles: 700
+!XLock.kaleid.size: 1
+XLock.kaleid.saturation: 1.0
+XLock.laser.delay: 20000
+XLock.laser.batchcount: -10
+XLock.laser.cycles: 200
+!XLock.laser.size: 1
+XLock.laser.saturation: 1.0
+XLock.life.delay: 750000
+XLock.life.batchcount: 40
+XLock.life.cycles: 140
+XLock.life.size: 0
+XLock.life.saturation: 1.0
+XLock.life.rule: 2333
+XLock.life1d.delay: 10000
+!XLock.life1d.batchcount: 1
+XLock.life1d.cycles: 10
+XLock.life1d.size: 0
+XLock.life1d.saturation: 1.0
+XLock.life1d.totalistic: True
+XLock.life3d.delay: 1000000
+XLock.life3d.batchcount: 35
+XLock.life3d.cycles: 85
+!XLock.life3d.size: 1
+XLock.life3d.saturation: 1.0
+!XLock.life3d.rule3d: 0
+XLock.life3d.rule3d: 1
+!XLock.life3d.rule3d: 4555
+!XLock.life3d.rule3d: 5766
+!XLock.life3d.rule3d: 5655
+!XLock.life3d.rule3d: 6767
+XLock.lightning.delay: 10000
+!XLock.lightning.batchcount: 1
+!XLock.lightning.cycles: 1
+!XLock.lightning.size: 1
+XLock.lightning.saturation: 0.6
+XLock.lisa.delay: 25000
+XLock.lisa.batchcount: 1
+XLock.lisa.cycles: 256
+XLock.lisa.size: -1
+XLock.lisa.saturation: 1.0
+XLock.lissie.delay: 10000
+XLock.lissie.batchcount: 1
+XLock.lissie.cycles: 2000
+XLock.lissie.size: -200
+XLock.lissie.saturation: 0.6
+XLock.loop.delay: 100000
+!XLock.loop.batchcount: 1
+XLock.loop.cycles: 1600
+XLock.loop.size: -12
+XLock.loop.saturation: 1.0
+XLock.marquee.delay: 100000
+!XLock.marquee.batchcount: 1
+!XLock.marquee.cycles: 1
+!XLock.marquee.size: 1
+XLock.marquee.saturation: 1.0
+XLock.maze.delay: 1000
+!XLock.maze.batchcount: 1
+XLock.maze.cycles: 300
+!XLock.maze.size: 8
+XLock.maze.size: -40
+XLock.maze.saturation: 1.0
+XLock.mountain.delay: 1000
+XLock.mountain.batchcount: 30
+XLock.mountain.cycles: 300
+!XLock.mountain.size: 1
+XLock.mountain.saturation: 1.0
+XLock.nose.delay: 100000
+!XLock.nose.batchcount: 1
+!XLock.nose.cycles: 1
+!XLock.nose.size: 1
+XLock.nose.saturation: 1.0
+XLock.pacman.delay: 100000
+XLock.pacman.batchcount: 10
+!XLock.pacman.cycles: 1
+XLock.pacman.size: 0
+XLock.pacman.saturation: 1.0
+XLock.penrose.delay: 10000
+!XLock.penrose.batchcount: 1
+!XLock.penrose.cycles: 1
+XLock.penrose.size: -40
+XLock.penrose.saturation: 1.0
+XLock.penrose.ammann: off
+XLock.petal.delay: 10000
+XLock.petal.batchcount: -500
+XLock.petal.cycles: 400
+!XLock.petal.size: 1
+XLock.petal.saturation: 1.0
+XLock.puzzle.delay: 10000
+XLock.puzzle.batchcount: 250
+!XLock.puzzle.cycles: 1
+!XLock.puzzle.size: 1
+XLock.puzzle.saturation: 1.0
+XLock.pyro.delay: 15000
+XLock.pyro.batchcount: 100
+!XLock.pyro.cycles: 1
+XLock.pyro.size: -3
+XLock.pyro.saturation: 1.0
+XLock.qix.delay: 30000
+!XLock.qix.batchcount: 1
+XLock.qix.cycles: 64
+!XLock.qix.size: 1
+XLock.qix.saturation: 1.0
+XLock.roll.delay: 100000
+XLock.roll.batchcount: 25
+!XLock.roll.cycles: 1
+XLock.roll.size: -64
+XLock.roll.saturation: 1.0
+XLock.rotor.delay: 10000
+XLock.rotor.batchcount: 4
+XLock.rotor.cycles: 20
+!XLock.rotor.size: 1
+XLock.rotor.saturation: 0.4
+XLock.shape.delay: 10000
+!XLock.shape.batchcount: 1
+XLock.shape.cycles: 256
+!XLock.shape.size: 1
+XLock.shape.saturation: 1.0
+XLock.sierpinski.delay: 400000
+XLock.sierpinski.batchcount: 2000
+XLock.sierpinski.cycles: 100
+!XLock.sierpinski.size: 1
+XLock.sierpinski.saturation: 1.0
+XLock.slip.delay: 50000
+XLock.slip.batchcount: 35
+XLock.slip.cycles: 50
+!XLock.slip.size: 1
+XLock.slip.saturation: 1.0
+XLock.sphere.delay: 1000
+!XLock.sphere.batchcount: 1
+!XLock.sphere.cycles: 1
+!XLock.sphere.size: 1
+XLock.sphere.saturation: 1.0
+XLock.spiral.delay: 5000
+XLock.spiral.batchcount: -40
+XLock.spiral.cycles: 350
+!XLock.spiral.size: 1
+XLock.spiral.saturation: 1.0
+XLock.spline.delay: 30000
+XLock.spline.batchcount: -6
+XLock.spline.cycles: 2048
+!XLock.spline.size: 1
+XLock.spline.saturation: 0.4
+XLock.spline.erase: off
+XLock.star.delay: 40000
+XLock.star.batchcount: 100
+!XLock.star.cycles: 1
+XLock.star.size: 100
+XLock.star.saturation: 0.2
+!XLock.star.saturation: 1.0
+XLock.star.straight: off
+XLock.star.rock: off
+XLock.star.trek: 50
+XLock.strange.delay: 1000
+!XLock.strange.batchcount: 1
+!XLock.strange.cycles: 1
+!XLock.strange.size: 1
+XLock.strange.saturation: 1.0
+XLock.swarm.delay: 10000
+XLock.swarm.batchcount: 100
+!XLock.swarm.cycles: 1
+!XLock.swarm.size: 1
+XLock.swarm.saturation: 1.0
+XLock.swirl.delay: 10000
+XLock.swirl.batchcount: 5
+!XLock.swirl.cycles: 1
+!XLock.swirl.size: 1
+XLock.swirl.saturation: 1.0
+XLock.triangle.delay: 10000
+!XLock.triangle.batchcount: 1
+!XLock.triangle.cycles: 1
+!XLock.triangle.size: 1
+XLock.triangle.saturation: 1.0
+XLock.tube.delay: 25000
+!XLock.tube.batchcount: 1
+XLock.tube.cycles: 20000
+XLock.tube.size: -200
+XLock.tube.saturation: 1.0
+XLock.turtle.delay: 1000000
+!XLock.turtle.batchcount: 1
+XLock.turtle.cycles: 20
+!XLock.turtle.size: 1
+XLock.turtle.saturation: 1.0
+XLock.voters.delay: 1000
+XLock.voters.batchcount: 0
+XLock.voters.cycles: 327670
+XLock.voters.size: 0
+XLock.voters.saturation: 1.0
+XLock.wator.delay: 750000
+!XLock.wator.batchcount: 1
+XLock.wator.cycles: 32767
+XLock.wator.size: 0
+XLock.wator.saturation: 1.0
+XLock.wire.delay: 500000
+XLock.wire.batchcount: 1000
+XLock.wire.cycles: 150
+XLock.wire.size: -8
+XLock.wire.saturation: 1.0
+XLock.world.delay: 100000
+XLock.world.batchcount: -16
+!XLock.world.cycles: 1
+!XLock.world.size: 1
+XLock.world.saturation: 0.3
+XLock.worm.delay: 17000
+XLock.worm.batchcount: -20
+XLock.worm.cycles: 10
+XLock.worm.size: -3
+XLock.worm.saturation: 1.0
+
+XLock.escher.delay: 1000
+XLock.escher.batchcount: 0
+!XLock.escher.cycles: 1
+!XLock.escher.size: 1
+XLock.escher.saturation: 1.0
+XLock.escher.solidmoebius: off
+XLock.escher.noants: off
+XLock.gears.delay: 1000
+XLock.gears.batchcount: 1
+XLock.gears.cycles: 2
+!XLock.gears.size: 1
+XLock.gears.saturation: 1.0
+XLock.morph3d.delay: 1000
+XLock.morph3d.batchcount: 0
+!XLock.morph3d.cycles: 1
+!XLock.morph3d.size: 1
+XLock.morph3d.saturation: 1.0
+XLock.pipes.delay: 1000
+XLock.pipes.batchcount: 2
+XLock.pipes.cycles: 5
+XLock.pipes.size: 500
+XLock.pipes.saturation: 1.0
+XLock.pipes.fisheye: on
+XLock.pipes.tightturns: off
+XLock.pipes.rotatepipes: on
+
+XLock.superquadrics.delay: 1000
+XLock.superquadrics.batchcount: 25
+XLock.superquadrics.cycles: 40
+!XLock.superquadrics.size: 1
+XLock.superquadrics.saturation: 1.0
+XLock.superquadrics.spinspeed: 5.0
+XLock.sproingies.delay: 1000
+XLock.sproingies.batchcount: 5
+XLock.sproingies.cycles: 0
+XLock.sproingies.size: 400
+XLock.sproingies.saturation: 1.0
+
+XLock.fadeplot.delay: 30000
+XLock.fadeplot.batchcount: 1500
+XLock.fadeplot.cycles: 1
+XLock.fadeplot.size: 1
+XLock.fadeplot.saturation: 1.0
+
+XLock.blank.delay: 3000000
+!XLock.blank.batchcount: 1
+!XLock.blank.cycles: 1
+!XLock.blank.size: 1
+XLock.blank.saturation: 1.0
+XLock.bomb.delay: 100000
+XLock.bomb.batchcount: 10
+XLock.bomb.cycles: 20
+!XLock.bomb.size: 1
+XLock.bomb.saturation: 1.0
+
+XLock.random.duration: 60
+!XLock.random.duration: 0
+XLock.random.modelist: all
+!XLock.random.modelist: allstable
+!XLock.random.modelist: allnice
+XLock.random.sequential: off
--- /dev/null
+!!!!
+! XmLock: Class resource for xmlock
+!!!!
+!XmLock.Form.Boolean.Fontlist: -*-*-bold-i-*-*-16-*-*-*-*-*-*-*
+!XmLock.Form.Switches.Fontlist: -*-*-bold-i-*-*-16-*-*-*-*-*-*-*
+!XmLock.Form.PushButtonRow.Menubar.PopupOptions.Options.Font.Fontlist: -*-*-bold-i-*-*-*-*-*-*-*-*-*-*
+XmLock.Form.PushButtonRow.Exit.Background: red
+XmLock.Form.PushButtonRow.Exit.Armcolor: pink
+!XmLock.Form.PushButtonRow.Exit.Fontlist: -*-*-bold-i-*-*-*-*-*-*-*-*-*-*
+!XmLock.Form.Modes.Labelstring: Modes
+!XmLock.Form.Switches.Labelstring: Turn On/Off
+!XmLock.Form.Row*ScrolledListModes.BorderColor: black
+!XmLock.Form.Row*ScrolledListModes.Fontlist: -*-*-bold-*-*-*-16-*-*-*-*-*-*-*
+XmLock.Form.Row*ScrolledListModes.Background: light blue
+XmLock.Form.Row.TogglesRow.Background: white
+!XmLock.Form.Row.Xmrowcolumn*Fontlist: -*-*-*-*-*-*-14-*-*-*-*-*-*-*
--- /dev/null
+
+
+
+XLOCK(1) XLOCK(1)
+
+
+N\bNA\bAM\bME\bE
+ xlock - Locks the local X display until a password is
+ entered.
+
+
+S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
+ x\bxl\blo\boc\bck\bk [ -\b-h\bhe\bel\blp\bp ] [ -\b-v\bve\ber\brs\bsi\bio\bon\bn ] [ -\b-r\bre\bes\bso\bou\bur\brc\bce\bes\bs ] [ -\b-d\bdi\bis\bsp\bpl\bla\bay\by
+ _\bd_\bi_\bs_\bp_\bl_\ba_\by_\bn_\ba_\bm_\be ] [ -\b-v\bvi\bis\bsu\bua\bal\bl _\bv_\bi_\bs_\bu_\ba_\bl_\bn_\ba_\bm_\be ] [ -\b-n\bna\bam\bme\be _\br_\be_\bs_\bo_\bu_\br_\bc_\be_\bn_\ba_\bm_\be
+ ] [ -\b-m\bmo\bod\bde\be _\bm_\bo_\bd_\be_\bn_\ba_\bm_\be ] [ -\b-d\bde\bel\bla\bay\by _\bu_\bs_\be_\bc_\bs ] [ -\b-b\bba\bat\btc\bch\bhc\bco\bou\bun\bnt\bt _\bn_\bu_\bm ]
+ [ -\b-c\bcy\byc\bcl\ble\bes\bs _\bn_\bu_\bm ] [ -\b-s\bsa\bat\btu\bur\bra\bat\bti\bio\bon\bn _\bv_\ba_\bl_\bu_\be ] [ -\b-/\b/+\b+a\bal\bll\blo\bow\bwa\bac\bcc\bce\bes\bss\bs ] [
+ -\b-/\b/+\b+n\bno\bol\blo\boc\bck\bk ] [ -\b-/\b/+\b+i\bin\bnw\bwi\bin\bnd\bdo\bow\bw ] [ -\b-/\b/+\b+i\bin\bnr\bro\boo\bot\bt ] [ -\b-/\b/+\b+r\bre\bem\bmo\bot\bte\be ] [
+ -\b-/\b/+\b+m\bmo\bon\bno\bo ] [ -\b-/\b/+\b+a\bal\bll\blo\bow\bwr\bro\boo\bot\bt ] [ -\b-/\b/+\b+d\bde\beb\bbu\bug\bg ] [ -\b-/\b/+\b+e\bec\bch\bho\bok\bke\bey\bys\bs ] [
+ -\b-/\b/+\b+e\ben\bna\bab\bbl\ble\bes\bsa\bav\bve\ber\br ] [ -\b-/\b/+\b+g\bgr\bra\bab\bbm\bmo\bou\bus\bse\be ] [ -\b-/\b/+\b+g\bgr\bra\bab\bbs\bse\ber\brv\bve\ber\br ] [
+ -\b-/\b/+\b+i\bin\bns\bst\bta\bal\bll\bl ] [ -\b-/\b/+\b+s\bso\bou\bun\bnd\bd ] [ -\b-/\b/+\b+t\bti\bim\bme\bee\bel\bla\bap\bps\bse\bed\bd ] [ -\b-/\b/+\b+u\bus\bse\bef\bfi\bir\brs\bst\bt
+ ] [ -\b-/\b/+\b+v\bve\ber\brb\bbo\bos\bse\be ] [ -\b-n\bni\bic\bce\be _\bl_\be_\bv_\be_\bl ] [ -\b-l\blo\boc\bck\bkd\bde\bel\bla\bay\by _\bs_\be_\bc_\bo_\bn_\bd_\bs ] [
+ -\b-t\bti\bim\bme\beo\bou\but\bt _\bs_\be_\bc_\bo_\bn_\bd_\bs ] [ -\b-f\bfo\bon\bnt\bt _\bf_\bo_\bn_\bt_\bn_\ba_\bm_\be ] [ -\b-m\bms\bsg\bgf\bfo\bon\bnt\bt _\bm_\be_\bs_\bs_\ba_\bg_\be_\b-
+ _\bf_\bo_\bn_\bt_\bn_\ba_\bm_\be ] [ -\b-b\bbg\bg _\bc_\bo_\bl_\bo_\br ] [ -\b-f\bfg\bg _\bc_\bo_\bl_\bo_\br ] [ -\b-b\bba\bac\bck\bkg\bgr\bro\bou\bun\bnd\bd _\bc_\bo_\bl_\bo_\br
+ ] [ -\b-f\bfo\bor\bre\beg\bgr\bro\bou\bun\bnd\bd _\bc_\bo_\bl_\bo_\br ] [ -\b-u\bus\bse\ber\brn\bna\bam\bme\be _\bs_\bt_\br_\bi_\bn_\bg ] [ -\b-p\bpa\bas\bss\bsw\bwo\bor\brd\bd
+ _\bs_\bt_\br_\bi_\bn_\bg ] [ -\b-i\bin\bnf\bfo\bo _\bs_\bt_\br_\bi_\bn_\bg ] [ -\b-v\bva\bal\bli\bid\bda\bat\bte\be _\bs_\bt_\br_\bi_\bn_\bg ] [ -\b-i\bin\bnv\bva\bal\bli\bid\bd
+ _\bs_\bt_\br_\bi_\bn_\bg ] [ -\b-g\bge\beo\bom\bme\bet\btr\bry\by _\bg_\be_\bo_\bm ] [ -\b-i\bic\bco\bon\bng\bge\beo\bom\bme\bet\btr\bry\by _\bg_\be_\bo_\bm ] [
+ -\b-/\b/+\b+f\bfu\bul\bll\blr\bra\ban\bnd\bdo\bom\bm ] [ -\b-/\b/+\b+w\bwi\bir\bre\bef\bfr\bra\bam\bme\be ] [ -\b-/\b/+\b+u\bus\bse\be3\b3d\bd ] [ -\b-d\bde\bel\blt\bta\ba3\b3d\bd
+ _\bv_\ba_\bl_\bu_\be ] [ -\b-n\bno\bon\bne\be3\b3d\bd _\bc_\bo_\bl_\bo_\br ] [ -\b-r\bri\big\bgh\bht\bt3\b3d\bd _\bc_\bo_\bl_\bo_\br ] [ -\b-l\ble\bef\bft\bt3\b3d\bd
+ _\bc_\bo_\bl_\bo_\br ] [ -\b-b\bbo\bot\bth\bh3\b3d\bd _\bc_\bo_\bl_\bo_\br ] [ -\b-p\bpr\bro\bog\bgr\bra\bam\bm _\bp_\br_\bo_\bg_\br_\ba_\bm_\bn_\ba_\bm_\be ] [ -\b-m\bme\bes\bs-\b-
+ s\bsa\bag\bge\bes\bsf\bfi\bil\ble\be _\bf_\bo_\br_\bm_\ba_\bt_\bt_\be_\bd_\b-_\bf_\bi_\bl_\be_\bn_\ba_\bm_\be ] [ -\b-m\bme\bes\bss\bsa\bag\bge\bef\bfi\bil\ble\be _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be ] [
+ -\b-m\bme\bes\bss\bsa\bag\bge\be _\bs_\bt_\br_\bi_\bn_\bg ] [ -\b-m\bmf\bfo\bon\bnt\bt _\bm_\bo_\bd_\be_\b-_\bf_\bo_\bn_\bt_\bn_\ba_\bm_\be ] [ -\b-i\bim\bma\bag\bge\bef\bfi\bil\ble\be
+ _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be ] [ -\b-n\bne\bei\big\bgh\bhb\bbo\bor\brs\bs _\bn_\bu_\bm ] [ -\b-c\bcp\bpa\bas\bss\bsw\bwd\bd _\bc_\br_\by_\bp_\bt_\be_\bd_\b-_\bp_\ba_\bs_\bs_\bw_\bo_\br_\bd
+ ] [ -\b-f\bfo\bor\brc\bce\beL\bLo\bog\bgo\bou\but\bt _\bm_\bi_\bn_\bu_\bt_\be_\bs ] [ -\b-l\blo\bog\bgo\bou\but\btB\bBu\but\btt\bto\bon\bnL\bLa\bab\bbe\bel\bl _\bt_\be_\bx_\bt_\bs_\bt_\br_\bi_\bn_\bg
+ ] [ -\b-l\blo\bog\bgo\bou\but\btB\bBu\but\btt\bto\bon\bnH\bHe\bel\blp\bp _\bt_\be_\bx_\bt_\bs_\bt_\br_\bi_\bn_\bg ] [ -\b-l\blo\bog\bgo\bou\but\btF\bFa\bai\bil\ble\bed\bdS\bSt\btr\bri\bin\bng\bg
+ _\bt_\be_\bx_\bt_\bs_\bt_\br_\bi_\bn_\bg ] [ -\b-/\b/+\b+d\bdt\bts\bsa\bav\bve\ber\br ] [ -\b-l\blo\boc\bck\bks\bso\bou\bun\bnd\bd _\bs_\bt_\br_\bi_\bn_\bg ] [
+ -\b-i\bin\bnf\bfo\bos\bso\bou\bun\bnd\bd _\bs_\bt_\br_\bi_\bn_\bg ] [ -\b-v\bva\bal\bli\bid\bds\bso\bou\bun\bnd\bd _\bs_\bt_\br_\bi_\bn_\bg ] [ -\b-i\bin\bnv\bva\bal\bli\bid\bds\bso\bou\bun\bnd\bd
+ _\bs_\bt_\br_\bi_\bn_\bg ]
+
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ x\bxl\blo\boc\bck\bk locks the X server till the user enters their pass-
+ word at the keyboard. While x\bxl\blo\boc\bck\bk is running, all new
+ server connections are refused. The screen saver is dis-
+ abled. The mouse cursor is turned off. The screen is
+ blanked and a changing pattern is put on the screen. If a
+ key or a mouse button is pressed then the user is prompted
+ for the password of the user who started x\bxl\blo\boc\bck\bk.
+
+ If the correct password is typed, then the screen is
+ unlocked and the X server is restored. When typing the
+ password Control-U and Control-H are active as kill and
+ erase respectively. To return to the locked screen, click
+ in the small icon version of the changing pattern.
+
+ In the lower part of the password screen a message is dis-
+ played. This message is taken from the first file of the
+ following that exists: $HOME/.xlockmessage, $HOME/.plan,
+ or $HOME/.signature.
+
+ On systems which support new BSD style authentication, the
+
+
+
+X11R6 Contrib 01 Jan 1997 1
+
+
+
+
+
+XLOCK(1) XLOCK(1)
+
+
+ password may be prefixed by an authentication style fol-
+ lowed by a colon (i.e. "style:password"). See the
+ login.conf(5) for more information on authentication
+ styles.
+
+
+N\bNO\bOT\bTE\bE O\bON\bN E\bET\bTI\bIQ\bQU\bUE\bET\bTT\bTE\bE
+ _\bX_\bl_\bo_\bc_\bk should not be used on public terminals when there is
+ a high demand for them.
+
+ If you find a public terminal that has been locked by
+ another user and there are no other terminals available,
+ and the terminal appears to have been left idle for a
+ while (normally more than 15 minutes), it is fair to try
+ to reset the session in some manner.
+
+
+O\bOP\bPT\bTI\bIO\bON\bNS\bS
+ -\b-h\bhe\bel\blp\bp
+ Print options and a brief description to standard
+ output.
+
+ -\b-v\bve\ber\brs\bsi\bio\bon\bn
+ Print version number (if >= 4.00) to standard output.
+
+ -\b-r\bre\bes\bso\bou\bur\brc\bce\bes\bs
+ Print default resource file to standard output.
+
+ -\b-d\bdi\bis\bsp\bpl\bla\bay\by _\bd_\bi_\bs_\bp_\bl_\ba_\by_\bn_\ba_\bm_\be
+ The _\bd_\bi_\bs_\bp_\bl_\ba_\by option sets the X11 display to lock.
+ x\bxl\blo\boc\bck\bk locks all available screens on a given server,
+ and restricts you to locking only a local server such
+ as u\bun\bni\bix\bx:\b:0\b0,\b, l\blo\boc\bca\bal\blh\bho\bos\bst\bt:\b:0\b0,\b, or :\b:0\b0 unless you set the
+ -\b-r\bre\bem\bmo\bot\bte\be option.
+
+ -\b-v\bvi\bis\bsu\bua\bal\bl _\bv_\bi_\bs_\bu_\ba_\bl_\bn_\ba_\bm_\be
+ _\bv_\bi_\bs_\bu_\ba_\bl_\bn_\ba_\bm_\be which is one of "StaticGray", "GrayScale",
+ "StaticColor", "PseudoColor", "TrueColor", or
+ "DirectColor". May not be available depending on how
+ it is initially configured. This is under construc-
+ tion.
+
+ -\b-n\bna\bam\bme\be _\br_\be_\bs_\bo_\bu_\br_\bc_\be_\bn_\ba_\bm_\be
+ _\br_\be_\bs_\bo_\bu_\br_\bc_\be_\bn_\ba_\bm_\be is used instead of X\bXL\bLo\boc\bck\bk when looking
+ for resources to configure x\bxl\blo\boc\bck\bk.
+
+ -\b-m\bmo\bod\bde\be _\bm_\bo_\bd_\be_\bn_\ba_\bm_\be
+ As of this writing there are over 60 display modes
+ supported (plus one more for random selection of one
+ of these).
+
+ a\ban\bnt\bt Shows Langton's and Turk's generalized ants.
+
+ b\bba\bal\bll\bl Shows bouncing balls.
+
+
+
+X11R6 Contrib 01 Jan 1997 2
+
+
+
+
+
+XLOCK(1) XLOCK(1)
+
+
+ b\bba\bat\bt Shows bouncing flying bats.
+
+ b\bbl\blo\bot\bt Shows Rorschach's ink blot test.
+
+ b\bbo\bou\bub\bbo\bou\bul\ble\be
+ Shows Mimi's bouboule of moving stars.
+
+ b\bbo\bou\bun\bnc\bce\be Shows bouncing footballs.
+
+ b\bbr\bra\bai\bid\bd Shows random braids and knots.
+
+ b\bbu\bug\bg Shows Palmiter's bug evolution and a garden of
+ Eden.
+
+ c\bca\bar\brt\bto\boo\bon\bn Shows bouncing cartoons. Not compiled in by
+ default.
+
+ c\bcl\blo\boc\bck\bk Shows Packard's oclock.
+
+ c\bcr\bry\bys\bst\bta\bal\bl Shows polygons in 2D plane groups.
+
+ d\bda\bai\bis\bsy\by Shows a meadow of daisies.
+
+ d\bdc\bcl\blo\boc\bck\bk Shows a floating digital clock.
+
+ d\bde\bem\bmo\bon\bn Shows Griffeath's cellular automata.
+
+ d\bdr\bri\bif\bft\bt Shows cosmic drifting flame fractals.
+
+ e\bes\bsc\bch\bhe\ber\br Shows Escher-like GL stuff. May not be available
+ depending on how it was configured.
+
+ e\bey\bye\bes\bs Shows eyes following a bouncing grelb.
+
+ f\bfl\bla\bag\bg Shows a flying flag of your operating system.
+
+ f\bfl\bla\bam\bme\be Shows cosmic flame fractals.
+
+ f\bfo\bor\bre\bes\bst\bt Shows binary trees of a fractal forest.
+
+ f\bfr\bra\bac\bct\bt Shows fractals.
+
+ g\bga\bal\bla\bax\bxy\by Shows crashing spiral galaxies.
+
+ g\bge\bea\bar\brs\bs Shows GL's gears. May not be available depending
+ on how it was configured.
+
+ g\bge\beo\bom\bme\bet\btr\bry\by
+ Shows morphing of a complete graph.
+
+ g\bgr\bra\bav\bv Shows orbiting planets.
+
+ h\bhe\bel\bli\bix\bx Shows string art.
+
+
+
+
+X11R6 Contrib 01 Jan 1997 3
+
+
+
+
+
+XLOCK(1) XLOCK(1)
+
+
+ h\bho\bop\bp Shows real plane iterated fractals.
+
+ h\bhy\byp\bpe\ber\br Shows a spinning tesseract in 4D space.
+
+ i\bic\bco\bo Shows a bouncing polyhedra.
+
+ i\bif\bfs\bs Shows a modified iterated function system.
+
+ i\bim\bma\bag\bge\be Shows randomly appearing logos.
+
+ j\bju\bul\bli\bia\ba Shows the Julia set.
+
+ k\bka\bal\ble\bei\bid\bd Shows a kaleidoscope.
+
+ l\bla\bas\bse\ber\br Shows spinning lasers.
+
+ l\bli\bif\bfe\be Shows Conway's game of life.
+
+ l\bli\bif\bfe\be1\b1d\bd Shows Wolfram's game of 1D life.
+
+ l\bli\bif\bfe\be3\b3d\bd Shows Bays' game of 3D life.
+
+ l\bli\big\bgh\bht\btn\bni\bin\bng\bg
+ Shows Keith's fractal lightning bolts.
+
+ l\bli\bis\bsa\ba Shows animated lisajous loops.
+
+ l\bli\bis\bss\bsi\bie\be Shows lissajous worms.
+
+ l\blo\boo\bop\bp Shows Langton's self-producing loops.
+
+ m\bma\bar\brq\bqu\bue\bee\be Shows messages.
+
+ m\bma\baz\bze\be Shows a random maze and a depth first search solu-
+ tion.
+
+ m\bmo\bor\brp\bph\bh3\b3d\bd Shows GL morphing polyhedra. May not be available
+ depending on how it was configured.
+
+ m\bmo\bou\bun\bnt\bta\bai\bin\bn
+ Shows Papo's mountain range.
+
+ n\bno\bos\bse\be Shows a man with a big nose runs around spewing
+ out messages.
+
+ p\bpa\bac\bcm\bma\ban\bn Shows Pacman(tm).
+
+ p\bpi\bip\bpe\bes\bs Shows a selfbuilding pipe system. May not be
+ available depending on how it was configured.
+
+ p\bpe\ben\bnr\bro\bos\bse\be Shows Penrose's quasiperiodic tilings.
+
+ p\bpe\bet\bta\bal\bl Shows various GCD Flowers.
+
+
+
+
+X11R6 Contrib 01 Jan 1997 4
+
+
+
+
+
+XLOCK(1) XLOCK(1)
+
+
+ p\bpu\buz\bzz\bzl\ble\be Shows a puzzle being scrambled and then solved.
+
+ p\bpy\byr\bro\bo Shows fireworks.
+
+ q\bqi\bix\bx Shows spinning lines a la Qix(tm).
+
+ r\bro\bol\bll\bl Shows a rolling ball.
+
+ r\bro\bot\bto\bor\br Shows Tom's Roto-Rooter.
+
+ s\bsh\bha\bap\bpe\be Shows stippled rectangles, ellipses, and trian-
+ gles.
+
+ s\bsi\bie\ber\brp\bpi\bin\bns\bsk\bki\bi
+ Shows a Sierpinski's triangle.
+
+ s\bsl\bli\bip\bp Shows slipping blits.
+
+ s\bsp\bph\bhe\ber\bre\be Shows a bunch of shaded spheres.
+
+ s\bsp\bpi\bir\bra\bal\bl Shows helixes of dots.
+
+ s\bsp\bpl\bli\bin\bne\be Shows colorful moving splines.
+
+ s\bsp\bpr\bro\boi\bin\bng\bgi\bie\bes\bs
+ Shows Sproingies! Nontoxic. Safe for pets and
+ small children. May not be available depending on
+ how it was configured.
+
+ s\bst\bta\bar\br Shows a star field with a twist.
+
+ s\bst\btr\bra\ban\bng\bge\be Shows strange attractors.
+
+ s\bsu\bup\bpe\ber\brq\bqu\bua\bad\bdr\bri\bic\bcs\bs
+ Shows 3D mathematical shapes. May not be avail-
+ able depending on how it was configured.
+
+ s\bsw\bwa\bar\brm\bm Shows a swarm of bees following a wasp.
+
+ s\bsw\bwi\bir\brl\bl Shows animated swirling patterns.
+
+ t\btr\bri\bia\ban\bng\bgl\ble\be
+ Shows a triangular mountain range.
+
+ t\btu\bub\bbe\be Shows an animated tube.
+
+ t\btu\bur\brt\btl\ble\be Shows turtle fractals.
+
+ v\bvo\bot\bte\ber\brs\bs Shows Dewdney's Voters.
+
+ w\bwa\bat\bto\bor\br Shows Dewdney's Water-Torus planet of fish and
+ sharks.
+
+ w\bwi\bir\bre\be Shows a random circuit with 2 electrons.
+
+
+
+X11R6 Contrib 01 Jan 1997 5
+
+
+
+
+
+XLOCK(1) XLOCK(1)
+
+
+ w\bwo\bor\brl\bld\bd Shows spinning Earths.
+
+ w\bwo\bor\brm\bm Shows wiggly worms.
+
+ b\bbl\bla\ban\bnk\bk Shows nothing but a black screen. Does not show
+ up in random mode.
+
+ b\bbo\bom\bmb\bb Shows a bomb and will autologout after a time.
+ Does not show up in random mode and may be avail-
+ able depending on how it was configured.
+
+ r\bra\ban\bnd\bdo\bom\bm Shows a random mode from above except blank (and
+ bomb).
+
+
+ -\b-d\bde\bel\bla\bay\by _\bu_\bs_\be_\bc_\bs
+ The _\bd_\be_\bl_\ba_\by option sets the speed at which a mode will
+ operate. It simply sets the number of microseconds
+ to delay between batches of animations. In blank
+ mode, it is important to set this to some small num-
+ ber of seconds, because the keyboard and mouse are
+ only checked after each delay, so you cannot set the
+ delay too high, but a delay of zero would needlessly
+ consume cpu checking for mouse and keyboard input in
+ a tight loop, since blank mode has no work to do.
+
+ -\b-b\bba\bat\btc\bch\bhc\bco\bou\bun\bnt\bt _\bn_\bu_\bm
+ The _\bb_\ba_\bt_\bc_\bh_\bc_\bo_\bu_\bn_\bt option sets number of _\bt_\bh_\bi_\bn_\bg_\bs to do per
+ batch to _\bn_\bu_\bm _\b.
+
+ In ant mode this refers the number of ants.
+
+ In ball mode it is the number of balls.
+
+ In bat mode it is the number of bats, could be less
+ because of conflicts.
+
+ In blot mode this refers to the number of pixels ren-
+ dered in the same color.
+
+ In bouboule mode it is the number of stars.
+
+ In bounce mode it is the number of balls, could be
+ less because of conflicts.
+
+ In braid mode it is the upper bound number of
+ strands.
+
+ In bug mode it is the number of bugs, could be less
+ because of conflicts.
+
+ In cartoon mode it means nothing.
+
+ In clock mode it is the percentage of the screen, but
+
+
+
+X11R6 Contrib 01 Jan 1997 6
+
+
+
+
+
+XLOCK(1) XLOCK(1)
+
+
+ less than 100%.
+
+ In crystal mode it is the number of polygons.
+
+ In daisy mode it is the number flowers that make a
+ meadow.
+
+ In dclock mode it means nothing.
+
+ In demon mode this refers the number of colors.
+
+ In drift mode it is the number of levels to recurse
+ (larger = more complex).
+
+ In escher mode it is the current picture.
+
+ In eyes mode it is the number of eyes.
+
+ In flame mode it is the number of levels to recurse
+ (larger = more complex).
+
+ In forest mode it is the number trees that make a
+ forest.
+
+ In fract mode it is means nothing.
+
+ In galaxy mode it means the number of galaxies.
+
+ In gears mode it is the number of degrees to rotate
+ the set of gears by.
+
+ In geometry mode it is the number of vertices.
+
+ In grav mode it is the number of planets.
+
+ In helix mode it means nothing.
+
+ In hop mode this refers to the number of pixels ren-
+ dered in the same color.
+
+ In hyper mode it means nothing.
+
+ In ico mode it is the ith plantonic solid.
+
+ In ifs mode it means nothing.
+
+ In image mode it means it is the number of logos on
+ screen at once.
+
+ In julia mode it is the depth of recursion.
+
+ In kaleid mode it means nothing.
+
+ In laser mode it is the number lasers.
+
+
+
+X11R6 Contrib 01 Jan 1997 7
+
+
+
+
+
+XLOCK(1) XLOCK(1)
+
+
+ In life mode it is the number of generations before a
+ glider is introduced.
+
+ In life1d mode it means nothing.
+
+ In life3d mode it is the number of generations before
+ a glider is introduced.
+
+ In lisa mode it is the number of loops.
+
+ In lissie mode it is the number of worms.
+
+ In loop mode it means nothing.
+
+ In marquee mode it means nothing.
+
+ In maze mode it means nothing.
+
+ In morph3d mode it is the ith plantonic solid.
+
+ In mountain mode it is the number of mountains.
+
+ In nose mode it means nothing.
+
+ In qix mode it is the number of lines rendered in the
+ same color.
+
+ In pacman mode it means the number of ghosts.
+
+ In penrose mode it means nothing.
+
+ In petal mode it the greatest random number of
+ petals.
+
+ In pipes mode it shows different joints, 0 random, 1
+ spherical, 2 bolted elbow, 3 elbow, and 4 alternat-
+ ing.
+
+ In puzzle mode it the number of moves.
+
+ In pyro mode it is the maximum number flying rockets
+ at one time.
+
+ In rotor mode it is the number of points.
+
+ In rotor mode it is the number of rotor thingys which
+ whirr...
+
+ In shape mode it means nothing.
+
+ In sierpinski mode it is the number of points.
+
+ In slip mode it means nothing.
+
+
+
+
+X11R6 Contrib 01 Jan 1997 8
+
+
+
+
+
+XLOCK(1) XLOCK(1)
+
+
+ In sphere mode it means nothing.
+
+ In spiral mode it is the number of spirals.
+
+ In spline mode it is the number of points "splined".
+
+ In sproingies mode it is the number of sproingies.
+
+ In star mode it is the number of stars on the screen
+ at once.
+
+ In strange mode it means nothing.
+
+ In superquadrics mode its the number of horizontal
+ and vertical lines in the superquadric.
+
+ In swirl mode it means the number of "knots".
+
+ In swarm mode it is the number of bees.
+
+ In triangular mode it is the number of mountains.
+
+ In tube mode it means nothing.
+
+ In turtle mode it means nothing.
+
+ In voters mode it means the number of parties, 2 or
+ 3.
+
+ In wator mode it means the breed time for the fish.
+
+ In wire mode it means the length of the circuit.
+
+ In world mode it is the number of worlds.
+
+ In worm mode it is the number of worms.
+
+ In blank mode it means nothing.
+
+ In bomb mode it means the number of minutes to autol-
+ ogout.
+
+ A negative _\bb_\ba_\bt_\bc_\bh_\bc_\bo_\bu_\bn_\bt allows for randomness. The
+ range from the minimum allowed nonnegative _\bb_\ba_\bt_\bc_\bh_\bc_\bo_\bu_\bn_\bt
+ for a particular mode to the ABS( _\bb_\ba_\bt_\bc_\bh_\bc_\bo_\bu_\bn_\bt ) (or
+ maximum allowed _\bb_\ba_\bt_\bc_\bh_\bc_\bo_\bu_\bn_\bt , whichever is less).
+
+ -\b-c\bcy\byc\bcl\ble\bes\bs _\bn_\bu_\bm
+ The _\bc_\by_\bc_\bl_\be_\bs option sets the number of cycles until
+ time out for ant, blot, braid, bug, clock, crystal,
+ daisy, demon, eyes, flag, forest, galaxy, helix, hop,
+ hyper, ico, kaleid, laser, life, life1d, life3d,
+ lisa, lissie, loop, mountain, petal, sierpinski,
+ shape, spline +erase, triangle, tube, voters, wator,
+
+
+
+X11R6 Contrib 01 Jan 1997 9
+
+
+
+
+
+XLOCK(1) XLOCK(1)
+
+
+ and wire. For worm it is the length of the lines,
+ for julia and spiral it is the length of the trail of
+ dots, for qix it is the number of lines, for spline
+ -erase it means the number of splines * 64 (for com-
+ patibility with +erase), for gears it is the number
+ of degrees to increment the spin of each gear by, for
+ pipes it is the number of systems to draw before
+ clearing the screen, for superquadrics it is the num-
+ ber of frames it takes to morph from one shape to
+ another. For others it means nothing.
+
+ -\b-s\bsi\biz\bze\be _\bn_\bu_\bm
+ The _\bs_\bi_\bz_\be option sets the size maximum size of a star
+ in bouboule, pyro and star, size of ball in ball and
+ bounce, size of bat in bat, size of clock in clock,
+ size of the polygon in crystal, size of polyhedron in
+ ico, size of lissie in lissie, size of dots of flag,
+ width of maze hallway, size of side of penrose tile,
+ radius of loop in lisa, radius of ball in roll, size
+ of tube in tube, width of worm in worm, size of cells
+ in ant, bug, life, life1d, pacman, voters, wator, and
+ wire. In pipes it is the maximum length of a system.
+ In sproingies it is the size of the screen. A nega-
+ tive number allows for randomness, similar to _\bb_\ba_\bt_\bc_\bh_\b-
+ _\bc_\bo_\bu_\bn_\bt_\b.
+
+ -\b-s\bsa\bat\btu\bur\bra\bat\bti\bio\bon\bn _\bv_\ba_\bl_\bu_\be
+ The _\bs_\ba_\bt_\bu_\br_\ba_\bt_\bi_\bo_\bn option sets saturation of the color
+ ramp used to _\bv_\ba_\bl_\bu_\be _\b. 0 is grayscale and 1 is very
+ rich color. 0.4 is a nice pastel.
+
+ +\b+/\b/-\b-n\bno\bol\blo\boc\bck\bk
+ The _\bn_\bo_\bl_\bo_\bc_\bk option causes x\bxl\blo\boc\bck\bk to only draw the pat-
+ terns and not lock the display. A key press or a
+ mouse click will terminate the screen saver.
+
+ -\b-/\b/+\b+i\bin\bnw\bwi\bin\bnd\bdo\bow\bw
+ Runs x\bxl\blo\boc\bck\bk in a window, so that you can iconify,
+ move, or resize it and still use your screen for
+ other stuff. When running in a window, x\bxl\blo\boc\bck\bk no
+ longer locks your screen, it just looks good.
+
+ -\b-/\b/+\b+i\bin\bnr\bro\boo\bot\bt
+ Runs x\bxl\blo\boc\bck\bk in your root window. Like the _\bi_\bn_\bw_\bi_\bn_\bd_\bo_\bw
+ option it no longer locks the screen, it just looks
+ good.
+
+ -\b-/\b/+\b+r\bre\bem\bmo\bot\bte\be
+ The _\br_\be_\bm_\bo_\bt_\be option tells x\bxl\blo\boc\bck\bk to not stop you from
+ locking remote X11 servers. This option should be
+ used with care and is intended mainly to lock X11
+ terminals which cannot run x\bxl\blo\boc\bck\bk locally. If you
+ lock someone else's workstation, they will have to
+ know y\byo\bou\bur\br password to unlock it. Using _\b+_\br_\be_\bm_\bo_\bt_\be
+
+
+
+X11R6 Contrib 01 Jan 1997 10
+
+
+
+
+
+XLOCK(1) XLOCK(1)
+
+
+ overrides any resource derived values for _\br_\be_\bm_\bo_\bt_\be and
+ prevents x\bxl\blo\boc\bck\bk from being used to lock other X11
+ servers. (Use `+' instead of `-' to override
+ resources for other options that can take the `+'
+ modifier similarly.)
+
+ -\b-/\b/+\b+m\bmo\bon\bno\bo
+ The _\bm_\bo_\bn_\bo option causes x\bxl\blo\boc\bck\bk to display monochrome,
+ (black and white) pixels rather than the default col-
+ ored ones on color displays.
+
+ -\b-/\b/+\b+a\bal\bll\blo\bow\bwa\bac\bcc\bce\bes\bss\bs
+ This option is required for servers which do not
+ allow clients to modify the host access control list.
+ It is also useful if you need to run x clients on a
+ server which is locked for some reason... When
+ _\ba_\bl_\bl_\bo_\bw_\ba_\bc_\bc_\be_\bs_\bs is true, the X11 server is left open for
+ clients to attach and thus lowers the inherent secu-
+ rity of this lock screen. A side effect of using
+ this option is that if x\bxl\blo\boc\bck\bk is killed -KILL, the
+ access control list is not lost.
+
+ -\b-/\b/+\b+a\bal\bll\blo\bow\bwr\bro\boo\bot\bt
+ The _\ba_\bl_\bl_\bo_\bw_\br_\bo_\bo_\bt option allows the root password to
+ unlock the server as well as the user who started
+ x\bxl\blo\boc\bck\bk. May not be able to turn this on and off
+ depending on your system and how x\bxl\blo\boc\bck\bk was config-
+ ured.
+
+ -\b-/\b/+\b+d\bde\beb\bbu\bug\bg
+ Allows x\bxl\blo\boc\bck\bk to be debugged by doing all but locking
+ the screen.
+
+ -\b-/\b/+\b+e\bec\bch\bho\bok\bke\bey\bys\bs
+ The _\be_\bc_\bh_\bo_\bk_\be_\by_\bs option causes x\bxl\blo\boc\bck\bk to echo '?' charac-
+ ters for each key typed into the password prompt.
+ Some consider this a security risk, so the default is
+ to not echo anything.
+
+ -\b-/\b/+\b+e\ben\bna\bab\bbl\ble\bes\bsa\bav\bve\ber\br
+ By default x\bxl\blo\boc\bck\bk will disable the normal X server's
+ screen saver since it is in effect a replacement for
+ it. Since it is possible to set delay parameters
+ long enough to cause phosphor burn on some displays,
+ this option will turn back on the default screen
+ saver which is very careful to keep most of the
+ screen black.
+
+ -\b-/\b/+\b+g\bgr\bra\bab\bbm\bmo\bou\bus\bse\be
+ The _\bg_\br_\ba_\bb_\bm_\bo_\bu_\bs_\be option causes x\bxl\blo\boc\bck\bk to grab the mouse
+ and keyboard, this is the default. x\bxl\blo\boc\bck\bk can not
+ lock the screen without this.
+
+
+
+
+
+X11R6 Contrib 01 Jan 1997 11
+
+
+
+
+
+XLOCK(1) XLOCK(1)
+
+
+ -\b-/\b/+\b+g\bgr\bra\bab\bbs\bse\ber\brv\bve\ber\br
+ The _\bg_\br_\ba_\bb_\bs_\be_\br_\bv_\be_\br option causes x\bxl\blo\boc\bck\bk to grab the
+ server. This is not usually needed but some unsecure
+ X servers can be defeated without this.
+
+ -\b-/\b/+\b+i\bin\bns\bst\bta\bal\bll\bl
+ Allows x\bxl\blo\boc\bck\bk to install its own colormap if x\bxl\blo\boc\bck\bk
+ runs out of colors. May not work on with some window
+ managers (fvwm) and does not work with the -inroot
+ option.
+
+ -\b-/\b/+\b+s\bso\bou\bun\bnd\bd
+ Allows you to turn on and off sound if installed with
+ the capability.
+
+ -\b-/\b/+\b+t\bti\bim\bme\bee\bel\bla\bap\bps\bse\bed\bd
+ Allows you to find out how long a machine is locked
+ so you can complain to an administrator that someone
+ is hogging a machine.
+
+ -\b-/\b/+\b+u\bus\bse\bef\bfi\bir\brs\bst\bt
+ The _\bu_\bs_\be_\bf_\bi_\br_\bs_\bt option causes x\bxl\blo\boc\bck\bk to use the keystroke
+ which got you to the password screen as the first
+ character in the password. The default is to ignore
+ the first key pressed.
+
+ -\b-/\b/+\b+v\bve\ber\brb\bbo\bos\bse\be
+ Verbose mode, tells what options it is going to use.
+
+ -\b-n\bni\bic\bce\be _\bn_\bi_\bc_\be_\bl_\be_\bv_\be_\bl
+ The _\bn_\bi_\bc_\be option sets system nicelevel of the x\bxl\blo\boc\bck\bk
+ process to _\bn_\bi_\bc_\be_\bl_\be_\bv_\be_\bl _\b.
+
+ -\b-l\blo\boc\bck\bkd\bde\bel\bla\bay\by _\bs_\be_\bc_\bo_\bn_\bd_\bs
+ The _\bl_\bo_\bc_\bk_\bd_\be_\bl_\ba_\by option sets the number of _\bs_\be_\bc_\bo_\bn_\bd_\bs
+ before the screen needs a password to be unlocked.
+ Good for use with an autolocking mechanism like xau-
+ tolock(1).
+
+ -\b-t\bti\bim\bme\beo\bou\but\bt _\bs_\be_\bc_\bo_\bn_\bd_\bs
+ The _\bt_\bi_\bm_\be_\bo_\bu_\bt option sets the number of _\bs_\be_\bc_\bo_\bn_\bd_\bs before
+ the password screen will time out.
+
+ -\b-f\bfo\bon\bnt\bt _\bf_\bo_\bn_\bt_\bn_\ba_\bm_\be
+ The _\bf_\bo_\bn_\bt option sets the font to be used on the
+ prompt screen.
+
+ -\b-m\bms\bsg\bgf\bfo\bon\bnt\bt _\bf_\bo_\bn_\bt_\bn_\ba_\bm_\be
+ option sets the font to be used for the message that
+ is displayed in the lower part of the password
+ screen.
+
+ -\b-f\bfg\bg _\bc_\bo_\bl_\bo_\br
+ The _\bf_\bg option sets the color of the text on the
+
+
+
+X11R6 Contrib 01 Jan 1997 12
+
+
+
+
+
+XLOCK(1) XLOCK(1)
+
+
+ password screen to _\bc_\bo_\bl_\bo_\br _\b.
+
+ -\b-b\bbg\bg _\bc_\bo_\bl_\bo_\br
+ The _\bb_\bg option sets the color of the background on the
+ password screen to _\bc_\bo_\bl_\bo_\br _\b.
+
+ -\b-f\bfo\bor\bre\beg\bgr\bro\bou\bun\bnd\bd _\bc_\bo_\bl_\bo_\br
+ The _\bf_\bo_\br_\be_\bg_\br_\bo_\bu_\bn_\bd option sets the color of the text on
+ the password screen to _\bc_\bo_\bl_\bo_\br _\b.
+
+ -\b-b\bba\bac\bck\bkg\bgr\bro\bou\bun\bnd\bd _\bc_\bo_\bl_\bo_\br
+ The _\bb_\ba_\bc_\bk_\bg_\br_\bo_\bu_\bn_\bd option sets the color of the back-
+ ground on the password screen to _\bc_\bo_\bl_\bo_\br _\b.
+
+ -\b-u\bus\bse\ber\brn\bna\bam\bme\be _\bs_\bt_\br_\bi_\bn_\bg
+ Text _\bs_\bt_\br_\bi_\bn_\bg is shown in front of user name, defaults
+ to "Name: ".
+
+ -\b-p\bpa\bas\bss\bsw\bwo\bor\brd\bd _\bs_\bt_\br_\bi_\bn_\bg
+ Text _\bs_\bt_\br_\bi_\bn_\bg is the password prompt string, defaults
+ to "Password: ".
+
+ -\b-i\bin\bnf\bfo\bo _\bs_\bt_\br_\bi_\bn_\bg
+ Text _\bs_\bt_\br_\bi_\bn_\bg is an informational message to tell the
+ user what to do, defaults to "Enter password to
+ unlock; select icon to lock.".
+
+ -\b-v\bva\bal\bli\bid\bda\bat\bte\be _\bs_\bt_\br_\bi_\bn_\bg
+ Text _\bs_\bt_\br_\bi_\bn_\bg is a message shown while validating the
+ password, defaults to "Validating login..."
+
+ -\b-i\bin\bnv\bva\bal\bli\bid\bd _\bs_\bt_\br_\bi_\bn_\bg
+ Text _\bs_\bt_\br_\bi_\bn_\bg is a message shown when password is
+ invalid, defaults to "Invalid login."
+
+ -\b-g\bge\beo\bom\bme\bet\btr\bry\by _\bg_\be_\bo_\bm
+ The _\bg_\be_\bo_\bm_\be_\bt_\br_\by option sets _\bg_\be_\bo_\bm the size and offset of
+ the lock window (normally the entire screen). The
+ entire screen format is still used for entering the
+ password. The purpose is to see the screen even
+ though it is locked. This should be used with cau-
+ tion since many of the modes will fail if the windows
+ are far from square or are too small (size must be
+ greater than 0x0). This should also be used with
+ -enablesaver to protect screen from phosphor burn.
+
+ -\b-i\bic\bco\bon\bng\bge\beo\bom\bme\bet\btr\bry\by _\bg_\be_\bo_\bm
+ The _\bi_\bc_\bo_\bn_\bg_\be_\bo_\bm_\be_\bt_\br_\by option sets _\bg_\be_\bo_\bm the size of the
+ iconic screen (normally 64x64) seen when entering the
+ password. This should be used with caution since
+ many of the modes will fail if the windows are far
+ from square or are too small (size must be greater
+ than 0x0). The greatest size is 256x256. There
+ should be some limit so users could see who has
+
+
+
+X11R6 Contrib 01 Jan 1997 13
+
+
+
+
+
+XLOCK(1) XLOCK(1)
+
+
+ locked the screen. Position information of icon is
+ ignored.
+
+ -\b-/\b/+\b+f\bfu\bul\bll\blr\bra\ban\bnd\bdo\bom\bm
+ Turn on/off randomness options within modes. Not
+ implemented on all mode options.
+
+ -\b-/\b/+\b+w\bwi\bir\bre\bef\bfr\bra\bam\bme\be
+ Turn on/off wireframe, available on gears, sproingies
+ and superquadrics. Other modes should use this in
+ the future as well (e.g. daisy, life3d, triangle).
+
+ -\b-/\b/+\b+u\bus\bse\be3\b3d\bd
+ Turn on/off 3d view, available on bouboule, pyro,
+ star, and worm.
+
+ -\b-d\bde\bel\blt\bta\ba3\b3d\bd _\bv_\ba_\bl_\bu_\be
+ Space between the center of your 2 eyes for 3d mode.
+
+ -\b-n\bno\bon\bne\be3\b3d\bd _\bc_\bo_\bl_\bo_\br
+ Color used for empty size in 3d mode.
+
+ -\b-r\bri\big\bgh\bht\bt3\b3d\bd _\bc_\bo_\bl_\bo_\br
+ Color used for right eye in 3d mode.
+
+ -\b-l\ble\bef\bft\bt3\b3d\bd _\bc_\bo_\bl_\bo_\br
+ Color used for left eye in 3d mode.
+
+ -\b-b\bbo\bot\bth\bh3\b3d\bd _\bc_\bo_\bl_\bo_\br
+ Color used for overlapping images for left and right
+ eye in 3d mode.
+
+ -\b-p\bpr\bro\bog\bgr\bra\bam\bm _\bp_\br_\bo_\bg_\br_\ba_\bm_\bn_\ba_\bm_\be
+ The _\bp_\br_\bo_\bg_\br_\ba_\bm option sets the program to be used as the
+ fortune generator. Currently used only for marquee
+ and nose modes.
+
+ -\b-m\bme\bes\bss\bsa\bag\bge\bes\bsf\bfi\bil\ble\be _\bf_\bo_\br_\bm_\ba_\bt_\bt_\be_\bd_\b-_\bf_\bi_\bl_\be_\bn_\ba_\bm_\be
+ The _\bm_\be_\bs_\bs_\ba_\bg_\be_\bs_\bf_\bi_\bl_\be option sets the file to be used as
+ the fortune generator. The first entry is the number
+ of fortunes, the next line contains the first for-
+ tune. Fortunes begin with a "%%" on a line by
+ itself. Currently used only for marquee and nose
+ modes. If one exists, it takes precedence over the
+ fortune program.
+
+ -\b-m\bme\bes\bss\bsa\bag\bge\bef\bfi\bil\ble\be _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be
+ The _\bm_\be_\bs_\bs_\ba_\bg_\be_\bf_\bi_\bl_\be option sets the file where the con-
+ tents are the message. Currently used only for mar-
+ quee and nose modes. If one exists, it takes prece-
+ dence over the fortune program and messagesfile.
+
+ -\b-m\bme\bes\bss\bsa\bag\bge\be _\bt_\be_\bx_\bt_\bs_\bt_\br_\bi_\bn_\bg
+ The _\bm_\be_\bs_\bs_\ba_\bg_\be option sets the message. Currently used
+
+
+
+X11R6 Contrib 01 Jan 1997 14
+
+
+
+
+
+XLOCK(1) XLOCK(1)
+
+
+ only for marquee and nose modes. If one exists, it
+ takes precedence over the fortune program, messages-
+ file and messagefile.
+
+ -\b-m\bmf\bfo\bon\bnt\bt _\bm_\bo_\bd_\be_\b-_\bf_\bo_\bn_\bt_\bn_\ba_\bm_\be
+ The _\bm_\bf_\bo_\bn_\bt option sets the font to be used in the
+ mode. Currently used only for marquee and nose
+ modes.
+
+ -\b-i\bim\bma\bag\bge\bef\bfi\bil\ble\be _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be
+ The _\bi_\bm_\ba_\bg_\be_\bf_\bi_\bl_\be option sets the ras or xpm file to be
+ displayed with image or puzzle mode. Raster files
+ work with -install as well.
+
+
+M\bMO\bOR\bRE\bE O\bOP\bPT\bTI\bIO\bON\bNS\bS (\b(t\bth\bhe\bes\bse\be m\bma\bay\by n\bno\bot\bt b\bbe\be a\bav\bva\bai\bil\bla\bab\bbl\ble\be)\b)
+ -\b-c\bcp\bpa\bas\bss\bsw\bwd\bd _\bc_\br_\by_\bp_\bt_\be_\bd_\b-_\bp_\ba_\bs_\bs_\bw_\bo_\br_\bd
+ The _\bc_\bp_\ba_\bs_\bs_\bw_\bd option sets the key to be this text
+ string to unlock x\bxl\blo\boc\bck\bk instead of password file.
+
+ -\b-f\bfo\bor\brc\bce\beL\bLo\bog\bgo\bou\but\bt _\bm_\bi_\bn_\bu_\bt_\be_\bs
+ The _\bf_\bo_\br_\bc_\be_\bL_\bo_\bg_\bo_\bu_\bt option sets _\bm_\bi_\bn_\bu_\bt_\be_\bs to auto-logout.
+
+ -\b-l\blo\bog\bgo\bou\but\btB\bBu\but\btt\bto\bon\bnL\bLa\bab\bbe\bel\bl _\bs_\bt_\br_\bi_\bn_\bg
+ Text _\bs_\bt_\br_\bi_\bn_\bg is a message shown inside logout button
+ when logout button is displayed. Defaults to
+ "Logout".
+
+ -\b-l\blo\bog\bgo\bou\but\btB\bBu\but\btt\bto\bon\bnH\bHe\bel\blp\bp _\bs_\bt_\br_\bi_\bn_\bg
+ Text _\bs_\bt_\br_\bi_\bn_\bg is a message shown outside logout button
+ when logout button is displayed. Defaults to "Click
+ the \"Logout\" button to log out current\n user and
+ make workstation available."
+
+ -\b-l\blo\bog\bgo\bou\but\btF\bFa\bai\bil\ble\bed\bdS\bSt\btr\bri\bin\bng\bg _\bs_\bt_\br_\bi_\bn_\bg
+ Text _\bs_\bt_\br_\bi_\bn_\bg is a message shown when a logout is
+ attempted and fails. Defaults to "Logout attempt
+ FAILED.\n Current user could not be automatically
+ logged out."
+
+ -\b-/\b/+\b+d\bdt\bts\bsa\bav\bve\ber\br
+ Turn on/off CDE Saver Mode.
+
+ -\b-l\blo\boc\bck\bks\bso\bou\bun\bnd\bd _\bs_\bt_\br_\bi_\bn_\bg
+ Text _\bs_\bt_\br_\bi_\bn_\bg references sound to use at lock time.
+ Default sound, male voice: "Thank you, for your coop-
+ eration."
+
+ -\b-i\bin\bnf\bfo\bos\bso\bou\bun\bnd\bd _\bs_\bt_\br_\bi_\bn_\bg
+ Text _\bs_\bt_\br_\bi_\bn_\bg references sound to use for information.
+ Default sound, male voice: "Identify please."
+
+ -\b-v\bva\bal\bli\bid\bds\bso\bou\bun\bnd\bd _\bs_\bt_\br_\bi_\bn_\bg
+ Text _\bs_\bt_\br_\bi_\bn_\bg references sound to when a password is
+
+
+
+X11R6 Contrib 01 Jan 1997 15
+
+
+
+
+
+XLOCK(1) XLOCK(1)
+
+
+ valid. Default sound, female voice: "Complete."
+
+ -\b-i\bin\bnv\bva\bal\bli\bid\bds\bso\bou\bun\bnd\bd _\bs_\bt_\br_\bi_\bn_\bg
+ Text _\bs_\bt_\br_\bi_\bn_\bg references sound to when a password is
+ invalid. Default sound, female voice: "I am not pro-
+ grammed to give you that information."
+
+
+S\bSP\bPE\bEC\bCI\bIA\bAL\bL M\bMO\bOD\bDE\bE D\bDE\bEP\bPE\bEN\bND\bDE\bEN\bNT\bT O\bOP\bPT\bTI\bIO\bON\bNS\bS
+ -\b-/\b/+\b+t\btr\bru\buc\bch\bhe\bet\bt
+ Turn on and off Truchet lines (trail) in _\ba_\bn_\bt_\b.
+
+ -\b-/\b/+\b+g\bgr\bro\bow\bw
+ Turn on and off growing fractals (else they are ani-
+ mated) for _\bd_\br_\bi_\bf_\bt_\b.
+
+ -\b-/\b/+\b+l\bli\bis\bss\bs
+ Turn on and off using lissojous figures to get points
+ for _\bd_\br_\bi_\bf_\bt_\b.
+
+ -\b-/\b/+\b+n\bno\boa\ban\bnt\bts\bs
+ Turn off and on ants in _\be_\bs_\bc_\bh_\be_\br_\b.
+
+ -\b-/\b/+\b+s\bso\bol\bli\bid\bdm\bmo\boe\beb\bbi\biu\bus\bs
+ Turn on and off solid mobius in _\be_\bs_\bc_\bh_\be_\br_\b.
+
+ -\b-/\b/+\b+d\bde\bec\bca\bay\by
+ Turn on and off decaying orbits for _\bg_\br_\ba_\bv_\b.
+
+ -\b-/\b/+\b+t\btr\bra\bai\bil\bl
+ Turn on and off decaying trail of dots for _\bg_\br_\ba_\bv_\b.
+
+ -\b-/\b/+\b+m\bma\bar\brt\bti\bin\bn
+ Turn on and off Barry Martin's square root _\bh_\bo_\bp_\b.
+
+ -\b-/\b/+\b+e\bej\bjk\bk1\b1.\b..\b..\b.e\bej\bjk\bk6\b6
+ Turn on and off Ed J. Kubaitis' _\bh_\bo_\bp_\bs_\b.
+
+ -\b-/\b/+\b+r\brr\br
+ Turn on and off Renaldo Recuerdo's _\bh_\bo_\bp_\b.
+
+ -\b-/\b/+\b+j\bjo\bon\bng\bg
+ Turn on and off Jong's _\bh_\bo_\bp_\b.
+
+ -\b-/\b/+\b+s\bsi\bin\bne\be
+ Turn on and off Barry Martin's sine _\bh_\bo_\bp_\b.
+
+ -\b-/\b/+\b+m\bmo\bou\bus\bse\be
+ Turn on and off mouse interaction in _\bj_\bu_\bl_\bi_\ba_\b.
+
+ -\b-r\bru\bul\ble\be _\bn_\bu_\bm
+ Allows one to set _\bl_\bi_\bf_\be parameters <living_min><liv-
+ ing_max><birth_min><birth_max>. For example, Con-
+ way's rule is 2333. Unfortunately, this requires the
+
+
+
+X11R6 Contrib 01 Jan 1997 16
+
+
+
+
+
+XLOCK(1) XLOCK(1)
+
+
+ rule to be contiguous.
+
+ -\b-/\b/+\b+t\bto\bot\bta\bal\bli\bis\bst\bti\bic\bc
+ Turn on and off totalistic rules for _\bl_\bi_\bf_\be_\b1_\bd_\b. If this
+ is off then it follows rules of the LCAU collection.
+ These rules may not be symmetric and are more gen-
+ eral.
+
+ -\b-r\bru\bul\ble\be3\b3d\bd _\bn_\bu_\bm
+ Allows one to set _\bl_\bi_\bf_\be_\b3_\bd parameters <living_min><liv-
+ ing_max><birth_min><birth_max>. For example, Bay's 4
+ rules are 4555, 5766, 5655, and 6767. Unfortunately,
+ this requires the rule to be contiguous.
+
+ -\b-/\b/+\b+a\bam\bmm\bma\ban\bnn\bn
+ Turn on and off lines for _\bp_\be_\bn_\br_\bo_\bs_\be_\b.
+
+ -\b-/\b/+\b+e\ber\bra\bas\bse\be
+ Turn on and off erasing for _\bs_\bp_\bl_\bi_\bn_\be_\b. If this option
+ is on, _\bc_\by_\bc_\bl_\be_\bs is divided by 64 to compute the number
+ of lines, so as to be compatable when using -fullran-
+ dom.
+
+ -\b-t\btr\bre\bek\bk _\bn_\bu_\bm
+ If its a high number you will see the space ship all
+ the time in _\bs_\bt_\ba_\br_\b.
+
+ -\b-/\b/+\b+r\bro\boc\bck\bk
+ Turn on and off rocks for _\bs_\bt_\ba_\br_\b. If this is off,
+ stars will be seen instead.
+
+ -\b-/\b/+\b+s\bst\btr\bra\bai\big\bgh\bht\bt
+ Turn on if _\bs_\bt_\ba_\br gets you motion sick.
+
+ -\b-f\bfa\bac\bct\bto\bor\bry\by _\bn_\bu_\bm
+ Number of extra factory parts in _\bp_\bi_\bp_\be_\bs_\b.
+
+ -\b-/\b/+\b+f\bfi\bis\bsh\bhe\bey\bye\be
+ Turn on if you want a zoomed-in view of _\bp_\bi_\bp_\be_\bs_\b.
+
+ -\b-/\b/+\b+t\bti\big\bgh\bht\btt\btu\bur\brn\bns\bs
+ Turn on if you want the _\bp_\bi_\bp_\be_\bs to bend more often.
+
+ -\b-/\b/+\b+r\bro\bot\bta\bat\bte\bep\bpi\bip\bpe\bes\bs
+ Turn on if you want the pipe system rotated in _\bp_\bi_\bp_\be_\bs_\b.
+
+ -\b-d\bdu\bur\bra\bat\bti\bio\bon\bn _\bs_\be_\bc_\bo_\bn_\bd_\bs
+ Allows one to set a duration for a mode in _\br_\ba_\bn_\bd_\bo_\bm_\b.
+ Duration of 0 is defined as infinite.
+
+ -\b-m\bmo\bod\bde\bel\bli\bis\bst\bt _\bt_\be_\bx_\bt_\bs_\bt_\br_\bi_\bn_\bg
+ Allows one to pass a list of files to randomly dis-
+ play to _\br_\ba_\bn_\bd_\bo_\bm_\b. "all" will get all files but blank
+ (and bomb if compiled in). "all,blank" will get all
+
+
+
+X11R6 Contrib 01 Jan 1997 17
+
+
+
+
+
+XLOCK(1) XLOCK(1)
+
+
+ modes. "all,-image bounce,+blank" will get all modes
+ but image and bounce. "bug wator" will get only bug
+ and wator. "allstable" will weed out hackers modes
+ if compiled in, "allstandard will weed out the GL
+ modes (as well as hackers modes) if compiled in
+ ("allgl" will get only these modes as well as "all-
+ stable-allstandard), "allnice" will weed out high cpu
+ usage modes (as well as hackers and gl modes). "ran-
+ dom" can not be referenced.
+
+ -\b-/\b/+\b+s\bse\beq\bqu\bue\ben\bnt\bti\bia\bal\bl
+ Turn on non-random _\br_\ba_\bn_\bd_\bo_\bm option.
+
+
+*\b**\b*W\bWA\bAR\bRN\bNI\bIN\bNG\bG*\b**\b*
+ x\bxl\blo\boc\bck\bk can appear to hang if it is competing with a high-
+ priority process for the CPU. For example, if x\bxl\blo\boc\bck\bk is
+ started after a process with 'nice -20' (high priority),
+ x\bxl\blo\boc\bck\bk will take considerable amount of time to respond.
+
+
+S\bSH\bHA\bAD\bDO\bOW\bW P\bPA\bAS\bSS\bSW\bWO\bOR\bRD\bDS\bS
+ If the machine is using a shadow password system, then
+ x\bxl\blo\boc\bck\bk may not be set up to get the real password and so
+ must be given one of its own. This can be either on the
+ command line, via the -\b-c\bcp\bpa\bas\bss\bsw\bwd\bd option, or in the file
+ $\b$H\bHO\bOM\bME\bE/\b/.\b.x\bxl\blo\boc\bck\bkr\brc\bc, with the first taking precedence. In both
+ cases an encrypted password is expected (see makekey(8)).
+ If neither is given, then x\bxl\blo\boc\bck\bk will prompt for a password
+ and will use that, also storing an encrypted version of it
+ in $\b$H\bHO\bOM\bME\bE/\b/.\b.x\bxl\blo\boc\bck\bkr\brc\bc for future use.
+
+
+B\bBU\bUG\bGS\bS
+ "kill -KILL x\bxl\blo\boc\bck\bk " causes the server that was locked to
+ be unusable, since all hosts (including localhost) were
+ removed from the access control list to lock out new X
+ clients, and since x\bxl\blo\boc\bck\bk could not catch SIGKILL, it ter-
+ minated before restoring the access control list. This
+ will leave the X server in a state where _\b"_\by_\bo_\bu _\bc_\ba_\bn _\bn_\bo
+ _\bl_\bo_\bn_\bg_\be_\br _\bc_\bo_\bn_\bn_\be_\bc_\bt _\bt_\bo _\bt_\bh_\ba_\bt _\bs_\be_\br_\bv_\be_\br_\b, _\ba_\bn_\bd _\bt_\bh_\bi_\bs _\bo_\bp_\be_\br_\ba_\bt_\bi_\bo_\bn _\bc_\ba_\bn_\bn_\bo_\bt
+ _\bb_\be _\br_\be_\bv_\be_\br_\bs_\be_\bd _\bu_\bn_\bl_\be_\bs_\bs _\by_\bo_\bu _\br_\be_\bs_\be_\bt _\bt_\bh_\be _\bs_\be_\br_\bv_\be_\br_\b._\b" -From
+ the X11R4 Xlib Documentation, Chapter 7.
+ NCD terminals do not allow xlock to remove all the hosts
+ from the access control list. Therefore you will need to
+ use the "-remote" and "-allowaccess" switches. If you
+ happen to run without "-allowaccess" on an NCD terminal,
+ x\bxl\blo\boc\bck\bk will not work and you will need to reboot the termi-
+ nal, or simply go into the SETUP menus, under 'Network
+ Parameters', and turn off TCP/IP access control.
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+ X(1), Xlib Documentation.
+
+
+
+
+X11R6 Contrib 01 Jan 1997 18
+
+
+
+
+
+XLOCK(1) XLOCK(1)
+
+
+A\bAU\bUT\bTH\bHO\bOR\bR
+ Maintained by:
+ David A. Bagley (bagleyd@bigfoot.com)
+ The latest version is currently at:
+ ftp.x.org in /contrib/applications/xlockmore-4.??.tar.gz
+
+ Original Author:
+ Patrick J. Naughton (naughton@eng.sun.com)
+ Mailstop 21-14
+ Sun Microsystems Laboratories, Inc.
+ Mountain View, CA 94043
+ 415/336-1080
+
+ with many additional contributors.
+
+
+C\bCO\bOP\bPY\bYR\bRI\bIG\bGH\bHT\bT
+ Copyright (c) 1988-91 by Patrick J. Naughton
+ Copyright (c) 1993-97 by David A. Bagley
+
+ Permission to use, copy, modify, and distribute this soft-
+ ware 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.
+ The original BSD daemon is Copyright (c) 1988 Marshall
+ Kirk McKusick. All Rights Reserved.
+ Sun, HP, and SGI icons have their respective copyrights.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+X11R6 Contrib 01 Jan 1997 19
+
+
--- /dev/null
+.\" @(#)xlock.man 4.00 97/01/01
+.\" Copyright (c) 1991 - Patrick J. Naughton
+.\" xlockmore updates from David A. Bagley
+.TH XLOCK 1 "01 Jan 1997" "X11R6 Contrib"
+.SH NAME
+xlock \- Locks the local X display until a password is entered.
+.sp
+.IX xlock#(1) "" "\fLxlock\fP(1)"
+.SH SYNOPSIS
+.B xlock
+[
+.BI \-help
+]
+[
+.BI \-version
+]
+[
+.BI \-resources
+]
+[
+.BI \-display " displayname"
+]
+[
+.BI \-visual " visualname"
+]
+[
+.BI \-name " resourcename"
+]
+[
+.BI \-mode " modename"
+]
+[
+.BI \-delay " usecs"
+]
+[
+.BI \-batchcount " num"
+]
+[
+.BI \-cycles " num"
+]
+[
+.BI \-saturation " value"
+]
+[
+.BI -/+allowaccess
+]
+[
+.BI -/+nolock
+]
+[
+.BI -/+inwindow
+]
+[
+.BI -/+inroot
+]
+[
+.BI -/+remote
+]
+[
+.BI -/+mono
+]
+[
+.BI -/+allowroot
+]
+[
+.BI -/+debug
+]
+[
+.BI -/+echokeys
+]
+[
+.BI -/+enablesaver
+]
+[
+.BI -/+grabmouse
+]
+[
+.BI -/+grabserver
+]
+[
+.BI -/+install
+]
+[
+.BI -/+sound
+]
+[
+.BI -/+timeelapsed
+]
+[
+.BI -/+usefirst
+]
+[
+.BI -/+verbose
+]
+[
+.BI \-nice " level"
+]
+[
+.BI \-lockdelay " seconds"
+]
+[
+.BI \-timeout " seconds"
+]
+[
+.BI \-font " fontname"
+]
+[
+.BI \-msgfont " message-fontname"
+]
+[
+.BI \-bg " color"
+]
+[
+.BI \-fg " color"
+]
+[
+.BI \-background " color"
+]
+[
+.BI \-foreground " color"
+]
+[
+.BI \-username " string"
+]
+[
+.BI \-password " string"
+]
+[
+.BI \-info " string"
+]
+[
+.BI \-validate " string"
+]
+[
+.BI \-invalid " string"
+]
+[
+.BI \-geometry " geom"
+]
+[
+.BI \-icongeometry " geom"
+]
+[
+.BI -/+fullrandom
+]
+[
+.BI -/+wireframe
+]
+[
+.BI -/+use3d
+]
+[
+.BI \-delta3d " value"
+]
+[
+.BI \-none3d " color"
+]
+[
+.BI \-right3d " color"
+]
+[
+.BI \-left3d " color"
+]
+[
+.BI \-both3d " color"
+]
+[
+.BI \-program " programname"
+]
+[
+.BI \-messagesfile " formatted-filename"
+]
+[
+.BI \-messagefile " filename"
+]
+[
+.BI \-message " string"
+]
+[
+.BI \-mfont " mode-fontname"
+]
+[
+.BI \-imagefile " filename"
+]
+[
+.BI \-neighbors " num"
+]
+[
+.BI \-cpasswd " crypted-password"
+]
+[
+.BI \-forceLogout " minutes"
+]
+[
+.BI \-logoutButtonLabel " textstring"
+]
+[
+.BI \-logoutButtonHelp " textstring"
+]
+[
+.BI \-logoutFailedString " textstring"
+]
+[
+.BI -/+dtsaver
+]
+[
+.BI \-locksound " string"
+]
+[
+.BI \-infosound " string"
+]
+[
+.BI \-validsound " string"
+]
+[
+.BI \-invalidsound " string"
+]
+
+.SH DESCRIPTION
+.B xlock
+locks the X server till the user enters their password at the keyboard.
+While
+.B xlock
+is running,
+all new server connections are refused.
+The screen saver is disabled.
+The mouse cursor is turned off.
+The screen is blanked and a changing pattern is put on the screen.
+If a key or a mouse button is pressed then the user is prompted for the
+password of the user who started
+.BR xlock .
+
+If the correct password is typed, then the screen is unlocked and the X
+server is restored. When typing the password Control-U and Control-H are
+active as kill and erase respectively. To return to the locked screen,
+click in the small icon version of the changing pattern.
+
+In the lower part of the password screen a message is displayed. This
+message is taken from the first file of the following that exists:
+$HOME/.xlockmessage, $HOME/.plan, or $HOME/.signature.
+
+On systems which support new BSD style authentication, the password
+may be prefixed by an authentication style followed by a colon
+(i.e. "style:password"). See the login.conf(5) for more information
+on authentication styles.
+
+.SH "NOTE ON ETIQUETTE"
+.I Xlock
+should not be used on public terminals when there is a high demand for them.
+
+If you find a public terminal that has been locked by another user and
+there are no other terminals available, and the terminal appears to have
+been left idle for a while (normally more than 15 minutes), it is fair to
+try to reset the session in some manner.
+
+.SH OPTIONS
+.TP 5
+.BI \-help
+Print options and a brief description to standard output.
+.TP 5
+.BI \-version
+Print version number (if >= 4.00) to standard output.
+.TP 5
+.BI \-resources
+Print default resource file to standard output.
+.TP 5
+.BI \-display \ displayname
+The
+.I display
+option sets the X11 display to lock.
+.B xlock
+locks all available screens on a given server,
+and restricts you to locking only a local server such as
+.BI unix:0,
+.BI localhost:0,
+or
+.BI :0
+unless you set the
+.B \-remote
+option.
+.TP 5
+.BI \-visual \ visualname
+.I visualname
+which is one of "StaticGray", "GrayScale", "StaticColor", "PseudoColor",
+"TrueColor", or "DirectColor". May not be available depending on how it
+is initially configured. This is under construction.
+.TP 5
+.BI \-name \ resourcename
+.I resourcename
+is used instead of
+.B XLock
+when looking for resources to configure
+.BR xlock .
+.TP 5
+.BI \-mode \ modename
+As of this writing there are over 60 display modes supported
+(plus one more for random selection of one of these).
+.TP 8
+.B ant
+Shows Langton's and Turk's generalized ants.
+.TP 8
+.B ball
+Shows bouncing balls.
+.TP 8
+.B bat
+Shows bouncing flying bats.
+.TP 8
+.B blot
+Shows Rorschach's ink blot test.
+.TP 8
+.B bouboule
+Shows Mimi's bouboule of moving stars.
+.TP 8
+.B bounce
+Shows bouncing footballs.
+.TP 8
+.B braid
+Shows random braids and knots.
+.TP 8
+.B bug
+Shows Palmiter's bug evolution and a garden of Eden.
+.TP 8
+.B cartoon
+Shows bouncing cartoons. Not compiled in by default.
+.TP 8
+.B clock
+Shows Packard's oclock.
+.TP 8
+.B crystal
+Shows polygons in 2D plane groups.
+.TP 8
+.B daisy
+Shows a meadow of daisies.
+.TP 8
+.B dclock
+Shows a floating digital clock.
+.TP 8
+.B demon
+Shows Griffeath's cellular automata.
+.TP 8
+.B drift
+Shows cosmic drifting flame fractals.
+.TP 8
+.B escher
+Shows Escher-like GL stuff. May not be available depending on how it was
+configured.
+.TP 8
+.B eyes
+Shows eyes following a bouncing grelb.
+.TP 8
+.B flag
+Shows a flying flag of your operating system.
+.TP 8
+.B flame
+Shows cosmic flame fractals.
+.TP 8
+.B forest
+Shows binary trees of a fractal forest.
+.TP 8
+.B fract
+Shows fractals.
+.TP 8
+.B galaxy
+Shows crashing spiral galaxies.
+.TP 8
+.B gears
+Shows GL's gears. May not be available depending on how it was configured.
+.TP 8
+.B geometry
+Shows morphing of a complete graph.
+.TP 8
+.B grav
+Shows orbiting planets.
+.TP 8
+.B helix
+Shows string art.
+.TP 8
+.B hop
+Shows real plane iterated fractals.
+.TP 8
+.B hyper
+Shows a spinning tesseract in 4D space.
+.TP 8
+.B ico
+Shows a bouncing polyhedra.
+.TP 8
+.B ifs
+Shows a modified iterated function system.
+.TP 8
+.B image
+Shows randomly appearing logos.
+.TP 8
+.B julia
+Shows the Julia set.
+.TP 8
+.B kaleid
+Shows a kaleidoscope.
+.TP 8
+.B laser
+Shows spinning lasers.
+.TP 8
+.B life
+Shows Conway's game of life.
+.TP 8
+.B life1d
+Shows Wolfram's game of 1D life.
+.TP 8
+.B life3d
+Shows Bays' game of 3D life.
+.TP 8
+.B lightning
+Shows Keith's fractal lightning bolts.
+.TP 8
+.B lisa
+Shows animated lisajous loops.
+.TP 8
+.B lissie
+Shows lissajous worms.
+.TP 8
+.B loop
+Shows Langton's self-producing loops.
+.TP 8
+.B marquee
+Shows messages.
+.TP 8
+.B maze
+Shows a random maze and a depth first search solution.
+.TP 8
+.B morph3d
+Shows GL morphing polyhedra. May not be available depending on how it
+was configured.
+.TP 8
+.B mountain
+Shows Papo's mountain range.
+.TP 8
+.B nose
+Shows a man with a big nose runs around spewing out messages.
+.TP 8
+.B pacman
+Shows Pacman(tm).
+.TP 8
+.B pipes
+Shows a selfbuilding pipe system. May not be available depending on how it
+was configured.
+.TP 8
+.B penrose
+Shows Penrose's quasiperiodic tilings.
+.TP 8
+.B petal
+Shows various GCD Flowers.
+.TP 8
+.B puzzle
+Shows a puzzle being scrambled and then solved.
+.TP 8
+.B pyro
+Shows fireworks.
+.TP 8
+.B qix
+Shows spinning lines a la Qix(tm).
+.TP 8
+.B roll
+Shows a rolling ball.
+.TP 8
+.B rotor
+Shows Tom's Roto-Rooter.
+.TP 8
+.B shape
+Shows stippled rectangles, ellipses, and triangles.
+.TP 8
+.B sierpinski
+Shows a Sierpinski's triangle.
+.TP 8
+.B slip
+Shows slipping blits.
+.TP 8
+.B sphere
+Shows a bunch of shaded spheres.
+.TP 8
+.B spiral
+Shows helixes of dots.
+.TP 8
+.B spline
+Shows colorful moving splines.
+.TP 8
+.B sproingies
+Shows Sproingies! Nontoxic. Safe for pets and small children.
+May not be available depending on how it was configured.
+.TP 8
+.B star
+Shows a star field with a twist.
+.TP 8
+.B strange
+Shows strange attractors.
+.TP 8
+.B superquadrics
+Shows 3D mathematical shapes. May not be available depending on how it
+was configured.
+.TP 8
+.B swarm
+Shows a swarm of bees following a wasp.
+.TP 8
+.B swirl
+Shows animated swirling patterns.
+.TP 8
+.B triangle
+Shows a triangular mountain range.
+.TP 8
+.B tube
+Shows an animated tube.
+.TP 8
+.B turtle
+Shows turtle fractals.
+.TP 8
+.B voters
+Shows Dewdney's Voters.
+.TP 8
+.B wator
+Shows Dewdney's Water-Torus planet of fish and sharks.
+.TP 8
+.B wire
+Shows a random circuit with 2 electrons.
+.TP 8
+.B world
+Shows spinning Earths.
+.TP 8
+.B worm
+Shows wiggly worms.
+.TP 8
+.B blank
+Shows nothing but a black screen. Does not show up in random mode.
+.TP 8
+.B bomb
+Shows a bomb and will autologout after a time. Does not show up in random
+mode and may be available depending on how it was configured.
+.TP 8
+.B random
+Shows a random mode from above except blank (and bomb).
+
+.TP 5
+.BI \-delay \ usecs
+The
+.I delay
+option sets the speed at which a mode will operate. It simply sets the
+number of microseconds to delay between batches of animations. In
+blank mode, it is important to set this to some small number of seconds,
+because the keyboard and mouse are only checked after each delay, so you
+cannot set the delay too high, but a delay of zero would needlessly
+consume cpu checking for mouse and keyboard input in a tight loop, since
+blank mode has no work to do.
+.TP 5
+.BI \-batchcount \ num
+The
+.I batchcount
+option sets number of
+.I things
+to do per batch to
+.I num .
+
+In ant mode this refers the number of ants.
+
+In ball mode it is the number of balls.
+
+In bat mode it is the number of bats, could be less because of conflicts.
+
+In blot mode this refers to the number of pixels rendered in the same color.
+
+In bouboule mode it is the number of stars.
+
+In bounce mode it is the number of balls, could be less because of conflicts.
+
+In braid mode it is the upper bound number of strands.
+
+In bug mode it is the number of bugs, could be less because of conflicts.
+
+In cartoon mode it means nothing.
+
+In clock mode it is the percentage of the screen, but less than 100%.
+
+In crystal mode it is the number of polygons.
+
+In daisy mode it is the number flowers that make a meadow.
+
+In dclock mode it means nothing.
+
+In demon mode this refers the number of colors.
+
+In drift mode it is the number of levels to recurse (larger = more complex).
+
+In escher mode it is the current picture.
+
+In eyes mode it is the number of eyes.
+
+In flame mode it is the number of levels to recurse (larger = more complex).
+
+In forest mode it is the number trees that make a forest.
+
+In fract mode it is means nothing.
+
+In galaxy mode it means the number of galaxies.
+
+In gears mode it is the number of degrees to rotate the set of gears by.
+
+In geometry mode it is the number of vertices.
+
+In grav mode it is the number of planets.
+
+In helix mode it means nothing.
+
+In hop mode this refers to the number of pixels rendered in the same color.
+
+In hyper mode it means nothing.
+
+In ico mode it is the ith plantonic solid.
+
+In ifs mode it means nothing.
+
+In image mode it means it is the number of logos on screen at once.
+
+In julia mode it is the depth of recursion.
+
+In kaleid mode it means nothing.
+
+In laser mode it is the number lasers.
+
+In life mode it is the number of generations before a glider is introduced.
+
+In life1d mode it means nothing.
+
+In life3d mode it is the number of generations before a glider is introduced.
+
+In lisa mode it is the number of loops.
+
+In lissie mode it is the number of worms.
+
+In loop mode it means nothing.
+
+In marquee mode it means nothing.
+
+In maze mode it means nothing.
+
+In morph3d mode it is the ith plantonic solid.
+
+In mountain mode it is the number of mountains.
+
+In nose mode it means nothing.
+
+In qix mode it is the number of lines rendered in the same color.
+
+In pacman mode it means the number of ghosts.
+
+In penrose mode it means nothing.
+
+In petal mode it the greatest random number of petals.
+
+In pipes mode it shows different joints, 0 random, 1 spherical, 2 bolted
+elbow, 3 elbow, and 4 alternating.
+
+In puzzle mode it the number of moves.
+
+In pyro mode it is the maximum number flying rockets at one time.
+
+In rotor mode it is the number of points.
+
+In rotor mode it is the number of rotor thingys which whirr...
+
+In shape mode it means nothing.
+
+In sierpinski mode it is the number of points.
+
+In slip mode it means nothing.
+
+In sphere mode it means nothing.
+
+In spiral mode it is the number of spirals.
+
+In spline mode it is the number of points "splined".
+
+In sproingies mode it is the number of sproingies.
+
+In star mode it is the number of stars on the screen at once.
+
+In strange mode it means nothing.
+
+In superquadrics mode its the number of horizontal and vertical lines in
+the superquadric.
+
+In swirl mode it means the number of "knots".
+
+In swarm mode it is the number of bees.
+
+In triangular mode it is the number of mountains.
+
+In tube mode it means nothing.
+
+In turtle mode it means nothing.
+
+In voters mode it means the number of parties, 2 or 3.
+
+In wator mode it means the breed time for the fish.
+
+In wire mode it means the length of the circuit.
+
+In world mode it is the number of worlds.
+
+In worm mode it is the number of worms.
+
+In blank mode it means nothing.
+
+In bomb mode it means the number of minutes to autologout.
+
+A negative
+.I batchcount
+allows for randomness. The range from the minimum allowed nonnegative
+.I batchcount
+for a particular mode to the
+ABS(
+.I batchcount
+) (or maximum allowed
+.I batchcount
+, whichever is less).
+.TP 5
+.BI \-cycles \ num
+The
+.I cycles
+option sets the number of cycles until time out for ant, blot, braid,
+bug, clock, crystal, daisy, demon, eyes, flag, forest, galaxy, helix, hop,
+hyper, ico, kaleid, laser, life, life1d, life3d, lisa, lissie, loop,
+mountain, petal, sierpinski, shape, spline +erase, triangle, tube, voters,
+wator, and wire. For worm it is the length of the lines, for julia and
+spiral it is the length of the trail of dots, for qix it is the number of
+lines, for spline -erase it means the number of splines * 64 (for
+compatibility with +erase), for gears it is the number of degrees to
+increment the spin of each gear by, for pipes it is the number of systems to
+draw before clearing the screen, for superquadrics it is the number of
+frames it takes to morph from one shape to another. For others it means
+nothing.
+.TP 5
+.BI \-size \ num
+The
+.I size
+option sets the size maximum size of a star in bouboule, pyro and star,
+size of ball in ball and bounce, size of bat in bat, size of clock in clock,
+size of the polygon in crystal, size of polyhedron in ico, size of lissie in
+lissie, size of dots of flag, width of maze hallway, size of side of penrose
+tile, radius of loop in lisa, radius of ball in roll, size of tube in tube,
+width of worm in worm, size of cells in ant, bug, life, life1d, pacman,
+voters, wator, and wire. In pipes it is the maximum length of a system. In
+sproingies it is the size of the screen. A negative number allows for
+randomness, similar to
+.I batchcount.
+.TP 5
+.BI \-saturation \ value
+The
+.I saturation
+option sets saturation of the color ramp used to
+.I value .
+0 is grayscale and 1 is very rich color. 0.4 is a nice pastel.
+.TP 5
+.B +/-nolock
+The
+.I nolock
+option causes
+.B xlock
+to only draw the patterns and not lock the display.
+A key press or a mouse click will terminate the screen saver.
+.TP 5
+.B -/+inwindow
+Runs
+.B xlock
+in a window, so that you can iconify, move, or resize it and
+still use your screen for other stuff. When running in a window,
+.B xlock
+no longer locks your screen, it just looks good.
+.TP 5
+.B -/+inroot
+Runs
+.B xlock
+in your root window. Like the
+.I inwindow
+option it no longer locks the screen, it just looks good.
+.TP 5
+.B -/+remote
+The
+.I remote
+option tells
+.B xlock
+to not stop you from locking remote X11 servers. This option should be
+used with care and is intended mainly to lock X11 terminals which cannot
+run
+.B xlock
+locally. If you lock someone else's workstation, they will have to know
+.B your
+password to unlock it. Using
+.I +remote
+overrides any resource derived values for
+.I remote
+and prevents
+.B xlock
+from being used to lock other X11 servers. (Use `+' instead of `-' to
+override resources for other options that can take the `+' modifier
+similarly.)
+.TP 5
+.B -/+mono
+The
+.I mono
+option causes
+.B xlock
+to display monochrome, (black and white) pixels rather than the default
+colored ones on color displays.
+.TP 5
+.B -/+allowaccess
+This option is required for servers which do not allow clients to modify
+the host access control list. It is also useful if you need to run x
+clients on a server which is locked for some reason... When
+.I allowaccess
+is true, the X11 server is left open for clients to attach and thus
+lowers the inherent security of this lock screen. A side effect of using
+this option is that if
+.B xlock
+is killed -KILL, the access control list is not lost.
+.TP 5
+.B -/+allowroot
+The
+.I allowroot
+option allows the root password to unlock the server as well as the user
+who started
+.BR xlock .
+May not be able to turn this on and off depending on your system and how
+.B xlock
+was configured.
+.TP 5
+.B -/+debug
+Allows
+.B xlock
+to be debugged by doing all but locking the screen.
+.TP 5
+.B -/+echokeys
+The
+.I echokeys
+option causes
+.B xlock
+to echo '?' characters for each key typed into the password prompt.
+Some consider this a security risk, so the default is to not echo
+anything.
+.TP 5
+.B -/+enablesaver
+By default
+.B xlock
+will disable the normal X server's screen saver since
+it is in effect a replacement for it. Since it is possible to set delay
+parameters long enough to cause phosphor burn on some displays, this
+option will turn back on the default screen saver which is very careful
+to keep most of the screen black.
+.TP 5
+.B -/+grabmouse
+The
+.I grabmouse
+option causes
+.B xlock
+to grab the mouse and keyboard, this is the default.
+.B xlock
+can not lock the screen without this.
+.TP 5
+.B -/+grabserver
+The
+.I grabserver
+option causes
+.B xlock
+to grab the server. This is not usually needed but some unsecure X servers
+can be defeated without this.
+.TP 5
+.B -/+install
+Allows
+.B xlock
+to install its own colormap if
+.B xlock
+runs out of colors.
+May not work on with some window managers (fvwm) and does not work with
+the -inroot option.
+.TP 5
+.B -/+sound
+Allows you to turn on and off sound if installed with the capability.
+.TP 5
+.B -/+timeelapsed
+Allows you to find out how long a machine is locked so you can complain
+to an administrator that someone is hogging a machine.
+.TP 5
+.B -/+usefirst
+The
+.I usefirst
+option causes
+.B xlock
+to use the keystroke which got you to the password screen as the first
+character in the password. The default is to ignore the first key
+pressed.
+.TP 5
+.B -/+verbose
+Verbose mode, tells what options it is going to use.
+.TP 5
+.BI \-nice \ nicelevel
+The
+.I nice
+option sets system nicelevel of the
+.B xlock
+process to
+.I nicelevel .
+.TP 5
+.BI \-lockdelay \ seconds
+The
+.I lockdelay
+option sets the number of
+.I seconds
+before the screen needs a password to be unlocked. Good for use with
+an autolocking mechanism like xautolock(1).
+.TP 5
+.BI \-timeout \ seconds
+The
+.I timeout
+option sets the number of
+.I seconds
+before the password screen will time out.
+.TP 5
+.BI \-font \ fontname
+The
+.I font
+option sets the font to be used on the prompt screen.
+.TP 5
+.BI \-msgfont \ fontname
+option sets the font to be used for the message that is displayed in
+the lower part of the password screen.
+.TP 5
+.BI \-fg \ color
+The
+.I fg
+option sets the color of the text on the password screen to
+.I color .
+.TP 5
+.BI \-bg \ color
+The
+.I bg
+option sets the color of the background on the password screen to
+.I color .
+.TP 5
+.BI \-foreground \ color
+The
+.I foreground
+option sets the color of the text on the password screen to
+.I color .
+.TP 5
+.BI \-background \ color
+The
+.I background
+option sets the color of the background on the password screen to
+.I color .
+.TP 5
+.BI \-username \ string
+Text
+.I string
+is shown in front of user name, defaults to "Name: ".
+.TP 5
+.BI \-password \ string
+Text
+.I string
+is the password prompt string, defaults to "Password: ".
+.TP 5
+.BI \-info \ string
+Text
+.I string
+is an informational message to tell the user what to do, defaults to
+"Enter password to unlock; select icon to lock.".
+.TP 5
+.BI \-validate \ string
+Text
+.I string
+is a message shown while validating the password, defaults to
+"Validating login..."
+.TP 5
+.BI \-invalid \ string
+Text
+.I string
+is a message shown when password is invalid, defaults to
+"Invalid login."
+.TP 5
+.BI \-geometry \ geom
+The
+.I geometry
+option sets
+.I geom
+the size and offset of the lock window (normally the entire screen).
+The entire screen format is still used for entering the password. The
+purpose is to see the screen even though it is locked. This should be
+used with caution since many of the modes will fail if the windows
+are far from square or are too small (size must be greater than 0x0).
+This should also be used with -enablesaver to protect screen from
+phosphor burn.
+.TP 5
+.BI \-icongeometry \ geom
+The
+.I icongeometry
+option sets
+.I geom
+the size of the iconic screen (normally 64x64) seen when entering the
+password. This should be used with caution since many of the modes will
+fail if the windows are far from square or are too small (size must be
+greater than 0x0). The greatest size is 256x256. There should be some
+limit so users could see who has locked the screen. Position
+information of icon is ignored.
+.TP 5
+.B -/+fullrandom
+Turn on/off randomness options within modes. Not implemented on all
+mode options.
+.TP 5
+.B -/+wireframe
+Turn on/off wireframe, available on gears, sproingies and superquadrics.
+Other modes should use this in the future as well (e.g. daisy, life3d,
+triangle).
+.TP 5
+.B -/+use3d
+Turn on/off 3d view, available on bouboule, pyro, star, and worm.
+.TP 5
+.BI \-delta3d \ value
+Space between the center of your 2 eyes for 3d mode.
+.TP 5
+.BI \-none3d \ color
+Color used for empty size in 3d mode.
+.TP 5
+.BI \-right3d \ color
+Color used for right eye in 3d mode.
+.TP 5
+.BI \-left3d \ color
+Color used for left eye in 3d mode.
+.TP 5
+.BI \-both3d \ color
+Color used for overlapping images for left and right eye in 3d mode.
+.TP 5
+.BI \-program \ programname
+The
+.I program
+option sets the program to be used as the fortune generator. Currently
+used only for marquee and nose modes.
+.TP 5
+.BI \-messagesfile \ formatted-filename
+The
+.I messagesfile
+option sets the file to be used as the fortune generator. The first
+entry is the number of fortunes, the next line contains the first fortune.
+Fortunes begin with a "%%" on a line by itself. Currently used only for
+marquee and nose modes. If one exists, it takes precedence over the
+fortune program.
+.TP 5
+.BI \-messagefile \ filename
+The
+.I messagefile
+option sets the file where the contents are the message. Currently
+used only for marquee and nose modes. If one exists, it takes
+precedence over the fortune program and messagesfile.
+.TP 5
+.BI \-message \ textstring
+The
+.I message
+option sets the message. Currently used only for marquee and nose modes.
+If one exists, it takes precedence over the fortune program,
+messagesfile and messagefile.
+.TP 5
+.BI \-mfont \ mode-fontname
+The
+.I mfont
+option sets the font to be used in the mode. Currently used only for
+marquee and nose modes.
+.TP 5
+.BI \-imagefile \ filename
+The
+.I imagefile
+option sets the ras or xpm file to be displayed with image or puzzle mode.
+Raster files work with -install as well.
+.sp
+.SH "MORE OPTIONS (these may not be available)"
+.TP 5
+.BI \-cpasswd \ crypted-password
+The
+.I cpasswd
+option sets the key to be this text string to unlock
+.B xlock
+instead of password file.
+.TP 5
+.BI \-forceLogout \ minutes
+The
+.I forceLogout
+option sets
+.I minutes
+to auto-logout.
+.TP 5
+.BI \-logoutButtonLabel \ string
+Text
+.I string
+is a message shown inside logout button when logout button is displayed.
+Defaults to
+"Logout".
+.TP 5
+.BI \-logoutButtonHelp \ string
+Text
+.I string
+is a message shown outside logout button when logout button is
+displayed. Defaults to
+"Click the \\"Logout\\" button to log out current\\n
+user and make workstation available."
+.TP 5
+.BI \-logoutFailedString \ string
+Text
+.I string
+is a message shown when a logout is attempted and fails.
+Defaults to
+"Logout attempt FAILED.\\n
+Current user could not be automatically logged out."
+.TP 5
+.B -/+dtsaver
+Turn on/off CDE Saver Mode.
+.TP 5
+.BI \-locksound \ string
+Text
+.I string
+references sound to use at lock time. Default sound, male voice:
+"Thank you, for your cooperation."
+.TP 5
+.BI \-infosound \ string
+Text
+.I string
+references sound to use for information. Default sound, male voice:
+"Identify please."
+.TP 5
+.BI \-validsound \ string
+Text
+.I string
+references sound to when a password is valid. Default sound, female voice:
+"Complete."
+.TP 5
+.BI \-invalidsound \ string
+Text
+.I string
+references sound to when a password is invalid. Default sound, female
+voice: "I am not programmed to give you that information."
+.sp
+.SH "SPECIAL MODE DEPENDENT OPTIONS"
+.TP 5
+.BI -/+truchet
+Turn on and off Truchet lines (trail) in
+.I ant.
+.TP 5
+.BI -/+grow
+Turn on and off growing fractals (else they are animated) for
+.I drift.
+.TP 5
+.BI -/+liss
+Turn on and off using lissojous figures to get points for
+.I drift.
+.TP 5
+.BI -/+noants
+Turn off and on ants in
+.I escher.
+.TP 5
+.BI -/+solidmoebius
+Turn on and off solid mobius in
+.I escher.
+.TP 5
+.BI -/+decay
+Turn on and off decaying orbits for
+.I grav.
+.TP 5
+.BI -/+trail
+Turn on and off decaying trail of dots for
+.I grav.
+.TP 5
+.BI -/+martin
+Turn on and off Barry Martin's square root
+.I hop.
+.TP 5
+.BI -/+ejk1...ejk6
+Turn on and off Ed J. Kubaitis'
+.I hops.
+.TP 5
+.BI -/+rr
+Turn on and off Renaldo Recuerdo's
+.I hop.
+.TP 5
+.BI -/+jong
+Turn on and off Jong's
+.I hop.
+.TP 5
+.BI -/+sine
+Turn on and off Barry Martin's sine
+.I hop.
+.TP 5
+.BI -/+mouse
+Turn on and off mouse interaction in
+.I julia.
+.TP 5
+.BI \-rule \ num
+Allows one to set
+.I life
+parameters <living_min><living_max><birth_min><birth_max>. For example,
+Conway's rule is 2333. Unfortunately, this requires the rule to be
+contiguous.
+.TP 5
+.BI -/+totalistic
+Turn on and off totalistic rules for
+.I life1d.
+If this is off then it follows rules of the LCAU collection. These
+rules may not be symmetric and are more general.
+.TP 5
+.BI \-rule3d \ num
+Allows one to set
+.I life3d
+parameters <living_min><living_max><birth_min><birth_max>. For example,
+Bay's 4 rules are 4555, 5766, 5655, and 6767. Unfortunately, this requires
+the rule to be contiguous.
+.TP 5
+.BI -/+ammann
+Turn on and off lines for
+.I penrose.
+.TP 5
+.BI -/+erase
+Turn on and off erasing for
+.I spline.
+If this option is on,
+.I cycles
+is divided by 64 to compute the number of lines, so as to be compatable
+when using -fullrandom.
+.TP 5
+.BI \-trek \ num
+If its a high number you will see the space ship all the time in
+.I star.
+.TP 5
+.BI -/+rock
+Turn on and off rocks for
+.I star.
+If this is off, stars will be seen instead.
+.TP 5
+.BI -/+straight
+Turn on if
+.I star
+gets you motion sick.
+.TP 5
+.BI \-factory \ num
+Number of extra factory parts in
+.I pipes.
+.TP 5
+.BI -/+fisheye
+Turn on if you want a zoomed-in view of
+.I pipes.
+.TP 5
+.BI -/+tightturns
+Turn on if you want the
+.I pipes
+to bend more often.
+.TP 5
+.BI -/+rotatepipes
+Turn on if you want the pipe system rotated in
+.I pipes.
+.TP 5
+.BI \-duration \ seconds
+Allows one to set a duration for a mode in
+.I random.
+Duration of 0 is defined as infinite.
+.TP 5
+.BI \-modelist \ textstring
+Allows one to pass a list of files to randomly display to
+.I random.
+"all" will get all files but blank (and bomb if compiled in). "all,blank"
+will get all modes. "all,-image bounce,+blank" will get all modes but
+image and bounce. "bug wator" will get only bug and wator. "allstable"
+will weed out hackers modes if compiled in, "allstandard will weed out
+the GL modes (as well as hackers modes) if compiled in ("allgl" will get
+only these modes as well as "allstable-allstandard), "allnice" will weed
+out high cpu usage modes (as well as hackers and gl modes). "random" can
+not be referenced.
+.TP 5
+.BI -/+sequential
+Turn on non-random
+.I random
+option.
+.sp
+.SH **WARNING**
+.B xlock
+can appear to hang if it is competing with a high-priority process for
+the CPU. For example, if
+.B xlock
+is started after a process with 'nice -20'
+(high priority),
+.B xlock
+will take considerable amount of time to respond.
+.sp
+.SH "SHADOW PASSWORDS"
+If the machine is using a shadow password system, then
+.B xlock
+may not be set up to get the real password and so must be given one
+of its own. This can be either on the command line, via the
+.B -cpasswd
+option,
+or in the file
+.BR $HOME/.xlockrc ,
+with the first taking precedence. In both cases an encrypted password
+is expected (see makekey(8)). If neither is given, then
+.B xlock
+will prompt for a password and will use that, also storing an
+encrypted version of it in
+.B $HOME/.xlockrc
+for future use.
+.sp
+.SH BUGS
+"kill -KILL
+.B xlock
+" causes the server that was locked to be unusable, since all hosts
+(including localhost) were removed from the access control list
+to lock out new X clients, and since
+.B xlock
+could not catch SIGKILL, it terminated before restoring the access
+control list. This will leave the X server in a state where
+\fI"you can no longer connect to that server,
+and this operation cannot be reversed unless you reset the server."\fP
+ -From the X11R4 Xlib Documentation, Chapter 7.
+.br
+NCD terminals do not allow xlock to remove all the hosts from the access
+control list. Therefore you will need to use the "-remote" and
+"-allowaccess" switches. If you happen to run without "-allowaccess" on an
+NCD terminal,
+.B xlock
+will not work and you will need to reboot the terminal, or simply go into
+the SETUP menus, under 'Network Parameters', and turn off TCP/IP access
+control.
+.br
+.SH "SEE ALSO"
+X(1), Xlib Documentation.
+.sp
+.SH AUTHOR
+Maintained by:
+.br
+ David A. Bagley (bagleyd@bigfoot.com)
+.br
+ The latest version is currently at:
+.br
+ ftp.x.org in /contrib/applications/xlockmore-4.??.tar.gz
+.sp
+Original Author:
+.br
+ Patrick J. Naughton (naughton@eng.sun.com)
+.br
+ Mailstop 21-14
+.br
+ Sun Microsystems Laboratories, Inc.
+.br
+ Mountain View, CA 94043
+.br
+ 415/336-1080
+.sp
+with many additional contributors.
+.sp
+.SH COPYRIGHT
+Copyright (c) 1988-91 by Patrick J. Naughton
+.br
+Copyright (c) 1993-97 by David A. Bagley
+.sp
+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.
+.br
+The original BSD daemon is Copyright (c) 1988 Marshall Kirk McKusick.
+All Rights Reserved.
+.br
+Sun, HP, and SGI icons have their respective copyrights.
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)puzzle.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * puzzle.c - puzzle for xlock, the X Window System lockscreen.
+ *
+ * Copyright (c) 1995 by Heath Rice <rice@asl.dl.nec.com>.
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 15-Mar-96: cleaned up, NUMBERED compile-time switch is now broken.
+ * Feb-96: combined with rastering. Jouk Jansen <joukj@crys.chem.uva.nl>.
+ * Feb-95: written. Heath Rice <hrice@netcom.com>
+ */
+
+/*-
+ * Chops up the screen into squares and randomly slides them around
+ * like that game where you try to rearrange the little tiles in their
+ * original order. After it scrambles the tiles for awhile, it reverses
+ * itself and puts them back like they started. This mode looks the coolest
+ * if you have a picture on your background.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "puzzle"
+#define HACK_INIT init_puzzle
+#define HACK_DRAW draw_puzzle
+#define DEF_DELAY 10000
+#define DEF_BATCHCOUNT 250
+#define DEF_NCOLORS 64
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt puzzle_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+#include <time.h>
+
+#define PUZZLE_WIDTH image_width
+#define PUZZLE_HEIGHT image_height
+#define PUZZLE_BITS image_bits
+#define NOWAY 255
+#include "puzzle.xbm"
+
+#if defined( USE_XPM ) || defined( USE_XPMINC )
+#define PUZZLE_NAME image_name
+#include "puzzle.xpm"
+#endif
+
+extern void getImage(ModeInfo * mi, XImage ** logo,
+ int width, int height, unsigned char *bits,
+#if defined( USE_XPM ) || defined( USE_XPMINC )
+ char **name,
+#endif
+ int *graphics_format, Colormap * newcolormap,
+ unsigned long *blackpix, unsigned long *whitepix);
+extern void destroyImage(XImage ** logo, int *graphics_format);
+
+typedef struct {
+ int excount;
+ int *fixbuff;
+ XPoint count, boxsize, windowsize;
+ XPoint usablewindow, offsetwindow;
+ XPoint randompos, randpos;
+ unsigned long black, white;
+ int row, col, nextrow, nextcol, nextbox;
+ int incrementOfMove;
+ int lastbox;
+ int forward;
+ int prev;
+ int moves;
+
+ /* Delta move stuff */
+ int movingBox;
+ XImage *box;
+ int cfactor, rfactor;
+ int Lp;
+ int cbs, cbw, rbs, rbw;
+ int lengthOfMove;
+#ifdef NUMBERED
+ XImage *image;
+ GC gc;
+ /* Font stuff */
+ int done;
+ int ascent, fontWidth, fontHeight;
+#else
+ XImage *logo;
+ GC backGC;
+ Colormap cm;
+ int graphics_format;
+#endif
+} puzzlestruct;
+
+static puzzlestruct *puzzs = NULL;
+
+#ifdef NUMBERED
+extern XFontStruct *getFont();
+
+#define font_height(f) (f->ascent + f->descent)
+static XFontStruct *mode_font = None;
+
+static int
+font_width(XFontStruct * font, char ch)
+{
+ int dummy;
+ XCharStruct xcs;
+
+ XTextExtents(font, &ch, 1, &dummy, &dummy, &dummy, &xcs);
+ return xcs.width;
+}
+
+void
+NumberScreen(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ puzzlestruct *pp = &puzzs[MI_SCREEN(mi)];
+
+ if (mode_font == None)
+ mode_font = getFont(display);
+ if (!pp->done) {
+ XGCValues gcv;
+
+ pp->done = 1;
+ gcv.font = mode_font->fid;
+ XSetFont(display, MI_GC(mi), mode_font->fid);
+ gcv.graphics_exposures = False;
+ gcv.foreground = MI_WIN_WHITE_PIXEL(mi);
+ gcv.background = MI_WIN_BLACK_PIXEL(mi);
+ pp->gc = XCreateGC(display, window,
+ GCForeground | GCBackground | GCGraphicsExposures | GCFont, &gcv);
+ pp->ascent = mode_font->ascent;
+ pp->fontHeight = font_height(mode_font);
+ pp->fontWidth = font_width(mode_font, '5');
+ }
+ XSetForeground(display, pp->gc, MI_WIN_WHITE_PIXEL(mi));
+
+ {
+ XPoint pos, letter;
+ int count = 1, digitOffset = 1, temp, letterOffset;
+ int i, j, mult = pp->count.x * pp->count.y;
+ char buf[16];
+
+ letter.x = pp->boxsize.x / 2 - 3;
+ letter.y = pp->boxsize.y / 2 + pp->ascent / 2 - 1;
+ letterOffset = pp->fontWidth / 2;
+ pos.y = 0;
+ for (j = 0; j < pp->count.y; j++) {
+ pos.x = 0;
+ for (i = 0; i < pp->count.x; i++) {
+ if (count < mult) {
+ if (pp->boxsize.x > 2 * pp->fontWidth &&
+ pp->boxsize.y > pp->fontHeight) {
+ (void) sprintf(buf, "%d", count);
+ XDrawString(display, window, pp->gc,
+ pos.x + letter.x - letterOffset * digitOffset +
+ pp->randompos.x,
+ pos.y + letter.y + pp->randompos.y, buf, digitOffset);
+ }
+ XDrawRectangle(display, window, pp->gc,
+ pos.x + 1 + pp->randompos.x, pos.y + 1 + pp->randompos.y,
+ pp->boxsize.x - 3, pp->boxsize.y - 3);
+ count++;
+ digitOffset = 0;
+ temp = count;
+ while (temp >= 1) {
+ temp /= 10;
+ digitOffset++;
+ }
+ }
+ pos.x += pp->boxsize.x;
+ }
+ pos.y += pp->boxsize.y;
+ }
+ }
+}
+#endif
+
+static int
+setupmove(ModeInfo * mi)
+{
+ puzzlestruct *pp = &puzzs[MI_SCREEN(mi)];
+
+ if ((pp->prev == pp->excount) && (pp->excount > 0) && (pp->forward == 1)) {
+ pp->lastbox = -1;
+ pp->forward = 0;
+ pp->prev--;
+ } else if ((pp->prev == -1) && (pp->excount > 0) && (pp->forward == 0)) {
+ pp->lastbox = -1;
+ pp->forward = 1;
+ pp->prev++;
+ }
+ if (pp->forward)
+ pp->nextbox = NRAND(5);
+ else
+ pp->nextbox = pp->fixbuff[pp->prev];
+
+ switch (pp->nextbox) {
+ case 0:
+ if ((pp->row == 0) || (pp->lastbox == 2))
+ pp->nextbox = NOWAY;
+ else {
+ pp->nextrow = pp->row - 1;
+ pp->nextcol = pp->col;
+ }
+ break;
+ case 1:
+ if ((pp->col == pp->count.x - 1) || (pp->lastbox == 3))
+ pp->nextbox = NOWAY;
+ else {
+ pp->nextrow = pp->row;
+ pp->nextcol = pp->col + 1;
+ }
+ break;
+ case 2:
+ if ((pp->row == pp->count.y - 1) || (pp->lastbox == 0))
+ pp->nextbox = NOWAY;
+ else {
+ pp->nextrow = pp->row + 1;
+ pp->nextcol = pp->col;
+ }
+ break;
+ case 3:
+ if ((pp->col == 0) || (pp->lastbox == 1))
+ pp->nextbox = NOWAY;
+ else {
+ pp->nextrow = pp->row;
+ pp->nextcol = pp->col - 1;
+ }
+ break;
+ default:
+ pp->nextbox = NOWAY;
+ break;
+ }
+
+ if (pp->nextbox != NOWAY) {
+ pp->lastbox = pp->nextbox;
+ return True;
+ } else
+ return False;
+}
+
+static void
+setupmovedelta(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ puzzlestruct *pp = &puzzs[MI_SCREEN(mi)];
+
+ /* if (pp->boxsize.x > 1 && pp->boxsize.y > 1) This is already true */
+
+ /* There is a big problem here when used with -inwindow , possible solutions
+ * seem to expose more levels of complication when implemented.
+ */
+ /* UnmapNotify VisibilityPartiallyObscured)) */
+ if (pp->box) {
+ XDestroyImage(pp->box);
+ pp->box = NULL;
+ } {
+ /* This will bomb out easily if using -inwindow or -debug .
+ * X Error of failed request: BadMatch (invalid parameter attributes)
+ */
+ XWindowAttributes wa;
+
+ (void) XGetWindowAttributes(display, window, &wa);
+
+#if 0
+ if (!(wa.all_event_masks & NoExpose))
+#endif
+#if 0
+ do {
+ (void) XGetWindowAttributes(display, window, &wa);
+ }
+ while (wa.map_state != IsViewable);
+#endif
+ if (wa.map_state == IsViewable)
+/* Next line bombs out with BadMatch if moved off screen. */
+ pp->box = XGetImage(display, window,
+ pp->nextcol * pp->boxsize.x + pp->randompos.x + 1,
+ pp->nextrow * pp->boxsize.y + pp->randompos.y + 1,
+ pp->boxsize.x - 2, pp->boxsize.y - 2,
+ AllPlanes, ZPixmap);
+ }
+#if 0
+ /* Current state of the puzzle has to be known for this to work
+ * (pp->nextrow) and (pp->nextcol) are the correct starting values, but
+ * as the puzzle progresses it is not correct.
+ */
+ if (pp->graphics_format >= IS_XPM)
+ /* This can only be used with a fully initialized image where logo is
+ * initialized directly or indirectly with XCreateImage .
+ * It also has the disadvantage that it uses XGetPixel and XPutPixel
+ * internally, so it could be slow.
+ */
+ pp->box = XSubImage(pp->logo,
+ (pp->nextrow) * pp->boxsize.x + 1,
+ (pp->nextcol) * pp->boxsize.y + 1,
+ pp->boxsize.x - 2, pp->boxsize.y - 2);
+#endif
+ if (pp->nextcol > pp->col) {
+ pp->cfactor = -1;
+ pp->cbs = pp->boxsize.x;
+ pp->cbw = pp->incrementOfMove;
+ } else if (pp->col > pp->nextcol) {
+ pp->cfactor = 1;
+ pp->cbs = -pp->incrementOfMove;
+ pp->cbw = pp->incrementOfMove;
+ } else {
+ pp->cfactor = 0;
+ pp->cbs = 0;
+ pp->cbw = pp->boxsize.x;
+ }
+ if (pp->nextrow > pp->row) {
+ pp->rfactor = -1;
+ pp->rbs = pp->boxsize.y;
+ pp->rbw = pp->incrementOfMove;
+ } else if (pp->row > pp->nextrow) {
+ pp->rfactor = 1;
+ pp->rbs = -pp->incrementOfMove;
+ pp->rbw = pp->incrementOfMove;
+ } else {
+ pp->rfactor = 0;
+ pp->rbs = 0;
+ pp->rbw = pp->boxsize.y;
+ }
+
+ if (pp->cfactor == 0)
+ pp->lengthOfMove = pp->boxsize.y;
+ else if (pp->rfactor == 0)
+ pp->lengthOfMove = pp->boxsize.x;
+ else
+ pp->lengthOfMove = MIN(pp->boxsize.x, pp->boxsize.y);
+ pp->Lp = pp->incrementOfMove;
+}
+
+static void
+wrapupmove(ModeInfo * mi)
+{
+ puzzlestruct *pp = &puzzs[MI_SCREEN(mi)];
+
+ if (pp->excount) {
+ if (pp->forward) {
+ pp->fixbuff[pp->prev] = (pp->nextbox + 2) % 4;
+ pp->prev++;
+ } else
+ pp->prev--;
+ }
+}
+
+static void
+wrapupmovedelta(ModeInfo * mi)
+{
+ puzzlestruct *pp = &puzzs[MI_SCREEN(mi)];
+
+ if (pp->box) {
+ XPutImage(MI_DISPLAY(mi), MI_WINDOW(mi), pp->backGC, pp->box, 0, 0,
+ pp->col * pp->boxsize.x + pp->randompos.x + 1,
+ pp->row * pp->boxsize.y + pp->randompos.y + 1,
+ pp->boxsize.x - 2, pp->boxsize.y - 2);
+ XFlush(MI_DISPLAY(mi));
+
+ pp->row = pp->nextrow;
+ pp->col = pp->nextcol;
+
+ XDestroyImage(pp->box);
+ pp->box = NULL;
+ }
+}
+
+static int
+moveboxdelta(ModeInfo * mi)
+{
+ puzzlestruct *pp = &puzzs[MI_SCREEN(mi)];
+ int cf = pp->nextcol * pp->boxsize.x +
+ pp->Lp * pp->cfactor + pp->randompos.x;
+ int rf = pp->nextrow * pp->boxsize.y +
+ pp->Lp * pp->rfactor + pp->randompos.y;
+
+ if (pp->Lp <= pp->lengthOfMove) {
+ if (pp->box) {
+ XPutImage(MI_DISPLAY(mi), MI_WINDOW(mi), pp->backGC, pp->box,
+ 0, 0, cf + 1, rf + 1, pp->boxsize.x - 2, pp->boxsize.y - 2);
+ XFillRectangle(MI_DISPLAY(mi), MI_WINDOW(mi), pp->backGC,
+ cf + pp->cbs - 1, rf + pp->rbs - 1, pp->cbw + 2, pp->rbw + 2);
+ }
+ if ((pp->Lp + pp->incrementOfMove > pp->lengthOfMove) &&
+ (pp->Lp != pp->lengthOfMove))
+ pp->Lp = pp->lengthOfMove - pp->incrementOfMove;
+ pp->Lp += pp->incrementOfMove;
+ return False;
+ } else
+ return True;
+}
+
+void
+init_puzzle(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ puzzlestruct *pp;
+ int x, y;
+ XPoint size;
+
+ if (puzzs == NULL) {
+ if ((puzzs = (puzzlestruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (puzzlestruct))) == NULL)
+ return;
+ }
+ pp = &puzzs[MI_SCREEN(mi)];
+
+ pp->excount = MI_BATCHCOUNT(mi);
+ if (pp->excount < 0) {
+ if (pp->fixbuff != NULL)
+ (void) free((void *) pp->fixbuff);
+ pp->excount = NRAND(-pp->excount + 1);
+ }
+ pp->lastbox = -1;
+ pp->moves = 0;
+ pp->movingBox = False;
+
+ pp->windowsize.x = MI_WIN_WIDTH(mi);
+ pp->windowsize.y = MI_WIN_HEIGHT(mi);
+ if (pp->windowsize.x < 7)
+ pp->windowsize.x = 7;
+ if (pp->windowsize.y < 7)
+ pp->windowsize.y = 7;
+ pp->forward = 1;
+ pp->prev = 0;
+
+ if (pp->box) {
+ XDestroyImage(pp->box);
+ pp->box = NULL;
+ }
+ if (!pp->logo)
+ getImage(mi, &pp->logo, PUZZLE_WIDTH, PUZZLE_HEIGHT, PUZZLE_BITS,
+#if defined( USE_XPM ) || defined( USE_XPMINC )
+ PUZZLE_NAME,
+#endif
+ &pp->graphics_format, &pp->cm,
+ &pp->black, &pp->white);
+ if (pp->cm != None) {
+ if (pp->backGC == None) {
+ XGCValues xgcv;
+
+ setColormap(display, window, pp->cm, MI_WIN_IS_INWINDOW(mi));
+ xgcv.background = pp->black;
+ pp->backGC = XCreateGC(display, window, GCBackground, &xgcv);
+ }
+ } else {
+ pp->black = MI_WIN_BLACK_PIXEL(mi);
+ pp->backGC = MI_GC(mi);
+ }
+ XSetForeground(display, pp->backGC, pp->black);
+ XFillRectangle(display, window, pp->backGC, 0, 0,
+ pp->windowsize.x, pp->windowsize.y);
+ if (pp->logo) {
+ size.x = (pp->logo->width < pp->windowsize.x) ?
+ pp->logo->width : pp->windowsize.x;
+ size.y = (pp->logo->height < pp->windowsize.y) ?
+ pp->logo->height : pp->windowsize.y;
+ } else {
+ size.x = pp->windowsize.x;
+ size.y = pp->windowsize.y;
+ }
+ pp->boxsize.y = NRAND(1 + size.y / 4) + 6;
+ pp->boxsize.x = NRAND(1 + size.x / 4) + 6;
+ if ((pp->boxsize.x > 4 * pp->boxsize.y) ||
+ pp->boxsize.y > 4 * pp->boxsize.x)
+ pp->boxsize.x = pp->boxsize.y = 2 * MIN(pp->boxsize.x, pp->boxsize.y);
+ pp->count.x = size.x / pp->boxsize.x;
+ pp->count.y = size.y / pp->boxsize.y;
+
+ pp->usablewindow.x = pp->count.x * pp->boxsize.x;
+ pp->usablewindow.y = pp->count.y * pp->boxsize.y;
+ pp->offsetwindow.x = (pp->windowsize.x - pp->usablewindow.x) / 2;
+ pp->offsetwindow.y = (pp->windowsize.y - pp->usablewindow.y) / 2;
+
+ pp->incrementOfMove = MIN(pp->usablewindow.x, pp->usablewindow.y) / 20;
+ pp->incrementOfMove = MAX(pp->incrementOfMove, 1);
+
+ if (pp->logo) {
+ pp->randompos.x = NRAND(MAX((pp->windowsize.x - pp->logo->width),
+ 2 * pp->offsetwindow.x + 1));
+ pp->randompos.y = NRAND(MAX((pp->windowsize.y - pp->logo->height),
+ 2 * pp->offsetwindow.y + 1));
+ if (MI_NPIXELS(mi) <= 2)
+ XSetForeground(display, pp->backGC, MI_WIN_WHITE_PIXEL(mi));
+ else
+ XSetForeground(display, pp->backGC, MI_PIXEL(mi, NRAND(MI_NPIXELS(mi))));
+ XPutImage(display, window, pp->backGC, pp->logo,
+ (int) (NRAND(MAX(1, (pp->logo->width - pp->usablewindow.x)))),
+ (int) (NRAND(MAX(1, (pp->logo->height - pp->usablewindow.y)))),
+ pp->randompos.x, pp->randompos.y,
+ pp->usablewindow.x, pp->usablewindow.y);
+ XSetForeground(display, pp->backGC, pp->black);
+ for (x = 0; x <= pp->count.x; x++) {
+ int tempx = x * pp->boxsize.x;
+
+ XDrawLine(display, window, pp->backGC,
+ tempx + pp->randompos.x, pp->randompos.y,
+ tempx + pp->randompos.x, pp->usablewindow.y + pp->randompos.y);
+ XDrawLine(display, window, pp->backGC,
+ tempx + pp->randompos.x - 1, pp->randompos.y,
+ tempx + pp->randompos.x - 1, pp->usablewindow.y + pp->randompos.y);
+ }
+ for (y = 0; y <= pp->count.y; y++) {
+ int tempy = y * pp->boxsize.y;
+
+ XDrawLine(display, window, pp->backGC,
+ pp->randompos.x, tempy + pp->randompos.y,
+ pp->usablewindow.x + pp->randompos.x, tempy + pp->randompos.y);
+ XDrawLine(display, window, pp->backGC,
+ pp->randompos.x, tempy + pp->randompos.y - 1,
+ pp->usablewindow.x + pp->randompos.x, tempy + pp->randompos.y - 1);
+ }
+ }
+#ifdef NUMBERED
+ else {
+ if (pp->image)
+ XDestroyImage(pp->image);
+ pp->randompos.x = pp->offsetwindow.x;
+ pp->randompos.y = pp->offsetwindow.y;
+ NumberScreen(mi);
+ pp->image = XGetImage(display, window,
+ pp->offsetwindow.x, pp->offsetwindow.y,
+ pp->usablewindow.x, pp->usablewindow.y,
+ AllPlanes,
+ (MI_NPIXELS(mi) <= 2) ? XYPixmap : ZPixmap);
+ }
+
+ pp->row = pp->count.y - 1;
+ pp->col = pp->count.x - 1;
+#else
+ pp->row = NRAND(pp->count.y);
+ pp->col = NRAND(pp->count.x);
+#endif
+
+ if ((pp->excount) && (pp->fixbuff == NULL))
+ if ((pp->fixbuff = (int *) calloc(pp->excount, sizeof (int))) == NULL)
+ error("%s: Couldn't allocate memory for puzzle buffer\n");
+}
+
+void
+draw_puzzle(ModeInfo * mi)
+{
+ puzzlestruct *pp = &puzzs[MI_SCREEN(mi)];
+
+ if (pp->movingBox) {
+ if (moveboxdelta(mi)) {
+ wrapupmovedelta(mi);
+ wrapupmove(mi);
+ pp->movingBox = False;
+ if (pp->moves++ > 2 * MI_BATCHCOUNT(mi))
+ init_puzzle(mi);
+ }
+ } else {
+ if (setupmove(mi)) {
+ setupmovedelta(mi);
+ pp->movingBox = True;
+ }
+ }
+}
+
+void
+release_puzzle(ModeInfo * mi)
+{
+ if (puzzs != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ puzzlestruct *pp = &puzzs[screen];
+
+ if (pp->fixbuff != NULL)
+ (void) free((void *) pp->fixbuff);
+ if (pp->cm != None) {
+ if (pp->backGC != None)
+ XFreeGC(MI_DISPLAY(mi), pp->backGC);
+ XFreeColormap(MI_DISPLAY(mi), pp->cm);
+ }
+ destroyImage(&pp->logo, &pp->graphics_format);
+ if (pp->box)
+ XDestroyImage(pp->box);
+ }
+ (void) free((void *) puzzs);
+ puzzs = NULL;
+ }
+#ifdef NUMBERED
+ if (mode_font != None) {
+ XFreeFont(MI_DISPLAY(mi), mode_font);
+ mode_font = None;
+ }
+#endif
+}
--- /dev/null
+./bitmaps/l-xlock.xbm
\ No newline at end of file
--- /dev/null
+./pixmaps/l-xlock.xpm
\ No newline at end of file
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)pyro.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * pyro.c - fireworks 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.
+ *
+ * Revision History:
+ * 15-May-97: jwz@netscape.com: turned into a standalone program.
+ * 05-Sep-96: Added 3d support Henrik Theiling <theiling@coli.uni-sb.de>
+ * 16-Mar-91: Written, received from David Brooks <brooks@osf.org>
+ */
+
+/*-
+ * The physics of the rockets is a little bogus, but it looks OK. Each is
+ * given an initial velocity impetus. They decelerate slightly (gravity
+ * overcomes the rocket's impulse) and explode as the rocket's main fuse
+ * gives out (we could add a ballistic stage, maybe). The individual
+ * stars fan out from the rocket, and they decelerate less quickly.
+ * That's called bouyancy, but really it's again a visual preference.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Pyro"
+#define HACK_INIT init_pyro
+#define HACK_DRAW draw_pyro
+#define DEF_DELAY 15000
+#define DEF_BATCHCOUNT 100
+#define DEF_SIZE -3
+#define DEF_NCOLORS 200
+#define DEF_3D False
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt pyro_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+#define ORANGE 3
+
+#define MINROCKETS 1
+#define MINSIZE 1
+
+#define SILENT 0
+#define REDGLARE 1
+#define BURSTINGINAIR 2
+
+#define CLOUD 0
+#define DOUBLECLOUD 1
+/* Clearly other types and other fascinating visual effects could be added... */
+
+/* P_xxx parameters represent the reciprocal of the probability... */
+#define P_IGNITE 5000 /* ...of ignition per cycle */
+#define P_DOUBLECLOUD 10 /* ...of an ignition being double */
+#define P_MULTI 75 /* ...of an ignition being several @ once */
+#define P_FUSILLADE 250 /* ...of an ignition starting a fusillade */
+
+#define ROCKETW 2 /* Dimensions of rocket */
+#define ROCKETH 4
+#define XVELFACTOR 0.0025 /* Max horizontal velocity / screen width */
+#define ZVELFACTOR 0.0025
+#define MINZVAL 250 /* absolute minimum of z values */
+#define MINZVALSTART 300 /* range where they start */
+#define MAXZVALSTART 1000
+#define SCREENZ 400
+/* the z-component still gets too small sometimes */
+#define GETZDIFFAUX(z) (MI_DELTA3D(mi)*20.0*(1.0-(SCREENZ)/(z)))
+#define GETZDIFF(z) ((z)<MINZVAL?GETZDIFFAUX(MINZVAL):GETZDIFFAUX(z))
+#define MINYVELFACTOR 0.016 /* Min vertical velocity / screen height */
+#define MAXYVELFACTOR 0.018
+#define GRAVFACTOR 0.0002 /* delta v / screen height */
+#define MINFUSE 50 /* range of fuse lengths for rocket */
+#define MAXFUSE 100
+
+#define FUSILFACTOR 10 /* Generate fusillade by reducing P_IGNITE */
+#define FUSILLEN 100 /* Length of fusillade, in ignitions */
+
+#define SVELFACTOR 0.1 /* Max star velocity / yvel */
+#define BOUYANCY 0.2 /* Reduction in grav deceleration for stars */
+#define MAXSTARS 75 /* Number of stars issued from a shell */
+#define MINSTARS 50
+#define MINSFUSE 50 /* Range of fuse lengths for stars */
+#define MAXSFUSE 100
+
+#define INTRAND(min,max) (NRAND((max+1)-(min))+(min))
+#define FLOATRAND(min,max) ((min)+((double) LRAND()/((double) MAXRAND))*((max)-(min)))
+#define INCZ(val,add) if((val)+(add)>MINZVAL) val+=(add)
+#define ADDZ(val,add) (((val)+(add)>MINZVAL)?(val)+(add):(val))
+#define TWOPI (2.0*M_PI)
+
+typedef struct {
+ float sx, sy, sz; /* Distance from notional center */
+ float sxvel, syvel, szvel; /* Relative to notional center */
+} star;
+
+typedef struct {
+ int state;
+ int shelltype;
+ int fuse;
+ float xvel, yvel, zvel;
+ float x, y, z;
+ unsigned long color[2];
+ int nstars;
+ XRectangle Xpoints[2][MAXSTARS];
+ XRectangle Xpointsleft[2][MAXSTARS];
+ star stars[MAXSTARS];
+} rocket;
+
+typedef struct {
+ int p_ignite;
+ unsigned long rockpixel;
+ int nflying, nrockets;
+ int fusilcount;
+ int width, height;
+ int lmargin, rmargin;
+ int star_size;
+ float minvelx, maxvelx;
+ float minvely, maxvely;
+ float minvelz, maxvelz;
+ float maxsvel;
+ float rockdecel, stardecel;
+ rocket *rockq;
+} pyrostruct;
+
+static void ignite(ModeInfo * mi, pyrostruct * pp);
+static void animate(ModeInfo * mi, pyrostruct * pp, rocket * rp);
+static void shootup(ModeInfo * mi, pyrostruct * pp, rocket * rp);
+static void burst(ModeInfo * mi, pyrostruct * pp, rocket * rp);
+
+static pyrostruct *pyros = NULL;
+static int orig_p_ignite;
+static int just_started = True; /* Greet the user right away */
+
+static void
+ignite(ModeInfo * mi, pyrostruct * pp)
+{
+ rocket *rp;
+ int multi, shelltype, nstars, fuse, pix;
+ unsigned long color[2];
+ float xvel, yvel, x, zvel = 0.0, z = 0.0;
+
+ x = NRAND(pp->width);
+ xvel = FLOATRAND(-pp->maxvelx, pp->maxvelx);
+/* All this to stop too many rockets going offscreen: */
+ if ((x < pp->lmargin && xvel < 0.0) || (x > pp->rmargin && xvel > 0.0))
+ xvel = -xvel;
+ yvel = FLOATRAND(pp->minvely, pp->maxvely);
+ if (MI_WIN_IS_USE3D(mi)) {
+ z = FLOATRAND(MINZVALSTART, MAXZVALSTART);
+ zvel = FLOATRAND(pp->minvelz, pp->maxvelz);
+ }
+ fuse = INTRAND(MINFUSE, MAXFUSE);
+ nstars = INTRAND(MINSTARS, MAXSTARS);
+ if (MI_NPIXELS(mi) > 2) {
+ pix = NRAND(MI_NPIXELS(mi));
+ color[0] = MI_PIXEL(mi, pix);
+ color[1] = MI_PIXEL(mi, ((pix + (MI_NPIXELS(mi) / 2)) % MI_NPIXELS(mi)));
+ } else {
+ color[0] = color[1] = MI_WIN_WHITE_PIXEL(mi);
+ }
+
+ multi = 1;
+ if (NRAND(P_DOUBLECLOUD) == 0)
+ shelltype = DOUBLECLOUD;
+ else {
+ shelltype = CLOUD;
+ if (NRAND(P_MULTI) == 0)
+ multi = INTRAND(5, 15);
+ }
+
+ rp = pp->rockq;
+ while (multi--) {
+ if (pp->nflying >= pp->nrockets)
+ return;
+ while (rp->state != SILENT)
+ rp++;
+ pp->nflying++;
+ rp->shelltype = shelltype;
+ rp->state = REDGLARE;
+ rp->color[0] = color[0];
+ rp->color[1] = color[1];
+ rp->xvel = xvel;
+ rp->yvel = FLOATRAND(yvel * 0.97, yvel * 1.03);
+ rp->fuse = INTRAND((fuse * 90) / 100, (fuse * 110) / 100);
+ rp->x = x + FLOATRAND(multi * 7.6, multi * 8.4);
+ rp->y = pp->height - 1;
+ if (MI_WIN_IS_USE3D(mi)) {
+ rp->zvel = FLOATRAND(zvel * 0.97, zvel * 1.03);
+ rp->z = z;
+ }
+ rp->nstars = nstars;
+ }
+}
+
+static void
+animate(ModeInfo * mi, pyrostruct * pp, rocket * rp)
+{
+ int starn, diff;
+ float r, theta;
+
+ if (rp->state == REDGLARE) {
+ shootup(mi, pp, rp);
+
+/* Handle setup for explosion */
+ if (rp->state == BURSTINGINAIR) {
+ for (starn = 0; starn < rp->nstars; starn++) {
+ rp->stars[starn].sx = rp->stars[starn].sy = 0.0;
+ if (MI_WIN_IS_USE3D(mi)) {
+ rp->stars[starn].sz = 0.0;
+ diff = (int) GETZDIFF(rp->z);
+ rp->Xpoints[0][starn].x = (int) rp->x + diff;
+ rp->Xpointsleft[0][starn].x = (int) rp->x - diff;
+ rp->Xpoints[0][starn].y =
+ rp->Xpointsleft[0][starn].y = (int) rp->y;
+ if (rp->shelltype == DOUBLECLOUD) {
+ rp->Xpoints[1][starn].x = (int) rp->x + diff;
+ rp->Xpointsleft[1][starn].x = (int) rp->x - diff;
+ rp->Xpoints[1][starn].y =
+ rp->Xpointsleft[1][starn].y = (int) rp->y;
+ }
+ /* this isn't really a 3d direction. it's */
+ /* very much the same as in worm. */
+ r = FLOATRAND(0.0, pp->maxsvel);
+ theta = FLOATRAND(0.0, TWOPI);
+ rp->stars[starn].sxvel = r * COSF(theta);
+ rp->stars[starn].syvel = r * SINF(theta);
+ theta = FLOATRAND(0.0, TWOPI);
+ rp->stars[starn].szvel = FLOATRAND(0.0, pp->maxsvel) * SINF(theta);
+ } else {
+ rp->Xpoints[0][starn].x = (int) rp->x;
+ rp->Xpoints[0][starn].y = (int) rp->y;
+ if (rp->shelltype == DOUBLECLOUD) {
+ rp->Xpoints[1][starn].x = (int) rp->x;
+ rp->Xpoints[1][starn].y = (int) rp->y;
+ }
+ r = FLOATRAND(0.0, pp->maxsvel);
+ theta = FLOATRAND(0.0, TWOPI);
+ rp->stars[starn].sxvel = r * COSF(theta);
+ rp->stars[starn].syvel = r * SINF(theta);
+ }
+/* This isn't accurate solid geometry, but it looks OK. */
+ }
+ rp->fuse = INTRAND(MINSFUSE, MAXSFUSE);
+ }
+ }
+ if (rp->state == BURSTINGINAIR) {
+ burst(mi, pp, rp);
+ }
+}
+
+static void
+shootup(ModeInfo * mi, pyrostruct * pp, rocket * rp)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ int diff, h;
+
+ if (MI_WIN_IS_INSTALL(mi) && MI_WIN_IS_USE3D(mi))
+ XSetForeground(display, gc, MI_NONE_COLOR(mi));
+ else
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ if (MI_WIN_IS_USE3D(mi)) {
+ diff = (int) GETZDIFF(rp->z);
+ XFillRectangle(display, window, gc, (int) (rp->x) + diff, (int) (rp->y),
+ ROCKETW, ROCKETH + 3);
+ XFillRectangle(display, window, gc, (int) (rp->x) - diff, (int) (rp->y),
+ ROCKETW, ROCKETH + 3);
+ } else
+ XFillRectangle(display, window, gc, (int) (rp->x), (int) (rp->y),
+ ROCKETW, ROCKETH + 3);
+
+ if (rp->fuse-- <= 0) {
+ rp->state = BURSTINGINAIR;
+ return;
+ }
+ rp->x += rp->xvel;
+ rp->y += rp->yvel;
+ rp->yvel += pp->rockdecel;
+ if (MI_WIN_IS_USE3D(mi)) {
+ INCZ(rp->z, rp->zvel);
+ diff = (int) GETZDIFF(rp->z);
+ h = (int) (ROCKETH + NRAND(4));
+ if (MI_WIN_IS_INSTALL(mi))
+ XSetFunction(display, gc, GXor);
+ XSetForeground(display, gc, MI_RIGHT_COLOR(mi));
+ XFillRectangle(display, window, gc, (int) (rp->x) + diff, (int) (rp->y),
+ ROCKETW, h);
+ XSetForeground(display, gc, MI_LEFT_COLOR(mi));
+ XFillRectangle(display, window, gc, (int) (rp->x) - diff, (int) (rp->y),
+ ROCKETW, h);
+ if (MI_WIN_IS_INSTALL(mi))
+ XSetFunction(display, gc, GXcopy);
+ } else {
+ XSetForeground(display, gc, pp->rockpixel);
+ XFillRectangle(display, window, gc, (int) (rp->x), (int) (rp->y),
+ ROCKETW, (int) (ROCKETH + NRAND(4)));
+ }
+}
+
+static void
+burst(ModeInfo * mi, pyrostruct * pp, rocket * rp)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ register int starn;
+ register int nstars, stype;
+ register float rx, ry, rz = 0.0, sd; /* Help compiler optimize :-) */
+ register float sx, sy, sz;
+ int diff;
+
+ nstars = rp->nstars;
+ stype = rp->shelltype;
+ if (MI_WIN_IS_INSTALL(mi) && MI_WIN_IS_USE3D(mi))
+ XSetForeground(display, gc, MI_NONE_COLOR(mi));
+ else
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+
+ XFillRectangles(display, window, gc, rp->Xpoints[0], nstars);
+ if (stype == DOUBLECLOUD)
+ XFillRectangles(display, window, gc, rp->Xpoints[1], nstars);
+ if (MI_WIN_IS_USE3D(mi)) {
+ XFillRectangles(display, window, gc, rp->Xpointsleft[0], nstars);
+ if (stype == DOUBLECLOUD)
+ XFillRectangles(display, window, gc, rp->Xpointsleft[1], nstars);
+ }
+ if (rp->fuse-- <= 0) {
+ rp->state = SILENT;
+ pp->nflying--;
+ return;
+ }
+/* Stagger the stars' decay */
+ if (rp->fuse <= 7) {
+ if ((rp->nstars = nstars = nstars * 90 / 100) == 0)
+ return;
+ }
+ rx = rp->x;
+ ry = rp->y;
+ if (MI_WIN_IS_USE3D(mi)) {
+ rz = rp->z;
+ }
+ sd = pp->stardecel;
+ for (starn = 0; starn < nstars; starn++) {
+ sx = rp->stars[starn].sx += rp->stars[starn].sxvel;
+ sy = rp->stars[starn].sy += rp->stars[starn].syvel;
+ rp->stars[starn].syvel += sd;
+ if (MI_WIN_IS_USE3D(mi)) {
+ if (rz + rp->stars[starn].sz + rp->stars[starn].szvel > MINZVAL)
+ rp->stars[starn].sz += rp->stars[starn].szvel;
+ sz = rp->stars[starn].sz;
+ diff = (int) GETZDIFF(rz + sz);
+ rp->Xpoints[0][starn].x = (int) (rx + sx + diff);
+ rp->Xpointsleft[0][starn].x = (int) (rx + sx - diff);
+ rp->Xpoints[0][starn].y =
+ rp->Xpointsleft[0][starn].y = (int) (ry + sy);
+ if (stype == DOUBLECLOUD) {
+ rp->Xpoints[1][starn].x = (int) (rx + 1.7 * sx) + diff;
+ rp->Xpointsleft[1][starn].x = (int) (rx + 1.7 * sx) - diff;
+ rp->Xpoints[1][starn].y =
+ rp->Xpointsleft[1][starn].y = (int) (ry + 1.7 * sy);
+ }
+ } else {
+
+ rp->Xpoints[0][starn].x = (int) (rx + sx);
+ rp->Xpoints[0][starn].y = (int) (ry + sy);
+ if (stype == DOUBLECLOUD) {
+ rp->Xpoints[1][starn].x = (int) (rx + 1.7 * sx);
+ rp->Xpoints[1][starn].y = (int) (ry + 1.7 * sy);
+ }
+ }
+ }
+ rp->x = rx + rp->xvel;
+ rp->y = ry + rp->yvel;
+ if (MI_WIN_IS_USE3D(mi)) {
+ rp->z = ADDZ(rz, rp->zvel);
+ }
+ rp->yvel += sd;
+
+ if (MI_WIN_IS_USE3D(mi)) {
+ if (MI_WIN_IS_INSTALL(mi))
+ XSetFunction(display, gc, GXor);
+ XSetForeground(display, gc, MI_RIGHT_COLOR(mi));
+ XFillRectangles(display, window, gc, rp->Xpoints[0], nstars);
+ if (stype == DOUBLECLOUD) {
+ XFillRectangles(display, window, gc, rp->Xpoints[1], nstars);
+ }
+ XSetForeground(display, gc, MI_LEFT_COLOR(mi));
+ XFillRectangles(display, window, gc, rp->Xpointsleft[0], nstars);
+ if (stype == DOUBLECLOUD) {
+ XFillRectangles(display, window, gc, rp->Xpointsleft[1], nstars);
+ }
+ if (MI_WIN_IS_INSTALL(mi))
+ XSetFunction(display, gc, GXcopy);
+ } else {
+
+ XSetForeground(display, gc, rp->color[0]);
+ XFillRectangles(display, window, gc, rp->Xpoints[0], nstars);
+ if (stype == DOUBLECLOUD) {
+ XSetForeground(display, gc, rp->color[1]);
+ XFillRectangles(display, window, gc, rp->Xpoints[1], nstars);
+ }
+ }
+}
+
+void
+init_pyro(ModeInfo * mi)
+{
+ pyrostruct *pp;
+ rocket *rp;
+ int rockn, starn;
+ int size = MI_SIZE(mi);
+
+ if (pyros == NULL) {
+ if ((pyros = (pyrostruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (pyrostruct))) == NULL)
+ return;
+ }
+ pp = &pyros[MI_SCREEN(mi)];
+
+ pp->width = MI_WIN_WIDTH(mi);
+ pp->height = MI_WIN_HEIGHT(mi);
+ pp->lmargin = pp->width / 16;
+ pp->rmargin = pp->width - pp->lmargin;
+
+ pp->nrockets = MI_BATCHCOUNT(mi);
+ if (pp->nrockets < -MINROCKETS) {
+ if (pp->rockq) {
+ (void) free((void *) pp->rockq);
+ pp->rockq = NULL;
+ }
+ pp->nrockets = NRAND(-pp->nrockets - MINROCKETS + 1) + MINROCKETS;
+ } else if (pp->nrockets < MINROCKETS)
+ pp->nrockets = MINROCKETS;
+ if (size < -MINSIZE)
+ pp->star_size = NRAND(MIN(-size, MAX(MINSIZE,
+ MIN(pp->width, pp->height) / 64)) - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE) {
+ if (!size)
+ pp->star_size = MAX(MINSIZE, MIN(pp->width, pp->height) / 64);
+ else
+ pp->star_size = MINSIZE;
+ } else
+ pp->star_size = MIN(size, MAX(MINSIZE, MIN(pp->width, pp->height) / 64));
+ orig_p_ignite = P_IGNITE / pp->nrockets;
+ if (orig_p_ignite <= 0)
+ orig_p_ignite = 1;
+ pp->p_ignite = orig_p_ignite;
+
+ if (!pp->rockq) {
+ pp->rockq = (rocket *) malloc(pp->nrockets * sizeof (rocket));
+ }
+ pp->nflying = pp->fusilcount = 0;
+
+ for (rockn = 0, rp = pp->rockq; rockn < pp->nrockets; rockn++, rp++) {
+ rp->state = SILENT;
+ for (starn = 0; starn < MAXSTARS; starn++) {
+ rp->Xpoints[0][starn].width = rp->Xpoints[0][starn].height =
+ rp->Xpoints[1][starn].width = rp->Xpoints[1][starn].height =
+ pp->star_size;
+ if (MI_WIN_IS_USE3D(mi)) {
+ rp->Xpointsleft[0][starn].width = rp->Xpointsleft[0][starn].height =
+ rp->Xpointsleft[1][starn].width = rp->Xpointsleft[1][starn].height =
+ pp->star_size;
+ }
+ }
+ }
+
+ if (MI_NPIXELS(mi) > 3)
+ pp->rockpixel = MI_PIXEL(mi, ORANGE);
+ else
+ pp->rockpixel = MI_WIN_WHITE_PIXEL(mi);
+
+/* Geometry-dependent physical data: */
+ pp->maxvelx = (float) (pp->width) * XVELFACTOR;
+ pp->minvelx = -pp->maxvelx;
+ pp->minvely = -(float) (pp->height) * MINYVELFACTOR;
+ pp->maxvely = -(float) (pp->height) * MAXYVELFACTOR;
+ if (MI_WIN_IS_USE3D(mi)) {
+ pp->maxvelz = (float) (MAXZVALSTART - MINZVALSTART) * ZVELFACTOR;
+ pp->minvelz = -pp->maxvelz;
+ }
+ pp->maxsvel = pp->minvely * SVELFACTOR;
+ pp->rockdecel = (float) (pp->height) * GRAVFACTOR;
+ pp->stardecel = pp->rockdecel * BOUYANCY;
+ if (MI_WIN_IS_INSTALL(mi) && MI_WIN_IS_USE3D(mi)) {
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_NONE_COLOR(mi));
+ XFillRectangle(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ 0, 0, pp->width, pp->height);
+ } else
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+}
+
+/* ARGSUSED */
+void
+draw_pyro(ModeInfo * mi)
+{
+ pyrostruct *pp = &pyros[MI_SCREEN(mi)];
+ rocket *rp;
+ int rockn;
+
+ if (just_started || (NRAND(pp->p_ignite) == 0)) {
+ just_started = False;
+ if (NRAND(P_FUSILLADE) == 0) {
+ pp->p_ignite = orig_p_ignite / FUSILFACTOR;
+ if (pp->p_ignite <= 0)
+ pp->p_ignite = 1;
+ pp->fusilcount = INTRAND(FUSILLEN * 9 / 10, FUSILLEN * 11 / 10);
+ }
+ ignite(mi, pp);
+ if (pp->fusilcount > 0) {
+ if (--pp->fusilcount == 0)
+ pp->p_ignite = orig_p_ignite;
+ }
+ }
+ for (rockn = pp->nflying, rp = pp->rockq; rockn > 0; rp++) {
+ if (rp->state != SILENT) {
+ animate(mi, pp, rp);
+ rockn--;
+ }
+ }
+}
+
+void
+release_pyro(ModeInfo * mi)
+{
+ if (pyros != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ pyrostruct *pp = &pyros[screen];
+
+ if (pp->rockq != NULL) {
+ (void) free((void *) pp->rockq);
+ }
+ }
+ (void) free((void *) pyros);
+ pyros = NULL;
+ }
+}
+
+void
+refresh_pyro(ModeInfo * mi)
+{
+ /* Do nothing, it will refresh by itself */
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)qix.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * qix.c - vector swirl 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 29-Jul-90: support for multiple screens.
+ * made check_bounds_?() a macro.
+ * fixed initial parameter setup.
+ * 15-Dec-89: Fix for proper skipping of {White,Black}Pixel() in colors.
+ * 08-Oct-89: Fixed bug in memory allocation in init_qix().
+ * Moved seconds() to an extern.
+ * 23-Sep-89: Switch to random() and fixed bug w/ less than 4 lines.
+ * 20-Sep-89: Lint.
+ * 24-Mar-89: Written.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Qix"
+#define HACK_INIT init_qix
+#define HACK_DRAW draw_qix
+#define DEF_DELAY 30000
+#define DEF_CYCLES 64
+#define DEF_NCOLORS 200
+#define SPREAD_COLORS
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt qix_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+/* How many segments to draw per cycle when redrawing */
+#define REDRAWSTEP 3
+
+typedef struct {
+ int pix;
+ int first, last;
+ int dx1, dy1, dx2, dy2;
+ int x1, y1, x2, y2;
+ int offset;
+ int delta;
+ int width, height;
+ int nlines;
+ int redrawing, redrawpos;
+ XPoint *lineq;
+} qixstruct;
+
+static qixstruct *qixs = NULL;
+
+#define check_bounds(qp, val, del, max) \
+{ \
+ if ((val) < 0) { \
+ *(del) = NRAND((qp)->delta) + (qp)->offset; \
+ } else if ((val) > (max)) { \
+ *(del) = -(NRAND((qp)->delta)) - (qp)->offset; \
+ } \
+}
+
+void
+init_qix(ModeInfo * mi)
+{
+ qixstruct *qp;
+
+ if (qixs == NULL) {
+ if ((qixs = (qixstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (qixstruct))) == NULL)
+ return;
+ }
+ qp = &qixs[MI_SCREEN(mi)];
+
+ qp->nlines = (MI_CYCLES(mi) + 1) * 2;
+ if (qp->lineq)
+ (void) free((void *) qp->lineq);
+ qp->lineq = (XPoint *) calloc(qp->nlines, sizeof (XPoint));
+ qp->width = MI_WIN_WIDTH(mi);
+ qp->height = MI_WIN_HEIGHT(mi);
+ qp->delta = 16;
+ qp->redrawing = 0;
+
+ if (qp->width < 100) { /* icon window */
+ qp->nlines /= 4;
+ qp->delta /= 4;
+ }
+ qp->offset = qp->delta / 3;
+ qp->last = 0;
+ if (MI_NPIXELS(mi) > 2)
+ qp->pix = NRAND(MI_NPIXELS(mi));
+ qp->dx1 = NRAND(qp->delta) + qp->offset;
+ qp->dy1 = NRAND(qp->delta) + qp->offset;
+ qp->dx2 = NRAND(qp->delta) + qp->offset;
+ qp->dy2 = NRAND(qp->delta) + qp->offset;
+ qp->x1 = NRAND(qp->width);
+ qp->y1 = NRAND(qp->height);
+ qp->x2 = NRAND(qp->width);
+ qp->y2 = NRAND(qp->height);
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+}
+
+void
+draw_qix(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ qixstruct *qp = &qixs[MI_SCREEN(mi)];
+ int i, j;
+
+ qp->first = (qp->last + 2) % qp->nlines;
+
+ qp->x1 += qp->dx1;
+ qp->y1 += qp->dy1;
+ qp->x2 += qp->dx2;
+ qp->y2 += qp->dy2;
+ check_bounds(qp, qp->x1, &qp->dx1, qp->width);
+ check_bounds(qp, qp->y1, &qp->dy1, qp->height);
+ check_bounds(qp, qp->x2, &qp->dx2, qp->width);
+ check_bounds(qp, qp->y2, &qp->dy2, qp->height);
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XDrawLine(display, MI_WINDOW(mi), gc,
+ qp->lineq[qp->first].x, qp->lineq[qp->first].y,
+ qp->lineq[qp->first + 1].x, qp->lineq[qp->first + 1].y);
+ if (MI_NPIXELS(mi) > 2) {
+ XSetForeground(display, gc, MI_PIXEL(mi, qp->pix));
+ if (++qp->pix >= MI_NPIXELS(mi))
+ qp->pix = 0;
+ } else
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+
+ XDrawLine(display, MI_WINDOW(mi), gc, qp->x1, qp->y1, qp->x2, qp->y2);
+
+ qp->lineq[qp->last].x = qp->x1;
+ qp->lineq[qp->last].y = qp->y1;
+ qp->last++;
+ if (qp->last >= qp->nlines)
+ qp->last = 0;
+
+ qp->lineq[qp->last].x = qp->x2;
+ qp->lineq[qp->last].y = qp->y2;
+ qp->last++;
+ if (qp->last >= qp->nlines)
+ qp->last = 0;
+ if (qp->redrawing) {
+ for (i = 0; i < REDRAWSTEP; i++) {
+ j = (qp->first - qp->redrawpos + qp->nlines - 2) % qp->nlines;
+ XDrawLine(display, MI_WINDOW(mi), gc,
+ qp->lineq[j].x, qp->lineq[j].y,
+ qp->lineq[j + 1].x, qp->lineq[j + 1].y);
+ qp->redrawpos += 2;
+ if (qp->redrawpos >= qp->nlines - 2) {
+ qp->redrawing = 0;
+ break;
+ }
+ }
+ }
+}
+
+void
+release_qix(ModeInfo * mi)
+{
+ if (qixs != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ qixstruct *qp = &qixs[screen];
+
+ if (qp->lineq)
+ (void) free((void *) qp->lineq);
+ }
+ (void) free((void *) qixs);
+ qixs = NULL;
+ }
+}
+
+void
+refresh_qix(ModeInfo * mi)
+{
+ qixstruct *qp = &qixs[MI_SCREEN(mi)];
+
+ qp->redrawing = 1;
+ qp->redrawpos = 0;
+}
--- /dev/null
+
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)random.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * random.c - Run random modes for a certain duration.
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Made more compatible with xscreensaver :)
+ * 18-Mar-96: Ron Hitchens <ron@idiom.com>
+ * Re-coded for the ModeInfo calling scheme. Added the
+ * change hook. Get ready for 3.8 release.
+ * 23-Dec-95: Ron Hitchens <ron@idiom.com>
+ * Re-coded pickMode() to keep track of the modes, so
+ * that all modes are tried before there are any repeats.
+ * Also prevent a mode from being picked twice in a row
+ * (could happen as first pick after refreshing the list).
+ * 04-Sep-95: Written by Heath A. Kehoe <hakehoe@icaen.uiowa.edu>.
+ *
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Random"
+#define HACK_INIT init_random
+#define HACK_DRAW draw_random
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+#endif /* STANDALONE */
+
+/* Relatively high CPU (slower than "star"), GL modes are the slowest */
+/* ant ball bat braid bounce drift galaxy forest hop ifs */
+/* julia maze mountain pacman slip sphere spiral strange swirl voters wator */
+/* cartoon <XPM> */
+/* escher gears morph3d pipes superquadrics sproingies <GL> */
+#if defined( USE_XPM ) || defined( USE_XPMINC )
+#define NUMXPM 1
+#else
+#define NUMXPM 0
+#endif
+#define NUMHIGHCPU (21+NUMXPM)
+#ifdef USE_GL
+#define NUMGL 6
+#else
+#define NUMGL 0
+#endif
+/* fadeplot */
+#ifdef USE_HACKERS
+#define NUMHACKERS 1
+#else
+#define NUMHACKERS 0
+#endif
+#ifdef USE_BOMB
+#define NUMSPECIAL 3 /* bomb, blank, random */
+#else
+#define NUMSPECIAL 2 /* blank, random */
+#endif
+
+#define GC_SAVE_VALUES (GCFunction|GCLineWidth|GCLineStyle|GCCapStyle|GCJoinStyle|GCGraphicsExposures|GCFont|GCSubwindowMode)
+
+#define DEF_DURATION "60" /* 0 == infinite duration */
+#define DEF_MODELIST ""
+#define DEF_SEQUENTIAL "False"
+
+extern float saturation;
+extern int delay;
+extern int batchcount;
+extern int cycles;
+extern int size;
+
+static int duration;
+static char *modelist;
+static Bool sequential;
+
+#ifndef STANDALONE
+static XrmOptionDescRec opts[] =
+{
+ {"-duration", ".random.duration", XrmoptionSepArg, (caddr_t) NULL},
+ {"-modelist", ".random.modelist", XrmoptionSepArg, (caddr_t) NULL},
+ {"-sequential", ".random.sequential", XrmoptionNoArg, (caddr_t) "on"},
+ {"+sequential", ".random.sequential", XrmoptionNoArg, (caddr_t) "off"}
+};
+static argtype vars[] =
+{
+ {(caddr_t *) & duration, "duration", "Duration", DEF_DURATION, t_Int},
+ {(caddr_t *) & modelist, "modelist", "Modelist", DEF_MODELIST, t_String},
+{(caddr_t *) & sequential, "sequential", "Sequential", DEF_SEQUENTIAL, t_Bool}
+};
+static OptionStruct desc[] =
+{
+ {"-duration num", "how long a mode runs before changing to another"},
+ {"-modelist string", "list of modes to randomly choose from"},
+ {"-/+sequential", "turn on/off picking of modes sequentially"}
+};
+
+ModeSpecOpt random_opts =
+{4, opts, 3, vars, desc};
+
+#endif
+
+typedef struct {
+ XGCValues gcvs;
+ int fix;
+} randomstruct;
+
+static int currentmode = -1;
+static int previousmode = -1;
+static unsigned long starttime;
+static int *modes;
+static int nmodes;
+static Bool change_now = False;
+
+static randomstruct *randoms;
+
+static int
+pickMode(void)
+{
+ static int *mode_indexes = NULL;
+ static int mode_count = 0;
+ static int last_mode = -1, last_index = -1;
+ int mode, i;
+
+ if (mode_indexes == NULL) {
+ if ((mode_indexes = (int *) calloc(nmodes, sizeof (int))) ==
+ NULL) {
+ if (sequential)
+ return modes[0];
+ else
+ return modes[NRAND(nmodes)];
+ }
+ }
+ if (mode_count == 0) {
+ for (i = 0; i < nmodes; i++) {
+ mode_indexes[i] = modes[i];
+ }
+ mode_count = nmodes;
+ }
+ if (mode_count == 1) {
+ /* only one left, let's use that one */
+ last_index = -1;
+ return (last_mode = mode_indexes[--mode_count]);
+ } else {
+ /* pick a random slot in the list, check for last */
+ if (sequential) {
+ i = (last_index + 1) % mode_count;
+ last_index = i;
+ } else
+ while (mode_indexes[i = NRAND(mode_count)] == last_mode);
+ }
+
+ mode = mode_indexes[i]; /* copy out chosen mode */
+ /* move mode at end of list to slot vacated by chosen mode, dec count */
+ mode_indexes[i] = mode_indexes[--mode_count];
+ return (last_mode = mode); /* remember last mode picked */
+}
+
+static
+char *
+strpmtok(int *sign, char *str)
+{
+ static int nextsign = 0;
+ static char *loc;
+ char *p, *r;
+
+ if (str)
+ loc = str;
+ if (nextsign) {
+ *sign = nextsign;
+ nextsign = 0;
+ }
+ p = loc - 1;
+ for (;;) {
+ switch (*++p) {
+ case '+':
+ *sign = 1;
+ continue;
+ case '-':
+ *sign = -1;
+ continue;
+ case ' ':
+ case ',':
+ case '\t':
+ case '\n':
+ continue;
+ case 0:
+ loc = p;
+ return NULL;
+ }
+ break;
+ }
+ r = p;
+
+ for (;;) {
+ switch (*++p) {
+ case '+':
+ nextsign = 1;
+ break;
+ case '-':
+ nextsign = -1;
+ break;
+ case ' ':
+ case ',':
+ case '\t':
+ case '\n':
+ case 0:
+ break;
+ default:
+ continue;
+ }
+ break;
+ }
+ if (*p) {
+ *p = 0;
+ loc = p + 1;
+ } else
+ loc = p;
+
+ return r;
+}
+
+static void
+parsemodelist(ModeInfo * mi)
+{
+ int i, sign = 1;
+ char *p;
+
+ modes = (int *) calloc(numprocs - 1, sizeof (int));
+
+ p = strpmtok(&sign, modelist);
+
+ while (p) {
+ if (!strcmp(p, "all"))
+ for (i = 0; i < numprocs - NUMSPECIAL; i++)
+ modes[i] = (sign > 0);
+ else if (!strcmp(p, "allstable"))
+ for (i = 0; i < numprocs - NUMSPECIAL - NUMHACKERS; i++)
+ modes[i] = (sign > 0);
+ else if (!strcmp(p, "allstandard"))
+ for (i = 0; i < numprocs - NUMSPECIAL - NUMHACKERS - NUMGL; i++)
+ modes[i] = (sign > 0);
+ else if (!strcmp(p, "allnice"))
+ for (i = 0; i < numprocs - NUMSPECIAL - NUMHACKERS - NUMGL - NUMHIGHCPU;
+ i++)
+ modes[i] = (sign > 0);
+ else if (!strcmp(p, "allgl"))
+ for (i = numprocs - NUMSPECIAL - NUMHACKERS - NUMGL;
+ i < numprocs - NUMSPECIAL - NUMHACKERS; i++)
+ modes[i] = (sign > 0);
+ else if (!strcmp(p, "all3d"))
+ for (i = 0; i < numprocs - NUMSPECIAL; i++) {
+ if (!strcmp("bouboule", LockProcs[i].cmdline_arg) ||
+ !strcmp("pyro", LockProcs[i].cmdline_arg) ||
+ !strcmp("star", LockProcs[i].cmdline_arg) ||
+ !strcmp("worm", LockProcs[i].cmdline_arg))
+ modes[i] = (sign > 0);
+ } else {
+ for (i = 0; i < numprocs - 1; i++)
+ if (!strcmp(p, LockProcs[i].cmdline_arg))
+ break;
+ if (i < numprocs - 1)
+ modes[i] = (sign > 0);
+ else
+ (void) fprintf(stderr, "unrecognized mode \"%s\"\n", p);
+ }
+ p = strpmtok(&sign, (char *) NULL);
+ }
+
+ nmodes = 0;
+ for (i = 0; i < numprocs - 1; i++)
+ if (modes[i])
+ modes[nmodes++] = i;
+ if (!nmodes) { /* empty list */
+ for (i = 0; i < numprocs - NUMSPECIAL; i++)
+ modes[i] = i;
+ nmodes = i;
+ }
+ if (MI_WIN_IS_DEBUG(mi)) {
+ (void) fprintf(stderr, "%d mode%s: ", nmodes, ((nmodes == 1) ? "" : "s"));
+ for (i = 0; i < nmodes; i++)
+ (void) fprintf(stderr, "%d ", modes[i]);
+ (void) fprintf(stderr, "\n");
+ }
+}
+
+static
+void
+setMode(ModeInfo * mi, int newmode)
+{
+ randomstruct *rp = &randoms[MI_SCREEN(mi)];
+ int i;
+
+ previousmode = currentmode;
+ currentmode = newmode;
+
+/* FIX THIS GLOBAL ACCESS */
+ delay = MI_DELAY(mi) = LockProcs[currentmode].def_delay;
+ batchcount = MI_BATCHCOUNT(mi) = LockProcs[currentmode].def_batchcount;
+ cycles = MI_CYCLES(mi) = LockProcs[currentmode].def_cycles;
+ size = MI_SIZE(mi) = LockProcs[currentmode].def_size;
+ saturation = MI_SATURATION(mi) = LockProcs[currentmode].def_saturation;
+
+ for (i = 0; i < MI_NUM_SCREENS(mi); i++) {
+
+ XChangeGC(MI_DISPLAY(mi), MI_GC(mi), GC_SAVE_VALUES,
+ &(rp->gcvs)); /* Not sure if this is right for multiscreens */
+ randoms[i].fix = True;
+ }
+ if (MI_WIN_IS_VERBOSE(mi))
+ (void) fprintf(stderr, "mode: %s\n", LockProcs[currentmode].cmdline_arg);
+}
+
+void
+init_random(ModeInfo * mi)
+{
+ randomstruct *rp;
+ int i;
+
+ if (randoms == NULL) {
+ if ((randoms = (randomstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (randomstruct))) == NULL)
+ return;
+ }
+ rp = &randoms[MI_SCREEN(mi)];
+
+ if (currentmode < 0) {
+ parsemodelist(mi);
+
+ for (i = 0; i < MI_NUM_SCREENS(mi); i++) {
+ (void) XGetGCValues(MI_DISPLAY(mi), MI_GC(mi),
+ GC_SAVE_VALUES, &(rp->gcvs));
+ }
+ setMode(mi, pickMode());
+ starttime = seconds();
+ if (duration < 0)
+ duration = 0;
+ }
+ if (rp->fix) {
+ fixColormap(MI_DISPLAY(mi), MI_WINDOW(mi), MI_SCREEN(mi),
+ MI_SATURATION(mi), MI_WIN_IS_MONO(mi), MI_WIN_IS_INSTALL(mi),
+ MI_WIN_IS_INROOT(mi), MI_WIN_IS_INWINDOW(mi), MI_WIN_IS_VERBOSE(mi));
+ rp->fix = False;
+ }
+ call_init_hook(&LockProcs[currentmode], mi);
+}
+
+void
+draw_random(ModeInfo * mi)
+{
+ int scrn = MI_SCREEN(mi);
+ randomstruct *rp = &randoms[scrn];
+ int newmode;
+ unsigned long now = seconds();
+ int has_run = (duration == 0) ? 0 : (int) (now - starttime);
+ static int do_init = 0;
+
+ if ((scrn == 0) && do_init) {
+ do_init = 0;
+ }
+ if ((scrn == 0) && (change_now || (has_run > duration))) {
+ newmode = pickMode();
+
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+
+ setMode(mi, newmode);
+ starttime = now;
+ do_init = 1;
+ change_now = False;
+ }
+ if (rp->fix) {
+ fixColormap(MI_DISPLAY(mi), MI_WINDOW(mi), MI_SCREEN(mi),
+ MI_SATURATION(mi), MI_WIN_IS_MONO(mi), MI_WIN_IS_INSTALL(mi),
+ MI_WIN_IS_INROOT(mi), MI_WIN_IS_INWINDOW(mi), MI_WIN_IS_VERBOSE(mi));
+ rp->fix = False;
+ }
+ if (do_init) {
+ call_init_hook(&LockProcs[currentmode], mi);
+ }
+ call_callback_hook(&LockProcs[currentmode], mi);
+}
+
+void
+refresh_random(ModeInfo * mi)
+{
+ call_refresh_hook(&LockProcs[currentmode], mi);
+}
+
+void
+change_random(ModeInfo * mi)
+{
+ if (MI_SCREEN(mi) == 0)
+ change_now = True; /* force a change on next draw callback */
+
+ draw_random(mi);
+}
+
+void
+release_random(ModeInfo * mi)
+{
+ if (previousmode >= 0 && previousmode != currentmode)
+ call_release_hook(&LockProcs[previousmode], mi);
+ previousmode = currentmode;
+}
--- /dev/null
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)ras.c 4.00 97/01/01 xlockmore";
+
+#endif
+
+/*-
+ * Utilities for Sun rasterfile processing
+ *
+ * Copyright (c) 1995 by Tobias Gloth
+ *
+ * See xlock.c for copying information.
+ *
+ * Revision History:
+ * 3-Mar-96: Added random image selection.
+ * 12-Dec-95: Modified to be a used in more than one mode
+ * <joukj@crys.chem.uva.nl>
+ * 22-May-95: Written.
+ */
+
+#include "xlock.h"
+#include <time.h>
+#include "ras.h"
+
+char *imagefile;
+
+#define COLORMAPSIZE 0x100
+#define RGBCOLORMAPSIZE 0x300
+typedef struct {
+ int entry[COLORMAPSIZE];
+ unsigned char header[32];
+ unsigned char color[RGBCOLORMAPSIZE];
+ unsigned char red[COLORMAPSIZE], green[COLORMAPSIZE], blue[COLORMAPSIZE];
+ unsigned char *data;
+ unsigned long sign;
+ unsigned long width, height;
+ unsigned long depth;
+ unsigned long colors;
+} raster;
+
+static raster ras;
+
+static unsigned long find_nearest(int r, int g, int b);
+static unsigned long get_long(int n);
+
+static void
+analyze_header(void)
+{
+ ras.sign = get_long(0);
+ ras.width = get_long(1);
+ ras.height = get_long(2);
+ ras.depth = get_long(3);
+ ras.colors = get_long(7) / 3;
+}
+
+static void
+convert_colors(ModeInfo * mi)
+{
+ int i;
+ unsigned long black, white, fgpix, bgpix;
+ XColor fgcol, bgcol;
+
+ black = MI_WIN_BLACK_PIXEL(mi);
+ white = MI_WIN_WHITE_PIXEL(mi);
+ fgpix = MI_FG_COLOR(mi);
+ bgpix = MI_BG_COLOR(mi);
+ fgcol.pixel = fgpix;
+ bgcol.pixel = bgpix;
+ XQueryColor(MI_DISPLAY(mi), MI_WIN_COLORMAP(mi), &fgcol);
+ XQueryColor(MI_DISPLAY(mi), MI_WIN_COLORMAP(mi), &bgcol);
+
+ /* Set these, if raster does not overwrite some, so much the better. */
+ if (fgpix < COLORMAPSIZE) {
+ ras.red[fgpix] = fgcol.red >> 8;
+ ras.green[fgpix] = fgcol.green >> 8;
+ ras.blue[fgpix] = fgcol.blue >> 8;
+ }
+ if (bgpix < COLORMAPSIZE) {
+ ras.red[bgpix] = bgcol.red >> 8;
+ ras.green[bgpix] = bgcol.green >> 8;
+ ras.blue[bgpix] = bgcol.blue >> 8;
+ }
+ if (white < COLORMAPSIZE) {
+ ras.red[white] = 255;
+ ras.green[white] = 255;
+ ras.blue[white] = 255;
+ }
+ if (black < COLORMAPSIZE) {
+ ras.red[black] = 0;
+ ras.green[black] = 0;
+ ras.blue[black] = 0;
+ }
+ /* Set up raster colors */
+ /* Could try juggling this stuff around so it does not conflict
+ with fg,bg,white,black */
+ for (i = 0; i < (int) ras.colors; i++) {
+ ras.red[i] = ras.color[i + 0 * ras.colors];
+ ras.green[i] = ras.color[i + 1 * ras.colors];
+ ras.blue[i] = ras.color[i + 2 * ras.colors];
+ }
+
+ /* Make sure there is a black ... */
+ if (ras.colors <= 0xff)
+ ras.red[0xff] = ras.green[0xff] = ras.blue[0xff] = 0;
+}
+
+static unsigned long
+find_nearest(int r, int g, int b)
+{
+ unsigned long i, minimum = RGBCOLORMAPSIZE, imin = 0, t;
+
+ for (i = 0; i < COLORMAPSIZE; i++) {
+ t = abs(r - (int) ras.red[i]) + abs(g - (int) ras.green[i]) +
+ abs(b - (int) ras.blue[i]);
+ if (t < minimum) {
+ minimum = t;
+ imin = i;
+ }
+ }
+#ifdef DEBUG
+ (void) fprintf(stderr, "giving (%d/%d/%d)[%ld] for (%d/%d/%d) diff %ld\n",
+ ras.red[imin], ras.green[imin], ras.blue[imin], imin, r, g, b, minimum);
+#endif
+ return imin;
+}
+
+unsigned long
+GetWhite(void)
+{
+ return ras.entry[find_nearest(0xff, 0xff, 0xff)];
+}
+
+unsigned long
+GetBlack(void)
+{
+ return ras.entry[find_nearest(0, 0, 0)];
+}
+
+unsigned long
+GetColor(ModeInfo * mi, unsigned long pixel)
+{
+ XColor col;
+
+ col.pixel = pixel;
+ XQueryColor(MI_DISPLAY(mi), MI_WIN_COLORMAP(mi), &col);
+ return ras.entry[find_nearest(col.red >> 8, col.green >> 8, col.blue >> 8)];
+}
+
+static unsigned long
+get_long(int n)
+{
+ return
+ (((unsigned long) ras.header[4 * n + 0]) << 24) +
+ (((unsigned long) ras.header[4 * n + 1]) << 16) +
+ (((unsigned long) ras.header[4 * n + 2]) << 8) +
+ (((unsigned long) ras.header[4 * n + 3]) << 0);
+}
+
+int
+RasterFileToImage(ModeInfo * mi, char *filename, XImage ** image)
+{
+ int read_width;
+ FILE *file;
+
+ if ((file = my_fopen(filename, "r")) == NULL) {
+ /*(void) fprintf(stderr, "could not read file \"%s\"\n", filename); */
+ return RasterOpenFailed;
+ }
+ (void) fread((void *) ras.header, 8, 4, file);
+ analyze_header();
+ if (ras.sign != 0x59a66a95) {
+ /* not a raster file */
+ (void) fclose(file);
+ return RasterFileInvalid;
+ }
+ if (ras.depth != 8) {
+ (void) fclose(file);
+ (void) fprintf(stderr, "only 8-bit Raster files are supported\n");
+ return RasterColorFailed;
+ }
+ read_width = ras.width;
+ if ((ras.width & 1) != 0)
+ read_width++;
+ ras.data = (unsigned char *) malloc((int) (read_width * ras.height));
+ if (!ras.data) {
+ (void) fclose(file);
+ (void) fprintf(stderr, "out of memory for Raster file\n");
+ return RasterNoMemory;
+ }
+ *image = XCreateImage(MI_DISPLAY(mi), MI_VISUAL(mi),
+ 8, ZPixmap, 0,
+ (char *) ras.data, (int) ras.width, (int) ras.height,
+ 16, (int) read_width);
+ if (!*image) {
+ (void) fclose(file);
+ (void) fprintf(stderr, "could not create image from Raster file\n");
+ return RasterColorError;
+ }
+ (void) fread((void *) ras.color, (int) ras.colors, 3, file);
+ (void) fread((void *) ras.data, read_width, (int) ras.height, file);
+ (void) fclose(file);
+ convert_colors(mi);
+ return RasterSuccess;
+}
+
+void
+SetImageColors(Display * display, Colormap cmap)
+{
+ XColor xcolor[COLORMAPSIZE];
+ int i;
+
+ for (i = 0; i < COLORMAPSIZE; i++) {
+ xcolor[i].flags = DoRed | DoGreen | DoBlue;
+ xcolor[i].red = ras.red[i] << 8;
+ xcolor[i].green = ras.green[i] << 8;
+ xcolor[i].blue = ras.blue[i] << 8;
+ if (!XAllocColor(display, cmap, xcolor + i))
+ error("not enough colors.\n");
+ ras.entry[i] = xcolor[i].pixel;
+ }
+/* for (i = 0; i < ras.width * ras.height; i++) ras.data[i] =
+ ras.entry[ras.data[i]]; */
+}
--- /dev/null
+/*-
+ * @(#)ras.h 3.9 96/05/25 xlockmore
+ *
+ * Utilities for Sun rasterfile processing
+ *
+ * Copyright (c) 1995 by Tobias Gloth
+ *
+ * See xlock.c for copying information.
+ *
+ * Revision History:
+ * 12-Dec-95: Modified to be a used in more than one mode
+ * <joukj@crys.chem.uva.nl>
+ * 22-May-95: Written.
+ */
+
+#define RasterColorError 1
+#define RasterSuccess 0
+#define RasterOpenFailed -1
+#define RasterFileInvalid -2
+#define RasterNoMemory -3
+#define RasterColorFailed -4
+
+extern int RasterFileToImage(ModeInfo * mi, char *filename, XImage ** image);
+extern void SetImageColors(Display * display, Colormap cmap);
+extern unsigned long GetBlack(void);
+extern unsigned long GetWhite(void);
+extern unsigned long GetColor(ModeInfo * mi, unsigned long pixel);
--- /dev/null
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)resource.c 4.03 97/04/25 xlockmore";
+
+#endif
+
+/*-
+ * resource.c - resource management for xlock, the X Window System lockscreen.
+ *
+ * Copyright (c) 1991 by Patrick J. Naughton.
+ *
+ * See xlock.c for copying information.
+ *
+ * Revision History:
+ *
+ * Changes maintained by David Bagley <bagleyd@bigfoot.com>
+ * 01-Apr-97: Tom Schmidt <tschmidt@micron.com>
+ * Fixed memory leak. Made -visual option a hacker mode for now.
+ * 20-Mar-97: Tom Schmidt <tschmidt@micron.com>
+ * Added -visual option.
+ * 3-Apr-96: Jouk Jansen <joukj@crys.chem.uva.nl>
+ * Supply for wildcards for filenames for random selection
+ * 18-Mar-96: Ron Hitchens <ron@idiom.com>
+ * Setup chosen mode with set_default_mode() for new hook scheme.
+ * 6-Mar-96: Jouk Jansen <joukj@crys.chem.uva.nl>
+ * Remote node checking for VMS fixed
+ * 20-Dec-95: Ron Hitchens <ron@idiom.com>
+ * Resource parsing fixed for "nolock".
+ * 02-Aug-95: Patch to use default delay, etc., from mode.h thanks to
+ * Roland Bock <exp120@physik.uni-kiel.d400.de>
+ * 17-Jun-95: Split out mode.h from resource.c .
+ * 29-Mar-95: Added -cycles for more control over a lockscreen similar to
+ * -delay, -batchcount, and -saturation.
+ * 21-Feb-95: MANY patches from Heath A. Kehoe <hakehoe@icaen.uiowa.edu>.
+ * 21-Dec-94: patch for -delay, -batchcount and -saturation for X11R5+
+ * from Patrick D Sullivan <pds@bss.com>.
+ * 18-Dec-94: -inroot option added from Bill Woodward <wpwood@pencom.com>.
+ * 20-Sep-94: added bat mode from Lorenzo Patocchi <patol@info.isbiel.ch>.
+ * 11-Jul-94: added grav mode, and inwindow option from Greg Bowering
+ * <greg@cs.adelaide.edu.au>
+ * 22-Jun-94: Modified for VMS
+ * <Anthony.D.Clarke@Support.Hatfield.Raytheon.bae.eurokom.ie>
+ * 17-Jun-94: default changed from life to blank
+ * 21-Mar-94: patch fix for AIXV3 from <R.K.Lloyd@csc.liv.ac.uk>
+ * 01-Dec-93: added patch for AIXV3 from Tom McConnell
+ * <tmcconne@sedona.intel.com>
+ * 29-Jun-93: added spline, maze, sphere, hyper, helix, rock, and blot mode.
+ *
+ * Changes of Patrick J. Naughton
+ * 25-Sep-91: added worm mode.
+ * 24-Jun-91: changed name to username.
+ * 06-Jun-91: Added flame mode.
+ * 24-May-91: Added -name and -usefirst and -resources.
+ * 16-May-91: Added random mode and pyro mode.
+ * 26-Mar-91: checkResources: delay must be >= 0.
+ * 29-Oct-90: Added #include <ctype.h> for missing isupper() on some OS revs.
+ * moved -mode option, reordered Xrm database evaluation.
+ * 28-Oct-90: Added text strings.
+ * 26-Oct-90: Fix bug in mode specific options.
+ * 31-Jul-90: Fix ':' handling in parsefilepath
+ * 07-Jul-90: Created from resource work in xlock.c
+ *
+ */
+
+#include "xlock.h"
+#include "mode.h"
+#include "version.h"
+#if VMS
+#if ( __VMS_VER < 70000000 )
+#ifdef __DECC
+#define gethostname decc$gethostname
+#define gethostbyname decc$gethostbyname
+#endif
+#else
+#include <socket.h>
+#endif
+#endif
+#include <netdb.h>
+#include <ctype.h>
+
+#ifndef offsetof
+#define offsetof(s,m) ((char*)(&((s *)0)->m)-(char*)0)
+#endif
+
+#if defined( USE_AUTO_LOGOUT ) || defined( USE_BUTTON_LOGOUT )
+extern int fullLock();
+
+#endif
+
+#ifndef MAXHOSTNAMELEN
+#define MAXHOSTNAMELEN 64 /* SunOS 3.5 does not define this */
+#endif
+
+extern char *getenv(const char *);
+
+#ifndef DEF_FILESEARCHPATH
+#ifdef VMS
+#include <descrip>
+#include <iodef>
+#include <ssdef>
+#include <stsdef>
+#include <types.h>
+#include <starlet.h>
+
+#define DEF_FILESEARCHPATH "DECW$SYSTEM_DEFAULTS:DECW$%N.DAT%S"
+#define BUFSIZE 132
+#define DECW$C_WS_DSP_TRANSPORT 2 /* taken from wsdriver.lis */
+#define IO$M_WS_DISPLAY 0x00000040 /* taken from wsdriver */
+
+struct descriptor_t { /* descriptor structure */
+ unsigned short len;
+ unsigned char type;
+ unsigned char c_class;
+ char *ptr;
+};
+typedef struct descriptor_t dsc;
+
+/* $dsc creates a descriptor for a predefined string */
+
+#define $dsc(name,string) dsc name = { sizeof(string)-1,14,1,string}
+
+/* $dscp creates a descriptor pointing to a buffer allocated elsewhere */
+
+#define $dscp(name,size,addr) dsc name = { size,14,1,addr }
+
+static int descr();
+
+#else
+#define DEF_FILESEARCHPATH "/usr/lib/X11/%T/%N%S"
+#endif
+#endif
+#ifndef DEF_MODE
+#if 0
+#define DEF_MODE "blank" /* May be safer */
+#else
+#define DEF_MODE "random" /* May be more interesting */
+#endif
+#endif
+#define DEF_DELAY "200000" /* microseconds between batches */
+#define DEF_BATCHCOUNT "100" /* vectors (or whatever) per batch */
+#define DEF_CYCLES "1000" /* timeout in cycles for a batch */
+#define DEF_SIZE "0" /* size, default if 0 */
+#define DEF_SATURATION "1.0" /* color ramp saturation 0->1 */
+#define DEF_NICE "10" /* xlock process nicelevel */
+#define DEF_LOCKDELAY "0" /* secs until lock */
+#define DEF_TIMEOUT "30" /* secs until password entry times out */
+#ifndef DEF_FONT
+#ifdef AIXV3
+#define DEF_FONT "fixed"
+#else /* !AIXV3 */
+#define DEF_FONT "-b&h-lucida-medium-r-normal-sans-24-*-*-*-*-*-iso8859-1"
+#endif /* !AIXV3 */
+#endif
+#define DEF_MSGFONT "-adobe-courier-medium-r-*-*-14-*-*-*-m-*-iso8859-1"
+#define DEF_BG "White"
+#define DEF_FG "Black"
+#define DEF_NAME "Name: "
+#define DEF_PASS "Password: "
+#define DEF_INFO "Enter password to unlock; select icon to lock."
+#define DEF_VALID "Validating login..."
+#define DEF_INVALID "Invalid login."
+#define DEF_GEOMETRY ""
+#define DEF_ICONGEOMETRY ""
+#define DEF_DELTA3D "1.5" /* space between things in 3d mode relative to their size */
+#ifndef DEF_MESSAGESFILE
+#define DEF_MESSAGESFILE ""
+#endif
+#ifndef DEF_MESSAGEFILE
+#define DEF_MESSAGEFILE ""
+#endif
+#ifndef DEF_MESSAGE
+/* #define DEF_MESSAGE "I am out running around." */
+#define DEF_MESSAGE ""
+#endif
+#ifndef DEF_IMAGEFILE
+#define DEF_IMAGEFILE ""
+#endif
+#define DEF_CLASSNAME "XLock"
+/*-
+ Grid Number of Neigbors
+ ---- ------------------
+ Square 4 (or 8) <- 8 is not implemented
+ Hexagon 6
+ Triangle (3 or 12) <- 3 and 12 are not implemented
+*/
+#define DEF_NEIGHBORS "0" /* 4 is best for ant & demon, 8 for life */
+
+#ifdef USE_RPLAY
+#define DEF_LOCKSOUND "thank-you"
+#define DEF_INFOSOUND "identify-please"
+#define DEF_VALIDSOUND "complete"
+#define DEF_INVALIDSOUND "not-programmed"
+#else /* !USE_RPLAY */
+#if defined ( DEF_PLAY ) || defined ( USE_NAS )
+#define DEF_LOCKSOUND "thank-you.au"
+#define DEF_INFOSOUND "identify-please.au"
+#define DEF_VALIDSOUND "complete.au"
+#define DEF_INVALIDSOUND "not-programmed.au"
+#else /* !DEF_PLAY && !USE_NAS */
+#ifdef USE_VMSPLAY
+#define DEF_LOCKSOUND "[]thank-you.au"
+#define DEF_INFOSOUND "[]identify-please.au"
+#define DEF_VALIDSOUND "[]complete.au"
+#define DEF_INVALIDSOUND "[]not-programmed.au"
+#endif /* !USE_VMSPLAY */
+#endif /* !DEF_PLAY && !USE_NAS */
+#endif /* !USE_RPLAY */
+
+#if defined( USE_AUTO_LOGOUT ) && !defined( DEF_AUTO_LOGOUT )
+#if ( USE_AUTO_LOGOUT <= 0 )
+#define DEF_AUTO_LOGOUT "120" /* User Default, can be overridden */
+#else
+#define DEF_AUTO_LOGOUT "0" /* User Default, can be overridden */
+#endif
+#endif
+
+#if defined( USE_BUTTON_LOGOUT )
+#if !defined( DEF_BUTTON_LOGOUT )
+#if ( USE_BUTTON_LOGOUT <= 0 )
+#define DEF_BUTTON_LOGOUT "5" /* User Default, can be overridden */
+#else
+#define DEF_BUTTON_LOGOUT "0" /* User Default, can be overridden */
+#endif
+#endif
+
+#define DEF_BTN_LABEL "Logout" /* string that appears in logout button */
+
+/* this string appears immediately below logout button */
+#define DEF_BTN_HELP "Click here to logout"
+
+/* this string appears in place of the logout button if user could not be
+ logged out */
+#define DEF_FAIL "Auto-logout failed"
+
+#endif
+
+extern char *ProgramName;
+extern Display *dsp;
+extern char *program;
+
+/* For modes with text, marquee & nose */
+extern char *messagesfile;
+extern char *messagefile;
+extern char *message;
+extern char *mfont;
+
+/* For modes with images, image & puzzle */
+extern char *imagefile;
+
+/* For modes automata modes ant & demon */
+int neighbors;
+
+static char *mode;
+static char *displayname = NULL;
+static char *classname;
+static char *modename;
+static char *modeclassname;
+static Bool remote;
+
+#if HAVE_DIRENT_H
+static struct dirent ***images_list;
+int num_list;
+struct dirent **image_list;
+char filename_r[MAXNAMLEN];
+char directory_r[DIRBUF];
+
+#endif
+
+static XrmOptionDescRec genTable[] =
+{
+ {"-mode", ".mode", XrmoptionSepArg, (caddr_t) NULL},
+ {"-nolock", ".nolock", XrmoptionNoArg, (caddr_t) "on"},
+ {"+nolock", ".nolock", XrmoptionNoArg, (caddr_t) "off"},
+ {"-inwindow", ".inwindow", XrmoptionNoArg, (caddr_t) "on"},
+ {"+inwindow", ".inwindow", XrmoptionNoArg, (caddr_t) "off"},
+ {"-inroot", ".inroot", XrmoptionNoArg, (caddr_t) "on"},
+ {"+inroot", ".inroot", XrmoptionNoArg, (caddr_t) "off"},
+ {"-remote", ".remote", XrmoptionNoArg, (caddr_t) "on"},
+ {"+remote", ".remote", XrmoptionNoArg, (caddr_t) "off"},
+ {"-mono", ".mono", XrmoptionNoArg, (caddr_t) "on"},
+ {"+mono", ".mono", XrmoptionNoArg, (caddr_t) "off"},
+ {"-allowaccess", ".allowaccess", XrmoptionNoArg, (caddr_t) "on"},
+ {"+allowaccess", ".allowaccess", XrmoptionNoArg, (caddr_t) "off"},
+ {"-allowroot", ".allowroot", XrmoptionNoArg, (caddr_t) "on"},
+ {"+allowroot", ".allowroot", XrmoptionNoArg, (caddr_t) "off"},
+ {"-debug", ".debug", XrmoptionNoArg, (caddr_t) "on"},
+ {"+debug", ".debug", XrmoptionNoArg, (caddr_t) "off"},
+ {"-echokeys", ".echokeys", XrmoptionNoArg, (caddr_t) "on"},
+ {"+echokeys", ".echokeys", XrmoptionNoArg, (caddr_t) "off"},
+ {"-enablesaver", ".enablesaver", XrmoptionNoArg, (caddr_t) "on"},
+ {"+enablesaver", ".enablesaver", XrmoptionNoArg, (caddr_t) "off"},
+ {"-fullrandom", ".fullrandom", XrmoptionNoArg, (caddr_t) "on"},
+ {"+fullrandom", ".fullrandom", XrmoptionNoArg, (caddr_t) "off"},
+ {"-grabmouse", ".grabmouse", XrmoptionNoArg, (caddr_t) "on"},
+ {"+grabmouse", ".grabmouse", XrmoptionNoArg, (caddr_t) "off"},
+ {"-grabserver", ".grabserver", XrmoptionNoArg, (caddr_t) "on"},
+ {"+grabserver", ".grabserver", XrmoptionNoArg, (caddr_t) "off"},
+ {"-install", ".install", XrmoptionNoArg, (caddr_t) "on"},
+ {"+install", ".install", XrmoptionNoArg, (caddr_t) "off"},
+ {"-sound", ".sound", XrmoptionNoArg, (caddr_t) "on"},
+ {"+sound", ".sound", XrmoptionNoArg, (caddr_t) "off"},
+ {"-timeelapsed", ".timeelapsed", XrmoptionNoArg, (caddr_t) "on"},
+ {"+timeelapsed", ".timeelapsed", XrmoptionNoArg, (caddr_t) "off"},
+ {"-usefirst", ".usefirst", XrmoptionNoArg, (caddr_t) "on"},
+ {"+usefirst", ".usefirst", XrmoptionNoArg, (caddr_t) "off"},
+ {"-verbose", ".verbose", XrmoptionNoArg, (caddr_t) "on"},
+ {"+verbose", ".verbose", XrmoptionNoArg, (caddr_t) "off"},
+ {"-nice", ".nice", XrmoptionSepArg, (caddr_t) NULL},
+ {"-lockdelay", ".lockdelay", XrmoptionSepArg, (caddr_t) NULL},
+ {"-timeout", ".timeout", XrmoptionSepArg, (caddr_t) NULL},
+ {"-font", ".font", XrmoptionSepArg, (caddr_t) NULL},
+ {"-msgfont", ".msgfont", XrmoptionSepArg, (caddr_t) NULL},
+ {"-bg", ".background", XrmoptionSepArg, (caddr_t) NULL},
+ {"-fg", ".foreground", XrmoptionSepArg, (caddr_t) NULL},
+ {"-background", ".background", XrmoptionSepArg, (caddr_t) NULL},
+ {"-foreground", ".foreground", XrmoptionSepArg, (caddr_t) NULL},
+ {"-username", ".username", XrmoptionSepArg, (caddr_t) NULL},
+ {"-password", ".password", XrmoptionSepArg, (caddr_t) NULL},
+ {"-info", ".info", XrmoptionSepArg, (caddr_t) NULL},
+ {"-validate", ".validate", XrmoptionSepArg, (caddr_t) NULL},
+ {"-invalid", ".invalid", XrmoptionSepArg, (caddr_t) NULL},
+ {"-geometry", ".geometry", XrmoptionSepArg, (caddr_t) NULL},
+ {"-icongeometry", ".icongeometry", XrmoptionSepArg, (caddr_t) NULL},
+
+ {"-wireframe", ".wireframe", XrmoptionNoArg, (caddr_t) "on"},
+ {"+wireframe", ".wireframe", XrmoptionNoArg, (caddr_t) "off"},
+
+ {"-use3d", ".use3d", XrmoptionNoArg, (caddr_t) "on"},
+ {"+use3d", ".use3d", XrmoptionNoArg, (caddr_t) "off"},
+ {"-delta3d", ".delta3d", XrmoptionSepArg, (caddr_t) NULL},
+ {"-none3d", ".none3d", XrmoptionSepArg, (caddr_t) NULL},
+ {"-right3d", ".right3d", XrmoptionSepArg, (caddr_t) NULL},
+ {"-left3d", ".left3d", XrmoptionSepArg, (caddr_t) NULL},
+ {"-both3d", ".both3d", XrmoptionSepArg, (caddr_t) NULL},
+
+ /* For modes with text, marquee & nose */
+ {"-program", ".program", XrmoptionSepArg, (caddr_t) NULL},
+ {"-messagesfile", ".messagesfile", XrmoptionSepArg, (caddr_t) NULL},
+ {"-messagefile", ".messagefile", XrmoptionSepArg, (caddr_t) NULL},
+ {"-message", ".message", XrmoptionSepArg, (caddr_t) NULL},
+ {"-mfont", ".mfont", XrmoptionSepArg, (caddr_t) NULL},
+ /* For modes with images, image & puzzle */
+ {"-imagefile", ".imagefile", XrmoptionSepArg, (caddr_t) NULL},
+ /* For automata modes ant & demon */
+ {"-neighbors", ".neighbors", XrmoptionSepArg, (caddr_t) NULL},
+
+#ifdef USE_XLOCKRC
+ {"-cpasswd", ".cpasswd", XrmoptionSepArg, (caddr_t) NULL},
+#endif
+#ifdef USE_AUTO_LOGOUT
+ {"-logoutAuto", ".logoutAuto", XrmoptionSepArg, (caddr_t) NULL},
+#endif
+#ifdef USE_BUTTON_LOGOUT
+ {"-logoutButton", ".logoutButton", XrmoptionSepArg, (caddr_t) NULL},
+{"-logoutButtonLabel", ".logoutButtonLabel", XrmoptionSepArg, (caddr_t) NULL},
+ {"-logoutButtonHelp", ".logoutButtonHelp", XrmoptionSepArg, (caddr_t) NULL},
+ {"-logoutFailedString", ".logoutFailedString", XrmoptionSepArg, (caddr_t) NULL},
+#endif
+#ifdef USE_DTSAVER
+ {"-dtsaver", ".dtsaver", XrmoptionNoArg, (caddr_t) "on"},
+ {"+dtsaver", ".dtsaver", XrmoptionNoArg, (caddr_t) "off"},
+#endif
+#ifdef USE_SOUND
+ {"-locksound", ".locksound", XrmoptionSepArg, (caddr_t) NULL},
+ {"-infosound", ".infosound", XrmoptionSepArg, (caddr_t) NULL},
+ {"-validsound", ".validsound", XrmoptionSepArg, (caddr_t) NULL},
+ {"-invalidsound", ".invalidsound", XrmoptionSepArg, (caddr_t) NULL},
+#endif
+
+};
+
+#define genEntries (sizeof genTable / sizeof genTable[0])
+
+static XrmOptionDescRec modeTable[] =
+{
+ {"-delay", "*delay", XrmoptionSepArg, (caddr_t) NULL},
+ {"-batchcount", "*batchcount", XrmoptionSepArg, (caddr_t) NULL},
+ {"-cycles", "*cycles", XrmoptionSepArg, (caddr_t) NULL},
+ {"-size", "*size", XrmoptionSepArg, (caddr_t) NULL},
+ {"-saturation", "*saturation", XrmoptionSepArg, (caddr_t) NULL},
+};
+
+#define modeEntries (sizeof modeTable / sizeof modeTable[0])
+
+static XrmOptionDescRec cmdlineTable[] =
+{
+ {"-display", ".display", XrmoptionSepArg, (caddr_t) NULL},
+#ifdef USE_HACKERS
+ {"-visual", ".visual", XrmoptionSepArg, (caddr_t) NULL},
+#endif
+ {"-nolock", ".nolock", XrmoptionNoArg, (caddr_t) "on"},
+ {"+nolock", ".nolock", XrmoptionNoArg, (caddr_t) "off"},
+ {"-remote", ".remote", XrmoptionNoArg, (caddr_t) "on"},
+ {"+remote", ".remote", XrmoptionNoArg, (caddr_t) "off"},
+ {"-inwindow", ".inwindow", XrmoptionNoArg, (caddr_t) "on"},
+ {"+inwindow", ".inwindow", XrmoptionNoArg, (caddr_t) "off"},
+ {"-inroot", ".inroot", XrmoptionNoArg, (caddr_t) "on"},
+ {"+inroot", ".inroot", XrmoptionNoArg, (caddr_t) "off"},
+#ifdef USE_DTSAVER
+ {"-dtsaver", ".dtsaver", XrmoptionNoArg, (caddr_t) "on"},
+ {"+dtsaver", ".dtsaver", XrmoptionNoArg, (caddr_t) "off"},
+#endif
+ {"-xrm", NULL, XrmoptionResArg, (caddr_t) NULL}
+};
+
+#define cmdlineEntries (sizeof cmdlineTable / sizeof cmdlineTable[0])
+
+static XrmOptionDescRec nameTable[] =
+{
+ {"-name", ".name", XrmoptionSepArg, (caddr_t) NULL},
+};
+
+static OptionStruct opDesc[] =
+{
+ {"-help", "print out this message to standard output"},
+ {"-version", "print version number (if >= 4.00) to standard output"},
+ {"-resources", "print default resource file to standard output"},
+ {"-display displayname", "X server to contact"},
+#ifdef USE_HACKERS
+ {"-visual visualname", "X visual to use"},
+#endif
+{"-name resourcename", "class name to use for resources (default is XLock)"},
+ {"-delay usecs", "microsecond delay between screen updates"},
+ {"-batchcount num", "number of things per batch"},
+ {"-cycles num", "number of cycles per batch"},
+ {"-size num", "size of a unit in a mode, default is 0"},
+ {"-saturation value", "saturation of color ramp"},
+ {"-/+nolock", "turn on/off no password required"},
+ {"-/+inwindow", "turn on/off making xlock run in a window"},
+ {"-/+inroot", "turn on/off making xlock run in the root window"},
+ {"-/+remote", "turn on/off remote host access"},
+ {"-/+mono", "turn on/off monochrome override"},
+ {"-/+allowaccess", "turn on/off allow new clients to connect"},
+#ifndef ALWAYS_ALLOW_ROOT
+ {"-/+allowroot", "turn on/off allow root password to unlock"},
+#else
+ {"-/+allowroot", "turn on/off allow root password to unlock (off ignored)"},
+#endif
+ {"-/+debug", "whether to use debug xlock (yes/no)"},
+ {"-/+echokeys", "turn on/off echo '?' for each password key"},
+ {"-/+enablesaver", "turn on/off enable X server screen saver"},
+ {"-/+grabmouse", "turn on/off grabbing of mouse and keyboard"},
+ {"-/+grabserver", "turn on/off grabbing of server"},
+ {"-/+install", "whether to use private colormap if needed (yes/no)"},
+ {"-/+fullrandom", "turn on/off full random choice of mode-options"},
+ {"-/+sound", "whether to use sound if configured for it (yes/no)"},
+ {"-/+timeelapsed", "turn on/off clock"},
+ {"-/+usefirst", "turn on/off using the first char typed in password"},
+ {"-/+verbose", "turn on/off verbosity"},
+ {"-nice level", "nice level for xlock process"},
+ {"-lockdelay seconds", "number of seconds until lock"},
+ {"-timeout seconds", "number of seconds before password times out"},
+ {"-font fontname", "font to use for password prompt"},
+ {"-msgfont fontname", "font to use for message"},
+ {"-bg color", "background color to use for password prompt"},
+ {"-fg color", "foreground color to use for password prompt"},
+ {"-background color", "background color to use for password prompt"},
+ {"-foreground color", "foreground color to use for password prompt"},
+ {"-username string", "text string to use for Name prompt"},
+ {"-password string", "text string to use for Password prompt"},
+ {"-info string", "text string to use for instructions"},
+ {"-validate string", "text string to use for validating password message"},
+ {"-invalid string", "text string to use for invalid password message"},
+ {"-geometry geom", "geometry for non-full screen lock"},
+ {"-icongeometry geom", "geometry for password window (location ignored)"},
+
+ {"-/+wireframe", "turn on/off wireframe"},
+
+ {"-/+use3d", "turn on/off 3d view"},
+ {"-delta3d value", "space between the center of your 2 eyes for 3d mode"},
+ {"-none3d color", "color to be used for null in 3d mode"},
+ {"-right3d color", "color to be used for the right eye in 3d mode"},
+ {"-left3d color", "color to be used for the left eye in 3d mode"},
+ {"-both3d color", "color to be used overlap in 3d mode"},
+
+ /* For modes with text, marquee & nose */
+ {"-program programname", "program to get messages from, usually fortune"},
+ {"-messagesfile formatted-filename", "formatted file message to say"},
+ {"-messagefile filename", "file message to say"},
+ {"-message string", "message to say"},
+ {"-mfont mode-fontname", "font for a specific mode"},
+ /* For modes with image files, image & puzzle */
+ {"-imagefile filename", "image file"},
+ /* For modes with automata modes ant & demon */
+ {"-neighbors num", "squares 4, hexagons 6, random otherwise"},
+
+#ifdef USE_XLOCKRC
+ {"-cpasswd crypted-password", "text string of encrypted password"},
+#endif
+#ifdef USE_AUTO_LOGOUT
+ {"-logoutAuto minutes", "number of minutes until auto logout (not more than forced auto logout time)"},
+#endif
+#ifdef USE_BUTTON_LOGOUT
+ {"-logoutButton minutes", "number of minutes until logout button appears (not more than forced button time)"},
+ {"-logoutButtonLabel string", "text string to use inside logout button"},
+ {"-logoutButtonHelp string", "text string to use for logout button help"},
+ {"-logoutFailedString string", "text string to use for failed logout attempts"},
+#endif
+#ifdef USE_DTSAVER
+ {"-/+dtsaver", "turn on/off CDE Saver Mode"},
+#endif
+#ifdef USE_SOUND
+ {"-locksound string", "sound to use at locktime"},
+ {"-infosound string", "sound to use for information"},
+ {"-validsound string", "sound to use when password is valid"},
+ {"-invalidsound string", "sound to use when password is invalid"},
+#endif
+};
+
+#define opDescEntries (sizeof opDesc / sizeof opDesc[0])
+
+int delay;
+int batchcount;
+int cycles;
+int size;
+float saturation;
+
+Bool nolock;
+Bool inwindow;
+Bool inroot;
+Bool mono;
+
+Bool allowaccess;
+
+#ifdef ALWAYS_ALLOW_ROOT
+Bool allowroot = 1;
+
+#else
+Bool allowroot;
+
+#endif
+Bool debug;
+Bool echokeys;
+Bool enablesaver;
+Bool fullrandom;
+Bool grabmouse;
+Bool grabserver;
+Bool install;
+Bool sound;
+Bool timeelapsed;
+Bool usefirst;
+Bool verbose;
+
+static char *visualname;
+int VisualClassWanted;
+
+int nicelevel;
+int lockdelay;
+int timeout;
+
+char *fontname;
+char *messagefont;
+char *background;
+char *foreground;
+char *text_name;
+char *text_pass;
+char *text_info;
+char *text_valid;
+char *text_invalid;
+char *geometry;
+char *icongeometry;
+
+Bool wireframe;
+
+Bool use3d;
+float delta3d;
+char *none3d;
+char *right3d;
+char *left3d;
+char *both3d;
+
+#ifdef USE_XLOCKRC
+char *cpasswd;
+
+#endif
+#ifdef USE_AUTO_LOGOUT
+int logoutAuto;
+
+#endif
+#ifdef USE_BUTTON_LOGOUT
+int enable_button = 1;
+
+int logoutButton;
+char *logoutButtonLabel;
+char *logoutButtonHelp;
+char *logoutFailedString;
+
+#endif
+#ifdef USE_DTSAVER
+Bool dtsaver;
+
+#endif
+#ifdef USE_SOUND
+char *locksound;
+char *infosound;
+char *validsound;
+char *invalidsound;
+
+#endif
+
+static argtype genvars[] =
+{
+ {(caddr_t *) & allowaccess, "allowaccess", "AllowAccess", "off", t_Bool},
+#ifndef ALWAYS_ALLOW_ROOT
+ {(caddr_t *) & allowroot, "allowroot", "AllowRoot", "off", t_Bool},
+#endif
+ {(caddr_t *) & debug, "debug", "Debug", "off", t_Bool},
+ {(caddr_t *) & echokeys, "echokeys", "EchoKeys", "off", t_Bool},
+ {(caddr_t *) & enablesaver, "enablesaver", "EnableSaver", "off", t_Bool},
+ {(caddr_t *) & fullrandom, "fullrandom", "FullRandom", "off", t_Bool},
+ {(caddr_t *) & grabmouse, "grabmouse", "GrabMouse", "on", t_Bool},
+ {(caddr_t *) & grabserver, "grabserver", "GrabServer", "off", t_Bool},
+ {(caddr_t *) & install, "install", "Install", "on", t_Bool},
+ {(caddr_t *) & sound, "sound", "Sound", "off", t_Bool},
+ {(caddr_t *) & timeelapsed, "timeelapsed", "TimeElapsed", "off", t_Bool},
+ {(caddr_t *) & usefirst, "usefirst", "Usefirst", "off", t_Bool},
+ {(caddr_t *) & verbose, "verbose", "Verbose", "off", t_Bool},
+ {(caddr_t *) & visualname, "visual", "Visual", "", t_String},
+
+ {(caddr_t *) & nicelevel, "nice", "Nice", DEF_NICE, t_Int},
+ {(caddr_t *) & lockdelay, "lockdelay", "LockDelay", DEF_LOCKDELAY, t_Int},
+ {(caddr_t *) & timeout, "timeout", "Timeout", DEF_TIMEOUT, t_Int},
+ {(caddr_t *) & fontname, "font", "Font", DEF_FONT, t_String},
+ {(caddr_t *) & messagefont, "msgfont", "MsgFont", DEF_MSGFONT, t_String},
+ {(caddr_t *) & background, "background", "Background", DEF_BG, t_String},
+ {(caddr_t *) & foreground, "foreground", "Foreground", DEF_FG, t_String},
+ {(caddr_t *) & text_name, "username", "Username", DEF_NAME, t_String},
+ {(caddr_t *) & text_pass, "password", "Password", DEF_PASS, t_String},
+ {(caddr_t *) & text_info, "info", "Info", DEF_INFO, t_String},
+ {(caddr_t *) & text_valid, "validate", "Validate", DEF_VALID, t_String},
+ {(caddr_t *) & text_invalid, "invalid", "Invalid", DEF_INVALID, t_String},
+ {(caddr_t *) & geometry, "geometry", "Geometry", DEF_GEOMETRY, t_String},
+ {(caddr_t *) & icongeometry, "icongeometry", "IconGeometry", DEF_ICONGEOMETRY, t_String},
+
+ {(caddr_t *) & wireframe, "wireframe", "WireFrame", "off", t_Bool},
+
+ {(caddr_t *) & use3d, "use3d", "Use3D", "off", t_Bool},
+ {(caddr_t *) & delta3d, "delta3d", "Delta3D", DEF_DELTA3D, t_Float},
+ {(caddr_t *) & none3d, "none3d", "None3D", DEF_NONE3D, t_String},
+ {(caddr_t *) & right3d, "right3d", "Right3D", DEF_RIGHT3D, t_String},
+ {(caddr_t *) & left3d, "left3d", "Left3D", DEF_LEFT3D, t_String},
+ {(caddr_t *) & both3d, "both3d", "Both3D", DEF_BOTH3D, t_String},
+
+ {(caddr_t *) & program, "program", "Program", DEF_PROGRAM, t_String},
+ {(caddr_t *) & messagesfile, "messagesfile", "Messagesfile", DEF_MESSAGESFILE, t_String},
+ {(caddr_t *) & messagefile, "messagefile", "Messagefile", DEF_MESSAGEFILE, t_String},
+ {(caddr_t *) & message, "message", "Message", DEF_MESSAGE, t_String},
+ {(caddr_t *) & mfont, "mfont", "MFont", DEF_MFONT, t_String},
+{(caddr_t *) & imagefile, "imagefile", "Imagefile", DEF_IMAGEFILE, t_String},
+ {(caddr_t *) & neighbors, "neighbors", "Neighbors", DEF_NEIGHBORS, t_Int},
+
+#ifdef USE_XLOCKRC
+ {(caddr_t *) & cpasswd, "cpasswd", "cpasswd", "", t_String},
+#endif
+#ifdef USE_AUTO_LOGOUT
+ {(caddr_t *) & logoutAuto, "logoutAuto", "logoutAuto", DEF_AUTO_LOGOUT, t_Int},
+#endif
+#ifdef USE_BUTTON_LOGOUT
+ {(caddr_t *) & logoutButton, "logoutButton", "LogoutButton", DEF_BUTTON_LOGOUT, t_Int},
+ {(caddr_t *) & logoutButtonLabel, "logoutButtonLabel",
+ "LogoutButtonLabel", DEF_BTN_LABEL, t_String},
+ {(caddr_t *) & logoutButtonHelp, "logoutButtonHelp",
+ "LogoutButtonHelp", DEF_BTN_HELP, t_String},
+ {(caddr_t *) & logoutFailedString, "logoutFailedString",
+ "LogoutFailedString", DEF_FAIL, t_String},
+#endif
+#ifdef USE_SOUND
+{(caddr_t *) & locksound, "locksound", "LockSound", DEF_LOCKSOUND, t_String},
+{(caddr_t *) & infosound, "infosound", "InfoSound", DEF_INFOSOUND, t_String},
+ {(caddr_t *) & validsound, "validsound", "ValidSound", DEF_VALIDSOUND, t_String},
+ {(caddr_t *) & invalidsound, "invalidsound", "InvalidSound", DEF_INVALIDSOUND, t_String},
+#endif
+#if 0
+ /* These resources require special handling. They must be examined
+ * before the display is opened. They are evaluated by individual
+ * calls to GetResource(), so they should not be evaluated again here.
+ * For example, X-terminals need this special treatment.
+ */
+ {(caddr_t *) & nolock, "nolock", "NoLock", "off", t_Bool},
+ {(caddr_t *) & inwindow, "inwindow", "InWindow", "off", t_Bool},
+ {(caddr_t *) & inroot, "inroot", "InRoot", "off", t_Bool},
+ {(caddr_t *) & remote, "remote", "Remote", "off", t_Bool},
+ {(caddr_t *) & mono, "mono", "Mono", "off", t_Bool},
+#endif
+};
+
+#define NGENARGS (sizeof genvars / sizeof genvars[0])
+
+static argtype modevars[] =
+{
+ {(caddr_t *) & delay, "delay", "Delay", DEF_DELAY, t_Int},
+{(caddr_t *) & batchcount, "batchcount", "BatchCount", DEF_BATCHCOUNT, t_Int},
+ {(caddr_t *) & cycles, "cycles", "Cycles", DEF_CYCLES, t_Int},
+ {(caddr_t *) & size, "size", "Size", DEF_SIZE, t_Int},
+ {(caddr_t *) & saturation, "saturation", "Saturation", DEF_SATURATION, t_Float},
+};
+
+#define NMODEARGS (sizeof modevars / sizeof modevars[0])
+
+static int modevaroffs[NMODEARGS] =
+{
+ offsetof(LockStruct, def_delay),
+ offsetof(LockStruct, def_batchcount),
+ offsetof(LockStruct, def_cycles),
+ offsetof(LockStruct, def_size),
+ offsetof(LockStruct, def_saturation)
+};
+
+#ifdef VMS
+static char *
+stripname(char *string)
+{
+ char *characters;
+
+ while (string && *string++ != ']');
+ characters = string;
+ while (characters)
+ if (*characters == '.') {
+ *characters = '\0';
+ return string;
+ } else
+ characters++;
+ return string;
+}
+#endif
+
+static void
+Syntax(char *badOption)
+{
+ int col, len, i;
+
+ (void) fprintf(stderr, "%s: bad command line option \"%s\"\n\n",
+ ProgramName, badOption);
+
+ (void) fprintf(stderr, "usage: %s", ProgramName);
+ col = 8 + strlen(ProgramName);
+ for (i = 0; i < (int) opDescEntries; i++) {
+ len = 3 + strlen(opDesc[i].opt); /* space [ string ] */
+ if (col + len > 79) {
+ (void) fprintf(stderr, "\n "); /* 3 spaces */
+ col = 3;
+ }
+ (void) fprintf(stderr, " [%s]", opDesc[i].opt);
+ col += len;
+ }
+
+ len = 8 + strlen(LockProcs[0].cmdline_arg);
+ if (col + len > 79) {
+ (void) fprintf(stderr, "\n "); /* 3 spaces */
+ col = 3;
+ }
+ (void) fprintf(stderr, " [-mode %s", LockProcs[0].cmdline_arg);
+ col += len;
+ for (i = 1; i < numprocs; i++) {
+ len = 3 + strlen(LockProcs[i].cmdline_arg);
+ if (col + len > 79) {
+ (void) fprintf(stderr, "\n "); /* 3 spaces */
+ col = 3;
+ }
+ (void) fprintf(stderr, " | %s", LockProcs[i].cmdline_arg);
+ col += len;
+ }
+ (void) fprintf(stderr, "]\n");
+
+ (void) fprintf(stderr, "\nType %s -help for a full description.\n\n",
+ ProgramName);
+ exit(1);
+}
+
+static void
+Help(void)
+{
+ int i;
+
+ (void) printf("usage:\n %s [-options ...]\n\n", ProgramName);
+ (void) printf("where options include:\n");
+ for (i = 0; i < (int) opDescEntries; i++) {
+ (void) printf(" %-28s %s\n", opDesc[i].opt, opDesc[i].desc);
+ }
+
+ (void) printf(" %-28s %s\n", "-mode mode", "animation mode");
+ (void) printf(" where mode is one of:\n");
+ for (i = 0; i < numprocs; i++) {
+ int j;
+
+ (void) printf(" %-23s %s\n",
+ LockProcs[i].cmdline_arg, LockProcs[i].desc);
+ for (j = 0; j < LockProcs[i].msopt->numvarsdesc; j++)
+ (void) printf(" %-23s %s\n",
+ LockProcs[i].msopt->desc[j].opt, LockProcs[i].msopt->desc[j].desc);
+ }
+ (void) printf("\n");
+
+ exit(0);
+}
+
+static void
+Version(void)
+{
+ (void) printf("XLock version %s\n", VERSION);
+ exit(0);
+}
+
+static void
+DumpResources(void)
+{
+ int i, j;
+
+ (void) printf("%s.mode: %s\n", classname, DEF_MODE);
+
+ for (i = 0; i < (int) NGENARGS; i++)
+ (void) printf("%s.%s: %s\n",
+ classname, genvars[i].name, genvars[i].def);
+
+ for (i = 0; i < numprocs; i++) {
+ (void) printf("%s.%s.%s: %d\n", classname, LockProcs[i].cmdline_arg,
+ "delay", LockProcs[i].def_delay);
+ (void) printf("%s.%s.%s: %d\n", classname, LockProcs[i].cmdline_arg,
+ "batchcount", LockProcs[i].def_batchcount);
+ (void) printf("%s.%s.%s: %d\n", classname, LockProcs[i].cmdline_arg,
+ "cycles", LockProcs[i].def_cycles);
+ (void) printf("%s.%s.%s: %d\n", classname, LockProcs[i].cmdline_arg,
+ "size", LockProcs[i].def_size);
+ (void) printf("%s.%s.%s: %g\n", classname, LockProcs[i].cmdline_arg,
+ "saturation", LockProcs[i].def_saturation);
+ for (j = 0; j < LockProcs[i].msopt->numvarsdesc; j++)
+ (void) printf("%s.%s.%s: %s\n", classname, LockProcs[i].cmdline_arg,
+ LockProcs[i].msopt->vars[j].name,
+ LockProcs[i].msopt->vars[j].def);
+ }
+ exit(0);
+}
+
+
+static void
+LowerString(char *s)
+{
+
+ while (*s) {
+ if (isupper(*s))
+ *s += ('a' - 'A');
+ s++;
+ }
+}
+
+static void
+GetResource(XrmDatabase database, char *parentname, char *parentclassname,
+ char *name, char *classname, int valueType, char *def, caddr_t * valuep)
+{
+ char *type;
+ XrmValue value;
+ char *string;
+ char buffer[1024];
+ char *fullname;
+ char *fullclassname;
+ int len;
+
+ fullname = (char *) malloc(strlen(parentname) + strlen(name) + 2);
+ fullclassname = (char *) malloc(strlen(parentclassname) +
+ strlen(classname) + 2);
+
+ (void) sprintf(fullname, "%s.%s", parentname, name);
+ (void) sprintf(fullclassname, "%s.%s", parentclassname, classname);
+ if (XrmGetResource(database, fullname, fullclassname, &type, &value)) {
+ string = value.addr;
+ len = value.size - 1;
+ } else {
+ string = def;
+ if (string == NULL) {
+ *valuep = NULL;
+ return;
+ }
+ len = strlen(string);
+ }
+ (void) free((void *) fullname);
+ (void) free((void *) fullclassname);
+
+ (void) strncpy(buffer, string, sizeof (buffer));
+ buffer[sizeof (buffer) - 1] = '\0';
+
+ switch (valueType) {
+ case t_String:
+ {
+/*-
+ * PURIFY 4.0.1 on Solaris 2 and on SunOS4 reports a 1 byte memory leak on
+ * the following line. */
+ char *s = (char *) malloc(len + 1);
+
+ if (s == (char *) NULL) {
+ char *buf = (char *) malloc(strlen(ProgramName) + 80);
+
+ (void) sprintf(buf,
+ "%s: GetResource - could not allocate memory", ProgramName);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+ (void) strncpy(s, string, len);
+ s[len] = '\0';
+ *((char **) valuep) = s;
+ }
+ break;
+ case t_Bool:
+ LowerString(buffer);
+ *((int *) valuep) = (!strcmp(buffer, "true") ||
+ !strcmp(buffer, "on") ||
+ !strcmp(buffer, "enabled") ||
+ !strcmp(buffer, "yes")) ? True : False;
+ break;
+ case t_Int:
+ *((int *) valuep) = atoi(buffer);
+ break;
+ case t_Float:
+ *((float *) valuep) = (float) atof(buffer);
+ break;
+ }
+}
+
+
+static XrmDatabase
+parsefilepath(char *xfilesearchpath, char *TypeName, char *ClassName)
+{
+ XrmDatabase database = NULL;
+ char *appdefaults;
+ char *src;
+ char *dst;
+ int i, maxlen;
+
+ i = maxlen = 0;
+ for (src = xfilesearchpath; *src != '\0'; src++) {
+ if (*src == '%') {
+ src++;
+ switch (*src) {
+ case '%':
+ case ':':
+ i++;
+ break;
+ case 'T':
+ i += strlen(TypeName);
+ break;
+ case 'N':
+ i += strlen(ClassName);
+ break;
+ default:
+ break;
+ }
+#ifdef VMS
+ } else if (*src == '#') { /* Colons required in VMS use # */
+#else
+ } else if (*src == ':') {
+#endif
+ if (i > maxlen)
+ maxlen = i;
+ i = 0;
+ } else
+ i++;
+ }
+ if (i > maxlen)
+ maxlen = i;
+
+ /* appdefaults will be at most this long */
+ appdefaults = (char *) malloc(maxlen + 1);
+
+ src = xfilesearchpath;
+ dst = appdefaults;
+ *dst = '\0';
+ for (;;) {
+ if (*src == '%') {
+ src++;
+ switch (*src) {
+ case '%':
+ case ':':
+ *dst++ = *src++;
+ *dst = '\0';
+ break;
+ case 'T':
+ (void) strcat(dst, TypeName);
+ src++;
+ dst += strlen(TypeName);
+ break;
+ case 'N':
+ (void) strcat(dst, ClassName);
+ src++;
+ dst += strlen(ClassName);
+ break;
+ case 'S':
+ src++;
+ break;
+ default:
+ src++;
+ break;
+ }
+#ifdef VMS
+ } else if (*src == '#') { /* Colons required in VMS use # */
+#else
+ } else if (*src == ':') {
+#endif
+ database = XrmGetFileDatabase(appdefaults);
+ if (database == NULL) {
+ dst = appdefaults;
+ src++;
+ } else
+ break;
+ } else if (*src == '\0') {
+/* PURIFY 4.0.1 on Solaris 2 reports an uninitialized memory read on the next
+ * line. PURIFY 4.0.1 on SunOS4 reports this also when using X11R5, but not
+ * with OpenWindow 3.0 (X11R4 based). */
+ database = XrmGetFileDatabase(appdefaults);
+ break;
+ } else {
+ *dst++ = *src++;
+ *dst = '\0';
+ }
+ }
+ (void) free((void *) appdefaults);
+ return database;
+}
+
+#ifdef VMS
+/*-
+ * FUNCTIONAL DESCRIPTION:
+ * int get_info (chan, item, ret_str, ret_len)
+ * Fetch a single characteristics from the pseudo-workstation
+ * device and return the information.
+ * (Taken and modified from the v5.4 fiche. PPL/SG 2/10/91
+ * FORMAL PARAMETERS:
+ * chan: the device channel
+ * item: the characteristic to show
+ * ret_str: str pointer to information
+ * ret_len: length of above string
+ * IMPLICIT INPUTS:
+ * none
+ * IMPLICIT OUTPUTS:
+ * none
+ * COMPLETION CODES:
+ * errors returned by SYS$QIO
+ * SIDE EFFECTS:
+ * none
+ * Hacked from Steve Garrett's xservername (as posted to INFO-VAX)
+ */
+
+int
+get_info(unsigned long chan, unsigned long item,
+ char *ret_str, unsigned long *ret_len)
+{
+ unsigned long iosb[2];
+ int status;
+ char itembuf[BUFSIZE];
+ struct dsc$descriptor itemval;
+
+ itemval.dsc$w_length = BUFSIZE;
+ itemval.dsc$b_dtype = 0;
+ itemval.dsc$b_class = 0;
+ itemval.dsc$a_pointer = &itembuf[0];
+
+ status = sys$qiow(0, chan, IO$_SENSEMODE | IO$M_WS_DISPLAY, &iosb, 0, 0,
+ itemval.dsc$a_pointer,
+ itemval.dsc$w_length,
+ item, 0, 0, 0);
+ if (status != SS$_NORMAL)
+ return (status);
+ if (iosb[0] != SS$_NORMAL)
+ return (iosb[0]);
+
+ itemval.dsc$w_length = iosb[1];
+ *ret_len = iosb[1];
+ itembuf[*ret_len] = 0;
+ (void) strcpy(ret_str, &itembuf[0]);
+
+ return (status);
+}
+
+
+/* routine that will return descripter of asciz string */
+
+static int
+descr(char *name)
+{
+ static $dscp(d1, 0, 0);
+ static $dscp(d2, 0, 0);
+ static $dscp(d3, 0, 0);
+ static $dscp(d4, 0, 0);
+ static $dscp(d5, 0, 0);
+ static $dscp(d6, 0, 0);
+ static dsc *tbl[] =
+ {&d1, &d2, &d3, &d4, &d5, &d6};
+ static int didx = 0;
+
+ if (didx == 6)
+ didx = 0;
+
+ tbl[didx]->len = strlen(name);
+ tbl[didx]->ptr = name;
+
+ return (int) tbl[didx++];
+}
+
+#endif
+
+static void
+open_display(void)
+{
+ char *buf;
+
+ if (!(dsp = XOpenDisplay(displayname))) {
+ buf = (char *) malloc(strlen(ProgramName) + strlen(displayname) + 80);
+ (void) sprintf(buf,
+ "%s: unable to open display %s.\n", ProgramName, displayname);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+ displayname = DisplayString(dsp);
+
+ /*
+ * only restrict access to other displays if we are locking and if the
+ * Remote resource is not set.
+ */
+ if (nolock || inwindow || inroot)
+ remote = True;
+
+#ifdef VMS
+ if (!remote && ((displayname[0] == '_') |
+ ((displayname[0] == 'W') &
+ (displayname[1] == 'S') &
+ (displayname[2] == 'A')))) { /* this implies a v5.4 system. The return
+ value is a device name, which must be
+ interrogated to find the real information */
+ unsigned long chan;
+ unsigned int status;
+ unsigned long len;
+ char server_transport[100];
+
+ status = sys$assign(descr(displayname), &chan, 0, 0);
+ if (!(status & 1))
+ displayname = " ";
+ else {
+ status = get_info(chan, DECW$C_WS_DSP_TRANSPORT,
+ server_transport, &len);
+ if (!(status & 1))
+ exit(status);
+
+ if (strcmp(server_transport, "LOCAL")) {
+ strcat(displayname, "'s display via ");
+ strncat(displayname, server_transport, len);
+ buf = (char *) malloc(strlen(ProgramName) + strlen(displayname) + 80);
+ (void) sprintf(buf,
+ "%s: can not lock %s\n", ProgramName, displayname);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+ }
+ } else {
+#endif /* VMS */
+
+ if (displayname != NULL) {
+ char *colon = (char *) strchr(displayname, ':');
+ int n = colon - displayname;
+
+ if (colon == NULL) {
+ buf = (char *) malloc(strlen(ProgramName) +
+ strlen(displayname) + 80);
+ (void) sprintf(buf,
+ "%s: Malformed -display argument, \"%s\"\n",
+ ProgramName, displayname);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+ if (!remote && n
+ && strncmp(displayname, "unix", n)
+ && strncmp(displayname, "localhost", n)) {
+ char hostname[MAXHOSTNAMELEN];
+ struct hostent *host;
+ char **hp;
+ int badhost = 1;
+
+#if defined(__cplusplus) || defined(c_plusplus) /* !__bsdi__ */
+#if HAVE_GETHOSTNAME
+ extern int gethostname(char *, size_t);
+
+#else
+#define gethostname(name,namelen) sysinfo(SI_HOSTNAME,name,namelen)
+#endif
+#endif
+
+ if (gethostname(hostname, MAXHOSTNAMELEN)) {
+ buf = (char *) malloc(strlen(ProgramName) + 80);
+ (void) sprintf(buf,
+ "%s: Can not get local hostname.\n", ProgramName);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+ if (!(host = gethostbyname(hostname))) {
+ buf = (char *) malloc(strlen(ProgramName) + 80);
+ (void) sprintf(buf,
+ "%s: Can not get hostbyname.\n", ProgramName);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+ if (strncmp(displayname, host->h_name, n)) {
+ for (hp = host->h_aliases; *hp; hp++) {
+ if (!strncmp(displayname, *hp, n)) {
+ badhost = 0;
+ break;
+ }
+ }
+ if (badhost) {
+ *colon = (char) 0;
+ buf = (char *) malloc(strlen(ProgramName) +
+ strlen(displayname) + 80);
+ (void) sprintf(buf,
+ "%s: can not lock %s's display\n", ProgramName, displayname);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+ }
+ }
+ }
+#ifdef VMS
+ }
+#endif
+}
+
+static void
+printvar(char *classname, argtype var)
+{
+ switch (var.type) {
+ case t_String:
+ (void) fprintf(stderr, "%s.%s: %s\n",
+ classname, var.name, *((char **) var.var));
+ break;
+ case t_Bool:
+ (void) fprintf(stderr, "%s.%s: %s\n",
+ classname, var.name, *((int *) var.var)
+ ? "True" : "False");
+ break;
+ case t_Int:
+ (void) fprintf(stderr, "%s.%s: %d\n",
+ classname, var.name, *((int *) var.var));
+ break;
+ case t_Float:
+ (void) fprintf(stderr, "%s.%s: %g\n",
+ classname, var.name, *((float *) var.var));
+ break;
+ }
+}
+
+
+void
+getResources(int argc, char **argv)
+{
+ XrmDatabase RDB = NULL;
+ XrmDatabase nameDB = NULL;
+ XrmDatabase modeDB = NULL;
+ XrmDatabase cmdlineDB = NULL;
+ XrmDatabase generalDB = NULL;
+ XrmDatabase homeDB = NULL;
+ XrmDatabase applicationDB = NULL;
+ XrmDatabase serverDB = NULL;
+ XrmDatabase userDB = NULL;
+ char *userfile = NULL;
+ char *homeenv;
+ char *userpath;
+ char *env;
+ char *serverString;
+ int i, j;
+ int max_length;
+ extern Display *dsp;
+
+ XrmInitialize();
+
+ for (i = 0; i < argc; i++) {
+ if (!strncmp(argv[i], "-help", strlen(argv[i])))
+ Help();
+ if (!strncmp(argv[i], "-version", strlen(argv[i])))
+ Version();
+ }
+
+ /*
+ * get -name arg from command line so you can have different resource
+ * files for different configurations/machines etc...
+ */
+#ifdef VMS
+ /*Strip off directory and .exe; parts */
+ ProgramName = stripname(ProgramName);
+#endif
+ XrmParseCommand(&nameDB, nameTable, 1, ProgramName,
+ &argc, argv);
+ GetResource(nameDB, ProgramName, "*", "name", "Name", t_String,
+ DEF_CLASSNAME, &classname);
+
+
+ homeenv = getenv("HOME");
+ if (!homeenv)
+ homeenv = "";
+
+ env = getenv("XFILESEARCHPATH");
+ applicationDB = parsefilepath(env ? env : DEF_FILESEARCHPATH,
+ "app-defaults", classname);
+
+ XrmParseCommand(&cmdlineDB, cmdlineTable, cmdlineEntries, ProgramName,
+ &argc, argv);
+
+ userpath = getenv("XUSERFILESEARCHPATH");
+ if (!userpath) {
+ env = getenv("XAPPLRESDIR");
+ if (env) {
+ userfile = (char *) malloc(strlen(env) + strlen(homeenv) + 8);
+ (void) strcpy(userfile, env);
+ (void) strcat(userfile, "/%N:");
+ (void) strcat(userfile, homeenv);
+ (void) strcat(userfile, "/%N");
+ } else {
+#ifdef VMS
+ userfile = (char *) malloc(2 * strlen(homeenv) + 31);
+ (void) strcpy(userfile, homeenv);
+ (void) strcat(userfile, "DECW$%N.DAT#");
+ (void) strcat(userfile, homeenv);
+ (void) strcat(userfile, "DECW$XDEFAULTS.DAT");
+#else
+ userfile = (char *) malloc(strlen(homeenv) + 4);
+ (void) strcpy(userfile, homeenv);
+ (void) strcat(userfile, "/%N");
+#endif
+ }
+ userpath = userfile;
+ }
+ userDB = parsefilepath(userpath, "app-defaults", classname);
+
+ if (userfile)
+ (void) free((void *) userfile);
+
+ (void) XrmMergeDatabases(applicationDB, &RDB);
+ (void) XrmMergeDatabases(userDB, &RDB);
+/* PURIFY 4.0.1 on Solaris 2 reports an uninitialized memory read on the next
+ * line. PURIFY 4.0.1 on SunOS4 does not report this error. */
+ (void) XrmMergeDatabases(cmdlineDB, &RDB);
+
+ GetResource(RDB, ProgramName, classname, "display", "Display", t_String,
+ "", &displayname);
+ GetResource(RDB, ProgramName, classname, "nolock", "NoLock", t_Bool,
+ "off", (caddr_t *) & nolock);
+ GetResource(RDB, ProgramName, classname, "inwindow", "InWindow", t_Bool,
+ "off", (caddr_t *) & inwindow);
+ GetResource(RDB, ProgramName, classname, "inroot", "InRoot", t_Bool,
+ "off", (caddr_t *) & inroot);
+ GetResource(RDB, ProgramName, classname, "remote", "Remote", t_Bool,
+ "off", (caddr_t *) & remote);
+ GetResource(RDB, ProgramName, classname, "mono", "Mono", t_Bool,
+ "off", (caddr_t *) & mono);
+#ifdef USE_DTSAVER
+ GetResource(RDB, ProgramName, classname, "dtsaver", "DtSaver", t_Bool,
+ "off", (caddr_t *) & dtsaver);
+ if (dtsaver) {
+ inroot = False;
+ inwindow = True;
+ nolock = True;
+ }
+#endif
+
+ open_display();
+ serverString = XResourceManagerString(dsp);
+ if (serverString) {
+/* PURIFY 4.0.1 on Solaris 2 reports an uninitialized memory read on the next
+ * line. PURIFY 4.0.1 on SunOS4 reports this also when using X11R5, but not
+ * with OpenWindow 3.0 (X11R4 based). */
+ serverDB = XrmGetStringDatabase(serverString);
+/* PURIFY 4.0.1 on Solaris 2 reports an uninitialized memory read on the next
+ * line. PURIFY 4.0.1 on SunOS4 does not report this error. */
+ (void) XrmMergeDatabases(serverDB, &RDB);
+ } else {
+ char *buf = (char *) malloc(strlen(homeenv) + 12);
+
+ (void) sprintf(buf, "%s/.Xdefaults", homeenv);
+ homeDB = XrmGetFileDatabase(buf);
+ (void) XrmMergeDatabases(homeDB, &RDB);
+ (void) free((void *) buf);
+ }
+
+ XrmParseCommand(&generalDB, genTable, genEntries, ProgramName, &argc, argv);
+/* PURIFY 4.0.1 on Solaris 2 reports an uninitialized memory read on the next
+ * line. PURIFY 4.0.1 on SunOS4 does not report this error. */
+ (void) XrmMergeDatabases(generalDB, &RDB);
+
+ GetResource(RDB, ProgramName, classname, "mode", "Mode", t_String,
+ DEF_MODE, (caddr_t *) & mode);
+
+ XrmParseCommand(&modeDB, modeTable, modeEntries, ProgramName, &argc, argv);
+ (void) XrmMergeDatabases(modeDB, &RDB);
+
+ for (i = 0; i < numprocs; i++) {
+ XrmDatabase optDB = NULL;
+ ModeSpecOpt *ms = LockProcs[i].msopt;
+
+ if (!ms->numopts)
+ continue;
+ XrmParseCommand(&optDB, ms->opts, ms->numopts,
+ ProgramName, &argc, argv);
+/* PURIFY 4.0.1 on Solaris 2 reports an uninitialized memory read on the next
+ * line. PURIFY 4.0.1 on SunOS4 does not report this error. */
+ (void) XrmMergeDatabases(optDB, &RDB);
+ }
+
+ /* the RDB is set, now query load the variables from the database */
+
+ for (i = 0; i < (int) NGENARGS; i++)
+ GetResource(RDB, ProgramName, classname,
+ genvars[i].name, genvars[i].classname,
+ genvars[i].type, genvars[i].def, genvars[i].var);
+
+ max_length = 0;
+ for (i = 0; i < numprocs; i++) {
+ j = strlen(LockProcs[i].cmdline_arg);
+ if (j > max_length)
+ max_length = j;
+ }
+
+ modename = (char *) malloc(strlen(ProgramName) + max_length + 2);
+ modeclassname = (char *) malloc(strlen(classname) + max_length + 2);
+
+ for (i = 0; i < numprocs; i++) {
+ argtype *v;
+ ModeSpecOpt *ms = LockProcs[i].msopt;
+
+ (void) sprintf(modename, "%s.%s", ProgramName, LockProcs[i].cmdline_arg);
+ (void) sprintf(modeclassname, "%s.%s", classname, LockProcs[i].cmdline_arg);
+
+ for (j = 0; j < (int) NMODEARGS; j++) {
+ char buf[16];
+ void *p = (void *) ((char *) (&LockProcs[i]) + modevaroffs[j]);
+
+ if (modevars[j].type == t_Int)
+ (void) sprintf(buf, "%d", *(int *) p);
+ else
+ (void) sprintf(buf, "%g", *(float *) p);
+ GetResource(RDB, modename, modeclassname,
+ modevars[j].name, modevars[j].classname,
+ modevars[j].type, buf, (caddr_t *) p);
+ if (!strcmp(mode, LockProcs[i].cmdline_arg)) {
+ GetResource(RDB, modename, modeclassname,
+ modevars[j].name, modevars[j].classname,
+ modevars[j].type, buf, modevars[j].var);
+ }
+ }
+ if (!ms->numvarsdesc)
+ continue;
+ v = ms->vars;
+ for (j = 0; j < ms->numvarsdesc; j++)
+ GetResource(RDB, modename, modeclassname, v[j].name, v[j].classname,
+ v[j].type, v[j].def, v[j].var);
+ }
+
+ /*XrmPutFileDatabase(RDB, "/tmp/xlock.rsrc.out"); */
+/* PURIFY 4.0.1 on Solaris 2 reports an uninitialized memory read on the next
+ * line. PURIFY 4.0.1 on SunOS4 reports this also when using X11R5, but not
+ * with OpenWindow 3.0 (X11R4 based). */
+ (void) XrmDestroyDatabase(RDB);
+
+ /* Parse the rest of the command line */
+ for (argc--, argv++; argc > 0; argc--, argv++) {
+ if (**argv != '-')
+ Syntax(*argv);
+ switch (argv[0][1]) {
+ case 'r':
+ DumpResources();
+ /* NOTREACHED */
+ default:
+ Syntax(*argv);
+ /* NOTREACHED */
+ }
+ }
+
+#if defined( USE_AUTO_LOGOUT ) || defined( USE_BUTTON_LOGOUT )
+ if (fullLock()) {
+#ifdef USE_AUTO_LOGOUT
+ logoutAuto = 0;
+#endif
+#ifdef USE_BUTTON_LOGOUT
+ enable_button = 0;
+#endif
+ } else {
+#ifdef USE_AUTO_LOGOUT
+#if ( USE_AUTO_LOGOUT > 0 ) /* Could be USER defined if 0 */
+ if (logoutAuto > USE_AUTO_LOGOUT)
+ logoutAuto = USE_AUTO_LOGOUT;
+ else if (logoutAuto <= 0) /* Handle 0 as a special case */
+ logoutAuto = USE_AUTO_LOGOUT;
+#else
+ if (logoutAuto <= 0) /* Handle 0 as a special case */
+ (void) sscanf(DEF_AUTO_LOGOUT, "%d", &logoutAuto);
+#endif
+#endif
+#ifdef USE_BUTTON_LOGOUT
+#if ( USE_BUTTON_LOGOUT > 0 ) /* Could be USER defined if 0 */
+ if (logoutButton > USE_BUTTON_LOGOUT)
+ logoutButton = USE_BUTTON_LOGOUT;
+ else if (logoutButton <= 0) /* Handle 0 as a special case */
+ logoutButton = USE_BUTTON_LOGOUT;
+#else
+ if (logoutButton <= 0) /* Handle 0 as a special case */
+ (void) sscanf(DEF_BUTTON_LOGOUT, "%d", &logoutButton);
+#endif
+#endif
+ }
+#endif
+#ifdef USE_DTSAVER
+ if (dtsaver) {
+ inroot = False;
+ inwindow = True;
+ nolock = True;
+ enablesaver = True;
+ grabmouse = False;
+ grabserver = False;
+ install = False;
+ lockdelay = 0;
+ geometry = DEF_GEOMETRY;
+ }
+#endif
+
+ if (verbose) {
+ for (i = 0; i < (int) NGENARGS; i++)
+ printvar(classname, genvars[i]);
+ for (i = 0; i < (int) NMODEARGS; i++)
+ printvar(modename, modevars[i]);
+ }
+ if (*visualname == '\0') {
+ VisualClassWanted = -1;
+ if (verbose)
+ (void) fprintf(stderr, "Using default visual class\n");
+ } else {
+ VisualClassWanted = visualClassFromName(visualname);
+ if (verbose)
+ (void) fprintf(stderr, "Using visual class %s\n",
+ nameOfVisualClass(VisualClassWanted));
+ }
+#if HAVE_DIRENT_H
+ /* Evaluate imagefile */
+ if (strcmp(imagefile, DEF_IMAGEFILE)) {
+ extern void get_dir(char *fullpath, char *dir, char *filename);
+ extern int sel_image(struct dirent *name);
+ extern int scan_dir(const char *directoryname, struct dirent ***namelist,
+ int (*select) (struct dirent *),
+ int (*compare) (const void *, const void *));
+
+ get_dir(imagefile, directory_r, filename_r);
+ images_list = (struct dirent ***) malloc(sizeof (struct dirent **));
+
+ num_list = scan_dir(directory_r, images_list, sel_image, NULL);
+ image_list = *images_list;
+ if (debug)
+ for (i = 0; i < num_list; i++)
+ (void) printf("File number %d: %s\n", i, image_list[i]->d_name);
+
+ } else
+ num_list = 0;
+#endif
+ (void) free((void *) modename);
+ (void) free((void *) modeclassname);
+ (void) free((void *) classname);
+}
+
+
+void
+checkResources(void)
+{
+ int i;
+
+ if (delay < 0)
+ Syntax("-delay argument must not be negative.");
+ if (cycles < 0)
+ Syntax("-cycles argument must not be negative.");
+#if 0
+ if (batchcount < 0)
+ Syntax("-batchcount argument must not be negative.");
+ if (size < 0)
+ Syntax("-size argument must not be negative.");
+#endif
+ if (saturation < 0.0 || saturation > 1.0)
+ Syntax("-saturation argument must be between 0.0 and 1.0.");
+ if (delta3d < 0.0 || delta3d > 20.0)
+ Syntax("-delta3d argument must be between 0.0 and 20.0.");
+
+ /* in case they have a 'xlock*mode: ' empty resource */
+ if (!mode || *mode == '\0')
+ mode = DEF_MODE;
+
+ for (i = 0; i < numprocs; i++) {
+ if (!strcmp(LockProcs[i].cmdline_arg, mode)) {
+ set_default_mode(&LockProcs[i]);
+ break;
+ }
+ }
+ if (i == numprocs) {
+ (void) fprintf(stderr, "Unknown mode: ");
+ Syntax(mode);
+ }
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)roll.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * roll.c - roll for xlock, the X Window System lockscreen.
+ *
+ * Copyright (c) 1995 by Charles Vidal <vidalc@univ-mlv.fr>
+ * http://fillmore.univ-mlv.fr/~vidalc
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 1995: Written.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Roll"
+#define HACK_INIT init_roll
+#define HACK_DRAW draw_roll
+#define DEF_DELAY 100000
+#define DEF_BATCHCOUNT 25
+#define DEF_SIZE -64
+#define DEF_NCOLORS 200
+#define SPREAD_COLORS
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt roll_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+#define MINPTS 1
+#define MINSIZE 8
+#define FACTOR 8.0
+#define SPEED 25.0
+
+typedef struct {
+ float t, u, v;
+ float t1, u1, v1;
+} ptsstruct;
+typedef struct {
+ ptsstruct *pts;
+ XPoint *p;
+ int maxpts, npts;
+ float alpha, theta, phi, r;
+ XPoint sphere, direction;
+ int color;
+ int width, height;
+} rollstruct;
+
+static rollstruct *rolls = NULL;
+
+static void
+createsphere(rollstruct * rp, int n1, int n2)
+{
+ double i, j;
+ int n = 0;
+
+ for (i = 0.0; i < FACTOR * M_PI; i += (FACTOR * M_PI) / n1)
+ for (j = 0.0; j < FACTOR * M_PI; j += (FACTOR * M_PI) / n2) {
+ rp->pts[n].t1 = rp->r * COSF(i) * COSF(j);
+ rp->pts[n].u1 = rp->r * COSF(i) * SINF(j);
+ rp->pts[n].v1 = rp->r * SINF(i);
+ n++;
+ }
+}
+
+static void
+rotation3d(rollstruct * rp)
+{
+ float c1, c2, c3, c4, c5, c6, c7, c8, c9, x, y, z;
+ float sintheta, costheta;
+ float sinphi, cosphi;
+ float sinalpha, cosalpha;
+ int i;
+
+ sintheta = SINF(rp->theta);
+ costheta = COSF(rp->theta);
+ sinphi = SINF(rp->phi);
+ cosphi = COSF(rp->phi);
+ sinalpha = SINF(rp->alpha);
+ cosalpha = COSF(rp->alpha);
+
+ c1 = cosphi * costheta;
+ c2 = sinphi * costheta;
+ c3 = -sintheta;
+
+ c4 = cosphi * sintheta * sinalpha - sinphi * cosalpha;
+ c5 = sinphi * sintheta * sinalpha + cosphi * cosalpha;
+ c6 = costheta * sinalpha;
+
+ c7 = cosphi * sintheta * cosalpha + sinphi * sinalpha;
+ c8 = sinphi * sintheta * cosalpha - cosphi * sinalpha;
+ c9 = costheta * cosalpha;
+ for (i = 0; i < rp->maxpts; i++) {
+ x = rp->pts[i].t;
+ y = rp->pts[i].u;
+ z = rp->pts[i].v;
+ rp->pts[i].t = c1 * x + c2 * y + c3 * z;
+ rp->pts[i].u = c4 * x + c5 * y + c6 * z;
+ rp->pts[i].v = c7 * x + c8 * y + c9 * z;
+ }
+}
+
+static void
+project(rollstruct * rp)
+{
+ int i;
+
+ for (i = 0; i < rp->maxpts; i++) {
+ rp->p[i].x = (short) (2 * rp->pts[i].t);
+ rp->p[i].y = (short) (2 * rp->pts[i].u);
+ }
+}
+
+void
+init_roll(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ rollstruct *rp;
+ int i;
+ int size = MI_SIZE(mi);
+ double ang;
+
+ if (rolls == NULL) {
+ if ((rolls = (rollstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (rollstruct))) == NULL)
+ return;
+ }
+ rp = &rolls[MI_SCREEN(mi)];
+
+ ang = (double) NRAND(75) + 7.5;
+ rp->direction.x = ((2 * (LRAND() & 1)) - 1) * (int)
+ (SPEED * SINF(ang * M_PI / 180.0));
+ rp->direction.y = ((2 * (LRAND() & 1)) - 1) * (int)
+ (SPEED * COSF(ang * M_PI / 180.0));
+ rp->width = MI_WIN_WIDTH(mi);
+ rp->height = MI_WIN_HEIGHT(mi);
+ if (size < -MINSIZE)
+ rp->r = NRAND(MIN(-size, MAX(MINSIZE,
+ MIN(rp->width, rp->height) / 4)) - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE) {
+ if (!size)
+ rp->r = MAX(MINSIZE, MIN(rp->width, rp->height) / 4);
+ else
+ rp->r = MINSIZE;
+ } else
+ rp->r = MIN(size, MAX(MINSIZE,
+ MIN(rp->width, rp->height) / 4));
+ rp->sphere.x = NRAND(MAX(1, rp->width - 4 * (int) rp->r)) +
+ 2 * (int) rp->r;
+ rp->sphere.y = NRAND(MAX(1, rp->height - 4 * (int) rp->r)) +
+ 2 * (int) rp->r;
+ rp->alpha = 0;
+ rp->theta = 0;
+ rp->phi = 0;
+ rp->maxpts = MI_BATCHCOUNT(mi);
+ if (rp->maxpts < -MINPTS) {
+ /* if rp->maxpts is random ... the size can change */
+ if (rp->pts != NULL) {
+ (void) free((void *) rp->pts);
+ rp->pts = NULL;
+ }
+ rp->maxpts = NRAND(-rp->maxpts - MINPTS + 1) + MINPTS;
+ } else if (rp->maxpts < MINPTS)
+ rp->maxpts = MINPTS;
+ i = rp->maxpts;
+ rp->maxpts *= rp->maxpts;
+ rp->npts = 0;
+ if (rp->pts == NULL)
+ rp->pts = (ptsstruct *) malloc(rp->maxpts * sizeof (ptsstruct));
+ if (rp->p != NULL) {
+ (void) free((void *) rp->p);
+ rp->p = NULL;
+ }
+ if (MI_NPIXELS(mi) > 2)
+ rp->color = NRAND(MI_NPIXELS(mi));
+ createsphere(rp, i, i);
+ XClearWindow(display, MI_WINDOW(mi));
+}
+
+void
+draw_roll(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ rollstruct *rp = &rolls[MI_SCREEN(mi)];
+ int i;
+
+ for (i = 0; i < rp->maxpts; i++) {
+ rp->pts[i].t = rp->pts[i].t1;
+ rp->pts[i].u = rp->pts[i].u1;
+ rp->pts[i].v = rp->pts[i].v1;
+ }
+ rp->alpha += ((FACTOR * M_PI) / 200.0);
+ rp->theta += ((FACTOR * M_PI) / 200.0);
+ rp->phi += ((FACTOR * M_PI) / 200.0);
+ if (rp->alpha > (FACTOR * M_PI))
+ rp->alpha -= (FACTOR * M_PI);
+ if (rp->theta > (FACTOR * M_PI))
+ rp->theta -= (FACTOR * M_PI);
+ if (rp->phi > (FACTOR * M_PI))
+ rp->phi -= (FACTOR * M_PI);
+
+ if (rp->npts) {
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XDrawPoints(display, window, gc, rp->p, rp->npts, CoordModeOrigin);
+ } else {
+ if (rp->p)
+ (void) free((void *) rp->p);
+ rp->p = (XPoint *) malloc(rp->maxpts * sizeof (XPoint));
+ }
+ rotation3d(rp);
+ project(rp);
+ rp->npts = 0;
+ for (i = 0; i < rp->maxpts; i++) {
+ if (rp->pts[i].v > 0.0) {
+ rp->p[rp->npts].x += rp->sphere.x;
+ rp->p[rp->npts].y += rp->sphere.y;
+ rp->npts++;
+ }
+ }
+ if (MI_NPIXELS(mi) <= 2)
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+ else {
+ rp->color = (rp->color + 1) % MI_NPIXELS(mi);
+ XSetForeground(display, gc, MI_PIXEL(mi, rp->color));
+ }
+ XDrawPoints(display, window, gc, rp->p, rp->npts, CoordModeOrigin);
+ if (rp->sphere.x >= rp->width - (int) rp->r && rp->direction.x > 0)
+ rp->direction.x = -rp->direction.x;
+ else if (rp->sphere.x <= (int) rp->r && rp->direction.x < 0)
+ rp->direction.x = -rp->direction.x;
+ else if (rp->sphere.x < rp->width - 2 * (int) rp->r ||
+ rp->sphere.x > 2 * (int) rp->r) {
+ if (rp->sphere.x >= rp->width - 2 * (int) rp->r && rp->direction.x > 0)
+ rp->direction.x = -rp->direction.x;
+ else if (rp->sphere.x <= 2 * (int) rp->r && rp->direction.x < 0)
+ rp->direction.x = -rp->direction.x;
+ }
+ if (rp->sphere.y >= rp->height - (int) rp->r && rp->direction.y > 0)
+ rp->direction.y = -rp->direction.y;
+ else if (rp->sphere.y <= (int) rp->r && rp->direction.y < 0)
+ rp->direction.y = -rp->direction.y;
+ else if (rp->sphere.y < rp->height - 2 * (int) rp->r ||
+ rp->sphere.y > 2 * (int) rp->r) {
+ if (rp->sphere.y >= rp->height - 2 * (int) rp->r && rp->direction.y > 0)
+ rp->direction.y = -rp->direction.y;
+ else if (rp->sphere.y <= 2 * (int) rp->r && rp->direction.y < 0)
+ rp->direction.y = -rp->direction.y;
+ }
+ rp->sphere.x += rp->direction.x;
+ rp->sphere.y += rp->direction.y;
+}
+
+void
+release_roll(ModeInfo * mi)
+{
+ if (rolls != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ rollstruct *rp = &rolls[screen];
+
+ if (rp->pts != NULL)
+ (void) free((void *) rp->pts);
+ if (rp->p != NULL)
+ (void) free((void *) rp->p);
+ }
+ (void) free((void *) rolls);
+ rolls = NULL;
+ }
+}
+
+void
+refresh_roll(ModeInfo * mi)
+{
+ /* Do nothing, it will refresh by itself */
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)rotor.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * rotor.c - A swirly rotor 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 08-Mar-95: CAT stuff for ## was tripping up some C compilers. Removed.
+ * 01-Dec-93: added patch for AIXV3 from Tom McConnell
+ * <tmcconne@sedona.intel.com>
+ * 11-Nov-90: put into xlock by Steve Zellers <zellers@sun.com>
+ * 16-Oct-90: Received from Tom Lawrence (tcl@cs.brown.edu: 'flight' simulator)
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Rotor"
+#define HACK_INIT init_rotor
+#define HACK_DRAW draw_rotor
+#define DEF_DELAY 10000
+#define DEF_BATCHCOUNT 4
+#define DEF_CYCLES 20
+#define DEF_NCOLORS 200
+#define SPREAD_COLORS
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt rotor_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+/*-
+ * A 'batchcount' of 3 or 4 works best!
+ */
+
+#define MAXANGLE 10000.0 /* irrectangular */
+
+/* How many segments to draw per cycle when redrawing */
+#define REDRAWSTEP 3
+
+typedef struct {
+ float angle;
+ float radius;
+ float start_radius;
+ float end_radius;
+ float radius_drift_max;
+ float radius_drift_now;
+
+ float ratio;
+ float start_ratio;
+ float end_ratio;
+ float ratio_drift_max;
+ float ratio_drift_now;
+} elem;
+
+typedef struct {
+ int pix;
+ int lastx, lasty;
+ int num, rotor, prev;
+ int nsave;
+ float angle;
+ int centerx, centery;
+ int prevcenterx, prevcentery;
+ unsigned char firsttime;
+ unsigned char iconifiedscreen; /* for iconified view */
+ unsigned char forward;
+ unsigned char unused;
+ elem *elements;
+ XPoint *save;
+ int redrawing, redrawpos;
+} rotorstruct;
+
+static rotorstruct *rotors = NULL;
+
+void
+init_rotor(ModeInfo * mi)
+{
+ rotorstruct *rp;
+ int x;
+ elem *pelem;
+ unsigned char wasiconified;
+
+ if (rotors == NULL) {
+ if ((rotors = (rotorstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (rotorstruct))) == NULL)
+ return;
+ }
+ rp = &rotors[MI_SCREEN(mi)];
+
+ rp->prevcenterx = rp->centerx;
+ rp->prevcentery = rp->centery;
+
+ rp->centerx = MI_WIN_WIDTH(mi) / 2;
+ rp->centery = MI_WIN_HEIGHT(mi) / 2;
+
+ rp->redrawing = 0;
+ /*
+ * sometimes, you go into iconified view, only to see a really whizzy pattern
+ * that you would like to look more closely at. Normally, clicking in the
+ * icon reinitializes everything - but I don't, cuz I'm that kind of guy.
+ * HENCE, the wasiconified stuff you see here.
+ */
+
+ wasiconified = rp->iconifiedscreen;
+ rp->iconifiedscreen = MI_WIN_IS_ICONIC(mi);
+
+ if (wasiconified && !rp->iconifiedscreen)
+ rp->firsttime = True;
+ else {
+
+ /* This is a fudge is needed since prevcenter may not be set when it comes
+ from the the random mode and return is pressed (and its not the first
+ mode that was running). This assumes that the size of the lock screen
+ window / size of the icon window = 12 */
+ if (!rp->prevcenterx)
+ rp->prevcenterx = rp->centerx * 12;
+ if (!rp->prevcentery)
+ rp->prevcentery = rp->centery * 12;
+
+ rp->num = MI_BATCHCOUNT(mi);
+ if (rp->num < 0) {
+ rp->num = NRAND(-rp->num) + 1;
+ if (rp->elements != NULL) {
+ (void) free((void *) rp->elements);
+ rp->elements = NULL;
+ }
+ }
+ if (rp->elements == NULL)
+ rp->elements = (elem *) calloc(rp->num, sizeof (elem));
+ rp->nsave = MI_CYCLES(mi);
+ if (rp->nsave <= 1)
+ rp->nsave = 2;
+ if (rp->save == NULL)
+ rp->save = (XPoint *) calloc(rp->nsave, sizeof (XPoint));
+
+ pelem = rp->elements;
+
+ for (x = rp->num; --x >= 0; pelem++) {
+ pelem->radius_drift_max = 1.0;
+ pelem->radius_drift_now = 1.0;
+
+ pelem->end_radius = 100.0;
+
+ pelem->ratio_drift_max = 1.0;
+ pelem->ratio_drift_now = 1.0;
+ pelem->end_ratio = 10.0;
+ }
+ if (MI_NPIXELS(mi) > 2)
+ rp->pix = NRAND(MI_NPIXELS(mi));
+
+ rp->rotor = 0;
+ rp->prev = 1;
+ rp->lastx = rp->centerx;
+ rp->lasty = rp->centery;
+ rp->angle = (float) NRAND((long) MAXANGLE) / 3.0;
+ rp->forward = rp->firsttime = True;
+ }
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+}
+
+void
+draw_rotor(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ register rotorstruct *rp = &rotors[MI_SCREEN(mi)];
+ register elem *pelem;
+ int thisx, thisy;
+ int i;
+ int x_1, y_1, x_2, y_2;
+
+ if (!rp->iconifiedscreen) {
+ thisx = rp->centerx;
+ thisy = rp->centery;
+ } else {
+ thisx = rp->prevcenterx;
+ thisy = rp->prevcentery;
+ }
+ for (i = rp->num, pelem = rp->elements; --i >= 0; pelem++) {
+ if (pelem->radius_drift_max <= pelem->radius_drift_now) {
+ pelem->start_radius = pelem->end_radius;
+ pelem->end_radius = (float) NRAND(40000) / 100.0 - 200.0;
+ pelem->radius_drift_max = (float) NRAND(100000) + 10000.0;
+ pelem->radius_drift_now = 0.0;
+ }
+ if (pelem->ratio_drift_max <= pelem->ratio_drift_now) {
+ pelem->start_ratio = pelem->end_ratio;
+ pelem->end_ratio = (float) NRAND(2000) / 100.0 - 10.0;
+ pelem->ratio_drift_max = (float) NRAND(100000) + 10000.0;
+ pelem->ratio_drift_now = 0.0;
+ }
+ pelem->ratio = pelem->start_ratio +
+ (pelem->end_ratio - pelem->start_ratio) /
+ pelem->ratio_drift_max * pelem->ratio_drift_now;
+ pelem->angle = rp->angle * pelem->ratio;
+ pelem->radius = pelem->start_radius +
+ (pelem->end_radius - pelem->start_radius) /
+ pelem->radius_drift_max * pelem->radius_drift_now;
+
+ thisx += (int) (COSF(pelem->angle) * pelem->radius);
+ thisy += (int) (SINF(pelem->angle) * pelem->radius);
+
+ pelem->ratio_drift_now += 1.0;
+ pelem->radius_drift_now += 1.0;
+ }
+ if (rp->firsttime)
+ rp->firsttime = False;
+ else {
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+
+ x_1 = (int) rp->save[rp->rotor].x;
+ y_1 = (int) rp->save[rp->rotor].y;
+ x_2 = (int) rp->save[rp->prev].x;
+ y_2 = (int) rp->save[rp->prev].y;
+
+ if (rp->iconifiedscreen) {
+ x_1 = x_1 * rp->centerx / rp->prevcenterx;
+ x_2 = x_2 * rp->centerx / rp->prevcenterx;
+ y_1 = y_1 * rp->centery / rp->prevcentery;
+ y_2 = y_2 * rp->centery / rp->prevcentery;
+ }
+ XDrawLine(display, MI_WINDOW(mi), gc, x_1, y_1, x_2, y_2);
+
+ if (MI_NPIXELS(mi) > 2) {
+ XSetForeground(display, gc, MI_PIXEL(mi, rp->pix));
+ if (++rp->pix >= MI_NPIXELS(mi))
+ rp->pix = 0;
+ } else
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+
+ x_1 = rp->lastx;
+ y_1 = rp->lasty;
+ x_2 = thisx;
+ y_2 = thisy;
+
+ if (rp->iconifiedscreen) {
+ x_1 = x_1 * rp->centerx / rp->prevcenterx;
+ x_2 = x_2 * rp->centerx / rp->prevcenterx;
+ y_1 = y_1 * rp->centery / rp->prevcentery;
+ y_2 = y_2 * rp->centery / rp->prevcentery;
+ }
+ XDrawLine(display, MI_WINDOW(mi), gc, x_1, y_1, x_2, y_2);
+ }
+ rp->save[rp->rotor].x = rp->lastx = thisx;
+ rp->save[rp->rotor].y = rp->lasty = thisy;
+
+ ++rp->rotor;
+ rp->rotor %= rp->nsave;
+ ++rp->prev;
+ rp->prev %= rp->nsave;
+ if (rp->forward) {
+ rp->angle += 0.01;
+ if (rp->angle >= MAXANGLE) {
+ rp->angle = MAXANGLE;
+ rp->forward = False;
+ }
+ } else {
+ rp->angle -= 0.1;
+ if (rp->angle <= 0) {
+ rp->angle = 0.0;
+ rp->forward = True;
+ }
+ }
+ if (rp->redrawing) {
+ int j;
+
+ for (i = 0; i < REDRAWSTEP; i++) {
+ j = (rp->rotor - rp->redrawpos + rp->nsave) % rp->nsave;
+
+ x_1 = (int) rp->save[j].x;
+ y_1 = (int) rp->save[j].y;
+ x_2 = (int) rp->save[(j - 1 + rp->nsave) % rp->nsave].x;
+ y_2 = (int) rp->save[(j - 1 + rp->nsave) % rp->nsave].y;
+
+ if (rp->iconifiedscreen) {
+ x_1 = x_1 * rp->centerx / rp->prevcenterx;
+ x_2 = x_2 * rp->centerx / rp->prevcenterx;
+ y_1 = y_1 * rp->centery / rp->prevcentery;
+ y_2 = y_2 * rp->centery / rp->prevcentery;
+ }
+ XDrawLine(display, MI_WINDOW(mi), gc, x_1, y_1, x_2, y_2);
+
+ if (++(rp->redrawpos) >= rp->nsave) {
+ rp->redrawing = 0;
+ break;
+ }
+ }
+ }
+}
+
+void
+release_rotor(ModeInfo * mi)
+{
+ if (rotors != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ rotorstruct *rp = &rotors[screen];
+
+ if (rp->elements != NULL)
+ (void) free((void *) rp->elements);
+ if (rp->save != NULL)
+ (void) free((void *) rp->save);
+ }
+ (void) free((void *) rotors);
+ rotors = NULL;
+ }
+}
+
+void
+refresh_rotor(ModeInfo * mi)
+{
+ rotorstruct *rp = &rotors[MI_SCREEN(mi)];
+
+ rp->redrawing = 1;
+ rp->redrawpos = 1;
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)shape.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * shape.c - Basic in your face shapes for xlock, the X Window System
+ * lockscreen.
+ *
+ * Copyright (c) 1992 by Jamie Zawinski
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 03-Nov-95: formerly rect.c
+ * 11-Aug-95: slight change to initialization of pixmaps
+ * 27-Jun-95: added ellipses
+ * 27-Feb-95: patch for VMS
+ * 29-Sep-94: multidisplay bug fix <epstein_caleb@jpmorgan.com>
+ * 15-Jul-94: xlock version David Bagley <bagleyd@bigfoot.com>
+ * 1992: xscreensaver version Jamie Zawinski <jwz@netscape.com>
+ */
+
+/*-
+ * original copyright
+ * Copyright (c) 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.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Shape"
+#define HACK_INIT init_shape
+#define HACK_DRAW draw_shape
+#define DEF_DELAY 10000
+#define DEF_BATCHCOUNT 100
+#define DEF_CYCLES 256
+#define DEF_NCOLORS 200
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt shape_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+#define NBITS 12
+
+#include "bitmaps/stipple.xbm"
+#include "bitmaps/cross_weave.xbm"
+#include "bitmaps/dimple1.xbm"
+#include "bitmaps/dimple3.xbm"
+#include "bitmaps/flipped_gray.xbm"
+#include "bitmaps/gray1.xbm"
+#include "bitmaps/gray3.xbm"
+#include "bitmaps/hlines2.xbm"
+#include "bitmaps/light_gray.xbm"
+#include "bitmaps/root_weave.xbm"
+#include "bitmaps/vlines2.xbm"
+#include "bitmaps/vlines3.xbm"
+#define SHAPEBITS(n,w,h)\
+ sp->pixmaps[sp->init_bits++]=\
+ XCreateBitmapFromData(display,window,(char *)n,w,h)
+
+typedef struct {
+ int width;
+ int height;
+ int borderx;
+ int bordery;
+ int time;
+ int x, y, w, h;
+ GC stippledgc;
+ int init_bits;
+ Pixmap pixmaps[NBITS];
+} shapestruct;
+
+
+static shapestruct *shapes = NULL;
+
+void
+init_shape(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ shapestruct *sp;
+
+ if (shapes == NULL) {
+ if ((shapes = (shapestruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (shapestruct))) == NULL)
+ return;
+ }
+ sp = &shapes[MI_SCREEN(mi)];
+
+ sp->width = MI_WIN_WIDTH(mi);
+ sp->height = MI_WIN_HEIGHT(mi);
+ sp->borderx = sp->width / 20;
+ sp->bordery = sp->height / 20;
+ sp->time = 0;
+
+ if (!sp->stippledgc) {
+ if ((sp->stippledgc = XCreateGC(display, window,
+ (unsigned long) 0, (XGCValues *) NULL)) == None)
+ return;
+ XSetFillStyle(display, sp->stippledgc, FillOpaqueStippled);
+ }
+ if (!sp->init_bits) {
+ SHAPEBITS(cross_weave_bits, cross_weave_width, cross_weave_height);
+ SHAPEBITS(dimple1_bits, dimple1_width, dimple1_height);
+ SHAPEBITS(dimple3_bits, dimple3_width, dimple3_height);
+ SHAPEBITS(flipped_gray_bits, flipped_gray_width, flipped_gray_height);
+ SHAPEBITS(gray1_bits, gray1_width, gray1_height);
+ SHAPEBITS(gray3_bits, gray3_width, gray3_height);
+ SHAPEBITS(vlines3_bits, vlines3_width, vlines3_height);
+ SHAPEBITS(stipple_bits, stipple_width, stipple_height);
+ SHAPEBITS(hlines2_bits, hlines2_width, hlines2_height);
+ SHAPEBITS(light_gray_bits, light_gray_width, light_gray_height);
+ SHAPEBITS(root_weave_bits, root_weave_width, root_weave_height);
+ SHAPEBITS(vlines2_bits, vlines2_width, vlines2_height);
+ }
+ XClearWindow(display, window);
+}
+
+void
+draw_shape(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ shapestruct *sp = &shapes[MI_SCREEN(mi)];
+ XGCValues gcv;
+
+ gcv.stipple = sp->pixmaps[NRAND(NBITS)];
+ gcv.foreground = (MI_NPIXELS(mi) > 2) ?
+ MI_PIXEL(mi, NRAND(MI_NPIXELS(mi))) : MI_WIN_WHITE_PIXEL(mi);
+ gcv.background = (MI_NPIXELS(mi) > 2) ?
+ MI_PIXEL(mi, NRAND(MI_NPIXELS(mi))) : MI_WIN_BLACK_PIXEL(mi);
+ XChangeGC(display, sp->stippledgc, GCStipple | GCForeground | GCBackground,
+ &gcv);
+ if (NRAND(3)) {
+ sp->w = sp->borderx + NRAND(sp->width - 2 * sp->borderx) *
+ NRAND(sp->width) / sp->width;
+ sp->h = sp->bordery + NRAND(sp->height - 2 * sp->bordery) *
+ NRAND(sp->height) / sp->height;
+ sp->x = NRAND(sp->width - sp->w);
+ sp->y = NRAND(sp->height - sp->h);
+ if (LRAND() & 1)
+ XFillRectangle(display, window, sp->stippledgc,
+ sp->x, sp->y, sp->w, sp->h);
+ else
+ XFillArc(display, window, sp->stippledgc,
+ sp->x, sp->y, sp->w, sp->h, 0, 23040);
+ } else {
+ XPoint triangleList[3];
+
+ triangleList[0].x = sp->borderx + NRAND(sp->width - 2 * sp->borderx);
+ triangleList[0].y = sp->bordery + NRAND(sp->height - 2 * sp->bordery);
+ triangleList[1].x = sp->borderx + NRAND(sp->width - 2 * sp->borderx);
+ triangleList[1].y = sp->bordery + NRAND(sp->height - 2 * sp->bordery);
+ triangleList[2].x = sp->borderx + NRAND(sp->width - 2 * sp->borderx);
+ triangleList[2].y = sp->bordery + NRAND(sp->height - 2 * sp->bordery);
+ XFillPolygon(display, window, sp->stippledgc, triangleList, 3,
+ Convex, CoordModeOrigin);
+ }
+
+
+ if (++sp->time > MI_CYCLES(mi))
+ init_shape(mi);
+}
+
+void
+release_shape(ModeInfo * mi)
+{
+ int bits;
+
+ if (shapes != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ shapestruct *sp = &shapes[screen];
+
+ if (sp != NULL)
+ XFreeGC(MI_DISPLAY(mi), sp->stippledgc);
+ for (bits = 0; bits < sp->init_bits; bits++)
+ XFreePixmap(MI_DISPLAY(mi), sp->pixmaps[bits]);
+ }
+ (void) free((void *) shapes);
+ shapes = NULL;
+ }
+}
+
+void
+refresh_shape(ModeInfo * mi)
+{
+ /* Do nothing, it will refresh by itself, or pretty damn close */
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)sierpinski.c 4.00 97/01/01 xlockmore";
+
+#endif
+
+/*-
+ * sierpinski.c - Sierpinski triangle fractal for xlock,
+ * the X Window System lockscreen.
+ *
+ * See xlock.c for copying information.
+ *
+ * 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.
+ *
+ * Revision History:
+ * 20-May-97: Changed the name tri to sierpinski for more compatiblity
+ * 10-May-97: Jamie Zawinski <jwz@netscape.com> compatible with xscreensaver
+ * 05-Sep-96: Desmond Daignault Datatimes Incorporated
+ * <tekdd@dtol.datatimes.com> .
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Sierpinski"
+#define HACK_INIT init_sierpinski
+#define HACK_DRAW draw_sierpinski
+#define DEF_DELAY 400000
+#define DEF_BATCHCOUNT 2000
+#define DEF_CYCLES 100
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt sierpinski_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+typedef struct {
+ int width, height;
+ int time;
+ int px, py;
+ int total_npoints;
+ int npoints[3];
+ unsigned long colors[3];
+ XPoint *pointBuffer[3];
+ XPoint vertex[3];
+} sierpinskistruct;
+
+static sierpinskistruct *tris = NULL;
+
+static void
+startover(ModeInfo * mi)
+{
+ int j;
+ sierpinskistruct *sp = &tris[MI_SCREEN(mi)];
+
+ if (MI_NPIXELS(mi) > 2) {
+ sp->colors[0] = (NRAND(MI_NPIXELS(mi)));
+ sp->colors[1] = (sp->colors[0] + MI_NPIXELS(mi) / 7 +
+ NRAND(2 * MI_NPIXELS(mi) / 7)) % MI_NPIXELS(mi);
+ sp->colors[2] = (sp->colors[0] + 4 * MI_NPIXELS(mi) / 7 +
+ NRAND(2 * MI_NPIXELS(mi) / 7)) % MI_NPIXELS(mi);
+ }
+ for (j = 0; j < 3; j++) {
+ sp->vertex[j].x = NRAND(sp->width);
+ sp->vertex[j].y = NRAND(sp->height);
+ }
+ sp->px = NRAND(sp->width);
+ sp->py = NRAND(sp->height);
+ sp->time = 0;
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+}
+
+void
+init_sierpinski(ModeInfo * mi)
+{
+ sierpinskistruct *sp;
+ int i;
+
+ if (tris == NULL) {
+ if ((tris = (sierpinskistruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (sierpinskistruct))) == NULL)
+ return;
+ }
+ sp = &tris[MI_SCREEN(mi)];
+
+ sp->width = MI_WIN_WIDTH(mi);
+ sp->height = MI_WIN_HEIGHT(mi);
+
+ sp->total_npoints = MI_BATCHCOUNT(mi);
+ if (sp->total_npoints < 1)
+ sp->total_npoints = 1;
+ for (i = 0; i < 3; i++) {
+ if (!sp->pointBuffer[i])
+ sp->pointBuffer[i] = (XPoint *) malloc(sp->total_npoints *
+ sizeof (XPoint));
+ }
+ startover(mi);
+}
+
+void
+draw_sierpinski(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ sierpinskistruct *sp = &tris[MI_SCREEN(mi)];
+ XPoint *xp[3];
+ int i = 0, v;
+
+ if (MI_NPIXELS(mi) <= 2)
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+ for (i = 0; i < 3; i++)
+ xp[i] = sp->pointBuffer[i];
+ for (i = 0; i < sp->total_npoints; i++) {
+ v = NRAND(3);
+ sp->px = (sp->px + sp->vertex[v].x) / 2;
+ sp->py = (sp->py + sp->vertex[v].y) / 2;
+ xp[v]->x = sp->px;
+ xp[v]->y = sp->py;
+ xp[v]++;
+ sp->npoints[v]++;
+ }
+ for (i = 0; i < 3; i++) {
+ if (MI_NPIXELS(mi) > 2)
+ XSetForeground(display, gc, MI_PIXEL(mi, sp->colors[i]));
+ XDrawPoints(display, MI_WINDOW(mi), gc, sp->pointBuffer[i], sp->npoints[i],
+ CoordModeOrigin);
+ sp->npoints[i] = 0;
+ }
+ if (++sp->time >= MI_CYCLES(mi))
+ startover(mi);
+}
+
+void
+release_sierpinski(ModeInfo * mi)
+{
+ if (tris != NULL) {
+ int screen, i;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ for (i = 0; i < 3; i++)
+ if (tris[screen].pointBuffer[i] != NULL) {
+ (void) free((void *) tris[screen].pointBuffer[i]);
+ }
+ }
+ (void) free((void *) tris);
+ tris = NULL;
+ }
+}
+
+void
+refresh_sierpinski(ModeInfo * mi)
+{
+ /* Do nothing, it will refresh by itself */
+}
--- /dev/null
+
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)slip.c 4.03 97/04/10 xlockmore";
+
+#endif
+
+/*-
+ * slip.c - lots of blits for xlock, the X Window System lockscreen.
+ *
+ * Copyright (c) 1992 by Scott Draves <spot@cs.cmu.edu>
+ *
+ * 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.
+ *
+ * 10-May-97: Jamie Zawinski <jwz@netscape.com> compatible with xscreensaver
+ * 01-Dec-95: Patched for VMS <joukj@crys.chem.uva.nl>
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Slip"
+#define HACK_INIT init_slip
+#define HACK_DRAW draw_slip
+#define DEF_DELAY 50000
+#define DEF_BATCHCOUNT 35
+#define DEF_CYCLES 50
+#define DEF_NCOLORS 200
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt slip_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+typedef struct {
+ int width, height;
+ int nblits_remaining;
+ int blit_width, blit_height;
+ int mode;
+ int first_time;
+ int backwards;
+} slipstruct;
+static slipstruct *slips = NULL;
+
+static short
+halfrandom(int mv)
+{
+ static short lasthalf = 0;
+ unsigned long r;
+
+ if (lasthalf) {
+ r = lasthalf;
+ lasthalf = 0;
+ } else {
+ r = LRAND();
+ lasthalf = r >> 16;
+ }
+ return r % mv;
+}
+
+static int
+erandom(int mv)
+{
+ static int stage = 0;
+ static unsigned long r;
+ int res;
+
+ if (0 == stage) {
+ r = LRAND();
+ stage = 7;
+ }
+ res = r & 0xf;
+ r = r >> 4;
+ stage--;
+ if (res & 8)
+ return res & mv;
+ else
+ return -(res & mv);
+}
+
+static void
+prepare_screen(ModeInfo * mi, slipstruct * s)
+{
+
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ int i, n, w = s->width / 20;
+ int not_solid = halfrandom(10);
+
+#ifdef STANDALONE /* jwz -- sometimes hack the desktop image! */
+ if (halfrandom(5) == 0) {
+ Pixmap p = grab_screen_image(display, MI_WINDOW(mi));
+
+ if (p)
+ XFreePixmap(display, p);
+ return;
+ }
+#endif
+ s->backwards = LRAND() & 1; /* jwz: go the other way sometimes */
+
+ if (s->first_time || !halfrandom(5)) {
+ XClearWindow(display, MI_WINDOW(mi));
+ n = 300;
+ } else {
+ if (halfrandom(5))
+ return;
+ if (halfrandom(5))
+ n = 100;
+ else
+ n = 2000;
+ }
+
+ if (MI_NPIXELS(mi) > 2)
+ XSetForeground(display, gc, MI_PIXEL(mi, halfrandom(MI_NPIXELS(mi))));
+ else if (halfrandom(2))
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+ else
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+
+ for (i = 0; i < n; i++) {
+ if (not_solid)
+ if (MI_NPIXELS(mi) > 2)
+ XSetForeground(display, gc, MI_PIXEL(mi, halfrandom(MI_NPIXELS(mi))));
+ else if (halfrandom(2))
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+ else
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XFillRectangle(display, MI_WINDOW(mi), gc,
+ halfrandom(s->width - w),
+ halfrandom(s->height - w),
+ w, w);
+ }
+ s->first_time = 0;
+}
+
+static int
+quantize(double d)
+{
+ int i = (int) floor(d);
+ double f = d - i;
+
+ if ((LRAND() & 0xff) < f * 0xff)
+ i++;
+ return i;
+}
+
+void
+init_slip(ModeInfo * mi)
+{
+ slipstruct *sp;
+
+ if (slips == NULL) {
+ if ((slips = (slipstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (slipstruct))) == NULL)
+ return;
+ }
+ sp = &slips[MI_SCREEN(mi)];
+
+ sp->width = MI_WIN_WIDTH(mi);
+ sp->height = MI_WIN_HEIGHT(mi);
+
+ sp->blit_width = sp->width / 25;
+ sp->blit_height = sp->height / 25;
+ sp->nblits_remaining = 0;
+ sp->mode = 0;
+ sp->first_time = 1;
+
+ /* no "NoExpose" events from XCopyArea wanted */
+ XSetGraphicsExposures(MI_DISPLAY(mi), MI_GC(mi), False);
+}
+
+void
+draw_slip(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ slipstruct *s = &slips[MI_SCREEN(mi)];
+ int timer;
+
+ timer = MI_BATCHCOUNT(mi) * MI_CYCLES(mi);
+
+ while (timer--) {
+ int xi = halfrandom(s->width - s->blit_width);
+ int yi = halfrandom(s->height - s->blit_height);
+ double x, y, dx = 0, dy = 0, t, s1, s2;
+
+ if (0 == s->nblits_remaining--) {
+ static lut[] =
+ {0, 0, 0, 1, 1, 1, 2};
+
+ prepare_screen(mi, s);
+ s->nblits_remaining = MI_BATCHCOUNT(mi) *
+ (2000 + halfrandom(1000) + halfrandom(1000));
+ if (s->mode == 2)
+ s->mode = halfrandom(2);
+ else
+ s->mode = lut[halfrandom(7)];
+ }
+ x = (2 * xi + s->blit_width) / (double) s->width - 1;
+ y = (2 * yi + s->blit_height) / (double) s->height - 1;
+
+ /* (x,y) is in biunit square */
+ switch (s->mode) {
+ case 0:
+ dx = x;
+ dy = y;
+
+ if (dy < 0) {
+ dy += 0.04;
+ if (dy > 0)
+ dy = 0.00;
+ }
+ if (dy > 0) {
+ dy -= 0.04;
+ if (dy < 0)
+ dy = 0.00;
+ }
+ t = dx * dx + dy * dy + 1e-10;
+ s1 = 2 * dx * dx / t - 1;
+ s2 = 2 * dx * dy / t;
+ dx = s1 * 5;
+ dy = s2 * 5;
+
+ if (s->backwards) { /* jwz: go the other way sometimes */
+ dx = -dx;
+ dy = -dy;
+ }
+ break;
+ case 1:
+ dx = erandom(3);
+ dy = erandom(3);
+ break;
+ case 2:
+ dx = x * 3;
+ dy = y * 3;
+ break;
+ }
+ {
+ int qx = xi + quantize(dx), qy = yi + quantize(dy);
+ int wrap;
+
+ if (qx < 0 || qy < 0 ||
+ qx >= s->width - s->blit_width ||
+ qy >= s->height - s->blit_height)
+ continue;
+
+ XCopyArea(display, window, window, gc, xi, yi,
+ s->blit_width, s->blit_height,
+ qx, qy);
+
+ switch (s->mode) {
+ case 0:
+ /* wrap */
+ wrap = s->width - (2 * s->blit_width);
+ if (qx > wrap)
+ XCopyArea(display, window, window, gc, qx, qy,
+ s->blit_width, s->blit_height,
+ qx - wrap, qy);
+
+ if (qx < 2 * s->blit_width)
+ XCopyArea(display, window, window, gc, qx, qy,
+ s->blit_width, s->blit_height,
+ qx + wrap, qy);
+
+ wrap = s->height - (2 * s->blit_height);
+ if (qy > wrap)
+ XCopyArea(display, window, window, gc, qx, qy,
+ s->blit_width, s->blit_height,
+ qx, qy - wrap);
+
+ if (qy < 2 * s->blit_height)
+ XCopyArea(display, window, window, gc, qx, qy,
+ s->blit_width, s->blit_height,
+ qx, qy + wrap);
+ break;
+ case 1:
+ case 2:
+ break;
+ }
+ }
+ }
+}
+
+void
+release_slip(ModeInfo * mi)
+{
+ if (slips != NULL) {
+ (void) free((void *) slips);
+ slips = NULL;
+ }
+}
--- /dev/null
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)sound.c 4.00 97/01/01 xlockmore";
+
+#endif
+
+/*-
+ * sound.c - xlock.c and vms_play.c
+ *
+ * See xlock.c for copying information.
+ *
+ */
+
+#include "xlock.h"
+
+#ifdef USE_RPLAY
+#include <rplay.h>
+
+void
+play_sound(char *string)
+{
+ int rplay_fd = rplay_open_default();
+
+ if (rplay_fd >= 0) {
+ rplay_sound(rplay_fd, string);
+ rplay_close(rplay_fd);
+ }
+}
+#endif
+
+#ifdef USE_NAS
+/*-
+ * I connect each time, cos it might be that the server wasn't running
+ * when xlock first started, but is when next nas_play is called
+ */
+
+#include <audio/audio.h>
+#include <audio/audiolib.h>
+
+extern Display *dsp;
+
+void
+play_sound(char *string)
+{
+ char *auservername = DisplayString(dsp);
+ char *fname = string;
+ AuServer *aud; /* audio server connection */
+
+ if (!(aud = AuOpenServer(auservername, 0, NULL, 0, NULL, NULL)))
+ return; /*cannot connect - no server? */
+ /*
+ * now play the file at recorded volume (3rd arg is a percentage),
+ * synchronously
+ */
+ AuSoundPlaySynchronousFromFile(aud, fname, 100);
+ AuCloseServer(aud);
+}
+#endif
+
+#ifdef USE_VMSPLAY
+/*-
+ * Jouk Jansen <joukj@crys.chem.uva.nl> contributed this
+ * which he found at http://axp616.gsi.de:8080/www/vms/mzsw.html
+ *
+ * quick hack for sounds in xlockmore on VMS
+ * with a the above AUDIO package slightly modified
+ */
+#include <file.h>
+#include <unixio.h>
+#include <iodef.h>
+#include "amd.h"
+
+void
+play_sound(char *filename)
+{
+ int i, j, status;
+ char buffer[2048];
+ int volume = 65; /* volume is default to 65% */
+
+ /* use the internal speaker(s) */
+ int speaker = SO_INTERNAL /*SO_EXTERNAL */ ;
+ int fp;
+
+ status = AmdInitialize("SO:", volume); /* Initialize access to AMD */
+ AmdSelect(speaker); /* Select which speaker */
+ fp = open(filename, O_RDONLY, 0777); /* Open the file */
+ if (!(fp == -1)) {
+ /* Read through it */
+ i = read(fp, buffer, 2048);
+ while (i) {
+ status = AmdWrite(buffer, i);
+ if (!(status & 1))
+ exit(status);
+ i = read(fp, buffer, 1024);
+ }
+ }
+ (void) close(fp);
+}
+
+#endif
+
+#ifdef DEF_PLAY
+void
+play_sound(char *string)
+{
+ char progrun[BUFSIZ];
+
+ (void) sprintf(progrun, "( %s%s ) 2>&1", DEF_PLAY, string);
+ /*(void) printf("( %s%s ) 2>&1\n", DEF_PLAY, string); */
+ (void) system(progrun);
+}
+
+#endif
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)sphere.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * sphere.c - Draw a bunch of shaded spheres for xlock,
+ * the X Window System lockscreen.
+ *
+ * Copyright (c) 1988 by Sun Microsystems
+ *
+ * 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.
+ *
+ * Revision History:
+ * 30-May-97: <jwz@netscape.com> made it go vertically as well as horizontally.
+ * 27-May-97: <jwz@netscape.com> turned into a standalone program.
+ * 02-Sep-93: xlock version David Bagley <bagleyd@bigfoot.com>
+ * 1988: Revised to use SunView canvas instead of gfxsw Sun Microsystems
+ * 1982: Orignal Algorithm Tom Duff Lucasfilm Ltd.
+ */
+
+/*-
+ * original copyright
+ * **************************************************************************
+ * 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.
+ * ***************************************************************************
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Sphere"
+#define HACK_INIT init_sphere
+#define HACK_DRAW draw_sphere
+#define DEF_DELAY 1000
+#define DEF_CYCLES 20
+#define DEF_SIZE 0
+#define BRIGHT_COLORS
+#include "xlockmore.h" /* from the xscreensaver distribution */
+#else /* !STANDALONE */
+#include "xlock.h" /* from the xlockmore distribution */
+ModeSpecOpt sphere_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* !STANDALONE */
+
+/*-
+ * (NX, NY, NZ) is the light source vector -- length should be 100
+ */
+#define NX 48
+#define NY (-36)
+#define NZ 80
+#define NR 100
+#define SQRT(a) ((int)sqrt((double)(a)))
+
+typedef struct {
+ int width, height;
+ int radius;
+ int x0; /* x center */
+ int y0; /* y center */
+ int color;
+ int x, y;
+ int dirx, diry;
+ int maxx, maxy;
+ XPoint *points;
+} spherestruct;
+
+static spherestruct *spheres = NULL;
+
+void
+init_sphere(ModeInfo * mi)
+{
+ spherestruct *sp;
+
+ if (spheres == NULL) {
+ if ((spheres = (spherestruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (spherestruct))) == NULL)
+ return;
+ }
+ sp = &spheres[MI_SCREEN(mi)];
+
+ if (sp->points) {
+ (void) free((void *) sp->points);
+ sp->points = NULL;
+ }
+ sp->width = MI_WIN_WIDTH(mi);
+ sp->height = MI_WIN_HEIGHT(mi);
+ sp->points = (XPoint *) malloc(sp->height * sizeof (XPoint));
+
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+
+ sp->dirx = 1;
+}
+
+void
+draw_sphere(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ spherestruct *sp = &spheres[MI_SCREEN(mi)];
+ register minx = 0, maxx = 0, miny = 0, maxy = 0, npts = 0;
+
+ if ((sp->dirx && ABS(sp->x) >= sp->radius) ||
+ (sp->diry && ABS(sp->y) >= sp->radius)) {
+ sp->radius = NRAND(MIN(sp->width / 2, sp->height / 2) - 1) + 1;
+
+ if (LRAND() & 1) {
+ sp->dirx = (LRAND() & 1) * 2 - 1;
+ sp->diry = 0;
+ } else {
+ sp->dirx = 0;
+ sp->diry = (LRAND() & 1) * 2 - 1;
+ }
+ sp->x0 = NRAND(sp->width);
+ sp->y0 = NRAND(sp->height);
+
+ sp->x = -sp->radius * sp->dirx;
+ sp->y = -sp->radius * sp->diry;
+
+ if (MI_NPIXELS(mi) > 2)
+ sp->color = NRAND(MI_NPIXELS(mi));
+ }
+ if (sp->dirx == 1) {
+ if (sp->x0 + sp->x < 0)
+ sp->x = -sp->x0;
+ } else if (sp->dirx == -1) {
+ if (sp->x0 + sp->x >= sp->width)
+ sp->x = sp->width - sp->x0 - 1;
+ }
+ if (sp->diry == 1) {
+ if (sp->y0 + sp->y < 0)
+ sp->y = -sp->y0;
+ } else if (sp->diry == -1) {
+ if (sp->y0 + sp->y >= sp->height)
+ sp->y = sp->height - sp->y0 - 1;
+ }
+ if (sp->dirx) {
+ sp->maxy = SQRT(sp->radius * sp->radius - sp->x * sp->x);
+ miny = -sp->maxy;
+ if (sp->y0 - sp->maxy < 0)
+ miny = -sp->y0;
+ maxy = sp->maxy;
+ }
+ if (sp->diry) {
+ sp->maxx = SQRT(sp->radius * sp->radius - sp->y * sp->y);
+ minx = -sp->maxx;
+ if (sp->x0 - sp->maxx < 0)
+ minx = -sp->x0;
+ maxx = sp->maxx;
+ }
+ if (sp->dirx) {
+ if (sp->y0 + sp->maxy >= sp->height)
+ maxy = sp->height - sp->y0;
+ }
+ if (sp->diry) {
+ if (sp->x0 + sp->maxx >= sp->width)
+ maxx = sp->width - sp->x0;
+ }
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+
+ if (sp->dirx)
+ XDrawLine(display, MI_WINDOW(mi), gc,
+ sp->x0 + sp->x, sp->y0 + miny, sp->x0 + sp->x, sp->y0 + maxy);
+ if (sp->diry)
+ XDrawLine(display, MI_WINDOW(mi), gc,
+ sp->x0 + minx, sp->y0 + sp->y, sp->x0 + maxx, sp->y0 + sp->y);
+
+ if (MI_NPIXELS(mi) > 2)
+ XSetForeground(display, gc, MI_PIXEL(mi, sp->color));
+ else
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+
+ if (sp->dirx)
+ for (sp->y = miny; sp->y <= maxy; sp->y++)
+ if ((NRAND(sp->radius * NR)) <=
+ (NX * sp->x + NY * sp->y + NZ *
+ SQRT(sp->radius * sp->radius - sp->x * sp->x - sp->y * sp->y))) {
+ sp->points[npts].x = sp->x + sp->x0;
+ sp->points[npts].y = sp->y + sp->y0;
+ npts++;
+ }
+ if (sp->diry)
+ for (sp->x = minx; sp->x <= maxx; sp->x++)
+ if ((NRAND(sp->radius * NR)) <=
+ (NX * sp->x + NY * sp->y + NZ *
+ SQRT(sp->radius * sp->radius - sp->x * sp->x - sp->y * sp->y))) {
+ sp->points[npts].x = sp->x + sp->x0;
+ sp->points[npts].y = sp->y + sp->y0;
+ npts++;
+ }
+ XDrawPoints(display, MI_WINDOW(mi), gc, sp->points, npts, CoordModeOrigin);
+ if (sp->dirx == 1) {
+ sp->x++;
+ if (sp->x0 + sp->x >= sp->width)
+ sp->x = sp->radius;
+ } else if (sp->dirx == -1) {
+ sp->x--;
+ if (sp->x0 + sp->x < 0)
+ sp->x = -sp->radius;
+ }
+ if (sp->diry == 1) {
+ sp->y++;
+ if (sp->y0 + sp->y >= sp->height)
+ sp->y = sp->radius;
+ } else if (sp->diry == -1) {
+ sp->y--;
+ if (sp->y0 + sp->y < 0)
+ sp->y = -sp->radius;
+ }
+}
+
+void
+release_sphere(ModeInfo * mi)
+{
+ if (spheres != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ spherestruct *sp = &spheres[screen];
+
+ if (sp->points) {
+ (void) free((void *) sp->points);
+ sp->points = NULL;
+ }
+ }
+ (void) free((void *) spheres);
+ spheres = NULL;
+ }
+}
+
+void
+refresh_sphere(ModeInfo * mi)
+{
+ spherestruct *sp = &spheres[MI_SCREEN(mi)];
+
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+ sp->x = -sp->radius;
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)spiral.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * spiral.c - low cpu screen design for xlock, the X Window System lockscreen.
+ *
+ * Copyright (c) 1994 by Darrick Brown.
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: jwz@netscape.com: turned into a standalone program.
+ * 24-Jul-95: Fix to allow cycles not to have an arbitrary value by
+ * Peter Schmitzberger (schmitz@coma.sbg.ac.at).
+ * 06-Mar-95: Finished cleaning up and final testing.
+ * 03-Mar-95: Cleaned up code.
+ * 12-Jul-94: Written.
+ *
+ * Idea based on a graphics demo I saw a *LONG* time ago.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Spiral"
+#define HACK_INIT init_spiral
+#define HACK_DRAW draw_spiral
+#define DEF_DELAY 5000
+#define DEF_BATCHCOUNT -40
+#define DEF_CYCLES 350
+#define SMOOTH_COLORS
+#include "xlockmore.h" /* from the xscreensaver distribution */
+#else /* !STANDALONE */
+#include "xlock.h" /* from the xlockmore distribution */
+ModeSpecOpt spiral_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* !STANDALONE */
+
+#define MAXTRAIL 512 /* The length of the trail */
+#define MAXDOTS 40
+#define MINDOTS 1
+#define TWOPI (2.0*M_PI) /* for convienence */
+#define JAGGINESS 4 /* This sets the "Craziness" of the spiral (I like 4) */
+#define SPEED 2.0
+
+/* How many segments to draw per cycle when redrawing */
+#define REDRAWSTEP 3
+
+
+typedef struct {
+ float hx, hy, ha, hr;
+} Traildots;
+
+typedef struct {
+ Traildots *traildots;
+ float cx, cy;
+ float angle;
+ float radius;
+ float dr, da;
+ float dx, dy;
+ int erase;
+ int inc;
+ float colors;
+ int width, height;
+ float top, bottom, left, right;
+ int dots, nlength;
+ int redrawing, redrawpos;
+} spiralstruct;
+
+static spiralstruct *spirals = NULL;
+
+static void draw_dots(ModeInfo * mi, int in);
+
+#define TFX(sp,x) ((int)((x/sp->right)*(float)sp->width))
+#define TFY(sp,y) ((int)((y/sp->top)*(float)sp->height))
+
+static void
+draw_dots(ModeInfo * mi, int in)
+{
+
+ float i, inc;
+ float x, y;
+
+ spiralstruct *sp = &spirals[MI_SCREEN(mi)];
+
+ inc = TWOPI / (float) sp->dots;
+ for (i = 0.0; i < TWOPI; i += inc) {
+ x = sp->traildots[in].hx + COSF(i + sp->traildots[in].ha) *
+ sp->traildots[in].hr;
+ y = sp->traildots[in].hy + SINF(i + sp->traildots[in].ha) *
+ sp->traildots[in].hr;
+ XDrawPoint(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ TFX(sp, x), TFY(sp, y));
+ }
+}
+
+void
+init_spiral(ModeInfo * mi)
+{
+ spiralstruct *sp;
+ int i;
+
+ if (spirals == NULL) {
+ if ((spirals = (spiralstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (spiralstruct))) == NULL)
+ return;
+ }
+ sp = &spirals[MI_SCREEN(mi)];
+
+ sp->width = MI_WIN_WIDTH(mi);
+ sp->height = MI_WIN_HEIGHT(mi);
+
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+
+ /* Init */
+ sp->nlength = MI_CYCLES(mi);
+
+ if (!sp->traildots)
+ sp->traildots = (Traildots *) malloc(sp->nlength * sizeof (Traildots));
+
+ /* initialize the allocated array */
+ for (i = 0; i < sp->nlength; i++) {
+ sp->traildots[i].hx = 0.0;
+ sp->traildots[i].hy = 0.0;
+ sp->traildots[i].ha = 0.0;
+ sp->traildots[i].hr = 0.0;
+ }
+ sp->redrawing = 0;
+
+ /* keep the window parameters proportional */
+ sp->top = 10000.0;
+ sp->bottom = 0;
+ sp->right = (float) (sp->width) / (float) (sp->height) * (10000.0);
+ sp->left = 0;
+
+ /* assign the initial values */
+ sp->cx = (float) (5000.0 - NRAND(2000)) / 10000.0 * sp->right;
+ sp->cy = (float) (5000.0 - NRAND(2000));
+ sp->radius = (float) (NRAND(200) + 200);
+ sp->angle = 0.0;
+ sp->dx = (float) (10 - NRAND(20)) * SPEED;
+ sp->dy = (float) (10 - NRAND(20)) * SPEED;
+ sp->dr = (float) ((NRAND(10) + 4) * (1 - (LRAND() & 1) * 2));
+ sp->da = (float) NRAND(360) / 7200.0 + 0.01;
+ if (MI_NPIXELS(mi) > 2)
+ sp->colors = (float) NRAND(MI_NPIXELS(mi));
+ sp->erase = 0;
+ sp->inc = 0;
+ sp->traildots[sp->inc].hx = sp->cx;
+ sp->traildots[sp->inc].hy = sp->cy;
+ sp->traildots[sp->inc].ha = sp->angle;
+ sp->traildots[sp->inc].hr = sp->radius;
+ sp->inc++;
+
+ sp->dots = MI_BATCHCOUNT(mi);
+ if (sp->dots < -MINDOTS)
+ sp->dots = NRAND(sp->dots - MINDOTS + 1) + MINDOTS;
+ /* Absolute minimum */
+ if (sp->dots < MINDOTS)
+ sp->dots = MINDOTS;
+}
+
+void
+draw_spiral(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ spiralstruct *sp = &spirals[MI_SCREEN(mi)];
+ int i, j;
+
+ if (sp->erase == 1) {
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ draw_dots(mi, sp->inc);
+ }
+ sp->cx += sp->dx;
+ sp->traildots[sp->inc].hx = sp->cx;
+
+ if ((sp->cx > 9000.0) || (sp->cx < 1000.0))
+ sp->dx *= -1.0;
+
+ sp->cy += sp->dy;
+ sp->traildots[sp->inc].hy = sp->cy;
+
+ if ((sp->cy > 9000.0) || (sp->cy < 1000.0))
+ sp->dy *= -1.0;
+
+ sp->radius += sp->dr;
+ sp->traildots[sp->inc].hr = sp->radius;
+
+ if ((sp->radius > 2500.0) && (sp->dr > 0.0))
+ sp->dr *= -1.0;
+ else if ((sp->radius < 50.0) && (sp->radius < 0.0))
+ sp->dr *= -1.0;
+
+ /* Randomly give some variations to: */
+
+ /* spiral direction (if it is within the boundaries) */
+ if ((NRAND(3000) < 1 * JAGGINESS) &&
+ (((sp->cx > 2000.0) && (sp->cx < 8000.0)) &&
+ ((sp->cy > 2000.0) && (sp->cy < 8000.0)))) {
+ sp->dx = (float) (10 - NRAND(20)) * SPEED;
+ sp->dy = (float) (10 - NRAND(20)) * SPEED;
+ }
+ /* The speed of the change in size of the spiral */
+ if (NRAND(3000) < 1 * JAGGINESS) {
+ if (LRAND() & 1)
+ sp->dr += (float) (NRAND(3) + 1);
+ else
+ sp->dr -= (float) (NRAND(3) + 1);
+
+ /* don't let it get too wild */
+ if (sp->dr > 18.0)
+ sp->dr = 18.0;
+ else if (sp->dr < 4.0)
+ sp->dr = 4.0;
+ }
+ /* The speed of rotation */
+ if (NRAND(3000) < 1 * JAGGINESS)
+ sp->da = (float) NRAND(360) / 7200.0 + 0.01;
+
+ /* Reverse rotation */
+ if (NRAND(3000) < 1 * JAGGINESS)
+ sp->da *= -1.0;
+
+ sp->angle += sp->da;
+ sp->traildots[sp->inc].ha = sp->angle;
+
+ if (sp->angle > TWOPI)
+ sp->angle -= TWOPI;
+ else if (sp->angle < 0.0)
+ sp->angle += TWOPI;
+
+ sp->colors += (float) MI_NPIXELS(mi) / ((float) (2 * sp->nlength));
+ if (sp->colors >= (float) MI_NPIXELS(mi))
+ sp->colors = 0.0;
+
+ if (MI_NPIXELS(mi) > 2)
+ XSetForeground(display, gc, MI_PIXEL(mi, (int) sp->colors));
+ else
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+ draw_dots(mi, sp->inc);
+ sp->inc++;
+
+ if (sp->inc > sp->nlength - 1) {
+ sp->inc -= sp->nlength;
+ sp->erase = 1;
+ }
+ if (sp->redrawing) {
+ for (i = 0; i < REDRAWSTEP; i++) {
+ j = (sp->inc - sp->redrawpos + sp->nlength) % sp->nlength;
+ draw_dots(mi, j);
+
+ if (++(sp->redrawpos) >= sp->nlength) {
+ sp->redrawing = 0;
+ break;
+ }
+ }
+ }
+}
+
+void
+release_spiral(ModeInfo * mi)
+{
+ if (spirals != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ spiralstruct *sp = &spirals[screen];
+
+ if (sp->traildots)
+ (void) free((void *) sp->traildots);
+ }
+ (void) free((void *) spirals);
+ spirals = NULL;
+ }
+}
+
+void
+refresh_spiral(ModeInfo * mi)
+{
+ spiralstruct *sp = &spirals[MI_SCREEN(mi)];
+
+ sp->redrawing = 1;
+ sp->redrawpos = 0;
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)spline.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * spline.c - spline fun for xlock, the X Window System lockscreen.
+ *
+ * Copyright (c) 1992 by Jef Poskanzer
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 13-Sep-96: changed FOLLOW to a runtime option "-erase"
+ * 17-Jan-96: added compile time option, FOLLOW to erase old splines like Qix
+ * thanks to Richard Duran <rduran@cs.utep.edu>
+ * 9-Mar-95: changed how batchcount is used
+ * 2-Sep-93: xlock version: David Bagley <bagleyd@bigfoot.com>
+ * 1992: X11 version Jef Poskanzer <jef@netcom.com>, <jef@well.sf.ca.us>
+ *
+ * spline fun #3
+ */
+
+/*-
+ * original copyright
+ * xsplinefun.c - X11 version of spline fun #3
+ * Displays colorful moving splines in the X11 root window.
+ * Copyright (C) 1992 by Jef Poskanzer
+ * 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 software is provided "as is" without express or
+ * implied warranty.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Spline"
+#define HACK_INIT init_spline
+#define HACK_DRAW draw_spline
+#define DEF_DELAY 30000
+#define DEF_BATCHCOUNT -6
+#define DEF_CYCLES 2048
+#define DEF_NCOLORS 200
+#define SPREAD_COLORS
+#define BRIGHT_COLORS
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+
+#endif /* STANDALONE */
+
+
+#define DEF_ERASE "False"
+
+static Bool erase;
+
+#ifndef STANDALONE
+static XrmOptionDescRec opts[] =
+{
+ {"-erase", ".spline.erase", XrmoptionNoArg, (caddr_t) "on"},
+ {"+erase", ".spline.erase", XrmoptionNoArg, (caddr_t) "off"}
+};
+static argtype vars[] =
+{
+ {(caddr_t *) & erase, "erase", "Erase", DEF_ERASE, t_Bool}
+};
+static OptionStruct desc[] =
+{
+ {"-/+erase", "turn on/off the following erase of splines"}
+};
+
+ModeSpecOpt spline_opts =
+{2, opts, 1, vars, desc};
+
+#endif /* !STANDALONE */
+
+#define MINPOINTS 3
+
+/* How many segments to draw per cycle when redrawing */
+#define REDRAWSTEP 3
+
+#define SPLINE_THRESH 5
+
+typedef struct {
+ XPoint pos, delta;
+} splinepointstruct;
+
+typedef struct {
+ /* ERASE stuff */
+ int first;
+ int last;
+ int max_delta;
+ XPoint **splineq;
+ int redrawing, redrawpos;
+ Bool erase;
+
+ int width;
+ int height;
+ int color;
+ int points;
+ int nsplines;
+ splinepointstruct *pt;
+} splinestruct;
+
+static splinestruct *splines = NULL;
+
+static void XDrawSpline(Display * display, Drawable d, GC gc,
+ int x0, int y0, int x1, int y1, int x2, int y2);
+
+void
+init_spline(ModeInfo * mi)
+{
+ splinestruct *sp;
+ int i;
+
+ if (splines == NULL) {
+ if ((splines = (splinestruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (splinestruct))) == NULL)
+ return;
+ }
+ sp = &splines[MI_SCREEN(mi)];
+
+ sp->erase = erase;
+ if (MI_WIN_IS_FULLRANDOM(mi))
+ sp->erase = (Bool) (LRAND() & 1);
+
+ sp->width = MI_WIN_WIDTH(mi);
+ sp->height = MI_WIN_HEIGHT(mi);
+ /* batchcount is the upper bound on the number of points */
+ sp->points = MI_BATCHCOUNT(mi);
+ if (sp->points < -MINPOINTS) {
+ if (sp->pt) {
+ (void) free((void *) sp->pt);
+ sp->pt = NULL;
+ }
+ if (sp->erase) {
+ if (sp->splineq)
+ for (i = 0; i < sp->nsplines; ++i)
+ if (sp->splineq[i]) {
+ (void) free((void *) sp->splineq[i]);
+ sp->splineq[i] = NULL;
+ }
+ }
+ sp->points = NRAND(-sp->points - MINPOINTS + 1) + MINPOINTS;
+ } else if (sp->points < MINPOINTS)
+ sp->points = MINPOINTS;
+ if (!sp->pt)
+ sp->pt = (splinepointstruct *) malloc(sp->points *
+ sizeof (splinepointstruct));
+
+ if (sp->erase) {
+ sp->max_delta = 16;
+ sp->redrawing = 0;
+ sp->last = 0;
+ sp->nsplines = MI_CYCLES(mi) / 64 + 1; /* So as to be compatible */
+ if (!sp->splineq)
+ sp->splineq = (XPoint **) calloc(sp->nsplines, sizeof (XPoint *));
+ for (i = 0; i < sp->nsplines; ++i)
+ if (!sp->splineq[i])
+ sp->splineq[i] = (XPoint *) calloc(sp->points, sizeof (XPoint));
+ } else {
+ sp->max_delta = 3;
+ sp->nsplines = 0;
+ }
+
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+
+ /* Initialize points. */
+ for (i = 0; i < sp->points; ++i) {
+ sp->pt[i].pos.x = NRAND(sp->width);
+ sp->pt[i].pos.y = NRAND(sp->height);
+ sp->pt[i].delta.x = NRAND(sp->max_delta * 2) - sp->max_delta;
+ if (sp->pt[i].delta.x <= 0 && sp->width > 1)
+ --sp->pt[i].delta.x;
+ sp->pt[i].delta.y = NRAND(sp->max_delta * 2) - sp->max_delta;
+ if (sp->pt[i].delta.y <= 0 && sp->height > 1)
+ --sp->pt[i].delta.y;
+ }
+ if (MI_NPIXELS(mi) > 2)
+ sp->color = NRAND(MI_NPIXELS(mi));
+}
+
+void
+draw_spline(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ splinestruct *sp = &splines[MI_SCREEN(mi)];
+ int i, t, px, py, zx, zy, nx, ny;
+
+ if (sp->erase)
+ sp->first = (sp->last + 2) % sp->nsplines;
+
+ /* Move the points. */
+ for (i = 0; i < sp->points; i++) {
+ for (;;) {
+ t = sp->pt[i].pos.x + sp->pt[i].delta.x;
+ if (t >= 0 && t < sp->width)
+ break;
+ sp->pt[i].delta.x = NRAND(sp->max_delta * 2) - sp->max_delta;
+ if (sp->pt[i].delta.x <= 0 && sp->width > 1)
+ --sp->pt[i].delta.x;
+ }
+ sp->pt[i].pos.x = t;
+ for (;;) {
+ t = sp->pt[i].pos.y + sp->pt[i].delta.y;
+ if (t >= 0 && t < sp->height)
+ break;
+ sp->pt[i].delta.y = NRAND(sp->max_delta * 2) - sp->max_delta;
+ if (sp->pt[i].delta.y <= 0 && sp->height > 1)
+ --sp->pt[i].delta.y;
+ }
+ sp->pt[i].pos.y = t;
+ }
+
+ if (sp->erase) {
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+
+ /* Erase first figure. */
+ px = zx = (sp->splineq[sp->first][0].x +
+ sp->splineq[sp->first][sp->points - 1].x) / 2;
+ py = zy = (sp->splineq[sp->first][0].y +
+ sp->splineq[sp->first][sp->points - 1].y) / 2;
+ for (i = 0; i < sp->points - 1; ++i) {
+ nx = (sp->splineq[sp->first][i + 1].x +
+ sp->splineq[sp->first][i].x) / 2;
+ ny = (sp->splineq[sp->first][i + 1].y +
+ sp->splineq[sp->first][i].y) / 2;
+ XDrawSpline(display, window, gc,
+ px, py, sp->splineq[sp->first][i].x,
+ sp->splineq[sp->first][i].y, nx, ny);
+ px = nx;
+ py = ny;
+ }
+
+ XDrawSpline(display, window, gc,
+ px, py, sp->splineq[sp->first][sp->points - 1].x,
+ sp->splineq[sp->first][sp->points - 1].y, zx, zy);
+ }
+ if (MI_NPIXELS(mi) > 2) {
+ XSetForeground(display, gc, MI_PIXEL(mi, sp->color));
+ if (++sp->color >= MI_NPIXELS(mi))
+ sp->color = 0;
+ } else
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+
+ /* Draw the figure. */
+ px = zx = (sp->pt[0].pos.x + sp->pt[sp->points - 1].pos.x) / 2;
+ py = zy = (sp->pt[0].pos.y + sp->pt[sp->points - 1].pos.y) / 2;
+ for (i = 0; i < sp->points - 1; ++i) {
+ nx = (sp->pt[i + 1].pos.x + sp->pt[i].pos.x) / 2;
+ ny = (sp->pt[i + 1].pos.y + sp->pt[i].pos.y) / 2;
+ XDrawSpline(display, window, gc,
+ px, py, sp->pt[i].pos.x, sp->pt[i].pos.y, nx, ny);
+ px = nx;
+ py = ny;
+ }
+
+ XDrawSpline(display, window, gc, px, py,
+ sp->pt[sp->points - 1].pos.x, sp->pt[sp->points - 1].pos.y, zx, zy);
+
+ if (sp->erase) {
+ for (i = 0; i < sp->points; ++i) {
+ sp->splineq[sp->last][i].x = sp->pt[i].pos.x;
+ sp->splineq[sp->last][i].y = sp->pt[i].pos.y;
+ }
+ sp->last++;
+ if (sp->last >= sp->nsplines)
+ sp->last = 0;
+
+ if (sp->redrawing) {
+ int j, k;
+
+ sp->redrawpos++;
+ /* This compensates for the changed sp->last
+ since last callback */
+
+ for (k = 0; k < REDRAWSTEP; k++) {
+ j = (sp->last - sp->redrawpos + sp->nsplines) %
+ sp->nsplines;
+#ifdef BACKWARDS
+ /* Draw backwards, probably will not see it,
+ but its the thought ... */
+ px = zx = (sp->splineq[j][0].x +
+ sp->splineq[j][sp->points - 1].x) / 2;
+ py = zy = (sp->splineq[j][0].y +
+ sp->splineq[j][sp->points - 1].y) / 2;
+ for (i = sp->points - 1; i > 0; --i) {
+ nx = (sp->splineq[j][i - 1].x +
+ sp->splineq[j][i].x) / 2;
+ ny = (sp->splineq[j][i - 1].y +
+ sp->splineq[j][i].y) / 2;
+ XDrawSpline(display, window, gc,
+ px, py, sp->splineq[j][i].x,
+ sp->splineq[j][i].y, nx, ny);
+ px = nx;
+ py = ny;
+ }
+
+ XDrawSpline(display, window, gc,
+ px, py, sp->splineq[j][0].x,
+ sp->splineq[j][0].y, zx, zy);
+#else
+ px = zx = (sp->splineq[j][0].x +
+ sp->splineq[j][sp->points - 1].x) / 2;
+ py = zy = (sp->splineq[j][0].y +
+ sp->splineq[j][sp->points - 1].y) / 2;
+ for (i = 0; i < sp->points - 1; ++i) {
+ nx = (sp->splineq[j][i + 1].x +
+ sp->splineq[j][i].x) / 2;
+ ny = (sp->splineq[j][i + 1].y +
+ sp->splineq[j][i].y) / 2;
+ XDrawSpline(display, window, gc,
+ px, py, sp->splineq[j][i].x,
+ sp->splineq[j][i].y, nx, ny);
+ px = nx;
+ py = ny;
+ }
+
+ XDrawSpline(display, window, gc,
+ px, py, sp->splineq[j][sp->points - 1].x,
+ sp->splineq[j][sp->points - 1].y, zx, zy);
+#endif
+ if (++(sp->redrawpos) >= sp->nsplines - 1) {
+ sp->redrawing = 0;
+ break;
+ }
+ }
+ }
+ } else if (++sp->nsplines > MI_CYCLES(mi))
+ init_spline(mi);
+}
+
+/* X spline routine. */
+
+static void
+XDrawSpline(Display * display, Drawable d, GC gc, int x0, int y0, int x1, int y1, int x2, int y2)
+{
+ register int xa, ya, xb, yb, xc, yc, xp, yp;
+
+ xa = (x0 + x1) / 2;
+ ya = (y0 + y1) / 2;
+ xc = (x1 + x2) / 2;
+ yc = (y1 + y2) / 2;
+ xb = (xa + xc) / 2;
+ yb = (ya + yc) / 2;
+
+ xp = (x0 + xb) / 2;
+ yp = (y0 + yb) / 2;
+ if (ABS(xa - xp) + ABS(ya - yp) > SPLINE_THRESH)
+ XDrawSpline(display, d, gc, x0, y0, xa, ya, xb, yb);
+ else
+ XDrawLine(display, d, gc, x0, y0, xb, yb);
+
+ xp = (x2 + xb) / 2;
+ yp = (y2 + yb) / 2;
+ if (ABS(xc - xp) + ABS(yc - yp) > SPLINE_THRESH)
+ XDrawSpline(display, d, gc, xb, yb, xc, yc, x2, y2);
+ else
+ XDrawLine(display, d, gc, xb, yb, x2, y2);
+}
+
+void
+release_spline(ModeInfo * mi)
+{
+ if (splines != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ splinestruct *sp = &splines[screen];
+ int i;
+
+ if (sp->pt)
+ (void) free((void *) sp->pt);
+ if (sp->splineq) {
+ for (i = 0; i < sp->nsplines; ++i)
+ if (sp->splineq[i])
+ (void) free((void *) sp->splineq[i]);
+ (void) free((void *) sp->splineq);
+ }
+ }
+ (void) free((void *) splines);
+ splines = NULL;
+ }
+}
+
+void
+refresh_spline(ModeInfo * mi)
+{
+ splinestruct *sp = &splines[MI_SCREEN(mi)];
+
+ if (sp->erase) {
+ sp->redrawing = 1;
+ sp->redrawpos = 1;
+ } else
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)star.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * Flying through an asteroid field for xlock, the X Window System
+ * lockscreen.
+ *
+ * Based on TI Explorer Lisp code by John Nguyen <johnn@hx.lcs.mit.edu>
+ * Copyright (c) 1992 by Jamie Zawinski
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-Oct-96: Renamed from rock. Added trek and rock options.
+ * Combined with features from star by Heath Rice
+ * <rice@asl.dl.nec.com>.
+ * The Enterprise flys by from a few different views.
+ * Also have one view of a Romulan ship.
+ * 7-Sep-96: Fixed problems with 3d mode <theiling@coli.uni-sb.de>
+ * 8-May-96: Blue on left instead of green for 3d. It seems more common
+ * than green. Use "-left3d Green" if you have the other kind.
+ * 17-Jan-96: 3D mode for star thanks to <theiling@coli.uni-sb.de>.
+ * Get out your 3D glasses, Red on right and Blue on left.
+ * 14-Apr-95: Jeremie PETIT <petit@aurora.unice.fr> added a "move" feature.
+ * 2-Sep-93: xlock version David Bagley <bagleyd@bigfoot.com>
+ * 1992: xscreensaver version Jamie Zawinski <jwz@netscape.com>
+ */
+
+/*-
+ * original copyright
+ * Copyright (c) 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.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Star"
+#define HACK_INIT init_star
+#define HACK_DRAW draw_star
+#define DEF_DELAY 40000
+#define DEF_BATCHCOUNT 100
+#define DEF_SIZE 100
+#define DEF_NCOLORS 200
+#define BRIGHT_COLORS
+#define DEF_3D False
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+
+#endif /* STANDALONE */
+
+#define DEF_TREK "0"
+#define DEF_ROCK "False"
+#define DEF_STRAIGHT "False"
+
+static int trek;
+static Bool rock;
+static Bool straight;
+
+#ifndef STANDALONE
+static XrmOptionDescRec opts[] =
+{
+ {"-trek", ".star.trek", XrmoptionSepArg, (caddr_t) NULL},
+ {"-rock", ".star.rock", XrmoptionNoArg, (caddr_t) "on"},
+ {"+rock", ".star.rock", XrmoptionNoArg, (caddr_t) "off"},
+ {"-straight", ".star.straight", XrmoptionNoArg, (caddr_t) "on"},
+ {"+straight", ".star.straight", XrmoptionNoArg, (caddr_t) "off"}
+};
+static argtype vars[] =
+{
+ {(caddr_t *) & trek, "trek", "Trek", DEF_TREK, t_Int},
+ {(caddr_t *) & rock, "rock", "Rock", DEF_ROCK, t_Bool},
+ {(caddr_t *) & straight, "straight", "Straight", DEF_STRAIGHT, t_Bool}
+};
+static OptionStruct desc[] =
+{
+ {"-trek num", "chance of a Star Trek encounter"},
+ {"-/+rock", "turn on/off rocks"},
+ {"-/+straight", "turn on/off spin and shifting origin"}
+};
+
+ModeSpecOpt star_opts =
+{5, opts, 3, vars, desc};
+#endif /* !STANDALONE */
+
+#include "bitmaps/trek-0.xbm" /* Enterprise TopLeft to BottomRight */
+#include "bitmaps/trek-1.xbm" /* Enterprise Right to Left */
+#ifdef ROMULAN /* Bitmap looks messed up to me. */
+#include "bitmaps/trek-2.xbm" /* Romulan (cloaked?) Right to Left */
+#define TREKIES 3
+#else
+#define TREKIES 2
+#endif
+
+/*-
+ * For 3d effect get some 3D glasses, right lens red, and left lens blue.
+ * Too bad monitors do not emit polarized light.
+ */
+
+#define MIN_STARS 1
+#define MIN_DEPTH 2 /* stars disappear when they get this close */
+#define MAX_DEPTH 60 /* this is where stars appear */
+#define MINSIZE 3 /* how small where pixmaps are not used */
+#define MAXSIZE 200 /* how big (in pixels) stars are at depth 1 */
+#define DEPTH_SCALE 100 /* how many ticks there are between depths */
+#define RESOLUTION 1000
+#define MAX_DEP 0.3 /* how far the displacement can be (percents) */
+#define DIRECTION_CHANGE_RATE 60
+#define MAX_DEP_SPEED 5 /* Maximum speed for movement */
+#define MOVE_STYLE 0 /* Only 0 and 1. Distinguishes the fact that
+ these are the stars that are moving (1)
+ or the stars source (0). */
+
+#define GETZDIFF(z) \
+ (MI_DELTA3D(mi)*40.0*(1.0-((MAX_DEPTH*DEPTH_SCALE/2)/(z+20.0*DEPTH_SCALE))))
+ /* the compiler needs to optimize the calculations here */
+
+/*-
+ 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.
+ */
+
+#define TREKBITS(n,w,h)\
+ sp->trekPixmaps[sp->init_treks++]=\
+ XCreateBitmapFromData(display,window,(char *)n,w,h)
+
+
+typedef struct {
+ int real_size;
+ int r;
+ unsigned long color;
+ int theta;
+ int depth;
+ int size, x, y;
+ int diff;
+} astar;
+
+typedef struct {
+ XPoint loc, delta, size;
+} trekstruct;
+
+typedef struct {
+ int width, height;
+ int midx, midy;
+ int rotate_p, speed, nstars;
+ float max_dep;
+ int move_p;
+ int dep_x, dep_y;
+ int max_star_size;
+ astar *astars;
+ Pixmap *pixmaps;
+ Pixmap trekPixmaps[TREKIES];
+ int init_treks;
+ int current_trek;
+ GC stippledGC;
+ trekstruct trek;
+} starstruct;
+
+static float cos_array[RESOLUTION], sin_array[RESOLUTION];
+static double depths[(MAX_DEPTH + 1) * DEPTH_SCALE];
+
+static starstruct *stars = NULL;
+
+static void star_reset(ModeInfo * mi, astar * astars);
+static void star_tick(ModeInfo * mi, astar * astars, int d);
+static void star_compute(ModeInfo * mi, astar * astars);
+static void star_draw(ModeInfo * mi, astar * astars, int draw_p);
+static void init_pixmaps(ModeInfo * mi);
+static void tick_stars(ModeInfo * mi, int d);
+static int compute_move(starstruct * sp, int axe);
+
+static void
+star_reset(ModeInfo * mi, astar * astars)
+{
+ starstruct *sp = &stars[MI_SCREEN(mi)];
+
+ astars->real_size = sp->max_star_size;
+ astars->r = (int) (RESOLUTION * 0.7 + NRAND(30 * RESOLUTION));
+ astars->theta = NRAND(RESOLUTION);
+ astars->depth = MAX_DEPTH * DEPTH_SCALE;
+ if (MI_NPIXELS(mi) > 2)
+ astars->color = MI_PIXEL(mi, NRAND(MI_NPIXELS(mi)));
+ else
+ astars->color = MI_WIN_WHITE_PIXEL(mi);
+ star_compute(mi, astars);
+ star_draw(mi, astars, True);
+}
+
+static void
+star_tick(ModeInfo * mi, astar * astars, int d)
+{
+ starstruct *sp = &stars[MI_SCREEN(mi)];
+
+ if (astars->depth > 0) {
+ star_draw(mi, astars, False);
+ astars->depth -= sp->speed;
+ if (sp->rotate_p)
+ astars->theta = (astars->theta + d) % RESOLUTION;
+ while (astars->theta < 0)
+ astars->theta += RESOLUTION;
+ if (astars->depth < (MIN_DEPTH * DEPTH_SCALE))
+ astars->depth = 0;
+ else {
+ star_compute(mi, astars);
+ star_draw(mi, astars, True);
+ }
+ } else if (!NRAND(40))
+ star_reset(mi, astars);
+}
+
+static void
+star_compute(ModeInfo * mi, astar * astars)
+{
+ starstruct *sp = &stars[MI_SCREEN(mi)];
+ double factor = depths[astars->depth];
+ double rsize = astars->real_size * factor;
+
+ astars->size = (int) (rsize + 0.5);
+ astars->diff = (int) (int) GETZDIFF(astars->depth);
+ astars->x = sp->midx + (int) (cos_array[astars->theta] * astars->r * factor);
+ astars->y = sp->midy + (int) (sin_array[astars->theta] * astars->r * factor);
+ if (sp->move_p) {
+ double move_factor = (double) (MOVE_STYLE - (double) astars->depth /
+ (double) ((MAX_DEPTH + 1) * (double) DEPTH_SCALE));
+
+ /* move_factor is 0 when the star is close, 1 when far */
+ astars->x += (int) ((double) sp->dep_x * move_factor);
+ astars->y += (int) ((double) sp->dep_y * move_factor);
+ }
+}
+
+static void
+draw_trek(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ starstruct *sp = &stars[MI_SCREEN(mi)];
+ int new_one = 0;
+
+ if (TREKIES == sp->current_trek)
+ if (NRAND(10000) < trek) {
+ sp->current_trek = NRAND(TREKIES);
+ new_one = 1;
+ switch (sp->current_trek) {
+ case 0:
+ if (LRAND() & 1) { /* Top to Right */
+ sp->trek.loc.x = NRAND(sp->width);
+ sp->trek.loc.y = -trek0_height;
+ } else { /* Left to Bottom */
+ sp->trek.loc.x = -trek0_width;
+ sp->trek.loc.y = NRAND(sp->height);
+ }
+ sp->trek.delta.x = NRAND(3) + 1;
+ sp->trek.delta.y = NRAND(3) + 1;
+ sp->trek.size.x = trek0_width;
+ sp->trek.size.y = trek0_height;
+ break;
+ case 1:
+ sp->trek.loc.x = sp->width;
+ sp->trek.loc.y = NRAND(sp->height);
+ sp->trek.delta.x = -(NRAND(3) + 1);
+ sp->trek.delta.y = NRAND(7) - 4;
+ sp->trek.size.x = trek1_width;
+ sp->trek.size.y = trek1_height;
+ break;
+#ifdef ROMULAN
+ case 2:
+ sp->trek.loc.x = sp->width;
+ sp->trek.loc.y = NRAND(sp->height);
+ sp->trek.delta.x = -(NRAND(3) + 1);
+ sp->trek.delta.y = NRAND(7) - 4;
+ sp->trek.size.x = trek2_width;
+ sp->trek.size.y = trek2_height;
+ break;
+#endif
+ default:
+ break;
+ }
+ }
+ if (TREKIES != sp->current_trek) {
+ sp->trek.loc.x += sp->trek.delta.x;
+ sp->trek.loc.y += sp->trek.delta.y;
+
+ if ((sp->trek.loc.x < -sp->trek.size.x) ||
+ (sp->trek.loc.y < -sp->trek.size.y) ||
+ (sp->trek.loc.y > sp->height) ||
+ (sp->trek.loc.x > sp->width)) {
+ sp->current_trek = TREKIES;
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XFillRectangle(display, window, gc,
+ sp->trek.loc.x - sp->trek.delta.x, sp->trek.loc.y - sp->trek.delta.y,
+ sp->trek.size.x, sp->trek.size.y);
+ } else {
+ XSetForeground(display, sp->stippledGC, MI_WIN_WHITE_PIXEL(mi));
+ XSetTSOrigin(display, sp->stippledGC, sp->trek.loc.x, sp->trek.loc.y);
+ XSetStipple(display, sp->stippledGC, sp->trekPixmaps[sp->current_trek]);
+ XSetFillStyle(display, sp->stippledGC, FillOpaqueStippled);
+ XFillRectangle(display, window, sp->stippledGC,
+ sp->trek.loc.x, sp->trek.loc.y,
+ sp->trek.size.x, sp->trek.size.y);
+
+ if (!new_one) {
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ ERASE_IMAGE(display, window, gc,
+ sp->trek.loc.x, sp->trek.loc.y,
+ (sp->trek.loc.x - sp->trek.delta.x),
+ (sp->trek.loc.y - sp->trek.delta.y),
+ sp->trek.size.x, sp->trek.size.y);
+
+ }
+ }
+ }
+}
+
+static void
+star_draw(ModeInfo * mi, astar * astars, int draw_p)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ starstruct *sp = &stars[MI_SCREEN(mi)];
+
+ if (draw_p) {
+ if (MI_WIN_IS_USE3D(mi)) {
+ if (MI_WIN_IS_INSTALL(mi))
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_NONE_COLOR(mi));
+ else
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ } else
+ XSetForeground(display, gc, astars->color);
+ } else
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ if (astars->x <= 0 || astars->y <= 0 ||
+ astars->x >= sp->width || astars->y >= sp->height) {
+ /* this means that if a star 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 star would have been visible again.
+ Oh well.
+ */
+ if (!sp->move_p)
+ astars->depth = 0;
+ return;
+ }
+ if (astars->size <= 1) {
+ if (MI_WIN_IS_USE3D(mi)) {
+ if (draw_p) {
+ if (MI_WIN_IS_INSTALL(mi))
+ XSetFunction(display, gc, GXor);
+ XSetForeground(display, gc, MI_LEFT_COLOR(mi));
+ }
+ XDrawPoint(display, window, gc, astars->x - astars->diff, astars->y);
+ if (draw_p)
+ XSetForeground(display, gc, MI_RIGHT_COLOR(mi));
+ XDrawPoint(display, window, gc, astars->x + astars->diff, astars->y);
+ if (draw_p && MI_WIN_IS_INSTALL(mi))
+ XSetFunction(display, gc, GXcopy);
+ } else
+ XDrawPoint(display, window, gc, astars->x, astars->y);
+ } else if (astars->size <= MINSIZE || !draw_p) {
+ if (MI_WIN_IS_USE3D(mi)) {
+ if (draw_p) {
+ if (MI_WIN_IS_INSTALL(mi))
+ XSetFunction(display, gc, GXor);
+ XSetForeground(display, gc, MI_LEFT_COLOR(mi));
+ }
+ XFillRectangle(display, window, gc,
+ astars->x - astars->size / 2 - astars->diff, astars->y - astars->size / 2,
+ astars->size, astars->size);
+ if (draw_p)
+ XSetForeground(display, gc, MI_RIGHT_COLOR(mi));
+ XFillRectangle(display, window, gc,
+ astars->x - astars->size / 2 + astars->diff, astars->y - astars->size / 2,
+ astars->size, astars->size);
+ if (draw_p && MI_WIN_IS_INSTALL(mi))
+ XSetFunction(display, gc, GXcopy);
+ } else
+ XFillRectangle(display, window, gc,
+ astars->x - astars->size / 2, astars->y - astars->size / 2,
+ astars->size, astars->size);
+ } else if (astars->size < sp->max_star_size) {
+ if (MI_WIN_IS_USE3D(mi)) {
+ if (MI_WIN_IS_INSTALL(mi))
+ XSetFunction(display, gc, GXor);
+ XSetForeground(display, gc, MI_LEFT_COLOR(mi));
+ XCopyPlane(display, sp->pixmaps[astars->size - MINSIZE], window, gc,
+ 0, 0, astars->size, astars->size,
+ astars->x - astars->size / 2 - astars->diff, astars->y - astars->size / 2,
+ 1L);
+ XSetForeground(display, gc, MI_RIGHT_COLOR(mi));
+ XCopyPlane(display, sp->pixmaps[astars->size - MINSIZE], window, gc,
+ 0, 0, astars->size, astars->size,
+ astars->x - astars->size / 2 + astars->diff, astars->y - astars->size / 2,
+ 1L);
+ if (MI_WIN_IS_INSTALL(mi))
+ XSetFunction(display, gc, GXcopy);
+ } else
+ XCopyPlane(display, sp->pixmaps[astars->size - MINSIZE], window, gc,
+ 0, 0, astars->size, astars->size,
+ astars->x - astars->size / 2, astars->y - astars->size / 2,
+ 1L);
+ }
+}
+
+static void
+init_pixmaps(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ starstruct *sp = &stars[MI_SCREEN(mi)];
+ int size = MI_SIZE(mi);
+ int i;
+ XGCValues gcv;
+ GC fg_gc = 0, bg_gc = 0;
+
+ if (size < -MINSIZE)
+ sp->max_star_size = NRAND(-size - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE)
+ sp->max_star_size = MINSIZE;
+ else
+ sp->max_star_size = size;
+ if (sp->max_star_size > MAXSIZE)
+ sp->max_star_size = MAXSIZE;
+ sp->pixmaps = (Pixmap *) calloc(sp->max_star_size, sizeof (Pixmap));
+ for (i = 0; i < sp->max_star_size; i++) {
+ int h = i + MINSIZE;
+ Pixmap p;
+ XPoint points[7];
+
+ if (rock)
+ p = XCreatePixmap(display, window, h, h, 1);
+ else /* Dunno why this is required */
+ p = XCreatePixmap(display, window, 2 * h, 2 * h, 1);
+ sp->pixmaps[i] = p;
+ if (!p) {
+ (void) fprintf(stderr, "Could not allocate pixmaps, in star\n");
+ return;
+ }
+ if (!fg_gc) { /* must use drawable of pixmap, not window (fmh) */
+ gcv.foreground = 1;
+ gcv.background = 0;
+ fg_gc = XCreateGC(display, p, GCForeground | GCBackground, &gcv);
+ }
+ if (!bg_gc) { /* must use drawable of pixmap, not window (fmh) */
+ gcv.foreground = 0;
+ gcv.background = 1;
+ bg_gc = XCreateGC(display, p, GCForeground | GCBackground, &gcv);
+ }
+ XFillRectangle(display, p, bg_gc, 0, 0, h, h);
+ if (rock) {
+ points[0].x = (int) ((double) h * 0.15);
+ points[0].y = (int) ((double) h * 0.85);
+ points[1].x = (int) ((double) h * 0.00);
+ points[1].y = (int) ((double) h * 0.20);
+ points[2].x = (int) ((double) h * 0.30);
+ points[2].y = (int) ((double) h * 0.00);
+ points[3].x = (int) ((double) h * 0.40);
+ points[3].y = (int) ((double) h * 0.10);
+ points[4].x = (int) ((double) h * 0.90);
+ points[4].y = (int) ((double) h * 0.10);
+ points[5].x = (int) ((double) h * 1.00);
+ points[5].y = (int) ((double) h * 0.55);
+ points[6].x = (int) ((double) h * 0.45);
+ points[6].y = (int) ((double) h * 1.00);
+ XFillPolygon(display, p, fg_gc, points, 7, Nonconvex, CoordModeOrigin);
+ } else
+ XFillArc(display, p, fg_gc, 0, 0, h, h, 0, 23040);
+ }
+ XFreeGC(display, fg_gc);
+ XFreeGC(display, bg_gc);
+ if (!sp->stippledGC) {
+ gcv.foreground = MI_WIN_BLACK_PIXEL(mi);
+ gcv.background = MI_WIN_BLACK_PIXEL(mi);
+ if ((sp->stippledGC = XCreateGC(display, window,
+ GCForeground | GCBackground, &gcv)) == None)
+ return;
+ }
+ if (!sp->init_treks && trek) {
+/* PURIFY 4.0.1 on SunOS4 reports a 3264 byte memory leak on the next line. *
+ PURIFY 4.0.1 on Solaris 2 does not report this memory leak. */
+ TREKBITS(trek0_bits, trek0_width, trek0_height);
+ TREKBITS(trek1_bits, trek1_width, trek1_height);
+#ifdef ROMULAN
+ TREKBITS(trek2_bits, trek2_width, trek2_height);
+#endif
+ }
+}
+
+static void
+tick_stars(ModeInfo * mi, int d)
+{
+ starstruct *sp = &stars[MI_SCREEN(mi)];
+ int i;
+
+ if (sp->move_p) {
+ sp->dep_x = compute_move(sp, 0);
+ sp->dep_y = compute_move(sp, 1);
+ }
+ for (i = 0; i < sp->nstars; i++)
+ star_tick(mi, &sp->astars[i], d);
+}
+
+static int
+compute_move(starstruct * sp, int axe)
+ /* 0 for x, 1 for y */
+{
+ static int current_dep[2] =
+ {0, 0};
+ static int speed[2] =
+ {0, 0};
+ static short direction[2] =
+ {0, 0};
+ static int limit[2] =
+ {0, 0};
+ int change = 0;
+
+ limit[0] = sp->midx;
+ limit[1] = sp->midy;
+
+ current_dep[axe] += speed[axe]; /* We adjust the displacement */
+
+ if (current_dep[axe] > (int) (limit[axe] * sp->max_dep)) {
+ if (current_dep[axe] > limit[axe])
+ current_dep[axe] = limit[axe];
+ direction[axe] = -1;
+ } /* This is when we reach the upper screen limit */
+ if (current_dep[axe] < (int) (-limit[axe] * sp->max_dep)) {
+ if (current_dep[axe] < -limit[axe])
+ current_dep[axe] = -limit[axe];
+ direction[axe] = 1;
+ } /* This is when we reach the lower screen limit */
+ if (direction[axe] == 1) /* We adjust the speed */
+ speed[axe] += 1;
+ else if (direction[axe] == -1)
+ speed[axe] -= 1;
+
+ if (speed[axe] > MAX_DEP_SPEED)
+ speed[axe] = MAX_DEP_SPEED;
+ else if (speed[axe] < -MAX_DEP_SPEED)
+ speed[axe] = -MAX_DEP_SPEED;
+
+ if (!straight && !NRAND(DIRECTION_CHANGE_RATE)) {
+ /* We change direction */
+ change = LRAND() & 1;
+ if (change != 1) {
+ if (direction[axe] == 0)
+ direction[axe] = change - 1; /* 0 becomes either 1 or -1 */
+ else
+ direction[axe] = 0; /* -1 or 1 become 0 */
+ }
+ }
+ return (current_dep[axe]);
+}
+
+void
+init_star(ModeInfo * mi)
+{
+ starstruct *sp;
+ int i;
+ static int first = 1;
+
+ if (stars == NULL) {
+ if ((stars = (starstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (starstruct))) == NULL)
+ return;
+ }
+ sp = &stars[MI_SCREEN(mi)];
+
+ sp->width = MI_WIN_WIDTH(mi);
+ sp->height = MI_WIN_HEIGHT(mi);
+ sp->midx = sp->width / 2;
+ sp->midy = sp->height / 2;
+ sp->speed = 100;
+ sp->rotate_p = !straight;
+ sp->max_dep = (straight) ? 0 : MAX_DEP;
+ sp->move_p = True;
+ sp->dep_x = 0;
+ sp->dep_y = 0;
+ sp->current_trek = TREKIES;
+ sp->nstars = MI_BATCHCOUNT(mi);
+ if (sp->nstars < -MIN_STARS) {
+ if (sp->astars) {
+ (void) free((void *) sp->astars);
+ sp->astars = NULL;
+ }
+ sp->nstars = NRAND(-sp->nstars - MIN_STARS + 1) + MIN_STARS;
+ } else if (sp->nstars < MIN_STARS)
+ sp->nstars = MIN_STARS;
+ if (sp->speed < 1)
+ sp->speed = 1;
+ if (sp->speed > 100)
+ sp->speed = 100;
+
+ if (first) {
+ first = 0;
+ for (i = 0; i < RESOLUTION; i++) {
+ sin_array[i] = SINF((((float) i) / (RESOLUTION / 2.0)) * M_PI);
+ cos_array[i] = COSF((((float) i) / (RESOLUTION / 2.0)) * M_PI);
+ }
+ /* we actually only need i/speed of these, but wtf */
+ for (i = 1; i < (int) (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 */
+ }
+ if (!sp->astars)
+ sp->astars = (astar *) calloc(sp->nstars, sizeof (astar));
+ if (!sp->pixmaps)
+ init_pixmaps(mi);
+
+ /* don't want any exposure events from XCopyPlane */
+ XSetGraphicsExposures(MI_DISPLAY(mi), MI_GC(mi), False);
+ if (MI_WIN_IS_INSTALL(mi) && MI_WIN_IS_USE3D(mi)) {
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_NONE_COLOR(mi));
+ XFillRectangle(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ 0, 0, sp->width, sp->height);
+ } else
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+}
+
+void
+draw_star(ModeInfo * mi)
+{
+ static int current_delta = 0; /* observer Z rotation */
+ static int window_tick = 50;
+ static int new_delta = 0;
+ static int dchange_tick = 0;
+
+ if (window_tick++ == 50)
+ window_tick = 0;
+ if (current_delta != new_delta) {
+ if (dchange_tick++ == 5) {
+ dchange_tick = 0;
+ if (current_delta < new_delta)
+ current_delta++;
+ else
+ current_delta--;
+ }
+ } else {
+ if (!NRAND(50)) {
+ new_delta = (NRAND(11) - 5);
+ if (!NRAND(10))
+ new_delta *= 5;
+ }
+ }
+ tick_stars(mi, current_delta);
+ draw_trek(mi);
+}
+
+void
+release_star(ModeInfo * mi)
+{
+ if (stars != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ Display *display = MI_DISPLAY(mi);
+ starstruct *sp = &stars[screen];
+ int i;
+
+ if (sp->astars != NULL)
+ (void) free((void *) sp->astars);
+ if (sp->pixmaps != NULL) {
+ for (i = 0; i < sp->max_star_size; i++)
+ XFreePixmap(display, sp->pixmaps[i]);
+ (void) free((void *) sp->pixmaps);
+ }
+ if (sp->stippledGC != NULL)
+ XFreeGC(display, sp->stippledGC);
+ for (i = 0; i < sp->init_treks; i++)
+ XFreePixmap(display, sp->trekPixmaps[i]);
+ }
+ (void) free((void *) stars);
+ stars = NULL;
+ }
+}
+
+void
+refresh_star(ModeInfo * mi)
+{
+ /* Do nothing, it will refresh by itself */
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)strange.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * strange.c - Strange attractors for xlock, the X Window
+ * System lockscreen
+ *
+ * Copyright (c) 1997 by Massimino Pascal <Pascal.Massimon@ens.fr>
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: jwz@netscape.com: turned into a standalone program.
+ * Made it render into an offscreen bitmap and then copy
+ * that onto the screen, to reduce flicker.
+ *
+ * strange attractors are not so hard to find...
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Strange"
+#define HACK_INIT init_strange
+#define HACK_DRAW draw_strange
+#define DEF_DELAY 1000
+#define DEF_NCOLORS 100
+#define SMOOTH_COLORS
+#include "xlockmore.h" /* from the xscreensaver distribution */
+#else /* !STANDALONE */
+#include "xlock.h" /* from the xlockmore distribution */
+ModeSpecOpt strange_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* !STANDALONE */
+
+/*****************************************************/
+/*****************************************************/
+
+typedef float DBL;
+typedef int PRM;
+
+#define UNIT (1<<12)
+#define UNIT2 (1<<14)
+/* #define UNIT2 (3140*UNIT/1000) */
+
+#define SKIP_FIRST 100
+#define MAX_POINTS 5500
+#define DBL_To_PRM(x) (PRM)( (DBL)(UNIT)*(x) )
+
+
+#define DO_FOLD(a) (a)<0 ? -Fold[ (-(a))&(UNIT2-1) ] : Fold[ (a)&(UNIT2-1) ]
+
+#if 0
+#define DO_FOLD(a) (a)<-UNIT2 ? -Fold[(-(a))%UNIT2] : (a)<0 ? -Fold[ -(a) ] :\
+(a)>UNIT2 ? Fold[ (a)%UNIT2 ] : Fold[ (a) ]
+#define DO_FOLD(a) DBL_To_PRM( sin( (DBL)(a)/UNIT ) )
+#define DO_FOLD(a) (a)<0 ? DBL_To_PRM( exp( 16.0*(a)/UNIT2 ) )-1.0 : \
+DBL_To_PRM( 1.0-exp( -16.0*(a)/UNIT2 ) )
+#endif
+
+/******************************************************************/
+
+#define MAX_PRM 3*5
+
+typedef struct {
+ DBL Prm1[MAX_PRM], Prm2[MAX_PRM];
+ void (*Iterate) (PRM, PRM, PRM *, PRM *);
+ XPoint *Buffer1, *Buffer2;
+ int Cur_Pt, Max_Pt;
+ int Col, Count, Speed;
+ int Width, Height;
+ Pixmap dbuf; /* jwz */
+ GC dbuf_gc;
+} ATTRACTOR;
+
+static ATTRACTOR *Root;
+static PRM xmin, xmax, ymin, ymax;
+static PRM Prm[MAX_PRM];
+static PRM *Fold = NULL;
+
+/******************************************************************/
+/******************************************************************/
+
+static DBL Amp_Prm[MAX_PRM] =
+{
+ 1.0, 3.5, 3.5, 2.5, 4.7,
+ 1.0, 3.5, 3.6, 2.5, 4.7,
+ 1.0, 1.5, 2.2, 2.1, 3.5
+};
+static DBL Mid_Prm[MAX_PRM] =
+{
+ 0.0, 1.5, 0.0, .5, 1.5,
+ 0.0, 1.5, 0.0, .5, 1.5,
+ 0.0, 1.5, -1.0, -.5, 2.5,
+};
+
+static DBL
+Gauss_Rand(DBL c, DBL A, DBL S)
+{
+ DBL y;
+
+ y = (DBL) LRAND() / MAXRAND;
+ y = A * (1.0 - exp(-y * y * S)) / (1.0 - exp(-S));
+ if (NRAND(2))
+ return (c + y);
+ else
+ return (c - y);
+}
+
+static void
+Random_Prm(DBL * Prm)
+{
+ int i;
+
+ for (i = 0; i < MAX_PRM; ++i)
+ Prm[i] = Gauss_Rand(Mid_Prm[i], Amp_Prm[i], 4.0);
+}
+
+/***************************************************************/
+
+ /* 2 examples of non-linear map */
+
+static void
+Iterate_X2(PRM x, PRM y, PRM * xo, PRM * yo)
+{
+ PRM xx, yy, xy, x2y, y2x, Tmp;
+
+ xx = (x * x) / UNIT;
+ x2y = (xx * y) / UNIT;
+ yy = (y * y) / UNIT;
+ y2x = (yy * x) / UNIT;
+ xy = (x * y) / UNIT;
+
+ Tmp = Prm[1] * xx + Prm[2] * xy + Prm[3] * yy + Prm[4] * x2y;
+ Tmp = Prm[0] - y + (Tmp / UNIT);
+ *xo = DO_FOLD(Tmp);
+ Tmp = Prm[6] * xx + Prm[7] * xy + Prm[8] * yy + Prm[9] * y2x;
+ Tmp = Prm[5] + x + (Tmp / UNIT);
+ *yo = DO_FOLD(Tmp);
+}
+
+static void
+Iterate_X3(PRM x, PRM y, PRM * xo, PRM * yo)
+{
+ PRM xx, yy, xy, x2y, y2x, Tmp_x, Tmp_y, Tmp_z;
+
+ xx = (x * x) / UNIT;
+ x2y = (xx * y) / UNIT;
+ yy = (y * y) / UNIT;
+ y2x = (yy * x) / UNIT;
+ xy = (x * y) / UNIT;
+
+ Tmp_x = Prm[1] * xx + Prm[2] * xy + Prm[3] * yy + Prm[4] * x2y;
+ Tmp_x = Prm[0] - y + (Tmp_x / UNIT);
+ Tmp_x = DO_FOLD(Tmp_x);
+
+ Tmp_y = Prm[6] * xx + Prm[7] * xy + Prm[8] * yy + Prm[9] * y2x;
+ Tmp_y = Prm[5] + x + (Tmp_y / UNIT);
+
+ Tmp_y = DO_FOLD(Tmp_y);
+
+ Tmp_z = Prm[11] * xx + Prm[12] * xy + Prm[13] * yy + Prm[14] * y2x;
+ Tmp_z = Prm[10] + x + (Tmp_z / UNIT);
+ Tmp_z = UNIT + Tmp_z * Tmp_z / UNIT;
+
+ *xo = (Tmp_x * UNIT) / Tmp_z;
+ *yo = (Tmp_y * UNIT) / Tmp_z;
+}
+
+static void (*Funcs[2]) (PRM, PRM, PRM *, PRM *) = {
+ Iterate_X2, Iterate_X3
+};
+
+/***************************************************************/
+
+void
+draw_strange(ModeInfo * mi)
+{
+ int i, j, n, Max_Colors, Cur_Pt;
+ PRM x, y, xo, yo;
+ DBL u;
+ ATTRACTOR *A;
+ XPoint *Buf;
+ Display *display;
+ GC gc;
+ Window window;
+ DBL Lx, Ly;
+ void (*Iterate) (PRM, PRM, PRM *, PRM *);
+
+ display = MI_DISPLAY(mi);
+ window = MI_WINDOW(mi);
+ gc = MI_GC(mi);
+ Max_Colors = MI_NPIXELS(mi);
+
+ A = &Root[MI_SCREEN(mi)];
+
+ Cur_Pt = A->Cur_Pt;
+ Iterate = A->Iterate;
+
+ u = (DBL) (A->Count) / 1000.0;
+ for (j = MAX_PRM - 1; j >= 0; --j)
+ Prm[j] = DBL_To_PRM((1.0 - u) * A->Prm1[j] + u * A->Prm2[j]);
+
+ x = y = DBL_To_PRM(.0);
+ for (n = SKIP_FIRST; n; --n) {
+ (*Iterate) (x, y, &xo, &yo);
+ x = xo + NRAND(8) - 4;
+ y = yo + NRAND(8) - 4;
+ }
+
+ xmax = 0;
+ xmin = UNIT * 4;
+ ymax = 0;
+ ymin = UNIT * 4;
+ A->Cur_Pt = 0;
+ Buf = A->Buffer2;
+ Lx = (DBL) A->Width / UNIT / 2.2;
+ Ly = (DBL) A->Height / UNIT / 2.2;
+ for (n = A->Max_Pt; n; --n) {
+ (*Iterate) (x, y, &xo, &yo);
+ Buf->x = (short) (Lx * (x + DBL_To_PRM(1.1)));
+ Buf->y = (short) (Ly * (DBL_To_PRM(1.1) - y));
+ /* (void) fprintf( stderr, "X,Y: %d %d ", Buf->x, Buf->y ); */
+ Buf++;
+ A->Cur_Pt++;
+ if (xo > xmax)
+ xmax = xo;
+ else if (xo < xmin)
+ xmin = xo;
+ if (yo > ymax)
+ ymax = yo;
+ else if (yo < ymin)
+ ymin = yo;
+ x = xo + NRAND(8) - 4;
+ y = yo + NRAND(8) - 4;
+ }
+
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+
+ if (A->dbuf) { /* jwz */
+ XSetForeground(display, A->dbuf_gc, 0);
+/* XDrawPoints(display, A->dbuf, A->dbuf_gc, A->Buffer1,
+ Cur_Pt,CoordModeOrigin); */
+ XFillRectangle(display, A->dbuf, A->dbuf_gc, 0, 0, A->Width, A->Height);
+ } else
+ XDrawPoints(display, window, gc, A->Buffer1, Cur_Pt, CoordModeOrigin);
+
+ if (Max_Colors < 2)
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+ else
+ XSetForeground(display, gc, MI_PIXEL(mi, A->Col % Max_Colors));
+
+ if (A->dbuf) {
+ XSetForeground(display, A->dbuf_gc, 1);
+ XDrawPoints(display, A->dbuf, A->dbuf_gc, A->Buffer2, A->Cur_Pt,
+ CoordModeOrigin);
+ } else
+ XDrawPoints(display, window, gc, A->Buffer2, A->Cur_Pt, CoordModeOrigin);
+
+ if (A->dbuf)
+ XCopyPlane(display, A->dbuf, window, gc, 0, 0, A->Width, A->Height, 0, 0, 1);
+
+ Buf = A->Buffer1;
+ A->Buffer1 = A->Buffer2;
+ A->Buffer2 = Buf;
+
+ if ((xmax - xmin < DBL_To_PRM(.2)) && (ymax - ymin < DBL_To_PRM(.2)))
+ A->Count += 4 * A->Speed;
+ else
+ A->Count += A->Speed;
+ if (A->Count >= 1000) {
+ for (i = MAX_PRM - 1; i >= 0; --i)
+ A->Prm1[i] = A->Prm2[i];
+ Random_Prm(A->Prm2);
+ A->Count = 0;
+ }
+ A->Col++;
+}
+
+
+/***************************************************************/
+
+void
+init_strange(ModeInfo * mi)
+{
+ ATTRACTOR *Attractor;
+
+ if (Root == NULL) {
+ Root = (ATTRACTOR *) calloc(
+ MI_NUM_SCREENS(mi), sizeof (ATTRACTOR));
+ if (Root == NULL)
+ return;
+ }
+ if (Fold == NULL) {
+ int i;
+
+ Fold = (PRM *) calloc(UNIT2 + 1, sizeof (PRM));
+ if (Fold == NULL)
+ return;
+ for (i = 0; i <= UNIT2; ++i) {
+ DBL x;
+
+ /* x = ( DBL )(i)/UNIT2; */
+ /* x = sin( M_PI/2.0*x ); */
+ /* x = sqrt( x ); */
+ /* x = x*x; */
+ /* x = x*(1.0-x)*4.0; */
+ x = (DBL) (i) / UNIT;
+ x = sin(x);
+ Fold[i] = DBL_To_PRM(x);
+ }
+ }
+ Attractor = &Root[MI_SCREEN(mi)];
+
+ Attractor->Buffer1 = (XPoint *) calloc(MAX_POINTS, sizeof (XPoint));
+ if (Attractor->Buffer1 == NULL)
+ goto Abort;
+ Attractor->Buffer2 = (XPoint *) calloc(MAX_POINTS, sizeof (XPoint));
+ if (Attractor->Buffer2 == NULL)
+ goto Abort;
+ Attractor->Max_Pt = MAX_POINTS;
+
+ Attractor->Width = MI_WIN_WIDTH(mi);
+ Attractor->Height = MI_WIN_HEIGHT(mi);
+ Attractor->Cur_Pt = 0;
+ Attractor->Count = 0;
+ Attractor->Col = NRAND(MI_NPIXELS(mi));
+ Attractor->Speed = 4;
+
+ Attractor->Iterate = Funcs[NRAND(2)];
+ Random_Prm(Attractor->Prm1);
+ Random_Prm(Attractor->Prm2);
+
+ Attractor->dbuf = XCreatePixmap(MI_DISPLAY(mi), MI_WINDOW(mi),
+ Attractor->Width, Attractor->Height, 1);
+ if (Attractor->dbuf) {
+ XGCValues gcv;
+
+ gcv.foreground = 0;
+ gcv.background = 0;
+ gcv.function = GXcopy;
+ Attractor->dbuf_gc = XCreateGC(MI_DISPLAY(mi), Attractor->dbuf,
+ GCForeground | GCBackground | GCFunction,
+ &gcv);
+ XFillRectangle(MI_DISPLAY(mi), Attractor->dbuf,
+ Attractor->dbuf_gc, 0, 0, Attractor->Width,
+ Attractor->Height);
+ XSetBackground(MI_DISPLAY(mi), MI_GC(mi), MI_WIN_BLACK_PIXEL(mi));
+ XSetFunction(MI_DISPLAY(mi), MI_GC(mi), GXcopy);
+ }
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+ return;
+
+ Abort:
+ if (Attractor->Buffer1 != NULL)
+ free(Attractor->Buffer1);
+ if (Attractor->Buffer2 != NULL)
+ free(Attractor->Buffer2);
+ Attractor->Buffer1 = NULL;
+ Attractor->Buffer2 = NULL;
+ Attractor->Cur_Pt = 0;
+ return;
+}
+
+/***************************************************************/
+
+void
+release_strange(ModeInfo * mi)
+{
+ int i;
+
+ if (Root == NULL)
+ return;
+
+ for (i = 0; i < MI_NUM_SCREENS(mi); ++i) {
+ if (Root[i].Buffer1 != NULL)
+ free(Root[i].Buffer1);
+ if (Root[i].Buffer2 != NULL)
+ free(Root[i].Buffer2);
+ if (Root[i].dbuf)
+ XFreePixmap(MI_DISPLAY(mi), Root[i].dbuf);
+ if (Root[i].dbuf_gc)
+ XFreeGC(MI_DISPLAY(mi), Root[i].dbuf_gc);
+ }
+ free(Root);
+ Root = NULL;
+ if (Fold != NULL)
+ free(Fold);
+ Fold = NULL;
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)swarm.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * swarm.c - swarm of bees 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 31-Aug-90: Adapted from xswarm by Jeff Butterworth <butterwo@ncsc.org>
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Swarm"
+#define HACK_INIT init_swarm
+#define HACK_DRAW draw_swarm
+#define DEF_DELAY 10000
+#define DEF_BATCHCOUNT 100
+#define BRIGHT_COLORS
+#include "xlockmore.h" /* from the xscreensaver distribution */
+#include <X11/Xutil.h>
+#else /* !STANDALONE */
+#include "xlock.h" /* from the xlockmore distribution */
+ModeSpecOpt swarm_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* !STANDALONE */
+
+#define TIMES 4 /* number of time positions recorded */
+#define BEEACC 2 /* acceleration of bees */
+#define WASPACC 5 /* maximum acceleration of wasp */
+#define BEEVEL 12 /* maximum bee velocity */
+#define WASPVEL 10 /* maximum wasp velocity */
+
+/* Macros */
+#define X(t,b) (sp->x[(t)*sp->beecount+(b)])
+#define Y(t,b) (sp->y[(t)*sp->beecount+(b)])
+#define balance_rand(v) ((NRAND(v))-((v)/2)) /* random number around 0 */
+
+typedef struct {
+ int pix;
+ int width;
+ int height;
+ int border; /* wasp won't go closer than this to the edge */
+ int beecount; /* number of bees */
+ XSegment *segs; /* bee lines */
+ XSegment *old_segs; /* old bee lines */
+ short *x;
+ short *y; /* bee positions x[time][bee#] */
+ short *xv;
+ short *yv; /* bee velocities xv[bee#] */
+ short wx[3];
+ short wy[3];
+ short wxv;
+ short wyv;
+} swarmstruct;
+
+static swarmstruct *swarms = NULL;
+
+void
+init_swarm(ModeInfo * mi)
+{
+ swarmstruct *sp;
+ int b;
+
+ if (swarms == NULL) {
+ if ((swarms = (swarmstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (swarmstruct))) == NULL)
+ return;
+ }
+ sp = &swarms[MI_SCREEN(mi)];
+
+ sp->beecount = MI_BATCHCOUNT(mi);
+ if (sp->beecount < 0) {
+ /* if sp->beecount is random ... the size can change */
+ if (sp->segs != NULL) {
+ (void) free((void *) sp->segs);
+ sp->segs = NULL;
+ }
+ if (sp->old_segs != NULL) {
+ (void) free((void *) sp->old_segs);
+ sp->old_segs = NULL;
+ }
+ if (sp->x != NULL) {
+ (void) free((void *) sp->x);
+ sp->x = NULL;
+ }
+ if (sp->y != NULL) {
+ (void) free((void *) sp->y);
+ sp->y = NULL;
+ }
+ if (sp->xv != NULL) {
+ (void) free((void *) sp->xv);
+ sp->xv = NULL;
+ }
+ if (sp->yv != NULL) {
+ (void) free((void *) sp->yv);
+ sp->yv = NULL;
+ }
+ sp->beecount = NRAND(-sp->beecount) + 1; /* Add 1 so its not too boring */
+ }
+ sp->width = MI_WIN_WIDTH(mi);
+ sp->height = MI_WIN_HEIGHT(mi);
+ sp->border = (sp->width + sp->height) / 50;
+
+ /* Clear the background. */
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+
+ /* Allocate memory. */
+
+ if (!sp->segs) {
+ sp->segs = (XSegment *) malloc(sizeof (XSegment) * sp->beecount);
+ sp->old_segs = (XSegment *) malloc(sizeof (XSegment) * sp->beecount);
+ sp->x = (short *) malloc(sizeof (short) * sp->beecount * TIMES);
+ sp->y = (short *) malloc(sizeof (short) * sp->beecount * TIMES);
+ sp->xv = (short *) malloc(sizeof (short) * sp->beecount);
+ sp->yv = (short *) malloc(sizeof (short) * sp->beecount);
+ }
+ /* Initialize point positions, velocities, etc. */
+ if (MI_NPIXELS(mi) > 2)
+ sp->pix = NRAND(MI_NPIXELS(mi));
+
+ /* wasp */
+ sp->wx[0] = sp->border + NRAND(sp->width - 2 * sp->border);
+ sp->wy[0] = sp->border + NRAND(sp->height - 2 * sp->border);
+ sp->wx[1] = sp->wx[0];
+ sp->wy[1] = sp->wy[0];
+ sp->wxv = 0;
+ sp->wyv = 0;
+
+ /* bees */
+ for (b = 0; b < sp->beecount; b++) {
+ X(0, b) = NRAND(sp->width);
+ X(1, b) = X(0, b);
+ Y(0, b) = NRAND(sp->height);
+ Y(1, b) = Y(0, b);
+ sp->xv[b] = balance_rand(7);
+ sp->yv[b] = balance_rand(7);
+ }
+}
+
+void
+draw_swarm(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ swarmstruct *sp = &swarms[MI_SCREEN(mi)];
+ int b;
+
+ /* <=- Wasp -=> */
+ /* Age the arrays. */
+ sp->wx[2] = sp->wx[1];
+ sp->wx[1] = sp->wx[0];
+ sp->wy[2] = sp->wy[1];
+ sp->wy[1] = sp->wy[0];
+ /* Accelerate */
+ sp->wxv += balance_rand(WASPACC);
+ sp->wyv += balance_rand(WASPACC);
+
+ /* Speed Limit Checks */
+ if (sp->wxv > WASPVEL)
+ sp->wxv = WASPVEL;
+ if (sp->wxv < -WASPVEL)
+ sp->wxv = -WASPVEL;
+ if (sp->wyv > WASPVEL)
+ sp->wyv = WASPVEL;
+ if (sp->wyv < -WASPVEL)
+ sp->wyv = -WASPVEL;
+
+ /* Move */
+ sp->wx[0] = sp->wx[1] + sp->wxv;
+ sp->wy[0] = sp->wy[1] + sp->wyv;
+
+ /* Bounce Checks */
+ if ((sp->wx[0] < sp->border) || (sp->wx[0] > sp->width - sp->border - 1)) {
+ sp->wxv = -sp->wxv;
+ sp->wx[0] += sp->wxv;
+ }
+ if ((sp->wy[0] < sp->border) || (sp->wy[0] > sp->height - sp->border - 1)) {
+ sp->wyv = -sp->wyv;
+ sp->wy[0] += sp->wyv;
+ }
+ /* Don't let things settle down. */
+ sp->xv[NRAND(sp->beecount)] += balance_rand(3);
+ sp->yv[NRAND(sp->beecount)] += balance_rand(3);
+
+ /* <=- Bees -=> */
+ for (b = 0; b < sp->beecount; b++) {
+ int distance, dx, dy;
+
+ /* Age the arrays. */
+ X(2, b) = X(1, b);
+ X(1, b) = X(0, b);
+ Y(2, b) = Y(1, b);
+ Y(1, b) = Y(0, b);
+
+ /* Accelerate */
+ dx = sp->wx[1] - X(1, b);
+ dy = sp->wy[1] - Y(1, b);
+ distance = abs(dx) + abs(dy); /* approximation */
+ if (distance == 0)
+ distance = 1;
+ sp->xv[b] += (dx * BEEACC) / distance;
+ sp->yv[b] += (dy * BEEACC) / distance;
+
+ /* Speed Limit Checks */
+ if (sp->xv[b] > BEEVEL)
+ sp->xv[b] = BEEVEL;
+ if (sp->xv[b] < -BEEVEL)
+ sp->xv[b] = -BEEVEL;
+ if (sp->yv[b] > BEEVEL)
+ sp->yv[b] = BEEVEL;
+ if (sp->yv[b] < -BEEVEL)
+ sp->yv[b] = -BEEVEL;
+
+ /* Move */
+ X(0, b) = X(1, b) + sp->xv[b];
+ Y(0, b) = Y(1, b) + sp->yv[b];
+
+ /* Fill the segment lists. */
+ sp->segs[b].x1 = X(0, b);
+ sp->segs[b].y1 = Y(0, b);
+ sp->segs[b].x2 = X(1, b);
+ sp->segs[b].y2 = Y(1, b);
+ sp->old_segs[b].x1 = X(1, b);
+ sp->old_segs[b].y1 = Y(1, b);
+ sp->old_segs[b].x2 = X(2, b);
+ sp->old_segs[b].y2 = Y(2, b);
+ }
+
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XDrawLine(display, window, gc,
+ sp->wx[1], sp->wy[1], sp->wx[2], sp->wy[2]);
+ XDrawSegments(display, window, gc, sp->old_segs, sp->beecount);
+
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+ XDrawLine(display, window, gc,
+ sp->wx[0], sp->wy[0], sp->wx[1], sp->wy[1]);
+ if (MI_NPIXELS(mi) > 2) {
+ XSetForeground(display, gc, MI_PIXEL(mi, sp->pix));
+ if (++sp->pix >= MI_NPIXELS(mi))
+ sp->pix = 0;
+ }
+ XDrawSegments(display, window, gc, sp->segs, sp->beecount);
+}
+
+void
+release_swarm(ModeInfo * mi)
+{
+ if (swarms != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ swarmstruct *sp = &swarms[screen];
+
+ if (sp->segs != NULL)
+ (void) free((void *) sp->segs);
+ if (sp->old_segs != NULL)
+ (void) free((void *) sp->old_segs);
+ if (sp->x != NULL)
+ (void) free((void *) sp->x);
+ if (sp->y != NULL)
+ (void) free((void *) sp->y);
+ if (sp->xv != NULL)
+ (void) free((void *) sp->xv);
+ if (sp->yv != NULL)
+ (void) free((void *) sp->yv);
+ }
+ (void) free((void *) swarms);
+ swarms = NULL;
+ }
+}
+
+void
+refresh_swarm(ModeInfo * mi)
+{
+ /* Do nothing, it will refresh by itself */
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)swirl.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * swirl.c - swirly patterns for xlock, the X Window
+ * System lockscreen
+ *
+ * Copyright (c) 1994 M.Dobie <mrd@ecs.soton.ac.uk>
+ *
+ * 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.
+ *
+ * Revision History:
+ * 13-May-97: jwz@netscape.com: turned into a standalone program.
+ * 21-Apr-95: improved startup time for TrueColour displays
+ * (limited to 16bpp to save memory) S.Early <sde1000@cam.ac.uk>
+ * 09-Jan-95: fixed colour maps (more colourful) and the image now spirals
+ * outwards from the centre with a fixed number of points drawn
+ * every iteration. Thanks to M.Dobie <mrd@ecs.soton.ac.uk>.
+ * 1994: written. Copyright (c) 1994 M.Dobie <mrd@ecs.soton.ac.uk>
+ * based on original code by R.Taylor
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Swirl"
+#define HACK_INIT init_swirl
+#define HACK_DRAW draw_swirl
+#define DEF_DELAY 5000
+#define DEF_BATCHCOUNT 5
+#define DEF_NCOLORS 200
+#define SMOOTH_COLORS
+#define WRITABLE_COLORS
+#include "xlockmore.h" /* from the xscreensaver distribution */
+#include <X11/Xutil.h>
+#else /* !STANDALONE */
+#include "xlock.h" /* from the xlockmore distribution */
+ModeSpecOpt swirl_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* !STANDALONE */
+
+#include <time.h>
+
+/****************************************************************/
+
+#define MASS 4 /* maximum mass of a knot */
+#define MIN_RES 5 /* minimim resolution (>= MIN_RES) */
+#define MAX_RES 1 /* maximum resolution (>0) */
+#define TWO_PLANE_PCNT 30 /* probability for two plane mode (0-100) */
+#define RESTART 2500 /* number of cycles before restart */
+#define BATCH_DRAW 100 /* points to draw per iteration */
+
+/* knot types */
+typedef enum {
+ NONE = 0,
+ ORBIT = (1 << 0),
+ WHEEL = (1 << 1),
+ PICASSO = (1 << 2),
+ RAY = (1 << 3),
+ HOOK = (1 << 4),
+ ALL = (1 << 5)
+} KNOT_T;
+
+/* a knot */
+typedef struct Knot {
+ int x, y; /* position */
+ int m; /* mass */
+ KNOT_T t; /* type in the first (or only) plane */
+ KNOT_T T; /* type in second plane if there is one */
+ int M; /* mass in second plane if there is one */
+} KNOT , *KNOT_P;
+
+/* a colour specification */
+typedef struct Colour {
+ unsigned short r, g, b;
+} COLOUR , *COLOUR_P;
+
+/* drawing direction */
+typedef enum {
+ DRAW_RIGHT, DRAW_DOWN, DRAW_LEFT, DRAW_UP
+} DIR_T;
+
+/****************************************************************/
+
+/* data associated with a swirl window */
+typedef struct swirl_data {
+ /* window paramaters */
+ Window win; /* the window */
+ int width, height; /* window size */
+ int depth; /* depth */
+ int rdepth; /* real depth (for XImage) */
+ Visual *visual; /* visual */
+
+ /* swirl drawing parameters */
+ int n_knots; /* number of knots */
+ KNOT_P knots; /* knot details */
+ KNOT_T knot_type; /* general type of knots */
+ int resolution; /* drawing resolution, 1..5 */
+ int max_resolution; /* maximum resolution, MAX_RES */
+ int r; /* pixel step */
+ Bool two_plane; /* two plane mode? */
+ Bool first_plane; /* doing first plane? */
+ int start_again; /* when to restart */
+
+ /* spiral drawing parameters */
+ int x, y; /* current point */
+ DIR_T direction; /* current direction */
+ int dir_todo, dir_done; /* how many points in current direction? */
+ int batch_todo, batch_done; /* how many points in this batch */
+ Bool started, drawing; /* are we drawing? */
+
+ /* image stuff */
+ unsigned char *image; /* image data */
+ XImage *ximage;
+
+ /* colours stuff */
+ int colours; /* how many colours possible */
+ int dcolours; /* how many colours for shading */
+ Bool monochrome; /* monochrome? */
+ Colormap cmap; /* colour map for the window */
+ XColor *rgb_values; /* colour definitions array */
+ Bool off_screen;
+#ifndef STANDALONE
+ Bool fixed_colourmap; /* fixed colourmap? */
+ int current_map; /* current colour map, 0..dcolours-1 */
+ unsigned long fg, bg, white, black; /* black and white pixel values */
+ int shift; /* colourmap shift */
+ int dshift; /* colourmap shift while drawing */
+ XColor fgcol, bgcol; /* foreground and background colour specs */
+#endif /* !STANDALONE */
+} SWIRL , *SWIRL_P;
+
+#ifndef STANDALONE
+#define SWIRLCOLOURS 13
+/* basic colours */
+static COLOUR basic_colours[SWIRLCOLOURS];
+
+#endif /* !STANDALONE */
+
+/* an array of swirls for each screen */
+static SWIRL_P swirls = NULL;
+
+/*-
+ random_no
+
+ Return a random integer between 0 and n inclusive
+
+ - n is the maximum number
+
+ Returns a random integer */
+
+static int
+random_no(unsigned int n)
+{
+ return ((int) ((n + 1) * (double) LRAND() / MAXRAND));
+}
+
+/****************************************************************/
+
+/*-
+ initialise_swirl
+
+ Initialise all the swirl data
+
+ - swirl is the swirl data */
+
+static void
+initialise_swirl(ModeInfo * mi, SWIRL_P swirl)
+{
+#ifndef STANDALONE
+ Display *display = MI_DISPLAY(mi);
+
+#endif /* !STANDALONE */
+
+ swirl->width = 0; /* width and height of window */
+ swirl->height = 0;
+ swirl->depth = 1;
+ swirl->rdepth = 1;
+ swirl->visual = NULL;
+ swirl->resolution = MIN_RES + 1; /* current resolution */
+ swirl->max_resolution = MAX_RES; /* maximum resolution */
+ swirl->n_knots = 0; /* number of knots */
+ swirl->knot_type = ALL; /* general type of knots */
+ swirl->two_plane = False; /* two plane mode? */
+ swirl->first_plane = False; /* doing first plane? */
+ swirl->start_again = -1; /* restart counter */
+
+ /* drawing parameters */
+ swirl->x = 0;
+ swirl->y = 0;
+ swirl->started = False;
+ swirl->drawing = False;
+
+ /* image stuff */
+ swirl->image = NULL; /* image data */
+ swirl->ximage = NULL;
+
+ /* colours stuff */
+ swirl->colours = 0; /* how many colours possible */
+ swirl->dcolours = 0; /* how many colours for shading */
+ swirl->cmap = (Colormap) NULL;
+ swirl->rgb_values = NULL; /* colour definitions array */
+
+#ifndef STANDALONE
+ swirl->current_map = 0; /* current colour map, 0..dcolours-1 */
+
+ /* set up fg fb colour specs */
+ swirl->white = MI_WIN_WHITE_PIXEL(mi);
+ swirl->black = MI_WIN_BLACK_PIXEL(mi);
+ swirl->fg = MI_FG_COLOR(mi);
+ swirl->bg = MI_BG_COLOR(mi);
+ swirl->fgcol.pixel = swirl->fg;
+ swirl->bgcol.pixel = swirl->bg;
+ XQueryColor(display, MI_WIN_COLORMAP(mi), &(swirl->fgcol));
+ XQueryColor(display, MI_WIN_COLORMAP(mi), &(swirl->bgcol));
+#endif /* !STANDALONE */
+}
+
+/****************************************************************/
+
+/*-
+ * initialise_image
+ *
+ * Initialise the image for drawing to
+ *
+ * - swirl is the swirl data
+ */
+static void
+initialise_image(Display * dpy, SWIRL_P swirl)
+{
+ unsigned int pad;
+ int bytes_per_line;
+ int image_depth = swirl->rdepth;
+ int data_depth = image_depth;
+
+ /* On SGIs at least, using an XImage of depth 24 on a Visual of depth 24
+ * requires the XImage data to use 32 bits per pixel. I don't understand
+ * how one is supposed to determine this -- maybe XListPixmapFormats?
+ * But on systems that don't work this way, allocating 32 bpp instead of
+ * 24 will be wasteful but non-fatal. -- jwz, 16-May-97.
+ */
+ if (data_depth >= 24 && data_depth < 32)
+ data_depth = 32;
+
+ /* get the bitmap pad */
+ pad = BitmapPad(dpy);
+ /* destroy the old image (destroy XImage and data) */
+ if (swirl->ximage != NULL)
+ XDestroyImage(swirl->ximage);
+
+ /* how many bytes per line? (bits rounded up to pad) */
+ bytes_per_line = ((swirl->width * data_depth + pad - 1) / pad) * (pad / 8);
+
+ /* allocate space for the image */
+ swirl->image = (unsigned char *) calloc(bytes_per_line * swirl->height, 1);
+
+ /* create an ximage with this */
+ swirl->ximage = XCreateImage(dpy, swirl->visual, image_depth, ZPixmap,
+ 0, (char *) swirl->image, swirl->width,
+ swirl->height, pad, bytes_per_line);
+}
+
+/****************************************************************/
+#ifndef STANDALONE
+
+/*-
+ * initialise_colours
+ *
+ * Initialise the list of colours from which the colourmaps are derived
+ *
+ * - colours is the array to initialise
+ * - saturation is the saturation value to use 0->grey,
+ * 1.0->full saturation
+ */
+static void
+initialise_colours(COLOUR * colours, float saturate)
+{
+ int i;
+
+ /* start off fully saturated, medium and bright colours */
+ colours[0].r = 0xA000;
+ colours[0].g = 0x0000;
+ colours[0].b = 0x0000;
+ colours[1].r = 0xD000;
+ colours[1].g = 0x0000;
+ colours[1].b = 0x0000;
+ colours[2].r = 0x0000;
+ colours[2].g = 0x6000;
+ colours[2].b = 0x0000;
+ colours[3].r = 0x0000;
+ colours[3].g = 0x9000;
+ colours[3].b = 0x0000;
+ colours[4].r = 0x0000;
+ colours[4].g = 0x0000;
+ colours[4].b = 0xC000;
+ colours[5].r = 0x0000;
+ colours[5].g = 0x0000;
+ colours[5].b = 0xF000;
+ colours[6].r = 0xA000;
+ colours[6].g = 0x6000;
+ colours[6].b = 0x0000;
+ colours[7].r = 0xD000;
+ colours[7].g = 0x9000;
+ colours[7].b = 0x0000;
+ colours[8].r = 0xA000;
+ colours[8].g = 0x0000;
+ colours[8].b = 0xC000;
+ colours[9].r = 0xD000;
+ colours[9].g = 0x0000;
+ colours[9].b = 0xF000;
+ colours[10].r = 0x0000;
+ colours[10].g = 0x6000;
+ colours[10].b = 0xC000;
+ colours[11].r = 0x0000;
+ colours[11].g = 0x9000;
+ colours[11].b = 0xF000;
+ colours[12].r = 0xA000;
+ colours[12].g = 0xA000;
+ colours[12].b = 0xA000;
+
+ /* add white for low saturation */
+ for (i = 0; i < SWIRLCOLOURS - 1; i++) {
+ unsigned short max_rg, max;
+
+ /* what is the max intensity for this colour? */
+ max_rg = (colours[i].r > colours[i].g) ? colours[i].r : colours[i].g;
+ max = (max_rg > colours[i].b) ? max_rg : colours[i].b;
+
+ /* bring elements up to max as saturation approaches 0.0 */
+ colours[i].r += (unsigned short) ((float) (1.0 - saturate) *
+ ((float) max - colours[i].r));
+ colours[i].g += (unsigned short) ((float) (1.0 - saturate) *
+ ((float) max - colours[i].g));
+ colours[i].b += (unsigned short) ((float) (1.0 - saturate) *
+ ((float) max - colours[i].b));
+ }
+}
+
+/****************************************************************/
+
+/*-
+ * set_black_and_white
+ *
+ * Set the entries for foreground & background pixels and
+ * WhitePixel & BlackPixel in an array of colour specifications.
+ *
+ * - swirl is the swirl data
+ * - values is the array of specifications
+ */
+static void
+set_black_and_white(SWIRL_P swirl, XColor * values)
+{
+ unsigned long white, black;
+
+ /* where is black and white? */
+ white = swirl->white;
+ black = swirl->black;
+
+ /* set black and white up */
+ values[white].flags = DoRed | DoGreen | DoBlue;
+ values[white].pixel = white;
+ values[white].red = 0xFFFF;
+ values[white].green = 0xFFFF;
+ values[white].blue = 0xFFFF;
+ values[black].flags = DoRed | DoGreen | DoBlue;
+ values[black].pixel = black;
+ values[black].red = 0;
+ values[black].green = 0;
+ values[black].blue = 0;
+
+ /* copy the colour specs from the original entries */
+ values[swirl->fg] = swirl->fgcol;
+ values[swirl->bg] = swirl->bgcol;
+}
+
+/****************************************************************/
+
+/*-
+ * set_colour
+ *
+ * Set an entry in an array of XColor specifications. The given entry will be
+ * set to the given colour. If the entry corresponds to the foreground,
+ * background, WhitePixel, or BlackPixel it is ignored and the given colour
+ * is is put in the next entry.
+ *
+ * Therefore, the given colour may be placed up to four places after the
+ * specified entry in the array, if foreground, background, white, or black
+ * intervene.
+ *
+ * - swirl is the swirl data
+ * - value points to a pointer to the array entry. It gets updated to
+ * point to the next free entry.
+ * - pixel points to the current pixel number. It gets updated.
+ * - c points to the colour to add
+ */
+static void
+set_colour(SWIRL_P swirl, XColor ** value, unsigned long *pixel, COLOUR_P c)
+{
+ Bool done;
+ unsigned long fg, bg, white, black;
+
+ /* where are foreground, background, white, and black? */
+ fg = swirl->fg;
+ bg = swirl->bg;
+ white = swirl->white;
+ black = swirl->black;
+
+ /* haven't set it yet */
+ done = False;
+
+ /* try and set the colour */
+ while (!done) {
+ (**value).flags = DoRed | DoGreen | DoBlue;
+ (**value).pixel = *pixel;
+
+ /* white, black, fg, bg, or a colour? */
+ if ((*pixel != fg) && (*pixel != bg) &&
+ (*pixel != white) && (*pixel != black)) {
+ (**value).red = c->r;
+ (**value).green = c->g;
+ (**value).blue = c->b;
+
+ /* now we've done it */
+ done = True;
+ }
+ /* next pixel */
+ (*value)++;
+ (*pixel)++;
+ }
+}
+
+/****************************************************************/
+
+/*-
+ * get_colour
+ *
+ * Get an entry from an array of XColor specifications. The next colour from
+ * the array will be returned. Foreground, background, WhitePixel, or
+ * BlackPixel will be ignored.
+ *
+ * - swirl is the swirl data
+ * - value points the array entry. It is updated to point to the entry
+ * following the one returned.
+ * - c is set to the colour found
+ */
+static void
+get_colour(SWIRL_P swirl, XColor ** value, COLOUR_P c)
+{
+ Bool done;
+ unsigned long fg, bg, white, black;
+
+ /* where is white and black? */
+ fg = swirl->fg;
+ bg = swirl->bg;
+ white = swirl->white;
+ black = swirl->black;
+
+ /* haven't set it yet */
+ done = False;
+
+ /* try and set the colour */
+ while (!done) {
+ /* black, white or a colour? */
+ if (((*value)->pixel != fg) && ((*value)->pixel != bg) &&
+ ((*value)->pixel != white) && ((*value)->pixel != black)) {
+ c->r = (*value)->red;
+ c->g = (*value)->green;
+ c->b = (*value)->blue;
+
+ /* now we've done it */
+ done = True;
+ }
+ /* next value */
+ (*value)++;
+ }
+}
+
+/****************************************************************/
+
+/*-
+ * interpolate
+ *
+ * Generate n colours between c1 and c2. n XColors at *value are set up with
+ * ascending pixel values.
+ *
+ * If the pixel range includes BlackPixel or WhitePixel they are set to black
+ * and white respectively but otherwise ignored. Therefore, up to n+2 colours
+ * may actually be set by this function.
+ *
+ * - swirl is the swirl data
+ * - values points a pointer to an array of XColors to update
+ * - pixel points to the pixel number to start at
+ * - k n is the number of colours to generate
+ * - c1, c2 are the colours to interpolate between
+ */
+static void
+interpolate(SWIRL_P swirl, XColor ** values, unsigned long *pixel, int n, COLOUR_P c1, COLOUR_P c2)
+{
+ int i, r, g, b;
+ COLOUR c;
+ unsigned short maxv;
+
+ /* maximum value */
+ maxv = (255 << 8);
+
+ for (i = 0; i < n / 2 && (int) *pixel < swirl->colours; i++) {
+ /* work out the colour */
+ r = c1->r + 2 * i * ((int) c2->r) / n;
+ c.r = (r > (int) maxv) ? maxv : r;
+ g = c1->g + 2 * i * ((int) c2->g) / n;
+ c.g = (g > (int) maxv) ? maxv : g;
+ b = c1->b + 2 * i * ((int) c2->b) / n;
+ c.b = (b > (int) maxv) ? maxv : b;
+
+ /* set it up */
+ set_colour(swirl, values, pixel, &c);
+ }
+ for (i = n / 2; i >= 0 && (int) *pixel < swirl->colours; i--) {
+ r = c2->r + 2 * i * ((int) c1->r) / n;
+ c.r = (r > (int) maxv) ? maxv : r;
+ g = c2->g + 2 * i * ((int) c1->g) / n;
+ c.g = (g > (int) maxv) ? maxv : g;
+ b = c2->b + 2 * i * ((int) c1->b) / n;
+ c.b = (b > (int) maxv) ? maxv : b;
+
+ /* set it up */
+ set_colour(swirl, values, pixel, &c);
+ }
+}
+
+/****************************************************************/
+
+/*-
+ * basic_map
+ *
+ * Generate a `random' closed loop colourmap that occupies the whole colour
+ * map.
+ *
+ * - swirl is the swirl data
+ * - values is the array of colour definitions to set up
+ */
+static void
+basic_map(SWIRL_P swirl, XColor * values)
+{
+ COLOUR c[3];
+ int i;
+ unsigned short r1, g1, b1, r2, g2, b2, r3, g3, b3;
+ int L1, L2, L3, L;
+ unsigned long pixel;
+ XColor *value;
+
+ /* start at the beginning of the colour map */
+ pixel = 0;
+ value = values;
+
+ /* choose 3 different basic colours at random */
+ for (i = 0; i < 3;) {
+ int j;
+ Bool same;
+
+ /* choose colour i */
+ c[i] = basic_colours[random_no(SWIRLCOLOURS - 1)];
+
+ /* assume different */
+ same = False;
+
+ /* different from the rest? */
+ for (j = 0; j < i; j++)
+ if ((c[i].r == c[j].r) &&
+ (c[i].g == c[j].g) &&
+ (c[i].b == c[j].b))
+ same = True;
+
+ /* ready for the next colour? */
+ if (!same)
+ i++;
+ }
+
+ /* extract components into variables */
+ r1 = c[0].r;
+ g1 = c[0].g;
+ b1 = c[0].b;
+ r2 = c[1].r;
+ g2 = c[1].g;
+ b2 = c[1].b;
+ r3 = c[2].r;
+ g3 = c[2].g;
+ b3 = c[2].b;
+
+ /* work out the lengths of each side of the triangle */
+ L1 = (int) sqrt((((double) r1 - r2) * ((double) r1 - r2) +
+ ((double) g1 - g2) * ((double) g1 - g2) +
+ ((double) b1 - b2) * ((double) b1 - b2)));
+
+ L2 = (int) sqrt((((double) r3 - r2) * ((double) r3 - r2) +
+ ((double) g3 - g2) * ((double) g3 - g2) +
+ ((double) b3 - b2) * ((double) b3 - b2)));
+
+ L3 = (int) sqrt((((double) r1 - r3) * ((double) r1 - r3) +
+ ((double) g1 - g3) * ((double) g1 - g3) +
+ ((double) b1 - b3) * ((double) b1 - b3)));
+
+ L = L1 + L2 + L3;
+
+ /* allocate colours in proportion to the lengths of the sides */
+ interpolate(swirl, &value, &pixel,
+ (int) ((double) swirl->dcolours * ((double) L1 / (double) L)) + 1, c, c + 1);
+ interpolate(swirl, &value, &pixel,
+ (int) ((double) swirl->dcolours * ((double) L2 / (double) L)) + 1, c + 1, c + 2);
+ interpolate(swirl, &value, &pixel,
+ (int) ((double) swirl->dcolours * ((double) L3 / (double) L)) + 1, c + 2, c);
+
+ /* fill up any remaining slots (due to rounding) */
+ while ((int) pixel < swirl->colours) {
+ /* repeat the last colour */
+ set_colour(swirl, &value, &pixel, c);
+ }
+
+ /* ensure black and white are correct */
+ if (!swirl->fixed_colourmap)
+ set_black_and_white(swirl, values);
+}
+
+/****************************************************************/
+
+/*-
+ * pre_rotate
+ *
+ * Generate pre-rotated versions of the colour specifications
+ *
+ * - swirl is the swirl data
+ * - values is an array of colour specifications
+ */
+static void
+pre_rotate(SWIRL_P swirl, XColor * values)
+{
+ int i, j;
+ XColor *src, *dest;
+ int dcolours;
+ unsigned long pixel;
+
+ /* how many colours to display? */
+ dcolours = swirl->dcolours;
+
+ /* start at the first map */
+ src = values;
+ dest = values + swirl->colours;
+
+ /* generate dcolours-1 rotated maps */
+ for (i = 0; i < dcolours - 1; i++) {
+ COLOUR first;
+
+ /* start at the first pixel */
+ pixel = 0;
+
+ /* remember the first one and skip it */
+ get_colour(swirl, &src, &first);
+
+ /* put a rotated version of src at dest */
+ for (j = 0; j < dcolours - 1; j++) {
+ COLOUR c;
+
+ /* get the source colour */
+ get_colour(swirl, &src, &c);
+
+ /* set the colour */
+ set_colour(swirl, &dest, &pixel, &c);
+ }
+
+ /* put the first one at the end */
+ set_colour(swirl, &dest, &pixel, &first);
+
+ /* NB: src and dest should now be ready for the next table */
+
+ /* ensure black and white are properly set */
+ set_black_and_white(swirl, src);
+ }
+}
+
+/****************************************************************/
+
+/*-
+ * create_colourmap
+ *
+ * Create a read/write colourmap to use
+ *
+ * - swirl is the swirl data
+ */
+
+static void
+create_colourmap(ModeInfo * mi, SWIRL_P swirl)
+{
+ Display *display = MI_DISPLAY(mi);
+ int preserve;
+ int n_rotations;
+ int i;
+ Bool truecolor;
+ unsigned long redmask, greenmask, bluemask;
+
+ swirl->fixed_colourmap = !setupColormap(mi, &(swirl->colours),
+ &truecolor, &redmask, &greenmask, &bluemask);
+ preserve = preserveColors(swirl->fg, swirl->bg, swirl->white, swirl->black);
+
+ /* how many colours should we animate? */
+ swirl->dcolours = (swirl->colours > preserve + 1) ?
+ swirl->colours - preserve : swirl->colours;
+
+ if (MI_NPIXELS(mi) < 2)
+ return;
+
+ /* how fast to shift the colourmap? */
+ swirl->shift = (swirl->colours > 64) ? swirl->colours / 64 : 1;
+ swirl->dshift = (swirl->shift > 1) ? swirl->shift * 2 : 1;
+
+ /* how may colour map rotations are there? */
+ n_rotations = (swirl->fixed_colourmap) ? 1 : swirl->dcolours;
+
+ /* allocate space for colour definitions (if not already there) */
+ if (swirl->rgb_values == NULL) {
+ swirl->rgb_values = (XColor *) calloc((swirl->colours + 3) * n_rotations,
+ sizeof (XColor));
+
+ /* create a colour map */
+ if (!swirl->fixed_colourmap)
+ swirl->cmap =
+ XCreateColormap(display, swirl->win, swirl->visual, AllocAll);
+ }
+ /* select a set of colours for the colour map */
+ basic_map(swirl, swirl->rgb_values);
+
+ /* are we rotating them? */
+ if (!swirl->fixed_colourmap) {
+ /* generate rotations of the colour maps */
+ pre_rotate(swirl, swirl->rgb_values);
+
+ /* store the colours in the colour map */
+ XStoreColors(display, swirl->cmap, swirl->rgb_values, swirl->colours);
+ } else {
+ if (truecolor) {
+ int rsh, gsh, bsh;
+ unsigned long int t;
+
+ t = redmask;
+ for (i = 0; (int) t > 0; i++, t >>= 1);
+ rsh = 16 - i;
+ t = greenmask;
+ for (i = 0; (int) t > 0; i++, t >>= 1);
+ gsh = 16 - i;
+ t = bluemask;
+ for (i = 0; (int) t > 0; i++, t >>= 1);
+ bsh = 16 - i;
+ for (i = 0; i < swirl->colours; i++)
+ swirl->rgb_values[i].pixel =
+ ((rsh > 0 ? (swirl->rgb_values[i].red) >> rsh :
+ (swirl->rgb_values[i].red) << (-rsh)) & redmask) |
+ ((gsh > 0 ? (swirl->rgb_values[i].green) >> gsh :
+ (swirl->rgb_values[i].green) << (-gsh)) & greenmask) |
+ ((bsh > 0 ? (swirl->rgb_values[i].blue) >> bsh :
+ (swirl->rgb_values[i].blue) << (-bsh)) & bluemask);
+ } else {
+ /* lookup the colours in the fixed colour map */
+ for (i = 0; i < swirl->colours; i++)
+ XAllocColor(display, MI_WIN_COLORMAP(mi),
+ &(swirl->rgb_values[i]));
+ }
+ }
+}
+
+/****************************************************************/
+
+/*-
+ * install_map
+ *
+ * Install a new set of colours into the colour map
+ *
+ * - dpy is the display
+ * - swirl is the swirl data
+ * - shift is the amount to rotate the colour map by
+ */
+static void
+install_map(Display * dpy, SWIRL_P swirl, int shift)
+{
+ if (!swirl->fixed_colourmap) {
+ /* shift the colour map */
+ swirl->current_map = (swirl->current_map + shift) %
+ swirl->dcolours;
+
+ /* store it */
+ XStoreColors(dpy, swirl->cmap,
+ swirl->rgb_values +
+ swirl->current_map * swirl->colours,
+ swirl->colours);
+ }
+}
+
+#endif /* !STANDALONE */
+/****************************************************************/
+
+/*-
+ * create_knots
+ *
+ * Initialise the array of knot
+ *
+ * swirl is the swirl data
+ */
+static void
+create_knots(SWIRL_P swirl)
+{
+ int k;
+ Bool orbit, wheel, picasso, ray, hook;
+ KNOT_P knot;
+
+ /* create array for knots */
+ if (swirl->knots)
+ (void) free((void *) swirl->knots);
+ swirl->knots = (KNOT_P) calloc(swirl->n_knots, sizeof (KNOT));
+
+ /* no knots yet */
+ orbit = wheel = picasso = ray = hook = False;
+
+ /* what types do we have? */
+ if ((int) swirl->knot_type & (int) ALL) {
+ orbit = wheel = ray = hook = True;
+ } else {
+ if ((int) swirl->knot_type & (int) ORBIT)
+ orbit = True;
+ if ((int) swirl->knot_type & (int) WHEEL)
+ wheel = True;
+ if ((int) swirl->knot_type & (int) PICASSO)
+ picasso = True;
+ if ((int) swirl->knot_type & (int) RAY)
+ ray = True;
+ if ((int) swirl->knot_type & (int) HOOK)
+ hook = True;
+ }
+
+ /* initialise each knot */
+ knot = swirl->knots;
+ for (k = 0; k < swirl->n_knots; k++) {
+ /* position */
+ knot->x = random_no((unsigned int) swirl->width);
+ knot->y = random_no((unsigned int) swirl->height);
+
+ /* mass */
+ knot->m = random_no(MASS) + 1;
+
+ /* can be negative */
+ if (random_no(100) > 50)
+ knot->m *= -1;
+
+ /* type */
+ knot->t = NONE;
+ while (knot->t == NONE) {
+ /* choose a random one from the types available */
+ switch (random_no(4)) {
+ case 0:
+ if (orbit)
+ knot->t = ORBIT;
+ break;
+ case 1:
+ if (wheel)
+ knot->t = WHEEL;
+ break;
+ case 2:
+ if (picasso)
+ knot->t = PICASSO;
+ break;
+ case 3:
+ if (ray)
+ knot->t = RAY;
+ break;
+ case 4:
+ if (hook)
+ knot->t = HOOK;
+ break;
+ }
+ }
+
+ /* if two planes, do same for second plane */
+ if (swirl->two_plane) {
+ knot->T = NONE;
+ while (knot->T == NONE || knot->T == knot->t) {
+ /* choose a different type */
+ switch (random_no(4)) {
+ case 0:
+ if (orbit)
+ knot->T = ORBIT;
+ break;
+ case 1:
+ if (wheel)
+ knot->T = WHEEL;
+ break;
+ case 2:
+ if (picasso)
+ knot->T = PICASSO;
+ break;
+ case 3:
+ if (ray)
+ knot->T = RAY;
+ break;
+ case 4:
+ if (hook)
+ knot->T = HOOK;
+ break;
+ }
+ }
+ }
+ /* next knot */
+ knot++;
+ }
+}
+
+/****************************************************************/
+
+/*-
+ * do_point
+ *
+ * Work out the pixel value at i, j. Ensure it does not clash with BlackPixel
+ * or WhitePixel.
+ *
+ * - swirl is the swirl data
+ * - i, j is the point to calculate
+ *
+ * Returns the value of the point
+ */
+static unsigned long
+do_point(SWIRL_P swirl, int i, int j)
+{
+ int tT, k, value, add;
+ double dx, dy, theta, dist;
+ int dcolours, qcolours;
+ double rads;
+ KNOT_P knot;
+
+ /* how many colours? */
+ dcolours = swirl->dcolours;
+ qcolours = dcolours / 4;
+
+ /* colour step round a circle */
+ rads = (double) dcolours / (2.0 * M_PI);
+
+ /* start at zero */
+ value = 0;
+
+ /* go through all the knots */
+ knot = swirl->knots;
+ for (k = 0; k < swirl->n_knots; k++) {
+ dx = i - knot->x;
+ dy = j - knot->y;
+
+ /* in two_plane mode get the appropriate knot type */
+ if (swirl->two_plane)
+ tT = (int) ((swirl->first_plane) ? knot->t : knot->T);
+ else
+ tT = (int) knot->t;
+
+ /* distance from knot */
+ dist = sqrt(dx * dx + dy * dy);
+
+ /* nothing to add at first */
+ add = 0;
+
+ /* work out the contribution (if close enough) */
+ if (dist > 0.1)
+ switch (tT) {
+ case ORBIT:
+ add = (int) (dcolours / (1.0 + 0.01 * abs(knot->m) * dist));
+ break;
+ case WHEEL:
+ /* Avoid atan2: DOMAIN error message */
+ if (dy == 0.0 && dx == 0.0)
+ theta = 1.0;
+ else
+ theta = (atan2(dy, dx) + M_PI) / M_PI;
+ if (theta < 1.0)
+ add = (int) (dcolours * theta +
+ sin(0.1 * knot->m * dist) *
+ qcolours * exp(-0.01 * dist));
+ else
+ add = (int) (dcolours * (theta - 1.0) +
+ sin(0.1 * knot->m * dist) *
+ qcolours * exp(-0.01 * dist));
+ break;
+ case PICASSO:
+ add = (int) (dcolours *
+ fabs(cos(0.002 * knot->m * dist)));
+ break;
+ case RAY:
+ /* Avoid atan2: DOMAIN error message */
+ if (dy == 0.0 && dx == 0.0)
+ add = 0;
+ else
+ add = (int) (dcolours * fabs(sin(2.0 * atan2(dy, dx))));
+
+ break;
+ case HOOK:
+ /* Avoid atan2: DOMAIN error message */
+ if (dy == 0.0 && dx == 0.0)
+ add = (int) (0.05 * (abs(knot->m) - 1) * dist);
+ else
+ add = (int) (rads * atan2(dy, dx) +
+ 0.05 * (abs(knot->m) - 1) * dist);
+ break;
+ }
+ /* for a +ve mass add on the contribution else take it off */
+ if (knot->m > 0)
+ value += add;
+ else
+ value -= add;
+
+ /* next knot */
+ knot++;
+ }
+
+ /* toggle plane */
+ swirl->first_plane = (!swirl->first_plane);
+
+ /* make sure we handle -ve values properly */
+ if (value >= 0)
+ value = (value % dcolours) + 2;
+ else
+ value = dcolours - (abs(value) % (dcolours - 1));
+
+#ifndef STANDALONE
+ /* if fg and bg are 1 and 0 we should be OK, but just in case */
+ while ((dcolours > 2) &&
+ (((value % swirl->colours) == (int) swirl->fg) ||
+ ((value % swirl->colours) == (int) swirl->bg) ||
+ ((value % swirl->colours) == (int) swirl->white) ||
+ ((value % swirl->colours) == (int) swirl->black))) {
+ value++;
+ }
+#endif /* !STANDALONE */
+
+ /* definitely make sure it is in range */
+ value = value % swirl->colours;
+
+ /* lookup the pixel value if necessary */
+#ifndef STANDALONE
+ if (swirl->fixed_colourmap && swirl->dcolours > 2)
+#endif
+ value = swirl->rgb_values[value].pixel;
+
+ /* return it */
+ return ((unsigned long) value);
+}
+
+/****************************************************************/
+
+/*-
+ * draw_block
+ *
+ * Draw a square block of points with the same value.
+ *
+ * - ximage is the XImage to draw on.
+ * - x, y is the top left corner
+ * - s is the length of each side
+ * - v is the value
+ */
+static void
+draw_block(XImage * ximage, int x, int y, int s, unsigned long v)
+{
+ int a, b;
+
+ for (a = 0; a < s; a++)
+ for (b = 0; b < s; b++) {
+ XPutPixel(ximage, x + b, y + a, v);
+ }
+}
+
+/****************************************************************/
+
+/*-
+ * draw_point Draw the current point in a swirl pattern onto the XImage
+ *
+ * - swirl is the swirl
+ * - win is the window to update
+ */
+static void
+draw_point(ModeInfo * mi, SWIRL_P swirl)
+{
+ int r;
+ int x, y;
+
+ /* get current point coordinates and resolution */
+ x = swirl->x;
+ y = swirl->y;
+ r = swirl->r;
+
+ /* check we are within the window */
+ if ((x < 0) || (x > swirl->width - r) || (y < 0) || (y > swirl->height - r))
+ return;
+
+ /* what style are we drawing? */
+ if (swirl->two_plane) {
+ int r2;
+
+ /* halve the block size */
+ r2 = r / 2;
+
+ /* interleave blocks at half r */
+ draw_block(swirl->ximage, x, y, r2, do_point(swirl, x, y));
+ draw_block(swirl->ximage, x + r2, y, r2, do_point(swirl, x + r2, y));
+ draw_block(swirl->ximage, x + r2, y + r2, r2, do_point(swirl,
+ x + r2, y + r2));
+ draw_block(swirl->ximage, x, y + r2, r2, do_point(swirl, x, y + r2));
+ } else
+ draw_block(swirl->ximage, x, y, r, do_point(swirl, x, y));
+
+ /* update the screen */
+/* PURIFY 4.0.1 on SunOS4 and on Solaris 2 reports a 256 byte memory leak on *
+
+
+ the next line. */
+ XPutImage(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), swirl->ximage,
+ x, y, x, y, r, r);
+}
+
+/****************************************************************/
+
+/*-
+ * next_point Move to the next point in the spiral pattern
+ * - swirl is the swirl
+ * - win is the window to update
+ */
+static void
+next_point(SWIRL_P swirl)
+{
+ /* more to do in this direction? */
+ if (swirl->dir_done < swirl->dir_todo) {
+ /* move in the current direction */
+ switch (swirl->direction) {
+ case DRAW_RIGHT:
+ swirl->x += swirl->r;
+ break;
+ case DRAW_DOWN:
+ swirl->y += swirl->r;
+ break;
+ case DRAW_LEFT:
+ swirl->x -= swirl->r;
+ break;
+ case DRAW_UP:
+ swirl->y -= swirl->r;
+ break;
+ }
+
+ /* done another point */
+ swirl->dir_done++;
+ } else {
+ /* none drawn yet */
+ swirl->dir_done = 0;
+
+ /* change direction - check and record if off screen */
+ switch (swirl->direction) {
+ case DRAW_RIGHT:
+ swirl->direction = DRAW_DOWN;
+ if (swirl->x > swirl->width - swirl->r) {
+ /* skip these points */
+ swirl->dir_done = swirl->dir_todo;
+ swirl->y += (swirl->dir_todo * swirl->r);
+
+ /* check for finish */
+ if (swirl->off_screen)
+ swirl->drawing = False;
+ swirl->off_screen = True;
+ } else
+ swirl->off_screen = False;
+ break;
+ case DRAW_DOWN:
+ swirl->direction = DRAW_LEFT;
+ swirl->dir_todo++;
+ if (swirl->y > swirl->height - swirl->r) {
+ /* skip these points */
+ swirl->dir_done = swirl->dir_todo;
+ swirl->x -= (swirl->dir_todo * swirl->r);
+
+ /* check for finish */
+ if (swirl->off_screen)
+ swirl->drawing = False;
+ swirl->off_screen = True;
+ } else
+ swirl->off_screen = False;
+ break;
+ case DRAW_LEFT:
+ swirl->direction = DRAW_UP;
+ if (swirl->x < 0) {
+ /* skip these points */
+ swirl->dir_done = swirl->dir_todo;
+ swirl->y -= (swirl->dir_todo * swirl->r);
+
+ /* check for finish */
+ if (swirl->off_screen)
+ swirl->drawing = False;
+ swirl->off_screen = True;
+ } else
+ swirl->off_screen = False;
+ break;
+ case DRAW_UP:
+ swirl->direction = DRAW_RIGHT;
+ swirl->dir_todo++;
+ if (swirl->y < 0) {
+ /* skip these points */
+ swirl->dir_done = swirl->dir_todo;
+ swirl->x += (swirl->dir_todo * swirl->r);
+
+ /* check for finish */
+ if (swirl->off_screen)
+ swirl->drawing = False;
+ swirl->off_screen = True;
+ } else
+ swirl->off_screen = False;
+ break;
+ }
+ }
+}
+
+/****************************************************************/
+
+/*-
+ * init_swirl
+ *
+ * Initialise things for swirling
+ *
+ * - win is the window to draw in
+ */
+void
+init_swirl(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ SWIRL_P swirl;
+
+ /* does the swirls array exist? */
+ if (swirls == NULL) {
+ int i;
+
+ /* allocate an array, one entry for each screen */
+ swirls = (SWIRL_P) calloc(ScreenCount(display), sizeof (SWIRL));
+
+ /* initialise them all */
+ for (i = 0; i < ScreenCount(display); i++)
+ initialise_swirl(mi, &swirls[i]);
+ }
+ /* get a pointer to this swirl */
+ swirl = &(swirls[MI_SCREEN(mi)]);
+
+ /* get window parameters */
+ swirl->win = window;
+ swirl->width = MI_WIN_WIDTH(mi);
+ swirl->height = MI_WIN_HEIGHT(mi);
+ swirl->depth = MI_WIN_DEPTH(mi);
+ swirl->rdepth = swirl->depth;
+ swirl->visual = MI_VISUAL(mi);
+
+ if (swirl->depth > 16)
+ swirl->depth = 16;
+
+ /* initialise image for speeding up drawing */
+ initialise_image(display, swirl);
+
+ /* clear the window (before setting the colourmap) */
+ XClearWindow(display, MI_WINDOW(mi));
+
+#ifdef STANDALONE
+
+ swirl->rgb_values = mi->colors;
+ swirl->colours = mi->npixels;
+ swirl->dcolours = swirl->colours;
+/* swirl->fixed_colourmap = !mi->writable_p; */
+
+#else /* !STANDALONE */
+ /* initialise the colours from which the colourmap is derived */
+ initialise_colours(basic_colours, MI_SATURATION(mi));
+
+ /* set up the colour map */
+ create_colourmap(mi, swirl);
+
+ /* attach the colour map to the window (if we have one) */
+ if (!swirl->fixed_colourmap) {
+#if 1
+ setColormap(display, window, swirl->cmap, MI_WIN_IS_INWINDOW(mi));
+#else
+ XSetWindowColormap(display, window, swirl->cmap);
+ XSetWMColormapWindows(display, window, &window, 1);
+ XInstallColormap(display, swirl->cmap);
+#endif
+ }
+#endif /* !STANDALONE */
+
+ /* resolution starts off chunky */
+ swirl->resolution = MIN_RES + 1;
+
+ /* calculate the pixel step for this resulution */
+ swirl->r = (1 << (swirl->resolution - 1));
+
+ /* how many knots? */
+ swirl->n_knots = random_no((unsigned int) MI_BATCHCOUNT(mi) / 2) +
+ MI_BATCHCOUNT(mi) + 1;
+
+ /* what type of knots? */
+ swirl->knot_type = ALL; /* for now */
+
+ /* use two_plane mode occaisionally */
+ if (random_no(100) <= TWO_PLANE_PCNT) {
+ swirl->two_plane = swirl->first_plane = True;
+ swirl->max_resolution = 2;
+ } else
+ swirl->two_plane = False;
+
+ /* fix the knot values */
+ create_knots(swirl);
+
+ /* we are off */
+ swirl->started = True;
+ swirl->drawing = False;
+}
+
+/****************************************************************/
+
+/*-
+ * draw_swirl
+ *
+ * Draw one iteration of swirling
+ *
+ * - win is the window to draw in
+ */
+void
+draw_swirl(ModeInfo * mi)
+{
+ SWIRL_P swirl = &(swirls[MI_SCREEN(mi)]);
+
+ /* are we going? */
+ if (swirl->started) {
+ /* in the middle of drawing? */
+ if (swirl->drawing) {
+#ifdef STANDALONE
+ if (mi->writable_p)
+ rotate_colors(MI_DISPLAY(mi), MI_WIN_COLORMAP(mi),
+ swirl->rgb_values, swirl->colours, 1);
+#else /* !STANDALONE */
+ /* rotate the colours */
+ install_map(MI_DISPLAY(mi), swirl, swirl->dshift);
+#endif /* !STANDALONE */
+
+ /* draw a batch of points */
+ swirl->batch_todo = BATCH_DRAW;
+ while ((swirl->batch_todo > 0) && swirl->drawing) {
+ /* draw a point */
+ draw_point(mi, swirl);
+
+ /* move to the next point */
+ next_point(swirl);
+
+ /* done a point */
+ swirl->batch_todo--;
+ }
+ } else {
+#ifdef STANDALONE
+ if (mi->writable_p)
+ rotate_colors(MI_DISPLAY(mi), MI_WIN_COLORMAP(mi),
+ swirl->rgb_values, swirl->colours, 1);
+#else /* !STANDALONE */
+ /* rotate the colours */
+ install_map(MI_DISPLAY(mi), swirl, swirl->shift);
+#endif /* !STANDALONE */
+
+ /* time for a higher resolution? */
+ if (swirl->resolution > swirl->max_resolution) {
+ /* move to higher resolution */
+ swirl->resolution--;
+
+ /* calculate the pixel step for this resulution */
+ swirl->r = (1 << (swirl->resolution - 1));
+
+ /* start drawing again */
+ swirl->drawing = True;
+
+ /* start in the middle of the screen */
+ swirl->x = (swirl->width - swirl->r) / 2;
+ swirl->y = (swirl->height - swirl->r) / 2;
+
+ /* initialise spiral drawing parameters */
+ swirl->direction = DRAW_RIGHT;
+ swirl->dir_todo = 1;
+ swirl->dir_done = 0;
+ } else {
+ /* all done, decide when to restart */
+ if (swirl->start_again == -1) {
+ /* start the counter */
+ swirl->start_again = RESTART;
+ } else if (swirl->start_again == 0) {
+ /* reset the counter */
+ swirl->start_again = -1;
+
+#ifdef STANDALONE
+ /* Pick a new colormap! */
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+ free_colors(MI_DISPLAY(mi), MI_WIN_COLORMAP(mi),
+ mi->colors, mi->npixels);
+ make_smooth_colormap(MI_DISPLAY(mi),
+ MI_VISUAL(mi),
+ MI_WIN_COLORMAP(mi),
+ mi->colors, &mi->npixels, True,
+ &mi->writable_p, True);
+ swirl->colours = mi->npixels;
+#endif /* STANDALONE */
+
+ /* start again */
+ init_swirl(mi);
+ } else
+ /* decrement the counter */
+ swirl->start_again--;
+ }
+ }
+ }
+}
+
+/****************************************************************/
+
+void
+release_swirl(ModeInfo * mi)
+{
+ /* does the swirls array exist? */
+ if (swirls != NULL) {
+ int i;
+
+ /* free them all */
+ for (i = 0; i < MI_NUM_SCREENS(mi); i++) {
+ SWIRL_P swirl = &(swirls[i]);
+
+ if (swirl->cmap != (Colormap) NULL)
+ XFreeColormap(MI_DISPLAY(mi), swirl->cmap);
+ if (swirl->rgb_values != NULL)
+ XFree((void *) swirl->rgb_values);
+ if (swirl->ximage != NULL)
+ XDestroyImage(swirl->ximage);
+ if (swirl->knots)
+ (void) free((void *) swirl->knots);
+ }
+ /* deallocate an array, one entry for each screen */
+ (void) free((void *) swirls);
+ swirls = NULL;
+ }
+}
+
+/****************************************************************/
+
+void
+refresh_swirl(ModeInfo * mi)
+{
+ SWIRL_P swirl = &(swirls[MI_SCREEN(mi)]);
+
+ if (swirl->started) {
+ if (swirl->drawing)
+ swirl->resolution = swirl->resolution + 1;
+ swirl->drawing = False;
+ }
+}
--- /dev/null
+***************
+*** 396,402 ****
+ return mode_font;
+ }
+
+! static void
+ randomImage(char *im_file)
+ {
+ #if HAVE_DIRENT_H
+- --- 396,402 ----
+ return mode_font;
+ }
+
+! static char *
+ randomImage(char *im_file)
+ {
+ #if HAVE_DIRENT_H
+***************
+*** 403,416 ****
+ extern char directory_r[DIRBUF];
+ extern struct dirent **image_list;
+ extern int num_list;
+ int num;
+
+ if (num_list > 0) {
+ num = NRAND(num_list);
+! (void) strcpy(im_file, directory_r);
+! (void) strcat(im_file, image_list[num]->d_name);
+ }
+ #endif
+ }
+
+ #if HAVE_DIRENT_H
+- --- 403,424 ----
+ extern char directory_r[DIRBUF];
+ extern struct dirent **image_list;
+ extern int num_list;
++ char *newimf;
+ int num;
+
+ if (num_list > 0) {
+ num = NRAND(num_list);
+! if ((newimf = malloc(strlen(directory_r)
+! + strlen(image_list[num]->d_name) + 1)) != 0)
+! {
+! (void) sprintf(newimf, "%s%s",
+! directory_r, image_list[num]->d_name);
+! free(im_file);
+! im_file = newimf;
+! }
+ }
+ #endif
++ return im_file;
+ }
+
+ #if HAVE_DIRENT_H
+***************
+*** 520,526 ****
+ ++numfrag;
+ filename_tmp = filename_tmp + ip;
+ }
+! frags[numfrag] = (char *) malloc(strlen(filename_tmp));
+ (void) strcpy(frags[numfrag], filename_tmp);
+ }
+ for (i = 0; i <= numfrag; ++i) {
+- --- 528,534 ----
+ ++numfrag;
+ filename_tmp = filename_tmp + ip;
+ }
+! frags[numfrag] = (char *) malloc(strlen(filename_tmp)+1);
+ (void) strcpy(frags[numfrag], filename_tmp);
+ }
+ for (i = 0; i <= numfrag; ++i) {
+***************
+*** 570,576 ****
+ }
+ /* Core Dumps here for Solaris2 if files names in dir are > 14 characters */
+ namelist_tmp[num_list_tmp - 1] =
+! (struct dirent *) malloc(sizeof (struct dirent));
+
+ (void) strcpy(namelist_tmp[num_list_tmp - 1]->d_name, new_entry->d_name);
+
+- --- 578,588 ----
+ }
+ /* Core Dumps here for Solaris2 if files names in dir are > 14 characters */
+ namelist_tmp[num_list_tmp - 1] =
+! (struct dirent *) malloc(sizeof (struct dirent)
+! #ifdef SVR4
+! + strlen(new_entry->d_name)
+! #endif
+! );
+
+ (void) strcpy(namelist_tmp[num_list_tmp - 1]->d_name, new_entry->d_name);
+
+***************
+*** 655,661 ****
+
+ *graphics_format = 0;
+
+! randomImage(imagefile);
+
+ if (strlen(imagefile))
+ if (readable(imagefile)) {
+- --- 667,673 ----
+
+ *graphics_format = 0;
+
+! imagefile = randomImage(imagefile);
+
+ if (strlen(imagefile))
+ if (readable(imagefile)) {
+
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)triangle.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * triangle.c - create a triangle-mountain for xlock the X Window System
+ * lockscreen.
+ *
+ * Copyright (c) 1995 by Tobias Gloth
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 10-Mar-96: re-arranged and re-formatted the code for appearance and
+ * to make common subroutines. Simplified.
+ * Ron Hitchens <ron@idiom.com>
+ * 07-Mar-96: Removed internal delay code, set MI_PAUSE(mi) for inter-scene
+ * delays. No other delays are needed here.
+ * Made pause time sensitive to value of cycles (in 10ths of a
+ * second). Removed (hopefully) all references to globals.
+ * Ron Hitchens <ron@idiom.com>
+ * 27-Feb-96: Undid the changes listed below. Added ModeInfo argument.
+ * Implemented delay between scenes using the MI_PAUSE(mi)
+ * scheme. Ron Hitchens <ron@idiom.com>
+ * 27-Dec-95: Ron Hitchens <ron@idiom.com>
+ * Modified logic of draw_triangle() to provide a delay
+ * (sensitive to the value of cycles) between each iteration.
+ * Because this mode is so compute intensive, when the new
+ * event loop adjusted the delay to compensate, this mode had
+ * almost no delay time left. This change pauses between each
+ * new landscape, but could still be done better (it is not
+ * sensitive to input events while drawing, for example).
+ * 03-Nov-95: Many changes (hopefully some good ones) by David Bagley
+ * 01-Oct-95: Written by Tobias Gloth
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "triangle"
+#define HACK_INIT init_triangle
+#define HACK_DRAW draw_triangle
+#define DEF_DELAY 10000
+#define DEF_NCOLORS 64
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt triangle_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+#define MAX_STEPS 8
+#define MAX_SIZE (1<<MAX_STEPS)
+#define MAX_LEVELS 1000
+
+#define DELTA 0.4
+#define LEFT (-0.25)
+#define RIGHT 1.25
+#define TOP 0.3
+#define BOTTOM 1.0
+#define BLUE 45 /* Just the right shade of blue */
+
+#define BACKFACE_REMOVAL
+
+#define DISPLACE(h,d) ((h)/2+LRAND()/(MAXRAND/(2*(d)+1))-d)
+
+typedef struct {
+ int width;
+ int height;
+ int size;
+ int steps;
+ int stage;
+ int init_now;
+ int fast;
+ int i;
+ int j;
+ int d;
+ short level[MAX_LEVELS];
+ int xpos[2 * MAX_SIZE + 1];
+ int ypos[MAX_SIZE + 1];
+ short H[(MAX_SIZE + 1) * (MAX_SIZE + 2) / 2];
+ short *h[MAX_SIZE + 1];
+ short delta[MAX_STEPS];
+} trianglestruct;
+
+static trianglestruct *triangles = NULL;
+
+static
+void
+draw_atriangle(ModeInfo * mi, XPoint * p, int y_0, int y_1, int y_2, double dinv)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+
+ if (MI_NPIXELS(mi) > 2) { /* color */
+ int dmax, dmin;
+ long color;
+
+ dmin = MIN(y_0, y_1);
+ dmin = MIN(dmin, y_2);
+ dmax = MAX(y_0, y_1);
+ dmax = MAX(dmax, y_2);
+
+ if (dmax == 0) {
+ color = BLUE;
+ } else {
+ color = MI_NPIXELS(mi) -
+ (int) ((double) MI_NPIXELS(mi) / M_PI_2 * atan(dinv * (dmax - dmin)));
+ }
+
+ XSetForeground(display, gc, MI_PIXEL(mi, color % MI_NPIXELS(mi)));
+ XFillPolygon(display, window, gc, p, 3, Convex, CoordModeOrigin);
+ } else {
+ /* mono */
+#ifdef BACKFACE_REMOVAL
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XFillPolygon(display, window, gc, p, 3, Convex, CoordModeOrigin);
+#endif
+ XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
+ XDrawLine(display, window, gc, p[0].x, p[0].y, p[1].x, p[1].y);
+ XDrawLine(display, window, gc, p[1].x, p[1].y, p[2].x, p[2].y);
+ XDrawLine(display, window, gc, p[2].x, p[2].y, p[0].x, p[0].y);
+ }
+}
+
+static
+void
+calc_points1(trianglestruct * tp, int d, int *y0_p, int *y1_p, int *y2_p, XPoint * p)
+{
+ *y0_p = tp->level[MAX(tp->h[tp->i][tp->j], 0)];
+ *y1_p = tp->level[MAX(tp->h[tp->i + d][tp->j], 0)];
+ *y2_p = tp->level[MAX(tp->h[tp->i][tp->j + d], 0)];
+
+ p[0].x = tp->xpos[2 * tp->i + tp->j];
+ p[1].x = tp->xpos[2 * (tp->i + d) + tp->j];
+ p[2].x = tp->xpos[2 * tp->i + (tp->j + d)];
+
+ p[0].y = tp->ypos[tp->j] - *y0_p;
+ p[1].y = tp->ypos[tp->j] - *y1_p;
+ p[2].y = tp->ypos[tp->j + d] - *y2_p;
+}
+
+static
+void
+calc_points2(trianglestruct * tp, int d, int *y0_p, int *y1_p, int *y2_p, XPoint * p)
+{
+ *y0_p = tp->level[MAX(tp->h[tp->i + d][tp->j], 0)];
+ *y1_p = tp->level[MAX(tp->h[tp->i + d][tp->j + d], 0)];
+ *y2_p = tp->level[MAX(tp->h[tp->i][tp->j + d], 0)];
+
+ p[0].x = tp->xpos[2 * (tp->i + d) + tp->j];
+ p[1].x = tp->xpos[2 * (tp->i + d) + (tp->j + d)];
+ p[2].x = tp->xpos[2 * tp->i + (tp->j + d)];
+
+ p[0].y = tp->ypos[tp->j] - *y0_p;
+ p[1].y = tp->ypos[tp->j + d] - *y1_p;
+ p[2].y = tp->ypos[tp->j + d] - *y2_p;
+}
+
+
+static
+void
+draw_mesh(ModeInfo * mi, trianglestruct * tp, int d, int count)
+{
+ XPoint p[3];
+ int first = 1;
+ int y_0, y_1, y_2;
+ double dinv = 0.2 / d;
+
+ if ((tp->j == 0) && (tp->i == 0)) {
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+ }
+ for (; (tp->j < tp->size) && (count > 0); tp->j += ((count) ? d : 0)) {
+ for (tp->i = (first) ? tp->i : 0, first = 0;
+ (tp->i < MAX_SIZE - tp->j) && (count > 0);
+ tp->i += d, count--) {
+ if (tp->i + tp->j < tp->size) {
+ calc_points1(tp, d, &y_0, &y_1, &y_2, p);
+ draw_atriangle(mi, p, y_0, y_1, y_2, dinv);
+ }
+ if (tp->i + tp->j + d < tp->size) {
+ calc_points2(tp, d, &y_0, &y_1, &y_2, p);
+ draw_atriangle(mi, p, y_0, y_1, y_2, dinv);
+ }
+ }
+ }
+
+ if (tp->j == tp->size) {
+ tp->init_now = 1;
+ }
+}
+
+void
+init_triangle(ModeInfo * mi)
+{
+ trianglestruct *tp;
+ short *tmp;
+ int i, dim, one;
+
+ if (triangles == NULL) {
+ if ((triangles = (trianglestruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (trianglestruct))) == NULL)
+ return;
+ }
+ tp = &triangles[MI_SCREEN(mi)];
+
+ tp->width = MI_WIN_WIDTH(mi);
+ tp->height = MI_WIN_HEIGHT(mi);
+ tp->init_now = 1;
+ tp->fast = 2;
+
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+
+
+
+ tp->steps = MAX_STEPS;
+ do {
+ tp->size = 1 << --tp->steps;
+ } while (tp->size * 5 > tp->width);
+ tmp = tp->H;
+ for (i = 0; i < tp->size + 1; i++) {
+ tp->h[i] = tmp;
+ tmp += (tp->size) + 1 - i;
+ }
+
+ tp->stage = -1;
+ dim = MIN(tp->width, tp->height);
+
+ for (i = 0; i < 2 * tp->size + 1; i++) {
+ tp->xpos[i] = (short) ((((double) i)
+ / ((double) (2 * tp->size)) * (RIGHT - LEFT) + LEFT)
+ * dim) + (tp->width - dim) / 2;
+ }
+
+ for (i = 0; i < (tp->size + 1); i++) {
+ tp->ypos[i] = (short) ((((double) i)
+ / ((double) tp->size) * (BOTTOM - TOP) + TOP) * dim)
+ + (tp->height - dim) / 2;
+ }
+
+ for (i = 0; i < tp->steps; i++) {
+ tp->delta[i] = ((short) (DELTA * dim)) >> i;
+ }
+
+ one = tp->delta[0];
+
+ if (one > 0)
+ for (i = 0; i < MAX_LEVELS; i++) {
+ tp->level[i] = (i * i) / one;
+ }
+}
+
+void
+draw_triangle(ModeInfo * mi)
+{
+ trianglestruct *tp = &triangles[MI_SCREEN(mi)];
+ int d, d2, i, j, delta;
+
+ if (!tp->init_now) {
+ draw_mesh(mi, tp, tp->d / 2, MAX_SIZE / tp->d);
+
+ /* The init_now flag will pop up when the scene is complete.
+ * Cycles specifies how long to wait, in 1/10 secs.
+ TODO: This is wrong for multi-screens ***
+ */
+ if (tp->init_now) {
+ MI_PAUSE(mi) = 2000000;
+ }
+ return;
+ }
+ if (tp->delta[0] > 0) {
+ if (!(++tp->stage)) {
+ tp->h[0][0] = (short int) MAX(0, DISPLACE(0, tp->delta[0]));
+ tp->h[tp->size][0] = (short int) MAX(0, DISPLACE(0, tp->delta[0]));
+ tp->h[0][tp->size] = (short int) MAX(0, DISPLACE(0, tp->delta[0]));
+ } else {
+ d = 2 << (tp->steps - tp->stage);
+ d2 = d / 2;
+ delta = tp->delta[tp->stage - 1];
+
+ for (i = 0; i < tp->size; i += d) {
+ for (j = 0; j < (tp->size - i); j += d) {
+ tp->h[i + d2][j] = (short int) DISPLACE(tp->h[i][j] +
+ tp->h[i + d][j], delta);
+ tp->h[i][j + d2] = (short int) DISPLACE(tp->h[i][j] +
+ tp->h[i][j + d], delta);
+ tp->h[i + d2][j + d2] = (short int) DISPLACE(tp->h[i + d][j] +
+ tp->h[i][j + d], delta);
+ }
+
+ tp->init_now = 0;
+ tp->i = 0;
+ tp->j = 0;
+ tp->d = d;
+ }
+ }
+ }
+ if (tp->stage == tp->steps) {
+ tp->stage = -1;
+ }
+}
+
+void
+release_triangle(ModeInfo * mi)
+{
+ if (triangles != NULL) {
+ (void) free((void *) triangles);
+ triangles = NULL;
+ }
+}
+
+void
+refresh_triangle(ModeInfo * mi)
+{
+ /* Do nothing, it will refresh by itself */
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)tube.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * tube.c - animated tube for xlock, the X Window System lockscreen
+ *
+ * Copyright (c) 1997 Dan Stromberg <strombrg@nis.acs.uci.edu>
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 4-Mar-97: Memory leak fix by Tom Schmidt <tschmidt@micron.com>
+ * 7-Feb-97: Written by Dan Stromberg <strombrg@nis.acs.uci.edu>
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Tube"
+#define HACK_INIT init_tube
+#define HACK_DRAW draw_tube
+#define DEF_DELAY 25000
+#define DEF_CYCLES 20000
+#define DEF_SIZE -200
+#define DEF_NCOLORS 200
+#define SMOOTH_COLORS
+#define WRITABLE_COLORS
+#include "xlockmore.h" /* from the xscreensaver distribution */
+#include <X11/Xutil.h>
+#else /* !STANDALONE */
+#include "xlock.h" /* from the xlockmore distribution */
+ModeSpecOpt tube_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* !STANDALONE */
+
+#define MINSIZE 3
+
+typedef struct {
+ int dx1, dy1;
+ int x1, y1;
+ int width;
+ int height;
+ unsigned int cur_color;
+ Colormap cmap;
+ XColor *colors;
+ XColor top;
+ XColor bottom;
+ unsigned int fg, bg;
+ XColor fgcol, bgcol; /* foreground and background colour specs */
+ int counter;
+ int ncolors;
+ int usable_colors;
+ Bool fixed_colormap;
+} tubestruct;
+
+static tubestruct *tubes = NULL;
+
+void
+init_tube(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ tubestruct *tp;
+ int screen_width, screen_height, preserve;
+ int size = MI_SIZE(mi);
+ Bool truecolor;
+ unsigned long redmask, greenmask, bluemask;
+
+ if (tubes == NULL) {
+ if ((tubes = (tubestruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (tubestruct))) == NULL)
+ return;
+ }
+ tp = &tubes[MI_SCREEN(mi)];
+
+ screen_width = MI_WIN_WIDTH(mi);
+ screen_height = MI_WIN_HEIGHT(mi);
+
+ if (size < -MINSIZE) {
+ tp->width = NRAND(MIN(-size, MAX(MINSIZE, screen_width / 2)) -
+ MINSIZE + 1) + MINSIZE;
+ tp->height = NRAND(MIN(-size, MAX(MINSIZE, screen_height / 2)) -
+ MINSIZE + 1) + MINSIZE;
+ } else if (size < MINSIZE) {
+ if (!size) {
+ tp->width = MAX(MINSIZE, screen_width / 2);
+ tp->height = MAX(MINSIZE, screen_height / 2);
+ } else {
+ tp->width = MINSIZE;
+ tp->height = MINSIZE;
+ }
+ } else {
+ tp->width = MIN(size, MAX(MINSIZE, screen_width / 2));
+ tp->height = MIN(size, MAX(MINSIZE, screen_height / 2));
+ }
+
+ tp->dx1 = NRAND(2);
+ if (tp->dx1 == 0)
+ tp->dx1 = -1;
+ tp->dy1 = NRAND(2);
+ if (tp->dy1 == 0)
+ tp->dy1 = -1;
+ tp->x1 = NRAND(screen_width - tp->width);
+ tp->y1 = NRAND(screen_height - tp->height);
+ XClearWindow(display, MI_WINDOW(mi));
+ tp->counter = 0;
+
+ tp->fg = MI_FG_COLOR(mi);
+ tp->bg = MI_BG_COLOR(mi);
+ tp->fgcol.pixel = tp->fg;
+ tp->bgcol.pixel = tp->bg;
+ preserve = preserveColors(tp->fg, tp->bg,
+ MI_WIN_WHITE_PIXEL(mi), MI_WIN_BLACK_PIXEL(mi));
+ XQueryColor(display, MI_WIN_COLORMAP(mi), &(tp->fgcol));
+ XQueryColor(display, MI_WIN_COLORMAP(mi), &(tp->bgcol));
+
+ tp->fixed_colormap = !setupColormap(mi,
+ &(tp->ncolors), &truecolor, &redmask, &greenmask, &bluemask);
+ if (!tp->fixed_colormap) {
+ /* color in "the bottom third */
+ tp->bottom.red = NRAND(65536 / 3);
+ tp->bottom.blue = NRAND(65536 / 3);
+ tp->bottom.green = NRAND(65536 / 3);
+ /* color in "the top third */
+ tp->top.red = NRAND(65536 / 3) + 65536 * 2 / 3;
+ tp->top.blue = NRAND(65536 / 3) + 65536 * 2 / 3;
+ tp->top.green = NRAND(65536 / 3) + 65536 * 2 / 3;
+
+ /* allocate colormap, if needed */
+ if (tp->colors == NULL)
+ tp->colors = (XColor *) malloc(sizeof (XColor) * tp->ncolors);
+ if (tp->cmap == None)
+ tp->cmap = XCreateColormap(display,
+ MI_WINDOW(mi), MI_VISUAL(mi), AllocAll);
+ }
+ tp->usable_colors = tp->ncolors - preserve;
+}
+
+void
+draw_tube(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ tubestruct *tp = &tubes[MI_SCREEN(mi)];
+ unsigned int i, j;
+ int k;
+
+ /* advance drawing color */
+ tp->cur_color = (tp->cur_color + 1) % MI_NPIXELS(mi);
+ if (!tp->fixed_colormap && tp->usable_colors > 2) {
+ while (tp->cur_color == MI_WIN_WHITE_PIXEL(mi) ||
+ tp->cur_color == MI_WIN_BLACK_PIXEL(mi) ||
+ tp->cur_color == MI_FG_COLOR(mi) ||
+ tp->cur_color == MI_BG_COLOR(mi)) {
+ tp->cur_color = (tp->cur_color + 1) % MI_NPIXELS(mi);
+ }
+ }
+ XSetForeground(display, gc, tp->cur_color);
+
+ /* move rectangle forward, horiz */
+ tp->x1 += tp->dx1;
+ if (tp->x1 < 0) {
+ tp->x1 = 0;
+ tp->dx1 = -tp->dx1;
+ }
+ if (tp->x1 + tp->width >= MI_WIN_WIDTH(mi)) {
+ tp->x1 = MI_WIN_WIDTH(mi) - tp->width - 1;
+ tp->dx1 = -tp->dx1;
+ }
+ /* move rectange forward, vert */
+ tp->y1 += tp->dy1;
+ if (tp->y1 < 0) {
+ tp->y1 = 0;
+ tp->dy1 = -tp->dy1;
+ }
+ if (tp->y1 + tp->height >= MI_WIN_HEIGHT(mi)) {
+ tp->y1 = MI_WIN_HEIGHT(mi) - tp->height - 1;
+ tp->dy1 = -tp->dy1;
+ }
+ /* draw the rectangle */
+ XDrawLine(display, MI_WINDOW(mi), gc,
+ tp->x1, tp->y1,
+ tp->x1, tp->y1 + tp->height);
+ XDrawLine(display, MI_WINDOW(mi), gc,
+ tp->x1, tp->y1 + tp->height,
+ tp->x1 + tp->width, tp->y1 + tp->height);
+ XDrawLine(display, MI_WINDOW(mi), gc,
+ tp->x1 + tp->width, tp->y1 + tp->height,
+ tp->x1 + tp->width, tp->y1);
+ XDrawLine(display, MI_WINDOW(mi), gc,
+ tp->x1 + tp->width, tp->y1,
+ tp->x1, tp->y1);
+
+ /* advance colormap */
+ if (!tp->fixed_colormap && tp->usable_colors > 2) {
+ for (i = 0, j = tp->cur_color, k = 0;
+ i < tp->ncolors; i++) {
+ if (i == MI_WIN_WHITE_PIXEL(mi)) {
+ tp->colors[i].pixel = i;
+ tp->colors[i].red = 65535;
+ tp->colors[i].blue = 65535;
+ tp->colors[i].green = 65535;
+ tp->colors[i].flags = DoRed | DoGreen | DoBlue;
+ } else if (i == MI_WIN_BLACK_PIXEL(mi)) {
+ tp->colors[i].pixel = i;
+ tp->colors[i].red = 0;
+ tp->colors[i].blue = 0;
+ tp->colors[i].green = 0;
+ tp->colors[i].flags = DoRed | DoGreen | DoBlue;
+ } else if (i == tp->fg) {
+ tp->colors[i] = tp->fgcol;
+ } else if (i == tp->bg) {
+ tp->colors[i] = tp->bgcol;
+ } else {
+ double range;
+
+ tp->colors[i].pixel = i;
+ range = ((double) (tp->top.red - tp->bottom.red)) /
+ MI_NPIXELS(mi);
+ tp->colors[i].red = (short unsigned int) (range * j +
+ tp->bottom.red);
+ range = ((double) (tp->top.green - tp->bottom.green)) /
+ MI_NPIXELS(mi);
+ tp->colors[i].green = (short unsigned int) (range * j +
+ tp->bottom.green);
+ range = ((double) (tp->top.blue - tp->bottom.blue)) /
+ MI_NPIXELS(mi);
+ tp->colors[i].blue = (short unsigned int) (range * j +
+ tp->bottom.blue);
+ tp->colors[i].flags = DoRed | DoGreen | DoBlue;
+ j = (j + 1) % MI_NPIXELS(mi);
+ k++;
+ }
+ }
+ /* make the entire tube move forward */
+ XStoreColors(display, tp->cmap, tp->colors, MI_NPIXELS(mi));
+ setColormap(display, MI_WINDOW(mi), tp->cmap, MI_WIN_IS_INWINDOW(mi));
+ }
+ tp->counter++;
+ if (tp->counter > MI_CYCLES(mi)) {
+ init_tube(mi);
+ }
+}
+
+void
+release_tube(ModeInfo * mi)
+{
+ if (tubes != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ tubestruct *tp = &tubes[screen];
+
+ if (tp->cmap != None)
+ XFreeColormap(MI_DISPLAY(mi), tp->cmap);
+ if (tp->colors != NULL)
+ XFree((void *) tp->colors);
+ }
+ (void) free((void *) tubes);
+ tubes = NULL;
+ }
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)turtle.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * turtle.c - fractal curves xlock, the X Window System lockscreen.
+ *
+ * Copyright (c) 1996 by David Bagley.
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 01-Dec-96: Not too proud how I hacked in 2 more curves
+ * 30-Sep-96: started with Hilbert curve, David Bagley
+ * From Fractal Programming in C by Roger T. Stevens
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Turtle"
+#define HACK_INIT init_turtle
+#define HACK_DRAW draw_turtle
+#define DEF_DELAY 1000000
+#define DEF_CYCLES 20
+#define DEF_NCOLORS 64
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt turtle_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+#define HILBERT 0 /* Not exactly a turtle algorthm... p199 */
+#define CESARO_VAR 1 /* Telephone curve p168 */
+#define HARTER_HEIGHTWAY 2 /* Dragon curve p292 */
+#define TURTLE_CURVES 3
+
+#define POINT(x_1,y_1,x_2,y_2) (((x_2)==(x_1))?(((y_2)>(y_1))?90.0:270.0):\
+ ((x_2)>(x_1))?(atan(((y_2)-(y_1))/((x_2)-(x_1)))*(180.0/M_PI)):\
+ (atan(((y_2)-(y_1))/((x_2)-(x_1)))*(180.0/M_PI)+180.0))
+#define TURN(theta, angle) ((theta)+=(angle))
+#define STEP(x, y, r, theta) ((x)+=(r)*cos((theta)*M_PI/180.0)),\
+ ((y)+=(r)*sin((theta)*M_PI/180.0))
+
+typedef struct {
+ double r, theta, x, y;
+} turtletype;
+
+typedef struct {
+ double x, y;
+} complextype;
+
+typedef struct {
+ int width, height;
+ int time;
+ int level;
+ int curve;
+ int r, maxlevel, min, dir;
+ XPoint pt1, pt2;
+ XPoint start;
+ turtletype turtle;
+ int sign;
+} turtlestruct;
+
+static turtlestruct *turtles = NULL;
+
+static void
+generate_hilbert(ModeInfo * mi, int r1, int r2)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ turtlestruct *tp = &turtles[MI_SCREEN(mi)];
+
+ tp->level--;
+
+ if (tp->level > 0)
+ generate_hilbert(mi, r2, r1);
+
+ tp->pt2.x += r1;
+ tp->pt2.y += r2;
+ XDrawLine(display, window, gc,
+ tp->pt1.x, tp->pt1.y, tp->pt2.x, tp->pt2.y);
+ tp->pt1.x = tp->pt2.x;
+ tp->pt1.y = tp->pt2.y;
+
+ if (tp->level > 0)
+ generate_hilbert(mi, r1, r2);
+
+ tp->pt2.x += r2;
+ tp->pt2.y += r1;
+ XDrawLine(display, window, gc,
+ tp->pt1.x, tp->pt1.y, tp->pt2.x, tp->pt2.y);
+ tp->pt1.x = tp->pt2.x;
+ tp->pt1.y = tp->pt2.y;
+
+ if (tp->level > 0)
+ generate_hilbert(mi, r1, r2);
+
+ tp->pt2.x -= r1;
+ tp->pt2.y -= r2;
+ XDrawLine(display, window, gc,
+ tp->pt1.x, tp->pt1.y, tp->pt2.x, tp->pt2.y);
+ tp->pt1.x = tp->pt2.x;
+ tp->pt1.y = tp->pt2.y;
+
+ if (tp->level > 0)
+ generate_hilbert(mi, -r2, -r1);
+
+ tp->level++;
+}
+
+static void
+generate_cesarovar(ModeInfo * mi, double pt1x, double pt1y,
+ double pt2x, double pt2y, int level, int sign)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ turtlestruct *tp = &turtles[MI_SCREEN(mi)];
+ complextype points[4];
+
+ level--;
+
+ tp->turtle.r = sqrt((double) ((pt2x - pt1x) * (pt2x - pt1x) +
+ (pt2y - pt1y) * (pt2y - pt1y))) / 2.0;
+ points[0].x = pt1x;
+ points[0].y = pt1y;
+ points[2].x = pt2x;
+ points[2].y = pt2y;
+ tp->turtle.theta = POINT(pt1x, pt1y, pt2x, pt2y);
+ tp->turtle.x = pt1x;
+ tp->turtle.y = pt1y;
+ STEP(tp->turtle.x, tp->turtle.y, tp->turtle.r, tp->turtle.theta);
+ points[3].x = tp->turtle.x;
+ points[3].y = tp->turtle.y;
+ TURN(tp->turtle.theta, 90.0 * (double) sign);
+ STEP(tp->turtle.x, tp->turtle.y, tp->turtle.r, tp->turtle.theta);
+ points[1].x = tp->turtle.x;
+ points[1].y = tp->turtle.y;
+ sign = -1;
+ if (level > 0) {
+ int j;
+
+ for (j = 0; j < 2; j++) {
+ pt1x = points[j].x;
+ pt2x = points[j + 1].x;
+ pt1y = points[j].y;
+ pt2y = points[j + 1].y;
+ generate_cesarovar(mi, pt1x, pt1y, pt2x, pt2y, level, sign);
+ }
+ } else {
+ XDrawLine(display, window, gc,
+ (int) points[0].x + tp->start.x, (int) points[0].y + tp->start.y,
+ (int) points[2].x + tp->start.x, (int) points[2].y + tp->start.y);
+ XDrawLine(display, window, gc,
+ (int) points[1].x + tp->start.x, (int) points[1].y + tp->start.y,
+ (int) points[3].x + tp->start.x, (int) points[3].y + tp->start.y);
+ }
+}
+
+static void
+generate_harter_heightway(ModeInfo * mi, double pt1x, double pt1y,
+ double pt2x, double pt2y, int level, int sign)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ turtlestruct *tp = &turtles[MI_SCREEN(mi)];
+ complextype points[4];
+ int sign2 = -1;
+
+ level--;
+
+ tp->turtle.r = sqrt((double) ((pt2x - pt1x) * (pt2x - pt1x) +
+ (pt2y - pt1y) * (pt2y - pt1y)) / 2.0);
+ points[0].x = pt1x;
+ points[0].y = pt1y;
+ points[2].x = pt2x;
+ points[2].y = pt2y;
+ tp->turtle.theta = POINT(pt1x, pt1y, pt2x, pt2y);
+ tp->turtle.x = pt1x;
+ tp->turtle.y = pt1y;
+ TURN(tp->turtle.theta, 45.0 * (double) sign);
+ STEP(tp->turtle.x, tp->turtle.y, tp->turtle.r, tp->turtle.theta);
+ points[1].x = tp->turtle.x;
+ points[1].y = tp->turtle.y;
+ if (level > 0) {
+ int j;
+
+ for (j = 0; j < 2; j++) {
+ pt1x = points[j].x;
+ pt2x = points[j + 1].x;
+ pt1y = points[j].y;
+ pt2y = points[j + 1].y;
+ generate_harter_heightway(mi, pt1x, pt1y, pt2x, pt2y, level, sign2);
+ sign2 *= -1;
+ }
+ } else {
+ XDrawLine(display, window, gc,
+ (int) points[0].x + tp->start.x, (int) points[0].y + tp->start.y,
+ (int) points[1].x + tp->start.x, (int) points[1].y + tp->start.y);
+ XDrawLine(display, window, gc,
+ (int) points[1].x + tp->start.x, (int) points[1].y + tp->start.y,
+ (int) points[2].x + tp->start.x, (int) points[2].y + tp->start.y);
+ }
+}
+
+
+void
+init_turtle(ModeInfo * mi)
+{
+ turtlestruct *tp;
+ int i;
+
+ if (turtles == NULL) {
+ if ((turtles = (turtlestruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (turtlestruct))) == NULL)
+ return;
+ }
+ tp = &turtles[MI_SCREEN(mi)];
+
+ tp->width = MI_WIN_WIDTH(mi);
+ tp->height = MI_WIN_HEIGHT(mi);
+ tp->min = MIN(tp->width, tp->height);
+ tp->maxlevel = 0;
+ i = tp->min;
+ do {
+ tp->r = i;
+ tp->maxlevel++;
+ i = (tp->min - 1) / (1 << tp->maxlevel);
+ } while (i > 1);
+ tp->maxlevel--;
+ tp->r = tp->min = (tp->r << tp->maxlevel);
+
+ tp->curve = NRAND(TURTLE_CURVES);
+ switch (tp->curve) {
+ case HILBERT:
+ tp->start.x = NRAND(tp->width - tp->min);
+ tp->start.y = NRAND(tp->height - tp->min);
+ break;
+ case CESARO_VAR:
+ tp->r <<= 6;
+ tp->min = 3 * tp->min / 4;
+ tp->start.x = tp->width / 2;
+ tp->start.y = tp->height / 2;
+ switch (NRAND(4)) {
+ case 0:
+ tp->pt1.x = -tp->min / 2;
+ tp->pt1.y = 0;
+ tp->pt2.x = tp->min / 2;
+ tp->pt2.y = 0;
+ tp->start.y -= tp->min / 6;
+ break;
+ case 1:
+ tp->pt1.x = 0;
+ tp->pt1.y = -tp->min / 2;
+ tp->pt2.x = 0;
+ tp->pt2.y = tp->min / 2;
+ tp->start.x += tp->min / 6;
+ break;
+ case 2:
+ tp->pt1.x = tp->min / 2;
+ tp->pt1.y = 0;
+ tp->pt2.x = -tp->min / 2;
+ tp->pt2.y = 0;
+ tp->start.y += tp->min / 6;
+ break;
+ case 3:
+ tp->pt1.x = 0;
+ tp->pt1.y = tp->min / 2;
+ tp->pt2.x = 0;
+ tp->pt2.y = -tp->min / 2;
+ tp->start.x -= tp->min / 6;
+ break;
+ }
+ break;
+ case HARTER_HEIGHTWAY:
+ tp->r <<= 6;
+ tp->min = 3 * tp->min / 4;
+ tp->start.x = tp->width / 2;
+ tp->start.y = tp->height / 2;
+ switch (NRAND(4)) {
+ case 0:
+ tp->pt1.x = -tp->min / 2;
+ tp->pt1.y = -tp->min / 12;
+ tp->pt2.x = tp->min / 2;
+ tp->pt2.y = -tp->min / 12;
+ break;
+ case 1:
+ tp->pt1.x = tp->min / 12;
+ tp->pt1.y = -tp->min / 2;
+ tp->pt2.x = tp->min / 12;
+ tp->pt2.y = tp->min / 2;
+ break;
+ case 2:
+ tp->pt1.x = tp->min / 2;
+ tp->pt1.y = tp->min / 12;
+ tp->pt2.x = -tp->min / 2;
+ tp->pt2.y = tp->min / 12;
+ break;
+ case 3:
+ tp->pt1.x = -tp->min / 12;
+ tp->pt1.y = tp->min / 2;
+ tp->pt2.x = -tp->min / 12;
+ tp->pt2.y = -tp->min / 2;
+ break;
+ }
+ }
+ tp->level = 0;
+ tp->sign = 1;
+ tp->dir = NRAND(4);
+ if (MI_NPIXELS(mi) <= 2)
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WIN_WHITE_PIXEL(mi));
+ tp->time = 0;
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+}
+
+void
+draw_turtle(ModeInfo * mi)
+{
+ turtlestruct *tp = &turtles[MI_SCREEN(mi)];
+
+ if (++tp->time > MI_CYCLES(mi))
+ init_turtle(mi);
+
+ if (MI_NPIXELS(mi) > 2)
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi),
+ MI_PIXEL(mi, NRAND(MI_NPIXELS(mi))));
+
+ tp->r = tp->r >> 1;
+ tp->level++;
+ if (tp->r > 1)
+ switch (tp->curve) {
+ case HILBERT:
+ switch (tp->dir) {
+ case 0:
+ tp->pt1.x = tp->pt2.x = tp->start.x + tp->r / 2;
+ tp->pt1.y = tp->pt2.y = tp->start.y + tp->r / 2;
+ generate_hilbert(mi, 0, tp->r);
+ break;
+ case 1:
+ tp->pt1.x = tp->pt2.x = tp->start.x + tp->min - tp->r / 2;
+ tp->pt1.y = tp->pt2.y = tp->start.y + tp->min - tp->r / 2;
+ generate_hilbert(mi, 0, -tp->r);
+ break;
+ case 2:
+ tp->pt1.x = tp->pt2.x = tp->start.x + tp->min - tp->r / 2;
+ tp->pt1.y = tp->pt2.y = tp->start.y + tp->min - tp->r / 2;
+ generate_hilbert(mi, -tp->r, 0);
+ break;
+ case 3:
+ tp->pt1.x = tp->pt2.x = tp->start.x + tp->r / 2;
+ tp->pt1.y = tp->pt2.y = tp->start.y + tp->r / 2;
+ generate_hilbert(mi, tp->r, 0);
+ }
+ break;
+ case CESARO_VAR:
+ generate_cesarovar(mi, tp->pt1.x, tp->pt1.y, tp->pt2.x, tp->pt2.y,
+ tp->level, tp->sign);
+ break;
+ case HARTER_HEIGHTWAY:
+ generate_harter_heightway(mi, tp->pt1.x, tp->pt1.y,
+ tp->pt2.x, tp->pt2.y, tp->level, tp->sign);
+ break;
+ }
+}
+
+void
+release_turtle(ModeInfo * mi)
+{
+ if (turtles != NULL) {
+ (void) free((void *) turtles);
+ turtles = NULL;
+ }
+}
--- /dev/null
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)utils.c 4.03 97/05/08 xlockmore";
+
+#endif
+
+/*-
+ * utils.c - various utilities - usleep, seconds, SetRNG, LongRNG, hsbramp.
+ *
+ * Copyright (c) 1991 by Patrick J. Naughton.
+ *
+ * Revision History:
+ *
+ * Changes maintained by David Bagley <bagleyd@bigfoot.com>
+ * 08-Jul-96: Bug in strcat_firstword fixed thanks to
+ <Jeffrey_Doggett@caradon.com>. Fix for ":not found" text
+ that appears after about 40 minutes.
+ * 04-Apr-96: Added procedures to handle wildcards on filenames
+ * J. Jansen <joukj@crys.chem.uva.nl>
+ * 15-May-95: random number generator added, moved hsbramp.c to utils.c .
+ * Also renamed file from usleep.c to utils.c .
+ * 14-Mar-95: patches for rand and seconds for VMS
+ * 27-Feb-95: fixed nanosleep for times >= 1 second
+ * 05-Jan-95: nanosleep for Solaris 2.3 and greater Greg Onufer
+ * <Greg.Onufer@Eng.Sun.COM>
+ * 22-Jun-94: Fudged for VMS by Anthony Clarke
+ * <Anthony.D.Clarke@Support.Hatfield.Raytheon.bae.eurokom.ie>
+ * 10-Jun-94: patch for BSD from Victor Langeveld <vic@mbfys.kun.nl>
+ * 02-May-94: patch for Linux, got ideas from Darren Senn's xlock
+ * <sinster@scintilla.capitola.ca.us>
+ * 21-Mar-94: patch fix for HP from <R.K.Lloyd@csc.liv.ac.uk>
+ * 01-Dec-93: added patch for HP
+ *
+ * Changes of Patrick J. Naughton
+ * 30-Aug-90: written.
+ *
+ */
+
+#include "xlock.h"
+
+XPoint hexagonUnit[6] =
+{
+ {0, 0},
+ {1, 1},
+ {0, 2},
+ {-1, 1},
+ {-1, -1},
+ {0, -2}
+};
+
+XPoint triangleUnit[2][3] =
+{
+ {
+ {0, 0},
+ {1, -1},
+ {0, 2}
+ },
+ {
+ {0, 0},
+ {-1, 1},
+ {0, -2}
+ }
+};
+
+#include <sys/stat.h>
+
+#ifdef USE_OLD_EVENT_LOOP
+#if !defined( VMS ) || defined( XVMSUTILS ) || ( __VMS_VER >= 70000000 )
+#ifdef USE_XVMSUTILS
+#include <X11/unix_time.h>
+#endif
+#if HAVE_SYS_TIME_H
+#include <sys/time.h>
+#else
+#if HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+#endif
+#else
+#include <starlet.h>
+#endif
+#if defined( SYSV ) || defined( SVR4 )
+#ifdef LESS_THAN_AIX3_2
+#include <sys/poll.h>
+#else /* !LESS_THAN_AIX3_2 */
+#include <poll.h>
+#endif /* !LESS_THAN_AIX3_2 */
+#endif /* defined( SYSV ) || defined( SVR4 ) */
+
+#ifndef HAVE_USLEEP
+ /* usleep should be defined */
+int
+usleep(unsigned long usec)
+{
+#if (defined( SYSV ) || defined( SVR4 )) && !defined( __hpux )
+#ifdef HAVE_NANOSLEEP
+ {
+ struct timespec rqt;
+
+ rqt.tv_nsec = 1000 * (usec % (unsigned long) 1000000);
+ rqt.tv_sec = usec / (unsigned long) 1000000;
+ return nanosleep(&rqt, NULL);
+ }
+#else /* !HAVE_NANOSLEEP */
+ (void) poll((void *) 0, (int) 0, usec / 1000); /* ms resolution */
+#endif /* !HAVE_NANOSLEEP */
+#else /* !SYSV */
+#if HAVE_GETTIMEOFDAY
+ struct timeval time_out;
+
+ time_out.tv_usec = usec % (unsigned long) 1000000;
+ time_out.tv_sec = usec / (unsigned long) 1000000;
+ (void) select(0, (void *) 0, (void *) 0, (void *) 0, &time_out);
+#else
+ long timadr[2];
+
+ if (usec != 0) {
+ timadr[0] = -usec * 10;
+ timadr[1] = -1;
+
+ sys$setimr(4, &timadr, 0, 0, 0);
+ sys$waitfr(4);
+ }
+#endif
+#endif /* !SYSV */
+ return 0;
+}
+#endif /* !HAVE_USLEEP */
+#endif /* USE_OLD_EVENT_LOOP */
+
+/*-
+ * returns the number of seconds since 01-Jan-70.
+ * This is used to control rate and timeout in many of the animations.
+ */
+unsigned long
+seconds(void)
+{
+#if HAVE_GETTIMEOFDAY
+ struct timeval now;
+
+ (void) gettimeofday(&now, NULL);
+ return (unsigned long) now.tv_sec;
+#else
+ return (unsigned long) time((time_t *) 0);
+#endif
+}
+
+static int
+readable(char *filename)
+{
+ FILE *fp;
+
+ if ((fp = my_fopen(filename, "r")) == NULL)
+ return False;
+ (void) fclose(fp);
+ return True;
+}
+
+FILE *
+my_fopen(char *filename, char *type)
+{
+ FILE *fp = NULL;
+ int s;
+ struct stat fileStat;
+
+ s = stat(filename, &fileStat);
+ if (s >= 0 && S_ISREG(fileStat.st_mode)) {
+ if ((fp = fopen(filename, type)) == NULL)
+ return NULL;
+ } else {
+ return NULL;
+ }
+
+ return fp;
+}
+
+#if (! HAVE_STRDUP )
+char *
+strdup(char *str)
+{
+ register char *ptr;
+
+ ptr = (char *) malloc(strlen(str) + 1);
+ (void) strcpy(ptr, str);
+ return ptr;
+}
+#endif
+
+/*-
+ Dr. Park's algorithm published in the Oct. '88 ACM "Random Number
+ Generators: Good Ones Are Hard To Find" His version available at
+ ftp://cs.wm.edu/pub/rngs.tar Present form by many authors.
+ */
+
+static int Seed = 1; /* This is required to be 32 bits long */
+
+/*-
+ * Given an integer, this routine initializes the RNG seed.
+ */
+void
+SetRNG(long int s)
+{
+ Seed = (int) s;
+}
+
+/*-
+ * Returns an integer between 0 and 2147483647, inclusive.
+ */
+long
+LongRNG(void)
+{
+ if ((Seed = Seed % 44488 * 48271 - Seed / 44488 * 3399) < 0)
+ Seed += 2147483647;
+ return (long) (Seed - 1);
+}
+
+
+#include <ctype.h>
+#define FROM_PROGRAM 1
+#define FROM_FORMATTEDFILE 2
+#define FROM_FILE 3
+#define FROM_RESRC 4
+
+char *program, *messagesfile, *messagefile, *message, *mfont;
+
+static char *def_words = "I'm out running around.";
+static int getwordsfrom;
+
+static void
+strcat_firstword(char *fword, char *words)
+{
+ while (*fword)
+ fword++;
+ while (*words && !(isspace(*words)))
+ *fword++ = *words++;
+ *fword = '\0';
+}
+
+int
+isRibbon(void)
+{
+ return (getwordsfrom == FROM_RESRC);
+}
+
+char *
+getWords(int screen)
+{
+ FILE *pp;
+ static char *buf = NULL, progerr[BUFSIZ], progrun[BUFSIZ];
+ register char *p;
+ extern int pclose(FILE *);
+ int i;
+
+ if (!buf) {
+ buf = (char *) calloc(MAXSCREENS * BUFSIZ, sizeof(char));
+ if (!buf)
+ return NULL;
+ }
+ p = &buf[screen * BUFSIZ];
+ *p = '\0';
+ if (strlen(message))
+ getwordsfrom = FROM_RESRC;
+ else if (strlen(messagefile)) {
+ getwordsfrom = FROM_FILE;
+ } else if (strlen(messagesfile)) {
+ getwordsfrom = FROM_FORMATTEDFILE;
+ } else {
+ getwordsfrom = FROM_PROGRAM;
+ (void) sprintf(progrun, "( %s ) 2>&1",
+ (!program) ? DEF_PROGRAM : program);
+ }
+
+ switch (getwordsfrom) {
+#ifndef VMS
+ case FROM_PROGRAM:
+/*-
+ * PURIFY 4.0.1 on SunOS4 and on Solaris2 reports a duplication of file
+ * descriptor on the next line. Do not know if this is a problem or not. */
+ if ((pp = (FILE *) popen(progrun, "r")) != NULL) {
+ while (fgets(p, BUFSIZ - strlen(&buf[screen * BUFSIZ]), pp)) {
+ if (strlen(&buf[screen * BUFSIZ]) + 1 < BUFSIZ)
+ p = &buf[screen * BUFSIZ] + strlen(&buf[screen * BUFSIZ]);
+ else
+ break;
+ }
+ (void) pclose(pp);
+ p = &buf[screen * BUFSIZ];
+ if (!buf[screen * BUFSIZ])
+ (void) sprintf(&buf[screen * BUFSIZ], "\"%s\" produced no output!",
+ (!program) ? DEF_PROGRAM : program);
+ else {
+ (void) memset((char *) progerr, 0, sizeof (progerr));
+ (void) strcpy(progerr, "sh: ");
+ strcat_firstword(progerr, (!program) ? DEF_PROGRAM : program);
+ (void) strcat(progerr, ": not found\n");
+ if (!strcmp(&buf[screen * BUFSIZ], progerr))
+ switch (NRAND(12)) {
+ case 0:
+ (void) strcat(&buf[screen * BUFSIZ],
+ "( Get with the program, bub. )\n");
+ break;
+ case 1:
+ (void) strcat(&buf[screen * BUFSIZ],
+ "( I blow my nose at you, you silly person! )\n");
+ break;
+ case 2:
+ (void) strcat(&buf[screen * BUFSIZ],
+ "\nThe resource you want to\nset is `program'.\n");
+ break;
+ case 3:
+ (void) strcat(&buf[screen * BUFSIZ],
+ "\nHelp!! Help!!\nAAAAAAGGGGHHH!! \n\n");
+ break;
+ case 4:
+ (void) strcat(&buf[screen * BUFSIZ],
+ "( Hey, who called me `Big Nose'? )\n");
+ break;
+ case 5:
+ (void) strcat(&buf[screen * BUFSIZ],
+ "( Hello? Are you paying attention? )\n");
+ break;
+ case 6:
+ (void) strcat(&buf[screen * BUFSIZ],
+ "sh: what kind of fool do you take me for? \n");
+ break;
+ case 7:
+ (void) strcat(&buf[screen * BUFSIZ],
+ "\nRun me with -program \"fortune -o\".\n");
+ break;
+ case 8:
+ (void) strcat(&buf[screen * BUFSIZ],
+ "( Where is your fortune? )\n");
+ break;
+ case 9:
+ (void) strcat(&buf[screen * BUFSIZ],
+ "( Your fortune has not been written yet!! )");
+ break;
+ }
+ }
+ p = &buf[screen * BUFSIZ];
+ } else {
+ perror(progrun);
+ p = def_words;
+ }
+ break;
+#endif
+ case FROM_FORMATTEDFILE:
+ if ((pp = my_fopen(messagesfile, "r")) != NULL) {
+ int len_mess_file;
+
+ if (fscanf(pp, "%d", &len_mess_file)) {
+ int no_quote;
+
+ if (len_mess_file <= 0)
+ buf[screen * BUFSIZ] = '\0';
+ else {
+ (void) fgets(p, BUFSIZ - strlen(&buf[screen * BUFSIZ]), pp);
+ /* get first '%%' (the one after the number of quotes) */
+ (void) fgets(p, BUFSIZ - strlen(&buf[screen * BUFSIZ]), pp);
+ no_quote = NRAND(len_mess_file);
+ for (i = 0; i <= no_quote; ++i) {
+ unsigned int len_cur = 0;
+
+ buf[screen * BUFSIZ] = '\0';
+ p = &buf[screen * BUFSIZ] + strlen(&buf[screen * BUFSIZ]);
+ while (fgets(p, BUFSIZ - strlen(&buf[screen * BUFSIZ]), pp)) {
+ if (strlen(&buf[screen * BUFSIZ]) + 1 < BUFSIZ) {
+ /* a line with '%%' contains 3 characters */
+ if ((strlen(&buf[screen * BUFSIZ]) == len_cur + 3) &&
+ (p[0] == '%') && (p[1] == '%')) {
+ p[0] = '\0'; /* get rid of "%%" in &buf[screen * BUFSIZ] */
+ break;
+ } else {
+ p = &buf[screen * BUFSIZ] + strlen(&buf[screen * BUFSIZ]);
+ len_cur = strlen(&buf[screen * BUFSIZ]);
+ }
+ } else
+ break;
+ }
+ }
+ }
+ (void) fclose(pp);
+ if (!buf[screen * BUFSIZ])
+ (void) sprintf(&buf[screen * BUFSIZ],
+ "file \"%s\" is empty!", messagesfile);
+ p = &buf[screen * BUFSIZ];
+ } else {
+ (void) sprintf(&buf[screen * BUFSIZ],
+ "file \"%s\" not in correct format!", messagesfile);
+ p = &buf[screen * BUFSIZ];
+ }
+ } else {
+ (void) sprintf(&buf[screen * BUFSIZ],
+ "could not read file \"%s\"!", messagesfile);
+ p = &buf[screen * BUFSIZ];
+ }
+ break;
+ case FROM_FILE:
+ if ((pp = my_fopen(messagefile, "r")) != NULL) {
+ while (fgets(p, BUFSIZ - strlen(&buf[screen * BUFSIZ]), pp)) {
+ if (strlen(&buf[screen * BUFSIZ]) + 1 < BUFSIZ)
+ p = &buf[screen * BUFSIZ] + strlen(&buf[screen * BUFSIZ]);
+ else
+ break;
+ }
+ (void) fclose(pp);
+ if (!buf[screen * BUFSIZ])
+ (void) sprintf(&buf[screen * BUFSIZ],
+ "file \"%s\" is empty!", messagefile);
+ p = &buf[screen * BUFSIZ];
+ } else {
+ (void) sprintf(&buf[screen * BUFSIZ],
+ "could not read file \"%s\"!", messagefile);
+ p = &buf[screen * BUFSIZ];
+ }
+ break;
+ case FROM_RESRC:
+ p = message;
+ break;
+ default:
+ p = def_words;
+ break;
+ }
+
+ if (!p || *p == '\0')
+ p = def_words;
+ return p;
+}
+
+XFontStruct *
+getFont(Display * display)
+{
+ XFontStruct *mode_font;
+
+ if (!(mode_font = XLoadQueryFont(display, (mfont) ? mfont : DEF_MFONT))) {
+ if (mfont) {
+ (void) fprintf(stderr, "can not find font: %s, using %s...\n",
+ mfont, DEF_MFONT);
+ mode_font = XLoadQueryFont(display, DEF_MFONT);
+ }
+ if (!(mode_font)) {
+ (void) fprintf(stderr, "can not find font: %s, using %s...\n",
+ DEF_MFONT, FALLBACK_FONTNAME);
+ mode_font = XLoadQueryFont(display, FALLBACK_FONTNAME);
+ if (!mode_font) {
+ (void) fprintf(stderr, "can not even find %s!!!\n", FALLBACK_FONTNAME);
+ return (None); /* Do not want to exit when in a mode */
+ }
+ }
+ }
+ return mode_font;
+}
+
+#if HAVE_DIRENT_H
+static char *
+randomImage(char *im_file)
+{
+ extern char directory_r[DIRBUF];
+ extern struct dirent **image_list;
+ extern int num_list;
+ char *newimf;
+ int num;
+
+ if (num_list > 0) {
+ num = NRAND(num_list);
+ if ((newimf = malloc(strlen(directory_r)
+ + strlen(image_list[num]->d_name) + 1)) != 0)
+ {
+ (void) sprintf(newimf, "%s%s",
+ directory_r, image_list[num]->d_name);
+ free(im_file);
+ im_file = newimf;
+ }
+ }
+ return im_file;
+}
+
+#endif
+
+#if HAVE_DIRENT_H
+
+extern Bool debug;
+
+/* index_dir emulation of FORTRAN's index in C. Author: J. Jansen */
+static int
+index_dir(char *str1, char *substr)
+{
+ int i, num, l1 = strlen(str1), ls = strlen(substr), found;
+ char *str1_tmp, *substr_tmp, *substr_last;
+
+ num = l1 - ls + 1;
+ substr_last = substr + ls;
+ for (i = 0; i < num; ++i) {
+ str1_tmp = str1 + i;
+ substr_tmp = substr;
+ found = 1;
+ while (substr_tmp < substr_last)
+ if (*str1_tmp++ != *substr_tmp++) {
+ found = 0;
+ break;
+ }
+ if (found)
+ return (i + 1);
+ }
+ return (0);
+}
+
+#ifdef VMS
+/* Upcase string Author: J. Jansen */
+void
+upcase(char *s)
+{
+ int i;
+ char c[1];
+
+ for (i = 0; s[i] != '\0'; i++) {
+ if (s[i] >= 'a' && s[i] <= 'z') {
+ *c = s[i];
+ s[i] = (char) (*c - 32);
+ }
+ }
+}
+
+#endif
+
+/* Split full path into directory and filename parts Author: J. Jansen */
+void
+get_dir(char *fullpath, char *dir, char *filename)
+{
+ char *ln;
+ int ip_temp = 0, ip;
+
+#ifdef VMS
+ ip = index_dir(fullpath, "]");
+#else
+ ln = fullpath;
+ ip = 0;
+ while ((ip_temp = index_dir(ln, "/"))) {
+ ip = ip + ip_temp;
+ ln = fullpath + ip;
+ }
+#endif
+ if (ip == 0) {
+#ifdef VMS
+ (void) strcpy(dir, "[]");
+#else
+ (void) strcpy(dir, "./");
+#endif
+ } else {
+ if (ip > DIRBUF - 1)
+ ip_temp = DIRBUF - 1;
+ else
+ ip_temp = ip;
+ (void) strncpy(dir, fullpath, ip_temp);
+ dir[ip_temp] = '\0';
+ }
+ ln = fullpath + ip;
+ (void) strncpy(filename, ln, MAXNAMLEN - 1);
+ filename[MAXNAMLEN - 1] = '\0';
+#ifdef VMS
+ upcase(filename); /* VMS knows uppercase filenames only */
+#endif
+ if (debug)
+ (void) printf("get_dir %s %s %s\n", fullpath, dir, filename);
+}
+
+/* Procedure to select the matching filenames Author: J. Jansen */
+int
+sel_image(struct dirent *name)
+{
+ extern char filename_r[MAXNAMLEN];
+ char *name_tmp = name->d_name;
+ char *filename_tmp = filename_r;
+ static int numfrag = -1;
+ static char *frags[64];
+ int ip, i;
+
+ if (numfrag == -1) {
+ ++numfrag;
+ while ((ip = index_dir(filename_tmp, "*"))) {
+ frags[numfrag] = (char *) malloc(ip);
+ (void) strcpy(frags[numfrag], "\0");
+ (void) strncat(frags[numfrag], filename_tmp, ip - 1);
+ ++numfrag;
+ filename_tmp = filename_tmp + ip;
+ }
+ frags[numfrag] = (char *) malloc(strlen(filename_tmp)+1);
+ (void) strcpy(frags[numfrag], filename_tmp);
+ }
+ for (i = 0; i <= numfrag; ++i) {
+ ip = index_dir(name_tmp, frags[i]);
+ if (ip == 0)
+ return (0);
+ name_tmp = name_tmp + ip;
+ }
+
+ return (1);
+}
+
+/* scandir implementiation for VMS Author: J. Jansen */
+/* name changed to scan_dir to solve portablity problems */
+#define _MEMBL_ 64
+int
+scan_dir(const char *directoryname, struct dirent ***namelist,
+ int (*select) (struct dirent *),
+ int (*compare) (const void *, const void *))
+{
+ DIR *dirp;
+ struct dirent *new_entry, **namelist_tmp;
+ int size_tmp, num_list_tmp;
+
+ if ((dirp = opendir(directoryname)) == NULL)
+ return (-1);
+ size_tmp = _MEMBL_;
+ namelist_tmp = (struct dirent **) malloc(size_tmp * sizeof (struct dirent *));
+
+ if (namelist_tmp == NULL)
+ return (-1);
+ num_list_tmp = 0;
+ while ((new_entry = readdir(dirp)) != NULL) {
+#ifndef VMS
+ if (!strcmp(new_entry->d_name, ".") && !strcmp(new_entry->d_name, ".."))
+ continue;
+#endif
+ if (select != NULL && !(*select) (new_entry))
+ continue;
+ if (++num_list_tmp >= size_tmp) {
+ size_tmp = size_tmp + _MEMBL_;
+ namelist_tmp = (struct dirent **) realloc(
+ (void *) namelist_tmp, size_tmp * sizeof (struct dirent *));
+
+ if (namelist_tmp == NULL)
+ return (-1);
+ }
+ /* Core Dumps here for Solaris2 if files names in dir are > 14 characters */
+ namelist_tmp[num_list_tmp - 1] =
+ (struct dirent *) malloc(sizeof (struct dirent)
+#ifdef SVR4
+ + strlen(new_entry->d_name)
+#endif
+ );
+
+ (void) strcpy(namelist_tmp[num_list_tmp - 1]->d_name, new_entry->d_name);
+
+ *namelist = namelist_tmp;
+#ifdef SOLARIS2
+ if (debug)
+ (void) printf("file %d: %s\n",
+ num_list_tmp - 1, namelist_tmp[num_list_tmp - 1]->d_name);
+#endif
+ }
+#ifdef SOLARIS2 /* Data seems to get corrupted for Solaris2 */
+ if (debug) {
+ (void) printf("directory: %s\n", directoryname);
+ for (size_tmp = 0; size_tmp < num_list_tmp; size_tmp++)
+ (void) printf("file %d: %s\n", size_tmp, namelist_tmp[size_tmp]->d_name);
+ }
+#endif
+
+ (void) closedir(dirp);
+ if (num_list_tmp && compare != NULL)
+ (void) qsort((void *) namelist_tmp, num_list_tmp,
+ sizeof (struct dirent *), compare);
+
+ *namelist = namelist_tmp;
+ return (num_list_tmp);
+}
+
+#endif
+
+extern int XbmReadFileToImage(char *filename,
+ int *width, int *height, unsigned char **bits);
+
+#if defined( USE_XPM ) || defined( USE_XPMINC )
+#if USE_XPMINC
+#include <xpm.h>
+#else
+#include <X11/xpm.h> /* Normal spot */
+#endif
+#endif
+#include "ras.h"
+
+static XImage blogo =
+{
+ 0, 0, /* width, height */
+ 0, XYBitmap, 0, /* xoffset, format, data */
+ LSBFirst, 8, /* byte-order, bitmap-unit */
+ LSBFirst, 8, 1 /* bitmap-bit-order, bitmap-pad, depth */
+};
+
+void
+getImage(ModeInfo * mi, XImage ** logo,
+ int width, int height, unsigned char *bits,
+#if defined( USE_XPM ) || defined( USE_XPMINC )
+ char **name,
+#endif
+ int *graphics_format, Colormap * ncm,
+ unsigned long *blackpix, unsigned long *whitepix)
+{
+ extern char *imagefile;
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+
+#if defined( USE_XPM ) || defined( USE_XPMINC )
+ XpmAttributes attrib;
+
+#endif
+
+ if (!fixedColors(mi))
+ *ncm = XCreateColormap(display, window, MI_VISUAL(mi), AllocNone);
+ else
+ *ncm = None;
+
+#if defined( USE_XPM ) || defined( USE_XPMINC )
+ attrib.visual = MI_VISUAL(mi);
+ if (*ncm != None)
+ attrib.colormap = *ncm;
+ else
+ attrib.colormap = MI_WIN_COLORMAP(mi);
+ attrib.depth = MI_WIN_DEPTH(mi);
+ attrib.valuemask = XpmVisual | XpmColormap | XpmDepth;
+#endif
+
+ *graphics_format = 0;
+
+#if HAVE_DIRENT_H
+ imagefile = randomImage(imagefile);
+#endif
+
+ if (strlen(imagefile))
+ if (readable(imagefile)) {
+ if (MI_NPIXELS(mi) > 2) {
+ if (RasterSuccess == RasterFileToImage(mi, imagefile, logo)) {
+ *graphics_format = IS_RASTERFILE;
+ if (!fixedColors(mi))
+ SetImageColors(display, *ncm);
+ *blackpix = GetBlack();
+ *whitepix = GetWhite();
+ }
+ }
+#if defined( USE_XPM ) || defined( USE_XPMINC )
+#ifndef USE_MONOXPM
+ if (MI_NPIXELS(mi) > 2)
+#endif
+ {
+ if (*graphics_format <= 0) {
+ if (*ncm != None)
+ reserveColors(mi, *ncm, blackpix, whitepix);
+ if (XpmSuccess == XpmReadFileToImage(display, imagefile, logo,
+ (XImage **) NULL, &attrib))
+ *graphics_format = IS_XPMFILE;
+ }
+ }
+#endif
+ if (*graphics_format <= 0)
+ if (!blogo.data) {
+ if (BitmapSuccess == XbmReadFileToImage(imagefile,
+ &blogo.width, &blogo.height, (unsigned char **) &blogo.data)) {
+ blogo.bytes_per_line = (blogo.width + 7) / 8;
+ *graphics_format = IS_XBMFILE;
+ *logo = &blogo;
+ }
+ } else {
+ *graphics_format = IS_XBMDONE;
+ *logo = &blogo;
+ }
+ if (*graphics_format <= 0)
+ (void) fprintf(stderr,
+ "\"%s\" is in an unrecognized format\n", imagefile);
+ } else
+ (void) fprintf(stderr,
+ "could not read file \"%s\"\n", imagefile);
+#if defined( USE_XPM ) || defined( USE_XPMINC )
+ if (*graphics_format <= 0)
+#ifndef USE_MONOXPM
+ if (MI_NPIXELS(mi) > 2)
+#endif
+ if (XpmSuccess == XpmCreateImageFromData(display, name,
+ logo, (XImage **) NULL, &attrib))
+ *graphics_format = IS_XPM;
+#endif
+ if (*graphics_format <= 0) {
+ if (!blogo.data) {
+ blogo.data = (char *) bits;
+ blogo.width = width;
+ blogo.height = height;
+ blogo.bytes_per_line = (blogo.width + 7) / 8;
+ *graphics_format = IS_XBM;
+ } else
+ *graphics_format = IS_XBMDONE;
+ *logo = &blogo;
+ }
+ if (*ncm != None && *graphics_format != IS_RASTERFILE &&
+ *graphics_format != IS_XPMFILE && *graphics_format != IS_XPM) {
+ XFreeColormap(display, *ncm);
+ *ncm = None;
+ }
+}
+
+void
+destroyImage(XImage ** logo, int *graphics_format)
+{
+ switch (*graphics_format) {
+ case IS_XBM:
+ blogo.data = NULL;
+ break;
+ case IS_XBMFILE:
+ if (blogo.data) {
+ (void) free((void *) blogo.data);
+ blogo.data = NULL;
+ }
+ break;
+ case IS_XPM:
+ case IS_XPMFILE:
+ case IS_RASTERFILE:
+ if (logo)
+ XDestroyImage(*logo);
+ break;
+ }
+ *graphics_format = -1;
+ *logo = NULL;
+}
+
+void
+getBitmap(XImage ** logo, int width, int height, unsigned char *bits,
+ int *graphics_format)
+{
+ extern char *imagefile;
+
+#if HAVE_DIRENT_H
+ imagefile = randomImage(imagefile);
+#endif
+
+ if (strlen(imagefile))
+ if (readable(imagefile)) {
+ if (!blogo.data) {
+ if (BitmapSuccess == XbmReadFileToImage(imagefile,
+ &blogo.width, &blogo.height, (unsigned char **) &blogo.data)) {
+ blogo.bytes_per_line = (blogo.width + 7) / 8;
+ *graphics_format = IS_XBMFILE;
+ *logo = &blogo;
+ }
+ } else {
+ *graphics_format = IS_XBMDONE;
+ *logo = &blogo;
+ }
+ if (*graphics_format <= 0)
+ (void) fprintf(stderr,
+ "\"%s\" not xbm format\n", imagefile);
+ } else
+ (void) fprintf(stderr,
+ "could not read file \"%s\"\n", imagefile);
+ if (*graphics_format <= 0) {
+ if (!blogo.data) {
+ blogo.data = (char *) bits;
+ blogo.width = width;
+ blogo.height = height;
+ blogo.bytes_per_line = (blogo.width + 7) / 8;
+ *graphics_format = IS_XBM;
+ } else
+ *graphics_format = IS_XBMDONE;
+ *logo = &blogo;
+ }
+}
+
+void
+destroyBitmap(XImage ** logo, int *graphics_format)
+{
+ switch (*graphics_format) {
+ case IS_XBM:
+ blogo.data = NULL;
+ break;
+ case IS_XBMFILE:
+ if (blogo.data) {
+ (void) free((void *) blogo.data);
+ blogo.data = NULL;
+ }
+ break;
+ }
+ *graphics_format = -1;
+ *logo = NULL;
+}
+
+static struct visual_class_name {
+ int visualclass;
+ char *name;
+} VisualClassName[] = {
+
+ {
+ StaticGray, "StaticGray"
+ },
+ {
+ GrayScale, "GrayScale"
+ },
+ {
+ StaticColor, "StaticColor"
+ },
+ {
+ PseudoColor, "PseudoColor"
+ },
+ {
+ TrueColor, "TrueColor"
+ },
+ {
+ DirectColor, "DirectColor"
+ },
+ {
+ -1, NULL
+ },
+};
+
+int
+visualClassFromName(char *name)
+{
+ int a;
+ char *s1, *s2;
+ int visualclass = -1;
+
+ for (a = 0; VisualClassName[a].name; a++) {
+ for (s1 = VisualClassName[a].name, s2 = name; *s1 && *s2; s1++, s2++)
+ if ((isupper(*s1) ? tolower(*s1) : *s1) !=
+ (isupper(*s2) ? tolower(*s2) : *s2))
+ break;
+
+ if ((*s1 == '\0') || (*s2 == '\0')) {
+
+ if (visualclass != -1) {
+ (void) fprintf(stderr,
+ "%s does not uniquely describe a visual class (ignored)\n", name);
+ return (-1);
+ }
+ visualclass = VisualClassName[a].visualclass;
+ }
+ }
+ if (visualclass == -1)
+ (void) fprintf(stderr, "%s is not a visual class (ignored)\n", name);
+ return (visualclass);
+}
+
+char *
+nameOfVisualClass(int visualclass)
+{
+ int a;
+
+ for (a = 0; VisualClassName[a].name; a++)
+ if (VisualClassName[a].visualclass == visualclass)
+ return (VisualClassName[a].name);
+ return ("[Unknown Visual Class]");
+}
+
+#if defined(__cplusplus) || defined(c_plusplus)
+#define DEFAULT_VIS(v) v.c_class = DefaultVisual(display, screen)->c_class;
+#define WANTED_VIS(v) v.c_class = VisualClassWanted;
+#define CHECK_WANTED_VIS(v) ((v)->c_class == VisualClassWanted)
+#define NAME_VIS(v) nameOfVisualClass(v->c_class)
+#else
+#define DEFAULT_VIS(v) v.class = DefaultVisual(display, screen)->class;
+#define WANTED_VIS(v) v.class = VisualClassWanted;
+#define CHECK_WANTED_VIS(v) ((v)->class == VisualClassWanted)
+#define NAME_VIS(v) nameOfVisualClass(v->class)
+#endif
+
+void
+showVisualInfo(XVisualInfo * Vis)
+{
+ (void) fprintf(stderr, "Visual info: ");
+ (void) fprintf(stderr, "screen %d, ", Vis->screen);
+ (void) fprintf(stderr, "class %s, ", NAME_VIS(Vis));
+ (void) fprintf(stderr, "depth %d\n", Vis->depth);
+}
+
+/*-
+ * default_visual_info
+ *
+ * Gets a XVisualInfo structure that refers to a given visual or the default
+ * visual.
+ *
+ * - mi is the ModeInfo
+ * - visual is the visual to look up NULL => look up the default visual
+ * - default_info is set to point to the member of the returned list
+ * that corresponds to the default visual.
+ *
+ * Returns a list of XVisualInfo structures or NULL on failure. Free the list
+ * with XFree.
+ */
+static XVisualInfo *
+defaultVisualInfo(ModeInfo * mi, Visual * visual, XVisualInfo ** default_info)
+{
+ Display *display = MI_DISPLAY(mi);
+ int screen = MI_SCREEN(mi);
+ XVisualInfo *info_list, vTemplate;
+ int i, n;
+ extern int VisualClassWanted;
+
+ /* get a complete list of visuals */
+ /*info_list = XGetVisualInfo(display, VisualNoMask, NULL, &n); */
+ vTemplate.screen = screen;
+ vTemplate.depth = MI_WIN_DEPTH(mi);
+ if (VisualClassWanted == -1) {
+ DEFAULT_VIS(vTemplate);
+ } else {
+ WANTED_VIS(vTemplate);
+ }
+ info_list = XGetVisualInfo(display,
+ VisualScreenMask | VisualDepthMask | VisualClassMask,
+ &vTemplate, &n);
+ if (VisualClassWanted != -1 && n == 0) {
+ /* Wanted visual not found so use default */
+ DEFAULT_VIS(vTemplate);
+ info_list = XGetVisualInfo(display,
+ VisualScreenMask | VisualDepthMask | VisualClassMask,
+ &vTemplate, &n);
+ }
+/*-
+ WANTED_VIS(vTemplate);
+ if (VisualClassWanted == -1)
+ info_list = XGetVisualInfo(display, VisualScreenMask | VisualDepthMask,
+ &vTemplate, &n);
+ else
+ info_list = XGetVisUalInfo(display,
+ VisualScreenMask | VisualDepthMask | VisualClassMask,
+ &vTemplateWant, &n);
+ */
+ if ((info_list == NULL) || (n == 0)) {
+ if (MI_WIN_IS_VERBOSE(mi))
+ (void) fprintf(stderr, "Could not get any Visuals, numvisuals = %d.\n",
+ n);
+ return (NULL);
+ }
+ /* do we need to get the default visual? */
+ if (visual == NULL)
+ visual = DefaultVisual(display, screen);
+
+ *default_info = info_list;
+ if (VisualClassWanted == -1) {
+ /* search through the list for the default visual */
+ for (i = 0; i < n; i++, (*default_info)++)
+ if ((*default_info)->visual == visual &&
+ (*default_info)->screen == screen)
+ break;
+ } else {
+ /* search through the list for the requested visual
+ * with the greatest color depth */
+ for (i = 0; i < n; i++, (*default_info)++)
+ if ((*default_info)->depth >= 24 &&
+ (*default_info)->screen == screen &&
+ CHECK_WANTED_VIS(*default_info))
+ break;
+ if (i == n) {
+ *default_info = info_list;
+ for (i = 0; i < n; i++, (*default_info)++)
+ if ((*default_info)->depth == 16 &&
+ (*default_info)->screen == screen &&
+ CHECK_WANTED_VIS(*default_info))
+ break;
+ }
+ if (i == n) {
+ *default_info = info_list;
+ for (i = 0; i < n; i++, (*default_info)++)
+ if ((*default_info)->depth == 8 &&
+ (*default_info)->screen == screen &&
+ CHECK_WANTED_VIS(*default_info))
+ break;
+ }
+ if (i == n) {
+ *default_info = info_list;
+ for (i = 0; i < n; i++, (*default_info)++)
+ if ((*default_info)->depth == 4 &&
+ (*default_info)->screen == screen &&
+ CHECK_WANTED_VIS(*default_info))
+ break;
+ }
+ if (i == n) {
+ *default_info = info_list;
+ for (i = 0; i < n; i++, (*default_info)++)
+ if ((*default_info)->screen == screen &&
+ CHECK_WANTED_VIS(*default_info))
+ break;
+ }
+ }
+ if (MI_WIN_IS_VERBOSE(mi)) {
+ (void) fprintf(stderr, "Visual info: ");
+ (void) fprintf(stderr, "screen %d, ", (*default_info)->screen);
+ (void) fprintf(stderr, "class %s, ", NAME_VIS((*default_info)));
+ (void) fprintf(stderr, "depth %d\n", (*default_info)->depth);
+ }
+ /* return the list (and the default info) */
+ return (info_list);
+}
+
+
+Bool
+fixedColors(ModeInfo * mi)
+{
+#ifdef FORCEFIXEDCOLORS
+ /* pretending a fixed colourmap */
+ return FALSE;
+#else
+ XVisualInfo *list, *default_info;
+ Bool writeable;
+
+ /* get information about the default visual */
+ list = defaultVisualInfo(mi, MI_VISUAL(mi), &default_info);
+ writeable = (
+#if defined(__cplusplus) || defined(c_plusplus)
+ (default_info->c_class != StaticGray) &&
+ (default_info->c_class != StaticColor) &&
+ (default_info->c_class != TrueColor) &&
+#else
+ (default_info->class != StaticGray) &&
+ (default_info->class != StaticColor) &&
+ (default_info->class != TrueColor) &&
+#endif
+ (MI_NPIXELS(mi) > 2) &&
+ !MI_WIN_IS_INROOT(mi) &&
+ MI_WIN_IS_INSTALL(mi));
+ XFree((char *) list);
+ return !writeable;
+#endif
+}
+
+/*-
+ * setupColormap
+ *
+ * Create a read/write colourmap to use
+ *
+ */
+
+Bool
+setupColormap(ModeInfo * mi, int *colors, Bool * truecolor,
+ unsigned long *redmask, unsigned long *bluemask, unsigned long *greenmask)
+{
+
+ XVisualInfo *list, *default_info;
+
+ /* get information about the default visual */
+ list = defaultVisualInfo(mi, MI_VISUAL(mi), &default_info);
+
+ /* how many colours are there altogether? */
+ *colors = MI_NPIXELS(mi);
+ if (*colors > default_info->colormap_size) {
+ *colors = default_info->colormap_size;
+ }
+ if (*colors < 2)
+ *colors = 2;
+
+#if defined(__cplusplus) || defined(c_plusplus)
+ *truecolor = (default_info->c_class == TrueColor);
+#else
+ *truecolor = (default_info->class == TrueColor);
+#endif
+
+ *redmask = default_info->red_mask;
+ *greenmask = default_info->green_mask;
+ *bluemask = default_info->blue_mask;
+
+ XFree((char *) list);
+
+ return !fixedColors(mi);
+}
+
+/*-
+ * useableColors
+ */
+int
+preserveColors(unsigned long fg, unsigned long bg,
+ unsigned long white, unsigned long black)
+{
+ /* how many colours should we preserve (out of white, black, fg, bg)? */
+ if (((bg == black) || (bg == white)) && ((fg == black) || (fg == white)))
+ return 2;
+ else if ((bg == black) || (fg == black) ||
+ (bg == white) || (fg == white) || (bg == fg))
+ return 3;
+ else
+ return 4;
+}
+
+#ifdef USE_MATHERR
+/* Handle certain math exception errors */
+int
+matherr(register struct exception *x)
+{
+ extern Bool debug;
+
+ switch (x->type) {
+ case DOMAIN:
+ /* Suppress "atan2: DOMAIN error" stderr message */
+ if (!strcmp(x->name, "atan2")) {
+ x->retval = 0.0;
+ return ((debug) ? 0 : 1); /* suppress message unless debugging */
+ }
+ if (!strcmp(x->name, "sqrt")) {
+ x->retval = sqrt(-x->arg1);
+ /* x->retval = 0.0; */
+ return ((debug) ? 0 : 1); /* suppress message unless debugging */
+ }
+ break;
+#ifdef __hpux
+ /* Fix how HP-UX does not like sin and cos of angles >= 360. */
+ case TLOSS:
+ if (!strcmp(x->name, "cos")) {
+ x->retval = cos(fmod(x->arg1, 360.0));
+ return (1); /* suppress message */
+ }
+ if (!strcmp(x->name, "sin")) {
+ x->retval = sin(fmod(x->arg1, 360.0));
+ return (1); /* suppress message */
+ }
+ break;
+ case PLOSS:
+ return (1);
+ break;
+#endif
+ }
+ return (0); /* all other exceptions, execute default procedure */
+}
+#endif
+
+#ifdef USE_GL
+
+#include <GL/gl.h>
+#include <GL/glx.h>
+
+static XVisualInfo **glVis = NULL;
+static GLXContext *glXContext = NULL;
+
+/* Don't ever call this one from a module. It is only for xlock.c to use. */
+void
+FreeAllGL(Display * display)
+{
+ int scr;
+
+ if (glXContext) {
+ for (scr = 0; scr < MAXSCREENS; scr++) {
+ if (glXContext[scr])
+ glXDestroyContext(display, glXContext[scr]);
+ glXContext[scr] = NULL;
+ }
+ (void) free((void *) glXContext);
+ glXContext = NULL;
+ }
+ if (glVis) {
+ for (scr = 0; scr < MAXSCREENS; scr++) {
+ if (glVis[scr])
+ XFree(glVis[scr]);
+ glVis[scr] = NULL;
+ }
+ (void) free((void *) glVis);
+ glVis = NULL;
+ }
+}
+
+/*-
+ * NOTE WELL: We _MUST_ destroy the glXContext between each mode
+ * in random mode, otherwise OpenGL settings and paramaters from one
+ * mode will affect the default initial state for the next mode.
+ * BUT, we are going to keep the visual returned by glXChooseVisual,
+ * because it will still be good (and because Mesa must keep track
+ * of each one, even after XFree(), causing a small memory leak).
+ */
+
+XVisualInfo *
+getGLVisual(Display * display, int screen, XVisualInfo * wantVis, int mono)
+{
+
+ if (!glVis) {
+ glVis = (XVisualInfo **) calloc(MAXSCREENS, sizeof(XVisualInfo *));
+ if (!glVis)
+ return NULL;
+ }
+ /* If we already have it, use it! */
+ if (glVis[screen])
+ return (glVis[screen]);
+
+ if (wantVis) {
+ /* Use glXGetConfig() to see if wantVis has what we need already. */
+ int depthBits, doubleBuffer;
+
+ /* I don't check up on RGBA mode... we might want MONO */
+ /* glXGetConfig(display, wantVis, GLX_RGBA, &rgbaMode); */
+
+ glXGetConfig(display, wantVis, GLX_DEPTH_SIZE, &depthBits);
+ glXGetConfig(display, wantVis, GLX_DOUBLEBUFFER, &doubleBuffer);
+
+ if ((depthBits > 0) && doubleBuffer) {
+ return (glVis[screen] = wantVis);
+ }
+ }
+ /* If wantVis is useless, try glXChooseVisal() */
+ if (mono) {
+ /* Monochrome display - use color index mode */
+ int attribList[] =
+ {GLX_DOUBLEBUFFER, None};
+
+ glVis[screen] = glXChooseVisual(display, screen, attribList);
+ } else {
+ int attribList[] =
+#if 0
+ {GLX_RGBA, GLX_RED_SIZE, 1, GLX_GREEN_SIZE, 1, GLX_BLUE_SIZE, 1,
+ GLX_DOUBLEBUFFER, GLX_DEPTH_SIZE, 1, None};
+#else
+ {GLX_RGBA, GLX_DOUBLEBUFFER, GLX_DEPTH_SIZE, 1, None};
+#endif
+ glVis[screen] = glXChooseVisual(display, screen, attribList);
+ }
+ return (glVis[screen]);
+}
+
+/*-
+ * The following function should be called on startup of any GL mode.
+ * It returns a GLXContext for the calling mode to use with
+ * glXMakeCurrent(). Do NOT destroy this glXContext, as it will
+ * be taken care of by the next caller to init_GL. You should
+ * remember to delete your display lists, however.
+ */
+GLXContext
+init_GL(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ int screen = MI_SCREEN(mi);
+ int mono = MI_WIN_IS_MONO(mi) ? 1 : 0;
+ int n;
+ XVisualInfo *wantVis, *gotVis, vTemplate;
+ extern int VisualClassWanted;
+ GLboolean rgbaMode;
+
+ if (!glXContext) {
+ glXContext = (GLXContext *) calloc(MAXSCREENS, sizeof(GLXContext));
+ if (!glXContext)
+ return NULL;
+ }
+ if (glXContext[screen]) {
+ glXDestroyContext(display, glXContext[screen]);
+ glXContext[screen] = NULL;
+ }
+ if (VisualClassWanted == -1) {
+
+ wantVis = NULL; /* NULL means use the default in getVisual() */
+
+ } else {
+ vTemplate.screen = screen;
+ vTemplate.depth = MI_WIN_DEPTH(mi);
+ WANTED_VIS(vTemplate)
+ wantVis = XGetVisualInfo(display,
+ VisualScreenMask | VisualDepthMask | VisualClassMask,
+ &vTemplate, &n);
+
+ if (n == 0) {
+ /* Wanted visual not found so use default */
+ wantVis = NULL;
+ }
+ }
+
+ /* if User asked for color, try that first, then try mono */
+ /* if User asked for mono. Might fail on 16/24 bit displays,
+ so fall back on color, but keep the mono "look & feel". */
+ if (!(gotVis = getGLVisual(display, screen, wantVis, mono))) {
+ if (!(gotVis = getGLVisual(display, screen, wantVis, !mono))) {
+ (void) fprintf(stderr, "GL can not render with root visual\n");
+ return (NULL);
+ }
+ }
+ if (MI_WIN_IS_VERBOSE(mi))
+ showVisualInfo(gotVis);
+
+/*-
+ * PURIFY 4.0.1 on SunOS4 and on Solaris 2 reports a 104 byte memory leak on
+ * the next line each time that a GL mode is run in random mode when using
+ * MesaGL 2.2. This cumulative leak can cause xlock to eventually crash if
+ * available memory is depleted. This bug is fixed in MesaGL 2.3. */
+ glXContext[screen] = glXCreateContext(display, gotVis, 0, GL_TRUE);
+ if (wantVis && (wantVis != gotVis))
+ XFree((char *) wantVis);
+
+ if (!glXContext[screen]) {
+ (void) fprintf(stderr, "GL could not create rendering context\n");
+ return (NULL);
+ }
+/*-
+ * PURIFY 4.0.1 on Solaris2 reports an unitialized memory read on the next
+ * line. PURIFY 4.0.1 on SunOS4 does not report this error. */
+ glXMakeCurrent(display, window, glXContext[screen]);
+
+ glGetBooleanv(GL_RGBA_MODE, &rgbaMode);
+ if (!rgbaMode) {
+ glIndexi(WhitePixel(display, screen));
+ glClearIndex(BlackPixel(display, screen));
+ }
+ return (glXContext[screen]);
+}
+#endif
--- /dev/null
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)utils.c 4.03 97/05/08 xlockmore";
+
+#endif
+
+/*-
+ * utils.c - various utilities - usleep, seconds, SetRNG, LongRNG, hsbramp.
+ *
+ * Copyright (c) 1991 by Patrick J. Naughton.
+ *
+ * Revision History:
+ *
+ * Changes maintained by David Bagley <bagleyd@bigfoot.com>
+ * 08-Jul-96: Bug in strcat_firstword fixed thanks to
+ <Jeffrey_Doggett@caradon.com>. Fix for ":not found" text
+ that appears after about 40 minutes.
+ * 04-Apr-96: Added procedures to handle wildcards on filenames
+ * J. Jansen <joukj@crys.chem.uva.nl>
+ * 15-May-95: random number generator added, moved hsbramp.c to utils.c .
+ * Also renamed file from usleep.c to utils.c .
+ * 14-Mar-95: patches for rand and seconds for VMS
+ * 27-Feb-95: fixed nanosleep for times >= 1 second
+ * 05-Jan-95: nanosleep for Solaris 2.3 and greater Greg Onufer
+ * <Greg.Onufer@Eng.Sun.COM>
+ * 22-Jun-94: Fudged for VMS by Anthony Clarke
+ * <Anthony.D.Clarke@Support.Hatfield.Raytheon.bae.eurokom.ie>
+ * 10-Jun-94: patch for BSD from Victor Langeveld <vic@mbfys.kun.nl>
+ * 02-May-94: patch for Linux, got ideas from Darren Senn's xlock
+ * <sinster@scintilla.capitola.ca.us>
+ * 21-Mar-94: patch fix for HP from <R.K.Lloyd@csc.liv.ac.uk>
+ * 01-Dec-93: added patch for HP
+ *
+ * Changes of Patrick J. Naughton
+ * 30-Aug-90: written.
+ *
+ */
+
+#include "xlock.h"
+
+XPoint hexagonUnit[6] =
+{
+ {0, 0},
+ {1, 1},
+ {0, 2},
+ {-1, 1},
+ {-1, -1},
+ {0, -2}
+};
+
+XPoint triangleUnit[2][3] =
+{
+ {
+ {0, 0},
+ {1, -1},
+ {0, 2}
+ },
+ {
+ {0, 0},
+ {-1, 1},
+ {0, -2}
+ }
+};
+
+#include <sys/stat.h>
+
+#ifdef USE_OLD_EVENT_LOOP
+#if !defined( VMS ) || defined( XVMSUTILS ) || ( __VMS_VER >= 70000000 )
+#ifdef USE_XVMSUTILS
+#include <X11/unix_time.h>
+#endif
+#if HAVE_SYS_TIME_H
+#include <sys/time.h>
+#else
+#if HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+#endif
+#else
+#include <starlet.h>
+#endif
+#if defined( SYSV ) || defined( SVR4 )
+#ifdef LESS_THAN_AIX3_2
+#include <sys/poll.h>
+#else /* !LESS_THAN_AIX3_2 */
+#include <poll.h>
+#endif /* !LESS_THAN_AIX3_2 */
+#endif /* defined( SYSV ) || defined( SVR4 ) */
+
+#ifndef HAVE_USLEEP
+ /* usleep should be defined */
+int
+usleep(unsigned long usec)
+{
+#if (defined( SYSV ) || defined( SVR4 )) && !defined( __hpux )
+#ifdef HAVE_NANOSLEEP
+ {
+ struct timespec rqt;
+
+ rqt.tv_nsec = 1000 * (usec % (unsigned long) 1000000);
+ rqt.tv_sec = usec / (unsigned long) 1000000;
+ return nanosleep(&rqt, NULL);
+ }
+#else /* !HAVE_NANOSLEEP */
+ (void) poll((void *) 0, (int) 0, usec / 1000); /* ms resolution */
+#endif /* !HAVE_NANOSLEEP */
+#else /* !SYSV */
+#if HAVE_GETTIMEOFDAY
+ struct timeval time_out;
+
+ time_out.tv_usec = usec % (unsigned long) 1000000;
+ time_out.tv_sec = usec / (unsigned long) 1000000;
+ (void) select(0, (void *) 0, (void *) 0, (void *) 0, &time_out);
+#else
+ long timadr[2];
+
+ if (usec != 0) {
+ timadr[0] = -usec * 10;
+ timadr[1] = -1;
+
+ sys$setimr(4, &timadr, 0, 0, 0);
+ sys$waitfr(4);
+ }
+#endif
+#endif /* !SYSV */
+ return 0;
+}
+#endif /* !HAVE_USLEEP */
+#endif /* USE_OLD_EVENT_LOOP */
+
+/*-
+ * returns the number of seconds since 01-Jan-70.
+ * This is used to control rate and timeout in many of the animations.
+ */
+unsigned long
+seconds(void)
+{
+#if HAVE_GETTIMEOFDAY
+ struct timeval now;
+
+ (void) gettimeofday(&now, NULL);
+ return (unsigned long) now.tv_sec;
+#else
+ return (unsigned long) time((time_t *) 0);
+#endif
+}
+
+static int
+readable(char *filename)
+{
+ FILE *fp;
+
+ if ((fp = my_fopen(filename, "r")) == NULL)
+ return False;
+ (void) fclose(fp);
+ return True;
+}
+
+FILE *
+my_fopen(char *filename, char *type)
+{
+ FILE *fp = NULL;
+ int s;
+ struct stat fileStat;
+
+ s = stat(filename, &fileStat);
+ if (s >= 0 && S_ISREG(fileStat.st_mode)) {
+ if ((fp = fopen(filename, type)) == NULL)
+ return NULL;
+ } else {
+ return NULL;
+ }
+
+ return fp;
+}
+
+#if (! HAVE_STRDUP )
+char *
+strdup(char *str)
+{
+ register char *ptr;
+
+ ptr = (char *) malloc(strlen(str) + 1);
+ (void) strcpy(ptr, str);
+ return ptr;
+}
+#endif
+
+/*-
+ Dr. Park's algorithm published in the Oct. '88 ACM "Random Number
+ Generators: Good Ones Are Hard To Find" His version available at
+ ftp://cs.wm.edu/pub/rngs.tar Present form by many authors.
+ */
+
+static int Seed = 1; /* This is required to be 32 bits long */
+
+/*-
+ * Given an integer, this routine initializes the RNG seed.
+ */
+void
+SetRNG(long int s)
+{
+ Seed = (int) s;
+}
+
+/*-
+ * Returns an integer between 0 and 2147483647, inclusive.
+ */
+long
+LongRNG(void)
+{
+ if ((Seed = Seed % 44488 * 48271 - Seed / 44488 * 3399) < 0)
+ Seed += 2147483647;
+ return (long) (Seed - 1);
+}
+
+
+#include <ctype.h>
+#define FROM_PROGRAM 1
+#define FROM_FORMATTEDFILE 2
+#define FROM_FILE 3
+#define FROM_RESRC 4
+
+char *program, *messagesfile, *messagefile, *message, *mfont;
+
+static char *def_words = "I'm out running around.";
+static int getwordsfrom;
+
+static void
+strcat_firstword(char *fword, char *words)
+{
+ while (*fword)
+ fword++;
+ while (*words && !(isspace(*words)))
+ *fword++ = *words++;
+ *fword = '\0';
+}
+
+int
+isRibbon(void)
+{
+ return (getwordsfrom == FROM_RESRC);
+}
+
+char *
+getWords(int screen)
+{
+ FILE *pp;
+ static char *buf = NULL, progerr[BUFSIZ], progrun[BUFSIZ];
+ register char *p;
+ extern int pclose(FILE *);
+ int i;
+
+ if (!buf) {
+ buf = (char *) calloc(MAXSCREENS * BUFSIZ, sizeof(char));
+ if (!buf)
+ return NULL;
+ }
+ p = &buf[screen * BUFSIZ];
+ *p = '\0';
+ if (strlen(message))
+ getwordsfrom = FROM_RESRC;
+ else if (strlen(messagefile)) {
+ getwordsfrom = FROM_FILE;
+ } else if (strlen(messagesfile)) {
+ getwordsfrom = FROM_FORMATTEDFILE;
+ } else {
+ getwordsfrom = FROM_PROGRAM;
+ (void) sprintf(progrun, "( %s ) 2>&1",
+ (!program) ? DEF_PROGRAM : program);
+ }
+
+ switch (getwordsfrom) {
+#ifndef VMS
+ case FROM_PROGRAM:
+/*-
+ * PURIFY 4.0.1 on SunOS4 and on Solaris2 reports a duplication of file
+ * descriptor on the next line. Do not know if this is a problem or not. */
+ if ((pp = (FILE *) popen(progrun, "r")) != NULL) {
+ while (fgets(p, BUFSIZ - strlen(&buf[screen * BUFSIZ]), pp)) {
+ if (strlen(&buf[screen * BUFSIZ]) + 1 < BUFSIZ)
+ p = &buf[screen * BUFSIZ] + strlen(&buf[screen * BUFSIZ]);
+ else
+ break;
+ }
+ (void) pclose(pp);
+ p = &buf[screen * BUFSIZ];
+ if (!buf[screen * BUFSIZ])
+ (void) sprintf(&buf[screen * BUFSIZ], "\"%s\" produced no output!",
+ (!program) ? DEF_PROGRAM : program);
+ else {
+ (void) memset((char *) progerr, 0, sizeof (progerr));
+ (void) strcpy(progerr, "sh: ");
+ strcat_firstword(progerr, (!program) ? DEF_PROGRAM : program);
+ (void) strcat(progerr, ": not found\n");
+ if (!strcmp(&buf[screen * BUFSIZ], progerr))
+ switch (NRAND(12)) {
+ case 0:
+ (void) strcat(&buf[screen * BUFSIZ],
+ "( Get with the program, bub. )\n");
+ break;
+ case 1:
+ (void) strcat(&buf[screen * BUFSIZ],
+ "( I blow my nose at you, you silly person! )\n");
+ break;
+ case 2:
+ (void) strcat(&buf[screen * BUFSIZ],
+ "\nThe resource you want to\nset is `program'.\n");
+ break;
+ case 3:
+ (void) strcat(&buf[screen * BUFSIZ],
+ "\nHelp!! Help!!\nAAAAAAGGGGHHH!! \n\n");
+ break;
+ case 4:
+ (void) strcat(&buf[screen * BUFSIZ],
+ "( Hey, who called me `Big Nose'? )\n");
+ break;
+ case 5:
+ (void) strcat(&buf[screen * BUFSIZ],
+ "( Hello? Are you paying attention? )\n");
+ break;
+ case 6:
+ (void) strcat(&buf[screen * BUFSIZ],
+ "sh: what kind of fool do you take me for? \n");
+ break;
+ case 7:
+ (void) strcat(&buf[screen * BUFSIZ],
+ "\nRun me with -program \"fortune -o\".\n");
+ break;
+ case 8:
+ (void) strcat(&buf[screen * BUFSIZ],
+ "( Where is your fortune? )\n");
+ break;
+ case 9:
+ (void) strcat(&buf[screen * BUFSIZ],
+ "( Your fortune has not been written yet!! )");
+ break;
+ }
+ }
+ p = &buf[screen * BUFSIZ];
+ } else {
+ perror(progrun);
+ p = def_words;
+ }
+ break;
+#endif
+ case FROM_FORMATTEDFILE:
+ if ((pp = my_fopen(messagesfile, "r")) != NULL) {
+ int len_mess_file;
+
+ if (fscanf(pp, "%d", &len_mess_file)) {
+ int no_quote;
+
+ if (len_mess_file <= 0)
+ buf[screen * BUFSIZ] = '\0';
+ else {
+ (void) fgets(p, BUFSIZ - strlen(&buf[screen * BUFSIZ]), pp);
+ /* get first '%%' (the one after the number of quotes) */
+ (void) fgets(p, BUFSIZ - strlen(&buf[screen * BUFSIZ]), pp);
+ no_quote = NRAND(len_mess_file);
+ for (i = 0; i <= no_quote; ++i) {
+ unsigned int len_cur = 0;
+
+ buf[screen * BUFSIZ] = '\0';
+ p = &buf[screen * BUFSIZ] + strlen(&buf[screen * BUFSIZ]);
+ while (fgets(p, BUFSIZ - strlen(&buf[screen * BUFSIZ]), pp)) {
+ if (strlen(&buf[screen * BUFSIZ]) + 1 < BUFSIZ) {
+ /* a line with '%%' contains 3 characters */
+ if ((strlen(&buf[screen * BUFSIZ]) == len_cur + 3) &&
+ (p[0] == '%') && (p[1] == '%')) {
+ p[0] = '\0'; /* get rid of "%%" in &buf[screen * BUFSIZ] */
+ break;
+ } else {
+ p = &buf[screen * BUFSIZ] + strlen(&buf[screen * BUFSIZ]);
+ len_cur = strlen(&buf[screen * BUFSIZ]);
+ }
+ } else
+ break;
+ }
+ }
+ }
+ (void) fclose(pp);
+ if (!buf[screen * BUFSIZ])
+ (void) sprintf(&buf[screen * BUFSIZ],
+ "file \"%s\" is empty!", messagesfile);
+ p = &buf[screen * BUFSIZ];
+ } else {
+ (void) sprintf(&buf[screen * BUFSIZ],
+ "file \"%s\" not in correct format!", messagesfile);
+ p = &buf[screen * BUFSIZ];
+ }
+ } else {
+ (void) sprintf(&buf[screen * BUFSIZ],
+ "could not read file \"%s\"!", messagesfile);
+ p = &buf[screen * BUFSIZ];
+ }
+ break;
+ case FROM_FILE:
+ if ((pp = my_fopen(messagefile, "r")) != NULL) {
+ while (fgets(p, BUFSIZ - strlen(&buf[screen * BUFSIZ]), pp)) {
+ if (strlen(&buf[screen * BUFSIZ]) + 1 < BUFSIZ)
+ p = &buf[screen * BUFSIZ] + strlen(&buf[screen * BUFSIZ]);
+ else
+ break;
+ }
+ (void) fclose(pp);
+ if (!buf[screen * BUFSIZ])
+ (void) sprintf(&buf[screen * BUFSIZ],
+ "file \"%s\" is empty!", messagefile);
+ p = &buf[screen * BUFSIZ];
+ } else {
+ (void) sprintf(&buf[screen * BUFSIZ],
+ "could not read file \"%s\"!", messagefile);
+ p = &buf[screen * BUFSIZ];
+ }
+ break;
+ case FROM_RESRC:
+ p = message;
+ break;
+ default:
+ p = def_words;
+ break;
+ }
+
+ if (!p || *p == '\0')
+ p = def_words;
+ return p;
+}
+
+XFontStruct *
+getFont(Display * display)
+{
+ XFontStruct *mode_font;
+
+ if (!(mode_font = XLoadQueryFont(display, (mfont) ? mfont : DEF_MFONT))) {
+ if (mfont) {
+ (void) fprintf(stderr, "can not find font: %s, using %s...\n",
+ mfont, DEF_MFONT);
+ mode_font = XLoadQueryFont(display, DEF_MFONT);
+ }
+ if (!(mode_font)) {
+ (void) fprintf(stderr, "can not find font: %s, using %s...\n",
+ DEF_MFONT, FALLBACK_FONTNAME);
+ mode_font = XLoadQueryFont(display, FALLBACK_FONTNAME);
+ if (!mode_font) {
+ (void) fprintf(stderr, "can not even find %s!!!\n", FALLBACK_FONTNAME);
+ return (None); /* Do not want to exit when in a mode */
+ }
+ }
+ }
+ return mode_font;
+}
+
+#if HAVE_DIRENT_H
+static void
+randomImage(char *im_file)
+{
+ extern char directory_r[DIRBUF];
+ extern struct dirent **image_list;
+ extern int num_list;
+ int num;
+
+ if (num_list > 0) {
+ num = NRAND(num_list);
+ (void) strcpy(im_file, directory_r);
+ (void) strcat(im_file, image_list[num]->d_name);
+ }
+}
+
+#endif
+
+#if HAVE_DIRENT_H
+
+extern Bool debug;
+
+/* index_dir emulation of FORTRAN's index in C. Author: J. Jansen */
+static int
+index_dir(char *str1, char *substr)
+{
+ int i, num, l1 = strlen(str1), ls = strlen(substr), found;
+ char *str1_tmp, *substr_tmp, *substr_last;
+
+ num = l1 - ls + 1;
+ substr_last = substr + ls;
+ for (i = 0; i < num; ++i) {
+ str1_tmp = str1 + i;
+ substr_tmp = substr;
+ found = 1;
+ while (substr_tmp < substr_last)
+ if (*str1_tmp++ != *substr_tmp++) {
+ found = 0;
+ break;
+ }
+ if (found)
+ return (i + 1);
+ }
+ return (0);
+}
+
+#ifdef VMS
+/* Upcase string Author: J. Jansen */
+void
+upcase(char *s)
+{
+ int i;
+ char c[1];
+
+ for (i = 0; s[i] != '\0'; i++) {
+ if (s[i] >= 'a' && s[i] <= 'z') {
+ *c = s[i];
+ s[i] = (char) (*c - 32);
+ }
+ }
+}
+
+#endif
+
+/* Split full path into directory and filename parts Author: J. Jansen */
+void
+get_dir(char *fullpath, char *dir, char *filename)
+{
+ char *ln;
+ int ip_temp = 0, ip;
+
+#ifdef VMS
+ ip = index_dir(fullpath, "]");
+#else
+ ln = fullpath;
+ ip = 0;
+ while ((ip_temp = index_dir(ln, "/"))) {
+ ip = ip + ip_temp;
+ ln = fullpath + ip;
+ }
+#endif
+ if (ip == 0) {
+#ifdef VMS
+ (void) strcpy(dir, "[]");
+#else
+ (void) strcpy(dir, "./");
+#endif
+ } else {
+ if (ip > DIRBUF - 1)
+ ip_temp = DIRBUF - 1;
+ else
+ ip_temp = ip;
+ (void) strncpy(dir, fullpath, ip_temp);
+ dir[ip_temp] = '\0';
+ }
+ ln = fullpath + ip;
+ (void) strncpy(filename, ln, MAXNAMLEN - 1);
+ filename[MAXNAMLEN - 1] = '\0';
+#ifdef VMS
+ upcase(filename); /* VMS knows uppercase filenames only */
+#endif
+ if (debug)
+ (void) printf("get_dir %s %s %s\n", fullpath, dir, filename);
+}
+
+/* Procedure to select the matching filenames Author: J. Jansen */
+int
+sel_image(struct dirent *name)
+{
+ extern char filename_r[MAXNAMLEN];
+ char *name_tmp = name->d_name;
+ char *filename_tmp = filename_r;
+ static int numfrag = -1;
+ static char *frags[64];
+ int ip, i;
+
+ if (numfrag == -1) {
+ ++numfrag;
+ while ((ip = index_dir(filename_tmp, "*"))) {
+ frags[numfrag] = (char *) malloc(ip);
+ (void) strcpy(frags[numfrag], "\0");
+ (void) strncat(frags[numfrag], filename_tmp, ip - 1);
+ ++numfrag;
+ filename_tmp = filename_tmp + ip;
+ }
+ frags[numfrag] = (char *) malloc(strlen(filename_tmp));
+ (void) strcpy(frags[numfrag], filename_tmp);
+ }
+ for (i = 0; i <= numfrag; ++i) {
+ ip = index_dir(name_tmp, frags[i]);
+ if (ip == 0)
+ return (0);
+ name_tmp = name_tmp + ip;
+ }
+
+ return (1);
+}
+
+/* scandir implementiation for VMS Author: J. Jansen */
+/* name changed to scan_dir to solve portablity problems */
+#define _MEMBL_ 64
+int
+scan_dir(const char *directoryname, struct dirent ***namelist,
+ int (*select) (struct dirent *),
+ int (*compare) (const void *, const void *))
+{
+ DIR *dirp;
+ struct dirent *new_entry, **namelist_tmp;
+ int size_tmp, num_list_tmp;
+
+ if ((dirp = opendir(directoryname)) == NULL)
+ return (-1);
+ size_tmp = _MEMBL_;
+ namelist_tmp = (struct dirent **) malloc(size_tmp * sizeof (struct dirent *));
+
+ if (namelist_tmp == NULL)
+ return (-1);
+ num_list_tmp = 0;
+ while ((new_entry = readdir(dirp)) != NULL) {
+#ifndef VMS
+ if (!strcmp(new_entry->d_name, ".") && !strcmp(new_entry->d_name, ".."))
+ continue;
+#endif
+ if (select != NULL && !(*select) (new_entry))
+ continue;
+ if (++num_list_tmp >= size_tmp) {
+ size_tmp = size_tmp + _MEMBL_;
+ namelist_tmp = (struct dirent **) realloc(
+ (void *) namelist_tmp, size_tmp * sizeof (struct dirent *));
+
+ if (namelist_tmp == NULL)
+ return (-1);
+ }
+ /* Core Dumps here for Solaris2 if files names in dir are > 14 characters */
+ namelist_tmp[num_list_tmp - 1] =
+ (struct dirent *) malloc(sizeof (struct dirent));
+
+ (void) strcpy(namelist_tmp[num_list_tmp - 1]->d_name, new_entry->d_name);
+
+ *namelist = namelist_tmp;
+#ifdef SOLARIS2
+ if (debug)
+ (void) printf("file %d: %s\n",
+ num_list_tmp - 1, namelist_tmp[num_list_tmp - 1]->d_name);
+#endif
+ }
+#ifdef SOLARIS2 /* Data seems to get corrupted for Solaris2 */
+ if (debug) {
+ (void) printf("directory: %s\n", directoryname);
+ for (size_tmp = 0; size_tmp < num_list_tmp; size_tmp++)
+ (void) printf("file %d: %s\n", size_tmp, namelist_tmp[size_tmp]->d_name);
+ }
+#endif
+
+ (void) closedir(dirp);
+ if (num_list_tmp && compare != NULL)
+ (void) qsort((void *) namelist_tmp, num_list_tmp,
+ sizeof (struct dirent *), compare);
+
+ *namelist = namelist_tmp;
+ return (num_list_tmp);
+}
+
+#endif
+
+extern int XbmReadFileToImage(char *filename,
+ int *width, int *height, unsigned char **bits);
+
+#if defined( USE_XPM ) || defined( USE_XPMINC )
+#if USE_XPMINC
+#include <xpm.h>
+#else
+#include <X11/xpm.h> /* Normal spot */
+#endif
+#endif
+#include "ras.h"
+
+static XImage blogo =
+{
+ 0, 0, /* width, height */
+ 0, XYBitmap, 0, /* xoffset, format, data */
+ LSBFirst, 8, /* byte-order, bitmap-unit */
+ LSBFirst, 8, 1 /* bitmap-bit-order, bitmap-pad, depth */
+};
+
+void
+getImage(ModeInfo * mi, XImage ** logo,
+ int width, int height, unsigned char *bits,
+#if defined( USE_XPM ) || defined( USE_XPMINC )
+ char **name,
+#endif
+ int *graphics_format, Colormap * ncm,
+ unsigned long *blackpix, unsigned long *whitepix)
+{
+ extern char *imagefile;
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+
+#if defined( USE_XPM ) || defined( USE_XPMINC )
+ XpmAttributes attrib;
+
+#endif
+
+ if (!fixedColors(mi))
+ *ncm = XCreateColormap(display, window, MI_VISUAL(mi), AllocNone);
+ else
+ *ncm = None;
+
+#if defined( USE_XPM ) || defined( USE_XPMINC )
+ attrib.visual = MI_VISUAL(mi);
+ if (*ncm != None)
+ attrib.colormap = *ncm;
+ else
+ attrib.colormap = MI_WIN_COLORMAP(mi);
+ attrib.depth = MI_WIN_DEPTH(mi);
+ attrib.valuemask = XpmVisual | XpmColormap | XpmDepth;
+#endif
+
+ *graphics_format = 0;
+
+#if HAVE_DIRENT_H
+ randomImage(imagefile);
+#endif
+
+ if (strlen(imagefile))
+ if (readable(imagefile)) {
+ if (MI_NPIXELS(mi) > 2) {
+ if (RasterSuccess == RasterFileToImage(mi, imagefile, logo)) {
+ *graphics_format = IS_RASTERFILE;
+ if (!fixedColors(mi))
+ SetImageColors(display, *ncm);
+ *blackpix = GetBlack();
+ *whitepix = GetWhite();
+ }
+ }
+#if defined( USE_XPM ) || defined( USE_XPMINC )
+#ifndef USE_MONOXPM
+ if (MI_NPIXELS(mi) > 2)
+#endif
+ {
+ if (*graphics_format <= 0) {
+ if (*ncm != None)
+ reserveColors(mi, *ncm, blackpix, whitepix);
+ if (XpmSuccess == XpmReadFileToImage(display, imagefile, logo,
+ (XImage **) NULL, &attrib))
+ *graphics_format = IS_XPMFILE;
+ }
+ }
+#endif
+ if (*graphics_format <= 0)
+ if (!blogo.data) {
+ if (BitmapSuccess == XbmReadFileToImage(imagefile,
+ &blogo.width, &blogo.height, (unsigned char **) &blogo.data)) {
+ blogo.bytes_per_line = (blogo.width + 7) / 8;
+ *graphics_format = IS_XBMFILE;
+ *logo = &blogo;
+ }
+ } else {
+ *graphics_format = IS_XBMDONE;
+ *logo = &blogo;
+ }
+ if (*graphics_format <= 0)
+ (void) fprintf(stderr,
+ "\"%s\" is in an unrecognized format\n", imagefile);
+ } else
+ (void) fprintf(stderr,
+ "could not read file \"%s\"\n", imagefile);
+#if defined( USE_XPM ) || defined( USE_XPMINC )
+ if (*graphics_format <= 0)
+#ifndef USE_MONOXPM
+ if (MI_NPIXELS(mi) > 2)
+#endif
+ if (XpmSuccess == XpmCreateImageFromData(display, name,
+ logo, (XImage **) NULL, &attrib))
+ *graphics_format = IS_XPM;
+#endif
+ if (*graphics_format <= 0) {
+ if (!blogo.data) {
+ blogo.data = (char *) bits;
+ blogo.width = width;
+ blogo.height = height;
+ blogo.bytes_per_line = (blogo.width + 7) / 8;
+ *graphics_format = IS_XBM;
+ } else
+ *graphics_format = IS_XBMDONE;
+ *logo = &blogo;
+ }
+ if (*ncm != None && *graphics_format != IS_RASTERFILE &&
+ *graphics_format != IS_XPMFILE && *graphics_format != IS_XPM) {
+ XFreeColormap(display, *ncm);
+ *ncm = None;
+ }
+}
+
+void
+destroyImage(XImage ** logo, int *graphics_format)
+{
+ switch (*graphics_format) {
+ case IS_XBM:
+ blogo.data = NULL;
+ break;
+ case IS_XBMFILE:
+ if (blogo.data) {
+ (void) free((void *) blogo.data);
+ blogo.data = NULL;
+ }
+ break;
+ case IS_XPM:
+ case IS_XPMFILE:
+ case IS_RASTERFILE:
+ if (logo)
+ XDestroyImage(*logo);
+ break;
+ }
+ *graphics_format = -1;
+ *logo = NULL;
+}
+
+void
+getBitmap(XImage ** logo, int width, int height, unsigned char *bits,
+ int *graphics_format)
+{
+ extern char *imagefile;
+
+#if HAVE_DIRENT_H
+ randomImage(imagefile);
+#endif
+
+ if (strlen(imagefile))
+ if (readable(imagefile)) {
+ if (!blogo.data) {
+ if (BitmapSuccess == XbmReadFileToImage(imagefile,
+ &blogo.width, &blogo.height, (unsigned char **) &blogo.data)) {
+ blogo.bytes_per_line = (blogo.width + 7) / 8;
+ *graphics_format = IS_XBMFILE;
+ *logo = &blogo;
+ }
+ } else {
+ *graphics_format = IS_XBMDONE;
+ *logo = &blogo;
+ }
+ if (*graphics_format <= 0)
+ (void) fprintf(stderr,
+ "\"%s\" not xbm format\n", imagefile);
+ } else
+ (void) fprintf(stderr,
+ "could not read file \"%s\"\n", imagefile);
+ if (*graphics_format <= 0) {
+ if (!blogo.data) {
+ blogo.data = (char *) bits;
+ blogo.width = width;
+ blogo.height = height;
+ blogo.bytes_per_line = (blogo.width + 7) / 8;
+ *graphics_format = IS_XBM;
+ } else
+ *graphics_format = IS_XBMDONE;
+ *logo = &blogo;
+ }
+}
+
+void
+destroyBitmap(XImage ** logo, int *graphics_format)
+{
+ switch (*graphics_format) {
+ case IS_XBM:
+ blogo.data = NULL;
+ break;
+ case IS_XBMFILE:
+ if (blogo.data) {
+ (void) free((void *) blogo.data);
+ blogo.data = NULL;
+ }
+ break;
+ }
+ *graphics_format = -1;
+ *logo = NULL;
+}
+
+static struct visual_class_name {
+ int visualclass;
+ char *name;
+} VisualClassName[] = {
+
+ {
+ StaticGray, "StaticGray"
+ },
+ {
+ GrayScale, "GrayScale"
+ },
+ {
+ StaticColor, "StaticColor"
+ },
+ {
+ PseudoColor, "PseudoColor"
+ },
+ {
+ TrueColor, "TrueColor"
+ },
+ {
+ DirectColor, "DirectColor"
+ },
+ {
+ -1, NULL
+ },
+};
+
+int
+visualClassFromName(char *name)
+{
+ int a;
+ char *s1, *s2;
+ int visualclass = -1;
+
+ for (a = 0; VisualClassName[a].name; a++) {
+ for (s1 = VisualClassName[a].name, s2 = name; *s1 && *s2; s1++, s2++)
+ if ((isupper(*s1) ? tolower(*s1) : *s1) !=
+ (isupper(*s2) ? tolower(*s2) : *s2))
+ break;
+
+ if ((*s1 == '\0') || (*s2 == '\0')) {
+
+ if (visualclass != -1) {
+ (void) fprintf(stderr,
+ "%s does not uniquely describe a visual class (ignored)\n", name);
+ return (-1);
+ }
+ visualclass = VisualClassName[a].visualclass;
+ }
+ }
+ if (visualclass == -1)
+ (void) fprintf(stderr, "%s is not a visual class (ignored)\n", name);
+ return (visualclass);
+}
+
+char *
+nameOfVisualClass(int visualclass)
+{
+ int a;
+
+ for (a = 0; VisualClassName[a].name; a++)
+ if (VisualClassName[a].visualclass == visualclass)
+ return (VisualClassName[a].name);
+ return ("[Unknown Visual Class]");
+}
+
+#if defined(__cplusplus) || defined(c_plusplus)
+#define DEFAULT_VIS(v) v.c_class = DefaultVisual(display, screen)->c_class;
+#define WANTED_VIS(v) v.c_class = VisualClassWanted;
+#define CHECK_WANTED_VIS(v) ((v)->c_class == VisualClassWanted)
+#define NAME_VIS(v) nameOfVisualClass(v->c_class)
+#else
+#define DEFAULT_VIS(v) v.class = DefaultVisual(display, screen)->class;
+#define WANTED_VIS(v) v.class = VisualClassWanted;
+#define CHECK_WANTED_VIS(v) ((v)->class == VisualClassWanted)
+#define NAME_VIS(v) nameOfVisualClass(v->class)
+#endif
+
+void
+showVisualInfo(XVisualInfo * Vis)
+{
+ (void) fprintf(stderr, "Visual info: ");
+ (void) fprintf(stderr, "screen %d, ", Vis->screen);
+ (void) fprintf(stderr, "class %s, ", NAME_VIS(Vis));
+ (void) fprintf(stderr, "depth %d\n", Vis->depth);
+}
+
+/*-
+ * default_visual_info
+ *
+ * Gets a XVisualInfo structure that refers to a given visual or the default
+ * visual.
+ *
+ * - mi is the ModeInfo
+ * - visual is the visual to look up NULL => look up the default visual
+ * - default_info is set to point to the member of the returned list
+ * that corresponds to the default visual.
+ *
+ * Returns a list of XVisualInfo structures or NULL on failure. Free the list
+ * with XFree.
+ */
+static XVisualInfo *
+defaultVisualInfo(ModeInfo * mi, Visual * visual, XVisualInfo ** default_info)
+{
+ Display *display = MI_DISPLAY(mi);
+ int screen = MI_SCREEN(mi);
+ XVisualInfo *info_list, vTemplate;
+ int i, n;
+ extern int VisualClassWanted;
+
+ /* get a complete list of visuals */
+ /*info_list = XGetVisualInfo(display, VisualNoMask, NULL, &n); */
+ vTemplate.screen = screen;
+ vTemplate.depth = MI_WIN_DEPTH(mi);
+ if (VisualClassWanted == -1) {
+ DEFAULT_VIS(vTemplate);
+ } else {
+ WANTED_VIS(vTemplate);
+ }
+ info_list = XGetVisualInfo(display,
+ VisualScreenMask | VisualDepthMask | VisualClassMask,
+ &vTemplate, &n);
+ if (VisualClassWanted != -1 && n == 0) {
+ /* Wanted visual not found so use default */
+ DEFAULT_VIS(vTemplate);
+ info_list = XGetVisualInfo(display,
+ VisualScreenMask | VisualDepthMask | VisualClassMask,
+ &vTemplate, &n);
+ }
+/*-
+ WANTED_VIS(vTemplate);
+ if (VisualClassWanted == -1)
+ info_list = XGetVisualInfo(display, VisualScreenMask | VisualDepthMask,
+ &vTemplate, &n);
+ else
+ info_list = XGetVisUalInfo(display,
+ VisualScreenMask | VisualDepthMask | VisualClassMask,
+ &vTemplateWant, &n);
+ */
+ if ((info_list == NULL) || (n == 0)) {
+ if (MI_WIN_IS_VERBOSE(mi))
+ (void) fprintf(stderr, "Could not get any Visuals, numvisuals = %d.\n",
+ n);
+ return (NULL);
+ }
+ /* do we need to get the default visual? */
+ if (visual == NULL)
+ visual = DefaultVisual(display, screen);
+
+ *default_info = info_list;
+ if (VisualClassWanted == -1) {
+ /* search through the list for the default visual */
+ for (i = 0; i < n; i++, (*default_info)++)
+ if ((*default_info)->visual == visual &&
+ (*default_info)->screen == screen)
+ break;
+ } else {
+ /* search through the list for the requested visual
+ * with the greatest color depth */
+ for (i = 0; i < n; i++, (*default_info)++)
+ if ((*default_info)->depth >= 24 &&
+ (*default_info)->screen == screen &&
+ CHECK_WANTED_VIS(*default_info))
+ break;
+ if (i == n) {
+ *default_info = info_list;
+ for (i = 0; i < n; i++, (*default_info)++)
+ if ((*default_info)->depth == 16 &&
+ (*default_info)->screen == screen &&
+ CHECK_WANTED_VIS(*default_info))
+ break;
+ }
+ if (i == n) {
+ *default_info = info_list;
+ for (i = 0; i < n; i++, (*default_info)++)
+ if ((*default_info)->depth == 8 &&
+ (*default_info)->screen == screen &&
+ CHECK_WANTED_VIS(*default_info))
+ break;
+ }
+ if (i == n) {
+ *default_info = info_list;
+ for (i = 0; i < n; i++, (*default_info)++)
+ if ((*default_info)->depth == 4 &&
+ (*default_info)->screen == screen &&
+ CHECK_WANTED_VIS(*default_info))
+ break;
+ }
+ if (i == n) {
+ *default_info = info_list;
+ for (i = 0; i < n; i++, (*default_info)++)
+ if ((*default_info)->screen == screen &&
+ CHECK_WANTED_VIS(*default_info))
+ break;
+ }
+ }
+ if (MI_WIN_IS_VERBOSE(mi)) {
+ (void) fprintf(stderr, "Visual info: ");
+ (void) fprintf(stderr, "screen %d, ", (*default_info)->screen);
+ (void) fprintf(stderr, "class %s, ", NAME_VIS((*default_info)));
+ (void) fprintf(stderr, "depth %d\n", (*default_info)->depth);
+ }
+ /* return the list (and the default info) */
+ return (info_list);
+}
+
+
+Bool
+fixedColors(ModeInfo * mi)
+{
+#ifdef FORCEFIXEDCOLORS
+ /* pretending a fixed colourmap */
+ return FALSE;
+#else
+ XVisualInfo *list, *default_info;
+ Bool writeable;
+
+ /* get information about the default visual */
+ list = defaultVisualInfo(mi, MI_VISUAL(mi), &default_info);
+ writeable = (
+#if defined(__cplusplus) || defined(c_plusplus)
+ (default_info->c_class != StaticGray) &&
+ (default_info->c_class != StaticColor) &&
+ (default_info->c_class != TrueColor) &&
+#else
+ (default_info->class != StaticGray) &&
+ (default_info->class != StaticColor) &&
+ (default_info->class != TrueColor) &&
+#endif
+ (MI_NPIXELS(mi) > 2) &&
+ !MI_WIN_IS_INROOT(mi) &&
+ MI_WIN_IS_INSTALL(mi));
+ XFree((char *) list);
+ return !writeable;
+#endif
+}
+
+/*-
+ * setupColormap
+ *
+ * Create a read/write colourmap to use
+ *
+ */
+
+Bool
+setupColormap(ModeInfo * mi, int *colors, Bool * truecolor,
+ unsigned long *redmask, unsigned long *bluemask, unsigned long *greenmask)
+{
+
+ XVisualInfo *list, *default_info;
+
+ /* get information about the default visual */
+ list = defaultVisualInfo(mi, MI_VISUAL(mi), &default_info);
+
+ /* how many colours are there altogether? */
+ *colors = MI_NPIXELS(mi);
+ if (*colors > default_info->colormap_size) {
+ *colors = default_info->colormap_size;
+ }
+ if (*colors < 2)
+ *colors = 2;
+
+#if defined(__cplusplus) || defined(c_plusplus)
+ *truecolor = (default_info->c_class == TrueColor);
+#else
+ *truecolor = (default_info->class == TrueColor);
+#endif
+
+ *redmask = default_info->red_mask;
+ *greenmask = default_info->green_mask;
+ *bluemask = default_info->blue_mask;
+
+ XFree((char *) list);
+
+ return !fixedColors(mi);
+}
+
+/*-
+ * useableColors
+ */
+int
+preserveColors(unsigned long fg, unsigned long bg,
+ unsigned long white, unsigned long black)
+{
+ /* how many colours should we preserve (out of white, black, fg, bg)? */
+ if (((bg == black) || (bg == white)) && ((fg == black) || (fg == white)))
+ return 2;
+ else if ((bg == black) || (fg == black) ||
+ (bg == white) || (fg == white) || (bg == fg))
+ return 3;
+ else
+ return 4;
+}
+
+#ifdef USE_MATHERR
+/* Handle certain math exception errors */
+int
+matherr(register struct exception *x)
+{
+ extern Bool debug;
+
+ switch (x->type) {
+ case DOMAIN:
+ /* Suppress "atan2: DOMAIN error" stderr message */
+ if (!strcmp(x->name, "atan2")) {
+ x->retval = 0.0;
+ return ((debug) ? 0 : 1); /* suppress message unless debugging */
+ }
+ if (!strcmp(x->name, "sqrt")) {
+ x->retval = sqrt(-x->arg1);
+ /* x->retval = 0.0; */
+ return ((debug) ? 0 : 1); /* suppress message unless debugging */
+ }
+ break;
+#ifdef __hpux
+ /* Fix how HP-UX does not like sin and cos of angles >= 360. */
+ case TLOSS:
+ if (!strcmp(x->name, "cos")) {
+ x->retval = cos(fmod(x->arg1, 360.0));
+ return (1); /* suppress message */
+ }
+ if (!strcmp(x->name, "sin")) {
+ x->retval = sin(fmod(x->arg1, 360.0));
+ return (1); /* suppress message */
+ }
+ break;
+ case PLOSS:
+ return (1);
+ break;
+#endif
+ }
+ return (0); /* all other exceptions, execute default procedure */
+}
+#endif
+
+#ifdef USE_GL
+
+#include <GL/gl.h>
+#include <GL/glx.h>
+
+static XVisualInfo **glVis = NULL;
+static GLXContext *glXContext = NULL;
+
+/* Don't ever call this one from a module. It is only for xlock.c to use. */
+void
+FreeAllGL(Display * display)
+{
+ int scr;
+
+ if (glXContext) {
+ for (scr = 0; scr < MAXSCREENS; scr++) {
+ if (glXContext[scr])
+ glXDestroyContext(display, glXContext[scr]);
+ glXContext[scr] = NULL;
+ }
+ (void) free((void *) glXContext);
+ glXContext = NULL;
+ }
+ if (glVis) {
+ for (scr = 0; scr < MAXSCREENS; scr++) {
+ if (glVis[scr])
+ XFree(glVis[scr]);
+ glVis[scr] = NULL;
+ }
+ (void) free((void *) glVis);
+ glVis = NULL;
+ }
+}
+
+/*-
+ * NOTE WELL: We _MUST_ destroy the glXContext between each mode
+ * in random mode, otherwise OpenGL settings and paramaters from one
+ * mode will affect the default initial state for the next mode.
+ * BUT, we are going to keep the visual returned by glXChooseVisual,
+ * because it will still be good (and because Mesa must keep track
+ * of each one, even after XFree(), causing a small memory leak).
+ */
+
+XVisualInfo *
+getGLVisual(Display * display, int screen, XVisualInfo * wantVis, int mono)
+{
+
+ if (!glVis) {
+ glVis = (XVisualInfo **) calloc(MAXSCREENS, sizeof(XVisualInfo *));
+ if (!glVis)
+ return NULL;
+ }
+ /* If we already have it, use it! */
+ if (glVis[screen])
+ return (glVis[screen]);
+
+ if (wantVis) {
+ /* Use glXGetConfig() to see if wantVis has what we need already. */
+ int depthBits, doubleBuffer;
+
+ /* I don't check up on RGBA mode... we might want MONO */
+ /* glXGetConfig(display, wantVis, GLX_RGBA, &rgbaMode); */
+
+ glXGetConfig(display, wantVis, GLX_DEPTH_SIZE, &depthBits);
+ glXGetConfig(display, wantVis, GLX_DOUBLEBUFFER, &doubleBuffer);
+
+ if ((depthBits > 0) && doubleBuffer) {
+ return (glVis[screen] = wantVis);
+ }
+ }
+ /* If wantVis is useless, try glXChooseVisal() */
+ if (mono) {
+ /* Monochrome display - use color index mode */
+ int attribList[] =
+ {GLX_DOUBLEBUFFER, None};
+
+ glVis[screen] = glXChooseVisual(display, screen, attribList);
+ } else {
+ int attribList[] =
+#if 0
+ {GLX_RGBA, GLX_RED_SIZE, 1, GLX_GREEN_SIZE, 1, GLX_BLUE_SIZE, 1,
+ GLX_DOUBLEBUFFER, GLX_DEPTH_SIZE, 1, None};
+#else
+ {GLX_RGBA, GLX_DOUBLEBUFFER, GLX_DEPTH_SIZE, 1, None};
+#endif
+ glVis[screen] = glXChooseVisual(display, screen, attribList);
+ }
+ return (glVis[screen]);
+}
+
+/*-
+ * The following function should be called on startup of any GL mode.
+ * It returns a GLXContext for the calling mode to use with
+ * glXMakeCurrent(). Do NOT destroy this glXContext, as it will
+ * be taken care of by the next caller to init_GL. You should
+ * remember to delete your display lists, however.
+ */
+GLXContext
+init_GL(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ int screen = MI_SCREEN(mi);
+ int mono = MI_WIN_IS_MONO(mi) ? 1 : 0;
+ int n;
+ XVisualInfo *wantVis, *gotVis, vTemplate;
+ extern int VisualClassWanted;
+ GLboolean rgbaMode;
+
+ if (!glXContext) {
+ glXContext = (GLXContext *) calloc(MAXSCREENS, sizeof(GLXContext));
+ if (!glXContext)
+ return NULL;
+ }
+ if (glXContext[screen]) {
+ glXDestroyContext(display, glXContext[screen]);
+ glXContext[screen] = NULL;
+ }
+ if (VisualClassWanted == -1) {
+
+ wantVis = NULL; /* NULL means use the default in getVisual() */
+
+ } else {
+ vTemplate.screen = screen;
+ vTemplate.depth = MI_WIN_DEPTH(mi);
+ WANTED_VIS(vTemplate)
+ wantVis = XGetVisualInfo(display,
+ VisualScreenMask | VisualDepthMask | VisualClassMask,
+ &vTemplate, &n);
+
+ if (n == 0) {
+ /* Wanted visual not found so use default */
+ wantVis = NULL;
+ }
+ }
+
+ /* if User asked for color, try that first, then try mono */
+ /* if User asked for mono. Might fail on 16/24 bit displays,
+ so fall back on color, but keep the mono "look & feel". */
+ if (!(gotVis = getGLVisual(display, screen, wantVis, mono))) {
+ if (!(gotVis = getGLVisual(display, screen, wantVis, !mono))) {
+ (void) fprintf(stderr, "GL can not render with root visual\n");
+ return (NULL);
+ }
+ }
+ if (MI_WIN_IS_VERBOSE(mi))
+ showVisualInfo(gotVis);
+
+/*-
+ * PURIFY 4.0.1 on SunOS4 and on Solaris 2 reports a 104 byte memory leak on
+ * the next line each time that a GL mode is run in random mode when using
+ * MesaGL 2.2. This cumulative leak can cause xlock to eventually crash if
+ * available memory is depleted. This bug is fixed in MesaGL 2.3. */
+ glXContext[screen] = glXCreateContext(display, gotVis, 0, GL_TRUE);
+ if (wantVis && (wantVis != gotVis))
+ XFree((char *) wantVis);
+
+ if (!glXContext[screen]) {
+ (void) fprintf(stderr, "GL could not create rendering context\n");
+ return (NULL);
+ }
+/*-
+ * PURIFY 4.0.1 on Solaris2 reports an unitialized memory read on the next
+ * line. PURIFY 4.0.1 on SunOS4 does not report this error. */
+ glXMakeCurrent(display, window, glXContext[screen]);
+
+ glGetBooleanv(GL_RGBA_MODE, &rgbaMode);
+ if (!rgbaMode) {
+ glIndexi(WhitePixel(display, screen));
+ glClearIndex(BlackPixel(display, screen));
+ }
+ return (glXContext[screen]);
+}
+#endif
--- /dev/null
+
+#define VERSION "xlockmore-4.03"
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)voters.c 4.03 97/06/10 xlockmore";
+
+#endif
+
+/*-
+ * voters.c - Dewdney's Voters, voting simulation for xlock,
+ * the X Window System lockscreen.
+ *
+ * Copyright (c) 1997 by David Bagley.
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-Jun-97: Coded from A.K. Dewdney's "The Armchair Universe, Computer
+ * Recreations from the Pages of Scientific American Magazine"
+ * W.H. Freedman and Company, New York, 1988 (Apr 1985)
+ * Used wator.c and demon.c as a guide.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Voters"
+#define HACK_INIT init_voters
+#define HACK_DRAW draw_voters
+#define DEF_DELAY 750000
+#define DEF_CYCLES 32767
+#define DEF_SIZE 0
+#define DEF_NCOLORS 200
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt voters_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+extern int neighbors;
+
+/*-
+ * From far left to right, at least in the currently in the US. By the way, I
+ * consider myself to be a proud bleeding heart liberal democrat, in
+ * case anyone wants to know.... Please, no fascist "improvements". :)
+ */
+
+#include "bitmaps/sickle.xbm"
+#include "bitmaps/donkey.xbm"
+#include "bitmaps/elephant.xbm"
+
+#define MINPARTIES 2
+#define BITMAPS 3
+#define MINGRIDSIZE 10
+#define MINSIZE 4
+#define FACTOR 10
+#define NEIGHBORKINDS 6
+
+static XImage logo[BITMAPS] =
+{
+ {0, 0, 0, XYBitmap, (char *) sickle_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {0, 0, 0, XYBitmap, (char *) donkey_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {0, 0, 0, XYBitmap, (char *) elephant_bits, LSBFirst, 8, LSBFirst, 8, 1},
+};
+
+/* Voter data */
+typedef struct {
+ char kind;
+ int age;
+ int col, row;
+} cellstruct;
+
+/* Doublely linked list */
+typedef struct _CellList {
+ cellstruct info;
+ struct _CellList *previous, *next;
+} CellList;
+
+typedef struct {
+ int initialized;
+ int party; /* Currently working on donkey, elephant, or sickle? */
+ int xs, ys; /* Size of fish and sharks */
+ int xb, yb; /* Bitmap offset for fish and sharks */
+ int nparties; /* 2 parties or 3 */
+ int number_in_party[BITMAPS]; /* Good to know when one party rules */
+ int pixelmode;
+ int generation;
+ int ncols, nrows;
+ int npositions;
+ int width, height;
+ CellList *last, *first;
+ char *arr;
+ int neighbors;
+ XPoint hexagonList[6];
+ XPoint triangleList[2][3];
+} voterstruct;
+
+static int initVal[NEIGHBORKINDS] =
+{
+ 3, 4, 6, 8, 9, 12 /* Neighborhoods */
+};
+
+static voterstruct *voters = NULL;
+static int icon_width, icon_height;
+
+
+static void
+drawcell(ModeInfo * mi, int col, int row, unsigned long color, int bitmap,
+ Bool firstChange)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ voterstruct *vp = &voters[MI_SCREEN(mi)];
+ unsigned long colour = (MI_NPIXELS(mi) > 2) ?
+ MI_PIXEL(mi, color) : MI_WIN_WHITE_PIXEL(mi);
+
+ XSetForeground(display, gc, colour);
+ if (vp->neighbors == 6) {
+ int ccol = 2 * col + !(row & 1), crow = 2 * row;
+
+ vp->hexagonList[0].x = vp->xb + ccol * vp->xs;
+ vp->hexagonList[0].y = vp->yb + crow * vp->ys;
+ if (vp->xs == 1 && vp->ys == 1)
+ XFillRectangle(display, window, gc,
+ vp->hexagonList[0].x, vp->hexagonList[0].y, 1, 1);
+ else if (bitmap == BITMAPS - 1)
+ XFillPolygon(display, window, gc,
+ vp->hexagonList, 6, Convex, CoordModePrevious);
+ else {
+ if (firstChange) {
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XFillPolygon(display, window, gc,
+ vp->hexagonList, 6, Convex, CoordModePrevious);
+ XSetForeground(display, gc, colour);
+ }
+ if (vp->xs <= 6 || vp->ys <= 2)
+ XFillRectangle(display, window, gc,
+ vp->hexagonList[0].x - 3 * vp->xs / 4,
+ vp->hexagonList[0].y + vp->ys / 4, vp->xs, vp->ys);
+ else
+ XFillArc(display, window, gc,
+ vp->xb + vp->xs * ccol - 3 * vp->xs / 4,
+ vp->yb + vp->ys * crow + vp->ys / 4,
+ 2 * vp->xs - 6, 2 * vp->ys - 2,
+ 0, 23040);
+ }
+ } else if (vp->neighbors == 4 || vp->neighbors == 8) {
+ if (vp->pixelmode) {
+ if (bitmap == BITMAPS - 1 || (vp->xs == 1 && vp->ys == 1))
+ XFillRectangle(display, window, gc,
+ vp->xb + vp->xs * col, vp->yb + vp->ys * row,
+ vp->xs, vp->ys);
+ else {
+ if (firstChange) {
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XFillRectangle(display, window, gc,
+ vp->xb + vp->xs * col, vp->yb + vp->ys * row,
+ vp->xs, vp->ys);
+ XSetForeground(display, gc, colour);
+ }
+ XFillArc(display, window, gc,
+ vp->xb + vp->xs * col, vp->yb + vp->ys * row, vp->xs, vp->ys,
+ 0, 23040);
+ }
+ } else
+ XPutImage(display, window, gc,
+ &logo[bitmap], 0, 0,
+ vp->xb + vp->xs * col, vp->yb + vp->ys * row,
+ icon_width, icon_height);
+ } else { /* TRI */
+ int orient = (col + row) % 2; /* O left 1 right */
+
+ vp->triangleList[orient][0].x = vp->xb + col * vp->xs;
+ vp->triangleList[orient][0].y = vp->yb + row * vp->ys;
+ if (vp->xs <= 3 || vp->ys <= 3)
+ XFillRectangle(display, window, gc,
+ ((orient) ? -1 : 1) + vp->triangleList[orient][0].x,
+ vp->triangleList[orient][0].y, 1, 1);
+ else {
+ if (orient)
+ vp->triangleList[orient][0].x += (vp->xs / 2 - 1);
+ else
+ vp->triangleList[orient][0].x -= (vp->xs / 2 - 1);
+ if (bitmap == BITMAPS - 1)
+ XFillPolygon(display, window, gc,
+ vp->triangleList[orient], 3, Convex, CoordModePrevious);
+ else {
+ if (firstChange) {
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XFillPolygon(display, window, gc,
+ vp->triangleList[orient], 3, Convex, CoordModePrevious);
+ XSetForeground(display, gc, colour);
+ }
+ XFillArc(display, window, gc,
+ vp->xb + vp->xs * col - 4 * vp->xs / 5 +
+ ((orient) ? vp->xs / 3 : 3 * vp->xs / 5),
+ vp->yb + vp->ys * row - vp->ys / 2 + 1, vp->ys - 3, vp->ys - 3,
+ 0, 23040);
+ }
+ }
+ }
+}
+
+static void
+init_list(voterstruct * vp)
+{
+ /* Waste some space at the beginning and end of list
+ so we do not have to complicated checks against falling off the ends. */
+ vp->last = (CellList *) malloc(sizeof (CellList));
+ vp->first = (CellList *) malloc(sizeof (CellList));
+ vp->first->previous = vp->last->next = NULL;
+ vp->first->next = vp->last->previous = NULL;
+ vp->first->next = vp->last;
+ vp->last->previous = vp->first;
+}
+
+static void
+addto_list(voterstruct * vp, cellstruct info)
+{
+ CellList *curr;
+
+ curr = (CellList *) malloc(sizeof (CellList));
+ vp->last->previous->next = curr;
+ curr->previous = vp->last->previous;
+ curr->next = vp->last;
+ vp->last->previous = curr;
+ curr->info = info;
+}
+
+static void
+removefrom_list(CellList * ptr)
+{
+ ptr->previous->next = ptr->next;
+ ptr->next->previous = ptr->previous;
+ (void) free((void *) ptr);
+}
+
+static void
+flush_list(voterstruct * vp)
+{
+ CellList *curr;
+
+ while (vp->last->previous != vp->first) {
+ curr = vp->last->previous;
+ curr->previous->next = vp->last;
+ vp->last->previous = curr->previous;
+ (void) free((void *) curr);
+ }
+}
+
+static char
+neighbors_opinion(voterstruct * vp, int col, int row, int dir)
+{
+ if (vp->neighbors == 6) {
+ switch (dir) {
+ case 0:
+ col = (col + 1 == vp->ncols) ? 0 : col + 1;
+ break;
+ case 60:
+ if (!(row & 1))
+ col = (col + 1 == vp->ncols) ? 0 : col + 1;
+ row = (!row) ? vp->nrows - 1 : row - 1;
+ break;
+ case 120:
+ if (row & 1)
+ col = (!col) ? vp->ncols - 1 : col - 1;
+ row = (!row) ? vp->nrows - 1 : row - 1;
+ break;
+ case 180:
+ col = (!col) ? vp->ncols - 1 : col - 1;
+ break;
+ case 240:
+ if (row & 1)
+ col = (!col) ? vp->ncols - 1 : col - 1;
+ row = (row + 1 == vp->nrows) ? 0 : row + 1;
+ break;
+ case 300:
+ if (!(row & 1))
+ col = (col + 1 == vp->ncols) ? 0 : col + 1;
+ row = (row + 1 == vp->nrows) ? 0 : row + 1;
+ break;
+ default:
+ (void) fprintf(stderr, "wrong direction %d\n", dir);
+ }
+ } else if (vp->neighbors == 4 || vp->neighbors == 8) {
+ switch (dir) {
+ case 0:
+ col = (col + 1 == vp->ncols) ? 0 : col + 1;
+ break;
+ case 45:
+ col = (col + 1 == vp->ncols) ? 0 : col + 1;
+ row = (!row) ? vp->nrows - 1 : row - 1;
+ break;
+ case 90:
+ row = (!row) ? vp->nrows - 1 : row - 1;
+ break;
+ case 135:
+ col = (!col) ? vp->ncols - 1 : col - 1;
+ row = (!row) ? vp->nrows - 1 : row - 1;
+ break;
+ case 180:
+ col = (!col) ? vp->ncols - 1 : col - 1;
+ break;
+ case 225:
+ col = (!col) ? vp->ncols - 1 : col - 1;
+ row = (row + 1 == vp->nrows) ? 0 : row + 1;
+ break;
+ case 270:
+ row = (row + 1 == vp->nrows) ? 0 : row + 1;
+ break;
+ case 315:
+ col = (col + 1 == vp->ncols) ? 0 : col + 1;
+ row = (row + 1 == vp->nrows) ? 0 : row + 1;
+ break;
+ default:
+ (void) fprintf(stderr, "wrong direction %d\n", dir);
+ }
+ } else { /* TRI */
+ if ((col + row) % 2) { /* right */
+ switch (dir) {
+ case 0:
+ col = (!col) ? vp->ncols - 1 : col - 1;
+ break;
+ case 30:
+ case 40:
+ col = (!col) ? vp->ncols - 1 : col - 1;
+ row = (row + 1 == vp->nrows) ? 0 : row + 1;
+ break;
+ case 60:
+ col = (!col) ? vp->ncols - 1 : col - 1;
+ if (row + 1 == vp->nrows)
+ row = 1;
+ else if (row + 2 == vp->nrows)
+ row = 0;
+ else
+ row = row + 2;
+ break;
+ case 80:
+ case 90:
+ if (row + 1 == vp->nrows)
+ row = 1;
+ else if (row + 2 == vp->nrows)
+ row = 0;
+ else
+ row = row + 2;
+ break;
+ case 120:
+ row = (row + 1 == vp->nrows) ? 0 : row + 1;
+ break;
+ case 150:
+ case 160:
+ col = (col + 1 == vp->ncols) ? 0 : col + 1;
+ row = (row + 1 == vp->nrows) ? 0 : row + 1;
+ break;
+ case 180:
+ col = (col + 1 == vp->ncols) ? 0 : col + 1;
+ break;
+ case 200:
+ case 210:
+ col = (col + 1 == vp->ncols) ? 0 : col + 1;
+ row = (!row) ? vp->nrows - 1 : row - 1;
+ break;
+ case 240:
+ row = (!row) ? vp->nrows - 1 : row - 1;
+ break;
+ case 270:
+ case 280:
+ if (!row)
+ row = vp->nrows - 2;
+ else if (!(row - 1))
+ row = vp->nrows - 1;
+ else
+ row = row - 2;
+
+ break;
+ case 300:
+ col = (!col) ? vp->ncols - 1 : col - 1;
+ if (!row)
+ row = vp->nrows - 2;
+ else if (!(row - 1))
+ row = vp->nrows - 1;
+ else
+ row = row - 2;
+ break;
+ case 320:
+ case 330:
+ col = (!col) ? vp->ncols - 1 : col - 1;
+ row = (!row) ? vp->nrows - 1 : row - 1;
+ break;
+ default:
+ (void) fprintf(stderr, "wrong direction %d\n", dir);
+ }
+ } else { /* left */
+ switch (dir) {
+ case 0:
+ col = (col + 1 == vp->ncols) ? 0 : col + 1;
+ break;
+ case 30:
+ case 40:
+ col = (col + 1 == vp->ncols) ? 0 : col + 1;
+ row = (!row) ? vp->nrows - 1 : row - 1;
+ break;
+ case 60:
+ col = (col + 1 == vp->ncols) ? 0 : col + 1;
+ if (!row)
+ row = vp->nrows - 2;
+ else if (row == 1)
+ row = vp->nrows - 1;
+ else
+ row = row - 2;
+ break;
+ case 80:
+ case 90:
+ if (!row)
+ row = vp->nrows - 2;
+ else if (row == 1)
+ row = vp->nrows - 1;
+ else
+ row = row - 2;
+ break;
+ case 120:
+ row = (!row) ? vp->nrows - 1 : row - 1;
+ break;
+ case 150:
+ case 160:
+ col = (!col) ? vp->ncols - 1 : col - 1;
+ row = (!row) ? vp->nrows - 1 : row - 1;
+ break;
+ case 180:
+ col = (!col) ? vp->ncols - 1 : col - 1;
+ break;
+ case 200:
+ case 210:
+ col = (!col) ? vp->ncols - 1 : col - 1;
+ row = (row + 1 == vp->nrows) ? 0 : row + 1;
+ break;
+ case 240:
+ row = (row + 1 == vp->nrows) ? 0 : row + 1;
+ break;
+ case 270:
+ case 280:
+ if (row + 1 == vp->nrows)
+ row = 1;
+ else if (row + 2 == vp->nrows)
+ row = 0;
+ else
+ row = row + 2;
+ break;
+ case 300:
+ col = (col + 1 == vp->ncols) ? 0 : col + 1;
+ if (row + 1 == vp->nrows)
+ row = 1;
+ else if (row + 2 == vp->nrows)
+ row = 0;
+ else
+ row = row + 2;
+ break;
+ case 320:
+ case 330:
+ col = (col + 1 == vp->ncols) ? 0 : col + 1;
+ row = (row + 1 == vp->nrows) ? 0 : row + 1;
+ break;
+ default:
+ (void) fprintf(stderr, "wrong direction %d\n", dir);
+ }
+ }
+ }
+
+ return vp->arr[row * vp->ncols + col];
+}
+
+
+static void
+advanceColors(ModeInfo * mi, int col, int row)
+{
+ voterstruct *vp = &voters[MI_SCREEN(mi)];
+ CellList *curr;
+
+ curr = vp->first->next;
+ while (curr != vp->last) {
+ if (curr->info.col == col && curr->info.row == row) {
+ curr = curr->next;
+ removefrom_list(curr->previous);
+ } else {
+ if (curr->info.age > 0)
+ curr->info.age--;
+ else if (curr->info.age < 0)
+ curr->info.age++;
+ drawcell(mi, curr->info.col, curr->info.row,
+ (MI_NPIXELS(mi) + curr->info.age / FACTOR +
+ (MI_NPIXELS(mi) * curr->info.kind / BITMAPS)) % MI_NPIXELS(mi),
+ curr->info.kind, False);
+ if (curr->info.age == 0) {
+ curr = curr->next;
+ removefrom_list(curr->previous);
+ } else
+ curr = curr->next;
+ }
+ }
+}
+
+void
+init_voters(ModeInfo * mi)
+{
+ int size = MI_SIZE(mi);
+ voterstruct *vp;
+ int i, col, row, colrow;
+
+ if (voters == NULL) {
+ if ((voters = (voterstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (voterstruct))) == NULL)
+ return;
+ }
+ vp = &voters[MI_SCREEN(mi)];
+
+ vp->generation = 0;
+ if (!vp->initialized) { /* Genesis of democracy */
+ icon_width = donkey_width;
+ icon_height = donkey_height;
+ vp->initialized = 1;
+ init_list(vp);
+ for (i = 0; i < BITMAPS; i++) {
+ logo[i].width = icon_width;
+ logo[i].height = icon_height;
+ logo[i].bytes_per_line = (icon_width + 7) / 8;
+ }
+ } else /* Exterminate all free thinking individuals */
+ flush_list(vp);
+
+ vp->width = MI_WIN_WIDTH(mi);
+ vp->height = MI_WIN_HEIGHT(mi);
+
+ for (i = 0; i < NEIGHBORKINDS; i++) {
+ if (neighbors == initVal[i]) {
+ vp->neighbors = neighbors;
+ break;
+ }
+ if (i == NEIGHBORKINDS - 1) {
+#if 0
+ vp->neighbors = initVal[NRAND(NEIGHBORKINDS)];
+ vp->neighbors = (LRAND() & 1) ? 4 : 8;
+#else
+ vp->neighbors = 8;
+#endif
+ break;
+ }
+ }
+
+ if (vp->neighbors == 6) {
+ int nccols, ncrows, i;
+
+ if (vp->width < 2)
+ vp->width = 2;
+ if (vp->height < 4)
+ vp->height = 4;
+ if (size < -MINSIZE)
+ vp->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(vp->width, vp->height) /
+ MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE) {
+ if (!size)
+ vp->ys = MAX(MINSIZE, MIN(vp->width, vp->height) / MINGRIDSIZE);
+ else
+ vp->ys = MINSIZE;
+ } else
+ vp->ys = MIN(size, MAX(MINSIZE, MIN(vp->width, vp->height) /
+ MINGRIDSIZE));
+ vp->xs = vp->ys;
+ vp->pixelmode = True;
+ nccols = MAX(vp->width / vp->xs - 2, 2);
+ ncrows = MAX(vp->height / vp->ys - 1, 2);
+ vp->ncols = nccols / 2;
+ vp->nrows = 2 * (ncrows / 4);
+ vp->xb = (vp->width - vp->xs * nccols) / 2 + vp->xs / 2;
+ vp->yb = (vp->height - vp->ys * (ncrows / 2) * 2) / 2 + vp->ys;
+ for (i = 0; i < 6; i++) {
+ vp->hexagonList[i].x = (vp->xs - 1) * hexagonUnit[i].x;
+ vp->hexagonList[i].y = ((vp->ys - 1) * hexagonUnit[i].y / 2) * 4 / 3;
+ }
+ } else if (vp->neighbors == 4 || vp->neighbors == 8) {
+ if (vp->width < 2)
+ vp->width = 2;
+ if (vp->height < 2)
+ vp->height = 2;
+ if (size == 0 ||
+ MINGRIDSIZE * size > vp->width || MINGRIDSIZE * size > vp->height) {
+ if (vp->width > MINGRIDSIZE * icon_width &&
+ vp->height > MINGRIDSIZE * icon_height) {
+ vp->pixelmode = False;
+ vp->xs = icon_width;
+ vp->ys = icon_height;
+ } else {
+ vp->pixelmode = True;
+ vp->xs = vp->ys = MAX(MINSIZE, MIN(vp->width, vp->height) /
+ MINGRIDSIZE);
+ }
+ } else {
+ vp->pixelmode = True;
+ if (size < -MINSIZE)
+ vp->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(vp->width, vp->height) /
+ MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE)
+ vp->ys = MINSIZE;
+ else
+ vp->ys = MIN(size, MAX(MINSIZE, MIN(vp->width, vp->height) /
+ MINGRIDSIZE));
+ vp->xs = vp->ys;
+ }
+ vp->ncols = MAX(vp->width / vp->xs, 2);
+ vp->nrows = MAX(vp->height / vp->ys, 2);
+ vp->xb = (vp->width - vp->xs * vp->ncols) / 2;
+ vp->yb = (vp->height - vp->ys * vp->nrows) / 2;
+ } else { /* TRI */
+ int orient, i;
+
+ if (vp->width < 2)
+ vp->width = 2;
+ if (vp->height < 2)
+ vp->height = 2;
+ if (size < -MINSIZE)
+ vp->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(vp->width, vp->height) /
+ MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE) {
+ if (!size)
+ vp->ys = MAX(MINSIZE, MIN(vp->width, vp->height) / MINGRIDSIZE);
+ else
+ vp->ys = MINSIZE;
+ } else
+ vp->ys = MIN(size, MAX(MINSIZE, MIN(vp->width, vp->height) /
+ MINGRIDSIZE));
+ vp->xs = (int) (1.52 * vp->ys);
+ vp->pixelmode = True;
+ vp->ncols = (MAX(vp->width / vp->xs - 1, 2) / 2) * 2;
+ vp->nrows = (MAX(vp->height / vp->ys - 1, 2) / 2) * 2;
+ vp->xb = (vp->width - vp->xs * vp->ncols) / 2 + vp->xs / 2;
+ vp->yb = (vp->height - vp->ys * vp->nrows) / 2 + vp->ys / 2;
+ for (orient = 0; orient < 2; orient++) {
+ for (i = 0; i < 3; i++) {
+ vp->triangleList[orient][i].x =
+ (vp->xs - 2) * triangleUnit[orient][i].x;
+ vp->triangleList[orient][i].y =
+ (vp->ys - 2) * triangleUnit[orient][i].y;
+ }
+ }
+ }
+
+ vp->npositions = vp->ncols * vp->nrows;
+ if (vp->arr != NULL)
+ (void) free((void *) vp->arr);
+ vp->arr = (char *) calloc(vp->npositions, sizeof (char));
+
+ /* Play G-d with these numbers */
+ vp->nparties = MI_BATCHCOUNT(mi);
+ if (vp->nparties < MINPARTIES || vp->nparties > BITMAPS)
+ vp->nparties = NRAND(BITMAPS - MINPARTIES + 1) + MINPARTIES;
+ if (vp->pixelmode)
+ vp->nparties = 2;
+
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+
+ for (i = 0; i < BITMAPS; i++)
+ vp->number_in_party[i] = 0;
+
+ for (row = 0; row < vp->nrows; row++)
+ for (col = 0; col < vp->ncols; col++) {
+ colrow = col + row * vp->ncols;
+ i = NRAND(vp->nparties) + (vp->nparties == 2);
+ vp->arr[colrow] = (char) i;
+ drawcell(mi, col, row, (unsigned long) (MI_NPIXELS(mi) * i / BITMAPS),
+ i, False);
+ vp->number_in_party[i]++;
+ }
+}
+
+void
+draw_voters(ModeInfo * mi)
+{
+ voterstruct *vp = &voters[MI_SCREEN(mi)];
+ int i, spineless_dude, neighbor_direction;
+ int spineless_col, spineless_row;
+ int new_opinion, old_opinion;
+ cellstruct info;
+
+ for (i = 0; i < BITMAPS; i++)
+ if (vp->number_in_party[i] == vp->npositions) { /* The End of the WORLD */
+ init_voters(mi); /* Create a more interesting planet */
+ }
+ spineless_dude = NRAND(vp->npositions);
+ neighbor_direction = NRAND(vp->neighbors) * 360 / vp->neighbors;
+ spineless_col = spineless_dude % vp->ncols;
+ spineless_row = spineless_dude / vp->ncols;
+ old_opinion = vp->arr[spineless_dude];
+ new_opinion = neighbors_opinion(vp, spineless_col, spineless_row,
+ neighbor_direction);
+ if (old_opinion != new_opinion) {
+ vp->number_in_party[old_opinion]--;
+ vp->number_in_party[new_opinion]++;
+ vp->arr[spineless_dude] = new_opinion;
+ info.kind = new_opinion;
+ info.age = (old_opinion - new_opinion);
+ if (info.age == 2)
+ info.age = -1;
+ if (info.age == -2)
+ info.age = 1;
+ info.age *= (FACTOR * MI_NPIXELS(mi)) / 3;
+ info.col = spineless_col;
+ info.row = spineless_row;
+ if (MI_NPIXELS(mi) > 2) {
+ advanceColors(mi, spineless_col, spineless_row);
+ addto_list(vp, info);
+ }
+ drawcell(mi, spineless_col, spineless_row,
+ (MI_NPIXELS(mi) + info.age / FACTOR +
+ (MI_NPIXELS(mi) * new_opinion / BITMAPS)) % MI_NPIXELS(mi),
+ new_opinion, True);
+ } else if (MI_NPIXELS(mi) > 2)
+ advanceColors(mi, -1, -1);
+ vp->generation++;
+ for (i = 0; i < BITMAPS; i++)
+ if (vp->number_in_party[i] == vp->npositions) { /* The End of the WORLD */
+ refresh_voters(mi);
+ MI_PAUSE(mi) = 1000000;
+ }
+}
+
+void
+release_voters(ModeInfo * mi)
+{
+ if (voters != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ voterstruct *vp = &voters[screen];
+
+ flush_list(vp);
+ (void) free((void *) vp->last);
+ (void) free((void *) vp->first);
+ if (vp->arr != NULL)
+ (void) free((void *) vp->arr);
+ }
+ (void) free((void *) voters);
+ voters = NULL;
+ }
+}
+
+void
+refresh_voters(ModeInfo * mi)
+{
+ voterstruct *vp = &voters[MI_SCREEN(mi)];
+ int col, row, colrow;
+
+ for (row = 0; row < vp->nrows; row++)
+ for (col = 0; col < vp->ncols; col++) {
+ colrow = col + row * vp->ncols;
+ /* Draw all old, will get corrected soon if wrong... */
+ drawcell(mi, col, row,
+ (unsigned long) (MI_NPIXELS(mi) * vp->arr[colrow] / BITMAPS),
+ vp->arr[colrow], False);
+ }
+}
--- /dev/null
+/*****************************************************************************/
+/** Copyright 1991 by Andreas Stolcke **/
+/** Copyright 1990 by Solbourne Computer Inc. **/
+/** Longmont, Colorado **/
+/** **/
+/** All Rights Reserved **/
+/** **/
+/** Permission to use, copy, modify, and distribute this software and **/
+/** its documentation for any purpose and without fee is hereby **/
+/** granted, provided that the above copyright notice appear in all **/
+/** copies and that both that copyright notice and this permis- **/
+/** sion notice appear in supporting documentation, and that the **/
+/** name of Solbourne not be used in advertising **/
+/** in publicity pertaining to distribution of the software without **/
+/** specific, written prior permission. **/
+/** **/
+/** ANDREAS STOLCKE AND SOLBOURNE COMPUTER INC. DISCLAIMS ALL WARRANTIES **/
+/** WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF **/
+/** MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL ANDREAS STOLCKE **/
+/** OR SOLBOURNE BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL **/
+/** DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA **/
+/** OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER **/
+/** TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE **/
+/** OR PERFORMANCE OF THIS SOFTWARE. **/
+/*****************************************************************************/
+/*-
+ * vroot.h -- Virtual Root Window handling header file
+ *
+ * This header file redefines the X11 macros RootWindow and DefaultRootWindow,
+ * making them look for a virtual root window as provided by certain `virtual'
+ * window managers like swm and tvtwm. If none is found, the ordinary root
+ * window is returned, thus retaining backward compatibility with standard
+ * window managers.
+ * The function implementing the virtual root lookup remembers the result of
+ * its last invocation to avoid overhead in the case of repeated calls
+ * on the same display and screen arguments.
+ * The lookup code itself is taken from Tom LaStrange's ssetroot program.
+ *
+ * Most simple root window changing X programs can be converted to using
+ * virtual roots by just including
+ *
+ * #include <X11/vroot.h>
+ *
+ * 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 <stolcke@ICSI.Berkeley.EDU>, 9/7/90
+ * - replaced all NULL's with properly cast 0's, 5/6/91
+ * - free children list (suggested by Mark Martin <mmm@cetia.fr>), 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 const char vroot_rcsid[] = "$Id: vroot.h,v 1.1 1994/08/25 22:04:24 jwz Exp $";
+
+#endif
+
+#include <X11/X.h>
+#include <X11/Xatom.h>
+#include <X11/Xlib.h>
+
+static Window
+VirtualRootWindowOfScreen(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 < (int) 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_ */
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)wator.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * wator.c - Dewdney's Wa-Tor, water torus simulation for xlock,
+ * the X Window System lockscreen.
+ *
+ * Copyright (c) 1994 by David Bagley.
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 29-Aug-95: Efficiency improvements.
+ * 12-Dec-94: Coded from A.K. Dewdney's "The Armchair Universe, Computer
+ * Recreations from the Pages of Scientific American Magazine"
+ * W.H. Freedman and Company, New York, 1988 (Dec 1984 and
+ * June 1985) also used life.c as a guide.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Wator"
+#define HACK_INIT init_wator
+#define HACK_DRAW draw_wator
+#define DEF_DELAY 750000
+#define DEF_CYCLES 32767
+#define DEF_SIZE 0
+#define DEF_NCOLORS 200
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt wator_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+extern int neighbors;
+
+#include "bitmaps/fish-0.xbm"
+#include "bitmaps/fish-1.xbm"
+#include "bitmaps/fish-2.xbm"
+#include "bitmaps/fish-3.xbm"
+#include "bitmaps/fish-4.xbm"
+#include "bitmaps/fish-5.xbm"
+#include "bitmaps/fish-6.xbm"
+#include "bitmaps/fish-7.xbm"
+#include "bitmaps/shark-0.xbm"
+#include "bitmaps/shark-1.xbm"
+#include "bitmaps/shark-2.xbm"
+#include "bitmaps/shark-3.xbm"
+#include "bitmaps/shark-4.xbm"
+#include "bitmaps/shark-5.xbm"
+#include "bitmaps/shark-6.xbm"
+#include "bitmaps/shark-7.xbm"
+
+#define FISH 0
+#define SHARK 1
+#define KINDS 2
+#define ORIENTS 4
+#define REFLECTS 2
+#define BITMAPS (ORIENTS*REFLECTS*KINDS)
+#define KINDBITMAPS (ORIENTS*REFLECTS)
+#define MINGRIDSIZE 10 /* It is possible for the fish to take over with 3 */
+#define MINSIZE 4
+#define NEIGHBORKINDS 6
+
+static XImage logo[BITMAPS] =
+{
+ {0, 0, 0, XYBitmap, (char *) fish0_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {0, 0, 0, XYBitmap, (char *) fish1_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {0, 0, 0, XYBitmap, (char *) fish2_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {0, 0, 0, XYBitmap, (char *) fish3_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {0, 0, 0, XYBitmap, (char *) fish4_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {0, 0, 0, XYBitmap, (char *) fish5_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {0, 0, 0, XYBitmap, (char *) fish6_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {0, 0, 0, XYBitmap, (char *) fish7_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {0, 0, 0, XYBitmap, (char *) shark0_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {0, 0, 0, XYBitmap, (char *) shark1_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {0, 0, 0, XYBitmap, (char *) shark2_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {0, 0, 0, XYBitmap, (char *) shark3_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {0, 0, 0, XYBitmap, (char *) shark4_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {0, 0, 0, XYBitmap, (char *) shark5_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {0, 0, 0, XYBitmap, (char *) shark6_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {0, 0, 0, XYBitmap, (char *) shark7_bits, LSBFirst, 8, LSBFirst, 8, 1},
+};
+
+/* Fish and shark data */
+typedef struct {
+ char kind, age, food, direction;
+ unsigned long color;
+ int col, row;
+} cellstruct;
+
+/* Doublely linked list */
+typedef struct _CellList {
+ cellstruct info;
+ struct _CellList *previous, *next;
+} CellList;
+
+typedef struct {
+ int initialized;
+ int nkind[KINDS]; /* Number of fish and sharks */
+ int breed[KINDS]; /* Breeding time of fish and sharks */
+ int sstarve; /* Time the sharks starve if they dont find a fish */
+ int kind; /* Currently working on fish or sharks? */
+ int xs, ys; /* Size of fish and sharks */
+ int xb, yb; /* Bitmap offset for fish and sharks */
+ int pixelmode;
+ int generation;
+ int ncols, nrows, positions;
+ int width, height;
+ CellList *currkind, *babykind, *lastkind[KINDS + 1], *firstkind[KINDS + 1];
+ CellList **arr; /* 0=empty or pts to a fish or shark */
+ int neighbors;
+ XPoint hexagonList[6];
+ XPoint triangleList[2][3];
+} watorstruct;
+
+static int initVal[NEIGHBORKINDS] =
+{
+ 3, 4, 6, 8, 9, 12 /* Neighborhoods */
+};
+
+static watorstruct *wators = NULL;
+static int icon_width, icon_height;
+
+#if 0
+/*-
+ * shape either a bitmap or 0 for circle and 1 for polygon
+ * (if triangle shape: -1, 0, 2 or 3 to differentiate left and right)
+ */
+drawshape(ModeInfo * mi, int x, int y, int sizex, int sizey,
+ int sides, int shape)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+
+ if (sides == 4 && sizex == 0 && sizey == 0) {
+ XPutImage(display, window, gc, &logo[shape], 0, 0,
+ x - icon_width, y - icon_height / 2, icon_width, icon_height);
+ } else if (sizex < 3 || sizey < 3 || (sides == 4 && shape == 1) {
+ XFillRectangle(display, window, gc,
+ x - sizex / 2, y - sizey / 2, sizex, sizey);
+ } else if (sides == 4 && shape == 0) {
+ } else if (sides == 6 && shape == 1) {
+ } else if (sides == 6 && shape == 0) {
+ } else if (sides == 3 && shape == 1) {
+ } else if (sides == 3 && shape == 2) {
+ } else if (sides == 3 && shape == -1) {
+ } else if (sides == 3 && shape == 0) {
+ }
+}
+#endif
+
+static void
+drawcell(ModeInfo * mi, int col, int row, unsigned long color, int bitmap,
+ Bool alive)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ watorstruct *wp = &wators[MI_SCREEN(mi)];
+ unsigned long colour;
+
+ if (!alive)
+ colour = MI_WIN_BLACK_PIXEL(mi);
+ else if (MI_NPIXELS(mi) > 2)
+ colour = MI_PIXEL(mi, color);
+ else
+ colour = MI_WIN_WHITE_PIXEL(mi);
+ XSetForeground(display, gc, colour);
+ if (wp->neighbors == 6) {
+ int ccol = 2 * col + !(row & 1), crow = 2 * row;
+
+ wp->hexagonList[0].x = wp->xb + ccol * wp->xs;
+ wp->hexagonList[0].y = wp->yb + crow * wp->ys;
+ if (wp->xs == 1 && wp->ys == 1)
+ XFillRectangle(display, window, gc,
+ wp->hexagonList[0].x, wp->hexagonList[0].y, 1, 1);
+ else if (bitmap >= KINDBITMAPS || !alive)
+ XFillPolygon(display, window, gc,
+ wp->hexagonList, 6, Convex, CoordModePrevious);
+ else {
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XFillPolygon(display, window, gc,
+ wp->hexagonList, 6, Convex, CoordModePrevious);
+ XSetForeground(display, gc, colour);
+ if (wp->xs <= 6 || wp->ys <= 2)
+ XFillRectangle(display, window, gc,
+ wp->hexagonList[0].x - 3 * wp->xs / 4,
+ wp->hexagonList[0].y + wp->ys / 4, wp->xs, wp->ys);
+ else
+ XFillArc(display, window, gc,
+ wp->xb + wp->xs * ccol - 3 * wp->xs / 4,
+ wp->yb + wp->ys * crow + wp->ys / 4,
+ 2 * wp->xs - 6, 2 * wp->ys - 2,
+ 0, 23040);
+ }
+ } else if (wp->neighbors == 4 || wp->neighbors == 8) {
+ if (wp->pixelmode) {
+ if (bitmap >= KINDBITMAPS || (wp->xs == 1 && wp->ys == 1) || !alive)
+ XFillRectangle(display, window, gc,
+ wp->xb + wp->xs * col, wp->yb + wp->ys * row,
+ wp->xs, wp->ys);
+ else {
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XFillRectangle(display, window, gc,
+ wp->xb + wp->xs * col, wp->yb + wp->ys * row,
+ wp->xs, wp->ys);
+ XSetForeground(display, gc, colour);
+ XFillArc(display, window, gc,
+ wp->xb + wp->xs * col, wp->yb + wp->ys * row, wp->xs, wp->ys,
+ 0, 23040);
+ }
+ } else
+ XPutImage(display, window, gc,
+ &logo[bitmap], 0, 0,
+ wp->xb + wp->xs * col, wp->yb + wp->ys * row,
+ icon_width, icon_height);
+ } else { /* TRI */
+ int orient = (col + row) % 2; /* O left 1 right */
+
+ wp->triangleList[orient][0].x = wp->xb + col * wp->xs;
+ wp->triangleList[orient][0].y = wp->yb + row * wp->ys;
+ if (wp->xs <= 3 || wp->ys <= 3)
+ XFillRectangle(display, window, gc,
+ ((orient) ? -1 : 1) + wp->triangleList[orient][0].x,
+ wp->triangleList[orient][0].y, 1, 1);
+ else {
+ if (orient)
+ wp->triangleList[orient][0].x += (wp->xs / 2 - 1);
+ else
+ wp->triangleList[orient][0].x -= (wp->xs / 2 - 1);
+ if (bitmap >= KINDBITMAPS || !alive)
+ XFillPolygon(display, window, gc,
+ wp->triangleList[orient], 3, Convex, CoordModePrevious);
+ else {
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ XFillPolygon(display, window, gc,
+ wp->triangleList[orient], 3, Convex, CoordModePrevious);
+ XSetForeground(display, gc, colour);
+ XFillArc(display, window, gc,
+ wp->xb + wp->xs * col - 4 * wp->xs / 5 +
+ ((orient) ? wp->xs / 3 : 3 * wp->xs / 5),
+ wp->yb + wp->ys * row - wp->ys / 2 + 1, wp->ys - 3, wp->ys - 3,
+ 0, 23040);
+ }
+ }
+ }
+}
+
+static void
+init_kindlist(watorstruct * wp, int kind)
+{
+ /* Waste some space at the beginning and end of list
+ so we do not have to complicated checks against falling off the ends. */
+ wp->lastkind[kind] = (CellList *) malloc(sizeof (CellList));
+ wp->firstkind[kind] = (CellList *) malloc(sizeof (CellList));
+ wp->firstkind[kind]->previous = wp->lastkind[kind]->next = NULL;
+ wp->firstkind[kind]->next = wp->lastkind[kind]->previous = NULL;
+ wp->firstkind[kind]->next = wp->lastkind[kind];
+ wp->lastkind[kind]->previous = wp->firstkind[kind];
+}
+
+static void
+addto_kindlist(watorstruct * wp, int kind, cellstruct info)
+{
+ wp->currkind = (CellList *) malloc(sizeof (CellList));
+ wp->lastkind[kind]->previous->next = wp->currkind;
+ wp->currkind->previous = wp->lastkind[kind]->previous;
+ wp->currkind->next = wp->lastkind[kind];
+ wp->lastkind[kind]->previous = wp->currkind;
+ wp->currkind->info = info;
+}
+
+static void
+removefrom_kindlist(watorstruct * wp, CellList * ptr)
+{
+ ptr->previous->next = ptr->next;
+ ptr->next->previous = ptr->previous;
+ wp->arr[ptr->info.col + ptr->info.row * wp->ncols] = 0;
+ (void) free((void *) ptr);
+}
+
+static void
+dupin_kindlist(watorstruct * wp)
+{
+ CellList *temp;
+
+ temp = (CellList *) malloc(sizeof (CellList));
+ temp->previous = wp->babykind;
+ temp->next = wp->babykind->next;
+ wp->babykind->next = temp;
+ temp->next->previous = temp;
+ temp->info = wp->babykind->info;
+ wp->babykind = temp;
+}
+
+/*-
+ * new fish at end of list, this rotates who goes first, young fish go last
+ * this most likely will not change the feel to any real degree
+ */
+static void
+cutfrom_kindlist(watorstruct * wp)
+{
+ wp->babykind = wp->currkind;
+ wp->currkind = wp->currkind->previous;
+ wp->currkind->next = wp->babykind->next;
+ wp->babykind->next->previous = wp->currkind;
+ wp->babykind->next = wp->lastkind[KINDS];
+ wp->babykind->previous = wp->lastkind[KINDS]->previous;
+ wp->babykind->previous->next = wp->babykind;
+ wp->babykind->next->previous = wp->babykind;
+}
+
+static void
+reattach_kindlist(watorstruct * wp, int kind)
+{
+ wp->currkind = wp->lastkind[kind]->previous;
+ wp->currkind->next = wp->firstkind[KINDS]->next;
+ wp->currkind->next->previous = wp->currkind;
+ wp->lastkind[kind]->previous = wp->lastkind[KINDS]->previous;
+ wp->lastkind[KINDS]->previous->next = wp->lastkind[kind];
+ wp->lastkind[KINDS]->previous = wp->firstkind[KINDS];
+ wp->firstkind[KINDS]->next = wp->lastkind[KINDS];
+}
+
+static void
+flush_kindlist(watorstruct * wp, int kind)
+{
+ while (wp->lastkind[kind]->previous != wp->firstkind[kind]) {
+ wp->currkind = wp->lastkind[kind]->previous;
+ wp->currkind->previous->next = wp->lastkind[kind];
+ wp->lastkind[kind]->previous = wp->currkind->previous;
+ /* wp->arr[wp->currkind->info.col + wp->currkind->info.row * wp->ncols] = 0; */
+ (void) free((void *) wp->currkind);
+ }
+}
+
+static int
+neighbor_position(watorstruct * wp, int col, int row, int dir)
+{
+ if (wp->neighbors == 6) {
+ switch (dir) {
+ case 0:
+ col = (col + 1 == wp->ncols) ? 0 : col + 1;
+ break;
+ case 60:
+ if (!(row & 1))
+ col = (col + 1 == wp->ncols) ? 0 : col + 1;
+ row = (!row) ? wp->nrows - 1 : row - 1;
+ break;
+ case 120:
+ if (row & 1)
+ col = (!col) ? wp->ncols - 1 : col - 1;
+ row = (!row) ? wp->nrows - 1 : row - 1;
+ break;
+ case 180:
+ col = (!col) ? wp->ncols - 1 : col - 1;
+ break;
+ case 240:
+ if (row & 1)
+ col = (!col) ? wp->ncols - 1 : col - 1;
+ row = (row + 1 == wp->nrows) ? 0 : row + 1;
+ break;
+ case 300:
+ if (!(row & 1))
+ col = (col + 1 == wp->ncols) ? 0 : col + 1;
+ row = (row + 1 == wp->nrows) ? 0 : row + 1;
+ break;
+ default:
+ (void) fprintf(stderr, "wrong direction %d\n", dir);
+ }
+ } else if (wp->neighbors == 4 || wp->neighbors == 8) {
+ switch (dir) {
+ case 0:
+ col = (col + 1 == wp->ncols) ? 0 : col + 1;
+ break;
+ case 45:
+ col = (col + 1 == wp->ncols) ? 0 : col + 1;
+ row = (!row) ? wp->nrows - 1 : row - 1;
+ break;
+ case 90:
+ row = (!row) ? wp->nrows - 1 : row - 1;
+ break;
+ case 135:
+ col = (!col) ? wp->ncols - 1 : col - 1;
+ row = (!row) ? wp->nrows - 1 : row - 1;
+ break;
+ case 180:
+ col = (!col) ? wp->ncols - 1 : col - 1;
+ break;
+ case 225:
+ col = (!col) ? wp->ncols - 1 : col - 1;
+ row = (row + 1 == wp->nrows) ? 0 : row + 1;
+ break;
+ case 270:
+ row = (row + 1 == wp->nrows) ? 0 : row + 1;
+ break;
+ case 315:
+ col = (col + 1 == wp->ncols) ? 0 : col + 1;
+ row = (row + 1 == wp->nrows) ? 0 : row + 1;
+ break;
+ default:
+ (void) fprintf(stderr, "wrong direction %d\n", dir);
+ }
+ } else { /* TRI */
+ if ((col + row) % 2) { /* right */
+ switch (dir) {
+ case 0:
+ col = (!col) ? wp->ncols - 1 : col - 1;
+ break;
+ case 30:
+ case 40:
+ col = (!col) ? wp->ncols - 1 : col - 1;
+ row = (row + 1 == wp->nrows) ? 0 : row + 1;
+ break;
+ case 60:
+ col = (!col) ? wp->ncols - 1 : col - 1;
+ if (row + 1 == wp->nrows)
+ row = 1;
+ else if (row + 2 == wp->nrows)
+ row = 0;
+ else
+ row = row + 2;
+ break;
+ case 80:
+ case 90:
+ if (row + 1 == wp->nrows)
+ row = 1;
+ else if (row + 2 == wp->nrows)
+ row = 0;
+ else
+ row = row + 2;
+ break;
+ case 120:
+ row = (row + 1 == wp->nrows) ? 0 : row + 1;
+ break;
+ case 150:
+ case 160:
+ col = (col + 1 == wp->ncols) ? 0 : col + 1;
+ row = (row + 1 == wp->nrows) ? 0 : row + 1;
+ break;
+ case 180:
+ col = (col + 1 == wp->ncols) ? 0 : col + 1;
+ break;
+ case 200:
+ case 210:
+ col = (col + 1 == wp->ncols) ? 0 : col + 1;
+ row = (!row) ? wp->nrows - 1 : row - 1;
+ break;
+ case 240:
+ row = (!row) ? wp->nrows - 1 : row - 1;
+ break;
+ case 270:
+ case 280:
+ if (!row)
+ row = wp->nrows - 2;
+ else if (!(row - 1))
+ row = wp->nrows - 1;
+ else
+ row = row - 2;
+
+ break;
+ case 300:
+ col = (!col) ? wp->ncols - 1 : col - 1;
+ if (!row)
+ row = wp->nrows - 2;
+ else if (!(row - 1))
+ row = wp->nrows - 1;
+ else
+ row = row - 2;
+ break;
+ case 320:
+ case 330:
+ col = (!col) ? wp->ncols - 1 : col - 1;
+ row = (!row) ? wp->nrows - 1 : row - 1;
+ break;
+ default:
+ (void) fprintf(stderr, "wrong direction %d\n", dir);
+ }
+ } else { /* left */
+ switch (dir) {
+ case 0:
+ col = (col + 1 == wp->ncols) ? 0 : col + 1;
+ break;
+ case 30:
+ case 40:
+ col = (col + 1 == wp->ncols) ? 0 : col + 1;
+ row = (!row) ? wp->nrows - 1 : row - 1;
+ break;
+ case 60:
+ col = (col + 1 == wp->ncols) ? 0 : col + 1;
+ if (!row)
+ row = wp->nrows - 2;
+ else if (row == 1)
+ row = wp->nrows - 1;
+ else
+ row = row - 2;
+ break;
+ case 80:
+ case 90:
+ if (!row)
+ row = wp->nrows - 2;
+ else if (row == 1)
+ row = wp->nrows - 1;
+ else
+ row = row - 2;
+ break;
+ case 120:
+ row = (!row) ? wp->nrows - 1 : row - 1;
+ break;
+ case 150:
+ case 160:
+ col = (!col) ? wp->ncols - 1 : col - 1;
+ row = (!row) ? wp->nrows - 1 : row - 1;
+ break;
+ case 180:
+ col = (!col) ? wp->ncols - 1 : col - 1;
+ break;
+ case 200:
+ case 210:
+ col = (!col) ? wp->ncols - 1 : col - 1;
+ row = (row + 1 == wp->nrows) ? 0 : row + 1;
+ break;
+ case 240:
+ row = (row + 1 == wp->nrows) ? 0 : row + 1;
+ break;
+ case 270:
+ case 280:
+ if (row + 1 == wp->nrows)
+ row = 1;
+ else if (row + 2 == wp->nrows)
+ row = 0;
+ else
+ row = row + 2;
+ break;
+ case 300:
+ col = (col + 1 == wp->ncols) ? 0 : col + 1;
+ if (row + 1 == wp->nrows)
+ row = 1;
+ else if (row + 2 == wp->nrows)
+ row = 0;
+ else
+ row = row + 2;
+ break;
+ case 320:
+ case 330:
+ col = (col + 1 == wp->ncols) ? 0 : col + 1;
+ row = (row + 1 == wp->nrows) ? 0 : row + 1;
+ break;
+ default:
+ (void) fprintf(stderr, "wrong direction %d\n", dir);
+ }
+ }
+ }
+ return row * wp->ncols + col;
+}
+
+void
+init_wator(ModeInfo * mi)
+{
+ int size = MI_SIZE(mi);
+ watorstruct *wp;
+ int i, col, row, colrow, kind;
+ cellstruct info;
+
+ if (wators == NULL) {
+ if ((wators = (watorstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (watorstruct))) == NULL)
+ return;
+ }
+ wp = &wators[MI_SCREEN(mi)];
+
+ wp->generation = 0;
+ if (!wp->initialized) { /* Genesis */
+ icon_width = fish0_width;
+ icon_height = fish0_height;
+ wp->initialized = 1;
+ /* Set up what will be a 'triply' linked list.
+ doubly linked list, doubly linked to an array */
+ for (kind = FISH; kind <= KINDS; kind++)
+ init_kindlist(wp, kind);
+ for (i = 0; i < BITMAPS; i++) {
+ logo[i].width = icon_width;
+ logo[i].height = icon_height;
+ logo[i].bytes_per_line = (icon_width + 7) / 8;
+ }
+ } else /* Exterminate all */
+ for (i = FISH; i <= KINDS; i++)
+ flush_kindlist(wp, i);
+
+ wp->width = MI_WIN_WIDTH(mi);
+ wp->height = MI_WIN_HEIGHT(mi);
+ if (wp->width < 2)
+ wp->width = 2;
+ if (wp->height < 2)
+ wp->height = 2;
+
+ for (i = 0; i < NEIGHBORKINDS; i++) {
+ if (neighbors == initVal[i]) {
+ wp->neighbors = neighbors;
+ break;
+ }
+ if (i == NEIGHBORKINDS - 1) {
+#if 0
+ wp->neighbors = initVal[NRAND(NEIGHBORKINDS)];
+ wp->neighbors = (LRAND() & 1) ? 4 : 8;
+#else
+ wp->neighbors = 4;
+#endif
+ break;
+ }
+ }
+
+ if (wp->neighbors == 6) {
+ int nccols, ncrows, i;
+
+ if (wp->width < 2)
+ wp->width = 2;
+ if (wp->height < 4)
+ wp->height = 4;
+ if (size < -MINSIZE)
+ wp->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(wp->width, wp->height) /
+ MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE) {
+ if (!size)
+ wp->ys = MAX(MINSIZE, MIN(wp->width, wp->height) / MINGRIDSIZE);
+ else
+ wp->ys = MINSIZE;
+ } else
+ wp->ys = MIN(size, MAX(MINSIZE, MIN(wp->width, wp->height) /
+ MINGRIDSIZE));
+ wp->xs = wp->ys;
+ wp->pixelmode = True;
+ nccols = MAX(wp->width / wp->xs - 2, 2);
+ ncrows = MAX(wp->height / wp->ys - 1, 2);
+ wp->ncols = nccols / 2;
+ wp->nrows = 2 * (ncrows / 4);
+ wp->xb = (wp->width - wp->xs * nccols) / 2 + wp->xs / 2;
+ wp->yb = (wp->height - wp->ys * (ncrows / 2) * 2) / 2 + wp->ys;
+ for (i = 0; i < 6; i++) {
+ wp->hexagonList[i].x = (wp->xs - 1) * hexagonUnit[i].x;
+ wp->hexagonList[i].y = ((wp->ys - 1) * hexagonUnit[i].y / 2) * 4 / 3;
+ }
+ } else if (wp->neighbors == 4 || wp->neighbors == 8) {
+ if (wp->width < 2)
+ wp->width = 2;
+ if (wp->height < 2)
+ wp->height = 2;
+ if (size == 0 ||
+ MINGRIDSIZE * size > wp->width || MINGRIDSIZE * size > wp->height) {
+ if (wp->width > MINGRIDSIZE * icon_width &&
+ wp->height > MINGRIDSIZE * icon_height) {
+ wp->pixelmode = False;
+ wp->xs = icon_width;
+ wp->ys = icon_height;
+ } else {
+ wp->pixelmode = True;
+ wp->xs = wp->ys = MAX(MINSIZE, MIN(wp->width, wp->height) /
+ MINGRIDSIZE);
+ }
+ } else {
+ wp->pixelmode = True;
+ if (size < -MINSIZE)
+ wp->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(wp->width, wp->height) /
+ MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE)
+ wp->ys = MINSIZE;
+ else
+ wp->ys = MIN(size, MAX(MINSIZE, MIN(wp->width, wp->height) /
+ MINGRIDSIZE));
+ wp->xs = wp->ys;
+ }
+ wp->ncols = MAX(wp->width / wp->xs, 2);
+ wp->nrows = MAX(wp->height / wp->ys, 2);
+ wp->xb = (wp->width - wp->xs * wp->ncols) / 2;
+ wp->yb = (wp->height - wp->ys * wp->nrows) / 2;
+ } else { /* TRI */
+ int orient, i;
+
+ if (wp->width < 2)
+ wp->width = 2;
+ if (wp->height < 2)
+ wp->height = 2;
+ if (size < -MINSIZE)
+ wp->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(wp->width, wp->height) /
+ MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE) {
+ if (!size)
+ wp->ys = MAX(MINSIZE, MIN(wp->width, wp->height) / MINGRIDSIZE);
+ else
+ wp->ys = MINSIZE;
+ } else
+ wp->ys = MIN(size, MAX(MINSIZE, MIN(wp->width, wp->height) /
+ MINGRIDSIZE));
+ wp->xs = (int) (1.52 * wp->ys);
+ wp->pixelmode = True;
+ wp->ncols = (MAX(wp->width / wp->xs - 1, 2) / 2) * 2;
+ wp->nrows = (MAX(wp->height / wp->ys - 1, 2) / 2) * 2;
+ wp->xb = (wp->width - wp->xs * wp->ncols) / 2 + wp->xs / 2;
+ wp->yb = (wp->height - wp->ys * wp->nrows) / 2 + wp->ys / 2;
+ for (orient = 0; orient < 2; orient++) {
+ for (i = 0; i < 3; i++) {
+ wp->triangleList[orient][i].x =
+ (wp->xs - 2) * triangleUnit[orient][i].x;
+ wp->triangleList[orient][i].y =
+ (wp->ys - 2) * triangleUnit[orient][i].y;
+ }
+ }
+ }
+
+ wp->positions = wp->ncols * wp->nrows;
+
+ if (wp->arr != NULL)
+ (void) free((void *) wp->arr);
+ wp->arr = (CellList **) calloc(wp->positions, sizeof (CellList *));
+
+ /* Play G-d with these numbers */
+ wp->nkind[FISH] = wp->positions / 3;
+ wp->nkind[SHARK] = wp->nkind[FISH] / 10;
+ wp->kind = FISH;
+ if (!wp->nkind[SHARK])
+ wp->nkind[SHARK] = 1;
+ wp->breed[FISH] = MI_BATCHCOUNT(mi);
+ wp->breed[SHARK] = 10;
+ if (wp->breed[FISH] < 1)
+ wp->breed[FISH] = 1;
+ else if (wp->breed[FISH] > wp->breed[SHARK])
+ wp->breed[FISH] = 4;
+ wp->sstarve = 3;
+
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+ for (kind = FISH; kind <= SHARK; kind++) {
+ i = 0;
+ while (i < wp->nkind[kind]) {
+ col = NRAND(wp->ncols);
+ row = NRAND(wp->nrows);
+ colrow = col + row * wp->ncols;
+ if (!wp->arr[colrow]) {
+ i++;
+ info.kind = kind;
+ info.age = NRAND(wp->breed[kind]);
+ info.food = NRAND(wp->sstarve);
+ info.direction = NRAND(KINDBITMAPS) + kind * KINDBITMAPS;
+ if (MI_NPIXELS(mi) > 2)
+ info.color = NRAND(MI_NPIXELS(mi));
+ else
+ info.color = 0;
+ info.col = col;
+ info.row = row;
+ addto_kindlist(wp, kind, info);
+ wp->arr[colrow] = wp->currkind;
+ drawcell(mi, col, row,
+ wp->currkind->info.color, wp->currkind->info.direction, True);
+ }
+ }
+ }
+}
+
+void
+draw_wator(ModeInfo * mi)
+{
+ watorstruct *wp = &wators[MI_SCREEN(mi)];
+ int col, row;
+ int colrow, cr, position;
+ int i, numok;
+
+ struct {
+ int pos, dir;
+ } acell[12];
+
+
+ /* Alternate updates, fish and sharks live out of phase with each other */
+ wp->kind = (wp->kind + 1) % KINDS;
+ {
+ wp->currkind = wp->firstkind[wp->kind]->next;
+
+ while (wp->currkind != wp->lastkind[wp->kind]) {
+ col = wp->currkind->info.col;
+ row = wp->currkind->info.row;
+ colrow = col + row * wp->ncols;
+ numok = 0;
+ if (wp->kind == SHARK) { /* Scan for fish */
+ for (i = 0; i < wp->neighbors; i++) {
+ position = neighbor_position(wp, col, row, i * 360 / wp->neighbors);
+ if (wp->arr[position] && wp->arr[position]->info.kind == FISH) {
+ acell[numok].pos = position;
+ acell[numok++].dir = i;
+ }
+ }
+ if (numok) { /* No thanks, I'm a vegetarian */
+ i = NRAND(numok);
+ wp->nkind[FISH]--;
+ cr = acell[i].pos;
+ removefrom_kindlist(wp, wp->arr[cr]);
+ wp->arr[cr] = wp->currkind;
+ if (wp->neighbors == 4) {
+ wp->currkind->info.direction = (5 - acell[i].dir) % ORIENTS +
+ ((NRAND(REFLECTS)) ? 0 : ORIENTS) + wp->kind * KINDBITMAPS;
+ } else if (wp->neighbors == 8) {
+ wp->currkind->info.direction = (5 - (acell[i].dir / 2 +
+ ((acell[i].dir % 2) ? LRAND() & 1 : 0))) % ORIENTS +
+ ((NRAND(REFLECTS)) ? 0 : ORIENTS) + wp->kind * KINDBITMAPS;
+ } else
+ wp->currkind->info.direction = wp->kind * KINDBITMAPS;
+ wp->currkind->info.col = acell[i].pos % wp->ncols;
+ wp->currkind->info.row = acell[i].pos / wp->ncols;
+ wp->currkind->info.food = wp->sstarve;
+ drawcell(mi, wp->currkind->info.col, wp->currkind->info.row,
+ wp->currkind->info.color, wp->currkind->info.direction, True);
+ if (++(wp->currkind->info.age) >= wp->breed[wp->kind]) { /* breed */
+ cutfrom_kindlist(wp); /* This rotates out who goes first */
+ wp->babykind->info.age = 0;
+ dupin_kindlist(wp);
+ wp->arr[colrow] = wp->babykind;
+ wp->babykind->info.col = col;
+ wp->babykind->info.row = row;
+ wp->babykind->info.age = -1; /* Make one a little younger */
+#if 0
+ if (MI_NPIXELS(mi) > 2 && (LRAND() & 1))
+ /* A color mutation */
+ if (++(wp->babykind->info.color) >= MI_NPIXELS(mi))
+ wp->babykind->info.color = 0;
+#endif
+ wp->nkind[wp->kind]++;
+ } else {
+ wp->arr[colrow] = 0;
+ drawcell(mi, col, row, 0, 0, False);
+ }
+ } else {
+ if (wp->currkind->info.food-- < 0) { /* Time to die, Jaws */
+ /* back up one or else in void */
+ wp->currkind = wp->currkind->previous;
+ removefrom_kindlist(wp, wp->arr[colrow]);
+ wp->arr[colrow] = 0;
+ drawcell(mi, col, row, 0, 0, False);
+ wp->nkind[wp->kind]--;
+ numok = -1; /* Want to escape from next if */
+ }
+ }
+ }
+ if (!numok) { /* Fish or shark search for a place to go */
+ for (i = 0; i < wp->neighbors; i++) {
+ position = neighbor_position(wp, col, row, i * 360 / wp->neighbors);
+ if (!wp->arr[position]) { /* Found an empty spot */
+ acell[numok].pos = position;
+ acell[numok++].dir = i;
+ }
+ }
+ if (numok) { /* Found a place to go */
+ i = NRAND(numok);
+ wp->arr[acell[i].pos] = wp->currkind;
+ if (wp->neighbors == 4) {
+ wp->currkind->info.direction = (5 - acell[i].dir) % ORIENTS +
+ ((NRAND(REFLECTS)) ? 0 : ORIENTS) + wp->kind * KINDBITMAPS;
+ } else if (wp->neighbors == 8) {
+ wp->currkind->info.direction = (5 - (acell[i].dir / 2 +
+ ((acell[i].dir % 2) ? LRAND() & 1 : 0))) % ORIENTS +
+ ((NRAND(REFLECTS)) ? 0 : ORIENTS) + wp->kind * KINDBITMAPS;
+ } else
+ wp->currkind->info.direction = wp->kind * KINDBITMAPS;
+ wp->currkind->info.col = acell[i].pos % wp->ncols;
+ wp->currkind->info.row = acell[i].pos / wp->ncols;
+ drawcell(mi,
+ wp->currkind->info.col, wp->currkind->info.row,
+ wp->currkind->info.color, wp->currkind->info.direction, True);
+ if (++(wp->currkind->info.age) >= wp->breed[wp->kind]) { /* breed */
+ cutfrom_kindlist(wp); /* This rotates out who goes first */
+ wp->babykind->info.age = 0;
+ dupin_kindlist(wp);
+ wp->arr[colrow] = wp->babykind;
+ wp->babykind->info.col = col;
+ wp->babykind->info.row = row;
+ wp->babykind->info.age = -1; /* Make one a little younger */
+ wp->nkind[wp->kind]++;
+ } else {
+ wp->arr[colrow] = 0;
+ drawcell(mi, col, row, 0, 0, False);
+ }
+ } else {
+ /* I'll just sit here and wave my tail so you know I am alive */
+ wp->currkind->info.direction =
+ (wp->currkind->info.direction + ORIENTS) % KINDBITMAPS +
+ wp->kind * KINDBITMAPS;
+ drawcell(mi, col, row, wp->currkind->info.color,
+ wp->currkind->info.direction, True);
+ }
+ }
+ wp->currkind = wp->currkind->next;
+ }
+ reattach_kindlist(wp, wp->kind);
+ }
+
+ if ((wp->nkind[FISH] >= wp->positions) ||
+ (!wp->nkind[FISH] && !wp->nkind[SHARK]) ||
+ wp->generation >= MI_CYCLES(mi)) {
+ init_wator(mi);
+ }
+ if (wp->kind == SHARK)
+ wp->generation++;
+}
+
+void
+release_wator(ModeInfo * mi)
+{
+ if (wators != NULL) {
+ int screen, kind;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ watorstruct *wp = &wators[screen];
+
+ for (kind = 0; kind <= KINDS; kind++) {
+ flush_kindlist(wp, kind);
+ (void) free((void *) wp->lastkind[kind]);
+ (void) free((void *) wp->firstkind[kind]);
+ }
+ if (wp->arr != NULL)
+ (void) free((void *) wp->arr);
+ }
+ (void) free((void *) wators);
+ wators = NULL;
+ }
+}
+
+void
+refresh_wator(ModeInfo * mi)
+{
+ /* Do nothing, it will refresh by itself */
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)wire.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * wire.c - logical circuits based on simple state-changes (wireworld)
+ * for the X Window System lockscreen.
+ *
+ * Copyright (c) 1996 by David Bagley.
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 14-Jun-96: Coded from A.K. Dewdney's "Computer Recreations", Scientific
+ * American Magazine" Jan 1990 pp 146-148. Used ant.c as an
+ * example. do_gen() based on code by Kevin Dahlhausen
+ * <ap096@po.cwru.edu> and Stefan Strack
+ * <stst@vuse.vanderbilt.edu>.
+ */
+
+/*-
+ * OR gate is protected by diodes
+ * XX XX
+ * Input ->XXX XX XX XXX<- Input
+ * XX X XX
+ * X
+ * X
+ * |
+ * V
+ * Output
+ *
+ * ->XXXoOXXX-> Electron moving in a wire
+ *
+ * memory element, about to forget 1 and remember 0
+ * Remember 0
+ * o
+ * X O XX XX Memory Loop
+ * X XX X XXXX
+ * X XX XX X oOX-> 1 Output
+ * Inputs ->XX X X
+ * X X XX o
+ * Inputs ->XXXXXXX XX X XO Memory of 1
+ * XX XX
+ * Remember 1
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Wire"
+#define HACK_INIT init_wire
+#define HACK_DRAW draw_wire
+#define DEF_DELAY 500000
+#define DEF_BATCHCOUNT 1000
+#define DEF_CYCLES 150
+#define DEF_SIZE -8
+#define DEF_NCOLORS 64
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt wire_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+#define WIREBITS(n,w,h)\
+ wp->pixmaps[wp->init_bits++]=\
+ XCreatePixmapFromBitmapData(display,window,(char *)n,w,h,1,0,1)
+
+#define COLORS 4
+#define MINWIRES 1
+#define PATTERNSIZE 8
+#define MINGRIDSIZE 24
+#define MINSIZE 1
+
+static unsigned char patterns[COLORS - 1][PATTERNSIZE] =
+{
+ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, /* black */
+ {0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00}, /* spots */
+ {0xff, 0x99, 0x99, 0xff, 0xff, 0x99, 0x99, 0xff} /* spots */
+};
+
+#define PATHDIRS 4
+static int prob_array[PATHDIRS] =
+{75, 85, 90, 100};
+
+#define SPACE 0
+#define WIRE 1 /* Normal wire */
+#define HEAD 2 /* electron head */
+#define TAIL 3 /* electron tail */
+
+#define REDRAWSTEP 2000 /* How much wire to draw per cycle */
+
+/* Singly linked list */
+typedef struct _RectList {
+ XPoint pt;
+ struct _RectList *next;
+} RectList;
+
+typedef struct {
+ int init_bits;
+ int generation;
+ int xs, ys;
+ int xb, yb;
+ int nrows, ncols;
+ int bnrows, bncols;
+ int mincol, minrow, maxcol, maxrow;
+ int width, height;
+ int n;
+ int redrawing, redrawpos;
+ unsigned char *oldcells, *newcells;
+ unsigned char colors[COLORS - 1];
+ int nrects[COLORS - 1];
+ RectList *rectlist[COLORS - 1];
+ GC stippledGC;
+ Pixmap pixmaps[COLORS - 1];
+} circuitstruct;
+
+static circuitstruct *circuits = NULL;
+
+static void
+addtolist(ModeInfo * mi, int col, int row, unsigned char state)
+{
+ circuitstruct *wp = &circuits[MI_SCREEN(mi)];
+ RectList *current;
+
+ current = wp->rectlist[state];
+ wp->rectlist[state] = (RectList *) malloc(sizeof (RectList));
+ wp->rectlist[state]->pt.x = col;
+ wp->rectlist[state]->pt.y = row;
+ wp->rectlist[state]->next = current;
+ wp->nrects[state]++;
+}
+
+#ifdef DEBUG
+static void
+print_state(ModeInfo * mi, int state)
+{
+ circuitstruct *wp = &circuits[MI_SCREEN(mi)];
+ RectList *locallist;
+ int i = 0;
+
+ locallist = wp->rectlist[state];
+ (void) printf("state %d\n", state);
+ while (locallist) {
+ (void) printf("%d x %d, y %d\n", i,
+ locallist->pt.x, locallist->pt.y);
+ locallist = locallist->next;
+ i++;
+ }
+}
+
+#endif
+
+static void
+free_state(circuitstruct * wp, int state)
+{
+ RectList *current;
+
+ while (wp->rectlist[state]) {
+ current = wp->rectlist[state];
+ wp->rectlist[state] = wp->rectlist[state]->next;
+ (void) free((void *) current);
+ }
+ wp->rectlist[state] = NULL;
+ wp->nrects[state] = 0;
+}
+
+static void
+drawcell(ModeInfo * mi, int col, int row, unsigned char state)
+{
+ circuitstruct *wp = &circuits[MI_SCREEN(mi)];
+ XGCValues gcv;
+ GC gc;
+
+ if (MI_NPIXELS(mi) > 2) {
+ gc = MI_GC(mi);
+ XSetForeground(MI_DISPLAY(mi), gc, MI_PIXEL(mi, wp->colors[state]));
+ } else {
+ gcv.stipple = wp->pixmaps[state];
+ gcv.foreground = MI_WIN_WHITE_PIXEL(mi);
+ gcv.background = MI_WIN_BLACK_PIXEL(mi);
+ XChangeGC(MI_DISPLAY(mi), wp->stippledGC,
+ GCStipple | GCForeground | GCBackground, &gcv);
+ gc = wp->stippledGC;
+ }
+ XFillRectangle(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ wp->xb + wp->xs * col, wp->yb + wp->ys * row, wp->xs, wp->ys);
+}
+
+static void
+draw_state(ModeInfo * mi, int state)
+{
+ circuitstruct *wp = &circuits[MI_SCREEN(mi)];
+ GC gc;
+ XRectangle *rects;
+ XGCValues gcv;
+ RectList *current;
+
+ if (MI_NPIXELS(mi) > 2) {
+ gc = MI_GC(mi);
+ XSetForeground(MI_DISPLAY(mi), gc, MI_PIXEL(mi, wp->colors[state]));
+ } else {
+ gcv.stipple = wp->pixmaps[state];
+ gcv.foreground = MI_WIN_WHITE_PIXEL(mi);
+ gcv.background = MI_WIN_BLACK_PIXEL(mi);
+ XChangeGC(MI_DISPLAY(mi), wp->stippledGC,
+ GCStipple | GCForeground | GCBackground, &gcv);
+ gc = wp->stippledGC;
+ }
+
+ {
+ /* Take advantage of XFillRectangles */
+ int nrects = 0;
+
+ /* Create Rectangle list from part of the rectlist */
+ rects = (XRectangle *) malloc(wp->nrects[state] * sizeof (XRectangle));
+ current = wp->rectlist[state];
+ while (current) {
+ rects[nrects].x = wp->xb + current->pt.x * wp->xs;
+ rects[nrects].y = wp->yb + current->pt.y * wp->ys;
+ rects[nrects].width = wp->xs;
+ rects[nrects].height = wp->ys;
+ current = current->next;
+ nrects++;
+ }
+ /* Finally get to draw */
+ XFillRectangles(MI_DISPLAY(mi), MI_WINDOW(mi), gc, rects, nrects);
+ /* Free up rects list and the appropriate part of the rectlist */
+ (void) free((void *) rects);
+ }
+ free_state(wp, state);
+ XFlush(MI_DISPLAY(mi));
+}
+
+#if 0
+static void
+RandomSoup(circuitstruct * wp)
+{
+ int i, j;
+
+ for (j = 1; j < wp->bnrows - 1; j++)
+ for (i = 1; i < wp->bncols - 1; i++) {
+ *(wp->newcells + i + j * wp->bncols) =
+ (NRAND(100) > wp->n) ? SPACE : (NRAND(4)) ? WIRE : (NRAND(2)) ?
+ HEAD : TAIL;
+ }
+}
+
+#endif
+
+
+static void
+create_path(circuitstruct * wp, int n)
+{
+ int col, row;
+ int count = 0;
+ int dir, prob;
+ int nextcol = 0, nextrow = 0, i;
+
+#ifdef RANDOMSTART
+ /* Path usually "mushed" in a corner */
+ col = NRAND(wp->ncols) + 1;
+ row = NRAND(wp->nrows) + 1;
+#else
+ /* Start from center */
+ col = wp->ncols / 2;
+ row = wp->nrows / 2;
+#endif
+ wp->mincol = col - 1, wp->minrow = row - 1;
+ wp->maxcol = col + 1, wp->maxrow = row + 1;
+ dir = NRAND(PATHDIRS);
+ *(wp->newcells + col + row * wp->bncols) = HEAD;
+ while (++count < n) {
+ prob = NRAND(prob_array[PATHDIRS - 1]);
+ i = 0;
+ while (prob > prob_array[i])
+ i++;
+ dir = (dir + i) % PATHDIRS;
+ switch (dir) {
+ case 0:
+ nextcol = col;
+ nextrow = row - 1;
+ break;
+ case 1:
+ nextcol = col + 1;
+ nextrow = row;
+ if (!NRAND(10))
+ nextrow += ((LRAND() & 1) ? -1 : 1);
+ break;
+ case 2:
+ nextcol = col;
+ nextrow = row + 1;
+ break;
+ case 3:
+ nextcol = col - 1;
+ nextrow = row;
+ if (!NRAND(10))
+ nextrow += ((LRAND() & 1) ? -1 : 1);
+ break;
+ }
+ if (nextrow > 0 && nextrow < wp->bnrows - 1 &&
+ nextcol > 0 && nextcol < wp->bncols - 1) {
+ col = nextcol;
+ row = nextrow;
+ if (col == wp->mincol && col > 1)
+ wp->mincol--;
+ if (row == wp->minrow && row > 1)
+ wp->minrow--;
+ if (col == wp->maxcol && col < wp->bncols - 2)
+ wp->maxcol++;
+ if (row == wp->maxrow && row < wp->bnrows - 2)
+ wp->maxrow++;
+
+ if (!*(wp->newcells + col + row * wp->bncols))
+ *(wp->newcells + col + row * wp->bncols) = WIRE;
+ } else
+ dir = (dir + PATHDIRS / 2) % PATHDIRS;
+ }
+ *(wp->newcells + col + row * wp->bncols) = HEAD;
+}
+
+static void
+do_gen(circuitstruct * wp)
+{
+ int i, j;
+ unsigned char *z;
+ int count;
+
+#define loc(X, Y) (*(wp->oldcells + (X) + ((Y) * wp->bncols)))
+#define add(X, Y) if (loc(X, Y) == HEAD) count++
+
+ for (j = wp->minrow; j <= wp->maxrow; j++) {
+ for (i = wp->mincol; i <= wp->maxcol; i++) {
+ z = wp->newcells + i + j * wp->bncols;
+ switch (loc(i, j)) {
+ case SPACE:
+ *z = SPACE;
+ break;
+ case TAIL:
+ *z = WIRE;
+ break;
+ case HEAD:
+ *z = TAIL;
+ break;
+ case WIRE:
+ count = 0;
+ add(i - 1, j);
+ add(i + 1, j);
+ add(i - 1, j - 1);
+ add(i, j - 1);
+ add(i + 1, j - 1);
+ add(i - 1, j + 1);
+ add(i, j + 1);
+ add(i + 1, j + 1);
+ if (count == 1 || count == 2)
+ *z = HEAD;
+ else
+ *z = WIRE;
+ break;
+ default:
+ (void) fprintf(stderr,
+ "oops, bad internal character %d at %d,%d\n",
+ (int) loc(i, j), i, j);
+ exit(1);
+ }
+ }
+ }
+}
+
+static void
+free_list(circuitstruct * wp)
+{
+ int state;
+
+ for (state = 0; state < COLORS - 1; state++)
+ free_state(wp, state);
+}
+
+void
+init_wire(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ int size = MI_SIZE(mi);
+ circuitstruct *wp;
+ XGCValues gcv;
+ int i;
+
+ if (circuits == NULL) {
+ if ((circuits = (circuitstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (circuitstruct))) == NULL)
+ return;
+ }
+ wp = &circuits[MI_SCREEN(mi)];
+ wp->redrawing = 0;
+ if ((MI_NPIXELS(mi) <= 2) && (wp->init_bits == 0)) {
+ gcv.fill_style = FillOpaqueStippled;
+ wp->stippledGC = XCreateGC(display, window, GCFillStyle, &gcv);
+ for (i = 0; i < COLORS - 1; i++)
+ WIREBITS(patterns[i], PATTERNSIZE, PATTERNSIZE);
+ }
+ if (MI_NPIXELS(mi) > 2) {
+ wp->colors[0] = (NRAND(MI_NPIXELS(mi)));
+ wp->colors[1] = (wp->colors[0] + MI_NPIXELS(mi) / 6 +
+ NRAND(MI_NPIXELS(mi) / 4)) % MI_NPIXELS(mi);
+ wp->colors[2] = (wp->colors[1] + MI_NPIXELS(mi) / 6 +
+ NRAND(MI_NPIXELS(mi) / 4)) % MI_NPIXELS(mi);
+ }
+ free_list(wp);
+ wp->generation = 0;
+ wp->n = MI_BATCHCOUNT(mi);
+ if (wp->n < -MINWIRES) {
+ wp->n = NRAND(-wp->n - MINWIRES + 1) + MINWIRES;
+ } else if (wp->n < MINWIRES)
+ wp->n = MINWIRES;
+
+ wp->width = MI_WIN_WIDTH(mi);
+ wp->height = MI_WIN_HEIGHT(mi);
+
+ if (size < -MINSIZE)
+ wp->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(wp->width, wp->height) /
+ MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE) {
+ if (!size)
+ wp->ys = MAX(MINSIZE, MIN(wp->width, wp->height) / MINGRIDSIZE);
+ else
+ wp->ys = MINSIZE;
+ } else
+ wp->ys = MIN(size, MAX(MINSIZE, MIN(wp->width, wp->height) /
+ MINGRIDSIZE));
+ wp->xs = wp->ys;
+ wp->ncols = MAX(wp->width / wp->xs, 2);
+ wp->nrows = MAX(wp->height / wp->ys, 2);
+ wp->xb = (wp->width - wp->xs * wp->ncols) / 2;
+ wp->yb = (wp->height - wp->ys * wp->nrows) / 2;
+
+ wp->bncols = wp->ncols + 2;
+ wp->bnrows = wp->nrows + 2;
+ XClearWindow(display, MI_WINDOW(mi));
+
+ if (wp->oldcells != NULL)
+ (void) free((void *) wp->oldcells);
+ wp->oldcells = (unsigned char *)
+ calloc(wp->bncols * wp->bnrows, sizeof (unsigned char));
+
+ if (wp->newcells != NULL)
+ (void) free((void *) wp->newcells);
+ wp->newcells = (unsigned char *)
+ calloc(wp->bncols * wp->bnrows, sizeof (unsigned char));
+
+ create_path(wp, wp->n);
+}
+
+void
+draw_wire(ModeInfo * mi)
+{
+ circuitstruct *wp = &circuits[MI_SCREEN(mi)];
+ int offset, i, j;
+ unsigned char *z, *znew;
+
+ /* wires do not grow so min max stuff does not change */
+ for (j = wp->minrow; j <= wp->maxrow; j++) {
+ for (i = wp->mincol; i <= wp->maxcol; i++) {
+ offset = j * wp->bncols + i;
+ z = wp->oldcells + offset;
+ znew = wp->newcells + offset;
+ if (*z != *znew) { /* Counting on once a space always a space */
+ *z = *znew;
+ addtolist(mi, i - 1, j - 1, *znew - 1);
+ }
+ }
+ }
+ for (i = 0; i < COLORS - 1; i++)
+ draw_state(mi, i);
+ if (++wp->generation > MI_CYCLES(mi))
+ init_wire(mi);
+ else
+ do_gen(wp);
+
+ if (wp->redrawing) {
+ for (i = 0; i < REDRAWSTEP; i++) {
+ if ((*(wp->oldcells + wp->redrawpos))) {
+ drawcell(mi, wp->redrawpos % wp->bncols - 1,
+ wp->redrawpos / wp->bncols - 1, *(wp->oldcells + wp->redrawpos) - 1);
+ }
+ if (++(wp->redrawpos) >= wp->bncols * (wp->bnrows - 1)) {
+ wp->redrawing = 0;
+ break;
+ }
+ }
+ }
+}
+
+void
+release_wire(ModeInfo * mi)
+{
+ if (circuits != NULL) {
+ int screen, shade;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
+ circuitstruct *wp = &circuits[screen];
+
+ free_list(wp);
+ if (wp->stippledGC != NULL)
+ XFreeGC(MI_DISPLAY(mi), wp->stippledGC);
+ if (wp->init_bits != 0)
+ for (shade = 0; shade < COLORS - 1; shade++)
+ XFreePixmap(MI_DISPLAY(mi), wp->pixmaps[shade]);
+ if (wp->oldcells != NULL)
+ (void) free((void *) wp->oldcells);
+ if (wp->newcells != NULL)
+ (void) free((void *) wp->newcells);
+ }
+ (void) free((void *) circuits);
+ circuits = NULL;
+ }
+}
+
+void
+refresh_wire(ModeInfo * mi)
+{
+ circuitstruct *wp = &circuits[MI_SCREEN(mi)];
+
+ wp->redrawing = 1;
+ wp->redrawpos = wp->ncols + 1;
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)world.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * world.c - world spinner for xlock, the X Window System lockscreen.
+ *
+ * Copyright (c) 1993 Matthew Moyle-Croft <mmc@cs.adelaide.edu.au>
+ *
+ * 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 04-Oct-95: multiscreen patch, thanks to Grant McDorman <grant@isgtec.com>.
+ * 10-Jul-95: Backward spinning jump fixed by Neale Pickett <zephyr@nmt.edu>.
+ * 17-Jul-94: Got batchcount to work.
+ * 09-Jan-94: Written [ Modified from image.c ]
+ * 29-Jul-90: image.c written. Copyright (c) 1991 by Patrick J. Naughton.
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "World"
+#define HACK_INIT init_world
+#define HACK_DRAW draw_world
+#define DEF_DELAY 100000
+#define DEF_BATCHCOUNT -16
+#define DEF_NCOLORS 100
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt world_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+#include "bitmaps/terra-00.xbm"
+#include "bitmaps/terra-01.xbm"
+#include "bitmaps/terra-02.xbm"
+#include "bitmaps/terra-03.xbm"
+#include "bitmaps/terra-04.xbm"
+#include "bitmaps/terra-05.xbm"
+#include "bitmaps/terra-06.xbm"
+#include "bitmaps/terra-07.xbm"
+#include "bitmaps/terra-08.xbm"
+#include "bitmaps/terra-09.xbm"
+#include "bitmaps/terra-10.xbm"
+#include "bitmaps/terra-11.xbm"
+#include "bitmaps/terra-12.xbm"
+#include "bitmaps/terra-13.xbm"
+#include "bitmaps/terra-14.xbm"
+#include "bitmaps/terra-15.xbm"
+#include "bitmaps/terra-16.xbm"
+#include "bitmaps/terra-17.xbm"
+#include "bitmaps/terra-18.xbm"
+#include "bitmaps/terra-19.xbm"
+#include "bitmaps/terra-20.xbm"
+#include "bitmaps/terra-21.xbm"
+#include "bitmaps/terra-22.xbm"
+#include "bitmaps/terra-23.xbm"
+#include "bitmaps/terra-24.xbm"
+#include "bitmaps/terra-25.xbm"
+#include "bitmaps/terra-26.xbm"
+#include "bitmaps/terra-27.xbm"
+#include "bitmaps/terra-28.xbm"
+#include "bitmaps/terra-29.xbm"
+
+#define NUM_EARTHS 30
+#define SIZE_X terra00_width /* 64 */
+#define SIZE_Y terra00_height /* 64 */
+#define NUM_REV 4
+#define MINWORLDS 1
+
+static XImage Earths[NUM_EARTHS] =
+{
+ {SIZE_X, SIZE_Y, 0, XYBitmap, (char *) terra00_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {SIZE_X, SIZE_Y, 0, XYBitmap, (char *) terra01_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {SIZE_X, SIZE_Y, 0, XYBitmap, (char *) terra02_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {SIZE_X, SIZE_Y, 0, XYBitmap, (char *) terra03_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {SIZE_X, SIZE_Y, 0, XYBitmap, (char *) terra04_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {SIZE_X, SIZE_Y, 0, XYBitmap, (char *) terra05_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {SIZE_X, SIZE_Y, 0, XYBitmap, (char *) terra06_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {SIZE_X, SIZE_Y, 0, XYBitmap, (char *) terra07_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {SIZE_X, SIZE_Y, 0, XYBitmap, (char *) terra08_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {SIZE_X, SIZE_Y, 0, XYBitmap, (char *) terra09_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {SIZE_X, SIZE_Y, 0, XYBitmap, (char *) terra10_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {SIZE_X, SIZE_Y, 0, XYBitmap, (char *) terra11_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {SIZE_X, SIZE_Y, 0, XYBitmap, (char *) terra12_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {SIZE_X, SIZE_Y, 0, XYBitmap, (char *) terra13_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {SIZE_X, SIZE_Y, 0, XYBitmap, (char *) terra14_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {SIZE_X, SIZE_Y, 0, XYBitmap, (char *) terra15_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {SIZE_X, SIZE_Y, 0, XYBitmap, (char *) terra16_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {SIZE_X, SIZE_Y, 0, XYBitmap, (char *) terra17_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {SIZE_X, SIZE_Y, 0, XYBitmap, (char *) terra18_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {SIZE_X, SIZE_Y, 0, XYBitmap, (char *) terra19_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {SIZE_X, SIZE_Y, 0, XYBitmap, (char *) terra20_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {SIZE_X, SIZE_Y, 0, XYBitmap, (char *) terra21_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {SIZE_X, SIZE_Y, 0, XYBitmap, (char *) terra22_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {SIZE_X, SIZE_Y, 0, XYBitmap, (char *) terra23_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {SIZE_X, SIZE_Y, 0, XYBitmap, (char *) terra24_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {SIZE_X, SIZE_Y, 0, XYBitmap, (char *) terra25_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {SIZE_X, SIZE_Y, 0, XYBitmap, (char *) terra26_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {SIZE_X, SIZE_Y, 0, XYBitmap, (char *) terra27_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {SIZE_X, SIZE_Y, 0, XYBitmap, (char *) terra28_bits, LSBFirst, 8, LSBFirst, 8, 1},
+ {SIZE_X, SIZE_Y, 0, XYBitmap, (char *) terra29_bits, LSBFirst, 8, LSBFirst, 8, 1}};
+
+typedef struct {
+ int x;
+ int y;
+ unsigned long color;
+ int frame;
+ int direction;
+} planetstruct;
+
+typedef struct {
+ int width;
+ int height;
+ int nrows;
+ int ncols;
+ int xb;
+ int yb;
+ int frame_num;
+ int nplanets;
+ planetstruct *planets;
+} worldstruct;
+
+static worldstruct *worlds = NULL;
+
+void
+init_world(ModeInfo * mi)
+{
+ worldstruct *wp;
+ int i;
+
+ if (worlds == NULL) {
+ if ((worlds = (worldstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (worldstruct))) == NULL)
+ return;
+ }
+ wp = &worlds[MI_SCREEN(mi)];
+ wp->frame_num = NUM_EARTHS * NUM_REV;
+ for (i = 0; i < NUM_EARTHS; i++)
+ Earths[i].bytes_per_line = 8;
+ wp->width = MI_WIN_WIDTH(mi);
+ wp->height = MI_WIN_HEIGHT(mi);
+ wp->ncols = wp->width / SIZE_X;
+ if (!wp->ncols)
+ wp->ncols = 1;
+ wp->nrows = wp->height / SIZE_Y;
+ if (!wp->nrows)
+ wp->nrows = 1;
+ wp->xb = (wp->width - SIZE_X * wp->ncols) / 2;
+ wp->yb = (wp->height - SIZE_Y * wp->nrows) / 2;
+ wp->nplanets = MI_BATCHCOUNT(mi);
+ if (wp->nplanets < -MINWORLDS)
+ wp->nplanets = NRAND(-wp->nplanets - MINWORLDS + 1) + MINWORLDS;
+ else if (wp->nplanets < MINWORLDS)
+ wp->nplanets = MINWORLDS;
+
+ if (wp->nplanets > wp->ncols * wp->nrows)
+ wp->nplanets = wp->ncols * wp->nrows;
+#ifndef NOFLASH
+ if (wp->nplanets > wp->ncols)
+ wp->nplanets = wp->ncols;
+#endif
+ if (wp->planets != NULL)
+ (void) free((void *) wp->planets);
+ wp->planets = (planetstruct *) malloc(wp->nplanets * sizeof (planetstruct));
+ for (i = 0; i < wp->nplanets; i++)
+ wp->planets[i].x = wp->planets[i].y = -1;
+
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+}
+
+void
+draw_world(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ GC gc = MI_GC(mi);
+ worldstruct *wp = &worlds[MI_SCREEN(mi)];
+ int i;
+
+#ifndef NOFLASH
+ int *col, j;
+
+ if ((col = (int *) calloc(wp->ncols, sizeof (int))) == NULL)
+ return;
+
+#endif
+ if (wp->frame_num == NUM_EARTHS * NUM_REV) {
+ wp->frame_num = 0;
+ XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi));
+ for (i = 0; i < wp->nplanets; i++) {
+ if ((wp->ncols > wp->nplanets || wp->nrows < 2) &&
+ wp->planets[i].x >= 0 && wp->planets[i].y >= 0)
+ XFillRectangle(display, MI_WINDOW(mi), gc,
+ wp->xb + SIZE_X * wp->planets[i].x,
+ wp->yb + SIZE_Y * wp->planets[i].y,
+ SIZE_X, SIZE_Y);
+#ifdef NOFLASH
+ wp->planets[i].x = NRAND(wp->ncols);
+#else
+ do {
+ j = NRAND(wp->ncols);
+ if (!col[j])
+ wp->planets[i].x = j;
+ col[j]++;
+ } while (col[j] > 1);
+#endif
+ wp->planets[i].y = NRAND(wp->nrows);
+ wp->planets[i].direction = LRAND() & 1;
+ wp->planets[i].frame = NRAND(NUM_EARTHS);
+ if (MI_NPIXELS(mi) > 2)
+ wp->planets[i].color = MI_PIXEL(mi, NRAND(MI_NPIXELS(mi)));
+ else
+ wp->planets[i].color = MI_WIN_WHITE_PIXEL(mi);
+ }
+ }
+#ifndef NOFLASH
+ (void) free((void *) col);
+#endif
+ for (i = 0; i < wp->nplanets; i++) {
+ XSetForeground(display, gc, wp->planets[i].color);
+ if (wp->planets[i].frame == NUM_EARTHS)
+ wp->planets[i].frame = 0;
+ else {
+ if ((wp->planets[i].frame < 0) && wp->planets[i].direction == 0)
+ wp->planets[i].frame = NUM_EARTHS - 1;
+ }
+ XPutImage(display, MI_WINDOW(mi), gc, (Earths + wp->planets[i].frame),
+ 0, 0,
+ wp->xb + SIZE_X * wp->planets[i].x,
+ wp->yb + SIZE_Y * wp->planets[i].y,
+ SIZE_X, SIZE_Y);
+
+ (wp->planets[i].direction) ? wp->planets[i].frame++ : wp->planets[i].frame--;
+ }
+ wp->frame_num++;
+}
+
+void
+release_world(ModeInfo * mi)
+{
+ if (worlds != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++)
+ if (worlds[screen].planets != NULL)
+ (void) free((void *) worlds[screen].planets);
+ (void) free((void *) worlds);
+ worlds = NULL;
+ }
+}
+
+void
+refresh_world(ModeInfo * mi)
+{
+ /* Do nothing, it will refresh by itself */
+}
--- /dev/null
+/* -*- Mode: C; tab-width: 4 -*- */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)worm.c 4.03 97/05/10 xlockmore";
+
+#endif
+
+/*-
+ * worm.c - draw wiggly worms 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.
+ *
+ * Revision History:
+ * 10-May-97: Compatible with xscreensaver
+ * 03-Sep-96: fixed bug in allocation of space for worms, added 3d support
+ * Henrik Theiling <theiling@coli.uni-sb.de>
+ * 27-Sep-95: put back malloc
+ * 23-Sep-93: got rid of "rint". (David Bagley)
+ * 27-Sep-91: got rid of all malloc calls since there were no calls to free().
+ * 25-Sep-91: Integrated into X11R5 contrib xlock.
+ *
+ * Adapted from a concept in the Dec 87 issue of Scientific American p. 142.
+ *
+ * SunView version: Brad Taylor <brad@sun.com>
+ * X11 version: Dave Lemke <lemke@ncd.com>
+ * xlock version: Boris Putanec <bp@cs.brown.edu>
+ */
+
+#ifdef STANDALONE
+#define PROGCLASS "Worm"
+#define HACK_INIT init_worm
+#define HACK_DRAW draw_worm
+#define DEF_DELAY 17000
+#define DEF_BATCHCOUNT -20
+#define DEF_CYCLES 10
+#define DEF_SIZE -3
+#define DEF_NCOLORS 200
+#define SMOOTH_COLORS
+#define DEF_3D False
+#include "xlockmore.h" /* in xscreensaver distribution */
+#else /* STANDALONE */
+#include "xlock.h" /* in xlockmore distribution */
+ModeSpecOpt worm_opts =
+{0, NULL, 0, NULL, NULL};
+
+#endif /* STANDALONE */
+
+#define MINSIZE 1
+
+#define SEGMENTS 36
+#define MINWORMS 1
+
+#define MAXZ 750
+#define MINZ 100
+#define SCREENZ 200
+#define GETZDIFF(z) (MI_DELTA3D(mi)*20.0*(1.0-(SCREENZ)/((float)(z)+MINZ)))
+#define IRINT(x) ((int)(((x)>0.0)?(x)+0.5:(x)-0.5))
+
+/* How many segments to draw per cycle when redrawing */
+#define REDRAWSTEP 3
+
+typedef struct {
+ XPoint *circ;
+ int *diffcirc;
+ int dir, dir2;
+ int tail;
+ int x, y, z;
+ int redrawing, redrawpos;
+} wormstuff;
+
+typedef struct {
+ int xsize, ysize, zsize;
+ int wormlength;
+ unsigned long monopix;
+ int nc;
+ int nw;
+ int circsize;
+ wormstuff *worm;
+ XRectangle *rects; /* [NUMCOLORS * batchcount/NUMCOLORS+1] */
+ int maxsize;
+ int *size;
+ unsigned int chromo;
+} wormstruct;
+
+static float sintab[SEGMENTS];
+static float costab[SEGMENTS];
+static int init_table = 0;
+
+static wormstruct *worms = NULL;
+
+static void
+worm_doit(ModeInfo * mi, int which, unsigned long color)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ wormstruct *wp = &worms[MI_SCREEN(mi)];
+ wormstuff *ws = &wp->worm[which];
+ int x, y, z;
+ int diff;
+
+ ws->tail++;
+ if (ws->tail == wp->wormlength)
+ ws->tail = 0;
+
+ x = ws->circ[ws->tail].x;
+ y = ws->circ[ws->tail].y;
+
+ if (MI_WIN_IS_USE3D(mi)) {
+ diff = ws->diffcirc[ws->tail];
+ if (MI_WIN_IS_INSTALL(mi)) {
+ XSetForeground(display, gc, MI_NONE_COLOR(mi));
+ XFillRectangle(display, window, gc, x - diff, y,
+ wp->circsize, wp->circsize);
+ XFillRectangle(display, window, gc, x + diff, y,
+ wp->circsize, wp->circsize);
+ } else {
+ XClearArea(display, window, x - diff, y,
+ wp->circsize, wp->circsize, False);
+ XClearArea(display, window, x + diff, y,
+ wp->circsize, wp->circsize, False);
+ }
+ } else
+ XClearArea(display, window, x, y, wp->circsize, wp->circsize, False);
+
+ if (LRAND() & 1)
+ ws->dir = (ws->dir + 1) % SEGMENTS;
+ else
+ ws->dir = (ws->dir + SEGMENTS - 1) % SEGMENTS;
+
+ x = (ws->x + IRINT((float) wp->circsize * costab[ws->dir]) +
+ wp->xsize) % wp->xsize;
+ y = (ws->y + IRINT((float) wp->circsize * sintab[ws->dir]) +
+ wp->ysize) % wp->ysize;
+
+ ws->circ[ws->tail].x = x;
+ ws->circ[ws->tail].y = y;
+ ws->x = x;
+ ws->y = y;
+
+ if (MI_WIN_IS_USE3D(mi)) {
+ if (LRAND() & 1)
+ ws->dir2 = (ws->dir2 + 1) % SEGMENTS;
+ else
+ ws->dir2 = (ws->dir2 + SEGMENTS - 1) % SEGMENTS;
+ /* for the z-axis the wrap-around looks bad, so worms should just turn around. */
+ z = (int) (ws->z + wp->circsize * sintab[ws->dir2]);
+ if (z < 0 || z >= wp->zsize)
+ z = (int) (ws->z - wp->circsize * sintab[ws->dir2]);
+
+ diff = (int) (GETZDIFF(z) + 0.5); /* ROUND */
+ ws->diffcirc[ws->tail] = diff;
+
+ ws->z = z;
+
+ /* right eye */
+ color = 0;
+ wp->rects[color * wp->maxsize + wp->size[color]].x = x + diff;
+ wp->rects[color * wp->maxsize + wp->size[color]].y = y;
+ wp->size[color]++;
+
+ /* left eye */
+ color = 1;
+ wp->rects[color * wp->maxsize + wp->size[color]].x = x - diff;
+ wp->rects[color * wp->maxsize + wp->size[color]].y = y;
+ wp->size[color]++;
+
+#if 0
+ if (ws->redrawing) { /* Too hard for now */
+ int j;
+
+ for (j = 0; j < REDRAWSTEP; j++) {
+ int k = (ws->tail - ws->redrawpos + wp->wormlength)
+ % wp->wormlength;
+
+ color = 0;
+ wp->rects[color * wp->maxsize + wp->size[color]].x =
+ ws->circ[k].x + ws->diffcirc[k];
+ wp->rects[color * wp->maxsize + wp->size[color]].y =
+ ws->circ[k].y;
+ wp->size[color]++;
+
+ color = 1;
+ wp->rects[color * wp->maxsize + wp->size[color]].x =
+ ws->circ[k].x - ws->diffcirc[k];
+ wp->rects[color * wp->maxsize + wp->size[color]].y =
+ ws->circ[k].y;
+ wp->size[color]++;
+
+ if (++(ws->redrawpos) >= wp->wormlength) {
+ ws->redrawing = 0;
+ break;
+ }
+ }
+ }
+#endif
+
+ } else {
+
+ wp->rects[color * wp->maxsize + wp->size[color]].x = x;
+ wp->rects[color * wp->maxsize + wp->size[color]].y = y;
+ wp->size[color]++;
+ if (ws->redrawing) {
+ int j;
+
+ ws->redrawpos++;
+ /* Compensates for the changed ws->tail
+ since the last callback. */
+
+ for (j = 0; j < REDRAWSTEP; j++) {
+ int k = (ws->tail - ws->redrawpos + wp->wormlength)
+ % wp->wormlength;
+
+ wp->rects[color * wp->maxsize + wp->size[color]].x = ws->circ[k].x;
+ wp->rects[color * wp->maxsize + wp->size[color]].y = ws->circ[k].y;
+ wp->size[color]++;
+
+ if (++(ws->redrawpos) >= wp->wormlength) {
+ ws->redrawing = 0;
+ break;
+ }
+ }
+ }
+ }
+}
+
+static void
+free_worms(wormstruct * wp)
+{
+ int wn;
+
+ if (wp->worm) {
+ for (wn = 0; wn < wp->nw; wn++) {
+ if (wp->worm[wn].circ)
+ (void) free((void *) wp->worm[wn].circ);
+ if (wp->worm[wn].diffcirc)
+ (void) free((void *) wp->worm[wn].diffcirc);
+ }
+ (void) free((void *) wp->worm);
+ wp->worm = NULL;
+ }
+ if (wp->rects) {
+ (void) free((void *) wp->rects);
+ wp->rects = NULL;
+ }
+ if (wp->size) {
+ (void) free((void *) wp->size);
+ wp->size = NULL;
+ }
+}
+
+void
+init_worm(ModeInfo * mi)
+{
+ wormstruct *wp;
+ int size = MI_SIZE(mi);
+ int i, j;
+
+ if (worms == NULL) {
+ if ((worms = (wormstruct *) calloc(MI_NUM_SCREENS(mi),
+ sizeof (wormstruct))) == NULL)
+ return;
+ }
+ wp = &worms[MI_SCREEN(mi)];
+ if (MI_NPIXELS(mi) <= 2 || MI_WIN_IS_USE3D(mi))
+ wp->nc = 2;
+ else
+ wp->nc = MI_NPIXELS(mi);
+ if (wp->nc > NUMCOLORS)
+ wp->nc = NUMCOLORS;
+
+ free_worms(wp);
+ wp->nw = MI_BATCHCOUNT(mi);
+ if (wp->nw < -MINWORMS)
+ wp->nw = NRAND(-wp->nw - MINWORMS + 1) + MINWORMS;
+ else if (wp->nw < MINWORMS)
+ wp->nw = MINWORMS;
+ if (!wp->worm)
+ wp->worm = (wormstuff *) malloc(wp->nw * sizeof (wormstuff));
+
+ if (!wp->size)
+ wp->size = (int *) malloc(NUMCOLORS * sizeof (int));
+ wp->maxsize = (REDRAWSTEP + 1) * wp->nw; /* / wp->nc + 1; */
+ if (!wp->rects)
+ wp->rects =
+ (XRectangle *) malloc(wp->maxsize * NUMCOLORS * sizeof (XRectangle));
+
+
+ if (!init_table) {
+ init_table = 1;
+ for (i = 0; i < SEGMENTS; i++) {
+ sintab[i] = SINF(i * 2.0 * M_PI / SEGMENTS);
+ costab[i] = COSF(i * 2.0 * M_PI / SEGMENTS);
+ }
+ }
+ wp->xsize = MI_WIN_WIDTH(mi);
+ wp->ysize = MI_WIN_HEIGHT(mi);
+ wp->zsize = MAXZ - MINZ + 1;
+ wp->monopix = MI_WIN_WHITE_PIXEL(mi);
+ if (MI_NPIXELS(mi) > 2)
+ wp->chromo = NRAND(MI_NPIXELS(mi));
+
+ if (size < -MINSIZE)
+ wp->circsize = NRAND(-size - MINSIZE + 1) + MINSIZE;
+ else if (size < MINSIZE)
+ wp->circsize = MINSIZE;
+ else
+ wp->circsize = size;
+
+ for (i = 0; i < wp->nc; i++) {
+ for (j = 0; j < wp->maxsize; j++) {
+ wp->rects[i * wp->maxsize + j].width = wp->circsize;
+ wp->rects[i * wp->maxsize + j].height = wp->circsize;
+
+ }
+ }
+ (void) memset((char *) wp->size, 0, wp->nc * sizeof (int));
+
+ wp->wormlength = (int) sqrt(wp->xsize + wp->ysize) *
+ MI_CYCLES(mi) / 8; /* Fudge this to something reasonable */
+ for (i = 0; i < wp->nw; i++) {
+ wp->worm[i].circ = (XPoint *) malloc(wp->wormlength * sizeof (XPoint));
+ wp->worm[i].diffcirc = (int *) malloc(wp->wormlength * sizeof (int));
+
+ for (j = 0; j < wp->wormlength; j++) {
+ wp->worm[i].circ[j].x = wp->xsize / 2;
+ wp->worm[i].circ[j].y = wp->ysize / 2;
+ if (MI_WIN_IS_USE3D(mi))
+ wp->worm[i].diffcirc[j] = 0;
+ }
+ wp->worm[i].dir = NRAND(SEGMENTS);
+ wp->worm[i].dir2 = NRAND(SEGMENTS);
+ wp->worm[i].tail = 0;
+ wp->worm[i].x = wp->xsize / 2;
+ wp->worm[i].y = wp->ysize / 2;
+ wp->worm[i].z = SCREENZ - MINZ;
+ wp->worm[i].redrawing = 0;
+ }
+
+ if (MI_WIN_IS_INSTALL(mi) && MI_WIN_IS_USE3D(mi)) {
+ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_NONE_COLOR(mi));
+ XFillRectangle(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi),
+ 0, 0, wp->xsize, wp->ysize);
+ } else
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+}
+
+void
+draw_worm(ModeInfo * mi)
+{
+ Display *display = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ GC gc = MI_GC(mi);
+ wormstruct *wp = &worms[MI_SCREEN(mi)];
+ unsigned long wcolor;
+ int i;
+
+ (void) memset((char *) wp->size, 0, wp->nc * sizeof (int));
+
+ for (i = 0; i < wp->nw; i++) {
+ if (MI_NPIXELS(mi) > 2) {
+ wcolor = (i + wp->chromo) % wp->nc;
+
+ worm_doit(mi, i, wcolor);
+ } else
+ worm_doit(mi, i, (unsigned long) 0);
+ }
+
+ if (MI_WIN_IS_USE3D(mi)) {
+ if (MI_WIN_IS_INSTALL(mi))
+ XSetFunction(display, gc, GXor);
+ XSetForeground(display, gc, MI_RIGHT_COLOR(mi));
+ XFillRectangles(display, window, gc, &(wp->rects[0]), wp->size[0]);
+
+ XSetForeground(display, gc, MI_LEFT_COLOR(mi));
+ XFillRectangles(display, window, gc, &(wp->rects[wp->maxsize]), wp->size[1]);
+ if (MI_WIN_IS_INSTALL(mi))
+ XSetFunction(display, gc, GXcopy);
+ } else if (MI_NPIXELS(mi) > 2) {
+ for (i = 0; i < wp->nc; i++) {
+ XSetForeground(display, gc, MI_PIXEL(mi, i));
+ XFillRectangles(display, window, gc, &(wp->rects[i * wp->maxsize]), wp->size[i]);
+ }
+ } else {
+ XSetForeground(display, gc, wp->monopix);
+ XFillRectangles(display, window, gc,
+ &(wp->rects[0]), wp->size[0]);
+ }
+
+ if (++wp->chromo == (unsigned long) wp->nc)
+ wp->chromo = 0;
+}
+
+void
+release_worm(ModeInfo * mi)
+{
+ if (worms != NULL) {
+ int screen;
+
+ for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++)
+ free_worms(&worms[screen]);
+ (void) free((void *) worms);
+ worms = NULL;
+ }
+}
+
+void
+refresh_worm(ModeInfo * mi)
+{
+ if (MI_WIN_IS_USE3D(mi))
+ /* The 3D code does drawing&clearing by XORing. We do not
+ want to go to too much trouble here to make it redraw
+ correctly. */
+ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
+ else if (worms != NULL) {
+ wormstruct *wp = &worms[MI_SCREEN(mi)];
+ int i;
+
+ for (i = 0; i < wp->nw; i++) {
+ wp->worm[i].redrawing = 1;
+ wp->worm[i].redrawpos = 0;
+ }
+ }
+}
--- /dev/null
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)xbm.c 4.00 97/01/01 xlockmore";
+
+#endif
+
+/*-
+ * Utilities for XBM processing
+ *
+ * See xlock.c for copying information.
+ *
+ * Revision History:
+ * 25-May-95: David Bagley "snarfed" xv's xvxbm.c
+ * John Bradley <bradley@central.cis.upenn.edu>
+ * code used here by permission
+ */
+#include "xlock.h"
+
+int
+XbmReadFileToImage(char *filename,
+ int *width, int *height, unsigned char **bits)
+{
+ FILE *file;
+ int c, c1;
+ int i, j, k = 0;
+ unsigned char *pix;
+ char line[256], name[256];
+ unsigned char hex[256];
+
+ if ((file = my_fopen(filename, "r")) == NULL) {
+ /*(void) fprintf(stderr, "could not read file \"%s\"\n", filename); */
+ return BitmapOpenFailed;
+ }
+ /* read width: skip lines until we hit a #define */
+ for (;;) {
+ if (!fgets(line, 256, file)) {
+ /* not a xbm file */
+ (void) fclose(file);
+ return BitmapFileInvalid;
+ }
+ if (strncmp(line, "#define", (size_t) 7) == 0 &&
+ sscanf(line, "#define %s %d", name, width) == 2 &&
+ strcmp(name, "_width"))
+ break;
+ }
+
+ /* read height: skip lines until we hit another #define */
+ for (;;) {
+ if (!fgets(line, 256, file)) {
+ (void) fclose(file);
+ (void) fprintf(stderr, "EOF reached in header info.\n");
+ return BitmapFileInvalid;
+ }
+ if (strncmp(line, "#define", (size_t) 7) == 0 &&
+ sscanf(line, "#define %s %d", name, height) == 2 &&
+ strcmp(name, "_height"))
+ break;
+ }
+ /* scan forward until we see the first '0x' */
+ c = getc(file);
+ c1 = getc(file);
+ while (c1 != EOF && !(c == '0' && c1 == 'x')) {
+ c = c1;
+ c1 = getc(file);
+ }
+ if (c1 == EOF) {
+ (void) fclose(file);
+ (void) fprintf(stderr, "No bitmap data found\n");
+ return BitmapFileInvalid;
+ }
+ if (*width < 1 || *height < 1 || *width > 10000 || *height > 10000) {
+ (void) fclose(file);
+ (void) fprintf(stderr, "Not an xbm file");
+ return BitmapFileInvalid;
+ }
+ *bits = (unsigned char *) calloc((size_t) ((*width + 7) / 8) * (*height),
+ (size_t) 8);
+ if (!*bits) {
+ (void) fclose(file);
+ (void) fprintf(stderr, "couldn't malloc bits\n");
+ return BitmapNoMemory;
+ }
+ /* initialize the 'hex' array for zippy ASCII-hex -> int conversion */
+
+ for (i = 0; i < 256; i++)
+ hex[i] = 255; /* flag 'undefined' chars */
+ for (i = '0'; i <= '9'; i++)
+ hex[i] = i - '0';
+ for (i = 'a'; i <= 'f'; i++)
+ hex[i] = i + 10 - 'a';
+ for (i = 'A'; i <= 'F'; i++)
+ hex[i] = i + 10 - 'A';
+
+ /* read the image data */
+
+ for (i = 0, pix = *bits; i < *height; i++)
+ for (j = 0; j < (*width + 7) / 8; j++, pix++) {
+ /* get next byte from file. we're already positioned at it */
+ c = getc(file);
+ c1 = getc(file);
+ if (c < 0 || c1 < 0) {
+ /* EOF: break out of loop */
+ c = c1 = '0';
+ i = *height;
+ j = *width;
+ (void) fclose(file);
+ (void) fprintf(stderr, "The file would appear to be truncated.\n");
+ return BitmapFileInvalid;
+ }
+ if (hex[c1] == 255) {
+ if (hex[c] == 255)
+ k = 0; /* no digits after the '0x' ... */
+ else
+ k = hex[c];
+ } else
+ k = (hex[c] << 4) + hex[c1];
+
+ /* advance to next '0x' */
+ c = getc(file);
+ c1 = getc(file);
+ while (c1 != EOF && !(c == '0' && c1 == 'x')) {
+ c = c1;
+ c1 = getc(file);
+ }
+ *pix = k;
+ }
+ (void) fclose(file);
+ return BitmapSuccess;
+}
--- /dev/null
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)xlock.c 4.03 97/06/16 xlockmore";
+
+#endif
+
+/*-
+ * xlock.c - X11 client to lock a display and show a screen saver.
+ *
+ * Copyright (c) 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.
+ *
+ * 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.
+ *
+ * Revision History:
+ *
+ * Changes maintained by David Bagley <bagleyd@bigfoot.com>
+ * 01-May-97: Scott Carter <scarter@sdsc.edu>
+ * Added code to stat .xlockmessage, .plan, and .signature files
+ * before reading the message; only regular files are read (no
+ * pipes or special files).
+ * Added code to replace tabs with 8 spaces in the message buffer.
+ * 01-Sep-96: Ron Hitchens <ron@idiom.com>
+ * Updated xlock so it would refresh more reliably and
+ * handle window resizing.
+ * 18-Mar-96: Ron Hitchens <ron@idiom.com>
+ * Implemented new ModeInfo hook calling scheme.
+ * Created mode_info() to gather and pass info to hooks.
+ * Watch for and use MI_PAUSE value if mode hook sets it.
+ * Catch SIGSEGV, SIGBUS and SIGFPE signals. Other should
+ * be caught. Eliminate some globals.
+ * 23-Dec-95: Ron Hitchens <ron@idiom.com>
+ * Rewrote event loop so as not to use signals.
+ * 01-Sep-95: initPasswd function, more stuff removed to passwd.c
+ * 24-Jun-95: Cut out passwd stuff to passwd.c-> getPasswd & checkPasswd
+ * 17-Jun-95: Added xlockrc password compile time option.
+ * 12-May-95: Added defines for SunOS's Adjunct password file from
+ * Dale A. Harris <rodmur@ecst.csuchico.edu>
+ * 21-Feb-95: MANY patches from Heath A. Kehoe <hakehoe@icaen.uiowa.edu>.
+ * 24-Jan-95: time_displayed fixed from Chris Ross <cross@va.pubnix.com>.
+ * 18-Jan-95: Ultrix systems (at least DECstations) running enhanced
+ * security from Chris Fuhrman <cfuhrman@vt.edu> and friend.
+ * 26-Oct-94: In order to use extra-long passwords with the Linux changed
+ * PASSLENGTH to 64 <slouken@virtbrew.water.ca.gov>
+ * 11-Jul-94: added -inwindow option from Greg Bowering
+ * <greg@cs.adelaide.edu.au>
+ * 22-Jun-94: Modified for VMS
+ * <Anthony.D.Clarke@Support.Hatfield.Raytheon.bae.eurokom.ie>
+ * 10-Jun-94: patch for BSD from Victor Langeveld <vic@mbfys.kun.nl>
+ * 02-May-94: patched to work on Linux from Darren Senn's
+ * <sinster@scintilla.capitola.ca.us> xlock for Linux.
+ * Took out "bounce" since it was too buggy (maybe I will put
+ * it back later).
+ * 21-Mar-94: patch to to trap Shift-Ctrl-Reset courtesy of Jamie Zawinski
+ * <jwz@netscape.com>, patched the patch (my mistake) for AIXV3
+ * and HP from <R.K.Lloyd@csc.liv.ac.uk>.
+ * 01-Dec-93: added patch for AIXV3 from Tom McConnell
+ * <tmcconne@sedona.intel.com> also added a patch for HP-UX 8.0.
+ * 29-Jul-93: "hyper", "helix", "rock", and "blot" (also tips on "maze") I
+ * got courtesy of Jamie Zawinski <jwz@netscape.com>;
+ * at the time I could not get his stuff to work for the hpux 8.0,
+ * so I scrapped it but threw his stuff in xlock.
+ * "maze" and "sphere" I got courtesy of Sun Microsystems.
+ * "spline" I got courtesy of Jef Poskanzer <jef@netcom.com or
+ * jef@well.sf.ca.us>.
+ *
+ * Changes of Patrick J. Naughton
+ * 24-Jun-91: make foreground and background color get used on mono.
+ * 24-May-91: added -usefirst.
+ * 16-May-91: added pyro and random modes.
+ * ripped big comment block out of all other files.
+ * 08-Jan-91: fix some problems with password entry.
+ * removed renicing code.
+ * 29-Oct-90: added cast to XFree() arg.
+ * added volume arg to call to XBell().
+ * 28-Oct-90: center prompt screen.
+ * make sure Xlib input buffer does not use up all of swap.
+ * make displayed text come from resource file for better I18N.
+ * add backward compatible signal handlers for pre 4.1 machines.
+ * 31-Aug-90: added blank mode.
+ * added swarm mode.
+ * moved usleep() and seconds() out to usleep.c.
+ * added SVR4 defines to xlock.h
+ * 29-Jul-90: added support for multiple screens to be locked by one xlock.
+ * moved global defines to xlock.h
+ * removed use of allowsig().
+ * 07-Jul-90: reworked commandline args and resources to use Xrm.
+ * moved resource processing out to resource.c
+ * 02-Jul-90: reworked colors to not use dynamic colormap.
+ * 23-May-90: added autoraise when obscured.
+ * 15-Apr-90: added hostent alias searching for host authentication.
+ * 18-Feb-90: added SunOS3.5 fix.
+ * changed -mono -> -color, and -saver -> -lock.
+ * allow non-locking screensavers to display on remote machine.
+ * added -echokeys to disable echoing of '?'s on input.
+ * cleaned up all of the parameters and defaults.
+ * 20-Dec-89: added -xhost to allow access control list to be left alone.
+ * added -screensaver (do not disable screen saver) for the paranoid.
+ * Moved seconds() here from all of the display mode source files.
+ * Fixed bug with calling XUngrabHosts() in finish().
+ * 19-Dec-89: Fixed bug in GrabPointer.
+ * Changed fontname to XLFD style.
+ * 23-Sep-89: Added fix to allow local hostname:0 as a display.
+ * Put empty case for Enter/Leave events.
+ * Moved colormap installation later in startup.
+ * 20-Sep-89: Linted and made -saver mode grab the keyboard and mouse.
+ * Replaced SunView code for life mode with Jim Graham's version,
+ * so I could contrib it without legal problems.
+ * Sent to expo for X11R4 contrib.
+ * 19-Sep-89: Added '?'s on input.
+ * 27-Mar-89: Added -qix mode.
+ * Fixed GContext->GC.
+ * 20-Mar-89: Added backup font (fixed) if XQueryLoadFont() fails.
+ * Changed default font to lucida-sans-24.
+ * 08-Mar-89: Added -nice, -mode and -display, built vector for life and hop.
+ * 24-Feb-89: Replaced hopalong display with life display from SunView1.
+ * 22-Feb-89: Added fix for color servers with n < 8 planes.
+ * 16-Feb-89: Updated calling conventions for XCreateHsbColormap();
+ * Added -count for number of iterations per color.
+ * Fixed defaulting mechanism.
+ * Ripped out VMS hacks.
+ * Sent to expo for X11R3 contrib.
+ * 15-Feb-89: Changed default font to pellucida-sans-18.
+ * 20-Jan-89: Added -verbose and fixed usage message.
+ * 19-Jan-89: Fixed monochrome gc bug.
+ * 16-Dec-88: Added SunView style password prompting.
+ * 19-Sep-88: Changed -color to -mono. (default is color on color displays).
+ * Added -saver option. (just do display... do not lock.)
+ * 31-Aug-88: Added -time option.
+ * Removed code for fractals to separate file for modularity.
+ * Added signal handler to restore host access.
+ * Installs dynamic colormap with a Hue Ramp.
+ * If grabs fail then exit.
+ * Added VMS Hacks. (password 'iwiwuu').
+ * Sent to expo for X11R2 contrib.
+ * 08-Jun-88: Fixed root password pointer problem and changed PASSLENGTH to 20.
+ * 20-May-88: Added -root to allow root to unlock.
+ * 12-Apr-88: Added root password override.
+ * Added screen saver override.
+ * Removed XGrabServer/XUngrabServer.
+ * Added access control handling instead.
+ * 01-Apr-88: Added XGrabServer/XUngrabServer for more security.
+ * 30-Mar-88: Removed startup password requirement.
+ * Removed cursor to avoid phosphor burn.
+ * 27-Mar-88: Rotate fractal by 45 degrees clockwise.
+ * 24-Mar-88: Added color support. [-color]
+ * wrote the man page.
+ * 23-Mar-88: Added HOPALONG routines from Scientific American Sept. 86 p. 14.
+ * added password requirement for invokation
+ * removed option for command line password
+ * added requirement for display to be "unix:0".
+ * 22-Mar-88: Recieved Walter Milliken's comp.windows.x posting.
+ *
+ */
+
+#include "xlock.h"
+#include <sys/stat.h>
+#include <signal.h>
+#include <stdarg.h>
+#include <errno.h>
+#if HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+#if HAVE_SYS_SELECT_H && defined(AIXV3)
+#include <sys/select.h>
+#endif
+#include <X11/cursorfont.h>
+#include <X11/Xatom.h>
+#ifdef USE_VROOT
+#include "vroot.h"
+#endif
+#if USE_XVMSUTILS
+#if 0
+#include "../xvmsutils/unix_types.h"
+#include "../xvmsutils/unix_time.h"
+#else
+#include <X11/unix_types.h>
+#include <X11/unix_time.h>
+#endif
+#endif /* USE_XVMSUTILS */
+#ifdef USE_DTSAVER
+#include <X11/Intrinsic.h>
+#include <Dt/Saver.h>
+#endif
+#if defined( __hpux ) || defined( __apollo )
+#include <X11/XHPlib.h>
+extern int XHPEnableReset(Display * dsp);
+
+#endif
+
+/*-
+COLORMAP ON OPENGL PROBLEMS TO SEE WHAT THESE ARE USING MESA
+#undef MESA
+*/
+
+#if ( HAVE_SYSLOG_H && defined( USE_SYSLOG ))
+#include <pwd.h>
+#include <grp.h>
+#include <syslog.h>
+#endif
+
+#if ( __VMS_VER >= 70000000 )
+#include <lib$routines.h>
+#include <mail$routines.h>
+#include <maildef.h>
+struct itmlst_3 {
+ unsigned short int buflen;
+ unsigned short int itmcode;
+ void *bufadr;
+ unsigned short int *retlen;
+};
+
+#endif
+
+extern char *getenv(const char *);
+extern void checkResources(void);
+extern void initPasswd(void);
+extern int checkPasswd(char *);
+
+#if defined( USE_GL ) && !defined( MESA )
+extern XVisualInfo *getGLVisual(Display * display, int screen, XVisualInfo * wantVis, int mono);
+extern void FreeAllGL(Display * display);
+
+#endif
+
+#ifdef USE_OLD_EVENT_LOOP
+extern int usleep(unsigned int);
+
+#endif
+
+#if defined( USE_AUTO_LOGOUT ) || defined( USE_BUTTON_LOGOUT )
+extern void logoutUser(void);
+
+#endif
+
+#if 0
+ /* #if !defined( AIXV3 ) && !defined( __hpux ) && !defined( __bsdi__ ) */
+extern int select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
+
+#if !defined( __hpux ) && !defined( apollo )
+extern int select(size_t, int *, int *, int *, const struct timeval *);
+
+#endif
+
+#endif
+extern int nice(int);
+
+char *ProgramName; /* argv[0] */
+pid_t ProgramPID; /* for memcheck.c not supplied */
+perscreen Scr[MAXSCREENS];
+Display *dsp = NULL; /* server display connection */
+
+extern char user[PASSLENGTH];
+extern float saturation;
+extern float delta3d;
+extern int delay;
+extern int batchcount;
+extern int cycles;
+extern int size;
+extern Bool nolock;
+extern Bool inwindow;
+extern Bool inroot;
+extern Bool mono;
+extern Bool allowaccess;
+extern Bool allowroot;
+extern Bool debug;
+extern Bool echokeys;
+extern Bool enablesaver;
+extern Bool fullrandom;
+extern Bool grabmouse;
+extern Bool grabserver;
+extern Bool install;
+extern Bool timeelapsed;
+extern Bool usefirst;
+extern Bool verbose;
+extern int nicelevel;
+extern int lockdelay;
+extern int timeout;
+extern Bool wireframe;
+extern Bool use3d;
+
+extern char *fontname;
+extern char *messagefont;
+extern char *background;
+extern char *foreground;
+extern char *text_name;
+extern char *text_pass;
+extern char *text_info;
+extern char *text_valid;
+extern char *text_invalid;
+extern char *geometry;
+extern char *icongeometry;
+extern char *none3d;
+extern char *right3d;
+extern char *left3d;
+extern char *both3d;
+
+#ifdef USE_SOUND
+extern char *locksound;
+extern char *infosound;
+extern char *validsound;
+extern char *invalidsound;
+extern void play_sound(char *string);
+extern Bool sound;
+
+#endif
+#ifdef USE_AUTO_LOGOUT
+extern int logoutAuto;
+
+#endif
+
+#ifdef USE_BUTTON_LOGOUT
+extern int logoutButton;
+extern int enable_button;
+extern char *logoutButtonLabel;
+extern char *logoutButtonHelp;
+extern char *logoutFailedString;
+
+#endif
+
+#ifdef USE_DTSAVER
+extern Bool dtsaver;
+
+#endif
+
+static int onepause = 0;
+static int screen = 0; /* current screen */
+
+static int screens; /* number of screens */
+static Window win[MAXSCREENS]; /* window used to cover screen */
+static Window icon[MAXSCREENS]; /* window used during password typein */
+
+#ifdef USE_BUTTON_LOGOUT
+static Window button[MAXSCREENS];
+
+#endif
+static Window root[MAXSCREENS]; /* convenience pointer to the root window */
+static GC textgc[MAXSCREENS]; /* graphics context used for text rendering */
+static GC msgtextgc[MAXSCREENS]; /* graphics context for message rendering */
+static unsigned long fgcol[MAXSCREENS]; /* used for text rendering */
+static unsigned long bgcol[MAXSCREENS]; /* background of text screen */
+static unsigned long nonecol[MAXSCREENS];
+static unsigned long rightcol[MAXSCREENS];
+static unsigned long leftcol[MAXSCREENS];
+static unsigned long bothcol[MAXSCREENS]; /* Can change with -install */
+static int iconx[MAXSCREENS]; /* location of left edge of icon */
+static int icony[MAXSCREENS]; /* location of top edge of icon */
+static int msgx[MAXSCREENS]; /* location of left edge of message */
+static int msgy[MAXSCREENS]; /* location of top edge of message */
+
+static Cursor mycursor; /* blank cursor */
+static Pixmap lockc;
+static Pixmap lockm; /* pixmaps for cursor and mask */
+static char no_bits[] =
+{0}; /* dummy array for the blank cursor */
+static int passx, passy; /* position of the ?'s */
+static int iconwidth, iconheight;
+static int timex, timey; /* position for the times */
+static XFontStruct *font;
+static XFontStruct *msgfont;
+static int sstimeout; /* screen saver parameters */
+static int ssinterval;
+static int ssblanking;
+static int ssexposures;
+static unsigned long start_time;
+static char *message[MESSAGELINES + 1]; /* Message is stored here */
+
+/* GEOMETRY STUFF */
+static int sizeconfiguremask;
+static XWindowChanges fullsizeconfigure, minisizeconfigure;
+static int fullscreen = False;
+
+#if defined( USE_AUTO_LOGOUT ) || defined( USE_BUTTON_LOGOUT )
+static int tried_logout = 0;
+
+#endif
+
+#ifdef USE_SOUND
+static int got_invalid = 0;
+
+#endif
+
+#define AllPointerEventMask \
+ (ButtonPressMask | ButtonReleaseMask | \
+ EnterWindowMask | LeaveWindowMask | \
+ PointerMotionMask | PointerMotionHintMask | \
+ Button1MotionMask | Button2MotionMask | \
+ Button3MotionMask | Button4MotionMask | \
+ Button5MotionMask | ButtonMotionMask | \
+ KeymapStateMask)
+
+#if defined( HAVE_SYSLOG_H ) && defined( USE_SYSLOG )
+#ifndef SYSLOG_FACILITY
+#define SYSLOG_FACILITY LOG_AUTH
+#endif
+
+static void
+syslogStart(void)
+{
+ struct passwd *pw;
+ struct group *gr;
+
+ pw = getpwuid(getuid());
+ gr = getgrgid(getgid());
+
+ (void) openlog(ProgramName, LOG_PID, SYSLOG_FACILITY);
+ syslog(SYSLOG_INFO, "Start: %s, %s, %s",
+ pw->pw_name, gr->gr_name, XDisplayString(dsp));
+}
+
+void
+syslogStop(void)
+{
+ struct passwd *pw;
+ struct group *gr;
+ int secs, mins;
+
+ secs = (int) (seconds() - start_time);
+ mins = secs / 60;
+ secs %= 60;
+
+ pw = getpwuid(getuid());
+ gr = getgrgid(getgid());
+
+ syslog(SYSLOG_INFO, "Stop: %s, %s, %s, %dm %ds",
+ pw->pw_name, gr->gr_name, XDisplayString(dsp), mins, secs);
+}
+
+#endif
+
+void
+error(char *buf)
+{
+#if defined( HAVE_SYSLOG_H ) && defined( USE_SYSLOG )
+ syslog(SYSLOG_WARNING, buf);
+ if (!nolock) {
+ syslogStop();
+ closelog();
+ }
+#else
+ (void) fprintf(stderr, buf);
+#endif
+ exit(1);
+}
+
+/* Server access control support. */
+
+static XHostAddress *XHosts; /* the list of "friendly" client machines */
+static int HostAccessCount; /* the number of machines in XHosts */
+static Bool HostAccessState; /* whether or not we even look at the list */
+
+static void
+XGrabHosts(Display * display)
+{
+ XHosts = XListHosts(display, &HostAccessCount, &HostAccessState);
+ if (XHosts)
+ XRemoveHosts(display, XHosts, HostAccessCount);
+ XEnableAccessControl(display);
+}
+
+static void
+XUngrabHosts(Display * display)
+{
+ if (XHosts) {
+ XAddHosts(display, XHosts, HostAccessCount);
+ XFree((char *) XHosts);
+ }
+ if (HostAccessState == False)
+ XDisableAccessControl(display);
+}
+
+
+/* Simple wrapper to get an asynchronous grab on the keyboard and mouse. If
+ either grab fails, we sleep for one second and try again since some window
+ manager might have had the mouse grabbed to drive the menu choice that
+ picked "Lock Screen..". If either one fails the second time we print an
+ error message and exit. */
+static void
+GrabKeyboardAndMouse(void)
+{
+ Status status;
+ char *buf = NULL;
+
+ status = XGrabKeyboard(dsp, win[0], True,
+ GrabModeAsync, GrabModeAsync, CurrentTime);
+ if (status != GrabSuccess) {
+ (void) sleep(1);
+ status = XGrabKeyboard(dsp, win[0], True,
+ GrabModeAsync, GrabModeAsync, CurrentTime);
+
+ if (status != GrabSuccess) {
+ buf = (char *) malloc(strlen(ProgramName) + 80);
+ (void) sprintf(buf, "%s, could not grab keyboard! (%d)\n",
+ ProgramName, status);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+ }
+ status = XGrabPointer(dsp, win[0], True, AllPointerEventMask,
+ GrabModeAsync, GrabModeAsync, None, mycursor,
+ CurrentTime);
+ if (status != GrabSuccess) {
+ (void) sleep(1);
+ status = XGrabPointer(dsp, win[0], True, AllPointerEventMask,
+ GrabModeAsync, GrabModeAsync, None, mycursor,
+ CurrentTime);
+
+ if (status != GrabSuccess) {
+ buf = (char *) malloc(strlen(ProgramName) + 80);
+ (void) sprintf(buf, "%s, could not grab pointer! (%d)\n",
+ ProgramName, status);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+ }
+}
+
+/* Assuming that we already have an asynch grab on the pointer, just grab it
+ again with a new cursor shape and ignore the return code. */
+static void
+XChangeGrabbedCursor(Cursor cursor)
+{
+ if (!debug && grabmouse && !inwindow && !inroot)
+ (void) XGrabPointer(dsp, win[0], True, AllPointerEventMask,
+ GrabModeAsync, GrabModeAsync, None, cursor, CurrentTime);
+}
+
+/* This is a private data structure, don't touch */
+static ModeInfo modeinfo[MAXSCREENS];
+
+/*-
+ * Return True of False indicating if the given window has changed
+ * size relative to the window geometry cached in the mode_info
+ * struct. If the window handle given does not match the one in
+ * the cache, or if the width/height are not the same, then True
+ * is returned and the window handle in the cache is cleared.
+ * This causes mode_info() to reload the window info next time
+ * it is called.
+ * This function has non-obvious side-effects. I feel so dirty. Rh
+ */
+
+static int
+window_size_changed(int scrn, Window window)
+{
+ XWindowAttributes xgwa;
+ ModeInfo *mi = &modeinfo[scrn];
+
+ if (MI_WINDOW(mi) != window) {
+ MI_WINDOW(mi) = None; /* forces reload on next mode_info() */
+ return (True);
+ } else {
+ (void) XGetWindowAttributes(dsp, window, &xgwa);
+ if ((MI_WIN_WIDTH(mi) != xgwa.width) ||
+ (MI_WIN_HEIGHT(mi) != xgwa.height)) {
+ MI_WINDOW(mi) = None;
+ return (True);
+ }
+ }
+
+ return (False);
+}
+
+/*-
+ * Return a pointer to an up-to-date ModeInfo struct for the given
+ * screen, window and iconic mode. Because the number of screens
+ * is limited, and much of the information is screen-specific, this
+ * function keeps static copies of ModeInfo structs are kept for
+ * each screen. This also eliminates redundant calls to the X server
+ * to acquire info that does change.
+ */
+
+static ModeInfo *
+mode_info(int scrn, Window window, int iconic)
+{
+ XWindowAttributes xgwa;
+ ModeInfo *mi;
+
+ mi = &modeinfo[scrn];
+
+ if (MI_WIN_FLAG_NOT_SET(mi, WI_FLAG_INFO_INITTED)) {
+ /* This stuff only needs to be set once per screen */
+
+ (void) memset((char *) mi, 0, sizeof (ModeInfo));
+
+ MI_DISPLAY(mi) = dsp; /* global */
+ MI_SCREEN(mi) = scrn;
+ MI_REAL_SCREEN(mi) = scrn; /* TODO, for multiscreen debugging */
+ MI_SCREENPTR(mi) = ScreenOfDisplay(dsp, scrn);
+ MI_NUM_SCREENS(mi) = screens; /* TODO */
+ MI_MAX_SCREENS(mi) = screens;
+
+ MI_WIN_BLACK_PIXEL(mi) = BlackPixel(dsp, scrn);
+ MI_WIN_WHITE_PIXEL(mi) = WhitePixel(dsp, scrn);
+
+ MI_PERSCREEN(mi) = &Scr[scrn];
+
+ /* accessing globals here */
+ MI_WIN_SET_FLAG_STATE(mi, WI_FLAG_MONO,
+ (mono || CellsOfScreen(MI_SCREENPTR(mi)) <= 2));
+ MI_WIN_SET_FLAG_STATE(mi, WI_FLAG_INWINDOW, inwindow);
+ MI_WIN_SET_FLAG_STATE(mi, WI_FLAG_INROOT, inroot);
+ MI_WIN_SET_FLAG_STATE(mi, WI_FLAG_NOLOCK, nolock);
+ MI_WIN_SET_FLAG_STATE(mi, WI_FLAG_INSTALL, install);
+ MI_WIN_SET_FLAG_STATE(mi, WI_FLAG_DEBUG, debug);
+ MI_WIN_SET_FLAG_STATE(mi, WI_FLAG_USE3D, use3d &&
+ !(mono || CellsOfScreen(MI_SCREENPTR(mi)) <= 2));
+ MI_WIN_SET_FLAG_STATE(mi, WI_FLAG_VERBOSE, verbose);
+ MI_WIN_SET_FLAG_STATE(mi, WI_FLAG_FULLRANDOM, fullrandom);
+ MI_WIN_SET_FLAG_STATE(mi, WI_FLAG_WIREFRAME, wireframe);
+ MI_WIN_SET_FLAG_STATE(mi, WI_FLAG_INFO_INITTED, True);
+ }
+ if (MI_WINDOW(mi) != window) {
+ MI_WINDOW(mi) = window;
+
+ (void) XGetWindowAttributes(dsp, window, &xgwa);
+
+ MI_WIN_WIDTH(mi) = xgwa.width;
+ MI_WIN_HEIGHT(mi) = xgwa.height;
+ }
+ MI_WIN_SET_FLAG_STATE(mi, WI_FLAG_ICONIC, iconic);
+
+ MI_WIN_DEPTH(mi) = DisplayPlanes(dsp, scrn);
+ MI_VISUAL(mi) = DefaultVisual(dsp, scrn);
+ MI_WIN_COLORMAP(mi) = DefaultColormap(dsp, scrn);
+
+ MI_DELTA3D(mi) = delta3d;
+ MI_PAUSE(mi) = 0; /* use default if mode doesn't change this */
+
+ MI_DELAY(mi) = delay; /* globals */
+ MI_BATCHCOUNT(mi) = batchcount;
+ MI_CYCLES(mi) = cycles;
+ MI_SIZE(mi) = size;
+ MI_SATURATION(mi) = saturation;
+
+ return (mi);
+}
+
+
+/* Restore all grabs, reset screensaver, restore colormap, close connection. */
+void
+finish(void)
+{
+ for (screen = 0; screen < screens; screen++) {
+ if (win[screen] != None) {
+ release_last_mode(mode_info(screen, win[screen], False));
+ }
+ if (icon[screen] != None) {
+ release_last_mode(mode_info(screen, icon[screen], True));
+ }
+ }
+
+ XSync(dsp, False);
+#ifdef USE_VROOT
+ if (inroot)
+ XClearWindow(dsp, win[0]);
+#endif
+ if (!nolock && !allowaccess) {
+ if (grabserver)
+ XUngrabServer(dsp);
+ XUngrabHosts(dsp);
+ }
+ XUngrabPointer(dsp, CurrentTime);
+ XUngrabKeyboard(dsp, CurrentTime);
+ if (!enablesaver && !nolock) {
+ XSetScreenSaver(dsp, sstimeout, ssinterval,
+ ssblanking, ssexposures);
+ }
+ XFlush(dsp);
+#if defined( USE_GL ) && !defined( MESA )
+ FreeAllGL(dsp);
+#endif
+#ifndef __sgi
+ /*-
+ * The following line seems to cause a core dump on the SGI.
+ * More work is needed on the cleanup code.
+ */
+ XCloseDisplay(dsp);
+#endif
+ (void) nice(0);
+}
+
+static int
+xio_error(Display * d)
+{
+ exit(1);
+ return 1;
+}
+
+/* Convenience function for drawing text */
+static void
+putText(Window w, GC gc, char *string, int bold, int left, int *px, int *py)
+ /* which window */
+ /* gc */
+ /* text to write */
+ /* 1 = make it bold */
+ /* left edge of text */
+ /* current x and y, input & return */
+{
+#define PT_BUFSZ 2048
+ char buf[PT_BUFSZ], *p, *s;
+ int x = *px, y = *py, last, len;
+
+ (void) strncpy(buf, string, PT_BUFSZ);
+ buf[PT_BUFSZ - 1] = 0;
+
+ p = buf;
+ last = 0;
+ for (;;) {
+ s = p;
+ for (; *p; ++p)
+ if (*p == '\n')
+ break;
+ if (!*p)
+ last = 1;
+ *p = 0;
+
+ if ((len = strlen(s))) { /* yes, "=", not "==" */
+ XDrawImageString(dsp, w, gc, x, y, s, len);
+ if (bold)
+ XDrawString(dsp, w, gc, x + 1, y, s, len);
+ }
+ if (!last) {
+ y += font->ascent + font->descent + 2;
+ x = left;
+ } else {
+ if (len)
+ x += XTextWidth(font, s, len);
+ break;
+ }
+ p++;
+ }
+ *px = x;
+ *py = y;
+}
+
+static void
+statusUpdate(int isnew, int scr)
+{
+ int left, x, y, len;
+ char buf[1024];
+ XWindowAttributes xgwa;
+ static int last_time;
+
+#ifdef USE_BUTTON_LOGOUT
+ int ysave;
+ static made_button, last_tried_lo = 0;
+
+#endif /* USE_BUTTON_LOGOUT */
+
+ len = (int) (seconds() - start_time) / 60;
+
+#ifdef USE_BUTTON_LOGOUT
+ if (tried_logout && !last_tried_lo) {
+ last_tried_lo = 1;
+ isnew = 1;
+#ifdef USE_AUTO_LOGOUT
+ logoutAuto = 0;
+#endif
+ }
+ if (isnew)
+ made_button = 0;
+#endif /* USE_BUTTON_LOGOUT */
+
+ if (isnew || last_time != len)
+ last_time = len;
+ else
+ return;
+
+ (void) XGetWindowAttributes(dsp, win[scr], &xgwa);
+ x = left = timex;
+ y = timey;
+
+ if (timeelapsed) {
+ if (len < 60)
+ (void) sprintf(buf,
+#ifdef NL
+ "%d minute%s op slot. \n",
+ len, len == 1 ? "" : "n");
+#else
+#ifdef DE
+ "Seit %d Minute%s gesperrt. \n",
+ len, len == 1 ? "" : "n");
+#else
+ "%d minute%s elapsed since locked. \n",
+ len, len == 1 ? "" : "s");
+#endif
+#endif
+ else
+ (void) sprintf(buf,
+#ifdef NL
+ "%d:%02d uur op slot. \n",
+#else
+#ifdef DE
+ "Seit %d:%02d Stunden gesperrt. \n",
+#else
+ "%d:%02d hours elapsed since locked. \n",
+#endif
+#endif
+ len / 60, len % 60);
+ putText(win[scr], textgc[scr], buf, False, left, &x, &y);
+ }
+#ifdef USE_BUTTON_LOGOUT
+ if (enable_button) {
+ if (logoutButton > len) {
+ int tmp = logoutButton - len;
+
+ if (tmp < 60)
+ (void) sprintf(buf,
+#ifdef NL
+ "Over %d minute%s verschijnt de " logout " knop. \n",
+ tmp, (tmp == 1) ? "" : "n");
+#else
+#ifdef DE
+ "In %d Minute%s erscheint der Auslogger. \n",
+ tmp, (tmp == 1) ? "" : "n");
+#else
+ "%d minute%s until the public logout button appears. \n",
+ tmp, (tmp == 1) ? "" : "s");
+#endif
+#endif
+ else
+ (void) sprintf(buf,
+#ifdef NL
+ "Over %d:%02d uur verschijnt de " logout " knop. \n",
+#else
+#ifdef DE
+ "In %d:%02d Stunden erscheint der Auslogger. \n",
+#else
+ "%d:%02d hours until the public logout button appears. \n",
+#endif
+#endif
+ tmp / 60, tmp % 60);
+ putText(win[scr], textgc[scr], buf, False, left, &x, &y);
+ } else {
+ putText(win[scr], textgc[scr],
+#ifdef NL
+ "Schop me eruit \n",
+#else
+#ifdef DE
+ "Werft mich raus \n",
+#else
+ "Kick me out \n",
+#endif
+#endif
+ False, left, &x, &y);
+ if (!made_button || (isnew && tried_logout)) {
+ made_button = 1;
+ ysave = y;
+
+ y += font->ascent + font->descent + 8; /* Leave a gap for validating */
+ XUnmapWindow(dsp, button[scr]);
+ XSetForeground(dsp, Scr[scr].gc, bgcol[scr]);
+ XFillRectangle(dsp, win[scr], Scr[scr].gc, left, y,
+ xgwa.width - left,
+ 5 + 2 * (font->ascent + font->descent));
+ XSetForeground(dsp, Scr[scr].gc, fgcol[scr]);
+
+ if (tried_logout) {
+ putText(win[scr], textgc[scr], logoutFailedString,
+ True, left, &x, &y);
+ } else {
+ XMoveWindow(dsp, button[scr], left, y);
+ XMapWindow(dsp, button[scr]);
+ XRaiseWindow(dsp, button[scr]);
+ (void) sprintf(buf, " %s ", logoutButtonLabel);
+ XSetForeground(dsp, Scr[scr].gc, WhitePixel(dsp, scr));
+ XDrawString(dsp, button[scr], Scr[scr].gc, 0, font->ascent + 1,
+ buf, strlen(buf));
+ XSetForeground(dsp, Scr[scr].gc, fgcol[scr]);
+ y += 5 + 2 * font->ascent + font->descent;
+ putText(win[scr], textgc[scr], logoutButtonHelp,
+ False, left, &x, &y);
+ }
+ y = ysave;
+ x = left;
+ }
+ }
+ }
+#endif /* USE_BUTTON_LOGOUT */
+#ifdef USE_AUTO_LOGOUT
+ if (logoutAuto) {
+ int tmp = logoutAuto - len;
+
+ if (tmp < 60)
+ (void) sprintf(buf, "%d minute%s until auto-logout. \n",
+ tmp, (tmp == 1) ? "" : "s");
+ else
+ (void) sprintf(buf, "%d:%02d hours until auto-logout. \n",
+ tmp / 60, tmp % 60);
+ putText(win[scr], textgc[scr], buf, False, left, &x, &y);
+ }
+#endif /* USE_AUTO_LOGOUT */
+}
+
+#ifdef USE_AUTO_LOGOUT
+static void
+checkLogout(void)
+{
+ if (nolock || tried_logout || !logoutAuto)
+ return;
+
+ if (logoutAuto * 60 < (int) (seconds() - start_time)) {
+ tried_logout = 1;
+ logoutAuto = 0;
+ logoutUser();
+ }
+}
+
+#endif /* USE_AUTO_LOGOUT */
+
+#ifndef USE_OLD_EVENT_LOOP
+
+/* subtract timer t2 from t1, return result in t3. Result is not allowed to
+ go negative, set to zero if result underflows */
+
+static
+void
+sub_timers(struct timeval *t1, struct timeval *t2, struct timeval *t3)
+{
+ struct timeval tmp;
+ int borrow = 0;
+
+ if (t1->tv_usec < t2->tv_usec) {
+ borrow++;
+ tmp.tv_usec = (1000000 + t1->tv_usec) - t2->tv_usec;
+ } else {
+ tmp.tv_usec = t1->tv_usec - t2->tv_usec;
+ }
+
+ /* Be careful here, timeval fields may be unsigned. To avoid
+ underflow in an unsigned int, add the borrow value to the
+ subtrahend for the relational test. Same effect, but avoids the
+ possibility of a negative intermediate value. */
+ if (t1->tv_sec < (t2->tv_sec + borrow)) {
+ tmp.tv_usec = tmp.tv_sec = 0;
+ } else {
+ tmp.tv_sec = t1->tv_sec - t2->tv_sec - borrow;
+ }
+
+ *t3 = tmp;
+}
+
+/* return 0 on event recieved, -1 on timeout */
+static int
+runMainLoop(int maxtime, int iconscreen)
+{
+ static int lastdelay = -1, lastmaxtime = -1;
+ int fd = ConnectionNumber(dsp), r;
+ struct timeval sleep_time, first, repeat;
+ struct timeval elapsed, tmp;
+ fd_set reads;
+ unsigned long started;
+
+ first.tv_sec = first.tv_usec = 0;
+ elapsed.tv_sec = elapsed.tv_usec = 0;
+ repeat.tv_sec = delay / 1000000;
+ repeat.tv_usec = delay % 1000000;
+
+ started = seconds();
+
+ for (;;) {
+ if (delay != lastdelay || maxtime != lastmaxtime || onepause) {
+ if (!delay || (maxtime && delay / 1000000 > maxtime)) {
+ repeat.tv_sec = maxtime;
+ repeat.tv_usec = 0;
+ } else {
+ repeat.tv_sec = delay / 1000000;
+ repeat.tv_usec = delay % 1000000;
+ }
+ if (onepause) {
+ first.tv_sec = onepause / 1000000;
+ first.tv_usec = onepause % 1000000;
+ } else {
+ first = repeat;
+ }
+ lastdelay = delay;
+ lastmaxtime = maxtime;
+ onepause = 0;
+ sleep_time = first;
+ } else {
+ sleep_time = repeat;
+ }
+
+ /* subtract time spent doing last loop iteration */
+ sub_timers(&sleep_time, &elapsed, &sleep_time);
+
+ FD_ZERO(&reads);
+ FD_SET(fd, &reads);
+
+#if DCE_PASSWD
+ r = _select_sys(fd + 1,
+ (fd_set *) & reads, (fd_set *) NULL, (fd_set *) NULL,
+ (struct timeval *) &sleep_time);
+#else
+#if defined(__cplusplus) || defined(c_plusplus)
+ r = select(fd + 1,
+ (fd_set *) & reads, (fd_set *) NULL, (fd_set *) NULL,
+ (struct timeval *) &sleep_time);
+#else
+ r = select(fd + 1,
+ (void *) &reads, (void *) NULL, (void *) NULL,
+ (struct timeval *) &sleep_time);
+#endif
+#endif
+
+ if (r == 1)
+ return 0;
+ if (r > 0 || (r == -1 && errno != EINTR))
+ (void) fprintf(stderr,
+ "Unexpected select() return value: %d (errno=%d)\n", r, errno);
+
+ (void) gettimeofday(&tmp, NULL); /* get time before
+ calling mode proc */
+
+ for (screen = 0; screen < screens; screen++) {
+ Window cbwin;
+ Bool iconic;
+ ModeInfo *mi;
+
+ if (screen == iconscreen) {
+ cbwin = icon[screen];
+ iconic = True;
+ } else {
+ cbwin = win[screen];
+ iconic = False;
+ }
+ if (cbwin != None) {
+ mi = mode_info(screen, cbwin, iconic);
+ call_callback_hook((LockStruct *) NULL, mi);
+ if (MI_PAUSE(mi) > onepause) /* Better on multiscreens to pause */
+ onepause = MI_PAUSE(mi);
+ }
+ }
+
+ XSync(dsp, False);
+
+ /* check for events received during the XSync() */
+ if (QLength(dsp)) {
+ return 0;
+ }
+ if (maxtime && ((int) (seconds() - started) > maxtime)) {
+ return -1;
+ }
+ /* if (mindelay) usleep(mindelay); */
+
+ /* get the time now, figure how long it took */
+ (void) gettimeofday(&elapsed, NULL);
+ sub_timers(&elapsed, &tmp, &elapsed);
+ }
+}
+
+#endif /* !USE_OLD_EVENT_LOOP */
+
+static int
+ReadXString(char *s, int slen)
+{
+ XEvent event;
+ char keystr[20];
+ char c;
+ int i;
+ int bp;
+ int len;
+ int thisscreen = screen;
+ char pwbuf[PASSLENGTH];
+ int first_key = 1;
+
+ for (screen = 0; screen < screens; screen++)
+ if (thisscreen == screen) {
+ call_init_hook((LockStruct *) NULL,
+ mode_info(screen, icon[screen], True));
+ } else {
+ call_init_hook((LockStruct *) NULL,
+ mode_info(screen, win[screen], False));
+ }
+ statusUpdate(True, thisscreen);
+ bp = 0;
+ *s = 0;
+
+ for (;;) {
+ unsigned long lasteventtime = seconds();
+
+ while (!XPending(dsp)) {
+#ifdef USE_OLD_EVENT_LOOP
+ for (screen = 0; screen < screens; screen++)
+ if (thisscreen == screen)
+ call_callback_hook(NULL, mode_info(screen,
+ icon[screen], True));
+ else
+ call_callback_hook(NULL, mode_info(screen,
+ win[screen], False));
+ statusUpdate(False, thisscreen);
+ XSync(dsp, False);
+ (void) usleep(onepause ? onepause : delay);
+ onepause = 0;
+#else
+ statusUpdate(False, thisscreen);
+ if (runMainLoop(MIN(timeout, 5), thisscreen) == 0)
+ break;
+#endif
+
+ if (timeout < (int) (seconds() - lasteventtime)) {
+ screen = thisscreen;
+ return 1;
+ }
+ }
+
+ screen = thisscreen;
+ XNextEvent(dsp, &event);
+
+ /*
+ * This event handling code should be unified with the
+ * similar code in justDisplay().
+ */
+ switch (event.type) {
+ case KeyPress:
+ len = XLookupString((XKeyEvent *) & event, keystr, 20, NULL, NULL);
+ for (i = 0; i < len; i++) {
+ c = keystr[i];
+ switch (c) {
+ case 8: /* ^H */
+ case 127: /* DEL */
+ if (bp > 0)
+ bp--;
+ break;
+ case 10: /* ^J */
+ case 13: /* ^M */
+ if (first_key && usefirst)
+ break;
+ s[bp] = '\0';
+ return 0;
+ case 21: /* ^U */
+ bp = 0;
+ break;
+ default:
+ s[bp] = c;
+ if (bp < slen - 1)
+ bp++;
+ else
+ XSync(dsp, True); /* flush input buffer */
+ }
+ }
+ XSetForeground(dsp, Scr[screen].gc, bgcol[screen]);
+ if (echokeys) {
+ (void) memset((char *) pwbuf, '?', slen);
+ XFillRectangle(dsp, win[screen], Scr[screen].gc,
+ passx, passy - font->ascent,
+ XTextWidth(font, pwbuf, slen),
+ font->ascent + font->descent);
+ XDrawString(dsp, win[screen], textgc[screen],
+ passx, passy, pwbuf, bp);
+ }
+ /* eat all events if there are more than
+ enough pending... this keeps the Xlib event
+ buffer from growing larger than all
+ available memory and crashing xlock. */
+ if (XPending(dsp) > 100) { /* 100 is arbitrarily
+ big enough */
+ register Status status;
+
+ do {
+ status = XCheckMaskEvent(dsp,
+ KeyPressMask | KeyReleaseMask, &event);
+ } while (status);
+ XBell(dsp, 100);
+ }
+ break;
+
+#ifdef USE_MOUSE_MOTION
+ case MotionNotify:
+#endif
+ case ButtonPress:
+ if (((XButtonEvent *) & event)->window == icon[screen]) {
+ return 1;
+ }
+#ifdef USE_BUTTON_LOGOUT
+ if (((XButtonEvent *) & event)->window == button[screen]) {
+ XSetFunction(dsp, Scr[screen].gc, GXxor);
+ XSetForeground(dsp, Scr[screen].gc, fgcol[screen]);
+ XFillRectangle(dsp, button[screen], Scr[screen].gc,
+ 0, 0, 500, 100);
+ XSync(dsp, False);
+ tried_logout = 1;
+ logoutUser();
+ XSetFunction(dsp, Scr[screen].gc, GXcopy);
+ }
+#endif
+ break;
+
+ case Expose:
+ if (event.xexpose.count != 0)
+ break;
+ /* fall through on last expose event */
+ case VisibilityNotify:
+ /* next line for -geometry */
+ if (event.xvisibility.state != VisibilityUnobscured) {
+ /* window was restacked or exposed */
+ if (!debug && !inwindow)
+ XRaiseWindow(dsp, event.xvisibility.window);
+ call_refresh_hook((LockStruct *) NULL,
+ mode_info(screen, win[screen], False));
+ s[0] = '\0';
+ return 1;
+ }
+ break;
+ case ConfigureNotify:
+ /* next line for -geometry */
+ if (!fullscreen)
+ break;
+ /* window config changed */
+ if (!debug && !inwindow)
+ XRaiseWindow(dsp, event.xconfigure.window);
+ if (window_size_changed(screen, win[screen])) {
+ call_init_hook((LockStruct *) NULL,
+ mode_info(screen, win[screen], False));
+ }
+ s[0] = '\0';
+ return 1;
+ case KeymapNotify:
+ case KeyRelease:
+ case ButtonRelease:
+#ifndef USE_MOUSE_MOTION
+ case MotionNotify:
+#endif
+ case LeaveNotify:
+ case EnterNotify:
+ case NoExpose:
+ case CirculateNotify:
+ case DestroyNotify:
+ case GravityNotify:
+ case MapNotify:
+ case ReparentNotify:
+ case UnmapNotify:
+ break;
+
+ default:
+ (void) fprintf(stderr, "%s: unexpected event: %d\n",
+ ProgramName, event.type);
+ break;
+ }
+ first_key = 0;
+ }
+}
+
+static int
+getPassword(void)
+{
+ XWindowAttributes xgwa;
+ int x, y, left, done, remy;
+ char buffer[PASSLENGTH];
+ char **msgp;
+
+ (void) nice(0);
+ if (!fullscreen)
+ XConfigureWindow(dsp, win[screen], sizeconfiguremask,
+ &fullsizeconfigure);
+
+
+ (void) XGetWindowAttributes(dsp, win[screen], &xgwa);
+
+ XChangeGrabbedCursor(XCreateFontCursor(dsp, XC_left_ptr));
+
+ XSetForeground(dsp, Scr[screen].gc, bgcol[screen]);
+ XFillRectangle(dsp, win[screen], Scr[screen].gc,
+ 0, 0, xgwa.width, xgwa.height);
+
+ XMapWindow(dsp, icon[screen]);
+ XRaiseWindow(dsp, icon[screen]);
+
+ x = left = iconx[screen] + iconwidth + font->max_bounds.width;
+ y = icony[screen] + font->ascent;
+
+ putText(win[screen], textgc[screen], text_name, True, left, &x, &y);
+ putText(win[screen], textgc[screen], user, False, left, &x, &y);
+ putText(win[screen], textgc[screen], "\n", False, left, &x, &y);
+
+ putText(win[screen], textgc[screen], text_pass, True, left, &x, &y);
+ putText(win[screen], textgc[screen], " ", False, left, &x, &y);
+
+ passx = x;
+ passy = y;
+
+ y += font->ascent + font->descent + 2;
+ if (y < icony[screen] + iconheight + font->ascent + 2)
+ y = icony[screen] + iconheight + font->ascent + 2;
+ x = left = iconx[screen];
+ putText(win[screen], textgc[screen], text_info, False, left, &x, &y);
+ putText(win[screen], textgc[screen], "\n", False, left, &x, &y);
+
+ timex = x;
+ timey = y;
+
+#ifdef USE_AUTO_LOGOUT
+ if (logoutAuto) {
+ y += font->ascent + font->descent + 2;
+ }
+#endif
+#ifdef USE_BUTTON_LOGOUT
+ if (enable_button) {
+ y += font->ascent + font->descent + 2;
+ }
+#endif
+ if (timeelapsed) {
+ y += font->ascent + font->descent + 2;
+ }
+ remy = y;
+
+ putText(win[screen], textgc[screen], "\n", False, left, &x, &y);
+
+ y = msgy[screen];
+ if (*message) {
+ for (msgp = message; *msgp; ++msgp) {
+ y += msgfont->ascent + msgfont->descent + 2;
+ XDrawString(dsp, win[screen], msgtextgc[screen],
+ msgx[screen], y, *msgp, strlen(*msgp));
+ }
+ }
+ XFlush(dsp);
+
+ y = remy;
+
+ done = False;
+ while (!done) {
+#ifdef USE_SOUND
+ if (sound && !got_invalid) {
+ play_sound(infosound);
+ }
+ got_invalid = 0;
+#endif
+ if (ReadXString(buffer, PASSLENGTH))
+ break;
+
+ XSetForeground(dsp, Scr[screen].gc, bgcol[screen]);
+
+ XFillRectangle(dsp, win[screen], Scr[screen].gc,
+ iconx[screen], y - font->ascent,
+ XTextWidth(font, text_invalid, strlen(text_invalid)),
+ font->ascent + font->descent + 2);
+
+ XDrawString(dsp, win[screen], textgc[screen],
+ iconx[screen], y, text_valid, strlen(text_valid));
+ XFlush(dsp);
+
+ done = checkPasswd(buffer);
+
+ if (!done && !*buffer) {
+ /* just hit return, and it was not his password */
+ break;
+#if defined( HAVE_SYSLOG_H ) && defined( USE_SYSLOG )
+ } else if (!done) {
+ /* bad password... log it... */
+ (void) printf("failed unlock attempt on user %s\n", user);
+ syslog(SYSLOG_NOTICE, "%s: failed unlock attempt on user %s\n",
+ ProgramName, user);
+#endif
+ }
+ /* clear plaintext password so you can not grunge around
+ /dev/kmem */
+ (void) memset((char *) buffer, 0, sizeof (buffer));
+
+ if (done) {
+#ifdef USE_SOUND
+ if (sound)
+ play_sound(validsound);
+#endif
+ if (!fullscreen)
+ XConfigureWindow(dsp, win[screen], sizeconfiguremask,
+ &minisizeconfigure);
+ return 0;
+ } else {
+ XSync(dsp, True); /* flush input buffer */
+ (void) sleep(1);
+ XFillRectangle(dsp, win[screen], Scr[screen].gc,
+ iconx[screen], y - font->ascent,
+ XTextWidth(font, text_valid, strlen(text_valid)),
+ font->ascent + font->descent + 2);
+ XDrawString(dsp, win[screen], textgc[screen],
+ iconx[screen], y, text_invalid, strlen(text_invalid));
+ if (echokeys) /* erase old echo */
+ XFillRectangle(dsp, win[screen], Scr[screen].gc,
+ passx, passy - font->ascent,
+ xgwa.width - passx,
+ font->ascent + font->descent);
+#ifdef USE_SOUND
+ if (sound)
+ play_sound(invalidsound);
+ got_invalid = 1;
+#endif
+ }
+ }
+ XChangeGrabbedCursor(mycursor);
+ XUnmapWindow(dsp, icon[screen]);
+#ifdef USE_BUTTON_LOGOUT
+ XUnmapWindow(dsp, button[screen]);
+#endif
+ if (!fullscreen)
+ XConfigureWindow(dsp, win[screen], sizeconfiguremask,
+ &minisizeconfigure);
+ (void) nice(nicelevel);
+ return 1;
+}
+
+static int
+event_screen(Display * display, Window event_win)
+{
+ int i;
+
+ for (i = 0; i < screens; i++) {
+ if (event_win == RootWindow(display, i)) {
+ return (i);
+ }
+ }
+ return (0);
+}
+
+static int
+justDisplay(void)
+{
+ int timetodie = False;
+ int not_done = True;
+ XEvent event;
+
+ for (screen = 0; screen < screens; screen++) {
+ call_init_hook((LockStruct *) NULL, mode_info(screen, win[screen], False));
+ }
+
+ while (not_done) {
+ while (!XPending(dsp)) {
+#ifdef USE_OLD_EVENT_LOOP
+ (void) usleep(onepause ? onepause : delay);
+ onepause = 0;
+ for (screen = 0; screen < screens; screen++)
+ call_callback_hook((LockStruct *) NULL,
+ mode_info(screen, win[screen], False));
+#ifdef USE_AUTO_LOGOUT
+ checkLogout();
+#endif
+ XSync(dsp, False);
+#else /* !USE_OLD_EVENT_LOOP */
+#ifdef USE_AUTO_LOGOUT
+ if (runMainLoop(30, -1) == 0)
+ break;
+ checkLogout();
+#else
+ (void) runMainLoop(0, -1);
+#endif
+#endif /* !USE_OLD_EVENT_LOOP */
+ }
+ XNextEvent(dsp, &event);
+
+ /*
+ * This event handling code should be unified with the
+ * similar code in ReadXString().
+ */
+ switch (event.type) {
+ case Expose:
+ if (event.xexpose.count != 0) {
+ break;
+ }
+ /* fall through on last expose event of the series */
+
+ case VisibilityNotify:
+ if (!debug && !inwindow) {
+ XRaiseWindow(dsp, event.xany.window);
+ }
+ for (screen = 0; screen < screens; screen++) {
+ call_refresh_hook((LockStruct *) NULL,
+ mode_info(screen, win[screen], False));
+ }
+ break;
+
+ case ConfigureNotify:
+ if (!debug && !inwindow)
+ XRaiseWindow(dsp, event.xconfigure.window);
+ for (screen = 0; screen < screens; screen++) {
+ if (window_size_changed(screen, win[screen])) {
+ call_init_hook((LockStruct *) NULL,
+ mode_info(screen, win[screen], False));
+ }
+ }
+ break;
+
+ case ButtonPress:
+ if (event.xbutton.button == Button2) {
+ /* call change hook only for clicked window? */
+ for (screen = 0; screen < screens; screen++) {
+ call_change_hook((LockStruct *) NULL,
+ mode_info(screen, win[screen],
+ False));
+ }
+ } else {
+ screen = event_screen(dsp, event.xbutton.root);
+ not_done = False;
+ }
+ break;
+
+#ifdef USE_MOUSE_MOTION
+ case MotionNotify:
+ screen = event_screen(dsp, event.xmotion.root);
+ not_done = False;
+ break;
+#endif
+
+ case KeyPress:
+ screen = event_screen(dsp, event.xkey.root);
+ not_done = False;
+ break;
+ }
+
+ if (!nolock && lockdelay &&
+ (lockdelay <= (int) (seconds() - start_time))) {
+ timetodie = True;
+ not_done = False;
+ }
+ }
+
+ /* KLUDGE SO TVTWM AND VROOT WILL NOT MAKE XLOCK DIE */
+ if (screen >= screens)
+ screen = 0;
+
+ lockdelay = False;
+ if (usefirst)
+ XPutBackEvent(dsp, &event);
+ return timetodie;
+}
+
+
+static void
+sigcatch(int signum)
+{
+ ModeInfo *mi = mode_info(0, win[0], False);
+ char *name = (mi == NULL) ? "unknown" : MI_NAME(mi);
+ char *buf;
+
+
+ finish();
+ buf = (char *) malloc(strlen(ProgramName) + strlen(name) + 160);
+ (void) sprintf(buf,
+ "Access control list restored.\n%s: caught signal %d while running %s mode (uid %ld).\n",
+ ProgramName, signum, name, (long) getuid());
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+}
+
+static void
+lockDisplay(Bool do_display)
+{
+#if defined( HAVE_SYSLOG_H ) && defined( USE_SYSLOG )
+ syslogStart();
+#endif
+#ifdef USE_SOUND
+ if (sound && !inwindow && !inroot)
+ play_sound(locksound);
+#endif
+ if (!allowaccess) {
+#if defined( SYSV ) || defined( SVR4 )
+ sigset_t oldsigmask;
+ sigset_t newsigmask;
+
+ (void) sigemptyset(&newsigmask);
+ (void) sigaddset(&newsigmask, SIGHUP);
+ (void) sigaddset(&newsigmask, SIGINT);
+ (void) sigaddset(&newsigmask, SIGQUIT);
+ (void) sigaddset(&newsigmask, SIGTERM);
+ (void) sigprocmask(SIG_BLOCK, &newsigmask, &oldsigmask);
+#else
+ int oldsigmask;
+
+#ifndef VMS
+ extern int sigblock(int);
+ extern int sigsetmask(int);
+
+ oldsigmask = sigblock(sigmask(SIGHUP) |
+ sigmask(SIGINT) |
+ sigmask(SIGQUIT) |
+ sigmask(SIGTERM));
+#endif
+#endif
+
+ (void) signal(SIGHUP, (void (*)(int)) sigcatch);
+ (void) signal(SIGINT, (void (*)(int)) sigcatch);
+ (void) signal(SIGQUIT, (void (*)(int)) sigcatch);
+ (void) signal(SIGTERM, (void (*)(int)) sigcatch);
+ /* we should trap ALL signals, especially the deadly ones */
+ (void) signal(SIGSEGV, (void (*)(int)) sigcatch);
+ (void) signal(SIGBUS, (void (*)(int)) sigcatch);
+ (void) signal(SIGFPE, (void (*)(int)) sigcatch);
+
+ if (grabserver)
+ XGrabServer(dsp);
+ XGrabHosts(dsp);
+
+#if defined( SYSV ) || defined( SVR4 )
+ (void) sigprocmask(SIG_SETMASK, &oldsigmask, &oldsigmask);
+#else
+ (void) sigsetmask(oldsigmask);
+#endif
+ }
+#if defined( __hpux ) || defined( __apollo )
+ XHPDisableReset(dsp);
+#endif
+ do {
+ if (do_display)
+ (void) justDisplay();
+ else
+ do_display = True;
+ } while (getPassword());
+#if defined( __hpux ) || defined( __apollo )
+ XHPEnableReset(dsp);
+#endif
+}
+
+static void
+read_message()
+{
+ FILE *msgf = NULL;
+ char buf[121];
+ char *home = getenv("HOME");
+ char *buffer;
+ int i, j, cr;
+
+ if (!home)
+ home = "";
+
+#if ( __VMS_VER >= 70000000 )
+ buffer = (char *) malloc(255);
+
+#else
+ buffer = (char *) malloc(strlen(home) + 32);
+
+#endif
+
+#ifdef VMS
+ (void) sprintf(buffer, "%s%s", home, ".xlockmessage");
+#else
+ (void) sprintf(buffer, "%s/%s", home, ".xlockmessage");
+#endif
+ msgf = my_fopen(buffer, "r");
+ if (msgf == NULL) {
+#ifdef VMS
+ (void) sprintf(buffer, "%s%s", home, ".plan");
+#else
+ (void) sprintf(buffer, "%s/%s", home, ".plan");
+#endif
+ msgf = my_fopen(buffer, "r");
+ }
+ if (msgf == NULL) {
+#ifndef VMS
+ (void) sprintf(buffer, "%s/%s", home, ".signature");
+#else
+#if ( __VMS_VER >= 70000000 )
+/* Get signature file for VMS 7.0 and higher */
+ char *buffer1 = (char *) malloc(256);
+ unsigned int ival;
+ unsigned long int mail_context = 0;
+ unsigned short int buflen, buflen1;
+ struct itmlst_3 item[2], itm_d[1];
+
+ itm_d[0].buflen = 0;
+ itm_d[0].itmcode = 0;
+ item[0].buflen = 255;
+ item[0].itmcode = MAIL$_USER_SIGFILE;
+ item[0].bufadr = buffer1;
+ item[0].retlen = &buflen1;
+ item[1].buflen = 255;
+ item[1].itmcode = MAIL$_USER_FULL_DIRECTORY;
+ item[1].bufadr = buffer;
+ item[1].retlen = &buflen;
+ item[2].buflen = 0;
+ item[2].itmcode = 0;
+ ival = mail$user_begin(&mail_context, itm_d, item);
+ (void) mail$user_end(&mail_context, itm_d, itm_d);
+ (void) strncat(buffer, buffer1, buflen1);
+ (void) free((void *) buffer1);
+#else
+ (void) sprintf(buffer, "%s%s", home, ".signature");
+#endif
+#endif
+ msgf = my_fopen(buffer, "r");
+ }
+ if (msgf != NULL) {
+ for (i = 0; i < MESSAGELINES; i++) {
+ if (fgets(buf, 120, msgf)) {
+ cr = strlen(buf) - 1;
+ if (buf[cr] == '\n') {
+ buf[cr] = '\0';
+ }
+ /* this expands tabs to 8 spaces */
+ for (j = 0; j < cr; j++) {
+ if (buf[j] == '\t') {
+ int k, tab = 8 - (j % 8);
+
+ for (k = 120 - tab; k > j; k--) {
+ buf[k + tab - 1] = buf[k];
+ }
+ for (k = j; k < j + tab; k++) {
+ buf[k] = ' ';
+ }
+ cr += tab;
+ if (cr > 120)
+ cr = 120;
+ }
+ }
+ buf[cr] = '\0';
+
+ message[i] = (char *) malloc(strlen(buf) + 1);
+ (void) strcpy(message[i], buf);
+ }
+ }
+ message[i] = NULL;
+ (void) fclose(msgf);
+ } else {
+ message[0] = NULL;
+ }
+ (void) free((void *) buffer);
+ buffer = NULL;
+}
+
+int
+main(int argc, char **argv)
+{
+ XSetWindowAttributes xswa;
+ XGCValues xgcv;
+ XColor nullcolor;
+ char **msgp;
+ char *buf;
+ int tmp;
+ uid_t ruid;
+
+#if ultrix
+ extern gid_t rgid;
+
+#else
+ gid_t rgid;
+
+#endif
+#if defined( HAVE_SETEUID ) || defined( HAVE_SETREUID )
+ uid_t euid;
+
+#if ultrix
+ extern gid_t egid;
+
+#else
+ gid_t egid;
+
+#endif
+#endif
+
+#ifdef OSF1_ENH_SEC
+ set_auth_parameters(argc, argv);
+#endif
+
+ ruid = getuid();
+ rgid = getgid();
+#ifdef HAVE_SETEUID
+ /* save effective uid and gid for later */
+ euid = geteuid();
+ egid = getegid();
+
+ /* revoke root privs temporarily, to get the correct .Xauthority */
+ (void) setegid(rgid);
+ (void) seteuid(ruid);
+#else
+#ifdef HAVE_SETREUID
+ /* save effective uid and gid for later */
+ euid = geteuid();
+ egid = getegid();
+
+ /* revoke root privs temporarily, to get the correct .Xauthority */
+ (void) setregid(egid, rgid);
+ (void) setreuid(euid, ruid);
+
+#endif
+#endif
+
+ ProgramName = strrchr(argv[0], '/');
+ if (ProgramName)
+ ProgramName++;
+ else
+ ProgramName = argv[0];
+
+ start_time = seconds();
+ ProgramPID = getpid(); /* for memcheck.c not supplied */
+#if 1
+ SRAND((long) start_time); /* random mode needs the seed set. */
+#else
+ SRAND((long) ProgramPID);
+#endif
+
+ getResources(argc, argv);
+
+#ifdef HAVE_SETEUID
+ /* become root to get the password */
+ (void) setegid(egid);
+ (void) seteuid(euid);
+#else
+#ifdef HAVE_SETREUID
+ /* become root to get the password */
+ (void) setregid(rgid, egid);
+ (void) setreuid(ruid, euid);
+
+#endif
+#endif
+
+ initPasswd();
+
+/* revoke root privs, if there were any */
+#ifdef ultrix
+/*-
+ * Potential security problem on ultrix
+ * Here's the problem. Later on you need setgid to a root group to
+ * use the crypt program. I do not want to keep the password in memory.
+ * That means other parts will be running setgid as well.
+ */
+
+#if 1 /* Change 1 to 0 */
+ UNTESTED CODE, COMMENT OUT AND SEE IF IT WORKS, PLEASE GET BACK TO ME
+#endif
+
+#ifdef HAVE_SETEUID
+ /* Lets try to dampen it a bit */
+ (void) setegid(rgid);
+
+#else
+#ifdef HAVE_SETREUID
+ (void) setregid(egid, rgid);
+
+#else
+ (void) setgid(rgid); /* Forget it */
+
+#endif
+#endif
+#else
+ (void) setgid(rgid);
+#endif
+ (void) setuid(ruid);
+
+ checkResources();
+
+ font = XLoadQueryFont(dsp, fontname);
+ if (font == NULL) {
+ (void) fprintf(stderr, "%s: can not find font: %s, using %s...\n",
+ ProgramName, fontname, FALLBACK_FONTNAME);
+ font = XLoadQueryFont(dsp, FALLBACK_FONTNAME);
+ if (font == NULL) {
+ buf = (char *) malloc(strlen(ProgramName) +
+ strlen(FALLBACK_FONTNAME) + 80);
+ (void) sprintf(buf,
+ "%s: can not even find %s!!!\n", ProgramName, FALLBACK_FONTNAME);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+ } {
+ int flags, x, y;
+ unsigned int w, h;
+
+ if (*icongeometry == '\0') {
+ iconwidth = DEF_ICONW;
+ iconheight = DEF_ICONH;
+ } else {
+ flags = XParseGeometry(icongeometry, &x, &y, &w, &h);
+ iconwidth = flags & WidthValue ? w : DEF_ICONW;
+ iconheight = flags & HeightValue ? h : DEF_ICONH;
+ if (iconwidth < MINICONW)
+ iconwidth = MINICONW;
+ else if (iconwidth > MAXICONW)
+ iconwidth = MAXICONW;
+ if (iconheight < MINICONH)
+ iconheight = MINICONH;
+ else if (iconheight > MAXICONH)
+ iconheight = MAXICONH;
+ }
+ if (*geometry == '\0') {
+ fullscreen = True;
+ } else {
+ flags = XParseGeometry(geometry, &x, &y, &w, &h);
+ if (w < MINICONW)
+ w = MINICONW;
+ if (h < MINICONH)
+ h = MINICONH;
+ minisizeconfigure.x = flags & XValue ? x : 0;
+ minisizeconfigure.y = flags & YValue ? y : 0;
+ minisizeconfigure.width = flags & WidthValue ? w : iconwidth;
+ minisizeconfigure.height = flags & HeightValue ? h : iconheight;
+ }
+ }
+
+ msgfont = XLoadQueryFont(dsp, messagefont);
+ if (msgfont == NULL) {
+ (void) fprintf(stderr, "%s: can't find font: %s, using %s...\n",
+ ProgramName, messagefont, FALLBACK_FONTNAME);
+ msgfont = XLoadQueryFont(dsp, FALLBACK_FONTNAME);
+ if (msgfont == NULL) {
+ buf = (char *) malloc(strlen(ProgramName) +
+ strlen(FALLBACK_FONTNAME) + 80);
+ (void) sprintf(buf,
+ "%s: can not even find %s!!!\n", ProgramName, FALLBACK_FONTNAME);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+ }
+ read_message();
+
+ screens = ScreenCount(dsp);
+
+#ifdef FORCESINGLE
+ screens = 1;
+#endif
+ if (screens > MAXSCREENS) {
+ buf = (char *) malloc(strlen(ProgramName) + 80);
+ (void) sprintf(buf,
+ "%s: can only support %d screens.\n", ProgramName, MAXSCREENS);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+#ifdef USE_DTSAVER
+ /* The CDE Session Manager provides the windows for the screen saver
+ to draw into. */
+ if (dtsaver) {
+ Window *saver_wins;
+ int num_wins;
+ int this_win;
+ int this_screen;
+ XWindowAttributes xgwa;
+
+ for (this_screen = 0; this_screen < screens; this_screen++)
+ win[this_screen] = None;
+
+ /* Get the list of requested windows */
+ if (!DtSaverGetWindows(dsp, &saver_wins, &num_wins)) {
+ buf = (char *) malloc(strlen(ProgramName) + 80);
+ (void) sprintf(buf,
+ "%s: Unable to get screen saver info.\n", ProgramName);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+ for (this_win = 0; this_win < num_wins; this_win++) {
+ (void) XGetWindowAttributes(dsp, saver_wins[this_win], &xgwa);
+ this_screen = XScreenNumberOfScreen(xgwa.screen);
+ if (win[this_screen] != None) {
+ buf = (char *) malloc(strlen(ProgramName) + 80);
+ (void) sprintf(buf,
+ "%s: Two windows on screen %d\n", ProgramName, this_screen);
+ error(buf);
+ (void) free((void *) buf); /* Should never get here */
+ }
+ win[this_screen] = saver_wins[this_win];
+ }
+
+ /* Reduce to the last screen requested */
+ for (this_screen = screens - 1; this_screen >= 0; this_screen--) {
+ if (win[this_screen] != None)
+ break;
+ screens--;
+ }
+ }
+#endif
+
+ for (screen = 0; screen < screens; screen++) {
+ Screen *scr = ScreenOfDisplay(dsp, screen);
+ Colormap cmap = DefaultColormapOfScreen(scr);
+
+ root[screen] = RootWindowOfScreen(scr);
+ fgcol[screen] = allocPixel(dsp, cmap, foreground, "Black");
+ bgcol[screen] = allocPixel(dsp, cmap, background, "White");
+ if (use3d) {
+ XColor C;
+
+#ifdef CALCULATE_BOTH
+ XColor C2;
+
+#endif
+ unsigned long planemasks[10];
+ unsigned long pixels[10];
+
+ if (!install || !XAllocColorCells(dsp, cmap, False, planemasks, 2, pixels,
+ 1)) {
+ /* did not get the needed colours. Use normal 3d view without */
+ /* color overlapping */
+ nonecol[screen] = allocPixel(dsp, cmap, none3d, DEF_NONE3D);
+ rightcol[screen] = allocPixel(dsp, cmap, right3d, DEF_RIGHT3D);
+ leftcol[screen] = allocPixel(dsp, cmap, left3d, DEF_LEFT3D);
+ bothcol[screen] = allocPixel(dsp, cmap, both3d, DEF_BOTH3D);
+
+ } else {
+ /*
+ * attention: the mixture of colours will only be guaranteed, if
+ * the right black is used. The problems with BlackPixel would
+ * be that BlackPixel | leftcol need not be equal to leftcol. The
+ * same holds for rightcol (of course). That's why the right black
+ * (black3dcol) must be used when GXor is used as put function.
+ * I have allocated four colors above:
+ * pixels[0], - 3d black
+ * pixels[0] | planemasks[0], - 3d right eye color
+ * pixels[0] | planemasks[1], - 3d left eye color
+ * pixels[0] | planemasks[0] | planemasks[1] - 3d white
+ */
+
+ if (!XParseColor(dsp, cmap, none3d, &C))
+ XParseColor(dsp, cmap, DEF_NONE3D, &C);
+ nonecol[screen] = C.pixel = pixels[0];
+ XStoreColor(dsp, cmap, &C);
+
+ if (!XParseColor(dsp, cmap, right3d, &C))
+ XParseColor(dsp, cmap, DEF_RIGHT3D, &C);
+ rightcol[screen] = C.pixel = pixels[0] | planemasks[0];
+ XStoreColor(dsp, cmap, &C);
+
+#ifdef CALCULATE_BOTH
+ C2.red = C.red;
+ C2.green = C.green;
+ C2.blue = C.blue;
+#else
+ if (!XParseColor(dsp, cmap, left3d, &C))
+ XParseColor(dsp, cmap, DEF_LEFT3D, &C);
+#endif
+ leftcol[screen] = C.pixel = pixels[0] | planemasks[1];
+ XStoreColor(dsp, cmap, &C);
+
+#ifdef CALCULATE_BOTH
+ C.red |= C2.red; /* or them together... */
+ C.green |= C2.green;
+ C.blue |= C2.blue;
+#else
+ if (!XParseColor(dsp, cmap, both3d, &C))
+ XParseColor(dsp, cmap, DEF_BOTH3D, &C);
+#endif
+ bothcol[screen] = C.pixel = pixels[0] | planemasks[0] | planemasks[1];
+ XStoreColor(dsp, cmap, &C);
+ }
+
+ }
+ Scr[screen].bgcol = bgcol[screen];
+ Scr[screen].fgcol = fgcol[screen];
+ Scr[screen].nonecol = nonecol[screen];
+ Scr[screen].rightcol = rightcol[screen];
+ Scr[screen].leftcol = leftcol[screen];
+ Scr[screen].bothcol = bothcol[screen];
+ Scr[screen].cmap = None;
+
+ xswa.override_redirect = True;
+ xswa.background_pixel = BlackPixel(dsp, screen);
+ xswa.border_pixel = WhitePixel(dsp, screen);
+ xswa.event_mask = KeyPressMask | ButtonPressMask |
+#ifdef USE_MOUSE_MOTION
+ MotionNotify |
+#endif
+ VisibilityChangeMask | ExposureMask | StructureNotifyMask;
+#define WIDTH (inwindow? WidthOfScreen(scr)/2 : (debug? WidthOfScreen(scr) - 100 : WidthOfScreen(scr)))
+#define HEIGHT (inwindow? HeightOfScreen(scr)/2 : (debug? HeightOfScreen(scr) - 100 : HeightOfScreen(scr)))
+#if defined( USE_GL ) && !defined( MESA )
+#define CWMASK (((debug||inwindow||inroot)? 0 : CWOverrideRedirect) | CWBackPixel | CWBorderPixel | CWColormap | CWEventMask)
+#else
+#define CWMASK (((debug||inwindow||inroot)? 0 : CWOverrideRedirect) | CWBackPixel | CWBorderPixel | CWEventMask)
+#endif
+#ifdef USE_VROOT
+ if (inroot) {
+ win[screen] = root[screen];
+ XChangeWindowAttributes(dsp, win[screen], CWBackPixel, &xswa);
+ /* this gives us these events from the root window */
+ XSelectInput(dsp, win[screen], VisibilityChangeMask | ExposureMask);
+ } else
+#endif
+#ifdef USE_DTSAVER
+ if (!dtsaver)
+#endif
+ {
+#if defined( USE_GL ) && !defined( MESA )
+ XVisualInfo *gotVis;
+
+ if (!(gotVis = getGLVisual(dsp, screen, NULL, 0))) {
+ if (!(gotVis = getGLVisual(dsp, screen, NULL, 1))) {
+ (void) fprintf(stderr, "GL can not render with root visual\n");
+ return (1);
+ }
+ }
+ xswa.colormap = XCreateColormap(dsp, root[screen], gotVis->visual, AllocNone);
+ Scr[screen].cmap = xswa.colormap;
+
+#define XLOCKWIN_DEPTH (gotVis->depth)
+#define XLOCKWIN_VISUAL (gotVis->visual)
+#else
+#define XLOCKWIN_DEPTH CopyFromParent
+#define XLOCKWIN_VISUAL CopyFromParent
+#endif
+
+ if (fullscreen) {
+ win[screen] = XCreateWindow(dsp, root[screen], 0, 0,
+ (unsigned int) WIDTH, (unsigned int) HEIGHT, 0,
+ XLOCKWIN_DEPTH, InputOutput, XLOCKWIN_VISUAL,
+ CWMASK, &xswa);
+ } else {
+ sizeconfiguremask = CWX | CWY | CWWidth | CWHeight;
+ fullsizeconfigure.x = 0;
+ fullsizeconfigure.y = 0;
+ fullsizeconfigure.width = WIDTH;
+ fullsizeconfigure.height = HEIGHT;
+ win[screen] = XCreateWindow(dsp, root[screen],
+ (int) minisizeconfigure.x,
+ (int) minisizeconfigure.y,
+ (unsigned int) minisizeconfigure.width,
+ (unsigned int) minisizeconfigure.height,
+ 0, XLOCKWIN_DEPTH, InputOutput, XLOCKWIN_VISUAL,
+ CWMASK, &xswa);
+ }
+ }
+ if (debug || inwindow) {
+ XWMHints xwmh;
+
+ xwmh.flags = InputHint;
+ xwmh.input = True;
+ XChangeProperty(dsp, win[screen],
+ XA_WM_HINTS, XA_WM_HINTS, 32, PropModeReplace,
+ (unsigned char *) &xwmh, sizeof (xwmh) / sizeof (int));
+ }
+ /*if (mono || CellsOfScreen(scr) <= 2) {
+ Scr[screen].pixels[0] = fgcol[screen];
+ Scr[screen].pixels[1] = bgcol[screen];
+ Scr[screen].npixels = 2;
+ } else */
+ fixColormap(dsp, win[screen], screen, saturation,
+ mono, install, inroot, inwindow, verbose);
+
+ if (debug) {
+ iconx[screen] = (DisplayWidth(dsp, screen) - 100 -
+ MAX(512, XTextWidth(font, text_info, strlen(text_info)))) / 2;
+ icony[screen] = (DisplayHeight(dsp, screen) - 100) / 6;
+ } else {
+ iconx[screen] = (DisplayWidth(dsp, screen) -
+ MAX(512, XTextWidth(font, text_info, strlen(text_info)))) / 2;
+ icony[screen] = DisplayHeight(dsp, screen) / 6;
+ }
+
+
+ msgx[screen] = msgy[screen] = 0;
+ for (msgp = message; *msgp; ++msgp) {
+ tmp = XTextWidth(msgfont, *msgp, strlen(*msgp));
+ if (tmp > msgx[screen])
+ msgx[screen] = tmp;
+ ++msgy[screen];
+ }
+ if (debug) {
+ msgx[screen] = (DisplayWidth(dsp, screen) - 100 - msgx[screen]) / 2;
+ msgy[screen] = DisplayHeight(dsp, screen) - 100 -
+ (msgy[screen] + 4) * (msgfont->ascent + msgfont->descent + 2);
+ } else {
+ msgx[screen] = (DisplayWidth(dsp, screen) - msgx[screen]) / 2;
+ msgy[screen] = DisplayHeight(dsp, screen) -
+ (msgy[screen] + 4) * (msgfont->ascent + msgfont->descent + 2);
+ }
+
+ xswa.border_pixel = WhitePixel(dsp, screen);
+ xswa.background_pixel = BlackPixel(dsp, screen);
+ xswa.event_mask = ButtonPressMask;
+#if defined( USE_GL ) && !defined( MESA )
+#define CIMASK CWBorderPixel | CWBackPixel | CWEventMask | CWColormap
+#else
+#define CIMASK CWBorderPixel | CWBackPixel | CWEventMask
+#endif
+ if (nolock)
+ icon[screen] = None;
+ else
+ icon[screen] = XCreateWindow(dsp, win[screen],
+ iconx[screen], icony[screen],
+ iconwidth, iconheight, 1, CopyFromParent,
+ InputOutput, CopyFromParent,
+ CIMASK, &xswa);
+
+#ifdef USE_BUTTON_LOGOUT
+ {
+ char buf[1024];
+ int w, h;
+
+ (void) sprintf(buf, " %s ", logoutButtonLabel);
+ w = XTextWidth(font, buf, strlen(buf));
+ h = font->ascent + font->descent + 2;
+ button[screen] = XCreateWindow(dsp, win[screen],
+ 0, 0, w, h, 1, CopyFromParent,
+ InputOutput, CopyFromParent,
+ CIMASK, &xswa);
+ }
+#endif
+ XMapWindow(dsp, win[screen]);
+ XRaiseWindow(dsp, win[screen]);
+
+#if 0
+ if (install && cmap != DefaultColormapOfScreen(scr))
+ setColormap(dsp, win[screen], cmap, inwindow);
+#endif
+
+ xgcv.font = font->fid;
+ xgcv.foreground = WhitePixel(dsp, screen);
+ xgcv.background = BlackPixel(dsp, screen);
+ Scr[screen].gc = XCreateGC(dsp, win[screen],
+ GCFont | GCForeground | GCBackground, &xgcv);
+
+ xgcv.foreground = fgcol[screen];
+ xgcv.background = bgcol[screen];
+ textgc[screen] = XCreateGC(dsp, win[screen],
+ GCFont | GCForeground | GCBackground, &xgcv);
+ xgcv.font = msgfont->fid;
+ msgtextgc[screen] = XCreateGC(dsp, win[screen],
+ GCFont | GCForeground | GCBackground, &xgcv);
+ }
+ lockc = XCreateBitmapFromData(dsp, root[0], no_bits, 1, 1);
+ lockm = XCreateBitmapFromData(dsp, root[0], no_bits, 1, 1);
+ mycursor = XCreatePixmapCursor(dsp, lockc, lockm,
+ &nullcolor, &nullcolor, 0, 0);
+ XFreePixmap(dsp, lockc);
+ XFreePixmap(dsp, lockm);
+
+ if (!grabmouse || inwindow || inroot)
+ nolock = 1;
+ else if (!debug)
+ GrabKeyboardAndMouse();
+
+ if (!enablesaver && !nolock) {
+ XGetScreenSaver(dsp, &sstimeout, &ssinterval,
+ &ssblanking, &ssexposures);
+ XResetScreenSaver(dsp); /* make sure not blank now */
+ XSetScreenSaver(dsp, 0, 0, 0, 0); /* disable screen saver */
+ }
+ (void) nice(nicelevel);
+
+ (void) XSetIOErrorHandler(xio_error);
+
+ if (nolock) {
+ (void) justDisplay();
+ } else if (lockdelay) {
+ if (justDisplay()) {
+ lockDisplay(False);
+ } else
+ nolock = 1;
+ } else {
+ lockDisplay(True);
+ }
+ finish();
+#if defined( HAVE_SYSLOG_H ) && defined( USE_SYSLOG )
+ if (!nolock) {
+ syslogStop();
+ closelog();
+ }
+#endif
+
+#ifdef VMS
+ return 1;
+#else
+ return 0;
+#endif
+}
--- /dev/null
+#ifndef __XLOCK_XLOCK_H__
+#define __XLOCK_XLOCK_H__
+
+/*-
+ * @(#)xlock.h 4.00 97/01/01 xlockmore
+ *
+ * xlock.h - external interfaces for new modes and SYSV OS defines.
+ *
+ * Copyright (c) 1991 by Patrick J. Naughton.
+ *
+ * See xlock.c for copying information.
+ *
+ * Revision History:
+ *
+ * Changes maintained by David Bagley <bagleyd@bigfoot.com>
+ * 12-May-95: Added defines for SunOS's Adjunct password file
+ * Dale A. Harris <rodmur@ecst.csuchico.edu>
+ * 18-Nov-94: Modified for QNX 4.2 w/ Metrolink X server from Brian Campbell
+ * <brianc@qnx.com>.
+ * 11-Jul-94: added Bool flag: inwindow, which tells xlock to run in a
+ * window from Greg Bowering <greg@cs.adelaide.edu.au>
+ * 11-Jul-94: patch for Solaris SYR4 from Chris P. Ross <cross@eng.umd.edu>
+ * 28-Jun-94: Reorganized shadow stuff
+ * 24-Jun-94: Reorganized
+ * 22-Jun-94: Modified for VMS
+ * <Anthony.D.Clarke@Support.Hatfield.Raytheon.bae.eurokom.ie>
+ * 17-Jun-94: patched shadow passwords and bcopy and bzero for SYSV from
+ * <reggers@julian.uwo.ca>
+ * 21-Mar-94: patched the patch for AIXV3 and HP from
+ * <R.K.Lloyd@csc.liv.ac.uk>.
+ * 01-Dec-93: added patch for AIXV3 from Tom McConnell
+ * <tmcconne@sedona.intel.com> also added a patch for HP-UX 8.0.
+ *
+ */
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/Xos.h>
+#include <X11/Xresource.h>
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#else /* HAVE_CONFIG_H */
+
+/* THIS MAY SOON BE DEFUNCT, SHOULD WORK NOW THOUGH FOR IMAKE */
+#define inline
+#ifdef AIXV3
+#define HAVE_SYS_SELECT_H 1
+#else
+#define HAVE_SYS_TIME_H 1
+#endif
+#if !defined( __hpux ) && !defined( apollo ) && !defined( VMS )
+#define HAVE_SETEUID
+#endif
+#define HAVE_FCNTL_H 1
+#define HAVE_LIMITS_H 1
+#define HAVE_SYSLOG_H 1
+#define HAVE_GETHOSTNAME 1
+#ifdef VMS
+#if ( __VMS_VER < 70000000 )
+#ifdef USE_XVMSUTILS
+#define HAVE_DIRENT_H 1
+#define HAVE_GETTIMEOFDAY 1
+#else /* !USE_XVMSUTILS */
+#ifndef USE_OLD_EVENT_LOOP
+#define USE_OLD_EVENT_LOOP
+#endif /* USE_OLD_EVENT_LOOP */
+#define HAVE_DIRENT_H 0
+#define HAVE_GETTIMEOFDAY 0
+#endif /* !USE_XVMSUTILS */
+#define HAVE_STRDUP 0
+#else /* __VMS_VER >= 70000000 */
+#define HAVE_DIRENT_H 1
+#define HAVE_GETTIMEOFDAY 1
+#define HAVE_STRDUP 1
+#endif /* __VMS_VER >= 70000000 */
+#else /* !VMS */
+#ifndef SOLARIS2
+#define HAVE_DIRENT_H 1
+#endif /* !SOLARIS2 */
+#define HAVE_UNISTD_H 1
+#define HAVE_MEMORY_H 1
+#define HAVE_GETTIMEOFDAY 1
+#ifdef ultrix
+#define HAVE_STRDUP 0
+#else /* !ultrix */
+#define HAVE_STRDUP 1
+#endif /* !ultrix */
+#endif /* !VMS */
+#endif /* !HAVE_CONF_H */
+
+#ifndef MAXSCREENS
+#define MAXSCREENS 3
+#endif
+#ifndef NUMCOLORS
+#define NUMCOLORS 64
+#endif
+#ifndef MESSAGELINES
+#define MESSAGELINES 40
+#endif
+#define PASSLENGTH 120
+#define FALLBACK_FONTNAME "fixed"
+#ifndef DEF_MFONT
+#define DEF_MFONT "-*-times-*-*-*-*-18-*-*-*-*-*-*-*"
+#endif
+#ifndef DEF_PROGRAM /* Try the -o option ;) */
+#define DEF_PROGRAM "fortune -s"
+#endif
+
+#ifndef DEF_NONE3D
+#define DEF_NONE3D "Black"
+#endif
+#ifndef DEF_RIGHT3D
+#define DEF_RIGHT3D "Red"
+#endif
+#ifndef DEF_LEFT3D
+#define DEF_LEFT3D "Blue"
+#endif
+#ifndef DEF_BOTH3D
+#define DEF_BOTH3D "Magenta"
+#endif
+
+#ifndef DEF_ICONW
+#define DEF_ICONW 64 /* Age old default */
+#endif
+#ifndef DEF_ICONH
+#define DEF_ICONH 64
+#endif
+
+#define MINICONW 1 /* Will not see much */
+#define MINICONH 1
+
+#ifndef MAXICONW
+#define MAXICONW 256 /* Want users to know the screen is locked */
+#endif
+#ifndef MAXICONH
+#define MAXICONH 256 /* by a particular user */
+#endif
+
+#ifndef MIN
+#define MIN(a,b) (((a)<(b))?(a):(b))
+#endif
+
+#ifndef MAX
+#define MAX(a,b) (((a)>(b))?(a):(b))
+#endif
+
+#ifndef ABS
+#define ABS(a) ((a<0)?(-(a)):(a))
+#endif
+
+#include <math.h>
+#ifndef M_E
+#define M_E 2.7182818284590452354
+#endif
+#ifndef M_PI
+#define M_PI 3.14159265358979323846
+#endif
+#ifndef M_PI_2
+#define M_PI_2 1.57079632679489661923
+#endif
+#if VMS
+#include <unixlib.h>
+#endif
+#include <sys/types.h>
+#if 0
+#ifndef uid_t
+#define uid_t int
+#endif
+#ifndef gid_t
+#define gid_t int
+#endif
+#ifndef pid_t
+#define pid_t int
+#endif
+#ifndef size_t
+#define size_t unsigned
+#endif
+#endif
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#if HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#if HAVE_DIRENT_H
+#ifdef USE_XVMSUTILS
+#if 0
+#include "../xvmsutils/unix_types.h"
+#include "../xvmsutils/dirent.h"
+#else
+#include <X11/unix_types.h>
+#include <X11/dirent.h>
+#endif
+#else /* !USE_XVMSUTILS */
+#include <dirent.h>
+#endif /* !USE_XVMSUTILS */
+#else
+#define dirent direct
+#define NAMELEN(dirent) (dirent)->d_namelen
+#if HAVE_SYS_NDIR_H
+#include <sys/ndir.h>
+#endif
+#if HAVE_SYS_DIR_H
+#include <sys/dir.h>
+#endif
+#if HAVE_NDIR_H
+#include <ndir.h>
+#endif
+#endif
+#if defined(_SYSTYPE_SVR4) && !defined(SVR4) /* For SGI */
+#define SVR4
+#endif
+
+#ifndef MAXNAMLEN
+#define MAXNAMLEN 256 /* maximum filename length */
+#endif
+#ifndef DIRBUF
+#define DIRBUF 512 /* buffer size for fs-indep. dirs */
+#endif
+
+typedef struct {
+ GC gc; /* graphics context for animation */
+ int npixels; /* number of valid entries in pixels */
+ Colormap cmap; /* current colormap */
+ unsigned long pixels[NUMCOLORS]; /* pixel values in the colormap */
+ unsigned long bgcol, fgcol; /* background and foreground pixel values */
+ unsigned long rightcol, leftcol; /* 3D color pixel values */
+ unsigned long nonecol, bothcol;
+} perscreen;
+
+#define t_String 0
+#define t_Float 1
+#define t_Int 2
+#define t_Bool 3
+
+typedef struct {
+ caddr_t *var;
+ char *name;
+ char *classname;
+ char *def;
+ int type;
+} argtype;
+
+typedef struct {
+ char *opt;
+ char *desc;
+} OptionStruct;
+
+typedef struct {
+ int numopts;
+ XrmOptionDescRec *opts;
+ int numvarsdesc;
+ argtype *vars;
+ OptionStruct *desc;
+} ModeSpecOpt;
+
+/* this must follow definition of ModeSpecOpt */
+#include "mode.h"
+
+#define IS_XBMDONE 1 /* Only need one mono image */
+#define IS_XBM 2
+#define IS_XBMFILE 3
+#define IS_XPM 4
+#define IS_XPMFILE 5
+#define IS_RASTERFILE 6
+
+/* There is some overlap so it can be made more efficient */
+#define ERASE_IMAGE(d,w,g,x,y,xl,yl,xs,ys) \
+if (yl<y) \
+(y<(yl+ys))?XFillRectangle(d,w,g,xl,yl,xs,y-(yl)): \
+XFillRectangle(d,w,g,xl,yl,xs,ys); \
+else if (yl>y) \
+(y>(yl-(ys)))?XFillRectangle(d,w,g,xl,y+ys,xs,yl-(y)): \
+XFillRectangle(d,w,g,xl,yl,xs,ys); \
+if (xl<x) \
+(x<(xl+xs))?XFillRectangle(d,w,g,xl,yl,x-(xl),ys): \
+XFillRectangle(d,w,g,xl,yl,xs,ys); \
+else if (xl>x) \
+(x>(xl-(xs)))?XFillRectangle(d,w,g,x+xs,yl,xl-(x),ys): \
+XFillRectangle(d,w,g,xl,yl,xs,ys)
+
+extern void getResources(int argc, char **argv);
+extern unsigned long allocPixel(Display * display, Colormap cmap,
+ char *name, char *def);
+extern void getBitmap(XImage ** logo,
+ int width, int height, unsigned char *bits, int *graphics_format);
+extern void destroyBitmap(XImage ** logo, int *graphics_format);
+extern void setColormap(Display * display, Window window, Colormap map,
+ Bool inwindow);
+extern void reserveColors(ModeInfo * mi, Colormap cmap,
+ unsigned long *blackpix, unsigned long *whitepix);
+extern void fixColormap(Display * display, Window window,
+ int screen, float saturation,
+ Bool mono, Bool install, Bool inroot, Bool inwindow, Bool verbose);
+extern int preserveColors(unsigned long fg, unsigned long bg,
+ unsigned long white, unsigned long black);
+extern Bool fixedColors(ModeInfo * mi);
+extern Bool setupColormap(ModeInfo * mi, int *colors, Bool * truecolor,
+ unsigned long *redmask, unsigned long *bluemask, unsigned long *greenmask);
+extern int visualClassFromName(char *name);
+extern char *nameOfVisualClass(int visualclass);
+extern void showVisualInfo(XVisualInfo * Vis);
+
+#ifdef USE_GL
+#include <GL/gl.h>
+#include <GL/glx.h>
+
+extern GLXContext init_GL(ModeInfo * mi);
+
+#endif
+
+extern XPoint hexagonUnit[6];
+extern XPoint triangleUnit[2][3];
+
+extern unsigned long seconds(void);
+extern void finish(void);
+extern void error(char *buf);
+
+extern FILE *my_fopen(char *, char *);
+
+#if (! HAVE_STRDUP )
+extern char *strdup(char *);
+
+#endif
+
+#ifdef LESS_THAN_AIX3_2
+#undef NULL
+#define NULL 0
+#endif /* LESS_THAN_AIX3_2 */
+
+#ifndef SYSLOG_WARNING
+#define SYSLOG_WARNING LOG_WARNING
+#endif
+#ifndef SYSLOG_NOTICE
+#define SYSLOG_NOTICE LOG_NOTICE
+#endif
+#ifndef SYSLOG_INFO
+#define SYSLOG_INFO LOG_INFO
+#endif
+
+#ifdef MATHF
+#define SINF(n) sinf(n)
+#define COSF(n) cosf(n)
+#define FABSF(n) fabsf(n)
+#else
+#define SINF(n) ((float)sin((double)(n)))
+#define COSF(n) ((float)cos((double)(n)))
+#define FABSF(n) ((float)fabs((double)(n)))
+#endif
+
+/*** random number generator ***/
+/* defaults */
+#if HAVE_RAND48
+#define SRAND srand48
+#define LRAND lrand48
+#define MAXRAND (2147483648.0)
+#else /* HAVE_RAND48 */
+#if HAVE_RANDOM
+#define SRAND srand48
+#define LRAND lrand48
+#define MAXRAND (2147483648.0)
+#else /* HAVE_RANDOM */
+#if HAVE_RAND
+#define SRAND srand48
+#define LRAND lrand48
+#ifdef AIXV3
+#define MAXRAND (2147483648.0)
+#else
+#define MAXRAND (32768.0)
+#endif
+#endif /* HAVE_RAND */
+#endif /* HAVE_RANDOM */
+#endif /* HAVE_RAND48 */
+
+#ifndef SRAND
+extern void SetRNG(long int s);
+
+#define SRAND(X) SetRNG((long) X)
+#endif
+#ifndef LRAND
+extern long LongRNG(void);
+
+#define LRAND() LongRNG()
+#endif
+#ifndef MAXRAND
+#define MAXRAND (2147483648.0)
+#endif
+
+#define NRAND(X) ((int)(LRAND()%(X)))
+
+#if (defined( USE_RPLAY ) || defined( USE_NAS ) || defined( USE_VMSPLAY ) || defined( DEF_PLAY ))
+#define USE_SOUND
+#endif
+
+#endif /* __XLOCK_XLOCK_H__ */
--- /dev/null
+.\" @(#)xlock.man 4.00 97/01/01
+.\" Copyright (c) 1991 - Patrick J. Naughton
+.\" xlockmore updates from David A. Bagley
+.TH XLOCK 1 "01 Jan 1997" "X11R6 Contrib"
+.SH NAME
+xlock \- Locks the local X display until a password is entered.
+.sp
+.IX xlock#(1) "" "\fLxlock\fP(1)"
+.SH SYNOPSIS
+.B xlock
+[
+.BI \-help
+]
+[
+.BI \-version
+]
+[
+.BI \-resources
+]
+[
+.BI \-display " displayname"
+]
+[
+.BI \-visual " visualname"
+]
+[
+.BI \-name " resourcename"
+]
+[
+.BI \-mode " modename"
+]
+[
+.BI \-delay " usecs"
+]
+[
+.BI \-batchcount " num"
+]
+[
+.BI \-cycles " num"
+]
+[
+.BI \-saturation " value"
+]
+[
+.BI -/+allowaccess
+]
+[
+.BI -/+nolock
+]
+[
+.BI -/+inwindow
+]
+[
+.BI -/+inroot
+]
+[
+.BI -/+remote
+]
+[
+.BI -/+mono
+]
+[
+.BI -/+allowroot
+]
+[
+.BI -/+debug
+]
+[
+.BI -/+echokeys
+]
+[
+.BI -/+enablesaver
+]
+[
+.BI -/+grabmouse
+]
+[
+.BI -/+grabserver
+]
+[
+.BI -/+install
+]
+[
+.BI -/+sound
+]
+[
+.BI -/+timeelapsed
+]
+[
+.BI -/+usefirst
+]
+[
+.BI -/+verbose
+]
+[
+.BI \-nice " level"
+]
+[
+.BI \-lockdelay " seconds"
+]
+[
+.BI \-timeout " seconds"
+]
+[
+.BI \-font " fontname"
+]
+[
+.BI \-msgfont " message-fontname"
+]
+[
+.BI \-bg " color"
+]
+[
+.BI \-fg " color"
+]
+[
+.BI \-background " color"
+]
+[
+.BI \-foreground " color"
+]
+[
+.BI \-username " string"
+]
+[
+.BI \-password " string"
+]
+[
+.BI \-info " string"
+]
+[
+.BI \-validate " string"
+]
+[
+.BI \-invalid " string"
+]
+[
+.BI \-geometry " geom"
+]
+[
+.BI \-icongeometry " geom"
+]
+[
+.BI -/+fullrandom
+]
+[
+.BI -/+wireframe
+]
+[
+.BI -/+use3d
+]
+[
+.BI \-delta3d " value"
+]
+[
+.BI \-none3d " color"
+]
+[
+.BI \-right3d " color"
+]
+[
+.BI \-left3d " color"
+]
+[
+.BI \-both3d " color"
+]
+[
+.BI \-program " programname"
+]
+[
+.BI \-messagesfile " formatted-filename"
+]
+[
+.BI \-messagefile " filename"
+]
+[
+.BI \-message " string"
+]
+[
+.BI \-mfont " mode-fontname"
+]
+[
+.BI \-imagefile " filename"
+]
+[
+.BI \-neighbors " num"
+]
+[
+.BI \-cpasswd " crypted-password"
+]
+[
+.BI \-forceLogout " minutes"
+]
+[
+.BI \-logoutButtonLabel " textstring"
+]
+[
+.BI \-logoutButtonHelp " textstring"
+]
+[
+.BI \-logoutFailedString " textstring"
+]
+[
+.BI -/+dtsaver
+]
+[
+.BI \-locksound " string"
+]
+[
+.BI \-infosound " string"
+]
+[
+.BI \-validsound " string"
+]
+[
+.BI \-invalidsound " string"
+]
+
+.SH DESCRIPTION
+.B xlock
+locks the X server till the user enters their password at the keyboard.
+While
+.B xlock
+is running,
+all new server connections are refused.
+The screen saver is disabled.
+The mouse cursor is turned off.
+The screen is blanked and a changing pattern is put on the screen.
+If a key or a mouse button is pressed then the user is prompted for the
+password of the user who started
+.BR xlock .
+
+If the correct password is typed, then the screen is unlocked and the X
+server is restored. When typing the password Control-U and Control-H are
+active as kill and erase respectively. To return to the locked screen,
+click in the small icon version of the changing pattern.
+
+In the lower part of the password screen a message is displayed. This
+message is taken from the first file of the following that exists:
+$HOME/.xlockmessage, $HOME/.plan, or $HOME/.signature.
+
+On systems which support new BSD style authentication, the password
+may be prefixed by an authentication style followed by a colon
+(i.e. "style:password"). See the login.conf(5) for more information
+on authentication styles.
+
+.SH "NOTE ON ETIQUETTE"
+.I Xlock
+should not be used on public terminals when there is a high demand for them.
+
+If you find a public terminal that has been locked by another user and
+there are no other terminals available, and the terminal appears to have
+been left idle for a while (normally more than 15 minutes), it is fair to
+try to reset the session in some manner.
+
+.SH OPTIONS
+.TP 5
+.BI \-help
+Print options and a brief description to standard output.
+.TP 5
+.BI \-version
+Print version number (if >= 4.00) to standard output.
+.TP 5
+.BI \-resources
+Print default resource file to standard output.
+.TP 5
+.BI \-display \ displayname
+The
+.I display
+option sets the X11 display to lock.
+.B xlock
+locks all available screens on a given server,
+and restricts you to locking only a local server such as
+.BI unix:0,
+.BI localhost:0,
+or
+.BI :0
+unless you set the
+.B \-remote
+option.
+.TP 5
+.BI \-visual \ visualname
+.I visualname
+which is one of "StaticGray", "GrayScale", "StaticColor", "PseudoColor",
+"TrueColor", or "DirectColor". May not be available depending on how it
+is initially configured. This is under construction.
+.TP 5
+.BI \-name \ resourcename
+.I resourcename
+is used instead of
+.B XLock
+when looking for resources to configure
+.BR xlock .
+.TP 5
+.BI \-mode \ modename
+As of this writing there are over 60 display modes supported
+(plus one more for random selection of one of these).
+.TP 8
+.B ant
+Shows Langton's and Turk's generalized ants.
+.TP 8
+.B ball
+Shows bouncing balls.
+.TP 8
+.B bat
+Shows bouncing flying bats.
+.TP 8
+.B blot
+Shows Rorschach's ink blot test.
+.TP 8
+.B bouboule
+Shows Mimi's bouboule of moving stars.
+.TP 8
+.B bounce
+Shows bouncing footballs.
+.TP 8
+.B braid
+Shows random braids and knots.
+.TP 8
+.B bug
+Shows Palmiter's bug evolution and a garden of Eden.
+.TP 8
+.B cartoon
+Shows bouncing cartoons. Not compiled in by default.
+.TP 8
+.B clock
+Shows Packard's oclock.
+.TP 8
+.B crystal
+Shows polygons in 2D plane groups.
+.TP 8
+.B daisy
+Shows a meadow of daisies.
+.TP 8
+.B dclock
+Shows a floating digital clock.
+.TP 8
+.B demon
+Shows Griffeath's cellular automata.
+.TP 8
+.B drift
+Shows cosmic drifting flame fractals.
+.TP 8
+.B escher
+Shows Escher-like GL stuff. May not be available depending on how it was
+configured.
+.TP 8
+.B eyes
+Shows eyes following a bouncing grelb.
+.TP 8
+.B flag
+Shows a flying flag of your operating system.
+.TP 8
+.B flame
+Shows cosmic flame fractals.
+.TP 8
+.B forest
+Shows binary trees of a fractal forest.
+.TP 8
+.B fract
+Shows fractals.
+.TP 8
+.B galaxy
+Shows crashing spiral galaxies.
+.TP 8
+.B gears
+Shows GL's gears. May not be available depending on how it was configured.
+.TP 8
+.B geometry
+Shows morphing of a complete graph.
+.TP 8
+.B grav
+Shows orbiting planets.
+.TP 8
+.B helix
+Shows string art.
+.TP 8
+.B hop
+Shows real plane iterated fractals.
+.TP 8
+.B hyper
+Shows a spinning tesseract in 4D space.
+.TP 8
+.B ico
+Shows a bouncing polyhedra.
+.TP 8
+.B ifs
+Shows a modified iterated function system.
+.TP 8
+.B image
+Shows randomly appearing logos.
+.TP 8
+.B julia
+Shows the Julia set.
+.TP 8
+.B kaleid
+Shows a kaleidoscope.
+.TP 8
+.B laser
+Shows spinning lasers.
+.TP 8
+.B life
+Shows Conway's game of life.
+.TP 8
+.B life1d
+Shows Wolfram's game of 1D life.
+.TP 8
+.B life3d
+Shows Bays' game of 3D life.
+.TP 8
+.B lightning
+Shows Keith's fractal lightning bolts.
+.TP 8
+.B lisa
+Shows animated lisajous loops.
+.TP 8
+.B lissie
+Shows lissajous worms.
+.TP 8
+.B loop
+Shows Langton's self-producing loops.
+.TP 8
+.B marquee
+Shows messages.
+.TP 8
+.B maze
+Shows a random maze and a depth first search solution.
+.TP 8
+.B morph3d
+Shows GL morphing polyhedra. May not be available depending on how it
+was configured.
+.TP 8
+.B mountain
+Shows Papo's mountain range.
+.TP 8
+.B nose
+Shows a man with a big nose runs around spewing out messages.
+.TP 8
+.B pacman
+Shows Pacman(tm).
+.TP 8
+.B pipes
+Shows a selfbuilding pipe system. May not be available depending on how it
+was configured.
+.TP 8
+.B penrose
+Shows Penrose's quasiperiodic tilings.
+.TP 8
+.B petal
+Shows various GCD Flowers.
+.TP 8
+.B puzzle
+Shows a puzzle being scrambled and then solved.
+.TP 8
+.B pyro
+Shows fireworks.
+.TP 8
+.B qix
+Shows spinning lines a la Qix(tm).
+.TP 8
+.B roll
+Shows a rolling ball.
+.TP 8
+.B rotor
+Shows Tom's Roto-Rooter.
+.TP 8
+.B shape
+Shows stippled rectangles, ellipses, and triangles.
+.TP 8
+.B sierpinski
+Shows a Sierpinski's triangle.
+.TP 8
+.B slip
+Shows slipping blits.
+.TP 8
+.B sphere
+Shows a bunch of shaded spheres.
+.TP 8
+.B spiral
+Shows helixes of dots.
+.TP 8
+.B spline
+Shows colorful moving splines.
+.TP 8
+.B sproingies
+Shows Sproingies! Nontoxic. Safe for pets and small children.
+May not be available depending on how it was configured.
+.TP 8
+.B star
+Shows a star field with a twist.
+.TP 8
+.B strange
+Shows strange attractors.
+.TP 8
+.B superquadrics
+Shows 3D mathematical shapes. May not be available depending on how it
+was configured.
+.TP 8
+.B swarm
+Shows a swarm of bees following a wasp.
+.TP 8
+.B swirl
+Shows animated swirling patterns.
+.TP 8
+.B triangle
+Shows a triangular mountain range.
+.TP 8
+.B tube
+Shows an animated tube.
+.TP 8
+.B turtle
+Shows turtle fractals.
+.TP 8
+.B voters
+Shows Dewdney's Voters.
+.TP 8
+.B wator
+Shows Dewdney's Water-Torus planet of fish and sharks.
+.TP 8
+.B wire
+Shows a random circuit with 2 electrons.
+.TP 8
+.B world
+Shows spinning Earths.
+.TP 8
+.B worm
+Shows wiggly worms.
+.TP 8
+.B blank
+Shows nothing but a black screen. Does not show up in random mode.
+.TP 8
+.B bomb
+Shows a bomb and will autologout after a time. Does not show up in random
+mode and may be available depending on how it was configured.
+.TP 8
+.B random
+Shows a random mode from above except blank (and bomb).
+
+.TP 5
+.BI \-delay \ usecs
+The
+.I delay
+option sets the speed at which a mode will operate. It simply sets the
+number of microseconds to delay between batches of animations. In
+blank mode, it is important to set this to some small number of seconds,
+because the keyboard and mouse are only checked after each delay, so you
+cannot set the delay too high, but a delay of zero would needlessly
+consume cpu checking for mouse and keyboard input in a tight loop, since
+blank mode has no work to do.
+.TP 5
+.BI \-batchcount \ num
+The
+.I batchcount
+option sets number of
+.I things
+to do per batch to
+.I num .
+
+In ant mode this refers the number of ants.
+
+In ball mode it is the number of balls.
+
+In bat mode it is the number of bats, could be less because of conflicts.
+
+In blot mode this refers to the number of pixels rendered in the same color.
+
+In bouboule mode it is the number of stars.
+
+In bounce mode it is the number of balls, could be less because of conflicts.
+
+In braid mode it is the upper bound number of strands.
+
+In bug mode it is the number of bugs, could be less because of conflicts.
+
+In cartoon mode it means nothing.
+
+In clock mode it is the percentage of the screen, but less than 100%.
+
+In crystal mode it is the number of polygons.
+
+In daisy mode it is the number flowers that make a meadow.
+
+In dclock mode it means nothing.
+
+In demon mode this refers the number of colors.
+
+In drift mode it is the number of levels to recurse (larger = more complex).
+
+In escher mode it is the current picture.
+
+In eyes mode it is the number of eyes.
+
+In flame mode it is the number of levels to recurse (larger = more complex).
+
+In forest mode it is the number trees that make a forest.
+
+In fract mode it is means nothing.
+
+In galaxy mode it means the number of galaxies.
+
+In gears mode it is the number of degrees to rotate the set of gears by.
+
+In geometry mode it is the number of vertices.
+
+In grav mode it is the number of planets.
+
+In helix mode it means nothing.
+
+In hop mode this refers to the number of pixels rendered in the same color.
+
+In hyper mode it means nothing.
+
+In ico mode it is the ith plantonic solid.
+
+In ifs mode it means nothing.
+
+In image mode it means it is the number of logos on screen at once.
+
+In julia mode it is the depth of recursion.
+
+In kaleid mode it means nothing.
+
+In laser mode it is the number lasers.
+
+In life mode it is the number of generations before a glider is introduced.
+
+In life1d mode it means nothing.
+
+In life3d mode it is the number of generations before a glider is introduced.
+
+In lisa mode it is the number of loops.
+
+In lissie mode it is the number of worms.
+
+In loop mode it means nothing.
+
+In marquee mode it means nothing.
+
+In maze mode it means nothing.
+
+In morph3d mode it is the ith plantonic solid.
+
+In mountain mode it is the number of mountains.
+
+In nose mode it means nothing.
+
+In qix mode it is the number of lines rendered in the same color.
+
+In pacman mode it means the number of ghosts.
+
+In penrose mode it means nothing.
+
+In petal mode it the greatest random number of petals.
+
+In pipes mode it shows different joints, 0 random, 1 spherical, 2 bolted
+elbow, 3 elbow, and 4 alternating.
+
+In puzzle mode it the number of moves.
+
+In pyro mode it is the maximum number flying rockets at one time.
+
+In rotor mode it is the number of points.
+
+In rotor mode it is the number of rotor thingys which whirr...
+
+In shape mode it means nothing.
+
+In sierpinski mode it is the number of points.
+
+In slip mode it means nothing.
+
+In sphere mode it means nothing.
+
+In spiral mode it is the number of spirals.
+
+In spline mode it is the number of points "splined".
+
+In sproingies mode it is the number of sproingies.
+
+In star mode it is the number of stars on the screen at once.
+
+In strange mode it means nothing.
+
+In superquadrics mode its the number of horizontal and vertical lines in
+the superquadric.
+
+In swirl mode it means the number of "knots".
+
+In swarm mode it is the number of bees.
+
+In triangular mode it is the number of mountains.
+
+In tube mode it means nothing.
+
+In turtle mode it means nothing.
+
+In voters mode it means the number of parties, 2 or 3.
+
+In wator mode it means the breed time for the fish.
+
+In wire mode it means the length of the circuit.
+
+In world mode it is the number of worlds.
+
+In worm mode it is the number of worms.
+
+In blank mode it means nothing.
+
+In bomb mode it means the number of minutes to autologout.
+
+A negative
+.I batchcount
+allows for randomness. The range from the minimum allowed nonnegative
+.I batchcount
+for a particular mode to the
+ABS(
+.I batchcount
+) (or maximum allowed
+.I batchcount
+, whichever is less).
+.TP 5
+.BI \-cycles \ num
+The
+.I cycles
+option sets the number of cycles until time out for ant, blot, braid,
+bug, clock, crystal, daisy, demon, eyes, flag, forest, galaxy, helix, hop,
+hyper, ico, kaleid, laser, life, life1d, life3d, lisa, lissie, loop,
+mountain, petal, sierpinski, shape, spline +erase, triangle, tube, voters,
+wator, and wire. For worm it is the length of the lines, for julia and
+spiral it is the length of the trail of dots, for qix it is the number of
+lines, for spline -erase it means the number of splines * 64 (for
+compatibility with +erase), for gears it is the number of degrees to
+increment the spin of each gear by, for pipes it is the number of systems to
+draw before clearing the screen, for superquadrics it is the number of
+frames it takes to morph from one shape to another. For others it means
+nothing.
+.TP 5
+.BI \-size \ num
+The
+.I size
+option sets the size maximum size of a star in bouboule, pyro and star,
+size of ball in ball and bounce, size of bat in bat, size of clock in clock,
+size of the polygon in crystal, size of polyhedron in ico, size of lissie in
+lissie, size of dots of flag, width of maze hallway, size of side of penrose
+tile, radius of loop in lisa, radius of ball in roll, size of tube in tube,
+width of worm in worm, size of cells in ant, bug, life, life1d, pacman,
+voters, wator, and wire. In pipes it is the maximum length of a system. In
+sproingies it is the size of the screen. A negative number allows for
+randomness, similar to
+.I batchcount.
+.TP 5
+.BI \-saturation \ value
+The
+.I saturation
+option sets saturation of the color ramp used to
+.I value .
+0 is grayscale and 1 is very rich color. 0.4 is a nice pastel.
+.TP 5
+.B +/-nolock
+The
+.I nolock
+option causes
+.B xlock
+to only draw the patterns and not lock the display.
+A key press or a mouse click will terminate the screen saver.
+.TP 5
+.B -/+inwindow
+Runs
+.B xlock
+in a window, so that you can iconify, move, or resize it and
+still use your screen for other stuff. When running in a window,
+.B xlock
+no longer locks your screen, it just looks good.
+.TP 5
+.B -/+inroot
+Runs
+.B xlock
+in your root window. Like the
+.I inwindow
+option it no longer locks the screen, it just looks good.
+.TP 5
+.B -/+remote
+The
+.I remote
+option tells
+.B xlock
+to not stop you from locking remote X11 servers. This option should be
+used with care and is intended mainly to lock X11 terminals which cannot
+run
+.B xlock
+locally. If you lock someone else's workstation, they will have to know
+.B your
+password to unlock it. Using
+.I +remote
+overrides any resource derived values for
+.I remote
+and prevents
+.B xlock
+from being used to lock other X11 servers. (Use `+' instead of `-' to
+override resources for other options that can take the `+' modifier
+similarly.)
+.TP 5
+.B -/+mono
+The
+.I mono
+option causes
+.B xlock
+to display monochrome, (black and white) pixels rather than the default
+colored ones on color displays.
+.TP 5
+.B -/+allowaccess
+This option is required for servers which do not allow clients to modify
+the host access control list. It is also useful if you need to run x
+clients on a server which is locked for some reason... When
+.I allowaccess
+is true, the X11 server is left open for clients to attach and thus
+lowers the inherent security of this lock screen. A side effect of using
+this option is that if
+.B xlock
+is killed -KILL, the access control list is not lost.
+.TP 5
+.B -/+allowroot
+The
+.I allowroot
+option allows the root password to unlock the server as well as the user
+who started
+.BR xlock .
+May not be able to turn this on and off depending on your system and how
+.B xlock
+was configured.
+.TP 5
+.B -/+debug
+Allows
+.B xlock
+to be debugged by doing all but locking the screen.
+.TP 5
+.B -/+echokeys
+The
+.I echokeys
+option causes
+.B xlock
+to echo '?' characters for each key typed into the password prompt.
+Some consider this a security risk, so the default is to not echo
+anything.
+.TP 5
+.B -/+enablesaver
+By default
+.B xlock
+will disable the normal X server's screen saver since
+it is in effect a replacement for it. Since it is possible to set delay
+parameters long enough to cause phosphor burn on some displays, this
+option will turn back on the default screen saver which is very careful
+to keep most of the screen black.
+.TP 5
+.B -/+grabmouse
+The
+.I grabmouse
+option causes
+.B xlock
+to grab the mouse and keyboard, this is the default.
+.B xlock
+can not lock the screen without this.
+.TP 5
+.B -/+grabserver
+The
+.I grabserver
+option causes
+.B xlock
+to grab the server. This is not usually needed but some unsecure X servers
+can be defeated without this.
+.TP 5
+.B -/+install
+Allows
+.B xlock
+to install its own colormap if
+.B xlock
+runs out of colors.
+May not work on with some window managers (fvwm) and does not work with
+the -inroot option.
+.TP 5
+.B -/+sound
+Allows you to turn on and off sound if installed with the capability.
+.TP 5
+.B -/+timeelapsed
+Allows you to find out how long a machine is locked so you can complain
+to an administrator that someone is hogging a machine.
+.TP 5
+.B -/+usefirst
+The
+.I usefirst
+option causes
+.B xlock
+to use the keystroke which got you to the password screen as the first
+character in the password. The default is to ignore the first key
+pressed.
+.TP 5
+.B -/+verbose
+Verbose mode, tells what options it is going to use.
+.TP 5
+.BI \-nice \ nicelevel
+The
+.I nice
+option sets system nicelevel of the
+.B xlock
+process to
+.I nicelevel .
+.TP 5
+.BI \-lockdelay \ seconds
+The
+.I lockdelay
+option sets the number of
+.I seconds
+before the screen needs a password to be unlocked. Good for use with
+an autolocking mechanism like xautolock(1).
+.TP 5
+.BI \-timeout \ seconds
+The
+.I timeout
+option sets the number of
+.I seconds
+before the password screen will time out.
+.TP 5
+.BI \-font \ fontname
+The
+.I font
+option sets the font to be used on the prompt screen.
+.TP 5
+.BI \-msgfont \ fontname
+option sets the font to be used for the message that is displayed in
+the lower part of the password screen.
+.TP 5
+.BI \-fg \ color
+The
+.I fg
+option sets the color of the text on the password screen to
+.I color .
+.TP 5
+.BI \-bg \ color
+The
+.I bg
+option sets the color of the background on the password screen to
+.I color .
+.TP 5
+.BI \-foreground \ color
+The
+.I foreground
+option sets the color of the text on the password screen to
+.I color .
+.TP 5
+.BI \-background \ color
+The
+.I background
+option sets the color of the background on the password screen to
+.I color .
+.TP 5
+.BI \-username \ string
+Text
+.I string
+is shown in front of user name, defaults to "Name: ".
+.TP 5
+.BI \-password \ string
+Text
+.I string
+is the password prompt string, defaults to "Password: ".
+.TP 5
+.BI \-info \ string
+Text
+.I string
+is an informational message to tell the user what to do, defaults to
+"Enter password to unlock; select icon to lock.".
+.TP 5
+.BI \-validate \ string
+Text
+.I string
+is a message shown while validating the password, defaults to
+"Validating login..."
+.TP 5
+.BI \-invalid \ string
+Text
+.I string
+is a message shown when password is invalid, defaults to
+"Invalid login."
+.TP 5
+.BI \-geometry \ geom
+The
+.I geometry
+option sets
+.I geom
+the size and offset of the lock window (normally the entire screen).
+The entire screen format is still used for entering the password. The
+purpose is to see the screen even though it is locked. This should be
+used with caution since many of the modes will fail if the windows
+are far from square or are too small (size must be greater than 0x0).
+This should also be used with -enablesaver to protect screen from
+phosphor burn.
+.TP 5
+.BI \-icongeometry \ geom
+The
+.I icongeometry
+option sets
+.I geom
+the size of the iconic screen (normally 64x64) seen when entering the
+password. This should be used with caution since many of the modes will
+fail if the windows are far from square or are too small (size must be
+greater than 0x0). The greatest size is 256x256. There should be some
+limit so users could see who has locked the screen. Position
+information of icon is ignored.
+.TP 5
+.B -/+fullrandom
+Turn on/off randomness options within modes. Not implemented on all
+mode options.
+.TP 5
+.B -/+wireframe
+Turn on/off wireframe, available on gears, sproingies and superquadrics.
+Other modes should use this in the future as well (e.g. daisy, life3d,
+triangle).
+.TP 5
+.B -/+use3d
+Turn on/off 3d view, available on bouboule, pyro, star, and worm.
+.TP 5
+.BI \-delta3d \ value
+Space between the center of your 2 eyes for 3d mode.
+.TP 5
+.BI \-none3d \ color
+Color used for empty size in 3d mode.
+.TP 5
+.BI \-right3d \ color
+Color used for right eye in 3d mode.
+.TP 5
+.BI \-left3d \ color
+Color used for left eye in 3d mode.
+.TP 5
+.BI \-both3d \ color
+Color used for overlapping images for left and right eye in 3d mode.
+.TP 5
+.BI \-program \ programname
+The
+.I program
+option sets the program to be used as the fortune generator. Currently
+used only for marquee and nose modes.
+.TP 5
+.BI \-messagesfile \ formatted-filename
+The
+.I messagesfile
+option sets the file to be used as the fortune generator. The first
+entry is the number of fortunes, the next line contains the first fortune.
+Fortunes begin with a "%%" on a line by itself. Currently used only for
+marquee and nose modes. If one exists, it takes precedence over the
+fortune program.
+.TP 5
+.BI \-messagefile \ filename
+The
+.I messagefile
+option sets the file where the contents are the message. Currently
+used only for marquee and nose modes. If one exists, it takes
+precedence over the fortune program and messagesfile.
+.TP 5
+.BI \-message \ textstring
+The
+.I message
+option sets the message. Currently used only for marquee and nose modes.
+If one exists, it takes precedence over the fortune program,
+messagesfile and messagefile.
+.TP 5
+.BI \-mfont \ mode-fontname
+The
+.I mfont
+option sets the font to be used in the mode. Currently used only for
+marquee and nose modes.
+.TP 5
+.BI \-imagefile \ filename
+The
+.I imagefile
+option sets the ras or xpm file to be displayed with image or puzzle mode.
+Raster files work with -install as well.
+.sp
+.SH "MORE OPTIONS (these may not be available)"
+.TP 5
+.BI \-cpasswd \ crypted-password
+The
+.I cpasswd
+option sets the key to be this text string to unlock
+.B xlock
+instead of password file.
+.TP 5
+.BI \-forceLogout \ minutes
+The
+.I forceLogout
+option sets
+.I minutes
+to auto-logout.
+.TP 5
+.BI \-logoutButtonLabel \ string
+Text
+.I string
+is a message shown inside logout button when logout button is displayed.
+Defaults to
+"Logout".
+.TP 5
+.BI \-logoutButtonHelp \ string
+Text
+.I string
+is a message shown outside logout button when logout button is
+displayed. Defaults to
+"Click the \\"Logout\\" button to log out current\\n
+user and make workstation available."
+.TP 5
+.BI \-logoutFailedString \ string
+Text
+.I string
+is a message shown when a logout is attempted and fails.
+Defaults to
+"Logout attempt FAILED.\\n
+Current user could not be automatically logged out."
+.TP 5
+.B -/+dtsaver
+Turn on/off CDE Saver Mode.
+.TP 5
+.BI \-locksound \ string
+Text
+.I string
+references sound to use at lock time. Default sound, male voice:
+"Thank you, for your cooperation."
+.TP 5
+.BI \-infosound \ string
+Text
+.I string
+references sound to use for information. Default sound, male voice:
+"Identify please."
+.TP 5
+.BI \-validsound \ string
+Text
+.I string
+references sound to when a password is valid. Default sound, female voice:
+"Complete."
+.TP 5
+.BI \-invalidsound \ string
+Text
+.I string
+references sound to when a password is invalid. Default sound, female
+voice: "I am not programmed to give you that information."
+.sp
+.SH "SPECIAL MODE DEPENDENT OPTIONS"
+.TP 5
+.BI -/+truchet
+Turn on and off Truchet lines (trail) in
+.I ant.
+.TP 5
+.BI -/+grow
+Turn on and off growing fractals (else they are animated) for
+.I drift.
+.TP 5
+.BI -/+liss
+Turn on and off using lissojous figures to get points for
+.I drift.
+.TP 5
+.BI -/+noants
+Turn off and on ants in
+.I escher.
+.TP 5
+.BI -/+solidmoebius
+Turn on and off solid mobius in
+.I escher.
+.TP 5
+.BI -/+decay
+Turn on and off decaying orbits for
+.I grav.
+.TP 5
+.BI -/+trail
+Turn on and off decaying trail of dots for
+.I grav.
+.TP 5
+.BI -/+martin
+Turn on and off Barry Martin's square root
+.I hop.
+.TP 5
+.BI -/+ejk1...ejk6
+Turn on and off Ed J. Kubaitis'
+.I hops.
+.TP 5
+.BI -/+rr
+Turn on and off Renaldo Recuerdo's
+.I hop.
+.TP 5
+.BI -/+jong
+Turn on and off Jong's
+.I hop.
+.TP 5
+.BI -/+sine
+Turn on and off Barry Martin's sine
+.I hop.
+.TP 5
+.BI -/+mouse
+Turn on and off mouse interaction in
+.I julia.
+.TP 5
+.BI \-rule \ num
+Allows one to set
+.I life
+parameters <living_min><living_max><birth_min><birth_max>. For example,
+Conway's rule is 2333. Unfortunately, this requires the rule to be
+contiguous.
+.TP 5
+.BI -/+totalistic
+Turn on and off totalistic rules for
+.I life1d.
+If this is off then it follows rules of the LCAU collection. These
+rules may not be symmetric and are more general.
+.TP 5
+.BI \-rule3d \ num
+Allows one to set
+.I life3d
+parameters <living_min><living_max><birth_min><birth_max>. For example,
+Bay's 4 rules are 4555, 5766, 5655, and 6767. Unfortunately, this requires
+the rule to be contiguous.
+.TP 5
+.BI -/+ammann
+Turn on and off lines for
+.I penrose.
+.TP 5
+.BI -/+erase
+Turn on and off erasing for
+.I spline.
+If this option is on,
+.I cycles
+is divided by 64 to compute the number of lines, so as to be compatable
+when using -fullrandom.
+.TP 5
+.BI \-trek \ num
+If its a high number you will see the space ship all the time in
+.I star.
+.TP 5
+.BI -/+rock
+Turn on and off rocks for
+.I star.
+If this is off, stars will be seen instead.
+.TP 5
+.BI -/+straight
+Turn on if
+.I star
+gets you motion sick.
+.TP 5
+.BI \-factory \ num
+Number of extra factory parts in
+.I pipes.
+.TP 5
+.BI -/+fisheye
+Turn on if you want a zoomed-in view of
+.I pipes.
+.TP 5
+.BI -/+tightturns
+Turn on if you want the
+.I pipes
+to bend more often.
+.TP 5
+.BI -/+rotatepipes
+Turn on if you want the pipe system rotated in
+.I pipes.
+.TP 5
+.BI \-duration \ seconds
+Allows one to set a duration for a mode in
+.I random.
+Duration of 0 is defined as infinite.
+.TP 5
+.BI \-modelist \ textstring
+Allows one to pass a list of files to randomly display to
+.I random.
+"all" will get all files but blank (and bomb if compiled in). "all,blank"
+will get all modes. "all,-image bounce,+blank" will get all modes but
+image and bounce. "bug wator" will get only bug and wator. "allstable"
+will weed out hackers modes if compiled in, "allstandard will weed out
+the GL modes (as well as hackers modes) if compiled in ("allgl" will get
+only these modes as well as "allstable-allstandard), "allnice" will weed
+out high cpu usage modes (as well as hackers and gl modes). "random" can
+not be referenced.
+.TP 5
+.BI -/+sequential
+Turn on non-random
+.I random
+option.
+.sp
+.SH **WARNING**
+.B xlock
+can appear to hang if it is competing with a high-priority process for
+the CPU. For example, if
+.B xlock
+is started after a process with 'nice -20'
+(high priority),
+.B xlock
+will take considerable amount of time to respond.
+.sp
+.SH "SHADOW PASSWORDS"
+If the machine is using a shadow password system, then
+.B xlock
+may not be set up to get the real password and so must be given one
+of its own. This can be either on the command line, via the
+.B -cpasswd
+option,
+or in the file
+.BR $HOME/.xlockrc ,
+with the first taking precedence. In both cases an encrypted password
+is expected (see makekey(8)). If neither is given, then
+.B xlock
+will prompt for a password and will use that, also storing an
+encrypted version of it in
+.B $HOME/.xlockrc
+for future use.
+.sp
+.SH BUGS
+"kill -KILL
+.B xlock
+" causes the server that was locked to be unusable, since all hosts
+(including localhost) were removed from the access control list
+to lock out new X clients, and since
+.B xlock
+could not catch SIGKILL, it terminated before restoring the access
+control list. This will leave the X server in a state where
+\fI"you can no longer connect to that server,
+and this operation cannot be reversed unless you reset the server."\fP
+ -From the X11R4 Xlib Documentation, Chapter 7.
+.br
+NCD terminals do not allow xlock to remove all the hosts from the access
+control list. Therefore you will need to use the "-remote" and
+"-allowaccess" switches. If you happen to run without "-allowaccess" on an
+NCD terminal,
+.B xlock
+will not work and you will need to reboot the terminal, or simply go into
+the SETUP menus, under 'Network Parameters', and turn off TCP/IP access
+control.
+.br
+.SH "SEE ALSO"
+X(1), Xlib Documentation.
+.sp
+.SH AUTHOR
+Maintained by:
+.br
+ David A. Bagley (bagleyd@bigfoot.com)
+.br
+ The latest version is currently at:
+.br
+ ftp.x.org in /contrib/applications/xlockmore-4.??.tar.gz
+.sp
+Original Author:
+.br
+ Patrick J. Naughton (naughton@eng.sun.com)
+.br
+ Mailstop 21-14
+.br
+ Sun Microsystems Laboratories, Inc.
+.br
+ Mountain View, CA 94043
+.br
+ 415/336-1080
+.sp
+with many additional contributors.
+.sp
+.SH COPYRIGHT
+Copyright (c) 1988-91 by Patrick J. Naughton
+.br
+Copyright (c) 1993-97 by David A. Bagley
+.sp
+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.
+.br
+The original BSD daemon is Copyright (c) 1988 Marshall Kirk McKusick.
+All Rights Reserved.
+.br
+Sun, HP, and SGI icons have their respective copyrights.
--- /dev/null
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)xmlock.c 4.00 97/01/01 xlockmore";
+
+#endif
+
+/*-
+ * xmlock.c - main file for xmlock, the gui interface to xlock.
+ *
+ * Copyright (c) 1996 by Charles Vidal
+ *
+ * See xlock.c for copying information.
+ *
+ * Revision History:
+ * Nov-96: Continual minor improvements by Charles Vidal and David Bagley.
+ * Oct-96: written.
+ */
+
+/*-
+ XmLock Problems
+ 1. Allowing only one in -inroot. Need a way to kill it.
+ 2. XLock resources need to be read and used to set initial values.
+ 3. Integer and floating point and string input.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef VMS
+#include <descrip.h>
+#include <lib$routines.h>
+#endif
+
+/* #include <Xm/XmAll.h> Does not work on my version of Lesstif */
+#include <Xm/PanedW.h>
+#include <Xm/RowColumn.h>
+#include <Xm/ToggleB.h>
+#include <Xm/List.h>
+#include <Xm/PushB.h>
+#include <Xm/Form.h>
+#include <Xm/Label.h>
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif /* HAVE_CONFIG_H */
+
+#if USE_XMU
+#include <X11/Xmu/Editres.h>
+#endif
+
+#include "bitmaps/m-xlock.xbm" /* icon bitmap */
+
+/* like an enum */
+#define LAUNCH 0
+#define ROOT 1
+#define WINDOW 2
+#define EXIT 3
+
+/* number of buttons, toggles, and string options */
+#define PUSHBUTTONS 4
+#define TOGGLES 9
+#define OPTIONS 8
+
+/* extern variable */
+extern char *c_Options[OPTIONS];
+extern Widget Menuoption;
+
+extern void Setup_Option(Widget MenuBar);
+
+/* Widget */
+Widget toplevel;
+
+static Widget ScrolledListModes, PushButtons[PUSHBUTTONS], Toggles[TOGGLES];
+
+ /*Resource string */
+
+typedef struct LockStruct_s {
+ char *cmdline_arg; /* mode name */
+ /* Maybe other things should be added here from xlock? */
+ /* Should read in XLock as well to set defaults */
+ char *desc; /* text description of mode */
+} LockStruct;
+
+static LockStruct LockProcs[] =
+{
+ {"ant",
+ "Shows Langton's and Turk's generalized ants"},
+ {"ball",
+ "Shows bouncing balls"},
+ {"bat",
+ "Shows bouncing flying bats"},
+ {"blot",
+ "Shows Rorschach's ink blot test"},
+ {"bouboule",
+ "Shows Mimi's bouboule of moving stars"},
+ {"bounce",
+ "Shows bouncing footballs"},
+ {"braid",
+ "Shows random braids and knots"},
+ {"bug",
+ "Shows Palmiter's bug evolution and garden of Eden"},
+ {"crystal",
+ "Shows polygons in 2D plane groups"},
+ {"clock",
+ "Shows Packard's clock"},
+ {"daisy",
+ "Shows a meadow of daisies"},
+ {"dclock",
+ "Shows a floating digital clock"},
+ {"demon",
+ "Shows Griffeath's cellular automata"},
+ {"drift",
+ "Shows cosmic drifting flame fractals"},
+ {"eyes",
+ "Shows eyes following a bouncing grelb"},
+ {"flag",
+ "Shows a flying flag of your operating system"},
+ {"flame",
+ "Shows cosmic flame fractals"},
+ {"forest",
+ "Shows binary trees of a fractal forest"},
+ {"fract",
+ "Shows fractals"},
+ {"galaxy",
+ "Shows crashing spiral galaxies"},
+ {"geometry",
+ "Shows morphing of a complete graph"},
+ {"grav",
+ "Shows orbiting planets"},
+ {"helix",
+ "Shows string art"},
+ {"hop",
+ "Shows real plane iterated fractals"},
+ {"hyper",
+ "Shows a spinning tesseract in 4D space"},
+ {"ico",
+ "Shows a bouncing polyhedra"},
+ {"ifs",
+ "Shows a modified iterated function system"},
+ {"image",
+ "Shows randomly appearing logos"},
+ {"julia",
+ "Shows the Julia set"},
+ {"kaleid",
+ "Shows a kaleidoscope"},
+ {"laser",
+ "Shows spinning lasers"},
+ {"life",
+ "Shows Conway's game of Life"},
+ {"life1d",
+ "Shows Wolfram's game of 1D Life"},
+ {"life3d",
+ "Shows Bays' game of 3D Life"},
+ {"lightning",
+ "Shows Keith's fractal lightning bolts"},
+ {"lisa",
+ "Shows animated lisajous loops"},
+ {"lissie",
+ "Shows lissajous worms"},
+ {"loop",
+ "Shows Langton's self-producing loops"},
+ {"marquee",
+ "Shows messages"},
+ {"maze",
+ "Shows a random maze and a depth first search solution"},
+ {"mountain",
+ "Shows Papo's mountain range"},
+ {"nose",
+ "Shows a man with a big nose runs around spewing out messages"},
+ {"pacman",
+ "Shows Pacman(tm)"},
+ {"penrose",
+ "Shows Penrose's quasiperiodic tilings"},
+ {"petal",
+ "Shows various GCD Flowers"},
+ {"pipes",
+ "Shows a selfbuilding pipe system"},
+ {"puzzle",
+ "Shows a puzzle being scrambled and then solved"},
+ {"pyro",
+ "Shows fireworks"},
+ {"qix",
+ "Shows spinning lines a la Qix(tm)"},
+ {"roll",
+ "Shows a rolling ball"},
+ {"rotor",
+ "Shows Tom's Roto-Rooter"},
+ {"shape",
+ "Shows stippled rectangles, ellipses, and triangles"},
+ {"sierpinski",
+ "Shows Sierpinski's triangle"},
+ {"slip",
+ "Shows slipping blits"},
+ {"sphere",
+ "Shows a bunch of shaded spheres"},
+ {"spiral",
+ "Shows helixes of dots"},
+ {"spline",
+ "Shows colorful moving splines"},
+ {"star",
+ "Shows a star field with a twist"},
+ {"strange",
+ "Shows strange attractors"},
+ {"swarm",
+ "Shows a swarm of bees following a wasp"},
+ {"swirl",
+ "Shows animated swirling patterns"},
+ {"triangle",
+ "Shows a triangle mountain range"},
+ {"tube",
+ "Shows an animated tube"},
+ {"turtle",
+ "Shows turtle fractals"},
+ {"voters",
+ "Shows Dewdney's Voters"},
+ {"wator",
+ "Shows Dewdney's Water-Torus planet of fish and sharks"},
+ {"wire",
+ "Shows a random circuit with 2 electrons"},
+ {"world",
+ "Shows spinning Earths"},
+ {"worm",
+ "Shows wiggly worms"},
+#if defined( USE_XPM ) || defined( USE_XPMINC )
+ {"cartoon",
+ "Shows bouncing cartoons"},
+#endif
+#ifdef USE_GL
+ {"escher",
+ "Shows some Escher like scenes"},
+ {"gears",
+ "Shows GL's gears"},
+ {"morph3d",
+ "Shows GL morphing polyhedra"},
+ {"pipes",
+ "Shows a selfbuilding pipe system"},
+ {"superquadrics",
+ "Shows 3D mathematical shapes"},
+ {"sproingies",
+ "Shows Sproingies! Nontoxic. Safe for pets and small children"},
+#endif
+#ifdef USE_HACKERS
+ {"fadeplot",
+ "Shows fadeplot"},
+#endif
+ {"blank",
+ "Shows nothing but a black screen"},
+#ifdef USE_BOMB
+ {"bomb",
+ "Shows a bomb and will autologout after a time"},
+ {"random",
+ "Shows a random mode from above except blank and bomb"}
+#else
+ {"random",
+ "Shows a random mode from above except blank"}
+#endif
+};
+
+static int numprocs = sizeof (LockProcs) / sizeof (LockProcs[0]);
+
+/* some resources of buttons and toggles not really good programming :( */
+
+static char *r_PushButtons[PUSHBUTTONS] =
+{
+ "Launch",
+ "In Root",
+ "In Window",
+ "Exit"
+};
+
+static char *r_Toggles[TOGGLES] =
+{
+ "mono",
+ "nolock",
+ "remote",
+ "allowroot",
+ "enablesaver",
+ "allowaccess",
+ "grabmouse",
+ "echokeys",
+ "usefirst"
+};
+
+char *r_Options[OPTIONS] =
+{
+ "username",
+ "password",
+ "info",
+ "validate",
+ "invalid",
+ "geometry",
+ "font",
+ "program"
+};
+
+static int numberinlist = 0;
+
+/* CallBack */
+static void
+f_PushButtons(Widget w, XtPointer client_data, XtPointer call_data)
+{
+ int i;
+ char command[500];
+
+#ifdef VMS
+ int mask = 17;
+ struct dsc$descriptor_d vms_image;
+
+#endif
+
+ (void) strcpy(command, "xlock ");
+
+/* booleans (+/-) options */
+
+ for (i = 0; i < TOGGLES; i++) {
+ if (XmToggleButtonGetState(Toggles[i])) {
+ (void) strcat(command, "-");
+ (void) strcat(command, r_Toggles[i]);
+ (void) strcat(command, " ");
+ }
+ }
+ for (i = 0; i < OPTIONS; i++)
+ if (c_Options[i] != NULL) {
+ (void) strcat(command, "-");
+ (void) strcat(command, r_Options[i]);
+ (void) strcat(command, " ");
+ (void) strcat(command, c_Options[i]);
+ (void) strcat(command, " ");
+ }
+ switch ((int) client_data) {
+ case LAUNCH:
+ /* the default value then nothing to do */
+ break;
+ case WINDOW:
+ (void) strcat(command, "-inwindow ");
+ break;
+ case ROOT:
+ (void) strcat(command, "-inroot ");
+ break;
+ case EXIT:
+ exit(0);
+ break;
+ }
+ (void) strcat(command, "-mode ");
+ (void) strcat(command, LockProcs[numberinlist].cmdline_arg);
+#ifdef VMS
+ vms_image.dsc$w_length = strlen(command);
+ vms_image.dsc$a_pointer = command;
+ vms_image.dsc$b_class = DSC$K_CLASS_S;
+ vms_image.dsc$b_dtype = DSC$K_DTYPE_T;
+ (void) printf("%s\n", command);
+ (void) lib$spawn(&vms_image, 0, 0, &mask);
+#else
+ (void) strcat(command, " & ");
+ (void) printf("%s\n", command);
+ (void) system(command);
+#endif
+}
+
+static void
+f_ScrolledListModes(Widget w, XtPointer client_data, XtPointer call_data)
+{
+ numberinlist = ((XmListCallbackStruct *) call_data)->item_position - 1;
+}
+
+/* Setup Widget */
+static void
+Setup_Widget(Widget father)
+{
+ Arg args[15];
+ int i, ac = 0;
+ Widget Row, PushButtonRow, TogglesRow, Label;
+ char string[160];
+ XmString label_str;
+
+#define NUMPROCS 100 /* Greater than or equal to numprocs */
+ XmString TabXmStr[NUMPROCS];
+
+/* two labels in the top */
+ ac = 0;
+ XtSetArg(args[ac], XmNrightAttachment, XmATTACH_FORM);
+ ac++;
+ XtSetArg(args[ac], XmNtopAttachment, XmATTACH_FORM);
+ ac++;
+ Label = XmCreateLabel(father, "Switches", args, ac);
+ XtManageChild(Label);
+ ac = 0;
+ XtSetArg(args[ac], XmNleftAttachment, XmATTACH_FORM);
+ ac++;
+ XtSetArg(args[ac], XmNtopAttachment, XmATTACH_FORM);
+ ac++;
+ Label = XmCreateLabel(father, "Modes", args, ac);
+ XtManageChild(Label);
+
+/* buttons in the bottom */
+ ac = 0;
+ XtSetArg(args[ac], XmNorientation, XmHORIZONTAL);
+ ac++;
+ XtSetArg(args[ac], XmNrightAttachment, XmATTACH_FORM);
+ ac++;
+ XtSetArg(args[ac], XmNleftAttachment, XmATTACH_FORM);
+ ac++;
+ XtSetArg(args[ac], XmNbottomAttachment, XmATTACH_FORM);
+ ac++;
+ PushButtonRow = XmCreateRowColumn(father, "PushButtonRow", args, ac);
+
+ Menuoption = XmCreateMenuBar(PushButtonRow, "MenuBar", NULL, 0);
+ XtManageChild(Menuoption);
+
+ for (i = 0; i < PUSHBUTTONS; i++) {
+ ac = 0;
+ label_str = XmStringCreate(r_PushButtons[i], XmSTRING_DEFAULT_CHARSET);
+ XtSetArg(args[ac], XmNlabelString, label_str);
+ ac++;
+ PushButtons[i] = XmCreatePushButton(PushButtonRow, r_PushButtons[i],
+ args, ac);
+ XmStringFree(label_str);
+ XtAddCallback(PushButtons[i], XmNactivateCallback, f_PushButtons,
+ (XtPointer) i);
+ XtManageChild(PushButtons[i]);
+ }
+ XtManageChild(PushButtonRow);
+
+/* list and toggles in row like that (row(list)(TogglesRow(toggles...))) */
+ ac = 0;
+ XtSetArg(args[ac], XmNtopAttachment, XmATTACH_WIDGET);
+ ac++;
+ XtSetArg(args[ac], XmNtopWidget, Label);
+ ac++;
+ XtSetArg(args[ac], XmNrightAttachment, XmATTACH_FORM);
+ ac++;
+ XtSetArg(args[ac], XmNleftAttachment, XmATTACH_FORM);
+ ac++;
+ XtSetArg(args[ac], XmNbottomAttachment, XmATTACH_WIDGET);
+ ac++;
+ XtSetArg(args[ac], XmNbottomWidget, PushButtonRow);
+ ac++;
+ XtSetArg(args[ac], XmNorientation, XmHORIZONTAL);
+ ac++;
+ Row = XmCreateRowColumn(father, "Row", args, ac);
+
+ for (i = 0; i < numprocs; i++) {
+ (void) sprintf(string, "%-14s%s", LockProcs[i].cmdline_arg,
+ LockProcs[i].desc);
+ TabXmStr[i] = XmStringCreate(string, XmSTRING_DEFAULT_CHARSET);
+ }
+ ac = 0;
+ XtSetArg(args[ac], XmNitems, TabXmStr);
+ ac++;
+ XtSetArg(args[ac], XmNitemCount, numprocs);
+ ac++;
+ XtSetArg(args[ac], XmNvisibleItemCount, 10);
+ ac++;
+ ScrolledListModes = XmCreateScrolledList(Row, "ScrolledListModes",
+ args, ac);
+ XtAddCallback(ScrolledListModes, XmNbrowseSelectionCallback,
+ f_ScrolledListModes, NULL);
+ XtManageChild(ScrolledListModes);
+
+ TogglesRow = XmCreateRowColumn(Row, "TogglesRow", NULL, 0);
+ for (i = 0; i < TOGGLES; i++) {
+ ac = 0;
+ label_str = XmStringCreate(r_Toggles[i], XmSTRING_DEFAULT_CHARSET);
+ XtSetArg(args[ac], XmNlabelString, label_str);
+ ac++;
+ Toggles[i] = XmCreateToggleButton(TogglesRow, r_Toggles[i], args, ac);
+ XmStringFree(label_str);
+ XtManageChild(Toggles[i]);
+ }
+ XtManageChild(TogglesRow);
+
+ XtManageChild(Row);
+ for (i = 0; i < numprocs; i++) {
+ XmStringFree(TabXmStr[i]);
+ }
+}
+
+int
+main(int argc, char **argv)
+{
+ Widget form;
+ Arg args[15];
+
+/* PURIFY 4.0.1 on Solaris 2 reports an unitialized memory read on the next
+ line. */
+ toplevel = XtInitialize(argv[0], "XmLock", NULL, 0, &argc, argv);
+ XtSetArg(args[0], XtNiconPixmap,
+ XCreateBitmapFromData(XtDisplay(toplevel),
+ RootWindowOfScreen(XtScreen(toplevel)),
+ (char *) image_bits, image_width, image_height));
+ XtSetValues(toplevel, args, 1);
+ /* creation Widget */
+/* PURIFY 4.0.1 on Solaris 2 reports an unitialized memory read on the next
+ line. */
+ form = XmCreateForm(toplevel, "Form", NULL, 0);
+ Setup_Widget(form);
+ Setup_Option(Menuoption);
+ XtManageChild(form);
+ XtRealizeWidget(toplevel);
+#if USE_XMU
+ XtAddEventHandler(toplevel, (EventMask) 0, TRUE,
+ (XtEventHandler) _XEditResCheckMessages, NULL);
+/* With this handler you can use editres */
+#endif
+ XtMainLoop();
+#ifdef VMS
+ return 1;
+#else
+ return 0;
+#endif
+}