|
|
1.1 root 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\))
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\ 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\)t))
673: (memq x '(funcallhook* funcallhook evalhook evalhook*
674: continue-evaluation)))
675:
676: (or (boundp 'system-functions\) (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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.