SRI-NOSC/ncpk/contab.c
#
#include "param.h"
#include "net_contab.h"
#include "net_net.h"
#ifdef SCCSID
/* SCCS PROGRAM IDENTIFICATION STRING */
char id_contab[] "~|^`contab.c\tV3.9E0\tJan78\n";
#endif
/*name:
entcontab
function:
make an entry in the read or write connection table
algorithm:
search the connection table passed (hstlink & 0200) for a zero
entry. If found stick the hostlink and socket ptr into
their resp. locations of the entry
parameters:
hstlink - word contain the host(hibyte) and link(lobyte) for the entry
siptr - address of the socket to be associated with the host link
pair.
returns:
a pointer to the entry found
globals:
none
calls:
incontab - to look for a zero entry in the table
called by:
wf_setup
history:
initial coding 1/7/75 by S. F. Holmgren
modified 10/01/75 by S. F. Holmgren
*/
entcontab( hstlink,siptr )
{
/* Tries to make an entry in contab returns ptr to conentry if
found and empty entry or 0 if table full */
register struct conentry *conptr;
register int sps; /* for storing ps */
sps = PS->integ; /* save processor prio */
spl_imp(); /* insure integrity of conn tab */
if( (conptr = incontab( (hstlink&0200),0 ))) /* srch for empty entry */
{
conptr->c_hostlink = hstlink;
conptr->c_siptr = siptr;
}
PS->integ = sps; /* give processor back */
return( conptr );
}
/*name:
incontab
function:
searches the connection table, which is determined by
the 0200 bit of the word passed .
algorithm:
determine which connection table to look in
starts at the beginning word of the connection table and
searches thru for the first occurance of the srchword
parameters:
srchwd - the word to look for in the conection table
iptr - possible second match word if != 0
returns:
pointer to the found entry
or 0 if no match could be found
globals:
none
calls:
return( system )
called by:
entcontab
imphostlink
wf_mod
wf_setup
daedes
history:
initial coding 1/7/75 by S. F. Holmgren
modified 4/28/76 check for siptr match if iptr non-zero
by S. F. Holmgren
modified 10/1/75 by S. F. Holmgren
*/
incontab( srchwd,iptr )
{
/* This searches through the connection table looking for a match
between c_hostlink and srchwrd */
register struct conentry *contab;
register struct conentry *conptr;
/* get the correct entry table from bit 0200 of srchwrd. if
bit on use write connection table else read connection tab
*/
contab = (srchwd & 0200) ? &w_contab : &r_contab;
/* if caller is looking for a zero entry then look for a zero entry in
proper table
*/
if( (srchwd & 0377) == 0200 ) srchwd = 0;
for( conptr = &contab[0]; conptr < &contab[CONSIZE]; conptr++ )
if( (srchwd == conptr->c_hostlink) && (iptr == 0 || iptr == conptr->c_siptr) )
{
return( conptr );
}
return( 0 );
}
/*name:
rmcontab
function:
to make the connection entry available for further use
algorithm:
stick a zero into the hostlink field of the entry passed
parameters:
pointer to a connection table entry
returns:
nothing
globals:
none
calls:
nothing
called by:
daedes
history:
initial coding 1/7/75 by S. F. Holmgren
*/
rmcontab( entryp )
{
/* This is to be used in conjunction with incontab to search
and remove entries from the connection table */
if( entryp )
entryp->c_hostlink = 0;
}
/*name:
infiletab
function:
look up an entry in the file table
algorithm:
step thru the the file table looking for a match with the srchwd
parameters:
srchwd - and entry in the file table to look for
returns:
if entry is found : pointer to entry : else : 0
globals:
file_tab
calls:
nothing
called by:
ncpwrite
netopen
daedes
history:
initial coding 1/7/75 by S. F. Holmgren
*/
infiletab( srchwd )
{
register *p;
/* srch all entries */
for( p = &file_tab[0]; p < &file_tab[ FILSIZE ]; p++ )
if( *p == srchwd ) /* match buddy */
return( p ); /* sure sam - here */
return( 0 ); /* return not found */
}