// IfsTelnetLeafStat.bcpl -- IFS system statistics for Leaf
// Copyright Xerox Corporation 1979, 1980
// Last modified November 6, 1980 1:00 PM by Wobber
get "IfsLeaf.decl"; get "IfsSequin.decl";
external
[
// outgoing procedures
LeafSystat; LeafServStat;
// incoming procedures
MoveBlock; NextLockedSequin; Plural; PrintPort; Puts;
PutTemplate; StringCompare; Ws;
// incoming statics
dsp; scb;
]
//---------------------------------------------------------------------------
let LeafSystat() be
//---------------------------------------------------------------------------
[
if scb eq 0 return;
let sequin = 0; let firstTime = true;
[ // Loop through all sequins.
sequin = NextLockedSequin(sequin); if sequin eq 0 break;
if firstTime then [ Ws("*n*nLeaf connections:"); firstTime = false; ]
let name = sequin>>Sequin.unam;
if name eq 0 then name = "Not logged in";
Puts(dsp, $*n); Ws(name)
for j = name>>String.length to 15 do Puts(dsp, $*s)
let port = vec lenPort; MoveBlock(port, lv sequin>>Sequin.port, lenPort)
port>>Port.socket↑1 = 0; port>>Port.socket↑2 = 0
Ws(" ["); PrintPort(dsp, port); Ws("]")
let lvmds = 0;
let fh = sequin>>Sequin.fhQ.head;
while fh ne 0 do
[
if fh>>FH.lvmd ne 0 then lvmds = lvmds + 1;
fh = fh>>FH.link;
]
if lvmds ne 0 then
PutTemplate(dsp, " -- $2D file$S", lvmds, Plural(lvmds));
let state = selecton sequin>>Sequin.state into
[
case timedOutState: " (timed out)"
case brokenState: " (broken)"
case dallyingState: " (dallying)"
default: 0
]
if state ne 0 then Ws(state);
if sequin>>Sequin.brokenLeaf then Ws(" **");
] repeat
]
//---------------------------------------------------------------------------
and LeafServStat() be
//---------------------------------------------------------------------------
[
PutTemplate(dsp, "*n$S$10ED$10ED", "Leaf ",
lv scb>>SCB.acceptedRFCs, lv scb>>SCB.refusedRFCs);
]