|
|
researchv9-SUN3(old)
/*
** Initialise structures for Channel talking
*/
#ifndef Blit
#include <signal.h>
#endif Blit
#include "pconfig.h"
#include "proto.h"
#include "packets.h"
#define DECLARE /* Define statistics array here */
#include "pstats.h"
Pch_p pconvsend; /* Pointer to end of pconvs */
Pbyte pseqtable[2*SEQMOD]; /* Table of sequence numbers */
int
pinit(channels)
register int channels;
{
register int i;
register Pch_p pcp; /*SFBOTCH*/
# ifndef Blit
if ( channels > MAXPCHAN )
return(-1);
# endif
if ( Pscanrate == 0 || Prtimeout == 0 || Pxtimeout == 0 ) {
Pscanrate = PSCANRATE;
Prtimeout = PRTIMEOUT;
Pxtimeout = PXTIMEOUT;
}
pconvsend = &pconvs[channels];
while ( channels-- > 0 ) {
/*SFBOTCHregister Pch_p*/ pcp = &pconvs[channels];
pcp->nextpkt = pcp->pkts;
pcp->freepkts = NPCBUFS;
for ( i = 0 ; i < NPCBUFS ; i++) {
pcp->pkts[i].state = PX_NULL;
pcp->pkts[i].timo = 0;
pcp->pkts[i].pkt.header = 0;
pcp->pkts[i].pkt.dsize = 0;
}
}
for ( i = 0 ; i < 2 * SEQMOD ; i++)
pseqtable[i] = i % SEQMOD;
# ifndef Blit
signal(SIGALRM, ptimeout);
Ptflag = 0;
# endif
return(0);
}
#ifdef PDEBUG
FILE * ptracefd = stderr;
void
ptracepkt(pkp, s)
Pkt_p pkp;
char * s;
{
register Pbyte *ucp;
register int size;
fprintf(ptracefd, "tracepkt: %s -- ", s);
if ( (size = pkp->dsize) > 10 )
size = 10;
size += 2 + EDSIZE;
for ( ucp = (Pbyte * )pkp ; size--; )
fprintf(ptracefd, "<%o>", *ucp++);
fprintf(ptracefd, "\n");
}
static struct Pktstate log[PKTHIST];
static Pks_p inlog = log;
static Pks_p outlog = log;
static short logflag;
void
plogpkt(pkp, ident)
Pkt_p pkp;
unsigned char ident;
{
inlog->pkt = *pkp;
inlog->state = ident;
if ( ++inlog >= &log[PKTHIST] )
inlog = log;
if ( logflag ) {
outlog = inlog;
logflag = 0;
}
if ( inlog == outlog )
logflag++;
}
void
pdumphist(s)
char * s;
{
fprintf(ptracefd, "\nDumphist: %s\n", s);
while ( outlog != inlog || logflag ) {
logflag = 0;
ptracepkt(&outlog->pkt, outlog->state == PLOGIN ? "recv" : "xmit");
if ( ++outlog >= &log[PKTHIST] )
outlog = log;
}
fflush(ptracefd);
}
#endif PDEBUG
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.