(FILECREATED "12-Feb-87 23:13:02" {FIREFS:CS:UNIV% ROCHESTER}<KOOMEN>LISP>BRKDWNREPORT.;1 8063   

      changes to:  (VARS BRKDWNREPORTCOMS)
		   (FNS BRKDWNFORM BDR-TYPE BRKDWN BRKDWNREPORT)

      previous date: "12-Feb-87 23:07:23" {FIREFS:CS:UNIV% ROCHESTER}<KOOMEN>LISP>BRKDWNREPORT.;1)


(* Copyright (c) 1987 by Johannes A. G. M. Koomen. All rights reserved.)

(PRETTYCOMPRINT BRKDWNREPORTCOMS)

(RPAQQ BRKDWNREPORTCOMS ((FNS BRKDWNREPORT BRKDWNFORM BDR-TYPE BDR-TYPE-SORTED BDR-COL BDR-RPT)))
(DEFINEQ

(BRKDWNREPORT
  [LAMBDA (TITLE BRKDWNSTREAM)                               (* Koomen "18-Dec-86 16:11")
    (DECLARE (GLOBALVARS BRKDWNLABELS))
    (if (NOT (OPENP BRKDWNSTREAM (QUOTE OUTPUT)))
	then (RESETLST (SETQ BRKDWNSTREAM (OPENSTREAM BRKDWNSTREAM (QUOTE OUTPUT)))
			   [RESETSAVE NIL (BQUOTE (CLOSEF? (\, BRKDWNSTREAM]
			   (BRKDWNREPORT TITLE BRKDWNSTREAM))
      else (PROG [ENTRYCNT (FIRSTCOL 0)
			       (TYPE-ENTRIES (for BDTYPE inside BRKDWNLABELS
						collect 

          (* * Each entry is a list of three elements: total frequency of calls, total quantity measured, and list of 
	  individual contributors, each of which is a 3-element list containing name, frequency and quantity measured.)


							  (LIST 0 0 NIL]
		     [for RESULT in (BRKDWNRESULTS T) as old ENTRYCNT from 0
			bind NAME FREQUENCY unless (ZEROP (SETQ FREQUENCY (CADR RESULT)))
			do (SETQ NAME (CAR RESULT))
			     (for QUANTITY in (CDDR RESULT) as TYPE-ENTRY in TYPE-ENTRIES
				unless (ZEROP QUANTITY)
				do (add (CAR TYPE-ENTRY)
					    FREQUENCY)
				     (add (CADR TYPE-ENTRY)
					    QUANTITY)
				     (push (CADDR TYPE-ENTRY)
					     (LIST NAME FREQUENCY QUANTITY)))
			     (SETQ FIRSTCOL (MAX FIRSTCOL (NCHARS NAME]
		     (SETQ FIRSTCOL (IPLUS FIRSTCOL 2))
		     (printout BRKDWNSTREAM "Breakdown Report:" 24 (OR TITLE ""))
		     (printout BRKDWNSTREAM T T "Breakdown Date:" 24 (DATE))
		     (printout BRKDWNSTREAM T T "Functions measured:" 24 ENTRYCNT)
		     (printout BRKDWNSTREAM T T "Non-zero entries:" T)
		     (for BDTYPE inside BRKDWNLABELS as TYPE-ENTRY in TYPE-ENTRIES
			bind N
			do (SETQ N (LENGTH (CADDR TYPE-ENTRY)))
			     (printout BRKDWNSTREAM 6 BDTYPE 24 .I6 N (if (EQP N 1)
									  then "  function"
									else "  functions")))
		     (printout BRKDWNSTREAM T T T)
		     (for BDTYPE inside BRKDWNLABELS as TYPE-ENTRY in TYPE-ENTRIES
			do (BDR-TYPE BRKDWNSTREAM FIRSTCOL (L-CASE BDTYPE)
					 (CAR TYPE-ENTRY)
					 (CADR TYPE-ENTRY)
					 (CADDR TYPE-ENTRY)))
		     (TERPRI BRKDWNSTREAM])

(BRKDWNFORM
  [LAMBDA (BRKDWNFORM BRKDWNFNS BRKDWNSTREAM NEWBRKDWNTYPE)
                                                             (* Koomen "12-Feb-87 22:58")
    (DECLARE (GLOBALVARS BRKDWNTYPE BRKDWNTYPES)
	       (LOCALVARS BRKDWNFORM BRKDWNFNS BRKDWNSTREAM NEWBRKDWNTYPE))
    (RESETLST (APPLY (FUNCTION UNBREAK)
			 BRKDWNFNS)
		(if NEWBRKDWNTYPE
		    then (RESETSAVE BRKDWNTYPE (if (EQ NEWBRKDWNTYPE T)
						       then (for BDT in BRKDWNTYPES
								 collect (CAR BDT))
						     else NEWBRKDWNTYPE)))
		(BREAKDOWN)
		[RESETSAVE (APPLY (FUNCTION BREAKDOWN)
				      BRKDWNFNS)
			     (BQUOTE (UNBREAK (\,@ BRKDWNFNS]
		(EVAL BRKDWNFORM)
		(BRKDWNREPORT BRKDWNFORM BRKDWNSTREAM])

(BDR-TYPE
  [LAMBDA (OUTSTREAM FIRSTCOL BDTYPE TOTAL-FREQUENCY TOTAL-QUANTITY ENTRIES)
                                                             (* Koomen "12-Feb-87 23:06")
    (if ENTRIES
	then [SORT ENTRIES (FUNCTION (LAMBDA (x y)
			   (GEQ (CADDR x)
				  (CADDR y]
	       (printout OUTSTREAM T (U-CASE BDTYPE)
			 "  --  sorted by cummulative " BDTYPE ":" T)
	       (BDR-TYPE-SORTED OUTSTREAM FIRSTCOL BDTYPE TOTAL-FREQUENCY TOTAL-QUANTITY ENTRIES)
	       (if (CDR ENTRIES)
		   then (SORT ENTRIES T)
			  (printout OUTSTREAM T (U-CASE BDTYPE)
				    "  --  alphabetic sort:" T)
			  (BDR-TYPE-SORTED OUTSTREAM FIRSTCOL BDTYPE TOTAL-FREQUENCY TOTAL-QUANTITY 
					     ENTRIES])

(BDR-TYPE-SORTED
  [LAMBDA (OUTSTREAM FIRSTCOL BDTYPE TOTAL-FREQUENCY TOTAL-QUANTITY ENTRIES)
                                                             (* Koomen "17-Dec-86 15:10")
    (PROG (COL1-START COL1-WIDTH COL1-FORMAT COL2-START COL2-WIDTH COL2-FORMAT COL3-START 
			COL3-WIDTH COL3-FORMAT COL4-START COL4-WIDTH COL4-FORMAT LINE-END)
	    (SETQ COL1-START FIRSTCOL)
	    (SETQ COL1-WIDTH 11)
	    [SETQ COL1-FORMAT (BQUOTE (FIX (\, COL1-WIDTH]
	    (SETQ COL2-START (PLUS COL1-START COL1-WIDTH 4))
	    (SETQ COL2-WIDTH 7)
	    [SETQ COL2-FORMAT (BQUOTE (FIX (\, COL2-WIDTH]
	    (SETQ COL3-START (PLUS COL2-START COL2-WIDTH 4))
	    (SETQ COL3-WIDTH 9)
	    (SETQ COL3-FORMAT (BQUOTE (FLOAT (\, COL3-WIDTH)
						   3)))
	    (SETQ COL4-START (PLUS COL3-START COL3-WIDTH 4))
	    (SETQ COL4-WIDTH 3)
	    [SETQ COL4-FORMAT (BQUOTE (FIX (\, COL4-WIDTH]
	    (SETQ LINE-END (PLUS COL4-START COL4-WIDTH))
	    (BDR-RPT "=" LINE-END OUTSTREAM)
	    (TERPRI OUTSTREAM)
	    (PRIN1 "Function:" OUTSTREAM)
	    (BDR-COL OUTSTREAM COL1-START COL1-WIDTH BDTYPE)
	    (BDR-COL OUTSTREAM COL2-START COL2-WIDTH "#calls")
	    (BDR-COL OUTSTREAM COL3-START COL3-WIDTH "per call")
	    (BDR-COL OUTSTREAM COL4-START COL4-WIDTH "%%")
	    (TERPRI OUTSTREAM)
	    (BDR-RPT "-" LINE-END OUTSTREAM)
	    (TERPRI OUTSTREAM)
	    (for ENTRY in ENTRIES as NLINES from 1 bind NAME FREQUENCY QUANTITY
								  (LASTLINE _ (IDIFFERENCE
									      (LENGTH ENTRIES)
									      4))
	       do (SETQ NAME (CAR ENTRY))
		    (SETQ FREQUENCY (CADR ENTRY))
		    (SETQ QUANTITY (CADDR ENTRY))
		    (PRIN1 NAME OUTSTREAM)
		    (BDR-COL OUTSTREAM COL1-START COL1-WIDTH QUANTITY COL1-FORMAT)
		    (BDR-COL OUTSTREAM COL2-START COL2-WIDTH FREQUENCY COL2-FORMAT)
		    (BDR-COL OUTSTREAM COL3-START COL3-WIDTH (FQUOTIENT QUANTITY FREQUENCY)
			       COL3-FORMAT)
		    (BDR-COL OUTSTREAM COL4-START COL4-WIDTH (FQUOTIENT (FTIMES 100.0 QUANTITY)
									    TOTAL-QUANTITY)
			       COL4-FORMAT)
		    (TERPRI OUTSTREAM)
		    (if (AND (ZEROP (IREMAINDER NLINES 10))
				 (ILESSP NLINES LASTLINE))
			then (BDR-RPT "-" LINE-END OUTSTREAM)
			       (TERPRI OUTSTREAM)))
	    (BDR-RPT "-" LINE-END OUTSTREAM)
	    (TERPRI OUTSTREAM)
	    (PRIN1 "Total:" OUTSTREAM)
	    (BDR-COL OUTSTREAM COL1-START COL1-WIDTH TOTAL-QUANTITY COL1-FORMAT)
	    (BDR-COL OUTSTREAM COL2-START COL2-WIDTH TOTAL-FREQUENCY COL2-FORMAT)
	    (BDR-COL OUTSTREAM COL3-START COL3-WIDTH (FQUOTIENT TOTAL-QUANTITY TOTAL-FREQUENCY)
		       COL3-FORMAT)
	    (TERPRI OUTSTREAM)
	    (BDR-RPT "=" LINE-END OUTSTREAM)
	    (TERPRI OUTSTREAM)
	    (TERPRI OUTSTREAM])

(BDR-COL
  [LAMBDA (OUTSTREAM START WIDTH VALUE FORMAT)               (* Koomen "16-Dec-86 17:24")
    (if FORMAT
	then (TAB START 1 OUTSTREAM)
	       (PRINTNUM FORMAT VALUE OUTSTREAM)
      else (SETQ START (IDIFFERENCE (IPLUS START WIDTH)
					  (NCHARS VALUE)))
	     (TAB START 1 OUTSTREAM)
	     (PRIN1 VALUE OUTSTREAM])

(BDR-RPT
  [LAMBDA (STR N OUTSTREAM)                                  (* Koomen "17-Dec-86 14:50")
    (for I from 1 to N do (PRIN1 STR OUTSTREAM])
)
(PUTPROPS BRKDWNREPORT COPYRIGHT ("Johannes A. G. M. Koomen" 1987))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (512 7973 (BRKDWNREPORT 522 . 2895) (BRKDWNFORM 2897 . 3703) (BDR-TYPE 3705 . 4464) (
BDR-TYPE-SORTED 4466 . 7414) (BDR-COL 7416 . 7794) (BDR-RPT 7796 . 7971)))))
STOP
