Maxima interface to mk:defsys



Here is a small script that I've been using lately.  Since some of the
larger share packages (like lapack, minpack, etc.) use mk:defsys to
compile and load the package, it's sometimes useful to be able to call
mk:oos from maxima to process a system.

Of course, you can always do :lisp (mk:oos ...), but here's a interface
for maxima.  Load oos.lisp, and then operate_on_system will call mk:oos
with the given arguments.

Ray

(in-package "MAXIMA")

(dolist (p '("affine" "cobyla" "colnew" "lapack" "minpack"))
  (mk:add-registry-location (combine-path *maxima-sharedir* p)))

(defun $%operate_on_system (sys operation arglist)
  (let*
      ((options (mapcar #'(lambda (opt)
                 `((mequal) ,(intern (substitute #\- #\_ (symbol-name
(second opt)))
                         '#:maxima)
                   ,@(cddr opt)))
            (cdr arglist)))
       (result
    (apply 'mk:oos sys (intern (subseq (symbol-name operation) 1) :keyword)
           (lispify-maxima-keyword-options options
                           '($force $test $verbose
                         $load-source-instead-of-binary
                         $load-source-if-no-binary
                         $bother-user-if-no-binary
                         $compile-during-load
                         $dribble
                         $minimal-load
                         $override-compilation-unit
                         )))))
    (when result
      '$done)))