BSD 4_3 development
[unix-history] / usr / lib / lisp / cmutpl.l
CommitLineData
5ffa1c4c
C
1;;; cmu top level.
2;;; Eventually this file will be able to be read in along with
3;;; the standard franz top level and thus allow the user to select
4;;; (possible via the .lisprc) the top level he wants.
5;;;
6(setq rcs-cmutpl-
7 "$Header: /usr/lib/lisp/cmutpl.l,v 1.1 83/01/29 18:34:38 jkf Exp $")
8
9(eval-when (compile eval)
10 (or (get 'cmumacs 'version) (load 'cmumacs))
11 (or (get 'cmufncs 'version) (load 'cmufncs)))
12
13(declare (special history tlbuffer tlmacros historylength))
14
15(dv historylength 25)
16
17(def matchq
18 (lambda (x y)
19 (prog (xx yy)
20 (return
21 (cond
22 ((and (atom x) (atom y))
23 (cond ((matchq1 (setq xx (explode x)) (setq yy (explode y)))
24 (*** freelist xx)
25 (*** freelist yy)
26 t)
27 (t (*** freelist xx) (*** freelist yy)))))))))
28
29(def matchq1
30 (lambda (x y)
31 (prog nil
32 l1 (cond ((eq x y) (return t))
33 ((or (equal y '(@)) (equal x '(@))) (return t))
34 ((or (null x) (null y)) (return nil))
35 ((eq (car x) (car y))
36 (setq x (cdr x))
37 (setq y (cdr y))
38 (go l1))
39 (t (return nil))))))
40
41(def showevents
42 (lambda (evs)
43 (for-each ev
44 evs
45 (terpri)
46 (princ (car ev))
47 (princ '".")
48 (tlprint (cadr ev))
49 (cond ((cddr ev) (terpri) (tlprint (caddr ev)))))))
50
51(def tleval
52 (lambda (exp)
53 (prog (val)
54 (setq val (eval exp))
55 (rplacd (cdar history) (ncons val))
56 (return val))))
57
58(def tlgetevent
59 (lambda (x)
60 (cond ((null x) (car history))
61 ((and (fixp x) (plusp x)) (assoc x history))
62 ((and (fixp x) (minusp x)) (car (Cnth history (minus x)))))))
63
64(dv tlmacros
65 ((ed lambda
66 (x)
67 (prog (exp)
68 (cond ((setq exp (copy (cadr (tlgetevent (cadr x)))))
69 (edite exp nil nil)
70 (return (ncons exp)))
71 (t (princ '"No such event")))))
72 (redo lambda
73 (x)
74 (prog (exp)
75 (cond ((setq exp (tlgetevent (cadr x)))
76 (return (ncons (cadr exp))))
77 (t (princ '"No such event")))))
78 (?? lambda
79 (x)
80 (prog (e1 e2 rest)
81 (cond ((null (cdr x)) (showevents (reverse history)))
82 ((null (setq e1 (tlgetevent (cadr x))))
83 (princ '"No such event as ")
84 (princ (cadr x)))
85 ((null (cddr x)) (showevents (ncons e1)))
86 ((null (setq e2 (tlgetevent (caddr x))))
87 (princ '"No such event as ")
88 (princ (caddr x)))
89 (t (setq e1 (memq e1 history))
90 (cond ((setq rest (memq e2 e1))
91 (showevents
92 (cons e2 (reverse (ldiff e1 rest)))))
93 (t
94 (showevents
95 (cons (car e1)
96 (reverse
97 (ldiff (memq e2 history) e1))))))))))))
98
99(def tlprint
100 (lambda (x)
101 (prinlev x 4)))
102
103(def tlquote
104 (lambda (x)
105 (prog (ans)
106 l (cond ((null x) (return (reverse ans)))
107 ((eq (car x) '!)
108 (setq ans (cons (cadr x) ans))
109 (setq x (cddr x)))
110 (t (setq ans (cons (kwote (car x)) ans)) (setq x (cdr x))))
111 (go l))))
112
113(def tlread
114 (lambda nil
115 (prog (cmd tmp)
116 top (cond ((not (boundp 'history)) (setq history nil)))
117 (cond
118 ((null tlbuffer)
119 (terpri)
120 (princ (add1 (cond (history (caar history)) (t 0))))
121 (princ '".")
122 (cond
123 ((null (setq tlbuffer (lineread)))
124 (princ 'Bye)
125 (terpri)
126 (exit)))))
127 (cond ((not (atom (setq cmd (car tlbuffer))))
128 (setq tlbuffer (cdr tlbuffer))
129 (go record))
130 ((setq cmd (assoc cmd tlmacros))
131 (setq tmp tlbuffer)
132 (setq tlbuffer nil)
133 (setq cmd (apply (cdr cmd) (ncons tmp)))
134 (cond ((atom cmd) (go top))
135 (t (setq cmd (car cmd)) (go record))))
136 ((and (null (cdr tlbuffer))
137 (or (numberp (car tlbuffer))
138 (stringp (car tlbuffer))
139 (hunkp (car tlbuffer))
140 (boundp (car tlbuffer))))
141 (setq cmd (car tlbuffer))
142 (setq tlbuffer nil)
143 (go record))
144 ((or (and (dtpr (getd (car tlbuffer)))
145 (memq (car (getd (car tlbuffer)))
146 '(lexpr lambda)))
147 (and (bcdp (getd (car tlbuffer)))
148 (eq (getdisc (getd (car tlbuffer)))
149 'lambda)))
150 (setq cmd (cons (car tlbuffer) (tlquote (cdr tlbuffer))))
151 (setq tlbuffer nil)
152 (go record)))
153 (setq cmd tlbuffer)
154 (setq tlbuffer nil)
155 record
156 (setq history
157 (cons (list (add1 (cond (history (caar history)) (t 0))) cmd)
158 history))
159 (cond
160 ((dtpr (cdr (setq tmp (Cnth history historylength))))
161 (rplacd tmp nil)))
162 (return cmd)))]
163
164(def cmu-top-level
165 (lambda nil
166 (prog (tlbuffer)
167 l (tlprint (tleval (tlread)))
168 (go l)))]
169
170; LWE 1/11/81 The following might make this sucker work after resets:
171
172(setq user-top-level 'cmu-top-level)
173(putd 'user-top-level (getd 'cmu-top-level))
174(setq top-level 'cmu-top-level)
175(putd 'top-level (getd 'cmu-top-level))
176
177(def transprint
178 (lambda (prt)
179 (prog nil
180 l (cond ((memq (tyipeek prt) '(27 -1)) (return nil))
181 (t (tyo (tyi prt)) (go l))))))
182
183(def valueof
184 (lambda (x)
185 (caddr (tlgetevent x))))
186
187(def zap
188 (lambda (prt)
189 (prog nil
190 l (cond ((memq (tyi prt) '(10 -1)) (return nil)) (t (go l))))))
191(dv dc-switch dc-define)