(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP" BASE 10)
(FILECREATED "13-Nov-87 01:45:11" "{FireFS:CS:Univ Rochester}<Koomen>LispUsers>Lyric>VSTATS.;12" 46865  

      changes to%:  (FNS VSTATS)

      previous date%: "30-Oct-87 01:20:07" 
"{FireFS:CS:Univ Rochester}<Koomen>LispUsers>Lyric>VSTATS.;11")


(* "
Copyright (c) 1985, 1986, 1987 by Xerox Corporation.  All rights reserved.
")

(PRETTYCOMPRINT VSTATSCOMS)

(RPAQQ VSTATSCOMS ((* * User interface * *) (FNS VSTATS) (INITVARS (VSTATS.ALWAYS? NIL) (VSTATS.BLACK? NIL) (VSTATS.CLOCK.INTERVAL 1) (VSTATS.MUTIL.HYSTERESIS 20) (VSTATS.MUTIL.INTERVAL 1) (VSTATS.POSITION (create POSITION XCOORD ← SCREENWIDTH YCOORD ← SCREENHEIGHT)) (VSTATS.SPACE.INTERVAL 300) (VSTATS.SPACE.PANIC.LEVEL 95) (VSTATS.SPACE.SHOW.DISK? T)) (* * VSTATS support stuff * *) (LOCALVARS . T) (FILES (SYSLOAD FROM LISPUSERS) READNUMBER SYSTATS) (DECLARE%: EVAL@COMPILE DONTEVAL@LOAD DONTCOPY (GLOBALVARS \TimeZoneComp \BeginDST \EndDST \DayLightSavings TIME.ZONES) (CONSTANTS (\4YearsDays (ADD1 (ITIMES 365 4))))) (COMS (DECLARE%: DONTCOPY (RECORDS VSTATSPCTINFO VSTATSTIMERINFO SPACEDATA) (PROP (FILETYPE MAKEFILE-ENVIRONMENT) VSTATS)) (INITRECORDS VSTATSPCTINFO VSTATSTIMERINFO SPACEDATA)) (INITVARS (VStatsOff? T) (VStatsWindow) (VStatsDsp) (VStatsCurrentTime (SETUPTIMER 0 NIL (QUOTE TICKS)))) (FNS VStats-CenterRegion VStats-CreatePCTs VStats-Display VStats-DisplayPct VStats-DrawLine VStats-GetPCTsRegion VStats-Init VStats-InitInterval VStats-MouseWait VStats-Percentage VStats-ReDisplay? VStats-SetDisplayColor VStats-SetUpTimer VStats-TimerExpired?) (* * option support stuff * *) (INITVARS (VStatsOptionsWindow)) (FNS VStatsOptions-Inspect VStatsOptions-FetchFn VStatsOptions-PropCommandFn VStatsOptions-PropPrintFn VStatsOptions-PropertiesFn VStatsOptions-RNumber VStatsOptions-SelectionFn VStatsOptions-StoreFn VStatsOptions-ValueCommandFn) (* * clock support stuff * *) (INITVARS (VStatsClockFont) (VStatsClockReset?) (VStatsClockTimer)) (FNS VStatsClock-Display VStatsClock-DisplayDigits VStatsClock-DisplayMonth VStatsClock-Init VStatsClock-ReDisplay VStatsClock-Read VStatsClock-Ticks? VStatsClock-UnpackDate) (* * space support stuff * *) (INITVARS (VStatsSpaceDiskPages) (VStatsSpaceFont) (VStatsSpacePCTs) (VStatsSpaceTimer)) (INITVARS (\LASTVMEMFILEPAGE 16383)) (FNS VStatsSpace-Display VStatsSpace-Init VStatsSpace-InitDisk VStatsSpace-InitPanicLevel VStatsSpace-ReDisplay VStatsSpace-Read VStatsSpace-ShrinkInterval VStatsSpace-Ticks?) (* * machine utilization support stuff * *) (INITVARS (VStatsMUtilFont) (VStatsMUtilOrigState) (VStatsMUtilPCTs) (VStatsMUtilTimer)) (FNS VStatsMUtil-Display VStatsMUtil-Init VStatsMUtil-InitState VStatsMUtil-ReDisplay VStatsMUtil-Read VStatsMUtil-Ticks?) (* * These ought to be system functions!!! * *) (FNS ALTOPARTITIONP ALTOPARTITIONS DISKUSEDPAGES DISKTOTALPAGES COVEREDWP) (* * Initialize on LOAD * *) (VARS (BackgroundMenu)) (ADDVARS (BackgroundMenuCommands ("VStats" (QUOTE (VSTATS (QUOTE On))) "Running display of clock and/or space utilization"))) (DECLARE%: DONTEVAL@LOAD DOCOPY (P (COND ((OR VSTATS.CLOCK.INTERVAL VSTATS.SPACE.INTERVAL VSTATS.MUTIL.INTERVAL) (VSTATS (QUOTE ON)))))))
)
(* * User interface * *)

(DEFINEQ

(VSTATS
(LAMBDA (on/off) (* ; "Edited 13-Nov-87 01:43 by Koomen") (DECLARE (GLOBALVARS VStatsDsp VStatsOff? VStatsOptionsWindow VStatsWindow)) (if (WINDOWP VStatsWindow) then (CLOSEW VStatsWindow)) (if (WINDOWP VStatsOptionsWindow) then (CLOSEW VStatsOptionsWindow)) (SETQ on/off (AND (LITATOM on/off) (U-CASE on/off))) (SETQ VStatsOff? (OR (NULL on/off) (EQ on/off (QUOTE OFF)) (EQ on/off (QUOTE SUSPEND)))) (if (NOT VStatsOff?) then (if (NOT (VStats-Init)) then (VStatsOptions-Inspect) (SETQ VStatsOff? T))) (LET ((ResetForms (QUOTE ((BEFORELOGOUTFORMS (VSTATS (QUOTE SUSPEND))) (BEFORESYSOUTFORMS (VSTATS (QUOTE SUSPEND))) (BEFOREMAKESYSFORMS (VSTATS (QUOTE SUSPEND))) (AFTERLOGOUTFORMS (VSTATS (QUOTE ON))) (AFTERSYSOUTFORMS (VSTATS (QUOTE ON))) (AFTERMAKESYSFORMS (VSTATS (QUOTE ON))) (BACKGROUNDFNS VStats-ReDisplay? T))))) (if VStatsOff? then (SETQ VStatsOptionsWindow) (SETQ VStatsWindow (SETQ VStatsDsp)) (for RF in ResetForms when (OR (CADDR RF) (NEQ on/off (QUOTE SUSPEND))) do (SETTOPVAL (CAR RF) (REMOVE (CADR RF) (GETTOPVAL (CAR RF))))) (QUOTE Off) else (VStats-Display) (for RF in ResetForms unless (MEMBER (CADR RF) (GETTOPVAL (CAR RF))) do (SETTOPVAL (CAR RF) (CONS (CADR RF) (GETTOPVAL (CAR RF))))) (QUOTE On))))
)
)

(RPAQ? VSTATS.ALWAYS? NIL)

(RPAQ? VSTATS.BLACK? NIL)

(RPAQ? VSTATS.CLOCK.INTERVAL 1)

(RPAQ? VSTATS.MUTIL.HYSTERESIS 20)

(RPAQ? VSTATS.MUTIL.INTERVAL 1)

(RPAQ? VSTATS.POSITION (create POSITION XCOORD ← SCREENWIDTH YCOORD ← SCREENHEIGHT))

(RPAQ? VSTATS.SPACE.INTERVAL 300)

(RPAQ? VSTATS.SPACE.PANIC.LEVEL 95)

(RPAQ? VSTATS.SPACE.SHOW.DISK? T)
(* * VSTATS support stuff * *)

(DECLARE%: DOEVAL@COMPILE DONTCOPY

(LOCALVARS . T)
)
(FILESLOAD (SYSLOAD FROM LISPUSERS) READNUMBER SYSTATS)
(DECLARE%: EVAL@COMPILE DONTEVAL@LOAD DONTCOPY 
(DECLARE%: DOEVAL@COMPILE DONTCOPY

(GLOBALVARS \TimeZoneComp \BeginDST \EndDST \DayLightSavings TIME.ZONES)
)

(DECLARE%: EVAL@COMPILE 

(RPAQ \4YearsDays (ADD1 (ITIMES 365 4)))

(CONSTANTS (\4YearsDays (ADD1 (ITIMES 365 4))))
)
)
(DECLARE%: DONTCOPY 
(DECLARE%: EVAL@COMPILE

(RECORD VSTATSPCTINFO (NAME LABEL NEWPCT OLDPCT LBLREGION BARREGION MAXBARHEIGHT))

(RECORD VSTATSTIMERINFO (INTERVAL TIMER LASTSETUP) INTERVAL ← 0 TIMER ← (SETUPTIMER 0 NIL (QUOTE TICKS))
 LASTSETUP ← (SETUPTIMER 0 NIL (QUOTE TICKS)))

(RECORD SPACEDATA (MDSFREE MDSFRAC 8MBFRAC ATOMSFREE ATOMFRAC))
)


(PUTPROPS VSTATS FILETYPE :TCOMPL)

(PUTPROPS VSTATS MAKEFILE-ENVIRONMENT (:READTABLE "INTERLISP" :PACKAGE "INTERLISP" :BASE 10))
)

(RPAQ? VStatsOff? T)

(RPAQ? VStatsWindow )

(RPAQ? VStatsDsp )

(RPAQ? VStatsCurrentTime (SETUPTIMER 0 NIL (QUOTE TICKS)))
(DEFINEQ

(VStats-CenterRegion
(LAMBDA (region width bottom pctlist) (* Koomen "12-Jan-87 17:37") (PROG ((delta (HALF (IDIFFERENCE width (fetch (REGION WIDTH) of region))))) (replace (REGION LEFT) of region with delta) (replace (REGION BOTTOM) of region with bottom) (for pct in pctlist bind (r) do (SETQ r (fetch (VSTATSPCTINFO BARREGION) of pct)) (replace (REGION LEFT) of r with (IPLUS delta (fetch (REGION LEFT) of r))) (replace (REGION BOTTOM) of r with bottom) (SETQ r (fetch (VSTATSPCTINFO LBLREGION) of pct)) (replace (REGION LEFT) of r with (IPLUS delta (fetch (REGION LEFT) of r))) (replace (REGION BOTTOM) of r with bottom))))
)

(VStats-CreatePCTs
(LAMBDA (font names&labels) (* Koomen "12-Jan-87 17:38") (PROG (pctlist (lblwidths 0) (lblheight (ITIMES 2 (FONTHEIGHT font))) (barwidth (STRINGWIDTH "A" font)) (barheight (IPLUS (FONTHEIGHT font) (FONTPROP font (QUOTE ASCENT))))) (SETQ pctlist (for name&lbl in names&labels bind (name lbl lblwidth) collect (SETQ name (CAR name&lbl)) (SETQ lbl (CDR name&lbl)) (SETQ lblwidth (STRINGWIDTH lbl font)) (SETQ lblwidths (IPLUS lblwidths lblwidth)) (create VSTATSPCTINFO NAME ← name LABEL ← lbl NEWPCT ← 0 OLDPCT ← 0 LBLREGION ← (create REGION LEFT ← 0 BOTTOM ← 0 WIDTH ← lblwidth HEIGHT ← lblheight) BARREGION ← (create REGION LEFT ← 0 BOTTOM ← 0 WIDTH ← 0 HEIGHT ← barheight) MAXBARHEIGHT ← barheight))) (for pct in pctlist bind (r w x) first (SETQ w (HALF (ITIMES 3 barwidth))) (SETQ x (IDIFFERENCE w barwidth)) do (SETQ r (fetch (VSTATSPCTINFO BARREGION) of pct)) (replace (REGION LEFT) of r with x) (replace (REGION WIDTH) of r with barwidth) (SETQ r (fetch (VSTATSPCTINFO LBLREGION) of pct)) (replace (REGION LEFT) of r with (IPLUS x w)) (SETQ x (IPLUS w (fetch (REGION RIGHT) of r)))) (RETURN pctlist)))
)

(VStats-Display
(LAMBDA (ThruMouse?) (* ; "Edited 22-Sep-87 14:59 by Koomen") (DECLARE (GLOBALVARS VStatsClockRegion VStatsClockTimer VStatsDsp VStatsMUtilRegion VStatsMUtilTimer VStatsSpaceRegion VStatsSpaceTimer VStatsWindow)) (PROG (r1 r2 r3) (if ThruMouse? then (if (NOT (VStats-MouseWait VStatsWindow)) then (RETURN))) (DSPFILL NIL NIL NIL VStatsDsp) (if (SETQ r1 VStatsClockRegion) then (VStats-SetUpTimer VStatsClockTimer) (VStatsClock-Display)) (if (SETQ r2 VStatsSpaceRegion) then (VStats-SetUpTimer VStatsSpaceTimer) (VStatsSpace-Display)) (if (SETQ r3 VStatsMUtilRegion) then (VStats-SetUpTimer VStatsMUtilTimer) (VStatsMUtil-Display)) (if (AND r1 r2 r3) then (VStats-DrawLine r1 r2) (VStats-DrawLine r2 r3) elseif (AND r1 r2) then (VStats-DrawLine r1 r2) elseif (AND r1 r3) then (VStats-DrawLine r1 r3) elseif (AND r2 r3) then (VStats-DrawLine r2 r3))))
)

(VStats-DisplayPct
(LAMBDA (PCT BOX.ALWAYS?) (* Koomen "12-Jan-87 17:24") (DECLARE (GLOBALVARS BLACKSHADE VSTATS.BLACK? VStatsDsp WHITESHADE)) (PROG ((shade (if VSTATS.BLACK? then WHITESHADE else BLACKSHADE)) (oldpct (fetch (VSTATSPCTINFO OLDPCT) of PCT)) (newpct (fetch (VSTATSPCTINFO NEWPCT) of PCT)) (lblregion (fetch (VSTATSPCTINFO LBLREGION) of PCT)) (barregion (fetch (VSTATSPCTINFO BARREGION) of PCT)) (maxbarheight (fetch (VSTATSPCTINFO MAXBARHEIGHT) of PCT))) (* * Print percentage as d.dd * *) (MOVETO (fetch (REGION LEFT) of lblregion) (fetch (REGION BOTTOM) of lblregion) VStatsDsp) (BOUT VStatsDsp (IPLUS (IQUOTIENT newpct 100) (CHARCODE "0"))) (BOUT VStatsDsp (CHARCODE ".")) (BOUT VStatsDsp (IPLUS (IQUOTIENT (IREMAINDER newpct 100) 10) (CHARCODE "0"))) (BOUT VStatsDsp (IPLUS (IREMAINDER newpct 10) (CHARCODE "0"))) (* * Display percentage graphically in box * *) (replace (REGION HEIGHT) of barregion with (IQUOTIENT (ITIMES newpct maxbarheight) 100)) (if (OR BOX.ALWAYS? (ILESSP newpct oldpct)) then (GRAYBOXAREA (fetch (REGION LEFT) of barregion) (fetch (REGION BOTTOM) of barregion) (fetch (REGION WIDTH) of barregion) maxbarheight 1 shade VStatsDsp)) (DSPFILL barregion shade NIL VStatsDsp)))
)

(VStats-DrawLine
(LAMBDA (hiregion loregion) (* Koomen "12-Jan-87 17:38") (DECLARE (GLOBALVARS VStatsDsp)) (PROG ((x1 (DSPLEFTMARGIN NIL VStatsDsp)) (x2 (DSPRIGHTMARGIN NIL VStatsDsp)) (y (SUB1 (HALF (IPLUS (fetch (REGION BOTTOM) of hiregion) (fetch (REGION TOP) of loregion)))))) (DRAWLINE x1 y x2 y 2 (QUOTE INVERT) VStatsDsp)))
)

(VStats-GetPCTsRegion
(LAMBDA (pctlist) (* Koomen "12-Jan-87 17:34") (DECLARE (GLOBALVARS SCREENWIDTH)) (for pct in pctlist bind barregion lblregion (minleft ← SCREENWIDTH) (maxright ← 0) (maxheight ← 0) do (SETQ barregion (fetch (VSTATSPCTINFO BARREGION) of pct)) (SETQ lblregion (fetch (VSTATSPCTINFO LBLREGION) of pct)) (SETQ minleft (IMIN minleft (IMIN (fetch (REGION LEFT) of barregion) (fetch (REGION LEFT) of lblregion)))) (SETQ maxright (IMAX maxright (IMAX (fetch (REGION RIGHT) of barregion) (fetch (REGION RIGHT) of lblregion)))) (SETQ maxheight (IMAX maxheight (IMAX (fetch (REGION HEIGHT) of barregion) (fetch (REGION HEIGHT) of lblregion)))) finally (RETURN (create REGION LEFT ← 0 BOTTOM ← 0 WIDTH ← (ADD1 (IDIFFERENCE maxright minleft)) HEIGHT ← maxheight))))
)

(VStats-Init
(LAMBDA NIL (* Koomen "19-Jun-87 00:58") (DECLARE (GLOBALVARS LASTMOUSEBUTTONS SCREENHEIGHT SCREENWIDTH VSTATS.POSITION VStatsClockRegion VStatsDsp VStatsMUtilPCTs VStatsMUtilRegion VStatsOff? VStatsSpacePCTs VStatsSpaceRegion VStatsWindow WBorder)) (PROG (clockwidth clockheight spacewidth spaceheight mutilwidth mutilheight wleft wbottom wwidth wheight wposition wregion (width 0) (height 0) (bottom 0) (border WBorder) (spacing (HALF (ITIMES 3 WBorder)))) (if (VStatsClock-Init) then (SETQ clockwidth (fetch (REGION WIDTH) of VStatsClockRegion)) (SETQ width (IMAX width clockwidth)) (SETQ clockheight (fetch (REGION HEIGHT) of VStatsClockRegion)) (SETQ height (IPLUS height clockheight spacing))) (if (VStatsSpace-Init) then (SETQ spacewidth (fetch (REGION WIDTH) of VStatsSpaceRegion)) (SETQ width (IMAX width spacewidth)) (SETQ spaceheight (fetch (REGION HEIGHT) of VStatsSpaceRegion)) (SETQ height (IPLUS height spaceheight spacing))) (if (VStatsMUtil-Init) then (SETQ mutilwidth (fetch (REGION WIDTH) of VStatsMUtilRegion)) (SETQ width (IMAX width mutilwidth)) (SETQ mutilheight (fetch (REGION HEIGHT) of VStatsMUtilRegion)) (SETQ height (IPLUS height mutilheight spacing))) (if (ZEROP width) then (RETURN)) (SETQ width (IPLUS width spacing)) (SETQ wwidth (WIDTHIFWINDOW width border)) (SETQ wheight (HEIGHTIFWINDOW height NIL border)) (SETQ wposition (OR (POSITIONP VSTATS.POSITION) (GETBOXPOSITION wwidth wheight NIL NIL NIL "Indicate placement of VSTATS window:"))) (SETQ wleft (IMAX 0 (IMIN (fetch (POSITION XCOORD) of wposition) (IDIFFERENCE SCREENWIDTH (ADD1 wwidth))))) (SETQ wbottom (IMAX 0 (IMIN (fetch (POSITION YCOORD) of wposition) (IDIFFERENCE SCREENHEIGHT (ADD1 wheight))))) (if (NOT (POSITIONP VSTATS.POSITION)) then (SETQ VSTATS.POSITION (create POSITION XCOORD ← wleft YCOORD ← wbottom))) (SETQ wregion (create REGION LEFT ← wleft BOTTOM ← wbottom WIDTH ← wwidth HEIGHT ← wheight)) (SETQ VStatsWindow (CREATEW wregion NIL border)) (SETQ VStatsDsp (WINDOWPROP VStatsWindow (QUOTE DSP))) (VStats-SetDisplayColor) (SETQ bottom (IQUOTIENT spacing 4)) (if VStatsMUtilRegion then (VStats-CenterRegion VStatsMUtilRegion width bottom VStatsMUtilPCTs) (SETQ bottom (IPLUS bottom mutilheight spacing))) (if VStatsSpaceRegion then (VStats-CenterRegion VStatsSpaceRegion width bottom VStatsSpacePCTs) (SETQ bottom (IPLUS bottom spaceheight spacing))) (if VStatsClockRegion then (VStats-CenterRegion VStatsClockRegion width bottom) (SETQ bottom (IPLUS bottom clockheight spacing))) (WINDOWPROP VStatsWindow (QUOTE REPAINTFN) (FUNCTION (LAMBDA (w) (VStats-Display)))) (WINDOWPROP VStatsWindow (QUOTE CLOSEFN) (FUNCTION (LAMBDA (w) (DECLARE (GLOBALVARS VStatsOff?)) (SETQ VStatsOff? T)))) (WINDOWPROP VStatsWindow (QUOTE AFTERMOVEFN) (FUNCTION (LAMBDA (w) (DECLARE (GLOBALVARS VSTATS.POSITION)) (PROG ((r (WINDOWREGION w))) (SETQ VSTATS.POSITION (create POSITION XCOORD ← (fetch (REGION LEFT) of r) YCOORD ← (fetch (REGION BOTTOM) of r))))))) (WINDOWPROP VStatsWindow (QUOTE BUTTONEVENTFN) (FUNCTION (LAMBDA (w) (if (LASTMOUSESTATE (ONLY LEFT)) then (VStats-Display T) elseif (LASTMOUSESTATE (ONLY MIDDLE)) then (VStatsOptions-Inspect T))))) (WINDOWPROP VStatsWindow (QUOTE SHRINKFN) (QUOTE DON'T)) (WINDOWPROP VStatsWindow (QUOTE RESHAPEFN) (QUOTE DON'T)) (RETURN T)))
)

(VStats-InitInterval
(LAMBDA (VSTATSTIMER INTERVAL MAXINTERVAL) (* HaKo "12-Jun-86 22:45") (* * If Interval is a positive number, initialize the timer with the corresponding number of clock ticks and return it, otherwise return NIL) (if (AND (NUMBERP INTERVAL) (GREATERP INTERVAL 0)) then (replace (VSTATSTIMERINFO INTERVAL) of VSTATSTIMER with (CLOCKTICKS (MAX 1 (MIN INTERVAL MAXINTERVAL)) (QUOTE SECONDS)))))
)

(VStats-MouseWait
(LAMBDA (WINDOW) (* Koomen "16-Apr-87 16:59") (* ;; "Wait until the mouse buttons are up or mouse out of the window.  Return T if mouse is still in the window") (* ;; "DISABLED!!!") (OR T (bind (REGION ← (WINDOWREGION WINDOW)) do (if (NOT (INSIDEP REGION LASTMOUSEX LASTMOUSEY)) then (RETURN) elseif (MOUSESTATE UP) then (RETURN T)))))
)

(VStats-Percentage
(LAMBDA (X Y) (* Koomen "24-Mar-87 15:45") (* ;; "Desperately tries to use SMALLP's and avoid doing IQUOTIENT's or creating FIXP's or FLOATP's.") (if (ILEQ X 0) then 0 elseif (IGEQ X Y) then 100 else (PROG (Z) (if (IGREATERP Y (CONSTANT (LRSH MAX.SMALLP 1))) then (SETQ Y (IQUOTIENT Y 100)) elseif (ILEQ X (CONSTANT (IQUOTIENT MAX.SMALLP 200))) then (RETURN (IQUOTIENT (IPLUS (ITIMES X 200) Y) (LLSH Y 1))) elseif (AND (IGREATERP X (LRSH Y 1)) (ILEQ (SETQ Z (IDIFFERENCE Y X)) (CONSTANT (IQUOTIENT MAX.SMALLP 200)))) then (RETURN (IDIFFERENCE 100 (IQUOTIENT (IPLUS (ITIMES Z 200) Y) (LLSH Y 1)))) else (SETQ Z (IQUOTIENT MAX.SMALLP Y)) (SETQ X (ITIMES Z X)) (SETQ Y (IQUOTIENT (ITIMES Z Y) 100))) (RETURN (IQUOTIENT (IPLUS X (LRSH Y 1)) Y)))))
)

(VStats-ReDisplay?
(LAMBDA NIL (* ; "Edited 18-Sep-87 00:56 by Koomen") (DECLARE (GLOBALVARS VSTATS.ALWAYS? VStatsClockRegion VStatsClockTimer VStatsMUtilRegion VStatsMUtilTimer VStatsOff? VStatsSpaceLevel VStatsSpacePanicLevel VStatsSpaceRegion VStatsSpaceTimer VStatsWindow)) (if VStatsOff? then (VSTATS (QUOTE Off)) else (LET ((DoDisp (OR VSTATS.ALWAYS? (AND VStatsSpaceRegion VStatsSpacePanicLevel (IGREATERP VStatsSpaceLevel VStatsSpacePanicLevel)) (NOT (COVEREDWP VStatsWindow))))) (if VStatsClockRegion then (if (VStats-TimerExpired? VStatsClockTimer) then (if DoDisp then (VStatsClock-ReDisplay)))) (if VStatsSpaceRegion then (if (VStats-TimerExpired? VStatsSpaceTimer) then (if DoDisp then (VStatsSpace-ReDisplay)))) (if VStatsMUtilRegion then (if (VStats-TimerExpired? VStatsMUtilTimer) then (if DoDisp then (VStatsMUtil-ReDisplay)))))))
)

(VStats-SetDisplayColor
(LAMBDA NIL (* HaKo " 2-Jul-86 16:01") (DECLARE (GLOBALVARS BLACKSHADE VSTATS.BLACK? VStatsDsp WHITESHADE)) (if VStatsDsp then (if VSTATS.BLACK? then (DSPTEXTURE BLACKSHADE VStatsDsp) (DSPSOURCETYPE (QUOTE INVERT) VStatsDsp) else (DSPTEXTURE WHITESHADE VStatsDsp) (DSPSOURCETYPE (QUOTE INPUT) VStatsDsp))))
)

(VStats-SetUpTimer
(LAMBDA (TIMERINFO) (* ; "Edited 23-Sep-87 11:19 by Koomen") (PROG ((CLK (fetch (VSTATSTIMERINFO LASTSETUP) of TIMERINFO)) (INT (fetch (VSTATSTIMERINFO INTERVAL) of TIMERINFO)) REM) (\RCLK CLK) (SETQ REM (IREMAINDER CLK INT)) (RETURN (SETUPTIMER (if (ILESSP REM 0) then (IDIFFERENCE 0 REM) else (IDIFFERENCE INT REM)) (fetch (VSTATSTIMERINFO TIMER) of TIMERINFO) (QUOTE TICKS)))))
)

(VStats-TimerExpired?
(LAMBDA (TIMERINFO) (* ; "Edited 18-Sep-87 00:56 by Koomen") (* ;; "Knowing the last time the timer was set allows us to test for wrap around.  Using the standard TIMEREXPIRED?  the timer could be set at some big positive number (say MAX.FIXP --- 100), If we don't get to check the machine clock between the timer's value and the largest positive number the machine clock will wrap around to some big negative number (say MAX.FIXP + 100) and it will be quite a while before the machine clock is again GREATERP than our timer!") (DECLARE (GLOBALVARS VStatsCurrentTime)) (\RCLK VStatsCurrentTime) (if (OR (IGREATERP VStatsCurrentTime (fetch (VSTATSTIMERINFO TIMER) of TIMERINFO)) (ILESSP VStatsCurrentTime (fetch (VSTATSTIMERINFO LASTSETUP) of TIMERINFO))) then (VStats-SetUpTimer TIMERINFO)))
)
)
(* * option support stuff * *)


(RPAQ? VStatsOptionsWindow )
(DEFINEQ

(VStatsOptions-Inspect
(LAMBDA (ThruMouse?) (* Koomen " 2-Jul-87 00:43") (DECLARE (GLOBALVARS LASTMOUSEBUTTONS LASTMOUSEX LASTMOUSEY VStatsOptionsWindow VStatsWindow)) (PROG ((OPTIONS (QUOTE (VSTATS.BLACK? VSTATS.ALWAYS? VSTATS.SPACE.SHOW.DISK? VSTATS.MUTIL.HYSTERESIS VSTATS.SPACE.PANIC.LEVEL VSTATS.CLOCK.INTERVAL VSTATS.SPACE.INTERVAL VSTATS.MUTIL.INTERVAL)))) (if ThruMouse? then (if (NOT (VStats-MouseWait VStatsWindow)) then (RETURN))) (if (WINDOWP VStatsOptionsWindow) then (MOVEW VStatsOptionsWindow LASTMOUSEX LASTMOUSEY) (MOVEW VStatsOptionsWindow) (INSPECTW.REDISPLAY VStatsOptionsWindow OPTIONS) else (SETQ VStatsOptionsWindow (INSPECTW.CREATE OPTIONS (FUNCTION VStatsOptions-PropertiesFn) (FUNCTION VStatsOptions-FetchFn) (FUNCTION VStatsOptions-StoreFn) (FUNCTION VStatsOptions-PropCommandFn) (FUNCTION VStatsOptions-ValueCommandFn) (AND NIL (FUNCTION TitleCommandFn)) "VStats Options" (FUNCTION VStatsOptions-SelectionFn) (AND NIL (QUOTE Where)) (FUNCTION VStatsOptions-PropPrintFn))))))
)

(VStatsOptions-FetchFn
(LAMBDA (OPTIONS OPTION) (* ; "Edited 22-Sep-87 15:00 by Koomen") (DECLARE (GLOBALVARS VSTATS.ALWAYS? VSTATS.BLACK? VSTATS.CLOCK.INTERVAL VSTATS.MUTIL.HYSTERESIS VSTATS.MUTIL.INTERVAL VSTATS.SPACE.INTERVAL VSTATS.SPACE.SHOW.DISK? VStatsWindow)) (SELECTQ OPTION (VSTATS.POSITION (if (WINDOWP VStatsWindow) then (LET ((R (WINDOWREGION VStatsWindow))) (create POSITION XCOORD ← (fetch (REGION LEFT) of R) YCOORD ← (fetch (REGION BOTTOM) of R))))) (VSTATS.ALWAYS? (if VSTATS.ALWAYS? then (QUOTE Yes) else (QUOTE No))) (VSTATS.BLACK? (if VSTATS.BLACK? then (QUOTE Inverted) else (QUOTE Normal))) (VSTATS.CLOCK.INTERVAL (if (VStatsClock-Ticks?) then VSTATS.CLOCK.INTERVAL else (QUOTE Disabled))) (VSTATS.SPACE.INTERVAL (if (VStatsSpace-Ticks?) then VSTATS.SPACE.INTERVAL else (QUOTE Disabled))) (VSTATS.SPACE.SHOW.DISK? (if (NULL VStatsSpaceDisk) then (QUOTE Disabled) else (OR (FILENAMEFIELD VStatsSpaceDisk (QUOTE DIRECTORY)) (FILENAMEFIELD VStatsSpaceDisk (QUOTE HOST))))) (VSTATS.SPACE.PANIC.LEVEL (LET ((pct (VStatsSpace-InitPanicLevel))) (if pct then pct else (QUOTE Disabled)))) (VSTATS.MUTIL.INTERVAL (if (VStatsMUtil-Ticks?) then VSTATS.MUTIL.INTERVAL else (QUOTE Disabled))) (VSTATS.MUTIL.HYSTERESIS (if (AND (NUMBERP VSTATS.MUTIL.HYSTERESIS) (GREATERP VSTATS.MUTIL.HYSTERESIS 0)) then VSTATS.MUTIL.HYSTERESIS else (QUOTE Cumulative))) (ERROR "Unknown VStats option: " OPTION)))
)

(VStatsOptions-PropCommandFn
(LAMBDA (OPTION OPTIONS WINDOW) (* HaKo " 2-Jul-86 14:00") (PROMPTPRINT (SELECTQ OPTION (VSTATS.ALWAYS? "Update VStats window even if partially or completely occluded.") (VSTATS.BLACK? "Display VStats window in inverse video.") (VSTATS.CLOCK.INTERVAL "Number of seconds between clock updates. Disabled if <= 0.") (VSTATS.SPACE.INTERVAL "Number of seconds between space utilization updates. Disabled if <= 0.") (VSTATS.SPACE.SHOW.DISK? "Display percentage of local disk space used.") (VSTATS.SPACE.PANIC.LEVEL "Percentage at which VStats window will start flashing `out of space soon' warnings.") (VSTATS.MUTIL.INTERVAL "Number of seconds between machine utilization updates. Disabled if <= 0.") (VSTATS.MUTIL.HYSTERESIS "Number of intervals over which machine utilization will be averaged.  Cumulative average used if <= 0.") (VSTATS.POSITION "Position of VStats window.") (ERROR "Unknown VStats option: " OPTION))))
)

(VStatsOptions-PropPrintFn
(LAMBDA (OPTION OPTIONS) (* HaKo " 3-Jul-86 08:45") (SELECTQ OPTION (VSTATS.ALWAYS? (QUOTE Update.Always?)) (VSTATS.BLACK? (QUOTE Display.Color)) (VSTATS.CLOCK.INTERVAL (QUOTE Clock.Update.Interval)) (VSTATS.SPACE.INTERVAL (QUOTE Space.Update.Interval)) (VSTATS.SPACE.SHOW.DISK? (QUOTE Show.Disk.Space?)) (VSTATS.SPACE.PANIC.LEVEL (QUOTE Space.Panic.Level)) (VSTATS.MUTIL.INTERVAL (QUOTE MUtil.Update.Interval)) (VSTATS.MUTIL.HYSTERESIS (QUOTE MUtil.Hysteresis)) (VSTATS.POSITION (QUOTE Window.Position)) (ERROR "Unknown VSTATS option: " OPTION)))
)

(VStatsOptions-PropertiesFn
(LAMBDA (OPTIONS) (* HaKo "25-Jun-86 17:30") OPTIONS))

(VStatsOptions-RNumber
(LAMBDA (LABEL FLOAT? NOTNUMVAL NOTPOSVAL) (* HaKo " 2-Jul-86 15:33") (LET ((N (RNUMBER LABEL NIL NIL NIL T FLOAT?))) (if (NOT (NUMBERP N)) then NOTNUMVAL elseif (GREATERP N 0) then N else NOTPOSVAL)))
)

(VStatsOptions-SelectionFn
(LAMBDA (OPTION VALUE? WINDOW) (* HaKo " 2-Jul-86 14:10") (if (NOT VALUE?) then (VStatsOptions-PropCommandFn OPTION NIL WINDOW)))
)

(VStatsOptions-StoreFn
(LAMBDA (OPTIONS OPTION NEWVALUE) (* Koomen "18-Jun-87 22:54") (DECLARE (GLOBALVARS VSTATS.ALWAYS? VSTATS.BLACK? VSTATS.CLOCK.INTERVAL VSTATS.MUTIL.HYSTERESIS VSTATS.MUTIL.INTERVAL VSTATS.POSITION VSTATS.SPACE.INTERVAL VSTATS.SPACE.PANIC.LEVEL VSTATS.SPACE.SHOW.DISK? VStatsWindow)) (LET (INIT?) (SELECTQ OPTION (VSTATS.ALWAYS? (SETQ VSTATS.ALWAYS? (EQ NEWVALUE (QUOTE Yes)))) (VSTATS.BLACK? (SETQ VSTATS.BLACK? (EQ NEWVALUE (QUOTE Inverted))) (if VStatsWindow then (VStats-SetDisplayColor) (VStats-Display))) (VSTATS.CLOCK.INTERVAL (LET ((OLDOFF (NULL (VStatsClock-Ticks?)))) (SETQ VSTATS.CLOCK.INTERVAL (NUMBERP NEWVALUE)) (SETQ INIT? (NEQ OLDOFF (NULL (VStatsClock-Ticks?)))))) (VSTATS.SPACE.INTERVAL (LET ((OLDOFF (NULL (VStatsSpace-Ticks?)))) (SETQ VSTATS.SPACE.INTERVAL (NUMBERP NEWVALUE)) (SETQ INIT? (NEQ OLDOFF (NULL (VStatsSpace-Ticks?)))))) (VSTATS.MUTIL.INTERVAL (LET ((OLDOFF (NULL (VStatsMUtil-Ticks?)))) (SETQ VSTATS.MUTIL.INTERVAL (NUMBERP NEWVALUE)) (SETQ INIT? (NEQ OLDOFF (NULL (VStatsMUtil-Ticks?)))))) (VSTATS.SPACE.PANIC.LEVEL (SETQ VSTATS.SPACE.PANIC.LEVEL NEWVALUE) (VStatsSpace-InitPanicLevel)) (VSTATS.SPACE.SHOW.DISK? (SETQ VSTATS.SPACE.SHOW.DISK? NEWVALUE) (SETQ INIT? T)) (VSTATS.MUTIL.HYSTERESIS (SETQ VSTATS.MUTIL.HYSTERESIS NEWVALUE) (SETQ INIT? T)) (VSTATS.POSITION (SETQ VSTATS.POSITION NEWVALUE) (if VStatsWindow then (MOVEW VStatsWindow NEWVALUE))) (ERROR "Unknown VSTATS option: " OPTION)) (if (AND VStatsWindow INIT?) then (VSTATS (QUOTE On)))))
)

(VStatsOptions-ValueCommandFn
(LAMBDA (OLDVALUE OPTION OPTIONS WINDOW) (* ; "Edited 27-Oct-87 16:18 by Koomen") (DECLARE (GLOBALVARS VStatsOptionsWindow VStatsWindow)) (PROG (NEWVALUE) (if (NOT (VStats-MouseWait VStatsOptionsWindow)) then (RETURN)) (SETQ NEWVALUE (SELECTQ OPTION (VSTATS.ALWAYS? (OR (MENU (create MENU ITEMS ← (QUOTE (Yes No)) CENTERFLG ← T)) OLDVALUE)) (VSTATS.BLACK? (OR (MENU (create MENU ITEMS ← (QUOTE (Normal Inverted)) CENTERFLG ← T)) OLDVALUE)) ((VSTATS.CLOCK.INTERVAL VSTATS.SPACE.INTERVAL VSTATS.MUTIL.INTERVAL) (VStatsOptions-RNumber "New interval: " T OLDVALUE (QUOTE Disabled))) (VSTATS.SPACE.SHOW.DISK? (SETQ OLDVALUE VStatsSpaceDisk) (VStatsSpace-InitDisk T)) (VSTATS.SPACE.PANIC.LEVEL (VStatsOptions-RNumber "New panic level: " NIL OLDVALUE (QUOTE Disabled))) (VSTATS.MUTIL.HYSTERESIS (VStatsOptions-RNumber "MUtil hysteresis: " NIL OLDVALUE (QUOTE Cumulative))) (VSTATS.POSITION (if VStatsWindow then (LET ((R (WINDOWREGION VStatsWindow))) (GETBOXPOSITION (fetch (REGION WIDTH) of R) (fetch (REGION HEIGHT) of R) (fetch (REGION LEFT) of R) (fetch (REGION BOTTOM) of R))) else (GETPOSITION))) (ERROR "Unknown VSTATS option: " OPTION))) (if (NOT (EQUAL NEWVALUE OLDVALUE)) then (INSPECTW.REPLACE WINDOW OPTION NEWVALUE))))
)
)
(* * clock support stuff * *)


(RPAQ? VStatsClockFont )

(RPAQ? VStatsClockReset? )

(RPAQ? VStatsClockTimer )
(DEFINEQ

(VStatsClock-Display
(LAMBDA NIL (* Koomen "12-Jan-87 16:37") (DECLARE (GLOBALVARS VStatsClockDay VStatsClockDayPos VStatsClockDisplaySeconds? VStatsClockFont VStatsClockHr VStatsClockHrPos VStatsClockMin VStatsClockMinPos VStatsClockMon VStatsClockMonPos VStatsClockRegion VStatsClockSec VStatsClockSecPos VStatsClockXPos VStatsClockYPos VStatsClockYr VStatsClockYrPos VStatsDsp)) (VStatsClock-Read) (SETQ VStatsClockXPos (fetch (REGION LEFT) of VStatsClockRegion)) (SETQ VStatsClockYPos (IPLUS (fetch (REGION BOTTOM) of VStatsClockRegion) (FONTPROP VStatsClockFont (QUOTE DESCENT)))) (MOVETO VStatsClockXPos VStatsClockYPos VStatsDsp) (DSPFONT VStatsClockFont VStatsDsp) (SETQ VStatsClockDayPos (DSPXPOSITION NIL VStatsDsp)) (VStatsClock-DisplayDigits VStatsClockDayPos VStatsClockDay) (BOUT VStatsDsp (CHARCODE "-")) (SETQ VStatsClockMonPos (DSPXPOSITION NIL VStatsDsp)) (VStatsClock-DisplayMonth VStatsClockMonPos VStatsClockMon) (BOUT VStatsDsp (CHARCODE "-")) (SETQ VStatsClockYrPos (DSPXPOSITION NIL VStatsDsp)) (VStatsClock-DisplayDigits VStatsClockYrPos VStatsClockYr) (BOUT VStatsDsp (CHARCODE " ")) (SETQ VStatsClockHrPos (DSPXPOSITION NIL VStatsDsp)) (VStatsClock-DisplayDigits VStatsClockHrPos VStatsClockHr) (BOUT VStatsDsp (CHARCODE ":")) (SETQ VStatsClockMinPos (DSPXPOSITION NIL VStatsDsp)) (VStatsClock-DisplayDigits VStatsClockMinPos VStatsClockMin) (if VStatsClockDisplaySeconds? then (BOUT VStatsDsp (CHARCODE ":")) (SETQ VStatsClockSecPos (DSPXPOSITION NIL VStatsDsp)) (VStatsClock-DisplayDigits VStatsClockSecPos VStatsClockSec)))
)

(VStatsClock-DisplayDigits
(LAMBDA (dspxpos n) (* HaKo " 1-Aug-85 10:10") (DECLARE (GLOBALVARS VStatsDsp)) (DSPXPOSITION dspxpos VStatsDsp) (BOUT VStatsDsp (IPLUS (IQUOTIENT (IREMAINDER n 100) 10) (CHARCODE "0"))) (BOUT VStatsDsp (IPLUS (IREMAINDER n 10) (CHARCODE "0"))))
)

(VStatsClock-DisplayMonth
(LAMBDA (dspxpos m) (* HaKo " 1-Aug-85 10:13") (DECLARE (GLOBALVARS VStatsDsp)) (PROG ((i (ADD1 (ITIMES 3 m))) (lbl "JanFebMarAprMayJunJulAugSepOctNovDec")) (DSPXPOSITION dspxpos VStatsDsp) (BOUT VStatsDsp (OR (NTHCHARCODE lbl i) (CHARCODE "?"))) (BOUT VStatsDsp (OR (NTHCHARCODE lbl (IPLUS i 1)) (CHARCODE "?"))) (BOUT VStatsDsp (OR (NTHCHARCODE lbl (IPLUS i 2)) (CHARCODE "?")))))
)

(VStatsClock-Init
(LAMBDA NIL (* HaKo "13-Jun-86 00:44") (* * If the clock interval is not a FIXP or not positive, the clock display is disabled. (MENU VStatsOptionsMenu)) (DECLARE (GLOBALVARS VStatsClockDisplaySeconds? VStatsClockFont VStatsClockRegion)) (if (VStatsClock-Ticks?) then (LET ((datestr (DATE))) (if (NOT (FONTP VStatsClockFont)) then (SETQ VStatsClockFont (FONTCREATE (QUOTE (GACHA 12 BOLD))))) (if (NOT VStatsClockDisplaySeconds?) then (SETQ datestr (SUBSTRING datestr 1 -4))) (SETQ VStatsClockRegion (create REGION LEFT ← 0 BOTTOM ← 0 WIDTH ← (STRINGWIDTH datestr VStatsClockFont) HEIGHT ← (FONTHEIGHT VStatsClockFont)))) else (SETQ VStatsClockRegion NIL)))
)

(VStatsClock-ReDisplay
(LAMBDA NIL (* ; "Edited 18-Sep-87 00:40 by Koomen") (DECLARE (GLOBALVARS VStatsClockDay VStatsClockDayPos VStatsClockDisplaySeconds? VStatsClockFont VStatsClockHr VStatsClockHrPos VStatsClockMin VStatsClockMinPos VStatsClockMon VStatsClockMonPos VStatsClockReset? VStatsClockSec VStatsClockSecPos VStatsClockYPos VStatsClockYr VStatsClockYrPos VStatsDsp)) (PROG ((oldday VStatsClockDay) (oldmon VStatsClockMon) (oldyr VStatsClockYr) (oldhr VStatsClockHr) (oldmin VStatsClockMin) (oldsec VStatsClockSec)) (DSPFONT VStatsClockFont VStatsDsp) (DSPYPOSITION VStatsClockYPos VStatsDsp) (VStatsClock-Read) (if (NEQ VStatsClockDay oldday) then (SETQ VStatsClockReset? T)) (if (AND VStatsClockReset? (NEQ VStatsClockHr oldhr) (\NET.SETTIME)) then (SETQ VStatsClockReset? NIL) (VStatsClock-Read)) (if (NEQ VStatsClockDay oldday) then (VStatsClock-DisplayDigits VStatsClockDayPos VStatsClockDay)) (if (NEQ VStatsClockMon oldmon) then (VStatsClock-DisplayMonth VStatsClockMonPos VStatsClockMon)) (if (NEQ VStatsClockYr oldyr) then (VStatsClock-DisplayDigits VStatsClockYrPos VStatsClockYr)) (if (NEQ VStatsClockHr oldhr) then (VStatsClock-DisplayDigits VStatsClockHrPos VStatsClockHr)) (if (NEQ VStatsClockMin oldmin) then (VStatsClock-DisplayDigits VStatsClockMinPos VStatsClockMin)) (if (AND VStatsClockDisplaySeconds? (NEQ VStatsClockSec oldsec)) then (VStatsClock-DisplayDigits VStatsClockSecPos VStatsClockSec))))
)

(VStatsClock-Read
(LAMBDA NIL (* Koomen "26-Mar-87 15:13") (DECLARE (GLOBALVARS VStatsClockDay VStatsClockHr VStatsClockMin VStatsClockMon VStatsClockSec VStatsClockYr)) (* APPLY (FUNCTION (LAMBDA (yr mon day hr min sec dst) (SETQ VStatsClockDay day) (SETQ VStatsClockMon mon) (SETQ VStatsClockYr yr) (SETQ VStatsClockHr hr) (SETQ VStatsClockMin min) (SETQ VStatsClockSec sec))) (\UNPACKDATE)) (VStatsClock-UnpackDate))
)

(VStatsClock-Ticks?
(LAMBDA NIL (* Koomen "12-Jan-87 17:20") (DECLARE (GLOBALVARS VSTATS.CLOCK.INTERVAL VStatsClockDisplaySeconds? VStatsClockTimer)) (LET ((NTICKS (VStats-InitInterval (OR VStatsClockTimer (SETQ VStatsClockTimer (create VSTATSTIMERINFO))) VSTATS.CLOCK.INTERVAL (CONSTANT (TIMES 5 60))))) (SETQ VStatsClockDisplaySeconds? (AND NTICKS (ILESSP NTICKS (CLOCKTICKS 1 (QUOTE MINUTE))))) NTICKS))
)

(VStatsClock-UnpackDate
(LAMBDA (D) (* Koomen "26-Mar-87 15:11") (* Adapted from \UNPACKDATE on <Lisp>Koto>Sources>IOCHAR dated "28-Jun-85 18:07:58") (DECLARE (GLOBALVARS VStatsClockDay VStatsClockHr VStatsClockMin VStatsClockMon VStatsClockSec VStatsClockYr)) (* bvm%: "28-Jun-85 18:07") (* Converts an internal Lisp date D into a list of integers (Year Month Day Hours Minutes Seconds daylightp DayOfWeek) %. D defaults to current date. - DayOfWeek is zero for Monday - - D is first converted to the alto standard, a 32-bit unsigned integer, representing the number of seconds since jan 1, 1901-Gmt. We have to be a little tricky in our computations to avoid the sign bit.) (SETQ D (OR D (DAYTIME))) (PROG ((CHECKDLS \DayLightSavings) (DQ (IQUOTIENT (LOGAND MAX.FIXP (LRSH (LISP.TO.ALTO.DATE D) 1)) 30)) MONTH SEC HR DAY4 YDAY WDAY YEAR4 TOTALDAYS MIN DLS) (* DQ is number of minutes since day 0, getting us past the sign bit problem.) (SETQ SEC (IMOD (IPLUS D (CONSTANT (IDIFFERENCE 60 (IMOD MIN.FIXP 60)))) 60)) (SETQ MIN (IREMAINDER DQ 60)) (* No we can adjust to the current time zone. Since this might cause DQ to go negative, first add in 4 years worth of hours, making the base date be Jan 1, 1897) (SETQ HR (IREMAINDER (SETQ DQ (IDIFFERENCE (IPLUS (IQUOTIENT DQ 60) (CONSTANT (ITIMES 24 \4YearsDays))) \TimeZoneComp)) 24)) (SETQ TOTALDAYS (IQUOTIENT DQ 24)) DTLOOP (SETQ DAY4 (IREMAINDER TOTALDAYS \4YearsDays)) (* DAY4 = number of days since last leap year day 0) (SETQ DAY4 (IPLUS DAY4 (CDR (\DTSCAN DAY4 (QUOTE ((789 . 3) (424 . 2) (59 . 1) (0 . 0))))))) (* pretend every year is a leap year, adding one for days after Feb 28) (SETQ YEAR4 (IQUOTIENT TOTALDAYS \4YearsDays)) (* YEAR4 = number of years til that last leap year / 4) (SETQ YDAY (IREMAINDER DAY4 366)) (* YDAY is the ordinal day in the year (jan 1 = zero)) (SETQ WDAY (IREMAINDER (IPLUS TOTALDAYS 3) 7)) (COND ((AND CHECKDLS (SETQ DLS (\ISDST? YDAY HR WDAY))) (* This date is during daylight savings, so add 1 hour. Third arg is day of the week, which we determine by taking days mod 7 plus offset. Monday = zero in this scheme. Jan 1 1897 was actually a Friday (not Thursday=3) %, but we're cheating--1900 was not a leap year) (COND ((IGREATERP (SETQ HR (ADD1 HR)) 23) (* overflowed into the next day. This case is too hard (we might have overflowed the month, for example) %, so just go back and recompute) (SETQ TOTALDAYS (ADD1 TOTALDAYS)) (SETQ HR 0) (SETQ CHECKDLS NIL) (GO DTLOOP))))) (SETQ MONTH (\DTSCAN YDAY (QUOTE ((335 . 11) (305 . 10) (274 . 9) (244 . 8) (213 . 7) (182 . 6) (152 . 5) (121 . 4) (91 . 3) (60 . 2) (31 . 1) (0 . 0))))) (* Now return year, month, day, hr, min, sec) (* RETURN (LIST (IPLUS 1897 (ITIMES YEAR4 4) (IQUOTIENT DAY4 366)) (CDR MONTH) (ADD1 (IDIFFERENCE YDAY (CAR MONTH))) HR MIN SEC DLS WDAY)) (SETQ VStatsClockYr (IPLUS 1897 (ITIMES YEAR4 4) (IQUOTIENT DAY4 366))) (SETQ VStatsClockMon (CDR MONTH)) (SETQ VStatsClockDay (ADD1 (IDIFFERENCE YDAY (CAR MONTH)))) (SETQ VStatsClockHr HR) (SETQ VStatsClockMin MIN) (SETQ VStatsClockSec SEC)))
)
)
(* * space support stuff * *)


(RPAQ? VStatsSpaceDiskPages )

(RPAQ? VStatsSpaceFont )

(RPAQ? VStatsSpacePCTs )

(RPAQ? VStatsSpaceTimer )

(RPAQ? \LASTVMEMFILEPAGE 16383)
(DEFINEQ

(VStatsSpace-Display
(LAMBDA NIL (* Koomen "12-Jan-87 16:37") (DECLARE (GLOBALVARS VStatsDsp VStatsSpaceFont VStatsSpacePCTs VStatsSpaceRegion)) (PROG (x (xoffset (fetch (REGION LEFT) of VStatsSpaceRegion)) (yoffset (IPLUS (fetch (REGION BOTTOM) of VStatsSpaceRegion) (FONTPROP VStatsSpaceFont (QUOTE HEIGHT))))) (DSPFONT VStatsSpaceFont VStatsDsp) (MOVETO xoffset yoffset VStatsDsp) (for PCT in VStatsSpacePCTs do (DSPXPOSITION (fetch (REGION LEFT) of (fetch (VSTATSPCTINFO LBLREGION) of PCT)) VStatsDsp) (printout VStatsDsp (fetch (VSTATSPCTINFO LABEL) of PCT))) (TERPRI VStatsDsp) (SETQ yoffset (DSPYPOSITION NIL VStatsDsp)) (VStatsSpace-Read) (for PCT in VStatsSpacePCTs do (replace (REGION BOTTOM) of (fetch (VSTATSPCTINFO LBLREGION) of PCT) with yoffset) (replace (REGION BOTTOM) of (fetch (VSTATSPCTINFO BARREGION) of PCT) with yoffset) (VStats-DisplayPct PCT T))))
)

(VStatsSpace-Init
(LAMBDA NIL (* ; "Edited 22-Sep-87 16:22 by Koomen") (* * If the space interval is not a FIXP or not positive, the space display is disabled, and this function returns NIL. Otherwise it returns the region required for the space display.) (DECLARE (GLOBALVARS VSTATS.SPACE.SHOW.DISK? VStatsSpaceDisk VStatsSpaceDiskPages VStatsSpaceFont VStatsSpaceLevel VStatsSpacePCTs VStatsSpaceRegion)) (SETQ VStatsSpaceLevel 0) (if (VStatsSpace-Ticks?) then (if (NOT (FONTP VStatsSpaceFont)) then (SETQ VStatsSpaceFont (FONTCREATE (QUOTE (GACHA 10))))) (VStatsSpace-InitDisk) (VStatsSpace-InitPanicLevel) (SETQ VStatsSpacePCTs (VStats-CreatePCTs VStatsSpaceFont (if VStatsSpaceDisk then (QUOTE ((DATA . "Data") (ATOM . "Atom") (VMEM . "VMem") (DISK . "Disk"))) else (QUOTE ((DATA . "Data") (ATOM . "Atom") (VMEM . "VMem")))))) (SETQ VStatsSpaceRegion (VStats-GetPCTsRegion VStatsSpacePCTs)) else (SETQ VStatsSpaceRegion NIL)))
)

(VStatsSpace-InitDisk
(LAMBDA (ASK?) (* ; "Edited 22-Sep-87 16:30 by Koomen") (DECLARE (GLOBALVARS VSTATS.SPACE.PANIC.LEVEL VSTATS.SPACE.SHOW.DISK? VStatsSpaceDisk VStatsSpaceDiskPages VStatsSpacePanicLevel)) (if ASK? then (LET ((DISK (MENU (create MENU ITEMS ← (APPEND (QUOTE (*OFF* *DEFAULT* (""))) (SELECTQ (MACHINETYPE) ((DANDELION DAYBREAK DOVE) (for V in (VOLUMES) when (LISPDIRECTORYP V) collect V)) (DORADO (PROMPTPRINT "This takes a little while; hang on...") (ALTOPARTITIONS)) NIL)) CENTERFLG ← T)))) (if DISK then (SETQ VSTATS.SPACE.SHOW.DISK? (if (EQ DISK (QUOTE *OFF*)) then NIL elseif (EQ DISK (QUOTE *DEFAULT*)) then T else (SELECTQ (MACHINETYPE) ((DANDELION DAYBREAK DOVE) (PACKFILENAME (QUOTE HOST) (QUOTE DSK) (QUOTE DIRECTORY) DISK)) (DORADO (PACKFILENAME (QUOTE HOST) DISK)) NIL)))))) (SETQ VStatsSpaceDisk (if VSTATS.SPACE.SHOW.DISK? then (CAR (NLSETQ (DIRECTORYNAME (if (EQ VSTATS.SPACE.SHOW.DISK? T) then "{DSK}" else VSTATS.SPACE.SHOW.DISK?)))))) (SETQ VStatsSpaceDiskPages (if VStatsSpaceDisk then (DISKTOTALPAGES VStatsSpaceDisk))) (if (FIXP VStatsSpaceDiskPages) then VStatsSpaceDisk else (SETQ VStatsSpaceDisk NIL)))
)

(VStatsSpace-InitPanicLevel
(LAMBDA (ASK?) (* Koomen "12-Jan-87 17:21") (DECLARE (GLOBALVARS VSTATS.SPACE.PANIC.LEVEL VStatsSpacePanicLevel)) (if ASK? then (SETQ VSTATS.SPACE.PANIC.LEVEL (RNUMBER "Panic level (): "))) (SETQ VStatsSpacePanicLevel (if (AND (BOUNDP (QUOTE VSTATS.SPACE.PANIC.LEVEL)) (NUMBERP VSTATS.SPACE.PANIC.LEVEL) (LESSP VSTATS.SPACE.PANIC.LEVEL 100) (GREATERP VSTATS.SPACE.PANIC.LEVEL 0)) then (FIX (if (LESSP VSTATS.SPACE.PANIC.LEVEL 1) then (TIMES VSTATS.SPACE.PANIC.LEVEL 100) else VSTATS.SPACE.PANIC.LEVEL)))))
)

(VStatsSpace-ReDisplay
(LAMBDA NIL (* ; "Edited 18-Sep-87 00:51 by Koomen") (DECLARE (GLOBALVARS VSTATS.ALWAYS? VStatsDsp VStatsSpaceFont VStatsSpacePCTs VStatsSpacePanicLevel VStatsWindow)) (for pct in VStatsSpacePCTs bind NEWPCT first (VStatsSpace-Read) (SETQ VStatsSpaceLevel 0) (DSPFONT VStatsSpaceFont VStatsDsp) eachtime (SETQ VStatsSpaceLevel (IMAX VStatsSpaceLevel (SETQ NEWPCT (fetch (VSTATSPCTINFO NEWPCT) of pct)))) when (NEQ NEWPCT (fetch (VSTATSPCTINFO OLDPCT) of pct)) do (VStats-DisplayPct pct) finally (if (AND VStatsSpacePanicLevel (ILESSP VStatsSpacePanicLevel VStatsSpaceLevel)) then (FLASHWINDOW VStatsWindow (IDIFFERENCE VStatsSpaceLevel VStatsSpacePanicLevel)) (VStatsSpace-ShrinkInterval 5))))
)

(VStatsSpace-Read
(LAMBDA NIL (* ; "Edited 18-Sep-87 00:53 by Koomen") (DECLARE (GLOBALVARS VStatsSpaceDiskPages VStatsSpacePCTs \LASTVMEMFILEPAGE)) (for PCT in VStatsSpacePCTs bind (heap ← (STORAGE.LEFT)) do (replace (VSTATSPCTINFO OLDPCT) of PCT with (fetch (VSTATSPCTINFO NEWPCT) of PCT)) (replace (VSTATSPCTINFO NEWPCT) of PCT with (SELECTQ (fetch (VSTATSPCTINFO NAME) of PCT) (DATA (FIX (FDIFFERENCE 100.5 (FTIMES 100.0 (fetch (SPACEDATA MDSFRAC) of heap))))) (ATOM (FIX (FDIFFERENCE 100.5 (FTIMES 100.0 (fetch (SPACEDATA ATOMFRAC) of heap))))) (VMEM (VStats-Percentage (VMEMSIZE) \LASTVMEMFILEPAGE)) (DISK (VStats-Percentage (IDIFFERENCE VStatsSpaceDiskPages (DISKFREEPAGES VStatsSpaceDisk)) VStatsSpaceDiskPages)) (SHOULDNT)))))
)

(VStatsSpace-ShrinkInterval
(LAMBDA (shrinkpct) (* Koomen "12-Jan-87 17:25") (DECLARE (GLOBALVARS VStatsSpaceTimer)) (PROG ((delta (IMAX 50 (IDIFFERENCE 100 (OR shrinkpct 25)))) (oldint (fetch (VSTATSTIMERINFO INTERVAL) of VStatsSpaceTimer)) newint) (SETQ newint (IMAX (IQUOTIENT (ITIMES oldint delta) 100) (CLOCKTICKS 30 (QUOTE SECONDS)))) (if (ILESSP newint oldint) then (replace (VSTATSTIMERINFO INTERVAL) of VStatsSpaceTimer with newint) (VStats-SetUpTimer VStatsSpaceTimer))))
)

(VStatsSpace-Ticks?
(LAMBDA NIL (* Koomen "12-Jan-87 15:49") (DECLARE (GLOBALVARS VSTATS.SPACE.INTERVAL VStatsSpaceTimer)) (VStats-InitInterval (OR VStatsSpaceTimer (SETQ VStatsSpaceTimer (create VSTATSTIMERINFO))) VSTATS.SPACE.INTERVAL (CONSTANT (TIMES 15 60))))
)
)
(* * machine utilization support stuff * *)


(RPAQ? VStatsMUtilFont )

(RPAQ? VStatsMUtilOrigState )

(RPAQ? VStatsMUtilPCTs )

(RPAQ? VStatsMUtilTimer )
(DEFINEQ

(VStatsMUtil-Display
(LAMBDA NIL (* Koomen "12-Jan-87 16:46") (DECLARE (GLOBALVARS VStatsDsp VStatsMUtilFont VStatsMUtilPCTs VStatsMUtilRegion)) (PROG (x (xoffset (fetch (REGION LEFT) of VStatsMUtilRegion)) (yoffset (IPLUS (fetch (REGION BOTTOM) of VStatsMUtilRegion) (FONTPROP VStatsMUtilFont (QUOTE HEIGHT))))) (DSPFONT VStatsMUtilFont VStatsDsp) (MOVETO xoffset yoffset VStatsDsp) (for PCT in VStatsMUtilPCTs do (DSPXPOSITION (fetch (REGION LEFT) of (fetch (VSTATSPCTINFO LBLREGION) of PCT)) VStatsDsp) (printout VStatsDsp (fetch (VSTATSPCTINFO LABEL) of PCT))) (TERPRI VStatsDsp) (SETQ yoffset (DSPYPOSITION NIL VStatsDsp)) (VStatsMUtil-Read) (for PCT in VStatsMUtilPCTs do (replace (REGION BOTTOM) of (fetch (VSTATSPCTINFO LBLREGION) of PCT) with yoffset) (replace (REGION BOTTOM) of (fetch (VSTATSPCTINFO BARREGION) of PCT) with yoffset) (VStats-DisplayPct PCT T))))
)

(VStatsMUtil-Init
(LAMBDA NIL (* ; "Edited 27-Oct-87 16:47 by Koomen") (* * If the machine utilization interval is not a FIXP or not positive, the machine utilization display is disabled, and this function returns NIL. Otherwise it returns the region required for the machine utilization display.) (DECLARE (GLOBALVARS VStatsMUtilFont VStatsMUtilPCTs VStatsMUtilRegion)) (if (VStatsMUtil-Ticks?) then (VStatsMUtil-InitState) (if (NOT (FONTP VStatsMUtilFont)) then (SETQ VStatsMUtilFont (FONTCREATE (QUOTE (GACHA 10))))) (SETQ VStatsMUtilPCTs (VStats-CreatePCTs VStatsMUtilFont (QUOTE ((CPU . " CPU") (IO . " I/O") (GC . "  GC") (SWAP . "Swap"))))) (SETQ VStatsMUtilRegion (VStats-GetPCTsRegion VStatsMUtilPCTs)) else (SETQ VStatsMUtilRegion NIL)))
)

(VStatsMUtil-InitState
(LAMBDA (DONT.SET.ORIG?) (* ; "Edited 30-Oct-87 01:07 by Koomen") (DECLARE (GLOBALVARS VSTATS.MUTIL.HYSTERESIS VStatsMUtilDiffState VStatsMUtilNextState VStatsMUtilOrigState VStatsMUtilStateRing)) (if (NULL VStatsMUtilOrigState) then (SETQ VStatsMUtilOrigState (SYSTATSREAD)) (SETQ VStatsMUtilDiffState (SYSTATSREAD)) (SETQ VStatsMUtilNextState) (SETQ VStatsMUtilStateRing)) (if VStatsMUtilStateRing then (* Break the old ring so it can be GC'd) (RPLACD VStatsMUtilStateRing)) (OR DONT.SET.ORIG? (SYSTATSREAD VStatsMUtilOrigState)) (if (AND (NUMBERP VSTATS.MUTIL.HYSTERESIS) (GREATERP VSTATS.MUTIL.HYSTERESIS 0)) then (* Build a ring of SYSTATS records) (SETQ VStatsMUtilStateRing (for i from 0 to VSTATS.MUTIL.HYSTERESIS collect (SYSTATSREAD))) (* Complete the circle) (RPLACD (LAST VStatsMUtilStateRing) VStatsMUtilStateRing) (SETQ VStatsMUtilNextState) else (SETQ VStatsMUtilNextState (SYSTATSREAD)) (SETQ VStatsMUtilStateRing)))
)

(VStatsMUtil-ReDisplay
(LAMBDA NIL (* ; "Edited 18-Sep-87 00:50 by Koomen") (DECLARE (GLOBALVARS VSTATS.ALWAYS? VStatsDsp VStatsMUtilFont VStatsMUtilPCTs VStatsWindow)) (VStatsMUtil-Read) (DSPFONT VStatsMUtilFont VStatsDsp) (for pct in VStatsMUtilPCTs when (NEQ (fetch (VSTATSPCTINFO NEWPCT) of pct) (fetch (VSTATSPCTINFO OLDPCT) of pct)) do (VStats-DisplayPct pct)))
)

(VStatsMUtil-Read
(LAMBDA NIL (* ; "Edited 30-Oct-87 01:09 by Koomen") (* * (To reinitialize, execute (SETQ VStatsMUtilOrigState))) (DECLARE (GLOBALVARS VStatsMUtilDiffState VStatsMUtilNextState VStatsMUtilOrigState VStatsMUtilPCTs VStatsMUtilStateRing)) (PROG (oldstate newstate stats io gc swap elapsed cpu) (if VStatsMUtilStateRing then (SETQ newstate (pop VStatsMUtilStateRing)) (SETQ oldstate (CAR VStatsMUtilStateRing)) else (SETQ newstate VStatsMUtilNextState) (SETQ oldstate VStatsMUtilOrigState)) (SYSTATSREAD newstate) (SETQ stats (SYSTATSDIFF oldstate newstate VStatsMUtilDiffState)) (SETQ io (IPLUS (IMAX 0 (SYSTATSPROP (QUOTE NETIOTIME) stats)) (IMAX 0 (SYSTATSPROP (QUOTE DISKIOTIME) stats)))) (SETQ gc (IMAX 0 (SYSTATSPROP (QUOTE GCTIME) stats))) (SETQ swap (IMAX 0 (SYSTATSPROP (QUOTE SWAPWAITTIME) stats))) (SETQ elapsed (IMAX (SYSTATSPROP (QUOTE ELAPSEDTIME) stats) (IPLUS io gc swap))) (SETQ cpu (IMAX 0 (IDIFFERENCE 100 (IPLUS (SETQ io (VStats-Percentage io elapsed)) (SETQ gc (VStats-Percentage gc elapsed)) (SETQ swap (VStats-Percentage swap elapsed)))))) (for PCT in VStatsMUtilPCTs do (replace (VSTATSPCTINFO OLDPCT) of PCT with (fetch (VSTATSPCTINFO NEWPCT) of PCT)) (replace (VSTATSPCTINFO NEWPCT) of PCT with (SELECTQ (fetch (VSTATSPCTINFO NAME) of PCT) (CPU cpu) (IO io) (GC gc) (SWAP swap) (SHOULDNT))))))
)

(VStatsMUtil-Ticks?
(LAMBDA NIL (* Koomen "12-Jan-87 15:49") (DECLARE (GLOBALVARS VSTATS.MUTIL.INTERVAL VStatsMUtilTimer)) (VStats-InitInterval (OR VStatsMUtilTimer (SETQ VStatsMUtilTimer (create VSTATSTIMERINFO))) VSTATS.MUTIL.INTERVAL (CONSTANT (TIMES 5 60))))
)
)
(* * These ought to be system functions!!! * *)

(DEFINEQ

(ALTOPARTITIONP
(LAMBDA (I) (* ; "Edited 19-Oct-87 12:20 by Koomen") (CONDITION-CASE (if (INFILEP (PACK* "{DSK" I "}SYS.BOOT;1")) then I) ((XCL:DEVICE-ERROR XCL:PATHNAME-ERROR XCL:FS-ERROR) NIL (RETFROM (QUOTE ALTOPARTITIONP) NIL))))
)

(ALTOPARTITIONS
(LAMBDA NIL (* ; "Edited 19-Oct-87 11:34 by Koomen") (* ;;; "NASTY!!!  Bypassing partition passwords") (SELECTQ (MACHINETYPE) (DORADO (RESETLST (RESETSAVE NIL (BQUOTE (PUTD \M44CHECKPASSWORD (\, (GETD (QUOTE \M44CHECKPASSWORD)))))) (PUTD (QUOTE \M44CHECKPASSWORD) (GETD (QUOTE TRUE))) (for I from 1 while (\TESTPARTITION I) when (ALTOPARTITIONP I) collect (PACK* "DSK" I)))) NIL))
)

(DISKUSEDPAGES
(LAMBDA (DSK RECOMPUTE) (* Koomen "19-Jun-87 01:46") (* ;; "Hard-wired constant for Dorado partition size.  Probably wrong, but adding up file sizes is way too slow (~ 8 secs)") (SELECTQ (MACHINETYPE) ((DANDELION DAYBREAK DOVE) (if (EQ (QUOTE DSK) (FILENAMEFIELD (DIRECTORYNAME "{DSK}") (QUOTE HOST))) then (* ;; "Local disk directory has been created") (IDIFFERENCE (VOLUMESIZE DSK RECOMPUTE) (DISKFREEPAGES DSK RECOMPUTE)))) (DORADO (if (SETQ DSK (CAR (NLSETQ (DIRECTORYNAME (OR DSK "{DSK}"))))) then (if RECOMPUTE then (for F in (FILDIR DSK) sum (GETFILEINFO F (QUOTE SIZE))) else (IMAX 0 (IDIFFERENCE 22750 (DISKFREEPAGES DSK RECOMPUTE)))))) NIL))
)

(DISKTOTALPAGES
(LAMBDA (DSK RECOMPUTE) (* Koomen "19-Jun-87 01:46") (SELECTQ (MACHINETYPE) ((DANDELION DAYBREAK DOVE) (if (EQ (QUOTE DSK) (FILENAMEFIELD (DIRECTORYNAME "{DSK}") (QUOTE HOST))) then (* ;; "Local disk directory has been created") (VOLUMESIZE DSK RECOMPUTE))) (DORADO (if (SETQ DSK (CAR (NLSETQ (DIRECTORYNAME (OR DSK "{DSK}"))))) then (IPLUS (DISKFREEPAGES DSK RECOMPUTE) (DISKUSEDPAGES DSK RECOMPUTE)))) NIL))
)

(COVEREDWP
(LAMBDA (WINDOW) (* ; "Edited 18-Sep-87 00:54 by Koomen") (if (OPENWP WINDOW) then (PROG ((R (fetch (WINDOW REG) of WINDOW)) (W (fetch (SCREEN SCTOPW) of (fetch (WINDOW SCREEN) of WINDOW)))) LP (COND ((EQ W WINDOW) (RETURN NIL)) ((REGIONSINTERSECTP R (fetch (WINDOW REG) of W)) (RETURN T)) ((SETQ W (fetch (WINDOW NEXTW) of W)) (GO LP))))))
)
)
(* * Initialize on LOAD * *)


(RPAQQ BackgroundMenu NIL)

(ADDTOVAR BackgroundMenuCommands ("VStats" (QUOTE (VSTATS (QUOTE On))) "Running display of clock and/or space utilization")
)
(DECLARE%: DONTEVAL@LOAD DOCOPY 
(COND ((OR VSTATS.CLOCK.INTERVAL VSTATS.SPACE.INTERVAL VSTATS.MUTIL.INTERVAL) (VSTATS (QUOTE ON))))
)
(PUTPROPS VSTATS COPYRIGHT ("Xerox Corporation" 1985 1986 1987))
(DECLARE%: DONTCOPY
  (FILEMAP (NIL (3227 4471 (VSTATS 3237 . 4469)) (5853 18059 (VStats-CenterRegion 5863 . 6492) (
VStats-CreatePCTs 6494 . 7620) (VStats-Display 7622 . 8489) (VStats-DisplayPct 8491 . 9706) (
VStats-DrawLine 9708 . 10040) (VStats-GetPCTsRegion 10042 . 10819) (VStats-Init 10821 . 14114) (
VStats-InitInterval 14116 . 14529) (VStats-MouseWait 14531 . 14886) (VStats-Percentage 14888 . 15652) 
(VStats-ReDisplay? 15654 . 16503) (VStats-SetDisplayColor 16505 . 16837) (VStats-SetUpTimer 16839 . 
17240) (VStats-TimerExpired? 17242 . 18057)) (18123 25315 (VStatsOptions-Inspect 18133 . 19137) (
VStatsOptions-FetchFn 19139 . 20546) (VStatsOptions-PropCommandFn 20548 . 21495) (
VStatsOptions-PropPrintFn 21497 . 22073) (VStatsOptions-PropertiesFn 22075 . 22157) (
VStatsOptions-RNumber 22159 . 22385) (VStatsOptions-SelectionFn 22387 . 22545) (VStatsOptions-StoreFn 
22547 . 24055) (VStatsOptions-ValueCommandFn 24057 . 25313)) (25429 33683 (VStatsClock-Display 25439
 . 26994) (VStatsClock-DisplayDigits 26996 . 27270) (VStatsClock-DisplayMonth 27272 . 27682) (
VStatsClock-Init 27684 . 28360) (VStatsClock-ReDisplay 28362 . 29795) (VStatsClock-Read 29797 . 30218)
 (VStatsClock-Ticks? 30220 . 30628) (VStatsClock-UnpackDate 30630 . 33681)) (33859 39576 (
VStatsSpace-Display 33869 . 34743) (VStatsSpace-Init 34745 . 35678) (VStatsSpace-InitDisk 35680 . 
36826) (VStatsSpace-InitPanicLevel 36828 . 37363) (VStatsSpace-ReDisplay 37365 . 38083) (
VStatsSpace-Read 38085 . 38822) (VStatsSpace-ShrinkInterval 38824 . 39307) (VStatsSpace-Ticks? 39309
 . 39574)) (39733 44304 (VStatsMUtil-Display 39743 . 40617) (VStatsMUtil-Init 40619 . 41368) (
VStatsMUtil-InitState 41370 . 42327) (VStatsMUtil-ReDisplay 42329 . 42698) (VStatsMUtil-Read 42700 . 
44036) (VStatsMUtil-Ticks? 44038 . 44302)) (44355 46456 (ALTOPARTITIONP 44365 . 44600) (ALTOPARTITIONS
 44602 . 45000) (DISKUSEDPAGES 45002 . 45670) (DISKTOTALPAGES 45672 . 46099) (COVEREDWP 46101 . 46454)
))))
STOP