Work at SourceForge, help us to make it a better place! We have an immediate need for a Support Technician in our San Francisco or Denver office.

Close

Commit [d83012] Maximize Restore History

Patches for building ECL using the Microsoft Visual C++ Toolkit 2003

jjgarcia jjgarcia 2005-05-30

added msvc/c/Makefile
added msvc/doc/Makefile
added msvc/gc/Makefile
added src/c/symbols_list2.h
added src/util/make_msvcrtlib
added src/util/ecl.nsi2
added src/util/ecl.nsi3
changed msvc/util/ecl_nsi.bat
changed src/c/Makefile.in
changed src/c/dpp.c
changed src/cmp/cmpcfg.lsp.in
changed src/cmp/cmpmain.lsp
changed src/doc/Makefile.in
changed src/doc/goals.in.html
changed src/doc/head
changed src/doc/index.in.html
changed src/doc/install.in.html
changed src/util/cut.c
changed src/CHANGELOG
changed src/compile.lsp.in
copied src/doc/README.html -> msvc/gmp/Makefile
copied src/doc/news.in.html -> src/util/ecl.nsi1
msvc/c/Makefile Diff Switch to side-by-side view
Loading...
msvc/doc/Makefile Diff Switch to side-by-side view
Loading...
msvc/gc/Makefile Diff Switch to side-by-side view
Loading...
src/c/symbols_list2.h Diff Switch to side-by-side view
Loading...
src/util/make_msvcrtlib Diff Switch to side-by-side view
Loading...
src/util/ecl.nsi2 Diff Switch to side-by-side view
Loading...
src/util/ecl.nsi3 Diff Switch to side-by-side view
Loading...
msvc/util/ecl_nsi.bat Diff Switch to side-by-side view
Loading...
src/c/Makefile.in Diff Switch to side-by-side view
Loading...
src/c/dpp.c Diff Switch to side-by-side view
Loading...
src/cmp/cmpcfg.lsp.in Diff Switch to side-by-side view
Loading...
src/cmp/cmpmain.lsp Diff Switch to side-by-side view
Loading...
src/doc/Makefile.in Diff Switch to side-by-side view
Loading...
src/doc/goals.in.html Diff Switch to side-by-side view
Loading...
src/doc/head Diff Switch to side-by-side view
Loading...
src/doc/index.in.html Diff Switch to side-by-side view
Loading...
src/doc/install.in.html Diff Switch to side-by-side view
Loading...
src/util/cut.c Diff Switch to side-by-side view
Loading...
src/CHANGELOG Diff Switch to side-by-side view
Loading...
src/compile.lsp.in Diff Switch to side-by-side view
Loading...
src/doc/README.html to msvc/gmp/Makefile
--- a/src/doc/README.html
+++ b/msvc/gmp/Makefile
@@ -1,327 +1,615 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
-<html>
-<head>
-<title>ECL-Spain 0.1a</title>
-</head>
-
-<body>
-<h1>ECL-Spain 0.1a</h1>
-
-<a name="toc"><h2>Table of contents</h2></a>
-<ul>
-<li><a href="#intro">Introduction</a>
-<li><a href="#intro">Project goals</a>
-<li><a href="#news">News</a>
-<li><a href="#bugs">Known bugs</a>
-<li><a href="#distrib">Distribution</a>
-<li><a href="#installing">Installation</a>
-<li><a href="ecls-guide.html">User's guide</a>
-<li><a href="#author">The author</a>
-<li><a href="#bench">Benchmark</a>
-</ul>
-
-<a name="intro"><a href="#toc"><h2>Introduction</h2></a></a>
-
-<a href="http://ecls.sourceforge.net">ECLS</a> stands for <em>Embeddable
-Common-Lisp "Spain"</em>, and I usually read it as "e-klos". It is a an
-implementation of the <a href="http://www.lisp.org">Common-Lisp language</a>
-which aims to comply to the <a
-href="http://www.lisp.org/HyperSpec/FrontMatter/index.html">ANSI X3J13</a>
-definition of the language.
-
-<p><a href="http://ecls.sourceforge.net">ECLS</a> combines a bytecodes
-compiler/interpreter and a translator to C.  The first one is specially suited
-for prototyping and debugging. The second one produces fast code that can be
-dynamically loaded into the interpreter or statically linked to build
-standalone executables.
-
-<p><a href="http://ecls.sourceforge.net">ECLS</a> is distributed under the <a
-href="#copyright">GNU Library General Public License (GNU LGPL)</a>.
-
-<p><a href="http://ecls.sourceforge.net">ECLS</a> is not a brand new
-product. It has evolved from the EcoLisp implementation by Giuseppe Attardi
-which in turn was based on the Kyoto Common-Lisp implementation done by Taiichi
-Yuasa and Masami Hagiya, with contributions from several people. Nevertheless
-the program has been seriously modified and the current code base bears little
-resemblance to the previous implementations and the author of those
-implementations should not be blamed for the faults of thi <a
-href="http://ecls.sourceforge.net">ECLS</a>.
-
-<a name="goals"><a href="#toc"><h2>Project goals</h2></a></a>
-
-<ul>
-<li><b>To produce a free implementation of Common-Lisp.</b>
-
-<p><a href="http://ecls.sourceforge.net">ECLS</a> is released under the LGPL or
-GNU Library General Public Licence (See <a
-href="Copyright">Copyright</a>). This means that <a
-href="http://ecls.sourceforge.net">ECLS</a> can be used in commercial projects
-while keeping the implementation free.
-
-<li><b>Compliance to the latest ANSI spec.</b>
-
-<p><a href="http://ecls.sourceforge.net">ECLS</a> is already rather standards
-compliant. <a href="http://ecls.sourceforge.net">ECLS</a> was born as a fork
-from the ECL (Eco-Common-Lisp by Giussepe Attardi) which conformed to Cltl2
-("Common-Lisp the Language 2"), but which was shipped with some ANSI
-compatibility extensions. Currently the worst parts with respect to ANSI are
-the LOOP package and parts of CLOS.
-
-<li><b>Small code size.</b>
-
-<p><a href="http://ecls.sourceforge.net">ECLS</a> is made of a runtime library
-and an interpreter. The interpreter itself is small, at most three files of C
-code. Once the lisp environment is booted, it takes about 1Mb of code (although
-currently it is a bit more due to debuggin issues in the interpreter). If the
-whole of <a href="http://ecls.sourceforge.net">ECLS</a> is compiled from lisp
-to C, the resulting program is 1.5Mb. Nevertheless, there is room for
-improvement in this area.
-
-<li><b>Embedability.</b>
-
-<p>In a near future <a href="http://ecls.sourceforge.net">ECLS</a> will be
-shipped as a library that can be linked against arbitrary C
-programs. Currently, arbitrary C code can be linked against <a
-href="http://ecls.sourceforge.net">ECLS</a>, either statically or at runtime.
-
-<li><b>Portability to arbitrary environments.</b>
-
-<p><a href="http://ecls.sourceforge.net">ECLS</a> currently compiles and runs
-on Linux, FreeBSD 4.x and NetBSD 1.5. Most of the code is portable. The parts
-which change from operating system to operating system are about the
-filesystem, sockets, signals and the allocation of big chunks of memory, but in
-all it is well below 1000 lines. The worst part is related to word-size and
-endianness. Work is in progress to port <a
-href="http://ecls.sourceforge.net">ECLS</a> to 64-bit environments.
-
-<li><b>Compilation via an ANSI C compiler.</b>
-
-<p><a href="http://ecls.sourceforge.net">ECLS</a> can translate lisp code to C
-code that can be dynamically loaded or linked to the runtime to produce a
-standalone executable. Currently this process relies on GCC as a targed
-platform, but work is in progress to remove GCC dependencies.
-
-<li><b>Better garbage collection.</b>
-
-<p>As of this release the memory that <a
-href="http://ecls.sourceforge.net">ECLS</a> can allocate is restricted to
-16Mb. I have tried replacing the garbage collector with a conservative one
-(Boehm's GC v 4.11) and that did fix the problems, but increases the memory
-requirements of <a href="http://ecls.sourceforge.net">ECLS</a>. Since this is
-really undesirable, I have been also thinking about revamping the current
-garbage collector with an interface to mmap(). Time wil tell...
-
-<li><b>Improve the compiler: more agressive inlining, better operations among
-numbers and unboxed arrays of complex numbers.</b>
-
-<p><a href="http://ecls.sourceforge.net">ECLS</a> currently can inline all
-operations that involve fixnums, characters and floating point
-numbers. However, the type inferencer is not very powerful and therefore some
-operations are not inlined because the compiler cannot actually tell the types
-of the arguments and of the output.
-</ul>
-
-<a name="news"><a href="#toc"><h2>News in this release (ECLS-0.1a)</h2></a></a>
-
-<ul>
-<li>Due to human errors, the bytecompiler shipped with 0.1a was an
-  unfinished version. In 0.1b we shipped a more polished files. Some
-  of the errors which are fixed are
-  <ul>
-  <li>Produce the right code for TAGBODY inside closures</li>
-  <li>Activate compiler for SYMBOL-MACROLET</li>
-  <li>Allow non-keyword symbols as lambda-list-keywords</li>
-  <li>Allow more than one :ALLOW-OTHER-KEYS to be supplied, but discard other than the first one
-  <li> Process declarations in FLET/LABELS forms
-  </ul>
-
-<li> Fixed the C compiler routines for TAGBODY: it would produce wrong
-  code when jumping out of a closure.
-
-<li> Rewrite the error system using KMP's condition system, CLOS and a
-  rudimentary interface to the toplevel.
-
-<li> Enclosing the bytecompiler in an UNWIND-PROTECT ensures that the
-  status of the compiler and of the interpreter is always consistent.
-
-<li> Port and incorporate Peter Van Eynde's test suite for ANSI
-  compliance.
-
-<li> Replace features ECL/ECL-MIN with ECLS and ECLS-MIN. All references
-  to ECL (Eco-Common-Lisp) should have been dropped by now.
-
-<li> Add simple-program-error and simple-control-error to the hierarchy
-  of conditions, and try to ensure that all routines in libecls.a
-  signal the right type of condition.
-
-<li> Define COMPLEMENT and CONTINOUSLY.
-
-<li> Fix #'= between bignums.
-
-<li> NIL is no longer valid as the first of a pair of bounding index
-  designators, i.e. (nstring-upcase "aa" :start nil :end nil) causes
-  an error.
-</ul>
-
-<a name="bugs"><a href="#toc"><h2>Known bugs</h2></a></a>
-
-As I mentioned above, the problem I am finding here is the lack of test suites
-which I can use to detect failures in the behavior of any function. Currently I
-can assure that <a href="http://ecls.sourceforge.net">ECLS</a> passes most of
-the tests from the <a href="http://clocc.sourceforge.net">the CLOCC suite</a>.
-The most important exceptions are
-<ul>
-<li>CLOS
-<li>#'format
-<li>#'unread-char is too lax
-<li>The CL package is too polluted
-<li>LOOP lacks some of the standard keywords, including destructuring
-<li>Support for logical pathnames is incomplete
-</ul>
-
-If you find something that should be fixed or that the behavior of a
-function is particularly misleading with respect to the standards, feel free
-to tell me so.
-
-Some other bugs which need to be fixed are:
-<ul>
-<li>Threads and sockets haven't been tested yet.
-<li>#'format doesn't pass the Cltl-1 tests and fails when the number of
-arguments is large.
-<li>Needs better support for wildcards in pathnames.
-<li>Bugs in logical operations among bignums.
-<li>Support for CLOS needs yet more optimization.
-</ul>
-
-<a name="distrib"><a href="#toc"><h2>Distribution</h2></a></a>
-
-This project is hosted at <a href="http://ecls.sourceforge.net">Source
-forge</a>. You can get current copies of the sources and of the documentation
-in there.
-
-<a name="installing"><a href="#toc"><h2>Installation</h2></a></a>
-
-<ul>
-<li>Unpack the tar file
-<pre>
-	gunzip -c ecls.tgz | tar xf -
-</pre>
-
-<li>Run the configuration file.
-<pre>
-	cd ecls-0.1a
-	./configure
-</pre>
-The previous step creates a directory with the name <b>build</b>, and
-stores a bunch of makefiles in it.
-
-<li>Use GNU make to invoke the compilation
-<pre>
-	make
-</pre>
-
-<li>If you want to test the fresh new executable before installing. You you
-should invoke ECLS from withing the build directory using the "-dir ./"
-argument to advice him about the right place to find header files, libraries,
-etc.  For instance, under linux the build directory is "linux" and we would do
-<pre>
-	$ ./configure --prefix=$HOME
-	[...]
-	$ cd build
-	$ make
-	[...]
-	$ ./ecls -dir ./
-</pre>
-
-<li>Install it in the desired location
-<pre>
-	make install
-</pre>
-</ul>
-
-<p>As a side note, a --disable-clos is still in ./configure, but its use is
-discouraged and unsupported.
-
-
-<a name="author"><a href="#toc"><h2>The author</h2></a></a>
-
-For the people who built the several pieces from ECoLisp, see the README.orig
-file. To contact the author of <a href="http://ecls.sourceforge.net">ECLS</a>,
-use the following address
-<pre>
-	Juan Jose Garcia Ripoll
-
-	Univ. de Castilla-La Mancha
-	E.T.S.I. Industriales
-	Departamento de Matematicas
-	c/Camilo Jose Cela, 3
-	Ciudad Real, E-13071
-	Spain
-
-	<a href="mailto:jjgarcia@ind-cr.uclm.es">jjgarcia@ind-cr.uclm.es</a>
-</pre>
-
-
-<a name="news"><a href="#toc"><h2>Benchmark</h2></a></a>
-
-Benchmarks should be taken with a grain of salt. <a
-href="http://ecls.sourceforge.net">ECLS</a> does not aim to compete with any
-commercial or open source implementation. The purpose of these benchmarks are,
-thus, to show the progress of <a href="http://ecls.sourceforge.net">ECLS</a>
-itself from version to version.
-
-<p>It also serves to show how well other implementations perform: CLISPc, which
-is based on bytecodes, is astonishingly fast, compared to other bytecodes
-implementations (ECLSi, CMUCLi) and to native code implementations (ECLSc,
-CMUCLc).
-
-<p>All benchmarks are executed one after another. The benchmark currently shows
-just mean execution times in seconds, using English decimal point (0.03 = 3/100
-seconds).  This means that performance of garbage collectors has a deep impact
-in these numbers.
-
-<p>It would be nice to collect some other information, such as memory use and
-garbage collector timings, but that is beyond my reach for now. Help is always
-welcome.
-
-<p>Finally, I have decided to distribute Gabriel's benchmarks together with <a
-href="http://ecls.sourceforge.net">ECLS</a>. The reason is that this code seems
-to belong to public domain and I had to perform several changes in order to let
-it run with different implementations. To recreate the benchmark just get in
-<tt>build/gabriel/</tt> and type <tt>make</tt>.
-
-<pre>
-
-                CLISPi     ECLSi    CMUCLi    CLISPc     ECLSc    CMUCLc
-boyer            2.490    28.283    13.520     0.397     0.767     0.110
-browse           3.116     7.167    13.260     0.459     *****     0.280
-ctak             0.406     0.883     1.530     0.032     0.017     0.000
-dderiv           0.455     1.317     1.850     0.110     0.167     0.080
-deriv            0.405     1.133     1.670     0.111     0.167     0.070
-destru-mod       1.418     0.871     2.398     0.053     0.025     0.025
-destru           1.384     0.871     2.412     0.053     0.025     0.020
-div2             0.889     1.867     3.850     0.132     0.150     0.070
-fprint           0.026     0.046     0.015     0.026     0.042     0.015
-fread            0.009     0.017     0.007     0.009     0.017     0.005
-frpoly           3.026    22.750    15.240     0.625     6.267     0.220
-puzzle           6.452     4.633    14.630     0.481     0.033     0.020
-puzzle-mod       6.890     4.667    14.680     0.480     0.017     0.030
-puzzle-mod2      6.467     4.633    14.690     0.480     0.033     0.030
-stak             0.374     0.842     1.768     0.047     0.021     0.007
-tak              3.394     9.183    11.500     0.208     0.033     0.020
-tak-mod          3.385     9.450    11.520     0.208     0.033     0.020
-takl             1.407     6.433     9.130     0.107     0.000     0.010
-takr             0.346     0.971     2.035     0.026     0.004     0.002
-tprint           0.022     0.046     0.023     0.022     0.046     0.020
-traverse        41.230    71.767   108.390     1.880     1.450     0.370
-triang-mod      74.765   169.750   255.840     7.362     1.567     3.110
-triang          71.018   149.417   243.330     5.797     0.667     *****
-
-IMPLi = Implementation IMPL interpreted
-IMPLc = Implementation IMPL compiled
-
-CLISP = CLISP 2000-03-06 (March 2000)
-CMUCL = CMUCL 18c
-ECLS  = ECLS 0.1a
-
-</pre></body></html>
+srcdir = ..\..\src\gmp
+
+AUTO_SUBDIRS = mpn\generic mpf mpq mpz printf scanf
+
+MPN_GC_SOURCES = \
+    mpn\generic\add.c \
+    mpn\generic\add_1.c \
+    mpn\generic\add_n.c \
+    mpn\generic\addmul_1.c \
+    mpn\generic\addsub_n.c \
+    mpn\generic\bdivmod.c \
+    mpn\generic\cmp.c \
+    mpn\generic\dc_divrem_n.c \
+    mpn\generic\dive_1.c \
+    mpn\generic\diveby3.c \
+    mpn\generic\divis.c \
+    mpn\generic\divrem.c \
+    mpn\generic\divrem_1.c \
+    mpn\generic\divrem_2.c \
+    mpn\generic\dump.c \
+    mpn\generic\fib2_ui.c \
+    mpn\generic\gcd.c \
+    mpn\generic\gcd_1.c \
+    mpn\generic\gcdext.c \
+    mpn\generic\get_str.c \
+    mpn\generic\hamdist.c \
+    mpn\generic\jacbase.c \
+    mpn\generic\lshift.c \
+    mpn\generic\mod_1.c \
+    mpn\generic\mod_34lsub1.c \
+    mpn\generic\mode1o.c \
+    mpn\generic\mul.c \
+    mpn\generic\mul_1.c \
+    mpn\generic\mul_basecase.c \
+    mpn\generic\mul_fft.c \
+    mpn\generic\mul_n.c \
+    mpn\generic\perfsqr.c \
+    mpn\generic\popcount.c \
+    mpn\generic\pow_1.c \
+    mpn\generic\pre_divrem_1.c \
+    mpn\generic\pre_mod_1.c \
+    mpn\generic\random.c \
+    mpn\generic\random2.c \
+    mpn\generic\rootrem.c \
+    mpn\generic\rshift.c \
+    mpn\generic\sb_divrem_mn.c \
+    mpn\generic\scan0.c \
+    mpn\generic\scan1.c \
+    mpn\generic\set_str.c \
+    mpn\generic\sizeinbase.c \
+    mpn\generic\sqr_basecase.c \
+    mpn\generic\sqrtrem.c \
+    mpn\generic\sub.c \
+    mpn\generic\sub_1.c \
+    mpn\generic\sub_n.c \
+    mpn\generic\submul_1.c \
+    mpn\generic\tdiv_qr.c \
+    mpn\mp_bases.c
+
+MPN_P0_C_SOURCES = \
+	mpn\generic\add.c \
+	mpn\generic\add_1.c \
+	mpn\generic\addsub_n.c \
+	mpn\generic\bdivmod.c \
+	mpn\generic\cmp.c \
+	mpn\generic\dc_divrem_n.c \
+	mpn\generic\divis.c \
+	mpn\generic\divrem.c \
+	mpn\generic\divrem_2.c \
+	mpn\generic\dump.c \
+	mpn\generic\fib2_ui.c \
+	mpn\generic\gcd.c \
+	mpn\generic\gcd_1.c \
+	mpn\generic\gcdext.c \
+	mpn\generic\get_str.c \
+	mpn\generic\hamdist.c \
+	mpn\generic\jacbase.c \
+	mpn\generic\mode1o.c \
+	mpn\mp_bases.c \
+	mpn\generic\mul.c \
+	mpn\generic\mul_fft.c \
+	mpn\generic\mul_n.c \
+	mpn\generic\perfsqr.c \
+	mpn\generic\popcount.c \
+	mpn\generic\pow_1.c \
+	mpn\generic\pre_divrem_1.c \
+	mpn\generic\pre_mod_1.c \
+	mpn\generic\random.c \
+	mpn\generic\random2.c \
+	mpn\generic\rootrem.c \
+	mpn\generic\sb_divrem_mn.c \
+	mpn\generic\scan0.c \
+	mpn\generic\scan1.c \
+	mpn\generic\set_str.c \
+	mpn\generic\sizeinbase.c \
+	mpn\generic\sqr_basecase.c \
+	mpn\generic\sqrtrem.c \
+	mpn\generic\sub.c \
+	mpn\generic\sub_1.c \
+	mpn\generic\tdiv_qr.c
+
+MPN_P0_ASM_SOURCES = \
+	mpn\x86i\umul.asm \
+	mpn\x86i\udiv.asm \
+	mpn\x86i\rshift.asm \
+	mpn\x86i\mul_basecase.asm \
+	mpn\x86i\mul_1.asm \
+	mpn\x86i\mod_34lsub1.asm \
+	mpn\x86i\mod_1.asm \
+	mpn\x86i\lshift.asm \
+	mpn\x86i\divrem_1.asm \
+	mpn\x86i\diveby3.asm \
+	mpn\x86i\dive_1.asm \
+	mpn\x86i\copyi.asm \
+	mpn\x86i\copyd.asm \
+	mpn\x86i\aorsmul_1.asm \
+	mpn\x86i\aors_n.asm
+
+MPN_P3_C_SOURCES = \
+	mpn\generic\add.c \
+	mpn\generic\add_1.c \
+	mpn\generic\addsub_n.c \
+	mpn\generic\bdivmod.c \
+	mpn\generic\cmp.c \
+	mpn\generic\dc_divrem_n.c \
+	mpn\generic\divis.c \
+	mpn\generic\divrem.c \
+	mpn\generic\divrem_2.c \
+	mpn\generic\dump.c \
+	mpn\generic\fib2_ui.c \
+	mpn\generic\gcd.c \
+	mpn\generic\gcd_1.c \
+	mpn\generic\gcdext.c \
+	mpn\generic\get_str.c \
+	mpn\generic\jacbase.c \
+	mpn\mp_bases.c \
+	mpn\generic\mul.c \
+	mpn\generic\mul_fft.c \
+	mpn\generic\mul_n.c \
+	mpn\generic\perfsqr.c \
+	mpn\generic\pow_1.c \
+	mpn\generic\random.c \
+	mpn\generic\random2.c \
+	mpn\generic\rootrem.c \
+	mpn\generic\sb_divrem_mn.c \
+	mpn\generic\scan0.c \
+	mpn\generic\scan1.c \
+	mpn\generic\set_str.c \
+	mpn\generic\sizeinbase.c \
+	mpn\generic\sqrtrem.c \
+	mpn\generic\sub.c \
+	mpn\generic\sub_1.c \
+	mpn\generic\tdiv_qr.c
+
+MPN_P3_ASM_SOURCES = \
+	mpn\x86i\umul.asm \
+	mpn\x86i\udiv.asm \
+	mpn\x86i\p6\sqr_basecase.asm \
+	mpn\x86i\mul_basecase.asm \
+	mpn\x86i\mul_1.asm \
+	mpn\x86i\p6\mode1o.asm \
+	mpn\x86i\mod_34lsub1.asm \
+	mpn\x86i\p6\mod_1.asm \
+	mpn\x86i\p6\diveby3.asm \
+	mpn\x86i\p6\dive_1.asm \
+	mpn\x86i\copyi.asm \
+	mpn\x86i\p6\copyd.asm \
+	mpn\x86i\p6\aorsmul_1.asm \
+	mpn\x86i\aors_n.asm \
+	mpn\x86i\p6\mmx\rshift.asm \
+	mpn\x86i\p6\p3mmx\popham.asm \
+	mpn\x86i\p6\mmx\lshift.asm \
+	mpn\x86i\p6\mmx\divrem_1.asm
+
+MPN_P4_C_SOURCES = \
+	mpn\generic\add.c \
+	mpn\generic\add_1.c \
+	mpn\generic\addsub_n.c \
+	mpn\generic\bdivmod.c \
+	mpn\generic\cmp.c \
+	mpn\generic\dc_divrem_n.c \
+	mpn\generic\divis.c \
+	mpn\generic\divrem.c \
+	mpn\generic\divrem_2.c \
+	mpn\generic\dump.c \
+	mpn\generic\fib2_ui.c \
+	mpn\generic\gcd.c \
+	mpn\generic\gcd_1.c \
+	mpn\generic\gcdext.c \
+	mpn\generic\get_str.c \
+	mpn\generic\jacbase.c \
+	mpn\mp_bases.c \
+	mpn\generic\mul.c \
+	mpn\generic\mul_fft.c \
+	mpn\generic\mul_n.c \
+	mpn\generic\perfsqr.c \
+	mpn\generic\pow_1.c \
+	mpn\generic\pre_divrem_1.c \
+	mpn\generic\pre_mod_1.c \
+	mpn\generic\random.c \
+	mpn\generic\random2.c \
+	mpn\generic\rootrem.c \
+	mpn\generic\sb_divrem_mn.c \
+	mpn\generic\scan0.c \
+	mpn\generic\scan1.c \
+	mpn\generic\set_str.c \
+	mpn\generic\sizeinbase.c \
+	mpn\generic\sqrtrem.c \
+	mpn\generic\sub.c \
+	mpn\generic\sub_1.c \
+	mpn\generic\tdiv_qr.c
+
+MPN_P4_ASM_SOURCES = \
+	mpn\x86i\umul.asm \
+	mpn\x86i\udiv.asm \
+	mpn\x86i\mod_1.asm \
+	mpn\x86i\divrem_1.asm \
+	mpn\x86i\pentium4\copyi.asm \
+	mpn\x86i\pentium4\copyd.asm \
+	mpn\x86i\pentium4\sse2\submul_1.asm \
+	mpn\x86i\pentium4\sse2\sub_n.asm \
+	mpn\x86i\pentium4\sse2\sqr_basecase.asm \
+	mpn\x86i\pentium4\sse2\mul_basecase.asm \
+	mpn\x86i\pentium4\sse2\mul_1.asm \
+	mpn\x86i\pentium4\sse2\mode1o.asm \
+	mpn\x86i\pentium4\sse2\mod_34lsub1.asm \
+	mpn\x86i\pentium4\sse2\diveby3.asm \
+	mpn\x86i\pentium4\sse2\dive_1.asm \
+	mpn\x86i\pentium4\sse2\addmul_1.asm \
+	mpn\x86i\pentium4\sse2\add_n.asm \
+	mpn\x86i\pentium4\mmx\rshift.asm \
+	mpn\x86i\pentium4\mmx\popham.asm \
+	mpn\x86i\pentium4\mmx\lshift.asm
+
+MPF_SOURCES = \
+    mpf\abs.c \
+    mpf\add.c \
+    mpf\add_ui.c \
+    mpf\ceilfloor.c \
+    mpf\clear.c \
+    mpf\cmp.c \
+    mpf\cmp_d.c \
+    mpf\cmp_si.c \
+    mpf\cmp_ui.c \
+    mpf\div.c \
+    mpf\div_2exp.c \
+    mpf\div_ui.c \
+    mpf\dump.c \
+    mpf\eq.c \
+    mpf\fits_sint.c \
+    mpf\fits_slong.c \
+    mpf\fits_sshort.c \
+    mpf\fits_uint.c \
+    mpf\fits_ulong.c \
+    mpf\fits_ushort.c \
+    mpf\get_d.c \
+    mpf\get_d_2exp.c \
+    mpf\get_dfl_prec.c \
+    mpf\get_prc.c \
+    mpf\get_si.c \
+    mpf\get_str.c \
+    mpf\get_ui.c \
+    mpf\init.c \
+    mpf\init2.c \
+    mpf\inp_str.c \
+    mpf\int_p.c \
+    mpf\iset.c \
+    mpf\iset_d.c \
+    mpf\iset_si.c \
+    mpf\iset_str.c \
+    mpf\iset_ui.c \
+    mpf\mul.c \
+    mpf\mul_2exp.c \
+    mpf\mul_ui.c \
+    mpf\neg.c \
+    mpf\out_str.c \
+    mpf\pow_ui.c \
+    mpf\random2.c \
+    mpf\reldiff.c \
+    mpf\set.c \
+    mpf\set_d.c \
+    mpf\set_dfl_prec.c \
+    mpf\set_prc.c \
+    mpf\set_prc_raw.c \
+    mpf\set_q.c \
+    mpf\set_si.c \
+    mpf\set_str.c \
+    mpf\set_ui.c \
+    mpf\set_z.c \
+    mpf\size.c \
+    mpf\sqrt.c \
+    mpf\sqrt_ui.c \
+    mpf\sub.c \
+    mpf\sub_ui.c \
+    mpf\swap.c \
+    mpf\trunc.c \
+    mpf\ui_div.c \
+    mpf\ui_sub.c \
+    mpf\urandomb.c
+
+MPQ_SOURCES = \
+    mpq\abs.c \
+    mpq\aors.c \
+    mpq\canonicalize.c \
+    mpq\clear.c \
+    mpq\cmp.c \
+    mpq\cmp_si.c \
+    mpq\cmp_ui.c \
+    mpq\div.c \
+    mpq\equal.c \
+    mpq\get_d.c \
+    mpq\get_den.c \
+    mpq\get_num.c \
+    mpq\get_str.c \
+    mpq\init.c \
+    mpq\inp_str.c \
+    mpq\inv.c \
+    mpq\md_2exp.c \
+    mpq\mul.c \
+    mpq\neg.c \
+    mpq\out_str.c \
+    mpq\set.c \
+    mpq\set_d.c \
+    mpq\set_den.c \
+    mpq\set_f.c \
+    mpq\set_num.c \
+    mpq\set_si.c \
+    mpq\set_str.c \
+    mpq\set_ui.c \
+    mpq\set_z.c \
+    mpq\swap.c
+
+MPZ_SOURCES = \
+    mpz\abs.c \
+    mpz\add.c \
+    mpz\add_ui.c \
+    mpz\and.c \
+    mpz\aorsmul.c \
+    mpz\aorsmul_i.c \
+    mpz\array_init.c \
+    mpz\bin_ui.c \
+    mpz\bin_uiui.c \
+    mpz\cdiv_q.c \
+    mpz\cdiv_q_ui.c \
+    mpz\cdiv_qr.c \
+    mpz\cdiv_qr_ui.c \
+    mpz\cdiv_r.c \
+    mpz\cdiv_r_ui.c \
+    mpz\cdiv_ui.c \
+    mpz\cfdiv_q_2exp.c \
+    mpz\cfdiv_r_2exp.c \
+    mpz\clear.c \
+    mpz\clrbit.c \
+    mpz\cmp.c \
+    mpz\cmp_d.c \
+    mpz\cmp_si.c \
+    mpz\cmp_ui.c \
+    mpz\cmpabs.c \
+    mpz\cmpabs_d.c \
+    mpz\cmpabs_ui.c \
+    mpz\com.c \
+    mpz\cong.c \
+    mpz\cong_2exp.c \
+    mpz\cong_ui.c \
+    mpz\dive_ui.c \
+    mpz\divegcd.c \
+    mpz\divexact.c \
+    mpz\divis.c \
+    mpz\divis_2exp.c \
+    mpz\divis_ui.c \
+    mpz\dump.c \
+    mpz\export.c \
+    mpz\fac_ui.c \
+    mpz\fdiv_q.c \
+    mpz\fdiv_q_ui.c \
+    mpz\fdiv_qr.c \
+    mpz\fdiv_qr_ui.c \
+    mpz\fdiv_r.c \
+    mpz\fdiv_r_ui.c \
+    mpz\fdiv_ui.c \
+    mpz\fib2_ui.c \
+    mpz\fib_ui.c \
+    mpz\fits_sint.c \
+    mpz\fits_slong.c \
+    mpz\fits_sshort.c \
+    mpz\fits_uint.c \
+    mpz\fits_ulong.c \
+    mpz\fits_ushort.c \
+    mpz\gcd.c \
+    mpz\gcd_ui.c \
+    mpz\gcdext.c \
+    mpz\get_d.c \
+    mpz\get_d_2exp.c \
+    mpz\get_si.c \
+    mpz\get_str.c \
+    mpz\get_ui.c \
+    mpz\getlimbn.c \
+    mpz\hamdist.c \
+    mpz\import.c \
+    mpz\init.c \
+    mpz\init2.c \
+    mpz\inp_raw.c \
+    mpz\inp_str.c \
+    mpz\invert.c \
+    mpz\ior.c \
+    mpz\iset.c \
+    mpz\iset_d.c \
+    mpz\iset_si.c \
+    mpz\iset_str.c \
+    mpz\iset_ui.c \
+    mpz\jacobi.c \
+    mpz\kronsz.c \
+    mpz\kronuz.c \
+    mpz\kronzs.c \
+    mpz\kronzu.c \
+    mpz\lcm.c \
+    mpz\lcm_ui.c \
+    mpz\lucnum2_ui.c \
+    mpz\lucnum_ui.c \
+    mpz\millerrabin.c \
+    mpz\mod.c \
+    mpz\mul.c \
+    mpz\mul_2exp.c \
+    mpz\mul_si.c \
+    mpz\mul_ui.c \
+    mpz\n_pow_ui.c \
+    mpz\neg.c \
+    mpz\nextprime.c \
+    mpz\out_raw.c \
+    mpz\out_str.c \
+    mpz\perfpow.c \
+    mpz\perfsqr.c \
+    mpz\popcount.c \
+    mpz\pow_ui.c \
+    mpz\powm.c \
+    mpz\powm_ui.c \
+    mpz\pprime_p.c \
+    mpz\random.c \
+    mpz\random2.c \
+    mpz\realloc.c \
+    mpz\realloc2.c \
+    mpz\remove.c \
+    mpz\root.c \
+    mpz\rrandomb.c \
+    mpz\scan0.c \
+    mpz\scan1.c \
+    mpz\set.c \
+    mpz\set_d.c \
+    mpz\set_f.c \
+    mpz\set_q.c \
+    mpz\set_si.c \
+    mpz\set_str.c \
+    mpz\set_ui.c \
+    mpz\setbit.c \
+    mpz\size.c \
+    mpz\sizeinbase.c \
+    mpz\sqrt.c \
+    mpz\sqrtrem.c \
+    mpz\sub.c \
+    mpz\sub_ui.c \
+    mpz\swap.c \
+    mpz\tdiv_q.c \
+    mpz\tdiv_q_2exp.c \
+    mpz\tdiv_q_ui.c \
+    mpz\tdiv_qr.c \
+    mpz\tdiv_qr_ui.c \
+    mpz\tdiv_r.c \
+    mpz\tdiv_r_2exp.c \
+    mpz\tdiv_r_ui.c \
+    mpz\tdiv_ui.c \
+    mpz\tstbit.c \
+    mpz\ui_pow_ui.c \
+    mpz\ui_sub.c \
+    mpz\urandomb.c \
+    mpz\urandomm.c \
+    mpz\xor.c \
+
+PRINTF_SOURCES = \
+    printf\asprintf.c \
+    printf\asprntffuns.c \
+    printf\doprnt.c \
+    printf\doprntf.c \
+    printf\doprnti.c \
+    printf\fprintf.c \
+    printf\obprintf.c \
+    printf\obprntffuns.c \
+    printf\obvprintf.c \
+    printf\printf.c \
+    printf\printffuns.c \
+    printf\repl-vsnprintf.c \
+    printf\snprintf.c \
+    printf\snprntffuns.c \
+    printf\sprintf.c \
+    printf\sprintffuns.c \
+    printf\vasprintf.c \
+    printf\vfprintf.c \
+    printf\vprintf.c \
+    printf\vsnprintf.c \
+    printf\vsprintf.c
+
+SCANF_SOURCES = \
+    scanf\doscan.c \
+    scanf\fscanf.c \
+    scanf\fscanffuns.c \
+    scanf\scanf.c \
+    scanf\sscanf.c \
+    scanf\sscanffuns.c \
+    scanf\vfscanf.c \
+    scanf\vscanf.c \
+    scanf\vsscanf.c
+
+GMP_SOURCES = \
+    ansi2knr.c \
+    assert.c \
+    compat.c \
+    errno.c \
+    extract-dbl.c \
+    insert-dbl.c \
+    memory.c \
+    mp_bpl.c \
+    mp_clz_tab.c \
+    mp_minv_tab.c \
+    mp_set_fns.c \
+    rand.c \
+    randclr.c \
+    randdef.c \
+    randlc.c \
+    randlc2s.c \
+    randlc2x.c \
+    randraw.c \
+    rands.c \
+    randsd.c \
+    randsdui.c \
+    version.c
+
+MPN_GC_OBJS = $(MPN_GC_SOURCES:.c=.obj)
+MPN_P0_OBJS = $(MPN_P0_ASM_SOURCES:.asm=.obj) $(MPN_P0_C_SOURCES:.c=.obj)
+MPN_P3_OBJS = $(MPN_P3_ASM_SOURCES:.asm=.obj) $(MPN_P3_C_SOURCES:.c=.obj)
+MPN_P4_OBJS = $(MPN_P4_ASM_SOURCES:.asm=.obj) $(MPN_P4_C_SOURCES:.c=.obj)
+MPF_OBJS = $(MPF_SOURCES:.c=.obj)
+MPQ_OBJS = $(MPQ_SOURCES:.c=.obj)
+MPZ_OBJS = $(MPZ_SOURCES:.c=.obj)
+PRINTF_OBJS = $(PRINTF_SOURCES:.c=.obj)
+SCANF_OBJS = $(SCANF_SOURCES:.c=.obj)
+GMP_OBJS = $(GMP_SOURCES:.c=.obj)
+
+GMP_ALL_OBJS = $(MPF_OBJS) $(MPQ_OBJS) $(MPZ_OBJS) \
+	       $(PRINTF_OBJS) $(SCANF_OBJS) $(GMP_OBJS)
+
+MPN_TYPE = gc
+
+all: gmp.lib
+
+mpn_gc.lib: msvc-build $(MPN_GC_OBJS)
+	link -lib /NOLOGO /OUT:$@ $(MPN_GC_OBJS)
+
+mpn_p0.lib: msvc-build $(MPN_P0_OBJS)
+	link -lib /NOLOGO /OUT:$@ $(MPN_P0_OBJS)
+
+mpn_p3.lib: msvc-build $(MPN_P3_OBJS)
+	link -lib /NOLOGO /OUT:$@ $(MPN_P3_OBJS)
+
+mpn_p4.lib: msvc-build $(MPN_P4_OBJS)
+	link -lib /NOLOGO /OUT:$@ $(MPN_P4_OBJS)
+
+gmp.lib: mpn_$(MPN_TYPE).lib $(GMP_ALL_OBJS)
+	link -lib /NOLOGO /OUT:$@ *.obj mpf\*.obj mpz\*.obj mpq\*.obj $(PRINTF_OBJS) $(SCANF_OBJS) mpn_$(MPN_TYPE).lib
+
+CFLAGS = /nologo /MD /W3 /GX /I "." /I $(srcdir) /I "$(srcdir)\mpn\generic" /D "WIN32" /D "NDEBUG" /D "_LIB" /D "_WIN32" /D "_MBCS"
+
+{$(srcdir)\mpn\generic}.c{mpn\generic}.obj:
+	cl -c $(CFLAGS) /Fo$@ $?
+{$(srcdir)\mpn}.c{mpn}.obj:
+	cl -c $(CFLAGS) /Fo$@ $?
+{$(srcdir)\mpf}.c{mpf}.obj:
+	cl -c $(CFLAGS) /Fo$@ $?
+{$(srcdir)\mpq}.c{mpq}.obj:
+	cl -c $(CFLAGS) /Fo$@ $?
+{$(srcdir)\mpz}.c{mpz}.obj:
+	cl -c $(CFLAGS) /Fo$@ $?
+{$(srcdir)\printf}.c{printf}.obj:
+	cl -c $(CFLAGS) /Fo$@ $?
+{$(srcdir)\scanf}.c{scanf}.obj:
+	cl -c $(CFLAGS) /Fo$@ $?
+{$(srcdir)}.c{}.obj:
+	cl -c $(CFLAGS) /Fo$@ $?
+
+.asm.obj:
+	nasm -O9 -Xvc -f win32 -i $(@D)\ -o $@ $?
+
+msvc-build: config-vc6.$(MPN_TYPE) gmp.h.vc6
+	copy config-vc6.$(MPN_TYPE) config.h
+	copy gmp.h.vc6 gmp.h
+	for %d in ($(AUTO_SUBDIRS)) do \
+	  if not exist %d mkdir %d
+	echo > $@
+
+clean:
+	-erase mpn\generic\*.obj
+	-erase mpn\*.obj
+	-erase mpf\*.obj
+	-erase mpq\*.obj
+	-erase mpz\*.obj
+	-erase printf\*.obj
+	-erase scanf\*.obj
+	-erase *.obj
+	-erase mpn_*.lib
+	-erase gmp.lib
+	-for %o in ($(MPN_P0_ASM_SOURCES:.asm=.obj)) do erase %o
+	-for %o in ($(MPN_P3_ASM_SOURCES:.asm=.obj)) do erase %o
+	-for %o in ($(MPN_P4_ASM_SOURCES:.asm=.obj)) do erase %o
+	-for %d in ($(AUTO_SUBDIRS)) do rmdir /S /Q %d
+	-erase config.h
+	-erase gmp.h
+	-erase msvc-build
src/doc/news.in.html to src/util/ecl.nsi1
--- a/src/doc/news.in.html
+++ b/src/util/ecl.nsi1
@@ -1,31 +1,54 @@
-<h2>News in this release (ECL-@VERSION@)</h2>
-<pre>
--------
-</pre>
-
-<h2>Known bugs</h2>
-
-As I mentioned above, the problem I am finding here is the lack of test suites
-which I can use to detect failures in the behavior of any function. Currently I
-can assure that <a href="http://ecls.sourceforge.net">ECL</a> passes most of
-the tests from the <a href="http://clocc.sourceforge.net">the CLOCC suite</a>.
-The most important exceptions are
-<ul>
-<li>CLOS
-<li>#'format
-<li>#'unread-char is too lax
-<li>Support for logical pathnames is incomplete
-<li>No support for (SETF (VALUES ...) ...)
-</ul>
-
-If you find something that should be fixed or that the behavior of a
-function is particularly misleading with respect to the standards, feel free
-to tell me so.
-
-Some other bugs which need to be fixed are:
-<ul>
-<li>Threads were broken with latest improvements.
-<li>#'format doesn't pass the Cltl-1 tests.
-<li>Support for CLOS needs yet more optimization.
-<li>ECL has its own pretty-printer, which does not conform ANSI.
-</ul>
+; Script generated by the HM NIS Edit Script Wizard.
+
+; HM NIS Edit Wizard helper defines
+!define PRODUCT_NAME "ECL"
+!define PRODUCT_VERSION "0.9d"
+!define PRODUCT_PUBLISHER "Juan Jose Garcia Ripoll"
+!define PRODUCT_WEB_SITE "http://ecls.sourceforge.net"
+!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\ecl.exe"
+!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
+!define PRODUCT_UNINST_ROOT_KEY "HKLM"
+!define ECLDIR "@ECLDIR@"
+
+; MUI 1.67 compatible ------
+!include "MUI.nsh"
+
+; MUI Settings
+!define MUI_ABORTWARNING
+!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
+!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
+
+; Welcome page
+!insertmacro MUI_PAGE_WELCOME
+; License page
+!insertmacro MUI_PAGE_LICENSE "${ECLDIR}\doc\Copyright"
+; Directory page
+!insertmacro MUI_PAGE_DIRECTORY
+; Instfiles page
+!insertmacro MUI_PAGE_INSTFILES
+; Finish page
+!define MUI_FINISHPAGE_RUN "$INSTDIR\ecl.exe"
+!insertmacro MUI_PAGE_FINISH
+
+; Uninstaller pages
+!insertmacro MUI_UNPAGE_INSTFILES
+
+; Language files
+!insertmacro MUI_LANGUAGE "English"
+
+; MUI end ------
+
+Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
+OutFile "Setup.exe"
+InstallDir "$PROGRAMFILES\ECL"
+InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
+ShowInstDetails show
+ShowUnInstDetails show
+
+Section "Hauptgruppe" SEC01
+  SetOutPath "$INSTDIR"
+  SetOverwrite ifnewer
+  File "${ECLDIR}\ecl.exe"
+  CreateDirectory "$SMPROGRAMS\ECL"
+  CreateShortCut "$SMPROGRAMS\ECL\ECL.lnk" "$INSTDIR\ecl.exe"
+  CreateShortCut "$DESKTOP\ECL.lnk" "$INSTDIR\ecl.exe"