Annotation of 43BSD/ucb/lisp/lisplib/fix.l, revision 1.1

1.1     ! root        1: (setq rcs-fix-
        !             2:    "$Header: /usr/lib/lisp/RCS/fix.l,v 1.2 83/08/06 08:39:58 jkf Exp $")
        !             3: 
        !             4: ; vi: set lisp :
        !             5: 
        !             6: (eval-when (compile eval)
        !             7:   (or (get 'cmumacs 'version) (load 'cmumacs)))
        !             8: 
        !             9: ; LWE 1/11/81 Hack hack....
        !            10: ;
        !            11: ; LWE 1/11/81 Bet you didn't know this, but this won't work INTERPRETED,
        !            12: ;            but Dave assures me it works compiled. (In MACLisp...)
        !            13: ; 
        !            14: (declare (special cmd frame x cnt var init label part incr limit selectq))
        !            15: 
        !            16: (dv fixfns
        !            17:     ((*** This is FIXIT written by David Touretzky and adapted to Franz by Don
        !            18:       Cohen)
        !            19:      (declare (special framelist rframelist interrupt-handlers handler-labels)
        !            20:               (special prinlevel prinlength evalhook-switch traced-stuff)
        !            21:               (special lastword piport hush-debug)
        !            22:               (*fexpr editf step type))
        !            23:      (sstatus feature fixit)
        !            24:      (*rset t)
        !            25:      ER%tpl
        !            26:      fixit
        !            27:      debug
        !            28:      debug-iter
        !            29:      debug1
        !            30:      debug-bktrace
        !            31:      debug-print
        !            32:      debug-print1
        !            33:      debug-findcall
        !            34:      debug-replace-function-name
        !            35:      debug-scanflist
        !            36:      debug-scanstk
        !            37:      debug-getframes
        !            38:      debug-nextframe
        !            39:      debug-upframe
        !            40:      debug-dnframe
        !            41:      debug-upfn
        !            42:      debug-dnfn
        !            43:      debug-showvar
        !            44:      debug-nedit
        !            45:      debug-insidep
        !            46:      debug-findusrfn
        !            47:      debug-findexpr
        !            48:      debug-pop
        !            49:      debug-where
        !            50:      debug-sysp
        !            51:      interrupt-handlers
        !            52:      handler-labels
        !            53:      (or (boundp 'traced-stuff) (setq traced-stuff nil))
        !            54:      (or (boundp 'evalhook-switch) (setq evalhook-switch nil))
        !            55:      (setq hush-debug nil)))
        !            56: 
        !            57: (or (boundp 'traced-stuff) (setq traced-stuff nil))
        !            58: (or (boundp 'evalhook-switch) (setq evalhook-switch nil))
        !            59: (or (boundp 'debug-sysmode) (setq debug-sysmode nil))
        !            60: (setq hush-debug nil)
        !            61: 
        !            62: (*** This is FIXIT written by David Touretzky and adapted to Franz by Don Cohen)
        !            63: 
        !            64: (declare (special framelist rframelist interrupt-handlers handler-labels)
        !            65:          (special prinlevel prinlength evalhook-switch traced-stuff)
        !            66:          (special lastword piport hush-debug debug-sysmode)
        !            67:          (*fexpr editf step type))
        !            68: 
        !            69: (defvar fixit-eval nil)
        !            70: (defvar fixit-print nil)
        !            71: (defvar fixit-pp nil)
        !            72: 
        !            73: (sstatus feature fixit)
        !            74: 
        !            75: (*rset t)
        !            76: 
        !            77: ; (jkf) it is not clear that you want this to take over on all errors,
        !            78: ; but the cmu people seem to want that.
        !            79: #+cmu (progn 'compile
        !            80:             (dv ER%tpl fixit)
        !            81:             (dv ER%all fixit) ; LWE 1/17/81 MAYBE THIS WILL FIX THIS code
        !            82:             )
        !            83: 
        !            84: ;--- eval, print and pretty-print functions are user-selectable by just
        !            85: ; assigning another value to fixit-eval, fixit-print and fixit-pp.
        !            86: ;
        !            87: (defmacro fix-eval (&rest args)
        !            88:    `(cond ((and fixit-eval
        !            89:                (getd fixit-eval))
        !            90:           (funcall fixit-eval ,@args))
        !            91:          (t (eval ,@args))))
        !            92: 
        !            93: (defmacro fix-print (&rest args)
        !            94:    `(cond ((and fixit-print
        !            95:                (getd fixit-print))
        !            96:           (funcall fixit-print ,@args))
        !            97:          (t (print ,@args))))
        !            98: 
        !            99: (defmacro fix-pp (&rest args)
        !           100:    `(cond ((and fixit-pp
        !           101:                (getd fixit-pp))
        !           102:           (funcall fixit-pp ,@args))
        !           103:          (t ($prpr ,@args))))
        !           104: 
        !           105: (def fixit
        !           106:   (nlambda (l)
        !           107:     (prog (piport)
        !           108:           (do nil (nil) (eval (cons 'debug l))))))
        !           109: 
        !           110: (def debug
        !           111:   (nlambda (params)
        !           112:     (prog (cmd frame framelist rframelist nframe val infile)
        !           113:           (setq infile t)
        !           114:           (and evalhook-switch (step nil))
        !           115:           (setq rframelist
        !           116:                 (reverse
        !           117:                  (setq framelist
        !           118:                        (or (debug-getframes)
        !           119:                            (list
        !           120:                             (debug-scanstk '(nil) '(debug)))))))
        !           121:           (setq frame (debug-findexpr (car framelist)))
        !           122:           ;(tab 0)
        !           123:           (cond
        !           124:            ((and (car params) (not (eq (car params) 'edit)))
        !           125:             (terpri)
        !           126:             (princ '|;debug: |)
        !           127:             (princ (cadddr params))
        !           128:             (cond ((cddddr params)
        !           129:                    (princ '| -- |)
        !           130:                    (fix-print (cddddr params))))
        !           131:             (terpri)
        !           132:             (go loop)))
        !           133:           (debug-print1 frame nil)
        !           134:           (terpri)
        !           135:           (cond (hush-debug (setq hush-debug nil) (go loop))
        !           136:                 ((not (memq 'edit params)) (go loop)))
        !           137:           (drain nil)
        !           138:           (princ '|type e to edit, <cr> to debug: |)
        !           139:           (setq val (tyi))
        !           140:           (cond ((or (= val 69) (= val 101))
        !           141:                  (and (errset (debug-nedit frame))
        !           142:                       (setq cmd '(ok))
        !           143:                       (go cmdr)))
        !           144:                 ((or (= val 78) (= val 110)) (terpri) (debug-pop)))
        !           145:      loop (terpri)
        !           146:           (princ ':)
        !           147:           (cond ((null (setq cmd (lineread))) (reset)))
        !           148:      cmdr (cond
        !           149:            ((dtpr (car cmd))
        !           150:             (setq val (fix-eval (car cmd) (cadddr frame)))
        !           151:             (fix-print val)
        !           152:             (terpri)
        !           153:             (go loop)))
        !           154:           (setq nframe (debug1 cmd frame))
        !           155:           (and (not (atom nframe)) (setq frame nframe) (go loop))
        !           156:           (fix-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) (zerop 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 or variable 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 (debug-print1 (setq frame topframe) nil))
        !           198:                    (bot (debug-print1 (setq frame (car rframelist)) nil))
        !           199:                    (p (debug-print1 frame nil))
        !           200:                    (pp (fix-pp (caddr frame)))
        !           201:                    (where (debug-where frame))
        !           202:                    (help
        !           203:                     (cond ((cdr cmd) (eval cmd))
        !           204:                           (t (ty |/usr/lib/lisp/fixit.ref|))))
        !           205:                    ((? h) (ty |/usr/lib/lisp/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:                       (debug-print1 (setq frame (or nframe frame)) nil))
        !           234:                    (d (setq nframe
        !           235:                             (or (debug-iter (debug-dnframe frame)) frame))
        !           236:                       (debug-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:                        (debug-print1 frame nil))
        !           246:                    (dn (setq frame
        !           247:                              (or (debug-iter (debug-dnfn frame))
        !           248:                                  (car rframelist)))
        !           249:                        (debug-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 (debug-print1 frame nil)))
        !           258:                    (dns (setq frame
        !           259:                               (debug-iter
        !           260:                                (debug-findcall item frame framelist)))
        !           261:                         (and frame (debug-print1 frame nil)))
        !           262:                   (sys (setq debug-sysmode (not debug-sysmode))
        !           263:                        (patom "sysmode now ")(patom debug-sysmode) (terpr))
        !           264:                    (cond ((not (dtpr (car cmd)))
        !           265:                           (*** should there also be a boundp test here)
        !           266:                           (debug-showvar (car cmd) frame))
        !           267:                          (t (setq frame (car cmd)))))
        !           268:           (return (or frame item)))))
        !           269: 
        !           270: (def debug-replace-function-name 
        !           271:   (lambda (cmd frame)
        !           272:     (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:                                               '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 ((zerop 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 (debug-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 debug-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:                  (debug-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 debug-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:             (fix-print (caddr frame))
        !           382:             (princ '| <- eval error|)
        !           383:             (return t)))
        !           384:           (and (memq 'bind sel)
        !           385:                (cond ((memq (caaddr frame) '(prog lambda))
        !           386:                       (setq varlist (cadr (caddr frame))))
        !           387:                      ((and (atom (caaddr frame)) (dtpr (getd (caaddr frame))))
        !           388:                       (setq varlist (cadr (getd (caaddr frame))))))
        !           389:                (mapc (function
        !           390:                       (lambda (v)
        !           391:                               (debug-showvar v
        !           392:                                              (or (debug-upframe frame)
        !           393:                                                  frame))))
        !           394:                      (cond ((and varlist (atom varlist)) (ncons varlist))
        !           395:                            (t varlist))))
        !           396:           (and (memq 'user sel)
        !           397:                (debug-sysp (caaddr frame))
        !           398:                (return nil))
        !           399:           (cond ((memq (caaddr frame) interrupt-handlers)
        !           400:                  (terpri)
        !           401:                  (princ '<------------)
        !           402:                  (fix-print (cadr (assq (caaddr frame) handler-labels)))
        !           403:                  (princ '-->))
        !           404:                 ((eq (caaddr frame) 'debug)
        !           405:                  (terpri)
        !           406:                  (princ '<------debug------>))
        !           407:                 ((memq 'fns sel)
        !           408:                  (terpri)
        !           409:                  (and (debug-sysp (caaddr frame)) (princ '|  |))
        !           410:                  (fix-print (caaddr frame)))
        !           411:                 (t (terpri)
        !           412:                    (fix-print
        !           413:                     (cond ((eq (car frame) 'eval) (caddr frame))
        !           414:                           (t (cons (caaddr frame) (cadr (caddr frame))))))))
        !           415:           (or (not (symbolp (caaddr frame)))
        !           416:               (eq (caaddr frame) (concat (caaddr frame)))
        !           417:               (princ '|  <not interned>|))
        !           418:           (return t))))
        !           419: 
        !           420: (def debug-findcall
        !           421:   (lambda (fn frame flist)
        !           422:     (prog nil
        !           423:      loop (setq frame (debug-nextframe frame flist nil))
        !           424:           (or frame (return nil))
        !           425:           (cond ((atom (caddr frame))
        !           426:                  (cond ((eq (caddr frame) fn) (return frame)) (t (go loop))))
        !           427:                 ((eq (caaddr frame) fn) (return frame))
        !           428:                 (t (go loop))))))
        !           429: 
        !           430: (def debug-scanflist
        !           431:   (lambda (frame fnset)
        !           432:     (prog nil
        !           433:      loop (or frame (return nil))
        !           434:           (and (not (atom (caddr frame)))
        !           435:                (memq (caaddr frame) fnset)
        !           436:                (return frame))
        !           437:           (setq frame (debug-dnframe frame))
        !           438:           (go loop))))
        !           439: 
        !           440: (def debug-scanstk
        !           441:   (lambda (frame fnset)
        !           442:     (prog nil
        !           443:      loop (or frame (return nil))
        !           444:           (and (not (atom (caddr frame)))
        !           445:                (memq (caaddr frame) fnset)
        !           446:                (return frame))
        !           447:           (setq frame (evalframe (cadr frame)))
        !           448:           (go loop))))
        !           449: 
        !           450: (def debug-getframes
        !           451:   (lambda nil
        !           452:     (prog (flist fnew)
        !           453:           (setq fnew
        !           454:                 (debug-scanstk '(nil)
        !           455:                                (cons 'debug interrupt-handlers)))
        !           456:      loop (and (not debug-sysmode)
        !           457:               (not (atom (caddr fnew)))
        !           458:                (eq (caaddr fnew) 'debug)
        !           459:                (eq (car (evalframe (cadr fnew))) 'apply)
        !           460:                (memq (caaddr (evalframe (cadr fnew))) interrupt-handlers)
        !           461:                (setq fnew (evalframe (cadr fnew))))
        !           462:           (and (not debug-sysmode)
        !           463:               (null flist)
        !           464:                (eq (car fnew) 'apply)
        !           465:                (memq (caaddr fnew) interrupt-handlers)
        !           466:                (setq fnew (evalframe (cadr fnew))))
        !           467:           (and (not debug-sysmode)
        !           468:               (eq (car fnew) 'apply)
        !           469:                (eq (typep (caaddr fnew)) 'symbol)
        !           470:                (not (eq (caaddr fnew) (concat (caaddr fnew))))
        !           471:                (setq fnew (evalframe (cadr fnew)))
        !           472:                (setq fnew (evalframe (cadr fnew)))
        !           473:                (setq fnew (evalframe (cadr fnew)))
        !           474:                (setq fnew (evalframe (cadr fnew)))
        !           475:                (go loop))
        !           476:           (and (not debug-sysmode)
        !           477:               (not (atom (caddr fnew)))
        !           478:                (memq (caaddr fnew) '(evalhook* evalhook))
        !           479:                (setq fnew (evalframe (cadr fnew)))
        !           480:                (go loop))
        !           481:           (and (not debug-sysmode)
        !           482:               (eq (car fnew) 'apply)
        !           483:                (eq (caaddr fnew) 'eval)
        !           484:                (cadadr (caddr fnew))
        !           485:                (or (not (fixp (cadadr (caddr fnew))))
        !           486:                    (= (cadadr (caddr fnew)) -1))
        !           487:                (setq fnew (evalframe (cadr fnew)))
        !           488:                (go loop))
        !           489:           (and fnew
        !           490:                (setq flist (cons fnew flist))
        !           491:                (setq fnew (evalframe (cadr fnew)))
        !           492:                (go loop))
        !           493:           (return (nreverse flist)))))
        !           494: 
        !           495: (def debug-nextframe
        !           496:   (lambda (frame flist sel)
        !           497:     (prog nil
        !           498:           (setq flist (cdr (memq frame flist)))
        !           499:           (and (not (memq 'user sel)) (return (car flist)))
        !           500:      loop (or flist (return nil))
        !           501:           (cond
        !           502:            ((or (atom (caddr (car flist)))
        !           503:                 (not (debug-sysp (caaddr (car flist)))))
        !           504:             (return (car flist))))
        !           505:           (setq flist (cdr flist))
        !           506:           (go loop))))
        !           507: 
        !           508: (def debug-upframe
        !           509:   (lambda (frame)
        !           510:     (debug-nextframe frame rframelist nil)))
        !           511: 
        !           512: (def debug-dnframe
        !           513:   (lambda (frame)
        !           514:     (debug-nextframe frame framelist nil)))
        !           515: 
        !           516: (def debug-upfn
        !           517:   (lambda (frame)
        !           518:     (debug-nextframe frame rframelist '(user))))
        !           519: 
        !           520: (def debug-dnfn
        !           521:   (lambda (frame)
        !           522:     (debug-nextframe frame framelist '(user))))
        !           523: 
        !           524: (def debug-showvar
        !           525:   (lambda (var frame)
        !           526:     (terpri)
        !           527:     (princ '|   |)
        !           528:     (princ var)
        !           529:     (princ '| = |)
        !           530:     (fix-print
        !           531:      ((lambda (val) (cond ((atom val) '?) (t (car val))))
        !           532:       (errset (fix-eval var (cadddr frame)) nil)))))
        !           533: 
        !           534: (def debug-nedit
        !           535:   (lambda (frame)
        !           536:     (prog (val body elem nframe)
        !           537:           (setq elem (caddr frame))
        !           538:           (setq val frame)
        !           539:      scan (setq val (debug-findusrfn val))
        !           540:           (or val (go nofn))
        !           541:           (setq body (getd (caaddr val)))
        !           542:           (cond ((debug-insidep elem body)
        !           543:                  (princ '=)
        !           544:                  (fix-print (caaddr val))
        !           545:                  (edite body
        !           546:                         (list 'f (cons '== elem) 'tty:)
        !           547:                         (caaddr val))
        !           548:                  (return frame))
        !           549:                 ((or (eq elem (caddr val)) (debug-insidep elem (caddr val)))
        !           550:                  (setq val (debug-dnframe val))
        !           551:                  (go scan)))
        !           552:      nofn (setq nframe (debug-dnframe frame))
        !           553:           (or nframe (go doit))
        !           554:           (and (debug-insidep elem (caddr nframe))
        !           555:                (setq frame nframe)
        !           556:                (go nofn))
        !           557:      doit (edite (caddr frame)
        !           558:                  (and (debug-insidep elem (caddr frame))
        !           559:                       (list 'f (cons '== elem) 'tty:))
        !           560:                  nil)
        !           561:           (return frame))))
        !           562: 
        !           563: (def debug-insidep
        !           564:   (lambda (elem expr)
        !           565:     (car (errset (edite expr (list 'f (cons '== elem)) nil)))))
        !           566: 
        !           567: (def debug-findusrfn
        !           568:   (lambda (frame)
        !           569:     (cond ((null frame) nil)
        !           570:           ((and (dtpr (caddr frame))
        !           571:                 (symbolp (caaddr frame))
        !           572:                 (dtpr (getd (caaddr frame))))
        !           573:            frame)
        !           574:           (t (debug-findusrfn (debug-dnframe frame))))))
        !           575: 
        !           576: (def debug-findexpr
        !           577:   (lambda (frame)
        !           578:     (cond ((null frame) nil)
        !           579:           ((and (eq (car frame) 'eval) (not (atom (caddr frame))))
        !           580:            frame)
        !           581:           (t (debug-findexpr (debug-dnframe frame))))))
        !           582: 
        !           583: (def debug-pop
        !           584:   (lambda nil
        !           585:     (prog (frame)
        !           586:          (setq frame (car framelist))
        !           587:      l    (cond ((null (setq frame (evalframe (cadr frame))))(reset)))
        !           588:          (cond ((and (dtpr (caddr frame))(eq (caaddr frame) 'debug))
        !           589:                 (freturn (cadr frame) nil)))
        !           590:          (go l))))
        !           591: 
        !           592: (def debug-where
        !           593:   (lambda (frame)
        !           594:     (prog (lev diff nframe)
        !           595:           (setq lev (- (length framelist) (length (memq frame rframelist))))
        !           596:           (setq diff (- (length framelist) lev 1))
        !           597:           (debug-print1 frame nil)
        !           598:           (terpri)
        !           599:           (cond ((zerop diff) (princ '|you are at top of stack.|))
        !           600:                 ((zerop lev) (princ '|you are at bottom of stack.|))
        !           601:                 (t (princ '|you are |)
        !           602:                    (princ diff)
        !           603:                    (cond ((= diff 1) (princ '| frame from the top.|))
        !           604:                          (t (princ '| frames from the top.|)))))
        !           605:           (terpri)
        !           606:           (and (or (atom (caddr frame)) (not (eq (car frame) 'eval)))
        !           607:                (return nil))
        !           608:           (setq lev 0)
        !           609:           (setq nframe frame)
        !           610:      lp   (and (setq nframe (debug-findcall (caaddr nframe) nframe framelist))
        !           611:                (setq lev (|1+| lev))
        !           612:                (go lp))
        !           613:           (princ '|there are |)
        !           614:           (princ lev)
        !           615:           (princ '| |)
        !           616:           (princ (caaddr frame))
        !           617:           (princ '|'s below.|)
        !           618:           (terpri))))
        !           619: 
        !           620: (def debug-sysp
        !           621:   (lambda (x)
        !           622:     (and (sysp x) (symbolp x) (not (dtpr (getd x))))))
        !           623: 
        !           624: (dv interrupt-handlers (fixit))
        !           625: 
        !           626: (dv handler-labels
        !           627:     ((fixit error)
        !           628:      (debug-ubv-handler ubv)
        !           629:      (debug-udf-handler udf)
        !           630:      (debug-fac-handler fac)
        !           631:      (debug-ugt-handler ugt)
        !           632:      (debug-wta-handler wta)
        !           633:      (debug-wna-handler wna)
        !           634:      (debug-iol-handler iol)
        !           635:      (debug-*rset-handler rst)
        !           636:      (debug-mer-handler mer)
        !           637:      (debug-gcd-handler gcd)
        !           638:      (debug-gcl-handler gcl)
        !           639:      (debug-gco-handler gco)
        !           640:      (debug-pdl-handler pdl)))
        !           641: 
        !           642: 
        !           643: (or (boundp 'traced-stuff) (setq traced-stuff nil))
        !           644: 
        !           645: (or (boundp 'evalhook-switch) (setq evalhook-switch nil))
        !           646: 
        !           647: (setq hush-debug nil)
        !           648: 
        !           649: 
        !           650: ;; other functions grabbed from other cmu files to make this file complete
        !           651: ;; unto itself
        !           652: 
        !           653: ;- from sysfunc.l
        !           654: (declare (special system-functions\))
        !           655: (defun build-sysp nil
        !           656:   (do ((temp (oblist) (cdr temp))
        !           657:        (sysfuncs))
        !           658:       ((null temp)(setq system-functions\ sysfuncs));atom has ^G at end
        !           659:       (cond ((getd (car temp))
        !           660:             (setq sysfuncs (cons (car temp) sysfuncs))))))
        !           661: 
        !           662: (defun sysp (x) ; (cond ((memq x system-functions\)t))
        !           663:        (memq x '(funcallhook* funcallhook evalhook evalhook* 
        !           664:                               continue-evaluation)))
        !           665: 
        !           666: (or (boundp 'system-functions\) (build-sysp))
        !           667: 
        !           668: (defun fretry (pdlpnt frame)
        !           669:   (freturn pdlpnt
        !           670:           (cond ((eq (car frame) 'eval) (eval (caddr frame) (cadddr frame)))
        !           671:                 ((eq (car frame) 'apply)
        !           672:                  (eval `(apply ',(caaddr frame) ',(cadaddr frame)) 
        !           673:                        (cadddr frame))))))
        !           674: 
        !           675: 
        !           676: ; - from cmu.l
        !           677: 
        !           678: (def %lineread
        !           679:   (lambda (chan)
        !           680:          (prog (ans)
        !           681:           loop (setq ans (cons (read chan 'EOF) ans))
        !           682:                (cond ((eq (car ans) 'EOF) (return (reverse (cdr ans)))))
        !           683:           loop2(cond ((eq 10 (tyipeek chan)) (return (reverse ans)))
        !           684:                      ((memq (tyipeek chan) '(41 93))
        !           685:                       (tyi chan)
        !           686:                       (go loop2))
        !           687:                      (t (go loop))))))

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.