]> code.delx.au - gnu-emacs/blobdiff - lisp/calc/calc-units.el
(add-log-buffer-file-name-function): Add defvar.
[gnu-emacs] / lisp / calc / calc-units.el
index e8a3abfe95857d6b6b2226773296485288b99ad4..7d42fd9ca9ab5e01735a8509813fca2b5486b708 100644 (file)
@@ -1,6 +1,7 @@
 ;;; calc-units.el --- unit conversion functions for Calc
 
-;; Copyright (C) 1990, 1991, 1992, 1993, 2001 Free Software Foundation, Inc.
+;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2002, 2003, 2004,
+;;   2005 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 ;; Maintainer: Jay Belanger <belanger@truman.edu>
     ( men     "100/invcm"           "Inverse energy in meters" )
     ( Hzen    "h Hz"                "Energy in Hertz")
     ( Ken     "k K"                 "Energy in Kelvins")
-    ( Wh      "W h"                 "Watt hour")
+    ( Wh      "W hr"                 "Watt hour")
     ( Ws      "W s"                 "Watt second")
 
     ;; Power
@@ -555,7 +556,7 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
           (save-excursion
             (goto-char (point-min))
             (if (looking-at "Calculator Units Table")
-                (let ((buffer-read-only nil))
+                (let ((inhibit-read-only t))
                   (insert "(Obsolete) "))))))))
 
 (defun calc-get-unit-definition (uname)
@@ -810,10 +811,10 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
            (mapcar 'math-to-standard-rec (cdr expr))))))
 
 (defun math-apply-units (expr units ulist &optional pure)
+  (setq expr (math-simplify-units expr))
   (if ulist
       (let ((new 0)
            value)
-       (setq expr (math-simplify-units expr))
        (or (math-numberp expr)
            (error "Incompatible units"))
        (while (cdr ulist)
@@ -826,9 +827,9 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
                ulist (cdr ulist)))
        (math-add new (math-mul (math-div expr (nth 1 (car ulist)))
                                (car (car ulist)))))
-    (math-simplify-units (if pure
-                            expr
-                          (list '* expr units)))))
+    (if pure
+        expr
+      (math-simplify-units (list '* expr units)))))
 
 (defvar math-decompose-units-cache nil)
 (defun math-decompose-units (units)
@@ -1241,6 +1242,45 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
              (eq (nth 1 (nth 2 rad)) 'rad)
              (list 'calcFunc-tan (nth 1 rad))))))
 
+(math-defsimplify calcFunc-sec
+  (and math-simplifying-units
+       (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 math-simplify-expr) nil))))
+            (calc-angle-mode 'rad))
+        (and (eq (car-safe rad) '*)
+             (math-realp (nth 1 rad))
+             (eq (car-safe (nth 2 rad)) 'var)
+             (eq (nth 1 (nth 2 rad)) 'rad)
+             (list 'calcFunc-sec (nth 1 rad))))))
+
+(math-defsimplify calcFunc-csc
+  (and math-simplifying-units
+       (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 math-simplify-expr) nil))))
+            (calc-angle-mode 'rad))
+        (and (eq (car-safe rad) '*)
+             (math-realp (nth 1 rad))
+             (eq (car-safe (nth 2 rad)) 'var)
+             (eq (nth 1 (nth 2 rad)) 'rad)
+             (list 'calcFunc-csc (nth 1 rad))))))
+
+(math-defsimplify calcFunc-cot
+  (and math-simplifying-units
+       (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 math-simplify-expr) nil))))
+            (calc-angle-mode 'rad))
+        (and (eq (car-safe rad) '*)
+             (math-realp (nth 1 rad))
+             (eq (car-safe (nth 2 rad)) 'var)
+             (eq (nth 1 (nth 2 rad)) 'rad)
+             (list 'calcFunc-cot (nth 1 rad))))))
+
 
 (defun math-remove-units (expr)
   (if (math-check-unit-name expr)
@@ -1271,65 +1311,65 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
        (save-excursion
          (message "Formatting units table...")
          (set-buffer buf)
-         (setq buffer-read-only nil)
-         (erase-buffer)
-         (insert "Calculator Units Table:\n\n")
-         (insert "Unit    Type  Definition                  Description\n\n")
-         (while uptr
-           (setq u (car uptr)
-                 name (nth 2 u))
-           (when (eq (car u) 'm)
-             (setq std t))
-           (setq shadowed (and std (assq (car u) math-additional-units)))
-           (when (and name
-                      (> (length name) 1)
-                      (eq (aref name 0) ?\*))
-             (unless (eq uptr math-units-table)
-               (insert "\n"))
-             (setq name (substring name 1)))
-           (insert " ")
-           (and shadowed (insert "("))
-           (insert (symbol-name (car u)))
-           (and shadowed (insert ")"))
-           (if (nth 3 u)
-               (progn
-                 (indent-to 10)
-                 (insert (symbol-name (nth 3 u))))
-             (or std
-                 (progn
-                   (indent-to 10)
-                   (insert "U"))))
-           (indent-to 14)
-           (and shadowed (insert "("))
-           (if (nth 1 u)
-               (insert (math-format-value (nth 1 u) 80))
-             (insert (symbol-name (car u))))
-           (and shadowed (insert ")"))
-           (indent-to 41)
-           (insert " ")
-           (when name
-             (insert name))
-           (if shadowed
-               (insert " (redefined above)")
-             (unless (nth 1 u)
-               (insert " (base unit)")))
-           (insert "\n")
-           (setq uptr (cdr uptr)))
-         (insert "\n\nUnit Prefix Table:\n\n")
-         (setq uptr math-unit-prefixes)
-         (while uptr
-           (setq u (car uptr))
-           (insert " " (char-to-string (car u)))
-           (if (equal (nth 1 u) (nth 1 (nth 1 uptr)))
-               (insert " " (char-to-string (car (car (setq uptr (cdr uptr)))))
-                       "   ")
-             (insert "     "))
-           (insert "10^" (int-to-string (nth 2 (nth 1 u))))
-           (indent-to 15)
-           (insert "   " (nth 2 u) "\n")
-           (while (eq (car (car (setq uptr (cdr uptr)))) 0)))
-         (insert "\n")
-         (setq buffer-read-only t)
+          (let ((inhibit-read-only t))
+            (erase-buffer)
+            (insert "Calculator Units Table:\n\n")
+            (insert "Unit    Type  Definition                  Description\n\n")
+            (while uptr
+              (setq u (car uptr)
+                    name (nth 2 u))
+              (when (eq (car u) 'm)
+                (setq std t))
+              (setq shadowed (and std (assq (car u) math-additional-units)))
+              (when (and name
+                         (> (length name) 1)
+                         (eq (aref name 0) ?\*))
+                (unless (eq uptr math-units-table)
+                  (insert "\n"))
+                (setq name (substring name 1)))
+              (insert " ")
+              (and shadowed (insert "("))
+              (insert (symbol-name (car u)))
+              (and shadowed (insert ")"))
+              (if (nth 3 u)
+                  (progn
+                    (indent-to 10)
+                    (insert (symbol-name (nth 3 u))))
+                (or std
+                    (progn
+                      (indent-to 10)
+                      (insert "U"))))
+              (indent-to 14)
+              (and shadowed (insert "("))
+              (if (nth 1 u)
+                  (insert (math-format-value (nth 1 u) 80))
+                (insert (symbol-name (car u))))
+              (and shadowed (insert ")"))
+              (indent-to 41)
+              (insert " ")
+              (when name
+                (insert name))
+              (if shadowed
+                  (insert " (redefined above)")
+                (unless (nth 1 u)
+                  (insert " (base unit)")))
+              (insert "\n")
+              (setq uptr (cdr uptr)))
+            (insert "\n\nUnit Prefix Table:\n\n")
+            (setq uptr math-unit-prefixes)
+            (while uptr
+              (setq u (car uptr))
+              (insert " " (char-to-string (car u)))
+              (if (equal (nth 1 u) (nth 1 (nth 1 uptr)))
+                  (insert " " (char-to-string (car (car (setq uptr (cdr uptr)))))
+                          "   ")
+                (insert "     "))
+              (insert "10^" (int-to-string (nth 2 (nth 1 u))))
+              (indent-to 15)
+              (insert "   " (nth 2 u) "\n")
+              (while (eq (car (car (setq uptr (cdr uptr)))) 0)))
+            (insert "\n"))
+         (view-mode)
          (message "Formatting units table...done"))
        (setq math-units-table-buffer-valid t)
        (let ((oldbuf (current-buffer)))