From: Andreas E. <ar...@us...> - 2007-01-31 13:45:34
|
Update of /cvsroot/maxima/maxima/src In directory sc8-pr-cvs7.sourceforge.net:/tmp/cvs-serv22523/src Modified Files: fortra.lisp Log Message: removed stale conditionalizations; removed unused local variables; replaced maclispisms by the equivalent cl code Index: fortra.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/fortra.lisp,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- fortra.lisp 7 Nov 2005 17:37:11 -0000 1.5 +++ fortra.lisp 31 Jan 2007 13:45:19 -0000 1.6 @@ -9,12 +9,12 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (in-package :maxima) + (macsyma-module fortra) (declare-top (special lb rb ;Used for communication with MSTRING. $loadprint ;If NIL, no load message gets printed. - 1//2 -1//2) - (*lexpr fortran-print $fortmx)) + 1//2 -1//2)) (defmvar $fortspaces nil "If T, Fortran card images are filled out to 80 columns using spaces." @@ -45,28 +45,20 @@ (t (fortran-print value))))) ;; This function is called from Lisp programs. It takes an expression and -;; a stream argument. Default stream is NIL in MacLisp and *STANDARD-OUTPUT* -;; in LMLisp. This should be canonicalized in Macsyma at some point. - -;; TERPRI is a PDP10 MacLisp flag which, if set to T, will keep symbols and -;; bignums from being broken across page boundaries when printed. $LOADPRINT -;; is NIL to keep a message from being printed when the file containing MSTRING +;; a stream argument. Default stream is *STANDARD-OUTPUT*. +;; $LOADPRINT is NIL to keep a message from being printed when the file containing MSTRING ;; is loaded. (MRG;GRIND) (defprop mexpt (#\* #\*) dissym) -(defun fortran-print (x &optional (stream #+maclisp nil #-maclisp *standard-output*) - &aux #+pdp10 (terpri t) #+pdp10 ($loadprint nil) - ;; This is a poor way of saying that array references - ;; are to be printed with parens instead of brackets. - (lb #. left-parentheses-char ) (rb #. right-parentheses-char )) +(defun fortran-print (x &optional (stream *standard-output*)) ;; Restructure the expression for displaying. (setq x (fortscan x)) + ;; Linearize the expression using MSTRING. Some global state must be ;; modified for MSTRING to generate using Fortran syntax. This must be ;; undone so as not to modifiy the toplevel behavior of MSTRING. (unwind-protect - (defprop mexpt msize-infix grind) (defprop mminus 100. lbp) @@ -78,39 +70,38 @@ (setq x (mstring x))) ;; Make sure this gets done before exiting this frame. (defprop mexpt msz-mexpt grind) - (remprop 'mminus 'lbp) - ) + (remprop 'mminus 'lbp)) ;; MSTRING returns a list of characters. Now print them. (do ((c #.(char-int #\0) - (f+ 1 (remainder (f- c #. (char-int #\0)) - 16) #. (char-int #\0))) - (column (f+ 6 $fortindent) (f+ 9 $fortindent))) + (+ 1 (rem (- c #.(char-int #\0)) 16) #.(char-int #\0))) + (column (+ 6 $fortindent) (+ 9 $fortindent))) ((null x)) ;; Print five spaces, a continuation character if needed, and then ;; more spaces. COLUMN points to the last column printed in. When ;; it equals 80, we should quit. - (cond ((= c #. (char-int #\0)) + (cond ((= c #.(char-int #\0)) (print-spaces column stream)) (t (print-spaces 5 stream) - (tyo (code-char c) stream) - (print-spaces (f- column 6) stream))) + (write-char (code-char c) stream) + (print-spaces (- column 6) stream))) ;; Print the expression. Remember, Fortran ignores blanks and line ;; terminators, so we don't care where the expression is broken. (do () ((= column 72.)) (if (null x) - (if $fortspaces (tyo #\space stream) (return nil)) - (progn (and (equal (car x) #. back-slash-char) (setq x (cdr x))) - (tyo (pop x) stream))) - (increment column)) + (if $fortspaces (write-char #\space stream) (return nil)) + (progn + (and (equal (car x) #\\) (setq x (cdr x))) + (write-char (pop x) stream))) + (incf column)) ;; Columns 73 to 80 contain spaces (if $fortspaces (print-spaces 8 stream)) (terpri stream)) '$done) (defun print-spaces (n stream) - (dotimes (i n) (tyo #\space stream))) + (dotimes (i n) (write-char #\space stream))) ;; This function is similar to NFORMAT. Prepare an expression ;; for printing by converting x^(1/2) to sqrt(x), etc. A better @@ -155,20 +146,18 @@ ;; statements of the form ;; NAME(I,J) = <corresponding matrix element> -(defmfun $fortmx (name mat &optional (stream #-cl nil #+cl *standard-output*) - &aux ($loadprint nil)) +(defmfun $fortmx (name mat &optional (stream *standard-output*) &aux ($loadprint nil)) (cond ((not (symbolp name)) (merror "~%First argument to `fortmx' must be a symbol.")) ((not ($matrixp mat)) (merror "Second argument to `fortmx' not a matrix: ~M" mat))) - (do ((mat (cdr mat) (cdr mat)) (i 1 (f1+ i))) ((null mat)) - (declare (fixnum i)) - (do ((m (cdar mat) (cdr m)) (j 1 (f1+ j))) ((null m)) - (declare (fixnum j)) + (do ((mat (cdr mat) (cdr mat)) (i 1 (1+ i))) + ((null mat)) + (do ((m (cdar mat) (cdr m)) (j 1 (1+ j))) + ((null m)) (fortran-print `((mequal) ((,name) ,i ,j) ,(car m)) stream))) '$done) - ;; Local Modes: ;; Comment Column:26 ;; End: |