windows-nt/Source/XPSP1/NT/sdktools/hivepp/error.c
2020-09-26 16:20:57 +08:00

119 lines
3 KiB
C

/************************************************************************/
/* */
/* RCPP - Resource Compiler Pre-Processor for NT system */
/* */
/* ERROR.C - Error Handler Routines */
/* */
/* 04-Dec-90 w-BrianM Update for NT from PM SDK RCPP */
/* */
/************************************************************************/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "rcpptype.h"
#include "rcppdecl.h"
#include "rcppext.h"
#include "msgs.h"
/* defines for message types */
#define W_MSG 4000
#define E_MSG 2000
#define F_MSG 1000
static char Errbuff[128] = {
0};
/************************************************************************/
/* Local Function Prototypes */
/************************************************************************/
void message (int, int, char *);
/************************************************************************/
/* ERROR - Print an error message to STDOUT. */
/************************************************************************/
#define MAX_ERRORS 100
void error (int msgnum)
{
message(E_MSG, msgnum, Msg_Text);
if (++Nerrors > MAX_ERRORS) {
Msg_Temp = GET_MSG (1003);
SET_MSG (Msg_Text, Msg_Temp, MAX_ERRORS);
fatal(1003); /* die - too many errors */
}
return;
}
/************************************************************************/
/* FATAL - Print an error message to STDOUT and exit. */
/************************************************************************/
void fatal (int msgnum)
{
message(F_MSG, msgnum, Msg_Text);
exit(++Nerrors);
}
/************************************************************************/
/* WARNING - Print an error message to STDOUT. */
/************************************************************************/
void warning (int msgnum)
{
message(W_MSG, msgnum, Msg_Text);
}
/************************************************************************/
/* MESSAGE - format and print the message to STDERR. */
/* The msg goes out in the form : */
/* <file>(<line>) : <msgtype> <errnum> <expanded msg> */
/************************************************************************/
void message(int msgtype, int msgnum, char *msg)
{
char mbuff[512];
register char *p = mbuff;
register char *msgname;
char msgnumstr[32];
if (Linenumber > 0 && Filename) {
SET_MSG (p, "%s(%d) : ", Filename, Linenumber);
p += strlen(p);
}
if (msgtype) {
switch (msgtype)
{
case W_MSG:
msgname = GET_MSG(MSG_WARN);
break;
case E_MSG:
msgname = GET_MSG(MSG_ERROR);
break;
case F_MSG:
msgname = GET_MSG(MSG_FATAL);
break;
}
strcpy(p, msgname);
p += strlen(msgname);
SET_MSG(msgnumstr, " %s%d: ", "RC", msgnum);
strcpy(p, msgnumstr);
p += strlen(msgnumstr);
strcpy(p, msg);
p += strlen(p);
}
fwrite(mbuff, strlen(mbuff), 1, stderr);
fwrite("\n", 1, 1, stderr);
if (Srclist && Errfl) {
/* emit messages to error il file too */
fwrite(mbuff, strlen(mbuff), 1, Errfl);
fwrite("\n", 1, 1, Errfl);
}
return;
}