Function: calc-change-mode

calc-change-mode is a byte-compiled function defined in calc-ext.el.gz.

Signature

(calc-change-mode VAR VALUE &optional REFRESH OPTION)

Source Code

;; Defined in /usr/src/emacs/lisp/calc/calc-ext.el.gz
(defun calc-change-mode (var value &optional refresh option)
  (if option
      (setq value (if value
		      (> (prefix-numeric-value value) 0)
		    (not (symbol-value var)))))
  (or (consp var) (setq var (list var) value (list value)))
  (if calc-inverse-flag
      (let ((old nil))
	(or refresh (error "Not a display-mode command"))
	(calc-check-stack 1)
	(unwind-protect
	    (let ((v var))
	      (while v
		(setq old (cons (symbol-value (car v)) old))
		(set (car v) (car value))
		(setq v (cdr v)
		      value (cdr value)))
	      (calc-refresh-top 1)
	      (calc-refresh-evaltos)
	      (symbol-value (car var)))
	  (let ((v var))
	    (setq old (nreverse old))
	    (while v
	      (set (car v) (car old))
	      (setq v (cdr v)
		    old (cdr old)))
	    (if (eq (car var) 'calc-language)
		(calc-set-language calc-language calc-language-option t)))))
    (let ((chg nil)
	  (v var))
      (while v
	(or (equal (symbol-value (car v)) (car value))
	    (progn
	      (set (car v) (car value))
	      (if (eq (car v) 'calc-float-format)
		  (setq calc-full-float-format
			(list (if (eq (car (car value)) 'fix)
				  'float
				(car (car value)))
			      0)))
	      (setq chg t)))
	(setq v (cdr v)
	      value (cdr value)))
      (if chg
	  (progn
	    (or (and refresh (calc-do-refresh))
		(calc-refresh-evaltos))
	    (and (eq calc-mode-save-mode 'save)
		 (not (equal var '(calc-mode-save-mode)))
		 (calc-save-modes))))
      (if calc-embedded-info (calc-embedded-modes-change var))
      (calc-set-mode-line)
      (symbol-value (car var)))))