Function: calc-convert-units
calc-convert-units is an autoloaded, interactive and byte-compiled
function defined in calc-units.el.gz.
Signature
(calc-convert-units &optional OLD-UNITS NEW-UNITS)
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/calc/calc-units.el.gz
(defun calc-convert-units (&optional old-units new-units)
(interactive)
(calc-slow-wrapper
(let ((expr (calc-top-n 1))
(uoldname nil)
(unitscancel nil)
(nouold nil)
units
defunits)
(if (or (not (math-units-in-expr-p expr t))
(setq unitscancel (and
(if (get 'calc-allow-units-as-numbers 'saved-value)
(car (get 'calc-allow-units-as-numbers 'saved-value))
calc-allow-units-as-numbers)
(eq (math-get-standard-units expr) 1))))
(let ((uold (or old-units
(progn
(setq uoldname
(if unitscancel
(read-string
"(The expression is unitless when simplified) Old Units: ")
(read-string "Old units: ")))
(if (equal uoldname "")
(progn
(setq nouold unitscancel)
(setq uoldname "1")
1)
(if (string-match "\\` */" uoldname)
(setq uoldname (concat "1" uoldname)))
(math-read-expr uoldname))))))
(unless (math-units-in-expr-p uold t)
(error "No units specified"))
(when (eq (car-safe uold) 'error)
(error "Bad format in units expression: %s" (nth 1 uold)))
(setq expr (math-mul expr uold))))
(setq defunits (math-get-default-units expr))
(unless new-units
(setq new-units
(read-string (format-prompt
(if (and uoldname (not nouold))
(concat "Old units: "
uoldname
", new units")
"New units")
defunits)))
(if (and
(string= new-units "")
defunits)
(setq new-units defunits)))
(when (string-match "\\` */" new-units)
(setq new-units (concat "1" new-units)))
(setq units (math-read-expr new-units))
(when (eq (car-safe units) 'error)
(error "Bad format in units expression: %s" (nth 2 units)))
(if calc-ensure-consistent-units
(math-check-unit-consistency expr units))
(let ((unew (math-units-in-expr-p units t))
(std (and (eq (car-safe units) 'var)
(assq (nth 1 units) math-standard-units-systems)))
(comp (eq (car-safe units) '+)))
(unless (or unew std)
(error "No units specified"))
(let* ((noold (and uoldname (not (equal uoldname "1"))))
(res
(if std
(math-simplify-units (math-to-standard-units expr (nth 1 std)))
(math-convert-units expr units noold))))
(unless std
(math-put-default-units (if noold units res) (if comp units)))
(calc-enter-result 1 "cvun" res))))))