home *** CD-ROM | disk | FTP | other *** search
/ Enter 2004 January / enter-2004-01.iso / files / maxima-5.9.0.exe / {app} / share / maxima / 5.9.0 / src / trutil.lisp < prev    next >
Encoding:
Text File  |  2003-02-09  |  5.0 KB  |  148 lines

  1. ;;; -*-  Mode: Lisp; Package: Maxima; Syntax: Common-Lisp; Base: 10 -*- ;;;;
  2. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  3. ;;;     The data in this file contains enhancments.                    ;;;;;
  4. ;;;                                                                    ;;;;;
  5. ;;;  Copyright (c) 1984,1987 by William Schelter,University of Texas   ;;;;;
  6. ;;;     All rights reserved                                            ;;;;;
  7. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  8. ;;;     (c) Copyright 1980 Massachusetts Institute of Technology         ;;;
  9. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  10.  
  11. (in-package "MAXIMA")
  12. (macsyma-module trutil)
  13.  
  14.  
  15. (TRANSL-MODULE TRUTIL)
  16.  
  17. ;;; takes a list, and returns a cons of an a-list of (gensym . exp)
  18. ;;; and the origonal list with gensyms substututed for non-atom elements
  19. ;;; of the list. This could be used to define subr-like makros.
  20.  
  21. (declare-top(special tr-gensym-kounter))
  22. (setq tr-gensym-kounter 0)
  23. (DEFTRFUN TR-GENSYM (&OPTIONAL k)
  24.       (and k (setq tr-gensym-kounter k))
  25.       (prog2 nil
  26.          (implode (nconc (explodec '|tr-gensym~|)
  27.                  (explodec tr-gensym-kounter)))
  28.          (setq tr-gensym-kounter (f1+ tr-gensym-kounter))))
  29. (declare-top (unspecial tr-gensym-kounter))
  30.  
  31. (DEFTRFUN CONSERVE-EVAL-ARGS-DATA (L)
  32.        (DO ((SUBLIS NIL)
  33.         (L L (CDR L))
  34.         (NL NIL))
  35.        ((NULL L) (CONS SUBLIS (NREVERSE NL)))
  36.        (COND ((ATOM (CAR L))
  37.           (PUSH (CAR L) NL))
  38.          (T
  39.           (LET ((SYM (TR-GENSYM)))
  40.                (PUSH (CONS SYM (CAR L)) SUBLIS)
  41.                (PUSH SYM NL))))))
  42.  
  43.  
  44. (DEFUN TR-TRACE-HANDLE (FORM)
  45.        (LET* ((LEVEL-SYM (GET (CAAR FORM) 'TR-TRACE-LEVEL))
  46.           (LEVEL (f1+ (SYMBOL-VALUE LEVEL-SYM)))
  47.           (OP (CAAR FORM)))
  48.          (PROGV (LIST LEVEL-SYM)
  49.             (LIST LEVEL)
  50.             (MTELL-OPEN "~%~S Enter ~:@M~%" level op)
  51.             (mgrind form nil)
  52.             (setq form (subrcall nil (get op 'otranslate) form))
  53.             (mtell-OPEN "~%~S Exit  ~:@M" level op)
  54.             (sprinter form)
  55.             form)))
  56. #+(or PDP10 Franz)
  57. (defprop get! (mtrace fasl dsk macsym) autoload)
  58.  
  59. (defun tr-trace (op)
  60.        (if (get op 'otranslate) (tr-untrace op))
  61.        (let ((sym (gensym)))
  62.      (set sym 0)
  63.         (putprop op sym 'TR-TRACE-LEVEL))
  64.        (putprop op (get! op 'translate) 'otranslate)
  65.        (putprop op (get! 'tr-trace-handle 'subr) 'translate))
  66.  
  67. (defun tr-untrace (op)
  68.        (remprop op 'tr-trace-level)
  69.        (putprop op (get! op 'otranslate) 'translate)
  70.        (remprop op 'otranslate))
  71.  
  72. (DEFTRFUN PUSH-DEFVAR (VAR VAL)
  73.   ;; makes sure there is a form in the beginning of the
  74.   ;; file that insures the special variable is declared and bound.
  75.   (OR (MEMQ VAR DEFINED_VARIABLES)
  76.       ;; $NO_DEFAULT says that the user takes responsibility for binding.
  77.       (EQ $DEFINE_VARIABLE '$NO_DEFAULT)
  78.       ;; $MODE is same, but double-checks with the declarations available.
  79.       (AND (EQ $DEFINE_VARIABLE '$MODE)
  80.        (GET VAR 'MODE))
  81.       (DO ((L *PRE-TRANSL-FORMS* (CDR L)))
  82.       ((NULL L)
  83.        ;; push one with a priority of 1, which will be over-rided
  84.        ;; by any user-specified settings.
  85.        (IF (EQ $DEFINE_VARIABLE '$MODE)
  86.            (TR-FORMAT "~%Note: ~:M being given a default setting of ~:M"
  87.               var (IF (atom val) val
  88.                   ;; strip off the quote
  89.                   (cadr val))))
  90.        (PUSH-PRE-TRANSL-FORM `(DEF-mtrVAR ,VAR ,VAL 1)))
  91.     (LET ((FORM (CAR L)))
  92.       (AND (EQ (CAR FORM) 'DEF-mtrVAR)
  93.            (EQ (CADR FORM) VAR)
  94.            (RETURN ()))))))
  95.  
  96. (DEFTRFUN PUSH-PRE-TRANSL-FORM (FORM)
  97.       (COND ((zl-MEMBER FORM *PRE-TRANSL-FORMS*))
  98.         (T
  99.          (PUSH FORM *PRE-TRANSL-FORMS*)
  100.          (AND *IN-TRANSLATE*
  101.               (LET ((WINP NIL))
  102.                (UNWIND-PROTECT (PROGN (EVAL FORM) (SETQ WINP T))
  103.                        (OR WINP
  104.                            (BARFO "Bad *PRE-TRANSL-FORM*"))))))))
  105.  
  106. (DEFTRFUN PUSH-AUTOLOAD-DEF (OLD-ENTRY NEW-ENTRIES)
  107.            (AND (GET OLD-ENTRY 'AUTOLOAD)
  108.             ; don't need this if it is IN-CORE.
  109.             ; this automaticaly punts this shit for systems
  110.             ; that don't need it.
  111.             (DO ((ENTRY))
  112.             ((NULL NEW-ENTRIES))
  113.             (SETQ ENTRY (POP NEW-ENTRIES))
  114.             (OR (MEMQ ENTRY *NEW-AUTOLOAD-ENTRIES*)
  115.                 (PUSH-PRE-TRANSL-FORM
  116.                  `(PUTPROP ',ENTRY
  117.                        ; this ensures that the autoload definition
  118.                        ; will not get out of date.
  119.                        (OR (GET ',OLD-ENTRY 'AUTOLOAD)
  120.                        T)
  121.                        'AUTOLOAD))))))
  122.  
  123.  
  124.  
  125. (DEFTRFUN TR-NARGS-CHECK (FORM &OPTIONAL
  126.                    (ARGS-P (ARGS (CAAR FORM)))
  127.                    (NARGS (LENGTH (CDR FORM))))
  128.        ; the maclisp args info format is NIL meaning no info,
  129.        ; probably a lexpr. or cons (min . max)
  130.        (AND
  131.         ARGS-P
  132.         (LET ((NARGS (LENGTH (CDR FORM)))
  133.           (MIN (OR (CAR ARGS-P) (CDR ARGS-P)))
  134.           (MAX (CDR ARGS-P)))
  135.          (COND ((AND MIN (< NARGS MIN))
  136.             (MFORMAT 
  137.              *TRANSLATION-MSGS-FILES*
  138.              "~%ERROR: Too few arguments supplied to ~:@M~%"
  139.              (CAAR FORM))
  140.             (MGRIND FORM *TRANSLATION-MSGS-FILES*))
  141.                ((AND MAX (> NARGS MAX))
  142.             (TR-FORMAT 
  143.              "~%ERROR: Too many arguments supplied to ~:@M~%"
  144.              (caar form))
  145.             (MGRIND FORM *TRANSLATION-MSGS-FILES*)))))
  146.        ; return the number of arguments.
  147.        NARGS)
  148.