Removed definition "LIB= rpc". We want libc.a to contain librpc.a, not
[unix-history] / .ref-BSD-4_3_Net_2 / usr / src / usr.bin / lisp / pearl / fix.l
CommitLineData
7129096e
C
1;;;;;;;;;;;;;;;;;;;;;;;;;;;;; fix.l ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2; The fixit debugger modified to use "pearlfixprintfn" and to allow
3; use of "> fcnname" or "> 'newvalue" in case of an undefined
4; function or unbound variable respectively.
5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6
7; Modified for use with PEARL by Joe Faletti 1/6/82
8
9;; (eval-when (compile eval)
10;; (or (get 'cmumacs 'version) (load 'cmumacs)))
11; Only the necessary functions are included, below
12; dv (=defv), ***, lineread, and ty
13
14;--- dv :: set variable to value
15; (dv name value) name is setq'ed to value (no evaluation)
16; (same as defv)
17;
18(defmacro dv (name value)
19 `(setq ,name ',value))
20
21;--- *** :: comment macro
22;
23(defmacro *** (&rest x) nil)
24
25(defmacro lineread (&optional (x nil))
26 `(%lineread ,x))
27
28(def ty (macro (f) (append '(exec cat) (cdr f))))
29
30; LWE 1/11/81 Hack hack....
31;
32; LWE 1/11/81 Bet you didn't know this, but this won't work INTERPRETED,
33; but Dave assures me it works compiled. (In MACLisp...)
34;
35(declare (special cmd frame x cnt var init label part incr limit selectq))
36
37(dv fixfns
38 ((*** This is FIXIT written by David Touretzky and adapted to Franz by Don
39 Cohen)
40 (declare (special framelist rframelist interrupt-handlers handler-labels)
41 (special prinlevel prinlength evalhook-switch traced-stuff)
42 (special lastword piport hush-debug)
43 (*fexpr editf step type))
44 (sstatus feature fixit)
45 (*rset t)
46 ER%tpl
47 fixit
48 debug
49 debug-iter
50 debug1
51 debug-bktrace
52 Pdebug-print
53 Pdebug-print1
54 debug-findcall
55 debug-scanflist
56 debug-scanstk
57 debug-getframes
58 debug-nextframe
59 debug-upframe
60 debug-dnframe
61 debug-upfn
62 debug-dnfn
63 debug-showvar
64 debug-nedit
65 debug-insidep
66 debug-findusrfn
67 debug-findexpr
68 debug-replace-function-name
69 debug-pop
70 debug-where
71 debug-sysp
72 interrupt-handlers
73 handler-labels
74 (or (boundp 'traced-stuff) (setq traced-stuff nil))
75 (or (boundp 'evalhook-switch) (setq evalhook-switch nil))
76 (setq hush-debug nil)))
77
78(or (boundp 'traced-stuff) (setq traced-stuff nil))
79(or (boundp 'evalhook-switch) (setq evalhook-switch nil))
80(or (boundp 'debug-sysmode) (setq debug-sysmode nil))
81(setq hush-debug nil)
82
83(*** This is FIXIT written by David Touretzky and adapted to Franz by Don Cohen)
84
85(declare (special framelist rframelist interrupt-handlers handler-labels)
86 (special prinlevel prinlength evalhook-switch traced-stuff)
87 (special lastword piport hush-debug debug-sysmode)
88 (*fexpr editf step type)
89 (special system-functions\\a))
90
91(sstatus feature fixit)
92
93(*rset t)
94
95(progn 'compile
96 (dv ER%tpl fixit)
97 (dv ER%brk fixit)
98 (dv ER%err fixit)
99 )
100
101(def fixit
102 (nlambda (l)
103 (prog (piport)
104 (do nil (nil) (eval (cons 'debug l))))))
105
106(def debug
107 (nlambda (params)
108 (prog (cmd frame framelist rframelist nframe val infile)
109 (setq infile t)
110 (and evalhook-switch (step nil))
111 (setq rframelist
112 (reverse
113 (setq framelist
114 (or (debug-getframes)
115 (list
116 (debug-scanstk '(nil) '(debug)))))))
117 (setq frame (debug-findexpr (car framelist)))
118 ;(tab 0)
119 ; top level ones and calls to err and break.
120 (cond
121 ((and (car params) (not (eq (car params) 'edit)))
122 (terpri)
123; (princ '|;debug |)
124; (princ params)
125 (princ (cadddr params))
126 (cond ((cddddr params)
127 (princ '| -- |)
128 (princ (cddddr params))))
129 (terpri)
130 (go loop)))
131 (Pdebug-print1 frame nil)
132 (terpri)
133 (cond (hush-debug (setq hush-debug nil) (go loop))
134 ((not (memq 'edit params)) (go loop)))
135 (drain nil)
136 (princ '|type e to edit, <cr> to debug: |)
137 (setq val (tyi))
138 (cond ((or (\=& val 69) (\=& val 101))
139 (and (errset (debug-nedit frame))
140 (setq cmd '(ok))
141 (go cmdr)))
142 ((or (\=& val 78) (\=& val 110)) (terpri) (debug-pop)))
143 loop (terpri)
144 (princ ':)
145 (cond ((null (setq cmd (lineread)))
146 (terpri) (reset)))
147 cmdr (cond
148 ((dtpr (car cmd))
149 (setq val (eval (car cmd) (cadddr frame)))
150 (pearlfixprintfn val)
151; (print (valform val))
152 (terpri)
153 (go loop)))
154 (setq nframe (debug1 cmd frame))
155 (and (not (atom nframe)) (setq frame nframe) (go loop))
156 (print (or nframe (car cmd)))
157 (princ '" Huh? - type h for help")
158 (go loop))))
159
160(def debug-iter
161 (macro (x)
162 (cons 'prog
163 (cons 'nil
164 (cons 'loop
165 (cons (list 'setq 'nframe (cadr x))
166 '((setq cnt (|1-| cnt))
167 (and (or (null nframe) (\=& 0 cnt))
168 (return nframe))
169 (setq frame nframe)
170 (go loop))))))))
171
172(def debug1
173 (lambda (cmd frame)
174 (prog (nframe val topframe cnt item)
175 (setq topframe (car framelist))
176 (or (eq (typep (car cmd)) 'symbol) (return nil))
177 ; if "> name", replace function name with new atom
178 (and (eq (car cmd) '>)
179 (return (debug-replace-function-name cmd topframe)))
180 (and (eq (getchar (car cmd) 1) 'b)
181 (eq (getchar (car cmd) 2) 'k)
182 (return (debug-bktrace cmd frame)))
183 (setq cnt
184 (cond ((fixp (cadr cmd)) (cadr cmd))
185 ((fixp (caddr cmd)) (caddr cmd))
186 (t 1)))
187 (and (<& cnt 1) (setq cnt 1))
188 (setq item
189 (cond ((symbolp (cadr cmd)) (cadr cmd))
190 ((symbolp (caddr cmd)) (caddr cmd))))
191 (and item
192 (cond ((memq (car cmd) '(u up))
193 (setq cmd (cons 'ups (cdr cmd))))
194 ((memq (car cmd) '(d dn))
195 (setq cmd (cons 'dns (cdr cmd))))))
196 (selectq (car cmd)
197 (top (Pdebug-print1 (setq frame topframe) nil))
198 (bot (Pdebug-print1 (setq frame (car rframelist)) nil))
199 (p (Pdebug-print1 frame nil))
200 (pp (valprint (caddr frame)))
201 (where (debug-where frame))
202 (help
203 (cond ((cdr cmd) (eval cmd))
204 (t (ty |/usr/lisp/doc/fixit.ref|))))
205 ((\? h) (ty |/usr/lisp/doc/fixit.ref|))
206 ((go ok)
207 (setq frame (debug-findexpr topframe))
208 (cond ((eq (caaddr frame) 'debug)
209 (freturn (cadr frame) t))
210 (t (fretry (cadr frame) frame))))
211 (pop (debug-pop))
212 (step (setq frame (debug-findexpr frame))
213 (step t)
214 (fretry (cadr (debug-dnframe frame)) frame))
215 (redo (and item
216 (setq frame
217 (debug-findcall item frame framelist)))
218 (and frame (fretry (cadr frame) frame)))
219 (return (setq val (eval (cadr cmd)))
220 (freturn (cadr frame) val))
221 (edit (debug-nedit frame))
222 (editf
223 (cond ((null item)
224 (setq frame
225 (or (debug-findusrfn (debug-nedit frame))
226 (car rframelist))))
227 ((dtpr (getd item))
228 (errset (funcall 'editf (list item))))
229 (t (setq frame nil))))
230 (u (debug-iter (debug-upframe frame))
231 (cond
232 ((null nframe) (terpri) (princ '|<top of stack>|)))
233 (Pdebug-print1 (setq frame (or nframe frame)) nil))
234 (d (setq nframe
235 (or (debug-iter (debug-dnframe frame)) frame))
236 (Pdebug-print1 nframe nil)
237 (cond ((eq frame nframe)
238 (terpri)
239 (princ '|<bottom of stack>|))
240 (t (setq frame nframe))))
241 (up (setq nframe (debug-iter (debug-upfn frame)))
242 (cond
243 ((null nframe) (terpri) (princ '|top of stack|)))
244 (setq frame (or nframe topframe))
245 (Pdebug-print1 frame nil))
246 (dn (setq frame
247 (or (debug-iter (debug-dnfn frame))
248 (car rframelist)))
249 (Pdebug-print1 frame nil)
250 (cond
251 ((not (eq frame nframe))
252 (terpri)
253 (princ '|<bottom of stack>|))))
254 (ups (setq frame
255 (debug-iter
256 (debug-findcall item frame rframelist)))
257 (and frame (Pdebug-print1 frame nil)))
258 (dns (setq frame
259 (debug-iter
260 (debug-findcall item frame framelist)))
261 (and frame (Pdebug-print1 frame nil)))
262 (sys (setq debug-sysmode (not debug-sysmode))
263 (patom "sysmode now ")(patom debug-sysmode) (terpr))
264 (otherwise
265 (cond ((not (dtpr (car cmd)))
266 (*** should there also be a boundp test here)
267 (debug-showvar (car cmd) frame))
268 (t (setq frame (car cmd))))))
269 (return (or frame item)))))
270
271(def debug-replace-function-name
272 (lambda (cmd frame) (prog (oldname newname errorcall nframe)
273 (setq errorcall (caddr frame))
274 (cond ((eq (caddddr errorcall) '|eval: Undefined function |)
275 (setq oldname (cadddddr errorcall))
276 (setq newname (cadr cmd))
277 (setq cnt 3)
278 (setq frame (debug-iter (debug-dnframe frame)))
279 (dsubst newname oldname frame)
280 (fretry (cadr frame) frame))
281 ((eq (caddddr errorcall) '|Unbound Variable:|)
282 (setq oldname (cadddddr errorcall))
283 (setq newname (eval (cadr cmd)))
284 (setq cnt 3)
285 (setq frame (debug-iter (debug-dnframe frame)))
286 (dsubst newname oldname frame)
287 (fretry (cadr frame) frame))
288 ( t (return nil))))))
289
290(def debug-bktrace
291 (lambda (cmd oframe)
292 (prog (sel cnt item frame nframe)
293 (mapc '(lambda (x)
294 (setq sel
295 (cons (selectq x
296 (f 'fns)
297 (a 'sysp)
298 (v 'bind)
299 (e 'expr)
300 (c 'current)
301 (otherwise 'bogus))
302 sel)))
303 (cddr (explodec (car cmd))))
304 (setq item
305 (cond ((eq (typep (cadr cmd)) 'symbol) (cadr cmd))
306 ((eq (typep (caddr cmd)) 'symbol) (caddr cmd))))
307 (cond ((debug-sysp item) (setq sel (cons 'sysp sel)))
308 ((not (memq 'sysp sel))
309 (setq sel (cons 'user sel))))
310 (setq cnt
311 (cond ((fixp (cadr cmd)) (cadr cmd))
312 ((fixp (caddr cmd)) (caddr cmd))
313 (item 1)))
314 (cond ((null cnt)
315 (setq frame
316 (cond ((memq 'current sel) oframe)
317 (t (car rframelist))))
318 (go dbpr))
319 ((null item)
320 (setq frame (car framelist))
321 (and (or (not (memq 'user sel))
322 (atom (caddr (car framelist)))
323 (not (debug-sysp (caaddr (car framelist)))))
324 (setq cnt (|1-| cnt)))
325 (setq frame
326 (cond ((\=& 0 cnt) frame)
327 ((memq 'user sel)
328 (debug-iter (debug-dnfn frame)))
329 (t (debug-iter (debug-dnframe frame)))))
330 (setq frame (or frame (car rframelist)))
331 (go dbpr))
332 (t (setq frame (car framelist))))
333 (setq frame
334 (cond ((and (\=& cnt 1)
335 (not (atom (caddr (car framelist))))
336 (eq item (caaddr (car framelist))))
337 (car framelist))
338 ((debug-iter (debug-findcall item frame framelist)))
339 (t (car rframelist))))
340 dbpr (Pdebug-print frame sel oframe)
341 (cond ((eq frame (car rframelist))
342 (terpri)
343 (princ '|<bottom of stack>|)
344 (terpri))
345 (t (terpri)))
346 (cond
347 ((memq 'bogus sel)
348 (terpri)
349 (princ (car cmd))
350 (princ '| contains an invalid bk modifier|)))
351 (return oframe))))
352
353(def Pdebug-print
354 (lambda (frame sel ptr)
355 (prog (curframe)
356 (setq curframe (car framelist))
357 loop (cond ((not
358 (and (memq 'user sel)
359 (not (atom (caddr curframe)))
360 (debug-sysp (caaddr curframe))))
361 (Pdebug-print1 curframe sel)
362 (and (eq curframe ptr) (princ '| <--- you are here|)))
363 ((eq curframe ptr)
364 (terpri)
365 (princ '| <--- you are somewhere in here|)))
366 (and (eq curframe frame) (return frame))
367 (setq curframe (debug-dnframe curframe))
368 (or curframe (return frame))
369 (go loop))))
370
371(def Pdebug-print1
372 (lambda (frame sel)
373 (prog (prinlevel prinlength varlist)
374 (and (not (memq 'expr sel))
375 (setq prinlevel 2)
376 (setq prinlength 5))
377 (cond
378 ((atom (caddr frame))
379 (terpri)
380 (princ '| |)
381 (pearlfixprintfn (caddr frame))
382; (print (valform (caddr frame)))
383 (princ '| <- eval error|)
384 (return t)))
385 (and (memq 'bind sel)
386 (cond ((memq (caaddr frame) '(prog lambda))
387 (setq varlist (cadr (caddr frame))))
388 ((and (atom (caaddr frame)) (dtpr (getd (caaddr frame))))
389 (setq varlist (cadr (getd (caaddr frame))))))
390 (mapc (function
391 (lambda (v)
392 (debug-showvar v
393 (or (debug-upframe frame)
394 frame))))
395 (cond ((and varlist (atom varlist)) (ncons varlist))
396 (t varlist))))
397 (and (memq 'user sel)
398 (debug-sysp (caaddr frame))
399 (return nil))
400 (cond ((memq (caaddr frame) interrupt-handlers)
401 (terpri)
402 (princ '<------------)
403 (print (cadr (assq (caaddr frame) handler-labels)))
404 (princ '-->))
405 ((eq (caaddr frame) 'debug)
406 (terpri)
407 (princ '<------debug------>))
408 ((memq 'fns sel)
409 (terpri)
410 (and (debug-sysp (caaddr frame)) (princ '| |))
411 (print (caaddr frame)))
412 (t (terpri)
413 (pearlfixprintfn
414 (cond ((eq (car frame) 'eval) (caddr frame))
415 (t (cons (caaddr frame) (cadr (caddr frame))))))
416; (print
417; (valform
418; (cond ((eq (car frame) 'eval) (caddr frame))
419; (t (cons (caaddr frame) (cadr (caddr frame)))))))
420 ))
421 (or (not (symbolp (caaddr frame)))
422 (eq (caaddr frame) (concat (caaddr frame)))
423 (princ '| <not interned>|))
424 (return t))))
425
426(def debug-findcall
427 (lambda (fn frame flist)
428 (prog nil
429 loop (setq frame (debug-nextframe frame flist nil))
430 (or frame (return nil))
431 (cond ((atom (caddr frame))
432 (cond ((eq (caddr frame) fn) (return frame)) (t (go loop))))
433 ((eq (caaddr frame) fn) (return frame))
434 (t (go loop))))))
435
436(def debug-scanflist
437 (lambda (frame fnset)
438 (prog nil
439 loop (or frame (return nil))
440 (and (not (atom (caddr frame)))
441 (memq (caaddr frame) fnset)
442 (return frame))
443 (setq frame (debug-dnframe frame))
444 (go loop))))
445
446(def debug-scanstk
447 (lambda (frame fnset)
448 (prog nil
449 loop (or frame (return nil))
450 (and (not (atom (caddr frame)))
451 (memq (caaddr frame) fnset)
452 (return frame))
453 (setq frame (evalframe (cadr frame)))
454 (go loop))))
455
456(def debug-getframes
457 (lambda nil
458 (prog (flist fnew)
459 (setq fnew
460 (debug-scanstk '(nil)
461 (cons 'debug interrupt-handlers)))
462 loop (and (not debug-sysmode)
463 (not (atom (caddr fnew)))
464 (eq (caaddr fnew) 'debug)
465 (eq (car (evalframe (cadr fnew))) 'apply)
466 (memq (caaddr (evalframe (cadr fnew))) interrupt-handlers)
467 (setq fnew (evalframe (cadr fnew))))
468 (and (not debug-sysmode)
469 (null flist)
470 (eq (car fnew) 'apply)
471 (memq (caaddr fnew) interrupt-handlers)
472 (setq fnew (evalframe (cadr fnew))))
473 (and (not debug-sysmode)
474 (eq (car fnew) 'apply)
475 (eq (typep (caaddr fnew)) 'symbol)
476 (not (eq (caaddr fnew) (concat (caaddr fnew))))
477 (setq fnew (evalframe (cadr fnew)))
478 (setq fnew (evalframe (cadr fnew)))
479 (setq fnew (evalframe (cadr fnew)))
480 (setq fnew (evalframe (cadr fnew)))
481 (go loop))
482 (and (not debug-sysmode)
483 (not (atom (caddr fnew)))
484 (memq (caaddr fnew) '(evalhook* evalhook))
485 (setq fnew (evalframe (cadr fnew)))
486 (go loop))
487 (and (not debug-sysmode)
488 (eq (car fnew) 'apply)
489 (eq (caaddr fnew) 'eval)
490 (cadadr (caddr fnew))
491 (or (not (fixp (cadadr (caddr fnew))))
492 (\= (cadadr (caddr fnew)) -1))
493 (setq fnew (evalframe (cadr fnew)))
494 (go loop))
495 (and fnew
496 (setq flist (cons fnew flist))
497 (setq fnew (evalframe (cadr fnew)))
498 (go loop))
499 (return (nreverse flist)))))
500
501(def debug-nextframe
502 (lambda (frame flist sel)
503 (prog nil
504 (setq flist (cdr (memq frame flist)))
505 (and (not (memq 'user sel)) (return (car flist)))
506 loop (or flist (return nil))
507 (cond
508 ((or (atom (caddr (car flist)))
509 (not (debug-sysp (caaddr (car flist)))))
510 (return (car flist))))
511 (setq flist (cdr flist))
512 (go loop))))
513
514(def debug-upframe
515 (lambda (frame)
516 (debug-nextframe frame rframelist nil)))
517
518(def debug-dnframe
519 (lambda (frame)
520 (debug-nextframe frame framelist nil)))
521
522(def debug-upfn
523 (lambda (frame)
524 (debug-nextframe frame rframelist '(user))))
525
526(def debug-dnfn
527 (lambda (frame)
528 (debug-nextframe frame framelist '(user))))
529
530(def debug-showvar
531 (lambda (var frame)
532 (terpri)
533 (princ '| |)
534 (princ var)
535 (princ '| = |)
536 (pearlfixprintfn
537 ((lambda (val) (cond ((atom val) '\?) (t (car val))))
538 (errset (eval var (cadddr frame)) nil)))))
539; (print
540; (valform
541; ((lambda (val) (cond ((atom val) '\?) (t (car val))))
542; (errset (eval var (cadddr frame)) nil))))))
543
544(def debug-nedit
545 (lambda (frame)
546 (prog (val body elem nframe)
547 (setq elem (caddr frame))
548 (setq val frame)
549 scan (setq val (debug-findusrfn val))
550 (or val (go nofn))
551 (setq body (getd (caaddr val)))
552 (cond ((debug-insidep elem body)
553 (princ '\=)
554 (print (caaddr val))
555 (edite body
556 (list 'f (cons '\=\= elem) 'tty:)
557 (caaddr val))
558 (return frame))
559 ((or (eq elem (caddr val)) (debug-insidep elem (caddr val)))
560 (setq val (debug-dnframe val))
561 (go scan)))
562 nofn (setq nframe (debug-dnframe frame))
563 (or nframe (go doit))
564 (and (debug-insidep elem (caddr nframe))
565 (setq frame nframe)
566 (go nofn))
567 doit (edite (caddr frame)
568 (and (debug-insidep elem (caddr frame))
569 (list 'f (cons '\=\= elem) 'tty:))
570 nil)
571 (return frame))))
572
573(def debug-insidep
574 (lambda (elem expr)
575 (car (errset (edite expr (list 'f (cons '\=\= elem)) nil)))))
576
577(def debug-findusrfn
578 (lambda (frame)
579 (cond ((null frame) nil)
580 ((and (dtpr (caddr frame))
581 (symbolp (caaddr frame))
582 (dtpr (getd (caaddr frame))))
583 frame)
584 (t (debug-findusrfn (debug-dnframe frame))))))
585
586(def debug-findexpr
587 (lambda (frame)
588 (cond ((null frame) nil)
589 ((and (eq (car frame) 'eval) (not (atom (caddr frame))))
590 frame)
591 (t (debug-findexpr (debug-dnframe frame))))))
592
593(def debug-pop
594 (lambda nil
595 (prog (frame)
596 (setq frame (car framelist))
597 l (cond ((null (setq frame (evalframe (cadr frame))))(reset)))
598 (cond ((and (dtpr (caddr frame))(eq (caaddr frame) 'debug))
599 (freturn (cadr frame) nil)))
600 (go l))))
601
602(def debug-where
603 (lambda (frame)
604 (prog (lev diff nframe)
605 (setq lev (- (length framelist) (length (memq frame rframelist))))
606 (setq diff (- (length framelist) lev 1))
607 (Pdebug-print1 frame nil)
608 (terpri)
609 (cond ((\=& 0 diff) (princ '|you are at top of stack.|))
610 ((\=& 0 lev) (princ '|you are at bottom of stack.|))
611 (t (princ '|you are |)
612 (princ diff)
613 (cond ((\=& diff 1) (princ '| frame from the top.|))
614 (t (princ '| frames from the top.|)))))
615 (terpri)
616 (and (or (atom (caddr frame)) (not (eq (car frame) 'eval)))
617 (return nil))
618 (setq lev 0)
619 (setq nframe frame)
620 lp (and (setq nframe (debug-findcall (caaddr nframe) nframe framelist))
621 (setq lev (|1+| lev))
622 (go lp))
623 (princ '|there are |)
624 (princ lev)
625 (princ '| |)
626 (princ (caaddr frame))
627 (princ '|'s below.|)
628 (terpri))))
629
630(def debug-sysp
631 (lambda (x)
632 (and (sysp x) (symbolp x) (not (dtpr (getd x))))))
633
634(dv interrupt-handlers (fixit))
635
636(dv handler-labels
637 ((fixit error)
638 (debug-ubv-handler ubv)
639 (debug-udf-handler udf)
640 (debug-fac-handler fac)
641 (debug-ugt-handler ugt)
642 (debug-wta-handler wta)
643 (debug-wna-handler wna)
644 (debug-iol-handler iol)
645 (debug-*rset-handler rst)
646 (debug-mer-handler mer)
647 (debug-gcd-handler gcd)
648 (debug-gcl-handler gcl)
649 (debug-gco-handler gco)
650 (debug-pdl-handler pdl)))
651
652
653(or (boundp 'traced-stuff) (setq traced-stuff nil))
654
655(or (boundp 'evalhook-switch) (setq evalhook-switch nil))
656
657(setq hush-debug nil)
658
659
660;; other functions grabbed from other cmu files to make this file complete
661;; unto itself
662
663;- from sysfunc.l
664
665(defun build-sysp nil
666 (do ((temp (oblist) (cdr temp))
667 (sysfuncs))
668 ((null temp)(setq system-functions\\a sysfuncs));atom has ^G at end
669 (cond ((getd (car temp))
670 (setq sysfuncs (cons (car temp) sysfuncs))))))
671
672(defun sysp (x) ; (cond ((memq x system-functions\\a)t))
673 (memq x '(funcallhook* funcallhook evalhook evalhook*
674 continue-evaluation)))
675
676(or (boundp 'system-functions\\a) (build-sysp))
677
678(defun fretry (pdlpnt frame)
679 (freturn pdlpnt
680 (cond ((eq (car frame) 'eval) (eval (caddr frame) (cadddr frame)))
681 ((eq (car frame) 'apply)
682 (eval `(apply ',(caaddr frame) ',(cadaddr frame))
683 (cadddr frame))))))
684
685
686; - from cmu.l
687
688(def %lineread
689 (lambda (chan)
690 (prog (ans)
691 loop (setq ans (cons (read chan 'EOF) ans))
692 (cond ((eq (car ans) 'EOF) (return (reverse (cdr ans)))))
693 loop2(cond ((eq 10 (tyipeek chan)) (return (reverse ans)))
694 ((memq (tyipeek chan) '(41 93))
695 (tyi chan)
696 (go loop2))
697 (t (go loop))))))
698
699
700(aliasdef 'pearlbreak 'fixit)
701
702; vi: set lisp: