(FILECREATED "23-Jul-86 15:50:25" ("compiled on " {QV}1.2K>LIBRARY>NOTEFILESTATS.;26) "12-Nov-85 14:59:23" recompiled changes: nothing in "INTERLISP-D 11-May-86 ..." dated "11-May-86 15:19:08") (FILECREATED "23-Jul-86 15:50:04" {QV}1.2K>LIBRARY>NOTEFILESTATS.;26 29488 changes to: ( MACROS NFSTAT.HistPlot) (VARS NOTEFILESTATSCOMS) previous date: "22-Jun-86 23:14:21" {QV}1.2K>LIBRARY>NOTEFILESTATS.;24) NFSTAT.AnalyzeRemoteNoteFileA0012 D1 (NAME ERRORSET F 0 FullFileName F 1 LocalFileName) PQ i(4 COPYFILE) NIL () NFSTAT.AnalyzeRemoteNoteFileA0013 D1 (NAME ERRORSET F 0 LocalFileName) Pid h(5 NCP.OpenNoteFile) NIL () NFSTAT.AnalyzeRemoteNoteFileA0014 D1 (NAME ERRORSET F 0 QuietFlg F 1 NoteFileData) P ci(3 NFSTAT.GatherNoteFileData) NIL () NFSTAT.AnalyzeRemoteNoteFileA0015 D1 (NAME ERRORSET) i(2 NCP.CloseNoteFile) NIL () NFSTAT.AnalyzeRemoteNoteFileA0016 D1 (NAME ERRORSET F 0 OutputFile) Pg i(6 OPENFILE) (3 OUTPUT) () NFSTAT.AnalyzeRemoteNoteFile D1 (P 4 ResultOfOper P 3 NoteFileData P 2 NoteFileAttributes P 1 LocalFileName P 0 FullFileName I 4 QuietFlg I 3 Don'tDeleteLocalCopyFlg I 2 OutputFile I 1 LocalHostAndDirectory I 0 NoteFileName) : hio ` @  `dHHg dMHg dNHg _dOHg _dOHg _dO ZgHg gggA YDhioHoIo oi oHoI oi \ddoI oi oI oi oI oi oB DhioBo JKBi B CI Ddio (467Q NCP.PrintMsg 453Q DELFILE 445Q CLOSEF 441Q HPRINT 430Q NCP.PrintMsg 406Q ERROR 375Q NFSTAT.AnalyzeRemoteNoteFileA0016 364Q ERROR 353Q NFSTAT.AnalyzeRemoteNoteFileA0015 342Q ERROR 331Q NFSTAT.AnalyzeRemoteNoteFileA0014 320Q ERROR 302Q NFSTAT.AnalyzeRemoteNoteFileA0013 271Q ERROR 266Q CONCAT 247Q NFSTAT.AnalyzeRemoteNoteFileA0012 236Q NCP.PrintMsg 206Q PACKFILENAME 170Q FILENAMEFIELD 144Q GETFILEINFO 124Q GETFILEINFO 104Q GETFILEINFO 67Q GETFILEINFO 52Q GETFILEINFO 27Q FULLNAME 22Q FLASHW 14Q NCP.PrintMsg 2 NCP.CurrentNoteFile) (201Q BODY 176Q NOTEFILE 173Q EXTENSION 165Q NAME 161Q NAME 141Q SIZE 121Q READDATE 101Q WRITEDATE 64Q CREATIONDATE 47Q AUTHOR 35Q NOTEFILEATTRIBUTESTYPE# 17Q PROMPTWINDOW) ( 464Q "Done." 424Q " ..." 417Q "Writing out results to " 402Q "Trouble opening " 371Q (NFSTAT.AnalyzeRemoteNoteFileA0016) 360Q "Trouble closing " 347Q (NFSTAT.AnalyzeRemoteNoteFileA0015) 336Q "Trouble gathering data for " 325Q (NFSTAT.AnalyzeRemoteNoteFileA0014) 314Q "Trouble opening " 276Q (NFSTAT.AnalyzeRemoteNoteFileA0013) 262Q " to " 255Q "Trouble copying from " 243Q (NFSTAT.AnalyzeRemoteNoteFileA0012) 232Q " ..." 225Q " to " 220Q "Copying " 11Q "Must close current open notefile first!") NFSTAT.GatherNoteFileData D1 (P 1 NoteFileDataRecord P 0 FileName I 0 QuietFlg)  ```gjd dJ`gjd dK`hdj dL`djdMdN` _dO` _dO``hdj _dO`gjd _dO`gjd _dO `gjd _dO_dOdjYd@ I@ @hio I(354Q NCP.PrintMsg 341Q NFSTAT.ProcessFileBoxHierarchies 327Q NFSTAT.ProcessCards 272Q ARRAY 246Q ARRAY 222Q ARRAY 176Q ARRAY 150Q HASHARRAY 131Q HASHARRAY 70Q ARRAY 51Q ARRAY 30Q ARRAY 2 NCP.CurrentNoteFile) (333Q NOTEFILEDATA 265Q FIXP 262Q NFSTAT.HistSize 241Q FIXP 236Q NFSTAT.HistSize 215Q FIXP 212Q NFSTAT.HistSize 170Q NFSTAT.HistSize 164Q FILEBOXDATATYPE# 145Q NFSTAT.HashArraySize 126Q NFSTAT.HashArraySize 101Q CARDSTATSTYPE# 62Q NFSTAT.HistSize 44Q FIXP 41Q NFSTAT.HistSize 23Q FIXP 20Q NFSTAT.HistSize 14Q ALLCARDSDATATYPE# 10Q NOTEFILEDATATYPE#) ( 351Q "Done.") NFSTAT.ProcessCardsA0001 D1 (P 26Q Link P 25Q Link P 22Q Link P 17Q Link P 10Q NumGlobalLinks P 7 NumFromLinks P 6 NumToLinks P 5 NumParents P 4 SubstanceSize P 3 FromLinks P 2 ToLinks P 1 CardType I 0 Card F 27Q NoteFileDataRecord F 30Q CardNum F 31Q $$1 F 32Q RealCardTotal F 33Q TotalFileBoxes F 34Q QuietFlg F 35Q CardTotal F 36Q $$2) W0kc0W8/dld Hj HH hioW0oW: @ @ h@  IW. __W4kc4OOkW2W2@ \ OOL KjO|O]J ^K _Jj__O_W2MNOO OMNOO Ig.W<JjO `O"JjO&lO( W6kc6J_ dgdgihOk_O__gOk_O^_$ gO"k_"O _ _* gO(k_(O&_&|dO, W. W.W.kh(646Q NFSTAT.IncrementHashItem 634Q NCP.LinkLabel 576Q NCP.LinkLabel 545Q NCP.LinkLabel 446Q NCP.LinkLabel 424Q NFSTAT.AddFileBoxDataToHist 351Q NFSTAT.AddCardDataToHist 330Q NFSTAT.AddCardDataToHist 263Q LENGTH 256Q LENGTH 234Q NFSTAT.AddCardSizeDataToHist 212Q NFSTAT.AddCardSizeDataToHist 206Q NFSTAT.ComputeSubstanceSize 124Q NFSTAT.FetchCardTypeData 106Q NCP.GetLinks 101Q NCP.GetLinks 75Q NCP.CardType 70Q NCP.PrintMsg 43Q \FZEROP 22Q REMAINDER 2 BLOCK) (661Q NOTEFILEDATA 654Q NOTEFILEDATA 641Q NOTEFILEDATA 601Q SubBox 550Q FiledCard 520Q GLOBAL 460Q FiledCard 452Q SubBox 365Q FILEBOXDATA 355Q FileBox 335Q CARDTYPEDATA 314Q ALLCARDSDATA 226Q CARDTYPEDATA 217Q CARDTYPEDATA 200Q ALLCARDSDATA 171Q ALLCARDSDATA 156Q CARDSTATS 151Q CARDSTATS 131Q CARDTYPEDATA 117Q NOTEFILEDATA) ( 62Q " out of " 54Q "Processing card number ") NFSTAT.ProcessCardsA0010 D1 (P 21Q EndBox P 20Q MidBox P 17Q i P 15Q HalfBox P 14Q BoxWidth P 13Q Hist P 12Q ModeVal P 11Q StartBox P 10Q LastNonEmptyEndBox P 7 NumSeen P 6 TotalDivBy2 P 2 StatsFromHist I 1 Key I 0 Item) @@ @`@HdIdnGnOdhdhdnjdh o@@hddhJojmjd7 M_L*JJdJJHI I_ko_`kj"OO OO(jOOm_"OO_ Kj;O JdJO O JdJO JJdKO KOK_JO  oJd YKjTONJOOn@j4NOK_%JOONOkKO"_OO_Ok_ML(324Q BLOCK 21Q NFSTAT.FillInCardStats 2 BLOCK) (660Q STATSFROMHIST 614Q STATSFROMHIST 561Q STATSFROMHIST 542Q STATSFROMHIST 500Q STATSFROMHIST 474Q STATSFROMHIST 461Q STATSFROMHIST 442Q STATSFROMHIST 425Q STATSFROMHIST 405Q STATSFROMHIST 313Q NFSTAT.HistSize 247Q STATSFROMHIST 234Q STATSFROMHIST 230Q STATSFROMHIST 167Q STATSFROMHIST 147Q CARDTYPEDATA 141Q CARDTYPEDATA 47Q CARDSTATS 42Q CARDTYPEDATA 35Q STATSFROMHISTTYPE# 32Q CARDSTATS 25Q CARDTYPEDATA 14Q CARDTYPEDATA 6 CARDTYPEDATA) ( 555Q 0.0 304Q 2.0 175Q 2.0 135Q (144Q 1750Q)) NFSTAT.ProcessCards D1 (P 70Q EndBox P 67Q MidBox P 66Q i P 64Q EndBox P 63Q MidBox P 62Q i P 60Q HalfBox P 57Q BoxWidth P 56Q Hist P 55Q ModeVal P 54Q StartBox P 53Q LastNonEmptyEndBox P 52Q NumSeen P 51Q TotalDivBy2 P 46Q StatsFromHist P 45Q EndBox P 44Q MidBox P 43Q i P 41Q HalfBox P 40Q BoxWidth P 37Q Hist P 36Q ModeVal P 35Q StartBox P 34Q LastNonEmptyEndBox P 33Q NumSeen P 32Q TotalDivBy2 P 27Q StatsFromHist P 26Q HalfBox P 25Q BoxWidth P 24Q Hist P 23Q ModeVal P 22Q StartBox P 21Q LastNonEmptyEndBox P 20Q NumSeen P 17Q TotalDivBy2 P 14Q StatsFromHist P 13Q $$2 P 12Q $$1 P 3 TotalFileBoxes P 2 RealCardTotal P 1 CardTotal P 0 CardNum I 1 QuietFlg I 0 NoteFileDataRecord) B9jg kjdd AhiokoI @ @_g Ahio OJOO O`dJdnGnOdhdhdnjdh  oOOhddhOojmjd7O_(OOOdOO @g O`dKdnGnOdhdhdnjdh khOddhO.ojmjd7!O2NX_*ko_,`kj"%OFODO(OF(jO$O*m_JO$O,_HLj?OHOdOOHOHOdOOHOOdLOHLO&L_&OOH oOd ^LjYO OOO"O$n@j7OO L_ 'OO$O OO*kLOJ_"O$O*_$OFk_FO_O__>O0O.O.dO.O.O`dKdnGnOdhdhdnjdh &khOddhOLojmjd70OP[a_@ko_B`kj"4OdOb%O>Od(^`NjO:O@m_hO:OB_fMj?OfO.dO.OfOfO.dO.OfO.O.dMOfMO(3064Q BLOCK 2277Q BLOCK 1346Q BLOCK 415Q BLOCK) (3437Q STATSFROMHIST 3372Q STATSFROMHIST 3336Q STATSFROMHIST 3317Q STATSFROMHIST 3255Q STATSFROMHIST 3251Q STATSFROMHIST 3236Q STATSFROMHIST 3217Q STATSFROMHIST 3202Q STATSFROMHIST 3162Q STATSFROMHIST 3116Q CARDHISTENTRY 3110Q CARDHISTENTRYTYPE# 3053Q NFSTAT.HistSize 3007Q STATSFROMHIST 2774Q STATSFROMHIST 2770Q STATSFROMHIST 2652Q STATSFROMHIST 2605Q STATSFROMHIST 2551Q STATSFROMHIST 2532Q STATSFROMHIST 2470Q STATSFROMHIST 2464Q STATSFROMHIST 2451Q STATSFROMHIST 2432Q STATSFROMHIST 2415Q STATSFROMHIST 2375Q STATSFROMHIST 2331Q CARDHISTENTRY 2323Q CARDHISTENTRYTYPE# 2266Q NFSTAT.HistSize 2214Q STATSFROMHIST 2113Q CARDSTATS 2106Q STATSFROMHISTTYPE# 2103Q CARDSTATS 2062Q STATSFROMHIST 2047Q STATSFROMHIST 2043Q STATSFROMHIST 1721Q STATSFROMHIST 1654Q STATSFROMHIST 1620Q STATSFROMHIST 1601Q STATSFROMHIST 1537Q STATSFROMHIST 1533Q STATSFROMHIST 1520Q STATSFROMHIST 1501Q STATSFROMHIST 1464Q STATSFROMHIST 1444Q STATSFROMHIST 1400Q CARDHISTENTRY 1372Q CARDHISTENTRYTYPE# 1335Q NFSTAT.HistSize 1263Q STATSFROMHIST 1162Q CARDSTATS 1155Q STATSFROMHISTTYPE# 1152Q CARDSTATS 1131Q STATSFROMHIST 1116Q STATSFROMHIST 1112Q STATSFROMHIST 770Q STATSFROMHIST 723Q STATSFROMHIST 667Q STATSFROMHIST 650Q STATSFROMHIST 606Q STATSFROMHIST 602Q STATSFROMHIST 567Q STATSFROMHIST 550Q STATSFROMHIST 533Q STATSFROMHIST 513Q STATSFROMHIST 447Q CARDHISTENTRY 441Q CARDHISTENTRYTYPE# 404Q NFSTAT.HistSize 332Q STATSFROMHIST 231Q CARDSTATS 224Q STATSFROMHISTTYPE# 221Q CARDSTATS 200Q STATSFROMHIST 165Q STATSFROMHIST 161Q STATSFROMHIST 114Q STATSFROMHIST 13Q CARDSTATS 6 STATSFROMHISTTYPE# 3 CARDSTATS) ( 3332Q 0.0 3044Q 2.0 2545Q 0.0 2257Q 2.0 2222Q 2.0 1614Q 0.0 1326Q 2.0 1271Q 2.0 663Q 0.0 375Q 2.0 340Q 2.0 122Q 2.0) NFSTAT.AnalyzeSetsOfNoteFiles D1 (P 4 Prefix P 3 FileNames P 2 ArgNum P 0 NumArgs) $eHk"JdIhaJka[L JlZ(32Q NFSTAT.AnalyzeListOfNoteFiles) NIL () NFSTAT.AnalyzeListOfNoteFiles D1 (P 0 NoteFile I 1 OutputNamePrefix I 0 NoteFiles) @dHgHA h(23Q NFSTAT.AnalyzeRemoteNoteFile 20Q NFSTAT.MakeOutputFileName) (13Q {dsk1}) () NFSTAT.MakeOutputFileName D1 (I 1 Owner I 0 NoteFileName) ,ggghggghgAo@g (51Q PACKFILENAME 45Q CONCAT 42Q FILENAMEFIELD) (37Q NAME 26Q NAME 22Q VERSION 17Q data 14Q EXTENSION 10Q DIRECTORY 5 {dsk2} 2 HOST) ( 33Q "-") NFSTAT.InspectDataFile D1 (P 0 File I 0 FileName) @g Hdi H (30Q INSPECT 24Q CLOSEF 20Q HREAD 6 OPENFILE) (3 INPUT) () (PRETTYCOMPRINT NOTEFILESTATSCOMS) (RPAQQ NOTEFILESTATSCOMS ((* * This code computes statistics for a notefile.) (GLOBALVARS NFSTAT.HistSize NFSTAT.HashArraySize) (VARS (NFSTAT.HistSize 100) (NFSTAT.HashArraySize 100)) (RECORDS NOTEFILEATTRIBUTES NOTEFILEDATA ALLCARDSDATA CARDTYPEDATA FILEBOXDATA CARDHISTENTRY FILEBOXHISTENTRY CARDSTATS STATSFROMHIST) (* * Top level functions.) (FNS NFSTAT.AnalyzeRemoteNoteFile NFSTAT.GatherNoteFileData) (* * Helper functions.) (FNS NFSTAT.ProcessCards NFSTAT.ProcessFileBoxHierarchies) (FNS NFSTAT.AddCardDataToHist NFSTAT.AddFileBoxDataToHist NFSTAT.AddCardSizeDataToHist NFSTAT.MakeFreshHistRecord NFSTAT.TraverseFileBoxHierarchy NFSTAT.ComputeSubstanceSize NFSTAT.IncrementHashItem NFSTAT.FetchCardTypeData NFSTAT.FillInCardStats) (MACROS NFSTAT.AddFieldEntryToHist NFSTAT.AnalyzeHist) (* * Miscellaneous accelerators.) (FNS NFSTAT.AnalyzeSetsOfNoteFiles NFSTAT.AnalyzeListOfNoteFiles NFSTAT.MakeOutputFileName NFSTAT.InspectDataFile) (* * Functions for plotting.) (MACROS NFSTAT.HistPlot) (DECLARE: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML) (LAMA NFSTAT.AnalyzeSetsOfNoteFiles)))) ) (RPAQQ NFSTAT.HistSize 100) (RPAQQ NFSTAT.HashArraySize 100) (DATATYPE NOTEFILEATTRIBUTES (FULLNAME AUTHOR CREATIONDATE WRITEDATE READDATE (SIZE INTEGER))) (DATATYPE NOTEFILEDATA (ALLCARDSDATA CARDTYPESHASHARRAY FILEBOXDATA LINKTYPESHASHARRAY (NUMLINKS INTEGER))) (DATATYPE ALLCARDSDATA (ALLCARDSSIZEHIST1 ALLCARDSSIZEHIST2 ALLCARDSHIST ALLCARDSSTATS)) (DATATYPE CARDTYPEDATA (CARDTYPESIZEHIST1 CARDTYPESIZEHIST2 CARDTYPEHIST CARDTYPESTATS)) (DATATYPE FILEBOXDATA (FILEBOXHIST FILEDCARDSTATS SUBBOXSTATS TOCDEPTHHIST TOCDEPTHSTATS TBFDEPTHHIST TBFDEPTHSTATS ORPHDEPTHHIST ORPHDEPTHSTATS)) (DATATYPE CARDHISTENTRY ((HISTENTRYPARENTS INTEGER) (HISTENTRYTOLINKS INTEGER) (HISTENTRYFROMLINKS INTEGER) (HISTENTRYGLOBALLINKS INTEGER))) (DATATYPE FILEBOXHISTENTRY ((HISTENTRYFILEDCARDLINKS INTEGER) (HISTENTRYSUBBOXLINKS INTEGER))) (DATATYPE CARDSTATS ((TOTAL INTEGER) PARENTSSTATS TOLINKSSTATS FROMLINKSSTATS GLOBALLINKSSTATS SIZESTATS)) (DATATYPE STATSFROMHIST ((TOTAL INTEGER) (MIN FLOATING) (MAX FLOATING) (MEAN FLOATING) (MEDIAN FLOATING) (MODE FLOATING))) (/DECLAREDATATYPE (QUOTE NOTEFILEATTRIBUTES) (QUOTE (POINTER POINTER POINTER POINTER POINTER FIXP)) ( QUOTE ((NOTEFILEATTRIBUTES 0 POINTER) (NOTEFILEATTRIBUTES 2 POINTER) (NOTEFILEATTRIBUTES 4 POINTER) ( NOTEFILEATTRIBUTES 6 POINTER) (NOTEFILEATTRIBUTES 8 POINTER) (NOTEFILEATTRIBUTES 10 FIXP))) (QUOTE 12) ) (/DECLAREDATATYPE (QUOTE NOTEFILEDATA) (QUOTE (POINTER POINTER POINTER POINTER FIXP)) (QUOTE (( NOTEFILEDATA 0 POINTER) (NOTEFILEDATA 2 POINTER) (NOTEFILEDATA 4 POINTER) (NOTEFILEDATA 6 POINTER) ( NOTEFILEDATA 8 FIXP))) (QUOTE 10)) (/DECLAREDATATYPE (QUOTE ALLCARDSDATA) (QUOTE (POINTER POINTER POINTER POINTER)) (QUOTE ((ALLCARDSDATA 0 POINTER) (ALLCARDSDATA 2 POINTER) (ALLCARDSDATA 4 POINTER) (ALLCARDSDATA 6 POINTER))) (QUOTE 8)) (/DECLAREDATATYPE (QUOTE CARDTYPEDATA) (QUOTE (POINTER POINTER POINTER POINTER)) (QUOTE ((CARDTYPEDATA 0 POINTER) (CARDTYPEDATA 2 POINTER) (CARDTYPEDATA 4 POINTER) (CARDTYPEDATA 6 POINTER))) (QUOTE 8)) (/DECLAREDATATYPE (QUOTE FILEBOXDATA) (QUOTE (POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER)) (QUOTE ((FILEBOXDATA 0 POINTER) (FILEBOXDATA 2 POINTER) (FILEBOXDATA 4 POINTER) ( FILEBOXDATA 6 POINTER) (FILEBOXDATA 8 POINTER) (FILEBOXDATA 10 POINTER) (FILEBOXDATA 12 POINTER) ( FILEBOXDATA 14 POINTER) (FILEBOXDATA 16 POINTER))) (QUOTE 18)) (/DECLAREDATATYPE (QUOTE CARDHISTENTRY) (QUOTE (FIXP FIXP FIXP FIXP)) (QUOTE ((CARDHISTENTRY 0 FIXP) ( CARDHISTENTRY 2 FIXP) (CARDHISTENTRY 4 FIXP) (CARDHISTENTRY 6 FIXP))) (QUOTE 8)) (/DECLAREDATATYPE (QUOTE FILEBOXHISTENTRY) (QUOTE (FIXP FIXP)) (QUOTE ((FILEBOXHISTENTRY 0 FIXP) ( FILEBOXHISTENTRY 2 FIXP))) (QUOTE 4)) (/DECLAREDATATYPE (QUOTE CARDSTATS) (QUOTE (FIXP POINTER POINTER POINTER POINTER POINTER)) (QUOTE (( CARDSTATS 0 FIXP) (CARDSTATS 2 POINTER) (CARDSTATS 4 POINTER) (CARDSTATS 6 POINTER) (CARDSTATS 8 POINTER) (CARDSTATS 10 POINTER))) (QUOTE 12)) (/DECLAREDATATYPE (QUOTE STATSFROMHIST) (QUOTE (FIXP FLOATP FLOATP FLOATP FLOATP FLOATP)) (QUOTE (( STATSFROMHIST 0 FIXP) (STATSFROMHIST 2 FLOATP) (STATSFROMHIST 4 FLOATP) (STATSFROMHIST 6 FLOATP) ( STATSFROMHIST 8 FLOATP) (STATSFROMHIST 10 FLOATP))) (QUOTE 12)) (DEFMACRO NFSTAT.AddFieldEntryToHist (HistType Hist FieldName Num) (* * First make sure that Hist has a non-nil Num entry. Then increment FieldName field of the record in that entry. This is a macro so as to avoid call to RECORDACCESS.) (BQUOTE (LET* ((Index (if (GEQ , Num NFSTAT.HistSize) then (SUB1 NFSTAT.HistSize) else , Num)) (Val (ELT , Hist Index))) (if (NULL Val) then (SETQ Val (SETA , Hist Index (NFSTAT.MakeFreshHistRecord (QUOTE , HistType))))) (replace (, HistType , FieldName) of Val with (ADD1 (fetch (, HistType , FieldName) of Val)))))) (DEFMACRO NFSTAT.AnalyzeHist (Hists BoxWidths Total RecordType Field) (* * Compute statistics on the data in Hist into a STATSFROMHIST record. If Field is non-nil, then hist entries are records of type RecordType and we're interested in Field of that record. Otherwise, hist entries are numbers. This is a macro to avoid doing RECORDACCESS.) (* * Hists can be a list of histograms which should be the same length as IntervalWidths. The latter gives the width of a histogram entry or box, one for each histogram.) (BQUOTE (LET ((StatsFromHist (create STATSFROMHIST TOTAL _ , Total MIN _ 99999.0 MAX _ 0.0 MEAN _ 0.0 MEDIAN _ -1.0 MODE _ 0))) (with STATSFROMHIST StatsFromHist (for Hist in (MKLIST , Hists) as BoxWidth in (MKLIST , BoxWidths) bind TotalDivBy2 _ (FQUOTIENT TOTAL 2) NumSeen _ 0 LastNonEmptyEndBox _ -1 StartBox _ 0 ModeVal _ 0 HalfBox do (SETQ HalfBox (FQUOTIENT (SUB1 BoxWidth) 2 )) (for i from 0 to (SUB1 NFSTAT.HistSize) eachtime (BLOCK) bind MidBox EndBox do (LET* ((Entry (ELT Hist i)) (Val , (if (OR (NULL RecordType) (NULL Field)) then (BQUOTE (OR Entry 0)) else (BQUOTE (OR ( AND (type? , RecordType Entry) (fetch (, RecordType , Field) of Entry)) 0))))) (SETQ EndBox (PLUS StartBox BoxWidth -1)) (SETQ MidBox (PLUS StartBox HalfBox)) (* Update MAX and MIN.) (if (GREATERP Val 0) then (if (LESSP MidBox MIN) then (SETQ MIN MidBox)) (if (GREATERP MidBox MAX) then (SETQ MAX MidBox))) (* Keep running total in MEAN.) (add MEAN (TIMES Val MidBox)) (* Update MODE.) (if (GREATERP Val ModeVal) then (SETQ ModeVal Val) (SETQ MODE MidBox)) (* Compute MEDIAN if not already done.) (if (AND (LESSP MEDIAN 0.0) (GREATERP Val 0)) then (if (EQUAL NumSeen TotalDivBy2) then (SETQ MEDIAN ( FQUOTIENT (PLUS LastNonEmptyEndBox StartBox) 2)) elseif (LESSP TotalDivBy2 (add NumSeen Val)) then ( SETQ MEDIAN (FPLUS StartBox (FQUOTIENT (TIMES (DIFFERENCE NumSeen TotalDivBy2) (SUB1 BoxWidth)) Val))) else (SETQ LastNonEmptyEndBox EndBox))) (* Set up StartBox for next iteration.) (add StartBox BoxWidth)))) (* Divide total in MEAN by num cards.) (SETQ MEAN (FQUOTIENT MEAN TOTAL)) StatsFromHist)) )) (DEFMACRO NFSTAT.HistPlot (Hist Label &OPTIONAL RecordName &OPTIONAL FieldName) (* * Create a histogram plot using HISTPLOT from the PLOTEXAMPLES package of that field of Hist given by FieldName. If FieldName is nil, then Hist is assumed to contain integers rather than datatype entries.) (if RecordName then (BQUOTE (HISTPLOT (for i from 0 to (SUB1 NFSTAT.HistSize) collect (LET ((HistEntry ( ELT , Hist i))) (CONS i (OR (AND (type? , RecordName HistEntry) (fetch (, RecordName , FieldName) of HistEntry)) 0)))) (OR , Label (CONCAT (QUOTE , FieldName) " of " (QUOTE , RecordName))))) else (BQUOTE (HISTPLOT (for i from 0 to (SUB1 NFSTAT.HistSize) collect (LET ((HistEntry (ELT , Hist i))) (CONS i ( OR (NUMBERP HistEntry) 0)))) , Label)))) (PUTPROPS NOTEFILESTATS COPYRIGHT ("Xerox Corporation" 1986)) NIL