Re: prefix operators in maxima 4.5 & 5.5



Thank you for reporting this bug.    It would appear to have been
there for sometime, with people not using more than 2 character prefix


    (c1) prefix("curl");

    (d1) "CURL"

    (c2) closefile("buddy.out");

    (d2) CURL osefile(buddy.out)


or infix operators.   It can be repaired by fixing
the code of read-command-token-aux in nparse.lisp as follows:
[alternately you can just load in the following file..]

(in-package "MAXIMA")

(defun read-command-token-aux (obj)
  (let* (result
	 (ch (parse-tyipeek))
	 (lis (if (eql ch -1) nil  (parser-assoc (char-upcase ch) obj))))
    (cond ((null lis) 
	   nil)
	  (t
	   (parse-tyi)
	   (cond ((atom (cadr lis))
		  ;; INFIX("ABC"); puts into macsyma-operators
		  ;;something like: (#\A #\B #\C (ANS |$ABC|))
		  ;; ordinary things are like:
		  ;; (#\< (ANS $<) (#\= (ANS $<=)))
		  ;; where if you fail at the #\< #\X
		  ;; stage, then the previous step was permitted.
		  (setq result (read-command-token-aux (list (cdr lis) ))))
		 ((null (cddr lis))
		  ;; lis something like (#\= (ANS $<=))
		  ;; and this says there are no longer operators
		  ;; starting with this.
		  (setq result
			(and (eql (car (cadr lis)) 'ans)
			     (cadr (cadr lis)))))
		 (t
		  (let ((res   (and (eql (car (cadr lis)) 'ans)
				    (cadr (cadr lis))))
			(com-token (read-command-token-aux (cddr lis) )))
		    (setq result (or com-token res 
				     (read-command-token-aux
				      (list (cadr lis))))))
		  ))
	   (or result (unparse-tyi ch))
	   result))))