! file 'nbsmon' !******************************** !* bsp to nsi interface * !* file: nbsmon * !* date: 09.mar.82 * !* monitoring program * !********************************* !! stk = 1000, strm = 1 %control 1 %include "deimosperm" %begin %conststring (13)vsn = "NBSM...1b " %recordformat mef(%record (mef) %name link, %byteinteger len, %c type, %integer address,port,rcomm,tcomm, %c %integerarray a(0:100) ) !buffer queues %recordformat meqf(%record (mef) %name link); %recordformat pe(%byteinteger ser, reply, a1, a2, %c %integer b, c) %recordformat pe2(%byteinteger ser, reply, fn, port, %c %integer lport, hport ); !low nd high port limits %recordformat pe3(%byteinteger ser,reply,fn,port,a,b,c,d) %recordformat qf(%record (mef) %name e) %recordformat nsi1f(%byteinteger fn, sufl, st, ss, sn, dn, dt, %c ds, flag, ufl, %integerarray a(0:238)) %recordformat nsi2f(%byteinteger fn, sufl, st, ss, flag, uflag %c , flen, fdata, fd2, fd3, fd4) %recordformat nsi3f(%byteintegerarray a(0:100)) %recordformat menf(%record (menf) %name link, %c %byteinteger len, type, %record (nsi1f)nsl) %owninteger nbsp ser = 0; ! fill in later %constinteger varbs 2 = 8; ! fn number to attain address %recordformat portf(%byteinteger state, owner port, %c no, st, dn, dt, ds, fl, rl, owner, niff, max fl, s1, %c %record (qf) out q) !********************************************** !byte stream states %constinteger closed=0; ! %constinteger opening=1; !waiting for open ack %constinteger closing=2; !waiting for close %constinteger idle=3; !byte stream state %constinteger nesent=4; !ditto %constinteger esent=5; !ditto %constinteger openinput=6; !open or send mess has been input %constinteger open mess=7; !waiting for response to send mess %constinteger bslimit=30; !number of byte streams %constinteger bslim2=61; !bslimit*2+1 %ownstring (9) %array sta(0:15) = %c "closed ", "opening ", "closing ", "blocked ", "no data ", "data out", "open inp", "open mes", "closed ", "opening ", "closing ", "no data ", "blocked ", "ready ", "open inp", "open mes" %conststring (3) %array cls(0:2) = " ", "cl", "c2" %conststring (3) %array nif(0:3) = " ", "nif", "sta", "dis" %constbyteintegerarray hexd(0:15) = '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' !format of records defining the byte streams !each byte stream has 2 bsf records. one for the !receiver and one for the transmitter. all the !bs records are in array bs, the records for port !p are the 2*p (transmitter) and the 2*p+1 (receiver) !elements of the array. %recordformat bsf( %integer tout, destport, %c %record (mef) %name buf, %c %byteinteger state, sequence, dest, %c faultcount, number, closeflag, %c %record (meqf) bufq, %integer port) %recordformat bbf(%record (bsf) %array bs(0:bslim2), %c %record (portf) %array porta(0:bslimit)) %record (bbf) %name b %record (bsf) %name t, r %record (portf) %name port !info describing input transfer %owninteger i, x, y, valid, oldvalid, node number %owninteger lyn, nolyn %record (pe) p %routine set cursor(%integer x,y) printsymbol(k'100000') %if lyn = 0 %start printsymbol(24) %if y = 10 %start printsymbol(9); printsymbol(x); printsymbol(11) %else printsymbol(y); printsymbol(x) %finish %else ! bantom printsymbol(27) printsymbol('Y'); printsymbol(x+32) printsymbol(27) printsymbol('X'); printsymbol(y+32) %finish %end ! %routine framing %integer i %if lyn = 0 %then printsymbol(1) %else %c printsymbol(27) %and printsymbol('K') set cursor(1, 1) printstring("State of Ring Gateway") set cursor(1, 2) printstring(" Tx Rx No Dest State State Seq Flts N T S nif? ") %end %routine octal(%integer n) %integer i printsymbol((n>>i)&7+'0') %for i = 15, -3, 0 %end printstring(vsn) i = map virt(17, 4, 3); ! map buff man %if i = 0 %start printstring("buff ? ") %stop %finish node number = integer(k'060016'); ! pickup node number nbsp ser = 0 %if node number = 6 %then nbsp ser = 51 %if node number = 9 %then nbsp ser = 52 retry: -> not known %if nbsp ser = 0 i = map virt(nbsp ser, 6, 4); ! see if this is correct task %if integer(k'104002') # k'123456' %start printstring("this is not NBSP ! ") not known: prompt("NBSP Ser No (dec) ?"); read(nbsp ser) -> retry %finish p_ser = nbsp ser; p_reply = id p_a1 = varbs 2 ponoff(p); ! get the address ! vsn 8b at k'140172' printstring("Base of bs ="); octal(p_b); newline framing b == record(p_b&k'17777'!k'100000') loop: set cursor(0, 4) valid = 0 %cycle i = 4, 2, bslim2-1 x = b_bs(i)_state; y = b_bs(i+1)_state %if x # 0 %or y # 0 %start t == b_bs(i); r == b_bs(i+1) port == record(t_port&k'17777'!k'100000') write(i>>1, 2) write(t_dest, 4) spaces(2) printstring(sta(x)) printstring(cls(t_closeflag)) spaces(3) printstring(sta(y+8)) printstring(cls(r_closeflag)) spaces(2) printsymbol(hexd(t_sequence&15)); printsymbol(hexd(r_sequence&15)) spaces(2) printsymbol(hexd(t_faultcount)); printsymbol(hexd(r_faultcount)) write(port_dn, 3); write(port_dt, 3); write(port_ds, 3) printstring(nif(port_niff)) newline valid = valid+1 %finish %repeat %if valid < oldvalid %start %cycle i = valid, 1, oldvalid spaces(78); newline %repeat %finish oldvalid = valid alarm(10*60) p_ser = 0; poff(p) %if int # 0 %start %if int = 'Y' %start int = 0; nolyn = 0 lyn = 1-lyn framing %finish %if int = 'R' %then int = 0 %and framing %stop %if int='A' int = 0 %finish -> loop %endofprogram