SRI-NOSC/ncpd/logstat.c
#
/* logstat.c */
/* globals declared in this file:
NONE.
functions declared in this file:
log_time
log_asc
log_err
log_bin
log_init
statist
wr_stat
*/
/* SCCS PROGRAM IDENTIFICATION STRING */
char id_logstat[] "~|^`logstat.c\tV3.9E0\tJan78\n";
/*name:
log_time
function:
prints the date and time on the standard output.
algorithm:
calls time to get the standard sytem time.
converts it via ctime.
prints the resulting string via printf.
parameters:
none.
returns:
nothing.
globals:
none.
calls:
time (sys)
ctime (sys)
printf (sys)
called by:
log_err
log_bin
log_asc
history:
intial coding 12/27/74 by G. R. Grossman
simplified 4Jun77 by J. S. Kravitz
*/
log_time()
{
long t; /* gets the result from time */
time(&t); /* get system time */
printf ("%-16.16s", ctime(&t)+4); /* Mmm dd hh:mm:ss */
}
/*name:
log_asc
function:
logs an ascii string.
algorithm:
writes time in the log via log_time.
writes the string followed by a new line on the standard output
via printf.
parameters:
s pointer to a nul-terminated ascii string.
returns:
nothing.
globals:
none.
calls:
log_time
printf (sys)
called by:
many functions.
history:
initial coding 12/28/74 by G. R. Grossman
*/
log_asc(s)
char *s;
{
log_time(); /* put time in log */
printf("%s\n",s); /* print string followed by a new line */
}
/*name:
log_err
function:
logs the current system error message.
algorithm:
logs the time via log_time.
prints the current system error message and a calller-supplied
string via perror.
parameters:
s pointer to a nul-terminated ascii string to be passed to
perror.
returns:
nothing.
globals:
errno which is supplied by the system and used by perror.
calls:
log_time
perror (sys)
called by:
many functions.
history:
initial coding 12/28/74 by G. R. Grossman
*/
log_err(s)
char *s;
{
log_time();
perror(s); /* pass calller's string to perror */
}
/*name:
log_bin
function:
logs a string and a vector of bytes.
algorithm:
logs time via log_time.
prints the string on the standard output via printf.
prints the bytes of the vector in octal, 8 per line, via printf.
duplicate lines are lined up under previous line.
parameters:
s pointer to a nul-terminated header string to be written in
the log.
v pointer to a vector of bytes whose octal representation is
to be written in the log.
n number of bytes of v whose octal representation is to be
written in the log.
returns:
nothing.
globals:
none.
calls:
log_time
printf (sys)
called by:
many functions.
history:
initial coding 12/28/74 by G. R. Grossman
modified 4Jun77 by J. S. Kravitz to move printed octal
numbers to the right of the :, rather than under it
*/
log_bin(s,v,n)
char *s,
*v;
int n;
{
register int i, /* counts bytes per line */
nb; /* counts total bytes printed */
register char *p; /* points to bytes to be printed */
log_time(); /* log the time */
printf("%25.25s:",s); /* log the string and ":" */
p = v; /* point at vector to be printed */
nb = n; /* get count of bytes to be printed */
while ( nb > 0 ) /* loop while bytes to print */
{
for ( i = 0 ; nb && (i<8) ; i++ ) /* loop while bytes to
print and have
printed <16 */
{
printf("%3o ",(*p++ & 0377)); /* print a byte */
--nb; /* decrement byte count */
}
/*
* terminate with new line. if there is to be more
* printed, space out for next line
*/
printf("\n%s", nb?"\t\t\t....\t\t ":"");
}
}
/*name:
log_init
function:
intialize the log file
algorithm:
write the process ID of the largedaemon on a line by itself
write a log header message
parameters:
none
globals:
none
calls:
log_asc to write the header message
log_time to timestamp the pid line
printf to write the process ID
get_pid (sys) to get the process ID
called by:
main
history:
initial coding 3/2/77 by S.M. Abraham
Log message modified 9May77 JSK
process id put on timestamped line after init line
01Feb78 J.S.Goldberg
*/
log_init()
{
/* NOTE: netstat DEPENDS on the first line of the */
/* log file containing only the (decimal) number */
/* of the daemon's pid. leave it like this (ecch) */
/* p.s., netstat may not be the only one! */
printf("%d\n", getpid() );
log_asc("Unix NCP Initialization");
log_time();
printf("Daemon process number: %d\n",getpid());
}
/*name:
statist
function:
increments a counter in the statistics vector and updates the log
when necessary.
algorithm:
increments the given address; if this overflows (to zero):
decrements the counter.
writes the status vector out via wr_stat (which also
clears it).
parameters:
addr address of a counter in the statistics structure measure.
returns:
nothing.
globals:
measure=
calls:
wr_stat
called by:
many functions.
history:
initial coding 12/28/74 by G. R. Grossman
*/
statist(addr)
int *addr;
{
if ( ++(*addr) == 0 ) /* does incrementing overflow
the counter? */
{
--(*addr); /* decrement it */
wr_stat(); /* write and clear statistics vector */
}
}
/*name:
wr_stat
function:
writes the accumulated statistics in the log and zeroes the counters.
algorithm:
currently unimplemented.
parameters:
returns:
globals:
calls:
called by:
history:
initial coding 1/8/75 by G. R. Grossman
*/
wr_stat()
{
}