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