Initial revision
authorMike Whitson <mwhitson@xiph.org>
Tue, 13 Jul 1999 06:50:33 +0000 (06:50 +0000)
committerMike Whitson <mwhitson@xiph.org>
Tue, 13 Jul 1999 06:50:33 +0000 (06:50 +0000)
svn path=/trunk/vorbis/; revision=1

13 files changed:
Makefile.in [new file with mode: 0644]
README [new file with mode: 0644]
configure [new file with mode: 0755]
configure.in [new file with mode: 0644]
configure.sub [new file with mode: 0755]
doc/framing.txt [new file with mode: 0644]
install.sh [new file with mode: 0644]
lib/analysis.c [new file with mode: 0644]
lib/codec.h [new file with mode: 0644]
lib/envelope.c [new file with mode: 0644]
lib/framing.c [new file with mode: 0644]
lib/mdct.c [new file with mode: 0644]
lib/mdct.h [new file with mode: 0644]

diff --git a/Makefile.in b/Makefile.in
new file mode 100644 (file)
index 0000000..40971ca
--- /dev/null
@@ -0,0 +1,65 @@
+# vorbis makefile configured for use with gcc on any platform
+
+###############################################################################
+#                                                                             #
+# To build a production vorbis (preferrably using gmake), just type 'make'.   #
+# To build with debugging or profiling information, use 'make debug' or       #
+# 'make profile' respectively.  'make clean' is a good idea between builds    #
+# with different target names, or before a final build.                       #
+#                                                                             #
+###############################################################################
+
+
+# DO NOT EDIT BELOW! ##########################################################
+# (unless, of course, you know what you are doing :) ##########################
+
+@SET_MAKE@
+FLAGS=@TYPESIZES@ @CFLAGS@
+OPT=@OPT@ $(FLAGS)
+DEBUG=@DEBUG@ $(FLAGS)
+PROFILE=@PROFILE@ $(FLAGS)
+CC=@CC@
+LD=@CC@
+LDFLAGS=@LDFLAGS@ $(FLAGS)
+AR=@AR@
+RANLIB=@RANLIB@
+LIBS=@LIBS@ @pthread_lib@ -lm
+
+OFILES =       framing.o
+TARGETFILES =  main.o $(OFILES)
+
+all:
+       $(MAKE) target CFLAGS="$(OPT)" 
+
+debug: 
+       $(MAKE) target CFLAGS="$(DEBUG)"
+
+profile: 
+       $(MAKE) target CFLAGS="$(PROFILE)"
+
+selftest:
+       $(MAKE) clean
+       $(CC) $(DEBUG) $(LDFLAGS) -D_V_SELFTEST framing.c -o test_framing 
+       @echo
+       @./test_framing
+
+target:        $(TARGETFILES) libvorbis.a
+       $(LD) $(CFLAGS) $(TARGETFILES) $(LDFLAGS) libvorbis.a -o ogg $(LIBS)
+
+libvorbis.a:   $(OFILES)       
+               $(AR) -r libvorbis.a $(OFILES)
+               $(RANLIB) libvorbis.a
+
+$(OFILES):     mdct.h
+
+.c.o:
+       $(CC) $(CFLAGS) -c $<
+
+clean:
+       -rm -f *.o *.a test* *~ *.out ogg config.*
+
+
+
+
+
+
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..35be949
--- /dev/null
+++ b/README
@@ -0,0 +1,70 @@
+********************************************************************
+*                                                                  *
+* THIS FILE IS PART OF THE Ogg Vorbis SOFTWARE CODEC SOURCE CODE.  *
+* USE, DISTRIBUTION AND REPRODUCTION OF THIS SOURCE IS GOVERNED BY *
+* THE GNU PUBLIC LICENSE 2, WHICH IS INCLUDED WITH THIS SOURCE.    *
+* PLEASE READ THESE TERMS DISTRIBUTING.                            *
+*                                                                  *
+* THE OggSQUISH SOURCE CODE IS (C) COPYRIGHT 1994-1999             *
+* by Monty <monty@xiph.org> and The XIPHOPHORUS Company            *
+* http://www.xiph.org/                                             *
+*                                                                  *
+********************************************************************
+
+WHAT'S HERE:
+
+This source distribution includes libvorbis, a full-featured example
+encoder/player to demonstrate use of libvorbis and documentation on
+the Ogg Vorbis audio coding format.
+
+Directory:
+
+./lib                  The source for libvorbis, a GPLed inplementation of 
+               the public domain OggSquish Vorbis audio encoding
+               format.
+
+./cmdline      A full-featured command line encoder/decoder/player
+               utility ('vorbis') that demonstrates programmatic use
+               of libvorbis.
+
+./docs          Vorbis specification documents
+
+WHAT IS VORBIS:
+
+Vorbis is a general purpose audio and music encoding format
+contemporary to MPEG-4's AAC and TwinVQ, the next generation beyond
+MPEG audio layer 3. Unlike the MPEG sponsored formats (and other
+proprietary formats such as RealAudio G2 and Windows' flavor of the
+month), the Vorbis CODEC specification belongs to the public domain.
+All the technical details are published and documented, and any
+software entity may make full use of the format without royalty or
+patent concerns.
+
+This package contains libvorbis, a GPLed software implementation of
+the Vorbis specification by the Xiphophorus company (http://www.xiph.org/).
+
+CONTACT:
+
+The OggSquish homepage is located at 'http://www.xiph.org/OggSquish'.
+Vorbis's homepage is located at 'http://www.xiph.org/OggSquish/vorbis.html'.
+Up to date technical documents, contact information, source code and
+pre-built utilities may be found there.
+
+BUILD:
+
+A standard build should consist of nothing more than:
+
+./configure
+./make 
+
+and as root if desired :
+
+./make install
+
+This will install the ogg vorbis commandline encoder/player ('ogg')
+into /usr/local/bin, the ogg player and libvorbis manpages into
+/usr/local/man/ and libvorbis.a into /usr/local/lib.
+
+Monty <monty@xiph.org>, <xiphmont@mit.edu>
+
+$Id: README,v 1.1 1999/07/13 06:50:34 mwhitson Exp $
diff --git a/configure b/configure
new file mode 100755 (executable)
index 0000000..3c9115f
--- /dev/null
+++ b/configure
@@ -0,0 +1,2844 @@
+#! /bin/sh
+
+# Guess values for system-dependent variables and create Makefiles.
+# Generated automatically using autoconf version 2.12 
+# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+# Defaults:
+ac_help=
+ac_default_prefix=/usr/local
+# Any additions from configure.in:
+ac_help="$ac_help
+  --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=
+# Maximum number of lines to put in a shell here document.
+ac_max_here_lines=12
+
+ac_prev=
+for ac_option
+do
+
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval "$ac_prev=\$ac_option"
+    ac_prev=
+    continue
+  fi
+
+  case "$ac_option" in
+  -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+  *) ac_optarg= ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case "$ac_option" in
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir="$ac_optarg" ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build="$ac_optarg" ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file="$ac_optarg" ;;
+
+  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+  | --da=*)
+    datadir="$ac_optarg" ;;
+
+  -disable-* | --disable-*)
+    ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
+      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+    fi
+    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+    eval "enable_${ac_feature}=no" ;;
+
+  -enable-* | --enable-*)
+    ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
+      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+    fi
+    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+    case "$ac_option" in
+      *=*) ;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "enable_${ac_feature}='$ac_optarg'" ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix="$ac_optarg" ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he)
+    # Omit some internal or obsolete options to make the list less imposing.
+    # This message is too long to be a string in the A/UX 3.1 sh.
+    cat << EOF
+Usage: configure [options] [host]
+Options: [defaults in brackets after descriptions]
+Configuration:
+  --cache-file=FILE       cache test results in FILE
+  --help                  print this message
+  --no-create             do not create output files
+  --quiet, --silent       do not print \`checking...' messages
+  --version               print the version of autoconf that created configure
+Directory and file names:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [same as prefix]
+  --bindir=DIR            user executables in DIR [EPREFIX/bin]
+  --sbindir=DIR           system admin executables in DIR [EPREFIX/sbin]
+  --libexecdir=DIR        program executables in DIR [EPREFIX/libexec]
+  --datadir=DIR           read-only architecture-independent data in DIR
+                          [PREFIX/share]
+  --sysconfdir=DIR        read-only single-machine data in DIR [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data in DIR
+                          [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data in DIR [PREFIX/var]
+  --libdir=DIR            object code libraries in DIR [EPREFIX/lib]
+  --includedir=DIR        C header files in DIR [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc in DIR [/usr/include]
+  --infodir=DIR           info documentation in DIR [PREFIX/info]
+  --mandir=DIR            man documentation in DIR [PREFIX/man]
+  --srcdir=DIR            find the sources in DIR [configure dir or ..]
+  --program-prefix=PREFIX prepend PREFIX to installed program names
+  --program-suffix=SUFFIX append SUFFIX to installed program names
+  --program-transform-name=PROGRAM
+                          run sed PROGRAM on installed program names
+EOF
+    cat << EOF
+Host type:
+  --build=BUILD           configure for building on BUILD [BUILD=HOST]
+  --host=HOST             configure for HOST [guessed]
+  --target=TARGET         configure for TARGET [TARGET=HOST]
+Features and packages:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --x-includes=DIR        X include files are in DIR
+  --x-libraries=DIR       X library files are in DIR
+EOF
+    if test -n "$ac_help"; then
+      echo "--enable and --with options recognized:$ac_help"
+    fi
+    exit 0 ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host="$ac_optarg" ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir="$ac_optarg" ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir="$ac_optarg" ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir="$ac_optarg" ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir="$ac_optarg" ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst \
+  | --locals | --local | --loca | --loc | --lo)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+    localstatedir="$ac_optarg" ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir="$ac_optarg" ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir="$ac_optarg" ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix="$ac_optarg" ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix="$ac_optarg" ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix="$ac_optarg" ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name="$ac_optarg" ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir="$ac_optarg" ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir="$ac_optarg" ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site="$ac_optarg" ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir="$ac_optarg" ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir="$ac_optarg" ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target="$ac_optarg" ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers)
+    echo "configure generated by autoconf version 2.12"
+    exit 0 ;;
+
+  -with-* | --with-*)
+    ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
+      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+    fi
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    case "$ac_option" in
+      *=*) ;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "with_${ac_package}='$ac_optarg'" ;;
+
+  -without-* | --without-*)
+    ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
+      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+    fi
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    eval "with_${ac_package}=no" ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes="$ac_optarg" ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries="$ac_optarg" ;;
+
+  -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+    ;;
+
+  *)
+    if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
+      echo "configure: warning: $ac_option: invalid host type" 1>&2
+    fi
+    if test "x$nonopt" != xNONE; then
+      { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
+    fi
+    nonopt="$ac_option"
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
+fi
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+# File descriptor usage:
+# 0 standard input
+# 1 file creation
+# 2 errors and warnings
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 6 checking for... messages and results
+# 5 compiler messages saved in config.log
+if test "$silent" = yes; then
+  exec 6>/dev/null
+else
+  exec 6>&1
+fi
+exec 5>./config.log
+
+echo "\
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+" 1>&5
+
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell metacharacters.
+ac_configure_args=
+for ac_arg
+do
+  case "$ac_arg" in
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c) ;;
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+  *" "*|*"     "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
+  ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+  *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+  esac
+done
+
+# NLS nuisances.
+# Only set these to C if already set.  These must not be set unconditionally
+# because not all systems understand e.g. LANG=C (notably SCO).
+# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
+# Non-C LC_CTYPE values break the ctype check.
+if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
+if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo > confdefs.h
+
+# A filename unique to this package, relative to the directory that
+# configure is in, which we can look for to find out if srcdir is correct.
+ac_unique_file=mdct.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 $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+  # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
+  if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+    ac_n= ac_c='
+' ac_t='       '
+  else
+    ac_n=-n ac_c= ac_t=
+  fi
+else
+  ac_n= ac_c='\c' ac_t=
+fi
+
+
+#AC_CONFIG_HEADER(config.h)
+
+cp configure.guess config.guess
+cp configure.sub config.sub
+
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+  if test -f $ac_dir/install-sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f $ac_dir/install.sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
+fi
+ac_config_guess=$ac_aux_dir/config.guess
+ac_config_sub=$ac_aux_dir/config.sub
+ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+
+
+# Make sure we can run config.sub.
+if $ac_config_sub sun4 >/dev/null 2>&1; then :
+else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking host system type""... $ac_c" 1>&6
+echo "configure:555: checking host system type" >&5
+
+host_alias=$host
+case "$host_alias" in
+NONE)
+  case $nonopt in
+  NONE)
+    if host_alias=`$ac_config_guess`; then :
+    else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
+    fi ;;
+  *) host_alias=$nonopt ;;
+  esac ;;
+esac
+
+host=`$ac_config_sub $host_alias`
+host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+echo "$ac_t""$host" 1>&6
+
+
+case $host 
+       in *-*-irix*)
+               if test -z "$CC"; then
+                       CC=cc
+               fi
+               echo $ac_n "checking for ALwritesamps in -laudio""... $ac_c" 1>&6
+echo "configure:582: checking for ALwritesamps in -laudio" >&5
+ac_lib_var=`echo audio'_'ALwritesamps | 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="-laudio  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 590 "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 ALwritesamps();
+
+int main() {
+ALwritesamps()
+; return 0; }
+EOF
+if { (eval echo configure:601: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_lib=HAVE_LIB`echo audio | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+  LIBS="-laudio $LIBS"
+
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+       ;;
+esac
+
+if test -z "$CC"; then
+       # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:635: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_CC="gcc"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:664: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  ac_prog_rejected=no
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
+        ac_prog_rejected=yes
+       continue
+      fi
+      ac_cv_prog_CC="cc"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# -gt 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    set dummy "$ac_dir/$ac_word" "$@"
+    shift
+    ac_cv_prog_CC="$@"
+  fi
+fi
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+  test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
+echo "configure:712: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+cat > conftest.$ac_ext <<EOF
+#line 722 "configure"
+#include "confdefs.h"
+main(){return(0);}
+EOF
+if { (eval echo configure:726: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  ac_cv_prog_cc_works=yes
+  # If we can't run a trivial program, we are probably using a cross compiler.
+  if (./conftest; exit) 2>/dev/null; then
+    ac_cv_prog_cc_cross=no
+  else
+    ac_cv_prog_cc_cross=yes
+  fi
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  ac_cv_prog_cc_works=no
+fi
+rm -fr conftest*
+
+echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
+if test $ac_cv_prog_cc_works = no; then
+  { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
+fi
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
+echo "configure:746: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
+echo "configure:751: checking whether we are using GNU C" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.c <<EOF
+#ifdef __GNUC__
+  yes;
+#endif
+EOF
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:760: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+  ac_cv_prog_gcc=yes
+else
+  ac_cv_prog_gcc=no
+fi
+fi
+
+echo "$ac_t""$ac_cv_prog_gcc" 1>&6
+
+if test $ac_cv_prog_gcc = yes; then
+  GCC=yes
+  ac_test_CFLAGS="${CFLAGS+set}"
+  ac_save_CFLAGS="$CFLAGS"
+  CFLAGS=
+  echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
+echo "configure:775: checking whether ${CC-cc} accepts -g" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  echo 'void f(){}' > conftest.c
+if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+  ac_cv_prog_cc_g=yes
+else
+  ac_cv_prog_cc_g=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
+  if test "$ac_test_CFLAGS" = set; then
+    CFLAGS="$ac_save_CFLAGS"
+  elif test $ac_cv_prog_cc_g = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-O2"
+  fi
+else
+  GCC=
+  test "${CFLAGS+set}" = set || CFLAGS="-g"
+fi
+       
+fi
+# Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:806: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_RANLIB="ranlib"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
+fi
+fi
+RANLIB="$ac_cv_prog_RANLIB"
+if test -n "$RANLIB"; then
+  echo "$ac_t""$RANLIB" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+# Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:835: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_AR="ar"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+fi
+fi
+AR="$ac_cv_prog_AR"
+if test -n "$AR"; then
+  echo "$ac_t""$AR" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+
+if test -z "$GCC"; then
+       case $host in 
+       *-*-irix*)
+               DEBUG="-g" 
+               OPT="-O2 -w"
+               PROFILE="-p -g3 -O2" ;;
+       sparc-sun-solaris*)
+               DEBUG="-v -g"
+               OPT="-xO4 -fast -w -fsingle -fsimple -native -xcg92"
+               PROFILE="-v -xpg -g -xO4 -fast -fsingle -native -fsimple -xcg92 -Dsuncc" ;;
+       *)
+               DEBUG="-g"
+               OPT="-O"
+               PROFILE="-g -p" ;;
+        esac
+else
+       case $host in 
+       i?86-*-linux*)
+               DEBUG="-g -Wall -fsigned-char"
+               OPT="-O20 -ffast-math -fsigned-char"
+               PROFILE="-pg -g -O20 -fsigned-char";;
+       sparc-sun-*)
+               DEBUG="-g -Wall -fsigned-char -mv8"
+               OPT="-O20 -ffast-math -fsigned-char -mv8"
+               PROFILE="-pg -g -O20 -fsigned-char -mv8" ;;
+       *)
+               DEBUG="-g -Wall -fsigned-char"
+               OPT="-O20 -fsigned-char"
+               PROFILE="-O20 -g -pg -fsigned-char" ;;
+        esac
+fi
+
+echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
+echo "configure:894: 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 909 "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:915: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  CPP="${CC-cc} -E -traditional-cpp"
+  cat > conftest.$ac_ext <<EOF
+#line 926 "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:932: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  CPP=/lib/cpp
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+  ac_cv_prog_CPP="$CPP"
+fi
+  CPP="$ac_cv_prog_CPP"
+else
+  ac_cv_prog_CPP="$CPP"
+fi
+echo "$ac_t""$CPP" 1>&6
+
+echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
+echo "configure:955: 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 960 "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:968: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  ac_cv_header_stdc=yes
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+cat > conftest.$ac_ext <<EOF
+#line 985 "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 1003 "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 1024 "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:1035: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+then
+  :
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  ac_cv_header_stdc=no
+fi
+rm -fr conftest*
+fi
+
+fi
+fi
+
+echo "$ac_t""$ac_cv_header_stdc" 1>&6
+if test $ac_cv_header_stdc = yes; then
+  cat >> confdefs.h <<\EOF
+#define STDC_HEADERS 1
+EOF
+
+fi
+
+
+CFLAGS=""
+
+# 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:1066: 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 1128 "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:1133: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  # We can compile using X headers with no special include directory.
+ac_x_includes=
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  # Look for the header file in a standard set of common directories.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+  for ac_dir in               \
+    /usr/X11/include          \
+    /usr/X11R6/include        \
+    /usr/X11R5/include        \
+    /usr/X11R4/include        \
+                              \
+    /usr/include/X11          \
+    /usr/include/X11R6        \
+    /usr/include/X11R5        \
+    /usr/include/X11R4        \
+                              \
+    /usr/local/X11/include    \
+    /usr/local/X11R6/include  \
+    /usr/local/X11R5/include  \
+    /usr/local/X11R4/include  \
+                              \
+    /usr/local/include/X11    \
+    /usr/local/include/X11R6  \
+    /usr/local/include/X11R5  \
+    /usr/local/include/X11R4  \
+                              \
+    /usr/X386/include         \
+    /usr/x386/include         \
+    /usr/XFree86/include/X11  \
+                              \
+    /usr/include              \
+    /usr/local/include        \
+    /usr/unsupported/include  \
+    /usr/athena/include       \
+    /usr/local/x11r5/include  \
+    /usr/lpp/Xamples/include  \
+                              \
+    /usr/openwin/include      \
+    /usr/openwin/share/include \
+    ; \
+  do
+    if test -r "$ac_dir/$x_direct_test_include"; then
+      ac_x_includes=$ac_dir
+      break
+    fi
+  done
+fi
+rm -f conftest*
+fi # $ac_x_includes = NO
+
+if test "$ac_x_libraries" = NO; then
+  # Check for the libraries.
+
+  test -z "$x_direct_test_library" && x_direct_test_library=Xt
+  test -z "$x_direct_test_function" && x_direct_test_function=XtMalloc
+
+  # See if we find them without any special options.
+  # Don't add to $LIBS permanently.
+  ac_save_LIBS="$LIBS"
+  LIBS="-l$x_direct_test_library $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1202 "configure"
+#include "confdefs.h"
+
+int main() {
+${x_direct_test_function}()
+; return 0; }
+EOF
+if { (eval echo configure:1209: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  LIBS="$ac_save_LIBS"
+# We can link X programs with no special library path.
+ac_x_libraries=
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  LIBS="$ac_save_LIBS"
+# First see if replacing the include by lib works.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+for ac_dir in `echo "$ac_x_includes" | sed s/include/lib/` \
+    /usr/X11/lib          \
+    /usr/X11R6/lib        \
+    /usr/X11R5/lib        \
+    /usr/X11R4/lib        \
+                          \
+    /usr/lib/X11          \
+    /usr/lib/X11R6        \
+    /usr/lib/X11R5        \
+    /usr/lib/X11R4        \
+                          \
+    /usr/local/X11/lib    \
+    /usr/local/X11R6/lib  \
+    /usr/local/X11R5/lib  \
+    /usr/local/X11R4/lib  \
+                          \
+    /usr/local/lib/X11    \
+    /usr/local/lib/X11R6  \
+    /usr/local/lib/X11R5  \
+    /usr/local/lib/X11R4  \
+                          \
+    /usr/X386/lib         \
+    /usr/x386/lib         \
+    /usr/XFree86/lib/X11  \
+                          \
+    /usr/lib              \
+    /usr/local/lib        \
+    /usr/unsupported/lib  \
+    /usr/athena/lib       \
+    /usr/local/x11r5/lib  \
+    /usr/lpp/Xamples/lib  \
+    /lib/usr/lib/X11     \
+                          \
+    /usr/openwin/lib      \
+    /usr/openwin/share/lib \
+    ; \
+do
+  for ac_extension in a so sl; do
+    if test -r $ac_dir/lib${x_direct_test_library}.$ac_extension; then
+      ac_x_libraries=$ac_dir
+      break 2
+    fi
+  done
+done
+fi
+rm -f conftest*
+fi # $ac_x_libraries = NO
+
+if test "$ac_x_includes" = NO || test "$ac_x_libraries" = NO; then
+  # Didn't find X anywhere.  Cache the known absence of X.
+  ac_cv_have_x="have_x=no"
+else
+  # Record where we found X for the cache.
+  ac_cv_have_x="have_x=yes \
+               ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries"
+fi
+fi
+  fi
+  eval "$ac_cv_have_x"
+fi # $with_x != no
+
+if test "$have_x" != yes; then
+  echo "$ac_t""$have_x" 1>&6
+  no_x=yes
+else
+  # If each of the values was on the command line, it overrides each guess.
+  test "x$x_includes" = xNONE && x_includes=$ac_x_includes
+  test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
+  # Update the cache value to reflect the command line values.
+  ac_cv_have_x="have_x=yes \
+               ac_x_includes=$x_includes ac_x_libraries=$x_libraries"
+  echo "$ac_t""libraries $x_libraries, headers $x_includes" 1>&6
+fi
+
+if test "$no_x" = yes; then
+  # Not all programs may use this symbol, but it does not hurt to define it.
+  cat >> confdefs.h <<\EOF
+#define X_DISPLAY_MISSING 1
+EOF
+
+  X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
+else
+  if test -n "$x_includes"; then
+    X_CFLAGS="$X_CFLAGS -I$x_includes"
+  fi
+
+  # It would also be nice to do this for all -L options, not just this one.
+  if test -n "$x_libraries"; then
+    X_LIBS="$X_LIBS -L$x_libraries"
+    # For Solaris; some versions of Sun CC require a space after -R and
+    # others require no space.  Words are not sufficient . . . .
+    case "`(uname -sr) 2>/dev/null`" in
+    "SunOS 5"*)
+      echo $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6
+echo "configure:1315: 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 1318 "configure"
+#include "confdefs.h"
+
+int main() {
+
+; return 0; }
+EOF
+if { (eval echo configure:1325: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  ac_R_nospace=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_R_nospace=no
+fi
+rm -f conftest*
+      if test $ac_R_nospace = yes; then
+       echo "$ac_t""no" 1>&6
+       X_LIBS="$X_LIBS -R$x_libraries"
+      else
+       LIBS="$ac_xsave_LIBS -R $x_libraries"
+       cat > conftest.$ac_ext <<EOF
+#line 1341 "configure"
+#include "confdefs.h"
+
+int main() {
+
+; return 0; }
+EOF
+if { (eval echo configure:1348: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  ac_R_space=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_R_space=no
+fi
+rm -f conftest*
+       if test $ac_R_space = yes; then
+         echo "$ac_t""yes" 1>&6
+         X_LIBS="$X_LIBS -R $x_libraries"
+       else
+         echo "$ac_t""neither works" 1>&6
+       fi
+      fi
+      LIBS="$ac_xsave_LIBS"
+    esac
+  fi
+
+  # Check for system-dependent libraries X programs must link with.
+  # Do this before checking for the system-independent R6 libraries
+  # (-lICE), since we may need -lsocket or whatever for X linking.
+
+  if test "$ISC" = yes; then
+    X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
+  else
+    # Martyn.Johnson@cl.cam.ac.uk says this is needed for Ultrix, if the X
+    # libraries were built with DECnet support.  And karl@cs.umb.edu says
+    # the Alpha needs dnet_stub (dnet does not exist).
+    echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6
+echo "configure:1380: 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 1388 "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:1399: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+    if test $ac_cv_lib_dnet_dnet_ntoa = no; then
+      echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6
+echo "configure:1421: 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 1429 "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:1440: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+    fi
+
+    # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
+    # to get the SysV transport functions.
+    # chad@anasazi.com says the Pyramis MIS-ES running DC/OSx (SVR4)
+    # needs -lnsl.
+    # The nsl library prevents programs from opening the X display
+    # on Irix 5.2, according to dickey@clark.net.
+    echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6
+echo "configure:1469: 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 1474 "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:1497: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_func_gethostbyname=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_gethostbyname=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'gethostbyname`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  :
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+    if test $ac_cv_func_gethostbyname = no; then
+      echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
+echo "configure:1518: 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 1526 "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:1537: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+    fi
+
+    # lieder@skyler.mavd.honeywell.com says without -lsocket,
+    # socket/setsockopt and other routines are undefined under SCO ODT
+    # 2.0.  But -lsocket is broken on IRIX 5.2 (and is not necessary
+    # on later versions), says simon@lia.di.epfl.ch: it contains
+    # gethostby* variants that don't use the nameserver (or something).
+    # -lsocket must be given before -lnsl if both are needed.
+    # We assume that if connect needs -lnsl, so does gethostbyname.
+    echo $ac_n "checking for connect""... $ac_c" 1>&6
+echo "configure:1567: 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 1572 "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:1595: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_func_connect=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_connect=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'connect`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  :
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+    if test $ac_cv_func_connect = no; then
+      echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6
+echo "configure:1616: 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 1624 "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:1635: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+    fi
+
+    # gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX.
+    echo $ac_n "checking for remove""... $ac_c" 1>&6
+echo "configure:1659: 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 1664 "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:1687: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_func_remove=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_remove=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'remove`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  :
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+    if test $ac_cv_func_remove = no; then
+      echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6
+echo "configure:1708: 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 1716 "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:1727: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+    fi
+
+    # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
+    echo $ac_n "checking for shmat""... $ac_c" 1>&6
+echo "configure:1751: 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 1756 "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:1779: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_func_shmat=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_shmat=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'shmat`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  :
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+    if test $ac_cv_func_shmat = no; then
+      echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6
+echo "configure:1800: 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 1808 "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:1819: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+    fi
+  fi
+
+  # Check for libraries that X11R6 Xt/Xaw programs need.
+  ac_save_LDFLAGS="$LDFLAGS"
+  test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries"
+  # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
+  # check for ICE first), but we must link in the order -lSM -lICE or
+  # we get undefined symbols.  So assume we have SM if we have ICE.
+  # These have to be linked with before -lX11, unlike the other
+  # libraries we check for below, so use a different variable.
+  #  --interran@uluru.Stanford.EDU, kb@cs.umb.edu.
+  echo $ac_n "checking for IceConnectionNumber in -lICE""... $ac_c" 1>&6
+echo "configure:1852: checking for IceConnectionNumber in -lICE" >&5
+ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lICE  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1860 "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:1871: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+  LDFLAGS="$ac_save_LDFLAGS"
+
+fi
+
+
+echo $ac_n "checking for pthread_create in -lpthread""... $ac_c" 1>&6
+echo "configure:1897: checking for pthread_create in -lpthread" >&5
+ac_lib_var=`echo pthread'_'pthread_create | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lpthread  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1905 "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 pthread_create();
+
+int main() {
+pthread_create()
+; return 0; }
+EOF
+if { (eval echo configure:1916: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  pthread_lib="-lpthread"; cat >> confdefs.h <<\EOF
+#define HAVE_LIBPTHREAD 1
+EOF
+
+else
+  echo "$ac_t""no" 1>&6
+:
+fi
+
+
+
+if test -n "$pthread_lib"; then
+       case $host in 
+       i?86-*-linux*)
+               cat >> confdefs.h <<\EOF
+#define _REENTRANT 1
+EOF
+
+               ;;
+       esac
+fi
+
+#if test -n "$x_libraries"; then
+#      XOGG="yes"
+#
+#      dnl If we find libgtk installed, great; otherwise assume we have
+#      dnl to build it ourselves.
+#
+#      AC_CHECK_LIB(gtk, gtk_main, :, LIBGTKDIR="libgtk", $X_LIBS -lglib -lgdk -lX11 -lXext -lm)
+#
+#      dnl libpthread is required for xogg.
+#
+#      if test -z "$pthread_lib"; then XOGG=""; fi
+#
+#      dnl If we don't have libgtk installed, and we don't have a libgtk 
+#      dnl  subdirectory to build the library ourself, we can't build xogg.
+#
+#      if test -n "$LIBGTKDIR" -a ! -d "$LIBGTKDIR"; then
+#              XOGG=""
+#              LIBGTKDIR=""
+#      fi
+#fi
+
+
+dummy="__noconf"
+
+#if test -d "$LIBGTKDIR"; then
+#      enable_shared="no"; export enable_shared
+#      dummy="libgtk"
+#      AC_CONFIG_SUBDIRS("$dummy")
+#      X_LIBS="-L${srcdir}/libgtk/gtk/.libs -L${srcdir}/libgtk/gdk/.libs -L${srcdir}/libgtk/glib/.libs $X_LIBS"
+#fi
+
+TYPESIZES="" 
+
+echo $ac_n "checking size of short""... $ac_c" 1>&6
+echo "configure:1987: checking size of short" >&5
+if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$cross_compiling" = yes; then
+    { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1995 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+main()
+{
+  FILE *f=fopen("conftestval", "w");
+  if (!f) exit(1);
+  fprintf(f, "%d\n", sizeof(short));
+  exit(0);
+}
+EOF
+if { (eval echo configure:2006: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+then
+  ac_cv_sizeof_short=`cat conftestval`
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  ac_cv_sizeof_short=0
+fi
+rm -fr conftest*
+fi
+
+fi
+echo "$ac_t""$ac_cv_sizeof_short" 1>&6
+cat >> confdefs.h <<EOF
+#define SIZEOF_SHORT $ac_cv_sizeof_short
+EOF
+
+
+echo $ac_n "checking size of int""... $ac_c" 1>&6
+echo "configure:2026: checking size of int" >&5
+if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$cross_compiling" = yes; then
+    { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2034 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+main()
+{
+  FILE *f=fopen("conftestval", "w");
+  if (!f) exit(1);
+  fprintf(f, "%d\n", sizeof(int));
+  exit(0);
+}
+EOF
+if { (eval echo configure:2045: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+then
+  ac_cv_sizeof_int=`cat conftestval`
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  ac_cv_sizeof_int=0
+fi
+rm -fr conftest*
+fi
+
+fi
+echo "$ac_t""$ac_cv_sizeof_int" 1>&6
+cat >> confdefs.h <<EOF
+#define SIZEOF_INT $ac_cv_sizeof_int
+EOF
+
+
+echo $ac_n "checking size of long""... $ac_c" 1>&6
+echo "configure:2065: checking size of long" >&5
+if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$cross_compiling" = yes; then
+    { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2073 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+main()
+{
+  FILE *f=fopen("conftestval", "w");
+  if (!f) exit(1);
+  fprintf(f, "%d\n", sizeof(long));
+  exit(0);
+}
+EOF
+if { (eval echo configure:2084: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+then
+  ac_cv_sizeof_long=`cat conftestval`
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  ac_cv_sizeof_long=0
+fi
+rm -fr conftest*
+fi
+
+fi
+echo "$ac_t""$ac_cv_sizeof_long" 1>&6
+cat >> confdefs.h <<EOF
+#define SIZEOF_LONG $ac_cv_sizeof_long
+EOF
+
+
+echo $ac_n "checking size of long long""... $ac_c" 1>&6
+echo "configure:2104: checking size of long long" >&5
+if eval "test \"`echo '$''{'ac_cv_sizeof_long_long'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$cross_compiling" = yes; then
+    { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2112 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+main()
+{
+  FILE *f=fopen("conftestval", "w");
+  if (!f) exit(1);
+  fprintf(f, "%d\n", sizeof(long long));
+  exit(0);
+}
+EOF
+if { (eval echo configure:2123: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+then
+  ac_cv_sizeof_long_long=`cat conftestval`
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  ac_cv_sizeof_long_long=0
+fi
+rm -fr conftest*
+fi
+
+fi
+echo "$ac_t""$ac_cv_sizeof_long_long" 1>&6
+cat >> confdefs.h <<EOF
+#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
+EOF
+
+
+
+case 2 in
+       $ac_cv_sizeof_short) TYPESIZES="$TYPESIZES -Dsize16='short'"
+               SIZE16=TRUE;;
+       $ac_cv_sizeof_int) TYPESIZES="$TYPESIZES -Dsize16='int'"
+               SIZE16=TRUE;;
+esac
+
+case 4 in
+       $ac_cv_sizeof_short) TYPESIZES="$TYPESIZES -Dsize32='short'"
+               SIZE32=TRUE;;
+       $ac_cv_sizeof_int) TYPESIZES="$TYPESIZES -Dsize32='int'"
+               SIZE32=TRUE;;
+       $ac_cv_sizeof_long) TYPESIZES="$TYPESIZES -Dsize32='long'"
+               SIZE32=TRUE;;
+esac
+
+case 8 in
+       $ac_cv_sizeof_int) TYPESIZES="$TYPESIZES -Dsize64='int'"
+               SIZE64=TRUE;;
+       $ac_cv_sizeof_long) TYPESIZES="$TYPESIZES -Dsize64='long'"
+               SIZE64=TRUE;;
+       $ac_cv_sizeof_long_long) TYPESIZES="$TYPESIZES -Dsize64='long long'"
+               SIZE64=TRUE;;
+esac
+
+
+if test -z "$SIZE16"; then
+       { echo "configure: error: No 16 bit tupe found on this platform!" 1>&2; exit 1; }
+fi
+if test -z "$SIZE32"; then
+       { echo "configure: error: No 32 bit tupe found on this platform!" 1>&2; exit 1; }
+fi
+if test -z "$SIZE64"; then
+       echo "configure: warning: No 64 bit tupe found on this platform!" 1>&2
+fi
+       
+echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6
+echo "configure:2180: checking for sys/wait.h that is POSIX.1 compatible" >&5
+if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2185 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <sys/wait.h>
+#ifndef WEXITSTATUS
+#define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
+#endif
+#ifndef WIFEXITED
+#define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
+#endif
+int main() {
+int s;
+wait (&s);
+s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
+; return 0; }
+EOF
+if { (eval echo configure:2201: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  ac_cv_header_sys_wait_h=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_header_sys_wait_h=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_header_sys_wait_h" 1>&6
+if test $ac_cv_header_sys_wait_h = yes; then
+  cat >> confdefs.h <<\EOF
+#define HAVE_SYS_WAIT_H 1
+EOF
+
+fi
+
+for ac_hdr in fcntl.h limits.h sys/ioctl.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:2225: 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 2230 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:2235: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+
+echo $ac_n "checking for working const""... $ac_c" 1>&6
+echo "configure:2263: checking for working const" >&5
+if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2268 "configure"
+#include "confdefs.h"
+
+int main() {
+
+/* Ultrix mips cc rejects this.  */
+typedef int charset[2]; const charset x;
+/* SunOS 4.1.1 cc rejects this.  */
+char const *const *ccp;
+char **p;
+/* NEC SVR4.0.2 mips cc rejects this.  */
+struct point {int x, y;};
+static struct point const zero = {0,0};
+/* AIX XL C 1.02.0.0 rejects this.
+   It does not let you subtract one const X* pointer from another in an arm
+   of an if-expression whose if-part is not a constant expression */
+const char *g = "string";
+ccp = &g + (g ? g-g : 0);
+/* HPUX 7.0 cc rejects these. */
+++ccp;
+p = (char**) ccp;
+ccp = (char const *const *) p;
+{ /* SCO 3.2v4 cc rejects this.  */
+  char *t;
+  char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+  *t++ = 0;
+}
+{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
+  int x[] = {25, 17};
+  const int *foo = &x[0];
+  ++foo;
+}
+{ /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+  typedef const int *iptr;
+  iptr p = 0;
+  ++p;
+}
+{ /* AIX XL C 1.02.0.0 rejects this saying
+     "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+  struct s { int j; const int *ap[3]; };
+  struct s *b; b->j = 5;
+}
+{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+  const int foo = 10;
+}
+
+; return 0; }
+EOF
+if { (eval echo configure:2317: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  ac_cv_c_const=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_c_const=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_c_const" 1>&6
+if test $ac_cv_c_const = no; then
+  cat >> confdefs.h <<\EOF
+#define const 
+EOF
+
+fi
+
+echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
+echo "configure:2338: checking whether time.h and sys/time.h may both be included" >&5
+if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2343 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <sys/time.h>
+#include <time.h>
+int main() {
+struct tm *tp;
+; return 0; }
+EOF
+if { (eval echo configure:2352: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  ac_cv_header_time=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_header_time=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_header_time" 1>&6
+if test $ac_cv_header_time = yes; then
+  cat >> confdefs.h <<\EOF
+#define TIME_WITH_SYS_TIME 1
+EOF
+
+fi
+
+echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6
+echo "configure:2373: checking whether struct tm is in sys/time.h or time.h" >&5
+if eval "test \"`echo '$''{'ac_cv_struct_tm'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2378 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <time.h>
+int main() {
+struct tm *tp; tp->tm_sec;
+; return 0; }
+EOF
+if { (eval echo configure:2386: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  ac_cv_struct_tm=time.h
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_struct_tm=sys/time.h
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_struct_tm" 1>&6
+if test $ac_cv_struct_tm = sys/time.h; then
+  cat >> confdefs.h <<\EOF
+#define TM_IN_SYS_TIME 1
+EOF
+
+fi
+
+
+echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
+echo "configure:2408: checking whether ${MAKE-make} sets \${MAKE}" >&5
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftestmake <<\EOF
+all:
+       @echo 'ac_maketemp="${MAKE}"'
+EOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+  eval ac_cv_prog_make_${ac_make}_set=yes
+else
+  eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftestmake
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  SET_MAKE=
+else
+  echo "$ac_t""no" 1>&6
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6
+echo "configure:2435: checking for 8-bit clean memcmp" >&5
+if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$cross_compiling" = yes; then
+  ac_cv_func_memcmp_clean=no
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2443 "configure"
+#include "confdefs.h"
+
+main()
+{
+  char c0 = 0x40, c1 = 0x80, c2 = 0x81;
+  exit(memcmp(&c0, &c2, 1) < 0 && memcmp(&c1, &c2, 1) < 0 ? 0 : 1);
+}
+
+EOF
+if { (eval echo configure:2453: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+then
+  ac_cv_func_memcmp_clean=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  ac_cv_func_memcmp_clean=no
+fi
+rm -fr conftest*
+fi
+
+fi
+
+echo "$ac_t""$ac_cv_func_memcmp_clean" 1>&6
+test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.o"
+
+echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
+echo "configure:2471: 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 2476 "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:2493: \"$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 gettimeofday select strcspn strerror strspn sigaction
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:2514: 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 2519 "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:2542: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+
+
+
+
+
+
+
+#AC_SUBST(XOGG)
+#AC_SUBST(LIBGTKDIR)
+
+
+trap '' 1 2 15
+cat > confcache <<\EOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs.  It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already.  You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+EOF
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(set) 2>&1 |
+  case `(ac_space=' '; set) 2>&1` in
+  *ac_space=\ *)
+    # `set' does not quote correctly, so add quotes (double-quote substitution
+    # turns \\\\ into \\, and sed turns \\ into \).
+    sed -n \
+      -e "s/'/'\\\\''/g" \
+      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+    ;;
+  *)
+    # `set' quotes correctly as required by POSIX, so do not add quotes.
+    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+    ;;
+  esac >> confcache
+if cmp -s $cache_file confcache; then
+  :
+else
+  if test -w $cache_file; then
+    echo "updating cache $cache_file"
+    cat confcache > $cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Any assignment to VPATH causes Sun make to only execute
+# the first set of double-colon rules, so remove it if not needed.
+# If there is a colon in the path, we need to keep it.
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[        ]*VPATH[        ]*=[^:]*$/d'
+fi
+
+trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
+
+# Transform confdefs.h into DEFS.
+# Protect against shell expansion while executing Makefile rules.
+# Protect against Makefile macro expansion.
+cat > conftest.defs <<\EOF
+s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g
+s%[    `~#$^&*(){}\\|;'"<>?]%\\&%g
+s%\[%\\&%g
+s%\]%\\&%g
+s%\$%$$%g
+EOF
+DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
+rm -f conftest.defs
+
+
+# Without the "./", some shells look in PATH for config.status.
+: ${CONFIG_STATUS=./config.status}
+
+echo creating $CONFIG_STATUS
+rm -f $CONFIG_STATUS
+cat > $CONFIG_STATUS <<EOF
+#! /bin/sh
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# This directory was configured as follows,
+# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+#
+# $0 $ac_configure_args
+#
+# Compiler output produced by configure, useful for debugging
+# configure, is in ./config.log if it exists.
+
+ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
+for ac_option
+do
+  case "\$ac_option" in
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
+    exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
+  -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
+    echo "$CONFIG_STATUS generated by autoconf version 2.12"
+    exit 0 ;;
+  -help | --help | --hel | --he | --h)
+    echo "\$ac_cs_usage"; exit 0 ;;
+  *) echo "\$ac_cs_usage"; exit 1 ;;
+  esac
+done
+
+ac_given_srcdir=$srcdir
+
+trap 'rm -fr `echo "Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+# Protect against being on the right side of a sed subst in config.status.
+sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
+$ac_vpsub
+$extrasub
+s%@CFLAGS@%$CFLAGS%g
+s%@CPPFLAGS@%$CPPFLAGS%g
+s%@CXXFLAGS@%$CXXFLAGS%g
+s%@DEFS@%$DEFS%g
+s%@LDFLAGS@%$LDFLAGS%g
+s%@LIBS@%$LIBS%g
+s%@exec_prefix@%$exec_prefix%g
+s%@prefix@%$prefix%g
+s%@program_transform_name@%$program_transform_name%g
+s%@bindir@%$bindir%g
+s%@sbindir@%$sbindir%g
+s%@libexecdir@%$libexecdir%g
+s%@datadir@%$datadir%g
+s%@sysconfdir@%$sysconfdir%g
+s%@sharedstatedir@%$sharedstatedir%g
+s%@localstatedir@%$localstatedir%g
+s%@libdir@%$libdir%g
+s%@includedir@%$includedir%g
+s%@oldincludedir@%$oldincludedir%g
+s%@infodir@%$infodir%g
+s%@mandir@%$mandir%g
+s%@host@%$host%g
+s%@host_alias@%$host_alias%g
+s%@host_cpu@%$host_cpu%g
+s%@host_vendor@%$host_vendor%g
+s%@host_os@%$host_os%g
+s%@CC@%$CC%g
+s%@RANLIB@%$RANLIB%g
+s%@AR@%$AR%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
+s%@SET_MAKE@%$SET_MAKE%g
+s%@LIBOBJS@%$LIBOBJS%g
+s%@TYPESIZES@%$TYPESIZES%g
+s%@OPT@%$OPT%g
+s%@DEBUG@%$DEBUG%g
+s%@PROFILE@%$PROFILE%g
+s%@pthread_lib@%$pthread_lib%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*
+
+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
+
diff --git a/configure.in b/configure.in
new file mode 100644 (file)
index 0000000..f498cb7
--- /dev/null
@@ -0,0 +1,184 @@
+# $Id: configure.in,v 1.1 1999/07/13 06:50:34 mwhitson Exp $
+# $Date: 1999/07/13 06:50:34 $
+
+AC_INIT(mdct.c)
+#AC_CONFIG_HEADER(config.h)
+
+cp configure.guess config.guess
+cp configure.sub config.sub
+
+AC_CANONICAL_HOST
+
+dnl If we're on IRIX, we wanna use cc even if gcc is there (unless the user
+dnl has overriden us)...
+case $host 
+       in *-*-irix*)
+               if test -z "$CC"; then
+                       CC=cc
+               fi
+               AC_CHECK_LIB(audio, ALwritesamps)
+       ;;
+esac
+
+if test -z "$CC"; then
+       AC_PROG_CC      
+fi
+AC_PROG_RANLIB
+AC_CHECK_PROG(AR,ar,ar)
+
+dnl Set some target options
+if test -z "$GCC"; then
+       case $host in 
+       *-*-irix*)
+               DEBUG="-g" 
+               OPT="-O2 -w"
+               PROFILE="-p -g3 -O2" ;;
+       sparc-sun-solaris*)
+               DEBUG="-v -g"
+               OPT="-xO4 -fast -w -fsingle -fsimple -native -xcg92"
+               PROFILE="-v -xpg -g -xO4 -fast -fsingle -native -fsimple -xcg92 -Dsuncc" ;;
+       *)
+               DEBUG="-g"
+               OPT="-O"
+               PROFILE="-g -p" ;;
+        esac
+else
+       case $host in 
+       i?86-*-linux*)
+               DEBUG="-g -Wall -fsigned-char"
+               OPT="-O20 -ffast-math -fsigned-char"
+               PROFILE="-pg -g -O20 -fsigned-char";;
+       sparc-sun-*)
+               DEBUG="-g -Wall -fsigned-char -mv8"
+               OPT="-O20 -ffast-math -fsigned-char -mv8"
+               PROFILE="-pg -g -O20 -fsigned-char -mv8" ;;
+       *)
+               DEBUG="-g -Wall -fsigned-char"
+               OPT="-O20 -fsigned-char"
+               PROFILE="-O20 -g -pg -fsigned-char" ;;
+        esac
+fi
+
+AC_HEADER_STDC
+
+CFLAGS=""
+
+AC_PATH_X
+AC_PATH_XTRA
+
+AC_CHECK_LIB(pthread, pthread_create, 
+       pthread_lib="-lpthread"; AC_DEFINE(HAVE_LIBPTHREAD), :)
+
+dnl Linuxthreads require you to define _REENTRANT in all threaded
+dnl code.  Bogus, bogus...
+
+if test -n "$pthread_lib"; then
+       case $host in 
+       i?86-*-linux*)
+               AC_DEFINE(_REENTRANT)
+               ;;
+       esac
+fi
+
+#if test -n "$x_libraries"; then
+#      XOGG="yes"
+#
+#      dnl If we find libgtk installed, great; otherwise assume we have
+#      dnl to build it ourselves.
+#
+#      AC_CHECK_LIB(gtk, gtk_main, :, LIBGTKDIR="libgtk", $X_LIBS -lglib -lgdk -lX11 -lXext -lm)
+#
+#      dnl libpthread is required for xogg.
+#
+#      if test -z "$pthread_lib"; then XOGG=""; fi
+#
+#      dnl If we don't have libgtk installed, and we don't have a libgtk 
+#      dnl  subdirectory to build the library ourself, we can't build xogg.
+#
+#      if test -n "$LIBGTKDIR" -a ! -d "$LIBGTKDIR"; then
+#              XOGG=""
+#              LIBGTKDIR=""
+#      fi
+#fi
+
+dnl This seems to be the only way to make autoconf only *sometimes* configure
+dnl a subdirectory with AC_CONFIG_SUBDIRS.  "__noconf" is assumed to not 
+dnl exist as a directory, so configure won't try to recursively enter it, unless
+dnl the shell variable $dummy is reset to an existing directory inside the
+dnl if clause.
+
+dummy="__noconf"
+
+#if test -d "$LIBGTKDIR"; then
+#      enable_shared="no"; export enable_shared
+#      dummy="libgtk"
+#      AC_CONFIG_SUBDIRS("$dummy")
+#      X_LIBS="-L${srcdir}/libgtk/gtk/.libs -L${srcdir}/libgtk/gdk/.libs -L${srcdir}/libgtk/glib/.libs $X_LIBS"
+#fi
+
+TYPESIZES="" 
+
+AC_CHECK_SIZEOF(short)
+AC_CHECK_SIZEOF(int)
+AC_CHECK_SIZEOF(long)
+AC_CHECK_SIZEOF(long long)
+
+case 2 in
+       $ac_cv_sizeof_short) TYPESIZES="$TYPESIZES -Dsize16='short'"
+               SIZE16=TRUE;;
+       $ac_cv_sizeof_int) TYPESIZES="$TYPESIZES -Dsize16='int'"
+               SIZE16=TRUE;;
+esac
+
+case 4 in
+       $ac_cv_sizeof_short) TYPESIZES="$TYPESIZES -Dsize32='short'"
+               SIZE32=TRUE;;
+       $ac_cv_sizeof_int) TYPESIZES="$TYPESIZES -Dsize32='int'"
+               SIZE32=TRUE;;
+       $ac_cv_sizeof_long) TYPESIZES="$TYPESIZES -Dsize32='long'"
+               SIZE32=TRUE;;
+esac
+
+case 8 in
+       $ac_cv_sizeof_int) TYPESIZES="$TYPESIZES -Dsize64='int'"
+               SIZE64=TRUE;;
+       $ac_cv_sizeof_long) TYPESIZES="$TYPESIZES -Dsize64='long'"
+               SIZE64=TRUE;;
+       $ac_cv_sizeof_long_long) TYPESIZES="$TYPESIZES -Dsize64='long long'"
+               SIZE64=TRUE;;
+esac
+
+
+if test -z "$SIZE16"; then
+       AC_MSG_ERROR(No 16 bit tupe found on this platform!)
+fi
+if test -z "$SIZE32"; then
+       AC_MSG_ERROR(No 32 bit tupe found on this platform!)
+fi
+if test -z "$SIZE64"; then
+       AC_MSG_WARN(No 64 bit tupe found on this platform!)
+fi
+       
+AC_HEADER_SYS_WAIT
+AC_CHECK_HEADERS(fcntl.h limits.h sys/ioctl.h sys/time.h unistd.h)
+
+AC_C_CONST
+AC_HEADER_TIME
+AC_STRUCT_TM
+
+AC_PROG_MAKE_SET
+AC_FUNC_MEMCMP
+AC_TYPE_SIGNAL
+AC_CHECK_FUNCS(gettimeofday select strcspn strerror strspn sigaction)
+
+AC_SUBST(TYPESIZES)
+AC_SUBST(OPT)
+AC_SUBST(DEBUG)
+AC_SUBST(PROFILE)
+AC_SUBST(CC)
+AC_SUBST(RANLIB)
+#AC_SUBST(XOGG)
+#AC_SUBST(LIBGTKDIR)
+AC_SUBST(pthread_lib)
+
+AC_OUTPUT(Makefile)
diff --git a/configure.sub b/configure.sub
new file mode 100755 (executable)
index 0000000..e67a800
--- /dev/null
@@ -0,0 +1,867 @@
+#! /bin/sh
+# Configuration validation subroutine script, version 1.1.
+#   Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can. 
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#      CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+if [ x$1 = x ]
+then
+       echo Configuration name missing. 1>&2
+       echo "Usage: $0 CPU-MFR-OPSYS" 1>&2
+       echo "or     $0 ALIAS" 1>&2
+       echo where ALIAS is a recognized configuration type. 1>&2
+       exit 1
+fi
+
+# First pass through any local machine types.
+case $1 in
+       *local*)
+               echo $1
+               exit 0
+               ;;
+       *)
+       ;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS (if any).
+basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+if [ $basic_machine != $1 ]
+then os=`echo $1 | sed 's/.*-/-/'`
+else os=; fi
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+       -sun*os*)
+               # Prevent following clause from handling this invalid input.
+               ;;
+       -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+       -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+       -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+       -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+       -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+       -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp )
+               os=
+               basic_machine=$1
+               ;;
+       -hiux*)
+               os=-hiuxwe2
+               ;;
+       -sco4)
+               os=-sco3.2v4
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
+               ;;
+       -sco3.2.[4-9]*)
+               os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
+               ;;
+       -sco3.2v[4-9]*)
+               # Don't forget version if it is 3.2v4 or newer.
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
+               ;;
+       -sco*)
+               os=-sco3.2v2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
+               ;;
+       -isc)
+               os=-isc2.2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
+               ;;
+       -clix*)
+               basic_machine=clipper-intergraph
+               ;;
+       -isc*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
+               ;;
+       -lynx*)
+               os=-lynxos
+               ;;
+       -ptx*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+               ;;
+       -windowsnt*)
+               os=`echo $os | sed -e 's/windowsnt/winnt/'`
+               ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+       # Recognize the basic CPU types without company name.
+       # Some are omitted here because they have special meanings below.
+       tahoe | i[345]86 | i860 | m68k | m68000 | m88k | ns32k | arm \
+               | arme[lb] | pyramid \
+               | tron | a29k | 580 | i960 | h8300 | hppa1.0 | hppa1.1 \
+               | alpha | we32k | ns16k | clipper | sparclite | i370 | sh \
+               | powerpc | powerpcle | sparc64 | 1750a | dsp16xx | mips64 | mipsel \
+               | pdp11 | mips64el | mips64orion | mips64orionel \
+               | sparc)
+               basic_machine=$basic_machine-unknown
+               ;;
+       # Object if more than one company name word.
+       *-*-*)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+               exit 1
+               ;;
+       # Recognize the basic CPU types with company name.
+       vax-* | tahoe-* | i[345]86-* | i860-* | m68k-* | m68000-* | m88k-* \
+             | sparc-* | ns32k-* | fx80-* | arm-* | c[123]* \
+             | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* | power-* \
+             | none-* | 580-* | cray2-* | h8300-* | i960-* | xmp-* | ymp-* \
+             | hppa1.0-* | hppa1.1-* | alpha-* | we32k-* | cydra-* | ns16k-* \
+             | pn-* | np1-* | xps100-* | clipper-* | orion-* | sparclite-* \
+             | pdp11-* | sh-* | powerpc-* | powerpcle-* | sparc64-* | mips64-* | mipsel-* \
+             | mips64el-* | mips64orion-* | mips64orionel-*)
+               ;;
+       # Recognize the various machine names and aliases which stand
+       # for a CPU type and a company and sometimes even an OS.
+       3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+               basic_machine=m68000-att
+               ;;
+       3b*)
+               basic_machine=we32k-att
+               ;;
+       alliant | fx80)
+               basic_machine=fx80-alliant
+               ;;
+       altos | altos3068)
+               basic_machine=m68k-altos
+               ;;
+       am29k)
+               basic_machine=a29k-none
+               os=-bsd
+               ;;
+       amdahl)
+               basic_machine=580-amdahl
+               os=-sysv
+               ;;
+       amiga | amiga-*)
+               basic_machine=m68k-cbm
+               ;;
+       amigados)
+               basic_machine=m68k-cbm
+               os=-amigados
+               ;;
+       amigaunix | amix)
+               basic_machine=m68k-cbm
+               os=-sysv4
+               ;;
+       apollo68)
+               basic_machine=m68k-apollo
+               os=-sysv
+               ;;
+       balance)
+               basic_machine=ns32k-sequent
+               os=-dynix
+               ;;
+       convex-c1)
+               basic_machine=c1-convex
+               os=-bsd
+               ;;
+       convex-c2)
+               basic_machine=c2-convex
+               os=-bsd
+               ;;
+       convex-c32)
+               basic_machine=c32-convex
+               os=-bsd
+               ;;
+       convex-c34)
+               basic_machine=c34-convex
+               os=-bsd
+               ;;
+       convex-c38)
+               basic_machine=c38-convex
+               os=-bsd
+               ;;
+       cray | ymp)
+               basic_machine=ymp-cray
+               os=-unicos
+               ;;
+       cray2)
+               basic_machine=cray2-cray
+               os=-unicos
+               ;;
+       crds | unos)
+               basic_machine=m68k-crds
+               ;;
+       da30 | da30-*)
+               basic_machine=m68k-da30
+               ;;
+       decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+               basic_machine=mips-dec
+               ;;
+       delta | 3300 | motorola-3300 | motorola-delta \
+             | 3300-motorola | delta-motorola)
+               basic_machine=m68k-motorola
+               ;;
+       delta88)
+               basic_machine=m88k-motorola
+               os=-sysv3
+               ;;
+       dpx20 | dpx20-*)
+               basic_machine=rs6000-bull
+               os=-bosx
+               ;;
+       dpx2* | dpx2*-bull)
+               basic_machine=m68k-bull
+               os=-sysv3
+               ;;
+       ebmon29k)
+               basic_machine=a29k-amd
+               os=-ebmon
+               ;;
+       elxsi)
+               basic_machine=elxsi-elxsi
+               os=-bsd
+               ;;
+       encore | umax | mmax)
+               basic_machine=ns32k-encore
+               ;;
+       fx2800)
+               basic_machine=i860-alliant
+               ;;
+       genix)
+               basic_machine=ns32k-ns
+               ;;
+       gmicro)
+               basic_machine=tron-gmicro
+               os=-sysv
+               ;;
+       h3050r* | hiux*)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       h8300hms)
+               basic_machine=h8300-hitachi
+               os=-hms
+               ;;
+       harris)
+               basic_machine=m88k-harris
+               os=-sysv3
+               ;;
+       hp300-*)
+               basic_machine=m68k-hp
+               ;;
+       hp300bsd)
+               basic_machine=m68k-hp
+               os=-bsd
+               ;;
+       hp300hpux)
+               basic_machine=m68k-hp
+               os=-hpux
+               ;;
+       hp9k2[0-9][0-9] | hp9k31[0-9])
+               basic_machine=m68000-hp
+               ;;
+       hp9k3[2-9][0-9])
+               basic_machine=m68k-hp
+               ;;
+       hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7)
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][0-9] | hp8[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       i370-ibm* | ibm*)
+               basic_machine=i370-ibm
+               os=-mvs
+               ;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+       i[345]86v32)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
+               os=-sysv32
+               ;;
+       i[345]86v4*)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
+               os=-sysv4
+               ;;
+       i[345]86v)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
+               os=-sysv
+               ;;
+       i[345]86sol2)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
+               os=-solaris2
+               ;;
+       iris | iris4d)
+               basic_machine=mips-sgi
+               case $os in
+                   -irix*)
+                       ;;
+                   *)
+                       os=-irix4
+                       ;;
+               esac
+               ;;
+       isi68 | isi)
+               basic_machine=m68k-isi
+               os=-sysv
+               ;;
+       m88k-omron*)
+               basic_machine=m88k-omron
+               ;;
+       magnum | m3230)
+               basic_machine=mips-mips
+               os=-sysv
+               ;;
+       merlin)
+               basic_machine=ns32k-utek
+               os=-sysv
+               ;;
+       miniframe)
+               basic_machine=m68000-convergent
+               ;;
+       mips3*-*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+               ;;
+       mips3*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+               ;;
+       ncr3000)
+               basic_machine=i486-ncr
+               os=-sysv4
+               ;;
+       news | news700 | news800 | news900)
+               basic_machine=m68k-sony
+               os=-newsos
+               ;;
+       news1000)
+               basic_machine=m68030-sony
+               os=-newsos
+               ;;
+       news-3600 | risc-news)
+               basic_machine=mips-sony
+               os=-newsos
+               ;;
+       next | m*-next )
+               basic_machine=m68k-next
+               case $os in
+                   -nextstep* )
+                       ;;
+                   -ns2*)
+                     os=-nextstep2
+                       ;;
+                   *)
+                     os=-nextstep3
+                       ;;
+               esac
+               ;;
+       nh3000)
+               basic_machine=m68k-harris
+               os=-cxux
+               ;;
+       nh[45]000)
+               basic_machine=m88k-harris
+               os=-cxux
+               ;;
+       nindy960)
+               basic_machine=i960-intel
+               os=-nindy
+               ;;
+       np1)
+               basic_machine=np1-gould
+               ;;
+       pa-hitachi)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       paragon)
+               basic_machine=i860-intel
+               os=-osf
+               ;;
+       pbd)
+               basic_machine=sparc-tti
+               ;;
+       pbb)
+               basic_machine=m68k-tti
+               ;;
+        pc532 | pc532-*)
+               basic_machine=ns32k-pc532
+               ;;
+       pentium | p5 | p6)
+               # We don't have specific support for the Intel Pentium (p6) followon yet, so just call it a Pentium
+               basic_machine=i586-intel
+               ;;
+       pentium-* | p5-* | p6-*)
+               # We don't have specific support for the Intel Pentium (p6) followon yet, so just call it a Pentium
+               basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       k5)
+               # We don't have specific support for AMD's K5 yet, so just call it a Pentium
+               basic_machine=i586-amd
+               ;;
+       nexen)
+               # We don't have specific support for Nexgen yet, so just call it a Pentium
+               basic_machine=i586-nexgen
+               ;;
+       pn)
+               basic_machine=pn-gould
+               ;;
+       power)  basic_machine=rs6000-ibm
+               ;;
+       ppc)    basic_machine=powerpc-unknown
+               ;;
+       ppc-*)  basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppcle | powerpclittle | ppc-le | powerpc-little)
+               basic_machine=powerpcle-unknown
+               ;;
+       ppcle-* | powerpclittle-*)
+               basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ps2)
+               basic_machine=i386-ibm
+               ;;
+       rm[46]00)
+               basic_machine=mips-siemens
+               ;;
+       rtpc | rtpc-*)
+               basic_machine=romp-ibm
+               ;;
+       sequent)
+               basic_machine=i386-sequent
+               ;;
+       sh)
+               basic_machine=sh-hitachi
+               os=-hms
+               ;;
+       sps7)
+               basic_machine=m68k-bull
+               os=-sysv2
+               ;;
+       spur)
+               basic_machine=spur-unknown
+               ;;
+       sun2)
+               basic_machine=m68000-sun
+               ;;
+       sun2os3)
+               basic_machine=m68000-sun
+               os=-sunos3
+               ;;
+       sun2os4)
+               basic_machine=m68000-sun
+               os=-sunos4
+               ;;
+       sun3os3)
+               basic_machine=m68k-sun
+               os=-sunos3
+               ;;
+       sun3os4)
+               basic_machine=m68k-sun
+               os=-sunos4
+               ;;
+       sun4os3)
+               basic_machine=sparc-sun
+               os=-sunos3
+               ;;
+       sun4os4)
+               basic_machine=sparc-sun
+               os=-sunos4
+               ;;
+       sun4sol2)
+               basic_machine=sparc-sun
+               os=-solaris2
+               ;;
+       sun3 | sun3-*)
+               basic_machine=m68k-sun
+               ;;
+       sun4)
+               basic_machine=sparc-sun
+               ;;
+       sun386 | sun386i | roadrunner)
+               basic_machine=i386-sun
+               ;;
+       symmetry)
+               basic_machine=i386-sequent
+               os=-dynix
+               ;;
+       tower | tower-32)
+               basic_machine=m68k-ncr
+               ;;
+       udi29k)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       ultra3)
+               basic_machine=a29k-nyu
+               os=-sym1
+               ;;
+       vaxv)
+               basic_machine=vax-dec
+               os=-sysv
+               ;;
+       vms)
+               basic_machine=vax-dec
+               os=-vms
+               ;;
+       vxworks960)
+               basic_machine=i960-wrs
+               os=-vxworks
+               ;;
+       vxworks68)
+               basic_machine=m68k-wrs
+               os=-vxworks
+               ;;
+       vxworks29k)
+               basic_machine=a29k-wrs
+               os=-vxworks
+               ;;
+       xmp)
+               basic_machine=xmp-cray
+               os=-unicos
+               ;;
+        xps | xps100)
+               basic_machine=xps100-honeywell
+               ;;
+       none)
+               basic_machine=none-none
+               os=-none
+               ;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+       mips)
+               basic_machine=mips-mips
+               ;;
+       romp)
+               basic_machine=romp-ibm
+               ;;
+       rs6000)
+               basic_machine=rs6000-ibm
+               ;;
+       vax)
+               basic_machine=vax-dec
+               ;;
+       pdp11)
+               basic_machine=pdp11-dec
+               ;;
+       we32k)
+               basic_machine=we32k-att
+               ;;
+       sparc)
+               basic_machine=sparc-sun
+               ;;
+        cydra)
+               basic_machine=cydra-cydrome
+               ;;
+       orion)
+               basic_machine=orion-highlevel
+               ;;
+       orion105)
+               basic_machine=clipper-highlevel
+               ;;
+       *)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+       *-digital*)
+               basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+               ;;
+       *-commodore*)
+               basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+               ;;
+       *)
+               ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+       # -solaris* is a basic system type, with this one exception.
+       -solaris1 | -solaris1.*)
+               os=`echo $os | sed -e 's|solaris1|sunos4|'`
+               ;;
+       -solaris)
+               os=-solaris2
+               ;;
+       -unixware* | svr4*)
+               os=-sysv4
+               ;;
+       -gnu/linux*)
+               os=`echo $os | sed -e 's|gnu/linux|linux|'`
+               ;;
+       # First accept the basic system types.
+       # The portable systems comes first.
+       # Each alternative MUST END IN A *, to match a version number.
+       # -sysv* is not here because it comes later, after sysvr4.
+       -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+             | -vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[345]* \
+             | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+             | -amigados* | -msdos* | -newsos* | -unicos* | -aos* \
+             | -nindy* | -vxworks* | -ebmon* | -hms* | -mvs* | -clix* \
+             | -riscos* | -linux* | -uniplus* | -iris* | -rtu* | -xenix* \
+             | -hiux* | -386bsd* | -netbsd* | -freebsd* | -riscix* \
+             | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \
+             | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+             | -udi* | -eabi* | -lites* )
+       # Remember, each alternative MUST END IN *, to match a version number.
+               ;;
+       -sunos5*)
+               os=`echo $os | sed -e 's|sunos5|solaris2|'`
+               ;;
+       -sunos6*)
+               os=`echo $os | sed -e 's|sunos6|solaris3|'`
+               ;;
+       -osfrose*)
+               os=-osfrose
+               ;;
+       -osf*)
+               os=-osf
+               ;;
+       -utek*)
+               os=-bsd
+               ;;
+       -dynix*)
+               os=-bsd
+               ;;
+       -acis*)
+               os=-aos
+               ;;
+       -ctix* | -uts*)
+               os=-sysv
+               ;;
+       # Preserve the version number of sinix5.
+       -sinix5.*)
+               os=`echo $os | sed -e 's|sinix|sysv|'`
+               ;;
+       -sinix*)
+               os=-sysv4
+               ;;
+       -triton*)
+               os=-sysv3
+               ;;
+       -oss*)
+               os=-sysv3
+               ;;
+       -svr4)
+               os=-sysv4
+               ;;
+       -svr3)
+               os=-sysv3
+               ;;
+       -sysvr4)
+               os=-sysv4
+               ;;
+       # This must come after -sysvr4.
+       -sysv*)
+               ;;
+       -xenix)
+               os=-xenix
+               ;;
+       -none)
+               ;;
+       *)
+               # Get rid of the `-' at the beginning of $os.
+               os=`echo $os | sed 's/[^-]*-//'`
+               echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+       *-acorn)
+               os=-riscix1.2
+               ;;
+       arm*-semi)
+               os=-aout
+               ;;
+        pdp11-*)
+               os=-none
+               ;;
+       *-dec | vax-*)
+               os=-ultrix4.2
+               ;;
+       m68*-apollo)
+               os=-domain
+               ;;
+       i386-sun)
+               os=-sunos4.0.2
+               ;;
+       m68000-sun)
+               os=-sunos3
+               # This also exists in the configure program, but was not the
+               # default.
+               # os=-sunos4
+               ;;
+       *-tti)  # must be before sparc entry or we get the wrong os.
+               os=-sysv3
+               ;;
+       sparc-* | *-sun)
+               os=-sunos4.1.1
+               ;;
+       *-ibm)
+               os=-aix
+               ;;
+       *-hp)
+               os=-hpux
+               ;;
+       *-hitachi)
+               os=-hiux
+               ;;
+       i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+               os=-sysv
+               ;;
+       *-cbm)
+               os=-amigados
+               ;;
+       *-dg)
+               os=-dgux
+               ;;
+       *-dolphin)
+               os=-sysv3
+               ;;
+       m68k-ccur)
+               os=-rtu
+               ;;
+       m88k-omron*)
+               os=-luna
+               ;;
+       *-sequent)
+               os=-ptx
+               ;;
+       *-crds)
+               os=-unos
+               ;;
+       *-ns)
+               os=-genix
+               ;;
+       i370-*)
+               os=-mvs
+               ;;
+       *-next)
+               os=-nextstep3
+               ;;
+        *-gould)
+               os=-sysv
+               ;;
+        *-highlevel)
+               os=-bsd
+               ;;
+       *-encore)
+               os=-bsd
+               ;;
+        *-sgi)
+               os=-irix
+               ;;
+        *-siemens)
+               os=-sysv4
+               ;;
+       *-masscomp)
+               os=-rtu
+               ;;
+       *)
+               os=-none
+               ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+       *-unknown)
+               case $os in
+                       -riscix*)
+                               vendor=acorn
+                               ;;
+                       -sunos*)
+                               vendor=sun
+                               ;;
+                       -lynxos*)
+                               vendor=lynx
+                               ;;
+                       -aix*)
+                               vendor=ibm
+                               ;;
+                       -hpux*)
+                               vendor=hp
+                               ;;
+                       -hiux*)
+                               vendor=hitachi
+                               ;;
+                       -unos*)
+                               vendor=crds
+                               ;;
+                       -dgux*)
+                               vendor=dg
+                               ;;
+                       -luna*)
+                               vendor=omron
+                               ;;
+                       -genix*)
+                               vendor=ns
+                               ;;
+                       -mvs*)
+                               vendor=ibm
+                               ;;
+                       -ptx*)
+                               vendor=sequent
+                               ;;
+                       -vxworks*)
+                               vendor=wrs
+                               ;;
+               esac
+               basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+               ;;
+esac
+
+echo $basic_machine$os
diff --git a/doc/framing.txt b/doc/framing.txt
new file mode 100644 (file)
index 0000000..9872a03
--- /dev/null
@@ -0,0 +1,293 @@
+********************************************************************
+*                                                                  *
+* THIS FILE IS PART OF THE Ogg Vorbis SOFTWARE CODEC SOURCE CODE.  *
+* USE, DISTRIBUTION AND REPRODUCTION OF THIS SOURCE IS GOVERNED BY *
+* THE GNU PUBLIC LICENSE 2, WHICH IS INCLUDED WITH THIS SOURCE.    *
+* PLEASE READ THESE TERMS DISTRIBUTING.                            *
+*                                                                  *
+* THE OggSQUISH SOURCE CODE IS (C) COPYRIGHT 1994-1999             *
+* by 1999 Monty <monty@xiph.org> and The XIPHOPHORUS Company       *
+* http://www.xiph.org/                                             *
+*                                                                  *
+********************************************************************
+
+ function: discussion of Vorbis framing
+ author: Monty <xiphmont@mit.edu>, <monty@xiph.org>
+ modifications by: Monty
+ last modification date: Jun 30 1999
+
+********************************************************************
+
+Vorbis encodes short-time blocks of PCM data into raw packets of
+bit-packed data.  These raw packets may be used directly by transport
+mechanisms that provide their own framing and packet-seperation
+mechanisms (such as UDP datagrams).  For stream based storage (such as
+files) and transport (such as TCP streams or pipes), Vorbis also
+specifies an additional layer of bitstream structure to provide
+framing/sync, sync recapture after error, landmarks during seeking,
+and enough information to properly seperate data back into packets at
+the original packet boundaries without relying on decoding to find
+packet boundaries.
+
+Design constraints:
+
+1) True streaming; we must not need to seek to build a 100% complete
+   bitstream.
+
+2) Use no more than approximately 1-2% of bitstream bandwidth for packet
+   boundary marking, high-level framing, sync and seeking.
+
+3) Specification of absolute position within the original sample stream.
+
+4) Simple mechanism to ease limited editing, such as a simplified
+   concatenation mechanism.
+
+5) Detection of corruption and recapture after error.
+
+A vorbis stream is structured by dividing packets into segments of up
+to 255 bytes and then wrapping a group of contiguous packet segments
+into a variable length page preceeded by a page header.  Both the
+header size and page size are variable; the page header contains
+sizing information and checksum data to determine header/page size and
+data integrity. 
+
+The bitstream is captured (or recaptured) by looking for the beginning
+of a page, specifically the capture pattern.  Once the capture pattern
+is found, the decoder verifies page sync and integrity by computing
+and comparing the checksum. At that point, the decoder can extract the
+packetss themselves.
+
+**** Packet segmentation
+
+Packets are logically divided into multiple segments before encoding
+into a page. Note that the segmentation and fragmentation process is a
+logical one; it's used to compute page header values and the original
+page data need not be disturbed, even when a packet spans page
+boundaries.
+
+The raw packet is logically divided into [n] 255 byte segments and a
+last fractional segment of < 255 bytes.  A packet size may well
+consist only of the trailing fractional segment, and a fractional
+segment may be zero length.  These values, called "lacing values" are
+then saved and placed into the header segment table.
+
+An example should make the basic concept clear:
+
+raw packet:
+  ___________________________________________
+ |______________packet data__________________| 753 bytes
+
+lacing values for page header segment table: 255,255,243
+
+We simply add the lacing values for the total size; the last lacing
+value for a packet is always the value that is less than 255. Note
+that this encoding both avoids imposing a maximum packet size as well
+as imposing minimum overhead on small packets (as opposed to, eg,
+simply using two bytes at the head of every packet and having a max
+packet size of 32k.  Small packets (<255, the typical case) are
+penalized with twice the segmentation overhead). Using the lacing
+values as suggested, small packets see the minimum possible
+byte-aligned overheade (1 byte) and large packets, over 512 bytes or
+so, see a fairly constant ~.5% overhead on encoding space.
+
+Clarification of boundary cases:
+
+Note that a lacing value of 255 implies that a second lacing value
+follows in the packet, and a value of < 255 marks the end of the
+packet after that many additional bytes.  A packet of 255 bytes (or a
+multiple of 255 bytes) is terminated by a lacing value of 0:
+
+raw packet:
+  _______________________________
+ |________packet data____________|          255 bytes
+
+lacing values: 255, 0
+
+Note also that a 'nil' (zero length) packet is not an error; it
+consists of nothing more than a lacing value of zero in the header.
+
+**** Packets spanning pages:
+
+Packets are not resticted to beginning and ending within a page,
+although individual segments are, by definition, required to do so.
+Packets are not restricted to a maximum size, although excessively
+large packets in the data stream are discouraged; the Vorbis
+specification strongly recommend nominal page size of approximately
+4-8kB (large packets are forseen as being useful for initialization
+data at the beginning of a logical bitstream).
+
+After segmenting a packet, the encoder may decide not to place all the
+resulting segments into the current page; to do so, the encoder places
+the lacing values of the segments it wishes to belong to the current
+page into the current segment table, then finishes the page.  The next
+page is begun with the first value in the segment table belonging to
+the next packet segment, thus continuing the packet (data in the
+packet body must also correspond properly to the lacing values in the
+spanned pages. The segment data in the first packet corresponding to the
+lacing values of the first page belong in that page; packet segments listed in the segment table of the following page must begin the page body of the subsequent page).
+
+The last mechanic to spanning a page boundary is to set the header
+flag in the new page to indicate that the first lacing value in the
+segment table continues rather than begins a packet; a header flag of
+0x02 is used to indicate a continued packet.  Although mandatory, it
+is not actually algorithmically necessary; one could inspect the
+preceeding segment table to determine if the packet is new or
+continued.  Adding the information to the packet_header flag allows a
+simpler design (with no overhead) that needs only inspect the current
+page header after frame capture.  This also allows faster error
+recovery in the event that the packet originates in a corrupt
+preceeding page, implying that the previous page's segment table
+cannot be trusted.
+
+Note that a packet can span an arbitrary number of pages; the above
+spanning process is repeated for each spanned page boundary.  Also a
+'zero termination' on a packet size that is an even multiple of 255
+must appear even if the lacing value appears in the next page as a
+zero-length continuation of the current packet.  The header flag
+should be set to 0x02 to indicate that the packet spanned, even though
+the span is a nil case as far as data is concerned.
+
+The encoding looks odd, but is properly optimized for speed and the
+expected case of the majority of packets being between 50 and 200
+bytes (note that it is designed such that packets of wildly different
+sizes can be handled within the model; placing packet size
+restrictions on the encoder would have only slightly simplified design
+in page generation and increased overall encoder complexity).
+
+The main point behind tracking individual packets (and packet
+segments) is to allow more flexible encoding tricks that requiring
+explicit knowledge of packet size. An example is simple bandwidth
+limiting, implemented by simply truncating packets in the nominal case
+(the packet is arranged so that the least sensitive portion of the
+data comes last).
+
+**** Page header
+
+The headering mechanism is designed to avoid copying and re-assembly
+of the packet data; the header can be generated directly from incoming
+packet data.  The encoder buffers packet data until it finishes a
+complete page at which point it writes the header followed by the
+buffered packet segments.
+
+capture_pattern:
+
+ A header begins with a capture pattern that simplifies identifying
+ pages; once the decoder has found the capture pattern it can do a more
+ intensive job of verifying that it has in fact found a page boundary
+ (as opposed to an inadvertant coincidence in the byte stream).
+
+ byte value
+  0  0x4f 'O'
+  1  0x67 'g'
+  2  0x67 'g'
+  3  0x53 'S'  
+
+stream_structure_version:
+
+ The capture pattern is followed by the stream structure revision:
+
+  4  0x00
+
+header_type_flag:
+  
+ The header type flag identifies this page's context in the bitstream:
+
+  5  0x00 (beginning of bitstream)
+     0x01 (bitstream continued, fresh packet)
+     0x02 (bitstream continued, continued packet)
+
+PCM absolute position
+
+ (This is packed in the same way the rest of Vorbis packet data is
+ packed; LSb of LSB first.  Note that the 'position' data specifies a
+ sample number (eg, in a CD quality sample is four octets, 16 bits for
+ left and 16 bits for right).  The position specified is the total
+ samples encoded after including all packets begun in this page.  The
+ rationale here is that the position specified in the frame header of
+ the last page tells how long the PCM data coded by the bitstream is.
+
+  6  0xXX LSB
+  7  0xXX
+  8  0xXX
+  9  0xXX
+ 10  0xXX
+ 11  0xXX
+ 12  0xXX
+ 13  0xXX MSB
+
+stream serial number:
+ Vorbis allows for seperate logical bitstreams to be mixed at page
+ granularity in a physical bitstream.  The most common case would be
+ sequential arrangement, but it is possible to interleave pages for
+ two seperate bitstreams to be decoded concurrently.  Right now, the
+ standard code doesn't use the serial number (sets it to zero), but it
+ will eventually.  Each logical stream must have a unique serial
+ number within a physical stream:
+
+ 14  0xXX LSB
+ 15  0xXX
+ 16  0xXX
+ 17  0xXX MSB
+
+page sequence no
+
+ Page counter; lets us know if a page is lost (useful where packets
+ span page boundaries).
+
+ 18  0xXX LSB
+ 19  0xXX
+ 20  0xXX
+ 21  0xXX MSB
+
+page checksum
+     
+ 32 bit CRC value (direct algorithm, initial val and final XOR = 0,
+ generator polynomial=0x04c11db7).  The value is computed over the
+ entire header (with the CRC field in the header set to zero) and then
+ continued over the page.  The CRC field is then filled with the
+ computed value.
+
+ (A thorough discussion of CRC algorithms can be found in "A Painless
+ Guide to CRC Error Detection Algorithms" by Ross Williams
+ (ross@guest.adelaide.edu.au).  The document is available from
+ ftp://ftp.adelaide.edu.au/pub/rocksoft)
+
+ 22  0xXX LSB
+ 23  0xXX
+ 24  0xXX
+ 25  0xXX MSB
+
+page_segments
+
+ The number of segment entries to appear in the segment table. The
+ maximum number of 255 segments (255 bytes each) sets the maximum
+ possible physical page size at 65307 bytes or just under 64kB (thus
+ we know that a header corrupted so as destroy sizing/alignment
+ information will not cause a runaway bitstream.  We'll read in the
+ page according to the corrupted size information that's guaranteed to
+ be a reasonable size regardless, notice the checksum mismatch, drop
+ sync and then look for recapture).
+
+ 26 0x00-0xff (0-255)
+
+segment_table (containing packet lacing values)
+
+ The lacing values for each packet segment physically appearing in
+ this page are listed in contiguous order.
+
+ 27 0x00-0xff (0-255)
+ [...]
+ n  0x00-0xff (0-255, n=page_segments+26)
+
+Total page size is calculated directly from the known header size and
+lacing values in the segment table. Packet data segments follow
+immediately after the header.
+
+Page headers typically impose a flat .25-.5% space overhead assuming
+nominal ~8k page sizes.  The segmentation table needed for exact
+packet recovery in the streaming layer adds approximately .5-1%
+nominal assuming expected encoder behavior in the 44.1kHz, 128kbps
+stereo encodings.
+
diff --git a/install.sh b/install.sh
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/lib/analysis.c b/lib/analysis.c
new file mode 100644 (file)
index 0000000..dc31653
--- /dev/null
@@ -0,0 +1,311 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE Ogg Vorbis SOFTWARE CODEC SOURCE CODE.  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS SOURCE IS GOVERNED BY *
+ * THE GNU PUBLIC LICENSE 2, WHICH IS INCLUDED WITH THIS SOURCE.    *
+ * PLEASE READ THESE TERMS DISTRIBUTING.                            *
+ *                                                                  *
+ * THE OggSQUISH SOURCE CODE IS (C) COPYRIGHT 1994-1999             *
+ * by 1999 Monty <monty@xiph.org> and The XIPHOPHORUS Company       *
+ * http://www.xiph.org/                                             *
+ *                                                                  *
+ ********************************************************************
+
+ function: PCM data vector blocking, windowing and dis/reassembly
+ author: Monty <xiphmont@mit.edu>
+ modifications by: Monty
+ last modification date: Jun 26 1999
+
+ Handle windowing, overlap-add, etc of the original (and synthesized)
+ PCM vectors.  This is made more amusing by Vorbis' current two allowed
+ block sizes (512 and 2048 elements/channel).
+ Vorbis manipulates the dynamic range of the incoming PCM data
+ envelope to minimise time-domain energy leakage from percussive and
+ plosive waveforms being quantized in the MDCT domain.
+
+ ********************************************************************/
+
+#include <stdlib.h>
+
+/* pcm accumulator and multipliers 
+   examples (not exhaustive):
+
+ <-------------- lW----------------->
+                   <--------------- W ---------------->
+:            .....|.....       _______________         |
+:        .'''     |     '''_---      |       |\        |
+:.....'''         |_____--- '''......|       | \_______|
+:.................|__________________|_______|__|______|
+                  |<------ Sl ------>|      > Sr <     |endW
+                  |beginSl           |endSl  |  |endSr   
+                  |beginW            |endlW  |beginSr
+                  mult[0]                              mult[n]
+
+
+                      |< lW >|       
+                   <--------------- W ---------------->
+                  |   |  ..  ______________            |
+                  |   | '  `/        |     ---_        |
+                  |___.'___/`.       |         ---_____| 
+                  |_______|__|_______|_________________|
+                  |      >|Sl|<      |<------ Sr ----->|endW
+                  |       |  |endSl  |beginSr          |endSr
+                  |beginW |  |endlW                     
+                  mult[0] |beginSl                     mult[n]
+
+ <-------------- lW----------------->
+                          |<-W-->|                               
+:            ..............  __  |   |                    
+:        .'''             |`/  \ |   |                       
+:.....'''                 |/`...\|...|                    
+:.........................|__||__|___|                  
+                          |Sl||Sr|endW    
+                          |  ||  |endSr
+                          |  ||beginSr
+                          |  |endSl
+                         |beginSl
+                         |beginW
+                          mult[0]
+                                 mult[n]
+*/
+
+typedef struct vorbis_state{
+  int samples_per_envelope_step;
+  int block_size[2];
+  double *window[2][2][2]; /* windowsize, leadin, leadout */
+
+  double **pcm;
+  int      pcm_storage;
+  int      pcm_channels;
+  int      pcm_current;
+
+  double **deltas;
+  int    **multipliers;
+  int      envelope_storage;
+  int      envelope_channels;
+  int      envelope_current;
+
+  int  initflag;
+
+  long lW;
+  long W;
+  long Sl;
+  long Sr;
+
+  long beginW;
+  long endW;
+  long beginSl;
+  long endSl;
+  long beginSr;
+  long endSr;
+
+  long frame;
+  long samples;
+
+} vorbis_state;
+
+/* arbitrary settings and spec-mandated numbers get filled in here */
+void vorbis_init_state(vorbis_state *v,int channels,int mode){
+  memset(v,0,sizeof(vorbis_state));
+  v->samples_per_envelope_step=64;
+  v->block_size[0]=512; 
+  v->block_size[1]=2048;
+  
+  v->window[0][0][0]=vorbis_window(v->block_size[0],
+                                  v->block_size[0]/2,v->block_size[0]/2);
+  v->window[1][0][0]=vorbis_window(v->block_size[1],
+                                  v->block_size[0]/2,v->block_size[0]/2);
+  v->window[1][0][1]=vorbis_window(v->block_size[1],
+                                  v->block_size[0]/2,v->block_size[1]/2);
+  v->window[1][1][0]=vorbis_window(v->block_size[1],
+                                  v->block_size[1]/2,v->block_size[0]/2);
+  v->window[1][1][1]=vorbis_window(v->block_size[1],
+                                  v->block_size[1]/2,v->block_size[1]/2);
+
+  /* initialize the storage vectors to a decent size greater than the
+     minimum */
+  
+  v->pcm_storage=8192; /* 8k samples.  we'll assume later that we have
+                         a minimum of twice the blocksize (2k) of
+                         accumulated samples in analysis */
+  v->pcm_channels=channels;
+  v->pcm=malloc(channels*sizeof(double *));
+  {
+    int i;
+    for(i=0;i<channels;i++)
+      v->pcm[i]=calloc(v->pcm_storage,sizeof(double));
+  }
+
+  /* Initialize the envelope multiplier storage */
+  
+  v->envelope_storage=v->pcmstorage/v->samples_per_envelope_step+1;
+  v->envelope_channels=channels;
+  v->deltas=calloc(v->envelope_channels,sizeof(double *));
+  v->multipliers=calloc(v->envelope_channels,sizeof(int *));
+  {
+    int i;
+    for(i=0;i<v->envelope_channels;i++){
+      v->deltas[i]=calloc(v->envelope_storage,sizeof(double));
+      v->multipliers[i]=calloc(v->envelope_storage,sizeof(int));
+    }
+  }
+
+  /* all 1 (large block) or 0 (small block) */
+  /*v->lW=0; previous window size */
+  /*v->W=0;  determined during analysis */
+  /*v->Sl=0; previous Sr */
+  /*v->Sr=0; determined during analysis */
+
+  /* all vector indexes; multiples of samples_per_envelope_step */
+  /*v->beginW=0;  determined during analysis */
+  /*v->endW=0;    determined during analysis */
+    v->beginSl=v->block_size[1]/4-v->block_size[0]/4;
+    v->endSl=v->beginSl+v->block_size[0]/2;
+  /*v->beginSr=0; determined during analysis */
+  /*v->endSr=0;   determined during analysis */
+
+  /*v->frame=0;*/
+  /*v->samples=0;*/
+
+  v->pcm_current=v->endSl;
+  v->last_multiplier=v->endSl/v->samples_per_envelope_step+1;
+
+  v->initflag=1;
+}
+
+void vorbis_free_state(vorbis_state *v){
+  int i,j,k;
+  if(v){
+    for(i=0;i<2;i++)
+      for(j=0;j<2;j++)
+       for(k=0;k<2;k++)
+         if(v->window[i][j][k])free(v->window[i][j][k]);
+    if(v->pcm){
+      for(i=0;i<v->pcm_channels;i++)
+       if(v->pcm[i])free(v->pcm[i]);
+      free(v->pcm);
+    }
+    if(v->deltas){
+      for(i=0;i<v->envelope_channels;i++)
+       if(v->deltas[i])free(v->deltas[i]);
+      free(v->deltas);
+    }
+    if(v->multipliers){
+      for(i=0;i<v->envelope_channels;i++)
+       if(v->multipliers[i])free(v->multipliers[i]);
+      free(v->multipliers);
+    }
+    free(v);
+  }
+}
+
+int vorbis_analysis(vorbis_state *v, double **pcm, int vals){
+  int i;
+
+  /* vorbis encode state initialization */
+  if(!v->initflag)
+    vorbis_init_settings(v);
+
+  /* first we need to handle incoming data (if any) */
+  
+  if(vals>0){
+    /* Do we have enough storage space for the incoming data? If not,
+       expand the PCM storage */
+
+    if(v->pcm_current+vals>=pcm_storage){
+      for(i=0;i<v->pcm_channels;i++)
+       v->pcm[i]=realloc(v->pcm[i],
+                         (v->pcm_current+vals*2)*sizeof(double));
+      v->pcm_storage=v->pcm_current+vals*2;
+    }
+
+    /* If we're encoding the end of the stream and we're handing in
+       padding, vals will be set, but the passed in buffer will be
+       NULL; just add in zeroes */
+
+    for(i=0;i<v->pcm_channels;i++)
+      if(pcm==NULL)
+       memset(v->pcm[i]+v->pcm_current,0,vals*sizeof(double));
+      else
+       memcpy(v->pcm[i]+v->pcm_current,pcm[i],vals*sizeof(double));
+
+    v->pcm_current+=vals;
+  }
+
+  /* Do we definately have enough for a frame? We assume we have more
+     than actually necessary to encode the current block to make some
+     analysis easier. */
+
+  if(v->pcm_current-v->endSl<v->blocksize[1]*2)
+    return(0);
+
+  /* we have enough. begin analysis */
+  /* complete the envelope analysis vectors */
+
+  
+
+  /* decide the blocksize of this frame */
+
+
+  /* algebra to set the rest of the window alignment vectors; many are
+     just derived, but they make the process clearer for the time
+     being */
+
+
+
+  /* the real analysis begins; forward MDCT with window */
+
+  
+  /* Noise floor, resolution floor */
+
+  /* encode the floor into LSP; get the actual floor back for quant */
+
+  /* use noise floor, res floor for culling, actual floor for quant */
+
+  /* encode residue */
+
+  /* advance storage vectors and clean up */
+  /* center the window leadout on blocksize[1]/4 */
+  {
+    int new_beginSr,new_endSr,movement,emove;
+
+    /* first do the pcm storage */
+    if(v->Sr){
+      new_beginSl=0;
+      new_endSl=v->blocksize[1]/2;
+    }else{
+      new_beginSl=v->blocksize[1]/4-v->blocksize[0]/4;
+      new_endSl=new_beginSr+v->blocksize[0]/2;
+    }
+    movement=v->beginSr-new_beginSl;
+
+    for(i=0;i<v->pcm_channels;i++)
+      memmove(v->pcm[i],v->pcm[i]+movement,
+             (v->pcm_current-movement)*sizeof(double));
+    v->pcm_current-=movement;
+    v->lW=W;
+    v->Sl=v->Sr;
+    v->beginSl=new_beginSl;
+    v->endSl=new_endSl;
+    v->frame++;
+    v->samples+=movement;
+
+    /* now advance the multipliers */
+    emove=movement/samples_per_envelope_step; 
+    for(i=0;i<v->envelope_channels;i++){
+      memmove(v->deltas[i],v->deltas[i]+emove,
+             (v->envelope_current-emove)*sizeof(double));
+      memmove(v->multipliers[i],v->multipliers[i]+emove,
+             (v->envelope_current-emove)*sizeof(int));
+    }
+    v->envelope_current-=emove;
+  }
+
+  /* done */
+  return(1);
+}
+
+
+
+
diff --git a/lib/codec.h b/lib/codec.h
new file mode 100644 (file)
index 0000000..80f35ef
--- /dev/null
@@ -0,0 +1,167 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE Ogg Vorbis SOFTWARE CODEC SOURCE CODE.  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS SOURCE IS GOVERNED BY *
+ * THE GNU PUBLIC LICENSE 2, WHICH IS INCLUDED WITH THIS SOURCE.    *
+ * PLEASE READ THESE TERMS DISTRIBUTING.                            *
+ *                                                                  *
+ * THE OggSQUISH SOURCE CODE IS (C) COPYRIGHT 1994-1999             *
+ * by 1999 Monty <monty@xiph.org> and The XIPHOPHORUS Company       *
+ * http://www.xiph.org/                                             *
+ *                                                                  *
+ ********************************************************************
+
+ function: PCM data vector blocking, windowing and dis/reassembly
+ author: Monty <xiphmont@mit.edu>
+ modifications by: Monty
+ last modification date: Jun 26 1999
+
+ ********************************************************************/
+
+#ifndef _vorbis_codec_h_
+#define _vorbis_codec_h_
+
+typedef struct vorbis_info{
+  int channels;
+  int rate;
+  int version;
+  int mode;
+  char **user_comments;
+  char *vendor;
+
+} vorbis_info;
+typedef struct vorbis_dsp_state{
+  int samples_per_envelope_step;
+  int block_size[2];
+  double *window[2][2][2]; /* windowsize, leadin, leadout */
+
+  double **pcm;
+  int      pcm_storage;
+  int      pcm_channels;
+  int      pcm_current;
+
+  double **deltas;
+  int    **multipliers;
+  int      envelope_storage;
+  int      envelope_channels;
+  int      envelope_current;
+
+  int  initflag;
+
+  long lW;
+  long W;
+  long Sl;
+  long Sr;
+
+  long beginW;
+  long endW;
+  long beginSl;
+  long endSl;
+  long beginSr;
+  long endSr;
+
+  long frame;
+  long samples;
+
+} vorbis_dsp_state;
+
+typedef struct {
+  unsigned char *header;
+  long header_len;
+  unsigned char *body;
+  long body_len;
+} vorbis_page;
+
+typedef struct {
+  unsigned size32 crc_lookup[256];
+
+  unsigned char   *body_data;    /* bytes from packet bodies */
+  long    body_storage;
+  long    body_fill;
+  long    body_processed;
+
+  int    *lacing_vals;    /* The values that will go to the segment table */
+  size64 *pcm_vals;       /* pcm_pos values for headers. Not compact
+                            this way, but it is simple coupled to the
+                            lacing fifo */
+  long    lacing_storage;
+  long    lacing_fill;
+
+  unsigned char    header[282];    /* working space for header */
+  int              headerbytes;    
+
+  int     e_o_s;          /* set when we have buffered the last packet in the
+                            logical bitstream */
+  int     b_o_s;          /* set after we've written the initial page
+                            of a logical bitstream */
+  long    serialno;
+  long    pageno;
+} vorbis_stream_state;
+
+typedef struct {
+  unsigned char *packet;
+  long  bytes;
+  long  e_o_s;
+
+  size64 pcm_pos;
+
+} vorbis_packet;
+
+/* libvorbis encodes in two abstraction layers; first we perform DSP
+   and produce a packet (see docs/analysis.txt).  The packet is then
+   coded into a framed bitstream by the second layer (see
+   docs/framing.txt).  Decode is the reverse process; we sync/frame
+   the bitstream and extract individual packets, then decode the
+   packet back into PCM audio.
+
+   The extra framing/packetizing is used in streaming formats, such as
+   files.  Over the net (such as with UDP), the framing and
+   packetization aren't necessary as they're provided by the transport
+   and the streaming layer is not used */
+
+/* ENCODING PRIMITIVES: analysis/DSP layer **************************/
+
+extern int vorbis_analysis_init(vorbis_dsp_state *vd,vorbis_info *i);
+extern void vorbis_dsp_state_free(vorbis_dsp_state *vd);
+extern int vorbis_analysis_input(vorbis_dsp_state *vd,double **pcm,int vals);
+extern int vorbis_analysis(vorbis_dsp_state *vd,vorbis_packet *vp);
+
+/* GENERAL PRIMITIVES: packet streaming layer ***********************/
+
+extern int vorbis_stream_init(vorbis_stream_state *vs,int serialno);
+extern int vorbis_stream_clear(vorbis_stream_state *vs);
+extern int vorbis_stream_destroy(vorbis_stream_state *vs);
+extern int vorbis_stream_eof(vorbis_stream_state *vs);
+
+/* ENCODING PRIMITIVES: packet streaming layer **********************/
+
+extern int vorbis_stream_encode(vorbis_stream_state *vs,vorbis_packet *vp);
+extern int vorbis_stream_page(vorbis_stream_state *vs, vorbis_page *vg);
+
+/* DECODING PRIMITIVES: packet streaming layer **********************/
+
+/* returns nonzero when it has a complete vorbis packet synced and
+   framed for decoding. Generally, it wants to see two page headers at
+   proper spacing before returning 'yea'. An exception is the initial
+   header to make IDing the vorbis stream easier: it will return sync
+   on the page header + beginning-of-stream marker.
+
+   _sync will also abort framing if is sees a problem in the packet
+   boundary lacing.  */
+
+extern int vorbis_stream_decode(vorbis_stream_state *vs,char *stream,int size);
+extern int vorbis_stream_sync(vorbis_stream_state *vs);
+extern int vorbis_stream_verify(vorbis_stream_state *vs);
+extern size64 vorbis_stream_position(vorbis_stream_state *vs);
+extern int vorbis_stream_skippage(vorbis_stream_state *vs);
+extern int vorbis_stream_packet(vorbis_stream_state *vs,vorbis_packet *vp);
+
+/* DECODING PRIMITIVES: synthesis layer *****************************/
+
+extern int vorbis_synthesis_info(vorbis_dsp_state *vd,vorbis_info *vi);
+extern int vorbis_synthesis(vorbis_dsp_state *vd,vorbis_packet *vp);
+extern int vorbis_synthesis_output(vorbis_dsp_state *vd,double **pcm);
+
+#endif
+
diff --git a/lib/envelope.c b/lib/envelope.c
new file mode 100644 (file)
index 0000000..71efd4b
--- /dev/null
@@ -0,0 +1,205 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE Ogg Vorbis SOFTWARE CODEC SOURCE CODE.  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS SOURCE IS GOVERNED BY *
+ * THE GNU PUBLIC LICENSE 2, WHICH IS INCLUDED WITH THIS SOURCE.    *
+ * PLEASE READ THESE TERMS DISTRIBUTING.                            *
+ *                                                                  *
+ * THE OggSQUISH SOURCE CODE IS (C) COPYRIGHT 1994-1999             *
+ * by 1999 Monty <monty@xiph.org> and The XIPHOPHORUS Company       *
+ * http://www.xiph.org/                                             *
+ *                                                                  *
+ ********************************************************************
+
+ function: PCM data envelope analysis and manipulation
+ author: Monty <xiphmont@mit.edu>
+ modifications by: Monty
+ last modification date: Jun 17 1999
+
+ Vorbis manipulates the dynamic range of the incoming PCM data
+ envelope to minimise time-domain energy leakage from percussive and
+ plosive waveforms being quantized in the MDCT domain.
+
+ ********************************************************************/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <math.h>
+
+static typedef struct {
+  int divisor;
+  double *window;
+} envelope_lookup;
+
+static double oPI  = 3.14159265358979323846;
+
+envelope_lookup *init_envelope(int length,int divleng){
+  envelope_lookup *ret=malloc(sizeof(envelope_lookup));
+  int i;
+
+  ret->length=divleng;
+  ret->window=malloc(divleng*sizeof(double)*2);
+
+  /* We just use a straight sin^2(x) window for this */
+  for(i=0;i<divleng*2;i++){
+    double temp=sin((i+.5)/divleng*oPI);
+    ret->window[i]=temp*temp;
+  }
+}
+
+/* right now, we do things simple and dirty.  Should this prove
+   inadequate, then we'll think of something different.  The details
+   of the encoding format do not depend on the exact behavior, only
+   the format of the bits that come out.
+
+   Using residual from an LPC whitening filter to judge envelope
+   energy would probably yield cleaner results, but that's slow.
+   Let's see if simple delta analysis gives us acceptible results.  */
+
+int analyze_envelope0(double *vector, envelope_lookup *init, int n,
+                      double *deltas){
+
+  int divisor=init->length;
+  int divs=n/divisor-1;
+  double *win=init->window;
+  int i,j,count=0;
+
+  double max,spanlo,spanhi;
+  
+  /* initial and final blocks are special cases. Eg:
+     ______________                  
+                   \        
+     |_______|______\|_______|_______|
+
+                ___________             
+               /           \
+     |_______|/______|______\|_______|
+
+                        _____________
+                       /    
+     |_______|_______|/______|_______|
+     as we go block by block, we watch the collective metrics span. If we 
+     span the threshhold (assuming the threshhold is active), we use an 
+     abbreviated vector */
+  
+  /* initial frame */
+  max=0;
+  for(i=1;i<divisor;i++){
+    double temp=abs(vector[i-1]-vector[i]);
+    if(max<temp)max=temp;
+  }
+  for(;i<divisor*2;i++){
+    double temp=abs(win[i-1]*vector[i-1]-win[i]*vector[i]);
+    if(max<temp)max=temp;
+  }
+  spanlo=spanhi=deltas[count++]=max;
+
+  /* mid frames */
+  for(j=divisor;j<n-divisor*2;j+=divisor){
+    max=0;
+    for(i=1;i<divisor*2;i++){
+      double temp=abs(win[i-1]*vector[j+i-1]-win[i]*vector[j+i]);
+      if(max<temp)max=temp;
+    }
+    deltas[count++]=max;
+    if(max<spanlo)spanlo=max;
+    if(max>spanhi)spanhi=max;
+    if(threshhold>1 && spanlo*threshhold<spanhi)
+      abbrevflag=1;
+    if(abbrevflag && j>n0-divisor/2)break;
+  }
+
+  /* last frame */
+  if(!abbrevflag){
+    max=0;
+    for(i=1;i<divisor;i++){
+      double temp=abs(win[i-1]*vector[j+i-1]-win[i]*vector[j+i]);
+      if(max<temp)max=temp;
+    }
+    for(;i<divisor*2;i++){
+      double temp=abs(vector[j+i-1]-vector[j+i]);
+      if(max<temp)max=temp;
+    }
+    deltas[count++]=max;
+    if(max<spanlo)spanlo=max;
+    if(max>spanhi)spanhi=max;
+    if(threshhold>1 && spanlo*threshhold<spanhi)
+      abbrevflag=1;
+  }
+
+  if(abbrevflag)return(n0);
+  return(n);
+}  
+
+/* also decide if we're going with a full sized or abbreviated
+   vector. Some encoding tactics might want to use envelope massaging
+   fully and discard abbreviated vectors entriely.  We make that
+   decision here */
+
+int analyze_envelope1(envelope_lookup *init,int n,
+                     double triggerthresh,double spanthresh,
+                     double *deltas){
+
+  /* Look at the delta values; decide if we need to do any envelope
+     manipulation at all on this vector; if so, choose the
+     multipliers and placeholders.
+
+     '0' is a placeholder.  Other values specify a
+     multiplier/divisor. Multipliers are used by the decoder, divisors
+     in the encoder.  The mapped m/d value for each segment is
+     2^(n-1).  Placeholders (zeros) take on the value of the last
+     non-zero multiplier/divisor.  When the placeholder is not
+     preceeded by a non-placeholder value in the current vector, it
+     assumes the value of the *next* non-zero value.  In this way, the
+     vector manipulation is local to the current vector and does not
+     rely on preceeding vectors.
+
+  */
+  
+  /* scan forward with sliding windows; we start manipulating envelopes
+     when the collective deltas span over a threshhold. If in fact we
+     begin manipulating, we can manage on a finer scale than the
+     original threshhold. first look for the larger threshhold and if
+     we span it, manipulate the vector to hold within the smaller span
+     threshhold. */
+
+  /* scan for the trigger */
+
+  int divisor=init->length;
+  int divs=n/divisor-1;
+  int i,triggerflag=0;
+  double spanlo,spanhi;
+  
+  spanlo=spanhi=deltas[0];
+
+  for(i=1;i<divs;i++){
+    double max=deltas[i];
+    if(max<spanlo)spanlo=max;
+    if(max>spanhi)spanhi=max;
+    if(spanlo*triggerthresh<spanhi){
+      triggerflag=1;
+      break;
+    }
+  }
+
+  if(triggerflag){
+    /* choose divisors/multipliers to fit the vector into the
+       specified span.  In the decoder, these values are *multipliers*, so  */
+
+
+
+
+
+
+
+
+
+
+
+
+
+  }
+  return(triggerflag);
+}
+
diff --git a/lib/framing.c b/lib/framing.c
new file mode 100644 (file)
index 0000000..622ade8
--- /dev/null
@@ -0,0 +1,646 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE Ogg Vorbis SOFTWARE CODEC SOURCE CODE.  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS SOURCE IS GOVERNED BY *
+ * THE GNU PUBLIC LICENSE 2, WHICH IS INCLUDED WITH THIS SOURCE.    *
+ * PLEASE READ THESE TERMS DISTRIBUTING.                            *
+ *                                                                  *
+ * THE OggSQUISH SOURCE CODE IS (C) COPYRIGHT 1994-1999             *
+ * by 1999 Monty <monty@xiph.org> and The XIPHOPHORUS Company       *
+ * http://www.xiph.org/                                             *
+ *                                                                  *
+ ********************************************************************
+
+ function: code raw Vorbis packets into framed vorbis stream and
+           decode vorbis streams back into raw packets
+ author: Monty <xiphmont@mit.edu>
+ modifications by: Monty
+ last modification date: Jul 10 1999
+
+ note: The CRC code is directly derived from public domain code by
+ Ross Williams (ross@guest.adelaide.edu.au).  See framing.txt for
+ details.
+
+ ********************************************************************/
+
+#include <stdlib.h>
+#include <string.h>
+#include "codec.h"
+
+/* A complete description of Vorbis framing exists in docs/framing.txt */
+
+/* helper to initialize lookup for direct-table CRC */
+static unsigned size32 _vorbis_crc_entry(unsigned long index){
+  int           i;
+  unsigned long r;
+
+  r = index << 24;
+  for (i=0; i<8; i++)
+    if (r & 0x80000000UL)
+      r = (r << 1) ^ 0x04c11db7; /* The same as the ethernet generator
+                                   polynomial, although we use an
+                                   unreflected alg and an init/final
+                                   of 0, not 0xffffffff */
+    else
+       r<<=1;
+ return (r & 0xffffffffUL);
+}
+
+int vorbis_stream_init(vorbis_stream_state *vs,int serialno){
+  int i;
+  if(vs){
+    memset(vs,0,sizeof(vorbis_stream_state));
+    vs->body_storage=16*1024;
+    vs->body_data=malloc(vs->body_storage*sizeof(char));
+
+    vs->lacing_storage=1024;
+    vs->lacing_vals=malloc(vs->lacing_storage*sizeof(int));
+    vs->pcm_vals=malloc(vs->lacing_storage*sizeof(size64));
+
+    /* initialize the crc_lookup table */
+    for (i=0;i<256;i++)
+      vs->crc_lookup[i]=_vorbis_crc_entry((unsigned long)i);
+
+    vs->serialno=serialno;
+
+    return(0);
+  }
+  return(-1);
+} 
+
+/* _clear does not free vs, only the non-flat storage within */
+int vorbis_stream_clear(vorbis_stream_state *vs){
+  if(vs){
+    if(vs->body_data)free(vs->body_data);
+    if(vs->lacing_vals)free(vs->lacing_vals);
+    if(vs->pcm_vals)free(vs->pcm_vals);
+
+    memset(vs,0,sizeof(vorbis_stream_state));    
+  }
+  return(0);
+} 
+
+int vorbis_stream_destroy(vorbis_stream_state *vs){
+  if(vs){
+    vorbis_stream_clear(vs);
+    free(vs);
+  }
+  return(0);
+} 
+
+/* Helpers for vorbis_stream_encode; this keeps the structure and
+   what's happening fairly clear */
+
+/* checksum the page */
+/* Direct table CRC; note that this will be faster in the future if we
+   perform the checksum silmultaneously with other copies */
+
+static void _vs_checksum(vorbis_stream_state *vs,vorbis_page *vg){
+  unsigned size32 crc_reg=0;
+  unsigned size32 *lookup=vs->crc_lookup;
+  int i;
+
+  for(i=0;i<vg->header_len;i++)
+    crc_reg=(crc_reg<<8)^lookup[((crc_reg >> 24)&0xff)^vg->header[i]];
+  for(i=0;i<vg->body_len;i++)
+    crc_reg=(crc_reg<<8)^lookup[((crc_reg >> 24)&0xff)^vg->body[i]];
+  
+  vg->header[22]=crc_reg&0xff;
+  vg->header[23]=(crc_reg>>8)&0xff;
+  vg->header[24]=(crc_reg>>16)&0xff;
+  vg->header[25]=(crc_reg>>24)&0xff;
+}
+
+/* submit data to the internal buffer of the framing engine */
+int vorbis_stream_encode(vorbis_stream_state *vs,vorbis_packet *vp){
+  int lacing_vals=vp->bytes/255+1,i;
+
+  /* make sure we have the buffer storage */
+  if(vs->body_storage<=vs->body_fill+vp->bytes){
+    vs->body_storage+=(vp->bytes+1024);
+    vs->body_data=realloc(vs->body_data,vs->body_storage);
+  }
+  if(vs->lacing_storage<=vs->lacing_fill+lacing_vals){
+    vs->lacing_storage+=(lacing_vals+32);
+    vs->lacing_vals=realloc(vs->lacing_vals,vs->lacing_storage*sizeof(int));
+    vs->pcm_vals=realloc(vs->pcm_vals,vs->lacing_storage*sizeof(size64));
+  }
+
+  /* Copy in the submitted packet.  Yes, the copy is a waste; this is
+     the liability of overly clean abstraction for the time being.  It
+     will actually be fairly easy to eliminate the extra copy in the
+     future */
+
+  memcpy(vs->body_data+vs->body_fill,vp->packet,vp->bytes);
+  vs->body_fill+=vp->bytes;
+
+  /* Store lacing vals for this packet */
+  for(i=0;i<lacing_vals-1;i++){
+    vs->lacing_vals[vs->lacing_fill+i]=255;
+    vs->pcm_vals[vs->lacing_fill+i]=vp->pcm_pos;
+  }
+  vs->lacing_vals[vs->lacing_fill+i]=(vp->bytes)%255;
+  vs->pcm_vals[vs->lacing_fill+i]=vp->pcm_pos;
+
+  /* flag the first segment as the beginning of the packet */
+  vs->lacing_vals[vs->lacing_fill]|= 0x100;
+
+  vs->lacing_fill+=lacing_vals;
+
+  if(vp->e_o_s)vs->e_o_s=1;
+
+  return(0);
+}
+
+/* This constructs pages from buffered packet segments.  The pointers
+returned are to static buffers; do not free. The returned buffers are
+good only until the next call (using the same vs) */
+
+int vorbis_stream_page(vorbis_stream_state *vs, vorbis_page *vg){
+  int i;
+
+  if(vs->body_returned){
+    /* advance packet data according to the body_returned pointer. We
+       had to keep it around to return a pointer into the buffer last
+       call */
+
+    vs->body_fill-=vs->body_returned;
+    memmove(vs->body_data,vs->body_data+vs->body_returned,
+           vs->body_fill*sizeof(char));
+    vs->body_returned=0;
+  }
+
+  if((vs->e_o_s&&vs->lacing_fill) || 
+     vs->body_fill > 4096 || 
+     vs->lacing_fill>=255){
+    int vals=0,bytes=0;
+    int maxvals=(vs->lacing_fill>255?255:vs->lacing_fill);
+    long acc=0;
+
+    /* construct a page */
+    /* decide how many segments to include */
+    for(vals=0;vals<maxvals;vals++){
+      if(acc>4096)break;
+      acc+=vs->lacing_vals[vals]&0x0ff;
+    }
+
+    /* construct the header in temp storage */
+    memcpy(vs->header,"OggS",4);
+
+    /* stream structure version */
+    vs->header[4]=0x00;
+
+    if(vs->b_o_s==0){ 
+      /* Ah, this is the first page */
+      vs->header[5]=0x00;
+    }else{
+      if(vs->lacing_vals[0]&0x100){
+       /* The first packet segment is the beginning of a packet */
+       vs->header[5]=0x01;
+      }else{
+       vs->header[5]=0x02;
+      }
+    }
+    vs->b_o_s=1;
+
+    /* 64 bits of PCM position */
+    {
+      size64 pcm_pos=vs->pcm_vals[vals-1];
+
+      for(i=6;i<14;i++){
+       vs->header[i]=(pcm_pos&0xff);
+       pcm_pos>>=8;
+      }
+    }
+
+    /* 32 bits of stream serial number */
+    {
+      long serialno=vs->serialno;
+      for(i=14;i<18;i++){
+       vs->header[i]=(serialno&0xff);
+       serialno>>=8;
+      }
+    }
+
+    /* 32 bits of page counter (we have both counter and page header
+       because this val can roll over) */
+    {
+      long pageno=vs->pageno++;
+      for(i=18;i<22;i++){
+       vs->header[i]=(pageno&0xff);
+       pageno>>=8;
+      }
+    }
+
+    /* zero for computation; filled in later */
+    vs->header[22]=0;
+    vs->header[23]=0;
+    vs->header[24]=0;
+    vs->header[25]=0;
+
+    /* segment table */
+    vs->header[26]=vals&0xff;
+    for(i=0;i<vals;i++)
+      bytes+=vs->header[i+27]=(vs->lacing_vals[i]&0xff);
+      
+    /* advance the lacing data and set the body_returned pointer */
+
+    vs->lacing_fill-=vals;
+    memmove(vs->lacing_vals,vs->lacing_vals+vals,vs->lacing_fill*sizeof(int));
+    memmove(vs->pcm_vals,vs->pcm_vals+vals,vs->lacing_fill*sizeof(size64));
+    vs->body_returned=bytes;
+
+    /* set pointers in the vorbis_page struct */
+    vg->header=vs->header;
+    vg->header_len=vs->headerbytes=vals+27;
+    vg->body=vs->body_data;
+    vg->body_len=bytes;
+
+    /* calculate the checksum */
+
+    _vs_checksum(vs,vg);
+
+    return(1);
+  }
+
+  /* not enough data to construct a page and not end of stream */
+  return(0);
+}
+
+int vorbis_stream_eof(vorbis_stream_state *vs){
+  return vs->e_o_s;
+}
+
+/* DECODING PRIMITIVES: packet streaming layer **********************/
+
+/* Accepts data for decoding; syncs and frames the bitstream, then
+   decodes pages into packets.  Works through errors and dropouts,
+   reporting holes/errors in the bitstream when the missing/corrupt
+   packet is requested by vorbis_stream_packet(). Call with size=-1
+   for EOS */
+
+/* all below:  <0 error, 0 not enough data, >0 success */
+
+int vorbis_stream_decode(vorbis_stream_state *vs,char *stream,int size){
+  /* beginning a page? ie, no header started yet?*/
+  if vs->
+  
+  
+
+
+}
+
+size64 vorbis_stream_pcmpos(vorbis_stream_state *vs){
+}
+
+size64 vorbis_stream_pageno(vorbis_stream_state *vs){
+}
+
+int vorbis_stream_skippage(vorbis_stream_state *vs){
+}
+
+int vorbis_stream_clearbuf(vorbis_stream_state *vs){
+}
+
+int vorbis_stream_packet(vorbis_stream_state *vs,vorbis_packet *vp){
+}
+
+#ifdef _V_SELFTEST
+#include <stdio.h>
+
+void test_pack(vorbis_stream_state *vs,int *pl, int **headers){
+  unsigned char *data=malloc(1024*1024); /* for scripted test cases only */
+  long inptr=0;
+  long outptr=0;
+  long pcm_pos=0;
+  int i,j,packets,pageno=0;
+
+  for(packets=0;;packets++)if(pl[packets]==-1)break;
+
+  for(i=0;i<packets;i++){
+    /* construct a test packet */
+    vorbis_packet vp;
+    int len=pl[i];
+    
+    vp.packet=data+inptr;
+    vp.bytes=len;
+    vp.e_o_s=(pl[i+1]<0?1:0);
+    vp.pcm_pos=pcm_pos;
+
+    pcm_pos+=1024;
+
+    for(j=0;j<len;j++)data[inptr++]=i+j;
+
+    /* submit the test packet */
+    vorbis_stream_encode(vs,&vp);
+
+    /* retrieve any finished pages */
+    {
+      vorbis_page vg;
+      
+      while(vorbis_stream_page(vs,&vg)){
+       /* We have a page.  Check it carefully */
+
+       fprintf(stderr,"%d, ",pageno);
+
+       if(headers[pageno]==NULL){
+         fprintf(stderr,"coded too many pages!\n");
+         exit(1);
+       }
+
+       /* Test data */
+       for(j=0;j<vg.body_len;j++)
+       if(vg.body[j]!=(data+outptr)[j]){
+         fprintf(stderr,"body data mismatch at pos %ld: %x!=%x!\n\n",
+                 outptr+j,(data+outptr)[j],vg.body[j]);
+         exit(1);
+       }
+       outptr+=vg.body_len;
+
+       /* Test header */
+       for(j=0;j<vg.header_len;j++){
+         if(vg.header[j]!=headers[pageno][j]){
+           fprintf(stderr,"header content mismatch at pos %ld:\n",j);
+           for(j=0;j<headers[pageno][26]+27;j++)
+             fprintf(stderr," (%d)%02x:%02x",j,headers[pageno][j],vg.header[j]);
+           fprintf(stderr,"\n");
+           exit(1);
+         }
+       }
+       if(vg.header_len!=headers[pageno][26]+27){
+         fprintf(stderr,"header length incorrect! (%ld!=%d)\n",
+                 vg.header_len,headers[pageno][26]+27);
+         exit(1);
+       }
+       pageno++;
+      }
+    }
+  }
+  free(data);
+  if(headers[pageno]!=NULL){
+    fprintf(stderr,"did not write last page!\n");
+    exit(1);
+  }
+  if(inptr!=outptr){
+    fprintf(stderr,"packet data incomplete!\n");
+    exit(1);
+  }
+  fprintf(stderr,"ok.\n");
+}
+
+int main(void){
+  vorbis_stream_state vs;
+
+  /* Exercise each code path in the framing code.  Also verify that
+     the checksums are working.  */
+
+  {
+    /* 17, 254, 255, 256, 500, 510, 600 byte, pad */
+    int packets[]={17, 254, 255, 256, 500, 510, 600, -1};
+    int head1[] = {0x4f,0x67,0x67,0x53,0,0,
+                  0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,
+                  0x01,0x02,0x03,0x04,0,0,0,0,
+                  0x7e,0xea,0x18,0xd0,
+                  14,
+                  17,254,255,0,255,1,255,245,255,255,0,
+                  255,255,90};
+    int *headret[]={head1,NULL};
+    
+    vorbis_stream_init(&vs,0x04030201);
+    fprintf(stderr,"testing basic page encoding... ");
+    test_pack(&vs,packets,headret);
+    vorbis_stream_clear(&vs);
+  }
+
+  {
+    /* nil packets; beginning,middle,end */
+    int packets[]={0,17, 254, 255, 0, 256, 0, 500, 510, 600, 0, -1};
+
+    int head1[] = {0x4f,0x67,0x67,0x53,0,0,
+                  0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,
+                  0x01,0x02,0x03,0x04,0,0,0,0,
+                  0xcf,0x70,0xa4,0x1b,
+                  18,
+                  0,17,254,255,0,0,255,1,0,255,245,255,255,0,
+                  255,255,90,0};
+    int *headret[]={head1,NULL};
+    
+    vorbis_stream_init(&vs,0x04030201);
+    fprintf(stderr,"testing basic nil packets... ");
+    test_pack(&vs,packets,headret);
+    vorbis_stream_clear(&vs);
+  }
+
+  {
+    /* starting new page with first segment */
+    int packets[]={4345,259,255,-1};
+
+    int head1[] = {0x4f,0x67,0x67,0x53,0,0,
+                  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+                  0x01,0x02,0x03,0x04,0,0,0,0,
+                  0xe7,0xdc,0x6d,0x09,
+                  17,
+                  255,255,255,255,255,255,255,255,
+                  255,255,255,255,255,255,255,255,255};
+
+    int head2[] = {0x4f,0x67,0x67,0x53,0,0x02,
+                  0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
+                  0x01,0x02,0x03,0x04,1,0,0,0,
+                  0x5f,0x54,0x07,0x69,
+                  5,
+                  10,255,4,255,0};
+    int *headret[]={head1,head2,NULL};
+    
+    vorbis_stream_init(&vs,0x04030201);
+    fprintf(stderr,"testing single-packet page span... ");
+    test_pack(&vs,packets,headret);
+    vorbis_stream_clear(&vs);
+  }
+
+  {
+    /* starting new page with first segment */
+    int packets[]={100,4345,259,255,-1};
+
+    int head1[] = {0x4f,0x67,0x67,0x53,0,0x00,
+                  0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
+                  0x01,0x02,0x03,0x04,0,0,0,0,
+                  0x6f,0xac,0x43,0x67,
+                  17,
+                  100,255,255,255,255,255,255,255,255,
+                  255,255,255,255,255,255,255,255};
+
+    int head2[] = {0x4f,0x67,0x67,0x53,0,0x02,
+                  0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,
+                  0x01,0x02,0x03,0x04,1,0,0,0,
+                  0xe7,0xa3,0x34,0x53,
+                  6,
+                  255,10,255,4,255,0};
+    int *headret[]={head1,head2,NULL};
+    
+    vorbis_stream_init(&vs,0x04030201);
+    fprintf(stderr,"testing multi-packet page span... ");
+    test_pack(&vs,packets,headret);
+    vorbis_stream_clear(&vs);
+  }
+
+
+  /* page with the 255 segment limit */
+  {
+
+    int packets[]={10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,50,-1};
+
+    int head1[] = {0x4f,0x67,0x67,0x53,0,0x00,
+                  0x00,0xf8,0x03,0x00,0x00,0x00,0x00,0x00,
+                  0x01,0x02,0x03,0x04,0,0,0,0,
+                  0xb1,0xd0,0xab,0xbc,
+                  255,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10,10,
+                  10,10,10,10,10,10,10};
+
+    int head2[] = {0x4f,0x67,0x67,0x53,0,0x01,
+                  0x00,0xfc,0x03,0x00,0x00,0x00,0x00,0x00,
+                  0x01,0x02,0x03,0x04,1,0,0,0,
+                  0xb1,0x1e,0x4f,0x41,
+                  1,
+                  50};
+    int *headret[]={head1,head2,NULL};
+    
+    vorbis_stream_init(&vs,0x04030201);
+    fprintf(stderr,"testing max packet segments... ");
+    test_pack(&vs,packets,headret);
+    vorbis_stream_clear(&vs);
+  }
+
+  {
+    /* packet that overspans over an entire page */
+
+    int packets[]={100,9000,259,255,-1};
+
+    int head1[] = {0x4f,0x67,0x67,0x53,0,0x00,
+                  0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
+                  0x01,0x02,0x03,0x04,0,0,0,0,
+                  0x6f,0xac,0x43,0x67,
+                  17,
+                  100,255,255,255,255,255,255,255,255,
+                  255,255,255,255,255,255,255,255};
+
+    int head2[] = {0x4f,0x67,0x67,0x53,0,0x02,
+                  0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
+                  0x01,0x02,0x03,0x04,1,0,0,0,
+                  0x65,0x4e,0xbd,0x96,
+                  17,
+                  255,255,255,255,255,255,255,255,
+                  255,255,255,255,255,255,255,255,255};
+
+    int head3[] = {0x4f,0x67,0x67,0x53,0,0x02,
+                  0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,
+                  0x01,0x02,0x03,0x04,2,0,0,0,
+                  0x84,0x86,0x86,0xf4,
+                  7,
+                  255,255,75,255,4,255,0};
+    int *headret[]={head1,head2,head3,NULL};
+    
+    vorbis_stream_init(&vs,0x04030201);
+    fprintf(stderr,"testing very large packets... ");
+    test_pack(&vs,packets,headret);
+    vorbis_stream_clear(&vs);
+  }
+
+  {
+    /* nil page.  why not? */
+
+    int packets[]={100,4080,-1};
+
+    int head1[] = {0x4f,0x67,0x67,0x53,0,0x00,
+                  0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
+                  0x01,0x02,0x03,0x04,0,0,0,0,
+                  0x6f,0xac,0x43,0x67,
+                  17,
+                  100,255,255,255,255,255,255,255,255,
+                  255,255,255,255,255,255,255,255};
+
+    int head2[] = {0x4f,0x67,0x67,0x53,0,0x02,
+                  0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
+                  0x01,0x02,0x03,0x04,1,0,0,0,
+                  0x71,0xc8,0x17,0x8c,
+                  1,0};
+
+    int *headret[]={head1,head2,NULL};
+    
+    vorbis_stream_init(&vs,0x04030201);
+    fprintf(stderr,"testing nil page... ");
+    test_pack(&vs,packets,headret);
+    vorbis_stream_clear(&vs);
+  }
+
+  
+
+  return(0);
+}
+
+#endif
+
+
+
+
diff --git a/lib/mdct.c b/lib/mdct.c
new file mode 100644 (file)
index 0000000..f28fb4e
--- /dev/null
@@ -0,0 +1,351 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE Ogg Vorbis SOFTWARE CODEC SOURCE CODE.  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS SOURCE IS GOVERNED BY *
+ * THE GNU PUBLIC LICENSE 2, WHICH IS INCLUDED WITH THIS SOURCE.    *
+ * PLEASE READ THESE TERMS DISTRIBUTING.                            *
+ *                                                                  *
+ * THE OggSQUISH SOURCE CODE IS (C) COPYRIGHT 1994-1999             *
+ * by 1999 Monty <monty@xiph.org> and The XIPHOPHORUS Company       *
+ * http://www.xiph.org/                                             *
+ *                                                                  *
+ ********************************************************************
+
+ function: modified discrete cosine transform
+           power of two length transform only [16 <= n ]
+
+ author: Monty <xiphmont@mit.edu>
+ modifications by: Monty
+ last modification date: Jun 04 1999
+
+ Algorithm adapted from _The use of multirate filter banks for coding
+ of high quality digital audio_, by T. Sporer, K. Brandenburg and
+ B. Edler, collection of the European Signal Processing Conference
+ (EUSIPCO), Amsterdam, June 1992, Vol.1, pp 211-214 
+
+ Note that the below code won't make much sense without the paper;
+ The presented algorithm was already fairly polished, and the code
+ once followed it closely.  The current code both corrects several
+ typos in the paper and goes beyond the presented optimizations 
+ (steps 4 through 6 are, for example, entirely eliminated).
+
+ This module DOES NOT INCLUDE code to generate the window function.
+ Everybody has their own weird favorite including me... I happen to
+ like the properties of y=sin(2PI*sin^2(x)), but others may vehemently
+ disagree.
+
+ ********************************************************************/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <math.h>
+#include "mdct.h"
+
+static double oPI  = 3.14159265358979323846;
+
+/* build lookups for trig functions; also pre-figure scaling and
+   some window function algebra. */
+
+MDCT_lookup *MDCT_init(int n){
+  MDCT_lookup *lookup=malloc(sizeof(MDCT_lookup));
+  int    *bitrev=malloc(sizeof(int)*(n/4));
+  double *trig=malloc(sizeof(double)*(n+n/4));
+  double *AE=trig;
+  double *AO=AE+n/4;
+  double *BE=AO+n/4;
+  double *BO=BE+n/4;
+  double *CE=BO+n/4;
+  double *CO=CE+n/8;
+  
+  int *bitA=bitrev;
+  int *bitB=bitrev+n/8;
+
+  int i;
+  int log2n=lookup->log2n=rint(log(n)/log(2));
+  lookup->n=n;
+  lookup->trig=trig;
+  lookup->bitrev=bitrev;
+
+  /* trig lookups... */
+
+  for(i=0;i<n/4;i++){
+    AE[i]=cos((oPI/n)*(4*i));
+    AO[i]=-sin((oPI/n)*(4*i));
+    BE[i]=cos((oPI/(2*n))*(2*i+1));
+    BO[i]=sin((oPI/(2*n))*(2*i+1));
+  }
+  for(i=0;i<n/8;i++){
+    CE[i]=cos((oPI/n)*(4*i+2));
+    CO[i]=-sin((oPI/n)*(4*i+2));
+  }
+
+  /* bitreverse lookup... */
+
+  {
+    int mask=(1<<(log2n-1))-1,i,j;
+    int msb=1<<(log2n-2);
+    for(i=0;i<n/8;i++){
+      int acc=0;
+      for(j=0;msb>>j;j++)
+       if((msb>>j)&i)acc|=1<<j;
+      bitA[i]=((~acc)&mask)*2;
+      bitB[i]=acc*2;
+    }
+  }
+
+  return(lookup);
+}
+
+void MDCT_free(MDCT_lookup *l){
+  if(l){
+    if(l->trig)free(l->trig);
+    if(l->bitrev)free(l->bitrev);
+    free(l);
+  }
+}
+
+static inline void _MDCT_kernel(double *x, 
+                               int n, int n2, int n4, int n8,
+                               MDCT_lookup *init){
+  double *w=x+1; /* interleaved access improves cache locality */ 
+  int i;
+  /* step 2 */
+
+  {
+    double *xA=x+n2;
+    double *xB=x;
+    double *w2=w+n2;
+    double *AE=init->trig+n4;
+    double *AO=AE+n4;
+
+    for(i=0;i<n2;){
+      double x0=xA[i]-xB[i];
+      double x1=xA[i+2]-xB[i+2];
+      AE-=2;AO-=2;
+
+      w[i] =x0 * *AE + x1 * *AO;
+      w2[i]=xA[i]+xB[i];
+      i+=2;
+      w[i] =x1 * *AE - x0 * *AO;
+      w2[i]=xA[i]+xB[i];
+      i+=2;
+    }
+  }
+
+  /* step 3 */
+
+  {
+    int r,s;
+    for(i=0;i<init->log2n-3;i++){
+      int k0=n>>(i+1);
+      int k1=1<<(i+2);
+      int wbase=n-4;
+      double *AE=init->trig;
+      double *AO=AE+n4;
+      double *temp;
+
+      for(r=0;r<(n4>>i);r+=4){
+       int w1=wbase;
+       int w2=wbase-(k0>>1);
+       wbase-=4;
+
+       for(s=0;s<(2<<i);s++){
+         x[w1+2]=w[w1+2]+w[w2+2];
+         x[w1]  =w[w1]+w[w2];
+         x[w2+2]=(w[w1+2]-w[w2+2])* *AE-(w[w1]-w[w2])* *AO;
+         x[w2]  =(w[w1]-w[w2])* *AE+(w[w1+2]-w[w2+2])* *AO;
+         w1-=k0;
+         w2-=k0;
+       }
+       AE+=k1;
+       AO+=k1;
+      }
+
+      temp=w;
+      w=x;
+      x=temp;
+    }
+  }
+
+
+  /* step 4, 5, 6, 7 */
+  {
+    double *CE=init->trig+n;
+    double *CO=CE+n8;
+    int *bitA=init->bitrev;
+    int *bitB=bitA+n8;
+    double *x1=x;
+    double *x2=x+n-2;
+    for(i=0;i<n8;i++){
+      int t1=bitA[i];
+      int t4=bitB[i];
+      int t2=t4+2;
+      int t3=t1-2;
+
+      double wA=w[t1]-w[t2];
+      double wB=w[t3]+w[t4];
+      double wC=w[t1]+w[t2];
+      double wD=w[t3]-w[t4];
+
+      double wACO=wA* *CO;
+      double wBCO=wB* *(CO++);
+      double wACE=wA* *CE;
+      double wBCE=wB* *(CE++);
+
+      *x1    =( wC+wACO+wBCE)*.5;
+      *(x2-2)=( wC-wACO-wBCE)*.5;
+      *(x1+2)=( wD+wBCO-wACE)*.5; 
+      *x2    =(-wD+wBCO-wACE)*.5;
+      x1+=4;
+      x2-=4;
+    }
+  }
+}
+
+void MDCT(double *in, double *out, MDCT_lookup *init, double *window){
+  int n=init->n;
+  double *x=alloca(n*sizeof(double));
+  int n2=n>>1;
+  int n4=n>>2;
+  int n8=n>>3;
+  int i;
+
+  /* window + rotate + step 1 */
+  {
+    double tempA,tempB;
+    int in1=n2+n4-4;
+    int in2=in1+5;
+    double *AE=init->trig+n4;
+    double *AO=AE+n4;
+
+    i=0;
+
+    for(i=0;i<n4;i+=4){
+      tempA= in[in1+2]*window[in1+2] + in[in2]*window[in2];
+      tempB= in[in1]*window[in1] + in[in2+2]*window[in2+2];       
+      in1 -=4;in2 +=4;
+      AE--;AO--;
+      x[i]=   tempB* *AO + tempA* *AE;
+      x[i+2]= tempB* *AE - tempA* *AO;
+    }
+
+    in2=1;
+
+    for(;i<n-n4;i+=4){
+      tempA= in[in1+2]*window[in1+2] - in[in2]*window[in2];
+      tempB= in[in1]*window[in1] - in[in2+2]*window[in2+2];       
+      in1 -=4;in2 +=4;
+      AE--;AO--;
+      x[i]=   tempB* *AO + tempA* *AE;
+      x[i+2]= tempB* *AE - tempA* *AO;
+    }
+
+    in1=n-4;
+
+    for(;i<n;i+=4){
+      tempA= -in[in1+2]*window[in1+2] - in[in2]*window[in2];
+      tempB= -in[in1]*window[in1] - in[in2+2]*window[in2+2];       
+      in1 -=4;in2 +=4;
+      AE--;AO--;
+      x[i]=   tempB* *AO + tempA* *AE;
+      x[i+2]= tempB* *AE - tempA* *AO;
+    }
+  }
+
+  _MDCT_kernel(x,n,n2,n4,n8,init);
+
+  /* step 8 */
+
+  {
+    double *BE=init->trig+n2;
+    double *BO=BE+n4;
+    double *out2=out+n2;
+    for(i=0;i<n4;i++){
+      out[i]   =x[0]* *BE+x[2]* *BO;
+      *(--out2)=x[0]* *BO-x[2]* *BE;
+      x+=4;
+      BO++;
+      BE++;
+    }
+  }
+}
+
+void iMDCT(double *in, double *out, MDCT_lookup *init, double *window){
+  int n=init->n;
+  double *x=alloca(n*sizeof(double));
+  int n2=n>>1;
+  int n4=n>>2;
+  int n8=n>>3;
+  int i;
+
+  /* window + rotate + step 1 */
+  {
+    double *inO=in+1;
+    double  *xO= x;
+    double  *AE=init->trig+n4;
+    double  *AO=AE+n4;
+
+    for(i=0;i<n8;i++){
+      AE--;AO--;
+      *xO=-*(inO+2)* *AO - *inO * *AE;
+      xO+=2;
+      *xO= *inO * *AO - *(inO+2)* *AE;
+      xO+=2;
+      inO+=4;
+    }
+
+    inO=in+n2-4;
+
+    for(i=0;i<n8;i++){
+      AE--;AO--;
+      *xO=*inO * *AO + *(inO+2) * *AE;
+      xO+=2;
+      *xO=*inO * *AE - *(inO+2) * *AO;
+      xO+=2;
+      inO-=4;
+    }
+
+  }
+
+  _MDCT_kernel(x,n,n2,n4,n8,init);
+
+  /* step 8 */
+
+  {
+    double *BE=init->trig+n2;
+    double *BO=BE+n4;
+    int o1=n4,o2=o1-1;
+    int o3=n4+n2,o4=o3-1;
+    double scale=n/4.;
+    
+    for(i=0;i<n4;i++){
+      double temp1= (*x * *BO - *(x+2) * *BE)* scale;
+      double temp2= (*x * *BE + *(x+2) * *BO)* -scale;
+    
+      out[o1]=-temp1*window[o1];
+      out[o2]=temp1*window[o2];
+      out[o3]=temp2*window[o3];
+      out[o4]=temp2*window[o4];
+
+      o1++;
+      o2--;
+      o3++;
+      o4--;
+      x+=4;
+      BE++;BO++;
+    }
+  }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/mdct.h b/lib/mdct.h
new file mode 100644 (file)
index 0000000..f7d3dbd
--- /dev/null
@@ -0,0 +1,47 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE Ogg Vorbis SOFTWARE CODEC SOURCE CODE.  *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS SOURCE IS GOVERNED BY *
+ * THE GNU PUBLIC LICENSE 2, WHICH IS INCLUDED WITH THIS SOURCE.    *
+ * PLEASE READ THESE TERMS DISTRIBUTING.                            *
+ *                                                                  *
+ * THE OggSQUISH SOURCE CODE IS (C) COPYRIGHT 1994-1999             *
+ * by 1999 Monty and The XIPHOPHORUS Company                        *
+ * http://www.xiph.org/                                             *
+ *                                                                  *
+ ********************************************************************
+
+ function: modified discrete cosine transform prototypes
+
+ ********************************************************************/
+
+#ifndef _OGG_MDCT_H_
+#define _OGG_MDCT_H_
+
+typedef struct {
+  int n;
+  int log2n;
+  
+  double *trig;
+  int    *bitrev;
+
+} MDCT_lookup;
+
+extern MDCT_lookup *MDCT_init(int n);
+extern void MDCT_free(MDCT_lookup *l);
+extern void MDCT(double *in, double *out, MDCT_lookup *init, double *window);
+extern void iMDCT(double *in, double *out, MDCT_lookup *init, double *window);
+
+#endif
+
+
+
+
+
+
+
+
+
+
+
+