// GateConLev0Stats.bcpl
// Last modified July 2, 1983 10:06 PM by Boggs
get "Pup0.decl"
get "Pup1.decl"
get "GateConMenu.decl"
external
[
// outgoing procedures
Level0Stats
// incoming procedures
PrintSLAStats; PrintEtherStats; PrintPRStats
OpenLevel1Socket; CloseLevel1Socket
GetBuf; ReleasePBI; SendCommand; TopLevel
ResetCmdMenu; CreateCmdBox; ReturnFrom; BoxProc
Wss; Ws; PutTemplate; Resets; GetNetTable
]
manifest
[
psStatistics = 22b
ptSendStats = 200b
ptStatsAck = 201b
ptStatsNak = 202b
]
structure NetBox [ @CmdBox; netNumber word ]
//----------------------------------------------------------------------------
let Level0Stats() be
//----------------------------------------------------------------------------
[
let v = vec 1; unless GetNetTable(v) return
let numNets, netTable = v!0, v!1
ResetCmdMenu()
CreateCmdBox(TopLevel, "TopLevel")
for i = 0 to numNets -1 do
[
if netTable!i eq 0 loop
let box = CreateCmdBox(GetStats, " ", 1)
box>>Box.bs>>BS.centerX = true
Resets(box>>Box.bs)
PutTemplate(box>>Box.bs, "$UO", netTable!i)
box>>NetBox.netNumber = netTable!i
]
// ResetCmdMenu destroyed the BoxQ which BoxProc is following.
// If we just return now, BoxProc will get horribly confused.
// So don't let it continue: force a return from BoxProc.
ReturnFrom(BoxProc)
]
//----------------------------------------------------------------------------
and GetStats(box) be
//----------------------------------------------------------------------------
[
let soc = vec lenPupSoc; OpenLevel1Socket(soc)
let pbi = GetBuf(soc)
pbi>>PBI.pup.dPort.socket↑2 = psStatistics
pbi>>PBI.pup.words↑1 = box>>NetBox.netNumber
pbi = SendCommand(pbi, ptSendStats, pupOvBytes+2)
test pbi ne 0
ifso
[
switchon pbi>>PBI.pup.type into
[
case ptStatsNak:
[
Ws(" - stats not available")
endcase
]
case ptStatsAck:
[
switchon pbi>>PBI.pup.words↑1 into
[
case netTypeEther:
[ PrintEtherStats(pbi); endcase ]
case netTypeSLA:
[ PrintSLAStats(pbi); endcase ]
case netTypePR:
[ PrintPRStats(pbi); endcase ]
]
endcase
]
]
ReleasePBI(pbi)
]
ifnot Ws(" - the Level 0 Stats Server doesn't answer")
CloseLevel1Socket(soc)
]