.\" Copyright (c) 1988 Massachusetts Institute of Technology,
.\" Student Information Processing Board.  
.\"
.TH COM_ERR 3 "22 Nov 1988" SIPB
.SH NAME
com_err \- common error display routine
.SH SYNOPSIS
.nf
 #include <et/com_err.h>
void (*\fIproc\fR) (const char *, long, const char *, va_list);
.PP
void com_err (const char *whoami, long code, const char *format, ...);
.PP
proc = set_com_err_hook (proc);
.PP
proc = reset_com_err_hook ();
.PP
void initialize_XXXX_error_table ();
.fi
.SH DESCRIPTION
.I Com_err
displays an error message on the standard error stream
.I stderr
(see
.IR stdio (3S))
composed of the
.I whoami
string, which should specify the program name or some subportion of
a program, followed by an error message generated from the
.I code
value (derived from
.IR compile_et (1)),
and a string produced using the
.I format
string and any following arguments, in the same style as
.IR fprintf (3).

The behavior of
.I com_err
can be modified using
.I set_com_err_hook;
this defines a procedure which is called with the arguments passed to
.I com_err,
instead of the default internal procedure which sends the formatted
text to error output.  Thus the error messages from a program can all
easily be diverted to another form of diagnostic logging, such as
.IR syslog (3).
.I Reset_com_err_hook
may be used to restore the behavior of
.I com_err
to its default form.  Both procedures return the previous ``hook''
value.  These ``hook'' procedures must have the declaration given for
.I proc
above in the synopsis.

The
.I initialize_XXXX_error_table
routine is generated mechanically by
.IR compile_et (1)
from a source file containing names and associated strings.  Each
table has a name of up to four characters, which is used in place of
the
.B XXXX
in the name of the routine.  These routines should be called before
any of the corresponding error codes are used, so that the
.I com_err
library will recognize error codes from these tables when they are
used.

The
.B com_err.h
header file should be included in any source file that uses routines
from the
.I com_err
library; executable files must be linked using
.I ``-lcom_err''
in order to cause the
.I com_err
library to be included.

.\" .IR for manual entries
.\" .PP for paragraph breaks

.SH "SEE ALSO"
compile_et (1), syslog (3).

Ken Raeburn, "A Common Error Description Library for UNIX".
