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

157 lines
3.1 KiB
C

/* asmerr.c -- microsoft 80x86 assembler
**
** microsoft (r) macro assembler
** copyright (c) microsoft corp 1986. all rights reserved
**
** randy nevin
**
** 10/90 - Quick conversion to 32 bit by Jeff Spencer
*/
#include <stdio.h>
#include <string.h>
#include "asm86.h"
#include "asmfcn.h"
#include "asmmsg.h"
#define MSGLEN 50
static char errstring[MSGLEN + 1];
extern char FAR * FAR messages[];
extern short FAR msgnum[];
static USHORT badoff;
/*** errordisplay - display error
*
* errordisplay();
*
* Entry debug = debug output flag
* pass2 = TRUE if pass 2
* listquiet = FALSE if error output to console
* Exit
* Returns
* Calls
*/
VOID PASCAL
errordisplay ()
{
if (pass2 || fPass1Err || debug) {
if (lsting) {
error_line (lst.fil, pFCBCur->fname, errorlineno);
fputs(NLINE, lst.fil);
}
}
if (!listquiet){
error_line (ERRFILE, pFCBCur->fname, errorlineno);
fputs("\n", ERRFILE);
}
if (pass2)
if (warnCode > 0){ /* if its not a serve error */
/* and were interested in this level*/
if (warnCode <= warnlevel)
warnnum++;
}
else
errornum++;
else if (fPass1Err)
errornum++;
}
VOID PASCAL CODESIZE
error (
USHORT code,
UCHAR *str
){
if (errorcode && code != E_LTL)
return;
fPass1Err = code & E_PASS1;
warnCode = ((code >> 12) & 0x3);
code &= E_ERRMASK;
if (warnCode > warnlevel)
/* don't bother with this warning; just return */
return;
errorcode = code;
if (str)
strncpy (strcpy(errstring, ": ")+2, str, MSGLEN-2);
else
*errstring = 0;
}
VOID PASCAL CODESIZE
errorn (
USHORT code
){
error (code,naim.pszName);
}
VOID PASCAL CODESIZE
errorc (
USHORT code
){
error (code,(char *)0);
}
VOID PASCAL
ferrorc (
USHORT code
){
error (code,(char *)0);
}
VOID PASCAL CODESIZE
errorcSYN ()
{
error (E_SYN,(char *)0);
}
/*** error_line - print error message
*
* error_line (code, l, file, line)
*
* Entry l = listing file
* line = line number in source or include file
*/
VOID PASCAL
error_line (
FILE *l,
UCHAR *file,
short line
){
static char mpWarnCode[3] = {'2', '4', '5'};
char msgstring[MSGLEN+1], messT[MSGLEN+1];
if (!messages[errorcode])
messages[errorcode] = __FMSG_TEXT(msgnum[errorcode]);
STRNFCPY(msgstring, (errorcode < E_MAX)? messages[errorcode]:
(char FAR *) __NMSG_TEXT(ER_UNK));
if (errorcode == E_JOR) {
strcpy(messT, msgstring);
sprintf(msgstring, messT, (long) CondJmpDist);
}
fprintf(l, __NMSG_TEXT(ER_STR), file, line,
warnCode > 0 ? "warning" : "error",
mpWarnCode[warnCode], (SHORT)(errorcode - 1),
msgstring, errstring);
}