-- File: PupShow.mesa - last edit: -- MAS May 19, 1980 6:20 PM -- HGM November 19, 1979 12:06 PM -- Copyright Xerox Corporation 1979, 1980 DIRECTORY IODefs: FROM "IODefs" USING [ TAB, CR, LF, FF, WriteChar, WriteDecimal, WriteLine, WriteOctal, WriteString], InlineDefs: FROM "InlineDefs" USING [LowHalf, HighHalf], CommUtilDefs: FROM "CommUtilDefs" USING [GetTicks, GetEthernetHostNumber], PupDefs: FROM "PupDefs" USING [ incomingPup, outgoingPup, PupAddress, PupBuffer, PupHostID, PupSocketID], BufferDefs: FROM "BufferDefs"; -- SHAREs PupShow: MONITOR IMPORTS IODefs, InlineDefs, CommUtilDefs EXPORTS PupDefs SHARES BufferDefs = BEGIN OPEN IODefs, PupDefs; myHost: PupHostID _ [CommUtilDefs.GetEthernetHostNumber[]]; s: ARRAY [0..9] OF PupSocketID; i: CARDINAL; h1, h2, h3, h4: PupHostID; ShowPupBuffer: PUBLIC ENTRY PROCEDURE [c: CARDINAL, b: PupBuffer] = BEGIN IF b.pupType=gatewayInfo THEN RETURN; WriteDecimal[b.bufferNumber]; SELECT c FROM 0 => NULL; incomingPup => WriteString[" incoming"]; outgoingPup => WriteString[" outgoing "]; ENDCASE => BEGIN WriteString[" code="]; WriteDecimal[c]; END; IF b.queue#NIL THEN BEGIN low: WORD _ InlineDefs.LowHalf[b.queue]; high: WORD _ InlineDefs.HighHalf[b.queue]; WriteString[" on queue "]; IF high#0 THEN BEGIN WriteOctal[high]; WriteChar['|]; END; WriteOctal[low]; END; WriteString[" "]; ShowPupPacket[0,b]; WriteLine[" "]; END; ShowPupPacket: PUBLIC PROCEDURE [c: CARDINAL,b: PupBuffer] = BEGIN char: CHARACTER; IF c#0 THEN BEGIN WriteString[" call="]; WriteDecimal[c]; END; WriteString["lengths "]; WriteDecimal[b.length]; WriteString[" "]; WriteDecimal[b.pupLength]; WriteString[" "]; WriteDecimal[b.pupLength-22]; WriteString[" "]; WriteString["Encap: to="]; WriteOctal[b.encapsulation.etherDest]; WriteString[", from="]; WriteOctal[b.encapsulation.etherSource]; WriteString[", type="]; WriteOctal[b.encapsulation.ethernetType]; WriteLine[" "]; SELECT b.pupType FROM error => WriteString["ERROR "]; rfc => WriteString["RFC "]; abort => WriteString["ABORT "]; end => WriteString["END "]; endRep => WriteString["ENDREPLY "]; data => WriteString["DATA "]; aData => WriteString["ADATA "]; ack => WriteString["ACK "]; mark => WriteString["MARK "]; aMark => WriteString["AMARK "]; ENDCASE => BEGIN WriteString["pup Type "]; WriteOctal[LOOPHOLE[b.pupType,CARDINAL]]; END; WriteString[" From: "]; ShowPupAddress[b.source]; WriteString[" "]; WriteString[" To: "]; ShowPupAddress[b.dest]; WriteLine[""]; WriteString["id: "]; WriteDecimal[b.pupID.a]; WriteChar['|]; WriteDecimal[b.pupID.b]; WriteString[" t: "]; WriteDecimal[CommUtilDefs.GetTicks[]]; WriteLine[" "]; SELECT b.pupType FROM rfc => ShowPupAddress[b.address]; ack => FOR i IN [0..2] DO WriteDecimal[LOOPHOLE[b.pupWords[i]]]; WriteString[" "]; ENDLOOP; ENDCASE => FOR i IN [22..b.pupLength) DO SELECT (char_b.pupChars[i-22]) FROM IN [' ..'~] => WriteChar[char]; IODefs.TAB => WriteString[""L]; IODefs.CR => WriteString[""L]; IODefs.LF => WriteString[""L]; IODefs.FF => WriteString[""L]; ENDCASE => BEGIN WriteChar['<]; WriteOctal[char]; WriteChar['>]; END; ENDLOOP; WriteLine[" "]; END; ShowPupSocket: PROCEDURE [x: PupSocketID] = BEGIN WriteString[" "]; WriteDecimal[x.a]; WriteChar['|]; WriteDecimal[x.b]; END; ShowPupAddress: PROCEDURE [x: PupAddress]= BEGIN WriteString[" "]; SELECT x.host FROM myHost => WriteString["ME"]; 0 => WriteString["BC"]; 4 => WriteString["POR"]; h1 => WriteString["H1"]; h2 => WriteString["H2"]; h3 => WriteString["H3"]; h4 => WriteString["H4"]; ENDCASE => BEGIN SELECT 0 FROM h1 => BEGIN h1_x.host; WriteString["H1 = "]; END; h2 => BEGIN h2_x.host; WriteString["H2 = "]; END; h3 => BEGIN h3_x.host; WriteString["H3 = "]; END; h4 => BEGIN h4_x.host; WriteString["H4 = "]; END; ENDCASE; WriteDecimal[x.host]; END; FOR i IN [0..9] DO IF s[i]=[0,0] THEN BEGIN s[i]_x.socket; ShowPupSocket[x.socket]; END; IF s[i]=x.socket THEN BEGIN WriteString[" Soc"]; WriteDecimal[i]; EXIT; END REPEAT FINISHED=> ShowPupSocket[x.socket]; ENDLOOP; END; -- initialization FOR i IN [0..9] DO s[i]_[0,0]; ENDLOOP; s[0]_[0,3]; h1_h2_h3_h4_[0]; END.(2048)