+Better naming for main parser functions
[lineal.git] / src / globals.lisp
blobc9fef426da43d5a0617d86a0dae7e53aae76554d
2 (defpackage :lineal.client-vars)
4 (defpackage :lineal
5 (:use :cl :lineal.overload)
6 (:export *saved-numbers*
7 *saved-tuples* *saved-matrices*
8 recall-vrbl store-vrbl
9 process-input-from-stream
10 process-input-from-string
11 save-to-stream restore-from-stream))
13 (in-package :lineal)
15 (defparameter *saved-numbers* nil)
16 (defparameter *saved-tuples* nil)
17 (defparameter *saved-matrices* nil)
19 ;V Get a variable out of memory.V
20 (defun recall-vrbl
21 (k &optional (ksym (find-symbol k :lineal.client-vars)))
22 (macrolet
23 ((del-k-from
24 (lis)
25 `(setf ,lis (delete k ,lis :test #'string=))))
26 (when (and ksym (boundp ksym))
27 (typecase (symbol-value ksym)
28 (number (del-k-from *saved-numbers*))
29 (tuple (del-k-from *saved-tuples*))
30 (mtrix (del-k-from *saved-matrices*)))
31 (makunbound ksym))))
33 (defun over-recall (&rest args)
34 (mapc #'recall-vrbl args)
35 (format nil "Recalled: ~{~A~#[~:;, ~]~}" args))
37 (defun store-vrbl
38 (k v &optional (ksym (intern k :lineal.client-vars)))
39 (macrolet
40 ((add-k-to
41 (lis)
42 `(setf ,lis (merge 'list ,lis (list k)
43 #'string<))))
44 ;V If something's already stored V
45 ;V under the name, recall it. V
46 (when (boundp ksym)
47 (recall-vrbl k ksym))
48 (typecase v
49 (number (add-k-to *saved-numbers*))
50 (tuple (add-k-to *saved-tuples*))
51 (mtrix (add-k-to *saved-matrices*))))
52 (set ksym v))
54 (defun over-store (k v)
55 (if (stringp k)
56 (store-vrbl k v)
57 (throw
58 'wtfvar
59 "Store usage: (store \"[name]\" [value])
60 where [name] is what you want the variable to be called
61 and [value] is its desired value.")))