Remove obsolete MacEdit code.
[bpt/emacs.git] / lisp / calc / calc-units.el
index 54f6fad..d473b02 100644 (file)
@@ -3,7 +3,7 @@
 ;; Copyright (C) 1990, 1991, 1992, 1993, 2001 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
-;; Maintainer: Colin Walters <walters@debian.org>
+;; Maintainer: Jay Belanger <belanger@truman.edu>
 
 ;; This file is part of GNU Emacs.
 
 ;;; Code:
 
 ;; This file is autoloaded from calc-ext.el.
-(require 'calc-ext)
 
+(require 'calc-ext)
 (require 'calc-macs)
 
-(defun calc-Need-calc-units () nil)
-
 ;;; Units operations.
 
 ;;; Units table last updated 9-Jan-91 by Ulrich Mueller (ulm@vsnhd1.cern.ch)
     ( tpt     "in/72.27"            "Point (TeX conventions)" )
     ( Ang     "1e-10 m"             "Angstrom" )
     ( mfi     "mi+ft+in"            "Miles + feet + inches" )
-     
+
     ;; Area
     ( hect    "10000 m^2"           "*Hectare" )
     ( acre    "mi^2 / 640"          "Acre" )
     ( b       "1e-28 m^2"           "Barn" )
-     
+
     ;; Volume
     ( l       "1e-3 m^3"            "*Liter" )
     ( L       "1e-3 m^3"            "Liter" )
@@ -82,7 +80,7 @@
     ( vol     "tsp+tbsp+ozfl+cup+pt+qt+gal" "Gallons + ... + teaspoons" )
     ( galC    "4.54609 l"           "Canadian Gallon" )
     ( galUK   "4.546092 l"          "UK Gallon" )
-     
+
     ;; Time
     ( s       nil                   "*Second" )
     ( sec     "s"                   "Second" )
@@ -98,8 +96,8 @@
     ( mph     "mi/hr"               "*Miles per hour" )
     ( kph     "km/hr"               "Kilometers per hour" )
     ( knot    "nmi/hr"              "Knot" )
-    ( c       "2.99792458e8 m/s"    "Speed of light" )     
-     
+    ( c       "2.99792458e8 m/s"    "Speed of light" )
+
     ;; Acceleration
     ( ga      "9.80665 m/s^2"       "*\"g\" acceleration" )
 
@@ -296,11 +294,11 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
          (units (calc-var-value 'var-Units))
          (expr (calc-top-n 1)))
      (unless (and (>= num 0) (<= num 9))
-       (errunless "Bad unit number"))
+       (error "Bad unit number"))
      (unless (math-vectorp units)
-       (errunless "No \"quick units\" are defined"))
+       (error "No \"quick units\" are defined"))
      (unless (< pos (length units))
-       (errunless "Unit number %d not defined" pos))
+       (error "Unit number %d not defined" pos))
      (if (math-units-in-expr-p expr nil)
         (calc-enter-result 1 (format "cun%d" num)
                            (math-convert-units expr (nth pos units)))
@@ -313,7 +311,8 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
   (calc-slow-wrapper
    (let ((expr (calc-top-n 1))
         (uoldname nil)
-        unew)
+        unew
+         units)
      (unless (math-units-in-expr-p expr t)
        (let ((uold (or old-units
                       (progn
@@ -409,20 +408,26 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
    (calc-enter-result 1 "rmun" (math-simplify-units
                                (math-extract-units (calc-top-n 1))))))
 
+;; The variables calc-num-units and calc-den-units are local to 
+;; calc-explain-units, but are used by calc-explain-units-rec,
+;; which is called by calc-explain-units.
+(defvar calc-num-units)
+(defvar calc-den-units)
+
 (defun calc-explain-units ()
   (interactive)
   (calc-wrapper
-   (let ((num-units nil)
-        (den-units nil))
+   (let ((calc-num-units nil)
+        (calc-den-units nil))
      (calc-explain-units-rec (calc-top-n 1) 1)
-     (and den-units (string-match "^[^(].* .*[^)]$" den-units)
-         (setq den-units (concat "(" den-units ")")))
-     (if num-units
-        (if den-units
-            (message "%s per %s" num-units den-units)
-          (message "%s" num-units))
-       (if den-units
-          (message "1 per %s" den-units)
+     (and calc-den-units (string-match "^[^(].* .*[^)]$" calc-den-units)
+         (setq calc-den-units (concat "(" calc-den-units ")")))
+     (if calc-num-units
+        (if calc-den-units
+            (message "%s per %s" calc-num-units calc-den-units)
+          (message "%s" calc-num-units))
+       (if calc-den-units
+          (message "1 per %s" calc-den-units)
         (message "No units in expression"))))))
 
 (defun calc-explain-units-rec (expr pow)
@@ -463,11 +468,11 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
                 (setq name (concat name "^"
                                    (math-format-number (math-abs pow))))))
          (if (math-posp pow)
-             (setq num-units (if num-units
-                                 (concat num-units " " name)
+             (setq calc-num-units (if calc-num-units
+                                 (concat calc-num-units " " name)
                                name))
-           (setq den-units (if den-units
-                               (concat den-units " " name)
+           (setq calc-den-units (if calc-den-units
+                               (concat calc-den-units " " name)
                              name))))
       (cond ((eq (car-safe expr) '*)
             (calc-explain-units-rec (nth 1 expr) pow)
@@ -615,12 +620,18 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
      (save-buffer))))
 
 
+;; The variable math-cu-unit-list is local to math-build-units-table,
+;; but is used by math-compare-unit-names, which is called (indirectly)
+;; by math-build-units-table.
+;; math-cu-unit-list is also local to math-convert-units, but is used
+;; by math-convert-units-rec, which is called by math-convert-units.
+(defvar math-cu-unit-list)
 
 (defun math-build-units-table ()
   (or math-units-table
       (let* ((combined-units (append math-additional-units
                                     math-standard-units))
-            (unit-list (mapcar 'car combined-units))
+            (math-cu-unit-list (mapcar 'car combined-units))
             tab)
        (message "Building units table...")
        (setq math-units-table-buffer-valid nil)
@@ -646,28 +657,34 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
        (message "Building units table...done")
        (setq math-units-table tab))))
 
-(defun math-find-base-units (entry)
-  (if (eq (nth 4 entry) 'boom)
-      (error "Circular definition involving unit %s" (car entry)))
-  (or (nth 4 entry)
-      (let (base)
-       (setcar (nthcdr 4 entry) 'boom)
-       (math-find-base-units-rec (nth 1 entry) 1)
-       '(or base
-           (error "Dimensionless definition for unit %s" (car entry)))
-       (while (eq (cdr (car base)) 0)
-         (setq base (cdr base)))
-       (let ((b base))
+;; The variables math-fbu-base and math-fbu-entry are local to
+;; math-find-base-units, but are used by math-find-base-units-rec,
+;; which is called by math-find-base-units.
+(defvar math-fbu-base)
+(defvar math-fbu-entry)
+
+(defun math-find-base-units (math-fbu-entry)
+  (if (eq (nth 4 math-fbu-entry) 'boom)
+      (error "Circular definition involving unit %s" (car math-fbu-entry)))
+  (or (nth 4 math-fbu-entry)
+      (let (math-fbu-base)
+       (setcar (nthcdr 4 math-fbu-entry) 'boom)
+       (math-find-base-units-rec (nth 1 math-fbu-entry) 1)
+       '(or math-fbu-base
+           (error "Dimensionless definition for unit %s" (car math-fbu-entry)))
+       (while (eq (cdr (car math-fbu-base)) 0)
+         (setq math-fbu-base (cdr math-fbu-base)))
+       (let ((b math-fbu-base))
          (while (cdr b)
            (if (eq (cdr (car (cdr b))) 0)
                (setcdr b (cdr (cdr b)))
              (setq b (cdr b)))))
-       (setq base (sort base 'math-compare-unit-names))
-       (setcar (nthcdr 4 entry) base)
-       base)))
+       (setq math-fbu-base (sort math-fbu-base 'math-compare-unit-names))
+       (setcar (nthcdr 4 math-fbu-entry) math-fbu-base)
+       math-fbu-base)))
 
 (defun math-compare-unit-names (a b)
-  (memq (car b) (cdr (memq (car a) unit-list))))
+  (memq (car b) (cdr (memq (car a) math-cu-unit-list))))
 
 (defun math-find-base-units-rec (expr pow)
   (let ((u (math-check-unit-name expr)))
@@ -675,10 +692,11 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
           (let ((ulist (math-find-base-units u)))
             (while ulist
               (let ((p (* (cdr (car ulist)) pow))
-                    (old (assq (car (car ulist)) base)))
+                    (old (assq (car (car ulist)) math-fbu-base)))
                 (if old
                     (setcdr old (+ (cdr old) p))
-                  (setq base (cons (cons (car (car ulist)) p) base))))
+                  (setq math-fbu-base 
+                         (cons (cons (car (car ulist)) p) math-fbu-base))))
               (setq ulist (cdr ulist)))))
          ((math-scalarp expr))
          ((and (eq (car expr) '^)
@@ -697,8 +715,8 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
          ((eq (car expr) 'var)
           (or (eq (nth 1 expr) 'pi)
               (error "Unknown name %s in defining expression for unit %s"
-                     (nth 1 expr) (car entry))))
-         (t (error "Malformed defining expression for unit %s" (car entry))))))
+                     (nth 1 expr) (car math-fbu-entry))))
+         (t (error "Malformed defining expression for unit %s" (car math-fbu-entry))))))
 
 
 (defun math-units-in-expr-p (expr sub-exprs)
@@ -751,8 +769,12 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
                           (assq (intern (substring name 3))
                                 math-units-table))))))))
 
+;; The variable math-which-standard is local to math-to-standard-units,
+;; but is used by math-to-standard-rec, which is called by
+;; math-to-standard-units.
+(defvar math-which-standard)
 
-(defun math-to-standard-units (expr which-standard)
+(defun math-to-standard-units (expr math-which-standard)
   (math-to-standard-rec expr))
 
 (defun math-to-standard-rec (expr)
@@ -763,7 +785,7 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
            (progn
              (if (nth 1 u)
                  (setq expr (math-to-standard-rec (nth 1 u)))
-               (let ((st (assq (car u) which-standard)))
+               (let ((st (assq (car u) math-which-standard)))
                  (if st
                      (setq expr (nth 1 st))
                    (setq expr (list 'var (car u)
@@ -842,9 +864,14 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
                                                unit nil))
                          t)))
 
+;; The variable math-fcu-u is local to math-find-compatible-unit,
+;; but is used by math-find-compatible-rec which is called by
+;; math-find-compatible-unit.
+(defvar math-fcu-u)
+
 (defun math-find-compatible-unit (expr unit)
-  (let ((u (math-check-unit-name unit)))
-    (if u
+  (let ((math-fcu-u (math-check-unit-name unit)))
+    (if math-fcu-u
        (math-find-compatible-unit-rec expr 1))))
 
 (defun math-find-compatible-unit-rec (expr pow)
@@ -859,39 +886,47 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
         (math-find-compatible-unit-rec (nth 1 expr) (* pow (nth 2 expr))))
        (t
         (let ((u2 (math-check-unit-name expr)))
-          (if (equal (nth 4 u) (nth 4 u2))
+          (if (equal (nth 4 math-fcu-u) (nth 4 u2))
               (cons expr pow))))))
 
-(defun math-convert-units (expr new-units &optional pure)
+;; The variables math-cu-new-units and math-cu-pure are local to 
+;; math-convert-units, but are used by math-convert-units-rec, 
+;; which is called by math-convert-units.
+(defvar math-cu-new-units)
+(defvar math-cu-pure)
+
+(defun math-convert-units (expr math-cu-new-units &optional math-cu-pure)
   (math-with-extra-prec 2
-    (let ((compat (and (not pure) (math-find-compatible-unit expr new-units)))
-         (unit-list nil)
+    (let ((compat (and (not math-cu-pure) 
+                       (math-find-compatible-unit expr math-cu-new-units)))
+         (math-cu-unit-list nil)
          (math-combining-units nil))
       (if compat
          (math-simplify-units
           (math-mul (math-mul (math-simplify-units
                                (math-div expr (math-pow (car compat)
                                                         (cdr compat))))
-                              (math-pow new-units (cdr compat)))
+                              (math-pow math-cu-new-units (cdr compat)))
                     (math-simplify-units
                      (math-to-standard-units
-                      (math-pow (math-div (car compat) new-units)
+                      (math-pow (math-div (car compat) math-cu-new-units)
                                 (cdr compat))
                       nil))))
-       (when (setq unit-list (math-decompose-units new-units))
-         (setq new-units (nth 2 (car unit-list))))
+       (when (setq math-cu-unit-list (math-decompose-units math-cu-new-units))
+         (setq math-cu-new-units (nth 2 (car math-cu-unit-list))))
        (when (eq (car-safe expr) '+)
          (setq expr (math-simplify-units expr)))
        (if (math-units-in-expr-p expr t)
            (math-convert-units-rec expr)
          (math-apply-units (math-to-standard-units
-                            (list '/ expr new-units) nil)
-                           new-units unit-list pure))))))
+                            (list '/ expr math-cu-new-units) nil)
+                           math-cu-new-units math-cu-unit-list math-cu-pure))))))
 
 (defun math-convert-units-rec (expr)
   (if (math-units-in-expr-p expr nil)
-      (math-apply-units (math-to-standard-units (list '/ expr new-units) nil)
-                       new-units unit-list pure)
+      (math-apply-units (math-to-standard-units 
+                         (list '/ expr math-cu-new-units) nil)
+                       math-cu-new-units math-cu-unit-list math-cu-pure)
     (if (Math-primp expr)
        expr
       (cons (car expr)
@@ -939,18 +974,23 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
     (math-simplify a)))
 (defalias 'calcFunc-usimplify 'math-simplify-units)
 
+;; The function created by math-defsimplify uses the variable
+;; math-simplify-expr, and so is used by functions in math-defsimplify
+(defvar math-simplify-expr)
+
 (math-defsimplify (+ -)
   (and math-simplifying-units
-       (math-units-in-expr-p (nth 1 expr) nil)
-       (let* ((units (math-extract-units (nth 1 expr)))
+       (math-units-in-expr-p (nth 1 math-simplify-expr) nil)
+       (let* ((units (math-extract-units (nth 1 math-simplify-expr)))
              (ratio (math-simplify (math-to-standard-units
-                                    (list '/ (nth 2 expr) units) nil))))
+                                    (list '/ (nth 2 math-simplify-expr) units) nil))))
         (if (math-units-in-expr-p ratio nil)
             (progn
-              (calc-record-why "*Inconsistent units" expr)
-              expr)
-          (list '* (math-add (math-remove-units (nth 1 expr))
-                             (if (eq (car expr) '-) (math-neg ratio) ratio))
+              (calc-record-why "*Inconsistent units" math-simplify-expr)
+              math-simplify-expr)
+          (list '* (math-add (math-remove-units (nth 1 math-simplify-expr))
+                             (if (eq (car math-simplify-expr) '-) 
+                                  (math-neg ratio) ratio))
                 units)))))
 
 (math-defsimplify *
@@ -959,12 +999,12 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
 (defun math-simplify-units-prod ()
   (and math-simplifying-units
        calc-autorange-units
-       (Math-realp (nth 1 expr))
-       (let* ((num (math-float (nth 1 expr)))
+       (Math-realp (nth 1 math-simplify-expr))
+       (let* ((num (math-float (nth 1 math-simplify-expr)))
              (xpon (calcFunc-xpon num))
-             (unitp (cdr (cdr expr)))
+             (unitp (cdr (cdr math-simplify-expr)))
              (unit (car unitp))
-             (pow (if (eq (car expr) '*) 1 -1))
+             (pow (if (eq (car math-simplify-expr) '*) 1 -1))
              u)
         (and (eq (car-safe unit) '*)
              (setq unitp (cdr unit)
@@ -1014,39 +1054,42 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
                     (or (not (eq p pref))
                         (< xpon (+ pxpon (* (math-abs pow) 3))))
                     (progn
-                      (setcar (cdr expr)
+                      (setcar (cdr math-simplify-expr)
                               (let ((calc-prefer-frac nil))
-                                (calcFunc-scf (nth 1 expr)
+                                (calcFunc-scf (nth 1 math-simplify-expr)
                                               (- uxpon pxpon))))
                       (setcar unitp pname)
-                      expr)))))))
+                      math-simplify-expr)))))))
+
+(defvar math-try-cancel-units)
 
 (math-defsimplify /
   (and math-simplifying-units
-       (let ((np (cdr expr))
-            (try-cancel-units 0)
+       (let ((np (cdr math-simplify-expr))
+            (math-try-cancel-units 0)
             n nn)
-        (setq n (if (eq (car-safe (nth 2 expr)) '*)
-                    (cdr (nth 2 expr))
-                  (nthcdr 2 expr)))
+        (setq n (if (eq (car-safe (nth 2 math-simplify-expr)) '*)
+                    (cdr (nth 2 math-simplify-expr))
+                  (nthcdr 2 math-simplify-expr)))
         (if (math-realp (car n))
             (progn
-              (setcar (cdr expr) (math-mul (nth 1 expr)
+              (setcar (cdr math-simplify-expr) (math-mul (nth 1 math-simplify-expr)
                                            (let ((calc-prefer-frac nil))
                                              (math-div 1 (car n)))))
               (setcar n 1)))
         (while (eq (car-safe (setq n (car np))) '*)
-          (math-simplify-units-divisor (cdr n) (cdr (cdr expr)))
+          (math-simplify-units-divisor (cdr n) (cdr (cdr math-simplify-expr)))
           (setq np (cdr (cdr n))))
-        (math-simplify-units-divisor np (cdr (cdr expr)))
-        (if (eq try-cancel-units 0)
+        (math-simplify-units-divisor np (cdr (cdr math-simplify-expr)))
+        (if (eq math-try-cancel-units 0)
             (let* ((math-simplifying-units nil)
-                   (base (math-simplify (math-to-standard-units expr nil))))
+                   (base (math-simplify 
+                           (math-to-standard-units math-simplify-expr nil))))
               (if (Math-numberp base)
-                  (setq expr base))))
-        (if (eq (car-safe expr) '/)
+                  (setq math-simplify-expr base))))
+        (if (eq (car-safe math-simplify-expr) '/)
             (math-simplify-units-prod))
-        expr)))
+        math-simplify-expr)))
 
 (defun math-simplify-units-divisor (np dp)
   (let ((n (car np))
@@ -1083,8 +1126,8 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
                 (setq ud1 ud)
                 (while ud1
                   (and (eq (car (car un)) (car (car ud1)))
-                       (setq try-cancel-units
-                             (+ try-cancel-units
+                       (setq math-try-cancel-units
+                             (+ math-try-cancel-units
                                 (- (* (cdr (car un)) pow1)
                                    (* (cdr (car ud)) pow2)))))
                   (setq ud1 (cdr ud1)))
@@ -1093,20 +1136,23 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
 
 (math-defsimplify ^
   (and math-simplifying-units
-       (math-realp (nth 2 expr))
-       (if (memq (car-safe (nth 1 expr)) '(* /))
-          (list (car (nth 1 expr))
-                (list '^ (nth 1 (nth 1 expr)) (nth 2 expr))
-                (list '^ (nth 2 (nth 1 expr)) (nth 2 expr)))
-        (math-simplify-units-pow (nth 1 expr) (nth 2 expr)))))
+       (math-realp (nth 2 math-simplify-expr))
+       (if (memq (car-safe (nth 1 math-simplify-expr)) '(* /))
+          (list (car (nth 1 math-simplify-expr))
+                (list '^ (nth 1 (nth 1 math-simplify-expr)) 
+                       (nth 2 math-simplify-expr))
+                (list '^ (nth 2 (nth 1 math-simplify-expr)) 
+                       (nth 2 math-simplify-expr)))
+        (math-simplify-units-pow (nth 1 math-simplify-expr) 
+                                  (nth 2 math-simplify-expr)))))
 
 (math-defsimplify calcFunc-sqrt
   (and math-simplifying-units
-       (if (memq (car-safe (nth 1 expr)) '(* /))
-          (list (car (nth 1 expr))
-                (list 'calcFunc-sqrt (nth 1 (nth 1 expr)))
-                (list 'calcFunc-sqrt (nth 2 (nth 1 expr))))
-        (math-simplify-units-pow (nth 1 expr) '(frac 1 2)))))
+       (if (memq (car-safe (nth 1 math-simplify-expr)) '(* /))
+          (list (car (nth 1 math-simplify-expr))
+                (list 'calcFunc-sqrt (nth 1 (nth 1 math-simplify-expr)))
+                (list 'calcFunc-sqrt (nth 2 (nth 1 math-simplify-expr))))
+        (math-simplify-units-pow (nth 1 math-simplify-expr) '(frac 1 2)))))
 
 (math-defsimplify (calcFunc-floor
                   calcFunc-ceil
@@ -1119,21 +1165,21 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
                   calcFunc-abs
                   calcFunc-clean)
   (and math-simplifying-units
-       (= (length expr) 2)
-       (if (math-only-units-in-expr-p (nth 1 expr))
-          (nth 1 expr)
-        (if (and (memq (car-safe (nth 1 expr)) '(* /))
+       (= (length math-simplify-expr) 2)
+       (if (math-only-units-in-expr-p (nth 1 math-simplify-expr))
+          (nth 1 math-simplify-expr)
+        (if (and (memq (car-safe (nth 1 math-simplify-expr)) '(* /))
                  (or (math-only-units-in-expr-p
-                      (nth 1 (nth 1 expr)))
+                      (nth 1 (nth 1 math-simplify-expr)))
                      (math-only-units-in-expr-p
-                      (nth 2 (nth 1 expr)))))
-            (list (car (nth 1 expr))
-                  (cons (car expr)
-                        (cons (nth 1 (nth 1 expr))
-                              (cdr (cdr expr))))
-                  (cons (car expr)
-                        (cons (nth 2 (nth 1 expr))
-                              (cdr (cdr expr)))))))))
+                      (nth 2 (nth 1 math-simplify-expr)))))
+            (list (car (nth 1 math-simplify-expr))
+                  (cons (car math-simplify-expr)
+                        (cons (nth 1 (nth 1 math-simplify-expr))
+                              (cdr (cdr math-simplify-expr))))
+                  (cons (car math-simplify-expr)
+                        (cons (nth 2 (nth 1 math-simplify-expr))
+                              (cdr (cdr math-simplify-expr)))))))))
 
 (defun math-simplify-units-pow (a pow)
   (if (and (eq (car-safe a) '^)
@@ -1156,10 +1202,10 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
 
 (math-defsimplify calcFunc-sin
   (and math-simplifying-units
-       (math-units-in-expr-p (nth 1 expr) nil)
+       (math-units-in-expr-p (nth 1 math-simplify-expr) nil)
        (let ((rad (math-simplify-units
                   (math-evaluate-expr
-                   (math-to-standard-units (nth 1 expr) nil))))
+                   (math-to-standard-units (nth 1 math-simplify-expr) nil))))
             (calc-angle-mode 'rad))
         (and (eq (car-safe rad) '*)
              (math-realp (nth 1 rad))
@@ -1169,10 +1215,10 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
 
 (math-defsimplify calcFunc-cos
   (and math-simplifying-units
-       (math-units-in-expr-p (nth 1 expr) nil)
+       (math-units-in-expr-p (nth 1 math-simplify-expr) nil)
        (let ((rad (math-simplify-units
                   (math-evaluate-expr
-                   (math-to-standard-units (nth 1 expr) nil))))
+                   (math-to-standard-units (nth 1 math-simplify-expr) nil))))
             (calc-angle-mode 'rad))
         (and (eq (car-safe rad) '*)
              (math-realp (nth 1 rad))
@@ -1182,10 +1228,10 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
 
 (math-defsimplify calcFunc-tan
   (and math-simplifying-units
-       (math-units-in-expr-p (nth 1 expr) nil)
+       (math-units-in-expr-p (nth 1 math-simplify-expr) nil)
        (let ((rad (math-simplify-units
                   (math-evaluate-expr
-                   (math-to-standard-units (nth 1 expr) nil))))
+                   (math-to-standard-units (nth 1 math-simplify-expr) nil))))
             (calc-angle-mode 'rad))
         (and (eq (car-safe rad) '*)
              (math-realp (nth 1 rad))
@@ -1295,8 +1341,11 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
        (pop-to-buffer (get-buffer "*Units Table*"))
       (display-buffer (get-buffer "*Units Table*")))))
 
+(provide 'calc-units)
+
 ;; Local Variables:
 ;; coding: iso-latin-1
 ;; End:
 
+;;; arch-tag: e993314f-3adc-4191-be61-4ef8874881c4
 ;;; calc-units.el ends here