Commit | Line | Data |
---|---|---|
42b83950 SB |
1 | ; FP interpreter/compiler |
2 | ; Copyright (c) 1982 Scott B. Baden | |
3 | ; Berkeley, California | |
edf71f48 DF |
4 | ; |
5 | ; Copyright (c) 1982 Regents of the University of California. | |
6 | ; All rights reserved. The Berkeley software License Agreement | |
7 | ; specifies the terms and conditions for redistribution. | |
8 | ; | |
95f51977 | 9 | (setq SCCS-utils.l "@(#)utils.l 5.1 (Berkeley) 5/31/85") |
42b83950 SB |
10 | |
11 | ; FP command processor | |
12 | ||
13 | (include specials.l) | |
14 | (declare (localf u$print_fn intName pfn makeroom | |
15 | getCmdLine) (special cmdLine codePort)) | |
16 | ||
17 | (defun get_cmd nil | |
18 | (prog (cmdLine command) | |
19 | (setq cmdLine (getCmdLine)) | |
20 | (cond ((null cmdLine) (msg N "Illegal Command" N) | |
21 | (return 'cmd$$))) | |
22 | (setq command (car cmdLine)) | |
23 | (setq cmdLine (cdr cmdLine)) | |
24 | (let ((cmdFn (get 'cp$ command))) | |
25 | (cond ((null cmdFn) (msg N "Illegal Command" N)) | |
26 | (t (funcall cmdFn) (return 'cmd$$)))) | |
27 | (return 'cmd$$))) | |
28 | ||
29 | (defun getCmdLine nil | |
30 | (do ((names nil) (name$ nil) | |
31 | (c (tyipeek) (tyipeek))) | |
32 | ((eq c #.CR) | |
33 | (Tyi) | |
34 | (cond (name$ | |
35 | (nreverse (cons (implode (nreverse name$)) names))) | |
36 | (t (nreverse names)))) | |
37 | (cond ((memq c #.blankOrTab) | |
38 | (cond (name$ | |
39 | (setq names (cons (implode (nreverse name$)) names)) | |
40 | (setq name$ nil))) | |
41 | (Tyi)) | |
42 | ||
43 | (t (setq name$ (cons (Tyi) name$)))))) | |
44 | ||
45 | ||
46 | (defun (cp$ load) nil | |
47 | (cond (cmdLine | |
48 | (let ((h (car cmdLine))) | |
49 | (cond | |
50 | ((null (setq infile (car (errset (infile (concat h '.fp)) nil)))) | |
51 | (cond | |
52 | ((null (setq infile (car (errset (infile h) nil)))) | |
53 | (msg N "Can't open file" N))))))) | |
54 | (t (msg N "must supply a file" N)))) | |
55 | ||
56 | ||
57 | ||
58 | (defun (cp$ csave) nil | |
59 | (If cmdLine then | |
60 | (setq codePort (car (errset (outfile (car cmdLine)) nil))) | |
61 | (If (null codePort) then | |
62 | (msg N "Can't open file" N) | |
63 | ||
64 | else | |
65 | ||
66 | (msg (P codePort) "(declare (special DynTraceFlg level))" N) | |
67 | (do ((l (plist 'sources) (cddr l))) | |
68 | ||
69 | ((null l) (msg (P codePort) N) (close codePort)) | |
70 | ||
71 | (apply 'pp (list '(P codePort) (concat (car l) '_fp))) | |
72 | (msg (P codePort) N) | |
73 | (msg (P codePort) | |
74 | "(eval-when (load) (putprop 'sources '" | |
75 | (cadr l) | |
76 | " '" (car l) | |
77 | "))" N)) | |
78 | ) | |
79 | else | |
80 | ||
81 | (msg "must supply a file" N))) | |
82 | ||
83 | (defun (cp$ fsave) nil | |
84 | (If cmdLine then | |
85 | (setq codePort (car (errset (outfile (car cmdLine)) nil))) | |
86 | (If (null codePort) then | |
87 | (msg N "Can't open file" N) | |
88 | ||
89 | else | |
90 | ||
91 | (msg (P codePort) "(declare (special DynTraceFlg level))" N) | |
92 | (do ((l (plist 'sources) (cddr l))) | |
93 | ||
94 | ((null l) (msg (P codePort) N) (close codePort)) | |
95 | ||
96 | (let ((fName (concat (car l) '_fp))) | |
97 | (msg (P codePort) | |
98 | N "(def " fName N (getd `,fName) ")" N)) | |
99 | ||
100 | (msg (P codePort) | |
101 | "(eval-when (load) (putprop 'sources '" | |
102 | (cadr l) | |
103 | " '" (car l) | |
104 | "))" N)) | |
105 | ) | |
106 | else | |
107 | ||
108 | (msg "must supply a file" N))) | |
109 | ||
110 | ||
111 | (defun (cp$ cload) nil | |
112 | (If cmdLine then | |
113 | (let ((codeFile (car cmdLine))) | |
114 | (If (probef codeFile) | |
115 | then (load codeFile) | |
116 | else (If (probef (concat codeFile ".o")) | |
117 | then (load (concat codeFile ".o")) | |
118 | else (msg N codeFile ": No such File" N)))) | |
119 | else (msg "must supply a file" N))) | |
120 | ||
121 | ||
122 | (defun (cp$ fns) nil | |
123 | (terpri) | |
124 | (let ((z (plist 'sources))) | |
125 | (cond ((null z) nil) | |
126 | (t (do ((slist | |
127 | (sort | |
128 | (do ((l z (cddr l)) | |
129 | (ls nil)) | |
130 | ((null l) ls) | |
131 | (setq ls (cons (car l) ls))) | |
132 | 'alphalessp) | |
133 | (cdr slist)) | |
134 | ||
135 | (trFns (mapcar 'extName TracedFns))) | |
136 | ||
137 | ((null slist) (terpri) (terpri)) | |
138 | ||
139 | (let ((oldn (nwritn)) | |
140 | (fnName (car slist))) | |
141 | (cond ((memq fnName trFns) (setq fnName (concat | |
142 | fnName | |
143 | '@)))) | |
144 | (let ((nl (makeroom 80 fnName))) | |
145 | (patom fnName) | |
146 | (let ((vv (- 13 (mod (- (nwritn) | |
147 | (cond (nl 0) (t oldn))) 12)))) | |
148 | (cond ((lessp 80 (+ (nwritn) vv)) (terpri)) | |
149 | (t | |
150 | (mapcar | |
151 | '(lambda (nil) (tyo #.BLANK)) (iota$fp vv)))))))))))) | |
152 | (defun (cp$ pfn) nil | |
153 | (mapcar '(lambda (u) (terpri) (u$print_fn u) (terpri)) cmdLine)) | |
154 | ||
155 | (defun u$print_fn (fn_name) | |
156 | (let ((source nil)) | |
157 | (setq source (get 'sources fn_name)) | |
158 | (cond ((null source) (msg fn_name " is not defined")) | |
159 | (t (mapcar 'p_strng (reverse source)))) | |
160 | (terpri))) | |
161 | ||
162 | (defun (cp$ save) nil | |
163 | (cond (cmdLine | |
164 | (cond ((null (setq outfile (car (errset (outfile (car cmdLine)) nil)))) | |
165 | (msg N "Can't open file" N)) | |
166 | (t (let ((poport outfile)) | |
167 | (terpri) | |
168 | (do ((l (plist 'sources) (cddr l))) | |
169 | ((null l) (terpri) (terpri)) | |
170 | (mapcar 'p_strng (reverse (cadr l))) | |
171 | (terpri) | |
172 | (terpri))) | |
173 | (setq outfile nil)))) | |
174 | (t (msg N "You must supply a file" N)))) | |
175 | ||
176 | ; This is called by delete and function definition | |
177 | ; in case the function to be deleted is being traced. | |
178 | ; It handles the traced-expr property hassles. | |
179 | ||
180 | (defun untraceDel (name) | |
181 | (let* ((fnName (concat name '_fp)) | |
182 | (tmp (get fnName 'traced-expr))) | |
183 | ||
184 | ; Do nothing if fn isn't being traced | |
185 | (cond ((null tmp)) | |
186 | (t (remprop fnName 'traced-expr) | |
187 | (setq TracedFns (remove fnName TracedFns)))))) | |
188 | ||
189 | (defun (cp$ delete) nil | |
190 | (mapcar 'dfn cmdLine)) | |
191 | ||
192 | (defun dfn (fn) | |
193 | (cond ((null (get 'sources fn)) (msg fn ": No such fn" N)) | |
194 | (t (remprop 'sources fn) | |
195 | (remob (concat fn '_fp)) | |
196 | (untraceDel fn)))) | |
197 | ||
198 | (defun (cp$ timer) nil | |
199 | (let ((d (car cmdLine))) | |
200 | (cond ((eq d 'on) (setq timeIt t) | |
201 | (msg N "Timing applications turned on" N)) | |
202 | ((eq d 'off) (setq timeIt nil) | |
203 | (msg N "Timing applications turned off" N)) | |
204 | (t (msg N "Bad Timing Mode" N))) | |
205 | (terpri))) | |
206 | ||
207 | (defun (cp$ script) nil | |
208 | (let ((cmd (get 'scriptCmd (car cmdLine)))) | |
209 | (cond (cmd (funcall cmd)) | |
210 | (t (msg N "Bad Script Mode" N))) | |
211 | (terpri))) | |
212 | ||
213 | ||
214 | (defun (scriptCmd open) nil | |
215 | (let ((nScriptName (cadr cmdLine))) | |
216 | (cond ((null nScriptName) (msg N "No Script-file specified" N)) | |
217 | (t | |
218 | (let ((Nptport (outfile nScriptName))) | |
219 | (cond ((null Nptport) (msg N "Can't open Script-file" N)) | |
220 | (t (msg N "Opening Script File" N) | |
221 | (and ptport (close ptport)) | |
222 | (setq ptport Nptport)))))))) | |
223 | ||
224 | ||
225 | (defun (scriptCmd append) nil | |
226 | (let ((nScriptName (cadr cmdLine))) | |
227 | (cond (ptport (patom nScriptName ptport))) | |
228 | (let ((Nptport (outfile nScriptName 'append))) | |
229 | (cond ((null Nptport) (msg N "Can't open Script-file" N)) | |
230 | (t (msg N "Appending to Script File" N) | |
231 | (and ptport (close ptport)) | |
232 | (setq ptport Nptport)))))) | |
233 | ||
234 | (defun (scriptCmd close) nil | |
235 | (close ptport) | |
236 | (setq ptport nil) | |
237 | (msg N "Closing Script File" N)) | |
238 | ||
239 | (defun (cp$ help) nil | |
240 | (terpri) | |
241 | (patom " Commands are:") | |
242 | (terpri) | |
243 | (do | |
244 | ((z (plist 'helpCmd) (cddr z))) | |
245 | ((null z)(terpri)) | |
246 | (terpri) | |
247 | (patom (cadr z)))) | |
248 | ||
249 | ||
250 | (defun (cp$ stats) nil | |
251 | (let ((statOption (get 'statFn (car cmdLine)))) | |
252 | (setq cmdLine (cdr cmdLine)) | |
253 | (cond (statOption (funcall statOption)) | |
254 | (t | |
255 | (msg N "Bad Stats Option" N) | |
256 | (terpri))))) | |
257 | ||
258 | (defun (statFn on) nil | |
259 | (terpri) | |
260 | (msg N "Stats collection turned on" N) | |
261 | (terpri) | |
262 | (terpri) | |
263 | (startDynStats)) | |
264 | ||
265 | ||
266 | (defun startDynStats nil | |
267 | (cond ((null DynTraceFlg) | |
268 | (setq DynTraceFlg t) ; initialize DynTraceFlg | |
269 | (setq TracedFns nil)) ; initialize TracedFns | |
270 | ||
271 | (t | |
272 | (terpri) | |
273 | (msg N "Dynamics statistic collection in progress" N) | |
274 | (terpri)))) | |
275 | ||
276 | ||
277 | ||
278 | (defun (statFn off) nil | |
279 | (terpri) | |
280 | (msg N "Stats collection turned off" N) | |
281 | (terpri) | |
282 | (terpri) | |
283 | (stopDynStats)) | |
284 | ||
285 | (defun (statFn reset) nil | |
286 | (terpri) | |
287 | (msg N "Clearing stats" N) | |
288 | (terpri) | |
289 | (terpri) | |
290 | (clrDynStats)) | |
291 | ||
292 | (defun (statFn print) nil | |
293 | (PrintMeasures (car cmdLine))) | |
294 | ||
295 | (defun (cp$ lisp) nil | |
296 | (break)) | |
297 | ||
298 | (defun (cp$ debug) nil | |
299 | (let ((d (car cmdLine))) | |
300 | (cond ((eq d 'on) (setq debug t) | |
301 | (msg N "Debug flag Set" N )) | |
302 | ((eq d 'off) (setq debug nil) | |
303 | (msg N "Debug flag Reset" N)) | |
304 | (t (msg N "Bad Debug Mode" N))) | |
305 | (terpri))) | |
306 | ||
307 | (defun (cp$ trace) nil | |
308 | (let ((mode (car cmdLine))) | |
309 | (setq cmdLine (cdr cmdLine)) | |
310 | (cond ((eq mode 'on) (Trace (mapcar 'intName cmdLine))) | |
311 | ((eq mode 'off) (Untrace (mapcar 'intName cmdLine))) | |
312 | (t (msg N "Bad Trace Mode" N))))) | |
313 | ||
314 | (defun intName (fName) | |
315 | (implode | |
316 | (nreverse | |
317 | (append | |
318 | '(p f _) | |
319 | (nreverse | |
320 | (aexplodec fName)))))) | |
321 | ||
322 | ||
323 | ; function so see if there's enought room on the line to print | |
324 | ; out some information. If not then start on a new line, too | |
325 | ; bad if the info is longer than one line. | |
326 | ||
327 | (defun makeroom (rMargin name) | |
328 | (cond ((greaterp (+ (flatc name 0) (nwritn)) rMargin) (msg N) t) | |
329 | (t nil))) | |
330 |