// IfsTelnetMemStat.bcpl -- IFS system statistics commands
// Copyright Xerox Corporation 1979, 1980, 1981
// Last modified January 28, 1981  2:40 PM by Taft

get "IfsVMem.decl"

external
[
// outgoing procedures
MemStatistics

// incoming procedures
Ws; PutTemplate; Plural
LeafVPBIStatistics; PrintMemoryErrors;

// incoming statics
dsp
smallZoneOverflows; bigZoneOverflows
numOverflowPages; maxOverflowPages; netAllocBlocks
numOverflowPBIs; maxOverflowPBIs; numPBIs
numVMemBufs; vmemBufferShortages
numOvXMPages; vmStats; leafPresent
]


//---------------------------------------------------------------------------
let MemStatistics() be
//---------------------------------------------------------------------------
[
PutTemplate(dsp, "*n*n$UD smallZone overflow$S, $UD bigZone overflow$S",
 smallZoneOverflows, Plural(smallZoneOverflows),
 bigZoneOverflows, Plural(bigZoneOverflows))
PutTemplate(dsp, "*nOverflow pages: present = $D, maximum = $D",
 numOverflowPages, maxOverflowPages)
PutTemplate(dsp, "*nNet blocks allocated minus blocks freed: $D",
 netAllocBlocks)
PutTemplate(dsp, "*n$D total PBIs; overflow PBIs: present = $D, maximum = $D",
 numPBIs, numOverflowPBIs, maxOverflowPBIs)
PutTemplate(dsp, "*n$D total VMem buffers, $D buffer shortage$S",
 numVMemBufs, vmemBufferShortages, Plural(vmemBufferShortages))
PutTemplate(dsp, "*nVMem    Overlay    VFile       DD     Leaf")
Ws("*nReads ")
for i = 1 to maxVMIType do
   PutTemplate(dsp, "$9ED", lv vmStats>>VMStats.reads↑i)
Ws("*nWrites")
for i = 1 to maxVMIType do
    PutTemplate(dsp, "$9ED", lv vmStats>>VMStats.writes↑i)
if numOvXMPages ne 0 then
   PutTemplate(dsp, "*n$D XM pages; $ED overlay reads from XM, $ED from disk",
    numOvXMPages, lv vmStats>>VMStats.ovXMReads,
    lv vmStats>>VMStats.ovDiskReads)
if leafPresent then LeafVPBIStatistics()
PrintMemoryErrors()
]