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