// 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) ]