xref: /csrg-svn/old/lisp/fp/fp.vax/utils.l (revision 21735)
112074Sbaden ;  FP interpreter/compiler
212074Sbaden ;  Copyright (c) 1982  Scott B. Baden
312074Sbaden ;  Berkeley, California
4*21735Sdist ;
5*21735Sdist ;  Copyright (c) 1982 Regents of the University of California.
6*21735Sdist ;  All rights reserved.  The Berkeley software License Agreement
7*21735Sdist ;  specifies the terms and conditions for redistribution.
8*21735Sdist ;
9*21735Sdist (setq SCCS-utils.l "@(#)utils.l	5.1 (Berkeley) 05/31/85")
1012074Sbaden 
1112074Sbaden ; FP command processor
1212074Sbaden 
1312074Sbaden (include specials.l)
1412074Sbaden (declare (localf u$print_fn intName pfn makeroom
1512074Sbaden 		 getCmdLine) (special cmdLine codePort))
1612074Sbaden 
1712074Sbaden (defun get_cmd nil
1812074Sbaden   (prog (cmdLine command)
1912074Sbaden 	(setq cmdLine (getCmdLine))
2012074Sbaden 	(cond ((null cmdLine) (msg N "Illegal Command" N)
2112074Sbaden 	       (return 'cmd$$)))
2212074Sbaden 	(setq command (car cmdLine))
2312074Sbaden 	(setq cmdLine (cdr cmdLine))
2412074Sbaden 	(let ((cmdFn (get 'cp$ command)))
2512074Sbaden 	     (cond ((null cmdFn)  (msg  N "Illegal Command" N))
2612074Sbaden 		   (t (funcall cmdFn) (return 'cmd$$))))
2712074Sbaden 	(return 'cmd$$)))
2812074Sbaden 
2912074Sbaden (defun getCmdLine nil
3012074Sbaden   (do ((names nil) (name$ nil)
3112074Sbaden        (c (tyipeek) (tyipeek)))
3212074Sbaden       ((eq c #.CR)
3312074Sbaden        (Tyi)
3412074Sbaden        (cond (name$
3512074Sbaden 	      (nreverse (cons (implode (nreverse name$)) names)))
3612074Sbaden 	     (t (nreverse names))))
3712074Sbaden       (cond ((memq c #.blankOrTab)
3812074Sbaden 	     (cond (name$
3912074Sbaden 		    (setq names (cons (implode (nreverse name$)) names))
4012074Sbaden 		    (setq name$ nil)))
4112074Sbaden 	     (Tyi))
4212074Sbaden 
4312074Sbaden 	    (t  (setq name$ (cons (Tyi) name$))))))
4412074Sbaden 
4512074Sbaden 
4612074Sbaden (defun (cp$ load) nil
4712074Sbaden   (cond (cmdLine
4812074Sbaden 	 (let ((h (car cmdLine)))
4912074Sbaden 	      (cond
5012074Sbaden 	       ((null (setq infile (car (errset (infile (concat h '.fp)) nil))))
5112074Sbaden 		(cond
5212074Sbaden 		 ((null (setq infile (car  (errset (infile h) nil))))
5312074Sbaden 		  (msg N "Can't open file" N)))))))
5412074Sbaden 	(t (msg N "must supply a file" N))))
5512074Sbaden 
5612074Sbaden 
5712074Sbaden 
5812074Sbaden (defun (cp$ csave) nil
5912074Sbaden   (If cmdLine then
6012074Sbaden       (setq codePort (car (errset (outfile (car cmdLine)) nil)))
6112074Sbaden       (If (null codePort) then
6212074Sbaden 	  (msg N "Can't open file" N)
6312074Sbaden 
6412074Sbaden 	  else
6512074Sbaden 
6612074Sbaden 	  (msg (P codePort) "(declare (special DynTraceFlg level))" N)
6712074Sbaden 	  (do ((l (plist 'sources) (cddr l)))
6812074Sbaden 
6912074Sbaden 	      ((null l) (msg (P codePort) N) (close codePort))
7012074Sbaden 
7112074Sbaden 	      (apply 'pp (list '(P codePort) (concat (car l) '_fp)))
7212074Sbaden 	      (msg (P codePort) N)
7312074Sbaden 	      (msg (P codePort)
7412074Sbaden 		   "(eval-when (load) (putprop 'sources '"
7512074Sbaden 					       (cadr l)
7612074Sbaden 					       " '" (car l)
7712074Sbaden 					       "))" N))
7812074Sbaden 	  )
7912074Sbaden       else
8012074Sbaden 
8112074Sbaden       (msg "must supply a file" N)))
8212074Sbaden 
8312074Sbaden (defun (cp$ fsave) nil
8412074Sbaden   (If cmdLine then
8512074Sbaden       (setq codePort (car (errset (outfile (car cmdLine)) nil)))
8612074Sbaden       (If (null codePort) then
8712074Sbaden 	  (msg N "Can't open file" N)
8812074Sbaden 
8912074Sbaden 	  else
9012074Sbaden 
9112074Sbaden 	  (msg (P codePort) "(declare (special DynTraceFlg level))" N)
9212074Sbaden 	  (do ((l (plist 'sources) (cddr l)))
9312074Sbaden 
9412074Sbaden 	      ((null l) (msg (P codePort) N) (close codePort))
9512074Sbaden 
9612074Sbaden 	      (let ((fName (concat (car l) '_fp)))
9712074Sbaden 		   (msg (P codePort)
9812074Sbaden 			N "(def " fName N (getd `,fName) ")" N))
9912074Sbaden 
10012074Sbaden 	      (msg (P codePort)
10112074Sbaden 		   "(eval-when (load) (putprop 'sources '"
10212074Sbaden 					       (cadr l)
10312074Sbaden 					       " '" (car l)
10412074Sbaden 					       "))" N))
10512074Sbaden 	  )
10612074Sbaden       else
10712074Sbaden 
10812074Sbaden       (msg "must supply a file" N)))
10912074Sbaden 
11012074Sbaden 
11112074Sbaden (defun (cp$ cload) nil
11212074Sbaden   (If cmdLine then
11312074Sbaden       (let ((codeFile (car cmdLine)))
11412074Sbaden 	   (If (probef codeFile)
11512074Sbaden 	       then (load codeFile)
11612074Sbaden 	       else (If (probef (concat codeFile ".o"))
11712074Sbaden 			then (load (concat codeFile ".o"))
11812074Sbaden 			else (msg N codeFile ": No such File" N))))
11912074Sbaden       else (msg "must supply a file" N)))
12012074Sbaden 
12112074Sbaden 
12212074Sbaden (defun (cp$ fns) nil
12312074Sbaden   (terpri)
12412074Sbaden   (let ((z (plist 'sources)))
12512074Sbaden        (cond ((null z) nil)
12612074Sbaden 	     (t (do ((slist
12712074Sbaden 		      (sort
12812074Sbaden 		       (do ((l z (cddr l))
12912074Sbaden 			    (ls nil))
13012074Sbaden 			   ((null l) ls)
13112074Sbaden 			   (setq ls (cons (car l)  ls)))
13212074Sbaden 		       'alphalessp)
13312074Sbaden 		      (cdr slist))
13412074Sbaden 
13512074Sbaden 		     (trFns (mapcar 'extName TracedFns)))
13612074Sbaden 
13712074Sbaden 		    ((null slist) (terpri) (terpri))
13812074Sbaden 
13912074Sbaden 		    (let ((oldn (nwritn))
14012074Sbaden 			  (fnName  (car slist)))
14112074Sbaden 			 (cond ((memq fnName trFns) (setq fnName (concat
14212074Sbaden 								  fnName
14312074Sbaden 								  '@))))
14412074Sbaden 			 (let ((nl (makeroom 80 fnName)))
14512074Sbaden 			      (patom fnName)
14612074Sbaden 			      (let ((vv (- 13 (mod (- (nwritn)
14712074Sbaden 						      (cond (nl 0) (t oldn))) 12))))
14812074Sbaden 				   (cond ((lessp 80 (+ (nwritn) vv)) (terpri))
14912074Sbaden 					 (t
15012074Sbaden 					  (mapcar
15112074Sbaden 					   '(lambda (nil) (tyo #.BLANK)) (iota$fp vv))))))))))))
15212074Sbaden (defun (cp$ pfn) nil
15312074Sbaden   (mapcar '(lambda (u) (terpri) (u$print_fn u) (terpri)) cmdLine))
15412074Sbaden 
15512074Sbaden (defun  u$print_fn (fn_name)
15612074Sbaden   (let ((source nil))
15712074Sbaden        (setq source (get 'sources fn_name))
15812074Sbaden        (cond ((null source) (msg fn_name  " is not defined"))
15912074Sbaden 	     (t (mapcar 'p_strng (reverse source))))
16012074Sbaden        (terpri)))
16112074Sbaden 
16212074Sbaden (defun (cp$ save) nil
16312074Sbaden   (cond (cmdLine
16412074Sbaden 	 (cond ((null (setq outfile (car (errset (outfile (car cmdLine)) nil))))
16512074Sbaden 		(msg N "Can't open file" N))
16612074Sbaden 	       (t (let ((poport outfile))
16712074Sbaden 		       (terpri)
16812074Sbaden 		       (do ((l (plist 'sources) (cddr l)))
16912074Sbaden 			   ((null l) (terpri) (terpri))
17012074Sbaden 			   (mapcar 'p_strng (reverse (cadr l)))
17112074Sbaden 			   (terpri)
17212074Sbaden 			   (terpri)))
17312074Sbaden 		  (setq outfile nil))))
17412074Sbaden 	(t (msg N "You must supply a file" N))))
17512074Sbaden 
17612074Sbaden ; This is called by delete and function definition
17712074Sbaden ; in case the function to be deleted is being traced.
17812074Sbaden ; It handles the traced-expr property hassles.
17912074Sbaden 
18012074Sbaden (defun untraceDel (name)
18112074Sbaden   (let* ((fnName (concat name '_fp))
18212074Sbaden 	 (tmp (get fnName 'traced-expr)))
18312074Sbaden 
18412074Sbaden 	; Do nothing if fn isn't being traced
18512074Sbaden 	(cond ((null tmp))
18612074Sbaden 	      (t (remprop fnName 'traced-expr)
18712074Sbaden 		 (setq TracedFns (remove fnName TracedFns))))))
18812074Sbaden 
18912074Sbaden (defun (cp$ delete) nil
19012074Sbaden   (mapcar 'dfn cmdLine))
19112074Sbaden 
19212074Sbaden (defun dfn (fn)
19312074Sbaden   (cond ((null (get 'sources fn)) (msg fn ": No such fn" N))
19412074Sbaden 	(t (remprop 'sources fn)
19512074Sbaden 	   (remob (concat fn '_fp))
19612074Sbaden 	   (untraceDel fn))))
19712074Sbaden 
19812074Sbaden (defun (cp$ timer) nil
19912074Sbaden   (let ((d (car cmdLine)))
20012074Sbaden        (cond ((eq d 'on) (setq timeIt t)
20112074Sbaden 	      (msg N "Timing applications turned on" N))
20212074Sbaden 	     ((eq d 'off) (setq timeIt nil)
20312074Sbaden 	      (msg N "Timing applications turned off" N))
20412074Sbaden 	     (t (msg N "Bad Timing Mode" N)))
20512074Sbaden        (terpri)))
20612074Sbaden 
20712074Sbaden (defun (cp$ script) nil
20812074Sbaden   (let ((cmd (get 'scriptCmd (car cmdLine))))
20912074Sbaden        (cond (cmd (funcall cmd))
21012074Sbaden 	     (t (msg N "Bad Script Mode" N)))
21112074Sbaden        (terpri)))
21212074Sbaden 
21312074Sbaden 
21412074Sbaden (defun (scriptCmd open) nil
21512074Sbaden   (let ((nScriptName (cadr cmdLine)))
21612074Sbaden        (cond ((null  nScriptName) (msg N "No Script-file specified" N))
21712074Sbaden 	     (t
21812074Sbaden 	      (let ((Nptport (outfile nScriptName)))
21912074Sbaden 		   (cond ((null Nptport) (msg N "Can't open Script-file" N))
22012074Sbaden 			 (t (msg N  "Opening Script File" N)
22112074Sbaden 			    (and ptport (close ptport))
22212074Sbaden 			    (setq ptport Nptport))))))))
22312074Sbaden 
22412074Sbaden 
22512074Sbaden (defun (scriptCmd append) nil
22612074Sbaden   (let ((nScriptName (cadr cmdLine)))
22712074Sbaden        (cond (ptport (patom nScriptName ptport)))
22812074Sbaden        (let ((Nptport (outfile nScriptName 'append)))
22912074Sbaden 	    (cond ((null Nptport) (msg N "Can't open Script-file" N))
23012074Sbaden 		  (t (msg N "Appending to Script File" N)
23112074Sbaden 		     (and ptport (close ptport))
23212074Sbaden 		     (setq ptport Nptport))))))
23312074Sbaden 
23412074Sbaden (defun (scriptCmd close) nil
23512074Sbaden   (close ptport)
23612074Sbaden   (setq ptport nil)
23712074Sbaden   (msg N "Closing Script File" N))
23812074Sbaden 
23912074Sbaden (defun (cp$ help) nil
24012074Sbaden   (terpri)
24112074Sbaden   (patom "		Commands are:")
24212074Sbaden   (terpri)
24312074Sbaden   (do
24412074Sbaden    ((z (plist 'helpCmd) (cddr z)))
24512074Sbaden    ((null z)(terpri))
24612074Sbaden    (terpri)
24712074Sbaden    (patom (cadr z))))
24812074Sbaden 
24912074Sbaden 
25012074Sbaden (defun (cp$ stats) nil
25112074Sbaden   (let ((statOption (get 'statFn (car cmdLine))))
25212074Sbaden        (setq cmdLine (cdr cmdLine))
25312074Sbaden        (cond (statOption (funcall statOption))
25412074Sbaden 	     (t
25512074Sbaden 	      (msg N "Bad Stats Option" N)
25612074Sbaden 	      (terpri)))))
25712074Sbaden 
25812074Sbaden (defun (statFn on) nil
25912074Sbaden   (terpri)
26012074Sbaden   (msg N "Stats collection turned on" N)
26112074Sbaden   (terpri)
26212074Sbaden   (terpri)
26312074Sbaden   (startDynStats))
26412074Sbaden 
26512074Sbaden 
26612074Sbaden (defun startDynStats nil
26712074Sbaden   (cond ((null DynTraceFlg)
26812074Sbaden 	 (setq DynTraceFlg t) ; initialize DynTraceFlg
26912074Sbaden 	 (setq TracedFns nil)) ; initialize TracedFns
27012074Sbaden 
27112074Sbaden 	(t
27212074Sbaden 	 (terpri)
27312074Sbaden 	 (msg N "Dynamics statistic collection in progress" N)
27412074Sbaden 	 (terpri))))
27512074Sbaden 
27612074Sbaden 
27712074Sbaden 
27812074Sbaden (defun (statFn off) nil
27912074Sbaden   (terpri)
28012074Sbaden   (msg N "Stats collection turned off" N)
28112074Sbaden   (terpri)
28212074Sbaden   (terpri)
28312074Sbaden   (stopDynStats))
28412074Sbaden 
28512074Sbaden (defun (statFn reset) nil
28612074Sbaden   (terpri)
28712074Sbaden   (msg N "Clearing stats" N)
28812074Sbaden   (terpri)
28912074Sbaden   (terpri)
29012074Sbaden   (clrDynStats))
29112074Sbaden 
29212074Sbaden (defun (statFn print) nil
29312074Sbaden   (PrintMeasures (car cmdLine)))
29412074Sbaden 
29512074Sbaden (defun (cp$ lisp) nil
29612074Sbaden   (break))
29712074Sbaden 
29812074Sbaden (defun (cp$ debug) nil
29912074Sbaden   (let ((d (car cmdLine)))
30012074Sbaden        (cond ((eq d 'on) (setq debug t)
30112074Sbaden 	      (msg N "Debug flag Set" N ))
30212074Sbaden 	     ((eq d 'off) (setq debug nil)
30312074Sbaden 	      (msg  N "Debug flag Reset" N))
30412074Sbaden 	     (t (msg N "Bad Debug Mode" N)))
30512074Sbaden        (terpri)))
30612074Sbaden 
30712074Sbaden (defun (cp$ trace) nil
30812074Sbaden   (let ((mode (car cmdLine)))
30912074Sbaden        (setq cmdLine (cdr cmdLine))
31012074Sbaden        (cond ((eq mode 'on) (Trace (mapcar 'intName cmdLine)))
31112074Sbaden 	     ((eq mode 'off) (Untrace (mapcar 'intName cmdLine)))
31212074Sbaden 	     (t (msg N "Bad Trace Mode" N)))))
31312074Sbaden 
31412074Sbaden (defun intName (fName)
31512074Sbaden   (implode
31612074Sbaden    (nreverse
31712074Sbaden     (append
31812074Sbaden      '(p f _)
31912074Sbaden      (nreverse
32012074Sbaden       (aexplodec fName))))))
32112074Sbaden 
32212074Sbaden 
32312074Sbaden ; function so see if there's enought room on the line to print
32412074Sbaden ; out some information.  If not then start on a new line, too
32512074Sbaden ; bad if the info is longer than one line.
32612074Sbaden 
32712074Sbaden (defun makeroom (rMargin name)
32812074Sbaden   (cond ((greaterp (+ (flatc name 0) (nwritn)) rMargin) (msg N) t)
32912074Sbaden 	(t nil)))
33012074Sbaden 
331