Annotation of 42BSD/ucb/fp/handlers.l, revision 1.1.1.1

1.1       root        1: (setq SCCS-handlers.l "@(#)handlers.l  1.1     4/27/83")
                      2: ;  FP interpreter/compiler
                      3: ;  Copyright (c) 1982  Scott B. Baden
                      4: ;  Berkeley, California
                      5: 
                      6: ;; Handlers snarfed from FRANZ
                      7: 
                      8: ; special atoms:
                      9: (declare (special debug-level-count break-level-count
                     10:                  errlist tpl-errlist user-top-level
                     11:                  franz-not-virgin piport ER%tpl ER%all
                     12:                  $ldprint ptport infile
                     13:                  top-level-eof * ** *** + ++ +++ ^w)
                     14:         (macros t))
                     15: 
                     16: (eval-when (compile eval load)
                     17:   (or (get 'fpMacs 'loaded) (load 'fpMacs)))
                     18: 
                     19: 
                     20: ; this is the break handler, it should be tied to 
                     21: ; ER%tpl always.
                     22: ; it is entered if there is an error which no one wants to handle.
                     23: ; We loop forever, printing out our error level until someone
                     24: ; types a ^D which goes to the next break level above us (or the 
                     25: ; top-level if there are no break levels above us.
                     26: ; a (return n) will return that value to the error message
                     27: ; which called us, if that is possible (that is if the error is
                     28: ; continuable)
                     29: ;
                     30: (def break-err-handler 
                     31:   (lexpr (n)
                     32:         ((lambda (message break-level-count retval rettype ^w)
                     33:                  (setq piport nil)
                     34:                  (cond ((greaterp n 0) 
                     35:                         (cond ((eq (cadddr (arg 1)) '|NAMESTACK OVERFLOW|)
                     36:                                
                     37:                                (msg N "non-terminating" (N 2) '? N)
                     38:                                (cond 
                     39:                                 (ptport
                     40:                                  (let ((scriptName (truename ptport)))
                     41:                                       (resetio)
                     42:                                       (setq ptport (outfile scriptName 'append))
                     43:                                       (cond ((null ptport)
                     44:                                              (msg "can't reopen script-file "
                     45:                                                   scriptName
                     46:                                                   N))))))
                     47:                                (and (null ptport) (resetio))
                     48:                                (reset)))
                     49:                         (print 'Error:)
                     50:                         (mapc '(lambda (a) (patom " ") (patom a) ) 
                     51:                               (cdddr (arg 1)))
                     52:                         (terpr)
                     53:                         (cond ((caddr (arg 1)) (setq rettype 'contuab))
                     54:                               (t (setq rettype nil))))
                     55:                        (t (setq rettype 'localcall)))
                     56:                  
                     57:                  (do nil (nil)
                     58:                      (cond ((dtpr 
                     59:                              (setq
                     60:                               retval
                     61:                               (*catch
                     62:                                'break-catch 
                     63:                                (do ((form)) (nil)
                     64:                                    (patom "<")
                     65:                                    (patom break-level-count)
                     66:                                    (patom ">: ")
                     67:                                    (cond ((eq top-level-eof
                     68:                                               (setq form (read nil top-level-eof)))
                     69:                                           (cond ((null (status isatty))
                     70:                                                  (exit)))
                     71:                                           (eval 1)             ; force interrupt check
                     72:                                           (return (sub1 break-level-count)))
                     73:                                          ((and (dtpr form) (eq 'return (car form)))
                     74:                                           (cond ((or (eq rettype 'contuab) 
                     75:                                                      (eq rettype 'localcall))
                     76:                                                  (return (ncons (eval (cadr form)))))
                     77:                                                 (t (patom "Can't continue from this error")
                     78:                                                    (terpr))))
                     79:                                          ((and (dtpr form) (eq 'retbrk (car form)))
                     80:                                           (cond ((numberp (setq form (eval (cadr form))))
                     81:                                                  (return form))
                     82:                                                 (t (return (sub1 break-level-count)))))
                     83:                                          (t (print (eval form))
                     84:                                             (terpr)))))))
                     85:                             (return (cond ((eq rettype 'localcall) 
                     86:                                            (car retval))
                     87:                                           (t retval))))
                     88:                            ((lessp retval break-level-count)
                     89:                             (setq tpl-errlist errlist)
                     90:                             (*throw 'break-catch retval))
                     91:                            (t (terpr)))))
                     92:          nil
                     93:          (add1 break-level-count)
                     94:          nil
                     95:          nil
                     96:          nil)))
                     97: 
                     98: 
                     99: 
                    100: ; this reset function is designed to work with the franz-top-level.
                    101: ; When franz-top-level begins, it makes franz-reset be reset. 
                    102: ; when a reset occurs now, we set the global variable tpl-errlist to 
                    103: ; the current value of errlist and throw to top level.  At top level,
                    104: ; then tpl-errlist will be evaluated.
                    105: ;
                    106: (def franz-reset
                    107:   (lambda nil
                    108:          (setq tpl-errlist errlist)
                    109:          (errset (*throw 'top-level-catch '?)
                    110:                  nil)
                    111:          (old-reset-function)))
                    112: 
                    113: 
                    114: 
                    115: ;---- autoloader functions
                    116: 
                    117: 
                    118: (def undef-func-handler
                    119:   (lambda (args)
                    120:          (prog (funcnam file n)
                    121:                (setq funcnam (caddddr args))
                    122:                (setq n (nreverse (explode (setq funcnam (caddddr args)))))
                    123:                (cond ((and (not (greaterp 4 (length n)))
                    124:                            (eq 'pf_ (implode `(,(car n) ,(cadr n) ,(caddr n)))))
                    125:                       (cond ((and ptport (null infile)) (terpri ptport)))
                    126:                       (msg N (implode (nreverse (cdddr n))) " not defined"
                    127:                            N)
                    128:                       (bottom))
                    129:                      (t
                    130:                       (cond ((symbolp funcnam) 
                    131:                              (cond ((setq file (get funcnam 'autoload))
                    132:                                     (cond ($ldprint
                    133:                                            (patom "[autoload ") (patom file)
                    134:                                            (patom "]")(terpr)))
                    135:                                     (load file))
                    136:                                    (t (return nil)))
                    137:                              (cond ((getd funcnam) (return (ncons funcnam)))
                    138:                                    (t (patom "Autoload file does not contain func ")
                    139:                                       (return nil))))))))))
                    140: 
                    141: 
                    142: 
                    143: (defun break-resp (x)          ; reset on a break (handled like inf recursion)
                    144:   (msg (N 2) "       [break]" (N 2) '? N)
                    145:   (cond 
                    146:    (ptport
                    147:     (let ((scriptName (truename ptport)))
                    148:         (resetio)
                    149:         (setq ptport (outfile scriptName 'append))
                    150:         (cond ((null ptport)
                    151:                (msg "can't reopen script-file " scriptName N))))))
                    152:   (and (null ptport) (resetio))
                    153:   (reset))
                    154: 

unix.superglobalmegacorp.com

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