141 lines
4 KiB
C
141 lines
4 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 "rc.h"
|
|
#include "rcmsgs.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, PCHAR);
|
|
|
|
|
|
/************************************************************************/
|
|
/* 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, sizeof(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);
|
|
quit(NULL);
|
|
}
|
|
|
|
|
|
/************************************************************************/
|
|
/* 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,
|
|
PCHAR msg
|
|
)
|
|
{
|
|
static CHAR mbuff[512];
|
|
static CHAR mbuffT[512];
|
|
PCHAR p = mbuff;
|
|
PCHAR pT;
|
|
PCHAR msgname;
|
|
CHAR msgnumstr[32];
|
|
|
|
if (Linenumber > 0 && Filename) {
|
|
wsprintfA(p, "%ws(%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;
|
|
}
|
|
/* remove CR and LF from message */
|
|
for (pT = msgname ; *pT && *pT != '\n' && *pT != '\r' ; pT++)
|
|
;
|
|
*pT = '\0';
|
|
strcpy(p, msgname);
|
|
p += strlen(msgname);
|
|
wsprintfA(msgnumstr, " %s%d: ", "RC", msgnum);
|
|
strcpy(p, msgnumstr);
|
|
p += strlen(msgnumstr);
|
|
strcpy(p, msg);
|
|
p += strlen(p);
|
|
}
|
|
|
|
p = mbuff;
|
|
pT = mbuffT;
|
|
while (*p) {
|
|
if (*p == '\\' && p[1] == '\\')
|
|
p++;
|
|
*pT++ = *p++;
|
|
}
|
|
|
|
*pT = '\0';
|
|
p = mbuffT; // error message to print
|
|
|
|
if (lpfnMessageCallback)
|
|
(*lpfnMessageCallback)(0, 0, mbuff);
|
|
if (hWndCaller) {
|
|
if (SendMessageA(hWndCaller, WM_RC_ERROR, TRUE, (LPARAM) mbuff) != 0)
|
|
quit("\n");
|
|
}
|
|
return;
|
|
}
|