Function: calc-embedded-update
calc-embedded-update is a byte-compiled function defined in
calc-embed.el.gz.
Signature
(calc-embedded-update INFO WHICH NEED-EVAL NEED-DISPLAY &optional STR ENTRY OLD-VAL)
Source Code
;; Defined in /usr/src/emacs/lisp/calc/calc-embed.el.gz
(defun calc-embedded-update (info which need-eval need-display
&optional str entry old-val)
(let* ((calc-embed-prev-modes nil)
(open-plain calc-embedded-open-plain)
(close-plain calc-embedded-close-plain)
(calc-embed-vars-used nil)
(evalled nil)
(val (aref info 8))
(old-eval (aref info 11)))
(or old-val (setq old-val val))
(if (eq (car-safe val) 'calcFunc-evalto)
(setq need-display t))
(unwind-protect
(progn
(set-buffer (aref info 1))
(and which
(calc-embedded-set-modes (aref info 15) (aref info 12)
(aref info which)
(if need-display 'full t)))
(if (memq (car-safe val) '(calcFunc-evalto calcFunc-assign))
(calc-embedded-find-vars val))
(if need-eval
(let ((calc-embedded-info info))
(setq val (math-evaluate-expr val)
evalled val)))
(if (or (eq need-eval 'eval) (eq (car-safe val) 'calcFunc-evalto))
(aset info 8 val))
(aset info 9 nil)
(aset info 10 calc-embed-vars-used)
(aset info 11 nil)
(if (or need-display (eq (car-safe val) 'calcFunc-evalto))
(let ((extra (if (eq calc-language 'big) 1 0)))
(or entry (setq entry (list val 1 nil)))
(or str (progn
(setq str (let ((calc-line-numbering nil))
(math-format-stack-value entry)))
(if (eq calc-language 'big)
(setq str (substring str 0 -1)))))
(and calc-show-plain
(setq str (concat open-plain
(math-showing-full-precision
(math-format-flat-expr val 0))
close-plain
str)))
(save-excursion
(calc-embedded-original-buffer t info)
(or (equal str (aref info 6))
(let ((delta (- (aref info 5) (aref info 3)))
(adjbot 0)
(buffer-read-only nil))
(goto-char (aref info 2))
(delete-region (point) (aref info 3))
(and (> (nth 1 entry) (1+ extra))
(aref info 7)
(progn
(delete-horizontal-space)
(if (looking-at "\n")
;; If there's a newline there, don't add one
(insert "\n")
(insert "\n\n")
(delete-horizontal-space)
(setq adjbot 1)
; (setq delta (1+ delta))
(backward-char 1))))
(insert str)
(set-marker (aref info 3) (+ (point) adjbot))
(set-marker (aref info 5) (+ (point) delta))
(aset info 6 str))))))
(if (eq (car-safe val) 'calcFunc-evalto)
(progn
(setq evalled (nth 2 val)
val (nth 1 val))))
(if (eq (car-safe val) 'calcFunc-assign)
(progn
(aset info 9 (nth 1 val))
(aset info 11 (or evalled
(let ((calc-embedded-info info))
(math-evaluate-expr (nth 2 val)))))
(or (equal old-eval (aref info 11))
(calc-embedded-var-change (nth 1 val) (aref info 0))))
(if (eq (car-safe old-val) 'calcFunc-evalto)
(setq old-val (nth 1 old-val)))
(if (eq (car-safe old-val) 'calcFunc-assign)
(calc-embedded-var-change (nth 1 old-val) (aref info 0)))))
(set-buffer (aref info 1))
(while calc-embed-prev-modes
(cond ((eq (car (car calc-embed-prev-modes)) 'the-language)
(if need-display
(calc-embedded-set-language (cdr (car calc-embed-prev-modes)))))
((eq (car (car calc-embed-prev-modes)) 'the-display-just)
(if need-display
(calc-embedded-set-justify (cdr (car calc-embed-prev-modes)))))
(t
(set (car (car calc-embed-prev-modes))
(cdr (car calc-embed-prev-modes)))))
(setq calc-embed-prev-modes (cdr calc-embed-prev-modes))))))