diff -r -c3 LiDIA-1.3.orig/Readme LiDIA-1.3/Readme
*** LiDIA-1.3.orig/Readme	Wed Feb  5 21:51:10 1997
--- LiDIA-1.3/Readme	Sun Jan 25 00:44:29 1998
***************
*** 157,164 ****
  o mpqs: large prime variant for quadratic sieve in the class
    rational_factorization.
  
! o You can now choose gmp as the integer arithmetic of the kernel.
!   This LiDIA - release contains gmp version 2.0.2.
  
  
  
--- 157,164 ----
  o mpqs: large prime variant for quadratic sieve in the class
    rational_factorization.
  
! o You can now choose gmp or cln as the integer arithmetic of the kernel.
!   This LiDIA release contains gmp version 2.0.2 and cln version 1997-09-06.
  
  
  
diff -r -c3 LiDIA-1.3.orig/config/CONFIG.in LiDIA-1.3/config/CONFIG.in
*** LiDIA-1.3.orig/config/CONFIG.in	Wed Feb  5 12:02:16 1997
--- LiDIA-1.3/config/CONFIG.in	Sat Jan 24 18:42:57 1998
***************
*** 42,48 ****
  #
  # The Kernel And The Interface To Be compiled
  #
! # Possible Integer Interfaces Are: libI, lip, gmp
  #
  # Possible Memory Managers Are: malloc, dentzer, boehm,
  #                               default (no manager)
--- 42,48 ----
  #
  # The Kernel And The Interface To Be compiled
  #
! # Possible Integer Interfaces Are: libI, lip, gmp, cln
  #
  # Possible Memory Managers Are: malloc, dentzer, boehm,
  #                               default (no manager)
***************
*** 149,155 ****
   LIDIA_INSTALL_DAT    = ${LIDIA_INSTALL_DIR}/lib
   
  #
! # OS/2 Compatability Section 
  #
   
                CXX-off =
--- 149,155 ----
   LIDIA_INSTALL_DAT    = ${LIDIA_INSTALL_DIR}/lib
   
  #
! # OS/2 Compatibility Section 
  #
   
                CXX-off =
***************
*** 166,171 ****
--- 166,172 ----
  # Make Command Macros
  #
  # AR       -- the archiver command
+ # ARX      -- the archiver extract command
  # RM       -- command used to remove files
  # RMR      -- command used to remove directories
  # CP       -- command used to copy files
***************
*** 178,183 ****
--- 179,185 ----
  #
  
                  AR    = @AR@ 
+                 ARX   = ar x
                  RM    = @RM@
                  RMR   = @RMR@
                  CP    = @CP@
diff -r -c3 LiDIA-1.3.orig/config/CONFIG.os2 LiDIA-1.3/config/CONFIG.os2
*** LiDIA-1.3.orig/config/CONFIG.os2	Tue Jan 21 14:55:44 1997
--- LiDIA-1.3/config/CONFIG.os2	Sat Jan 24 18:43:28 1998
***************
*** 137,142 ****
--- 137,143 ----
  # Make Command Macros
  #
  # AR       -- the archiver command
+ # ARX      -- the archiver extract command
  # RM       -- command used to remove files
  # RMR      -- command used to remove directories
  # CP       -- command used to copy files
***************
*** 147,152 ****
--- 148,154 ----
  # TOUCH    -- command used to create an empry file
  #
                AR    = ar ru
+               ARX   = ar x
                RM    = del /N
                RMR   = del /N
                CP    = xcopy
diff -r -c3 LiDIA-1.3.orig/config/bin/integer-sh LiDIA-1.3/config/bin/integer-sh
*** LiDIA-1.3.orig/config/bin/integer-sh	Tue Oct 22 22:25:57 1996
--- LiDIA-1.3/config/bin/integer-sh	Sun Jan 25 00:47:13 1998
***************
*** 7,15 ****
  
  echo " "
  echo "You will now be asked for the integer arithmetic that " 
! echo "will be used in the kernel of LiDIA (gmp, libI, lip)."
  echo " "
  echo "gmp   - written by Torbjorn Granlund"
  echo "libI  - written by Ralf Dentzer"
  echo "lip   - written by Arjen Lenstra"
  echo " "
--- 7,16 ----
  
  echo " "
  echo "You will now be asked for the integer arithmetic that " 
! echo "will be used in the kernel of LiDIA (gmp, cln, libI, lip)."
  echo " "
  echo "gmp   - written by Torbjorn Granlund"
+ echo "cln   - written by Bruno Haible (based on gmp)"
  echo "libI  - written by Ralf Dentzer"
  echo "lip   - written by Arjen Lenstra"
  echo " "
***************
*** 23,35 ****
  do 
    echo -n "integer arithmetic ? [$INTEGERS] : "
    read ANSWER
!   if test "$ANSWER" = "gmp" -o "$ANSWER" = "lip" -o "$ANSWER" = "libI" ; then
      INTEGERS=$ANSWER
      SUCCESS=y
    elif test "$ANSWER" = "" ; then
      SUCCESS=y
    else
!     echo "Please choose gmp, libI, or lip." 
      INTEGERS="libI"
    fi
  done
--- 24,36 ----
  do 
    echo -n "integer arithmetic ? [$INTEGERS] : "
    read ANSWER
!   if test "$ANSWER" = "gmp" -o "$ANSWER" = "cln" -o "$ANSWER" = "lip" -o "$ANSWER" = "libI" ; then
      INTEGERS=$ANSWER
      SUCCESS=y
    elif test "$ANSWER" = "" ; then
      SUCCESS=y
    else
!     echo "Please choose gmp, cln, libI, or lip." 
      INTEGERS="libI"
    fi
  done
diff -r -c3 LiDIA-1.3.orig/doc/manual/FIG/lidia_model.fig LiDIA-1.3/doc/manual/FIG/lidia_model.fig
*** LiDIA-1.3.orig/doc/manual/FIG/lidia_model.fig	Tue Feb 27 11:57:01 1996
--- LiDIA-1.3/doc/manual/FIG/lidia_model.fig	Sun Jan 25 00:48:58 1998
***************
*** 55,61 ****
  4 0 -1 0 0 2 16 0.0000000 4 225 2085 1200 2850 parameterized classes\001
  4 0 -1 0 0 2 16 0.0000000 4 225 1365 1200 4035 simple classes\001
  4 0 -1 0 0 2 16 0.0000000 4 165 930 1200 5220 interfaces\001
! 4 2 -1 0 0 12 12 0.0000000 4 180 2100 9000 6375 (libI, lip, gmp, mm)\001
  4 2 -1 0 0 12 12 0.0000000 4 180 1365 9000 5175 (bigint, gmm)\001
  4 2 -1 0 0 12 12 0.0000000 4 180 2940 9000 3975 (bigrational, bigfloat, ...)\001
  4 2 -1 0 0 12 12 0.0000000 4 180 3675 9000 2775 (vector, matrix, power series, ...)\001
--- 55,61 ----
  4 0 -1 0 0 2 16 0.0000000 4 225 2085 1200 2850 parameterized classes\001
  4 0 -1 0 0 2 16 0.0000000 4 225 1365 1200 4035 simple classes\001
  4 0 -1 0 0 2 16 0.0000000 4 165 930 1200 5220 interfaces\001
! 4 2 -1 0 0 12 12 0.0000000 4 180 2100 9000 6375 (libI, lip, gmp, cln, mm)\001
  4 2 -1 0 0 12 12 0.0000000 4 180 1365 9000 5175 (bigint, gmm)\001
  4 2 -1 0 0 12 12 0.0000000 4 180 2940 9000 3975 (bigrational, bigfloat, ...)\001
  4 2 -1 0 0 12 12 0.0000000 4 180 3675 9000 2775 (vector, matrix, power series, ...)\001
diff -r -c3 LiDIA-1.3.orig/doc/manual/bibliography.tex LiDIA-1.3/doc/manual/bibliography.tex
*** LiDIA-1.3.orig/doc/manual/bibliography.tex	Fri Jan 24 13:22:31 1997
--- LiDIA-1.3/doc/manual/bibliography.tex	Sun Jan 25 00:55:48 1998
***************
*** 151,156 ****
--- 151,159 ----
  \IT{A rigorous subexponential algorithm for computation of class groups},
  Tech. report, IBM Research Report, San Jose, CA, 1989.
  
+ \bibitem{haible} B. Haible:
+ \IT{CLN, a Class Library for Numbers}, 1997.
+ 
  \bibitem{HLConF} G.H. Hardy and J.E. Littlewood:
  \IT{\em Partitio numerorum {III}: On the expression of a number as a sum of
  primes}, Acta Math. {\bf 44} (1923), 1--70.
diff -r -c3 LiDIA-1.3.orig/doc/manual/installing.tex LiDIA-1.3/doc/manual/installing.tex
*** LiDIA-1.3.orig/doc/manual/installing.tex	Wed Feb  5 17:33:40 1997
--- LiDIA-1.3/doc/manual/installing.tex	Sun Jan 25 00:58:30 1998
***************
*** 309,316 ****
  of the kernel.
  \item BIGINT\\
  This is used to decide which integer arithmetic is to be compiled with
! {\LiDIA}. At the moment we support three possibilities: \TT{gmp}, \TT{libI},
! and \TT{lip}. We suggest that you use the \TT{gmp} with the GNU g++
  compiler and \TT{libI} otherwise. Use \TT{lip}, if you have chosen
  \TT{libI} during the configuration process and TARGET has been set
  to c by configure. In this case, no \TT{libI} assembler code is
--- 309,316 ----
  of the kernel.
  \item BIGINT\\
  This is used to decide which integer arithmetic is to be compiled with
! {\LiDIA}. At the moment we support four possibilities: \TT{gmp}, \TT{cln},
! TT{libI}, and \TT{lip}. We suggest that you use the \TT{gmp} with the GNU g++
  compiler and \TT{libI} otherwise. Use \TT{lip}, if you have chosen
  \TT{libI} during the configuration process and TARGET has been set
  to c by configure. In this case, no \TT{libI} assembler code is
diff -r -c3 LiDIA-1.3.orig/doc/manual/overview.tex LiDIA-1.3/doc/manual/overview.tex
*** LiDIA-1.3.orig/doc/manual/overview.tex	Wed Jan 29 19:32:32 1997
--- LiDIA-1.3/doc/manual/overview.tex	Sun Jan 25 00:57:36 1998
***************
*** 19,24 ****
--- 19,25 ----
  \newcommand{\libi}{{\bf libI}}
  \newcommand{\gmp}{{\bf GNU gmp}}
  \newcommand{\lip}{{\bf lip}}
+ \newcommand{\cln}{{\bf cln}}
  \newcommand{\bigint}{{\bf bigint}}
  
  
***************
*** 70,76 ****
  It is a serious problem to decide which multiprecision integer package
  and which memory manager should be used in \LiDIA. There are
  competing multiprecision integer packages, for example the
! \gmp\ package  \cite{gnump}, the \libi\ package \cite{dentzer} and
  the \lip\ package \cite{lenstra}. Some of those packages are more
  efficient on one architecture and some on others. Also, new
  architectures lead very fast to new multiprecision packages. We decided
--- 71,78 ----
  It is a serious problem to decide which multiprecision integer package
  and which memory manager should be used in \LiDIA. There are
  competing multiprecision integer packages, for example the
! \gmp\ package  \cite{gnump}, the \cln\ package \cite{haible},
! the \libi\ package \cite{dentzer} and
  the \lip\ package \cite{lenstra}. Some of those packages are more
  efficient on one architecture and some on others. Also, new
  architectures lead very fast to new multiprecision packages. We decided
***************
*** 112,120 ****
  whole functionality of the interface can be used in the kernel.
  Currently, we support the multiprecision integer packages
  \libi\ \cite{dentzer}, Arjen Lenstra's \Index{lip} package \cite{lenstra}
! (available by anonymous ftp via \TT{flash.bellcore.com:/pub/lenstra}) and GNU's
  \IndexSUBTT{GNU}{gmp} arithmetic \cite{gnump} (available by anonymous
! ftp via \TT{prep.ai.mit.edu}).
  
  The second \LiDIA\  level is the \BF{interface} through which {\CPP}
  applications on higher levels have access to the kernel. By that
--- 114,123 ----
  whole functionality of the interface can be used in the kernel.
  Currently, we support the multiprecision integer packages
  \libi\ \cite{dentzer}, Arjen Lenstra's \Index{lip} package \cite{lenstra}
! (available by anonymous ftp via \TT{flash.bellcore.com:/pub/lenstra}), GNU's
  \IndexSUBTT{GNU}{gmp} arithmetic \cite{gnump} (available by anonymous
! ftp via \TT{prep.ai.mit.edu}), and CLN (available by anonymous ftp from
! \TT{ma2s2.mathematik.uni-karlsruhe.de:/pub/gnu}).
  
  The second \LiDIA\  level is the \BF{interface} through which {\CPP}
  applications on higher levels have access to the kernel. By that
diff -r -c3 LiDIA-1.3.orig/include/LiDIA/bigint.h LiDIA-1.3/include/LiDIA/bigint.h
*** LiDIA-1.3.orig/include/LiDIA/bigint.h	Tue Oct 29 17:47:17 1996
--- LiDIA-1.3/include/LiDIA/bigint.h	Sat Jan 24 20:29:16 1998
***************
*** 51,56 ****
--- 51,57 ----
              bigint(long l);
              bigint(unsigned long ul);
              bigint(const bigint & a);
+             bigint(const integer_type_name & II) : I (II) {} // cln needs this
             ~bigint();
  
    /**
Only in LiDIA-1.3/src/interfaces/integers: cln
diff -r -c3 LiDIA-1.3.orig/src/interfaces/integers/gmp/bigint.c LiDIA-1.3/src/interfaces/integers/gmp/bigint.c
*** LiDIA-1.3.orig/src/interfaces/integers/gmp/bigint.c	Fri Jan 10 18:19:00 1997
--- LiDIA-1.3/src/interfaces/integers/gmp/bigint.c	Sat Jan 24 17:41:29 1998
***************
*** 610,616 ****
  
  void invert(bigint & a, const bigint & b)
  {
!   if ((a.I._mp_size == 1 || a.I._mp_size == -1) && a.I._mp_d[0] == 1)
      mpz_set(&a.I, &b.I);
    else
      lidia_error_handler("bigint", "invert::inverting of a non-unit.");
--- 610,616 ----
  
  void invert(bigint & a, const bigint & b)
  {
!   if ((b.I._mp_size == 1 || b.I._mp_size == -1) && b.I._mp_d[0] == 1)
      mpz_set(&a.I, &b.I);
    else
      lidia_error_handler("bigint", "invert::inverting of a non-unit.");
Only in LiDIA-1.3/src/kernel/integers: cln
diff -r -c3 LiDIA-1.3.orig/src/simple_classes/factorization/mpqs.c LiDIA-1.3/src/simple_classes/factorization/mpqs.c
*** LiDIA-1.3.orig/src/simple_classes/factorization/mpqs.c	Tue Jan 28 14:00:36 1997
--- LiDIA-1.3/src/simple_classes/factorization/mpqs.c	Sat Jan 24 17:45:17 1998
***************
*** 17,23 ****
  //extern "C" int system(char*);
  #endif
  
! #if !defined(__GNUG__)
  #include <signal.h>
  #else
  #define SIGHUP  1       /* hangup */
--- 17,23 ----
  //extern "C" int system(char*);
  #endif
  
! #if defined(__linux__) || !defined(__GNUG__)
  #include <signal.h>
  #else
  #define SIGHUP  1       /* hangup */