(FILECREATED "26-May-86 18:04:19" {QV}<NOTECARDS>1.3K>LIBRARY>NCSTAT.;8 12683  

      changes to:  (FNS NCStat.InfoAboutFileBoxHierarchy NCStat.MarkDepthAndTerminals 
			NCStat.SizeOfFileBoxHierarchy NCStat.DepthOfFileBoxHierarchy 
			NCStat.#FileBoxesInHierarchy NCStat.#LinksFromCard NCStat.#CardsInNoteFile)
		   (VARS NCSTATCOMS)

      previous date: "22-May-86 17:55:47" {QV}<NOTECARDS>1.3K>LIBRARY>NCSTAT.;1)


(* Copyright (c) 1986 by Xerox Corporation. All rights reserved.)

(PRETTYCOMPRINT NCSTATCOMS)

(RPAQQ NCSTATCOMS ((FNS NCStat.SizeOfFileBoxHierarchy NCStat.#LinksFromCard 
			  NCStat.InfoAboutFileBoxHierarchy NCStat.MarkDepthAndTerminals 
			  NCStat.#CardsInNoteFile)))
(DEFINEQ

(NCStat.SizeOfFileBoxHierarchy
  (LAMBDA (RootBox)                                          (* fgh: "22-May-86 20:09")

          (* * How many file boxes and cards in the file box hierarchy that starts at RootCard. Include both SubBox 
	  andFiledcard links to help very early NFs e.g., Nato-missiles, that had aproblem distinguishing these links.)



          (* * fgh 5/22/86 First created.)


    (if (NCP.ValidCard RootBox)
	then (LET ((Closure (NCP.ComputeTransitiveClosure RootBox (QUOTE (SubBox FiledCard))
							      999999)))
		    (LIST (for Card in Closure count (EQ (QUOTE FileBox)
								   (NCP.CardType Card)))
			    (for Card in Closure count (NEQ (QUOTE FileBox)
								    (NCP.CardType Card))))))))

(NCStat.#LinksFromCard
  (LAMBDA (Card Don'tIncludeGlobalFlg)                       (* fgh: "22-May-86 17:56")

          (* * Returns the number of ToLinks emenating from Card. If Don'tIncludeGlobalFlg is non-NIL, eliminates Global 
	  ToLinks)



          (* * fgh 5/22/86 First created.)


    (LET (Links)
         (if (NULL Card)
	     then (SETQ Card (NCP.WhichCard)))
         (if (NCP.ValidCard Card)
	     then (SETQ Links (NCP.GetLinks Card))
		    (if Don'tIncludeGlobalFlg
			then (SETQ Links (for Link in Links
						when (NEQ (QUOTE GLOBAL)
							      (CAADR (NCP.LinkDesc Link)))
						collect Links))))
         (LENGTH Links))))

(NCStat.InfoAboutFileBoxHierarchy
  (LAMBDA (RootCard)                                         (* fgh: "26-May-86 17:01")

          (* * Compute some interesting info about a filebox hierarchy)



          (* * fgh 5/22/86 First created.)


    (LET ((Marker (GENSYM))
	  (TerminalMarker (GENSYM)))
         (if (NCP.ValidCard RootCard)
	     then
	      (NCStat.MarkDepthAndTerminals RootCard 0 Marker TerminalMarker)
	      (PROG1 (LIST (QUOTE #FileBoxes)
			       (LET ((Count 0))
				    (NCP.MapCards (fetch (Card NoteFile) of RootCard)
						    (FUNCTION (LAMBDA (Card)
							(if (AND (EQ (NCP.CardType Card)
									   (QUOTE FileBox))
								     (NC.FetchUserDataProp Card 
											   Marker))
							    then (SETQ Count (ADD1 Count))))))
				Count)
			       (QUOTE #Cards)
			       (LET ((Count 0))
				    (NCP.MapCards (fetch (Card NoteFile) of RootCard)
						    (FUNCTION (LAMBDA (Card)
							(if (AND (NEQ (NCP.CardType Card)
									    (QUOTE FileBox))
								     (NC.FetchUserDataProp Card 
											   Marker))
							    then (SETQ Count (ADD1 Count))))))
				Count)
			       (QUOTE MaxDepth)
			       (LET ((MaxDepth 0))
				    (NCP.MapCards (fetch (Card NoteFile) of RootCard)
						    (FUNCTION (LAMBDA (Card)
							(LET (Depth)
							     (if (AND (EQ (NCP.CardType
										  Card)
										(QUOTE FileBox))
									  (SETQ Depth
									    (CAR (
									     NC.FetchUserDataProp
										     Card Marker))))
								 then (SETQ MaxDepth
									  (MAX MaxDepth Depth)))))))
				MaxDepth)
			       (QUOTE MinDepth)
			       (LET ((MinDepth 9999999))
				    (NCP.MapCards (fetch (Card NoteFile) of RootCard)
						    (FUNCTION (LAMBDA (Card)
							(LET (Depth)
							     (if (AND (EQ (NCP.CardType
										  Card)
										(QUOTE FileBox))
									  (SETQ Depth
									    (CAR (
									     NC.FetchUserDataProp
										     Card Marker)))
									  (NC.FetchUserDataProp
									    Card TerminalMarker))
								 then (SETQ MinDepth
									  (MIN MinDepth Depth)))))))
				MinDepth)
			       (QUOTE AvgDepth)
			       (LET ((SumDepth 0)
				     (Count 0))
				    (NCP.MapCards (fetch (Card NoteFile) of RootCard)
						    (FUNCTION (LAMBDA (Card)
							(LET (Depth)
							     (if (AND (SETQ Depth
									    (CAR (
									     NC.FetchUserDataProp
										     Card Marker)))
									  (NC.FetchUserDataProp
									    Card TerminalMarker))
								 then (SETQ SumDepth
									  (PLUS SumDepth Depth))
									(SETQ Count (ADD1 Count)))
							  ))))
				    (FQUOTIENT SumDepth Count))
			       (QUOTE AvgBoxesPerBox)
			       (LET ((Sum 0)
				     (Count 0))
				    (NCP.MapCards (fetch (Card NoteFile) of RootCard)
						    (FUNCTION (LAMBDA (Card)
							(if (EQ (NCP.CardType Card)
								    (QUOTE FileBox))
							    then
							     (LET (#SubBoxes)
							          (if (SETQ #SubBoxes
									  (CADDR (
									     NC.FetchUserDataProp
										     Card Marker)))
								      then (SETQ Sum
									       (PLUS Sum #SubBoxes))
									     (SETQ Count
									       (ADD1 Count))))))))
				    (FQUOTIENT Sum Count))
			       (QUOTE MaxCardsPerBox)
			       (LET ((Max 0))
				    (NCP.MapCards
				      (fetch (Card NoteFile) of RootCard)
				      (FUNCTION (LAMBDA (Card)
					  (if (EQ (NCP.CardType Card)
						      (QUOTE FileBox))
					      then (LET (#Cards)
						          (if (SETQ #Cards
								  (CADDDR (NC.FetchUserDataProp
									      Card Marker)))
							      then (SETQ Max (MAX Max #Cards))
								     (if (ZEROP #Cards)
									 then (PRINT
										  (NCP.CardTitle
										    Card)))))))))
				Max)
			       (QUOTE MinCardsPerBox)
			       (LET ((Min 999999))
				    (NCP.MapCards (fetch (Card NoteFile) of RootCard)
						    (FUNCTION (LAMBDA (Card)
							(if (EQ (NCP.CardType Card)
								    (QUOTE FileBox))
							    then
							     (LET (#Cards)
							          (if (SETQ #Cards
									  (CADDDR (
									     NC.FetchUserDataProp
										      Card Marker)))
								      then (SETQ Min
									       (MIN Min #Cards))))))
						      ))
				Min)
			       (QUOTE MinCardsPerBoxForBoxesWithGT1Card)
			       (LET ((Min 999999))
				    (NCP.MapCards
				      (fetch (Card NoteFile) of RootCard)
				      (FUNCTION (LAMBDA (Card)
					  (if (EQ (NCP.CardType Card)
						      (QUOTE FileBox))
					      then (LET (#Cards)
						          (if (AND (SETQ #Cards
									 (CADDDR (
									     NC.FetchUserDataProp
										     Card Marker)))
								       (NOT (ZEROP #Cards)))
							      then (SETQ Min (MIN Min #Cards))))
						))))
				Min)
			       (QUOTE AvgCardsPerBox)
			       (LET ((Sum 0)
				     (Count 0))
				    (NCP.MapCards (fetch (Card NoteFile) of RootCard)
						    (FUNCTION (LAMBDA (Card)
							(if (EQ (NCP.CardType Card)
								    (QUOTE FileBox))
							    then
							     (LET (#Cards)
							          (if (SETQ #Cards
									  (CADDDR (
									     NC.FetchUserDataProp
										      Card Marker)))
								      then (SETQ Sum
									       (PLUS Sum #Cards))
									     (SETQ Count
									       (ADD1 Count))))))))
				    (FQUOTIENT Sum Count))
			       (QUOTE AvgBoxesPerCard)
			       (LET ((Sum 0)
				     (Count 0))
				    (NCP.MapCards (fetch (Card NoteFile) of RootCard)
						    (FUNCTION (LAMBDA (Card)
							(if (NEQ (NCP.CardType Card)
								     (QUOTE FileBox))
							    then
							     (LET (#Cards)
							          (if (SETQ #Cards
									  (CADR (
									     NC.FetchUserDataProp
										    Card Marker)))
								      then (SETQ Sum
									       (PLUS Sum #Cards))
									     (SETQ Count
									       (ADD1 Count))))))))
				    (FQUOTIENT Sum Count))
			       (QUOTE #CardsFiledInMoreThan1Box)
			       (LET ((Count 0))
				    (NCP.MapCards
				      (fetch (Card NoteFile) of RootCard)
				      (FUNCTION (LAMBDA (Card)
					  (if (NEQ (NCP.CardType Card)
						       (QUOTE FileBox))
					      then (if (AND (CADR (NC.FetchUserDataProp
									    Card Marker))
								  (GREATERP (CADR (
									     NC.FetchUserDataProp
											Card Marker))
									      1))
							 then (SETQ Count (ADD1 Count)))))))
				Count)
			       (QUOTE #BoxesFiledInMoreThan1Box)
			       (LET ((Count 0))
				    (NCP.MapCards
				      (fetch (Card NoteFile) of RootCard)
				      (FUNCTION (LAMBDA (Card)
					  (if (EQ (NCP.CardType Card)
						      (QUOTE FileBox))
					      then (if (AND (CADR (NC.FetchUserDataProp
									    Card Marker))
								  (GREATERP (CADR (
									     NC.FetchUserDataProp
											Card Marker))
									      1))
							 then (SETQ Count (ADD1 Count)))))))
				Count))
		       (NCP.MapCards (fetch (Card NoteFile) of RootCard)
				       (FUNCTION (LAMBDA (Card)
					   (NC.SetUserDataProp Card Marker NIL)
					   (NC.SetUserDataProp Card TerminalMarker NIL)))))))))

(NCStat.MarkDepthAndTerminals
  (LAMBDA (RootCard Depth Marker TerminalMarker)             (* fgh: "22-May-86 21:30")

          (* * Mark RootCard for its depth in hierarchy, then recurse on the children of root.)



          (* * fgh 5/22/86 First created.)


    (LET (Children)
         (NC.SetUserDataProp RootCard Marker (LIST Depth (LENGTH (NCP.CardParents RootCard))
						       (if (EQ (NCP.CardType RootCard)
								   (QUOTE FileBox))
							   then (for Card in (
									      NCP.FileBoxChildren
										     RootCard)
								     count (EQ (NCP.CardType
										     Card)
										   (QUOTE FileBox)))
							     )
						       (if (EQ (NCP.CardType RootCard)
								   (QUOTE FileBox))
							   then (for Card in (
									      NCP.FileBoxChildren
										     RootCard)
								     count (NEQ (NCP.CardType
										      Card)
										    (QUOTE FileBox))
									 ))))
         (if (SETQ Children (NCP.GetChildren RootCard (QUOTE (SubBox FiledCard))))
	     then (for Card in Children do (NCStat.MarkDepthAndTerminals Card (ADD1
										     Depth)
										   Marker 
										   TerminalMarker)))
         (if (AND (EQ (NCP.CardType RootCard)
			    (QUOTE FileBox))
		      (for Card in Children never (EQ (NCP.CardType Card)
							      (QUOTE FileBox))))
	     then (SETQ XXC (ADD1 XXC))
		    (NC.SetUserDataProp RootCard TerminalMarker T)))))

(NCStat.#CardsInNoteFile
  (LAMBDA (NoteFile TypeList)                                (* fgh: "22-May-86 17:53")

          (* * Returns the number of cards of one of the types in TypeList in NoteFile.)



          (* * fgh 5/22/86 First created.)


    (if TypeList
	then (SETQ TypeList (MKLIST TypeList)))
    (if (type? NoteFile NoteFile)
	then (LET ((Count 0))
		    (NCP.MapCards NoteFile (FUNCTION (LAMBDA (Card)
					(if (AND (NCP.ValidCard Card)
						     (OR (NULL TypeList)
							   (FMEMB (NCP.CardType Card)
								    TypeList)))
					    then (SETQ Count (ADD1 Count))))))
		Count))))
)
(PUTPROPS NCSTAT COPYRIGHT ("Xerox Corporation" 1986))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (702 12606 (NCStat.SizeOfFileBoxHierarchy 712 . 1528) (NCStat.#LinksFromCard 1530 . 2286
) (NCStat.InfoAboutFileBoxHierarchy 2288 . 10274) (NCStat.MarkDepthAndTerminals 10276 . 11908) (
NCStat.#CardsInNoteFile 11910 . 12604)))))
STOP