http://ftp.x.org/contrib/applications/xscreensaver-3.24.tar.gz
authorZygo Blaxell <zblaxell@hungrycats.org>
Mon, 2 Mar 2009 05:42:42 +0000 (00:42 -0500)
committerZygo Blaxell <zblaxell@hungrycats.org>
Mon, 2 Mar 2009 05:42:42 +0000 (00:42 -0500)
-rw-r--r-- 1 zblaxell zblaxell 1284791 Apr  2  2000 xscreensaver-3.24.tar.gz
f73cf70fc62150d903887036119e82050e39641b  xscreensaver-3.24.tar.gz

36 files changed:
Makefile.in
README
config.h.in
configure
configure.in
driver/Makefile.in
driver/XScreenSaver.ad.in
driver/XScreenSaver_ad.h
driver/demo-Gtk-stubs.h
driver/demo-Gtk-widgets.c
driver/demo-Gtk.c
driver/passwd-kerberos.c
driver/passwd-pam.c
driver/screensaver-properties.desktop.in [new file with mode: 0644]
driver/xdpyinfo.c
driver/xscreensaver-command.man
driver/xscreensaver-demo.glade
driver/xscreensaver-demo.man
driver/xscreensaver.man
hacks/Makefile.in
hacks/bsod.c
hacks/bsod.man
hacks/critical.c
hacks/critical.man
hacks/flow.c
hacks/maze.c
hacks/phosphor.man
hacks/vidwhacker
hacks/webcollage
hacks/xflame.c
hacks/xflame.man [new file with mode: 0644]
hacks/xteevee.c
utils/erase.c
utils/version.h
xscreensaver.lsm
xscreensaver.spec

index f1a39486bbb1852b74b0a1e01b1fb0cbd996d014..5cc087cb64bb3d2100b2fa56dc6dbf220c88bd24 100644 (file)
@@ -131,7 +131,7 @@ bump-version::
   MAJOR="$$1"; MINOR="$$2";                                                \
   NEW=`echo $$MINOR + 1 | bc` ;                                                    \
   NEW=`echo $$NEW | sed 's/^\([0-9]\)$$/0\1/'` ;                           \
-  D=`date '+%d-%b-%y'`;                                                            \
+  D=`date '+%d-%b-%Y'`;                                                            \
   if [ ! -f xscreensaver-$$MAJOR.$$MINOR.tar.gz ]; then                            \
     echo "WARNING: xscreensaver-$$MAJOR.$$MINOR.tar.gz does not exist.";    \
   fi ;                                                                     \
@@ -223,7 +223,7 @@ test-tar::
   ( cd BIN/lesstif ;                                                       \
     CC=cc ;                                                                \
     export CC ;                                                                    \
-    ../../configure --with-motif=/usr/local/lesstif ;                      \
+    ../../configure --with-motif=/usr/local/lesstif --without-gnome ;      \
     echo --------------------------------------------------------------- ;  \
     ( cd utils; gmake all ) ;                                              \
     ( cd driver; gmake all ) ;                                             \
diff --git a/README b/README
index ebe58b995d25ce1133a494de73e8224737db4a6e..5ff523c7fec208f34743f1aefc6c1cb38064982d 100644 (file)
--- a/README
+++ b/README
@@ -77,6 +77,18 @@ http://www.jwz.org/xscreensaver/.
 
                               ============
 
+Changes since 3.23:   * Added `-ignorant' option to `maze' hack.
+                      * Updates to `critical', `bsod', `xflame', and `flow'.
+                      * Added support for Kerberos 5 (via its Kerberos 4
+                        compatibility layer.)
+                      * Fixed a bad leak in `xteevee'.
+                      * Updated `webcollage' to handle recent Altavista URL
+                        format changes.
+                      * Removed xscreensaver-demo's `Ok' and `Cancel' buttons,
+                        since they were confusing people: all changes are now
+                        instantanious.
+                      * Made xscreensaver-demo install itself into the Gnome
+                        Control Center.
 Changes since 3.22:   * Fixed some misplaced text fields in the Motif version
                         of xscreensaver-demo; fixed a crash in the Gtk version
                         that would happen if the programs list was empty.
@@ -94,7 +106,7 @@ Changes since 3.20:   * Tweaked the xscreensaver-demo UI (Gtk only.)
                         GL visual should be used with nVidia systems now.
                       * Made the Makefiles obey $install_prefix.
                       * Made the `xscreensaver.spec' file able to generate both
-                        GL and non-GL packages simultaniously.
+                        GL and non-GL packages simultaneously.
 Changes since 3.19:   * Added new hacks `ripples' and `sierpinski3d'.
                       * Made `xscreensaver-command -exit' be silent when no
                         screen saver was running (instead of complaining.)
index c9b94b7064053bd069e56ad8470b2e081f46dcb8..b35e89a056e294c65e84c5caa9d42b6302313b8b 100644 (file)
  */
 #undef HAVE_GTK
 
+/*  Define this if you have Gnome and want to build support for the 
+    xscreensaver control panel in the Gnome Control Center (gnomecc).
+ */
+#undef HAVE_CRAPPLET
+
 /*  Define this if you have the XPM library installed.  Some of the demos can
  *  make use of this if it is available.
  */
  */
 #undef HAVE_KERBEROS
 
+/* Define this if you have Kerberos 5, meaning we need to use the Kerberos 4
+ * compatibility layer.
+ */
+#undef HAVE_KERBEROS5
+
 /*  Define this if you want to use PAM (Pluggable Authentication Modules)
  *  to lock/unlock the screen, instead of standard /etc/passwd authentication.
  */
index c6ce9ec195fb12dae9f699ca515c62fb042b0bec..e6ae69898723b28fa9536164432ea57b8d5cd918 100755 (executable)
--- a/configure
+++ b/configure
@@ -74,6 +74,8 @@ User interface options:
 ac_help="$ac_help
   --with-gtk              Use the Gtk toolkit for the user interface."
 ac_help="$ac_help
+  --with-gnome            Include support for the Gnome Control Center."
+ac_help="$ac_help
 
 Graphics options:
 
@@ -665,6 +667,14 @@ perl_version_cmd='print $]'
 
 
 
+###############################################################################
+#
+#       Function to demand "bc".  Losers.
+#
+###############################################################################
+
+
+
 ###############################################################################
 #
 #       Functions to check how to do ICMP PING requests.
@@ -787,7 +797,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
-echo "configure:802: checking host system type" >&5
+echo "configure:812: checking host system type" >&5
 
 host_alias=$host
 case "$host_alias" in
@@ -810,7 +820,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
-echo "configure:825: checking for $ac_word" >&5
+echo "configure:835: 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
@@ -840,7 +850,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
-echo "configure:855: checking for $ac_word" >&5
+echo "configure:865: 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
@@ -891,7 +901,7 @@ fi
       # Extract the first word of "cl", so it can be a program name with args.
 set dummy cl; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:906: checking for $ac_word" >&5
+echo "configure:916: 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
@@ -923,7 +933,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:938: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:948: 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.
@@ -934,12 +944,12 @@ cross_compiling=$ac_cv_prog_cc_cross
 
 cat > conftest.$ac_ext << EOF
 
-#line 949 "configure"
+#line 959 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:954: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:964: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; 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
@@ -965,12 +975,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:980: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:990: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
 cross_compiling=$ac_cv_prog_cc_cross
 
 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:985: checking whether we are using GNU C" >&5
+echo "configure:995: 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
@@ -979,7 +989,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:994: \"$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:1004: \"$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
@@ -998,7 +1008,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
 ac_save_CFLAGS="$CFLAGS"
 CFLAGS=
 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1013: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1023: 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
@@ -1032,7 +1042,7 @@ fi
 
   if test -z "$GCC"; then
     echo $ac_n "checking how to request ANSI compilation""... $ac_c" 1>&6
-echo "configure:1047: checking how to request ANSI compilation" >&5
+echo "configure:1057: checking how to request ANSI compilation" >&5
     case "$host" in
       *-hpux* )
         echo "$ac_t""HPUX: adding -Ae" 1>&6
@@ -1055,16 +1065,16 @@ echo "configure:1047: checking how to request ANSI compilation" >&5
   fi
 
   echo $ac_n "checking whether the compiler works on ANSI C""... $ac_c" 1>&6
-echo "configure:1070: checking whether the compiler works on ANSI C" >&5
+echo "configure:1080: 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
-#line 1075 "configure"
+#line 1085 "configure"
 #include "confdefs.h"
  main(int ac, char **av) { return 0; } 
 EOF
-if { (eval echo configure:1079: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1089: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   echo "$ac_t""yes" 1>&6
 else
@@ -1099,7 +1109,7 @@ fi
   fi
 
 echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:1114: checking how to run the C preprocessor" >&5
+echo "configure:1124: checking how to run the C preprocessor" >&5
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
@@ -1114,13 +1124,13 @@ else
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp.
   cat > conftest.$ac_ext <<EOF
-#line 1129 "configure"
+#line 1139 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1135: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1145: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -1131,13 +1141,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 1146 "configure"
+#line 1156 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1152: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1162: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -1148,13 +1158,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -nologo -E"
   cat > conftest.$ac_ext <<EOF
-#line 1163 "configure"
+#line 1173 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1169: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1179: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -1179,12 +1189,12 @@ fi
 echo "$ac_t""$CPP" 1>&6
 
 echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:1194: checking for working const" >&5
+echo "configure:1204: checking for working const" >&5
 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1199 "configure"
+#line 1209 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -1233,7 +1243,7 @@ ccp = (char const *const *) p;
 
 ; return 0; }
 EOF
-if { (eval echo configure:1248: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1258: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_const=yes
 else
@@ -1254,21 +1264,21 @@ EOF
 fi
 
 echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:1269: checking for inline" >&5
+echo "configure:1279: checking for inline" >&5
 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_cv_c_inline=no
 for ac_kw in inline __inline__ __inline; do
   cat > conftest.$ac_ext <<EOF
-#line 1276 "configure"
+#line 1286 "configure"
 #include "confdefs.h"
 
 int main() {
 } $ac_kw foo() {
 ; return 0; }
 EOF
-if { (eval echo configure:1283: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1293: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_inline=$ac_kw; break
 else
@@ -1293,6 +1303,19 @@ EOF
  ;;
 esac
 
+ac_bc_result=`echo 6+9 | bc 2>/dev/null`
+  echo $ac_n "checking for bc""... $ac_c" 1>&6
+echo "configure:1320: checking for bc" >&5
+  if test "$ac_bc_result" = "15" ; then
+    echo "$ac_t""yes" 1>&6
+  else
+    echo "$ac_t""no" 1>&6
+    echo ''
+    { echo "configure: error: Your system doesn't have \"bc\", which has been a standard
+                  part of Unix since the 1970s.  Come back when your vendor
+                  has grown a clue." 1>&2; exit 1; }
+  fi
 
 # stuff for Makefiles
 # Find a good install program.  We prefer a C program (faster),
@@ -1307,7 +1330,7 @@ esac
 # 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:1322: checking for a BSD compatible install" >&5
+echo "configure:1345: 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
@@ -1360,7 +1383,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
 echo $ac_n "checking whether \"\${INSTALL} -d\" creates intermediate directories""... $ac_c" 1>&6
-echo "configure:1375: checking whether \"\${INSTALL} -d\" creates intermediate directories" >&5
+echo "configure:1398: checking whether \"\${INSTALL} -d\" creates intermediate directories" >&5
 if eval "test \"`echo '$''{'ac_cv_install_d_creates_dirs'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1382,7 +1405,7 @@ echo "$ac_t""$ac_cv_install_d_creates_dirs" 1>&6
 
   if test "$ac_cv_install_d_creates_dirs" = no ; then
     echo $ac_n "checking whether \"mkdir -p\" creates intermediate directories""... $ac_c" 1>&6
-echo "configure:1397: checking whether \"mkdir -p\" creates intermediate directories" >&5
+echo "configure:1420: checking whether \"mkdir -p\" creates intermediate directories" >&5
 if eval "test \"`echo '$''{'ac_cv_mkdir_p_creates_dirs'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1413,7 +1436,7 @@ echo "$ac_t""$ac_cv_mkdir_p_creates_dirs" 1>&6
   fi
 
 echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:1428: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:1451: 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
@@ -1442,12 +1465,12 @@ fi
 
 # random libc stuff
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:1457: checking for ANSI C header files" >&5
+echo "configure:1480: checking for ANSI C header files" >&5
 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1462 "configure"
+#line 1485 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -1455,7 +1478,7 @@ else
 #include <float.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1470: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1493: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -1472,7 +1495,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
-#line 1487 "configure"
+#line 1510 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -1490,7 +1513,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
-#line 1505 "configure"
+#line 1528 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -1511,7 +1534,7 @@ if test "$cross_compiling" = yes; then
   :
 else
   cat > conftest.$ac_ext <<EOF
-#line 1526 "configure"
+#line 1549 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -1522,7 +1545,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
 exit (0); }
 
 EOF
-if { (eval echo configure:1537: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1560: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -1549,17 +1572,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
-echo "configure:1564: checking for $ac_hdr" >&5
+echo "configure:1587: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1569 "configure"
+#line 1592 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1574: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1597: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -1586,12 +1609,12 @@ fi
 done
 
 echo $ac_n "checking for mode_t""... $ac_c" 1>&6
-echo "configure:1601: checking for mode_t" >&5
+echo "configure:1624: 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
-#line 1606 "configure"
+#line 1629 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -1619,12 +1642,12 @@ EOF
 fi
 
 echo $ac_n "checking for pid_t""... $ac_c" 1>&6
-echo "configure:1634: checking for pid_t" >&5
+echo "configure:1657: checking for pid_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1639 "configure"
+#line 1662 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -1652,12 +1675,12 @@ EOF
 fi
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:1667: checking for size_t" >&5
+echo "configure:1690: checking for size_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1672 "configure"
+#line 1695 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -1685,12 +1708,12 @@ EOF
 fi
 
 echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
-echo "configure:1700: checking return type of signal handlers" >&5
+echo "configure:1723: 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
-#line 1705 "configure"
+#line 1728 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <signal.h>
@@ -1707,7 +1730,7 @@ int main() {
 int i;
 ; return 0; }
 EOF
-if { (eval echo configure:1722: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1745: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_type_signal=void
 else
@@ -1726,12 +1749,12 @@ EOF
 
 
 echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-echo "configure:1741: checking whether time.h and sys/time.h may both be included" >&5
+echo "configure:1764: checking whether time.h and sys/time.h may both be included" >&5
 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1746 "configure"
+#line 1769 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/time.h>
@@ -1740,7 +1763,7 @@ int main() {
 struct tm *tp;
 ; return 0; }
 EOF
-if { (eval echo configure:1755: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1778: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_time=yes
 else
@@ -1761,12 +1784,12 @@ EOF
 fi
 
 echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6
-echo "configure:1776: checking for sys/wait.h that is POSIX.1 compatible" >&5
+echo "configure:1799: 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
-#line 1781 "configure"
+#line 1804 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/wait.h>
@@ -1782,7 +1805,7 @@ wait (&s);
 s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
 ; return 0; }
 EOF
-if { (eval echo configure:1797: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1820: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_sys_wait_h=yes
 else
@@ -1807,12 +1830,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
-echo "configure:1822: checking for $ac_hdr that defines DIR" >&5
+echo "configure:1845: checking for $ac_hdr that defines DIR" >&5
 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1827 "configure"
+#line 1850 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <$ac_hdr>
@@ -1820,7 +1843,7 @@ int main() {
 DIR *dirp = 0;
 ; return 0; }
 EOF
-if { (eval echo configure:1835: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1858: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   eval "ac_cv_header_dirent_$ac_safe=yes"
 else
@@ -1845,7 +1868,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
-echo "configure:1860: checking for opendir in -ldir" >&5
+echo "configure:1883: 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
@@ -1853,7 +1876,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldir  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 1868 "configure"
+#line 1891 "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
@@ -1864,7 +1887,7 @@ int main() {
 opendir()
 ; return 0; }
 EOF
-if { (eval echo configure:1879: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1902: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -1886,7 +1909,7 @@ fi
 
 else
 echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
-echo "configure:1901: checking for opendir in -lx" >&5
+echo "configure:1924: 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
@@ -1894,7 +1917,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lx  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 1909 "configure"
+#line 1932 "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
@@ -1905,7 +1928,7 @@ int main() {
 opendir()
 ; return 0; }
 EOF
-if { (eval echo configure:1920: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1943: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -1928,12 +1951,12 @@ fi
 fi
 
 echo $ac_n "checking how to call gettimeofday""... $ac_c" 1>&6
-echo "configure:1943: checking how to call gettimeofday" >&5
+echo "configure:1966: 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
-#line 1948 "configure"
+#line 1971 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
                     #include <sys/time.h>
@@ -1942,7 +1965,7 @@ struct timeval tv; struct timezone tzp;
                     gettimeofday(&tv, &tzp);
 ; return 0; }
 EOF
-if { (eval echo configure:1957: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1980: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_gettimeofday_args=2
 else
@@ -1950,7 +1973,7 @@ else
   cat conftest.$ac_ext >&5
   rm -rf conftest*
   cat > conftest.$ac_ext <<EOF
-#line 1965 "configure"
+#line 1988 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
                                     #include <sys/time.h>
@@ -1958,7 +1981,7 @@ int main() {
 struct timeval tv; gettimeofday(&tv);
 ; return 0; }
 EOF
-if { (eval echo configure:1973: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1996: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_gettimeofday_args=1
 else
@@ -1997,12 +2020,12 @@ EOF
 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:2012: checking for $ac_func" >&5
+echo "configure:2035: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2017 "configure"
+#line 2040 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -2025,7 +2048,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2040: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2063: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -2053,12 +2076,12 @@ done
 for ac_func in sigaction syslog realpath
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2068: checking for $ac_func" >&5
+echo "configure:2091: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2073 "configure"
+#line 2096 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -2081,7 +2104,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2096: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2119: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -2106,12 +2129,12 @@ fi
 done
 
 echo $ac_n "checking for struct icmp""... $ac_c" 1>&6
-echo "configure:2121: checking for struct icmp" >&5
+echo "configure:2144: checking for struct icmp" >&5
 if eval "test \"`echo '$''{'ac_cv_have_icmp'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2126 "configure"
+#line 2149 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
                    #include <stdio.h>
@@ -2146,7 +2169,7 @@ struct icmp i;
                    ip.ip_hl = 0;
 ; return 0; }
 EOF
-if { (eval echo configure:2161: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2184: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_have_icmp=yes
 else
@@ -2166,12 +2189,12 @@ EOF
 
  fi
 echo $ac_n "checking for struct icmphdr""... $ac_c" 1>&6
-echo "configure:2181: checking for struct icmphdr" >&5
+echo "configure:2204: checking for struct icmphdr" >&5
 if eval "test \"`echo '$''{'ac_cv_have_icmphdr'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2186 "configure"
+#line 2209 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
                    #include <stdio.h>
@@ -2206,7 +2229,7 @@ struct icmphdr i;
                    ip.ip_hl = 0;
 ; return 0; }
 EOF
-if { (eval echo configure:2221: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2244: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_have_icmphdr=yes
 else
@@ -2229,17 +2252,17 @@ for ac_hdr in crypt.h sys/select.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2244: checking for $ac_hdr" >&5
+echo "configure:2267: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2249 "configure"
+#line 2272 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2254: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2277: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -2270,7 +2293,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
-echo "configure:2285: checking for $ac_word" >&5
+echo "configure:2308: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2309,7 +2332,7 @@ done
     PERL_VERSION=0
   else
     echo $ac_n "checking perl version""... $ac_c" 1>&6
-echo "configure:2324: checking perl version" >&5
+echo "configure:2347: checking perl version" >&5
 if eval "test \"`echo '$''{'ac_cv_perl_version'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2331,7 +2354,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
-echo "configure:2346: checking for X" >&5
+echo "configure:2369: checking for X" >&5
 
 # Check whether --with-x or --without-x was given.
 if test "${with_x+set}" = set; then
@@ -2393,12 +2416,12 @@ if test "$ac_x_includes" = NO; then
 
   # First, try using that file with no special directory specified.
 cat > conftest.$ac_ext <<EOF
-#line 2408 "configure"
+#line 2431 "configure"
 #include "confdefs.h"
 #include <$x_direct_test_include>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2413: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2436: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -2467,14 +2490,14 @@ if test "$ac_x_libraries" = NO; then
   ac_save_LIBS="$LIBS"
   LIBS="-l$x_direct_test_library $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2482 "configure"
+#line 2505 "configure"
 #include "confdefs.h"
 
 int main() {
 ${x_direct_test_function}()
 ; return 0; }
 EOF
-if { (eval echo configure:2489: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2512: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   LIBS="$ac_save_LIBS"
 # We can link X programs with no special library path.
@@ -2580,17 +2603,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
-echo "configure:2595: checking whether -R must be followed by a space" >&5
+echo "configure:2618: checking whether -R must be followed by a space" >&5
       ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries"
       cat > conftest.$ac_ext <<EOF
-#line 2598 "configure"
+#line 2621 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:2605: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2628: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_R_nospace=yes
 else
@@ -2606,14 +2629,14 @@ rm -f conftest*
       else
        LIBS="$ac_xsave_LIBS -R $x_libraries"
        cat > conftest.$ac_ext <<EOF
-#line 2621 "configure"
+#line 2644 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:2628: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2651: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_R_space=yes
 else
@@ -2645,7 +2668,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
-echo "configure:2660: checking for dnet_ntoa in -ldnet" >&5
+echo "configure:2683: 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
@@ -2653,7 +2676,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldnet  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2668 "configure"
+#line 2691 "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
@@ -2664,7 +2687,7 @@ int main() {
 dnet_ntoa()
 ; return 0; }
 EOF
-if { (eval echo configure:2679: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2702: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2686,7 +2709,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
-echo "configure:2701: checking for dnet_ntoa in -ldnet_stub" >&5
+echo "configure:2724: 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
@@ -2694,7 +2717,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldnet_stub  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2709 "configure"
+#line 2732 "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
@@ -2705,7 +2728,7 @@ int main() {
 dnet_ntoa()
 ; return 0; }
 EOF
-if { (eval echo configure:2720: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2743: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2734,12 +2757,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
-echo "configure:2749: checking for gethostbyname" >&5
+echo "configure:2772: checking for gethostbyname" >&5
 if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2754 "configure"
+#line 2777 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char gethostbyname(); below.  */
@@ -2762,7 +2785,7 @@ gethostbyname();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2777: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2800: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_gethostbyname=yes"
 else
@@ -2783,7 +2806,7 @@ fi
 
     if test $ac_cv_func_gethostbyname = no; then
       echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
-echo "configure:2798: checking for gethostbyname in -lnsl" >&5
+echo "configure:2821: 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
@@ -2791,7 +2814,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lnsl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2806 "configure"
+#line 2829 "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
@@ -2802,7 +2825,7 @@ int main() {
 gethostbyname()
 ; return 0; }
 EOF
-if { (eval echo configure:2817: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2840: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2832,12 +2855,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
-echo "configure:2847: checking for connect" >&5
+echo "configure:2870: checking for connect" >&5
 if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2852 "configure"
+#line 2875 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char connect(); below.  */
@@ -2860,7 +2883,7 @@ connect();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2875: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2898: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_connect=yes"
 else
@@ -2881,7 +2904,7 @@ fi
 
     if test $ac_cv_func_connect = no; then
       echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6
-echo "configure:2896: checking for connect in -lsocket" >&5
+echo "configure:2919: 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
@@ -2889,7 +2912,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2904 "configure"
+#line 2927 "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
@@ -2900,7 +2923,7 @@ int main() {
 connect()
 ; return 0; }
 EOF
-if { (eval echo configure:2915: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2938: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2924,12 +2947,12 @@ fi
 
     # gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX.
     echo $ac_n "checking for remove""... $ac_c" 1>&6
-echo "configure:2939: checking for remove" >&5
+echo "configure:2962: checking for remove" >&5
 if eval "test \"`echo '$''{'ac_cv_func_remove'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2944 "configure"
+#line 2967 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char remove(); below.  */
@@ -2952,7 +2975,7 @@ remove();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2967: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2990: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_remove=yes"
 else
@@ -2973,7 +2996,7 @@ fi
 
     if test $ac_cv_func_remove = no; then
       echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6
-echo "configure:2988: checking for remove in -lposix" >&5
+echo "configure:3011: 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
@@ -2981,7 +3004,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lposix  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2996 "configure"
+#line 3019 "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
@@ -2992,7 +3015,7 @@ int main() {
 remove()
 ; return 0; }
 EOF
-if { (eval echo configure:3007: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3030: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3016,12 +3039,12 @@ fi
 
     # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
     echo $ac_n "checking for shmat""... $ac_c" 1>&6
-echo "configure:3031: checking for shmat" >&5
+echo "configure:3054: checking for shmat" >&5
 if eval "test \"`echo '$''{'ac_cv_func_shmat'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3036 "configure"
+#line 3059 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char shmat(); below.  */
@@ -3044,7 +3067,7 @@ shmat();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3059: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3082: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_shmat=yes"
 else
@@ -3065,7 +3088,7 @@ fi
 
     if test $ac_cv_func_shmat = no; then
       echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6
-echo "configure:3080: checking for shmat in -lipc" >&5
+echo "configure:3103: 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
@@ -3073,7 +3096,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lipc  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3088 "configure"
+#line 3111 "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
@@ -3084,7 +3107,7 @@ int main() {
 shmat()
 ; return 0; }
 EOF
-if { (eval echo configure:3099: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3122: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3117,7 +3140,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
-echo "configure:3132: checking for IceConnectionNumber in -lICE" >&5
+echo "configure:3155: 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
@@ -3125,7 +3148,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lICE $X_EXTRA_LIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3140 "configure"
+#line 3163 "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
@@ -3136,7 +3159,7 @@ int main() {
 IceConnectionNumber()
 ; return 0; }
 EOF
-if { (eval echo configure:3151: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3174: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3167,7 +3190,7 @@ fi
 
 
     echo $ac_n "checking for X app-defaults directory""... $ac_c" 1>&6
-echo "configure:3182: checking for X app-defaults directory" >&5
+echo "configure:3205: 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
@@ -3366,7 +3389,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
-echo "configure:3381: checking for regcmp in -lgen" >&5
+echo "configure:3404: 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
@@ -3374,7 +3397,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgen  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3389 "configure"
+#line 3412 "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
@@ -3385,7 +3408,7 @@ int main() {
 regcmp()
 ; return 0; }
 EOF
-if { (eval echo configure:3400: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3423: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3409,7 +3432,7 @@ fi
     ;;
   esac
 echo $ac_n "checking for XPointer""... $ac_c" 1>&6
-echo "configure:3424: checking for XPointer" >&5
+echo "configure:3447: checking for XPointer" >&5
 if eval "test \"`echo '$''{'ac_cv_xpointer'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3420,14 +3443,14 @@ else
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 3435 "configure"
+#line 3458 "configure"
 #include "confdefs.h"
 #include <X11/Xlib.h>
 int main() {
 XPointer foo = (XPointer) 0;
 ; return 0; }
 EOF
-if { (eval echo configure:3442: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3465: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_xpointer=yes
 else
@@ -3465,17 +3488,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
-echo "configure:3480: checking for X11/Xmu/Error.h" >&5
+echo "configure:3503: 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
-#line 3485 "configure"
+#line 3508 "configure"
 #include "confdefs.h"
 #include <X11/Xmu/Error.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3490: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3513: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3526,7 +3549,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
-echo "configure:3541: checking for the SunOS 4.1.x _get_wmShellWidgetClass bug" >&5
+echo "configure:3564: 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
@@ -3539,14 +3562,14 @@ else
                     # with X libraries because we know it's SunOS.
                     LDFLAGS="$LDFLAGS -lXmu -lXt -lX11 -lXext -lm"
                     cat > conftest.$ac_ext <<EOF
-#line 3554 "configure"
+#line 3577 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:3561: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3584: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_sunos_xmu_bug=no
 else
@@ -3562,21 +3585,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 "configure:3577: checking whether the compiler understands -static" >&5
+echo "configure:3600: 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
-#line 3584 "configure"
+#line 3607 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:3591: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3614: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_ld_static=yes
 else
@@ -3659,7 +3682,7 @@ fi
 
     /*)
      echo $ac_n "checking for SGI SCREEN_SAVER headers""... $ac_c" 1>&6
-echo "configure:3674: checking for SGI SCREEN_SAVER headers" >&5
+echo "configure:3697: checking for SGI SCREEN_SAVER headers" >&5
      d=$with_sgi/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -3669,7 +3692,7 @@ echo "configure:3674: checking for SGI SCREEN_SAVER headers" >&5
      fi
 
      echo $ac_n "checking for SGI SCREEN_SAVER libs""... $ac_c" 1>&6
-echo "configure:3684: checking for SGI SCREEN_SAVER libs" >&5
+echo "configure:3707: checking for SGI SCREEN_SAVER libs" >&5
      d=$with_sgi/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -3702,17 +3725,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
-echo "configure:3717: checking for X11/extensions/XScreenSaver.h" >&5
+echo "configure:3740: 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
-#line 3722 "configure"
+#line 3745 "configure"
 #include "confdefs.h"
 #include <X11/extensions/XScreenSaver.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3727: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3750: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3769,7 +3792,7 @@ fi
 
     /*)
      echo $ac_n "checking for MIT-SCREEN-SAVER headers""... $ac_c" 1>&6
-echo "configure:3784: checking for MIT-SCREEN-SAVER headers" >&5
+echo "configure:3807: checking for MIT-SCREEN-SAVER headers" >&5
      d=$with_mit/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -3779,7 +3802,7 @@ echo "configure:3784: checking for MIT-SCREEN-SAVER headers" >&5
      fi
 
      echo $ac_n "checking for MIT-SCREEN-SAVER libs""... $ac_c" 1>&6
-echo "configure:3794: checking for MIT-SCREEN-SAVER libs" >&5
+echo "configure:3817: checking for MIT-SCREEN-SAVER libs" >&5
      d=$with_mit/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -3812,17 +3835,17 @@ if test "$with_mit" = 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
-echo "configure:3827: checking for X11/extensions/scrnsaver.h" >&5
+echo "configure:3850: 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
-#line 3832 "configure"
+#line 3855 "configure"
 #include "confdefs.h"
 #include <X11/extensions/scrnsaver.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3837: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3860: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3867,7 +3890,7 @@ fi
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for XScreenSaverRegister in -lXext""... $ac_c" 1>&6
-echo "configure:3882: checking for XScreenSaverRegister in -lXext" >&5
+echo "configure:3905: 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
@@ -3875,7 +3898,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXext -lm $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3890 "configure"
+#line 3913 "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
@@ -3886,7 +3909,7 @@ int main() {
 XScreenSaverRegister()
 ; return 0; }
 EOF
-if { (eval echo configure:3901: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3924: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3933,7 +3956,7 @@ fi
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for XScreenSaverRegister in -lXExExt""... $ac_c" 1>&6
-echo "configure:3948: checking for XScreenSaverRegister in -lXExExt" >&5
+echo "configure:3971: 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
@@ -3941,7 +3964,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXExExt -lX11 -lXext -lm $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3956 "configure"
+#line 3979 "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
@@ -3952,7 +3975,7 @@ int main() {
 XScreenSaverRegister()
 ; return 0; }
 EOF
-if { (eval echo configure:3967: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3990: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4002,7 +4025,7 @@ fi
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for XScreenSaverRegister in -lXss""... $ac_c" 1>&6
-echo "configure:4017: checking for XScreenSaverRegister in -lXss" >&5
+echo "configure:4040: 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
@@ -4010,7 +4033,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXss -lX11 -lXext -lm $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4025 "configure"
+#line 4048 "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
@@ -4021,7 +4044,7 @@ int main() {
 XScreenSaverRegister()
 ; return 0; }
 EOF
-if { (eval echo configure:4036: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4059: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4087,7 +4110,7 @@ fi
 
     /*)
      echo $ac_n "checking for XIDLE headers""... $ac_c" 1>&6
-echo "configure:4102: checking for XIDLE headers" >&5
+echo "configure:4125: checking for XIDLE headers" >&5
      d=$with_xidle/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -4097,7 +4120,7 @@ echo "configure:4102: checking for XIDLE headers" >&5
      fi
 
      echo $ac_n "checking for XIDLE libs""... $ac_c" 1>&6
-echo "configure:4112: checking for XIDLE libs" >&5
+echo "configure:4135: checking for XIDLE libs" >&5
      d=$with_xidle/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -4130,17 +4153,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
-echo "configure:4145: checking for X11/extensions/xidle.h" >&5
+echo "configure:4168: 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
-#line 4150 "configure"
+#line 4173 "configure"
 #include "confdefs.h"
 #include <X11/extensions/xidle.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4155: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4178: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -4196,7 +4219,7 @@ fi
 
     /*)
      echo $ac_n "checking for SGI-VIDEO-CONTROL headers""... $ac_c" 1>&6
-echo "configure:4211: checking for SGI-VIDEO-CONTROL headers" >&5
+echo "configure:4234: checking for SGI-VIDEO-CONTROL headers" >&5
      d=$with_sgivc/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -4206,7 +4229,7 @@ echo "configure:4211: checking for SGI-VIDEO-CONTROL headers" >&5
      fi
 
      echo $ac_n "checking for SGI-VIDEO-CONTROL libs""... $ac_c" 1>&6
-echo "configure:4221: checking for SGI-VIDEO-CONTROL libs" >&5
+echo "configure:4244: checking for SGI-VIDEO-CONTROL libs" >&5
      d=$with_sgivc/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -4241,17 +4264,17 @@ if test "$with_sgivc" = yes; then
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "X11/extensions/XSGIvc.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/extensions/XSGIvc.h""... $ac_c" 1>&6
-echo "configure:4256: checking for X11/extensions/XSGIvc.h" >&5
+echo "configure:4279: checking for X11/extensions/XSGIvc.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 4261 "configure"
+#line 4284 "configure"
 #include "confdefs.h"
 #include <X11/extensions/XSGIvc.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4266: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4289: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -4295,7 +4318,7 @@ fi
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for XSGIvcQueryGammaMap in -lXsgivc""... $ac_c" 1>&6
-echo "configure:4310: checking for XSGIvcQueryGammaMap in -lXsgivc" >&5
+echo "configure:4333: checking for XSGIvcQueryGammaMap in -lXsgivc" >&5
 ac_lib_var=`echo Xsgivc'_'XSGIvcQueryGammaMap | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4303,7 +4326,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXsgivc -lXext -lX11 $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4318 "configure"
+#line 4341 "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
@@ -4314,7 +4337,7 @@ int main() {
 XSGIvcQueryGammaMap()
 ; return 0; }
 EOF
-if { (eval echo configure:4329: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4352: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4379,7 +4402,7 @@ fi
 
     /*)
      echo $ac_n "checking for DPMS headers""... $ac_c" 1>&6
-echo "configure:4394: checking for DPMS headers" >&5
+echo "configure:4417: checking for DPMS headers" >&5
      d=$with_dpms/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -4389,7 +4412,7 @@ echo "configure:4394: checking for DPMS headers" >&5
      fi
 
      echo $ac_n "checking for DPMS libs""... $ac_c" 1>&6
-echo "configure:4404: checking for DPMS libs" >&5
+echo "configure:4427: checking for DPMS libs" >&5
      d=$with_dpms/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -4424,17 +4447,17 @@ if test "$with_dpms" = yes; then
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "X11/extensions/dpms.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/extensions/dpms.h""... $ac_c" 1>&6
-echo "configure:4439: checking for X11/extensions/dpms.h" >&5
+echo "configure:4462: checking for X11/extensions/dpms.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 4444 "configure"
+#line 4467 "configure"
 #include "confdefs.h"
 #include <X11/extensions/dpms.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4449: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4472: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -4478,7 +4501,7 @@ fi
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for DPMSInfo in -lXdpms""... $ac_c" 1>&6
-echo "configure:4493: checking for DPMSInfo in -lXdpms" >&5
+echo "configure:4516: checking for DPMSInfo in -lXdpms" >&5
 ac_lib_var=`echo Xdpms'_'DPMSInfo | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4486,7 +4509,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXdpms -lXext -lX11 $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4501 "configure"
+#line 4524 "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
@@ -4497,7 +4520,7 @@ int main() {
 DPMSInfo()
 ; return 0; }
 EOF
-if { (eval echo configure:4512: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4535: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4562,7 +4585,7 @@ fi
 
     /*)
      echo $ac_n "checking for xf86vmode headers""... $ac_c" 1>&6
-echo "configure:4577: checking for xf86vmode headers" >&5
+echo "configure:4600: checking for xf86vmode headers" >&5
      d=$with_xf86vmode/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -4572,7 +4595,7 @@ echo "configure:4577: checking for xf86vmode headers" >&5
      fi
 
      echo $ac_n "checking for xf86vmode libs""... $ac_c" 1>&6
-echo "configure:4587: checking for xf86vmode libs" >&5
+echo "configure:4610: checking for xf86vmode libs" >&5
      d=$with_xf86vmode/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -4607,17 +4630,17 @@ if test "$with_xf86vmode" = yes; then
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "X11/extensions/xf86vmode.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/extensions/xf86vmode.h""... $ac_c" 1>&6
-echo "configure:4622: checking for X11/extensions/xf86vmode.h" >&5
+echo "configure:4645: checking for X11/extensions/xf86vmode.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 4627 "configure"
+#line 4650 "configure"
 #include "confdefs.h"
 #include <X11/extensions/xf86vmode.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4632: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4655: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -4661,7 +4684,7 @@ fi
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for XF86VidModeGetViewPort in -lXxf86vm""... $ac_c" 1>&6
-echo "configure:4676: checking for XF86VidModeGetViewPort in -lXxf86vm" >&5
+echo "configure:4699: checking for XF86VidModeGetViewPort in -lXxf86vm" >&5
 ac_lib_var=`echo Xxf86vm'_'XF86VidModeGetViewPort | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4669,7 +4692,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXxf86vm -lXext -lX11 $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4684 "configure"
+#line 4707 "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
@@ -4680,7 +4703,7 @@ int main() {
 XF86VidModeGetViewPort()
 ; return 0; }
 EOF
-if { (eval echo configure:4695: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4718: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4734,7 +4757,7 @@ fi
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 4749 "configure"
+#line 4772 "configure"
 #include "confdefs.h"
 #include <X11/XHPlib.h>
 EOF
@@ -4772,7 +4795,7 @@ fi
 if test "$with_proc_interrupts" = yes; then
 
    echo $ac_n "checking whether /proc/interrupts contains keyboard data""... $ac_c" 1>&6
-echo "configure:4787: checking whether /proc/interrupts contains keyboard data" >&5
+echo "configure:4810: checking whether /proc/interrupts contains keyboard data" >&5
 if eval "test \"`echo '$''{'ac_cv_have_proc_interrupts'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4905,7 +4928,7 @@ fi
 
     /*)
      echo $ac_n "checking for PAM headers""... $ac_c" 1>&6
-echo "configure:4920: checking for PAM headers" >&5
+echo "configure:4943: checking for PAM headers" >&5
      d=$with_pam/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -4915,7 +4938,7 @@ echo "configure:4920: checking for PAM headers" >&5
      fi
 
      echo $ac_n "checking for PAM libs""... $ac_c" 1>&6
-echo "configure:4930: checking for PAM libs" >&5
+echo "configure:4953: checking for PAM libs" >&5
      d=$with_pam/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -4941,7 +4964,7 @@ echo "configure:4930: checking for PAM libs" >&5
 
 if test "$enable_locking" = yes -a "$with_pam" = yes; then
   echo $ac_n "checking for PAM""... $ac_c" 1>&6
-echo "configure:4956: checking for PAM" >&5
+echo "configure:4979: checking for PAM" >&5
 if eval "test \"`echo '$''{'ac_cv_pam'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4952,14 +4975,14 @@ else
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 4967 "configure"
+#line 4990 "configure"
 #include "confdefs.h"
 #include <security/pam_appl.h>
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:4974: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4997: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_pam=yes
 else
@@ -4984,7 +5007,7 @@ EOF
     # libpam typically requires dlopen and dlsym.  On FreeBSD,
     # those are in libc.  On Linux and Solaris, they're in libdl.
     echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "configure:4999: checking for dlopen in -ldl" >&5
+echo "configure:5022: checking for dlopen in -ldl" >&5
 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4992,7 +5015,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5007 "configure"
+#line 5030 "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
@@ -5003,7 +5026,7 @@ int main() {
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo configure:5018: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5041: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5025,12 +5048,12 @@ fi
 
 
     echo $ac_n "checking how to call pam_strerror""... $ac_c" 1>&6
-echo "configure:5040: checking how to call pam_strerror" >&5
+echo "configure:5063: checking how to call pam_strerror" >&5
     if eval "test \"`echo '$''{'ac_cv_pam_strerror_args'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5045 "configure"
+#line 5068 "configure"
 #include "confdefs.h"
 #include <stdio.h>
                       #include <stdlib.h>
@@ -5040,7 +5063,7 @@ pam_handle_t *pamh = 0;
                       char *s = pam_strerror(pamh, PAM_SUCCESS);
 ; return 0; }
 EOF
-if { (eval echo configure:5055: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5078: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_pam_strerror_args=2
 else
@@ -5048,7 +5071,7 @@ else
   cat conftest.$ac_ext >&5
   rm -rf conftest*
   cat > conftest.$ac_ext <<EOF
-#line 5063 "configure"
+#line 5086 "configure"
 #include "confdefs.h"
 #include <stdio.h>
                                       #include <stdlib.h>
@@ -5058,7 +5081,7 @@ char *s =
                                        pam_strerror(PAM_SUCCESS);
 ; return 0; }
 EOF
-if { (eval echo configure:5073: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5096: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_pam_strerror_args=1
 else
@@ -5096,6 +5119,7 @@ fi
 ###############################################################################
 
 have_kerberos=no
+have_kerberos5=no
 with_kerberos_req=unspecified
 
 # Check whether --with-kerberos or --without-kerberos was given.
@@ -5114,7 +5138,7 @@ fi
 
     /*)
      echo $ac_n "checking for Kerberos headers""... $ac_c" 1>&6
-echo "configure:5129: checking for Kerberos headers" >&5
+echo "configure:5153: checking for Kerberos headers" >&5
      d=$with_kerberos/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -5124,7 +5148,7 @@ echo "configure:5129: checking for Kerberos headers" >&5
      fi
 
      echo $ac_n "checking for Kerberos libs""... $ac_c" 1>&6
-echo "configure:5139: checking for Kerberos libs" >&5
+echo "configure:5163: checking for Kerberos libs" >&5
      d=$with_kerberos/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -5149,8 +5173,8 @@ echo "configure:5139: checking for Kerberos libs" >&5
   
 
 if test "$enable_locking" = yes -a "$with_kerberos" = yes; then
-  echo $ac_n "checking for Kerberos""... $ac_c" 1>&6
-echo "configure:5165: checking for Kerberos" >&5
+  echo $ac_n "checking for Kerberos 4""... $ac_c" 1>&6
+echo "configure:5189: checking for Kerberos 4" >&5
 if eval "test \"`echo '$''{'ac_cv_kerberos'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5161,14 +5185,14 @@ else
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 5176 "configure"
+#line 5200 "configure"
 #include "confdefs.h"
 #include <krb.h>
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:5183: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5207: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_kerberos=yes
 else
@@ -5182,22 +5206,78 @@ rm -f conftest*
 fi
 
 echo "$ac_t""$ac_cv_kerberos" 1>&6
+  echo $ac_n "checking for Kerberos 5""... $ac_c" 1>&6
+echo "configure:5222: checking for Kerberos 5" >&5
+if eval "test \"`echo '$''{'ac_cv_kerberos5'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+  ac_save_CPPFLAGS="$CPPFLAGS"
+  if test \! -z "$includedir" ; then 
+    CPPFLAGS="$CPPFLAGS -I$includedir"
+  fi
+  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+  cat > conftest.$ac_ext <<EOF
+#line 5233 "configure"
+#include "confdefs.h"
+#include <kerberosIV/krb.h>
+int main() {
+
+; return 0; }
+EOF
+if { (eval echo configure:5240: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  ac_cv_kerberos5=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_kerberos5=no
+fi
+rm -f conftest*
+  CPPFLAGS="$ac_save_CPPFLAGS"
+fi
+
+echo "$ac_t""$ac_cv_kerberos5" 1>&6
+
   if test "$ac_cv_kerberos" = yes ; then
     have_kerberos=yes
     cat >> confdefs.h <<\EOF
 #define HAVE_KERBEROS 1
 EOF
 
+  fi
 
+  if test "$ac_cv_kerberos5" = yes ; then
+    have_kerberos=yes
+    have_kerberos5=yes
+    cat >> confdefs.h <<\EOF
+#define HAVE_KERBEROS 1
+EOF
+
+    cat >> confdefs.h <<\EOF
+#define HAVE_KERBEROS5 1
+EOF
+
+  fi
+
+  if test "$have_kerberos5" = yes ; then
+    # from Matt Knopp <mhat@infocalypse.netlag.com>
+    # (who got it from amu@mit.edu)
+    PASSWD_LIBS="$PASSWD_LIBS -lkrb4 -ldes425 -lkrb5 -lk5crypto -lcrypt -lcom_err"
+  elif test "$have_kerberos" = yes ; then
     # from Tim Showalter <tjs+@andrew.cmu.edu>
     PASSWD_LIBS="$PASSWD_LIBS -lkrb -ldes"
+  fi
+
+  if test "$have_kerberos" = yes ; then
     echo $ac_n "checking for res_search""... $ac_c" 1>&6
-echo "configure:5207: checking for res_search" >&5
+echo "configure:5287: checking for res_search" >&5
 if eval "test \"`echo '$''{'ac_cv_func_res_search'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5212 "configure"
+#line 5292 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char res_search(); below.  */
@@ -5220,7 +5300,7 @@ res_search();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5235: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5315: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_res_search=yes"
 else
@@ -5238,7 +5318,7 @@ if eval "test \"`echo '$ac_cv_func_'res_search`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for res_search in -lresolv""... $ac_c" 1>&6
-echo "configure:5253: checking for res_search in -lresolv" >&5
+echo "configure:5333: checking for res_search in -lresolv" >&5
 ac_lib_var=`echo resolv'_'res_search | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -5246,7 +5326,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lresolv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5261 "configure"
+#line 5341 "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
@@ -5257,7 +5337,7 @@ int main() {
 res_search()
 ; return 0; }
 EOF
-if { (eval echo configure:5272: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5352: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5281,7 +5361,6 @@ fi
 
 fi
 
-
   fi
 fi
 
@@ -5313,7 +5392,7 @@ fi
 
     /*)
      echo $ac_n "checking for shadow password headers""... $ac_c" 1>&6
-echo "configure:5328: checking for shadow password headers" >&5
+echo "configure:5407: checking for shadow password headers" >&5
      d=$with_shadow/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -5323,7 +5402,7 @@ echo "configure:5328: checking for shadow password headers" >&5
      fi
 
      echo $ac_n "checking for shadow password libs""... $ac_c" 1>&6
-echo "configure:5338: checking for shadow password libs" >&5
+echo "configure:5417: checking for shadow password libs" >&5
      d=$with_shadow/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -5361,7 +5440,7 @@ fi
 
 if test "$with_shadow" = yes ; then
   echo $ac_n "checking for Sun-style shadow passwords""... $ac_c" 1>&6
-echo "configure:5376: checking for Sun-style shadow passwords" >&5
+echo "configure:5455: 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
@@ -5372,7 +5451,7 @@ else
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 5387 "configure"
+#line 5466 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
                                     #include <unistd.h>
@@ -5385,7 +5464,7 @@ struct passwd_adjunct *p = getpwanam("nobody");
                        const char *pw = p->pwa_passwd;
 ; return 0; }
 EOF
-if { (eval echo configure:5400: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5479: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_sun_adjunct=yes
 else
@@ -5415,7 +5494,7 @@ fi
 
 if test "$with_shadow" = yes ; then
   echo $ac_n "checking for DEC-style shadow passwords""... $ac_c" 1>&6
-echo "configure:5430: checking for DEC-style shadow passwords" >&5
+echo "configure:5509: 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
@@ -5426,7 +5505,7 @@ else
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 5441 "configure"
+#line 5520 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
                                     #include <unistd.h>
@@ -5443,7 +5522,7 @@ struct pr_passwd *p;
                        pw = p->ufld.fd_encrypt;
 ; return 0; }
 EOF
-if { (eval echo configure:5458: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5537: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_enhanced_passwd=yes
 else
@@ -5467,7 +5546,7 @@ echo "$ac_t""$ac_cv_enhanced_passwd" 1>&6
     # But on DEC, it's in -lsecurity.
     #
     echo $ac_n "checking for getprpwnam in -lprot""... $ac_c" 1>&6
-echo "configure:5482: checking for getprpwnam in -lprot" >&5
+echo "configure:5561: 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
@@ -5475,7 +5554,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lprot -lx $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5490 "configure"
+#line 5569 "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
@@ -5486,7 +5565,7 @@ int main() {
 getprpwnam()
 ; return 0; }
 EOF
-if { (eval echo configure:5501: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5580: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5505,7 +5584,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for getprpwnam in -lsecurity""... $ac_c" 1>&6
-echo "configure:5520: checking for getprpwnam in -lsecurity" >&5
+echo "configure:5599: 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
@@ -5513,7 +5592,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsecurity  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5528 "configure"
+#line 5607 "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
@@ -5524,7 +5603,7 @@ int main() {
 getprpwnam()
 ; return 0; }
 EOF
-if { (eval echo configure:5539: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5618: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5557,7 +5636,7 @@ fi
 
 if test "$with_shadow" = yes ; then
   echo $ac_n "checking for HP-style shadow passwords""... $ac_c" 1>&6
-echo "configure:5572: checking for HP-style shadow passwords" >&5
+echo "configure:5651: 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
@@ -5568,7 +5647,7 @@ else
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 5583 "configure"
+#line 5662 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
                                     #include <unistd.h>
@@ -5581,7 +5660,7 @@ struct s_passwd *p = getspwnam("nobody");
                        const char *pw = p->pw_passwd;
 ; return 0; }
 EOF
-if { (eval echo configure:5596: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5675: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_hpux_passwd=yes
 else
@@ -5602,7 +5681,7 @@ echo "$ac_t""$ac_cv_hpux_passwd" 1>&6
 
     # on HPUX, bigcrypt is in -lsec
     echo $ac_n "checking for bigcrypt in -lsec""... $ac_c" 1>&6
-echo "configure:5617: checking for bigcrypt in -lsec" >&5
+echo "configure:5696: 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
@@ -5610,7 +5689,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsec  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5625 "configure"
+#line 5704 "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
@@ -5621,7 +5700,7 @@ int main() {
 bigcrypt()
 ; return 0; }
 EOF
-if { (eval echo configure:5636: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5715: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5659,7 +5738,7 @@ fi
 
 if test "$with_shadow" = yes ; then
   echo $ac_n "checking for FreeBSD-style shadow passwords""... $ac_c" 1>&6
-echo "configure:5674: checking for FreeBSD-style shadow passwords" >&5
+echo "configure:5753: checking for FreeBSD-style shadow passwords" >&5
 if eval "test \"`echo '$''{'ac_cv_master_passwd'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5685,7 +5764,7 @@ fi
 
 if test "$with_shadow" = yes ; then
   echo $ac_n "checking for generic shadow passwords""... $ac_c" 1>&6
-echo "configure:5700: checking for generic shadow passwords" >&5
+echo "configure:5779: 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
@@ -5696,7 +5775,7 @@ else
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 5711 "configure"
+#line 5790 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
                                     #include <unistd.h>
@@ -5708,7 +5787,7 @@ struct spwd *p = getspnam("nobody");
                        const char *pw = p->sp_pwdp;
 ; return 0; }
 EOF
-if { (eval echo configure:5723: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5802: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_shadow=yes
 else
@@ -5729,7 +5808,7 @@ echo "$ac_t""$ac_cv_shadow" 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:5744: checking for getspnam in -lc" >&5
+echo "configure:5823: 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
@@ -5737,7 +5816,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lc  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5752 "configure"
+#line 5831 "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
@@ -5748,7 +5827,7 @@ int main() {
 getspnam()
 ; return 0; }
 EOF
-if { (eval echo configure:5763: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5842: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5770,7 +5849,7 @@ fi
 
     if test "$have_getspnam" = no ; then
       echo $ac_n "checking for getspnam in -lgen""... $ac_c" 1>&6
-echo "configure:5785: checking for getspnam in -lgen" >&5
+echo "configure:5864: 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
@@ -5778,7 +5857,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgen  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5793 "configure"
+#line 5872 "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
@@ -5789,7 +5868,7 @@ int main() {
 getspnam()
 ; return 0; }
 EOF
-if { (eval echo configure:5804: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5883: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5825,7 +5904,7 @@ if test "$enable_locking" = yes ; then
   # 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:5840: checking for crypt in -lc" >&5
+echo "configure:5919: 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
@@ -5833,7 +5912,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lc  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5848 "configure"
+#line 5927 "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
@@ -5844,7 +5923,7 @@ int main() {
 crypt()
 ; return 0; }
 EOF
-if { (eval echo configure:5859: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5938: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5866,7 +5945,7 @@ fi
 
   if test "$have_crypt" = no ; then
     echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6
-echo "configure:5881: checking for crypt in -lcrypt" >&5
+echo "configure:5960: 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
@@ -5874,7 +5953,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lcrypt  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5889 "configure"
+#line 5968 "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
@@ -5885,7 +5964,7 @@ int main() {
 crypt()
 ; return 0; }
 EOF
-if { (eval echo configure:5900: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5979: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5969,7 +6048,7 @@ fi
 
     /*)
      echo $ac_n "checking for Motif headers""... $ac_c" 1>&6
-echo "configure:5984: checking for Motif headers" >&5
+echo "configure:6063: checking for Motif headers" >&5
      d=$with_motif/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -5979,7 +6058,7 @@ echo "configure:5984: checking for Motif headers" >&5
      fi
 
      echo $ac_n "checking for Motif libs""... $ac_c" 1>&6
-echo "configure:5994: checking for Motif libs" >&5
+echo "configure:6073: checking for Motif libs" >&5
      d=$with_motif/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -6018,17 +6097,17 @@ if test "$with_motif" = yes; then
   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:6033: checking for Xm/Xm.h" >&5
+echo "configure:6112: 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
-#line 6038 "configure"
+#line 6117 "configure"
 #include "confdefs.h"
 #include <Xm/Xm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6043: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6122: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -6067,17 +6146,17 @@ if test "$have_motif" = yes; then
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "Xm/ComboBox.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for Xm/ComboBox.h""... $ac_c" 1>&6
-echo "configure:6082: checking for Xm/ComboBox.h" >&5
+echo "configure:6161: checking for Xm/ComboBox.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 6087 "configure"
+#line 6166 "configure"
 #include "confdefs.h"
 #include <Xm/ComboBox.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6092: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6171: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -6107,7 +6186,7 @@ fi
 
 ###############################################################################
 #
-#       Check for -lgtk.
+#       Check for -lgtk (and Gnome stuff)
 #
 ###############################################################################
 
@@ -6140,7 +6219,7 @@ esac
 
     /*)
      echo $ac_n "checking for Gtk headers""... $ac_c" 1>&6
-echo "configure:6155: checking for Gtk headers" >&5
+echo "configure:6234: checking for Gtk headers" >&5
      d=$with_gtk/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -6150,7 +6229,7 @@ echo "configure:6155: checking for Gtk headers" >&5
      fi
 
      echo $ac_n "checking for Gtk libs""... $ac_c" 1>&6
-echo "configure:6165: checking for Gtk libs" >&5
+echo "configure:6244: checking for Gtk libs" >&5
      d=$with_gtk/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -6179,6 +6258,75 @@ if test "$with_gtk" != yes -a "$with_gtk" != no ; then
   exit 1
 fi
 
+have_gnome=no
+with_gnome_req=unspecified
+# Check whether --with-gnome or --without-gnome was given.
+if test "${with_gnome+set}" = set; then
+  withval="$with_gnome"
+  with_gnome="$withval"; with_gnome_req="$withval"
+else
+  with_gnome=yes
+fi
+
+
+# if --with-gnome=/directory/ was specified, remember that directory so that
+# we can also look for the `gnome-config' program in that directory.
+case "$with_gnome" in
+  /*)
+    gnome_dir="$with_gnome"
+    ;;
+  *)
+    gnome_dir=""
+    ;;
+esac
+
+
+   case "$with_gnome" in
+    yes) ;;
+    no)  ;;
+
+    /*)
+     echo $ac_n "checking for Gnome headers""... $ac_c" 1>&6
+echo "configure:6302: checking for Gnome headers" >&5
+     d=$with_gnome/include
+     if test -d $d; then
+       X_CFLAGS="-I$d $X_CFLAGS"
+       echo "$ac_t""$d" 1>&6
+     else
+       echo "$ac_t""not found ($d: no such directory)" 1>&6
+     fi
+
+     echo $ac_n "checking for Gnome libs""... $ac_c" 1>&6
+echo "configure:6312: checking for Gnome libs" >&5
+     d=$with_gnome/lib
+     if test -d $d; then
+       X_LIBS="-L$d $X_LIBS"
+       echo "$ac_t""$d" 1>&6
+     else
+       echo "$ac_t""not found ($d: no such directory)" 1>&6
+     fi
+
+     # replace the directory string with "yes".
+     with_gnome_req="yes"
+     with_gnome=$with_gnome_req
+     ;;
+
+    *)
+     echo ""
+     echo "error: argument to --with-gnome must be \"yes\", \"no\", or a directory."
+     echo "       If it is a directory, then \`DIR/include' will be added to"
+     echo "       the -I list, and \`DIR/lib' will be added to the -L list."
+     exit 1
+     ;;
+   esac
+  
+
+if test "$with_gnome" != yes -a "$with_gnome" != no ; then
+  echo "error: must be yes or no: --with-gnome=$with_gnome"
+  exit 1
+fi
+
+
 jurassic_gtk=no
 if test "$with_gtk" = yes; then
   have_gtk=no
@@ -6191,7 +6339,13 @@ if test "$with_gtk" = yes; then
   if test ! -z "$gtk_dir"; then
     # canonicalize slashes.
     gtk_dir=`echo "${gtk_dir}/bin" | sed 's@//*@/@g'`
-    gtk_path="$gtk_dir:$gtk_dir:$gtk_path"
+    gtk_path="$gtk_dir:$gtk_path"
+  fi
+
+  if test ! -z "gnome_dir"; then
+    # canonicalize slashes.
+    gnome_dir=`echo "${gnome_dir}/bin" | sed 's@//*@/@g'`
+    gtk_path="$gnome_dir:$gtk_path"
   fi
 
   for ac_prog in glib-config
@@ -6199,7 +6353,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
-echo "configure:6214: checking for $ac_word" >&5
+echo "configure:6368: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_glib_config'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6239,7 +6393,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
-echo "configure:6254: checking for $ac_word" >&5
+echo "configure:6408: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_gtk_config'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6275,12 +6429,59 @@ test -n "$gtk_config" && break
 done
 
 
+  if test "$with_gnome" = yes; then
+    for ac_prog in gnome-config
+do
+# Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:6450: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_gnome_config'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$gnome_config" in
+  /*)
+  ac_cv_path_gnome_config="$gnome_config" # Let the user override the test with a path.
+  ;;
+  ?:/*)                         
+  ac_cv_path_gnome_config="$gnome_config" # Let the user override the test with a dos path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$gtk_path"
+  for ac_dir in $ac_dummy; do 
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_gnome_config="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  ;;
+esac
+fi
+gnome_config="$ac_cv_path_gnome_config"
+if test -n "$gnome_config"; then
+  echo "$ac_t""$gnome_config" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+test -n "$gnome_config" && break
+done
+
+  fi
+
   if test -n "$glib_config" -a  -n "gtk_config" ; then
     have_gtk=yes
+    if test "$with_gnome" = yes -a -n "$gnome_config" ; then
+      have_gnome=yes
+    fi
   fi
+
   if test "$have_gtk" = yes; then
     echo $ac_n "checking Gtk version number""... $ac_c" 1>&6
-echo "configure:6295: checking Gtk version number" >&5
+echo "configure:6496: checking Gtk version number" >&5
 if eval "test \"`echo '$''{'ac_cv_gtk_version_string'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6302,12 +6503,14 @@ echo "$ac_t""$ac_cv_gtk_version_string" 1>&6
     if test "$ac_gtk_version" = "unknown" || test "$ac_gtk_version" -lt 1002
     then
       have_gtk=no
+      have_gnome=no
       jurassic_gtk=yes
     fi
   fi
+
   if test "$have_gtk" = yes; then
     echo $ac_n "checking for Gtk includes""... $ac_c" 1>&6
-echo "configure:6322: checking for Gtk includes" >&5
+echo "configure:6525: checking for Gtk includes" >&5
 if eval "test \"`echo '$''{'ac_cv_gtk_config_cflags'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6316,7 +6519,7 @@ fi
 
 echo "$ac_t""$ac_cv_gtk_config_cflags" 1>&6
     echo $ac_n "checking for Gtk libs""... $ac_c" 1>&6
-echo "configure:6331: checking for Gtk libs" >&5
+echo "configure:6534: checking for Gtk libs" >&5
 if eval "test \"`echo '$''{'ac_cv_gtk_config_libs'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6324,13 +6527,87 @@ else
 fi
 
 echo "$ac_t""$ac_cv_gtk_config_libs" 1>&6
-    INCLUDES="$INCLUDES $ac_cv_gtk_config_cflags"
-    GTK_LIBS="$GTK_LIBS $ac_cv_gtk_config_libs"
+  fi
+  ac_gtk_config_cflags=$ac_cv_gtk_config_cflags
+  ac_gtk_config_libs=$ac_cv_gtk_config_libs
+
+  # Check for Gnome Capplet support.
+  #
+  if test "$have_gnome" = yes -a "$have_gtk" = yes; then
+    gnome_config_libs="capplet gnomeui"
+    echo $ac_n "checking for Gnome capplet includes""... $ac_c" 1>&6
+echo "configure:6551: checking for Gnome capplet includes" >&5
+    if eval "test \"`echo '$''{'ac_cv_gnome_config_cflags'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if ( $gnome_config --cflags $gnome_config_libs 2>&1 >/dev/null | \
+            grep -q Unknown ) ; then
+         ac_cv_gnome_config_cflags=''
+       else
+         ac_cv_gnome_config_cflags=`$gnome_config --cflags $gnome_config_libs`
+       fi
+fi
+
+    ac_gnome_config_cflags=$ac_cv_gnome_config_cflags
+    if test "$ac_gnome_config_cflags" = "" ; then
+      have_gnome=no
+      echo "$ac_t""no" 1>&6
+    else
+      echo "$ac_t""$ac_gnome_config_cflags" 1>&6
+    fi
+  fi
+
+  if test "$have_gnome" = yes -a "$have_gtk" = yes; then
+    echo $ac_n "checking for Gnome capplet libs""... $ac_c" 1>&6
+echo "configure:6574: checking for Gnome capplet libs" >&5
+    if eval "test \"`echo '$''{'ac_cv_gnome_config_libs'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if ( $gnome_config --libs $gnome_config_libs 2>&1 >/dev/null |
+            grep -q Unknown ) ; then
+         ac_cv_gnome_config_libs=''
+       else
+         ac_cv_gnome_config_libs=`$gnome_config --libs $gnome_config_libs`
+       fi
+fi
+
+    ac_gnome_config_libs=$ac_cv_gnome_config_libs
+    if test "$ac_gnome_config_libs" = "" ; then
+      have_gnome=no
+      echo "$ac_t""no" 1>&6
+    else
+      echo "$ac_t""$ac_gnome_config_libs" 1>&6
+    fi
+  fi
+
+  GNOME_DATADIR=""
+  if test "$have_gnome" = yes -a "$have_gtk" = yes; then
+    GNOME_DATADIR=`$gnome_config --datadir`
+  fi
+
+
+  # If we have Gnome, then override the gtk-config values with 
+  # the gnome-config values.
+  #
+  if test "$have_gnome" = yes -a "$have_gtk" = yes; then
+    ac_gtk_config_cflags=$ac_gnome_config_cflags
+    ac_gtk_config_libs=$ac_gnome_config_libs
+    cat >> confdefs.h <<\EOF
+#define HAVE_CRAPPLET 1
+EOF
+
+  fi
+
+
+  if test "$have_gtk" = yes; then
+    INCLUDES="$INCLUDES $ac_gtk_config_cflags"
+    GTK_LIBS="$GTK_LIBS $ac_gtk_config_libs"
     cat >> confdefs.h <<\EOF
 #define HAVE_GTK 1
 EOF
 
   fi
+
 fi
 
 
@@ -6343,7 +6620,7 @@ fi
 have_lesstif=no
 if test "$have_motif" = yes ; then
   echo $ac_n "checking whether Motif is really LessTif""... $ac_c" 1>&6
-echo "configure:6358: checking whether Motif is really LessTif" >&5
+echo "configure:6635: 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
@@ -6354,14 +6631,14 @@ else
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 6369 "configure"
+#line 6646 "configure"
 #include "confdefs.h"
 #include <Xm/Xm.h>
 int main() {
 long vers = LesstifVersion;
 ; return 0; }
 EOF
-if { (eval echo configure:6376: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:6653: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_have_lesstif=yes
 else
@@ -6386,7 +6663,7 @@ if test "$have_lesstif" = yes ; then
   ltv=unknown
   echo unknown > conftest-lt
   echo $ac_n "checking LessTif version number""... $ac_c" 1>&6
-echo "configure:6401: checking LessTif version number" >&5
+echo "configure:6678: checking LessTif version number" >&5
 if eval "test \"`echo '$''{'ac_cv_lesstif_version_string'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6401,7 +6678,7 @@ else
                      ac_cv_lesstif_version_string=unknown
 else
   cat > conftest.$ac_ext <<EOF
-#line 6416 "configure"
+#line 6693 "configure"
 #include "confdefs.h"
 #include <stdio.h>
                      #include <Xm/Xm.h>
@@ -6414,7 +6691,7 @@ else
                        exit(0);
                      }
 EOF
-if { (eval echo configure:6429: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:6706: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ltv=`cat conftest-lt`
                      ac_cv_lesstif_version=`echo $ltv | sed 's/ .*//'`
@@ -6444,7 +6721,7 @@ if test "$have_motif" = yes ; then
   mtv=unknown
   echo unknown > conftest-mt
   echo $ac_n "checking Motif version number""... $ac_c" 1>&6
-echo "configure:6459: checking Motif version number" >&5
+echo "configure:6736: checking Motif version number" >&5
 if eval "test \"`echo '$''{'ac_cv_motif_version_string'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6459,7 +6736,7 @@ else
                      ac_cv_motif_version_string=unknown
 else
   cat > conftest.$ac_ext <<EOF
-#line 6474 "configure"
+#line 6751 "configure"
 #include "confdefs.h"
 #include <stdio.h>
                      #include <Xm/Xm.h>
@@ -6472,7 +6749,7 @@ else
                        exit(0);
                      }
 EOF
-if { (eval echo configure:6487: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:6764: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   mtv=`cat conftest-mt`
                      ac_cv_motif_version=`echo $mtv | sed 's/ .*//'`
@@ -6516,7 +6793,7 @@ fi
 motif_requires_xpm=no
 if test "$have_motif" = yes ; then
    echo $ac_n "checking whether Motif requires XPM""... $ac_c" 1>&6
-echo "configure:6531: checking whether Motif requires XPM" >&5
+echo "configure:6808: checking whether Motif requires XPM" >&5
    if test "$motif_version" = "unknown" || test "$motif_version" -ge 2000
    then
      motif_requires_xpm=yes
@@ -6558,7 +6835,7 @@ if test "$have_motif" = yes ; then
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for XpQueryExtension in -lXp""... $ac_c" 1>&6
-echo "configure:6573: checking for XpQueryExtension in -lXp" >&5
+echo "configure:6850: checking for XpQueryExtension in -lXp" >&5
 ac_lib_var=`echo Xp'_'XpQueryExtension | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -6566,7 +6843,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXp -lX11 -lXext -lm $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6581 "configure"
+#line 6858 "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
@@ -6577,7 +6854,7 @@ int main() {
 XpQueryExtension()
 ; return 0; }
 EOF
-if { (eval echo configure:6592: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6869: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6631,7 +6908,7 @@ if test "$have_motif" = yes ; then
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for _Xsetlocale in -lXintl""... $ac_c" 1>&6
-echo "configure:6646: checking for _Xsetlocale in -lXintl" >&5
+echo "configure:6923: checking for _Xsetlocale in -lXintl" >&5
 ac_lib_var=`echo Xintl'_'_Xsetlocale | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -6639,7 +6916,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXintl -lX11 -lXext -lm $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6654 "configure"
+#line 6931 "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
@@ -6650,7 +6927,7 @@ int main() {
 _Xsetlocale()
 ; return 0; }
 EOF
-if { (eval echo configure:6665: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6942: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6707,7 +6984,7 @@ fi
 
     /*)
      echo $ac_n "checking for GL headers""... $ac_c" 1>&6
-echo "configure:6722: checking for GL headers" >&5
+echo "configure:6999: checking for GL headers" >&5
      d=$with_gl/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -6717,7 +6994,7 @@ echo "configure:6722: checking for GL headers" >&5
      fi
 
      echo $ac_n "checking for GL libs""... $ac_c" 1>&6
-echo "configure:6732: checking for GL libs" >&5
+echo "configure:7009: checking for GL libs" >&5
      d=$with_gl/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -6753,17 +7030,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
-echo "configure:6768: checking for GL/gl.h" >&5
+echo "configure:7045: 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
-#line 6773 "configure"
+#line 7050 "configure"
 #include "confdefs.h"
 #include <GL/gl.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6778: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7055: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -6794,17 +7071,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
-echo "configure:6809: checking for GL/glx.h" >&5
+echo "configure:7086: 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
-#line 6814 "configure"
+#line 7091 "configure"
 #include "confdefs.h"
 #include <GL/glx.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6819: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7096: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -6836,7 +7113,7 @@ fi
     # to link against.
     #
     echo $ac_n "checking whether GL is really MesaGL""... $ac_c" 1>&6
-echo "configure:6851: checking whether GL is really MesaGL" >&5
+echo "configure:7128: checking whether GL is really MesaGL" >&5
 if eval "test \"`echo '$''{'ac_cv_have_mesa_gl'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6848,7 +7125,7 @@ else
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 6863 "configure"
+#line 7140 "configure"
 #include "confdefs.h"
 #include <GL/glx.h>
 EOF
@@ -6877,7 +7154,7 @@ echo "$ac_t""$ac_cv_have_mesa_gl" 1>&6
     #
     if test "$ac_have_mesa_gl" = yes; then
       echo $ac_n "checking for pthread_create in -lpthread""... $ac_c" 1>&6
-echo "configure:6892: checking for pthread_create in -lpthread" >&5
+echo "configure:7169: checking for pthread_create in -lpthread" >&5
 ac_lib_var=`echo pthread'_'pthread_create | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -6885,7 +7162,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpthread  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6900 "configure"
+#line 7177 "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
@@ -6896,7 +7173,7 @@ int main() {
 pthread_create()
 ; return 0; }
 EOF
-if { (eval echo configure:6911: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7188: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6943,7 +7220,7 @@ fi
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for glXCreateContext in -lMesaGL""... $ac_c" 1>&6
-echo "configure:6958: checking for glXCreateContext in -lMesaGL" >&5
+echo "configure:7235: checking for glXCreateContext in -lMesaGL" >&5
 ac_lib_var=`echo MesaGL'_'glXCreateContext | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -6951,7 +7228,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lMesaGL -lMesaGLU $GL_LIBS -lX11 -lXext -lm $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6966 "configure"
+#line 7243 "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
@@ -6962,7 +7239,7 @@ int main() {
 glXCreateContext()
 ; return 0; }
 EOF
-if { (eval echo configure:6977: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7254: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7008,7 +7285,7 @@ fi
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for glXCreateContext in -lGL""... $ac_c" 1>&6
-echo "configure:7023: checking for glXCreateContext in -lGL" >&5
+echo "configure:7300: checking for glXCreateContext in -lGL" >&5
 ac_lib_var=`echo GL'_'glXCreateContext | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -7016,7 +7293,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lGL -lGLU $GL_LIBS -lX11 -lXext -lm $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7031 "configure"
+#line 7308 "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
@@ -7027,7 +7304,7 @@ int main() {
 glXCreateContext()
 ; return 0; }
 EOF
-if { (eval echo configure:7042: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7319: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7085,12 +7362,12 @@ EOF
     if test "$ac_have_mesa_gl" = yes; then
 
       echo $ac_n "checking MesaGL version number""... $ac_c" 1>&6
-echo "configure:7100: checking MesaGL version number" >&5
+echo "configure:7377: checking MesaGL version number" >&5
 if eval "test \"`echo '$''{'ac_cv_mesagl_version_string'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7105 "configure"
+#line 7382 "configure"
 #include "confdefs.h"
 #include <GL/gl.h>
 configure: MESA_MAJOR_VERSION MESA_MINOR_VERSION
@@ -7156,7 +7433,7 @@ echo "$ac_t""$ac_cv_mesagl_version_string" 1>&6
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for glBindTexture in -l$gl_lib_1""... $ac_c" 1>&6
-echo "configure:7171: checking for glBindTexture in -l$gl_lib_1" >&5
+echo "configure:7448: checking for glBindTexture in -l$gl_lib_1" >&5
 ac_lib_var=`echo $gl_lib_1'_'glBindTexture | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -7164,7 +7441,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$gl_lib_1 $GL_LIBS -lX11 -lXext -lm $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7179 "configure"
+#line 7456 "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
@@ -7175,7 +7452,7 @@ int main() {
 glBindTexture()
 ; return 0; }
 EOF
-if { (eval echo configure:7190: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7467: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7209,7 +7486,7 @@ fi
     # See comments in utils/visual-gl.c for why this is sometimes necessary.
     #
     echo $ac_n "checking whether drastic GL measures must be taken""... $ac_c" 1>&6
-echo "configure:7224: checking whether drastic GL measures must be taken" >&5
+echo "configure:7501: checking whether drastic GL measures must be taken" >&5
     case "$host" in
       *-sgi*)
         echo "$ac_t""yes -- hello, SGI." 1>&6
@@ -7262,7 +7539,7 @@ fi
 
     /*)
      echo $ac_n "checking for GLE headers""... $ac_c" 1>&6
-echo "configure:7277: checking for GLE headers" >&5
+echo "configure:7554: checking for GLE headers" >&5
      d=$with_gle/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -7272,7 +7549,7 @@ echo "configure:7277: checking for GLE headers" >&5
      fi
 
      echo $ac_n "checking for GLE libs""... $ac_c" 1>&6
-echo "configure:7287: checking for GLE libs" >&5
+echo "configure:7564: checking for GLE libs" >&5
      d=$with_gle/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -7308,17 +7585,17 @@ if test "$with_gle" = yes; then
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "GL/gutil.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for GL/gutil.h""... $ac_c" 1>&6
-echo "configure:7323: checking for GL/gutil.h" >&5
+echo "configure:7600: checking for GL/gutil.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 7328 "configure"
+#line 7605 "configure"
 #include "confdefs.h"
 #include <GL/gutil.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7333: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7610: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7349,17 +7626,17 @@ fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "GL/tube.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for GL/tube.h""... $ac_c" 1>&6
-echo "configure:7364: checking for GL/tube.h" >&5
+echo "configure:7641: checking for GL/tube.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 7369 "configure"
+#line 7646 "configure"
 #include "confdefs.h"
 #include <GL/tube.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7374: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7651: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7404,7 +7681,7 @@ fi
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for gleCreateGC in -lgle""... $ac_c" 1>&6
-echo "configure:7419: checking for gleCreateGC in -lgle" >&5
+echo "configure:7696: checking for gleCreateGC in -lgle" >&5
 ac_lib_var=`echo gle'_'gleCreateGC | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -7412,7 +7689,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgle $GL_LIBS -lX11 -lXext -lm $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7427 "configure"
+#line 7704 "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
@@ -7423,7 +7700,7 @@ int main() {
 gleCreateGC()
 ; return 0; }
 EOF
-if { (eval echo configure:7438: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7715: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7482,7 +7759,7 @@ fi
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for uview_direction_d in -lmatrix""... $ac_c" 1>&6
-echo "configure:7497: checking for uview_direction_d in -lmatrix" >&5
+echo "configure:7774: checking for uview_direction_d in -lmatrix" >&5
 ac_lib_var=`echo matrix'_'uview_direction_d | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -7490,7 +7767,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lmatrix $GL_LIBS -lX11 -lXext -lm $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7505 "configure"
+#line 7782 "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
@@ -7501,7 +7778,7 @@ int main() {
 uview_direction_d()
 ; return 0; }
 EOF
-if { (eval echo configure:7516: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7793: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7568,7 +7845,7 @@ fi
 
     /*)
      echo $ac_n "checking for XPM headers""... $ac_c" 1>&6
-echo "configure:7583: checking for XPM headers" >&5
+echo "configure:7860: checking for XPM headers" >&5
      d=$with_xpm/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -7578,7 +7855,7 @@ echo "configure:7583: checking for XPM headers" >&5
      fi
 
      echo $ac_n "checking for XPM libs""... $ac_c" 1>&6
-echo "configure:7593: checking for XPM libs" >&5
+echo "configure:7870: checking for XPM libs" >&5
      d=$with_xpm/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -7611,17 +7888,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
-echo "configure:7626: checking for X11/xpm.h" >&5
+echo "configure:7903: 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
-#line 7631 "configure"
+#line 7908 "configure"
 #include "confdefs.h"
 #include <X11/xpm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7636: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7913: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7687,7 +7964,7 @@ fi
 
     /*)
      echo $ac_n "checking for XSHM headers""... $ac_c" 1>&6
-echo "configure:7702: checking for XSHM headers" >&5
+echo "configure:7979: checking for XSHM headers" >&5
      d=$with_xshm/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -7697,7 +7974,7 @@ echo "configure:7702: checking for XSHM headers" >&5
      fi
 
      echo $ac_n "checking for XSHM libs""... $ac_c" 1>&6
-echo "configure:7712: checking for XSHM libs" >&5
+echo "configure:7989: checking for XSHM libs" >&5
      d=$with_xshm/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -7732,17 +8009,17 @@ if test "$with_xshm" = yes; then
   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:7747: checking for X11/extensions/XShm.h" >&5
+echo "configure:8024: 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 7752 "configure"
+#line 8029 "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:7757: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8034: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7776,17 +8053,17 @@ 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:7791: checking for sys/ipc.h" >&5
+echo "configure:8068: 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 7796 "configure"
+#line 8073 "configure"
 #include "confdefs.h"
 #include <sys/ipc.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7801: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8078: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7821,17 +8098,17 @@ 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:7836: checking for sys/shm.h" >&5
+echo "configure:8113: 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 7841 "configure"
+#line 8118 "configure"
 #include "confdefs.h"
 #include <sys/shm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7846: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8123: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7883,7 +8160,7 @@ fi
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for XShmQueryExtension in -lXextSam""... $ac_c" 1>&6
-echo "configure:7898: checking for XShmQueryExtension in -lXextSam" >&5
+echo "configure:8175: checking for XShmQueryExtension in -lXextSam" >&5
 ac_lib_var=`echo XextSam'_'XShmQueryExtension | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -7891,7 +8168,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXextSam -lX11 -lXext -lm $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7906 "configure"
+#line 8183 "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
@@ -7902,7 +8179,7 @@ int main() {
 XShmQueryExtension()
 ; return 0; }
 EOF
-if { (eval echo configure:7917: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8194: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7969,7 +8246,7 @@ fi
 
     /*)
      echo $ac_n "checking for DOUBLE-BUFFER headers""... $ac_c" 1>&6
-echo "configure:7984: checking for DOUBLE-BUFFER headers" >&5
+echo "configure:8261: checking for DOUBLE-BUFFER headers" >&5
      d=$with_xdbe/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -7979,7 +8256,7 @@ echo "configure:7984: checking for DOUBLE-BUFFER headers" >&5
      fi
 
      echo $ac_n "checking for DOUBLE-BUFFER libs""... $ac_c" 1>&6
-echo "configure:7994: checking for DOUBLE-BUFFER libs" >&5
+echo "configure:8271: checking for DOUBLE-BUFFER libs" >&5
      d=$with_xdbe/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -8013,17 +8290,17 @@ if test "$with_xdbe" = yes; then
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "X11/extensions/Xdbe.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/extensions/Xdbe.h""... $ac_c" 1>&6
-echo "configure:8028: checking for X11/extensions/Xdbe.h" >&5
+echo "configure:8305: checking for X11/extensions/Xdbe.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 8033 "configure"
+#line 8310 "configure"
 #include "confdefs.h"
 #include <X11/extensions/Xdbe.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8038: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8315: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8086,7 +8363,7 @@ fi
 
     /*)
      echo $ac_n "checking for XReadDisplay headers""... $ac_c" 1>&6
-echo "configure:8101: checking for XReadDisplay headers" >&5
+echo "configure:8378: checking for XReadDisplay headers" >&5
      d=$with_readdisplay/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -8096,7 +8373,7 @@ echo "configure:8101: checking for XReadDisplay headers" >&5
      fi
 
      echo $ac_n "checking for XReadDisplay libs""... $ac_c" 1>&6
-echo "configure:8111: checking for XReadDisplay libs" >&5
+echo "configure:8388: checking for XReadDisplay libs" >&5
      d=$with_readdisplay/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -8129,17 +8406,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
-echo "configure:8144: checking for X11/extensions/readdisplay.h" >&5
+echo "configure:8421: 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
-#line 8149 "configure"
+#line 8426 "configure"
 #include "confdefs.h"
 #include <X11/extensions/readdisplay.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8154: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8431: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8194,7 +8471,7 @@ fi
 
     /*)
      echo $ac_n "checking for Iris Video headers""... $ac_c" 1>&6
-echo "configure:8209: checking for Iris Video headers" >&5
+echo "configure:8486: checking for Iris Video headers" >&5
      d=$with_sgivideo/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -8204,7 +8481,7 @@ echo "configure:8209: checking for Iris Video headers" >&5
      fi
 
      echo $ac_n "checking for Iris Video libs""... $ac_c" 1>&6
-echo "configure:8219: checking for Iris Video libs" >&5
+echo "configure:8496: checking for Iris Video libs" >&5
      d=$with_sgivideo/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -8237,17 +8514,17 @@ if test "$with_sgivideo" = yes; then
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "dmedia/vl.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for dmedia/vl.h""... $ac_c" 1>&6
-echo "configure:8252: checking for dmedia/vl.h" >&5
+echo "configure:8529: checking for dmedia/vl.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 8257 "configure"
+#line 8534 "configure"
 #include "confdefs.h"
 #include <dmedia/vl.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8262: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8539: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8272,7 +8549,7 @@ fi
   if test "$have_sgivideo" = yes; then
     have_sgivideo=no
     echo $ac_n "checking for vlOpenVideo in -lvl""... $ac_c" 1>&6
-echo "configure:8287: checking for vlOpenVideo in -lvl" >&5
+echo "configure:8564: checking for vlOpenVideo in -lvl" >&5
 ac_lib_var=`echo vl'_'vlOpenVideo | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -8280,7 +8557,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lvl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8295 "configure"
+#line 8572 "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
@@ -8291,7 +8568,7 @@ int main() {
 vlOpenVideo()
 ; return 0; }
 EOF
-if { (eval echo configure:8306: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8583: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8362,7 +8639,7 @@ if test -n "$with_zippy_req" ; then
   case "$with_zippy_req" in
     /*)
       echo $ac_n "checking for $with_zippy_req""... $ac_c" 1>&6
-echo "configure:8377: checking for $with_zippy_req" >&5
+echo "configure:8654: checking for $with_zippy_req" >&5
       if test -x "$with_zippy_req" ; then
         echo "$ac_t""yes" 1>&6
       else
@@ -8376,7 +8653,7 @@ echo "configure:8377: checking for $with_zippy_req" >&5
       # Extract the first word of "$with_zippy_req", so it can be a program name with args.
 set dummy $with_zippy_req; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:8391: checking for $ac_word" >&5
+echo "configure:8668: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_zip2'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -8426,7 +8703,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
-echo "configure:8441: checking for $ac_word" >&5
+echo "configure:8718: 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
@@ -8460,7 +8737,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
-echo "configure:8475: checking for $ac_word" >&5
+echo "configure:8752: 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
@@ -8495,7 +8772,7 @@ done
 
   if test -n "$emacs_exe" ; then
     echo $ac_n "checking for emacs yow""... $ac_c" 1>&6
-echo "configure:8510: checking for emacs yow" >&5
+echo "configure:8787: checking for emacs yow" >&5
     #
     # get emacs to tell us where the libexec directory is.
     #
@@ -8517,7 +8794,7 @@ echo "configure:8510: checking for emacs yow" >&5
 
   if test -z "$ac_cv_zippy_program" ; then
     echo $ac_n "checking for xemacs yow""... $ac_c" 1>&6
-echo "configure:8532: checking for xemacs yow" >&5
+echo "configure:8809: checking for xemacs yow" >&5
     if test -n "$xemacs_exe" ; then
       #
       # get xemacs to tell us where the libexec directory is.
@@ -8576,7 +8853,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
-echo "configure:8591: checking for $ac_word" >&5
+echo "configure:8868: 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
@@ -8612,7 +8889,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
-echo "configure:8627: checking for $ac_word" >&5
+echo "configure:8904: 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
@@ -8782,6 +9059,7 @@ fi
 
 
 
+
 
 
 APPDEFAULTS=$ac_x_app_defaults
@@ -8948,6 +9226,7 @@ s%@X_LIBS@%$X_LIBS%g
 s%@X_EXTRA_LIBS@%$X_EXTRA_LIBS%g
 s%@glib_config@%$glib_config%g
 s%@gtk_config@%$gtk_config%g
+s%@gnome_config@%$gnome_config%g
 s%@zip2@%$zip2%g
 s%@emacs_exe@%$emacs_exe%g
 s%@xemacs_exe@%$xemacs_exe%g
@@ -8985,6 +9264,7 @@ s%@GLE_EXES@%$GLE_EXES%g
 s%@GLE_MEN@%$GLE_MEN%g
 s%@GLE_KLUDGE@%$GLE_KLUDGE%g
 s%@HACKDIR@%$HACKDIR%g
+s%@GNOME_DATADIR@%$GNOME_DATADIR%g
 s%@APPDEFAULTS@%$APPDEFAULTS%g
 s%@DEPEND@%$DEPEND%g
 s%@DEPEND_FLAGS@%$DEPEND_FLAGS%g
@@ -9334,6 +9614,12 @@ elif test "$with_gtk_req" = yes -a "$have_gtk" = no ; then
 fi
 
 
+if test "$with_gnome_req" = yes -a "$have_gnome" = no ; then
+  warn  'Use of the Gnome Control Panel was requested, but the necessary'
+  warn2 'headers and/or libraries were not found.'
+fi
+
+
 if test "$have_motif" = yes -a "$have_lesstif" = yes ; then
 
   preferred_lesstif=0.86
@@ -9516,7 +9802,7 @@ do_dir_warning=no
 # M4 sucks!!
 
 rpmv=`(rpm -qv xscreensaver) 2>&- | \
-      sed 's/^xscreensaver-\([0-9][0-9]*[.][0-9][0-9]*\)-[0-9][0-9]*$/\1/'`
+      sed 's/^xscreensaver-\([0-9][0-9]*[.][0-9][0-9]*\)-.*$/\1/'`
 
 
 if test \! -z "$rpmv" ; then
@@ -9547,15 +9833,15 @@ fi
 
 # Warn about egregious GNOME bogosity.
 #
-if (rpm -qv control-center) >&- 2>&- ; then
-  warning=no
-  warnL "The Gnome Control Center seems to be installed."
-  echo  ""
-  warn2 "Note that simply installing this version of xscreensaver"
-  warn2 "will not cause GNOME to know about the newly-added display"
-  warn2 "modes -- GNOME is just lame that way.  Instead of using the"
-  warn2 "Control Center, try using the \`xscreensaver-demo' command."
-fi
+#if (rpm -qv control-center) >&- 2>&- ; then
+#  warning=no
+#  warnL "The Gnome Control Center seems to be installed."
+#  echo  ""
+#  warn2 "Note that simply installing this version of xscreensaver"
+#  warn2 "will not cause GNOME to know about the newly-added display"
+#  warn2 "modes -- GNOME is just lame that way.  Instead of using the"
+#  warn2 "Control Center, try using the \`xscreensaver-demo' command."
+#fi
 
 
 if test "${bindir}" = "${HACKDIR}" ; then
index 15c9635990e79477469815d84bf90da795cc0f82..57529eb7cb1da1af5bf15217308be81a962e70bb 100644 (file)
@@ -193,6 +193,26 @@ AC_DEFUN(AC_PROG_PERL,
  ])
 
 
+###############################################################################
+#
+#       Function to demand "bc".  Losers.
+#
+###############################################################################
+
+AC_DEFUN(AC_DEMAND_BC,
+ [ac_bc_result=`echo 6+9 | bc 2>/dev/null`
+  AC_MSG_CHECKING([for bc])
+  if test "$ac_bc_result" = "15" ; then
+    AC_MSG_RESULT(yes)
+  else
+    AC_MSG_RESULT(no)
+    echo ''
+    AC_MSG_ERROR([Your system doesn't have \"bc\", which has been a standard
+                  part of Unix since the 1970s.  Come back when your vendor
+                  has grown a clue.])
+  fi
+ ])
+
 ###############################################################################
 #
 #       Functions to check how to do ICMP PING requests.
@@ -657,6 +677,7 @@ AC_PROG_CC_ANSI
 AC_PROG_CPP
 AC_C_CONST
 AC_C_INLINE
+AC_DEMAND_BC
 
 # stuff for Makefiles
 AC_PROG_INSTALL
@@ -1222,6 +1243,7 @@ fi
 ###############################################################################
 
 have_kerberos=no
+have_kerberos5=no
 with_kerberos_req=unspecified
 
 AC_ARG_WITH(kerberos, 
@@ -1231,21 +1253,41 @@ AC_ARG_WITH(kerberos,
 HANDLE_X_PATH_ARG(with_kerberos, --with-kerberos, Kerberos)
 
 if test "$enable_locking" = yes -a "$with_kerberos" = yes; then
-  AC_CACHE_CHECK([for Kerberos], ac_cv_kerberos,
+  AC_CACHE_CHECK([for Kerberos 4], ac_cv_kerberos,
                  [AC_TRY_X_COMPILE([#include <krb.h>],,
                                    [ac_cv_kerberos=yes],
                                    [ac_cv_kerberos=no])])
+  AC_CACHE_CHECK([for Kerberos 5], ac_cv_kerberos5,
+                 [AC_TRY_X_COMPILE([#include <kerberosIV/krb.h>],,
+                                   [ac_cv_kerberos5=yes],
+                                   [ac_cv_kerberos5=no])])
+
   if test "$ac_cv_kerberos" = yes ; then
     have_kerberos=yes
     AC_DEFINE(HAVE_KERBEROS)
+  fi
+
+  if test "$ac_cv_kerberos5" = yes ; then
+    have_kerberos=yes
+    have_kerberos5=yes
+    AC_DEFINE(HAVE_KERBEROS)
+    AC_DEFINE(HAVE_KERBEROS5)
+  fi
 
+  if test "$have_kerberos5" = yes ; then
+    # from Matt Knopp <mhat@infocalypse.netlag.com>
+    # (who got it from amu@mit.edu)
+    PASSWD_LIBS="$PASSWD_LIBS -lkrb4 -ldes425 -lkrb5 -lk5crypto -lcrypt -lcom_err"
+  elif test "$have_kerberos" = yes ; then
     # from Tim Showalter <tjs+@andrew.cmu.edu>
     PASSWD_LIBS="$PASSWD_LIBS -lkrb -ldes"
+  fi
+
+  if test "$have_kerberos" = yes ; then
     AC_CHECK_FUNC(res_search,,
       AC_CHECK_LIB(resolv,res_search,PASSWD_LIBS="${PASSWD_LIBS} -lresolv",
         AC_MSG_WARN([Can't find DNS resolver libraries needed for Kerberos])
       ))
-
   fi
 fi
 
@@ -1503,7 +1545,7 @@ fi
 
 ###############################################################################
 #
-#       Check for -lgtk.
+#       Check for -lgtk (and Gnome stuff)
 #
 ###############################################################################
 
@@ -1531,6 +1573,31 @@ if test "$with_gtk" != yes -a "$with_gtk" != no ; then
   exit 1
 fi
 
+have_gnome=no
+with_gnome_req=unspecified
+AC_ARG_WITH(gnome,
+[  --with-gnome            Include support for the Gnome Control Center.],
+  [with_gnome="$withval"; with_gnome_req="$withval"],[with_gnome=yes])
+
+# if --with-gnome=/directory/ was specified, remember that directory so that
+# we can also look for the `gnome-config' program in that directory.
+case "$with_gnome" in
+  /*)
+    gnome_dir="$with_gnome"
+    ;;
+  *)
+    gnome_dir=""
+    ;;
+esac
+
+HANDLE_X_PATH_ARG(with_gnome, --with-gnome, Gnome)
+
+if test "$with_gnome" != yes -a "$with_gnome" != no ; then
+  echo "error: must be yes or no: --with-gnome=$with_gnome"
+  exit 1
+fi
+
+
 jurassic_gtk=no
 if test "$with_gtk" = yes; then
   have_gtk=no
@@ -1543,15 +1610,29 @@ if test "$with_gtk" = yes; then
   if test ! -z "$gtk_dir"; then
     # canonicalize slashes.
     gtk_dir=`echo "${gtk_dir}/bin" | sed 's@//*@/@g'`
-    gtk_path="$gtk_dir:$gtk_dir:$gtk_path"
+    gtk_path="$gtk_dir:$gtk_path"
   fi
 
-  AC_PATH_PROGS(glib_config, glib-config,, $gtk_path)
-  AC_PATH_PROGS(gtk_config,  gtk-config,,  $gtk_path)
+  if test ! -z "gnome_dir"; then
+    # canonicalize slashes.
+    gnome_dir=`echo "${gnome_dir}/bin" | sed 's@//*@/@g'`
+    gtk_path="$gnome_dir:$gtk_path"
+  fi
+
+  AC_PATH_PROGS(glib_config,  glib-config,,  $gtk_path)
+  AC_PATH_PROGS(gtk_config,   gtk-config,,   $gtk_path)
+
+  if test "$with_gnome" = yes; then
+    AC_PATH_PROGS(gnome_config, gnome-config,, $gtk_path)
+  fi
 
   if test -n "$glib_config" -a  -n "gtk_config" ; then
     have_gtk=yes
+    if test "$with_gnome" = yes -a -n "$gnome_config" ; then
+      have_gnome=yes
+    fi
   fi
+
   if test "$have_gtk" = yes; then
     AC_CACHE_CHECK([Gtk version number], ac_cv_gtk_version_string,
                    [ac_cv_gtk_version_string=`$glib_config --version`])
@@ -1569,18 +1650,81 @@ if test "$with_gtk" = yes; then
     if test "$ac_gtk_version" = "unknown" || test "$ac_gtk_version" -lt 1002
     then
       have_gtk=no
+      have_gnome=no
       jurassic_gtk=yes
     fi
   fi
+
   if test "$have_gtk" = yes; then
     AC_CACHE_CHECK([for Gtk includes], ac_cv_gtk_config_cflags,
                    [ac_cv_gtk_config_cflags=`$gtk_config --cflags`])
     AC_CACHE_CHECK([for Gtk libs], ac_cv_gtk_config_libs,
                    [ac_cv_gtk_config_libs=`$gtk_config --libs`])
-    INCLUDES="$INCLUDES $ac_cv_gtk_config_cflags"
-    GTK_LIBS="$GTK_LIBS $ac_cv_gtk_config_libs"
+  fi
+  ac_gtk_config_cflags=$ac_cv_gtk_config_cflags
+  ac_gtk_config_libs=$ac_cv_gtk_config_libs
+
+  # Check for Gnome Capplet support.
+  #
+  if test "$have_gnome" = yes -a "$have_gtk" = yes; then
+    gnome_config_libs="capplet gnomeui"
+    AC_MSG_CHECKING(for Gnome capplet includes)
+    AC_CACHE_VAL(ac_cv_gnome_config_cflags,
+      [if ( $gnome_config --cflags $gnome_config_libs 2>&1 >/dev/null | \
+            grep -q Unknown ) ; then
+         ac_cv_gnome_config_cflags=''
+       else
+         ac_cv_gnome_config_cflags=`$gnome_config --cflags $gnome_config_libs`
+       fi])
+    ac_gnome_config_cflags=$ac_cv_gnome_config_cflags
+    if test "$ac_gnome_config_cflags" = "" ; then
+      have_gnome=no
+      AC_MSG_RESULT(no)
+    else
+      AC_MSG_RESULT($ac_gnome_config_cflags)
+    fi
+  fi
+
+  if test "$have_gnome" = yes -a "$have_gtk" = yes; then
+    AC_MSG_CHECKING(for Gnome capplet libs)
+    AC_CACHE_VAL(ac_cv_gnome_config_libs,
+      [if ( $gnome_config --libs $gnome_config_libs 2>&1 >/dev/null |
+            grep -q Unknown ) ; then
+         ac_cv_gnome_config_libs=''
+       else
+         ac_cv_gnome_config_libs=`$gnome_config --libs $gnome_config_libs`
+       fi])
+    ac_gnome_config_libs=$ac_cv_gnome_config_libs
+    if test "$ac_gnome_config_libs" = "" ; then
+      have_gnome=no
+      AC_MSG_RESULT(no)
+    else
+      AC_MSG_RESULT($ac_gnome_config_libs)
+    fi
+  fi
+
+  GNOME_DATADIR=""
+  if test "$have_gnome" = yes -a "$have_gtk" = yes; then
+    GNOME_DATADIR=`$gnome_config --datadir`
+  fi
+
+
+  # If we have Gnome, then override the gtk-config values with 
+  # the gnome-config values.
+  #
+  if test "$have_gnome" = yes -a "$have_gtk" = yes; then
+    ac_gtk_config_cflags=$ac_gnome_config_cflags
+    ac_gtk_config_libs=$ac_gnome_config_libs
+    AC_DEFINE(HAVE_CRAPPLET)
+  fi
+
+
+  if test "$have_gtk" = yes; then
+    INCLUDES="$INCLUDES $ac_gtk_config_cflags"
+    GTK_LIBS="$GTK_LIBS $ac_gtk_config_libs"
     AC_DEFINE(HAVE_GTK)
   fi
+
 fi
 
 
@@ -2429,6 +2573,7 @@ AC_SUBST(GLE_EXES)
 AC_SUBST(GLE_MEN)
 AC_SUBST(GLE_KLUDGE)
 AC_SUBST(HACKDIR)
+AC_SUBST(GNOME_DATADIR)
 
 APPDEFAULTS=$ac_x_app_defaults
 AC_SUBST(APPDEFAULTS)
@@ -2565,6 +2710,12 @@ elif test "$with_gtk_req" = yes -a "$have_gtk" = no ; then
 fi
 
 
+if test "$with_gnome_req" = yes -a "$have_gnome" = no ; then
+  warn  'Use of the Gnome Control Panel was requested, but the necessary'
+  warn2 'headers and/or libraries were not found.'
+fi
+
+
 if test "$have_motif" = yes -a "$have_lesstif" = yes ; then
 
   preferred_lesstif=0.86
@@ -2747,7 +2898,7 @@ do_dir_warning=no
 # M4 sucks!!
 changequote(X,Y)
 rpmv=`(rpm -qv xscreensaver) 2>&- | \
-      sed 's/^xscreensaver-\([0-9][0-9]*[.][0-9][0-9]*\)-[0-9][0-9]*$/\1/'`
+      sed 's/^xscreensaver-\([0-9][0-9]*[.][0-9][0-9]*\)-.*$/\1/'`
 changequote([,])
 
 if test \! -z "$rpmv" ; then
@@ -2778,15 +2929,15 @@ fi
 
 # Warn about egregious GNOME bogosity.
 #
-if (rpm -qv control-center) >&- 2>&- ; then
-  warning=no
-  warnL "The Gnome Control Center seems to be installed."
-  echo  ""
-  warn2 "Note that simply installing this version of xscreensaver"
-  warn2 "will not cause GNOME to know about the newly-added display"
-  warn2 "modes -- GNOME is just lame that way.  Instead of using the"
-  warn2 "Control Center, try using the \`xscreensaver-demo' command."
-fi
+#if (rpm -qv control-center) >&- 2>&- ; then
+#  warning=no
+#  warnL "The Gnome Control Center seems to be installed."
+#  echo  ""
+#  warn2 "Note that simply installing this version of xscreensaver"
+#  warn2 "will not cause GNOME to know about the newly-added display"
+#  warn2 "modes -- GNOME is just lame that way.  Instead of using the"
+#  warn2 "Control Center, try using the \`xscreensaver-demo' command."
+#fi
 
 
 if test "${bindir}" = "${HACKDIR}" ; then
index 11e3c322e3882c9449c29f2ccd86c327d05ea165..393bc2188d919b4d88e3b3c262869339dbe81f9e 100644 (file)
@@ -16,6 +16,10 @@ mandir               = @mandir@
 man1dir                = $(mandir)/man1
 mansuffix      = 1
 
+GNOME_DATADIR  = @GNOME_DATADIR@
+GNOME_CCDIR    = $(GNOME_DATADIR)/control-center/Desktop
+GNOME_PANELDIR = $(GNOME_DATADIR)/gnome/apps/Settings/Desktop
+
 CC             = @CC@
 CFLAGS         = @CFLAGS@
 LDFLAGS                = @LDFLAGS@
@@ -153,7 +157,8 @@ MEN         = xscreensaver.man xscreensaver-demo.man \
 ALL_MEN                = xscreensaver.man \
                  xscreensaver-demo.man xscreensaver-command.man
 EXTRAS         = README Makefile.in XScreenSaver.ad.in xscreensaver.pam \
-                 xscreensaver.kss xscreensaver-demo.glade .gdbinit
+                 xscreensaver.kss xscreensaver-demo.glade \
+                 screensaver-properties.desktop.in .gdbinit
 VMSFILES       = compile_axp.com compile_decc.com link_axp.com link_decc.com \
                  vms-getpwnam.c vms-pwd.h vms-hpwd.c vms-validate.c \
                  vms_axp.opt vms_axp_12.opt vms_decc.opt vms_decc_12.opt
@@ -167,8 +172,10 @@ TARFILES   = $(EXTRAS) $(VMSFILES) $(SAVER_SRCS_1) \
 default: $(EXES)
 all: $(EXES) $(EXES2)
 
-install:   install-program   install-ad   install-kde   install-man   @INSTALL_PAM@
-uninstall: uninstall-program uninstall-ad uninstall-kde uninstall-man
+install:   install-program   install-ad   install-gnome   install-kde   \
+          install-man   @INSTALL_PAM@
+uninstall: uninstall-program uninstall-ad uninstall-gnome uninstall-kde \
+          uninstall-man
 
 install-strip:
        $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' \
@@ -315,6 +322,26 @@ install-pam:
          fi ;                                                          \
        fi
 
+install-gnome: screensaver-properties.desktop
+       @if [ "$(GNOME_DATADIR)" != "" ]; then                               \
+          echo $(INSTALL_DATA) $(srcdir)/screensaver-properties.desktop      \
+                          $(GNOME_CCDIR)/screensaver-properties.desktop    ; \
+               $(INSTALL_DATA) $(srcdir)/screensaver-properties.desktop      \
+                          $(GNOME_CCDIR)/screensaver-properties.desktop    ; \
+          echo $(INSTALL_DATA) $(srcdir)/screensaver-properties.desktop      \
+                       $(GNOME_PANELDIR)/screensaver-properties.desktop    ; \
+               $(INSTALL_DATA) $(srcdir)/screensaver-properties.desktop      \
+                       $(GNOME_PANELDIR)/screensaver-properties.desktop    ; \
+       fi
+
+uninstall-gnome:
+       @if [ "$(GNOME_DATADIR)" != "" ]; then                                \
+         echo rm -f $(GNOME_CCDIR)/screensaver-properties.desktop          ; \
+              rm -f $(GNOME_CCDIR)/screensaver-properties.desktop          ; \
+         echo rm -f $(GNOME_PANELDIR)/screensaver-properties.desktop       ; \
+              rm -f $(GNOME_PANELDIR)/screensaver-properties.desktop       ; \
+        fi
+
 install-kde:
        @src="$(srcdir)/xscreensaver.kss" ;                                   \
        if [ "$$KDEDIR" != "" ]; then                                         \
@@ -394,7 +421,7 @@ update_ad_version::
        @S=XScreenSaver.ad.in ;                                             \
        U=$(UTILS_SRC)/version.h ;                                          \
        V=`sed -n 's/.*\([0-9][0-9]*\.[0-9]*\).*/\1/p' < $$U` ;             \
-       D=`date '+%d-%b-%y'` ;                                              \
+       D=`date '+%d-%b-%Y'` ;                                              \
        echo -n "Updating version number in $$S to $$V $$D... " ;           \
        T=/tmp/xs.$$$$ ;                                                    \
        sed -e "s/\(.*version \)[0-9][0-9]*\.[0-9]*\(.*\)/\1$$V\2/"         \
@@ -412,7 +439,7 @@ update_man_version::
        @for S in $(MEN); do                                                \
        U=$(UTILS_SRC)/version.h ;                                          \
        V=`sed -n 's/.*\([0-9][0-9]*\.[0-9]*\).*/\1/p' < $$U` ;             \
-       V="`date '+%d-%b-%y'` ($$V)" ;                                      \
+       V="`date '+%d-%b-%Y'` ($$V)" ;                                      \
        echo -n "Updating footer in $$S to \"$$V\"... " ;                   \
        T=/tmp/xs.$$$$ ;                                                    \
        sed "s/^\(\.TH[^\"]*\)\"[^\"]*\"\(.*\)/\1\"$$V\"\2/"                \
@@ -468,6 +495,12 @@ subprocs.o: subprocs.c
 XScreenSaver_ad.h: XScreenSaver.ad
        $(SHELL) $(UTILS_SRC)/ad2c XScreenSaver.ad > XScreenSaver_ad.h
 
+screensaver-properties.desktop: screensaver-properties.desktop.in Makefile
+       @echo generating $@... ;                                        \
+       sed "s%[@]bindir[@]%${bindir}%g"                                \
+         < ${srcdir}/screensaver-properties.desktop.in                 \
+         > $@
+
 # The executables linked in this directory.
 #
 xscreensaver: $(SAVER_OBJS)
index cc1d0685aa5beca8d5564ebf19f242b644277a5a..4dd691ff7ef54b75c6ebaa12ed1829e50fd625a0 100644 (file)
@@ -4,8 +4,8 @@
 !            a screen saver and locker for the X window system
 !                            by Jamie Zawinski
 !
-!                              version 3.23
-!                                30-Jan-00
+!                              version 3.24
+!                              03-Apr-200000
 !
 ! See "man xscreensaver" for more info.  The latest version is always
 ! available at http://www.jwz.org/xscreensaver/
 ! your home directory, the settings in that file take precedence.
 
 
+! Don't hand this file to "xrdb" -- that isn't how app-defaults files work.
+! Though app-defaults files have (mostly) the same syntax as your ~/.Xdefaults
+! file, they are used differently, and if you run this file through xrdb,
+! you will probably mess things up.
+
+#error Do not run app-defaults files through xrdb!
+#error That does not do what you might expect.
+#error Put this file in /usr/lib/X11/app-defaults/XScreenSaver instead.
+
+! /* (xrdb prevention kludge: whole file)
+
 *timeout:              10
 *cycle:                        10
 *lockTimeout:          0
                                  -texture_quality -light -fog              \n\
 @GLE_KLUDGE@GL:                        extrusion -root                             \n\
 @GL_KLUDGE@ GL:                        sierpinski3d -root                          \n\
+@GL_KLUDGE@ GL:                        starwars -root                              \n\
                                                                              \
 -                              xdaliclock -root -builtin3 -cycle           \n\
 - default-n:                   xearth -nofork -nostars -ncolors 50           \
 -      "XMountains (top)"      xmountains -b -M -Z 0 -r 1 -m               \n\
 -                               xaos -root -autopilot -incoloring -1         \
                                   -nogui -outcoloring -1                   \n\
--                              xfishtank -d                                \n\
+-                              xfishtank -d -s                             \n\
 -                              xsnow                                       \n\
 -                              goban -root                                 \n\
 -                              electricsheep                               \n
@@ -519,11 +531,6 @@ XScreenSaver*doc.fontList:       *-helvetica-medium-r-*-*-*-100-*-*-*-iso8859-1
 ! sanity check -- hands off.
 *hacks.documentation.isInstalled: True
 
-*hacks.grav.documentation:                                             \
-This program draws a simple orbital simulation.         If you turn on         \
-trails, it looks kind of like a cloud-chamber photograph.  Written by  \
-Greg Bowering.
-
 *hacks.qix.documentation:                                              \
 This is the swiss army chainsaw of qix programs.  It bounces a series  \
 of line segments around the screen, and uses variations on this basic  \
@@ -1262,3 +1269,5 @@ connection to the Internet.                                               \
 By Scott Draves.  You can find it at <http://www.electricsheep.org/>.   \
 See that web site for configuration information.
 
+
+! (xrdb prevention kludge: whole file) */
index 8ed41bbf339f9c966a8ca2fde8b8ab289a8519b5..667edf9001cb6ddef7d5c0b614038df082a47082 100644 (file)
@@ -1,3 +1,6 @@
+"#error Do not run app-defaults files through xrdb!",
+"#error That does not do what you might expect.",
+"#error Put this file in /usr/lib/X11/app-defaults/XScreenSaver instead.",
 "*timeout:             10",
 "*cycle:                       10",
 "*lockTimeout:         0",
                                  -texture_quality -light -fog              \\n\
           GL:                  extrusion -root                             \\n\
           GL:                  sierpinski3d -root                          \\n\
+          GL:                  starwars -root                              \\n\
                                                                              \
 -                              xdaliclock -root -builtin3 -cycle           \\n\
 - default-n:                   xearth -nofork -nostars -ncolors 50           \
 -      \"XMountains (top)\"    xmountains -b -M -Z 0 -r 1 -m               \\n\
 -                               xaos -root -autopilot -incoloring -1         \
                                   -nogui -outcoloring -1                   \\n\
--                              xfishtank -d                                \\n\
+-                              xfishtank -d -s                             \\n\
 -                              xsnow                                       \\n\
 -                              goban -root                                 \\n\
 -                              electricsheep                               \\n",
 "*Cancel.rightOffset:          10",
 "*Cancel.bottomOffset:         10",
 "*hacks.documentation.isInstalled: True",
-"*hacks.grav.documentation:                                            \
-This program draws a simple orbital simulation.         If you turn on         \
-trails, it looks kind of like a cloud-chamber photograph.  Written by  \
-Greg Bowering.",
 "*hacks.qix.documentation:                                             \
 This is the swiss army chainsaw of qix programs.  It bounces a series  \
 of line segments around the screen, and uses variations on this basic  \
index 8211d199e2f3288f0831942c651c937f1c4f11d2..7388d5a3d0d02f4ed7c96e7065a5689064faba27 100644 (file)
@@ -68,3 +68,15 @@ prefs_cancel_cb                        (GtkButton       *button,
 void
 manual_cb                              (GtkButton       *button,
                                         gpointer         user_data);
+
+void
+notebook_switch_page_cb                (GtkNotebook     *notebook,
+                                        GtkNotebookPage *page,
+                                        gint             page_num,
+                                        gpointer         user_data);
+
+void
+pref_changed_cb                        (GtkNotebook     *notebook,
+                                        GtkNotebookPage *page,
+                                        gint             page_num,
+                                        gpointer         user_data);
index 510c9d632d6b9e4bfa5761165ce44593f8009161..fc03afac9f3cd026417c5a1da6092cb12b354463 100644 (file)
@@ -6,6 +6,7 @@
 #  include <config.h>
 #endif
 
+#include <sys/types.h>
 #include <sys/stat.h>
 #include <unistd.h>
 #include <string.h>
@@ -16,9 +17,8 @@
 #include "demo-Gtk-stubs.h"
 #include "demo-Gtk-widgets.h"
 
-
 GtkWidget*
-create_xscreensaver_demo ()
+create_xscreensaver_demo (void)
 {
   GtkWidget *xscreensaver_demo;
   GtkWidget *outer_vbox;
@@ -91,9 +91,6 @@ create_xscreensaver_demo ()
   GtkWidget *fade_button;
   GtkWidget *unfade_button;
   GtkWidget *lock_button;
-  GtkWidget *hbuttonbox3;
-  GtkWidget *prefs_ok;
-  GtkWidget *prefs_cancel;
   GtkWidget *prefs_tab;
   GtkAccelGroup *accel_group;
   GtkTooltips *tooltips;
@@ -786,33 +783,6 @@ create_xscreensaver_demo ()
                     (GtkAttachOptions) (GTK_FILL),
                     (GtkAttachOptions) (0), 10, 0);
 
-  hbuttonbox3 = gtk_hbutton_box_new ();
-  gtk_widget_set_name (hbuttonbox3, "hbuttonbox3");
-  gtk_widget_ref (hbuttonbox3);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "hbuttonbox3", hbuttonbox3,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (hbuttonbox3);
-  gtk_box_pack_start (GTK_BOX (prefs_hbox), hbuttonbox3, FALSE, FALSE, 0);
-  gtk_container_set_border_width (GTK_CONTAINER (hbuttonbox3), 10);
-
-  prefs_ok = gtk_button_new_with_label ("OK");
-  gtk_widget_set_name (prefs_ok, "prefs_ok");
-  gtk_widget_ref (prefs_ok);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "prefs_ok", prefs_ok,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (prefs_ok);
-  gtk_container_add (GTK_CONTAINER (hbuttonbox3), prefs_ok);
-  GTK_WIDGET_SET_FLAGS (prefs_ok, GTK_CAN_DEFAULT);
-
-  prefs_cancel = gtk_button_new_with_label ("Cancel");
-  gtk_widget_set_name (prefs_cancel, "prefs_cancel");
-  gtk_widget_ref (prefs_cancel);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "prefs_cancel", prefs_cancel,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (prefs_cancel);
-  gtk_container_add (GTK_CONTAINER (hbuttonbox3), prefs_cancel);
-  GTK_WIDGET_SET_FLAGS (prefs_cancel, GTK_CAN_DEFAULT);
-
   prefs_tab = gtk_label_new ("Screensaver Options");
   gtk_widget_set_name (prefs_tab, "prefs_tab");
   gtk_widget_ref (prefs_tab);
@@ -851,6 +821,9 @@ create_xscreensaver_demo ()
   gtk_signal_connect (GTK_OBJECT (doc_menu), "activate",
                       GTK_SIGNAL_FUNC (doc_menu_cb),
                       NULL);
+  gtk_signal_connect (GTK_OBJECT (notebook), "switch_page",
+                      GTK_SIGNAL_FUNC (pref_changed_cb),
+                      NULL);
   gtk_signal_connect (GTK_OBJECT (next), "clicked",
                       GTK_SIGNAL_FUNC (run_next_cb),
                       NULL);
@@ -863,11 +836,56 @@ create_xscreensaver_demo ()
   gtk_signal_connect (GTK_OBJECT (manual), "clicked",
                       GTK_SIGNAL_FUNC (manual_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (prefs_ok), "clicked",
-                      GTK_SIGNAL_FUNC (prefs_ok_cb),
+  gtk_signal_connect (GTK_OBJECT (timeout_text), "activate",
+                      GTK_SIGNAL_FUNC (pref_changed_cb),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (timeout_text), "focus_out_event",
+                      GTK_SIGNAL_FUNC (pref_changed_cb),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (cycle_text), "activate",
+                      GTK_SIGNAL_FUNC (pref_changed_cb),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (cycle_text), "focus_out_event",
+                      GTK_SIGNAL_FUNC (pref_changed_cb),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (fade_text), "activate",
+                      GTK_SIGNAL_FUNC (pref_changed_cb),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (fade_text), "focus_out_event",
+                      GTK_SIGNAL_FUNC (pref_changed_cb),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (ticks_text), "activate",
+                      GTK_SIGNAL_FUNC (pref_changed_cb),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (ticks_text), "focus_out_event",
+                      GTK_SIGNAL_FUNC (pref_changed_cb),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (lock_text), "activate",
+                      GTK_SIGNAL_FUNC (pref_changed_cb),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (lock_text), "focus_out_event",
+                      GTK_SIGNAL_FUNC (pref_changed_cb),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (pass_text), "activate",
+                      GTK_SIGNAL_FUNC (pref_changed_cb),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (pass_text), "focus_out_event",
+                      GTK_SIGNAL_FUNC (pref_changed_cb),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (verbose_button), "toggled",
+                      GTK_SIGNAL_FUNC (pref_changed_cb),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (install_button), "toggled",
+                      GTK_SIGNAL_FUNC (pref_changed_cb),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (fade_button), "toggled",
+                      GTK_SIGNAL_FUNC (pref_changed_cb),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (unfade_button), "toggled",
+                      GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (prefs_cancel), "clicked",
-                      GTK_SIGNAL_FUNC (prefs_cancel_cb),
+  gtk_signal_connect (GTK_OBJECT (lock_button), "toggled",
+                      GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
 
   gtk_widget_grab_default (next);
index e027622726179ec964043ce7a4009d6e2a588bb6..11c64d8985de896a76f8c47856559f4da3c80aae 100644 (file)
 # include "xmu.h"
 #endif
 
-
-
 #include <gtk/gtk.h>
 
+#ifdef HAVE_CRAPPLET
+# include <gnome.h>
+# include <capplet-widget.h>
+#endif
+
 extern Display *gdk_display;
 
 #include "version.h"
@@ -81,6 +84,10 @@ char *progname = 0;
 char *progclass = "XScreenSaver";
 XrmDatabase db;
 
+static Bool crapplet_p = False;
+static Bool initializing_p;
+static GtkWidget *toplevel_widget;
+
 typedef struct {
   saver_preferences *a, *b;
 } prefs_pair;
@@ -110,21 +117,10 @@ static int maybe_reload_init_file (GtkWidget *widget, prefs_pair *pair);
 static GtkWidget *
 name_to_widget (GtkWidget *widget, const char *name)
 {
-  while (1)
-    {
-      GtkWidget *parent = (GTK_IS_MENU (widget)
-                           ? gtk_menu_get_attach_widget (GTK_MENU (widget))
-                           : widget->parent);
-      if (parent)
-        widget = parent;
-      else
-        break;
-    }
-  return (GtkWidget *) gtk_object_get_data (GTK_OBJECT (widget), name);
+  return (GtkWidget *) gtk_object_get_data (GTK_OBJECT(toplevel_widget), name);
 }
 
 
-
 /* Why this behavior isn't automatic in *either* toolkit, I'll never know.
    Takes a scroller, viewport, or list as an argument.
  */
@@ -217,9 +213,8 @@ ensure_selected_item_visible (GtkWidget *widget)
     }
 }
 
-
 static void
-warning_dialog_dismiss_cb (GtkButton *button, gpointer user_data)
+warning_dialog_dismiss_cb (GtkWidget *widget, gpointer user_data)
 {
   GtkWidget *shell = GTK_WIDGET (user_data);
   while (shell->parent)
@@ -228,8 +223,17 @@ warning_dialog_dismiss_cb (GtkButton *button, gpointer user_data)
 }
 
 
+void restart_menu_cb (GtkWidget *widget, gpointer user_data);
+
+static void warning_dialog_restart_cb (GtkWidget *widget, gpointer user_data)
+{
+  restart_menu_cb (widget, user_data);
+  warning_dialog_dismiss_cb (widget, user_data);
+}
+
 static void
-warning_dialog (GtkWidget *parent, const char *message, int center)
+warning_dialog (GtkWidget *parent, const char *message,
+                Boolean restart_button_p, int center)
 {
   char *msg = strdup (message);
   char *head;
@@ -237,6 +241,7 @@ warning_dialog (GtkWidget *parent, const char *message, int center)
   GtkWidget *dialog = gtk_dialog_new ();
   GtkWidget *label = 0;
   GtkWidget *ok = 0;
+  GtkWidget *cancel = 0;
   int i = 0;
 
   while (parent->parent)
@@ -285,17 +290,37 @@ warning_dialog (GtkWidget *parent, const char *message, int center)
   ok = gtk_button_new_with_label ("OK");
   gtk_container_add (GTK_CONTAINER (label), ok);
 
+  if (restart_button_p)
+    {
+      cancel = gtk_button_new_with_label ("Cancel");
+      gtk_container_add (GTK_CONTAINER (label), cancel);
+    }
+
   gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);
   gtk_container_set_border_width (GTK_CONTAINER (dialog), 10);
   gtk_window_set_title (GTK_WINDOW (dialog), progclass);
   gtk_widget_show (ok);
+  if (cancel)
+    gtk_widget_show (cancel);
   gtk_widget_show (label);
   gtk_widget_show (dialog);
 /*  gtk_window_set_default (GTK_WINDOW (dialog), ok);*/
 
-  gtk_signal_connect_object (GTK_OBJECT (ok), "clicked",
-                             GTK_SIGNAL_FUNC (warning_dialog_dismiss_cb),
-                             (gpointer) dialog);
+  if (restart_button_p)
+    {
+      gtk_signal_connect_object (GTK_OBJECT (ok), "clicked",
+                                 GTK_SIGNAL_FUNC (warning_dialog_restart_cb),
+                                 (gpointer) dialog);
+      gtk_signal_connect_object (GTK_OBJECT (cancel), "clicked",
+                                 GTK_SIGNAL_FUNC (warning_dialog_dismiss_cb),
+                                 (gpointer) dialog);
+    }
+  else
+    {
+      gtk_signal_connect_object (GTK_OBJECT (ok), "clicked",
+                                 GTK_SIGNAL_FUNC (warning_dialog_dismiss_cb),
+                                 (gpointer) dialog);
+    }
   gdk_window_set_transient_for (GTK_WIDGET (dialog)->window,
                                 GTK_WIDGET (parent)->window);
 
@@ -321,7 +346,7 @@ run_cmd (GtkWidget *widget, Atom command, int arg)
         sprintf (buf, "Error:\n\n%s", err);
       else
         strcpy (buf, "Unknown error!");
-      warning_dialog (widget, buf, 100);
+      warning_dialog (widget, buf, False, 100);
     }
   if (err) free (err);
 }
@@ -368,7 +393,7 @@ cut_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
   /* #### */
   warning_dialog (GTK_WIDGET (menuitem),
                   "Error:\n\n"
-                  "cut unimplemented\n", 1);
+                  "cut unimplemented\n", False, 1);
 }
 
 
@@ -378,7 +403,7 @@ copy_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
   /* #### */
   warning_dialog (GTK_WIDGET (menuitem),
                   "Error:\n\n"
-                  "copy unimplemented\n", 1);
+                  "copy unimplemented\n", False, 1);
 }
 
 
@@ -388,7 +413,7 @@ paste_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
   /* #### */
   warning_dialog (GTK_WIDGET (menuitem),
                   "Error:\n\n"
-                  "paste unimplemented\n", 1);
+                  "paste unimplemented\n", False, 1);
 }
 
 
@@ -408,7 +433,7 @@ about_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
            s, s2);
   free (s);
 
-  warning_dialog (GTK_WIDGET (menuitem), buf, 100);
+  warning_dialog (GTK_WIDGET (menuitem), buf, False, 100);
 }
 
 
@@ -425,7 +450,7 @@ doc_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
     {
       warning_dialog (GTK_WIDGET (menuitem),
                       "Error:\n\n"
-                      "No Help URL has been specified.\n", 100);
+                      "No Help URL has been specified.\n", False, 100);
       return;
     }
 
@@ -462,12 +487,12 @@ kill_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
 
 
 void
-restart_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
+restart_menu_cb (GtkWidget *widget, gpointer user_data)
 {
 #if 0
-  run_cmd (GTK_WIDGET (menuitem), XA_RESTART, 0);
+  run_cmd (GTK_WIDGET (widget), XA_RESTART, 0);
 #else
-  apply_changes_and_save (GTK_WIDGET (menuitem));
+  apply_changes_and_save (GTK_WIDGET (widget));
   xscreensaver_command (gdk_display, XA_EXIT, 0, False, NULL);
   sleep (1);
   system ("xscreensaver -nosplash &");
@@ -506,12 +531,12 @@ demo_write_init_file (GtkWidget *widget, saver_preferences *p)
       if (!f || !*f)
         warning_dialog (widget,
                         "Error:\n\nCouldn't determine init file name!\n",
-                        100);
+                        False, 100);
       else
         {
           char *b = (char *) malloc (strlen(f) + 1024);
           sprintf (b, "Error:\n\nCouldn't write %s\n", f);
-          warning_dialog (widget, b, 100);
+          warning_dialog (widget, b, False, 100);
           free (b);
         }
       return -1;
@@ -520,7 +545,7 @@ demo_write_init_file (GtkWidget *widget, saver_preferences *p)
 
 
 static int
-apply_changes_and_save (GtkWidget *widget)
+apply_changes_and_save_1 (GtkWidget *widget)
 {
   /* prefs_pair *pair = (prefs_pair *) client_data; */
   prefs_pair *pair = global_prefs_pair;  /* I hate C so much... */
@@ -603,6 +628,16 @@ apply_changes_and_save (GtkWidget *widget)
   return 0;
 }
 
+void prefs_ok_cb (GtkButton *button, gpointer user_data);
+
+static int
+apply_changes_and_save (GtkWidget *widget)
+{
+  prefs_ok_cb ((GtkButton *) widget, 0);
+  return apply_changes_and_save_1 (widget);
+}
+
+
 void
 run_this_cb (GtkButton *button, gpointer user_data)
 {
@@ -652,7 +687,7 @@ manual_cb (GtkButton *button, gpointer user_data)
     {
       warning_dialog (GTK_WIDGET (button),
                       "Error:\n\nno `manualCommand' resource set.",
-                      100);
+                      False, 100);
     }
 
   free (name);
@@ -731,7 +766,7 @@ hack_time_text (GtkWidget *widget, const char *line, Time *store, Bool sec_p)
                   "Error:\n\n"
                   "Unparsable time format: \"%s\"\n",
                   line);
-         warning_dialog (widget, b, 100);
+         warning_dialog (widget, b, False, 100);
        }
       else
        *store = value;
@@ -772,7 +807,7 @@ prefs_ok_cb (GtkButton *button, gpointer user_data)
       { \
        char b[255]; \
        sprintf (b, "Error:\n\n" "Not an integer: \"%s\"\n", line); \
-       warning_dialog (GTK_WIDGET (button), b, 100); \
+       warning_dialog (GTK_WIDGET (button), b, False, 100); \
       } \
    else \
      *(field) = value; \
@@ -834,6 +869,14 @@ prefs_cancel_cb (GtkButton *button, gpointer user_data)
 }
 
 
+void
+pref_changed_cb (GtkButton *button, gpointer user_data)
+{
+  if (! initializing_p)
+    apply_changes_and_save (GTK_WIDGET (button));
+}
+
+
 static gint
 list_doubleclick_cb (GtkWidget *button, GdkEventButton *event,
                      gpointer client_data)
@@ -1484,7 +1527,7 @@ maybe_reload_init_file (GtkWidget *widget, prefs_pair *pair)
                "Warning:\n\n"
                "file \"%s\" has changed, reloading.\n",
                f);
-      warning_dialog (widget, b, 100);
+      warning_dialog (widget, b, False, 100);
       free (b);
 
       load_init_file (p);
@@ -1579,9 +1622,7 @@ the_network_is_not_the_computer (GtkWidget *parent)
       sprintf (msg,
               "Warning:\n\n"
                "The XScreenSaver daemon doesn't seem to be running\n"
-               "on display \"%s\".  You can launch it by selecting\n"
-               "`Restart Daemon' from the File menu, or by typing\n"
-               "\"xscreensaver &\" in a shell.",
+               "on display \"%s\".  Launch it now?",
               d);
     }
   else if (p && ruser && *ruser && !!strcmp (ruser, p->pw_name))
@@ -1598,9 +1639,10 @@ the_network_is_not_the_computer (GtkWidget *parent)
              "the same ~/.xscreensaver file, so %s isn't\n"
              "going to work right.\n"
              "\n"
-             "Either re-run %s as \"%s\", or re-run\n"
-             "xscreensaver as \"%s\" (which you can do by\n"
-              "selecting `Restart Daemon' from the File menu.)\n",
+             "You should either re-run %s as \"%s\", or re-run\n"
+             "xscreensaver as \"%s\".\n"
+              "\n"
+              "Restart the xscreensaver daemon now?\n",
              progname, luser, lhost,
              d,
              (ruser ? ruser : "???"), (rhost ? rhost : "???"),
@@ -1622,8 +1664,7 @@ the_network_is_not_the_computer (GtkWidget *parent)
               "if they don't see the same ~%s/.xscreensaver file) then\n"
               "%s won't work right.\n"
                "\n"
-               "You can restart the daemon on \"%s\" as \"%s\" by\n"
-               "selecting `Restart Daemon' from the File menu.)",
+               "Restart the daemon on \"%s\" as \"%s\" now?\n",
               progname, luser, lhost,
               d,
               (ruser ? ruser : "???"), (rhost ? rhost : "???"),
@@ -1639,7 +1680,9 @@ the_network_is_not_the_computer (GtkWidget *parent)
               "Warning:\n\n"
               "This is %s version %s.\n"
               "But the xscreensaver managing display \"%s\"\n"
-              "is version %s.  This could cause problems.",
+              "is version %s.  This could cause problems.\n"
+              "\n"
+              "Restart the xscreensaver daemon now?\n",
               progname, short_version,
               d,
               rversion);
@@ -1647,7 +1690,7 @@ the_network_is_not_the_computer (GtkWidget *parent)
 
 
   if (*msg)
-    warning_dialog (parent, msg, 1);
+    warning_dialog (parent, msg, True, 1);
 
   free (msg);
 }
@@ -1703,10 +1746,40 @@ static char *defaults[] = {
  0
 };
 
+#if 0
+#ifdef HAVE_CRAPPLET
+static struct poptOption crapplet_options[] = {
+  {NULL, '\0', 0, NULL, 0}
+};
+#endif /* HAVE_CRAPPLET */
+#endif /* 0 */
+
+#define USAGE() \
+  fprintf (stderr, "usage: %s [ -display dpy-string ] [ -prefs ]\n", \
+           real_progname)
+
+
+static void
+map_window_cb (GtkWidget *w, gpointer user_data)
+{
+  Boolean oi = initializing_p;
+  initializing_p = True;
+  pixmapify_buttons (w);
+  eschew_gtk_lossage (w);
+  ensure_selected_item_visible (GTK_WIDGET(name_to_widget(w, "list")));
+  initializing_p = oi;
+}
+
+
 int
 main (int argc, char **argv)
 {
   XtAppContext app;
+# ifdef HAVE_CRAPPLET
+  GnomeClient *client;
+  GnomeClientFlags flags;
+  int init_results;
+# endif /* HAVE_CRAPPLET */
   prefs_pair Pair, *pair;
   saver_preferences P, P2, *p, *p2;
   Bool prefs = False;
@@ -1717,6 +1790,8 @@ main (int argc, char **argv)
   char *real_progname = argv[0];
   char *s;
 
+  initializing_p = True;
+
   s = strrchr (real_progname, '/');
   if (s) real_progname = s+1;
 
@@ -1755,9 +1830,68 @@ main (int argc, char **argv)
         !strncmp(argv[i], "-display", strlen(argv[i])))
       argv[i] = "--display";
 
+
+  /* We need to parse this arg really early... Sigh. */
+  for (i = 1; i < argc; i++)
+    if (argv[i] &&
+        (!strcmp(argv[i], "--crapplet") ||
+         !strcmp(argv[i], "--capplet")))
+      {
+# ifdef HAVE_CRAPPLET
+        int j;
+        crapplet_p = True;
+        for (j = i; j < argc; j++)  /* remove it from the list */
+          argv[j] = argv[j+1];
+        argc--;
+
+# else  /* !HAVE_CRAPPLET */
+        fprintf (stderr, "%s: not compiled with --crapplet support\n",
+                 real_progname[i]);
+        USAGE ();
+        exit (1);
+# endif /* !HAVE_CRAPPLET */
+      }
+
   /* Let Gtk open the X connection, then initialize Xt to use that
-     same connection.  Doctor Frankenstein would be proud. */   
-  gtk_init (&argc, &argv);
+     same connection.  Doctor Frankenstein would be proud.
+   */
+# ifdef HAVE_CRAPPLET
+  if (crapplet_p)
+    {
+      init_results = gnome_capplet_init ("screensaver-properties",
+                                         short_version,
+                                         argc, argv, NULL, 0, NULL);
+
+      if (init_results < 0)
+        {
+#  if 0
+          g_error ("An initialization error occurred while "
+                   "starting xscreensaver-capplet.\n");
+#  else  /* !0 */
+          fprintf (stderr, "%s: gnome_capplet_init failed: %d\n",
+                   real_progname, init_results);
+          exit (1);
+#  endif /* !0 */
+        }
+
+      client = gnome_master_client ();
+
+      if (client)
+        flags = gnome_client_get_flags (client);
+      else
+        flags = 0;
+
+      if (flags & GNOME_CLIENT_IS_CONNECTED)
+        {
+          gnome_client_set_restart_style (client, GNOME_RESTART_NEVER);
+          gnome_client_flush (client);
+        }
+    }
+  else
+# endif /* HAVE_CRAPPLET */
+    {
+      gtk_init (&argc, &argv);
+    }
 
 
   /* We must read exactly the same resources as xscreensaver.
@@ -1796,12 +1930,15 @@ main (int argc, char **argv)
        s++;
       if (!strcmp (s, "-prefs"))
        prefs = True;
+      else if (crapplet_p)
+        /* There are lots of random args that we don't care about when we're
+           started as a crapplet, so just ignore unknown args in that case. */
+        ;
       else
        {
          fprintf (stderr, "%s: unknown option: %s\n", real_progname, argv[i]);
-         fprintf (stderr, "usage: %s [ -display dpy-string ] [ -prefs ]\n",
-                  real_progname);
-         exit (1);
+          USAGE ();
+          exit (1);
        }
     }
 
@@ -1853,6 +1990,7 @@ main (int argc, char **argv)
   /* Create the window and all its widgets.
    */
   gtk_window = create_xscreensaver_demo ();
+  toplevel_widget = gtk_window;
 
   /* Set the window's title. */
   {
@@ -1880,12 +2018,11 @@ main (int argc, char **argv)
   sensitize_demo_widgets (gtk_window, False);
   fix_text_entry_sizes (gtk_window);
   scroll_to_current_hack (gtk_window, pair);
-  gtk_widget_show (gtk_window);
 
-  /* The next three calls must come after gtk_widget_show(). */
-  pixmapify_buttons (gtk_window);
-  eschew_gtk_lossage (gtk_window);
-  ensure_selected_item_visible (GTK_WIDGET(name_to_widget(gtk_window,"list")));
+  gtk_signal_connect (
+              GTK_OBJECT (name_to_widget (GTK_WIDGET (gtk_window), "list")),
+              "map", GTK_SIGNAL_FUNC(map_window_cb), 0);
+
 
   /* Handle the -prefs command-line argument. */
   if (prefs)
@@ -1895,8 +2032,46 @@ main (int argc, char **argv)
       gtk_notebook_set_page (notebook, 1);
     }
 
-  /* Issue any warnings about the running xscreensaver daemon. */
-  the_network_is_not_the_computer (gtk_window);
+# ifdef HAVE_CRAPPLET
+  if (crapplet_p)
+    {
+      GtkWidget *capplet;
+      GtkWidget *top_vbox;
+
+      capplet = capplet_widget_new ();
+
+      top_vbox = GTK_BIN (gtk_window)->child;
+
+      gtk_widget_ref (top_vbox);
+      gtk_container_remove (GTK_CONTAINER (gtk_window), top_vbox);
+      GTK_OBJECT_SET_FLAGS (top_vbox, GTK_FLOATING);
+
+      /* This is a crock, but otherwise, the Control Center expands to
+         be as tall as the screen. */
+      gtk_window_set_default_size (GTK_WINDOW (top_vbox), 600, 400);
+
+      /* In crapplet-mode, take off the menubar. */
+      gtk_widget_hide (name_to_widget (gtk_window, "menubar"));
+
+      gtk_container_add (GTK_CONTAINER (capplet), top_vbox);
+      gtk_widget_show (capplet);
+      gtk_widget_hide (gtk_window);
+
+      /* Hook up the Control Center's redundant Help button, too. */
+      gtk_signal_connect (GTK_OBJECT (capplet), "help",
+                          GTK_SIGNAL_FUNC (doc_menu_cb), 0);
+
+      /* Issue any warnings about the running xscreensaver daemon. */
+      the_network_is_not_the_computer (top_vbox);
+    }
+  else
+# endif /* HAVE_CRAPPLET */
+    {
+      gtk_widget_show (gtk_window);
+
+      /* Issue any warnings about the running xscreensaver daemon. */
+      the_network_is_not_the_computer (gtk_window);
+    }
 
   /* Run the Gtk event loop, and not the Xt event loop.  This means that
      if there were Xt timers or fds registered, they would never get serviced,
@@ -1905,7 +2080,15 @@ main (int argc, char **argv)
      Xt so that we could process the command line and use the X resource
      manager.
    */
-  gtk_main ();
+  initializing_p = False;
+
+# ifdef HAVE_CRAPPLET
+  if (crapplet_p)
+    capplet_gtk_main ();
+  else
+# endif /* HAVE_CRAPPLET */
+    gtk_main ();
+
   exit (0);
 }
 
index 1e28d60af27f09c481aff2ebd01914d513d057bd..ca3f13ea889d35b913a6def81b17bfb92ed4eeab 100644 (file)
@@ -1,6 +1,7 @@
 /* kpasswd.c --- verify kerberos passwords.
  * written by Nat Lanza (magus@cs.cmu.edu) for
- * xscreensaver, Copyright (c) 1993-1997, 1998 Jamie Zawinski <jwz@jwz.org>
+ * xscreensaver, Copyright (c) 1993-1997, 1998, 2000
+ *  Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
 #include <stdio.h>
 #include <string.h>
 #include <sys/types.h>
-#include <krb.h>
-#include <des.h>
+
+#ifdef HAVE_KERBEROS5
+# include <kerberosIV/krb.h>
+# include <kerberosIV/des.h>
+#else /* !HAVE_KERBEROS5 (meaning Kerberos 4) */
+# include <krb.h>
+# include <des.h>
+#endif /* !HAVE_KERBEROS5 */
 
 #if !defined(VMS) && !defined(HAVE_ADJUNCT_PASSWD)
 # include <pwd.h>
index a02cf81195226879c57d63e8336a2bd2a55f16af..aedd47e294c4e64917b2554a7d32555b3105a3b8 100644 (file)
@@ -1,7 +1,7 @@
 /* passwd-pam.c --- verifying typed passwords with PAM
  * (Pluggable Authentication Modules.)
  * written by Bill Nottingham <notting@redhat.com> (and jwz) for
- * xscreensaver, Copyright (c) 1993-1998 Jamie Zawinski <jwz@jwz.org>
+ * xscreensaver, Copyright (c) 1993-1998, 2000 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -217,7 +217,17 @@ pam_passwd_valid_p (const char *typed_passwd, Bool verbose_p)
     fprintf (stderr, "%s:   pam_authenticate (...) ==> %d (%s)\n",
              blurb(), status, PAM_STRERROR(pamh, status));
   if (status == PAM_SUCCESS)  /* Win! */
-    goto DONE;
+    {
+      /* Each time we successfully authenticate, refresh credentials,
+         for Kerberos/AFS/DCE/etc.  If this fails, just ignore that
+         failure and blunder along; it shouldn't matter.
+       */
+      int status2 = pam_setcred (pamh, PAM_REFRESH_CRED);
+      if (verbose_p)
+        fprintf (stderr, "%s:   pam_setcred (...) ==> %d (%s)\n",
+                 blurb(), status2, PAM_STRERROR(pamh, status2));
+      goto DONE;
+    }
 
   /* If that didn't work, set the user to root, and try to authenticate again.
    */
diff --git a/driver/screensaver-properties.desktop.in b/driver/screensaver-properties.desktop.in
new file mode 100644 (file)
index 0000000..cdcd3e0
--- /dev/null
@@ -0,0 +1,42 @@
+[Desktop Entry]
+Name=Screensaver
+Name[da]=Pauseskærm
+Name[ca]=Protector de pantalla
+Name[de]=Bildschirmschoner
+Name[es]=Propiedades Salvapantallas
+Name[et]=Ekraanisäästja
+Name[fi]=Ruudunsäästäjä
+Name[fr]=Propriétés Économiseur d'écran
+Name[hu]=Képernyõvédõ
+Name[it]=Salvaschermo
+Name[ja]=¥¹¥¯¥ê¡¼¥ó¥»¡¼¥Ð¡¼
+Name[ko]=È­¸é º¸È£±â
+Name[no]=Skjermsparer
+Name[pl]=Wygaszacz ekranu
+Name[pt]=Propriedades da protecção de ecrã
+Name[pt_BR]=Propriedades da proteção de tela
+Name[ru]=èÒÁÎÉÔÅÌØ ÜËÒÁÎÁ
+Name[sv]=Skärmsläckare
+Name[wa]=Spårgneu di waitroûle
+Comment=Configure the settings of the screensaver.
+Comment[da]=Indstil din pauseskærm.
+Comment[ca]=Configurar el protector de pantalla.
+Comment[de]=Bildschirmschoner einrichten
+Comment[es]=Configurar el salvapantalla
+Comment[et]=Ekraanisäästja häälestus
+Comment[fi]=Aseta ruudunsäästäjän asetukset.
+Comment[fr]=Configurer l'économiseur d'écran
+Comment[hu]=Képernyõvédõ beállítások
+Comment[it]=Impostazioni del salvaschermo
+Comment[ja]=¥¹¥¯¥ê¡¼¥ó¥»¡¼¥Ð¡¼¤ÎÀßÄê
+Comment[ko]=È­¸é º¸È£±â ¼³Á¤
+Comment[no]=Endre innstillingene for skjermspareren
+Comment[pl]=Konfiguracja wygaszacza ekranu
+Comment[pt]=Configura as opções da protecção de ecrã.
+Comment[ru]=îÁÓÔÒÏÊËÁ ÈÒÁÎÉÔÅÌÑ ÜËÒÁÎÁ.
+Comment[sv]=Ändra inställningar för skärmsläckare
+Comment[wa]=Apontiaedje do spårgneu di waitroûle
+Exec=@bindir@/xscreensaver-demo --crapplet
+Icon=gnome-ccscreensaver.png
+Terminal=0
+Type=Application
index 21e101648e021fee754c91bf87036ef39090b190..7a0b07831c926c04d398f518aa0280a666c47e39 100644 (file)
@@ -27,10 +27,11 @@ in this Software without prior written authorization from The Open Group.
  * GLX and Overlay support added by Jamie Zawinski <jwz@jwz.org>, 11-Nov-99
  *
  *      To compile:
- *         cc -DHAVE_GLX xdpyinfo.c -o xdpyinfo -lGL -lX11 -lXext -lm
+ *         cc -DHAVE_GLX xdpyinfo.c -o xdpyinfo -lGL -lX11 -lXext [-lXtst] -lm
  *
  *      Other defines to consider:
- *         -DHAVE_XIE -DHAVE_XTEST -DHAVE_SYNC -DHAVE_XRECORD
+ *         -DMITSHM -DHAVE_XDBE -DHAVE_XIE -DHAVE_XTEST -DHAVE_SYNC
+ *         -DHAVE_XRECORD
  */
 
 #include <X11/Xlib.h>
@@ -46,7 +47,9 @@ in this Software without prior written authorization from The Open Group.
 #ifdef HAVE_XSYNC
 #include <X11/extensions/sync.h>
 #endif /* HAVE_XSYNC */
+#ifdef HAVE_XDBE
 #include <X11/extensions/Xdbe.h>
+#endif /* HAVE_XDBE */
 #ifdef HAVE_XRECORD
 #include <X11/extensions/record.h>
 #endif /* HAVE_XRECORD */
@@ -873,6 +876,7 @@ print_mitshm_info(dpy, extname)
 }
 #endif /* MITSHM */
 
+#ifdef HAVE_XDBE
 int
 print_dbe_info(dpy, extname)
     Display *dpy;
@@ -902,6 +906,7 @@ print_dbe_info(dpy, extname)
     XdbeFreeVisualInfo(svi);
     return 1;
 }
+#endif /* HAVE_XDBE */
 
 #ifdef HAVE_XRECORD
 int
@@ -949,7 +954,9 @@ ExtensionPrintInfo known_extensions[] =
 #ifdef HAVE_XTEST
     {XTestExtensionName, print_xtest_info, False},
 #endif /* HAVE_XTEST */
+#ifdef HAVE_XDBE
     {"DOUBLE-BUFFER", print_dbe_info, False},
+#endif /* HAVE_XDBE */
 #ifdef HAVE_XRECORD
     {"RECORD", print_record_info, False}    
 #endif /* HAVE_XRECORD */
index e6d20a48fd3163e8a21d4d75a9f2fcc3f84682e2..5e66859f6958d458b4bf972618772fe5aa8a6499 100644 (file)
@@ -11,7 +11,7 @@
 .if n .sp 1
 .if t .sp .5
 ..
-.TH XScreenSaver 1 "30-Jan-00 (3.23)" "X Version 11"
+.TH XScreenSaver 1 "03-Apr-2000 (3.24)" "X Version 11"
 .SH NAME
 xscreensaver-command - control a running xscreensaver process
 .SH SYNOPSIS
index 659dc9138c552ae23849ccd7059e8331915a472f..cf98335e8cb64d63900ca221c9cbd577582ff0f3 100644 (file)
@@ -19,9 +19,6 @@
   <main_header_file>demo-Gtk-widgets.h</main_header_file>
   <handler_source_file>demo-Gtk-stubs.c</handler_source_file>
   <handler_header_file>demo-Gtk-stubs.h</handler_header_file>
-  <support_source_file>support.c</support_source_file>
-  <support_header_file>support.h</support_header_file>
-  <translatable_strings_file></translatable_strings_file>
 </project>
 
 <widget>
       <class>GtkNotebook</class>
       <name>notebook</name>
       <can_focus>True</can_focus>
+      <signal>
+       <name>switch_page</name>
+       <handler>pref_changed_cb</handler>
+       <last_modification_time>Mon, 03 Apr 2000 02:36:24 GMT</last_modification_time>
+      </signal>
       <show_tabs>True</show_tabs>
       <show_border>True</show_border>
       <tab_pos>GTK_POS_TOP</tab_pos>
@@ -615,6 +617,16 @@ Mono
              <name>timeout_text</name>
              <tooltip>How long until the screensaver activates.</tooltip>
              <can_focus>True</can_focus>
+             <signal>
+               <name>activate</name>
+               <handler>pref_changed_cb</handler>
+               <last_modification_time>Mon, 03 Apr 2000 02:28:10 GMT</last_modification_time>
+             </signal>
+             <signal>
+               <name>focus_out_event</name>
+               <handler>pref_changed_cb</handler>
+               <last_modification_time>Mon, 03 Apr 2000 02:34:26 GMT</last_modification_time>
+             </signal>
              <editable>True</editable>
              <text_visible>True</text_visible>
              <text_max_length>8</text_max_length>
@@ -640,6 +652,16 @@ Mono
              <name>cycle_text</name>
              <tooltip>How long each demo will be run before moving on to another.</tooltip>
              <can_focus>True</can_focus>
+             <signal>
+               <name>activate</name>
+               <handler>pref_changed_cb</handler>
+               <last_modification_time>Mon, 03 Apr 2000 02:28:29 GMT</last_modification_time>
+             </signal>
+             <signal>
+               <name>focus_out_event</name>
+               <handler>pref_changed_cb</handler>
+               <last_modification_time>Mon, 03 Apr 2000 02:35:28 GMT</last_modification_time>
+             </signal>
              <editable>True</editable>
              <text_visible>True</text_visible>
              <text_max_length>8</text_max_length>
@@ -665,6 +687,16 @@ Mono
              <name>fade_text</name>
              <tooltip>How long (in seconds) it should take for the screen to fade to black (8-bit displays only.)</tooltip>
              <can_focus>True</can_focus>
+             <signal>
+               <name>activate</name>
+               <handler>pref_changed_cb</handler>
+               <last_modification_time>Mon, 03 Apr 2000 02:28:29 GMT</last_modification_time>
+             </signal>
+             <signal>
+               <name>focus_out_event</name>
+               <handler>pref_changed_cb</handler>
+               <last_modification_time>Mon, 03 Apr 2000 02:35:28 GMT</last_modification_time>
+             </signal>
              <editable>True</editable>
              <text_visible>True</text_visible>
              <text_max_length>8</text_max_length>
@@ -690,6 +722,16 @@ Mono
              <name>ticks_text</name>
              <tooltip>How many steps are in the fade animation (8-bit displays only.)</tooltip>
              <can_focus>True</can_focus>
+             <signal>
+               <name>activate</name>
+               <handler>pref_changed_cb</handler>
+               <last_modification_time>Mon, 03 Apr 2000 02:28:29 GMT</last_modification_time>
+             </signal>
+             <signal>
+               <name>focus_out_event</name>
+               <handler>pref_changed_cb</handler>
+               <last_modification_time>Mon, 03 Apr 2000 02:35:28 GMT</last_modification_time>
+             </signal>
              <editable>True</editable>
              <text_visible>True</text_visible>
              <text_max_length>8</text_max_length>
@@ -715,6 +757,16 @@ Mono
              <name>lock_text</name>
              <tooltip>How long after the screensaver has activated until a password will be required (if  `Require Password' is also set.)</tooltip>
              <can_focus>True</can_focus>
+             <signal>
+               <name>activate</name>
+               <handler>pref_changed_cb</handler>
+               <last_modification_time>Mon, 03 Apr 2000 02:28:29 GMT</last_modification_time>
+             </signal>
+             <signal>
+               <name>focus_out_event</name>
+               <handler>pref_changed_cb</handler>
+               <last_modification_time>Mon, 03 Apr 2000 02:35:28 GMT</last_modification_time>
+             </signal>
              <editable>True</editable>
              <text_visible>True</text_visible>
              <text_max_length>8</text_max_length>
@@ -740,6 +792,16 @@ Mono
              <name>pass_text</name>
              <tooltip>How long the password dialog will wait.</tooltip>
              <can_focus>True</can_focus>
+             <signal>
+               <name>activate</name>
+               <handler>pref_changed_cb</handler>
+               <last_modification_time>Mon, 03 Apr 2000 02:29:08 GMT</last_modification_time>
+             </signal>
+             <signal>
+               <name>focus_out_event</name>
+               <handler>pref_changed_cb</handler>
+               <last_modification_time>Mon, 03 Apr 2000 02:35:58 GMT</last_modification_time>
+             </signal>
              <editable>True</editable>
              <text_visible>True</text_visible>
              <text_max_length>8</text_max_length>
@@ -920,6 +982,11 @@ Mono
              <class>GtkCheckButton</class>
              <name>verbose_button</name>
              <can_focus>True</can_focus>
+             <signal>
+               <name>toggled</name>
+               <handler>pref_changed_cb</handler>
+               <last_modification_time>Mon, 03 Apr 2000 02:31:53 GMT</last_modification_time>
+             </signal>
              <label>Verbose</label>
              <active>False</active>
              <draw_indicator>True</draw_indicator>
@@ -943,6 +1010,11 @@ Mono
              <class>GtkCheckButton</class>
              <name>install_button</name>
              <can_focus>True</can_focus>
+             <signal>
+               <name>toggled</name>
+               <handler>pref_changed_cb</handler>
+               <last_modification_time>Mon, 03 Apr 2000 02:32:25 GMT</last_modification_time>
+             </signal>
              <label>Install Colormap</label>
              <active>False</active>
              <draw_indicator>True</draw_indicator>
@@ -966,6 +1038,11 @@ Mono
              <class>GtkCheckButton</class>
              <name>fade_button</name>
              <can_focus>True</can_focus>
+             <signal>
+               <name>toggled</name>
+               <handler>pref_changed_cb</handler>
+               <last_modification_time>Mon, 03 Apr 2000 02:32:39 GMT</last_modification_time>
+             </signal>
              <label>Fade Colormap</label>
              <active>False</active>
              <draw_indicator>True</draw_indicator>
@@ -989,6 +1066,11 @@ Mono
              <class>GtkCheckButton</class>
              <name>unfade_button</name>
              <can_focus>True</can_focus>
+             <signal>
+               <name>toggled</name>
+               <handler>pref_changed_cb</handler>
+               <last_modification_time>Mon, 03 Apr 2000 02:32:51 GMT</last_modification_time>
+             </signal>
              <label>Unfade Colormap</label>
              <active>False</active>
              <draw_indicator>True</draw_indicator>
@@ -1012,6 +1094,11 @@ Mono
              <class>GtkCheckButton</class>
              <name>lock_button</name>
              <can_focus>True</can_focus>
+             <signal>
+               <name>toggled</name>
+               <handler>pref_changed_cb</handler>
+               <last_modification_time>Mon, 03 Apr 2000 02:33:01 GMT</last_modification_time>
+             </signal>
              <label>Require Password</label>
              <active>False</active>
              <draw_indicator>True</draw_indicator>
@@ -1032,49 +1119,6 @@ Mono
            </widget>
          </widget>
        </widget>
-
-       <widget>
-         <class>GtkHButtonBox</class>
-         <name>hbuttonbox3</name>
-         <border_width>10</border_width>
-         <layout_style>GTK_BUTTONBOX_DEFAULT_STYLE</layout_style>
-         <spacing>30</spacing>
-         <child_min_width>85</child_min_width>
-         <child_min_height>27</child_min_height>
-         <child_ipad_x>7</child_ipad_x>
-         <child_ipad_y>0</child_ipad_y>
-         <child>
-           <padding>0</padding>
-           <expand>False</expand>
-           <fill>False</fill>
-         </child>
-
-         <widget>
-           <class>GtkButton</class>
-           <name>prefs_ok</name>
-           <can_default>True</can_default>
-           <can_focus>True</can_focus>
-           <signal>
-             <name>clicked</name>
-             <handler>prefs_ok_cb</handler>
-             <last_modification_time>Mon, 08 Nov 1999 04:39:18 GMT</last_modification_time>
-           </signal>
-           <label>OK</label>
-         </widget>
-
-         <widget>
-           <class>GtkButton</class>
-           <name>prefs_cancel</name>
-           <can_default>True</can_default>
-           <can_focus>True</can_focus>
-           <signal>
-             <name>clicked</name>
-             <handler>prefs_cancel_cb</handler>
-             <last_modification_time>Mon, 08 Nov 1999 04:39:33 GMT</last_modification_time>
-           </signal>
-           <label>Cancel</label>
-         </widget>
-       </widget>
       </widget>
 
       <widget>
index 2d974f029cb2b9edbe3797d3124176f8ece9e446..578ad9c0798e903d1c17047cc1161aadd792c623 100644 (file)
@@ -11,7 +11,7 @@
 .if n .sp 1
 .if t .sp .5
 ..
-.TH XScreenSaver 1 "30-Jan-00 (3.23)" "X Version 11"
+.TH XScreenSaver 1 "03-Apr-2000 (3.24)" "X Version 11"
 .SH NAME
 xscreensaver-demo - interactively control the background xscreensaver daemon
 .SH SYNOPSIS
index 272f93e59367df19aa63bb641a3b0e5e8b01eebc..f15cd3bc23588bec0397bed9e2f201d9dd4fc36e 100644 (file)
@@ -11,7 +11,7 @@
 .if n .sp 1
 .if t .sp .5
 ..
-.TH XScreenSaver 1 "30-Jan-00 (3.23)" "X Version 11"
+.TH XScreenSaver 1 "03-Apr-2000 (3.24)" "X Version 11"
 .SH NAME
 xscreensaver - graphics hack and screen locker, launched when the user is idle
 .SH SYNOPSIS
index 5da1b76af0bd2b55e7b2218bd6355db16bc687ed..24927d93d3d3d0b8dadb91cbaef8defdd3bcaf41 100644 (file)
@@ -147,7 +147,7 @@ MEN         = attraction.man blitspin.man bouboule.man braid.man \
                  xjack.man xlyap.man jigsaw.man epicycle.man bsod.man \
                  sonar.man t3d.man squiral.man spotlight.man critical.man \
                  vidwhacker.man webcollage.man xsublim.man distort.man \
-                 phosphor.man xmatrix.man xteevee.man
+                 phosphor.man xmatrix.man xteevee.man xflame.man
 STAR           = *
 EXTRAS         = README Makefile.in xlock_23.h .gdbinit \
                  images/$(STAR).xbm \
@@ -499,8 +499,8 @@ interference:  interference.o       $(HACK_OBJS) $(COL) $(SHM) $(DBE)
 truchet:        truchet.o      $(HACK_OBJS) $(COL)
        $(CC_HACK) -o $@ $@.o   $(HACK_OBJS) $(COL) $(HACK_LIBS)
 
-bsod:          bsod.o          $(HACK_OBJS) $(COL)
-       $(CC_HACK) -o $@ $@.o   $(HACK_OBJS) $(COL) $(HACK_LIBS) $(XPM_LIBS)
+bsod:          bsod.o          $(HACK_OBJS) $(GRAB)
+       $(CC_HACK) -o $@ $@.o   $(HACK_OBJS) $(GRAB) $(HACK_LIBS) $(XPM_LIBS) $(GRAB_LIBS)
 
 distort:       distort.o       $(HACK_OBJS) $(GRAB) $(SHM)
        $(CC_HACK) -o $@ $@.o   $(HACK_OBJS) $(GRAB) $(SHM) $(HACK_LIBS) $(GRAB_LIBS)
@@ -1648,6 +1648,7 @@ xflame.o: $(UTILS_SRC)/colors.h
 xflame.o: $(UTILS_SRC)/grabscreen.h
 xflame.o: $(UTILS_SRC)/visual.h
 xflame.o: $(UTILS_SRC)/xshm.h
+xflame.o: $(srcdir)/images/bob.xbm
 wander.o: $(srcdir)/screenhack.h
 wander.o: ../config.h
 wander.o: $(UTILS_SRC)/yarandom.h
index faffc0f4e821a120c3baa8324d7a005821ee1452..5decc5c61dddcf0170ff682a904ad8b010c557c2 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1998 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1998, 2000 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -1019,6 +1019,85 @@ macsbug (Display *dpy, Window window, int delay)
   return True;
 }
 
+\f
+/* blit damage
+ *
+ * by Martin Pool <mbp@samba.org>, Feb 2000.
+ *
+ * This is meant to look like the preferred failure mode of NCD
+ * Xterms.  The parameters for choosing what to copy where might not
+ * be quite right, but it looks about ugly enough.
+ */
+static Bool
+blitdamage (Display *dpy, Window window, int delay)
+{
+  XGCValues gcv;
+  XWindowAttributes xwa;
+  GC gc0;
+  int i;
+  int delta_x = 0, delta_y = 0;
+  int w, h;
+  int chunk_h, chunk_w;
+  int steps;
+  long gc_mask = 0;
+  int src_x, src_y;
+  int x, y;
+  
+  if (!get_boolean_resource("doBlitDamage", "DoBlitDamage"))
+    return False;
+
+  XGetWindowAttributes(dpy, window, &xwa);
+
+  grab_screen_image(xwa.screen, window);
+
+  w = xwa.width;
+  h = xwa.height;
+
+  gc_mask = GCForeground;
+  
+  gcv.plane_mask = random();
+  gc_mask |= GCPlaneMask;
+  
+  gc0 = XCreateGC(dpy, window, gc_mask, &gcv);
+
+  steps = 50;
+  chunk_w = w / (random() % 1 + 1);
+  chunk_h = h / (random() % 1 + 1);
+  if (random() & 0x1000) 
+    delta_y = random() % 600;
+  if (!delta_y || (random() & 0x2000))
+    delta_x = random() % 600;
+  src_x = 0; 
+  src_y = 0; 
+  x = 0;
+  y = 0;
+  
+  for (i = 0; i < steps; i++) {
+    if (x + chunk_w > w) 
+      x -= w;
+    else
+      x += delta_x;
+    
+    if (y + chunk_h > h)
+      y -= h;
+    else
+      y += delta_y;
+    
+    XCopyArea(dpy, window, window, gc0,
+             src_x, src_y, 
+             chunk_w, chunk_h,
+             x, y);
+
+    bsod_sleep(dpy, 0);
+  }
+
+  bsod_sleep(dpy, delay);
+
+  XFreeGC(dpy, gc0);
+
+  return True;
+}
+
 
 \f
 char *progclass = "BSOD";
@@ -1034,6 +1113,7 @@ char *defaults [] = {
   "*doMacsBug:            True",
   "*doSCO:                True",
   "*doSparcLinux:         False",      /* boring */
+  "*doBlitDamage:          True",
 
   ".Windows.font:         -*-courier-bold-r-*-*-*-120-*-*-m-*-*-*",
   ".Windows.font2:        -*-courier-bold-r-*-*-*-180-*-*-m-*-*-*",
@@ -1098,7 +1178,7 @@ screenhack (Display *dpy, Window window)
   while (1)
     {
       Bool did;
-      do {  i = (random() & 0xFF) % 8; } while (i == j);
+      do {  i = (random() & 0xFF) % 9; } while (i == j);
       switch (i)
        {
        case 0: did = windows(dpy, window, delay, True); break;
@@ -1109,6 +1189,7 @@ screenhack (Display *dpy, Window window)
        case 5: did = sco(dpy, window, delay); break;
        case 6: did = sparc_linux(dpy, window, delay); break;
        case 7: did = atari(dpy, window, delay); break;
+       case 8: did = blitdamage(dpy, window, delay); break;
        default: abort(); break;
        }
       loop++;
index 63bcee68a9d1b3795edc8a0e21d606c5d785c943..925b7b2163a7fab000d03f8473ba37b75ac9fb3c 100644 (file)
@@ -72,6 +72,7 @@ hacks are displayed and which aren't.
 .BR doMacsBug ,
 .BR doSCO ,
 .BR doAtari ,
+.BR doBlitDamage ,
 and
 .BR doSparcLinux .
 Each of these is a Boolean resource, they all default to true, except for
index 3f8f2763ab85dc812ca6fc16dd49fcc068fcd8e8..1e8f3a1ab19731ca7283f51a35402ef7647581a7 100644 (file)
@@ -1,5 +1,5 @@
 /* critical -- Self-organizing-criticality display hack for XScreenSaver
- * Copyright (C) 1998, 1999 Martin Pool <mbp@humbug.org.au>
+ * Copyright (C) 1998, 1999, 2000 Martin Pool <mbp@humbug.org.au>
  *
  * Permission to use, copy, modify, distribute, and sell this software
  * and its documentation for any purpose is hereby granted without
  *
  * Revision history:
  * 13 Nov 1998: Initial version, Martin Pool <mbp@humbug.org.au>
- */
+ * 08 Feb 2000: Change to keeping and erasing a trail, <mbp>
+ *
+ * It would be nice to draw curvy shapes rather than just straight
+ * lines, but X11 doesn't have spline primitives (?) so we'd have to
+ * do all the work ourselves  */
 
 #include "screenhack.h"
 #include "erase.h"
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <assert.h>
 
 char *progclass = "Critical";
 
@@ -29,11 +34,14 @@ typedef struct {
   unsigned short *cells;
 } CriticalModel;
 
+typedef struct {
+  int trail;                   /* length of trail */
+  int cell_size;
+} CriticalSettings;
+
 
 CriticalModel * model_allocate (int w, int h);
 void model_initialize (CriticalModel *model);
-static void model_step (CriticalModel *model, int *top_x, int *top_y);
-
 
 /* Options this module understands.  */
 XrmOptionDescRec options[] = {
@@ -43,6 +51,7 @@ XrmOptionDescRec options[] = {
   { "-restart",                ".restart",     XrmoptionSepArg, 0 },
   { "-cellsize",       ".cellsize",    XrmoptionSepArg, 0 },
   { "-batchcount",     ".batchcount",  XrmoptionSepArg, 0 },
+  { "-trail",          ".trail",       XrmoptionSepArg, 0 },
   { 0, 0, 0, 0 }               /* end */
 };
 
@@ -54,12 +63,24 @@ char *defaults[] = {
   "*delay:                     10000", 
   "*ncolors:                   64",
   "*restart:                   8",
-  "*cellsize:                  9",
   "*batchcount:                        1500",
+  "*trail:                     50",
   0                            /* end */
 };
 
 
+int
+clip (int low, int val, int high)
+{
+  if (val < low)
+    return low;
+  else if (val > high)
+    return high;
+  else
+    return val;
+}
+
+
 /* Allocate an return a new simulation model datastructure.
  */
 
@@ -122,11 +143,12 @@ model_initialize (CriticalModel *model)
    Neighbours that fall off the edge of the model are simply
    ignored. */
 static void
-model_step (CriticalModel *model, int *top_x, int *top_y)
+model_step (CriticalModel *model, XPoint *ptop)
 {
   int                  x, y, i;
   int                  dx, dy;
-  unsigned short       top_value;
+  unsigned short       top_value = 0;
+  int                  top_x = 0, top_y = 0;
 
   /* Find the top cell */
   top_value = 0;
@@ -137,8 +159,8 @@ model_step (CriticalModel *model, int *top_x, int *top_y)
        if (model->cells[i] >= top_value)
          {
            top_value = model->cells[i];
-           *top_x = x;
-           *top_y = y;
+           top_x = x;
+           top_y = y;
          }
        i++;
       }
@@ -146,19 +168,22 @@ model_step (CriticalModel *model, int *top_x, int *top_y)
   /* Replace it and its neighbours with new random values */
   for (dy = -1; dy <= 1; dy++)
     {
-      int y = *top_y + dy;
+      int y = top_y + dy;
       if (y < 0  ||  y >= model->height)
        continue;
       
       for (dx = -1; dx <= 1; dx++)
        {
-         int x = *top_x + dx;
+         int x = top_x + dx;
          if (x < 0  ||  x >= model->width)
            continue;
          
          model->cells[y * model->width + x] = (unsigned short) random();
        }
     }
+
+  ptop->x = top_x;
+  ptop->y = top_y;
 }
 
 
@@ -212,25 +237,47 @@ setup_colormap (Display *dpy, XWindowAttributes *wattr,
 }
 
 
+/* Draw one step of the hack.  Positions are cell coordinates. */
+static void
+draw_step (CriticalSettings *settings,
+          Display *dpy, Window window, GC gc,
+          int pos, XPoint *history)
+{
+  int cell_size = settings->cell_size;
+  int half = cell_size/2;
+  int old_pos = (pos + settings->trail - 1) % settings->trail;
+  
+  pos = pos % settings->trail;
+
+  XDrawLine (dpy, window, gc, 
+            history[pos].x * cell_size + half,
+            history[pos].y * cell_size + half,
+            history[old_pos].x * cell_size + half,
+            history[old_pos].y * cell_size + half);
+}
+
+
 
 /* Display a self-organizing criticality screen hack.  The program
    runs indefinately on the root window. */
 void
 screenhack (Display *dpy, Window window)
 {
-  GC                   fgc, bgc;
-  XGCValues            gcv;
-  XWindowAttributes    wattr;
   int                  n_colors;
   XColor               *colors;
   int                  model_w, model_h;
   CriticalModel                *model;
   int                  lines_per_color = 10;
   int                  i_color = 0;
-  int                  x1, y1, x2, y2;
   long                 delay_usecs;
-  int                  cell_size;
   int                  batchcount;
+  XPoint               *history; /* in cell coords */
+  int                  pos = 0;
+  int                  wrapped = 0;
+  GC                   fgc, bgc;
+  XGCValues            gcv;
+  XWindowAttributes    wattr;
+  CriticalSettings     settings;
 
   /* Number of screens that should be drawn before reinitializing the
      model, and count of the number of screens done so far. */
@@ -239,20 +286,30 @@ screenhack (Display *dpy, Window window)
   /* Find window attributes */
   XGetWindowAttributes (dpy, window, &wattr);
 
-  /* Construct the initial model state. */
-  cell_size = get_integer_resource ("cellsize", "Integer");
-  if (cell_size < 1)
-    cell_size = 1;
-  if (cell_size >= 100)
-    cell_size = 99;
-
   batchcount = get_integer_resource ("batchcount", "Integer");
   if (batchcount < 5)
     batchcount = 5;
+
+  /* For the moment the model size is just fixed -- making it vary
+     with the screen size just makes the hack boring on large
+     screens. */
+  model_w = 80;
+  settings.cell_size = wattr.width / model_w;
+  model_h = wattr.height / settings.cell_size;
+
+  /* Construct the initial model state. */
+
+  settings.trail = clip(2, get_integer_resource ("trail", "Integer"), 1000);
   
-  model_w = wattr.width / cell_size;
-  model_h = wattr.height  / cell_size;
-  
+  history = malloc (sizeof history[0] * settings.trail);
+  if (!history)
+    {
+      fprintf (stderr, "critical: "
+              "couldn't allocate trail history of %d cells\n",
+              settings.trail);
+      return;
+    }
+
   model = model_allocate (model_w, model_h);
   if (!model)
     {
@@ -267,9 +324,6 @@ screenhack (Display *dpy, Window window)
 
   fgc = XCreateGC (dpy, window, 0, &gcv);
 
-  x2 = random() % model_w;
-  y2 = random() % model_h;
-
   delay_usecs = get_integer_resource ("delay", "Integer");
   n_restart = get_integer_resource ("restart", "Integer");
     
@@ -280,10 +334,15 @@ screenhack (Display *dpy, Window window)
   while (1) {
     int i_batch;
 
-    if (!i_restart)
+    if (i_restart == 0)
       {
+       /* Time to start a new simulation, this one has probably got
+          to be a bit boring. */
        setup_colormap (dpy, &wattr, &colors, &n_colors);
+       erase_full_window (dpy, window);
        model_initialize (model);
+       pos = 1;
+       wrapped = 0;
       }
     
     for (i_batch = batchcount; i_batch; i_batch--)
@@ -296,27 +355,33 @@ screenhack (Display *dpy, Window window)
            XChangeGC (dpy, fgc, GCForeground, &gcv);
          }
        
-      /* draw a line */
-      x1 = x2;
-      y1 = y2;
+       assert(pos >= 0 && pos < settings.trail);
+       model_step (model, &history[pos]);
 
-      model_step (model, &x2, &y2);
+       draw_step (&settings, dpy, window, fgc, pos, history);
 
-      XDrawLine (dpy, window, fgc,
-                x1 * cell_size + cell_size/2,
-                y1 * cell_size + cell_size/2,
-                x2 * cell_size + cell_size/2,
-                y2 * cell_size + cell_size/2);
+       /* we use the history as a ring buffer, but don't start erasing until
+          we've wrapped around once. */
+       if (++pos >= settings.trail)
+         {
+           pos -= settings.trail;
+           wrapped = 1;
+         }
 
-      XSync (dpy, False); 
-      screenhack_handle_events (dpy);
+       if (wrapped)
+         {
+           draw_step (&settings, dpy, window, bgc, pos+1, history);
+         }
 
-      if (delay_usecs)
-        usleep (delay_usecs);
-    }
+       XSync (dpy, False); 
+       screenhack_handle_events (dpy);
+       
+       if (delay_usecs)
+         usleep (delay_usecs);
 
+      }
+    
     i_restart = (i_restart + 1) % n_restart;
-    erase_full_window (dpy, window);
   }
 }
 
index 21eec6a565aceca78b91a5c243ed7964d1be4a51..4b4c22180e48532a43343e73a227398d8996738a 100644 (file)
@@ -1,4 +1,4 @@
-.TH XScreenSaver 1 "13-Nov-98" "X Version 11"
+.TH XScreenSaver 1 "08 Feb 2000" "X Version 11"
 .SH NAME
 critical - Draw a system showing self-organizing criticality
 .SH SYNOPSIS
@@ -58,6 +58,9 @@ The maximum random radius increment to use.
 .B \-ncolors \fIinteger\fP
 How many colors should be allocated in the color ramp (note that this
 value interacts with \fIoffset\fP.)
+.TP 8
+.B \-trail \fIinteger\fP
+Length of the trail: between 5 and 100 is nice.
 .SH ENVIRONMENT
 .PP
 .TP 8
@@ -83,5 +86,5 @@ supporting documentation.  No representations are made about the
 suitability of this software for any purpose.  It is provided "as is"
 without express or implied warranty.
 .SH AUTHOR
-Martin Pool <mbp@humbug.org.au>, 13-Nov-1998.  Based in part on the
+Martin Pool <mbp@humbug.org.au>, 1998-2000.  Based in part on the
 XScreenSaver code by Jamie Zawinski <jwz@jwz.org>.
index d3cc904f8d3ee136e2672bdb83c7b7bbffd23046..0f8c2f4aee2914762d3ccd952b1ebd042219fe4a 100644 (file)
@@ -8,6 +8,7 @@ static const char sccsid[] = "@(#)flow.c 4.10 98/04/24 xlockmore";
 
 /*-
  * Copyright (c) 1996 by Tim Auckland <Tim.Auckland@Sun.COM>
+ * Portions added by Stephen Davies are Copyright (c) 2000 Stephen Davies
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation for any purpose and without fee is hereby granted,
@@ -27,6 +28,12 @@ static const char sccsid[] = "@(#)flow.c 4.10 98/04/24 xlockmore";
  * sections of the "Birkhoff Bagel" and Duffing's forced occilator.
  *
  * Revision History:
+ * 21-Feb-00: Major hackage by Chalky (Stephen Davies, chalky@null.net)
+ *            Forced perspective mode, added 3d box around attractor which
+ *            involved coding 3d-planar-clipping against the view-frustrum
+ *            thingy. Also made view alternate between piggybacking on a 'bee'
+ *            to zooming around outside the attractor. Most bees slow down and
+ *            stop, to make the structure of the attractor more obvious.
  * 31-Nov-98: [TDA] Added Duffing  (what a strange day that was :) DAB)
  *   Duffing's forced oscillator has been added to the formula list and
  *   the parameters section has been updated to display it in Poincare'
@@ -48,9 +55,16 @@ static const char sccsid[] = "@(#)flow.c 4.10 98/04/24 xlockmore";
 # define HACK_DRAW     draw_flow
 # define flow_opts     xlockmore_opts
 # define DEFAULTS      "*delay:                1000 \n" \
-                                       "*count:                1024 \n" \
+                                       "*count:                500 \n" \
                                        "*cycles:               3000 \n" \
-                                       "*ncolors:              200 \n"
+                                       "*ncolors:              200 \n" \
+       "*rotate:         True \n" \
+       "*ride:           True \n" \
+       "*zoom:           True \n" \
+       "*allow2d:        True \n" \
+       "*box:            True \n" \
+       "*slow:           True \n" \
+       "*freeze:         True \n"
 # define SMOOTH_COLORS
 # include "xlockmore.h"                /* in xscreensaver distribution */
 # include "erase.h"
@@ -59,7 +73,8 @@ static const char sccsid[] = "@(#)flow.c 4.10 98/04/24 xlockmore";
 # include "xlock.h"            /* in xlockmore distribution */
 #endif /* STANDALONE */
 
-ModeSpecOpt flow_opts = { 0, NULL, 0, NULL, NULL };
+XrmOptionDescRec flow_options[];
+ModeSpecOpt flow_opts = { 7, flow_options, 0, NULL, NULL };
 
 #ifdef USE_MODULES
 ModStruct   flow_description = {
@@ -87,7 +102,22 @@ typedef struct {
 #define Z(t,b) (sp->p[t][b].z)
 #define balance_rand(v)        ((LRAND()/MAXRAND*(v))-((v)/2)) /* random around 0 */
 #define SCALE_X(A) (sp->width/2+sp->width/sp->size*(A))
-#define SCALE_Y(A) (sp->height/2+sp->height/sp->size*(A))
+/*#define SCALE_Y(A) (sp->height/2+sp->height/sp->size*(A))*/
+#define SCALE_Y(A) (sp->height/2+sp->width/sp->size*(A))
+
+/* Mode of operation. Rotate, ride and zoom are mutually exclusive */
+typedef enum {
+       FLOW_ROTATE = 1, /* Rotate around attractor */
+       FLOW_RIDE = 2,   /* Ride a trained bee */
+       FLOW_ZOOM = 4,   /* Zoom in and out */
+       FLOW_2D = 8,     /* Allow 2D attractors */
+       FLOW_BOX = 16,    /* Compute a box around the attractor */
+       FLOW_SLOW = 32,   /* Some bees are slower (and have antifreeze) */
+       FLOW_FREEZE = 64, /* Freeze some of the bees in action */
+} FlowMode;
+
+#define FLOW_DEFAULT (FLOW_ROTATE|FLOW_RIDE|FLOW_ZOOM|FLOW_2D|\
+               FLOW_BOX|FLOW_SLOW|FLOW_FREEZE)
 
 typedef struct {
        int         width;
@@ -101,11 +131,15 @@ typedef struct {
        XSegment   *old_segs;   /* old bee lines */
        int         nold_segs;
        double      step;
+       double          slow;
+       double          slow_view;
        dvector     centre;             /* centre */
+       dvector         range;
        struct {
                double  depth;
                double  height;
        }           view;
+       dvector         circle[2]; /* POV that circles around the scene */
        dvector    *p[2];   /* bee positions x[time][bee#] */
        struct {
                double  theta;
@@ -115,6 +149,7 @@ typedef struct {
        }           tumble;
        dvector  (*ODE) (Par par, double x, double y, double z);
        Par         par;
+       FlowMode                mode; /* Mode of operation */
 } flowstruct;
 
 static flowstruct *flows = NULL;
@@ -174,13 +209,14 @@ Duffing(Par par, double x, double y, double z)
        return d;
 }
 
+void init_clip(flowstruct *sp);
+
 void
 init_flow(ModeInfo * mi)
 {
        flowstruct *sp;
        int         b;
        double      beemult = 1;
-       dvector     range;
        static int  allocated = 0;
 
        if (flows == NULL) {
@@ -191,6 +227,8 @@ init_flow(ModeInfo * mi)
        sp = &flows[MI_SCREEN(mi)];
 
        sp->count = 0;
+       sp->slow = 0.999;
+       sp->slow_view = 0.90;
 
        sp->width = MI_WIDTH(mi);
        sp->height = MI_HEIGHT(mi);
@@ -201,72 +239,94 @@ init_flow(ModeInfo * mi)
        sp->tumble.dphi = 0.001;
        sp->view.height = 0;
        sp->view.depth = 0; /* no perspective view */
+       sp->mode = 0;
+   if (get_boolean_resource ("rotate", "Boolean")) sp->mode |= FLOW_ROTATE;
+   if (get_boolean_resource ("ride", "Boolean")) sp->mode |= FLOW_RIDE;
+   if (get_boolean_resource ("zoom", "Boolean")) sp->mode |= FLOW_ZOOM;
+   if (get_boolean_resource ("allow2d", "Boolean")) sp->mode |= FLOW_2D;
+   if (get_boolean_resource ("slow", "Boolean")) sp->mode |= FLOW_SLOW;
+   if (get_boolean_resource ("freeze", "Boolean")) sp->mode |= FLOW_FREEZE;
+   if (get_boolean_resource ("box", "Boolean")) sp->mode |= FLOW_BOX;
+
+       b = (sp->mode & FLOW_2D) ? 5 : 3;
+       b = NRAND(b);
+
+       /* If more than one of rotate, ride and zoom are set, choose one */
+       if (b < 3) {
+               int num = 0, modes[3];
+
+               if (sp->mode & FLOW_ROTATE) modes[num++] = FLOW_ROTATE;
+               if (sp->mode & FLOW_RIDE) modes[num++] = FLOW_RIDE;
+               if (sp->mode & FLOW_ZOOM) modes[num++] = FLOW_ZOOM;
+
+               sp->mode &= ~(FLOW_ROTATE | FLOW_RIDE | FLOW_ZOOM);
 
-       switch (NRAND(8)) {
+               if (num) sp->mode |= modes[ NRAND(num) ];
+               else sp->mode |= FLOW_ZOOM;
+       }
+       
+       switch (b) {
        case 0:
                sp->view.depth = 10;
                sp->view.height = 0.2;
                beemult = 3;
-       case 1:
                sp->ODE = Lorentz;
                sp->step = 0.02;
                sp->size = 60;
                sp->centre.x = 0;
                sp->centre.y = 0;
                sp->centre.z = 24;
-               range.x = 5;
-               range.y = 5;
-               range.z = 1;
+               sp->range.x = 5;
+               sp->range.y = 5;
+               sp->range.z = 1;
                sp->par.a = 10 + balance_rand(5);
                sp->par.b = 28 + balance_rand(5);
                sp->par.c = 2 + balance_rand(1);
                break;
-       case 2:
+       case 1:
                sp->view.depth = 10;
                sp->view.height = 0.1;
                beemult = 4;
-       case 3:
                sp->ODE = Rossler;
                sp->step = 0.05;
                sp->size = 24;
                sp->centre.x = 0;
                sp->centre.y = 0;
                sp->centre.z = 3;
-               range.x = 4;
-               range.y = 4;
-               range.z = 7;
+               sp->range.x = 4;
+               sp->range.y = 4;
+               sp->range.z = 7;
                sp->par.a = 2 + balance_rand(1);
                sp->par.b = 0.2 + balance_rand(0.1);
                sp->par.c = 0.2 + balance_rand(0.1);
                break;
-       case 4:
+       case 2:
                sp->view.depth = 10;
                sp->view.height = 0.1;
                beemult = 3;
-       case 5:
                sp->ODE = RosslerCone;
                sp->step = 0.05;
                sp->size = 24;
                sp->centre.x = 0;
                sp->centre.y = 0;
                sp->centre.z = 3;
-               range.x = 4;
-               range.y = 4;
-               range.z = 4;
+               sp->range.x = 4;
+               sp->range.y = 4;
+               sp->range.z = 4;
                sp->par.a = 2;
                sp->par.b = 0.2;
                sp->par.c = 0.25 + balance_rand(0.09);
                break;
-       case 6:
+       case 3:
                sp->ODE = Birkhoff;
                sp->step = 0.04;
                sp->size = 2.6;
                sp->centre.x = 0;
                sp->centre.y = 0;
                sp->centre.z = 0;
-               range.x = 3;
-               range.y = 4;
-               range.z = 0;
+               sp->range.x = 3;
+               sp->range.y = 4;
+               sp->range.z = 0;
                sp->par.a = 10 + balance_rand(5);
                sp->par.b = 0.35 + balance_rand(0.25);
                sp->par.c = 1.57;
@@ -275,7 +335,7 @@ init_flow(ModeInfo * mi)
                sp->tumble.dtheta = 0;
                sp->tumble.dphi = 0;
                break;
-       case 7:
+       case 4:
        default:
                sp->ODE = Duffing;
                sp->step = 0.02;
@@ -283,9 +343,9 @@ init_flow(ModeInfo * mi)
                sp->centre.x = 0;
                sp->centre.y = 0;
                sp->centre.z = 0;
-               range.x = 20;
-               range.y = 20;
-               range.z = 0;
+               sp->range.x = 20;
+               sp->range.y = 20;
+               sp->range.z = 0;
                sp->par.a = 0.2 + balance_rand(0.1);
                sp->par.b = 27.0 + balance_rand(3.0);
                sp->par.c = 1.33;
@@ -297,6 +357,8 @@ init_flow(ModeInfo * mi)
                break;
        }
 
+       sp->view.depth *= 4;
+
        sp->beecount = beemult * MI_COUNT(mi);
        if (sp->beecount < 0)   /* random variations */ 
                sp->beecount = NRAND(-sp->beecount) + 1; /* Minimum 1 */
@@ -325,6 +387,7 @@ init_flow(ModeInfo * mi)
                        (void) free((void *) sp->p[1]);
                        sp->p[1] = NULL;
                }
+               allocated = sp->beecount;
        }
 
        /* Allocate memory. */
@@ -342,12 +405,204 @@ init_flow(ModeInfo * mi)
        /* Initialize point positions, velocities, etc. */
 
        for (b = 0; b < sp->beecount; b++) {
-               X(1, b) = X(0, b) = balance_rand(range.x);
-               Y(1, b) = Y(0, b) = balance_rand(range.y);
-               Z(1, b) = Z(0, b) = balance_rand(range.z);
+               X(1, b) = X(0, b) = balance_rand(sp->range.x);
+               Y(1, b) = Y(0, b) = balance_rand(sp->range.y);
+               Z(1, b) = Z(0, b) = balance_rand(sp->range.z);
+       }
+
+       init_clip(sp);
+
+}
+
+/* Clipping planes */
+#define PLANES 5
+static double plane_orig[][2][3] = {
+       /* X goes into screen, Y goes right, Z goes down(up?) */
+       /* {Normal}, {Point} */
+       { {1.0, 0, 0}, {0.01, 0, 0} },
+       { {1.0, 1.0, 0.0}, {0, 0, 0} },
+       { {1.0,-1.0, 0.0}, {0, 0, 0} },
+       { {1.0, 0.0, 1.0}, {0, 0, 0} },
+       { {1.0, 0.0,-1.0}, {0, 0, 0} }
+};
+static double plane[PLANES][2][3];
+static double plane_d[PLANES];
+
+#define BOX_P 32
+#define BOX_L 36
+#define MIN_BOX (3)
+#define MAX_BOX (MIN_BOX + BOX_L)
+/* Points that make up the box (normalized coordinates) */
+static double box_orig[][3] = {
+       {1,1,1},   /* 0 */
+       {1,1,-1},  /* 1 */
+       {1,-1,-1}, /* 2 */
+       {1,-1,1},  /* 3 */
+       {-1,1,1},  /* 4 */
+       {-1,1,-1}, /* 5 */
+       {-1,-1,-1},/* 6 */
+       {-1,-1,1}, /* 7 */
+       {1, .8, .8},
+       {1, .8,-.8},
+       {1,-.8,-.8},
+       {1,-.8, .8},
+       { .8,1, .8},
+       { .8,1,-.8},
+       {-.8,1,-.8},
+       {-.8,1, .8},
+       { .8, .8,1},
+       { .8,-.8,1},
+       {-.8,-.8,1},
+       {-.8, .8,1},
+       {-1, .8, .8},
+       {-1, .8,-.8},
+       {-1,-.8,-.8},
+       {-1,-.8, .8},
+       { .8,-1, .8},
+       { .8,-1,-.8},
+       {-.8,-1,-.8},
+       {-.8,-1, .8},
+       { .8, .8,-1},
+       { .8,-.8,-1},
+       {-.8,-.8,-1},
+       {-.8, .8,-1}
+};
+
+/* Container for scaled box points */
+static double box[BOX_P][3];
+
+/* Lines connecting the box dots */
+static double lines[0][2] = {
+       {0,1}, {1,2}, {2,3}, {3,0}, /* box */
+       {4,5}, {5,6}, {6,7}, {7,4},
+       {0,4}, {1,5}, {2,6}, {3,7},
+       {4+4,5+4}, {5+4,6+4}, {6+4,7+4}, {7+4,4+4},
+       {4+8,5+8}, {5+8,6+8}, {6+8,7+8}, {7+8,4+8},
+       {4+12,5+12}, {5+12,6+12}, {6+12,7+12}, {7+12,4+12},
+       {4+16,5+16}, {5+16,6+16}, {6+16,7+16}, {7+16,4+16},
+       {4+20,5+20}, {5+20,6+20}, {6+20,7+20}, {7+20,4+20},
+       {4+24,5+24}, {5+24,6+24}, {6+24,7+24}, {7+24,4+24},
+};
+       
+/* Boundaries of bees */
+double xmin, xmax;
+double ymin, ymax;
+double zmin, zmax;
+
+void init_clip(flowstruct *sp)
+{
+       int i;
+
+       /* Scale the planes to the screen. I had to invert the projection
+        * algorithms so that when projected they would be right at the edge of the
+        * screen. */
+       double width = sp->size/sp->view.depth/2;
+       double height = sp->size/sp->view.depth/2*sp->view.height/sp->view.height;
+       for (i = 0; i < PLANES; i++) {
+               /* Copy orig planes into planes, expanding <-> clippings */
+               plane[i][0][0] = plane_orig[i][0][0];
+               plane[i][0][1] = plane_orig[i][0][1] / width;
+               plane[i][0][2] = plane_orig[i][0][2] / height;
+               plane[i][1][0] = plane_orig[i][1][0];
+               plane[i][1][1] = plane_orig[i][1][1];
+               plane[i][1][2] = plane_orig[i][1][2];
+               
+               /* Calculate the 'd' part of 'ax + by + cz = d' */
+               plane_d[i] = - plane[i][0][0] * plane[i][1][0];
+               plane_d[i] -= plane[i][0][1] * plane[i][1][1];
+               plane_d[i] -= plane[i][0][2] * plane[i][1][2];
+       }
+       xmin = X(0, i); xmax = X(0,i);
+       ymin = Y(0, i); ymax = Y(0,i);
+       zmin = Z(0, i); zmax = Z(0,i);
+}
+
+/* Scale the box defined above to fit around all points */
+void create_box(flowstruct *sp)
+{
+       int i = MAX_BOX;
+       double xmid, ymid, zmid;
+       double xsize, ysize, zsize;
+       double size;
+
+       /* Count every 5th point for speed.. */
+       for (; i < sp->beecount; i += 5) {
+               if ( X(0,i) < xmin ) xmin = X(0, i);
+               else if ( X(0,i) > xmax ) xmax = X(0, i);
+               if ( Y(0,i) < ymin ) ymin = Y(0, i);
+               else if ( Y(0,i) > ymax ) ymax = Y(0, i);
+               if ( Z(0,i) < zmin ) zmin = Z(0, i);
+               else if ( Z(0,i) > zmax ) zmax = Z(0, i);
        }
+       xmid = (xmax+xmin)/2;
+       ymid = (ymax+ymin)/2;
+       zmid = (zmax+zmin)/2;
+       xsize = xmax - xmin;
+       ysize = ymax - ymin;
+       zsize = zmax - zmin;
+       size = xsize;
+       if (ysize> size) size = ysize;
+       if (zsize > size) size = zsize;
+       size /= 2;
+
+       /* Scale box */
+       for (i = 0; i < BOX_P; i++) {
+               box[i][0] = box_orig[i][0] * size + xmid;
+               box[i][1] = box_orig[i][1] * size + ymid;
+               box[i][2] = box_orig[i][2] * size + zmid;
+       }
+
 }
 
+/* Returns true if point is infront of the plane (rather than behind) */
+int infront_of(double x, double y, double z, int i)
+{
+       double sum = plane[i][0][0]*x + plane[i][0][1]*y + plane[i][0][2]*z + plane_d[i];
+       return sum >= 0.0;
+}
+
+/* Returns true if line was behind a clip plane, or clips the line */
+int clip(double *x1, double *y1, double *z1, double *x2, double *y2, double *z2)
+{
+       int i;
+       for (i = 0; i < PLANES; i++) {
+               double t;
+               double x, y, z; /* Intersection point */
+               double dx, dy, dz; /* line delta */
+               int front1, front2;
+               front1 = infront_of(*x1, *y1, *z1, i);
+               front2 = infront_of(*x2, *y2, *z2, i);
+               if (!front1 && !front2) return 1;
+               if (front1 && front2) continue;
+
+               dx = *x2 - *x1;
+               dy = *y2 - *y1;
+               dz = *z2 - *z1;
+
+               /* Find t in line equation */
+               t = ( plane_d[i] - 
+                               plane[i][0][0]*(*x1) - plane[i][0][1]*(*y1) - plane[i][0][2]*(*z1) ) 
+                               / 
+                       ( plane[i][0][0]*dx + plane[i][0][1]*dy + plane[i][0][2]*dz );
+
+               x = *x1 + dx * t;
+               y = *y1 + dy * t;
+               z = *z1 + dz * t;
+               /* Make point that was behind to be the intersect */
+               if (front2) {
+                       *x1 = x;
+                       *y1 = y;
+                       *z1 = z;
+               } else {
+                       *x2 = x;
+                       *y2 = y;
+                       *z2 = z;
+               }
+       }
+       return 0;
+}      
+
+
 void
 draw_flow(ModeInfo * mi)
 {
@@ -357,7 +612,14 @@ draw_flow(ModeInfo * mi)
        flowstruct *sp = &flows[MI_SCREEN(mi)];
        int         b, c, i;
        int         col, ix;
+       int                     new_view = 0;
        double      M[3][3]; /* transformation matrix */
+       double          step_view = sp->step;
+       double          step_bees = sp->step;
+       double          step_slow = sp->step;
+       double          pp, pc;
+
+       create_box(sp);
 
        if(!sp->view.depth){ /* simple 3D tumble */
                double      sint, cost, sinp, cosp;
@@ -382,30 +644,80 @@ draw_flow(ModeInfo * mi)
 
        MI_IS_DRAWN(mi) = True;
 
+       /* Calculate circling POV */
+       sp->circle[1] = sp->circle[0];
+       sp->circle[0].x = sp->size * 2 * sin(sp->count / 40.0) * (0.6 + 0.4 *cos(sp->count / 100.0));
+       sp->circle[0].y = sp->size * 2 * cos(sp->count / 40.0) * (0.6 + 0.4 *cos(sp->count / 100.0));
+       sp->circle[0].z = sp->size * 2 * sin(sp->count / 421.0);
+
+       if (sp->mode & FLOW_ROTATE)
+               pp = 0;
+       else if (sp->mode & FLOW_RIDE)
+               pp = 1;
+       else /* ZOOM */
+               /* Bistable oscillator to switch between the trained bee and the circler */
+               pp = -sin(sin(sin(cos(sp->count / 150.0)*M_PI/2)*M_PI/2)*M_PI/2) *0.5 + 0.5;
+       pc = 1 - pp;
+
+
+       /* Slow down or speed up the bees / view: */
+
+       /* exponentially accelerate towards zero */
+       sp->slow = sp->slow * 1.005 - 0.005; 
+       if (sp->slow < 0) sp->slow = 0;
+
+       sp->slow_view = sp->slow_view * 1.005 - 0.005;
+       if (sp->slow_view < 0) sp->slow_view = 0;
+
+       /* View speeds up, slow bees slow to half speed, and other bees will
+        * actually stop */
+       step_view = step_view * (1.01 - sp->slow_view * sp->slow_view) * 0.2;
+       step_slow = step_slow * (sp->slow + 0.5) / 2;
+       if (sp->mode & FLOW_SLOW)
+               step_bees = step_bees * sp->slow;
+       else
+               step_bees = step_slow;
+
        /* <=- Bees -=> */
        for (b = 0; b < sp->beecount; b++) {
+               /* Calc if this bee is slow. Note normal bees are exempt from
+                * calculations once they slow to half speed, so that they remain as
+                * frozen lines rather than barely-visible points */
+               int slow = ((b & 0x7) == 0);
+               if ( !(sp->mode & FLOW_FREEZE) ) slow = 1;
                /* Age the arrays. */
-               X(1, b) = X(0, b);
-               Y(1, b) = Y(0, b);
-               Z(1, b) = Z(0, b);
-
-               /* 2nd order Kunge Kutta */
-               {
-                       dvector     k1, k2;
-
-                       k1 = sp->ODE(sp->par, X(1, b), Y(1, b), Z(1, b));
-                       k1.x *= sp->step;
-                       k1.y *= sp->step;
-                       k1.z *= sp->step;
-                       k2 = sp->ODE(sp->par, X(1, b) + k1.x, Y(1, b) + k1.y, Z(1, b) + k1.z);
-                       k2.x *= sp->step;
-                       k2.y *= sp->step;
-                       k2.z *= sp->step;
-                       X(0, b) = X(1, b) + (k1.x + k2.x) / 2.0;
-                       Y(0, b) = Y(1, b) + (k1.y + k2.y) / 2.0;
-                       Z(0, b) = Z(1, b) + (k1.z + k2.z) / 2.0;
+               if (b < 2 || sp->slow > 0.5 || slow) {
+                       X(1, b) = X(0, b);
+                       Y(1, b) = Y(0, b);
+                       Z(1, b) = Z(0, b);
+
+                       /* 2nd order Kunge Kutta */
+                       {
+                               dvector     k1, k2;
+                               double          step;
+
+                               if (b == 0 || b == 1) {
+                                       step = step_view;
+                               } else if (slow) {
+                                       step = step_slow;
+                               } else {
+                                       step = step_bees;
+                               }
+                               k1 = sp->ODE(sp->par, X(1, b), Y(1, b), Z(1, b));
+                               k1.x *= step;
+                               k1.y *= step;
+                               k1.z *= step;
+                               k2 = sp->ODE(sp->par, X(1, b) + k1.x, Y(1, b) + k1.y, Z(1, b) + k1.z);
+                               k2.x *= step;
+                               k2.y *= step;
+                               k2.z *= step;
+                               X(0, b) = X(1, b) + (k1.x + k2.x) / 2.0;
+                               Y(0, b) = Y(1, b) + (k1.y + k2.y) / 2.0;
+                               Z(0, b) = Z(1, b) + (k1.z + k2.z) / 2.0;
+                       }
                }
 
+
                /* Colour according to bee */
                col = b % (MI_NPIXELS(mi) - 1);
                ix = col * sp->beecount + sp->cnsegs[col];
@@ -414,11 +726,12 @@ draw_flow(ModeInfo * mi)
 
                if(sp->view.depth) { /* perspective view has special points */
                        if(b==0){ /* point of view */
-                               sp->centre.x=X(0, b);
-                               sp->centre.y=Y(0, b);
-                               sp->centre.z=Z(0, b);
+                               sp->centre.x = X(0, b) * pp + sp->circle[0].x * pc;
+                               sp->centre.y = Y(0, b) * pp + sp->circle[0].y * pc;
+                               sp->centre.z = Z(0, b) * pp + sp->circle[0].z * pc;
+                               /*printf("center: (%3.3f,%3.3f,%3.3f)\n",sp->centre.x, sp->centre.y, sp->centre.z);*/
                        }else if(b==1){ /* neighbour: used to compute local axes */
-                               double x[3], p[3], x2=0, xp=0;
+                               double x[3], p[3], x2=0, xp=0, C[3][3];
                                int j;
 
                                /* forward */                           
@@ -456,6 +769,49 @@ draw_flow(ModeInfo * mi)
                                Y(0, 1)=Y(0, 0)+M[1][1];
                                Z(0, 1)=Z(0, 0)+M[1][2];
 
+                               /* Look at trained bee into C matrix */
+                               /* forward */                           
+                               x[0] = 0 - sp->circle[0].x;
+                               x[1] = 0 - sp->circle[0].y;
+                               x[2] = 0 - sp->circle[0].z;
+                       
+                               /* neighbour */
+                               p[0] = sp->circle[0].x - sp->circle[1].x;
+                               p[1] = sp->circle[0].y - sp->circle[1].y;
+                               p[2] = sp->circle[0].z - sp->circle[1].z;
+
+                               for(i=0; i<3; i++){
+                                       x2+= x[i]*x[i];    /* X . X */
+                                       xp+= x[i]*p[i];    /* X . P */
+                                       C[0][i] = x[i];    /* X */
+                               }
+
+                               for(i=0; i<3; i++)               /* (X x P) x X */
+                                       C[1][i] = x2*p[i] - xp*x[i]; /* == (X . X) P - (X . P) X */
+                               
+                               C[2][0] =  x[1]*p[2] - x[2]*p[1]; /* X x P */
+                               C[2][1] = -x[0]*p[2] + x[2]*p[0];
+                               C[2][2] =  x[0]*p[1] - x[1]*p[0];
+
+                               /* normalise axes */
+                               for(j=0; j<3; j++){
+                                       double A=0;
+                                       for(i=0; i<3; i++) A+=C[j][i]*C[j][i]; /* sum squares */
+                                       A=sqrt(A);
+                                       for(i=0; i<3; i++) C[j][i]/=A;
+                               }
+
+                               /* Interpolate between Center and Trained Bee matrices */
+                               /* This isn't very accurate and leads to weird transformations
+                                * (shearing, etc), but it works. Besides, sometimes they look
+                                * cool :) */
+                               pp = pp * pp; /* Don't follow bee's direction until very close */
+                               pc = 1 - pp;
+                               for (i = 0; i < 3; i++)
+                                       for (j = 0; j < 3; j++)
+                                               M[i][j] = M[i][j] * pp + C[i][j] * pc;
+                               
+
 #if 0  /* display local axes for testing */
                                X(1, b)=X(0, 0);
                                Y(1, b)=Y(0, 0);
@@ -475,9 +831,18 @@ draw_flow(ModeInfo * mi)
                                Y(1, b)=Y(0, 0);
                                Z(1, b)=Z(0, 0);
 #endif
+                       /* Draw a box... */
                        }
                }
+                       if (b >= MIN_BOX && b < MAX_BOX) {
+                               int p1 = lines[b-MIN_BOX][0];
+                               int p2 = lines[b-MIN_BOX][1];
+                               X(0, b) = box[p1][0]; Y(0, b) = box[p1][1]; Z(0, b) = box[p1][2];
+                               X(1, b) = box[p2][0]; Y(1, b) = box[p2][1]; Z(1, b) = box[p2][2];
+                       }
+               
                
+#if 0  /* Original code */
                for(i=0; i<2; i++){
                        double x=X(i,b)-sp->centre.x;
                        double y=Y(i,b)-sp->centre.y;
@@ -507,7 +872,58 @@ draw_flow(ModeInfo * mi)
                }
                if(i == 2) /* both assigned */
                        sp->cnsegs[col]++;
-    }
+#else  
+               /* Chalky's code w/ clipping */
+               if (b < ((sp->mode & FLOW_BOX) ? 2 : MAX_BOX))
+                       continue;
+               do {
+                       double x1=X(0,b)-sp->centre.x;
+                       double y1=Y(0,b)-sp->centre.y;
+                       double z1=Z(0,b)-sp->centre.z;
+                       double X1=M[0][0]*x1 + M[0][1]*y1 + M[0][2]*z1;
+                       double Y1=M[1][0]*x1 + M[1][1]*y1 + M[1][2]*z1;
+                       double Z1=M[2][0]*x1 + M[2][1]*y1 + M[2][2]*z1+sp->view.height;
+                       double absx1, absy1;                            
+                       double x2=X(1,b)-sp->centre.x;
+                       double y2=Y(1,b)-sp->centre.y;
+                       double z2=Z(1,b)-sp->centre.z;
+                       double X2=M[0][0]*x2 + M[0][1]*y2 + M[0][2]*z2;
+                       double Y2=M[1][0]*x2 + M[1][1]*y2 + M[1][2]*z2;
+                       double Z2=M[2][0]*x2 + M[2][1]*y2 + M[2][2]*z2+sp->view.height;
+                       double absx2, absy2;                            
+                       if(sp->view.depth){
+                               /* Need clipping if: is part of box, or close to viewer */
+                               if ( (b >= MIN_BOX && b < MAX_BOX) || X1 <= 0.1 || X2 < 0.1) 
+                                       if (clip(&X1, &Y1, &Z1, &X2, &Y2, &Z2))
+                                               break;
+                               if (X1 <= 0 || X2 <= 0) break;
+                               absx1=SCALE_X(sp->view.depth*Y1/X1);
+                               absy1=SCALE_Y(sp->view.depth*Z1/X1);
+                               if(absx1 < -sp->width || absx1 > 2*sp->width ||
+                                  absy1 < -sp->height || absy1 > 2*sp->height)
+                                       break;
+                               absx2=SCALE_X(sp->view.depth*Y2/X2);
+                               absy2=SCALE_Y(sp->view.depth*Z2/X2);
+                               if(absx2 < -sp->width || absx2 > 2*sp->width ||
+                                  absy2 < -sp->height || absy2 > 2*sp->height)
+                                       break;
+                       }else{
+                               absx1=SCALE_X(X1);
+                               absy1=SCALE_Y(Y1);
+                               absx2=SCALE_X(X2);
+                               absy2=SCALE_Y(Y2);
+                       }
+
+                       sp->csegs[ix].x1 = (short) absx1;
+                       sp->csegs[ix].y1 = (short) absy1;
+                       sp->csegs[ix].x2 = (short) absx2;
+                       sp->csegs[ix].y2 = (short) absy2;
+
+                       sp->cnsegs[col]++;
+               } while (0);
+#endif
+       }
+
        if (sp->count) { /* erase */
                XSetForeground(display, gc, MI_BLACK_PIXEL(mi));
                XDrawSegments(display, window, gc, sp->old_segs, sp->nold_segs);
@@ -534,6 +950,23 @@ draw_flow(ModeInfo * mi)
 
        if (++sp->count > MI_CYCLES(mi)) /* pick a new flow */
                init_flow(mi);
+
+       if (sp->count % (MI_CYCLES(mi)/4) == 0) { /* pick a new view */
+               new_view = 0; /* change to 1 .. */
+       }
+
+       if (X(0, 0) < xmin*2 || X(0, 0) > xmax*2) new_view = 1;
+       if (Y(0, 0) < ymin*2 || Y(0, 0) > ymax*2) new_view = 1;
+       if (Z(0, 0) < zmin*2 || Z(0, 0) > zmax*2) new_view = 1;
+
+       if (new_view) {
+               for (b = 0; b < 2; b++) {
+                       X(1, b) = X(0, b) = balance_rand(sp->range.x*4);
+                       Y(1, b) = Y(0, b) = balance_rand(sp->range.y*4);
+                       Z(1, b) = Z(0, b) = balance_rand(sp->range.z*4);
+               }
+               sp->slow_view = 0.90;
+       }
 }
 
 void
@@ -566,3 +999,29 @@ refresh_flow(ModeInfo * mi)
 {
        MI_CLEARWINDOW(mi);
 }
+
+XrmOptionDescRec flow_options[] =
+{
+       {"-rotate",  ".rotate", XrmoptionSepArg, 0},
+       {"-ride",  ".ride", XrmoptionSepArg, 0},
+       {"-zoom",  ".zoom", XrmoptionSepArg, 0},
+       {"-box",  ".box", XrmoptionSepArg, 0},
+       {"-slow",  ".slow", XrmoptionSepArg, 0},
+       {"-freeze",  ".freeze", XrmoptionSepArg, 0},
+       {"-allow2d",  ".allow2d", XrmoptionSepArg, 0},
+  { 0, 0, 0, 0 }
+};
+
+/*
+char*        defaults[] =
+{
+       "*rotate:         True",
+       "*ride:           True",
+       "*zoom:           True",
+       "*allow2d:        True",
+       "*box:            True",
+       "*slow:           True",
+       "*freeze:         True",
+  0
+};
+       */
index 40edf41b58bf9e8dfdc310585680c9b963d037a2..9d22778fb87ac6d5c4d300bc186ad416ab5a8a79 100644 (file)
@@ -1,6 +1,10 @@
 /******************************************************************************
  * [ maze ] ...
  *
+ * modified:  [ 1-04-00 ]  Johannes Keukelaar <johannes@nada.kth.se>
+ *              Added -ignorant option (not the default) to remove knowlege
+ *              of the direction in which the exit lies.
+ *
  * modified:  [ 6-28-98 ]  Zack Weinberg <zack@rabi.phys.columbia.edu>
  *
  *              Made the maze-solver somewhat more intelligent.  There are
@@ -159,7 +163,7 @@ static GC   gc, cgc, tgc, sgc, ugc, logo_gc, erase_gc;
 static Pixmap  logo_map;
 
 static int     x = 0, y = 0, restart = 0, stop = 1, state = 1, max_length;
-static int      sync_p, bridge_p;
+static int      sync_p, bridge_p, ignorant_p;
 
 static int
 check_events (void)                        /* X event handler [ rhess ] */
@@ -1434,44 +1438,60 @@ solve_maze (void)                     /* solve it with graphical feedback */
        
        if(!ways)
            goto backtrack;
-      
-       x = path[i].x - start_x;
-       y = path[i].y - start_y;
-       /* choice one */
-       if(abs(y) <= abs(x))
-           dir = (x > 0) ? WALL_LEFT : WALL_RIGHT;
-       else
-           dir = (y > 0) ? WALL_TOP : WALL_BOTTOM;
-       
-       if(dir & ways)
-           goto found;
-       
-       /* choice two */
-       switch(dir)
-       {
-       case WALL_LEFT:
-       case WALL_RIGHT:
-           dir = (y > 0) ? WALL_TOP : WALL_BOTTOM; break;
-       case WALL_TOP:
-       case WALL_BOTTOM:
-           dir = (x > 0) ? WALL_LEFT : WALL_RIGHT;
-       }
-       
-       if(dir & ways)
-           goto found;
-       
-       /* choice three */
-       
-       dir = (dir << 2 & WALL_ANY) | (dir >> 2 & WALL_ANY);
-       if(dir & ways)
-           goto found;
-       
-       /* choice four */
-       dir = ways;
-       if(!dir)
-           goto backtrack;
 
-    found:
+       if (!ignorant_p)
+         {
+           x = path[i].x - start_x;
+           y = path[i].y - start_y;
+           /* choice one */
+           if(abs(y) <= abs(x))
+             dir = (x > 0) ? WALL_LEFT : WALL_RIGHT;
+           else
+             dir = (y > 0) ? WALL_TOP : WALL_BOTTOM;
+           
+           if(dir & ways)
+             goto found;
+           
+           /* choice two */
+           switch(dir)
+             {
+             case WALL_LEFT:
+             case WALL_RIGHT:
+               dir = (y > 0) ? WALL_TOP : WALL_BOTTOM; break;
+             case WALL_TOP:
+             case WALL_BOTTOM:
+               dir = (x > 0) ? WALL_LEFT : WALL_RIGHT;
+             }
+           
+           if(dir & ways)
+             goto found;
+           
+           /* choice three */
+           
+           dir = (dir << 2 & WALL_ANY) | (dir >> 2 & WALL_ANY);
+           if(dir & ways)
+             goto found;
+           
+           /* choice four */
+           dir = ways;
+           if(!dir)
+             goto backtrack;
+           
+         found:
+         }
+       else
+         {
+           if(ways&WALL_TOP)
+             dir = WALL_TOP;
+           else if(ways&WALL_LEFT)
+             dir = WALL_LEFT;
+           else if(ways&WALL_BOTTOM)
+             dir = WALL_BOTTOM;
+           else if(ways&WALL_RIGHT)
+             dir = WALL_RIGHT;
+           else
+             goto backtrack;
+         }
        bt = 0;
        ways &= ~dir;  /* tried this one */
        
@@ -1498,7 +1518,7 @@ solve_maze (void)                     /* solve it with graphical feedback */
            return;
        }
 
-       if(!bt)
+       if(!bt && !ignorant_p)
            find_dead_regions();
        bt = 1;
        from = path[i-1].dir;
@@ -1565,6 +1585,8 @@ char *defaults[] = {
 };
 
 XrmOptionDescRec options[] = {
+  { "-ignorant",        ".ignorant",    XrmoptionNoArg, "True" },
+  { "-no-ignorant",     ".ignorant",    XrmoptionNoArg, "False" },
   { "-grid-size",      ".gridSize",    XrmoptionSepArg, 0 },
   { "-solve-delay",    ".solveDelay",  XrmoptionSepArg, 0 },
   { "-pre-delay",      ".preDelay",    XrmoptionSepArg, 0 },
@@ -1600,6 +1622,7 @@ screenhack(Display *display, Window window)
   generator = get_integer_resource("generator", "Integer");
   max_length = get_integer_resource("maxLength", "Integer");
   bridge_p = get_boolean_resource("bridge", "Boolean");
+  ignorant_p = get_boolean_resource("ignorant", "Boolean");
 
   if (size < 2) size = 7 + (random () % 30);
   grid_width = grid_height = size;
index e586f897ccb4ba60e52cd70fabb6ab05a698135c..0b8f7900076873a8efa05b5124eebeaf7fda0643 100644 (file)
@@ -1,3 +1,16 @@
+.de EX         \"Begin example
+.ne 5
+.if n .sp 1
+.if t .sp .5
+.nf
+.in +.5i
+..
+.de EE
+.fi
+.in -.5i
+.if n .sp 1
+.if t .sp .5
+..
 .TH XScreenSaver 1 "30-Oct-99" "X Version 11"
 .SH NAME
 phosphor - simulates an old terminal with long-sustain phosphor
@@ -61,6 +74,12 @@ In other words, programs like
 will work, but programs like
 .BR top (1)
 won't.
+
+Here's a good trick, to get phosphor to display recent web search terms:
+.EX
+phosphor -program \\
+  'wget -qO- http://webcrawler.com/cgi-bin/SearchTicker'
+.EE
 .SH ENVIRONMENT
 .PP
 .TP 8
@@ -71,6 +90,7 @@ to get the default host and display number.
 to get the name of a resource file that overrides the global resources
 stored in the RESOURCE_MANAGER property.
 .SH SEE ALSO
+.BR wget (1),
 .BR X (1),
 .BR xscreensaver (1)
 .SH COPYRIGHT
index a82da03ef9b1803856424d1a3e80c8a7e5c5439d..5d9fe9cd1592bda5623a10c5408445aa8cdc9a11 100755 (executable)
@@ -176,6 +176,11 @@ grab() {
     #   streamer -o $tmp_ppm1
     #
 
+    # James Isaacs says this works for the ATI video capture card:
+    #
+    #   atitv snap $tmp_ppm1
+    #
+
   else
     echo "$0: don't know how to grab video on this OS." >&2
     clean2
index bf46fffd6114cfeb396eae6db5f9c93efb8a8623..880dfb933f6125a3d9494783765932e19616a830 100755 (executable)
@@ -27,7 +27,7 @@ require POSIX;
 use Fcntl ':flock'; # import LOCK_* constants
 
 
-my $version = q{ $Revision: 1.43 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
+my $version = q{ $Revision: 1.44 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
 my $copyright = "WebCollage $version, Copyright (c) 1999" .
     " Jamie Zawinski <jwz\@jwz.org>\n" .
     "            http://www.jwz.org/xscreensaver/\n";
@@ -40,9 +40,9 @@ my $image_randomizer_1 = "http://www.altavista.com/query" .
                          "?mmdo=3" .
                          "&nbq=12" .
                          "&stype=simage" .
-                         "&oart=1" .
-                         "&obw=1" .
-                         "&oshape=0" .
+                         "&iclr=1" .
+                         "&ibw=1" .
+                         "&iexc=1" .
                          "&what=web" .
                          "&q=";
 my $image_randomizer_2 = "http://www.hotbot.com/?clickSrc=search" .
@@ -565,6 +565,10 @@ sub random_word {
             $word = <IN>;   # toss partial line
             $word = <IN>;   # keep next line
         }
+       if (!$word) {
+          seek( IN, 0, 0 );
+          $word = <IN>;
+       }
         close (IN);
     }
 
@@ -580,6 +584,10 @@ sub random_word {
     $word =~ s/izes$/ize/;
     $word =~ tr/A-Z/a-z/;
 
+    if ( $word =~ s/[ \t\n\r]/\+/g ) {  # convert intra-word spaces to "+".
+      $word = "\%22$word\%22";         # And put quotes (%22) around it.
+    }
+
     return $word;
 }
 
index 9d0883c50167cdc8fff486fa0c0939bc7eeac013..2e569e07cb959ea3be9ae81dca8dbcd3271d45c7 100644 (file)
@@ -70,6 +70,8 @@
 # endif /* VMS */
 #endif /* HAVE_XMU */
 
+#include "images/bob.xbm"
+
 #define MAX_VAL             255
 
 static Display         *display;
@@ -603,9 +605,33 @@ loadBitmap(int *w, int *h)
 {
   char *bitmap_name = get_string_resource ("bitmap", "Bitmap");
 
-  if (bitmap_name &&
-      *bitmap_name &&
-      !!strcmp(bitmap_name, "none"))
+  if (!bitmap_name ||
+      !*bitmap_name ||
+      !strcmp(bitmap_name, "none"))
+    ;
+  else if (!strcmp(bitmap_name, "(default)"))   /* use the builtin */
+    {
+      XImage *ximage;
+      unsigned char *result, *o;
+      char *bits = (char *) malloc (sizeof(bob_bits));
+      int x, y;
+      int scale = ((width > bob_width * 11) ? 2 : 1);
+      memcpy (bits, bob_bits, sizeof(bob_bits));
+      ximage = XCreateImage (display, visual, 1, XYBitmap, 0, bits,
+                             bob_width, bob_height, 8, 0);
+      ximage->byte_order = LSBFirst;
+      ximage->bitmap_bit_order = LSBFirst;
+      *w = ximage->width * scale;
+      *h = ximage->height * scale;
+      o = result = (unsigned char *) malloc ((*w * scale) * (*h * scale));
+      for (y = 0; y < *h; y++)
+        for (x = 0; x < *w; x++)
+          *o++ = (XGetPixel(ximage, x/scale, y/scale) ? 255 : 0);
+       
+      return result;
+    }
+  else  /* load a bitmap file */
     {
 #ifdef HAVE_XPM
       XpmInfo xpm_info = { 0, };
@@ -731,7 +757,7 @@ char *progclass = "XFlame";
 char *defaults [] = {
   ".background:     black",
   ".foreground:     #FFAF5F",
-  "*bitmap:         none",
+  "*bitmap:         (default)",
   "*bitmapBaseline: 20",
   "*delay:          10000",
   "*hspread:        30",
diff --git a/hacks/xflame.man b/hacks/xflame.man
new file mode 100644 (file)
index 0000000..15a553d
--- /dev/null
@@ -0,0 +1,63 @@
+.TH XScreenSaver 1 "27-Feb-00" "X Version 11"
+.SH NAME
+xflame - draws animated flames
+.SH SYNOPSIS
+.B xflame
+[\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-install]
+[\-visual \fIvisual\fP] [\-hspread \fIint\fP] [\-vspread \fIint\fP]
+[\-residual \fIint\fP] [\-variance \fIint\fP] [\-vartrend \fIint\fP] 
+[\-bloom \| \-no\-bloom] 
+[\-bitmap \fIxbm\-file\fP] [\-baseline \fIint\fP]
+.SH DESCRIPTION
+The \fIxflame\fP program draws animated flames across the bottom of the
+screen.  The flames occasionally flare up.  If a bitmap is specified,
+that image will float above the flames, burning.
+.SH OPTIONS
+.I phosphor
+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\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 \-bitmap \fIfilename\fP\fP
+Specifies the bitmap file to use (a monochrome XBM file.)
+The name "none" means not to use a bitmap at all.
+If unspecified, a built-in image will be used.
+.PP
+The other options are arcane.  If someone would care to document them,
+that would be great.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 1996-1999 by Carsten Haitzler.  Permission to use, copy,
+modify, distribute, and sell this software and its documentation for
+any purpose is hereby granted without fee, provided that the above
+copyright notice appear in all copies and that both that copyright
+notice and this permission notice appear in supporting documentation.
+No representations are made about the suitability of this software for
+any purpose.  It is provided "as is" without express or implied
+warranty.
+.SH AUTHOR
+Primarily written by Carsten Haitzler <raster@redhat.com>.
+Modified over the years by Rahul Jain <rahul@rice.edu>, 
+Daniel Zahn <stumpy@religions.com>, and Jamie Zawinski <jwz@jwz.org>.
index fb515f6de6ce308d63f05b7f2f9edcd7d1be9f72..4d838bfd4e61de09c7dc10603a44706f7e4c66fc 100644 (file)
@@ -241,6 +241,12 @@ void xteevee_Static(Display* x_Disp,Window x_Win,XWindowAttributes* x_WinAttr,
                 x_Gc[color_Index]);
                XFreeGC(x_Disp,x_Gc[color_Index]);
        }
+
+       for (tile_Index = 0;tile_Index < XTEEVEE_STATIC_TILE_COUNT;
+        tile_Index++)
+       {
+               XFreePixmap(x_Disp, tile_Tile[tile_Index]);
+       }
 }
 
 /* Vertical Roll =========================================================== */
index c2c8de7b9da1520d9deed5873a910697cd02843f..851b5b490dfce2006d43377b00173e249bb0d3c9 100644 (file)
@@ -476,6 +476,54 @@ random_squares(Display * dpy, Window window, GC gc,
   free(squares);
 }
 
+/* I first saw something like this, albeit in reverse, in an early Tetris
+   implementation for the Mac.
+    -- Torbjörn Andersson <torbjorn@dev.eurotime.se>
+ */
+
+static void
+slide_lines (Display * dpy, Window window, GC gc, int width, int height,
+             int delay, int granularity)
+{
+  int slide_old_x, slide_new_x, clear_x;
+  int x, y, dx, dy;
+
+  /* This might need some tuning. The idea is to get sensible values no
+     matter what the size of the window.
+
+     Everything moves at constant speed. Should it accelerate instead? */
+
+  granularity *= 2;
+
+  dy = MAX (1, height / granularity);
+  dx = MAX (1, width / 100);
+
+  for (x = 0; x < width; x += dx)
+    {
+      for (y = 0; y < height; y += dy)
+       {
+         if ((y / dy) & 1)
+           {
+             slide_old_x = x;
+             slide_new_x = x + dx;
+             clear_x = x;
+           }
+         else
+           {
+             slide_old_x = dx;
+             slide_new_x = 0;
+             clear_x = width - x - dx;
+           }
+
+         XCopyArea (dpy, window, window, gc, slide_old_x, y, width - x - dx,
+                    dy, slide_new_x, y);
+         XClearArea (dpy, window, clear_x, y, dx, dy, False);
+       }
+
+      XSync(dpy, False);
+      usleep(delay * 3);
+    }
+}
 
 static Eraser erasers[] = {
   random_lines,
@@ -488,6 +536,7 @@ static Eraser erasers[] = {
   fizzle,
   random_squares,
   spiral,
+  slide_lines,
 };
 
 
index 2281a99f56c8bf08053f9b16be121c09b1047103..a3dc37e39e83403dd1e07928cc8e30311b0c31b8 100644 (file)
@@ -1,2 +1,2 @@
 static const char screensaver_id[] =
-       "@(#)xscreensaver 3.23 (30-Jan-00), by Jamie Zawinski (jwz@jwz.org)";
+       "@(#)xscreensaver 3.24 (03-Apr-2000), by Jamie Zawinski (jwz@jwz.org)";
index 53c873743e5df14fee0527c1f1af158c72129aec..e04d2cb9f0a80704c07862abe50e75d05c0b5eb4 100644 (file)
@@ -1,7 +1,7 @@
 Begin3
 Title:          xscreensaver
-Version:        3.23
-Entered-date:   30JAN00
+Version:        3.24
+Entered-date:   03APR00
 Description:    A modular screen saver and locker for the X Window System.
                 Highly customizable: allows the use of any program that
                 can draw on the root window as a display mode.
@@ -10,15 +10,15 @@ Keywords:       screen saver, screen lock, lock, xlock, X11
 Author:         jwz@jwz.org (Jamie Zawinski)
 Maintained-by:  jwz@jwz.org (Jamie Zawinski)
 Primary-site:   http://www.jwz.org/xscreensaver/
-                1272K xscreensaver-3.23.tar.gz
+                1284K xscreensaver-3.24.tar.gz
                 40K  xscreensaver.README
                 1K   xscreensaver.lsm
 Alternate-site: sunsite.unc.edu /pub/Linux/X11/screensavers/
-                1272K xscreensaver-3.23.tar.gz
+                1284K xscreensaver-3.24.tar.gz
                 40K  xscreensaver.README
                 1K   xscreensaver.lsm
 Alternate-site: ftp.x.org /contrib/applications/
-                1272K xscreensaver-3.23.tar.gz
+                1284K xscreensaver-3.24.tar.gz
                 40K  xscreensaver.README
                 1K   xscreensaver.lsm
 Platforms:      Linux, Irix, SunOS, Solaris, HPUX, AIX, FreeBSD, NetBSD,
index b8e4dfb0d1da8a9cd44a2fc102fcafd346f7a5db..6dc9021048af66666770df16d160589e5b2a4908 100644 (file)
@@ -1,5 +1,5 @@
 %define        name    xscreensaver
-%define        version 3.23
+%define        version 3.24
 %define        release 1
 %define        serial  1
 %define        prefix  /usr/X11R6