/* E R R O R A N D D I A G N O S T I C R O U T I N E S */
#include "lint.h"
+#if __STDC__
+#include <stdarg.h>
+#else
#include <varargs.h>
+#endif
#include <system.h>
#ifndef LINT
#include <em.h>
static _error();
+#if __STDC__
+/*VARARGS*/
+error(char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ {
+ _error(ERROR, dot.tk_file, dot.tk_line, fmt, ap);
+ }
+ va_end(ap);
+}
+
+/*VARARGS*/
+expr_error(struct expr *expr, char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ {
+ if (!(expr->ex_flags & EX_ERROR)) {
+ /* to prevent proliferation */
+ _error(ERROR, expr->ex_file, expr->ex_line, fmt, ap);
+ expr->ex_flags |= EX_ERROR;
+ }
+ }
+ va_end(ap);
+}
+
+/*VARARGS*/
+lexstrict(char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ {
+ _error(STRICT, FileName, LineNumber, fmt, ap);
+ }
+ va_end(ap);
+}
+
+/*VARARGS*/
+strict(char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ {
+ _error(STRICT, dot.tk_file, dot.tk_line, fmt, ap);
+ }
+ va_end(ap);
+}
+
+/*VARARGS*/
+expr_strict(struct expr *expr, char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ {
+ if (!(expr->ex_flags & EX_ERROR)) {
+ /* to prevent proliferation */
+ _error(STRICT, expr->ex_file, expr->ex_line, fmt, ap);
+ }
+ }
+ va_end(ap);
+}
+
+#ifdef DEBUG
+/*VARARGS*/
+debug(char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ {
+ _error(DO_DEBUG, dot.tk_file, dot.tk_line, fmt, ap);
+ }
+ va_end(ap);
+}
+#endif /* DEBUG */
+
+/*VARARGS*/
+warning(char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ {
+ _error(WARNING, dot.tk_file, dot.tk_line, fmt, ap);
+ }
+ va_end(ap);
+}
+
+/*VARARGS*/
+expr_warning(struct expr *expr, char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ {
+ if (!(expr->ex_flags & EX_ERROR)) {
+ /* to prevent proliferation */
+ _error(WARNING, expr->ex_file, expr->ex_line, fmt, ap);
+ }
+ }
+ va_end(ap);
+}
+
+#ifdef LINT
+
+/*VARARGS*/
+def_warning(struct def *def, char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ {
+ _error(WARNING, def->df_file, def->df_line, fmt, ap);
+ }
+ va_end(ap);
+}
+
+
+/*VARARGS*/
+hwarning(char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ {
+ if (loptions['h'])
+ _error(WARNING, dot.tk_file, dot.tk_line, fmt, ap);
+ }
+ va_end(ap);
+}
+
+/*VARARGS*/
+awarning(char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ {
+ if (loptions['a'])
+ _error(WARNING, dot.tk_file, dot.tk_line, fmt, ap);
+ }
+ va_end(ap);
+}
+
+#endif /* LINT */
+
+/*VARARGS*/
+lexerror(char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ {
+ _error(ERROR, FileName, LineNumber, fmt, ap);
+ }
+ va_end(ap);
+}
+
+/*VARARGS*/
+lexwarning(char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ {
+ _error(WARNING, FileName, LineNumber, fmt, ap);
+ }
+ va_end(ap);
+}
+
+/*VARARGS*/
+crash(char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ {
+ _error(CRASH, FileName, LineNumber, fmt, ap);
+ }
+ va_end(ap);
+
+ C_close();
+#ifdef DEBUG
+ sys_stop(S_ABORT);
+#else /* DEBUG */
+ sys_stop(S_EXIT);
+#endif /* DEBUG */
+ /* NOTREACHED */
+}
+
+/*VARARGS*/
+fatal(char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ {
+ _error(FATAL, FileName, LineNumber, fmt, ap);
+ }
+ va_end(ap);
+
+ if (C_busy()) C_close();
+ sys_stop(S_EXIT);
+ /*NOTREACHED*/
+}
+#else
/*VARARGS*/
error(va_alist) /* fmt, args */
va_dcl
va_start(ap);
{
- _error(ERROR, dot.tk_file, dot.tk_line, ap);
+ char *fmt = va_arg(ap, char *);
+ _error(ERROR, dot.tk_file, dot.tk_line, fmt, ap);
}
va_end(ap);
}
va_start(ap);
{
register struct expr *expr = va_arg(ap, struct expr *);
+ char *fmt = va_arg(ap, char *);
if (!(expr->ex_flags & EX_ERROR)) {
/* to prevent proliferation */
- _error(ERROR, expr->ex_file, expr->ex_line, ap);
+ _error(ERROR, expr->ex_file, expr->ex_line, fmt, ap);
expr->ex_flags |= EX_ERROR;
}
}
va_start(ap);
{
- _error(STRICT, FileName, LineNumber, ap);
+ char *fmt = va_arg(ap, char *);
+ _error(STRICT, FileName, LineNumber, fmt, ap);
}
va_end(ap);
}
va_start(ap);
{
- _error(STRICT, dot.tk_file, dot.tk_line, ap);
+ char *fmt = va_arg(ap, char *);
+ _error(STRICT, dot.tk_file, dot.tk_line, fmt, ap);
}
va_end(ap);
}
va_start(ap);
{
struct expr *expr = va_arg(ap, struct expr *);
+ char *fmt = va_arg(ap, char *);
if (!(expr->ex_flags & EX_ERROR)) {
/* to prevent proliferation */
- _error(STRICT, expr->ex_file, expr->ex_line, ap);
+ _error(STRICT, expr->ex_file, expr->ex_line, fmt, ap);
}
}
va_end(ap);
va_start(ap);
{
- _error(DO_DEBUG, dot.tk_file, dot.tk_line, ap);
- /* _error(DO_DEBUG, NILEXPR, ap);
- */
+ char *fmt = va_arg(ap, char *);
+ _error(DO_DEBUG, dot.tk_file, dot.tk_line, fmt, ap);
}
va_end(ap);
}
va_start(ap);
{
- _error(WARNING, dot.tk_file, dot.tk_line, ap);
- /* _error(WARNING, NILEXPR, ap);
- */
+ char *fmt = va_arg(ap, char *);
+ _error(WARNING, dot.tk_file, dot.tk_line, fmt, ap);
}
va_end(ap);
}
va_start(ap);
{
struct expr *expr = va_arg(ap, struct expr *);
+ char *fmt = va_arg(ap, char *);
if (!(expr->ex_flags & EX_ERROR)) {
/* to prevent proliferation */
- _error(WARNING, expr->ex_file, expr->ex_line, ap);
+ _error(WARNING, expr->ex_file, expr->ex_line, fmt, ap);
}
}
va_end(ap);
va_start(ap);
{
register struct def *def = va_arg(ap, struct def *);
+ char *fmt = va_arg(ap, char *);
- _error(WARNING, def->df_file, def->df_line, ap);
+ _error(WARNING, def->df_file, def->df_line, fmt, ap);
}
va_end(ap);
}
va_start(ap);
{
+ char *fmt = va_arg(ap, char *);
if (loptions['h'])
- _error(WARNING, dot.tk_file, dot.tk_line, ap);
+ _error(WARNING, dot.tk_file, dot.tk_line, fmt, ap);
}
va_end(ap);
}
va_start(ap);
{
+ char *fmt = va_arg(ap, char *);
if (loptions['a'])
- _error(WARNING, dot.tk_file, dot.tk_line, ap);
+ _error(WARNING, dot.tk_file, dot.tk_line, fmt, ap);
}
va_end(ap);
}
va_start(ap);
{
- _error(ERROR, FileName, LineNumber, ap);
+ char *fmt = va_arg(ap, char *);
+ _error(ERROR, FileName, LineNumber, fmt, ap);
}
va_end(ap);
}
va_start(ap);
{
- _error(WARNING, FileName, LineNumber, ap);
+ char *fmt = va_arg(ap, char *);
+ _error(WARNING, FileName, LineNumber, fmt, ap);
}
va_end(ap);
}
va_start(ap);
{
- _error(CRASH, FileName, LineNumber, ap);
+ char *fmt = va_arg(ap, char *);
+ _error(CRASH, FileName, LineNumber, fmt, ap);
}
va_end(ap);
va_start(ap);
{
- _error(FATAL, FileName, LineNumber, ap);
+ char *fmt = va_arg(ap, char *);
+ _error(FATAL, FileName, LineNumber, fmt, ap);
}
va_end(ap);
sys_stop(S_EXIT);
/*NOTREACHED*/
}
+#endif
static
-_error(class, fn, ln, ap)
+_error(class, fn, ln, fmt, ap)
int class;
char *fn;
unsigned int ln;
+ char *fmt;
va_list ap;
{
char *remark;
- char *fmt = va_arg(ap, char *);
/* check visibility of message */
switch (class) {