root/trunk/lisp/calc/calc-store.el

Revision 4220, 22.1 kB (checked in by miyoshi, 9 months ago)

Sync up with Emacs22.2.

Line 
1 ;;; calc-store.el --- value storage functions for Calc
2
3 ;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2002, 2003, 2004,
4 ;;   2005, 2006, 2007, 2008 Free Software Foundation, Inc.
5
6 ;; Author: David Gillespie <daveg@synaptics.com>
7 ;; Maintainer: Jay Belanger <jay.p.belanger@gmail.com>
8
9 ;; This file is part of GNU Emacs.
10
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
12 ;; it under the terms of the GNU General Public License as published by
13 ;; the Free Software Foundation; either version 3, or (at your option)
14 ;; any later version.
15
16 ;; GNU Emacs is distributed in the hope that it will be useful,
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 ;; GNU General Public License for more details.
20
21 ;; You should have received a copy of the GNU General Public License
22 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
23 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
24 ;; Boston, MA 02110-1301, USA.
25
26 ;;; Commentary:
27
28 ;;; Code:
29
30 ;; This file is autoloaded from calc-ext.el.
31
32 (require 'calc-ext)
33 (require 'calc-macs)
34
35 ;;; Memory commands.
36
37 (defvar calc-store-keep nil)
38 (defun calc-store (&optional var)
39   (interactive)
40   (let ((calc-store-keep t))
41     (calc-store-into var)))
42
43 (defvar calc-given-value-flag nil)
44 (defvar calc-given-value)
45
46 (defun calc-store-into (&optional var)
47   (interactive)
48   (calc-wrapper
49    (let ((calc-given-value nil)
50          (calc-given-value-flag 1))
51      (or var (setq var (calc-read-var-name "Store: " t)))
52      (if var
53          (let ((found (assq var '( ( + . calc-store-plus )
54                                    ( - . calc-store-minus )
55                                    ( * . calc-store-times )
56                                    ( / . calc-store-div )
57                                    ( ^ . calc-store-power )
58                                    ( | . calc-store-concat ) ))))
59            (if found
60                (funcall (cdr found))
61              (let ((msg
62                     (calc-store-value var (or calc-given-value (calc-top 1))
63                                       "" calc-given-value-flag)))
64                (message (concat "Stored to variable \"%s\"" msg)
65                         (calc-var-name var)))))
66        (setq var (calc-is-assignments (calc-top 1)))
67        (if var
68            (while var
69              (let ((msg
70                     (calc-store-value (car (car var)) (cdr (car var))
71                                       (if (not (cdr var)) "")
72                                       (if (not (cdr var)) 1))))
73                (message (concat "Stored to variable \"%s\"" msg)
74                         (calc-var-name (car (car var)))))
75              (setq var (cdr var))))))))
76
77 (defun calc-store-plus (&optional var)
78   (interactive)
79   (calc-store-binary var "+" '+))
80
81 (defun calc-store-minus (&optional var)
82   (interactive)
83   (calc-store-binary var "-" '-))
84
85 (defun calc-store-times (&optional var)
86   (interactive)
87   (calc-store-binary var "*" '*))
88
89 (defun calc-store-div (&optional var)
90   (interactive)
91   (calc-store-binary var "/" '/))
92
93 (defun calc-store-power (&optional var)
94   (interactive)
95   (calc-store-binary var "^" '^))
96
97 (defun calc-store-concat (&optional var)
98   (interactive)
99   (calc-store-binary var "|" '|))
100
101 (defun calc-store-neg (n &optional var)
102   (interactive "p")
103   (calc-store-binary var "n" '/ (- n)))
104
105 (defun calc-store-inv (n &optional var)
106   (interactive "p")
107   (calc-store-binary var "&" '^ (- n)))
108
109 (defun calc-store-incr (n &optional var)
110   (interactive "p")
111   (calc-store-binary var "n" '- (- n)))
112
113 (defun calc-store-decr (n &optional var)
114   (interactive "p")
115   (calc-store-binary var "n" '- n))
116
117 (defun calc-store-value (var value tag &optional pop)
118   (let ((msg ""))
119     (if var
120         (let ((old (calc-var-value var)))
121           (set var value)
122           (if pop (or calc-store-keep (calc-pop-stack pop)))
123           (calc-record-undo (list 'store (symbol-name var) old))
124           (if tag
125               (let ((calc-full-trail-vectors nil))
126                 (calc-record value (format ">%s%s" tag (calc-var-name var)))))
127           (cond
128            ((and (memq var '(var-e var-i var-pi var-phi var-gamma))
129                  (eq (car-safe old) 'special-const))
130             (setq msg (format " (Note: Built-in definition of %s has been lost)"
131                               (calc-var-name var))))
132            ((and (memq var '(var-inf var-uinf var-nan))
133                  (null old))
134             (setq msg (format " (Note: %s has built-in meanings which may interfere)"
135                               (calc-var-name var)))))
136           (calc-refresh-evaltos var)))
137     msg))
138
139 (defun calc-var-name (var)
140   (if (symbolp var) (setq var (symbol-name var)))
141   (if (string-match "\\`var-." var)
142       (substring var 4)
143     var))
144
145 (defun calc-store-binary (var tag func &optional val)
146   (calc-wrapper
147    (let ((calc-simplify-mode (if (eq calc-simplify-mode 'none)
148                                  'num calc-simplify-mode))
149          (value (or val (calc-top 1))))
150      (or var (setq var (calc-read-var-name (format "Store %s: " tag))))
151      (if var
152          (let ((old (calc-var-value var)))
153            (if (eq (car-safe old) 'special-const)
154                (error "\"%s\" is a special constant" (calc-var-name var)))
155            (if (not old)
156                (if (memq var '(var-inf var-uinf var-nan))
157                    (error "\"%s\" is a special variable" (calc-var-name var))
158                  (error "No such variable: \"%s\"" (calc-var-name var))))
159            (if (stringp old)
160                (setq old (math-read-expr old)))
161            (if (eq (car-safe old) 'error)
162                (error "Bad format in variable contents: %s" (nth 2 old)))
163            (calc-store-value var
164                              (calc-normalize (if (calc-is-inverse)
165                                                  (list func value old)
166                                                (list func old value)))
167                              tag (and (not val) 1))
168            (message "Variable \"%s\" changed" (calc-var-name var)))))))
169
170 (defvar calc-var-name-map nil "Keymap for reading Calc variable names.")
171 (if calc-var-name-map
172     ()
173   (setq calc-var-name-map (copy-keymap minibuffer-local-completion-map))
174   (define-key calc-var-name-map " " 'self-insert-command)
175   (mapcar (function
176            (lambda (x)
177              (define-key calc-var-name-map (char-to-string x)
178                'calcVar-digit)))
179           "0123456789")
180   (mapcar (function
181            (lambda (x)
182              (define-key calc-var-name-map (char-to-string x)
183                'calcVar-oper)))
184           "+-*/^|"))
185
186 (defvar calc-store-opers)
187
188 (defun calc-read-var-name (prompt &optional calc-store-opers)
189   (setq calc-given-value nil
190         calc-aborted-prefix nil)
191   (let ((var (concat
192               "var-"
193               (let ((minibuffer-completion-table
194                      (mapcar (lambda (x) (substring x 4))
195                              (all-completions "var-" obarray)))
196                     (minibuffer-completion-predicate
197                      (lambda (x) (boundp (intern (concat "var-" x)))))
198                     (minibuffer-completion-confirm t))
199                 (read-from-minibuffer prompt nil calc-var-name-map nil)))))
200     (setq calc-aborted-prefix "")
201     (and (not (equal var "var-"))
202          (if (string-match "\\`\\([-a-zA-Z0-9]+\\) *:?=" var)
203              (if (null calc-given-value-flag)
204                  (error "Assignment is not allowed in this command")
205                (let ((svar (intern (substring var 0 (match-end 1)))))
206                  (setq calc-given-value-flag 0
207                        calc-given-value (math-read-expr
208                                          (substring var (match-end 0))))
209                  (if (eq (car-safe calc-given-value) 'error)
210                      (error "Bad format: %s" (nth 2 calc-given-value)))
211                  (setq calc-given-value (math-evaluate-expr calc-given-value))
212                  svar))
213            (intern var)))))
214
215 (defun calcVar-digit ()
216   (interactive)
217   (if (calc-minibuffer-contains "\\'")
218       (if (eq calc-store-opers 0)
219           (beep)
220         (insert "q")
221         (self-insert-and-exit))
222     (self-insert-command 1)))
223
224 (defun calcVar-oper ()
225   (interactive)
226   (if (and (eq calc-store-opers t)
227            (calc-minibuffer-contains "\\'"))
228       (progn
229         (erase-buffer)
230         (self-insert-and-exit))
231     (self-insert-command 1)))
232
233 (defun calc-store-map (&optional oper var)
234   (interactive)
235   (calc-wrapper
236    (let* ((sel-mode nil)
237           (calc-dollar-values (mapcar 'calc-get-stack-element
238                                       (nthcdr calc-stack-top calc-stack)))
239           (calc-dollar-used 0)
240           (oper (or oper (calc-get-operator "Store Mapping")))
241           (nargs (car oper)))
242      (or var (setq var (calc-read-var-name (format "Store Mapping %s: "
243                                                    (nth 2 oper)))))
244      (if var
245          (let ((old (calc-var-value var)))
246            (if (eq (car-safe old) 'special-const)
247                (error "\"%s\" is a special constant" (calc-var-name var)))
248            (if (not old)
249                (if (memq var '(var-inf var-uinf var-nan))
250                    (error "\"%s\" is a special variable" (calc-var-name var))
251                  (error "No such variable: \"%s\"" (calc-var-name var))))
252            (let ((calc-simplify-mode (if (eq calc-simplify-mode 'none)
253                                          'num calc-simplify-mode))
254                  (values (and (> nargs 1)
255                               (calc-top-list (1- nargs) (1+ calc-dollar-used)))))
256              (message "Working...")
257              (calc-set-command-flag 'clear-message)
258              (if (stringp old)
259                  (setq old (math-read-expr old)))
260              (if (eq (car-safe old) 'error)
261                  (error "Bad format in variable contents: %s" (nth 2 old)))
262              (setq values (if (calc-is-inverse)
263                               (append values (list old))
264                             (append (list old) values)))
265              (calc-store-value var
266                                (calc-normalize (cons (nth 1 oper) values))
267                                (nth 2 oper)
268                                (+ calc-dollar-used (1- nargs)))
269              (message "Variable \"%s\" changed" (calc-var-name var))))))))
270
271
272 (defun calc-store-exchange (&optional var)
273   (interactive)
274   (calc-wrapper
275    (let ((calc-given-value nil)
276          (calc-given-value-flag 1)
277          top)
278      (or var (setq var (calc-read-var-name "Exchange with: ")))
279      (if var
280          (let ((value (calc-var-value var)))
281            (if (eq (car-safe value) 'special-const)
282                (error "\"%s\" is a special constant" (calc-var-name var)))
283            (if (not value)
284                (if (memq var '(var-inf var-uinf var-nan))
285                    (error "\"%s\" is a special variable" (calc-var-name var))
286                  (error "No such variable: \"%s\"" (calc-var-name var))))
287            (setq top (or calc-given-value (calc-top 1)))
288            (calc-store-value var top nil)
289            (calc-pop-push-record calc-given-value-flag
290                                  (concat "<>" (calc-var-name var)) value))))))
291
292 (defun calc-unstore (&optional var)
293   (interactive)
294   (calc-wrapper
295    (or var (setq var (calc-read-var-name "Unstore: ")))
296    (if var
297        (progn
298          (and (memq var '(var-e var-i var-pi var-phi var-gamma))
299               (eq (car-safe (calc-var-value var)) 'special-const)
300               (message "(Note: Built-in definition of %s has been lost)" var))
301          (if (and (boundp var) (symbol-value var))
302              (message "Unstored variable \"%s\"" (calc-var-name var))
303            (message "Variable \"%s\" remains unstored" (calc-var-name var)))
304          (makunbound var)
305          (calc-refresh-evaltos var)))))
306
307 (defun calc-let (&optional var)
308   (interactive)
309   (calc-wrapper
310    (let* ((calc-given-value nil)
311           (calc-given-value-flag 1)
312           thing value)
313      (or var (setq var (calc-read-var-name "Let variable: ")))
314      (if calc-given-value
315          (setq value calc-given-value
316                thing (calc-top 1))
317        (setq value (calc-top 1)
318              thing (calc-top 2)))
319      (setq var (if var
320                    (list (cons var value))
321                  (calc-is-assignments value)))
322      (if var
323          (calc-pop-push-record
324           (1+ calc-given-value-flag)
325           (concat "=" (calc-var-name (car (car var))))
326           (let ((saved-val (mapcar (function
327                                     (lambda (v)
328                                       (and (boundp (car v))
329                                            (symbol-value (car v)))))
330                                    var)))
331             (unwind-protect
332                 (let ((vv var))
333                   (while vv
334                     (set (car (car vv)) (calc-normalize (cdr (car vv))))
335                     (calc-refresh-evaltos (car (car vv)))
336                     (setq vv (cdr vv)))
337                   (math-evaluate-expr thing))
338               (while saved-val
339                 (if (car saved-val)
340                     (set (car (car var)) (car saved-val))
341                   (makunbound (car (car var))))
342                 (setq saved-val (cdr saved-val)
343                       var (cdr var)))
344               (calc-handle-whys))))))))
345
346 (defun calc-is-assignments (value)
347   (if (memq (car-safe value) '(calcFunc-eq calcFunc-assign))
348       (and (eq (car-safe (nth 1 value)) 'var)
349            (list (cons (nth 2 (nth 1 value)) (nth 2 value))))
350     (if (eq (car-safe value) 'vec)
351         (let ((vv nil))
352           (while (and (setq value (cdr value))
353                       (memq (car-safe (car value))
354                             '(calcFunc-eq calcFunc-assign))
355                       (eq (car-safe (nth 1 (car value))) 'var))
356             (setq vv (cons (cons (nth 2 (nth 1 (car value)))
357                                  (nth 2 (car value)))
358                            vv)))
359           (and (not value)
360                vv)))))
361
362 (defun calc-recall (&optional var)
363   (interactive)
364   (calc-wrapper
365    (or var (setq var (calc-read-var-name "Recall: ")))
366    (if var
367        (let ((value (calc-var-value var)))
368          (or value
369              (error "No such variable: \"%s\"" (calc-var-name var)))
370          (if (stringp value)
371              (setq value (math-read-expr value)))
372          (if (eq (car-safe value) 'error)
373              (error "Bad format in variable contents: %s" (nth 2 value)))
374          (setq value (calc-normalize value))
375          (let ((calc-full-trail-vectors nil))
376            (calc-record value (concat "<" (calc-var-name var))))
377          (calc-push value)))))
378
379 (defun calc-store-quick ()
380   (interactive)
381   (calc-store (intern (format "var-q%c" last-command-char))))
382
383 (defun calc-store-into-quick ()
384   (interactive)
385   (calc-store-into (intern (format "var-q%c" last-command-char))))
386
387 (defun calc-recall-quick ()
388   (interactive)
389   (calc-recall (intern (format "var-q%c" last-command-char))))
390
391 (defun calc-copy-special-constant (&optional sconst var)
392   (interactive)
393   (let ((sc '(("")
394               ("e" . (special-const (math-e)))
395               ("pi" . (special-const (math-pi)))
396               ("i" . (special-const (math-imaginary 1)))
397               ("phi" . (special-const (math-phi)))
398               ("gamma" . (special-const (math-gamma-const))))))
399   (calc-wrapper
400    (or sconst (setq sconst (completing-read "Special constant: " sc nil t)))
401    (unless (string= sconst "")
402      (let ((value (cdr (assoc sconst sc))))
403        (or var (setq var (calc-read-var-name
404                             (format "Copy special constant %s, to: "
405                                     sconst))))
406        (if var
407            (let ((msg (calc-store-value var value "")))
408              (message (concat "Special constant \"%s\" copied to \"%s\"" msg)
409                       sconst (calc-var-name var)))))))))
410
411 (defun calc-copy-variable (&optional var1 var2)
412   (interactive)
413   (calc-wrapper
414    (or var1 (setq var1 (calc-read-var-name "Copy variable: ")))
415    (if var1
416        (let ((value (calc-var-value var1)))
417          (or value
418              (error "No such variable: \"%s\"" (calc-var-name var1)))
419          (or var2 (setq var2 (calc-read-var-name
420                               (format "Copy variable: %s, to: "
421                                       (calc-var-name var1)))))
422          (if var2
423              (let ((msg (calc-store-value var2 value "")))
424                (message (concat "Variable \"%s\" copied to \"%s\"" msg)
425                         (calc-var-name var1) (calc-var-name var2))))))))
426
427 (defvar calc-last-edited-variable nil)
428 (defun calc-edit-variable (&optional var)
429   (interactive)
430   (calc-wrapper
431    (or var (setq var (calc-read-var-name
432                       (if calc-last-edited-variable
433                           (format "Edit (default %s): "
434                                   (calc-var-name calc-last-edited-variable))
435                         "Edit: "))))
436    (or var (setq var calc-last-edited-variable))
437    (if var
438        (let* ((value (calc-var-value var)))
439          (if (eq (car-safe value) 'special-const)
440              (error "%s is a special constant" var))
441          (setq calc-last-edited-variable var)
442          (calc-edit-mode (list 'calc-finish-stack-edit (list 'quote var))
443                          t
444                          (concat "Editing variable `" (calc-var-name var) "'. "))
445          (and value
446               (insert (math-format-nice-expr value (frame-width)) "\n")))))
447   (calc-show-edit-buffer))
448
449 (defun calc-edit-Decls ()
450   (interactive)
451   (calc-edit-variable 'var-Decls))
452
453 (defun calc-edit-EvalRules ()
454   (interactive)
455   (calc-edit-variable 'var-EvalRules))
456
457 (defun calc-edit-FitRules ()
458   (interactive)
459   (calc-edit-variable 'var-FitRules))
460
461 (defun calc-edit-GenCount ()
462   (interactive)
463   (calc-edit-variable 'var-GenCount))
464
465 (defun calc-edit-Holidays ()
466   (interactive)
467   (calc-edit-variable 'var-Holidays))
468
469 (defun calc-edit-IntegLimit ()
470   (interactive)
471   (calc-edit-variable 'var-IntegLimit))
472
473 (defun calc-edit-LineStyles ()
474   (interactive)
475   (calc-edit-variable 'var-LineStyles))
476
477 (defun calc-edit-PointStyles ()
478   (interactive)
479   (calc-edit-variable 'var-PointStyles))
480
481 (defun calc-edit-PlotRejects ()
482   (interactive)
483   (calc-edit-variable 'var-PlotRejects))
484
485 (defun calc-edit-AlgSimpRules ()
486   (interactive)
487   (calc-edit-variable 'var-AlgSimpRules))
488
489 (defun calc-edit-TimeZone ()
490   (interactive)
491   (calc-edit-variable 'var-TimeZone))
492
493 (defun calc-edit-Units ()
494   (interactive)
495   (calc-edit-variable 'var-Units))
496
497 (defun calc-edit-ExtSimpRules ()
498   (interactive)
499   (calc-edit-variable 'var-ExtSimpRules))
500
501 (defun calc-declare-variable (&optional var)
502   (interactive)
503   (calc-wrapper
504    (or var (setq var (calc-read-var-name "Declare: " 0)))
505    (or var (setq var 'var-All))
506    (let* (dp decl def row rp)
507      (or (and (calc-var-value 'var-Decls)
508               (eq (car-safe var-Decls) 'vec))
509          (setq var-Decls (list 'vec)))
510      (setq dp var-Decls)
511      (while (and (setq dp (cdr dp))
512                  (or (not (eq (car-safe (car dp)) 'vec))
513                      (/= (length (car dp)) 3)
514                      (progn
515                        (setq row (nth 1 (car dp))
516                              rp row)
517                        (if (eq (car-safe row) 'vec)
518                            (progn
519                              (while
520                                  (and (setq rp (cdr rp))
521                                       (or (not (eq (car-safe (car rp)) 'var))
522                                           (not (eq (nth 2 (car rp)) var)))))
523                              (setq rp (car rp)))
524                          (if (or (not (eq (car-safe row) 'var))
525                                  (not (eq (nth 2 row) var)))
526                              (setq rp nil)))
527                        (not rp)))))
528      (calc-unread-command ?\C-a)
529      (setq decl (read-string (format "Declare: %s  to be: " (calc-var-name var))
530                              (and rp
531                                   (math-format-flat-expr (nth 2 (car dp)) 0))))
532      (setq decl (and (string-match "[^ \t]" decl)
533                      (math-read-exprs decl)))
534      (if (eq (car-safe decl) 'error)
535          (error "Bad format in declaration: %s" (nth 2 decl)))
536      (if (cdr decl)
537          (setq decl (cons 'vec decl))
538        (setq decl (car decl)))
539      (and (eq (car-safe decl) 'vec)
540           (= (length decl) 2)
541           (setq decl (nth 1 decl)))
542      (calc-record (append '(vec) (list (math-build-var-name var))
543                           (and decl (list decl)))
544                   "decl")
545      (setq var-Decls (copy-sequence var-Decls))
546      (if (eq (car-safe row) 'vec)
547          (progn
548            (setcdr row (delq rp (cdr row)))
549            (or (cdr row)
550                (setq var-Decls (delq (car dp) var-Decls))))
551        (setq var-Decls (delq (car dp) var-Decls)))
552      (if decl
553          (progn
554            (setq dp (and (not (eq var 'var-All)) var-Decls))
555            (while (and (setq dp (cdr dp))
556                        (or (not (eq (car-safe (car dp)) 'vec))
557                            (/= (length (car dp)) 3)
558                            (not (equal (nth 2 (car dp)) decl)))))
559            (if dp
560                (setcar (cdr (car dp))
561                        (append (if (eq (car-safe (nth 1 (car dp))) 'vec)
562                                    (nth 1 (car dp))
563                                  (list 'vec (nth 1 (car dp))))
564                                (list (math-build-var-name var))))
565              (setq var-Decls (append var-Decls
566                                      (list (list 'vec
567                                                  (math-build-var-name var)
568                                                  decl)))))))
569      (calc-refresh-evaltos 'var-Decls))))
570
571 (defvar calc-dont-insert-variables '(var-FitRules var-FactorRules
572                                      var-CommuteRules var-JumpRules
573                                      var-DistribRules var-MergeRules
574                                      var-NegateRules var-InvertRules
575                                      var-IntegAfterRules
576                                      var-TimeZone var-PlotRejects
577                                      var-PlotData1 var-PlotData2
578                                      var-PlotData3 var-PlotData4
579                                      var-PlotData5 var-PlotData6
580                                      var-DUMMY))
581
582 ;; The variable calc-pv-pos is local to calc-permanent-variable, but
583 ;; used by calc-insert-permanent-variable, which is called by
584 ;; calc-permanent-variable.
585 (defvar calc-pv-pos)
586
587 (defun calc-permanent-variable (&optional var)
588   (interactive)
589   (calc-wrapper
590    (or var (setq var (calc-read-var-name "Save variable (default all): ")))
591    (let (calc-pv-pos)
592      (and var (or (and (boundp var) (symbol-value var))
593                   (error "No such variable")))
594      (set-buffer (find-file-noselect (substitute-in-file-name
595                                       calc-settings-file)))
596      (if var
597          (calc-insert-permanent-variable var)
598        (mapatoms (function
599                   (lambda (x)
600                     (and (string-match "\\`var-" (symbol-name x))
601                          (not (memq x calc-dont-insert-variables))
602                          (calc-var-value x)
603                          (not (eq (car-safe (symbol-value x)) 'special-const))
604                          (calc-insert-permanent-variable x))))))
605      (save-buffer))))
606
607
608
609 (defun calc-insert-permanent-variable (var)
610   (goto-char (point-min))
611   (if (search-forward (concat "(setq " (symbol-name var) " '") nil t)
612       (progn
613         (setq calc-pv-pos (point-marker))
614         (forward-line -1)
615         (if (looking-at ";;; Variable .* stored by Calc on ")
616             (progn
617               (delete-region (match-end 0) (progn (end-of-line) (point)))
618               (insert (current-time-string))))
619         (goto-char (- calc-pv-pos 8 (length (symbol-name var))))
620         (forward-sexp 1)
621         (backward-char 1)
622         (delete-region calc-pv-pos (point)))
623     (goto-char (point-max))
624     (insert "\n;;; Variable \""
625             (symbol-name var)
626             "\" stored by Calc on "
627             (current-time-string)
628             "\n(setq "
629             (symbol-name var)
630             " ')\n")
631     (backward-char 2))
632   (insert (prin1-to-string (calc-var-value var)))
633   (forward-line 1))
634
635 (defun calc-insert-variables (buf)
636   (interactive "bBuffer in which to save variable values: ")
637   (save-excursion
638     (set-buffer buf)
639     (mapatoms (function
640                (lambda (x)
641                  (and (string-match "\\`var-" (symbol-name x))
642                       (not (memq x calc-dont-insert-variables))
643                       (calc-var-value x)
644                       (not (eq (car-safe (symbol-value x)) 'special-const))
645                       (or (not (eq x 'var-Decls))
646                           (not (equal var-Decls '(vec))))
647                       (or (not (eq x 'var-Holidays))
648                           (not (equal var-Holidays '(vec (var sat var-sat)
649                                                          (var sun var-sun)))))
650                       (insert "(setq "
651                               (symbol-name x)
652                               " "
653                               (prin1-to-string
654                                (let ((calc-language
655                                       (if (memq calc-language '(nil big))
656                                           'flat
657                                         calc-language)))
658                                  (math-format-value (symbol-value x) 100000)))
659                               ")\n")))))))
660
661 (defun calc-assign (arg)
662   (interactive "P")
663   (calc-slow-wrapper
664    (calc-binary-op ":=" 'calcFunc-assign arg)))
665
666 (defun calc-evalto (arg)
667   (interactive "P")
668   (calc-slow-wrapper
669    (calc-unary-op "=>" 'calcFunc-evalto arg)))
670
671 (defun calc-subscript (arg)
672   (interactive "P")
673   (calc-slow-wrapper
674    (calc-binary-op "sub" 'calcFunc-subscr arg)))
675
676 (provide 'calc-store)
677
678 ;;; arch-tag: 2fbfec82-a521-42ca-bcd8-4f254ae6313e
679 ;;; calc-store.el ends here
680
Note: See TracBrowser for help on using the browser.