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