Annotation of 43BSD/ucb/lisp/lisplib/cmufncs.l, revision 1.1.1.1

1.1       root        1: (setq rcs-cmufncs-
                      2:    "$Header: /usr/lib/lisp/cmufncs.l,v 1.1 83/01/29 18:34:20 jkf Exp $")
                      3: 
                      4: (eval-when (compile eval) (load 'cmumacs))
                      5: 
                      6: (declare (special filelst %changes $%dotflg %prevfn% %%cfn part %%l
                      7:                  lastword %trcflg form fn))
                      8: (def tab (lexpr (n)
                      9:                (prog (nn prt) (setq nn (arg 1))
                     10:                               (cond ((> n 1)(setq prt (arg 2))))
                     11:                               (cond ((> (nwritn prt) nn) (terpri prt)))
                     12:                               (printblanks (- nn (nwritn prt)) prt))))
                     13: 
                     14: 
                     15: (dv $%dotflg nil)
                     16: (def %lineread
                     17:      (lambda 
                     18:       (chan)
                     19:       (prog (ans)
                     20:        loop (setq ans (cons (read chan 'EOF) ans))
                     21:            (cond ((eq (car ans) 'EOF) (return (reverse (cdr ans)))))
                     22:        loop2(cond ((eq 10 (tyipeek chan)) (return (reverse ans)))
                     23:                   ((memq (tyipeek chan) '(41 93))
                     24:                    (tyi chan)
                     25:                    (go loop2))
                     26:                   (t (go loop))))))
                     27: 
                     28: 
                     29: (dv %prevfn% " ")
                     30: (dv %trcflg t)
                     31:    
                     32: (def attach
                     33:      (lambda 
                     34:       (x y)
                     35:       (cond ((dtpr y) (rplacd y (cons (car y) (cdr y))) (rplaca y x))
                     36:             (t (eprint y) (error '"IS AN ATOM, CAN'T BE ATTACHED TO")))))
                     37: 
                     38: (dv %changes ())
                     39: 
                     40: (def dremove
                     41:    (lambda (x l)
                     42:           (cond ((atom l) nil)
                     43:                 ((eq x (car l))
                     44:                  (cond ((cdr l)
                     45:                         (rplaca l (cadr l))
                     46:                         (rplacd l (cddr l))
                     47:                         (dremove x l))))
                     48:                 (t (prog (z)
                     49:                          (setq z l)
                     50:                    lp    (cond ((atom (cdr l)) (return z))
                     51:                                ((eq x (cadr l)) (rplacd l (cddr l)))
                     52:                                (t (setq l (cdr l))))
                     53:                          (go lp))))))
                     54: (def dreverse
                     55:      (lambda (l)
                     56:       (prog (l1 y z)
                     57:             (setq l1 l)
                     58:        l1   (cond
                     59:              ((atom (setq y l))
                     60:               (cond ((or (null z) (null (cdr z))) (return z))
                     61:                     ((null (cddr z))
                     62:                      (setq y (car l1))
                     63:                      (rplaca l1 (car z))
                     64:                      (rplaca z y)
                     65:                      (rplacd l1 z)
                     66:                      (rplacd z nil)
                     67:                      (return l1))
                     68:                     (t (rplacd (Cnth z (sub1 (length z))) z)
                     69:                        (setq y (car l1))
                     70:                        (rplaca l1 (car z))
                     71:                        (rplaca z y)
                     72:                        (rplacd l1 (cdr z))
                     73:                        (rplacd z nil)
                     74:                        (return l1)))))
                     75:             (setq l (cdr l))
                     76:             (setq z (rplacd y z))
                     77:             (go l1))))
                     78: 
                     79: (def dsubst
                     80:      (lambda (x y z)
                     81:       (prog (b)
                     82:             (cond ((eq y (setq b z)) (return (copy x))))
                     83:        lp   (cond ((atom z) (return b))
                     84:                   ((cond ((symbolp y) (eq y (car z))) (t (equal y (car z))))
                     85:                    (rplaca z (copy x)))
                     86:                   (t (dsubst x y (car z))))
                     87:             (cond ((and y (eq y (cdr z))) (rplacd z (copy x)) (return b)))
                     88:             (setq z (cdr z))
                     89:             (go lp))))
                     90: 
                     91: (putd 'eqstr (getd 'equal))
                     92: 
                     93: ; where are the functions this calls??
                     94: (def every
                     95:      (lambda 
                     96:       (everyx everyfn1 everyfn2)
                     97:       (prog nil
                     98:        a    (cond ((null everyx) (return t))
                     99:                   ((funcall everyfn1 (car everyx))
                    100:                    (setq everyx
                    101:                          (cond ((null everyfn2) (cdr everyx))
                    102:                                (t (funcall everyfn2 everyx))))
                    103:                    (go a))
                    104:                   (t (return nil))))))
                    105: (def insert
                    106:      (lambda 
                    107:       (x l comparefn nodups)
                    108:       (cond ((null l) (list x))
                    109:             ((atom l)
                    110:              (eprint l)
                    111:              (error '"is an atom, can't be inserted into"))
                    112:             (t (cond
                    113:                 ((null comparefn) (setq comparefn (function alphalessp))))
                    114:                (prog (l1 n n1 y)
                    115:                      (setq l1 l)
                    116:                      (setq n (length l))
                    117:                 a    (setq n1 (*quo (add1 n) 2))
                    118:                      (setq y (Cnth l1 n1))
                    119:                      (cond ((< n 3)
                    120:                             (cond ((funcall comparefn x (car y))
                    121:                                    (cond
                    122:                                     ((not
                    123:                                       (and nodups (equal x (car y))))
                    124:                                      (rplacd y (cons (car y) (cdr y)))
                    125:                                      (rplaca y x))))
                    126:                                   ((eq n 1) (rplacd y (cons x (cdr y))))
                    127:                                   ((funcall comparefn x (cadr y))
                    128:                                    (cond
                    129:                                     ((not
                    130:                                       (and nodups (equal x (cadr y))))
                    131:                                      (rplacd (cdr y)
                    132:                                              (cons (cadr y) (cddr y)))
                    133:                                      (rplaca (cdr y) x))))
                    134:                                   (t (rplacd (cdr y) (cons x (cddr y))))))
                    135:                            ((funcall comparefn x (car y))
                    136:                             (cond
                    137:                              ((not (and nodups (equal x (car y))))
                    138:                               (setq n (sub1 n1))
                    139:                               (go a))))
                    140:                            (t (setq l1 (cdr y)) (setq n (- n n1)) (go a))))
                    141:                l))))
                    142: 
                    143: (def kwote (lambda (x) (list 'quote x)))
                    144: 
                    145: (def lconc
                    146:      (lambda 
                    147:       (ptr x)
                    148:       (prog (xx)
                    149:             (return
                    150:              (cond ((atom x) ptr)
                    151:                    (t (setq xx (last x))
                    152:                       (cond ((atom ptr) (cons x xx))
                    153:                             ((dtpr (cdr ptr))
                    154:                              (rplacd (cdr ptr) x)
                    155:                              (rplacd ptr xx))
                    156:                             (t (rplaca (rplacd ptr xx) x)))))))))
                    157: 
                    158: (def ldiff
                    159:      (lambda 
                    160:       (x y)
                    161:       (cond ((eq x y) nil)
                    162:             ((null y) x)
                    163:             (t
                    164:              (prog (v z)
                    165:                    (setq z (setq v (ncons (car x))))
                    166:               loop (setq x (cdr x))
                    167:                    (cond ((eq x y) (return z))
                    168:                          ((null x) (error '"NOT A TAIL - LDIFF")))
                    169:                    (setq v (cdr (rplacd v (ncons (car x)))))
                    170:                    (go loop))))))
                    171: 
                    172: 
                    173: (def lsubst
                    174:      (lambda 
                    175:       (x y z)
                    176:       (cond ((null z) nil)
                    177:             ((atom z) (cond ((eq y z) x) (t z)))
                    178:             ((equal y (car z)) (nconc (copy x) (lsubst x y (cdr z))))
                    179:             (t (cons (lsubst x y (car z)) (lsubst x y (cdr z)))))))
                    180: 
                    181: (def memcdr
                    182:      (lambda 
                    183:       (%x% %y%)
                    184:       (prog nil
                    185:        l1   (cond ((eq %x% (cdr %y%)) (return t))
                    186:                   ((eq %x% %y%) (return nil)))
                    187:             (setq %x% (cdr %x%))
                    188:             (go l1))))
                    189: 
                    190: (def merge
                    191:      (lambda 
                    192:       (a b %%cfn)
                    193:       (cond ((null %%cfn) (setq %%cfn (function alphalessp))))
                    194:       (merge1 a b)))
                    195: 
                    196: (def merge1
                    197:      (lambda 
                    198:       (a b)
                    199:       (cond ((null a) b)
                    200:             ((null b) a)
                    201:             (t
                    202:              (prog (val end)
                    203:                    (setq val
                    204:                          (setq end
                    205:                                (cond ((funcall %%cfn (car a) (car b))
                    206:                                       (prog1 a (setq a (cdr a))))
                    207:                                      (t (prog1 b (setq b (cdr b)))))))
                    208:               loop (cond ((null a) (rplacd end b) (return val))
                    209:                          ((null b) (rplacd end a) (return val))
                    210:                          ((funcall %%cfn (car a) (car b))
                    211:                           (rplacd end a)
                    212:                           (setq a (cdr a)))
                    213:                          (t (rplacd end b) (setq b (cdr b))))
                    214:                    (setq end (cdr end))
                    215:                    (go loop))))))
                    216: 
                    217: (def notany
                    218:      (lambda (somex somefn1 somefn2) (not (some somex somefn1 somefn2))))
                    219: 
                    220: (def notevery
                    221:      (lambda 
                    222:       (everyx everyfn1 everyfn2)
                    223:       (not (every everyx everyfn1 everyfn2))))
                    224: 
                    225: (def Cnth
                    226:      (lambda 
                    227:       (x n)
                    228:       (cond ((> 1 n) (cons nil x))
                    229:             (t
                    230:              (prog nil
                    231:               lp   (cond ((or (atom x) (eq n 1)) (return x)))
                    232:                    (setq x (cdr x))
                    233:                    (setq n (sub1 n))
                    234:                    (go lp))))))
                    235: 
                    236: (def nthchar
                    237:      (lambda 
                    238:       (x n)
                    239:       (cond ((plusp n) (car (Cnth (explodec x) n)))
                    240:             ((minusp n) (car (Cnth (reverse (explodec x)) (minus n))))
                    241:             ((zerop n) nil))))
                    242: 
                    243: (def prinlev
                    244:      (lambda 
                    245:       ($%x $%n)
                    246:       (cond ((not (dtpr $%x)) (print $%x))
                    247:             ((and %trcflg (eq (car $%x) 'evl-trace) (dtpr (cdr $%x)))
                    248:              (prinlev (cadr $%x) $%n))
                    249:             ((and %trcflg
                    250:                   (eq (car $%x) '\#)
                    251:                   (dtpr (cdr $%x))
                    252:                   (dtpr (cddr $%x)))
                    253:              (prinlev (caddr $%x) $%n))
                    254:             ((eq %prevfn% $%x) (princ '//\#//))
                    255:             ((eq $%n 0) (princ '"& "))
                    256:             (t
                    257:              (prog ($%kk $%cl)
                    258:                    (princ
                    259:                     (cond ($%dotflg (setq $%dotflg nil) '"... ")
                    260:                           (t '"(")))
                    261:                    (prinlev (car $%x) (sub1 $%n))
                    262:                    (setq $%kk $%x)
                    263:               lp   (cond
                    264:                     ((memcdr $%x $%kk)
                    265:                      (cond ($%cl (princ '" ...]") (return nil))
                    266:                            (t (setq $%cl t)))))
                    267:                    (cond ((not (*** eq (cdr $%kk) (unbound)))
                    268:                           (setq $%kk (cdr $%kk)))
                    269:                          (t (princ '" . unbound)") (return nil)))
                    270:                    (cond ((null $%kk) (princ '")") (return nil))
                    271:                          ((atom $%kk)
                    272:                           (princ '" . ")
                    273:                           (patom $%kk)
                    274:                           (princ '")")
                    275:                           (return nil)))
                    276:                    (princ '" ")
                    277:                    (prinlev (car $%kk) (sub1 $%n))
                    278:                    (go lp))))))
                    279: 
                    280: (def printlev (lambda ($%x $%n) (terpri) (prinlev $%x $%n) $%x))
                    281: 
                    282: 
                    283: 
                    284: (def remove
                    285:      (lambda 
                    286:       (elt list)
                    287:       (cond ((atom list) list)
                    288:             ((equal (car list) elt) (remove elt (cdr list)))
                    289:             ((cons (car list) (remove elt (cdr list)))))))
                    290: 
                    291: (def some
                    292:      (lambda 
                    293:       (somex somefn1 somefn2)
                    294:       (prog nil
                    295:        a    (cond ((null somex) (return nil))
                    296:                   ((funcall somefn1 (car somex)) (return somex))
                    297:                   (t (setq somex
                    298:                            (cond ((null somefn2) (cdr somex))
                    299:                                  (t (funcall somefn2 somex))))
                    300:                      (go a))))))
                    301: 
                    302: ; this probably should have another names since is   ****
                    303: ; just a duplication of an existing function and since it has a
                    304: ; default second arg which I believe is not documented.
                    305: (def sort
                    306:      (lambda 
                    307:       (%%l %%cfn)
                    308:       (prog (val n)
                    309:             (cond ((null %%cfn) (setq %%cfn (function alphalessp))))
                    310:             (setq n 0)
                    311:             (setq val (sort1 0))
                    312:        loop (cond ((null %%l) (return val))
                    313:                   (t (setq val (merge1 val (sort1 n)))
                    314:                      (setq n (add1 n))
                    315:                      (go loop))))))
                    316: 
                    317: (def sort1
                    318:      (lambda 
                    319:       (n)
                    320:       (cond ((null %%l) nil)
                    321:             ((zerop n)
                    322:              (prog (run end)
                    323:                    (setq run %%l)
                    324:               loop (setq end %%l)
                    325:                    (setq %%l (cdr %%l))
                    326:                    (cond ((or (null %%l)
                    327:                               (not (funcall %%cfn (car end) (car %%l))))
                    328:                           (rplacd end nil)
                    329:                           (return run))
                    330:                          (t (go loop)))))
                    331:             (t (merge1 (sort1 (sub1 n)) (sort1 (sub1 n)))))))
                    332: 
                    333: (def subpair
                    334:      (lambda 
                    335:       (old new expr)
                    336:       (cond (old (subpr expr old (or new '(nil)))) (t expr))))
                    337: 
                    338: (def subpr
                    339:      (lambda 
                    340:       (expr l1 l2)
                    341:       (prog (d a)
                    342:             (cond ((atom expr) (go lp))
                    343:                   ((setq d (cdr expr)) (setq d (subpr d l1 l2))))
                    344:             (setq a (subpr (car expr) l1 l2))
                    345:             (return
                    346:              (cond ((or (neq a (car expr)) (neq d (cdr expr))) (cons a d))
                    347:                    (t expr)))
                    348:        lp   (cond ((null l1) (return expr))
                    349:                   (l2 (cond ((eq expr (car l1)) (return (car l2)))))
                    350:                   (t (cond ((eq expr (caar l1)) (return (cdar l1))))))
                    351:             (setq l1 (cdr l1))
                    352:             (and l2 (setq l2 (or (cdr l2) '(nil))))
                    353:             (go lp))))
                    354: 
                    355: (def tailp
                    356:      (lambda 
                    357:       (x y)
                    358:       (and x
                    359:            (prog nil
                    360:             lp   (cond ((atom y) (return nil)) ((eq x y) (return x)))
                    361:                  (setq y (cdr y))
                    362:                  (go lp)))))
                    363: 
                    364: (def tconc
                    365:      (lambda 
                    366:       (p x)
                    367:       (cond ((atom p) (cons (setq x (ncons x)) x))
                    368:             ((dtpr (cdr p)) (rplacd p (cdr (rplacd (cdr p) (ncons x)))))
                    369:             (t (rplaca p (cdr (rplacd p (ncons x))))))))
                    370: 
                    371: (def ttyesno (lambda nil (yesno (read))))
                    372: 
                    373: (def yesno (lambda (x) (selectq x ((t y yes) t) ((nil n no) nil) x)))
                    374: 
                    375: ; this really duplicates a function in auxfns1.l but this does more
                    376: ; error checking.
                    377: (defun nth (N L)
                    378:        (cond ((null L)nil)
                    379:              (t(do ((LCDR L (cdr LCDR))
                    380:                     (COUNT N (1- COUNT)))
                    381:                    ((or (and (atom LCDR) LCDR
                    382:                              (err '"non-proper list passed to nth"))
                    383:                         (or (lessp COUNT 0)(zerop COUNT)))
                    384:                     (car LCDR))
                    385:                    nil))))
                    386: (declare (special piport))
                    387: (def dc-dskin                  ; LWE Hacking to compile OK
                    388:    (nlambda (args)
                    389:            (prog (tmp tmp1 tmp2)
                    390:                  (setq tmp
                    391:                        (prog (c cc)
                    392:                              (setq cc (get (car args) 'comment))
                    393:                              loop
                    394:                              (cond ((not cc)(return nil)))
                    395:                              (setq c (car cc))
                    396:                              (cond ((eq (car c)(cadr args))
                    397:                                     (return nil)))
                    398:                              (setq cc (cdr cc))
                    399:                              (go loop)))
                    400:                  (setq tmp2 piport)
                    401:                  (setq tmp1 (get-comment 27 tmp2))
                    402:                  (cond (tmp  (disgusting tmp
                    403:                                          (cons (cadr args)
                    404:                                                (cons (caddr args) tmp1))))
                    405:                        (t (putprop (car args)
                    406:                                    (cons (cons (cadr args)
                    407:                                                (cons (caddr args) tmp1))
                    408:                                          (get (car args) 'comment))
                    409:                                    'comment)))
                    410:                  (mark!changed (car args))
                    411:                  (return nil))))
                    412: 
                    413: (def disgusting (lambda (a b) ; (rplaca a b)))
                    414: b))
                    415: 
                    416: (def get-comment
                    417:   (lambda (stopper piport)
                    418:     (prog (ans line)
                    419:           (cond ((eq 10 (tyipeek piport)) (tyi piport)))
                    420:      l:   (setq line nil)
                    421: ;          (until (member (car line) (list 10 stopper))
                    422: ;                 (setq line (cons (tyi piport) line)))
                    423:           (prog nil loop
                    424:                (cond ((member (car line)(list 10 stopper))
                    425:                       (return nil)))
                    426:                (setq line (cons (tyi piport) line))
                    427:                (go loop))
                    428:           (setq ans (cons (implode (dreverse (cdr line))) ans))
                    429:           (cond ((eq (car line) 10) (go l:)) (t (return (dreverse ans)))))))

unix.superglobalmegacorp.com

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