xref: /csrg-svn/old/lisp/fp/fp.vax/fpMacs.l (revision 12065)
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