/* ewatch.c L. Stewart February 20, 1983 4:15 PM */ extern Alloc(); static int dhost; static int leftover, any; struct ccb { char cmda; char *addra; char counta; char stata; }; struct ccb rxccb; int buf[130]; main() { char c; InitOS(); dhost = 0x004a; wf("EtherWatch.\r"); for(;;) { wf("@ "); while (!Chav()) Block(); c = GetChar(); switch (c) { case 'h': host(); break; case 'i': initew(); break; case 'l': listen(); break; case 'p': PutStat(" req"); break; case 'z': zerobuf(); break; default: help(); break; }; }; }; static help() { wf("h: host, i: init, l: listen, p: print, z: zerobuf\r"); }; static zerobuf() { Zero(buf, 130); }; static host() { wf(" host: "); dhost = gethex(); wf1(" (= %x)\r", dhost); }; static int gethex() { int v; v = 0; any = 0; for (;;) { eGetChar(); if (IsDigit(leftover)) { v = (v<<4); v += (leftover-'0'); any = 1; continue; }; leftover = LC(leftover); if (leftover>='a' && leftover<='f') { v = (v<<4); v += (leftover-'a'+10); any = 1; continue; }; break; }; return(v); }; static int eGetChar() /* GetChar with echo */ { leftover = GetChar() & 0177; PutCRChar(leftover); return(leftover); }; initew() { SLCInit(dhost); }; listen() { rxccb.cmda = 0x00; rxccb.addra = buf; rxccb.counta = 0; rxccb.stata = 0; SLRStart(&rxccb); for (;;) { if (Chav()) { GetChar(); PutStat("fail"); break; }; if (rxccb.stata) { PutStat(" ok"); break; }; }; }; PutStat(s) char *s; { int i; wf1("%s", s); wf4("%02x %04x %02x %02x\r", rxccb.cmda, rxccb.addra, rxccb.counta, rxccb.stata); for (i = 0; i<12; i+=1) { wf1("%04x ", buf[i]); }; wfcr(); };