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