-- File: PtControl.mesa, Last Edit: HGM November 8, 1979 11:08 PM

DIRECTORY
DisplayDefs: FROM "DisplayDefs" USING [SetSystemDisplaySize],
ImageDefs: FROM "ImageDefs" USING [MakeImage, StopMesa],
IODefs: FROM "IODefs" USING [WriteLine, WriteOctal, WriteString],
StatsDefs: FROM "StatsDefs" USING [
StatNew, StatStart, StatCounterIndex, StatsGetText],
PupDefs: FROM "PupDefs" USING [
PupPackageMake, DataWordsPerPupBuffer, GetDoStats],
PupTypes: FROM "PupTypes" USING [bspTestSoc],
PtDefs: FROM "PtDefs" USING [
PtCommand, PtMisc, PtBSP, PtEcho, PtOC, PtPkt, PtSocket, PtPrint,
PtVector, PtStatsOn, PtEchoOn, PtFixHostAndNet, PupTestMainLoop,
statRawPacketsEarly, statRawPacketsLate, statRawPacketsMissed,
statRawPacketsRecv, statRawPacketsSent, statRawPacketsTurnedBack,
statRawPacketsUnexpected];

PtControl: PROGRAM
IMPORTS
DisplayDefs, ImageDefs, IODefs, StatsDefs, PupDefs, PtDefs =
BEGIN OPEN StatsDefs, PupDefs, PtDefs;

ptVector: PtVector ← [
socNum: PupTypes.bspTestSoc,
pullMe: [,,PupTypes.bspTestSoc],
pullHim: [,,[0,0]],
pushMe: [,,[0,0]],
pushHim: [,,PupTypes.bspTestSoc],

stopFlag: FALSE, -- else listeners go away instantly

length: long, -- init for max bandwidth
packetLength: ,
data: ignore,
streamData: ,
mode: block,

doStats: GetDoStats[],
dataWordsPerPup: DataWordsPerPupBuffer[],
displaying: TRUE,
info: TRUE,
spying: FALSE,
ticking: TRUE,
localOnly: FALSE,

myHost: ,
myNet: ,

whyText:
];

-- compiler doesn’t like me
ptVector.whyText ← [
"localClose", "remoteClose",
"noRouteToNetwork", "transmissionTimeout", "remoteReject" ];

START PtCommand[@ptVector];
START PtBSP[@ptVector];
START PtEcho[@ptVector];
START PtOC[@ptVector];
START PtSocket[@ptVector];
START PtPkt[@ptVector];
START PtMisc[@ptVector];
START PtPrint[@ptVector];

-- ok, now go to it
BEGIN OPEN StatsDefs;
statText: POINTER TO ARRAY StatCounterIndex OF STRING = StatsGetText[];
statText[statRawPacketsSent] ← "Raw Packets sent";
statText[statRawPacketsRecv] ← "Raw Packets received";
statText[statRawPacketsEarly] ← "Raw Packets received early";
statText[statRawPacketsMissed] ← "Raw Packets missed";
statText[statRawPacketsLate] ← "Raw Packets received late";
statText[statRawPacketsTurnedBack] ← "Raw Packets turned back";
statText[statRawPacketsUnexpected] ← "unexpected Raw Packets";
END;

StatNew[];
SELECT TRUE FROM
FALSE =>
BEGIN
IODefs.WriteLine["Saving self on PupTest.image..."];
ImageDefs.MakeImage["PupTest.image"];
END;
TRUE => DisplayDefs.SetSystemDisplaySize[35,50];
ENDCASE;

-- run time initialization
StatStart["Mesa PupTest"];
PupPackageMake[];
PtStatsOn[];
PtEchoOn[];

BEGIN OPEN IODefs;
PtFixHostAndNet[];
WriteString["We are host "]; WriteOctal[ptVector.myHost];
WriteString[" on Net "]; WriteOctal[ptVector.myNet];
WriteLine[""];
END;

BEGIN OPEN ptVector;
pullMe.host ← pushMe.host ← pullHim.host ← pushHim.host ← myHost;
pullMe.net ← pushMe.net ← pullHim.net ← pushHim.net ← myNet;
END;

PupTestMainLoop[];
ImageDefs.StopMesa[];

END. -- of PtControl