-/* $Id: errwarn.h,v 1.2 2001/05/21 20:14:58 peter Exp $
+/* $Id: errwarn.h,v 1.3 2001/05/22 20:44:32 peter Exp $
* Error and warning reporting and related functions header file.
*
* Copyright (C) 2001 Peter Johnson
void Fatal(fatal_num);
typedef enum {
- ERR_UNKNOWN = 0,
+ ERR_NONE = 0,
ERR_PARSER,
ERR_MISSING,
ERR_MISSING_ARG,
- ERR_INVALID_ARG
+ ERR_INVALID_ARG,
+ ERR_INVALID_EA,
+ ERR_INVALID_LINE,
+ ERR_EXP_SYNTAX
} err_num;
void Error(err_num, char *, ...);
typedef enum {
- WARN_UNKNOWN = 0,
+ WARN_NONE = 0,
WARN_UNREC_CHAR,
WARN_VALUE_EXCEEDS_BOUNDS
} warn_num;
void Warning(warn_num, char *, ...);
+void OutputError(void);
+void OutputWarning(void);
+
#endif
-/* $Id: errwarn.c,v 1.3 2001/05/21 20:14:58 peter Exp $
+/* $Id: errwarn.c,v 1.4 2001/05/22 20:44:32 peter Exp $
* Error and warning reporting and related functions.
*
* Copyright (C) 2001 Peter Johnson
};
static char *err_msgs[] = {
- "unknown error",
+ "",
"parser error: %s",
"missing '%1'",
"missing argument to %s",
- "invalid argument to %s"
+ "invalid argument to %s",
+ "invalid effective address",
+ "label or instruction expected at start of line",
+ "expression syntax error"
};
static char *warn_msgs[] = {
- "unknown",
+ "",
"ignoring unrecognized character '%s'",
"%s value exceeds bounds"
};
+/* hate to define these as static buffers; better solution would be to use
+ * vasprintf() to dynamically allocate, but that's not ANSI C */
+static char last_err[1024];
+static char last_warn[1024];
+static err_num last_err_num = ERR_NONE;
+static warn_num last_warn_num = WARN_NONE;
+
/* conv_unprint: convert a possibly unprintable character into a printable
* string, using standard cat(1) convention for unprintable characters. */
static char unprint[5];
va_list ap;
char *printf_str;
+ if((last_err_num != ERR_NONE) && (last_err_num != ERR_PARSER))
+ return;
+
+ last_err_num = num;
+
printf_str = process_argtypes(err_msgs[num], argtypes);
- fprintf(stderr, "filename:%u: ", line_number);
va_start(ap, argtypes);
- vfprintf(stderr, printf_str, ap);
+ vsprintf(last_err, printf_str, ap);
va_end(ap);
- fprintf(stderr, "\n");
free(printf_str);
va_list ap;
char *printf_str;
+ if(last_warn_num != WARN_NONE)
+ return;
+
+ last_warn_num = num;
+
printf_str = process_argtypes(warn_msgs[num], argtypes);
- fprintf(stderr, "filename:%u: warning: ", line_number);
va_start(ap, argtypes);
- vfprintf(stderr, printf_str, ap);
+ vsprintf(last_warn, printf_str, ap);
va_end(ap);
- fprintf(stderr, "\n");
free(printf_str);
warning_count++;
}
+void OutputError(void)
+{
+ if(last_err_num != ERR_NONE)
+ fprintf(stderr, "filename:%u: %s\n", line_number, last_err);
+ last_err_num = ERR_NONE;
+}
+
+void OutputWarning(void)
+{
+ if(last_warn_num != WARN_NONE)
+ fprintf(stderr, "filename:%u: warning: %s\n", line_number, last_warn);
+ last_warn_num = WARN_NONE;
+}
+
-/* $Id: errwarn.h,v 1.2 2001/05/21 20:14:58 peter Exp $
+/* $Id: errwarn.h,v 1.3 2001/05/22 20:44:32 peter Exp $
* Error and warning reporting and related functions header file.
*
* Copyright (C) 2001 Peter Johnson
void Fatal(fatal_num);
typedef enum {
- ERR_UNKNOWN = 0,
+ ERR_NONE = 0,
ERR_PARSER,
ERR_MISSING,
ERR_MISSING_ARG,
- ERR_INVALID_ARG
+ ERR_INVALID_ARG,
+ ERR_INVALID_EA,
+ ERR_INVALID_LINE,
+ ERR_EXP_SYNTAX
} err_num;
void Error(err_num, char *, ...);
typedef enum {
- WARN_UNKNOWN = 0,
+ WARN_NONE = 0,
WARN_UNREC_CHAR,
WARN_VALUE_EXCEEDS_BOUNDS
} warn_num;
void Warning(warn_num, char *, ...);
+void OutputError(void);
+void OutputWarning(void);
+
#endif
-/* $Id: errwarn.c,v 1.3 2001/05/21 20:14:58 peter Exp $
+/* $Id: errwarn.c,v 1.4 2001/05/22 20:44:32 peter Exp $
* Error and warning reporting and related functions.
*
* Copyright (C) 2001 Peter Johnson
};
static char *err_msgs[] = {
- "unknown error",
+ "",
"parser error: %s",
"missing '%1'",
"missing argument to %s",
- "invalid argument to %s"
+ "invalid argument to %s",
+ "invalid effective address",
+ "label or instruction expected at start of line",
+ "expression syntax error"
};
static char *warn_msgs[] = {
- "unknown",
+ "",
"ignoring unrecognized character '%s'",
"%s value exceeds bounds"
};
+/* hate to define these as static buffers; better solution would be to use
+ * vasprintf() to dynamically allocate, but that's not ANSI C */
+static char last_err[1024];
+static char last_warn[1024];
+static err_num last_err_num = ERR_NONE;
+static warn_num last_warn_num = WARN_NONE;
+
/* conv_unprint: convert a possibly unprintable character into a printable
* string, using standard cat(1) convention for unprintable characters. */
static char unprint[5];
va_list ap;
char *printf_str;
+ if((last_err_num != ERR_NONE) && (last_err_num != ERR_PARSER))
+ return;
+
+ last_err_num = num;
+
printf_str = process_argtypes(err_msgs[num], argtypes);
- fprintf(stderr, "filename:%u: ", line_number);
va_start(ap, argtypes);
- vfprintf(stderr, printf_str, ap);
+ vsprintf(last_err, printf_str, ap);
va_end(ap);
- fprintf(stderr, "\n");
free(printf_str);
va_list ap;
char *printf_str;
+ if(last_warn_num != WARN_NONE)
+ return;
+
+ last_warn_num = num;
+
printf_str = process_argtypes(warn_msgs[num], argtypes);
- fprintf(stderr, "filename:%u: warning: ", line_number);
va_start(ap, argtypes);
- vfprintf(stderr, printf_str, ap);
+ vsprintf(last_warn, printf_str, ap);
va_end(ap);
- fprintf(stderr, "\n");
free(printf_str);
warning_count++;
}
+void OutputError(void)
+{
+ if(last_err_num != ERR_NONE)
+ fprintf(stderr, "filename:%u: %s\n", line_number, last_err);
+ last_err_num = ERR_NONE;
+}
+
+void OutputWarning(void)
+{
+ if(last_warn_num != WARN_NONE)
+ fprintf(stderr, "filename:%u: warning: %s\n", line_number, last_warn);
+ last_warn_num = WARN_NONE;
+}
+
-/* $Id: errwarn.h,v 1.2 2001/05/21 20:14:58 peter Exp $
+/* $Id: errwarn.h,v 1.3 2001/05/22 20:44:32 peter Exp $
* Error and warning reporting and related functions header file.
*
* Copyright (C) 2001 Peter Johnson
void Fatal(fatal_num);
typedef enum {
- ERR_UNKNOWN = 0,
+ ERR_NONE = 0,
ERR_PARSER,
ERR_MISSING,
ERR_MISSING_ARG,
- ERR_INVALID_ARG
+ ERR_INVALID_ARG,
+ ERR_INVALID_EA,
+ ERR_INVALID_LINE,
+ ERR_EXP_SYNTAX
} err_num;
void Error(err_num, char *, ...);
typedef enum {
- WARN_UNKNOWN = 0,
+ WARN_NONE = 0,
WARN_UNREC_CHAR,
WARN_VALUE_EXCEEDS_BOUNDS
} warn_num;
void Warning(warn_num, char *, ...);
+void OutputError(void);
+void OutputWarning(void);
+
#endif