/************************************************************************/ /* */ /* 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 : */ /* () : */ /************************************************************************/ 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; }