summaryrefslogtreecommitdiff
path: root/command_line/CmdLine/Src/Envir/CLErrors.c
diff options
context:
space:
mode:
authorAsh Wolf <ninji@wuffs.org>2022-10-19 21:16:13 +0100
committerAsh Wolf <ninji@wuffs.org>2022-10-19 21:16:13 +0100
commitd1f153d34b023d81768f6087f67dbfff714bafc9 (patch)
treea694d470a60655d0cda15a70791fbdb90a2398cf /command_line/CmdLine/Src/Envir/CLErrors.c
parent775b6861666af36d317fb577cf489e2c6377f878 (diff)
downloadMWCC-d1f153d34b023d81768f6087f67dbfff714bafc9.tar.gz
MWCC-d1f153d34b023d81768f6087f67dbfff714bafc9.zip
let's commit all this before my VM blows up and nukes my work
Diffstat (limited to 'command_line/CmdLine/Src/Envir/CLErrors.c')
-rw-r--r--command_line/CmdLine/Src/Envir/CLErrors.c91
1 files changed, 84 insertions, 7 deletions
diff --git a/command_line/CmdLine/Src/Envir/CLErrors.c b/command_line/CmdLine/Src/Envir/CLErrors.c
index 76ff06f..591e30d 100644
--- a/command_line/CmdLine/Src/Envir/CLErrors.c
+++ b/command_line/CmdLine/Src/Envir/CLErrors.c
@@ -1,37 +1,114 @@
-#include "mwcc_decomp.h"
-
-static void CLGetErrorString(SInt16 errid, char *buffer) {
+#include "cmdline.h"
+static char *CLGetErrorString(SInt16 errid, char *buffer) {
+ getindstring(buffer, 12000, errid);
+ strcat(buffer, "\n");
+ return buffer;
}
static void CLMessageReporter(int flags, SInt16 errid, va_list va) {
-
+ static char stmsg[256];
+ static char stbuf[256];
+ char *ptr;
+
+ CLGetErrorString(errid, stmsg);
+ ptr = mvprintf(stbuf, sizeof(stbuf), stmsg, va);
+
+ CLStyledMessageDispatch(
+ NULL,
+ NULL,
+ 0,
+ (flags == messagetypeError) ? CLStyledMessageDispatch_Type3 : (flags == messagetypeWarning) ? CLStyledMessageDispatch_Type2 : CLStyledMessageDispatch_Type5,
+ "%",
+ ptr);
+
+ if (ptr != stbuf)
+ free(ptr);
}
void CLReportError(SInt16 errid, ...) {
-
+ va_list va;
+ va_start(va, errid);
+ CLMessageReporter(messagetypeError, errid, va);
+ va_end(va);
}
void CLReportWarning(SInt16 errid, ...) {
-
+ va_list va;
+ va_start(va, errid);
+ CLMessageReporter(messagetypeWarning, errid, va);
+ va_end(va);
}
void CLReport(SInt16 errid, ...) {
-
+ va_list va;
+ va_start(va, errid);
+ CLMessageReporter(messagetypeInfo, errid, va);
+ va_end(va);
}
void CLReportOSError(SInt16 errid, int err, ...) {
+ char *txt;
+ const char *oserr;
+ char mybuf[256];
+ char myerr[256];
+ va_list va;
+
+ va_start(va, err);
+ txt = mvprintf(mybuf, sizeof(mybuf), CLGetErrorString(errid, myerr), va);
+ va_end(va);
+ oserr = OS_GetErrText(err);
+ CLReportError(99, txt, oserr, err);
+
+ if (txt != mybuf)
+ free(txt);
}
void CLReportCError(SInt16 errid, int err_no, ...) {
+ char *txt;
+ const char *serr;
+ char mybuf[256];
+ char myerr[256];
+ va_list va;
+
+ va_start(va, err_no);
+ txt = mvprintf(mybuf, sizeof(mybuf), CLGetErrorString(errid, myerr), va);
+ va_end(va);
+
+ serr = strerror(err_no);
+ CLReportError(100, txt, serr, err_no);
+ if (txt != mybuf)
+ free(txt);
}
void CLInternalError(const char *file, int line, const char *format, ...) {
+ char mybuf[256];
+ char *txt;
+ va_list va;
+ va_start(va, format);
+ txt = mvprintf(mybuf, sizeof(mybuf), format, va);
+ va_end(va);
+ CLPrintErr("INTERNAL ERROR [%s:%d]:\n%s\n", file, line, txt);
+
+ if (txt != mybuf)
+ free(txt);
}
void CLFatalError(const char *format, ...) {
+ char mybuf[256];
+ char *txt;
+ va_list va;
+
+ va_start(va, format);
+ txt = mvprintf(mybuf, sizeof(mybuf), format, va);
+ va_end(va);
+ CLPrintErr("FATAL ERROR:\n%s\n", txt);
+
+ if (txt != mybuf)
+ free(txt);
+ exit(-123);
}