aboutsummaryrefslogtreecommitdiff
path: root/engines/glk/alan3/syserr.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2019-06-25 21:18:44 -0700
committerPaul Gilbert2019-07-06 15:27:07 -0700
commitcd7cf4141425e3e77b164d2dbcbae8de1eacb035 (patch)
tree97caacd0a7e26488844ada4e7cd529cae482526a /engines/glk/alan3/syserr.cpp
parentcfd66173bad8bb23ba7ba2d531fc5e98872212ce (diff)
downloadscummvm-rg350-cd7cf4141425e3e77b164d2dbcbae8de1eacb035.tar.gz
scummvm-rg350-cd7cf4141425e3e77b164d2dbcbae8de1eacb035.tar.bz2
scummvm-rg350-cd7cf4141425e3e77b164d2dbcbae8de1eacb035.zip
GLK: ALAN3: Initial files commit
Diffstat (limited to 'engines/glk/alan3/syserr.cpp')
-rw-r--r--engines/glk/alan3/syserr.cpp103
1 files changed, 103 insertions, 0 deletions
diff --git a/engines/glk/alan3/syserr.cpp b/engines/glk/alan3/syserr.cpp
new file mode 100644
index 0000000000..2fceba6059
--- /dev/null
+++ b/engines/glk/alan3/syserr.cpp
@@ -0,0 +1,103 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "glk/alan3/syserr.h"
+#include "glk/alan3/current.h"
+#include "glk/alan3/debug.h"
+#include "glk/alan3/glkio.h"
+#include "glk/alan3/output.h"
+#include "glk/alan3/utils.h"
+
+namespace Glk {
+namespace Alan3 {
+
+static void (*handler)(char *) = NULL;
+
+/*----------------------------------------------------------------------*/
+static void runtimeError(char *errorClassification, char *errorDescription, char *blurb) {
+ output("$n$nAs you enter the twilight zone of Adventures, you stumble \
+and fall to your knees. In front of you, you can vaguely see the outlines \
+of an Adventure that never was.$n$n");
+ output(errorClassification);
+ output(errorDescription);
+ newline();
+
+ if (current.sourceLine != 0) {
+ printf("At source line %d in '%s':\n", current.sourceLine, sourceFileName(current.sourceFile));
+ printf("%s", readSourceLine(current.sourceFile, current.sourceLine));
+ }
+
+ newline();
+ output(blurb);
+
+ terminate(2);
+}
+
+
+/*======================================================================*/
+void setSyserrHandler(void (*f)(char *))
+{
+ handler = f;
+}
+
+
+/*======================================================================*/
+// TODO Make syserr() use ... as printf()
+void syserr(char *description)
+{
+ lin = 0;
+ if (handler == NULL) {
+ char *blurb = "<If you are the creator of this piece of Interactive Fiction, \
+please help debug this Alan system error. Collect *all* the sources, and, if possible, an \
+exact transcript of the commands that led to this error, in a zip-file and send \
+it to support@alanif.se. Thank you!>";
+ runtimeError("SYSTEM ERROR: ", description, blurb);
+ } else
+ handler(description);
+}
+
+
+/*======================================================================*/
+void apperr(char *description)
+{
+ if (handler == NULL) {
+ char *blurb = "<If you are playing this piece of Interactive Fiction, \
+please help the author to debug this programming error. Send an exact \
+transcript of the commands that led to this error to the author. Thank you! \
+If you *are* the author, then you have to figure this out before releasing the game.>";
+ runtimeError("APPLICATION ERROR: ", description, blurb);
+ } else
+ handler(description);
+}
+
+/*======================================================================*/
+void playererr(char *description)
+{
+ if (handler == NULL) {
+ char *blurb = "<You have probably done something that is not exactly right.>";
+ runtimeError("PLAYER ERROR: ", description, blurb);
+ } else
+ handler(description);
+}
+
+} // End of namespace Alan3
+} // End of namespace Glk