1*12065Sbaden (setq SCCS-fpMacs.l "@(#)fpMacs.l 1.1 04/27/83") 2*12065Sbaden ; FP interpreter/compiler 3*12065Sbaden ; Copyright (c) 1982 Scott B. Baden 4*12065Sbaden ; Berkeley, California 5*12065Sbaden 6*12065Sbaden (declare 7*12065Sbaden (macros t) 8*12065Sbaden (special ptport infile)) 9*12065Sbaden 10*12065Sbaden 11*12065Sbaden (eval-when (compile eval load) 12*12065Sbaden 13*12065Sbaden (setq whiteSpace ''(9 10 32)) 14*12065Sbaden (setq blankOrTab ''(9 32)) 15*12065Sbaden (setq CR 10) 16*12065Sbaden (setq BLANK 32) 17*12065Sbaden (setq lAngle '|<|) 18*12065Sbaden (setq rAngle '|>|) 19*12065Sbaden 20*12065Sbaden (setq funcForms 21*12065Sbaden ''(alpha$fp 22*12065Sbaden insert$fp 23*12065Sbaden constant$fp 24*12065Sbaden condit$fp 25*12065Sbaden constr$fp 26*12065Sbaden compos$fp 27*12065Sbaden while$fp 28*12065Sbaden ti$fp)) 29*12065Sbaden 30*12065Sbaden (setq multiAdicFns 31*12065Sbaden ''(select$fp 32*12065Sbaden tl$fp 33*12065Sbaden tlr$fp 34*12065Sbaden id$fp 35*12065Sbaden atom$fp 36*12065Sbaden null$fp 37*12065Sbaden reverse$fp 38*12065Sbaden distl$fp 39*12065Sbaden distr$fp 40*12065Sbaden length$fp 41*12065Sbaden apndl$fp 42*12065Sbaden apndr$fp 43*12065Sbaden rotl$fp 44*12065Sbaden rotr$fp 45*12065Sbaden trans$fp 46*12065Sbaden first$fp 47*12065Sbaden last$fp 48*12065Sbaden front$fp 49*12065Sbaden pick$fp 50*12065Sbaden concat$fp 51*12065Sbaden pair$fp 52*12065Sbaden split$fp)) 53*12065Sbaden 54*12065Sbaden (setq dyadFns 55*12065Sbaden ''(plus$fp 56*12065Sbaden sub$fp 57*12065Sbaden times$fp 58*12065Sbaden div$fp 59*12065Sbaden and$fp 60*12065Sbaden or$fp 61*12065Sbaden xor$fp 62*12065Sbaden not$fp 63*12065Sbaden lt$fp 64*12065Sbaden le$fp 65*12065Sbaden eq$fp 66*12065Sbaden ge$fp 67*12065Sbaden gt$fp 68*12065Sbaden ne$fp)) 69*12065Sbaden 70*12065Sbaden 71*12065Sbaden (setq libFns 72*12065Sbaden ''(sin$fp 73*12065Sbaden asin$fp 74*12065Sbaden cos$fp 75*12065Sbaden acos$fp 76*12065Sbaden log$fp 77*12065Sbaden exp$fp 78*12065Sbaden mod$fp)) 79*12065Sbaden 80*12065Sbaden (setq miscFns 81*12065Sbaden ''(iota$fp)) 82*12065Sbaden ) 83*12065Sbaden 84*12065Sbaden 85*12065Sbaden (defmacro Tyi nil 86*12065Sbaden `(let ((z (tyi))) 87*12065Sbaden (cond ((and (null infile) ptport) (tyo z ptport)) 88*12065Sbaden (t z)))) 89*12065Sbaden 90*12065Sbaden (defmacro peekc nil 91*12065Sbaden `(tyipeek infile)) 92*12065Sbaden 93*12065Sbaden (defmacro Getc nil 94*12065Sbaden `(let ((piport infile)) 95*12065Sbaden (prog (c) 96*12065Sbaden (cond ((eq 'eof$$ (setq c (readc piport 'eof$$))) 97*12065Sbaden (*throw 'parse$err 'eof$$)) 98*12065Sbaden (t (setq c (car (exploden c))) 99*12065Sbaden (cond 100*12065Sbaden ((not (and (null in_buf) (memq c #.whiteSpace))) 101*12065Sbaden (setq in_buf (cons c in_buf)))))) 102*12065Sbaden (cond ((and (null infile) ptport) 103*12065Sbaden (cond 104*12065Sbaden ((not (and (null in_buf) (memq c #.whiteSpace))) 105*12065Sbaden (tyo c ptport))))) 106*12065Sbaden (return c)))) 107*12065Sbaden 108*12065Sbaden (defmacro Read nil 109*12065Sbaden `(let ((z (read))) 110*12065Sbaden (prog nil 111*12065Sbaden (cond ((and (null infile) ptport (not (listp z))) (patom z ptport))) 112*12065Sbaden (cond ((and (null infile) ptport (not (listp z))) 113*12065Sbaden (do 114*12065Sbaden ((c (tyipeek) (tyipeek))) 115*12065Sbaden ((or (and (eq c #.CR) (Tyi) t) 116*12065Sbaden (null (memq c #.blankOrTab)))) 117*12065Sbaden (Tyi)))) 118*12065Sbaden 119*12065Sbaden (return z)))) 120*12065Sbaden 121*12065Sbaden (defmacro find (flg lst) 122*12065Sbaden `(cond ((atom ,lst) (eq ,flg ,lst)) 123*12065Sbaden ((not (listp ,lst)) nil) 124*12065Sbaden (t (memq ,flg ,lst)))) 125*12065Sbaden 126*12065Sbaden 127*12065Sbaden ; we want top-level size, not total number of arguments 128*12065Sbaden 129*12065Sbaden (defmacro size (x) 130*12065Sbaden `(cond ((atom ,x) 1) 131*12065Sbaden (t (length ,x)))) 132*12065Sbaden 133*12065Sbaden (defmacro twop (x) 134*12065Sbaden `(eq 2 ,x)) 135*12065Sbaden 136*12065Sbaden 137*12065Sbaden ;; Special macros to help out tree insert 138*12065Sbaden 139*12065Sbaden (defmacro treeIns (fn input Len) 140*12065Sbaden `(cond ((zerop ,Len) (unitTreeInsert ,fn)) 141*12065Sbaden ((onep ,Len) (car ,input)) 142*12065Sbaden ((twop ,Len) (funcall ,fn ,input)) 143*12065Sbaden (t (treeInsWithLen ,fn ,input ,Len)))) 144*12065Sbaden 145*12065Sbaden 146*12065Sbaden (defmacro unitTreeInsert (fn) 147*12065Sbaden `(let ((ufn (get 'u-fnc ,fn))) 148*12065Sbaden (cond (ufn (funcall ufn)) 149*12065Sbaden (t (bottom))))) 150*12065Sbaden 151*12065Sbaden 152*12065Sbaden (putprop 'fpMacs t 'loaded) 153*12065Sbaden 154