[bug#42056] gnu: Add xloadimage.
diff mbox series

Message ID 20200626095606.29923-1-brice@waegenei.re
State New
Headers show
Series
  • [bug#42056] gnu: Add xloadimage.
Related show

Checks

Context Check Description
cbaines/comparison success View comparision
cbaines/git branch success View Git branch
cbaines/applying patch success View Laminar job

Commit Message

Brice Waegeneire June 26, 2020, 9:56 a.m. UTC
* gnu/packages/xorg.scm (xloadimage): New variable.
* gnu/packages/patches/xloadimage-debian-series-25.patch: New file …
* gnu/local.mk (dist_patch_DATA): … add it.
---
 gnu/local.mk                                  |    1 +
 .../patches/xloadimage-debian-series-25.patch | 7665 +++++++++++++++++
 gnu/packages/xorg.scm                         |   68 +
 3 files changed, 7734 insertions(+)
 create mode 100644 gnu/packages/patches/xloadimage-debian-series-25.patch

Comments

Ludovic Courtès June 27, 2020, 5:12 p.m. UTC | #1
Hi Brice,

Brice Waegeneire <brice@waegenei.re> skribis:

> * gnu/packages/xorg.scm (xloadimage): New variable.
> * gnu/packages/patches/xloadimage-debian-series-25.patch: New file …
> * gnu/local.mk (dist_patch_DATA): … add it.

[...]

> +++ b/gnu/packages/patches/xloadimage-debian-series-25.patch
> @@ -0,0 +1,7665 @@
> +Combined patches from Debian: https://sources.debian.org/patches/xloadimage/4.1-25/

We should keep ’em separated, for clarity.

However:

> +Index: xloadimage.4.1.old/Makefile.in
> +===================================================================
> +--- /dev/null
> ++++ xloadimage.4.1.old/Makefile.in

[...]

> +--- /dev/null
> ++++ xloadimage.4.1.old/configure
> +@@ -0,0 +1,2476 @@
> ++#! /bin/sh
> ++
> ++# Guess values for system-dependent variables and create Makefiles.
> ++# Generated automatically using autoconf version 2.13 
> ++# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.

This adds an Autoconf-generated ‘configure’ file.  IOW, it seems we’re
adding a complete build system that’s not available upstream.

It seems to me that it’s too much.  It would be okay to add a couple of
Makefile.in and a minimalist ‘configure.ac’, if they’re small, and from
there to run the bootstrap phase.

It would be better to try and use upstream’s build system though.

Thoughts?

Ludo’.

Patch
diff mbox series

diff --git a/gnu/local.mk b/gnu/local.mk
index b3aaeadf1d..45eb09d9f8 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1622,6 +1622,7 @@  dist_patch_DATA =						\
   %D%/packages/patches/xf86-video-voodoo-pcitag.patch		\
   %D%/packages/patches/xfce4-panel-plugins.patch		\
   %D%/packages/patches/xfce4-settings-defaults.patch		\
+  %D%/packages/patches/xloadimage-debian-series-25.patch	\
   %D%/packages/patches/xplanet-1.3.1-cxx11-eof.patch		\
   %D%/packages/patches/xplanet-1.3.1-libdisplay_DisplayOutput.cpp.patch	\
   %D%/packages/patches/xplanet-1.3.1-libimage_gif.c.patch	\
diff --git a/gnu/packages/patches/xloadimage-debian-series-25.patch b/gnu/packages/patches/xloadimage-debian-series-25.patch
new file mode 100644
index 0000000000..593de65883
--- /dev/null
+++ b/gnu/packages/patches/xloadimage-debian-series-25.patch
@@ -0,0 +1,7665 @@ 
+Combined patches from Debian: https://sources.debian.org/patches/xloadimage/4.1-25/
+
+Index: xloadimage.4.1.old/Makefile.in
+===================================================================
+--- /dev/null
++++ xloadimage.4.1.old/Makefile.in
+@@ -0,0 +1,57 @@
++#
++# Makefile for autoconf tutorial
++#
++
++CC = @CC@
++DEFS = @DEFS@ -DSYSPATHFILE=\"/etc/X11/Xloadimage\"
++CFLAGS = @CFLAGS@
++XLIB = @X_LIBS@ -lX11 @X_EXTRA_LIBS@
++LDFLAGS = @LDFLAGS@
++LIBS = @LIBS@
++CFLAGS += @CPPFLAGS@
++
++SRCS = bright.c clip.c cmuwmraster.c compress.c config.c \
++dither.c faces.c fbm.c fill.c gif.c halftone.c imagetypes.c img.c jpeg.c \
++mac.c mc_tables.c mcidas.c merge.c misc.c new.c niff.c options.c \
++pbm.c pcx.c pdsuncomp.c reduce.c rle.c rlelib.c root.c rotate.c \
++send.c smooth.c sunraster.c tiff.c undither.c value.c vff.c \
++vicar.c window.c xbitmap.c xloadimage.c xpixmap.c xwd.c zio.c zoom.c png.c
++
++OBJS = $(SRCS:.c=.o)
++PROG = xloadimage
++
++all: $(PROG) uufilter
++
++$(PROG): $(OBJS)
++	./build-info
++	$(CC) $(CFLAGS) -c $(DEFS) build.c 
++	$(CC) -o $@ $(OBJS) build.o $(LDFLAGS) $(XLIB) $(LIBS)
++
++uufilter: uufilter.c
++	$(CC) $(CFLAGS) $(DEFS) uufilter.c -o $@
++
++.c.o: config.h image.h
++	$(CC) $(CFLAGS) -c $(DEFS) $<
++
++build.c:
++	./build-info
++
++clean:
++	rm -f autoconfig build.c err
++#	cd jpeg ; make clean
++#	cd tiff ; make clean
++	rm -f *.o *~ xloadimage uufilter autoconfig libconfig packtar \
++	  buildshar doshar shar.* *.tar *.tar.Z *.tc
++
++distclean:
++	make clean
++	rm -f config.log config.cache config.status config.h Makefile
++
++config.h.in: configure.in
++	autoheader
++
++configure: configure.in
++	autoconf
++
++Makefile: Makefile.in
++	./configure
+Index: xloadimage.4.1.old/config.h.in
+===================================================================
+--- /dev/null
++++ xloadimage.4.1.old/config.h.in
+@@ -0,0 +1,40 @@
++/* config.h.in.  Generated automatically from configure.in by autoheader.  */
++
++/* Define as the return type of signal handlers (int or void).  */
++#undef RETSIGTYPE
++
++/* Define if you have the ANSI C header files.  */
++#undef STDC_HEADERS
++
++/* Define if the X Window System is missing or not being used.  */
++#undef X_DISPLAY_MISSING
++
++/* Define if you have the select function.  */
++#undef HAVE_SELECT
++
++/* Define if you have the <malloc.h> header file.  */
++#undef HAVE_MALLOC_H
++
++/* Define if you have the <strings.h> header file.  */
++#undef HAVE_STRINGS_H
++
++/* Define if you have the <sys/time.h> header file.  */
++#undef HAVE_SYS_TIME_H
++
++/* Define if you have the <unistd.h> header file.  */
++#undef HAVE_UNISTD_H
++
++/* Define if you have the m library (-lm).  */
++#undef HAVE_LIBM
++
++/* Define if you have the jpeg library (-ljpeg).  */
++#undef HAVE_LIBJPEG
++
++/* Define if you have the tiff library (-ltiff).  */
++#undef HAVE_LIBTIFF
++
++/* Define if you have the png library (-lpng).  */
++#undef HAVE_LIBPNG
++
++/* Define if you have the z library (-lz).  */
++#undef HAVE_LIBZ
+Index: xloadimage.4.1.old/configure
+===================================================================
+--- /dev/null
++++ xloadimage.4.1.old/configure
+@@ -0,0 +1,2476 @@
++#! /bin/sh
++
++# Guess values for system-dependent variables and create Makefiles.
++# Generated automatically using autoconf version 2.13 
++# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
++#
++# This configure script is free software; the Free Software Foundation
++# gives unlimited permission to copy, distribute and modify it.
++
++# Defaults:
++ac_help=
++ac_default_prefix=/usr/local
++# Any additions from configure.in:
++ac_help="$ac_help
++  --with-x                use the X Window System"
++
++# Initialize some variables set by options.
++# The variables have the same names as the options, with
++# dashes changed to underlines.
++build=NONE
++cache_file=./config.cache
++exec_prefix=NONE
++host=NONE
++no_create=
++nonopt=NONE
++no_recursion=
++prefix=NONE
++program_prefix=NONE
++program_suffix=NONE
++program_transform_name=s,x,x,
++silent=
++site=
++srcdir=
++target=NONE
++verbose=
++x_includes=NONE
++x_libraries=NONE
++bindir='${exec_prefix}/bin'
++sbindir='${exec_prefix}/sbin'
++libexecdir='${exec_prefix}/libexec'
++datadir='${prefix}/share'
++sysconfdir='${prefix}/etc'
++sharedstatedir='${prefix}/com'
++localstatedir='${prefix}/var'
++libdir='${exec_prefix}/lib'
++includedir='${prefix}/include'
++oldincludedir='/usr/include'
++infodir='${prefix}/info'
++mandir='${prefix}/man'
++
++# Initialize some other variables.
++subdirs=
++MFLAGS= MAKEFLAGS=
++SHELL=${CONFIG_SHELL-/bin/sh}
++# Maximum number of lines to put in a shell here document.
++ac_max_here_lines=12
++
++ac_prev=
++for ac_option
++do
++
++  # If the previous option needs an argument, assign it.
++  if test -n "$ac_prev"; then
++    eval "$ac_prev=\$ac_option"
++    ac_prev=
++    continue
++  fi
++
++  case "$ac_option" in
++  -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
++  *) ac_optarg= ;;
++  esac
++
++  # Accept the important Cygnus configure options, so we can diagnose typos.
++
++  case "$ac_option" in
++
++  -bindir | --bindir | --bindi | --bind | --bin | --bi)
++    ac_prev=bindir ;;
++  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
++    bindir="$ac_optarg" ;;
++
++  -build | --build | --buil | --bui | --bu)
++    ac_prev=build ;;
++  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
++    build="$ac_optarg" ;;
++
++  -cache-file | --cache-file | --cache-fil | --cache-fi \
++  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
++    ac_prev=cache_file ;;
++  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
++  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
++    cache_file="$ac_optarg" ;;
++
++  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
++    ac_prev=datadir ;;
++  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
++  | --da=*)
++    datadir="$ac_optarg" ;;
++
++  -disable-* | --disable-*)
++    ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
++    # Reject names that are not valid shell variable names.
++    if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
++      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
++    fi
++    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
++    eval "enable_${ac_feature}=no" ;;
++
++  -enable-* | --enable-*)
++    ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
++    # Reject names that are not valid shell variable names.
++    if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
++      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
++    fi
++    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
++    case "$ac_option" in
++      *=*) ;;
++      *) ac_optarg=yes ;;
++    esac
++    eval "enable_${ac_feature}='$ac_optarg'" ;;
++
++  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
++  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
++  | --exec | --exe | --ex)
++    ac_prev=exec_prefix ;;
++  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
++  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
++  | --exec=* | --exe=* | --ex=*)
++    exec_prefix="$ac_optarg" ;;
++
++  -gas | --gas | --ga | --g)
++    # Obsolete; use --with-gas.
++    with_gas=yes ;;
++
++  -help | --help | --hel | --he)
++    # Omit some internal or obsolete options to make the list less imposing.
++    # This message is too long to be a string in the A/UX 3.1 sh.
++    cat << EOF
++Usage: configure [options] [host]
++Options: [defaults in brackets after descriptions]
++Configuration:
++  --cache-file=FILE       cache test results in FILE
++  --help                  print this message
++  --no-create             do not create output files
++  --quiet, --silent       do not print \`checking...' messages
++  --version               print the version of autoconf that created configure
++Directory and file names:
++  --prefix=PREFIX         install architecture-independent files in PREFIX
++                          [$ac_default_prefix]
++  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
++                          [same as prefix]
++  --bindir=DIR            user executables in DIR [EPREFIX/bin]
++  --sbindir=DIR           system admin executables in DIR [EPREFIX/sbin]
++  --libexecdir=DIR        program executables in DIR [EPREFIX/libexec]
++  --datadir=DIR           read-only architecture-independent data in DIR
++                          [PREFIX/share]
++  --sysconfdir=DIR        read-only single-machine data in DIR [PREFIX/etc]
++  --sharedstatedir=DIR    modifiable architecture-independent data in DIR
++                          [PREFIX/com]
++  --localstatedir=DIR     modifiable single-machine data in DIR [PREFIX/var]
++  --libdir=DIR            object code libraries in DIR [EPREFIX/lib]
++  --includedir=DIR        C header files in DIR [PREFIX/include]
++  --oldincludedir=DIR     C header files for non-gcc in DIR [/usr/include]
++  --infodir=DIR           info documentation in DIR [PREFIX/info]
++  --mandir=DIR            man documentation in DIR [PREFIX/man]
++  --srcdir=DIR            find the sources in DIR [configure dir or ..]
++  --program-prefix=PREFIX prepend PREFIX to installed program names
++  --program-suffix=SUFFIX append SUFFIX to installed program names
++  --program-transform-name=PROGRAM
++                          run sed PROGRAM on installed program names
++EOF
++    cat << EOF
++Host type:
++  --build=BUILD           configure for building on BUILD [BUILD=HOST]
++  --host=HOST             configure for HOST [guessed]
++  --target=TARGET         configure for TARGET [TARGET=HOST]
++Features and packages:
++  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
++  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
++  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
++  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
++  --x-includes=DIR        X include files are in DIR
++  --x-libraries=DIR       X library files are in DIR
++EOF
++    if test -n "$ac_help"; then
++      echo "--enable and --with options recognized:$ac_help"
++    fi
++    exit 0 ;;
++
++  -host | --host | --hos | --ho)
++    ac_prev=host ;;
++  -host=* | --host=* | --hos=* | --ho=*)
++    host="$ac_optarg" ;;
++
++  -includedir | --includedir | --includedi | --included | --include \
++  | --includ | --inclu | --incl | --inc)
++    ac_prev=includedir ;;
++  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
++  | --includ=* | --inclu=* | --incl=* | --inc=*)
++    includedir="$ac_optarg" ;;
++
++  -infodir | --infodir | --infodi | --infod | --info | --inf)
++    ac_prev=infodir ;;
++  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
++    infodir="$ac_optarg" ;;
++
++  -libdir | --libdir | --libdi | --libd)
++    ac_prev=libdir ;;
++  -libdir=* | --libdir=* | --libdi=* | --libd=*)
++    libdir="$ac_optarg" ;;
++
++  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
++  | --libexe | --libex | --libe)
++    ac_prev=libexecdir ;;
++  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
++  | --libexe=* | --libex=* | --libe=*)
++    libexecdir="$ac_optarg" ;;
++
++  -localstatedir | --localstatedir | --localstatedi | --localstated \
++  | --localstate | --localstat | --localsta | --localst \
++  | --locals | --local | --loca | --loc | --lo)
++    ac_prev=localstatedir ;;
++  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
++  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
++  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
++    localstatedir="$ac_optarg" ;;
++
++  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
++    ac_prev=mandir ;;
++  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
++    mandir="$ac_optarg" ;;
++
++  -nfp | --nfp | --nf)
++    # Obsolete; use --without-fp.
++    with_fp=no ;;
++
++  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
++  | --no-cr | --no-c)
++    no_create=yes ;;
++
++  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
++  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
++    no_recursion=yes ;;
++
++  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
++  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
++  | --oldin | --oldi | --old | --ol | --o)
++    ac_prev=oldincludedir ;;
++  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
++  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
++  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
++    oldincludedir="$ac_optarg" ;;
++
++  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
++    ac_prev=prefix ;;
++  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
++    prefix="$ac_optarg" ;;
++
++  -program-prefix | --program-prefix | --program-prefi | --program-pref \
++  | --program-pre | --program-pr | --program-p)
++    ac_prev=program_prefix ;;
++  -program-prefix=* | --program-prefix=* | --program-prefi=* \
++  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
++    program_prefix="$ac_optarg" ;;
++
++  -program-suffix | --program-suffix | --program-suffi | --program-suff \
++  | --program-suf | --program-su | --program-s)
++    ac_prev=program_suffix ;;
++  -program-suffix=* | --program-suffix=* | --program-suffi=* \
++  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
++    program_suffix="$ac_optarg" ;;
++
++  -program-transform-name | --program-transform-name \
++  | --program-transform-nam | --program-transform-na \
++  | --program-transform-n | --program-transform- \
++  | --program-transform | --program-transfor \
++  | --program-transfo | --program-transf \
++  | --program-trans | --program-tran \
++  | --progr-tra | --program-tr | --program-t)
++    ac_prev=program_transform_name ;;
++  -program-transform-name=* | --program-transform-name=* \
++  | --program-transform-nam=* | --program-transform-na=* \
++  | --program-transform-n=* | --program-transform-=* \
++  | --program-transform=* | --program-transfor=* \
++  | --program-transfo=* | --program-transf=* \
++  | --program-trans=* | --program-tran=* \
++  | --progr-tra=* | --program-tr=* | --program-t=*)
++    program_transform_name="$ac_optarg" ;;
++
++  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
++  | -silent | --silent | --silen | --sile | --sil)
++    silent=yes ;;
++
++  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
++    ac_prev=sbindir ;;
++  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
++  | --sbi=* | --sb=*)
++    sbindir="$ac_optarg" ;;
++
++  -sharedstatedir | --sharedstatedir | --sharedstatedi \
++  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
++  | --sharedst | --shareds | --shared | --share | --shar \
++  | --sha | --sh)
++    ac_prev=sharedstatedir ;;
++  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
++  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
++  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
++  | --sha=* | --sh=*)
++    sharedstatedir="$ac_optarg" ;;
++
++  -site | --site | --sit)
++    ac_prev=site ;;
++  -site=* | --site=* | --sit=*)
++    site="$ac_optarg" ;;
++
++  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
++    ac_prev=srcdir ;;
++  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
++    srcdir="$ac_optarg" ;;
++
++  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
++  | --syscon | --sysco | --sysc | --sys | --sy)
++    ac_prev=sysconfdir ;;
++  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
++  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
++    sysconfdir="$ac_optarg" ;;
++
++  -target | --target | --targe | --targ | --tar | --ta | --t)
++    ac_prev=target ;;
++  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
++    target="$ac_optarg" ;;
++
++  -v | -verbose | --verbose | --verbos | --verbo | --verb)
++    verbose=yes ;;
++
++  -version | --version | --versio | --versi | --vers)
++    echo "configure generated by autoconf version 2.13"
++    exit 0 ;;
++
++  -with-* | --with-*)
++    ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
++    # Reject names that are not valid shell variable names.
++    if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
++      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
++    fi
++    ac_package=`echo $ac_package| sed 's/-/_/g'`
++    case "$ac_option" in
++      *=*) ;;
++      *) ac_optarg=yes ;;
++    esac
++    eval "with_${ac_package}='$ac_optarg'" ;;
++
++  -without-* | --without-*)
++    ac_package=`echo $ac_option|sed -e 's/-*without-//'`
++    # Reject names that are not valid shell variable names.
++    if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
++      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
++    fi
++    ac_package=`echo $ac_package| sed 's/-/_/g'`
++    eval "with_${ac_package}=no" ;;
++
++  --x)
++    # Obsolete; use --with-x.
++    with_x=yes ;;
++
++  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
++  | --x-incl | --x-inc | --x-in | --x-i)
++    ac_prev=x_includes ;;
++  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
++  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
++    x_includes="$ac_optarg" ;;
++
++  -x-libraries | --x-libraries | --x-librarie | --x-librari \
++  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
++    ac_prev=x_libraries ;;
++  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
++  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
++    x_libraries="$ac_optarg" ;;
++
++  -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
++    ;;
++
++  *)
++    if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
++      echo "configure: warning: $ac_option: invalid host type" 1>&2
++    fi
++    if test "x$nonopt" != xNONE; then
++      { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
++    fi
++    nonopt="$ac_option"
++    ;;
++
++  esac
++done
++
++if test -n "$ac_prev"; then
++  { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
++fi
++
++trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
++
++# File descriptor usage:
++# 0 standard input
++# 1 file creation
++# 2 errors and warnings
++# 3 some systems may open it to /dev/tty
++# 4 used on the Kubota Titan
++# 6 checking for... messages and results
++# 5 compiler messages saved in config.log
++if test "$silent" = yes; then
++  exec 6>/dev/null
++else
++  exec 6>&1
++fi
++exec 5>./config.log
++
++echo "\
++This file contains any messages produced by compilers while
++running configure, to aid debugging if configure makes a mistake.
++" 1>&5
++
++# Strip out --no-create and --no-recursion so they do not pile up.
++# Also quote any args containing shell metacharacters.
++ac_configure_args=
++for ac_arg
++do
++  case "$ac_arg" in
++  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
++  | --no-cr | --no-c) ;;
++  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
++  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
++  *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
++  ac_configure_args="$ac_configure_args '$ac_arg'" ;;
++  *) ac_configure_args="$ac_configure_args $ac_arg" ;;
++  esac
++done
++
++# NLS nuisances.
++# Only set these to C if already set.  These must not be set unconditionally
++# because not all systems understand e.g. LANG=C (notably SCO).
++# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
++# Non-C LC_CTYPE values break the ctype check.
++if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
++if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
++if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
++if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
++
++# confdefs.h avoids OS command line length limits that DEFS can exceed.
++rm -rf conftest* confdefs.h
++# AIX cpp loses on an empty file, so make sure it contains at least a newline.
++echo > confdefs.h
++
++# A filename unique to this package, relative to the directory that
++# configure is in, which we can look for to find out if srcdir is correct.
++ac_unique_file=xloadimage.c
++
++# Find the source files, if location was not specified.
++if test -z "$srcdir"; then
++  ac_srcdir_defaulted=yes
++  # Try the directory containing this script, then its parent.
++  ac_prog=$0
++  ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
++  test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
++  srcdir=$ac_confdir
++  if test ! -r $srcdir/$ac_unique_file; then
++    srcdir=..
++  fi
++else
++  ac_srcdir_defaulted=no
++fi
++if test ! -r $srcdir/$ac_unique_file; then
++  if test "$ac_srcdir_defaulted" = yes; then
++    { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
++  else
++    { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
++  fi
++fi
++srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
++
++# Prefer explicitly selected file to automatically selected ones.
++if test -z "$CONFIG_SITE"; then
++  if test "x$prefix" != xNONE; then
++    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
++  else
++    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
++  fi
++fi
++for ac_site_file in $CONFIG_SITE; do
++  if test -r "$ac_site_file"; then
++    echo "loading site script $ac_site_file"
++    . "$ac_site_file"
++  fi
++done
++
++if test -r "$cache_file"; then
++  echo "loading cache $cache_file"
++  . $cache_file
++else
++  echo "creating cache $cache_file"
++  > $cache_file
++fi
++
++ac_ext=c
++# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
++ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
++cross_compiling=$ac_cv_prog_cc_cross
++
++ac_exeext=
++ac_objext=o
++if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
++  # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
++  if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
++    ac_n= ac_c='
++' ac_t='	'
++  else
++    ac_n=-n ac_c= ac_t=
++  fi
++else
++  ac_n= ac_c='\c' ac_t=
++fi
++
++
++
++
++# 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:532: checking for $ac_word" >&5
++if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  if test -n "$CC"; then
++  ac_cv_prog_CC="$CC" # Let the user override the test.
++else
++  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
++  ac_dummy="$PATH"
++  for ac_dir in $ac_dummy; do
++    test -z "$ac_dir" && ac_dir=.
++    if test -f $ac_dir/$ac_word; then
++      ac_cv_prog_CC="gcc"
++      break
++    fi
++  done
++  IFS="$ac_save_ifs"
++fi
++fi
++CC="$ac_cv_prog_CC"
++if test -n "$CC"; then
++  echo "$ac_t""$CC" 1>&6
++else
++  echo "$ac_t""no" 1>&6
++fi
++
++if test -z "$CC"; then
++  # Extract the first word of "cc", so it can be a program name with args.
++set dummy cc; ac_word=$2
++echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
++echo "configure:562: checking for $ac_word" >&5
++if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  if test -n "$CC"; then
++  ac_cv_prog_CC="$CC" # Let the user override the test.
++else
++  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
++  ac_prog_rejected=no
++  ac_dummy="$PATH"
++  for ac_dir in $ac_dummy; do
++    test -z "$ac_dir" && ac_dir=.
++    if test -f $ac_dir/$ac_word; then
++      if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
++        ac_prog_rejected=yes
++	continue
++      fi
++      ac_cv_prog_CC="cc"
++      break
++    fi
++  done
++  IFS="$ac_save_ifs"
++if test $ac_prog_rejected = yes; then
++  # We found a bogon in the path, so make sure we never use it.
++  set dummy $ac_cv_prog_CC
++  shift
++  if test $# -gt 0; then
++    # We chose a different compiler from the bogus one.
++    # However, it has the same basename, so the bogon will be chosen
++    # first if we set CC to just the basename; use the full file name.
++    shift
++    set dummy "$ac_dir/$ac_word" "$@"
++    shift
++    ac_cv_prog_CC="$@"
++  fi
++fi
++fi
++fi
++CC="$ac_cv_prog_CC"
++if test -n "$CC"; then
++  echo "$ac_t""$CC" 1>&6
++else
++  echo "$ac_t""no" 1>&6
++fi
++
++  if test -z "$CC"; then
++    case "`uname -s`" in
++    *win32* | *WIN32*)
++      # 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:613: checking for $ac_word" >&5
++if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  if test -n "$CC"; then
++  ac_cv_prog_CC="$CC" # Let the user override the test.
++else
++  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
++  ac_dummy="$PATH"
++  for ac_dir in $ac_dummy; do
++    test -z "$ac_dir" && ac_dir=.
++    if test -f $ac_dir/$ac_word; then
++      ac_cv_prog_CC="cl"
++      break
++    fi
++  done
++  IFS="$ac_save_ifs"
++fi
++fi
++CC="$ac_cv_prog_CC"
++if test -n "$CC"; then
++  echo "$ac_t""$CC" 1>&6
++else
++  echo "$ac_t""no" 1>&6
++fi
++ ;;
++    esac
++  fi
++  test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
++fi
++
++echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
++echo "configure:645: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
++
++ac_ext=c
++# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
++ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
++cross_compiling=$ac_cv_prog_cc_cross
++
++cat > conftest.$ac_ext << EOF
++
++#line 656 "configure"
++#include "confdefs.h"
++
++main(){return(0);}
++EOF
++if { (eval echo configure:661: \"$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
++    ac_cv_prog_cc_cross=no
++  else
++    ac_cv_prog_cc_cross=yes
++  fi
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  ac_cv_prog_cc_works=no
++fi
++rm -fr conftest*
++ac_ext=c
++# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
++ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
++cross_compiling=$ac_cv_prog_cc_cross
++
++echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
++if test $ac_cv_prog_cc_works = no; then
++  { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
++fi
++echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
++echo "configure:687: 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:692: checking whether we are using GNU C" >&5
++if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.c <<EOF
++#ifdef __GNUC__
++  yes;
++#endif
++EOF
++if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:701: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
++  ac_cv_prog_gcc=yes
++else
++  ac_cv_prog_gcc=no
++fi
++fi
++
++echo "$ac_t""$ac_cv_prog_gcc" 1>&6
++
++if test $ac_cv_prog_gcc = yes; then
++  GCC=yes
++else
++  GCC=
++fi
++
++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:720: checking whether ${CC-cc} accepts -g" >&5
++if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  echo 'void f(){}' > conftest.c
++if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
++  ac_cv_prog_cc_g=yes
++else
++  ac_cv_prog_cc_g=no
++fi
++rm -f conftest*
++
++fi
++
++echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
++if test "$ac_test_CFLAGS" = set; then
++  CFLAGS="$ac_save_CFLAGS"
++elif test $ac_cv_prog_cc_g = yes; then
++  if test "$GCC" = yes; then
++    CFLAGS="-g -O2"
++  else
++    CFLAGS="-g"
++  fi
++else
++  if test "$GCC" = yes; then
++    CFLAGS="-O2"
++  else
++    CFLAGS=
++  fi
++fi
++
++
++echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
++echo "configure:753: checking how to run the C preprocessor" >&5
++# On Suns, sometimes $CPP names a directory.
++if test -n "$CPP" && test -d "$CPP"; then
++  CPP=
++fi
++if test -z "$CPP"; then
++if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++    # This must be in double quotes, not single quotes, because CPP may get
++  # substituted into the Makefile and "${CC-cc}" will confuse make.
++  CPP="${CC-cc} -E"
++  # On the NeXT, cc -E runs the code through the compiler's parser,
++  # not just through cpp.
++  cat > conftest.$ac_ext <<EOF
++#line 768 "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:774: \"$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
++  :
++else
++  echo "$ac_err" >&5
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  CPP="${CC-cc} -E -traditional-cpp"
++  cat > conftest.$ac_ext <<EOF
++#line 785 "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:791: \"$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
++  :
++else
++  echo "$ac_err" >&5
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  CPP="${CC-cc} -nologo -E"
++  cat > conftest.$ac_ext <<EOF
++#line 802 "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:808: \"$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
++  :
++else
++  echo "$ac_err" >&5
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  CPP=/lib/cpp
++fi
++rm -f conftest*
++fi
++rm -f conftest*
++fi
++rm -f conftest*
++  ac_cv_prog_CPP="$CPP"
++fi
++  CPP="$ac_cv_prog_CPP"
++else
++  ac_cv_prog_CPP="$CPP"
++fi
++echo "$ac_t""$CPP" 1>&6
++
++# If we find X, set shell vars x_includes and x_libraries to the
++# paths, otherwise set no_x=yes.
++# Uses ac_ vars as temps to allow command line to override cache and checks.
++# --without-x overrides everything else, but does not touch the cache.
++echo $ac_n "checking for X""... $ac_c" 1>&6
++echo "configure:837: checking for X" >&5
++
++# Check whether --with-x or --without-x was given.
++if test "${with_x+set}" = set; then
++  withval="$with_x"
++  :
++fi
++
++# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
++if test "x$with_x" = xno; then
++  # The user explicitly disabled X.
++  have_x=disabled
++else
++  if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then
++    # Both variables are already set.
++    have_x=yes
++  else
++if eval "test \"`echo '$''{'ac_cv_have_x'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  # One or both of the vars are not set, and there is no cached value.
++ac_x_includes=NO ac_x_libraries=NO
++rm -fr conftestdir
++if mkdir conftestdir; then
++  cd conftestdir
++  # Make sure to not put "make" in the Imakefile rules, since we grep it out.
++  cat > Imakefile <<'EOF'
++acfindx:
++	@echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"'
++EOF
++  if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
++    # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
++    eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
++    # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
++    for ac_extension in a so sl; do
++      if test ! -f $ac_im_usrlibdir/libX11.$ac_extension &&
++        test -f $ac_im_libdir/libX11.$ac_extension; then
++        ac_im_usrlibdir=$ac_im_libdir; break
++      fi
++    done
++    # Screen out bogus values from the imake configuration.  They are
++    # bogus both because they are the default anyway, and because
++    # using them would break gcc on systems where it needs fixed includes.
++    case "$ac_im_incroot" in
++	/usr/include) ;;
++	*) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes="$ac_im_incroot" ;;
++    esac
++    case "$ac_im_usrlibdir" in
++	/usr/lib | /lib) ;;
++	*) test -d "$ac_im_usrlibdir" && ac_x_libraries="$ac_im_usrlibdir" ;;
++    esac
++  fi
++  cd ..
++  rm -fr conftestdir
++fi
++
++if test "$ac_x_includes" = NO; then
++  # Guess where to find include files, by looking for this one X11 .h file.
++  test -z "$x_direct_test_include" && x_direct_test_include=X11/Intrinsic.h
++
++  # First, try using that file with no special directory specified.
++cat > conftest.$ac_ext <<EOF
++#line 899 "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:904: \"$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*
++  # We can compile using X headers with no special include directory.
++ac_x_includes=
++else
++  echo "$ac_err" >&5
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  # Look for the header file in a standard set of common directories.
++# Check X11 before X11Rn because it is often a symlink to the current release.
++  for ac_dir in               \
++    /usr/X11/include          \
++    /usr/X11R6/include        \
++    /usr/X11R5/include        \
++    /usr/X11R4/include        \
++                              \
++    /usr/include/X11          \
++    /usr/include/X11R6        \
++    /usr/include/X11R5        \
++    /usr/include/X11R4        \
++                              \
++    /usr/local/X11/include    \
++    /usr/local/X11R6/include  \
++    /usr/local/X11R5/include  \
++    /usr/local/X11R4/include  \
++                              \
++    /usr/local/include/X11    \
++    /usr/local/include/X11R6  \
++    /usr/local/include/X11R5  \
++    /usr/local/include/X11R4  \
++                              \
++    /usr/X386/include         \
++    /usr/x386/include         \
++    /usr/XFree86/include/X11  \
++                              \
++    /usr/include              \
++    /usr/local/include        \
++    /usr/unsupported/include  \
++    /usr/athena/include       \
++    /usr/local/x11r5/include  \
++    /usr/lpp/Xamples/include  \
++                              \
++    /usr/openwin/include      \
++    /usr/openwin/share/include \
++    ; \
++  do
++    if test -r "$ac_dir/$x_direct_test_include"; then
++      ac_x_includes=$ac_dir
++      break
++    fi
++  done
++fi
++rm -f conftest*
++fi # $ac_x_includes = NO
++
++if test "$ac_x_libraries" = NO; then
++  # Check for the libraries.
++
++  test -z "$x_direct_test_library" && x_direct_test_library=Xt
++  test -z "$x_direct_test_function" && x_direct_test_function=XtMalloc
++
++  # See if we find them without any special options.
++  # Don't add to $LIBS permanently.
++  ac_save_LIBS="$LIBS"
++  LIBS="-l$x_direct_test_library $LIBS"
++cat > conftest.$ac_ext <<EOF
++#line 973 "configure"
++#include "confdefs.h"
++
++int main() {
++${x_direct_test_function}()
++; return 0; }
++EOF
++if { (eval echo configure:980: \"$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.
++ac_x_libraries=
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  LIBS="$ac_save_LIBS"
++# First see if replacing the include by lib works.
++# Check X11 before X11Rn because it is often a symlink to the current release.
++for ac_dir in `echo "$ac_x_includes" | sed s/include/lib/` \
++    /usr/X11/lib          \
++    /usr/X11R6/lib        \
++    /usr/X11R5/lib        \
++    /usr/X11R4/lib        \
++                          \
++    /usr/lib/X11          \
++    /usr/lib/X11R6        \
++    /usr/lib/X11R5        \
++    /usr/lib/X11R4        \
++                          \
++    /usr/local/X11/lib    \
++    /usr/local/X11R6/lib  \
++    /usr/local/X11R5/lib  \
++    /usr/local/X11R4/lib  \
++                          \
++    /usr/local/lib/X11    \
++    /usr/local/lib/X11R6  \
++    /usr/local/lib/X11R5  \
++    /usr/local/lib/X11R4  \
++                          \
++    /usr/X386/lib         \
++    /usr/x386/lib         \
++    /usr/XFree86/lib/X11  \
++                          \
++    /usr/lib              \
++    /usr/local/lib        \
++    /usr/unsupported/lib  \
++    /usr/athena/lib       \
++    /usr/local/x11r5/lib  \
++    /usr/lpp/Xamples/lib  \
++    /lib/usr/lib/X11	  \
++                          \
++    /usr/openwin/lib      \
++    /usr/openwin/share/lib \
++    ; \
++do
++  for ac_extension in a so sl; do
++    if test -r $ac_dir/lib${x_direct_test_library}.$ac_extension; then
++      ac_x_libraries=$ac_dir
++      break 2
++    fi
++  done
++done
++fi
++rm -f conftest*
++fi # $ac_x_libraries = NO
++
++if test "$ac_x_includes" = NO || test "$ac_x_libraries" = NO; then
++  # Didn't find X anywhere.  Cache the known absence of X.
++  ac_cv_have_x="have_x=no"
++else
++  # Record where we found X for the cache.
++  ac_cv_have_x="have_x=yes \
++	        ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries"
++fi
++fi
++  fi
++  eval "$ac_cv_have_x"
++fi # $with_x != no
++
++if test "$have_x" != yes; then
++  echo "$ac_t""$have_x" 1>&6
++  no_x=yes
++else
++  # If each of the values was on the command line, it overrides each guess.
++  test "x$x_includes" = xNONE && x_includes=$ac_x_includes
++  test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
++  # Update the cache value to reflect the command line values.
++  ac_cv_have_x="have_x=yes \
++		ac_x_includes=$x_includes ac_x_libraries=$x_libraries"
++  echo "$ac_t""libraries $x_libraries, headers $x_includes" 1>&6
++fi
++
++if test "$no_x" = yes; then
++  # Not all programs may use this symbol, but it does not hurt to define it.
++  cat >> confdefs.h <<\EOF
++#define X_DISPLAY_MISSING 1
++EOF
++
++  X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
++else
++  if test -n "$x_includes"; then
++    X_CFLAGS="$X_CFLAGS -I$x_includes"
++  fi
++
++  # It would also be nice to do this for all -L options, not just this one.
++  if test -n "$x_libraries"; then
++    X_LIBS="$X_LIBS -L$x_libraries"
++    # For Solaris; some versions of Sun CC require a space after -R and
++    # others require no space.  Words are not sufficient . . . .
++    case "`(uname -sr) 2>/dev/null`" in
++    "SunOS 5"*)
++      echo $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6
++echo "configure:1086: 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 1089 "configure"
++#include "confdefs.h"
++
++int main() {
++
++; return 0; }
++EOF
++if { (eval echo configure:1096: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  ac_R_nospace=yes
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  ac_R_nospace=no
++fi
++rm -f conftest*
++      if test $ac_R_nospace = yes; then
++	echo "$ac_t""no" 1>&6
++	X_LIBS="$X_LIBS -R$x_libraries"
++      else
++	LIBS="$ac_xsave_LIBS -R $x_libraries"
++	cat > conftest.$ac_ext <<EOF
++#line 1112 "configure"
++#include "confdefs.h"
++
++int main() {
++
++; return 0; }
++EOF
++if { (eval echo configure:1119: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  ac_R_space=yes
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  ac_R_space=no
++fi
++rm -f conftest*
++	if test $ac_R_space = yes; then
++	  echo "$ac_t""yes" 1>&6
++	  X_LIBS="$X_LIBS -R $x_libraries"
++	else
++	  echo "$ac_t""neither works" 1>&6
++	fi
++      fi
++      LIBS="$ac_xsave_LIBS"
++    esac
++  fi
++
++  # Check for system-dependent libraries X programs must link with.
++  # Do this before checking for the system-independent R6 libraries
++  # (-lICE), since we may need -lsocket or whatever for X linking.
++
++  if test "$ISC" = yes; then
++    X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
++  else
++    # Martyn.Johnson@cl.cam.ac.uk says this is needed for Ultrix, if the X
++    # libraries were built with DECnet support.  And karl@cs.umb.edu says
++    # the Alpha needs dnet_stub (dnet does not exist).
++    echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6
++echo "configure:1151: checking for dnet_ntoa in -ldnet" >&5
++ac_lib_var=`echo dnet'_'dnet_ntoa | sed 'y%./+-%__p_%'`
++if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  ac_save_LIBS="$LIBS"
++LIBS="-ldnet  $LIBS"
++cat > conftest.$ac_ext <<EOF
++#line 1159 "configure"
++#include "confdefs.h"
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char dnet_ntoa();
++
++int main() {
++dnet_ntoa()
++; return 0; }
++EOF
++if { (eval echo configure:1170: \"$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
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_lib_$ac_lib_var=no"
++fi
++rm -f conftest*
++LIBS="$ac_save_LIBS"
++
++fi
++if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++  X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
++else
++  echo "$ac_t""no" 1>&6
++fi
++
++    if test $ac_cv_lib_dnet_dnet_ntoa = no; then
++      echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6
++echo "configure:1192: checking for dnet_ntoa in -ldnet_stub" >&5
++ac_lib_var=`echo dnet_stub'_'dnet_ntoa | sed 'y%./+-%__p_%'`
++if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  ac_save_LIBS="$LIBS"
++LIBS="-ldnet_stub  $LIBS"
++cat > conftest.$ac_ext <<EOF
++#line 1200 "configure"
++#include "confdefs.h"
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char dnet_ntoa();
++
++int main() {
++dnet_ntoa()
++; return 0; }
++EOF
++if { (eval echo configure:1211: \"$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
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_lib_$ac_lib_var=no"
++fi
++rm -f conftest*
++LIBS="$ac_save_LIBS"
++
++fi
++if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++  X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
++else
++  echo "$ac_t""no" 1>&6
++fi
++
++    fi
++
++    # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
++    # to get the SysV transport functions.
++    # chad@anasazi.com says the Pyramis MIS-ES running DC/OSx (SVR4)
++    # needs -lnsl.
++    # The nsl library prevents programs from opening the X display
++    # on Irix 5.2, according to dickey@clark.net.
++    echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6
++echo "configure:1240: 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 1245 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char gethostbyname(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char gethostbyname();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_gethostbyname) || defined (__stub___gethostbyname)
++choke me
++#else
++gethostbyname();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:1268: \"$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
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_gethostbyname=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'gethostbyname`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++  :
++else
++  echo "$ac_t""no" 1>&6
++fi
++
++    if test $ac_cv_func_gethostbyname = no; then
++      echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
++echo "configure:1289: checking for gethostbyname in -lnsl" >&5
++ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'`
++if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  ac_save_LIBS="$LIBS"
++LIBS="-lnsl  $LIBS"
++cat > conftest.$ac_ext <<EOF
++#line 1297 "configure"
++#include "confdefs.h"
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char gethostbyname();
++
++int main() {
++gethostbyname()
++; return 0; }
++EOF
++if { (eval echo configure:1308: \"$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
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_lib_$ac_lib_var=no"
++fi
++rm -f conftest*
++LIBS="$ac_save_LIBS"
++
++fi
++if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++  X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
++else
++  echo "$ac_t""no" 1>&6
++fi
++
++    fi
++
++    # lieder@skyler.mavd.honeywell.com says without -lsocket,
++    # socket/setsockopt and other routines are undefined under SCO ODT
++    # 2.0.  But -lsocket is broken on IRIX 5.2 (and is not necessary
++    # on later versions), says simon@lia.di.epfl.ch: it contains
++    # gethostby* variants that don't use the nameserver (or something).
++    # -lsocket must be given before -lnsl if both are needed.
++    # We assume that if connect needs -lnsl, so does gethostbyname.
++    echo $ac_n "checking for connect""... $ac_c" 1>&6
++echo "configure:1338: 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 1343 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char connect(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char connect();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_connect) || defined (__stub___connect)
++choke me
++#else
++connect();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:1366: \"$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
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_connect=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'connect`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++  :
++else
++  echo "$ac_t""no" 1>&6
++fi
++
++    if test $ac_cv_func_connect = no; then
++      echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6
++echo "configure:1387: checking for connect in -lsocket" >&5
++ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'`
++if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  ac_save_LIBS="$LIBS"
++LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
++cat > conftest.$ac_ext <<EOF
++#line 1395 "configure"
++#include "confdefs.h"
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char connect();
++
++int main() {
++connect()
++; return 0; }
++EOF
++if { (eval echo configure:1406: \"$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
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_lib_$ac_lib_var=no"
++fi
++rm -f conftest*
++LIBS="$ac_save_LIBS"
++
++fi
++if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++  X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
++else
++  echo "$ac_t""no" 1>&6
++fi
++
++    fi
++
++    # gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX.
++    echo $ac_n "checking for remove""... $ac_c" 1>&6
++echo "configure:1430: 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 1435 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char remove(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char remove();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_remove) || defined (__stub___remove)
++choke me
++#else
++remove();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:1458: \"$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
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_remove=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'remove`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++  :
++else
++  echo "$ac_t""no" 1>&6
++fi
++
++    if test $ac_cv_func_remove = no; then
++      echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6
++echo "configure:1479: checking for remove in -lposix" >&5
++ac_lib_var=`echo posix'_'remove | sed 'y%./+-%__p_%'`
++if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  ac_save_LIBS="$LIBS"
++LIBS="-lposix  $LIBS"
++cat > conftest.$ac_ext <<EOF
++#line 1487 "configure"
++#include "confdefs.h"
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char remove();
++
++int main() {
++remove()
++; return 0; }
++EOF
++if { (eval echo configure:1498: \"$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
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_lib_$ac_lib_var=no"
++fi
++rm -f conftest*
++LIBS="$ac_save_LIBS"
++
++fi
++if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++  X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
++else
++  echo "$ac_t""no" 1>&6
++fi
++
++    fi
++
++    # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
++    echo $ac_n "checking for shmat""... $ac_c" 1>&6
++echo "configure:1522: 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 1527 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char shmat(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char shmat();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_shmat) || defined (__stub___shmat)
++choke me
++#else
++shmat();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:1550: \"$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
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_shmat=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'shmat`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++  :
++else
++  echo "$ac_t""no" 1>&6
++fi
++
++    if test $ac_cv_func_shmat = no; then
++      echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6
++echo "configure:1571: checking for shmat in -lipc" >&5
++ac_lib_var=`echo ipc'_'shmat | sed 'y%./+-%__p_%'`
++if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  ac_save_LIBS="$LIBS"
++LIBS="-lipc  $LIBS"
++cat > conftest.$ac_ext <<EOF
++#line 1579 "configure"
++#include "confdefs.h"
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char shmat();
++
++int main() {
++shmat()
++; return 0; }
++EOF
++if { (eval echo configure:1590: \"$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
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_lib_$ac_lib_var=no"
++fi
++rm -f conftest*
++LIBS="$ac_save_LIBS"
++
++fi
++if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++  X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
++else
++  echo "$ac_t""no" 1>&6
++fi
++
++    fi
++  fi
++
++  # Check for libraries that X11R6 Xt/Xaw programs need.
++  ac_save_LDFLAGS="$LDFLAGS"
++  test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries"
++  # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
++  # check for ICE first), but we must link in the order -lSM -lICE or
++  # we get undefined symbols.  So assume we have SM if we have ICE.
++  # These have to be linked with before -lX11, unlike the other
++  # libraries we check for below, so use a different variable.
++  #  --interran@uluru.Stanford.EDU, kb@cs.umb.edu.
++  echo $ac_n "checking for IceConnectionNumber in -lICE""... $ac_c" 1>&6
++echo "configure:1623: checking for IceConnectionNumber in -lICE" >&5
++ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'`
++if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  ac_save_LIBS="$LIBS"
++LIBS="-lICE $X_EXTRA_LIBS $LIBS"
++cat > conftest.$ac_ext <<EOF
++#line 1631 "configure"
++#include "confdefs.h"
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char IceConnectionNumber();
++
++int main() {
++IceConnectionNumber()
++; return 0; }
++EOF
++if { (eval echo configure:1642: \"$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
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_lib_$ac_lib_var=no"
++fi
++rm -f conftest*
++LIBS="$ac_save_LIBS"
++
++fi
++if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++  X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
++else
++  echo "$ac_t""no" 1>&6
++fi
++
++  LDFLAGS="$ac_save_LDFLAGS"
++
++fi
++
++echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
++echo "configure:1667: 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 1672 "configure"
++#include "confdefs.h"
++#include <stdlib.h>
++#include <stdarg.h>
++#include <string.h>
++#include <float.h>
++EOF
++ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
++{ (eval echo configure:1680: \"$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*
++  ac_cv_header_stdc=yes
++else
++  echo "$ac_err" >&5
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  ac_cv_header_stdc=no
++fi
++rm -f conftest*
++
++if test $ac_cv_header_stdc = yes; then
++  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
++cat > conftest.$ac_ext <<EOF
++#line 1697 "configure"
++#include "confdefs.h"
++#include <string.h>
++EOF
++if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
++  egrep "memchr" >/dev/null 2>&1; then
++  :
++else
++  rm -rf conftest*
++  ac_cv_header_stdc=no
++fi
++rm -f conftest*
++
++fi
++
++if test $ac_cv_header_stdc = yes; then
++  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
++cat > conftest.$ac_ext <<EOF
++#line 1715 "configure"
++#include "confdefs.h"
++#include <stdlib.h>
++EOF
++if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
++  egrep "free" >/dev/null 2>&1; then
++  :
++else
++  rm -rf conftest*
++  ac_cv_header_stdc=no
++fi
++rm -f conftest*
++
++fi
++
++if test $ac_cv_header_stdc = yes; then
++  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
++if test "$cross_compiling" = yes; then
++  :
++else
++  cat > conftest.$ac_ext <<EOF
++#line 1736 "configure"
++#include "confdefs.h"
++#include <ctype.h>
++#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
++#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
++#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
++int main () { int i; for (i = 0; i < 256; i++)
++if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
++exit (0); }
++
++EOF
++if { (eval echo configure:1747: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
++then
++  :
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -fr conftest*
++  ac_cv_header_stdc=no
++fi
++rm -fr conftest*
++fi
++
++fi
++fi
++
++echo "$ac_t""$ac_cv_header_stdc" 1>&6
++if test $ac_cv_header_stdc = yes; then
++  cat >> confdefs.h <<\EOF
++#define STDC_HEADERS 1
++EOF
++
++fi
++
++for ac_hdr in malloc.h strings.h sys/time.h unistd.h
++do
++ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
++echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
++echo "configure:1774: 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 1779 "configure"
++#include "confdefs.h"
++#include <$ac_hdr>
++EOF
++ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
++{ (eval echo configure:1784: \"$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*
++  eval "ac_cv_header_$ac_safe=yes"
++else
++  echo "$ac_err" >&5
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=no"
++fi
++rm -f conftest*
++fi
++if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_hdr 1
++EOF
++ 
++else
++  echo "$ac_t""no" 1>&6
++fi
++done
++
++
++echo $ac_n "checking for main in -lm""... $ac_c" 1>&6
++echo "configure:1812: checking for main in -lm" >&5
++ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'`
++if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  ac_save_LIBS="$LIBS"
++LIBS="-lm  $LIBS"
++cat > conftest.$ac_ext <<EOF
++#line 1820 "configure"
++#include "confdefs.h"
++
++int main() {
++main()
++; return 0; }
++EOF
++if { (eval echo configure:1827: \"$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
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_lib_$ac_lib_var=no"
++fi
++rm -f conftest*
++LIBS="$ac_save_LIBS"
++
++fi
++if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_lib=HAVE_LIB`echo m | sed -e 's/[^a-zA-Z0-9_]/_/g' \
++    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_lib 1
++EOF
++
++  LIBS="-lm $LIBS"
++
++else
++  echo "$ac_t""no" 1>&6
++fi
++
++echo $ac_n "checking for main in -lz""... $ac_c" 1>&6
++echo "configure:1855: checking for main in -lz" >&5
++ac_lib_var=`echo z'_'main | sed 'y%./+-%__p_%'`
++if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  ac_save_LIBS="$LIBS"
++LIBS="-lz  $LIBS"
++cat > conftest.$ac_ext <<EOF
++#line 1863 "configure"
++#include "confdefs.h"
++
++int main() {
++main()
++; return 0; }
++EOF
++if { (eval echo configure:1870: \"$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
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_lib_$ac_lib_var=no"
++fi
++rm -f conftest*
++LIBS="$ac_save_LIBS"
++
++fi
++if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_lib=HAVE_LIB`echo z | sed -e 's/[^a-zA-Z0-9_]/_/g' \
++    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_lib 1
++EOF
++
++  LIBS="-lz $LIBS"
++
++else
++  echo "$ac_t""no" 1>&6
++fi
++
++echo $ac_n "checking for main in -lpng""... $ac_c" 1>&6
++echo "configure:1898: checking for main in -lpng" >&5
++ac_lib_var=`echo png'_'main | sed 'y%./+-%__p_%'`
++if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  ac_save_LIBS="$LIBS"
++LIBS="-lpng  $LIBS"
++cat > conftest.$ac_ext <<EOF
++#line 1906 "configure"
++#include "confdefs.h"
++
++int main() {
++main()
++; return 0; }
++EOF
++if { (eval echo configure:1913: \"$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
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_lib_$ac_lib_var=no"
++fi
++rm -f conftest*
++LIBS="$ac_save_LIBS"
++
++fi
++if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_lib=HAVE_LIB`echo png | sed -e 's/[^a-zA-Z0-9_]/_/g' \
++    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_lib 1
++EOF
++
++  LIBS="-lpng $LIBS"
++
++else
++  echo "$ac_t""no" 1>&6
++fi
++
++echo $ac_n "checking for main in -ljpeg""... $ac_c" 1>&6
++echo "configure:1941: checking for main in -ljpeg" >&5
++ac_lib_var=`echo jpeg'_'main | sed 'y%./+-%__p_%'`
++if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  ac_save_LIBS="$LIBS"
++LIBS="-ljpeg  $LIBS"
++cat > conftest.$ac_ext <<EOF
++#line 1949 "configure"
++#include "confdefs.h"
++
++int main() {
++main()
++; return 0; }
++EOF
++if { (eval echo configure:1956: \"$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
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_lib_$ac_lib_var=no"
++fi
++rm -f conftest*
++LIBS="$ac_save_LIBS"
++
++fi
++if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_lib=HAVE_LIB`echo jpeg | sed -e 's/[^a-zA-Z0-9_]/_/g' \
++    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_lib 1
++EOF
++
++  LIBS="-ljpeg $LIBS"
++
++else
++  echo "$ac_t""no" 1>&6
++fi
++
++echo $ac_n "checking for main in -ltiff""... $ac_c" 1>&6
++echo "configure:1984: checking for main in -ltiff" >&5
++ac_lib_var=`echo tiff'_'main | sed 'y%./+-%__p_%'`
++if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  ac_save_LIBS="$LIBS"
++LIBS="-ltiff  $LIBS"
++cat > conftest.$ac_ext <<EOF
++#line 1992 "configure"
++#include "confdefs.h"
++
++int main() {
++main()
++; return 0; }
++EOF
++if { (eval echo configure:1999: \"$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
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_lib_$ac_lib_var=no"
++fi
++rm -f conftest*
++LIBS="$ac_save_LIBS"
++
++fi
++if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_lib=HAVE_LIB`echo tiff | sed -e 's/[^a-zA-Z0-9_]/_/g' \
++    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_lib 1
++EOF
++
++  LIBS="-ltiff $LIBS"
++
++else
++  echo "$ac_t""no" 1>&6
++fi
++
++
++
++
++echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
++echo "configure:2030: 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 2035 "configure"
++#include "confdefs.h"
++#include <sys/types.h>
++#include <signal.h>
++#ifdef signal
++#undef signal
++#endif
++#ifdef __cplusplus
++extern "C" void (*signal (int, void (*)(int)))(int);
++#else
++void (*signal ()) ();
++#endif
++
++int main() {
++int i;
++; return 0; }
++EOF
++if { (eval echo configure:2052: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++  rm -rf conftest*
++  ac_cv_type_signal=void
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  ac_cv_type_signal=int
++fi
++rm -f conftest*
++fi
++
++echo "$ac_t""$ac_cv_type_signal" 1>&6
++cat >> confdefs.h <<EOF
++#define RETSIGTYPE $ac_cv_type_signal
++EOF
++
++
++for ac_func in mkdir select
++do
++echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
++echo "configure:2073: 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 2078 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char $ac_func();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++choke me
++#else
++$ac_func();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:2101: \"$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
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_func 1
++EOF
++ 
++else
++  echo "$ac_t""no" 1>&6
++fi
++done
++
++
++trap '' 1 2 15
++cat > confcache <<\EOF
++# This file is a shell script that caches the results of configure
++# tests run on this system so they can be shared between configure
++# scripts and configure runs.  It is not useful on other systems.
++# If it contains results you don't want to keep, you may remove or edit it.
++#
++# By default, configure uses ./config.cache as the cache file,
++# creating it if it does not exist already.  You can give configure
++# the --cache-file=FILE option to use a different cache file; that is
++# what configure does when it calls configure scripts in
++# subdirectories, so they share the cache.
++# Giving --cache-file=/dev/null disables caching, for debugging configure.
++# config.status only pays attention to the cache file if you give it the
++# --recheck option to rerun configure.
++#
++EOF
++# The following way of writing the cache mishandles newlines in values,
++# but we know of no workaround that is simple, portable, and efficient.
++# So, don't put newlines in cache variables' values.
++# Ultrix sh set writes to stderr and can't be redirected directly,
++# and sets the high bit in the cache file unless we assign to the vars.
++(set) 2>&1 |
++  case `(ac_space=' '; set | grep ac_space) 2>&1` in
++  *ac_space=\ *)
++    # `set' does not quote correctly, so add quotes (double-quote substitution
++    # turns \\\\ into \\, and sed turns \\ into \).
++    sed -n \
++      -e "s/'/'\\\\''/g" \
++      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
++    ;;
++  *)
++    # `set' quotes correctly as required by POSIX, so do not add quotes.
++    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
++    ;;
++  esac >> confcache
++if cmp -s $cache_file confcache; then
++  :
++else
++  if test -w $cache_file; then
++    echo "updating cache $cache_file"
++    cat confcache > $cache_file
++  else
++    echo "not updating unwritable cache $cache_file"
++  fi
++fi
++rm -f confcache
++
++trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
++
++test "x$prefix" = xNONE && prefix=$ac_default_prefix
++# Let make expand exec_prefix.
++test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
++
++# Any assignment to VPATH causes Sun make to only execute
++# the first set of double-colon rules, so remove it if not needed.
++# If there is a colon in the path, we need to keep it.
++if test "x$srcdir" = x.; then
++  ac_vpsub='/^[ 	]*VPATH[ 	]*=[^:]*$/d'
++fi
++
++trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
++
++DEFS=-DHAVE_CONFIG_H
++
++# Without the "./", some shells look in PATH for config.status.
++: ${CONFIG_STATUS=./config.status}
++
++echo creating $CONFIG_STATUS
++rm -f $CONFIG_STATUS
++cat > $CONFIG_STATUS <<EOF
++#! /bin/sh
++# Generated automatically by configure.
++# Run this file to recreate the current configuration.
++# This directory was configured as follows,
++# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
++#
++# $0 $ac_configure_args
++#
++# Compiler output produced by configure, useful for debugging
++# configure, is in ./config.log if it exists.
++
++ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
++for ac_option
++do
++  case "\$ac_option" in
++  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
++    echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
++    exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
++  -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
++    echo "$CONFIG_STATUS generated by autoconf version 2.13"
++    exit 0 ;;
++  -help | --help | --hel | --he | --h)
++    echo "\$ac_cs_usage"; exit 0 ;;
++  *) echo "\$ac_cs_usage"; exit 1 ;;
++  esac
++done
++
++ac_given_srcdir=$srcdir
++
++trap 'rm -fr `echo "Makefile config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
++EOF
++cat >> $CONFIG_STATUS <<EOF
++
++# Protect against being on the right side of a sed subst in config.status.
++sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
++ s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
++$ac_vpsub
++$extrasub
++s%@SHELL@%$SHELL%g
++s%@CFLAGS@%$CFLAGS%g
++s%@CPPFLAGS@%$CPPFLAGS%g
++s%@CXXFLAGS@%$CXXFLAGS%g
++s%@FFLAGS@%$FFLAGS%g
++s%@DEFS@%$DEFS%g
++s%@LDFLAGS@%$LDFLAGS%g
++s%@LIBS@%$LIBS%g
++s%@exec_prefix@%$exec_prefix%g
++s%@prefix@%$prefix%g
++s%@program_transform_name@%$program_transform_name%g
++s%@bindir@%$bindir%g
++s%@sbindir@%$sbindir%g
++s%@libexecdir@%$libexecdir%g
++s%@datadir@%$datadir%g
++s%@sysconfdir@%$sysconfdir%g
++s%@sharedstatedir@%$sharedstatedir%g
++s%@localstatedir@%$localstatedir%g
++s%@libdir@%$libdir%g
++s%@includedir@%$includedir%g
++s%@oldincludedir@%$oldincludedir%g
++s%@infodir@%$infodir%g
++s%@mandir@%$mandir%g
++s%@CC@%$CC%g
++s%@CPP@%$CPP%g
++s%@X_CFLAGS@%$X_CFLAGS%g
++s%@X_PRE_LIBS@%$X_PRE_LIBS%g
++s%@X_LIBS@%$X_LIBS%g
++s%@X_EXTRA_LIBS@%$X_EXTRA_LIBS%g
++
++CEOF
++EOF
++
++cat >> $CONFIG_STATUS <<\EOF
++
++# Split the substitutions into bite-sized pieces for seds with
++# small command number limits, like on Digital OSF/1 and HP-UX.
++ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
++ac_file=1 # Number of current file.
++ac_beg=1 # First line for current file.
++ac_end=$ac_max_sed_cmds # Line after last line for current file.
++ac_more_lines=:
++ac_sed_cmds=""
++while $ac_more_lines; do
++  if test $ac_beg -gt 1; then
++    sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
++  else
++    sed "${ac_end}q" conftest.subs > conftest.s$ac_file
++  fi
++  if test ! -s conftest.s$ac_file; then
++    ac_more_lines=false
++    rm -f conftest.s$ac_file
++  else
++    if test -z "$ac_sed_cmds"; then
++      ac_sed_cmds="sed -f conftest.s$ac_file"
++    else
++      ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
++    fi
++    ac_file=`expr $ac_file + 1`
++    ac_beg=$ac_end
++    ac_end=`expr $ac_end + $ac_max_sed_cmds`
++  fi
++done
++if test -z "$ac_sed_cmds"; then
++  ac_sed_cmds=cat
++fi
++EOF
++
++cat >> $CONFIG_STATUS <<EOF
++
++CONFIG_FILES=\${CONFIG_FILES-"Makefile"}
++EOF
++cat >> $CONFIG_STATUS <<\EOF
++for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
++  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
++  case "$ac_file" in
++  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
++       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
++  *) ac_file_in="${ac_file}.in" ;;
++  esac
++
++  # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
++
++  # Remove last slash and all that follows it.  Not all systems have dirname.
++  ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
++  if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
++    # The file is in a subdirectory.
++    test ! -d "$ac_dir" && mkdir "$ac_dir"
++    ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
++    # A "../" for each directory in $ac_dir_suffix.
++    ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
++  else
++    ac_dir_suffix= ac_dots=
++  fi
++
++  case "$ac_given_srcdir" in
++  .)  srcdir=.
++      if test -z "$ac_dots"; then top_srcdir=.
++      else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
++  /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
++  *) # Relative path.
++    srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
++    top_srcdir="$ac_dots$ac_given_srcdir" ;;
++  esac
++
++
++  echo creating "$ac_file"
++  rm -f "$ac_file"
++  configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
++  case "$ac_file" in
++  *Makefile*) ac_comsub="1i\\
++# $configure_input" ;;
++  *) ac_comsub= ;;
++  esac
++
++  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
++  sed -e "$ac_comsub
++s%@configure_input@%$configure_input%g
++s%@srcdir@%$srcdir%g
++s%@top_srcdir@%$top_srcdir%g
++" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
++fi; done
++rm -f conftest.s*
++
++# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
++# NAME is the cpp macro being defined and VALUE is the value it is being given.
++#
++# ac_d sets the value in "#define NAME VALUE" lines.
++ac_dA='s%^\([ 	]*\)#\([ 	]*define[ 	][ 	]*\)'
++ac_dB='\([ 	][ 	]*\)[^ 	]*%\1#\2'
++ac_dC='\3'
++ac_dD='%g'
++# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
++ac_uA='s%^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
++ac_uB='\([ 	]\)%\1#\2define\3'
++ac_uC=' '
++ac_uD='\4%g'
++# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
++ac_eA='s%^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
++ac_eB='$%\1#\2define\3'
++ac_eC=' '
++ac_eD='%g'
++
++if test "${CONFIG_HEADERS+set}" != set; then
++EOF
++cat >> $CONFIG_STATUS <<EOF
++  CONFIG_HEADERS="config.h"
++EOF
++cat >> $CONFIG_STATUS <<\EOF
++fi
++for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
++  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
++  case "$ac_file" in
++  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
++       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
++  *) ac_file_in="${ac_file}.in" ;;
++  esac
++
++  echo creating $ac_file
++
++  rm -f conftest.frag conftest.in conftest.out
++  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
++  cat $ac_file_inputs > conftest.in
++
++EOF
++
++# Transform confdefs.h into a sed script conftest.vals that substitutes
++# the proper values into config.h.in to produce config.h.  And first:
++# Protect against being on the right side of a sed subst in config.status.
++# Protect against being in an unquoted here document in config.status.
++rm -f conftest.vals
++cat > conftest.hdr <<\EOF
++s/[\\&%]/\\&/g
++s%[\\$`]%\\&%g
++s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
++s%ac_d%ac_u%gp
++s%ac_u%ac_e%gp
++EOF
++sed -n -f conftest.hdr confdefs.h > conftest.vals
++rm -f conftest.hdr
++
++# This sed command replaces #undef with comments.  This is necessary, for
++# example, in the case of _POSIX_SOURCE, which is predefined and required
++# on some systems where configure will not decide to define it.
++cat >> conftest.vals <<\EOF
++s%^[ 	]*#[ 	]*undef[ 	][ 	]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
++EOF
++
++# Break up conftest.vals because some shells have a limit on
++# the size of here documents, and old seds have small limits too.
++
++rm -f conftest.tail
++while :
++do
++  ac_lines=`grep -c . conftest.vals`
++  # grep -c gives empty output for an empty file on some AIX systems.
++  if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
++  # Write a limited-size here document to conftest.frag.
++  echo '  cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
++  sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
++  echo 'CEOF
++  sed -f conftest.frag conftest.in > conftest.out
++  rm -f conftest.in
++  mv conftest.out conftest.in
++' >> $CONFIG_STATUS
++  sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
++  rm -f conftest.vals
++  mv conftest.tail conftest.vals
++done
++rm -f conftest.vals
++
++cat >> $CONFIG_STATUS <<\EOF
++  rm -f conftest.frag conftest.h
++  echo "/* $ac_file.  Generated automatically by configure.  */" > conftest.h
++  cat conftest.in >> conftest.h
++  rm -f conftest.in
++  if cmp -s $ac_file conftest.h 2>/dev/null; then
++    echo "$ac_file is unchanged"
++    rm -f conftest.h
++  else
++    # Remove last slash and all that follows it.  Not all systems have dirname.
++      ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
++      if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
++      # The file is in a subdirectory.
++      test ! -d "$ac_dir" && mkdir "$ac_dir"
++    fi
++    rm -f $ac_file
++    mv conftest.h $ac_file
++  fi
++fi; done
++
++EOF
++cat >> $CONFIG_STATUS <<EOF
++
++EOF
++cat >> $CONFIG_STATUS <<\EOF
++
++exit 0
++EOF
++chmod +x $CONFIG_STATUS
++rm -fr confdefs* $ac_clean_files
++test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
++
+Index: xloadimage.4.1.old/configure.in
+===================================================================
+--- /dev/null
++++ xloadimage.4.1.old/configure.in
+@@ -0,0 +1,32 @@
++dnl Process this file with autoconf to produce a configure script.
++AC_INIT(xloadimage.c)
++AC_CONFIG_HEADER(config.h)
++
++dnl Checks for programs.
++AC_PROG_CC
++
++dnl Checks for header files.
++AC_PATH_XTRA
++AC_HEADER_STDC
++AC_CHECK_HEADERS(malloc.h strings.h sys/time.h unistd.h)
++
++dnl Checks for libraries.
++dnl Replace `main' with a function in -lm:
++AC_CHECK_LIB(m, main)
++dnl Replace `main' with a function in -lz:
++AC_CHECK_LIB(z, main)
++dnl Replace `main' with a function in -lpng:
++AC_CHECK_LIB(png, main)
++dnl Replace `main' with a function in -ljpeg:
++AC_CHECK_LIB(jpeg, main)
++dnl Replace `main' with a function in -ltiff:
++AC_CHECK_LIB(tiff, main)
++
++
++dnl Checks for typedefs, structures, and compiler characteristics.
++
++dnl Checks for library functions.
++AC_TYPE_SIGNAL
++AC_CHECK_FUNCS(select)
++
++AC_OUTPUT(Makefile)
+Index: xloadimage.4.1.old/configure.scan
+===================================================================
+--- /dev/null
++++ xloadimage.4.1.old/configure.scan
+@@ -0,0 +1,32 @@
++dnl Process this file with autoconf to produce a configure script.
++AC_INIT(buildshar.c)
++
++dnl Checks for programs.
++AC_PROG_CC
++
++dnl Checks for libraries.
++dnl Replace `main' with a function in -lX11:
++AC_CHECK_LIB(X11, main)
++dnl Replace `main' with a function in -lXext:
++AC_CHECK_LIB(Xext, main)
++dnl Replace `main' with a function in -ljpeg:
++AC_CHECK_LIB(jpeg, main)
++dnl Replace `main' with a function in -lm:
++AC_CHECK_LIB(m, main)
++dnl Replace `main' with a function in -ltiff:
++AC_CHECK_LIB(tiff, main)
++dnl Replace `main' with a function in -lz:
++AC_CHECK_LIB(z, main)
++
++dnl Checks for header files.
++AC_PATH_X
++AC_HEADER_STDC
++AC_CHECK_HEADERS(malloc.h strings.h sys/time.h unistd.h)
++
++dnl Checks for typedefs, structures, and compiler characteristics.
++
++dnl Checks for library functions.
++AC_TYPE_SIGNAL
++AC_CHECK_FUNCS(mkdir select)
++
++AC_OUTPUT(Makefile)
+Index: xloadimage.4.1.old/fbm.c
+===================================================================
+--- xloadimage.4.1.old.orig/fbm.c
++++ xloadimage.4.1.old/fbm.c
+@@ -45,12 +45,12 @@ static int  fbmin_img_bits;	       /* co
+ static int  fbmin_img_rowlen;	       /* length of one row of data */
+ static int  fbmin_img_plnlen;	       /* length of one plane of data */
+ static int  fbmin_img_clrlen;	       /* length of the colormap */
+-static int  fbmin_img_aspect;	       /* image aspect ratio */
++static double  fbmin_img_aspect;	       /* image aspect ratio */
+ static int  fbmin_img_physbits;	       /* physical bits per pixel */
+ static char *fbmin_img_title;		/* name of image */
+ static char *fbmin_img_credit;		/* credit for image */
+ 
+-static fbmin_image_test()
++static int fbmin_image_test()
+ {
+   if (fbmin_img_width < 1 || fbmin_img_width > 32767) {
+     fprintf (stderr, "Invalid width (%d) on input\n", fbmin_img_width);
+@@ -93,7 +93,7 @@ static fbmin_image_test()
+   }
+ 
+   if (fbmin_img_aspect < 0.01 || fbmin_img_aspect > 100.0) {
+-    fprintf (stderr, "Invalid aspect ratio %lg on input\n",
++    fprintf (stderr, "Invalid aspect ratio %1.3f on input\n",
+ 	     fbmin_img_aspect);
+     return FBMIN_ERR_BAD_SD;
+   }
+@@ -133,7 +133,7 @@ ZFILE *s;
+   fbmin_img_rowlen   = atoi(phdr.rowlen);
+   fbmin_img_plnlen   = atoi(phdr.plnlen);
+   fbmin_img_clrlen   = atoi(phdr.clrlen);
+-  fbmin_img_aspect   = atoi(phdr.aspect);
++  fbmin_img_aspect   = atof(phdr.aspect);
+   fbmin_img_physbits = atoi(phdr.physbits);
+   fbmin_img_title    = phdr.title;
+   fbmin_img_credit   = phdr.credits;
+@@ -204,7 +204,6 @@ Image *fbmLoad(fullname, name, verbose)
+   register int    x, y, j, k, rowlen, plnlen;
+   unsigned char *pixptr, *cm;
+   unsigned int map_size;
+-  extern int Scrn;
+   unsigned char *r, *g, *b;
+ 
+   if (! (zf= zopen(fullname)))
+Index: xloadimage.4.1.old/image.h
+===================================================================
+--- xloadimage.4.1.old.orig/image.h
++++ xloadimage.4.1.old/image.h
+@@ -8,21 +8,25 @@
+  * copyright information.
+  */
+ 
++#ifndef __IMAGE_H__
++#define __IMAGE_H__
++
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
++
+ #include "copyright.h"
+ 
+ #include <stdio.h>
+ 
+ /* ANSI-C stuff
+  */
+-#if defined(__STDC__)
+-
++#ifdef STDC_HEADERS
+ #if !defined(_ArgProto)
+ #define _ArgProto(ARGS) ARGS
+ #endif
+-
+ #include <stdlib.h>
+-
+-#else /* !__STDC__ */
++#else /* !STDC_HEADERS */
+ 
+ #if !defined(const) /* "const" is an ANSI thing */
+ #define const
+@@ -31,26 +35,14 @@
+ #define _ArgProto(ARGS) ()
+ #endif
+ 
+-#endif /* !__STDC__ */
++#endif /* !STDC_HEADERS */
+ 
+ /* handle strings stuff that varies between BSD and ANSI/SYSV
+  */
+-#if defined(IS_BSD) && !defined(__STDC__)
+-#include <strings.h>
+-#if !defined(strchr) && !defined(index)
+-#define strchr index
+-#endif
+-#if !defined(strrchr) && !defined(rindex)
+-#define strrchr rindex
+-#endif
+-#if !defined(memcpy) && !defined(bcopy)
+-#define memcpy(D,S,L) bcopy((char *)(S),(char *)(D),(L))
+-#endif
+-#if !defined(memset) && !defined(bzero)
+-/* #define memset(D,V,L) bzero(D,L) */
+-#endif
+-#else /* !IS_BSD || __STDC__ */
+ #include <string.h>
++#ifdef HAVE_STRINGS_H
++#include <strings.h>
++#else /* !HAVE_STRINGS_H */
+ #if !defined(index) && !defined(strchr)
+ #define index strchr
+ #endif
+@@ -63,7 +55,7 @@
+ #if !defined(bzero) && !defined(memset)
+ #define bzero(D,L) memset((void *)(D),0,(L))
+ #endif
+-#endif /* !IS_BSD || __STDC__ */
++#endif /* !HAVE_STRINGS_H */
+ 
+ #ifdef VMS
+ #define R_OK 4
+@@ -230,7 +222,7 @@ void gray _ArgProto((Image *image, unsig
+ Image *normalize _ArgProto((Image *image, unsigned int verbose));
+ 
+ /* compress.c */
+-void compress _ArgProto((Image *image, unsigned int verbose));
++void compress_cmap _ArgProto((Image *image, unsigned int verbose));
+ 
+ /* dither.c */
+ Image *dither _ArgProto((Image *image, unsigned int verbose));
+@@ -331,3 +323,5 @@ extern int _Xdebug;
+ #else /* !DEBUG */
+ #define debug(ARGS)
+ #endif /* !DEBUG */
++
++#endif /* __IMAGE_H__ */
+Index: xloadimage.4.1.old/imagetypes.c
+===================================================================
+--- xloadimage.4.1.old.orig/imagetypes.c
++++ xloadimage.4.1.old/imagetypes.c
+@@ -16,7 +16,7 @@
+ 
+ /* SUPPRESS 560 */
+ 
+-extern int errno;
++extern int findImage(char *name, char *fullname);
+ 
+ /* load a named image
+  */
+@@ -46,7 +46,7 @@ Image *loadImage(globalopts, options, na
+   if (opt) {
+     for (a= 0; ImageTypes[a].loader; a++)
+       if (!strncmp(ImageTypes[a].type, opt->info.type, strlen(opt->info.type))) {
+-	if (image= ImageTypes[a].loader(fullname, name, verbose)) {
++	if ((image= ImageTypes[a].loader(fullname, name, verbose))) {
+ 	  zreset(NULL);
+ 
+ 	  /* this converts a 1-bit RGB image to a bitmap prior to blitting
+@@ -79,7 +79,7 @@ Image *loadImage(globalopts, options, na
+    */
+   for (a= 0; ImageTypes[a].loader; a++) {
+     debug(("Checking %s against loader for %s\n", fullname, ImageTypes[a].name));
+-    if (image= ImageTypes[a].loader(fullname, name, verbose)) {
++    if ((image= ImageTypes[a].loader(fullname, name, verbose))) {
+       zreset(NULL);
+ 
+       /* this does the 1-bit conversion as above.
+@@ -145,7 +145,10 @@ void dumpImage(image, type, filename, ve
+     optptr++; /* skip comma */
+   }
+   else
+-    strcpy(typename, type);
++    {
++      strncpy(typename, type, 31);
++      typename[31] = '\0';
++    }
+ 
+   for (a= 0; ImageTypes[a].loader; a++)
+     if (!strncmp(ImageTypes[a].type, typename, strlen(typename))) {
+Index: xloadimage.4.1.old/imagetypes.h
+===================================================================
+--- xloadimage.4.1.old.orig/imagetypes.h
++++ xloadimage.4.1.old/imagetypes.h
+@@ -7,6 +7,9 @@
+  * jim frost 10.15.89
+  */
+ 
++#ifndef __IMAGETYPES_H__
++#define __IMAGETYPES_H__
++
+ Image *niffLoad();
+ Image *facesLoad();
+ Image *pbmLoad();
+@@ -28,12 +31,15 @@ Image *pdsLoad();
+ #else
+ Image *vicarLoad();
+ #endif
+-#ifdef HAS_JPEG
++#ifdef HAVE_LIBJPEG
+ Image *jpegLoad();
+ #endif
+-#ifdef HAS_TIFF
++#ifdef HAVE_LIBTIFF
+ Image *tiffLoad();
+ #endif
++#ifdef HAVE_LIBPNG
++Image *pngLoad();
++#endif
+ 
+ int niffIdent();
+ int facesIdent();
+@@ -56,18 +62,21 @@ int pdsIdent();
+ #else
+ int vicarIdent();
+ #endif
+-#ifdef HAS_JPEG
++#ifdef HAVE_LIBJPEG
+ int jpegIdent();
+ #endif
+-#ifdef HAS_TIFF
++#ifdef HAVE_LIBTIFF
+ int tiffIdent();
+ #endif
++#ifdef HAVE_LIBPNG
++int pngIdent();
++#endif
+ 
+ void niffDump();
+-#ifdef HAS_JPEG
++#ifdef HAVE_LIBJPEG
+ void jpegDump();
+ #endif
+-#ifdef HAS_TIFF
++#ifdef HAVE_LIBTIFF
+ void tiffDump();
+ #endif
+ void pbmDump();
+@@ -82,32 +91,39 @@ struct {
+   char  *type;            /* image type name */
+   char  *name;            /* name of this image format */
+ } ImageTypes[] = {
+-  niffIdent,      niffLoad,      niffDump,    "niff",      "Native Image File Format (NIFF)",
+-  sunRasterIdent, sunRasterLoad, NULL,        "sunraster", "Sun Rasterfile",
+-  gifIdent,       gifLoad,       NULL,        "gif",       "GIF Image",
+-#ifdef HAS_JPEG
+-  jpegIdent,      jpegLoad,      jpegDump,    "jpeg",      "JFIF-style JPEG Image",
+-#endif
+-#ifdef HAS_TIFF
+-  tiffIdent,      tiffLoad,      tiffDump,    "tiff",      "TIFF image",
+-#endif
+-  fbmIdent,       fbmLoad,       NULL,        "fbm",       "FBM Image",
+-  cmuwmIdent,     cmuwmLoad,     NULL,        "cmuraster", "CMU WM Raster",
+-  pbmIdent,       pbmLoad,       pbmDump,     "pbm",       "Portable Bit Map (PBM, PGM, PPM)",
+-  facesIdent,     facesLoad,     NULL,        "faces",     "Faces Project",
+-  rleIdent,       rleLoad,       NULL,        "rle",       "Utah RLE Image",
+-  xwdIdent,       xwdLoad,       NULL,        "xwd",       "X Window Dump",
+-  vffIdent,       vffLoad,       NULL,        "vff",       "Sun Visualization File Format",
+-  mcidasIdent,    mcidasLoad,    NULL,        "mcidas",    "McIDAS areafile",
++  {niffIdent,      niffLoad,      niffDump,    "niff",      "Native Image File Format (NIFF)"},
++  {sunRasterIdent, sunRasterLoad, NULL,        "sunraster", "Sun Rasterfile"},
++  {gifIdent,       gifLoad,       NULL,        "gif",       "GIF Image"},
++#ifdef HAVE_LIBJPEG
++  {jpegIdent,      jpegLoad,      jpegDump,    "jpeg",      "JFIF-style JPEG Image"},
++#endif
++#ifdef HAVE_LIBTIFF
++  {tiffIdent,      tiffLoad,      tiffDump,    "tiff",      "TIFF image"},
++#endif
++#ifdef HAVE_LIBPNG
++  {pngIdent,       pngLoad,       NULL,        "png",       "PNG image"},
++#endif
++  {fbmIdent,       fbmLoad,       NULL,        "fbm",       "FBM Image"},
++  {cmuwmIdent,     cmuwmLoad,     NULL,        "cmuraster", "CMU WM Raster"},
++  {pbmIdent,       pbmLoad,       pbmDump,     "pbm",       "Portable Bit Map (PBM, PGM, PPM)"},
++  {facesIdent,     facesLoad,     NULL,        "faces",     "Faces Project"},
++  {rleIdent,       rleLoad,       NULL,        "rle",       "Utah RLE Image"},
++  {xwdIdent,       xwdLoad,       NULL,        "xwd",       "X Window Dump"},
++  {vffIdent,       vffLoad,       NULL,        "vff",       "Sun Visualization File Format"},
++  {mcidasIdent,    mcidasLoad,    NULL,        "mcidas",    "McIDAS areafile"},
+ #if 0
+-  pdsIdent,       pdsLoad,       NULL,        "pds",       "PDS/VICAR Image",
++  {pdsIdent,       pdsLoad,       NULL,        "pds",       "PDS/VICAR Image"},
+ #else
+-  vicarIdent,     vicarLoad,     NULL,        "vicar",     "VICAR Image",
++  {vicarIdent,     vicarLoad,     NULL,        "vicar",     "VICAR Image"},
+ #endif
+-  pcxIdent,       pcxLoad,       NULL,        "pcx",       "PC Paintbrush Image",
+-  imgIdent,       imgLoad,       NULL,        "gem",       "GEM Bit Image",
+-  macIdent,       macLoad,       NULL,        "macpaint",  "MacPaint Image",
+-  xpixmapIdent,   xpixmapLoad,   NULL,        "xpm",       "X Pixmap",
+-  xbitmapIdent,   xbitmapLoad,   NULL,        "xbm",       "X Bitmap",
+-  NULL,           NULL,          NULL,         NULL,        NULL
++  {pcxIdent,       pcxLoad,       NULL,        "pcx",       "PC Paintbrush Image"},
++  {imgIdent,       imgLoad,       NULL,        "gem",       "GEM Bit Image"},
++  {macIdent,       macLoad,       NULL,        "macpaint",  "MacPaint Image"},
++  {xpixmapIdent,   xpixmapLoad,   NULL,        "xpm",       "X Pixmap"},
++  {xbitmapIdent,   xbitmapLoad,   NULL,        "xbm",       "X Bitmap"},
++  {NULL,           NULL,          NULL,         NULL,        NULL}
+ };
++
++void dumpImage (Image *image, char *type, char *filename, int verbose);
++
++#endif /* __IMAGETYPES_H__ */
+Index: xloadimage.4.1.old/img.c
+===================================================================
+--- xloadimage.4.1.old.orig/img.c
++++ xloadimage.4.1.old/img.c
+@@ -14,10 +14,9 @@
+ #include <stdlib.h>
+ #include <string.h>
+ #include <math.h>
++#include <errno.h>
+ #include "image.h"
+ 
+-extern int errno;
+-
+ #define TRUE  1
+ #define FALSE 0
+ 
+@@ -71,11 +70,15 @@ typedef struct ximg_header
+ void (*transf)    ();
+ 
+ static int vdi2pli();
++#ifdef UNUSED_FUNCTIONS
+ static int pli2vdi();
++#endif /* UNUSED_FUNCTIONS */
+ 
+ static void   transf0    ();
+ static void   transf1    ();
++#ifdef UNUSED_FUNCTIONS
+ static void   transf2    ();
++#endif /* UNUSED_FUNCTIONS */
+ static void   transf3    ();
+ static void   xread_img  ();
+ static void   xread_line ();
+@@ -89,8 +92,9 @@ XIMG_HEADER             xheader;
+ unsigned int            ScanByteBreite, max_planes,
+                         pattern_len, plane, x, y, ByteNr, height;
+ unsigned char           *ptr, Muster[ALL_PLANES][BUFSIZ], tmp[BUFSIZ];
++#ifdef UNUSED_FUNCTIONS
+ static unsigned char    *bitplane[ALL_PLANES], *lastbitplane;
+-
++#endif /* UNUSED_FUNCTIONS */
+ 
+ 
+ static void transf0(bitimage, plane, value, planes)
+@@ -128,7 +132,7 @@ static void transf1(bitimage, plane, val
+ }
+ 
+ 
+-
++#ifdef UNUSED_FUNCTIONS
+ static void transf2(bitimage, plane, value, planes)
+      unsigned char *bitimage;
+      unsigned int   plane;
+@@ -146,6 +150,7 @@ static void transf2(bitimage, plane, val
+   bitplane[plane][x] = value;
+   x++;
+ }
++#endif /* UNUSED_FUNCTIONS */
+ 
+ static void transf3(bitimage, plane, value, planes)
+      unsigned char *bitimage;
+@@ -367,9 +372,10 @@ static int ident_img(name)
+   ZFILE   *file;
+   long    size = 0;
+   int     w, h, nplanes;
+-  char    extention[5];
+ 
+ #if 0
++  char    extention[5];
++
+   strncpy (extention, name+strlen(name)-4, 4);
+   extention[4] = '\0';
+   if (strcmp(extention, ".IMG") != 0 && strcmp(extention, ".img") != 0)
+@@ -402,7 +408,7 @@ static int ident_img(name)
+     printf("%s is a %dx%d monochrome IMG-file\n",name , w, h);
+   else
+     if (nplanes != 24)
+-      printf("%s is a %dx%d IMG-file with %ld colors\n",name , w, h,
++      printf("%s is a %dx%d IMG-file with %d colors\n",name , w, h,
+ 	     (1 << nplanes));
+     else
+       printf("%s is a %dx%d %d-bit IMG-file\n",name , w, h, nplanes);
+@@ -413,7 +419,7 @@ static Image *load_img(name)
+      char *name;
+ {
+   ZFILE           *file;
+-  Image           *image;
++  Image           *image = NULL;
+   unsigned long    w, h, nplanes, headlength, scanwidth;
+   int              colors;
+   long             i, dummy;
+@@ -564,7 +570,6 @@ static int ident_ximg(name)
+   ZFILE  *file;
+   long    size = 0;
+   int     w, h, nplanes;
+-  char    extention[5];
+ 
+   if ((file = zopen(name)) == NULL)
+   {
+@@ -593,7 +598,7 @@ static int ident_ximg(name)
+ 
+   printf("%s\n  is a %dx%d ",name, w, h);
+   if (nplanes != 24)
+-    printf("RGB XIMG-file with %ld colors\n", 1<<nplanes);
++    printf("RGB XIMG-file with %d colors\n", 1<<nplanes);
+   else
+     printf("24-bit XIMG-file\n");
+   return (1);
+@@ -602,8 +607,6 @@ static int ident_ximg(name)
+ static int vdi2pli(vdi, plimax)
+      int vdi, plimax;
+ {
+-  extern unsigned char indexToCode[];
+-  extern int           work_ext[];
+   static char          vdi2pli[] = {0, 15, 1, 2, 4, 6, 3, 5, 7, 8, 9, 10, 12, 14, 11, 13 };
+   
+   if (vdi == 1)
+@@ -614,7 +617,7 @@ static int vdi2pli(vdi, plimax)
+ }
+ 
+ 
+-
++#ifdef UNUSED_FUNCTIONS
+ static int pli2vdi(pli, plimax)
+      int pli, plimax;
+ {
+@@ -626,15 +629,16 @@ static int pli2vdi(pli, plimax)
+     return(pli);
+   return(pli2vdi[pli]);
+ }
++#endif /* UNUSED_FUNCTIONS */
+ 
+ static Image *load_ximg(name)
+      char *name;
+ {
+   void            transferRGBMap();
+   ZFILE          *file;
+-  Image          *image;
++  Image          *image = NULL;
+   unsigned long   w, h, nplanes, scanwidth;
+-  int             i, color, colors;
++  int             color, colors;
+   struct RGB_LIST
+   {
+     unsigned int red;
+Index: xloadimage.4.1.old/install-sh
+===================================================================
+--- /dev/null
++++ xloadimage.4.1.old/install-sh
+@@ -0,0 +1,238 @@
++#! /bin/sh
++#
++# install - install a program, script, or datafile
++# This comes from X11R5.
++#
++# Calling this script install-sh is preferred over install.sh, to prevent
++# `make' implicit rules from creating a file called install from it
++# when there is no Makefile.
++#
++# This script is compatible with the BSD install script, but was written
++# from scratch.
++#
++
++
++# set DOITPROG to echo to test this script
++
++# Don't use :- since 4.3BSD and earlier shells don't like it.
++doit="${DOITPROG-}"
++
++
++# put in absolute paths if you don't have them in your path; or use env. vars.
++
++mvprog="${MVPROG-mv}"
++cpprog="${CPPROG-cp}"
++chmodprog="${CHMODPROG-chmod}"
++chownprog="${CHOWNPROG-chown}"
++chgrpprog="${CHGRPPROG-chgrp}"
++stripprog="${STRIPPROG-strip}"
++rmprog="${RMPROG-rm}"
++mkdirprog="${MKDIRPROG-mkdir}"
++
++tranformbasename=""
++transform_arg=""
++instcmd="$mvprog"
++chmodcmd="$chmodprog 0755"
++chowncmd=""
++chgrpcmd=""
++stripcmd=""
++rmcmd="$rmprog -f"
++mvcmd="$mvprog"
++src=""
++dst=""
++dir_arg=""
++
++while [ x"$1" != x ]; do
++    case $1 in
++	-c) instcmd="$cpprog"
++	    shift
++	    continue;;
++
++	-d) dir_arg=true
++	    shift
++	    continue;;
++
++	-m) chmodcmd="$chmodprog $2"
++	    shift
++	    shift
++	    continue;;
++
++	-o) chowncmd="$chownprog $2"
++	    shift
++	    shift
++	    continue;;
++
++	-g) chgrpcmd="$chgrpprog $2"
++	    shift
++	    shift
++	    continue;;
++
++	-s) stripcmd="$stripprog"
++	    shift
++	    continue;;
++
++	-t=*) transformarg=`echo $1 | sed 's/-t=//'`
++	    shift
++	    continue;;
++
++	-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
++	    shift
++	    continue;;
++
++	*)  if [ x"$src" = x ]
++	    then
++		src=$1
++	    else
++		# this colon is to work around a 386BSD /bin/sh bug
++		:
++		dst=$1
++	    fi
++	    shift
++	    continue;;
++    esac
++done
++
++if [ x"$src" = x ]
++then
++	echo "install:	no input file specified"
++	exit 1
++else
++	true
++fi
++
++if [ x"$dir_arg" != x ]; then
++	dst=$src
++	src=""
++	
++	if [ -d $dst ]; then
++		instcmd=:
++	else
++		instcmd=mkdir
++	fi
++else
++
++# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
++# might cause directories to be created, which would be especially bad 
++# if $src (and thus $dsttmp) contains '*'.
++
++	if [ -f $src -o -d $src ]
++	then
++		true
++	else
++		echo "install:  $src does not exist"
++		exit 1
++	fi
++	
++	if [ x"$dst" = x ]
++	then
++		echo "install:	no destination specified"
++		exit 1
++	else
++		true
++	fi
++
++# If destination is a directory, append the input filename; if your system
++# does not like double slashes in filenames, you may need to add some logic
++
++	if [ -d $dst ]
++	then
++		dst="$dst"/`basename $src`
++	else
++		true
++	fi
++fi
++
++## this sed command emulates the dirname command
++dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
++
++# Make sure that the destination directory exists.
++#  this part is taken from Noah Friedman's mkinstalldirs script
++
++# Skip lots of stat calls in the usual case.
++if [ ! -d "$dstdir" ]; then
++defaultIFS='	
++'
++IFS="${IFS-${defaultIFS}}"
++
++oIFS="${IFS}"
++# Some sh's can't handle IFS=/ for some reason.
++IFS='%'
++set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
++IFS="${oIFS}"
++
++pathcomp=''
++
++while [ $# -ne 0 ] ; do
++	pathcomp="${pathcomp}${1}"
++	shift
++
++	if [ ! -d "${pathcomp}" ] ;
++        then
++		$mkdirprog "${pathcomp}"
++	else
++		true
++	fi
++
++	pathcomp="${pathcomp}/"
++done
++fi
++
++if [ x"$dir_arg" != x ]
++then
++	$doit $instcmd $dst &&
++
++	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
++	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
++	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
++	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
++else
++
++# If we're going to rename the final executable, determine the name now.
++
++	if [ x"$transformarg" = x ] 
++	then
++		dstfile=`basename $dst`
++	else
++		dstfile=`basename $dst $transformbasename | 
++			sed $transformarg`$transformbasename
++	fi
++
++# don't allow the sed command to completely eliminate the filename
++
++	if [ x"$dstfile" = x ] 
++	then
++		dstfile=`basename $dst`
++	else
++		true
++	fi
++
++# Make a temp file name in the proper directory.
++
++	dsttmp=$dstdir/#inst.$$#
++
++# Move or copy the file name to the temp name
++
++	$doit $instcmd $src $dsttmp &&
++
++	trap "rm -f ${dsttmp}" 0 &&
++
++# and set any options; do chmod last to preserve setuid bits
++
++# If any of these fail, we abort the whole thing.  If we want to
++# ignore errors from any of these, just make sure not to ignore
++# errors from the above "$doit $instcmd $src $dsttmp" command.
++
++	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
++	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
++	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
++	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
++
++# Now rename the file to the real destination.
++
++	$doit $rmcmd -f $dstdir/$dstfile &&
++	$doit $mvcmd $dsttmp $dstdir/$dstfile 
++
++fi &&
++
++
++exit 0
+Index: xloadimage.4.1.old/jpeg.c
+===================================================================
+--- xloadimage.4.1.old.orig/jpeg.c
++++ xloadimage.4.1.old/jpeg.c
+@@ -4,509 +4,314 @@
+  * free JPEG software.  See jpeg.README for more information.
+  *
+  * This code is based on example.c from the IJG v4 distribution.
++ * 1998/08/19: Change for IJG v6.0a. dump Progressive JPEG support.
+  */
+ 
+ #include "image.h"	/* xloadimage declarations */
+-#include "jpeg.conf.h"  /* definitions used in jpeg directory */
+-#include "jpeg/jinclude.h" /* IJG declarations */
++#ifdef HAVE_LIBJPEG
++#include "options.h"
++#include <jpeglib.h>
++#include <jerror.h>
+ #include <setjmp.h>	/* need setjmp/longjmp */
+ 
+-/* Error-catching routines */
++#undef  DEBUG
++/* #define  DEBUG */
++#undef  debug
++
++#ifdef DEBUG
++# define debug(xx)	fprintf(stderr,xx)
++#else
++# define debug(xx)
++#endif
++
++static Image *image;    /* xloadimage image being returned */
+ 
+ static char *filename;
+-static unsigned int verbose;
+-static unsigned int identify;
+ static jmp_buf setjmp_buffer;	/* for return to caller */
+-static external_methods_ptr emethods; /* needed for access to message_parm */
++ZFILE * zinput_file;	/* tells input routine where to read JPEG */
++static JOCTET jpeg_read_buff[1024 * 16];
+ 
+-static void
+-trace_message (msgtext)
+-     char *msgtext;
++/*
++ * source manager
++ */
++static void init_source( j_decompress_ptr cinfo)
+ {
+-  fprintf(stderr, "jpegLoad: %s - ", filename);
+-  fprintf(stderr, msgtext,
+-	  emethods->message_parm[0], emethods->message_parm[1],
+-	  emethods->message_parm[2], emethods->message_parm[3],
+-	  emethods->message_parm[4], emethods->message_parm[5],
+-	  emethods->message_parm[6], emethods->message_parm[7]);
+-  fprintf(stderr, "\n");	/* there is no \n in the format string! */
+-}
+ 
+-static void
+-error_exit (msgtext)
+-     char *msgtext;
+-{
+-  trace_message(msgtext);	/* report the error message */
+-  (*emethods->free_all) ();	/* clean up memory allocation & temp files */
+-  longjmp(setjmp_buffer, 1);	/* return control to outer routine */
++    debug("init_source()");
+ }
+ 
++static boolean fill_input_buffer( j_decompress_ptr cinfo)
++{
++    struct jpeg_source_mgr *src = cinfo->src;
+ 
+-/* Output-acceptance routines */
+-
+-static Image *image;		/* xloadimage image being returned */
+-static int rows_put;		/* Number of rows copied to image */
+-
+-
+-static void
+-output_init (cinfo)
+-     decompress_info_ptr cinfo;
+-/* Initialize for output */
+-{
+-  int i;
+-
+-  if (cinfo->out_color_space == CS_GRAYSCALE) {
+-    image = newRGBImage(cinfo->image_width,cinfo->image_height,8);
+-    image->title = dupString(filename);
+-    /* set a linear map */
+-    for(i=0;i<256;i++) {
+-      *(image->rgb.red + i) = 
+-	*(image->rgb.green + i) = 
+-	  *(image->rgb.blue + i) = i<<8;
+-    }
+-    image->rgb.used = 256;
+-  } else if (cinfo->out_color_space == CS_RGB) {
+-    image = newTrueImage(cinfo->image_width,cinfo->image_height);
+-    image->title = dupString(filename);
+-  } else {
+-    image = NULL;
+-    ERREXIT(cinfo->emethods, "Cannot cope with JPEG image colorspace");
+-  }
+-  rows_put = 0;
++    debug("fill_input_buffer()");
++#ifdef DEBUG
++    fprintf( stderr,"fill_input_buffer(): %d  ",src->bytes_in_buffer);
++#endif
++    src->next_input_byte = jpeg_read_buff;
++    src->bytes_in_buffer = zread(zinput_file,
++				 jpeg_read_buff, sizeof(jpeg_read_buff));
++    if(src->bytes_in_buffer <= 0){
++	WARNMS(cinfo, JWRN_JPEG_EOF);
++	jpeg_read_buff[0] = 0xFF;
++	jpeg_read_buff[1] = JPEG_EOI;
++	src->bytes_in_buffer = 2;
++    }
++    return TRUE;
++}
++
++static void skip_input_data( j_decompress_ptr cinfo, long num_bytes)
++{
++    int rest;
++    struct jpeg_source_mgr *src = cinfo->src;
++
++    debug("skip_input_data()");
++#ifdef DEBUG
++    fprintf(stderr,": %ld,%d  ", num_bytes, src->bytes_in_buffer);
++#endif
++    if( num_bytes < 1) return;
++    rest = src->bytes_in_buffer;
++    if( num_bytes < rest) {
++	src->next_input_byte += num_bytes;
++	src->bytes_in_buffer -= num_bytes;;
++	return;
++    }
++    num_bytes -= rest;
++    while( num_bytes--) {
++	zgetc(zinput_file);
++    }
++    fill_input_buffer(cinfo);
+ }
+ 
+-
+-static void
+-put_color_map (cinfo, num_colors, colormap)
+-     decompress_info_ptr cinfo;
+-     int num_colors;
+-     JSAMPARRAY colormap;
+-/* Write the color map -- should not be called */
++static boolean resync_to_restart( j_decompress_ptr cinfo, int desired)
+ {
+-  fprintf(stderr, "put_color_map called: there is a bug here somewhere!\n");
++    return jpeg_resync_to_restart( cinfo, desired);
+ }
+ 
+-
+-static void
+-put_pixel_rows (cinfo, num_rows, pixel_data)
+-     decompress_info_ptr cinfo;
+-     int num_rows;
+-     JSAMPIMAGE pixel_data;
+-/* Write some rows of output data */
+-{
+-  register unsigned char *bufp;
+-  register JSAMPROW ptr0, ptr1, ptr2;
+-  register long col;
+-  long width = cinfo->image_width;
+-  int row;
+-  
+-  if (cinfo->out_color_space == CS_GRAYSCALE) {
+-    bufp = image->data + rows_put * width;
+-    /* Assume JSAMPLE == chars */
+-    for (row = 0; row < num_rows; row++) {
+-      bcopy(pixel_data[0][row],bufp,width);
+-      bufp += width;
+-    }
+-  } else {
+-    bufp = image->data + rows_put * width * 3;
+-    for (row = 0; row < num_rows; row++) {
+-      ptr0 = pixel_data[0][row];
+-      ptr1 = pixel_data[1][row];
+-      ptr2 = pixel_data[2][row];
+-      for (col = width; col > 0; col--) {
+-	*bufp++ = *ptr0++;
+-	*bufp++ = *ptr1++;
+-	*bufp++ = *ptr2++;
+-      }
+-    }
+-  }
+-  rows_put += num_rows;
++static void term_source( j_decompress_ptr cinfo)
++{
++    debug("term_source()");
+ }
+ 
+-
++/*
++ *  error manager
++ */
+ static void
+-output_term (cinfo)
+-     decompress_info_ptr cinfo;
+-/* Finish up at the end of the output */
++output_message ( j_common_ptr cominfo)
+ {
+-  /* No work here */
+-}
+-
++    char buf[JMSG_LENGTH_MAX];
+ 
+-/* Input-file-reading routine */
+-
+-
+-static ZFILE * input_file;	/* tells input routine where to read JPEG */
++    (*cominfo->err->format_message)(cominfo, buf);
++    fprintf(stderr, "jpegLoad: %s - %s\n", filename, buf);
++}
+ 
+ 
+-static int
+-read_jpeg_data (cinfo)
+-     decompress_info_ptr cinfo;
++static void error_exit (j_common_ptr cominfo)
+ {
+-  cinfo->next_input_byte = cinfo->input_buffer + MIN_UNGET;
+-
+-  cinfo->bytes_in_buffer = zread(input_file,
+-				 (byte *)cinfo->next_input_byte,
+-				 JPEG_BUF_SIZE);
+-  
+-  if (cinfo->bytes_in_buffer <= 0) {
+-    WARNMS(cinfo->emethods, "Premature EOF in JPEG file");
+-    cinfo->next_input_byte[0] = (char) 0xFF;
+-    cinfo->next_input_byte[1] = (char) 0xD9; /* EOI marker */
+-    cinfo->bytes_in_buffer = 2;
+-  }
+-
+-  return JGETC(cinfo);
++    output_message( cominfo);
++    longjmp(setjmp_buffer, 1);	/* return control to outer routine */
+ }
+ 
+ 
+-/*  Required control-hook routine */
+-
+-
+ static void
+-d_ui_method_selection (cinfo)
+-     decompress_info_ptr cinfo;
++jpegInfo (cinfo)
++     j_decompress_ptr cinfo;
+ {
+-  /* if grayscale input, force grayscale output; */
+-  /* else leave the output colorspace as set by main routine. */
+-  if (cinfo->jpeg_color_space == CS_GRAYSCALE)
+-    cinfo->out_color_space = CS_GRAYSCALE;
+-
+-  /* Create display of image parameters */
+-  if (verbose) {
++    /* Create display of image parameters */
+     printf("%s is a %dx%d JPEG image, color space ", filename,
+ 	   cinfo->image_width, cinfo->image_height);
+     switch (cinfo->jpeg_color_space) {
+-    case CS_UNKNOWN:
+-      printf("Unknown");
+-      break;
+-    case CS_GRAYSCALE:
+-      printf("Grayscale");
+-      break;
+-    case CS_RGB:
+-      printf("RGB");
+-      break;
+-    case CS_YCbCr:
+-      printf("YCbCr");
+-      break;
+-    case CS_YIQ:
+-      printf("YIQ");
+-      break;
+-    case CS_CMYK:
+-      printf("CMYK");
+-      break;
++    case JCS_GRAYSCALE:
++	printf("Grayscale");
++	break;
++    case JCS_RGB:
++	printf("RGB");
++	break;
++    case JCS_YCbCr:
++	printf("YCbCr");
++	break;
++    case JCS_CMYK:
++	printf("CMYK");
++	break;
++    case JCS_YCCK:
++	printf("YCCK");
++	break;
++    case JCS_UNKNOWN:
++    default:
++	printf("Unknown");
++	break;
+     }
+     printf(", %d comp%s,", cinfo->num_components,
+-	   cinfo->num_components ? "s." : ".");
++	   (cinfo->num_components - 1) ? "s" : "");
++    if (cinfo->progressive_mode)
++	printf(" Progressive,");
+     if (cinfo->arith_code)
+-      printf(" Arithmetic coding\n");
++	printf(" Arithmetic coding.\n");
+     else
+-      printf(" Huffman coding\n");
+-  }
+-
+-  /* Turn off caching beyond this point of the file */
+-  znocache(input_file);
+-
+-  /* If we only wanted to identify the image, abort now */
+-  if (identify) {
+-    (*emethods->free_all) ();	/* clean up memory allocation & temp files */
+-    longjmp(setjmp_buffer, 10);	/* return control with success code */
+-  }
+-
+-  /* select output routines */
+-  cinfo->methods->output_init = output_init;
+-  cinfo->methods->put_color_map = put_color_map;
+-  cinfo->methods->put_pixel_rows = put_pixel_rows;
+-  cinfo->methods->output_term = output_term;
++	printf(" Huffman coding.\n");
+ }
+ 
+ 
+ /* Main control routine for loading */
+ 
+-
+ Image *
+-jpegLoad (fullname, name, vbose)
++jpegLoad (fullname, name, verbose)
+      char *fullname, *name;
+-     unsigned int vbose;
++     unsigned int verbose;
+ {
+-  struct Decompress_info_struct cinfo;
+-  struct Decompress_methods_struct dc_methods;
+-  struct External_methods_struct e_methods;
+-
+-  input_file = zopen(fullname);	/* Open the input file */
+-  if (input_file == NULL)
+-    return NULL;
+-
+-  /* Quick check to see if file starts with JPEG SOI marker */
+-  if (zgetc(input_file) != 0xFF || zgetc(input_file) != 0xD8) {
+-    zclose(input_file);
+-    return NULL;
+-  }
++    struct jpeg_decompress_struct cinfo;
++    struct jpeg_source_mgr src_mgr;
++    struct jpeg_error_mgr err_mgr;
++    int i, row_stride;
++    byte *bufp;
++
++    zinput_file = zopen(fullname);	/* Open the input file */
++    if (zinput_file == NULL)
++	return NULL;
++    filename = name;		/* copy parms to static vars */
++    image = NULL;		/* in case we fail before creating image */
++
++    jpeg_create_decompress(&cinfo);
++    src_mgr.init_source = init_source;
++    src_mgr.fill_input_buffer = fill_input_buffer;
++    src_mgr.skip_input_data = skip_input_data;
++    src_mgr.resync_to_restart = resync_to_restart;
++    src_mgr.term_source = term_source;
++    cinfo.src = &src_mgr;	/* links to method structs */
++    err_mgr.error_exit = error_exit; /* supply error-exit routine */
++    err_mgr.output_message = output_message;
++    err_mgr.trace_level = 0;	/* default = no tracing */
++    err_mgr.num_warnings = 0;	/* no warnings emitted yet */
++    cinfo.err = jpeg_std_error(&err_mgr);
++
++    src_mgr.bytes_in_buffer = 0;
++    fill_input_buffer( &cinfo);
++    /* Quick check to see if file starts with JPEG SOI marker */
++    if(jpeg_read_buff[0] != 0xFF || jpeg_read_buff[1] != 0xD8) {
++	zclose(zinput_file);
++	return NULL;
++    }
++
++    /* prepare setjmp context for possible exit from error_exit */
++    if (setjmp(setjmp_buffer)) {
++	/* If we get here, the JPEG code has signaled an error. */
++	/* Return as much of the image as we could get. */
++	jpeg_destroy_decompress(&cinfo);
++	zclose(zinput_file);
++	return image;
++    }
++      
++    jpeg_read_header(&cinfo, TRUE);
++    if (verbose) jpegInfo(&cinfo);
++    /* Turn off caching beyond this point of the file */
++    znocache(zinput_file);
++    jpeg_start_decompress(&cinfo);
++
++    switch (cinfo.out_color_space) {
++    case JCS_GRAYSCALE:
++	image = newRGBImage(cinfo.image_width,cinfo.image_height,8);
++	image->title = dupString(filename);
++	/* set a linear map */
++	for(i=0;i<256;i++) {
++	    *(image->rgb.red + i) = 
++		*(image->rgb.green + i) = 
++		*(image->rgb.blue + i) = i << 8;
++	}
++	image->rgb.used = 256;
++	break;
++    case JCS_RGB:
++	image = newTrueImage(cinfo.image_width,cinfo.image_height);
++	image->title = dupString(filename);
++	break;
++    default:
++	image = NULL;
++	ERREXITS(&cinfo, 1, "Cannot cope with JPEG image colorspace");
++    }
++
++    row_stride = cinfo.output_width * cinfo.output_components;
++    bufp = image->data;
++    while (cinfo.output_scanline < cinfo.output_height) {
++	jpeg_read_scanlines(&cinfo, &bufp, 1);
++	bufp += row_stride;
++    }
++
++    jpeg_finish_decompress(&cinfo);
++    jpeg_destroy_decompress(&cinfo);
++    zclose(zinput_file);		/* Done, close the input file */
+ 
+-  filename = name;		/* copy parms to static vars */
+-  verbose = vbose;
+-  identify = 0;
+-
+-  image = NULL;			/* in case we fail before creating image */
+-
+-  cinfo.methods = &dc_methods;	/* links to method structs */
+-  cinfo.emethods = &e_methods;
+-  emethods = &e_methods;	/* save struct addr for possible access */
+-  e_methods.error_exit = error_exit; /* supply error-exit routine */
+-  e_methods.trace_message = trace_message; /* supply trace-message routine */
+-  e_methods.trace_level = 0;	/* default = no tracing */
+-  e_methods.num_warnings = 0;	/* no warnings emitted yet */
+-  e_methods.first_warning_level = 0; /* display first corrupt-data warning */
+-  e_methods.more_warning_level = 3; /* but suppress additional ones */
+-
+-  /* prepare setjmp context for possible exit from error_exit */
+-  if (setjmp(setjmp_buffer)) {
+-    /* If we get here, the JPEG code has signaled an error. */
+-    /* Return as much of the image as we could get. */
+-    zclose(input_file);
+     return image;
+-  }
+-
+-  jselmemmgr(&e_methods);	/* select std memory allocation routines */
+-
+-  /* Set up default decompression parameters. */
+-  j_d_defaults(&cinfo, TRUE);
+-
+-  /* Override default methods */
+-  dc_methods.d_ui_method_selection = d_ui_method_selection;
+-  dc_methods.read_jpeg_data = read_jpeg_data;
+-
+-  /* Insert fake SOI into the input buffer --- needed cause we read it above */
+-  cinfo.next_input_byte = cinfo.input_buffer + MIN_UNGET;
+-  cinfo.next_input_byte[0] = (char) 0xFF;
+-  cinfo.next_input_byte[1] = (char) 0xD8; /* SOI marker */
+-  cinfo.bytes_in_buffer = 2;
+-
+-  /* Set up to read a JFIF or baseline-JPEG file. */
+-  /* This is the only JPEG file format currently supported. */
+-  jselrjfif(&cinfo);
+-
+-  /* Here we go! */
+-  jpeg_decompress(&cinfo);
+-
+-  zclose(input_file);		/* Done, close the input file */
+-
+-  return image;
+ }
+ 
+ 
+-/* Main control routine for identifying JPEG without loading */
+-
+-
++/*
++  Main control routine for identifying JPEG without loading
++  return 0: Not jpeg file.
++  */
+ int
+ jpegIdent (fullname, name)
+      char *fullname, *name;
+ {
+-  struct Decompress_info_struct cinfo;
+-  struct Decompress_methods_struct dc_methods;
+-  struct External_methods_struct e_methods;
+-
+-  input_file = zopen(fullname);	/* Open the input file */
+-  if (input_file == NULL)
+-    return 0;
+-
+-  /* Quick check to see if file starts with JPEG SOI marker */
+-  if (zgetc(input_file) != 0xFF || zgetc(input_file) != 0xD8) {
+-    zclose(input_file);
+-    return 0;
+-  }
++    struct jpeg_decompress_struct cinfo;
++    struct jpeg_source_mgr src_mgr;
++    struct jpeg_error_mgr err_mgr;
++
++    zinput_file = zopen(fullname);	/* Open the input file */
++    if (zinput_file == NULL)
++	return 0;
++
++    filename = name;		/* copy parms to static vars */
++
++    jpeg_create_decompress(&cinfo);
++    src_mgr.init_source = init_source;
++    src_mgr.fill_input_buffer = fill_input_buffer;
++    src_mgr.skip_input_data = skip_input_data;
++    src_mgr.resync_to_restart = resync_to_restart;
++    src_mgr.term_source = term_source;
++    cinfo.src = &src_mgr;	/* links to method structs */
++    err_mgr.error_exit = error_exit; /* supply error-exit routine */
++    err_mgr.output_message = output_message;
++    err_mgr.trace_level = 0;	/* default = no tracing */
++    err_mgr.num_warnings = 0;	/* no warnings emitted yet */
++    cinfo.err = jpeg_std_error(&err_mgr);
++
++    src_mgr.bytes_in_buffer = 0;
++    fill_input_buffer( &cinfo);
++    /* Quick check to see if file starts with JPEG SOI marker */
++    if(jpeg_read_buff[0] != 0xFF || jpeg_read_buff[1] != 0xD8) {
++	jpeg_destroy_decompress(&cinfo);
++	zclose(zinput_file);
++	return 0;
++    }
++
++    /* prepare setjmp context for expected exit via longjmp */
++    if (setjmp(setjmp_buffer)) {
++	/* If we get here, the JPEG code has signaled an error. */
++	/* Return 0 since error in the headers means the image is unloadable. */
++	jpeg_destroy_decompress(&cinfo);
++	zclose(zinput_file);
++	return 0;
++    }
++
++    jpeg_read_header(&cinfo, TRUE);
++    jpegInfo(&cinfo);
++    /* Turn off caching beyond this point of the file */
++    znocache(zinput_file);
++    jpeg_destroy_decompress(&cinfo);
++    zclose(zinput_file);
+ 
+-  /* We want to find and display the image dimensions, and also
+-   * verify that the header markers are not corrupt.  To do this,
+-   * we fire up the JPEG decoder as normal, but when d_ui_method_selection
+-   * is called, we abort the process by longjmp'ing back here.
+-   * This works nicely since the headers are all read at that point.
+-   */
+-
+-  filename = name;		/* copy parms to static vars */
+-  verbose = 1;
+-  identify = 1;
+-
+-  cinfo.methods = &dc_methods;	/* links to method structs */
+-  cinfo.emethods = &e_methods;
+-  emethods = &e_methods;	/* save struct addr for possible access */
+-  e_methods.error_exit = error_exit; /* supply error-exit routine */
+-  e_methods.trace_message = trace_message; /* supply trace-message routine */
+-  e_methods.trace_level = 0;	/* default = no tracing */
+-  e_methods.num_warnings = 0;	/* no warnings emitted yet */
+-  e_methods.first_warning_level = 0; /* display first corrupt-data warning */
+-  e_methods.more_warning_level = 3; /* but suppress additional ones */
+-
+-  /* prepare setjmp context for expected exit via longjmp */
+-  switch (setjmp(setjmp_buffer)) {
+-  case 0:
+-    /* First time thru, keep going */
+-    break;
+-  case 10:
+-    /* Successful exit from d_ui_method_selection; return A-OK */
+-    zclose(input_file);
+     return 1;
+-  default:
+-    /* If we get here, the JPEG code has signaled an error. */
+-    /* Return 0 since error in the headers means the image is unloadable. */
+-    zclose(input_file);
+-    return 0;
+-  }
+-
+-  jselmemmgr(&e_methods);	/* select std memory allocation routines */
+-
+-  /* Set up default decompression parameters. */
+-  j_d_defaults(&cinfo, TRUE);
+-
+-  /* Override default methods */
+-  dc_methods.d_ui_method_selection = d_ui_method_selection;
+-  dc_methods.read_jpeg_data = read_jpeg_data;
+-
+-  /* Insert fake SOI into the input buffer --- needed cause we read it above */
+-  cinfo.next_input_byte = cinfo.input_buffer + MIN_UNGET;
+-  cinfo.next_input_byte[0] = (char) 0xFF;
+-  cinfo.next_input_byte[1] = (char) 0xD8; /* SOI marker */
+-  cinfo.bytes_in_buffer = 2;
+-
+-  /* Set up to read a JFIF or baseline-JPEG file. */
+-  /* This is the only JPEG file format currently supported. */
+-  jselrjfif(&cinfo);
+-
+-  /* Here we go! */
+-  jpeg_decompress(&cinfo);
+-
+-  /* Don't expect to get here since d_ui_method_selection should do longjmp */
+-
+-  zclose(input_file);
+-  return 0;
+-}
+-
+-/* information necessary to extract image data
+- */
+-static struct {
+-  Image *image;
+-  byte *current_row;
+-  unsigned int bytes_per_row;
+-} ReadInfo;
+-
+-static void input_init(cinfo)
+-compress_info_ptr cinfo;
+-{
+-  /* this is done in jpegDump()
+-   */
+-}
+-
+-static void input_term(cinfo)
+-compress_info_ptr cinfo;
+-{
+-  /* there is no shutdown necessary
+-   */
+-}
+-
+-/* this reads a single raster line
+- */
+-static void read_row(cinfo, pixel_rows)
+-     compress_info_ptr cinfo;
+-     JSAMPARRAY pixel_rows;
+-{
+-  register int x;
+-  register int pixlen;
+-  register byte *src_row_ptr;
+-  register byte *dest_red_ptr;
+-  register byte *dest_green_ptr;
+-  register byte *dest_blue_ptr;
+-  register Pixel pixval;
+-  register byte mask;
+-
+-  switch (ReadInfo.image->type) {
+-  case IBITMAP:
+-    mask = 0x80;
+-    src_row_ptr = ReadInfo.current_row;
+-    dest_red_ptr = (byte *)pixel_rows[0];
+-    for (x = 0; x < cinfo->image_width; x++) {
+-      pixval = ((*src_row_ptr & mask) > 0 ? 1 : 0);
+-
+-      /* we use the "red" color value under the assumption that they
+-       * are all equal.  that can be wrong if the user used -foreground
+-       * or -background.  I don't care right now.
+-       */
+-      *(dest_red_ptr++) = ReadInfo.image->rgb.red[pixval] >> 8;
+-      mask >>= 1;
+-      if (mask == 0) {
+-	mask = 0x80;
+-	src_row_ptr++;
+-      }
+-    }
+-    break;
+-
+-  case IRGB:
+-    /* this expands the pixel value into its components
+-     */
+-    pixlen = ReadInfo.image->pixlen;
+-    src_row_ptr = ReadInfo.current_row;
+-    dest_red_ptr = (byte *)pixel_rows[0];
+-    dest_green_ptr = (byte *)pixel_rows[1];
+-    dest_blue_ptr = (byte *)pixel_rows[2];
+-    for (x = 0; x < cinfo->image_width; x++) {
+-      pixval = memToVal(src_row_ptr, pixlen);
+-      *(dest_red_ptr++) = ReadInfo.image->rgb.red[pixval] >> 8;
+-      *(dest_green_ptr++) = ReadInfo.image->rgb.green[pixval] >> 8;
+-      *(dest_blue_ptr++) = ReadInfo.image->rgb.blue[pixval] >> 8;
+-      src_row_ptr += pixlen;
+-    }
+-    break;
+-
+-  case ITRUE:
+-    src_row_ptr = ReadInfo.current_row;
+-    dest_red_ptr = (byte *)pixel_rows[0];
+-    dest_green_ptr = (byte *)pixel_rows[1];
+-    dest_blue_ptr = (byte *)pixel_rows[2];
+-    for (x = 0; x < cinfo->image_width; x++) {
+-      *(dest_red_ptr++) = *(src_row_ptr++);
+-      *(dest_green_ptr++) = *(src_row_ptr++);
+-      *(dest_blue_ptr++) = *(src_row_ptr++);
+-    }
+-    break;
+-  }
+-  ReadInfo.current_row += ReadInfo.bytes_per_row;
+ }
+ 
+ /*
+- * This routine gets control after the input file header has been read.
+- * It must determine what output JPEG file format is to be written,
+- * and make any other compression parameter changes that are desirable.
++ * Dump Jpeg
+  */
+ 
+-static void
+-c_ui_method_selection (cinfo)
+-     compress_info_ptr cinfo;
+-{
+-  /* If the input is gray scale, generate a monochrome JPEG file. */
+-  if (cinfo->in_color_space == CS_GRAYSCALE)
+-    j_monochrome_default(cinfo);
+-  jselwjfif(cinfo);
+-}
+-
+ /* parse options passed to jpegDump
+  */
+-static void parseOptions(cinfo, options, verbose)
+-     compress_info_ptr cinfo;
+-     char *options;
+-     int verbose;
++static void parseOptions(j_compress_ptr cinfo, char *options, int verbose)
+ {
+   char *name, *value;
+ 
+-  /* (Re-)initialize the system-dependent error and memory managers. */
+-  jselerror(cinfo->emethods);	/* error/trace message routines */
+-  jselmemmgr(cinfo->emethods);	/* memory allocation routines */
+-  cinfo->methods->c_ui_method_selection = c_ui_method_selection;
+-
+-  /* Set up default JPEG parameters. */
+-  /* Note that default -quality level here need not, and does not,
+-   * match the default scaling for an explicit -qtables argument.
+-   */
+-  j_c_defaults(cinfo, 75, FALSE); /* default quality level = 75 */
+-
+   while (getNextTypeOption(&options, &name, &value) > 0) {
+     if (!strncmp("arithmetic", name, strlen(name))) {
+       /* Use arithmetic coding. */
+@@ -516,15 +321,15 @@ static void parseOptions(cinfo, options,
+       cinfo->arith_code = TRUE;
+ #else
+       fprintf(stderr, "jpegDump: sorry, arithmetic coding not supported\n");
+-    }
+ #endif
++    }
+     else if (!strncmp("grayscale", name, strlen(name)) ||
+ 	     !strncmp("greyscale", name, strlen(name)) ||
+ 	     !strncmp("monochrome", name, strlen(name))) {
+       /* Force a monochrome JPEG file to be generated. */
+       if (verbose)
+ 	printf("  Creating a grayscale/monochrome file.\n");
+-      j_monochrome_default(cinfo);
++      jpeg_set_colorspace(cinfo, JCS_GRAYSCALE);
+     }
+     else if (!strncmp("nointerleave", name, strlen(name))) {
+       /* Create noninterleaved file. */
+@@ -536,16 +341,18 @@ static void parseOptions(cinfo, options,
+       fprintf(stderr, "jpegDump: sorry, multiple-scan support was not compiled\n");
+ #endif
+     }
++    else if (!strncmp("progressive", name, strlen(name))) {
++      /* Enable progressive JPEG. */
++      if (verbose)
++	printf("  Progressive JPEG.\n");
++      jpeg_simple_progression (cinfo);
++    }
+     else if (!strncmp("optimize", name, strlen(name)) ||
+ 	     !strncmp("optimise", name, strlen(name))) {
+       /* Enable entropy parm optimization. */
+-#ifdef ENTROPY_OPT_SUPPORTED
+       if (verbose)
+ 	printf("  Optimizing entropy.\n");
+       cinfo->optimize_coding = TRUE;
+-#else
+-      fprintf(stderr, "jpegDump: sorry, entropy optimization was not compiled\n");
+-#endif
+     }
+     else if (!strncmp("quality", name, strlen(name))) {
+       /* Quality factor (quantization table scaling factor). */
+@@ -561,7 +368,7 @@ static void parseOptions(cinfo, options,
+ 	 */
+ 	if (verbose)
+ 	  printf("  Using a quality factor of %d.\n", val);
+-	j_set_quality(cinfo, val, FALSE);
++	jpeg_set_quality(cinfo, val, FALSE);
+ #if 0
+ 	/* Change scale factor in case -qtables is present. */
+ 	q_scale_factor = j_quality_scaling(val);
+@@ -626,74 +433,134 @@ static void parseOptions(cinfo, options,
+   }
+ }
+ 
+-void jpegDump(image, options, file, verbose)
+-    Image *image;
+-    char *options;
+-    char *file;
+-{
+-  struct Compress_info_struct cinfo;
+-  struct Compress_methods_struct c_methods;
+-  struct External_methods_struct e_methods;
+-
+-  if (verbose)
+-    printf("Dumping JFIF-style JPEG image to %s.\n", file);
+-
+-  /* Set up links to method structures. */
+-  cinfo.methods = &c_methods;
+-  cinfo.emethods = &e_methods;
+-
+-  /* set up "input methods" that handle "reading" from our image file
+-   */
+-  cinfo.methods->input_init = input_init;
+-  cinfo.methods->input_term = input_term;
+-  cinfo.methods->get_input_row = read_row;
+-
+-  /* set up output file; there is no input file
+-   */
+-  cinfo.input_file = NULL;
+-  cinfo.output_file = fopen(file, "w");
+-  if (cinfo.output_file == NULL) {
+-    perror(file);
+-    return;
+-  }
++/* this reads a single raster line
++ */
+ 
+-  ReadInfo.image = image;
+-  ReadInfo.current_row = image->data;
++byte *current_row;
++unsigned int bytes_per_row;
+ 
+-  /* parse the options the user gave us
+-   */
+-  parseOptions(&cinfo, options, verbose);
+-
+-  /* set up image information
+-   */
+-  cinfo.image_width = image->width;
+-  cinfo.image_height = image->height;
+-
+-  switch (image->type) {
+-  case IBITMAP:
+-    ReadInfo.bytes_per_row = (image->width / 8) + (image->width % 8 ? 1 : 0);
+-    cinfo.input_components = 1;
+-    cinfo.in_color_space = CS_GRAYSCALE;
+-    cinfo.data_precision = 8;
+-    break;
+-  case IRGB:
+-    ReadInfo.bytes_per_row = image->width * image->pixlen;
+-    cinfo.input_components = 3;
+-    cinfo.in_color_space = CS_RGB;
+-    cinfo.data_precision = 8;
+-    break;
+-  case ITRUE:
+-    ReadInfo.bytes_per_row = image->width * image->pixlen;
+-    cinfo.input_components = 3;
+-    cinfo.in_color_space = CS_RGB;
+-    cinfo.data_precision = 8;
+-    break;
+-  }
++static byte *read_row(Image *image, byte *pixel_rows)
++{
++    int x;
++    int pixlen;
++    byte *src_row_ptr = current_row;
++    byte *dest_row_ptr = pixel_rows;
++    Pixel pixval;
++    byte mask;
++
++    switch (image->type) {
++    case IBITMAP:
++	mask = 0x80;
++	for (x = 0; x < image->width; x++) {
++	    pixval = ((*src_row_ptr & mask) > 0 ? 1 : 0);
+ 
+-  /* compress, baby
+-   */
+-  jpeg_compress(&cinfo);
++	    /* we use the "red" color value under the assumption that they
++	     * are all equal.  that can be wrong if the user used -foreground
++	     * or -background.  I don't care right now.
++	     */
++	    *dest_row_ptr++ = image->rgb.red[pixval] >> 8;
++	    mask >>= 1;
++	    if (mask == 0) {
++		mask = 0x80;
++		src_row_ptr++;
++	    }
++	}
++	break;
+ 
+-  fclose(cinfo.output_file);
+-  return;
++    case IRGB:
++	/* this expands the pixel value into its components
++	 */
++	pixlen = image->pixlen;
++	for (x = 0; x < image->width; x++) {
++	    pixval = memToVal(src_row_ptr, pixlen);
++	    *dest_row_ptr++ = image->rgb.red[pixval] >> 8;
++	    *dest_row_ptr++ = image->rgb.green[pixval] >> 8;
++	    *dest_row_ptr++ = image->rgb.blue[pixval] >> 8;
++	    src_row_ptr += pixlen;
++	}
++	break;
++
++    case ITRUE:
++	return current_row;
++	break;
++    }
++    return pixel_rows;
++}
++
++void jpegDump(Image *image, char *options, char *file, int verbose)
++{
++    struct jpeg_compress_struct cinfo;
++    struct jpeg_error_mgr jerr;
++    FILE * outfile;		/* target file */
++    JSAMPROW row_pointer[1];	/* pointer to JSAMPLE row[s] */
++
++    cinfo.err = jpeg_std_error(&jerr);
++    jpeg_create_compress(&cinfo);
++
++    if ((outfile = fopen(file, "w")) == NULL) {
++	perror(file);
++	return;
++    }
++    jpeg_stdio_dest(&cinfo, outfile);
++
++    cinfo.image_width = image->width;
++    cinfo.image_height = image->height;
++
++    /* set # of color components per pixel & colospace fo input image */
++    switch (image->type) {
++    case IBITMAP:
++	bytes_per_row = (image->width / 8) + (image->width % 8 ? 1 : 0);
++	cinfo.input_components = 1;
++	cinfo.in_color_space = JCS_GRAYSCALE;
++	row_pointer[0] = lmalloc( cinfo.image_width * cinfo.input_components);
++	break;
++    case IRGB:
++	bytes_per_row = image->width * image->pixlen;
++	cinfo.input_components = 3;
++	cinfo.in_color_space = JCS_RGB;    /* colorspace of input image */
++	row_pointer[0] = lmalloc( cinfo.image_width * cinfo.input_components);
++	break;
++    case ITRUE:
++	bytes_per_row = image->width * image->pixlen;
++	cinfo.input_components = 3;
++	cinfo.in_color_space = JCS_RGB;    /* colorspace of input image */
++	row_pointer[0] = image->data;
++	break;
++    }
++    /* Now use the library's routine to set default compression parameters.
++     * (You must set at least cinfo.in_color_space before calling this,
++     * since the defaults depend on the source color space.)
++     */
++    jpeg_set_defaults(&cinfo);
++    /* Now you can set any non-default parameters you wish to.
++     * Here we just illustrate the use of quality (quantization table) scaling:
++     */
++    jpeg_set_quality(&cinfo, 75, TRUE /* limit to baseline-JPEG values */);
++    if( cinfo.in_color_space == JCS_GRAYSCALE)
++	jpeg_set_colorspace(&cinfo, JCS_GRAYSCALE);
++    parseOptions(&cinfo, options, verbose);
++
++    jpeg_start_compress(&cinfo, TRUE);
++  
++    current_row = image->data;
++    while (cinfo.next_scanline < cinfo.image_height) {
++	/* jpeg_write_scanlines expects an array of pointers to scanlines.
++	 * Here the array is only one element long, but you could pass
++	 * more than one scanline at a time if that's more convenient.
++	 */
++	row_pointer[0] = read_row(image, row_pointer[0]);
++	(void) jpeg_write_scanlines(&cinfo, row_pointer, 1);
++	current_row += bytes_per_row;
++    }
++
++    jpeg_finish_compress(&cinfo);
++    fclose(outfile);
++    jpeg_destroy_compress(&cinfo);
++    if (image->type == IBITMAP || image->type == IRGB) {
++	lfree( row_pointer[0]);
++    }
+ }
++
++#else /* !HAVE_LIBJPEG */
++static int unused;
++#endif /* !HAVE_LIBJPEG */
+Index: xloadimage.4.1.old/misc.c
+===================================================================
+--- xloadimage.4.1.old.orig/misc.c
++++ xloadimage.4.1.old/misc.c
+@@ -10,6 +10,7 @@
+ 
+ #include "copyright.h"
+ #include "xloadimage.h"
++#include "misc.h"
+ #ifdef VMS
+ #include "patchlevel."
+ #else
+@@ -32,8 +33,10 @@ static char *signalName(sig)
+   switch (sig) {
+   case SIGSEGV:
+     return("SEGV");
++#ifdef	SIGBUS
+   case SIGBUS:
+     return("BUS");
++#endif
+   case SIGFPE:
+     return("FPE");
+   case SIGILL:
+@@ -149,7 +152,7 @@ int errorHandler(disp, error)
+ { char errortext[BUFSIZ];
+ 
+   XGetErrorText(disp, error->error_code, errortext, BUFSIZ);
+-  fprintf(stderr, "xloadimage: X Error: %s on 0x%x\n",
++  fprintf(stderr, "xloadimage: X Error: %s on 0x%lx\n",
+ 	  errortext, error->resourceid);
+   if (_Xdebug) /* if -debug mode is enabled, dump a core when we hit this */
+     abort();
+Index: xloadimage.4.1.old/niff.c
+===================================================================
+--- xloadimage.4.1.old.orig/niff.c
++++ xloadimage.4.1.old/niff.c
+@@ -9,29 +9,32 @@
+  */
+ 
+ #include "image.h"
++#ifdef HAVE_UNISTD_H
++#include <unistd.h>
++#endif
+ #include "niff.h"
+ 
+ static void babble(name, header, title)
++     char *name;
+      struct niff_header *header;
+      char *title;
+ {
+-  printf("%s is a %dx%d ", name,
++  printf("%s is a %ldx%ld ", name,
+ 	 memToVal(header->width, 4),
+-	 memToVal(header->height, 4),
+-	 memToVal(header->depth, 4));
++	 memToVal(header->height, 4));
+   if (memToVal(header->version, 4) != NIFF_VERSION)
+-    printf("version %d ", memToVal(header->version, 4));
++    printf("version %ld ", memToVal(header->version, 4));
+   printf("NIFF ");
+   switch (header->type) {
+   case NIFF_BITMAP:
+     printf("bitmap image");
+     break;
+   case NIFF_RGB:
+-    printf("%d-bit RGB image with %d colors",
++    printf("%ld-bit RGB image with %ld colors",
+ 	   memToVal(header->depth, 4), memToVal(header->cmap_size, 4));
+     break;
+   case NIFF_TRUE:
+-    printf("%d-bit true color image", memToVal(header->depth, 4));
++    printf("%ld-bit true color image", memToVal(header->depth, 4));
+     break;
+   default:
+     printf("image with an unknown type");
+@@ -121,8 +124,8 @@ Image *niffLoad(fullname, name, verbose)
+   struct niff_header header;
+   char *title;
+   unsigned int width, height, depth;
+-  Image *image;
+-  unsigned int data_size;
++  Image *image = NULL;
++  unsigned int data_size = 0;
+ 
+   if (! (zf= zopen(fullname)))
+     return(NULL);
+@@ -191,7 +194,7 @@ void niffDump(image, options, filename,
+   unsigned int a;
+   struct niff_header header;
+   struct niff_cmap cmap;
+-  unsigned int data_size;
++  unsigned int data_size = 0;
+ 
+   if (verbose)
+     printf("Dumping NIFF image to %s.\n", filename);
+Index: xloadimage.4.1.old/pbm.c
+===================================================================
+--- xloadimage.4.1.old.orig/pbm.c
++++ xloadimage.4.1.old/pbm.c
+@@ -12,6 +12,7 @@
+  */
+ 
+ #include "image.h"
++#include "options.h"
+ #include "pbm.h"
+ 
+ /* SUPPRESS 558 */
+@@ -188,14 +189,14 @@ Image *pbmLoad(fullname, name, verbose)
+      char         *fullname, *name;
+      unsigned int  verbose;
+ { ZFILE        *zf;
+-  Image        *image;
++  Image        *image = NULL;
+   int           pbm_type;
+   int           x, y;
+   int           width, height, maxval, depth;
+   unsigned int  linelen;
+   byte          srcmask, destmask;
+   byte         *destptr, *destline;
+-  int           src, size;
++  int           src = 0, size;
+   int           red, grn, blu;
+ 
+   if (! (zf= zopen(fullname)))
+Index: xloadimage.4.1.old/rlelib.c
+===================================================================
+--- xloadimage.4.1.old.orig/rlelib.c
++++ xloadimage.4.1.old/rlelib.c
+@@ -12,11 +12,11 @@
+ 
+ #include <stdio.h>
+ #include <math.h>
+-#include <varargs.h>
+ #include <ctype.h>
+ 
+ #include "image.h"		/* need ZFILE definition */
+ #include "rle.h"
++#include "rlelib.h"
+ 
+ /* SUPPRESS 530 */
+ /* SUPPRESS 558 */
+@@ -710,11 +710,12 @@ register char *v;
+ {
+     for ( ; *n != '\0' && *n != '=' && *n == *v; n++, v++ )
+ 	;
+-    if (*n == '\0' || *n == '=')
++    if (*n == '\0' || *n == '=') {
+ 	if ( *v == '\0' )
+ 	    return v;
+ 	else if ( *v == '=' )
+ 	    return ++v;
++    }
+ 
+     return NULL;
+ }
+@@ -820,7 +821,7 @@ static void	bfill();
+  * Algorithm:
+  * 	Read in the setup info and fill in sv_globals.
+  */
+-rle_get_setup( globals )
++int rle_get_setup( globals )
+ struct sv_globals * globals;
+ {
+     struct XtndRsetup setup;
+@@ -980,7 +981,8 @@ struct sv_globals * globals;
+  *	Returns code.
+  */
+ 
+-rle_get_error( code, pgmname, fname )
++int rle_get_error( code, pgmname, fname )
++int code;
+ char *pgmname;
+ char *fname;
+ {
+@@ -1099,7 +1101,7 @@ int on_off;
+  *	decoding the instructions into scanline data.
+  */
+ 
+-rle_getrow( globals, scanline )
++int rle_getrow( globals, scanline )
+ struct sv_globals * globals;
+ rle_pixel *scanline[];
+ {
+@@ -1229,7 +1231,7 @@ rle_pixel *scanline[];
+ 
+ 	    scanc += nc;
+ 	    scan_x += nc;
+-	    if ( debug_f )
++	    if ( debug_f ) {
+ 		if ( SV_BIT( *globals, channel ) )
+ 		{
+ 		    rle_pixel * cp = scanc - nc;
+@@ -1240,6 +1242,7 @@ rle_pixel *scanline[];
+ 		}
+ 	    else
+ 		fprintf( stderr, "Pixel data %d (to %d)\n", nc, scan_x );
++	    }
+ 	    break;
+ 
+ 	case RRunDataOp:
+@@ -1585,7 +1588,7 @@ int magic16x16[16][16] =
+  * Algorithm:
+  * 	Chose sub cell of 16 by 16 magic square
+      */
+-make_magic( size, magic )
++void make_magic( size, magic )
+ int size;
+ int magic[16][16];
+ {
+@@ -1595,7 +1598,7 @@ int magic[16][16];
+ 
+ 	total = size * size;
+ 
+-	i = 0;
++	i = bx = by = 0;
+ 	li = -1;
+ 	for(j=0;j<total;j++)	
+ 	{
+@@ -1629,7 +1632,7 @@ int magic[16][16];
+  * Outputs:
+  *  Changes gamma array entries.
+  */
+-make_gamma( gamma, gammamap )
++void make_gamma( gamma, gammamap )
+ double gamma;
+ int gammamap[256];
+ {
+@@ -1666,7 +1669,7 @@ int gammamap[256];
+  * Algorithm:
+  * 	see "Note:" in dithermap comment.
+  */
+-dithergb( x, y, r, g, b, levels, divN, modN, magic )
++int dithergb( x, y, r, g, b, levels, divN, modN, magic )
+ int divN[256];
+ int modN[256];
+ int magic[16][16];
+@@ -1696,7 +1699,7 @@ int magic[16][16];
+  * Algorithm:
+  * 	see "Note:" in bwdithermap comment.
+  */
+-ditherbw( x, y, val, divN, modN, magic )
++int ditherbw( x, y, val, divN, modN, magic )
+ int divN[256];
+ int modN[256];
+ int magic[16][16];
+Index: xloadimage.4.1.old/sunraster.c
+===================================================================
+--- xloadimage.4.1.old.orig/sunraster.c
++++ xloadimage.4.1.old/sunraster.c
+@@ -42,7 +42,7 @@ static void babble(name, header)
+   default:
+     printf(" unknown-type");
+   }
+-  printf(" %dx%d", memToVal(header->width, 4), memToVal(header->height, 4));
++  printf(" %ldx%ld", memToVal(header->width, 4), memToVal(header->height, 4));
+ 
+   switch (memToVal(header->depth, 4)) {
+   case 1:
+@@ -240,7 +240,8 @@ Image *sunRasterLoad(fullname, name, ver
+   case RTIFF: /* sorry, don't even know what these are */
+   case RIFF:
+   default:
+-    fprintf(stderr, "%s: Unsupported Sun Rasterfile image type (sorry)\n");
++    fprintf(stderr, "%s: Unsupported Sun Rasterfile image type (sorry)\n",
++	    name);
+     return(NULL);
+   }
+ 
+@@ -255,7 +256,7 @@ Image *sunRasterLoad(fullname, name, ver
+   /*
+    *  Handle color...
+    */
+-  if (mapsize= memToVal(header.maplen, 4)) {
++  if ((mapsize= memToVal(header.maplen, 4))) {
+     map= lmalloc(mapsize);
+     if (zread(zf, map, mapsize) < mapsize) {
+       printf("sunRasterLoad: Bad read on colormap\n");
+Index: xloadimage.4.1.old/tiff.c
+===================================================================
+--- xloadimage.4.1.old.orig/tiff.c
++++ xloadimage.4.1.old/tiff.c
+@@ -5,10 +5,15 @@
+  * jim frost 09.05.93
+  */
+ 
+-#ifdef HAS_TIFF
+-
+ #include "image.h"
+-#include "tiff/tiffio.h"
++#include "options.h"
++#ifdef HAVE_LIBTIFF
++
++#include <tiffio.h>
++
++#ifndef TIFF_VERSION_CLASSIC /* libtiff4 or libtiff5? */
++#define TIFFHeaderCommon TIFFHeader
++#endif
+ 
+ /* this structure contains all the information we care about WRT a TIFF
+  * image.
+@@ -33,14 +38,14 @@ static TIFF *is_tiff(fullname, name, inf
+      struct tiff_info *info;
+ {
+   ZFILE *zf;
+-  TIFFHeader th;
++  TIFFHeaderClassic th;
+   TIFF *tiff;
+ 
+   zf = zopen(fullname);
+ 
+   /* read TIFF header and see if it looks right
+    */
+-  if ((zread(zf, (byte *)&th, sizeof(TIFFHeader)) == sizeof(TIFFHeader)) &&
++  if ((zread(zf, (byte *)&th, sizeof(TIFFHeaderClassic)) == sizeof(TIFFHeaderClassic)) &&
+       ((th.tiff_magic == TIFF_BIGENDIAN) ||
+        (th.tiff_magic == TIFF_LITTLEENDIAN))) {
+ 
+@@ -124,14 +129,14 @@ static char *photometricName(info)
+   switch (info->photometric) {
+   case PHOTOMETRIC_MINISBLACK:
+     if (info->bitspersample > 1) {
+-      sprintf(buf, "%d-bit greyscale ", info->bitspersample);
++      snprintf(buf, 31, "%d-bit greyscale ", info->bitspersample);
+       return(buf);
+     }
+     else
+       return "white-on-black ";
+   case PHOTOMETRIC_MINISWHITE:
+     if (info->bitspersample > 1) {
+-      sprintf(buf, "%d-bit greyscale ", info->bitspersample);
++      snprintf(buf, 31, "%d-bit greyscale ", info->bitspersample);
+       return(buf);
+     }
+     else
+@@ -217,7 +222,7 @@ static void babble(name, info)
+ 	   compressionName(info->compression));
+   }
+   if (info->title)
+-    printf("Titled \"%s\"");
++    printf("Titled \"%s\"", info->title);
+   printf("\n");
+ }
+ 
+@@ -227,14 +232,14 @@ int tiffIdent(fullname, name)
+   struct tiff_info info;
+ 
+   tiff = is_tiff(fullname, name, &info);
+-  babble(name, info);
+   if (tiff == NULL)
+     return(0);
++  babble(name, &info);
+   if (tiff == (TIFF *)-1) /* is TIFF, but can't open it */
+     return(1);
+   TIFFClose(tiff);
+ 
+-  babble(fullname, name, info);
++/*  babble(fullname, name, info); */
+   return(1);
+ }
+ 
+@@ -404,6 +409,7 @@ Image *tiffLoad(fullname, name, verbose)
+     if (info.samplesperpixel != 3) {
+       fprintf(stderr,
+ 	      "%s: Can't handle TIFF RGB images with %d samples per pixel, sorry\n",
++	      fullname,
+ 	      info.samplesperpixel);
+       image = NULL;
+       break;
+@@ -624,6 +630,6 @@ void tiffDump(image, options, file, verb
+   TIFFClose(out);
+ }
+ 
+-#else /* !HAS_TIFF */
++#else /* !HAVE_LIBTIFF */
+ static int unused;
+-#endif /* !HAS_TIFF */
++#endif /* !HAVE_LIBTIFF */
+Index: xloadimage.4.1.old/uufilter.c
+===================================================================
+--- xloadimage.4.1.old.orig/uufilter.c
++++ xloadimage.4.1.old/uufilter.c
+@@ -11,8 +11,10 @@
+  */
+ 
+ #include <stdio.h>
++#include <string.h>
++#include <stdlib.h>
+ 
+-main(argc, argv)
++int main(argc, argv)
+      int argc;
+      char **argv;
+ {
+@@ -64,7 +66,7 @@ main(argc, argv)
+       fprintf(stderr, "Ignoring header line: %s\n", buf);
+   }
+   if (feof(inf)) {
+-    fprintf(stderr, "No 'begin' line, sorry.\n", infilename);
++    fprintf(stderr, "%s: No 'begin' line, sorry.\n", infilename);
+     exit(1);
+   }
+ 
+@@ -162,6 +164,7 @@ main(argc, argv)
+      */
+     bp = &buf[1];
+     phase = 0;
++    outchar = 0;
+     while (len > 0) {
+       unsigned char c;
+ 
+Index: xloadimage.4.1.old/vff.c
+===================================================================
+--- xloadimage.4.1.old.orig/vff.c
++++ xloadimage.4.1.old/vff.c
+@@ -29,6 +29,7 @@
+  */
+ 
+ 
++#include <ctype.h>
+ #include "image.h"
+ 
+ #define HEAD_BUF_SIZE	2048
+@@ -149,7 +150,7 @@ Image *image;
+ 	  op = image->data;
+ 	  skip = bands - 3;
+ 	  linewidth = bands * width;
+-	  buf = (unsigned char *)malloc((unsigned)linewidth);
++	  buf = (unsigned char *)lmalloc((unsigned)linewidth);
+ 	  if (buf == NULL) {
+ 	       memoryExhausted();    
+ 	  }
+@@ -336,7 +337,7 @@ ZFILE *zf;
+ 		    return(0);
+ 	       }
+ 
+-	       if ((header[lines] = (char *)malloc((unsigned)count+1)) == NULL) {
++	       if ((header[lines] = (char *)lmalloc((unsigned)count+1)) == NULL) {
+ 		    memoryExhausted();    
+ 	       }
+ 	       bcopy(buf, header[lines], count);
+@@ -360,7 +361,7 @@ ZFILE *zf;
+      return(0); /* so that we try and see what was wrong */
+ }
+ 
+-vffIdent(fullname, name)
++int vffIdent(fullname, name)
+ char *fullname, *name;
+ {
+ 
+Index: xloadimage.4.1.old/window.c
+===================================================================
+--- xloadimage.4.1.old.orig/window.c
++++ xloadimage.4.1.old/window.c
+@@ -15,28 +15,24 @@
+ #include <X11/Xatom.h>
+ #include <signal.h>
+ #include <errno.h>
+-#include <sys/types.h>
++#ifdef HAVE_UNISTD_H
++#include <unistd.h>
++#endif
++#ifdef HAVE_SYS_TIME_H
++#include <sys/time.h>
++#endif
++#ifdef HAVE_SELECT
++#define ENABLE_TIMEOUT
++#include <sys/select.h>
++#else /* !HAVE_SELECT */
+ #ifdef HAS_POLL
+ #include <poll.h>
+-#else /* !HAS_POLL */
+-#ifdef HAS_SELECT_INCLUDE
+-#include <sys/select.h>
+-#endif /* HAS_SELECT_INCLUDE */
+-#endif /* !HAS_POLL */
+-
+-/* we can use timeouts if either select() or poll() are available.
+- */
+-#if IS_BSD
+-#define ENABLE_TIMEOUT
+-#endif
+-#if defined(HAS_SELECT_INCLUDE) || defined(HAS_POLL)
+ #define ENABLE_TIMEOUT
+-#endif
++#endif /* !HAS_POLL */
++#endif /* !HAVE_SELECT */
+ 
+ /* SUPPRESS 560 */
+ 
+-extern int errno; /* not defined in errno.h on some systems */
+-
+ static Window    ImageWindow= 0;
+ static Window    ViewportWin= 0;
+ static Colormap  ImageColormap;
+@@ -229,7 +225,7 @@ void setViewportColormap(disp, scrn, vis
+      int scrn;
+      Visual *visual;
+ { XSetWindowAttributes swa;
+-  static cmap_atom= None;
++  static Atom cmap_atom= None;
+   Window cmap_windows[2];
+ 
+   if (cmap_atom == None)
+@@ -280,7 +276,7 @@ static char *iconName(s)
+    * want to change this.
+    */
+ 
+-  if (t= rindex(buf, '/')) {
++  if ((t= rindex(buf, '/'))) {
+     for (s= buf, t++; *t; s++, t++)
+       *s= *t;
+     *s= '\0';
+@@ -298,14 +294,14 @@ static struct visual_class_name {
+   int   class; /* numerical value of class */
+   char *name;  /* actual name of class */
+ } VisualClassName[] = {
+-  TrueColor,   "TrueColor",
+-  DirectColor, "DirectColor",
+-  PseudoColor, "PseudoColor",
+-  StaticColor, "StaticColor",
+-  GrayScale,   "GrayScale",
+-  StaticGray,  "StaticGray",
+-  StaticGray,  "StaticGrey",
+-  -1,          NULL
++  {TrueColor,   "TrueColor"},
++  {DirectColor, "DirectColor"},
++  {PseudoColor, "PseudoColor"},
++  {StaticColor, "StaticColor"},
++  {GrayScale,   "GrayScale"},
++  {StaticGray,  "StaticGray"},
++  {StaticGray,  "StaticGrey"},
++  {-1,          NULL}
+ };
+ 
+ int visualClassFromName(name)
+@@ -395,6 +391,7 @@ static void bestVisual(disp, scrn, image
+    * have no visuals that support that depth.  seems silly to me....
+    */
+ 
++  visual = NULL;
+   depth= 0;
+   screen= ScreenOfDisplay(disp, scrn);
+   for (a= 0; a < screen->ndepths; a++) {
+@@ -577,19 +574,21 @@ char imageInWindow(disp, scrn, image, gl
+   unsigned int          private_cmap;
+   int                   visual_class;
+ 
++  oldcmap = 0;
++  lastx = 0;
+   /* get values from options that we'll use a lot
+    */
+   fit= (getOption(global_options, FIT) != NULL);
+   fullscreen= (getOption(global_options, FULLSCREEN) != NULL);
+   install= (getOption(global_options, INSTALL) != NULL);
+   private_cmap= (getOption(global_options, PRIVATE) != NULL);
+-  if (opt= getOption(image_options, DELAY))
++  if ((opt= getOption(image_options, DELAY)))
+     delay= opt->info.delay;
+-  else if (opt= getOption(global_options, DELAY))
++  else if ((opt= getOption(global_options, DELAY)))
+     delay= opt->info.delay;
+   else
+     delay= 0;
+-  if (opt= getOption(image_options, VISUAL))
++  if ((opt= getOption(image_options, VISUAL)))
+     visual_class= opt->info.visual;
+   else
+     visual_class= -1;
+@@ -603,7 +602,7 @@ char imageInWindow(disp, scrn, image, gl
+   else {
+     char def_geom[30];
+ 
+-    sprintf(def_geom, "%ux%u+0+0", image->width, image->height);
++    snprintf(def_geom, 29, "%ux%u+0+0", image->width, image->height);
+     XGeometry(disp, scrn, opt->info.geometry.string, def_geom, 0, 1, 1, 0, 0,
+ 	      (int *)&winx, (int *)&winy, (int *)&winwidth, (int *)&winheight);
+   }
+@@ -616,13 +615,13 @@ char imageInWindow(disp, scrn, image, gl
+     lastx= (winwidth || winheight); /* user set size flag */
+     if (!winwidth) {
+       winwidth= image->width;
+-      if (winwidth > DisplayWidth(disp, scrn) * 0.9)
+-	winwidth= DisplayWidth(disp, scrn) * 0.9;
++      if (winwidth > DisplayWidth(disp, scrn) * 0.98)
++	winwidth= DisplayWidth(disp, scrn) * 0.98;
+     }
+     if (!winheight) {
+       winheight= image->height;
+-      if (winheight > DisplayHeight(disp, scrn) * 0.9)
+-	winheight= DisplayHeight(disp, scrn) * 0.9;
++      if (winheight > DisplayHeight(disp, scrn) * 0.95)
++	winheight= DisplayHeight(disp, scrn) * 0.95;
+     }
+   }
+ 
+@@ -902,10 +901,25 @@ char imageInWindow(disp, scrn, image, gl
+ 
+     switch (event.any.type) {
+     case ButtonPress:
+-      if (event.button.button == 1) {
++      switch (event.button.button) {
++      case 1:
+ 	lastx= event.button.x;
+ 	lasty= event.button.y;
+ 	break;
++      case 3:
++	if (delay)
++	  alarm(0);
++	{
++	   Cursor cursor;
++	   cursor= swa_view.cursor;
++	   swa_view.cursor= XCreateFontCursor(disp, XC_watch);
++	   XChangeWindowAttributes(disp, ViewportWin, CWCursor, &swa_view);
++	   XFreeCursor(disp, cursor);
++	   XFlush(disp);
++	   cleanUpImage(disp, scrn, swa_view.cursor, pixmap,
++			image, ximageinfo);
++	}
++	return(' ');
+       }
+       break;
+ 
+Index: xloadimage.4.1.old/xbitmap.c
+===================================================================
+--- xloadimage.4.1.old.orig/xbitmap.c
++++ xloadimage.4.1.old/xbitmap.c
+@@ -132,7 +132,7 @@ Image *xbitmapLoad(fullname, name, verbo
+   char          name_and_type[MAX_SIZE];
+   char         *type;
+   int           value;
+-  int           v10p;
++  int           v10p = 0;
+   unsigned int  linelen, dlinelen;
+   unsigned int  x, y;
+   unsigned int  w = 0, h = 0;
+@@ -247,7 +247,7 @@ int xbitmapIdent(fullname, name)
+      char         *fullname, *name;
+ { Image *image;
+ 
+-  if (image= xbitmapLoad(fullname, name, (unsigned int)1)) {
++  if ((image= xbitmapLoad(fullname, name, (unsigned int)1))) {
+     freeImage(image);
+     return(1);
+   }
+Index: xloadimage.4.1.old/xloadimage.c
+===================================================================
+--- xloadimage.4.1.old.orig/xloadimage.c
++++ xloadimage.4.1.old/xloadimage.c
+@@ -10,16 +10,19 @@
+ 
+ #include "copyright.h"
+ #include "xloadimage.h"
++#include "options.h"
++#include "misc.h"
+ #ifdef VMS
+ #include "patchlevel."
+ #define NO_FORK
+ #else
+ #include "patchlevel"
+ #endif
++#ifdef HAVE_UNISTD_H
++#include <unistd.h>
++#endif
+ #include <signal.h>
+ 
+-extern double atof();
+-
+ char *ProgramName= "xloadimage";
+ 
+ /* if an image loader needs to have our display and screen, it will get
+@@ -120,6 +123,10 @@ static Image *doProcessOnImage(image, op
+   case ZOOM:
+     retimage= zoom(image, option->info.zoom.x, option->info.zoom.y, verbose);
+     break;
++
++  default:
++    /* Nothing to do */
++    break;
+   }
+   return(retimage);
+ }
+@@ -166,7 +173,7 @@ static Image *processImage(image, global
+ /* the real thing
+  */
+ 
+-main(argc, argv)
++int main(argc, argv)
+      int argc;
+      char *argv[];
+ { Option *opt;
+@@ -192,7 +199,9 @@ main(argc, argv)
+    */
+ 
+   signal(SIGSEGV, internalError);
++#ifdef	SIGBUS
+   signal(SIGBUS, internalError);
++#endif
+   signal(SIGFPE, internalError);
+   signal(SIGILL, internalError);
+ #if defined(_AIX) && defined(_IBMR2)
+@@ -230,7 +239,7 @@ main(argc, argv)
+ 
+   if (getOption(global_options, IDENTIFY)) {
+     for (optset= image_options; optset; optset= optset->next) {
+-      if (opt= getOption(optset, NAME))
++      if ((opt= getOption(optset, NAME)))
+ 	identifyImage(opt->info.name);
+     }
+     exit(0);
+@@ -269,7 +278,7 @@ main(argc, argv)
+   onroot= (getOption(global_options, ONROOT) != NULL);
+   fullscreen= (getOption(global_options, FULLSCREEN) != NULL);
+   shrinktofit= (getOption(global_options, SHRINKTOFIT) != NULL);
+-  if (opt= getOption(global_options, GEOMETRY)) {
++  if ((opt= getOption(global_options, GEOMETRY))) {
+     winwidth= opt->info.geometry.w;
+     winheight= opt->info.geometry.h;
+   }
+@@ -351,7 +360,7 @@ main(argc, argv)
+ 
+     /* retitle the image if we were asked to
+      */
+-    if (opt= getOption(optset, TITLE)) {
++    if ((opt= getOption(optset, TITLE))) {
+       if (newimage->title)
+ 	lfree((byte *)newimage->title);
+       newimage->title= dupString(opt->info.title);
+@@ -370,8 +379,8 @@ main(argc, argv)
+       if ((newimage->width > DisplayWidth(disp, scrn)) ||
+ 	  (newimage->height > DisplayHeight(disp, scrn))) {
+ 	opt->info.zoom.x= opt->info.zoom.y= 
+-	  (newimage->width - DisplayWidth(disp, scrn) >
+-	   newimage->height - DisplayHeight(disp, scrn) ?
++	  ((int)newimage->width - DisplayWidth(disp, scrn) >
++	   (int)newimage->height - DisplayHeight(disp, scrn) ?
+ 	   (float)DisplayWidth(disp, scrn) / (float)newimage->width * 100.0 :
+ 	   (float)DisplayHeight(disp, scrn) / (float)newimage->height * 100.0);
+       }
+@@ -399,6 +408,9 @@ main(argc, argv)
+ 	 / (float)newimage->width * 100.0 :
+ 	 ((float)DisplayHeight(disp, scrn) * 0.9)
+ 	 / (float)newimage->height * 100.0);
++      if ((opt->info.zoom.x > 100) || (opt->info.zoom.y > 100))
++        opt->info.zoom.x=opt->info.zoom.y=100;
++
+       addOption(optset, opt);
+     }
+ 
+@@ -425,7 +437,7 @@ main(argc, argv)
+ 
+       /* handle -at
+        */
+-      if (opt= getOption(optset, AT))
++      if ((opt= getOption(optset, AT)))
+ 	tmpimage= merge(dispimage, newimage,
+ 			opt->info.at.x, opt->info.at.y, verbose);
+       else
+@@ -467,7 +479,7 @@ main(argc, argv)
+       exit(0);
+     case ' ':
+     case 'n':  /* next image */
+-      if (opt= getOption(optset->next, GOTO)) {
++      if ((opt= getOption(optset->next, GOTO))) {
+ 	char *tag= opt->info.go_to;
+ 
+ 	for (tmpset= image_options; tmpset; tmpset= tmpset->next) {
+@@ -490,6 +502,8 @@ main(argc, argv)
+       if (!tmpset)
+ 	goto redisplay_in_window; /* ick */
+       optset= tmpset;
++      freeImage(dispimage);
++      dispimage= NULL;
+       goto get_another_image; /* ick */
+     case '<':
+       if ((opt = getOption(optset,ZOOM)) == NULL) {
+@@ -534,7 +548,7 @@ main(argc, argv)
+     for (optset= image_options; optset && optset->next; optset= optset->next)
+       /* EMPTY */
+       ;
+-    if (opt= getOption(optset, NAME)) {
++    if ((opt= getOption(optset, NAME))) {
+       if (dispimage->title)
+ 	lfree((byte *)dispimage->title);
+       dispimage->title= dupString(opt->info.title);
+Index: xloadimage.4.1.old/bright.c
+===================================================================
+--- xloadimage.4.1.old.orig/bright.c
++++ xloadimage.4.1.old/bright.c
+@@ -10,6 +10,7 @@
+ 
+ #include "copyright.h"
+ #include "image.h"
++#include "rlelib.h"
+ 
+ /* alter an image's brightness by a given percentage
+  */
+@@ -73,9 +74,10 @@ void gammacorrect(image, disp_gam, verbo
+      double disp_gam;
+      unsigned int verbose;
+ { int          a;
+-  int gammamap[256];
+-  unsigned int size;
++  static int gammamap[256];
+   byte        *destptr;
++  const byte  *endptr, *srcptr;
++  static double old_gamma = -1.0;
+ 
+   goodImage(image, "gammacorrect");
+   if (BITMAPP(image)) /* we're AT&T */
+@@ -86,7 +88,9 @@ void gammacorrect(image, disp_gam, verbo
+     fflush(stdout);
+   }
+ 
+-  make_gamma(disp_gam,gammamap);
++  if( disp_gam != old_gamma)
++    make_gamma(disp_gam,gammamap);
++  old_gamma = disp_gam;
+ 
+   switch (image->type) {
+   case IRGB:
+@@ -98,12 +102,13 @@ void gammacorrect(image, disp_gam, verbo
+     break;
+ 
+   case ITRUE:
+-    size= image->width * image->height * 3;
+-    destptr= image->data;
+-    for (a= 0; a < size; a++) {
+-      *destptr= gammamap[*destptr];
+-      destptr++;
+-    }
++    srcptr = destptr = image->data;
++    endptr = destptr + image->width * image->height * 3;
++    do {
++      *destptr++ = gammamap[*srcptr++];
++      *destptr++ = gammamap[*srcptr++];
++      *destptr++ = gammamap[*srcptr++];
++    } while (srcptr < endptr);
+     break;
+   }
+ 
+@@ -146,6 +151,8 @@ Image *normalize(image, verbose)
+   byte         *srcptr, *destptr;
+   byte          array[256];
+ 
++  newimage = NULL;
++
+   goodImage(image, "normalize");
+   if (BITMAPP(image))
+     return(image);
+@@ -190,11 +197,11 @@ Image *normalize(image, verbose)
+       for (x= 0; x < image->width; x++) {
+ 	pixval= memToVal(srcptr, image->pixlen);
+ 	*destptr= array[image->rgb.red[pixval] >> 8];
+-	*destptr++;
++	destptr++;
+ 	*destptr= array[image->rgb.green[pixval] >> 8];
+-	*destptr++;
++	destptr++;
+ 	*destptr= array[image->rgb.blue[pixval] >> 8];
+-	*destptr++;
++	destptr++;
+ 	srcptr += image->pixlen;
+       }
+     break;
+Index: xloadimage.4.1.old/compress.c
+===================================================================
+--- xloadimage.4.1.old.orig/compress.c
++++ xloadimage.4.1.old/compress.c
+@@ -30,7 +30,7 @@
+ 
+ #define NIL_PIXEL 0xffffffff
+ 
+-void compress(image, verbose)
++void compress_cmap(image, verbose)
+      Image        *image;
+      unsigned int  verbose;
+ { Pixel         hash_table[32768];
+@@ -136,15 +136,16 @@ void compress(image, verbose)
+   lfree((byte *)pixel_table);
+   lfree((byte *)pixel_map);
+ 
+-  if (badcount)
++  if (badcount) {
+     if (verbose)
+       printf("%d out-of-range pixels, ", badcount);
+     else
+       fprintf(stderr, "Warning: %d out-of-range pixels were seen\n",
+ 	      badcount);
++  }
+   if (verbose) {
+     if ((rgb.used == image->rgb.used) && !badcount)
+-      printf("no improvment\n");
++      printf("no improvement\n");
+     else {
+       int unused= image->rgb.used - rgb.used - dupcount;
+       if (dupcount)
+Index: xloadimage.4.1.old/config.c
+===================================================================
+--- xloadimage.4.1.old.orig/config.c
++++ xloadimage.4.1.old/config.c
+@@ -15,17 +15,17 @@
+ #include <sys/stat.h>
+ #ifndef VMS
+ #include <pwd.h>
++#include <sys/types.h>
+ #endif
+ #include <errno.h>
+-#ifndef IS_BSD
++#ifdef HAVE_UNISTD_H
+ #include <unistd.h>
+ #endif
++#include <stdlib.h>
+ 
+ /* SUPPRESS 530 */
+ /* SUPPRESS 560 */
+ 
+-extern int errno;
+-
+ struct filter *Filters = (struct filter *)NULL;
+ 
+ static unsigned int  NumPaths= 0;
+@@ -256,7 +256,8 @@ static void readPathsAndExts(name)
+       }
+       break;
+     case parse_filter_name: /* name of filter program */
+-      strcpy(filter_name, buf);
++      strncpy(filter_name, buf, BUFSIZ - 1);
++      filter_name[BUFSIZ - 1] = '\0';
+       state= parse_filter_extension;
+       break;
+     case parse_filter_extension:
+@@ -433,14 +434,29 @@ void showConfiguration()
+     printf("No filters\n");
+ }
+ 
++/* Work out where this user's home directory is, or default to '/' */
++/* XXX needs a VMS guru to supply something plausable for VMS */
++static char *homedir()
++{ char *p;
++  struct passwd *pw;
++
++  p = getenv("HOME");
++  if (p) return p;
++
++  /* try for a password file lookup instead */
++  pw = getpwuid(getuid());
++  if (!pw)
++    return "/"; /* XXX maybe print message? */
++  else
++    return pw->pw_dir;
++}
++
+ char *expandPath(p)
+      char *p;
+ { char buf1[BUFSIZ], buf2[BUFSIZ];
+   int b1, b2, var;
+   char *ptr;
+ 
+-  char *getenv();
+-
+   buf1[0] = '\0';
+   buf2[0] = '\0';
+   b1 = 0;
+@@ -454,7 +470,8 @@ char *expandPath(p)
+ #endif
+     else if(*p == '~') {
+       buf1[b1] = '\0';
+-      strcat(buf1, getenv("HOME"));
++      strncat(buf1, homedir(), BUFSIZ - strlen(buf1) - 1);
++      buf1[BUFSIZ - 1] = '\0';
+       b1 = strlen(buf1);
+       var = 0;
+     }
+@@ -462,7 +479,8 @@ char *expandPath(p)
+       if(var) {
+ 	buf1[b1] = '\0';
+ 	buf2[b2] = '\0';
+-	strcat(buf1, getenv(buf2));
++	strncat(buf1, getenv(buf2), BUFSIZ - strlen (buf1) - 1);
++	buf1[BUFSIZ - 1] = '\0';
+ 	b1 = strlen(buf1);
+ 	buf2[0] = '\0';
+ 	b2 = 0;
+Index: xloadimage.4.1.old/new.c
+===================================================================
+--- xloadimage.4.1.old.orig/new.c
++++ xloadimage.4.1.old/new.c
+@@ -10,6 +10,9 @@
+ 
+ #include "copyright.h"
+ #include "image.h"
++#ifdef HAVE_MALLOC_H
++#include <malloc.h>
++#endif
+ 
+ extern int _Xdebug;
+ 
+@@ -48,8 +51,8 @@ unsigned long DepthToColorsTable[] = {
+   /* 28 */ 268435456,
+   /* 29 */ 536870912,
+   /* 30 */ 1073741824,
+-  /* 31 */ 2147483648,
+-  /* 32 */ 2147483648 /* bigger than unsigned int; this is good enough */
++  /* 31 */ 2147483648UL,
++  /* 32 */ 2147483648UL /* bigger than unsigned int; this is good enough */
+ };
+ 
+ unsigned long colorsToDepth(ncolors)
+@@ -63,6 +66,18 @@ unsigned long colorsToDepth(ncolors)
+ }
+ 
+ 
++static unsigned int ovmul(unsigned int a, unsigned int b)
++{
++  unsigned int r;
++
++  r = a * b;
++  if (r / a != b) {
++    memoryExhausted();
++  }
++
++  return r;
++}
++
+ void goodImage(image, func)
+      Image *image;
+      char  *func;
+@@ -128,7 +143,7 @@ Image *newBitImage(width, height)
+   image->height= height;
+   image->depth= 1;
+   linelen= (width / 8) + (width % 8 ? 1 : 0); /* thanx johnh@amcc.com */
+-  image->data= (unsigned char *)lcalloc(linelen * height);
++  image->data= (unsigned char *)lcalloc(ovmul(linelen, height));
+   return(image);
+ }
+ 
+@@ -149,7 +164,7 @@ Image *newRGBImage(width, height, depth)
+   image->height= height;
+   image->depth= depth;
+   image->pixlen= pixlen;
+-  image->data= (unsigned char *)lmalloc(width * height * pixlen);
++  image->data= (unsigned char *)lmalloc(ovmul(ovmul(width, height), pixlen));
+   return(image);
+ }
+ 
+@@ -165,6 +180,7 @@ Image *newTrueImage(width, height)
+   image->height= height;
+   image->depth= 24;
+   image->pixlen= 3;
++  image->data= (unsigned char *)lmalloc(ovmul(ovmul(width, height), 3));
+   image->data= (unsigned char *)lmalloc(width * height * 3);
+   return(image);
+ }
+Index: xloadimage.4.1.old/options.c
+===================================================================
+--- xloadimage.4.1.old.orig/options.c
++++ xloadimage.4.1.old/options.c
+@@ -12,6 +12,11 @@
+ #include <stdio.h>
+ #include "image.h"
+ #include "options.h"
++#include "misc.h"
++#include "xloadimage.h"
++
++#undef  MIN
++#define MIN(a, b)  (((a) < (b)) ? (a) : (b))
+ 
+ extern char *ProgramName;
+ /* options array and definitions.  If you add something to this you also
+@@ -546,6 +551,7 @@ void processOptions(argc, argv, rglobal,
+ 	      optionName(FORK));
+       continue;
+ #else
++      killOption(global_options, VERBOSE);
+       global_opt= 1;
+       break;
+ #endif
+@@ -701,7 +707,7 @@ void processOptions(argc, argv, rglobal,
+       break;
+ 
+     case IDELAY:
+-      fprintf(stderr, "%s has been superceded by %s (translating)\n",
++      fprintf(stderr, "%s has been superseded by %s (translating)\n",
+ 	      optionName(IDELAY), optionName(DELAY));
+       /* FALLTHRU */
+ 
+@@ -731,6 +737,11 @@ void processOptions(argc, argv, rglobal,
+       if (++a >= argc)
+ 	optionUsage(GAMMA);
+       newopt->info.gamma= getFloat(GAMMA, argv[a]);
++      if (newopt->info.gamma < 0.0) {
++	fprintf(stderr, "Argument to %s must be over 0.0 (ignored)\n",
++		optionName(GAMMA));
++	newopt->type= OPT_IGNORE;
++      }
+       break;
+ 
+     case GOTO:
+@@ -878,12 +889,13 @@ int getNextTypeOption(opt_string, name,
+    */
+   p = index(*opt_string, ',');
+   if (p != NULL) {
+-    strncpy(option_name, *opt_string, p - *opt_string);
+-    option_name[p - *opt_string] = '\0';
++    strncpy(option_name, *opt_string, MIN(BUFSIZ - 1, p - *opt_string));
++    option_name[MIN(BUFSIZ - 1, p - *opt_string)] = '\0';
+     *opt_string = p + 1; /* increment to next option */
+   }
+   else {
+-    strcpy(option_name, *opt_string);
++    strncpy(option_name, *opt_string, BUFSIZ -1);
++    option_name[BUFSIZ - 1] = '\0';
+     *opt_string += strlen(*opt_string); /* increment to end of string */
+   }
+   *name = option_name;
+@@ -892,7 +904,8 @@ int getNextTypeOption(opt_string, name,
+    */
+   p = index(option_name, '=');
+   if (p != NULL) {
+-    strcpy(option_value, p + 1);
++    strncpy(option_value, p + 1, BUFSIZ - 1);
++    option_value[BUFSIZ - 1] = '\0';
+     *p = '\0'; /* stomp equals sign */
+     *value = option_value;
+   }
+Index: xloadimage.4.1.old/png.c
+===================================================================
+--- /dev/null
++++ xloadimage.4.1.old/png.c
+@@ -0,0 +1,367 @@
++/*
++ * PNG - Portable Network Graphics
++ *
++ * Alpha channle is linear.
++ * Color   \   Bit Depth      1   2   4   8  16  palette  bKGD
++ * PNG_COLOR_TYPE_PALETTE     O   O   O   O      must      8 bit
++ * PNG_COLOR_TYPE_GRAY        O   O   O   O   O           16
++ * PNG_COLOR_TYPE_GRAY_ALPHA              O   O           16
++ * PNG_COLOR_TYPE_RGB                     O   O  possible 16 * 3
++ * PNG_COLOR_TYPE_RGB_ALPHA               O   O  possible 16 * 3
++ * 
++ * This code is based on jpeg.c and sample code from the libpng-1.0.5.
++ * 2000/01/10: YOSHIDA Hiroshi
++ *
++ * TODO:
++ * pngLoad(): Alpha channel, Transparency palette.
++ * pngDump(): Dump.
++ * 
++ */
++
++
++#include "image.h"	/* xloadimage declarations */
++#ifdef HAVE_LIBPNG
++#include "options.h"
++#include <png.h>
++#include <setjmp.h>
++
++#undef  DEBUG
++/* #define  DEBUG */
++#undef  debug
++
++#ifdef DEBUG
++# define debug(xx)	fprintf(stderr,xx)
++#else
++# define debug(xx)
++#endif
++
++#define PNG_BYTES_TO_CHECK 4
++
++static Image *image;    /* xloadimage image being returned */
++static ZFILE *zinput_file;
++static char *filename;
++
++int pngIdent(char *fullname, char *name);
++Image *pngLoad(char *fullname, char *name, unsigned int verbose);
++/* void pngDump(Image *image, char *options, char *file, int verbose); */
++
++
++/*
++ * png read handler
++ */
++static void png_read_data(png_structp png_ptr,
++			  png_bytep data, png_size_t length)
++{
++  if (zread(zinput_file, data, length) != length)
++    png_error(png_ptr, "Read Error");
++}
++
++
++/*
++ * png warn handler
++ */
++static void output_warn(png_structp png_ptr, png_const_charp str)
++{
++  debug(" #warn ");
++  fprintf(stderr, " PNG file: %s - %s\n", filename, str);
++  fflush(stderr);
++}
++
++
++/*
++ * png error handler
++ */
++static void output_error(png_structp png_ptr, png_const_charp str)
++{
++  debug(" #error ");
++  output_warn( png_ptr, str);
++#if PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4
++  longjmp(png_jmpbuf((png_ptr)),1);
++#else
++  longjmp(png_ptr->jmpbuf, 1);	/* return control to outer routine */
++#endif
++}
++
++
++static const char *pngColor(int color_type)
++{
++  const char *str;
++
++  switch (color_type) {
++  case PNG_COLOR_TYPE_GRAY:
++    str = "GRAY";
++    break;
++  case PNG_COLOR_TYPE_GRAY_ALPHA:
++    str = "GRAY_ALPHA";
++    break;
++  case PNG_COLOR_TYPE_PALETTE:
++    str = "PALETTE";
++    break;
++  case PNG_COLOR_TYPE_RGB:
++    str = "RGB";
++    break;
++  case PNG_COLOR_TYPE_RGB_ALPHA:
++    str = "RGB_ALPHA";
++    break;
++  default:
++    str = "UNKNOWN_COLOR_TYPE";
++  }
++  return str;
++}
++
++
++static const char *pngInterlace(int interlace_type)
++{
++  const char *str;
++
++  switch (interlace_type) {
++  case PNG_INTERLACE_NONE:
++    str = "NONE";
++    break;
++  case PNG_INTERLACE_ADAM7:
++    str = "ADAM7";
++    break;
++  default:
++    str = "UNKNOWN_TYPE";
++  }
++  return str;
++}
++
++
++/*
++ * Output PNG file infomation.
++ */
++static void pngInfo( png_uint_32 width, png_uint_32 height,
++		     int bit_depth, int color_type, int interlace_type,
++		     double file_gamma)
++{
++  printf("%s is %ldx%ld PNG image, color type %s, %d bit",
++	 filename, width, height, pngColor(color_type), bit_depth);
++  if( interlace_type != PNG_INTERLACE_NONE)
++    printf(", interlace %s", pngInterlace(interlace_type));
++  if( file_gamma >= 0.0)
++    printf(", file gamma %.4f", file_gamma);
++  putchar('\n');
++}
++
++
++/*
++ * pngIdent(), pngLoad()
++ * Read PNG header & allocate png's struct:
++ * return 1: success
++ */
++static int pngHeader(png_structpp png_pp,
++		     png_infopp info_pp, png_infopp end_pp)
++{
++  *info_pp = *end_pp = NULL;
++  *png_pp = png_create_read_struct(PNG_LIBPNG_VER_STRING,
++				   NULL, output_error, output_warn);
++  if (!*png_pp)
++    return 0;
++  *info_pp = png_create_info_struct(*png_pp);
++  if (!*info_pp) {
++    png_destroy_read_struct(png_pp, info_pp, end_pp);
++    return 0;
++  }
++  *end_pp = png_create_info_struct(*png_pp);
++  if (!*end_pp) {
++    png_destroy_read_struct(png_pp, info_pp, end_pp);
++    return 0;
++  }
++#if PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4
++  if (setjmp(png_jmpbuf(*png_pp))) {
++#else
++  if (setjmp((*png_pp)->jmpbuf)) {
++#endif
++    /* On error */
++    png_destroy_read_struct(png_pp, info_pp, end_pp);
++    return 0;
++  }
++  png_set_sig_bytes(*png_pp, PNG_BYTES_TO_CHECK);
++  png_set_read_fn(*png_pp, NULL, png_read_data);
++  png_read_info(*png_pp, *info_pp);
++
++  return 1;
++}
++
++
++/*
++ * return !0: It is a PNG.
++ */
++static int is_png(ZFILE *zf)
++{
++  byte png_read_buff[PNG_BYTES_TO_CHECK];
++
++  /* Read in some of the signature bytes */
++  if (zread(zf, png_read_buff,PNG_BYTES_TO_CHECK) != PNG_BYTES_TO_CHECK)
++    return 0;
++  return !png_sig_cmp(png_read_buff, (png_size_t)0, PNG_BYTES_TO_CHECK);
++}
++
++
++/*
++ * Main control routine for identifying PNG without loading
++ * return 1: PNG file.
++ */
++int pngIdent(char *fullname, char *name)
++{
++  png_structp png_ptr;
++  png_infop info_ptr, end_info;
++  png_uint_32 width, height;
++  int color_type, bit_depth, interlace_type;
++  double file_gamma;
++
++  zinput_file = zopen(fullname);
++  if (zinput_file == NULL) {
++    zclose(zinput_file);
++    return 0;
++  }
++  /* check at early timing */
++  if (is_png(zinput_file) == 0) {
++    zclose(zinput_file);
++    return 0;
++  }
++  filename = name;
++
++  /* read infomation header */
++  if (!pngHeader(&png_ptr, &info_ptr, &end_info)) {
++    zclose(zinput_file);
++    return 0;
++  }
++
++#if PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4
++  if (setjmp(png_jmpbuf(png_ptr))) {
++#else
++  if (setjmp(png_ptr->jmpbuf)) {
++#endif
++    /* On error */
++    freeImage(image);
++    png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
++    zclose(zinput_file);
++    return 0;
++  }
++  png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth,
++	       &color_type, &interlace_type, NULL, NULL);
++  if(!png_get_gAMA( png_ptr, info_ptr, &file_gamma))
++    file_gamma = -1.0;
++  /* print out PNG infomation */
++  pngInfo( width, height, bit_depth, color_type, interlace_type, file_gamma);
++
++  znocache(zinput_file);
++  png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
++  zclose(zinput_file);
++  return 1;
++}
++
++
++/*
++ * Main control routine for loading
++ */
++Image *pngLoad(char *fullname, char *name, unsigned int verbose)
++{
++  png_structp png_ptr;
++  png_infop info_ptr, end_info;
++  png_colorp palette;
++  png_color_16p background;
++  png_bytep bufp, *row_pointers;
++  png_uint_32 width, height;
++  int i, row_stride, color_type, bit_depth, num_palette, interlace_type;
++  double file_gamma;
++
++  zinput_file = zopen(fullname);
++  if (zinput_file == NULL) {
++    zclose(zinput_file);
++    return NULL;
++  }
++  /* check at early timing */
++  if (is_png(zinput_file) == 0) {
++    zclose(zinput_file);
++    return NULL;
++  }
++  filename = name;
++
++  /* read infomation header */
++  if (!pngHeader(&png_ptr, &info_ptr, &end_info)) {
++    zclose(zinput_file);
++    return NULL;
++  }
++  png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth,
++	       &color_type, &interlace_type, NULL, NULL);
++  if(!png_get_gAMA( png_ptr, info_ptr, &file_gamma))
++    file_gamma = -1.0;
++  /* print out PNG infomation */
++  if (verbose)
++    pngInfo( width, height, bit_depth, color_type, interlace_type, file_gamma);
++  znocache(zinput_file);
++  image = NULL;
++
++  if (file_gamma <= 0.0)
++    file_gamma = 1.0;
++  png_set_gamma(png_ptr, 1.0, file_gamma);
++  if (bit_depth > 8)
++    png_set_strip_16(png_ptr);      /* 16 bit -> 8 bit */
++  /*  if (color_type & PNG_COLOR_MASK_ALPHA) */
++  png_set_strip_alpha(png_ptr);
++  if (png_get_bKGD(png_ptr, info_ptr, &background))
++    png_set_background(png_ptr, background, file_gamma, 1, 1.0);
++  switch (color_type) {
++  case PNG_COLOR_TYPE_PALETTE:
++    if (bit_depth < 8)
++      png_set_packing(png_ptr);     /* 1 pixlel 1 byte */
++    image = newRGBImage(width, height, 8);
++    png_get_PLTE(png_ptr, info_ptr, &palette, &num_palette);
++    image->rgb.used = num_palette;
++    for (i = 0; i < num_palette; i++) {
++      *(image->rgb.red + i) = palette->red << 8;
++      *(image->rgb.green + i) = palette->green << 8;
++      *(image->rgb.blue + i) = palette->blue << 8;
++      palette++;
++    }
++    break;
++  case PNG_COLOR_TYPE_GRAY_ALPHA:
++  case PNG_COLOR_TYPE_GRAY:
++    if (bit_depth < 8)
++#if PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4
++      png_set_expand_gray_1_2_4_to_8(png_ptr);  /* 1 pixlel 1 byte */
++#else
++      png_set_gray_1_2_4_to_8(png_ptr);  /* 1 pixlel 1 byte */
++#endif
++    image = newRGBImage(width, height, 8);
++    image->rgb.used = 256;
++    for (i = 0; i < 256; i++) {
++      *(image->rgb.red + i) = 
++	*(image->rgb.green + i) = 
++	*(image->rgb.blue + i) = i << 8;
++    }
++    break;
++  case PNG_COLOR_TYPE_RGB_ALPHA:
++  case PNG_COLOR_TYPE_RGB:
++    image = newTrueImage(width, height);
++    break;
++  default:
++    fprintf(stderr, "Unknown color type PNG.");
++    png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
++    zclose(zinput_file);
++    return NULL;
++  }
++  image->title = dupString(filename);
++
++  bufp = image->data;
++  png_read_update_info(png_ptr, info_ptr);
++  row_stride = png_get_rowbytes(png_ptr, info_ptr);
++  row_pointers = (png_bytep *)lmalloc(sizeof(png_bytep) * height);
++  for (i = 0; i < height; i++) {
++    *(row_pointers + i) = bufp;
++    bufp += row_stride;
++  }
++  png_read_image(png_ptr, row_pointers);
++  lfree((byte *)row_pointers);
++  png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
++  zclose(zinput_file);
++
++  return image;
++}
++
++#else /* !HAVE_LIBPNG */
++static int unused;
++#endif /* !HAVE_LIBPNG */
+Index: xloadimage.4.1.old/send.c
+===================================================================
+--- xloadimage.4.1.old.orig/send.c
++++ xloadimage.4.1.old/send.c
+@@ -21,7 +21,7 @@ static int pixmapErrorTrap(disp, pErrorE
+     char buf[MAXERRORLEN+1];
+     GotError = 1;
+     XGetErrorText(disp, pErrorEvent->error_code, buf, MAXERRORLEN);
+-    printf("serial #%d (request code %d) Got Error %s\n",
++    printf("serial #%ld (request code %d) Got Error %s\n",
+ 	pErrorEvent->serial,
+ 	pErrorEvent->request_code,
+ 	buf);
+@@ -166,6 +166,8 @@ XImageInfo *imageToXImage(disp, scrn, vi
+       unsigned int redbottom, greenbottom, bluebottom;
+       unsigned int redtop, greentop, bluetop;
+ 
++      redtop = greentop = bluetop = 0;
++
+       redvalue= (Pixel *)lmalloc(sizeof(Pixel) * 256);
+       greenvalue= (Pixel *)lmalloc(sizeof(Pixel) * 256);
+       bluevalue= (Pixel *)lmalloc(sizeof(Pixel) * 256);
+@@ -255,7 +257,7 @@ imageToXImage: XAllocColor failed on a T
+ 
+   default:
+   retry: /* this tag is used when retrying because we couldn't get a fit */
+-    compress(image, verbose);
++    compress_cmap(image, verbose);
+ 
+     index= (Pixel *)lmalloc(sizeof(Pixel) * image->rgb.used);
+ 
+@@ -300,7 +302,7 @@ imageToXImage: XAllocColor failed on a T
+ 	xcolor.red= *(image->rgb.red + a);
+ 	xcolor.green= *(image->rgb.green + a);
+ 	xcolor.blue= *(image->rgb.blue + a);
+-	if (! XAllocColor(disp, ximageinfo->cmap, &xcolor))
++	if (! XAllocColor(disp, ximageinfo->cmap, &xcolor)) {
+ 	  if ((visual->class == StaticColor) ||
+ 	      (visual->class == StaticGray) ||
+ 	      (visual->class == TrueColor) ||
+@@ -319,6 +321,7 @@ imageToXImage: XAllocColor failed on a T
+ 	    newmap= 1;
+ 	    break;
+ 	  }
++	}
+ 	*(index + a)= xcolor.pixel;
+       }
+     }
+@@ -602,8 +605,6 @@ void sendXImage(ximageinfo, src_x, src_y
+      int          src_x, src_y, dst_x, dst_y;
+      unsigned int w, h;
+ { XGCValues gcv;
+-  int a, orig_depth;
+-  char *orig_data;
+ 
+   /* build and cache the GC
+    */
+Index: xloadimage.4.1.old/vicar.c
+===================================================================
+--- xloadimage.4.1.old.orig/vicar.c
++++ xloadimage.4.1.old/vicar.c
+@@ -12,7 +12,6 @@
+ #define SAMPLES   label[6]
+  
+ #include <stdio.h>
+-#include <malloc.h>
+ #include "image.h"
+ #include <sys/types.h>
+ 
+@@ -108,14 +107,12 @@ Image *vicarLoad(fullname, name, verbose
+      char *fullname, *name;
+      unsigned int verbose;
+ {
+-  char         c;
+-  int          i,j;
++  int          i;
+   unsigned int mapsize, size;
+   Image        *image;
+   byte         *lineptr;
+   byte         *map;
+   byte         *mapred,*mapgreen,*mapblue;
+-  byte         *buf;
+   ZFILE        *zf;
+  
+   if ( vicarIdent(fullname,name,verbose) == 0 )
+Index: xloadimage.4.1.old/xloadimagerc
+===================================================================
+--- xloadimage.4.1.old.orig/xloadimagerc
++++ xloadimage.4.1.old/xloadimagerc
+@@ -1,6 +1,9 @@
+ # Sample .xloadimagerc file
+ 
+-path = /usr/local/images
++# Directories to search for images
++path = ~/images /usr/local/images
++
++# Default extensions to try tacking onto the end of a filename, in order
+ extension = .niff             # NIFF image
+             .jpg .jpeg        # JPEG image
+             .gif              # CompuServe GIF image
+@@ -14,6 +17,7 @@ extension = .niff             # NIFF ima
+             .pbm .pgm .ppm    # PBMPLUS
+             .img              # GEM IMG
+             .pcx              # PCX image
++            .png              # PNG image
+ 
+ # add uufilter for automatic uudecoding of files ending in .uu or .uue
+ filter = "uufilter -s" .uu .uue
+Index: xloadimage.4.1.old/faces.c
+===================================================================
+--- xloadimage.4.1.old.orig/faces.c
++++ xloadimage.4.1.old/faces.c
+@@ -108,9 +108,15 @@ Image *facesLoad(fullname, name, verbose
+     if (! strcmp(buf, "\n"))
+       break;
+     if (!strncmp(buf, "FirstName:", 10))
+-      strcpy(fname, buf + 11);
++      {
++	strncpy(fname, buf + 11, BUFSIZ - 1);
++	fname[BUFSIZ - 1] = '\0';
++      }
+     else if (!strncmp(buf, "LastName:", 9))
+-      strcpy(lname, buf + 10);
++      {
++	strncpy(lname, buf + 10, BUFSIZ - 1);
++	lname[BUFSIZ - 1] = '\0';
++      }
+     else if (!strncmp(buf, "Image:", 6)) {
+       if (sscanf(buf + 7, "%d%d%d", &iw, &ih, &id) != 3) {
+ 	printf("%s: Bad Faces Project image\n", fullname);
+@@ -136,7 +142,7 @@ Image *facesLoad(fullname, name, verbose
+ 
+   image= newRGBImage(w, h, d);
+   fname[strlen(fname) - 1]= ' ';
+-  strcat(fname, lname);
++  strncat(fname, lname, BUFSIZ - strlen(fname) -1);
+   fname[strlen(fname) - 1]= '\0';
+   image->title= dupString(fname);
+ 
+@@ -172,7 +178,7 @@ int facesIdent(fullname, name)
+      char *fullname, *name;
+ { Image *image;
+ 
+-  if (image= facesLoad(fullname, name, 1)) {
++  if ((image= facesLoad(fullname, name, 1))) {
+     freeImage(image);
+     return(1);
+   }
+Index: xloadimage.4.1.old/packtar.c
+===================================================================
+--- xloadimage.4.1.old.orig/packtar.c
++++ xloadimage.4.1.old/packtar.c
+@@ -11,8 +11,6 @@
+ #include <stdio.h>
+ #include <errno.h>
+ 
+-extern int errno;
+-
+ /* poor-man's varargs.  good enough for now.
+  */
+ int run(a0, a1, a2, a3, a4, a5, a6, a7, a8)
+@@ -48,9 +46,12 @@ void link_file(dir, old_file)
+   char new_file[1024];
+   char *p;
+ 
+-  strcpy(new_file, dir); /* target directory */
+-  strcat(new_file, "/");
+-  strcat(new_file, old_file);
++  strncpy(new_file, dir, 1023); /* target directory */
++  new_file[1023] = '\0';
++  strncat(new_file, "/", 1023 - strlen(new_file));
++  new_file[1023] = '\0';
++  strncat(new_file, old_file, 1023 - strlen(new_file));
++  new_file[1023] = '\0';
+ 
+   for (p = new_file; p = strchr(p, '/'); p++) {
+     *p = '\0'; /* stomp directory separator */
+Index: xloadimage.4.1.old/xloadimage.man
+===================================================================
+--- xloadimage.4.1.old.orig/xloadimage.man
++++ xloadimage.4.1.old/xloadimage.man
+@@ -1,4 +1,4 @@
+-.TH XLOADIMAGE 1 "8 May 1991"
++.TH XLOADIMAGE 1x "8 May 1991"
+ .SH NAME
+ xloadimage, xsetbg, xview \- load images into an X11 window or onto
+ the root window
+@@ -9,7 +9,7 @@ the root window
+ .SH DESCRIPTION
+ \fIXloadimage\fR displays images in an X11 window, loads them onto the
+ root window, or writes them into a file.  Many image types are
+-recognized; use the \fI-supported\fR option to list them.
++recognized; use the \fI\-supported\fR option to list them.
+ .PP
+ If the filename \fIstdin\fR is given, xloadimage will read the image
+ from standard input if this capability is supported by the loader for
+@@ -18,38 +18,38 @@ that image type (most types do support r
+ If the destination display cannot support the number of colors in the
+ image, the image will be dithered (monochrome destination) or have its
+ colormap reduced (color destination) as appropriate.  This can also be
+-done forcibly with the \fI-halftone\fR, \fI-dither\fR, and
+-\fI-colors\fR options.
++done forcibly with the \fI\-halftone\fR, \fI\-dither\fR, and
++\fI\-colors\fR options.
+ .PP
+ A variety of image manipulations can be specified, including gamma
+-correction, brightening, clipping, dithering, depth-reduction,
++correction, brightening, clipping, dithering, depth\(hyreduction,
+ rotation, and zooming.  Most of these manipulations have simple
+ implementations; speed was opted for above accuracy.
+ .PP
+ If you are viewing a large image in a window, the initial window will
+ be at most 90% of the size of the display unless the window manager
+ does not correctly handle window size requests or if you've used the
+-\fI-fullscreen\fR option.  You may move the image around in the window
++\fI\-fullscreen\fR option.  You may move the image around in the window
+ by dragging with the first mouse button.  The cursor will indicate
+ which directions you may drag, if any.  You may exit the window by
+ typing 'q' or '^C' when the keyboard focus is on the window.
+ .PP
+ If more than one image file is specified on the command line, each
+-image will be shown in order (except if \fI-merge\fR or \fI-goto\fR
++image will be shown in order (except if \fI\-merge\fR or \fI\-goto\fR
+ are being used).
+ .PP
+ A wide variety of common image manipulations can be done by mixing and
+ matching the available options.  See the section entitled \fIHINTS FOR
+ GOOD IMAGE DISPLAYS\fR for some ideas.
+ .PP
+-The \fI-dump\fR option causes an image to be written to a file rather
++The \fI\-dump\fR option causes an image to be written to a file rather
+ than displayed after processing.  This allows you to read an image,
+ perform a number of processing operations on it, and save the
+ resultant image.  This also allows translation from any of the
+ recognized image types into any of the formats that support dumping.
+ .PP
+-\fIXsetbg\fR is equivalent to \fIxloadimage -onroot -quiet\fR and
+-\fIxview\fR is equivalent to \fIxloadimage -view -verbose\fR.
++\fIXsetbg\fR is equivalent to \fIxloadimage \-onroot \-quiet\fR and
++\fIxview\fR is equivalent to \fIxloadimage \-view \-verbose\fR.
+ .SH RESOURCE CLASS
+ \fIXloadimage\fR uses the resource class name \fIXloadimage\fR for
+ window managers which need this resource set.  This name changed
+@@ -59,61 +59,58 @@ in version 2.00 and 2.01; some previous
+ .SH GLOBAL OPTIONS
+ The following options affect the global operation of \fIxloadimage\fR.
+ They may be specified anywhere on the command line.  Additionally the
+-\fI-global\fR option can be used to force an image option to apply to
++\fI\-global\fR option can be used to force an image option to apply to
+ all images.
+ .TP 8
+--border \fIcolor\fR
++\-border \fIcolor\fR
+ This sets the background portion of the window which is not covered by
+ any images to be \fIcolor\fR.
+ .TP
+--configuration
++\-configuration
+ Displays the image path, image suffixes, and supported filters which
+ will be used when looking for and reading images.  These are loaded
+ from ~/.xloadimagerc and optionally from a systemwide file (normally
+-/usr/lib/xloadimagerc).  This replaces the -path option.
++/usr/lib/xloadimagerc).  This replaces the \-path option.
+ .TP
+--default
++\-default
+ Use the default root weave as the image.  This option forces
+-\fI-onroot\fR.  If \fI-default\fR is used alone, it is the same as
++\fI\-onroot\fR.  If \fI\-default\fR is used alone, it is the same as
+ \fIxsetroot\fR with no arguments.  If used in conjunction with
+-\fI-tile\fR this option can be used to place images on the default
++\fI\-tile\fR this option can be used to place images on the default
+ root weave (see \fBEXAMPLES\fR below).
+ .TP
+--debug
++\-debug
+ Talk to the X server in synchronous mode.  This is useful for
+ debugging.  If an X error is seen while in this mode, a core will be
+ dumped.
+ .TP
+--delay \fIsecs\fR
+-Automatically advance to the next image after \fIsecs\fR seconds.
+-.TP
+--display \fIdisplay_name\fR
++\-display \fIdisplay_name\fR
+ X11 display name to send the image(s) to.
+ .TP
+--dump \fIimage_type[,option[=value]]\fR \fIdump_file\fR
++\-dump \fIimage_type[,option[=value]]\fR \fIdump_file\fR
+ Rather than displaying the loaded and processed image, dump it into an
+ image file of the specified type.  For a list of image types that can
+-be dumped, use the \fI-supported\fR option.  Some image types have
++be dumped, use the \fI\-supported\fR option.  Some image types have
+ options that affect the format of the file that's created.  See
+ \fBDUMP OPTIONS\fR below.  An image can be dumped in any supported
+ dump format regardless of the original image type, so image file type
+ translation is possible using this option.
+ .TP
+--fit
++\-fit
+ Force image to use the default visual and colormap.  This is useful if
+ you do not want technicolor effects when the colormap focus is inside
+ the image window, but it may reduce the quality of the displayed
+-image.  This is on by default if -onroot or -windowid is specified.
++image.  This is on by default if \-onroot or \-windowid is specified.
+ .TP
+--fork
++\-fork
+ Fork xloadimage.  This causes xloadimage to disassociate itself from
+-the shell.  This option automatically turns on -quiet.
++the shell.  This option automatically turns on \-quiet.
+ .TP
+--fullscreen
+-Use the entire screen to display images.  If combined with -onroot,
++\-fullscreen
++Use the entire screen to display images.  If combined with \-onroot,
+ the image will be zoomed to fill the entire rootwindow.
+ .TP
+--geometry \fIWxH[{+-X}{+-}Y]\fR
++\-geometry \fIWxH[{+\-X}{+\-}Y]\fR
+ This sets the size of the window onto which the images are loaded to a
+ different value than the size of the image.  When viewing an image in
+ a window, this can be used to reduce the size of the destination
+@@ -122,223 +119,226 @@ controls the size of the pixmap which wi
+ If the size is smaller than that of the display, the image will be
+ replicated.
+ .TP
+--goto image_name
++\-goto image_name
+ Forces the next image to be displayed to be the image named
+ \fIimage_name\fR.  This is useful for generating looped slideshows.
+ If more than one image of the same name as the target exists on the
+ argument list, the first in the argument list is used.
+ .TP
+--help [option ...]
++\-help [option ...]
+ Give information on an option or list of options.  If no option is
+ given, a simple interactive help facility is invoked.
+ .TP
+--identify
++\-identify
+ Identify the supplied images rather than display them.
+ .TP
+--install
++\-install
+ Forcibly install the image's colormap when the window is focused.
+ This violates ICCCM standards and only exists to allow operation with
+ naive window managers.  Use this option only if your window manager
+ does not install colormaps properly.
+ .TP
+--list
++\-list
+ List the images which are along the image path.
+ .TP
+--onroot
++\-onroot
+ Load image(s) onto the root window instead of viewing in a window.
+-This option automatically sets the -fit option.
+-This is the opposite of \fI-view\fR.  \fIXSetbg\fR has this option set
++This option automatically sets the \-fit option.
++This is the opposite of \fI\-view\fR.  \fIXSetbg\fR has this option set
+ by default.
+ .TP
+--path
++\-path
+ Displays miscellaneous information about the program configuration.
+-This option is obsolete and has been replaced by -configuration.
++This option is obsolete and has been replaced by \-configuration.
+ .TP
+--pixmap
+-Force the use of a pixmap as backing-store.  This is provided for
+-servers where backing-store is broken (such as some versions of the
++\-pixmap
++Force the use of a pixmap as backing\(hystore.  This is provided for
++servers where backing\(hystore is broken (such as some versions of the
+ AIXWindows server).  It may improve scrolling performance on servers
+-which provide backing-store.
++which provide backing\(hystore.
+ .TP
+--private
++\-private
+ Force the use of a private colormap.  Normally colors are allocated
+ shared unless there are not enough colors available.
+ .TP
+--quiet
++\-quiet
+ Forces \fIxloadimage\fR and \fIxview\fR to be quiet.  This is the
+ default for \fIxsetbg\fR, but the others like to whistle. 
+ .TP
+--supported
++\-supported
+ List the supported image types. 
+ .TP
+--type \fItype_name\fR
++\-type \fItype_name\fR
+ Forces \fIxloadimage\fR to try to load the image as a particular file
+ type rather than trying to guess.  This often improves load
+-performance noticably.
++performance noticeably.
+ .TP
+--verbose
++\-verbose
+ Causes \fIxloadimage\fR to be talkative, telling you what kind of
+ image it's playing with and any special processing that it has to do. 
+ This is the default for \fIxview\fR and \fIxloadimage\fR. 
+ .TP
+--version
++\-version
+ Print the version number and patchlevel of this version of
+ \fIxloadimage\fR.
+ .TP
+--view
+-View image(s) in a window.  This is the opposite of \fI-onroot\fR and
++\-view
++View image(s) in a window.  This is the opposite of \fI\-onroot\fR and
+ the default for \fIxview\fR and \fIxloadimage\fR. 
+ .TP
+--visual \fIvisual_name\fR
++\-visual \fIvisual_name\fR
+ Force the use of a specific visual type to display an image.  Normally
+ \fIxloadimage\fR tries to pick the best available image for a
+ particular image type.  The available visual types are:  DirectColor,
+ TrueColor, PseudoColor, StaticColor, GrayScale, and StaticGray.
+ Nonconflicting names may be abbreviated and case is ignored.
+ .TP
+--windowid \fIhex_window_id\fR
++\-windowid \fIhex_window_id\fR
+ Sets the background pixmap of a particular window ID.  The argument
+-must be in hexadecimal and must be preceeded by "0x" (\fIeg\fR
+--windowid 0x40000b.  This is intended for setting the background
++must be in hexadecimal and must be preceded by "0x" (\fIeg\fR
++\-windowid 0x40000b.  This is intended for setting the background
+ pixmap of some servers which use untagged virtual roots
+ (\fIeg\fR HP-VUE), but can have other interesting applications.
+ .SH IMAGE OPTIONS
+-The following options may preceed each image.  These options are
+-local to the image they preceed. 
++The following options may precede each image.  These options are
++local to the image they precede. 
+ .TP
+--at \fIX\fR,\fIY\fR
++\-at \fIX\fR,\fIY\fR
+ Indicates coordinates to load the image at on the base image.  If
+-this is an option to the first image, and the \fI-onroot\fR option is
++this is an option to the first image, and the \fI\-onroot\fR option is
+ specified, the image will be loaded at the given location on the
+ display background. 
+ .TP
+--background \fIcolor\fR
++\-background \fIcolor\fR
+ Use \fIcolor\fR as the background color instead of the default
+ (usually white but this depends on the image type) if you are
+ transferring a monochrome image to a color display. 
+ .TP
+--brighten \fIpercentage\fR
++\-brighten \fIpercentage\fR
+ Specify a percentage multiplier for a color image's colormap.  A value
+ of more than 100 will brighten an image, one of less than 100 will
+ darken it. 
+ .TP
+--center
++\-center
+ Center the image on the base image loaded.  If this is an option to
+ the first image, and the \fI-onroot\fR option is specified, the image
+ will be centered on the display background. 
+ .TP
+--clip \fIX\fR,\fIY\fR,\fIW\fR,\fIH\fR
++\-clip \fIX\fR,\fIY\fR,\fIW\fR,\fIH\fR
+ Clip the image before loading it.  \fIX\fR and \fIY\fR define the
+-upper-left corner of the clip area, and \fIW\fR and \fIH\fR define the
++upper\(hyleft corner of the clip area, and \fIW\fR and \fIH\fR define the
+ extents of the area.  A zero value for \fIW\fR or \fIH\fR will be
+ interpreted as the remainder of the image. 
+ .TP
+--colors \fIn\fR
++\-colors \fIn\fR
+ Specify the maximum number of colors to use in the image.  This is a
+ way to forcibly reduce the depth of an image.
+ .TP
+--dither
+-Dither a color image to monochrome using a Floyd-Steinberg dithering
++\-delay \fIsecs\fR
++Automatically advance to the next image after \fIsecs\fR seconds.  You
++may want to use the \fI\-global\fR switch with this command to create a
++slideshow with multiple images.
++.TP
++\-dither
++Dither a color image to monochrome using a Floyd\(hySteinberg dithering
+ algorithm.  This happens by default when viewing color images on a
+-monochrome display.  This is slower than \fI-halftone\fR and affects
++monochrome display.  This is slower than \fI\-halftone\fR and affects
+ the image accuracy but usually looks much better.
+ .TP
+--foreground \fIcolor\fR
++\-foreground \fIcolor\fR
+ Use \fIcolor\fR as the foreground color instead of black if you are
+ transferring a monochrome image to a color display.  This can also be
+ used to invert the foreground and background colors of a monochrome
+ image. 
+ .TP
+--gamma \fIdisplay_gamma\fR
++\-gamma \fIdisplay_gamma\fR
+ Specify the gamma correction for the display.
+ The default value is 1.0, a typical display needs 2.0 to 2.5.
+ .TP
+--global
++\-global
+ Force the following option to apply to all images rather than one
+ specific image.  Local image options will temporarily override any
+-option specified with -global.
++option specified with \-global.
+ .TP
+--gray
++\-gray
+ Convert an image to grayscale.  This is very useful when displaying
+ colorful images on servers with limited color capability.  It can also
+ be used to convert a bitmap image into a grayscale image, although the
+ resulting image will be smaller than the original.  The optional
+-spelling \fI-grey\fR may also be used.
++spelling \fI\-grey\fR may also be used.
+ .TP
+--halftone
++\-halftone
+ Force halftone dithering of a color image when displaying on a
+ monochrome display.  This option is ignored on monochrome images.
+ This dithering algorithm blows an image up by sixteen times; if you
+-don't like this, the \fI-dither\fR option will not blow the image up
++don't like this, the \fI\-dither\fR option will not blow the image up
+ but will take longer to process and will be less accurate.
+ .TP
+--idelay \fIsecs\fR
+-Set the delay to be used for this image to \fIsecs\fR seconds (see
+-\fI-delay\fR).  If \fI-delay\fR was specified, this overrides it.  If
+-it was not specified, this sets the automatic advance delay for this
+-image while others will wait for the user to advance them.
+-.TP
+--invert
+-Inverts a monochrome image.  This is shorthand for \fI-foreground
+-white -background black\fR.
++\-idelay \fIsecs\fR
++This option is no longer supported due to the addition of
++\fI\-global\fR.  The same functionality can be had with \fI\-delay\fR.
++.TP
++\-invert
++Inverts a monochrome image.  This is shorthand for \fI\-foreground
++white \-background black\fR.
+ .TP
+--merge
++\-merge
+ Merge this image onto the base image after local processing.  The base
+ image is considered to be the first image specified or the last image
+-that was not preceeded by \fI-merge\fR.  If used in conjunction with
+-\fI-at\fR and \fI-clip\fR, very complex images can be built up.  This
+-option is on by default for all images if the \fI-onroot\fR or
+-\fI-windowid\fR options are specified.
++that was not preceded by \fI\-merge\fR.  If used in conjunction with
++\fI\-at\fR and \fI\-clip\fR, very complex images can be built up.  This
++option is on by default for all images if the \fI\-onroot\fR or
++\fI\-windowid\fR options are specified.
+ .TP
+--name \fIimage_name\fR
++\-name \fIimage_name\fR
+ Force the next argument to be treated as an image name.  This is
+-useful if the name of the image is \fI-dither\fR, for instance. 
++useful if the name of the image is \fI\-dither\fR, for instance. 
+ .TP
+--newoptions
++\-newoptions
+ Reset globally-specified options.
+ .TP
+--normalize
++\-normalize
+ Normalize a color image.
+ .TP
+--rotate \fIdegrees\fR
++\-rotate \fIdegrees\fR
+ Rotate the image by \fIdegrees\fR clockwise.  The number must be a
+ multiple of 90.
+ .TP
+--shrink
++\-shrink
+ Shrink an image down to fit on the display.  This is particularly
+ useful with servers that do not support window sizes larger than the
+ physical screen (eg DECWINDOWS servers).
+ .TP
+--smooth
++\-smooth
+ Smooth a color image.  This reduces blockiness after zooming an image
+ up.  If used on a monochrome image, nothing happens.  This option can
+ take awhile to perform, especially on large images.  You may specify
+-more than one \fI-smooth\fR option per image, causing multiple
++more than one \fI\-smooth\fR option per image, causing multiple
+ iterations of the smoothing algorithm.
+ .TP
+--tile
++\-tile
+ Tile this image (after any necessary merging or tiling) to create a
+ fullscreen image.  This is usually used to create a large background
+-image on which to merge other images.  \fI-geometry\fR can be used to
+-set the new image size to something other than -fullscreen.
++image on which to merge other images.  \fI\-geometry\fR can be used to
++set the new image size to something other than \-fullscreen.
+ .TP
+--title \fItitle\fR
++\-title \fItitle\fR
+ Change the title of the image.  This sets the title bar title if
+ displaying in a window or the NIFF file image title if dumping the
+ image.
+ .TP
+--xzoom \fIpercentage\fR
++\-xzoom \fIpercentage\fR
+ Zoom the X axis of an image by \fIpercentage\fR.  A number greater
+ than 100 will expand the image, one smaller will compress it.  A zero
+-value will be ignored.  This option, and the related \fI-yzoom\fR are
++value will be ignored.  This option, and the related \fI\-yzoom\fR are
+ useful for correcting the aspect ratio of images to be displayed.
+ .TP
+--yzoom \fIpercentage\fR
+-Zoom the Y axis of an image by \fIpercentage\fR.  See \fI-xzoom\fR for
++\-yzoom \fIpercentage\fR
++Zoom the Y axis of an image by \fIpercentage\fR.  See \fI\-xzoom\fR for
+ more information. 
+ .TP
+--zoom \fIpercentage\fR
+-Zoom both the X and Y axes by \fIpercentage\fR.  See \fI-xzoom\fR for
++\-zoom \fIpercentage\fR
++Zoom both the X and Y axes by \fIpercentage\fR.  See \fI\-xzoom\fR for
+ more information.  Technically the percentage actually zoomed is the
+ square of the number supplied since the zoom is to both axes, but I
+ opted for consistency instead of accuracy.
+@@ -347,80 +347,80 @@ To load the rasterfile "my.image" onto t
+ it to fill the entire background:
+ .sp
+ .ti +5
+-xloadimage -onroot my.image
++xloadimage \-onroot my.image
+ .PP
+ To center an image on the default root background:
+ .sp
+ .ti +5
+-xloadimage -default -tile my.image
++xloadimage \-default \-tile my.image
+ .sp
+ If using a monochrome display and a color image you will probably want
+ to dither the image for a cleaner (and faster) display:
+ .sp
+ .ti +5
+-xloadimage -default -tile -dither my.image
++xloadimage \-default \-tile \-dither my.image
+ .PP
+ To load a monochrome image "my.image" onto the background, using red
+ as the foreground color, replicate the image, and overlay
+ "another.image" onto it at coordinate (10,10):
+ .sp
+ .ti +5
+-xloadimage -foreground red my.image -at 10,10 another.image
++xloadimage \-foreground red my.image \-at 10,10 another.image
+ .PP
+ To center the rectangular region from 10 to 110 along the X axis and
+ from 10 to the height of the image along the Y axis:
+ .sp
+ .ti +5
+-xloadimage -center -clip 10,10,100,0 my.image
++xloadimage \-center \-clip 10,10,100,0 my.image
+ .PP
+ To double the size of an image:
+ .sp
+ .ti +5
+-xloadimage -zoom 200 my.image
++xloadimage \-zoom 200 my.image
+ .PP
+ To halve the size of an image:
+ .sp
+ .ti +5
+-xloadimage -zoom 50 my.image
++xloadimage \-zoom 50 my.image
+ .PP
+ To brighten a dark image:
+ .sp
+ .ti +5
+-xloadimage -brighten 150 my.image
++xloadimage \-brighten 150 my.image
+ .PP
+ To darken a bright image:
+ .sp
+ .ti +5
+-xloadimage -brighten 50 my.image
++xloadimage \-brighten 50 my.image
+ .SH HINTS FOR GOOD IMAGE DISPLAYS
+ Since images are likely to come from a variety of sources, they may be
+ in a variety of aspect ratios which may not be supported by your
+-display.  The \fI-xzoom\fR and \fI-yzoom\fR options can be used to
++display.  The \fI\-xzoom\fR and \fI\-yzoom\fR options can be used to
+ change the aspect ratio of an image before display.  If you use these
+ options, it is recommended that you increase the size of one of the
+ dimensions instead of shrinking the other, since shrinking looses
+ detail.  For instance, many GIF and G3 FAX images have an X:Y ratio of
+ about 2:1.  You can correct this for viewing on a 1:1 display with
+-either \fI-xzoom 50\fR or \fI-yzoom 200\fR (reduce X axis to 50% of
++either \fI\-xzoom 50\fR or \fI\-yzoom 200\fR (reduce X axis to 50% of
+ its size and expand Y axis to 200% of its size, respectively) but the
+ latter should be used so no detail is lost in the conversion.
+ .PP
+ When zooming color images up you can reduce blockiness with
+-\fI-smooth\fR.  For zooms of 300% or more, I recommend two smoothing
++\fI\-smooth\fR.  For zooms of 300% or more, I recommend two smoothing
+ passes (although this can take awhile to do on slow machines).  There
+-will be a noticable improvement in the image.
++will be a noticeable improvement in the image.
+ .PP
+ You can perform image processing on a small portion of an image by
+-loading the image more than once and using the \fI-merge\fR, \fI-at\fR
+-and \fI-clip\fR options.  Load the image, then merge it with a
++loading the image more than once and using the \fI\-merge\fR, \fI\-at\fR
++and \fI\-clip\fR options.  Load the image, then merge it with a
+ clipped, processed version of itself.  To brighten a 100x100 rectangular
+ portion of an image located at (50,50), for instance, you could type:
+ .sp
+ .ti +5
+-xloadimage my.image -merge -at 50,50 -clip 50,50,100,100 -brighten 150 my.image
++xloadimage my.image \-merge \-at 50,50 \-clip 50,50,100,100 \-brighten 150 my.image
+ .PP
+ If you're using a display with a small colormap to display colorful
+-images, try using the \fI-gray\fR option to convert to grayscale.
++images, try using the \fI\-gray\fR option to convert to grayscale.
+ .SH PATHS AND EXTENSIONS
+ The file ~/.xloadimagerc (and optionally a system-wide file) defines a
+ number of configuration options that affect xloadimage.
+@@ -472,19 +472,19 @@ provided for compressed (.Z) files and G
+ \fBFILTERS\fR section for more information on defining your own
+ filters.
+ .PP
+-Any text on a line following a hash-mark (#) is ignored; if you wish
+-to use a hash-mark in a path, extension, or filter you can escape it
++Any text on a line following a hash\(hymark (#) is ignored; if you wish
++to use a hash\(hymark in a path, extension, or filter you can escape it
+ using a backslash (\\).
+ .PP
+ If you wish to include white-space in a filter program name, path, or
+-extension you can enclose the entire text in double-quotes.  For
++extension you can enclose the entire text in double\(hyquotes.  For
+ example:
+ .PP
+ .nf
+-  filter = "gzip -cd" .gz
++  filter = "gzip \-cd" .gz
+ .fi
+ .PP
+-Use backslash (\\) characters to allow inclusion of double-quote marks
++Use backslash (\\) characters to allow inclusion of double\(hyquote marks
+ or newlines.
+ .PP
+ The following is a sample ~/.xloadimagerc file:
+@@ -499,7 +499,7 @@ The following is a sample ~/.xloadimager
+   extension = .csun .msun .sun .face .xbm .bm
+ 
+   # invoke GNU zip if a .z or .zip extension is found
+-  filter = "gzip -cd" .z .zip
++  filter = "gzip \-cd" .z .zip
+ 
+ .fi
+ .PP
+@@ -507,7 +507,7 @@ The following is a sample ~/.xloadimager
+ .PP
+ \fIXloadimage\fR currently supports many common and some uncommon
+ image types, and can create images in several formats.  For a complete
+-list use the \fI-supported\fR option.
++list use the \fI\-supported\fR option.
+ .SH DUMPING IMAGES
+ Several image dumpers are included that can be used to create a new
+ image after loading and processing.  The NIFF (Native Image File
+@@ -518,12 +518,12 @@ format.
+ Some image dumpers allow options that affect the image output.  These
+ options are appended to the image type following a comma and are
+ separated by commas.  If a value is desired it can be specified
+-following an equals-sign.  For example, to create a monochrome JPEG
++following an equals\(hysign.  For example, to create a monochrome JPEG
+ image file with a quality factor of 80, you would use the following
+ command line:
+ .PP
+ .nf
+-  xloadimage image_name -dump jpeg,quality=80,grayscale new_image.jpg
++  xloadimage image_name \-dump jpeg,quality=80,grayscale new_image.jpg
+ .fi
+ .PP
+ Option names can be abbreviated but if the abbreviation is too short
+@@ -537,20 +537,20 @@ The xloadimage distribution includes a s
+ called \fIuufilter\fR that can be used to automatically uudecode files
+ for processing.  \fIUufilter\fR ignores extraneous lines in the file
+ so it is particularly useful if the uuencoded file was created by
+-concatenating email or news postings that had headers or line-break
++concatenating email or news postings that had headers or line\(hybreak
+ indicators included.
+ .PP
+ To make use of \fIuufilter\fR you can add the following to your
+ \fI.xloadimagerc\fR file:
+ .PP
+ .nf
+-  filter = "uufilter -s" .uu .uue
++  filter = "uufilter \-s" .uu .uue
+ .fi
+ The filter will be automatically invoked on any file with a .uu or
+-.uue extension.
++\&.uue extension.
+ .PP
+ For a list of filters automatically recognized by xloadimage use the
+-\fI-configuration\fR option.
++\fI\-configuration\fR option.
+ .PP
+ .SH SUPPORTED IMAGE OPTIONS
+ .PP
+@@ -564,7 +564,7 @@ Force a monochrome (grayscale) image to
+ image.
+ .TP
+ nointerleave
+-Create a non-interleaved file.
++Create a non\(hyinterleaved file.
+ .TP
+ optimize
+ Enable entropy parameter optimization.
+@@ -604,9 +604,9 @@ Image data compression technique.  Can b
+ \fIrle\fR (CCITT RLE compression),
+ \fIg3fax\fR (CCITT Group 3 FAX compression),
+ \fIg4fax\fR (CCITT Group 4 FAX compression),
+-\fIlzw\fR (Limpel-Ziv-Welsh compression, the default),
++\fIlzw\fR (Limpel\(hyZiv\(hyWelsh compression, the default),
+ \fIjpeg\fR (JPEG compression),
+-\fInext\fR (NeXT run-length compression),
++\fInext\fR (NeXT run\(hylength compression),
+ \fIrlew\fR (CCITT RLEW compression),
+ \fImac\fR (Macintosh PackBits compression),
+ \fIpackbits\fR (same as \fImac\fR),
+@@ -624,25 +624,25 @@ CenterLine Software
+ jimf@centerline.com
+ .fi
+ .PP
+-For a more-or-less complete list of other contributors (there are a
++For a more\(hyor\(hyless complete list of other contributors (there are a
+ \fIlot\fR of them), please see the README file enclosed with the
+ distribution.
+ .SH FILES
+ .nf
+ .in +5
+-xloadimage              - the image loader and viewer
+-xsetbg                  - pseudonym which quietly sets the background
+-xview                   - pseudonym which views in a window
+-/usr/lib/X11/Xloadimage - default system-wide configuration file
+-~/.xloadimagerc         - user's personal configuration file
++xloadimage              \- the image loader and viewer
++xsetbg                  \- pseudonym which quietly sets the background
++xview                   \- pseudonym which views in a window
++/etc/X11/Xloadimage     \- default system-wide configuration file
++~/.xloadimagerc         \- user's personal configuration file
+ .in -5
+ .fi
+ .SH COPYRIGHT
+ Copyright (c) 1989, 1993 Jim Frost and others.
+ .PP
+-\fIXloadimage\fR is copywritten material with a very loose copyright
++\fIXloadimage\fR is copyrighted material with a very loose copyright
+ allowing unlimited modification and distribution if the copyright
+-notices are left intact.  Various portions are copywritten by various
++notices are left intact.  Various portions are copyrighted by various
+ people, but all use a modification of the MIT copyright notice.
+ Please check the source for complete copyright information.  The
+ intent is to keep the source free, not to stifle its distribution, so
+@@ -662,7 +662,7 @@ file, but \fIxloadimage\fR will only dis
+ Only GIF87a format is supported.
+ .PP
+ One of the pseudonyms for \fIxloadimage\fR, \fIxview\fR, is the same
+-name as Sun uses for their SunView-under-X package.  This will be
++name as Sun uses for their SunView\(hyunder\(hyX package.  This will be
+ confusing if you're one of those poor souls who has to use Sun's
+ XView.
+ .PP
+@@ -674,7 +674,7 @@ screen, something which is normally avoi
+ also ignore the MaxSize argument's real function, to limit the maximum
+ size of the window, and allow the window to be resized larger than the
+ image.  If this happens, \fIxloadimage\fR merely places the image in
+-the upper-left corner of the window and uses the zero-value'ed pixel
++the upper\(hyleft corner of the window and uses the zero\(hyvalue'ed pixel
+ for any space which is not covered by the image.  This behavior is
+-less-than-graceful but so are window managers which are cruel enough
++less\(hythan\(hygraceful but so are window managers which are cruel enough
+ to ignore such details.
+Index: xloadimage.4.1.old/cmuwmraster.c
+===================================================================
+--- xloadimage.4.1.old.orig/cmuwmraster.c
++++ xloadimage.4.1.old/cmuwmraster.c
+@@ -16,11 +16,11 @@
+ 
+ /* SUPPRESS 558 */
+ 
+-int babble(name, headerp)
++void babble(name, headerp)
+ char *name;
+ struct cmuwm_header *headerp;
+ {
+-    printf("%s is a %dx%d %d plane CMU WM raster\n",
++    printf("%s is a %ldx%ld %ld plane CMU WM raster\n",
+ 	   name,
+ 	   memToVal(headerp->width, sizeof(long)),
+ 	   memToVal(headerp->height, sizeof(long)),
+@@ -108,7 +108,7 @@ unsigned int verbose;
+       {
+ 	  fprintf(stderr,"CMU WM raster %s is of depth %d, must be 1",
+ 		  name,
+-		  header.depth);
++		  (int) header.depth);
+ 	  return(NULL);
+       }
+ 
+Index: xloadimage.4.1.old/copyright.h
+===================================================================
+--- xloadimage.4.1.old.orig/copyright.h
++++ xloadimage.4.1.old/copyright.h
+@@ -20,7 +20,9 @@
+  */
+ 
+ #ifndef __SABER__
++#ifndef LINT
+ static char *Copyright= "Copyright 1989, 1993 Jim Frost";
++#endif /* LINT */
+ #endif
+ #define _JIM_COPYRIGHT_
+ #endif
+Index: xloadimage.4.1.old/gif.c
+===================================================================
+--- xloadimage.4.1.old.orig/gif.c
++++ xloadimage.4.1.old/gif.c
+@@ -468,7 +468,7 @@ static int gifin_push_string(code)
+  * add a new string to the string table
+  */
+ 
+-static gifin_add_string(p, e)
++static void gifin_add_string(p, e)
+      int p;
+      int e;
+ {
+@@ -488,7 +488,7 @@ static gifin_add_string(p, e)
+  * semi-graceful fatal error mechanism
+  */
+ 
+-static gifin_fatal(msg)
++static void gifin_fatal(msg)
+      char *msg;
+ {
+   printf("Error reading GIF file: %s\n", msg);
+Index: xloadimage.4.1.old/gif.h
+===================================================================
+--- xloadimage.4.1.old.orig/gif.h
++++ xloadimage.4.1.old/gif.h
+@@ -50,8 +50,8 @@ static int gifin_load_cmap();
+ static int gifin_skip_extension();
+ static int gifin_read_data_block();
+ static int gifin_push_string();
+-static int gifin_add_string();
+-static int gifin_fatal();
++static void gifin_add_string();
++static void gifin_fatal();
+ 
+ /* #defines, typedefs, and such
+  */
+Index: xloadimage.4.1.old/halftone.c
+===================================================================
+--- xloadimage.4.1.old.orig/halftone.c
++++ xloadimage.4.1.old/halftone.c
+@@ -130,23 +130,23 @@ unsigned short BlueIntensity[256]= {
+ #define GRAYSTEP ((unsigned long)(65536 / GRAYS))
+ 
+ static byte DitherBits[GRAYS][4] = {
+-  0xf, 0xf, 0xf, 0xf,
+-  0xe, 0xf, 0xf, 0xf,
+-  0xe, 0xf, 0xb, 0xf,
+-  0xa, 0xf, 0xb, 0xf,
+-  0xa, 0xf, 0xa, 0xf,
+-  0xa, 0xd, 0xa, 0xf,
+-  0xa, 0xd, 0xa, 0x7,
+-  0xa, 0x5, 0xa, 0x7,
+-  0xa, 0x5, 0xa, 0x5,
+-  0x8, 0x5, 0xa, 0x5,
+-  0x8, 0x5, 0x2, 0x5,
+-  0x0, 0x5, 0x2, 0x5,
+-  0x0, 0x5, 0x0, 0x5,
+-  0x0, 0x4, 0x0, 0x5,
+-  0x0, 0x4, 0x0, 0x1,
+-  0x0, 0x0, 0x0, 0x1,
+-  0x0, 0x0, 0x0, 0x0
++  {0xf, 0xf, 0xf, 0xf},
++  {0xe, 0xf, 0xf, 0xf},
++  {0xe, 0xf, 0xb, 0xf},
++  {0xa, 0xf, 0xb, 0xf},
++  {0xa, 0xf, 0xa, 0xf},
++  {0xa, 0xd, 0xa, 0xf},
++  {0xa, 0xd, 0xa, 0x7},
++  {0xa, 0x5, 0xa, 0x7},
++  {0xa, 0x5, 0xa, 0x5},
++  {0x8, 0x5, 0xa, 0x5},
++  {0x8, 0x5, 0x2, 0x5},
++  {0x0, 0x5, 0x2, 0x5},
++  {0x0, 0x5, 0x0, 0x5},
++  {0x0, 0x4, 0x0, 0x5},
++  {0x0, 0x4, 0x0, 0x1},
++  {0x0, 0x0, 0x0, 0x1},
++  {0x0, 0x0, 0x0, 0x0}
+ };
+ 
+ /* simple dithering algorithm, really optimized for the 4x4 array
+Index: xloadimage.4.1.old/kljcpyrght.h
+===================================================================
+--- xloadimage.4.1.old.orig/kljcpyrght.h
++++ xloadimage.4.1.old/kljcpyrght.h
+@@ -22,7 +22,9 @@
+ ****/
+ 
+ #ifndef __SABER__
++#ifndef LINT
+ static char *KLJCopyright = "Copyright 1989, 1990 Kirk L. Johnson";
++#endif /* LINT */
+ #endif
+ #define _KLJ_COPYRIGHT_
+ #endif
+Index: xloadimage.4.1.old/mcidas.c
+===================================================================
+--- xloadimage.4.1.old.orig/mcidas.c
++++ xloadimage.4.1.old/mcidas.c
+@@ -63,7 +63,7 @@ static char *convert_date(time, date)
+   minute = (time % 10000) / 100;
+   second = (time % 100);
+ 
+-  sprintf(buf, "%d:%2.2d:%2.2d %s %d, %d (day %d)",
++  snprintf(buf, 29, "%d:%2.2d:%2.2d %s %d, %d (day %d)",
+ 	  hour, minute, second, month_info[month].name, day, year,
+ 	  (date % 1000));
+   return(buf);
+@@ -94,7 +94,7 @@ static void babble(name, dir)
+      char *name;
+      struct area_dir *dir;
+ {
+-  printf("%s is a %dx%d McIDAS areafile from %s at %s (%d, %d) (%d, %d)\n",
++  printf("%s is a %ldx%ld McIDAS areafile from %s at %s (%ld, %ld) (%ld, %ld)\n",
+ 	 name,
+ 	 dir->esiz, dir->lsiz,
+ 	 mc_sensor(dir->satid),
+@@ -163,7 +163,6 @@ Image *mcidasLoad(fullname, name, verbos
+   struct navigation  nav;
+   Image          *image;
+   unsigned int    y;
+-  int doswap = 0 ;
+ 
+   if (! (zf= zopen(fullname))) {
+     perror("mcidasLoad");
+@@ -218,7 +217,7 @@ Image *mcidasLoad(fullname, name, verbos
+    */
+   zread(zf, image->data, dir.esiz * dir.lsiz * dir.zsiz) ;
+   if (dir.bands > 1)
+-      printf("Warning: Only showing first of %d bands\n", dir.bands);
++      printf("Warning: Only showing first of %ld bands\n", dir.bands);
+ 
+   zclose(zf);
+   image->title= dupString(name);
+Index: xloadimage.4.1.old/misc.h
+===================================================================
+--- /dev/null
++++ xloadimage.4.1.old/misc.h
+@@ -0,0 +1 @@
++void usageHelp() __attribute__ ((noreturn));
+Index: xloadimage.4.1.old/mit.cpyrght
+===================================================================
+--- xloadimage.4.1.old.orig/mit.cpyrght
++++ xloadimage.4.1.old/mit.cpyrght
+@@ -21,8 +21,10 @@
+  */
+ 
+ #ifndef __SABER__
++#ifndef LINT
+ static char *MitCopyright=
+   "Copyright 1989 Massachusetts Institute of Technology";
++#endif /* LINT */
+ #endif
+ #define _MIT_COPYRIGHT_
+ #endif
+Index: xloadimage.4.1.old/options.h
+===================================================================
+--- xloadimage.4.1.old.orig/options.h
++++ xloadimage.4.1.old/options.h
+@@ -8,6 +8,9 @@
+  * copyright information.
+  */
+ 
++#ifndef __OPTIONS_H__
++#define __OPTIONS_H__
++
+ /* enum with the options in it.  If you add one to this you also have to
+  * add its information to Options[] in options.c before it becomes available.
+  */
+@@ -98,3 +101,8 @@ int getNextTypeOption();
+ Image *loadImage _ArgProto((OptionSet *globalopts, OptionSet *options,
+ 			    char *name, unsigned int verbose));
+ void   identifyImage _ArgProto((char *name));
++
++void processOptions (int argc, char *argv[], OptionSet **rglobal, OptionSet **rimage);
++void addOption (OptionSet *optset, Option *newopt);
++
++#endif /* __OPTIONS_H__ */
+Index: xloadimage.4.1.old/pcx.c
+===================================================================
+--- xloadimage.4.1.old.orig/pcx.c
++++ xloadimage.4.1.old/pcx.c
+@@ -259,7 +259,6 @@ static void PCX_LoadImage ( zf ,image )
+ 	ZFILE *zf;
+ 	Image *image;
+ {
+-	int pl;
+ 	switch (PCXH->Zbpp) {	/* What kind of plane do we have ?	*/
+ 	    case 1 :			/* Bit planes			*/
+ 		if (PCXH->Znplanes == 1)	/* Only one : Read it	*/
+@@ -298,7 +297,7 @@ Image *pcxLoad ( fullname, name, verbose
+ 	unsigned int verbose;
+ {
+ 	ZFILE *zf;
+-	unsigned int i, ret;
++	unsigned int i;
+ 	int xmin;
+ 	int xmax;
+ 	int ymin;
+Index: xloadimage.4.1.old/pdsuncomp.c
+===================================================================
+--- xloadimage.4.1.old.orig/pdsuncomp.c
++++ xloadimage.4.1.old/pdsuncomp.c
+@@ -78,7 +78,6 @@ NODE *huff_tree(hist)
+   register NODE **np;           /* Node list pointer */
+ 
+   register long int num_freq;   /* Number non-zero frequencies in histogram */
+-  long int sum;                 /* Sum of all frequencies */
+ 
+   register short int num_nodes; /* Counter for DN initialization */
+   register short int cnt;       /* Miscellaneous counter */
+@@ -114,6 +113,7 @@ NODE *huff_tree(hist)
+     unsigned char *cp = (unsigned char *) hist++;
+     unsigned long int j;
+     short int i;
++    j = 0;
+     for (i=4 ; --i >= 0 ; j = (j << 8) | *(cp+i))
+       ;
+ 
+@@ -242,6 +242,7 @@ void sort_freq(freq_list,node_list,num_f
+  * 16-AUG-89 Kris Becker   USGS, Flagstaff Original Version
+  */
+ 
++#ifdef UNUSED_FUNCTIONS
+ static void free_tree(nfreed)
+      long int   *nfreed;  /* Return of total count of nodes freed. */
+ {
+@@ -253,6 +254,7 @@ static void free_tree(nfreed)
+   *nfreed = free_node(tree,total_free);
+   return;
+ }
++#endif /* UNUSED_FUNCTIONS */
+ 
+ /* free_node - deallocates an allocated NODE pointer
+  *
+@@ -351,7 +353,6 @@ static int read_var(zf, ibuf)
+      char  *ibuf;
+ {
+   int   length,result,nlen;
+-  unsigned int value;
+   unsigned char buf[2];
+ 
+   length = 0;
+@@ -361,7 +362,7 @@ static int read_var(zf, ibuf)
+   return(length);
+ }
+ 
+-skip_record(zf)
++void skip_record(zf)
+      ZFILE *zf;
+ {
+   unsigned int value;
+@@ -384,9 +385,6 @@ void pdsInit(zf, type)
+      int type;
+ {
+   if (type == PDSVARIABLE) {
+-    char buf[2];
+-    int len;
+-    char *dummy;
+ 
+     Decompressing= 1; /* flag pdsRead() to do decompressions */
+ 
+Index: xloadimage.4.1.old/reduce.c
+===================================================================
+--- xloadimage.4.1.old.orig/reduce.c
++++ xloadimage.4.1.old/reduce.c
+@@ -88,7 +88,7 @@ struct color_area {
+ /* predicate functions for qsort
+  */
+ 
+-static sortRGB(p1, p2)
++static int sortRGB(p1, p2)
+      unsigned short *p1, *p2;
+ { unsigned int red1, green1, blue1, red2, green2, blue2;
+ 
+@@ -115,7 +115,7 @@ static sortRGB(p1, p2)
+     return(1);
+ }
+ 
+-static sortRBG(p1, p2)
++static int sortRBG(p1, p2)
+      unsigned short *p1, *p2;
+ { unsigned int red1, green1, blue1, red2, green2, blue2;
+ 
+@@ -142,7 +142,7 @@ static sortRBG(p1, p2)
+     return(1);
+ }
+ 
+-static sortGRB(p1, p2)
++static int sortGRB(p1, p2)
+      unsigned short *p1, *p2;
+ { unsigned int red1, green1, blue1, red2, green2, blue2;
+ 
+@@ -169,7 +169,7 @@ static sortGRB(p1, p2)
+     return(1);
+ }
+ 
+-static sortGBR(p1, p2)
++static int sortGBR(p1, p2)
+      unsigned short *p1, *p2;
+ { unsigned int red1, green1, blue1, red2, green2, blue2;
+ 
+@@ -196,7 +196,7 @@ static sortGBR(p1, p2)
+     return(1);
+ }
+ 
+-static sortBRG(p1, p2)
++static int sortBRG(p1, p2)
+      unsigned short *p1, *p2;
+ { unsigned int red1, green1, blue1, red2, green2, blue2;
+ 
+@@ -223,7 +223,7 @@ static sortBRG(p1, p2)
+     return(1);
+ }
+ 
+-static sortBGR(p1, p2)
++static int sortBGR(p1, p2)
+      unsigned short *p1, *p2;
+ { unsigned int red1, green1, blue1, red2, green2, blue2;
+ 
+@@ -254,7 +254,7 @@ static sortBGR(p1, p2)
+  * the color area in the list of color areas.
+  */
+ 
+-static insertColorArea(pixel_counts, rlargest, rsmallest, area)
++static void insertColorArea(pixel_counts, rlargest, rsmallest, area)
+      unsigned long *pixel_counts;
+      struct color_area **rlargest, **rsmallest, *area;
+ { int a;
+@@ -368,7 +368,7 @@ Image *reduce(image, n, verbose)
+ { unsigned long pixel_counts[32768]; /* pixel occurrance histogram */
+   unsigned short pixel_array[32768];
+   unsigned long count, midpoint;
+-  int x, y, num_pixels, allocated, depth, ncolors;
++  int x, y, num_pixels, allocated, depth;
+   byte *pixel, *dpixel;
+   struct color_area *areas, *largest_area, *smallest_area;
+   struct color_area *new_area, *old_area;
+@@ -501,7 +501,7 @@ Image *reduce(image, n, verbose)
+ 
+   depth= colorsToDepth(n);
+   new_image= newRGBImage(image->width, image->height, depth);
+-  sprintf(buf, "%s (%d colors)", image->title, n);
++  snprintf(buf, BUFSIZ - 1, "%s (%d colors)", image->title, n);
+   new_image->title= dupString(buf);
+ 
+   /* calculate RGB table from each color area.  this should really calculate
+Index: xloadimage.4.1.old/rle.c
+===================================================================
+--- xloadimage.4.1.old.orig/rle.c
++++ xloadimage.4.1.old/rle.c
+@@ -14,6 +14,7 @@
+ #include <stdio.h>
+ #include "image.h"
+ #include "rle.h"
++#include "rlelib.h"
+ 
+ #undef  DEBUG
+ #undef  debug
+@@ -394,7 +395,7 @@ Image *rleLoad(fullname,name,verbose)
+ #define DMAP(v,x,y)	(modN[v]>magic[x][y] ? divN[v] + 1 : divN[v])
+ 
+ /* run the black and white through its map */
+-bw_m_line(dp,number)
++void bw_m_line(dp,number)
+      int number;
+      register unsigned char *dp;
+ {
+@@ -408,7 +409,7 @@ bw_m_line(dp,number)
+ }
+ 
+ /* convert a colour line with map to 8 bits per pixel */
+-c_m_line(dp,number,line)
++void c_m_line(dp,number,line)
+      int number,line;
+      register unsigned char *dp;
+ {
+Index: xloadimage.4.1.old/rle.h
+===================================================================
+--- xloadimage.4.1.old.orig/rle.h
++++ xloadimage.4.1.old/rle.h
+@@ -29,6 +29,9 @@
+  * 88/07/13 Graeme W. Gill
+  */
+ 
++#ifndef __RLE_H__
++#define __RLE_H__
++
+ enum sv_dispatch {
+     RUN_DISPATCH
+ };
+@@ -182,3 +185,7 @@ extern int dith_levels;	/* target effect
+ extern int dith_np2;	/* set non-zero to use non-power_of_2 matrix size */
+ extern int dith_size;	/* effective size of the dither matrix chosen */
+ 
++void bw_m_line (unsigned char *dp, int number);
++void c_m_line(unsigned char *dp, int number, int line);
++
++#endif /* __RLE_H__ */
+Index: xloadimage.4.1.old/rlelib.h
+===================================================================
+--- /dev/null
++++ xloadimage.4.1.old/rlelib.h
+@@ -0,0 +1,6 @@
++#include "rle.h"
++
++int rle_get_setup (struct sv_globals *globals);
++int rle_getrow (struct sv_globals *globals, rle_pixel *scanline[]);
++void make_gamma (double gamma, int gammamap[256]);
++void make_magic (int size, int magic[16][16]);
+Index: xloadimage.4.1.old/root.c
+===================================================================
+--- xloadimage.4.1.old.orig/root.c
++++ xloadimage.4.1.old/root.c
+@@ -16,24 +16,6 @@
+ 
+ #define RETAIN_PROP_NAME	"_XSETROOT_ID"
+ 
+-void updateProperty(dpy, w, name, type, format, data, nelem)
+-     Display	*dpy;
+-     Window	w;
+-     char	*name;
+-     Atom	type;
+-     int	format;
+-     int	data;
+-     int	nelem;
+-{
+-  /* intern the property name */
+-  Atom	atom = XInternAtom(dpy, name, 0);
+-
+-  /* create or replace the property */
+-  XChangeProperty(dpy, w, atom, type, format, PropModeReplace, 
+-		  (unsigned char *)&data, nelem);
+-}
+-
+-
+ /* Sets the close-down mode of the client to 'RetainPermanent'
+  * so all client resources will be preserved after the client
+  * exits.  Puts a property on the default root window containing
+@@ -47,9 +29,15 @@ preserveResource(dpy, w)
+ {
+   /* create dummy resource */
+   Pixmap pm= XCreatePixmap(dpy, w, 1, 1, 1);
++  unsigned char *data = (unsigned char *) &pm;
+ 	
+-  /* create/replace the property */
+-  updateProperty(dpy, w, RETAIN_PROP_NAME, XA_PIXMAP, 32, (int)pm, 1);
++  /* intern the property name */
++  char *name = RETAIN_PROP_NAME;
++  Atom atom = XInternAtom(dpy, name, 0);
++
++  /* create or replace the property */
++  XChangeProperty(dpy, w, atom, XA_PIXMAP, 32, PropModeReplace,
++                 data, sizeof(Pixmap)/4);
+ 	
+   /* retain all client resources until explicitly killed */
+   XSetCloseDownMode(dpy, RetainPermanent);
+@@ -61,35 +49,64 @@ preserveResource(dpy, w)
+  */
+ 
+ static void
+-freePrevious(dpy, w)
++freePrevious(dpy, w, verbose)
+      Display	*dpy;
+      Window	w;
++     unsigned int  verbose;
+ {
+-  Pixmap *pm;			
+-  Atom	actual_type;		/* NOTUSED */
++  Pixmap *pm;
++  unsigned char *charpm;
++  Atom actual_type;
+   int	format;
+-  int	nitems;
+-  int	bytes_after;
++  unsigned long        nitems;
++  unsigned long        bytes_after;
++  int   returncode;
+ 
+   /* intern the property name */
+   Atom atom = XInternAtom(dpy, RETAIN_PROP_NAME, 0);
+ 
+   /* look for existing resource allocation */
+-  if ((XGetWindowProperty(dpy, w, atom, 0, 1, 1/*delete*/,
+-			  AnyPropertyType, &actual_type, &format, (unsigned long *)&nitems,
+-			  (unsigned long *)&bytes_after, (unsigned char **)&pm) == Success) &&
+-      nitems == 1) 
+-    if ((actual_type == XA_PIXMAP) && (format == 32) &&
+-	(nitems == 1) && (bytes_after == 0)) {
+-      /* blast it away */
+-      XKillClient(dpy, (XID) *pm);
+-      XFree((char *)pm);
+-    }
+-    else if (actual_type != None) {
+-      fprintf(stderr,
+-	      "%s: warning: invalid format encountered for property %s\n",
+-	      RETAIN_PROP_NAME, "xloadimage");
+-    }
++  nitems = sizeof(Pixmap)/4;
++  returncode = XGetWindowProperty(dpy, w, atom,
++                 0, nitems, 1/*delete*/,
++                XA_PIXMAP, &actual_type,
++                &format, &nitems,
++                &bytes_after, &charpm);
++  if (returncode != Success) {
++    if (verbose)
++      fprintf(stderr, "failed to look for %s with return code %i.\n",
++              RETAIN_PROP_NAME, returncode);
++    return;
++  }
++
++  /* Check if the property was found */
++  if (actual_type == None) {
++    if (verbose)
++      fprintf(stderr, "didn't find evidence of prior run.\n");
++    return;
++  }
++
++  /* Make sure the dummy value is still present */
++  if (actual_type != XA_PIXMAP) {
++    if (verbose)
++      fprintf(stderr, "found wrong data type - skipped.\n");
++    return;
++  }
++
++  /* Check size, in case we're a different architecture */
++  if ((nitems != sizeof(Pixmap)/4) ||
++      (format != 32) ||
++      (bytes_after != 0)) {
++    if (verbose)
++      fprintf(stderr, "saw wrong %li / word size %i / architecture %li.\n",
++              bytes_after, format, nitems);
++    return;
++  }
++
++  /* blast it away */
++  pm = (Pixmap*) charpm;
++  XKillClient(dpy, (XID) *pm);
++  XFree(charpm);
+ }
+ 
+ #if FIND_DEC_ROOTWINDOW
+@@ -151,9 +168,11 @@ void imageOnRoot(disp, scrn, image, opti
+   Window        root, rootReturn, parentReturn, *children;
+   unsigned int  numChildren;
+   int           i;
++#ifdef FIND_DEC_ROOTWINDOW
+   char         *s;
++#endif /* FIND_DEC_ROOTWINDOW */
+ 
+-  if (opt= getOption(options, WINDOWID))
++  if ((opt= getOption(options, WINDOWID)))
+     root= opt->info.windowid;
+   else {
+     root = RootWindow(disp, scrn);
+@@ -182,20 +201,21 @@ void imageOnRoot(disp, scrn, image, opti
+     for(i = 0; i < numChildren; i++) {
+       Atom actual_type;
+       int actual_format;
+-      long nitems, bytesafter;
+-      Window *newRoot = NULL;
+-      
+-      if (XGetWindowProperty (disp, children[i], __SWM_VROOT,0,1,
+-			      False, XA_WINDOW, &actual_type, &actual_format,
+-			      (unsigned long *)&nitems, (unsigned long *)&bytesafter,
+-			      (unsigned char **) &newRoot) ==
+-	  Success && newRoot) {
+-	root = *newRoot;
++      unsigned long nitems, bytesafter;
++      unsigned char *newRoot = 0;
++
++      if ((XGetWindowProperty (disp, children[i], __SWM_VROOT,0,1,
++                             False, XA_WINDOW,
++                             &actual_type, &actual_format,
++                             &nitems, &bytesafter, &newRoot)
++          == Success) &&
++         newRoot) {
++        root = *((Window*) newRoot);
+ 	break;
+       }
+     }
+   }
+-  freePrevious(disp, root);
++  freePrevious(disp, root, verbose);
+ 
+   if (! (ximageinfo= imageToXImage(disp, scrn,
+ 				   DefaultVisual(disp, scrn),
+Index: xloadimage.4.1.old/rotate.c
+===================================================================
+--- xloadimage.4.1.old.orig/rotate.c
++++ xloadimage.4.1.old/rotate.c
+@@ -52,7 +52,6 @@ unsigned int verbose;
+   int       bit[8];			/* Array of hex values         */
+   int         x, y;
+   int         i, b;
+-  int   newx, newy;
+   int   newi, newb;
+   byte      **yptr;
+ 
+@@ -71,9 +70,10 @@ unsigned int verbose;
+     { printf("  Rotating image by %d degrees...", degrees);
+       fflush(stdout);
+     }
+-  sprintf(buf, "%s (rotated by %d degrees)", simage->title, degrees);
++  snprintf(buf, BUFSIZ - 1, "%s (rotated by %d degrees)", simage->title, degrees);
+ 
+   image1 = simage;
++  image2 = NULL;
+   do {
+     degrees -= 90;
+     switch (image1->type) {
+Index: xloadimage.4.1.old/tgncpyrght.h
+===================================================================
+--- xloadimage.4.1.old.orig/tgncpyrght.h
++++ xloadimage.4.1.old/tgncpyrght.h
+@@ -22,7 +22,9 @@
+ ****/
+ 
+ #ifndef __SABER__
++#ifndef LINT
+ static char *TGNCopyright = "Copyright (C) 1991 Tim Northrup";
++#endif /* LINT */
+ #endif
+ #define _TGN_COPYRIGHT_
+ #endif
+Index: xloadimage.4.1.old/xloadimage.h
+===================================================================
+--- xloadimage.4.1.old.orig/xloadimage.h
++++ xloadimage.4.1.old/xloadimage.h
+@@ -38,6 +38,7 @@ typedef struct {
+  */
+ 
+ void supportedImageTypes(); /* imagetypes.c */
++void dumpImage();
+ 
+ char *tail(); /* misc.c */
+ void memoryExhausted();
+@@ -47,6 +48,9 @@ void usage();
+ void goodImage();
+ int errorHandler();
+ 
++void showConfiguration(); /* config.c */
++void listImages();
++
+ char *expandPath(); /* path.c */
+ int findImage();
+ void listImages();
+Index: xloadimage.4.1.old/xpixmap.c
+===================================================================
+--- xloadimage.4.1.old.orig/xpixmap.c
++++ xloadimage.4.1.old/xpixmap.c
+@@ -54,6 +54,8 @@ Image *xpixmapLoad(fullname, name, verbo
+   int            c;
+   byte          *dptr;
+ 
++  cpp = 0;
++
+   if (! (zf= zopen(fullname)))
+     return(NULL);
+ 
+@@ -112,7 +114,7 @@ Image *xpixmapLoad(fullname, name, verbo
+     return(NULL);
+   }
+ 
+-  if (p= rindex(what, '_')) {     /* get the name in the image if there is */
++  if ((p= rindex(what, '_'))) {     /* get the name in the image if there is */
+     *p= '\0';                     /* one */
+     imagetitle= dupString(what);
+   }
+@@ -190,7 +192,7 @@ Image *xpixmapLoad(fullname, name, verbo
+       break;
+   }
+ 
+-  if (p= rindex(what, '_'))
++  if ((p= rindex(what, '_')))
+     p++;
+   else
+     p= what;
+@@ -234,7 +236,7 @@ int xpixmapIdent(fullname, name)
+      char *fullname, *name;
+ { Image *image;
+ 
+-  if (image= xpixmapLoad(fullname, name, (unsigned int)1)) {
++  if ((image= xpixmapLoad(fullname, name, (unsigned int)1))) {
+     freeImage(image);
+     return(1);
+   }
+Index: xloadimage.4.1.old/xwd.c
+===================================================================
+--- xloadimage.4.1.old.orig/xwd.c
++++ xloadimage.4.1.old/xwd.c
+@@ -418,6 +418,8 @@ Image *xwdLoad(fullname, name, verbose)
+   Image     *image;
+   int        a;
+ 
++  image = NULL;
++
+   if (! (zf= zopen(fullname)))
+     return(NULL);
+   if (! isXWD(name, zf, &header, verbose)) {
+Index: xloadimage.4.1.old/zoom.c
+===================================================================
+--- xloadimage.4.1.old.orig/zoom.c
++++ xloadimage.4.1.old/zoom.c
+@@ -53,6 +53,8 @@ Image *zoom(oimage, xzoom, yzoom, verbos
+   byte          srcmask, destmask, bit;
+   Pixel         value;
+ 
++  image = NULL;
++
+   goodImage(oimage, "zoom");
+ 
+   if (!xzoom && !yzoom) /* stupid user */
+@@ -61,23 +63,23 @@ Image *zoom(oimage, xzoom, yzoom, verbos
+   if (!xzoom) {
+     if (verbose)
+       printf("  Zooming image Y axis by %d%%...", yzoom);
+-      sprintf(buf, "%s (Y zoom %d%%)", oimage->title, yzoom);
++      snprintf(buf, BUFSIZ - 1, "%s (Y zoom %d%%)", oimage->title, yzoom);
+   }
+   else if (!yzoom) {
+     if (verbose)
+       printf("  Zooming image X axis by %d%%...", xzoom);
+-    sprintf(buf, "%s (X zoom %d%%)", oimage->title, xzoom);
++    snprintf(buf, BUFSIZ - 1, "%s (X zoom %d%%)", oimage->title, xzoom);
+   }
+   else if (xzoom == yzoom) {
+     if (verbose)
+       printf("  Zooming image by %d%%...", xzoom);
+-    sprintf(buf, "%s (%d%% zoom)", oimage->title, xzoom);
++    snprintf(buf, BUFSIZ - 1, "%s (%d%% zoom)", oimage->title, xzoom);
+   }
+   else {
+     if (verbose)
+       printf("  Zooming image X axis by %d%% and Y axis by %d%%...",
+ 	     xzoom, yzoom);
+-    sprintf(buf, "%s (X zoom %d%% Y zoom %d%%)", oimage->title,
++    snprintf(buf, BUFSIZ - 1, "%s (X zoom %d%% Y zoom %d%%)", oimage->title,
+ 	    xzoom, yzoom);
+   }
+   if (verbose)
+Index: xloadimage.4.1.old/merge.c
+===================================================================
+--- xloadimage.4.1.old.orig/merge.c
++++ xloadimage.4.1.old/merge.c
+@@ -244,6 +244,7 @@ Image *tile(image, x, y, width, height,
+      int x, y;
+      unsigned int width, height, verbose;
+ { Image *base, *tmp;
++  int nx, ny;
+ 
+   if (verbose) {
+     printf("  Tiling...");
+@@ -259,16 +260,14 @@ Image *tile(image, x, y, width, height,
+   else
+     base = newTrueImage(width, height);
+ 
+-  while (x < base->width) {
+-    while(y < base->height) {
+-      tmp = merge(base, image, x, y, 0);
++  for (nx = x; nx < base->width; nx += image->width) {
++    for(ny = y; ny < base->height; ny += image->height) {
++      tmp = merge(base, image, nx, ny, 0);
+       if (tmp != base) {
+ 	freeImage(base);
+ 	base = tmp;
+       }
+-      y += image->width;
+     }
+-    x += image->width;
+   }
+   printf("done.\n");
+   return(base);
+Index: xloadimage.4.1.old/zio.c
+===================================================================
+--- xloadimage.4.1.old.orig/zio.c
++++ xloadimage.4.1.old/zio.c
+@@ -210,9 +210,30 @@ ZFILE *zopen(name)
+     if ((strlen(name) > strlen(filter->extension)) &&
+ 	!strcmp(filter->extension,
+ 		name + (strlen(name) - strlen(filter->extension)))) {
+-      debug(("Filtering image through '%s'\n", filter->filter));
+-      zf->type= ZPIPE;
+-      sprintf(buf, "%s %s", filter->filter, name);
++            char *fname, *t, *s;
++            
++            /* meta-char protection from xli.
++             *
++             * protect in single quotes, replacing single quotes
++             * with '"'"', so worst-case expansion is 5x
++             */
++            
++            s = fname = (char *) lmalloc(1 + (5 * strlen(name)) + 1 + 1);
++			*s++ = '\'';
++            for (t = name; *t; ++t) {
++                if ('\'' == *t) {
++					/* 'foo'bar' -> 'foo'"'"'bar' */
++                    strcpy(s, "'\"'\"'");
++					s += strlen(s);
++                } else {
++                    *s++ = *t;
++                }
++            }
++            strcpy (s, "'");
++            debug(("Filtering image through '%s'\n", filter->filter));
++            zf->type= ZPIPE;
++            snprintf(buf, BUFSIZ - 1, "%s %s", filter->filter, fname);
++            lfree (fname);
+       if (! (zf->stream= popen(buf, "r"))) {
+ 	lfree((byte *)zf->filename);
+ 	zf->filename= NULL;
+Index: xloadimage.4.1.old/uufilter.man
+===================================================================
+--- xloadimage.4.1.old.orig/uufilter.man
++++ xloadimage.4.1.old/uufilter.man
+@@ -1,8 +1,8 @@
+-.TH UUFILTER 1 "21 October 1993"
++.TH UUFILTER 1x "21 October 1993"
+ .SH NAME
+ uufilter - decode uuencoded files to stdout
+ .SH SYNOPSIS
+-\fIuufilter\fR [-f \fIoutfilename\fR] [-l] [-s] [-v] [\fIinfilename\fR]
++\fIuufilter\fR [\-f \fIoutfilename\fR] [\-l] [\-s] [\-v] [\fIinfilename\fR]
+ .SH DESCRIPTION
+ \fIUufilter\fR is a "smart" uuencoded file decoder that can optionally
+ dump the file to stdout.
+@@ -12,23 +12,23 @@ If no filename is supplied, input is rea
+ \fIUufilter\fR automatically ignores lines that do not appear to be
+ part of the uuencoded file.  This is particularly useful in uudecoding
+ files that have been concatenated from several email or news postings
+-without stripping off the headers or otherwise editting extraneous
++without stripping off the headers or otherwise editing extraneous
+ content.
+ .SH OPTIONS
+ .TP 8
+--f \fIfilename\fR
++\-f \fIfilename\fR
+ Dump output to \fIfilename\fR rather than the name specified in the
+ uuencoded file.
+ .TP
+--l
++\-l
+ Lenient mode.  This is useful if passed through a mailer that adds
+ trailing spaces.
+ .TP
+--s
++\-s
+ Dump output to stdout rather than to the filename indicated in the
+ uuencoded file.
+ .TP
+--v
++\-v
+ Verbose mode; talks about what's going on.
+ .SH AUTHOR
+ Jim Frost (jimf@centerline.com)
+Index: xloadimage.4.1.old/autoconfig.c
+===================================================================
+--- xloadimage.4.1.old.orig/autoconfig.c
++++ xloadimage.4.1.old/autoconfig.c
+@@ -5,6 +5,7 @@
+  * jim frost 09.05.93
+  */
+ 
++#include <string.h>
+ #include <stdio.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+Index: xloadimage.4.1.old/build-info
+===================================================================
+--- xloadimage.4.1.old.orig/build-info
++++ xloadimage.4.1.old/build-info
+@@ -30,6 +30,12 @@ else
+   uname='char *BuildSystem= "<unknown system>";'
+ fi
+ 
++if [ -n "$SOURCE_DATE_EPOCH" ]; then
++  date='char *BuildDate= "'$(LC_ALL=C date --utc --date="@${SOURCE_DATE_EPOCH}")'";'
++  user='char *BuildUser= (char *)0;'
++  uname='char *BuildSystem= (char *)0;'
++fi
++
+ echo '/* THIS FILE IS AUTOMATICALLY GENERATED */' > build.c
+ echo $uname >> build.c
+ echo $date >> build.c
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index 9b663aa158..c300509e78 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -26,6 +26,7 @@ 
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Jean-Baptiste Note <jean-baptiste.note@m4x.org>
+;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -6736,3 +6737,70 @@  that Make knows which object files must be recompiled when a dependency has
 changed.")
     (home-page "https://gitlab.freedesktop.org/xorg/util/gccmakedep")
     (license license:x11)))
+
+(define-public xloadimage
+  (package
+    (name "xloadimage")
+    (version "4.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://debian/pool/main/x/xloadimage/xloadimage_"
+                           version ".orig.tar.gz"))
+       (sha256
+        (base32 "1i7miyvk5ydhi6yi8593vapavhwxcwciir8wg9d2dcyg9pccf2s0"))
+       (patches (search-patches "xloadimage-debian-series-25.patch"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-paths
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (substitute* "Makefile"
+                 (("/usr/lib") (string-append out "/lib"))
+                 (("cp( xloadimagerc)" _ file)
+                  (string-append "install -D" file)))
+               #t)))
+         (replace 'configure
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (invoke "chmod" "+x" "./configure")
+               (setenv "CONFIG_SHELL" (which "sh"))
+               (invoke "./configure"))))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (etc (string-append out "/etc/X11"))
+                    (bin (string-append out "/bin"))
+                    (man1 (string-append out "/share/man/man1")))
+               (install-file "xloadimage" bin)
+               (symlink "xloadimage" (string-append bin "/xsetbg"))
+               (symlink "xloadimage" (string-append bin "/xview"))
+               (install-file "uufilter" bin)
+               (mkdir-p etc)
+               (copy-file "xloadimagerc"
+                          (string-append etc "/Xloadimage"))
+               (mkdir-p man1)
+               (copy-file "xloadimage.man"
+                          (string-append man1 "/xloadimage.1"))
+               (symlink "xloadimage.1" (string-append man1 "/xsetbg.1"))
+               (symlink "xloadimage.1" (string-append man1 "/xview.1"))
+               (copy-file "uufilter.man"
+                          (string-append man1 "/uufilter.1"))
+               #t)))
+         ;; No test suite
+         (delete 'check))))
+    (inputs
+     `(("libx11" ,libx11)
+       ("libjpeg" ,libjpeg-turbo)
+       ("libpng" ,libpng)
+       ("libtiff" ,libtiff)))
+    (synopsis "Utility to view many different types of images under X11")
+    (description "Xloadimage can view png, jpeg, gif, tiff, niff, sunraster,
+fbm, cmuraster, pbm, faces, rle, xwd, vff, mcidas, vicar, pcx, gem, macpaint,
+xpm and xbm files.  Or put them on the root window, or dump them.  It also
+does a variety of processing, including: clipping, dithering, depth reduction,
+zoom, brightening/darkening and merging.")
+    (home-page "https://sioseis.ucsd.edu/xloadimage.html")
+    (license license:expat)))