Update of /cvsroot/maxima/maxima/src In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv13479/src Modified Files: Makefile.am clmacs.lisp command-line.lisp compar.lisp conjugate.lisp displa.lisp float.lisp generr.lisp grind.lisp limit.lisp lmdcls.lisp macsys.lisp maxima-build.lisp maxima.asd maxima.bat.in maxima.in maxima.system mopers.lisp nparse.lisp nset.lisp nummod.lisp plot.lisp rat3c.lisp runtim.lisp server.lisp simp.lisp suprv1.lisp sys-proclaim.lisp trdata.lisp utils.lisp Added Files: ecl-depends.mk ecl-port.lisp Log Message: Merge patches-for-ecl-branch into main trunk. With these changes, Maxima builds without errors with Clisp, CMUCL, SBCL, and GCL, and run_testsuite does not appear to report any errors that are not reported otherwise. Not yet tested with ECL. Index: Makefile.am =================================================================== RCS file: /cvsroot/maxima/maxima/src/Makefile.am,v retrieving revision 1.68 retrieving revision 1.69 diff -u -d -r1.68 -r1.69 --- Makefile.am 17 Feb 2008 03:55:27 -0000 1.68 +++ Makefile.am 27 Jul 2008 07:04:04 -0000 1.69 @@ -264,6 +264,36 @@ include openmcl-depends.mk endif +if ECL +EXECUTEECL = $(ECL_NAME) -eval +all-local: binary-ecl/maxima.image +install-exec-local: install-ecl +uninstall-hook: uninstall-ecl +clean: clean-ecl +distclean: clean-ecl + +ecl:binary-ecl/maxima.image + +# ECL EQUIVALENT ?? !! $(EXECUTEECL) '(progn $(LOADDEFSYSTEM) $(DEFSYSTEMLOAD) (ccl:save-application "binary-ecl/maxima.image" :toplevel-function (function cl-user::run)) (ccl::quit))' +binary-ecl/maxima.image: + $(EXECUTEECL) '(progn $(LOADDEFSYSTEM) $(DEFSYSTEMCOMPILE) (si::quit))' + touch binary-ecl/maxima-image + +install-ecl: + $(mkinstalldirs) "$(DESTDIR)$(verpkglibdir)/binary-ecl" + $(INSTALL_DATA) binary-ecl/maxima.image "$(DESTDIR)$(verpkglibdir)/binary-ecl/maxima.image" + +uninstall-ecl: + rm -f "$(DESTDIR)$(verpkglibdir)/binary-ecl/maxima.image" + +clean-ecl: + rm -rf binary-ecl +ecl-depends.mk: maxima.system + test -d binary-ecl || mkdir binary-ecl + $(EXECUTEECL) '(progn $(LOADDEFSYSTEM) $(LOADMAKEDEPENDS) (funcall (intern "CREATE-DEPENDENCY-FILE" :mk) "binary-ecl/maxima.image" "ecl-depends.mk"))' +include ecl-depends.mk +endif + echo_%: @echo "$(subst echo_,,$@)=$($(subst echo_,,$@))" @echo "origin $(subst echo_,,$@) returns $(origin $(subst echo_,,$@))" @@ -571,4 +601,4 @@ genericdirDATA = $(real_lisp_sources) autoconf-variables.lisp -EXTRA_DIST = $(real_lisp_sources) maxima.system clisp-depends.mk cmucl-depends.mk scl-depends.mk gcl-depends.mk acl-depends.mk openmcl-depends.mk sbcl-depends.mk numerical/slatec/fortran maxima-build.lisp maxima-command.ico set_lang.vbs +EXTRA_DIST = $(real_lisp_sources) maxima.system clisp-depends.mk cmucl-depends.mk scl-depends.mk gcl-depends.mk acl-depends.mk openmcl-depends.mk ecl-depends.mk sbcl-depends.mk numerical/slatec/fortran maxima-build.lisp maxima-command.ico set_lang.vbs Index: clmacs.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/clmacs.lisp,v retrieving revision 1.40 retrieving revision 1.41 diff -u -d -r1.40 -r1.41 --- clmacs.lisp 21 Jun 2008 19:50:47 -0000 1.40 +++ clmacs.lisp 27 Jul 2008 07:04:05 -0000 1.41 @@ -13,14 +13,15 @@ (eval-when #+gcl (compile load) - #-gcl (:compile-toplevel :load-toplevel) + #+ecl (compile load eval) + #-(or gcl ecl) (:compile-toplevel :load-toplevel) ;;this will make operators which ;;declare the type and result of numerical operations - (defmacro def-op (name type op &optional return-type) + (defmacro def-op (name arg-type op &optional return-type) `(setf (macro-function ',name) - (make-operation ',type ',op ',return-type))) + (make-operation ',arg-type ',op ',return-type))) ;;make very sure .type .op and .return are not special!! (defun make-operation (.type .op .return) @@ -50,9 +51,9 @@ (when *dbreak* (break "hi")))) - (defmacro def-op (name type old) + (defmacro def-op (name arg-type old) `(defmacro ,name (&rest l) - `(progn (chk-type (list ,@l) ',',name ',',type ',l) + `(progn (chk-type (list ,@l) ',',name ',',arg-type ',l) (,',old ,@l))))) (def-op f+ fixnum +) @@ -225,8 +226,8 @@ (aref curs 4) (aref curs 5)) val))) ;; set the index (`cursor') for the next call to ASET-BY-CURSOR (loop for j downfrom (aref curs 0) - do (cond ((< (aref curs j) (aref curs (f+ 5 j))) - (setf (aref curs j) (f+ (aref curs j) 1)) + do (cond ((< (aref curs j) (aref curs (+ 5 j))) + (setf (aref curs j) (+ (aref curs j) 1)) (return-from aset-by-cursor t)) (t (setf (aref curs j) 0))) (cond ((eql j 0) (return-from aset-by-cursor nil)))))) Index: command-line.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/command-line.lisp,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- command-line.lisp 10 Jul 2008 03:27:31 -0000 1.7 +++ command-line.lisp 27 Jul 2008 07:04:05 -0000 1.8 @@ -109,6 +109,11 @@ (defun get-application-args () #+clisp (rest ext:*args*) + #+ecl (let ((result (loop for k below (si:argc) + collect (si:argv k)))) + (do ((removed-arg nil (pop result))) + ((or (equal removed-arg "--") (equal nil result)) result))) + #+cmu (let ((result lisp::lisp-command-line-list)) (do ((removed-arg nil (pop result))) ((or (equal removed-arg "--") (equal nil result)) result))) Index: compar.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/compar.lisp,v retrieving revision 1.37 retrieving revision 1.38 diff -u -d -r1.37 -r1.38 --- compar.lisp 26 Jul 2008 20:24:48 -0000 1.37 +++ compar.lisp 27 Jul 2008 07:04:06 -0000 1.38 @@ -1902,8 +1902,8 @@ ;; %initiallearnflag is only necessary so that %PI, %E, etc. can be LEARNed. (eval-when - #+gcl (load) - #-gcl (:load-toplevel) + #+gcl (load eval) + #-gcl (:load-toplevel :execute) (setq %initiallearnflag t) Index: conjugate.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/conjugate.lisp,v retrieving revision 1.15 retrieving revision 1.16 diff -u -d -r1.15 -r1.16 --- conjugate.lisp 5 Feb 2008 11:21:14 -0000 1.15 +++ conjugate.lisp 27 Jul 2008 07:04:06 -0000 1.16 @@ -19,8 +19,8 @@ (defprop $conjugate simp-conjugate operators) (eval-when - #+gcl (compile load eval) - #-gcl (:compile-toplevel :load-toplevel :execute) + #+gcl (load eval) + #-gcl (:load-toplevel :execute) (let (($context '$global) (context '$global)) (meval '(($declare) $conjugate $complex)))) Index: displa.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/displa.lisp,v retrieving revision 1.41 retrieving revision 1.42 diff -u -d -r1.41 -r1.42 --- displa.lisp 14 Apr 2008 03:00:49 -0000 1.41 +++ displa.lisp 27 Jul 2008 07:04:07 -0000 1.42 @@ -1176,7 +1176,9 @@ (if (or (null bkpt) (eq result bkpt)) (merror "Expression is too wide to be displayed.")) (do ((l result (cdr l))) - ((eq bkpt (cdr l)) (rplacd l nil)) + ;; THE NEED FOR EQUAL HERE IS PROBABLY THE SYMPTOM OF A BUG IN ECL !! + ;; PROBABLY RELATED TO SIDE-EFFECTS OF NRECONC, RPLACD, ETC !! + ((#+ecl equal #-ecl eq bkpt (cdr l)) (rplacd l nil)) (if (null l) (merror "`checkbreak' not found in `display'"))) (output bkpt 0) Index: float.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/float.lisp,v retrieving revision 1.40 retrieving revision 1.41 diff -u -d -r1.40 -r1.41 --- float.lisp 26 Jul 2008 17:30:22 -0000 1.40 +++ float.lisp 27 Jul 2008 07:04:08 -0000 1.41 @@ -306,17 +306,17 @@ (let ((precision (caddar l)) (mantissa (cadr l)) (exponent (caddr l)) - (fpprec #.machine-mantissa-precision) + (fpprec machine-mantissa-precision) (*m 0)) ;;Round the mantissa to the number of bits of precision of the machine, ;;and then convert it to a floating point fraction. - (setq mantissa (quotient (fpround mantissa) #.(expt 2.0 machine-mantissa-precision))) + (setq mantissa (quotient (fpround mantissa) (expt 2.0 machine-mantissa-precision))) ;; Multiply the mantissa by the exponent portion. I'm not sure ;; why the exponent computation is so complicated. Using ;; scale-float will prevent possible overflow unless the result ;; really would. (setq precision - (errset (scale-float mantissa (+ exponent (- precision) *m #.machine-mantissa-precision)) + (errset (scale-float mantissa (+ exponent (- precision) *m machine-mantissa-precision)) nil)) (if precision (car precision) @@ -328,7 +328,7 @@ ;; 7.45E-9) - JPG (defun fixfloat (x) - (let (($ratepsilon #.(expt 2.0 (- machine-mantissa-precision)))) + (let (($ratepsilon (expt 2.0 (- machine-mantissa-precision)))) (maxima-rationalize x))) ;; Takes a flonum arg and returns a rational number corresponding to the flonum @@ -1703,6 +1703,6 @@ (bcons (fproot x 2)))))) (eval-when - #+gcl (load) - #-gcl (:load-toplevel) + #+gcl (load eval) + #-gcl (:load-toplevel :execute) (fpprec1 nil $fpprec)) ; Set up user's precision Index: generr.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/generr.lisp,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- generr.lisp 7 Nov 2005 17:37:11 -0000 1.10 +++ generr.lisp 27 Jul 2008 07:04:09 -0000 1.11 @@ -7,10 +7,19 @@ ;;(let ((errset nil)) (errset (+ 2 'a))) ;==> nil ;;(let ((errset nil)) (errset (+ 2 3))) ;==> (5) +#-ecldebug (defmacro errset (&rest l) `(handler-case (list ,(car l)) (error (e) (when errset (error e))))) +#+ecldebug +(defmacro errset (&rest l) + `(handler-case (list ,(car l)) + (error (e) + (format *error-output* "~S~%~A~%" (type-of e) e) + (when errset + (let ((*debugger-hook* nil)) (si::default-debugger e)))))) + ;;a generic one if you have no error handling ;;at all, that caught no errors but at least ;;returned a list in the normal case would be Index: grind.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/grind.lisp,v retrieving revision 1.35 retrieving revision 1.36 diff -u -d -r1.35 -r1.36 --- grind.lisp 5 Apr 2008 08:36:13 -0000 1.35 +++ grind.lisp 27 Jul 2008 07:04:09 -0000 1.36 @@ -139,7 +139,7 @@ (msize-paren x l r)) ((member 'array (cdar x) :test #'eq) (msize-array x l r)) ((safe-get (caar x) 'grind) - (the (values t) (funcall (get (caar x) 'grind) x l r))) + (the #-ecl (values t) #+ecl t (funcall (get (caar x) 'grind) x l r))) (t (msize-function x l r nil)))) (defun msize-atom (x l r) Index: limit.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/limit.lisp,v retrieving revision 1.53 retrieving revision 1.54 diff -u -d -r1.53 -r1.54 --- limit.lisp 23 Mar 2008 15:45:29 -0000 1.53 +++ limit.lisp 27 Jul 2008 07:04:09 -0000 1.54 @@ -89,6 +89,11 @@ (let ((exp (cons '(%limit) (list e var val)))) (assolike exp limit-answers))) +#+ecl +(eval-when (compile load) + (when (si:specialp 'ans) + (error "ANS variable is special"))) + (defmacro limit-catch (exp var val) `(let ((errorsw t)) (let ((ans (catch 'errorsw Index: lmdcls.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/lmdcls.lisp,v retrieving revision 1.27 retrieving revision 1.28 diff -u -d -r1.27 -r1.28 --- lmdcls.lisp 17 Feb 2008 03:55:27 -0000 1.27 +++ lmdcls.lisp 27 Jul 2008 07:04:10 -0000 1.28 @@ -32,11 +32,11 @@ when (eql (car v) 'unspecial) collect `(progn ,@(loop for w in (cdr v) - collect #-(or gcl scl cmu) + collect #-(or gcl scl cmu ecl) `(remprop ',w #-excl 'special #+excl 'excl::.globally-special.) - #+(or gcl scl cmu) + #+(or gcl scl cmu ecl) `(make-unspecial ',w))) else collect `(proclaim ',v)))) Index: macsys.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/macsys.lisp,v retrieving revision 1.68 retrieving revision 1.69 diff -u -d -r1.68 -r1.69 --- macsys.lisp 10 Jul 2008 03:27:31 -0000 1.68 +++ macsys.lisp 27 Jul 2008 07:04:10 -0000 1.69 @@ -492,9 +492,10 @@ (defun $system (&rest args) ;; If XMaxima is running, direct output from command into *SOCKET-CONNECTION*. - ;; From what I can tell, GCL and Clisp cannot redirect the output into a stream. Oh well. + ;; From what I can tell, GCL, ECL, and Clisp cannot redirect the output into an existing stream. Oh well. (let ((s (and (boundp '*socket-connection*) *socket-connection*))) #+gcl (lisp:system (apply '$sconcat args)) + #+ecl (si:system (apply '$concat args)) #+clisp (ext:run-shell-command (apply '$sconcat args)) #+(or cmu scl) (ext:run-program "/bin/sh" (list "-c" (apply '$sconcat args)) :output (or s t)) #+allegro (excl:run-shell-command (apply '$sconcat args) :wait t :output (or s nil)) Index: maxima-build.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/maxima-build.lisp,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- maxima-build.lisp 10 Jul 2008 03:27:31 -0000 1.5 +++ maxima-build.lisp 27 Jul 2008 07:04:10 -0000 1.6 @@ -1,4 +1,14 @@ (load "../lisp-utils/defsystem.lisp") +#+ecl (load "maxima-package.lisp") +#+ecl +(compile 'maxima::make-unspecial + '(lambda (s) + (when (symbolp s) + (format t "~%;;; Declaring ~A as NOT SPECIAL" s) + (ffi::c-inline (s) (:object) :object + "((#0)->symbol.stype = stp_ordinary, #0)" + :one-liner t)))) + (defun maxima-compile () (mk:oos "maxima" :compile)) (defun maxima-load () Index: maxima.asd =================================================================== RCS file: /cvsroot/maxima/maxima/src/maxima.asd,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- maxima.asd 17 Feb 2008 03:55:27 -0000 1.2 +++ maxima.asd 27 Jul 2008 07:04:10 -0000 1.3 @@ -20,9 +20,11 @@ :description "Maxima is a symbolic computation program." :licence "GPL" :version "5.10" + :serial t :components ( (:module package :pathname "" :components (#-gcl(:file "maxima-package") + (:file "ecl-port") (:file "autoconf-variables" :depends-on ("maxima-package")))) (:module info :pathname "" :components ((:file "nregex") @@ -90,6 +92,7 @@ ((:file "f2cl-package") (:file "slatec"))) (:module f2cl-lib :pathname "" + :depends-on (packages) :components ((:file "f2cl-lib"))) (:module slatec :depends-on (f2cl-lib packages) @@ -378,6 +381,151 @@ (:file "nalgfa") (:file "ufact") (:file "result"))) + (:module ifactor :pathname "" + :components ((:file "ifactor"))) + + (:module rational-functions :pathname "" + :components ((:file "rat3a") + (:file "rat3b") + (:file "rat3d") + (:file "numth") + (:file "rat3c") + (:file "rat3e") + (:file "nrat4") + (:file "ratout"))) + + (:module maxima-language-compiler-macros :pathname "" + :components ((:file "transm"))) + (:module maxima-language-compiler :pathname "" + :components ((:file "transl") + (:file "transs") + (:file "trans1") + (:file "trans2") + (:file "trans3") + (:file "trans4") + (:file "trans5") + (:file "transf") + (:file "troper") + (:file "trutil") + (:file "trmode") + (:file "trdata") + (:file "trpred") + (:file "transq") + (:file "acall") + (:file "fcall") + (:file "evalw") + (:file "trprop") + (:file "mdefun")) + :depends-on (maxima-language-compiler-macros)) + + (:module trigonometry :pathname "" + :components ((:file "trigi") + (:file "trigo") + (:file "trgred"))) + + (:module numerical-functions :pathname "" + :depends-on (trigonometry) + :components ((:file "bessel") + ;;#+gcl(:file "parse-body") + (:file "ellipt") + (:file "airy" + :depends-on ("ellipt")) + (:file "intpol"))) + + (:module reader :pathname "" + :depends-on (compatibility-macros) + :components ((:file "nparse"))) + + (:module display :pathname "" + :components ((:file "displa") + (:file "nforma") + (:file "ldisp") + (:file "grind"))) + + (:module gcd :pathname "" + :components ((:file "spgcd") + (:file "ezgcd"))) + (:module documentation :pathname "" + :components ((:file "option") + (:file "macdes"))) + (:module algebraic-database :pathname "" + :components ((:file "inmis") + (:file "db") + (:file "compar") + (:file "askp"))) ;does this belong here? + (:module integration :pathname "" + :components ((:file "sinint") + (:file "sin") + (:file "risch"))) + (:module taylor-series :pathname "" + :depends-on (rat-macros) + :components ((:file "hayat"))) + (:module definite-integration :pathname "" + :components ((:file "defint") + (:file "residu"))) + (:module special-functions :pathname "" + :components ((:file "specfn"))) + (:module matrix-algebra :pathname "" + :components ((:file "mat") + (:file "matrix"))) + (:module determinants :pathname "" + :components ((:file "sprdet") + (:file "newinv") + (:file "newdet"))) + (:module pattern-matching :pathname "" + :components ((:file "schatc") + (:file "matcom") + (:file "matrun") + (:file "nisimp"))) + (:module limits :pathname "" + :components ((:file "tlimit") + (:file "limit"))) + (:module solve :pathname "" + :components ((:file "solve") + (:file "psolve") + (:file "algsys") + (:file "polyrz") + (:file "cpoly"))) + (:module debugging :pathname "" + :components ((:file "mtrace") + (:file "mdebug"))) + (:module miscellaneous :pathname "" + :components ((:file "scs") + (:file "asum") + (:file "fortra") + (:file "optim") + (:file "marray") + (:file "mdot") + (:file "irinte") + (:file "series") + (:file "laplac") + (:file "pade") + (:file "homog") + (:file "combin") + (:file "nset") + (:file "rand-mt19937") + (:file "maxmin") + (:file "nummod") + (:file "conjugate") + (:file "mstuff"))) + (:module poisson-series :pathname "" + :components ((:file "ratpoi") + (:file "pois2") + (:file "pois3"))) + (:module translated-packages :pathname "" + :depends-on ("maxima-language-compiler-macros") + :components + ((:file "desoln") + (:file "elim") + (:file "invert") + (:file "hypgeo") + (:file "hyp") + (:file "todd-coxeter") + (:file "mactex") + (:file "plot"))) + (:module graphics-drivers :pathname "" + :components ((:file "gnuplot") + (:file "openmath"))) (:module final :pathname "" ;; These are not compiled, for whatever reason Index: maxima.bat.in =================================================================== RCS file: /cvsroot/maxima/maxima/src/maxima.bat.in,v retrieving revision 1.18 retrieving revision 1.19 diff -u -d -r1.18 -r1.19 --- maxima.bat.in 10 Jun 2007 11:57:12 -0000 1.18 +++ maxima.bat.in 27 Jul 2008 07:04:10 -0000 1.19 @@ -95,6 +95,7 @@ if "%verbose%" == "true" @echo on if "%lisp%" == "gcl" goto dogcl if "%lisp%" == "clisp" goto doclisp +if "%lisp%" == "ecl" goto doecl @echo Maxima error: lisp %lisp% not known. goto end @@ -112,6 +113,10 @@ %maxima_imagesdir%\binary-clisp\lisp.exe -q -M %maxima_image_base%.mem "" -- %arg1% %arg2% %arg3% %arg4% %arg5% %arg6% %arg7% %arg8% %arg9% goto end +:doecl +ecl -load %maxima_image_base%.fas -eval "(user::run)" -- "%arg1%" "%arg2%" "%arg3%" "%arg4%" "%arg5%" "%arg6%" "%arg7%" "%arg8%" "%arg9%" +goto end + :end Index: maxima.in =================================================================== RCS file: /cvsroot/maxima/maxima/src/maxima.in,v retrieving revision 1.24 retrieving revision 1.25 diff -u -d -r1.24 -r1.25 --- maxima.in 31 Jul 2006 02:25:52 -0000 1.24 +++ maxima.in 27 Jul 2008 07:04:10 -0000 1.25 @@ -137,6 +137,10 @@ # FIXME: arguments need in a manner consistent with the way they are extracted # in the function get-application-args in command-line.lisp exec "@OPENMCL_NAME@" -I "$maxima_image_base.image" "$arg1" "$arg2" "$arg3" "$arg4" "$arg5" "$arg6" "$arg7" "$arg8" "$arg9" +elif [ "$MAXIMA_LISP" = "ecl" ]; then +# FIXME: arguments need in a manner consistent with the way they are extracted +# in the function get-application-args in command-line.lisp + exec "@ECL_NAME@" -I "$maxima_image_base.image" "$arg1" "$arg2" "$arg3" "$arg4" "$arg5" "$arg6" "$arg7" "$arg8" "$arg9" elif [ "$MAXIMA_LISP" = "sbcl" ]; then exec "@SBCL_NAME@" --core "$maxima_image_base.core" --noinform --end-runtime-options --eval '(cl-user::run)' --end-toplevel-options "$arg1" "$arg2" "$arg3" "$arg4" "$arg5" "$arg6" "$arg7" "$arg8" "$arg9" else Index: maxima.system =================================================================== RCS file: /cvsroot/maxima/maxima/src/maxima.system,v retrieving revision 1.61 retrieving revision 1.62 diff -u -d -r1.61 -r1.62 --- maxima.system 10 Jul 2008 03:27:31 -0000 1.61 +++ maxima.system 27 Jul 2008 07:04:10 -0000 1.62 @@ -28,6 +28,29 @@ (export '*maxima-build-time*) +#+ecl +(defun do-compile-ecl (&rest args) + (let ((c::*cc-flags* (concatenate 'string "-I. " c::*cc-flags*)) + (c::*cc-optimize* "")) + (apply #'compile-file args))) + +#+ecl +(defun build-maxima-lib () + (labels ((list-all-objects (module) + (if (eql (mk::component-type module) :file) + (list (mk::component-full-pathname module :binary)) + (apply #'append (mapcar #'list-all-objects (mk::component-components module)))))) + #+msvc + (progn + (c::build-static-library "binary-ecl/maxima-lib" :lisp-files (print (list-all-objects (mk:find-system 'maxima)))) + (let ((c::*ld-format* (concatenate 'string c::*ld-format* " /LIBPATH:binary-ecl"))) + (c::build-fasl "binary-ecl/maxima" :lisp-files '(maxima-lib)))) + #+cygwin + (c::build-fasl "binary-ecl/maxima" :lisp-files (list-all-objects (mk:find-system 'maxima))) + #-(or cygwin msvc) + (c::build-fasl "binary-ecl/maxima" :lisp-files (list-all-objects (mk:find-system 'maxima))) + )) + (mk:defsystem "maxima" :source-extension "lisp" :binary-pathname #+clisp "binary-clisp" @@ -47,7 +70,11 @@ #+lispworks (make-pathname :name "binary-lispworks" :directory (pathname-directory *load-truename*)) - #-(or clisp cmu scl sbcl gcl allegro openmcl abcl lispworks) "binary-unknownlisp" + #+ecl "binary-ecl" + #-(or clisp cmu scl sbcl gcl allegro openmcl abcl lispworks ecl) "binary-unknownlisp" + #+ecl :compiler-options #+ecl (:system-p t :c-file t :data-file t) + #+ecl :compiler #+ecl do-compile-ecl + #+ecl :finally-do #+ecl (build-maxima-lib) :components (#+gcl (:module proclaim :source-pathname "" :load-only t @@ -59,7 +86,7 @@ #+gcl-working-proclaims (:file "sys-proclaim"))) (:module package :source-pathname "" - :load-only t + #-ecl :load-only #-ecl t :components (#-gcl(:file "maxima-package") (:file "autoconf-variables"))) (:module info :source-pathname "" @@ -552,7 +579,7 @@ (:file "openmath"))) (:module final :source-pathname "" ;; These are not compiled, for whatever reason - :load-only t + #-ecl :load-only #-ecl t :components ((:file "autol") (:file "max_ext") (:file "init-cl"))))) Index: mopers.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/mopers.lisp,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- mopers.lisp 24 Mar 2007 12:53:22 -0000 1.6 +++ mopers.lisp 27 Jul 2008 07:04:10 -0000 1.7 @@ -41,10 +41,16 @@ (defopt add (&rest terms) (cond ((= (length terms) 2) `(add2 . ,terms)) (t `(addn (list . ,terms) t)))) +(defun add (&rest terms) + (cond ((= (length terms) 2) (apply #'add2 terms)) + (t (apply #'addn `(,terms t))))) (defopt add* (&rest terms) (cond ((= (length terms) 2) `(add2* . ,terms)) (t `(addn (list . ,terms) nil)))) +(defun add* (&rest terms) + (cond ((= (length terms) 2) (apply #'add2* terms)) + (t (apply #'addn `(,terms nil))))) ;; Multiplication -- call MUL or NCMUL with simplified operands; MUL* or NCMUL* ;; with unsimplified operands. @@ -53,10 +59,17 @@ (cond ((= (length factors) 2) `(mul2 . ,factors)) ((= (length factors) 3) `(mul3 . ,factors)) (t `(muln (list . ,factors) t)))) +(defun mul (&rest factors) + (cond ((= (length factors) 2) (apply #'mul2 factors)) + ((= (length factors) 3) (apply #'mul3 factors)) + (t (apply #'muln `(,factors t))))) (defopt mul* (&rest factors) (cond ((= (length factors) 2) `(mul2* . ,factors)) (t `(muln (list . ,factors) nil)))) +(defun mul* (&rest factors) + (cond ((= (length factors) 2) (apply #'mul2* factors)) + (t (apply #'muln `(,factors nil))))) ;; the rest here can't be DEFOPT's because there aren't interpreted versions yet. @@ -101,6 +114,7 @@ ;; assumption that calls are more expensive than the additional memory. (defopt simplify (x) `(simplifya ,x nil)) +(defun simplify (x) (simplifya x nil)) ;; A hand-made DEFSTRUCT for dealing with the Macsyma MDO structure. ;; Used in GRAM, etc. for storing/retrieving from DO structures. Index: nparse.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/nparse.lisp,v retrieving revision 1.50 retrieving revision 1.51 diff -u -d -r1.50 -r1.51 --- nparse.lisp 21 Jun 2008 21:15:12 -0000 1.50 +++ nparse.lisp 27 Jul 2008 07:04:11 -0000 1.51 @@ -14,7 +14,7 @@ (load-macsyma-macros defcal mopers) -(defmvar *alphabet* '(#\_ #\%)) +(defmvar *alphabet* (list #\_ #\%)) (defmfun alphabetp (n) (and (characterp n) Index: nset.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/nset.lisp,v retrieving revision 1.26 retrieving revision 1.27 diff -u -d -r1.26 -r1.27 --- nset.lisp 1 Jul 2008 11:08:27 -0000 1.26 +++ nset.lisp 27 Jul 2008 07:04:12 -0000 1.27 @@ -33,8 +33,8 @@ ;; regularization of package use within Maxima.) (eval-when - #+gcl (compile load eval) - #-gcl (:compile-toplevel :load-toplevel :execute) + #+gcl (load eval) + #-gcl (:load-toplevel :execute) ;; matchfix ("{", "}") (meval '(($matchfix) "{" "}")) ;; "{" ([L]) ::= buildq ([L], set (splice (L))); @@ -682,21 +682,21 @@ ;; (2) p1, p2 in P and p1 # p2 implies p1 and p2 are disjoint, ;; (3) union(x | x in P) = S. ;; Thus set() is a partition of set(). - -(defun $set_partitions (a &optional n) + +(defun $set_partitions (a &optional n-sub) (setq a (require-set a "$set_partitions")) - (cond ((and (integerp n) (> n -1)) - `(($set) ,@(set-partitions a n))) - ((null n) - (setq n (length a)) + (cond ((and (integerp n-sub) (> n-sub -1)) + `(($set) ,@(set-partitions a n-sub))) + ((null n-sub) + (setq n-sub (length a)) (let ((acc (set-partitions a 0)) (k 1)) - (while (<= k n) + (while (<= k n-sub) (setq acc (append acc (set-partitions a k))) (incf k)) `(($set) ,@acc))) (t (merror "The optional second argument to set_partitions must be -a positive integer; instead found ~:M" n)))) +a positive integer; instead found ~:M" n-sub)))) (defun set-partitions (a n) (cond ((= n 0) @@ -860,8 +860,8 @@ (defprop $kron_delta simp-kron-delta operators) (eval-when - #+gcl (compile load eval) - #-gcl (:compile-toplevel :load-toplevel :execute) + #+gcl (load eval) + #-gcl (:load-toplevel :execute) ;; (kind '$kron_delta '$symmetric)) <-- This doesn't work. Why? ;; Put new fact in global context; ;; otherwise it goes in initial context, which is meant for the user. Index: nummod.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/nummod.lisp,v retrieving revision 1.21 retrieving revision 1.22 diff -u -d -r1.21 -r1.22 --- nummod.lisp 5 Apr 2008 10:04:29 -0000 1.21 +++ nummod.lisp 27 Jul 2008 07:04:12 -0000 1.22 @@ -30,7 +30,7 @@ ;; Let's have version numbers 1,2,3,... -(eval-when (:compile-toplevel :load-toplevel :execute) +(eval-when (:load-toplevel :execute) (mfuncall '$declare '$integervalued '$feature) ($put '$nummod 3 '$version)) Index: plot.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/plot.lisp,v retrieving revision 1.127 retrieving revision 1.128 diff -u -d -r1.127 -r1.128 --- plot.lisp 10 Jul 2008 03:27:31 -0000 1.127 +++ plot.lisp 27 Jul 2008 07:04:12 -0000 1.128 @@ -131,7 +131,9 @@ ;; (si::fp-output-stream (si:run-process path nil))) #+gcl (setq *gnuplot-stream* (open (concatenate 'string "| " path) :direction :output)) - #-(or clisp cmu sbcl gcl scl lispworks) + #+ecl (progn + (setq *gnuplot-stream* (ext:run-program path nil :input :stream :output t :error :output))) + #-(or clisp cmu sbcl gcl scl lispworks ecl) (merror "Gnuplot not supported with your lisp!") ;; set mouse must be the first command send to gnuplot Index: rat3c.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/rat3c.lisp,v retrieving revision 1.19 retrieving revision 1.20 diff -u -d -r1.19 -r1.20 --- rat3c.lisp 29 Feb 2008 00:26:55 -0000 1.19 +++ rat3c.lisp 27 Jul 2008 07:04:12 -0000 1.20 @@ -438,8 +438,8 @@ (defvar bigprimes nil) (eval-when - #+gcl (load) - #-gcl (:load-toplevel) + #+gcl (load eval) + #-gcl (:load-toplevel :execute) ;; it is convenient to have the bigprimes be actually less than ;; half the size of the most positive fixnum, so that arithmetic is Index: runtim.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/runtim.lisp,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- runtim.lisp 31 Jan 2007 14:15:06 -0000 1.4 +++ runtim.lisp 27 Jul 2008 07:04:12 -0000 1.5 @@ -34,6 +34,9 @@ ;; on the LISPM the &REST list is a stack-allocated cdr-coded list. ;; We have to copy it, so might as well try out some optimizations. +;; BANISH THIS CRAP, DON'T KEEP CONFUSING CRAP HANGING AROUND FOREVER. FOR THE LOVE OF MIKE. !! + +#| (defun add (&rest v) (do ((l nil) (r) @@ -69,3 +72,4 @@ (defun mul* (&rest l) (simplifya (cons '(mtimes) (copy-list l)) nil)) + |# Index: server.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/server.lisp,v retrieving revision 1.16 retrieving revision 1.17 diff -u -d -r1.16 -r1.17 --- server.lisp 10 Jul 2008 03:27:31 -0000 1.16 +++ server.lisp 27 Jul 2008 07:04:12 -0000 1.17 @@ -16,6 +16,11 @@ (let* ((sock (open-socket host port))) #+gcl (setq si::*sigpipe-action* 'si::bye) (setq *socket-connection* sock) + #+ecl (setq *old-stdin* *standard-input* + *old-stdout* *standard-output* + *old-stderr* *error-output* + *old-term-io* *terminal-io* + *old-debug-io* *debug-io*) (setq *standard-input* sock) (setq *standard-output* sock) (setq *error-output* sock) @@ -26,6 +31,14 @@ (setq *debug-io* sock)) (values)) +(defun close-server () + #+ecl (setq *standard-input* *old-stdin* + *standard-output* *old-stdout* + *error-output* *old-stderr* + *terminal-io* *old-term-io* + *debug-io* *old-debug-io*) + #+ecl (close *socket-connection*)) + ;;; from CLOCC: <http://clocc.sourceforge.net> (defun open-socket (host port &optional bin) "Open a socket connection to `host' at `port'." @@ -51,7 +64,8 @@ #+gcl (si::socket port :host host) #+lispworks (comm:open-tcp-stream host port :direction :io :element-type (if bin 'unsigned-byte 'base-char)) - #-(or allegro clisp cmu scl sbcl gcl lispworks) + #+ecl (si::open-client-stream host port) + #-(or allegro clisp cmu scl sbcl gcl lispworks ecl) (error 'not-implemented :proc (list 'open-socket host port bin)))) @@ -77,14 +91,16 @@ #+gcl (system:getpid) #+openmcl (ccl::getpid) #+lispworks (system::getpid) -#-(or clisp cmu scl sbcl gcl openmcl lispworks) (getpid-from-environment) +#+ecl (si:getpid) +#-(or clisp cmu scl sbcl gcl openmcl lispworks ecl) (getpid-from-environment) ) -#+(or gcl clisp cmu scl sbcl lispworks) +#+(or gcl clisp cmu scl sbcl lispworks ecl) (defun xchdir (w) #+clisp (ext:cd w) #+gcl (si::chdir w) #+(or cmu scl) (unix::unix-chdir w) #+sbcl (sb-posix:chdir w) #+lispworks (hcl:change-directory w) + #+ecl (si:chdir w) ) Index: simp.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/simp.lisp,v retrieving revision 1.56 retrieving revision 1.57 diff -u -d -r1.56 -r1.57 --- simp.lisp 4 Apr 2008 23:26:19 -0000 1.56 +++ simp.lisp 27 Jul 2008 07:04:13 -0000 1.57 @@ -130,8 +130,8 @@ rischp nil rp-polylogp nil *const* 0) (eval-when - #+gcl (load) - #-gcl (:load-toplevel) + #+gcl (load eval) + #-gcl (:load-toplevel :execute) (mapc #'(lambda (x) (mputprop x t '$constant) (setf (get x 'sysconst) t)) '($%pi $%i $%e $%phi %i $%gamma ;numeric constants $inf $minf $und $ind $infinity ;pseudo-constants @@ -629,8 +629,8 @@ ;; point number. (eval-when - #+gcl (compile load) - #-gcl (:compile-toplevel :load-toplevel) + #+gcl (compile load eval) + #-gcl (:compile-toplevel :load-toplevel :execute) (defconstant machine-mantissa-precision (float-digits 1.0))) (defun fpcofrat1 (nu d) Index: suprv1.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/suprv1.lisp,v retrieving revision 1.71 retrieving revision 1.72 diff -u -d -r1.71 -r1.72 --- suprv1.lisp 10 Jul 2008 03:27:31 -0000 1.71 +++ suprv1.lisp 27 Jul 2008 07:04:14 -0000 1.72 @@ -986,6 +986,7 @@ #+(or openmcl mcl) (ccl::quit) #+gcl (quit) #+abcl (cl-user::quit) + #+ecl (si:quit) #+excl "don't know quit function" #+lispworks (lispworks:quit)) Index: sys-proclaim.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/sys-proclaim.lisp,v retrieving revision 1.17 retrieving revision 1.18 diff -u -d -r1.17 -r1.18 --- sys-proclaim.lisp 26 Jul 2008 19:00:27 -0000 1.17 +++ sys-proclaim.lisp 27 Jul 2008 07:04:14 -0000 1.18 @@ -23,72 +23,73 @@ *) SLATEC:ZBESY)) (PROCLAIM - '(FTYPE (FUNCTION (LONG-FLOAT LONG-FLOAT LONG-FLOAT LONG-FLOAT) *) - SLATEC::ZEXP)) -(PROCLAIM '(FTYPE (FUNCTION - (LONG-FLOAT LONG-FLOAT LONG-FLOAT LONG-FLOAT LONG-FLOAT - LONG-FLOAT) + (LONG-FLOAT LONG-FLOAT LONG-FLOAT FIXNUM FIXNUM FIXNUM + (VECTOR LONG-FLOAT) (VECTOR LONG-FLOAT) FIXNUM [...3044 lines suppressed...] - MAXIMA::TR-DECLARE-VARMODE MAXIMA::SOLVENTHP - MAXIMA::ALGNORM MAXIMA::PDERIVATIVE3 MAXIMA::PEXPT - MAXIMA::FLATTENL-OP MAXIMA::PSQFRP MAXIMA::TCONS - MAXIMA::SUBST-DIFF-MATCH MAXIMA::ORDERVAR - MAXIMA::RATQUOTIENT MAXIMA::MDEFMACRO1 MAXIMA::HDOT - MAXIMA::MAXIMA-DECLARED-ARRAY-ALIKE1 MAXIMA::OUTPUT-LINEAR - MAXIMA::CONF7 MAXIMA::EXPGAM-FUN - MAXIMA::BESSEL-Y-HALF-ORDER MAXIMA::DEFMATCH1 - MAXIMA::$POISDIFF MAXIMA::APDL MAXIMA::MONOMGCD - MAXIMA::ADDF MAXIMA::MARK- MAXIMA::SC-CONVERG-FORM - MAXIMA::ESHIFT MAXIMA::ADD-INVERSEP MAXIMA::INTEGRATE5 - MAXIMA::RATCF MAXIMA::DISTRESTOREX MAXIMA::DEFEXEC - MAXIMA::LOGCPI0 MAXIMA::RATSETUP1 MAXIMA::GRASP-SOME-TRIGS - MAXIMA::$FUNMAKE MAXIMA::MID MAXIMA::FIXVL - MAXIMA::DEFINTEGRATE MAXIMA::XTORTERM - MAXIMA::DRAW2D-PARAMETRIC MAXIMA::DIM-RAT)) + MAXIMA::ANDMAPCAR)) (PROCLAIM '(FTYPE (FUNCTION NIL FIXNUM) MAXIMA::MYTERPRI MAXIMA::SYS-GCTIME MAXIMA::REALIT-SL MAXIMA::[MAX-TRUNC] MAXIMA::CHRCT* Index: trdata.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/trdata.lisp,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- trdata.lisp 16 Oct 2007 22:38:48 -0000 1.9 +++ trdata.lisp 27 Jul 2008 07:04:15 -0000 1.10 @@ -25,8 +25,8 @@ ;;I think all this can be done at load time only:--wfs (eval-when - #+gcl (load) - #-gcl (:load-toplevel) + #+gcl (load eval) + #-gcl (:load-toplevel :execute) (mapc #'(lambda (x) (putprop x '$fixnum 'function-mode)) '($length $nterms random $nroots $rank $polysign $time Index: utils.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/utils.lisp,v retrieving revision 1.16 retrieving revision 1.17 diff -u -d -r1.16 -r1.17 --- utils.lisp 10 Jul 2008 03:27:31 -0000 1.16 +++ utils.lisp 27 Jul 2008 07:04:15 -0000 1.17 @@ -27,6 +27,7 @@ (defun maxima-getenv (envvar) #+gcl (si::getenv envvar) + #+ecl (si::getenv envvar) #+allegro (system:getenv envvar) #+(or cmu scl) (cdr (assoc envvar ext:*environment-list* :test #'string=)) #+sbcl (sb-ext:posix-getenv envvar) @@ -43,6 +44,7 @@ #+allegro (excl:exit) #+(or mcl openmcl) (ccl:quit) #+gcl (lisp:quit) + #+ecl (si:quit) #+lispworks (lispworks:quit) ) |