ftp://ftp.sunet.se/pub/os/Linux/distributions/ultrapenguin/ultrapenguin-1.1/SRPMS...
authorZygo Blaxell <zblaxell@hungrycats.org>
Mon, 2 Mar 2009 05:42:22 +0000 (00:42 -0500)
committerZygo Blaxell <zblaxell@hungrycats.org>
Mon, 2 Mar 2009 05:42:22 +0000 (00:42 -0500)
-rw-r--r-- 1 zblaxell zblaxell 644819 Feb 27 16:56 xscreensaver-2.10-2.src.rpm
6fa56ee5eb79337797c2c9c4c7638a6331703650  xscreensaver-2.10-2.src.rpm

xscreensaver-2.10.tar.gz
-rw-r--r-- 2 zblaxell zblaxell 643509 Oct 23  1997 xscreensaver-2.10.tar.gz
91d4644bc55c8803b7e6741b0748fff3e1013378  xscreensaver-2.10.tar.gz

34 files changed:
README
config.h.in
configure
configure.in
driver/XScreenSaver.ad.in
driver/XScreenSaver_ad.h
driver/passwd.c
driver/stderr.c
driver/windows.c
driver/xscreensaver.man
hacks/Makefile.in
hacks/compile_axp.com
hacks/compile_decc.com
hacks/coral.c [new file with mode: 0644]
hacks/helix.c
hacks/helix.man
hacks/link_axp.com
hacks/link_decc.com
hacks/maze.c
hacks/maze.man
hacks/qix.c
hacks/rd-bomb.c [new file with mode: 0644]
hacks/rd-bomb.man [new file with mode: 0644]
hacks/rocks.c
hacks/rocks.man
hacks/rorschach.c
hacks/rorschach.man
hacks/sierpinski.c
setup.com
utils/Makefile.in
utils/colors.c
utils/erase.c [new file with mode: 0644]
utils/erase.h [new file with mode: 0644]
utils/version.h

diff --git a/README b/README
index a8e65ba756020761809a093caf78b0d689b112b2..22e0c4f8f10bb6ddbac8380804c603eaa596a725 100644 (file)
--- a/README
+++ b/README
@@ -105,6 +105,8 @@ window, which are pointed at by the screensaver's default resource settings.
    goop                - Squishy transparent oil-and-bubble images
    starfish    - Radially-symmetric throbbing colormap-hacking blobs.
    munch       - The classic 1962-vintage "munching squares" hack.
    goop                - Squishy transparent oil-and-bubble images
    starfish    - Radially-symmetric throbbing colormap-hacking blobs.
    munch       - The classic 1962-vintage "munching squares" hack.
+   rd-bomb      - Reaction-diffusion fractals.
+   coral        - Simulation of coral growth, sort of.
    fadeplot    - Draws a swimming ribbon.
    escher      - Draws some escher-like scenes (GLX only.)
    gears       - Draws interlocking rotating gears (GLX only.)
    fadeplot    - Draws a swimming ribbon.
    escher      - Draws some escher-like scenes (GLX only.)
    gears       - Draws interlocking rotating gears (GLX only.)
@@ -140,6 +142,13 @@ http://people.netscape.com/jwz/xscreensaver/.
        -- Jamie Zawinski <jwz@netscape.com>
 
 \f
        -- Jamie Zawinski <jwz@netscape.com>
 
 \f
+Changes since 2.09:    Fixed color bugs in rd-bomb; sped up coral.
+Changes since 2.07:    New hacks "rd-bomb" and "coral".
+                       New version of "maze" with some new algorithms.
+                       New colorized version of "rocks".
+                       Fixed a bug in qix on 64-bit machines.
+                       Fixed a bug in the -time option.
+                       Fixed a bug in configure related to LessTif.
 Changes since 2.06:    Minor header tweaks in windows.c and flag.c.
                        Made multi-architecture (VPATH) builds work properly.
                        Merged new GL stuff from xlockmore (rubik, morph3d.)
 Changes since 2.06:    Minor header tweaks in windows.c and flag.c.
                        Made multi-architecture (VPATH) builds work properly.
                        Merged new GL stuff from xlockmore (rubik, morph3d.)
index 8cac343a3613928832d4226a26c82148d6afd1e0..c9ff754e07bba69bb2fcc450b4ff80e18a675be9 100644 (file)
  */
 #undef HAVE_MESA_GL
 
  */
 #undef HAVE_MESA_GL
 
+/*  Define this if you have the X Shared Memory Extension.
+ */
+#undef HAVE_XSHM_EXTENSION
+
 /*  Some screenhacks like to run an external program to generate random pieces
     of text; set this to the one you like ("yow" and "fortune" are the most
     likely prospects.)  Note that this is just the default; X resources can
 /*  Some screenhacks like to run an external program to generate random pieces
     of text; set this to the one you like ("yow" and "fortune" are the most
     likely prospects.)  Note that this is just the default; X resources can
index 83a5d96a4e4424a58f99f778b871e30438e5fc63..28f08460f2bb69ab17f97f17b540daac8a253c08 100755 (executable)
--- a/configure
+++ b/configure
@@ -46,6 +46,10 @@ ac_help="$ac_help
                           if possible (this is the default).
   --without-xidle-ext     Do not compile in support for this extension."
 ac_help="$ac_help
                           if possible (this is the default).
   --without-xidle-ext     Do not compile in support for this extension."
 ac_help="$ac_help
+  --with-xshm-ext         Include support for the XSHM (Shared Memory) server
+                          extension, if possible (this is the default).
+  --without-xshm-ext      Do not compile in support for this extension."
+ac_help="$ac_help
 
 Toolkit options:
 
 
 Toolkit options:
 
@@ -629,7 +633,7 @@ 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
 fi
 
 echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:633: checking host system type" >&5
+echo "configure:637: checking host system type" >&5
 
 host_alias=$host
 case "$host_alias" in
 
 host_alias=$host
 case "$host_alias" in
@@ -653,7 +657,7 @@ echo "$ac_t""$host" 1>&6
 # 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
 # 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:657: checking for $ac_word" >&5
+echo "configure:661: 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 eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -682,7 +686,7 @@ 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
   # 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:686: checking for $ac_word" >&5
+echo "configure:690: 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 eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -730,7 +734,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:734: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:738: 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_ext=c
 # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -740,11 +744,11 @@ ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS
 cross_compiling=$ac_cv_prog_cc_cross
 
 cat > conftest.$ac_ext <<EOF
 cross_compiling=$ac_cv_prog_cc_cross
 
 cat > conftest.$ac_ext <<EOF
-#line 744 "configure"
+#line 748 "configure"
 #include "confdefs.h"
 main(){return(0);}
 EOF
 #include "confdefs.h"
 main(){return(0);}
 EOF
-if { (eval echo configure:748: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:752: \"$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_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -764,12 +768,12 @@ 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: 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:768: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:772: 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 "$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:773: checking whether we are using GNU C" >&5
+echo "configure:777: 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
 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -778,7 +782,7 @@ else
   yes;
 #endif
 EOF
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:782: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:786: \"$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
   ac_cv_prog_gcc=yes
 else
   ac_cv_prog_gcc=no
@@ -793,7 +797,7 @@ if test $ac_cv_prog_gcc = yes; then
   ac_save_CFLAGS="$CFLAGS"
   CFLAGS=
   echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
   ac_save_CFLAGS="$CFLAGS"
   CFLAGS=
   echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:797: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:801: 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
 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -823,7 +827,7 @@ fi
 
 if test -z "$GCC"; then
   echo $ac_n "checking how to request ANSI compilation""... $ac_c" 1>&6
 
 if test -z "$GCC"; then
   echo $ac_n "checking how to request ANSI compilation""... $ac_c" 1>&6
-echo "configure:827: checking how to request ANSI compilation" >&5
+echo "configure:831: checking how to request ANSI compilation" >&5
   case "$host" in
     *-hpux*)
       echo "$ac_t""HPUX: adding -Ae" 1>&6
   case "$host" in
     *-hpux*)
       echo "$ac_t""HPUX: adding -Ae" 1>&6
@@ -841,16 +845,16 @@ fi
 
 
 echo $ac_n "checking whether the compiler works on ANSI C""... $ac_c" 1>&6
 
 
 echo $ac_n "checking whether the compiler works on ANSI C""... $ac_c" 1>&6
-echo "configure:845: checking whether the compiler works on ANSI C" >&5
+echo "configure:849: checking whether the compiler works on ANSI C" >&5
 if test "$cross_compiling" = yes; then
   { echo "configure: error: Couldn't build even a trivial ANSI C program: check CC." 1>&2; exit 1; }
 else
   cat > conftest.$ac_ext <<EOF
 if test "$cross_compiling" = yes; then
   { echo "configure: error: Couldn't build even a trivial ANSI C program: check CC." 1>&2; exit 1; }
 else
   cat > conftest.$ac_ext <<EOF
-#line 850 "configure"
+#line 854 "configure"
 #include "confdefs.h"
  main(int ac, char **av) { return 0; } 
 EOF
 #include "confdefs.h"
  main(int ac, char **av) { return 0; } 
 EOF
-if { (eval echo configure:854: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:858: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
 then
   echo "$ac_t""yes" 1>&6
 else
 then
   echo "$ac_t""yes" 1>&6
 else
@@ -879,7 +883,7 @@ esac
 
 
 echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
 
 
 echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:883: checking how to run the C preprocessor" >&5
+echo "configure:887: checking how to run the C preprocessor" >&5
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
@@ -894,13 +898,13 @@ else
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp.
   cat > conftest.$ac_ext <<EOF
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp.
   cat > conftest.$ac_ext <<EOF
-#line 898 "configure"
+#line 902 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:904: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:908: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   :
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   :
@@ -911,13 +915,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 915 "configure"
+#line 919 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:921: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:925: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   :
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   :
@@ -950,7 +954,7 @@ echo "$ac_t""$CPP" 1>&6
 # 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
 # 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:954: checking for a BSD compatible install" >&5
+echo "configure:958: 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
 if test -z "$INSTALL"; then
 if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -1000,7 +1004,7 @@ test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
 echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
 echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:1004: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:1008: checking whether ${MAKE-make} sets \${MAKE}" >&5
 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -1028,12 +1032,12 @@ fi
 
 
 echo $ac_n "checking for working const""... $ac_c" 1>&6
 
 
 echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:1032: checking for working const" >&5
+echo "configure:1036: 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
 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 1037 "configure"
+#line 1041 "configure"
 #include "confdefs.h"
 
 int main() {
 #include "confdefs.h"
 
 int main() {
@@ -1082,7 +1086,7 @@ ccp = (char const *const *) p;
 
 ; return 0; }
 EOF
 
 ; return 0; }
 EOF
-if { (eval echo configure:1086: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1090: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_const=yes
 else
   rm -rf conftest*
   ac_cv_c_const=yes
 else
@@ -1103,21 +1107,21 @@ EOF
 fi
 
 echo $ac_n "checking for inline""... $ac_c" 1>&6
 fi
 
 echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:1107: checking for inline" >&5
+echo "configure:1111: 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
 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 1114 "configure"
+#line 1118 "configure"
 #include "confdefs.h"
 
 int main() {
 } $ac_kw foo() {
 ; return 0; }
 EOF
 #include "confdefs.h"
 
 int main() {
 } $ac_kw foo() {
 ; return 0; }
 EOF
-if { (eval echo configure:1121: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1125: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_inline=$ac_kw; break
 else
   rm -rf conftest*
   ac_cv_c_inline=$ac_kw; break
 else
@@ -1144,12 +1148,12 @@ esac
 
 
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
 
 
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:1148: checking for ANSI C header files" >&5
+echo "configure:1152: 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
 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 1153 "configure"
+#line 1157 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -1157,7 +1161,7 @@ else
 #include <float.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
 #include <float.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1161: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1165: \"$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_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -1174,7 +1178,7 @@ 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
 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 1178 "configure"
+#line 1182 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -1192,7 +1196,7 @@ 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
 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 1196 "configure"
+#line 1200 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -1213,7 +1217,7 @@ if test "$cross_compiling" = yes; then
   :
 else
   cat > conftest.$ac_ext <<EOF
   :
 else
   cat > conftest.$ac_ext <<EOF
-#line 1217 "configure"
+#line 1221 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -1224,7 +1228,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
 exit (0); }
 
 EOF
 exit (0); }
 
 EOF
-if { (eval echo configure:1228: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1232: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
 then
   :
 else
 then
   :
 else
@@ -1248,12 +1252,12 @@ EOF
 fi
 
 echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
 fi
 
 echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-echo "configure:1252: checking whether time.h and sys/time.h may both be included" >&5
+echo "configure:1256: 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
 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 1257 "configure"
+#line 1261 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/time.h>
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/time.h>
@@ -1262,7 +1266,7 @@ int main() {
 struct tm *tp;
 ; return 0; }
 EOF
 struct tm *tp;
 ; return 0; }
 EOF
-if { (eval echo configure:1266: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1270: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_time=yes
 else
   rm -rf conftest*
   ac_cv_header_time=yes
 else
@@ -1283,12 +1287,12 @@ EOF
 fi
 
 echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6
 fi
 
 echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6
-echo "configure:1287: checking for sys/wait.h that is POSIX.1 compatible" >&5
+echo "configure:1291: checking for sys/wait.h that is POSIX.1 compatible" >&5
 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1292 "configure"
+#line 1296 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/wait.h>
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/wait.h>
@@ -1304,7 +1308,7 @@ wait (&s);
 s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
 ; return 0; }
 EOF
 s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
 ; return 0; }
 EOF
-if { (eval echo configure:1308: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1312: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_sys_wait_h=yes
 else
   rm -rf conftest*
   ac_cv_header_sys_wait_h=yes
 else
@@ -1329,12 +1333,12 @@ 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
 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:1333: checking for $ac_hdr that defines DIR" >&5
+echo "configure:1337: 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
 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 1338 "configure"
+#line 1342 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <$ac_hdr>
 #include "confdefs.h"
 #include <sys/types.h>
 #include <$ac_hdr>
@@ -1342,7 +1346,7 @@ int main() {
 DIR *dirp = 0;
 ; return 0; }
 EOF
 DIR *dirp = 0;
 ; return 0; }
 EOF
-if { (eval echo configure:1346: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1350: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   eval "ac_cv_header_dirent_$ac_safe=yes"
 else
   rm -rf conftest*
   eval "ac_cv_header_dirent_$ac_safe=yes"
 else
@@ -1367,7 +1371,7 @@ 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
 # 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:1371: checking for opendir in -ldir" >&5
+echo "configure:1375: 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
 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
@@ -1375,7 +1379,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldir  $LIBS"
 cat > conftest.$ac_ext <<EOF
   ac_save_LIBS="$LIBS"
 LIBS="-ldir  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 1379 "configure"
+#line 1383 "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
 #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
@@ -1386,7 +1390,7 @@ int main() {
 opendir()
 ; return 0; }
 EOF
 opendir()
 ; return 0; }
 EOF
-if { (eval echo configure:1390: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1394: \"$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
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -1408,7 +1412,7 @@ fi
 
 else
 echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
 
 else
 echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
-echo "configure:1412: checking for opendir in -lx" >&5
+echo "configure:1416: 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
 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
@@ -1416,7 +1420,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lx  $LIBS"
 cat > conftest.$ac_ext <<EOF
   ac_save_LIBS="$LIBS"
 LIBS="-lx  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 1420 "configure"
+#line 1424 "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
 #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
@@ -1427,7 +1431,7 @@ int main() {
 opendir()
 ; return 0; }
 EOF
 opendir()
 ; return 0; }
 EOF
-if { (eval echo configure:1431: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1435: \"$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
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -1451,12 +1455,12 @@ fi
 
 
 echo $ac_n "checking for mode_t""... $ac_c" 1>&6
 
 
 echo $ac_n "checking for mode_t""... $ac_c" 1>&6
-echo "configure:1455: checking for mode_t" >&5
+echo "configure:1459: checking for mode_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1460 "configure"
+#line 1464 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -1484,12 +1488,12 @@ EOF
 fi
 
 echo $ac_n "checking for pid_t""... $ac_c" 1>&6
 fi
 
 echo $ac_n "checking for pid_t""... $ac_c" 1>&6
-echo "configure:1488: checking for pid_t" >&5
+echo "configure:1492: 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
 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 1493 "configure"
+#line 1497 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -1517,12 +1521,12 @@ EOF
 fi
 
 echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
 fi
 
 echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
-echo "configure:1521: checking return type of signal handlers" >&5
+echo "configure:1525: checking return type of signal handlers" >&5
 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1526 "configure"
+#line 1530 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <signal.h>
 #include "confdefs.h"
 #include <sys/types.h>
 #include <signal.h>
@@ -1539,7 +1543,7 @@ int main() {
 int i;
 ; return 0; }
 EOF
 int i;
 ; return 0; }
 EOF
-if { (eval echo configure:1543: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1547: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_type_signal=void
 else
   rm -rf conftest*
   ac_cv_type_signal=void
 else
@@ -1558,12 +1562,12 @@ EOF
 
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
 
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:1562: checking for size_t" >&5
+echo "configure:1566: 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
 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 1567 "configure"
+#line 1571 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -1593,12 +1597,12 @@ fi
 
 
 echo $ac_n "checking how to call gettimeofday""... $ac_c" 1>&6
 
 
 echo $ac_n "checking how to call gettimeofday""... $ac_c" 1>&6
-echo "configure:1597: checking how to call gettimeofday" >&5
+echo "configure:1601: checking how to call gettimeofday" >&5
 if eval "test \"`echo '$''{'ac_cv_gettimeofday_args'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
 if eval "test \"`echo '$''{'ac_cv_gettimeofday_args'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1602 "configure"
+#line 1606 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
                  #include <sys/time.h>
 #include "confdefs.h"
 #include <stdlib.h>
                  #include <sys/time.h>
@@ -1606,7 +1610,7 @@ int main() {
 struct timeval tv; gettimeofday(&tv);
 ; return 0; }
 EOF
 struct timeval tv; gettimeofday(&tv);
 ; return 0; }
 EOF
-if { (eval echo configure:1610: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1614: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_gettimeofday_args=1
 else
   rm -rf conftest*
   ac_gettimeofday_args=1
 else
@@ -1614,7 +1618,7 @@ else
   cat conftest.$ac_ext >&5
   rm -rf conftest*
   cat > conftest.$ac_ext <<EOF
   cat conftest.$ac_ext >&5
   rm -rf conftest*
   cat > conftest.$ac_ext <<EOF
-#line 1618 "configure"
+#line 1622 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
                                  #include <sys/time.h>
 #include "confdefs.h"
 #include <stdlib.h>
                                  #include <sys/time.h>
@@ -1623,7 +1627,7 @@ struct timeval tv; struct timezone tzp;
                                  gettimeofday(&tv, &tzp);
 ; return 0; }
 EOF
                                  gettimeofday(&tv, &tzp);
 ; return 0; }
 EOF
-if { (eval echo configure:1627: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1631: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_gettimeofday_args=2
 else
   rm -rf conftest*
   ac_gettimeofday_args=2
 else
@@ -1663,12 +1667,12 @@ fi
 for ac_func in select fcntl uname nice setpriority getcwd getwd putenv
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
 for ac_func in select fcntl uname nice setpriority getcwd getwd putenv
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:1667: checking for $ac_func" >&5
+echo "configure:1671: 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
 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 1672 "configure"
+#line 1676 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -1691,7 +1695,7 @@ $ac_func();
 
 ; return 0; }
 EOF
 
 ; return 0; }
 EOF
-if { (eval echo configure:1695: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1699: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -1719,17 +1723,17 @@ for ac_hdr in unistd.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:1723: checking for $ac_hdr" >&5
+echo "configure:1727: 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
 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 1728 "configure"
+#line 1732 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1733: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1737: \"$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_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -1781,7 +1785,7 @@ fi
 # 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
 # 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:1785: checking for X" >&5
+echo "configure:1789: checking for X" >&5
 
 # Check whether --with-x or --without-x was given.
 if test "${with_x+set}" = set; then
 
 # Check whether --with-x or --without-x was given.
 if test "${with_x+set}" = set; then
@@ -1843,12 +1847,12 @@ if test "$ac_x_includes" = NO; then
 
   # First, try using that file with no special directory specified.
 cat > conftest.$ac_ext <<EOF
 
   # First, try using that file with no special directory specified.
 cat > conftest.$ac_ext <<EOF
-#line 1847 "configure"
+#line 1851 "configure"
 #include "confdefs.h"
 #include <$x_direct_test_include>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
 #include "confdefs.h"
 #include <$x_direct_test_include>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1852: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1856: \"$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_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -1917,14 +1921,14 @@ if test "$ac_x_libraries" = NO; then
   ac_save_LIBS="$LIBS"
   LIBS="-l$x_direct_test_library $LIBS"
 cat > conftest.$ac_ext <<EOF
   ac_save_LIBS="$LIBS"
   LIBS="-l$x_direct_test_library $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 1921 "configure"
+#line 1925 "configure"
 #include "confdefs.h"
 
 int main() {
 ${x_direct_test_function}()
 ; return 0; }
 EOF
 #include "confdefs.h"
 
 int main() {
 ${x_direct_test_function}()
 ; return 0; }
 EOF
-if { (eval echo configure:1928: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1932: \"$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.
   rm -rf conftest*
   LIBS="$ac_save_LIBS"
 # We can link X programs with no special library path.
@@ -2030,17 +2034,17 @@ else
     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
     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:2034: checking whether -R must be followed by a space" >&5
+echo "configure:2038: checking whether -R must be followed by a space" >&5
       ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries"
       cat > conftest.$ac_ext <<EOF
       ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries"
       cat > conftest.$ac_ext <<EOF
-#line 2037 "configure"
+#line 2041 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:2044: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2048: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   ac_R_nospace=yes
 else
   rm -rf conftest*
   ac_R_nospace=yes
 else
@@ -2056,14 +2060,14 @@ rm -f conftest*
       else
        LIBS="$ac_xsave_LIBS -R $x_libraries"
        cat > conftest.$ac_ext <<EOF
       else
        LIBS="$ac_xsave_LIBS -R $x_libraries"
        cat > conftest.$ac_ext <<EOF
-#line 2060 "configure"
+#line 2064 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:2067: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2071: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   ac_R_space=yes
 else
   rm -rf conftest*
   ac_R_space=yes
 else
@@ -2095,7 +2099,7 @@ rm -f conftest*
     # 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
     # 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:2099: checking for dnet_ntoa in -ldnet" >&5
+echo "configure:2103: 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
 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
@@ -2103,7 +2107,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldnet  $LIBS"
 cat > conftest.$ac_ext <<EOF
   ac_save_LIBS="$LIBS"
 LIBS="-ldnet  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2107 "configure"
+#line 2111 "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
 #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
@@ -2114,7 +2118,7 @@ int main() {
 dnet_ntoa()
 ; return 0; }
 EOF
 dnet_ntoa()
 ; return 0; }
 EOF
-if { (eval echo configure:2118: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2122: \"$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
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2136,7 +2140,7 @@ 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
 
     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:2140: checking for dnet_ntoa in -ldnet_stub" >&5
+echo "configure:2144: 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
 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
@@ -2144,7 +2148,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldnet_stub  $LIBS"
 cat > conftest.$ac_ext <<EOF
   ac_save_LIBS="$LIBS"
 LIBS="-ldnet_stub  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2148 "configure"
+#line 2152 "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
 #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
@@ -2155,7 +2159,7 @@ int main() {
 dnet_ntoa()
 ; return 0; }
 EOF
 dnet_ntoa()
 ; return 0; }
 EOF
-if { (eval echo configure:2159: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2163: \"$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
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2184,12 +2188,12 @@ fi
     # 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
     # 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:2188: checking for gethostbyname" >&5
+echo "configure:2192: 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
 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 2193 "configure"
+#line 2197 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char gethostbyname(); below.  */
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char gethostbyname(); below.  */
@@ -2212,7 +2216,7 @@ gethostbyname();
 
 ; return 0; }
 EOF
 
 ; return 0; }
 EOF
-if { (eval echo configure:2216: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2220: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_func_gethostbyname=yes"
 else
   rm -rf conftest*
   eval "ac_cv_func_gethostbyname=yes"
 else
@@ -2233,7 +2237,7 @@ fi
 
     if test $ac_cv_func_gethostbyname = no; then
       echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
 
     if test $ac_cv_func_gethostbyname = no; then
       echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
-echo "configure:2237: checking for gethostbyname in -lnsl" >&5
+echo "configure:2241: 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
 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
@@ -2241,7 +2245,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lnsl  $LIBS"
 cat > conftest.$ac_ext <<EOF
   ac_save_LIBS="$LIBS"
 LIBS="-lnsl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2245 "configure"
+#line 2249 "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
 #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
@@ -2252,7 +2256,7 @@ int main() {
 gethostbyname()
 ; return 0; }
 EOF
 gethostbyname()
 ; return 0; }
 EOF
-if { (eval echo configure:2256: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2260: \"$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
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2282,12 +2286,12 @@ fi
     # -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
     # -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:2286: checking for connect" >&5
+echo "configure:2290: 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
 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 2291 "configure"
+#line 2295 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char connect(); below.  */
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char connect(); below.  */
@@ -2310,7 +2314,7 @@ connect();
 
 ; return 0; }
 EOF
 
 ; return 0; }
 EOF
-if { (eval echo configure:2314: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2318: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_func_connect=yes"
 else
   rm -rf conftest*
   eval "ac_cv_func_connect=yes"
 else
@@ -2331,7 +2335,7 @@ fi
 
     if test $ac_cv_func_connect = no; then
       echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6
 
     if test $ac_cv_func_connect = no; then
       echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6
-echo "configure:2335: checking for connect in -lsocket" >&5
+echo "configure:2339: 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
 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
@@ -2339,7 +2343,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2343 "configure"
+#line 2347 "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
 #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
@@ -2350,7 +2354,7 @@ int main() {
 connect()
 ; return 0; }
 EOF
 connect()
 ; return 0; }
 EOF
-if { (eval echo configure:2354: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2358: \"$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
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2374,12 +2378,12 @@ fi
 
     # gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX.
     echo $ac_n "checking for remove""... $ac_c" 1>&6
 
     # gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX.
     echo $ac_n "checking for remove""... $ac_c" 1>&6
-echo "configure:2378: checking for remove" >&5
+echo "configure:2382: 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
 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 2383 "configure"
+#line 2387 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char remove(); below.  */
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char remove(); below.  */
@@ -2402,7 +2406,7 @@ remove();
 
 ; return 0; }
 EOF
 
 ; return 0; }
 EOF
-if { (eval echo configure:2406: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2410: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_func_remove=yes"
 else
   rm -rf conftest*
   eval "ac_cv_func_remove=yes"
 else
@@ -2423,7 +2427,7 @@ fi
 
     if test $ac_cv_func_remove = no; then
       echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6
 
     if test $ac_cv_func_remove = no; then
       echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6
-echo "configure:2427: checking for remove in -lposix" >&5
+echo "configure:2431: 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
 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
@@ -2431,7 +2435,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lposix  $LIBS"
 cat > conftest.$ac_ext <<EOF
   ac_save_LIBS="$LIBS"
 LIBS="-lposix  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2435 "configure"
+#line 2439 "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
 #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
@@ -2442,7 +2446,7 @@ int main() {
 remove()
 ; return 0; }
 EOF
 remove()
 ; return 0; }
 EOF
-if { (eval echo configure:2446: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2450: \"$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
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2466,12 +2470,12 @@ fi
 
     # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
     echo $ac_n "checking for shmat""... $ac_c" 1>&6
 
     # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
     echo $ac_n "checking for shmat""... $ac_c" 1>&6
-echo "configure:2470: checking for shmat" >&5
+echo "configure:2474: 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
 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 2475 "configure"
+#line 2479 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char shmat(); below.  */
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char shmat(); below.  */
@@ -2494,7 +2498,7 @@ shmat();
 
 ; return 0; }
 EOF
 
 ; return 0; }
 EOF
-if { (eval echo configure:2498: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2502: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_func_shmat=yes"
 else
   rm -rf conftest*
   eval "ac_cv_func_shmat=yes"
 else
@@ -2515,7 +2519,7 @@ fi
 
     if test $ac_cv_func_shmat = no; then
       echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6
 
     if test $ac_cv_func_shmat = no; then
       echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6
-echo "configure:2519: checking for shmat in -lipc" >&5
+echo "configure:2523: 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
 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
@@ -2523,7 +2527,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lipc  $LIBS"
 cat > conftest.$ac_ext <<EOF
   ac_save_LIBS="$LIBS"
 LIBS="-lipc  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2527 "configure"
+#line 2531 "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
 #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
@@ -2534,7 +2538,7 @@ int main() {
 shmat()
 ; return 0; }
 EOF
 shmat()
 ; return 0; }
 EOF
-if { (eval echo configure:2538: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2542: \"$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
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2567,7 +2571,7 @@ fi
   # 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
   # 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:2571: checking for IceConnectionNumber in -lICE" >&5
+echo "configure:2575: 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
 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
@@ -2575,7 +2579,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lICE  $LIBS"
 cat > conftest.$ac_ext <<EOF
   ac_save_LIBS="$LIBS"
 LIBS="-lICE  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2579 "configure"
+#line 2583 "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
 #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
@@ -2586,7 +2590,7 @@ int main() {
 IceConnectionNumber()
 ; return 0; }
 EOF
 IceConnectionNumber()
 ; return 0; }
 EOF
-if { (eval echo configure:2590: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2594: \"$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
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2623,7 +2627,7 @@ fi
 
 
     echo $ac_n "checking for X app-defaults directory""... $ac_c" 1>&6
 
 
     echo $ac_n "checking for X app-defaults directory""... $ac_c" 1>&6
-echo "configure:2627: checking for X app-defaults directory" >&5
+echo "configure:2631: checking for X app-defaults directory" >&5
 if eval "test \"`echo '$''{'ac_cv_x_app_defaults'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
 if eval "test \"`echo '$''{'ac_cv_x_app_defaults'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2744,7 +2748,7 @@ APPDEFAULTS=$ac_x_app_defaults
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 2748 "configure"
+#line 2752 "configure"
 #include "confdefs.h"
 #include <X11/XHPlib.h>
 EOF
 #include "confdefs.h"
 #include <X11/XHPlib.h>
 EOF
@@ -2765,7 +2769,7 @@ rm -f conftest*
 # Check for the availability of the XPointer typedef, and define it otherwise.
 #
 echo $ac_n "checking for XPointer""... $ac_c" 1>&6
 # Check for the availability of the XPointer typedef, and define it otherwise.
 #
 echo $ac_n "checking for XPointer""... $ac_c" 1>&6
-echo "configure:2769: checking for XPointer" >&5
+echo "configure:2773: checking for XPointer" >&5
 if eval "test \"`echo '$''{'ac_cv_xpointer'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
 if eval "test \"`echo '$''{'ac_cv_xpointer'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2776,14 +2780,14 @@ else
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 2780 "configure"
+#line 2784 "configure"
 #include "confdefs.h"
 #include <X11/Xlib.h>
 int main() {
 XPointer foo = (XPointer) 0;
 ; return 0; }
 EOF
 #include "confdefs.h"
 #include <X11/Xlib.h>
 int main() {
 XPointer foo = (XPointer) 0;
 ; return 0; }
 EOF
-if { (eval echo configure:2787: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2791: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_xpointer=yes
 else
   rm -rf conftest*
   ac_cv_xpointer=yes
 else
@@ -2835,7 +2839,7 @@ case "$host" in
 
       # Some versions of Slowlaris Motif require -lgen.  But not all.  Why?
       echo $ac_n "checking for regcmp in -lgen""... $ac_c" 1>&6
 
       # Some versions of Slowlaris Motif require -lgen.  But not all.  Why?
       echo $ac_n "checking for regcmp in -lgen""... $ac_c" 1>&6
-echo "configure:2839: checking for regcmp in -lgen" >&5
+echo "configure:2843: checking for regcmp in -lgen" >&5
 ac_lib_var=`echo gen'_'regcmp | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 ac_lib_var=`echo gen'_'regcmp | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2843,7 +2847,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgen  $LIBS"
 cat > conftest.$ac_ext <<EOF
   ac_save_LIBS="$LIBS"
 LIBS="-lgen  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2847 "configure"
+#line 2851 "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
 #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
@@ -2854,7 +2858,7 @@ int main() {
 regcmp()
 ; return 0; }
 EOF
 regcmp()
 ; return 0; }
 EOF
-if { (eval echo configure:2858: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2862: \"$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
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2891,17 +2895,17 @@ have_xmu=no
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "X11/Xmu/Error.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/Xmu/Error.h""... $ac_c" 1>&6
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "X11/Xmu/Error.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/Xmu/Error.h""... $ac_c" 1>&6
-echo "configure:2895: checking for X11/Xmu/Error.h" >&5
+echo "configure:2899: checking for X11/Xmu/Error.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
 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 2900 "configure"
+#line 2904 "configure"
 #include "confdefs.h"
 #include <X11/Xmu/Error.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
 #include "confdefs.h"
 #include <X11/Xmu/Error.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2905: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2909: \"$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_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -2945,7 +2949,7 @@ if test $have_xmu = yes ; then
   case "$host" in
     *-sunos4*)
     echo $ac_n "checking for the SunOS 4.1.x _get_wmShellWidgetClass bug""... $ac_c" 1>&6
   case "$host" in
     *-sunos4*)
     echo $ac_n "checking for the SunOS 4.1.x _get_wmShellWidgetClass bug""... $ac_c" 1>&6
-echo "configure:2949: checking for the SunOS 4.1.x _get_wmShellWidgetClass bug" >&5
+echo "configure:2953: checking for the SunOS 4.1.x _get_wmShellWidgetClass bug" >&5
 if eval "test \"`echo '$''{'ac_cv_sunos_xmu_bug'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
 if eval "test \"`echo '$''{'ac_cv_sunos_xmu_bug'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2958,14 +2962,14 @@ else
                    # with X libraries because we know it's SunOS.
                    LDFLAGS="$LDFLAGS -lXmu -lXt -lX11 -lXext -lm"
                    cat > conftest.$ac_ext <<EOF
                    # with X libraries because we know it's SunOS.
                    LDFLAGS="$LDFLAGS -lXmu -lXt -lX11 -lXext -lm"
                    cat > conftest.$ac_ext <<EOF
-#line 2962 "configure"
+#line 2966 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:2969: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2973: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   ac_cv_sunos_xmu_bug=no
 else
   rm -rf conftest*
   ac_cv_sunos_xmu_bug=no
 else
@@ -2981,21 +2985,21 @@ fi
 echo "$ac_t""$ac_cv_sunos_xmu_bug" 1>&6
     if test $ac_cv_sunos_xmu_bug = yes ; then
       echo $ac_n "checking whether the compiler understands -static""... $ac_c" 1>&6
 echo "$ac_t""$ac_cv_sunos_xmu_bug" 1>&6
     if test $ac_cv_sunos_xmu_bug = yes ; then
       echo $ac_n "checking whether the compiler understands -static""... $ac_c" 1>&6
-echo "configure:2985: checking whether the compiler understands -static" >&5
+echo "configure:2989: checking whether the compiler understands -static" >&5
 if eval "test \"`echo '$''{'ac_cv_ld_static'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_save_LDFLAGS="$LDFLAGS"
                      LDFLAGS="$LDFLAGS -static"
                      cat > conftest.$ac_ext <<EOF
 if eval "test \"`echo '$''{'ac_cv_ld_static'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_save_LDFLAGS="$LDFLAGS"
                      LDFLAGS="$LDFLAGS -static"
                      cat > conftest.$ac_ext <<EOF
-#line 2992 "configure"
+#line 2996 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:2999: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:3003: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   ac_cv_ld_static=yes
 else
   rm -rf conftest*
   ac_cv_ld_static=yes
 else
@@ -3041,17 +3045,17 @@ if test $with_sgi = yes; then
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "X11/extensions/XScreenSaver.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/extensions/XScreenSaver.h""... $ac_c" 1>&6
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "X11/extensions/XScreenSaver.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/extensions/XScreenSaver.h""... $ac_c" 1>&6
-echo "configure:3045: checking for X11/extensions/XScreenSaver.h" >&5
+echo "configure:3049: checking for X11/extensions/XScreenSaver.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
 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 3050 "configure"
+#line 3054 "configure"
 #include "confdefs.h"
 #include <X11/extensions/XScreenSaver.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
 #include "confdefs.h"
 #include <X11/extensions/XScreenSaver.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3055: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3059: \"$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_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3106,17 +3110,17 @@ if test $have_sgi != yes; then
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "X11/extensions/scrnsaver.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/extensions/scrnsaver.h""... $ac_c" 1>&6
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "X11/extensions/scrnsaver.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/extensions/scrnsaver.h""... $ac_c" 1>&6
-echo "configure:3110: checking for X11/extensions/scrnsaver.h" >&5
+echo "configure:3114: checking for X11/extensions/scrnsaver.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
 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 3115 "configure"
+#line 3119 "configure"
 #include "confdefs.h"
 #include <X11/extensions/scrnsaver.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
 #include "confdefs.h"
 #include <X11/extensions/scrnsaver.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3120: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3124: \"$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_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3158,7 +3162,7 @@ fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   LDFLAGS="$LDFLAGS -L$x_libraries"
   echo $ac_n "checking for XScreenSaverRegister in -lXext""... $ac_c" 1>&6
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   LDFLAGS="$LDFLAGS -L$x_libraries"
   echo $ac_n "checking for XScreenSaverRegister in -lXext""... $ac_c" 1>&6
-echo "configure:3162: checking for XScreenSaverRegister in -lXext" >&5
+echo "configure:3166: checking for XScreenSaverRegister in -lXext" >&5
 ac_lib_var=`echo Xext'_'XScreenSaverRegister | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 ac_lib_var=`echo Xext'_'XScreenSaverRegister | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -3166,7 +3170,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXext -lm $LIBS"
 cat > conftest.$ac_ext <<EOF
   ac_save_LIBS="$LIBS"
 LIBS="-lXext -lm $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3170 "configure"
+#line 3174 "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
 #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
@@ -3177,7 +3181,7 @@ int main() {
 XScreenSaverRegister()
 ; return 0; }
 EOF
 XScreenSaverRegister()
 ; return 0; }
 EOF
-if { (eval echo configure:3181: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:3185: \"$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
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3226,7 +3230,7 @@ fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   LDFLAGS="$LDFLAGS -L$x_libraries"
   echo $ac_n "checking for XScreenSaverRegister in -lXExExt""... $ac_c" 1>&6
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   LDFLAGS="$LDFLAGS -L$x_libraries"
   echo $ac_n "checking for XScreenSaverRegister in -lXExExt""... $ac_c" 1>&6
-echo "configure:3230: checking for XScreenSaverRegister in -lXExExt" >&5
+echo "configure:3234: checking for XScreenSaverRegister in -lXExExt" >&5
 ac_lib_var=`echo XExExt'_'XScreenSaverRegister | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 ac_lib_var=`echo XExExt'_'XScreenSaverRegister | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -3234,7 +3238,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXExExt -lX11 -lXext -lm $LIBS"
 cat > conftest.$ac_ext <<EOF
   ac_save_LIBS="$LIBS"
 LIBS="-lXExExt -lX11 -lXext -lm $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3238 "configure"
+#line 3242 "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
 #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
@@ -3245,7 +3249,7 @@ int main() {
 XScreenSaverRegister()
 ; return 0; }
 EOF
 XScreenSaverRegister()
 ; return 0; }
 EOF
-if { (eval echo configure:3249: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:3253: \"$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
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3289,7 +3293,7 @@ fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   LDFLAGS="$LDFLAGS -L$x_libraries"
   echo $ac_n "checking for XScreenSaverRegister in -lXss""... $ac_c" 1>&6
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   LDFLAGS="$LDFLAGS -L$x_libraries"
   echo $ac_n "checking for XScreenSaverRegister in -lXss""... $ac_c" 1>&6
-echo "configure:3293: checking for XScreenSaverRegister in -lXss" >&5
+echo "configure:3297: checking for XScreenSaverRegister in -lXss" >&5
 ac_lib_var=`echo Xss'_'XScreenSaverRegister | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 ac_lib_var=`echo Xss'_'XScreenSaverRegister | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -3297,7 +3301,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXss -lX11 -lXext -lm $LIBS"
 cat > conftest.$ac_ext <<EOF
   ac_save_LIBS="$LIBS"
 LIBS="-lXss -lX11 -lXext -lm $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3301 "configure"
+#line 3305 "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
 #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
@@ -3308,7 +3312,7 @@ int main() {
 XScreenSaverRegister()
 ; return 0; }
 EOF
 XScreenSaverRegister()
 ; return 0; }
 EOF
-if { (eval echo configure:3312: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:3316: \"$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
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3348,7 +3352,7 @@ EOF
 fi
 
 
 fi
 
 
-# Check for the XIDLE server extension header,
+# Check for the XIDLE server extension header.
 #
 have_xidle=no
 with_xidle_req=unspecified
 #
 have_xidle=no
 with_xidle_req=unspecified
@@ -3369,17 +3373,17 @@ if test $with_xidle = yes; then
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "X11/extensions/xidle.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/extensions/xidle.h""... $ac_c" 1>&6
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "X11/extensions/xidle.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/extensions/xidle.h""... $ac_c" 1>&6
-echo "configure:3373: checking for X11/extensions/xidle.h" >&5
+echo "configure:3377: checking for X11/extensions/xidle.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
 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 3378 "configure"
+#line 3382 "configure"
 #include "confdefs.h"
 #include <X11/extensions/xidle.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
 #include "confdefs.h"
 #include <X11/extensions/xidle.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3383: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3387: \"$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_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3411,6 +3415,166 @@ elif test $with_xidle != no; then
 fi
 
 
 fi
 
 
+# Check for the XSHM server extension header.
+#
+have_xshm=no
+with_xshm_req=unspecified
+# Check whether --with-xshm-ext or --without-xshm-ext was given.
+if test "${with_xshm_ext+set}" = set; then
+  withval="$with_xshm_ext"
+  with_xshm="$withval"; with_xshm_req="$withval"
+else
+  with_xshm=yes
+fi
+
+if test $with_xshm = yes; then
+
+  # first check for Xshm.h.
+  
+  ac_save_CPPFLAGS="$CPPFLAGS"
+  if test \! -z "$includedir" ; then 
+    CPPFLAGS="$CPPFLAGS -I$includedir"
+  fi
+  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+  ac_safe=`echo "X11/extensions/XShm.h" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for X11/extensions/XShm.h""... $ac_c" 1>&6
+echo "configure:3442: checking for X11/extensions/XShm.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 3447 "configure"
+#include "confdefs.h"
+#include <X11/extensions/XShm.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:3452: \"$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
+  have_xshm=yes
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+  CPPFLAGS="$ac_save_CPPFLAGS"
+
+  # if that succeeded, then check for sys/ipc.h.
+  if test $have_xshm = yes; then
+    have_xshm=no
+    
+  ac_save_CPPFLAGS="$CPPFLAGS"
+  if test \! -z "$includedir" ; then 
+    CPPFLAGS="$CPPFLAGS -I$includedir"
+  fi
+  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+  ac_safe=`echo "sys/ipc.h" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for sys/ipc.h""... $ac_c" 1>&6
+echo "configure:3486: checking for sys/ipc.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 3491 "configure"
+#include "confdefs.h"
+#include <sys/ipc.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:3496: \"$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
+  have_xshm=yes
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+  CPPFLAGS="$ac_save_CPPFLAGS"
+  fi
+
+  # if that succeeded, then check for sys/shm.h.
+  if test $have_xshm = yes; then
+    have_xshm=no
+    
+  ac_save_CPPFLAGS="$CPPFLAGS"
+  if test \! -z "$includedir" ; then 
+    CPPFLAGS="$CPPFLAGS -I$includedir"
+  fi
+  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+  ac_safe=`echo "sys/shm.h" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for sys/shm.h""... $ac_c" 1>&6
+echo "configure:3531: checking for sys/shm.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 3536 "configure"
+#include "confdefs.h"
+#include <sys/shm.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:3541: \"$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
+  have_xshm=yes
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+  CPPFLAGS="$ac_save_CPPFLAGS"
+  fi
+
+  # if that succeeded, then we've really got it.
+  if test $have_xshm = yes; then
+    cat >> confdefs.h <<\EOF
+#define HAVE_XSHM_EXTENSION 1
+EOF
+
+  fi
+
+elif test $with_xshm != no; then
+  echo "error: must be yes or no: --with-xshm-ext=$with_xshm"
+  exit 1
+fi
+
+
 # Check for Motif and Athena --with and --without arguments.
 #
 have_motif=no
 # Check for Motif and Athena --with and --without arguments.
 #
 have_motif=no
@@ -3470,17 +3634,17 @@ check_motif() {
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "Xm/Xm.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for Xm/Xm.h""... $ac_c" 1>&6
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "Xm/Xm.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for Xm/Xm.h""... $ac_c" 1>&6
-echo "configure:3474: checking for Xm/Xm.h" >&5
+echo "configure:3638: checking for Xm/Xm.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
 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 3479 "configure"
+#line 3643 "configure"
 #include "confdefs.h"
 #include <Xm/Xm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
 #include "confdefs.h"
 #include <Xm/Xm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3484: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3648: \"$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_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3518,17 +3682,17 @@ check_athena() {
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "X11/Xaw/Dialog.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/Xaw/Dialog.h""... $ac_c" 1>&6
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "X11/Xaw/Dialog.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/Xaw/Dialog.h""... $ac_c" 1>&6
-echo "configure:3522: checking for X11/Xaw/Dialog.h" >&5
+echo "configure:3686: checking for X11/Xaw/Dialog.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
 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 3527 "configure"
+#line 3691 "configure"
 #include "confdefs.h"
 #include <X11/Xaw/Dialog.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
 #include "confdefs.h"
 #include <X11/Xaw/Dialog.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3532: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3696: \"$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_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3598,7 +3762,7 @@ fi
 # XawViewportSetCoordinates in Viewport.h (R3 (or R4?) don't.)
 if test $have_athena = yes ; then
   echo $ac_n "checking for XawViewportSetCoordinates in Viewport.h""... $ac_c" 1>&6
 # XawViewportSetCoordinates in Viewport.h (R3 (or R4?) don't.)
 if test $have_athena = yes ; then
   echo $ac_n "checking for XawViewportSetCoordinates in Viewport.h""... $ac_c" 1>&6
-echo "configure:3602: checking for XawViewportSetCoordinates in Viewport.h" >&5
+echo "configure:3766: checking for XawViewportSetCoordinates in Viewport.h" >&5
 if eval "test \"`echo '$''{'ac_cv_have_XawViewportSetCoordinates'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
 if eval "test \"`echo '$''{'ac_cv_have_XawViewportSetCoordinates'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3610,7 +3774,7 @@ else
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 3614 "configure"
+#line 3778 "configure"
 #include "confdefs.h"
 #include <X11/Xaw/Viewport.h>
 EOF
 #include "confdefs.h"
 #include <X11/Xaw/Viewport.h>
 EOF
@@ -3636,9 +3800,10 @@ fi
 
 # If we have Motif, check whether it's really LessTif.
 #
 
 # If we have Motif, check whether it's really LessTif.
 #
+have_lesstif=no
 if test $have_motif = yes ; then
   echo $ac_n "checking whether Motif is really LessTif""... $ac_c" 1>&6
 if test $have_motif = yes ; then
   echo $ac_n "checking whether Motif is really LessTif""... $ac_c" 1>&6
-echo "configure:3642: checking whether Motif is really LessTif" >&5
+echo "configure:3807: checking whether Motif is really LessTif" >&5
 if eval "test \"`echo '$''{'ac_cv_have_lesstif'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
 if eval "test \"`echo '$''{'ac_cv_have_lesstif'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3649,14 +3814,14 @@ else
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 3653 "configure"
+#line 3818 "configure"
 #include "confdefs.h"
 #include <Xm/Xm.h>
 int main() {
 long vers = LesstifVersion;
 ; return 0; }
 EOF
 #include "confdefs.h"
 #include <Xm/Xm.h>
 int main() {
 long vers = LesstifVersion;
 ; return 0; }
 EOF
-if { (eval echo configure:3660: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3825: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_have_lesstif=yes
 else
   rm -rf conftest*
   ac_cv_have_lesstif=yes
 else
@@ -3695,17 +3860,17 @@ if test $with_xpm = yes; then
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "X11/xpm.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/xpm.h""... $ac_c" 1>&6
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "X11/xpm.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/xpm.h""... $ac_c" 1>&6
-echo "configure:3699: checking for X11/xpm.h" >&5
+echo "configure:3864: checking for X11/xpm.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
 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 3704 "configure"
+#line 3869 "configure"
 #include "confdefs.h"
 #include <X11/xpm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
 #include "confdefs.h"
 #include <X11/xpm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3709: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3874: \"$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_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3760,17 +3925,17 @@ if test $with_gl = yes; then
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "GL/gl.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for GL/gl.h""... $ac_c" 1>&6
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "GL/gl.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for GL/gl.h""... $ac_c" 1>&6
-echo "configure:3764: checking for GL/gl.h" >&5
+echo "configure:3929: checking for GL/gl.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
 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 3769 "configure"
+#line 3934 "configure"
 #include "confdefs.h"
 #include <GL/gl.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
 #include "confdefs.h"
 #include <GL/gl.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3774: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3939: \"$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_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3801,17 +3966,17 @@ fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "GL/glx.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for GL/glx.h""... $ac_c" 1>&6
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "GL/glx.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for GL/glx.h""... $ac_c" 1>&6
-echo "configure:3805: checking for GL/glx.h" >&5
+echo "configure:3970: checking for GL/glx.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
 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 3810 "configure"
+#line 3975 "configure"
 #include "confdefs.h"
 #include <GL/glx.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
 #include "confdefs.h"
 #include <GL/glx.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3815: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3980: \"$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_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3851,7 +4016,7 @@ EOF
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 3855 "configure"
+#line 4020 "configure"
 #include "confdefs.h"
 #include <GL/glx.h>
 EOF
 #include "confdefs.h"
 #include <GL/glx.h>
 EOF
@@ -3901,17 +4066,17 @@ if test $with_readdisplay = yes; then
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "X11/extensions/readdisplay.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/extensions/readdisplay.h""... $ac_c" 1>&6
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "X11/extensions/readdisplay.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/extensions/readdisplay.h""... $ac_c" 1>&6
-echo "configure:3905: checking for X11/extensions/readdisplay.h" >&5
+echo "configure:4070: checking for X11/extensions/readdisplay.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
 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 3910 "configure"
+#line 4075 "configure"
 #include "confdefs.h"
 #include <X11/extensions/readdisplay.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
 #include "confdefs.h"
 #include <X11/extensions/readdisplay.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3915: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4080: \"$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_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3980,7 +4145,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3984: checking for $ac_word" >&5
+echo "configure:4149: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_emacs_exe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
 if eval "test \"`echo '$''{'ac_cv_prog_emacs_exe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4013,7 +4178,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4017: checking for $ac_word" >&5
+echo "configure:4182: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_xemacs_exe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
 if eval "test \"`echo '$''{'ac_cv_prog_xemacs_exe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4047,7 +4212,7 @@ done
 
   if test -n "$emacs_exe" ; then
     echo $ac_n "checking for emacs yow""... $ac_c" 1>&6
 
   if test -n "$emacs_exe" ; then
     echo $ac_n "checking for emacs yow""... $ac_c" 1>&6
-echo "configure:4051: checking for emacs yow" >&5
+echo "configure:4216: checking for emacs yow" >&5
     #
     # get emacs to tell us where the libexec directory is.
     #
     #
     # get emacs to tell us where the libexec directory is.
     #
@@ -4069,7 +4234,7 @@ echo "configure:4051: checking for emacs yow" >&5
 
   if test -z "$ac_cv_zippy_program" ; then
     echo $ac_n "checking for xemacs yow""... $ac_c" 1>&6
 
   if test -z "$ac_cv_zippy_program" ; then
     echo $ac_n "checking for xemacs yow""... $ac_c" 1>&6
-echo "configure:4073: checking for xemacs yow" >&5
+echo "configure:4238: checking for xemacs yow" >&5
     if test -n "$xemacs_exe" ; then
       #
       # get xemacs to tell us where the libexec directory is.
     if test -n "$xemacs_exe" ; then
       #
       # get xemacs to tell us where the libexec directory is.
@@ -4115,7 +4280,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4119: checking for $ac_word" >&5
+echo "configure:4284: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_fortune'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
 if eval "test \"`echo '$''{'ac_cv_prog_fortune'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4150,7 +4315,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4154: checking for $ac_word" >&5
+echo "configure:4319: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_fortune'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
 if eval "test \"`echo '$''{'ac_cv_path_fortune'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4229,7 +4394,7 @@ fi
 
   if test $with_kerberos = yes; then
     echo $ac_n "checking for Kerberos""... $ac_c" 1>&6
 
   if test $with_kerberos = yes; then
     echo $ac_n "checking for Kerberos""... $ac_c" 1>&6
-echo "configure:4233: checking for Kerberos" >&5
+echo "configure:4398: checking for Kerberos" >&5
 if eval "test \"`echo '$''{'ac_cv_kerberos'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
 if eval "test \"`echo '$''{'ac_cv_kerberos'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4240,14 +4405,14 @@ else
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 4244 "configure"
+#line 4409 "configure"
 #include "confdefs.h"
 #include <krb.h>
 int main() {
 
 ; return 0; }
 EOF
 #include "confdefs.h"
 #include <krb.h>
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:4251: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4416: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_kerberos=yes
 else
   rm -rf conftest*
   ac_cv_kerberos=yes
 else
@@ -4297,7 +4462,7 @@ fi
   #
   if test $passwd_cruft_done = no ; then
     echo $ac_n "checking for Sun-style shadow passwords""... $ac_c" 1>&6
   #
   if test $passwd_cruft_done = no ; then
     echo $ac_n "checking for Sun-style shadow passwords""... $ac_c" 1>&6
-echo "configure:4301: checking for Sun-style shadow passwords" >&5
+echo "configure:4466: checking for Sun-style shadow passwords" >&5
 if eval "test \"`echo '$''{'ac_cv_sun_adjunct'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
 if eval "test \"`echo '$''{'ac_cv_sun_adjunct'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4308,7 +4473,7 @@ else
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 4312 "configure"
+#line 4477 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
                                      #include <unistd.h>
 #include "confdefs.h"
 #include <stdlib.h>
                                      #include <unistd.h>
@@ -4321,7 +4486,7 @@ struct passwd_adjunct *p = getpwanam("nobody");
                         const char *pw = p->pwa_passwd;
 ; return 0; }
 EOF
                         const char *pw = p->pwa_passwd;
 ; return 0; }
 EOF
-if { (eval echo configure:4325: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4490: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_sun_adjunct=yes
 else
   rm -rf conftest*
   ac_cv_sun_adjunct=yes
 else
@@ -4350,7 +4515,7 @@ EOF
   #
   if test $passwd_cruft_done = no ; then
     echo $ac_n "checking for DEC-style shadow passwords""... $ac_c" 1>&6
   #
   if test $passwd_cruft_done = no ; then
     echo $ac_n "checking for DEC-style shadow passwords""... $ac_c" 1>&6
-echo "configure:4354: checking for DEC-style shadow passwords" >&5
+echo "configure:4519: checking for DEC-style shadow passwords" >&5
 if eval "test \"`echo '$''{'ac_cv_enhanced_passwd'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
 if eval "test \"`echo '$''{'ac_cv_enhanced_passwd'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4361,7 +4526,7 @@ else
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 4365 "configure"
+#line 4530 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
                                      #include <unistd.h>
 #include "confdefs.h"
 #include <stdlib.h>
                                      #include <unistd.h>
@@ -4378,7 +4543,7 @@ struct pr_passwd *p;
                         pw = p->ufld.fd_encrypt;
 ; return 0; }
 EOF
                         pw = p->ufld.fd_encrypt;
 ; return 0; }
 EOF
-if { (eval echo configure:4382: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4547: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_enhanced_passwd=yes
 else
   rm -rf conftest*
   ac_cv_enhanced_passwd=yes
 else
@@ -4404,7 +4569,7 @@ EOF
       # On SCO, getprpwnam() is in -lprot (which uses nap() from -lx)
       # (I'm told it needs -lcurses too, but I don't understand why.)
       echo $ac_n "checking for getprpwnam in -lprot""... $ac_c" 1>&6
       # On SCO, getprpwnam() is in -lprot (which uses nap() from -lx)
       # (I'm told it needs -lcurses too, but I don't understand why.)
       echo $ac_n "checking for getprpwnam in -lprot""... $ac_c" 1>&6
-echo "configure:4408: checking for getprpwnam in -lprot" >&5
+echo "configure:4573: checking for getprpwnam in -lprot" >&5
 ac_lib_var=`echo prot'_'getprpwnam | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 ac_lib_var=`echo prot'_'getprpwnam | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4412,7 +4577,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lprot -lx $LIBS"
 cat > conftest.$ac_ext <<EOF
   ac_save_LIBS="$LIBS"
 LIBS="-lprot -lx $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4416 "configure"
+#line 4581 "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
 #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
@@ -4423,7 +4588,7 @@ int main() {
 getprpwnam()
 ; return 0; }
 EOF
 getprpwnam()
 ; return 0; }
 EOF
-if { (eval echo configure:4427: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:4592: \"$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
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4443,7 +4608,7 @@ else
   echo "$ac_t""no" 1>&6
 # On DEC, getprpwnam() is in -lsecurity
                    echo $ac_n "checking for getprpwnam in -lsecurity""... $ac_c" 1>&6
   echo "$ac_t""no" 1>&6
 # On DEC, getprpwnam() is in -lsecurity
                    echo $ac_n "checking for getprpwnam in -lsecurity""... $ac_c" 1>&6
-echo "configure:4447: checking for getprpwnam in -lsecurity" >&5
+echo "configure:4612: checking for getprpwnam in -lsecurity" >&5
 ac_lib_var=`echo security'_'getprpwnam | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 ac_lib_var=`echo security'_'getprpwnam | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4451,7 +4616,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsecurity  $LIBS"
 cat > conftest.$ac_ext <<EOF
   ac_save_LIBS="$LIBS"
 LIBS="-lsecurity  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4455 "configure"
+#line 4620 "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
 #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
@@ -4462,7 +4627,7 @@ int main() {
 getprpwnam()
 ; return 0; }
 EOF
 getprpwnam()
 ; return 0; }
 EOF
-if { (eval echo configure:4466: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:4631: \"$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
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4491,7 +4656,7 @@ fi
   #
   if test $passwd_cruft_done = no ; then
     echo $ac_n "checking for HP-style shadow passwords""... $ac_c" 1>&6
   #
   if test $passwd_cruft_done = no ; then
     echo $ac_n "checking for HP-style shadow passwords""... $ac_c" 1>&6
-echo "configure:4495: checking for HP-style shadow passwords" >&5
+echo "configure:4660: checking for HP-style shadow passwords" >&5
 if eval "test \"`echo '$''{'ac_cv_hpux_passwd'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
 if eval "test \"`echo '$''{'ac_cv_hpux_passwd'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4502,7 +4667,7 @@ else
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 4506 "configure"
+#line 4671 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
                                      #include <unistd.h>
 #include "confdefs.h"
 #include <stdlib.h>
                                      #include <unistd.h>
@@ -4515,7 +4680,7 @@ struct s_passwd *p = getspwnam("nobody");
                         const char *pw = p->pw_passwd;
 ; return 0; }
 EOF
                         const char *pw = p->pw_passwd;
 ; return 0; }
 EOF
-if { (eval echo configure:4519: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4684: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_hpux_passwd=yes
 else
   rm -rf conftest*
   ac_cv_hpux_passwd=yes
 else
@@ -4540,7 +4705,7 @@ EOF
 
       # on HPUX, bigcrypt is in -lsec
       echo $ac_n "checking for bigcrypt in -lsec""... $ac_c" 1>&6
 
       # on HPUX, bigcrypt is in -lsec
       echo $ac_n "checking for bigcrypt in -lsec""... $ac_c" 1>&6
-echo "configure:4544: checking for bigcrypt in -lsec" >&5
+echo "configure:4709: checking for bigcrypt in -lsec" >&5
 ac_lib_var=`echo sec'_'bigcrypt | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 ac_lib_var=`echo sec'_'bigcrypt | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4548,7 +4713,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsec  $LIBS"
 cat > conftest.$ac_ext <<EOF
   ac_save_LIBS="$LIBS"
 LIBS="-lsec  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4552 "configure"
+#line 4717 "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
 #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
@@ -4559,7 +4724,7 @@ int main() {
 bigcrypt()
 ; return 0; }
 EOF
 bigcrypt()
 ; return 0; }
 EOF
-if { (eval echo configure:4563: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:4728: \"$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
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4586,7 +4751,7 @@ fi
   #
   if test $passwd_cruft_done = no ; then
     echo $ac_n "checking for generic shadow passwords""... $ac_c" 1>&6
   #
   if test $passwd_cruft_done = no ; then
     echo $ac_n "checking for generic shadow passwords""... $ac_c" 1>&6
-echo "configure:4590: checking for generic shadow passwords" >&5
+echo "configure:4755: checking for generic shadow passwords" >&5
 if eval "test \"`echo '$''{'ac_cv_shadow'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
 if eval "test \"`echo '$''{'ac_cv_shadow'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4597,7 +4762,7 @@ else
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 4601 "configure"
+#line 4766 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
                                      #include <unistd.h>
 #include "confdefs.h"
 #include <stdlib.h>
                                      #include <unistd.h>
@@ -4609,7 +4774,7 @@ struct spwd *p = getspnam("nobody");
                         const char *pw = p->sp_pwdp;
 ; return 0; }
 EOF
                         const char *pw = p->sp_pwdp;
 ; return 0; }
 EOF
-if { (eval echo configure:4613: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4778: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_shadow=yes
 else
   rm -rf conftest*
   ac_cv_shadow=yes
 else
@@ -4635,7 +4800,7 @@ EOF
       # On some systems (UnixWare 2.1), getspnam() is in -lgen instead of -lc.
       have_getspnam=no
       echo $ac_n "checking for getspnam in -lc""... $ac_c" 1>&6
       # On some systems (UnixWare 2.1), getspnam() is in -lgen instead of -lc.
       have_getspnam=no
       echo $ac_n "checking for getspnam in -lc""... $ac_c" 1>&6
-echo "configure:4639: checking for getspnam in -lc" >&5
+echo "configure:4804: checking for getspnam in -lc" >&5
 ac_lib_var=`echo c'_'getspnam | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 ac_lib_var=`echo c'_'getspnam | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4643,7 +4808,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lc  $LIBS"
 cat > conftest.$ac_ext <<EOF
   ac_save_LIBS="$LIBS"
 LIBS="-lc  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4647 "configure"
+#line 4812 "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
 #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
@@ -4654,7 +4819,7 @@ int main() {
 getspnam()
 ; return 0; }
 EOF
 getspnam()
 ; return 0; }
 EOF
-if { (eval echo configure:4658: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:4823: \"$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
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4676,7 +4841,7 @@ fi
 
       if test $have_getspnam = no ; then
         echo $ac_n "checking for getspnam in -lgen""... $ac_c" 1>&6
 
       if test $have_getspnam = no ; then
         echo $ac_n "checking for getspnam in -lgen""... $ac_c" 1>&6
-echo "configure:4680: checking for getspnam in -lgen" >&5
+echo "configure:4845: checking for getspnam in -lgen" >&5
 ac_lib_var=`echo gen'_'getspnam | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 ac_lib_var=`echo gen'_'getspnam | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4684,7 +4849,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgen  $LIBS"
 cat > conftest.$ac_ext <<EOF
   ac_save_LIBS="$LIBS"
 LIBS="-lgen  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4688 "configure"
+#line 4853 "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
 #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
@@ -4695,7 +4860,7 @@ int main() {
 getspnam()
 ; return 0; }
 EOF
 getspnam()
 ; return 0; }
 EOF
-if { (eval echo configure:4699: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:4864: \"$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
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4722,7 +4887,7 @@ fi
   # On some systems (UnixWare 2.1), crypt() is in -lcrypt instead of -lc.
   have_crypt=no
   echo $ac_n "checking for crypt in -lc""... $ac_c" 1>&6
   # On some systems (UnixWare 2.1), crypt() is in -lcrypt instead of -lc.
   have_crypt=no
   echo $ac_n "checking for crypt in -lc""... $ac_c" 1>&6
-echo "configure:4726: checking for crypt in -lc" >&5
+echo "configure:4891: checking for crypt in -lc" >&5
 ac_lib_var=`echo c'_'crypt | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 ac_lib_var=`echo c'_'crypt | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4730,7 +4895,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lc  $LIBS"
 cat > conftest.$ac_ext <<EOF
   ac_save_LIBS="$LIBS"
 LIBS="-lc  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4734 "configure"
+#line 4899 "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
 #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
@@ -4741,7 +4906,7 @@ int main() {
 crypt()
 ; return 0; }
 EOF
 crypt()
 ; return 0; }
 EOF
-if { (eval echo configure:4745: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:4910: \"$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
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4763,7 +4928,7 @@ fi
 
   if test $have_crypt = no ; then
     echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6
 
   if test $have_crypt = no ; then
     echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6
-echo "configure:4767: checking for crypt in -lcrypt" >&5
+echo "configure:4932: checking for crypt in -lcrypt" >&5
 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4771,7 +4936,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lcrypt  $LIBS"
 cat > conftest.$ac_ext <<EOF
   ac_save_LIBS="$LIBS"
 LIBS="-lcrypt  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4775 "configure"
+#line 4940 "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
 #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
@@ -4782,7 +4947,7 @@ int main() {
 crypt()
 ; return 0; }
 EOF
 crypt()
 ; return 0; }
 EOF
-if { (eval echo configure:4786: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:4951: \"$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
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4811,7 +4976,7 @@ fi
   #
   if test $need_setuid = no ; then
     case "$host" in
   #
   if test $need_setuid = no ; then
     case "$host" in
-      *-hpux* | *-aix* | *-netbsd* )
+      *-hpux* | *-aix* | *-netbsd* | *-freebsd* | *-openbsd* )
         need_setuid=yes
       ;;
     esac
         need_setuid=yes
       ;;
     esac
@@ -4956,6 +5121,10 @@ if test $with_xidle_req = yes -a $have_xidle = no ; then
   warn 'The XIdle extension was requested, but was not found.'
 fi
 
   warn 'The XIdle extension was requested, but was not found.'
 fi
 
+if test $with_xshm_req = yes -a $have_xshm = no ; then
+  warn 'The XSHM extension was requested, but was not found.'
+fi
+
 if test $have_motif = no -a $have_athena = no ; then
   warn  "Neither Motif nor Athena widgets seem to be available;"
   warn2 "one or the other is required."
 if test $have_motif = no -a $have_athena = no ; then
   warn  "Neither Motif nor Athena widgets seem to be available;"
   warn2 "one or the other is required."
index 51cefe54655f6150f682b7c69b3d2cd36e49018c..8fa05ce0721aef865dc8077ad0080b83c5548357 100644 (file)
@@ -463,7 +463,7 @@ if test $have_sgi != yes; then
 fi
 
 
 fi
 
 
-# Check for the XIDLE server extension header,
+# Check for the XIDLE server extension header.
 #
 have_xidle=no
 with_xidle_req=unspecified
 #
 have_xidle=no
 with_xidle_req=unspecified
@@ -482,6 +482,43 @@ elif test $with_xidle != no; then
 fi
 
 
 fi
 
 
+# Check for the XSHM server extension header.
+#
+have_xshm=no
+with_xshm_req=unspecified
+AC_ARG_WITH(xshm-ext,
+[  --with-xshm-ext         Include support for the XSHM (Shared Memory) server
+                          extension, if possible (this is the default).
+  --without-xshm-ext      Do not compile in support for this extension.],
+  [with_xshm="$withval"; with_xshm_req="$withval"],[with_xshm=yes])
+if test $with_xshm = yes; then
+
+  # first check for Xshm.h.
+  AC_CHECK_X_HEADER(X11/extensions/XShm.h, [have_xshm=yes])
+
+  # if that succeeded, then check for sys/ipc.h.
+  if test $have_xshm = yes; then
+    have_xshm=no
+    AC_CHECK_X_HEADER(sys/ipc.h, [have_xshm=yes])
+  fi
+
+  # if that succeeded, then check for sys/shm.h.
+  if test $have_xshm = yes; then
+    have_xshm=no
+    AC_CHECK_X_HEADER(sys/shm.h, [have_xshm=yes])
+  fi
+
+  # if that succeeded, then we've really got it.
+  if test $have_xshm = yes; then
+    AC_DEFINE(HAVE_XSHM_EXTENSION)
+  fi
+
+elif test $with_xshm != no; then
+  echo "error: must be yes or no: --with-xshm-ext=$with_xshm"
+  exit 1
+fi
+
+
 # Check for Motif and Athena --with and --without arguments.
 #
 have_motif=no
 # Check for Motif and Athena --with and --without arguments.
 #
 have_motif=no
@@ -596,6 +633,7 @@ fi
 
 # If we have Motif, check whether it's really LessTif.
 #
 
 # If we have Motif, check whether it's really LessTif.
 #
+have_lesstif=no
 if test $have_motif = yes ; then
   AC_CACHE_CHECK([whether Motif is really LessTif], 
                 ac_cv_have_lesstif,
 if test $have_motif = yes ; then
   AC_CACHE_CHECK([whether Motif is really LessTif], 
                 ac_cv_have_lesstif,
@@ -990,7 +1028,7 @@ if test $enable_locking = yes; then
   #
   if test $need_setuid = no ; then
     case "$host" in
   #
   if test $need_setuid = no ; then
     case "$host" in
-      *-hpux* | *-aix* | *-netbsd* )
+      *-hpux* | *-aix* | *-netbsd* | *-freebsd* | *-openbsd* )
         need_setuid=yes
       ;;
     esac
         need_setuid=yes
       ;;
     esac
@@ -1126,6 +1164,10 @@ if test $with_xidle_req = yes -a $have_xidle = no ; then
   warn 'The XIdle extension was requested, but was not found.'
 fi
 
   warn 'The XIdle extension was requested, but was not found.'
 fi
 
+if test $with_xshm_req = yes -a $have_xshm = no ; then
+  warn 'The XSHM extension was requested, but was not found.'
+fi
+
 if test $have_motif = no -a $have_athena = no ; then
   warn  "Neither Motif nor Athena widgets seem to be available;"
   warn2 "one or the other is required."
 if test $have_motif = no -a $have_athena = no ; then
   warn  "Neither Motif nor Athena widgets seem to be available;"
   warn2 "one or the other is required."
index 830819604ff903c024134452dc44b484883e37a0..67923746973a45a88904f17e461e7fda8538e0cf 100644 (file)
                starfish -root -blob                                    \n\
                munch -root                                             \n\
                fadeplot -root                                          \n\
                starfish -root -blob                                    \n\
                munch -root                                             \n\
                fadeplot -root                                          \n\
+               coral -root                                             \n\
                                                                          \
        mono:   rocks -root                                             \n\
        color:  rocks -root -fg darksalmon                              \n\
                                                                          \
        mono:   rocks -root                                             \n\
        color:  rocks -root -fg darksalmon                              \n\
        color:  attraction -root -glow -points 10                       \n\
        color:  bubbles -root                                           \n\
                                                                          \
        color:  attraction -root -glow -points 10                       \n\
        color:  bubbles -root                                           \n\
                                                                          \
+        color:  rd-bomb -root                                          \n\
+        color:  rd-bomb -root -speed 1 -size 0.1                       \n\
+                                                                         \
   PseudoColor: qix -root -count 4 -solid -transparent                  \n\
   PseudoColor: qix -root -count 5 -solid -transparent -linear            \
                        -segments 250 -size 100                         \n\
   PseudoColor: qix -root -count 4 -solid -transparent                  \n\
   PseudoColor: qix -root -count 5 -solid -transparent -linear            \
                        -segments 250 -size 100                         \n\
index 1c31b5f3d9aac1528c8456803ec3bb4aa24ce0a9..4bbbc54c451107deb3b54898bb913d0232339cef 100644 (file)
@@ -69,6 +69,7 @@
                starfish -root -blob                                    \\n\
                munch -root                                             \\n\
                fadeplot -root                                          \\n\
                starfish -root -blob                                    \\n\
                munch -root                                             \\n\
                fadeplot -root                                          \\n\
+               coral -root                                             \\n\
                                                                          \
        mono:   rocks -root                                             \\n\
        color:  rocks -root -fg darksalmon                              \\n\
                                                                          \
        mono:   rocks -root                                             \\n\
        color:  rocks -root -fg darksalmon                              \\n\
@@ -81,6 +82,9 @@
        color:  attraction -root -glow -points 10                       \\n\
        color:  bubbles -root                                           \\n\
                                                                          \
        color:  attraction -root -glow -points 10                       \\n\
        color:  bubbles -root                                           \\n\
                                                                          \
+        color:  rd-bomb -root                                          \\n\
+        color:  rd-bomb -root -speed 1 -size 0.1                       \\n\
+                                                                         \
   PseudoColor: qix -root -count 4 -solid -transparent                  \\n\
   PseudoColor: qix -root -count 5 -solid -transparent -linear            \
                        -segments 250 -size 100                         \\n\
   PseudoColor: qix -root -count 4 -solid -transparent                  \\n\
   PseudoColor: qix -root -count 5 -solid -transparent -linear            \
                        -segments 250 -size 100                         \\n\
index c8e6f56fe3e755fbbf86f96fd67b775124d2c29a..cc1212212828fef32c1f40e4df45fa20fecb79ec 100644 (file)
@@ -214,16 +214,18 @@ lock_init (int argc, char **argv)
 Bool
 passwd_valid_p (const char *typed_passwd)
 {
 Bool
 passwd_valid_p (const char *typed_passwd)
 {
+  char *s = 0;  /* note that on some systems, crypt() may return null */
+
   if (encrypted_user_passwd &&
   if (encrypted_user_passwd &&
-      !strcmp ((char *) crypt (typed_passwd, encrypted_user_passwd),
-              encrypted_user_passwd))
+      (s = (char *) crypt (typed_passwd, encrypted_user_passwd)) &&
+      !strcmp (s, encrypted_user_passwd))
     return True;
 
   /* do not allow root to have a null password. */
   else if (typed_passwd[0] &&
           encrypted_root_passwd &&
     return True;
 
   /* do not allow root to have a null password. */
   else if (typed_passwd[0] &&
           encrypted_root_passwd &&
-          !strcmp ((char *) crypt (typed_passwd, encrypted_root_passwd),
-                   encrypted_root_passwd))
+          (s = (char *) crypt (typed_passwd, encrypted_root_passwd)) &&
+          !strcmp (s, encrypted_root_passwd))
     return True;
 
   else
     return True;
 
   else
index 1a7bcb662869226ce38146701dbac4bdbefe99f1..d2d4cc7b8a2b93024a7f3c13c4b148b56b211639 100644 (file)
@@ -353,15 +353,15 @@ initialize_stderr (saver_info *si)
   if (done) return;
   done = True;
 
   if (done) return;
   done = True;
 
+  real_stderr = stderr;
+  real_stdout = stdout;
+
   stderr_dialog_p = get_boolean_resource ("captureStderr", "Boolean");
   stdout_dialog_p = get_boolean_resource ("captureStdout", "Boolean");
 
   if (!stderr_dialog_p && !stdout_dialog_p)
     return;
 
   stderr_dialog_p = get_boolean_resource ("captureStderr", "Boolean");
   stdout_dialog_p = get_boolean_resource ("captureStdout", "Boolean");
 
   if (!stderr_dialog_p && !stdout_dialog_p)
     return;
 
-  real_stderr = stderr;
-  real_stdout = stdout;
-
   if (pipe (fds))
     {
       perror ("error creating pipe:");
   if (pipe (fds))
     {
       perror ("error creating pipe:");
index 7dabe9f11e12352c432df5d260d54f6799fe2cef..5dcc3d355b4fb7303934c5450b33ee793b8b2c4c 100644 (file)
@@ -918,7 +918,7 @@ blank_screen (saver_info *si)
                            ssi->screensaver_window,
                            ssi->screensaver_window);
     }
                            ssi->screensaver_window,
                            ssi->screensaver_window);
     }
-  store_activate_time (si, True);
+  store_activate_time (si, si->screen_blanked_p);
   raise_window (si, False, False, False);
   /* #### */
   grab_keyboard_and_mouse (si->dpy, si->screens[0].screensaver_window,
   raise_window (si, False, False, False);
   /* #### */
   grab_keyboard_and_mouse (si->dpy, si->screens[0].screensaver_window,
@@ -1035,6 +1035,8 @@ unblank_screen (saver_info *si)
       kill_xsetroot_data (si->dpy, ssi->screensaver_window, p->verbose_p);
     }
 
       kill_xsetroot_data (si->dpy, ssi->screensaver_window, p->verbose_p);
     }
 
+  store_activate_time(si, False);  /* store unblank time */
+
   ungrab_keyboard_and_mouse (si->dpy);
   restore_real_vroot (si);
 
   ungrab_keyboard_and_mouse (si->dpy);
   restore_real_vroot (si);
 
@@ -1113,7 +1115,7 @@ select_visual (saver_screen_info *ssi, const char *visual_name)
       raise_window (si, True, True, False);
       store_vroot_property (si->dpy,
                            ssi->screensaver_window, ssi->screensaver_window);
       raise_window (si, True, True, False);
       store_vroot_property (si->dpy,
                            ssi->screensaver_window, ssi->screensaver_window);
-      store_activate_time (si, False);
+      store_activate_time (si, True);
 
       XDestroyWindow (si->dpy, old_w);
       if (old_c &&
 
       XDestroyWindow (si->dpy, old_w);
       if (old_c &&
index 8cef01821af2994f05044d8818f3a60585d1e9f2..71e8cbfa7ddf070e8fabd1dd8d5c49b75e21291e 100644 (file)
@@ -539,6 +539,11 @@ been taken to make this a safe thing to do.
 It also may mean that your system uses shadow passwords instead of the
 standard \fIgetpwent\fP interface; in that case, you may need to change
 some options in \fIconfig.h\fP and recompile.
 It also may mean that your system uses shadow passwords instead of the
 standard \fIgetpwent\fP interface; in that case, you may need to change
 some options in \fIconfig.h\fP and recompile.
+
+If you change your password after xscreensaver has been launched, it will
+continue using your old password to unlock the screen until xscreensaver
+is restarted.  This turns out to be kind of hard to fix.  (But remember,
+kids!  Unix security doesn't do much more than keep honest people honest...)
 .TP 8
 TWM and Colormaps
 The \fBinstallColormap\fP option doesn't work very well with the
 .TP 8
 TWM and Colormaps
 The \fBinstallColormap\fP option doesn't work very well with the
index 8efdb451c6e20c6839d0a7c386dd40f221d9ab51..b991c65949458d94f8052fa68c04a59b7faafebc 100644 (file)
@@ -52,12 +52,14 @@ UTIL_SRCS   = $(UTILS_SRC)/alpha.c $(UTILS_SRC)/colors.c \
                  $(UTILS_SRC)/grabscreen.c $(UTILS_SRC)/hsv.c \
                  $(UTILS_SRC)/resources.c $(UTILS_SRC)/spline.c \
                  $(UTILS_SRC)/usleep.c $(UTILS_SRC)/visual.c \
                  $(UTILS_SRC)/grabscreen.c $(UTILS_SRC)/hsv.c \
                  $(UTILS_SRC)/resources.c $(UTILS_SRC)/spline.c \
                  $(UTILS_SRC)/usleep.c $(UTILS_SRC)/visual.c \
-                 $(UTILS_SRC)/xroger.c $(UTILS_SRC)/yarandom.c
+                 $(UTILS_SRC)/xroger.c $(UTILS_SRC)/yarandom.c \
+                 $(UTILS_SRC)/erase.c
 UTIL_OBJS      = $(UTILS_SRC)/alpha.o $(UTILS_SRC)/colors.o \
                  $(UTILS_SRC)/grabscreen.o $(UTILS_SRC)/hsv.o \
                  $(UTILS_SRC)/resources.o $(UTILS_SRC)/spline.o \
                  $(UTILS_SRC)/usleep.o $(UTILS_SRC)/visual.o \
 UTIL_OBJS      = $(UTILS_SRC)/alpha.o $(UTILS_SRC)/colors.o \
                  $(UTILS_SRC)/grabscreen.o $(UTILS_SRC)/hsv.o \
                  $(UTILS_SRC)/resources.o $(UTILS_SRC)/spline.o \
                  $(UTILS_SRC)/usleep.o $(UTILS_SRC)/visual.o \
-                 $(UTILS_SRC)/xroger.o $(UTILS_SRC)/yarandom.o
+                 $(UTILS_SRC)/xroger.o $(UTILS_SRC)/yarandom.o \
+                 $(UTILS_SRC)/erase.o
 
 SRCS           = attraction.c blitspin.c bouboule.c braid.c bubbles.c \
                  bubbles_default.c decayscreen.c deco.c drift.c flag.c \
 
 SRCS           = attraction.c blitspin.c bouboule.c braid.c bubbles.c \
                  bubbles_default.c decayscreen.c deco.c drift.c flag.c \
@@ -67,7 +69,8 @@ SRCS          = attraction.c blitspin.c bouboule.c braid.c bubbles.c \
                  maze.c moire.c noseguy.c pedal.c penrose.c pyro.c qix.c \
                  rocks.c rorschach.c screenhack.c sierpinski.c slidescreen.c \
                  slip.c sphere.c spiral.c strange.c swirl.c xlockmore.c \
                  maze.c moire.c noseguy.c pedal.c penrose.c pyro.c qix.c \
                  rocks.c rorschach.c screenhack.c sierpinski.c slidescreen.c \
                  slip.c sphere.c spiral.c strange.c swirl.c xlockmore.c \
-                 xroger-hack.c goop.c starfish.c munch.c fadeplot.c
+                 xroger-hack.c goop.c starfish.c munch.c fadeplot.c \
+                 rd-bomb.c coral.c
 
 OBJS           = attraction.o blitspin.o bouboule.o braid.o bubbles.o \
                  bubbles_default.o decayscreen.o deco.o drift.o flag.o \
 
 OBJS           = attraction.o blitspin.o bouboule.o braid.o bubbles.o \
                  bubbles_default.o decayscreen.o deco.o drift.o flag.o \
@@ -77,7 +80,8 @@ OBJS          = attraction.o blitspin.o bouboule.o braid.o bubbles.o \
                  maze.o moire.o noseguy.o pedal.o penrose.o pyro.o qix.o \
                  rocks.o rorschach.o screenhack.o sierpinski.o slidescreen.o \
                  slip.o sphere.o spiral.o strange.o swirl.o xlockmore.o \
                  maze.o moire.o noseguy.o pedal.o penrose.o pyro.o qix.o \
                  rocks.o rorschach.o screenhack.o sierpinski.o slidescreen.o \
                  slip.o sphere.o spiral.o strange.o swirl.o xlockmore.o \
-                 xroger-hack.o goop.o starfish.o munch.o fadeplot.o
+                 xroger-hack.o goop.o starfish.o munch.o fadeplot.o \
+                 rd-bomb.o coral.o
 
 EXES           = attraction blitspin bouboule braid bubbles decayscreen deco \
                  drift flag flame forest fract galaxy grav greynetic halo \
 
 EXES           = attraction blitspin bouboule braid bubbles decayscreen deco \
                  drift flag flame forest fract galaxy grav greynetic halo \
@@ -85,7 +89,7 @@ EXES          = attraction blitspin bouboule braid bubbles decayscreen deco \
                  laser lightning lisa lmorph maze moire noseguy pedal \
                  penrose pyro qix rocks rorschach sierpinski slidescreen \
                  slip sphere spiral strange swirl xroger goop starfish munch \
                  laser lightning lisa lmorph maze moire noseguy pedal \
                  penrose pyro qix rocks rorschach sierpinski slidescreen \
                  slip sphere spiral strange swirl xroger goop starfish munch \
-                 fadeplot
+                 fadeplot rd-bomb coral
 
 HACK_OBJS_1    = $(UTILS_BIN)/resources.o $(UTILS_BIN)/visual.o \
                  $(UTILS_BIN)/usleep.o $(UTILS_BIN)/yarandom.o @XMU_OBJS@
 
 HACK_OBJS_1    = $(UTILS_BIN)/resources.o $(UTILS_BIN)/visual.o \
                  $(UTILS_BIN)/usleep.o $(UTILS_BIN)/yarandom.o @XMU_OBJS@
@@ -104,7 +108,7 @@ MEN         = attraction.man blitspin.man bouboule.man braid.man \
                  noseguy.man pedal.man penrose.man pyro.man qix.man \
                  rocks.man rorschach.man sierpinski.man slidescreen.man \
                  slip.man sphere.man spiral.man strange.man swirl.man \
                  noseguy.man pedal.man penrose.man pyro.man qix.man \
                  rocks.man rorschach.man sierpinski.man slidescreen.man \
                  slip.man sphere.man spiral.man strange.man swirl.man \
-                 xroger.man goop.man starfish.man munch.man
+                 xroger.man goop.man starfish.man munch.man rd-bomb.man
 STAR           = *
 EXTRAS         = README Makefile.in xlock.h default.xbm bob.xbm .gdbinit \
                  noses/nose-$(STAR).xbm noses/nose-$(STAR).xpm \
 STAR           = *
 EXTRAS         = README Makefile.in xlock.h default.xbm bob.xbm .gdbinit \
                  noses/nose-$(STAR).xbm noses/nose-$(STAR).xpm \
@@ -211,6 +215,7 @@ $(UTILS_BIN)/visual.o:              $(UTILS_SRC)/visual.c
 $(UTILS_BIN)/xmu.o:            $(UTILS_SRC)/xmu.c
 $(UTILS_BIN)/xroger.o:         $(UTILS_SRC)/xroger.c
 $(UTILS_BIN)/yarandom.o:       $(UTILS_SRC)/yarandom.c
 $(UTILS_BIN)/xmu.o:            $(UTILS_SRC)/xmu.c
 $(UTILS_BIN)/xroger.o:         $(UTILS_SRC)/xroger.c
 $(UTILS_BIN)/yarandom.o:       $(UTILS_SRC)/yarandom.c
+$(UTILS_BIN)/erase.o:          $(UTILS_SRC)/erase.c
 
 $(UTIL_OBJS):
        cd $(UTILS_BIN) ; \
 
 $(UTIL_OBJS):
        cd $(UTILS_BIN) ; \
@@ -233,6 +238,7 @@ HSV         = $(UTILS_BIN)/hsv.o
 SPL            = $(UTILS_BIN)/spline.o
 XROG           = $(UTILS_BIN)/xroger.o
 GRAB           = $(UTILS_BIN)/grabscreen.o
 SPL            = $(UTILS_BIN)/spline.o
 XROG           = $(UTILS_BIN)/xroger.o
 GRAB           = $(UTILS_BIN)/grabscreen.o
+ERASE          = $(UTILS_BIN)/erase.o
 COL            = $(COLOR_OBJS)
 
 CC_HACK                = $(CC) $(LDFLAGS)
 COL            = $(COLOR_OBJS)
 
 CC_HACK                = $(CC) $(LDFLAGS)
@@ -268,8 +274,8 @@ greynetic:           $(HACK_OBJS) greynetic.o
 halo:                   $(HACK_OBJS) halo.o $(COL)
        $(CC_HACK) -o $@ $(HACK_OBJS) halo.o $(COL) $(HACK_LIBS)
 
 halo:                   $(HACK_OBJS) halo.o $(COL)
        $(CC_HACK) -o $@ $(HACK_OBJS) halo.o $(COL) $(HACK_LIBS)
 
-helix:                  $(HACK_OBJS) helix.o $(HSV)
-       $(CC_HACK) -o $@ $(HACK_OBJS) helix.o $(HSV) $(HACK_LIBS)
+helix:                  $(HACK_OBJS) helix.o $(HSV) $(ERASE)
+       $(CC_HACK) -o $@ $(HACK_OBJS) helix.o $(HSV) $(ERASE) $(HACK_LIBS)
 
 hypercube:              $(HACK_OBJS) hypercube.o
        $(CC_HACK) -o $@ $(HACK_OBJS) hypercube.o $(HACK_LIBS)
 
 hypercube:              $(HACK_OBJS) hypercube.o
        $(CC_HACK) -o $@ $(HACK_OBJS) hypercube.o $(HACK_LIBS)
@@ -301,11 +307,11 @@ pyro:                      $(HACK_OBJS) pyro.o $(HSV)
 qix:                    $(HACK_OBJS) qix.o $(ALP)
        $(CC_HACK) -o $@ $(HACK_OBJS) qix.o $(ALP) $(HACK_LIBS)
 
 qix:                    $(HACK_OBJS) qix.o $(ALP)
        $(CC_HACK) -o $@ $(HACK_OBJS) qix.o $(ALP) $(HACK_LIBS)
 
-rocks:                  $(HACK_OBJS) rocks.o
-       $(CC_HACK) -o $@ $(HACK_OBJS) rocks.o $(HACK_LIBS)
+rocks:                  $(HACK_OBJS) rocks.o $(COL)
+       $(CC_HACK) -o $@ $(HACK_OBJS) rocks.o $(COL) $(HACK_LIBS)
 
 
-rorschach:              $(HACK_OBJS) rorschach.o $(HSV)
-       $(CC_HACK) -o $@ $(HACK_OBJS) rorschach.o $(HSV) $(HACK_LIBS)
+rorschach:              $(HACK_OBJS) rorschach.o $(HSV) $(ERASE)
+       $(CC_HACK) -o $@ $(HACK_OBJS) rorschach.o $(HSV) $(ERASE) $(HACK_LIBS)
 
 slidescreen:            $(HACK_OBJS) slidescreen.o $(GRAB_OBJS)
        $(CC_HACK) -o $@ $(HACK_OBJS) slidescreen.o $(GRAB_OBJS) $(HACK_LIBS)
 
 slidescreen:            $(HACK_OBJS) slidescreen.o $(GRAB_OBJS)
        $(CC_HACK) -o $@ $(HACK_OBJS) slidescreen.o $(GRAB_OBJS) $(HACK_LIBS)
@@ -322,6 +328,12 @@ starfish:           $(HACK_OBJS) starfish.o $(COL) $(SPL)
 munch:                  $(HACK_OBJS) munch.o $(COL) $(SPL)
        $(CC_HACK) -o $@ $(HACK_OBJS) munch.o $(COL) $(SPL) $(HACK_LIBS)
 
 munch:                  $(HACK_OBJS) munch.o $(COL) $(SPL)
        $(CC_HACK) -o $@ $(HACK_OBJS) munch.o $(COL) $(SPL) $(HACK_LIBS)
 
+rd-bomb:                $(HACK_OBJS) rd-bomb.o $(COL)
+       $(CC_HACK) -o $@ $(HACK_OBJS) rd-bomb.o $(COL) $(HACK_LIBS)
+
+coral: $(HACK_OBJS) coral.o $(COLOR_OBJS)
+       $(CC_HACK) -o $@ $(HACK_OBJS) coral.o $(COLOR_OBJS) $(HACK_LIBS)
+
 
 # The rules for those hacks which follow the `xlockmore' API.
 #
 
 # The rules for those hacks which follow the `xlockmore' API.
 #
@@ -572,6 +584,7 @@ helix.o: $(UTILS_SRC)/hsv.h
 helix.o: $(UTILS_SRC)/colors.h
 helix.o: $(UTILS_SRC)/grabscreen.h
 helix.o: $(UTILS_SRC)/visual.h
 helix.o: $(UTILS_SRC)/colors.h
 helix.o: $(UTILS_SRC)/grabscreen.h
 helix.o: $(UTILS_SRC)/visual.h
+helix.o: $(UTILS_SRC)/erase.h
 hopalong.o: $(srcdir)/xlockmore.h
 hopalong.o: $(srcdir)/../config.h
 hopalong.o: $(srcdir)/xlockmoreI.h
 hopalong.o: $(srcdir)/xlockmore.h
 hopalong.o: $(srcdir)/../config.h
 hopalong.o: $(srcdir)/xlockmoreI.h
@@ -767,6 +780,7 @@ rorschach.o: $(UTILS_SRC)/hsv.h
 rorschach.o: $(UTILS_SRC)/colors.h
 rorschach.o: $(UTILS_SRC)/grabscreen.h
 rorschach.o: $(UTILS_SRC)/visual.h
 rorschach.o: $(UTILS_SRC)/colors.h
 rorschach.o: $(UTILS_SRC)/grabscreen.h
 rorschach.o: $(UTILS_SRC)/visual.h
+rorschach.o: $(UTILS_SRC)/erase.h
 screenhack.o: $(UTILS_SRC)/xmu.h
 screenhack.o: $(srcdir)/screenhack.h
 screenhack.o: $(srcdir)/../config.h
 screenhack.o: $(UTILS_SRC)/xmu.h
 screenhack.o: $(srcdir)/screenhack.h
 screenhack.o: $(srcdir)/../config.h
@@ -914,4 +928,22 @@ fadeplot.o: $(UTILS_SRC)/hsv.h
 fadeplot.o: $(UTILS_SRC)/colors.h
 fadeplot.o: $(UTILS_SRC)/grabscreen.h
 fadeplot.o: $(UTILS_SRC)/visual.h
 fadeplot.o: $(UTILS_SRC)/colors.h
 fadeplot.o: $(UTILS_SRC)/grabscreen.h
 fadeplot.o: $(UTILS_SRC)/visual.h
+rd-bomb.o: $(srcdir)/screenhack.h
+rd-bomb.o: $(srcdir)/../config.h
+rd-bomb.o: $(UTILS_SRC)/yarandom.h
+rd-bomb.o: $(UTILS_SRC)/usleep.h
+rd-bomb.o: $(UTILS_SRC)/resources.h
+rd-bomb.o: $(UTILS_SRC)/hsv.h
+rd-bomb.o: $(UTILS_SRC)/colors.h
+rd-bomb.o: $(UTILS_SRC)/grabscreen.h
+rd-bomb.o: $(UTILS_SRC)/visual.h
+coral.o: $(srcdir)/screenhack.h
+coral.o: $(srcdir)/../config.h
+coral.o: $(UTILS_SRC)/yarandom.h
+coral.o: $(UTILS_SRC)/usleep.h
+coral.o: $(UTILS_SRC)/resources.h
+coral.o: $(UTILS_SRC)/hsv.h
+coral.o: $(UTILS_SRC)/colors.h
+coral.o: $(UTILS_SRC)/grabscreen.h
+coral.o: $(UTILS_SRC)/visual.h
 
 
index b65f53eb5fb247d1b876fe58da89719f2b4bf8ba..a8d2794a6173d059fe5cc6baa4c24793fbbd2646 100644 (file)
@@ -7,6 +7,7 @@ $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) DECAYSCREEN.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) DECO.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) DRIFT.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) DECAYSCREEN.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) DECO.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) DRIFT.C
+$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FADEPLOT.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FLAG.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FLAME.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FOREST.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FLAG.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FLAME.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FOREST.C
index b65f53eb5fb247d1b876fe58da89719f2b4bf8ba..a8d2794a6173d059fe5cc6baa4c24793fbbd2646 100644 (file)
@@ -7,6 +7,7 @@ $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) DECAYSCREEN.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) DECO.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) DRIFT.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) DECAYSCREEN.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) DECO.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) DRIFT.C
+$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FADEPLOT.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FLAG.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FLAME.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FOREST.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FLAG.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FLAME.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FOREST.C
diff --git a/hacks/coral.c b/hacks/coral.c
new file mode 100644 (file)
index 0000000..eddde27
--- /dev/null
@@ -0,0 +1,247 @@
+/* coral, by "Frederick G.M. Roeber" <roeber@netscape.com>, 15-jul-97.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation.  No representations are made about the suitability of this
+ * software for any purpose.  It is provided "as is" without express or 
+ * implied warranty.
+ */
+
+#include "screenhack.h"
+#include "colors.h"
+
+static GC draw_gc;
+static unsigned int default_fg_pixel;
+#define NCOLORSMAX 200
+static XColor colors[NCOLORSMAX];
+static int ncolors = 0;
+static int colorindex = 0;
+static int colorsloth;
+
+static XPoint *walkers;
+static int nwalkers;
+static int width, widthb;
+static int height;
+
+static unsigned int *board;
+#define getdot(x,y) (board[(y*widthb)+(x>>5)] &  (1<<(x & 31)))
+#define setdot(x,y) (board[(y*widthb)+(x>>5)] |= (1<<(x & 31)))
+
+
+static void
+init_coral(Display *dpy, Window window)
+{
+    XGCValues gcv;
+    Colormap cmap;
+    XWindowAttributes xgwa;
+    Bool writeable = False;
+    int seeds;
+    int density;
+    int i;
+
+    XClearWindow(dpy, window);
+    XGetWindowAttributes(dpy, window, &xgwa);
+    width = xgwa.width;
+    widthb = ((xgwa.width + 31) >> 5);
+    height = xgwa.height;
+    board = (unsigned int *)calloc(widthb * xgwa.height, sizeof(unsigned int));
+    if(!board) exit(1);
+    cmap = xgwa.colormap;
+    if( ncolors ) {
+        free_colors(dpy, cmap, colors, ncolors);
+        ncolors = 0;
+    }
+    gcv.foreground = default_fg_pixel = get_pixel_resource("foreground", "Foreground", dpy, cmap);
+    draw_gc = XCreateGC(dpy, window, GCForeground, &gcv);
+    ncolors = NCOLORSMAX;
+    make_uniform_colormap(dpy, xgwa.visual, cmap, colors, &ncolors, True, &writeable, False);
+    colorindex = random()%ncolors;
+    
+    density = get_integer_resource("density", "Integer");
+    if( density < 1 ) density = 1;
+    if( density > 100 ) density = 90; /* more like mold than coral */
+    nwalkers = (width*height*density)/100;
+    walkers = (XPoint *)calloc(nwalkers, sizeof(XPoint));
+    if( (XPoint *)0 == walkers ) exit(1);
+
+    seeds = get_integer_resource("seeds", "Integer");
+    if( seeds < 1 ) seeds = 1;
+    if( seeds > 1000 ) seeds = 1000;
+
+    colorsloth = nwalkers*2/ncolors;
+    XSetForeground(dpy, draw_gc, colors[colorindex].pixel);
+
+    for( i = 0; i < seeds; i++ ) {
+        int x, y;
+        do {
+            x = random() % width;
+            y = random() % height;
+        } while( getdot(x, y) );
+
+        setdot((x-1), (y-1)); setdot(x, (y-1)); setdot((x+1), (y-1));
+       setdot((x-1),  y   ); setdot(x,  y   ); setdot((x+1),  y   );
+       setdot((x-1), (y+1)); setdot(x, (y+1)); setdot((x+1), (y+1));
+        XDrawPoint(dpy, window, draw_gc, x, y);
+    }
+
+    for( i = 0; i < nwalkers; i++ ) {
+        walkers[i].x = (random() % (width-2)) + 1;
+        walkers[i].y = (random() % (height-2)) + 1;
+    }
+}
+
+
+/* returns 2 bits of randomness (conserving calls to random()).
+   This speeds things up a little, but not a lot (5-10% or so.)
+ */
+static int 
+rand_2(void)
+{
+  static int i = 0;
+  static int r = 0;
+  if (i != 0) {
+    i--;
+  } else {
+    i = 15;
+    r = random();
+  }
+
+  {
+    register int j = (r & 3);
+    r = r >> 2;
+    return j;
+  }
+}
+
+
+static void
+coral(Display *dpy, Window window)
+{
+    int delay2 = get_integer_resource ("delay2", "Integer");
+
+    int max_points = 200;
+    int npoints = 0;
+    XPoint *pointbuf = (XPoint *) calloc(sizeof(XPoint), max_points+2);
+    if (!pointbuf) exit(-1);
+
+    while( 1 ) {
+        int i;
+
+        for( i = 0; i < nwalkers; i++ ) {
+            int x = walkers[i].x;
+            int y = walkers[i].y;
+
+            if( getdot(x, y) ) {
+
+               Bool flush = False;
+               Bool color = False;
+
+               /* XDrawPoint(dpy, window, draw_gc, x, y); */
+               pointbuf[npoints].x = x;
+               pointbuf[npoints].y = y;
+               npoints++;
+
+                /* Mark the surrounding area as "sticky" */
+                setdot((x-1), (y-1)); setdot(x, (y-1)); setdot((x+1), (y-1));
+               setdot((x-1),  y   );                   setdot((x+1),  y   );
+                setdot((x-1), (y+1)); setdot(x, (y+1)); setdot((x+1), (y+1));
+                nwalkers--;
+                walkers[i].x = walkers[nwalkers].x;
+                walkers[i].y = walkers[nwalkers].y;
+                if( 0 == (nwalkers%colorsloth) ) {
+                 color = True;
+                }
+                 
+               if (flush || color || 0 == nwalkers || npoints >= max_points) {
+                 XDrawPoints(dpy, window, draw_gc, pointbuf, npoints,
+                             CoordModeOrigin);
+                 npoints = 0;
+                 XSync(dpy, True);
+               }
+
+               if (color) {
+                    colorindex++;
+                    if( colorindex == ncolors )
+                        colorindex = 0;
+                    XSetForeground(dpy, draw_gc, colors[colorindex].pixel);
+                }
+
+                if( 0 == nwalkers ) {
+                    XSync(dpy, True);
+                   free(pointbuf);
+                    return;
+                }
+            } else {
+                /* move it a notch */
+                do {
+                    switch(rand_2()) {
+                    case 0:
+                        if( 1 == x ) continue;
+                        walkers[i].x--;
+                        break;
+                    case 1:
+                        if( width-2 == x ) continue;
+                        walkers[i].x++;
+                        break;
+                    case 2:
+                        if( 1 == y ) continue;
+                        walkers[i].y--;
+                        break;
+                    default: /* case 3: */
+                        if( height-2 == y ) continue;
+                        walkers[i].y++;
+                        break;
+                   /* default:
+                     abort(); */
+                    }
+                } while(0);
+            }
+        }
+
+       if (delay2 > 0) {
+         if (npoints > 0) {
+           XDrawPoints(dpy, window, draw_gc, pointbuf, npoints,
+                       CoordModeOrigin);
+           npoints = 0;
+           XSync(dpy, True);
+         }
+         usleep(delay2);
+       }
+    }
+}
+
+char *progclass = "Coral";
+
+char *defaults[] = {
+    "Coral.background: black",
+    "Coral.foreground: white",
+    "*density: 25",
+    "*seeds: 20", /* too many for 640x480, too few for 1280x1024 */
+    "*delay: 5",
+    "*delay2: 1000",
+    0
+};
+
+XrmOptionDescRec options[] = {
+    { "-density", ".density", XrmoptionSepArg, 0 },
+    { "-seeds", ".seeds", XrmoptionSepArg, 0 },
+    { "-delay", ".delay", XrmoptionSepArg, 0 },
+    { "-delay2", ".delay2", XrmoptionSepArg, 0 },
+    { 0, 0, 0, 0 }
+};
+
+void
+screenhack(dpy, window)
+Display *dpy;
+Window window;
+{
+    int delay = get_integer_resource ("delay", "Integer");
+
+    while( 1 ) {
+        init_coral(dpy, window);
+        coral(dpy, window);
+        if( delay ) sleep(delay);
+    }
+}
index 758c5557e1a7ef1d57cf44688603a088753576cc..cb6bd38b3e91b96848748b04a9283c9df03dfb86 100644 (file)
 
 /* Algorithm from a Mac program by Chris Tate, written in 1988 or so. */
 
 
 /* Algorithm from a Mac program by Chris Tate, written in 1988 or so. */
 
-/* 10-May-97: merged ellipse code by Dan Stromberg <strombrg@nis.acs.uci.edu>
+/* 18-Sep-97: Johannes Keukelaar (johannes@nada.kth.se): Improved screen
+ *            eraser.
+ * 10-May-97: merged ellipse code by Dan Stromberg <strombrg@nis.acs.uci.edu>
  *            as found in xlockmore 4.03a10.
  * 1992:      jwz created.
  */
 
 #include <math.h>
 #include "screenhack.h"
  *            as found in xlockmore 4.03a10.
  * 1992:      jwz created.
  */
 
 #include <math.h>
 #include "screenhack.h"
+#include "erase.h"
 
 static double sins [360];
 static double coss [360];
 
 static GC draw_gc, erase_gc;
 static unsigned int default_fg_pixel;
 
 static double sins [360];
 static double coss [360];
 
 static GC draw_gc, erase_gc;
 static unsigned int default_fg_pixel;
+static int erase_speed, sleep_time, erase_mode;
+
+void erase_window (Display *dpy, Window win, GC gc, int width, int height,
+                  int mode, int delay);
 
 static void
 init_helix (Display *dpy, Window window)
 
 static void
 init_helix (Display *dpy, Window window)
@@ -267,17 +274,10 @@ random_helix_or_trig (Display *dpy, Window window)
     random_trig(dpy, window, &color, &free_color);
 
   XSync (dpy, True);
     random_trig(dpy, window, &color, &free_color);
 
   XSync (dpy, True);
-  sleep (5);
+  sleep ( sleep_time );
+
+  erase_window(dpy, window, erase_gc, width, height, erase_mode, erase_speed);
 
 
-  for (i = 0; i < height; i++)
-    {
-      int y = (random () % height);
-      XDrawLine (dpy, window, erase_gc, 0, y, width, y);
-      XFlush (dpy);
-      if ((i % 50) == 0)
-       usleep (10000);
-    }
-  XClearWindow (dpy, window);
   if (free_color) XFreeColors (dpy, cmap, &color.pixel, 1, 0);
   XSync (dpy, True);
   sleep (1);
   if (free_color) XFreeColors (dpy, cmap, &color.pixel, 1, 0);
   XSync (dpy, True);
   sleep (1);
@@ -288,14 +288,26 @@ char *progclass = "Helix";
 
 char *defaults [] = {
   "Helix.background: black",           /* to placate SGI */
 
 char *defaults [] = {
   "Helix.background: black",           /* to placate SGI */
+  "Helix.eraseSpeed: 400",
+  "Helix.delay: 5",
+  "Helix.eraseMode: -1",
   0
 };
 
   0
 };
 
-XrmOptionDescRec options [] = { { 0, } };
+XrmOptionDescRec options [] = {   
+  { "-erase-speed",    ".eraseSpeed",          XrmoptionSepArg, 0 },
+  { "-delay",           ".delay",               XrmoptionSepArg, 0 },
+  { "-erase-mode",      ".eraseMode",           XrmoptionSepArg, 0 },
+  { 0 },
+};
+int options_size = (sizeof (options) / sizeof (options[0]));
 
 void
 screenhack (Display *dpy, Window window)
 {
 
 void
 screenhack (Display *dpy, Window window)
 {
+  erase_speed = get_integer_resource("eraseSpeed", "Integer");
+  sleep_time = get_integer_resource("delay", "Integer");
+  erase_mode = get_integer_resource("eraseMode", "Integer");
   init_helix (dpy, window);
   while (1)
     random_helix_or_trig (dpy, window);
   init_helix (dpy, window);
   while (1)
     random_helix_or_trig (dpy, window);
index 76c7cfef382757331d4434bdaf733fc7b4dcc525..abc0a827fca48cdf4f928221887784884de09504 100644 (file)
@@ -1,9 +1,9 @@
-.TH XScreenSaver 1 "13-aug-92" "X Version 11"
+.TH XScreenSaver 1 "18-sep-97" "X Version 11"
 .SH NAME
 helix - draw helical string-art patterns
 .SH SYNOPSIS
 .B helix
 .SH NAME
 helix - draw helical string-art patterns
 .SH SYNOPSIS
 .B helix
-[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP]
+[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-erase\-speed \fIusecs\fP] [\-erase\-mode \fIinteger\fP] [\-delay \fIseconds\fP] [\-install] [\-visual \fIvisual\fP]
 .SH DESCRIPTION
 The \fIhelix\fP program draws interesting patterns composed of line segments
 in random colors.
 .SH DESCRIPTION
 The \fIhelix\fP program draws interesting patterns composed of line segments
 in random colors.
@@ -20,6 +20,17 @@ Draw on the root window.
 .B \-mono 
 If on a color display, pretend we're on a monochrome display.
 .TP 8
 .B \-mono 
 If on a color display, pretend we're on a monochrome display.
 .TP 8
+.B \-erase\-speed \fIusecs\fP
+This controls the speed at which the screen will be erased. Lower numbers 
+erase faster.
+.TP 8
+.B \-erase\-mode \fIinteger\fP
+This sets the erase mode. Mode \-1 chooses a random mode each time. There
+are currently 6 modes defined (0\-5).
+.TP 8
+.B \-delay \fIseconds\fP
+This sets the number of seconds that the helix will be on the screen.
+.TP 8
 .B \-install
 Install a private colormap for the window.
 .TP 8
 .B \-install
 Install a private colormap for the window.
 .TP 8
@@ -48,3 +59,5 @@ suitability of this software for any purpose.  It is provided "as is" without
 express or implied warranty.
 .SH AUTHOR
 Jamie Zawinski <jwz@netscape.com>, 13-aug-92.
 express or implied warranty.
 .SH AUTHOR
 Jamie Zawinski <jwz@netscape.com>, 13-aug-92.
+Screen eraser improved by Johannes Keukelaar <johannes@nada.kth.se>, 
+ 18-sep-97.
index 942dd7aedc22f9cf8cf9dc9c2c93003ae550e6e2..ede1e6f82a4722e0a26b00bf0943b74a5fc08d37 100644 (file)
@@ -12,6 +12,7 @@ $ link/exe=bubbles.exe      screenhack,bubbles,bubbles_default,vms_axp_12.opt/op
 $ link/exe=decayscreen.exe  screenhack,decayscreen,vms_axp_12.opt/opt
 $ link/exe=deco.exe         screenhack,deco,vms_axp_12.opt/opt
 $ link/exe=drift.exe        screenhack-xlock,drift,xlockmore,vms_axp_12.opt/opt
 $ link/exe=decayscreen.exe  screenhack,decayscreen,vms_axp_12.opt/opt
 $ link/exe=deco.exe         screenhack,deco,vms_axp_12.opt/opt
 $ link/exe=drift.exe        screenhack-xlock,drift,xlockmore,vms_axp_12.opt/opt
+$ link/exe=fadeplot.exe     screenhack-xlock,fadeplot,xlockmore,vms_axp_12.opt/opt
 $ link/exe=flag.exe         screenhack-xlock,flag,xlockmore,vms_axp_12.opt/opt
 $ link/exe=flame.exe        screenhack,flame,vms_axp_12.opt/opt
 $ link/exe=forest.exe       screenhack-xlock,forest,xlockmore,vms_axp_12.opt/opt
 $ link/exe=flag.exe         screenhack-xlock,flag,xlockmore,vms_axp_12.opt/opt
 $ link/exe=flame.exe        screenhack,flame,vms_axp_12.opt/opt
 $ link/exe=forest.exe       screenhack-xlock,forest,xlockmore,vms_axp_12.opt/opt
@@ -61,6 +62,7 @@ $ link/exe=bubbles.exe      screenhack,bubbles,bubbles_default,vms_axp.opt/opt
 $ link/exe=decayscreen.exe  screenhack,decayscreen,vms_axp.opt/opt
 $ link/exe=deco.exe         screenhack,deco,vms_axp.opt/opt
 $ link/exe=drift.exe        screenhack-xlock,drift,xlockmore,vms_axp.opt/opt
 $ link/exe=decayscreen.exe  screenhack,decayscreen,vms_axp.opt/opt
 $ link/exe=deco.exe         screenhack,deco,vms_axp.opt/opt
 $ link/exe=drift.exe        screenhack-xlock,drift,xlockmore,vms_axp.opt/opt
+$ link/exe=fadeplot.exe     screenhack-xlock,fadeplot,xlockmore,vms_axp.opt/opt
 $ link/exe=flag.exe         screenhack-xlock,flag,xlockmore,vms_axp.opt/opt
 $ link/exe=flame.exe        screenhack,flame,vms_axp.opt/opt
 $ link/exe=forest.exe       screenhack-xlock,forest,xlockmore,vms_axp.opt/opt
 $ link/exe=flag.exe         screenhack-xlock,flag,xlockmore,vms_axp.opt/opt
 $ link/exe=flame.exe        screenhack,flame,vms_axp.opt/opt
 $ link/exe=forest.exe       screenhack-xlock,forest,xlockmore,vms_axp.opt/opt
index daf6a3b5300dc4186f7120fa9d3a09f776f906ec..e730fb807d0a30e15abc707b28adfe0eefe971e0 100644 (file)
@@ -12,6 +12,7 @@ $ link/exe=bubbles.exe      screenhack,bubbles,bubbles_default,vms_decc_12.opt/o
 $ link/exe=decayscreen.exe  screenhack,decayscreen,vms_decc_12.opt/opt
 $ link/exe=deco.exe         screenhack,deco,vms_decc_12.opt/opt
 $ link/exe=drift.exe        screenhack-xlock,drift,xlockmore,vms_decc_12.opt/opt
 $ link/exe=decayscreen.exe  screenhack,decayscreen,vms_decc_12.opt/opt
 $ link/exe=deco.exe         screenhack,deco,vms_decc_12.opt/opt
 $ link/exe=drift.exe        screenhack-xlock,drift,xlockmore,vms_decc_12.opt/opt
+$ link/exe=fadeplot.exe     screenhack-xlock,fadeplot,xlockmore,vms_decc_12.opt/opt
 $ link/exe=flag.exe         screenhack-xlock,flag,xlockmore,vms_decc_12.opt/opt
 $ link/exe=flame.exe        screenhack,flame,vms_decc_12.opt/opt
 $ link/exe=forest.exe       screenhack-xlock,forest,xlockmore,vms_decc_12.opt/opt
 $ link/exe=flag.exe         screenhack-xlock,flag,xlockmore,vms_decc_12.opt/opt
 $ link/exe=flame.exe        screenhack,flame,vms_decc_12.opt/opt
 $ link/exe=forest.exe       screenhack-xlock,forest,xlockmore,vms_decc_12.opt/opt
@@ -61,6 +62,7 @@ $ link/exe=bubbles.exe      screenhack,bubbles,bubbles_default,vms_decc.opt/opt
 $ link/exe=decayscreen.exe  screenhack,decayscreen,vms_decc.opt/opt
 $ link/exe=deco.exe         screenhack,deco,vms_decc.opt/opt
 $ link/exe=drift.exe        screenhack-xlock,drift,xlockmore,vms_decc.opt/opt
 $ link/exe=decayscreen.exe  screenhack,decayscreen,vms_decc.opt/opt
 $ link/exe=deco.exe         screenhack,deco,vms_decc.opt/opt
 $ link/exe=drift.exe        screenhack-xlock,drift,xlockmore,vms_decc.opt/opt
+$ link/exe=fadeplot.exe     screenhack-xlock,fadeplot,xlockmore,vms_decc.opt/opt
 $ link/exe=flag.exe         screenhack-xlock,flag,xlockmore,vms_decc.opt/opt
 $ link/exe=flame.exe        screenhack,flame,vms_decc.opt/opt
 $ link/exe=forest.exe       screenhack-xlock,forest,xlockmore,vms_decc.opt/opt
 $ link/exe=flag.exe         screenhack-xlock,flag,xlockmore,vms_decc.opt/opt
 $ link/exe=flame.exe        screenhack,flame,vms_decc.opt/opt
 $ link/exe=forest.exe       screenhack-xlock,forest,xlockmore,vms_decc.opt/opt
index 22af1d6a848450fb7cf0bad3d21c8b0ea71a4908..aa2de92fcd36f337c76f687630415f28cf0b6153 100644 (file)
@@ -1,6 +1,9 @@
 /******************************************************************************
  * [ maze ] ...
  *
 /******************************************************************************
  * [ maze ] ...
  *
+ * modified:  [ 4-10-97 ]  Johannes Keukelaar <johannes@nada.kth.se>
+ *              Added multiple maze creators. Robustified solver.
+ *              Added bridge option.
  * modified:  [ 8-11-95 ] Ed James <james@mml.mmc.com>
  *              added fill of dead-end box to solve_maze while loop.
  * modified:  [ 3-7-93 ]  Jamie Zawinski <jwz@netscape.com>
  * modified:  [ 8-11-95 ] Ed James <james@mml.mmc.com>
  *              added fill of dead-end box to solve_maze while loop.
  * modified:  [ 3-7-93 ]  Jamie Zawinski <jwz@netscape.com>
@@ -81,6 +84,7 @@ static int solve_delay, pre_solve_delay, post_solve_delay;
 #define DOOR_OUT_BOTTOM        0x20
 #define DOOR_OUT_LEFT  0x10
 
 #define DOOR_OUT_BOTTOM        0x20
 #define DOOR_OUT_LEFT  0x10
 
+#define SOLVER_VISIT    0x4
 #define START_SQUARE   0x2
 #define END_SQUARE     0x1
 
 #define START_SQUARE   0x2
 #define END_SQUARE     0x1
 
@@ -113,13 +117,15 @@ static int maze_size_x, maze_size_y;
 static int sqnum, cur_sq_x, cur_sq_y, path_length;
 static int start_x, start_y, start_dir, end_x, end_y, end_dir;
 static int grid_width, grid_height;
 static int sqnum, cur_sq_x, cur_sq_y, path_length;
 static int start_x, start_y, start_dir, end_x, end_y, end_dir;
 static int grid_width, grid_height;
+static int bw;
 
 static Display *dpy;
 static Window  win;
 
 static Display *dpy;
 static Window  win;
-static GC      gc, cgc, tgc, logo_gc;
+static GC      gc, cgc, tgc, logo_gc, erase_gc;
 static Pixmap  logo_map;
 
 static Pixmap  logo_map;
 
-static int     x = 0, y = 0, restart = 0, stop = 1, state = 1;
+static int     x = 0, y = 0, restart = 0, stop = 1, state = 1, max_length;
+static int      sync_p, bridge_p;
 
 static int
 check_events (void)                        /* X event handler [ rhess ] */
 
 static int
 check_events (void)                        /* X event handler [ rhess ] */
@@ -180,6 +186,8 @@ static void
 initialize_maze (void) /* draw the surrounding wall and start/end squares */
 {
   register int i, j, wall;
 initialize_maze (void) /* draw the surrounding wall and start/end squares */
 {
   register int i, j, wall;
+  int logow = 1 + logo_width / grid_width;
+  int logoh = 1 + logo_height / grid_height;
   
   /* initialize all squares */
   for ( i=0; i<maze_size_x; i++) {
   
   /* initialize all squares */
   for ( i=0; i<maze_size_x; i++) {
@@ -266,13 +274,11 @@ initialize_maze (void) /* draw the surrounding wall and start/end squares */
   end_dir = wall;
   
   /* set logo */
   end_dir = wall;
   
   /* set logo */
-  if ((maze_size_x > 15) && (maze_size_y > 15))
+  if ((maze_size_x-logow >= 6) && (maze_size_y-logoh >= 6))
     {
     {
-      int logow = 1 + logo_width / grid_width;
-      int logoh = 1 + logo_height / grid_height;
       /* not closer than 3 grid units from a wall */
       /* not closer than 3 grid units from a wall */
-      logo_x = get_random (maze_size_x - logow - 6) + 3;
-      logo_y = get_random (maze_size_y - logoh - 6) + 3;
+      logo_x = get_random (maze_size_x - logow - 5) + 3;
+      logo_y = get_random (maze_size_y - logoh - 5) + 3;
       for (i=0; i<logow; i++)
        for (j=0; j<logoh; j++)
          maze[logo_x + i][logo_y + j] |= DOOR_IN_TOP;
       for (i=0; i<logow; i++)
        for (j=0; j<logoh; j++)
          maze[logo_x + i][logo_y + j] |= DOOR_IN_TOP;
@@ -283,15 +289,626 @@ initialize_maze (void) /* draw the surrounding wall and start/end squares */
 
 static int choose_door (void);
 static int backup (void);
 
 static int choose_door (void);
 static int backup (void);
-static void draw_wall (int, int, int);
+static void draw_wall (int, int, int, GC);
 static void draw_solid_square (int, int, int, GC);
 static void draw_solid_square (int, int, int, GC);
-static void enter_square (int);
+/*static void enter_square (int);*/
+static void build_wall (int, int, int);
+/*static void break_wall (int, int, int);*/
+
+static void join_sets(int, int);
+
+/* For set_create_maze. */
+/* The sets that our squares are in. */
+static int *sets = 0;
+/* The `list' of hedges. */
+static int *hedges = 0;
+
+#define DEBUG_SETS 0
+
+/* Initialise the sets. */
+static void 
+init_sets(void)
+{
+  int i, t, r, x, y;
+
+  if(sets)
+    free(sets);
+  sets = (int *)malloc(maze_size_x*maze_size_y*sizeof(int));
+  if(!sets)
+    abort();
+  for(i = 0; i < maze_size_x*maze_size_y; i++)
+    {
+      sets[i] = i;
+    }
+  
+  if(hedges)
+    free(hedges);
+  hedges = (int *)malloc(maze_size_x*maze_size_y*2*sizeof(int));
+  if(!hedges)
+    abort();
+  for(i = 0; i < maze_size_x*maze_size_y*2; i++)
+    {
+      hedges[i] = i;
+    }
+  /* Mask out outside walls. */
+  for(i = 0; i < maze_size_y; i++)
+    {
+      hedges[2*((maze_size_x)*i+maze_size_x-1)+1] = -1;
+    }
+  for(i = 0; i < maze_size_x; i++)
+    {
+      hedges[2*((maze_size_y-1)*maze_size_x+i)] = -1;
+    }
+  /* Mask out a possible logo. */
+  if(logo_x!=-1)
+    {
+      int logow = 1 + logo_width / grid_width;
+      int logoh = 1 + logo_height / grid_height;
+      int bridge_dir, bridge_c;
+
+      if(bridge_p && logoh>=3 && logow>=3)
+       {
+         bridge_dir = 1+random()%2;
+         if(bridge_dir==1)
+           {
+             bridge_c = logo_y+random()%(logoh-2)+1;
+           }
+         else
+           {
+             bridge_c = logo_x+random()%(logow-2)+1;
+           }
+       }
+      else
+       {
+         bridge_dir = 0;
+         bridge_c = -1;
+       }
+
+      for(x = logo_x; x < logo_x+logow; x++)
+       for(y = logo_y; y < logo_y+logoh; y++)
+         {
+           /* I should check for the bridge here, except that I join the
+             * bridge together below.
+             */
+           hedges[2*(x+maze_size_x*y)+1] = -1;
+           hedges[2*(x+maze_size_x*y)] = -1;
+         }
+      for(x = logo_x; x < logo_x+logow; x++)
+       {
+         if(!(bridge_dir==2 && x==bridge_c))
+           {
+             build_wall(x, logo_y, 0);
+             build_wall(x, logo_y+logoh, 0);
+           }
+         hedges[2*(x+maze_size_x*(logo_y-1))] = -1;
+         if(bridge_dir==1)
+           {
+             build_wall(x, bridge_c, 0);
+             build_wall(x, bridge_c, 2);
+           }
+       }
+      for(y = logo_y; y < logo_y+logoh; y++)
+       {
+         if(!(bridge_dir==1 && y==bridge_c))
+           {
+             build_wall(logo_x, y, 3);
+             build_wall(logo_x+logow, y, 3);
+           }
+         hedges[2*(logo_x-1+maze_size_x*y)+1] = -1;
+         if(bridge_dir==2)
+           {
+             build_wall(bridge_c, y, 1);
+             build_wall(bridge_c, y, 3);
+           }
+       }
+      /* Join the whole bridge together. */
+      if(bridge_p)
+       {
+         if(bridge_dir==1)
+           {
+             x = logo_x-1;
+             y = bridge_c;
+             for(i = logo_x; i < logo_x+logow+1; i++)
+               join_sets(x+y*maze_size_x, i+y*maze_size_x);
+           }
+         else
+           {
+             y = logo_y-1;
+             x = bridge_c;
+             for(i = logo_y; i < logo_y+logoh+1; i++)
+               join_sets(x+y*maze_size_x, x+i*maze_size_x);
+           }
+       }
+    }
+
+  for(i = 0; i < maze_size_x*maze_size_y*2; i++)
+    {
+      t = hedges[i];
+      r = random()%(maze_size_x*maze_size_y*2);
+      hedges[i] = hedges[r];
+      hedges[r] = t;
+    }
+}
+
+/* Get the representative of a set. */
+static int
+get_set(int num)
+{
+  int s;
+
+  if(sets[num]==num)
+    return num;
+  else
+    {
+      s = get_set(sets[num]);
+      sets[num] = s;
+      return s;
+    }
+}
 
 
+/* Join two sets together. */
 static void
 static void
-create_maze (void)    /* create a maze layout given the intiialized maze */
+join_sets(num1, num2)
+     int num1, num2;
+{
+  int s1, s2;
+
+  s1 = get_set(num1);
+  s2 = get_set(num2);
+  
+  if(s1<s2)
+    sets[s2] = s1;
+  else
+    sets[s1] = s2;
+}
+
+/* Exitialise the sets. */
+static void
+exit_sets(void)
+{
+  if(hedges)
+    free(hedges);
+  hedges = 0;
+  if(sets)
+    free(sets);
+  sets = 0;
+}
+
+#if DEBUG_SETS
+/* Temporary hack. */
+static void
+show_set(int num, GC gc)
+{
+  int x, y, set;
+
+  set = get_set(num);
+
+  for(x = 0; x < maze_size_x; x++)
+    for(y = 0; y < maze_size_y; y++)
+      {
+       if(get_set(x+y*maze_size_x)==set)
+         {
+           XFillRectangle(dpy, win, gc,  border_x + bw + grid_width * x, 
+                        border_y + bw + grid_height * y, 
+                        grid_width-2*bw , grid_height-2*bw);
+         }
+      }
+}
+#endif
+
+/* Second alternative maze creator: Put each square in the maze in a 
+ * separate set. Also, make a list of all the hedges. Randomize that list.
+ * Walk through the list. If, for a certain hedge, the two squares on both
+ * sides of it are in different sets, union the sets and remove the hedge.
+ * Continue until all hedges have been processed or only one set remains.
+ */
+static void
+set_create_maze(void)
+{
+  int i, h, x, y, dir, v, w;
+#if DEBUG_SETS
+  int cont = 0;
+  char c;
+#endif
+
+  /* Do almost all the setup. */
+  init_sets();
+
+  /* Start running through the hedges. */
+  for(i = 0; i < 2*maze_size_x*maze_size_y; i++)
+    { 
+      h = hedges[i];
+
+      /* This one is in the logo or outside border. */
+      if(h==-1)
+       continue;
+
+      dir = h%2?1:2;
+      x = (h>>1)%maze_size_x;
+      y = (h>>1)/maze_size_x;
+
+      v = x;
+      w = y;
+      switch(dir)
+       {
+       case 1:
+         v++;
+         break;
+       case 2:
+         w++;
+         break;
+       }
+
+#if DEBUG_SETS
+      show_set(x+y*maze_size_x, logo_gc);
+      show_set(v+w*maze_size_x, tgc);
+#endif
+      if(get_set(x+y*maze_size_x)!=get_set(v+w*maze_size_x))
+       {
+#if DEBUG_SETS
+         printf("Join!");
+#endif
+         join_sets(x+y*maze_size_x, v+w*maze_size_x);
+         /* Don't draw the wall. */
+       }
+      else
+       {
+#if DEBUG_SETS
+         printf("Build.");
+#endif
+         /* Don't join the sets. */
+         build_wall(x, y, dir); 
+       }
+#if DEBUG_SETS
+      if(!cont)
+       {
+         XSync(dpy, False);
+         c = getchar();
+         if(c=='c')
+           cont = 1;
+       }
+      show_set(x+y*maze_size_x, erase_gc);
+      show_set(v+w*maze_size_x, erase_gc);
+#endif
+    }
+
+  /* Free some memory. */
+  exit_sets();
+}
+
+/* First alternative maze creator: Pick a random, empty corner in the maze.
+ * Pick a random direction. Draw a wall in that direction, from that corner
+ * until we hit a wall. Option: Only draw the wall if it's going to be 
+ * shorter than a certain length. Otherwise we get lots of long walls.
+ */
+static void
+alt_create_maze(void)
+{
+  char *corners;
+  int *c_idx;
+  int i, j, height, width, open_corners, k, dir, x, y;
+
+  height = maze_size_y+1;
+  width = maze_size_x+1;
+
+  /* Allocate and clear some mem. */
+  corners = (char *)calloc(height*width, 1);
+  if(!corners)
+    return;
+
+  /* Set up the indexing array. */
+  c_idx = (int *)malloc(sizeof(int)*height*width);
+  if(!c_idx)
+    {
+      free(corners);
+      return;
+    }
+  for(i = 0; i < height*width; i++)
+    c_idx[i] = i;
+  for(i = 0; i < height*width; i++)
+    {
+      j = c_idx[i];
+      k = random()%(height*width);
+      c_idx[i] = c_idx[k];
+      c_idx[k] = j;
+    }
+
+  /* Set up some initial walls. */
+  /* Outside walls. */
+  for(i = 0; i < width; i++)
+    {
+      corners[i] = 1;
+      corners[i+width*(height-1)] = 1;
+    }
+  for(i = 0; i < height; i++)
+    {
+      corners[i*width] = 1;
+      corners[i*width+width-1] = 1;
+    }
+  /* Walls around logo. In fact, inside the logo, too. */
+  /* Also draw the walls. */
+  if(logo_x!=-1)
+    {
+      int logow = 1 + logo_width / grid_width;
+      int logoh = 1 + logo_height / grid_height;
+      int bridge_dir, bridge_c;
+
+      if(bridge_p && logoh>=3 && logow>=3)
+       {
+         bridge_dir = 1+random()%2;
+         if(bridge_dir==1)
+           {
+             bridge_c = logo_y+random()%(logoh-2)+1;
+           }
+         else
+           {
+             bridge_c = logo_x+random()%(logow-2)+1;
+           }
+       }
+      else
+       {
+         bridge_dir = 0;
+         bridge_c = -1;
+       }
+      for(i = logo_x; i <= logo_x + logow; i++)
+       {
+         for(j = logo_y; j <= logo_y + logoh; j++)
+           {
+             corners[i+width*j] = 1;
+           }
+       }
+      for(x = logo_x; x < logo_x+logow; x++)
+       {
+         if(!(bridge_dir==2 && x==bridge_c))
+           {
+             build_wall(x, logo_y, 0);
+             build_wall(x, logo_y+logoh, 0);
+           }
+         if(bridge_dir==1)
+           {
+             build_wall(x, bridge_c, 0);
+             build_wall(x, bridge_c, 2);
+           }
+       }
+      for(y = logo_y; y < logo_y+logoh; y++)
+       {
+         if(!(bridge_dir==1 && y==bridge_c))
+           {
+             build_wall(logo_x, y, 3);
+             build_wall(logo_x+logow, y, 3);
+           }
+         if(bridge_dir==2)
+           {
+             build_wall(bridge_c, y, 1);
+             build_wall(bridge_c, y, 3);
+           }
+       }
+      /* Connect one wall of the logo with an outside wall. */
+      if(bridge_p)
+       dir = (bridge_dir+1)%4;
+      else
+       dir = random()%4;
+      switch(dir)
+       {
+       case 0:
+         x = logo_x+(random()%(logow+1));
+         y = logo_y;
+         break;
+       case 1:
+         x = logo_x+logow;
+         y = logo_y+(random()%(logoh+1));
+         break;
+       case 2:
+         x = logo_x+(random()%(logow+1));
+         y = logo_y+logoh;
+         break;
+       case 3:
+         x = logo_x;
+         y = logo_y+(random()%(logoh+1));
+         break;
+       }
+      do
+       {
+         corners[x+width*y] = 1;
+         switch(dir)
+           {
+           case 0:
+             build_wall(x-1, y-1, 1);
+             y--;
+             break;
+           case 1:
+             build_wall(x, y, 0);
+             x++;
+             break;
+           case 2:
+             build_wall(x, y, 3);
+             y++;
+             break;
+           case 3:
+             build_wall(x-1, y-1, 2);
+             x--;
+             break;      
+           }
+       }
+      while(!corners[x+width*y]);
+      if(bridge_p)
+       {
+         dir = (dir+2)%4;
+         switch(dir)
+           {
+           case 0:
+             x = logo_x+(random()%(logow+1));
+             y = logo_y;
+             break;
+           case 1:
+             x = logo_x+logow;
+             y = logo_y+(random()%(logoh+1));
+             break;
+           case 2:
+             x = logo_x+(random()%(logow+1));
+             y = logo_y+logoh;
+             break;
+           case 3:
+             x = logo_x;
+             y = logo_y+(random()%(logoh+1));
+             break;
+           }
+         do
+           {
+             corners[x+width*y] = 1;
+             switch(dir)
+               {
+               case 0:
+                 build_wall(x-1, y-1, 1);
+                 y--;
+                 break;
+               case 1:
+                 build_wall(x, y, 0);
+                 x++;
+                 break;
+               case 2:
+                 build_wall(x, y, 3);
+                 y++;
+                 break;
+               case 3:
+                 build_wall(x-1, y-1, 2);
+                 x--;
+                 break;          
+               }
+           }
+         while(!corners[x+width*y]);
+       }
+    }
+
+  /* Count open gridpoints. */
+  open_corners = 0;
+  for(i = 0; i < width; i++)
+    for(j = 0; j < height; j++)
+      if(!corners[i+width*j])
+       open_corners++;
+
+  /* Now do actual maze generation. */
+  while(open_corners>0)
+    {
+      for(i = 0; i < width*height; i++)
+       {
+         if(!corners[c_idx[i]])
+           {
+             x = c_idx[i]%width;
+             y = c_idx[i]/width;
+             /* Choose a random direction. */
+             dir = random()%4;
+             
+             k = 0;
+             /* Measure the length of the wall we'd draw. */
+             while(!corners[x+width*y])
+               {
+                 k++;
+                 switch(dir)
+                   {
+                   case 0:
+                     y--;
+                     break;
+                   case 1:
+                     x++;
+                     break;
+                   case 2:
+                     y++;
+                     break;
+                   case 3:
+                     x--;
+                     break;
+                   }
+               }
+             
+             if(k<=max_length)
+               {
+                 x = c_idx[i]%width;
+                 y = c_idx[i]/width;
+                 
+                 /* Draw a wall until we hit something. */
+                 while(!corners[x+width*y])
+                   {
+                     open_corners--;
+                     corners[x+width*y] = 1;
+                     switch(dir)
+                       {
+                       case 0:
+                         build_wall(x-1, y-1, 1);
+                         y--;
+                         break;
+                       case 1:
+                         build_wall(x, y, 0);
+                         x++;
+                         break;
+                       case 2:
+                         build_wall(x, y, 3);
+                         y++;
+                         break;
+                       case 3:
+                         build_wall(x-1, y-1, 2);
+                         x--;
+                         break;
+                       }
+                   }
+               }
+           }
+       }
+    }
+
+  /* Free some memory we used. */
+  free(corners);
+  free(c_idx);
+}
+
+/* The original maze creator. Start somewhere. Take a step in a random 
+ * direction. Keep doing this until we hit a wall. Then, backtrack until
+ * we find a point where we can go in another direction.
+ */
+static void
+create_maze (void)    /* create a maze layout given the initialized maze */
 {
   register int i, newdoor = 0;
 {
   register int i, newdoor = 0;
+  int logow = 1 + logo_width / grid_width;
+  int logoh = 1 + logo_height / grid_height;
   
   
+  /* Maybe we should make a bridge? */
+  if(bridge_p && logo_x>=0 && logow>=3 && logoh>=3)
+    {
+      int bridge_dir, bridge_c;
+
+      bridge_dir = 1+random()%2;
+      if(bridge_dir==1)
+       {
+         if(logoh>=3)
+           bridge_c = logo_y+random()%(logoh-2)+1;
+         else
+           bridge_c = logo_y+random()%logoh;
+       }
+      else
+       {
+         if(logow>=3)
+           bridge_c = logo_x+random()%(logow-2)+1;
+         else
+           bridge_c = logo_x+random()%logow;
+       }
+
+      if(bridge_dir==1)
+       {
+         for(i = logo_x; i < logo_x+logow; i++)
+           {
+             maze[i][bridge_c] &= ~DOOR_IN_TOP;
+           }
+       }
+      else
+       {
+         for(i = logo_y; i < logo_y+logoh; i++)
+           {
+             maze[bridge_c][i] &= ~DOOR_IN_TOP;
+           }
+       }
+    }
+
   do {
     move_list[sqnum].x = cur_sq_x;
     move_list[sqnum].y = cur_sq_y;
   do {
     move_list[sqnum].x = cur_sq_x;
     move_list[sqnum].y = cur_sq_y;
@@ -353,7 +970,7 @@ choose_door (void)                                   /* pick a new path */
   if ( maze[cur_sq_x][cur_sq_y - 1] & DOOR_IN_ANY ) {
     maze[cur_sq_x][cur_sq_y] |= WALL_TOP;
     maze[cur_sq_x][cur_sq_y - 1] |= WALL_BOTTOM;
   if ( maze[cur_sq_x][cur_sq_y - 1] & DOOR_IN_ANY ) {
     maze[cur_sq_x][cur_sq_y] |= WALL_TOP;
     maze[cur_sq_x][cur_sq_y - 1] |= WALL_BOTTOM;
-    draw_wall(cur_sq_x, cur_sq_y, 0);
+    draw_wall(cur_sq_x, cur_sq_y, 0, gc);
     goto rightwall;
   }
   candidates[num_candidates++] = 0;
     goto rightwall;
   }
   candidates[num_candidates++] = 0;
@@ -369,7 +986,7 @@ choose_door (void)                                   /* pick a new path */
   if ( maze[cur_sq_x + 1][cur_sq_y] & DOOR_IN_ANY ) {
     maze[cur_sq_x][cur_sq_y] |= WALL_RIGHT;
     maze[cur_sq_x + 1][cur_sq_y] |= WALL_LEFT;
   if ( maze[cur_sq_x + 1][cur_sq_y] & DOOR_IN_ANY ) {
     maze[cur_sq_x][cur_sq_y] |= WALL_RIGHT;
     maze[cur_sq_x + 1][cur_sq_y] |= WALL_LEFT;
-    draw_wall(cur_sq_x, cur_sq_y, 1);
+    draw_wall(cur_sq_x, cur_sq_y, 1, gc);
     goto bottomwall;
   }
   candidates[num_candidates++] = 1;
     goto bottomwall;
   }
   candidates[num_candidates++] = 1;
@@ -385,7 +1002,7 @@ choose_door (void)                                   /* pick a new path */
   if ( maze[cur_sq_x][cur_sq_y + 1] & DOOR_IN_ANY ) {
     maze[cur_sq_x][cur_sq_y] |= WALL_BOTTOM;
     maze[cur_sq_x][cur_sq_y + 1] |= WALL_TOP;
   if ( maze[cur_sq_x][cur_sq_y + 1] & DOOR_IN_ANY ) {
     maze[cur_sq_x][cur_sq_y] |= WALL_BOTTOM;
     maze[cur_sq_x][cur_sq_y + 1] |= WALL_TOP;
-    draw_wall(cur_sq_x, cur_sq_y, 2);
+    draw_wall(cur_sq_x, cur_sq_y, 2, gc);
     goto leftwall;
   }
   candidates[num_candidates++] = 2;
     goto leftwall;
   }
   candidates[num_candidates++] = 2;
@@ -401,7 +1018,7 @@ choose_door (void)                                   /* pick a new path */
   if ( maze[cur_sq_x - 1][cur_sq_y] & DOOR_IN_ANY ) {
     maze[cur_sq_x][cur_sq_y] |= WALL_LEFT;
     maze[cur_sq_x - 1][cur_sq_y] |= WALL_RIGHT;
   if ( maze[cur_sq_x - 1][cur_sq_y] & DOOR_IN_ANY ) {
     maze[cur_sq_x][cur_sq_y] |= WALL_LEFT;
     maze[cur_sq_x - 1][cur_sq_y] |= WALL_RIGHT;
-    draw_wall(cur_sq_x, cur_sq_y, 3);
+    draw_wall(cur_sq_x, cur_sq_y, 3, gc);
     goto donewall;
   }
   candidates[num_candidates++] = 3;
     goto donewall;
   }
   candidates[num_candidates++] = 3;
@@ -482,7 +1099,7 @@ draw_maze_border (void)                         /* draw the maze outline */
 
 
 static void
 
 
 static void
-draw_wall(int i, int j, int dir)                      /* draw a single wall */
+draw_wall(int i, int j, int dir, GC gc)                /* draw a single wall */
 {
   switch (dir) {
   case 0:
 {
   switch (dir) {
   case 0:
@@ -514,9 +1131,78 @@ draw_wall(int i, int j, int dir)                      /* draw a single wall */
              border_y + grid_height * (j+1));
     break;
   }
              border_y + grid_height * (j+1));
     break;
   }
+  if(sync_p)
+    XSync(dpy, False);
 }
 
 }
 
-static int bw;
+/* Actually build a wall. */
+static void
+build_wall(i, j, dir)
+     int i, j, dir;
+{
+  /* Draw it on the screen. */
+  draw_wall(i, j, dir, gc);
+  /* Put it in the maze. */
+  switch(dir)
+    {
+    case 0:
+      maze[i][j] |= WALL_TOP;
+      if(j>0)
+       maze[i][j-1] |= WALL_BOTTOM;
+      break;
+    case 1:
+      maze[i][j] |= WALL_RIGHT;
+      if(i<maze_size_x-1)
+       maze[i+1][j] |= WALL_LEFT;
+      break;
+    case 2:
+      maze[i][j] |= WALL_BOTTOM;
+      if(j<maze_size_y-1)
+       maze[i][j+1] |= WALL_TOP;
+      break;
+    case 3:
+      maze[i][j] |= WALL_LEFT;
+      if(i>0)
+       maze[i-1][j] |= WALL_RIGHT;
+      break;
+    }
+}
+
+/* Break out a wall. */
+#if 0
+static void
+break_wall(i, j, dir)
+     int i, j, dir;
+{
+  /* Draw it on the screen. */
+  draw_wall(i, j, dir, erase_gc);
+  /* Put it in the maze. */
+  switch(dir)
+    {
+    case 0:
+      maze[i][j] &= ~WALL_TOP;
+      if(j>0)
+       maze[i][j-1] &= ~WALL_BOTTOM;
+      break;
+    case 1:
+      maze[i][j] &= ~WALL_RIGHT;
+      if(i<maze_size_x-1)
+       maze[i+1][j] &= ~WALL_LEFT;
+      break;
+    case 2:
+      maze[i][j] &= ~WALL_BOTTOM;
+      if(j<maze_size_y-1)
+       maze[i][j+1] &= ~WALL_BOTTOM;
+      break;
+    case 3:
+      maze[i][j] &= ~WALL_LEFT;
+      if(i>0)
+       maze[i-1][j] &= ~WALL_RIGHT;
+      break;
+    }
+}
+#endif /* 0 */
+
 
 static void
 draw_solid_square(int i, int j,          /* draw a solid square in a square */
 
 static void
 draw_solid_square(int i, int j,          /* draw a solid square in a square */
@@ -552,8 +1238,9 @@ static void
 solve_maze (void)                     /* solve it with graphical feedback */
 {
   int i;
 solve_maze (void)                     /* solve it with graphical feedback */
 {
   int i;
-  
-  
+  int step_x[4] = { 0, 1, 0, -1 };
+  int step_y[4] = { -1, 0, 1, 0 };
+    
   /* plug up the surrounding wall */
   maze[start_x][start_y] |= (WALL_TOP >> start_dir);
   maze[end_x][end_y] |= (WALL_TOP >> end_dir);
   /* plug up the surrounding wall */
   maze[start_x][start_y] |= (WALL_TOP >> start_dir);
   maze[end_x][end_y] |= (WALL_TOP >> end_dir);
@@ -563,6 +1250,7 @@ solve_maze (void)                     /* solve it with graphical feedback */
   path[i].x = end_x;
   path[i].y = end_y;
   path[i].dir = -1;
   path[i].x = end_x;
   path[i].y = end_y;
   path[i].dir = -1;
+  maze[end_x][end_y] |= SOLVER_VISIT;
   
   /* do it */
   while (1) {
   
   /* do it */
   while (1) {
@@ -572,15 +1260,23 @@ solve_maze (void)                     /* solve it with graphical feedback */
                     border_y + bw + grid_height * (int)(path[i].y),
                     grid_width - (bw+bw), grid_height - (bw+bw));
       i--;
                     border_y + bw + grid_height * (int)(path[i].y),
                     grid_width - (bw+bw), grid_height - (bw+bw));
       i--;
+      if(i<0) /* Can't solve this maze. */
+       {
+         printf("Unsolvable maze.\n");
+         return;
+       }
       draw_solid_square( (int)(path[i].x), (int)(path[i].y), 
                        (int)(path[i].dir), cgc);
     }
       draw_solid_square( (int)(path[i].x), (int)(path[i].y), 
                        (int)(path[i].dir), cgc);
     }
-    else if ( ! (maze[path[i].x][path[i].y] & 
-                (WALL_TOP >> path[i].dir))  && 
-            ( (i == 0) || ( (path[i].dir != 
-                             (int)(path[i-1].dir+2)%4) ) ) ) {
-      enter_square(i);
+    else if ( (! (maze[path[i].x][path[i].y] & (WALL_TOP >> path[i].dir))) && 
+            (!( maze[path[i].x+step_x[path[i].dir]]
+                   [path[i].y+step_y[path[i].dir]]&SOLVER_VISIT)) ) {
+      path[i+1].x = path[i].x+step_x[path[i].dir];
+      path[i+1].y = path[i].y+step_y[path[i].dir];
+      path[i+1].dir = -1;
+      draw_solid_square(path[i].x, path[i].y, path[i].dir, tgc);
       i++;
       i++;
+      maze[path[i].x][path[i].y] |= SOLVER_VISIT;
       if ( maze[path[i].x][path[i].y] & START_SQUARE ) {
        return;
       }
       if ( maze[path[i].x][path[i].y] & START_SQUARE ) {
        return;
       }
@@ -592,6 +1288,7 @@ solve_maze (void)                     /* solve it with graphical feedback */
 } 
 
 
 } 
 
 
+#if 0
 static void
 enter_square (int n)                      /* move into a neighboring square */
 {
 static void
 enter_square (int n)                      /* move into a neighboring square */
 {
@@ -614,6 +1311,7 @@ enter_square (int n)                      /* move into a neighboring square */
     break;
   }
 }
     break;
   }
 }
+#endif /* 0 */
 
 
 /*
 
 
 /*
@@ -633,6 +1331,10 @@ char *defaults[] = {
   "*postDelay: 4000000",
   "*liveColor: green",
   "*deadColor: red",
   "*postDelay: 4000000",
   "*liveColor: green",
   "*deadColor: red",
+  "*generator:  -1",
+  "*maxLength:  5",
+  "*syncDraw:   False",
+  "*bridge:     False",
 #ifdef XROGER
   "*logoColor: red3",
 #endif
 #ifdef XROGER
   "*logoColor: red3",
 #endif
@@ -646,6 +1348,10 @@ XrmOptionDescRec options[] = {
   { "-post-delay",     ".postDelay",   XrmoptionSepArg, 0 },
   { "-live-color",     ".liveColor",   XrmoptionSepArg, 0 },
   { "-dead-color",     ".deadColor",   XrmoptionSepArg, 0 },
   { "-post-delay",     ".postDelay",   XrmoptionSepArg, 0 },
   { "-live-color",     ".liveColor",   XrmoptionSepArg, 0 },
   { "-dead-color",     ".deadColor",   XrmoptionSepArg, 0 },
+  { "-generator",       ".generator",   XrmoptionSepArg, 0 },
+  { "-max-length",      ".maxLength",   XrmoptionSepArg, 0 },
+  { "-bridge",          ".bridge",      XrmoptionNoArg, "True" },
+  { "-no-bridge",       ".bridge",      XrmoptionNoArg, "False" },
   { 0, 0, 0, 0 }
 };
 
   { 0, 0, 0, 0 }
 };
 
@@ -657,7 +1363,7 @@ void
 screenhack(Display *display, Window window)
 {
   Pixmap gray;
 screenhack(Display *display, Window window)
 {
   Pixmap gray;
-  int size, root;
+  int size, root, generator, this_gen;
   XWindowAttributes xgwa;
   unsigned long bg, fg, pfg, pbg, lfg;
 
   XWindowAttributes xgwa;
   unsigned long bg, fg, pfg, pbg, lfg;
 
@@ -666,6 +1372,9 @@ screenhack(Display *display, Window window)
   solve_delay = get_integer_resource ("solveDelay", "Integer");
   pre_solve_delay = get_integer_resource ("preDelay", "Integer");
   post_solve_delay = get_integer_resource ("postDelay", "Integer");
   solve_delay = get_integer_resource ("solveDelay", "Integer");
   pre_solve_delay = get_integer_resource ("preDelay", "Integer");
   post_solve_delay = get_integer_resource ("postDelay", "Integer");
+  generator = get_integer_resource("generator", "Integer");
+  max_length = get_integer_resource("maxLength", "Integer");
+  bridge_p = get_boolean_resource("bridge", "Boolean");
 
   if (size < 2) size = 7 + (random () % 30);
   grid_width = grid_height = size;
 
   if (size < 2) size = 7 + (random () % 30);
   grid_width = grid_height = size;
@@ -687,6 +1396,7 @@ screenhack(Display *display, Window window)
   cgc = XCreateGC(dpy, win, 0, 0);
   tgc = XCreateGC(dpy,win,0,0);
   logo_gc = XCreateGC(dpy, win, 0, 0);
   cgc = XCreateGC(dpy, win, 0, 0);
   tgc = XCreateGC(dpy,win,0,0);
   logo_gc = XCreateGC(dpy, win, 0, 0);
+  erase_gc = XCreateGC(dpy, win, 0, 0);
   
   gray = XCreateBitmapFromData (dpy,win,gray1_bits,gray1_width,gray1_height);
 
   
   gray = XCreateBitmapFromData (dpy,win,gray1_bits,gray1_width,gray1_height);
 
@@ -710,6 +1420,8 @@ screenhack(Display *display, Window window)
   XSetBackground (dpy, tgc, bg);
   XSetForeground (dpy, logo_gc, lfg);
   XSetBackground (dpy, logo_gc, bg);
   XSetBackground (dpy, tgc, bg);
   XSetForeground (dpy, logo_gc, lfg);
   XSetBackground (dpy, logo_gc, bg);
+  XSetForeground (dpy, erase_gc, bg);
+  XSetBackground (dpy, erase_gc, bg);
 
   XSetStipple (dpy, cgc, gray);
   XSetFillStyle (dpy, cgc, FillOpaqueStippled);
 
   XSetStipple (dpy, cgc, gray);
   XSetFillStyle (dpy, cgc, FillOpaqueStippled);
@@ -741,10 +1453,11 @@ screenhack(Display *display, Window window)
     }
 #endif
   XMapRaised(dpy, win);
     }
 #endif
   XMapRaised(dpy, win);
-  srandom(getpid());
 
   restart = root;
 
 
   restart = root;
 
+  sync_p = !(random() % 10);
+
   while (1) {                            /* primary execution loop [ rhess ] */
     if (check_events()) continue ;
     if (restart || stop) goto pop;
   while (1) {                            /* primary execution loop [ rhess ] */
     if (check_events()) continue ;
     if (restart || stop) goto pop;
@@ -757,7 +1470,22 @@ screenhack(Display *display, Window window)
       draw_maze_border();
       break;
     case 3:
       draw_maze_border();
       break;
     case 3:
-      create_maze();
+      this_gen = generator;
+      if(this_gen<0 || this_gen>2)
+       this_gen = random()%3;
+
+      switch(this_gen)
+       {
+       case 0:
+         create_maze();
+         break;
+       case 1:
+         alt_create_maze();
+         break;
+       case 2:
+         set_create_maze();
+         break;
+       }
       break;
     case 4:
       XSync (dpy, False);
       break;
     case 4:
       XSync (dpy, False);
@@ -786,6 +1514,7 @@ screenhack(Display *display, Window window)
        set_maze_sizes (wattr.width, wattr.height);
        XClearWindow (dpy, win);
        XSync (dpy, False);
        set_maze_sizes (wattr.width, wattr.height);
        XClearWindow (dpy, win);
        XSync (dpy, False);
+       sync_p = !(random() % 10);
       }
   }
 }
       }
   }
 }
index f93a70f49eb808a0f3af698d5e773c6c35f9f5d5..1321995a47a0eb9700fad04d2fc9272ed8b50075 100644 (file)
@@ -3,7 +3,7 @@
 maze \- an automated X11 demo repeatedly creating and solving a random maze
 .SH SYNOPSIS
 .B maze 
 maze \- an automated X11 demo repeatedly creating and solving a random maze
 .SH SYNOPSIS
 .B maze 
-[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-install] [\-visual \fIvisual\fP] [\-grid\-size \fIpixels\fP] [\-live\-color \fIcolor\fP] [\-dead\-color \fIcolor\fP] [\-solve\-delay \fIusecs\fP] [\-pre\-delay \fIusecs\fP] [\-post\-delay \fIusecs\fP]
+[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-install] [\-visual \fIvisual\fP] [\-grid\-size \fIpixels\fP] [\-live\-color \fIcolor\fP] [\-dead\-color \fIcolor\fP] [\-solve\-delay \fIusecs\fP] [\-pre\-delay \fIusecs\fP] [\-post\-delay \fIusecs\fP] [\-generator \fIinteger\fP] [\-max\-length \fIinteger\fP] [\-bridge] [\-no\-bridge]
 .SH DESCRIPTION
 The \fImaze\fP program creates a "random" maze and then solves it with 
 graphical feedback. 
 .SH DESCRIPTION
 The \fImaze\fP program creates a "random" maze and then solves it with 
 graphical feedback. 
@@ -45,6 +45,31 @@ Default 2000000 (2 seconds.)
 .B \-post\-delay \fIinteger\fP
 Delay (in microseconds) after solving a maze and before generating a new one.
 Default 4000000 (4 seconds.)
 .B \-post\-delay \fIinteger\fP
 Delay (in microseconds) after solving a maze and before generating a new one.
 Default 4000000 (4 seconds.)
+.TP 8
+.B \-generator \fInum\fP
+Sets the algorithm that will be used to generate the mazes. The
+default is \-1, which randomly selects an algorithm for each maze that
+is generated. Generator 0 is the original one, and works by walking
+around randomly until we hit a place we've been before, then
+backtracking and trying a new direction somewhere. Generator 1 picks a
+random spot in the maze, then draws a straight wall from that spot in
+a random direction until it hits another wall (and continues until the
+maze is complete). Generator 2 is based on sets. Initially all cells
+are in different sets. Then two neighboring cells are chosen and if
+they are in different sets, their sets are joined. If they were in the
+same set, a wall is built between them. This continues until the maze is
+complete. 
+
+All generators generate mazes with a certain 'characteristic'. See if you
+can spot them!
+.TP 8
+.B \-max\-length \fInum\fP
+Controls the maximum length of walls drawn in one go by generator 1.
+.TP 8
+.B \-bridge
+.TP 8
+.B \-no\-bridge
+Controls whether or not a 'bridge' will appear over the logo.
 .PP
 Clicking the mouse in the maze window controls it.
 .TP 16
 .PP
 Clicking the mouse in the maze window controls it.
 .TP 16
@@ -96,6 +121,8 @@ 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.
 .SH AUTHOR(s)
 .nf
 OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 .SH AUTHOR(s)
 .nf
+Johannes Keukelaar [ Generators 1 and 2 ] johannes@nada.kth.se 
+  Royal Institute of Technology, Stockholm, Sweden
 Jim Randell    [ XScreenSaver version ] jmr@mddjmr.fc.hp.com
   HPLabs, Bristol
 Richard Hess   [ X11 extensions ]      {...}!uunet!cimshop!rhess
 Jim Randell    [ XScreenSaver version ] jmr@mddjmr.fc.hp.com
   HPLabs, Bristol
 Richard Hess   [ X11 extensions ]      {...}!uunet!cimshop!rhess
index ed3ac0a05b68a95a8c8fff5c63ddf2b700319e77..24ea10bafbe078983767d16c9746b722449ff21e 100644 (file)
@@ -18,8 +18,8 @@
 #define SCALE  6
 
 struct qpoint {
 #define SCALE  6
 
 struct qpoint {
-  long x, y;
-  long dx, dy;
+  int x, y;
+  int dx, dy;
 };
 
 struct qline {
 };
 
 struct qline {
diff --git a/hacks/rd-bomb.c b/hacks/rd-bomb.c
new file mode 100644 (file)
index 0000000..c648bd6
--- /dev/null
@@ -0,0 +1,431 @@
+/* xscreensaver, Copyright (c) 1992, 1995, 1997
+ *  Jamie Zawinski <jwz@netscape.com>
+ *
+ *  reaction/diffusion textures
+ *  Copyright (c) 1997 Scott Draves spot@transmeta.com
+ *  this code is derived from Bomb
+ *  see http://www.cs.cmu.edu/~spot/bomb.html
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation.  No representations are made about the suitability of this
+ * software for any purpose.  It is provided "as is" without express or 
+ * implied warranty.
+ *
+ * And remember: X Windows is to graphics hacking as roman numerals are to
+ * the square root of pi.
+ */
+
+#include <math.h>
+
+#include "screenhack.h"
+
+/* why doesn't this work??? */
+#ifdef HAVE_XSHM_EXTENSION
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#include <X11/extensions/XShm.h>
+#endif
+
+#define test_pattern_hyper 0
+
+/* costs ~6% speed */
+#define dither_when_mapped 1
+
+char *progclass = "RD";
+
+
+char *defaults [] = {
+  "RD.background:      black",         /* to placate SGI */
+  "RD.foreground:      white",
+  "*width:     100",
+  "*height:    100",
+  "*epoch:     40000",
+  "*palette:   -1",
+  "*reaction:  -1",
+  "*diffusion: -1",
+  "*verbose:   off",
+  "*radius:    -1",
+  "*speed:     0.0",
+  "*size:      0.66",
+  "*delay:     1000",
+  "*colors:    -1",
+  0
+};
+
+XrmOptionDescRec options [] = {
+  { "-width",          ".width",       XrmoptionSepArg, 0 },
+  { "-height",         ".height",      XrmoptionSepArg, 0 },
+  { "-epoch",          ".epoch",       XrmoptionSepArg, 0 },
+  { "-palette",                ".palette",     XrmoptionSepArg, 0 },
+  { "-reaction",       ".reaction",    XrmoptionSepArg, 0 },
+  { "-diffusion",      ".diffusion",   XrmoptionSepArg, 0 },
+  { "-verbose",                ".verbose",     XrmoptionSepArg, 0 },
+  { "-radius",         ".radius",      XrmoptionSepArg, 0 },
+  { "-speed",          ".speed",       XrmoptionSepArg, 0 },
+  { "-size",           ".size",        XrmoptionSepArg, 0 },
+  { "-delay",          ".delay",       XrmoptionSepArg, 0 },
+  { "-ncolors",                ".colors",      XrmoptionSepArg, 0 },
+  { 0, 0, 0, 0 }
+};
+
+#define bps 16
+#define mx ((1<<16)-1)
+
+/* you can replace integer mults wish shift/adds with these,
+   but it doesn't help on my 586 */
+#define x5(n) ((n<<2)+n)
+#define x7(n) ((n<<3)-n)
+
+/* why strip bit? */
+#define R (ya_random()&((1<<30)-1))
+
+/* should factor into RD-specfic and compute-every-pixel general */
+void
+screenhack (Display *dpy, Window win)
+{
+  GC gc;
+  XGCValues gcv;
+  XWindowAttributes xgwa;
+  Colormap cmap = 0;
+  XImage *image;
+  int width, height, radius;
+  int array_width, array_height;
+  double array_x, array_y;
+  double array_dx, array_dy;
+  int w2;
+  int frame = 0, epoch_time;
+  char *p;
+  int vdepth, pdepth;
+  ushort *r1, *r2, *r1b, *r2b;
+  int npix;
+  int reaction = 0;
+  int diffusion = 0;
+  int verbose;
+  int mapped;
+  int *m = 0;
+#if dither_when_mapped
+  unsigned char *mc = 0;
+#endif
+#ifdef HAVE_XSHM_EXTENSION
+  int use_shm = 0;
+  XShmSegmentInfo shm_info;
+#endif
+  int ncolors = 0;
+  XColor *colors = 0;
+
+  int delay = get_float_resource ("delay", "Integer");
+
+  XGetWindowAttributes (dpy, win, &xgwa);
+  width = get_integer_resource ("width", "Integer");
+  height = get_integer_resource ("height", "Integer");
+  {
+    double s = get_float_resource ("size", "Float");
+    double p = get_float_resource ("speed", "Float");
+    if (s < 0.0 || s > 1.0)
+      s = 1.0;
+    s = sqrt(s);
+    array_width = xgwa.width * s;
+    array_height = xgwa.height * s;
+    if (s < 0.99) {
+      array_width = (array_width / width) * width;
+      array_height = (array_height / height) * height;
+    }
+    if (array_width < width) array_width = width;
+    if (array_height < height) array_height = height;
+    array_x = (xgwa.width - array_width)/2;
+    array_y = (xgwa.height - array_height)/2;
+    array_dx = p;
+    array_dy = .31415926 * p;
+  }
+  if (width < 10) width = 10;
+  if (height < 10) height = 10;
+  verbose = get_boolean_resource ("verbose", "Boolean");
+  npix = (width + 2) * (height + 2);
+  epoch_time = get_integer_resource ("epoch", "Integer");
+  w2 = width + 2;
+  gcv.function = GXcopy;
+  gc = XCreateGC(dpy, win, GCFunction, &gcv);
+  vdepth = visual_depth(DefaultScreenOfDisplay(dpy), xgwa.visual);
+
+  /* This code only deals with pixmap depths of 1, 8, 16, and 32.
+     Therefore, we assume that those depths will be supported by the
+     coresponding visual depths (that depth-24 displays accept depth-32
+     pixmaps, and that depth-12 displays accept depth-16 pixmaps.) */
+  pdepth = (vdepth == 1 ? 1 :
+           vdepth <= 8 ? 8 :
+           vdepth <= 16 ? 16 :
+           32);
+
+  cmap = xgwa.colormap;
+  ncolors = get_integer_resource ("colors", "Integer");
+
+  if (ncolors <= 0) {
+    if (vdepth > 8)
+      ncolors = 2047;
+    else
+      ncolors = 255;
+  }
+
+  if (mono_p || ncolors < 2) ncolors = 2;
+  if (ncolors <= 2) mono_p = True;
+  colors = (XColor *) malloc(sizeof(*colors) * (ncolors+1));
+
+  mapped = (vdepth <= 8 &&
+           has_writable_cells(xgwa.screen, xgwa.visual));
+
+  if (!mapped)
+    m = (int *) malloc(sizeof(int) * (1<<16));
+#if dither_when_mapped
+  else {
+    int i, di;
+    mc = (unsigned char *) malloc(1<<16);
+    for (i = 0; i < (1<<16); i++) {
+      di = (i + (ya_random()&255))>>8;
+      if (di > 255) di = 255;
+      mc[i] = di;
+    }
+  }
+#endif
+  p = malloc(npix * (pdepth == 1 ? 1 : (pdepth / 8)));
+  r1 = (ushort *) malloc(sizeof(ushort) * npix);
+  r2 = (ushort *) malloc(sizeof(ushort) * npix);
+  r1b = (ushort *) malloc(sizeof(ushort) * npix);
+  r2b = (ushort *) malloc(sizeof(ushort) * npix);
+  if (!p || !r1 || !r2 || !r1b || !r2b) {
+    fprintf(stderr, "not enough memory for %d pixels.\n", npix);
+    exit(1);
+  }
+
+#ifdef HAVE_XSHM_EXTENSION
+  if (use_shm) {
+    printf("p=%X\n", p);
+    free(p);
+    image = XShmCreateImage(dpy, xgwa.visual, vdepth,
+                           ZPixmap, 0, &shm_info, width, height);
+    shm_info.shmid = shmget(IPC_PRIVATE,
+                           image->bytes_per_line * image->height,
+                           IPC_CREAT | 0777);
+    if (shm_info.shmid == -1)
+      printf ("shmget failed!");
+    shm_info.readOnly = False;
+    p = shmat(shm_info.shmid, 0, 0);
+    printf("p=%X %d\n", p, image->bytes_per_line);
+    XShmAttach(dpy, &shm_info);
+    XSync(dpy, False);
+  } else
+#endif
+  image = XCreateImage(dpy, xgwa.visual, vdepth,
+                      ZPixmap, 0, p,
+                      width, height, 8, 0);
+
+  while (1) {
+    int i, j;
+    ushort *t;
+#if test_pattern_hyper
+    if (frame&0x100)
+      sleep(1);
+#endif
+    if (verbose) {
+      double tm = 0;
+      struct timeval tp;
+      struct timezone tzp;
+      if (!(frame%100)) {
+       double tm2;
+       gettimeofday(&tp, &tzp);
+       tm2 = tp.tv_sec + tp.tv_usec * 1e-6;
+       if (frame > 0)
+         printf("fps = %2.4g\n", 100.0 / (tm2 - tm));
+       tm = tm2;
+      }
+    }
+    if (!(frame%epoch_time)) {
+      int s;
+      if (0 != frame) {
+       int t = epoch_time / 500;
+       if (t > 15)
+         t = 15;
+       sleep(t);
+      }
+         
+      for (i = 0; i < npix; i++) {
+       /* equilibrium */
+       r1[i] = 65500;
+       r2[i] = 11;
+      }
+
+      memset(colors, 0, ncolors*sizeof(*colors));
+      make_smooth_colormap (dpy, xgwa.visual, cmap, colors, &ncolors,
+                           True, 0, True);
+      if (ncolors <= 2) {
+       mono_p = True;
+       ncolors = 2;
+       colors[0].flags = DoRed|DoGreen|DoBlue;
+       colors[0].red = colors[0].green = colors[0].blue = 0;
+       XAllocColor(dpy, cmap, &colors[0]);
+       colors[1].flags = DoRed|DoGreen|DoBlue;
+       colors[1].red = colors[1].green = colors[1].blue = 0xFFFF;
+       XAllocColor(dpy, cmap, &colors[1]);
+      }
+
+      /* Scale it up so that there are exactly 255 colors -- that keeps the
+        animation speed consistent, even when there aren't many allocatable
+        colors, and prevents the -mono mode from looking like static. */
+      if (ncolors != 255) {
+       int i, n = 255;
+       double scale = (double) ncolors / (double) (n+1);
+       XColor *c2 = (XColor *) malloc(sizeof(*c2) * (n+1));
+       for (i = 0; i < n; i++)
+         c2[i] = colors[(int) (i * scale)];
+       free(colors);
+       colors = c2;
+       ncolors = n;
+      }
+
+
+      XSetWindowBackground(dpy, win, colors[255 % ncolors].pixel);
+      XClearWindow(dpy, win);
+
+      s = w2 * height/2 + width/2;
+      radius = get_integer_resource ("radius", "Integer");
+      if (radius < 0)
+       radius = 1 + ((R%10) ? (R%5) : (R % (width/2-2)));
+      for (i = -radius; i < (radius+1); i++)
+       for (j = -radius; j < (radius+1); j++)
+         r2[s + i + j*w2] = mx - (R&63);
+      reaction = get_integer_resource ("reaction", "Integer");
+      if (reaction < 0 || reaction > 2) reaction = R&1;
+      diffusion = get_integer_resource ("diffusion", "Integer");
+      if (diffusion < 0 || diffusion > 2)
+       diffusion = (R%5) ? ((R%3)?0:1) : 2;
+      if (2 == reaction && 2 == diffusion)
+       reaction = diffusion = 0;
+      
+/*      if (verbose)
+       printf("reaction = %d\ndiffusion = %d\n"
+              "palette = %d\nradius = %d\n",
+              reaction, diffusion, palette, radius);
+*/
+    }
+    for (i = 0; i <= width+1; i++) {
+      r1[i] = r1[i + w2 * height];
+      r2[i] = r2[i + w2 * height];
+      r1[i + w2 * (height + 1)] = r1[i + w2];
+      r2[i + w2 * (height + 1)] = r2[i + w2];
+    }
+    for (i = 0; i <= height+1; i++) {
+      r1[w2 * i] = r1[width + w2 * i];
+      r2[w2 * i] = r2[width + w2 * i];
+      r1[w2 * i + width + 1] = r1[w2 * i + 1];
+      r2[w2 * i + width + 1] = r2[w2 * i + 1];
+    }
+    for (i = 0; i < height; i++) {
+      int ii = i + 1;
+      char *q = p + width * i;
+      short *qq = ((short *) p) + width * i;
+      long  *qqq = ((long *) p) + width * i;
+      ushort *i1 = r1 + 1 + w2 * ii;
+      ushort *i2 = r2 + 1 + w2 * ii;
+      ushort *o1 = r1b + 1 + w2 * ii;
+      ushort *o2 = r2b + 1 + w2 * ii;
+      for (j = 0; j < width; j++) {
+#if test_pattern_hyper
+       int r1 = (i * j + (frame&127)*frame)&65535;
+#else
+       int uvv, r1 = 0, r2 = 0;
+       switch (diffusion) {
+       case 0:
+         r1 = i1[j] + i1[j+1] + i1[j-1] + i1[j+w2] + i1[j-w2];
+         r1 = r1 / 5;
+         r2 = (i2[j]<<3) + i2[j+1] + i2[j-1] + i2[j+w2] + i2[j-w2];
+         r2 = r2 / 12;
+         break;
+       case 1:
+         r1 = i1[j+1] + i1[j-1] + i1[j+w2] + i1[j-w2];
+         r1 = r1 >> 2;
+         r2 = (i2[j]<<2) + i2[j+1] + i2[j-1] + i2[j+w2] + i2[j-w2];
+         r2 = r2 >> 3;
+         break;
+       case 2:
+         r1 = (i1[j]<<1) + (i1[j+1]<<1) + (i1[j-1]<<1) + i1[j+w2] + i1[j-w2];
+         r1 = r1 >> 3;
+         r2 = (i2[j]<<2) + i2[j+1] + i2[j-1] + i2[j+w2] + i2[j-w2];
+         r2 = r2 >> 3;
+         break;
+       }
+       uvv = (((r1 * r2) >> bps) * r2) >> bps;
+       switch (reaction) {  /* costs 4% */
+       case 0:
+         r1 += 4 * (((28 * (mx-r1)) >> 10) - uvv);
+         r2 += 4 * (uvv - ((80 * r2) >> 10));
+         break;
+       case 1:
+         r1 += 3 * (((27 * (mx-r1)) >> 10) - uvv);
+         r2 += 3 * (uvv - ((80 * r2) >> 10));
+         break;
+       case 2:
+         r1 += 2 * (((28 * (mx-r1)) >> 10) - uvv);
+         r2 += 3 * (uvv - ((80 * r2) >> 10));
+         break;
+       }
+       if (r1 > mx) r1 = mx;
+       if (r2 > mx) r2 = mx;
+       if (r1 < 0) r1 = 0;
+       if (r2 < 0) r2 = 0;
+       o1[j] = r1;
+       o2[j] = r2;
+#endif
+
+       if (mapped)
+#if dither_when_mapped
+         q[j] = colors[mc[r1]  % ncolors].pixel;
+#else
+         q[j] = colors[(r1>>8) % ncolors].pixel;
+#endif
+       else if (pdepth == 8)
+         q[j] = colors[(r1>>8) % ncolors].pixel;
+       else if (pdepth == 16)
+         qq[j] = colors[(r1>>8) % ncolors].pixel;
+       else if (pdepth == 32)
+         qqq[j] = colors[(r1>>8) % ncolors].pixel;
+       else
+         abort();
+      }
+    }
+    t = r1; r1 = r1b; r1b = t;
+    t = r2; r2 = r2b; r2b = t;
+    for (i = 0; i < array_width; i += width)
+      for (j = 0; j < array_height; j += height)
+#ifdef HAVE_XSHM_EXTENSION
+       if (use_shm)
+         XShmPutImage(dpy, win, gc, image, 0, 0, i, j,
+                      width, height, False);
+       else
+#endif
+         XPutImage(dpy, win, gc, image, 0, 0, i+array_x, j+array_y, width, height);
+
+    array_x += array_dx;
+    array_y += array_dy;
+    if (array_x < 0) {
+      array_x = 0;
+      array_dx = -array_dx;
+    } else if (array_x > (xgwa.width - array_width)) {
+      array_x = (xgwa.width - array_width);
+      array_dx = -array_dx;
+    }
+    if (array_y < 0) {
+      array_y = 0;
+      array_dy = -array_dy;
+    } else if (array_y > (xgwa.height - array_height)) {
+      array_y = (xgwa.height - array_height);
+      array_dy = -array_dy;
+    }
+    frame++;
+
+    XSync(dpy, False);
+    if (delay > 0)
+      usleep(delay);
+  }
+}
diff --git a/hacks/rd-bomb.man b/hacks/rd-bomb.man
new file mode 100644 (file)
index 0000000..161c478
--- /dev/null
@@ -0,0 +1,98 @@
+.TH XScreenSaver 1 "10-May-97" "X Version 11"
+.SH NAME
+rd-bomb - reaction/diffusion textures
+.SH SYNOPSIS
+.B rd-bomb
+[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP]
+[\-background \fIcolor\fP] [\-window] [\-root] [\-install]
+[\-visual \fIvisual\fP] [\-width \fIn\fP] [\-height \fIn\fP]
+[\-reaction \fIn\fP] [\-diffusion \fIn\fP]
+[\-size \fIf\fP] [\-speed \fIf\fP] [\-delay \fIusecs\fP]
+.SH DESCRIPTION
+
+The \fIrd-bomb\fP program draws reaction/diffusion textures.  The code
+is derived from the 'd' mode of the "bomb" visual musical instrument
+(see http://www.cs.cmu.edu/~spot/bomb.html).  I got the equations from
+xmorphia (http://www.ccsf.caltech.edu/ismap/image.html), which is
+based on a version of the Gray-Scott model taken from:
+    John E. Pearson "Complex Patterns in a Simple System"
+    Science, 261,189, 9 July 1993.
+
+If the frame-rate is too low, consider decreasing the width and height
+of the tile, or decreasing the size of the active part of the screen.
+
+.SH OPTIONS
+
+If one of the reaction, diffusion, radius, and palette options is set
+to a negative value, then that option will be set to a random
+appropriate value.
+
+Be sure to try "-speed 1 -size 0.1 -epoch 3000".
+
+.I rd-bomb
+accepts the following options:
+.TP 8
+.B \-window
+Draw on a newly-created window.  This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-install
+Install a private colormap for the window.
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use.  Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-width \fIn\fP
+.TP 8
+.B \-height \fIn\fP
+Specify the size of the tile, in pixels.
+.TP 8
+.B \-reaction \fIn\fP
+.TP 8
+.B \-diffusion \fIn\fP
+These are constants in the equations that effect its visual nature.
+Each may be one of 0, 1, or 2.  
+.TP 8
+.B \-radius \fIn\fP
+Size of the seed.
+.TP 8
+.B \-palette \fIn\fP
+Selects a palette.  Must be between 0 and 80, inclusive.
+.TP 8
+.B \-size \fIf\fP
+What fraction of the window is actively drawn, a floating point number
+between 0 (exclusive) and 1 (inclusive).  Default is 0.66.
+.TP 8
+.B \-speed \fIf\fP
+When a fraction of the screen is active, the active area moves at this
+rate (a floating point number).  Default is zero.  Suggested value: 1.0.
+.TP 8
+.B \-delay \fIusecs\fP
+How many microseconds to delay between frames; default 1000, or 
+about 1/1000th of a second.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1),
+.BR xlock (1)
+.SH COPYRIGHT
+Copyright \(co 1997 by Scott Draves.
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation. 
+.SH AUTHOR
+Scott Draves <spot@cs.cmu.edu>, 9/97
index 55abbd840d0c23cfee020a173e562332d715a5a7..8b12fa76d8d4a61521530e6aa8af1971a8511c1e 100644 (file)
  * implied warranty.
  */
 
  * implied warranty.
  */
 
-/* Flying through an asteroid field.  Based on TI Explorer Lisp code by 
+/* 18-Sep-97: Johannes Keukelaar <johannes@nada.kth.se>: Added some color.
+ * Using -mono gives the old behaviour.  (Modified by jwz.)
+ */
+/*   Flying through an asteroid field.  Based on TI Explorer Lisp code by 
    John Nguyen <johnn@hx.lcs.mit.edu>
  */
 
    John Nguyen <johnn@hx.lcs.mit.edu>
  */
 
@@ -46,8 +49,11 @@ static Display *dpy;
 static Window window;
 static int width, height, midx, midy;
 static int dep_x, dep_y;
 static Window window;
 static int width, height, midx, midy;
 static int dep_x, dep_y;
+static int ncolors;
+static XColor *colors;
 static float max_dep;
 static float max_dep;
-static GC draw_gc, erase_gc;
+static GC erase_gc;
+static GC *draw_gcs;
 static Bool rotate_p;
 static Bool move_p;
 static int speed;
 static Bool rotate_p;
 static Bool move_p;
 static int speed;
@@ -67,6 +73,7 @@ struct rock {
   int depth;
   int size, x, y;
   int diff;
   int depth;
   int size, x, y;
   int diff;
+  int color;
 };
 
 static struct rock *rocks;
 };
 
 static struct rock *rocks;
@@ -84,6 +91,7 @@ rock_reset (struct rock *rock)
   rock->r = (SIN_RESOLUTION * 0.7) + (random () % (30 * SIN_RESOLUTION));
   rock->theta = random () % SIN_RESOLUTION;
   rock->depth = MAX_DEPTH * DEPTH_SCALE;
   rock->r = (SIN_RESOLUTION * 0.7) + (random () % (30 * SIN_RESOLUTION));
   rock->theta = random () % SIN_RESOLUTION;
   rock->depth = MAX_DEPTH * DEPTH_SCALE;
+  rock->color = random() % ncolors;
   rock_compute (rock);
   rock_draw (rock, True);
 }
   rock_compute (rock);
   rock_draw (rock, True);
 }
@@ -142,7 +150,7 @@ rock_draw (rock, draw_p)
      Bool draw_p;
 {
   GC gc = (draw_p 
      Bool draw_p;
 {
   GC gc = (draw_p 
-          ? (threed ? erase_gc : draw_gc)
+          ? (threed ? erase_gc : draw_gcs[rock->color])
           : erase_gc);
 
   if (rock->x <= 0 || rock->y <= 0 || rock->x >= width || rock->y >= height)
           : erase_gc);
 
   if (rock->x <= 0 || rock->y <= 0 || rock->x >= width || rock->y >= height)
@@ -375,7 +383,7 @@ init_rocks (Display *d, Window w)
   XGCValues gcv;
   Colormap cmap;
   XWindowAttributes xgwa;
   XGCValues gcv;
   Colormap cmap;
   XWindowAttributes xgwa;
-  unsigned int fg, bg;
+  unsigned int bg;
   dpy = d;
   window = w;
   XGetWindowAttributes (dpy, window, &xgwa);
   dpy = d;
   window = w;
   XGetWindowAttributes (dpy, window, &xgwa);
@@ -387,13 +395,57 @@ init_rocks (Display *d, Window w)
   if (speed > 100) speed = 100;
   rotate_p = get_boolean_resource ("rotate", "Boolean");
   move_p = get_boolean_resource ("move", "Boolean");
   if (speed > 100) speed = 100;
   rotate_p = get_boolean_resource ("rotate", "Boolean");
   move_p = get_boolean_resource ("move", "Boolean");
-  fg = get_pixel_resource ("foreground", "Foreground", dpy, cmap);
+  if (mono_p)
+    ncolors = 2;
+  else
+    ncolors = get_integer_resource ("colors", "Colors");
+
+  if (ncolors < 2)
+    {
+      ncolors = 2;
+      mono_p = True;
+  }
+
+  colors = (XColor *) malloc(ncolors * sizeof(*colors));
+  draw_gcs = (GC *) malloc(ncolors * sizeof(*draw_gcs));
+
   bg = get_pixel_resource ("background", "Background", dpy, cmap);
   bg = get_pixel_resource ("background", "Background", dpy, cmap);
-  gcv.foreground = fg;
-  gcv.background = bg;
-  draw_gc = XCreateGC (dpy, window, GCForeground|GCBackground, &gcv);
+  colors[0].pixel = bg;
+  colors[0].flags = DoRed|DoGreen|DoBlue;
+  XQueryColor(dpy, cmap, &colors[0]);
+
+  ncolors--;
+  make_random_colormap(dpy, xgwa.visual, cmap, colors+1, &ncolors, True,
+                      True, 0, True);
+  ncolors++;
+
+  if (ncolors < 2)
+    {
+      ncolors = 2;
+      mono_p = True;
+  }
+
+  if (mono_p)
+    {
+      unsigned int fg = get_pixel_resource("foreground", "Foreground",
+                                          dpy, cmap);
+      colors[1].pixel = fg;
+      colors[1].flags = DoRed|DoGreen|DoBlue;
+      XQueryColor(dpy, cmap, &colors[1]);
+      gcv.foreground = fg;
+      gcv.background = bg;
+      draw_gcs[0] = XCreateGC (dpy, window, GCForeground|GCBackground, &gcv);
+      draw_gcs[1] = draw_gcs[0];
+    }
+  else
+    for( i = 0; i < ncolors; i++ )
+      {
+       gcv.foreground = colors[i].pixel;
+       gcv.background = bg;
+       draw_gcs[i] = XCreateGC (dpy, window, GCForeground|GCBackground, &gcv);
+      }
+
   gcv.foreground = bg;
   gcv.foreground = bg;
-  gcv.background = fg;
   erase_gc = XCreateGC (dpy, window, GCForeground|GCBackground, &gcv);
 
   max_dep = (move_p ? MAX_DEP : 0);
   erase_gc = XCreateGC (dpy, window, GCForeground|GCBackground, &gcv);
 
   max_dep = (move_p ? MAX_DEP : 0);
@@ -420,7 +472,8 @@ init_rocks (Display *d, Window w)
     }
 
   /* don't want any exposure events from XCopyPlane */
     }
 
   /* don't want any exposure events from XCopyPlane */
-  XSetGraphicsExposures (dpy, draw_gc, False);
+  for( i = 0; i < ncolors; i++)
+    XSetGraphicsExposures (dpy, draw_gcs[i], False);
   XSetGraphicsExposures (dpy, erase_gc, False);
 
   nrocks = get_integer_resource ("count", "Count");
   XSetGraphicsExposures (dpy, erase_gc, False);
 
   nrocks = get_integer_resource ("count", "Count");
@@ -437,6 +490,7 @@ char *progclass = "Rocks";
 char *defaults [] = {
   "Rocks.background:   Black",         /* to placate SGI */
   "Rocks.foreground:   #E9967A",
 char *defaults [] = {
   "Rocks.background:   Black",         /* to placate SGI */
   "Rocks.foreground:   #E9967A",
+  "*colors:    5",
   "*count:     100",
   "*delay:     50000",
   "*speed:     100",
   "*count:     100",
   "*delay:     50000",
   "*speed:     100",
@@ -462,6 +516,7 @@ XrmOptionDescRec options [] = {
   {"-left3d",          ".left3d",      XrmoptionSepArg, 0 },
   {"-right3d",         ".right3d",     XrmoptionSepArg, 0 },
   {"-delta3d",         ".delta3d",     XrmoptionSepArg, 0 },
   {"-left3d",          ".left3d",      XrmoptionSepArg, 0 },
   {"-right3d",         ".right3d",     XrmoptionSepArg, 0 },
   {"-delta3d",         ".delta3d",     XrmoptionSepArg, 0 },
+  { "-colors",         ".colors",      XrmoptionSepArg, 0 },
   { 0, 0, 0, 0 }
 };
 
   { 0, 0, 0, 0 }
 };
 
index 37a163b9ab2b03d75bb2e372bb332bc61c4bbf6a..18d16ab4b96ee42439744177d278a63b31d3d418 100644 (file)
@@ -3,7 +3,7 @@
 rocks - animation of flying through an asteroid field
 .SH SYNOPSIS
 .B rocks
 rocks - animation of flying through an asteroid field
 .SH SYNOPSIS
 .B rocks
-[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-install] [\-visual \fIvisual\fP] [\-count \fIinteger\fP] [\-delay \fIusecs\fP] [\-speed \fIinteger\fP] [\-norotate] [\-nomove] [\-3d]
+[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-ncolors \fIn\fP] [\-install] [\-visual \fIvisual\fP] [\-count \fIinteger\fP] [\-delay \fIusecs\fP] [\-speed \fIinteger\fP] [\-norotate] [\-nomove] [\-3d]
 .SH DESCRIPTION
 The \fIrocks\fP program draws an animation of an asteroid field moving past
 the observer (or vice versa).  Sometimes the observer picks up spin on Z axis.
 .SH DESCRIPTION
 The \fIrocks\fP program draws an animation of an asteroid field moving past
 the observer (or vice versa).  Sometimes the observer picks up spin on Z axis.
@@ -17,6 +17,12 @@ Draw on a newly-created window.  This is the default.
 .B \-root
 Draw on the root window.
 .TP 8
 .B \-root
 Draw on the root window.
 .TP 8
+.B \-mono
+Make all the rocks the same color.
+.TP 8
+.B \-ncolors colors
+How many different colors to use.  Default 5.  Colors are chosen randomly.
+.TP 8
 .B \-install
 Install a private colormap for the window.
 .TP 8
 .B \-install
 Install a private colormap for the window.
 .TP 8
index eab1388743c82d4885cc38ed18309aa648ba7bdf..2eeb617035fa1926364a8863f133267cba3b6cad 100644 (file)
@@ -7,14 +7,22 @@
  * documentation.  No representations are made about the suitability of this
  * software for any purpose.  It is provided "as is" without express or 
  * implied warranty.
  * documentation.  No representations are made about the suitability of this
  * software for any purpose.  It is provided "as is" without express or 
  * implied warranty.
+ *
+ * 19971004: Johannes Keukelaar <johannes@nada.kth.se>: Use helix screen
+ *           eraser.
  */
 
 #include "screenhack.h"
  */
 
 #include "screenhack.h"
+#include "erase.h"
 
 static GC draw_gc, erase_gc;
 static unsigned int default_fg_pixel;
 static int iterations, offset;
 static Bool xsym, ysym;
 
 static GC draw_gc, erase_gc;
 static unsigned int default_fg_pixel;
 static int iterations, offset;
 static Bool xsym, ysym;
+static int erase_speed, sleep_time, erase_mode;
+
+void erase_window (Display *dpy, Window win, GC gc, int width, int height,
+                  int mode, int delay);
 
 static void
 init_rorschach (Display *dpy, Window window)
 
 static void
 init_rorschach (Display *dpy, Window window)
@@ -89,15 +97,10 @@ hurm (Display *dpy, Window window)
       XDrawPoints (dpy, window, draw_gc, points, j, CoordModeOrigin);
       XSync (dpy, True);
     }
       XDrawPoints (dpy, window, draw_gc, points, j, CoordModeOrigin);
       XSync (dpy, True);
     }
-  sleep (5);
-  for (i = 0; i < (ylim >> 1); i++)
-    {
-      y = (random () % ylim);
-      XDrawLine (dpy, window, erase_gc, 0, y, xlim, y);
-      XFlush (dpy);
-      if ((i % 50) == 0)
-       usleep (10000);
-    }
+  sleep ( sleep_time );
+
+  erase_window(dpy, window, erase_gc, xlim, ylim, erase_mode, erase_speed);
+
   XClearWindow (dpy, window);
   if (got_color) XFreeColors (dpy, cmap, &color.pixel, 1, 0);
   XSync (dpy, True);
   XClearWindow (dpy, window);
   if (got_color) XFreeColors (dpy, cmap, &color.pixel, 1, 0);
   XSync (dpy, True);
@@ -114,6 +117,9 @@ char *defaults [] = {
   "*ysymmetry: false",
   "*iterations:        4000",
   "*offset:    4",
   "*ysymmetry: false",
   "*iterations:        4000",
   "*offset:    4",
+  "Rorschach.eraseSpeed: 400",
+  "Rorschach.delay: 5",
+  "Rorschach.eraseMode: -1",
   0
 };
 
   0
 };
 
@@ -122,12 +128,18 @@ XrmOptionDescRec options [] = {
   { "-offset",         ".offset",      XrmoptionSepArg, 0 },
   { "-xsymmetry",      ".xsymmetry",   XrmoptionNoArg, "true" },
   { "-ysymmetry",      ".ysymmetry",   XrmoptionNoArg, "true" },
   { "-offset",         ".offset",      XrmoptionSepArg, 0 },
   { "-xsymmetry",      ".xsymmetry",   XrmoptionNoArg, "true" },
   { "-ysymmetry",      ".ysymmetry",   XrmoptionNoArg, "true" },
+  { "-erase-speed",    ".eraseSpeed",          XrmoptionSepArg, 0 },
+  { "-delay",           ".delay",               XrmoptionSepArg, 0 },
+  { "-erase-mode",      ".eraseMode",           XrmoptionSepArg, 0 },
   { 0, 0, 0, 0 }
 };
 
 void
 screenhack (Display *dpy, Window window)
 {
   { 0, 0, 0, 0 }
 };
 
 void
 screenhack (Display *dpy, Window window)
 {
+  erase_speed = get_integer_resource("eraseSpeed", "Integer");
+  sleep_time = get_integer_resource("delay", "Integer");
+  erase_mode = get_integer_resource("eraseMode", "Integer");
   init_rorschach (dpy, window);
   while (1)
     hurm (dpy, window);
   init_rorschach (dpy, window);
   while (1)
     hurm (dpy, window);
index 4619f0ff2a587679d5669c6dbaaef4af86a1f064..c89b1704e442c274a4ee81d568354bd401b63e54 100644 (file)
@@ -3,7 +3,7 @@
 rorschach - simulate ink-blot patterns
 .SH SYNOPSIS
 .B rorschach
 rorschach - simulate ink-blot patterns
 .SH SYNOPSIS
 .B rorschach
-[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-iterations \fIinteger\fP] [\-offset \fIinteger\fP] [\-xsymmetry] [\-ysymmetry]
+[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-iterations \fIinteger\fP] [\-offset \fIinteger\fP] [\-xsymmetry] [\-ysymmetry] [\-erase\-mode \fIinteger\fP] [\-erase\-speed \fIusecs\fP] [\-delay \fIsecs\fP]
 .SH DESCRIPTION
 The \fIrorschach\fP program draws random patterns reminiscent of the
 psychological test of same name.
 .SH DESCRIPTION
 The \fIrorschach\fP program draws random patterns reminiscent of the
 psychological test of same name.
@@ -38,6 +38,17 @@ Whether the images should be horizontally symmetrical.  Default true.
 .TP 8
 .B \-ysymmetry
 Whether the images should be vertically symmetrical.  Default false.
 .TP 8
 .B \-ysymmetry
 Whether the images should be vertically symmetrical.  Default false.
+.TP 8
+.B \-erase\-mode \fIinteger\fP
+This sets the erase mode. Mode \-1 chooses a random mode each time. There
+are currently 6 modes defined (0\-5).
+.TP 8
+.B \-erase\-speed \fIusecs\fP
+This controls the speed at which the screen will be erased. (Delay between
+erasing of individual lines.)
+.TP 8
+.B \-delay \fIseconds\fP
+This sets the number of seconds that the figure will be on the screen.
 .SH ENVIRONMENT
 .PP
 .TP 8
 .SH ENVIRONMENT
 .PP
 .TP 8
index a75c3eb1b266e0f444041eee5479878fd8ddb392..65110247ae66e12e68081acbf0e01af60efc6c9e 100644 (file)
@@ -1,11 +1,11 @@
 /* -*- Mode: C; tab-width: 4 -*-
 /* -*- Mode: C; tab-width: 4 -*-
- * tri --- Sierpinski triangle fractal.
+ * sierpinski --- Sierpinski's triangle fractal.
  */
 #if !defined( lint ) && !defined( SABER )
  */
 #if !defined( lint ) && !defined( SABER )
-static const char sccsid[] = "@(#)tri.c        4.00 97/01/01 xlockmore";
+static const char sccsid[] = "@(#)sierpinski.c 4.05 97/09/19 xlockmore";
 #endif
 
 #endif
 
-/* Copyright (c) 1988-91 by Patrick J. Naughton.
+/* Copyright (c) 1996 by Desmond Daignault
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation for any purpose and without fee is hereby granted,
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation for any purpose and without fee is hereby granted,
@@ -20,6 +20,8 @@ static const char sccsid[] = "@(#)tri.c       4.00 97/01/01 xlockmore";
  * other special, indirect and consequential damages.
  *
  * Revision History:
  * other special, indirect and consequential damages.
  *
  * Revision History:
+ * 18-Sep-97: 3D version Antti Kuntsi <kuntsi@iki.fi>.
+ * 20-May-97: Changed the name tri to sierpinski for more compatiblity
  * 10-May-97: jwz@netscape.com: turned into a standalone program.
  * 05-Sep-96: Desmond Daignault Datatimes Incorporated
  *            <tekdd@dtol.datatimes.com> .
  * 10-May-97: jwz@netscape.com: turned into a standalone program.
  * 05-Sep-96: Desmond Daignault Datatimes Incorporated
  *            <tekdd@dtol.datatimes.com> .
@@ -27,9 +29,9 @@ static const char sccsid[] = "@(#)tri.c       4.00 97/01/01 xlockmore";
 
 #ifdef STANDALONE
 # define PROGCLASS                                     "Sierpinski"
 
 #ifdef STANDALONE
 # define PROGCLASS                                     "Sierpinski"
-# define HACK_INIT                                     init_tri
-# define HACK_DRAW                                     draw_tri
-# define tri_opts                                      xlockmore_opts
+# define HACK_INIT                                     init_sierpinski
+# define HACK_DRAW                                     draw_sierpinski
+# define sierpinski_opts                       xlockmore_opts
 # define DEFAULTS      "*count:                2000    \n"                     \
                                        "*cycles:               100     \n"                     \
                                        "*delay:                400000  \n"                     \
 # define DEFAULTS      "*count:                2000    \n"                     \
                                        "*cycles:               100     \n"                     \
                                        "*delay:                400000  \n"                     \
@@ -39,113 +41,133 @@ static const char sccsid[] = "@(#)tri.c   4.00 97/01/01 xlockmore";
 # include "xlock.h"                                    /* from the xlockmore distribution */
 #endif /* !STANDALONE */
 
 # include "xlock.h"                                    /* from the xlockmore distribution */
 #endif /* !STANDALONE */
 
-ModeSpecOpt tri_opts = {
-  0, NULL, 0, NULL, NULL };
+ModeSpecOpt sierpinski_opts =
+{0, NULL, 0, NULL, NULL};
+
+#define MAXCORNERS 4
 
 typedef struct {
        int         width, height;
        int         time;
        int         px, py;
        int         total_npoints;
 
 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];
-} tristruct;
+  int         corners;
+       int         npoints[MAXCORNERS];
+       unsigned long colors[MAXCORNERS];
+       XPoint     *pointBuffer[MAXCORNERS];
+       XPoint      vertex[MAXCORNERS];
+} sierpinskistruct;
 
 
-static tristruct *tris = NULL;
+static sierpinskistruct *tris = NULL;
 
 static void
 startover(ModeInfo * mi)
 {
        int         j;
 
 static void
 startover(ModeInfo * mi)
 {
        int         j;
-       tristruct  *tp = &tris[MI_SCREEN(mi)];
+       sierpinskistruct *sp = &tris[MI_SCREEN(mi)];
 
        if (MI_NPIXELS(mi) > 2) {
 
        if (MI_NPIXELS(mi) > 2) {
-               tp->colors[0] = (NRAND(MI_NPIXELS(mi)));
-               tp->colors[1] = (tp->colors[0] + MI_NPIXELS(mi) / 7 +
-                            NRAND(2 * MI_NPIXELS(mi) / 7)) % MI_NPIXELS(mi);
-               tp->colors[2] = (tp->colors[0] + 4 * MI_NPIXELS(mi) / 7 +
-                            NRAND(2 * MI_NPIXELS(mi) / 7)) % MI_NPIXELS(mi);
+    if (sp->corners == 3) {
+               sp->colors[0] = (NRAND(MI_NPIXELS(mi)));
+               sp->colors[1] = (sp->colors[0] + MI_NPIXELS(mi) / 7 +
+                        NRAND(2 * MI_NPIXELS(mi) / 7 + 1)) % MI_NPIXELS(mi);
+               sp->colors[2] = (sp->colors[0] + 4 * MI_NPIXELS(mi) / 7 +
+                        NRAND(2 * MI_NPIXELS(mi) / 7 + 1)) % MI_NPIXELS(mi);
+   } else if (sp->corners == 4) {
+               sp->colors[0] = (NRAND(MI_NPIXELS(mi)));
+               sp->colors[1] = (sp->colors[0] + MI_NPIXELS(mi) / 7 +
+                        NRAND(MI_NPIXELS(mi) / 7 + 1)) % MI_NPIXELS(mi);
+               sp->colors[2] = (sp->colors[0] + 3 * MI_NPIXELS(mi) / 7 +
+                        NRAND(MI_NPIXELS(mi) / 7 + 1)) % MI_NPIXELS(mi);
+               sp->colors[3] = (sp->colors[0] + 5 * MI_NPIXELS(mi) / 7 +
+                        NRAND(MI_NPIXELS(mi) / 7 + 1)) % MI_NPIXELS(mi);
+   } else {
+     (void) fprintf(stderr, "colors not set for %d corners\n", sp->corners);
+        }
        }
        }
-       for (j = 0; j < 3; j++) {
-               tp->vertex[j].x = NRAND(tp->width);
-               tp->vertex[j].y = NRAND(tp->height);
+       for (j = 0; j < sp->corners; j++) {
+               sp->vertex[j].x = NRAND(sp->width);
+               sp->vertex[j].y = NRAND(sp->height);
        }
        }
-       tp->px = NRAND(tp->width);
-       tp->py = NRAND(tp->height);
-       tp->time = 0;
+       sp->px = NRAND(sp->width);
+       sp->py = NRAND(sp->height);
+       sp->time = 0;
        XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
 }
 
 void
        XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
 }
 
 void
-init_tri(ModeInfo * mi)
+init_sierpinski(ModeInfo * mi)
 {
 {
-       tristruct  *tp;
+       sierpinskistruct *sp;
        int         i;
 
        if (tris == NULL) {
        int         i;
 
        if (tris == NULL) {
-               if ((tris = (tristruct *) calloc(MI_NUM_SCREENS(mi),
-                                                sizeof (tristruct))) == NULL)
+               if ((tris = (sierpinskistruct *) calloc(MI_NUM_SCREENS(mi),
+                                        sizeof (sierpinskistruct))) == NULL)
                        return;
        }
                        return;
        }
-       tp = &tris[MI_SCREEN(mi)];
-
-       tp->width = MI_WIN_WIDTH(mi);
-       tp->height = MI_WIN_HEIGHT(mi);
-
-       tp->total_npoints = MI_BATCHCOUNT(mi);
-       if (tp->total_npoints < 1)
-               tp->total_npoints = 1;
-       for (i = 0; i < 3; i++) {
-               if (!tp->pointBuffer[i])
-                       tp->pointBuffer[i] = (XPoint *) malloc(tp->total_npoints *
+       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;
+  sp->corners = (LRAND() & 1) + 3;
+       for (i = 0; i < sp->corners; i++) {
+               if (!sp->pointBuffer[i])
+                       sp->pointBuffer[i] = (XPoint *) malloc(sp->total_npoints *
                                                            sizeof (XPoint));
        }
        startover(mi);
 }
 
 void
                                                            sizeof (XPoint));
        }
        startover(mi);
 }
 
 void
-draw_tri(ModeInfo * mi)
+draw_sierpinski(ModeInfo * mi)
 {
        Display    *display = MI_DISPLAY(mi);
        GC          gc = MI_GC(mi);
 {
        Display    *display = MI_DISPLAY(mi);
        GC          gc = MI_GC(mi);
-       tristruct  *tp = &tris[MI_SCREEN(mi)];
-       XPoint     *xp[3];
+       sierpinskistruct *sp = &tris[MI_SCREEN(mi)];
+       XPoint     **xp;
        int         i = 0, v;
 
        int         i = 0, v;
 
+    xp = (XPoint **) malloc (sp->corners * sizeof (XPoint *));
+    
        if (MI_NPIXELS(mi) <= 2)
                XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
        if (MI_NPIXELS(mi) <= 2)
                XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi));
-       for (i = 0; i < 3; i++)
-               xp[i] = tp->pointBuffer[i];
-       for (i = 0; i < tp->total_npoints; i++) {
-               v = NRAND(3);
-               tp->px = (tp->px + tp->vertex[v].x) / 2;
-               tp->py = (tp->py + tp->vertex[v].y) / 2;
-               xp[v]->x = tp->px;
-               xp[v]->y = tp->py;
+       for (i = 0; i < sp->corners; i++)
+               xp[i] = sp->pointBuffer[i];
+       for (i = 0; i < sp->total_npoints; i++) {
+               v = NRAND(sp->corners);
+               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]++;
                xp[v]++;
-               tp->npoints[v]++;
+               sp->npoints[v]++;
        }
        }
-       for (i = 0; i < 3; i++) {
+       for (i = 0; i < sp->corners; i++) {
                if (MI_NPIXELS(mi) > 2)
                if (MI_NPIXELS(mi) > 2)
-                       XSetForeground(display, gc, MI_PIXEL(mi, tp->colors[i]));
-               XDrawPoints(display, MI_WINDOW(mi), gc, tp->pointBuffer[i], tp->npoints[i],
+                       XSetForeground(display, gc, MI_PIXEL(mi, sp->colors[i]));
+               XDrawPoints(display, MI_WINDOW(mi), gc, sp->pointBuffer[i], sp->npoints[i],
                            CoordModeOrigin);
                            CoordModeOrigin);
-               tp->npoints[i] = 0;
+               sp->npoints[i] = 0;
        }
        }
-       if (++tp->time >= MI_CYCLES(mi))
+       if (++sp->time >= MI_CYCLES(mi))
                startover(mi);
                startover(mi);
+
+    free (xp);
 }
 
 void
 }
 
 void
-release_tri(ModeInfo * mi)
+release_sierpinski(ModeInfo * mi)
 {
        if (tris != NULL) {
                int         screen, i;
 
                for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
 {
        if (tris != NULL) {
                int         screen, i;
 
                for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
-                       for (i = 0; i < 3; i++)
+                       for (i = 0; i < MAXCORNERS; i++)
                                if (tris[screen].pointBuffer[i] != NULL) {
                                        (void) free((void *) tris[screen].pointBuffer[i]);
                                }
                                if (tris[screen].pointBuffer[i] != NULL) {
                                        (void) free((void *) tris[screen].pointBuffer[i]);
                                }
@@ -156,7 +178,7 @@ release_tri(ModeInfo * mi)
 }
 
 void
 }
 
 void
-refresh_tri(ModeInfo * mi)
+refresh_sierpinski(ModeInfo * mi)
 {
        /* Do nothing, it will refresh by itself */
 }
 {
        /* Do nothing, it will refresh by itself */
 }
index 6fe518f3706157928089f360274ed14c73eef9a5..24002f69102488d1ad40de935f69975e08d002d5 100644 (file)
--- a/setup.com
+++ b/setup.com
@@ -11,6 +11,7 @@ $ bubbles     :== $'mydir'bubbles
 $ decays*creen:== $'mydir'decayscreen
 $ deco        :== $'mydir'deco
 $ drift       :== $'mydir'drift
 $ decays*creen:== $'mydir'decayscreen
 $ deco        :== $'mydir'deco
 $ drift       :== $'mydir'drift
+$ fadeplot    :== $'mydir'fadeplot
 $ flag        :== $'mydir'flag
 $ flame       :== $'mydir'flame
 $ forest      :== $'mydir'forest
 $ flag        :== $'mydir'flag
 $ flame       :== $'mydir'flame
 $ forest      :== $'mydir'forest
index 9198bd87d341d4b12663c23bc5463a72aca9ea27..8931dc568722220b3148812b633b032c0944df61 100644 (file)
@@ -25,13 +25,13 @@ INCLUDES    = -I$(srcdir) -I$(srcdir)/.. @INCLUDES@
 
 SRCS           = alpha.c colors.c fade.c grabscreen.c hsv.c overlay.c \
                  resources.c spline.c usleep.c visual.c xmu.c xroger.c \
 
 SRCS           = alpha.c colors.c fade.c grabscreen.c hsv.c overlay.c \
                  resources.c spline.c usleep.c visual.c xmu.c xroger.c \
-                 yarandom.c
+                 yarandom.c erase.c
 OBJS           = alpha.o colors.o fade.o grabscreen.o hsv.o overlay.o \
                  resources.o spline.o usleep.o visual.o xmu.o xroger.o \
 OBJS           = alpha.o colors.o fade.o grabscreen.o hsv.o overlay.o \
                  resources.o spline.o usleep.o visual.o xmu.o xroger.o \
-                 yarandom.o
+                 yarandom.o erase.o
 HDRS           = alpha.h colors.h fade.h grabscreen.h hsv.h resources.h \
                  spline.h usleep.h utils.h version.h visual.h vroot.h xmu.h \
 HDRS           = alpha.h colors.h fade.h grabscreen.h hsv.h resources.h \
                  spline.h usleep.h utils.h version.h visual.h vroot.h xmu.h \
-                 yarandom.h
+                 yarandom.h erase.h
 EXTRAS         = README Makefile.in ad2c
 VMSFILES       = compile_axp.com compile_decc.com vms-gtod.c vms-gtod.h \
                  vms-strdup.c
 EXTRAS         = README Makefile.in ad2c
 VMSFILES       = compile_axp.com compile_decc.com vms-gtod.c vms-gtod.h \
                  vms-strdup.c
@@ -147,4 +147,8 @@ xroger.o: $(srcdir)/utils.h
 xroger.o: $(srcdir)/../config.h
 yarandom.o: $(srcdir)/../config.h
 yarandom.o: $(srcdir)/yarandom.h
 xroger.o: $(srcdir)/../config.h
 yarandom.o: $(srcdir)/../config.h
 yarandom.o: $(srcdir)/yarandom.h
+erase.o: $(srcdir)/utils.h
+erase.o: $(srcdir)/../config.h
+erase.o: $(srcdir)/yarandom.h
+erase.o: $(srcdir)/usleep.h
 
 
index 93366b64cff46c1c02962df2ce58ee788b91db1a..86b134426b44306620951295d3b629e5f2913b4e 100644 (file)
@@ -25,11 +25,15 @@ void
 free_colors(Display *dpy, Colormap cmap, XColor *colors, int ncolors)
 {
   int i;
 free_colors(Display *dpy, Colormap cmap, XColor *colors, int ncolors)
 {
   int i;
-  unsigned long *pixels = (unsigned long *) malloc(sizeof(*pixels) * ncolors);
-  for (i = 0; i < ncolors; i++)
-    pixels[i] = colors[i].pixel;
-  XFreeColors (dpy, cmap, pixels, ncolors, 0L);
-  free(pixels);
+  if (ncolors > 0)
+    {
+      unsigned long *pixels = (unsigned long *)
+       malloc(sizeof(*pixels) * ncolors);
+      for (i = 0; i < ncolors; i++)
+       pixels[i] = colors[i].pixel;
+      XFreeColors (dpy, cmap, pixels, ncolors, 0L);
+      free(pixels);
+    }
 }
 
 
 }
 
 
diff --git a/utils/erase.c b/utils/erase.c
new file mode 100644 (file)
index 0000000..f30f971
--- /dev/null
@@ -0,0 +1,128 @@
+/* erase.c: Erase the screen in various more or less interesting ways.
+ * (c) 1997 by Johannes Keukelaar <johannes@nada.kth.se>
+ * Permission to use in any way granted. Provided "as is" without expressed
+ * or implied warranty. NO WARRANTY, NO EXPRESSION OF SUITABILITY FOR ANY
+ * PURPOSE. (I.e.: Use in any way, but at your own risk!)
+ */
+
+#include "utils.h"
+#include "yarandom.h"
+#include "usleep.h"
+
+#define NUM_MODES 6
+
+void
+erase_window(Display *dpy, Window window, GC gc,
+            int width, int height, int mode, int delay)
+{
+  int *clear_lines;
+  int i, j, line, num_lines=0, granularity, max_num;
+
+  max_num = 2*height;
+  if(2*width>max_num)
+    max_num = 2*width;
+
+  clear_lines = (int *)calloc(max_num, sizeof(int));
+  if(clear_lines)
+    {
+      if(mode<0 || mode>=NUM_MODES)
+       mode = random()%NUM_MODES;
+      granularity = 25;
+      switch(mode)
+       {
+       case 0:
+         for(i = 0; i < height; i++)
+           clear_lines[i] = i;
+         for(i = 0; i < height; i++)
+           {
+             int t, r;
+             t = clear_lines[i];
+             r = random()%height;
+             clear_lines[i] = clear_lines[r];
+             clear_lines[r] = t;
+           }
+         num_lines = height;
+         break;
+       case 1:
+         for(i = 0; i < width; i++)
+           clear_lines[i] = i+height;
+         for(i = 0; i < width; i++)
+           {
+             int t, r;
+             t = clear_lines[i];
+             r = random()%width;
+             clear_lines[i] = clear_lines[r];
+             clear_lines[r] = t;
+           }
+         num_lines = width;
+         break;
+       case 2:
+         for(i = 0; i < width/2; i++)
+           clear_lines[i] = i*2+height;
+         for(i = 0; i < height/2; i++)
+           clear_lines[i+width/2] = i*2;
+         for(i = 0; i < width/2; i++)
+           clear_lines[i+width/2+height/2] = width-i*2-(width%2?0:1)+height;
+         num_lines = width+height/2;
+         granularity = 4;
+         break;
+       case 3:
+         for(i = 0; i < max_num/4; i++)
+           {
+             clear_lines[i*4] = i*2;
+             clear_lines[i*4+1] = height-i*2-(height%2?0:1);
+             clear_lines[i*4+2] = height+i*2;
+             clear_lines[i*4+3] = height+width-i*2-(width%2?0:1);
+           }
+         num_lines = max_num;
+         granularity = 4;
+         break;
+       case 4:
+         j = 0;
+         for(i = 0; i < width*2; i++)
+           {
+             line = (i/16)*16-(i%16)*15;
+             if(line>=0 && line<width)
+               {
+                 clear_lines[j] = height+line;
+                 j++;
+               }
+           }
+         num_lines = width;
+         granularity = 4;
+         break;
+       case 5:
+         j = 0;
+         for(i = width*2; i >= 0; i--)
+           {
+             line = (i/16)*16-(i%16)*15;
+             if(line>=0 && line<width)
+               {
+                 clear_lines[j] = height+line;
+                 j++;
+               }
+           }
+         num_lines = width;
+         granularity = 4;
+         break;
+       }
+      for (i = 0; i < num_lines; i++)
+       { 
+         if(clear_lines[i] < height)
+           XDrawLine (dpy, window, gc, 0, clear_lines[i], width, 
+                      clear_lines[i]);
+         else
+           XDrawLine (dpy, window, gc, clear_lines[i]-height, 0,
+                      clear_lines[i]-height, height);
+         XFlush (dpy);
+         if ((i % granularity) == 0)
+           {
+             usleep (delay*granularity);
+           }
+       }
+      
+      free(clear_lines);
+    }
+
+  XClearWindow (dpy, window);
+}
diff --git a/utils/erase.h b/utils/erase.h
new file mode 100644 (file)
index 0000000..44f8dbc
--- /dev/null
@@ -0,0 +1,14 @@
+/* erase.c: Erase the screen in various more or less interesting ways.
+ * (c) 1997 by Johannes Keukelaar <johannes@nada.kth.se>
+ * Permission to use in any way granted. Provided "as is" without expressed
+ * or implied warranty. NO WARRANTY, NO EXPRESSION OF SUITABILITY FOR ANY
+ * PURPOSE. (I.e.: Use in any way, but at your own risk!)
+ */
+
+#ifndef __XSCREENSAVER_ERASE_H__
+#define __XSCREENSAVER_ERASE_H__
+
+extern void erase_window(Display *dpy, Window window, GC gc,
+                        int width, int height, int mode, int delay);
+
+#endif /* __XSCREENSAVER_ERASE_H__ */
index 598c744a5268649bfb410903e1d21213203ae80e..bf753aca52ecc42008b780d2723280a6ce5bd417 100644 (file)
@@ -1,2 +1,2 @@
 static const char screensaver_id[] =
 static const char screensaver_id[] =
-       "@(#)xscreensaver 2.07, by Jamie Zawinski (jwz@netscape.com)";
+       "@(#)xscreensaver 2.10, by Jamie Zawinski (jwz@netscape.com)";